Version 1.9.0-dev.10.0
svn merge -r 44015:44223 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
git-svn-id: http://dart.googlecode.com/svn/trunk@44224 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index 9656d5c..5585838 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -3551,6 +3551,8 @@
<p>
The proposed return type for the method.
+ If the returned element does not have a declared return type,
+ this field will contain an empty string.
</p>
</dd><dt class="field"><b><i>names ( List<String> )</i></b></dt><dd>
diff --git a/pkg/analysis_server/lib/src/analysis_logger.dart b/pkg/analysis_server/lib/src/analysis_logger.dart
index e87bc2a..5f73552 100644
--- a/pkg/analysis_server/lib/src/analysis_logger.dart
+++ b/pkg/analysis_server/lib/src/analysis_logger.dart
@@ -21,9 +21,7 @@
AnalysisLogger() {
logging.Logger.root.onRecord.listen((logging.LogRecord record) {
AnalysisEngine.instance.instrumentationService.logLogEntry(
- record.level.name,
- record.time,
- record.message);
+ record.level.name, record.time, record.message);
});
}
diff --git a/pkg/analysis_server/lib/src/analysis_manager.dart b/pkg/analysis_server/lib/src/analysis_manager.dart
index d9c00926..72d1b5e 100644
--- a/pkg/analysis_server/lib/src/analysis_manager.dart
+++ b/pkg/analysis_server/lib/src/analysis_manager.dart
@@ -40,9 +40,9 @@
if (process == null) {
return channel.close().then((_) => false);
}
- return channel.sendRequest(
- new ServerShutdownParams().toRequest(
- '0')).timeout(new Duration(seconds: 2), onTimeout: () {
+ return channel
+ .sendRequest(new ServerShutdownParams().toRequest('0'))
+ .timeout(new Duration(seconds: 2), onTimeout: () {
print('Expected shutdown response');
}).then((Response response) {
return channel.close().then((_) => process.exitCode);
@@ -82,10 +82,10 @@
// Listen for port from server
const String pattern = 'Listening on port ';
- return out.firstWhere(
- (String line) =>
- line.startsWith(
- pattern)).timeout(new Duration(seconds: 10)).catchError((error) {
+ return out
+ .firstWhere((String line) => line.startsWith(pattern))
+ .timeout(new Duration(seconds: 10))
+ .catchError((error) {
exitCode = 1;
process.kill();
throw 'Expected port from analysis server';
@@ -108,8 +108,10 @@
throw 'Failed to connect to analysis server at $serverUrl\n $error';
};
try {
- return WebSocket.connect(
- serverUrl).catchError(onError).then((WebSocket socket) {
+ return WebSocket
+ .connect(serverUrl)
+ .catchError(onError)
+ .then((WebSocket socket) {
this.channel = new WebSocketClientChannel(socket);
return this;
});
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index b86781b..6cd2ef6 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -30,10 +30,8 @@
import 'package:analyzer/src/generated/source_io.dart';
import 'package:analyzer/src/generated/utilities_general.dart';
-
typedef void OptionUpdater(AnalysisOptionsImpl options);
-
/**
* Enum representing reasons why analysis might be done for a given file.
*/
@@ -58,7 +56,6 @@
const AnalysisDoneReason._(this.text);
}
-
/**
* Instances of the class [AnalysisServer] implement a server that listens on a
* [CommunicationChannel] for analysis requests and process them.
@@ -197,6 +194,11 @@
Completer _onAnalysisCompleteCompleter;
/**
+ * The [Completer] that completes when the next operation is performed.
+ */
+ Completer _test_onOperationPerformedCompleter;
+
+ /**
* The controller that is notified when analysis is started.
*/
StreamController<AnalysisContext> _onAnalysisStartedController;
@@ -223,8 +225,7 @@
*/
// Add 1 sec to prevent delay from impacting short running tests
int _nextPerformOperationDelayTime =
- new DateTime.now().millisecondsSinceEpoch +
- 1000;
+ new DateTime.now().millisecondsSinceEpoch + 1000;
/**
* The current state of overlays from the client. This is used as the
@@ -249,8 +250,8 @@
searchEngine = _index != null ? createSearchEngine(_index) : null {
_performance = performanceDuringStartup;
operationQueue = new ServerOperationQueue();
- contextDirectoryManager =
- new ServerContextManager(this, resourceProvider, packageMapProvider);
+ contextDirectoryManager = new ServerContextManager(
+ this, resourceProvider, packageMapProvider, instrumentationService);
contextDirectoryManager.defaultOptions.incremental = true;
contextDirectoryManager.defaultOptions.incrementalApi =
analysisServerOptions.enableIncrementalResolutionApi;
@@ -313,6 +314,16 @@
_onPriorityChangeController.stream;
/**
+ * The [Future] that completes when the next operation is performed.
+ */
+ Future get test_onOperationPerformed {
+ if (_test_onOperationPerformedCompleter == null) {
+ _test_onOperationPerformedCompleter = new Completer();
+ }
+ return _test_onOperationPerformedCompleter.future;
+ }
+
+ /**
* Adds the given [ServerOperation] to the queue, but does not schedule
* operations execution.
*/
@@ -497,6 +508,32 @@
// }
/**
+ * Returns resolved [CompilationUnit]s of the Dart file with the given [path].
+ *
+ * May be empty, but not `null`.
+ */
+ List<CompilationUnit> getResolvedCompilationUnits(String path) {
+ List<CompilationUnit> units = <CompilationUnit>[];
+ // prepare AnalysisContext
+ AnalysisContext context = getAnalysisContext(path);
+ if (context == null) {
+ return units;
+ }
+ // add a unit for each unit/library combination
+ Source unitSource = getSource(path);
+ List<Source> librarySources = context.getLibrariesContaining(unitSource);
+ for (Source librarySource in librarySources) {
+ CompilationUnit unit =
+ context.resolveCompilationUnit2(unitSource, librarySource);
+ if (unit != null) {
+ units.add(unit);
+ }
+ }
+ // done
+ return units;
+ }
+
+ /**
* Returns the [CompilationUnit] of the Dart file with the given [path] that
* should be used to resend notifications for already resolved unit.
* Returns `null` if the file is not a part of any context, library has not
@@ -524,32 +561,6 @@
}
/**
- * Returns resolved [CompilationUnit]s of the Dart file with the given [path].
- *
- * May be empty, but not `null`.
- */
- List<CompilationUnit> getResolvedCompilationUnits(String path) {
- List<CompilationUnit> units = <CompilationUnit>[];
- // prepare AnalysisContext
- AnalysisContext context = getAnalysisContext(path);
- if (context == null) {
- return units;
- }
- // add a unit for each unit/library combination
- Source unitSource = getSource(path);
- List<Source> librarySources = context.getLibrariesContaining(unitSource);
- for (Source librarySource in librarySources) {
- CompilationUnit unit =
- context.resolveCompilationUnit2(unitSource, librarySource);
- if (unit != null) {
- units.add(unit);
- }
- }
- // done
- return units;
- }
-
- /**
* Return the [Source] of the Dart file with the given [path].
*/
Source getSource(String path) {
@@ -588,8 +599,8 @@
channel.sendResponse(exception.response);
return;
} catch (exception, stackTrace) {
- RequestError error =
- new RequestError(RequestErrorCode.SERVER_ERROR, exception.toString());
+ RequestError error = new RequestError(
+ RequestErrorCode.SERVER_ERROR, exception.toString());
if (stackTrace != null) {
error.stackTrace = stackTrace.toString();
}
@@ -684,13 +695,16 @@
} catch (exception, stackTrace) {
AnalysisEngine.instance.logger.logError("${exception}\n${stackTrace}");
if (rethrowExceptions) {
- throw new AnalysisException(
- 'Unexpected exception during analysis',
+ throw new AnalysisException('Unexpected exception during analysis',
new CaughtException(exception, stackTrace));
}
sendServerErrorNotification(exception, stackTrace, fatal: true);
shutdown();
} finally {
+ if (_test_onOperationPerformedCompleter != null) {
+ _test_onOperationPerformedCompleter.complete(operation);
+ _test_onOperationPerformedCompleter = null;
+ }
if (!operationQueue.isEmpty) {
ServerPerformanceStatistics.intertask.makeCurrent();
_schedulePerformOperation();
@@ -736,8 +750,8 @@
* This method is called when analysis of the given [AnalysisContext] is
* done.
*/
- void sendContextAnalysisDoneNotifications(AnalysisContext context,
- AnalysisDoneReason reason) {
+ void sendContextAnalysisDoneNotifications(
+ AnalysisContext context, AnalysisDoneReason reason) {
Completer<AnalysisDoneReason> completer =
contextAnalysisDoneCompleters.remove(context);
if (completer != null) {
@@ -779,10 +793,8 @@
}
// send the notification
channel.sendNotification(
- new ServerErrorParams(
- fatal,
- exceptionString,
- stackTraceString).toNotification());
+ new ServerErrorParams(fatal, exceptionString, stackTraceString)
+ .toNotification());
}
/**
@@ -821,9 +833,7 @@
List<String> excludedPaths, Map<String, String> packageRoots) {
try {
contextDirectoryManager.setRoots(
- includedPaths,
- excludedPaths,
- packageRoots);
+ includedPaths, excludedPaths, packageRoots);
} on UnimplementedError catch (e) {
throw new RequestFailure(
new Response.unsupportedFeature(requestId, e.message));
@@ -833,8 +843,8 @@
/**
* Implementation for `analysis.setSubscriptions`.
*/
- void setAnalysisSubscriptions(Map<AnalysisService,
- Set<String>> subscriptions) {
+ void setAnalysisSubscriptions(
+ Map<AnalysisService, Set<String>> subscriptions) {
// send notifications for already analyzed sources
subscriptions.forEach((service, Set<String> newFiles) {
Set<String> oldFiles = analysisServices[service];
@@ -989,22 +999,16 @@
if (oldContents == null) {
// The client may only send a ChangeContentOverlay if there is
// already an existing overlay for the source.
- throw new RequestFailure(
- new Response(
- id,
- error: new RequestError(
- RequestErrorCode.INVALID_OVERLAY_CHANGE,
- 'Invalid overlay change')));
+ throw new RequestFailure(new Response(id,
+ error: new RequestError(RequestErrorCode.INVALID_OVERLAY_CHANGE,
+ 'Invalid overlay change')));
}
try {
newContents = SourceEdit.applySequence(oldContents, change.edits);
} on RangeError {
- throw new RequestFailure(
- new Response(
- id,
- error: new RequestError(
- RequestErrorCode.INVALID_OVERLAY_CHANGE,
- 'Invalid overlay change')));
+ throw new RequestFailure(new Response(id,
+ error: new RequestError(RequestErrorCode.INVALID_OVERLAY_CHANGE,
+ 'Invalid overlay change')));
}
} else if (change is RemoveContentOverlay) {
newContents = null;
@@ -1016,10 +1020,7 @@
// Update all contexts.
for (InternalAnalysisContext context in folderMap.values) {
if (context.handleContentsChanged(
- source,
- oldContents,
- newContents,
- true)) {
+ source, oldContents, newContents, true)) {
schedulePerformAnalysisOperation(context);
} else {
// When the client sends any change for a source, we should resend
@@ -1027,18 +1028,15 @@
// source contents.
// TODO(scheglov) consider checking if there are subscriptions.
if (AnalysisEngine.isDartFileName(file)) {
- CompilationUnit dartUnit =
- context.ensureAnyResolvedDartUnit(source);
- if (dartUnit != null) {
+ List<CompilationUnit> dartUnits =
+ context.ensureResolvedDartUnits(source);
+ if (dartUnits != null) {
AnalysisErrorInfo errorInfo = context.getErrors(source);
- scheduleNotificationOperations(
- this,
- file,
- errorInfo.lineInfo,
- context,
- null,
- dartUnit,
- errorInfo.errors);
+ for (var dartUnit in dartUnits) {
+ scheduleNotificationOperations(this, file, errorInfo.lineInfo,
+ context, null, dartUnit, errorInfo.errors);
+ scheduleIndexOperation(this, file, context, dartUnit);
+ }
} else {
schedulePerformAnalysisOperation(context);
}
@@ -1120,7 +1118,6 @@
}
}
-
class AnalysisServerOptions {
bool enableIncrementalResolutionApi = false;
bool enableIncrementalResolutionValidation = false;
@@ -1152,8 +1149,9 @@
*/
final List<AnalysisContext> removed;
- ContextsChangedEvent({this.added: AnalysisContext.EMPTY_LIST, this.changed:
- AnalysisContext.EMPTY_LIST, this.removed: AnalysisContext.EMPTY_LIST});
+ ContextsChangedEvent({this.added: AnalysisContext.EMPTY_LIST,
+ this.changed: AnalysisContext.EMPTY_LIST,
+ this.removed: AnalysisContext.EMPTY_LIST});
}
/**
@@ -1165,7 +1163,6 @@
PriorityChangeEvent(this.firstSource);
}
-
class ServerContextManager extends ContextManager {
final AnalysisServer analysisServer;
@@ -1180,8 +1177,8 @@
StreamController<ContextsChangedEvent> _onContextsChangedController;
ServerContextManager(this.analysisServer, ResourceProvider resourceProvider,
- PackageMapProvider packageMapProvider)
- : super(resourceProvider, packageMapProvider) {
+ PackageMapProvider packageMapProvider, InstrumentationService service)
+ : super(resourceProvider, packageMapProvider, service) {
_onContextsChangedController =
new StreamController<ContextsChangedEvent>.broadcast();
}
@@ -1200,8 +1197,8 @@
analysisServer.folderMap[folder] = context;
context.sourceFactory = _createSourceFactory(packageUriResolver);
context.analysisOptions = new AnalysisOptionsImpl.con1(defaultOptions);
- _onContextsChangedController.add(
- new ContextsChangedEvent(added: [context]));
+ _onContextsChangedController
+ .add(new ContextsChangedEvent(added: [context]));
analysisServer.schedulePerformAnalysisOperation(context);
return context;
}
@@ -1231,21 +1228,20 @@
if (analysisServer.index != null) {
analysisServer.index.removeContext(context);
}
- _onContextsChangedController.add(
- new ContextsChangedEvent(removed: [context]));
+ _onContextsChangedController
+ .add(new ContextsChangedEvent(removed: [context]));
analysisServer.sendContextAnalysisDoneNotifications(
- context,
- AnalysisDoneReason.CONTEXT_REMOVED);
+ context, AnalysisDoneReason.CONTEXT_REMOVED);
context.dispose();
}
@override
- void updateContextPackageUriResolver(Folder contextFolder,
- UriResolver packageUriResolver) {
+ void updateContextPackageUriResolver(
+ Folder contextFolder, UriResolver packageUriResolver) {
AnalysisContext context = analysisServer.folderMap[contextFolder];
context.sourceFactory = _createSourceFactory(packageUriResolver);
- _onContextsChangedController.add(
- new ContextsChangedEvent(changed: [context]));
+ _onContextsChangedController
+ .add(new ContextsChangedEvent(changed: [context]));
analysisServer.schedulePerformAnalysisOperation(context);
}
@@ -1264,14 +1260,13 @@
SourceFactory _createSourceFactory(UriResolver packageUriResolver) {
UriResolver dartResolver = new DartUriResolver(analysisServer.defaultSdk);
UriResolver resourceResolver = new ResourceUriResolver(resourceProvider);
- List<UriResolver> resolvers = packageUriResolver != null ?
- <UriResolver>[dartResolver, packageUriResolver, resourceResolver] :
- <UriResolver>[dartResolver, resourceResolver];
+ List<UriResolver> resolvers = packageUriResolver != null
+ ? <UriResolver>[dartResolver, packageUriResolver, resourceResolver]
+ : <UriResolver>[dartResolver, resourceResolver];
return new SourceFactory(resolvers);
}
}
-
/**
* A class used by [AnalysisServer] to record performance information
* such as request latency.
@@ -1311,8 +1306,7 @@
++requestCount;
if (request.clientRequestTime != null) {
int latency =
- new DateTime.now().millisecondsSinceEpoch -
- request.clientRequestTime;
+ new DateTime.now().millisecondsSinceEpoch - request.clientRequestTime;
requestLatency += latency;
maxLatency = max(maxLatency, latency);
if (latency > 150) {
@@ -1322,7 +1316,6 @@
}
}
-
/**
* Container with global [AnalysisServer] performance statistics.
*/
@@ -1357,6 +1350,11 @@
static PerformanceTag notices = new PerformanceTag('notices');
/**
+ * The [PerformanceTag] for time spent running pub.
+ */
+ static PerformanceTag pub = new PerformanceTag('pub');
+
+ /**
* The [PerformanceTag] for time spent in server comminication channels.
*/
static PerformanceTag serverChannel = new PerformanceTag('serverChannel');
diff --git a/pkg/analysis_server/lib/src/channel/byte_stream_channel.dart b/pkg/analysis_server/lib/src/channel/byte_stream_channel.dart
index 14d7268..bfcac2d 100644
--- a/pkg/analysis_server/lib/src/channel/byte_stream_channel.dart
+++ b/pkg/analysis_server/lib/src/channel/byte_stream_channel.dart
@@ -29,18 +29,20 @@
Stream<Notification> notificationStream;
ByteStreamClientChannel(this.input, this.output) {
- Stream jsonStream = input.transform(
- (new Utf8Codec()).decoder).transform(
- new LineSplitter()).transform(
- new JsonStreamDecoder()).where((json) => json is Map).asBroadcastStream();
- responseStream = jsonStream.where(
- (json) =>
- json[Notification.EVENT] ==
- null).transform(new ResponseConverter()).asBroadcastStream();
- notificationStream = jsonStream.where(
- (json) =>
- json[Notification.EVENT] !=
- null).transform(new NotificationConverter()).asBroadcastStream();
+ Stream jsonStream = input
+ .transform((new Utf8Codec()).decoder)
+ .transform(new LineSplitter())
+ .transform(new JsonStreamDecoder())
+ .where((json) => json is Map)
+ .asBroadcastStream();
+ responseStream = jsonStream
+ .where((json) => json[Notification.EVENT] == null)
+ .transform(new ResponseConverter())
+ .asBroadcastStream();
+ notificationStream = jsonStream
+ .where((json) => json[Notification.EVENT] != null)
+ .transform(new NotificationConverter())
+ .asBroadcastStream();
}
@override
@@ -81,8 +83,8 @@
*/
bool _closeRequested = false;
- ByteStreamServerChannel(this._input, this._output,
- this._instrumentationService);
+ ByteStreamServerChannel(
+ this._input, this._output, this._instrumentationService);
/**
* Future that will be completed when the input stream is closed.
@@ -101,14 +103,13 @@
}
@override
- void listen(void onRequest(Request request), {Function onError, void
- onDone()}) {
- _input.transform(
- (new Utf8Codec()).decoder).transform(
- new LineSplitter()).listen(
- (String data) => _readRequest(data, onRequest),
- onError: onError,
- onDone: () {
+ void listen(void onRequest(Request request),
+ {Function onError, void onDone()}) {
+ _input
+ .transform((new Utf8Codec()).decoder)
+ .transform(new LineSplitter())
+ .listen((String data) => _readRequest(data, onRequest),
+ onError: onError, onDone: () {
close();
onDone();
});
diff --git a/pkg/analysis_server/lib/src/channel/channel.dart b/pkg/analysis_server/lib/src/channel/channel.dart
index b90b282..041b122 100644
--- a/pkg/analysis_server/lib/src/channel/channel.dart
+++ b/pkg/analysis_server/lib/src/channel/channel.dart
@@ -137,8 +137,8 @@
* client, invoke the [onDone] function.
* Only one listener is allowed per channel.
*/
- void listen(void onRequest(Request request), {Function onError, void
- onDone()});
+ void listen(void onRequest(Request request),
+ {Function onError, void onDone()});
/**
* Send the given [notification] to the client.
diff --git a/pkg/analysis_server/lib/src/channel/web_socket_channel.dart b/pkg/analysis_server/lib/src/channel/web_socket_channel.dart
index 47af214..9dc4f00 100644
--- a/pkg/analysis_server/lib/src/channel/web_socket_channel.dart
+++ b/pkg/analysis_server/lib/src/channel/web_socket_channel.dart
@@ -13,7 +13,6 @@
import 'package:analysis_server/src/protocol.dart';
import 'package:analyzer/instrumentation/instrumentation.dart';
-
/**
* Instances of the class [WebSocketClientChannel] implement a
* [ClientCommunicationChannel] that uses a [WebSocket] to communicate with
@@ -35,18 +34,19 @@
* Initialize a new [WebSocket] wrapper for the given [socket].
*/
WebSocketClientChannel(this.socket) {
- Stream jsonStream = socket.where(
- (data) =>
- data is String).transform(
- new JsonStreamDecoder()).where((json) => json is Map).asBroadcastStream();
- responseStream = jsonStream.where(
- (json) =>
- json[Notification.EVENT] ==
- null).transform(new ResponseConverter()).asBroadcastStream();
- notificationStream = jsonStream.where(
- (json) =>
- json[Notification.EVENT] !=
- null).transform(new NotificationConverter()).asBroadcastStream();
+ Stream jsonStream = socket
+ .where((data) => data is String)
+ .transform(new JsonStreamDecoder())
+ .where((json) => json is Map)
+ .asBroadcastStream();
+ responseStream = jsonStream
+ .where((json) => json[Notification.EVENT] == null)
+ .transform(new ResponseConverter())
+ .asBroadcastStream();
+ notificationStream = jsonStream
+ .where((json) => json[Notification.EVENT] != null)
+ .transform(new NotificationConverter())
+ .asBroadcastStream();
}
@override
@@ -89,12 +89,10 @@
}
@override
- void listen(void onRequest(Request request), {void onError(), void
- onDone()}) {
- socket.listen(
- (data) => readRequest(data, onRequest),
- onError: onError,
- onDone: onDone);
+ void listen(void onRequest(Request request),
+ {void onError(), void onDone()}) {
+ socket.listen((data) => readRequest(data, onRequest),
+ onError: onError, onDone: onDone);
}
/**
diff --git a/pkg/analysis_server/lib/src/collections.dart b/pkg/analysis_server/lib/src/collections.dart
index bb3861f..8ab3da8 100644
--- a/pkg/analysis_server/lib/src/collections.dart
+++ b/pkg/analysis_server/lib/src/collections.dart
@@ -11,13 +11,11 @@
*/
Iterable concat(Iterable<Iterable> iterables) => iterables.expand((x) => x);
-
/**
* Returns the concatentation of the input iterables as a [List].
*/
List concatToList(Iterable<Iterable> iterables) => concat(iterables).toList();
-
/**
* Returns the given [list] if it is not empty, or `null` otherwise.
*/
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index df2f5b5..2c98c84 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -9,7 +9,6 @@
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/scanner.dart';
-
/**
* A computer for [HighlightRegion]s in a Dart [CompilationUnit].
*/
@@ -106,9 +105,7 @@
_addRegion_node(node, HighlightRegionType.ANNOTATION);
} else {
_addRegion_nodeStart_tokenEnd(
- node,
- arguments.beginToken,
- HighlightRegionType.ANNOTATION);
+ node, arguments.beginToken, HighlightRegionType.ANNOTATION);
_addRegion_token(arguments.endToken, HighlightRegionType.ANNOTATION);
}
}
@@ -320,8 +317,8 @@
return true;
}
- void _addRegion_nodeStart_tokenEnd(AstNode a, Token b,
- HighlightRegionType type) {
+ void _addRegion_nodeStart_tokenEnd(
+ AstNode a, Token b, HighlightRegionType type) {
int offset = a.offset;
int end = b.end;
_addRegion(offset, end - offset, type);
@@ -335,15 +332,14 @@
}
}
- void _addRegion_tokenStart_tokenEnd(Token a, Token b,
- HighlightRegionType type) {
+ void _addRegion_tokenStart_tokenEnd(
+ Token a, Token b, HighlightRegionType type) {
int offset = a.offset;
int end = b.end;
_addRegion(offset, end - offset, type);
}
}
-
/**
* An AST visitor for [DartUnitHighlightsComputer].
*/
@@ -366,7 +362,7 @@
@override
Object visitAssertStatement(AssertStatement node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ computer._addRegion_token(node.assertKeyword, HighlightRegionType.KEYWORD);
return super.visitAssertStatement(node);
}
@@ -391,7 +387,7 @@
@override
Object visitBreakStatement(BreakStatement node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ computer._addRegion_token(node.breakKeyword, HighlightRegionType.KEYWORD);
return super.visitBreakStatement(node);
}
@@ -406,33 +402,30 @@
Object visitClassDeclaration(ClassDeclaration node) {
computer._addRegion_token(node.classKeyword, HighlightRegionType.KEYWORD);
computer._addRegion_token(
- node.abstractKeyword,
- HighlightRegionType.BUILT_IN);
+ node.abstractKeyword, HighlightRegionType.BUILT_IN);
return super.visitClassDeclaration(node);
}
@override
Object visitClassTypeAlias(ClassTypeAlias node) {
computer._addRegion_token(
- node.abstractKeyword,
- HighlightRegionType.BUILT_IN);
+ node.abstractKeyword, HighlightRegionType.BUILT_IN);
return super.visitClassTypeAlias(node);
}
@override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
computer._addRegion_token(
- node.externalKeyword,
- HighlightRegionType.BUILT_IN);
+ node.externalKeyword, HighlightRegionType.BUILT_IN);
computer._addRegion_token(
- node.factoryKeyword,
- HighlightRegionType.BUILT_IN);
+ node.factoryKeyword, HighlightRegionType.BUILT_IN);
return super.visitConstructorDeclaration(node);
}
@override
Object visitContinueStatement(ContinueStatement node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ computer._addRegion_token(
+ node.continueKeyword, HighlightRegionType.KEYWORD);
return super.visitContinueStatement(node);
}
@@ -451,7 +444,7 @@
@override
Object visitEnumDeclaration(EnumDeclaration node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ computer._addRegion_token(node.enumKeyword, HighlightRegionType.KEYWORD);
return super.visitEnumDeclaration(node);
}
@@ -491,17 +484,16 @@
@override
Object visitFunctionDeclaration(FunctionDeclaration node) {
computer._addRegion_token(
- node.externalKeyword,
- HighlightRegionType.BUILT_IN);
+ node.externalKeyword, HighlightRegionType.BUILT_IN);
computer._addRegion_token(
- node.propertyKeyword,
- HighlightRegionType.BUILT_IN);
+ node.propertyKeyword, HighlightRegionType.BUILT_IN);
return super.visitFunctionDeclaration(node);
}
@override
Object visitFunctionTypeAlias(FunctionTypeAlias node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.BUILT_IN);
+ computer._addRegion_token(
+ node.typedefKeyword, HighlightRegionType.BUILT_IN);
return super.visitFunctionTypeAlias(node);
}
@@ -519,7 +511,8 @@
@override
Object visitImplementsClause(ImplementsClause node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.BUILT_IN);
+ computer._addRegion_token(
+ node.implementsKeyword, HighlightRegionType.BUILT_IN);
return super.visitImplementsClause(node);
}
@@ -527,8 +520,9 @@
Object visitImportDirective(ImportDirective node) {
computer._addRegion_node(node, HighlightRegionType.DIRECTIVE);
computer._addRegion_token(node.keyword, HighlightRegionType.BUILT_IN);
- computer._addRegion_token(node.deferredToken, HighlightRegionType.BUILT_IN);
- computer._addRegion_token(node.asToken, HighlightRegionType.BUILT_IN);
+ computer._addRegion_token(
+ node.deferredKeyword, HighlightRegionType.BUILT_IN);
+ computer._addRegion_token(node.asKeyword, HighlightRegionType.BUILT_IN);
return super.visitImportDirective(node);
}
@@ -574,29 +568,25 @@
@override
Object visitMethodDeclaration(MethodDeclaration node) {
computer._addRegion_token(
- node.externalKeyword,
- HighlightRegionType.BUILT_IN);
+ node.externalKeyword, HighlightRegionType.BUILT_IN);
computer._addRegion_token(
- node.modifierKeyword,
- HighlightRegionType.BUILT_IN);
+ node.modifierKeyword, HighlightRegionType.BUILT_IN);
computer._addRegion_token(
- node.operatorKeyword,
- HighlightRegionType.BUILT_IN);
+ node.operatorKeyword, HighlightRegionType.BUILT_IN);
computer._addRegion_token(
- node.propertyKeyword,
- HighlightRegionType.BUILT_IN);
+ node.propertyKeyword, HighlightRegionType.BUILT_IN);
return super.visitMethodDeclaration(node);
}
@override
Object visitNativeClause(NativeClause node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.BUILT_IN);
+ computer._addRegion_token(node.nativeKeyword, HighlightRegionType.BUILT_IN);
return super.visitNativeClause(node);
}
@override
Object visitNativeFunctionBody(NativeFunctionBody node) {
- computer._addRegion_token(node.nativeToken, HighlightRegionType.BUILT_IN);
+ computer._addRegion_token(node.nativeKeyword, HighlightRegionType.BUILT_IN);
return super.visitNativeFunctionBody(node);
}
@@ -611,21 +601,19 @@
Object visitPartOfDirective(PartOfDirective node) {
computer._addRegion_node(node, HighlightRegionType.DIRECTIVE);
computer._addRegion_tokenStart_tokenEnd(
- node.partToken,
- node.ofToken,
- HighlightRegionType.BUILT_IN);
+ node.partKeyword, node.ofKeyword, HighlightRegionType.BUILT_IN);
return super.visitPartOfDirective(node);
}
@override
Object visitRethrowExpression(RethrowExpression node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ computer._addRegion_token(node.rethrowKeyword, HighlightRegionType.KEYWORD);
return super.visitRethrowExpression(node);
}
@override
Object visitReturnStatement(ReturnStatement node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ computer._addRegion_token(node.returnKeyword, HighlightRegionType.KEYWORD);
return super.visitReturnStatement(node);
}
@@ -649,7 +637,7 @@
@override
Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ computer._addRegion_token(node.superKeyword, HighlightRegionType.KEYWORD);
return super.visitSuperConstructorInvocation(node);
}
@@ -667,13 +655,13 @@
@override
Object visitSwitchStatement(SwitchStatement node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ computer._addRegion_token(node.switchKeyword, HighlightRegionType.KEYWORD);
return super.visitSwitchStatement(node);
}
@override
Object visitThisExpression(ThisExpression node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ computer._addRegion_token(node.thisKeyword, HighlightRegionType.KEYWORD);
return super.visitThisExpression(node);
}
@@ -704,7 +692,7 @@
@override
Object visitWhileStatement(WhileStatement node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ computer._addRegion_token(node.whileKeyword, HighlightRegionType.KEYWORD);
return super.visitWhileStatement(node);
}
diff --git a/pkg/analysis_server/lib/src/computer/computer_hover.dart b/pkg/analysis_server/lib/src/computer/computer_hover.dart
index 87bc87a..9cc2f41 100644
--- a/pkg/analysis_server/lib/src/computer/computer_hover.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_hover.dart
@@ -8,7 +8,6 @@
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart';
-
/**
* Converts [str] from a Dart Doc string with slashes and stars to a plain text
* representation of the comment.
@@ -53,7 +52,6 @@
return str;
}
-
/**
* A computer for the hover at the specified offset of a Dart [CompilationUnit].
*/
diff --git a/pkg/analysis_server/lib/src/computer/computer_navigation.dart b/pkg/analysis_server/lib/src/computer/computer_navigation.dart
index 10e0bd0..2236ee4 100644
--- a/pkg/analysis_server/lib/src/computer/computer_navigation.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_navigation.dart
@@ -11,7 +11,6 @@
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/scanner.dart';
-
/**
* A computer for navigation regions in a Dart [CompilationUnit].
*/
@@ -54,8 +53,8 @@
return;
}
int targetIndex = _addTarget(element);
- regions.add(
- new protocol.NavigationRegion(offset, length, <int>[targetIndex]));
+ regions
+ .add(new protocol.NavigationRegion(offset, length, <int>[targetIndex]));
}
void _addRegion_nodeStart_nodeEnd(AstNode a, AstNode b, Element element) {
@@ -95,7 +94,6 @@
}
}
-
class _DartUnitNavigationComputerVisitor extends RecursiveAstVisitor {
final DartUnitNavigationComputer computer;
@@ -141,9 +139,7 @@
}
if (firstNode != null && lastNode != null) {
computer._addRegion_nodeStart_nodeEnd(
- firstNode,
- lastNode,
- node.element);
+ firstNode, lastNode, node.element);
}
}
super.visitConstructorDeclaration(node);
@@ -190,18 +186,14 @@
@override
visitPartDirective(PartDirective node) {
computer._addRegion_tokenStart_nodeEnd(
- node.keyword,
- node.uri,
- node.element);
+ node.keyword, node.uri, node.element);
super.visitPartDirective(node);
}
@override
visitPartOfDirective(PartOfDirective node) {
computer._addRegion_tokenStart_nodeEnd(
- node.keyword,
- node.libraryName,
- node.element);
+ node.keyword, node.libraryName, node.element);
super.visitPartOfDirective(node);
}
@@ -237,7 +229,7 @@
if (name != null) {
computer._addRegion_nodeStart_nodeEnd(node, name, element);
} else {
- computer._addRegionForToken(node.keyword, element);
+ computer._addRegionForToken(node.superKeyword, element);
}
// process arguments
_safelyVisit(node.argumentList);
diff --git a/pkg/analysis_server/lib/src/computer/computer_occurrences.dart b/pkg/analysis_server/lib/src/computer/computer_occurrences.dart
index d1c941f..4897a1a 100644
--- a/pkg/analysis_server/lib/src/computer/computer_occurrences.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_occurrences.dart
@@ -10,7 +10,6 @@
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart';
-
/**
* A computer for elements occurrences in a Dart [CompilationUnit].
*/
@@ -63,7 +62,6 @@
}
}
-
class _DartUnitOccurrencesComputerVisitor extends RecursiveAstVisitor {
final DartUnitOccurrencesComputer computer;
diff --git a/pkg/analysis_server/lib/src/computer/computer_outline.dart b/pkg/analysis_server/lib/src/computer/computer_outline.dart
index 8efd18e..c8351df 100644
--- a/pkg/analysis_server/lib/src/computer/computer_outline.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_outline.dart
@@ -10,7 +10,6 @@
import 'package:analyzer/src/generated/element.dart' as engine;
import 'package:analyzer/src/generated/source.dart';
-
/**
* A computer for [CompilationUnit] outline.
*/
@@ -43,12 +42,8 @@
String fieldTypeName =
fieldType != null ? fieldType.toSource() : '';
for (VariableDeclaration field in fields.variables) {
- classContents.add(
- _newVariableOutline(
- fieldTypeName,
- ElementKind.FIELD,
- field,
- fieldDeclaration.isStatic));
+ classContents.add(_newVariableOutline(fieldTypeName,
+ ElementKind.FIELD, field, fieldDeclaration.isStatic));
}
}
}
@@ -74,12 +69,8 @@
TypeName fieldType = fields.type;
String fieldTypeName = fieldType != null ? fieldType.toSource() : '';
for (VariableDeclaration field in fields.variables) {
- unitContents.add(
- _newVariableOutline(
- fieldTypeName,
- ElementKind.TOP_LEVEL_VARIABLE,
- field,
- false));
+ unitContents.add(_newVariableOutline(
+ fieldTypeName, ElementKind.TOP_LEVEL_VARIABLE, field, false));
}
}
}
@@ -166,23 +157,17 @@
return new _SourceRegion(prevSiblingEnd, endOffset - prevSiblingEnd);
}
- Outline _newClassOutline(ClassDeclaration classDeclaration,
- List<Outline> classContents) {
+ Outline _newClassOutline(
+ ClassDeclaration classDeclaration, List<Outline> classContents) {
SimpleIdentifier nameNode = classDeclaration.name;
String name = nameNode.name;
_SourceRegion sourceRegion = _getSourceRegion(classDeclaration);
- Element element = new Element(
- ElementKind.CLASS,
- name,
- Element.makeFlags(
+ Element element = new Element(ElementKind.CLASS, name, Element.makeFlags(
isPrivate: Identifier.isPrivateName(name),
isDeprecated: _isDeprecated(classDeclaration),
isAbstract: classDeclaration.isAbstract),
location: _getLocationNode(nameNode));
- return new Outline(
- element,
- sourceRegion.offset,
- sourceRegion.length,
+ return new Outline(element, sourceRegion.offset, sourceRegion.length,
children: nullIfEmpty(classContents));
}
@@ -190,13 +175,11 @@
SimpleIdentifier nameNode = alias.name;
String name = nameNode.name;
_SourceRegion sourceRegion = _getSourceRegion(alias);
- Element element = new Element(
- ElementKind.CLASS_TYPE_ALIAS,
- name,
- Element.makeFlags(
- isPrivate: Identifier.isPrivateName(name),
- isDeprecated: _isDeprecated(alias),
- isAbstract: alias.isAbstract),
+ Element element = new Element(ElementKind.CLASS_TYPE_ALIAS, name, Element
+ .makeFlags(
+ isPrivate: Identifier.isPrivateName(name),
+ isDeprecated: _isDeprecated(alias),
+ isAbstract: alias.isAbstract),
location: _getLocationNode(nameNode));
return new Outline(element, sourceRegion.offset, sourceRegion.length);
}
@@ -218,19 +201,14 @@
_SourceRegion sourceRegion = _getSourceRegion(constructor);
FormalParameterList parameters = constructor.parameters;
String parametersStr = parameters != null ? parameters.toSource() : '';
- Element element = new Element(
- ElementKind.CONSTRUCTOR,
- name,
- Element.makeFlags(
- isPrivate: isPrivate,
- isDeprecated: _isDeprecated(constructor)),
+ Element element = new Element(ElementKind.CONSTRUCTOR, name, Element
+ .makeFlags(
+ isPrivate: isPrivate, isDeprecated: _isDeprecated(constructor)),
location: _getLocationOffsetLength(offset, length),
parameters: parametersStr);
List<Outline> contents = _addLocalFunctionOutlines(constructor.body);
Outline outline = new Outline(
- element,
- sourceRegion.offset,
- sourceRegion.length,
+ element, sourceRegion.offset, sourceRegion.length,
children: nullIfEmpty(contents));
return outline;
}
@@ -239,12 +217,10 @@
SimpleIdentifier nameNode = node.name;
String name = nameNode.name;
_SourceRegion sourceRegion = _getSourceRegion(node);
- Element element = new Element(
- ElementKind.ENUM_CONSTANT,
- name,
- Element.makeFlags(
- isPrivate: Identifier.isPrivateName(name),
- isDeprecated: _isDeprecated(node)),
+ Element element = new Element(ElementKind.ENUM_CONSTANT, name, Element
+ .makeFlags(
+ isPrivate: Identifier.isPrivateName(name),
+ isDeprecated: _isDeprecated(node)),
location: _getLocationNode(nameNode));
return new Outline(element, sourceRegion.offset, sourceRegion.length);
}
@@ -253,17 +229,11 @@
SimpleIdentifier nameNode = node.name;
String name = nameNode.name;
_SourceRegion sourceRegion = _getSourceRegion(node);
- Element element = new Element(
- ElementKind.ENUM,
- name,
- Element.makeFlags(
+ Element element = new Element(ElementKind.ENUM, name, Element.makeFlags(
isPrivate: Identifier.isPrivateName(name),
isDeprecated: _isDeprecated(node)),
location: _getLocationNode(nameNode));
- return new Outline(
- element,
- sourceRegion.offset,
- sourceRegion.length,
+ return new Outline(element, sourceRegion.offset, sourceRegion.length,
children: nullIfEmpty(children));
}
@@ -284,10 +254,7 @@
_SourceRegion sourceRegion = _getSourceRegion(function);
String parametersStr = parameters != null ? parameters.toSource() : '';
String returnTypeStr = returnType != null ? returnType.toSource() : '';
- Element element = new Element(
- kind,
- name,
- Element.makeFlags(
+ Element element = new Element(kind, name, Element.makeFlags(
isPrivate: Identifier.isPrivateName(name),
isDeprecated: _isDeprecated(function),
isStatic: isStatic),
@@ -296,9 +263,7 @@
returnType: returnTypeStr);
List<Outline> contents = _addLocalFunctionOutlines(functionExpression.body);
Outline outline = new Outline(
- element,
- sourceRegion.offset,
- sourceRegion.length,
+ element, sourceRegion.offset, sourceRegion.length,
children: nullIfEmpty(contents));
return outline;
}
@@ -311,12 +276,10 @@
FormalParameterList parameters = alias.parameters;
String parametersStr = parameters != null ? parameters.toSource() : '';
String returnTypeStr = returnType != null ? returnType.toSource() : '';
- Element element = new Element(
- ElementKind.FUNCTION_TYPE_ALIAS,
- name,
- Element.makeFlags(
- isPrivate: Identifier.isPrivateName(name),
- isDeprecated: _isDeprecated(alias)),
+ Element element = new Element(ElementKind.FUNCTION_TYPE_ALIAS, name, Element
+ .makeFlags(
+ isPrivate: Identifier.isPrivateName(name),
+ isDeprecated: _isDeprecated(alias)),
location: _getLocationNode(nameNode),
parameters: parametersStr,
returnType: returnTypeStr);
@@ -339,10 +302,7 @@
_SourceRegion sourceRegion = _getSourceRegion(method);
String parametersStr = parameters != null ? parameters.toSource() : null;
String returnTypeStr = returnType != null ? returnType.toSource() : '';
- Element element = new Element(
- kind,
- name,
- Element.makeFlags(
+ Element element = new Element(kind, name, Element.makeFlags(
isPrivate: Identifier.isPrivateName(name),
isDeprecated: _isDeprecated(method),
isAbstract: method.isAbstract,
@@ -352,23 +312,16 @@
returnType: returnTypeStr);
List<Outline> contents = _addLocalFunctionOutlines(method.body);
Outline outline = new Outline(
- element,
- sourceRegion.offset,
- sourceRegion.length,
+ element, sourceRegion.offset, sourceRegion.length,
children: nullIfEmpty(contents));
return outline;
}
Outline _newUnitOutline(List<Outline> unitContents) {
Element element = new Element(
- ElementKind.COMPILATION_UNIT,
- '<unit>',
- Element.makeFlags(),
+ ElementKind.COMPILATION_UNIT, '<unit>', Element.makeFlags(),
location: _getLocationNode(unit));
- return new Outline(
- element,
- unit.offset,
- unit.length,
+ return new Outline(element, unit.offset, unit.length,
children: nullIfEmpty(unitContents));
}
@@ -377,17 +330,13 @@
SimpleIdentifier nameNode = variable.name;
String name = nameNode.name;
_SourceRegion sourceRegion = _getSourceRegion(variable);
- Element element = new Element(
- kind,
- name,
- Element.makeFlags(
+ Element element = new Element(kind, name, Element.makeFlags(
isPrivate: Identifier.isPrivateName(name),
isDeprecated: _isDeprecated(variable),
isStatic: isStatic,
isConst: variable.isConst,
isFinal: variable.isFinal),
- location: _getLocationNode(nameNode),
- returnType: typeName);
+ location: _getLocationNode(nameNode), returnType: typeName);
Outline outline =
new Outline(element, sourceRegion.offset, sourceRegion.length);
return outline;
@@ -402,7 +351,6 @@
}
}
-
/**
* A visitor for building local function outlines.
*/
@@ -418,7 +366,6 @@
}
}
-
/**
* A range of characters.
*/
diff --git a/pkg/analysis_server/lib/src/computer/computer_overrides.dart b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
index d0c3cf2..c47e127 100644
--- a/pkg/analysis_server/lib/src/computer/computer_overrides.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
@@ -9,7 +9,6 @@
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart' as engine;
-
/**
* A computer for class member overrides in a Dart [CompilationUnit].
*/
@@ -66,22 +65,21 @@
}
// is there any override?
if (superEngineElement != null || interfaceEngineElements.isNotEmpty) {
- OverriddenMember superMember = superEngineElement != null ?
- newOverriddenMember_fromEngine(superEngineElement) :
- null;
- List<OverriddenMember> interfaceMembers = interfaceEngineElements.map(
- (engine.Element member) => newOverriddenMember_fromEngine(member)).toList();
- _overrides.add(
- new Override(
- offset,
- length,
- superclassMember: superMember,
- interfaceMembers: nullIfEmpty(interfaceMembers)));
+ OverriddenMember superMember = superEngineElement != null
+ ? newOverriddenMember_fromEngine(superEngineElement)
+ : null;
+ List<OverriddenMember> interfaceMembers = interfaceEngineElements
+ .map(
+ (engine.Element member) => newOverriddenMember_fromEngine(member))
+ .toList();
+ _overrides.add(new Override(offset, length,
+ superclassMember: superMember,
+ interfaceMembers: nullIfEmpty(interfaceMembers)));
}
}
- static engine.Element _lookupMember(engine.ClassElement classElement,
- String name) {
+ static engine.Element _lookupMember(
+ engine.ClassElement classElement, String name) {
if (classElement == null) {
return null;
}
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index e0ad10d..29de8df 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -7,7 +7,9 @@
import 'dart:async';
import 'dart:collection';
+import 'package:analysis_server/src/analysis_server.dart';
import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/instrumentation/instrumentation.dart';
import 'package:analyzer/source/package_map_provider.dart';
import 'package:analyzer/source/package_map_resolver.dart';
import 'package:analyzer/src/generated/engine.dart';
@@ -17,19 +19,16 @@
import 'package:path/path.dart' as pathos;
import 'package:watcher/watcher.dart';
-
/**
* The name of `packages` folders.
*/
const String PACKAGES_NAME = 'packages';
-
/**
* File name of pubspec files.
*/
const String PUBSPEC_NAME = 'pubspec.yaml';
-
/**
* Class that maintains a mapping from included/excluded paths to a set of
* folders that should correspond to analysis contexts.
@@ -85,7 +84,13 @@
*/
final PackageMapProvider _packageMapProvider;
- ContextManager(this.resourceProvider, this._packageMapProvider) {
+ /**
+ * The instrumentation service used to report instrumentation data.
+ */
+ final InstrumentationService _instrumentationService;
+
+ ContextManager(this.resourceProvider, this._packageMapProvider,
+ this._instrumentationService) {
pathContext = resourceProvider.pathContext;
}
@@ -180,9 +185,8 @@
includedFolders.add(resource);
} else {
// TODO(scheglov) implemented separate files analysis
- throw new UnimplementedError(
- '$path is not a folder. '
- 'Only support for folder analysis is implemented currently.');
+ throw new UnimplementedError('$path is not a folder. '
+ 'Only support for folder analysis is implemented currently.');
}
}
this.includedPaths = includedPaths;
@@ -244,8 +248,8 @@
/**
* Called when the package map for a context has changed.
*/
- void updateContextPackageUriResolver(Folder contextFolder,
- UriResolver packageUriResolver);
+ void updateContextPackageUriResolver(
+ Folder contextFolder, UriResolver packageUriResolver);
/**
* Resursively adds all Dart and HTML files to the [changeSet].
@@ -265,8 +269,7 @@
continue;
}
// ignore if was not excluded
- bool wasExcluded =
- _isExcludedBy(oldExcludedPaths, path) &&
+ bool wasExcluded = _isExcludedBy(oldExcludedPaths, path) &&
!_isExcludedBy(excludedPaths, path);
if (!wasExcluded) {
continue;
@@ -326,16 +329,17 @@
return new PackageUriResolver([new JavaFile(info.packageRoot)]);
} else {
beginComputePackageMap();
- PackageMapInfo packageMapInfo =
- _packageMapProvider.computePackageMap(folder);
+ PackageMapInfo packageMapInfo;
+ ServerPerformanceStatistics.pub.makeCurrentWhile(() {
+ packageMapInfo = _packageMapProvider.computePackageMap(folder);
+ });
endComputePackageMap();
info.packageMapDependencies = packageMapInfo.dependencies;
if (packageMapInfo.packageMap == null) {
return null;
}
return new PackageMapUriResolver(
- resourceProvider,
- packageMapInfo.packageMap);
+ resourceProvider, packageMapInfo.packageMap);
// TODO(paulberry): if any of the dependencies is outside of [folder],
// we'll need to watch their parent folders as well.
}
@@ -344,33 +348,17 @@
/**
* Create a new empty context associated with [folder].
*/
- _ContextInfo _createContext(Folder folder, File pubspecFile,
- List<_ContextInfo> children) {
+ _ContextInfo _createContext(
+ Folder folder, File pubspecFile, List<_ContextInfo> children) {
_ContextInfo info = new _ContextInfo(
- folder,
- pubspecFile,
- children,
- normalizedPackageRoots[folder.path]);
+ folder, pubspecFile, children, normalizedPackageRoots[folder.path]);
_contexts[folder] = info;
info.changeSubscription = folder.changes.listen((WatchEvent event) {
_handleWatchEvent(folder, info, event);
});
UriResolver packageUriResolver = _computePackageUriResolver(folder, info);
info.context = addContext(folder, packageUriResolver);
- return info;
- }
-
- /**
- * Create a new context associated with the given [folder]. The [pubspecFile]
- * is the `pubspec.yaml` file contained in the folder. Add any sources that
- * are not included in one of the [children] to the context.
- */
- _ContextInfo _createContextWithSources(Folder folder, File pubspecFile,
- List<_ContextInfo> children) {
- _ContextInfo info = _createContext(folder, pubspecFile, children);
- ChangeSet changeSet = new ChangeSet();
- _addSourceFiles(changeSet, folder, info);
- applyChangesToContext(folder, changeSet);
+ info.context.name = folder.path;
return info;
}
@@ -414,6 +402,20 @@
}
/**
+ * Create a new context associated with the given [folder]. The [pubspecFile]
+ * is the `pubspec.yaml` file contained in the folder. Add any sources that
+ * are not included in one of the [children] to the context.
+ */
+ _ContextInfo _createContextWithSources(
+ Folder folder, File pubspecFile, List<_ContextInfo> children) {
+ _ContextInfo info = _createContext(folder, pubspecFile, children);
+ ChangeSet changeSet = new ChangeSet();
+ _addSourceFiles(changeSet, folder, info);
+ applyChangesToContext(folder, changeSet);
+ return info;
+ }
+
+ /**
* Clean up and destroy the context associated with the given folder.
*/
void _destroyContext(Folder folder) {
@@ -457,6 +459,8 @@
}
void _handleWatchEvent(Folder folder, _ContextInfo info, WatchEvent event) {
+ _instrumentationService.logWatchEvent(
+ folder.path, event.path, event.type.toString());
String path = event.path;
// maybe excluded globally
if (_isExcluded(path)) {
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
index 01d1855..5b46107 100644
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ b/pkg/analysis_server/lib/src/domain_analysis.dart
@@ -14,7 +14,6 @@
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/engine.dart' as engine;
-
/**
* Instances of the class [AnalysisDomainHandler] implement a [RequestHandler]
* that handles requests in the `analysis` domain.
@@ -48,8 +47,8 @@
if (errorInfo == null) {
server.sendResponse(new Response.getErrorsInvalidFile(request));
} else {
- errors =
- doAnalysisError_listFromEngine(errorInfo.lineInfo, errorInfo.errors);
+ errors = doAnalysisError_listFromEngine(
+ errorInfo.lineInfo, errorInfo.errors);
server.sendResponse(
new AnalysisGetErrorsResult(errors).toResponse(request.id));
}
@@ -97,8 +96,8 @@
Map<String, Map<String, List<String>>> packageMap =
collector.calculatePackageMap(server.folderMap);
server.sendResponse(new AnalysisGetLibraryDependenciesResult(
- libraries.toList(growable: false),
- packageMap).toResponse(request.id));
+ libraries.toList(growable: false), packageMap)
+ .toResponse(request.id));
});
// delay response
return Response.DELAYED_RESPONSE;
@@ -147,10 +146,7 @@
Response setAnalysisRoots(Request request) {
var params = new AnalysisSetAnalysisRootsParams.fromRequest(request);
// continue in server
- server.setAnalysisRoots(
- request.id,
- params.included,
- params.excluded,
+ server.setAnalysisRoots(request.id, params.included, params.excluded,
params.packageRoots == null ? {} : params.packageRoots);
return new AnalysisSetAnalysisRootsResult().toResponse(request.id);
}
@@ -170,8 +166,7 @@
Response setSubscriptions(Request request) {
var params = new AnalysisSetSubscriptionsParams.fromRequest(request);
// parse subscriptions
- Map<AnalysisService, Set<String>> subMap = mapMap(
- params.subscriptions,
+ Map<AnalysisService, Set<String>> subMap = mapMap(params.subscriptions,
valueCallback: (List<String> subscriptions) => subscriptions.toSet());
server.setAnalysisSubscriptions(subMap);
return new AnalysisSetSubscriptionsResult().toResponse(request.id);
diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart
index a69dbb1..e6bb328 100644
--- a/pkg/analysis_server/lib/src/domain_completion.dart
+++ b/pkg/analysis_server/lib/src/domain_completion.dart
@@ -89,8 +89,8 @@
* Return the [CompletionManager] for the given [context] and [source],
* creating a new manager or returning an existing manager as necessary.
*/
- CompletionManager completionManagerFor(AnalysisContext context,
- Source source) {
+ CompletionManager completionManagerFor(
+ AnalysisContext context, Source source) {
if (_manager != null) {
if (_manager.context == context && _manager.source == source) {
return _manager;
@@ -118,8 +118,8 @@
}
}
- CompletionManager createCompletionManager(AnalysisContext context,
- Source source, SearchEngine searchEngine) {
+ CompletionManager createCompletionManager(
+ AnalysisContext context, Source source, SearchEngine searchEngine) {
return new CompletionManager.create(context, source, searchEngine);
}
@@ -186,12 +186,8 @@
manager.results(completionRequest).listen((CompletionResult result) {
++notificationCount;
performance.logElapseTime("notification $notificationCount send", () {
- sendCompletionNotification(
- completionId,
- result.replacementOffset,
- result.replacementLength,
- result.suggestions,
- result.last);
+ sendCompletionNotification(completionId, result.replacementOffset,
+ result.replacementLength, result.suggestions, result.last);
});
if (notificationCount == 1) {
performance.logFirstNotificationComplete('notification 1 complete');
@@ -204,8 +200,8 @@
}
});
// initial response without results
- return new CompletionGetSuggestionsResult(
- completionId).toResponse(request.id);
+ return new CompletionGetSuggestionsResult(completionId)
+ .toResponse(request.id);
}
/**
@@ -233,14 +229,11 @@
* Send completion notification results.
*/
void sendCompletionNotification(String completionId, int replacementOffset,
- int replacementLength, Iterable<CompletionSuggestion> results, bool isLast) {
- server.sendNotification(
- new CompletionResultsParams(
- completionId,
- replacementOffset,
- replacementLength,
- results,
- isLast).toNotification());
+ int replacementLength, Iterable<CompletionSuggestion> results,
+ bool isLast) {
+ server.sendNotification(new CompletionResultsParams(
+ completionId, replacementOffset, replacementLength, results, isLast)
+ .toNotification());
}
/**
@@ -248,7 +241,6 @@
* the cache changes or if any source is added, removed, or deleted.
*/
void sourcesChanged(SourcesChangedEvent event) {
-
bool shouldDiscardManager(SourcesChangedEvent event) {
if (_manager == null) {
return false;
@@ -258,7 +250,8 @@
}
var changedSources = event.changedSources;
return changedSources.length > 2 ||
- (changedSources.length == 1 && !changedSources.contains(_manager.source));
+ (changedSources.length == 1 &&
+ !changedSources.contains(_manager.source));
}
if (shouldDiscardManager(event)) {
diff --git a/pkg/analysis_server/lib/src/domain_execution.dart b/pkg/analysis_server/lib/src/domain_execution.dart
index 3e5d28c..d3323c7 100644
--- a/pkg/analysis_server/lib/src/domain_execution.dart
+++ b/pkg/analysis_server/lib/src/domain_execution.dart
@@ -93,9 +93,7 @@
String contextId = params.id;
String path = contextMap[contextId];
if (path == null) {
- return new Response.invalidParameter(
- request,
- 'id',
+ return new Response.invalidParameter(request, 'id',
'There is no execution context with an id of $contextId');
}
AnalysisContext context = server.getAnalysisContext(path);
@@ -106,9 +104,7 @@
String uri = params.uri;
if (file != null) {
if (uri != null) {
- return new Response.invalidParameter(
- request,
- 'file',
+ return new Response.invalidParameter(request, 'file',
'Either file or uri must be provided, but not both');
}
Resource resource = server.resourceProvider.getResource(file);
@@ -116,9 +112,7 @@
return new Response.invalidParameter(request, 'file', 'Must exist');
} else if (resource is! File) {
return new Response.invalidParameter(
- request,
- 'file',
- 'Must not refer to a directory');
+ request, 'file', 'Must not refer to a directory');
}
Source source = server.getSource(file);
uri = context.sourceFactory.restoreUri(source).toString();
@@ -132,9 +126,7 @@
return new ExecutionMapUriResult(file: file).toResponse(request.id);
}
return new Response.invalidParameter(
- request,
- 'file',
- 'Either file or uri must be provided');
+ request, 'file', 'Either file or uri must be provided');
}
/**
@@ -176,13 +168,12 @@
kind = ExecutableKind.SERVER;
}
server.sendNotification(
- new ExecutionLaunchDataParams(filePath, kind: kind).toNotification());
+ new ExecutionLaunchDataParams(filePath, kind: kind)
+ .toNotification());
} else if (AnalysisEngine.isHtmlFileName(filePath)) {
List<Source> libraries = context.getLibrariesReferencedFromHtml(source);
- server.sendNotification(
- new ExecutionLaunchDataParams(
- filePath,
- referencedFiles: _getFullNames(libraries)).toNotification());
+ server.sendNotification(new ExecutionLaunchDataParams(filePath,
+ referencedFiles: _getFullNames(libraries)).toNotification());
}
});
}
@@ -219,10 +210,8 @@
if (_isInAnalysisRoot(filePath)) {
List<Source> libraries =
context.getLibrariesReferencedFromHtml(source);
- server.sendNotification(
- new ExecutionLaunchDataParams(
- filePath,
- referencedFiles: _getFullNames(libraries)).toNotification());
+ server.sendNotification(new ExecutionLaunchDataParams(filePath,
+ referencedFiles: _getFullNames(libraries)).toNotification());
}
}
}
diff --git a/pkg/analysis_server/lib/src/domain_server.dart b/pkg/analysis_server/lib/src/domain_server.dart
index a99b196..81930b9 100644
--- a/pkg/analysis_server/lib/src/domain_server.dart
+++ b/pkg/analysis_server/lib/src/domain_server.dart
@@ -27,8 +27,8 @@
* Return the version number of the analysis server.
*/
Response getVersion(Request request) {
- return new ServerGetVersionResult(
- AnalysisServer.VERSION).toResponse(request.id);
+ return new ServerGetVersionResult(AnalysisServer.VERSION)
+ .toResponse(request.id);
}
@override
@@ -55,7 +55,8 @@
*/
Response setSubscriptions(Request request) {
server.serverServices =
- new ServerSetSubscriptionsParams.fromRequest(request).subscriptions.toSet();
+ new ServerSetSubscriptionsParams.fromRequest(request).subscriptions
+ .toSet();
return new ServerSetSubscriptionsResult().toResponse(request.id);
}
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index 003525b..bc23ad5 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -25,12 +25,10 @@
import 'package:analyzer/src/generated/source.dart';
import 'package:dart_style/dart_style.dart';
-
bool test_simulateRefactoringException_change = false;
bool test_simulateRefactoringException_final = false;
bool test_simulateRefactoringException_init = false;
-
/**
* Instances of the class [EditDomainHandler] implement a [RequestHandler]
* that handles requests in the edit domain.
@@ -57,7 +55,6 @@
}
Response format(Request request) {
-
EditFormatParams params = new EditFormatParams.fromRequest(request);
String file = params.file;
@@ -85,8 +82,7 @@
length = null;
}
- SourceCode code = new SourceCode(
- unformattedSource,
+ SourceCode code = new SourceCode(unformattedSource,
uri: null,
isCompilationUnit: true,
selectionStart: start,
@@ -104,9 +100,7 @@
edits.add(edit);
}
- return new EditFormatResult(
- edits,
- formattedResult.selectionStart,
+ return new EditFormatResult(edits, formattedResult.selectionStart,
formattedResult.selectionLength).toResponse(request.id);
}
@@ -290,7 +284,6 @@
}
}
-
/**
* An object managing a single [Refactoring] instance.
*
@@ -302,9 +295,8 @@
* is invalidated and a new one is created and initialized.
*/
class _RefactoringManager {
- static const List<RefactoringProblem> EMPTY_PROBLEM_LIST = const
- <RefactoringProblem>[
- ];
+ static const List<RefactoringProblem> EMPTY_PROBLEM_LIST =
+ const <RefactoringProblem>[];
final AnalysisServer server;
final SearchEngine searchEngine;
@@ -363,9 +355,7 @@
// prepare for processing the request
request = _request;
result = new EditGetRefactoringResult(
- EMPTY_PROBLEM_LIST,
- EMPTY_PROBLEM_LIST,
- EMPTY_PROBLEM_LIST);
+ EMPTY_PROBLEM_LIST, EMPTY_PROBLEM_LIST, EMPTY_PROBLEM_LIST);
// process the request
var params = new EditGetRefactoringParams.fromRequest(_request);
runZoned(() async {
@@ -424,8 +414,8 @@
* Initializes this context to perform a refactoring with the specified
* parameters. The existing [Refactoring] is reused or created as needed.
*/
- Future _init(RefactoringKind kind, String file, int offset,
- int length) async {
+ Future _init(
+ RefactoringKind kind, String file, int offset, int length) async {
await server.onAnalysisComplete;
// check if we can continue with the existing Refactoring instance
if (this.kind == kind &&
@@ -474,10 +464,10 @@
if (kind == RefactoringKind.EXTRACT_METHOD) {
List<CompilationUnit> units = server.getResolvedCompilationUnits(file);
if (units.isNotEmpty) {
- refactoring =
- new ExtractMethodRefactoring(searchEngine, units[0], offset, length);
- feedback =
- new ExtractMethodFeedback(offset, length, null, [], false, [], [], []);
+ refactoring = new ExtractMethodRefactoring(
+ searchEngine, units[0], offset, length);
+ feedback = new ExtractMethodFeedback(
+ offset, length, null, [], false, [], [], []);
}
}
if (kind == RefactoringKind.INLINE_LOCAL_VARIABLE) {
@@ -498,10 +488,7 @@
engine.AnalysisContext context = server.getAnalysisContext(file);
Source source = server.getSource(file);
refactoring = new MoveFileRefactoring(
- server.resourceProvider.pathContext,
- searchEngine,
- context,
- source);
+ server.resourceProvider.pathContext, searchEngine, context, source);
}
if (kind == RefactoringKind.RENAME) {
List<AstNode> nodes = server.getNodesAtOffset(file, offset);
@@ -552,16 +539,14 @@
InlineLocalRefactoring refactoring = this.refactoring;
if (!initStatus.hasFatalError) {
feedback = new InlineLocalVariableFeedback(
- refactoring.variableName,
- refactoring.referenceCount);
+ refactoring.variableName, refactoring.referenceCount);
}
}
if (refactoring is InlineMethodRefactoring) {
InlineMethodRefactoring refactoring = this.refactoring;
if (!initStatus.hasFatalError) {
feedback = new InlineMethodFeedback(
- refactoring.methodName,
- refactoring.isDeclaration,
+ refactoring.methodName, refactoring.isDeclaration,
className: refactoring.className);
}
}
diff --git a/pkg/analysis_server/lib/src/generated_protocol.dart b/pkg/analysis_server/lib/src/generated_protocol.dart
index 62b3ce8..844635f 100644
--- a/pkg/analysis_server/lib/src/generated_protocol.dart
+++ b/pkg/analysis_server/lib/src/generated_protocol.dart
@@ -10538,7 +10538,8 @@
int length;
/**
- * The proposed return type for the method.
+ * The proposed return type for the method. If the returned element does not
+ * have a declared return type, this field will contain an empty string.
*/
String returnType;
diff --git a/pkg/analysis_server/lib/src/get_handler.dart b/pkg/analysis_server/lib/src/get_handler.dart
index 46272c3..e58e428 100644
--- a/pkg/analysis_server/lib/src/get_handler.dart
+++ b/pkg/analysis_server/lib/src/get_handler.dart
@@ -175,8 +175,7 @@
return null;
}
return analysisServer.handlers.firstWhere(
- (h) => h is CompletionDomainHandler,
- orElse: () => null);
+ (h) => h is CompletionDomainHandler, orElse: () => null);
}
/**
@@ -219,8 +218,7 @@
*/
Folder _findFolder(AnalysisServer analysisServer, String contextFilter) {
return analysisServer.folderMap.keys.firstWhere(
- (Folder folder) => folder.path == contextFilter,
- orElse: () => null);
+ (Folder folder) => folder.path == contextFilter, orElse: () => null);
}
/**
@@ -229,9 +227,8 @@
*/
bool _hasException(AnalysisContextImpl context) {
bool hasException = false;
- context.visitCacheItems(
- (Source source, SourceEntry sourceEntry, DataDescriptor rowDesc,
- CacheState state) {
+ context.visitCacheItems((Source source, SourceEntry sourceEntry,
+ DataDescriptor rowDesc, CacheState state) {
if (sourceEntry.exception != null) {
hasException = true;
}
@@ -243,8 +240,8 @@
* Return the folder in the [folderMap] with which the given [context] is
* associated.
*/
- Folder _keyForValue(Map<Folder, AnalysisContext> folderMap,
- AnalysisContext context) {
+ Folder _keyForValue(
+ Map<Folder, AnalysisContext> folderMap, AnalysisContext context) {
for (Folder folder in folderMap.keys) {
if (folderMap[folder] == context) {
return folder;
@@ -262,21 +259,15 @@
return _returnFailure(request, 'Analysis server is not running');
}
_writeResponse(request, (StringBuffer buffer) {
- _writePage(
- buffer,
- 'Analysis Server - Analysis Performance',
- [],
+ _writePage(buffer, 'Analysis Server - Analysis Performance', [],
(StringBuffer buffer) {
-
buffer.write('<h3>Analysis Performance</h3>');
{
buffer.write('<p><b>Time spent in each phase of analysis</b></p>');
buffer.write(
'<table style="border-collapse: separate; border-spacing: 10px 5px;">');
- _writeRow(
- buffer,
- ['Time (in ms)', 'Percent', 'Analysis Phase'],
+ _writeRow(buffer, ['Time (in ms)', 'Percent', 'Analysis Phase'],
header: true);
// prepare sorted tags
List<PerformanceTag> tags = PerformanceTag.all.toList();
@@ -291,9 +282,7 @@
void writeRow(PerformanceTag tag) {
double percent = (tag.elapsedMs * 100) / totalTime;
String percentStr = '${percent.toStringAsFixed(2)}%';
- _writeRow(
- buffer,
- [tag.elapsedMs, percentStr, tag.label],
+ _writeRow(buffer, [tag.elapsedMs, percentStr, tag.label],
classes: ["right", "right", null]);
}
tags.forEach(writeRow);
@@ -308,23 +297,19 @@
buffer.write('<p>none</p>');
} else {
List<DataDescriptor> descriptors = transitionMap.keys.toList();
- descriptors.sort(
- (DataDescriptor first, DataDescriptor second) =>
- first.toString().compareTo(second.toString()));
+ descriptors.sort((DataDescriptor first, DataDescriptor second) =>
+ first.toString().compareTo(second.toString()));
for (DataDescriptor key in descriptors) {
Map<CacheState, int> countMap = transitionMap[key];
List<CacheState> oldStates = countMap.keys.toList();
- oldStates.sort(
- (CacheState first, CacheState second) =>
- first.toString().compareTo(second.toString()));
+ oldStates.sort((CacheState first, CacheState second) =>
+ first.toString().compareTo(second.toString()));
buffer.write('<p>${key.toString()}</p>');
buffer.write(
'<table style="border-collapse: separate; border-spacing: 10px 5px;">');
_writeRow(buffer, ['Count', 'Previous State'], header: true);
for (CacheState state in oldStates) {
- _writeRow(
- buffer,
- [countMap[state], state.toString()],
+ _writeRow(buffer, [countMap[state], state.toString()],
classes: ["right", null]);
}
buffer.write('</table>');
@@ -345,8 +330,7 @@
String contextFilter = request.uri.queryParameters[CONTEXT_QUERY_PARAM];
if (contextFilter == null) {
return _returnFailure(
- request,
- 'Query parameter $CONTEXT_QUERY_PARAM required');
+ request, 'Query parameter $CONTEXT_QUERY_PARAM required');
}
Folder folder = _findFolder(analysisServer, contextFilter);
if (folder == null) {
@@ -355,18 +339,16 @@
String sourceUri = request.uri.queryParameters[SOURCE_QUERY_PARAM];
if (sourceUri == null) {
return _returnFailure(
- request,
- 'Query parameter $SOURCE_QUERY_PARAM required');
+ request, 'Query parameter $SOURCE_QUERY_PARAM required');
}
AnalysisContextImpl context = analysisServer.folderMap[folder];
_writeResponse(request, (StringBuffer buffer) {
- _writePage(
- buffer,
- 'Analysis Server - AST Structure',
- ['Context: $contextFilter', 'File: $sourceUri'],
- (HttpResponse) {
+ _writePage(buffer, 'Analysis Server - AST Structure', [
+ 'Context: $contextFilter',
+ 'File: $sourceUri'
+ ], (HttpResponse) {
Source source = context.sourceFactory.forUri(sourceUri);
if (source == null) {
buffer.write('<p>Not found.</p>');
@@ -406,8 +388,7 @@
String contextFilter = request.uri.queryParameters[CONTEXT_QUERY_PARAM];
if (contextFilter == null) {
return _returnFailure(
- request,
- 'Query parameter $CONTEXT_QUERY_PARAM required');
+ request, 'Query parameter $CONTEXT_QUERY_PARAM required');
}
Folder folder = _findFolder(analysisServer, contextFilter);
if (folder == null) {
@@ -416,8 +397,7 @@
String sourceUri = request.uri.queryParameters[SOURCE_QUERY_PARAM];
if (sourceUri == null) {
return _returnFailure(
- request,
- 'Query parameter $SOURCE_QUERY_PARAM required');
+ request, 'Query parameter $SOURCE_QUERY_PARAM required');
}
List<Folder> allContexts = <Folder>[];
@@ -433,17 +413,15 @@
}
}
});
- allContexts.sort(
- (Folder firstFolder, Folder secondFolder) =>
- firstFolder.path.compareTo(secondFolder.path));
+ allContexts.sort((Folder firstFolder, Folder secondFolder) =>
+ firstFolder.path.compareTo(secondFolder.path));
AnalysisContextImpl context = analysisServer.folderMap[folder];
_writeResponse(request, (StringBuffer buffer) {
- _writePage(
- buffer,
- 'Analysis Server - Cache Entry',
- ['Context: $contextFilter', 'File: $sourceUri'],
- (HttpResponse) {
+ _writePage(buffer, 'Analysis Server - Cache Entry', [
+ 'Context: $contextFilter',
+ 'File: $sourceUri'
+ ], (HttpResponse) {
buffer.write('<h3>Analyzing Contexts</h3><p>');
bool first = true;
allContexts.forEach((Folder folder) {
@@ -481,19 +459,13 @@
};
buffer.write('<h3>Library Independent</h3>');
- _writeDescriptorTable(
- buffer,
- entry.descriptors,
- entry.getState,
- entry.getValue,
- linkParameters);
+ _writeDescriptorTable(buffer,
+ entry.descriptors, entry.getState, entry.getValue, linkParameters);
if (entry is DartEntry) {
for (Source librarySource in entry.containingLibraries) {
String libraryName = HTML_ESCAPE.convert(librarySource.fullName);
buffer.write('<h3>In library $libraryName:</h3>');
- _writeDescriptorTable(
- buffer,
- entry.libraryDescriptors,
+ _writeDescriptorTable(buffer, entry.libraryDescriptors,
(DataDescriptor descriptor) =>
entry.getStateInLibrary(descriptor, librarySource),
(DataDescriptor descriptor) =>
@@ -522,15 +494,13 @@
String contextFilter = request.uri.queryParameters[CONTEXT_QUERY_PARAM];
if (contextFilter == null) {
return _returnFailure(
- request,
- 'Query parameter $CONTEXT_QUERY_PARAM required');
+ request, 'Query parameter $CONTEXT_QUERY_PARAM required');
}
// Figure out what CacheState is being searched for.
String stateQueryParam = request.uri.queryParameters[STATE_QUERY_PARAM];
if (stateQueryParam == null) {
return _returnFailure(
- request,
- 'Query parameter $STATE_QUERY_PARAM required');
+ request, 'Query parameter $STATE_QUERY_PARAM required');
}
CacheState stateFilter = null;
for (CacheState value in CacheState.values) {
@@ -540,24 +510,21 @@
}
if (stateFilter == null) {
return _returnFailure(
- request,
- 'Query parameter $STATE_QUERY_PARAM is invalid');
+ request, 'Query parameter $STATE_QUERY_PARAM is invalid');
}
// Figure out which descriptor is being searched for.
String descriptorFilter =
request.uri.queryParameters[DESCRIPTOR_QUERY_PARAM];
if (descriptorFilter == null) {
return _returnFailure(
- request,
- 'Query parameter $DESCRIPTOR_QUERY_PARAM required');
+ request, 'Query parameter $DESCRIPTOR_QUERY_PARAM required');
}
Folder folder = _findFolder(analysisServer, contextFilter);
AnalysisContextImpl context = analysisServer.folderMap[folder];
List<String> links = <String>[];
- context.visitCacheItems(
- (Source source, SourceEntry dartEntry, DataDescriptor rowDesc, CacheState state)
- {
+ context.visitCacheItems((Source source, SourceEntry dartEntry,
+ DataDescriptor rowDesc, CacheState state) {
if (state != stateFilter || rowDesc.toString() != descriptorFilter) {
return;
}
@@ -569,14 +536,11 @@
});
_writeResponse(request, (StringBuffer buffer) {
- _writePage(
- buffer,
- 'Analysis Server - Cache Search',
- [
- 'Context: $contextFilter',
- 'Descriptor: ${HTML_ESCAPE.convert(descriptorFilter)}',
- 'State: ${HTML_ESCAPE.convert(stateQueryParam)}'],
- (StringBuffer buffer) {
+ _writePage(buffer, 'Analysis Server - Cache Search', [
+ 'Context: $contextFilter',
+ 'Descriptor: ${HTML_ESCAPE.convert(descriptorFilter)}',
+ 'State: ${HTML_ESCAPE.convert(stateQueryParam)}'
+ ], (StringBuffer buffer) {
buffer.write('<p>${links.length} files found</p>');
buffer.write('<ul>');
links.forEach((String link) {
@@ -596,45 +560,34 @@
return _returnFailure(request, 'Analysis server is not running');
}
_writeResponse(request, (StringBuffer buffer) {
- _writePage(
- buffer,
- 'Analysis Server - Communication Performance',
- [],
+ _writePage(buffer, 'Analysis Server - Communication Performance', [],
(StringBuffer buffer) {
buffer.write('<h3>Communication Performance</h3>');
_writeTwoColumns(buffer, (StringBuffer buffer) {
ServerPerformance perf = analysisServer.performanceDuringStartup;
int requestCount = perf.requestCount;
- num averageLatency =
- requestCount > 0 ? (perf.requestLatency / requestCount).round() : 0;
+ num averageLatency = requestCount > 0
+ ? (perf.requestLatency / requestCount).round()
+ : 0;
int maximumLatency = perf.maxLatency;
- num slowRequestPercent =
- requestCount > 0 ? (perf.slowRequestCount * 100 / requestCount).round() : 0;
+ num slowRequestPercent = requestCount > 0
+ ? (perf.slowRequestCount * 100 / requestCount).round()
+ : 0;
buffer.write('<h4>Startup</h4>');
buffer.write('<table>');
_writeRow(
- buffer,
- [requestCount, 'requests'],
+ buffer, [requestCount, 'requests'], classes: ["right", null]);
+ _writeRow(buffer, [averageLatency, 'ms average latency'],
classes: ["right", null]);
- _writeRow(
- buffer,
- [averageLatency, 'ms average latency'],
+ _writeRow(buffer, [maximumLatency, 'ms maximum latency'],
classes: ["right", null]);
- _writeRow(
- buffer,
- [maximumLatency, 'ms maximum latency'],
- classes: ["right", null]);
- _writeRow(
- buffer,
- [slowRequestPercent, '% > 150 ms latency'],
+ _writeRow(buffer, [slowRequestPercent, '% > 150 ms latency'],
classes: ["right", null]);
if (analysisServer.performanceAfterStartup != null) {
- int startupTime =
- analysisServer.performanceAfterStartup.startTime -
+ int startupTime = analysisServer.performanceAfterStartup.startTime -
perf.startTime;
_writeRow(
- buffer,
- [startupTime, 'ms for initial analysis to complete']);
+ buffer, [startupTime, 'ms for initial analysis to complete']);
}
buffer.write('</table>');
}, (StringBuffer buffer) {
@@ -643,28 +596,22 @@
return;
}
int requestCount = perf.requestCount;
- num averageLatency =
- requestCount > 0 ? (perf.requestLatency * 10 / requestCount).round() / 10 : 0;
+ num averageLatency = requestCount > 0
+ ? (perf.requestLatency * 10 / requestCount).round() / 10
+ : 0;
int maximumLatency = perf.maxLatency;
- num slowRequestPercent =
- requestCount > 0 ? (perf.slowRequestCount * 100 / requestCount).round() : 0;
+ num slowRequestPercent = requestCount > 0
+ ? (perf.slowRequestCount * 100 / requestCount).round()
+ : 0;
buffer.write('<h4>Current</h4>');
buffer.write('<table>');
_writeRow(
- buffer,
- [requestCount, 'requests'],
+ buffer, [requestCount, 'requests'], classes: ["right", null]);
+ _writeRow(buffer, [averageLatency, 'ms average latency'],
classes: ["right", null]);
- _writeRow(
- buffer,
- [averageLatency, 'ms average latency'],
+ _writeRow(buffer, [maximumLatency, 'ms maximum latency'],
classes: ["right", null]);
- _writeRow(
- buffer,
- [maximumLatency, 'ms maximum latency'],
- classes: ["right", null]);
- _writeRow(
- buffer,
- [slowRequestPercent, '% > 150 ms latency'],
+ _writeRow(buffer, [slowRequestPercent, '% > 150 ms latency'],
classes: ["right", null]);
buffer.write('</table>');
});
@@ -679,10 +626,7 @@
String value = request.requestedUri.queryParameters['index'];
int index = value != null ? int.parse(value, onError: (_) => 0) : 0;
_writeResponse(request, (StringBuffer buffer) {
- _writePage(
- buffer,
- 'Analysis Server - Completion Stats',
- [],
+ _writePage(buffer, 'Analysis Server - Completion Stats', [],
(StringBuffer buffer) {
_writeCompletionPerformanceDetail(buffer, index);
_writeCompletionPerformanceList(buffer);
@@ -702,8 +646,7 @@
String contextFilter = request.uri.queryParameters[CONTEXT_QUERY_PARAM];
if (contextFilter == null) {
return _returnFailure(
- request,
- 'Query parameter $CONTEXT_QUERY_PARAM required');
+ request, 'Query parameter $CONTEXT_QUERY_PARAM required');
}
Folder folder = _findFolder(analysisServer, contextFilter);
if (folder == null) {
@@ -716,11 +659,11 @@
Map<String, String> links = new HashMap<String, String>();
List<CaughtException> exceptions = <CaughtException>[];
AnalysisContextImpl context = analysisServer.folderMap[folder];
- priorityNames =
- context.prioritySources.map((Source source) => source.fullName).toList();
- context.visitCacheItems(
- (Source source, SourceEntry sourceEntry, DataDescriptor rowDesc,
- CacheState state) {
+ priorityNames = context.prioritySources
+ .map((Source source) => source.fullName)
+ .toList();
+ context.visitCacheItems((Source source, SourceEntry sourceEntry,
+ DataDescriptor rowDesc, CacheState state) {
String sourceName = source.fullName;
if (!links.containsKey(sourceName)) {
CaughtException exception = sourceEntry.exception;
@@ -747,8 +690,8 @@
_overlayContents[source.fullName] = contents;
});
- void _writeFiles(StringBuffer buffer, String title, List<String> fileNames)
- {
+ void _writeFiles(
+ StringBuffer buffer, String title, List<String> fileNames) {
buffer.write('<h3>$title</h3>');
if (fileNames == null || fileNames.isEmpty) {
buffer.write('<p>None</p>');
@@ -759,9 +702,8 @@
buffer.write(links[fileName]);
buffer.write('</td><td>');
if (_overlayContents.containsKey(fileName)) {
- buffer.write(makeLink(OVERLAY_PATH, {
- PATH_PARAM: fileName
- }, 'overlay'));
+ buffer.write(
+ makeLink(OVERLAY_PATH, {PATH_PARAM: fileName}, 'overlay'));
}
buffer.write('</td></tr>');
}
@@ -770,11 +712,9 @@
}
_writeResponse(request, (StringBuffer buffer) {
- _writePage(
- buffer,
- 'Analysis Server - Context',
- ['Context: $contextFilter'],
- (StringBuffer buffer) {
+ _writePage(buffer, 'Analysis Server - Context', [
+ 'Context: $contextFilter'
+ ], (StringBuffer buffer) {
List headerRowText = ['Context'];
headerRowText.addAll(CacheState.values);
buffer.write('<h3>Summary</h3>');
@@ -823,8 +763,7 @@
String contextFilter = request.uri.queryParameters[CONTEXT_QUERY_PARAM];
if (contextFilter == null) {
return _returnFailure(
- request,
- 'Query parameter $CONTEXT_QUERY_PARAM required');
+ request, 'Query parameter $CONTEXT_QUERY_PARAM required');
}
Folder folder = _findFolder(analysisServer, contextFilter);
if (folder == null) {
@@ -833,18 +772,16 @@
String sourceUri = request.uri.queryParameters[SOURCE_QUERY_PARAM];
if (sourceUri == null) {
return _returnFailure(
- request,
- 'Query parameter $SOURCE_QUERY_PARAM required');
+ request, 'Query parameter $SOURCE_QUERY_PARAM required');
}
AnalysisContextImpl context = analysisServer.folderMap[folder];
_writeResponse(request, (StringBuffer buffer) {
- _writePage(
- buffer,
- 'Analysis Server - Element Model',
- ['Context: $contextFilter', 'File: $sourceUri'],
- (StringBuffer buffer) {
+ _writePage(buffer, 'Analysis Server - Element Model', [
+ 'Context: $contextFilter',
+ 'File: $sourceUri'
+ ], (StringBuffer buffer) {
Source source = context.sourceFactory.forUri(sourceUri);
if (source == null) {
buffer.write('<p>Not found.</p>');
@@ -867,10 +804,7 @@
void _returnFailure(HttpRequest request, String message) {
_writeResponse(request, (StringBuffer buffer) {
- _writePage(
- buffer,
- 'Analysis Server - Failure',
- [],
+ _writePage(buffer, 'Analysis Server - Failure', [],
(StringBuffer buffer) {
buffer.write(HTML_ESCAPE.convert(message));
});
@@ -893,31 +827,25 @@
String name = request.uri.queryParameters[INDEX_ELEMENT_NAME];
if (name == null) {
return _returnFailure(
- request,
- 'Query parameter $INDEX_ELEMENT_NAME required');
+ request, 'Query parameter $INDEX_ELEMENT_NAME required');
}
if (index is LocalIndex) {
Map<List<String>, List<InspectLocation>> relations =
await index.findElementsByName(name);
_writeResponse(request, (StringBuffer buffer) {
- _writePage(
- buffer,
- 'Analysis Server - Index Elements',
- ['Name: $name'],
- (StringBuffer buffer) {
+ _writePage(buffer, 'Analysis Server - Index Elements', [
+ 'Name: $name'
+ ], (StringBuffer buffer) {
buffer.write('<table border="1">');
- _writeRow(
- buffer,
- ['Element', 'Relationship', 'Location'],
+ _writeRow(buffer, ['Element', 'Relationship', 'Location'],
header: true);
relations.forEach(
(List<String> elementPath, List<InspectLocation> relations) {
String elementLocation = elementPath.join(' ');
relations.forEach((InspectLocation location) {
var relString = location.relationship.identifier;
- var locString =
- '${location.path} offset=${location.offset} '
- 'length=${location.length} flags=${location.flags}';
+ var locString = '${location.path} offset=${location.offset} '
+ 'length=${location.length} flags=${location.flags}';
_writeRow(buffer, [elementLocation, relString, locString]);
});
});
@@ -937,10 +865,7 @@
String contents = _overlayContents[path];
_writeResponse(request, (StringBuffer buffer) {
- _writePage(
- buffer,
- 'Analysis Server - Overlay',
- [],
+ _writePage(buffer, 'Analysis Server - Overlay', [],
(StringBuffer buffer) {
buffer.write('<pre>${HTML_ESCAPE.convert(contents)}</pre>');
});
@@ -957,10 +882,7 @@
}
_writeResponse(request, (StringBuffer buffer) {
- _writePage(
- buffer,
- 'Analysis Server - Overlays',
- [],
+ _writePage(buffer, 'Analysis Server - Overlays', [],
(StringBuffer buffer) {
buffer.write('<table border="1">');
_overlayContents.clear();
@@ -968,9 +890,8 @@
overlayState.accept((Source source, int stamp, String contents) {
String fileName = source.fullName;
buffer.write('<tr>');
- String link = makeLink(OVERLAY_PATH, {
- PATH_PARAM: fileName
- }, fileName);
+ String link =
+ makeLink(OVERLAY_PATH, {PATH_PARAM: fileName}, fileName);
DateTime time = new DateTime.fromMillisecondsSinceEpoch(stamp);
_writeRow(buffer, [link, time]);
_overlayContents[fileName] = contents;
@@ -1010,8 +931,8 @@
buffer.write(makeLink(COMPLETION_PATH, {}, 'Completion data'));
buffer.write('</p>');
buffer.write('<p>');
- buffer.write(
- makeLink(COMMUNICATION_PERFORMANCE_PATH, {}, 'Performance'));
+ buffer
+ .write(makeLink(COMMUNICATION_PERFORMANCE_PATH, {}, 'Performance'));
buffer.write('</p>');
buffer.write('<p>');
buffer.write(makeLink(STATUS_PATH, {}, 'Server status'));
@@ -1042,8 +963,8 @@
AnalysisServer analysisServer = _server.analysisServer;
Map<Folder, AnalysisContext> folderMap = analysisServer.folderMap;
List<Folder> folders = folderMap.keys.toList();
- folders.sort(
- (Folder first, Folder second) => first.shortName.compareTo(second.shortName));
+ folders.sort((Folder first, Folder second) =>
+ first.shortName.compareTo(second.shortName));
AnalysisOptionsImpl options =
analysisServer.contextDirectoryManager.defaultOptions;
ServerOperationQueue operationQueue = analysisServer.operationQueue;
@@ -1085,23 +1006,16 @@
buffer.write('<p><b>Options</b></p>');
buffer.write('<p>');
_writeOption(
- buffer,
- 'Analyze functon bodies',
- options.analyzeFunctionBodies);
+ buffer, 'Analyze functon bodies', options.analyzeFunctionBodies);
_writeOption(buffer, 'Cache size', options.cacheSize);
_writeOption(buffer, 'Generate hints', options.hint);
_writeOption(buffer, 'Generate dart2js hints', options.dart2jsHint);
_writeOption(buffer, 'Generate SDK errors', options.generateSdkErrors);
_writeOption(buffer, 'Incremental resolution', options.incremental);
- _writeOption(
- buffer,
- 'Incremental resolution with API changes',
+ _writeOption(buffer, 'Incremental resolution with API changes',
options.incrementalApi);
_writeOption(
- buffer,
- 'Preserve comments',
- options.preserveComments,
- last: true);
+ buffer, 'Preserve comments', options.preserveComments, last: true);
buffer.write('</p>');
int freq = AnalysisServer.performOperationDelayFreqency;
String delay = freq > 0 ? '1 ms every $freq ms' : 'off';
@@ -1113,9 +1027,7 @@
buffer.write('</p>');
}, (StringBuffer buffer) {
_writeSubscriptionMap(
- buffer,
- AnalysisService.VALUES,
- analysisServer.analysisServices);
+ buffer, AnalysisService.VALUES, analysisServer.analysisServices);
});
}
@@ -1168,40 +1080,37 @@
return;
}
buffer.write('<table>');
- _writeRow(
- buffer,
- [
- 'Start Time',
- '',
- 'First (ms)',
- '',
- 'Complete (ms)',
- '',
- '# Notifications',
- '',
- '# Suggestions',
- '',
- 'Snippet'],
- header: true);
+ _writeRow(buffer, [
+ 'Start Time',
+ '',
+ 'First (ms)',
+ '',
+ 'Complete (ms)',
+ '',
+ '# Notifications',
+ '',
+ '# Suggestions',
+ '',
+ 'Snippet'
+ ], header: true);
int index = 0;
for (CompletionPerformance performance in handler.performanceList) {
String link = makeLink(COMPLETION_PATH, {
'index': '$index'
}, '${performance.startTimeAndMs}');
- _writeRow(
- buffer,
- [
- link,
- ' ',
- performance.firstNotificationInMilliseconds,
- ' ',
- performance.elapsedInMilliseconds,
- ' ',
- performance.notificationCount,
- ' ',
- performance.suggestionCount,
- ' ',
- HTML_ESCAPE.convert(performance.snippet)]);
+ _writeRow(buffer, [
+ link,
+ ' ',
+ performance.firstNotificationInMilliseconds,
+ ' ',
+ performance.elapsedInMilliseconds,
+ ' ',
+ performance.notificationCount,
+ ' ',
+ performance.suggestionCount,
+ ' ',
+ HTML_ESCAPE.convert(performance.snippet)
+ ]);
++index;
}
@@ -1231,8 +1140,8 @@
* the current page and needs to be linked to a separate page.
*/
void _writeDescriptorTable(StringBuffer buffer,
- List<DataDescriptor> descriptors, CacheState getState(DataDescriptor), dynamic
- getValue(DataDescriptor), Map<String, String> linkParameters) {
+ List<DataDescriptor> descriptors, CacheState getState(DataDescriptor),
+ dynamic getValue(DataDescriptor), Map<String, String> linkParameters) {
buffer.write('<dl>');
for (DataDescriptor descriptor in descriptors) {
String descriptorName = HTML_ESCAPE.convert(descriptor.toString());
@@ -1260,8 +1169,7 @@
buffer.write('<p>');
buffer.write(makeLink(COMPLETION_PATH, {}, 'Completion data'));
buffer.write('</p>');
- }, (StringBuffer buffer) {
- });
+ }, (StringBuffer buffer) {});
}
/**
@@ -1316,8 +1224,7 @@
buffer.write('<h3>Execution Domain</h3>');
_writeTwoColumns(buffer, (StringBuffer buffer) {
_writeSubscriptionList(buffer, ExecutionService.VALUES, services);
- }, (StringBuffer buffer) {
- });
+ }, (StringBuffer buffer) {});
}
}
@@ -1327,8 +1234,8 @@
* options unless the [last] flag is true, indicating that this is the last
* option in the list of options.
*/
- void _writeOption(StringBuffer buffer, String name, Object value, {bool last:
- false}) {
+ void _writeOption(StringBuffer buffer, String name, Object value,
+ {bool last: false}) {
buffer.write(name);
buffer.write(' = ');
buffer.write(value.toString());
@@ -1441,8 +1348,8 @@
* one cell for each of the [columns], and will be a header row if [header] is
* `true`.
*/
- void _writeRow(StringBuffer buffer, List<Object> columns, {bool header: false,
- List<String> classes}) {
+ void _writeRow(StringBuffer buffer, List<Object> columns,
+ {bool header: false, List<String> classes}) {
buffer.write('<tr>');
int count = columns.length;
int maxClassIndex = classes == null ? 0 : classes.length - 1;
@@ -1498,8 +1405,8 @@
buffer.write('<p><b>Performance Data</b></p>');
buffer.write('<p>');
- buffer.write(
- makeLink(COMMUNICATION_PERFORMANCE_PATH, {}, 'Communication performance'));
+ buffer.write(makeLink(
+ COMMUNICATION_PERFORMANCE_PATH, {}, 'Communication performance'));
buffer.write('</p>');
}, (StringBuffer buffer) {
_writeSubscriptionList(buffer, ServerService.VALUES, services);
@@ -1527,8 +1434,8 @@
* that are actually subscribed to ([subscribedServices]), write a
* representation of the service to the given [buffer].
*/
- void _writeSubscriptionInList(StringBuffer buffer, Enum service,
- Set<Enum> subscribedServices) {
+ void _writeSubscriptionInList(
+ StringBuffer buffer, Enum service, Set<Enum> subscribedServices) {
if (subscribedServices.contains(service)) {
buffer.write('<code>+ </code>');
} else {
@@ -1543,8 +1450,8 @@
* subscribed to the services ([subscribedPaths]), write a representation of
* the service to the given [buffer].
*/
- void _writeSubscriptionInMap(StringBuffer buffer, Enum service,
- Set<String> subscribedPaths) {
+ void _writeSubscriptionInMap(
+ StringBuffer buffer, Enum service, Set<String> subscribedPaths) {
buffer.write('<p>');
buffer.write(service.name);
buffer.write('</p>');
@@ -1598,8 +1505,8 @@
*/
void _writeTwoColumns(StringBuffer buffer, HtmlGenerator leftColumn,
HtmlGenerator rightColumn) {
- buffer.write(
- '<table class="column"><tr class="column"><td class="column">');
+ buffer
+ .write('<table class="column"><tr class="column"><td class="column">');
leftColumn(buffer);
buffer.write('</td><td class="column">');
rightColumn(buffer);
@@ -1611,8 +1518,8 @@
* [linkParameters] will be used if the value is too large to be displayed on
* the current page and needs to be linked to a separate page.
*/
- void _writeValueAsHtml(StringBuffer buffer, Object value, Map<String,
- String> linkParameters) {
+ void _writeValueAsHtml(
+ StringBuffer buffer, Object value, Map<String, String> linkParameters) {
if (value == null) {
buffer.write('<i>null</i>');
} else if (value is String) {
@@ -1645,8 +1552,9 @@
* [innerHtml]. If [hasError] is `true`, then the link will have the class
* 'error'.
*/
- static String makeLink(String path, Map<String, String> params,
- String innerHtml, [bool hasError = false]) {
+ static String makeLink(
+ String path, Map<String, String> params, String innerHtml,
+ [bool hasError = false]) {
Uri uri = new Uri(path: path, queryParameters: params);
String href = HTML_ESCAPE.convert(uri.toString());
String classAttribute = hasError ? ' class="error"' : '';
diff --git a/pkg/analysis_server/lib/src/operation/operation.dart b/pkg/analysis_server/lib/src/operation/operation.dart
index e9ed101..1433c90 100644
--- a/pkg/analysis_server/lib/src/operation/operation.dart
+++ b/pkg/analysis_server/lib/src/operation/operation.dart
@@ -7,7 +7,6 @@
import 'package:analysis_server/src/analysis_server.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* The class [ServerOperation] defines the behavior of objects used to perform
* operations on a [AnalysisServer].
@@ -24,7 +23,6 @@
void perform(AnalysisServer server);
}
-
/**
* The enumeration [ServerOperationPriority] defines the priority levels used
* to organize [ServerOperation]s in an optimal order. A smaller ordinal value
@@ -60,7 +58,6 @@
String toString() => name;
}
-
/**
* [SourceSensitiveOperation] can decide if the operation should be discarded
* before a change is applied to a [Source].
diff --git a/pkg/analysis_server/lib/src/operation/operation_analysis.dart b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
index 4ed7609..aa751e3 100644
--- a/pkg/analysis_server/lib/src/operation/operation_analysis.dart
+++ b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
@@ -19,6 +19,13 @@
import 'package:analyzer/src/generated/html.dart';
import 'package:analyzer/src/generated/source.dart';
+/**
+ * Schedules indexing of the given [file] using the resolved [dartUnit].
+ */
+void scheduleIndexOperation(AnalysisServer server, String file,
+ AnalysisContext context, CompilationUnit dartUnit) {
+ server.addOperation(new _DartIndexOperation(context, file, dartUnit));
+}
/**
* Schedules sending notifications for the given [file] using the resolved
@@ -42,34 +49,29 @@
resolvedDartUnit != null ? resolvedDartUnit : parsedDartUnit;
if (resolvedDartUnit != null) {
if (server.hasAnalysisSubscription(
- protocol.AnalysisService.HIGHLIGHTS,
- file)) {
+ protocol.AnalysisService.HIGHLIGHTS, file)) {
server.scheduleOperation(
new _DartHighlightsOperation(file, resolvedDartUnit));
}
if (server.hasAnalysisSubscription(
- protocol.AnalysisService.NAVIGATION,
- file)) {
+ protocol.AnalysisService.NAVIGATION, file)) {
server.scheduleOperation(
new _DartNavigationOperation(file, resolvedDartUnit));
}
if (server.hasAnalysisSubscription(
- protocol.AnalysisService.OCCURRENCES,
- file)) {
+ protocol.AnalysisService.OCCURRENCES, file)) {
server.scheduleOperation(
new _DartOccurrencesOperation(file, resolvedDartUnit));
}
if (server.hasAnalysisSubscription(
- protocol.AnalysisService.OVERRIDES,
- file)) {
+ protocol.AnalysisService.OVERRIDES, file)) {
server.scheduleOperation(
new _DartOverridesOperation(file, resolvedDartUnit));
}
}
if (dartUnit != null) {
if (server.hasAnalysisSubscription(
- protocol.AnalysisService.OUTLINE,
- file)) {
+ protocol.AnalysisService.OUTLINE, file)) {
server.scheduleOperation(
new _DartOutlineOperation(file, lineInfo, dartUnit));
}
@@ -81,7 +83,6 @@
}
}
-
void sendAnalysisNotificationErrors(AnalysisServer server, String file,
LineInfo lineInfo, List<AnalysisError> errors) {
_sendNotification(server, () {
@@ -95,8 +96,8 @@
});
}
-void sendAnalysisNotificationHighlights(AnalysisServer server, String file,
- CompilationUnit dartUnit) {
+void sendAnalysisNotificationHighlights(
+ AnalysisServer server, String file, CompilationUnit dartUnit) {
_sendNotification(server, () {
var regions = new DartUnitHighlightsComputer(dartUnit).compute();
var params = new protocol.AnalysisHighlightsParams(file, regions);
@@ -104,24 +105,19 @@
});
}
-
-void sendAnalysisNotificationNavigation(AnalysisServer server, String file,
- CompilationUnit dartUnit) {
+void sendAnalysisNotificationNavigation(
+ AnalysisServer server, String file, CompilationUnit dartUnit) {
_sendNotification(server, () {
var computer = new DartUnitNavigationComputer(dartUnit);
computer.compute();
var params = new protocol.AnalysisNavigationParams(
- file,
- computer.regions,
- computer.targets,
- computer.files);
+ file, computer.regions, computer.targets, computer.files);
server.sendNotification(params.toNotification());
});
}
-
-void sendAnalysisNotificationOccurrences(AnalysisServer server, String file,
- CompilationUnit dartUnit) {
+void sendAnalysisNotificationOccurrences(
+ AnalysisServer server, String file, CompilationUnit dartUnit) {
_sendNotification(server, () {
var occurrences = new DartUnitOccurrencesComputer(dartUnit).compute();
var params = new protocol.AnalysisOccurrencesParams(file, occurrences);
@@ -129,7 +125,6 @@
});
}
-
void sendAnalysisNotificationOutline(AnalysisServer server, String file,
LineInfo lineInfo, CompilationUnit dartUnit) {
_sendNotification(server, () {
@@ -140,9 +135,8 @@
});
}
-
-void sendAnalysisNotificationOverrides(AnalysisServer server, String file,
- CompilationUnit dartUnit) {
+void sendAnalysisNotificationOverrides(
+ AnalysisServer server, String file, CompilationUnit dartUnit) {
_sendNotification(server, () {
var overrides = new DartUnitOverridesComputer(dartUnit).compute();
var params = new protocol.AnalysisOverridesParams(file, overrides);
@@ -150,7 +144,6 @@
});
}
-
/**
* Runs the given notification producing function [f], catching exceptions.
*/
@@ -164,7 +157,6 @@
});
}
-
/**
* Instances of [PerformAnalysisOperation] perform a single analysis task.
*/
@@ -194,9 +186,8 @@
}
}
- bool get _isPriorityContext =>
- context is InternalAnalysisContext &&
- (context as InternalAnalysisContext).prioritySources.isNotEmpty;
+ bool get _isPriorityContext => context is InternalAnalysisContext &&
+ (context as InternalAnalysisContext).prioritySources.isNotEmpty;
@override
void perform(AnalysisServer server) {
@@ -217,8 +208,7 @@
if (notices == null) {
_setCacheSize(IDLE_CACHE_SIZE);
server.sendContextAnalysisDoneNotifications(
- context,
- AnalysisDoneReason.COMPLETE);
+ context, AnalysisDoneReason.COMPLETE);
return;
}
// process results
@@ -241,14 +231,8 @@
// Dart
CompilationUnit parsedDartUnit = notice.parsedDartUnit;
CompilationUnit resolvedDartUnit = notice.resolvedDartUnit;
- scheduleNotificationOperations(
- server,
- file,
- notice.lineInfo,
- context,
- parsedDartUnit,
- resolvedDartUnit,
- notice.errors);
+ scheduleNotificationOperations(server, file, notice.lineInfo, context,
+ parsedDartUnit, resolvedDartUnit, notice.errors);
// done
server.fileAnalyzed(notice);
}
@@ -290,7 +274,6 @@
}
}
-
class _DartHighlightsOperation extends _DartNotificationOperation {
_DartHighlightsOperation(String file, CompilationUnit unit)
: super(file, unit);
@@ -301,7 +284,6 @@
}
}
-
class _DartIndexOperation extends _SingleFileOperation {
final AnalysisContext context;
final CompilationUnit unit;
@@ -322,7 +304,6 @@
}
}
-
class _DartNavigationOperation extends _DartNotificationOperation {
_DartNavigationOperation(String file, CompilationUnit unit)
: super(file, unit);
@@ -333,7 +314,6 @@
}
}
-
abstract class _DartNotificationOperation extends _SingleFileOperation {
final CompilationUnit unit;
@@ -345,7 +325,6 @@
}
}
-
class _DartOccurrencesOperation extends _DartNotificationOperation {
_DartOccurrencesOperation(String file, CompilationUnit unit)
: super(file, unit);
@@ -356,7 +335,6 @@
}
}
-
class _DartOutlineOperation extends _DartNotificationOperation {
final LineInfo lineInfo;
@@ -369,7 +347,6 @@
}
}
-
class _DartOverridesOperation extends _DartNotificationOperation {
_DartOverridesOperation(String file, CompilationUnit unit)
: super(file, unit);
@@ -380,7 +357,6 @@
}
}
-
class _HtmlIndexOperation extends _SingleFileOperation {
final AnalysisContext context;
final HtmlUnit unit;
@@ -399,7 +375,6 @@
}
}
-
class _NotificationErrorsOperation extends _SingleFileOperation {
final LineInfo lineInfo;
final List<AnalysisError> errors;
@@ -418,7 +393,6 @@
}
}
-
abstract class _SingleFileOperation extends SourceSensitiveOperation {
final String file;
diff --git a/pkg/analysis_server/lib/src/operation/operation_queue.dart b/pkg/analysis_server/lib/src/operation/operation_queue.dart
index deaa512..7ea8257 100644
--- a/pkg/analysis_server/lib/src/operation/operation_queue.dart
+++ b/pkg/analysis_server/lib/src/operation/operation_queue.dart
@@ -10,7 +10,6 @@
import 'package:analysis_server/src/operation/operation.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* A queue of operations in an [AnalysisServer].
*/
diff --git a/pkg/analysis_server/lib/src/plugin/plugin_impl.dart b/pkg/analysis_server/lib/src/plugin/plugin_impl.dart
index 2245b6f..9b1bd98 100644
--- a/pkg/analysis_server/lib/src/plugin/plugin_impl.dart
+++ b/pkg/analysis_server/lib/src/plugin/plugin_impl.dart
@@ -29,9 +29,9 @@
*/
void processPlugins(List<Plugin> plugins) {
for (Plugin plugin in plugins) {
- plugin.registerExtensionPoints(
- (String identifier, [ValidateExtension validateExtension]) =>
- registerExtensionPoint(plugin, identifier, validateExtension));
+ plugin.registerExtensionPoints((String identifier,
+ [ValidateExtension validateExtension]) =>
+ registerExtensionPoint(plugin, identifier, validateExtension));
}
for (Plugin plugin in plugins) {
plugin.registerExtensions(registerExtension);
@@ -55,8 +55,8 @@
* Register an extension point being defined by the given [plugin] with the
* given simple [identifier] and [validateExtension].
*/
- ExtensionPoint registerExtensionPoint(Plugin plugin, String identifier,
- ValidateExtension validateExtension) {
+ ExtensionPoint registerExtensionPoint(
+ Plugin plugin, String identifier, ValidateExtension validateExtension) {
String uniqueIdentifier = Plugin.buildUniqueIdentifier(plugin, identifier);
if (extensionPoints.containsKey(uniqueIdentifier)) {
throw new ExtensionError(
@@ -95,8 +95,8 @@
* it will be used to validate extensions associated with this extension
* point.
*/
- ExtensionPointImpl(this.plugin, this.simpleIdentifier,
- this.validateExtension);
+ ExtensionPointImpl(
+ this.plugin, this.simpleIdentifier, this.validateExtension);
/**
* Return a list containing all of the extensions that have been registered
diff --git a/pkg/analysis_server/lib/src/plugin/server_plugin.dart b/pkg/analysis_server/lib/src/plugin/server_plugin.dart
index 9182321..faeecc4 100644
--- a/pkg/analysis_server/lib/src/plugin/server_plugin.dart
+++ b/pkg/analysis_server/lib/src/plugin/server_plugin.dart
@@ -60,36 +60,31 @@
if (domainExtensionPoint == null) {
return <RequestHandler>[];
}
- return domainExtensionPoint.extensions.map(
- (RequestHandlerFactory factory) => factory(server)).toList();
+ return domainExtensionPoint.extensions
+ .map((RequestHandlerFactory factory) => factory(server))
+ .toList();
}
@override
void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) {
- domainExtensionPoint =
- registerExtensionPoint(DOMAIN_EXTENSION_POINT, _validateDomainExtension);
+ domainExtensionPoint = registerExtensionPoint(
+ DOMAIN_EXTENSION_POINT, _validateDomainExtension);
}
@override
void registerExtensions(RegisterExtension registerExtension) {
String domainId = Plugin.join(UNIQUE_IDENTIFIER, DOMAIN_EXTENSION_POINT);
registerExtension(
- domainId,
- (AnalysisServer server) => new ServerDomainHandler(server));
+ domainId, (AnalysisServer server) => new ServerDomainHandler(server));
registerExtension(
- domainId,
- (AnalysisServer server) => new AnalysisDomainHandler(server));
+ domainId, (AnalysisServer server) => new AnalysisDomainHandler(server));
registerExtension(
- domainId,
- (AnalysisServer server) => new EditDomainHandler(server));
+ domainId, (AnalysisServer server) => new EditDomainHandler(server));
registerExtension(
- domainId,
- (AnalysisServer server) => new SearchDomainHandler(server));
- registerExtension(
- domainId,
+ domainId, (AnalysisServer server) => new SearchDomainHandler(server));
+ registerExtension(domainId,
(AnalysisServer server) => new CompletionDomainHandler(server));
- registerExtension(
- domainId,
+ registerExtension(domainId,
(AnalysisServer server) => new ExecutionDomainHandler(server));
}
diff --git a/pkg/analysis_server/lib/src/protocol.dart b/pkg/analysis_server/lib/src/protocol.dart
index e534943..31e52c9 100644
--- a/pkg/analysis_server/lib/src/protocol.dart
+++ b/pkg/analysis_server/lib/src/protocol.dart
@@ -9,7 +9,6 @@
part 'generated_protocol.dart';
-
final Map<String, RefactoringKind> REQUEST_ID_REFACTORING_KINDS =
new HashMap<String, RefactoringKind>();
@@ -34,8 +33,8 @@
/**
* Adds the given [sourceEdits] to the list in [sourceFileEdit].
*/
-void _addAllEditsForSource(SourceFileEdit sourceFileEdit,
- Iterable<SourceEdit> edits) {
+void _addAllEditsForSource(
+ SourceFileEdit sourceFileEdit, Iterable<SourceEdit> edits) {
edits.forEach(sourceFileEdit.add);
}
@@ -54,8 +53,8 @@
/**
* Adds [edit] to the [FileEdit] for the given [file].
*/
-void _addEditToSourceChange(SourceChange change, String file, int fileStamp,
- SourceEdit edit) {
+void _addEditToSourceChange(
+ SourceChange change, String file, int fileStamp, SourceEdit edit) {
SourceFileEdit fileEdit = change.getFileEdit(file);
if (fileEdit == null) {
fileEdit = new SourceFileEdit(file, fileStamp);
@@ -64,7 +63,6 @@
fileEdit.add(edit);
}
-
/**
* Get the result of applying the edit to the given [code]. Access via
* SourceEdit.apply().
@@ -73,9 +71,7 @@
if (edit.length < 0) {
throw new RangeError('length is negative');
}
- return code.substring(0, edit.offset) +
- edit.replacement +
- code.substring(edit.end);
+ return code.replaceRange(edit.offset, edit.end, edit.replacement);
}
/**
@@ -149,9 +145,8 @@
return true;
}
-RefactoringProblemSeverity
- _maxRefactoringProblemSeverity(RefactoringProblemSeverity a,
- RefactoringProblemSeverity b) {
+RefactoringProblemSeverity _maxRefactoringProblemSeverity(
+ RefactoringProblemSeverity a, RefactoringProblemSeverity b) {
if (b == null) {
return a;
}
@@ -172,27 +167,22 @@
return a;
}
-
/**
* Create a [RefactoringFeedback] corresponding the given [kind].
*/
-RefactoringFeedback _refactoringFeedbackFromJson(JsonDecoder jsonDecoder,
- String jsonPath, Object json, Map feedbackJson) {
+RefactoringFeedback _refactoringFeedbackFromJson(
+ JsonDecoder jsonDecoder, String jsonPath, Object json, Map feedbackJson) {
RefactoringKind kind = jsonDecoder.refactoringKind;
if (kind == RefactoringKind.EXTRACT_LOCAL_VARIABLE) {
return new ExtractLocalVariableFeedback.fromJson(
- jsonDecoder,
- jsonPath,
- json);
+ jsonDecoder, jsonPath, json);
}
if (kind == RefactoringKind.EXTRACT_METHOD) {
return new ExtractMethodFeedback.fromJson(jsonDecoder, jsonPath, json);
}
if (kind == RefactoringKind.INLINE_LOCAL_VARIABLE) {
return new InlineLocalVariableFeedback.fromJson(
- jsonDecoder,
- jsonPath,
- json);
+ jsonDecoder, jsonPath, json);
}
if (kind == RefactoringKind.INLINE_METHOD) {
return new InlineMethodFeedback.fromJson(jsonDecoder, jsonPath, json);
@@ -203,7 +193,6 @@
return null;
}
-
/**
* Create a [RefactoringOptions] corresponding the given [kind].
*/
@@ -211,9 +200,7 @@
String jsonPath, Object json, RefactoringKind kind) {
if (kind == RefactoringKind.EXTRACT_LOCAL_VARIABLE) {
return new ExtractLocalVariableOptions.fromJson(
- jsonDecoder,
- jsonPath,
- json);
+ jsonDecoder, jsonPath, json);
}
if (kind == RefactoringKind.EXTRACT_METHOD) {
return new ExtractMethodOptions.fromJson(jsonDecoder, jsonPath, json);
@@ -230,7 +217,6 @@
return null;
}
-
/**
* Type of callbacks used to decode parts of JSON objects. [jsonPath] is a
* string describing the part of the JSON object being decoded, and [value] is
@@ -238,7 +224,6 @@
*/
typedef Object JsonDecoderCallback(String jsonPath, Object value);
-
/**
* Instances of the class [DomainHandler] implement a [RequestHandler] and
* also startup and shutdown methods.
@@ -258,7 +243,6 @@
void startup() {}
}
-
/**
* Classes implementing [Enum] represent enumerated types in the protocol.
*/
@@ -270,7 +254,6 @@
String get name;
}
-
/**
* Instances of the class [HasToJson] implement [toJson] method that returns
* a JSON presentation.
@@ -282,7 +265,6 @@
Map<String, Object> toJson();
}
-
/**
* Base class for decoding JSON objects. The derived class must implement
* error reporting logic.
@@ -360,8 +342,8 @@
* Decode a JSON object that is expected to be a Map. [keyDecoder] is used
* to decode the keys, and [valueDecoder] is used to decode the values.
*/
- Map _decodeMap(String jsonPath, Object json, {JsonDecoderCallback keyDecoder,
- JsonDecoderCallback valueDecoder}) {
+ Map _decodeMap(String jsonPath, Object json,
+ {JsonDecoderCallback keyDecoder, JsonDecoderCallback valueDecoder}) {
if (json == null) {
return {};
} else if (json is Map) {
@@ -401,8 +383,8 @@
* [decoders] is a map from each possible string in the field to the decoder
* that should be used to decode the JSON object.
*/
- Object _decodeUnion(String jsonPath, Map json, String field, Map<String,
- JsonDecoderCallback> decoders) {
+ Object _decodeUnion(String jsonPath, Map json, String field,
+ Map<String, JsonDecoderCallback> decoders) {
if (json is Map) {
if (!json.containsKey(field)) {
throw missingKey(jsonPath, field);
@@ -419,7 +401,6 @@
}
}
-
/**
* Instances of the class [Notification] represent a notification from the
* server about an event that occurred.
@@ -459,8 +440,7 @@
*/
factory Notification.fromJson(Map<String, Object> json) {
return new Notification(
- json[Notification.EVENT],
- json[Notification.PARAMS]);
+ json[Notification.EVENT], json[Notification.PARAMS]);
}
/**
@@ -528,8 +508,8 @@
* name. If [params] is supplied, it is used as the "params" map for the
* request. Otherwise an empty "params" map is allocated.
*/
- Request(this.id, this.method, [Map<String, Object> params,
- this.clientRequestTime])
+ Request(this.id, this.method,
+ [Map<String, Object> params, this.clientRequestTime])
: _params = params != null ? params : new HashMap<String, Object>();
/**
@@ -595,7 +575,6 @@
}
}
-
/**
* JsonDecoder for decoding requests. Errors are reporting by throwing a
* [RequestFailure].
@@ -621,11 +600,8 @@
@override
dynamic missingKey(String jsonPath, String key) {
- return new RequestFailure(
- new Response.invalidParameter(
- _request,
- jsonPath,
- 'contain key ${JSON.encode(key)}'));
+ return new RequestFailure(new Response.invalidParameter(
+ _request, jsonPath, 'contain key ${JSON.encode(key)}'));
}
}
@@ -717,11 +693,8 @@
* Initialize a newly created instance to represent the
* FORMAT_INVALID_FILE error condition.
*/
- Response.formatInvalidFile(Request request)
- : this(
- request.id,
- error: new RequestError(
- RequestErrorCode.FORMAT_INVALID_FILE,
+ Response.formatInvalidFile(Request request) : this(request.id,
+ error: new RequestError(RequestErrorCode.FORMAT_INVALID_FILE,
'Error during `edit.format`: invalid file.'));
/**
@@ -736,8 +709,8 @@
Object error = json[Response.ERROR];
RequestError decodedError;
if (error is Map) {
- decodedError =
- new RequestError.fromJson(new ResponseDecoder(null), '.error', error);
+ decodedError = new RequestError.fromJson(
+ new ResponseDecoder(null), '.error', error);
}
Object result = json[Response.RESULT];
Map<String, Object> decodedResult;
@@ -754,11 +727,8 @@
* Initialize a newly created instance to represent the
* GET_ERRORS_INVALID_FILE error condition.
*/
- Response.getErrorsInvalidFile(Request request)
- : this(
- request.id,
- error: new RequestError(
- RequestErrorCode.GET_ERRORS_INVALID_FILE,
+ Response.getErrorsInvalidFile(Request request) : this(request.id,
+ error: new RequestError(RequestErrorCode.GET_ERRORS_INVALID_FILE,
'Error during `analysis.getErrors`: invalid file.'));
/**
@@ -766,11 +736,9 @@
* by a [request] that specifies an execution context whose context root does
* not exist.
*/
- Response.invalidExecutionContext(Request request, String contextId)
- : this(
+ Response.invalidExecutionContext(Request request, String contextId) : this(
request.id,
- error: new RequestError(
- RequestErrorCode.INVALID_EXECUTION_CONTEXT,
+ error: new RequestError(RequestErrorCode.INVALID_EXECUTION_CONTEXT,
"Invalid execution context: $contextId"));
/**
@@ -781,39 +749,31 @@
* [expectation] is a description of the type of data that was expected.
*/
Response.invalidParameter(Request request, String path, String expectation)
- : this(
- request.id,
- error: new RequestError(
- RequestErrorCode.INVALID_PARAMETER,
+ : this(request.id,
+ error: new RequestError(RequestErrorCode.INVALID_PARAMETER,
"Invalid parameter '$path'. $expectation."));
/**
* Initialize a newly created instance to represent an error condition caused
* by a malformed request.
*/
- Response.invalidRequestFormat()
- : this(
- '',
- error: new RequestError(RequestErrorCode.INVALID_REQUEST, 'Invalid request'));
+ Response.invalidRequestFormat() : this('',
+ error: new RequestError(
+ RequestErrorCode.INVALID_REQUEST, 'Invalid request'));
/**
* Initialize a newly created instance to represent an error condition caused
* by a request that requires an index, but indexing is disabled.
*/
- Response.noIndexGenerated(Request request)
- : this(
- request.id,
+ Response.noIndexGenerated(Request request) : this(request.id,
error: new RequestError(
- RequestErrorCode.NO_INDEX_GENERATED,
- 'Indexing is disabled'));
+ RequestErrorCode.NO_INDEX_GENERATED, 'Indexing is disabled'));
/**
* Initialize a newly created instance to represent the
* REFACTORING_REQUEST_CANCELLED error condition.
*/
- Response.refactoringRequestCancelled(Request request)
- : this(
- request.id,
+ Response.refactoringRequestCancelled(Request request) : this(request.id,
error: new RequestError(
RequestErrorCode.REFACTORING_REQUEST_CANCELLED,
'The `edit.getRefactoring` request was cancelled.'));
@@ -835,22 +795,17 @@
* Initialize a newly created instance to represent the
* SORT_MEMBERS_INVALID_FILE error condition.
*/
- Response.sortMembersInvalidFile(Request request)
- : this(
- request.id,
- error: new RequestError(
- RequestErrorCode.SORT_MEMBERS_INVALID_FILE,
+ Response.sortMembersInvalidFile(Request request) : this(request.id,
+ error: new RequestError(RequestErrorCode.SORT_MEMBERS_INVALID_FILE,
'Error during `edit.sortMembers`: invalid file.'));
/**
* Initialize a newly created instance to represent the
* SORT_MEMBERS_PARSE_ERRORS error condition.
*/
- Response.sortMembersParseErrors(Request request, int numErrors)
- : this(
+ Response.sortMembersParseErrors(Request request, int numErrors) : this(
request.id,
- error: new RequestError(
- RequestErrorCode.SORT_MEMBERS_PARSE_ERRORS,
+ error: new RequestError(RequestErrorCode.SORT_MEMBERS_PARSE_ERRORS,
'Error during `edit.sortMembers`: file has $numErrors scan/parse errors.'));
/**
@@ -858,26 +813,23 @@
* by a `analysis.setPriorityFiles` [request] that includes one or more files
* that are not being analyzed.
*/
- Response.unanalyzedPriorityFiles(String requestId, String fileNames)
- : this(
+ Response.unanalyzedPriorityFiles(String requestId, String fileNames) : this(
requestId,
- error: new RequestError(
- RequestErrorCode.UNANALYZED_PRIORITY_FILES,
+ error: new RequestError(RequestErrorCode.UNANALYZED_PRIORITY_FILES,
"Unanalyzed files cannot be a priority: '$fileNames'"));
/**
* Initialize a newly created instance to represent an error condition caused
* by a [request] that cannot be handled by any known handlers.
*/
- Response.unknownRequest(Request request)
- : this(
- request.id,
- error: new RequestError(RequestErrorCode.UNKNOWN_REQUEST, 'Unknown request'));
+ Response.unknownRequest(Request request) : this(request.id,
+ error: new RequestError(
+ RequestErrorCode.UNKNOWN_REQUEST, 'Unknown request'));
- Response.unsupportedFeature(String requestId, String message)
- : this(
+ Response.unsupportedFeature(String requestId, String message) : this(
requestId,
- error: new RequestError(RequestErrorCode.UNSUPPORTED_FEATURE, message));
+ error: new RequestError(
+ RequestErrorCode.UNSUPPORTED_FEATURE, message));
/**
* Return a table representing the structure of the Json object that will be
diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index 90e1512..7618308 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -5,8 +5,8 @@
library protocol.server;
import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_server/src/services/search/search_engine.dart' as
- engine;
+import 'package:analysis_server/src/services/search/search_engine.dart'
+ as engine;
import 'package:analyzer/src/generated/ast.dart' as engine;
import 'package:analyzer/src/generated/element.dart' as engine;
import 'package:analyzer/src/generated/engine.dart' as engine;
@@ -16,30 +16,27 @@
export 'package:analysis_server/src/protocol.dart';
-
/**
* Returns a list of AnalysisErrors correponding to the given list of Engine
* errors.
*/
-List<AnalysisError> doAnalysisError_listFromEngine(engine.LineInfo lineInfo,
- List<engine.AnalysisError> errors) {
+List<AnalysisError> doAnalysisError_listFromEngine(
+ engine.LineInfo lineInfo, List<engine.AnalysisError> errors) {
return errors.map((engine.AnalysisError error) {
return newAnalysisError_fromEngine(lineInfo, error);
}).toList();
}
-
/**
* Adds [edit] to the [FileEdit] for the given [element].
*/
-void doSourceChange_addElementEdit(SourceChange change, engine.Element element,
- SourceEdit edit) {
+void doSourceChange_addElementEdit(
+ SourceChange change, engine.Element element, SourceEdit edit) {
engine.AnalysisContext context = element.context;
engine.Source source = element.source;
doSourceChange_addSourceEdit(change, context, source, edit);
}
-
/**
* Adds [edit] to the [FileEdit] for the given [source].
*/
@@ -50,12 +47,11 @@
change.addEdit(file, fileStamp, edit);
}
-
/**
* Construct based on error information from the analyzer engine.
*/
-AnalysisError newAnalysisError_fromEngine(engine.LineInfo lineInfo,
- engine.AnalysisError error) {
+AnalysisError newAnalysisError_fromEngine(
+ engine.LineInfo lineInfo, engine.AnalysisError error) {
engine.ErrorCode errorCode = error.errorCode;
// prepare location
Location location;
@@ -79,15 +75,10 @@
var type = new AnalysisErrorType(errorCode.type.name);
String message = error.message;
String correction = error.correction;
- return new AnalysisError(
- severity,
- type,
- location,
- message,
+ return new AnalysisError(severity, type, location, message,
correction: correction);
}
-
/**
* Construct based on a value from the analyzer engine.
*/
@@ -95,22 +86,19 @@
String name = element.displayName;
String elementParameters = _getParametersString(element);
String elementReturnType = _getReturnTypeString(element);
- return new Element(
- newElementKind_fromEngine(element.kind),
- name,
- Element.makeFlags(
- isPrivate: element.isPrivate,
- isDeprecated: element.isDeprecated,
- isAbstract: _isAbstract(element),
- isConst: _isConst(element),
- isFinal: _isFinal(element),
- isStatic: _isStatic(element)),
+ return new Element(newElementKind_fromEngine(element.kind), name, Element
+ .makeFlags(
+ isPrivate: element.isPrivate,
+ isDeprecated: element.isDeprecated,
+ isAbstract: _isAbstract(element),
+ isConst: _isConst(element),
+ isFinal: _isFinal(element),
+ isStatic: _isStatic(element)),
location: newLocation_fromElement(element),
parameters: elementParameters,
returnType: elementReturnType);
}
-
/**
* Construct based on a value from the analyzer engine.
*/
@@ -166,7 +154,6 @@
return ElementKind.UNKNOWN;
}
-
/**
* Create a Location based on an [engine.Element].
*/
@@ -187,19 +174,15 @@
return _locationForArgs(context, source, range);
}
-
/**
* Create a Location based on an [engine.SearchMatch].
*/
Location newLocation_fromMatch(engine.SearchMatch match) {
engine.Element enclosingElement = match.element;
return _locationForArgs(
- enclosingElement.context,
- enclosingElement.source,
- match.sourceRange);
+ enclosingElement.context, enclosingElement.source, match.sourceRange);
}
-
/**
* Create a Location based on an [engine.AstNode].
*/
@@ -213,21 +196,19 @@
return _locationForArgs(context, source, range);
}
-
/**
* Create a Location based on an [engine.CompilationUnit].
*/
-Location newLocation_fromUnit(engine.CompilationUnit unit,
- engine.SourceRange range) {
+Location newLocation_fromUnit(
+ engine.CompilationUnit unit, engine.SourceRange range) {
engine.CompilationUnitElement unitElement = unit.element;
engine.AnalysisContext context = unitElement.context;
engine.Source source = unitElement.source;
return _locationForArgs(context, source, range);
}
-
-NavigationTarget newNavigationTarget_fromElement(engine.Element element, int
- fileToIndex(String file)) {
+NavigationTarget newNavigationTarget_fromElement(
+ engine.Element element, int fileToIndex(String file)) {
ElementKind kind = newElementKind_fromEngine(element.kind);
Location location = newLocation_fromElement(element);
// TODO(scheglov) debug null Location
@@ -239,22 +220,15 @@
desc += ' element.location: ${element.location}';
desc += ' element.context: ${element.context}';
desc += ' element.source: ${element.source}';
- } catch (e) {
- }
+ } catch (e) {}
throw new ArgumentError(desc);
}
String file = location.file;
int fileIndex = fileToIndex(file);
- return new NavigationTarget(
- kind,
- fileIndex,
- location.offset,
- location.length,
- location.startLine,
- location.startColumn);
+ return new NavigationTarget(kind, fileIndex, location.offset, location.length,
+ location.startLine, location.startColumn);
}
-
/**
* Construct based on an element from the analyzer engine.
*/
@@ -264,8 +238,6 @@
return new OverriddenMember(element, className);
}
-
-
/**
* Construct based on a value from the search engine.
*/
@@ -276,7 +248,6 @@
return new SearchResult(location, kind, !match.isResolved, path);
}
-
/**
* Construct based on a value from the search engine.
*/
@@ -302,7 +273,6 @@
return SearchResultKind.UNKNOWN;
}
-
/**
* Construct based on a SourceRange.
*/
@@ -327,7 +297,6 @@
return path;
}
-
String _getParametersString(engine.Element element) {
// TODO(scheglov) expose the corresponding feature from ExecutableElement
List<engine.ParameterElement> parameters;
@@ -443,9 +412,5 @@
}
}
return new Location(
- source.fullName,
- range.offset,
- range.length,
- startLine,
- startColumn);
+ source.fullName, range.offset, range.length, startLine, startColumn);
}
diff --git a/pkg/analysis_server/lib/src/search/element_references.dart b/pkg/analysis_server/lib/src/search/element_references.dart
index b7c6a26..3f54327 100644
--- a/pkg/analysis_server/lib/src/search/element_references.dart
+++ b/pkg/analysis_server/lib/src/search/element_references.dart
@@ -7,14 +7,13 @@
import 'dart:async';
import 'package:analysis_server/src/collections.dart';
-import 'package:analysis_server/src/protocol_server.dart' show SearchResult,
- newSearchResult_fromMatch;
+import 'package:analysis_server/src/protocol_server.dart'
+ show SearchResult, newSearchResult_fromMatch;
import 'package:analysis_server/src/services/search/hierarchy.dart';
import 'package:analysis_server/src/services/search/search_engine.dart';
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* A computer for `search.findElementReferences` request results.
*/
@@ -92,12 +91,8 @@
SearchResult _newDeclarationResult(Element refElement) {
int nameOffset = refElement.nameOffset;
int nameLength = refElement.name.length;
- SearchMatch searchMatch = new SearchMatch(
- MatchKind.DECLARATION,
- refElement,
- new SourceRange(nameOffset, nameLength),
- true,
- false);
+ SearchMatch searchMatch = new SearchMatch(MatchKind.DECLARATION, refElement,
+ new SourceRange(nameOffset, nameLength), true, false);
return newSearchResult_fromMatch(searchMatch);
}
@@ -132,7 +127,6 @@
}
}
-
/**
* A collection of [Future]s that concats [List] results of added [Future]s into
* a single [List].
diff --git a/pkg/analysis_server/lib/src/search/search_domain.dart b/pkg/analysis_server/lib/src/search/search_domain.dart
index c663d18..7fba8d8 100644
--- a/pkg/analysis_server/lib/src/search/search_domain.dart
+++ b/pkg/analysis_server/lib/src/search/search_domain.dart
@@ -14,7 +14,6 @@
import 'package:analysis_server/src/services/search/search_engine.dart';
import 'package:analyzer/src/generated/element.dart';
-
/**
* Instances of the class [SearchDomainHandler] implement a [RequestHandler]
* that handles requests in the search domain.
@@ -88,8 +87,7 @@
// respond
String searchId = (_nextSearchId++).toString();
_sendSearchResult(
- request,
- new protocol.SearchFindMemberDeclarationsResult(searchId));
+ request, new protocol.SearchFindMemberDeclarationsResult(searchId));
// search
List<SearchMatch> matches =
await searchEngine.searchMemberDeclarations(params.name);
@@ -103,8 +101,7 @@
// respond
String searchId = (_nextSearchId++).toString();
_sendSearchResult(
- request,
- new protocol.SearchFindMemberReferencesResult(searchId));
+ request, new protocol.SearchFindMemberReferencesResult(searchId));
// search
List<SearchMatch> matches =
await searchEngine.searchMemberReferences(params.name);
@@ -118,8 +115,7 @@
// respond
String searchId = (_nextSearchId++).toString();
_sendSearchResult(
- request,
- new protocol.SearchFindTopLevelDeclarationsResult(searchId));
+ request, new protocol.SearchFindTopLevelDeclarationsResult(searchId));
// search
List<SearchMatch> matches =
await searchEngine.searchTopLevelDeclarations(params.pattern);
@@ -179,13 +175,11 @@
return null;
}
- void _sendSearchNotification(String searchId, bool isLast,
- Iterable<protocol.SearchResult> results) {
+ void _sendSearchNotification(
+ String searchId, bool isLast, Iterable<protocol.SearchResult> results) {
server.sendNotification(
- new protocol.SearchResultsParams(
- searchId,
- results.toList(),
- isLast).toNotification());
+ new protocol.SearchResultsParams(searchId, results.toList(), isLast)
+ .toNotification());
}
/**
diff --git a/pkg/analysis_server/lib/src/search/type_hierarchy.dart b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
index c2f5323..c0c38ed 100644
--- a/pkg/analysis_server/lib/src/search/type_hierarchy.dart
+++ b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
@@ -7,8 +7,8 @@
import 'dart:async';
import 'dart:collection';
-import 'package:analysis_server/src/protocol_server.dart' show
- TypeHierarchyItem, newElement_fromEngine;
+import 'package:analysis_server/src/protocol_server.dart'
+ show TypeHierarchyItem, newElement_fromEngine;
import 'package:analysis_server/src/services/search/hierarchy.dart';
import 'package:analysis_server/src/services/search/search_engine.dart';
import 'package:analyzer/src/generated/element.dart';
@@ -19,7 +19,9 @@
class TypeHierarchyComputer {
final SearchEngine _searchEngine;
+ LibraryElement _pivotLibrary;
ElementKind _pivotKind;
+ bool _pivotFieldFinal;
String _pivotName;
final List<TypeHierarchyItem> _items = <TypeHierarchyItem>[];
@@ -33,8 +35,13 @@
* Returns the computed type hierarchy, maybe `null`.
*/
Future<List<TypeHierarchyItem>> compute(Element element) {
+ _pivotLibrary = element.library;
_pivotKind = element.kind;
_pivotName = element.name;
+ if (element is FieldElement) {
+ _pivotFieldFinal = (element as FieldElement).isFinal;
+ element = element.enclosingElement;
+ }
if (element is ExecutableElement &&
element.enclosingElement is ClassElement) {
element = element.enclosingElement;
@@ -49,8 +56,8 @@
return new Future.value(null);
}
- Future _createSubclasses(TypeHierarchyItem item, int itemId,
- InterfaceType type) {
+ Future _createSubclasses(
+ TypeHierarchyItem item, int itemId, InterfaceType type) {
var future = getDirectSubClasses(_searchEngine, type.element);
return future.then((Set<ClassElement> subElements) {
List<int> subItemIds = <int>[];
@@ -64,11 +71,10 @@
}
// create a subclass item
ExecutableElement subMemberElement = _findMemberElement(subElement);
- subItem = new TypeHierarchyItem(
- newElement_fromEngine(subElement),
- memberElement: subMemberElement != null ?
- newElement_fromEngine(subMemberElement) :
- null,
+ subItem = new TypeHierarchyItem(newElement_fromEngine(subElement),
+ memberElement: subMemberElement != null
+ ? newElement_fromEngine(subMemberElement)
+ : null,
superclass: itemId);
int subItemId = _items.length;
// remember
@@ -104,12 +110,11 @@
}
ClassElement classElement = type.element;
ExecutableElement memberElement = _findMemberElement(classElement);
- item = new TypeHierarchyItem(
- newElement_fromEngine(classElement),
+ item = new TypeHierarchyItem(newElement_fromEngine(classElement),
displayName: displayName,
- memberElement: memberElement != null ?
- newElement_fromEngine(memberElement) :
- null);
+ memberElement: memberElement != null
+ ? newElement_fromEngine(memberElement)
+ : null);
_elementItemMap[classElement] = item;
itemId = _items.length;
_items.add(item);
@@ -136,16 +141,44 @@
return itemId;
}
- ExecutableElement _findMemberElement(ClassElement classElement) {
+ ExecutableElement _findMemberElement(ClassElement clazz) {
+ ExecutableElement result;
+ // try to find in the class itself
if (_pivotKind == ElementKind.METHOD) {
- return classElement.getMethod(_pivotName);
+ result = clazz.getMethod(_pivotName);
+ } else if (_pivotKind == ElementKind.GETTER) {
+ result = clazz.getGetter(_pivotName);
+ } else if (_pivotKind == ElementKind.SETTER) {
+ result = clazz.getSetter(_pivotName);
+ } else if (_pivotKind == ElementKind.FIELD) {
+ result = clazz.getGetter(_pivotName);
+ if (result == null && !_pivotFieldFinal) {
+ result = clazz.getSetter(_pivotName);
+ }
}
- if (_pivotKind == ElementKind.GETTER) {
- return classElement.getGetter(_pivotName);
+ if (result != null) {
+ return result;
}
- if (_pivotKind == ElementKind.SETTER) {
- return classElement.getSetter(_pivotName);
+ // try to find in the class mixin
+ for (InterfaceType mixin in clazz.mixins.reversed) {
+ ClassElement mixinElement = mixin.element;
+ if (_pivotKind == ElementKind.METHOD) {
+ result = mixinElement.lookUpMethod(_pivotName, _pivotLibrary);
+ } else if (_pivotKind == ElementKind.GETTER) {
+ result = mixinElement.lookUpGetter(_pivotName, _pivotLibrary);
+ } else if (_pivotKind == ElementKind.SETTER) {
+ result = mixinElement.lookUpSetter(_pivotName, _pivotLibrary);
+ } else if (_pivotKind == ElementKind.FIELD) {
+ result = mixinElement.lookUpGetter(_pivotName, _pivotLibrary);
+ if (result == null && !_pivotFieldFinal) {
+ result = mixinElement.lookUpSetter(_pivotName, _pivotLibrary);
+ }
+ }
+ if (result != null) {
+ return result;
+ }
}
+ // not found
return null;
}
}
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 6811300..c09c6c9 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -52,7 +52,6 @@
}
}
-
/**
* The [Driver] class represents a single running instance of the analysis
* server application. It is responsible for parsing command line options
@@ -122,8 +121,9 @@
static const String INTERNAL_DELAY_FREQUENCY = 'internal-delay-frequency';
/**
- * The name of the option used to specify the port to which the server will
- * connect.
+ * The option for specifying the http diagnostic port.
+ * If specified, users can review server status and performance information
+ * by opening a web browser on http://localhost:<port>
*/
static const String PORT_OPTION = "port";
@@ -254,12 +254,8 @@
}
InstrumentationService service =
new InstrumentationService(instrumentationServer);
- service.logVersion(
- _readUuid(service),
- results[CLIENT_ID],
- results[CLIENT_VERSION],
- AnalysisServer.VERSION,
- defaultSdk.sdkVersion);
+ service.logVersion(_readUuid(service), results[CLIENT_ID],
+ results[CLIENT_VERSION], AnalysisServer.VERSION, defaultSdk.sdkVersion);
AnalysisEngine.instance.instrumentationService = service;
//
// Process all of the plugins so that extensions are registered.
@@ -271,8 +267,8 @@
ExtensionManager manager = new ExtensionManager();
manager.processPlugins(plugins);
- socketServer =
- new SocketServer(analysisServerOptions, defaultSdk, service, serverPlugin);
+ socketServer = new SocketServer(
+ analysisServerOptions, defaultSdk, service, serverPlugin);
httpServer = new HttpAnalysisServer(socketServer);
stdioServer = new StdioAnalysisServer(socketServer);
@@ -289,7 +285,9 @@
exit(0);
});
},
- print: results[INTERNAL_PRINT_TO_CONSOLE] ? null : httpServer.recordPrint);
+ print: results[INTERNAL_PRINT_TO_CONSOLE]
+ ? null
+ : httpServer.recordPrint);
}
/**
@@ -300,24 +298,22 @@
*/
dynamic _captureExceptions(InstrumentationService service, dynamic callback(),
{void print(String line)}) {
- Function errorFunction =
- (Zone self, ZoneDelegate parent, Zone zone, dynamic exception,
- StackTrace stackTrace) {
+ Function errorFunction = (Zone self, ZoneDelegate parent, Zone zone,
+ dynamic exception, StackTrace stackTrace) {
service.logPriorityException(exception, stackTrace);
AnalysisServer analysisServer = socketServer.analysisServer;
analysisServer.sendServerErrorNotification(exception, stackTrace);
throw exception;
};
- Function printFunction = print == null ?
- null :
- (Zone self, ZoneDelegate parent, Zone zone, String line) {
+ Function printFunction = print == null
+ ? null
+ : (Zone self, ZoneDelegate parent, Zone zone, String line) {
// Note: we don't pass the line on to stdout, because that is reserved
// for communication to the client.
print(line);
};
ZoneSpecification zoneSpecification = new ZoneSpecification(
- handleUncaughtError: errorFunction,
- print: printFunction);
+ handleUncaughtError: errorFunction, print: printFunction);
return runZoned(callback, zoneSpecification: zoneSpecification);
}
@@ -327,58 +323,45 @@
CommandLineParser _createArgParser() {
CommandLineParser parser =
new CommandLineParser(alwaysIgnoreUnrecognized: true);
- parser.addOption(
- CLIENT_ID,
+ parser.addOption(CLIENT_ID,
help: "an identifier used to identify the client");
parser.addOption(CLIENT_VERSION, help: "the version of the client");
- parser.addFlag(
- ENABLE_INCREMENTAL_RESOLUTION_API,
+ parser.addFlag(ENABLE_INCREMENTAL_RESOLUTION_API,
help: "enable using incremental resolution for API changes",
defaultsTo: false,
negatable: false);
- parser.addFlag(
- ENABLE_INSTRUMENTATION_OPTION,
+ parser.addFlag(ENABLE_INSTRUMENTATION_OPTION,
help: "enable sending instrumentation information to a server",
defaultsTo: false,
negatable: false);
- parser.addFlag(
- HELP_OPTION,
+ parser.addFlag(HELP_OPTION,
help: "print this help message without starting a server",
defaultsTo: false,
negatable: false);
- parser.addOption(
- INCREMENTAL_RESOLUTION_LOG,
+ parser.addOption(INCREMENTAL_RESOLUTION_LOG,
help: "the description of the incremental resolution log");
- parser.addFlag(
- INCREMENTAL_RESOLUTION_VALIDATION,
+ parser.addFlag(INCREMENTAL_RESOLUTION_VALIDATION,
help: "enable validation of incremental resolution results (slow)",
defaultsTo: false,
negatable: false);
- parser.addOption(
- INSTRUMENTATION_LOG_FILE,
+ parser.addOption(INSTRUMENTATION_LOG_FILE,
help: "the path of the file to which instrumentation data will be written");
- parser.addFlag(
- INTERNAL_PRINT_TO_CONSOLE,
+ parser.addFlag(INTERNAL_PRINT_TO_CONSOLE,
help: "enable sending `print` output to the console",
defaultsTo: false,
negatable: false);
- parser.addOption(
- PORT_OPTION,
- help: "[port] the port on which the server will listen");
+ parser.addOption(PORT_OPTION,
+ help: "the http diagnostic port on which the server provides"
+ " status and performance information");
parser.addOption(INTERNAL_DELAY_FREQUENCY);
parser.addOption(SDK_OPTION, help: "[path] the path to the sdk");
- parser.addFlag(
- NO_ERROR_NOTIFICATION,
+ parser.addFlag(NO_ERROR_NOTIFICATION,
help: "disable sending all analysis error notifications to the server",
defaultsTo: false,
negatable: false);
- parser.addFlag(
- NO_INDEX,
- help: "disable indexing sources",
- defaultsTo: false,
- negatable: false);
- parser.addOption(
- FILE_READ_MODE,
+ parser.addFlag(NO_INDEX,
+ help: "disable indexing sources", defaultsTo: false, negatable: false);
+ parser.addOption(FILE_READ_MODE,
help: "an option of the ways files can be read from disk, " +
"some clients normalize end of line characters which would make " +
"the file offset and range information incorrect.",
@@ -387,7 +370,8 @@
"as-is": "file contents are read as-is, no file changes occur",
"normalize-eol-always":
r'file contents normalize the end of line characters to the single character new line `\n`'
- }, defaultsTo: "as-is");
+ },
+ defaultsTo: "as-is");
return parser;
}
@@ -406,9 +390,9 @@
* Read the UUID from disk, generating and storing a new one if necessary.
*/
String _readUuid(InstrumentationService service) {
- File uuidFile = new File(
- PhysicalResourceProvider.INSTANCE.getStateLocation(
- '.instrumentation').getChild('uuid.txt').path);
+ File uuidFile = new File(PhysicalResourceProvider.INSTANCE
+ .getStateLocation('.instrumentation')
+ .getChild('uuid.txt').path);
try {
if (uuidFile.existsSync()) {
String uuid = uuidFile.readAsStringSync();
diff --git a/pkg/analysis_server/lib/src/server/http_server.dart b/pkg/analysis_server/lib/src/server/http_server.dart
index beda85c..e58a19f 100644
--- a/pkg/analysis_server/lib/src/server/http_server.dart
+++ b/pkg/analysis_server/lib/src/server/http_server.dart
@@ -61,8 +61,7 @@
_printBuffer.add(line);
if (_printBuffer.length > MAX_PRINT_BUFFER_LENGTH) {
_printBuffer.removeRange(
- 0,
- _printBuffer.length - MAX_PRINT_BUFFER_LENGTH);
+ 0, _printBuffer.length - MAX_PRINT_BUFFER_LENGTH);
}
}
@@ -107,8 +106,8 @@
* running an analysis server on a [WebSocket]-based communication channel.
*/
void _handleWebSocket(WebSocket socket) {
- socketServer.createAnalysisServer(
- new WebSocketServerChannel(socket, socketServer.instrumentationService));
+ socketServer.createAnalysisServer(new WebSocketServerChannel(
+ socket, socketServer.instrumentationService));
}
/**
diff --git a/pkg/analysis_server/lib/src/server/stdio_server.dart b/pkg/analysis_server/lib/src/server/stdio_server.dart
index d28dbde..a884158 100644
--- a/pkg/analysis_server/lib/src/server/stdio_server.dart
+++ b/pkg/analysis_server/lib/src/server/stdio_server.dart
@@ -35,9 +35,7 @@
*/
Future serveStdio() {
ByteStreamServerChannel serverChannel = new ByteStreamServerChannel(
- stdin,
- stdout,
- socketServer.instrumentationService);
+ stdin, stdout, socketServer.instrumentationService);
socketServer.createAnalysisServer(serverChannel);
return serverChannel.closed;
}
diff --git a/pkg/analysis_server/lib/src/services/completion/arglist_computer.dart b/pkg/analysis_server/lib/src/services/completion/arglist_computer.dart
index 8121738..a5e4418 100644
--- a/pkg/analysis_server/lib/src/services/completion/arglist_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/arglist_computer.dart
@@ -6,8 +6,8 @@
import 'dart:async';
-import 'package:analysis_server/src/protocol_server.dart' hide Element,
- ElementKind;
+import 'package:analysis_server/src/protocol_server.dart'
+ hide Element, ElementKind;
import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
import 'package:analysis_server/src/services/completion/local_declaration_visitor.dart';
import 'package:analyzer/src/generated/ast.dart';
@@ -39,8 +39,8 @@
* A visitor for determining whether an argument list suggestion is needed
* and instantiating the builder to create the suggestion.
*/
-class _ArgListAstVisitor extends
- GeneralizingAstVisitor<_ArgListSuggestionBuilder> {
+class _ArgListAstVisitor
+ extends GeneralizingAstVisitor<_ArgListSuggestionBuilder> {
final DartCompletionRequest request;
_ArgListAstVisitor(this.request);
@@ -61,8 +61,8 @@
* indicating that suggestions were added
* and no further action is necessary
*/
- if (node.accept(
- new _LocalDeclarationFinder(request, request.offset, name))) {
+ if (new _LocalDeclarationFinder(request, request.offset, name)
+ .visit(node)) {
return null;
}
} else {
@@ -104,62 +104,53 @@
* suggestions and sets finished to `true`.
*/
class _LocalDeclarationFinder extends LocalDeclarationVisitor {
-
final DartCompletionRequest request;
final String name;
_LocalDeclarationFinder(this.request, int offset, this.name) : super(offset);
@override
- void declaredClass(ClassDeclaration declaration) {
- }
+ void declaredClass(ClassDeclaration declaration) {}
@override
- void declaredClassTypeAlias(ClassTypeAlias declaration) {
- }
+ void declaredClassTypeAlias(ClassTypeAlias declaration) {}
@override
- void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {
- }
+ void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {}
@override
void declaredFunction(FunctionDeclaration declaration) {
SimpleIdentifier selector = declaration.name;
if (selector != null && name == selector.name) {
- finished = true;
_addArgListSuggestion(declaration.functionExpression.parameters);
+ finished();
}
}
@override
- void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {
- }
+ void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {}
@override
- void declaredLabel(Label label, bool isCaseLabel) {
- }
+ void declaredLabel(Label label, bool isCaseLabel) {}
@override
- void declaredLocalVar(SimpleIdentifier name, TypeName type) {
- }
+ void declaredLocalVar(SimpleIdentifier name, TypeName type) {}
@override
void declaredMethod(MethodDeclaration declaration) {
SimpleIdentifier selector = declaration.name;
if (selector != null && name == selector.name) {
- finished = true;
_addArgListSuggestion(declaration.parameters);
+ finished();
}
}
@override
- void declaredParam(SimpleIdentifier name, TypeName type) {
- }
+ void declaredParam(SimpleIdentifier name, TypeName type) {}
@override
- void declaredTopLevelVar(VariableDeclarationList varList,
- VariableDeclaration varDecl) {
- }
+ void declaredTopLevelVar(
+ VariableDeclarationList varList, VariableDeclaration varDecl) {}
void _addArgListSuggestion(FormalParameterList parameters) {
if (parameters.parameters.length == 0) {
@@ -184,13 +175,8 @@
}
completion.write(')');
CompletionSuggestion suggestion = new CompletionSuggestion(
- CompletionSuggestionKind.ARGUMENT_LIST,
- DART_RELEVANCE_HIGH,
- completion.toString(),
- completion.length,
- 0,
- false,
- false);
+ CompletionSuggestionKind.ARGUMENT_LIST, DART_RELEVANCE_HIGH,
+ completion.toString(), completion.length, 0, false, false);
suggestion.parameterNames = paramNames;
suggestion.parameterTypes = paramTypes;
request.suggestions.add(suggestion);
diff --git a/pkg/analysis_server/lib/src/services/completion/combinator_computer.dart b/pkg/analysis_server/lib/src/services/completion/combinator_computer.dart
index 3a4dca4..3da2f69 100644
--- a/pkg/analysis_server/lib/src/services/completion/combinator_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/combinator_computer.dart
@@ -6,8 +6,8 @@
import 'dart:async';
-import 'package:analysis_server/src/protocol_server.dart' hide Element,
- ElementKind;
+import 'package:analysis_server/src/protocol_server.dart'
+ hide Element, ElementKind;
import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
import 'package:analysis_server/src/services/completion/suggestion_builder.dart';
import 'package:analyzer/src/generated/ast.dart';
@@ -39,8 +39,8 @@
* A visitor for determining which imported classes and top level variables
* should be suggested and building those suggestions.
*/
-class _CombinatorAstVisitor extends
- GeneralizingAstVisitor<_CombinatorSuggestionBuilder> {
+class _CombinatorAstVisitor
+ extends GeneralizingAstVisitor<_CombinatorSuggestionBuilder> {
final DartCompletionRequest request;
_CombinatorAstVisitor(this.request);
@@ -48,8 +48,7 @@
@override
_CombinatorSuggestionBuilder visitCombinator(Combinator node) {
return new _CombinatorSuggestionBuilder(
- request,
- CompletionSuggestionKind.IDENTIFIER);
+ request, CompletionSuggestionKind.IDENTIFIER);
}
@override
@@ -70,9 +69,8 @@
* and calculates the suggestions during `computeFull`.
*/
class _CombinatorSuggestionBuilder extends LibraryElementSuggestionBuilder {
-
- _CombinatorSuggestionBuilder(DartCompletionRequest request,
- CompletionSuggestionKind kind)
+ _CombinatorSuggestionBuilder(
+ DartCompletionRequest request, CompletionSuggestionKind kind)
: super(request, kind);
Future<bool> execute(AstNode node) {
diff --git a/pkg/analysis_server/lib/src/services/completion/common_usage_computer.dart b/pkg/analysis_server/lib/src/services/completion/common_usage_computer.dart
index 5c7d340..70f1542 100644
--- a/pkg/analysis_server/lib/src/services/completion/common_usage_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/common_usage_computer.dart
@@ -5,27 +5,13 @@
library services.completion.computer.dart.relevance;
import 'package:analysis_server/src/protocol_server.dart' as protocol;
-import 'package:analysis_server/src/protocol_server.dart' show
- CompletionSuggestion, CompletionSuggestionKind;
+import 'package:analysis_server/src/protocol_server.dart'
+ show CompletionSuggestion, CompletionSuggestionKind;
import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart';
-/**
- * A map of <library>.<classname> to an ordered list of method names,
- * field names, getter names, and named constructors.
- * The names are ordered from most relevant to least relevant.
- * Names not listed are considered equally less relevant than those listed.
- */
-const Map<String, List<String>> defaultSelectorRelevance = const {//
-// Sample implementation which updates the relevance of the following
-// new Random().nextInt(...)
-// new Random().nextDouble(...)
-// new Random().nextBool() - not commonly used thus omitted from list
-// Entries should look something like this
-// 'dart.math.Random': const ['nextInt', 'nextDouble'],
-// 'dart.async.Future': const ['value', 'wait'],
-};
+part 'common_usage_generated.dart';
/**
* A computer for adjusting the relevance of completions computed by others
@@ -84,8 +70,8 @@
* Adjusts the relevance of all method suggestions based upon the given
* target type and library.
*/
- void _updateInvocationRelevance(DartCompletionRequest request, DartType type,
- LibraryElement libElem) {
+ void _updateInvocationRelevance(
+ DartCompletionRequest request, DartType type, LibraryElement libElem) {
String typeName = type.name;
List<String> selectors = selectorRelevance['${libElem.name}.${typeName}'];
if (selectors != null) {
diff --git a/pkg/analysis_server/lib/src/services/completion/common_usage_generated.dart b/pkg/analysis_server/lib/src/services/completion/common_usage_generated.dart
new file mode 100644
index 0000000..f6899ec
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/completion/common_usage_generated.dart
@@ -0,0 +1,427 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of services.completion.computer.dart.relevance;
+
+// Auto-generated, please do not edit.
+
+/**
+ * A map of <library>.<classname> to an ordered list of method names,
+ * field names, getter names, and named constructors.
+ * The names are ordered from most relevant to least relevant.
+ * Names not listed are considered equally less relevant than those listed.
+ */
+const Map<String, List<String>> defaultSelectorRelevance = const {
+'dart.core.Comparable': const ['compareTo','compare',],
+'dart.math.Random': const ['nextInt','nextDouble','nextBool',],
+'dart.core.List': const ['add','map','length','removeLast','addAll','join','forEach','contains','removeAt','where','last','clear','setRange','sort','insert','remove','sublist','indexOf','isEmpty','any','insertAll','first','removeRange','replaceRange','take','getRange','skip','toList','retainWhere','fillRange','removeWhere','expand','fold','reversed','firstWhere','every','setAll','asMap','isNotEmpty','lastIndexOf','singleWhere','lastWhere','shuffle','takeWhile','iterator','toString','toSet','single','reduce','elementAt','skipWhile','insertRange','filter','push','mappedBy','addLast','some','slice','retainMatching','firstMatching','removeAll','retainAll','removeMatching','min','lastMatching','singleMatching','max','get','toArray','runtimeType','reverse','addd','asByteArray',],
+'dart.core.Iterable': const ['toList','map','join','toSet','where','forEach','expand','fold','every','any','contains','firstWhere','length','elementAt','skipWhile','reduce','iterator','take','skip','toString','singleWhere','lastWhere','takeWhile','isEmpty','first','single','last','isNotEmpty','addAll','indexOf','add','sort','toArray','mappedBy','filter',],
+'dart.core.Set': const ['add','contains','remove','addAll','clear','difference','map','containsAll','union','removeWhere','removeAll','intersection','retainAll','retainWhere','forEach','toSet','every','lookup','any','toString','toList','where','length','join','skip','firstWhere','isEmpty','first','iterator','singleWhere','expand','elementAt','fold','reduce','single','lastWhere','isNotEmpty','take','takeWhile','skipWhile','last','findBy','toArray','filter',],
+'dart.collection.Queue': const ['add','removeFirst','clear','removeLast','remove','addAll','addLast','addFirst','removeWhere','retainWhere','length','toList','where','contains','forEach','map','isNotEmpty','first','isEmpty','fold','skip','any','elementAt',],
+'dart.core.Map': const ['containsKey','forEach','remove','putIfAbsent','clear','addAll','length','keys','values','containsValue','toString','isNotEmpty','isEmpty','get','getKeys','put','getValues','clone','keySet','hashCode','runtimeType',],
+'dart.core.Iterator': const ['moveNext','current','next','hasNext',],
+'dart.pkg.collection.equality.Equality': const ['hash','equals','isValidKey',],
+'dart.pkg.collection.equality.SetEquality': const ['equals','hash',],
+'dart.pkg.collection.equality.MapEquality': const ['equals','hash',],
+'dart.pkg.collection.equality.ListEquality': const ['equals','hash',],
+'dart.pkg.collection.equality.IterableEquality': const ['hash','equals',],
+'dart.pkg.collection.equality.UnorderedIterableEquality': const ['hash','equals',],
+'dart.async.StreamSubscription': const ['cancel','pause','onDone','resume','onError','asFuture','onData','isPaused',],
+'dart.async.StreamController': const ['add','close','addError','addStream','stream','hasListener','signalError','sink','done',],
+'dart.async.Stream': const ['listen','transform','pipe','first','toList','forEach','firstWhere','where','join','fold','asyncMap','map','isEmpty','asBroadcastStream','handleError','capture','asyncExpand','take','single','expand','onFile','skip','any','timeout','add','last','runtimeType','isBroadcast','drain','elementAt','skipWhile','distinct','singleWhere','lastWhere','contains','every','takeWhile','emit','onDir','onError','onDone','onData','length',],
+'dart.async.Future': const ['then','catchError','wait','whenComplete','forEach','asStream','timeout','map','packages','where','firstWhere','chain','transform','doWhile','onError','onResponse','onRequest','handleException',],
+'dart.core.String': const ['substring','codeUnitAt','startsWith','replaceAll','split','contains','indexOf','toLowerCase','trim','length','endsWith','lastIndexOf','compareTo','isEmpty','toUpperCase','replaceFirst','toString','replaceAllMapped','allMatches','padLeft','codeUnits','hashCode','splitMapJoin','isNotEmpty','runes','charCodeAt','charCodes','trimRight','padRight','concat','equalsIgnoreCase','splitChars','trimLeft','matchAsPrefix','equals','map','toLoweCase','match','slice','getBytes','toCharArray','runtimeType','charAt','valueOf',],
+'dart.core.StringBuffer': const ['write','toString','writeln','writeCharCode','clear','writeAll','add','addAll','addCharCode','isEmpty',],
+'dart.core.RegExp': const ['firstMatch','hasMatch','allMatches','matchAsPrefix','pattern','stringMatch','toString','exec',],
+'dart.core.double': const ['parse','toInt','compareTo','floor','toString','abs','round','toStringAsPrecision','toDouble','floorToDouble','ceil','truncate','toStringAsFixed','roundToDouble','clamp','isNaN','isFinite','toStringAsExponential','ceilToDouble','truncateToDouble','isNan','isNegative','isInfinite','hashCode',],
+'dart.core.Type': const ['toString','hashCode','runtimeType',],
+'dart.mirrors.InstanceMirror': const ['reflectee','getField','type','invoke','setField','delegate','function','then','apply','hasReflectee',],
+'dart.collection.IterableBase': const ['iterableToFullString',],
+'dart.pkg.collection.utils.Pair': const ['last',],
+'dart.collection.Maps': const ['mapToString','length','putIfAbsent','clear','containsKey','getValues','forEach','containsValue','isNotEmpty','isEmpty',],
+'dart.collection.SplayTreeSet': const ['add','addAll','where',],
+'dart.core.StackTrace': const ['toString','frames',],
+'dart.convert.JsonCodec': const ['encode','decode','fuse',],
+'dart.mirrors.MirrorSystem': const ['getName','libraries','findLibrary','isolate','dynamicType','getSymbol','voidType',],
+'dart.mirrors.ClassMirror': const ['newInstance','isSubtypeOf','reflectedType','qualifiedName','metadata','getField','owner','declarations','superclass','simpleName','isSubclassOf','invoke','instanceMembers','mixin','isAbstract','originalDeclaration','typeVariables','setField','isOriginalDeclaration','superinterfaces','isAssignableTo','owners',],
+'dart.io.Process': const ['start','runSync','run','kill','exitCode',],
+'dart.core.int': const ['parse','toDouble','toString','toInt','compareTo','toRadixString','abs','remainder','toUnsigned','toSigned','clamp','round','floor','substr','ceil','isEven','id','append','truncate','hashCode','toStringAsFixed','ceilToDouble','roundToDouble','floorToDouble','truncateToDouble','isNegative','length','isNaN','isInfinite','runtimeType','bitLength',],
+'dart.core.Sink': const ['add','close',],
+'dart.async.EventSink': const ['close','add','addError',],
+'dart.async.Completer': const ['complete','completeError','future','isCompleted','completeException','then',],
+'dart.io.FileStat': const ['mode','stat','type','statSync','changed','modified','size',],
+'dart.io.Link': const ['existsSync','createSync','resolveSymbolicLinksSync','exists','delete','targetSync','deleteSync','target','create','updateSync',],
+'dart.io.FileSystemEntityType': const ['toString','NOT_FOUND','DIRECTORY','FILE',],
+'dart.io.Directory': const ['existsSync','list','listSync','watch','path','exists','createSync','create','deleteSync','delete','createTemp','createTempSync','renameSync','parent','absolute','stat','current','createRecursivelySync','resolveSymbolicLinksSync','rename','statSync',],
+'dart.io.File': const ['existsSync','readAsStringSync','openRead','writeAsStringSync','readAsString','openWrite','lastModifiedSync','exists','resolveSymbolicLinksSync','writeAsString','path','resolveSymbolicLinks','statSync','deleteSync','createSync','delete','openSync','parent','readAsBytesSync','copy','open','absolute','fullPathSync','length','writeAsBytesSync','lastModified','writeAsBytes','readAsLinesSync','fullPath','readAsBytes','copySync','create','lengthSync','readAsLines','isFileSync','isFile','rename','openOutputStream','openInputStream','stat','renameSync','watch','directorySync','isAbsolute','directory',],
+'dart.io.Stdout': const ['writeln','close','write','flush','addStream','writeString','add','writeCharCode','addString',],
+'dart.io.IOSink': const ['write','close','writeln','flush','add','addStream','writeAll','writeCharCode','encoding','addError','done',],
+'dart.mirrors.LibraryMirror': const ['uri','getField','declarations','invoke','topLevelMembers','setField','classes','first',],
+'dart.core.Match': const ['group','end','start','groups','toString',],
+'dart.isolate.SendPort': const ['send','call','hashCode',],
+'dart.core.DateTime': const ['parse','toIso8601String','millisecondsSinceEpoch','difference','toUtc','add','day','year','month','isAfter','toString','compareTo','subtract','isBefore','millisecond','toLocal','timeZoneName','timeZoneOffset','isUtc','weekday','isAtSameMomentAs','second','hour','minute','hashCode','now','runtimeType',],
+'dart.core.Duration': const ['inMilliseconds','toString','inSeconds','inMicroseconds','inHours','inMinutes','inDays','isNegative','compareTo',],
+'dart.core.Uri': const ['parse','toString','toFilePath','path','resolve','decodeComponent','encodeFull','decodeQueryComponent','scheme','encodeComponent','resolveUri','encodeQueryComponent','query','decodeFull','pathSegments','queryParameters','origin','authority','splitQueryString','replace','host','isAbsolute','port','fragment','hasAuthority','userInfo','parseIPv4Address','parseIPv6Address','hasQuery','endsWith','startsWith',],
+'dart.typed_data.Uint32List': const ['sublist','setAll','fillRange','setRange','removeRange','removeLast','clear','addAll','add',],
+'dart.typed_data.TypedData': const ['buffer',],
+'dart.io.BytesBuilder': const ['takeBytes','addByte','add','clear','toBytes',],
+'dart.isolate.ReceivePort': const ['close','transform','listen','receive','toSendPort','takeWhile','sendPort','asBroadcastStream',],
+'dart.convert.Encoding': const ['decode','encode','getByName','decodeStream','name',],
+'dart.convert.Utf8Codec': const ['encode','decode','decoder','decodeStream',],
+'dart.core.Stopwatch': const ['start','stop','reset','elapsedMicroseconds','elapsedMilliseconds','elapsed','elapsedInMs',],
+'dart.async.ZoneDelegate': const ['handleUncaughtError','registerUnaryCallback','registerCallback','registerBinaryCallback','runBinary','errorCallback','scheduleMicrotask','run','createTimer',],
+'dart.async.Zone': const ['handleUncaughtError','run','fork','inSameErrorZone','runGuarded','bindUnaryCallback','bindBinaryCallback','runUnary','bindCallback','scheduleMicrotask','createTimer',],
+'dart.dom.html.BodyElement': const ['innerHtml','children','nodes','append','style','onContextMenu','onMouseDown','onMouseWheel','scrollTop','onMouseUp','onClick','scrollLeft','clientHeight','clientWidth','onBlur','onFocus','onDoubleClick','scrollHeight','onMouseMove','elements','createFragment','classes','ownerDocument','query','onKeyDown','querySelector','offsetWidth','scrollWidth','offsetHeight','setInnerHtml','childNodes','requestFullscreen','offsetTop',],
+'dart.dom.html.Location': const ['hash','search','reload','pathname','toString','href','host','assign','replace','protocol','hostname','port','origin',],
+'dart.convert.HtmlEscape': const ['convert',],
+'dart.dom.html.Window': const ['postMessage','btoa','lookupPort','document','requestAnimationFrame','alert','navigator','devicePixelRatio','pageYOffset','pageXOffset','onAnimationEnd','innerWidth','onResize','getSelection','cancelAnimationFrame','animationEndEvent','innerHeight','registerPort','dispatchEvent','onAnimationStart','onMouseUp','onMouseMove','open','screen','indexedDB','setTimeout','scrollX','scrollY','onScroll','openDatabase','confirm','getContainer','location','onKeyUp','atob','scrollTo','localStorage','scrollBy','setInterval','setImmediate','requestLayoutFrame','requestFileSystem','onHashChange','close','console','onError','onMessage','animationFrame',],
+'dart.core.Function': const ['apply','toString','call','bind',],
+'dart.async.Timer': const ['cancel','run',],
+'dart.dom.html.HeadElement': const ['append','querySelector','query','children','style','elements','querySelectorAll','nodes','id','insertBefore','text',],
+'dart.dom.html.ElementStream': const ['listen','where','first','matches','forEach','map',],
+'dart.dom.html.Element': const ['query','onClick','innerHtml','style','querySelector','nodes','children','remove','append','querySelectorAll','classes','attributes','setInnerHtml','getComputedStyle','onChange','parent','matches','getBoundingClientRect','focus','dispatchEvent','addEventListener','insertAllBefore','clone','getAttribute','blur','createShadowRoot','contains','text','setAttribute','insertAdjacentElement','appendText','scrollIntoView','shadowRoot','getNamespacedAttributes','removeEventListener','insertBefore','appendHtml','click','offsetWidth','insertAdjacentHtml','insertAdjacentText','getClientRects','getElementsByClassName','replaceWith','scrollByLines','scrollByPages','hasChildNodes','requestFullscreen','requestPointerLock','queryAll','setAttributeNS','getAttributeNS','dataset','offsetHeight','on','createFragment','offsetTo','getDestinationInsertionPoints','matchesWithAncestors','attributeChanged','onMouseDown','nextElementSibling','getRegionFlowRanges','onContextMenu','animate','onTouchStart','scrollTop','offsetTop','onTouchMove','onTouchEnd','onMouseWheel','clientWidth','scrollLeft','clientHeight','isTagSupported','parentNode','onMouseUp','bind','onKeyDown','ownerDocument','unbind','unbindAll','init','createInstance','render','update','onKeyUp','onMouseMove','xtag','offsetLeft','tabIndex','client','requestFullScreen','getInputContext','borderEdge','clearModel','id','disabled','value','getContext','lastChild','firstChild','nextNode','innerHTML','onMouseEnter','onMouseLeave','contentEdge','elements','matchesSelector','webkitRequestPointerLock','tagName','childNodes','webkitRequestFullscreen','webkitRequestFullScreen','marginEdge','paddingEdge','outerHtml','onMouseOver','onMouseOut','onDragEnd','boolean','scrollHeight','hidden','onDragStart','onDoubleClick','nodeType','hashCode','onDrag','onInput','selectionStart','selectionEnd','onDrop','onDragLeave','hideOrShowNavigation','onDragOver','model','scrollEvent','onDragEnter','previousElementSibling','className','namespaceUri','onSubmit','selection','setItemSelected','runtimeType','apply','createBinding','values','onBlur','onTouchCancel','show','insertAdjacentHTML','nodeName','selected','contentEditable','localName','number','draggable','src','addText','addHTML','select','clear','str','clearSelection',],
+'dart.dom.html.HtmlElement': const ['querySelector','query','append','classes','style','getComputedStyle','remove','getBoundingClientRect','querySelectorAll','clone','attributes','focus','tabIndex','onClick','parent','onMouseLeave','replaceWith','onContextMenu','onMouseEnter','onKeyDown','blur','setInnerText','scrollTop','appendHtml','dataset','lastChild','onSelectStart','onDrop','onDragOver','onDragLeave','onDragEnter','onDragEnd','onDragStart','onDrag','onDoubleClick','children','onScroll','getAttribute','nodes','outerHtml','click','createShadowRoot',],
+'dart.dom.html.ElementList': const ['forEach','length','contains','last','style','addAll','first','where','onMouseLeave','onMouseEnter','toList','some','onClick','map','classes','indexOf',],
+'dart.dom.html.HtmlDocument': const ['query','querySelectorAll','querySelector','queryAll','createElement','body','title','createElementUpgrader','documentElement','timeline','onKeyDown','getElementById','registerElement','onClick','addEventListener','onMouseUp','onMouseMove','activeElement','createElementNS','createDocumentFragment','createRange','adoptNode','getElementsByTagName','onKeyUp','elementFromPoint','contains','getElementsByName','head','exitFullscreen','onMouseWheel','register',],
+'dart.collection.LinkedHashMap': const ['containsKey','forEach','remove','putIfAbsent','keys','length','clear','values','isNotEmpty',],
+'dart.dom.html.Navigator': const ['userAgent','language','appVersion','appName','geolocation','vendor','appCodeName','dartEnabled','getUserMedia','onLine','platform','storageQuota',],
+'dart.dom.html.CssStyleDeclaration': const ['display','width','height','top','setProperty','left','position','zIndex','cssText','right','maxHeight','visibility','bottom','background','removeProperty','cursor','overflow','getPropertyValue','opacity','backgroundColor','float','transform','padding','border','borderRadius','paddingBottom','transition','paddingTop','overflowY','color','outline','backgroundImage','transformStyle','pointerEvents','marginLeft','textAlign','backgroundPosition','boxSizing','paddingLeft','backgroundSize','margin','fontFamily','userSelect','fontSize','lineHeight','willChange','fontWeight','getProperty','marginRight','whiteSpace','overflowX','textDecoration','perspective','perspectiveOrigin','appearance','borderLeftWidth','paddingRight','borderColor','borderBottomWidth','borderTopWidth','webkitOverflowScrolling','borderRightWidth','marginBottom','transitionProperty','transitionTimingFunction','transitionDuration','animation','animationDelay','animationFillMode','animationDirection','animationIterationCount','animationTimingFunction','animationDuration','animationName','verticalAlign','marginTop','boxShadow','getPropertyPriority','textStrokeColor','borderBottom','font','supportsProperty','textShadow','maxWidth','minWidth','minHeight','outlineColor','filter','borderWidth','animationPlayState','fontStyle','borderRight','borderLeft','borderTop',],
+'dart.io.ProcessResult': const ['stdout','exitCode',],
+'dart.io.FileSystemEvent': const ['path','isDirectory','type','MODIFY','CREATE','DELETE',],
+'dart.collection.HashSet': const ['add','contains','remove','clear','addAll','retainAll','length','isEmpty','toList','removeAll','any','forEach','map',],
+'dart.collection.HashMap': const ['remove','containsKey','forEach','clear','keys','putIfAbsent','addAll','values',],
+'dart.io.FileSystemEntity': const ['isDirectorySync','path','typeSync','existsSync','isDirectory','identicalSync','isFileSync','type','isFile','statSync','deleteSync','isLinkSync','parentOf','renameSync','isLink','readAsStringSync','identical','rename','toString','delete','exists','parent','stat',],
+'dart.io.OSError': const ['errorCode','toString',],
+'dart.async.StreamTransformer': const ['bind',],
+'dart.core.Runes': const ['toList','any','elementAt','iterator','single','first','forEach','last',],
+'dart.core.Object': const ['toString','toJson','hashCode','discardListChages','reverse','map','lightDom','getName','where','add','containsKey','format','setTable','getClass','getNamespace','getId','getCell','getSize','setNamespace','equals','setColumn','getColumnName','getForeignTableName','setDatabase','setAttribute','setId','getChild','body','setPrevious','getIndex','getParent','getChildAt','getChildCount','getValue','getRoot','POST','GET','getPackage','setSchema','clone','getType','then','isInheritance','isVisible','getDartName','getPlatform','setPosition','setPackage','requiresTransactionInPostgres','setAppData','getSchema','getBuildProperty','getPrevious','getTerminal','n','replaceWith','setChild','setPlatform','run','removeItem','getAllItems','bytes','compareTo','getAttribute','setPreviousIndex','isEmpty','getEdgeAt','isVertex','writeExternal','isEdge','getEdgeCount','isConnectable','setValue','isCollapsed','getStyles','setRoot','getStyle','getGeometry','noSuchMethod','contains','elementAt','e',],
+'dart.core.StringSink': const ['write','writeln','writeCharCode','toString','writeAll',],
+'dart.io.Stdin': const ['pipe','readLineSync','transform','listen',],
+'dart.io.HttpServer': const ['bind','listen','close','connectionsInfo','bindSecure','address','port','idleTimeout','serverHeader','autoCompress','asBroadcastStream','transform','addRequestHandler','listenOn','on',],
+'dart.io.HttpResponse': const ['close','write','statusCode','headers','add','done','redirect','addStream','detachSocket','reasonPhrase','writeln','addError','writeCharCode','writeAll','flush','toString','when','cookies','contentLength','addString','getLogs','listen','persistentConnection','deadline',],
+'dart.io.HttpRequest': const ['listen','uri','session','drain','transform','response','toString','cookies','method','fold','connectionInfo','pipe','asBroadcastStream','toList','timeout','takeWhile','take','skipWhile','singleWhere','map','lastWhere','join','handleError','skip','firstWhere','expand','every','elementAt','distinct','asyncMap','asyncExpand','any','toSet','contains','where','reduce','forEach','headers','path',],
+'dart.collection.SplayTreeMap': const ['forEach','containsKey','remove','keys','values','firstKeyAfter','lastKeyBefore','clear','length',],
+'dart.io.HttpClient': const ['post','getUrl','openUrl','close','postUrl','get','open','addCredentials','patchUrl','shutdown','put','delete','addProxyCredentials','findProxyFromEnvironment',],
+'dart.io.HttpClientRequest': const ['close','add','write','addStream','cookies',],
+'dart.io.Platform': const ['isWindows','script','environment','operatingSystem','pathSeparator',],
+'dart.collection.LinkedHashSet': const ['add','map','contains','toList','addAll','remove',],
+'dart.io.RandomAccessFile': const ['lengthSync','readIntoSync','close','closeSync','writeStringSync','writeString','writeFromSync','length','readInto','read','readSync','writeFrom','readListSync','flushSync','positionSync','setPosition','writeListSync','setPositionSync','unlock','lock','unlockSync','readList','lockSync','readByteSync','position','writeList','writeByteSync',],
+'dart.core.num': const ['round','toDouble','toInt','floor','abs','toString','parse','ceil','toStringAsFixed','isNaN','compareTo','roundToDouble','remainder','hashCode','clamp','isInfinite','isNegative','truncate','toStringAsPrecision','toStringAsExponential','isFinite','truncateToDouble','toRadixString',],
+'dart.dom.html.HttpRequest': const ['send','open','getString','abort','setRequestHeader','request','getAllResponseHeaders','overrideMimeType','requestCrossOrigin','getResponseHeader','postFormData','onLoadEnd','onError','onLoad','DONE','withCredentials','onReadyStateChange','onLoadStart',],
+'dart.dom.html.Event': const ['preventDefault','toString','stopImmediatePropagation','stopPropagation','target','currentTarget',],
+'dart.dom.html.FileReader': const ['readAsArrayBuffer','readAsDataUrl','readAsText','onError','onLoadEnd','result',],
+'dart.core.Pattern': const ['allMatches','matchAsPrefix','toString','firstMatch','pattern','codeUnitAt',],
+'dart.io.ContentType': const ['parse','toString','charset','mimeType','value','parameters','subType','primaryType',],
+'dart.io.HttpHeaders': const ['set','contentType','ifModifiedSince','value','add','host','forEach','date','removeAll','clear','remove','noFolding','contentLength','port','expires','chunkedTransferEncoding','persistentConnection','toString','CONTENT_TYPE','data',],
+'dart.typed_data.Uint8List': const ['setRange','sublist','fillRange','setAll','length','buffer','toString','toList','lastIndexOf','indexOf','join','removeRange','removeLast','clear','addAll','add',],
+'dart.async.StreamSink': const ['close','addStream','add','addError',],
+'dart.typed_data.ByteData': const ['getUint32','setUint32','getUint8','setUint64','getInt32','getUint16','getUint64','setUint16','getInt16','setInt64','setInt32','setInt16','setFloat64','getInt64','setInt8','getFloat64','getFloat32','setFloat32','getInt8','setUint8',],
+'dart.io.HttpClientResponse': const ['listen','toList','transform','drain','fold','pipe','detachSocket',],
+'dart.core.BidirectionalIterator': const ['moveNext','movePrevious',],
+'dart.mirrors.ClosureMirror': const ['invoke','apply','function',],
+'dart.typed_data.Int32x4': const ['x','signMask','select',],
+'dart.js.JsObject': const ['callMethod','hasProperty','toString','deleteProperty','instanceof',],
+'dart.dom.html.Node': const ['remove','ELEMENT_NODE','insertBefore','replaceWith','insertAllBefore','querySelector','localName','text','append','setMenubarOrientation','getElementsByTagName','getElementsByClassName','nodes','parentNode','getElementById','firstChild','parent','contains','tagName','value','toString','name','querySelectorAll','clone','attributes','nextNode','nodeType','click','bind','outerHtml','dispatchEvent','on','childNodes',],
+'dart.core.RuneIterator': const ['moveNext','reset',],
+'dart.mirrors.DeclarationMirror': const ['isPrivate','simpleName','metadata','isSubclassOf','qualifiedName','parameters','invoke',],
+'dart.dom.html.History': const ['pushState','back','replaceState','length',],
+'dart.dom.html.CssClassSet': const ['add','remove','toggle','clear','contains','addAll','removeAll','toString','firstWhere','first','toggleAll','length','containsAll',],
+'dart.dom.html.Document': const ['querySelector','querySelectorAll','documentElement','createElement','title','body','removeEventListener','addEventListener','getElementsByTagName','createElementNS','query','window','queryAll',],
+'dart.mirrors.IsolateMirror': const ['rootLibrary',],
+'dart.mirrors.ObjectMirror': const ['invoke','getField','setField',],
+'dart.dom.html.DivElement': const ['append','classes','style','setInnerHtml','remove','querySelector','id','getComputedStyle','appendText','text','querySelectorAll','onDragEnd','onDrag','onDragStart','draggable','innerHtml','insertAdjacentElement','appendHtml','className','children','focus','query','nodes','createShadowRoot','clone','attributes','queryAll','click','onMouseDown','onClick','hidden','addEventListener','onMouseMove','scrollIntoView','onKeyDown','title','getBoundingClientRect','onMouseUp','dispatchEvent','insertAdjacentText','contentEditable','scrollTop','scrollByLines','bind','insertBefore','xtag','insertAdjacentHtml','matches','setAttribute','on','onKeyUp','getElementsByClassName',],
+'dart.dom.html.NodeValidatorBuilder': const ['allowNavigation','allowElement','allowHtml5','allowSvg','allowInlineStyles','allowTextElements','allowTemplating','allowCustomElement','allowTagExtension','allowImages',],
+'dart.dom.html.Console': const ['timeEnd','time','timeStamp','warn','log','error','groupEnd','info','debug','groupCollapsed','group','dir',],
+'dart.dom.html.ElementUpgrader': const ['upgrade',],
+'dart.async.StreamIterator': const ['moveNext','cancel',],
+'dart.io.SystemEncoding': const ['decode',],
+'dart.collection.UnmodifiableListView': const ['where','contains','any','length','join','firstWhere',],
+'dart.core.Error': const ['safeToString','toString',],
+'dart.convert.Utf8Encoder': const ['bind','convert','startChunkedConversion',],
+'dart.dom.html.DomImplementation': const ['createHtmlDocument',],
+'dart.dom.html.DocumentFragment': const ['querySelectorAll','append','clone','nodes','children','setInnerHtml','querySelector','queryAll','query','remove','ownerDocument',],
+'dart.dom.html.ShadowRoot': const ['querySelector','querySelectorAll','host','children','append','contains','query','activeElement','supported','nodes','firstChild','getElementsByTagName','text','innerHtml','olderShadowRoot',],
+'dart.mirrors.TypeMirror': const ['qualifiedName','isSubtypeOf','reflectedType','newInstance','isAssignableTo','simpleName','typeArguments','originalDeclaration','toString','referent','hasReflectedType','isPrivate','typeVariables','owner','invoke','isOriginalDeclaration',],
+'dart.io.ServerSocket': const ['bind','close','listen',],
+'dart.dom.html.PerformanceNavigation': const ['type','redirectCount',],
+'dart.dom.html.Performance': const ['now','timing','navigation',],
+'dart.dom.html.PerformanceTiming': const ['navigationStart',],
+'dart.typed_data.ByteBuffer': const ['asUint8List','asUint32List','asInt32List','asByteData','asFloat64x2List','asInt32x4List','asFloat32x4List','asFloat64List','asFloat32List','asUint64List','asInt64List','asUint16List','asInt16List','asUint8ClampedList','asInt8List',],
+'dart.io.WebSocket': const ['add','listen','close','connect','where','map','send',],
+'dart.convert.JsonEncoder': const ['convert','startChunkedConversion',],
+'dart.convert.JsonDecoder': const ['convert','startChunkedConversion',],
+'dart.core.bool': const ['toString','should','hashCode','isAssignableFrom','parse','containsKey',],
+'dart.core.FormatException': const ['toString',],
+'dart.dom.html.WindowBase': const ['postMessage','navigator','close','alert',],
+'dart.dom.html.ButtonElement': const ['text','onClick','classes','attributes','style','append','type','setInnerHtml','children','onMouseOut','onMouseOver','click','disabled','dataset','appendText',],
+'dart.core.Exception': const ['toString','printStackTrace',],
+'dart.dom.html.DataTransfer': const ['setData','setDragImage','types','effectAllowed','dropEffect','getData','files',],
+'dart.math.Point': const ['x','y','distanceTo','magnitude',],
+'dart.dom.html.LIElement': const ['classes','append','style','text','querySelector','innerHtml','dispatchEvent','children','dataset','className','nodes','remove','value',],
+'dart.dom.html.CanvasRenderingContext2D': const ['lineTo','beginPath','fillRect','moveTo','stroke','drawImage','closePath','restore','translate','save','scale','fill','getImageData','clearRect','setTransform','strokeRect','rotate','putImageData','fillStyle','arc','transform','fillText','strokeStyle','createImageData','createPatternFromImage','clip','lineWidth','drawImageToRect','strokeText','font','rect','drawImageScaledFromSource','setFillColorRgb','createLinearGradient','bezierCurveTo','drawImageScaled','measureText','setLineDash','shadowBlur','shadowOffsetX','shadowOffsetY','shadowColor','quadraticCurveTo','imageSmoothingEnabled','textAlign','createRadialGradient','textBaseline','globalAlpha','lineCap',],
+'dart.io.HeaderValue': const ['parse',],
+'dart.dom.html.ScriptElement': const ['src','type','async','remove','text',],
+'dart.dom.html.MouseEvent': const ['preventDefault','stopPropagation','target','dataTransfer','page','client','ctrlKey','stopImmediatePropagation','metaKey','shiftKey',],
+'dart.io.RawSocket': const ['write','listen','close','connect','read','available','shutdown','setOption',],
+'dart.io.RawSecureSocket': const ['secure','connect','shutdown','listen','secureServer','write','read',],
+'dart.dom.web_sql.SqlDatabase': const ['transaction','supported',],
+'dart.dom.web_sql.SqlTransaction': const ['executeSql',],
+'dart.dom.web_sql.SqlResultSetRowList': const ['length','elementAt','isNotEmpty','item','forEach',],
+'dart.convert.AsciiCodec': const ['encode','decode',],
+'dart.dom.html.EventStreamProvider': const ['forTarget','forElement',],
+'dart.dom.html.MutationObserver': const ['observe','disconnect','takeRecords',],
+'dart.dom.html.UListElement': const ['queryAll','append','style','id','children','remove','query','insertBefore','classes',],
+'dart.dom.html.VideoElement': const ['canPlayType','load','pause','play','autoplay','remove','src',],
+'dart.dom.html.MediaError': const ['code',],
+'dart.dom.html.TimeRanges': const ['start','end',],
+'dart.dom.html.SourceElement': const ['remove',],
+'dart.dom.html.ObjectElement': const ['remove','getAttribute',],
+'dart.dom.html.OptionElement': const ['value','text','selected','label','appendText',],
+'dart.dom.html.SpanElement': const ['classes','text','style','append','appendText','onMouseOut','onMouseOver','onClick','attributes','remove','draggable','id','outerHtml','innerHtml','setAttribute','querySelector','scrollIntoView',],
+'dart.dom.html.Geolocation': const ['getCurrentPosition','watchPosition',],
+'dart.dom.html.Coordinates': const ['accuracy','longitude','latitude','speed','heading','altitudeAccuracy','altitude',],
+'dart.dom.html.ImageElement': const ['remove','width','height','onLoad','src','style','crossOrigin','classes','className','id','onDragStart',],
+'dart.mirrors.MethodMirror': const ['parameters','isGetter','isConstructor','returnType','owner','simpleName','location','source','isStatic',],
+'dart.dom.html.Storage': const ['containsKey','clear','remove','length','keys','containsValue',],
+'dart.convert.ChunkedConversionSink': const ['add','close','specialI',],
+'dart.collection.ListQueue': const ['add','removeFirst','addAll','addLast','removeLast','forEach','toList','removeWhere','addFirst',],
+'dart.dom.html.CanvasElement': const ['getContext','style','width','height','context2D','toDataUrl','getContext3d','onMouseUp','onMouseDown','getBoundingClientRect','onMouseMove','onClick','onMouseOut','className','onMouseOver','setAttribute','remove','context2d','focus',],
+'dart.dom.html.KeyboardEvent': const ['preventDefault','which','stopPropagation','ctrlKey','keyCode','stopImmediatePropagation','metaKey','altKey','shiftKey','getModifierState',],
+'dart.dom.html.WebSocket': const ['send','close','onMessage','onClose','onError','onOpen','readyState','url','sendTypedData','binaryType',],
+'dart.io.WebSocketTransformer': const ['upgrade','isUpgradeRequest',],
+'dart.core.Symbol': const ['toString','length',],
+'dart.js.JsFunction': const ['apply',],
+'dart.io.InternetAddress': const ['address','host','lookup','toString','isLoopback',],
+'dart.convert.Latin1Codec': const ['decode',],
+'dart.dom.html.ElementEvents': const ['click','load','change','keyPress','drop','dragOver','dragEnter','input','keyDown','dragLeave','dragEnd','dragStart','mouseOut','mouseMove','keyUp','loadedMetadata',],
+'dart.dom.html.TableCellElement': const ['setInnerHtml','style','append','text','insertAdjacentElement','colSpan','setAttribute','innerHtml','cellIndex',],
+'dart.dom.html.TableRowElement': const ['append','attributes','classes','onClick','children','onMouseOut','onMouseOver','remove','insertCell','cells','createFragment','addCell','query','outerHtml',],
+'dart.convert.Converter': const ['convert','startChunkedConversion',],
+'dart.dom.html.FormData': const ['append','appendBlob',],
+'dart.io.ProcessException': const ['toString',],
+'dart.dom.html.Text': const ['remove','text','toString',],
+'dart.dom.html.AnchorElement': const ['href','text','onClick','id','classes','append','dispatchEvent','replaceWith','download','click','setAttribute','appendText',],
+'dart.dom.svg.LineElement': const ['setAttribute',],
+'dart.dom.svg.RectElement': const ['setAttribute','attributes',],
+'dart.dom.svg.EllipseElement': const ['setAttribute',],
+'dart.dom.svg.PolylineElement': const ['attributes',],
+'dart.dom.svg.CircleElement': const ['setAttribute',],
+'dart.dom.svg.PathElement': const ['setAttribute','createSvgPathSegLinetoAbs','createSvgPathSegMovetoAbs',],
+'dart.dom.html.HeadingElement': const ['text','classes','appendText','append','id',],
+'dart.dom.html.TableElement': const ['insertRow','createFragment','append','children','createTBody','deleteRow','addRow','query','querySelector',],
+'dart.io.HttpConnectionInfo': const ['remoteAddress','remotePort','localPort','remoteHost',],
+'dart.dom.html.FormElement': const ['append','submit','children','remove',],
+'dart.io.Cookie': const ['value','toString','path',],
+'dart.dom.html.InputElement': const ['focus','select','value','remove','type','checkValidity','dataset','onKeyDown','setSelectionRange','dispatchEvent','selectionStart','selectionEnd','setAttribute','bind','checked','attributes','blur','setRangeText','click','onChange','placeholder','id','onKeyUp','onBlur','onKeyPress','autocomplete','onPaste','defaultChecked','onFocus','disabled',],
+'dart.io.Socket': const ['close','connect','transform','destroy','add','listen','write','addStream','pipe','address','read','writeList','setOption','flush','map','readList','available',],
+'dart.mirrors.ParameterMirror': const ['type','isOptional','defaultValue',],
+'dart.convert.Codec': const ['fuse','encode','decode',],
+'dart.dom.indexed_db.Database': const ['transaction','createObjectStore','close',],
+'dart.dom.indexed_db.Transaction': const ['objectStore','onAbort','onError','onComplete',],
+'dart.dom.indexed_db.ObjectStore': const ['put','delete','createIndex','getObject','index','openCursor','clear',],
+'dart.dom.svg.SvgSvgElement': const ['append','setAttribute','createFragment','createSvgPoint','getScreenCtm','onMouseUp','onMouseMove',],
+'dart.dom.svg.Point': const ['matrixTransform',],
+'dart.dom.svg.Matrix': const ['inverse',],
+'dart.dom.html.WheelEvent': const ['preventDefault','stopPropagation',],
+'dart.dom.svg.AnimatedRect': const ['baseVal',],
+'dart.dom.html.SelectElement': const ['append','focus','remove','classes','tabIndex','options','selectedIndex','querySelectorAll','multiple','value',],
+'dart.dom.html.LabelElement': const ['query','text','append','htmlFor','style','appendText','classes',],
+'dart.io.HttpSession': const ['id','destroy','clear','containsKey','isNew','remove','onTimeout',],
+'dart.dom.indexed_db.IdbFactory': const ['open','deleteDatabase','supported','supportsDatabaseNames','getDatabaseNames',],
+'dart.dom.indexed_db.Request': const ['result',],
+'dart.dom.indexed_db.Index': const ['openCursor',],
+'dart.dom.indexed_db.KeyRange': const ['upperBound_','bound_','lowerBound_','only_',],
+'dart.dom.indexed_db.CursorWithValue': const ['delete',],
+'dart.core.NoSuchMethodError': const ['toString',],
+'dart.isolate.Isolate': const ['spawn','spawnUri','resume','addOnExitListener','removeErrorListener','addErrorListener','kill','ping','pause','setErrorsFatal',],
+'dart.dom.html.TemplateElement': const ['decorate','content',],
+'dart.dom.html.TreeWalker': const ['nextNode',],
+'dart.dom.html.StyleElement': const ['remove','appendText','text','sheet','attributes','type','appendHtml','dataset','append','innerHtml',],
+'dart.dom.html.EventTarget': const ['error','result','matchesWithAncestors','nodeName','matches','classes','dispatchEvent','removeEventListener','addEventListener','status','parent','value','hashCode',],
+'dart.collection_helpers.equality.Equality': const ['hash','equals','isValidKey',],
+'dart.collection_helpers.equality.SetEquality': const ['hash','equals',],
+'dart.collection_helpers.equality.MapEquality': const ['hash','equals',],
+'dart.collection_helpers.equality.ListEquality': const ['hash','equals',],
+'dart.collection_helpers.equality.IterableEquality': const ['hash','equals',],
+'dart.collection_helpers.equality.UnorderedIterableEquality': const ['hash','equals',],
+'dart.io.SecureSocket': const ['initialize','close','connect','listen','write','add','fold','writeln','secure','transform',],
+'dart.io.HttpDate': const ['parse','format',],
+'dart.math.Rectangle': const ['top','left','containsPoint','height','width','topLeft','intersection','topRight','intersects','containsRectangle','boundingBox','snap',],
+'dart.dom.html.ContentElement': const ['getDistributedNodes',],
+'dart.io.SocketException': const ['toString',],
+'dart.dom.html.TextAreaElement': const ['style','focus','select','rows','attributes','setSelectionRange','value','appendText','remove',],
+'dart.dom.html.LinkElement': const ['href','replaceWith','rel',],
+'dart.dom.html.ParagraphElement': const ['text','appendHtml','classes','addHtml','hidden',],
+'dart.typed_data.Int32List': const ['setRange','indexOf','sublist','removeRange','removeLast','clear','addAll','add','setAll',],
+'dart.dom.web_gl.RenderingContext': const ['ARRAY_BUFFER','texParameteri','bindBuffer','bindFramebuffer','TEXTURE_2D','enable','deleteShader','getUniformLocation','bindTexture','clear','createTexture','detachShader','attachShader','getAttribLocation','createBuffer','enableVertexAttribArray','vertexAttribPointer','FLOAT','STATIC_DRAW','createShader','shaderSource','compileShader','viewport','useProgram','clearColor','bufferDataTyped','getShaderParameter','uniformMatrix4fv','getShaderInfoLog','bindRenderbuffer','deleteTexture','deleteProgram','RGBA','linkProgram','createProgram','disableVertexAttribArray','disable','getProgramParameter','blendFunc','drawArrays','getProgramInfoLog','TRIANGLES','lineWidth','COMPILE_STATUS','texImage2DTyped','NEAREST','createFramebuffer','getExtension','framebufferTexture2D','framebufferRenderbuffer','renderbufferStorage','createRenderbuffer','ELEMENT_ARRAY_BUFFER','uniformMatrix3fv','uniform2f','UNSIGNED_BYTE','deleteFramebuffer','deleteRenderbuffer','TEXTURE_MIN_FILTER','TEXTURE_MAG_FILTER','CLAMP_TO_EDGE','DEPTH_TEST','DEPTH_BUFFER_BIT','texImage2DImage','COLOR_BUFFER_BIT','LINK_STATUS','FRAGMENT_SHADER','VERTEX_SHADER','bufferData','TEXTURE_WRAP_S','TEXTURE_WRAP_T','texImage2DCanvas','LINEAR','UNSIGNED_SHORT','texImage2D','drawElements','pixelStorei','colorMask','depthFunc','TRIANGLE_STRIP','activeTexture','TEXTURE0','depthMask','FRAMEBUFFER','UNPACK_FLIP_Y_WEBGL','generateMipmap','uniform1i',],
+'dart.typed_data.Float32List': const ['sublist','indexOf','buffer','setRange','length',],
+'dart.dom.html.DirectoryEntry': const ['getFile','createDirectory','createFile','createReader','getDirectory','removeRecursively','toUrl','fullPath','toString',],
+'dart.dom.html.Entry': const ['moveTo','isFile','copyTo','isDirectory','fullPath','name','remove','getMetadata','createWriter','file','getParent','toUrl',],
+'dart.dom.html.DirectoryReader': const ['readEntries',],
+'dart.dom.html.KeyCode': const ['DOWN','RIGHT','LEFT','TAB','UP','ESC','ENTER','isCharacterKey','SPACE','NUM_SOUTH','NUM_NORTH','NUM_EAST','NUM_WEST','NUM_NORTH_EAST','NUM_SOUTH_EAST','R',],
+'dart.pkg.collection.iterable_zip.IterableZip': const ['map','toList',],
+'dart.convert.LineSplitter': const ['convert',],
+'dart.dom.html.HttpRequestUpload': const ['onProgress','onError','onTimeout',],
+'dart.dom.html.File': const ['name','slice','readAsBytesSync','existsSync',],
+'dart.dom.html.Events': const ['error','message','load','hashChange','popState','resize','loadEnd',],
+'dart.dom.html.Url': const ['createObjectUrl','revokeObjectUrl','createObjectUrlFromBlob','createObjectUrlFromStream',],
+'dart.dom.html.RtcIceCandidate': const ['candidate','sdpMLineIndex',],
+'dart.dom.html.RtcPeerConnection': const ['setLocalDescription','createDataChannel','createOffer','createAnswer',],
+'dart.io.RawDatagramSocket': const ['bind','close','receive','send','listen',],
+'dart.pkg.collection.equality.DeepCollectionEquality': const ['equals','hash',],
+'dart.pkg.collection.priority_queue.PriorityQueue': const ['addAll','contains','removeFirst','add','removeAll',],
+'dart.convert.StringConversionSink': const ['add','asUtf8Sink','close','asStringSink','addSlice',],
+'dart.dom.html.ImageData': const ['data',],
+'dart.dom.html.PreElement': const ['appendText','text','append','classes',],
+'dart.dom.html.MediaStream': const ['stop',],
+'dart.dom.html.DomParser': const ['parseFromString',],
+'dart.dom.html.CustomEvent': const ['stopImmediatePropagation','preventDefault','stopPropagation',],
+'dart.typed_data.Uint16List': const ['buffer','sublist','setRange','removeRange','removeLast','clear','addAll','add','length',],
+'dart.dom.html.CanvasGradient': const ['addColorStop',],
+'dart.dom.html.Notification': const ['requestPermission',],
+'dart.dom.svg.Length': const ['value','valueAsString',],
+'dart.dom.svg.AnimatedLength': const ['baseVal',],
+'dart.dom.svg.PointList': const ['getItem',],
+'dart.mirrors.SourceLocation': const ['line',],
+'dart.DartGrammarDefinition': const ['build',],
+'dart.dom.html.TextMetrics': const ['width',],
+'dart.dom.html.CssRect': const ['width','height','top','left','topLeft',],
+'dart.dom.html.KeyboardEventStream': const ['onKeyDown',],
+'dart.dom.html.CssRule': const ['selectorText',],
+'dart.dom.html.CssStyleRule': const ['style','selectorText',],
+'dart.dom.html.Selection': const ['removeAllRanges','collapse','getRangeAt',],
+'dart.dom.html.CheckboxInputElement': const ['checked','attributes','classes','value',],
+'dart.dom.html.TextInputElement': const ['classes','value','focus','select','className','onKeyDown','style',],
+'dart.dom.html.DateInputElement': const ['classes',],
+'dart.dom.html.RangeInputElement': const ['style','attributes','onChange','value','step','max','min',],
+'dart.dom.html.AnimationTimeline': const ['play',],
+'dart.dom.html.AnimationPlayer': const ['play',],
+'dart.dom.html.GlobalEventHandlers': const ['clickEvent',],
+'dart.dom.html.TouchEvent': const ['preventDefault','supported','stopPropagation',],
+'dart.dom.html.AudioElement': const ['canPlayType','load','append','play','pause','remove',],
+'dart.io.ProcessSignal': const ['watch',],
+'dart.convert.Utf8Decoder': const ['convert','startChunkedConversion',],
+'dart.dom.html.AnimationEvent': const ['preventDefault','stopImmediatePropagation',],
+'dart.dom.html.FocusEvent': const ['stopImmediatePropagation',],
+'dart.dom.html.Touch': const ['page','client',],
+'dart.async.DeferredLibrary': const ['load',],
+'dart.dom.html.TableSectionElement': const ['append','innerHtml','rows','createFragment','addRow',],
+'dart.mirrors.Mirror': const ['methods','invoke','type','delegate','members',],
+'dart.core.StateError': const ['toString',],
+'dart.io.FileMode': const ['APPEND','READ','WRITE',],
+'dart.dom.html.CssStyleDeclarationBase': const ['display','backgroundColor','opacity','borderLeftWidth',],
+'dart.dom.html.IFrameElement': const ['style','src',],
+'dart.io.FileSystemException': const ['toString',],
+'dart.dom.html.Screen': const ['width','height','pixelDepth',],
+'dart.core.ArgumentError': const ['toString',],
+'dart.dom.html.Blob': const ['slice',],
+'dart.dom.svg.PatternElement': const ['setAttribute','append',],
+'dart.dom.svg.DefsElement': const ['append',],
+'dart.dom.svg.PathSegList': const ['appendItem','clear','length','getItem',],
+'dart.dom.html.FileList': const ['length','item',],
+'dart.dom.html.FileError': const ['NOT_FOUND_ERR','code',],
+'dart.mirrors.VariableMirror': const ['type','isFinal','isStatic',],
+'dart.io.HttpStatus': const ['NOT_FOUND',],
+'dart.typed_data.Float64List': const ['sublist','indexOf','setRange',],
+'dart.typed_data.Float32x4': const ['shuffle','shuffleMix','scale','signMask','clamp','withX','withY','w','z','y','x',],
+'dart.pkg.typed_data.typed_buffers.Int32x4Buffer': const ['add',],
+'dart.dom.html.NumberInputElement': const ['step','max','min','valueAsNumber',],
+'dart.dom.html.ValidityState': const ['valid',],
+'dart.dom.html.CssStyleSheet': const ['ownerNode','insertRule','addRule',],
+'dart.io.ZLibCodec': const ['decode',],
+'dart.collection.HasNextIterator': const ['next',],
+'dart.isolate.RawReceivePort': const ['close',],
+'dart.mirrors.TypeVariableMirror': const ['simpleName','isSubtypeOf','isAssignableTo','owner',],
+'dart.typed_data.implementation.NativeByteBuffer': const ['asFloat64List','asFloat32List','asInt32List',],
+'dart.typed_data.implementation.NativeFloat32x4List': const ['length',],
+'dart.typed_data.implementation.NativeFloat32List': const ['sublist',],
+'dart.typed_data.implementation.NativeInt32x4List': const ['length',],
+'dart.typed_data.implementation.NativeFloat64x2List': const ['length',],
+'dart.typed_data.implementation.NativeFloat64List': const ['sublist',],
+'dart.typed_data.implementation.NativeTypedArray': const ['length',],
+'dart.typed_data.implementation.NativeTypedArrayOfDouble': const ['setRange',],
+'dart.typed_data.implementation.NativeTypedArrayOfInt': const ['setRange',],
+'dart.typed_data.implementation.NativeInt32x4': const ['w','z','y','x',],
+'dart.dom.svg.SvgElement': const ['isTagSupported','clone','setAttribute','children','setInnerHtml','attributes',],
+'dart.dom.svg.GElement': const ['append','querySelector','id',],
+'dart.dom.html.ProgressEvent': const ['toString',],
+'dart.core.RangeError': const ['toString','checkValidRange','checkNotNegative','checkValueInInterval','checkValidIndex',],
+'dart.dom.html.TouchList': const ['length','first','isEmpty','isNotEmpty',],
+'dart.dom.html.FieldSetElement': const ['append','querySelector',],
+'dart.dom.html.ShadowElement': const ['getDistributedNodes',],
+'dart.dom.html.KeyEvent': const ['keyCode','type','preventDefault',],
+'dart.dom.html.NodeList': const ['length','add',],
+'dart.dom.html.DomStringList': const ['length',],
+'dart.dom.html.HtmlCollection': const ['length','forEach','contains',],
+'dart.dom.html.Range': const ['createContextualFragment','selectNodeContents','insertNode','setEndAfter',],
+'dart.dom.html.NodeTreeSanitizer': const ['sanitizeTree',],
+'dart.dom.html.MimeTypeArray': const ['length',],
+'dart.dom.html.PluginArray': const ['length',],
+'dart.dom.html.SourceBufferList': const ['length',],
+'dart.dom.html.SpeechGrammarList': const ['length',],
+'dart.dom.html.TextTrackCueList': const ['length',],
+'dart.dom.html.TextTrackList': const ['length',],
+'dart.dom.html.Dimension': const ['value','toString',],
+'dart.dom.html.UriPolicy': const ['allowsUri',],
+'dart.dom.html.NodeValidator': const ['allowsAttribute','allowsElement',],
+'dart.dom.html.Worker': const ['terminate',],
+'dart.typed_data.Int16List': const ['sublist','buffer','contains','setRange','removeRange','removeLast','clear','addAll','add',],
+'dart.dom.indexed_db.Cursor': const ['next',],
+'dart.dom.svg.LengthList': const ['length','getItem',],
+'dart.dom.svg.NumberList': const ['length','getItem',],
+'dart.dom.svg.StringList': const ['length','getItem',],
+'dart.dom.svg.TransformList': const ['length','getItem',],
+'dart.js.JsArray': const ['length','addAll','insert','removeRange','removeAt','add','setRange','removeLast',],
+'dart.dom.html.ApplicationCache': const ['swapCache',],
+'dart.dom.web_audio.AudioContext': const ['createBufferSource','createOscillator','destination','createPanner','createGain',],
+'dart.dom.html.FileUploadInputElement': const ['click',],
+'dart.dom.html.DomRectReadOnly': const ['top','left','height','width',],
+'dart.typed_data.Int8List': const ['sublist','setRange','removeRange','removeLast','clear','addAll','add','buffer',],
+'dart.dom.web_audio.AudioBufferSourceNode': const ['connectNode','start','stop',],
+'dart.dom.html.FileEntry': const ['file','getParent','toUrl','getMetadata',],
+'dart.dom.html.CustomStream': const ['listen',],
+'dart.dom.html.TrackElement': const ['defaultValue',],
+'dart.dom.web_audio.OscillatorNode': const ['connectNode',],
+'dart.dom.html.StorageQuota': const ['queryInfo',],
+'dart.collection.DoubleLinkedQueue': const ['add',],
+'dart.core.TypeError': const ['toString',],
+'dart.core.AssertionError': const ['toString',],
+'dart.profiler.Metrics': const ['register',],
+'dart.collection.LinkedList': const ['remove','addFirst','clear','add',],
+'dart.typed_data.Uint8ClampedList': const ['sublist',],
+'dart.typed_data.Float64x2': const ['y','x','withX',],
+'dart.convert.ByteConversionSink': const ['close','add','addSlice',],
+'dart.convert.ClosableStringSink': const ['close','write',],
+'dart.mirrors.TypedefMirror': const ['isSubtypeOf','isAssignableTo','referent',],
+'dart.mirrors.FunctionTypeMirror': const ['isSubtypeOf','isAssignableTo','returnType','parameters','isOriginalDeclaration',],
+'dart.mirrors.LibraryDependencyMirror': const ['metadata',],
+'dart.test.stream_from_iterable.IterableTest': const ['run',],
+'dart.io.SecureServerSocket': const ['bind','close','listen',],
+'dart.io.RawServerSocket': const ['bind','listen','close',],
+'dart.typed_data.Uint64List': const ['sublist','setRange','removeRange','removeLast','clear','addAll','add',],
+'dart.typed_data.Int64List': const ['sublist','setRange','removeRange','removeLast','clear','addAll','add',],
+'dart.io.StdioType': const ['name',],
+'dart.io.HttpConnectionsInfo': const ['total','idle','active',],
+'dart.io.RawSecureServerSocket': const ['bind','close','listen',],
+'dart.io.ServerSocketReference': const ['create',],
+'dart.io.NetworkInterface': const ['list',],
+'dart.io.ZLibDecoder': const ['convert',],
+'dart.io.ZLibEncoder': const ['convert',],
+'dart.pkg.async.results.ValueResult': const ['value',],
+'dart.pkg.async.stream_zip.StreamZip': const ['toList',],
+'dart.pkg.async.results.Result': const ['flatten','release',],
+'dart.pkg.async.results.ErrorResult': const ['stackTrace','error',],
+'dart.dom.html.OptGroupElement': const ['append',],
+'dart.dom.html.UnknownElement': const ['query',],
+'dart.dom.web_audio.AudioParam': const ['value','setValueAtTime',],
+'dart.dom.html.RadioButtonInputElement': const ['checked',],
+'dart.dom.web_audio.BiquadFilterNode': const ['connectNode',],
+'dart.async.StreamConsumer': const ['addStream','close',],
+'dart.dom.html.FileSystem': const ['root',],
+'dart.dom.html.FileWriter': const ['write','abort',],
+'dart.dom.html.OutputElement': const ['scrollIntoView',],
+'dart.dom.html.Css': const ['supports',],
+'dart.io.IOException': const ['toString',],
+'dart.dom.html.ButtonInputElement': const ['value','onClick',],
+};
\ No newline at end of file
diff --git a/pkg/analysis_server/lib/src/services/completion/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/completion_manager.dart
index 4861199..a46adae 100644
--- a/pkg/analysis_server/lib/src/services/completion/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/completion_manager.dart
@@ -56,8 +56,8 @@
/**
* Create a manager for the given request.
*/
- factory CompletionManager.create(AnalysisContext context, Source source,
- SearchEngine searchEngine) {
+ factory CompletionManager.create(
+ AnalysisContext context, Source source, SearchEngine searchEngine) {
if (context != null) {
if (AnalysisEngine.isDartFileName(source.shortName)) {
return new DartCompletionManager.create(context, searchEngine, source);
@@ -95,8 +95,7 @@
* Discard any pending operations.
* Subclasses may override but should call super.dispose
*/
- void dispose() {
- }
+ void dispose() {}
/**
* Generate a stream of code completion results.
@@ -187,7 +186,10 @@
}
static String _computeSnippet(String contents, int offset) {
- if (contents == null || offset == null || offset < 0 || contents.length < offset) {
+ if (contents == null ||
+ offset == null ||
+ offset < 0 ||
+ contents.length < offset) {
return '???';
}
int start = offset;
@@ -265,7 +267,6 @@
}
class NoOpCompletionManager extends CompletionManager {
-
NoOpCompletionManager(Source source) : super(null, source);
@override
diff --git a/pkg/analysis_server/lib/src/services/completion/completion_target.dart b/pkg/analysis_server/lib/src/services/completion/completion_target.dart
index f58e1c3..3ae98ba 100644
--- a/pkg/analysis_server/lib/src/services/completion/completion_target.dart
+++ b/pkg/analysis_server/lib/src/services/completion/completion_target.dart
@@ -82,8 +82,8 @@
* Compute the appropriate [CompletionTarget] for the given [offset] within
* the [compilationUnit].
*/
- factory CompletionTarget.forOffset(CompilationUnit compilationUnit,
- int offset) {
+ factory CompletionTarget.forOffset(
+ CompilationUnit compilationUnit, int offset) {
// The precise algorithm is as follows. We perform a depth-first search of
// all edges in the parse tree (both those that point to AST nodes and
// those that point to tokens), visiting parents before children. The
diff --git a/pkg/analysis_server/lib/src/services/completion/dart_completion_cache.dart b/pkg/analysis_server/lib/src/services/completion/dart_completion_cache.dart
index 0e72827..7b56c5f 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart_completion_cache.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart_completion_cache.dart
@@ -7,8 +7,8 @@
import 'dart:async';
import 'dart:collection';
-import 'package:analysis_server/src/protocol_server.dart' hide Element,
- ElementKind;
+import 'package:analysis_server/src/protocol_server.dart'
+ hide Element, ElementKind;
import 'package:analysis_server/src/services/completion/completion_manager.dart';
import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
import 'package:analysis_server/src/services/completion/suggestion_builder.dart';
@@ -56,6 +56,12 @@
List<CompletionSuggestion> otherImportedSuggestions;
/**
+ * Suggestions for constructors
+ * or `null` if nothing has been cached.
+ */
+ List<CompletionSuggestion> importedConstructorSuggestions;
+
+ /**
* A collection of all imported completions
* or `null` if nothing has been cached.
*/
@@ -111,6 +117,7 @@
importedTypeSuggestions = <CompletionSuggestion>[];
libraryPrefixSuggestions = <CompletionSuggestion>[];
otherImportedSuggestions = <CompletionSuggestion>[];
+ importedConstructorSuggestions = <CompletionSuggestion>[];
importedVoidReturnSuggestions = <CompletionSuggestion>[];
importedClassMap = new Map<String, ClassElement>();
_importedCompletions = new HashSet<String>();
@@ -147,16 +154,17 @@
// Add non-imported elements as low relevance
// after the imported element suggestions have been added
Future<bool> futureAllCached = futureImportsCached.then((_) {
- return searchEngine.searchTopLevelDeclarations(
- '').then((List<SearchMatch> matches) {
+ return searchEngine
+ .searchTopLevelDeclarations('')
+ .then((List<SearchMatch> matches) {
_addNonImportedElementSuggestions(matches, excludedLibs);
return true;
});
});
- return shouldWaitForLowPrioritySuggestions ?
- futureAllCached :
- futureImportsCached;
+ return shouldWaitForLowPrioritySuggestions
+ ? futureAllCached
+ : futureImportsCached;
}
/**
@@ -167,6 +175,24 @@
_importKey != null && _importKey == _computeImportKey(unit);
/**
+ * Add constructor suggestions for the given class.
+ */
+ void _addConstructorSuggestions(ClassElement classElem, int relevance) {
+ String className = classElem.name;
+ for (ConstructorElement constructor in classElem.constructors) {
+ if (!constructor.isPrivate) {
+ CompletionSuggestion suggestion =
+ createSuggestion(constructor, relevance: relevance);
+ String name = suggestion.completion;
+ name = name.length > 0 ? '$className.$name' : className;
+ suggestion.completion = name;
+ suggestion.selectionOffset = suggestion.completion.length;
+ importedConstructorSuggestions.add(suggestion);
+ }
+ }
+ }
+
+ /**
* Add suggestions for implicitly imported elements in dart:core.
*/
void _addDartCoreSuggestions() {
@@ -195,8 +221,8 @@
ImportElement importElem = directive.element;
if (importElem != null && importElem.importedLibrary != null) {
if (directive.prefix == null) {
- Namespace importNamespace =
- new NamespaceBuilder().createImportNamespaceForDirective(importElem);
+ Namespace importNamespace = new NamespaceBuilder()
+ .createImportNamespaceForDirective(importElem);
// Include top level elements
importNamespace.definedNames.forEach((String name, Element elem) {
if (elem is ClassElement) {
@@ -228,14 +254,9 @@
CompletionSuggestion suggestion = null;
String completion = importElem.prefix.displayName;
if (completion != null && completion.length > 0) {
- suggestion = new CompletionSuggestion(
- CompletionSuggestionKind.INVOCATION,
- DART_RELEVANCE_DEFAULT,
- completion,
- completion.length,
- 0,
- importElem.isDeprecated,
- false);
+ suggestion = new CompletionSuggestion(CompletionSuggestionKind.INVOCATION,
+ DART_RELEVANCE_DEFAULT, completion, completion.length, 0,
+ importElem.isDeprecated, false);
LibraryElement lib = importElem.importedLibrary;
if (lib != null) {
suggestion.element = newElement_fromEngine(lib);
@@ -249,8 +270,8 @@
* Add suggestions for all top level elements in the context
* excluding those elemnents for which suggestions have already been added.
*/
- void _addNonImportedElementSuggestions(List<SearchMatch> matches,
- Set<LibraryElement> excludedLibs) {
+ void _addNonImportedElementSuggestions(
+ List<SearchMatch> matches, Set<LibraryElement> excludedLibs) {
matches.forEach((SearchMatch match) {
if (match.kind == MatchKind.DECLARATION) {
Element element = match.element;
@@ -268,7 +289,6 @@
* Add a suggestion for the given element.
*/
void _addSuggestion(Element element, int relevance) {
-
if (element is ExecutableElement) {
if (element.isOperator) {
return;
@@ -287,6 +307,7 @@
}
} else if (element is ClassElement) {
importedTypeSuggestions.add(suggestion);
+ _addConstructorSuggestions(element, relevance);
} else {
otherImportedSuggestions.add(suggestion);
}
@@ -308,8 +329,8 @@
* Compute the library unit for the given library source,
* where the [unit] is the resolved compilation unit associated with [source].
*/
- Future<CompilationUnit> _computeLibUnit(Source libSource,
- CompilationUnit unit) {
+ Future<CompilationUnit> _computeLibUnit(
+ Source libSource, CompilationUnit unit) {
// If the sources are the same then we already have the library unit
if (libSource == source) {
return new Future.value(unit);
diff --git a/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
index 818d8a6..f97b2a1 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
@@ -72,17 +72,19 @@
List<DartCompletionComputer> computers;
CommonUsageComputer commonUsageComputer;
- DartCompletionManager(AnalysisContext context, this.searchEngine,
- Source source, this.cache, [this.computers, this.commonUsageComputer])
+ DartCompletionManager(
+ AnalysisContext context, this.searchEngine, Source source, this.cache,
+ [this.computers, this.commonUsageComputer])
: super(context, source) {
if (computers == null) {
computers = [
- new KeywordComputer(),
- new LocalComputer(),
- new ArgListComputer(),
- new CombinatorComputer(),
- new ImportedComputer(),
- new InvocationComputer()];
+ new KeywordComputer(),
+ new LocalComputer(),
+ new ArgListComputer(),
+ new CombinatorComputer(),
+ new ImportedComputer(),
+ new InvocationComputer()
+ ];
}
if (commonUsageComputer == null) {
commonUsageComputer = new CommonUsageComputer();
@@ -92,12 +94,9 @@
/**
* Create a new initialized Dart source completion manager
*/
- factory DartCompletionManager.create(AnalysisContext context,
- SearchEngine searchEngine, Source source) {
- return new DartCompletionManager(
- context,
- searchEngine,
- source,
+ factory DartCompletionManager.create(
+ AnalysisContext context, SearchEngine searchEngine, Source source) {
+ return new DartCompletionManager(context, searchEngine, source,
new DartCompletionCache(context, source));
}
@@ -133,15 +132,15 @@
Token token = entity is AstNode ? entity.beginToken : entity;
if (token != null &&
token.offset <= request.offset &&
- (token.type == TokenType.KEYWORD || token.type == TokenType.IDENTIFIER)) {
+ (token.type == TokenType.KEYWORD ||
+ token.type == TokenType.IDENTIFIER)) {
request.replacementOffset = token.offset;
request.replacementLength = token.length;
}
List<DartCompletionComputer> todo = new List.from(computers);
todo.removeWhere((DartCompletionComputer c) {
- return request.performance.logElapseTime(
- 'computeFast ${c.runtimeType}',
+ return request.performance.logElapseTime('computeFast ${c.runtimeType}',
() {
return c.computeFast(request);
});
@@ -157,8 +156,8 @@
* resolved and request that each remaining computer finish their work.
* Return a [Future] that completes when the last notification has been sent.
*/
- Future computeFull(DartCompletionRequest request,
- List<DartCompletionComputer> todo) {
+ Future computeFull(
+ DartCompletionRequest request, List<DartCompletionComputer> todo) {
request.performance.logStartTime('waitForAnalysis');
return waitForAnalysis().then((CompilationUnit unit) {
if (controller.isClosed) {
@@ -197,12 +196,8 @@
@override
void computeSuggestions(CompletionRequest completionRequest) {
- DartCompletionRequest request = new DartCompletionRequest(
- context,
- searchEngine,
- source,
- completionRequest.offset,
- cache,
+ DartCompletionRequest request = new DartCompletionRequest(context,
+ searchEngine, source, completionRequest.offset, cache,
completionRequest.performance);
request.performance.logElapseTime('compute', () {
List<DartCompletionComputer> todo = computeFast(request);
@@ -219,12 +214,8 @@
if (controller == null || controller.isClosed) {
return;
}
- controller.add(
- new CompletionResult(
- request.replacementOffset,
- request.replacementLength,
- request.suggestions,
- last));
+ controller.add(new CompletionResult(request.replacementOffset,
+ request.replacementLength, request.suggestions, last));
if (last) {
controller.close();
}
@@ -243,9 +234,9 @@
}
Source libSource = libraries[0];
assert(libSource != null);
- return context.computeResolvedCompilationUnitAsync(
- source,
- libSource).catchError((_) {
+ return context
+ .computeResolvedCompilationUnitAsync(source, libSource)
+ .catchError((_) {
// This source file is not scheduled for analysis, so a resolved
// compilation unit is never going to get computed.
return null;
@@ -335,8 +326,8 @@
* that can be used to filter the suggestions on the server side.
*/
String get filterText {
- return context.getContents(
- source).data.substring(replacementOffset, offset);
+ return context.getContents(source).data.substring(
+ replacementOffset, offset);
}
/**
diff --git a/pkg/analysis_server/lib/src/services/completion/imported_computer.dart b/pkg/analysis_server/lib/src/services/completion/imported_computer.dart
index 7291fc6..4e025f3 100644
--- a/pkg/analysis_server/lib/src/services/completion/imported_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/imported_computer.dart
@@ -7,8 +7,8 @@
import 'dart:async';
import 'dart:collection';
-import 'package:analysis_server/src/protocol_server.dart' hide Element,
- ElementKind;
+import 'package:analysis_server/src/protocol_server.dart'
+ hide Element, ElementKind;
import 'package:analysis_server/src/services/completion/dart_completion_cache.dart';
import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
import 'package:analysis_server/src/services/completion/optype.dart';
@@ -29,11 +29,12 @@
@override
bool computeFast(DartCompletionRequest request) {
OpType optype = request.optype;
- if (optype.includeTopLevelSuggestions) {
- builder = new _ImportedSuggestionBuilder(
- request,
+ if (optype.includeTopLevelSuggestions ||
+ optype.includeConstructorSuggestions) {
+ builder = new _ImportedSuggestionBuilder(request,
typesOnly: optype.includeOnlyTypeNameSuggestions,
- excludeVoidReturn: !optype.includeVoidReturnSuggestions);
+ excludeVoidReturn: !optype.includeVoidReturnSuggestions,
+ constructorsOnly: optype.includeConstructorSuggestions);
builder.shouldWaitForLowPrioritySuggestions =
shouldWaitForLowPrioritySuggestions;
return builder.computeFast(request.node);
@@ -54,16 +55,17 @@
* [_ImportedSuggestionBuilder] traverses the imports and builds suggestions
* based upon imported elements.
*/
-class _ImportedSuggestionBuilder extends ElementSuggestionBuilder implements
- SuggestionBuilder {
+class _ImportedSuggestionBuilder extends ElementSuggestionBuilder
+ implements SuggestionBuilder {
bool shouldWaitForLowPrioritySuggestions;
final DartCompletionRequest request;
final bool typesOnly;
final bool excludeVoidReturn;
+ final bool constructorsOnly;
DartCompletionCache cache;
_ImportedSuggestionBuilder(this.request, {this.typesOnly: false,
- this.excludeVoidReturn: false}) {
+ this.excludeVoidReturn: false, this.constructorsOnly: false}) {
cache = request.cache;
}
@@ -77,8 +79,7 @@
bool computeFast(AstNode node) {
CompilationUnit unit = request.unit;
if (cache.isImportInfoCached(unit)) {
- _addInheritedSuggestions(node);
- _addTopLevelSuggestions();
+ _addSuggestions(node);
return true;
}
return false;
@@ -88,18 +89,14 @@
* Compute suggested based upon imported elements.
*/
Future<bool> computeFull(AstNode node) {
-
Future<bool> addSuggestions(_) {
- _addInheritedSuggestions(node);
- _addTopLevelSuggestions();
+ _addSuggestions(node);
return new Future.value(true);
}
Future future = null;
if (!cache.isImportInfoCached(request.unit)) {
- future = cache.computeImportInfo(
- request.unit,
- request.searchEngine,
+ future = cache.computeImportInfo(request.unit, request.searchEngine,
shouldWaitForLowPrioritySuggestions);
}
if (future != null) {
@@ -109,10 +106,27 @@
}
/**
+ * Add constructor and library prefix suggestions from the cache.
+ * To reduce the number of suggestions sent to the client,
+ * filter the suggestions based upon the first character typed.
+ * If no characters are available to use for filtering,
+ * then exclude all low priority suggestions.
+ */
+ void _addConstructorSuggestions() {
+ String filterText = request.filterText;
+ if (filterText.length > 1) {
+ filterText = filterText.substring(0, 1);
+ }
+ DartCompletionCache cache = request.cache;
+ _addFilteredSuggestions(filterText, cache.importedConstructorSuggestions);
+ _addFilteredSuggestions(filterText, cache.libraryPrefixSuggestions);
+ }
+
+ /**
* Add imported element suggestions.
*/
- void _addElementSuggestions(List<Element> elements, {int relevance:
- DART_RELEVANCE_DEFAULT}) {
+ void _addElementSuggestions(List<Element> elements,
+ {int relevance: DART_RELEVANCE_DEFAULT}) {
elements.forEach((Element elem) {
if (elem is! ClassElement) {
if (typesOnly) {
@@ -132,6 +146,25 @@
}
/**
+ * Add suggestions which start with the given text.
+ */
+ _addFilteredSuggestions(
+ String filterText, List<CompletionSuggestion> unfiltered) {
+ //TODO (danrubel) Revisit this filtering once paged API has been added
+ unfiltered.forEach((CompletionSuggestion suggestion) {
+ if (filterText.length > 0) {
+ if (suggestion.completion.startsWith(filterText)) {
+ request.suggestions.add(suggestion);
+ }
+ } else {
+ if (suggestion.relevance != DART_RELEVANCE_LOW) {
+ request.suggestions.add(suggestion);
+ }
+ }
+ });
+ }
+
+ /**
* Add suggestions for any inherited imported members.
*/
void _addInheritedSuggestions(AstNode node) {
@@ -150,25 +183,19 @@
String name = inheritedTypes.removeLast();
ClassElement elem = cache.importedClassMap[name];
if (visited.add(name) && elem != null) {
- _addElementSuggestions(
- elem.fields,
+ _addElementSuggestions(elem.fields,
relevance: DART_RELEVANCE_INHERITED_FIELD);
- _addElementSuggestions(
- elem.accessors,
+ _addElementSuggestions(elem.accessors,
relevance: DART_RELEVANCE_INHERITED_ACCESSOR);
- _addElementSuggestions(
- elem.methods,
+ _addElementSuggestions(elem.methods,
relevance: DART_RELEVANCE_INHERITED_METHOD);
elem.allSupertypes.forEach((InterfaceType type) {
if (visited.add(type.name) && type.element != null) {
- _addElementSuggestions(
- type.element.fields,
+ _addElementSuggestions(type.element.fields,
relevance: DART_RELEVANCE_INHERITED_FIELD);
- _addElementSuggestions(
- type.element.accessors,
+ _addElementSuggestions(type.element.accessors,
relevance: DART_RELEVANCE_INHERITED_ACCESSOR);
- _addElementSuggestions(
- type.element.methods,
+ _addElementSuggestions(type.element.methods,
relevance: DART_RELEVANCE_INHERITED_METHOD);
}
});
@@ -178,6 +205,18 @@
}
/**
+ * Add suggested based upon imported elements.
+ */
+ void _addSuggestions(AstNode node) {
+ if (constructorsOnly) {
+ _addConstructorSuggestions();
+ } else {
+ _addInheritedSuggestions(node);
+ _addTopLevelSuggestions();
+ }
+ }
+
+ /**
* Add top level suggestions from the cache.
* To reduce the number of suggestions sent to the client,
* filter the suggestions based upon the first character typed.
@@ -189,29 +228,14 @@
if (filterText.length > 1) {
filterText = filterText.substring(0, 1);
}
-
- //TODO (danrubel) Revisit this filtering once paged API has been added
- addFilteredSuggestions(List<CompletionSuggestion> unfiltered) {
- unfiltered.forEach((CompletionSuggestion suggestion) {
- if (filterText.length > 0) {
- if (suggestion.completion.startsWith(filterText)) {
- request.suggestions.add(suggestion);
- }
- } else {
- if (suggestion.relevance != DART_RELEVANCE_LOW) {
- request.suggestions.add(suggestion);
- }
- }
- });
- }
-
DartCompletionCache cache = request.cache;
- addFilteredSuggestions(cache.importedTypeSuggestions);
- addFilteredSuggestions(cache.libraryPrefixSuggestions);
+ _addFilteredSuggestions(filterText, cache.importedTypeSuggestions);
+ _addFilteredSuggestions(filterText, cache.libraryPrefixSuggestions);
if (!typesOnly) {
- addFilteredSuggestions(cache.otherImportedSuggestions);
+ _addFilteredSuggestions(filterText, cache.otherImportedSuggestions);
if (!excludeVoidReturn) {
- addFilteredSuggestions(cache.importedVoidReturnSuggestions);
+ _addFilteredSuggestions(
+ filterText, cache.importedVoidReturnSuggestions);
}
}
}
diff --git a/pkg/analysis_server/lib/src/services/completion/invocation_computer.dart b/pkg/analysis_server/lib/src/services/completion/invocation_computer.dart
index f6e68d5..494a57d 100644
--- a/pkg/analysis_server/lib/src/services/completion/invocation_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/invocation_computer.dart
@@ -7,6 +7,7 @@
import 'dart:async';
import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
+import 'package:analysis_server/src/services/completion/local_declaration_visitor.dart';
import 'package:analysis_server/src/services/completion/optype.dart';
import 'package:analysis_server/src/services/completion/suggestion_builder.dart';
import 'package:analyzer/src/generated/ast.dart';
@@ -64,8 +65,8 @@
node = (node as PropertyAccess).realTarget;
}
if (node is Identifier && node.bestElement is ClassElement) {
- node.bestElement.accept(
- new _PrefixedIdentifierSuggestionBuilder(request));
+ node.bestElement
+ .accept(new _PrefixedIdentifierSuggestionBuilder(request));
return new Future.value(true);
}
if (node is Expression) {
@@ -121,12 +122,125 @@
}
/**
+ * An [AstVisitor] which looks for a declaration with the given name
+ * and if found, tries to determine a type for that declaration.
+ */
+class _LocalBestTypeVisitor extends LocalDeclarationVisitor {
+
+ /**
+ * The name for the declaration to be found.
+ */
+ final String targetName;
+
+ /**
+ * The best type for the found declaration,
+ * or `null` if no declaration found or failed to determine a type.
+ */
+ DartType typeFound;
+
+ /**
+ * Construct a new instance to search for a declaration
+ */
+ _LocalBestTypeVisitor(this.targetName, int offset) : super(offset);
+
+ @override
+ void declaredClass(ClassDeclaration declaration) {
+ if (declaration.name.name == targetName) {
+ // no type
+ finished();
+ }
+ }
+
+ @override
+ void declaredClassTypeAlias(ClassTypeAlias declaration) {
+ if (declaration.name.name == targetName) {
+ // no type
+ finished();
+ }
+ }
+
+ @override
+ void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {
+ if (varDecl.name.name == targetName) {
+ // Type provided by the element in computeFull above
+ finished();
+ }
+ }
+
+ @override
+ void declaredFunction(FunctionDeclaration declaration) {
+ if (declaration.name.name == targetName) {
+ TypeName typeName = declaration.returnType;
+ if (typeName != null) {
+ typeFound = typeName.type;
+ }
+ finished();
+ }
+ }
+
+ @override
+ void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {
+ if (declaration.name.name == targetName) {
+ TypeName typeName = declaration.returnType;
+ if (typeName != null) {
+ typeFound = typeName.type;
+ }
+ finished();
+ }
+ }
+
+ @override
+ void declaredLabel(Label label, bool isCaseLabel) {
+ if (label.label.name == targetName) {
+ // no type
+ finished();
+ }
+ }
+
+ @override
+ void declaredLocalVar(SimpleIdentifier name, TypeName type) {
+ if (name.name == targetName) {
+ typeFound = name.bestType;
+ finished();
+ }
+ }
+
+ @override
+ void declaredMethod(MethodDeclaration declaration) {
+ if (declaration.name.name == targetName) {
+ TypeName typeName = declaration.returnType;
+ if (typeName != null) {
+ typeFound = typeName.type;
+ }
+ finished();
+ }
+ }
+
+ @override
+ void declaredParam(SimpleIdentifier name, TypeName type) {
+ if (name.name == targetName) {
+ // Type provided by the element in computeFull above
+ finished();
+ }
+ }
+
+ @override
+ void declaredTopLevelVar(
+ VariableDeclarationList varList, VariableDeclaration varDecl) {
+ if (varDecl.name.name == targetName) {
+ // Type provided by the element in computeFull above
+ finished();
+ }
+ }
+}
+
+/**
* An [Element] visitor for determining the appropriate invocation/access
* suggestions based upon the element for which the completion is requested.
*/
-class _PrefixedIdentifierSuggestionBuilder extends
- GeneralizingElementVisitor<Future<bool>> implements SuggestionBuilder {
-
+class _PrefixedIdentifierSuggestionBuilder
+ extends GeneralizingElementVisitor<Future<bool>>
+ implements SuggestionBuilder {
final DartCompletionRequest request;
_PrefixedIdentifierSuggestionBuilder(this.request);
@@ -151,12 +265,26 @@
if (prefix != null) {
Element element = prefix.bestElement;
DartType type = prefix.bestType;
- if (element is! ClassElement && type != null && !type.isDynamic) {
- InterfaceTypeSuggestionBuilder.suggestionsFor(
- request,
- type);
- return new Future.value(true);
- } else if (element != null) {
+ if (element is! ClassElement) {
+ if (type == null || type.isDynamic) {
+ //
+ // Given `g. int y = 0;`, the parser interprets `g` as a prefixed
+ // identifier with no type.
+ // If the user is requesting completions for `g`,
+ // then check for a function, getter, or similar with a type.
+ //
+ _LocalBestTypeVisitor visitor =
+ new _LocalBestTypeVisitor(prefix.name, request.offset);
+ if (visitor.visit(prefix)) {
+ type = visitor.typeFound;
+ }
+ }
+ if (type != null && !type.isDynamic) {
+ InterfaceTypeSuggestionBuilder.suggestionsFor(request, type);
+ return new Future.value(true);
+ }
+ }
+ if (element != null) {
return element.accept(this);
}
}
@@ -170,8 +298,7 @@
InterfaceType type = element.type;
if (type != null) {
StaticClassElementSuggestionBuilder.suggestionsFor(
- request,
- type.element);
+ request, type.element);
}
}
return new Future.value(false);
@@ -188,21 +315,20 @@
// once that accessor is implemented and available in Dart
bool modified = false;
// Find the import directive with the given prefix
- request.unit.directives.forEach((Directive directive) {
+ for (Directive directive in request.unit.directives) {
if (directive is ImportDirective) {
if (directive.prefix != null) {
if (directive.prefix.name == element.name) {
// Suggest elements from the imported library
LibraryElement library = directive.uriElement;
LibraryElementSuggestionBuilder.suggestionsFor(
- request,
- CompletionSuggestionKind.INVOCATION,
- library);
+ request, CompletionSuggestionKind.INVOCATION, library);
modified = true;
}
}
}
- });
+ }
+ ;
return new Future.value(modified);
}
diff --git a/pkg/analysis_server/lib/src/services/completion/keyword_computer.dart b/pkg/analysis_server/lib/src/services/completion/keyword_computer.dart
index baaef7b..db65d77 100644
--- a/pkg/analysis_server/lib/src/services/completion/keyword_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/keyword_computer.dart
@@ -16,7 +16,6 @@
* for the local library in which the completion is requested.
*/
class KeywordComputer extends DartCompletionComputer {
-
@override
bool computeFast(DartCompletionRequest request) {
request.node.accept(new _KeywordVisitor(request));
@@ -45,45 +44,45 @@
@override
visitBlock(Block node) {
if (_isInClassMemberBody(node)) {
- _addSuggestions(
- [
- Keyword.ASSERT,
- Keyword.CASE,
- Keyword.CONTINUE,
- Keyword.DO,
- Keyword.FINAL,
- Keyword.FOR,
- Keyword.IF,
- Keyword.NEW,
- Keyword.RETHROW,
- Keyword.RETURN,
- Keyword.SUPER,
- Keyword.SWITCH,
- Keyword.THIS,
- Keyword.THROW,
- Keyword.TRY,
- Keyword.VAR,
- Keyword.VOID,
- Keyword.WHILE]);
+ _addSuggestions([
+ Keyword.ASSERT,
+ Keyword.CASE,
+ Keyword.CONTINUE,
+ Keyword.DO,
+ Keyword.FINAL,
+ Keyword.FOR,
+ Keyword.IF,
+ Keyword.NEW,
+ Keyword.RETHROW,
+ Keyword.RETURN,
+ Keyword.SUPER,
+ Keyword.SWITCH,
+ Keyword.THIS,
+ Keyword.THROW,
+ Keyword.TRY,
+ Keyword.VAR,
+ Keyword.VOID,
+ Keyword.WHILE
+ ]);
} else {
- _addSuggestions(
- [
- Keyword.ASSERT,
- Keyword.CASE,
- Keyword.CONTINUE,
- Keyword.DO,
- Keyword.FINAL,
- Keyword.FOR,
- Keyword.IF,
- Keyword.NEW,
- Keyword.RETHROW,
- Keyword.RETURN,
- Keyword.SWITCH,
- Keyword.THROW,
- Keyword.TRY,
- Keyword.VAR,
- Keyword.VOID,
- Keyword.WHILE]);
+ _addSuggestions([
+ Keyword.ASSERT,
+ Keyword.CASE,
+ Keyword.CONTINUE,
+ Keyword.DO,
+ Keyword.FINAL,
+ Keyword.FOR,
+ Keyword.IF,
+ Keyword.NEW,
+ Keyword.RETHROW,
+ Keyword.RETURN,
+ Keyword.SWITCH,
+ Keyword.THROW,
+ Keyword.TRY,
+ Keyword.VAR,
+ Keyword.VOID,
+ Keyword.WHILE
+ ]);
}
}
@@ -95,18 +94,18 @@
}
// Inside the class declaration { }
if (request.offset > node.leftBracket.offset) {
- _addSuggestions(
- [
- Keyword.CONST,
- Keyword.DYNAMIC,
- Keyword.FACTORY,
- Keyword.FINAL,
- Keyword.GET,
- Keyword.OPERATOR,
- Keyword.SET,
- Keyword.STATIC,
- Keyword.VAR,
- Keyword.VOID]);
+ _addSuggestions([
+ Keyword.CONST,
+ Keyword.DYNAMIC,
+ Keyword.FACTORY,
+ Keyword.FINAL,
+ Keyword.GET,
+ Keyword.OPERATOR,
+ Keyword.SET,
+ Keyword.STATIC,
+ Keyword.VAR,
+ Keyword.VOID
+ ]);
return;
}
_addClassDeclarationKeywords(node);
@@ -146,19 +145,17 @@
}
if (request.offset <= startOfDeclarations) {
_addSuggestions(
- [Keyword.EXPORT, Keyword.IMPORT, Keyword.PART],
- DART_RELEVANCE_HIGH);
+ [Keyword.EXPORT, Keyword.IMPORT, Keyword.PART], DART_RELEVANCE_HIGH);
}
if (request.offset >= endOfDirectives) {
- _addSuggestions(
- [
- Keyword.ABSTRACT,
- Keyword.CLASS,
- Keyword.CONST,
- Keyword.FINAL,
- Keyword.TYPEDEF,
- Keyword.VAR],
- DART_RELEVANCE_HIGH);
+ _addSuggestions([
+ Keyword.ABSTRACT,
+ Keyword.CLASS,
+ Keyword.CONST,
+ Keyword.FINAL,
+ Keyword.TYPEDEF,
+ Keyword.VAR
+ ], DART_RELEVANCE_HIGH);
}
}
@@ -219,22 +216,16 @@
}
}
- void _addSuggestion(Keyword keyword, [int relevance =
- DART_RELEVANCE_DEFAULT]) {
+ void _addSuggestion(Keyword keyword,
+ [int relevance = DART_RELEVANCE_DEFAULT]) {
String completion = keyword.syntax;
- request.suggestions.add(
- new CompletionSuggestion(
- CompletionSuggestionKind.KEYWORD,
- relevance,
- completion,
- completion.length,
- 0,
- false,
- false));
+ request.suggestions.add(new CompletionSuggestion(
+ CompletionSuggestionKind.KEYWORD,
+ relevance, completion, completion.length, 0, false, false));
}
- void _addSuggestions(List<Keyword> keywords, [int relevance =
- DART_RELEVANCE_KEYWORD]) {
+ void _addSuggestions(List<Keyword> keywords,
+ [int relevance = DART_RELEVANCE_KEYWORD]) {
keywords.forEach((Keyword keyword) {
_addSuggestion(keyword, relevance);
});
diff --git a/pkg/analysis_server/lib/src/services/completion/local_computer.dart b/pkg/analysis_server/lib/src/services/completion/local_computer.dart
index 4a7584f..fdbb38c 100644
--- a/pkg/analysis_server/lib/src/services/completion/local_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/local_computer.dart
@@ -6,8 +6,8 @@
import 'dart:async';
-import 'package:analysis_server/src/protocol.dart' as protocol show Element,
- ElementKind;
+import 'package:analysis_server/src/protocol.dart' as protocol
+ show Element, ElementKind;
import 'package:analysis_server/src/protocol.dart' hide Element, ElementKind;
import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
import 'package:analysis_server/src/services/completion/local_declaration_visitor.dart';
@@ -16,40 +16,98 @@
import 'package:analyzer/src/generated/scanner.dart';
import 'package:analyzer/src/generated/utilities_dart.dart';
+const _DYNAMIC = 'dynamic';
+
+final TypeName _NO_RETURN_TYPE = new TypeName(
+ new SimpleIdentifier(new StringToken(TokenType.IDENTIFIER, '', 0)), null);
+
+/**
+ * Create a new protocol Element for inclusion in a completion suggestion.
+ */
+protocol.Element _createElement(protocol.ElementKind kind, SimpleIdentifier id,
+ {String parameters, TypeName returnType, bool isAbstract: false,
+ bool isDeprecated: false}) {
+ String name = id != null ? id.name : '';
+ int flags = protocol.Element.makeFlags(
+ isAbstract: isAbstract,
+ isDeprecated: isDeprecated,
+ isPrivate: Identifier.isPrivateName(name));
+ return new protocol.Element(kind, name, flags,
+ parameters: parameters, returnType: _nameForType(returnType));
+}
+
+/**
+ * Return `true` if the @deprecated annotation is present
+ */
+bool _isDeprecated(AnnotatedNode node) {
+ if (node != null) {
+ NodeList<Annotation> metadata = node.metadata;
+ if (metadata != null) {
+ return metadata.any((Annotation a) {
+ return a.name is SimpleIdentifier && a.name.name == 'deprecated';
+ });
+ }
+ }
+ return false;
+}
+
+/**
+ * Return the name for the given type.
+ */
+String _nameForType(TypeName type) {
+ if (type == _NO_RETURN_TYPE) {
+ return null;
+ }
+ if (type == null) {
+ return _DYNAMIC;
+ }
+ Identifier id = type.name;
+ if (id == null) {
+ return _DYNAMIC;
+ }
+ String name = id.name;
+ if (name == null || name.length <= 0) {
+ return _DYNAMIC;
+ }
+ TypeArgumentList typeArgs = type.typeArguments;
+ if (typeArgs != null) {
+ //TODO (danrubel) include type arguments
+ }
+ return name;
+}
+
/**
* A computer for calculating `completion.getSuggestions` request results
* for the local library in which the completion is requested.
*/
class LocalComputer extends DartCompletionComputer {
-
@override
bool computeFast(DartCompletionRequest request) {
OpType optype = request.optype;
+
+ // Collect suggestions from the specific child [AstNode] that contains
+ // the completion offset and all of its parents recursively.
if (optype.includeTopLevelSuggestions) {
- _LocalVisitor localVisitor = new _LocalVisitor(
- request,
- request.offset,
+ _LocalVisitor localVisitor = new _LocalVisitor(request, request.offset,
optype.includeOnlyTypeNameSuggestions,
!optype.includeVoidReturnSuggestions);
-
- // Collect suggestions from the specific child [AstNode] that contains
- // the completion offset and all of its parents recursively.
- request.node.accept(localVisitor);
+ localVisitor.visit(request.node);
}
if (optype.includeStatementLabelSuggestions ||
optype.includeCaseLabelSuggestions) {
- _LabelVisitor labelVisitor = new _LabelVisitor(
- request,
+ _LabelVisitor labelVisitor = new _LabelVisitor(request,
optype.includeStatementLabelSuggestions,
optype.includeCaseLabelSuggestions);
- request.node.accept(labelVisitor);
+ labelVisitor.visit(request.node);
+ }
+ if (optype.includeConstructorSuggestions) {
+ new _ConstructorVisitor(request).visit(request.node);
}
// If the unit is not a part and does not reference any parts
// then work is complete
- return !request.unit.directives.any(
- (Directive directive) =>
- directive is PartOfDirective || directive is PartDirective);
+ return !request.unit.directives.any((Directive directive) =>
+ directive is PartOfDirective || directive is PartDirective);
}
@override
@@ -61,6 +119,183 @@
}
/**
+ * A visitor for collecting constructor suggestions.
+ */
+class _ConstructorVisitor extends LocalDeclarationVisitor {
+ final DartCompletionRequest request;
+
+ _ConstructorVisitor(DartCompletionRequest request)
+ : super(request.offset),
+ request = request;
+
+ @override
+ void declaredClass(ClassDeclaration declaration) {
+ bool found = false;
+ for (ClassMember member in declaration.members) {
+ if (member is ConstructorDeclaration) {
+ found = true;
+ _addSuggestion(declaration, member);
+ }
+ }
+ if (!found) {
+ _addSuggestion(declaration, null);
+ }
+ }
+
+ @override
+ void declaredClassTypeAlias(ClassTypeAlias declaration) {
+ // TODO: implement declaredClassTypeAlias
+ }
+
+ @override
+ void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {
+ // TODO: implement declaredField
+ }
+
+ @override
+ void declaredFunction(FunctionDeclaration declaration) {
+ // TODO: implement declaredFunction
+ }
+
+ @override
+ void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {
+ // TODO: implement declaredFunctionTypeAlias
+ }
+
+ @override
+ void declaredLabel(Label label, bool isCaseLabel) {
+ // TODO: implement declaredLabel
+ }
+
+ @override
+ void declaredLocalVar(SimpleIdentifier name, TypeName type) {
+ // TODO: implement declaredLocalVar
+ }
+
+ @override
+ void declaredMethod(MethodDeclaration declaration) {
+ // TODO: implement declaredMethod
+ }
+
+ @override
+ void declaredParam(SimpleIdentifier name, TypeName type) {
+ // TODO: implement declaredParam
+ }
+
+ @override
+ void declaredTopLevelVar(
+ VariableDeclarationList varList, VariableDeclaration varDecl) {
+ // TODO: implement declaredTopLevelVar
+ }
+
+ /**
+ * For the given class and constructor,
+ * add a suggestion of the form B(...) or B.name(...).
+ * If the given constructor is `null`
+ * then add a default constructor suggestion.
+ */
+ CompletionSuggestion _addSuggestion(
+ ClassDeclaration classDecl, ConstructorDeclaration constructorDecl) {
+ SimpleIdentifier elemId;
+ String completion = classDecl.name.name;
+ if (constructorDecl != null) {
+ elemId = constructorDecl.name;
+ if (elemId != null) {
+ String name = elemId.name;
+ if (name != null && name.length > 0) {
+ completion = '$completion.$name';
+ }
+ }
+ }
+ bool isDeprecated =
+ constructorDecl != null && _isDeprecated(constructorDecl);
+ List<String> parameterNames = new List<String>();
+ List<String> parameterTypes = new List<String>();
+ int requiredParameterCount = 0;
+ bool hasNamedParameters = false;
+ StringBuffer paramBuf = new StringBuffer();
+ paramBuf.write('(');
+ int paramCount = 0;
+ if (constructorDecl != null) {
+ for (FormalParameter param in constructorDecl.parameters.parameters) {
+ if (paramCount > 0) {
+ paramBuf.write(', ');
+ }
+ String paramName;
+ String typeName;
+ if (param is NormalFormalParameter) {
+ paramName = param.identifier.name;
+ typeName = _nameForParamType(param);
+ ++requiredParameterCount;
+ } else if (param is DefaultFormalParameter) {
+ NormalFormalParameter childParam = param.parameter;
+ paramName = childParam.identifier.name;
+ typeName = _nameForParamType(childParam);
+ if (param.kind == ParameterKind.NAMED) {
+ hasNamedParameters = true;
+ }
+ if (paramCount == requiredParameterCount) {
+ paramBuf.write(hasNamedParameters ? '{' : '[');
+ }
+ }
+ parameterNames.add(paramName);
+ parameterTypes.add(typeName);
+ paramBuf.write(typeName);
+ paramBuf.write(' ');
+ paramBuf.write(paramName);
+ ++paramCount;
+ }
+ }
+ if (paramCount > requiredParameterCount) {
+ paramBuf.write(hasNamedParameters ? '}' : ']');
+ }
+ paramBuf.write(')');
+ protocol.Element element = _createElement(
+ protocol.ElementKind.CONSTRUCTOR, elemId,
+ parameters: paramBuf.toString());
+ element.returnType = classDecl.name.name;
+ CompletionSuggestion suggestion = new CompletionSuggestion(
+ CompletionSuggestionKind.INVOCATION,
+ isDeprecated ? DART_RELEVANCE_LOW : DART_RELEVANCE_DEFAULT, completion,
+ completion.length, 0, isDeprecated, false,
+ declaringType: classDecl.name.name,
+ element: element,
+ parameterNames: parameterNames,
+ parameterTypes: parameterTypes,
+ requiredParameterCount: requiredParameterCount,
+ hasNamedParameters: hasNamedParameters);
+ request.suggestions.add(suggestion);
+ return suggestion;
+ }
+
+ /**
+ * Determine the name of the type for the given constructor parameter.
+ */
+ String _nameForParamType(NormalFormalParameter param) {
+ if (param is SimpleFormalParameter) {
+ return _nameForType(param.type);
+ }
+ SimpleIdentifier id = param.identifier;
+ if (param is FieldFormalParameter && id != null) {
+ String fieldName = id.name;
+ AstNode classDecl = param.getAncestor((p) => p is ClassDeclaration);
+ if (classDecl is ClassDeclaration) {
+ for (ClassMember member in classDecl.members) {
+ if (member is FieldDeclaration) {
+ for (VariableDeclaration field in member.fields.variables) {
+ if (field.name.name == fieldName) {
+ return _nameForType(member.fields.type);
+ }
+ }
+ }
+ }
+ }
+ }
+ return _DYNAMIC;
+ }
+}
+
+/**
* A visitor for collecting suggestions for break and continue labels.
*/
class _LabelVisitor extends LocalDeclarationVisitor {
@@ -133,25 +368,23 @@
}
@override
- void declaredTopLevelVar(VariableDeclarationList varList,
- VariableDeclaration varDecl) {
+ void declaredTopLevelVar(
+ VariableDeclarationList varList, VariableDeclaration varDecl) {
// ignored
}
@override
- bool visitFunctionExpression(FunctionExpression node) {
+ void visitFunctionExpression(FunctionExpression node) {
// Labels are only accessible within the local function, so stop visiting
// once we reach a function boundary.
- finished = true;
- return true;
+ finished();
}
@override
- bool visitMethodDeclaration(MethodDeclaration node) {
+ void visitMethodDeclaration(MethodDeclaration node) {
// Labels are only accessible within the local function, so stop visiting
// once we reach a function boundary.
- finished = true;
- return true;
+ finished();
}
CompletionSuggestion _addSuggestion(SimpleIdentifier id) {
@@ -159,13 +392,8 @@
String completion = id.name;
if (completion != null && completion.length > 0 && completion != '_') {
CompletionSuggestion suggestion = new CompletionSuggestion(
- CompletionSuggestionKind.IDENTIFIER,
- DART_RELEVANCE_DEFAULT,
- completion,
- completion.length,
- 0,
- false,
- false);
+ CompletionSuggestionKind.IDENTIFIER, DART_RELEVANCE_DEFAULT,
+ completion, completion.length, 0, false, false);
request.suggestions.add(suggestion);
return suggestion;
}
@@ -176,8 +404,8 @@
/**
* Create a new protocol Element for inclusion in a completion suggestion.
*/
- protocol.Element _createElement(protocol.ElementKind kind,
- SimpleIdentifier id) {
+ protocol.Element _createElement(
+ protocol.ElementKind kind, SimpleIdentifier id) {
String name = id.name;
int flags =
protocol.Element.makeFlags(isPrivate: Identifier.isPrivateName(name));
@@ -190,33 +418,23 @@
* that contains the completion offset to the [CompilationUnit].
*/
class _LocalVisitor extends LocalDeclarationVisitor {
- static const DYNAMIC = 'dynamic';
-
- static final TypeName NO_RETURN_TYPE = new TypeName(
- new SimpleIdentifier(new StringToken(TokenType.IDENTIFIER, '', 0)),
- null);
-
final DartCompletionRequest request;
final bool typesOnly;
final bool excludeVoidReturn;
- _LocalVisitor(this.request, int offset, this.typesOnly,
- this.excludeVoidReturn)
+ _LocalVisitor(
+ this.request, int offset, this.typesOnly, this.excludeVoidReturn)
: super(offset);
@override
void declaredClass(ClassDeclaration declaration) {
bool isDeprecated = _isDeprecated(declaration);
- CompletionSuggestion suggestion = _addSuggestion(
- declaration.name,
- NO_RETURN_TYPE,
- isDeprecated,
- DART_RELEVANCE_DEFAULT);
+ CompletionSuggestion suggestion = _addSuggestion(declaration.name,
+ _NO_RETURN_TYPE, isDeprecated, DART_RELEVANCE_DEFAULT);
if (suggestion != null) {
suggestion.element = _createElement(
- protocol.ElementKind.CLASS,
- declaration.name,
- returnType: NO_RETURN_TYPE,
+ protocol.ElementKind.CLASS, declaration.name,
+ returnType: _NO_RETURN_TYPE,
isAbstract: declaration.isAbstract,
isDeprecated: isDeprecated);
}
@@ -225,16 +443,12 @@
@override
void declaredClassTypeAlias(ClassTypeAlias declaration) {
bool isDeprecated = _isDeprecated(declaration);
- CompletionSuggestion suggestion = _addSuggestion(
- declaration.name,
- NO_RETURN_TYPE,
- isDeprecated,
- DART_RELEVANCE_DEFAULT);
+ CompletionSuggestion suggestion = _addSuggestion(declaration.name,
+ _NO_RETURN_TYPE, isDeprecated, DART_RELEVANCE_DEFAULT);
if (suggestion != null) {
suggestion.element = _createElement(
- protocol.ElementKind.CLASS_TYPE_ALIAS,
- declaration.name,
- returnType: NO_RETURN_TYPE,
+ protocol.ElementKind.CLASS_TYPE_ALIAS, declaration.name,
+ returnType: _NO_RETURN_TYPE,
isAbstract: true,
isDeprecated: isDeprecated);
}
@@ -248,17 +462,12 @@
bool isDeprecated = _isDeprecated(fieldDecl) || _isDeprecated(varDecl);
TypeName type = fieldDecl.fields.type;
CompletionSuggestion suggestion = _addSuggestion(
- varDecl.name,
- type,
- isDeprecated,
- DART_RELEVANCE_LOCAL_FIELD,
+ varDecl.name, type, isDeprecated, DART_RELEVANCE_LOCAL_FIELD,
classDecl: fieldDecl.parent);
if (suggestion != null) {
suggestion.element = _createElement(
- protocol.ElementKind.FIELD,
- varDecl.name,
- returnType: type,
- isDeprecated: isDeprecated);
+ protocol.ElementKind.FIELD, varDecl.name,
+ returnType: type, isDeprecated: isDeprecated);
}
}
@@ -279,7 +488,7 @@
return;
}
kind = protocol.ElementKind.SETTER;
- returnType = NO_RETURN_TYPE;
+ returnType = _NO_RETURN_TYPE;
defaultRelevance = DART_RELEVANCE_LOCAL_ACCESSOR;
} else {
if (excludeVoidReturn && _isVoid(returnType)) {
@@ -289,22 +498,16 @@
defaultRelevance = DART_RELEVANCE_LOCAL_FUNCTION;
}
CompletionSuggestion suggestion = _addSuggestion(
- declaration.name,
- returnType,
- isDeprecated,
- defaultRelevance);
+ declaration.name, returnType, isDeprecated, defaultRelevance);
if (suggestion != null) {
FormalParameterList param = declaration.functionExpression.parameters;
- suggestion.element = _createElement(
- kind,
- declaration.name,
+ suggestion.element = _createElement(kind, declaration.name,
parameters: param != null ? param.toSource() : null,
returnType: returnType,
isDeprecated: isDeprecated);
if (kind == protocol.ElementKind.FUNCTION) {
_addParameterInfo(
- suggestion,
- declaration.functionExpression.parameters);
+ suggestion, declaration.functionExpression.parameters);
}
}
}
@@ -314,18 +517,12 @@
bool isDeprecated = _isDeprecated(declaration);
TypeName returnType = declaration.returnType;
CompletionSuggestion suggestion = _addSuggestion(
- declaration.name,
- returnType,
- isDeprecated,
- DART_RELEVANCE_DEFAULT);
+ declaration.name, returnType, isDeprecated, DART_RELEVANCE_DEFAULT);
if (suggestion != null) {
// TODO (danrubel) determine parameters and return type
suggestion.element = _createElement(
- protocol.ElementKind.FUNCTION_TYPE_ALIAS,
- declaration.name,
- returnType: returnType,
- isAbstract: true,
- isDeprecated: isDeprecated);
+ protocol.ElementKind.FUNCTION_TYPE_ALIAS, declaration.name,
+ returnType: returnType, isAbstract: true, isDeprecated: isDeprecated);
}
}
@@ -342,8 +539,8 @@
CompletionSuggestion suggestion =
_addSuggestion(name, type, false, DART_RELEVANCE_LOCAL_VARIABLE);
if (suggestion != null) {
- suggestion.element =
- _createElement(protocol.ElementKind.LOCAL_VARIABLE, name, returnType: type);
+ suggestion.element = _createElement(
+ protocol.ElementKind.LOCAL_VARIABLE, name, returnType: type);
}
}
@@ -365,7 +562,7 @@
return;
}
kind = protocol.ElementKind.SETTER;
- returnType = NO_RETURN_TYPE;
+ returnType = _NO_RETURN_TYPE;
defaultRelevance = DART_RELEVANCE_LOCAL_ACCESSOR;
} else {
if (excludeVoidReturn && _isVoid(returnType)) {
@@ -377,15 +574,10 @@
}
bool isDeprecated = _isDeprecated(declaration);
CompletionSuggestion suggestion = _addSuggestion(
- declaration.name,
- returnType,
- isDeprecated,
- defaultRelevance,
+ declaration.name, returnType, isDeprecated, defaultRelevance,
classDecl: declaration.parent);
if (suggestion != null) {
- suggestion.element = _createElement(
- kind,
- declaration.name,
+ suggestion.element = _createElement(kind, declaration.name,
parameters: parameters,
returnType: returnType,
isAbstract: declaration.isAbstract,
@@ -404,37 +596,33 @@
CompletionSuggestion suggestion =
_addSuggestion(name, type, false, DART_RELEVANCE_PARAMETER);
if (suggestion != null) {
- suggestion.element =
- _createElement(protocol.ElementKind.PARAMETER, name, returnType: type);
+ suggestion.element = _createElement(protocol.ElementKind.PARAMETER, name,
+ returnType: type);
}
}
@override
- void declaredTopLevelVar(VariableDeclarationList varList,
- VariableDeclaration varDecl) {
+ void declaredTopLevelVar(
+ VariableDeclarationList varList, VariableDeclaration varDecl) {
if (typesOnly) {
return;
}
bool isDeprecated = _isDeprecated(varList) || _isDeprecated(varDecl);
- CompletionSuggestion suggestion = _addSuggestion(
- varDecl.name,
- varList.type,
- isDeprecated,
- DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE);
+ CompletionSuggestion suggestion = _addSuggestion(varDecl.name, varList.type,
+ isDeprecated, DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE);
if (suggestion != null) {
suggestion.element = _createElement(
- protocol.ElementKind.TOP_LEVEL_VARIABLE,
- varDecl.name,
- returnType: varList.type,
- isDeprecated: isDeprecated);
+ protocol.ElementKind.TOP_LEVEL_VARIABLE, varDecl.name,
+ returnType: varList.type, isDeprecated: isDeprecated);
}
}
- void _addParameterInfo(CompletionSuggestion suggestion,
- FormalParameterList parameters) {
+ void _addParameterInfo(
+ CompletionSuggestion suggestion, FormalParameterList parameters) {
var paramList = parameters.parameters;
- suggestion.parameterNames =
- paramList.map((FormalParameter param) => param.identifier.name).toList();
+ suggestion.parameterNames = paramList
+ .map((FormalParameter param) => param.identifier.name)
+ .toList();
suggestion.parameterTypes = paramList.map((FormalParameter param) {
TypeName type = null;
if (param is DefaultFormalParameter) {
@@ -461,8 +649,8 @@
}).toList();
suggestion.requiredParameterCount = paramList.where(
(FormalParameter param) => param is! DefaultFormalParameter).length;
- suggestion.hasNamedParameters =
- paramList.any((FormalParameter param) => param.kind == ParameterKind.NAMED);
+ suggestion.hasNamedParameters = paramList
+ .any((FormalParameter param) => param.kind == ParameterKind.NAMED);
}
CompletionSuggestion _addSuggestion(SimpleIdentifier id, TypeName returnType,
@@ -472,12 +660,8 @@
if (completion != null && completion.length > 0 && completion != '_') {
CompletionSuggestion suggestion = new CompletionSuggestion(
CompletionSuggestionKind.INVOCATION,
- isDeprecated ? DART_RELEVANCE_LOW : defaultRelevance,
- completion,
- completion.length,
- 0,
- isDeprecated,
- false,
+ isDeprecated ? DART_RELEVANCE_LOW : defaultRelevance, completion,
+ completion.length, 0, isDeprecated, false,
returnType: _nameForType(returnType));
if (classDecl != null) {
SimpleIdentifier identifier = classDecl.name;
@@ -495,41 +679,6 @@
return null;
}
-
- /**
- * Create a new protocol Element for inclusion in a completion suggestion.
- */
- protocol.Element _createElement(protocol.ElementKind kind,
- SimpleIdentifier id, {String parameters, TypeName returnType, bool isAbstract:
- false, bool isDeprecated: false}) {
- String name = id.name;
- int flags = protocol.Element.makeFlags(
- isAbstract: isAbstract,
- isDeprecated: isDeprecated,
- isPrivate: Identifier.isPrivateName(name));
- return new protocol.Element(
- kind,
- name,
- flags,
- parameters: parameters,
- returnType: _nameForType(returnType));
- }
-
- /**
- * Return `true` if the @deprecated annotation is present
- */
- bool _isDeprecated(AnnotatedNode node) {
- if (node != null) {
- NodeList<Annotation> metadata = node.metadata;
- if (metadata != null) {
- return metadata.any((Annotation a) {
- return a.name is SimpleIdentifier && a.name.name == 'deprecated';
- });
- }
- }
- return false;
- }
-
bool _isVoid(TypeName returnType) {
if (returnType != null) {
Identifier id = returnType.name;
@@ -539,29 +688,4 @@
}
return false;
}
-
- /**
- * Return the name for the given type.
- */
- String _nameForType(TypeName type) {
- if (type == NO_RETURN_TYPE) {
- return null;
- }
- if (type == null) {
- return DYNAMIC;
- }
- Identifier id = type.name;
- if (id == null) {
- return DYNAMIC;
- }
- String name = id.name;
- if (name == null || name.length <= 0) {
- return DYNAMIC;
- }
- TypeArgumentList typeArgs = type.typeArguments;
- if (typeArgs != null) {
- //TODO (danrubel) include type arguments
- }
- return name;
- }
}
diff --git a/pkg/analysis_server/lib/src/services/completion/local_declaration_visitor.dart b/pkg/analysis_server/lib/src/services/completion/local_declaration_visitor.dart
index 7bfeaab..31d59fc 100644
--- a/pkg/analysis_server/lib/src/services/completion/local_declaration_visitor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/local_declaration_visitor.dart
@@ -10,17 +10,14 @@
/**
* `LocalDeclarationCollector` visits an [AstNode] and its parent recursively
- * along with any declarations in those nodes. Setting the [finished] flag
- * `true` will prevent further recursion.
+ * along with any declarations in those nodes. Consumers typically call [visit]
+ * which catches the exception thrown by [finished()].
*/
-abstract class LocalDeclarationVisitor extends GeneralizingAstVisitor<bool> {
-
- static final TypeName STACKTRACE_TYPE = new TypeName(
- new SimpleIdentifier(new StringToken(TokenType.IDENTIFIER, 'StackTrace', 0)),
- null);
+abstract class LocalDeclarationVisitor extends GeneralizingAstVisitor {
+ static final TypeName STACKTRACE_TYPE = new TypeName(new SimpleIdentifier(
+ new StringToken(TokenType.IDENTIFIER, 'StackTrace', 0)), null);
final int offset;
- bool finished = false;
LocalDeclarationVisitor(this.offset);
@@ -42,21 +39,43 @@
void declaredParam(SimpleIdentifier name, TypeName type);
- void declaredTopLevelVar(VariableDeclarationList varList,
- VariableDeclaration varDecl);
+ void declaredTopLevelVar(
+ VariableDeclarationList varList, VariableDeclaration varDecl);
+
+ /**
+ * Throw an exception indicating that [LocalDeclarationVisitor] should
+ * stop visiting. This is caught in [visit] which then exits normally.
+ */
+ void finished() {
+ throw new _LocalDeclarationVisitorFinished();
+ }
+
+ /**
+ * Visit the given [AstNode] and its parent recursively along with any
+ * declarations in those nodes. Return `true` if [finished] is called
+ * while visiting, else `false`.
+ */
+ bool visit(AstNode node) {
+ try {
+ node.accept(this);
+ return false;
+ } on _LocalDeclarationVisitorFinished {
+ return true;
+ }
+ }
@override
- bool visitBlock(Block node) {
- node.statements.forEach((Statement stmt) {
+ void visitBlock(Block node) {
+ for (Statement stmt in node.statements) {
if (stmt.offset < offset) {
if (stmt is VariableDeclarationStatement) {
VariableDeclarationList varList = stmt.variables;
if (varList != null) {
- varList.variables.forEach((VariableDeclaration varDecl) {
+ for (VariableDeclaration varDecl in varList.variables) {
if (varDecl.end < offset) {
declaredLocalVar(varDecl.name, varList.type);
}
- });
+ }
}
} else if (stmt is FunctionDeclarationStatement) {
FunctionDeclaration declaration = stmt.functionDeclaration;
@@ -71,12 +90,12 @@
}
}
}
- });
- return visitNode(node);
+ }
+ visitNode(node);
}
@override
- bool visitCatchClause(CatchClause node) {
+ void visitCatchClause(CatchClause node) {
SimpleIdentifier param = node.exceptionParameter;
if (param != null) {
declaredParam(param, node.exceptionType);
@@ -85,22 +104,22 @@
if (param != null) {
declaredParam(param, STACKTRACE_TYPE);
}
- return visitNode(node);
+ visitNode(node);
}
@override
- bool visitClassDeclaration(ClassDeclaration node) {
+ void visitClassDeclaration(ClassDeclaration node) {
_visitClassDeclarationMembers(node);
visitInheritedTypes(node, (ClassDeclaration classNode) {
_visitClassDeclarationMembers(classNode);
}, (String typeName) {
// ignored
});
- return visitNode(node);
+ visitNode(node);
}
@override
- bool visitCompilationUnit(CompilationUnit node) {
+ void visitCompilationUnit(CompilationUnit node) {
node.declarations.forEach((Declaration declaration) {
if (declaration is ClassDeclaration) {
declaredClass(declaration);
@@ -122,11 +141,10 @@
declaredFunctionTypeAlias(declaration);
}
});
- return finished;
}
@override
- bool visitForEachStatement(ForEachStatement node) {
+ void visitForEachStatement(ForEachStatement node) {
SimpleIdentifier id;
TypeName type;
DeclaredIdentifier loopVar = node.loopVariable;
@@ -138,72 +156,69 @@
type = null;
}
declaredLocalVar(id, type);
- return visitNode(node);
+ visitNode(node);
}
@override
- bool visitForStatement(ForStatement node) {
+ void visitForStatement(ForStatement node) {
VariableDeclarationList varList = node.variables;
if (varList != null) {
varList.variables.forEach((VariableDeclaration varDecl) {
declaredLocalVar(varDecl.name, varList.type);
});
}
- return visitNode(node);
+ visitNode(node);
}
@override
- bool visitFunctionDeclaration(FunctionDeclaration node) {
+ void visitFunctionDeclaration(FunctionDeclaration node) {
// declaredFunction is called by the compilation unit containing it
- return visitNode(node);
+ visitNode(node);
}
@override
- bool visitFunctionExpression(FunctionExpression node) {
+ void visitFunctionExpression(FunctionExpression node) {
_visitParamList(node.parameters);
- return visitNode(node);
+ visitNode(node);
}
@override
- bool visitInterpolationExpression(InterpolationExpression node) {
- return visitNode(node);
+ void visitInterpolationExpression(InterpolationExpression node) {
+ visitNode(node);
}
@override
- bool visitSwitchStatement(SwitchStatement node) {
+ void visitLabeledStatement(LabeledStatement node) {
+ for (Label label in node.labels) {
+ declaredLabel(label, false);
+ }
+ visitNode(node);
+ }
+
+ @override
+ void visitMethodDeclaration(MethodDeclaration node) {
+ _visitParamList(node.parameters);
+ visitNode(node);
+ }
+
+ @override
+ void visitNode(AstNode node) {
+ node.parent.accept(this);
+ }
+
+ @override
+ void visitStringInterpolation(StringInterpolation node) {
+ visitNode(node);
+ }
+
+ @override
+ void visitSwitchStatement(SwitchStatement node) {
for (SwitchMember member in node.members) {
for (Label label in member.labels) {
declaredLabel(label, true);
}
}
- return visitNode(node);
- }
-
- @override
- bool visitLabeledStatement(LabeledStatement node) {
- for (Label label in node.labels) {
- declaredLabel(label, false);
- }
- return visitNode(node);
- }
-
- @override
- bool visitMethodDeclaration(MethodDeclaration node) {
- _visitParamList(node.parameters);
- return visitNode(node);
- }
-
- @override
- bool visitNode(AstNode node) {
- if (finished) {
- return true;
- }
- return node.parent.accept(this);
- }
-
- @override
- bool visitStringInterpolation(StringInterpolation node) {
- return visitNode(node);
+ visitNode(node);
}
void _visitClassDeclarationMembers(ClassDeclaration node) {
@@ -241,3 +256,9 @@
}
}
}
+
+/**
+ * Internal exception used to indicate that [LocalDeclarationVisitor]
+ * should stop visiting.
+ */
+class _LocalDeclarationVisitorFinished {}
diff --git a/pkg/analysis_server/lib/src/services/completion/optype.dart b/pkg/analysis_server/lib/src/services/completion/optype.dart
index efaa8fd..197ffba 100644
--- a/pkg/analysis_server/lib/src/services/completion/optype.dart
+++ b/pkg/analysis_server/lib/src/services/completion/optype.dart
@@ -16,6 +16,11 @@
class OpType {
/**
+ * Indicates whether constructor suggestions should be included.
+ */
+ bool includeConstructorSuggestions = false;
+
+ /**
* Indicates whether invocation suggestions should be included.
*/
bool includeInvocationSuggestions = false;
@@ -53,8 +58,8 @@
*/
factory OpType.forCompletion(CompletionTarget target, int offset) {
OpType optype = new OpType._();
- target.containingNode.accept(
- new _OpTypeAstVisitor(optype, target.entity, offset));
+ target.containingNode
+ .accept(new _OpTypeAstVisitor(optype, target.entity, offset));
return optype;
}
@@ -63,20 +68,17 @@
/**
* Indicate whether only type names should be suggested
*/
- bool get includeOnlyTypeNameSuggestions =>
- includeTypeNameSuggestions &&
- !includeReturnValueSuggestions &&
- !includeVoidReturnSuggestions &&
- !includeInvocationSuggestions;
+ bool get includeOnlyTypeNameSuggestions => includeTypeNameSuggestions &&
+ !includeReturnValueSuggestions &&
+ !includeVoidReturnSuggestions &&
+ !includeInvocationSuggestions;
/**
* Indicate whether top level elements should be suggested
*/
- bool get includeTopLevelSuggestions =>
- includeReturnValueSuggestions ||
- includeTypeNameSuggestions ||
- includeVoidReturnSuggestions;
-
+ bool get includeTopLevelSuggestions => includeReturnValueSuggestions ||
+ includeTypeNameSuggestions ||
+ includeVoidReturnSuggestions;
}
class _OpTypeAstVisitor extends GeneralizingAstVisitor {
@@ -179,8 +181,7 @@
}
@override
- void visitClassMember(ClassMember node) {
- }
+ void visitClassMember(ClassMember node) {}
@override
void visitCommentReference(CommentReference node) {
@@ -350,7 +351,7 @@
@override
void visitInstanceCreationExpression(InstanceCreationExpression node) {
if (identical(entity, node.constructorName)) {
- optype.includeTypeNameSuggestions = true;
+ optype.includeConstructorSuggestions = true;
}
}
@@ -384,8 +385,7 @@
}
@override
- void visitMethodDeclaration(MethodDeclaration node) {
- }
+ void visitMethodDeclaration(MethodDeclaration node) {}
@override
void visitMethodInvocation(MethodInvocation node) {
@@ -513,8 +513,7 @@
}
@override
- void visitVariableDeclarationStatement(VariableDeclarationStatement node) {
- }
+ void visitVariableDeclarationStatement(VariableDeclarationStatement node) {}
@override
void visitWhileStatement(WhileStatement node) {
diff --git a/pkg/analysis_server/lib/src/services/completion/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/suggestion_builder.dart
index f951371..c226403 100644
--- a/pkg/analysis_server/lib/src/services/completion/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/suggestion_builder.dart
@@ -8,8 +8,8 @@
import 'dart:collection';
import 'package:analysis_server/src/protocol_server.dart' as protocol;
-import 'package:analysis_server/src/protocol_server.dart' hide Element,
- ElementKind;
+import 'package:analysis_server/src/protocol_server.dart'
+ hide Element, ElementKind;
import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart';
@@ -24,7 +24,6 @@
CompletionSuggestion createSuggestion(Element element,
{CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
int relevance: DART_RELEVANCE_DEFAULT}) {
-
String nameForType(DartType type) {
if (type == null) {
return DYNAMIC;
@@ -56,14 +55,9 @@
String completion = element.displayName;
bool isDeprecated = element.isDeprecated;
- CompletionSuggestion suggestion = new CompletionSuggestion(
- kind,
- isDeprecated ? DART_RELEVANCE_LOW : relevance,
- completion,
- completion.length,
- 0,
- isDeprecated,
- false);
+ CompletionSuggestion suggestion = new CompletionSuggestion(kind,
+ isDeprecated ? DART_RELEVANCE_LOW : relevance, completion,
+ completion.length, 0, isDeprecated, false);
suggestion.element = protocol.newElement_fromEngine(element);
Element enclosingElement = element.enclosingElement;
if (enclosingElement is ClassElement) {
@@ -71,15 +65,18 @@
}
suggestion.returnType = returnType;
if (element is ExecutableElement && element is! PropertyAccessorElement) {
- suggestion.parameterNames = element.parameters.map(
- (ParameterElement parameter) => parameter.name).toList();
- suggestion.parameterTypes = element.parameters.map(
- (ParameterElement parameter) => parameter.type.displayName).toList();
+ suggestion.parameterNames = element.parameters
+ .map((ParameterElement parameter) => parameter.name)
+ .toList();
+ suggestion.parameterTypes = element.parameters
+ .map((ParameterElement parameter) => parameter.type.displayName)
+ .toList();
suggestion.requiredParameterCount = element.parameters.where(
(ParameterElement parameter) =>
parameter.parameterKind == ParameterKind.REQUIRED).length;
suggestion.hasNamedParameters = element.parameters.any(
- (ParameterElement parameter) => parameter.parameterKind == ParameterKind.NAMED);
+ (ParameterElement parameter) =>
+ parameter.parameterKind == ParameterKind.NAMED);
}
return suggestion;
}
@@ -89,7 +86,6 @@
* that is defined in the given class.
*/
visitInheritedTypeNames(ClassDeclaration node, void inherited(String name)) {
-
void visit(TypeName type) {
if (type != null) {
Identifier id = type.name;
@@ -133,8 +129,8 @@
* For each class identifier in the hierarchy that is not defined locally,
* call the [imported] function.
*/
-void visitInheritedTypes(ClassDeclaration node, void
- local(ClassDeclaration classNode), void imported(String typeName)) {
+void visitInheritedTypes(ClassDeclaration node,
+ void local(ClassDeclaration classNode), void imported(String typeName)) {
CompilationUnit unit = node.getAncestor((p) => p is CompilationUnit);
List<ClassDeclaration> todo = new List<ClassDeclaration>();
todo.add(node);
@@ -205,7 +201,8 @@
!_completions.add(completion)) {
return;
}
- CompletionSuggestion suggestion = createSuggestion(element, kind: kind, relevance: relevance);
+ CompletionSuggestion suggestion =
+ createSuggestion(element, kind: kind, relevance: relevance);
if (suggestion != null) {
request.suggestions.add(suggestion);
}
@@ -272,8 +269,8 @@
}
}
String identifier = element.displayName;
- int alreadyGenerated =
- _completionTypesGenerated.putIfAbsent(identifier, () => _COMPLETION_TYPE_NONE);
+ int alreadyGenerated = _completionTypesGenerated.putIfAbsent(
+ identifier, () => _COMPLETION_TYPE_NONE);
if (element is MethodElement) {
// Anything shadows a method.
if (alreadyGenerated != _COMPLETION_TYPE_NONE) {
@@ -389,8 +386,8 @@
type = request.cache.objectClassElement.type;
}
if (type is InterfaceType) {
- return new InterfaceTypeSuggestionBuilder(
- request)._buildSuggestions(type, library);
+ return new InterfaceTypeSuggestionBuilder(request)._buildSuggestions(
+ type, library);
}
}
}
@@ -400,8 +397,8 @@
* the visible members in that library. Clients should call
* [LibraryElementSuggestionBuilder.suggestionsFor].
*/
-class LibraryElementSuggestionBuilder extends GeneralizingElementVisitor with
- ElementSuggestionBuilder {
+class LibraryElementSuggestionBuilder extends GeneralizingElementVisitor
+ with ElementSuggestionBuilder {
final DartCompletionRequest request;
final CompletionSuggestionKind kind;
@@ -452,8 +449,8 @@
* This class visits elements in a class and provides suggestions based upon
* the visible named constructors in that class.
*/
-class NamedConstructorSuggestionBuilder extends GeneralizingElementVisitor with
- ElementSuggestionBuilder implements SuggestionBuilder {
+class NamedConstructorSuggestionBuilder extends GeneralizingElementVisitor
+ with ElementSuggestionBuilder implements SuggestionBuilder {
final DartCompletionRequest request;
NamedConstructorSuggestionBuilder(this.request);
diff --git a/pkg/analysis_server/lib/src/services/correction/assist.dart b/pkg/analysis_server/lib/src/services/correction/assist.dart
index e9a688e..5054644 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist.dart
@@ -9,7 +9,6 @@
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* Computes [Assist]s at the given location.
*
@@ -23,7 +22,6 @@
return processor.compute();
}
-
/**
* A description of a single proposed assist.
*/
@@ -39,7 +37,6 @@
}
}
-
/**
* An enumeration of possible quick assist kinds.
*/
@@ -49,19 +46,15 @@
static const ADD_TYPE_ANNOTATION =
const AssistKind('ADD_TYPE_ANNOTATION', 30, "Add type annotation");
static const ASSIGN_TO_LOCAL_VARIABLE = const AssistKind(
- 'ASSIGN_TO_LOCAL_VARIABLE',
- 30,
- "Assign value to new local variable");
- static const CONVERT_INTO_BLOCK_BODY =
- const AssistKind('CONVERT_INTO_BLOCK_BODY', 30, "Convert into block body");
+ 'ASSIGN_TO_LOCAL_VARIABLE', 30, "Assign value to new local variable");
+ static const CONVERT_INTO_BLOCK_BODY = const AssistKind(
+ 'CONVERT_INTO_BLOCK_BODY', 30, "Convert into block body");
static const CONVERT_INTO_EXPRESSION_BODY = const AssistKind(
- 'CONVERT_INTO_EXPRESSION_BODY',
- 30,
- "Convert into expression body");
+ 'CONVERT_INTO_EXPRESSION_BODY', 30, "Convert into expression body");
static const CONVERT_INTO_IS_NOT =
const AssistKind('CONVERT_INTO_IS_NOT', 30, "Convert into is!");
- static const CONVERT_INTO_IS_NOT_EMPTY =
- const AssistKind('CONVERT_INTO_IS_NOT_EMPTY', 30, "Convert into 'isNotEmpty'");
+ static const CONVERT_INTO_IS_NOT_EMPTY = const AssistKind(
+ 'CONVERT_INTO_IS_NOT_EMPTY', 30, "Convert into 'isNotEmpty'");
static const EXCHANGE_OPERANDS =
const AssistKind('EXCHANGE_OPERANDS', 30, "Exchange operands");
static const EXTRACT_CLASS =
@@ -69,53 +62,41 @@
static const IMPORT_ADD_SHOW =
const AssistKind('IMPORT_ADD_SHOW', 30, "Add explicit 'show' combinator");
static const INTRODUCE_LOCAL_CAST_TYPE = const AssistKind(
- 'INTRODUCE_LOCAL_CAST_TYPE',
- 30,
- "Introduce new local with tested type");
+ 'INTRODUCE_LOCAL_CAST_TYPE', 30, "Introduce new local with tested type");
static const INVERT_IF_STATEMENT =
const AssistKind('INVERT_IF_STATEMENT', 30, "Invert 'if' statement");
- static const JOIN_IF_WITH_INNER = const AssistKind(
- 'JOIN_IF_WITH_INNER',
- 30,
+ static const JOIN_IF_WITH_INNER = const AssistKind('JOIN_IF_WITH_INNER', 30,
"Join 'if' statement with inner 'if' statement");
- static const JOIN_IF_WITH_OUTER = const AssistKind(
- 'JOIN_IF_WITH_OUTER',
- 30,
+ static const JOIN_IF_WITH_OUTER = const AssistKind('JOIN_IF_WITH_OUTER', 30,
"Join 'if' statement with outer 'if' statement");
- static const JOIN_VARIABLE_DECLARATION =
- const AssistKind('JOIN_VARIABLE_DECLARATION', 30, "Join variable declaration");
+ static const JOIN_VARIABLE_DECLARATION = const AssistKind(
+ 'JOIN_VARIABLE_DECLARATION', 30, "Join variable declaration");
static const REMOVE_TYPE_ANNOTATION =
const AssistKind('REMOVE_TYPE_ANNOTATION', 29, "Remove type annotation");
static const REPLACE_CONDITIONAL_WITH_IF_ELSE = const AssistKind(
- 'REPLACE_CONDITIONAL_WITH_IF_ELSE',
- 30,
+ 'REPLACE_CONDITIONAL_WITH_IF_ELSE', 30,
"Replace conditional with 'if-else'");
static const REPLACE_IF_ELSE_WITH_CONDITIONAL = const AssistKind(
- 'REPLACE_IF_ELSE_WITH_CONDITIONAL',
- 30,
+ 'REPLACE_IF_ELSE_WITH_CONDITIONAL', 30,
"Replace 'if-else' with conditional ('c ? x : y')");
static const SPLIT_AND_CONDITION =
const AssistKind('SPLIT_AND_CONDITION', 30, "Split && condition");
static const SPLIT_VARIABLE_DECLARATION = const AssistKind(
- 'SPLIT_VARIABLE_DECLARATION',
- 30,
- "Split variable declaration");
+ 'SPLIT_VARIABLE_DECLARATION', 30, "Split variable declaration");
static const SURROUND_WITH_BLOCK =
const AssistKind('SURROUND_WITH_BLOCK', 30, "Surround with block");
- static const SURROUND_WITH_DO_WHILE =
- const AssistKind('SURROUND_WITH_DO_WHILE', 30, "Surround with 'do-while'");
+ static const SURROUND_WITH_DO_WHILE = const AssistKind(
+ 'SURROUND_WITH_DO_WHILE', 30, "Surround with 'do-while'");
static const SURROUND_WITH_FOR =
const AssistKind('SURROUND_WITH_FOR', 30, "Surround with 'for'");
static const SURROUND_WITH_FOR_IN =
const AssistKind('SURROUND_WITH_FOR_IN', 30, "Surround with 'for-in'");
static const SURROUND_WITH_IF =
const AssistKind('SURROUND_WITH_IF', 30, "Surround with 'if'");
- static const SURROUND_WITH_TRY_CATCH =
- const AssistKind('SURROUND_WITH_TRY_CATCH', 30, "Surround with 'try-catch'");
+ static const SURROUND_WITH_TRY_CATCH = const AssistKind(
+ 'SURROUND_WITH_TRY_CATCH', 30, "Surround with 'try-catch'");
static const SURROUND_WITH_TRY_FINALLY = const AssistKind(
- 'SURROUND_WITH_TRY_FINALLY',
- 30,
- "Surround with 'try-finally'");
+ 'SURROUND_WITH_TRY_FINALLY', 30, "Surround with 'try-finally'");
static const SURROUND_WITH_WHILE =
const AssistKind('SURROUND_WITH_WHILE', 30, "Surround with 'while'");
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index bb6726d..525a198 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -22,11 +22,8 @@
import 'package:analyzer/src/generated/source.dart';
import 'package:path/path.dart';
-
-
typedef _SimpleIdentifierVisitor(SimpleIdentifier node);
-
/**
* The computer for Dart assists.
*/
@@ -44,8 +41,8 @@
String unitLibraryFolder;
final List<Assist> assists = <Assist>[];
- final Map<String, LinkedEditGroup> linkedPositionGroups = <String,
- LinkedEditGroup>{};
+ final Map<String, LinkedEditGroup> linkedPositionGroups =
+ <String, LinkedEditGroup>{};
Position exitPosition = null;
int selectionEnd;
@@ -54,8 +51,8 @@
SourceChange change = new SourceChange('<message>');
- AssistProcessor(this.source, this.file, this.unit,
- this.selectionOffset, this.selectionLength) {
+ AssistProcessor(this.source, this.file, this.unit, this.selectionOffset,
+ this.selectionLength) {
unitElement = unit.element;
context = unitElement.context;
unitLibraryElement = unitElement.library;
@@ -148,8 +145,8 @@
}
// prepare Change
change.message = formatList(kind.message, args);
- linkedPositionGroups.values.forEach(
- (group) => change.addLinkedEditGroup(group));
+ linkedPositionGroups.values
+ .forEach((group) => change.addLinkedEditGroup(group));
change.selection = exitPosition;
// add Assist
Assist assist = new Assist(kind, change);
@@ -173,46 +170,6 @@
doSourceChange_addElementEdit(change, unitElement, edit);
}
- void _addLibraryImports(Set<LibraryElement> libraries) {
- LibraryElement libElement = unitLibraryElement;
- CompilationUnitElement libUnitElement = libElement.definingCompilationUnit;
- CompilationUnit libUnit = libUnitElement.node;
- // prepare new import location
- int offset = 0;
- String prefix;
- String suffix;
- {
- // if no directives
- prefix = '';
- suffix = eol;
- CorrectionUtils libraryUtils = new CorrectionUtils(libUnit);
- // after last directive in library
- for (Directive directive in libUnit.directives) {
- if (directive is LibraryDirective || directive is ImportDirective) {
- offset = directive.end;
- prefix = eol;
- suffix = '';
- }
- }
- // if still at the beginning of the file, skip shebang and line comments
- if (offset == 0) {
- CorrectionUtils_InsertDesc desc = libraryUtils.getInsertDescTop();
- offset = desc.offset;
- prefix = desc.prefix;
- suffix = desc.suffix + eol;
- }
- }
- // insert imports
- for (LibraryElement library in libraries) {
- String importPath = getLibrarySourceUri(libElement, library.source);
- String importCode = "${prefix}import '$importPath';$suffix";
- doSourceChange_addElementEdit(
- change,
- unitLibraryElement,
- new SourceEdit(offset, 0, importCode));
- }
- }
-
void _addProposal_addTypeAnnotation_DeclaredIdentifier() {
DeclaredIdentifier declaredIdentifier =
node.getAncestor((n) => n is DeclaredIdentifier);
@@ -241,7 +198,7 @@
_configureTargetLocation(node);
Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
typeSource = utils.getTypeSource(type, librariesToImport);
- _addLibraryImports(librariesToImport);
+ addLibraryImports(change, unitLibraryElement, librariesToImport);
} else {
_coverageMarker();
return;
@@ -296,7 +253,7 @@
_configureTargetLocation(node);
Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
typeSource = utils.getTypeSource(type, librariesToImport);
- _addLibraryImports(librariesToImport);
+ addLibraryImports(change, unitLibraryElement, librariesToImport);
} else {
_coverageMarker();
return;
@@ -343,7 +300,7 @@
_configureTargetLocation(node);
Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
typeSource = utils.getTypeSource(type, librariesToImport);
- _addLibraryImports(librariesToImport);
+ addLibraryImports(change, unitLibraryElement, librariesToImport);
}
// add edit
_addInsertEdit(name.offset, '$typeSource ');
@@ -362,6 +319,11 @@
// prepare expression
Expression expression = expressionStatement.expression;
int offset = expression.offset;
+ // ignore if in arguments
+ if (node.getAncestor((node) => node is ArgumentList) != null) {
+ _coverageMarker();
+ return;
+ }
// ignore if already assignment
if (expression is AssignmentExpression) {
_coverageMarker();
@@ -625,9 +587,7 @@
BinaryExpression binaryExpression = node as BinaryExpression;
// prepare operator position
if (!_isOperatorSelected(
- binaryExpression,
- selectionOffset,
- selectionLength)) {
+ binaryExpression, selectionOffset, selectionLength)) {
_coverageMarker();
return;
}
@@ -864,8 +824,7 @@
utils.getLinesRangeStatements(innerThenStatements);
String oldSource = utils.getRangeText(lineRanges);
String newSource = utils.indentSourceLeftRight(oldSource, false);
- _addReplaceEdit(
- rangeNode(targetIfStatement),
+ _addReplaceEdit(rangeNode(targetIfStatement),
'if ($condition) {$eol$newSource$prefix}');
}
// done
@@ -927,8 +886,7 @@
utils.getLinesRangeStatements(targetThenStatements);
String oldSource = utils.getRangeText(lineRanges);
String newSource = utils.indentSourceLeftRight(oldSource, false);
- _addReplaceEdit(
- rangeNode(outerIfStatement),
+ _addReplaceEdit(rangeNode(outerIfStatement),
'if ($condition) {$eol$newSource$prefix}');
}
// done
@@ -940,8 +898,7 @@
if (node is SimpleIdentifier &&
node.parent is AssignmentExpression &&
(node.parent as AssignmentExpression).leftHandSide == node &&
- node.parent.parent is ExpressionStatement) {
- } else {
+ node.parent.parent is ExpressionStatement) {} else {
_coverageMarker();
return;
}
@@ -963,8 +920,7 @@
declNode.parent is VariableDeclaration &&
(declNode.parent as VariableDeclaration).name == declNode &&
declNode.parent.parent is VariableDeclarationList &&
- declNode.parent.parent.parent is VariableDeclarationStatement) {
- } else {
+ declNode.parent.parent.parent is VariableDeclarationStatement) {} else {
_coverageMarker();
return;
}
@@ -986,8 +942,7 @@
ExpressionStatement assignStatement =
node.parent.parent as ExpressionStatement;
if (assignStatement.parent is Block &&
- assignStatement.parent == declStatement.parent) {
- } else {
+ assignStatement.parent == declStatement.parent) {} else {
_coverageMarker();
return;
}
@@ -995,8 +950,7 @@
// check that "declaration" and "assignment" statements are adjacent
List<Statement> statements = block.statements;
if (statements.indexOf(assignStatement) ==
- statements.indexOf(declStatement) + 1) {
- } else {
+ statements.indexOf(declStatement) + 1) {} else {
_coverageMarker();
return;
}
@@ -1013,8 +967,7 @@
// prepare enclosing VariableDeclarationList
VariableDeclarationList declList =
node.getAncestor((node) => node is VariableDeclarationList);
- if (declList != null && declList.variables.length == 1) {
- } else {
+ if (declList != null && declList.variables.length == 1) {} else {
_coverageMarker();
return;
}
@@ -1026,8 +979,7 @@
}
// prepare VariableDeclarationStatement in Block
if (declList.parent is VariableDeclarationStatement &&
- declList.parent.parent is Block) {
- } else {
+ declList.parent.parent is Block) {} else {
_coverageMarker();
return;
}
@@ -1040,23 +992,20 @@
{
// declaration should not be last Statement
int declIndex = statements.indexOf(declStatement);
- if (declIndex < statements.length - 1) {
- } else {
+ if (declIndex < statements.length - 1) {} else {
_coverageMarker();
return;
}
// next Statement should be assignment
Statement assignStatement = statements[declIndex + 1];
- if (assignStatement is ExpressionStatement) {
- } else {
+ if (assignStatement is ExpressionStatement) {} else {
_coverageMarker();
return;
}
ExpressionStatement expressionStatement =
assignStatement as ExpressionStatement;
// expression should be assignment
- if (expressionStatement.expression is AssignmentExpression) {
- } else {
+ if (expressionStatement.expression is AssignmentExpression) {} else {
_coverageMarker();
return;
}
@@ -1139,8 +1088,8 @@
bool inVariable = false;
if (statement is VariableDeclarationStatement) {
VariableDeclarationStatement variableStatement = statement;
- for (VariableDeclaration variable in
- variableStatement.variables.variables) {
+ for (VariableDeclaration variable
+ in variableStatement.variables.variables) {
if (variable.initializer is ConditionalExpression) {
conditional = variable.initializer as ConditionalExpression;
inVariable = true;
@@ -1244,8 +1193,7 @@
String theSrc = _getNodeText(thenStatement.expression);
String elseSrc = _getNodeText(elseStatement.expression);
_addReplaceEdit(
- rangeNode(ifStatement),
- 'return $conditionSrc ? $theSrc : $elseSrc;');
+ rangeNode(ifStatement), 'return $conditionSrc ? $theSrc : $elseSrc;');
}
// assignments -> v = Conditional;
if (thenStatement is ExpressionStatement &&
@@ -1264,8 +1212,7 @@
String conditionSrc = _getNodeText(ifStatement.condition);
String theSrc = _getNodeText(thenAssignment.rightHandSide);
String elseSrc = _getNodeText(elseAssignment.rightHandSide);
- _addReplaceEdit(
- rangeNode(ifStatement),
+ _addReplaceEdit(rangeNode(ifStatement),
'$thenTarget = $conditionSrc ? $theSrc : $elseSrc;');
}
}
@@ -1283,9 +1230,7 @@
BinaryExpression binaryExpression = node as BinaryExpression;
// prepare operator position
if (!_isOperatorSelected(
- binaryExpression,
- selectionOffset,
- selectionLength)) {
+ binaryExpression, selectionOffset, selectionLength)) {
_coverageMarker();
return;
}
@@ -1369,8 +1314,7 @@
// prepare DartVariableStatement, should be part of Block
VariableDeclarationStatement statement =
node.getAncestor((node) => node is VariableDeclarationStatement);
- if (statement != null && statement.parent is Block) {
- } else {
+ if (statement != null && statement.parent is Block) {} else {
_coverageMarker();
return;
}
@@ -1744,15 +1688,14 @@
*
* https://code.google.com/p/dart/issues/detail?id=19912
*/
- static void _coverageMarker() {
- }
+ static void _coverageMarker() {}
/**
* Returns `true` if the selection covers an operator of the given
* [BinaryExpression].
*/
- static bool _isOperatorSelected(BinaryExpression binaryExpression, int offset,
- int length) {
+ static bool _isOperatorSelected(
+ BinaryExpression binaryExpression, int offset, int length) {
AstNode left = binaryExpression.leftOperand;
AstNode right = binaryExpression.rightOperand;
// between the nodes
@@ -1788,7 +1731,6 @@
}
}
-
class _SimpleIdentifierRecursiveAstVisitor extends RecursiveAstVisitor {
final _SimpleIdentifierVisitor visitor;
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index 329e9cf..0bca27d 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -9,7 +9,6 @@
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/error.dart';
-
/**
* Computes [Fix]s for the given [AnalysisError].
*
@@ -24,7 +23,6 @@
return fixes;
}
-
/**
* A description of a single proposed fix for some problem.
*/
@@ -40,32 +38,26 @@
}
}
-
/**
* An enumeration of possible quick fix kinds.
*/
class FixKind {
static const ADD_ASYNC =
const FixKind('ADD_ASYNC', 50, "Add 'async' modifier");
- static const ADD_PACKAGE_DEPENDENCY =
- const FixKind('ADD_PACKAGE_DEPENDENCY', 50, "Add dependency on package '{0}'");
+ static const ADD_PACKAGE_DEPENDENCY = const FixKind(
+ 'ADD_PACKAGE_DEPENDENCY', 50, "Add dependency on package '{0}'");
static const ADD_SUPER_CONSTRUCTOR_INVOCATION = const FixKind(
- 'ADD_SUPER_CONSTRUCTOR_INVOCATION',
- 50,
+ 'ADD_SUPER_CONSTRUCTOR_INVOCATION', 50,
"Add super constructor {0} invocation");
static const CHANGE_TO = const FixKind('CHANGE_TO', 49, "Change to '{0}'");
static const CHANGE_TO_STATIC_ACCESS = const FixKind(
- 'CHANGE_TO_STATIC_ACCESS',
- 50,
- "Change access to static using '{0}'");
+ 'CHANGE_TO_STATIC_ACCESS', 50, "Change access to static using '{0}'");
static const CREATE_CLASS =
const FixKind('CREATE_CLASS', 50, "Create class '{0}'");
static const CREATE_CONSTRUCTOR =
const FixKind('CREATE_CONSTRUCTOR', 50, "Create constructor '{0}'");
static const CREATE_CONSTRUCTOR_SUPER = const FixKind(
- 'CREATE_CONSTRUCTOR_SUPER',
- 50,
- "Create constructor to call {0}");
+ 'CREATE_CONSTRUCTOR_SUPER', 50, "Create constructor to call {0}");
static const CREATE_FIELD =
const FixKind('CREATE_FIELD', 51, "Create field '{0}'");
static const CREATE_FILE =
@@ -79,15 +71,11 @@
static const CREATE_METHOD =
const FixKind('CREATE_METHOD', 50, "Create method '{0}'");
static const CREATE_MISSING_OVERRIDES = const FixKind(
- 'CREATE_MISSING_OVERRIDES',
- 50,
- "Create {0} missing override(s)");
- static const CREATE_NO_SUCH_METHOD =
- const FixKind('CREATE_NO_SUCH_METHOD', 51, "Create 'noSuchMethod' method");
- static const IMPORT_LIBRARY_PREFIX = const FixKind(
- 'IMPORT_LIBRARY_PREFIX',
- 51,
- "Use imported library '{0}' with prefix '{1}'");
+ 'CREATE_MISSING_OVERRIDES', 50, "Create {0} missing override(s)");
+ static const CREATE_NO_SUCH_METHOD = const FixKind(
+ 'CREATE_NO_SUCH_METHOD', 51, "Create 'noSuchMethod' method");
+ static const IMPORT_LIBRARY_PREFIX = const FixKind('IMPORT_LIBRARY_PREFIX',
+ 51, "Use imported library '{0}' with prefix '{1}'");
static const IMPORT_LIBRARY_PROJECT =
const FixKind('IMPORT_LIBRARY_PROJECT', 49, "Import library '{0}'");
static const IMPORT_LIBRARY_SDK =
@@ -99,29 +87,24 @@
static const MAKE_CLASS_ABSTRACT =
const FixKind('MAKE_CLASS_ABSTRACT', 50, "Make class '{0}' abstract");
static const REMOVE_PARAMETERS_IN_GETTER_DECLARATION = const FixKind(
- 'REMOVE_PARAMETERS_IN_GETTER_DECLARATION',
- 50,
+ 'REMOVE_PARAMETERS_IN_GETTER_DECLARATION', 50,
"Remove parameters in getter declaration");
static const REMOVE_PARENTHESIS_IN_GETTER_INVOCATION = const FixKind(
- 'REMOVE_PARENTHESIS_IN_GETTER_INVOCATION',
- 50,
+ 'REMOVE_PARENTHESIS_IN_GETTER_INVOCATION', 50,
"Remove parentheses in getter invocation");
static const REMOVE_UNNECASSARY_CAST =
const FixKind('REMOVE_UNNECASSARY_CAST', 50, "Remove unnecessary cast");
static const REMOVE_UNUSED_IMPORT =
const FixKind('REMOVE_UNUSED_IMPORT', 50, "Remove unused import");
static const REPLACE_BOOLEAN_WITH_BOOL = const FixKind(
- 'REPLACE_BOOLEAN_WITH_BOOL',
- 50,
- "Replace 'boolean' with 'bool'");
+ 'REPLACE_BOOLEAN_WITH_BOOL', 50, "Replace 'boolean' with 'bool'");
static const REPLACE_IMPORT_URI =
const FixKind('REPLACE_IMPORT_URI', 50, "Replace with '{0}'");
- static const REPLACE_VAR_WITH_DYNAMIC =
- const FixKind('REPLACE_VAR_WITH_DYNAMIC', 50, "Replace 'var' with 'dynamic'");
+ static const REPLACE_VAR_WITH_DYNAMIC = const FixKind(
+ 'REPLACE_VAR_WITH_DYNAMIC', 50, "Replace 'var' with 'dynamic'");
static const USE_CONST = const FixKind('USE_CONST', 50, "Change to constant");
static const USE_EFFECTIVE_INTEGER_DIVISION = const FixKind(
- 'USE_EFFECTIVE_INTEGER_DIVISION',
- 50,
+ 'USE_EFFECTIVE_INTEGER_DIVISION', 50,
"Use effective integer division ~/");
static const USE_EQ_EQ_NULL =
const FixKind('USE_EQ_EQ_NULL', 50, "Use == null instead of 'is Null'");
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 5858ae0..d7939f2 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -6,15 +6,17 @@
import 'dart:collection';
-import 'package:analysis_server/src/protocol.dart' hide AnalysisError, Element,
- ElementKind;
+import 'package:analysis_server/src/protocol.dart'
+ hide AnalysisError, Element, ElementKind;
+import 'package:analysis_server/src/protocol_server.dart'
+ show doSourceChange_addElementEdit, doSourceChange_addSourceEdit;
import 'package:analysis_server/src/services/correction/fix.dart';
import 'package:analysis_server/src/services/correction/levenshtein.dart';
import 'package:analysis_server/src/services/correction/name_suggestion.dart';
import 'package:analysis_server/src/services/correction/namespace.dart';
import 'package:analysis_server/src/services/correction/source_buffer.dart';
-import 'package:analysis_server/src/services/correction/source_range.dart' as
- rf;
+import 'package:analysis_server/src/services/correction/source_range.dart'
+ as rf;
import 'package:analysis_server/src/services/correction/strings.dart';
import 'package:analysis_server/src/services/correction/util.dart';
import 'package:analysis_server/src/services/search/hierarchy.dart';
@@ -30,13 +32,11 @@
import 'package:analyzer/src/generated/utilities_dart.dart';
import 'package:path/path.dart';
-
/**
* A predicate is a one-argument function that returns a boolean value.
*/
typedef bool Predicate<E>(E argument);
-
/**
* The computer for Dart fixes.
*/
@@ -54,11 +54,13 @@
String unitLibraryFile;
String unitLibraryFolder;
- final List<SourceEdit> edits = <SourceEdit>[];
+ final List<Fix> fixes = <Fix>[];
+
+ SourceChange change = new SourceChange('<message>');
final LinkedHashMap<String, LinkedEditGroup> linkedPositionGroups =
new LinkedHashMap<String, LinkedEditGroup>();
Position exitPosition = null;
- final List<Fix> fixes = <Fix>[];
+ Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
CorrectionUtils utils;
int errorOffset;
@@ -91,9 +93,8 @@
errorLength = error.length;
errorEnd = errorOffset + errorLength;
node = new NodeLocator.con1(errorOffset).searchWithin(unit);
- coveredNode = new NodeLocator.con2(
- errorOffset,
- errorOffset + errorLength).searchWithin(unit);
+ coveredNode = new NodeLocator.con2(errorOffset, errorOffset + errorLength)
+ .searchWithin(unit);
// analyze ErrorCode
ErrorCode errorCode = error.errorCode;
if (errorCode == StaticWarningCode.UNDEFINED_CLASS_BOOLEAN) {
@@ -169,7 +170,7 @@
_addFix_createConstructor_named();
}
if (errorCode ==
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE ||
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE ||
errorCode ==
StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO ||
errorCode ==
@@ -243,28 +244,39 @@
return fixes;
}
- void _addFix(FixKind kind, List args, {String file, int fileStamp}) {
- if (file == null || fileStamp == null) {
- file = this.file;
- fileStamp = this.fileStamp;
+ /**
+ * Adds a new [SourceEdit] to [change].
+ */
+ void _addEdit(Element target, SourceEdit edit) {
+ if (target == null) {
+ target = unitElement;
}
- // prepare SourceFileEdit
- SourceFileEdit fileEdit = new SourceFileEdit(file, fileStamp);
- fileEdit.addAll(edits);
- // prepare Change
- String message = formatList(kind.message, args);
- SourceChange change = new SourceChange(message);
- change.addFileEdit(fileEdit);
- linkedPositionGroups.values.forEach(
- (group) => change.addLinkedEditGroup(group));
+ Source source = target.source;
+ if (source.isInSystemLibrary) {
+ return;
+ }
+ doSourceChange_addElementEdit(change, target, edit);
+ }
+
+ void _addFix(FixKind kind, List args) {
+ if (change.edits.isEmpty) {
+ return;
+ }
+ // configure Change
+ change.message = formatList(kind.message, args);
+ linkedPositionGroups.values
+ .forEach((group) => change.addLinkedEditGroup(group));
change.selection = exitPosition;
+ // add imports
+ addLibraryImports(change, unitLibraryElement, librariesToImport);
// add Fix
Fix fix = new Fix(kind, change);
fixes.add(fix);
// clear
- edits.clear();
+ change = new SourceChange('<message>');
linkedPositionGroups.clear();
exitPosition = null;
+ librariesToImport.clear();
}
/**
@@ -316,7 +328,7 @@
sb.append('}');
}
// insert source
- _insertBuilder(sb);
+ _insertBuilder(sb, unitElement);
_addLinkedPosition('NAME', sb, rf.rangeNode(node));
// add proposal
_addFix(FixKind.CREATE_CLASS, [name]);
@@ -375,18 +387,14 @@
sb.append(indent);
sb.append(targetElement.name);
_addFix_undefinedMethod_create_parameters(
- sb,
- instanceCreation.argumentList);
+ sb, instanceCreation.argumentList);
sb.append(') {$eol$indent}');
sb.append(targetLocation.suffix);
}
// insert source
- _insertBuilder(sb);
+ _insertBuilder(sb, targetElement);
// add proposal
- _addFixToElement(
- FixKind.CREATE_CONSTRUCTOR,
- [constructorName],
- targetElement);
+ _addFix(FixKind.CREATE_CONSTRUCTOR, [constructorName]);
}
void _addFix_createConstructor_named() {
@@ -440,21 +448,17 @@
sb.endPosition();
}
_addFix_undefinedMethod_create_parameters(
- sb,
- instanceCreation.argumentList);
+ sb, instanceCreation.argumentList);
sb.append(') {$eol$indent}');
sb.append(targetLocation.suffix);
}
// insert source
- _insertBuilder(sb);
+ _insertBuilder(sb, targetElement);
if (targetFile == file) {
_addLinkedPosition('NAME', sb, rf.rangeNode(name));
}
// add proposal
- _addFixToElement(
- FixKind.CREATE_CONSTRUCTOR,
- [constructorName],
- targetElement);
+ _addFix(FixKind.CREATE_CONSTRUCTOR, [constructorName]);
}
void _addFix_createConstructorSuperExplicit() {
@@ -517,7 +521,7 @@
}
sb.append(')');
// insert proposal
- _insertBuilder(sb);
+ _insertBuilder(sb, unitElement);
// add proposal
String proposalName = _getConstructorProposalName(superConstructor);
_addFix(FixKind.ADD_SUPER_CONSTRUCTOR_INVOCATION, [proposalName]);
@@ -589,7 +593,7 @@
sb.append(');');
sb.append(targetLocation.suffix);
}
- _insertBuilder(sb);
+ _insertBuilder(sb, unitElement);
// add proposal
String proposalName = _getConstructorProposalName(superConstructor);
_addFix(FixKind.CREATE_CONSTRUCTOR_SUPER, [proposalName]);
@@ -660,13 +664,13 @@
sb.append(targetLocation.suffix);
}
// insert source
- _insertBuilder(sb);
+ _insertBuilder(sb, targetClassElement);
// add linked positions
if (targetFile == file) {
_addLinkedPosition('NAME', sb, rf.rangeNode(node));
}
// add proposal
- _addFixToElement(FixKind.CREATE_FIELD, [name], targetClassElement);
+ _addFix(FixKind.CREATE_FIELD, [name]);
}
void _addFix_createFunction_forFunctionType() {
@@ -786,13 +790,13 @@
sb.append(targetLocation.suffix);
}
// insert source
- _insertBuilder(sb);
+ _insertBuilder(sb, targetClassElement);
// add linked positions
if (targetFile == file) {
_addLinkedPosition('NAME', sb, rf.rangeNode(node));
}
// add proposal
- _addFixToElement(FixKind.CREATE_GETTER, [name], targetClassElement);
+ _addFix(FixKind.CREATE_GETTER, [name]);
}
void _addFix_createImportUri() {
@@ -804,9 +808,11 @@
if (isAbsolute(file)) {
String libName = removeEnd(source.shortName, '.dart');
libName = libName.replaceAll('_', '.');
- edits.add(new SourceEdit(0, 0, 'library $libName;$eol$eol'));
+ SourceEdit edit = new SourceEdit(0, 0, 'library $libName;$eol$eol');
+ change.addEdit(file, -1, edit);
+ doSourceChange_addSourceEdit(change, context, source, edit);
}
- _addFix(FixKind.CREATE_FILE, [file], file: file, fileStamp: -1);
+ _addFix(FixKind.CREATE_FILE, [file]);
}
}
}
@@ -838,7 +844,9 @@
DartType type = _inferUndefinedExpressionType(node);
if (!(type == null ||
type is InterfaceType ||
- type is FunctionType && type.element != null && !type.element.isSynthetic)) {
+ type is FunctionType &&
+ type.element != null &&
+ !type.element.isSynthetic)) {
return;
}
_appendType(sb, type, groupId: 'TYPE', orVar: true);
@@ -853,7 +861,7 @@
sb.append(prefix);
}
// insert source
- _insertBuilder(sb);
+ _insertBuilder(sb, unitElement);
// add linked positions
_addLinkedPosition('NAME', sb, rf.rangeNode(node));
// add proposal
@@ -913,7 +921,7 @@
}
// add proposal
exitPosition = new Position(file, insertOffset);
- _insertBuilder(sb);
+ _insertBuilder(sb, unitElement);
_addFix(FixKind.CREATE_MISSING_OVERRIDES, [numElements]);
}
@@ -989,7 +997,7 @@
sb.append(eol);
}
// done
- _insertBuilder(sb);
+ _insertBuilder(sb, unitElement);
exitPosition = new Position(file, insertOffset);
// add proposal
_addFix(FixKind.CREATE_NO_SUCH_METHOD, []);
@@ -1026,9 +1034,9 @@
}
// insert new import
String importSource = "${prefix}import '$importPath';$suffix";
- _addInsertEdit(offset, importSource);
+ _addInsertEdit(offset, importSource, libraryUnitElement);
// add proposal
- _addFixToElement(kind, [importPath], libraryUnitElement);
+ _addFix(kind, [importPath]);
}
void _addFix_importLibrary_withElement(String name, ElementKind kind) {
@@ -1057,8 +1065,7 @@
if (prefix != null) {
SourceRange range = rf.rangeStartLength(node, 0);
_addReplaceEdit(range, '${prefix.displayName}.');
- _addFix(
- FixKind.IMPORT_LIBRARY_PREFIX,
+ _addFix(FixKind.IMPORT_LIBRARY_PREFIX,
[libraryElement.displayName, prefix.displayName]);
continue;
}
@@ -1078,11 +1085,9 @@
}
// update library
String newShowCode = 'show ${StringUtils.join(showNames, ", ")}';
- _addReplaceEdit(rf.rangeOffsetEnd(showCombinator), newShowCode);
- _addFixToElement(
- FixKind.IMPORT_LIBRARY_SHOW,
- [libraryName],
- unitLibraryElement);
+ _addReplaceEdit(
+ rf.rangeOffsetEnd(showCombinator), newShowCode, unitLibraryElement);
+ _addFix(FixKind.IMPORT_LIBRARY_SHOW, [libraryName]);
// we support only one import without prefix
return;
}
@@ -1149,8 +1154,7 @@
String libraryPackageUri = findAbsoluteUri(context, libraryFile);
if (libraryPackageUri != null) {
_addFix_importLibrary(
- FixKind.IMPORT_LIBRARY_PROJECT,
- libraryPackageUri);
+ FixKind.IMPORT_LIBRARY_PROJECT, libraryPackageUri);
continue;
}
}
@@ -1183,6 +1187,8 @@
if (_mayBeTypeIdentifier(node)) {
String typeName = (node as SimpleIdentifier).name;
_addFix_importLibrary_withElement(typeName, ElementKind.CLASS);
+ _addFix_importLibrary_withElement(
+ typeName, ElementKind.FUNCTION_TYPE_ALIAS);
}
}
@@ -1201,8 +1207,7 @@
if (coveredNode is IsExpression) {
IsExpression isExpression = coveredNode as IsExpression;
_addReplaceEdit(
- rf.rangeEndEnd(isExpression.expression, isExpression),
- ' != null');
+ rf.rangeEndEnd(isExpression.expression, isExpression), ' != null');
_addFix(FixKind.USE_NOT_EQ_NULL, []);
}
}
@@ -1211,8 +1216,7 @@
if (coveredNode is IsExpression) {
IsExpression isExpression = coveredNode as IsExpression;
_addReplaceEdit(
- rf.rangeEndEnd(isExpression.expression, isExpression),
- ' == null');
+ rf.rangeEndEnd(isExpression.expression, isExpression), ' == null');
_addFix(FixKind.USE_EQ_EQ_NULL, []);
}
}
@@ -1316,8 +1320,7 @@
void _addFix_undefinedClass_useSimilar() {
if (_mayBeTypeIdentifier(node)) {
String name = (node as SimpleIdentifier).name;
- _ClosestElementFinder finder = new _ClosestElementFinder(
- name,
+ _ClosestElementFinder finder = new _ClosestElementFinder(name,
(Element element) => element is ClassElement,
MAX_LEVENSHTEIN_DISTANCE);
// find closest element
@@ -1348,8 +1351,7 @@
void _addFix_undefinedFunction_create() {
// should be the name of the invocation
- if (node is SimpleIdentifier && node.parent is MethodInvocation) {
- } else {
+ if (node is SimpleIdentifier && node.parent is MethodInvocation) {} else {
return;
}
String name = (node as SimpleIdentifier).name;
@@ -1386,7 +1388,7 @@
sb.append(') {$eol}');
}
// insert source
- _insertBuilder(sb);
+ _insertBuilder(sb, unitElement);
_addLinkedPosition('NAME', sb, rf.rangeNode(node));
// add proposal
_addFix(FixKind.CREATE_FUNCTION, [name]);
@@ -1395,8 +1397,7 @@
void _addFix_undefinedFunction_useSimilar() {
if (node is SimpleIdentifier) {
String name = (node as SimpleIdentifier).name;
- _ClosestElementFinder finder = new _ClosestElementFinder(
- name,
+ _ClosestElementFinder finder = new _ClosestElementFinder(name,
(Element element) => element is FunctionElement,
MAX_LEVENSHTEIN_DISTANCE);
// this library
@@ -1491,18 +1492,18 @@
sb.append(sourceSuffix);
}
// insert source
- _insertBuilder(sb);
+ _insertBuilder(sb, targetElement);
// add linked positions
if (targetFile == file) {
_addLinkedPosition('NAME', sb, rf.rangeNode(node));
}
// add proposal
- _addFixToElement(FixKind.CREATE_METHOD, [name], targetElement);
+ _addFix(FixKind.CREATE_METHOD, [name]);
}
}
- void _addFix_undefinedMethod_create_parameters(SourceBuilder sb,
- ArgumentList argumentList) {
+ void _addFix_undefinedMethod_create_parameters(
+ SourceBuilder sb, ArgumentList argumentList) {
// append parameters
sb.append('(');
Set<String> excluded = new Set();
@@ -1515,8 +1516,6 @@
}
// append type name
DartType type = argument.bestType;
- Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
- // TODO(scheglov) use librariesToImport
String typeSource = utils.getTypeSource(type, librariesToImport);
if (typeSource != 'dynamic') {
sb.startPosition('TYPE$i');
@@ -1543,8 +1542,7 @@
if (node is SimpleIdentifier && node.parent is MethodInvocation) {
MethodInvocation invocation = node.parent as MethodInvocation;
String name = (node as SimpleIdentifier).name;
- _ClosestElementFinder finder = new _ClosestElementFinder(
- name,
+ _ClosestElementFinder finder = new _ClosestElementFinder(name,
(Element element) => element is MethodElement && !element.isOperator,
MAX_LEVENSHTEIN_DISTANCE);
// unqualified invocation
@@ -1596,60 +1594,52 @@
}
}
+ /**
+ * Adds a fix that replaces [target] with a reference to the class declaring
+ * the given [element].
+ */
+ void _addFix_useStaticAccess(AstNode target, Element element) {
+ Element declaringElement = element.enclosingElement;
+ if (declaringElement is ClassElement) {
+ DartType declaringType = declaringElement.type;
+ String declaringTypeCode =
+ utils.getTypeSource(declaringType, librariesToImport);
+ // replace "target" with class name
+ SourceRange range = rf.rangeNode(target);
+ _addReplaceEdit(range, declaringTypeCode);
+ // add proposal
+ _addFix(FixKind.CHANGE_TO_STATIC_ACCESS, [declaringType]);
+ }
+ }
+
void _addFix_useStaticAccess_method() {
if (node is SimpleIdentifier && node.parent is MethodInvocation) {
MethodInvocation invocation = node.parent as MethodInvocation;
if (invocation.methodName == node) {
Expression target = invocation.target;
- Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
- // TODO(scheglov) use librariesToImport
- String targetType =
- utils.getExpressionTypeSource(target, librariesToImport);
- // replace "target" with class name
- SourceRange range = rf.rangeNode(target);
- _addReplaceEdit(range, targetType);
- // add proposal
- _addFix(FixKind.CHANGE_TO_STATIC_ACCESS, [targetType]);
+ Element invokedElement = invocation.methodName.bestElement;
+ _addFix_useStaticAccess(target, invokedElement);
}
}
}
void _addFix_useStaticAccess_property() {
- if (node is SimpleIdentifier) {
- if (node.parent is PrefixedIdentifier) {
- PrefixedIdentifier prefixed = node.parent as PrefixedIdentifier;
- if (prefixed.identifier == node) {
- Expression target = prefixed.prefix;
- Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
- // TODO(scheglov) use librariesToImport
- String targetType =
- utils.getExpressionTypeSource(target, librariesToImport);
- // replace "target" with class name
- SourceRange range = rf.rangeNode(target);
- _addReplaceEdit(range, targetType);
- // add proposal
- _addFix(FixKind.CHANGE_TO_STATIC_ACCESS, [targetType]);
- }
+ if (node is SimpleIdentifier && node.parent is PrefixedIdentifier) {
+ PrefixedIdentifier prefixed = node.parent as PrefixedIdentifier;
+ if (prefixed.identifier == node) {
+ Expression target = prefixed.prefix;
+ Element invokedElement = prefixed.identifier.bestElement;
+ _addFix_useStaticAccess(target, invokedElement);
}
}
}
- void _addFixToElement(FixKind kind, List args, Element element) {
- Source source = element.source;
- if (source.isInSystemLibrary) {
- return;
- }
- String file = source.fullName;
- int fileStamp = element.context.getModificationStamp(source);
- _addFix(kind, args, file: file, fileStamp: fileStamp);
- }
-
/**
- * Adds a new [Edit] to [edits].
+ * Adds a new [SourceEdit] to [change].
*/
- void _addInsertEdit(int offset, String text) {
+ void _addInsertEdit(int offset, String text, [Element target]) {
SourceEdit edit = new SourceEdit(offset, 0, text);
- edits.add(edit);
+ _addEdit(target, edit);
}
/**
@@ -1670,11 +1660,12 @@
}
/**
- * Prepares proposal for creating function corresponding to the given [FunctionType].
+ * Prepares proposal for creating function corresponding to the given
+ * [FunctionType].
*/
void _addProposal_createFunction(FunctionType functionType, String name,
Source targetSource, int insertOffset, bool isStatic, String prefix,
- String sourcePrefix, String sourceSuffix) {
+ String sourcePrefix, String sourceSuffix, Element target) {
// build method source
String targetFile = targetSource.fullName;
SourceBuilder sb = new SourceBuilder(targetFile, insertOffset);
@@ -1705,8 +1696,6 @@
// append type name
DartType type = parameter.type;
if (!type.isDynamic) {
- Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
- // TODO(scheglov) use librariesToImport
String typeSource = utils.getTypeSource(type, librariesToImport);
{
sb.startPosition('TYPE$i');
@@ -1729,7 +1718,7 @@
sb.append(sourceSuffix);
}
// insert source
- _insertBuilder(sb);
+ _insertBuilder(sb, target);
// add linked positions
if (targetSource == unitSource) {
_addLinkedPosition('NAME', sb, rf.rangeNode(node));
@@ -1748,15 +1737,8 @@
String prefix = '';
String sourcePrefix = '$eol';
String sourceSuffix = eol;
- _addProposal_createFunction(
- functionType,
- name,
- unitSource,
- insertOffset,
- false,
- prefix,
- sourcePrefix,
- sourceSuffix);
+ _addProposal_createFunction(functionType, name, unitSource, insertOffset,
+ false, prefix, sourcePrefix, sourceSuffix, unitElement);
// add proposal
_addFix(FixKind.CREATE_FUNCTION, [name]);
}
@@ -1765,8 +1747,8 @@
* Adds proposal for creating method corresponding to the given [FunctionType] in the given
* [ClassElement].
*/
- void _addProposal_createFunction_method(ClassElement targetClassElement,
- FunctionType functionType) {
+ void _addProposal_createFunction_method(
+ ClassElement targetClassElement, FunctionType functionType) {
String name = (node as SimpleIdentifier).name;
// prepare environment
Source targetSource = targetClassElement.source;
@@ -1782,17 +1764,11 @@
sourcePrefix = eol;
}
String sourceSuffix = eol;
- _addProposal_createFunction(
- functionType,
- name,
- targetSource,
- insertOffset,
- _inStaticContext(),
- prefix,
- sourcePrefix,
- sourceSuffix);
+ _addProposal_createFunction(functionType, name, targetSource, insertOffset,
+ _inStaticContext(), prefix, sourcePrefix, sourceSuffix,
+ targetClassElement);
// add proposal
- _addFixToElement(FixKind.CREATE_METHOD, [name], targetClassElement);
+ _addFix(FixKind.CREATE_METHOD, [name]);
}
/**
@@ -1803,11 +1779,11 @@
}
/**
- * Adds a new [Edit] to [edits].
+ * Adds a new [SourceEdit] to [change].
*/
- void _addReplaceEdit(SourceRange range, String text) {
+ void _addReplaceEdit(SourceRange range, String text, [Element target]) {
SourceEdit edit = new SourceEdit(range.offset, range.length, text);
- edits.add(edit);
+ _addEdit(target, edit);
}
void _appendParameters(SourceBuilder sb, List<ParameterElement> parameters) {
@@ -1859,18 +1835,14 @@
}
void _appendParameterSource(SourceBuilder sb, DartType type, String name) {
- Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
- // TODO(scheglov) use librariesToImport
String parameterSource =
utils.getParameterSource(type, name, librariesToImport);
sb.append(parameterSource);
}
- void _appendType(SourceBuilder sb, DartType type, {String groupId, bool orVar:
- false}) {
+ void _appendType(SourceBuilder sb, DartType type,
+ {String groupId, bool orVar: false}) {
if (type != null && !type.isDynamic) {
- Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
- // TODO(scheglov) use librariesToImport
String typeSource = utils.getTypeSource(type, librariesToImport);
if (groupId != null) {
sb.startPosition(groupId);
@@ -2061,9 +2033,9 @@
/**
* Inserts the given [SourceBuilder] at its offset.
*/
- void _insertBuilder(SourceBuilder builder) {
+ void _insertBuilder(SourceBuilder builder, Element target) {
String text = builder.toString();
- _addInsertEdit(builder.offset, text);
+ _addInsertEdit(builder.offset, text, target);
// add linked positions
builder.linkedPositionGroups.forEach((String id, LinkedEditGroup group) {
LinkedEditGroup fixGroup = _getLinkedPosition(id);
@@ -2100,8 +2072,8 @@
return node is SimpleIdentifier && node.name == 'await';
}
- _ConstructorLocation
- _prepareNewConstructorLocation(ClassDeclaration classDeclaration) {
+ _ConstructorLocation _prepareNewConstructorLocation(
+ ClassDeclaration classDeclaration) {
List<ClassMember> members = classDeclaration.members;
// find the last field/constructor
ClassMember lastFieldOrConstructor = null;
@@ -2115,16 +2087,12 @@
// after the last field/constructor
if (lastFieldOrConstructor != null) {
return new _ConstructorLocation(
- eol + eol,
- lastFieldOrConstructor.end,
- '');
+ eol + eol, lastFieldOrConstructor.end, '');
}
// at the beginning of the class
String suffix = members.isEmpty ? '' : eol;
return new _ConstructorLocation(
- eol,
- classDeclaration.leftBracket.end,
- suffix);
+ eol, classDeclaration.leftBracket.end, suffix);
}
_FieldLocation _prepareNewFieldLocation(ClassDeclaration classDeclaration) {
@@ -2142,16 +2110,12 @@
// after the last field
if (lastFieldOrConstructor != null) {
return new _FieldLocation(
- eol + eol + indent,
- lastFieldOrConstructor.end,
- '');
+ eol + eol + indent, lastFieldOrConstructor.end, '');
}
// at the beginning of the class
String suffix = members.isEmpty ? '' : eol;
return new _FieldLocation(
- eol + indent,
- classDeclaration.leftBracket.end,
- suffix);
+ eol + indent, classDeclaration.leftBracket.end, suffix);
}
_FieldLocation _prepareNewGetterLocation(ClassDeclaration classDeclaration) {
@@ -2175,9 +2139,7 @@
// at the beginning of the class
String suffix = members.isEmpty ? '' : eol;
return new _FieldLocation(
- eol + indent,
- classDeclaration.leftBracket.end,
- suffix);
+ eol + indent, classDeclaration.leftBracket.end, suffix);
}
/**
@@ -2198,16 +2160,16 @@
}
}
- void _updateFinderWithClassMembers(_ClosestElementFinder finder,
- ClassElement clazz) {
+ void _updateFinderWithClassMembers(
+ _ClosestElementFinder finder, ClassElement clazz) {
if (clazz != null) {
List<Element> members = getMembers(clazz);
finder._updateList(members);
}
}
- static void _addSuperTypeProposals(SourceBuilder sb,
- Set<DartType> alreadyAdded, DartType type) {
+ static void _addSuperTypeProposals(
+ SourceBuilder sb, Set<DartType> alreadyAdded, DartType type) {
if (type != null &&
!alreadyAdded.contains(type) &&
type.element is ClassElement) {
@@ -2224,8 +2186,8 @@
/**
* @return the suggestions for given [Type] and [DartExpression], not empty.
*/
- static List<String> _getArgumentNameSuggestions(Set<String> excluded,
- DartType type, Expression expression, int index) {
+ static List<String> _getArgumentNameSuggestions(
+ Set<String> excluded, DartType type, Expression expression, int index) {
List<String> suggestions =
getVariableNameSuggestionsForExpression(type, expression, excluded);
if (suggestions.length != 0) {
@@ -2286,7 +2248,6 @@
}
}
-
/**
* Describes the location for a newly created [ConstructorDeclaration].
*/
@@ -2298,7 +2259,6 @@
_ConstructorLocation(this.prefix, this.offset, this.suffix);
}
-
/**
* Describes the location for a newly created [FieldDeclaration].
*/
diff --git a/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart b/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
index e3b36cf..c9e4ef6 100644
--- a/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
+++ b/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
@@ -8,7 +8,6 @@
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart';
-
List<String> _KNOWN_METHOD_NAME_PREFIXES = ['get', 'is', 'to'];
/**
@@ -92,8 +91,8 @@
/**
* Returns possible names for a [String] variable with [text] value.
*/
-List<String> getVariableNameSuggestionsForText(String text,
- Set<String> excluded) {
+List<String> getVariableNameSuggestionsForText(
+ String text, Set<String> excluded) {
// filter out everything except of letters and white spaces
{
StringBuffer sb = new StringBuffer();
@@ -130,7 +129,7 @@
void _addAll(Set<String> excluded, Set<String> result, Iterable<String> toAdd) {
for (String item in toAdd) {
// add name based on "item", but not "excluded"
- for (int suffix = 1; ; suffix++) {
+ for (int suffix = 1;; suffix++) {
// prepare name, just "item" or "item2", "item3", etc
String name = item;
if (suffix > 1) {
@@ -219,7 +218,6 @@
return name;
}
-
String _getBaseNameFromLocationInParent(Expression expression) {
// value in named expression
if (expression.parent is NamedExpression) {
diff --git a/pkg/analysis_server/lib/src/services/correction/namespace.dart b/pkg/analysis_server/lib/src/services/correction/namespace.dart
index 31c0477..899fae0 100644
--- a/pkg/analysis_server/lib/src/services/correction/namespace.dart
+++ b/pkg/analysis_server/lib/src/services/correction/namespace.dart
@@ -8,7 +8,6 @@
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/resolver.dart';
-
/**
* Returns the [Element] exported from the given [LibraryElement].
*/
@@ -19,7 +18,6 @@
return getExportNamespaceForLibrary(library)[name];
}
-
/**
* Returns the namespace of the given [ExportElement].
*/
@@ -29,7 +27,6 @@
return namespace.definedNames;
}
-
/**
* Returns the export namespace of the given [LibraryElement].
*/
@@ -39,7 +36,6 @@
return namespace.definedNames;
}
-
/**
* Returns the [ImportElement] that is referenced by [prefixNode] with
* an [PrefixElement], maybe `null`.
@@ -62,8 +58,8 @@
* [importElementsMap] - the cache of [Element]s imported by [ImportElement]s.
*/
ImportElement internal_getImportElement(LibraryElement libraryElement,
- String prefix, Element element, Map<ImportElement,
- Set<Element>> importElementsMap) {
+ String prefix, Element element,
+ Map<ImportElement, Set<Element>> importElementsMap) {
// validate Element
if (element == null) {
return null;
@@ -132,7 +128,6 @@
return null;
}
-
/**
* Returns the [ImportElementInfo] with the [ImportElement] that is referenced
* by [prefixNode] with a [PrefixElement], maybe `null`.
@@ -168,17 +163,13 @@
String prefix = prefixNode.name;
Map<ImportElement, Set<Element>> importElementsMap = {};
info.element = internal_getImportElement(
- libraryElement,
- prefix,
- usedElement,
- importElementsMap);
+ libraryElement, prefix, usedElement, importElementsMap);
if (info.element == null) {
return null;
}
return info;
}
-
/**
* Information about [ImportElement] and place where it is referenced using
* [PrefixElement].
diff --git a/pkg/analysis_server/lib/src/services/correction/selection_analyzer.dart b/pkg/analysis_server/lib/src/services/correction/selection_analyzer.dart
index f8ab474..42addf6 100644
--- a/pkg/analysis_server/lib/src/services/correction/selection_analyzer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/selection_analyzer.dart
@@ -8,7 +8,6 @@
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* A visitor for visiting [AstNode]s covered by a selection [SourceRange].
*/
@@ -101,14 +100,12 @@
/**
* Notifies that selection ends in given [AstNode].
*/
- void handleSelectionEndsIn(AstNode node) {
- }
+ void handleSelectionEndsIn(AstNode node) {}
/**
* Notifies that selection starts in given [AstNode].
*/
- void handleSelectionStartsIn(AstNode node) {
- }
+ void handleSelectionStartsIn(AstNode node) {}
/**
* Resets selected nodes.
diff --git a/pkg/analysis_server/lib/src/services/correction/sort_members.dart b/pkg/analysis_server/lib/src/services/correction/sort_members.dart
index 0c64a63..a7270c2 100644
--- a/pkg/analysis_server/lib/src/services/correction/sort_members.dart
+++ b/pkg/analysis_server/lib/src/services/correction/sort_members.dart
@@ -8,34 +8,35 @@
import 'package:analysis_server/src/services/correction/strings.dart';
import 'package:analyzer/src/generated/ast.dart';
-
/**
* Sorter for unit/class members.
*/
class MemberSorter {
static List<_PriorityItem> _PRIORITY_ITEMS = [
- new _PriorityItem(false, _MemberKind.UNIT_VARIABLE, false),
- new _PriorityItem(false, _MemberKind.UNIT_VARIABLE, true),
- new _PriorityItem(false, _MemberKind.UNIT_ACCESSOR, false),
- new _PriorityItem(false, _MemberKind.UNIT_ACCESSOR, true),
- new _PriorityItem(false, _MemberKind.UNIT_FUNCTION, false),
- new _PriorityItem(false, _MemberKind.UNIT_FUNCTION, true),
- new _PriorityItem(false, _MemberKind.UNIT_FUNCTION_TYPE, false),
- new _PriorityItem(false, _MemberKind.UNIT_FUNCTION_TYPE, true),
- new _PriorityItem(false, _MemberKind.UNIT_CLASS, false),
- new _PriorityItem(false, _MemberKind.UNIT_CLASS, true),
- new _PriorityItem(true, _MemberKind.CLASS_FIELD, false),
- new _PriorityItem(true, _MemberKind.CLASS_ACCESSOR, false),
- new _PriorityItem(true, _MemberKind.CLASS_ACCESSOR, true),
- new _PriorityItem(false, _MemberKind.CLASS_FIELD, false),
- new _PriorityItem(false, _MemberKind.CLASS_CONSTRUCTOR, false),
- new _PriorityItem(false, _MemberKind.CLASS_CONSTRUCTOR, true),
- new _PriorityItem(false, _MemberKind.CLASS_ACCESSOR, false),
- new _PriorityItem(false, _MemberKind.CLASS_ACCESSOR, true),
- new _PriorityItem(false, _MemberKind.CLASS_METHOD, false),
- new _PriorityItem(false, _MemberKind.CLASS_METHOD, true),
- new _PriorityItem(true, _MemberKind.CLASS_METHOD, false),
- new _PriorityItem(true, _MemberKind.CLASS_METHOD, true)];
+ new _PriorityItem(false, _MemberKind.UNIT_FUNCTION_MAIN, false),
+ new _PriorityItem(false, _MemberKind.UNIT_VARIABLE, false),
+ new _PriorityItem(false, _MemberKind.UNIT_VARIABLE, true),
+ new _PriorityItem(false, _MemberKind.UNIT_ACCESSOR, false),
+ new _PriorityItem(false, _MemberKind.UNIT_ACCESSOR, true),
+ new _PriorityItem(false, _MemberKind.UNIT_FUNCTION, false),
+ new _PriorityItem(false, _MemberKind.UNIT_FUNCTION, true),
+ new _PriorityItem(false, _MemberKind.UNIT_FUNCTION_TYPE, false),
+ new _PriorityItem(false, _MemberKind.UNIT_FUNCTION_TYPE, true),
+ new _PriorityItem(false, _MemberKind.UNIT_CLASS, false),
+ new _PriorityItem(false, _MemberKind.UNIT_CLASS, true),
+ new _PriorityItem(true, _MemberKind.CLASS_FIELD, false),
+ new _PriorityItem(true, _MemberKind.CLASS_ACCESSOR, false),
+ new _PriorityItem(true, _MemberKind.CLASS_ACCESSOR, true),
+ new _PriorityItem(false, _MemberKind.CLASS_FIELD, false),
+ new _PriorityItem(false, _MemberKind.CLASS_CONSTRUCTOR, false),
+ new _PriorityItem(false, _MemberKind.CLASS_CONSTRUCTOR, true),
+ new _PriorityItem(false, _MemberKind.CLASS_ACCESSOR, false),
+ new _PriorityItem(false, _MemberKind.CLASS_ACCESSOR, true),
+ new _PriorityItem(false, _MemberKind.CLASS_METHOD, false),
+ new _PriorityItem(false, _MemberKind.CLASS_METHOD, true),
+ new _PriorityItem(true, _MemberKind.CLASS_METHOD, false),
+ new _PriorityItem(true, _MemberKind.CLASS_METHOD, true)
+ ];
final String initialCode;
final CompilationUnit unit;
@@ -74,8 +75,7 @@
String suffix = code.substring(code.length - suffixLength, code.length);
int commonLength = findCommonOverlap(prefix, suffix);
suffixLength -= commonLength;
- SourceEdit edit = new SourceEdit(
- prefixLength,
+ SourceEdit edit = new SourceEdit(prefixLength,
initialCode.length - suffixLength - prefixLength,
code.substring(prefixLength, code.length - suffixLength));
edits.add(edit);
@@ -265,7 +265,11 @@
kind = _MemberKind.UNIT_ACCESSOR;
name += " setter";
} else {
- kind = _MemberKind.UNIT_FUNCTION;
+ if (name == 'main') {
+ kind = _MemberKind.UNIT_FUNCTION_MAIN;
+ } else {
+ kind = _MemberKind.UNIT_FUNCTION;
+ }
}
}
if (member is FunctionTypeAlias) {
@@ -323,7 +327,6 @@
}
}
-
class _DirectiveInfo implements Comparable<_DirectiveInfo> {
final Directive directive;
final _DirectivePriority priority;
@@ -343,7 +346,6 @@
String toString() => '(priority=$priority; text=$text)';
}
-
class _DirectivePriority {
static const IMPORT_SDK = const _DirectivePriority('IMPORT_SDK', 0);
static const IMPORT_PKG = const _DirectivePriority('IMPORT_PKG', 1);
@@ -364,7 +366,6 @@
String toString() => name;
}
-
class _MemberInfo {
final _PriorityItem item;
final String name;
@@ -385,15 +386,16 @@
}
class _MemberKind {
- static const UNIT_ACCESSOR = const _MemberKind('UNIT_ACCESSOR', 0);
- static const UNIT_FUNCTION = const _MemberKind('UNIT_FUNCTION', 1);
- static const UNIT_FUNCTION_TYPE = const _MemberKind('UNIT_FUNCTION_TYPE', 2);
- static const UNIT_CLASS = const _MemberKind('UNIT_CLASS', 3);
- static const UNIT_VARIABLE = const _MemberKind('UNIT_VARIABLE', 4);
- static const CLASS_ACCESSOR = const _MemberKind('CLASS_ACCESSOR', 5);
- static const CLASS_CONSTRUCTOR = const _MemberKind('CLASS_CONSTRUCTOR', 6);
- static const CLASS_FIELD = const _MemberKind('CLASS_FIELD', 7);
- static const CLASS_METHOD = const _MemberKind('CLASS_METHOD', 8);
+ static const UNIT_FUNCTION_MAIN = const _MemberKind('UNIT_FUNCTION_MAIN', 0);
+ static const UNIT_ACCESSOR = const _MemberKind('UNIT_ACCESSOR', 1);
+ static const UNIT_FUNCTION = const _MemberKind('UNIT_FUNCTION', 2);
+ static const UNIT_FUNCTION_TYPE = const _MemberKind('UNIT_FUNCTION_TYPE', 3);
+ static const UNIT_CLASS = const _MemberKind('UNIT_CLASS', 4);
+ static const UNIT_VARIABLE = const _MemberKind('UNIT_VARIABLE', 5);
+ static const CLASS_ACCESSOR = const _MemberKind('CLASS_ACCESSOR', 6);
+ static const CLASS_CONSTRUCTOR = const _MemberKind('CLASS_CONSTRUCTOR', 7);
+ static const CLASS_FIELD = const _MemberKind('CLASS_FIELD', 8);
+ static const CLASS_METHOD = const _MemberKind('CLASS_METHOD', 9);
final String name;
final int ordinal;
@@ -404,7 +406,6 @@
String toString() => name;
}
-
class _PriorityItem {
final _MemberKind kind;
final bool isPrivate;
diff --git a/pkg/analysis_server/lib/src/services/correction/source_buffer.dart b/pkg/analysis_server/lib/src/services/correction/source_buffer.dart
index 15cc6ce..56eac5b 100644
--- a/pkg/analysis_server/lib/src/services/correction/source_buffer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/source_buffer.dart
@@ -7,7 +7,6 @@
import 'package:analysis_server/src/protocol.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* Helper for building Dart source with linked positions.
*/
@@ -16,8 +15,8 @@
final int offset;
final StringBuffer _buffer = new StringBuffer();
- final Map<String, LinkedEditGroup> linkedPositionGroups = <String,
- LinkedEditGroup>{};
+ final Map<String, LinkedEditGroup> linkedPositionGroups =
+ <String, LinkedEditGroup>{};
LinkedEditGroup _currentLinkedPositionGroup;
int _currentPositionStart;
int _exitOffset;
diff --git a/pkg/analysis_server/lib/src/services/correction/source_range.dart b/pkg/analysis_server/lib/src/services/correction/source_range.dart
index f7117ae..9ee7078 100644
--- a/pkg/analysis_server/lib/src/services/correction/source_range.dart
+++ b/pkg/analysis_server/lib/src/services/correction/source_range.dart
@@ -10,7 +10,6 @@
import 'package:analyzer/src/generated/scanner.dart';
import 'package:analyzer/src/generated/source.dart';
-
SourceRange rangeElementName(Element element) {
return new SourceRange(element.nameOffset, element.displayName.length);
}
diff --git a/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart b/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
index db4a50a..de3da05 100644
--- a/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
@@ -14,7 +14,6 @@
import 'package:analyzer/src/generated/scanner.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* Returns [Token]s of the given Dart source, not `null`, may be empty if no
* tokens or some exception happens.
@@ -34,7 +33,6 @@
}
}
-
/**
* Analyzer to check if a selection covers a valid set of statements of AST.
*/
@@ -102,8 +100,7 @@
Object visitForStatement(ForStatement node) {
super.visitForStatement(node);
List<AstNode> selectedNodes = this.selectedNodes;
- bool containsInit =
- _contains(selectedNodes, node.initialization) ||
+ bool containsInit = _contains(selectedNodes, node.initialization) ||
_contains(selectedNodes, node.variables);
bool containsCondition = _contains(selectedNodes, node.condition);
bool containsUpdaters = _containsAny(selectedNodes, node.updaters);
@@ -184,7 +181,7 @@
if (_hasTokens(rangeBeforeFirstNode)) {
invalidSelection(
"The beginning of the selection contains characters that "
- "do not belong to a statement.",
+ "do not belong to a statement.",
newLocation_fromUnit(unit, rangeBeforeFirstNode));
}
}
@@ -193,9 +190,8 @@
AstNode lastNode = nodes.last;
SourceRange rangeAfterLastNode = rangeEndEnd(lastNode, selection);
if (_hasTokens(rangeAfterLastNode)) {
- invalidSelection(
- "The end of the selection contains characters that "
- "do not belong to a statement.",
+ invalidSelection("The end of the selection contains characters that "
+ "do not belong to a statement.",
newLocation_fromUnit(unit, rangeAfterLastNode));
}
}
diff --git a/pkg/analysis_server/lib/src/services/correction/status.dart b/pkg/analysis_server/lib/src/services/correction/status.dart
index b8b8f38..df37d12 100644
--- a/pkg/analysis_server/lib/src/services/correction/status.dart
+++ b/pkg/analysis_server/lib/src/services/correction/status.dart
@@ -6,7 +6,6 @@
import 'package:analysis_server/src/protocol.dart';
-
/**
* An outcome of a condition checking operation.
*/
@@ -112,22 +111,16 @@
* Adds an ERROR problem with the given message and location.
*/
void addError(String msg, [Location location]) {
- _addProblem(
- new RefactoringProblem(
- RefactoringProblemSeverity.ERROR,
- msg,
- location: location));
+ _addProblem(new RefactoringProblem(RefactoringProblemSeverity.ERROR, msg,
+ location: location));
}
/**
* Adds a FATAL problem with the given message and location.
*/
void addFatalError(String msg, [Location location]) {
- _addProblem(
- new RefactoringProblem(
- RefactoringProblemSeverity.FATAL,
- msg,
- location: location));
+ _addProblem(new RefactoringProblem(RefactoringProblemSeverity.FATAL, msg,
+ location: location));
}
/**
@@ -151,11 +144,8 @@
* Adds a WARNING problem with the given message and location.
*/
void addWarning(String msg, [Location location]) {
- _addProblem(
- new RefactoringProblem(
- RefactoringProblemSeverity.WARNING,
- msg,
- location: location));
+ _addProblem(new RefactoringProblem(RefactoringProblemSeverity.WARNING, msg,
+ location: location));
}
@override
diff --git a/pkg/analysis_server/lib/src/services/correction/strings.dart b/pkg/analysis_server/lib/src/services/correction/strings.dart
index b58a9d7..3c44fb6 100644
--- a/pkg/analysis_server/lib/src/services/correction/strings.dart
+++ b/pkg/analysis_server/lib/src/services/correction/strings.dart
@@ -6,7 +6,6 @@
import 'dart:math';
-
/**
* "$"
*/
@@ -22,7 +21,6 @@
*/
const int CHAR_UNDERSCORE = 0x5F;
-
String capitalize(String str) {
if (isEmpty(str)) {
return str;
@@ -163,7 +161,6 @@
return isSpace(c) || c == 0x0D || c == 0x0A;
}
-
String remove(String str, String remove) {
if (isEmpty(str) || isEmpty(remove)) {
return str;
@@ -171,7 +168,6 @@
return str.replaceAll(remove, '');
}
-
String removeEnd(String str, String remove) {
if (isEmpty(str) || isEmpty(remove)) {
return str;
@@ -182,7 +178,6 @@
return str;
}
-
String removeStart(String str, String remove) {
if (isEmpty(str) || isEmpty(remove)) {
return str;
@@ -193,7 +188,6 @@
return str;
}
-
String repeat(String s, int n) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < n; i++) {
@@ -202,7 +196,6 @@
return sb.toString();
}
-
/**
* Gets the substring after the last occurrence of a separator.
* The separator is not returned.
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index c89a42d..f214c9f 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -6,8 +6,10 @@
import 'dart:math';
-import 'package:analysis_server/src/protocol.dart' show SourceChange,
- SourceEdit;
+import 'package:analysis_server/src/protocol.dart'
+ show SourceChange, SourceEdit;
+import 'package:analysis_server/src/protocol_server.dart'
+ show doSourceChange_addElementEdit;
import 'package:analysis_server/src/services/correction/source_range.dart';
import 'package:analysis_server/src/services/correction/strings.dart';
import 'package:analyzer/src/generated/ast.dart';
@@ -18,6 +20,47 @@
import 'package:analyzer/src/generated/source.dart';
import 'package:path/path.dart';
+/**
+ * Adds edits to the given [change] that ensure that all the [libraries] are
+ * imported into the given [targetLibrary].
+ */
+void addLibraryImports(SourceChange change, LibraryElement targetLibrary,
+ Set<LibraryElement> libraries) {
+ CompilationUnit libUnit = targetLibrary.definingCompilationUnit.node;
+ // prepare new import location
+ int offset = 0;
+ String prefix;
+ String suffix;
+ {
+ // if no directives
+ prefix = '';
+ CorrectionUtils libraryUtils = new CorrectionUtils(libUnit);
+ String eol = libraryUtils.endOfLine;
+ suffix = eol;
+ // after last directive in library
+ for (Directive directive in libUnit.directives) {
+ if (directive is LibraryDirective || directive is ImportDirective) {
+ offset = directive.end;
+ prefix = eol;
+ suffix = '';
+ }
+ }
+ // if still at the beginning of the file, skip shebang and line comments
+ if (offset == 0) {
+ CorrectionUtils_InsertDesc desc = libraryUtils.getInsertDescTop();
+ offset = desc.offset;
+ prefix = desc.prefix;
+ suffix = desc.suffix + eol;
+ }
+ }
+ // insert imports
+ for (LibraryElement library in libraries) {
+ String importPath = getLibrarySourceUri(targetLibrary, library.source);
+ String importCode = "${prefix}import '$importPath';$suffix";
+ doSourceChange_addElementEdit(
+ change, targetLibrary, new SourceEdit(offset, 0, importCode));
+ }
+}
/**
* @return <code>true</code> if given [List]s are identical at given position.
@@ -32,7 +75,6 @@
return true;
}
-
/**
* Climbs up [PrefixedIdentifier] and [ProperyAccess] nodes that include [node].
*/
@@ -51,7 +93,6 @@
}
}
-
/**
* Attempts to convert the given absolute path into an absolute URI, such as
* "dart" or "package" URI.
@@ -70,7 +111,6 @@
return uri.toString();
}
-
/**
* TODO(scheglov) replace with nodes once there will be [CompilationUnit.getComments].
*
@@ -90,7 +130,6 @@
return ranges;
}
-
String getDefaultValueCode(DartType type) {
if (type != null) {
String typeName = type.displayName;
@@ -111,8 +150,6 @@
return "null";
}
-
-
/**
* Return the name of the [Element] kind.
*/
@@ -132,7 +169,6 @@
}
}
-
/**
* If the given [AstNode] is in a [ClassDeclaration], returns the
* [ClassElement]. Otherwise returns `null`.
@@ -146,7 +182,6 @@
return null;
}
-
/**
* Returns a class or an unit member enclosing the given [node].
*/
@@ -165,7 +200,6 @@
return null;
}
-
/**
* @return the [ExecutableElement] of the enclosing executable [AstNode].
*/
@@ -185,7 +219,6 @@
return null;
}
-
/**
* @return the enclosing executable [AstNode].
*/
@@ -205,7 +238,6 @@
return null;
}
-
/**
* Returns [getExpressionPrecedence] for the parent of [node],
* or `0` if the parent node is [ParenthesizedExpression].
@@ -220,7 +252,6 @@
return getExpressionPrecedence(parent);
}
-
/**
* Returns the precedence of [node] it is an [Expression], negative otherwise.
*/
@@ -231,7 +262,6 @@
return -1000;
}
-
/**
* Returns the namespace of the given [ImportElement].
*/
@@ -274,7 +304,6 @@
return line.substring(0, index);
}
-
/**
* @return the [LocalVariableElement] or [ParameterElement] if given
* [SimpleIdentifier] is the reference to local variable or parameter, or
@@ -291,7 +320,6 @@
return null;
}
-
/**
* @return the [LocalVariableElement] if given [SimpleIdentifier] is the reference to
* local variable, or <code>null</code> in the other case.
@@ -304,7 +332,6 @@
return null;
}
-
/**
* @return the nearest common ancestor [AstNode] of the given [AstNode]s.
*/
@@ -325,7 +352,7 @@
}
// find deepest parent
int i = 0;
- for ( ; i < minLength; i++) {
+ for (; i < minLength; i++) {
if (!allListsIdentical(parents, i)) {
break;
}
@@ -333,7 +360,6 @@
return parents[0][i - 1];
}
-
/**
* Returns the [Expression] qualifier if given node is the name part of a
* [PropertyAccess] or a [PrefixedIdentifier]. Maybe `null`.
@@ -355,7 +381,6 @@
return null;
}
-
/**
* Returns the [ParameterElement] if the given [SimpleIdentifier] is a reference
* to a parameter, or `null` in the other case.
@@ -368,7 +393,6 @@
return null;
}
-
/**
* @return parent [AstNode]s from [CompilationUnit] (at index "0") to the given one.
*/
@@ -393,7 +417,6 @@
return parents;
}
-
/**
* Returns a [PropertyAccessorElement] if the given [SimpleIdentifier] is a
* reference to a property, or `null` in the other case.
@@ -406,7 +429,6 @@
return null;
}
-
/**
* If given [AstNode] is name of qualified property extraction, returns target from which
* this property is extracted. Otherwise `null`.
@@ -443,7 +465,6 @@
return statement;
}
-
/**
* Returns the [String] content of the given [Source].
*/
@@ -451,7 +472,6 @@
return context.getContents(source).data;
}
-
/**
* Returns the given [Statement] if not a [Block], or all the children
* [Statement]s if a [Block].
@@ -463,7 +483,6 @@
return [statement];
}
-
/**
* Checks if the given [Element]'s display name equals to the given name.
*/
@@ -474,7 +493,6 @@
return element.displayName == name;
}
-
/**
* Checks if the given [PropertyAccessorElement] is an accessor of a
* [FieldElement].
@@ -483,7 +501,6 @@
return accessor != null && accessor.variable is FieldElement;
}
-
/**
* Checks if given [DartNode] is the left hand side of an assignment, or a
* declaration of a variable.
@@ -496,7 +513,6 @@
(node.parent as VariableDeclaration).name == node;
}
-
/**
* @return `true` if the given [SimpleIdentifier] is the name of the
* [NamedExpression].
@@ -515,7 +531,6 @@
return false;
}
-
/**
* If the given [expression] is the `expression` property of a [NamedExpression]
* then returns this [NamedExpression]. Otherwise returns [expression].
@@ -530,7 +545,6 @@
return expression;
}
-
class CorrectionUtils {
final CompilationUnit unit;
@@ -569,8 +583,8 @@
* [SourceRange] from [oldIndent] to [newIndent], keeping indentation of lines
* relative to each other.
*/
- SourceEdit createIndentEdit(SourceRange range, String oldIndent,
- String newIndent) {
+ SourceEdit createIndentEdit(
+ SourceRange range, String oldIndent, String newIndent) {
String newSource = replaceSourceRangeIndent(range, oldIndent, newIndent);
return new SourceEdit(range.offset, range.length, newSource);
}
@@ -585,8 +599,8 @@
* Returns the actual type source of the given [Expression], may be `null`
* if can not be resolved, should be treated as the `dynamic` type.
*/
- String getExpressionTypeSource(Expression expression,
- Set<LibraryElement> librariesToImport) {
+ String getExpressionTypeSource(
+ Expression expression, Set<LibraryElement> librariesToImport) {
if (expression == null) {
return null;
}
@@ -870,8 +884,8 @@
/**
* @return the source for the parameter with the given type and name.
*/
- String getParameterSource(DartType type, String name,
- Set<LibraryElement> librariesToImport) {
+ String getParameterSource(
+ DartType type, String name, Set<LibraryElement> librariesToImport) {
// no type
if (type == null || type.isDynamic) {
return name;
@@ -897,8 +911,8 @@
if (i != 0) {
sb.write(", ");
}
- sb.write(
- getParameterSource(fParameter.type, fParameter.name, librariesToImport));
+ sb.write(getParameterSource(
+ fParameter.type, fParameter.name, librariesToImport));
}
sb.write(')');
// done
@@ -957,7 +971,8 @@
return source;
}
// check if imported
- if (element.library != _library) {
+ LibraryElement library = element.library;
+ if (library != null && library != _library) {
ImportElement importElement = _getImportElement(element);
if (importElement != null) {
if (importElement.prefix != null) {
@@ -965,7 +980,7 @@
sb.write(".");
}
} else {
- librariesToImport.add(element.library);
+ librariesToImport.add(library);
}
}
// append simple name
@@ -1000,18 +1015,6 @@
}
/**
- * Checks if [type] is visible at [targetOffset].
- */
- bool _isTypeVisible(DartType type) {
- if (type is TypeParameterType) {
- TypeParameterElement parameterElement = type.element;
- Element parameterClassElement = parameterElement.enclosingElement;
- return identical(parameterClassElement, targetClassElement);
- }
- return true;
- }
-
- /**
* Indents given source left or right.
*/
String indentSourceLeftRight(String source, bool right) {
@@ -1061,8 +1064,8 @@
* Returns the source with indentation changed from [oldIndent] to
* [newIndent], keeping indentation of lines relative to each other.
*/
- String replaceSourceIndent(String source, String oldIndent,
- String newIndent) {
+ String replaceSourceIndent(
+ String source, String oldIndent, String newIndent) {
// prepare STRING token ranges
List<SourceRange> lineRanges = [];
{
@@ -1112,8 +1115,8 @@
* from [oldIndent] to [newIndent], keeping indentation of lines relative
* to each other.
*/
- String replaceSourceRangeIndent(SourceRange range, String oldIndent,
- String newIndent) {
+ String replaceSourceRangeIndent(
+ SourceRange range, String oldIndent, String newIndent) {
String oldSource = getRangeText(range);
return replaceSourceIndent(oldSource, oldIndent, newIndent);
}
@@ -1122,18 +1125,17 @@
* @return <code>true</code> if "selection" covers "node" and there are any non-whitespace tokens
* between "selection" and "node" start/end.
*/
- bool selectionIncludesNonWhitespaceOutsideNode(SourceRange selection,
- AstNode node) {
+ bool selectionIncludesNonWhitespaceOutsideNode(
+ SourceRange selection, AstNode node) {
return _selectionIncludesNonWhitespaceOutsideRange(
- selection,
- rangeNode(node));
+ selection, rangeNode(node));
}
/**
* @return <code>true</code> if given range of [BinaryExpression] can be extracted.
*/
- bool validateBinaryExpressionRange(BinaryExpression binaryExpression,
- SourceRange range) {
+ bool validateBinaryExpressionRange(
+ BinaryExpression binaryExpression, SourceRange range) {
// only parts of associative expression are safe to extract
if (!binaryExpression.operator.type.isAssociativeOperator) {
return false;
@@ -1206,17 +1208,11 @@
}
if (operator == TokenType.AMPERSAND_AMPERSAND) {
return _InvertedCondition._binary(
- TokenType.BAR_BAR.precedence,
- ls,
- " || ",
- rs);
+ TokenType.BAR_BAR.precedence, ls, " || ", rs);
}
if (operator == TokenType.BAR_BAR) {
return _InvertedCondition._binary(
- TokenType.AMPERSAND_AMPERSAND.precedence,
- ls,
- " && ",
- rs);
+ TokenType.AMPERSAND_AMPERSAND.precedence, ls, " && ", rs);
}
}
if (expression is IsExpression) {
@@ -1224,11 +1220,11 @@
String expressionSource = getNodeText(isExpression.expression);
String typeSource = getNodeText(isExpression.type);
if (isExpression.notOperator == null) {
- return _InvertedCondition._simple(
- "${expressionSource} is! ${typeSource}");
+ return _InvertedCondition
+ ._simple("${expressionSource} is! ${typeSource}");
} else {
- return _InvertedCondition._simple(
- "${expressionSource} is ${typeSource}");
+ return _InvertedCondition
+ ._simple("${expressionSource} is ${typeSource}");
}
}
if (expression is PrefixExpression) {
@@ -1258,19 +1254,30 @@
return _InvertedCondition._simple(getNodeText(expression));
}
- bool _selectionIncludesNonWhitespaceOutsideOperands(SourceRange selection,
- List<Expression> operands) {
+ /**
+ * Checks if [type] is visible at [targetOffset].
+ */
+ bool _isTypeVisible(DartType type) {
+ if (type is TypeParameterType) {
+ TypeParameterElement parameterElement = type.element;
+ Element parameterClassElement = parameterElement.enclosingElement;
+ return identical(parameterClassElement, targetClassElement);
+ }
+ return true;
+ }
+
+ bool _selectionIncludesNonWhitespaceOutsideOperands(
+ SourceRange selection, List<Expression> operands) {
return _selectionIncludesNonWhitespaceOutsideRange(
- selection,
- rangeNodes(operands));
+ selection, rangeNodes(operands));
}
/**
* @return <code>true</code> if "selection" covers "range" and there are any non-whitespace tokens
* between "selection" and "range" start/end.
*/
- bool _selectionIncludesNonWhitespaceOutsideRange(SourceRange selection,
- SourceRange range) {
+ bool _selectionIncludesNonWhitespaceOutsideRange(
+ SourceRange selection, SourceRange range) {
// selection should cover range
if (!selection.covers(range)) {
return false;
@@ -1291,8 +1298,8 @@
* @return [Expression]s from <code>operands</code> which are completely covered by given
* [SourceRange]. Range should start and end between given [Expression]s.
*/
- static List<Expression> _getOperandsForSourceRange(List<Expression> operands,
- SourceRange range) {
+ static List<Expression> _getOperandsForSourceRange(
+ List<Expression> operands, SourceRange range) {
assert(!operands.isEmpty);
List<Expression> subOperands = [];
// track range enter/exit
@@ -1348,7 +1355,6 @@
}
}
-
/**
* Describes where to insert new directive or top-level declaration.
*/
@@ -1358,7 +1364,6 @@
String suffix = "";
}
-
/**
* Utilities to work with [Token]s.
*/
@@ -1419,7 +1424,6 @@
tokens.length == 1 && tokens[0].type == type;
}
-
/**
* A container with a source and its precedence.
*/
@@ -1432,27 +1436,25 @@
static _InvertedCondition _binary(int precedence, _InvertedCondition left,
String operation, _InvertedCondition right) {
- String src =
- _parenthesizeIfRequired(left, precedence) +
+ String src = _parenthesizeIfRequired(left, precedence) +
operation +
_parenthesizeIfRequired(right, precedence);
return new _InvertedCondition(precedence, src);
}
- static _InvertedCondition _binary2(_InvertedCondition left, String operation,
- _InvertedCondition right) {
+ static _InvertedCondition _binary2(
+ _InvertedCondition left, String operation, _InvertedCondition right) {
// TODO(scheglov) conside merging with "_binary()" after testing
return new _InvertedCondition(
- 1 << 20,
- "${left._source}${operation}${right._source}");
+ 1 << 20, "${left._source}${operation}${right._source}");
}
/**
* Adds enclosing parenthesis if the precedence of the [_InvertedCondition] if less than the
* precedence of the expression we are going it to use in.
*/
- static String _parenthesizeIfRequired(_InvertedCondition expr,
- int newOperatorPrecedence) {
+ static String _parenthesizeIfRequired(
+ _InvertedCondition expr, int newOperatorPrecedence) {
if (expr._precedence < newOperatorPrecedence) {
return "(${expr._source})";
}
@@ -1463,7 +1465,6 @@
new _InvertedCondition(2147483647, source);
}
-
class _OrderedOperandsVisitor extends GeneralizingAstVisitor {
final TokenType groupOperatorType;
final List<Expression> operands;
diff --git a/pkg/analysis_server/lib/src/services/dependencies/library_dependencies.dart b/pkg/analysis_server/lib/src/services/dependencies/library_dependencies.dart
index a482435..e55993d 100644
--- a/pkg/analysis_server/lib/src/services/dependencies/library_dependencies.dart
+++ b/pkg/analysis_server/lib/src/services/dependencies/library_dependencies.dart
@@ -11,7 +11,6 @@
import 'package:analyzer/src/generated/source_io.dart';
class LibraryDependencyCollector {
-
final Set<LibraryElement> _visitedLibraries = new Set<LibraryElement>();
final Set<String> _dependencies = new Set<String>();
@@ -19,9 +18,8 @@
LibraryDependencyCollector(this._contexts);
- Map<String, Map<String, List<String>>> calculatePackageMap(Map<Folder,
- AnalysisContext> folderMap) {
-
+ Map<String, Map<String, List<String>>> calculatePackageMap(
+ Map<Folder, AnalysisContext> folderMap) {
Map<AnalysisContext, Folder> contextMap = _reverse(folderMap);
Map<String, Map<String, List<String>>> result =
new Map<String, Map<String, List<String>>>();
@@ -29,8 +27,8 @@
Map<String, List<Folder>> packageMap = context.sourceFactory.packageMap;
if (packageMap != null) {
Map<String, List<String>> map = new Map<String, List<String>>();
- packageMap.forEach((String name, List<Folder> folders) => map[name] =
- new List.from(folders.map((Folder f) => f.path)));
+ packageMap.forEach((String name, List<Folder> folders) =>
+ map[name] = new List.from(folders.map((Folder f) => f.path)));
result[contextMap[context].path] = map;
}
}
@@ -38,10 +36,9 @@
}
Set<String> collectLibraryDependencies() {
- _contexts.forEach(
- (AnalysisContext context) =>
- context.librarySources.forEach(
- (Source source) => _addDependencies(context.getLibraryElement(source))));
+ _contexts.forEach((AnalysisContext context) => context.librarySources
+ .forEach((Source source) =>
+ _addDependencies(context.getLibraryElement(source))));
return _dependencies;
}
diff --git a/pkg/analysis_server/lib/src/services/generated/stubs.dart b/pkg/analysis_server/lib/src/services/generated/stubs.dart
index 7293cad..8d0982c 100644
--- a/pkg/analysis_server/lib/src/services/generated/stubs.dart
+++ b/pkg/analysis_server/lib/src/services/generated/stubs.dart
@@ -12,7 +12,6 @@
import 'package:analyzer/src/generated/scanner.dart';
import 'package:analyzer/src/generated/source.dart';
-
abstract class SearchFilter {
bool passes(SearchMatch match);
}
@@ -22,10 +21,7 @@
final SourceRange sourceRange = null;
}
-
-class SearchEngine {
-}
-
+class SearchEngine {}
class SourceRangeFactory {
static SourceRange rangeElementName(Element element) {
@@ -83,7 +79,6 @@
}
}
-
class StringUtils {
static String capitalize(String str) {
if (isEmpty(str)) {
@@ -106,8 +101,8 @@
return str == null || str.isEmpty;
}
- static String join(Iterable iter, [String separator = ' ', int start = 0, int
- end = -1]) {
+ static String join(Iterable iter,
+ [String separator = ' ', int start = 0, int end = -1]) {
if (start != 0) {
iter = iter.skip(start);
}
@@ -146,8 +141,8 @@
return s.split(pattern);
}
- static List<String> splitByWholeSeparatorPreserveAllTokens(String s, String
- pattern) {
+ static List<String> splitByWholeSeparatorPreserveAllTokens(
+ String s, String pattern) {
return s.split(pattern);
}
}
diff --git a/pkg/analysis_server/lib/src/services/generated/util.dart b/pkg/analysis_server/lib/src/services/generated/util.dart
index a2002f9..0650257 100644
--- a/pkg/analysis_server/lib/src/services/generated/util.dart
+++ b/pkg/analysis_server/lib/src/services/generated/util.dart
@@ -47,9 +47,15 @@
bool _coveredElementFound = false;
- AssistContext.con1(this.searchEngine, this.analysisContext, this.analysisContextId, this.source, this.compilationUnit, this.selectionOffset, this.selectionLength);
+ AssistContext.con1(this.searchEngine, this.analysisContext,
+ this.analysisContextId, this.source, this.compilationUnit,
+ this.selectionOffset, this.selectionLength);
- AssistContext.con2(SearchEngine searchEngine, AnalysisContext analysisContext, String analysisContextId, Source source, CompilationUnit compilationUnit, SourceRange selectionRange) : this.con1(searchEngine, analysisContext, analysisContextId, source, compilationUnit, selectionRange.offset, selectionRange.length);
+ AssistContext.con2(SearchEngine searchEngine, AnalysisContext analysisContext,
+ String analysisContextId, Source source, CompilationUnit compilationUnit,
+ SourceRange selectionRange)
+ : this.con1(searchEngine, analysisContext, analysisContextId, source,
+ compilationUnit, selectionRange.offset, selectionRange.length);
/**
* @return the resolved [CompilationUnitElement] of the [Source].
@@ -66,7 +72,8 @@
if (coveredNode == null) {
return null;
}
- _coveredElement = ElementLocator.locateWithOffset(coveredNode, selectionOffset);
+ _coveredElement =
+ ElementLocator.locateWithOffset(coveredNode, selectionOffset);
}
return _coveredElement;
}
@@ -76,7 +83,8 @@
*/
AstNode get coveredNode {
if (_coveredNode == null) {
- NodeLocator locator = new NodeLocator.con2(selectionOffset, selectionOffset);
+ NodeLocator locator =
+ new NodeLocator.con2(selectionOffset, selectionOffset);
_coveredNode = locator.searchWithin(compilationUnit);
}
return _coveredNode;
@@ -87,7 +95,8 @@
*/
AstNode get coveringNode {
if (_coveringNode == null) {
- NodeLocator locator = new NodeLocator.con2(selectionOffset, selectionOffset + selectionLength);
+ NodeLocator locator = new NodeLocator.con2(
+ selectionOffset, selectionOffset + selectionLength);
_coveringNode = locator.searchWithin(compilationUnit);
}
return _coveringNode;
@@ -107,7 +116,8 @@
/**
* @return the [SourceRange] of the selection.
*/
- SourceRange get selectionRange => new SourceRange(selectionOffset, selectionLength);
+ SourceRange get selectionRange =>
+ new SourceRange(selectionOffset, selectionLength);
}
/**
@@ -140,7 +150,8 @@
/**
* @return all direct children of the given [Element].
*/
- static List<Element> getChildren(Element parent) => getChildren2(parent, null);
+ static List<Element> getChildren(Element parent) =>
+ getChildren2(parent, null);
/**
* @param name the required name of children; may be <code>null</code> to get children with any
@@ -149,7 +160,8 @@
*/
static List<Element> getChildren2(Element parent, String name) {
List<Element> children = [];
- parent.accept(new GeneralizingElementVisitor_CorrectionUtils_getChildren(parent, name, children));
+ parent.accept(new GeneralizingElementVisitor_CorrectionUtils_getChildren(
+ parent, name, children));
return children;
}
@@ -255,7 +267,8 @@
* @return the namespace of the given [ExportElement].
*/
static Map<String, Element> getExportNamespace(ExportElement exp) {
- Namespace namespace = new NamespaceBuilder().createExportNamespaceForDirective(exp);
+ Namespace namespace =
+ new NamespaceBuilder().createExportNamespaceForDirective(exp);
return namespace.definedNames;
}
@@ -265,7 +278,8 @@
* @return the export namespace of the given [LibraryElement].
*/
static Map<String, Element> getExportNamespace2(LibraryElement library) {
- Namespace namespace = new NamespaceBuilder().createExportNamespaceForLibrary(library);
+ Namespace namespace =
+ new NamespaceBuilder().createExportNamespaceForLibrary(library);
return namespace.definedNames;
}
@@ -300,7 +314,8 @@
* @return the namespace of the given [ImportElement].
*/
static Map<String, Element> getImportNamespace(ImportElement imp) {
- Namespace namespace = new NamespaceBuilder().createImportNamespaceForDirective(imp);
+ Namespace namespace =
+ new NamespaceBuilder().createImportNamespaceForDirective(imp);
return namespace.definedNames;
}
@@ -335,7 +350,8 @@
* [SimpleIdentifier] is the reference to local variable or parameter, or
* <code>null</code> in the other case.
*/
- static VariableElement getLocalOrParameterVariableElement(SimpleIdentifier node) {
+ static VariableElement getLocalOrParameterVariableElement(
+ SimpleIdentifier node) {
Element element = node.staticElement;
if (element is LocalVariableElement) {
return element;
@@ -481,7 +497,8 @@
* @return the [PropertyAccessorElement] if given [SimpleIdentifier] is the reference
* to property, or <code>null</code> in the other case.
*/
- static PropertyAccessorElement getPropertyAccessorElement(SimpleIdentifier node) {
+ static PropertyAccessorElement getPropertyAccessorElement(
+ SimpleIdentifier node) {
Element element = node.staticElement;
if (element is PropertyAccessorElement) {
return element;
@@ -521,9 +538,9 @@
for (int i = 0; i < len; i++) {
int c = className.codeUnitAt(i);
if (Character.isUpperCase(c)) {
- bool nextIsUpper = i < len - 1 && Character.isUpperCase(className.codeUnitAt(i + 1));
- if (i == 0) {
- } else if (prevWasUpper) {
+ bool nextIsUpper =
+ i < len - 1 && Character.isUpperCase(className.codeUnitAt(i + 1));
+ if (i == 0) {} else if (prevWasUpper) {
// HTTPServer
// ^
if (!nextIsUpper) {
@@ -564,7 +581,8 @@
/**
* @return the [String] content of the given [Source].
*/
- static String getSourceContent(AnalysisContext context, Source source) => context.getContents(source).data.toString();
+ static String getSourceContent(AnalysisContext context, Source source) =>
+ context.getContents(source).data.toString();
/**
* @return given [Statement] if not [Block], all children [Statement]s if
@@ -595,7 +613,8 @@
/**
* @return the possible names for variable with initializer of the given [StringLiteral].
*/
- static List<String> getVariableNameSuggestions(String text, Set<String> excluded) {
+ static List<String> getVariableNameSuggestions(
+ String text, Set<String> excluded) {
// filter out everything except of letters and white spaces
{
StringBuffer buffer = new StringBuffer();
@@ -629,16 +648,19 @@
/**
* @return the possible names for variable with given expected type and expression.
*/
- static List<String> getVariableNameSuggestions2(DartType expectedType, Expression assignedExpression, Set<String> excluded) {
+ static List<String> getVariableNameSuggestions2(DartType expectedType,
+ Expression assignedExpression, Set<String> excluded) {
Set<String> res = new LinkedHashSet();
// use expression
if (assignedExpression != null) {
- String nameFromExpression = _getBaseNameFromExpression(assignedExpression);
+ String nameFromExpression =
+ _getBaseNameFromExpression(assignedExpression);
if (nameFromExpression != null) {
nameFromExpression = StringUtils.removeStart(nameFromExpression, "_");
_addAll(excluded, res, _getVariableNameSuggestions(nameFromExpression));
}
- String nameFromParent = _getBaseNameFromLocationInParent(assignedExpression);
+ String nameFromParent =
+ _getBaseNameFromLocationInParent(assignedExpression);
if (nameFromParent != null) {
_addAll(excluded, res, _getVariableNameSuggestions(nameFromParent));
}
@@ -706,7 +728,8 @@
/**
* Adds "toAdd" items which are not excluded.
*/
- static void _addAll(Set<String> excluded, Set<String> result, Iterable<String> toAdd) {
+ static void _addAll(
+ Set<String> excluded, Set<String> result, Iterable<String> toAdd) {
for (String item in toAdd) {
// add name based on "item", but not "excluded"
for (int suffix = 1;; suffix++) {
@@ -727,7 +750,8 @@
/**
* Add to "result" then given "c" or the first ASCII character after it.
*/
- static void _addSingleCharacterName(Set<String> excluded, Set<String> result, int c) {
+ static void _addSingleCharacterName(
+ Set<String> excluded, Set<String> result, int c) {
while (c < 0x7A) {
String name = new String.fromCharCode(c);
// may be done
@@ -821,7 +845,8 @@
* @return [Expression]s from <code>operands</code> which are completely covered by given
* [SourceRange]. Range should start and end between given [Expression]s.
*/
- static List<Expression> _getOperandsForSourceRange(List<Expression> operands, SourceRange range) {
+ static List<Expression> _getOperandsForSourceRange(
+ List<Expression> operands, SourceRange range) {
assert(!operands.isEmpty);
List<Expression> subOperands = [];
// track range enter/exit
@@ -835,7 +860,8 @@
for (int i = 0; i < operands.length - 1; i++) {
Expression operand = operands[i];
Expression nextOperand = operands[i + 1];
- SourceRange inclusiveGap = SourceRangeFactory.rangeEndStart(operand, nextOperand).getMoveEnd(1);
+ SourceRange inclusiveGap =
+ SourceRangeFactory.rangeEndStart(operand, nextOperand).getMoveEnd(1);
// add operand, if already entered range
if (entered) {
subOperands.add(operand);
@@ -871,7 +897,9 @@
static List<Expression> _getOperandsInOrderFor(BinaryExpression groupRoot) {
List<Expression> operands = [];
TokenType groupOperatorType = groupRoot.operator.type;
- groupRoot.accept(new GeneralizingAstVisitor_CorrectionUtils_getOperandsInOrderFor(groupOperatorType, operands));
+ groupRoot.accept(
+ new GeneralizingAstVisitor_CorrectionUtils_getOperandsInOrderFor(
+ groupOperatorType, operands));
return operands;
}
@@ -880,9 +908,11 @@
*/
static List<String> _getVariableNameSuggestions(String name) {
List<String> result = [];
- List<String> parts = name.split("(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])");
+ List<String> parts =
+ name.split("(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])");
for (int i = 0; i < parts.length; i++) {
- String suggestion = "${parts[i].toLowerCase()}${StringUtils.join(parts, "", i + 1, parts.length)}";
+ String suggestion =
+ "${parts[i].toLowerCase()}${StringUtils.join(parts, "", i + 1, parts.length)}";
result.add(suggestion);
}
return result;
@@ -905,7 +935,8 @@
/**
* @return the [AstNode] that encloses the given offset.
*/
- AstNode findNode(int offset) => new NodeLocator.con1(offset).searchWithin(unit);
+ AstNode findNode(int offset) =>
+ new NodeLocator.con1(offset).searchWithin(unit);
/**
* TODO(scheglov) replace with nodes once there will be [CompilationUnit.comments].
@@ -949,7 +980,8 @@
* @return the source of the given [SourceRange] with indentation changed from "oldIndent"
* to "newIndent", keeping indentation of the lines relative to each other.
*/
- String getIndentSource(SourceRange range, String oldIndent, String newIndent) {
+ String getIndentSource(
+ SourceRange range, String oldIndent, String newIndent) {
String oldSource = getText3(range);
return getIndentSource3(oldSource, oldIndent, newIndent);
}
@@ -963,7 +995,8 @@
StringBuffer buffer = new StringBuffer();
String indent = getIndent(1);
String eol = endOfLine;
- List<String> lines = StringUtils.splitByWholeSeparatorPreserveAllTokens(source, eol);
+ List<String> lines =
+ StringUtils.splitByWholeSeparatorPreserveAllTokens(source, eol);
for (int i = 0; i < lines.length; i++) {
String line = lines[i];
// last line, stop if empty
@@ -998,7 +1031,8 @@
// re-indent lines
StringBuffer buffer = new StringBuffer();
String eol = endOfLine;
- List<String> lines = StringUtils.splitByWholeSeparatorPreserveAllTokens(source, eol);
+ List<String> lines =
+ StringUtils.splitByWholeSeparatorPreserveAllTokens(source, eol);
int lineOffset = 0;
for (int i = 0; i < lines.length; i++) {
String line = lines[i];
@@ -1035,7 +1069,9 @@
// analyze directives
Directive prevDirective = null;
for (Directive directive in unit.directives) {
- if (directive is LibraryDirective || directive is ImportDirective || directive is ExportDirective) {
+ if (directive is LibraryDirective ||
+ directive is ImportDirective ||
+ directive is ExportDirective) {
prevDirective = directive;
}
}
@@ -1248,7 +1284,8 @@
int endOffset = range.end;
int afterEndLineOffset = getLineContentEnd(endOffset);
// range
- return SourceRangeFactory.rangeStartEnd(startLineOffset, afterEndLineOffset);
+ return SourceRangeFactory.rangeStartEnd(
+ startLineOffset, afterEndLineOffset);
}
/**
@@ -1360,7 +1397,8 @@
/**
* @return the given range of text from unit.
*/
- String getText2(int offset, int length) => _buffer.substring(offset, offset + length);
+ String getText2(int offset, int length) =>
+ _buffer.substring(offset, offset + length);
/**
* @return the given range of text from unit.
@@ -1439,7 +1477,8 @@
/**
* @return <code>true</code> if selection range contains only whitespace.
*/
- bool isJustWhitespace(SourceRange range) => getText3(range).trim().length == 0;
+ bool isJustWhitespace(SourceRange range) =>
+ getText3(range).trim().length == 0;
/**
* @return <code>true</code> if selection range contains only whitespace or comments
@@ -1458,12 +1497,16 @@
* @return <code>true</code> if "selection" covers "node" and there are any non-whitespace tokens
* between "selection" and "node" start/end.
*/
- bool selectionIncludesNonWhitespaceOutsideNode(SourceRange selection, AstNode node) => _selectionIncludesNonWhitespaceOutsideRange(selection, SourceRangeFactory.rangeNode(node));
+ bool selectionIncludesNonWhitespaceOutsideNode(
+ SourceRange selection, AstNode node) =>
+ _selectionIncludesNonWhitespaceOutsideRange(
+ selection, SourceRangeFactory.rangeNode(node));
/**
* @return <code>true</code> if given range of [BinaryExpression] can be extracted.
*/
- bool validateBinaryExpressionRange(BinaryExpression binaryExpression, SourceRange range) {
+ bool validateBinaryExpressionRange(
+ BinaryExpression binaryExpression, SourceRange range) {
// only parts of associative expression are safe to extract
if (!binaryExpression.operator.type.isAssociativeOperator) {
return false;
@@ -1497,23 +1540,29 @@
return null;
}
- bool _selectionIncludesNonWhitespaceOutsideOperands(SourceRange selection, List<Expression> operands) => _selectionIncludesNonWhitespaceOutsideRange(selection, SourceRangeFactory.rangeNodes(operands));
+ bool _selectionIncludesNonWhitespaceOutsideOperands(
+ SourceRange selection, List<Expression> operands) =>
+ _selectionIncludesNonWhitespaceOutsideRange(
+ selection, SourceRangeFactory.rangeNodes(operands));
/**
* @return <code>true</code> if "selection" covers "range" and there are any non-whitespace tokens
* between "selection" and "range" start/end.
*/
- bool _selectionIncludesNonWhitespaceOutsideRange(SourceRange selection, SourceRange range) {
+ bool _selectionIncludesNonWhitespaceOutsideRange(
+ SourceRange selection, SourceRange range) {
// selection should cover range
if (!selection.covers(range)) {
return false;
}
// non-whitespace between selection start and range start
- if (!isJustWhitespaceOrComment(SourceRangeFactory.rangeStartStart(selection, range))) {
+ if (!isJustWhitespaceOrComment(
+ SourceRangeFactory.rangeStartStart(selection, range))) {
return true;
}
// non-whitespace after range
- if (!isJustWhitespaceOrComment(SourceRangeFactory.rangeEndEnd(range, selection))) {
+ if (!isJustWhitespaceOrComment(
+ SourceRangeFactory.rangeEndEnd(range, selection))) {
return true;
}
// only whitespace in selection around range
@@ -1532,12 +1581,15 @@
String suffix = "";
}
-class GeneralizingAstVisitor_CorrectionUtils_getOperandsInOrderFor extends GeneralizingAstVisitor<Object> {
+class GeneralizingAstVisitor_CorrectionUtils_getOperandsInOrderFor
+ extends GeneralizingAstVisitor<Object> {
TokenType groupOperatorType;
List<Expression> operands;
- GeneralizingAstVisitor_CorrectionUtils_getOperandsInOrderFor(this.groupOperatorType, this.operands) : super();
+ GeneralizingAstVisitor_CorrectionUtils_getOperandsInOrderFor(
+ this.groupOperatorType, this.operands)
+ : super();
@override
Object visitExpression(Expression node) {
@@ -1549,14 +1601,17 @@
}
}
-class GeneralizingElementVisitor_CorrectionUtils_getChildren extends GeneralizingElementVisitor<Object> {
+class GeneralizingElementVisitor_CorrectionUtils_getChildren
+ extends GeneralizingElementVisitor<Object> {
Element parent;
String name;
List<Element> children;
- GeneralizingElementVisitor_CorrectionUtils_getChildren(this.parent, this.name, this.children) : super();
+ GeneralizingElementVisitor_CorrectionUtils_getChildren(
+ this.parent, this.name, this.children)
+ : super();
@override
Object visitElement(Element element) {
@@ -1569,14 +1624,17 @@
}
}
-class GeneralizingElementVisitor_HierarchyUtils_getDirectMembers extends GeneralizingElementVisitor<Object> {
+class GeneralizingElementVisitor_HierarchyUtils_getDirectMembers
+ extends GeneralizingElementVisitor<Object> {
ClassElement clazz;
bool includeSynthetic = false;
List<Element> members;
- GeneralizingElementVisitor_HierarchyUtils_getDirectMembers(this.clazz, this.includeSynthetic, this.members) : super();
+ GeneralizingElementVisitor_HierarchyUtils_getDirectMembers(
+ this.clazz, this.includeSynthetic, this.members)
+ : super();
@override
Object visitElement(Element element) {
@@ -1622,8 +1680,10 @@
NameOccurrencesFinder(Element source) {
this._target = source;
while (true) {
- if (source.kind == ElementKind.GETTER || source.kind == ElementKind.SETTER) {
- PropertyAccessorElement accessorElem = source as PropertyAccessorElement;
+ if (source.kind == ElementKind.GETTER ||
+ source.kind == ElementKind.SETTER) {
+ PropertyAccessorElement accessorElem =
+ source as PropertyAccessorElement;
this._target2 = accessorElem.variable;
if (source is Member) {
Member member = source;
@@ -1633,8 +1693,10 @@
Member member = source as Member;
this._target3 = member.baseElement;
}
- } else if (source.kind == ElementKind.FIELD || source.kind == ElementKind.TOP_LEVEL_VARIABLE) {
- PropertyInducingElement propertyElem = source as PropertyInducingElement;
+ } else if (source.kind == ElementKind.FIELD ||
+ source.kind == ElementKind.TOP_LEVEL_VARIABLE) {
+ PropertyInducingElement propertyElem =
+ source as PropertyInducingElement;
this._target2 = propertyElem.getter;
this._target3 = propertyElem.setter;
} else if (source.kind == ElementKind.METHOD) {
@@ -1645,11 +1707,11 @@
} else if (source.kind == ElementKind.PARAMETER) {
ParameterElement param = source as ParameterElement;
if (param.isInitializingFormal) {
- FieldFormalParameterElement fieldInit = param as FieldFormalParameterElement;
+ FieldFormalParameterElement fieldInit =
+ param as FieldFormalParameterElement;
this._target2 = fieldInit.field;
}
- } else {
- }
+ } else {}
break;
}
if (_target2 == null) {
@@ -1678,28 +1740,35 @@
_match(member.baseElement, node);
}
while (true) {
- if (element.kind == ElementKind.GETTER || element.kind == ElementKind.SETTER) {
- PropertyAccessorElement accessorElem = element as PropertyAccessorElement;
+ if (element.kind == ElementKind.GETTER ||
+ element.kind == ElementKind.SETTER) {
+ PropertyAccessorElement accessorElem =
+ element as PropertyAccessorElement;
_match(accessorElem.variable, node);
- } else if (element.kind == ElementKind.FIELD || element.kind == ElementKind.TOP_LEVEL_VARIABLE) {
- PropertyInducingElement propertyElem = element as PropertyInducingElement;
+ } else if (element.kind == ElementKind.FIELD ||
+ element.kind == ElementKind.TOP_LEVEL_VARIABLE) {
+ PropertyInducingElement propertyElem =
+ element as PropertyInducingElement;
_match(propertyElem.getter, node);
_match(propertyElem.setter, node);
} else if (element.kind == ElementKind.PARAMETER) {
ParameterElement param = element as ParameterElement;
if (param.isInitializingFormal) {
- FieldFormalParameterElement fieldInit = param as FieldFormalParameterElement;
+ FieldFormalParameterElement fieldInit =
+ param as FieldFormalParameterElement;
_match(fieldInit.field, node);
}
- } else {
- }
+ } else {}
break;
}
return null;
}
void _match(Element element, AstNode node) {
- if (identical(_target, element) || identical(_target2, element) || identical(_target3, element) || identical(_target4, element)) {
+ if (identical(_target, element) ||
+ identical(_target2, element) ||
+ identical(_target3, element) ||
+ identical(_target4, element)) {
_matches.add(node);
}
}
@@ -1761,5 +1830,6 @@
* @return <code>true</code> if given [Token]s contain only single [Token] with given
* [TokenType].
*/
- static bool hasOnly(List<Token> tokens, TokenType type) => tokens.length == 1 && tokens[0].type == type;
+ static bool hasOnly(List<Token> tokens, TokenType type) =>
+ tokens.length == 1 && tokens[0].type == type;
}
diff --git a/pkg/analysis_server/lib/src/services/index/index.dart b/pkg/analysis_server/lib/src/services/index/index.dart
index cea7395..c033fd6 100644
--- a/pkg/analysis_server/lib/src/services/index/index.dart
+++ b/pkg/analysis_server/lib/src/services/index/index.dart
@@ -12,6 +12,10 @@
import 'package:analyzer/src/generated/html.dart';
import 'package:analyzer/src/generated/source.dart';
+/**
+ * A filter for [Element] names.
+ */
+typedef bool ElementNameFilter(String name);
/**
* The interface [Index] defines the behavior of objects that maintain an index
@@ -46,8 +50,13 @@
* [relationship] - the relationship between the given element and the
* locations to be returned.
*/
- Future<List<Location>> getRelationships(Element element,
- Relationship relationship);
+ Future<List<Location>> getRelationships(
+ Element element, Relationship relationship);
+
+ /**
+ * Returns top-level [Element]s whose names satisfy to [nameFilter].
+ */
+ List<Element> getTopLevelDeclarations(ElementNameFilter nameFilter);
/**
* Processes the given [HtmlUnit] in order to record the relationships.
@@ -113,7 +122,6 @@
void stop();
}
-
/**
* Constants used when populating and accessing the index.
*/
@@ -200,7 +208,6 @@
IndexConstants._();
}
-
/**
* Instances of the class [Location] represent a location related to an element.
*
@@ -245,8 +252,8 @@
* [offset] - the offset within the resource containing [element].
* [length] - the length of this location
*/
- Location(this.element, this.offset, this.length, {bool isQualified: false,
- bool isResolved: true}) {
+ Location(this.element, this.offset, this.length,
+ {bool isQualified: false, bool isResolved: true}) {
if (element == null) {
throw new ArgumentError("element location cannot be null");
}
@@ -282,7 +289,6 @@
}
}
-
/**
* A [Location] with attached data.
*/
@@ -293,13 +299,12 @@
: super(location.element, location.offset, location.length);
}
-
/**
* An [Element] which is used to index references to the name without specifying
* a concrete kind of this name - field, method or something else.
*/
class NameElement extends ElementImpl {
- NameElement(String name) : super("name:${name}", -1);
+ NameElement(String name) : super(name, -1);
@override
ElementKind get kind => ElementKind.NAME;
@@ -308,7 +313,6 @@
accept(ElementVisitor visitor) => null;
}
-
/**
* Relationship between an element and a location. Relationships are identified
* by a globally unique identifier.
@@ -357,20 +361,3 @@
return relationship;
}
}
-
-
-/**
- * An element to use when we want to request "defines" relations without
- * specifying an exact library.
- */
-class UniverseElement extends ElementImpl {
- static final UniverseElement INSTANCE = new UniverseElement._();
-
- UniverseElement._() : super("--universe--", -1);
-
- @override
- ElementKind get kind => ElementKind.UNIVERSE;
-
- @override
- accept(ElementVisitor visitor) => null;
-}
diff --git a/pkg/analysis_server/lib/src/services/index/index_contributor.dart b/pkg/analysis_server/lib/src/services/index/index_contributor.dart
index 09f87de..d2ac8a7 100644
--- a/pkg/analysis_server/lib/src/services/index/index_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/index/index_contributor.dart
@@ -17,12 +17,11 @@
import 'package:analyzer/src/generated/scanner.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* Adds data to [store] based on the resolved Dart [unit].
*/
-void indexDartUnit(IndexStore store, AnalysisContext context,
- CompilationUnit unit) {
+void indexDartUnit(
+ IndexStore store, AnalysisContext context, CompilationUnit unit) {
// check unit
if (unit == null) {
return;
@@ -42,12 +41,11 @@
store.doneIndex();
}
-
/**
* Adds data to [store] based on the resolved HTML [unit].
*/
-void indexHtmlUnit(IndexStore store, AnalysisContext context, ht.HtmlUnit unit)
- {
+void indexHtmlUnit(
+ IndexStore store, AnalysisContext context, ht.HtmlUnit unit) {
// check unit
if (unit == null) {
return;
@@ -66,7 +64,6 @@
store.doneIndex();
}
-
/**
* Visits a resolved AST and adds relationships into [IndexStore].
*/
@@ -107,8 +104,8 @@
/**
* Record the given relationship between the given [Element] and [Location].
*/
- void recordRelationship(Element element, Relationship relationship,
- Location location) {
+ void recordRelationship(
+ Element element, Relationship relationship, Location location) {
if (element != null && location != null) {
_store.recordRelationship(element, relationship, location);
}
@@ -131,7 +128,7 @@
ClassElement element = node.element;
enterScope(element);
try {
- _recordElementDefinition(element);
+ _recordTopLevelElementDefinition(element);
{
ExtendsClause extendsClause = node.extendsClause;
if (extendsClause != null) {
@@ -141,9 +138,7 @@
InterfaceType superType = element.supertype;
if (superType != null) {
ClassElement objectElement = superType.element;
- recordRelationship(
- objectElement,
- IndexConstants.IS_EXTENDED_BY,
+ recordRelationship(objectElement, IndexConstants.IS_EXTENDED_BY,
_createLocationForOffset(node.name.offset, 0));
}
}
@@ -175,7 +170,7 @@
ClassElement element = node.element;
enterScope(element);
try {
- _recordElementDefinition(element);
+ _recordTopLevelElementDefinition(element);
{
TypeName superclassNode = node.superclass;
if (superclassNode != null) {
@@ -236,9 +231,7 @@
Element element = fieldName.staticElement;
Location location = _createLocationForNode(fieldName);
_store.recordRelationship(
- element,
- IndexConstants.IS_WRITTEN_BY,
- location);
+ element, IndexConstants.IS_WRITTEN_BY, location);
}
// index expression
if (expression != null) {
@@ -286,7 +279,7 @@
ClassElement element = node.element;
enterScope(element);
try {
- _recordElementDefinition(element);
+ _recordTopLevelElementDefinition(element);
super.visitEnumDeclaration(node);
} finally {
_exitScope();
@@ -317,7 +310,7 @@
@override
visitFunctionDeclaration(FunctionDeclaration node) {
Element element = node.element;
- _recordElementDefinition(element);
+ _recordTopLevelElementDefinition(element);
enterScope(element);
try {
super.visitFunctionDeclaration(node);
@@ -329,7 +322,7 @@
@override
visitFunctionTypeAlias(FunctionTypeAlias node) {
Element element = node.element;
- _recordElementDefinition(element);
+ _recordTopLevelElementDefinition(element);
super.visitFunctionTypeAlias(node);
}
@@ -381,9 +374,7 @@
{
Element nameElement = new NameElement(name.name);
_store.recordRelationship(
- nameElement,
- IndexConstants.IS_INVOKED_BY,
- location);
+ nameElement, IndexConstants.IS_INVOKED_BY, location);
}
_recordImportElementReferenceWithoutPrefix(name);
super.visitMethodInvocation(node);
@@ -424,7 +415,7 @@
int end = node.constructorName.end;
location = _createLocationForOffset(start, end - start);
} else {
- int start = node.keyword.end;
+ int start = node.thisKeyword.end;
location = _createLocationForOffset(start, 0);
}
recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
@@ -438,9 +429,7 @@
// name in declaration
if (node.inDeclarationContext()) {
recordRelationship(
- nameElement,
- IndexConstants.NAME_IS_DEFINED_BY,
- location);
+ nameElement, IndexConstants.NAME_IS_DEFINED_BY, location);
return;
}
// prepare information
@@ -456,26 +445,20 @@
bool inSetterContext = node.inSetterContext();
if (inGetterContext && inSetterContext) {
_store.recordRelationship(
- nameElement,
- IndexConstants.IS_READ_WRITTEN_BY,
- location);
+ nameElement, IndexConstants.IS_READ_WRITTEN_BY, location);
} else if (inGetterContext) {
_store.recordRelationship(
- nameElement,
- IndexConstants.IS_READ_BY,
- location);
+ nameElement, IndexConstants.IS_READ_BY, location);
} else if (inSetterContext) {
_store.recordRelationship(
- nameElement,
- IndexConstants.IS_WRITTEN_BY,
- location);
+ nameElement, IndexConstants.IS_WRITTEN_BY, location);
}
}
// this.field parameter
if (element is FieldFormalParameterElement) {
- Relationship relationship = peekElement() == element ?
- IndexConstants.IS_WRITTEN_BY :
- IndexConstants.IS_REFERENCED_BY;
+ Relationship relationship = peekElement() == element
+ ? IndexConstants.IS_WRITTEN_BY
+ : IndexConstants.IS_REFERENCED_BY;
_store.recordRelationship(element.field, relationship, location);
return;
}
@@ -497,9 +480,7 @@
bool inSetterContext = node.inSetterContext();
if (inGetterContext && inSetterContext) {
recordRelationship(
- element,
- IndexConstants.IS_READ_WRITTEN_BY,
- location);
+ element, IndexConstants.IS_READ_WRITTEN_BY, location);
} else if (inGetterContext) {
recordRelationship(element, IndexConstants.IS_READ_BY, location);
} else if (inSetterContext) {
@@ -521,7 +502,7 @@
int end = node.constructorName.end;
location = _createLocationForOffset(start, end - start);
} else {
- int start = node.keyword.end;
+ int start = node.superKeyword.end;
location = _createLocationForOffset(start, 0);
}
recordRelationship(element, IndexConstants.IS_REFERENCED_BY, location);
@@ -533,7 +514,7 @@
VariableDeclarationList variables = node.variables;
for (VariableDeclaration variableDeclaration in variables.variables) {
Element element = variableDeclaration.element;
- _recordElementDefinition(element);
+ _recordTopLevelElementDefinition(element);
}
super.visitTopLevelVariableDeclaration(node);
}
@@ -603,12 +584,8 @@
isResolved = node.bestElement != null;
}
Element element = peekElement();
- return new Location(
- element,
- node.offset,
- node.length,
- isQualified: isQualified,
- isResolved: isResolved);
+ return new Location(element, node.offset, node.length,
+ isQualified: isQualified, isResolved: isResolved);
}
/**
@@ -628,12 +605,8 @@
*/
Location _createLocationForToken(Token token, bool isResolved) {
Element element = peekElement();
- return new Location(
- element,
- token.offset,
- token.length,
- isQualified: true,
- isResolved: isResolved);
+ return new Location(element, token.offset, token.length,
+ isQualified: true, isResolved: isResolved);
}
/**
@@ -677,16 +650,6 @@
}
/**
- * Records the [Element] definition in the library and universe.
- */
- void _recordElementDefinition(Element element) {
- Location location = createLocation(element);
- Relationship relationship = IndexConstants.DEFINES;
- recordRelationship(_libraryElement, relationship, location);
- recordRelationship(UniverseElement.INSTANCE, relationship, location);
- }
-
- /**
* Records [ImportElement] reference if given [SimpleIdentifier] references some
* top-level element and not qualified with import prefix.
*/
@@ -698,14 +661,12 @@
return;
}
Element element = node.staticElement;
- ImportElement importElement =
- internal_getImportElement(_libraryElement, null, element, _importElementsMap);
+ ImportElement importElement = internal_getImportElement(
+ _libraryElement, null, element, _importElementsMap);
if (importElement != null) {
Location location = _createLocationForOffset(node.offset, 0);
recordRelationship(
- importElement,
- IndexConstants.IS_REFERENCED_BY,
- location);
+ importElement, IndexConstants.IS_REFERENCED_BY, location);
}
}
@@ -720,9 +681,7 @@
int length = info.periodEnd - offset;
Location location = _createLocationForOffset(offset, length);
recordRelationship(
- info.element,
- IndexConstants.IS_REFERENCED_BY,
- location);
+ info.element, IndexConstants.IS_REFERENCED_BY, location);
}
}
@@ -733,10 +692,8 @@
void _recordLibraryReference(UriBasedDirective node, LibraryElement library) {
if (library != null) {
Location location = _createLocationForNode(node.uri);
- recordRelationship(
- library.definingCompilationUnit,
- IndexConstants.IS_REFERENCED_BY,
- location);
+ recordRelationship(library.definingCompilationUnit,
+ IndexConstants.IS_REFERENCED_BY, location);
}
}
@@ -776,14 +733,21 @@
if (superName != null) {
Element superElement = superName.staticElement;
recordRelationship(
- superElement,
- relationship,
- _createLocationForNode(superNode));
+ superElement, relationship, _createLocationForNode(superNode));
}
}
}
/**
+ * Records the [Element] definition in the library and universe.
+ */
+ void _recordTopLevelElementDefinition(Element element) {
+ Location location = createLocation(element);
+ recordRelationship(_libraryElement, IndexConstants.DEFINES, location);
+ _store.recordTopLevelDeclaration(element);
+ }
+
+ /**
* Creates a [Location] representing declaration of the [Element].
*/
static Location createLocation(Element element) {
@@ -801,8 +765,8 @@
* [location] - the base location
* [expression] - the expression assigned at the given location
*/
- static Location _getLocationWithExpressionType(Location location,
- Expression expression) {
+ static Location _getLocationWithExpressionType(
+ Location location, Expression expression) {
if (expression != null) {
return new LocationWithData<DartType>(location, expression.bestType);
}
diff --git a/pkg/analysis_server/lib/src/services/index/index_store.dart b/pkg/analysis_server/lib/src/services/index/index_store.dart
index a3f1950..7163d16 100644
--- a/pkg/analysis_server/lib/src/services/index/index_store.dart
+++ b/pkg/analysis_server/lib/src/services/index/index_store.dart
@@ -11,7 +11,6 @@
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* A container with information computed by an index - relations between
* elements.
@@ -38,8 +37,8 @@
* Returns `true` if the given [unitElement] may be indexed, or `false` if
* belongs to a disposed [AnalysisContext], is not resolved completely, etc.
*/
- bool aboutToIndexDart(AnalysisContext context,
- CompilationUnitElement unitElement);
+ bool aboutToIndexDart(
+ AnalysisContext context, CompilationUnitElement unitElement);
/**
* Notifies the index store that we are going to index an unit with the given
@@ -80,8 +79,13 @@
* [relationship] - the [Relationship] between the given element and the
* locations to be returned
*/
- Future<List<Location>> getRelationships(Element element,
- Relationship relationship);
+ Future<List<Location>> getRelationships(
+ Element element, Relationship relationship);
+
+ /**
+ * Returns top-level [Element]s whose names satisfy to [nameFilter].
+ */
+ List<Element> getTopLevelDeclarations(ElementNameFilter nameFilter);
/**
* Records that the given [element] and [location] have the given
@@ -106,8 +110,13 @@
* [relationship] - the [Relationship] between the element and the location.
* [location] the [Location] where relationship happens.
*/
- void recordRelationship(Element element, Relationship relationship,
- Location location);
+ void recordRelationship(
+ Element element, Relationship relationship, Location location);
+
+ /**
+ * Records the declaration of the given top-level [element].
+ */
+ void recordTopLevelDeclaration(Element element);
/**
* Removes from the index all of the information associated with [context].
diff --git a/pkg/analysis_server/lib/src/services/index/local_file_index.dart b/pkg/analysis_server/lib/src/services/index/local_file_index.dart
index 940d14a..c845c11 100644
--- a/pkg/analysis_server/lib/src/services/index/local_file_index.dart
+++ b/pkg/analysis_server/lib/src/services/index/local_file_index.dart
@@ -11,16 +11,11 @@
import 'package:analysis_server/src/services/index/store/temporary_folder_file_manager.dart';
import 'package:analyzer/src/generated/engine.dart';
-
Index createLocalFileIndex() {
var fileManager = new TemporaryFolderFileManager();
var stringCodec = new StringCodec();
- var nodeManager = new FileNodeManager(
- fileManager,
- AnalysisEngine.instance.logger,
- stringCodec,
- new ContextCodec(),
- new ElementCodec(stringCodec),
- new RelationshipCodec(stringCodec));
+ var nodeManager = new FileNodeManager(fileManager,
+ AnalysisEngine.instance.logger, stringCodec, new ContextCodec(),
+ new ElementCodec(stringCodec), new RelationshipCodec(stringCodec));
return new LocalIndex(nodeManager);
}
diff --git a/pkg/analysis_server/lib/src/services/index/local_index.dart b/pkg/analysis_server/lib/src/services/index/local_index.dart
index 68a5032..e9deeda 100644
--- a/pkg/analysis_server/lib/src/services/index/local_index.dart
+++ b/pkg/analysis_server/lib/src/services/index/local_index.dart
@@ -7,8 +7,8 @@
import 'dart:async';
import 'package:analysis_server/src/services/index/index.dart';
-import 'package:analysis_server/src/services/index/index_contributor.dart' as
- contributors;
+import 'package:analysis_server/src/services/index/index_contributor.dart'
+ as contributors;
import 'package:analysis_server/src/services/index/store/split_store.dart';
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart';
@@ -16,7 +16,6 @@
import 'package:analyzer/src/generated/html.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* A local implementation of [Index].
*/
@@ -38,8 +37,8 @@
/**
* Returns all relations with [Element]s with the given [name].
*/
- Future<Map<List<String>, List<InspectLocation>>>
- findElementsByName(String name) {
+ Future<Map<List<String>, List<InspectLocation>>> findElementsByName(
+ String name) {
return _store.inspect_getElementRelations(name);
}
@@ -52,12 +51,17 @@
* places where the function is invoked.
*/
@override
- Future<List<Location>> getRelationships(Element element,
- Relationship relationship) {
+ Future<List<Location>> getRelationships(
+ Element element, Relationship relationship) {
return _store.getRelationships(element, relationship);
}
@override
+ List<Element> getTopLevelDeclarations(ElementNameFilter nameFilter) {
+ return _store.getTopLevelDeclarations(nameFilter);
+ }
+
+ @override
void indexHtmlUnit(AnalysisContext context, HtmlUnit unit) {
contributors.indexHtmlUnit(_store, context, unit);
}
diff --git a/pkg/analysis_server/lib/src/services/index/local_memory_index.dart b/pkg/analysis_server/lib/src/services/index/local_memory_index.dart
index 6f4072e..7e2c8fc 100644
--- a/pkg/analysis_server/lib/src/services/index/local_memory_index.dart
+++ b/pkg/analysis_server/lib/src/services/index/local_memory_index.dart
@@ -8,7 +8,6 @@
import 'package:analysis_server/src/services/index/local_index.dart';
import 'package:analysis_server/src/services/index/store/memory_node_manager.dart';
-
Index createLocalMemoryIndex() {
return new LocalIndex(new MemoryNodeManager());
}
diff --git a/pkg/analysis_server/lib/src/services/index/store/codec.dart b/pkg/analysis_server/lib/src/services/index/store/codec.dart
index d340abc..97e4dbb 100644
--- a/pkg/analysis_server/lib/src/services/index/store/codec.dart
+++ b/pkg/analysis_server/lib/src/services/index/store/codec.dart
@@ -13,7 +13,6 @@
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/generated/utilities_general.dart';
-
/**
* A helper that encodes/decodes [AnalysisContext]s from/to integers.
*/
@@ -64,7 +63,6 @@
}
}
-
/**
* A helper that encodes/decodes [Element]s to/from integers.
*/
@@ -104,8 +102,13 @@
* file paths instead of [Element] location URIs.
*/
int encode(Element element, bool forKey) {
- ElementLocationImpl location = element.location;
+ if (element is NameElement) {
+ String name = element.name;
+ int nameId = _stringCodec.encode(name);
+ return _encodePath(<int>[nameId]);
+ }
// check the location has a cached id
+ ElementLocationImpl location = element.location;
if (!identical(location.indexOwner, this)) {
location.indexKeyId = null;
location.indexLocationId = null;
@@ -208,8 +211,8 @@
/**
* If [usePath] is `true` then [Source] path should be used instead of URI.
*/
- List<int> _getLocationPath(Element element, ElementLocation location,
- bool usePath) {
+ List<int> _getLocationPath(
+ Element element, ElementLocation location, bool usePath) {
// prepare the location components
List<String> components = location.components;
if (usePath) {
@@ -261,7 +264,6 @@
}
}
-
/**
* A helper that encodes/decodes [Relationship]s to/from integers.
*/
@@ -281,7 +283,6 @@
}
}
-
/**
* A helper that encodes/decodes [String]s from/to integers.
*/
diff --git a/pkg/analysis_server/lib/src/services/index/store/collection.dart b/pkg/analysis_server/lib/src/services/index/store/collection.dart
index 808c55d..de2d390 100644
--- a/pkg/analysis_server/lib/src/services/index/store/collection.dart
+++ b/pkg/analysis_server/lib/src/services/index/store/collection.dart
@@ -9,14 +9,12 @@
import 'package:analyzer/src/generated/utilities_general.dart';
-
/**
* A hash map with `List<int>` keys and [int] values.
*/
class IntArrayToIntMap {
final Map<Uint32List, int> map = new HashMap<Uint32List, int>(
- equals: _intArrayEquals,
- hashCode: _intArrayHashCode);
+ equals: _intArrayEquals, hashCode: _intArrayHashCode);
/**
* Returns the value for the given [key] or null if [key] is not in the map.
@@ -65,7 +63,6 @@
}
}
-
/**
* A table mapping [int] keys to sets of [int]s.
*/
diff --git a/pkg/analysis_server/lib/src/services/index/store/memory_node_manager.dart b/pkg/analysis_server/lib/src/services/index/store/memory_node_manager.dart
index 8d43188..27832d7 100644
--- a/pkg/analysis_server/lib/src/services/index/store/memory_node_manager.dart
+++ b/pkg/analysis_server/lib/src/services/index/store/memory_node_manager.dart
@@ -11,7 +11,6 @@
import 'package:analysis_server/src/services/index/store/split_store.dart';
import 'package:analyzer/src/generated/engine.dart';
-
class MemoryNodeManager implements NodeManager {
StringCodec _stringCodec = new StringCodec();
ContextCodec _contextCodec = new ContextCodec();
diff --git a/pkg/analysis_server/lib/src/services/index/store/split_store.dart b/pkg/analysis_server/lib/src/services/index/store/split_store.dart
index bd3bec2..ab2f025 100644
--- a/pkg/analysis_server/lib/src/services/index/store/split_store.dart
+++ b/pkg/analysis_server/lib/src/services/index/store/split_store.dart
@@ -8,6 +8,7 @@
import 'dart:collection';
import 'dart:typed_data';
+import 'package:analysis_server/src/analysis_server.dart';
import 'package:analysis_server/src/services/index/index.dart';
import 'package:analysis_server/src/services/index/index_store.dart';
import 'package:analysis_server/src/services/index/store/codec.dart';
@@ -16,9 +17,22 @@
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/java_engine.dart';
import 'package:analyzer/src/generated/source.dart';
-import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analyzer/src/generated/utilities_general.dart';
+class _TopElementData {
+ final String name;
+ final int elementId;
+
+ factory _TopElementData(ElementCodec elementCodec, Element element) {
+ return new _TopElementData._(
+ element.name, elementCodec.encode(element, false));
+ }
+
+ _TopElementData._(this.name, this.elementId);
+
+ Element getElement(AnalysisContext context, ElementCodec elementCodec) {
+ return elementCodec.decode(context, elementId);
+ }
+}
/**
* A manager for files content.
@@ -50,7 +64,6 @@
Future write(String name, List<int> bytes);
}
-
/**
* A [FileManager] based [NodeManager].
*/
@@ -89,8 +102,7 @@
_DataInputStream stream = new _DataInputStream(bytes);
return _readNode(stream);
}).catchError((exception, stackTrace) {
- _logger.logError(
- 'Exception during reading index file ${name}',
+ _logger.logError('Exception during reading index file ${name}',
new CaughtException(exception, stackTrace));
});
}
@@ -124,8 +136,7 @@
return _fileManager.write(name, bytes);
});
}).catchError((exception, stackTrace) {
- _logger.logError(
- 'Exception during reading index file ${name}',
+ _logger.logError('Exception during reading index file ${name}',
new CaughtException(exception, stackTrace));
});
}
@@ -222,7 +233,6 @@
}
}
-
/**
* A single index file in-memory presentation.
*/
@@ -235,7 +245,6 @@
Map<RelationKeyData, List<LocationData>> _relations =
new HashMap<RelationKeyData, List<LocationData>>();
-
IndexNode(this.context, this._elementCodec, this._relationshipCodec);
/**
@@ -274,10 +283,7 @@
List<Location> getRelationships(Element element, Relationship relationship) {
// prepare key
RelationKeyData key = new RelationKeyData.forObject(
- _elementCodec,
- _relationshipCodec,
- element,
- relationship);
+ _elementCodec, _relationshipCodec, element, relationship);
// find LocationData(s)
List<LocationData> locationDatas = _relations[key];
if (locationDatas == null) {
@@ -306,14 +312,8 @@
_relationshipCodec.decode(key.relationshipId);
List<String> path =
_elementCodec.inspect_decodePath(location.elementId);
- result.add(
- new InspectLocation(
- name,
- relationship,
- path,
- location.offset,
- location.length,
- location.flags));
+ result.add(new InspectLocation(name, relationship, path,
+ location.offset, location.length, location.flags));
}
}
});
@@ -327,13 +327,10 @@
* [relationship] - the [Relationship] between [element] and [location].
* [location] - the [Location] where relationship happens.
*/
- void recordRelationship(Element element, Relationship relationship,
- Location location) {
+ void recordRelationship(
+ Element element, Relationship relationship, Location location) {
RelationKeyData key = new RelationKeyData.forObject(
- _elementCodec,
- _relationshipCodec,
- element,
- relationship);
+ _elementCodec, _relationshipCodec, element, relationship);
// prepare LocationData(s)
List<LocationData> locationDatas = _relations[key];
if (locationDatas == null) {
@@ -345,7 +342,6 @@
}
}
-
class InspectLocation {
final String nodeName;
final Relationship relationship;
@@ -358,7 +354,6 @@
this.length, this.flags);
}
-
/**
* A container with information about a [Location].
*/
@@ -378,7 +373,7 @@
offset = location.offset,
length = location.length,
flags = (location.isQualified ? _FLAG_QUALIFIED : 0) |
- (location.isResolved ? _FLAG_RESOLVED : 0);
+ (location.isResolved ? _FLAG_RESOLVED : 0);
@override
int get hashCode {
@@ -407,16 +402,11 @@
}
bool isQualified = (flags & _FLAG_QUALIFIED) != 0;
bool isResovled = (flags & _FLAG_RESOLVED) != 0;
- return new Location(
- element,
- offset,
- length,
- isQualified: isQualified,
- isResolved: isResovled);
+ return new Location(element, offset, length,
+ isQualified: isQualified, isResolved: isResovled);
}
}
-
/**
* A manager for [IndexNode]s.
*/
@@ -467,7 +457,6 @@
void removeNode(String name);
}
-
/**
* An [Element] to [Location] relation key.
*/
@@ -478,7 +467,8 @@
RelationKeyData.forData(this.elementId, this.relationshipId);
RelationKeyData.forObject(ElementCodec elementCodec,
- RelationshipCodec relationshipCodec, Element element, Relationship relationship)
+ RelationshipCodec relationshipCodec, Element element,
+ Relationship relationship)
: elementId = elementCodec.encode(element, true),
relationshipId = relationshipCodec.encode(relationship);
@@ -498,7 +488,6 @@
}
}
-
/**
* An [IndexStore] which keeps index information in separate nodes for each unit.
*/
@@ -509,13 +498,13 @@
ContextCodec _contextCodec;
/**
- * Information about "universe" elements.
+ * Information about top-level elements.
* We need to keep them together to avoid loading of all index nodes.
*
- * Order of keys: contextId, nodeId, Relationship.
+ * Order of keys: contextId, nodeId.
*/
- Map<int, Map<int, Map<Relationship, List<LocationData>>>> _contextNodeRelations =
- new HashMap<int, Map<int, Map<Relationship, List<LocationData>>>>();
+ Map<int, Map<int, List<_TopElementData>>> _topDeclarations =
+ new Map<int, Map<int, List<_TopElementData>>>();
/**
* The mapping of library [Source] to the [Source]s of part units.
@@ -586,8 +575,8 @@
}
@override
- bool aboutToIndexDart(AnalysisContext context,
- CompilationUnitElement unitElement) {
+ bool aboutToIndexDart(
+ AnalysisContext context, CompilationUnitElement unitElement) {
// may be already disposed in other thread
if (context.isDisposed) {
return false;
@@ -647,8 +636,8 @@
_currentNodeNameId = _stringCodec.encode(_currentNodeName);
_currentNode = _nodeManager.newNode(context);
_currentContextId = _contextCodec.encode(context);
- // remove Universe information for the current node
- for (Map<int, dynamic> nodeRelations in _contextNodeRelations.values) {
+ // remove top-level information for the current node
+ for (Map<int, dynamic> nodeRelations in _topDeclarations.values) {
nodeRelations.remove(_currentNodeNameId);
}
// done
@@ -677,7 +666,7 @@
@override
void clear() {
- _contextNodeRelations.clear();
+ _topDeclarations.clear();
_nodeManager.clear();
_relToNameMap.clear();
}
@@ -693,13 +682,8 @@
}
}
- Future<List<Location>> getRelationships(Element element,
- Relationship relationship) {
- // special support for UniverseElement
- if (identical(element, UniverseElement.INSTANCE)) {
- List<Location> locations = _getRelationshipsUniverse(relationship);
- return new Future.value(locations);
- }
+ Future<List<Location>> getRelationships(
+ Element element, Relationship relationship) {
// prepare node names
List<int> nodeNameIds;
{
@@ -735,13 +719,33 @@
});
}
+ List<Element> getTopLevelDeclarations(ElementNameFilter nameFilter) {
+ List<Element> elements = <Element>[];
+ _topDeclarations.forEach((contextId, contextLocations) {
+ AnalysisContext context = _contextCodec.decode(contextId);
+ if (context != null) {
+ for (List<_TopElementData> topDataList in contextLocations.values) {
+ for (_TopElementData topData in topDataList) {
+ if (nameFilter(topData.name)) {
+ Element element = topData.getElement(context, _elementCodec);
+ if (element != null) {
+ elements.add(element);
+ }
+ }
+ }
+ }
+ }
+ });
+ return elements;
+ }
+
/**
* Returns all relations with [Element]s with the given [name].
*/
- Future<Map<List<String>, List<InspectLocation>>>
- inspect_getElementRelations(String name) {
- Map<List<String>, List<InspectLocation>> result = <List<String>,
- List<InspectLocation>>{};
+ Future<Map<List<String>, List<InspectLocation>>> inspect_getElementRelations(
+ String name) {
+ Map<List<String>, List<InspectLocation>> result =
+ <List<String>, List<InspectLocation>>{};
// prepare elements
Map<int, List<String>> elementMap = _elementCodec.inspect_getElements(name);
// prepare relations with each element
@@ -775,24 +779,37 @@
}
@override
- void recordRelationship(Element element, Relationship relationship,
- Location location) {
+ void recordRelationship(
+ Element element, Relationship relationship, Location location) {
if (element == null || element.location == null) {
return;
}
if (location == null) {
return;
}
- // special support for UniverseElement
- if (identical(element, UniverseElement.INSTANCE)) {
- _recordRelationshipUniverse(relationship, location);
- return;
- }
// other elements
_recordNodeNameForElement(element, relationship);
_currentNode.recordRelationship(element, relationship, location);
}
+ void recordTopLevelDeclaration(Element element) {
+ // in current context
+ Map<int, List<_TopElementData>> nodeDeclarations =
+ _topDeclarations[_currentContextId];
+ if (nodeDeclarations == null) {
+ nodeDeclarations = new Map<int, List<_TopElementData>>();
+ _topDeclarations[_currentContextId] = nodeDeclarations;
+ }
+ // in current node
+ List<_TopElementData> declarations = nodeDeclarations[_currentNodeNameId];
+ if (declarations == null) {
+ declarations = <_TopElementData>[];
+ nodeDeclarations[_currentNodeNameId] = declarations;
+ }
+ // record LocationData
+ declarations.add(new _TopElementData(_elementCodec, element));
+ }
+
@override
void removeContext(AnalysisContext context) {
if (context == null) {
@@ -803,7 +820,7 @@
// remove context information
_contextToLibraryToUnits.remove(context);
_contextToUnitToLibraries.remove(context);
- _contextNodeRelations.remove(_contextCodec.encode(context));
+ _topDeclarations.remove(_contextCodec.encode(context));
// remove context from codec
_contextCodec.remove(context);
}
@@ -864,31 +881,8 @@
}
}
- List<Location> _getRelationshipsUniverse(Relationship relationship) {
- List<Location> locations = <Location>[];
- _contextNodeRelations.forEach((contextId, contextRelations) {
- AnalysisContext context = _contextCodec.decode(contextId);
- if (context != null) {
- for (Map<Relationship, List<LocationData>> nodeRelations in
- contextRelations.values) {
- List<LocationData> nodeLocations = nodeRelations[relationship];
- if (nodeLocations != null) {
- for (LocationData locationData in nodeLocations) {
- Location location =
- locationData.getLocation(context, _elementCodec);
- if (location != null) {
- locations.add(location);
- }
- }
- }
- }
- }
- });
- return locations;
- }
-
- void _recordLibraryWithUnit(AnalysisContext context, Source library,
- Source unit) {
+ void _recordLibraryWithUnit(
+ AnalysisContext context, Source library, Source unit) {
Map<Source, Set<Source>> libraryToUnits = _contextToLibraryToUnits[context];
if (libraryToUnits == null) {
libraryToUnits = new HashMap<Source, Set<Source>>();
@@ -912,34 +906,8 @@
nameToNodeNames.add(nameId, _currentNodeNameId);
}
- void _recordRelationshipUniverse(Relationship relationship,
- Location location) {
- // in current context
- Map<int, Map<Relationship, List<LocationData>>> nodeRelations =
- _contextNodeRelations[_currentContextId];
- if (nodeRelations == null) {
- nodeRelations = new HashMap<int, Map<Relationship, List<LocationData>>>();
- _contextNodeRelations[_currentContextId] = nodeRelations;
- }
- // in current node
- Map<Relationship, List<LocationData>> relations =
- nodeRelations[_currentNodeNameId];
- if (relations == null) {
- relations = new HashMap<Relationship, List<LocationData>>();
- nodeRelations[_currentNodeNameId] = relations;
- }
- // for the given relationship
- List<LocationData> locations = relations[relationship];
- if (locations == null) {
- locations = <LocationData>[];
- relations[relationship] = locations;
- }
- // record LocationData
- locations.add(new LocationData.forObject(_elementCodec, location));
- }
-
- void _recordUnitInLibrary(AnalysisContext context, Source library,
- Source unit) {
+ void _recordUnitInLibrary(
+ AnalysisContext context, Source library, Source unit) {
Map<Source, Set<Source>> unitToLibraries =
_contextToUnitToLibraries[context];
if (unitToLibraries == null) {
@@ -969,10 +937,10 @@
// remove source
_sources.remove(library);
_sources.remove(unit);
- // remove universe relations
+ // remove top-level relations
{
int contextId = _contextCodec.encode(context);
- Map<int, Object> nodeRelations = _contextNodeRelations[contextId];
+ Map<int, dynamic> nodeRelations = _topDeclarations[contextId];
if (nodeRelations != null) {
nodeRelations.remove(nodeNameId);
}
@@ -980,7 +948,6 @@
}
}
-
class _DataInputStream {
ByteData _byteData;
int _byteOffset = 0;
@@ -997,7 +964,6 @@
}
}
-
class _DataOutputStream {
static const LIST_SIZE = 1024;
int _size = LIST_SIZE;
diff --git a/pkg/analysis_server/lib/src/services/index/store/temporary_folder_file_manager.dart b/pkg/analysis_server/lib/src/services/index/store/temporary_folder_file_manager.dart
index 653be9e..9ba9473 100644
--- a/pkg/analysis_server/lib/src/services/index/store/temporary_folder_file_manager.dart
+++ b/pkg/analysis_server/lib/src/services/index/store/temporary_folder_file_manager.dart
@@ -10,7 +10,6 @@
import 'package:analysis_server/src/services/index/store/split_store.dart';
import 'package:path/path.dart' as pathos;
-
/**
* An implementation of [FileManager] that keeps each file in a separate file
* in a temporary folder.
@@ -48,8 +47,7 @@
File file = _getFile(name);
try {
file.deleteSync();
- } catch (e) {
- }
+ } catch (e) {}
}
@override
diff --git a/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart b/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart
index c6ed68c..884b4b3 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart
@@ -18,12 +18,11 @@
import 'package:analyzer/src/generated/scanner.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* [ConvertMethodToGetterRefactoring] implementation.
*/
-class ConvertGetterToMethodRefactoringImpl extends RefactoringImpl implements
- ConvertGetterToMethodRefactoring {
+class ConvertGetterToMethodRefactoringImpl extends RefactoringImpl
+ implements ConvertGetterToMethodRefactoring {
final SearchEngine searchEngine;
final PropertyAccessorElement element;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart b/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart
index b1d0d58..e0182cc 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart
@@ -17,12 +17,11 @@
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* [ConvertMethodToGetterRefactoring] implementation.
*/
-class ConvertMethodToGetterRefactoringImpl extends RefactoringImpl implements
- ConvertMethodToGetterRefactoring {
+class ConvertMethodToGetterRefactoringImpl extends RefactoringImpl
+ implements ConvertMethodToGetterRefactoring {
final SearchEngine searchEngine;
final ExecutableElement element;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
index 0648eb3..e01942c 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
@@ -24,15 +24,13 @@
import 'package:analyzer/src/generated/scanner.dart';
import 'package:analyzer/src/generated/source.dart';
-
const String _TOKEN_SEPARATOR = "\uFFFF";
-
/**
* [ExtractLocalRefactoring] implementation.
*/
-class ExtractLocalRefactoringImpl extends RefactoringImpl implements
- ExtractLocalRefactoring {
+class ExtractLocalRefactoringImpl extends RefactoringImpl
+ implements ExtractLocalRefactoring {
final CompilationUnit unit;
final int selectionOffset;
final int selectionLength;
@@ -55,8 +53,8 @@
final Map<Element, int> elementIds = <Element, int>{};
final Set<String> excludedVariableNames = new Set<String>();
- ExtractLocalRefactoringImpl(this.unit, this.selectionOffset,
- this.selectionLength) {
+ ExtractLocalRefactoringImpl(
+ this.unit, this.selectionOffset, this.selectionLength) {
unitElement = unit.element;
selectionRange = new SourceRange(selectionOffset, selectionLength);
utils = new CorrectionUtils(unit);
@@ -77,10 +75,9 @@
Future<RefactoringStatus> checkFinalConditions() {
RefactoringStatus result = new RefactoringStatus();
if (excludedVariableNames.contains(name)) {
- result.addWarning(
- format(
- "A variable with name '{0}' is already defined in the visible scope.",
- name));
+ result.addWarning(format(
+ "A variable with name '{0}' is already defined in the visible scope.",
+ name));
}
return new Future.value(result);
}
@@ -153,16 +150,10 @@
String declStatement = prefix + indent + declarationSource + eol;
String exprStatement = prefix + indent + 'return ';
Expression expr = target.expression;
- doSourceChange_addElementEdit(
- change,
- unitElement,
- new SourceEdit(
- target.offset,
- expr.offset - target.offset,
- '{' + eol + declStatement + exprStatement));
- doSourceChange_addElementEdit(
- change,
- unitElement,
+ doSourceChange_addElementEdit(change, unitElement, new SourceEdit(
+ target.offset, expr.offset - target.offset,
+ '{' + eol + declStatement + exprStatement));
+ doSourceChange_addElementEdit(change, unitElement,
new SourceEdit(expr.end, 0, ';' + eol + prefix + '}'));
}
}
@@ -204,7 +195,7 @@
coveringNode.getAncestor((node) => node is Block) == null) {
return new RefactoringStatus.fatal(
'Expression inside of function must be selected '
- 'to activate this refactoring.');
+ 'to activate this refactoring.');
}
// part of string literal
if (coveringNode is StringLiteral) {
@@ -221,8 +212,7 @@
// single node selected
if (_selectionAnalyzer.selectedNodes.length == 1 &&
!utils.selectionIncludesNonWhitespaceOutsideNode(
- selectionRange,
- _selectionAnalyzer.firstSelectedNode)) {
+ selectionRange, _selectionAnalyzer.firstSelectedNode)) {
AstNode selectedNode = _selectionAnalyzer.firstSelectedNode;
if (selectedNode is Expression) {
rootExpression = selectedNode;
@@ -236,8 +226,7 @@
if (coveringNode is BinaryExpression) {
BinaryExpression binaryExpression = coveringNode;
if (utils.validateBinaryExpressionRange(
- binaryExpression,
- selectionRange)) {
+ binaryExpression, selectionRange)) {
rootExpression = binaryExpression;
singleExpression = null;
return new RefactoringStatus();
@@ -410,14 +399,12 @@
void _prepareNames() {
names.clear();
if (stringLiteralPart != null) {
- names.addAll(
- getVariableNameSuggestionsForText(stringLiteralPart, excludedVariableNames));
+ names.addAll(getVariableNameSuggestionsForText(
+ stringLiteralPart, excludedVariableNames));
} else if (singleExpression != null) {
- names.addAll(
- getVariableNameSuggestionsForExpression(
- singleExpression.staticType,
- singleExpression,
- excludedVariableNames));
+ names.addAll(getVariableNameSuggestionsForExpression(
+ singleExpression.staticType, singleExpression,
+ excludedVariableNames));
}
}
@@ -444,8 +431,8 @@
enclosingFunction = getEnclosingExecutableNode(selectionNode);
}
// visit function
- enclosingFunction.accept(
- new _OccurrencesVisitor(this, occurrences, selectionSource));
+ enclosingFunction
+ .accept(new _OccurrencesVisitor(this, occurrences, selectionSource));
}
void _prepareOffsetsLengths() {
@@ -458,7 +445,6 @@
}
}
-
/**
* [SelectionAnalyzer] for [ExtractLocalRefactoringImpl].
*/
@@ -479,8 +465,7 @@
super.visitAssignmentExpression(node);
Expression lhs = node.leftHandSide;
if (_isFirstSelectedNode(lhs)) {
- _invalidSelection(
- 'Cannot extract the left-hand side of an assignment.',
+ _invalidSelection('Cannot extract the left-hand side of an assignment.',
newLocation_fromNode(lhs));
}
return null;
@@ -522,7 +507,6 @@
bool _isFirstSelectedNode(AstNode node) => node == firstSelectedNode;
}
-
class _HasStatementVisitor extends GeneralizingAstVisitor {
bool result = false;
@@ -534,7 +518,6 @@
}
}
-
class _OccurrencesVisitor extends GeneralizingAstVisitor<Object> {
final ExtractLocalRefactoringImpl ref;
final List<SourceRange> occurrences;
@@ -634,7 +617,6 @@
}
}
-
class _TokenLocalElementVisitor extends RecursiveAstVisitor {
final Map<Token, Element> map;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index c222ff0..f6cb0b3 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -23,14 +23,12 @@
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/java_core.dart';
+import 'package:analyzer/src/generated/resolver.dart' show ExitDetector;
import 'package:analyzer/src/generated/scanner.dart';
import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/resolver.dart' show ExitDetector;
-
const String _TOKEN_SEPARATOR = '\uFFFF';
-
/**
* Returns the "normalized" version of the given source, which is reconstructed
* from tokens, so ignores all the comments and spaces.
@@ -40,7 +38,6 @@
return StringUtils.join(selectionTokens, _TOKEN_SEPARATOR);
}
-
/**
* Returns the [Map] which maps [map] values to their keys.
*/
@@ -52,27 +49,29 @@
return result;
}
-
/**
* [ExtractMethodRefactoring] implementation.
*/
-class ExtractMethodRefactoringImpl extends RefactoringImpl implements
- ExtractMethodRefactoring {
+class ExtractMethodRefactoringImpl extends RefactoringImpl
+ implements ExtractMethodRefactoring {
static const ERROR_EXITS =
'Selected statements contain a return statement, but not all possible '
- 'execuion flows exit. Semantics may not be preserved.';
+ 'execuion flows exit. Semantics may not be preserved.';
final SearchEngine searchEngine;
final CompilationUnit unit;
final int selectionOffset;
final int selectionLength;
CompilationUnitElement unitElement;
+ LibraryElement libraryElement;
SourceRange selectionRange;
CorrectionUtils utils;
+ Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
String returnType;
String name;
bool extractAll = true;
+ bool canCreateGetter = false;
bool createGetter = false;
final List<String> names = <String>[];
final List<int> offsets = <int>[];
@@ -81,10 +80,10 @@
Set<String> _usedNames = new Set<String>();
Set<String> _excludedNames = new Set<String>();
List<RefactoringMethodParameter> _parameters = <RefactoringMethodParameter>[];
- Map<String, RefactoringMethodParameter> _parametersMap = <String,
- RefactoringMethodParameter>{};
- Map<String, List<SourceRange>> _parameterReferencesMap = <String,
- List<SourceRange>>{};
+ Map<String, RefactoringMethodParameter> _parametersMap =
+ <String, RefactoringMethodParameter>{};
+ Map<String, List<SourceRange>> _parameterReferencesMap =
+ <String, List<SourceRange>>{};
DartType _returnType;
String _returnVariableName;
AstNode _parentMember;
@@ -97,25 +96,11 @@
ExtractMethodRefactoringImpl(this.searchEngine, this.unit,
this.selectionOffset, this.selectionLength) {
unitElement = unit.element;
+ libraryElement = unitElement.library;
selectionRange = new SourceRange(selectionOffset, selectionLength);
utils = new CorrectionUtils(unit);
}
- bool get canCreateGetter {
- if (!parameters.isEmpty) {
- return false;
- }
- if (_selectionExpression != null) {
- if (_selectionExpression is AssignmentExpression) {
- return false;
- }
- }
- if (_selectionStatements != null) {
- return returnType != 'void';
- }
- return true;
- }
-
@override
List<RefactoringMethodParameter> get parameters => _parameters;
@@ -178,7 +163,6 @@
return result;
}
-
@override
Future<RefactoringStatus> checkInitialConditions() {
RefactoringStatus result = new RefactoringStatus();
@@ -190,10 +174,12 @@
// prepare parts
result.addStatus(_initializeParameters());
_initializeReturnType();
- _initializeGetter();
// occurrences
_initializeOccurrences();
_prepareOffsetsLengths();
+ // getter
+ canCreateGetter = _computeCanCreateGetter();
+ _initializeCreateGetter();
// names
_prepareExcludedNames();
_prepareNames();
@@ -214,7 +200,7 @@
}
@override
- Future<SourceChange> createChange() {
+ Future<SourceChange> createChange() async {
SourceChange change = new SourceChange(refactoringName);
// replace occurrences with method invocation
for (_Occurrence occurence in _occurrences) {
@@ -309,12 +295,8 @@
// expression
if (_selectionExpression != null) {
// add return type
- Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
- // TODO(scheglov) use librariesToImport
- String returnTypeName =
- utils.getExpressionTypeSource(_selectionExpression, librariesToImport);
- if (returnTypeName != null && returnTypeName != 'dynamic') {
- annotations += '${returnTypeName} ';
+ if (returnType.isNotEmpty) {
+ annotations += '$returnType ';
}
// just return expression
declarationSource =
@@ -337,13 +319,14 @@
// insert declaration
if (declarationSource != null) {
int offset = _parentMember.end;
- SourceEdit edit =
- new SourceEdit(offset, 0, '${eol}${eol}${prefix}${declarationSource}');
+ SourceEdit edit = new SourceEdit(
+ offset, 0, '${eol}${eol}${prefix}${declarationSource}');
doSourceChange_addElementEdit(change, unitElement, edit);
}
}
// done
- return new Future.value(change);
+ addLibraryImports(change, libraryElement, librariesToImport);
+ return change;
}
@override
@@ -373,8 +356,9 @@
}
}
if (_usedNames.contains(parameter.name)) {
- result.addError(
- format("'{0}' is already used as a name in the selected code", parameter.name));
+ result.addError(format(
+ "'{0}' is already used as a name in the selected code",
+ parameter.name));
return result;
}
}
@@ -384,7 +368,7 @@
/**
* Checks if created method will shadow or will be shadowed by other elements.
*/
- Future<RefactoringStatus> _checkPossibleConflicts() {
+ Future<RefactoringStatus> _checkPossibleConflicts() async {
RefactoringStatus result = new RefactoringStatus();
AstNode parent = _parentMember.parent;
// top-level function
@@ -424,8 +408,7 @@
// single expression selected
if (selectedNodes.length == 1 &&
!utils.selectionIncludesNonWhitespaceOutsideNode(
- selectionRange,
- selectionAnalyzer.firstSelectedNode)) {
+ selectionRange, selectionAnalyzer.firstSelectedNode)) {
AstNode selectedNode = selectionAnalyzer.firstSelectedNode;
if (selectedNode is Expression) {
_selectionExpression = selectedNode;
@@ -459,6 +442,32 @@
}
/**
+ * Initializes [canCreateGetter] flag.
+ */
+ bool _computeCanCreateGetter() {
+ // is a function expression
+ if (_selectionFunctionExpression != null) {
+ return false;
+ }
+ // has parameters
+ if (!parameters.isEmpty) {
+ return false;
+ }
+ // is assignment
+ if (_selectionExpression != null) {
+ if (_selectionExpression is AssignmentExpression) {
+ return false;
+ }
+ }
+ // doesn't return a value
+ if (_selectionStatements != null) {
+ return returnType != 'void';
+ }
+ // OK
+ return true;
+ }
+
+ /**
* Returns the selected [Expression] source, with applying new parameter
* names.
*/
@@ -470,11 +479,8 @@
List<SourceRange> ranges = _parameterReferencesMap[parameter.id];
if (ranges != null) {
for (SourceRange range in ranges) {
- replaceEdits.add(
- new SourceEdit(
- range.offset - selectionRange.offset,
- range.length,
- parameter.name));
+ replaceEdits.add(new SourceEdit(range.offset - selectionRange.offset,
+ range.length, parameter.name));
}
}
}
@@ -512,10 +518,14 @@
return pattern;
}
+ String _getTypeCode(DartType type) {
+ return utils.getTypeSource(type, librariesToImport);
+ }
+
/**
* Initializes [createGetter] flag.
*/
- void _initializeGetter() {
+ void _initializeCreateGetter() {
createGetter = false;
// maybe we cannot at all
if (!canCreateGetter) {
@@ -554,11 +564,8 @@
// prepare an enclosing parent - class or unit
AstNode enclosingMemberParent = _parentMember.parent;
// visit nodes which will able to access extracted method
- enclosingMemberParent.accept(
- new _InitializeOccurrencesVisitor(
- this,
- selectionPattern,
- patternToSelectionName));
+ enclosingMemberParent.accept(new _InitializeOccurrencesVisitor(
+ this, selectionPattern, patternToSelectionName));
}
/**
@@ -597,7 +604,7 @@
if (_returnType != null) {
result.addFatalError(
'Ambiguous return value: Selected block contains assignment(s) to '
- 'local variables and return statement.');
+ 'local variables and return statement.');
return result;
}
// prepare to return an assigned variable
@@ -612,23 +619,22 @@
sb.write(variable.displayName);
sb.write('\n');
}
- result.addFatalError(
- format(
- 'Ambiguous return value: Selected block contains more than one '
- 'assignment to local variables. Affected variables are:\n\n{0}',
- sb.toString().trim()));
+ result.addFatalError(format(
+ 'Ambiguous return value: Selected block contains more than one '
+ 'assignment to local variables. Affected variables are:\n\n{0}',
+ sb.toString().trim()));
}
// done
return result;
}
void _initializeReturnType() {
- if (_returnType == null) {
+ if (_selectionFunctionExpression != null) {
+ returnType = '';
+ } else if (_returnType == null) {
returnType = 'void';
} else {
- Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
- // TODO(scheglov) use librariesToImport
- returnType = utils.getTypeSource(_returnType, librariesToImport);
+ returnType = _getTypeCode(_returnType);
}
if (returnType == 'dynamic') {
returnType = '';
@@ -684,11 +690,9 @@
void _prepareNames() {
names.clear();
if (_selectionExpression != null) {
- names.addAll(
- getVariableNameSuggestionsForExpression(
- _selectionExpression.staticType,
- _selectionExpression,
- _excludedNames));
+ names.addAll(getVariableNameSuggestionsForExpression(
+ _selectionExpression.staticType, _selectionExpression,
+ _excludedNames));
}
}
@@ -720,7 +724,6 @@
}
}
-
/**
* [SelectionAnalyzer] for [ExtractMethodRefactoringImpl].
*/
@@ -739,7 +742,7 @@
super.handleSelectionEndsIn(node);
invalidSelection(
'The selection does not cover a set of statements or an expression. '
- 'Extend selection to a valid range.');
+ 'Extend selection to a valid range.');
}
@override
@@ -747,8 +750,7 @@
super.visitAssignmentExpression(node);
Expression lhs = node.leftHandSide;
if (_isFirstSelectedNode(lhs)) {
- invalidSelection(
- 'Cannot extract the left-hand side of an assignment.',
+ invalidSelection('Cannot extract the left-hand side of an assignment.',
newLocation_fromNode(lhs));
}
return null;
@@ -758,10 +760,8 @@
Object visitConstructorInitializer(ConstructorInitializer node) {
super.visitConstructorInitializer(node);
if (_isFirstSelectedNode(node)) {
- invalidSelection(
- 'Cannot extract a constructor initializer. '
- 'Select expression part of initializer.',
- newLocation_fromNode(node));
+ invalidSelection('Cannot extract a constructor initializer. '
+ 'Select expression part of initializer.', newLocation_fromNode(node));
}
return null;
}
@@ -813,10 +813,8 @@
Object visitVariableDeclaration(VariableDeclaration node) {
super.visitVariableDeclaration(node);
if (_isFirstSelectedNode(node)) {
- invalidSelection(
- 'Cannot extract a variable declaration fragment. '
- 'Select whole declaration statement.',
- newLocation_fromNode(node));
+ invalidSelection('Cannot extract a variable declaration fragment. '
+ 'Select whole declaration statement.', newLocation_fromNode(node));
}
return null;
}
@@ -836,7 +834,6 @@
bool _isFirstSelectedNode(AstNode node) => identical(firstSelectedNode, node);
}
-
class _GetSourcePatternVisitor extends GeneralizingAstVisitor {
final SourceRange partRange;
final _SourcePattern pattern;
@@ -863,18 +860,13 @@
patternName = '__refVar${pattern.originalToPatternNames.length}';
pattern.originalToPatternNames[originalName] = patternName;
}
- replaceEdits.add(
- new SourceEdit(
- nodeRange.offset - partRange.offset,
- nodeRange.length,
- patternName));
+ replaceEdits.add(new SourceEdit(nodeRange.offset - partRange.offset,
+ nodeRange.length, patternName));
}
}
}
}
-
-
class _HasMethodInvocationVisitor extends RecursiveAstVisitor {
bool result = false;
@@ -884,13 +876,11 @@
}
}
-
class _HasReturnStatementVisitor extends RecursiveAstVisitor {
bool hasReturn = false;
@override
- visitBlockFunctionBody(BlockFunctionBody node) {
- }
+ visitBlockFunctionBody(BlockFunctionBody node) {}
@override
visitReturnStatement(ReturnStatement node) {
@@ -898,7 +888,6 @@
}
}
-
class _InitializeOccurrencesVisitor extends GeneralizingAstVisitor<Object> {
final ExtractMethodRefactoringImpl ref;
final _SourcePattern selectionPattern;
@@ -906,8 +895,8 @@
bool forceStatic = false;
- _InitializeOccurrencesVisitor(this.ref, this.selectionPattern,
- this.patternToSelectionName);
+ _InitializeOccurrencesVisitor(
+ this.ref, this.selectionPattern, this.patternToSelectionName);
@override
Object visitBlock(Block node) {
@@ -992,8 +981,7 @@
int beginStatementIndex = 0;
int selectionCount = ref._selectionStatements.length;
while (beginStatementIndex + selectionCount <= statements.length) {
- SourceRange nodeRange = rangeStartEnd(
- statements[beginStatementIndex],
+ SourceRange nodeRange = rangeStartEnd(statements[beginStatementIndex],
statements[beginStatementIndex + selectionCount - 1]);
bool found = _tryToFindOccurrence(nodeRange);
// next statement
@@ -1032,15 +1020,10 @@
ref._parametersMap[variableName];
if (parameter == null) {
DartType parameterType = node.bestType;
- Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
- // TODO(scheglov) use librariesToImport
- String parameterTypeName =
- ref.utils.getTypeSource(parameterType, librariesToImport);
+ String parameterTypeCode = ref._getTypeCode(parameterType);
parameter = new RefactoringMethodParameter(
- RefactoringMethodParameterKind.REQUIRED,
- parameterTypeName,
- variableName,
- id: variableName);
+ RefactoringMethodParameterKind.REQUIRED, parameterTypeCode,
+ variableName, id: variableName);
ref._parameters.add(parameter);
ref._parametersMap[variableName] = parameter;
}
@@ -1064,7 +1047,6 @@
}
}
-
class _IsUsedAfterSelectionVisitor extends GeneralizingAstVisitor {
final ExtractMethodRefactoringImpl ref;
final VariableElement element;
@@ -1084,7 +1066,6 @@
}
}
-
/**
* Description of a single occurrence of the selected expression or set of
* statements.
@@ -1098,7 +1079,6 @@
_Occurrence(this.range, this.isSelection);
}
-
class _ResetCanCreateGetterVisitor extends RecursiveAstVisitor {
final ExtractMethodRefactoringImpl ref;
@@ -1129,13 +1109,11 @@
}
}
-
class _ReturnTypeComputer extends RecursiveAstVisitor {
DartType returnType;
@override
- visitBlockFunctionBody(BlockFunctionBody node) {
- }
+ visitBlockFunctionBody(BlockFunctionBody node) {}
@override
visitReturnStatement(ReturnStatement node) {
@@ -1162,7 +1140,6 @@
}
}
-
/**
* Generalized version of some source, in which references to the specific
* variables are replaced with pattern variables, with back mapping from the
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
index 064021a..a9b6e79 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
@@ -19,12 +19,11 @@
import 'package:analyzer/src/generated/scanner.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* [InlineLocalRefactoring] implementation.
*/
-class InlineLocalRefactoringImpl extends RefactoringImpl implements
- InlineLocalRefactoring {
+class InlineLocalRefactoringImpl extends RefactoringImpl
+ implements InlineLocalRefactoring {
final SearchEngine searchEngine;
final CompilationUnit unit;
final int offset;
@@ -83,7 +82,7 @@
if (!_isVariableDeclaredInStatement()) {
result = new RefactoringStatus.fatal(
'Local variable declaration or reference must be selected '
- 'to activate this refactoring.');
+ 'to activate this refactoring.');
return new Future.value(result);
}
// should have initializer at declaration
@@ -91,8 +90,8 @@
String message = format(
"Local variable '{0}' is not initialized at declaration.",
_variableElement.displayName);
- result =
- new RefactoringStatus.fatal(message, newLocation_fromNode(_variableNode));
+ result = new RefactoringStatus.fatal(
+ message, newLocation_fromNode(_variableNode));
return new Future.value(result);
}
// prepare references
@@ -101,11 +100,11 @@
for (SearchMatch reference in _references) {
if (reference.kind != MatchKind.READ) {
String message = format(
- "Local variable '{0}' is assigned more than once.",
- [_variableElement.displayName]);
+ "Local variable '{0}' is assigned more than once.", [
+ _variableElement.displayName
+ ]);
return new RefactoringStatus.fatal(
- message,
- newLocation_fromMatch(reference));
+ message, newLocation_fromMatch(reference));
}
}
// done
@@ -117,13 +116,11 @@
SourceChange change = new SourceChange(refactoringName);
// remove declaration
{
- Statement declarationStatement =
- _variableNode.getAncestor((node) => node is VariableDeclarationStatement);
+ Statement declarationStatement = _variableNode
+ .getAncestor((node) => node is VariableDeclarationStatement);
SourceRange range = utils.getLinesRangeStatements([declarationStatement]);
doSourceChange_addElementEdit(
- change,
- unitElement,
- newSourceEdit_range(range, ''));
+ change, unitElement, newSourceEdit_range(range, ''));
}
// prepare initializer
Expression initializer = _variableNode.initializer;
@@ -168,9 +165,7 @@
}
// do replace
doSourceChange_addElementEdit(
- change,
- unitElement,
- newSourceEdit_range(range, codeForReference));
+ change, unitElement, newSourceEdit_range(range, codeForReference));
}
// done
return new Future.value(change);
@@ -194,8 +189,8 @@
return false;
}
- static bool _shouldBeExpressionInterpolation(InterpolationExpression target,
- Expression expression) {
+ static bool _shouldBeExpressionInterpolation(
+ InterpolationExpression target, Expression expression) {
TokenType targetType = target.beginToken.type;
return targetType == TokenType.STRING_INTERPOLATION_IDENTIFIER &&
expression is! SimpleIdentifier;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
index dbbbe21..fb8791f 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
@@ -21,7 +21,6 @@
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/generated/utilities_dart.dart';
-
/**
* Returns the [SourceRange] to find conflicting locals in.
*/
@@ -42,7 +41,6 @@
return SourceRange.EMPTY;
}
-
/**
* Returns the source which should replace given invocation with given
* arguments.
@@ -74,8 +72,7 @@
} else {
// report about a missing required parameter
if (parameter.parameterKind == ParameterKind.REQUIRED) {
- status.addError(
- 'No argument for the parameter "${parameter.name}".',
+ status.addError('No argument for the parameter "${parameter.name}".',
newLocation_fromNode(contextNode));
return;
}
@@ -146,7 +143,6 @@
return SourceEdit.applySequence(part._source, edits);
}
-
/**
* Returns the names which will shadow or will be shadowed by any declaration
* at [node].
@@ -188,12 +184,11 @@
return result;
}
-
/**
* [InlineMethodRefactoring] implementation.
*/
-class InlineMethodRefactoringImpl extends RefactoringImpl implements
- InlineMethodRefactoring {
+class InlineMethodRefactoringImpl extends RefactoringImpl
+ implements InlineMethodRefactoring {
final SearchEngine searchEngine;
final CompilationUnit unit;
final int offset;
@@ -266,9 +261,7 @@
SourceRange methodRange = rangeNode(_methodNode);
SourceRange linesRange = _methodUtils.getLinesRange(methodRange);
doSourceChange_addElementEdit(
- change,
- _methodElement,
- newSourceEdit_range(linesRange, ''));
+ change, _methodElement, newSourceEdit_range(linesRange, ''));
}
// done
return new Future.value(result);
@@ -418,14 +411,12 @@
}
}
-
class _ParameterOccurrence {
final int parentPrecedence;
final SourceRange range;
_ParameterOccurrence(this.parentPrecedence, this.range);
}
-
/**
* Processor for single [SearchMatch] reference to [methodElement].
*/
@@ -505,25 +496,17 @@
// we don't support cascade
if (cascaded) {
status.addError(
- 'Cannot inline cascade invocation.',
- newLocation_fromNode(usage));
+ 'Cannot inline cascade invocation.', newLocation_fromNode(usage));
}
// can we inline method body into "methodUsage" block?
if (_canInlineBody(usage)) {
// insert non-return statements
if (ref._methodStatementsPart != null) {
// prepare statements source for invocation
- String source = _getMethodSourceForInvocation(
- status,
- ref._methodStatementsPart,
- _refUtils,
- usage,
- target,
- arguments);
+ String source = _getMethodSourceForInvocation(status,
+ ref._methodStatementsPart, _refUtils, usage, target, arguments);
source = _refUtils.replaceSourceIndent(
- source,
- ref._methodStatementsPart._prefix,
- _refPrefix);
+ source, ref._methodStatementsPart._prefix, _refPrefix);
// do insert
SourceRange range = rangeStartLength(_refLineRange, 0);
SourceEdit edit = newSourceEdit_range(range, source);
@@ -532,13 +515,8 @@
// replace invocation with return expression
if (ref._methodExpressionPart != null) {
// prepare expression source for invocation
- String source = _getMethodSourceForInvocation(
- status,
- ref._methodExpressionPart,
- _refUtils,
- usage,
- target,
- arguments);
+ String source = _getMethodSourceForInvocation(status,
+ ref._methodExpressionPart, _refUtils, usage, target, arguments);
if (getExpressionPrecedence(ref._methodExpression) <
getExpressionParentPrecedence(usage)) {
source = "(${source})";
@@ -556,8 +534,8 @@
// inline as closure invocation
String source;
{
- source = ref._methodUtils.getRangeText(
- rangeStartEnd(ref._methodParameters.leftParenthesis, ref._methodNode));
+ source = ref._methodUtils.getRangeText(rangeStartEnd(
+ ref._methodParameters.leftParenthesis, ref._methodNode));
String methodPrefix =
ref._methodUtils.getLinePrefix(ref._methodNode.offset);
source = _refUtils.replaceSourceIndent(source, methodPrefix, _refPrefix);
@@ -581,16 +559,11 @@
Expression target = invocation.target;
List<Expression> arguments = invocation.argumentList.arguments;
_inlineMethodInvocation(
- status,
- invocation,
- invocation.isCascaded,
- target,
- arguments);
+ status, invocation, invocation.isCascaded, target, arguments);
} else {
// cannot inline reference to method: var v = new A().method;
if (ref._methodElement is MethodElement) {
- status.addFatalError(
- 'Cannot inline class method reference.',
+ status.addFatalError('Cannot inline class method reference.',
newLocation_fromNode(_node));
return;
}
@@ -625,8 +598,8 @@
// not invocation, just reference to function
String source;
{
- source = ref._methodUtils.getRangeText(
- rangeStartEnd(ref._methodParameters.leftParenthesis, ref._methodNode));
+ source = ref._methodUtils.getRangeText(rangeStartEnd(
+ ref._methodParameters.leftParenthesis, ref._methodNode));
String methodPrefix =
ref._methodUtils.getLinePrefix(ref._methodNode.offset);
source =
@@ -719,8 +692,8 @@
_implicitThisOffsets.add(offset - _base);
}
- void addParameterOccurrence(ParameterElement parameter, SourceRange range,
- int precedence) {
+ void addParameterOccurrence(
+ ParameterElement parameter, SourceRange range, int precedence) {
if (parameter != null) {
List<_ParameterOccurrence> occurrences = _parameters[parameter];
if (occurrences == null) {
@@ -832,9 +805,7 @@
SourceRange nodeRange = rangeNode(node);
int parentPrecedence = getExpressionParentPrecedence(node);
result.addParameterOccurrence(
- parameterElement,
- nodeRange,
- parentPrecedence);
+ parameterElement, nodeRange, parentPrecedence);
}
void _addVariable(SimpleIdentifier node) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart b/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
index 0811b75..fe1cbe0 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
@@ -16,12 +16,11 @@
import 'package:analyzer/src/generated/source.dart';
import 'package:path/path.dart' as pathos;
-
/**
* [ExtractLocalRefactoring] implementation.
*/
-class MoveFileRefactoringImpl extends RefactoringImpl implements
- MoveFileRefactoring {
+class MoveFileRefactoringImpl extends RefactoringImpl
+ implements MoveFileRefactoring {
final pathos.Context pathContext;
final SearchEngine searchEngine;
final AnalysisContext context;
@@ -35,8 +34,8 @@
String oldLibraryDir;
String newLibraryDir;
- MoveFileRefactoringImpl(this.pathContext, this.searchEngine, this.context,
- this.source) {
+ MoveFileRefactoringImpl(
+ this.pathContext, this.searchEngine, this.context, this.source) {
oldFile = source.fullName;
}
@@ -147,9 +146,7 @@
int uriOffset = element.uriOffset;
int uriLength = element.uriEnd - uriOffset;
doSourceChange_addElementEdit(
- change,
- library,
- new SourceEdit(uriOffset, uriLength, "'$newUri'"));
+ change, library, new SourceEdit(uriOffset, uriLength, "'$newUri'"));
}
}
}
diff --git a/pkg/analysis_server/lib/src/services/refactoring/naming_conventions.dart b/pkg/analysis_server/lib/src/services/refactoring/naming_conventions.dart
index 2f27c12..3503311 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/naming_conventions.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/naming_conventions.dart
@@ -7,7 +7,6 @@
import 'package:analysis_server/src/services/correction/status.dart';
import 'package:analysis_server/src/services/correction/strings.dart';
-
/**
* Returns the [RefactoringStatus] with severity:
* OK if the name is valid;
@@ -102,10 +101,8 @@
// check identifiers
List<String> identifiers = name.split('.');
for (String identifier in identifiers) {
- RefactoringStatus status = _validateIdentifier(
- identifier,
- "Library name identifier",
- "a lowercase letter or underscore");
+ RefactoringStatus status = _validateIdentifier(identifier,
+ "Library name identifier", "a lowercase letter or underscore");
if (!status.isOK) {
return status;
}
@@ -153,8 +150,8 @@
return _validateLowerCamelCase(name, "Variable");
}
-RefactoringStatus _validateIdentifier(String identifier, String desc,
- String beginDesc) {
+RefactoringStatus _validateIdentifier(
+ String identifier, String desc, String beginDesc) {
// has leading/trailing spaces
String trimmed = identifier.trim();
if (identifier != trimmed) {
@@ -231,8 +228,8 @@
return new RefactoringStatus.fatal(message);
}
// is not identifier
- RefactoringStatus status =
- _validateIdentifier(identifier, desc, "an uppercase letter or underscore");
+ RefactoringStatus status = _validateIdentifier(
+ identifier, desc, "an uppercase letter or underscore");
if (!status.isOK) {
return status;
}
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
index 8f10701..c73f98c 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
@@ -6,8 +6,8 @@
import 'dart:async';
-import 'package:analysis_server/src/protocol.dart' show
- RefactoringMethodParameter, SourceChange;
+import 'package:analysis_server/src/protocol.dart'
+ show RefactoringMethodParameter, SourceChange;
import 'package:analysis_server/src/services/correction/status.dart';
import 'package:analysis_server/src/services/refactoring/convert_getter_to_method.dart';
import 'package:analysis_server/src/services/refactoring/convert_method_to_getter.dart';
@@ -30,7 +30,6 @@
import 'package:analyzer/src/generated/source.dart';
import 'package:path/path.dart' as pathos;
-
/**
* [Refactoring] to convert getters into normal [MethodDeclaration]s.
*/
@@ -39,13 +38,12 @@
* Returns a new [ConvertMethodToGetterRefactoring] instance for converting
* [element] and all the corresponding hierarchy elements.
*/
- factory ConvertGetterToMethodRefactoring(SearchEngine searchEngine,
- PropertyAccessorElement element) {
+ factory ConvertGetterToMethodRefactoring(
+ SearchEngine searchEngine, PropertyAccessorElement element) {
return new ConvertGetterToMethodRefactoringImpl(searchEngine, element);
}
}
-
/**
* [Refactoring] to convert normal [MethodDeclaration]s into getters.
*/
@@ -54,13 +52,12 @@
* Returns a new [ConvertMethodToGetterRefactoring] instance for converting
* [element] and all the corresponding hierarchy elements.
*/
- factory ConvertMethodToGetterRefactoring(SearchEngine searchEngine,
- ExecutableElement element) {
+ factory ConvertMethodToGetterRefactoring(
+ SearchEngine searchEngine, ExecutableElement element) {
return new ConvertMethodToGetterRefactoringImpl(searchEngine, element);
}
}
-
/**
* [Refactoring] to extract an expression into a local variable declaration.
*/
@@ -68,12 +65,10 @@
/**
* Returns a new [ExtractLocalRefactoring] instance.
*/
- factory ExtractLocalRefactoring(CompilationUnit unit, int selectionOffset,
- int selectionLength) {
+ factory ExtractLocalRefactoring(
+ CompilationUnit unit, int selectionOffset, int selectionLength) {
return new ExtractLocalRefactoringImpl(
- unit,
- selectionOffset,
- selectionLength);
+ unit, selectionOffset, selectionLength);
}
/**
@@ -122,7 +117,6 @@
RefactoringStatus checkName();
}
-
/**
* [Refactoring] to extract an [Expression] or [Statement]s into a new method.
*/
@@ -133,10 +127,7 @@
factory ExtractMethodRefactoring(SearchEngine searchEngine,
CompilationUnit unit, int selectionOffset, int selectionLength) {
return new ExtractMethodRefactoringImpl(
- searchEngine,
- unit,
- selectionOffset,
- selectionLength);
+ searchEngine, unit, selectionOffset, selectionLength);
}
/**
@@ -215,7 +206,6 @@
RefactoringStatus checkName();
}
-
/**
* [Refactoring] to inline a local [VariableElement].
*/
@@ -223,8 +213,8 @@
/**
* Returns a new [InlineLocalRefactoring] instance.
*/
- factory InlineLocalRefactoring(SearchEngine searchEngine,
- CompilationUnit unit, int offset) {
+ factory InlineLocalRefactoring(
+ SearchEngine searchEngine, CompilationUnit unit, int offset) {
return new InlineLocalRefactoringImpl(searchEngine, unit, offset);
}
@@ -239,7 +229,6 @@
String get variableName;
}
-
/**
* [Refactoring] to inline an [ExecutableElement].
*/
@@ -247,8 +236,8 @@
/**
* Returns a new [InlineMethodRefactoring] instance.
*/
- factory InlineMethodRefactoring(SearchEngine searchEngine,
- CompilationUnit unit, int offset) {
+ factory InlineMethodRefactoring(
+ SearchEngine searchEngine, CompilationUnit unit, int offset) {
return new InlineMethodRefactoringImpl(searchEngine, unit, offset);
}
@@ -282,7 +271,6 @@
String get methodName;
}
-
/**
* [Refactoring] to move/rename a file.
*/
@@ -293,10 +281,7 @@
factory MoveFileRefactoring(pathos.Context pathContext,
SearchEngine searchEngine, AnalysisContext context, Source source) {
return new MoveFileRefactoringImpl(
- pathContext,
- searchEngine,
- context,
- source);
+ pathContext, searchEngine, context, source);
}
/**
@@ -305,7 +290,6 @@
void set newFile(String newName);
}
-
/**
* Abstract interface for all refactorings.
*/
@@ -358,7 +342,6 @@
bool requiresPreview();
}
-
/**
* Abstract [Refactoring] for renaming some [Element].
*/
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart b/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart
index ebb09d3..fbff2f6 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart
@@ -14,7 +14,6 @@
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* When a [Source] (a file) is used in more than one context, [SearchEngine]
* will return separate [SearchMatch]s for each context. But in rename
@@ -26,8 +25,8 @@
Element element = match.element;
String file = element.source.fullName;
SourceRange range = match.sourceRange;
- SourceReference newReference =
- new SourceReference(file, range, element, match.isResolved, match.isQualified);
+ SourceReference newReference = new SourceReference(
+ file, range, element, match.isResolved, match.isQualified);
SourceReference oldReference = uniqueReferences[newReference];
if (oldReference == null) {
uniqueReferences[newReference] = newReference;
@@ -37,7 +36,6 @@
return uniqueReferences.keys.toList();
}
-
/**
* Abstract implementation of [Refactoring].
*/
@@ -56,7 +54,6 @@
}
}
-
/**
* The [SourceRange] in some [Source].
*/
@@ -67,8 +64,8 @@
final bool isResolved;
final bool isQualified;
- SourceReference(this.file, this.range, this.element, this.isResolved,
- this.isQualified);
+ SourceReference(
+ this.file, this.range, this.element, this.isResolved, this.isQualified);
@override
int get hashCode {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename.dart b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
index 1da2200..012b7a1 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
@@ -16,7 +16,6 @@
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* Returns `true` if two given [Element]s are [LocalElement]s and have
* intersecting with visibility ranges.
@@ -36,12 +35,11 @@
localRange2.intersects(localRange);
}
-
/**
* Checks if [element] is defined in the library containing [source].
*/
-bool isDefinedInLibrary(Element element, AnalysisContext context, Source source)
- {
+bool isDefinedInLibrary(
+ Element element, AnalysisContext context, Source source) {
// should be the same AnalysisContext
if (!isInContext(element, context)) {
return false;
@@ -52,7 +50,6 @@
return librarySourcesOfSource.contains(librarySourceOfElement);
}
-
/**
* Checks if the given [Element] is in the given [AnalysisContext].
*/
@@ -60,7 +57,6 @@
return element.context == context;
}
-
/**
* Checks if the given unqualified [SearchMatch] intersects with visibility
* range of [localElement].
@@ -77,12 +73,11 @@
referenceRange.intersects(localRange);
}
-
/**
* Checks if [element] is visible in the library containing [source].
*/
-bool isVisibleInLibrary(Element element, AnalysisContext context, Source source)
- {
+bool isVisibleInLibrary(
+ Element element, AnalysisContext context, Source source) {
// should be the same AnalysisContext
if (!isInContext(element, context)) {
return false;
@@ -95,13 +90,11 @@
return isDefinedInLibrary(element, context, source);
}
-
-
/**
* An abstract implementation of [RenameRefactoring].
*/
-abstract class RenameRefactoringImpl extends RefactoringImpl implements
- RenameRefactoring {
+abstract class RenameRefactoringImpl extends RefactoringImpl
+ implements RenameRefactoring {
final SearchEngine searchEngine;
final Element element;
final AnalysisContext context;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
index 25e979e..7cb5306 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
@@ -6,8 +6,8 @@
import 'dart:async';
-import 'package:analysis_server/src/protocol_server.dart' hide Element,
- ElementKind;
+import 'package:analysis_server/src/protocol_server.dart'
+ hide Element, ElementKind;
import 'package:analysis_server/src/services/correction/status.dart';
import 'package:analysis_server/src/services/correction/util.dart';
import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
@@ -19,20 +19,16 @@
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/java_core.dart';
-
/**
* Checks if creating a method with the given [name] in [classElement] will
* cause any conflicts.
*/
-Future<RefactoringStatus> validateCreateMethod(SearchEngine searchEngine,
- ClassElement classElement, String name) {
- return new _ClassMemberValidator.forCreate(
- searchEngine,
- classElement,
- name).validate();
+Future<RefactoringStatus> validateCreateMethod(
+ SearchEngine searchEngine, ClassElement classElement, String name) {
+ return new _ClassMemberValidator.forCreate(searchEngine, classElement, name)
+ .validate();
}
-
/**
* A [Refactoring] for renaming class member [Element]s.
*/
@@ -122,7 +118,6 @@
}
}
-
/**
* Helper to check if the created or renamed [Element] will cause any conflicts.
*/
@@ -137,8 +132,8 @@
Set<Element> elements = new Set<Element>();
List<SearchMatch> references = <SearchMatch>[];
- _ClassMemberValidator.forCreate(this.searchEngine, this.elementClass,
- this.name)
+ _ClassMemberValidator.forCreate(
+ this.searchEngine, this.elementClass, this.name)
: isRename = false,
element = null,
elementKind = ElementKind.METHOD;
@@ -153,13 +148,10 @@
RefactoringStatus result = new RefactoringStatus();
// check if there is a member with "newName" in the same ClassElement
for (Element newNameMember in getChildren(elementClass, name)) {
- result.addError(
- format(
- "Class '{0}' already declares {1} with name '{2}'.",
- elementClass.displayName,
- getElementKindName(newNameMember),
- name),
- newLocation_fromElement(newNameMember));
+ result.addError(format(
+ "Class '{0}' already declares {1} with name '{2}'.",
+ elementClass.displayName, getElementKindName(newNameMember),
+ name), newLocation_fromElement(newNameMember));
}
// do chained computations
Set<ClassElement> superClasses = getSuperClasses(elementClass);
@@ -174,23 +166,17 @@
Element nameClass = nameElement.enclosingElement;
// renamed Element shadows member of superclass
if (superClasses.contains(nameClass)) {
- result.addError(
- format(
- isRename ?
- "Renamed {0} will shadow {1} '{2}'." :
- "Created {0} will shadow {1} '{2}'.",
- elementKind.displayName,
- getElementKindName(nameElement),
+ result.addError(format(isRename
+ ? "Renamed {0} will shadow {1} '{2}'."
+ : "Created {0} will shadow {1} '{2}'.",
+ elementKind.displayName, getElementKindName(nameElement),
getElementQualifiedName(nameElement)),
newLocation_fromElement(nameElement));
}
// renamed Element is shadowed by member of subclass
if (isRename && subClasses.contains(nameClass)) {
- result.addError(
- format(
- "Renamed {0} will be shadowed by {1} '{2}'.",
- elementKind.displayName,
- getElementKindName(nameElement),
+ result.addError(format("Renamed {0} will be shadowed by {1} '{2}'.",
+ elementKind.displayName, getElementKindName(nameElement),
getElementQualifiedName(nameElement)),
newLocation_fromElement(nameElement));
}
@@ -203,13 +189,10 @@
subClasses.contains(enclosingClass)) {
for (SearchMatch reference in references) {
if (isReferenceInLocalRange(localElement, reference)) {
- result.addError(
- format(
- "Usage of renamed {0} will be shadowed by {1} '{2}'.",
- elementKind.displayName,
- getElementKindName(localElement),
- localElement.displayName),
- newLocation_fromMatch(reference));
+ result.addError(format(
+ "Usage of renamed {0} will be shadowed by {1} '{2}'.",
+ elementKind.displayName, getElementKindName(localElement),
+ localElement.displayName), newLocation_fromMatch(reference));
}
}
}
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
index b43ad0b..636c8bb 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
@@ -20,13 +20,12 @@
import 'package:analyzer/src/generated/java_core.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* A [Refactoring] for renaming [ConstructorElement]s.
*/
class RenameConstructorRefactoringImpl extends RenameRefactoringImpl {
- RenameConstructorRefactoringImpl(SearchEngine searchEngine,
- ConstructorElement element)
+ RenameConstructorRefactoringImpl(
+ SearchEngine searchEngine, ConstructorElement element)
: super(searchEngine, element);
@override
@@ -73,9 +72,7 @@
for (Element newNameMember in getChildren(parentClass, newName)) {
String message = format(
"Class '{0}' already declares {1} with name '{2}'.",
- parentClass.displayName,
- getElementKindName(newNameMember),
- newName);
+ parentClass.displayName, getElementKindName(newNameMember), newName);
result.addError(message, newLocation_fromElement(newNameMember));
}
}
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
index 8b8dfbf..e58b535d 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
@@ -17,7 +17,6 @@
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* A [Refactoring] for renaming [ImportElement]s.
*/
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_label.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_label.dart
index b417056..7776b00 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_label.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_label.dart
@@ -13,7 +13,6 @@
import 'package:analysis_server/src/services/search/search_engine.dart';
import 'package:analyzer/src/generated/element.dart';
-
/**
* A [Refactoring] for renaming [LabelElement]s.
*/
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_library.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_library.dart
index a787be3..56b6c74 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_library.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_library.dart
@@ -14,13 +14,12 @@
import 'package:analysis_server/src/services/search/search_engine.dart';
import 'package:analyzer/src/generated/element.dart';
-
/**
* A [Refactoring] for renaming [LibraryElement]s.
*/
class RenameLibraryRefactoringImpl extends RenameRefactoringImpl {
- RenameLibraryRefactoringImpl(SearchEngine searchEngine,
- LibraryElement element)
+ RenameLibraryRefactoringImpl(
+ SearchEngine searchEngine, LibraryElement element)
: super(searchEngine, element);
@override
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
index 9579643..2d1b221 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
@@ -53,10 +53,7 @@
List<Source> librarySources = context.getLibrariesContaining(unitSource);
for (Source librarySource in librarySources) {
_analyzePossibleConflicts_inLibrary(
- result,
- unitSource,
- librarySource,
- element);
+ result, unitSource, librarySource, element);
}
}
// done
@@ -161,9 +158,8 @@
String nodeName = getElementQualifiedName(nodeElement);
String nameElementSourceName = nodeElement.source.shortName;
String refKind = refactoring.element.kind.displayName;
- String message =
- 'Usage of $nodeKind "$nodeName" declared in '
- '"$nameElementSourceName" will be shadowed by renamed $refKind.';
+ String message = 'Usage of $nodeKind "$nodeName" declared in '
+ '"$nameElementSourceName" will be shadowed by renamed $refKind.';
result.addError(message, newLocation_fromNode(node));
}
}
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart
index 1880928..51f27c4 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart
@@ -6,8 +6,8 @@
import 'dart:async';
-import 'package:analysis_server/src/protocol_server.dart' show
- newLocation_fromElement, newLocation_fromMatch;
+import 'package:analysis_server/src/protocol_server.dart'
+ show newLocation_fromElement, newLocation_fromMatch;
import 'package:analysis_server/src/services/correction/status.dart';
import 'package:analysis_server/src/services/correction/util.dart';
import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
@@ -18,34 +18,26 @@
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/java_core.dart';
-
/**
* Checks if creating a top-level function with the given [name] in [library]
* will cause any conflicts.
*/
-Future<RefactoringStatus> validateCreateFunction(SearchEngine searchEngine,
- LibraryElement library, String name) {
+Future<RefactoringStatus> validateCreateFunction(
+ SearchEngine searchEngine, LibraryElement library, String name) {
return new _RenameUnitMemberValidator.forCreate(
- searchEngine,
- library,
- ElementKind.FUNCTION,
- name).validate();
+ searchEngine, library, ElementKind.FUNCTION, name).validate();
}
-
/**
* Checks if creating a top-level function with the given [name] in [element]
* will cause any conflicts.
*/
-Future<RefactoringStatus> validateRenameTopLevel(SearchEngine searchEngine,
- Element element, String name) {
- return new _RenameUnitMemberValidator.forRename(
- searchEngine,
- element,
- name).validate();
+Future<RefactoringStatus> validateRenameTopLevel(
+ SearchEngine searchEngine, Element element, String name) {
+ return new _RenameUnitMemberValidator.forRename(searchEngine, element, name)
+ .validate();
}
-
/**
* A [Refactoring] for renaming compilation unit member [Element]s.
*/
@@ -115,7 +107,6 @@
}
}
-
/**
* Helper to check if the created or renamed [Element] will cause any conflicts.
*/
@@ -129,12 +120,12 @@
final RefactoringStatus result = new RefactoringStatus();
- _RenameUnitMemberValidator.forCreate(this.searchEngine, this.library,
- this.elementKind, this.name)
+ _RenameUnitMemberValidator.forCreate(
+ this.searchEngine, this.library, this.elementKind, this.name)
: isRename = false;
- _RenameUnitMemberValidator.forRename(this.searchEngine, this.element,
- this.name)
+ _RenameUnitMemberValidator.forRename(
+ this.searchEngine, this.element, this.name)
: isRename = true {
library = element.getAncestor((e) => e is LibraryElement);
elementKind = element.kind;
@@ -189,8 +180,7 @@
if (hasDisplayName(shadow, name)) {
String message = format(
"Reference to renamed {0} will be shadowed by {1} '{2}'.",
- getElementKindName(element),
- getElementKindName(shadow),
+ getElementKindName(element), getElementKindName(shadow),
getElementQualifiedName(shadow));
result.addError(message, newLocation_fromElement(shadow));
}
@@ -206,10 +196,8 @@
void _validateWillConflict() {
visitLibraryTopLevelElements(library, (element) {
if (hasDisplayName(element, name)) {
- String message = format(
- "Library already declares {0} with name '{1}'.",
- getElementKindName(element),
- name);
+ String message = format("Library already declares {0} with name '{1}'.",
+ getElementKindName(element), name);
result.addError(message, newLocation_fromElement(element));
}
});
@@ -243,13 +231,10 @@
continue;
}
// OK, reference will be shadowed be the element being renamed
- String message = format(
- isRename ?
- "Renamed {0} will shadow {1} '{2}'." :
- "Created {0} will shadow {1} '{2}'.",
- elementKind.displayName,
- getElementKindName(member),
- getElementQualifiedName(member));
+ String message = format(isRename
+ ? "Renamed {0} will shadow {1} '{2}'."
+ : "Created {0} will shadow {1} '{2}'.", elementKind.displayName,
+ getElementKindName(member), getElementQualifiedName(member));
result.addError(message, newLocation_fromMatch(memberReference));
}
}
diff --git a/pkg/analysis_server/lib/src/services/search/element_visitors.dart b/pkg/analysis_server/lib/src/services/search/element_visitors.dart
index 6490cae..d7338d0 100644
--- a/pkg/analysis_server/lib/src/services/search/element_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/search/element_visitors.dart
@@ -6,7 +6,6 @@
import 'package:analyzer/src/generated/element.dart';
-
/**
* Uses [processor] to visit all of the children of [element].
* If [processor] returns `true`, then children of a child are visited too.
@@ -15,23 +14,20 @@
element.visitChildren(new _ElementVisitorAdapter(processor));
}
-
/**
* Uses [processor] to visit all of the top-level elements of [library].
*/
-void visitLibraryTopLevelElements(LibraryElement library,
- ElementProcessor processor) {
+void visitLibraryTopLevelElements(
+ LibraryElement library, ElementProcessor processor) {
library.visitChildren(new _TopLevelElementsVisitor(processor));
}
-
/**
* An [Element] processor function type.
* If `true` is returned, children of [element] will be visited.
*/
typedef bool ElementProcessor(Element element);
-
/**
* A [GeneralizingElementVisitor] adapter for [ElementProcessor].
*/
@@ -49,7 +45,6 @@
}
}
-
/**
* A [GeneralizingElementVisitor] for visiting top-level elements.
*/
diff --git a/pkg/analysis_server/lib/src/services/search/hierarchy.dart b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
index b2c99a1..0f8d76ce 100644
--- a/pkg/analysis_server/lib/src/services/search/hierarchy.dart
+++ b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
@@ -11,7 +11,6 @@
import 'package:analysis_server/src/services/search/search_engine.dart';
import 'package:analyzer/src/generated/element.dart';
-
/**
* Returns direct children of [parent].
*/
@@ -25,7 +24,6 @@
return children;
}
-
/**
* Returns direct non-synthetic children of the given [ClassElement].
*
@@ -54,12 +52,11 @@
return members;
}
-
/**
* Returns a [Set] with direct subclasses of [seed].
*/
-Future<Set<ClassElement>> getDirectSubClasses(SearchEngine searchEngine,
- ClassElement seed) {
+Future<Set<ClassElement>> getDirectSubClasses(
+ SearchEngine searchEngine, ClassElement seed) {
return searchEngine.searchSubtypes(seed).then((List<SearchMatch> matches) {
Set<ClassElement> subClasses = new HashSet<ClassElement>();
for (SearchMatch match in matches) {
@@ -70,13 +67,12 @@
});
}
-
/**
* @return all implementations of the given {@link ClassMemberElement} is its superclasses and
* their subclasses.
*/
-Future<Set<ClassMemberElement>> getHierarchyMembers(SearchEngine searchEngine,
- ClassMemberElement member) {
+Future<Set<ClassMemberElement>> getHierarchyMembers(
+ SearchEngine searchEngine, ClassMemberElement member) {
Set<ClassMemberElement> result = new HashSet<ClassMemberElement>();
// constructor
if (member is ConstructorElement) {
@@ -114,7 +110,6 @@
});
}
-
/**
* Returns non-synthetic members of the given [ClassElement] and its super
* classes.
@@ -132,12 +127,11 @@
return members;
}
-
/**
* Returns a [Set] with all direct and indirect subclasses of [seed].
*/
-Future<Set<ClassElement>> getSubClasses(SearchEngine searchEngine,
- ClassElement seed) {
+Future<Set<ClassElement>> getSubClasses(
+ SearchEngine searchEngine, ClassElement seed) {
Set<ClassElement> subs = new HashSet<ClassElement>();
// prepare queue
List<ClassElement> queue = new List<ClassElement>();
@@ -161,7 +155,6 @@
return new Future(addSubClasses);
}
-
/**
* Returns a [Set] with all direct and indirect superclasses of [seed].
*/
@@ -194,7 +187,6 @@
return result;
}
-
/**
* If the given [element] is a synthetic [PropertyAccessorElement] returns
* its variable, otherwise returns [element].
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine.dart b/pkg/analysis_server/lib/src/services/search/search_engine.dart
index 87a9127..e754d9f 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine.dart
@@ -12,7 +12,6 @@
import 'package:analyzer/src/generated/java_core.dart';
import 'package:analyzer/src/generated/source.dart';
-
/**
* Returns a new [SearchEngine] instance based on the given [Index].
*/
@@ -20,7 +19,6 @@
return new SearchEngineImpl(index);
}
-
/**
* Instances of the enum [MatchKind] represent the kind of reference that was
* found when a match represents a reference to an element.
@@ -64,7 +62,6 @@
String toString() => name;
}
-
/**
* The interface [SearchEngine] defines the behavior of objects that can be used
* to search for various pieces of information.
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
index dec4aa3..e5c80dd 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
@@ -10,7 +10,7 @@
import 'package:analysis_server/src/services/search/search_engine.dart';
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/source.dart';
-
+import 'package:analysis_server/src/services/correction/source_range.dart';
/**
* A [SearchEngine] implementation.
@@ -25,9 +25,7 @@
NameElement element = new NameElement(name);
_Requestor requestor = new _Requestor(_index);
requestor.add(
- element,
- IndexConstants.NAME_IS_DEFINED_BY,
- MatchKind.DECLARATION);
+ element, IndexConstants.NAME_IS_DEFINED_BY, MatchKind.DECLARATION);
return requestor.merge();
}
@@ -47,9 +45,7 @@
requestor.add(element, IndexConstants.IS_INVOKED_BY, MatchKind.INVOCATION);
requestor.add(element, IndexConstants.IS_READ_BY, MatchKind.READ);
requestor.add(
- element,
- IndexConstants.IS_READ_WRITTEN_BY,
- MatchKind.READ_WRITE);
+ element, IndexConstants.IS_READ_WRITTEN_BY, MatchKind.READ_WRITE);
requestor.add(element, IndexConstants.IS_WRITTEN_BY, MatchKind.WRITE);
return requestor.merge();
}
@@ -103,39 +99,34 @@
@override
Future<List<SearchMatch>> searchTopLevelDeclarations(String pattern) {
- UniverseElement universe = UniverseElement.INSTANCE;
- _Requestor requestor = new _Requestor(_index);
- requestor.add(universe, IndexConstants.DEFINES, MatchKind.DECLARATION);
RegExp regExp = new RegExp(pattern);
- return requestor.merge().then((List<SearchMatch> matches) {
- return matches.where((SearchMatch match) {
- String name = match.element.displayName;
- return regExp.hasMatch(name);
- }).toList();
- });
+ List<Element> elements =
+ _index.getTopLevelDeclarations((String name) => regExp.hasMatch(name));
+ List<SearchMatch> matches = <SearchMatch>[];
+ for (Element element in elements) {
+ matches.add(new SearchMatch(MatchKind.DECLARATION, element,
+ rangeElementName(element), true, false));
+ }
+ return new Future.value(matches);
}
Future<List<SearchMatch>> _searchReferences(Element element) {
_Requestor requestor = new _Requestor(_index);
requestor.add(
- element,
- IndexConstants.IS_REFERENCED_BY,
- MatchKind.REFERENCE);
+ element, IndexConstants.IS_REFERENCED_BY, MatchKind.REFERENCE);
return requestor.merge();
}
- Future<List<SearchMatch>>
- _searchReferences_Constructor(ConstructorElement constructor) {
+ Future<List<SearchMatch>> _searchReferences_Constructor(
+ ConstructorElement constructor) {
_Requestor requestor = new _Requestor(_index);
requestor.add(
- constructor,
- IndexConstants.IS_REFERENCED_BY,
- MatchKind.REFERENCE);
+ constructor, IndexConstants.IS_REFERENCED_BY, MatchKind.REFERENCE);
return requestor.merge();
}
- Future<List<SearchMatch>>
- _searchReferences_Field(PropertyInducingElement field) {
+ Future<List<SearchMatch>> _searchReferences_Field(
+ PropertyInducingElement field) {
PropertyAccessorElement getter = field.getter;
PropertyAccessorElement setter = field.setter;
_Requestor requestor = new _Requestor(_index);
@@ -155,25 +146,21 @@
return requestor.merge();
}
- Future<List<SearchMatch>>
- _searchReferences_Function(FunctionElement function) {
+ Future<List<SearchMatch>> _searchReferences_Function(
+ FunctionElement function) {
_Requestor requestor = new _Requestor(_index);
requestor.add(
- function,
- IndexConstants.IS_REFERENCED_BY,
- MatchKind.REFERENCE);
+ function, IndexConstants.IS_REFERENCED_BY, MatchKind.REFERENCE);
requestor.add(function, IndexConstants.IS_INVOKED_BY, MatchKind.INVOCATION);
return requestor.merge();
}
- Future<List<SearchMatch>>
- _searchReferences_LocalVariable(LocalVariableElement variable) {
+ Future<List<SearchMatch>> _searchReferences_LocalVariable(
+ LocalVariableElement variable) {
_Requestor requestor = new _Requestor(_index);
requestor.add(variable, IndexConstants.IS_READ_BY, MatchKind.READ);
requestor.add(
- variable,
- IndexConstants.IS_READ_WRITTEN_BY,
- MatchKind.READ_WRITE);
+ variable, IndexConstants.IS_READ_WRITTEN_BY, MatchKind.READ_WRITE);
requestor.add(variable, IndexConstants.IS_WRITTEN_BY, MatchKind.WRITE);
requestor.add(variable, IndexConstants.IS_INVOKED_BY, MatchKind.INVOCATION);
return requestor.merge();
@@ -189,28 +176,21 @@
return requestor.merge();
}
- Future<List<SearchMatch>>
- _searchReferences_Parameter(ParameterElement parameter) {
+ Future<List<SearchMatch>> _searchReferences_Parameter(
+ ParameterElement parameter) {
_Requestor requestor = new _Requestor(_index);
requestor.add(parameter, IndexConstants.IS_READ_BY, MatchKind.READ);
requestor.add(
- parameter,
- IndexConstants.IS_READ_WRITTEN_BY,
- MatchKind.READ_WRITE);
+ parameter, IndexConstants.IS_READ_WRITTEN_BY, MatchKind.READ_WRITE);
requestor.add(parameter, IndexConstants.IS_WRITTEN_BY, MatchKind.WRITE);
requestor.add(
- parameter,
- IndexConstants.IS_REFERENCED_BY,
- MatchKind.REFERENCE);
+ parameter, IndexConstants.IS_REFERENCED_BY, MatchKind.REFERENCE);
requestor.add(
- parameter,
- IndexConstants.IS_INVOKED_BY,
- MatchKind.INVOCATION);
+ parameter, IndexConstants.IS_INVOKED_BY, MatchKind.INVOCATION);
return requestor.merge();
}
}
-
class _Requestor {
final List<Future<List<SearchMatch>>> futures = <Future<List<SearchMatch>>>[];
final Index index;
@@ -222,13 +202,9 @@
Future matchesFuture = relationsFuture.then((List<Location> locations) {
List<SearchMatch> matches = <SearchMatch>[];
for (Location location in locations) {
- matches.add(
- new SearchMatch(
- kind,
- location.element,
- new SourceRange(location.offset, location.length),
- location.isResolved,
- location.isQualified));
+ matches.add(new SearchMatch(kind, location.element,
+ new SourceRange(location.offset, location.length),
+ location.isResolved, location.isQualified));
}
return matches;
});
diff --git a/pkg/analysis_server/lib/src/socket_server.dart b/pkg/analysis_server/lib/src/socket_server.dart
index e665f06..c748c6f 100644
--- a/pkg/analysis_server/lib/src/socket_server.dart
+++ b/pkg/analysis_server/lib/src/socket_server.dart
@@ -10,12 +10,11 @@
import 'package:analysis_server/src/protocol.dart';
import 'package:analysis_server/src/services/index/index.dart';
import 'package:analysis_server/src/services/index/local_file_index.dart';
+import 'package:analysis_server/src/source/caching_pub_package_map_provider.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer/instrumentation/instrumentation.dart';
-import 'package:analyzer/source/pub_package_map_provider.dart';
import 'package:analyzer/src/generated/sdk_io.dart';
-
/**
* Instances of the class [SocketServer] implement the common parts of
* http-based and stdio-based analysis servers. The primary responsibility of
@@ -44,8 +43,7 @@
void createAnalysisServer(ServerCommunicationChannel serverChannel) {
if (analysisServer != null) {
RequestError error = new RequestError(
- RequestErrorCode.SERVER_ALREADY_STARTED,
- "Server already started");
+ RequestErrorCode.SERVER_ALREADY_STARTED, "Server already started");
serverChannel.sendResponse(new Response('', error: error));
serverChannel.listen((Request request) {
serverChannel.sendResponse(new Response(request.id, error: error));
@@ -57,8 +55,8 @@
if (analysisServerOptions.fileReadMode == 'as-is') {
resourceProvider = PhysicalResourceProvider.INSTANCE;
} else if (analysisServerOptions.fileReadMode == 'normalize-eol-always') {
- resourceProvider =
- new PhysicalResourceProvider(PhysicalResourceProvider.NORMALIZE_EOL_ALWAYS);
+ resourceProvider = new PhysicalResourceProvider(
+ PhysicalResourceProvider.NORMALIZE_EOL_ALWAYS);
} else {
throw new Exception(
'File read mode was set to the unknown mode: $analysisServerOptions.fileReadMode');
@@ -70,14 +68,9 @@
index.run();
}
- analysisServer = new AnalysisServer(
- serverChannel,
- resourceProvider,
- new PubPackageMapProvider(resourceProvider, defaultSdk),
- index,
- analysisServerOptions,
- defaultSdk,
- instrumentationService,
+ analysisServer = new AnalysisServer(serverChannel, resourceProvider,
+ new CachingPubPackageMapProvider(resourceProvider, defaultSdk), index,
+ analysisServerOptions, defaultSdk, instrumentationService,
rethrowExceptions: false);
_initializeHandlers(analysisServer);
}
diff --git a/pkg/analysis_server/lib/src/source/caching_pub_package_map_provider.dart b/pkg/analysis_server/lib/src/source/caching_pub_package_map_provider.dart
new file mode 100644
index 0000000..e6d0d59
--- /dev/null
+++ b/pkg/analysis_server/lib/src/source/caching_pub_package_map_provider.dart
@@ -0,0 +1,255 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library source.caching_pub_package_map_provider;
+
+import 'dart:convert';
+import 'dart:io' as io;
+
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/source/package_map_provider.dart';
+import 'package:analyzer/source/pub_package_map_provider.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/sdk_io.dart';
+import 'package:analyzer/src/generated/source.dart';
+
+/**
+ * The function used to write the cache file.
+ * Returns the modification stamp for the newly written file.
+ */
+typedef int WriteFile(File file, String content);
+
+/**
+ * [PubPackageMapProvider] extension which caches pub list results.
+ * These results are cached in memory and in a single place on disk that is
+ * shared cross session and between different simultaneous sessions.
+ */
+class CachingPubPackageMapProvider extends PubPackageMapProvider {
+ static const cacheKey = 'pub_list_cache';
+ static const cacheVersion = 1;
+ static const cacheVersionKey = 'pub_list_cache_version';
+ static const pubListResultKey = 'pub_list_result';
+ static const modificationStampsKey = 'modification_stamps';
+
+ /**
+ * A cache of folder path to pub list information as shown below
+ * or `null` if the cache has not yet been initialized.
+ *
+ * {
+ * "path/to/folder": {
+ * "pub_list_result": {
+ * "packages": {
+ * "foo": "path/to/foo",
+ * "bar": ["path/to/bar1", "path/to/bar2"],
+ * "myapp": "path/to/myapp", // self link is included
+ * },
+ * "input_files": [
+ * "path/to/myapp/pubspec.lock"
+ * ]
+ * },
+ * "modification_stamps": {
+ * "path/to/myapp/pubspec.lock": 1424305309
+ * }
+ * }
+ * "path/to/another/folder": {
+ * ...
+ * }
+ * ...
+ * }
+ */
+ Map<String, Map> _cache;
+
+ /**
+ * The modification time of the cache file
+ * or `null` if it has not yet been read.
+ */
+ int _cacheModificationTime;
+
+ /**
+ * The function used to write the cache file.
+ */
+ WriteFile _writeFile;
+
+ /**
+ * Construct a new instance.
+ * [RunPubList] and [WriteFile] implementations may be injected for testing
+ */
+ CachingPubPackageMapProvider(
+ ResourceProvider resourceProvider, DirectoryBasedDartSdk sdk,
+ [RunPubList runPubList, this._writeFile])
+ : super(resourceProvider, sdk, runPubList) {
+ if (_writeFile == null) {
+ _writeFile = _writeFileDefault;
+ }
+ }
+
+ File get cacheFile => _cacheDir.getChild('cache');
+ Folder get _cacheDir => resourceProvider.getStateLocation('.pub-list');
+ File get _touchFile => _cacheDir.getChild('touch');
+
+ @override
+ PackageMapInfo computePackageMap(Folder folder) {
+ //
+ // Return error if folder does not exist, but don't remove previously
+ // cached result because folder may be only temporarily inaccessible
+ //
+ if (!folder.exists) {
+ return computePackageMapError(folder);
+ }
+ // Ensure cache is up to date
+ _readCache();
+ // Check for cached entry
+ Map entry = _cache[folder.path];
+ if (entry != null) {
+ Map<String, int> modificationStamps = entry[modificationStampsKey];
+ if (modificationStamps != null) {
+ //
+ // Check to see if any dependencies have changed
+ // before returning cached result
+ //
+ if (!_haveDependenciesChanged(modificationStamps)) {
+ return parsePackageMap(entry[pubListResultKey], folder);
+ }
+ }
+ }
+ int runCount = 0;
+ PackageMapInfo info;
+ while (true) {
+ // Capture the current time so that we can tell if an input file
+ // has changed while running pub list. This is done
+ // by writing to a file rather than getting millisecondsSinceEpoch
+ // because file modification time has different granularity
+ // on diferent systems.
+ int startStamp;
+ try {
+ startStamp = _writeFile(_touchFile, 'touch');
+ } catch (exception, stackTrace) {
+ AnalysisEngine.instance.logger.logInformation(
+ 'Exception writing $_touchFile\n$exception\n$stackTrace');
+ startStamp = new DateTime.now().millisecondsSinceEpoch;
+ }
+ // computePackageMap calls parsePackageMap which caches the result
+ info = super.computePackageMap(folder);
+ ++runCount;
+ if (!_haveDependenciesChangedSince(info, startStamp)) {
+ // If no dependencies have changed while running pub then finished
+ break;
+ }
+ if (runCount == 4) {
+ // Don't run forever
+ AnalysisEngine.instance.logger
+ .logInformation('pub list called $runCount times: $folder');
+ break;
+ }
+ }
+ _writeCache();
+ return info;
+ }
+
+ @override
+ PackageMapInfo parsePackageMap(Map obj, Folder folder) {
+ PackageMapInfo info = super.parsePackageMap(obj, folder);
+ Map<String, int> modificationStamps = new Map<String, int>();
+ for (String path in info.dependencies) {
+ Resource res = resourceProvider.getResource(path);
+ if (res is File && res.exists) {
+ modificationStamps[path] = res.createSource().modificationStamp;
+ }
+ }
+ // Assumes entry has been initialized by computePackageMap
+ _cache[folder.path] = <String, Map>{
+ pubListResultKey: obj,
+ modificationStampsKey: modificationStamps
+ };
+ return info;
+ }
+
+ /**
+ * Determine if any of the dependencies have changed.
+ */
+ bool _haveDependenciesChanged(Map<String, int> modificationStamps) {
+ for (String path in modificationStamps.keys) {
+ Resource res = resourceProvider.getResource(path);
+ if (res is File) {
+ if (!res.exists ||
+ res.createSource().modificationStamp != modificationStamps[path]) {
+ return true;
+ }
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Determine if any of the dependencies have changed since the given time.
+ */
+ bool _haveDependenciesChangedSince(PackageMapInfo info, int startStamp) {
+ for (String path in info.dependencies) {
+ Resource res = resourceProvider.getResource(path);
+ if (res is File) {
+ int modStamp = res.createSource().modificationStamp;
+ if (modStamp != null && modStamp >= startStamp) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Read the cache from disk if it has not been read before.
+ */
+ void _readCache() {
+ // TODO(danrubel) This implementation assumes that
+ // two separate processes are not accessing the cache file at the same time
+ Source source = cacheFile.createSource();
+ if (source.exists() &&
+ (_cache == null ||
+ _cacheModificationTime != source.modificationStamp)) {
+ try {
+ TimestampedData<String> data = source.contents;
+ Map map = JSON.decode(data.data);
+ if (map[cacheVersionKey] == cacheVersion) {
+ _cache = map[cacheKey];
+ _cacheModificationTime = data.modificationTime;
+ }
+ } catch (exception, stackTrace) {
+ AnalysisEngine.instance.logger.logInformation(
+ 'Exception reading $cacheFile\n$exception\n$stackTrace');
+ }
+ }
+ if (_cache == null) {
+ _cache = new Map<String, Map>();
+ }
+ }
+
+ /**
+ * Write the cache to disk.
+ */
+ void _writeCache() {
+ try {
+ _cacheModificationTime = _writeFile(cacheFile,
+ JSON.encode({cacheVersionKey: cacheVersion, cacheKey: _cache}));
+ } catch (exception, stackTrace) {
+ AnalysisEngine.instance.logger.logInformation(
+ 'Exception writing $cacheFile\n$exception\n$stackTrace');
+ }
+ }
+
+ /**
+ * Update the given file with the specified content.
+ */
+ int _writeFileDefault(File cacheFile, String content) {
+ // TODO(danrubel) This implementation assumes that
+ // two separate processes are not accessing the cache file at the same time
+ io.File file = new io.File(cacheFile.path);
+ if (!file.parent.existsSync()) {
+ file.parent.createSync(recursive: true);
+ }
+ file.writeAsStringSync(content, flush: true);
+ return file.lastModifiedSync().millisecondsSinceEpoch;
+ }
+}
diff --git a/pkg/analysis_server/lib/src/status/element_writer.dart b/pkg/analysis_server/lib/src/status/element_writer.dart
index b56264b..6ca70a5 100644
--- a/pkg/analysis_server/lib/src/status/element_writer.dart
+++ b/pkg/analysis_server/lib/src/status/element_writer.dart
@@ -167,9 +167,8 @@
String name = element.name;
if (name != null) {
buffer.write(' [');
- buffer.write(GetHandler.makeLink(GetHandler.INDEX_ELEMENT_BY_NAME, {
- 'name': name
- }, 'search index'));
+ buffer.write(GetHandler.makeLink(
+ GetHandler.INDEX_ELEMENT_BY_NAME, {'name': name}, 'search index'));
buffer.write(']');
}
}
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 50adbea..423d8d7 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -14,7 +14,6 @@
import 'mock_sdk.dart';
-
/**
* Finds an [Element] with the given [name].
*/
@@ -32,13 +31,11 @@
return result;
}
-
/**
* A function to be called for every [Element].
*/
typedef void _ElementVisitorFunction(Element element);
-
class AbstractContextTest {
static final DartSdk SDK = new MockSdk();
static final UriResolver SDK_RESOLVER = new DartUriResolver(SDK);
@@ -89,7 +86,6 @@
}
}
-
/**
* Wraps the given [_ElementVisitorFunction] into an instance of
* [engine.GeneralizingElementVisitor].
diff --git a/pkg/analysis_server/test/abstract_single_unit.dart b/pkg/analysis_server/test/abstract_single_unit.dart
index 458eac0..51bd183 100644
--- a/pkg/analysis_server/test/abstract_single_unit.dart
+++ b/pkg/analysis_server/test/abstract_single_unit.dart
@@ -13,7 +13,6 @@
import 'abstract_context.dart';
-
class AbstractSingleUnitTest extends AbstractContextTest {
bool verifyNoTestUnitErrors = true;
diff --git a/pkg/analysis_server/test/analysis/get_errors_test.dart b/pkg/analysis_server/test/analysis/get_errors_test.dart
index eb66da4..44e1fc5 100644
--- a/pkg/analysis_server/test/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/get_errors_test.dart
@@ -14,13 +14,11 @@
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(GetErrorsTest);
}
-
@reflectiveTest
class GetErrorsTest extends AbstractAnalysisTest {
static const String requestId = 'test-getError';
diff --git a/pkg/analysis_server/test/analysis/get_hover_test.dart b/pkg/analysis_server/test/analysis/get_hover_test.dart
index 6ee8a48..a39f616 100644
--- a/pkg/analysis_server/test/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/analysis/get_hover_test.dart
@@ -12,13 +12,11 @@
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(AnalysisHoverTest);
}
-
@reflectiveTest
class AnalysisHoverTest extends AbstractAnalysisTest {
Future<HoverInformation> prepareHover(String search) {
diff --git a/pkg/analysis_server/test/analysis/notification_errors_test.dart b/pkg/analysis_server/test/analysis/notification_errors_test.dart
index 73bca89..d0195fd 100644
--- a/pkg/analysis_server/test/analysis/notification_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_errors_test.dart
@@ -12,13 +12,11 @@
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(NotificationErrorsTest);
}
-
@reflectiveTest
class NotificationErrorsTest extends AbstractAnalysisTest {
Map<String, List<AnalysisError>> filesErrors = {};
diff --git a/pkg/analysis_server/test/analysis/notification_highlights_test.dart b/pkg/analysis_server/test/analysis/notification_highlights_test.dart
index d61c46a..e1bc205 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights_test.dart
@@ -13,13 +13,11 @@
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
runReflectiveTests(AnalysisNotificationHighlightsTest);
runReflectiveTests(HighlightTypeTest);
}
-
@reflectiveTest
class AnalysisNotificationHighlightsTest extends AbstractAnalysisTest {
List<HighlightRegion> regions;
@@ -32,13 +30,12 @@
return;
}
}
- fail(
- 'Expected to find (offset=$offset; length=$length; type=$type) in\n'
- '${regions.join('\n')}');
+ fail('Expected to find (offset=$offset; length=$length; type=$type) in\n'
+ '${regions.join('\n')}');
}
- void assertHasRegion(HighlightRegionType type, String search, [int length =
- -1]) {
+ void assertHasRegion(HighlightRegionType type, String search,
+ [int length = -1]) {
int offset = findOffset(search);
length = findRegionLength(search, length);
assertHasRawRegion(type, offset, length);
@@ -57,14 +54,13 @@
region.type == type) {
fail(
'Not expected to find (offset=$offset; length=$length; type=$type) in\n'
- '${regions.join('\n')}');
+ '${regions.join('\n')}');
}
}
}
-
- void assertNoRegion(HighlightRegionType type, String search, [int length =
- -1]) {
+ void assertNoRegion(HighlightRegionType type, String search,
+ [int length = -1]) {
int offset = findOffset(search);
length = findRegionLength(search, length);
assertNoRawRegion(type, offset, length);
@@ -378,9 +374,7 @@
_addLibraryForTestPart();
return prepareHighlights().then((_) {
assertHasRegion(
- HighlightRegionType.BUILT_IN,
- 'part of',
- 'part of'.length);
+ HighlightRegionType.BUILT_IN, 'part of', 'part of'.length);
assertNoRegion(HighlightRegionType.BUILT_IN, 'part = 1');
assertNoRegion(HighlightRegionType.BUILT_IN, 'of = 2');
});
@@ -558,11 +552,9 @@
return prepareHighlights().then((_) {
assertHasStringRegion(HighlightRegionType.DIRECTIVE, "library lib;");
assertHasStringRegion(
- HighlightRegionType.DIRECTIVE,
- "import 'dart:math';");
+ HighlightRegionType.DIRECTIVE, "import 'dart:math';");
assertHasStringRegion(
- HighlightRegionType.DIRECTIVE,
- "export 'dart:math';");
+ HighlightRegionType.DIRECTIVE, "export 'dart:math';");
assertHasStringRegion(HighlightRegionType.DIRECTIVE, "part 'part.dart';");
});
}
@@ -857,8 +849,7 @@
test_LITERAL_MAP() {
addTestFile("var V = const <int, String>{1: 'a', 2: 'b', 3: 'c'};");
return prepareHighlights().then((_) {
- assertHasStringRegion(
- HighlightRegionType.LITERAL_MAP,
+ assertHasStringRegion(HighlightRegionType.LITERAL_MAP,
"const <int, String>{1: 'a', 2: 'b', 3: 'c'}");
});
}
@@ -867,9 +858,7 @@
addTestFile('var V = "abc";');
return prepareHighlights().then((_) {
assertHasRegion(
- HighlightRegionType.LITERAL_STRING,
- '"abc";',
- '"abc"'.length);
+ HighlightRegionType.LITERAL_STRING, '"abc";', '"abc"'.length);
});
}
@@ -883,8 +872,7 @@
''');
return prepareHighlights().then((_) {
assertHasRegion(
- HighlightRegionType.LOCAL_VARIABLE_DECLARATION,
- 'vvv = 0');
+ HighlightRegionType.LOCAL_VARIABLE_DECLARATION, 'vvv = 0');
assertHasRegion(HighlightRegionType.LOCAL_VARIABLE, 'vvv;');
assertHasRegion(HighlightRegionType.LOCAL_VARIABLE, 'vvv = 1;');
});
@@ -906,8 +894,7 @@
return prepareHighlights().then((_) {
assertHasRegion(HighlightRegionType.METHOD_DECLARATION, 'aaa() {}');
assertHasRegion(
- HighlightRegionType.METHOD_DECLARATION_STATIC,
- 'bbb() {}');
+ HighlightRegionType.METHOD_DECLARATION_STATIC, 'bbb() {}');
assertHasRegion(HighlightRegionType.METHOD, 'aaa();');
assertHasRegion(HighlightRegionType.METHOD, 'aaa;');
assertHasRegion(HighlightRegionType.METHOD_STATIC, 'bbb();');
@@ -973,8 +960,7 @@
return prepareHighlights().then((_) {
assertHasRegion(HighlightRegionType.TOP_LEVEL_VARIABLE, 'VVV = 0');
assertHasRegion(
- HighlightRegionType.TOP_LEVEL_VARIABLE,
- 'VVV // annotation');
+ HighlightRegionType.TOP_LEVEL_VARIABLE, 'VVV // annotation');
assertHasRegion(HighlightRegionType.TOP_LEVEL_VARIABLE, 'VVV);');
assertHasRegion(HighlightRegionType.TOP_LEVEL_VARIABLE, 'VVV = 1');
});
@@ -1016,12 +1002,10 @@
}
}
-
@reflectiveTest
class HighlightTypeTest {
void test_constructor() {
- expect(
- HighlightRegionType.CLASS,
+ expect(HighlightRegionType.CLASS,
new HighlightRegionType(HighlightRegionType.CLASS.name));
}
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index a68da1d..8c6dab0 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -13,13 +13,11 @@
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(AnalysisNotificationNavigationTest);
}
-
@reflectiveTest
class AnalysisNotificationNavigationTest extends AbstractAnalysisTest {
List<NavigationRegion> regions;
@@ -47,7 +45,7 @@
}
fail(
'Expected to find target (file=$file; offset=$offset; length=$length) in\n'
- '${testRegion} in\n' '${testTargets.join('\n')}');
+ '${testRegion} in\n' '${testTargets.join('\n')}');
}
void assertHasOperatorRegion(String regionSearch, int regionLength,
@@ -155,9 +153,8 @@
if (region.offset == offset &&
(length == -1 || region.length == length)) {
if (exists == false) {
- fail(
- 'Not expected to find (offset=$offset; length=$length) in\n'
- '${regions.join('\n')}');
+ fail('Not expected to find (offset=$offset; length=$length) in\n'
+ '${regions.join('\n')}');
}
testRegion = region;
testTargetIndexes = region.targets;
@@ -165,9 +162,8 @@
}
}
if (exists == true) {
- fail(
- 'Expected to find (offset=$offset; length=$length) in\n'
- '${regions.join('\n')}');
+ fail('Expected to find (offset=$offset; length=$length) in\n'
+ '${regions.join('\n')}');
}
}
diff --git a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
index baa29d1..2b78fbf 100644
--- a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
@@ -13,13 +13,11 @@
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(AnalysisNotificationOccurrencesTest);
}
-
@reflectiveTest
class AnalysisNotificationOccurrencesTest extends AbstractAnalysisTest {
List<Occurrences> occurrencesList;
@@ -62,9 +60,8 @@
for (int occurrenceOffset in occurrences.offsets) {
if (occurrenceOffset == offset) {
if (exists == false) {
- fail(
- 'Not expected to find (offset=$offset; length=$length) in\n'
- '${occurrencesList.join('\n')}');
+ fail('Not expected to find (offset=$offset; length=$length) in\n'
+ '${occurrencesList.join('\n')}');
}
testOccurences = occurrences;
return;
@@ -72,9 +69,8 @@
}
}
if (exists == true) {
- fail(
- 'Expected to find (offset=$offset; length=$length) in\n'
- '${occurrencesList.join('\n')}');
+ fail('Expected to find (offset=$offset; length=$length) in\n'
+ '${occurrencesList.join('\n')}');
}
}
diff --git a/pkg/analysis_server/test/analysis/notification_outline_test.dart b/pkg/analysis_server/test/analysis/notification_outline_test.dart
index 8b6eccf..be856cd 100644
--- a/pkg/analysis_server/test/analysis/notification_outline_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_outline_test.dart
@@ -13,12 +13,10 @@
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
runReflectiveTests(_AnalysisNotificationOutlineTest);
}
-
@reflectiveTest
class _AnalysisNotificationOutlineTest extends AbstractAnalysisTest {
Outline outline;
diff --git a/pkg/analysis_server/test/analysis/notification_overrides_test.dart b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
index b9a3157..7875504 100644
--- a/pkg/analysis_server/test/analysis/notification_overrides_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
@@ -13,13 +13,11 @@
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(AnalysisNotificationOverridesTest);
}
-
@reflectiveTest
class AnalysisNotificationOverridesTest extends AbstractAnalysisTest {
List<Override> overridesList;
@@ -36,9 +34,8 @@
return;
}
}
- fail(
- 'Expect to find an overridden interface members at $offset in '
- '${override.interfaceMembers.join('\n')}');
+ fail('Expect to find an overridden interface members at $offset in '
+ '${override.interfaceMembers.join('\n')}');
}
/**
@@ -91,18 +88,16 @@
for (Override override in overridesList) {
if (override.offset == offset && override.length == length) {
if (exists == false) {
- fail(
- 'Not expected to find (offset=$offset; length=$length) in\n'
- '${overridesList.join('\n')}');
+ fail('Not expected to find (offset=$offset; length=$length) in\n'
+ '${overridesList.join('\n')}');
}
this.override = override;
return;
}
}
if (exists == true) {
- fail(
- 'Expected to find (offset=$offset; length=$length) in\n'
- '${overridesList.join('\n')}');
+ fail('Expected to find (offset=$offset; length=$length) in\n'
+ '${overridesList.join('\n')}');
}
}
diff --git a/pkg/analysis_server/test/analysis/reanalyze_test.dart b/pkg/analysis_server/test/analysis/reanalyze_test.dart
index c2c60af..0041e82 100644
--- a/pkg/analysis_server/test/analysis/reanalyze_test.dart
+++ b/pkg/analysis_server/test/analysis/reanalyze_test.dart
@@ -12,13 +12,11 @@
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(ReanalyzeTest);
}
-
@reflectiveTest
class ReanalyzeTest extends AbstractAnalysisTest {
Map<String, List<AnalysisError>> filesErrors = {};
@@ -51,9 +49,7 @@
resourceProvider.newFile(testFile, 'main() {}');
return waitForTasksFinished().then((_) {
// Update the content with an overlay that contains a syntax error.
- server.updateContent('1', {
- testFile: new AddContentOverlay('main() {')
- });
+ server.updateContent('1', {testFile: new AddContentOverlay('main() {')});
return waitForTasksFinished();
}).then((_) {
// Verify that the syntax error was detected.
diff --git a/pkg/analysis_server/test/analysis/update_content_test.dart b/pkg/analysis_server/test/analysis/update_content_test.dart
index 5b780a7..694b9e2 100644
--- a/pkg/analysis_server/test/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/analysis/update_content_test.dart
@@ -6,17 +6,22 @@
import 'package:analysis_server/src/constants.dart';
import 'package:analysis_server/src/protocol.dart';
+import 'package:analysis_server/src/services/index/index.dart';
+import 'package:analyzer/src/generated/ast.dart';
+import 'package:typed_mock/typed_mock.dart';
import 'package:unittest/unittest.dart';
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(UpdateContentTest);
}
+compilationUnitMatcher(String file) {
+ return new _ArgumentMatcher_CompilationUnit(file);
+}
@reflectiveTest
class UpdateContentTest extends AbstractAnalysisTest {
@@ -24,6 +29,10 @@
int serverErrorCount = 0;
int navigationCount = 0;
+ Index createIndex() {
+ return new _MockIndex();
+ }
+
@override
void processNotification(Notification notification) {
if (notification.event == ANALYSIS_ERRORS) {
@@ -42,22 +51,17 @@
createProject();
addTestFile('');
await server.onAnalysisComplete;
- server.setAnalysisSubscriptions({
- AnalysisService.NAVIGATION: [testFile].toSet()
- });
+ server.setAnalysisSubscriptions(
+ {AnalysisService.NAVIGATION: [testFile].toSet()});
// update file, analyze, but don't sent notifications
navigationCount = 0;
- server.updateContent('1', {
- testFile: new AddContentOverlay('foo() {}')
- });
+ server.updateContent('1', {testFile: new AddContentOverlay('foo() {}')});
server.test_performAllAnalysisOperations();
expect(serverErrorCount, 0);
expect(navigationCount, 0);
// replace the file contents,
// should discard any pending notification operations
- server.updateContent('2', {
- testFile: new AddContentOverlay('bar() {}')
- });
+ server.updateContent('2', {testFile: new AddContentOverlay('bar() {}')});
await server.onAnalysisComplete;
expect(serverErrorCount, 0);
expect(navigationCount, 1);
@@ -80,6 +84,26 @@
}
}
+ test_indexUnitAfterNopChange() async {
+ var testUnitMatcher = compilationUnitMatcher(testFile) as dynamic;
+ createProject();
+ addTestFile('main() { print(1); }');
+ await server.onAnalysisComplete;
+ verify(server.index.indexUnit(anyObject, testUnitMatcher)).times(1);
+ // add an overlay
+ server.updateContent(
+ '1', {testFile: new AddContentOverlay('main() { print(2); }')});
+ // Perform the next single operation: analysis.
+ // It will schedule an indexing operation.
+ await server.test_onOperationPerformed;
+ // Update the file and remove an overlay.
+ resourceProvider.updateFile(testFile, 'main() { print(2); }');
+ server.updateContent('2', {testFile: new RemoveContentOverlay()});
+ // Validate that at the end the unit was indexed.
+ await server.onAnalysisComplete;
+ verify(server.index.indexUnit(anyObject, testUnitMatcher)).times(2);
+ }
+
test_multiple_contexts() {
String fooPath = '/project1/foo.dart';
resourceProvider.newFile(fooPath, '''
@@ -97,8 +121,7 @@
f(int i) {}
''');
Request request = new AnalysisSetAnalysisRootsParams(
- ['/project1', '/project2'],
- []).toRequest('0');
+ ['/project1', '/project2'], []).toRequest('0');
handleSuccessfulRequest(request);
return waitForTasksFinished().then((_) {
// Files foo.dart and bar.dart should both have errors, since they both
@@ -126,9 +149,8 @@
addTestFile('');
await server.onAnalysisComplete;
// add an overlay
- server.updateContent('1', {
- testFile: new AddContentOverlay('main() {} main() {}')
- });
+ server.updateContent(
+ '1', {testFile: new AddContentOverlay('main() {} main() {}')});
await server.onAnalysisComplete;
// clear errors and make a no-op change
filesErrors.clear();
@@ -145,9 +167,8 @@
addTestFile('');
await server.onAnalysisComplete;
// add an overlay
- server.updateContent('1', {
- testFile: new AddContentOverlay('main() {} main() {}')
- });
+ server.updateContent(
+ '1', {testFile: new AddContentOverlay('main() {} main() {}')});
await server.onAnalysisComplete;
// clear errors and make a no-op change
filesErrors.clear();
@@ -160,3 +181,18 @@
expect(filesErrors, isNotEmpty);
}
}
+
+class _ArgumentMatcher_CompilationUnit extends ArgumentMatcher {
+ final String file;
+
+ _ArgumentMatcher_CompilationUnit(this.file);
+
+ @override
+ bool matches(arg) {
+ return arg is CompilationUnit && arg.element.source.fullName == file;
+ }
+}
+
+class _MockIndex extends TypedMock implements Index {
+ noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
diff --git a/pkg/analysis_server/test/analysis_abstract.dart b/pkg/analysis_server/test/analysis_abstract.dart
index c42b3b2..4e1e410 100644
--- a/pkg/analysis_server/test/analysis_abstract.dart
+++ b/pkg/analysis_server/test/analysis_abstract.dart
@@ -19,7 +19,6 @@
import 'mock_sdk.dart';
import 'mocks.dart';
-
int findIdentifierLength(String search) {
int length = 0;
while (length < search.length) {
@@ -34,7 +33,6 @@
return length;
}
-
/**
* An abstract base for all 'analysis' domain tests.
*/
@@ -64,8 +62,8 @@
}
files.add(file);
// set subscriptions
- Request request =
- new AnalysisSetSubscriptionsParams(analysisSubscriptions).toRequest('0');
+ Request request = new AnalysisSetSubscriptionsParams(analysisSubscriptions)
+ .toRequest('0');
handleSuccessfulRequest(request);
}
@@ -81,13 +79,8 @@
}
AnalysisServer createAnalysisServer(Index index) {
- return new AnalysisServer(
- serverChannel,
- resourceProvider,
- packageMapProvider,
- index,
- new AnalysisServerOptions(),
- new MockSdk(),
+ return new AnalysisServer(serverChannel, resourceProvider,
+ packageMapProvider, index, new AnalysisServerOptions(), new MockSdk(),
InstrumentationService.NULL_SERVICE);
}
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
index 2a8a68c..94f5e40 100644
--- a/pkg/analysis_server/test/analysis_server_test.dart
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -112,14 +112,9 @@
void setUp() {
channel = new MockServerChannel();
resourceProvider = new MemoryResourceProvider();
- server = new AnalysisServer(
- channel,
- resourceProvider,
- new MockPackageMapProvider(),
- null,
- new AnalysisServerOptions(),
- new MockSdk(),
- InstrumentationService.NULL_SERVICE,
+ server = new AnalysisServer(channel, resourceProvider,
+ new MockPackageMapProvider(), null, new AnalysisServerOptions(),
+ new MockSdk(), InstrumentationService.NULL_SERVICE,
rethrowExceptions: true);
}
@@ -194,9 +189,7 @@
wasAdded = false;
wasChanged = false;
wasRemoved = false;
- server.setAnalysisRoots('0', ['/foo'], [], {
- '/foo': '/bar'
- });
+ server.setAnalysisRoots('0', ['/foo'], [], {'/foo': '/bar'});
return pumpEventQueue();
}).then((_) {
expect(wasAdded, isFalse);
@@ -265,8 +258,8 @@
resourceProvider.newFile('/foo/foo.dart', 'import "../bar/bar.dart";');
File bar = resourceProvider.newFile('/bar/bar.dart', 'library bar;');
server.setAnalysisRoots('0', ['/foo', '/bar'], [], {});
- Map<AnalysisService, Set<String>> subscriptions = <AnalysisService,
- Set<String>>{};
+ Map<AnalysisService, Set<String>> subscriptions =
+ <AnalysisService, Set<String>>{};
for (AnalysisService service in AnalysisService.VALUES) {
subscriptions[service] = <String>[bar.path].toSet();
}
@@ -274,9 +267,8 @@
await pumpEventQueue(100);
expect(server.statusAnalyzing, isFalse);
channel.notificationsReceived.clear();
- server.updateContent('0', {
- bar.path: new AddContentOverlay('library bar; void f() {}')
- });
+ server.updateContent(
+ '0', {bar.path: new AddContentOverlay('library bar; void f() {}')});
await pumpEventQueue(100);
expect(server.statusAnalyzing, isFalse);
expect(channel.notificationsReceived, isNotEmpty);
@@ -337,8 +329,8 @@
void test_rethrowExceptions() {
Exception exceptionToThrow = new Exception('test exception');
- MockServerOperation operation =
- new MockServerOperation(ServerOperationPriority.ANALYSIS, (_) {
+ MockServerOperation operation = new MockServerOperation(
+ ServerOperationPriority.ANALYSIS, (_) {
throw exceptionToThrow;
});
server.operationQueue.add(operation);
@@ -361,9 +353,8 @@
AnalysisResult firstResult = new AnalysisResult([notice], 0, '', 0);
AnalysisResult lastResult = new AnalysisResult(null, 1, '', 1);
when(context.analysisOptions).thenReturn(new AnalysisOptionsImpl());
- when(
- context.performAnalysisTask).thenReturnList(
- [firstResult, firstResult, firstResult, lastResult]);
+ when(context.performAnalysisTask)
+ .thenReturnList([firstResult, firstResult, firstResult, lastResult]);
server.serverServices.add(ServerService.STATUS);
server.schedulePerformAnalysisOperation(context);
// Pump the event queue to make sure the server has finished any
@@ -409,9 +400,7 @@
@override
Response handleRequest(Request request) {
if (request.method == 'echo') {
- return new Response(request.id, result: {
- 'echo': true
- });
+ return new Response(request.id, result: {'echo': true});
}
return null;
}
diff --git a/pkg/analysis_server/test/channel/byte_stream_channel_test.dart b/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
index 297a3a0..4a5631b 100644
--- a/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
+++ b/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
@@ -20,19 +20,16 @@
setUp(ByteStreamClientChannelTest.setUp);
test('close', ByteStreamClientChannelTest.close);
test(
- 'listen_notification',
- ByteStreamClientChannelTest.listen_notification);
+ 'listen_notification', ByteStreamClientChannelTest.listen_notification);
test('listen_response', ByteStreamClientChannelTest.listen_response);
test('sendRequest', ByteStreamClientChannelTest.sendRequest);
});
group('ByteStreamServerChannel', () {
setUp(ByteStreamServerChannelTest.setUp);
test('closed', ByteStreamServerChannelTest.closed);
- test(
- 'listen_wellFormedRequest',
+ test('listen_wellFormedRequest',
ByteStreamServerChannelTest.listen_wellFormedRequest);
- test(
- 'listen_invalidRequest',
+ test('listen_invalidRequest',
ByteStreamServerChannelTest.listen_invalidRequest);
test('listen_invalidJson', ByteStreamServerChannelTest.listen_invalidJson);
test('listen_streamError', ByteStreamServerChannelTest.listen_streamError);
@@ -65,7 +62,7 @@
bool doneCalled = false;
bool closeCalled = false;
// add listener so that outputSink will trigger done/close futures
- outputLineStream.listen((_) { /* no-op */ });
+ outputLineStream.listen((_) {/* no-op */});
outputSink.done.then((_) {
doneCalled = true;
});
@@ -119,8 +116,9 @@
var inputStream = new StreamController<List<int>>();
inputSink = new IOSink(inputStream);
var outputStream = new StreamController<List<int>>();
- outputLineStream = outputStream.stream.transform(
- (new Utf8Codec()).decoder).transform(new LineSplitter());
+ outputLineStream = outputStream.stream
+ .transform((new Utf8Codec()).decoder)
+ .transform(new LineSplitter());
outputSink = new IOSink(outputStream);
channel = new ByteStreamClientChannel(inputStream.stream, outputSink);
}
@@ -156,16 +154,17 @@
static Future doneFuture;
static Future closed() {
- return inputSink.close().then(
- (_) => channel.closed.timeout(new Duration(seconds: 1)));
+ return inputSink
+ .close()
+ .then((_) => channel.closed.timeout(new Duration(seconds: 1)));
}
static Future listen_invalidJson() {
inputSink.writeln('{"id":');
- return inputSink.flush().then(
- (_) =>
- outputLineStream.first.timeout(
- new Duration(seconds: 1))).then((String response) {
+ return inputSink
+ .flush()
+ .then((_) => outputLineStream.first.timeout(new Duration(seconds: 1)))
+ .then((String response) {
var jsonResponse = new JsonCodec().decode(response);
expect(jsonResponse, isMap);
expect(jsonResponse, contains('error'));
@@ -175,10 +174,10 @@
static Future listen_invalidRequest() {
inputSink.writeln('{"id":"0"}');
- return inputSink.flush().then(
- (_) =>
- outputLineStream.first.timeout(
- new Duration(seconds: 1))).then((String response) {
+ return inputSink
+ .flush()
+ .then((_) => outputLineStream.first.timeout(new Duration(seconds: 1)))
+ .then((String response) {
var jsonResponse = new JsonCodec().decode(response);
expect(jsonResponse, isMap);
expect(jsonResponse, contains('error'));
@@ -187,25 +186,28 @@
}
static Future listen_streamDone() {
- return inputSink.close().then(
- (_) => doneFuture.timeout(new Duration(seconds: 1)));
+ return inputSink
+ .close()
+ .then((_) => doneFuture.timeout(new Duration(seconds: 1)));
}
static Future listen_streamError() {
var error = new Error();
inputSink.addError(error);
- return inputSink.flush().then(
- (_) =>
- errorStream.first.timeout(new Duration(seconds: 1))).then((var receivedError) {
+ return inputSink
+ .flush()
+ .then((_) => errorStream.first.timeout(new Duration(seconds: 1)))
+ .then((var receivedError) {
expect(receivedError, same(error));
});
}
static Future listen_wellFormedRequest() {
inputSink.writeln('{"id":"0","method":"server.version"}');
- return inputSink.flush().then(
- (_) =>
- requestStream.first.timeout(new Duration(seconds: 1))).then((Request request) {
+ return inputSink
+ .flush()
+ .then((_) => requestStream.first.timeout(new Duration(seconds: 1)))
+ .then((Request request) {
expect(request.id, equals("0"));
expect(request.method, equals("server.version"));
});
@@ -213,8 +215,8 @@
static Future sendNotification() {
channel.sendNotification(new Notification('foo'));
- return outputLineStream.first.timeout(
- new Duration(seconds: 1)).then((String notification) {
+ return outputLineStream.first.timeout(new Duration(seconds: 1)).then(
+ (String notification) {
var jsonNotification = new JsonCodec().decode(notification);
expect(jsonNotification, isMap);
expect(jsonNotification, contains('event'));
@@ -224,8 +226,8 @@
static Future sendResponse() {
channel.sendResponse(new Response('foo'));
- return outputLineStream.first.timeout(
- new Duration(seconds: 1)).then((String response) {
+ return outputLineStream.first.timeout(new Duration(seconds: 1)).then(
+ (String response) {
var jsonResponse = new JsonCodec().decode(response);
expect(jsonResponse, isMap);
expect(jsonResponse, contains('id'));
@@ -238,13 +240,12 @@
inputSink = new IOSink(inputStream);
StreamController<List<int>> outputStream =
new StreamController<List<int>>();
- outputLineStream = outputStream.stream.transform(
- (new Utf8Codec()).decoder).transform(new LineSplitter());
+ outputLineStream = outputStream.stream
+ .transform((new Utf8Codec()).decoder)
+ .transform(new LineSplitter());
IOSink outputSink = new IOSink(outputStream);
channel = new ByteStreamServerChannel(
- inputStream.stream,
- outputSink,
- InstrumentationService.NULL_SERVICE);
+ inputStream.stream, outputSink, InstrumentationService.NULL_SERVICE);
StreamController<Request> requestStreamController =
new StreamController<Request>();
requestStream = requestStreamController.stream;
diff --git a/pkg/analysis_server/test/channel/test_all.dart b/pkg/analysis_server/test/channel/test_all.dart
index cbffffd..896155e 100644
--- a/pkg/analysis_server/test/channel/test_all.dart
+++ b/pkg/analysis_server/test/channel/test_all.dart
@@ -9,7 +9,6 @@
import 'byte_stream_channel_test.dart' as byte_stream_channel_test;
import 'web_socket_channel_test.dart' as web_socket_channel_test;
-
/**
* Utility for manually running all tests.
*/
diff --git a/pkg/analysis_server/test/channel/web_socket_channel_test.dart b/pkg/analysis_server/test/channel/web_socket_channel_test.dart
index f88798d..b7b6391 100644
--- a/pkg/analysis_server/test/channel/web_socket_channel_test.dart
+++ b/pkg/analysis_server/test/channel/web_socket_channel_test.dart
@@ -20,8 +20,7 @@
test('invalidJsonToClient', WebSocketChannelTest.invalidJsonToClient);
test('invalidJsonToServer', WebSocketChannelTest.invalidJsonToServer);
test('notification', WebSocketChannelTest.notification);
- test(
- 'notificationAndResponse',
+ test('notificationAndResponse',
WebSocketChannelTest.notificationAndResponse);
test('request', WebSocketChannelTest.request);
test('requestResponse', WebSocketChannelTest.requestResponse);
@@ -45,16 +44,17 @@
return future;
}
- static void expectMsgCount({requestCount: 0, responseCount: 0,
- notificationCount: 0}) {
+ static void expectMsgCount(
+ {requestCount: 0, responseCount: 0, notificationCount: 0}) {
expect(requestsReceived, hasLength(requestCount));
expect(responsesReceived, hasLength(responseCount));
expect(notificationsReceived, hasLength(notificationCount));
}
static Future invalidJsonToClient() {
- var result = client.responseStream.first.timeout(
- new Duration(seconds: 1)).then((Response response) {
+ var result = client.responseStream.first
+ .timeout(new Duration(seconds: 1))
+ .then((Response response) {
expect(response.id, equals('myId'));
expectMsgCount(responseCount: 1);
});
@@ -64,8 +64,9 @@
}
static Future invalidJsonToServer() {
- var result = client.responseStream.first.timeout(
- new Duration(seconds: 1)).then((Response response) {
+ var result = client.responseStream.first
+ .timeout(new Duration(seconds: 1))
+ .then((Response response) {
expect(response.id, equals(''));
expect(response.error, isNotNull);
expectMsgCount(responseCount: 1);
@@ -75,8 +76,9 @@
}
static Future notification() {
- var result = client.notificationStream.first.timeout(
- new Duration(seconds: 1)).then((Notification notification) {
+ var result = client.notificationStream.first
+ .timeout(new Duration(seconds: 1))
+ .then((Notification notification) {
expect(notification.event, equals('myEvent'));
expectMsgCount(notificationCount: 1);
expect(notificationsReceived.first, equals(notification));
@@ -86,16 +88,13 @@
}
static Future notificationAndResponse() {
- var result = Future.wait(
- [
- client.notificationStream.first,
- client.responseStream.first]).timeout(
- new Duration(
- seconds: 1)).then(
- (_) => expectMsgCount(responseCount: 1, notificationCount: 1));
+ var result = Future
+ .wait([client.notificationStream.first, client.responseStream.first])
+ .timeout(new Duration(seconds: 1))
+ .then((_) => expectMsgCount(responseCount: 1, notificationCount: 1));
server
- ..sendNotification(new Notification('myEvent'))
- ..sendResponse(new Response('myId'));
+ ..sendNotification(new Notification('myEvent'))
+ ..sendResponse(new Response('myId'));
return result;
}
@@ -112,10 +111,10 @@
// Simulate server sending a response by echoing the request.
server.listen(
(Request request) => server.sendResponse(new Response(request.id)));
- return client.sendRequest(
- new Request(
- 'myId',
- 'myMth')).timeout(new Duration(seconds: 1)).then((Response response) {
+ return client
+ .sendRequest(new Request('myId', 'myMth'))
+ .timeout(new Duration(seconds: 1))
+ .then((Response response) {
expect(response.id, equals('myId'));
expectMsgCount(requestCount: 1, responseCount: 1);
@@ -129,8 +128,8 @@
static Future response() {
server.sendResponse(new Response('myId'));
- return client.responseStream.first.timeout(
- new Duration(seconds: 1)).then((Response response) {
+ return client.responseStream.first.timeout(new Duration(seconds: 1)).then(
+ (Response response) {
expect(response.id, equals('myId'));
expectMsgCount(responseCount: 1);
});
@@ -139,8 +138,8 @@
static void setUp() {
socket = new MockSocket.pair();
client = new WebSocketClientChannel(socket);
- server =
- new WebSocketServerChannel(socket.twin, InstrumentationService.NULL_SERVICE);
+ server = new WebSocketServerChannel(
+ socket.twin, InstrumentationService.NULL_SERVICE);
requestsReceived = [];
responsesReceived = [];
diff --git a/pkg/analysis_server/test/completion_test.dart b/pkg/analysis_server/test/completion_test.dart
index aa47d3e..eec4109 100644
--- a/pkg/analysis_server/test/completion_test.dart
+++ b/pkg/analysis_server/test/completion_test.dart
@@ -71,25 +71,23 @@
buildTests('testCommentSnippets007', '''
class C {mth(Map x, !1) {}mtf(!2, Map x) {}m() {for (in!3t i=0; i<5; i++); A!4 x;}}class int{}class Arrays{}''',
- <String>["1+bool", "2+bool", "3+int", "4+Arrays"],
- failingTests: '3');
+ <String>["1+bool", "2+bool", "3+int", "4+Arrays"], failingTests: '3');
buildTests('testCommentSnippets008', '''
class Date{}final num M = Dat!1''', <String>["1+Date"]);
// space, char, eol are important
buildTests('testCommentSnippets009', '''
-class Maps{}class x extends!5 !2M!3 !4implements!6 !1\n{}''',
- <String>[
- "1+Map",
- "2+Maps",
- "3+Maps",
- "4-Maps",
- "4+implements",
- "5-Maps",
- "6-Map",
- "6+implements"],
- failingTests: '46');
+class Maps{}class x extends!5 !2M!3 !4implements!6 !1\n{}''', <String>[
+ "1+Map",
+ "2+Maps",
+ "3+Maps",
+ "4-Maps",
+ "4+implements",
+ "5-Maps",
+ "6-Map",
+ "6+implements"
+ ], failingTests: '46');
// space, char, eol are important
buildTests('testCommentSnippets010', '''
@@ -120,9 +118,14 @@
class F {var x = !1false;}''', <String>["1+true"], failingTests: '1');
buildTests('testCommentSnippets018', '''
-class Map{}class Arrays{}class C{ m(!1){} n(!2 x, q)''',
- <String>["1+Map", "1-void", "1-null", "2+Arrays", "2-void", "2-null"],
- failingTests: '1');
+class Map{}class Arrays{}class C{ m(!1){} n(!2 x, q)''', <String>[
+ "1+Map",
+ "1-void",
+ "1-null",
+ "2+Arrays",
+ "2-void",
+ "2-null"
+ ], failingTests: '1');
buildTests('testCommentSnippets019', '''
class A{m(){Object x;x.!1/**/clear()''', <String>["1+toString"]);
@@ -133,8 +136,7 @@
buildTests('testCommentSnippets021', '''
class Map{}class tst {var newt;void newf(){}test() {var newz;new !1/**/;}}''',
- <String>["1+Map", "1-newt"],
- failingTests: '1');
+ <String>["1+Map", "1-newt"], failingTests: '1');
buildTests('testCommentSnippets022', '''
class Map{}class F{m(){new !1;}}''', <String>["1+Map"], failingTests: '1');
@@ -155,21 +157,18 @@
buildTests('testCommentSnippets025', '''
class q {num m() {var q; num x=!1 q!3 + !2/**/;}}''',
- <String>["1+q", "2+q", "3+q"],
- failingTests: '123');
+ <String>["1+q", "2+q", "3+q"], failingTests: '123');
buildTests('testCommentSnippets026', '''
class List{}class a implements !1{}''', <String>["1+List"], failingTests: '1');
buildTests('testCommentSnippets027', '''
class String{}class List{}class test <X extends !1String!2> {}''',
- <String>["1+List", "2+String", "2-List"],
- failingTests: '12');
+ <String>["1+List", "2+String", "2-List"], failingTests: '12');
buildTests('testCommentSnippets028', '''
class String{}class List{}class DateTime{}typedef T Y<T extends !1>(List input);''',
- <String>["1+DateTime", "1+String"],
- failingTests: '1');
+ <String>["1+DateTime", "1+String"], failingTests: '1');
buildTests('testCommentSnippets029', '''
interface A<X> default B<X extends !1List!2> {}''',
@@ -182,13 +181,11 @@
buildTests('testCommentSnippets031', '''
class Bar<T extends Foo> {m(x){if (x is !1) return;if (x is!!!2)}}''',
- <String>["1+Bar", "1+T", "2+T", "2+Bar"],
- failingTests: '12');
+ <String>["1+Bar", "1+T", "2+T", "2+Bar"], failingTests: '12');
buildTests('testCommentSnippets032', '''
class Fit{}class Bar<T extends Fooa> {const !2F!1ara();}''',
- <String>["1+Fit", "1+Fara", "1-Bar", "2+Fit"],
- failingTests: '1');
+ <String>["1+Fit", "1+Fara", "1-Bar", "2+Fit"], failingTests: '1');
// Type propagation
buildTests('testCommentSnippets033', '''
@@ -236,8 +233,7 @@
buildTests('testCommentSnippets044', '''
class List{}class XXX {XXX.fisk();}main() {main(); new !1}}''',
- <String>["1+List", "1+XXX.fisk"],
- failingTests: '1');
+ <String>["1+List", "1+XXX.fisk"], failingTests: '1');
buildTests('testCommentSnippets047', '''
f(){int x;int y=!1;}''', <String>["1+x"]);
@@ -249,15 +245,15 @@
import 'dart:convert' as json;
import 'dart:convert' as jxx;
class JsonDecoderX{}
-f1() {var x=new !2j!1s!3}''',
- <String>[
- "1+json",
- "1+jxx",
- "2+json",
- "2+jxx",
- "2-JsonDecoder",
- "3+json",
- "3-jxx"]);
+f1() {var x=new !2j!1s!3}''', <String>[
+ "1+json",
+ "1+jxx",
+ "2+json",
+ "2+jxx",
+ "2-JsonDecoder",
+ "3+json",
+ "3-jxx"
+ ]);
buildTests('testCommentSnippets050', '''
class xdr {
@@ -270,19 +266,18 @@
k() {
new x!1dr().f();
const x!2dr.!3a(1, 2, 3);
-}''',
- <String>[
- "1+xdr",
- "1+xa",
- "1+xdr.a",
- "1+xdr.b",
- "2-xa",
- "2-xdr",
- "2+xdr.a",
- "2-xdr.b",
- "3-b",
- "3+a"],
- failingTests: '123');
+}''', <String>[
+ "1+xdr",
+ "1+xa",
+ "1+xdr.a",
+ "1+xdr.b",
+ "2+xa", // suggest default constructor
+ "2+xdr", // suggest normal constructor
+ "2+xdr.a",
+ "2+xdr.b", // suggest named constructor
+ "3+b", // suggest named constructor
+ "3+a"
+ ]);
// Type propagation.
buildTests('testCommentSnippets051', '''
@@ -412,19 +407,19 @@
Spline h() {
return null;
}
-}''',
- <String>[
- "1+a",
- "2+b",
- "1-g",
- "2-h",
- "3+b",
- "4+c",
- "5+a",
- "6+c",
- "7+g",
- "8+j",
- "9+h"]);
+}''', <String>[
+ "1+a",
+ "2+b",
+ "1-g",
+ "2-h",
+ "3+b",
+ "4+c",
+ "5+a",
+ "6+c",
+ "7+g",
+ "8+j",
+ "9+h"
+ ]);
buildTests('testCommentSnippets065', '''
class Spline {
@@ -604,13 +599,11 @@
buildTests('testCommentSnippets076', '''
class Map<K,V>{}class List<E>{}class int{}main() {var m=new Map<Lis!1t<Map<int,in!2t>>,List<!3int>>();}''',
- <String>["1+List", "2+int", "3+int"],
- failingTests: '123');
+ <String>["1+List", "2+int", "3+int"], failingTests: '123');
buildTests('testCommentSnippets076a', '''
class Map<K,V>{}class List<E>{}class int{}main() {var m=new Map<Lis!1t<Map<int,in!2t>>,List<!3>>();}''',
- <String>["1+List", "2+int", "3+int"],
- failingTests: '123');
+ <String>["1+List", "2+int", "3+int"], failingTests: '123');
buildTests('testCommentSnippets077', '''
class FileMode {
@@ -626,14 +619,13 @@
factory File(String path) => null;
factory File.fromPath(Path path) => null;
}
-f() => new Fil!1''',
- <String>[
- "1+File",
- "1+File.fromPath",
- "1+FileMode",
- "1+FileMode._internal1",
- "1+FileMode._internal"],
- failingTests: '1');
+f() => new Fil!1''', <String>[
+ "1+File",
+ "1+File.fromPath",
+ "1+FileMode",
+ "1+FileMode._internal1",
+ "1+FileMode._internal"
+ ]);
buildTests('testCommentSnippets078', '''
class Map{static from()=>null;clear(){}}void main() { Map.!1 }''',
@@ -667,24 +659,26 @@
main() { null.!1 }''', <String>["1+toString"], failingTests: '1');
buildTests('testCommentSnippets084', '''
-class List{}class Map{}typedef X = !1Lis!2t with !3Ma!4p;''',
- <String>["1+Map", "2+List", "2-Map", "3+List", "4+Map", "4-List"],
- failingTests: '1234');
+class List{}class Map{}typedef X = !1Lis!2t with !3Ma!4p;''', <String>[
+ "1+Map",
+ "2+List",
+ "2-Map",
+ "3+List",
+ "4+Map",
+ "4-List"
+ ], failingTests: '1234');
buildTests('testCommentSnippets085', '''
class List{}class Map{}class Z extends List with !1Ma!2p {}''',
- <String>["1+List", "1+Map", "2+Map", "2-List"],
- failingTests: '12');
+ <String>["1+List", "1+Map", "2+Map", "2-List"], failingTests: '12');
buildTests('testCommentSnippets086', '''
-class Q{f(){xy() {!2};x!1y();}}''',
- <String>["1+xy", "2+f", "2-xy"],
+class Q{f(){xy() {!2};x!1y();}}''', <String>["1+xy", "2+f", "2-xy"],
failingTests: '2');
buildTests('testCommentSnippets087', '''
class Map{}class Q extends Object with !1Map {}''',
- <String>["1+Map", "1-HashMap"],
- failingTests: '1');
+ <String>["1+Map", "1-HashMap"], failingTests: '1');
buildTests('testCommentSnippets088', '''
class A {
@@ -718,43 +712,41 @@
fqi() {
!5
}
-}''',
- <String>[
- "1+fqe",
- "1+fqi",
- "1+Q",
- "1-xya",
- "1-xyb",
- "1-xza",
- "2+fqe",
- "2+fqi",
- "2+Q",
- "2-xya",
- "2-xyb",
- "2-xza",
- "3+fqe",
- "3+fqi",
- "3+Q",
- "3-xya",
- "3+xyb",
- "3-xza",
- "4+fqe",
- "4+fqi",
- "4+Q",
- "4+xya",
- "4-xyb",
- "4+xza",
- "5+fqe",
- "5+fqi",
- "5+Q",
- "5-xya",
- "5-xyb",
- "5-xza"],
- failingTests: '123');
+}''', <String>[
+ "1+fqe",
+ "1+fqi",
+ "1+Q",
+ "1-xya",
+ "1-xyb",
+ "1-xza",
+ "2+fqe",
+ "2+fqi",
+ "2+Q",
+ "2-xya",
+ "2-xyb",
+ "2-xza",
+ "3+fqe",
+ "3+fqi",
+ "3+Q",
+ "3-xya",
+ "3+xyb",
+ "3-xza",
+ "4+fqe",
+ "4+fqi",
+ "4+Q",
+ "4+xya",
+ "4-xyb",
+ "4+xza",
+ "5+fqe",
+ "5+fqi",
+ "5+Q",
+ "5-xya",
+ "5-xyb",
+ "5-xza"
+ ], failingTests: '123');
buildTests('testCommentSnippets090', '''
-class X { f() { var a = 'x'; a.!1 }}''',
- <String>["1+length"]);
+class X { f() { var a = 'x'; a.!1 }}''', <String>["1+length"]);
}
void buildCompletionTests() {
@@ -768,8 +760,7 @@
",
@AAA(!1)
main() {
-}''',
- <String>["1+AAA" /*":" + ProposalKind.ARGUMENT_LIST*/, "1+aaa", "1+bbb"],
+}''', <String>["1+AAA" /*":" + ProposalKind.ARGUMENT_LIST*/, "1+aaa", "1+bbb"],
failingTests: '1');
buildTests('testCompletion_annotation_topLevelVar', '''
@@ -788,11 +779,10 @@
}
@AAA!1
main() {
-}''',
- <String>[
- "1+AAA" /*":" + ProposalKind.CONSTRUCTOR*/,
- "1+AAA.nnn" /*":" + ProposalKind.CONSTRUCTOR*/],
- failingTests: '1');
+}''', <String>[
+ "1+AAA" /*":" + ProposalKind.CONSTRUCTOR*/,
+ "1+AAA.nnn" /*":" + ProposalKind.CONSTRUCTOR*/
+ ], failingTests: '1');
buildTests('testCompletion_annotation_type_inClass_withoutMember', '''
class AAA {
@@ -854,8 +844,7 @@
buildTests('testCompletion_combinator_afterComma', '''
"import 'dart:math' show cos, !1;''',
- <String>["1+PI", "1+sin", "1+Random", "1-String"],
- failingTests: '1');
+ <String>["1+PI", "1+sin", "1+Random", "1-String"], failingTests: '1');
buildTests('testCompletion_combinator_ended', '''
import 'dart:math' show !1;"''',
@@ -878,8 +867,7 @@
<String>["1+sin", "1+sqrt", "1-cos", "1-String"]);
buildTests('testCompletion_constructor_field', '''
-class X { X(this.field); int f!1ield;}''',
- <String>["1+field"],
+class X { X(this.field); int f!1ield;}''', <String>["1+field"],
failingTests: '1');
buildTests('testCompletion_constructorArguments_showOnlyCurrent', '''
@@ -915,8 +903,7 @@
*/
A.named(aaa, bbb) {}
methodA() {}
-}''',
- <String>["1+aaa", "1-bbb", "2+int", "2-double", "3+methodA"],
+}''', <String>["1+aaa", "1-bbb", "2+int", "2-double", "3+methodA"],
failingTests: '1');
buildTests('testCompletion_dartDoc_reference_forFunction', '''
@@ -926,16 +913,15 @@
* [function!3]
*/
functionA(aaa, bbb) {}
-functionB() {}''',
- <String>[
- "1+aaa",
- "1-bbb",
- "2+int",
- "2-double",
- "3+functionA",
- "3+functionB",
- "3-int"],
- failingTests: '1');
+functionB() {}''', <String>[
+ "1+aaa",
+ "1-bbb",
+ "2+int",
+ "2-double",
+ "3+functionA",
+ "3+functionB",
+ "3-int"
+ ], failingTests: '1');
buildTests('testCompletion_dartDoc_reference_forFunctionTypeAlias', '''
/**
@@ -944,16 +930,15 @@
* [Function!3]
*/
typedef FunctionA(aaa, bbb) {}
-typedef FunctionB() {}''',
- <String>[
- "1+aaa",
- "1-bbb",
- "2+int",
- "2-double",
- "3+FunctionA",
- "3+FunctionB",
- "3-int"],
- failingTests: '1');
+typedef FunctionB() {}''', <String>[
+ "1+aaa",
+ "1-bbb",
+ "2+int",
+ "2-double",
+ "3+FunctionA",
+ "3+FunctionB",
+ "3-int"
+ ], failingTests: '1');
buildTests('testCompletion_dartDoc_reference_forMethod', '''
class A {
@@ -964,15 +949,15 @@
*/
methodA(aaa, bbb) {}
methodB() {}
-}''',
- <String>[
- "1+aaa",
- "1-bbb",
- "2+int",
- "2-double",
- "3+methodA",
- "3+methodB",
- "3-int"]);
+}''', <String>[
+ "1+aaa",
+ "1-bbb",
+ "2+int",
+ "2-double",
+ "3+methodA",
+ "3+methodB",
+ "3-int"
+ ]);
buildTests('testCompletion_dartDoc_reference_incomplete', '''
/**
@@ -988,8 +973,14 @@
/**
* [!3] some text
*/
-class C {}''',
- <String>["1+double", "1-int", "2+int", "2+String", "3+int", "3+String"]);
+class C {}''', <String>[
+ "1+double",
+ "1-int",
+ "2+int",
+ "2+String",
+ "3+int",
+ "3+String"
+ ]);
buildTests('testCompletion_double_inFractionPart', '''
main() {
@@ -1009,27 +1000,26 @@
str!1;
STR!2;
Str!3;
-}''',
- <String>[
- "1+str" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 1)*/,
- "1+STR" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 0)*/,
- "2+STR" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 1)*/,
- "2+str" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 0)*/,
- "3+String" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 1)*/,
- "3+STR" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 0)*/,
- "3+str" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 0)*/]);
+}''', <String>[
+ "1+str" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 1)*/,
+ "1+STR" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 0)*/,
+ "2+STR" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 1)*/,
+ "2+str" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 0)*/,
+ "3+String" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 1)*/,
+ "3+STR" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 0)*/,
+ "3+str" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 0)*/
+ ]);
buildTests('testCompletion_export_dart', '''
import 'dart:math
import 'dart:_chrome
import 'dart:_collection.dev
-export 'dart:!1''',
- <String>[
- "1+dart:core",
- "1+dart:math",
- "1-dart:_chrome",
- "1-dart:_collection.dev"],
- failingTests: '1');
+export 'dart:!1''', <String>[
+ "1+dart:core",
+ "1+dart:math",
+ "1-dart:_chrome",
+ "1-dart:_collection.dev"
+ ], failingTests: '1');
buildTests('testCompletion_export_noStringLiteral_noSemicolon', '''
import !1
@@ -1038,8 +1028,7 @@
buildTests('testCompletion_forStmt_vars', '''
class int{}class Foo { mth() { for (in!1t i = 0; i!2 < 5; i!3++); }}''',
- <String>["1+int", "2+i", "3+i"],
- failingTests: '1');
+ <String>["1+int", "2+i", "3+i"], failingTests: '1');
buildTests('testCompletion_function', '''
class Foo { int boo = 7; mth() { PNGS.sort((String a, Str!1) => a.compareTo(b)); }}''',
@@ -1117,13 +1106,12 @@
import 'dart:math
import 'dart:_chrome
import 'dart:_collection.dev
-import 'dart:!1''',
- <String>[
- "1+dart:core",
- "1+dart:math",
- "1-dart:_chrome",
- "1-dart:_collection.dev"],
- failingTests: '1');
+import 'dart:!1''', <String>[
+ "1+dart:core",
+ "1+dart:math",
+ "1-dart:_chrome",
+ "1-dart:_collection.dev"
+ ], failingTests: '1');
buildTests('testCompletion_import_hasStringLiteral_noSemicolon', '''
import '!1'
@@ -1160,8 +1148,7 @@
1 < str.!1.length;
1 + str.!2.length;
1 + 2 * str.!3.length;
-}''',
- <String>["1+codeUnits", "2+codeUnits", "3+codeUnits"],
+}''', <String>["1+codeUnits", "2+codeUnits", "3+codeUnits"],
failingTests: '123');
// no checks, but no exceptions
@@ -1174,9 +1161,8 @@
}''', <String>["1+int", "2+int"]);
buildTests('testCompletion_import_lib', '''
-import '!1''', <String>["1+my_lib.dart"], extraFiles: <String, String>{
- "/my_lib.dart": ""
- }, failingTests: '1');
+import '!1''', <String>["1+my_lib.dart"],
+ extraFiles: <String, String>{"/my_lib.dart": ""}, failingTests: '1');
buildTests('testCompletion_is', '''
class MyClass {}
@@ -1186,9 +1172,14 @@
var v1 = p is MyCla!2;
var v2 = p is !3;
var v2 = p is!4;
-}''',
- <String>["1+MyClass", "2+MyClass", "3+MyClass", "3-v1", "4+is", "4-isVariable"],
- failingTests: '4');
+}''', <String>[
+ "1+MyClass",
+ "2+MyClass",
+ "3+MyClass",
+ "3-v1",
+ "4+is",
+ "4-isVariable"
+ ], failingTests: '4');
buildTests('testCompletion_is_asIdentifierStart', '''
main(p) {
@@ -1246,11 +1237,10 @@
bar(p) {}
main(p) {
foo( Functions.!1; );
-}''',
- <String>[
- "1+myFuncInt" /*":" + ProposalKind.METHOD_NAME*/,
- "1-myFuncDouble" /*":" + ProposalKind.METHOD_NAME*/],
- failingTests: '1');
+}''', <String>[
+ "1+myFuncInt" /*":" + ProposalKind.METHOD_NAME*/,
+ "1-myFuncDouble" /*":" + ProposalKind.METHOD_NAME*/
+ ], failingTests: '1');
buildTests('testCompletion_methodRef_asArg_notFunctionType', '''
foo( f(int p) ) {}
@@ -1260,11 +1250,10 @@
bar(p) {}
main(p) {
foo( (int p) => Functions.!1; );
-}''',
- <String>[
- "1+myFunc" /*":" + ProposalKind.METHOD*/,
- "1-myFunc" /*":" + ProposalKind.METHOD_NAME*/],
- failingTests: '1');
+}''', <String>[
+ "1+myFunc" /*":" + ProposalKind.METHOD*/,
+ "1-myFunc" /*":" + ProposalKind.METHOD_NAME*/
+ ], failingTests: '1');
buildTests('testCompletion_methodRef_asArg_ofFunctionType', '''
foo( f(int p) ) {}
@@ -1273,30 +1262,27 @@
}
main(p) {
foo(Functions.!1);
-}''',
- <String>[
- "1+myFunc" /*":" + ProposalKind.METHOD*/,
- "1+myFunc" /*":" + ProposalKind.METHOD_NAME*/]);
+}''', <String>[
+ "1+myFunc" /*":" + ProposalKind.METHOD*/,
+ "1+myFunc" /*":" + ProposalKind.METHOD_NAME*/
+ ]);
buildTests('testCompletion_namedArgument_alreadyUsed', '''
func({foo}) {} main() { func(foo: 0, fo!1); }''', <String>["1-foo"]);
buildTests('testCompletion_namedArgument_constructor', '''
class A {A({foo, bar}) {}} main() { new A(fo!1); }''',
- <String>["1+foo", "1-bar"],
- failingTests: '1');
+ <String>["1+foo", "1-bar"], failingTests: '1');
buildTests('testCompletion_namedArgument_empty', '''
-func({foo, bar}) {} main() { func(!1); }''',
- <String>[
- "1+foo" /*":" + ProposalKind.NAMED_ARGUMENT*/,
- "1-foo" /*":" + ProposalKind.OPTIONAL_ARGUMENT*/],
- failingTests: '1');
+func({foo, bar}) {} main() { func(!1); }''', <String>[
+ "1+foo" /*":" + ProposalKind.NAMED_ARGUMENT*/,
+ "1-foo" /*":" + ProposalKind.OPTIONAL_ARGUMENT*/
+ ], failingTests: '1');
buildTests('testCompletion_namedArgument_function', '''
func({foo, bar}) {} main() { func(fo!1); }''',
- <String>["1+foo", "1-bar"],
- failingTests: '1');
+ <String>["1+foo", "1-bar"], failingTests: '1');
buildTests('testCompletion_namedArgument_notNamed', '''
func([foo]) {} main() { func(fo!1); }''', <String>["1-foo"]);
@@ -1306,18 +1292,15 @@
buildTests('testCompletion_newMemberType1', '''
class Collection{}class List extends Collection{}class Foo { !1 }''',
- <String>["1+Collection", "1+List"],
- failingTests: '1');
+ <String>["1+Collection", "1+List"], failingTests: '1');
buildTests('testCompletion_newMemberType2', '''
class Collection{}class List extends Collection{}class Foo {!1}''',
- <String>["1+Collection", "1+List"],
- failingTests: '1');
+ <String>["1+Collection", "1+List"], failingTests: '1');
buildTests('testCompletion_newMemberType3', '''
class Collection{}class List extends Collection{}class Foo {L!1}''',
- <String>["1-Collection", "1+List"],
- failingTests: '1');
+ <String>["1-Collection", "1+List"], failingTests: '1');
buildTests('testCompletion_newMemberType4', '''
class Collection{}class List extends Collection{}class Foo {C!1}''',
@@ -1330,26 +1313,26 @@
main() {
new A(!1);
new A(0, !2);
-}''',
- <String>[
- "1+foo" /*":" + ProposalKind.OPTIONAL_ARGUMENT*/,
- "1-bar",
- "2-foo",
- "2+bar" /*":"
- + ProposalKind.OPTIONAL_ARGUMENT*/], failingTests: '12');
+}''', <String>[
+ "1+foo" /*":" + ProposalKind.OPTIONAL_ARGUMENT*/,
+ "1-bar",
+ "2-foo",
+ "2+bar" /*":"
+ + ProposalKind.OPTIONAL_ARGUMENT*/
+ ], failingTests: '12');
buildTests('testCompletion_positionalArgument_function', '''
func([foo, bar]) {}
main() {
func(!1);
func(0, !2);
-}''',
- <String>[
- "1+foo" /*":" + ProposalKind.OPTIONAL_ARGUMENT*/,
- "1-bar",
- "2-foo",
- "2+bar" /*":"
- + ProposalKind.OPTIONAL_ARGUMENT*/], failingTests: '12');
+}''', <String>[
+ "1+foo" /*":" + ProposalKind.OPTIONAL_ARGUMENT*/,
+ "1-bar",
+ "2-foo",
+ "2+bar" /*":"
+ + ProposalKind.OPTIONAL_ARGUMENT*/
+ ], failingTests: '12');
buildTests('testCompletion_preferStaticType', '''
class A {
@@ -1361,12 +1344,11 @@
main() {
A v = new B();
v.!1
-}''',
- <String>[
- "1+foo",
- "1-bar,potential=false,declaringType=B",
- "1+bar,potential=true,declaringType=B"],
- failingTests: '1');
+}''', <String>[
+ "1+foo",
+ "1-bar,potential=false,declaringType=B",
+ "1+bar,potential=true,declaringType=B"
+ ], failingTests: '1');
buildTests('testCompletion_privateElement_sameLibrary_constructor', '''
class A {
@@ -1406,8 +1388,7 @@
}
main() {
B.!1;
-}''',
- <String>["1+FIELD_B", "1-FIELD_A", "1+methodB", "1-methodA"],
+}''', <String>["1+FIELD_B", "1-FIELD_A", "1+methodB", "1-methodA"],
failingTests: '1');
buildTests('testCompletion_propertyAccess_whenInstanceTarget', '''
@@ -1424,8 +1405,7 @@
main(B b, C c) {
b.a.!1;
c.!2;
-}''',
- <String>["1-FIELD", "1+fieldA", "2+fieldC", "2+fieldA"]);
+}''', <String>["1-FIELD", "1+fieldA", "2+fieldC", "2+fieldA"]);
buildTests('testCompletion_return_withIdentifierPrefix', '''
f() { var vvv = 42; return v!1 }''', <String>["1+vvv"]);
@@ -1521,8 +1501,7 @@
buildTests('testCompletion_topLevelField_init2', '''
class DateTime{static var JUN;}final num M = Dat!1eTime.JUN;''',
- <String>["1+DateTime", "1-void"],
- failingTests: '1');
+ <String>["1+DateTime", "1-void"], failingTests: '1');
buildTests('testCompletion_while', '''
class Foo { int boo = 7; mth() { while (b!1) {} }}''', <String>["1+boo"]);
@@ -1547,10 +1526,8 @@
import 'lib.dart' as p;
main() {
p.!1
-}''',
- <String>["1+cos", "1-sin", "1+libFunction"],
- extraFiles: sources,
- failingTests: '1');
+}''', <String>["1+cos", "1-sin", "1+libFunction"],
+ extraFiles: sources, failingTests: '1');
buildTests('test_importPrefix_hideCombinator', '''
import 'dart:math' as math hide PI;
@@ -1602,10 +1579,8 @@
import 'lib.dart';
main(A a) {
a.!1
- }''',
- <String>["1-_f", "1+f"],
- extraFiles: sources,
- failingTests: '1');
+ }''', <String>["1-_f", "1+f"],
+ extraFiles: sources, failingTests: '1');
sources.clear();
sources["/firth.dart"] = '''
@@ -1616,25 +1591,21 @@
buildTests('testLibrary001', '''
import 'firth.dart';
main() {
-throw new Seria!1lizationException();}''',
- <String>["1+SerializationException"],
- extraFiles: sources,
- failingTests: '1');
+throw new Seria!1lizationException();}''', <String>["1+SerializationException"],
+ extraFiles: sources, failingTests: '1');
// Type propagation.
// TODO Include corelib analysis (this works in the editor)
- buildTests(
- 'testLibrary002',
+ buildTests('testLibrary002',
'''t2() {var q=[0],z=q.!1length;q.!2clear();}''',
- <String>["1+length", "1+isEmpty", "2+clear"],
- failingTests: '1');
+ <String>["1+length", "1+isEmpty", "2+clear"], failingTests: '1');
// TODO Include corelib analysis
- buildTests(
- 'testLibrary003',
- '''class X{var q; f() {q.!1a!2}}''',
- <String>["1+end", "2+abs", "2-end"],
- failingTests: '12');
+ buildTests('testLibrary003', '''class X{var q; f() {q.!1a!2}}''', <String>[
+ "1+end",
+ "2+abs",
+ "2-end"
+ ], failingTests: '12');
// TODO Include corelib analysis
// Resolving dart:html takes between 2.5s and 30s; json, about 0.12s
@@ -1644,22 +1615,21 @@
class JsonDecoderX{}
f1() {var x=new json.!1}
f2() {var x=new json.JsonDe!2}
- f3() {var x=new json.JsonDecoder!3}''',
- <String>[
- "1+JsonDecoder",
- "1-JsonDecoderX",
- "2+JsonDecoder",
- "2-JsonDecoderX",
- "3+JsonDecoder",
- "3-JsonDecoderX"]);
+ f3() {var x=new json.JsonDecoder!3}''', <String>[
+ "1+JsonDecoder",
+ "1-JsonDecoderX",
+ "2+JsonDecoder",
+ "2-JsonDecoderX",
+ "3+JsonDecoder",
+ "3-JsonDecoderX"
+ ]);
// TODO Enable after type propagation is implemented. Not yet.
// TODO Include corelib analysis
- buildTests(
- 'testLibrary005',
- '''var PHI;main(){PHI=5.3;PHI.abs().!1 Object x;}''',
- <String>["1+abs"],
- failingTests: '1');
+ buildTests('testLibrary005',
+ '''var PHI;main(){PHI=5.3;PHI.abs().!1 Object x;}''', <String>[
+ "1+abs"
+ ], failingTests: '1');
// Exercise import and export handling.
// Libraries are defined in partial order of increasing dependency.
@@ -1691,10 +1661,8 @@
e1a();
e1b();
e2a();
-}''',
- <String>["1+i1", "1+i2", "1+e1a", "1+e2a", "1+e1b"],
- extraFiles: sources,
- failingTests: '1');
+}''', <String>["1+i1", "1+i2", "1+e1a", "1+e2a", "1+e1b"],
+ extraFiles: sources, failingTests: '1');
// Exercise import and export handling.
// Libraries are defined in partial order of increasing dependency.
@@ -1707,10 +1675,8 @@
main() {
var x = l!1
var y = _!2
-}''',
- <String>["1+l1t", "1-_l1t", "2-_l1t"],
- extraFiles: sources,
- failingTests: '1');
+}''', <String>["1+l1t", "1-_l1t", "2-_l1t"],
+ extraFiles: sources, failingTests: '1');
// Check private library exclusion
sources.clear();
@@ -1735,10 +1701,8 @@
NonPrivate x = new NonPrivate();
x.!1 //publicMethod but not privateMethod should appear
}
-}''',
- <String>["1-privateMethod", "1+publicMethod"],
- extraFiles: sources,
- failingTests: '1');
+}''', <String>["1-privateMethod", "1+publicMethod"],
+ extraFiles: sources, failingTests: '1');
// Exercise library prefixes.
sources.clear();
@@ -1760,37 +1724,35 @@
}
void d() {
new Q.!4
-}''',
- <String>[
- "1+X",
- "1+m",
- "1+Y",
- "2+X",
- "2+m",
- "2+Y",
- "3+X",
- "3+m",
- "3+Y",
- "4+Y",
- "4-m",
- "4-X"],
- extraFiles: sources,
- failingTests: '1234');
+}''', <String>[
+ "1+X",
+ "1+m",
+ "1+Y",
+ "2+X",
+ "2+m",
+ "2+Y",
+ "3+X",
+ "3+m",
+ "3+Y",
+ "4+Y",
+ "4-m",
+ "4-X"
+ ], extraFiles: sources, failingTests: '1234');
}
void buildNumberedTests() {
buildTests('test001', '''
void r1(var v) {
v.!1toString!2().!3hash!4Code
-}''',
- <String>[
- "1+toString",
- "1-==",
- "2+toString",
- "3+hashCode",
- "3+toString",
- "4+hashCode",
- "4-toString"]);
+}''', <String>[
+ "1+toString",
+ "1-==",
+ "2+toString",
+ "3+hashCode",
+ "3+toString",
+ "4+hashCode",
+ "4-toString"
+ ]);
buildTests('test002', '''
void r2(var vim) {
@@ -1818,29 +1780,28 @@
var !1vq = v!2.toString();
var vf;
v!3.toString();
-}''',
- <String>[
- "1-A",
- "1-vim",
- "1+vq",
- "1-vf",
- "1-this",
- "1-void",
- "1-null",
- "1-false",
- "2-A",
- "2+vim",
- "2-vf",
- "2-vq",
- "2-this",
- "2-void",
- "2-null",
- "2-false",
- "3+vf",
- "3+vq",
- "3+vim",
- "3-A"],
- failingTests: '1');
+}''', <String>[
+ "1-A",
+ "1-vim",
+ "1+vq",
+ "1-vf",
+ "1-this",
+ "1-void",
+ "1-null",
+ "1-false",
+ "2-A",
+ "2+vim",
+ "2-vf",
+ "2-vq",
+ "2-this",
+ "2-void",
+ "2-null",
+ "2-false",
+ "3+vf",
+ "3+vq",
+ "3+vim",
+ "3-A"
+ ], failingTests: '1');
buildTests('test006', '''
void r2(var vim, {va: 2, b: 3}) {
@@ -1859,80 +1820,74 @@
!5typedef Ctype = !6Bclass with !7Aclass;
class Dclass extends !8Ctype {}
!9abstract class Eclass implements Dclass,!C Ctype, Bclass {}
-class Fclass extends Bclass !Awith !B Eclass {}''',
- <String>[
- "1+class",
- "1-implements",
- "1-extends",
- "1-with",
- "2+extends",
- "3+extends",
- "4+Aclass",
- "4-Bclass",
- "5+typedef",
- "6+Bclass",
- "6-Ctype",
- "7+Aclass",
- "7-Bclass",
- "8+Ctype",
- "9+abstract",
- "A+with",
- "B+Eclass",
- "B-Dclass",
- "B-Ctype",
- "C+Bclass",
- "C-Eclass"],
- failingTests: '12345679ABC');
+class Fclass extends Bclass !Awith !B Eclass {}''', <String>[
+ "1+class",
+ "1-implements",
+ "1-extends",
+ "1-with",
+ "2+extends",
+ "3+extends",
+ "4+Aclass",
+ "4-Bclass",
+ "5+typedef",
+ "6+Bclass",
+ "6-Ctype",
+ "7+Aclass",
+ "7-Bclass",
+ "8+Ctype",
+ "9+abstract",
+ "A+with",
+ "B+Eclass",
+ "B-Dclass",
+ "B-Ctype",
+ "C+Bclass",
+ "C-Eclass"
+ ], failingTests: '12345679ABC');
// keywords
buildTests('test009', '''
typedef !1dy!2namic TestFn1();
typedef !3vo!4id TestFn2();
-typ!7edef !5n!6''',
- <String>[
- "1+void",
- "1+TestFn2",
- "2+dynamic",
- "2-void",
- "3+dynamic",
- "4+void",
- "4-dynamic",
- "5+TestFn2",
- "6+num",
- "7+typedef"],
- failingTests: '12347');
+typ!7edef !5n!6''', <String>[
+ "1+void",
+ "1+TestFn2",
+ "2+dynamic",
+ "2-void",
+ "3+dynamic",
+ "4+void",
+ "4-dynamic",
+ "5+TestFn2",
+ "6+num",
+ "7+typedef"
+ ], failingTests: '12347');
buildTests('test010', '''
class test !8<!1t !2 !3extends String,!4 List,!5 !6>!7 {}
-class tezetst !9<!BString,!C !DList>!A {}''',
- <String>[
- "1-String",
- "1-List",
- "1-test",
- "2-String",
- "2-test",
- "3+extends",
- "4-tezetst",
- "4-test",
- "5-String",
- "6-List",
- "7-List",
- "8-List",
- "9-String",
- "A-String",
- "B-String",
- "C-List",
- "C-tezetst",
- "D-List",
- "D-test"],
- failingTests: '23');
+class tezetst !9<!BString,!C !DList>!A {}''', <String>[
+ "1-String",
+ "1-List",
+ "1-test",
+ "2-String",
+ "2-test",
+ "3+extends",
+ "4-tezetst",
+ "4-test",
+ "5-String",
+ "6-List",
+ "7-List",
+ "8-List",
+ "9-String",
+ "A-String",
+ "B-String",
+ "C-List",
+ "C-tezetst",
+ "D-List",
+ "D-test"
+ ], failingTests: '23');
// name generation with conflicts
- buildTests(
- 'test011',
- '''r2(var object, Object object1, Object !1);''',
- <String>["1+object2"],
- failingTests: '1');
+ buildTests('test011', '''r2(var object, Object object1, Object !1);''',
+ <String>["1+object2"], failingTests: '1');
// reserved words
buildTests('test012', '''
@@ -1940,17 +1895,16 @@
f() {
g(!1var!2 z) {!3true.!4toString();};
}
-}''',
- <String>[
- "1+var",
- "1+dynamic",
- "1-f",
- "2+var",
- "2-dynamic",
- "3+false",
- "3+true",
- "4+toString"],
- failingTests: '123');
+}''', <String>[
+ "1+var",
+ "1+dynamic",
+ "1-f",
+ "2+var",
+ "2-dynamic",
+ "3+false",
+ "3+true",
+ "4+toString"
+ ], failingTests: '123');
// conditions & operators
buildTests('test013', '''
@@ -1968,20 +1922,19 @@
} on !5Object catch(a){}
if (!7x !6) {} else {};
}
-}''',
- <String>[
- "1+x",
- "2+x",
- "3+zs",
- "4+k",
- "5+Q",
- "5-a",
- "6+==",
- "7+x",
- "8+==",
- "9+==",
- "0+k"],
- failingTests: '5689');
+}''', <String>[
+ "1+x",
+ "2+x",
+ "3+zs",
+ "4+k",
+ "5+Q",
+ "5-a",
+ "6+==",
+ "7+x",
+ "8+==",
+ "9+==",
+ "0+k"
+ ], failingTests: '5689');
// keywords
buildTests('test014', '''
@@ -2002,66 +1955,57 @@
!Jif (x) {} !Kelse {};
!Lreturn;
}
-}''',
- <String>[
- "1+while",
- "2+do",
- "3+while",
- "4+for",
- "5+in",
- "6+for",
- "7+switch",
- "8+case",
- "9+default",
- "A+try",
- "B+on",
- "C+catch",
- "D+var",
- "E+void",
- "F+assert",
- "G+continue",
- "H+break",
- "J+if",
- "K+else",
- "L+return"],
- failingTests: '123456789ABCDEFGHJKL');
+}''', <String>[
+ "1+while",
+ "2+do",
+ "3+while",
+ "4+for",
+ "5+in",
+ "6+for",
+ "7+switch",
+ "8+case",
+ "9+default",
+ "A+try",
+ "B+on",
+ "C+catch",
+ "D+var",
+ "E+void",
+ "F+assert",
+ "G+continue",
+ "H+break",
+ "J+if",
+ "K+else",
+ "L+return"
+ ], failingTests: '123456789ABCDEFGHJKL');
// operators in function
- buildTests(
- 'test015',
- '''f(a,b,c) => a + b * c !1;''',
- <String>["1+=="],
+ buildTests('test015', '''f(a,b,c) => a + b * c !1;''', <String>["1+=="],
failingTests: '1');
// operators in return
- buildTests(
- 'test016',
- '''class X {dynamic f(a,b,c) {return a + b * c !1;}}''',
- <String>["1+=="],
- failingTests: '1');
+ buildTests('test016',
+ '''class X {dynamic f(a,b,c) {return a + b * c !1;}}''', <String>[
+ "1+=="
+ ], failingTests: '1');
// keywords
buildTests('test017', '''
!1library foo;
!2import 'x' !5as r;
!3export '!8uri' !6hide Q !7show X;
-!4part 'x';''',
- <String>[
- "1+library",
- "2+import",
- "3+export",
- "4+part",
- "5+as",
- "6+hide",
- "7+show",
- "8-null"],
- failingTests: '1234567');
+!4part 'x';''', <String>[
+ "1+library",
+ "2+import",
+ "3+export",
+ "4+part",
+ "5+as",
+ "6+hide",
+ "7+show",
+ "8-null"
+ ], failingTests: '1234567');
// keywords
- buildTests(
- 'test018',
- '''!1part !2of foo;''',
- <String>["1+part", "2+of"],
+ buildTests('test018', '''!1part !2of foo;''', <String>["1+part", "2+of"],
failingTests: '12');
buildTests('test019', '''
@@ -2071,22 +2015,13 @@
var foo = true!1
}''', <String>["1+true", "1+truefalse", "1-falsetrue"], failingTests: '1');
- buildTests(
- 'test020',
- '''var x = null.!1''',
- <String>["1+toString"],
+ buildTests('test020', '''var x = null.!1''', <String>["1+toString"],
failingTests: '1');
- buildTests(
- 'test021',
- '''var x = .!1''',
- <String>["1-toString"],
+ buildTests('test021', '''var x = .!1''', <String>["1-toString"],
failingTests: '1');
- buildTests(
- 'test022',
- '''var x = .!1;''',
- <String>["1-toString"],
+ buildTests('test022', '''var x = .!1;''', <String>["1-toString"],
failingTests: '1');
buildTests('test023', '''
@@ -2141,30 +2076,28 @@
var g = R.!Em;
var h = R.!Fg();
}
-}''',
- <String>[
- "1+m",
- "2+_m",
- "3+g",
- "4+m",
- "5+_m",
- "6+g",
- "7-g",
- "8-m",
- "9-_m",
- "A+_m",
- "B+m",
- "C+g",
- "D+_m",
- "E+m",
- "F+g"]);
+}''', <String>[
+ "1+m",
+ "2+_m",
+ "3+g",
+ "4+m",
+ "5+_m",
+ "6+g",
+ "7-g",
+ "8-m",
+ "9-_m",
+ "A+_m",
+ "B+m",
+ "C+g",
+ "D+_m",
+ "E+m",
+ "F+g"
+ ]);
buildTests('test026', '''var aBcD; var x=ab!1''', <String>["1+aBcD"]);
buildTests(
- 'test027',
- '''m(){try{}catch(eeee,ssss){s!1}''',
- <String>["1+ssss"]);
+ 'test027', '''m(){try{}catch(eeee,ssss){s!1}''', <String>["1+ssss"]);
buildTests('test028', '''m(){var isX=3;if(is!1)''', <String>["1+isX"]);
@@ -2172,8 +2105,7 @@
buildTests('test030', '''n(){[1].forEach((x){!1});}''', <String>["1+x"]);
- buildTests(
- 'test031',
+ buildTests('test031',
'''class Caster {} m() {try {} on Cas!1ter catch (CastBlock) {!2}}''',
<String>["1+Caster", "1-CastBlock", "2+Caster", "2+CastBlock"],
failingTests: '1');
@@ -2192,22 +2124,20 @@
case ONE!1: return;
default: return;
}
-}''',
- <String>[
- "1+ONE",
- "1-UKSI",
- "2+EIN",
- "2-ICHI",
- "3+ICHI",
- "3+UKSI",
- "3+EIN",
- "3+ONE"]);
+}''', <String>[
+ "1+ONE",
+ "1-UKSI",
+ "2+EIN",
+ "2-ICHI",
+ "3+ICHI",
+ "3+UKSI",
+ "3+EIN",
+ "3+ONE"
+ ]);
- buildTests(
- 'test033',
+ buildTests('test033',
'''class A{}class B extends A{b(){}}class C implements A {c(){}}class X{x(){A f;f.!1}}''',
- <String>["1+b", "1-c"],
- failingTests: '1');
+ <String>["1+b", "1-c"], failingTests: '1');
// TODO(scheglov) decide what to do with Type for untyped field (not
// supported by the new store)
@@ -2238,9 +2168,7 @@
}''', <String>["1+top", "2+top"], failingTests: '12');
// test analysis of untyped fields and top-level vars
- buildTests(
- 'test035',
- '''class Y {final x='hi';mth() {x.!1length;}}''',
+ buildTests('test035', '''class Y {final x='hi';mth() {x.!1length;}}''',
<String>["1+length"]);
// TODO(scheglov) decide what to do with Type for untyped field (not
@@ -2284,43 +2212,32 @@
}''', <String>["1+y", "1-x", "2+x", "2-y"], failingTests: '2');
// test analysis of untyped fields and top-level vars
- buildTests(
- 'test039',
- '''class X{}var x = null as !1X;''',
- <String>["1+X", "1-void"]);
+ buildTests('test039', '''class X{}var x = null as !1X;''', <String>[
+ "1+X",
+ "1-void"
+ ]);
// test arg lists with named params
- buildTests(
- 'test040',
- '''m(){f(a, b, {x1, x2, y}) {};f(1, 2, !1)!2;}''',
- <String>["1+x1", "2-x2"],
- failingTests: '1');
+ buildTests('test040', '''m(){f(a, b, {x1, x2, y}) {};f(1, 2, !1)!2;}''',
+ <String>["1+x1", "2-x2"], failingTests: '1');
// test arg lists with named params
- buildTests(
- 'test041',
- '''m(){f(a, b, {x1, x2, y}) {};f(1, 2, !1''',
- <String>["1+x1", "1+x2", "1+y"],
- failingTests: '1');
+ buildTests('test041', '''m(){f(a, b, {x1, x2, y}) {};f(1, 2, !1''',
+ <String>["1+x1", "1+x2", "1+y"], failingTests: '1');
// test arg lists with named params
- buildTests(
- 'test042',
- '''m(){f(a, b, {x1, x2, y}) {};f(1, 2, !1;!2''',
- <String>["1+x1", "1+x2", "2-y"],
- failingTests: '1');
+ buildTests('test042', '''m(){f(a, b, {x1, x2, y}) {};f(1, 2, !1;!2''',
+ <String>["1+x1", "1+x2", "2-y"], failingTests: '1');
}
void buildOtherTests() {
- buildTests(
- 'test_classMembers_inGetter',
- '''class A { var fff; get z {ff!1}}''',
- <String>["1+fff"]);
+ buildTests('test_classMembers_inGetter',
+ '''class A { var fff; get z {ff!1}}''', <String>["1+fff"]);
- buildTests(
- 'testSingle',
- '''class A {int x; !2mth() {int y = this.x;}}class B{}''',
- <String>["2+B"]);
+ buildTests('testSingle',
+ '''class A {int x; !2mth() {int y = this.x;}}class B{}''', <String>[
+ "2+B"
+ ]);
}
/**
@@ -2352,9 +2269,8 @@
});
if (completionTests.isEmpty) {
test(baseName, () {
- fail(
- "Expected exclamation point ('!') within the source denoting the"
- "position at which code completion should occur");
+ fail("Expected exclamation point ('!') within the source denoting the"
+ "position at which code completion should occur");
});
}
Set<String> allSpecIds =
diff --git a/pkg/analysis_server/test/completion_test_support.dart b/pkg/analysis_server/test/completion_test_support.dart
index d9fb3c6..8d002eb 100644
--- a/pkg/analysis_server/test/completion_test_support.dart
+++ b/pkg/analysis_server/test/completion_test_support.dart
@@ -19,9 +19,9 @@
class CompletionTestCase extends CompletionTest {
static const String CURSOR_MARKER = '!';
- List get suggestedCompletions =>
- suggestions.map(
- (CompletionSuggestion suggestion) => suggestion.completion).toList();
+ List get suggestedCompletions => suggestions
+ .map((CompletionSuggestion suggestion) => suggestion.completion)
+ .toList();
void assertHasCompletion(String completion) {
int expectedOffset = completion.indexOf(CURSOR_MARKER);
@@ -53,8 +53,8 @@
}
void assertHasNoCompletion(String completion) {
- if (suggestions.any(
- (CompletionSuggestion suggestion) => suggestion.completion == completion)) {
+ if (suggestions.any((CompletionSuggestion suggestion) =>
+ suggestion.completion == completion)) {
fail(
"Did not expect completion '$completion' but found:\n $suggestedCompletions");
}
@@ -67,9 +67,10 @@
void filterResults(String content) {
String charsAlreadyTyped =
content.substring(replacementOffset, completionOffset).toLowerCase();
- suggestions = suggestions.where(
- (CompletionSuggestion suggestion) =>
- suggestion.completion.toLowerCase().startsWith(charsAlreadyTyped)).toList();
+ suggestions = suggestions
+ .where((CompletionSuggestion suggestion) =>
+ suggestion.completion.toLowerCase().startsWith(charsAlreadyTyped))
+ .toList();
}
runTest(LocationSpec spec, [Map<String, String> extraFiles]) {
@@ -126,8 +127,8 @@
* The [originalSource] is the source for a test that contains test locations.
* The [validationStrings] are the positive and negative predictions.
*/
- static List<LocationSpec> from(String originalSource,
- List<String> validationStrings) {
+ static List<LocationSpec> from(
+ String originalSource, List<String> validationStrings) {
Map<String, LocationSpec> tests = new HashMap<String, LocationSpec>();
String modifiedSource = originalSource;
int modifiedPosition = 0;
@@ -146,8 +147,8 @@
} else {
modifiedPosition = index + 1;
}
- modifiedSource =
- modifiedSource.substring(0, index) + modifiedSource.substring(index + n);
+ modifiedSource = modifiedSource.substring(0, index) +
+ modifiedSource.substring(index + n);
}
if (modifiedSource == originalSource) {
throw new IllegalStateException("No tests in source: " + originalSource);
@@ -190,8 +191,8 @@
err.write("No test location for tests:");
for (String ch in badPoints) {
err
- ..write(' ')
- ..write(ch);
+ ..write(' ')
+ ..write(ch);
}
err.write(' ');
}
@@ -199,8 +200,8 @@
err.write("No results for tests:");
for (String ch in badResults) {
err
- ..write(' ')
- ..write(ch);
+ ..write(' ')
+ ..write(ch);
}
}
throw new IllegalStateException(err.toString());
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index 0eecd28..eab479f 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -9,6 +9,7 @@
import 'package:analysis_server/src/context_manager.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/instrumentation/instrumentation.dart';
import 'package:analyzer/source/package_map_provider.dart';
import 'package:analyzer/source/package_map_resolver.dart';
import 'package:analyzer/src/generated/engine.dart';
@@ -20,13 +21,11 @@
import 'mocks.dart';
import 'reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(ContextManagerTest);
}
-
@reflectiveTest
class ContextManagerTest {
/**
@@ -100,9 +99,7 @@
resourceProvider.newFolder(project);
resourceProvider.newFolder(excludedFolder);
manager.setRoots(
- <String>[project],
- <String>[excludedFolder],
- <String, String>{});
+ <String>[project], <String>[excludedFolder], <String, String>{});
// verify
expect(manager.isInAnalysisRoot('$excludedFolder/test.dart'), isFalse);
}
@@ -144,14 +141,12 @@
resourceProvider.newFile(pubspec2Path, 'pubspec');
manager.setRoots(<String>[projPath], <String>[], <String, String>{});
return pumpEventQueue().then((_) {
- expect(
- manager.currentContextPaths.toSet(),
+ expect(manager.currentContextPaths.toSet(),
[subdir1Path, subdir2Path, projPath].toSet());
manager.now++;
manager.refresh();
return pumpEventQueue().then((_) {
- expect(
- manager.currentContextPaths.toSet(),
+ expect(manager.currentContextPaths.toSet(),
[subdir1Path, subdir2Path, projPath].toSet());
expect(manager.currentContextTimestamps[projPath], manager.now);
expect(manager.currentContextTimestamps[subdir1Path], manager.now);
@@ -189,6 +184,15 @@
expect(filePaths, isEmpty);
}
+ void test_setRoots_addFolderWithoutPubspec() {
+ packageMapProvider.packageMap = null;
+ manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+ // verify
+ expect(manager.currentContextPaths, hasLength(1));
+ expect(manager.currentContextPaths, contains(projPath));
+ expect(manager.currentContextFilePaths[projPath], hasLength(0));
+ }
+
void test_setRoots_addFolderWithPubspec() {
String pubspecPath = posix.join(projPath, 'pubspec.yaml');
resourceProvider.newFile(pubspecPath, 'pubspec');
@@ -211,8 +215,9 @@
newFile([srcPath, 'internal.dart']);
String testFilePath = newFile([testPath, 'main_test.dart']);
- packageMapProvider.packageMap['proj'] =
- [resourceProvider.getResource(libPath)];
+ packageMapProvider.packageMap['proj'] = [
+ resourceProvider.getResource(libPath)
+ ];
manager.setRoots(<String>[projPath], <String>[], <String, String>{});
Set<Source> sources = manager.currentContextSources[projPath];
@@ -244,12 +249,8 @@
resourceProvider.newFile(subProjectB_file, 'library b;');
// configure package maps
packageMapProvider.packageMaps = {
- subProjectA: {
- 'foo': [resourceProvider.newFolder('/package/foo')]
- },
- subProjectB: {
- 'bar': [resourceProvider.newFolder('/package/bar')]
- },
+ subProjectA: {'foo': [resourceProvider.newFolder('/package/foo')]},
+ subProjectB: {'bar': [resourceProvider.newFolder('/package/bar')]},
};
// set roots
manager.setRoots(<String>[root], <String>[], <String, String>{});
@@ -261,36 +262,22 @@
// verify package maps
_checkPackageMap(root, isNull);
_checkPackageMap(
- subProjectA,
- equals(packageMapProvider.packageMaps[subProjectA]));
+ subProjectA, equals(packageMapProvider.packageMaps[subProjectA]));
_checkPackageMap(
- subProjectB,
- equals(packageMapProvider.packageMaps[subProjectB]));
- }
-
- void test_setRoots_addFolderWithoutPubspec() {
- packageMapProvider.packageMap = null;
- manager.setRoots(<String>[projPath], <String>[], <String, String>{});
- // verify
- expect(manager.currentContextPaths, hasLength(1));
- expect(manager.currentContextPaths, contains(projPath));
- expect(manager.currentContextFilePaths[projPath], hasLength(0));
+ subProjectB, equals(packageMapProvider.packageMaps[subProjectB]));
}
void test_setRoots_addPackageRoot() {
String packagePathFoo = '/package1/foo';
String packageRootPath = '/package2/foo';
Folder packageFolder = resourceProvider.newFolder(packagePathFoo);
- packageMapProvider.packageMap = {
- 'foo': [packageFolder]
- };
+ packageMapProvider.packageMap = {'foo': [packageFolder]};
List<String> includedPaths = <String>[projPath];
List<String> excludedPaths = <String>[];
manager.setRoots(includedPaths, excludedPaths, <String, String>{});
_checkPackageMap(projPath, equals(packageMapProvider.packageMap));
- manager.setRoots(includedPaths, excludedPaths, <String, String>{
- projPath: packageRootPath
- });
+ manager.setRoots(includedPaths,
+ excludedPaths, <String, String>{projPath: packageRootPath});
_checkPackageRoot(projPath, equals(packageRootPath));
}
@@ -303,9 +290,8 @@
projPath: packageRootPath1
});
_checkPackageRoot(projPath, equals(packageRootPath1));
- manager.setRoots(includedPaths, excludedPaths, <String, String>{
- projPath: packageRootPath2
- });
+ manager.setRoots(includedPaths,
+ excludedPaths, <String, String>{projPath: packageRootPath2});
_checkPackageRoot(projPath, equals(packageRootPath2));
}
@@ -464,13 +450,22 @@
void test_setRoots_newlyAddedFoldersGetProperPackageMap() {
String packagePath = '/package/foo';
Folder packageFolder = resourceProvider.newFolder(packagePath);
- packageMapProvider.packageMap = {
- 'foo': [packageFolder]
- };
+ packageMapProvider.packageMap = {'foo': [packageFolder]};
manager.setRoots(<String>[projPath], <String>[], <String, String>{});
_checkPackageMap(projPath, equals(packageMapProvider.packageMap));
}
+ void test_setRoots_removeFolderWithoutPubspec() {
+ packageMapProvider.packageMap = null;
+ // add one root - there is a context
+ manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+ expect(manager.currentContextPaths, hasLength(1));
+ // set empty roots - no contexts
+ manager.setRoots(<String>[], <String>[], <String, String>{});
+ expect(manager.currentContextPaths, hasLength(0));
+ expect(manager.currentContextFilePaths, hasLength(0));
+ }
+
void test_setRoots_removeFolderWithPubspec() {
// create a pubspec
String pubspecPath = posix.join(projPath, 'pubspec.yaml');
@@ -505,9 +500,7 @@
resourceProvider.newFile(subProjectB_file, '// sub-b');
// set roots
manager.setRoots(
- <String>[projectA, projectB],
- <String>[],
- <String, String>{});
+ <String>[projectA, projectB], <String>[], <String, String>{});
manager.assertContextPaths([projectA, subProjectA, projectB, subProjectB]);
manager.assertContextFiles(projectA, [projectA_file]);
manager.assertContextFiles(projectB, [projectB_file]);
@@ -520,24 +513,11 @@
manager.assertContextFiles(subProjectA, [subProjectA_file]);
}
- void test_setRoots_removeFolderWithoutPubspec() {
- packageMapProvider.packageMap = null;
- // add one root - there is a context
- manager.setRoots(<String>[projPath], <String>[], <String, String>{});
- expect(manager.currentContextPaths, hasLength(1));
- // set empty roots - no contexts
- manager.setRoots(<String>[], <String>[], <String, String>{});
- expect(manager.currentContextPaths, hasLength(0));
- expect(manager.currentContextFilePaths, hasLength(0));
- }
-
void test_setRoots_removePackageRoot() {
String packagePathFoo = '/package1/foo';
String packageRootPath = '/package2/foo';
Folder packageFolder = resourceProvider.newFolder(packagePathFoo);
- packageMapProvider.packageMap = {
- 'foo': [packageFolder]
- };
+ packageMapProvider.packageMap = {'foo': [packageFolder]};
List<String> includedPaths = <String>[projPath];
List<String> excludedPaths = <String>[];
manager.setRoots(includedPaths, excludedPaths, <String, String>{
@@ -577,21 +557,6 @@
});
}
- test_watch_addFileInSubfolder() {
- manager.setRoots(<String>[projPath], <String>[], <String, String>{});
- // empty folder initially
- Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
- expect(filePaths, hasLength(0));
- // add file in subfolder
- String filePath = posix.join(projPath, 'foo', 'bar.dart');
- resourceProvider.newFile(filePath, 'contents');
- // the file was added
- return pumpEventQueue().then((_) {
- expect(filePaths, hasLength(1));
- expect(filePaths, contains(filePath));
- });
- }
-
test_watch_addFile_excluded() {
// prepare paths
String project = '/project';
@@ -613,6 +578,21 @@
});
}
+ test_watch_addFileInSubfolder() {
+ manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+ // empty folder initially
+ Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
+ expect(filePaths, hasLength(0));
+ // add file in subfolder
+ String filePath = posix.join(projPath, 'foo', 'bar.dart');
+ resourceProvider.newFile(filePath, 'contents');
+ // the file was added
+ return pumpEventQueue().then((_) {
+ expect(filePaths, hasLength(1));
+ expect(filePaths, contains(filePath));
+ });
+ }
+
test_watch_addPubspec_toRoot() {
// prepare paths
String root = '/root';
@@ -686,15 +666,41 @@
test_watch_deleteFile() {
String filePath = posix.join(projPath, 'foo.dart');
// add root with a file
- resourceProvider.newFile(filePath, 'contents');
+ File file = resourceProvider.newFile(filePath, 'contents');
+ Folder projFolder = file.parent;
manager.setRoots(<String>[projPath], <String>[], <String, String>{});
// the file was added
Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
expect(filePaths, hasLength(1));
expect(filePaths, contains(filePath));
+ expect(file.exists, isTrue);
+ expect(projFolder.exists, isTrue);
// delete the file
resourceProvider.deleteFile(filePath);
return pumpEventQueue().then((_) {
+ expect(file.exists, isFalse);
+ expect(projFolder.exists, isTrue);
+ return expect(filePaths, hasLength(0));
+ });
+ }
+
+ test_watch_deleteFolder() {
+ String filePath = posix.join(projPath, 'foo.dart');
+ // add root with a file
+ File file = resourceProvider.newFile(filePath, 'contents');
+ Folder projFolder = file.parent;
+ manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+ // the file was added
+ Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
+ expect(filePaths, hasLength(1));
+ expect(filePaths, contains(filePath));
+ expect(file.exists, isTrue);
+ expect(projFolder.exists, isTrue);
+ // delete the folder
+ resourceProvider.deleteFolder(projPath);
+ return pumpEventQueue().then((_) {
+ expect(file.exists, isFalse);
+ expect(projFolder.exists, isFalse);
return expect(filePaths, hasLength(0));
});
}
@@ -776,9 +782,7 @@
// configure package map
String packagePath = '/package/foo';
resourceProvider.newFolder(packagePath);
- packageMapProvider.packageMap = {
- 'foo': projPath
- };
+ packageMapProvider.packageMap = {'foo': projPath};
// Changing a .dart file in the project shouldn't cause a new
// package map to be picked up.
resourceProvider.modifyFile(dartFilePath, 'new contents');
@@ -836,7 +840,6 @@
}
}
-
class TestContextManager extends ContextManager {
/**
* Source of timestamps stored in [currentContextFilePaths].
@@ -851,25 +854,26 @@
/**
* Map from context to (map from file path to timestamp of last event).
*/
- final Map<String, Map<String, int>> currentContextFilePaths = <String,
- Map<String, int>>{};
+ final Map<String, Map<String, int>> currentContextFilePaths =
+ <String, Map<String, int>>{};
/**
* A map from the paths of contexts to a set of the sources that should be
* explicitly analyzed in those contexts.
*/
- final Map<String, Set<Source>> currentContextSources = <String,
- Set<Source>>{};
+ final Map<String, Set<Source>> currentContextSources = <String, Set<Source>>{
+ };
/**
* Map from context to package URI resolver.
*/
- final Map<String, UriResolver> currentContextPackageUriResolvers = <String,
- UriResolver>{};
+ final Map<String, UriResolver> currentContextPackageUriResolvers =
+ <String, UriResolver>{};
TestContextManager(MemoryResourceProvider resourceProvider,
PackageMapProvider packageMapProvider)
- : super(resourceProvider, packageMapProvider);
+ : super(resourceProvider, packageMapProvider,
+ InstrumentationService.NULL_SERVICE);
/**
* Iterable of the paths to contexts that currently exist.
@@ -885,8 +889,8 @@
currentContextSources[path] = new HashSet<Source>();
currentContextPackageUriResolvers[path] = packageUriResolver;
AnalysisContextImpl context = new AnalysisContextImpl();
- context.sourceFactory =
- new SourceFactory(packageUriResolver == null ? [] : [packageUriResolver]);
+ context.sourceFactory = new SourceFactory(
+ packageUriResolver == null ? [] : [packageUriResolver]);
return context;
}
@@ -931,8 +935,8 @@
}
@override
- void updateContextPackageUriResolver(Folder contextFolder,
- UriResolver packageUriResolver) {
+ void updateContextPackageUriResolver(
+ Folder contextFolder, UriResolver packageUriResolver) {
currentContextPackageUriResolvers[contextFolder.path] = packageUriResolver;
}
}
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index 530393f..d13a5a0 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -20,7 +20,6 @@
import 'mocks.dart';
import 'reflective_tests.dart';
-
main() {
groupSep = ' | ';
@@ -34,14 +33,9 @@
setUp(() {
serverChannel = new MockServerChannel();
resourceProvider = new MemoryResourceProvider();
- server = new AnalysisServer(
- serverChannel,
- resourceProvider,
- new MockPackageMapProvider(),
- null,
- new AnalysisServerOptions(),
- new MockSdk(),
- InstrumentationService.NULL_SERVICE);
+ server = new AnalysisServer(serverChannel, resourceProvider,
+ new MockPackageMapProvider(), null, new AnalysisServerOptions(),
+ new MockSdk(), InstrumentationService.NULL_SERVICE);
handler = new AnalysisDomainHandler(server);
});
@@ -50,10 +44,10 @@
group('AnalysisDomainHandler', () {
group('setAnalysisRoots', () {
- Response testSetAnalysisRoots(List<String> included,
- List<String> excluded) {
- Request request =
- new AnalysisSetAnalysisRootsParams(included, excluded).toRequest('0');
+ Response testSetAnalysisRoots(
+ List<String> included, List<String> excluded) {
+ Request request = new AnalysisSetAnalysisRootsParams(included, excluded)
+ .toRequest('0');
return handler.handleRequest(request);
}
@@ -96,8 +90,8 @@
test('invalid', () {
// TODO(paulberry): under the "eventual consistency" model this request
// should not be invalid.
- var request =
- new AnalysisSetPriorityFilesParams(['/project/lib.dart']).toRequest('0');
+ var request = new AnalysisSetPriorityFilesParams(['/project/lib.dart'])
+ .toRequest('0');
var response = handler.handleRequest(request);
expect(response, isResponseFailure('0'));
});
@@ -109,8 +103,8 @@
resourceProvider.newFile('/p2/b.dart', 'library b;');
resourceProvider.newFile('/p2/c.dart', 'library c;');
- var setRootsRequest =
- new AnalysisSetAnalysisRootsParams(['/p1', '/p2'], []).toRequest('0');
+ var setRootsRequest = new AnalysisSetAnalysisRootsParams(
+ ['/p1', '/p2'], []).toRequest('0');
var setRootsResponse = handler.handleRequest(setRootsRequest);
expect(setRootsResponse, isResponseSuccess('0'));
@@ -132,11 +126,8 @@
group('updateOptions', () {
test('invalid', () {
- var request = new Request('0', ANALYSIS_UPDATE_OPTIONS, {
- OPTIONS: {
- 'not-an-option': true
- }
- });
+ var request = new Request(
+ '0', ANALYSIS_UPDATE_OPTIONS, {OPTIONS: {'not-an-option': true}});
var response = handler.handleRequest(request);
// Invalid options should be silently ignored.
expect(response, isResponseSuccess('0'));
@@ -144,9 +135,8 @@
test('null', () {
// null is allowed as a synonym for {}.
- var request = new Request('0', ANALYSIS_UPDATE_OPTIONS, {
- OPTIONS: null
- });
+ var request =
+ new Request('0', ANALYSIS_UPDATE_OPTIONS, {OPTIONS: null});
var response = handler.handleRequest(request);
expect(response, isResponseSuccess('0'));
});
@@ -154,7 +144,6 @@
});
}
-
void test_setSubscriptions() {
test('before analysis', () {
AnalysisTestHelper helper = new AnalysisTestHelper();
@@ -218,18 +207,13 @@
});
}
-
testUpdateContent() {
test('bad type', () {
AnalysisTestHelper helper = new AnalysisTestHelper();
helper.createSingleFileProject('// empty');
return helper.onAnalysisComplete.then((_) {
Request request = new Request('0', ANALYSIS_UPDATE_CONTENT, {
- 'files': {
- helper.testFile: {
- TYPE: 'foo',
- }
- }
+ 'files': {helper.testFile: {TYPE: 'foo',}}
});
Response response = helper.handler.handleRequest(request);
expect(response, isResponseFailure('0'));
@@ -264,9 +248,8 @@
// Add the file to the cache
helper.sendContentChange(new AddContentOverlay(initialContent));
// update code
- helper.sendContentChange(
- new ChangeContentOverlay(
- [new SourceEdit('library '.length, 'A;'.length, 'lib')]));
+ helper.sendContentChange(new ChangeContentOverlay(
+ [new SourceEdit('library '.length, 'A;'.length, 'lib')]));
// wait, there is an error
return helper.onAnalysisComplete.then((_) {
List<AnalysisError> errors = helper.getTestErrors();
@@ -326,12 +309,11 @@
helper.sendContentChange(new AddContentOverlay('library B;'));
return helper.onAnalysisComplete.then((_) {
ChangeContentOverlay contentChange = new ChangeContentOverlay([edit]);
- Request request = new AnalysisUpdateContentParams({
- helper.testFile: contentChange
- }).toRequest('0');
+ Request request =
+ new AnalysisUpdateContentParams({helper.testFile: contentChange})
+ .toRequest('0');
Response response = helper.handler.handleRequest(request);
- expect(
- response,
+ expect(response,
isResponseFailure('0', RequestErrorCode.INVALID_OVERLAY_CHANGE));
});
});
@@ -351,7 +333,6 @@
});
}
-
@reflectiveTest
class AnalysisDomainTest extends AbstractAnalysisTest {
Map<String, List<AnalysisError>> filesErrors = {};
@@ -403,8 +384,9 @@
library lib_a;
class A {}
''');
- packageMapProvider.packageMap['pkgA'] =
- [resourceProvider.getResource('/packages/pkgA')];
+ packageMapProvider.packageMap['pkgA'] = [
+ resourceProvider.getResource('/packages/pkgA')
+ ];
addTestFile('''
import 'package:pkgA/libA.dart';
main(A a) {
@@ -421,7 +403,6 @@
}
}
-
/**
* A helper to test 'analysis.*' requests.
*/
@@ -443,14 +424,9 @@
AnalysisTestHelper() {
serverChannel = new MockServerChannel();
resourceProvider = new MemoryResourceProvider();
- server = new AnalysisServer(
- serverChannel,
- resourceProvider,
- new MockPackageMapProvider(),
- null,
- new AnalysisServerOptions(),
- new MockSdk(),
- InstrumentationService.NULL_SERVICE);
+ server = new AnalysisServer(serverChannel, resourceProvider,
+ new MockPackageMapProvider(), null, new AnalysisServerOptions(),
+ new MockSdk(), InstrumentationService.NULL_SERVICE);
handler = new AnalysisDomainHandler(server);
// listen for notifications
Stream<Notification> notificationStream =
@@ -489,8 +465,8 @@
}
files.add(file);
// set subscriptions
- Request request =
- new AnalysisSetSubscriptionsParams(analysisSubscriptions).toRequest('0');
+ Request request = new AnalysisSetSubscriptionsParams(analysisSubscriptions)
+ .toRequest('0');
handleSuccessfulRequest(request);
}
@@ -607,9 +583,8 @@
* Send an `updateContent` request for [testFile].
*/
void sendContentChange(dynamic contentChange) {
- Request request = new AnalysisUpdateContentParams({
- testFile: contentChange
- }).toRequest('0');
+ Request request = new AnalysisUpdateContentParams({testFile: contentChange})
+ .toRequest('0');
handleSuccessfulRequest(request);
}
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index e042afa..83dd415 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -46,14 +46,9 @@
String testFile2 = '/project/bin/test2.dart';
AnalysisServer createAnalysisServer(Index index) {
- return new Test_AnalysisServer(
- super.serverChannel,
- super.resourceProvider,
- super.packageMapProvider,
- index,
- new AnalysisServerOptions(),
- new MockSdk(),
- InstrumentationService.NULL_SERVICE);
+ return new Test_AnalysisServer(super.serverChannel, super.resourceProvider,
+ super.packageMapProvider, index, new AnalysisServerOptions(),
+ new MockSdk(), InstrumentationService.NULL_SERVICE);
}
@override
@@ -262,9 +257,8 @@
expect(completionOffset, isNot(equals(-1)), reason: 'missing ^');
int nextOffset = content.indexOf('^', completionOffset + 1);
expect(nextOffset, equals(-1), reason: 'too many ^');
- return super.addTestFile(
- content.substring(0, completionOffset) +
- content.substring(completionOffset + 1));
+ return super.addTestFile(content.substring(0, completionOffset) +
+ content.substring(completionOffset + 1));
}
void assertHasResult(CompletionSuggestionKind kind, String completion,
@@ -310,8 +304,8 @@
Future getSuggestions() {
return waitForTasksFinished().then((_) {
- Request request =
- new CompletionGetSuggestionsParams(testFile, completionOffset).toRequest('0');
+ Request request = new CompletionGetSuggestionsParams(
+ testFile, completionOffset).toRequest('0');
Response response = handleSuccessfulRequest(request);
completionId = response.id;
assertValidId(completionId);
@@ -409,13 +403,9 @@
expect(replacementOffset, equals(completionOffset - 2));
expect(replacementLength, equals(2));
assertHasResult(
- CompletionSuggestionKind.KEYWORD,
- 'import',
- DART_RELEVANCE_HIGH);
+ CompletionSuggestionKind.KEYWORD, 'import', DART_RELEVANCE_HIGH);
assertHasResult(
- CompletionSuggestionKind.KEYWORD,
- 'class',
- DART_RELEVANCE_HIGH);
+ CompletionSuggestionKind.KEYWORD, 'class', DART_RELEVANCE_HIGH);
});
}
@@ -436,16 +426,10 @@
expect(replacementLength, equals(0));
assertHasResult(CompletionSuggestionKind.INVOCATION, 'A');
assertHasResult(
- CompletionSuggestionKind.INVOCATION,
- 'a',
- DART_RELEVANCE_LOCAL_FIELD);
- assertHasResult(
- CompletionSuggestionKind.INVOCATION,
- 'b',
+ CompletionSuggestionKind.INVOCATION, 'a', DART_RELEVANCE_LOCAL_FIELD);
+ assertHasResult(CompletionSuggestionKind.INVOCATION, 'b',
DART_RELEVANCE_LOCAL_VARIABLE);
- assertHasResult(
- CompletionSuggestionKind.INVOCATION,
- 'x',
+ assertHasResult(CompletionSuggestionKind.INVOCATION, 'x',
DART_RELEVANCE_LOCAL_METHOD);
});
}
@@ -516,9 +500,7 @@
expect(replacementLength, equals(4));
// Suggestions based upon imported elements are partially filtered
//assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
- assertHasResult(
- CompletionSuggestionKind.INVOCATION,
- 'test',
+ assertHasResult(CompletionSuggestionKind.INVOCATION, 'test',
DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE);
assertNoResult('HtmlElement');
});
@@ -602,8 +584,8 @@
int get cancelCount => mockSubscription.cancelCount;
@override
- StreamSubscription<E> listen(void onData(E event), {Function onError, void
- onDone(), bool cancelOnError}) {
+ StreamSubscription<E> listen(void onData(E event),
+ {Function onError, void onDone(), bool cancelOnError}) {
++listenCount;
return mockSubscription;
}
@@ -630,16 +612,10 @@
Test_AnalysisServer(ServerCommunicationChannel channel,
ResourceProvider resourceProvider, PackageMapProvider packageMapProvider,
- Index index, AnalysisServerOptions analysisServerOptions, DartSdk defaultSdk,
- InstrumentationService instrumentationService)
- : super(
- channel,
- resourceProvider,
- packageMapProvider,
- index,
- analysisServerOptions,
- defaultSdk,
- instrumentationService);
+ Index index, AnalysisServerOptions analysisServerOptions,
+ DartSdk defaultSdk, InstrumentationService instrumentationService)
+ : super(channel, resourceProvider, packageMapProvider, index,
+ analysisServerOptions, defaultSdk, instrumentationService);
AnalysisContext getAnalysisContext(String path) {
return mockContext;
@@ -651,7 +627,6 @@
* so that the domain handler cache management can be tested.
*/
class Test_CompletionDomainHandler extends CompletionDomainHandler {
-
Test_CompletionDomainHandler(Test_AnalysisServer server) : super(server);
MockContext get mockContext => (server as Test_AnalysisServer).mockContext;
@@ -659,19 +634,18 @@
MockCompletionManager get mockManager => manager;
void contextsChanged(ContextsChangedEvent event) {
- contextsChangedRaw(
- new ContextsChangedEvent(
- added: event.added.length > 0 ? [mockContext] : [],
- changed: event.changed.length > 0 ? [mockContext] : [],
- removed: event.removed.length > 0 ? [mockContext] : []));
+ contextsChangedRaw(new ContextsChangedEvent(
+ added: event.added.length > 0 ? [mockContext] : [],
+ changed: event.changed.length > 0 ? [mockContext] : [],
+ removed: event.removed.length > 0 ? [mockContext] : []));
}
void contextsChangedRaw(ContextsChangedEvent newEvent) {
super.contextsChanged(newEvent);
}
- CompletionManager createCompletionManager(AnalysisContext context,
- Source source, SearchEngine searchEngine) {
+ CompletionManager createCompletionManager(
+ AnalysisContext context, Source source, SearchEngine searchEngine) {
return new MockCompletionManager(mockContext, source, searchEngine);
}
}
diff --git a/pkg/analysis_server/test/domain_execution_test.dart b/pkg/analysis_server/test/domain_execution_test.dart
index 60c2454..78308b9 100644
--- a/pkg/analysis_server/test/domain_execution_test.dart
+++ b/pkg/analysis_server/test/domain_execution_test.dart
@@ -38,14 +38,9 @@
ExecutionDomainHandler handler;
setUp(() {
- server = new AnalysisServer(
- new MockServerChannel(),
- provider,
- new MockPackageMapProvider(),
- null,
- new AnalysisServerOptions(),
- new MockSdk(),
- InstrumentationService.NULL_SERVICE);
+ server = new AnalysisServer(new MockServerChannel(), provider,
+ new MockPackageMapProvider(), null, new AnalysisServerOptions(),
+ new MockSdk(), InstrumentationService.NULL_SERVICE);
handler = new ExecutionDomainHandler(server);
});
@@ -117,8 +112,8 @@
group('file to URI', () {
test('does not exist', () {
- Request request =
- new ExecutionMapUriParams(contextId, file: '/a/c.dart').toRequest('2');
+ Request request = new ExecutionMapUriParams(contextId,
+ file: '/a/c.dart').toRequest('2');
Response response = handler.handleRequest(request);
expect(response, isResponseFailure('2'));
});
@@ -132,8 +127,8 @@
});
test('valid', () {
- Request request =
- new ExecutionMapUriParams(contextId, file: '/a/b.dart').toRequest('2');
+ Request request = new ExecutionMapUriParams(contextId,
+ file: '/a/b.dart').toRequest('2');
Response response = handler.handleRequest(request);
expect(response, isResponseSuccess('2'));
ExecutionMapUriResult result =
@@ -145,15 +140,15 @@
group('URI to file', () {
test('invalid', () {
- Request request =
- new ExecutionMapUriParams(contextId, uri: 'foo:///a/b.dart').toRequest('2');
+ Request request = new ExecutionMapUriParams(contextId,
+ uri: 'foo:///a/b.dart').toRequest('2');
Response response = handler.handleRequest(request);
expect(response, isResponseFailure('2'));
});
test('valid', () {
- Request request =
- new ExecutionMapUriParams(contextId, uri: 'file:///a/b.dart').toRequest('2');
+ Request request = new ExecutionMapUriParams(contextId,
+ uri: 'file:///a/b.dart').toRequest('2');
Response response = handler.handleRequest(request);
expect(response, isResponseSuccess('2'));
ExecutionMapUriResult result =
@@ -199,8 +194,9 @@
test('success - setting and clearing', () {
expect(handler.onFileAnalyzed, isNull);
- Request request = new ExecutionSetSubscriptionsParams(
- [ExecutionService.LAUNCH_DATA]).toRequest('0');
+ Request request =
+ new ExecutionSetSubscriptionsParams([ExecutionService.LAUNCH_DATA])
+ .toRequest('0');
Response response = handler.handleRequest(request);
expect(response, isResponseSuccess('0'));
expect(handler.onFileAnalyzed, isNotNull);
@@ -222,15 +218,14 @@
Source source7 = new TestSource('/g.html');
AnalysisContext context = new AnalysisContextMock();
- when(
- context.launchableClientLibrarySources).thenReturn([source1, source2]);
- when(
- context.launchableServerLibrarySources).thenReturn([source2, source3]);
+ when(context.launchableClientLibrarySources)
+ .thenReturn([source1, source2]);
+ when(context.launchableServerLibrarySources)
+ .thenReturn([source2, source3]);
when(context.librarySources).thenReturn([source4]);
when(context.htmlSources).thenReturn([source5]);
- when(
- context.getLibrariesReferencedFromHtml(
- anyObject)).thenReturn([source6, source7]);
+ when(context.getLibrariesReferencedFromHtml(anyObject))
+ .thenReturn([source6, source7]);
ServerContextManager manager = new ServerContextManagerMock();
when(manager.isInAnalysisRoot(anyString)).thenReturn(true);
@@ -243,13 +238,14 @@
when(server.onFileAnalyzed).thenReturn(controller.stream);
List<String> unsentNotifications = <String>[
- source1.fullName,
- source2.fullName,
- source3.fullName,
- source4.fullName,
- source5.fullName];
- when(
- server.sendNotification(anyObject)).thenInvoke((Notification notification) {
+ source1.fullName,
+ source2.fullName,
+ source3.fullName,
+ source4.fullName,
+ source5.fullName
+ ];
+ when(server.sendNotification(anyObject)).thenInvoke(
+ (Notification notification) {
ExecutionLaunchDataParams params =
new ExecutionLaunchDataParams.fromNotification(notification);
@@ -274,8 +270,9 @@
});
ExecutionDomainHandler handler = new ExecutionDomainHandler(server);
- Request request = new ExecutionSetSubscriptionsParams(
- [ExecutionService.LAUNCH_DATA]).toRequest('0');
+ Request request =
+ new ExecutionSetSubscriptionsParams([ExecutionService.LAUNCH_DATA])
+ .toRequest('0');
handler.handleRequest(request);
// controller.add(null);
diff --git a/pkg/analysis_server/test/domain_server_test.dart b/pkg/analysis_server/test/domain_server_test.dart
index dc76e84..94a932d 100644
--- a/pkg/analysis_server/test/domain_server_test.dart
+++ b/pkg/analysis_server/test/domain_server_test.dart
@@ -22,14 +22,9 @@
setUp(() {
var serverChannel = new MockServerChannel();
var resourceProvider = new MemoryResourceProvider();
- server = new AnalysisServer(
- serverChannel,
- resourceProvider,
- new MockPackageMapProvider(),
- null,
- new AnalysisServerOptions(),
- new MockSdk(),
- InstrumentationService.NULL_SERVICE);
+ server = new AnalysisServer(serverChannel, resourceProvider,
+ new MockPackageMapProvider(), null, new AnalysisServerOptions(),
+ new MockSdk(), InstrumentationService.NULL_SERVICE);
handler = new ServerDomainHandler(server);
});
@@ -39,17 +34,14 @@
var response = handler.handleRequest(request);
expect(response.toJson(), equals({
Response.ID: '0',
- Response.RESULT: {
- VERSION: AnalysisServer.VERSION
- }
+ Response.RESULT: {VERSION: AnalysisServer.VERSION}
}));
});
group('setSubscriptions', () {
test('invalid service name', () {
- Request request = new Request('0', SERVER_SET_SUBSCRIPTIONS, {
- SUBSCRIPTIONS: ['noSuchService']
- });
+ Request request = new Request(
+ '0', SERVER_SET_SUBSCRIPTIONS, {SUBSCRIPTIONS: ['noSuchService']});
var response = handler.handleRequest(request);
expect(response, isResponseFailure('0'));
});
@@ -58,7 +50,8 @@
expect(server.serverServices, isEmpty);
// send request
Request request =
- new ServerSetSubscriptionsParams([ServerService.STATUS]).toRequest('0');
+ new ServerSetSubscriptionsParams([ServerService.STATUS])
+ .toRequest('0');
var response = handler.handleRequest(request);
expect(response, isResponseSuccess('0'));
// set of services has been changed
diff --git a/pkg/analysis_server/test/edit/assists_test.dart b/pkg/analysis_server/test/edit/assists_test.dart
index 190d165..0fcdb80 100644
--- a/pkg/analysis_server/test/edit/assists_test.dart
+++ b/pkg/analysis_server/test/edit/assists_test.dart
@@ -13,13 +13,11 @@
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(AssistsTest);
}
-
@reflectiveTest
class AssistsTest extends AbstractAnalysisTest {
List<SourceChange> changes;
diff --git a/pkg/analysis_server/test/edit/fixes_test.dart b/pkg/analysis_server/test/edit/fixes_test.dart
index 2fd66e9..ff4bacd 100644
--- a/pkg/analysis_server/test/edit/fixes_test.dart
+++ b/pkg/analysis_server/test/edit/fixes_test.dart
@@ -13,13 +13,11 @@
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(FixesTest);
}
-
@reflectiveTest
class FixesTest extends AbstractAnalysisTest {
@override
@@ -86,7 +84,6 @@
return _getFixes(offset);
}
-
void _isSyntacticErrorWithSingleFix(AnalysisErrorFixes fixes) {
AnalysisError error = fixes.error;
expect(error.severity, AnalysisErrorSeverity.ERROR);
diff --git a/pkg/analysis_server/test/edit/format_test.dart b/pkg/analysis_server/test/edit/format_test.dart
index b61d378..f459900 100644
--- a/pkg/analysis_server/test/edit/format_test.dart
+++ b/pkg/analysis_server/test/edit/format_test.dart
@@ -13,13 +13,11 @@
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(FormatTest);
}
-
@reflectiveTest
class FormatTest extends AbstractAnalysisTest {
@override
@@ -34,7 +32,6 @@
main() { int x = 3; }
''');
return waitForTasksFinished().then((_) {
-
EditFormatResult formatResult = _formatAt(0, 3);
expect(formatResult.edits, isNotNull);
@@ -67,11 +64,8 @@
EditFormatResult _formatAt(int selectionOffset, int selectionLength) {
Request request = new EditFormatParams(
- testFile,
- selectionOffset,
- selectionLength).toRequest('0');
+ testFile, selectionOffset, selectionLength).toRequest('0');
Response response = handleSuccessfulRequest(request);
return new EditFormatResult.fromResponse(response);
}
-
}
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index ad3ff90..696c4e0 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -16,7 +16,6 @@
import '../mocks.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(ConvertGetterMethodToMethodTest);
@@ -31,7 +30,6 @@
runReflectiveTests(_NoSearchEngine);
}
-
@reflectiveTest
class ConvertGetterMethodToMethodTest extends _AbstractGetRefactoring_Test {
test_function() {
@@ -63,8 +61,7 @@
return getRefactoringResult(() {
return _sendConvertRequest('test;');
}).then((result) {
- assertResultProblemsFatal(
- result.initialProblems,
+ assertResultProblemsFatal(result.initialProblems,
'Only explicit getters can be converted to methods.');
// ...there is no any change
expect(result.change, isNull);
@@ -118,16 +115,12 @@
Future<Response> _sendConvertRequest(String search) {
Request request = new EditGetRefactoringParams(
- RefactoringKind.CONVERT_GETTER_TO_METHOD,
- testFile,
- findOffset(search),
- 0,
- false).toRequest('0');
+ RefactoringKind.CONVERT_GETTER_TO_METHOD, testFile, findOffset(search),
+ 0, false).toRequest('0');
return serverChannel.sendRequest(request);
}
}
-
@reflectiveTest
class ConvertMethodToGetterTest extends _AbstractGetRefactoring_Test {
test_function() {
@@ -159,8 +152,7 @@
return getRefactoringResult(() {
return _sendConvertRequest('test(p)');
}).then((result) {
- assertResultProblemsFatal(
- result.initialProblems,
+ assertResultProblemsFatal(result.initialProblems,
'Only methods without parameters can be converted to getters.');
// ...there is no any change
expect(result.change, isNull);
@@ -178,8 +170,7 @@
return _sendConvertRequest('abc');
}).then((result) {
assertResultProblemsFatal(
- result.initialProblems,
- 'Unable to create a refactoring');
+ result.initialProblems, 'Unable to create a refactoring');
// ...there is no any change
expect(result.change, isNull);
});
@@ -232,35 +223,31 @@
Future<Response> _sendConvertRequest(String search) {
Request request = new EditGetRefactoringParams(
- RefactoringKind.CONVERT_METHOD_TO_GETTER,
- testFile,
- findOffset(search),
- 0,
- false).toRequest('0');
+ RefactoringKind.CONVERT_METHOD_TO_GETTER, testFile, findOffset(search),
+ 0, false).toRequest('0');
return serverChannel.sendRequest(request);
}
}
-
@reflectiveTest
class ExtractLocalVariableTest extends _AbstractGetRefactoring_Test {
- Future<Response> sendExtractRequest(int offset, int length, String name,
- bool extractAll) {
+ Future<Response> sendExtractRequest(
+ int offset, int length, String name, bool extractAll) {
RefactoringKind kind = RefactoringKind.EXTRACT_LOCAL_VARIABLE;
ExtractLocalVariableOptions options =
name != null ? new ExtractLocalVariableOptions(name, extractAll) : null;
return sendRequest(kind, offset, length, options, false);
}
- Future<Response> sendStringRequest(String search, String name,
- bool extractAll) {
+ Future<Response> sendStringRequest(
+ String search, String name, bool extractAll) {
int offset = findOffset(search);
int length = search.length;
return sendExtractRequest(offset, length, name, extractAll);
}
- Future<Response> sendStringSuffixRequest(String search, String suffix,
- String name, bool extractAll) {
+ Future<Response> sendStringSuffixRequest(
+ String search, String suffix, String name, bool extractAll) {
int offset = findOffset(search + suffix);
int length = search.length;
return sendExtractRequest(offset, length, name, extractAll);
@@ -321,8 +308,7 @@
return sendStringSuffixRequest('getSelectedItem()', ';', null, true);
}).then((result) {
ExtractLocalVariableFeedback feedback = result.feedback;
- expect(
- feedback.names,
+ expect(feedback.names,
unorderedEquals(['treeItem', 'item', 'selectedItem']));
expect(result.change, isNull);
});
@@ -337,8 +323,7 @@
return getRefactoringResult(() {
return sendStringRequest('1 + 2', 'Name', true);
}).then((result) {
- assertResultProblemsWarning(
- result.optionsProblems,
+ assertResultProblemsWarning(result.optionsProblems,
'Variable name should start with a lowercase letter.');
// ...but there is still a change
assertTestRefactoringResult(result, '''
@@ -412,7 +397,6 @@
}
}
-
@reflectiveTest
class ExtractMethodTest extends _AbstractGetRefactoring_Test {
int offset;
@@ -523,8 +507,7 @@
''');
_setOffsetLengthForString('getSelectedItem( )');
return _computeInitialFeedback().then((feedback) {
- expect(
- feedback.names,
+ expect(feedback.names,
unorderedEquals(['treeItem', 'item', 'selectedItem']));
expect(feedback.returnType, 'TreeItem');
});
@@ -599,11 +582,7 @@
// fill options from result
ExtractMethodFeedback feedback = result.feedback;
options = new ExtractMethodOptions(
- feedback.returnType,
- false,
- name,
- feedback.parameters,
- true);
+ feedback.returnType, false, name, feedback.parameters, true);
// done
return new Future.value();
});
@@ -625,7 +604,6 @@
}
}
-
@reflectiveTest
class GetAvailableRefactoringsTest extends AbstractAnalysisTest {
List<RefactoringKind> kinds;
@@ -641,8 +619,8 @@
* Tests that there is refactoring of the given [kind] is available at the
* [search] offset.
*/
- Future assertHasKind(String code, String search, RefactoringKind kind,
- bool expected) async {
+ Future assertHasKind(
+ String code, String search, RefactoringKind kind, bool expected) async {
addTestFile(code);
await waitForTasksFinished();
await getRefactoringsAtString(search);
@@ -665,9 +643,7 @@
*/
Future getRefactorings(int offset, int length) async {
Request request = new EditGetAvailableRefactoringsParams(
- testFile,
- offset,
- length).toRequest('0');
+ testFile, offset, length).toRequest('0');
serverChannel.sendRequest(request);
var response = await serverChannel.waitForResponse(request);
var result = new EditGetAvailableRefactoringsResult.fromResponse(response);
@@ -830,7 +806,6 @@
}
}
-
@reflectiveTest
class InlineLocalTest extends _AbstractGetRefactoring_Test {
test_feedback() {
@@ -855,8 +830,7 @@
return getRefactoringResult(() {
return _sendInlineRequest('main() {}');
}).then((result) {
- assertResultProblemsFatal(
- result.initialProblems,
+ assertResultProblemsFatal(result.initialProblems,
'Local variable declaration or reference must be selected to activate this refactoring.');
// ...there is no any change
expect(result.change, isNull);
@@ -883,16 +857,12 @@
Future<Response> _sendInlineRequest(String search) {
Request request = new EditGetRefactoringParams(
- RefactoringKind.INLINE_LOCAL_VARIABLE,
- testFile,
- findOffset(search),
- 0,
+ RefactoringKind.INLINE_LOCAL_VARIABLE, testFile, findOffset(search), 0,
false).toRequest('0');
return serverChannel.sendRequest(request);
}
}
-
@reflectiveTest
class InlineMethodTest extends _AbstractGetRefactoring_Test {
InlineMethodOptions options = new InlineMethodOptions(true, true);
@@ -924,8 +894,7 @@
return getRefactoringResult(() {
return _sendInlineRequest('// nothing');
}).then((result) {
- assertResultProblemsFatal(
- result.initialProblems,
+ assertResultProblemsFatal(result.initialProblems,
'Method declaration or reference must be selected to activate this refactoring.');
// ...there is no any change
expect(result.change, isNull);
@@ -1009,17 +978,12 @@
Future<Response> _sendInlineRequest(String search) {
Request request = new EditGetRefactoringParams(
- RefactoringKind.INLINE_METHOD,
- testFile,
- findOffset(search),
- 0,
- false,
+ RefactoringKind.INLINE_METHOD, testFile, findOffset(search), 0, false,
options: options).toRequest('0');
return serverChannel.sendRequest(request);
}
}
-
@reflectiveTest
class MoveFileTest extends _AbstractGetRefactoring_Test {
MoveFileOptions options = new MoveFileOptions(null);
@@ -1041,28 +1005,19 @@
Future<Response> _sendMoveRequest() {
Request request = new EditGetRefactoringParams(
- RefactoringKind.MOVE_FILE,
- testFile,
- 0,
- 0,
- false,
- options: options).toRequest('0');
+ RefactoringKind.MOVE_FILE, testFile, 0, 0, false, options: options)
+ .toRequest('0');
return serverChannel.sendRequest(request);
}
}
-
@reflectiveTest
class RenameTest extends _AbstractGetRefactoring_Test {
- Future<Response> sendRenameRequest(String search, String newName, {String id:
- '0', bool validateOnly: false}) {
+ Future<Response> sendRenameRequest(String search, String newName,
+ {String id: '0', bool validateOnly: false}) {
RenameOptions options = newName != null ? new RenameOptions(newName) : null;
Request request = new EditGetRefactoringParams(
- RefactoringKind.RENAME,
- testFile,
- findOffset(search),
- 0,
- validateOnly,
+ RefactoringKind.RENAME, testFile, findOffset(search), 0, validateOnly,
options: options).toRequest(id);
return serverChannel.sendRequest(request);
}
@@ -1082,8 +1037,7 @@
Response responseA = await futureA;
// "1" was cancelled
// "2" is successful
- expect(
- responseA,
+ expect(responseA,
isResponseFailure('1', RequestErrorCode.REFACTORING_REQUEST_CANCELLED));
expect(responseB, isResponseSuccess('2'));
}
@@ -1126,8 +1080,7 @@
return sendRenameRequest('Test {}', '');
}).then((result) {
assertResultProblemsFatal(
- result.optionsProblems,
- 'Class name must not be empty.');
+ result.optionsProblems, 'Class name must not be empty.');
// ...there is no any change
expect(result.change, isNull);
});
@@ -1161,8 +1114,7 @@
return getRefactoringResult(() {
return sendRenameRequest('Test {}', 'newName');
}).then((result) {
- assertResultProblemsWarning(
- result.optionsProblems,
+ assertResultProblemsWarning(result.optionsProblems,
'Class name should start with an uppercase letter.');
// ...but there is still a change
assertTestRefactoringResult(result, '''
@@ -1521,8 +1473,7 @@
return sendRenameRequest('// nothing', null);
}).then((result) {
assertResultProblemsFatal(
- result.initialProblems,
- 'Unable to create a refactoring');
+ result.initialProblems, 'Unable to create a refactoring');
// ...there is no any change
expect(result.change, isNull);
});
@@ -1596,8 +1547,7 @@
List<RefactoringProblem> problems = result.finalProblems;
expect(problems, hasLength(1));
assertResultProblemsError(
- problems,
- "Duplicate local variable 'newName'.");
+ problems, "Duplicate local variable 'newName'.");
});
}
@@ -1624,9 +1574,7 @@
// send the second request, with the same kind, file and offset
return waitForTasksFinished().then((_) {
return getRefactoringResult(() {
- return sendRenameRequest(
- 'otherName =',
- 'newName',
+ return sendRenameRequest('otherName =', 'newName',
validateOnly: true);
}).then((result) {
RenameFeedback feedback = result.feedback;
@@ -1650,7 +1598,6 @@
}
}
-
@reflectiveTest
class _AbstractGetRefactoring_Test extends AbstractAnalysisTest {
/**
@@ -1659,9 +1606,7 @@
void assertResultProblemsError(List<RefactoringProblem> problems,
[String message]) {
RefactoringProblem problem = problems[0];
- expect(
- problem.severity,
- RefactoringProblemSeverity.ERROR,
+ expect(problem.severity, RefactoringProblemSeverity.ERROR,
reason: problem.toString());
if (message != null) {
expect(problem.message, message);
@@ -1675,9 +1620,7 @@
[String message]) {
RefactoringProblem problem = problems[0];
expect(problems, hasLength(1));
- expect(
- problem.severity,
- RefactoringProblemSeverity.FATAL,
+ expect(problem.severity, RefactoringProblemSeverity.FATAL,
reason: problem.toString());
if (message != null) {
expect(problem.message, message);
@@ -1700,17 +1643,15 @@
[String message]) {
RefactoringProblem problem = problems[0];
expect(problems, hasLength(1));
- expect(
- problem.severity,
- RefactoringProblemSeverity.WARNING,
+ expect(problem.severity, RefactoringProblemSeverity.WARNING,
reason: problem.toString());
if (message != null) {
expect(problem.message, message);
}
}
- Future assertSuccessfulRefactoring(Future<Response> requestSender(),
- String expectedCode) {
+ Future assertSuccessfulRefactoring(
+ Future<Response> requestSender(), String expectedCode) {
return getRefactoringResult(requestSender).then((result) {
assertResultProblemsOK(result);
assertTestRefactoringResult(result, expectedCode);
@@ -1721,8 +1662,8 @@
* Asserts that the given [EditGetRefactoringResult] has a [testFile] change
* which results in the [expectedCode].
*/
- void assertTestRefactoringResult(EditGetRefactoringResult result,
- String expectedCode) {
+ void assertTestRefactoringResult(
+ EditGetRefactoringResult result, String expectedCode) {
SourceChange change = result.change;
expect(change, isNotNull);
for (SourceFileEdit fileEdit in change.edits) {
@@ -1740,8 +1681,8 @@
return createLocalMemoryIndex();
}
- Future<EditGetRefactoringResult> getRefactoringResult(Future<Response>
- requestSender()) {
+ Future<EditGetRefactoringResult> getRefactoringResult(
+ Future<Response> requestSender()) {
return waitForTasksFinished().then((_) {
return requestSender().then((Response response) {
return new EditGetRefactoringResult.fromResponse(response);
@@ -1749,15 +1690,12 @@
});
}
- Future<Response> sendRequest(RefactoringKind kind, int offset, int length,
- RefactoringOptions options, [bool validateOnly = false]) {
+ Future<Response> sendRequest(
+ RefactoringKind kind, int offset, int length, RefactoringOptions options,
+ [bool validateOnly = false]) {
Request request = new EditGetRefactoringParams(
- kind,
- testFile,
- offset,
- length,
- validateOnly,
- options: options).toRequest('0');
+ kind, testFile, offset, length, validateOnly, options: options)
+ .toRequest('0');
return serverChannel.sendRequest(request);
}
@@ -1770,7 +1708,6 @@
}
}
-
@reflectiveTest
class _NoSearchEngine extends _AbstractGetRefactoring_Test {
@override
@@ -1798,11 +1735,8 @@
''');
await waitForTasksFinished();
Request request = new EditGetRefactoringParams(
- RefactoringKind.EXTRACT_LOCAL_VARIABLE,
- testFile,
- 0,
- 0,
- true).toRequest('0');
+ RefactoringKind.EXTRACT_LOCAL_VARIABLE, testFile, 0, 0, true)
+ .toRequest('0');
return _assertErrorResposeNoIndex(request);
}
diff --git a/pkg/analysis_server/test/edit/sort_members_test.dart b/pkg/analysis_server/test/edit/sort_members_test.dart
index 5e0756e..967ef71 100644
--- a/pkg/analysis_server/test/edit/sort_members_test.dart
+++ b/pkg/analysis_server/test/edit/sort_members_test.dart
@@ -14,13 +14,11 @@
import '../mocks.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(SortMembersTest);
}
-
@reflectiveTest
class SortMembersTest extends AbstractAnalysisTest {
SourceFileEdit fileEdit;
@@ -37,8 +35,7 @@
Request request =
new EditSortMembersParams('/no/such/file.dart').toRequest('0');
Response response = handler.handleRequest(request);
- expect(
- response,
+ expect(response,
isResponseFailure('0', RequestErrorCode.SORT_MEMBERS_INVALID_FILE));
});
}
@@ -52,8 +49,7 @@
return waitForTasksFinished().then((_) {
Request request = new EditSortMembersParams(testFile).toRequest('0');
Response response = handler.handleRequest(request);
- expect(
- response,
+ expect(response,
isResponseFailure('0', RequestErrorCode.SORT_MEMBERS_PARSE_ERRORS));
});
}
@@ -63,8 +59,7 @@
Request request =
new EditSortMembersParams('/not-a-Dart-file.txt').toRequest('0');
Response response = handler.handleRequest(request);
- expect(
- response,
+ expect(response,
isResponseFailure('0', RequestErrorCode.SORT_MEMBERS_INVALID_FILE));
});
}
diff --git a/pkg/analysis_server/test/integration/analysis/error_test.dart b/pkg/analysis_server/test/integration/analysis/error_test.dart
index 1a067f4..2a76f3d 100644
--- a/pkg/analysis_server/test/integration/analysis/error_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/error_test.dart
@@ -15,8 +15,8 @@
}
@reflectiveTest
-class AnalysisErrorIntegrationTest extends AbstractAnalysisServerIntegrationTest
- {
+class AnalysisErrorIntegrationTest
+ extends AbstractAnalysisServerIntegrationTest {
test_detect_simple_error() {
String pathname = sourcePath('test.dart');
writeFile(pathname, '''
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors.dart b/pkg/analysis_server/test/integration/analysis/get_errors.dart
index 591e895..c21d242 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors.dart
@@ -13,8 +13,8 @@
/**
* Base class for testing the "analysis.getErrors" request.
*/
-class AnalysisDomainGetErrorsTest extends AbstractAnalysisServerIntegrationTest
- {
+class AnalysisDomainGetErrorsTest
+ extends AbstractAnalysisServerIntegrationTest {
/**
* True if the "analysis.getErrors" request should be made after analysis is
* complete.
diff --git a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
index 965a37f..1046157 100644
--- a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
@@ -18,8 +18,8 @@
}
@reflectiveTest
-class AnalysisGetHoverIntegrationTest extends
- AbstractAnalysisServerIntegrationTest {
+class AnalysisGetHoverIntegrationTest
+ extends AbstractAnalysisServerIntegrationTest {
/**
* Pathname of the file containing Dart code.
*/
@@ -63,8 +63,8 @@
*/
checkHover(String target, int length, List<String> descriptionRegexps,
String kind, List<String> staticTypeRegexps, {bool isCore: false,
- String docRegexp: null, bool isLiteral: false, List<String> parameterRegexps:
- null, propagatedType: null}) {
+ String docRegexp: null, bool isLiteral: false,
+ List<String> parameterRegexps: null, propagatedType: null}) {
int offset = text.indexOf(target);
return sendAnalysisGetHover(pathname, offset).then((result) {
expect(result.hovers, hasLength(1));
@@ -141,124 +141,54 @@
// request is made. So wait for analysis to finish before testing anything.
return analysisFinished.then((_) {
List<Future> tests = [];
- tests.add(
- checkHover(
- 'topLevelVar;',
- 11,
- ['List', 'topLevelVar'],
- 'top level variable',
- ['List']));
- tests.add(
- checkHover(
- 'func(',
- 4,
- ['func', 'int', 'param'],
- 'function',
- ['int', 'void'],
- docRegexp: 'Documentation for func'));
- tests.add(
- checkHover(
- 'int param',
- 3,
- ['int'],
- 'class',
- ['int'],
- isCore: true,
- docRegexp: '.*'));
- tests.add(
- checkHover(
- 'param)',
- 5,
- ['int', 'param'],
- 'parameter',
- ['int'],
- docRegexp: 'Documentation for func'));
- tests.add(
- checkHover(
- 'num localVar',
- 3,
- ['num'],
- 'class',
- ['num'],
- isCore: true,
- docRegexp: '.*'));
- tests.add(
- checkHover(
- 'localVar =',
- 8,
- ['num', 'localVar'],
- 'local variable',
- ['num'],
- propagatedType: 'int'));
- tests.add(
- checkHover(
- 'topLevelVar.length;',
- 11,
- ['List', 'topLevelVar'],
- 'top level variable',
- ['List']));
- tests.add(
- checkHover(
- 'length;',
- 6,
- ['get', 'length', 'int'],
- 'getter',
- ['int'],
- isCore: true,
- docRegexp: '.*'));
- tests.add(
- checkHover(
- 'length =',
- 6,
- ['set', 'length', 'int'],
- 'setter',
- ['int'],
- isCore: true,
- docRegexp: '.*'));
- tests.add(
- checkHover(
- 'param;',
- 5,
- ['int', 'param'],
- 'parameter',
- ['int'],
- docRegexp: 'Documentation for func',
- parameterRegexps: ['.*']));
- tests.add(
- checkHover(
- 'add(',
- 3,
- ['List', 'add'],
- 'method',
- null,
- isCore: true,
- docRegexp: '.*'));
- tests.add(
- checkHover(
- 'localVar)',
- 8,
- ['num', 'localVar'],
- 'local variable',
- ['num'],
- parameterRegexps: ['.*'],
- propagatedType: 'int'));
- tests.add(
- checkHover(
- 'func(35',
- 4,
- ['func', 'int', 'param'],
- 'function',
- null,
- docRegexp: 'Documentation for func'));
- tests.add(
- checkHover(
- '35',
- 2,
- null,
- null,
- ['int'],
- isLiteral: true,
- parameterRegexps: ['int', 'param']));
+ tests.add(checkHover('topLevelVar;', 11,
+ ['List', 'topLevelVar'], 'top level variable', ['List']));
+ tests.add(checkHover('func(', 4, [
+ 'func',
+ 'int',
+ 'param'
+ ], 'function', ['int', 'void'], docRegexp: 'Documentation for func'));
+ tests.add(checkHover('int param', 3, ['int'], 'class', ['int'],
+ isCore: true, docRegexp: '.*'));
+ tests.add(checkHover('param)', 5, ['int', 'param'], 'parameter', ['int'],
+ docRegexp: 'Documentation for func'));
+ tests.add(checkHover('num localVar', 3, ['num'], 'class', ['num'],
+ isCore: true, docRegexp: '.*'));
+ tests.add(checkHover('localVar =', 8, [
+ 'num',
+ 'localVar'
+ ], 'local variable', ['num'], propagatedType: 'int'));
+ tests.add(checkHover('topLevelVar.length;', 11, [
+ 'List',
+ 'topLevelVar'
+ ], 'top level variable', ['List']));
+ tests.add(checkHover('length;', 6, [
+ 'get',
+ 'length',
+ 'int'
+ ], 'getter', ['int'], isCore: true, docRegexp: '.*'));
+ tests.add(checkHover('length =', 6, [
+ 'set',
+ 'length',
+ 'int'
+ ], 'setter', ['int'], isCore: true, docRegexp: '.*'));
+ tests.add(checkHover('param;', 5, ['int', 'param'], 'parameter', ['int'],
+ docRegexp: 'Documentation for func', parameterRegexps: ['.*']));
+ tests.add(checkHover('add(', 3, ['List', 'add'], 'method', null,
+ isCore: true, docRegexp: '.*'));
+ tests.add(checkHover('localVar)', 8, [
+ 'num',
+ 'localVar'
+ ], 'local variable', [
+ 'num'
+ ], parameterRegexps: ['.*'], propagatedType: 'int'));
+ tests.add(checkHover('func(35', 4, [
+ 'func',
+ 'int',
+ 'param'
+ ], 'function', null, docRegexp: 'Documentation for func'));
+ tests.add(checkHover('35', 2, null, null, ['int'],
+ isLiteral: true, parameterRegexps: ['int', 'param']));
tests.add(checkNoHover('comment'));
return Future.wait(tests);
});
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test.dart b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
index f588501..bb17256 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
@@ -70,9 +70,7 @@
''';
writeFile(pathname, text);
standardAnalysisSetup();
- sendAnalysisSetSubscriptions({
- AnalysisService.HIGHLIGHTS: [pathname]
- });
+ sendAnalysisSetSubscriptions({AnalysisService.HIGHLIGHTS: [pathname]});
// Map from highlight type to highlighted text
Map<HighlightRegionType, Set<String>> highlights;
onAnalysisHighlights.listen((AnalysisHighlightsParams params) {
@@ -98,19 +96,21 @@
highlights.remove(type);
}
check(HighlightRegionType.ANNOTATION, ['@override']);
- check(
- HighlightRegionType.BUILT_IN,
+ check(HighlightRegionType.BUILT_IN,
['as', 'get', 'import', 'set', 'static', 'typedef']);
- check(
- HighlightRegionType.CLASS,
- ['Class', 'Class2', 'Future', 'Map', 'int']);
+ check(HighlightRegionType.CLASS, [
+ 'Class',
+ 'Class2',
+ 'Future',
+ 'Map',
+ 'int'
+ ]);
check(HighlightRegionType.COMMENT_BLOCK, ['/* Block comment */']);
+ check(HighlightRegionType.COMMENT_DOCUMENTATION, [
+ '/**\n * Doc comment\n */'
+ ]);
check(
- HighlightRegionType.COMMENT_DOCUMENTATION,
- ['/**\n * Doc comment\n */']);
- check(
- HighlightRegionType.COMMENT_END_OF_LINE,
- ['// End of line comment']);
+ HighlightRegionType.COMMENT_END_OF_LINE, ['// End of line comment']);
check(HighlightRegionType.CONSTRUCTOR, ['constructor']);
check(HighlightRegionType.DIRECTIVE, ["import 'dart:async' as async;"]);
check(HighlightRegionType.DYNAMIC_TYPE, ['dynamicType']);
@@ -127,8 +127,7 @@
check(HighlightRegionType.LITERAL_DOUBLE, ['1.0']);
check(HighlightRegionType.LITERAL_INTEGER, ['2', '42']);
check(HighlightRegionType.LITERAL_LIST, ['[]']);
- check(
- HighlightRegionType.LITERAL_MAP,
+ check(HighlightRegionType.LITERAL_MAP,
['{1.0: [].toList()}', '{2: local}']);
check(HighlightRegionType.LITERAL_STRING, ["'dart:async'", "'string'"]);
check(HighlightRegionType.LOCAL_VARIABLE, ['local']);
@@ -139,8 +138,7 @@
check(HighlightRegionType.METHOD_STATIC, ['wait']);
check(HighlightRegionType.PARAMETER, ['parameter']);
check(HighlightRegionType.SETTER_DECLARATION, ['setter']);
- check(
- HighlightRegionType.TOP_LEVEL_VARIABLE,
+ check(HighlightRegionType.TOP_LEVEL_VARIABLE,
['override', 'topLevelVariable']);
check(HighlightRegionType.TYPE_NAME_DYNAMIC, ['dynamic']);
check(HighlightRegionType.TYPE_PARAMETER, ['TypeParameter']);
diff --git a/pkg/analysis_server/test/integration/analysis/navigation_test.dart b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
index e22e83e..66de913 100644
--- a/pkg/analysis_server/test/integration/analysis/navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
@@ -54,9 +54,7 @@
''';
writeFile(pathname2, text2);
standardAnalysisSetup();
- sendAnalysisSetSubscriptions({
- AnalysisService.NAVIGATION: [pathname1]
- });
+ sendAnalysisSetSubscriptions({AnalysisService.NAVIGATION: [pathname1]});
List<NavigationRegion> regions;
List<NavigationTarget> targets;
List<String> targetFiles;
@@ -82,8 +80,8 @@
fail('No element found for index $index');
return null;
}
- void checkLocal(String source, String expectedTarget,
- ElementKind expectedKind) {
+ void checkLocal(
+ String source, String expectedTarget, ElementKind expectedKind) {
int sourceIndex = text1.indexOf(source);
int targetIndex = text1.indexOf(expectedTarget);
NavigationTarget element = findTargetElement(sourceIndex);
@@ -102,39 +100,26 @@
// as a navigation target?
checkLocal('Class<int>', 'Class<TypeParameter>', ElementKind.CLASS);
checkRemote(
- "part 'test2.dart';",
- r'test2.dart$',
- ElementKind.COMPILATION_UNIT);
- checkLocal(
- 'new Class<int>.constructor',
+ "part 'test2.dart';", r'test2.dart$', ElementKind.COMPILATION_UNIT);
+ checkLocal('new Class<int>.constructor',
'constructor(); /* constructor declaration */',
ElementKind.CONSTRUCTOR);
checkLocal('field;', 'field;', ElementKind.FIELD);
- checkLocal(
- 'function(() => localVariable.field)',
- 'function(FunctionTypeAlias parameter)',
- ElementKind.FUNCTION);
- checkLocal(
- 'FunctionTypeAlias parameter',
- 'FunctionTypeAlias();',
+ checkLocal('function(() => localVariable.field)',
+ 'function(FunctionTypeAlias parameter)', ElementKind.FUNCTION);
+ checkLocal('FunctionTypeAlias parameter', 'FunctionTypeAlias();',
ElementKind.FUNCTION_TYPE_ALIAS);
checkLocal('field)', 'field;', ElementKind.GETTER);
checkRemote("import 'dart:async'", r'async\.dart$', ElementKind.LIBRARY);
checkLocal(
- 'localVariable.field',
- 'localVariable =',
- ElementKind.LOCAL_VARIABLE);
+ 'localVariable.field', 'localVariable =', ElementKind.LOCAL_VARIABLE);
checkLocal('method();', 'method() {', ElementKind.METHOD);
checkLocal('parameter());', 'parameter) {', ElementKind.PARAMETER);
checkLocal('field = 1', 'field;', ElementKind.SETTER);
- checkLocal(
- 'topLevelVariable;',
- 'topLevelVariable;',
+ checkLocal('topLevelVariable;', 'topLevelVariable;',
ElementKind.TOP_LEVEL_VARIABLE);
checkLocal(
- 'TypeParameter field;',
- 'TypeParameter>',
- ElementKind.TYPE_PARAMETER);
+ 'TypeParameter field;', 'TypeParameter>', ElementKind.TYPE_PARAMETER);
});
}
}
diff --git a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
index 1be1784..57405cf 100644
--- a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
@@ -31,9 +31,7 @@
''';
writeFile(pathname, text);
standardAnalysisSetup();
- sendAnalysisSetSubscriptions({
- AnalysisService.OCCURRENCES: [pathname]
- });
+ sendAnalysisSetSubscriptions({AnalysisService.OCCURRENCES: [pathname]});
List<Occurrences> occurrences;
onAnalysisOccurrences.listen((AnalysisOccurrencesParams params) {
expect(params.file, equals(pathname));
@@ -51,8 +49,9 @@
return null;
}
void check(String elementName, Iterable<String> expectedOccurrences) {
- Set<int> expectedOffsets =
- expectedOccurrences.map((String substring) => text.indexOf(substring)).toSet();
+ Set<int> expectedOffsets = expectedOccurrences
+ .map((String substring) => text.indexOf(substring))
+ .toSet();
Set<int> foundOffsets = findOffsets(elementName);
expect(foundOffsets, equals(expectedOffsets));
}
diff --git a/pkg/analysis_server/test/integration/analysis/outline_test.dart b/pkg/analysis_server/test/integration/analysis/outline_test.dart
index 4a0adea..dcd6e3a 100644
--- a/pkg/analysis_server/test/integration/analysis/outline_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/outline_test.dart
@@ -23,8 +23,7 @@
*/
void checkConnected(List<Outline> outlineObjects) {
for (int i = 0; i < outlineObjects.length - 1; i++) {
- expect(
- outlineObjects[i + 1].offset,
+ expect(outlineObjects[i + 1].offset,
equals(outlineObjects[i].offset + outlineObjects[i].length));
}
}
@@ -54,9 +53,7 @@
''';
writeFile(pathname, text);
standardAnalysisSetup();
- sendAnalysisSetSubscriptions({
- AnalysisService.OUTLINE: [pathname]
- });
+ sendAnalysisSetSubscriptions({AnalysisService.OUTLINE: [pathname]});
Outline outline;
onAnalysisOutline.listen((AnalysisOutlineParams params) {
expect(params.file, equals(pathname));
diff --git a/pkg/analysis_server/test/integration/analysis/overrides_test.dart b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
index 4c28d7f..b5dfb6f 100644
--- a/pkg/analysis_server/test/integration/analysis/overrides_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
@@ -53,9 +53,7 @@
''';
writeFile(pathname, text);
standardAnalysisSetup();
- sendAnalysisSetSubscriptions({
- AnalysisService.OVERRIDES: [pathname]
- });
+ sendAnalysisSetSubscriptions({AnalysisService.OVERRIDES: [pathname]});
List<Override> overrides;
onAnalysisOverrides.listen((AnalysisOverridesParams params) {
expect(params.file, equals(pathname));
@@ -101,8 +99,7 @@
bool wasAdded = actualOverridesInterfaces.add(className);
expect(wasAdded, isTrue);
}
- expect(
- actualOverridesInterfaces,
+ expect(actualOverridesInterfaces,
equals(expectedOverridesInterfaces.toSet()));
} else {
expect(interfaceMembers, isNull);
diff --git a/pkg/analysis_server/test/integration/analysis/package_root_test.dart b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
index 964e533..61974b0 100644
--- a/pkg/analysis_server/test/integration/analysis/package_root_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
@@ -39,9 +39,7 @@
writeFile(mainPath, mainText);
String normalizedFooBarPath = writeFile(fooBarPath, fooBarText);
sendServerSetSubscriptions([ServerService.STATUS]);
- sendAnalysisSetSubscriptions({
- AnalysisService.NAVIGATION: [mainPath]
- });
+ sendAnalysisSetSubscriptions({AnalysisService.NAVIGATION: [mainPath]});
List<NavigationRegion> navigationRegions;
List<NavigationTarget> navigationTargets;
List<String> navigationTargetFiles;
@@ -51,9 +49,8 @@
navigationTargets = params.targets;
navigationTargetFiles = params.files;
});
- sendAnalysisSetAnalysisRoots([projPath], [], packageRoots: {
- projPath: packagesPath
- });
+ sendAnalysisSetAnalysisRoots([projPath], [],
+ packageRoots: {projPath: packagesPath});
return analysisFinished.then((_) {
// Verify that fooBarPath was properly resolved by checking that f()
// refers to it.
@@ -65,8 +62,10 @@
found = true;
expect(region.targets, hasLength(1));
int navigationTargetIndex = region.targets[0];
- NavigationTarget navigationTarget = navigationTargets[navigationTargetIndex];
- String navigationFile = navigationTargetFiles[navigationTarget.fileIndex];
+ NavigationTarget navigationTarget =
+ navigationTargets[navigationTargetIndex];
+ String navigationFile =
+ navigationTargetFiles[navigationTarget.fileIndex];
expect(navigationFile, equals(normalizedFooBarPath));
}
}
diff --git a/pkg/analysis_server/test/integration/analysis/test_all.dart b/pkg/analysis_server/test/integration/analysis/test_all.dart
index 4ea4c34..b34e141 100644
--- a/pkg/analysis_server/test/integration/analysis/test_all.dart
+++ b/pkg/analysis_server/test/integration/analysis/test_all.dart
@@ -8,8 +8,8 @@
import 'error_test.dart' as error_test;
import 'get_errors_after_analysis_test.dart' as get_errors_after_analysis_test;
-import 'get_errors_before_analysis_test.dart' as
- get_errors_before_analysis_test;
+import 'get_errors_before_analysis_test.dart'
+ as get_errors_before_analysis_test;
import 'get_hover_test.dart' as get_hover_test;
import 'highlights_test.dart' as highlights_test;
import 'navigation_test.dart' as navigation_test;
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
index 7a8f10b..2450fd8 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
@@ -28,9 +28,7 @@
writeFile(pathname, '// dummy text');
standardAnalysisSetup();
// Override file contents with badText.
- sendAnalysisUpdateContent({
- pathname: new AddContentOverlay(badText)
- });
+ sendAnalysisUpdateContent({pathname: new AddContentOverlay(badText)});
return analysisFinished.then((_) {
// The overridden contents (badText) are missing quotation marks.
expect(currentAnalysisErrors[pathname], isNotEmpty);
@@ -39,11 +37,11 @@
// order in which they appear in the file. If these edits are applied in
// the wrong order, some of the quotation marks will be in the wrong
// places, and there will still be errors.
- List<SourceEdit> edits = '"'.allMatches(
- goodText).map((Match match) => new SourceEdit(match.start, 0, '"')).toList();
- sendAnalysisUpdateContent({
- pathname: new ChangeContentOverlay(edits)
- });
+ List<SourceEdit> edits = '"'
+ .allMatches(goodText)
+ .map((Match match) => new SourceEdit(match.start, 0, '"'))
+ .toList();
+ sendAnalysisUpdateContent({pathname: new ChangeContentOverlay(edits)});
return analysisFinished;
}).then((_) {
// There should be no errors now, assuming that quotation marks have been
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
index 169c42b..b5a9b57 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
@@ -28,9 +28,11 @@
return analysisFinished.then((_) {
// The contents on disk (badText) are missing a semicolon.
expect(currentAnalysisErrors[pathname], isNotEmpty);
- }).then((_) => sendAnalysisUpdateContent({
- pathname: new AddContentOverlay(goodText)
- })).then((result) => analysisFinished).then((_) {
+ })
+ .then((_) => sendAnalysisUpdateContent(
+ {pathname: new AddContentOverlay(goodText)}))
+ .then((result) => analysisFinished)
+ .then((_) {
// There should be no errors now because the contents on disk have been
// overriden with goodText.
expect(currentAnalysisErrors[pathname], isEmpty);
@@ -48,9 +50,7 @@
}).then((result) => analysisFinished).then((_) {
// There should be no errors now because we've added the semicolon back.
expect(currentAnalysisErrors[pathname], isEmpty);
- return sendAnalysisUpdateContent({
- pathname: new RemoveContentOverlay()
- });
+ return sendAnalysisUpdateContent({pathname: new RemoveContentOverlay()});
}).then((result) => analysisFinished).then((_) {
// Now there should be errors again, because the contents on disk are no
// longer overridden.
diff --git a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
index d0ee85e..3cdb189 100644
--- a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
+++ b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
@@ -31,8 +31,7 @@
return analysisFinished.then((_) {
return sendCompletionGetSuggestions(
- pathname,
- text.indexOf('test.') + 'test.'.length).then((result) {
+ pathname, text.indexOf('test.') + 'test.'.length).then((result) {
// Since the feature doesn't work yet, just pause for a second to
// collect the output of the analysis server, and then stop the test.
// TODO(paulberry): finish writing the integration test once the feature
diff --git a/pkg/analysis_server/test/integration/integration_tests.dart b/pkg/analysis_server/test/integration/integration_tests.dart
index 1970ab1..23592862 100644
--- a/pkg/analysis_server/test/integration/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/integration_tests.dart
@@ -23,18 +23,12 @@
const Matcher isNotification = const MatchesJsonObject('notification', const {
'event': isString
-}, optionalFields: const {
- 'params': isMap
-});
+}, optionalFields: const {'params': isMap});
const Matcher isObject = isMap;
-final Matcher isResponse = new MatchesJsonObject('response', {
- 'id': isString
-}, optionalFields: {
- 'result': anything,
- 'error': isRequestError
-});
+final Matcher isResponse = new MatchesJsonObject('response', {'id': isString},
+ optionalFields: {'result': anything, 'error': isRequestError});
const Matcher isString = const isInstanceOf<String>('String');
@@ -63,8 +57,8 @@
/**
* Base class for analysis server integration tests.
*/
-abstract class AbstractAnalysisServerIntegrationTest extends
- IntegrationTestMixin {
+abstract class AbstractAnalysisServerIntegrationTest
+ extends IntegrationTestMixin {
/**
* Amount of time to give the server to respond to a shutdown request before
* forcibly terminating it.
@@ -262,14 +256,11 @@
}
@override
- Description describeMismatch(item, Description mismatchDescription,
- Map matchState, bool verbose) {
+ Description describeMismatch(
+ item, Description mismatchDescription, Map matchState, bool verbose) {
_createMatcher();
return _wrappedMatcher.describeMismatch(
- item,
- mismatchDescription,
- matchState,
- verbose);
+ item, mismatchDescription, matchState, verbose);
}
@override
@@ -353,10 +344,12 @@
requiredFields.forEach((String key, Matcher valueMatcher) {
if (!item.containsKey(key)) {
mismatches.add(
- (Description mismatchDescription) =>
- mismatchDescription.add(
- 'is missing field ').addDescriptionOf(
- key).add(' (').addDescriptionOf(valueMatcher).add(')'));
+ (Description mismatchDescription) => mismatchDescription
+ .add('is missing field ')
+ .addDescriptionOf(key)
+ .add(' (')
+ .addDescriptionOf(valueMatcher)
+ .add(')'));
} else {
_checkField(key, item[key], valueMatcher, mismatches);
}
@@ -368,9 +361,9 @@
} else if (optionalFields != null && optionalFields.containsKey(key)) {
_checkField(key, value, optionalFields[key], mismatches);
} else {
- mismatches.add(
- (Description mismatchDescription) =>
- mismatchDescription.add('has unexpected field ').addDescriptionOf(key));
+ mismatches.add((Description mismatchDescription) => mismatchDescription
+ .add('has unexpected field ')
+ .addDescriptionOf(key));
}
});
}
@@ -382,11 +375,9 @@
*/
void _checkField(String key, value, Matcher valueMatcher,
List<MismatchDescriber> mismatches) {
- checkSubstructure(
- value,
- valueMatcher,
- mismatches,
- (Description description) => description.add('field ').addDescriptionOf(key));
+ checkSubstructure(value, valueMatcher, mismatches,
+ (Description description) =>
+ description.add('field ').addDescriptionOf(key));
}
}
@@ -493,8 +484,10 @@
* [notificationProcessor].
*/
void listenToOutput(NotificationProcessor notificationProcessor) {
- _process.stdout.transform(
- (new Utf8Codec()).decoder).transform(new LineSplitter()).listen((String line) {
+ _process.stdout
+ .transform((new Utf8Codec()).decoder)
+ .transform(new LineSplitter())
+ .listen((String line) {
String trimmedLine = line.trim();
_recordStdio('RECV: $trimmedLine');
var message;
@@ -517,9 +510,8 @@
}
if (messageAsMap.containsKey('error')) {
// TODO(paulberry): propagate the error info to the completer.
- completer.completeError(
- new UnimplementedError(
- 'Server responded with an error: ${JSON.encode(message)}'));
+ completer.completeError(new UnimplementedError(
+ 'Server responded with an error: ${JSON.encode(message)}'));
} else {
completer.complete(messageAsMap['result']);
}
@@ -539,8 +531,10 @@
expect(message, isNotification);
}
});
- _process.stderr.transform(
- (new Utf8Codec()).decoder).transform(new LineSplitter()).listen((String line) {
+ _process.stderr
+ .transform((new Utf8Codec()).decoder)
+ .transform(new LineSplitter())
+ .listen((String line) {
String trimmedLine = line.trim();
_recordStdio('ERR: $trimmedLine');
_badDataFromServer();
@@ -669,20 +663,14 @@
description.add('List of ').addDescriptionOf(elementMatcher);
@override
- Description describeMismatch(item, Description mismatchDescription,
- Map matchState, bool verbose) {
+ Description describeMismatch(
+ item, Description mismatchDescription, Map matchState, bool verbose) {
if (item is! List) {
return super.describeMismatch(
- item,
- mismatchDescription,
- matchState,
- verbose);
+ item, mismatchDescription, matchState, verbose);
} else {
return iterableMatcher.describeMismatch(
- item,
- mismatchDescription,
- matchState,
- verbose);
+ item, mismatchDescription, matchState, verbose);
}
}
@@ -713,10 +701,11 @@
_MapOf(this.keyMatcher, this.valueMatcher);
@override
- Description describe(Description description) =>
- description.add(
- 'Map from ').addDescriptionOf(
- keyMatcher).add(' to ').addDescriptionOf(valueMatcher);
+ Description describe(Description description) => description
+ .add('Map from ')
+ .addDescriptionOf(keyMatcher)
+ .add(' to ')
+ .addDescriptionOf(valueMatcher);
@override
void populateMismatches(item, List<MismatchDescriber> mismatches) {
@@ -725,16 +714,12 @@
return;
}
item.forEach((key, value) {
- checkSubstructure(
- key,
- keyMatcher,
- mismatches,
- (Description description) => description.add('key ').addDescriptionOf(key));
- checkSubstructure(
- value,
- valueMatcher,
- mismatches,
- (Description description) => description.add('field ').addDescriptionOf(key));
+ checkSubstructure(key, keyMatcher, mismatches,
+ (Description description) =>
+ description.add('key ').addDescriptionOf(key));
+ checkSubstructure(value, valueMatcher, mismatches,
+ (Description description) =>
+ description.add('field ').addDescriptionOf(key));
});
}
}
@@ -803,11 +788,9 @@
mismatchDescription = describeSubstructure(mismatchDescription);
mismatchDescription =
mismatchDescription.add(' (should be ').addDescriptionOf(matcher);
- String subDescription = matcher.describeMismatch(
- item,
- new StringDescription(),
- subState,
- false).toString();
+ String subDescription = matcher
+ .describeMismatch(item, new StringDescription(), subState, false)
+ .toString();
if (subDescription.isNotEmpty) {
mismatchDescription =
mismatchDescription.add('; ').add(subDescription);
@@ -818,8 +801,8 @@
}
@override
- Description describeMismatch(item, Description mismatchDescription,
- Map matchState, bool verbose) {
+ Description describeMismatch(
+ item, Description mismatchDescription, Map matchState, bool verbose) {
List<MismatchDescriber> mismatches = matchState['mismatches'];
if (mismatches != null) {
for (int i = 0; i < mismatches.length; i++) {
@@ -838,10 +821,7 @@
return mismatchDescription;
} else {
return super.describeMismatch(
- item,
- mismatchDescription,
- matchState,
- verbose);
+ item, mismatchDescription, matchState, verbose);
}
}
@@ -852,9 +832,7 @@
if (mismatches.isEmpty) {
return true;
} else {
- addStateInfo(matchState, {
- 'mismatches': mismatches
- });
+ addStateInfo(matchState, {'mismatches': mismatches});
return false;
}
}
diff --git a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
index 7838290..d1f8726 100644
--- a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
@@ -97,8 +97,7 @@
expect(element.kind, equals(ElementKind.CLASS));
expect(element.name, equals(name));
if (name != 'Object') {
- expect(
- element.location.offset,
+ expect(element.location.offset,
equals(text.indexOf('class $name') + 'class '.length));
}
}
@@ -141,11 +140,9 @@
return typeHierarchyTest(text).then((HierarchyResults results) {
expect(results.items, hasLength(4));
expect(results.pivot.interfaces, hasLength(2));
- expect(
- results.pivot.interfaces,
+ expect(results.pivot.interfaces,
contains(results.nameToIndex['Interface1']));
- expect(
- results.pivot.interfaces,
+ expect(results.pivot.interfaces,
contains(results.nameToIndex['Interface2']));
expect(results.getItem('Object').interfaces, isEmpty);
expect(results.getItem('Interface1').interfaces, isEmpty);
@@ -169,16 +166,13 @@
return typeHierarchyTest(text).then((HierarchyResults results) {
expect(results.items, hasLength(6));
expect(results.getItem('Object').memberElement, isNull);
- expect(
- results.getItem('Base1').memberElement.location.offset,
+ expect(results.getItem('Base1').memberElement.location.offset,
equals(text.indexOf('foo /* base1 */')));
expect(results.getItem('Base2').memberElement, isNull);
- expect(
- results.getItem('Pivot').memberElement.location.offset,
+ expect(results.getItem('Pivot').memberElement.location.offset,
equals(text.indexOf('foo /* target */')));
expect(results.getItem('Derived1').memberElement, isNull);
- expect(
- results.getItem('Derived2').memberElement.location.offset,
+ expect(results.getItem('Derived2').memberElement.location.offset,
equals(text.indexOf('foo /* derived2 */')));
});
}
@@ -218,8 +212,7 @@
expect(results.getItem('Object').subclasses, isEmpty);
expect(results.getItem('Base').subclasses, isEmpty);
expect(results.getItem('Sub1').subclasses, isEmpty);
- expect(
- results.getItem('Sub2').subclasses,
+ expect(results.getItem('Sub2').subclasses,
equals([results.nameToIndex['Sub2a']]));
expect(results.getItem('Sub2a').subclasses, isEmpty);
});
@@ -234,14 +227,11 @@
return typeHierarchyTest(text).then((HierarchyResults results) {
expect(results.items, hasLength(4));
expect(results.getItem('Object').superclass, isNull);
- expect(
- results.getItem('Base1').superclass,
+ expect(results.getItem('Base1').superclass,
equals(results.nameToIndex['Object']));
- expect(
- results.getItem('Base2').superclass,
+ expect(results.getItem('Base2').superclass,
equals(results.nameToIndex['Base1']));
- expect(
- results.getItem('Pivot').superclass,
+ expect(results.getItem('Pivot').superclass,
equals(results.nameToIndex['Base2']));
});
}
@@ -256,25 +246,25 @@
// Run all the getTypeHierarchy tests at once so that the server can take
// advantage of incremental analysis and the test doesn't time out.
List tests = [
- getTypeHierarchy_classElement,
- getTypeHierarchy_displayName,
- getTypeHierarchy_memberElement,
- getTypeHierarchy_superclass,
- getTypeHierarchy_interfaces,
- getTypeHierarchy_mixins,
- getTypeHierarchy_subclasses,
- getTypeHierarchy_badTarget,
- getTypeHierarchy_functionTarget];
+ getTypeHierarchy_classElement,
+ getTypeHierarchy_displayName,
+ getTypeHierarchy_memberElement,
+ getTypeHierarchy_superclass,
+ getTypeHierarchy_interfaces,
+ getTypeHierarchy_mixins,
+ getTypeHierarchy_subclasses,
+ getTypeHierarchy_badTarget,
+ getTypeHierarchy_functionTarget
+ ];
return Future.forEach(tests, (test) => test());
}
Future<HierarchyResults> typeHierarchyTest(String text) {
int offset = text.indexOf(' /* target */') - 1;
- sendAnalysisUpdateContent({
- pathname: new AddContentOverlay(text)
- });
- return analysisFinished.then(
- (_) => sendSearchGetTypeHierarchy(pathname, offset)).then((result) {
+ sendAnalysisUpdateContent({pathname: new AddContentOverlay(text)});
+ return analysisFinished
+ .then((_) => sendSearchGetTypeHierarchy(pathname, offset))
+ .then((result) {
if (result.hierarchyItems == null) {
return null;
} else {
diff --git a/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart b/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
index 4804ea1..721a607 100644
--- a/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
+++ b/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
@@ -18,9 +18,9 @@
test_setSubscriptions_invalidService() {
// TODO(paulberry): verify that if an invalid service is specified, the
// current subscriptions are unchanged.
- return server.send("server.setSubscriptions", {
- 'subscriptions': ['bogus']
- }).then((_) {
+ return server
+ .send("server.setSubscriptions", {'subscriptions': ['bogus']})
+ .then((_) {
fail('setSubscriptions should have produced an error');
}, onError: (error) {
// The expected error occurred.
diff --git a/pkg/analysis_server/test/integration/server/test_all.dart b/pkg/analysis_server/test/integration/server/test_all.dart
index 1eb9384..499814e 100644
--- a/pkg/analysis_server/test/integration/server/test_all.dart
+++ b/pkg/analysis_server/test/integration/server/test_all.dart
@@ -7,8 +7,8 @@
import 'package:unittest/unittest.dart';
import 'get_version_test.dart' as get_version_test;
-import 'set_subscriptions_invalid_service_test.dart' as
- set_subscriptions_invalid_service_test;
+import 'set_subscriptions_invalid_service_test.dart'
+ as set_subscriptions_invalid_service_test;
import 'set_subscriptions_test.dart' as set_subscriptions_test;
import 'shutdown_test.dart' as shutdown_test;
import 'status_test.dart' as status_test;
diff --git a/pkg/analysis_server/test/mock_sdk.dart b/pkg/analysis_server/test/mock_sdk.dart
index 4589c22..1967994 100644
--- a/pkg/analysis_server/test/mock_sdk.dart
+++ b/pkg/analysis_server/test/mock_sdk.dart
@@ -10,10 +10,9 @@
import 'package:analyzer/src/generated/sdk.dart';
import 'package:analyzer/src/generated/source.dart';
-
class MockSdk implements DartSdk {
- static const _MockSdkLibrary LIB_CORE =
- const _MockSdkLibrary('dart:core', '/lib/core/core.dart', '''
+ static const _MockSdkLibrary LIB_CORE = const _MockSdkLibrary('dart:core',
+ '/lib/core/core.dart', '''
library dart.core;
import 'dart:async';
@@ -101,8 +100,8 @@
void print(Object object) {}
''');
- static const _MockSdkLibrary LIB_ASYNC =
- const _MockSdkLibrary('dart:async', '/lib/async/async.dart', '''
+ static const _MockSdkLibrary LIB_ASYNC = const _MockSdkLibrary('dart:async',
+ '/lib/async/async.dart', '''
library dart.async;
import 'dart:math';
@@ -117,15 +116,15 @@
abstract class StreamTransformer<S, T> {}
''');
- static const _MockSdkLibrary LIB_COLLECTION =
- const _MockSdkLibrary('dart:collection', '/lib/collection/collection.dart', '''
+ static const _MockSdkLibrary LIB_COLLECTION = const _MockSdkLibrary(
+ 'dart:collection', '/lib/collection/collection.dart', '''
library dart.collection;
abstract class HashMap<K, V> implements Map<K, V> {}
''');
- static const _MockSdkLibrary LIB_CONVERT =
- const _MockSdkLibrary('dart:convert', '/lib/convert/convert.dart', '''
+ static const _MockSdkLibrary LIB_CONVERT = const _MockSdkLibrary(
+ 'dart:convert', '/lib/convert/convert.dart', '''
library dart.convert;
import 'dart:async';
@@ -134,8 +133,8 @@
class JsonDecoder extends Converter<String, Object> {}
''');
- static const _MockSdkLibrary LIB_MATH =
- const _MockSdkLibrary('dart:math', '/lib/math/math.dart', '''
+ static const _MockSdkLibrary LIB_MATH = const _MockSdkLibrary('dart:math',
+ '/lib/math/math.dart', '''
library dart.math;
const double E = 2.718281828459045;
const double PI = 3.1415926535897932;
@@ -152,19 +151,20 @@
}
''');
- static const _MockSdkLibrary LIB_HTML =
- const _MockSdkLibrary('dart:html', '/lib/html/dartium/html_dartium.dart', '''
+ static const _MockSdkLibrary LIB_HTML = const _MockSdkLibrary('dart:html',
+ '/lib/html/dartium/html_dartium.dart', '''
library dart.html;
class HtmlElement {}
''');
static const List<SdkLibrary> LIBRARIES = const [
- LIB_CORE,
- LIB_ASYNC,
- LIB_COLLECTION,
- LIB_CONVERT,
- LIB_MATH,
- LIB_HTML,];
+ LIB_CORE,
+ LIB_ASYNC,
+ LIB_COLLECTION,
+ LIB_CONVERT,
+ LIB_MATH,
+ LIB_HTML,
+ ];
final resource.MemoryResourceProvider provider =
new resource.MemoryResourceProvider();
@@ -279,7 +279,6 @@
}
}
-
class _MockSdkLibrary implements SdkLibrary {
final String shortName;
final String path;
diff --git a/pkg/analysis_server/test/mocks.dart b/pkg/analysis_server/test/mocks.dart
index cb314c6..be14732 100644
--- a/pkg/analysis_server/test/mocks.dart
+++ b/pkg/analysis_server/test/mocks.dart
@@ -79,9 +79,8 @@
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
-class MockCompilationUnitElement extends TypedMock implements
- CompilationUnitElement {
+class MockCompilationUnitElement extends TypedMock
+ implements CompilationUnitElement {
final ElementKind kind = ElementKind.COMPILATION_UNIT;
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
@@ -91,7 +90,6 @@
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
class MockElement extends StringTypedMock implements Element {
MockElement([String name = '<element>']) : super(name);
@@ -109,57 +107,48 @@
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
class MockFunctionElement extends TypedMock implements FunctionElement {
final ElementKind kind = ElementKind.FUNCTION;
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
-class MockFunctionTypeAliasElement extends TypedMock implements
- FunctionTypeAliasElement {
+class MockFunctionTypeAliasElement extends TypedMock
+ implements FunctionTypeAliasElement {
final ElementKind kind = ElementKind.FUNCTION_TYPE_ALIAS;
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
class MockHtmlElement extends TypedMock implements HtmlElement {
final ElementKind kind = ElementKind.HTML;
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
class MockImportElement extends TypedMock implements ImportElement {
final ElementKind kind = ElementKind.IMPORT;
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
class MockLibraryElement extends TypedMock implements LibraryElement {
final ElementKind kind = ElementKind.LIBRARY;
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
-class MockLocalVariableElement extends TypedMock implements LocalVariableElement
- {
+class MockLocalVariableElement extends TypedMock
+ implements LocalVariableElement {
final ElementKind kind = ElementKind.LOCAL_VARIABLE;
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
class MockLogger extends TypedMock implements Logger {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
class MockMethodElement extends StringTypedMock implements MethodElement {
final kind = ElementKind.METHOD;
MockMethodElement([String name = 'method']) : super(name);
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
/**
* A mock [PackageMapProvider].
*/
@@ -167,8 +156,8 @@
/**
* Package map that will be returned by the next call to [computePackageMap].
*/
- Map<String, List<resource.Folder>> packageMap = <String,
- List<resource.Folder>>{};
+ Map<String, List<resource.Folder>> packageMap =
+ <String, List<resource.Folder>>{};
/**
* Package maps that will be returned by the next call to [computePackageMap].
@@ -189,21 +178,18 @@
}
}
-
class MockParameterElement extends TypedMock implements ParameterElement {
final ElementKind kind = ElementKind.PARAMETER;
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
-class MockPropertyAccessorElement extends TypedMock implements
- PropertyAccessorElement {
+class MockPropertyAccessorElement extends TypedMock
+ implements PropertyAccessorElement {
final ElementKind kind;
MockPropertyAccessorElement(this.kind);
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
/**
* A mock [ServerCommunicationChannel] for testing [AnalysisServer].
*/
@@ -230,12 +216,10 @@
}
@override
- void listen(void onRequest(Request request), {Function onError, void
- onDone()}) {
- requestController.stream.listen(
- onRequest,
- onError: onError,
- onDone: onDone);
+ void listen(void onRequest(Request request),
+ {Function onError, void onDone()}) {
+ requestController.stream.listen(onRequest,
+ onError: onError, onDone: onDone);
}
@override
@@ -286,7 +270,6 @@
}
}
-
/**
* A mock [ServerOperation] for testing [AnalysisServer].
*/
@@ -306,7 +289,6 @@
void perform(AnalysisServer server) => this._perform(server);
}
-
/**
* A mock [WebSocket] for testing.
*/
@@ -336,40 +318,33 @@
Future close([int code, String reason]) =>
controller.close().then((_) => twin.controller.close());
- StreamSubscription<T> listen(void onData(T event), {Function onError, void
- onDone(), bool cancelOnError}) =>
- stream.listen(
+ StreamSubscription<T> listen(void onData(T event),
+ {Function onError, void onDone(), bool cancelOnError}) => stream.listen(
onData,
- onError: onError,
- onDone: onDone,
- cancelOnError: cancelOnError);
+ onError: onError, onDone: onDone, cancelOnError: cancelOnError);
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
Stream<T> where(bool test(T)) => stream.where(test);
}
-
class MockSource extends StringTypedMock implements Source {
MockSource([String name = 'mocked.dart']) : super(name);
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
-class MockTopLevelVariableElement extends TypedMock implements
- TopLevelVariableElement {
+class MockTopLevelVariableElement extends TypedMock
+ implements TopLevelVariableElement {
final ElementKind kind = ElementKind.TOP_LEVEL_VARIABLE;
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
-class MockTypeParameterElement extends TypedMock implements TypeParameterElement
- {
+class MockTypeParameterElement extends TypedMock
+ implements TypeParameterElement {
final ElementKind kind = ElementKind.TYPE_PARAMETER;
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
class NoResponseException implements Exception {
/**
* The request that was not responded to.
@@ -383,7 +358,6 @@
}
}
-
class StringTypedMock extends TypedMock {
String _toString;
@@ -398,7 +372,6 @@
}
}
-
/**
* A [Matcher] that check that there are no `error` in a given [Response].
*/
@@ -419,8 +392,8 @@
}
@override
- Description describeMismatch(item, Description mismatchDescription,
- Map matchState, bool verbose) {
+ Description describeMismatch(
+ item, Description mismatchDescription, Map matchState, bool verbose) {
Response response = item;
var id = response.id;
RequestError error = response.error;
@@ -428,8 +401,8 @@
if (error == null) {
mismatchDescription.add(' and has no error');
} else {
- mismatchDescription.add(
- ' and has error code ${response.error.code.name}');
+ mismatchDescription
+ .add(' and has error code ${response.error.code.name}');
}
return mismatchDescription;
}
@@ -447,7 +420,6 @@
}
}
-
/**
* A [Matcher] that check that there are no `error` in a given [Response].
*/
@@ -458,13 +430,13 @@
@override
Description describe(Description description) {
- return description.addDescriptionOf(
- 'response with identifier "$_id" and without error');
+ return description
+ .addDescriptionOf('response with identifier "$_id" and without error');
}
@override
- Description describeMismatch(item, Description mismatchDescription,
- Map matchState, bool verbose) {
+ Description describeMismatch(
+ item, Description mismatchDescription, Map matchState, bool verbose) {
Response response = item;
if (response == null) {
mismatchDescription.add('is null response');
diff --git a/pkg/analysis_server/test/operation/operation_queue_test.dart b/pkg/analysis_server/test/operation/operation_queue_test.dart
index 2fd7100..09a8afd 100644
--- a/pkg/analysis_server/test/operation/operation_queue_test.dart
+++ b/pkg/analysis_server/test/operation/operation_queue_test.dart
@@ -16,13 +16,11 @@
import '../mocks.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(ServerOperationQueueTest);
}
-
/**
* Return a [ServerOperation] mock with the given priority.
*/
@@ -32,25 +30,21 @@
return operation;
}
-
class AnalysisContextMock extends TypedMock implements InternalAnalysisContext {
List<Source> prioritySources = <Source>[];
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
class AnalysisServerMock extends TypedMock implements AnalysisServer {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
-class ServerContextManagerMock extends TypedMock implements ServerContextManager
- {
+class ServerContextManagerMock extends TypedMock
+ implements ServerContextManager {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
@reflectiveTest
class ServerOperationQueueTest {
ServerOperationQueue queue = new ServerOperationQueue();
@@ -153,7 +147,6 @@
}
}
-
class _ServerOperationMock extends TypedMock implements ServerOperation {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
@@ -162,8 +155,8 @@
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-class _SourceSensitiveOperationMock extends TypedMock implements
- SourceSensitiveOperation {
+class _SourceSensitiveOperationMock extends TypedMock
+ implements SourceSensitiveOperation {
final Source source;
_SourceSensitiveOperationMock(this.source);
diff --git a/pkg/analysis_server/test/plugin/plugin_impl_test.dart b/pkg/analysis_server/test/plugin/plugin_impl_test.dart
index 779c2ca..3d55dc5 100644
--- a/pkg/analysis_server/test/plugin/plugin_impl_test.dart
+++ b/pkg/analysis_server/test/plugin/plugin_impl_test.dart
@@ -39,8 +39,7 @@
test('registerExtension - non existent', () {
ExtensionManager manager = new ExtensionManager();
- expect(
- () => manager.registerExtension('does not exist', 'extension'),
+ expect(() => manager.registerExtension('does not exist', 'extension'),
throwsA(new isInstanceOf<ExtensionError>()));
;
});
@@ -50,27 +49,21 @@
Plugin plugin2 = new TestPlugin('plugin2');
ExtensionManager manager = new ExtensionManager();
expect(
- manager.registerExtensionPoint(plugin1, 'point1', null),
- isNotNull);
+ manager.registerExtensionPoint(plugin1, 'point1', null), isNotNull);
expect(
- manager.registerExtensionPoint(plugin1, 'point2', null),
- isNotNull);
+ manager.registerExtensionPoint(plugin1, 'point2', null), isNotNull);
expect(
- manager.registerExtensionPoint(plugin2, 'point1', null),
- isNotNull);
+ manager.registerExtensionPoint(plugin2, 'point1', null), isNotNull);
expect(
- manager.registerExtensionPoint(plugin2, 'point2', null),
- isNotNull);
+ manager.registerExtensionPoint(plugin2, 'point2', null), isNotNull);
});
test('registerExtensionPoint - conflicting - same plugin', () {
Plugin plugin1 = new TestPlugin('plugin1');
ExtensionManager manager = new ExtensionManager();
expect(
- manager.registerExtensionPoint(plugin1, 'point1', null),
- isNotNull);
- expect(
- () => manager.registerExtensionPoint(plugin1, 'point1', null),
+ manager.registerExtensionPoint(plugin1, 'point1', null), isNotNull);
+ expect(() => manager.registerExtensionPoint(plugin1, 'point1', null),
throwsA(new isInstanceOf<ExtensionError>()));
});
@@ -79,10 +72,8 @@
Plugin plugin2 = new TestPlugin('plugin1');
ExtensionManager manager = new ExtensionManager();
expect(
- manager.registerExtensionPoint(plugin1, 'point1', null),
- isNotNull);
- expect(
- () => manager.registerExtensionPoint(plugin2, 'point1', null),
+ manager.registerExtensionPoint(plugin1, 'point1', null), isNotNull);
+ expect(() => manager.registerExtensionPoint(plugin2, 'point1', null),
throwsA(new isInstanceOf<ExtensionError>()));
});
});
@@ -126,8 +117,8 @@
test('add - with validator - valid', () {
Plugin plugin = new TestPlugin('plugin');
- ExtensionPointImpl point =
- new ExtensionPointImpl(plugin, 'point', (Object extension) {
+ ExtensionPointImpl point = new ExtensionPointImpl(plugin, 'point',
+ (Object extension) {
if (extension is! String) {
throw new ExtensionError('');
}
@@ -137,8 +128,8 @@
test('add - with validator - invalid', () {
Plugin plugin = new TestPlugin('plugin');
- ExtensionPointImpl point =
- new ExtensionPointImpl(plugin, 'point', (Object extension) {
+ ExtensionPointImpl point = new ExtensionPointImpl(plugin, 'point',
+ (Object extension) {
if (extension is! String) {
throw new ExtensionError('');
}
diff --git a/pkg/analysis_server/test/protocol_server_test.dart b/pkg/analysis_server/test/protocol_server_test.dart
index f806f50..8a3851b 100644
--- a/pkg/analysis_server/test/protocol_server_test.dart
+++ b/pkg/analysis_server/test/protocol_server_test.dart
@@ -20,8 +20,6 @@
import 'mocks.dart';
import 'reflective_tests.dart';
-
-
main() {
groupSep = ' | ';
runReflectiveTests(AnalysisErrorTest);
@@ -30,12 +28,10 @@
runReflectiveTests(EnumTest);
}
-
class AnalysisErrorMock extends TypedMock implements engine.AnalysisError {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
@reflectiveTest
class AnalysisErrorTest {
engine.Source source = new MockSource();
@@ -49,8 +45,8 @@
lineInfo = new engine.LineInfo([0, 5, 9, 20]);
// prepare AnalysisError
when(engineError.source).thenReturn(source);
- when(
- engineError.errorCode).thenReturn(engine.CompileTimeErrorCode.AMBIGUOUS_EXPORT);
+ when(engineError.errorCode)
+ .thenReturn(engine.CompileTimeErrorCode.AMBIGUOUS_EXPORT);
when(engineError.message).thenReturn('my message');
when(engineError.offset).thenReturn(10);
when(engineError.length).thenReturn(20);
@@ -114,92 +110,67 @@
}
}
-
@reflectiveTest
class ElementKindTest {
void test_fromEngine() {
expect(
- newElementKind_fromEngine(engine.ElementKind.CLASS),
- ElementKind.CLASS);
- expect(
- newElementKind_fromEngine(engine.ElementKind.COMPILATION_UNIT),
+ newElementKind_fromEngine(engine.ElementKind.CLASS), ElementKind.CLASS);
+ expect(newElementKind_fromEngine(engine.ElementKind.COMPILATION_UNIT),
ElementKind.COMPILATION_UNIT);
- expect(
- newElementKind_fromEngine(engine.ElementKind.CONSTRUCTOR),
+ expect(newElementKind_fromEngine(engine.ElementKind.CONSTRUCTOR),
ElementKind.CONSTRUCTOR);
expect(
- newElementKind_fromEngine(engine.ElementKind.FIELD),
- ElementKind.FIELD);
- expect(
- newElementKind_fromEngine(engine.ElementKind.FUNCTION),
+ newElementKind_fromEngine(engine.ElementKind.FIELD), ElementKind.FIELD);
+ expect(newElementKind_fromEngine(engine.ElementKind.FUNCTION),
ElementKind.FUNCTION);
- expect(
- newElementKind_fromEngine(engine.ElementKind.FUNCTION_TYPE_ALIAS),
+ expect(newElementKind_fromEngine(engine.ElementKind.FUNCTION_TYPE_ALIAS),
ElementKind.FUNCTION_TYPE_ALIAS);
- expect(
- newElementKind_fromEngine(engine.ElementKind.GETTER),
+ expect(newElementKind_fromEngine(engine.ElementKind.GETTER),
ElementKind.GETTER);
expect(
- newElementKind_fromEngine(engine.ElementKind.LABEL),
- ElementKind.LABEL);
- expect(
- newElementKind_fromEngine(engine.ElementKind.LIBRARY),
+ newElementKind_fromEngine(engine.ElementKind.LABEL), ElementKind.LABEL);
+ expect(newElementKind_fromEngine(engine.ElementKind.LIBRARY),
ElementKind.LIBRARY);
- expect(
- newElementKind_fromEngine(engine.ElementKind.LOCAL_VARIABLE),
+ expect(newElementKind_fromEngine(engine.ElementKind.LOCAL_VARIABLE),
ElementKind.LOCAL_VARIABLE);
- expect(
- newElementKind_fromEngine(engine.ElementKind.METHOD),
+ expect(newElementKind_fromEngine(engine.ElementKind.METHOD),
ElementKind.METHOD);
- expect(
- newElementKind_fromEngine(engine.ElementKind.PARAMETER),
+ expect(newElementKind_fromEngine(engine.ElementKind.PARAMETER),
ElementKind.PARAMETER);
- expect(
- newElementKind_fromEngine(engine.ElementKind.SETTER),
+ expect(newElementKind_fromEngine(engine.ElementKind.SETTER),
ElementKind.SETTER);
- expect(
- newElementKind_fromEngine(engine.ElementKind.TOP_LEVEL_VARIABLE),
+ expect(newElementKind_fromEngine(engine.ElementKind.TOP_LEVEL_VARIABLE),
ElementKind.TOP_LEVEL_VARIABLE);
- expect(
- newElementKind_fromEngine(engine.ElementKind.TYPE_PARAMETER),
+ expect(newElementKind_fromEngine(engine.ElementKind.TYPE_PARAMETER),
ElementKind.TYPE_PARAMETER);
}
void test_string_constructor() {
expect(new ElementKind(ElementKind.CLASS.name), ElementKind.CLASS);
- expect(
- new ElementKind(ElementKind.CLASS_TYPE_ALIAS.name),
+ expect(new ElementKind(ElementKind.CLASS_TYPE_ALIAS.name),
ElementKind.CLASS_TYPE_ALIAS);
- expect(
- new ElementKind(ElementKind.COMPILATION_UNIT.name),
+ expect(new ElementKind(ElementKind.COMPILATION_UNIT.name),
ElementKind.COMPILATION_UNIT);
expect(
- new ElementKind(ElementKind.CONSTRUCTOR.name),
- ElementKind.CONSTRUCTOR);
+ new ElementKind(ElementKind.CONSTRUCTOR.name), ElementKind.CONSTRUCTOR);
expect(new ElementKind(ElementKind.FIELD.name), ElementKind.FIELD);
expect(new ElementKind(ElementKind.FUNCTION.name), ElementKind.FUNCTION);
- expect(
- new ElementKind(ElementKind.FUNCTION_TYPE_ALIAS.name),
+ expect(new ElementKind(ElementKind.FUNCTION_TYPE_ALIAS.name),
ElementKind.FUNCTION_TYPE_ALIAS);
expect(new ElementKind(ElementKind.GETTER.name), ElementKind.GETTER);
expect(new ElementKind(ElementKind.LIBRARY.name), ElementKind.LIBRARY);
- expect(
- new ElementKind(ElementKind.LOCAL_VARIABLE.name),
+ expect(new ElementKind(ElementKind.LOCAL_VARIABLE.name),
ElementKind.LOCAL_VARIABLE);
expect(new ElementKind(ElementKind.METHOD.name), ElementKind.METHOD);
expect(new ElementKind(ElementKind.PARAMETER.name), ElementKind.PARAMETER);
expect(new ElementKind(ElementKind.SETTER.name), ElementKind.SETTER);
- expect(
- new ElementKind(ElementKind.TOP_LEVEL_VARIABLE.name),
+ expect(new ElementKind(ElementKind.TOP_LEVEL_VARIABLE.name),
ElementKind.TOP_LEVEL_VARIABLE);
- expect(
- new ElementKind(ElementKind.TYPE_PARAMETER.name),
+ expect(new ElementKind(ElementKind.TYPE_PARAMETER.name),
ElementKind.TYPE_PARAMETER);
- expect(
- new ElementKind(ElementKind.UNIT_TEST_TEST.name),
+ expect(new ElementKind(ElementKind.UNIT_TEST_TEST.name),
ElementKind.UNIT_TEST_TEST);
- expect(
- new ElementKind(ElementKind.UNIT_TEST_GROUP.name),
+ expect(new ElementKind(ElementKind.UNIT_TEST_GROUP.name),
ElementKind.UNIT_TEST_GROUP);
expect(new ElementKind(ElementKind.UNKNOWN.name), ElementKind.UNKNOWN);
expect(() {
@@ -209,13 +180,11 @@
void test_toString() {
expect(ElementKind.CLASS.toString(), 'ElementKind.CLASS');
- expect(
- ElementKind.COMPILATION_UNIT.toString(),
+ expect(ElementKind.COMPILATION_UNIT.toString(),
'ElementKind.COMPILATION_UNIT');
}
}
-
@reflectiveTest
class ElementTest extends AbstractContextTest {
engine.Element findElementInUnit(engine.CompilationUnit unit, String name,
@@ -242,8 +211,7 @@
expect(location.startColumn, 16);
}
expect(element.parameters, isNull);
- expect(
- element.flags,
+ expect(element.flags,
Element.FLAG_ABSTRACT | Element.FLAG_DEPRECATED | Element.FLAG_PRIVATE);
}
@@ -313,7 +281,8 @@
typedef int f(String x);
''');
engine.CompilationUnit unit = resolveLibraryUnit(source);
- engine.FunctionTypeAliasElement engineElement = findElementInUnit(unit, 'f');
+ engine.FunctionTypeAliasElement engineElement =
+ findElementInUnit(unit, 'f');
// create notification Element
Element element = newElement_fromEngine(engineElement);
expect(element.kind, ElementKind.FUNCTION_TYPE_ALIAS);
@@ -442,9 +411,7 @@
new EnumTester<engine.ErrorSeverity, AnalysisErrorSeverity>().run(
(engine.ErrorSeverity engineErrorSeverity) =>
new AnalysisErrorSeverity(engineErrorSeverity.name),
- exceptions: {
- engine.ErrorSeverity.NONE: null
- });
+ exceptions: {engine.ErrorSeverity.NONE: null});
}
void test_AnalysisErrorType() {
@@ -455,8 +422,7 @@
void test_ElementKind() {
new EnumTester<engine.ElementKind, ElementKind>().run(
- newElementKind_fromEngine,
- exceptions: {
+ newElementKind_fromEngine, exceptions: {
// TODO(paulberry): do any of the exceptions below constitute bugs?
engine.ElementKind.DYNAMIC: ElementKind.UNKNOWN,
engine.ElementKind.EMBEDDED_HTML_SCRIPT: ElementKind.UNKNOWN,
@@ -473,12 +439,11 @@
void test_SearchResultKind() {
// TODO(paulberry): why does the MatchKind class exist at all? Can't we
// use SearchResultKind inside the analysis server?
- new EnumTester<MatchKind, SearchResultKind>().run(
- newSearchResultKind_fromEngine);
+ new EnumTester<MatchKind, SearchResultKind>()
+ .run(newSearchResultKind_fromEngine);
}
}
-
/**
* Helper class for testing the correspondence between an analysis engine enum
* and an analysis server API enum.
@@ -492,8 +457,8 @@
* If the corresponding value is an [ApiEnum], then we check that converting
* the given key results in the given value.
*/
- void run(ApiEnum convert(EngineEnum value), {Map<EngineEnum,
- ApiEnum> exceptions: const {}}) {
+ void run(ApiEnum convert(EngineEnum value),
+ {Map<EngineEnum, ApiEnum> exceptions: const {}}) {
ClassMirror engineClass = reflectClass(EngineEnum);
engineClass.staticMembers.forEach((Symbol symbol, MethodMirror method) {
if (symbol == #values) {
diff --git a/pkg/analysis_server/test/protocol_test.dart b/pkg/analysis_server/test/protocol_test.dart
index bc4016e..3148cdf 100644
--- a/pkg/analysis_server/test/protocol_test.dart
+++ b/pkg/analysis_server/test/protocol_test.dart
@@ -12,10 +12,8 @@
import 'reflective_tests.dart';
-
Matcher _throwsRequestFailure = throwsA(new isInstanceOf<RequestFailure>());
-
main() {
groupSep = ' | ';
runReflectiveTests(NotificationTest);
@@ -24,7 +22,6 @@
runReflectiveTests(ResponseTest);
}
-
@reflectiveTest
class InvalidParameterResponseMatcher extends Matcher {
static const String ERROR_CODE = 'INVALID_PARAMETER';
@@ -53,7 +50,6 @@
}
}
-
@reflectiveTest
class NotificationTest {
void test_fromJson() {
@@ -64,43 +60,28 @@
}
void test_fromJson_withParams() {
- Notification original = new Notification('foo', {
- 'x': 'y'
- });
+ Notification original = new Notification('foo', {'x': 'y'});
Notification notification = new Notification.fromJson(original.toJson());
expect(notification.event, equals('foo'));
- expect(notification.toJson()['params'], equals({
- 'x': 'y'
- }));
+ expect(notification.toJson()['params'], equals({'x': 'y'}));
}
void test_toJson_noParams() {
Notification notification = new Notification('foo');
expect(notification.event, equals('foo'));
expect(notification.toJson().keys, isNot(contains('params')));
- expect(notification.toJson(), equals({
- 'event': 'foo'
- }));
+ expect(notification.toJson(), equals({'event': 'foo'}));
}
void test_toJson_withParams() {
- Notification notification = new Notification('foo', {
- 'x': 'y'
- });
+ Notification notification = new Notification('foo', {'x': 'y'});
expect(notification.event, equals('foo'));
- expect(notification.toJson()['params'], equals({
- 'x': 'y'
- }));
- expect(notification.toJson(), equals({
- 'event': 'foo',
- 'params': {
- 'x': 'y'
- }
- }));
+ expect(notification.toJson()['params'], equals({'x': 'y'}));
+ expect(
+ notification.toJson(), equals({'event': 'foo', 'params': {'x': 'y'}}));
}
}
-
@reflectiveTest
class RequestErrorTest {
void test_create() {
@@ -108,10 +89,7 @@
new RequestError(RequestErrorCode.INVALID_REQUEST, 'msg');
expect(error.code, RequestErrorCode.INVALID_REQUEST);
expect(error.message, "msg");
- expect(error.toJson(), equals({
- CODE: 'INVALID_REQUEST',
- MESSAGE: "msg"
- }));
+ expect(error.toJson(), equals({CODE: 'INVALID_REQUEST', MESSAGE: "msg"}));
}
void test_fromJson() {
@@ -130,17 +108,13 @@
void test_toJson() {
var trace = 'a stack trace\r\nbar';
- RequestError error =
- new RequestError(RequestErrorCode.UNKNOWN_REQUEST, 'msg', stackTrace: trace);
- expect(error.toJson(), {
- CODE: 'UNKNOWN_REQUEST',
- MESSAGE: 'msg',
- STACK_TRACE: trace
- });
+ RequestError error = new RequestError(
+ RequestErrorCode.UNKNOWN_REQUEST, 'msg', stackTrace: trace);
+ expect(error.toJson(),
+ {CODE: 'UNKNOWN_REQUEST', MESSAGE: 'msg', STACK_TRACE: trace});
}
}
-
@reflectiveTest
class RequestTest {
void test_fromJson() {
@@ -192,41 +166,30 @@
}
void test_fromJson_withParams() {
- Request original = new Request('one', 'aMethod', {
- 'foo': 'bar'
- });
+ Request original = new Request('one', 'aMethod', {'foo': 'bar'});
String json = JSON.encode(original.toJson());
Request request = new Request.fromString(json);
expect(request.id, equals('one'));
expect(request.method, equals('aMethod'));
- expect(request.toJson()['params'], equals({
- 'foo': 'bar'
- }));
+ expect(request.toJson()['params'], equals({'foo': 'bar'}));
}
void test_toJson() {
Request request = new Request('one', 'aMethod');
- expect(request.toJson(), equals({
- Request.ID: 'one',
- Request.METHOD: 'aMethod'
- }));
+ expect(request.toJson(),
+ equals({Request.ID: 'one', Request.METHOD: 'aMethod'}));
}
void test_toJson_withParams() {
- Request request = new Request('one', 'aMethod', {
- 'foo': 'bar'
- });
+ Request request = new Request('one', 'aMethod', {'foo': 'bar'});
expect(request.toJson(), equals({
Request.ID: 'one',
Request.METHOD: 'aMethod',
- Request.PARAMS: {
- 'foo': 'bar'
- }
+ Request.PARAMS: {'foo': 'bar'}
}));
}
}
-
@reflectiveTest
class ResponseTest {
void test_create_invalidRequestFormat() {
@@ -235,10 +198,7 @@
expect(response.error, isNotNull);
expect(response.toJson(), equals({
Response.ID: '',
- Response.ERROR: {
- 'code': 'INVALID_REQUEST',
- 'message': 'Invalid request'
- }
+ Response.ERROR: {'code': 'INVALID_REQUEST', 'message': 'Invalid request'}
}));
}
@@ -261,10 +221,7 @@
expect(response.error, isNotNull);
expect(response.toJson(), equals({
Response.ID: '0',
- Response.ERROR: {
- 'code': 'UNKNOWN_REQUEST',
- 'message': 'Unknown request'
- }
+ Response.ERROR: {'code': 'UNKNOWN_REQUEST', 'message': 'Unknown request'}
}));
}
@@ -285,9 +242,7 @@
}
void test_fromJson_withResult() {
- Response original = new Response('myId', result: {
- 'foo': 'bar'
- });
+ Response original = new Response('myId', result: {'foo': 'bar'});
Response response = new Response.fromJson(original.toJson());
expect(response.id, equals('myId'));
Map<String, Object> result = response.toJson()['result'];
diff --git a/pkg/analysis_server/test/reflective_tests.dart b/pkg/analysis_server/test/reflective_tests.dart
index 80c9073..f421e6c 100644
--- a/pkg/analysis_server/test/reflective_tests.dart
+++ b/pkg/analysis_server/test/reflective_tests.dart
@@ -10,7 +10,6 @@
import 'package:unittest/unittest.dart';
-
/**
* Runs test methods existing in the given [type].
*
@@ -29,13 +28,11 @@
*/
void runReflectiveTests(Type type) {
ClassMirror classMirror = reflectClass(type);
- if (!classMirror.metadata.any(
- (InstanceMirror annotation) =>
- annotation.type.reflectedType == ReflectiveTest)) {
+ if (!classMirror.metadata.any((InstanceMirror annotation) =>
+ annotation.type.reflectedType == ReflectiveTest)) {
String name = MirrorSystem.getName(classMirror.qualifiedName);
- throw new Exception(
- 'Class $name must have annotation "@reflectiveTest" '
- 'in order to be run by runReflectiveTests.');
+ throw new Exception('Class $name must have annotation "@reflectiveTest" '
+ 'in order to be run by runReflectiveTests.');
}
String className = MirrorSystem.getName(classMirror.simpleName);
group(className, () {
@@ -74,13 +71,11 @@
});
}
-
Future _invokeSymbolIfExists(InstanceMirror instanceMirror, Symbol symbol) {
var invocationResult = null;
try {
invocationResult = instanceMirror.invoke(symbol, []).reflectee;
- } on NoSuchMethodError catch (e) {
- }
+ } on NoSuchMethodError catch (e) {}
if (invocationResult is Future) {
return invocationResult;
} else {
@@ -88,7 +83,6 @@
}
}
-
/**
* Run a test that is expected to fail, and confirm that it fails.
*
@@ -105,21 +99,13 @@
}, onError: (_) {});
}
-
_runTest(ClassMirror classMirror, Symbol symbol) {
InstanceMirror instanceMirror = classMirror.newInstance(new Symbol(''), []);
- return _invokeSymbolIfExists(
- instanceMirror,
- #setUp).then(
- (_) =>
- instanceMirror.invoke(
- symbol,
- [
- ]).reflectee).whenComplete(
- () => _invokeSymbolIfExists(instanceMirror, #tearDown));
+ return _invokeSymbolIfExists(instanceMirror, #setUp)
+ .then((_) => instanceMirror.invoke(symbol, []).reflectee)
+ .whenComplete(() => _invokeSymbolIfExists(instanceMirror, #tearDown));
}
-
/**
* A marker annotation used to instruct dart2js to keep reflection information
* for the annotated classes.
diff --git a/pkg/analysis_server/test/search/abstract_search_domain.dart b/pkg/analysis_server/test/search/abstract_search_domain.dart
index 11a84aa..90f7d47 100644
--- a/pkg/analysis_server/test/search/abstract_search_domain.dart
+++ b/pkg/analysis_server/test/search/abstract_search_domain.dart
@@ -15,7 +15,6 @@
import '../analysis_abstract.dart';
-
class AbstractSearchDomainTest extends AbstractAnalysisTest {
final Map<String, _ResultSet> resultSets = {};
String searchId;
@@ -103,7 +102,6 @@
}
}
-
class _ResultSet {
final String id;
final List<SearchResult> results = <SearchResult>[];
diff --git a/pkg/analysis_server/test/search/element_references_test.dart b/pkg/analysis_server/test/search/element_references_test.dart
index 7bcba7b..bf27ea8 100644
--- a/pkg/analysis_server/test/search/element_references_test.dart
+++ b/pkg/analysis_server/test/search/element_references_test.dart
@@ -13,14 +13,12 @@
import '../reflective_tests.dart';
import 'abstract_search_domain.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(ElementReferencesTest);
runReflectiveTests(_NoSearchEngine);
}
-
@reflectiveTest
class ElementReferencesTest extends AbstractSearchDomainTest {
Element searchElement;
@@ -34,9 +32,7 @@
int offset = findOffset(search);
await waitForTasksFinished();
Request request = new SearchFindElementReferencesParams(
- testFile,
- offset,
- includePotential).toRequest('0');
+ testFile, offset, includePotential).toRequest('0');
Response response = await waitResponse(request);
var result = new SearchFindElementReferencesResult.fromResponse(response);
searchId = result.id;
@@ -409,17 +405,9 @@
expect(searchElement.kind, ElementKind.FUNCTION);
expect(results, hasLength(2));
findResult(
- SearchResultKind.INVOCATION,
- pathA,
- codeA.indexOf('fff(1)'),
- 3,
- true);
+ SearchResultKind.INVOCATION, pathA, codeA.indexOf('fff(1)'), 3, true);
findResult(
- SearchResultKind.INVOCATION,
- pathB,
- codeB.indexOf('fff(2)'),
- 3,
- true);
+ SearchResultKind.INVOCATION, pathB, codeB.indexOf('fff(2)'), 3, true);
}
test_oneUnit_zeroLibraries() async {
@@ -709,7 +697,6 @@
}
}
-
@reflectiveTest
class _NoSearchEngine extends AbstractSearchDomainTest {
@override
@@ -724,8 +711,8 @@
print(vvv);
}
''');
- Request request =
- new SearchFindElementReferencesParams(testFile, 0, false).toRequest('0');
+ Request request = new SearchFindElementReferencesParams(testFile, 0, false)
+ .toRequest('0');
Response response = await waitResponse(request);
expect(response.error, isNotNull);
expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED);
diff --git a/pkg/analysis_server/test/search/member_declarations_test.dart b/pkg/analysis_server/test/search/member_declarations_test.dart
index 2c379d0..f1b9391 100644
--- a/pkg/analysis_server/test/search/member_declarations_test.dart
+++ b/pkg/analysis_server/test/search/member_declarations_test.dart
@@ -12,13 +12,11 @@
import '../reflective_tests.dart';
import 'abstract_search_domain.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(MemberDeclarationsTest);
}
-
@reflectiveTest
class MemberDeclarationsTest extends AbstractSearchDomainTest {
void assertHasDeclaration(ElementKind kind, String className) {
diff --git a/pkg/analysis_server/test/search/member_references_test.dart b/pkg/analysis_server/test/search/member_references_test.dart
index 9f34375..9c5c79a 100644
--- a/pkg/analysis_server/test/search/member_references_test.dart
+++ b/pkg/analysis_server/test/search/member_references_test.dart
@@ -12,13 +12,11 @@
import '../reflective_tests.dart';
import 'abstract_search_domain.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(MemberReferencesTest);
}
-
@reflectiveTest
class MemberReferencesTest extends AbstractSearchDomainTest {
void assertHasRef(SearchResultKind kind, String search, bool isPotential) {
diff --git a/pkg/analysis_server/test/search/search_result_test.dart b/pkg/analysis_server/test/search/search_result_test.dart
index 74dc0d5..a4cd492 100644
--- a/pkg/analysis_server/test/search/search_result_test.dart
+++ b/pkg/analysis_server/test/search/search_result_test.dart
@@ -10,64 +10,48 @@
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(SearchResultKindTest);
}
-
@reflectiveTest
class SearchResultKindTest {
void test_fromEngine() {
- expect(
- newSearchResultKind_fromEngine(MatchKind.DECLARATION),
+ expect(newSearchResultKind_fromEngine(MatchKind.DECLARATION),
SearchResultKind.DECLARATION);
expect(
- newSearchResultKind_fromEngine(MatchKind.READ),
- SearchResultKind.READ);
- expect(
- newSearchResultKind_fromEngine(MatchKind.READ_WRITE),
+ newSearchResultKind_fromEngine(MatchKind.READ), SearchResultKind.READ);
+ expect(newSearchResultKind_fromEngine(MatchKind.READ_WRITE),
SearchResultKind.READ_WRITE);
- expect(
- newSearchResultKind_fromEngine(MatchKind.WRITE),
+ expect(newSearchResultKind_fromEngine(MatchKind.WRITE),
SearchResultKind.WRITE);
- expect(
- newSearchResultKind_fromEngine(MatchKind.REFERENCE),
+ expect(newSearchResultKind_fromEngine(MatchKind.REFERENCE),
SearchResultKind.REFERENCE);
- expect(
- newSearchResultKind_fromEngine(MatchKind.INVOCATION),
+ expect(newSearchResultKind_fromEngine(MatchKind.INVOCATION),
SearchResultKind.INVOCATION);
expect(newSearchResultKind_fromEngine(null), SearchResultKind.UNKNOWN);
}
void test_fromName() {
- expect(
- new SearchResultKind(SearchResultKind.DECLARATION.name),
+ expect(new SearchResultKind(SearchResultKind.DECLARATION.name),
SearchResultKind.DECLARATION);
- expect(
- new SearchResultKind(SearchResultKind.READ.name),
+ expect(new SearchResultKind(SearchResultKind.READ.name),
SearchResultKind.READ);
- expect(
- new SearchResultKind(SearchResultKind.READ_WRITE.name),
+ expect(new SearchResultKind(SearchResultKind.READ_WRITE.name),
SearchResultKind.READ_WRITE);
- expect(
- new SearchResultKind(SearchResultKind.WRITE.name),
+ expect(new SearchResultKind(SearchResultKind.WRITE.name),
SearchResultKind.WRITE);
- expect(
- new SearchResultKind(SearchResultKind.REFERENCE.name),
+ expect(new SearchResultKind(SearchResultKind.REFERENCE.name),
SearchResultKind.REFERENCE);
- expect(
- new SearchResultKind(SearchResultKind.INVOCATION.name),
+ expect(new SearchResultKind(SearchResultKind.INVOCATION.name),
SearchResultKind.INVOCATION);
- expect(
- new SearchResultKind(SearchResultKind.UNKNOWN.name),
+ expect(new SearchResultKind(SearchResultKind.UNKNOWN.name),
SearchResultKind.UNKNOWN);
}
void test_toString() {
- expect(
- SearchResultKind.DECLARATION.toString(),
+ expect(SearchResultKind.DECLARATION.toString(),
'SearchResultKind.DECLARATION');
}
}
diff --git a/pkg/analysis_server/test/search/top_level_declarations_test.dart b/pkg/analysis_server/test/search/top_level_declarations_test.dart
index a2d4cf0..a09a819 100644
--- a/pkg/analysis_server/test/search/top_level_declarations_test.dart
+++ b/pkg/analysis_server/test/search/top_level_declarations_test.dart
@@ -12,13 +12,11 @@
import '../reflective_tests.dart';
import 'abstract_search_domain.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(TopLevelDeclarationsTest);
}
-
@reflectiveTest
class TopLevelDeclarationsTest extends AbstractSearchDomainTest {
void assertHasDeclaration(ElementKind kind, String name) {
diff --git a/pkg/analysis_server/test/search/type_hierarchy_test.dart b/pkg/analysis_server/test/search/type_hierarchy_test.dart
index e799f37..5aba67c 100644
--- a/pkg/analysis_server/test/search/type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/search/type_hierarchy_test.dart
@@ -15,13 +15,11 @@
import '../analysis_abstract.dart';
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(GetTypeHierarchyTest);
}
-
@reflectiveTest
class GetTypeHierarchyTest extends AbstractAnalysisTest {
static const String requestId = 'test-getTypeHierarchy';
@@ -65,7 +63,8 @@
}
''');
List<TypeHierarchyItem> items = await _getTypeHierarchy('B extends A');
- expect(_toJson(items), [{
+ expect(_toJson(items), [
+ {
'classElement': {
'kind': 'CLASS',
'name': 'B',
@@ -76,7 +75,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'A',
@@ -87,7 +87,8 @@
'interfaces': [],
'mixins': [],
'subclasses': [1]
- }]);
+ }
+ ]);
}
test_class_displayName() async {
@@ -113,8 +114,9 @@
class A {}
class B extends A {}
''');
- packageMapProvider.packageMap['pkgA'] =
- [resourceProvider.getResource('/packages/pkgA')];
+ packageMapProvider.packageMap['pkgA'] = [
+ resourceProvider.getResource('/packages/pkgA')
+ ];
// reference the package from a project
addTestFile('''
import 'package:pkgA/libA.dart';
@@ -122,8 +124,7 @@
''');
// configure roots
Request request = new AnalysisSetAnalysisRootsParams(
- [projectPath, '/packages/pkgA'],
- []).toRequest('0');
+ [projectPath, '/packages/pkgA'], []).toRequest('0');
handleSuccessfulRequest(request);
// test A type hierarchy
List<TypeHierarchyItem> items = await _getTypeHierarchy('A {}');
@@ -142,7 +143,8 @@
}
''');
List<TypeHierarchyItem> items = await _getTypeHierarchy('A {}');
- expect(_toJson(items), [{
+ expect(_toJson(items), [
+ {
'classElement': {
'kind': 'CLASS',
'name': 'A',
@@ -153,7 +155,8 @@
'interfaces': [],
'mixins': [],
'subclasses': [2]
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'Object',
@@ -163,7 +166,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'B',
@@ -174,7 +178,8 @@
'interfaces': [],
'mixins': [],
'subclasses': [3]
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'C',
@@ -185,7 +190,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }]);
+ }
+ ]);
}
test_class_extendsTypeB() async {
@@ -198,7 +204,8 @@
}
''');
List<TypeHierarchyItem> items = await _getTypeHierarchy('B extends');
- expect(_toJson(items), [{
+ expect(_toJson(items), [
+ {
'classElement': {
'kind': 'CLASS',
'name': 'B',
@@ -209,7 +216,8 @@
'interfaces': [],
'mixins': [],
'subclasses': [3]
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'A',
@@ -220,7 +228,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'Object',
@@ -230,7 +239,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'C',
@@ -241,7 +251,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }]);
+ }
+ ]);
}
test_class_extendsTypeC() async {
@@ -254,7 +265,8 @@
}
''');
List<TypeHierarchyItem> items = await _getTypeHierarchy('C extends');
- expect(_toJson(items), [{
+ expect(_toJson(items), [
+ {
'classElement': {
'kind': 'CLASS',
'name': 'C',
@@ -265,7 +277,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'B',
@@ -276,7 +289,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'A',
@@ -287,7 +301,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'Object',
@@ -297,7 +312,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }]);
+ }
+ ]);
}
test_class_implementsTypes() async {
@@ -310,7 +326,8 @@
}
''');
List<TypeHierarchyItem> items = await _getTypeHierarchy('T implements');
- expect(_toJson(items), [{
+ expect(_toJson(items), [
+ {
'classElement': {
'kind': 'CLASS',
'name': 'T',
@@ -321,7 +338,8 @@
'interfaces': [2, 3],
'mixins': [],
'subclasses': []
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'Object',
@@ -331,7 +349,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'MA',
@@ -342,7 +361,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'MB',
@@ -353,7 +373,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }]);
+ }
+ ]);
}
test_class_withTypes() async {
@@ -366,7 +387,8 @@
}
''');
List<TypeHierarchyItem> items = await _getTypeHierarchy('T extends Object');
- expect(_toJson(items), [{
+ expect(_toJson(items), [
+ {
'classElement': {
'kind': 'CLASS',
'name': 'T',
@@ -377,7 +399,8 @@
'interfaces': [],
'mixins': [2, 3],
'subclasses': []
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'Object',
@@ -387,7 +410,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'MA',
@@ -398,7 +422,8 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }, {
+ },
+ {
'classElement': {
'kind': 'CLASS',
'name': 'MB',
@@ -409,7 +434,140 @@
'interfaces': [],
'mixins': [],
'subclasses': []
- }]);
+ }
+ ]);
+ }
+
+ test_fromField_toMixinGetter() async {
+ addTestFile('''
+abstract class A {
+ var test = 1;
+}
+class Mixin {
+ get test => 2;
+}
+class B extends A with Mixin {}
+''');
+ List<TypeHierarchyItem> items = await _getTypeHierarchy('test = 1;');
+ var itemA = items.firstWhere((e) => e.classElement.name == 'A');
+ var itemB = items.firstWhere((e) => e.classElement.name == 'B');
+ Element memberA = itemA.memberElement;
+ Element memberB = itemB.memberElement;
+ expect(memberA, isNotNull);
+ expect(memberB, isNotNull);
+ expect(memberA.location.offset, findOffset('test = 1;'));
+ expect(memberB.location.offset, findOffset('test => 2;'));
+ }
+
+ test_fromField_toMixinSetter() async {
+ addTestFile('''
+abstract class A {
+ var test = 1;
+}
+class Mixin {
+ set test(m) {}
+}
+class B extends A with Mixin {}
+''');
+ List<TypeHierarchyItem> items = await _getTypeHierarchy('test = 1;');
+ var itemA = items.firstWhere((e) => e.classElement.name == 'A');
+ var itemB = items.firstWhere((e) => e.classElement.name == 'B');
+ Element memberA = itemA.memberElement;
+ Element memberB = itemB.memberElement;
+ expect(memberA, isNotNull);
+ expect(memberB, isNotNull);
+ expect(memberA.location.offset, findOffset('test = 1;'));
+ expect(memberB.location.offset, findOffset('test(m) {}'));
+ }
+
+ test_member_fromField_toField() async {
+ addTestFile('''
+class A {
+ var test = 1;
+}
+class B extends A {
+ var test = 2;
+}
+''');
+ List<TypeHierarchyItem> items = await _getTypeHierarchy('test = 2;');
+ TypeHierarchyItem itemB = items[0];
+ TypeHierarchyItem itemA = items[itemB.superclass];
+ expect(itemA.classElement.name, 'A');
+ expect(itemB.classElement.name, 'B');
+ expect(itemA.memberElement.location.offset, findOffset('test = 1;'));
+ expect(itemB.memberElement.location.offset, findOffset('test = 2;'));
+ }
+
+ test_member_fromField_toGetter() async {
+ addTestFile('''
+class A {
+ get test => 1;
+}
+class B extends A {
+ var test = 2;
+}
+''');
+ List<TypeHierarchyItem> items = await _getTypeHierarchy('test = 2;');
+ TypeHierarchyItem itemB = items[0];
+ TypeHierarchyItem itemA = items[itemB.superclass];
+ expect(itemA.classElement.name, 'A');
+ expect(itemB.classElement.name, 'B');
+ expect(itemA.memberElement.location.offset, findOffset('test => 1'));
+ expect(itemB.memberElement.location.offset, findOffset('test = 2;'));
+ }
+
+ test_member_fromField_toSetter() async {
+ addTestFile('''
+class A {
+ set test(a) {}
+}
+class B extends A {
+ var test = 2;
+}
+''');
+ List<TypeHierarchyItem> items = await _getTypeHierarchy('test = 2;');
+ TypeHierarchyItem itemB = items[0];
+ TypeHierarchyItem itemA = items[itemB.superclass];
+ expect(itemA.classElement.name, 'A');
+ expect(itemB.classElement.name, 'B');
+ expect(itemA.memberElement.location.offset, findOffset('test(a) {}'));
+ expect(itemB.memberElement.location.offset, findOffset('test = 2;'));
+ }
+
+ test_member_fromFinalField_toGetter() async {
+ addTestFile('''
+class A {
+ get test => 1;
+}
+class B extends A {
+ final test = 2;
+}
+''');
+ List<TypeHierarchyItem> items = await _getTypeHierarchy('test = 2;');
+ TypeHierarchyItem itemB = items[0];
+ TypeHierarchyItem itemA = items[itemB.superclass];
+ expect(itemA.classElement.name, 'A');
+ expect(itemB.classElement.name, 'B');
+ expect(itemA.memberElement.location.offset, findOffset('test => 1;'));
+ expect(itemB.memberElement.location.offset, findOffset('test = 2;'));
+ }
+
+ test_member_fromFinalField_toSetter() async {
+ addTestFile('''
+class A {
+ set test(x) {}
+}
+class B extends A {
+ final test = 2;
+}
+''');
+ List<TypeHierarchyItem> items = await _getTypeHierarchy('test = 2;');
+ TypeHierarchyItem itemB = items[0];
+ TypeHierarchyItem itemA = items[itemB.superclass];
+ expect(itemA.classElement.name, 'A');
+ expect(itemB.classElement.name, 'B');
+ expect(itemA.memberElement, isNull);
+ expect(itemB.memberElement.location.offset, findOffset('test = 2;'));
}
test_member_getter() async {
@@ -436,15 +594,12 @@
expect(itemB.classElement.name, 'B');
expect(itemC.classElement.name, 'C');
expect(itemD.classElement.name, 'D');
- expect(
- itemA.memberElement.location.offset,
+ expect(itemA.memberElement.location.offset,
findOffset('test => null; // in A'));
- expect(
- itemB.memberElement.location.offset,
+ expect(itemB.memberElement.location.offset,
findOffset('test => null; // in B'));
expect(itemC.memberElement, isNull);
- expect(
- itemD.memberElement.location.offset,
+ expect(itemD.memberElement.location.offset,
findOffset('test => null; // in D'));
}
@@ -473,15 +628,98 @@
expect(itemC.classElement.name, 'C');
expect(itemD.classElement.name, 'D');
expect(
- itemA.memberElement.location.offset,
- findOffset('test() {} // in A'));
+ itemA.memberElement.location.offset, findOffset('test() {} // in A'));
expect(
- itemB.memberElement.location.offset,
- findOffset('test() {} // in B'));
+ itemB.memberElement.location.offset, findOffset('test() {} // in B'));
expect(itemC.memberElement, isNull);
expect(
- itemD.memberElement.location.offset,
- findOffset('test() {} // in D'));
+ itemD.memberElement.location.offset, findOffset('test() {} // in D'));
+ }
+
+ test_member_ofMixin_getter() async {
+ addTestFile('''
+abstract class Base {
+ get test; // in Base
+}
+class Mixin {
+ get test => null; // in Mixin
+}
+class Derived1 extends Base with Mixin {}
+class Derived2 extends Base {
+ get test => null; // in Derived2
+}
+''');
+ List<TypeHierarchyItem> items = await _getTypeHierarchy('test; // in Base');
+ var itemBase = items.firstWhere((e) => e.classElement.name == 'Base');
+ var item1 = items.firstWhere((e) => e.classElement.name == 'Derived1');
+ var item2 = items.firstWhere((e) => e.classElement.name == 'Derived2');
+ Element memberBase = itemBase.memberElement;
+ Element member1 = item1.memberElement;
+ Element member2 = item2.memberElement;
+ expect(memberBase, isNotNull);
+ expect(member1, isNotNull);
+ expect(member2, isNotNull);
+ expect(memberBase.location.offset, findOffset('test; // in Base'));
+ expect(member1.location.offset, findOffset('test => null; // in Mixin'));
+ expect(member2.location.offset, findOffset('test => null; // in Derived2'));
+ }
+
+ test_member_ofMixin_method() async {
+ addTestFile('''
+abstract class Base {
+ void test(); // in Base
+}
+class Mixin {
+ void test() {} // in Mixin
+}
+class Derived1 extends Base with Mixin {}
+class Derived2 extends Base {
+ void test() {} // in Derived2
+}
+''');
+ List<TypeHierarchyItem> items =
+ await _getTypeHierarchy('test(); // in Base');
+ var itemBase = items.firstWhere((e) => e.classElement.name == 'Base');
+ var item1 = items.firstWhere((e) => e.classElement.name == 'Derived1');
+ var item2 = items.firstWhere((e) => e.classElement.name == 'Derived2');
+ Element memberBase = itemBase.memberElement;
+ Element member1 = item1.memberElement;
+ Element member2 = item2.memberElement;
+ expect(memberBase, isNotNull);
+ expect(member1, isNotNull);
+ expect(member2, isNotNull);
+ expect(memberBase.location.offset, findOffset('test(); // in Base'));
+ expect(member1.location.offset, findOffset('test() {} // in Mixin'));
+ expect(member2.location.offset, findOffset('test() {} // in Derived2'));
+ }
+
+ test_member_ofMixin_setter() async {
+ addTestFile('''
+abstract class Base {
+ set test(x); // in Base
+}
+class Mixin {
+ set test(x) {} // in Mixin
+}
+class Derived1 extends Base with Mixin {}
+class Derived2 extends Base {
+ set test(x) {} // in Derived2
+}
+''');
+ List<TypeHierarchyItem> items =
+ await _getTypeHierarchy('test(x); // in Base');
+ var itemBase = items.firstWhere((e) => e.classElement.name == 'Base');
+ var item1 = items.firstWhere((e) => e.classElement.name == 'Derived1');
+ var item2 = items.firstWhere((e) => e.classElement.name == 'Derived2');
+ Element memberBase = itemBase.memberElement;
+ Element member1 = item1.memberElement;
+ Element member2 = item2.memberElement;
+ expect(memberBase, isNotNull);
+ expect(member1, isNotNull);
+ expect(member2, isNotNull);
+ expect(memberBase.location.offset, findOffset('test(x); // in Base'));
+ expect(member1.location.offset, findOffset('test(x) {} // in Mixin'));
+ expect(member2.location.offset, findOffset('test(x) {} // in Derived2'));
}
test_member_operator() async {
@@ -508,15 +746,12 @@
expect(itemB.classElement.name, 'B');
expect(itemC.classElement.name, 'C');
expect(itemD.classElement.name, 'D');
- expect(
- itemA.memberElement.location.offset,
+ expect(itemA.memberElement.location.offset,
findOffset('==(x) => null; // in A'));
- expect(
- itemB.memberElement.location.offset,
+ expect(itemB.memberElement.location.offset,
findOffset('==(x) => null; // in B'));
expect(itemC.memberElement, isNull);
- expect(
- itemD.memberElement.location.offset,
+ expect(itemD.memberElement.location.offset,
findOffset('==(x) => null; // in D'));
}
@@ -545,21 +780,17 @@
expect(itemC.classElement.name, 'C');
expect(itemD.classElement.name, 'D');
expect(
- itemA.memberElement.location.offset,
- findOffset('test(x) {} // in A'));
+ itemA.memberElement.location.offset, findOffset('test(x) {} // in A'));
expect(
- itemB.memberElement.location.offset,
- findOffset('test(x) {} // in B'));
+ itemB.memberElement.location.offset, findOffset('test(x) {} // in B'));
expect(itemC.memberElement, isNull);
expect(
- itemD.memberElement.location.offset,
- findOffset('test(x) {} // in D'));
+ itemD.memberElement.location.offset, findOffset('test(x) {} // in D'));
}
Request _createGetTypeHierarchyRequest(String search) {
- return new SearchGetTypeHierarchyParams(
- testFile,
- findOffset(search)).toRequest(requestId);
+ return new SearchGetTypeHierarchyParams(testFile, findOffset(search))
+ .toRequest(requestId);
}
Future<List<TypeHierarchyItem>> _getTypeHierarchy(String search) async {
diff --git a/pkg/analysis_server/test/services/completion/arglist_computer_test.dart b/pkg/analysis_server/test/services/completion/arglist_computer_test.dart
index d200d08..67e3814 100644
--- a/pkg/analysis_server/test/services/completion/arglist_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/arglist_computer_test.dart
@@ -18,7 +18,6 @@
@reflectiveTest
class ArgListComputerTest extends AbstractCompletionTest {
-
@override
void setUpComputer() {
computer = new ArgListComputer();
diff --git a/pkg/analysis_server/test/services/completion/combinator_computer_test.dart b/pkg/analysis_server/test/services/completion/combinator_computer_test.dart
index 4db0ad3..8e70f1c 100644
--- a/pkg/analysis_server/test/services/completion/combinator_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/combinator_computer_test.dart
@@ -19,7 +19,6 @@
@reflectiveTest
class CombinatorComputerTest extends AbstractCompletionTest {
-
@override
void setUpComputer() {
computer = new CombinatorComputer();
@@ -60,29 +59,19 @@
class X {}''');
computeFast();
return computeFull((bool result) {
- assertSuggestClass(
- 'A',
+ assertSuggestClass('A',
relevance: DART_RELEVANCE_DEFAULT,
kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestClass(
- 'B',
+ assertSuggestClass('B',
relevance: DART_RELEVANCE_DEFAULT,
kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestClass(
- 'PB',
+ assertSuggestClass('PB',
relevance: DART_RELEVANCE_DEFAULT,
kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestTopLevelVar(
- 'T1',
- null,
- DART_RELEVANCE_DEFAULT,
- CompletionSuggestionKind.IDENTIFIER);
- assertSuggestFunction(
- 'F1',
- 'PB',
- false,
- DART_RELEVANCE_DEFAULT,
- CompletionSuggestionKind.IDENTIFIER);
+ assertSuggestTopLevelVar('T1', null,
+ DART_RELEVANCE_DEFAULT, CompletionSuggestionKind.IDENTIFIER);
+ assertSuggestFunction('F1', 'PB', false,
+ DART_RELEVANCE_DEFAULT, CompletionSuggestionKind.IDENTIFIER);
assertNotSuggested('C');
assertNotSuggested('D');
assertNotSuggested('X');
@@ -113,39 +102,24 @@
class X {}''');
computeFast();
return computeFull((bool result) {
- assertSuggestClass(
- 'A',
+ assertSuggestClass('A',
relevance: DART_RELEVANCE_DEFAULT,
kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestClass(
- 'B',
+ assertSuggestClass('B',
relevance: DART_RELEVANCE_DEFAULT,
kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestClass(
- 'PB',
+ assertSuggestClass('PB',
relevance: DART_RELEVANCE_DEFAULT,
kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestTopLevelVar(
- 'T1',
- null,
- DART_RELEVANCE_DEFAULT,
- CompletionSuggestionKind.IDENTIFIER);
- assertSuggestFunction(
- 'F1',
- 'PB',
- false,
- DART_RELEVANCE_DEFAULT,
- CompletionSuggestionKind.IDENTIFIER);
- assertSuggestClass(
- 'Clz',
+ assertSuggestTopLevelVar('T1', null,
+ DART_RELEVANCE_DEFAULT, CompletionSuggestionKind.IDENTIFIER);
+ assertSuggestFunction('F1', 'PB', false,
+ DART_RELEVANCE_DEFAULT, CompletionSuggestionKind.IDENTIFIER);
+ assertSuggestClass('Clz',
relevance: DART_RELEVANCE_DEFAULT,
kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestFunctionTypeAlias(
- 'F2',
- null,
- false,
- DART_RELEVANCE_DEFAULT,
- CompletionSuggestionKind.IDENTIFIER);
+ assertSuggestFunctionTypeAlias('F2', null,
+ false, DART_RELEVANCE_DEFAULT, CompletionSuggestionKind.IDENTIFIER);
assertNotSuggested('C');
assertNotSuggested('D');
assertNotSuggested('X');
diff --git a/pkg/analysis_server/test/services/completion/common_usage_computer_test.dart b/pkg/analysis_server/test/services/completion/common_usage_computer_test.dart
index 039911c..5f2354d 100644
--- a/pkg/analysis_server/test/services/completion/common_usage_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/common_usage_computer_test.dart
@@ -41,9 +41,8 @@
expect(completionOffset, isNot(equals(-1)), reason: 'missing ^');
int nextOffset = content.indexOf('^', completionOffset + 1);
expect(nextOffset, equals(-1), reason: 'too many ^');
- return super.addTestFile(
- content.substring(0, completionOffset) +
- content.substring(completionOffset + 1));
+ return super.addTestFile(content.substring(0, completionOffset) +
+ content.substring(completionOffset + 1));
}
void assertHasResult(CompletionSuggestionKind kind, String completion,
@@ -97,13 +96,9 @@
AnalysisContext context = server.getAnalysisContext(params.file);
Source source = server.getSource(params.file);
- DartCompletionManager completionManager = new DartCompletionManager(
- context,
- server.searchEngine,
- source,
- new DartCompletionCache(context, source),
- null,
- new CommonUsageComputer(selectorRelevance));
+ DartCompletionManager completionManager = new DartCompletionManager(context,
+ server.searchEngine, source, new DartCompletionCache(context, source),
+ null, new CommonUsageComputer(selectorRelevance));
Response response =
domainHandler.processRequest(request, completionManager);
@@ -139,16 +134,12 @@
test_ConstructorName() async {
// SimpleIdentifier ConstructorName InstanceCreationExpression
addTestFile('import "dart:async"; class A {x() {new Future.^}}');
- await getSuggestions({
- 'dart.async.Future': ['value', 'wait']
- });
+ await getSuggestions({'dart.async.Future': ['value', 'wait']});
expect(replacementOffset, equals(completionOffset));
expect(replacementLength, equals(0));
assertHasResult(CompletionSuggestionKind.INVOCATION, 'delayed');
- assertHasResult(
- CompletionSuggestionKind.INVOCATION,
- 'value',
- DART_RELEVANCE_COMMON_USAGE);
+ assertHasResult(CompletionSuggestionKind.INVOCATION,
+ 'value', DART_RELEVANCE_COMMON_USAGE);
assertNoResult('Future');
assertNoResult('Object');
assertNoResult('A');
@@ -157,16 +148,12 @@
test_PrefixedIdentifier_field() async {
// SimpleIdentifier PrefixedIdentifeir ExpressionStatement
addTestFile('class A {static int s1; static int s2; x() {A.^}}');
- await getSuggestions({
- '.A': ['s2']
- });
+ await getSuggestions({'.A': ['s2']});
expect(replacementOffset, equals(completionOffset));
expect(replacementLength, equals(0));
assertHasResult(CompletionSuggestionKind.INVOCATION, 's1');
assertHasResult(
- CompletionSuggestionKind.INVOCATION,
- 's2',
- DART_RELEVANCE_COMMON_USAGE);
+ CompletionSuggestionKind.INVOCATION, 's2', DART_RELEVANCE_COMMON_USAGE);
assertNoResult('Future');
assertNoResult('Object');
assertNoResult('A');
@@ -175,16 +162,12 @@
test_PrefixedIdentifier_getter() async {
// SimpleIdentifier PrefixedIdentifeir ExpressionStatement
addTestFile('class A {int get g1 => 1; int get g2 => 2; x() {new A().^}}');
- await getSuggestions({
- '.A': ['g2']
- });
+ await getSuggestions({'.A': ['g2']});
expect(replacementOffset, equals(completionOffset));
expect(replacementLength, equals(0));
assertHasResult(CompletionSuggestionKind.INVOCATION, 'g1');
assertHasResult(
- CompletionSuggestionKind.INVOCATION,
- 'g2',
- DART_RELEVANCE_COMMON_USAGE);
+ CompletionSuggestionKind.INVOCATION, 'g2', DART_RELEVANCE_COMMON_USAGE);
assertNoResult('Future');
assertNoResult('Object');
assertNoResult('A');
@@ -193,16 +176,12 @@
test_PrefixedIdentifier_setter() async {
// SimpleIdentifier PrefixedIdentifeir ExpressionStatement
addTestFile('class A {set s1(v) {}; set s2(v) {}; x() {new A().^}}');
- await getSuggestions({
- '.A': ['s2']
- });
+ await getSuggestions({'.A': ['s2']});
expect(replacementOffset, equals(completionOffset));
expect(replacementLength, equals(0));
assertHasResult(CompletionSuggestionKind.INVOCATION, 's1');
assertHasResult(
- CompletionSuggestionKind.INVOCATION,
- 's2',
- DART_RELEVANCE_COMMON_USAGE);
+ CompletionSuggestionKind.INVOCATION, 's2', DART_RELEVANCE_COMMON_USAGE);
assertNoResult('Future');
assertNoResult('Object');
assertNoResult('A');
@@ -211,14 +190,10 @@
test_PrefixedIdentifier_static_method() async {
// SimpleIdentifier PrefixedIdentifeir ExpressionStatement
addTestFile('import "dart:async"; class A {x() {Future.^}}');
- await getSuggestions({
- 'dart.async.Future': ['value', 'wait']
- });
+ await getSuggestions({'dart.async.Future': ['value', 'wait']});
expect(replacementOffset, equals(completionOffset));
expect(replacementLength, equals(0));
- assertHasResult(
- CompletionSuggestionKind.INVOCATION,
- 'wait',
+ assertHasResult(CompletionSuggestionKind.INVOCATION, 'wait',
DART_RELEVANCE_COMMON_USAGE - 1);
assertNoResult('Future');
assertNoResult('Object');
@@ -228,19 +203,13 @@
test_PropertyAccess() async {
// SimpleIdentifier PropertyAccess ExpressionStatement
addTestFile('import "dart:math"; class A {x() {new Random().^}}');
- await getSuggestions({
- 'dart.math.Random': ['nextInt', 'nextDouble']
- });
+ await getSuggestions({'dart.math.Random': ['nextInt', 'nextDouble']});
expect(replacementOffset, equals(completionOffset));
expect(replacementLength, equals(0));
assertHasResult(CompletionSuggestionKind.INVOCATION, 'nextBool');
- assertHasResult(
- CompletionSuggestionKind.INVOCATION,
- 'nextDouble',
- DART_RELEVANCE_COMMON_USAGE - 1);
- assertHasResult(
- CompletionSuggestionKind.INVOCATION,
- 'nextInt',
+ assertHasResult(CompletionSuggestionKind.INVOCATION,
+ 'nextDouble', DART_RELEVANCE_COMMON_USAGE - 1);
+ assertHasResult(CompletionSuggestionKind.INVOCATION, 'nextInt',
DART_RELEVANCE_COMMON_USAGE);
assertNoResult('Random');
assertNoResult('Object');
diff --git a/pkg/analysis_server/test/services/completion/completion_computer_test.dart b/pkg/analysis_server/test/services/completion/completion_computer_test.dart
index 341b397..6536782 100644
--- a/pkg/analysis_server/test/services/completion/completion_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/completion_computer_test.dart
@@ -54,8 +54,7 @@
void resolveLibrary() {
context.resolveCompilationUnit(
- source,
- context.computeLibraryElement(source));
+ source, context.computeLibraryElement(source));
}
@override
@@ -66,22 +65,10 @@
source = addSource('/does/not/exist.dart', '');
perf = new CompletionPerformance();
manager = new DartCompletionManager.create(context, searchEngine, source);
- suggestion1 = new CompletionSuggestion(
- CompletionSuggestionKind.INVOCATION,
- DART_RELEVANCE_DEFAULT,
- "suggestion1",
- 1,
- 1,
- false,
- false);
- suggestion2 = new CompletionSuggestion(
- CompletionSuggestionKind.IDENTIFIER,
- DART_RELEVANCE_DEFAULT,
- "suggestion2",
- 2,
- 2,
- false,
- false);
+ suggestion1 = new CompletionSuggestion(CompletionSuggestionKind.INVOCATION,
+ DART_RELEVANCE_DEFAULT, "suggestion1", 1, 1, false, false);
+ suggestion2 = new CompletionSuggestion(CompletionSuggestionKind.IDENTIFIER,
+ DART_RELEVANCE_DEFAULT, "suggestion2", 2, 2, false, false);
new Future(_performAnalysis);
}
diff --git a/pkg/analysis_server/test/services/completion/completion_test_util.dart b/pkg/analysis_server/test/services/completion/completion_test_util.dart
index 0b242bd..862934d 100644
--- a/pkg/analysis_server/test/services/completion/completion_test_util.dart
+++ b/pkg/analysis_server/test/services/completion/completion_test_util.dart
@@ -6,8 +6,8 @@
import 'dart:async';
-import 'package:analysis_server/src/protocol.dart' as protocol show Element,
- ElementKind;
+import 'package:analysis_server/src/protocol.dart' as protocol
+ show Element, ElementKind;
import 'package:analysis_server/src/protocol.dart' hide Element, ElementKind;
import 'package:analysis_server/src/services/completion/common_usage_computer.dart';
import 'package:analysis_server/src/services/completion/completion_manager.dart';
@@ -62,13 +62,8 @@
content.substring(completionOffset + 1);
testSource = addSource(testFile, content);
cache = new DartCompletionCache(context, testSource);
- request = new DartCompletionRequest(
- context,
- searchEngine,
- testSource,
- completionOffset,
- cache,
- new CompletionPerformance());
+ request = new DartCompletionRequest(context, searchEngine, testSource,
+ completionOffset, cache, new CompletionPerformance());
}
void assertHasNoParameterInfo(CompletionSuggestion suggestion) {
@@ -82,8 +77,7 @@
expect(suggestion.parameterNames, isNotNull);
expect(suggestion.parameterTypes, isNotNull);
expect(suggestion.parameterNames.length, suggestion.parameterTypes.length);
- expect(
- suggestion.requiredParameterCount,
+ expect(suggestion.requiredParameterCount,
lessThanOrEqualTo(suggestion.parameterNames.length));
expect(suggestion.hasNamedParameters, isNotNull);
}
@@ -96,8 +90,7 @@
return;
}
CompletionSuggestion suggestion = request.suggestions.firstWhere(
- (CompletionSuggestion cs) => cs.kind == kind,
- orElse: () => null);
+ (CompletionSuggestion cs) => cs.kind == kind, orElse: () => null);
if (suggestion != null) {
failedCompletion('did not expect completion: $completion\n $suggestion');
}
@@ -115,14 +108,14 @@
CompletionSuggestion assertSuggest(String completion,
{CompletionSuggestionKind csKind: CompletionSuggestionKind.INVOCATION,
- int relevance: DART_RELEVANCE_DEFAULT, protocol.ElementKind elemKind: null,
- bool isDeprecated: false, bool isPotential: false}) {
+ int relevance: DART_RELEVANCE_DEFAULT,
+ protocol.ElementKind elemKind: null, bool isDeprecated: false,
+ bool isPotential: false}) {
CompletionSuggestion cs =
getSuggest(completion: completion, csKind: csKind, elemKind: elemKind);
if (cs == null) {
failedCompletion(
- 'expected $completion $csKind $elemKind',
- request.suggestions);
+ 'expected $completion $csKind $elemKind', request.suggestions);
}
expect(cs.kind, equals(csKind));
if (isDeprecated) {
@@ -137,18 +130,15 @@
return cs;
}
- void assertSuggestArgumentList(List<String> paramNames,
- List<String> paramTypes) {
+ void assertSuggestArgumentList(
+ List<String> paramNames, List<String> paramTypes) {
CompletionSuggestionKind csKind = CompletionSuggestionKind.ARGUMENT_LIST;
CompletionSuggestion cs = getSuggest(csKind: csKind);
if (cs == null) {
failedCompletion('expected completion $csKind', request.suggestions);
}
assertSuggestArgumentList_params(
- paramNames,
- paramTypes,
- cs.parameterNames,
- cs.parameterTypes);
+ paramNames, paramTypes, cs.parameterNames, cs.parameterTypes);
expect(cs.relevance, DART_RELEVANCE_HIGH);
}
@@ -180,14 +170,12 @@
fail(msg.toString());
}
- CompletionSuggestion assertSuggestClass(String name, {int relevance:
- DART_RELEVANCE_DEFAULT, CompletionSuggestionKind kind:
- CompletionSuggestionKind.INVOCATION, bool isDeprecated: false}) {
- CompletionSuggestion cs = assertSuggest(
- name,
- csKind: kind,
- relevance: relevance,
- isDeprecated: isDeprecated);
+ CompletionSuggestion assertSuggestClass(String name,
+ {int relevance: DART_RELEVANCE_DEFAULT,
+ CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
+ bool isDeprecated: false}) {
+ CompletionSuggestion cs = assertSuggest(name,
+ csKind: kind, relevance: relevance, isDeprecated: isDeprecated);
protocol.Element element = cs.element;
expect(element, isNotNull);
expect(element.kind, equals(protocol.ElementKind.CLASS));
@@ -198,9 +186,9 @@
return cs;
}
- CompletionSuggestion assertSuggestClassTypeAlias(String name, [int relevance =
- DART_RELEVANCE_DEFAULT, CompletionSuggestionKind kind =
- CompletionSuggestionKind.INVOCATION]) {
+ CompletionSuggestion assertSuggestClassTypeAlias(String name,
+ [int relevance = DART_RELEVANCE_DEFAULT,
+ CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
CompletionSuggestion cs =
assertSuggest(name, csKind: kind, relevance: relevance);
protocol.Element element = cs.element;
@@ -213,11 +201,21 @@
return cs;
}
+ CompletionSuggestion assertSuggestConstructor(String name) {
+ CompletionSuggestion cs = assertSuggest(name);
+ protocol.Element element = cs.element;
+ expect(element, isNotNull);
+ expect(element.kind, equals(protocol.ElementKind.CONSTRUCTOR));
+ int index = name.indexOf('.');
+ expect(element.name, index >= 0 ? name.substring(index + 1) : '');
+ return cs;
+ }
+
CompletionSuggestion assertSuggestField(String name, String type,
- {int relevance: DART_RELEVANCE_DEFAULT, CompletionSuggestionKind kind:
- CompletionSuggestionKind.INVOCATION, bool isDeprecated: false}) {
- CompletionSuggestion cs = assertSuggest(
- name,
+ {int relevance: DART_RELEVANCE_DEFAULT,
+ CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
+ bool isDeprecated: false}) {
+ CompletionSuggestion cs = assertSuggest(name,
csKind: kind,
relevance: relevance,
elemKind: protocol.ElementKind.FIELD,
@@ -238,11 +236,8 @@
CompletionSuggestion assertSuggestFunction(String name, String returnType,
[bool isDeprecated = false, int relevance = DART_RELEVANCE_DEFAULT,
CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
- CompletionSuggestion cs = assertSuggest(
- name,
- csKind: kind,
- relevance: relevance,
- isDeprecated: isDeprecated);
+ CompletionSuggestion cs = assertSuggest(name,
+ csKind: kind, relevance: relevance, isDeprecated: isDeprecated);
expect(cs.returnType, returnType != null ? returnType : 'dynamic');
protocol.Element element = cs.element;
expect(element, isNotNull);
@@ -253,21 +248,18 @@
expect(param, isNotNull);
expect(param[0], equals('('));
expect(param[param.length - 1], equals(')'));
- expect(
- element.returnType,
+ expect(element.returnType,
equals(returnType != null ? returnType : 'dynamic'));
assertHasParameterInfo(cs);
return cs;
}
- CompletionSuggestion assertSuggestFunctionTypeAlias(String name,
- String returnType, bool isDeprecated, [int relevance = DART_RELEVANCE_DEFAULT,
+ CompletionSuggestion assertSuggestFunctionTypeAlias(
+ String name, String returnType, bool isDeprecated,
+ [int relevance = DART_RELEVANCE_DEFAULT,
CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
- CompletionSuggestion cs = assertSuggest(
- name,
- csKind: kind,
- relevance: relevance,
- isDeprecated: isDeprecated);
+ CompletionSuggestion cs = assertSuggest(name,
+ csKind: kind, relevance: relevance, isDeprecated: isDeprecated);
expect(cs.returnType, returnType != null ? returnType : 'dynamic');
protocol.Element element = cs.element;
expect(element, isNotNull);
@@ -279,8 +271,7 @@
// expect(param, isNotNull);
// expect(param[0], equals('('));
// expect(param[param.length - 1], equals(')'));
- expect(
- element.returnType,
+ expect(element.returnType,
equals(returnType != null ? returnType : 'dynamic'));
// TODO (danrubel) Determine why param info is missing
// assertHasParameterInfo(cs);
@@ -288,10 +279,10 @@
}
CompletionSuggestion assertSuggestGetter(String name, String returnType,
- {int relevance: DART_RELEVANCE_DEFAULT, CompletionSuggestionKind kind:
- CompletionSuggestionKind.INVOCATION, bool isDeprecated: false}) {
- CompletionSuggestion cs = assertSuggest(
- name,
+ {int relevance: DART_RELEVANCE_DEFAULT,
+ CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
+ bool isDeprecated: false}) {
+ CompletionSuggestion cs = assertSuggest(name,
csKind: kind,
relevance: relevance,
elemKind: protocol.ElementKind.GETTER,
@@ -302,16 +293,15 @@
expect(element.kind, equals(protocol.ElementKind.GETTER));
expect(element.name, equals(name));
expect(element.parameters, isNull);
- expect(
- element.returnType,
+ expect(element.returnType,
equals(returnType != null ? returnType : 'dynamic'));
assertHasNoParameterInfo(cs);
return cs;
}
- CompletionSuggestion assertSuggestLabel(String name, [int relevance =
- DART_RELEVANCE_DEFAULT, CompletionSuggestionKind kind =
- CompletionSuggestionKind.IDENTIFIER]) {
+ CompletionSuggestion assertSuggestLabel(String name,
+ [int relevance = DART_RELEVANCE_DEFAULT,
+ CompletionSuggestionKind kind = CompletionSuggestionKind.IDENTIFIER]) {
CompletionSuggestion cs =
assertSuggest(name, csKind: kind, relevance: relevance);
expect(cs.returnType, isNull);
@@ -326,34 +316,20 @@
return cs;
}
- CompletionSuggestion assertSuggestLibraryPrefix(String prefix, [int relevance
- = DART_RELEVANCE_DEFAULT, CompletionSuggestionKind kind =
- CompletionSuggestionKind.INVOCATION]) {
+ CompletionSuggestion assertSuggestLibraryPrefix(String prefix,
+ [int relevance = DART_RELEVANCE_DEFAULT,
+ CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
// Library prefix should only be suggested by ImportedComputer
- if (computer is ImportedComputer) {
- CompletionSuggestion cs =
- assertSuggest(prefix, csKind: kind, relevance: relevance);
- protocol.Element element = cs.element;
- expect(element, isNotNull);
- expect(element.kind, equals(protocol.ElementKind.LIBRARY));
- expect(element.parameters, isNull);
- expect(element.returnType, isNull);
- assertHasNoParameterInfo(cs);
- return cs;
- } else {
- return assertNotSuggested(prefix);
- }
+ return assertNotSuggested(prefix);
}
- CompletionSuggestion assertSuggestMethod(String name, String declaringType,
- String returnType, {int relevance: DART_RELEVANCE_DEFAULT,
+ CompletionSuggestion assertSuggestMethod(
+ String name, String declaringType, String returnType,
+ {int relevance: DART_RELEVANCE_DEFAULT,
CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
bool isDeprecated: false}) {
- CompletionSuggestion cs = assertSuggest(
- name,
- csKind: kind,
- relevance: relevance,
- isDeprecated: isDeprecated);
+ CompletionSuggestion cs = assertSuggest(name,
+ csKind: kind, relevance: relevance, isDeprecated: isDeprecated);
expect(cs.declaringType, equals(declaringType));
expect(cs.returnType, returnType != null ? returnType : 'dynamic');
protocol.Element element = cs.element;
@@ -369,8 +345,8 @@
return cs;
}
- CompletionSuggestion assertSuggestNamedConstructor(String name,
- String returnType, [int relevance = DART_RELEVANCE_DEFAULT,
+ CompletionSuggestion assertSuggestNamedConstructor(
+ String name, String returnType, [int relevance = DART_RELEVANCE_DEFAULT,
CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
if (computer is InvocationComputer) {
CompletionSuggestion cs =
@@ -396,11 +372,10 @@
return assertNotSuggested(name);
}
- CompletionSuggestion assertSuggestSetter(String name, [int relevance =
- DART_RELEVANCE_DEFAULT, CompletionSuggestionKind kind =
- CompletionSuggestionKind.INVOCATION]) {
- CompletionSuggestion cs = assertSuggest(
- name,
+ CompletionSuggestion assertSuggestSetter(String name,
+ [int relevance = DART_RELEVANCE_DEFAULT,
+ CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
+ CompletionSuggestion cs = assertSuggest(name,
csKind: kind,
relevance: relevance,
elemKind: protocol.ElementKind.SETTER);
@@ -419,8 +394,8 @@
}
CompletionSuggestion assertSuggestTopLevelVar(String name, String returnType,
- [int relevance = DART_RELEVANCE_DEFAULT, CompletionSuggestionKind kind =
- CompletionSuggestionKind.INVOCATION]) {
+ [int relevance = DART_RELEVANCE_DEFAULT,
+ CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
CompletionSuggestion cs =
assertSuggest(name, csKind: kind, relevance: relevance);
expect(cs.returnType, returnType != null ? returnType : 'dynamic');
@@ -446,13 +421,8 @@
bool computeFast() {
_computeFastCalled = true;
- _completionManager = new DartCompletionManager(
- context,
- searchEngine,
- testSource,
- cache,
- [computer],
- new CommonUsageComputer({}));
+ _completionManager = new DartCompletionManager(context, searchEngine,
+ testSource, cache, [computer], new CommonUsageComputer({}));
var result = _completionManager.computeFast(request);
expect(request.replacementOffset, isNotNull);
expect(request.replacementLength, isNotNull);
@@ -518,10 +488,10 @@
if (completions != null) {
sb.write('\n found');
completions.toList()
- ..sort(suggestionComparator)
- ..forEach((CompletionSuggestion suggestion) {
- sb.write('\n ${suggestion.completion} -> $suggestion');
- });
+ ..sort(suggestionComparator)
+ ..forEach((CompletionSuggestion suggestion) {
+ sb.write('\n ${suggestion.completion} -> $suggestion');
+ });
}
if (completionNode != null) {
sb.write('\n in');
@@ -535,7 +505,8 @@
}
CompletionSuggestion getSuggest({String completion: null,
- CompletionSuggestionKind csKind: null, protocol.ElementKind elemKind: null}) {
+ CompletionSuggestionKind csKind: null,
+ protocol.ElementKind elemKind: null}) {
CompletionSuggestion cs;
request.suggestions.forEach((CompletionSuggestion s) {
if (completion != null && completion != s.completion) {
@@ -553,8 +524,7 @@
if (cs == null) {
cs = s;
} else {
- failedCompletion(
- 'expected exactly one $cs',
+ failedCompletion('expected exactly one $cs',
request.suggestions.where((s) => s.completion == completion));
}
});
@@ -586,9 +556,9 @@
// Subclasses override
}
- CompletionSuggestion assertSuggestImportedClass(String name, [int relevance =
- DART_RELEVANCE_DEFAULT, CompletionSuggestionKind kind =
- CompletionSuggestionKind.INVOCATION]) {
+ CompletionSuggestion assertSuggestImportedClass(String name,
+ [int relevance = DART_RELEVANCE_DEFAULT,
+ CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
if (computer is ImportedComputer) {
return assertSuggestClass(name, relevance: relevance, kind: kind);
} else {
@@ -596,61 +566,58 @@
}
}
+ CompletionSuggestion assertSuggestImportedConstructor(String name) {
+ return assertNotSuggested(name);
+ }
+
CompletionSuggestion assertSuggestImportedField(String name, String type,
{int relevance: DART_RELEVANCE_INHERITED_FIELD}) {
return assertNotSuggested(name);
}
- CompletionSuggestion assertSuggestImportedFunction(String name,
- String returnType, [bool isDeprecated = false, int relevance =
- DART_RELEVANCE_DEFAULT, CompletionSuggestionKind kind =
- CompletionSuggestionKind.INVOCATION]) {
+ CompletionSuggestion assertSuggestImportedFunction(
+ String name, String returnType, [bool isDeprecated = false,
+ int relevance = DART_RELEVANCE_DEFAULT,
+ CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
if (computer is ImportedComputer) {
return assertSuggestFunction(
- name,
- returnType,
- isDeprecated,
- relevance,
- kind);
+ name, returnType, isDeprecated, relevance, kind);
} else {
return assertNotSuggested(name);
}
}
- CompletionSuggestion assertSuggestImportedFunctionTypeAlias(String name,
- String returnType, [bool isDeprecated = false, int relevance =
- DART_RELEVANCE_DEFAULT, CompletionSuggestionKind kind =
- CompletionSuggestionKind.INVOCATION]) {
+ CompletionSuggestion assertSuggestImportedFunctionTypeAlias(
+ String name, String returnType, [bool isDeprecated = false,
+ int relevance = DART_RELEVANCE_DEFAULT,
+ CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
if (computer is ImportedComputer) {
return assertSuggestFunctionTypeAlias(
- name,
- returnType,
- isDeprecated,
- relevance,
- kind);
+ name, returnType, isDeprecated, relevance, kind);
} else {
return assertNotSuggested(name);
}
}
- CompletionSuggestion assertSuggestImportedGetter(String name,
- String returnType, {int relevance: DART_RELEVANCE_INHERITED_ACCESSOR}) {
+ CompletionSuggestion assertSuggestImportedGetter(
+ String name, String returnType,
+ {int relevance: DART_RELEVANCE_INHERITED_ACCESSOR}) {
return assertNotSuggested(name);
}
- CompletionSuggestion assertSuggestImportedMethod(String name,
- String declaringType, String returnType, {int relevance:
- DART_RELEVANCE_INHERITED_METHOD}) {
+ CompletionSuggestion assertSuggestImportedMethod(
+ String name, String declaringType, String returnType,
+ {int relevance: DART_RELEVANCE_INHERITED_METHOD}) {
return assertNotSuggested(name);
}
- CompletionSuggestion assertSuggestImportedSetter(String name, {int relevance:
- DART_RELEVANCE_INHERITED_ACCESSOR}) {
+ CompletionSuggestion assertSuggestImportedSetter(String name,
+ {int relevance: DART_RELEVANCE_INHERITED_ACCESSOR}) {
return assertNotSuggested(name);
}
- CompletionSuggestion assertSuggestImportedTopLevelVar(String name,
- String returnType, [int relevance = DART_RELEVANCE_DEFAULT,
+ CompletionSuggestion assertSuggestImportedTopLevelVar(
+ String name, String returnType, [int relevance = DART_RELEVANCE_DEFAULT,
CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
if (computer is ImportedComputer) {
return assertSuggestTopLevelVar(name, returnType, relevance, kind);
@@ -659,8 +626,8 @@
}
}
- CompletionSuggestion assertSuggestInvocationClass(String name, [int relevance
- = DART_RELEVANCE_DEFAULT]) {
+ CompletionSuggestion assertSuggestInvocationClass(String name,
+ [int relevance = DART_RELEVANCE_DEFAULT]) {
if (computer is InvocationComputer) {
return assertSuggestClass(name, relevance: relevance);
} else {
@@ -673,36 +640,30 @@
return assertNotSuggested(name);
}
- CompletionSuggestion assertSuggestInvocationGetter(String name,
- String returnType, {int relevance: DART_RELEVANCE_DEFAULT, bool isDeprecated:
- false}) {
+ CompletionSuggestion assertSuggestInvocationGetter(
+ String name, String returnType,
+ {int relevance: DART_RELEVANCE_DEFAULT, bool isDeprecated: false}) {
if (computer is InvocationComputer) {
- return assertSuggestGetter(
- name,
- returnType,
- relevance: relevance,
- isDeprecated: isDeprecated);
+ return assertSuggestGetter(name, returnType,
+ relevance: relevance, isDeprecated: isDeprecated);
} else {
return assertNotSuggested(name);
}
}
- CompletionSuggestion assertSuggestInvocationMethod(String name,
- String declaringType, String returnType, [int relevance =
- DART_RELEVANCE_DEFAULT]) {
+ CompletionSuggestion assertSuggestInvocationMethod(
+ String name, String declaringType, String returnType,
+ [int relevance = DART_RELEVANCE_DEFAULT]) {
if (computer is InvocationComputer) {
- return assertSuggestMethod(
- name,
- declaringType,
- returnType,
+ return assertSuggestMethod(name, declaringType, returnType,
relevance: relevance);
} else {
return assertNotSuggested(name);
}
}
- CompletionSuggestion assertSuggestInvocationSetter(String name, [int relevance
- = DART_RELEVANCE_DEFAULT]) {
+ CompletionSuggestion assertSuggestInvocationSetter(String name,
+ [int relevance = DART_RELEVANCE_DEFAULT]) {
if (computer is InvocationComputer) {
return assertSuggestSetter(name);
} else {
@@ -710,8 +671,9 @@
}
}
- CompletionSuggestion assertSuggestInvocationTopLevelVar(String name,
- String returnType, [int relevance = DART_RELEVANCE_DEFAULT]) {
+ CompletionSuggestion assertSuggestInvocationTopLevelVar(
+ String name, String returnType,
+ [int relevance = DART_RELEVANCE_DEFAULT]) {
if (computer is InvocationComputer) {
return assertSuggestTopLevelVar(name, returnType, relevance);
} else {
@@ -719,8 +681,8 @@
}
}
- CompletionSuggestion assertSuggestLocalClass(String name, {int relevance:
- DART_RELEVANCE_DEFAULT, bool isDeprecated: false}) {
+ CompletionSuggestion assertSuggestLocalClass(String name,
+ {int relevance: DART_RELEVANCE_DEFAULT, bool isDeprecated: false}) {
return assertNotSuggested(name);
}
@@ -729,20 +691,24 @@
return assertNotSuggested(name);
}
+ CompletionSuggestion assertSuggestLocalConstructor(String name) {
+ return assertNotSuggested(name);
+ }
+
CompletionSuggestion assertSuggestLocalField(String name, String type,
{int relevance: DART_RELEVANCE_LOCAL_FIELD, bool deprecated: false}) {
return assertNotSuggested(name);
}
- CompletionSuggestion assertSuggestLocalFunction(String name,
- String returnType, {bool deprecated: false, int relevance:
- DART_RELEVANCE_LOCAL_FUNCTION}) {
+ CompletionSuggestion assertSuggestLocalFunction(
+ String name, String returnType,
+ {bool deprecated: false, int relevance: DART_RELEVANCE_LOCAL_FUNCTION}) {
return assertNotSuggested(name);
}
- CompletionSuggestion assertSuggestLocalFunctionTypeAlias(String name,
- String returnType, {bool deprecated: false, int relevance:
- DART_RELEVANCE_DEFAULT}) {
+ CompletionSuggestion assertSuggestLocalFunctionTypeAlias(
+ String name, String returnType,
+ {bool deprecated: false, int relevance: DART_RELEVANCE_DEFAULT}) {
return assertNotSuggested(name);
}
@@ -751,37 +717,39 @@
return assertNotSuggested(name);
}
- CompletionSuggestion assertSuggestLocalMethod(String name,
- String declaringType, String returnType, {int relevance:
- DART_RELEVANCE_LOCAL_METHOD, bool deprecated: false}) {
+ CompletionSuggestion assertSuggestLocalMethod(
+ String name, String declaringType, String returnType,
+ {int relevance: DART_RELEVANCE_LOCAL_METHOD, bool deprecated: false}) {
return assertNotSuggested(name);
}
- CompletionSuggestion assertSuggestLocalSetter(String name, {int relevance:
- DART_RELEVANCE_LOCAL_ACCESSOR}) {
+ CompletionSuggestion assertSuggestLocalSetter(String name,
+ {int relevance: DART_RELEVANCE_LOCAL_ACCESSOR}) {
return assertNotSuggested(name);
}
- CompletionSuggestion assertSuggestLocalTopLevelVar(String name,
- String returnType, {int relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE}) {
+ CompletionSuggestion assertSuggestLocalTopLevelVar(
+ String name, String returnType,
+ {int relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE}) {
return assertNotSuggested(name);
}
- CompletionSuggestion assertSuggestLocalVariable(String name,
- String returnType, {int relevance: DART_RELEVANCE_LOCAL_VARIABLE}) {
+ CompletionSuggestion assertSuggestLocalVariable(
+ String name, String returnType,
+ {int relevance: DART_RELEVANCE_LOCAL_VARIABLE}) {
return assertNotSuggested(name);
}
- CompletionSuggestion assertSuggestNonLocalClass(String name, [int relevance =
- DART_RELEVANCE_DEFAULT, CompletionSuggestionKind kind =
- CompletionSuggestionKind.INVOCATION]) {
+ CompletionSuggestion assertSuggestNonLocalClass(String name,
+ [int relevance = DART_RELEVANCE_DEFAULT,
+ CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
return assertSuggestImportedClass(name, relevance, kind);
}
Future computeFull(assertFunction(bool result), {bool fullAnalysis: true}) {
- return super.computeFull(
- assertFunction,
- fullAnalysis: fullAnalysis).then(assertCachedCompute);
+ return super
+ .computeFull(assertFunction, fullAnalysis: fullAnalysis)
+ .then(assertCachedCompute);
}
test_ArgumentList() {
@@ -1459,10 +1427,8 @@
return computeFull((bool result) {
expect(request.replacementOffset, completionOffset);
expect(request.replacementLength, 0);
- CompletionSuggestion suggestionA = assertSuggestLocalClass(
- 'A',
- relevance: DART_RELEVANCE_LOW,
- isDeprecated: true);
+ CompletionSuggestion suggestionA = assertSuggestLocalClass('A',
+ relevance: DART_RELEVANCE_LOW, isDeprecated: true);
if (suggestionA != null) {
expect(suggestionA.element.isDeprecated, isTrue);
expect(suggestionA.element.isPrivate, isFalse);
@@ -2082,7 +2048,6 @@
expect(request.replacementOffset, completionOffset);
expect(request.replacementLength, 0);
assertSuggestInvocationMethod('toString', 'Object', 'String');
- //TODO (danrubel) type for '_c' should be 'X' not null
assertNotSuggested('Object');
assertNotSuggested('A');
assertNotSuggested('==');
@@ -2153,21 +2118,21 @@
addSource('/testA.dart', '''
int T1;
F1() { }
- class A {int x;}''');
+ class A {A(this.x) { } int x;}''');
addTestSource('''
import "/testA.dart";
int T2;
F2() { }
- class B {int x;}
+ class B {B(this.x, [String boo]) { } int x;}
class C {foo(){var f; {var x;} new ^}}''');
computeFast();
return computeFull((bool result) {
expect(request.replacementOffset, completionOffset);
expect(request.replacementLength, 0);
- assertSuggestImportedClass('Object');
- assertSuggestImportedClass('A');
- assertSuggestLocalClass('B');
- assertSuggestLocalClass('C');
+ assertSuggestImportedConstructor('Object');
+ assertSuggestImportedConstructor('A');
+ assertSuggestLocalConstructor('B');
+ assertSuggestLocalConstructor('C');
assertNotSuggested('f');
assertNotSuggested('x');
assertNotSuggested('foo');
@@ -2215,6 +2180,15 @@
});
}
+ test_InterpolationExpression_prefix_selector2() {
+ // SimpleIdentifier PrefixedIdentifier InterpolationExpression
+ addTestSource('main() {String name; print("hello \$name.^");}');
+ computeFast();
+ return computeFull((bool result) {
+ assertNoSuggestions();
+ });
+ }
+
test_InterpolationExpression_prefix_target() {
// SimpleIdentifier PrefixedIdentifier InterpolationExpression
addTestSource('main() {String name; print("hello \${nam^e.length}");}');
@@ -2371,11 +2345,8 @@
expect(methodA.element.isDeprecated, isFalse);
expect(methodA.element.isPrivate, isFalse);
}
- CompletionSuggestion getterF = assertSuggestLocalGetter(
- 'f',
- 'X',
- relevance: DART_RELEVANCE_LOW,
- deprecated: true);
+ CompletionSuggestion getterF = assertSuggestLocalGetter('f', 'X',
+ relevance: DART_RELEVANCE_LOW, deprecated: true);
if (getterF != null) {
expect(getterF.element.isDeprecated, isTrue);
expect(getterF.element.isPrivate, isFalse);
@@ -2400,11 +2371,8 @@
expect(methodA.element.isDeprecated, isFalse);
expect(methodA.element.isPrivate, isTrue);
}
- CompletionSuggestion getterF = assertSuggestLocalField(
- 'f',
- 'X',
- relevance: DART_RELEVANCE_LOW,
- deprecated: true);
+ CompletionSuggestion getterF = assertSuggestLocalField('f', 'X',
+ relevance: DART_RELEVANCE_LOW, deprecated: true);
if (getterF != null) {
expect(getterF.element.isDeprecated, isTrue);
expect(getterF.element.isPrivate, isFalse);
@@ -2427,12 +2395,8 @@
return computeFull((bool result) {
expect(request.replacementOffset, completionOffset);
expect(request.replacementLength, 0);
- CompletionSuggestion methodA = assertSuggestLocalMethod(
- 'a',
- 'A',
- 'Z',
- relevance: DART_RELEVANCE_LOW,
- deprecated: true);
+ CompletionSuggestion methodA = assertSuggestLocalMethod('a', 'A', 'Z',
+ relevance: DART_RELEVANCE_LOW, deprecated: true);
if (methodA != null) {
expect(methodA.element.isDeprecated, isTrue);
expect(methodA.element.isPrivate, isFalse);
@@ -2526,16 +2490,17 @@
var m;''');
addTestSource('''
part of libA;
- class B { }
+ class B { factory B.bar(int x) => null; }
main() {new ^}''');
computeFast();
return computeFull((bool result) {
expect(request.replacementOffset, completionOffset);
expect(request.replacementLength, 0);
- assertSuggestLocalClass('B');
- assertSuggestImportedClass('Object');
- assertSuggestImportedClass('X');
- assertSuggestNonLocalClass('A');
+ assertSuggestLocalConstructor('B.bar');
+ assertSuggestImportedConstructor('Object');
+ assertSuggestImportedConstructor('X.c');
+ assertNotSuggested('X._d');
+ assertSuggestImportedConstructor('A');
assertNotSuggested('F1');
assertNotSuggested('T1');
assertNotSuggested('_d');
@@ -2558,17 +2523,18 @@
library libA;
import "/testB.dart";
part "/testA.dart";
- class A { }
+ class A { A({String boo: 'hoo'}) { } }
main() {new ^}
var m;''');
computeFast();
return computeFull((bool result) {
expect(request.replacementOffset, completionOffset);
expect(request.replacementLength, 0);
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('Object');
- assertSuggestImportedClass('X');
- assertSuggestNonLocalClass('B');
+ assertSuggestLocalConstructor('A');
+ assertSuggestImportedConstructor('Object');
+ assertSuggestImportedConstructor('X.c');
+ assertNotSuggested('X._d');
+ assertSuggestImportedConstructor('B');
assertNotSuggested('F1');
assertNotSuggested('T1');
assertNotSuggested('_d');
@@ -2797,6 +2763,105 @@
});
}
+ test_PrefixedIdentifier_trailingStmt_const() {
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement
+ addTestSource('const String g = "hello"; f() {g.^ int y = 0;}');
+ computeFast();
+ return computeFull((bool result) {
+ assertSuggestInvocationGetter('length', 'int');
+ });
+ }
+
+ test_PrefixedIdentifier_trailingStmt_field() {
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement
+ addTestSource('class A {String g; f() {g.^ int y = 0;}}');
+ computeFast();
+ return computeFull((bool result) {
+ assertSuggestInvocationGetter('length', 'int');
+ });
+ }
+
+ test_PrefixedIdentifier_trailingStmt_function() {
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement
+ addTestSource('String g() => "one"; f() {g.^ int y = 0;}');
+ computeFast();
+ return computeFull((bool result) {
+ assertSuggestInvocationGetter('length', 'int');
+ });
+ }
+
+ test_PrefixedIdentifier_trailingStmt_functionTypeAlias() {
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement
+ addTestSource('typedef String g(); f() {g.^ int y = 0;}');
+ computeFast();
+ return computeFull((bool result) {
+ assertSuggestInvocationGetter('length', 'int');
+ });
+ }
+
+ test_PrefixedIdentifier_trailingStmt_getter() {
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement
+ addTestSource('String get g => "one"; f() {g.^ int y = 0;}');
+ computeFast();
+ return computeFull((bool result) {
+ assertSuggestInvocationGetter('length', 'int');
+ });
+ }
+
+ test_PrefixedIdentifier_trailingStmt_local_typed() {
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement
+ addTestSource('f() {String g; g.^ int y = 0;}');
+ computeFast();
+ return computeFull((bool result) {
+ assertSuggestInvocationGetter('length', 'int');
+ });
+ }
+
+ test_PrefixedIdentifier_trailingStmt_local_untyped() {
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement
+ addTestSource('f() {var g = "hello"; g.^ int y = 0;}');
+ computeFast();
+ return computeFull((bool result) {
+ assertSuggestInvocationGetter('length', 'int');
+ });
+ }
+
+ test_PrefixedIdentifier_trailingStmt_method() {
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement
+ addTestSource('class A {String g() {}; f() {g.^ int y = 0;}}');
+ computeFast();
+ return computeFull((bool result) {
+ assertSuggestInvocationGetter('length', 'int');
+ });
+ }
+
+ test_PrefixedIdentifier_trailingStmt_param() {
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement
+ addTestSource('class A {f(String g) {g.^ int y = 0;}}');
+ computeFast();
+ return computeFull((bool result) {
+ assertSuggestInvocationGetter('length', 'int');
+ });
+ }
+
+ test_PrefixedIdentifier_trailingStmt_param2() {
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement
+ addTestSource('f(String g) {g.^ int y = 0;}');
+ computeFast();
+ return computeFull((bool result) {
+ assertSuggestInvocationGetter('length', 'int');
+ });
+ }
+
+ test_PrefixedIdentifier_trailingStmt_topLevelVar() {
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement
+ addTestSource('String g; f() {g.^ int y = 0;}');
+ computeFast();
+ return computeFull((bool result) {
+ assertSuggestInvocationGetter('length', 'int');
+ });
+ }
+
test_PropertyAccess_expression() {
// SimpleIdentifier MethodInvocation PropertyAccess ExpressionStatement
addTestSource('class A {a() {"hello".to^String().length}}');
diff --git a/pkg/analysis_server/test/services/completion/imported_computer_test.dart b/pkg/analysis_server/test/services/completion/imported_computer_test.dart
index d67c2d8..98a10b5 100644
--- a/pkg/analysis_server/test/services/completion/imported_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/imported_computer_test.dart
@@ -4,7 +4,9 @@
library test.services.completion.toplevel;
-import 'package:analysis_server/src/protocol.dart';
+import 'package:analysis_server/src/protocol.dart' as protocol
+ show Element, ElementKind;
+import 'package:analysis_server/src/protocol.dart' hide Element, ElementKind;
import 'package:analysis_server/src/services/completion/completion_manager.dart';
import 'package:analysis_server/src/services/completion/dart_completion_cache.dart';
import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
@@ -26,7 +28,6 @@
@reflectiveTest
class ImportedComputerTest extends AbstractSelectorSuggestionTest {
-
void assertCached(String completion) {
DartCompletionCache cache = request.cache;
if (!isCached(cache.importedTypeSuggestions, completion) &&
@@ -60,21 +61,16 @@
setUpComputer();
int replacementOffset = request.replacementOffset;
int replacementLength = request.replacementLength;
- request = new DartCompletionRequest(
- context,
- searchEngine,
- testSource,
- completionOffset,
- cache,
- new CompletionPerformance());
+ request = new DartCompletionRequest(context, searchEngine, testSource,
+ completionOffset, cache, new CompletionPerformance());
request.replacementOffset = replacementOffset;
request.replacementLength = replacementLength;
expect(computeFast(), isTrue);
expect(request.unit.element, isNull);
List<CompletionSuggestion> newSuggestions = request.suggestions;
if (newSuggestions.length == oldSuggestions.length) {
- if (!oldSuggestions.any(
- (CompletionSuggestion s) => !newSuggestions.contains(s))) {
+ if (!oldSuggestions
+ .any((CompletionSuggestion s) => !newSuggestions.contains(s))) {
return;
}
}
@@ -82,16 +78,16 @@
'suggestions based upon cached results do not match expectations');
sb.write('\n Expected:');
oldSuggestions.toList()
- ..sort(suggestionComparator)
- ..forEach((CompletionSuggestion suggestion) {
- sb.write('\n ${suggestion.completion} -> $suggestion');
- });
+ ..sort(suggestionComparator)
+ ..forEach((CompletionSuggestion suggestion) {
+ sb.write('\n ${suggestion.completion} -> $suggestion');
+ });
sb.write('\n Actual:');
newSuggestions.toList()
- ..sort(suggestionComparator)
- ..forEach((CompletionSuggestion suggestion) {
- sb.write('\n ${suggestion.completion} -> $suggestion');
- });
+ ..sort(suggestionComparator)
+ ..forEach((CompletionSuggestion suggestion) {
+ sb.write('\n ${suggestion.completion} -> $suggestion');
+ });
fail(sb.toString());
}
@@ -106,31 +102,49 @@
}
@override
+ CompletionSuggestion assertSuggestImportedConstructor(String name) {
+ return assertSuggestConstructor(name);
+ }
+
+ @override
CompletionSuggestion assertSuggestImportedField(String name, String type,
{int relevance: DART_RELEVANCE_INHERITED_FIELD}) {
return assertSuggestField(name, type, relevance: relevance);
}
- CompletionSuggestion assertSuggestImportedGetter(String name,
- String returnType, {int relevance: DART_RELEVANCE_INHERITED_ACCESSOR}) {
+ CompletionSuggestion assertSuggestImportedGetter(
+ String name, String returnType,
+ {int relevance: DART_RELEVANCE_INHERITED_ACCESSOR}) {
return assertSuggestGetter(name, returnType, relevance: relevance);
}
- CompletionSuggestion assertSuggestImportedMethod(String name,
- String declaringType, String returnType, {int relevance:
- DART_RELEVANCE_INHERITED_METHOD}) {
- return assertSuggestMethod(
- name,
- declaringType,
- returnType,
+ CompletionSuggestion assertSuggestImportedMethod(
+ String name, String declaringType, String returnType,
+ {int relevance: DART_RELEVANCE_INHERITED_METHOD}) {
+ return assertSuggestMethod(name, declaringType, returnType,
relevance: relevance);
}
- CompletionSuggestion assertSuggestImportedSetter(String name, {int relevance:
- DART_RELEVANCE_INHERITED_ACCESSOR}) {
+ CompletionSuggestion assertSuggestImportedSetter(String name,
+ {int relevance: DART_RELEVANCE_INHERITED_ACCESSOR}) {
return assertSuggestSetter(name, relevance);
}
+ @override
+ CompletionSuggestion assertSuggestLibraryPrefix(String prefix,
+ [int relevance = DART_RELEVANCE_DEFAULT,
+ CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
+ CompletionSuggestion cs =
+ assertSuggest(prefix, csKind: kind, relevance: relevance);
+ protocol.Element element = cs.element;
+ expect(element, isNotNull);
+ expect(element.kind, equals(protocol.ElementKind.LIBRARY));
+ expect(element.parameters, isNull);
+ expect(element.returnType, isNull);
+ assertHasNoParameterInfo(cs);
+ return cs;
+ }
+
bool isCached(List<CompletionSuggestion> suggestions, String completion) =>
suggestions.any((CompletionSuggestion s) => s.completion == completion);
@@ -167,8 +181,7 @@
@override
test_Block() {
return super.test_Block().then((_) {
- expect(
- request.cache.importKey,
+ expect(request.cache.importKey,
'import "/testAB.dart";import "/testCD.dart" hide D;import "/testEEF.dart" show EE;import "/testG.dart" as g;');
assertCached('A');
assertCached('T3');
@@ -356,6 +369,56 @@
});
}
+ test_InstanceCreationExpression() {
+ addSource('/testA.dart', '''
+class A {foo(){var f; {var x;}}}
+class B {B(this.x, [String boo]) { } int x;}
+class C {C.bar({boo: 'hoo', int z: 0}) { } }''');
+ addTestSource('''
+import "/testA.dart";
+import "dart:math" as math;
+main() {new ^ String x = "hello";}''');
+ computeFast();
+ return computeFull((bool result) {
+ CompletionSuggestion suggestion;
+
+ suggestion = assertSuggestImportedConstructor('Object');
+ expect(suggestion.element.parameters, '()');
+ expect(suggestion.parameterNames, hasLength(0));
+ expect(suggestion.requiredParameterCount, 0);
+ expect(suggestion.hasNamedParameters, false);
+
+ suggestion = assertSuggestImportedConstructor('A');
+ expect(suggestion.element.parameters, '()');
+ expect(suggestion.parameterNames, hasLength(0));
+ expect(suggestion.requiredParameterCount, 0);
+ expect(suggestion.hasNamedParameters, false);
+
+ suggestion = assertSuggestImportedConstructor('B');
+ expect(suggestion.element.parameters, '(int x, [String boo])');
+ expect(suggestion.parameterNames, hasLength(2));
+ expect(suggestion.parameterNames[0], 'x');
+ expect(suggestion.parameterTypes[0], 'int');
+ expect(suggestion.parameterNames[1], 'boo');
+ expect(suggestion.parameterTypes[1], 'String');
+ expect(suggestion.requiredParameterCount, 1);
+ expect(suggestion.hasNamedParameters, false);
+
+ suggestion = assertSuggestImportedConstructor('C.bar');
+ expect(
+ suggestion.element.parameters, "({dynamic boo: 'hoo'}, {int z: 0})");
+ expect(suggestion.parameterNames, hasLength(2));
+ expect(suggestion.parameterNames[0], 'boo');
+ expect(suggestion.parameterTypes[0], 'dynamic');
+ expect(suggestion.parameterNames[1], 'z');
+ expect(suggestion.parameterTypes[1], 'int');
+ expect(suggestion.requiredParameterCount, 0);
+ expect(suggestion.hasNamedParameters, true);
+
+ assertSuggestLibraryPrefix('math');
+ });
+ }
+
test_method_parameters_mixed_required_and_named() {
addSource('/libA.dart', '''
class A {
@@ -641,8 +704,7 @@
@override
test_partFile_TypeName2() {
return super.test_partFile_TypeName2().then((_) {
- expect(
- request.cache.importKey,
+ expect(request.cache.importKey,
'library libA;import "/testB.dart";part "/testA.dart";');
});
}
diff --git a/pkg/analysis_server/test/services/completion/invocation_computer_test.dart b/pkg/analysis_server/test/services/completion/invocation_computer_test.dart
index 4025bdb..3cd9d67 100644
--- a/pkg/analysis_server/test/services/completion/invocation_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/invocation_computer_test.dart
@@ -4,7 +4,6 @@
library test.services.completion.invocation;
-
import 'dart:async';
import 'package:analysis_server/src/protocol.dart';
@@ -22,15 +21,11 @@
@reflectiveTest
class InvocationComputerTest extends AbstractSelectorSuggestionTest {
-
@override
CompletionSuggestion assertSuggestInvocationField(String name, String type,
{int relevance: DART_RELEVANCE_DEFAULT, bool isDeprecated: false}) {
- return assertSuggestField(
- name,
- type,
- relevance: relevance,
- isDeprecated: isDeprecated);
+ return assertSuggestField(name, type,
+ relevance: relevance, isDeprecated: isDeprecated);
}
/**
@@ -39,8 +34,8 @@
* purposes of what is shown during completion. [shouldBeShadowed] indicates
* whether shadowing is expected.
*/
- Future check_shadowing(String shadower, String shadowee,
- bool shouldBeShadowed) {
+ Future check_shadowing(
+ String shadower, String shadowee, bool shouldBeShadowed) {
addTestSource('''
class Base {
$shadowee
@@ -53,8 +48,9 @@
}
''');
return computeFull((bool result) {
- List<CompletionSuggestion> suggestionsForX = request.suggestions.where(
- (CompletionSuggestion s) => s.completion == 'x').toList();
+ List<CompletionSuggestion> suggestionsForX = request.suggestions
+ .where((CompletionSuggestion s) => s.completion == 'x')
+ .toList();
if (shouldBeShadowed) {
expect(suggestionsForX, hasLength(1));
expect(suggestionsForX[0].declaringType, 'Derived');
@@ -64,6 +60,15 @@
});
}
+ fail_test_PrefixedIdentifier_trailingStmt_const_untyped() {
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement
+ addTestSource('const g = "hello"; f() {g.^ int y = 0;}');
+ computeFast();
+ return computeFull((bool result) {
+ assertSuggestInvocationGetter('length', 'int');
+ });
+ }
+
@override
void setUpComputer() {
computer = new InvocationComputer();
diff --git a/pkg/analysis_server/test/services/completion/keyword_computer_test.dart b/pkg/analysis_server/test/services/completion/keyword_computer_test.dart
index d0bf83f..e044d9f 100644
--- a/pkg/analysis_server/test/services/completion/keyword_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/keyword_computer_test.dart
@@ -20,48 +20,48 @@
@reflectiveTest
class KeywordComputerTest extends AbstractCompletionTest {
- static const List<Keyword> IN_BLOCK_IN_CLASS =
- const [
- Keyword.ASSERT,
- Keyword.CASE,
- Keyword.CONTINUE,
- Keyword.DO,
- Keyword.FINAL,
- Keyword.FOR,
- Keyword.IF,
- Keyword.NEW,
- Keyword.RETHROW,
- Keyword.RETURN,
- Keyword.SUPER,
- Keyword.SWITCH,
- Keyword.THIS,
- Keyword.THROW,
- Keyword.TRY,
- Keyword.VAR,
- Keyword.VOID,
- Keyword.WHILE];
+ static const List<Keyword> IN_BLOCK_IN_CLASS = const [
+ Keyword.ASSERT,
+ Keyword.CASE,
+ Keyword.CONTINUE,
+ Keyword.DO,
+ Keyword.FINAL,
+ Keyword.FOR,
+ Keyword.IF,
+ Keyword.NEW,
+ Keyword.RETHROW,
+ Keyword.RETURN,
+ Keyword.SUPER,
+ Keyword.SWITCH,
+ Keyword.THIS,
+ Keyword.THROW,
+ Keyword.TRY,
+ Keyword.VAR,
+ Keyword.VOID,
+ Keyword.WHILE
+ ];
- static const List<Keyword> IN_BLOCK_NOT_IN_CLASS =
- const [
- Keyword.ASSERT,
- Keyword.CASE,
- Keyword.CONTINUE,
- Keyword.DO,
- Keyword.FINAL,
- Keyword.FOR,
- Keyword.IF,
- Keyword.NEW,
- Keyword.RETHROW,
- Keyword.RETURN,
- Keyword.SWITCH,
- Keyword.THROW,
- Keyword.TRY,
- Keyword.VAR,
- Keyword.VOID,
- Keyword.WHILE];
+ static const List<Keyword> IN_BLOCK_NOT_IN_CLASS = const [
+ Keyword.ASSERT,
+ Keyword.CASE,
+ Keyword.CONTINUE,
+ Keyword.DO,
+ Keyword.FINAL,
+ Keyword.FOR,
+ Keyword.IF,
+ Keyword.NEW,
+ Keyword.RETHROW,
+ Keyword.RETURN,
+ Keyword.SWITCH,
+ Keyword.THROW,
+ Keyword.TRY,
+ Keyword.VAR,
+ Keyword.VOID,
+ Keyword.WHILE
+ ];
- void assertSuggestKeywords(Iterable<Keyword> expectedKeywords, [int relevance
- = DART_RELEVANCE_KEYWORD]) {
+ void assertSuggestKeywords(Iterable<Keyword> expectedKeywords,
+ [int relevance = DART_RELEVANCE_KEYWORD]) {
Set<Keyword> actualKeywords = new Set<Keyword>();
request.suggestions.forEach((CompletionSuggestion s) {
if (s.kind == CompletionSuggestionKind.KEYWORD) {
@@ -107,119 +107,112 @@
test_after_class() {
addTestSource('class A {} ^');
expect(computeFast(), isTrue);
- assertSuggestKeywords(
- [
- Keyword.ABSTRACT,
- Keyword.CLASS,
- Keyword.CONST,
- Keyword.FINAL,
- Keyword.TYPEDEF,
- Keyword.VAR],
- DART_RELEVANCE_HIGH);
+ assertSuggestKeywords([
+ Keyword.ABSTRACT,
+ Keyword.CLASS,
+ Keyword.CONST,
+ Keyword.FINAL,
+ Keyword.TYPEDEF,
+ Keyword.VAR
+ ], DART_RELEVANCE_HIGH);
}
test_after_class2() {
addTestSource('class A {} c^');
expect(computeFast(), isTrue);
- assertSuggestKeywords(
- [
- Keyword.ABSTRACT,
- Keyword.CLASS,
- Keyword.CONST,
- Keyword.FINAL,
- Keyword.TYPEDEF,
- Keyword.VAR],
- DART_RELEVANCE_HIGH);
+ assertSuggestKeywords([
+ Keyword.ABSTRACT,
+ Keyword.CLASS,
+ Keyword.CONST,
+ Keyword.FINAL,
+ Keyword.TYPEDEF,
+ Keyword.VAR
+ ], DART_RELEVANCE_HIGH);
}
test_after_import() {
addTestSource('import foo; ^');
expect(computeFast(), isTrue);
- assertSuggestKeywords(
- [
- Keyword.ABSTRACT,
- Keyword.CLASS,
- Keyword.CONST,
- Keyword.EXPORT,
- Keyword.FINAL,
- Keyword.IMPORT,
- Keyword.PART,
- Keyword.TYPEDEF,
- Keyword.VAR],
- DART_RELEVANCE_HIGH);
+ assertSuggestKeywords([
+ Keyword.ABSTRACT,
+ Keyword.CLASS,
+ Keyword.CONST,
+ Keyword.EXPORT,
+ Keyword.FINAL,
+ Keyword.IMPORT,
+ Keyword.PART,
+ Keyword.TYPEDEF,
+ Keyword.VAR
+ ], DART_RELEVANCE_HIGH);
}
test_after_import2() {
addTestSource('import foo; c^');
expect(computeFast(), isTrue);
- assertSuggestKeywords(
- [
- Keyword.ABSTRACT,
- Keyword.CLASS,
- Keyword.CONST,
- Keyword.EXPORT,
- Keyword.FINAL,
- Keyword.IMPORT,
- Keyword.PART,
- Keyword.TYPEDEF,
- Keyword.VAR],
- DART_RELEVANCE_HIGH);
+ assertSuggestKeywords([
+ Keyword.ABSTRACT,
+ Keyword.CLASS,
+ Keyword.CONST,
+ Keyword.EXPORT,
+ Keyword.FINAL,
+ Keyword.IMPORT,
+ Keyword.PART,
+ Keyword.TYPEDEF,
+ Keyword.VAR
+ ], DART_RELEVANCE_HIGH);
}
test_before_import() {
addTestSource('^ import foo;');
expect(computeFast(), isTrue);
- assertSuggestKeywords(
- [Keyword.EXPORT, Keyword.IMPORT, Keyword.LIBRARY, Keyword.PART],
- DART_RELEVANCE_HIGH);
+ assertSuggestKeywords([
+ Keyword.EXPORT,
+ Keyword.IMPORT,
+ Keyword.LIBRARY,
+ Keyword.PART
+ ], DART_RELEVANCE_HIGH);
}
test_class() {
addTestSource('class A ^');
expect(computeFast(), isTrue);
assertSuggestKeywords(
- [Keyword.EXTENDS, Keyword.IMPLEMENTS],
- DART_RELEVANCE_HIGH);
+ [Keyword.EXTENDS, Keyword.IMPLEMENTS], DART_RELEVANCE_HIGH);
}
test_class2() {
addTestSource('class A e^');
expect(computeFast(), isTrue);
assertSuggestKeywords(
- [Keyword.EXTENDS, Keyword.IMPLEMENTS],
- DART_RELEVANCE_HIGH);
+ [Keyword.EXTENDS, Keyword.IMPLEMENTS], DART_RELEVANCE_HIGH);
}
test_class3() {
addTestSource('class A e^ { }');
expect(computeFast(), isTrue);
assertSuggestKeywords(
- [Keyword.EXTENDS, Keyword.IMPLEMENTS],
- DART_RELEVANCE_HIGH);
+ [Keyword.EXTENDS, Keyword.IMPLEMENTS], DART_RELEVANCE_HIGH);
}
test_class_extends() {
addTestSource('class A extends foo ^');
expect(computeFast(), isTrue);
assertSuggestKeywords(
- [Keyword.IMPLEMENTS, Keyword.WITH],
- DART_RELEVANCE_HIGH);
+ [Keyword.IMPLEMENTS, Keyword.WITH], DART_RELEVANCE_HIGH);
}
test_class_extends2() {
addTestSource('class A extends foo i^');
expect(computeFast(), isTrue);
assertSuggestKeywords(
- [Keyword.IMPLEMENTS, Keyword.WITH],
- DART_RELEVANCE_HIGH);
+ [Keyword.IMPLEMENTS, Keyword.WITH], DART_RELEVANCE_HIGH);
}
test_class_extends3() {
addTestSource('class A extends foo i^ { }');
expect(computeFast(), isTrue);
assertSuggestKeywords(
- [Keyword.IMPLEMENTS, Keyword.WITH],
- DART_RELEVANCE_HIGH);
+ [Keyword.IMPLEMENTS, Keyword.WITH], DART_RELEVANCE_HIGH);
}
test_class_extends_name() {
@@ -239,8 +232,7 @@
expect(computeFast(), isTrue);
// TODO (danrubel) refinement: don't suggest implements
assertSuggestKeywords(
- [Keyword.EXTENDS, Keyword.IMPLEMENTS],
- DART_RELEVANCE_HIGH);
+ [Keyword.EXTENDS, Keyword.IMPLEMENTS], DART_RELEVANCE_HIGH);
}
test_class_implements3() {
@@ -248,8 +240,7 @@
expect(computeFast(), isTrue);
// TODO (danrubel) refinement: don't suggest implements
assertSuggestKeywords(
- [Keyword.EXTENDS, Keyword.IMPLEMENTS],
- DART_RELEVANCE_HIGH);
+ [Keyword.EXTENDS, Keyword.IMPLEMENTS], DART_RELEVANCE_HIGH);
}
test_class_implements_name() {
@@ -291,19 +282,18 @@
test_empty() {
addTestSource('^');
expect(computeFast(), isTrue);
- assertSuggestKeywords(
- [
- Keyword.ABSTRACT,
- Keyword.CLASS,
- Keyword.CONST,
- Keyword.EXPORT,
- Keyword.FINAL,
- Keyword.IMPORT,
- Keyword.LIBRARY,
- Keyword.PART,
- Keyword.TYPEDEF,
- Keyword.VAR],
- DART_RELEVANCE_HIGH);
+ assertSuggestKeywords([
+ Keyword.ABSTRACT,
+ Keyword.CLASS,
+ Keyword.CONST,
+ Keyword.EXPORT,
+ Keyword.FINAL,
+ Keyword.IMPORT,
+ Keyword.LIBRARY,
+ Keyword.PART,
+ Keyword.TYPEDEF,
+ Keyword.VAR
+ ], DART_RELEVANCE_HIGH);
}
test_function_body_inClass_constructorInitializer() {
@@ -369,35 +359,34 @@
test_in_class() {
addTestSource('class A {^}');
expect(computeFast(), isTrue);
- assertSuggestKeywords(
- [
- Keyword.CONST,
- Keyword.DYNAMIC,
- Keyword.FACTORY,
- Keyword.FINAL,
- Keyword.GET,
- Keyword.OPERATOR,
- Keyword.SET,
- Keyword.STATIC,
- Keyword.VAR,
- Keyword.VOID]);
+ assertSuggestKeywords([
+ Keyword.CONST,
+ Keyword.DYNAMIC,
+ Keyword.FACTORY,
+ Keyword.FINAL,
+ Keyword.GET,
+ Keyword.OPERATOR,
+ Keyword.SET,
+ Keyword.STATIC,
+ Keyword.VAR,
+ Keyword.VOID
+ ]);
}
test_library() {
addTestSource('library foo;^');
expect(computeFast(), isTrue);
- assertSuggestKeywords(
- [
- Keyword.ABSTRACT,
- Keyword.CLASS,
- Keyword.CONST,
- Keyword.EXPORT,
- Keyword.FINAL,
- Keyword.IMPORT,
- Keyword.PART,
- Keyword.TYPEDEF,
- Keyword.VAR],
- DART_RELEVANCE_HIGH);
+ assertSuggestKeywords([
+ Keyword.ABSTRACT,
+ Keyword.CLASS,
+ Keyword.CONST,
+ Keyword.EXPORT,
+ Keyword.FINAL,
+ Keyword.IMPORT,
+ Keyword.PART,
+ Keyword.TYPEDEF,
+ Keyword.VAR
+ ], DART_RELEVANCE_HIGH);
}
test_library_name() {
@@ -421,53 +410,50 @@
test_part_of() {
addTestSource('part of foo;^');
expect(computeFast(), isTrue);
- assertSuggestKeywords(
- [
- Keyword.ABSTRACT,
- Keyword.CLASS,
- Keyword.CONST,
- Keyword.EXPORT,
- Keyword.FINAL,
- Keyword.IMPORT,
- Keyword.PART,
- Keyword.TYPEDEF,
- Keyword.VAR],
- DART_RELEVANCE_HIGH);
+ assertSuggestKeywords([
+ Keyword.ABSTRACT,
+ Keyword.CLASS,
+ Keyword.CONST,
+ Keyword.EXPORT,
+ Keyword.FINAL,
+ Keyword.IMPORT,
+ Keyword.PART,
+ Keyword.TYPEDEF,
+ Keyword.VAR
+ ], DART_RELEVANCE_HIGH);
}
test_partial_class() {
addTestSource('cl^');
expect(computeFast(), isTrue);
- assertSuggestKeywords(
- [
- Keyword.ABSTRACT,
- Keyword.CLASS,
- Keyword.CONST,
- Keyword.EXPORT,
- Keyword.FINAL,
- Keyword.IMPORT,
- Keyword.LIBRARY,
- Keyword.PART,
- Keyword.TYPEDEF,
- Keyword.VAR],
- DART_RELEVANCE_HIGH);
+ assertSuggestKeywords([
+ Keyword.ABSTRACT,
+ Keyword.CLASS,
+ Keyword.CONST,
+ Keyword.EXPORT,
+ Keyword.FINAL,
+ Keyword.IMPORT,
+ Keyword.LIBRARY,
+ Keyword.PART,
+ Keyword.TYPEDEF,
+ Keyword.VAR
+ ], DART_RELEVANCE_HIGH);
}
test_partial_class2() {
addTestSource('library a; cl^');
expect(computeFast(), isTrue);
- assertSuggestKeywords(
- [
- Keyword.ABSTRACT,
- Keyword.CLASS,
- Keyword.CONST,
- Keyword.EXPORT,
- Keyword.FINAL,
- Keyword.IMPORT,
- Keyword.PART,
- Keyword.TYPEDEF,
- Keyword.VAR],
- DART_RELEVANCE_HIGH);
+ assertSuggestKeywords([
+ Keyword.ABSTRACT,
+ Keyword.CLASS,
+ Keyword.CONST,
+ Keyword.EXPORT,
+ Keyword.FINAL,
+ Keyword.IMPORT,
+ Keyword.PART,
+ Keyword.TYPEDEF,
+ Keyword.VAR
+ ], DART_RELEVANCE_HIGH);
}
void _appendKeywords(StringBuffer msg, Iterable<Keyword> keywords) {
diff --git a/pkg/analysis_server/test/services/completion/local_computer_test.dart b/pkg/analysis_server/test/services/completion/local_computer_test.dart
index 433ff77..2fa452e 100644
--- a/pkg/analysis_server/test/services/completion/local_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/local_computer_test.dart
@@ -19,14 +19,11 @@
@reflectiveTest
class LocalComputerTest extends AbstractSelectorSuggestionTest {
-
@override
- CompletionSuggestion assertSuggestLocalClass(String name, {int relevance:
- DART_RELEVANCE_DEFAULT, bool isDeprecated: false}) {
- return assertSuggestClass(
- name,
- relevance: relevance,
- isDeprecated: isDeprecated);
+ CompletionSuggestion assertSuggestLocalClass(String name,
+ {int relevance: DART_RELEVANCE_DEFAULT, bool isDeprecated: false}) {
+ return assertSuggestClass(name,
+ relevance: relevance, isDeprecated: isDeprecated);
}
@override
@@ -36,75 +33,67 @@
}
@override
- CompletionSuggestion assertSuggestLocalField(String name, String type,
- {int relevance: DART_RELEVANCE_LOCAL_FIELD, bool deprecated: false}) {
- return assertSuggestField(
- name,
- type,
- relevance: relevance,
- isDeprecated: deprecated);
+ CompletionSuggestion assertSuggestLocalConstructor(String name) {
+ return assertSuggestConstructor(name);
}
@override
- CompletionSuggestion assertSuggestLocalFunction(String name,
- String returnType, {bool deprecated: false, int relevance:
- DART_RELEVANCE_LOCAL_FUNCTION}) {
+ CompletionSuggestion assertSuggestLocalField(String name, String type,
+ {int relevance: DART_RELEVANCE_LOCAL_FIELD, bool deprecated: false}) {
+ return assertSuggestField(name, type,
+ relevance: relevance, isDeprecated: deprecated);
+ }
+
+ @override
+ CompletionSuggestion assertSuggestLocalFunction(
+ String name, String returnType,
+ {bool deprecated: false, int relevance: DART_RELEVANCE_LOCAL_FUNCTION}) {
return assertSuggestFunction(name, returnType, deprecated, relevance);
}
@override
- CompletionSuggestion assertSuggestLocalFunctionTypeAlias(String name,
- String returnType, {bool deprecated: false, int relevance:
- DART_RELEVANCE_DEFAULT}) {
+ CompletionSuggestion assertSuggestLocalFunctionTypeAlias(
+ String name, String returnType,
+ {bool deprecated: false, int relevance: DART_RELEVANCE_DEFAULT}) {
return assertSuggestFunctionTypeAlias(
- name,
- returnType,
- deprecated,
- relevance);
+ name, returnType, deprecated, relevance);
}
@override
CompletionSuggestion assertSuggestLocalGetter(String name, String returnType,
{int relevance: DART_RELEVANCE_LOCAL_ACCESSOR, bool deprecated: false}) {
- return assertSuggestGetter(
- name,
- returnType,
- relevance: relevance,
- isDeprecated: deprecated);
+ return assertSuggestGetter(name, returnType,
+ relevance: relevance, isDeprecated: deprecated);
}
@override
- CompletionSuggestion assertSuggestLocalMethod(String name,
- String declaringType, String returnType, {int relevance:
- DART_RELEVANCE_LOCAL_METHOD, bool deprecated: false}) {
- return assertSuggestMethod(
- name,
- declaringType,
- returnType,
- relevance: relevance,
- isDeprecated: deprecated);
+ CompletionSuggestion assertSuggestLocalMethod(
+ String name, String declaringType, String returnType,
+ {int relevance: DART_RELEVANCE_LOCAL_METHOD, bool deprecated: false}) {
+ return assertSuggestMethod(name, declaringType, returnType,
+ relevance: relevance, isDeprecated: deprecated);
}
@override
- CompletionSuggestion assertSuggestLocalSetter(String name, {int relevance:
- DART_RELEVANCE_LOCAL_ACCESSOR}) {
+ CompletionSuggestion assertSuggestLocalSetter(String name,
+ {int relevance: DART_RELEVANCE_LOCAL_ACCESSOR}) {
return assertSuggestSetter(name, relevance);
}
@override
- CompletionSuggestion assertSuggestLocalTopLevelVar(String name,
- String returnType, {int relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE}) {
+ CompletionSuggestion assertSuggestLocalTopLevelVar(
+ String name, String returnType,
+ {int relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE}) {
return assertSuggestTopLevelVar(name, returnType, relevance);
}
@override
- CompletionSuggestion assertSuggestLocalVariable(String name,
- String returnType, {int relevance: DART_RELEVANCE_LOCAL_VARIABLE}) {
+ CompletionSuggestion assertSuggestLocalVariable(
+ String name, String returnType,
+ {int relevance: DART_RELEVANCE_LOCAL_VARIABLE}) {
// Local variables should only be suggested by LocalComputer
- CompletionSuggestion cs = assertSuggest(
- name,
- csKind: CompletionSuggestionKind.INVOCATION,
- relevance: relevance);
+ CompletionSuggestion cs = assertSuggest(name,
+ csKind: CompletionSuggestionKind.INVOCATION, relevance: relevance);
expect(cs.returnType, returnType != null ? returnType : 'dynamic');
Element element = cs.element;
expect(element, isNotNull);
@@ -118,18 +107,15 @@
CompletionSuggestion assertSuggestParameter(String name, String returnType,
{int relevance: DART_RELEVANCE_PARAMETER}) {
- CompletionSuggestion cs = assertSuggest(
- name,
- csKind: CompletionSuggestionKind.INVOCATION,
- relevance: relevance);
+ CompletionSuggestion cs = assertSuggest(name,
+ csKind: CompletionSuggestionKind.INVOCATION, relevance: relevance);
expect(cs.returnType, returnType != null ? returnType : 'dynamic');
Element element = cs.element;
expect(element, isNotNull);
expect(element.kind, equals(ElementKind.PARAMETER));
expect(element.name, equals(name));
expect(element.parameters, isNull);
- expect(
- element.returnType,
+ expect(element.returnType,
equals(returnType != null ? returnType : 'dynamic'));
return cs;
}
@@ -543,6 +529,50 @@
expect(suggestion.hasNamedParameters, false);
}
+ test_InstanceCreationExpression() {
+ addTestSource('''
+class A {foo(){var f; {var x;}}}
+class B {B(this.x, [String boo]) { } int x;}
+class C {C.bar({boo: 'hoo', int z: 0}) { } }
+main() {new ^ String x = "hello";}''');
+ computeFast();
+ return computeFull((bool result) {
+ CompletionSuggestion suggestion;
+
+ suggestion = assertSuggestLocalConstructor('A');
+ expect(suggestion.element.parameters, '()');
+ expect(suggestion.element.returnType, 'A');
+ expect(suggestion.declaringType, 'A');
+ expect(suggestion.parameterNames, hasLength(0));
+ expect(suggestion.requiredParameterCount, 0);
+ expect(suggestion.hasNamedParameters, false);
+
+ suggestion = assertSuggestLocalConstructor('B');
+ expect(suggestion.element.parameters, '(int x, [String boo])');
+ expect(suggestion.element.returnType, 'B');
+ expect(suggestion.declaringType, 'B');
+ expect(suggestion.parameterNames, hasLength(2));
+ expect(suggestion.parameterNames[0], 'x');
+ expect(suggestion.parameterTypes[0], 'int');
+ expect(suggestion.parameterNames[1], 'boo');
+ expect(suggestion.parameterTypes[1], 'String');
+ expect(suggestion.requiredParameterCount, 1);
+ expect(suggestion.hasNamedParameters, false);
+
+ suggestion = assertSuggestLocalConstructor('C.bar');
+ expect(suggestion.element.parameters, '({dynamic boo, int z})');
+ expect(suggestion.element.returnType, 'C');
+ expect(suggestion.declaringType, 'C');
+ expect(suggestion.parameterNames, hasLength(2));
+ expect(suggestion.parameterNames[0], 'boo');
+ expect(suggestion.parameterTypes[0], 'dynamic');
+ expect(suggestion.parameterNames[1], 'z');
+ expect(suggestion.parameterTypes[1], 'int');
+ expect(suggestion.requiredParameterCount, 0);
+ expect(suggestion.hasNamedParameters, true);
+ });
+ }
+
test_method_parameters_mixed_required_and_named() {
addTestSource('''
class A {
diff --git a/pkg/analysis_server/test/services/completion/optype_test.dart b/pkg/analysis_server/test/services/completion/optype_test.dart
index a5367a7..e5f0fbc 100644
--- a/pkg/analysis_server/test/services/completion/optype_test.dart
+++ b/pkg/analysis_server/test/services/completion/optype_test.dart
@@ -21,7 +21,6 @@
@reflectiveTest
class OpTypeTest {
-
OpType visitor;
void addTestSource(String content, {bool resolved: false}) {
@@ -35,9 +34,9 @@
context.sourceFactory =
new SourceFactory([AbstractContextTest.SDK_RESOLVER]);
context.setContents(source, content);
- CompilationUnit unit = resolved ?
- context.resolveCompilationUnit2(source, source) :
- context.parseCompilationUnit(source);
+ CompilationUnit unit = resolved
+ ? context.resolveCompilationUnit2(source, source)
+ : context.parseCompilationUnit(source);
CompletionTarget completionTarget =
new CompletionTarget.forOffset(unit, offset);
visitor = new OpType.forCompletion(completionTarget, offset);
@@ -45,31 +44,21 @@
void assertOpType({bool invocation: false, bool returnValue: false,
bool typeNames: false, bool voidReturn: false, bool statementLabel: false,
- bool caseLabel: false}) {
- expect(
- visitor.includeInvocationSuggestions,
- equals(invocation),
+ bool caseLabel: false, bool constructors: false}) {
+ expect(visitor.includeInvocationSuggestions, equals(invocation),
reason: 'invocation');
- expect(
- visitor.includeReturnValueSuggestions,
- equals(returnValue),
+ expect(visitor.includeReturnValueSuggestions, equals(returnValue),
reason: 'returnValue');
- expect(
- visitor.includeTypeNameSuggestions,
- equals(typeNames),
+ expect(visitor.includeTypeNameSuggestions, equals(typeNames),
reason: 'typeNames');
- expect(
- visitor.includeVoidReturnSuggestions,
- equals(voidReturn),
+ expect(visitor.includeVoidReturnSuggestions, equals(voidReturn),
reason: 'voidReturn');
- expect(
- visitor.includeStatementLabelSuggestions,
- equals(statementLabel),
+ expect(visitor.includeStatementLabelSuggestions, equals(statementLabel),
reason: 'statementLabel');
- expect(
- visitor.includeCaseLabelSuggestions,
- equals(caseLabel),
+ expect(visitor.includeCaseLabelSuggestions, equals(caseLabel),
reason: 'caseLabel');
+ expect(visitor.includeConstructorSuggestions, equals(constructors),
+ reason: 'constructors');
}
test_Annotation() {
@@ -344,7 +333,7 @@
// SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
// InstanceCreationExpression
addTestSource('main() {new Str^ing.fromCharCodes([]);}', resolved: true);
- assertOpType(typeNames: true);
+ assertOpType(constructors: true);
}
test_ConstructorName_resolved() {
@@ -567,10 +556,16 @@
assertOpType(returnValue: true, typeNames: true);
}
- test_InstanceCreationExpression_imported() {
+ test_InstanceCreationExpression() {
// SimpleIdentifier TypeName ConstructorName InstanceCreationExpression
addTestSource('class C {foo(){var f; {var x;} new ^}}');
- assertOpType(typeNames: true);
+ assertOpType(constructors: true);
+ }
+
+ test_InstanceCreationExpression_trailingStmt() {
+ // SimpleIdentifier TypeName ConstructorName InstanceCreationExpression
+ addTestSource('class C {foo(){var f; {var x;} new ^ int x = 7;}}');
+ assertOpType(constructors: true);
}
test_InstanceCreationExpression_keyword() {
diff --git a/pkg/analysis_server/test/services/correction/assist_test.dart b/pkg/analysis_server/test/services/correction/assist_test.dart
index 4c48713..d3c11d0 100644
--- a/pkg/analysis_server/test/services/correction/assist_test.dart
+++ b/pkg/analysis_server/test/services/correction/assist_test.dart
@@ -12,13 +12,11 @@
import '../../abstract_single_unit.dart';
import '../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(AssistProcessorTest);
}
-
@reflectiveTest
class AssistProcessorTest extends AbstractSingleUnitTest {
int offset;
@@ -47,8 +45,8 @@
/**
* Calls [assertHasAssist] at the offset of [offsetSearch] in [testCode].
*/
- void assertHasAssistAt(String offsetSearch, AssistKind kind,
- String expected) {
+ void assertHasAssistAt(
+ String offsetSearch, AssistKind kind, String expected) {
offset = findOffset(offsetSearch);
assertHasAssist(kind, expected);
}
@@ -86,8 +84,8 @@
return positions;
}
- List<LinkedEditSuggestion> expectedSuggestions(LinkedEditSuggestionKind kind,
- List<String> values) {
+ List<LinkedEditSuggestion> expectedSuggestions(
+ LinkedEditSuggestionKind kind, List<String> values) {
return values.map((value) {
return new LinkedEditSuggestion(value, kind);
}).toList();
@@ -595,12 +593,10 @@
}
List<int> readBytes() => <int>[];
''');
- _assertLinkedGroup(
- change.linkedEditGroups[0],
- ['readBytes = '],
- expectedSuggestions(
- LinkedEditSuggestionKind.VARIABLE,
- ['list', 'bytes2', 'readBytes']));
+ _assertLinkedGroup(change.linkedEditGroups[0], [
+ 'readBytes = '
+ ], expectedSuggestions(
+ LinkedEditSuggestionKind.VARIABLE, ['list', 'bytes2', 'readBytes']));
}
void test_assignToLocalVariable_alreadyAssignment() {
@@ -613,6 +609,16 @@
assertNoAssistAt('vvv =', AssistKind.ASSIGN_TO_LOCAL_VARIABLE);
}
+ void test_assignToLocalVariable_invocationArgument() {
+ resolveTestUnit(r'''
+main() {
+ f(12345);
+}
+int f(p) {}
+''');
+ assertNoAssistAt('345', AssistKind.ASSIGN_TO_LOCAL_VARIABLE);
+ }
+
void test_assignToLocalVariable_throw() {
resolveTestUnit('''
main() {
@@ -779,9 +785,7 @@
}
}
''');
- assertHasAssistAt(
- '{ // marker',
- AssistKind.CONVERT_INTO_EXPRESSION_BODY,
+ assertHasAssistAt('{ // marker', AssistKind.CONVERT_INTO_EXPRESSION_BODY,
'''
class A {
m() => 42;
@@ -1132,8 +1136,7 @@
''');
}
- void
- test_exchangeBinaryExpressionArguments_OK_extended_sameOperator_afterFirst() {
+ void test_exchangeBinaryExpressionArguments_OK_extended_sameOperator_afterFirst() {
resolveTestUnit('''
main() {
1 + 2 + 3;
@@ -1146,8 +1149,7 @@
''');
}
- void
- test_exchangeBinaryExpressionArguments_OK_extended_sameOperator_afterSecond() {
+ void test_exchangeBinaryExpressionArguments_OK_extended_sameOperator_afterSecond() {
resolveTestUnit('''
main() {
1 + 2 + 3;
@@ -1362,15 +1364,11 @@
}
''';
assertHasAssistAt(
- 'is MyType',
- AssistKind.INTRODUCE_LOCAL_CAST_TYPE,
- expected);
- _assertLinkedGroup(
- change.linkedEditGroups[0],
- ['myTypeName = '],
- expectedSuggestions(
- LinkedEditSuggestionKind.VARIABLE,
- ['myTypeName', 'typeName', 'name']));
+ 'is MyType', AssistKind.INTRODUCE_LOCAL_CAST_TYPE, expected);
+ _assertLinkedGroup(change.linkedEditGroups[0], [
+ 'myTypeName = '
+ ], expectedSuggestions(
+ LinkedEditSuggestionKind.VARIABLE, ['myTypeName', 'typeName', 'name']));
// another good location
assertHasAssistAt('if (p', AssistKind.INTRODUCE_LOCAL_CAST_TYPE, expected);
}
@@ -1392,13 +1390,9 @@
}
''';
assertHasAssistAt(
- 'is String',
- AssistKind.INTRODUCE_LOCAL_CAST_TYPE,
- expected);
+ 'is String', AssistKind.INTRODUCE_LOCAL_CAST_TYPE, expected);
assertHasAssistAt(
- 'while (p',
- AssistKind.INTRODUCE_LOCAL_CAST_TYPE,
- expected);
+ 'while (p', AssistKind.INTRODUCE_LOCAL_CAST_TYPE, expected);
}
void test_invalidSelection() {
@@ -2018,8 +2012,7 @@
assertNoAssistAt('v;', AssistKind.JOIN_VARIABLE_DECLARATION);
}
- void
- test_joinVariableDeclaration_onDeclaration_wrong_nextNotAssignmentExpression() {
+ void test_joinVariableDeclaration_onDeclaration_wrong_nextNotAssignmentExpression() {
resolveTestUnit('''
main() {
var v;
@@ -2029,8 +2022,7 @@
assertNoAssistAt('v;', AssistKind.JOIN_VARIABLE_DECLARATION);
}
- void
- test_joinVariableDeclaration_onDeclaration_wrong_nextNotExpressionStatement() {
+ void test_joinVariableDeclaration_onDeclaration_wrong_nextNotExpressionStatement() {
resolveTestUnit('''
main() {
var v;
@@ -2040,8 +2032,7 @@
assertNoAssistAt('v;', AssistKind.JOIN_VARIABLE_DECLARATION);
}
- void
- test_joinVariableDeclaration_onDeclaration_wrong_nextNotPureAssignment() {
+ void test_joinVariableDeclaration_onDeclaration_wrong_nextNotPureAssignment() {
resolveTestUnit('''
main() {
var v;
@@ -2133,9 +2124,7 @@
return true ? 111 : 222;
}
''');
- assertHasAssistAt(
- 'return ',
- AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE,
+ assertHasAssistAt('return ', AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE,
'''
main() {
if (true) {
@@ -2192,9 +2181,7 @@
}
}
''');
- assertHasAssistAt(
- 'if (true)',
- AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL,
+ assertHasAssistAt('if (true)', AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL,
'''
main() {
int vvv;
@@ -2213,9 +2200,7 @@
}
}
''');
- assertHasAssistAt(
- 'if (true)',
- AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL,
+ assertHasAssistAt('if (true)', AssistKind.REPLACE_IF_ELSE_WITH_CONDITIONAL,
'''
main() {
return true ? 111 : 222;
diff --git a/pkg/analysis_server/test/services/correction/change_test.dart b/pkg/analysis_server/test/services/correction/change_test.dart
index 7113f91..8155af2 100644
--- a/pkg/analysis_server/test/services/correction/change_test.dart
+++ b/pkg/analysis_server/test/services/correction/change_test.dart
@@ -11,7 +11,6 @@
import '../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(ChangeTest);
@@ -22,7 +21,6 @@
runReflectiveTests(PositionTest);
}
-
@reflectiveTest
class ChangeTest {
void test_addEdit() {
@@ -56,83 +54,67 @@
void test_toJson() {
SourceChange change = new SourceChange('msg');
change.addFileEdit(new SourceFileEdit('/a.dart', 1)
- ..add(new SourceEdit(1, 2, 'aaa'))
- ..add(new SourceEdit(10, 20, 'bbb')));
+ ..add(new SourceEdit(1, 2, 'aaa'))
+ ..add(new SourceEdit(10, 20, 'bbb')));
change.addFileEdit(new SourceFileEdit('/b.dart', 2)
- ..add(new SourceEdit(21, 22, 'xxx'))
- ..add(new SourceEdit(210, 220, 'yyy')));
+ ..add(new SourceEdit(21, 22, 'xxx'))
+ ..add(new SourceEdit(210, 220, 'yyy')));
{
var group = new LinkedEditGroup.empty();
change.addLinkedEditGroup(group
- ..addPosition(new Position('/ga.dart', 1), 2)
- ..addPosition(new Position('/ga.dart', 10), 2));
+ ..addPosition(new Position('/ga.dart', 1), 2)
+ ..addPosition(new Position('/ga.dart', 10), 2));
group.addSuggestion(
new LinkedEditSuggestion('AA', LinkedEditSuggestionKind.TYPE));
group.addSuggestion(
new LinkedEditSuggestion('BB', LinkedEditSuggestionKind.TYPE));
}
change.addLinkedEditGroup(new LinkedEditGroup.empty()
- ..addPosition(new Position('/gb.dart', 10), 5)
- ..addPosition(new Position('/gb.dart', 100), 5));
+ ..addPosition(new Position('/gb.dart', 10), 5)
+ ..addPosition(new Position('/gb.dart', 100), 5));
change.selection = new Position('/selection.dart', 42);
var expectedJson = {
'message': 'msg',
- 'edits': [{
+ 'edits': [
+ {
'file': '/a.dart',
'fileStamp': 1,
- 'edits': [{
- 'offset': 10,
- 'length': 20,
- 'replacement': 'bbb'
- }, {
- 'offset': 1,
- 'length': 2,
- 'replacement': 'aaa'
- }]
- }, {
+ 'edits': [
+ {'offset': 10, 'length': 20, 'replacement': 'bbb'},
+ {'offset': 1, 'length': 2, 'replacement': 'aaa'}
+ ]
+ },
+ {
'file': '/b.dart',
'fileStamp': 2,
- 'edits': [{
- 'offset': 210,
- 'length': 220,
- 'replacement': 'yyy'
- }, {
- 'offset': 21,
- 'length': 22,
- 'replacement': 'xxx'
- }]
- }],
- 'linkedEditGroups': [{
+ 'edits': [
+ {'offset': 210, 'length': 220, 'replacement': 'yyy'},
+ {'offset': 21, 'length': 22, 'replacement': 'xxx'}
+ ]
+ }
+ ],
+ 'linkedEditGroups': [
+ {
'length': 2,
- 'positions': [{
- 'file': '/ga.dart',
- 'offset': 1
- }, {
- 'file': '/ga.dart',
- 'offset': 10
- }],
- 'suggestions': [{
- 'kind': 'TYPE',
- 'value': 'AA'
- }, {
- 'kind': 'TYPE',
- 'value': 'BB'
- }]
- }, {
+ 'positions': [
+ {'file': '/ga.dart', 'offset': 1},
+ {'file': '/ga.dart', 'offset': 10}
+ ],
+ 'suggestions': [
+ {'kind': 'TYPE', 'value': 'AA'},
+ {'kind': 'TYPE', 'value': 'BB'}
+ ]
+ },
+ {
'length': 5,
- 'positions': [{
- 'file': '/gb.dart',
- 'offset': 10
- }, {
- 'file': '/gb.dart',
- 'offset': 100
- }],
+ 'positions': [
+ {'file': '/gb.dart', 'offset': 10},
+ {'file': '/gb.dart', 'offset': 100}
+ ],
'suggestions': []
- }],
- 'selection': {
- 'file': '/selection.dart',
- 'offset': 42
- }
+ }
+ ],
+ 'selection': {'file': '/selection.dart', 'offset': 42}
};
expect(change.toJson(), expectedJson);
// some toString()
@@ -140,15 +122,13 @@
}
}
-
@reflectiveTest
class EditTest {
void test_applySequence() {
SourceEdit edit1 = new SourceEdit(5, 2, 'abc');
SourceEdit edit2 = new SourceEdit(1, 0, '!');
expect(
- SourceEdit.applySequence('0123456789', [edit1, edit2]),
- '0!1234abc789');
+ SourceEdit.applySequence('0123456789', [edit1, edit2]), '0!1234abc789');
}
void test_editFromRange() {
@@ -182,17 +162,11 @@
}
void test_toJson() {
SourceEdit edit = new SourceEdit(1, 2, 'foo');
- var expectedJson = {
- OFFSET: 1,
- LENGTH: 2,
- REPLACEMENT: 'foo'
- };
+ var expectedJson = {OFFSET: 1, LENGTH: 2, REPLACEMENT: 'foo'};
expect(edit.toJson(), expectedJson);
}
-
}
-
@reflectiveTest
class FileEditTest {
void test_add_sorts() {
@@ -222,11 +196,9 @@
SourceFileEdit fileEdit = new SourceFileEdit('/test.dart', 100);
fileEdit.add(new SourceEdit(1, 2, 'aaa'));
fileEdit.add(new SourceEdit(10, 20, 'bbb'));
- expect(
- fileEdit.toString(),
- '{"file":"/test.dart","fileStamp":100,"edits":['
- '{"offset":10,"length":20,"replacement":"bbb"},'
- '{"offset":1,"length":2,"replacement":"aaa"}]}');
+ expect(fileEdit.toString(), '{"file":"/test.dart","fileStamp":100,"edits":['
+ '{"offset":10,"length":20,"replacement":"bbb"},'
+ '{"offset":1,"length":2,"replacement":"aaa"}]}');
}
void test_toJson() {
@@ -236,31 +208,23 @@
var expectedJson = {
FILE: '/test.dart',
FILE_STAMP: 100,
- EDITS: [{
- OFFSET: 10,
- LENGTH: 20,
- REPLACEMENT: 'bbb'
- }, {
- OFFSET: 1,
- LENGTH: 2,
- REPLACEMENT: 'aaa'
- },]
+ EDITS: [
+ {OFFSET: 10, LENGTH: 20, REPLACEMENT: 'bbb'},
+ {OFFSET: 1, LENGTH: 2, REPLACEMENT: 'aaa'},
+ ]
};
expect(fileEdit.toJson(), expectedJson);
}
}
-
@reflectiveTest
class LinkedEditGroupTest {
void test_new() {
LinkedEditGroup group = new LinkedEditGroup.empty();
group.addPosition(new Position('/a.dart', 1), 2);
group.addPosition(new Position('/b.dart', 10), 2);
- expect(
- group.toString(),
- '{"positions":[' '{"file":"/a.dart","offset":1},'
- '{"file":"/b.dart","offset":10}],"length":2,"suggestions":[]}');
+ expect(group.toString(), '{"positions":[' '{"file":"/a.dart","offset":1},'
+ '{"file":"/b.dart","offset":10}],"length":2,"suggestions":[]}');
}
void test_toJson() {
@@ -273,25 +237,18 @@
new LinkedEditSuggestion('BB', LinkedEditSuggestionKind.TYPE));
expect(group.toJson(), {
'length': 2,
- 'positions': [{
- 'file': '/a.dart',
- 'offset': 1
- }, {
- 'file': '/b.dart',
- 'offset': 10
- }],
- 'suggestions': [{
- 'kind': 'TYPE',
- 'value': 'AA'
- }, {
- 'kind': 'TYPE',
- 'value': 'BB'
- }]
+ 'positions': [
+ {'file': '/a.dart', 'offset': 1},
+ {'file': '/b.dart', 'offset': 10}
+ ],
+ 'suggestions': [
+ {'kind': 'TYPE', 'value': 'AA'},
+ {'kind': 'TYPE', 'value': 'BB'}
+ ]
});
}
}
-
@reflectiveTest
class LinkedEditSuggestionTest {
void test_eqEq() {
@@ -307,7 +264,6 @@
}
}
-
@reflectiveTest
class PositionTest {
void test_eqEq() {
@@ -334,10 +290,7 @@
void test_toJson() {
Position position = new Position('/test.dart', 1);
- var expectedJson = {
- FILE: '/test.dart',
- OFFSET: 1
- };
+ var expectedJson = {FILE: '/test.dart', OFFSET: 1};
expect(position.toJson(), expectedJson);
}
}
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index feb88df..e627842 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -17,16 +17,13 @@
import '../../abstract_single_unit.dart';
import '../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(FixProcessorTest);
}
-
typedef bool AnalysisErrorFilter(AnalysisError error);
-
@reflectiveTest
class FixProcessorTest extends AbstractSingleUnitTest {
AnalysisErrorFilter errorFilter = null;
@@ -88,8 +85,8 @@
return positions;
}
- List<LinkedEditSuggestion> expectedSuggestions(LinkedEditSuggestionKind kind,
- List<String> values) {
+ List<LinkedEditSuggestion> expectedSuggestions(
+ LinkedEditSuggestionKind kind, List<String> values) {
return values.map((value) {
return new LinkedEditSuggestion(value, kind);
}).toList();
@@ -185,6 +182,33 @@
''');
}
+ void test_changeToStaticAccess_method_importType() {
+ addSource('/libA.dart', r'''
+library libA;
+class A {
+ static foo() {}
+}
+''');
+ addSource('/libB.dart', r'''
+library libB;
+import 'libA.dart';
+class B extends A {}
+''');
+ resolveTestUnit('''
+import 'libB.dart';
+main(B b) {
+ b.foo();
+}
+''');
+ assertHasFix(FixKind.CHANGE_TO_STATIC_ACCESS, '''
+import 'libB.dart';
+import 'libA.dart';
+main(B b) {
+ A.foo();
+}
+''');
+ }
+
void test_changeToStaticAccess_method_prefixLibrary() {
resolveTestUnit('''
import 'dart:async' as pref;
@@ -219,6 +243,33 @@
''');
}
+ void test_changeToStaticAccess_property_importType() {
+ addSource('/libA.dart', r'''
+library libA;
+class A {
+ static get foo => null;
+}
+''');
+ addSource('/libB.dart', r'''
+library libB;
+import 'libA.dart';
+class B extends A {}
+''');
+ resolveTestUnit('''
+import 'libB.dart';
+main(B b) {
+ b.foo;
+}
+''');
+ assertHasFix(FixKind.CHANGE_TO_STATIC_ACCESS, '''
+import 'libB.dart';
+import 'libA.dart';
+main(B b) {
+ A.foo;
+}
+''');
+ }
+
void test_createClass() {
resolveTestUnit('''
main() {
@@ -408,6 +459,32 @@
''');
}
+ void test_createConstructorSuperImplicit_importType() {
+ addSource('/libA.dart', r'''
+library libA;
+class A {}
+''');
+ addSource('/libB.dart', r'''
+library libB;
+import 'libA.dart';
+class B {
+ B(A a);
+}
+''');
+ resolveTestUnit('''
+import 'libB.dart';
+class C extends B {
+}
+''');
+ assertHasFix(FixKind.CREATE_CONSTRUCTOR_SUPER, '''
+import 'libB.dart';
+import 'libA.dart';
+class C extends B {
+ C(A a) : super(a);
+}
+''');
+ }
+
void test_createConstructorSuperImplicit_named() {
resolveTestUnit('''
class A {
@@ -584,6 +661,36 @@
''');
}
+ void test_createField_importType() {
+ addSource('/libA.dart', r'''
+library libA;
+class A {}
+''');
+ addSource('/libB.dart', r'''
+library libB;
+import 'libA.dart';
+A getA() => null;
+''');
+ resolveTestUnit('''
+import 'libB.dart';
+class C {
+}
+main(C c) {
+ c.test = getA();
+}
+''');
+ assertHasFix(FixKind.CREATE_FIELD, '''
+import 'libB.dart';
+import 'libA.dart';
+class C {
+ A test;
+}
+main(C c) {
+ c.test = getA();
+}
+''');
+ }
+
void test_createField_setter_generic_BAD() {
resolveTestUnit('''
class A {
@@ -1477,6 +1584,34 @@
''');
}
+ void test_creationFunction_forFunctionType_importType() {
+ addSource('/libA.dart', r'''
+library libA;
+class A {}
+''');
+ addSource('/libB.dart', r'''
+library libB;
+import 'libA.dart';
+useFunction(int g(A a)) {}
+''');
+ resolveTestUnit('''
+import 'libB.dart';
+main() {
+ useFunction(test);
+}
+''');
+ assertHasFix(FixKind.CREATE_FUNCTION, '''
+import 'libB.dart';
+import 'libA.dart';
+main() {
+ useFunction(test);
+}
+
+int test(A a) {
+}
+''');
+ }
+
void test_creationFunction_forFunctionType_method_enclosingClass_static() {
resolveTestUnit('''
class A {
@@ -1540,8 +1675,7 @@
''');
}
- void
- test_creationFunction_forFunctionType_method_targetClass_hasOtherMember() {
+ void test_creationFunction_forFunctionType_method_targetClass_hasOtherMember() {
resolveTestUnit('''
main(A a) {
useFunction(a.test);
@@ -1602,7 +1736,7 @@
''');
}
- void test_importLibraryPackage_withType() {
+ void test_importLibraryPackage_withClass() {
_configureMyPkg('''
library my_lib;
class Test {}
@@ -1623,6 +1757,23 @@
''');
}
+ void test_importLibraryPrefix_withClass() {
+ resolveTestUnit('''
+import 'dart:async' as pref;
+main() {
+ pref.Stream s = null;
+ Future f = null;
+}
+''');
+ assertHasFix(FixKind.IMPORT_LIBRARY_PREFIX, '''
+import 'dart:async' as pref;
+main() {
+ pref.Stream s = null;
+ pref.Future f = null;
+}
+''');
+ }
+
void test_importLibraryPrefix_withTopLevelVariable() {
resolveTestUnit('''
import 'dart:math' as pref;
@@ -1640,19 +1791,87 @@
''');
}
- void test_importLibraryPrefix_withType() {
- resolveTestUnit('''
-import 'dart:async' as pref;
-main() {
- pref.Stream s = null;
- Future f = null;
+ void test_importLibraryProject_withClass_annotation() {
+ addSource('/lib.dart', '''
+library lib;
+class Test {
+ const Test(int p);
}
''');
- assertHasFix(FixKind.IMPORT_LIBRARY_PREFIX, '''
-import 'dart:async' as pref;
+ resolveTestUnit('''
+@Test(0)
main() {
- pref.Stream s = null;
- pref.Future f = null;
+}
+''');
+ performAllAnalysisTasks();
+ assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, '''
+import 'lib.dart';
+
+@Test(0)
+main() {
+}
+''');
+ }
+
+ void test_importLibraryProject_withClass_inParentFolder() {
+ testFile = '/project/bin/test.dart';
+ addSource('/project/lib.dart', '''
+library lib;
+class Test {}
+''');
+ resolveTestUnit('''
+main() {
+ Test t = null;
+}
+''');
+ performAllAnalysisTasks();
+ assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, '''
+import '../lib.dart';
+
+main() {
+ Test t = null;
+}
+''');
+ }
+
+ void test_importLibraryProject_withClass_inRelativeFolder() {
+ testFile = '/project/bin/test.dart';
+ addSource('/project/lib/sub/folder/lib.dart', '''
+library lib;
+class Test {}
+''');
+ resolveTestUnit('''
+main() {
+ Test t = null;
+}
+''');
+ performAllAnalysisTasks();
+ assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, '''
+import '../lib/sub/folder/lib.dart';
+
+main() {
+ Test t = null;
+}
+''');
+ }
+
+ void test_importLibraryProject_withClass_inSameFolder() {
+ testFile = '/project/bin/test.dart';
+ addSource('/project/bin/lib.dart', '''
+library lib;
+class Test {}
+''');
+ resolveTestUnit('''
+main() {
+ Test t = null;
+}
+''');
+ performAllAnalysisTasks();
+ assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, '''
+import 'lib.dart';
+
+main() {
+ Test t = null;
}
''');
}
@@ -1701,6 +1920,27 @@
''');
}
+ void test_importLibraryProject_withFunctionTypeAlias() {
+ testFile = '/project/bin/test.dart';
+ addSource('/project/bin/lib.dart', '''
+library lib;
+typedef MyFunction();
+''');
+ resolveTestUnit('''
+main() {
+ MyFunction t = null;
+}
+''');
+ performAllAnalysisTasks();
+ assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, '''
+import 'lib.dart';
+
+main() {
+ MyFunction t = null;
+}
+''');
+ }
+
void test_importLibraryProject_withTopLevelVariable() {
addSource('/lib.dart', '''
library lib;
@@ -1721,87 +1961,92 @@
''');
}
- void test_importLibraryProject_withType_annotation() {
- addSource('/lib.dart', '''
-library lib;
-class Test {
- const Test(int p);
-}
-''');
+ void test_importLibrarySdk_withClass_AsExpression() {
resolveTestUnit('''
-@Test(0)
-main() {
+main(p) {
+ p as Future;
}
''');
- performAllAnalysisTasks();
- assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, '''
-import 'lib.dart';
+ assertHasFix(FixKind.IMPORT_LIBRARY_SDK, '''
+import 'dart:async';
-@Test(0)
-main() {
+main(p) {
+ p as Future;
}
''');
}
- void test_importLibraryProject_withType_inParentFolder() {
- testFile = '/project/bin/test.dart';
- addSource('/project/lib.dart', '''
-library lib;
-class Test {}
-''');
+ void test_importLibrarySdk_withClass_invocationTarget() {
resolveTestUnit('''
main() {
- Test t = null;
+ Future.wait(null);
}
''');
- performAllAnalysisTasks();
- assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, '''
-import '../lib.dart';
+ assertHasFix(FixKind.IMPORT_LIBRARY_SDK, '''
+import 'dart:async';
main() {
- Test t = null;
+ Future.wait(null);
}
''');
}
- void test_importLibraryProject_withType_inRelativeFolder() {
- testFile = '/project/bin/test.dart';
- addSource('/project/lib/sub/folder/lib.dart', '''
-library lib;
-class Test {}
-''');
+ void test_importLibrarySdk_withClass_IsExpression() {
resolveTestUnit('''
-main() {
- Test t = null;
+main(p) {
+ p is Future;
}
''');
- performAllAnalysisTasks();
- assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, '''
-import '../lib/sub/folder/lib.dart';
+ assertHasFix(FixKind.IMPORT_LIBRARY_SDK, '''
+import 'dart:async';
-main() {
- Test t = null;
+main(p) {
+ p is Future;
}
''');
}
- void test_importLibraryProject_withType_inSameFolder() {
- testFile = '/project/bin/test.dart';
- addSource('/project/bin/lib.dart', '''
-library lib;
-class Test {}
-''');
+ void test_importLibrarySdk_withClass_typeAnnotation() {
resolveTestUnit('''
main() {
- Test t = null;
+ Future f = null;
}
''');
- performAllAnalysisTasks();
- assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, '''
-import 'lib.dart';
+ assertHasFix(FixKind.IMPORT_LIBRARY_SDK, '''
+import 'dart:async';
main() {
- Test t = null;
+ Future f = null;
+}
+''');
+ }
+
+ void test_importLibrarySdk_withClass_typeAnnotation_PrefixedIdentifier() {
+ resolveTestUnit('''
+main() {
+ Future.wait;
+}
+''');
+ assertHasFix(FixKind.IMPORT_LIBRARY_SDK, '''
+import 'dart:async';
+
+main() {
+ Future.wait;
+}
+''');
+ }
+
+ void test_importLibrarySdk_withClass_typeArgument() {
+ resolveTestUnit('''
+main() {
+ List<Future> futures = [];
+}
+''');
+ assertHasFix(FixKind.IMPORT_LIBRARY_SDK, '''
+import 'dart:async';
+
+main() {
+ List<Future> futures = [];
}
''');
}
@@ -1838,96 +2083,6 @@
''');
}
- void test_importLibrarySdk_withType_AsExpression() {
- resolveTestUnit('''
-main(p) {
- p as Future;
-}
-''');
- assertHasFix(FixKind.IMPORT_LIBRARY_SDK, '''
-import 'dart:async';
-
-main(p) {
- p as Future;
-}
-''');
- }
-
- void test_importLibrarySdk_withType_invocationTarget() {
- resolveTestUnit('''
-main() {
- Future.wait(null);
-}
-''');
- assertHasFix(FixKind.IMPORT_LIBRARY_SDK, '''
-import 'dart:async';
-
-main() {
- Future.wait(null);
-}
-''');
- }
-
- void test_importLibrarySdk_withType_IsExpression() {
- resolveTestUnit('''
-main(p) {
- p is Future;
-}
-''');
- assertHasFix(FixKind.IMPORT_LIBRARY_SDK, '''
-import 'dart:async';
-
-main(p) {
- p is Future;
-}
-''');
- }
-
- void test_importLibrarySdk_withType_typeAnnotation() {
- resolveTestUnit('''
-main() {
- Future f = null;
-}
-''');
- assertHasFix(FixKind.IMPORT_LIBRARY_SDK, '''
-import 'dart:async';
-
-main() {
- Future f = null;
-}
-''');
- }
-
- void test_importLibrarySdk_withType_typeAnnotation_PrefixedIdentifier() {
- resolveTestUnit('''
-main() {
- Future.wait;
-}
-''');
- assertHasFix(FixKind.IMPORT_LIBRARY_SDK, '''
-import 'dart:async';
-
-main() {
- Future.wait;
-}
-''');
- }
-
- void test_importLibrarySdk_withType_typeArgument() {
- resolveTestUnit('''
-main() {
- List<Future> futures = [];
-}
-''');
- assertHasFix(FixKind.IMPORT_LIBRARY_SDK, '''
-import 'dart:async';
-
-main() {
- List<Future> futures = [];
-}
-''');
- }
-
void test_importLibraryShow() {
resolveTestUnit('''
import 'dart:async' show Stream;
@@ -2288,6 +2443,30 @@
''');
}
+ void test_undefinedFunction_create_importType() {
+ addSource('/lib.dart', r'''
+library lib;
+import 'dart:async';
+Future getFuture() => null;
+''');
+ resolveTestUnit('''
+import 'lib.dart';
+main() {
+ test(getFuture());
+}
+''');
+ assertHasFix(FixKind.CREATE_FUNCTION, '''
+import 'lib.dart';
+import 'dart:async';
+main() {
+ test(getFuture());
+}
+
+void test(Future future) {
+}
+''');
+ }
+
void test_undefinedFunction_create_nullArgument() {
resolveTestUnit('''
main() {
@@ -2654,31 +2833,27 @@
// linked positions
int index = 0;
_assertLinkedGroup(
- change.linkedEditGroups[index++],
- ['void myUndefinedMethod(']);
- _assertLinkedGroup(
- change.linkedEditGroups[index++],
+ change.linkedEditGroups[index++], ['void myUndefinedMethod(']);
+ _assertLinkedGroup(change.linkedEditGroups[index++],
['myUndefinedMethod(0', 'myUndefinedMethod(int']);
- _assertLinkedGroup(
- change.linkedEditGroups[index++],
- ['int i'],
- expectedSuggestions(
- LinkedEditSuggestionKind.TYPE,
- ['int', 'num', 'Object', 'Comparable']));
+ _assertLinkedGroup(change.linkedEditGroups[index++], [
+ 'int i'
+ ], expectedSuggestions(
+ LinkedEditSuggestionKind.TYPE, ['int', 'num', 'Object', 'Comparable']));
_assertLinkedGroup(change.linkedEditGroups[index++], ['i,']);
- _assertLinkedGroup(
- change.linkedEditGroups[index++],
- ['double d'],
- expectedSuggestions(
- LinkedEditSuggestionKind.TYPE,
- ['double', 'num', 'Object', 'Comparable']));
+ _assertLinkedGroup(change.linkedEditGroups[index++], [
+ 'double d'
+ ], expectedSuggestions(LinkedEditSuggestionKind.TYPE, [
+ 'double',
+ 'num',
+ 'Object',
+ 'Comparable'
+ ]));
_assertLinkedGroup(change.linkedEditGroups[index++], ['d,']);
- _assertLinkedGroup(
- change.linkedEditGroups[index++],
- ['String s'],
- expectedSuggestions(
- LinkedEditSuggestionKind.TYPE,
- ['String', 'Object', 'Comparable']));
+ _assertLinkedGroup(change.linkedEditGroups[index++], [
+ 'String s'
+ ], expectedSuggestions(
+ LinkedEditSuggestionKind.TYPE, ['String', 'Object', 'Comparable']));
_assertLinkedGroup(change.linkedEditGroups[index++], ['s)']);
}
@@ -2702,8 +2877,7 @@
''');
// linked positions
_assertLinkedGroup(change.linkedEditGroups[0], ['int myUndefinedMethod(']);
- _assertLinkedGroup(
- change.linkedEditGroups[1],
+ _assertLinkedGroup(change.linkedEditGroups[1],
['myUndefinedMethod();', 'myUndefinedMethod() {']);
}
@@ -2883,9 +3057,8 @@
provider.newFile('/packages/my_pkg/lib/my_lib.dart', myLibCode);
// configure SourceFactory
Folder myPkgFolder = provider.getResource('/packages/my_pkg/lib');
- UriResolver pkgResolver = new PackageMapUriResolver(provider, {
- 'my_pkg': [myPkgFolder]
- });
+ UriResolver pkgResolver =
+ new PackageMapUriResolver(provider, {'my_pkg': [myPkgFolder]});
context.sourceFactory = new SourceFactory(
[AbstractContextTest.SDK_RESOLVER, resourceResolver, pkgResolver]);
// force 'my_pkg' resolution
diff --git a/pkg/analysis_server/test/services/correction/levenshtein_test.dart b/pkg/analysis_server/test/services/correction/levenshtein_test.dart
index 5820acb..ecda77c 100644
--- a/pkg/analysis_server/test/services/correction/levenshtein_test.dart
+++ b/pkg/analysis_server/test/services/correction/levenshtein_test.dart
@@ -9,7 +9,6 @@
import '../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(LevenshteinTest);
diff --git a/pkg/analysis_server/test/services/correction/name_suggestion_test.dart b/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
index ee82145..a383efb 100644
--- a/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
+++ b/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
@@ -12,13 +12,11 @@
import '../../abstract_single_unit.dart';
import '../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(VariableNameSuggestionTest);
}
-
@reflectiveTest
class VariableNameSuggestionTest extends AbstractSingleUnitTest {
void test_forExpression_cast() {
@@ -30,8 +28,7 @@
''');
var excluded = new Set.from([]);
var expr = findNodeAtString('as String', (node) => node is AsExpression);
- expect(
- getVariableNameSuggestionsForExpression(null, expr, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expr, excluded),
unorderedEquals(['sortedNodes', 'nodes']));
}
@@ -47,9 +44,7 @@
Expression assignedExpression =
findNodeAtString('null;', (node) => node is NullLiteral);
List<String> suggestions = getVariableNameSuggestionsForExpression(
- expectedType,
- assignedExpression,
- excluded);
+ expectedType, assignedExpression, excluded);
expect(suggestions, unorderedEquals(['treeNode', 'node']));
}
@@ -62,18 +57,12 @@
DartType expectedType = (findElement('res') as LocalVariableElement).type;
Expression assignedExpression = findNodeAtString('0.0;');
// first choice for "double" is "d"
- expect(
- getVariableNameSuggestionsForExpression(
- expectedType,
- assignedExpression,
- new Set.from([])),
+ expect(getVariableNameSuggestionsForExpression(
+ expectedType, assignedExpression, new Set.from([])),
unorderedEquals(['d']));
// if "d" is used, try "e", "f", etc
- expect(
- getVariableNameSuggestionsForExpression(
- expectedType,
- assignedExpression,
- new Set.from(['d', 'e'])),
+ expect(getVariableNameSuggestionsForExpression(
+ expectedType, assignedExpression, new Set.from(['d', 'e'])),
unorderedEquals(['f']));
}
@@ -86,18 +75,12 @@
DartType expectedType = (findElement('res') as LocalVariableElement).type;
Expression assignedExpression = findNodeAtString('0;');
// first choice for "int" is "i"
- expect(
- getVariableNameSuggestionsForExpression(
- expectedType,
- assignedExpression,
- new Set.from([])),
+ expect(getVariableNameSuggestionsForExpression(
+ expectedType, assignedExpression, new Set.from([])),
unorderedEquals(['i']));
// if "i" is used, try "j", "k", etc
- expect(
- getVariableNameSuggestionsForExpression(
- expectedType,
- assignedExpression,
- new Set.from(['i', 'j'])),
+ expect(getVariableNameSuggestionsForExpression(
+ expectedType, assignedExpression, new Set.from(['i', 'j'])),
unorderedEquals(['k']));
}
@@ -110,11 +93,8 @@
DartType expectedType = (findElement('res') as LocalVariableElement).type;
Expression assignedExpression = findNodeAtString("'abc';");
// first choice for "String" is "s"
- expect(
- getVariableNameSuggestionsForExpression(
- expectedType,
- assignedExpression,
- new Set.from([])),
+ expect(getVariableNameSuggestionsForExpression(
+ expectedType, assignedExpression, new Set.from([])),
unorderedEquals(['s']));
}
@@ -129,17 +109,11 @@
}
''');
var excluded = new Set.from([]);
- expect(
- getVariableNameSuggestionsForExpression(
- null,
- findNodeAtString('new NoSuchClass()'),
- excluded),
+ expect(getVariableNameSuggestionsForExpression(
+ null, findNodeAtString('new NoSuchClass()'), excluded),
unorderedEquals(['noSuchClass', 'suchClass', 'class']));
- expect(
- getVariableNameSuggestionsForExpression(
- null,
- findNodeAtString('new NoSuchClass.named()'),
- excluded),
+ expect(getVariableNameSuggestionsForExpression(
+ null, findNodeAtString('new NoSuchClass.named()'), excluded),
unorderedEquals(['noSuchClass', 'suchClass', 'class']));
// TODO(scheglov) This test does not work.
// In "p.NoSuchClass" the identifier "p" is not resolved to a PrefixElement.
@@ -161,20 +135,17 @@
var excluded = new Set.from([]);
{
var expr = findNodeAtString('111');
- expect(
- getVariableNameSuggestionsForExpression(null, expr, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expr, excluded),
unorderedEquals(['a']));
}
{
var expr = findNodeAtString('222');
- expect(
- getVariableNameSuggestionsForExpression(null, expr, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expr, excluded),
unorderedEquals(['b']));
}
{
var expr = findNodeAtString('333');
- expect(
- getVariableNameSuggestionsForExpression(null, expr, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expr, excluded),
unorderedEquals(['c']));
}
}
@@ -189,20 +160,17 @@
var excluded = new Set.from([]);
{
var expr = findNodeAtString('111');
- expect(
- getVariableNameSuggestionsForExpression(null, expr, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expr, excluded),
unorderedEquals(['a']));
}
{
var expr = findNodeAtString('222');
- expect(
- getVariableNameSuggestionsForExpression(null, expr, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expr, excluded),
unorderedEquals(['b']));
}
{
var expr = findNodeAtString('333');
- expect(
- getVariableNameSuggestionsForExpression(null, expr, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expr, excluded),
unorderedEquals(['c']));
}
}
@@ -217,14 +185,12 @@
var excluded = new Set.from([]);
{
var expr = findNodeAtString('111');
- expect(
- getVariableNameSuggestionsForExpression(null, expr, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expr, excluded),
unorderedEquals(['a']));
}
{
var expr = findNodeAtString('222');
- expect(
- getVariableNameSuggestionsForExpression(null, expr, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expr, excluded),
unorderedEquals(['b']));
}
}
@@ -237,8 +203,7 @@
''');
var excluded = new Set.from([]);
var expr = findNodeAtString('p.get', (node) => node is MethodInvocation);
- expect(
- getVariableNameSuggestionsForExpression(null, expr, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expr, excluded),
unorderedEquals(['sortedNodes', 'nodes']));
}
@@ -250,8 +215,7 @@
''');
var excluded = new Set.from([]);
var expr = findNodeAtString('p.sorted', (node) => node is MethodInvocation);
- expect(
- getVariableNameSuggestionsForExpression(null, expr, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expr, excluded),
unorderedEquals(['sortedNodes', 'nodes']));
}
@@ -263,8 +227,7 @@
''');
var excluded = new Set.from([]);
var expr = findNodeAtString('p.get', (node) => node is MethodInvocation);
- expect(
- getVariableNameSuggestionsForExpression(null, expr, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expr, excluded),
unorderedEquals([]));
}
@@ -275,12 +238,9 @@
}
''');
var excluded = new Set.from([]);
- expect(
- getVariableNameSuggestionsForExpression(
- null,
- findNodeAtString('p.sorted', (node) => node is PrefixedIdentifier),
- excluded),
- unorderedEquals(['sortedNodes', 'nodes']));
+ expect(getVariableNameSuggestionsForExpression(null,
+ findNodeAtString('p.sorted', (node) => node is PrefixedIdentifier),
+ excluded), unorderedEquals(['sortedNodes', 'nodes']));
}
void test_forExpression_privateName() {
@@ -291,18 +251,12 @@
}
''');
var excluded = new Set.from([]);
- expect(
- getVariableNameSuggestionsForExpression(
- null,
- findNodeAtString('p._name', (node) => node is PrefixedIdentifier),
- excluded),
- unorderedEquals(['name']));
- expect(
- getVariableNameSuggestionsForExpression(
- null,
- findNodeAtString('p._compute', (node) => node is MethodInvocation),
- excluded),
- unorderedEquals(['computeSuffix', 'suffix']));
+ expect(getVariableNameSuggestionsForExpression(null,
+ findNodeAtString('p._name', (node) => node is PrefixedIdentifier),
+ excluded), unorderedEquals(['name']));
+ expect(getVariableNameSuggestionsForExpression(null,
+ findNodeAtString('p._compute', (node) => node is MethodInvocation),
+ excluded), unorderedEquals(['computeSuffix', 'suffix']));
}
void test_forExpression_propertyAccess() {
@@ -314,8 +268,7 @@
var excluded = new Set.from([]);
PropertyAccess expression =
findNodeAtString('p.q.sorted', (node) => node is PropertyAccess);
- expect(
- getVariableNameSuggestionsForExpression(null, expression, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expression, excluded),
unorderedEquals(['sortedNodes', 'nodes']));
}
@@ -328,8 +281,7 @@
''');
var excluded = new Set.from([]);
var expr = findNodeAtString('sortedNodes;');
- expect(
- getVariableNameSuggestionsForExpression(null, expr, excluded),
+ expect(getVariableNameSuggestionsForExpression(null, expr, excluded),
unorderedEquals(['sortedNodes', 'nodes']));
}
@@ -341,11 +293,8 @@
}
''');
var excluded = new Set.from([]);
- expect(
- getVariableNameSuggestionsForExpression(
- null,
- findNodeAtString('getSortedNodes();', (node) => node is MethodInvocation),
- excluded),
+ expect(getVariableNameSuggestionsForExpression(null, findNodeAtString(
+ 'getSortedNodes();', (node) => node is MethodInvocation), excluded),
unorderedEquals(['sortedNodes', 'nodes']));
}
@@ -354,16 +303,14 @@
Set excluded = new Set.from([]);
List<String> suggestions =
getVariableNameSuggestionsForText('Goodbye, cruel world!', excluded);
- expect(
- suggestions,
+ expect(suggestions,
unorderedEquals(['goodbyeCruelWorld', 'cruelWorld', 'world']));
}
{
Set excluded = new Set.from(['world']);
List<String> suggestions =
getVariableNameSuggestionsForText('Goodbye, cruel world!', excluded);
- expect(
- suggestions,
+ expect(suggestions,
unorderedEquals(['goodbyeCruelWorld', 'cruelWorld', 'world2']));
}
}
@@ -373,14 +320,12 @@
}
void test_getCamelWords_multipleUpper() {
- expect(
- getCamelWords('sortedHTMLNodes'),
+ expect(getCamelWords('sortedHTMLNodes'),
unorderedEquals(['sorted', 'HTML', 'Nodes']));
}
void test_getCamelWords_simpleCamel() {
- expect(
- getCamelWords('mySimpleText'),
+ expect(getCamelWords('mySimpleText'),
unorderedEquals(['my', 'Simple', 'Text']));
}
diff --git a/pkg/analysis_server/test/services/correction/sort_members_test.dart b/pkg/analysis_server/test/services/correction/sort_members_test.dart
index 70eb570..b0f96a4 100644
--- a/pkg/analysis_server/test/services/correction/sort_members_test.dart
+++ b/pkg/analysis_server/test/services/correction/sort_members_test.dart
@@ -11,13 +11,11 @@
import '../../abstract_single_unit.dart';
import '../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(SortMembersTest);
}
-
@reflectiveTest
class SortMembersTest extends AbstractSingleUnitTest {
void test_classMembers_accessor() {
@@ -483,7 +481,7 @@
import 'dart:a';
import 'package:b';
-main() {
+foo() {
}
f() => null;
@@ -496,11 +494,31 @@
f() => null;
-main() {
+foo() {
}
''');
}
+ void test_unitMembers_mainFirst() {
+ _parseTestUnit(r'''
+class C {}
+aaa() {}
+get bbb() {}
+class A {}
+main() {}
+class B {}
+''');
+ // validate change
+ _assertSort(r'''
+main() {}
+get bbb() {}
+aaa() {}
+class A {}
+class B {}
+class C {}
+''');
+ }
+
void test_unitMembers_mix() {
_parseTestUnit(r'''
_mmm() {}
diff --git a/pkg/analysis_server/test/services/correction/source_range_test.dart b/pkg/analysis_server/test/services/correction/source_range_test.dart
index 5881a77..8b501bf 100644
--- a/pkg/analysis_server/test/services/correction/source_range_test.dart
+++ b/pkg/analysis_server/test/services/correction/source_range_test.dart
@@ -15,13 +15,11 @@
import '../../abstract_single_unit.dart';
import '../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(SourceRangesTest);
}
-
@reflectiveTest
class SourceRangesTest extends AbstractSingleUnitTest {
void test_rangeElementName() {
diff --git a/pkg/analysis_server/test/services/correction/status_test.dart b/pkg/analysis_server/test/services/correction/status_test.dart
index 93f9a08..66bcd6d 100644
--- a/pkg/analysis_server/test/services/correction/status_test.dart
+++ b/pkg/analysis_server/test/services/correction/status_test.dart
@@ -16,14 +16,12 @@
import '../../abstract_single_unit.dart';
import '../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(RefactoringLocationTest);
runReflectiveTests(RefactoringStatusTest);
}
-
@reflectiveTest
class RefactoringLocationTest extends AbstractSingleUnitTest {
void test_createLocation_forElement() {
@@ -74,7 +72,6 @@
}
}
-
@reflectiveTest
class RefactoringStatusTest {
void test_addError() {
diff --git a/pkg/analysis_server/test/services/correction/strings_test.dart b/pkg/analysis_server/test/services/correction/strings_test.dart
index b84c022..a2b263e 100644
--- a/pkg/analysis_server/test/services/correction/strings_test.dart
+++ b/pkg/analysis_server/test/services/correction/strings_test.dart
@@ -9,14 +9,11 @@
import '../../reflective_tests.dart';
-
-
main() {
groupSep = ' | ';
runReflectiveTests(StringsTest);
}
-
@reflectiveTest
class StringsTest {
void test_capitalize() {
diff --git a/pkg/analysis_server/test/services/dependencies/library_dependencies_test.dart b/pkg/analysis_server/test/services/dependencies/library_dependencies_test.dart
index 8cdb9e2..3f2408e 100644
--- a/pkg/analysis_server/test/services/dependencies/library_dependencies_test.dart
+++ b/pkg/analysis_server/test/services/dependencies/library_dependencies_test.dart
@@ -15,10 +15,8 @@
runReflectiveTests(LibraryDependenciesTest);
}
-
@reflectiveTest
class LibraryDependenciesTest extends AbstractContextTest {
-
test_LibraryDependencies() {
addSource('/lib1.dart', 'import "lib2.dart";');
addSource('/lib2.dart', 'import "lib1.dart";');
diff --git a/pkg/analysis_server/test/services/index/dart_index_contributor_test.dart b/pkg/analysis_server/test/services/index/dart_index_contributor_test.dart
index eb56ce8..6cda753 100644
--- a/pkg/analysis_server/test/services/index/dart_index_contributor_test.dart
+++ b/pkg/analysis_server/test/services/index/dart_index_contributor_test.dart
@@ -16,27 +16,19 @@
import '../../abstract_single_unit.dart';
import '../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(DartUnitContributorTest);
}
-
/**
* Returns `true` if the [actual] location the same properties as [expected].
*/
bool _equalsLocation(Location actual, ExpectedLocation expected) {
- return _equalsLocationProperties(
- actual,
- expected.element,
- expected.offset,
- expected.length,
- expected.isQualified,
- expected.isResolved);
+ return _equalsLocationProperties(actual, expected.element, expected.offset,
+ expected.length, expected.isQualified, expected.isResolved);
}
-
/**
* Returns `true` if the [actual] location the expected properties.
*/
@@ -49,7 +41,6 @@
isResolved == actual.isResolved;
}
-
bool _equalsRecordedRelation(RecordedRelation recordedRelation,
Element expectedElement, Relationship expectedRelationship,
ExpectedLocation expectedLocation) {
@@ -60,11 +51,11 @@
_equalsLocation(recordedRelation.location, expectedLocation));
}
-
@reflectiveTest
class DartUnitContributorTest extends AbstractSingleUnitTest {
IndexStore store = new MockIndexStore();
List<RecordedRelation> recordedRelations = <RecordedRelation>[];
+ List<Element> recordedTopElements = <Element>[];
CompilationUnitElement importedUnit({int index: 0}) {
List<ImportElement> imports = testLibraryElement.imports;
@@ -74,14 +65,13 @@
void setUp() {
super.setUp();
when(store.aboutToIndexDart(context, anyObject)).thenReturn(true);
- when(
- store.recordRelationship(
- anyObject,
- anyObject,
- anyObject)).thenInvoke(
- (Element element, Relationship relationship, Location location) {
- recordedRelations.add(
- new RecordedRelation(element, relationship, location));
+ when(store.recordRelationship(anyObject, anyObject, anyObject)).thenInvoke(
+ (Element element, Relationship relationship, Location location) {
+ recordedRelations
+ .add(new RecordedRelation(element, relationship, location));
+ });
+ when(store.recordTopLevelDeclaration(anyObject)).thenInvoke((Element element) {
+ recordedTopElements.add(element);
});
}
@@ -90,9 +80,7 @@
// prepare elements
ClassElement classElement = findElement("A");
// verify
- _assertDefinesTopLevelElement(
- IndexConstants.DEFINES,
- _expectedLocation(classElement, 'A {}'));
+ _assertDefinesTopLevelElement(classElement);
}
void test_definesClassAlias() {
@@ -102,9 +90,7 @@
// prepare elements
Element classElement = findElement("MyClass");
// verify
- _assertDefinesTopLevelElement(
- IndexConstants.DEFINES,
- _expectedLocation(classElement, 'MyClass ='));
+ _assertDefinesTopLevelElement(classElement);
}
void test_definesClassEnum() {
@@ -112,9 +98,7 @@
// prepare elements
ClassElement classElement = findElement("MyEnum");
// verify
- _assertDefinesTopLevelElement(
- IndexConstants.DEFINES,
- _expectedLocation(classElement, 'MyEnum {'));
+ _assertDefinesTopLevelElement(classElement);
}
void test_definesFunction() {
@@ -122,20 +106,15 @@
// prepare elements
FunctionElement functionElement = findElement("myFunction");
// verify
- _assertDefinesTopLevelElement(
- IndexConstants.DEFINES,
- _expectedLocation(functionElement, 'myFunction() {}'));
+ _assertDefinesTopLevelElement(functionElement);
}
-
void test_definesFunctionType() {
_indexTestUnit('typedef MyFunction(int p);');
// prepare elements
FunctionTypeAliasElement typeAliasElement = findElement("MyFunction");
// verify
- _assertDefinesTopLevelElement(
- IndexConstants.DEFINES,
- _expectedLocation(typeAliasElement, 'MyFunction(int p);'));
+ _assertDefinesTopLevelElement(typeAliasElement);
}
void test_definesVariable() {
@@ -143,9 +122,7 @@
// prepare elements
VariableElement varElement = findElement("myVar");
// verify
- _assertDefinesTopLevelElement(
- IndexConstants.DEFINES,
- _expectedLocation(varElement, 'myVar = 42;'));
+ _assertDefinesTopLevelElement(varElement);
}
void test_forIn() {
@@ -158,10 +135,8 @@
Element mainElement = findElement("main");
VariableElement variableElement = findElement("v");
// verify
- _assertNoRecordedRelation(
- variableElement,
- IndexConstants.IS_READ_BY,
- _expectedLocation(mainElement, 'v in []'));
+ _assertNoRecordedRelation(variableElement,
+ IndexConstants.IS_READ_BY, _expectedLocation(mainElement, 'v in []'));
}
void test_isDefinedBy_NameElement_method() {
@@ -173,13 +148,10 @@
Element methodElement = findElement("m");
Element nameElement = new NameElement("m");
// verify
- _assertRecordedRelation(
- nameElement,
- IndexConstants.NAME_IS_DEFINED_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.NAME_IS_DEFINED_BY,
_expectedLocation(methodElement, 'm() {}'));
}
-
void test_isDefinedBy_NameElement_operator() {
_indexTestUnit('''
class A {
@@ -189,9 +161,7 @@
Element methodElement = findElement("+");
Element nameElement = new NameElement("+");
// verify
- _assertRecordedRelation(
- nameElement,
- IndexConstants.NAME_IS_DEFINED_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.NAME_IS_DEFINED_BY,
_expectedLocation(methodElement, '+(o) {}', length: 1));
}
@@ -204,9 +174,7 @@
ClassElement classElementA = findElement("A");
ClassElement classElementB = findElement("B");
// verify
- _assertRecordedRelation(
- classElementA,
- IndexConstants.IS_EXTENDED_BY,
+ _assertRecordedRelation(classElementA, IndexConstants.IS_EXTENDED_BY,
_expectedLocation(classElementB, 'A {} // 2'));
}
@@ -218,9 +186,7 @@
ClassElement classElementA = findElement("A");
ClassElement classElementObject = classElementA.supertype.element;
// verify
- _assertRecordedRelation(
- classElementObject,
- IndexConstants.IS_EXTENDED_BY,
+ _assertRecordedRelation(classElementObject, IndexConstants.IS_EXTENDED_BY,
_expectedLocation(classElementA, 'A {}', length: 0));
}
@@ -234,9 +200,7 @@
ClassElement classElementA = findElement("A");
ClassElement classElementC = findElement("C");
// verify
- _assertRecordedRelation(
- classElementA,
- IndexConstants.IS_EXTENDED_BY,
+ _assertRecordedRelation(classElementA, IndexConstants.IS_EXTENDED_BY,
_expectedLocation(classElementC, 'A with'));
}
@@ -249,9 +213,7 @@
ClassElement classElementA = findElement("A");
ClassElement classElementB = findElement("B");
// verify
- _assertRecordedRelation(
- classElementA,
- IndexConstants.IS_IMPLEMENTED_BY,
+ _assertRecordedRelation(classElementA, IndexConstants.IS_IMPLEMENTED_BY,
_expectedLocation(classElementB, 'A {} // 2'));
}
@@ -265,9 +227,7 @@
ClassElement classElementB = findElement("B");
ClassElement classElementC = findElement("C");
// verify
- _assertRecordedRelation(
- classElementB,
- IndexConstants.IS_IMPLEMENTED_BY,
+ _assertRecordedRelation(classElementB, IndexConstants.IS_IMPLEMENTED_BY,
_expectedLocation(classElementC, 'B; // 3'));
}
@@ -285,13 +245,9 @@
FieldElement fieldElement = findElement("field");
PropertyAccessorElement getterElement = fieldElement.getter;
// verify
- _assertRecordedRelation(
- getterElement,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(getterElement, IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, 'field(); // q'));
- _assertRecordedRelation(
- getterElement,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(getterElement, IndexConstants.IS_INVOKED_BY,
_expectedLocation(mainElement, 'field(); // nq'));
}
@@ -311,17 +267,12 @@
Element mainElement = findElement("main");
FunctionElement functionElement = importedUnit().functions[0];
// verify
- _assertRecordedRelation(
- functionElement,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(functionElement, IndexConstants.IS_INVOKED_BY,
_expectedLocation(mainElement, 'foo(); // q'));
- _assertRecordedRelation(
- functionElement,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(functionElement, IndexConstants.IS_INVOKED_BY,
_expectedLocation(mainElement, 'foo(); // nq'));
}
-
void test_isInvokedBy_LocalVariableElement() {
_indexTestUnit('''
main() {
@@ -332,10 +283,8 @@
Element mainElement = findElement("main");
Element element = findElement("v");
// verify
- _assertRecordedRelation(
- element,
- IndexConstants.IS_INVOKED_BY,
- _expectedLocation(mainElement, 'v();'));
+ _assertRecordedRelation(element,
+ IndexConstants.IS_INVOKED_BY, _expectedLocation(mainElement, 'v();'));
}
void test_isInvokedBy_MethodElement() {
@@ -351,13 +300,9 @@
Element mainElement = findElement("main");
Element methodElement = findElement("foo");
// verify
- _assertRecordedRelation(
- methodElement,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(methodElement, IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, 'foo(); // q'));
- _assertRecordedRelation(
- methodElement,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(methodElement, IndexConstants.IS_INVOKED_BY,
_expectedLocation(mainElement, 'foo(); // nq'));
}
@@ -375,9 +320,7 @@
Element mainElement = findElement("main");
Element methodElement = findElement("foo");
// verify
- _assertRecordedRelation(
- methodElement,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(methodElement, IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, 'foo();'));
}
@@ -397,21 +340,13 @@
MethodElement element = findElement('+');
Element mainElement = findElement('main');
// verify
- _assertRecordedRelation(
- element,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(element, IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '+ 1', length: 1));
- _assertRecordedRelation(
- element,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(element, IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '+= 2', length: 2));
- _assertRecordedRelation(
- element,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(element, IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '++a;', length: 2));
- _assertRecordedRelation(
- element,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(element, IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '++;', length: 2));
}
@@ -431,13 +366,9 @@
MethodElement writeElement = findElement("[]=");
Element mainElement = findElement('main');
// verify
- _assertRecordedRelation(
- readElement,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(readElement, IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '[0]', length: 1));
- _assertRecordedRelation(
- writeElement,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(writeElement, IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '[1] =', length: 1));
}
@@ -454,9 +385,7 @@
MethodElement element = findElement("~");
Element mainElement = findElement('main');
// verify
- _assertRecordedRelation(
- element,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(element, IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '~a', length: 1));
}
@@ -469,10 +398,8 @@
Element mainElement = findElement("main");
Element element = findElement("p");
// verify
- _assertRecordedRelation(
- element,
- IndexConstants.IS_INVOKED_BY,
- _expectedLocation(mainElement, 'p();'));
+ _assertRecordedRelation(element,
+ IndexConstants.IS_INVOKED_BY, _expectedLocation(mainElement, 'p();'));
}
void test_isMixedInBy_ClassDeclaration() {
@@ -484,9 +411,7 @@
ClassElement classElementA = findElement("A");
ClassElement classElementB = findElement("B");
// verify
- _assertRecordedRelation(
- classElementA,
- IndexConstants.IS_MIXED_IN_BY,
+ _assertRecordedRelation(classElementA, IndexConstants.IS_MIXED_IN_BY,
_expectedLocation(classElementB, 'A {} // 2'));
}
@@ -499,9 +424,7 @@
ClassElement classElementA = findElement("A");
ClassElement classElementB = findElement("B");
// verify
- _assertRecordedRelation(
- classElementA,
- IndexConstants.IS_MIXED_IN_BY,
+ _assertRecordedRelation(classElementA, IndexConstants.IS_MIXED_IN_BY,
_expectedLocation(classElementB, 'A; // 2'));
}
@@ -515,10 +438,8 @@
Element mainElement = findElement("main");
Element parameterElement = findElement("p");
// verify
- _assertRecordedRelation(
- parameterElement,
- IndexConstants.IS_READ_BY,
- _expectedLocation(mainElement, 'p);'));
+ _assertRecordedRelation(parameterElement,
+ IndexConstants.IS_READ_BY, _expectedLocation(mainElement, 'p);'));
}
void test_isReadBy_VariableElement() {
@@ -532,10 +453,8 @@
Element mainElement = findElement("main");
Element variableElement = findElement("v");
// verify
- _assertRecordedRelation(
- variableElement,
- IndexConstants.IS_READ_BY,
- _expectedLocation(mainElement, 'v);'));
+ _assertRecordedRelation(variableElement,
+ IndexConstants.IS_READ_BY, _expectedLocation(mainElement, 'v);'));
}
void test_isReadWrittenBy_ParameterElement() {
@@ -548,9 +467,7 @@
Element mainElement = findElement("main");
Element parameterElement = findElement("p");
// verify
- _assertRecordedRelation(
- parameterElement,
- IndexConstants.IS_READ_WRITTEN_BY,
+ _assertRecordedRelation(parameterElement, IndexConstants.IS_READ_WRITTEN_BY,
_expectedLocation(mainElement, 'p += 1'));
}
@@ -565,9 +482,7 @@
Element mainElement = findElement("main");
Element variableElement = findElement("v");
// verify
- _assertRecordedRelation(
- variableElement,
- IndexConstants.IS_READ_WRITTEN_BY,
+ _assertRecordedRelation(variableElement, IndexConstants.IS_READ_WRITTEN_BY,
_expectedLocation(mainElement, 'v += 1'));
}
@@ -589,25 +504,15 @@
ParameterElement pElement = findElement("p");
VariableElement vElement = findElement("v");
// verify
- _assertRecordedRelation(
- aElement,
- IndexConstants.IS_REFERENCED_BY,
- _expectedLocation(pElement, 'A p) {'));
- _assertRecordedRelation(
- aElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(aElement,
+ IndexConstants.IS_REFERENCED_BY, _expectedLocation(pElement, 'A p) {'));
+ _assertRecordedRelation(aElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(vElement, 'A v;'));
- _assertRecordedRelation(
- aElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(aElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'A(); // 2'));
- _assertRecordedRelation(
- aElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(aElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'A.field = 1;'));
- _assertRecordedRelation(
- aElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(aElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'A.field); // 3'));
}
@@ -624,13 +529,9 @@
ParameterElement pElement = findElement("p");
VariableElement vElement = findElement("v");
// verify
- _assertRecordedRelation(
- bElement,
- IndexConstants.IS_REFERENCED_BY,
- _expectedLocation(pElement, 'B p) {'));
- _assertRecordedRelation(
- bElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(bElement,
+ IndexConstants.IS_REFERENCED_BY, _expectedLocation(pElement, 'B p) {'));
+ _assertRecordedRelation(bElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(vElement, 'B v;'));
}
@@ -645,9 +546,7 @@
LibraryElement libElement = testLibraryElement.exportedLibraries[0];
CompilationUnitElement libUnitElement = libElement.definingCompilationUnit;
// verify
- _assertRecordedRelation(
- libUnitElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(libUnitElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(testUnitElement, "'lib.dart'", length: 10));
}
@@ -662,9 +561,7 @@
LibraryElement libElement = testLibraryElement.imports[0].importedLibrary;
CompilationUnitElement libUnitElement = libElement.definingCompilationUnit;
// verify
- _assertRecordedRelation(
- libUnitElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(libUnitElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(testUnitElement, "'lib.dart'", length: 10));
}
@@ -677,9 +574,7 @@
// prepare elements
CompilationUnitElement myUnitElement = testLibraryElement.parts[0];
// verify
- _assertRecordedRelation(
- myUnitElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(myUnitElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(testUnitElement, "'my_unit.dart';", length: 14));
}
@@ -711,26 +606,16 @@
ConstructorElement consB_bar =
findNodeElementAtString("B.bar()", isConstructor);
// A()
- _assertRecordedRelation(
- consA,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(consA, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(consB, '(); // marker-1', length: 0));
- _assertRecordedRelation(
- consA,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(consA, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, '(); // marker-main-1', length: 0));
// A.foo()
- _assertRecordedRelation(
- consA_foo,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(consA_foo, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(consB_foo, '.foo(); // marker-2', length: 4));
- _assertRecordedRelation(
- consA_foo,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(consA_foo, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(consB_bar, '.foo; // marker-3', length: 4));
- _assertRecordedRelation(
- consA_foo,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(consA_foo, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, '.foo(); // marker-main-2', length: 4));
}
@@ -754,14 +639,11 @@
ConstructorElement consA_named =
findNodeElementAtString("A.named()", isConstructor);
// verify
- _assertRecordedRelation(
- consA,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(consA, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, '(); // marker-main-1', length: 0));
- _assertRecordedRelation(
- consA_named,
- IndexConstants.IS_REFERENCED_BY,
- _expectedLocation(mainElement, '.named(); // marker-main-2', length: 6));
+ _assertRecordedRelation(consA_named, IndexConstants.IS_REFERENCED_BY,
+ _expectedLocation(mainElement, '.named(); // marker-main-2',
+ length: 6));
}
void test_isReferencedBy_ConstructorElement_redirection() {
@@ -781,14 +663,10 @@
ConstructorElement constructorA_bar =
findNodeElementAtString("A.bar()", isConstructor);
// A()
- _assertRecordedRelation(
- constructorA,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(constructorA, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(constructorA_foo, '(); // marker', length: 0));
// A.foo()
- _assertRecordedRelation(
- constructorA_bar,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(constructorA_bar, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(constructorA, '.bar();', length: 4));
}
@@ -815,26 +693,16 @@
PropertyAccessorElement getter = fieldElement.getter;
PropertyAccessorElement setter = fieldElement.setter;
// m()
- _assertRecordedRelation(
- setter,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(setter, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mElement, 'field = 1; // nq'));
- _assertRecordedRelation(
- getter,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(getter, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mElement, 'field); // nq'));
// main()
- _assertRecordedRelation(
- setter,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(setter, IndexConstants.IS_REFERENCED_BY,
_expectedLocationQ(mainElement, 'field = 2; // q'));
- _assertRecordedRelation(
- getter,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(getter, IndexConstants.IS_REFERENCED_BY,
_expectedLocationQ(mainElement, 'field); // q'));
- _assertRecordedRelation(
- fieldElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(fieldElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'field: 3'));
}
@@ -850,19 +718,13 @@
FunctionElement element = findElement("foo");
Element mainElement = findElement("main");
// "referenced" here
- _assertRecordedRelation(
- element,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(element, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'foo);'));
// only "invoked", but not "referenced"
{
- _assertRecordedRelation(
- element,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(element, IndexConstants.IS_INVOKED_BY,
_expectedLocation(mainElement, 'foo());'));
- _assertNoRecordedRelation(
- element,
- IndexConstants.IS_REFERENCED_BY,
+ _assertNoRecordedRelation(element, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'foo());'));
}
}
@@ -877,10 +739,8 @@
Element aElement = findElement('A');
Element pElement = findElement('p');
// verify
- _assertRecordedRelation(
- aElement,
- IndexConstants.IS_REFERENCED_BY,
- _expectedLocation(pElement, 'A p) {'));
+ _assertRecordedRelation(aElement,
+ IndexConstants.IS_REFERENCED_BY, _expectedLocation(pElement, 'A p) {'));
}
/**
@@ -900,13 +760,9 @@
Element aElement = findElement('A');
Element variableElement = findElement('myVariable');
// verify
- _assertRecordedRelation(
- aElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(aElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(testUnitElement, 'A] text'));
- _assertNoRecordedRelation(
- aElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertNoRecordedRelation(aElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(variableElement, 'A] text'));
}
@@ -929,30 +785,18 @@
ImportElement importElement = testLibraryElement.imports[0];
Element mainElement = findElement('main');
// verify
- _assertRecordedRelation(
- importElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(importElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'myVar = 1;', length: 0));
- _assertRecordedRelation(
- importElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(importElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'myFunction();', length: 0));
- _assertNoRecordedRelation(
- importElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertNoRecordedRelation(importElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'print(0);', length: 0));
// no references from import combinators
- _assertNoRecordedRelation(
- importElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertNoRecordedRelation(importElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(testUnitElement, 'myVar, ', length: 0));
- _assertNoRecordedRelation(
- importElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertNoRecordedRelation(importElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(testUnitElement, 'myFunction hide', length: 0));
- _assertNoRecordedRelation(
- importElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertNoRecordedRelation(importElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(testUnitElement, 'myToHide;', length: 0));
}
@@ -978,13 +822,9 @@
ImportElement importElementB = testLibraryElement.imports[1];
Element mainElement = findElement('main');
// verify
- _assertRecordedRelation(
- importElementA,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(importElementA, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'pref.myVar = 1;', length: 5));
- _assertRecordedRelation(
- importElementB,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(importElementB, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'pref.MyClass();', length: 5));
}
@@ -1009,13 +849,9 @@
ImportElement importElementB = testLibraryElement.imports[1];
Element mainElement = findElement('main');
// verify
- _assertRecordedRelation(
- importElementA,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(importElementA, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'pref.A();', length: 5));
- _assertRecordedRelation(
- importElementB,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(importElementB, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'pref.B();', length: 5));
}
@@ -1034,9 +870,7 @@
ImportElement importElement = testLibraryElement.imports[0];
Element mainElement = findElement('main');
// verify
- _assertRecordedRelation(
- importElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(importElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'pref.myFunc();', length: 5));
}
@@ -1056,9 +890,7 @@
ImportElement importElement = testLibraryElement.imports[0];
Element mainElement = findElement('main');
// verify
- _assertRecordedRelation(
- importElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(importElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'pref.A();', length: 5));
}
@@ -1106,10 +938,8 @@
Element mainElement = findElement('main');
Element element = findElement('L');
// verify
- _assertRecordedRelation(
- element,
- IndexConstants.IS_REFERENCED_BY,
- _expectedLocation(mainElement, 'L;'));
+ _assertRecordedRelation(element,
+ IndexConstants.IS_REFERENCED_BY, _expectedLocation(mainElement, 'L;'));
}
void test_isReferencedBy_libraryName() {
@@ -1124,9 +954,7 @@
testLibraryElement = testUnitElement.library;
indexDartUnit(store, context, testUnit);
// verify
- _assertRecordedRelation(
- testLibraryElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(testLibraryElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(testUnitElement, "lib;"));
}
@@ -1143,13 +971,9 @@
Element mainElement = findElement("main");
MethodElement methodElement = findElement("method");
// verify
- _assertRecordedRelation(
- methodElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(methodElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocationQ(mainElement, 'method); // q'));
- _assertRecordedRelation(
- methodElement,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(methodElement, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'method); // nq'));
}
@@ -1164,9 +988,7 @@
Element mainElement = findElement('main');
Element element = findElement('p');
// verify
- _assertRecordedRelation(
- element,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(element, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'p: 1'));
}
@@ -1183,13 +1005,9 @@
Element elementA = findElement('a');
Element elementB = findElement('b');
// verify
- _assertRecordedRelation(
- element,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(element, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(elementA, 'ppp.Future'));
- _assertRecordedRelation(
- element,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(element, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(elementB, 'ppp.Stream'));
_assertNoRecordedRelation(element, null, _expectedLocation(null, 'ppp;'));
}
@@ -1212,25 +1030,15 @@
TopLevelVariableElement variable = importedUnit().topLevelVariables[0];
Element mainElement = findElement("main");
// verify
- _assertRecordedRelation(
- variable,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(variable, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(testUnitElement, 'V; // imp'));
- _assertRecordedRelation(
- variable.setter,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(variable.setter, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'V = 5; // q'));
- _assertRecordedRelation(
- variable.getter,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(variable.getter, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'V); // q'));
- _assertRecordedRelation(
- variable.setter,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(variable.setter, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'V = 5; // nq'));
- _assertRecordedRelation(
- variable.getter,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(variable.getter, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(mainElement, 'V); // nq'));
}
@@ -1243,9 +1051,7 @@
Element classElementA = findElement('A');
Element variableElement = findElement('myVariable');
// verify
- _assertRecordedRelation(
- classElementA,
- IndexConstants.IS_REFERENCED_BY,
+ _assertRecordedRelation(classElementA, IndexConstants.IS_REFERENCED_BY,
_expectedLocation(variableElement, 'A myVariable'));
}
@@ -1264,16 +1070,13 @@
Element parameterElement = findElement('p');
Element variableElement = findElement('v');
// verify
- _assertRecordedRelation(
- typeParameterElement,
+ _assertRecordedRelation(typeParameterElement,
IndexConstants.IS_REFERENCED_BY,
_expectedLocation(fieldElement, 'T f'));
- _assertRecordedRelation(
- typeParameterElement,
+ _assertRecordedRelation(typeParameterElement,
IndexConstants.IS_REFERENCED_BY,
_expectedLocation(parameterElement, 'T p'));
- _assertRecordedRelation(
- typeParameterElement,
+ _assertRecordedRelation(typeParameterElement,
IndexConstants.IS_REFERENCED_BY,
_expectedLocation(variableElement, 'T v'));
}
@@ -1290,9 +1093,7 @@
ConstructorElement constructorElement = classElement.constructors[0];
FieldElement fieldElement = findElement("field");
// verify
- _assertRecordedRelation(
- fieldElement,
- IndexConstants.IS_WRITTEN_BY,
+ _assertRecordedRelation(fieldElement, IndexConstants.IS_WRITTEN_BY,
_expectedLocation(constructorElement, 'field = 5'));
}
@@ -1307,9 +1108,7 @@
FieldElement fieldElement = findElement("field");
Element fieldParameterElement = findNodeElementAtString("field);");
// verify
- _assertRecordedRelation(
- fieldElement,
- IndexConstants.IS_WRITTEN_BY,
+ _assertRecordedRelation(fieldElement, IndexConstants.IS_WRITTEN_BY,
_expectedLocation(fieldParameterElement, 'field);'));
}
@@ -1322,10 +1121,8 @@
Element mainElement = findElement("main");
ParameterElement pElement = findElement("p");
// verify
- _assertRecordedRelation(
- pElement,
- IndexConstants.IS_WRITTEN_BY,
- _expectedLocation(mainElement, 'p = 1'));
+ _assertRecordedRelation(pElement,
+ IndexConstants.IS_WRITTEN_BY, _expectedLocation(mainElement, 'p = 1'));
}
void test_isWrittenBy_VariableElement() {
@@ -1338,10 +1135,8 @@
Element mainElement = findElement("main");
LocalVariableElement vElement = findElement("v");
// verify
- _assertRecordedRelation(
- vElement,
- IndexConstants.IS_WRITTEN_BY,
- _expectedLocation(mainElement, 'v = 1'));
+ _assertRecordedRelation(vElement,
+ IndexConstants.IS_WRITTEN_BY, _expectedLocation(mainElement, 'v = 1'));
}
void test_NameElement_field() {
@@ -1363,21 +1158,13 @@
FieldElement fieldElement = findElement('field');
Element nameElement = new NameElement('field');
// verify
- _assertRecordedRelation(
- nameElement,
- IndexConstants.NAME_IS_DEFINED_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.NAME_IS_DEFINED_BY,
_expectedLocation(fieldElement, 'field;'));
- _assertRecordedRelation(
- nameElement,
- IndexConstants.IS_READ_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.IS_READ_BY,
_expectedLocationQ(mainElement, 'field); // r'));
- _assertRecordedRelation(
- nameElement,
- IndexConstants.IS_READ_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.IS_READ_BY,
_expectedLocationQU(mainElement, 'field); // ur'));
- _assertNoRecordedRelation(
- nameElement,
- IndexConstants.IS_READ_BY,
+ _assertNoRecordedRelation(nameElement, IndexConstants.IS_READ_BY,
_expectedLocation(mainElement, 'field); // not a member'));
}
@@ -1394,9 +1181,7 @@
LocalVariableElement testElement = findElement('test');
Element nameElement = new NameElement('test');
// verify
- _assertRecordedRelation(
- nameElement,
- IndexConstants.NAME_IS_DEFINED_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.NAME_IS_DEFINED_BY,
_expectedLocation(testElement, 'test in []'));
}
@@ -1415,17 +1200,11 @@
MethodElement methodElement = findElement('method');
Element nameElement = new NameElement('method');
// verify
- _assertRecordedRelation(
- nameElement,
- IndexConstants.NAME_IS_DEFINED_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.NAME_IS_DEFINED_BY,
_expectedLocation(methodElement, 'method() {}'));
- _assertRecordedRelation(
- nameElement,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, 'method(); // r'));
- _assertRecordedRelation(
- nameElement,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.IS_INVOKED_BY,
_expectedLocationQU(mainElement, 'method(); // ur'));
}
@@ -1451,39 +1230,23 @@
// prepare elements
Element mainElement = findElement('main');
// binary
- _assertRecordedRelation(
- new NameElement('+'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('+'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '+ 5', length: 1));
- _assertRecordedRelation(
- new NameElement('+'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('+'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '+= 5', length: 2));
- _assertRecordedRelation(
- new NameElement('=='),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('=='), IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '== 5', length: 2));
// prefix
- _assertRecordedRelation(
- new NameElement('+'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('+'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '++a', length: 2));
- _assertRecordedRelation(
- new NameElement('-'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('-'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '--a', length: 2));
- _assertRecordedRelation(
- new NameElement('~'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('~'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '~a', length: 1));
// postfix
- _assertRecordedRelation(
- new NameElement('+'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('+'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '++;', length: 2));
- _assertRecordedRelation(
- new NameElement('-'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('-'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, '--;', length: 2));
}
@@ -1509,39 +1272,23 @@
// prepare elements
Element mainElement = findElement('main');
// binary
- _assertRecordedRelation(
- new NameElement('+'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('+'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQU(mainElement, '+ 5', length: 1));
- _assertRecordedRelation(
- new NameElement('+'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('+'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQU(mainElement, '+= 5', length: 2));
- _assertRecordedRelation(
- new NameElement('=='),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('=='), IndexConstants.IS_INVOKED_BY,
_expectedLocationQU(mainElement, '== 5', length: 2));
// prefix
- _assertRecordedRelation(
- new NameElement('+'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('+'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQU(mainElement, '++a', length: 2));
- _assertRecordedRelation(
- new NameElement('-'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('-'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQU(mainElement, '--a', length: 2));
- _assertRecordedRelation(
- new NameElement('~'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('~'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQU(mainElement, '~a', length: 1));
// postfix
- _assertRecordedRelation(
- new NameElement('+'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('+'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQU(mainElement, '++;', length: 2));
- _assertRecordedRelation(
- new NameElement('-'),
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(new NameElement('-'), IndexConstants.IS_INVOKED_BY,
_expectedLocationQU(mainElement, '--;', length: 2));
}
@@ -1558,17 +1305,11 @@
Element mainElement = findElement("main");
Element nameElement = new NameElement('test');
// verify
- _assertRecordedRelation(
- nameElement,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.IS_INVOKED_BY,
_expectedLocationQ(mainElement, 'test(1)'));
- _assertRecordedRelation(
- nameElement,
- IndexConstants.IS_INVOKED_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.IS_INVOKED_BY,
_expectedLocationQU(mainElement, 'test(2)'));
- _assertNoRecordedRelation(
- nameElement,
- IndexConstants.IS_READ_BY,
+ _assertNoRecordedRelation(nameElement, IndexConstants.IS_READ_BY,
_expectedLocationQU(mainElement, 'test(2)'));
}
@@ -1585,13 +1326,9 @@
Element mainElement = findElement("main");
Element nameElement = new NameElement('test');
// verify
- _assertRecordedRelation(
- nameElement,
- IndexConstants.IS_READ_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.IS_READ_BY,
_expectedLocationQ(mainElement, 'test); // a'));
- _assertRecordedRelation(
- nameElement,
- IndexConstants.IS_READ_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.IS_READ_BY,
_expectedLocationQU(mainElement, 'test); // p'));
}
@@ -1608,13 +1345,9 @@
Element mainElement = findElement("main");
Element nameElement = new NameElement('test');
// verify
- _assertRecordedRelation(
- nameElement,
- IndexConstants.IS_READ_WRITTEN_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.IS_READ_WRITTEN_BY,
_expectedLocationQ(mainElement, 'test += 1'));
- _assertRecordedRelation(
- nameElement,
- IndexConstants.IS_READ_WRITTEN_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.IS_READ_WRITTEN_BY,
_expectedLocationQU(mainElement, 'test += 2'));
}
@@ -1631,13 +1364,9 @@
Element mainElement = findElement("main");
Element nameElement = new NameElement('test');
// verify
- _assertRecordedRelation(
- nameElement,
- IndexConstants.IS_WRITTEN_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.IS_WRITTEN_BY,
_expectedLocationQ(mainElement, 'test = 1'));
- _assertRecordedRelation(
- nameElement,
- IndexConstants.IS_WRITTEN_BY,
+ _assertRecordedRelation(nameElement, IndexConstants.IS_WRITTEN_BY,
_expectedLocationQU(mainElement, 'test = 2'));
}
@@ -1650,28 +1379,24 @@
indexDartUnit(store, context, unit);
}
- void _assertDefinesTopLevelElement(Relationship relationship,
- ExpectedLocation expectedLocation) {
- _assertRecordedRelation(testLibraryElement, relationship, expectedLocation);
+ void _assertDefinesTopLevelElement(Element element) {
+ ExpectedLocation location = new ExpectedLocation(
+ element, element.nameOffset, element.name.length, false, true);
_assertRecordedRelation(
- UniverseElement.INSTANCE,
- relationship,
- expectedLocation);
+ testLibraryElement, IndexConstants.DEFINES, location);
+ expect(recordedTopElements, contains(element));
}
/**
* Asserts that [recordedRelations] has no item with the specified properties.
*/
- void _assertNoRecordedRelation(Element element, Relationship relationship,
- ExpectedLocation location) {
+ void _assertNoRecordedRelation(
+ Element element, Relationship relationship, ExpectedLocation location) {
for (RecordedRelation recordedRelation in recordedRelations) {
if (_equalsRecordedRelation(
- recordedRelation,
- element,
- relationship,
- location)) {
- fail(
- 'not expected: ${recordedRelation} in\n' + recordedRelations.join('\n'));
+ recordedRelation, element, relationship, location)) {
+ fail('not expected: ${recordedRelation} in\n' +
+ recordedRelations.join('\n'));
}
}
}
@@ -1682,17 +1407,13 @@
Location _assertRecordedRelation(Element expectedElement,
Relationship expectedRelationship, ExpectedLocation expectedLocation) {
for (RecordedRelation recordedRelation in recordedRelations) {
- if (_equalsRecordedRelation(
- recordedRelation,
- expectedElement,
- expectedRelationship,
- expectedLocation)) {
+ if (_equalsRecordedRelation(recordedRelation, expectedElement,
+ expectedRelationship, expectedLocation)) {
return recordedRelation.location;
}
}
fail(
- "not found\n$expectedElement $expectedRelationship " "in $expectedLocation in\n"
- +
+ "not found\n$expectedElement $expectedRelationship " "in $expectedLocation in\n" +
recordedRelations.join('\n'));
return null;
}
@@ -1704,30 +1425,19 @@
length = getLeadingIdentifierLength(search);
}
return new ExpectedLocation(
- element,
- offset,
- length,
- isQualified,
- isResolved);
+ element, offset, length, isQualified, isResolved);
}
ExpectedLocation _expectedLocationQ(Element element, String search,
{int length: -1}) {
- return _expectedLocation(
- element,
- search,
- length: length,
- isQualified: true);
+ return _expectedLocation(element, search,
+ length: length, isQualified: true);
}
ExpectedLocation _expectedLocationQU(Element element, String search,
{int length: -1}) {
- return _expectedLocation(
- element,
- search,
- length: length,
- isQualified: true,
- isResolved: false);
+ return _expectedLocation(element, search,
+ length: length, isQualified: true, isResolved: false);
}
void _indexTestUnit(String code) {
@@ -1757,7 +1467,6 @@
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
/**
* Information about a relation recorded into {@link IndexStore}.
*/
diff --git a/pkg/analysis_server/test/services/index/local_file_index_test.dart b/pkg/analysis_server/test/services/index/local_file_index_test.dart
index e9f3abd..794f32f 100644
--- a/pkg/analysis_server/test/services/index/local_file_index_test.dart
+++ b/pkg/analysis_server/test/services/index/local_file_index_test.dart
@@ -8,7 +8,6 @@
import 'package:analysis_server/src/services/index/local_file_index.dart';
import 'package:unittest/unittest.dart';
-
main() {
groupSep = ' | ';
test('createLocalFileIndex', () {
diff --git a/pkg/analysis_server/test/services/index/local_index_test.dart b/pkg/analysis_server/test/services/index/local_index_test.dart
index 558b226..52c7b2b 100644
--- a/pkg/analysis_server/test/services/index/local_index_test.dart
+++ b/pkg/analysis_server/test/services/index/local_index_test.dart
@@ -4,12 +4,10 @@
library test.services.src.index.local_index;
-import 'dart:async';
-
-import 'package:analysis_server/src/services/index/index.dart';
import 'package:analysis_server/src/services/index/local_index.dart';
import 'package:analysis_server/src/services/index/local_memory_index.dart';
import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/html.dart';
import 'package:analyzer/src/generated/source_io.dart';
import 'package:unittest/unittest.dart';
@@ -18,23 +16,19 @@
import '../../reflective_tests.dart';
import 'store/single_source_container.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(LocalIndexTest);
}
-
-void _assertElementNames(List<Location> locations, List expected) {
- expect(_toElementNames(locations), unorderedEquals(expected));
+void _assertElementNames(List<Element> elements, List expected) {
+ expect(_toElementNames(elements), unorderedEquals(expected));
}
-
-Iterable<String> _toElementNames(List<Location> locations) {
- return locations.map((loc) => loc.element.name);
+Iterable<String> _toElementNames(List<Element> elements) {
+ return elements.map((element) => element.name);
}
-
@reflectiveTest
class LocalIndexTest extends AbstractContextTest {
LocalIndex index;
@@ -49,16 +43,12 @@
index = null;
}
- Future test_clear() {
+ void test_clear() {
_indexTest('main() {}');
- return _getDefinedFunctions().then((locations) {
- _assertElementNames(locations, ['main']);
- // clear
- index.clear();
- return _getDefinedFunctions().then((locations) {
- expect(locations, isEmpty);
- });
- });
+ _assertElementNames(_getTopElements(), ['main']);
+ // clear
+ index.clear();
+ expect(_getTopElements(), isEmpty);
}
void test_indexHtmlUnit_nullUnit() {
@@ -70,11 +60,9 @@
index.indexHtmlUnit(context, unit);
}
- Future test_indexUnit() {
+ void test_indexUnit() {
_indexTest('main() {}');
- return _getDefinedFunctions().then((locations) {
- _assertElementNames(locations, ['main']);
- });
+ _assertElementNames(_getTopElements(), ['main']);
}
void test_indexUnit_nullUnit() {
@@ -86,55 +74,41 @@
index.indexUnit(context, unit);
}
- Future test_removeContext() {
+ void test_removeContext() {
_indexTest('main() {}');
- return _getDefinedFunctions().then((locations) {
- // OK, there is a location
- _assertElementNames(locations, ['main']);
- // remove context
- index.removeContext(context);
- return _getDefinedFunctions().then((locations) {
- expect(locations, isEmpty);
- });
- });
+ // OK, there is an element
+ _assertElementNames(_getTopElements(), ['main']);
+ // remove context
+ index.removeContext(context);
+ expect(_getTopElements(), isEmpty);
}
- Future test_removeSource() {
+ void test_removeSource() {
Source sourceA = _indexLibraryUnit('/testA.dart', 'fa() {}');
_indexLibraryUnit('/testB.dart', 'fb() {}');
- return _getDefinedFunctions().then((locations) {
- // OK, there are 2 functions
- _assertElementNames(locations, ['fa', 'fb']);
- // remove source
- index.removeSource(context, sourceA);
- return _getDefinedFunctions().then((locations) {
- _assertElementNames(locations, ['fb']);
- });
- });
+ // OK, there are 2 functions
+ _assertElementNames(_getTopElements(), ['fa', 'fb']);
+ // remove source
+ index.removeSource(context, sourceA);
+ _assertElementNames(_getTopElements(), ['fb']);
}
- Future test_removeSources() {
+ void test_removeSources() {
Source sourceA = _indexLibraryUnit('/testA.dart', 'fa() {}');
_indexLibraryUnit('/testB.dart', 'fb() {}');
- return _getDefinedFunctions().then((locations) {
- // OK, there are 2 functions
- _assertElementNames(locations, ['fa', 'fb']);
- // remove source(s)
- index.removeSources(context, new SingleSourceContainer(sourceA));
- return _getDefinedFunctions().then((locations) {
- _assertElementNames(locations, ['fb']);
- });
- });
+ // OK, there are 2 functions
+ _assertElementNames(_getTopElements(), ['fa', 'fb']);
+ // remove source(s)
+ index.removeSources(context, new SingleSourceContainer(sourceA));
+ _assertElementNames(_getTopElements(), ['fb']);
}
void test_statistics() {
expect(index.statistics, '[0 locations, 0 sources, 0 names]');
}
- Future<List<Location>> _getDefinedFunctions() {
- return index.getRelationships(
- UniverseElement.INSTANCE,
- IndexConstants.DEFINES);
+ List<Element> _getTopElements() {
+ return index.getTopLevelDeclarations((_) => true);
}
Source _indexLibraryUnit(String path, String content) {
diff --git a/pkg/analysis_server/test/services/index/store/codec_test.dart b/pkg/analysis_server/test/services/index/store/codec_test.dart
index e9ed626..1ad0e42 100644
--- a/pkg/analysis_server/test/services/index/store/codec_test.dart
+++ b/pkg/analysis_server/test/services/index/store/codec_test.dart
@@ -15,7 +15,6 @@
import '../../../mocks.dart';
import '../../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(_ContextCodecTest);
@@ -24,7 +23,6 @@
runReflectiveTests(_StringCodecTest);
}
-
@reflectiveTest
class _ContextCodecTest {
ContextCodec codec = new ContextCodec();
@@ -63,7 +61,6 @@
}
}
-
@reflectiveTest
class _ElementCodecTest extends AbstractSingleUnitTest {
ElementCodec codec;
@@ -124,8 +121,10 @@
void test_filePackage_uriMix() {
MethodElement buildMethodElement(Source source) {
- CompilationUnitElementImpl unitElement = new CompilationUnitElementImpl('file.dart');
- LibraryElementImpl libraryElement = new LibraryElementImpl(null, 'lib', 0);
+ CompilationUnitElementImpl unitElement =
+ new CompilationUnitElementImpl('file.dart');
+ LibraryElementImpl libraryElement =
+ new LibraryElementImpl(null, 'lib', 0);
ClassElementImpl classElement = new ClassElementImpl('A', 0);
MethodElementImpl methodElement = new MethodElementImpl('m', 0);
unitElement.source = source;
@@ -144,7 +143,8 @@
// package:
int packageId;
{
- Source source = new _TestSource('/my/file.dart', 'package:my_pkg/file.dart');
+ Source source =
+ new _TestSource('/my/file.dart', 'package:my_pkg/file.dart');
var methodElement = buildMethodElement(source);
packageId = codec.encode(methodElement, true);
}
@@ -231,7 +231,6 @@
}
}
-
@reflectiveTest
class _RelationshipCodecTest {
StringCodec stringCodec = new StringCodec();
@@ -248,7 +247,6 @@
}
}
-
@reflectiveTest
class _StringCodecTest {
StringCodec codec = new StringCodec();
@@ -261,7 +259,6 @@
}
}
-
class _TestSource implements Source {
final String fullName;
final String encoding;
diff --git a/pkg/analysis_server/test/services/index/store/collection_test.dart b/pkg/analysis_server/test/services/index/store/collection_test.dart
index f27214d..8d57e17 100644
--- a/pkg/analysis_server/test/services/index/store/collection_test.dart
+++ b/pkg/analysis_server/test/services/index/store/collection_test.dart
@@ -9,14 +9,12 @@
import '../../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(_IntArrayToIntMapTest);
runReflectiveTests(_IntToIntSetMapTest);
}
-
@reflectiveTest
class _IntArrayToIntMapTest {
IntArrayToIntMap map = new IntArrayToIntMap();
@@ -30,7 +28,6 @@
}
}
-
@reflectiveTest
class _IntToIntSetMapTest {
IntToIntSetMap map = new IntToIntSetMap();
diff --git a/pkg/analysis_server/test/services/index/store/mocks.dart b/pkg/analysis_server/test/services/index/store/mocks.dart
index ee14ada..9d0bab4 100644
--- a/pkg/analysis_server/test/services/index/store/mocks.dart
+++ b/pkg/analysis_server/test/services/index/store/mocks.dart
@@ -8,22 +8,18 @@
import 'package:analysis_server/src/services/index/store/codec.dart';
import 'package:typed_mock/typed_mock.dart';
-
class MockContextCodec extends TypedMock implements ContextCodec {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
class MockElementCodec extends TypedMock implements ElementCodec {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
class MockLocation extends TypedMock implements Location {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
class MockRelationshipCodec extends TypedMock implements RelationshipCodec {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
diff --git a/pkg/analysis_server/test/services/index/store/single_source_container.dart b/pkg/analysis_server/test/services/index/store/single_source_container.dart
index a7c7a94..780e3c8 100644
--- a/pkg/analysis_server/test/services/index/store/single_source_container.dart
+++ b/pkg/analysis_server/test/services/index/store/single_source_container.dart
@@ -6,7 +6,6 @@
import 'package:analyzer/src/generated/source.dart';
-
/**
* A [SourceContainer] with a single [Source].
*/
diff --git a/pkg/analysis_server/test/services/index/store/split_store_test.dart b/pkg/analysis_server/test/services/index/store/split_store_test.dart
index 6a8bacb..1bb66fb 100644
--- a/pkg/analysis_server/test/services/index/store/split_store_test.dart
+++ b/pkg/analysis_server/test/services/index/store/split_store_test.dart
@@ -21,7 +21,6 @@
import 'mocks.dart';
import 'single_source_container.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(_FileNodeManagerTest);
@@ -31,9 +30,9 @@
runReflectiveTests(_SplitIndexStoreTest);
}
-
-void _assertHasLocation(List<Location> locations, Element element, int offset,
- int length, {bool isQualified: false, bool isResolved: true}) {
+void _assertHasLocation(
+ List<Location> locations, Element element, int offset, int length,
+ {bool isQualified: false, bool isResolved: true}) {
for (Location location in locations) {
if ((element == null || location.element == element) &&
location.offset == offset &&
@@ -43,18 +42,15 @@
return;
}
}
- fail(
- 'Expected to find Location'
- '(element=$element, offset=$offset, length=$length)');
+ fail('Expected to find Location'
+ '(element=$element, offset=$offset, length=$length)');
}
-
-void _assertHasLocationQ(List<Location> locations, Element element, int offset,
- int length) {
+void _assertHasLocationQ(
+ List<Location> locations, Element element, int offset, int length) {
_assertHasLocation(locations, element, offset, length, isQualified: true);
}
-
@reflectiveTest
class _FileNodeManagerTest {
MockLogger logger = new MockLogger();
@@ -73,13 +69,8 @@
void setUp() {
relationshipCodec = new RelationshipCodec(stringCodec);
- nodeManager = new FileNodeManager(
- fileManager,
- logger,
- stringCodec,
- contextCodec,
- elementCodec,
- relationshipCodec);
+ nodeManager = new FileNodeManager(fileManager, logger, stringCodec,
+ contextCodec, elementCodec, relationshipCodec);
when(contextCodec.encode(context)).thenReturn(contextId);
when(contextCodec.decode(contextId)).thenReturn(context);
}
@@ -124,8 +115,8 @@
test_getNode_invalidVersion() {
String name = '42.index';
// prepare a stream with an invalid version
- when(
- fileManager.read(name)).thenReturn(new Future.value([0x01, 0x02, 0x03, 0x04]));
+ when(fileManager.read(name))
+ .thenReturn(new Future.value([0x01, 0x02, 0x03, 0x04]));
// do in the Future
return nodeManager.getNode(name).then((IndexNode node) {
// no IndexNode
@@ -188,11 +179,10 @@
RelationKeyData key =
new RelationKeyData.forData(elementIdA, relationshipId);
List<LocationData> locations = [
- new LocationData.forData(elementIdB, 1, 10, 2),
- new LocationData.forData(elementIdC, 2, 20, 3)];
- Map<RelationKeyData, List<LocationData>> relations = {
- key: locations
- };
+ new LocationData.forData(elementIdB, 1, 10, 2),
+ new LocationData.forData(elementIdC, 2, 20, 3)
+ ];
+ Map<RelationKeyData, List<LocationData>> relations = {key: locations};
// prepare Node
IndexNode node = new _MockIndexNode();
when(node.context).thenReturn(context);
@@ -254,7 +244,6 @@
}
}
-
@reflectiveTest
class _IndexNodeTest {
AnalysisContext context = new MockAnalysisContext('context');
@@ -318,11 +307,10 @@
RelationKeyData key =
new RelationKeyData.forData(elementIdA, relationshipId);
List<LocationData> locations = [
- new LocationData.forData(elementIdB, 1, 10, 2),
- new LocationData.forData(elementIdC, 2, 20, 3)];
- node.relations = {
- key: locations
- };
+ new LocationData.forData(elementIdB, 1, 10, 2),
+ new LocationData.forData(elementIdC, 2, 20, 3)
+ ];
+ node.relations = {key: locations};
}
// request
List<Location> locations = node.getRelationships(elementA, relationship);
@@ -340,7 +328,6 @@
}
}
-
@reflectiveTest
class _LocationDataTest {
AnalysisContext context = new MockAnalysisContext('context');
@@ -388,7 +375,6 @@
}
}
-
/**
* [Location] has no [==] and [hashCode], so to compare locations by value we
* need to wrap them into such object.
@@ -415,17 +401,14 @@
}
}
-
class _MockFileManager extends TypedMock implements FileManager {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
class _MockIndexNode extends TypedMock implements IndexNode {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
@reflectiveTest
class _RelationKeyDataTest {
AnalysisContext context = new MockAnalysisContext('context');
@@ -459,25 +442,18 @@
when(relationshipCodec.encode(relationship)).thenReturn(relationshipId);
// create RelationKeyData
RelationKeyData keyData = new RelationKeyData.forObject(
- elementCodec,
- relationshipCodec,
- element,
- relationship);
+ elementCodec, relationshipCodec, element, relationship);
// touch
keyData.hashCode;
// equals
expect(keyData == this, isFalse);
expect(keyData == new RelationKeyData.forData(10, 20), isFalse);
expect(keyData == keyData, isTrue);
- expect(
- keyData == new RelationKeyData.forData(elementId, relationshipId),
+ expect(keyData == new RelationKeyData.forData(elementId, relationshipId),
isTrue);
}
}
-
-
-
@reflectiveTest
class _SplitIndexStoreTest {
AnalysisContext contextA = new MockAnalysisContext('contextA');
@@ -515,6 +491,7 @@
CompilationUnitElement unitElementB = new MockCompilationUnitElement();
CompilationUnitElement unitElementC = new MockCompilationUnitElement();
CompilationUnitElement unitElementD = new MockCompilationUnitElement();
+
void setUp() {
store = new SplitIndexStore(nodeManager);
when(contextA.isDisposed).thenReturn(false);
@@ -572,16 +549,14 @@
}
Future test_aboutToIndexDart_library_first() {
- when(
- libraryElement.parts).thenReturn(
- <CompilationUnitElement>[unitElementA, unitElementB]);
+ when(libraryElement.parts)
+ .thenReturn(<CompilationUnitElement>[unitElementA, unitElementB]);
{
store.aboutToIndexDart(contextA, libraryUnitElement);
store.doneIndex();
}
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store.getRelationships(elementA, relationship).then(
+ (List<Location> locations) {
assertLocations(locations, []);
});
}
@@ -600,9 +575,9 @@
store.doneIndex();
}
// "A" and "B" locations
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store
+ .getRelationships(elementA, relationship)
+ .then((List<Location> locations) {
assertLocations(locations, [locationA, locationB]);
// apply "libraryUnitElement", only with "B"
when(libraryElement.parts).thenReturn([unitElementB]);
@@ -611,9 +586,9 @@
store.doneIndex();
}
}).then((_) {
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store
+ .getRelationships(elementA, relationship)
+ .then((List<Location> locations) {
assertLocations(locations, [locationB]);
});
});
@@ -647,9 +622,8 @@
store.doneIndex();
}
// "A" and "B" locations
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store.getRelationships(elementA, relationship).then(
+ (List<Location> locations) {
assertLocations(locations, [locationA, locationB]);
});
}
@@ -671,9 +645,9 @@
}
test_getRelationships_empty() {
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store
+ .getRelationships(elementA, relationship)
+ .then((List<Location> locations) {
expect(locations, isEmpty);
});
}
@@ -740,9 +714,8 @@
store.recordRelationship(elementA, relationship, locationB);
store.doneIndex();
}
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store.getRelationships(elementA, relationship).then(
+ (List<Location> locations) {
assertLocations(locations, [locationA, locationB]);
});
}
@@ -752,9 +725,8 @@
store.aboutToIndexDart(contextA, unitElementA);
store.recordRelationship(elementA, relationship, locationA);
store.doneIndex();
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store.getRelationships(elementA, relationship).then(
+ (List<Location> locations) {
assertLocations(locations, [locationA]);
});
}
@@ -766,9 +738,8 @@
store.recordRelationship(elementA, relationship, locationA);
store.recordRelationship(elementA, relationship, locationB);
store.doneIndex();
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store.getRelationships(elementA, relationship).then(
+ (List<Location> locations) {
assertLocations(locations, [locationA, locationB]);
});
}
@@ -787,16 +758,16 @@
store.doneIndex();
}
// "A" and "B" locations
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store
+ .getRelationships(elementA, relationship)
+ .then((List<Location> locations) {
assertLocations(locations, [locationA, locationB]);
// remove "A" context
store.removeContext(contextA);
}).then((_) {
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store
+ .getRelationships(elementA, relationship)
+ .then((List<Location> locations) {
assertLocations(locations, []);
});
});
@@ -826,16 +797,15 @@
store.doneIndex();
}
// "A", "B" and "C" locations
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store
+ .getRelationships(elementA, relationship)
+ .then((List<Location> locations) {
assertLocations(locations, [locationA, locationB, locationC]);
}).then((_) {
// remove "librarySource"
store.removeSource(contextA, librarySource);
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store.getRelationships(elementA, relationship).then(
+ (List<Location> locations) {
assertLocations(locations, []);
});
});
@@ -865,16 +835,15 @@
store.doneIndex();
}
// "A", "B" and "C" locations
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store
+ .getRelationships(elementA, relationship)
+ .then((List<Location> locations) {
assertLocations(locations, [locationA, locationB, locationC]);
}).then((_) {
// remove "A" source
store.removeSource(contextA, sourceA);
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store.getRelationships(elementA, relationship).then(
+ (List<Location> locations) {
assertLocations(locations, [locationB, locationC]);
});
});
@@ -894,16 +863,15 @@
store.doneIndex();
}
// "A" and "B" locations
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store
+ .getRelationships(elementA, relationship)
+ .then((List<Location> locations) {
assertLocations(locations, [locationA, locationB]);
}).then((_) {
// remove "librarySource"
store.removeSources(contextA, new SingleSourceContainer(librarySource));
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
+ return store.getRelationships(elementA, relationship).then(
+ (List<Location> locations) {
assertLocations(locations, []);
});
});
@@ -913,188 +881,145 @@
store.removeSources(null, null);
}
- test_removeSources_unit() {
- Location locationA = mockLocation(elementA);
- Location locationB = mockLocation(elementB);
- Location locationC = mockLocation(elementC);
+ void test_removeSources_unit() {
{
store.aboutToIndexDart(contextA, unitElementA);
- store.recordRelationship(elementA, relationship, locationA);
+ store.recordTopLevelDeclaration(elementA);
store.doneIndex();
}
{
store.aboutToIndexDart(contextA, unitElementB);
- store.recordRelationship(elementA, relationship, locationB);
+ store.recordTopLevelDeclaration(elementB);
store.doneIndex();
}
{
store.aboutToIndexDart(contextA, unitElementC);
- store.recordRelationship(elementA, relationship, locationC);
+ store.recordTopLevelDeclaration(elementC);
store.doneIndex();
}
- // "A", "B" and "C" locations
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
- assertLocations(locations, [locationA, locationB, locationC]);
- }).then((_) {
- // remove "A" source
- store.removeSources(contextA, new SingleSourceContainer(sourceA));
- store.removeSource(contextA, sourceA);
- return store.getRelationships(
- elementA,
- relationship).then((List<Location> locations) {
- assertLocations(locations, [locationB, locationC]);
- });
- });
+ // A, B, C elements
+ {
+ List<Element> elements = store.getTopLevelDeclarations(anyName);
+ expect(elements, unorderedEquals([elementA, elementB, elementC]));
+ }
+ // remove "A" source
+ store.removeSources(contextA, new SingleSourceContainer(sourceA));
+ store.removeSource(contextA, sourceA);
+ {
+ List<Element> elements = store.getTopLevelDeclarations(anyName);
+ expect(elements, unorderedEquals([elementB, elementC]));
+ }
}
- test_universe_aboutToIndex() {
+ void test_universe_aboutToIndex() {
when(contextA.getElement(elementLocationA)).thenReturn(elementA);
when(contextB.getElement(elementLocationB)).thenReturn(elementB);
- Location locationA = mockLocation(elementA);
- Location locationB = mockLocation(elementB);
{
store.aboutToIndexDart(contextA, unitElementA);
- store.recordRelationship(
- UniverseElement.INSTANCE,
- relationship,
- locationA);
+ store.recordTopLevelDeclaration(elementA);
store.doneIndex();
}
{
store.aboutToIndexDart(contextB, unitElementB);
- store.recordRelationship(
- UniverseElement.INSTANCE,
- relationship,
- locationB);
+ store.recordTopLevelDeclaration(elementB);
store.doneIndex();
}
- // get relationships
- return store.getRelationships(
- UniverseElement.INSTANCE,
- relationship).then((List<Location> locations) {
- assertLocations(locations, [locationA, locationB]);
- }).then((_) {
- // re-index "unitElementA"
+ // elementA, elementB
+ {
+ List<Element> elements = store.getTopLevelDeclarations(anyName);
+ expect(elements, unorderedEquals([elementA, elementB]));
+ }
+ // re-index "unitElementA"
+ {
store.aboutToIndexDart(contextA, unitElementA);
store.doneIndex();
- return store.getRelationships(
- UniverseElement.INSTANCE,
- relationship).then((List<Location> locations) {
- assertLocations(locations, [locationB]);
- });
- });
+ }
+ {
+ List<Element> elements = store.getTopLevelDeclarations(anyName);
+ expect(elements, unorderedEquals([elementB]));
+ }
}
- test_universe_clear() {
+ void test_universe_clear() {
when(contextA.getElement(elementLocationA)).thenReturn(elementA);
when(contextB.getElement(elementLocationB)).thenReturn(elementB);
- Location locationA = mockLocation(elementA);
- Location locationB = mockLocation(elementB);
{
store.aboutToIndexDart(contextA, unitElementA);
- store.recordRelationship(
- UniverseElement.INSTANCE,
- relationship,
- locationA);
- store.doneIndex();
- }
- {
- store.aboutToIndexDart(contextA, unitElementB);
- store.recordRelationship(
- UniverseElement.INSTANCE,
- relationship,
- locationB);
- store.doneIndex();
- }
- return store.getRelationships(
- UniverseElement.INSTANCE,
- relationship).then((List<Location> locations) {
- assertLocations(locations, [locationA, locationB]);
- }).then((_) {
- // clear
- store.clear();
- return store.getRelationships(
- UniverseElement.INSTANCE,
- relationship).then((List<Location> locations) {
- expect(locations, isEmpty);
- });
- });
- }
-
- test_universe_removeContext() {
- when(contextA.getElement(elementLocationA)).thenReturn(elementA);
- when(contextB.getElement(elementLocationB)).thenReturn(elementB);
- Location locationA = mockLocation(elementA);
- Location locationB = mockLocation(elementB);
- {
- store.aboutToIndexDart(contextA, unitElementA);
- store.recordRelationship(
- UniverseElement.INSTANCE,
- relationship,
- locationA);
+ store.recordTopLevelDeclaration(elementA);
store.doneIndex();
}
{
store.aboutToIndexDart(contextB, unitElementB);
- store.recordRelationship(
- UniverseElement.INSTANCE,
- relationship,
- locationB);
+ store.recordTopLevelDeclaration(elementB);
store.doneIndex();
}
- return store.getRelationships(
- UniverseElement.INSTANCE,
- relationship).then((List<Location> locations) {
- assertLocations(locations, [locationA, locationB]);
- }).then((_) {
- // remove "contextA"
- store.removeContext(contextA);
- return store.getRelationships(
- UniverseElement.INSTANCE,
- relationship).then((List<Location> locations) {
- assertLocations(locations, [locationB]);
- });
- });
+ // elementA, elementB
+ {
+ List<Element> elements = store.getTopLevelDeclarations(anyName);
+ expect(elements, unorderedEquals([elementA, elementB]));
+ }
+ // clear
+ store.clear();
+ {
+ List<Element> elements = store.getTopLevelDeclarations(anyName);
+ expect(elements, isEmpty);
+ }
}
- test_universe_removeSource() {
+ void test_universe_removeContext() {
when(contextA.getElement(elementLocationA)).thenReturn(elementA);
when(contextB.getElement(elementLocationB)).thenReturn(elementB);
- Location locationA = mockLocation(elementA);
- Location locationB = mockLocation(elementB);
{
store.aboutToIndexDart(contextA, unitElementA);
- store.recordRelationship(
- UniverseElement.INSTANCE,
- relationship,
- locationA);
+ store.recordTopLevelDeclaration(elementA);
store.doneIndex();
}
{
- store.aboutToIndexDart(contextA, unitElementB);
- store.recordRelationship(
- UniverseElement.INSTANCE,
- relationship,
- locationB);
+ store.aboutToIndexDart(contextB, unitElementB);
+ store.recordTopLevelDeclaration(elementB);
store.doneIndex();
}
- return store.getRelationships(
- UniverseElement.INSTANCE,
- relationship).then((List<Location> locations) {
- assertLocations(locations, [locationA, locationB]);
- }).then((_) {
- // remove "sourceA"
- store.removeSource(contextA, sourceA);
- return store.getRelationships(
- UniverseElement.INSTANCE,
- relationship).then((List<Location> locations) {
- assertLocations(locations, [locationB]);
- });
- });
+ // elementA, elementB
+ {
+ List<Element> elements = store.getTopLevelDeclarations(anyName);
+ expect(elements, unorderedEquals([elementA, elementB]));
+ }
+ // remove "contextA"
+ store.removeContext(contextA);
+ {
+ List<Element> elements = store.getTopLevelDeclarations(anyName);
+ expect(elements, unorderedEquals([elementB]));
+ }
}
+ void test_universe_removeSource() {
+ when(contextA.getElement(elementLocationA)).thenReturn(elementA);
+ when(contextB.getElement(elementLocationB)).thenReturn(elementB);
+ {
+ store.aboutToIndexDart(contextA, unitElementA);
+ store.recordTopLevelDeclaration(elementA);
+ store.doneIndex();
+ }
+ {
+ store.aboutToIndexDart(contextB, unitElementB);
+ store.recordTopLevelDeclaration(elementB);
+ store.doneIndex();
+ }
+ // elementA, elementB
+ {
+ List<Element> elements = store.getTopLevelDeclarations(anyName);
+ expect(elements, unorderedEquals([elementA, elementB]));
+ }
+ // remove "sourceA"
+ store.removeSource(contextA, sourceA);
+ {
+ List<Element> elements = store.getTopLevelDeclarations(anyName);
+ expect(elements, unorderedEquals([elementB]));
+ }
+ }
+
+ static bool anyName(String name) => true;
+
/**
* Asserts that the [actual] locations have all the [expected] locations and
* only them.
diff --git a/pkg/analysis_server/test/services/index/store/temporary_folder_file_manager_test.dart b/pkg/analysis_server/test/services/index/store/temporary_folder_file_manager_test.dart
index eef4933..e306270 100644
--- a/pkg/analysis_server/test/services/index/store/temporary_folder_file_manager_test.dart
+++ b/pkg/analysis_server/test/services/index/store/temporary_folder_file_manager_test.dart
@@ -12,13 +12,11 @@
import '../../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(_SeparateFileManagerTest);
}
-
@reflectiveTest
class _SeparateFileManagerTest {
TemporaryFolderFileManager fileManager;
diff --git a/pkg/analysis_server/test/services/index/store/test_all.dart b/pkg/analysis_server/test/services/index/store/test_all.dart
index 4d3884a..236b2e5 100644
--- a/pkg/analysis_server/test/services/index/store/test_all.dart
+++ b/pkg/analysis_server/test/services/index/store/test_all.dart
@@ -11,7 +11,6 @@
import 'split_store_test.dart' as split_store_test;
import 'temporary_folder_file_manager_test.dart' as tmp_file_manager_test;
-
/**
* Utility for manually running all tests.
*/
diff --git a/pkg/analysis_server/test/services/index/test_all.dart b/pkg/analysis_server/test/services/index/test_all.dart
index ef6face..5aff005 100644
--- a/pkg/analysis_server/test/services/index/test_all.dart
+++ b/pkg/analysis_server/test/services/index/test_all.dart
@@ -11,7 +11,6 @@
import 'local_index_test.dart' as local_index_test;
import 'store/test_all.dart' as store_test_all;
-
/**
* Utility for manually running all tests.
*/
diff --git a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
index b748ea7..8ed4913 100644
--- a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
+++ b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
@@ -19,7 +19,6 @@
import '../../abstract_single_unit.dart';
-
int findIdentifierLength(String search) {
int length = 0;
while (length < search.length) {
@@ -34,7 +33,6 @@
return length;
}
-
/**
* The base class for all [Refactoring] tests.
*/
@@ -92,9 +90,10 @@
/**
* Asserts that [status] has expected severity and message.
*/
- void assertRefactoringStatus(RefactoringStatus status,
- RefactoringProblemSeverity expectedSeverity, {String expectedMessage,
- SourceRange expectedContextRange, String expectedContextSearch}) {
+ void assertRefactoringStatus(
+ RefactoringStatus status, RefactoringProblemSeverity expectedSeverity,
+ {String expectedMessage, SourceRange expectedContextRange,
+ String expectedContextSearch}) {
expect(status.severity, expectedSeverity, reason: status.toString());
if (expectedSeverity != null) {
RefactoringProblem problem = status.problem;
diff --git a/pkg/analysis_server/test/services/refactoring/abstract_rename.dart b/pkg/analysis_server/test/services/refactoring/abstract_rename.dart
index 871f806..98fd12a 100644
--- a/pkg/analysis_server/test/services/refactoring/abstract_rename.dart
+++ b/pkg/analysis_server/test/services/refactoring/abstract_rename.dart
@@ -13,7 +13,6 @@
import 'abstract_refactoring.dart';
-
/**
* The base class for all [RenameRefactoring] tests.
*/
diff --git a/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart b/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
index 4b9f82d..1ab8463 100644
--- a/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
@@ -15,13 +15,11 @@
import '../../reflective_tests.dart';
import 'abstract_refactoring.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(ConvertGetterToMethodTest);
}
-
@reflectiveTest
class ConvertGetterToMethodTest extends RefactoringTest {
ConvertGetterToMethodRefactoring refactoring;
@@ -134,9 +132,7 @@
Future _assertInitialConditions_fatal(String message) async {
RefactoringStatus status = await refactoring.checkInitialConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
expectedMessage: message);
}
diff --git a/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart b/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart
index eea5385..805a3f3 100644
--- a/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart
@@ -15,13 +15,11 @@
import '../../reflective_tests.dart';
import 'abstract_refactoring.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(ConvertMethodToGetterTest);
}
-
@reflectiveTest
class ConvertMethodToGetterTest extends RefactoringTest {
ConvertMethodToGetterRefactoring refactoring;
@@ -184,9 +182,7 @@
Future _assertInitialConditions_fatal(String message) async {
RefactoringStatus status = await refactoring.checkInitialConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
expectedMessage: message);
}
diff --git a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
index 75ad10b..32b2a57 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
@@ -15,13 +15,11 @@
import '../../reflective_tests.dart';
import 'abstract_refactoring.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(ExtractLocalTest);
}
-
@reflectiveTest
class ExtractLocalTest extends RefactoringTest {
ExtractLocalRefactoringImpl refactoring;
@@ -36,11 +34,8 @@
_createRefactoringForString('1 + 2');
// conflicting name
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.WARNING,
- expectedMessage:
- "A variable with name 'res' is already defined in the visible scope.");
+ assertRefactoringStatus(status, RefactoringProblemSeverity.WARNING,
+ expectedMessage: "A variable with name 'res' is already defined in the visible scope.");
}
test_checkFinalConditions_sameVariable_before() async {
@@ -53,11 +48,8 @@
_createRefactoringForString('1 + 2');
// conflicting name
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.WARNING,
- expectedMessage:
- "A variable with name 'res' is already defined in the visible scope.");
+ assertRefactoringStatus(status, RefactoringProblemSeverity.WARNING,
+ expectedMessage: "A variable with name 'res' is already defined in the visible scope.");
}
test_checkInitialConditions_assignmentLeftHandSize() async {
@@ -70,9 +62,7 @@
_createRefactoringWithSuffix('v', ' = 1;');
// check conditions
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
expectedMessage: 'Cannot extract the left-hand side of an assignment.');
}
@@ -85,9 +75,7 @@
_createRefactoringWithSuffix('main', '();');
// check conditions
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
expectedMessage: 'Cannot extract a single method name.');
}
@@ -100,9 +88,7 @@
_createRefactoringWithSuffix('value', '; // marker');
// check conditions
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
expectedMessage: 'Cannot extract name part of a property access.');
}
@@ -116,9 +102,7 @@
_createRefactoringWithSuffix('length', '; // marker');
// check conditions
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
expectedMessage: 'Cannot extract name part of a property access.');
}
@@ -131,9 +115,7 @@
_createRefactoringWithSuffix('vvv', ' = 0;');
// check conditions
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
expectedMessage: 'Cannot extract the name part of a declaration.');
}
@@ -144,11 +126,8 @@
_createRefactoringForString('1 + 2');
// check conditions
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- 'Expression inside of function must be selected to activate this refactoring.');
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
+ expectedMessage: 'Expression inside of function must be selected to activate this refactoring.');
}
test_checkInitialConditions_stringSelection_leadingQuote() async {
@@ -160,11 +139,8 @@
_createRefactoringForString("'a");
// check conditions
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- 'Cannot extract only leading or trailing quote of string literal.');
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
+ expectedMessage: 'Cannot extract only leading or trailing quote of string literal.');
}
test_checkInitialConditions_stringSelection_trailingQuote() async {
@@ -176,11 +152,8 @@
_createRefactoringForString("c'");
// check conditions
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- 'Cannot extract only leading or trailing quote of string literal.');
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
+ expectedMessage: 'Cannot extract only leading or trailing quote of string literal.');
}
test_checkLocalName() {
@@ -194,14 +167,12 @@
// null
refactoring.name = null;
assertRefactoringStatus(
- refactoring.checkName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Variable name must not be null.");
// empty
refactoring.name = '';
assertRefactoringStatus(
- refactoring.checkName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Variable name must not be empty.");
// OK
refactoring.name = 'res';
@@ -484,8 +455,7 @@
_createRefactoringWithSuffix('getSelectedItem()', '); // marker');
// check guesses
await refactoring.checkInitialConditions();
- expect(
- refactoring.names,
+ expect(refactoring.names,
unorderedEquals(['selectedItem', 'item', 'my', 'treeItem']));
}
@@ -691,8 +661,7 @@
_createRefactoringWithSuffix('foo()', '; // marker');
// check offsets
await refactoring.checkInitialConditions();
- expect(
- refactoring.offsets,
+ expect(refactoring.offsets,
unorderedEquals([findOffset('foo();'), findOffset('foo( );')]));
expect(refactoring.lengths, unorderedEquals([5, 6]));
}
@@ -944,9 +913,7 @@
Future _assertInitialConditions_fatal_selection() async {
RefactoringStatus status = await refactoring.checkInitialConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
expectedMessage: 'Expression must be selected to activate this refactoring.');
}
diff --git a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
index 95c05a5..13e7ed7 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
@@ -15,13 +15,11 @@
import '../../reflective_tests.dart';
import 'abstract_refactoring.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(ExtractMethodTest);
}
-
@reflectiveTest
class ExtractMethodTest extends RefactoringTest {
ExtractMethodRefactoringImpl refactoring;
@@ -421,7 +419,7 @@
_createRefactoringForStartEndString('print(0', 'rint(1)');
return _assertConditionsFatal(
"The selection does not cover a set of statements or an expression. "
- "Extend selection to a valid range.");
+ "Extend selection to a valid range.");
}
test_bad_statements_exit_notAllExecutionFlows() {
@@ -452,7 +450,7 @@
_createRefactoringForStartEndComments();
return _assertConditionsFatal(
"Ambiguous return value: Selected block contains assignment(s) to "
- "local variables and return statement.");
+ "local variables and return statement.");
}
test_bad_switchCase() {
@@ -468,7 +466,7 @@
_createRefactoringForStartEndComments();
return _assertConditionsFatal(
"Selection must either cover whole switch statement "
- "or parts of a single case block.");
+ "or parts of a single case block.");
}
test_bad_tokensBetweenLastNodeAndSelectionEnd() {
@@ -513,7 +511,7 @@
_createRefactoringForStartEndComments();
return _assertConditionsFatal(
"Selection must either cover whole try statement or "
- "parts of try, catch, or finally block.");
+ "parts of try, catch, or finally block.");
}
test_bad_try_catchBlock_complete() {
@@ -530,7 +528,7 @@
_createRefactoringForStartEndComments();
return _assertConditionsFatal(
"Selection must either cover whole try statement or "
- "parts of try, catch, or finally block.");
+ "parts of try, catch, or finally block.");
}
test_bad_try_catchBlock_exception() {
@@ -564,7 +562,7 @@
_createRefactoringForStartEndComments();
return _assertConditionsFatal(
"Selection must either cover whole try statement or "
- "parts of try, catch, or finally block.");
+ "parts of try, catch, or finally block.");
}
test_bad_try_tryBlock() {
@@ -581,7 +579,7 @@
_createRefactoringForStartEndComments();
return _assertConditionsFatal(
"Selection must either cover whole try statement or "
- "parts of try, catch, or finally block.");
+ "parts of try, catch, or finally block.");
}
test_bad_typeReference() {
@@ -625,6 +623,20 @@
"Operation not applicable to a while statement's expression and body.");
}
+ test_canExtractGetter_false_closure() async {
+ indexTestUnit('''
+main() {
+ useFunction((_) => true);
+}
+useFunction(filter(String p)) {}
+''');
+ _createRefactoringForString('(_) => true');
+ // apply refactoring
+ await assertRefactoringConditionsOK();
+ expect(refactoring.canCreateGetter, false);
+ expect(refactoring.createGetter, false);
+ }
+
test_canExtractGetter_false_fieldAssignment() async {
indexTestUnit('''
class A {
@@ -711,14 +723,12 @@
// null
refactoring.name = null;
assertRefactoringStatus(
- refactoring.checkName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Method name must not be null.");
// empty
refactoring.name = '';
assertRefactoringStatus(
- refactoring.checkName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Method name must not be empty.");
// OK
refactoring.name = 'res';
@@ -811,11 +821,8 @@
_createRefactoringForString('(x) => x * k');
// check
RefactoringStatus status = await refactoring.checkInitialConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- 'Cannot extract closure as method, it references 1 external variable(s).');
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
+ expectedMessage: 'Cannot extract closure as method, it references 1 external variable(s).');
}
test_closure_bad_referencesParameter() async {
@@ -828,11 +835,8 @@
_createRefactoringForString('(x) => x * k');
// check
RefactoringStatus status = await refactoring.checkInitialConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- 'Cannot extract closure as method, it references 1 external variable(s).');
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
+ expectedMessage: 'Cannot extract closure as method, it references 1 external variable(s).');
}
test_fromTopLevelVariableInitializerClosure() {
@@ -1022,8 +1026,7 @@
_createRefactoringWithSuffix('getSelectedItem()', '); // marker');
// check names
await refactoring.checkInitialConditions();
- expect(
- refactoring.names,
+ expect(refactoring.names,
unorderedEquals(['selectedItem', 'item', 'my', 'treeItem2']));
}
@@ -1037,8 +1040,7 @@
_createRefactoringForString('1 + 2');
// apply refactoring
await refactoring.checkInitialConditions();
- expect(
- refactoring.offsets,
+ expect(refactoring.offsets,
unorderedEquals([findOffset('1 + 2'), findOffset('1 + 2')]));
expect(refactoring.lengths, unorderedEquals([5, 6]));
}
@@ -1070,6 +1072,19 @@
expect(refactoring.returnType, 'double');
}
+ test_returnType_closure() async {
+ indexTestUnit('''
+process(f(x)) {}
+main() {
+ process((x) => x * 2);
+}
+''');
+ _createRefactoringForString('(x) => x * 2');
+ // do check
+ await refactoring.checkInitialConditions();
+ expect(refactoring.returnType, '');
+ }
+
test_returnType_statements_nullMix() async {
indexTestUnit('''
main(bool p) {
@@ -1373,6 +1388,27 @@
''');
}
+ test_singleExpression_returnType_importLibrary() async {
+ _addLibraryReturningAsync();
+ indexTestUnit('''
+import 'asyncLib.dart';
+main() {
+ var a = newFuture();
+}
+''');
+ _createRefactoringForString('newFuture()');
+ // apply refactoring
+ return _assertSuccessfulRefactoring('''
+import 'asyncLib.dart';
+import 'dart:async';
+main() {
+ var a = res();
+}
+
+Future<int> res() => newFuture();
+''');
+ }
+
test_singleExpression_returnTypeGeneric() {
indexTestUnit('''
main() {
@@ -2203,6 +2239,35 @@
''');
}
+ test_statements_parameters_importType() {
+ _addLibraryReturningAsync();
+ indexTestUnit('''
+import 'asyncLib.dart';
+main() {
+ var v = newFuture();
+// start
+ print(v);
+// end
+}
+''');
+ _createRefactoringForStartEndComments();
+ // apply refactoring
+ return _assertSuccessfulRefactoring('''
+import 'asyncLib.dart';
+import 'dart:async';
+main() {
+ var v = newFuture();
+// start
+ res(v);
+// end
+}
+
+void res(Future<int> v) {
+ print(v);
+}
+''');
+ }
+
test_statements_return_last() {
indexTestUnit('''
main() {
@@ -2406,27 +2471,29 @@
''');
}
+ void _addLibraryReturningAsync() {
+ addSource('/asyncLib.dart', r'''
+library asyncLib;
+import 'dart:async';
+Future<int> newFuture() => null;
+''');
+ }
+
Future _assertConditionsError(String message) async {
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: message);
}
Future _assertConditionsFatal(String message) async {
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
expectedMessage: message);
}
Future _assertFinalConditionsError(String message) async {
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: message);
}
@@ -2458,8 +2525,8 @@
_createRefactoring(offset, end - offset);
}
- void _createRefactoringForStartEndString(String startSearch,
- String endSearch) {
+ void _createRefactoringForStartEndString(
+ String startSearch, String endSearch) {
int offset = findOffset(startSearch);
int end = findOffset(endSearch);
_createRefactoring(offset, end - offset);
diff --git a/pkg/analysis_server/test/services/refactoring/inline_local_test.dart b/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
index 335387b..8e8b6ab 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
@@ -13,13 +13,11 @@
import '../../reflective_tests.dart';
import 'abstract_refactoring.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(InlineLocalTest);
}
-
@reflectiveTest
class InlineLocalTest extends RefactoringTest {
InlineLocalRefactoringImpl refactoring;
@@ -69,9 +67,7 @@
''');
_createRefactoring('test = 0');
RefactoringStatus status = await refactoring.checkInitialConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
expectedContextSearch: 'test = 1');
}
@@ -84,9 +80,7 @@
''');
_createRefactoring('test = 0');
RefactoringStatus status = await refactoring.checkInitialConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
expectedContextSearch: 'test += 1');
}
@@ -572,11 +566,9 @@
void _assert_fatalError_selection(RefactoringStatus status) {
expect(refactoring.variableName, isNull);
expect(refactoring.referenceCount, 0);
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
expectedMessage: 'Local variable declaration or reference must be '
- 'selected to activate this refactoring.');
+ 'selected to activate this refactoring.');
}
void _createRefactoring(String search) {
diff --git a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
index 8a93a7f..48f5c2a 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
@@ -16,13 +16,11 @@
import 'abstract_refactoring.dart';
import 'package:analysis_server/src/services/correction/status.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(InlineMethodTest);
}
-
@reflectiveTest
class InlineMethodTest extends RefactoringTest {
InlineMethodRefactoringImpl refactoring;
@@ -83,9 +81,7 @@
// error
RefactoringStatus status = await refactoring.checkAllConditions();
var location = new SourceRange(findOffset('..test()'), '..test()'.length);
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: 'Cannot inline cascade invocation.',
expectedContextRange: location);
}
@@ -119,9 +115,7 @@
refactoring.inlineAll = false;
// final conditions
status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: 'All references must be inlined to remove the source.');
}
@@ -1113,9 +1107,7 @@
// error
RefactoringStatus status = await refactoring.checkAllConditions();
var location = new SourceRange(findOffset('test();'), 'test()'.length);
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: 'No argument for the parameter "a".',
expectedContextRange: location);
}
@@ -1389,17 +1381,13 @@
Future _assertConditionsError(String message) async {
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: message);
}
Future _assertConditionsFatal(String message) async {
RefactoringStatus status = await refactoring.checkAllConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.FATAL,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
expectedMessage: message);
}
diff --git a/pkg/analysis_server/test/services/refactoring/move_file_test.dart b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
index 3772650..df7d396 100644
--- a/pkg/analysis_server/test/services/refactoring/move_file_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
@@ -17,13 +17,11 @@
import '../../reflective_tests.dart';
import 'abstract_refactoring.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(MoveFileTest);
}
-
@reflectiveTest
class MoveFileTest extends RefactoringTest {
MoveFileRefactoring refactoring;
@@ -105,11 +103,11 @@
Map<String, List<Folder>> packageMap = {
'my_pkg': [provider.getResource('/packages/my_pkg')]
};
- context.sourceFactory = new SourceFactory(
- [
- AbstractContextTest.SDK_RESOLVER,
- resourceResolver,
- new PackageMapUriResolver(provider, packageMap)]);
+ context.sourceFactory = new SourceFactory([
+ AbstractContextTest.SDK_RESOLVER,
+ resourceResolver,
+ new PackageMapUriResolver(provider, packageMap)
+ ]);
// do testing
String pathA = '/project/bin/a.dart';
addSource(pathA, '''
@@ -194,10 +192,7 @@
void _createRefactoring(String newName) {
refactoring = new MoveFileRefactoring(
- provider.pathContext,
- searchEngine,
- context,
- testSource);
+ provider.pathContext, searchEngine, context, testSource);
refactoring.newFile = newName;
}
diff --git a/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart b/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
index 534149b..04f7e03 100644
--- a/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
@@ -4,8 +4,8 @@
library test.services.refactoring.naming_conventions;
-import 'package:analysis_server/src/protocol.dart' show
- RefactoringProblemSeverity;
+import 'package:analysis_server/src/protocol.dart'
+ show RefactoringProblemSeverity;
import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
import 'package:analysis_server/src/services/refactoring/refactoring.dart';
import 'package:unittest/unittest.dart';
@@ -13,13 +13,11 @@
import '../../reflective_tests.dart';
import 'abstract_refactoring.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(NamingConventionsTest);
}
-
@reflectiveTest
class NamingConventionsTest extends RefactoringTest {
@override
@@ -27,44 +25,37 @@
void test_validateClassName_doesNotStartWithLowerCase() {
assertRefactoringStatus(
- validateClassName("newName"),
- RefactoringProblemSeverity.WARNING,
+ validateClassName("newName"), RefactoringProblemSeverity.WARNING,
expectedMessage: "Class name should start with an uppercase letter.");
}
void test_validateClassName_empty() {
assertRefactoringStatus(
- validateClassName(""),
- RefactoringProblemSeverity.FATAL,
+ validateClassName(""), RefactoringProblemSeverity.FATAL,
expectedMessage: "Class name must not be empty.");
}
void test_validateClassName_leadingBlanks() {
assertRefactoringStatus(
- validateClassName(" NewName"),
- RefactoringProblemSeverity.FATAL,
+ validateClassName(" NewName"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Class name must not start or end with a blank.");
}
void test_validateClassName_notIdentifierMiddle() {
assertRefactoringStatus(
- validateClassName("New-Name"),
- RefactoringProblemSeverity.FATAL,
+ validateClassName("New-Name"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Class name must not contain '-'.");
}
void test_validateClassName_notIdentifierStart() {
assertRefactoringStatus(
- validateClassName("-NewName"),
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- "Class name must begin with an uppercase letter or underscore.");
+ validateClassName("-NewName"), RefactoringProblemSeverity.FATAL,
+ expectedMessage: "Class name must begin with an uppercase letter or underscore.");
}
void test_validateClassName_null() {
assertRefactoringStatus(
- validateClassName(null),
- RefactoringProblemSeverity.FATAL,
+ validateClassName(null), RefactoringProblemSeverity.FATAL,
expectedMessage: "Class name must not be null.");
}
@@ -86,15 +77,13 @@
void test_validateClassName_trailingBlanks() {
assertRefactoringStatus(
- validateClassName("NewName "),
- RefactoringProblemSeverity.FATAL,
+ validateClassName("NewName "), RefactoringProblemSeverity.FATAL,
expectedMessage: "Class name must not start or end with a blank.");
}
void test_validateConstructorName_doesNotStartWithLowerCase() {
assertRefactoringStatus(
- validateConstructorName("NewName"),
- RefactoringProblemSeverity.WARNING,
+ validateConstructorName("NewName"), RefactoringProblemSeverity.WARNING,
expectedMessage: "Constructor name should start with a lowercase letter.");
}
@@ -104,30 +93,25 @@
void test_validateConstructorName_leadingBlanks() {
assertRefactoringStatus(
- validateConstructorName(" newName"),
- RefactoringProblemSeverity.FATAL,
+ validateConstructorName(" newName"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Constructor name must not start or end with a blank.");
}
void test_validateConstructorName_notIdentifierMiddle() {
assertRefactoringStatus(
- validateConstructorName("na-me"),
- RefactoringProblemSeverity.FATAL,
+ validateConstructorName("na-me"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Constructor name must not contain '-'.");
}
void test_validateConstructorName_notIdentifierStart() {
assertRefactoringStatus(
- validateConstructorName("2name"),
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- "Constructor name must begin with a lowercase letter or underscore.");
+ validateConstructorName("2name"), RefactoringProblemSeverity.FATAL,
+ expectedMessage: "Constructor name must begin with a lowercase letter or underscore.");
}
void test_validateConstructorName_null() {
assertRefactoringStatus(
- validateConstructorName(null),
- RefactoringProblemSeverity.FATAL,
+ validateConstructorName(null), RefactoringProblemSeverity.FATAL,
expectedMessage: "Constructor name must not be null.");
}
@@ -141,51 +125,43 @@
void test_validateConstructorName_trailingBlanks() {
assertRefactoringStatus(
- validateConstructorName("newName "),
- RefactoringProblemSeverity.FATAL,
+ validateConstructorName("newName "), RefactoringProblemSeverity.FATAL,
expectedMessage: "Constructor name must not start or end with a blank.");
}
void test_validateFieldName_doesNotStartWithLowerCase() {
assertRefactoringStatus(
- validateFieldName("NewName"),
- RefactoringProblemSeverity.WARNING,
+ validateFieldName("NewName"), RefactoringProblemSeverity.WARNING,
expectedMessage: "Field name should start with a lowercase letter.");
}
void test_validateFieldName_empty() {
assertRefactoringStatus(
- validateFieldName(""),
- RefactoringProblemSeverity.FATAL,
+ validateFieldName(""), RefactoringProblemSeverity.FATAL,
expectedMessage: "Field name must not be empty.");
}
void test_validateFieldName_leadingBlanks() {
assertRefactoringStatus(
- validateFieldName(" newName"),
- RefactoringProblemSeverity.FATAL,
+ validateFieldName(" newName"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Field name must not start or end with a blank.");
}
void test_validateFieldName_notIdentifierMiddle() {
assertRefactoringStatus(
- validateFieldName("new-Name"),
- RefactoringProblemSeverity.FATAL,
+ validateFieldName("new-Name"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Field name must not contain '-'.");
}
void test_validateFieldName_notIdentifierStart() {
assertRefactoringStatus(
- validateFieldName("2newName"),
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- "Field name must begin with a lowercase letter or underscore.");
+ validateFieldName("2newName"), RefactoringProblemSeverity.FATAL,
+ expectedMessage: "Field name must begin with a lowercase letter or underscore.");
}
void test_validateFieldName_null() {
assertRefactoringStatus(
- validateFieldName(null),
- RefactoringProblemSeverity.FATAL,
+ validateFieldName(null), RefactoringProblemSeverity.FATAL,
expectedMessage: "Field name must not be null.");
}
@@ -203,51 +179,43 @@
void test_validateFieldName_trailingBlanks() {
assertRefactoringStatus(
- validateFieldName("newName "),
- RefactoringProblemSeverity.FATAL,
+ validateFieldName("newName "), RefactoringProblemSeverity.FATAL,
expectedMessage: "Field name must not start or end with a blank.");
}
void test_validateFunctionName_doesNotStartWithLowerCase() {
assertRefactoringStatus(
- validateFunctionName("NewName"),
- RefactoringProblemSeverity.WARNING,
+ validateFunctionName("NewName"), RefactoringProblemSeverity.WARNING,
expectedMessage: "Function name should start with a lowercase letter.");
}
void test_validateFunctionName_empty() {
assertRefactoringStatus(
- validateFunctionName(""),
- RefactoringProblemSeverity.FATAL,
+ validateFunctionName(""), RefactoringProblemSeverity.FATAL,
expectedMessage: "Function name must not be empty.");
}
void test_validateFunctionName_leadingBlanks() {
assertRefactoringStatus(
- validateFunctionName(" newName"),
- RefactoringProblemSeverity.FATAL,
+ validateFunctionName(" newName"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Function name must not start or end with a blank.");
}
void test_validateFunctionName_notIdentifierMiddle() {
assertRefactoringStatus(
- validateFunctionName("new-Name"),
- RefactoringProblemSeverity.FATAL,
+ validateFunctionName("new-Name"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Function name must not contain '-'.");
}
void test_validateFunctionName_notIdentifierStart() {
assertRefactoringStatus(
- validateFunctionName("2newName"),
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- "Function name must begin with a lowercase letter or underscore.");
+ validateFunctionName("2newName"), RefactoringProblemSeverity.FATAL,
+ expectedMessage: "Function name must begin with a lowercase letter or underscore.");
}
void test_validateFunctionName_null() {
assertRefactoringStatus(
- validateFunctionName(null),
- RefactoringProblemSeverity.FATAL,
+ validateFunctionName(null), RefactoringProblemSeverity.FATAL,
expectedMessage: "Function name must not be null.");
}
@@ -265,53 +233,43 @@
void test_validateFunctionName_trailingBlanks() {
assertRefactoringStatus(
- validateFunctionName("newName "),
- RefactoringProblemSeverity.FATAL,
+ validateFunctionName("newName "), RefactoringProblemSeverity.FATAL,
expectedMessage: "Function name must not start or end with a blank.");
}
void test_validateFunctionTypeAliasName_doesNotStartWithLowerCase() {
- assertRefactoringStatus(
- validateFunctionTypeAliasName("newName"),
+ assertRefactoringStatus(validateFunctionTypeAliasName("newName"),
RefactoringProblemSeverity.WARNING,
- expectedMessage:
- "Function type alias name should start with an uppercase letter.");
+ expectedMessage: "Function type alias name should start with an uppercase letter.");
}
void test_validateFunctionTypeAliasName_empty() {
assertRefactoringStatus(
- validateFunctionTypeAliasName(""),
- RefactoringProblemSeverity.FATAL,
+ validateFunctionTypeAliasName(""), RefactoringProblemSeverity.FATAL,
expectedMessage: "Function type alias name must not be empty.");
}
void test_validateFunctionTypeAliasName_leadingBlanks() {
- assertRefactoringStatus(
- validateFunctionTypeAliasName(" NewName"),
+ assertRefactoringStatus(validateFunctionTypeAliasName(" NewName"),
RefactoringProblemSeverity.FATAL,
- expectedMessage:
- "Function type alias name must not start or end with a blank.");
+ expectedMessage: "Function type alias name must not start or end with a blank.");
}
void test_validateFunctionTypeAliasName_notIdentifierMiddle() {
- assertRefactoringStatus(
- validateFunctionTypeAliasName("New-Name"),
+ assertRefactoringStatus(validateFunctionTypeAliasName("New-Name"),
RefactoringProblemSeverity.FATAL,
expectedMessage: "Function type alias name must not contain '-'.");
}
void test_validateFunctionTypeAliasName_notIdentifierStart() {
- assertRefactoringStatus(
- validateFunctionTypeAliasName("-NewName"),
+ assertRefactoringStatus(validateFunctionTypeAliasName("-NewName"),
RefactoringProblemSeverity.FATAL,
- expectedMessage:
- "Function type alias name must begin with an uppercase letter or underscore.");
+ expectedMessage: "Function type alias name must begin with an uppercase letter or underscore.");
}
void test_validateFunctionTypeAliasName_null() {
assertRefactoringStatus(
- validateFunctionTypeAliasName(null),
- RefactoringProblemSeverity.FATAL,
+ validateFunctionTypeAliasName(null), RefactoringProblemSeverity.FATAL,
expectedMessage: "Function type alias name must not be null.");
}
@@ -332,17 +290,14 @@
}
void test_validateFunctionTypeAliasName_trailingBlanks() {
- assertRefactoringStatus(
- validateFunctionTypeAliasName("NewName "),
+ assertRefactoringStatus(validateFunctionTypeAliasName("NewName "),
RefactoringProblemSeverity.FATAL,
- expectedMessage:
- "Function type alias name must not start or end with a blank.");
+ expectedMessage: "Function type alias name must not start or end with a blank.");
}
void test_validateImportPrefixName_doesNotStartWithLowerCase() {
assertRefactoringStatus(
- validateImportPrefixName("NewName"),
- RefactoringProblemSeverity.WARNING,
+ validateImportPrefixName("NewName"), RefactoringProblemSeverity.WARNING,
expectedMessage: "Import prefix name should start with a lowercase letter.");
}
@@ -352,30 +307,25 @@
void test_validateImportPrefixName_leadingBlanks() {
assertRefactoringStatus(
- validateImportPrefixName(" newName"),
- RefactoringProblemSeverity.FATAL,
+ validateImportPrefixName(" newName"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Import prefix name must not start or end with a blank.");
}
void test_validateImportPrefixName_notIdentifierMiddle() {
assertRefactoringStatus(
- validateImportPrefixName("new-Name"),
- RefactoringProblemSeverity.FATAL,
+ validateImportPrefixName("new-Name"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Import prefix name must not contain '-'.");
}
void test_validateImportPrefixName_notIdentifierStart() {
assertRefactoringStatus(
- validateImportPrefixName("2newName"),
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- "Import prefix name must begin with a lowercase letter or underscore.");
+ validateImportPrefixName("2newName"), RefactoringProblemSeverity.FATAL,
+ expectedMessage: "Import prefix name must begin with a lowercase letter or underscore.");
}
void test_validateImportPrefixName_null() {
assertRefactoringStatus(
- validateImportPrefixName(null),
- RefactoringProblemSeverity.FATAL,
+ validateImportPrefixName(null), RefactoringProblemSeverity.FATAL,
expectedMessage: "Import prefix name must not be null.");
}
@@ -393,51 +343,43 @@
void test_validateImportPrefixName_trailingBlanks() {
assertRefactoringStatus(
- validateImportPrefixName("newName "),
- RefactoringProblemSeverity.FATAL,
+ validateImportPrefixName("newName "), RefactoringProblemSeverity.FATAL,
expectedMessage: "Import prefix name must not start or end with a blank.");
}
void test_validateLabelName_doesNotStartWithLowerCase() {
assertRefactoringStatus(
- validateLabelName("NewName"),
- RefactoringProblemSeverity.WARNING,
+ validateLabelName("NewName"), RefactoringProblemSeverity.WARNING,
expectedMessage: "Label name should start with a lowercase letter.");
}
void test_validateLabelName_empty() {
assertRefactoringStatus(
- validateLabelName(""),
- RefactoringProblemSeverity.FATAL,
+ validateLabelName(""), RefactoringProblemSeverity.FATAL,
expectedMessage: "Label name must not be empty.");
}
void test_validateLabelName_leadingBlanks() {
assertRefactoringStatus(
- validateLabelName(" newName"),
- RefactoringProblemSeverity.FATAL,
+ validateLabelName(" newName"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Label name must not start or end with a blank.");
}
void test_validateLabelName_notIdentifierMiddle() {
assertRefactoringStatus(
- validateLabelName("new-Name"),
- RefactoringProblemSeverity.FATAL,
+ validateLabelName("new-Name"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Label name must not contain '-'.");
}
void test_validateLabelName_notIdentifierStart() {
assertRefactoringStatus(
- validateLabelName("2newName"),
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- "Label name must begin with a lowercase letter or underscore.");
+ validateLabelName("2newName"), RefactoringProblemSeverity.FATAL,
+ expectedMessage: "Label name must begin with a lowercase letter or underscore.");
}
void test_validateLabelName_null() {
assertRefactoringStatus(
- validateLabelName(null),
- RefactoringProblemSeverity.FATAL,
+ validateLabelName(null), RefactoringProblemSeverity.FATAL,
expectedMessage: "Label name must not be null.");
}
@@ -459,67 +401,55 @@
void test_validateLabelName_trailingBlanks() {
assertRefactoringStatus(
- validateLabelName("newName "),
- RefactoringProblemSeverity.FATAL,
+ validateLabelName("newName "), RefactoringProblemSeverity.FATAL,
expectedMessage: "Label name must not start or end with a blank.");
}
void test_validateLibraryName_blank() {
assertRefactoringStatus(
- validateLibraryName(""),
- RefactoringProblemSeverity.FATAL,
+ validateLibraryName(""), RefactoringProblemSeverity.FATAL,
expectedMessage: "Library name must not be blank.");
assertRefactoringStatus(
- validateLibraryName(" "),
- RefactoringProblemSeverity.FATAL,
+ validateLibraryName(" "), RefactoringProblemSeverity.FATAL,
expectedMessage: "Library name must not be blank.");
}
void test_validateLibraryName_blank_identifier() {
assertRefactoringStatus(
- validateLibraryName("my..name"),
- RefactoringProblemSeverity.FATAL,
+ validateLibraryName("my..name"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Library name identifier must not be empty.");
assertRefactoringStatus(
- validateLibraryName("my. .name"),
- RefactoringProblemSeverity.FATAL,
+ validateLibraryName("my. .name"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Library name identifier must not start or end with a blank.");
}
void test_validateLibraryName_hasUpperCase() {
assertRefactoringStatus(
- validateLibraryName("my.newName"),
- RefactoringProblemSeverity.WARNING,
- expectedMessage:
- "Library name should consist of lowercase identifier separated by dots.");
+ validateLibraryName("my.newName"), RefactoringProblemSeverity.WARNING,
+ expectedMessage: "Library name should consist of lowercase identifier separated by dots.");
}
void test_validateLibraryName_leadingBlanks() {
assertRefactoringStatus(
- validateLibraryName("my. name"),
- RefactoringProblemSeverity.FATAL,
+ validateLibraryName("my. name"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Library name identifier must not start or end with a blank.");
}
void test_validateLibraryName_notIdentifierMiddle() {
assertRefactoringStatus(
- validateLibraryName("my.ba-d.name"),
- RefactoringProblemSeverity.FATAL,
+ validateLibraryName("my.ba-d.name"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Library name identifier must not contain '-'.");
}
void test_validateLibraryName_notIdentifierStart() {
assertRefactoringStatus(
- validateLibraryName("my.2bad.name"),
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- "Library name identifier must begin with a lowercase letter or underscore.");
+ validateLibraryName("my.2bad.name"), RefactoringProblemSeverity.FATAL,
+ expectedMessage: "Library name identifier must begin with a lowercase letter or underscore.");
}
void test_validateLibraryName_null() {
assertRefactoringStatus(
- validateLibraryName(null),
- RefactoringProblemSeverity.FATAL,
+ validateLibraryName(null), RefactoringProblemSeverity.FATAL,
expectedMessage: "Library name must not be null.");
}
@@ -533,51 +463,43 @@
void test_validateLibraryName_trailingBlanks() {
assertRefactoringStatus(
- validateLibraryName("my.bad .name"),
- RefactoringProblemSeverity.FATAL,
+ validateLibraryName("my.bad .name"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Library name identifier must not start or end with a blank.");
}
void test_validateMethodName_doesNotStartWithLowerCase() {
assertRefactoringStatus(
- validateMethodName("NewName"),
- RefactoringProblemSeverity.WARNING,
+ validateMethodName("NewName"), RefactoringProblemSeverity.WARNING,
expectedMessage: "Method name should start with a lowercase letter.");
}
void test_validateMethodName_empty() {
assertRefactoringStatus(
- validateMethodName(""),
- RefactoringProblemSeverity.FATAL,
+ validateMethodName(""), RefactoringProblemSeverity.FATAL,
expectedMessage: "Method name must not be empty.");
}
void test_validateMethodName_leadingBlanks() {
assertRefactoringStatus(
- validateMethodName(" newName"),
- RefactoringProblemSeverity.FATAL,
+ validateMethodName(" newName"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Method name must not start or end with a blank.");
}
void test_validateMethodName_notIdentifierMiddle() {
assertRefactoringStatus(
- validateMethodName("new-Name"),
- RefactoringProblemSeverity.FATAL,
+ validateMethodName("new-Name"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Method name must not contain '-'.");
}
void test_validateMethodName_notIdentifierStart() {
assertRefactoringStatus(
- validateMethodName("2newName"),
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- "Method name must begin with a lowercase letter or underscore.");
+ validateMethodName("2newName"), RefactoringProblemSeverity.FATAL,
+ expectedMessage: "Method name must begin with a lowercase letter or underscore.");
}
void test_validateMethodName_null() {
assertRefactoringStatus(
- validateMethodName(null),
- RefactoringProblemSeverity.FATAL,
+ validateMethodName(null), RefactoringProblemSeverity.FATAL,
expectedMessage: "Method name must not be null.");
}
@@ -595,51 +517,43 @@
void test_validateMethodName_trailingBlanks() {
assertRefactoringStatus(
- validateMethodName("newName "),
- RefactoringProblemSeverity.FATAL,
+ validateMethodName("newName "), RefactoringProblemSeverity.FATAL,
expectedMessage: "Method name must not start or end with a blank.");
}
void test_validateParameterName_doesNotStartWithLowerCase() {
assertRefactoringStatus(
- validateParameterName("NewName"),
- RefactoringProblemSeverity.WARNING,
+ validateParameterName("NewName"), RefactoringProblemSeverity.WARNING,
expectedMessage: "Parameter name should start with a lowercase letter.");
}
void test_validateParameterName_empty() {
assertRefactoringStatus(
- validateParameterName(""),
- RefactoringProblemSeverity.FATAL,
+ validateParameterName(""), RefactoringProblemSeverity.FATAL,
expectedMessage: "Parameter name must not be empty.");
}
void test_validateParameterName_leadingBlanks() {
assertRefactoringStatus(
- validateParameterName(" newName"),
- RefactoringProblemSeverity.FATAL,
+ validateParameterName(" newName"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Parameter name must not start or end with a blank.");
}
void test_validateParameterName_notIdentifierMiddle() {
assertRefactoringStatus(
- validateParameterName("new-Name"),
- RefactoringProblemSeverity.FATAL,
+ validateParameterName("new-Name"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Parameter name must not contain '-'.");
}
void test_validateParameterName_notIdentifierStart() {
assertRefactoringStatus(
- validateParameterName("2newName"),
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- "Parameter name must begin with a lowercase letter or underscore.");
+ validateParameterName("2newName"), RefactoringProblemSeverity.FATAL,
+ expectedMessage: "Parameter name must begin with a lowercase letter or underscore.");
}
void test_validateParameterName_null() {
assertRefactoringStatus(
- validateParameterName(null),
- RefactoringProblemSeverity.FATAL,
+ validateParameterName(null), RefactoringProblemSeverity.FATAL,
expectedMessage: "Parameter name must not be null.");
}
@@ -657,51 +571,43 @@
void test_validateParameterName_trailingBlanks() {
assertRefactoringStatus(
- validateParameterName("newName "),
- RefactoringProblemSeverity.FATAL,
+ validateParameterName("newName "), RefactoringProblemSeverity.FATAL,
expectedMessage: "Parameter name must not start or end with a blank.");
}
void test_validateVariableName_doesNotStartWithLowerCase() {
assertRefactoringStatus(
- validateVariableName("NewName"),
- RefactoringProblemSeverity.WARNING,
+ validateVariableName("NewName"), RefactoringProblemSeverity.WARNING,
expectedMessage: "Variable name should start with a lowercase letter.");
}
void test_validateVariableName_empty() {
assertRefactoringStatus(
- validateVariableName(""),
- RefactoringProblemSeverity.FATAL,
+ validateVariableName(""), RefactoringProblemSeverity.FATAL,
expectedMessage: "Variable name must not be empty.");
}
void test_validateVariableName_leadingBlanks() {
assertRefactoringStatus(
- validateVariableName(" newName"),
- RefactoringProblemSeverity.FATAL,
+ validateVariableName(" newName"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Variable name must not start or end with a blank.");
}
void test_validateVariableName_notIdentifierMiddle() {
assertRefactoringStatus(
- validateVariableName("new-Name"),
- RefactoringProblemSeverity.FATAL,
+ validateVariableName("new-Name"), RefactoringProblemSeverity.FATAL,
expectedMessage: "Variable name must not contain '-'.");
}
void test_validateVariableName_notIdentifierStart() {
assertRefactoringStatus(
- validateVariableName("2newName"),
- RefactoringProblemSeverity.FATAL,
- expectedMessage:
- "Variable name must begin with a lowercase letter or underscore.");
+ validateVariableName("2newName"), RefactoringProblemSeverity.FATAL,
+ expectedMessage: "Variable name must begin with a lowercase letter or underscore.");
}
void test_validateVariableName_null() {
assertRefactoringStatus(
- validateVariableName(null),
- RefactoringProblemSeverity.FATAL,
+ validateVariableName(null), RefactoringProblemSeverity.FATAL,
expectedMessage: "Variable name must not be null.");
}
@@ -723,8 +629,7 @@
void test_validateVariableName_trailingBlanks() {
assertRefactoringStatus(
- validateVariableName("newName "),
- RefactoringProblemSeverity.FATAL,
+ validateVariableName("newName "), RefactoringProblemSeverity.FATAL,
expectedMessage: "Variable name must not start or end with a blank.");
}
}
diff --git a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
index fe91fd6..a91c99b 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
@@ -11,13 +11,11 @@
import '../../reflective_tests.dart';
import 'abstract_rename.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(RenameClassMemberTest);
}
-
@reflectiveTest
class RenameClassMemberTest extends RenameRefactoringTest {
test_checkFinalConditions_hasMember_MethodElement() async {
@@ -31,9 +29,7 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: "Class 'A' already declares method with name 'newName'.",
expectedContextSearch: 'newName() {} // existing');
}
@@ -73,11 +69,8 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
- expectedMessage:
- "Usage of renamed method will be shadowed by local variable 'newName'.",
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+ expectedMessage: "Usage of renamed method will be shadowed by local variable 'newName'.",
expectedContextSearch: 'test(); // marker');
}
@@ -97,11 +90,8 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
- expectedMessage:
- "Usage of renamed method will be shadowed by local variable 'newName'.",
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+ expectedMessage: "Usage of renamed method will be shadowed by local variable 'newName'.",
expectedContextSearch: 'test(); // marker');
}
@@ -151,11 +141,8 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
- expectedMessage:
- "Usage of renamed method will be shadowed by parameter 'newName'.",
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+ expectedMessage: "Usage of renamed method will be shadowed by parameter 'newName'.",
expectedContextSearch: 'test(); // marker');
}
@@ -175,9 +162,7 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: "Renamed method will shadow method 'A.newName'.",
expectedContextSearch: 'newName() {} // marker');
}
@@ -200,9 +185,7 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: "Renamed method will shadow field 'A.newName'.",
expectedContextSearch: 'newName; // marker');
}
@@ -223,9 +206,7 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: "Renamed method will be shadowed by method 'B.newName'.",
expectedContextSearch: 'newName() {} // marker');
}
@@ -253,8 +234,7 @@
// null
refactoring.newName = null;
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Field name must not be null.");
// OK
refactoring.newName = 'newName';
@@ -271,20 +251,17 @@
// null
refactoring.newName = null;
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Method name must not be null.");
// empty
refactoring.newName = '';
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Method name must not be empty.");
// same
refactoring.newName = 'test';
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "The new name must be different than the current name.");
// OK
refactoring.newName = 'newName';
diff --git a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
index 2d01a48..5591f35 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
@@ -13,13 +13,11 @@
import '../../reflective_tests.dart';
import 'abstract_rename.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(RenameConstructorTest);
}
-
@reflectiveTest
class RenameConstructorTest extends RenameRefactoringTest {
test_checkFinalConditions_hasMember_constructor() async {
@@ -33,9 +31,7 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: "Class 'A' already declares constructor with name 'newName'.",
expectedContextSearch: 'newName() {} // existing');
}
@@ -51,9 +47,7 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: "Class 'A' already declares method with name 'newName'.",
expectedContextSearch: 'newName() {} // existing');
}
@@ -69,14 +63,12 @@
// null
refactoring.newName = null;
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Constructor name must not be null.");
// same
refactoring.newName = 'test';
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "The new name must be different than the current name.");
// empty
refactoring.newName = '';
@@ -189,8 +181,8 @@
}
void _createConstructorDeclarationRefactoring(String search) {
- ConstructorElement element =
- findNodeElementAtString(search, (node) => node is ConstructorDeclaration);
+ ConstructorElement element = findNodeElementAtString(
+ search, (node) => node is ConstructorDeclaration);
createRenameRefactoringForElement(element);
}
}
diff --git a/pkg/analysis_server/test/services/refactoring/rename_import_test.dart b/pkg/analysis_server/test/services/refactoring/rename_import_test.dart
index f0846cf..b2a54c6 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_import_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_import_test.dart
@@ -11,13 +11,11 @@
import '../../reflective_tests.dart';
import 'abstract_rename.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(RenameImportTest);
}
-
@reflectiveTest
class RenameImportTest extends RenameRefactoringTest {
test_checkNewName() {
@@ -27,14 +25,12 @@
// null
refactoring.newName = null;
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Import prefix name must not be null.");
// same
refactoring.newName = 'test';
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "The new name must be different than the current name.");
// empty
refactoring.newName = '';
diff --git a/pkg/analysis_server/test/services/refactoring/rename_label_test.dart b/pkg/analysis_server/test/services/refactoring/rename_label_test.dart
index bd41cbc..a6812051 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_label_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_label_test.dart
@@ -10,13 +10,11 @@
import '../../reflective_tests.dart';
import 'abstract_rename.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(RenameLabelTest);
}
-
@reflectiveTest
class RenameLabelTest extends RenameRefactoringTest {
test_checkNewName_LocalVariableElement() {
@@ -32,14 +30,12 @@
// null
refactoring.newName = null;
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Label name must not be null.");
// empty
refactoring.newName = '';
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Label name must not be empty.");
// OK
refactoring.newName = 'newName';
diff --git a/pkg/analysis_server/test/services/refactoring/rename_library_test.dart b/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
index 4df587d..53a4f24 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
@@ -11,14 +11,11 @@
import '../../reflective_tests.dart';
import 'abstract_rename.dart';
-
-
main() {
groupSep = ' | ';
runReflectiveTests(RenameLibraryTest);
}
-
@reflectiveTest
class RenameLibraryTest extends RenameRefactoringTest {
void test_checkNewName() {
@@ -29,20 +26,17 @@
// null
refactoring.newName = null;
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Library name must not be null.");
// empty
refactoring.newName = '';
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Library name must not be blank.");
// same name
refactoring.newName = 'my.app';
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "The new name must be different than the current name.");
}
@@ -55,8 +49,7 @@
part 'part.dart';
''');
index.indexUnit(
- context,
- context.resolveCompilationUnit2(unitSource, testSource));
+ context, context.resolveCompilationUnit2(unitSource, testSource));
// configure refactoring
_createRenameRefactoring();
expect(refactoring.refactoringName, 'Rename Library');
diff --git a/pkg/analysis_server/test/services/refactoring/rename_local_test.dart b/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
index 89b34f6..e5d647b 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
@@ -29,9 +29,7 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: "Duplicate function 'newName'.",
expectedContextSearch: 'newName() => 1');
}
@@ -47,9 +45,7 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: "Duplicate function 'newName'.");
}
@@ -66,9 +62,7 @@
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
expect(status.problems, hasLength(1));
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: "Duplicate local variable 'newName'.",
expectedContextSearch: 'newName = 1;');
}
@@ -84,9 +78,7 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: "Duplicate local variable 'newName'.",
expectedContextSearch: 'newName = 1;');
}
@@ -137,11 +129,9 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: 'Usage of field "A.newName" declared in "test.dart" '
- 'will be shadowed by renamed local variable.',
+ 'will be shadowed by renamed local variable.',
expectedContextSearch: 'newName);');
}
@@ -162,11 +152,9 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: 'Usage of field "B.newName" declared in "test.dart" '
- 'will be shadowed by renamed parameter.',
+ 'will be shadowed by renamed parameter.',
expectedContextSearch: 'newName);');
}
@@ -212,9 +200,7 @@
// check status
refactoring.newName = 'newName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedContextSearch: 'newName(); // ref');
}
@@ -228,8 +214,7 @@
// null
refactoring.newName = null;
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Function name must not be null.");
// OK
refactoring.newName = 'newName';
@@ -246,14 +231,12 @@
// null
refactoring.newName = null;
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Variable name must not be null.");
// empty
refactoring.newName = '';
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Variable name must not be empty.");
// OK
refactoring.newName = 'newName';
@@ -269,8 +252,7 @@
// null
refactoring.newName = null;
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Parameter name must not be null.");
// OK
refactoring.newName = 'newName';
diff --git a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
index 1754975..2f265a3 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
@@ -11,13 +11,11 @@
import '../../reflective_tests.dart';
import 'abstract_rename.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(RenameUnitMemberTest);
}
-
@reflectiveTest
class RenameUnitMemberTest extends RenameRefactoringTest {
test_checkFinalConditions_hasTopLevel_ClassElement() async {
@@ -29,9 +27,7 @@
// check status
refactoring.newName = 'NewName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: "Library already declares class with name 'NewName'.",
expectedContextSearch: 'NewName {} // existing');
}
@@ -45,11 +41,8 @@
// check status
refactoring.newName = 'NewName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
- expectedMessage:
- "Library already declares function type alias with name 'NewName'.",
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+ expectedMessage: "Library already declares function type alias with name 'NewName'.",
expectedContextSearch: 'NewName(); // existing');
}
@@ -86,11 +79,8 @@
// check status
refactoring.newName = 'NewName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
- expectedMessage:
- "Reference to renamed class will be shadowed by method 'A.NewName'.",
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+ expectedMessage: "Reference to renamed class will be shadowed by method 'A.NewName'.",
expectedContextSearch: 'NewName() {}');
}
@@ -114,17 +104,11 @@
// check status
refactoring.newName = 'NewName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: "Renamed class will shadow method 'A.NewName'.");
}
-
-
-
-
- test_checkFinalConditions_shadowsInSubClass_importedLib_hideCombinator() async {
+ test_checkFinalConditions_shadowsInSubClass_importedLib_hideCombinator() async {
indexTestUnit('''
class Test {}
''');
@@ -163,9 +147,7 @@
// check status
refactoring.newName = 'NewName';
RefactoringStatus status = await refactoring.checkFinalConditions();
- assertRefactoringStatus(
- status,
- RefactoringProblemSeverity.ERROR,
+ assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
expectedMessage: "Renamed class will shadow method 'A.NewName'.",
expectedContextSearch: 'NewName(); // super-ref');
}
@@ -219,20 +201,17 @@
// null
refactoring.newName = null;
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Class name must not be null.");
// empty
refactoring.newName = '';
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Class name must not be empty.");
// same
refactoring.newName = 'Test';
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "The new name must be different than the current name.");
// OK
refactoring.newName = 'NewName';
@@ -247,14 +226,12 @@
// null
refactoring.newName = null;
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Function name must not be null.");
// empty
refactoring.newName = '';
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Function name must not be empty.");
// OK
refactoring.newName = 'newName';
@@ -269,8 +246,7 @@
// null
refactoring.newName = null;
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Function type alias name must not be null.");
// OK
refactoring.newName = 'NewName';
@@ -285,14 +261,12 @@
// null
refactoring.newName = null;
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Variable name must not be null.");
// empty
refactoring.newName = '';
assertRefactoringStatus(
- refactoring.checkNewName(),
- RefactoringProblemSeverity.FATAL,
+ refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
expectedMessage: "Variable name must not be empty.");
// OK
refactoring.newName = 'newName';
diff --git a/pkg/analysis_server/test/services/search/hierarchy_test.dart b/pkg/analysis_server/test/services/search/hierarchy_test.dart
index c2acc44..3829063 100644
--- a/pkg/analysis_server/test/services/search/hierarchy_test.dart
+++ b/pkg/analysis_server/test/services/search/hierarchy_test.dart
@@ -16,13 +16,11 @@
import '../../abstract_single_unit.dart';
import '../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(HierarchyTest);
}
-
@reflectiveTest
class HierarchyTest extends AbstractSingleUnitTest {
Index index;
@@ -218,16 +216,14 @@
{
ClassElement classA = findElement('A');
List<Element> members = getMembers(classA);
- expect(
- members.map((e) => e.name),
+ expect(members.map((e) => e.name),
unorderedEquals(['ma1', 'ma2', '==', 'toString', 'hashCode']));
}
{
ClassElement classB = findElement('B');
List<Element> members = getMembers(classB);
- expect(
- members.map((e) => e.name),
- unorderedEquals(['mb1', 'mb2', 'ma1', 'ma2', '==', 'toString', 'hashCode']));
+ expect(members.map((e) => e.name), unorderedEquals(
+ ['mb1', 'mb2', 'ma1', 'ma2', '==', 'toString', 'hashCode']));
}
}
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 804a62f..1f21c70 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -18,7 +18,6 @@
import '../../abstract_single_unit.dart';
import '../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(SearchEngineImplTest);
@@ -62,12 +61,10 @@
}
}
-
class MockIndex extends TypedMock implements Index {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
@reflectiveTest
class SearchEngineImplTest extends AbstractSingleUnitTest {
Index index;
@@ -95,9 +92,10 @@
ClassElement elementB = findElement('B');
Element element_test = findElement('test', ElementKind.LOCAL_VARIABLE);
var expected = [
- _expectId(elementA.methods[0], MatchKind.DECLARATION, 'test() {}'),
- _expectId(elementB.fields[0], MatchKind.DECLARATION, 'test = 1;'),
- _expectId(element_test, MatchKind.DECLARATION, 'test = 2;'),];
+ _expectId(elementA.methods[0], MatchKind.DECLARATION, 'test() {}'),
+ _expectId(elementB.fields[0], MatchKind.DECLARATION, 'test = 1;'),
+ _expectId(element_test, MatchKind.DECLARATION, 'test = 2;'),
+ ];
return searchEngine.searchElementDeclarations('test').then((matches) {
_assertMatches(matches, expected);
});
@@ -118,8 +116,9 @@
ClassElement elementA = findElement('A');
ClassElement elementB = findElement('B');
var expected = [
- _expectId(elementA.methods[0], MatchKind.DECLARATION, 'test() {}'),
- _expectId(elementB.fields[0], MatchKind.DECLARATION, 'test = 1;')];
+ _expectId(elementA.methods[0], MatchKind.DECLARATION, 'test() {}'),
+ _expectId(elementB.fields[0], MatchKind.DECLARATION, 'test = 1;')
+ ];
return searchEngine.searchMemberDeclarations('test').then((matches) {
_assertMatches(matches, expected);
});
@@ -150,18 +149,19 @@
Element mainA = findElement('mainA');
Element main = findElement('main');
var expected = [
- _expectId(mainA, MatchKind.INVOCATION, 'test(); // a-inv-r-nq'),
- _expectId(mainA, MatchKind.WRITE, 'test = 1; // a-write-r-nq'),
- _expectId(mainA, MatchKind.READ_WRITE, 'test += 2; // a-read-write-r-nq'),
- _expectId(mainA, MatchKind.READ, 'test); // a-read-r-nq'),
- _expectIdQ(main, MatchKind.INVOCATION, 'test(); // a-inv-r-q'),
- _expectIdQ(main, MatchKind.WRITE, 'test = 1; // a-write-r-q'),
- _expectIdQ(main, MatchKind.READ_WRITE, 'test += 2; // a-read-write-r-q'),
- _expectIdQ(main, MatchKind.READ, 'test); // a-read-r-q'),
- _expectIdU(main, MatchKind.INVOCATION, 'test(); // p-inv-ur-q'),
- _expectIdU(main, MatchKind.WRITE, 'test = 1; // p-write-ur-q'),
- _expectIdU(main, MatchKind.READ_WRITE, 'test += 2; // p-read-write-ur-q'),
- _expectIdU(main, MatchKind.READ, 'test); // p-read-ur-q'),];
+ _expectId(mainA, MatchKind.INVOCATION, 'test(); // a-inv-r-nq'),
+ _expectId(mainA, MatchKind.WRITE, 'test = 1; // a-write-r-nq'),
+ _expectId(mainA, MatchKind.READ_WRITE, 'test += 2; // a-read-write-r-nq'),
+ _expectId(mainA, MatchKind.READ, 'test); // a-read-r-nq'),
+ _expectIdQ(main, MatchKind.INVOCATION, 'test(); // a-inv-r-q'),
+ _expectIdQ(main, MatchKind.WRITE, 'test = 1; // a-write-r-q'),
+ _expectIdQ(main, MatchKind.READ_WRITE, 'test += 2; // a-read-write-r-q'),
+ _expectIdQ(main, MatchKind.READ, 'test); // a-read-r-q'),
+ _expectIdU(main, MatchKind.INVOCATION, 'test(); // p-inv-ur-q'),
+ _expectIdU(main, MatchKind.WRITE, 'test = 1; // p-write-ur-q'),
+ _expectIdU(main, MatchKind.READ_WRITE, 'test += 2; // p-read-write-ur-q'),
+ _expectIdU(main, MatchKind.READ, 'test); // p-read-ur-q'),
+ ];
return searchEngine.searchMemberReferences('test').then((matches) {
_assertMatches(matches, expected);
});
@@ -178,8 +178,9 @@
Element pElement = findElement('p');
Element vElement = findElement('v');
var expected = [
- _expectId(pElement, MatchKind.REFERENCE, 'A p'),
- _expectId(vElement, MatchKind.REFERENCE, 'A v')];
+ _expectId(pElement, MatchKind.REFERENCE, 'A p'),
+ _expectId(vElement, MatchKind.REFERENCE, 'A v')
+ ];
return _verifyReferences(element, expected);
}
@@ -193,11 +194,9 @@
''');
CompilationUnitElement element = testLibraryElement.parts[0];
var expected = [
- _expectId(
- testUnitElement,
- MatchKind.REFERENCE,
- "'my_part.dart'",
- length: "'my_part.dart'".length)];
+ _expectId(testUnitElement, MatchKind.REFERENCE, "'my_part.dart'",
+ length: "'my_part.dart'".length)
+ ];
return _verifyReferences(element, expected);
}
@@ -213,12 +212,13 @@
ConstructorElement element = findElement('named');
Element mainElement = findElement('main');
var expected = [
- _expectId(mainElement, MatchKind.REFERENCE, '.named();', length: 6)];
+ _expectId(mainElement, MatchKind.REFERENCE, '.named();', length: 6)
+ ];
return _verifyReferences(element, expected);
}
Future test_searchReferences_Element_unknown() {
- return _verifyReferences(UniverseElement.INSTANCE, []);
+ return _verifyReferences(DynamicElementImpl.instance, []);
}
Future test_searchReferences_FieldElement() {
@@ -243,14 +243,15 @@
Element main = findElement('main');
Element fieldParameter = findElement('field', ElementKind.PARAMETER);
var expected = [
- _expectId(fieldParameter, MatchKind.WRITE, 'field}'),
- _expectId(main, MatchKind.REFERENCE, 'field: 1'),
- _expectId(main, MatchKind.READ, 'field); // ref-nq'),
- _expectIdQ(main, MatchKind.READ, 'field); // ref-q'),
- _expectId(main, MatchKind.INVOCATION, 'field(); // inv-nq'),
- _expectIdQ(main, MatchKind.INVOCATION, 'field(); // inv-q'),
- _expectId(main, MatchKind.WRITE, 'field = 2; // ref-nq'),
- _expectIdQ(main, MatchKind.WRITE, 'field = 3; // ref-q'),];
+ _expectId(fieldParameter, MatchKind.WRITE, 'field}'),
+ _expectId(main, MatchKind.REFERENCE, 'field: 1'),
+ _expectId(main, MatchKind.READ, 'field); // ref-nq'),
+ _expectIdQ(main, MatchKind.READ, 'field); // ref-q'),
+ _expectId(main, MatchKind.INVOCATION, 'field(); // inv-nq'),
+ _expectIdQ(main, MatchKind.INVOCATION, 'field(); // inv-q'),
+ _expectId(main, MatchKind.WRITE, 'field = 2; // ref-nq'),
+ _expectIdQ(main, MatchKind.WRITE, 'field = 3; // ref-q'),
+ ];
return _verifyReferences(element, expected);
}
@@ -265,8 +266,9 @@
FunctionElement element = findElement('test');
Element mainElement = findElement('main');
var expected = [
- _expectId(mainElement, MatchKind.INVOCATION, 'test();'),
- _expectId(mainElement, MatchKind.REFERENCE, 'test);')];
+ _expectId(mainElement, MatchKind.INVOCATION, 'test();'),
+ _expectId(mainElement, MatchKind.REFERENCE, 'test);')
+ ];
return _verifyReferences(element, expected);
}
@@ -282,8 +284,9 @@
Element aElement = findElement('a');
Element bElement = findElement('b');
var expected = [
- _expectId(aElement, MatchKind.REFERENCE, 'Test a;'),
- _expectId(bElement, MatchKind.REFERENCE, 'Test b;')];
+ _expectId(aElement, MatchKind.REFERENCE, 'Test a;'),
+ _expectId(bElement, MatchKind.REFERENCE, 'Test b;')
+ ];
return _verifyReferences(element, expected);
}
@@ -312,7 +315,8 @@
Element mainElement = findElement('main');
var kind = MatchKind.REFERENCE;
var expected = [
- _expectId(mainElement, kind, 'math.PI);', length: 'math.'.length)];
+ _expectId(mainElement, kind, 'math.PI);', length: 'math.'.length)
+ ];
return _verifyReferences(element, expected);
}
@@ -331,8 +335,9 @@
LabelElement element = findElement('label');
Element mainElement = findElement('main');
var expected = [
- _expectId(mainElement, MatchKind.REFERENCE, 'label; // 1'),
- _expectId(mainElement, MatchKind.REFERENCE, 'label; // 2')];
+ _expectId(mainElement, MatchKind.REFERENCE, 'label; // 1'),
+ _expectId(mainElement, MatchKind.REFERENCE, 'label; // 2')
+ ];
return _verifyReferences(element, expected);
}
@@ -352,16 +357,11 @@
index.indexUnit(context, elementA.node);
index.indexUnit(context, elementB.node);
var expected = [
- new ExpectedMatch(
- elementA,
- MatchKind.REFERENCE,
- codeA.indexOf('lib; // A'),
- 'lib'.length),
- new ExpectedMatch(
- elementB,
- MatchKind.REFERENCE,
- codeB.indexOf('lib; // B'),
- 'lib'.length),];
+ new ExpectedMatch(elementA, MatchKind.REFERENCE,
+ codeA.indexOf('lib; // A'), 'lib'.length),
+ new ExpectedMatch(elementB, MatchKind.REFERENCE,
+ codeB.indexOf('lib; // B'), 'lib'.length),
+ ];
return _verifyReferences(element, expected);
}
@@ -378,10 +378,11 @@
LocalVariableElement element = findElement('v');
Element mainElement = findElement('main');
var expected = [
- _expectId(mainElement, MatchKind.WRITE, 'v = 1;'),
- _expectId(mainElement, MatchKind.READ_WRITE, 'v += 2;'),
- _expectId(mainElement, MatchKind.READ, 'v);'),
- _expectId(mainElement, MatchKind.INVOCATION, 'v();')];
+ _expectId(mainElement, MatchKind.WRITE, 'v = 1;'),
+ _expectId(mainElement, MatchKind.READ_WRITE, 'v += 2;'),
+ _expectId(mainElement, MatchKind.READ, 'v);'),
+ _expectId(mainElement, MatchKind.INVOCATION, 'v();')
+ ];
return _verifyReferences(element, expected);
}
@@ -400,10 +401,11 @@
MethodElement method = findElement('m');
Element mainElement = findElement('main');
var expected = [
- _expectId(mainElement, MatchKind.INVOCATION, 'm(); // 1'),
- _expectIdQ(mainElement, MatchKind.INVOCATION, 'm(); // 2'),
- _expectId(mainElement, MatchKind.REFERENCE, 'm); // 3'),
- _expectIdQ(mainElement, MatchKind.REFERENCE, 'm); // 4')];
+ _expectId(mainElement, MatchKind.INVOCATION, 'm(); // 1'),
+ _expectIdQ(mainElement, MatchKind.INVOCATION, 'm(); // 2'),
+ _expectId(mainElement, MatchKind.REFERENCE, 'm); // 3'),
+ _expectIdQ(mainElement, MatchKind.REFERENCE, 'm); // 4')
+ ];
return _verifyReferences(method, expected);
}
@@ -419,7 +421,8 @@
MethodMember method = findNodeElementAtString('m(); // ref');
Element mainElement = findElement('main');
var expected = [
- _expectIdQ(mainElement, MatchKind.INVOCATION, 'm(); // ref')];
+ _expectIdQ(mainElement, MatchKind.INVOCATION, 'm(); // ref')
+ ];
return _verifyReferences(method, expected);
}
@@ -439,11 +442,12 @@
Element fooElement = findElement('foo');
Element mainElement = findElement('main');
var expected = [
- _expectId(fooElement, MatchKind.WRITE, 'p = 1;'),
- _expectId(fooElement, MatchKind.READ_WRITE, 'p += 2;'),
- _expectId(fooElement, MatchKind.READ, 'p);'),
- _expectId(fooElement, MatchKind.INVOCATION, 'p();'),
- _expectId(mainElement, MatchKind.REFERENCE, 'p: 42')];
+ _expectId(fooElement, MatchKind.WRITE, 'p = 1;'),
+ _expectId(fooElement, MatchKind.READ_WRITE, 'p += 2;'),
+ _expectId(fooElement, MatchKind.READ, 'p);'),
+ _expectId(fooElement, MatchKind.INVOCATION, 'p();'),
+ _expectId(mainElement, MatchKind.REFERENCE, 'p: 42')
+ ];
return _verifyReferences(element, expected);
}
@@ -459,8 +463,9 @@
Element elementA = findElement('a');
Element elementB = findElement('b');
var expected = [
- _expectId(elementA, MatchKind.REFERENCE, 'ppp.Future'),
- _expectId(elementB, MatchKind.REFERENCE, 'ppp.Stream')];
+ _expectId(elementA, MatchKind.REFERENCE, 'ppp.Future'),
+ _expectId(elementB, MatchKind.REFERENCE, 'ppp.Stream')
+ ];
return _verifyReferences(element, expected);
}
@@ -477,8 +482,9 @@
PropertyAccessorElement element = findElement('g', ElementKind.GETTER);
Element mainElement = findElement('main');
var expected = [
- _expectId(mainElement, MatchKind.REFERENCE, 'g; // 1'),
- _expectIdQ(mainElement, MatchKind.REFERENCE, 'g; // 2')];
+ _expectId(mainElement, MatchKind.REFERENCE, 'g; // 1'),
+ _expectIdQ(mainElement, MatchKind.REFERENCE, 'g; // 2')
+ ];
return _verifyReferences(element, expected);
}
@@ -495,8 +501,9 @@
PropertyAccessorElement element = findElement('s=');
Element mainElement = findElement('main');
var expected = [
- _expectId(mainElement, MatchKind.REFERENCE, 's = 1'),
- _expectIdQ(mainElement, MatchKind.REFERENCE, 's = 2')];
+ _expectId(mainElement, MatchKind.REFERENCE, 's = 1'),
+ _expectIdQ(mainElement, MatchKind.REFERENCE, 's = 2')
+ ];
return _verifyReferences(element, expected);
}
@@ -523,13 +530,14 @@
TopLevelVariableElement variable = impUnit.topLevelVariables[0];
Element main = findElement('main');
var expected = [
- _expectId(testUnitElement, MatchKind.REFERENCE, 'V; // imp'),
- _expectId(main, MatchKind.WRITE, 'V = 1; // q'),
- _expectId(main, MatchKind.READ, 'V); // q'),
- _expectId(main, MatchKind.INVOCATION, 'V(); // q'),
- _expectId(main, MatchKind.WRITE, 'V = 1; // nq'),
- _expectId(main, MatchKind.READ, 'V); // nq'),
- _expectId(main, MatchKind.INVOCATION, 'V(); // nq'),];
+ _expectId(testUnitElement, MatchKind.REFERENCE, 'V; // imp'),
+ _expectId(main, MatchKind.WRITE, 'V = 1; // q'),
+ _expectId(main, MatchKind.READ, 'V); // q'),
+ _expectId(main, MatchKind.INVOCATION, 'V(); // q'),
+ _expectId(main, MatchKind.WRITE, 'V = 1; // nq'),
+ _expectId(main, MatchKind.READ, 'V); // nq'),
+ _expectId(main, MatchKind.INVOCATION, 'V(); // nq'),
+ ];
return _verifyReferences(variable, expected);
}
@@ -543,8 +551,9 @@
Element aElement = findElement('a');
Element bElement = findElement('b');
var expected = [
- _expectId(aElement, MatchKind.REFERENCE, 'T a'),
- _expectId(bElement, MatchKind.REFERENCE, 'T b')];
+ _expectId(aElement, MatchKind.REFERENCE, 'T a'),
+ _expectId(bElement, MatchKind.REFERENCE, 'T b')
+ ];
return _verifyReferences(element, expected);
}
@@ -560,9 +569,10 @@
ClassElement elementB = findElement('B');
ClassElement elementC = findElement('C');
var expected = [
- _expectId(elementA, MatchKind.REFERENCE, 'T {} // A'),
- _expectId(elementB, MatchKind.REFERENCE, 'T; // B'),
- _expectId(elementC, MatchKind.REFERENCE, 'T {} // C')];
+ _expectId(elementA, MatchKind.REFERENCE, 'T {} // A'),
+ _expectId(elementB, MatchKind.REFERENCE, 'T; // B'),
+ _expectId(elementC, MatchKind.REFERENCE, 'T {} // C')
+ ];
return searchEngine.searchSubtypes(element).then((matches) {
_assertMatches(matches, expected);
});
@@ -583,11 +593,12 @@
Element topD = findElement('D');
Element topE = findElement('E');
var expected = [
- _expectId(topA, MatchKind.DECLARATION, 'A {} // A'),
- _expectId(topB, MatchKind.DECLARATION, 'B ='),
- _expectId(topC, MatchKind.DECLARATION, 'C()'),
- _expectId(topD, MatchKind.DECLARATION, 'D() {}'),
- _expectId(topE, MatchKind.DECLARATION, 'E = null')];
+ _expectId(topA, MatchKind.DECLARATION, 'A {} // A'),
+ _expectId(topB, MatchKind.DECLARATION, 'B ='),
+ _expectId(topC, MatchKind.DECLARATION, 'C()'),
+ _expectId(topD, MatchKind.DECLARATION, 'D() {}'),
+ _expectId(topE, MatchKind.DECLARATION, 'E = null')
+ ];
return _verifyTopLevelDeclarations('^[A-E]\$', expected);
}
@@ -597,13 +608,8 @@
if (length == null) {
length = getLeadingIdentifierLength(search);
}
- return new ExpectedMatch(
- element,
- kind,
- offset,
- length,
- isResolved: isResolved,
- isQualified: isQualified);
+ return new ExpectedMatch(element, kind, offset, length,
+ isResolved: isResolved, isQualified: isQualified);
}
ExpectedMatch _expectIdQ(Element element, MatchKind kind, String search) {
@@ -611,12 +617,8 @@
}
ExpectedMatch _expectIdU(Element element, MatchKind kind, String search) {
- return _expectId(
- element,
- kind,
- search,
- isQualified: true,
- isResolved: false);
+ return _expectId(element, kind, search,
+ isQualified: true, isResolved: false);
}
void _indexTestUnit(String code) {
@@ -624,24 +626,26 @@
index.indexUnit(context, testUnit);
}
- Future _verifyReferences(Element element,
- List<ExpectedMatch> expectedMatches) {
- return searchEngine.searchReferences(
- element).then((List<SearchMatch> matches) {
+ Future _verifyReferences(
+ Element element, List<ExpectedMatch> expectedMatches) {
+ return searchEngine
+ .searchReferences(element)
+ .then((List<SearchMatch> matches) {
_assertMatches(matches, expectedMatches);
});
}
- Future _verifyTopLevelDeclarations(String pattern,
- List<ExpectedMatch> expectedMatches) {
- return searchEngine.searchTopLevelDeclarations(
- pattern).then((List<SearchMatch> matches) {
+ Future _verifyTopLevelDeclarations(
+ String pattern, List<ExpectedMatch> expectedMatches) {
+ return searchEngine
+ .searchTopLevelDeclarations(pattern)
+ .then((List<SearchMatch> matches) {
_assertMatches(matches, expectedMatches);
});
}
- static void _assertMatches(List<SearchMatch> matches,
- List<ExpectedMatch> expectedMatches) {
+ static void _assertMatches(
+ List<SearchMatch> matches, List<ExpectedMatch> expectedMatches) {
expect(matches, unorderedEquals(expectedMatches));
}
}
diff --git a/pkg/analysis_server/test/services/search/test_all.dart b/pkg/analysis_server/test/services/search/test_all.dart
index 8636449..4f17bd7 100644
--- a/pkg/analysis_server/test/services/search/test_all.dart
+++ b/pkg/analysis_server/test/services/search/test_all.dart
@@ -9,7 +9,6 @@
import 'hierarchy_test.dart' as hierarchy_test;
import 'search_engine_test.dart' as search_engine_test;
-
/**
* Utility for manually running all tests.
*/
diff --git a/pkg/analysis_server/test/socket_server_test.dart b/pkg/analysis_server/test/socket_server_test.dart
index c126bd0..5bc695a 100644
--- a/pkg/analysis_server/test/socket_server_test.dart
+++ b/pkg/analysis_server/test/socket_server_test.dart
@@ -20,15 +20,12 @@
main() {
group('SocketServer', () {
- test(
- 'createAnalysisServer_successful',
+ test('createAnalysisServer_successful',
SocketServerTest.createAnalysisServer_successful);
- test(
- 'createAnalysisServer_alreadyStarted',
+ test('createAnalysisServer_alreadyStarted',
SocketServerTest.createAnalysisServer_alreadyStarted);
test('requestHandler_exception', SocketServerTest.requestHandler_exception);
- test(
- 'requestHandler_futureException',
+ test('requestHandler_futureException',
SocketServerTest.requestHandler_futureException);
});
}
@@ -45,16 +42,14 @@
channel2.expectMsgCount(responseCount: 1);
expect(channel2.responsesReceived[0].id, equals(''));
expect(channel2.responsesReceived[0].error, isNotNull);
- expect(
- channel2.responsesReceived[0].error.code,
+ expect(channel2.responsesReceived[0].error.code,
equals(RequestErrorCode.SERVER_ALREADY_STARTED));
- channel2.sendRequest(
- new ServerShutdownParams().toRequest('0')).then((Response response) {
+ channel2.sendRequest(new ServerShutdownParams().toRequest('0')).then(
+ (Response response) {
expect(response.id, equals('0'));
expect(response.error, isNotNull);
expect(
- response.error.code,
- equals(RequestErrorCode.SERVER_ALREADY_STARTED));
+ response.error.code, equals(RequestErrorCode.SERVER_ALREADY_STARTED));
channel2.expectMsgCount(responseCount: 2);
});
}
@@ -65,8 +60,8 @@
server.createAnalysisServer(channel);
channel.expectMsgCount(notificationCount: 1);
expect(channel.notificationsReceived[0].event, SERVER_CONNECTED);
- return channel.sendRequest(
- new ServerShutdownParams().toRequest('0')).then((Response response) {
+ return channel.sendRequest(new ServerShutdownParams().toRequest('0')).then(
+ (Response response) {
expect(response.id, equals('0'));
expect(response.error, isNull);
channel.expectMsgCount(responseCount: 1, notificationCount: 1);
@@ -112,11 +107,9 @@
ServerPlugin serverPlugin = new ServerPlugin();
ExtensionManager manager = new ExtensionManager();
manager.processPlugins([serverPlugin]);
- return new SocketServer(
- new AnalysisServerOptions(),
- DirectoryBasedDartSdk.defaultSdk,
- InstrumentationService.NULL_SERVICE,
- serverPlugin);
+ return new SocketServer(new AnalysisServerOptions(),
+ DirectoryBasedDartSdk.defaultSdk, InstrumentationService.NULL_SERVICE,
+ serverPlugin);
}
}
diff --git a/pkg/analysis_server/test/source/caching_put_package_map_provider_test.dart b/pkg/analysis_server/test/source/caching_put_package_map_provider_test.dart
new file mode 100644
index 0000000..20cdddf
--- /dev/null
+++ b/pkg/analysis_server/test/source/caching_put_package_map_provider_test.dart
@@ -0,0 +1,394 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.source.caching_pub_package_map_provider;
+
+import 'dart:convert';
+import 'dart:io' as io;
+
+import 'package:analysis_server/src/source/caching_pub_package_map_provider.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/source/package_map_provider.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/sdk_io.dart';
+import 'package:unittest/unittest.dart';
+
+main() {
+ groupSep = ' | ';
+
+ group('CachingPubPackageMapProvider', () {
+ MemoryResourceProvider resProvider;
+ _MockPubListRunner mockRunner;
+ bool writeFileException;
+
+ Map result1 = {
+ 'packages': {'foo': '/tmp/proj1/packages/foo'},
+ 'input_files': ['/tmp/proj1/pubspec.yaml']
+ };
+
+ Map result1error = {'input_files': ['/tmp/proj1/pubspec.lock']};
+
+ Map result2 = {
+ 'packages': {'bar': '/tmp/proj2/packages/bar'},
+ 'input_files': ['/tmp/proj2/pubspec.yaml']
+ };
+
+ Folder newProj(Map result) {
+ Map packages = result['packages'];
+ packages.forEach((String name, String path) {
+ resProvider.newFolder(path);
+ });
+ List<String> inputFiles = result['input_files'];
+ for (String path in inputFiles) {
+ resProvider.newFile(path, '');
+ }
+ return resProvider.getResource(inputFiles[0]).parent;
+ }
+
+ int mockWriteFile(File cacheFile, String content) {
+ if (writeFileException) {
+ throw 'simulated write failure: $cacheFile';
+ }
+ if (!cacheFile.exists) {
+ resProvider.newFolder(cacheFile.parent.path);
+ resProvider.newFile(cacheFile.path, content);
+ } else {
+ resProvider.modifyFile(cacheFile.path, content);
+ }
+ Resource res = resProvider.getResource(cacheFile.path);
+ if (res is File) {
+ return res.createSource().modificationStamp;
+ }
+ throw 'expected file, but found $res';
+ }
+
+ CachingPubPackageMapProvider newPkgProvider() {
+ return new CachingPubPackageMapProvider(resProvider,
+ DirectoryBasedDartSdk.defaultSdk, mockRunner.runPubList,
+ mockWriteFile);
+ }
+
+ setUp(() {
+ resProvider = new MemoryResourceProvider();
+ resProvider.newFolder('/tmp/proj/packages/foo');
+ mockRunner = new _MockPubListRunner();
+ writeFileException = false;
+ });
+
+ group('computePackageMap', () {
+
+ // Assert pub list called once and results are cached in memory
+ test('cache memory', () {
+ expect(mockRunner.runCount, 0);
+
+ Folder folder1 = newProj(result1);
+ CachingPubPackageMapProvider pkgProvider = newPkgProvider();
+ mockRunner.nextResult = JSON.encode(result1);
+ PackageMapInfo info = pkgProvider.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+
+ info = pkgProvider.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+ });
+
+ // Assert pub list called once and results are cached on disk
+ test('cache disk', () {
+ expect(mockRunner.runCount, 0);
+
+ Folder folder1 = newProj(result1);
+ CachingPubPackageMapProvider pkgProvider1 = newPkgProvider();
+ mockRunner.nextResult = JSON.encode(result1);
+ PackageMapInfo info = pkgProvider1.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+
+ CachingPubPackageMapProvider pkgProvider2 = newPkgProvider();
+ info = pkgProvider2.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+ });
+
+ // Assert pub list called even if cache file is corrupted
+ test('corrupt cache file', () {
+ expect(mockRunner.runCount, 0);
+
+ Folder folder1 = newProj(result1);
+ CachingPubPackageMapProvider pkgProvider1 = newPkgProvider();
+ resProvider.newFile(pkgProvider1.cacheFile.path, 'corrupt content');
+ mockRunner.nextResult = JSON.encode(result1);
+ PackageMapInfo info = pkgProvider1.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+
+ CachingPubPackageMapProvider pkgProvider2 = newPkgProvider();
+ info = pkgProvider2.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+ });
+
+ // Assert gracefully continue even if write to file fails
+ test('failed write to cache file', () {
+ expect(mockRunner.runCount, 0);
+
+ Folder folder1 = newProj(result1);
+ CachingPubPackageMapProvider pkgProvider = newPkgProvider();
+ mockRunner.nextResult = JSON.encode(result1);
+ writeFileException = true;
+ PackageMapInfo info = pkgProvider.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+
+ info = pkgProvider.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+ });
+
+ // Assert modification in one shows up in the other
+ test('shared disk cache', () {
+ expect(mockRunner.runCount, 0);
+
+ Folder folder1 = newProj(result1);
+ CachingPubPackageMapProvider pkgProvider1 = newPkgProvider();
+ mockRunner.nextResult = JSON.encode(result1);
+ PackageMapInfo info = pkgProvider1.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+
+ Folder folder2 = newProj(result2);
+ CachingPubPackageMapProvider pkgProvider2 = newPkgProvider();
+ mockRunner.nextResult = JSON.encode(result2);
+ info = pkgProvider2.computePackageMap(folder2);
+ expect(mockRunner.runCount, 2);
+ _assertInfo(info, result2);
+
+ info = pkgProvider1.computePackageMap(folder2);
+ expect(mockRunner.runCount, 2);
+ _assertInfo(info, result2);
+ });
+
+ // Assert pub list called again if input file modified
+ test('input file changed', () {
+ expect(mockRunner.runCount, 0);
+
+ Folder folder1 = newProj(result1);
+ CachingPubPackageMapProvider pkgProvider = newPkgProvider();
+ mockRunner.nextResult = JSON.encode(result1);
+ PackageMapInfo info = pkgProvider.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+
+ resProvider.modifyFile(info.dependencies.first, 'new content');
+ mockRunner.nextResult = JSON.encode(result1);
+ info = pkgProvider.computePackageMap(folder1);
+ expect(mockRunner.runCount, 2);
+ _assertInfo(info, result1);
+ });
+
+ // Assert pub list called again if input file modified
+ // after reloading package provider cache from disk
+ test('input file changed 2', () {
+ expect(mockRunner.runCount, 0);
+
+ Folder folder1 = newProj(result1);
+ CachingPubPackageMapProvider pkgProvider1 = newPkgProvider();
+ mockRunner.nextResult = JSON.encode(result1);
+ PackageMapInfo info = pkgProvider1.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+
+ resProvider.modifyFile(info.dependencies.first, 'new content');
+ mockRunner.nextResult = JSON.encode(result1);
+ CachingPubPackageMapProvider pkgProvider2 = newPkgProvider();
+ info = pkgProvider2.computePackageMap(folder1);
+ expect(mockRunner.runCount, 2);
+ _assertInfo(info, result1);
+ });
+
+ // Assert pub list called again if input file deleted
+ test('input file deleted', () {
+ expect(mockRunner.runCount, 0);
+
+ Folder folder1 = newProj(result1);
+ CachingPubPackageMapProvider pkgProvider = newPkgProvider();
+ mockRunner.nextResult = JSON.encode(result1);
+ PackageMapInfo info = pkgProvider.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+
+ resProvider.deleteFile(info.dependencies.first);
+ mockRunner.nextResult = JSON.encode(result1);
+ info = pkgProvider.computePackageMap(folder1);
+ expect(mockRunner.runCount, 2);
+ _assertInfo(info, result1);
+ });
+
+ // Assert pub list not called if folder does not exist
+ // and returns same cached result if folder restored as before
+ test('project removed then restored', () {
+ expect(mockRunner.runCount, 0);
+
+ Folder folder1 = newProj(result1);
+ CachingPubPackageMapProvider pkgProvider = newPkgProvider();
+ mockRunner.nextResult = JSON.encode(result1);
+ PackageMapInfo info = pkgProvider.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+
+ _RestorePoint restorePoint = new _RestorePoint(resProvider, folder1);
+ resProvider.deleteFolder(folder1.path);
+ info = pkgProvider.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertError(info, result1error);
+
+ restorePoint.restore();
+ info = pkgProvider.computePackageMap(folder1);
+ expect(mockRunner.runCount, 1);
+ _assertInfo(info, result1);
+ });
+
+ // Assert pub list *is* run again
+ // if dependency has changed during execution
+ test('dependency changed during execution', () {
+ expect(mockRunner.runCount, 0);
+
+ Folder folder1 = newProj(result1);
+ Resource pubspecFile = folder1.getChild('pubspec.yaml');
+ expect(pubspecFile.exists, isTrue);
+ CachingPubPackageMapProvider pkgProvider = newPkgProvider();
+ mockRunner.nextResultFunction = () {
+ resProvider.modifyFile(pubspecFile.path, 'new content');
+ return JSON.encode(result1);
+ };
+ mockRunner.nextResult = JSON.encode(result1);
+ PackageMapInfo info = pkgProvider.computePackageMap(folder1);
+ expect(mockRunner.runCount, 2);
+ _assertInfo(info, result1);
+ });
+ });
+ });
+}
+
+_assertError(PackageMapInfo info, Map expected) {
+ expect(info.packageMap, isNull);
+ List<String> expectedFiles = expected['input_files'];
+ expect(info.dependencies, hasLength(expectedFiles.length));
+ for (String path in expectedFiles) {
+ expect(info.dependencies, contains(path));
+ }
+}
+
+_assertInfo(PackageMapInfo info, Map expected) {
+ Map<String, String> expectedPackages = expected['packages'];
+ expect(info.packageMap, hasLength(expectedPackages.length));
+ for (String key in expectedPackages.keys) {
+ List<Folder> packageList = info.packageMap[key];
+ expect(packageList, hasLength(1));
+ expect(packageList[0].path, expectedPackages[key]);
+ }
+ List<String> expectedFiles = expected['input_files'];
+ expect(info.dependencies, hasLength(expectedFiles.length));
+ for (String path in expectedFiles) {
+ expect(info.dependencies, contains(path));
+ }
+}
+
+typedef String MockResultFunction();
+
+/**
+ * Mock for simulating and tracking execution of pub list
+ */
+class _MockPubListRunner {
+ int runCount = 0;
+ List nextResults = [];
+
+ void set nextResult(String result) {
+ nextResults.add(result);
+ }
+
+ void set nextResultFunction(MockResultFunction resultFunction) {
+ nextResults.add(resultFunction);
+ }
+
+ io.ProcessResult runPubList(Folder folder) {
+ if (nextResults.isEmpty) {
+ throw 'missing nextResult';
+ }
+ var result = nextResults.removeAt(0);
+ if (result is MockResultFunction) {
+ result = result();
+ }
+ ++runCount;
+ return new _MockResult(result);
+ }
+}
+
+class _MockResult implements io.ProcessResult {
+ String result;
+
+ _MockResult(this.result);
+
+ @override
+ int get exitCode => 0;
+
+ // TODO: implement stdout
+ @override
+ get stdout => result;
+
+ noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+/**
+ * An object containing information to restore the state of a deleted
+ * folder and its content.
+ */
+class _RestorePoint {
+ final MemoryResourceProvider provider;
+ final List<String> _folderPaths = <String>[];
+ final List<String> _filePaths = <String>[];
+ final List<TimestampedData> _fileContents = <TimestampedData>[];
+
+ /**
+ * Construct a new instance that captures the current state of the folder
+ * and all of its contained files and folders.
+ */
+ _RestorePoint(this.provider, Folder folder) {
+ record(folder);
+ }
+
+ /**
+ * Capture the current state of the folder
+ * and all of its contained files and folders.
+ */
+ void record(Folder folder) {
+ _folderPaths.add(folder.path);
+ for (Resource child in folder.getChildren()) {
+ if (child is Folder) {
+ record(child);
+ } else if (child is File) {
+ _filePaths.add(child.path);
+ _fileContents.add(child.createSource().contents);
+ } else {
+ throw 'unknown resource: $child';
+ }
+ }
+ }
+
+ /**
+ * Restore the original files and folders.
+ */
+ void restore() {
+ for (String path in _folderPaths) {
+ provider.newFolder(path);
+ }
+ int fileCount = _filePaths.length;
+ for (int fileIndex = 0; fileIndex < fileCount; ++fileIndex) {
+ String path = _filePaths[fileIndex];
+ TimestampedData content = _fileContents[fileIndex];
+ provider.newFile(path, content.data, content.modificationTime);
+ }
+ }
+}
diff --git a/pkg/analysis_server/test/source/test_all.dart b/pkg/analysis_server/test/source/test_all.dart
new file mode 100644
index 0000000..3a3e709
--- /dev/null
+++ b/pkg/analysis_server/test/source/test_all.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.source;
+
+import 'caching_put_package_map_provider_test.dart' as caching_provider_test;
+import 'package:unittest/unittest.dart';
+
+/// Utility for manually running all tests.
+main() {
+ groupSep = ' | ';
+ caching_provider_test.main();
+}
diff --git a/pkg/analysis_server/test/test_all.dart b/pkg/analysis_server/test/test_all.dart
index eaafee4..189af22 100644
--- a/pkg/analysis_server/test/test_all.dart
+++ b/pkg/analysis_server/test/test_all.dart
@@ -20,6 +20,7 @@
import 'search/test_all.dart' as search_all;
import 'services/test_all.dart' as services_all;
import 'socket_server_test.dart' as socket_server_test;
+import 'source/test_all.dart' as source_all;
/**
* Utility for manually running all tests.
@@ -43,5 +44,6 @@
search_all.main();
services_all.main();
socket_server_test.main();
+ source_all.main();
});
}
diff --git a/pkg/analysis_server/test/timing/completion/completion_simple.dart b/pkg/analysis_server/test/timing/completion/completion_simple.dart
index 34197bd..7f05d7b 100644
--- a/pkg/analysis_server/test/timing/completion/completion_simple.dart
+++ b/pkg/analysis_server/test/timing/completion/completion_simple.dart
@@ -83,8 +83,8 @@
@override
Future perform() {
sendAnalysisUpdateContent({
- mainFilePath: new ChangeContentOverlay(
- [new SourceEdit(cursorOffset, 0, '.')])
+ mainFilePath:
+ new ChangeContentOverlay([new SourceEdit(cursorOffset, 0, '.')])
});
sendCompletionGetSuggestions(mainFilePath, cursorOffset + 1);
return completionReceived.future;
@@ -100,9 +100,8 @@
}
});
sendAnalysisSetAnalysisRoots([dirname(mainFilePath)], []);
- sendAnalysisUpdateContent({
- mainFilePath: new AddContentOverlay(originalContent)
- });
+ sendAnalysisUpdateContent(
+ {mainFilePath: new AddContentOverlay(originalContent)});
return new Future.value();
}
diff --git a/pkg/analysis_server/test/timing/timing_framework.dart b/pkg/analysis_server/test/timing/timing_framework.dart
index 3b1fdef..757819d 100644
--- a/pkg/analysis_server/test/timing/timing_framework.dart
+++ b/pkg/analysis_server/test/timing/timing_framework.dart
@@ -59,7 +59,6 @@
* milliseconds.
*/
int get minTime {
-
int minTime = times[0];
int count = times.length;
for (int i = 1; i < count; i++) {
diff --git a/pkg/analysis_server/tool/spec/api.dart b/pkg/analysis_server/tool/spec/api.dart
index 070437c..a968bb1 100644
--- a/pkg/analysis_server/tool/spec/api.dart
+++ b/pkg/analysis_server/tool/spec/api.dart
@@ -140,8 +140,7 @@
typeEnum.values.forEach(visitTypeEnumValue);
}
- void visitTypeEnumValue(TypeEnumValue typeEnumValue) {
- }
+ void visitTypeEnumValue(TypeEnumValue typeEnumValue) {}
@override
void visitTypeList(TypeList typeList) {
@@ -164,8 +163,7 @@
}
@override
- void visitTypeReference(TypeReference typeReference) {
- }
+ void visitTypeReference(TypeReference typeReference) {}
void visitTypes(Types types) {
types.forEach(visitTypeDefinition);
@@ -211,11 +209,9 @@
*/
TypeDecl get notificationType {
List<TypeObjectField> fields = [
- new TypeObjectField(
- 'event',
- new TypeReference('String', null),
- null,
- value: '$domainName.$event')];
+ new TypeObjectField('event', new TypeReference('String', null), null,
+ value: '$domainName.$event')
+ ];
if (params != null) {
fields.add(new TypeObjectField('params', params, null));
}
@@ -286,8 +282,8 @@
*/
final TypeObject result;
- Request(this.domainName, this.method, this.params, this.result,
- dom.Element html)
+ Request(
+ this.domainName, this.method, this.params, this.result, dom.Element html)
: super(html);
/**
@@ -301,12 +297,10 @@
*/
TypeDecl get requestType {
List<TypeObjectField> fields = [
- new TypeObjectField('id', new TypeReference('String', null), null),
- new TypeObjectField(
- 'method',
- new TypeReference('String', null),
- null,
- value: '$domainName.$method')];
+ new TypeObjectField('id', new TypeReference('String', null), null),
+ new TypeObjectField('method', new TypeReference('String', null), null,
+ value: '$domainName.$method')
+ ];
if (params != null) {
fields.add(new TypeObjectField('params', params, null));
}
@@ -319,12 +313,11 @@
*/
TypeDecl get responseType {
List<TypeObjectField> fields = [
- new TypeObjectField('id', new TypeReference('String', null), null),
- new TypeObjectField(
- 'error',
- new TypeReference('RequestError', null),
- null,
- optional: true)];
+ new TypeObjectField('id', new TypeReference('String', null), null),
+ new TypeObjectField(
+ 'error', new TypeReference('RequestError', null), null,
+ optional: true)
+ ];
if (result != null) {
fields.add(new TypeObjectField('result', result, null));
}
@@ -440,8 +433,8 @@
*/
final Object value;
- TypeObjectField(this.name, this.type, dom.Element html, {this.optional: false,
- this.value})
+ TypeObjectField(this.name, this.type, dom.Element html,
+ {this.optional: false, this.value})
: super(html);
}
diff --git a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
index 3b5ac0a..9087e57 100644
--- a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
+++ b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
@@ -28,8 +28,8 @@
'deprecated': '0x20'
};
-final GeneratedFile target =
- new GeneratedFile('../../lib/src/generated_protocol.dart', () {
+final GeneratedFile target = new GeneratedFile(
+ '../../lib/src/generated_protocol.dart', () {
CodegenProtocolVisitor visitor = new CodegenProtocolVisitor(readApi());
return visitor.collectCode(visitor.visitApi);
});
@@ -328,8 +328,8 @@
/**
* Emit the method for decoding an enum from JSON.
*/
- void emitEnumFromJsonConstructor(String className, TypeEnum type,
- ImpliedType impliedType) {
+ void emitEnumFromJsonConstructor(
+ String className, TypeEnum type, ImpliedType impliedType) {
writeln(
'factory $className.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {');
indent(() {
@@ -357,8 +357,8 @@
/**
* Emit the class to encapsulate an object type.
*/
- void emitObjectClass(String className, TypeObject type,
- ImpliedType impliedType) {
+ void emitObjectClass(
+ String className, TypeObject type, ImpliedType impliedType) {
docComment(toHtmlVisitor.collectHtml(() {
toHtmlVisitor.p(() {
toHtmlVisitor.write(impliedType.humanReadableName);
@@ -493,8 +493,8 @@
if (field.value != null) {
continue;
}
- comparisons.add(
- compareEqualsCode(field.type, field.name, 'other.${field.name}'));
+ comparisons.add(compareEqualsCode(
+ field.type, field.name, 'other.${field.name}'));
}
}
if (comparisons.isEmpty) {
@@ -513,26 +513,23 @@
/**
* Emit the method for decoding an object from JSON.
*/
- void emitObjectFromJsonConstructor(String className, TypeObject type,
- ImpliedType impliedType) {
+ void emitObjectFromJsonConstructor(
+ String className, TypeObject type, ImpliedType impliedType) {
String humanReadableNameString =
literalString(impliedType.humanReadableName);
if (className == 'RefactoringFeedback') {
- writeln(
- 'factory RefactoringFeedback.fromJson(JsonDecoder jsonDecoder, '
- 'String jsonPath, Object json, Map responseJson) {');
+ writeln('factory RefactoringFeedback.fromJson(JsonDecoder jsonDecoder, '
+ 'String jsonPath, Object json, Map responseJson) {');
indent(() {
- writeln(
- 'return _refactoringFeedbackFromJson(jsonDecoder, jsonPath, '
- 'json, responseJson);');
+ writeln('return _refactoringFeedbackFromJson(jsonDecoder, jsonPath, '
+ 'json, responseJson);');
});
writeln('}');
return;
}
if (className == 'RefactoringOptions') {
- writeln(
- 'factory RefactoringOptions.fromJson(JsonDecoder jsonDecoder, '
- 'String jsonPath, Object json, RefactoringKind kind) {');
+ writeln('factory RefactoringOptions.fromJson(JsonDecoder jsonDecoder, '
+ 'String jsonPath, Object json, RefactoringKind kind) {');
indent(() {
writeln(
'return _refactoringOptionsFromJson(jsonDecoder, jsonPath, ' 'json, kind);');
@@ -643,10 +640,10 @@
'LinkedEditGroup.empty() : this(<Position>[], 0, <LinkedEditSuggestion>[]);');
return true;
case 'RefactoringProblemSeverity':
- docComment(
- [
- new dom.Text(
- 'Returns the [RefactoringProblemSeverity] with the maximal severity.')]);
+ docComment([
+ new dom.Text(
+ 'Returns the [RefactoringProblemSeverity] with the maximal severity.')
+ ]);
writeln(
'static RefactoringProblemSeverity max(RefactoringProblemSeverity a, RefactoringProblemSeverity b) =>');
writeln(' _maxRefactoringProblemSeverity(a, b);');
@@ -701,8 +698,9 @@
writeln('}');
return true;
case 'SourceChange':
- docComment(
- [new dom.Text('Adds [edit] to the [FileEdit] for the given [file].')]);
+ docComment([
+ new dom.Text('Adds [edit] to the [FileEdit] for the given [file].')
+ ]);
writeln('void addEdit(String file, int fileStamp, SourceEdit edit) =>');
writeln(' _addEditToSourceChange(this, file, fileStamp, edit);');
writeln();
@@ -720,14 +718,18 @@
});
writeln('}');
writeln();
- docComment(
- [new dom.Text('Returns the [FileEdit] for the given [file], maybe `null`.')]);
+ docComment([
+ new dom.Text(
+ 'Returns the [FileEdit] for the given [file], maybe `null`.')
+ ]);
writeln('SourceFileEdit getFileEdit(String file) =>');
writeln(' _getChangeFileEdit(this, file);');
return true;
case 'SourceEdit':
- docComment(
- [new dom.Text('Get the result of applying the edit to the given [code].')]);
+ docComment([
+ new dom.Text(
+ 'Get the result of applying the edit to the given [code].')
+ ]);
writeln('String apply(String code) => _applyEdit(code, this);');
return true;
case 'SourceFileEdit':
@@ -771,12 +773,11 @@
writeln('}');
return true;
case 'SourceEdit':
- docComment(
- [
- new dom.Text(
- 'Get the result of applying a set of ' +
- '[edits] to the given [code]. Edits are applied in the order ' +
- 'they appear in [edits].')]);
+ docComment([
+ new dom.Text('Get the result of applying a set of ' +
+ '[edits] to the given [code]. Edits are applied in the order ' +
+ 'they appear in [edits].')
+ ]);
writeln(
'static String applySequence(String code, Iterable<SourceEdit> edits) =>');
writeln(' _applySequence(code, edits);');
@@ -883,11 +884,9 @@
return new FromJsonSnippet((String jsonPath, String json) {
String typeName = dartType(type);
if (typeName == 'RefactoringFeedback') {
- return
- 'new $typeName.fromJson(jsonDecoder, $jsonPath, $json, json)';
+ return 'new $typeName.fromJson(jsonDecoder, $jsonPath, $json, json)';
} else if (typeName == 'RefactoringOptions') {
- return
- 'new $typeName.fromJson(jsonDecoder, $jsonPath, $json, kind)';
+ return 'new $typeName.fromJson(jsonDecoder, $jsonPath, $json, kind)';
} else {
return 'new $typeName.fromJson(jsonDecoder, $jsonPath, $json)';
}
@@ -939,9 +938,8 @@
if (itemCode.isIdentity) {
return new FromJsonFunction('jsonDecoder._decodeList');
} else {
- return new FromJsonSnippet(
- (String jsonPath, String json) =>
- 'jsonDecoder._decodeList($jsonPath, $json, ${itemCode.asClosure})');
+ return new FromJsonSnippet((String jsonPath, String json) =>
+ 'jsonDecoder._decodeList($jsonPath, $json, ${itemCode.asClosure})');
}
} else if (type is TypeUnion) {
List<String> decoders = <String>[];
@@ -963,9 +961,8 @@
throw new Exception('Union types must be unions of objects.');
}
}
- return new FromJsonSnippet(
- (String jsonPath, String json) =>
- 'jsonDecoder._decodeUnion($jsonPath, $json, ${literalString(type.field)}, {${decoders.join(', ')}})');
+ return new FromJsonSnippet((String jsonPath, String json) =>
+ 'jsonDecoder._decodeUnion($jsonPath, $json, ${literalString(type.field)}, {${decoders.join(', ')}})');
} else {
throw new Exception("Can't convert $type from JSON");
}
@@ -1004,8 +1001,7 @@
if (itemCode.isIdentity) {
return new ToJsonIdentity(dartType(type));
} else {
- return new ToJsonSnippet(
- dartType(type),
+ return new ToJsonSnippet(dartType(type),
(String value) => '$value.map(${itemCode.asClosure}).toList()');
}
} else if (resolvedType is TypeMap) {
@@ -1039,12 +1035,10 @@
}
}
return new ToJsonSnippet(
- dartType(type),
- (String value) => '$value.toJson()');
+ dartType(type), (String value) => '$value.toJson()');
} else if (resolvedType is TypeObject || resolvedType is TypeEnum) {
return new ToJsonSnippet(
- dartType(type),
- (String value) => '$value.toJson()');
+ dartType(type), (String value) => '$value.toJson()');
} else {
throw new Exception("Can't convert $resolvedType from JSON");
}
diff --git a/pkg/analysis_server/tool/spec/codegen_inttest_methods.dart b/pkg/analysis_server/tool/spec/codegen_inttest_methods.dart
index 3c20ad7..bc7bce6 100644
--- a/pkg/analysis_server/tool/spec/codegen_inttest_methods.dart
+++ b/pkg/analysis_server/tool/spec/codegen_inttest_methods.dart
@@ -15,8 +15,8 @@
import 'from_html.dart';
import 'to_html.dart';
-final GeneratedFile target =
- new GeneratedFile('../../test/integration/integration_test_methods.dart', () {
+final GeneratedFile target = new GeneratedFile(
+ '../../test/integration/integration_test_methods.dart', () {
CodegenInttestMethodsVisitor visitor =
new CodegenInttestMethodsVisitor(readApi());
return visitor.collectCode(visitor.visitApi);
@@ -32,8 +32,8 @@
/**
* Visitor that generates the code for integration_test_methods.dart
*/
-class CodegenInttestMethodsVisitor extends DartCodegenVisitor with CodeGenerator
- {
+class CodegenInttestMethodsVisitor extends DartCodegenVisitor
+ with CodeGenerator {
/**
* Visitor used to produce doc comments.
*/
@@ -160,9 +160,11 @@
visitNotification(Notification notification) {
String streamName =
camelJoin(['on', notification.domainName, notification.event]);
- String className = camelJoin(
- [notification.domainName, notification.event, 'params'],
- doCapitalize: true);
+ String className = camelJoin([
+ notification.domainName,
+ notification.event,
+ 'params'
+ ], doCapitalize: true);
writeln();
docComment(toHtmlVisitor.collectHtml(() {
toHtmlVisitor.translateHtml(notification.html);
@@ -181,8 +183,8 @@
notificationSwitchContents.add(collectCode(() {
writeln('case ${JSON.encode(notification.longEvent)}:');
indent(() {
- String paramsValidator =
- camelJoin(['is', notification.domainName, notification.event, 'params']);
+ String paramsValidator = camelJoin(
+ ['is', notification.domainName, notification.event, 'params']);
writeln('expect(params, $paramsValidator);');
String constructorCall;
if (notification.params == null) {
@@ -225,14 +227,14 @@
if (request.result == null) {
futureClass = 'Future';
} else {
- resultClass =
- camelJoin([request.domainName, request.method, 'result'], doCapitalize: true);
+ resultClass = camelJoin([request.domainName, request.method, 'result'],
+ doCapitalize: true);
futureClass = 'Future<$resultClass>';
}
writeln('$futureClass $methodName(${args.join(', ')}) {');
indent(() {
- String requestClass =
- camelJoin([request.domainName, request.method, 'params'], doCapitalize: true);
+ String requestClass = camelJoin(
+ [request.domainName, request.method, 'params'], doCapitalize: true);
String paramsVar = 'null';
if (request.params != null) {
paramsVar = 'params';
diff --git a/pkg/analysis_server/tool/spec/codegen_java.dart b/pkg/analysis_server/tool/spec/codegen_java.dart
index c2d32a1..3f64815 100644
--- a/pkg/analysis_server/tool/spec/codegen_java.dart
+++ b/pkg/analysis_server/tool/spec/codegen_java.dart
@@ -18,8 +18,8 @@
* Create a [GeneratedFile] that creates Java code and outputs it to [path].
* [path] uses Posix-style path separators regardless of the OS.
*/
-GeneratedFile javaGeneratedFile(String path, CodegenJavaVisitor
- createVisitor(Api api)) {
+GeneratedFile javaGeneratedFile(
+ String path, CodegenJavaVisitor createVisitor(Api api)) {
return new GeneratedFile(path, () {
CodegenJavaVisitor visitor = createVisitor(readApi());
return visitor.collectCode(visitor.visitApi);
diff --git a/pkg/analysis_server/tool/spec/codegen_java_types.dart b/pkg/analysis_server/tool/spec/codegen_java_types.dart
index 1f2e33a..646e5ff 100644
--- a/pkg/analysis_server/tool/spec/codegen_java_types.dart
+++ b/pkg/analysis_server/tool/spec/codegen_java_types.dart
@@ -55,12 +55,8 @@
generateSetters = true;
}
// create the visitor
- CodegenJavaType visitor = new CodegenJavaType(
- api,
- typeNameInJava,
- superclassName,
- generateGetters,
- generateSetters);
+ CodegenJavaType visitor = new CodegenJavaType(api, typeNameInJava,
+ superclassName, generateGetters, generateSetters);
return visitor.collectCode(() {
dom.Element doc = type.html;
if (impliedType.apiNode is TypeDefinition) {
@@ -108,9 +104,7 @@
/**
* Type references in the spec that are named something else in Java.
*/
-const Map<String, String> _typeRenames = const {
- 'Override': 'OverrideMember',
-};
+const Map<String, String> _typeRenames = const {'Override': 'OverrideMember',};
/**
* Translate spec_input.html into AnalysisServer.java.
@@ -189,11 +183,11 @@
}
}
- bool _isTypeFieldInUpdateContentUnionType(String className,
- String fieldName) {
+ bool _isTypeFieldInUpdateContentUnionType(
+ String className, String fieldName) {
if ((className == 'AddContentOverlay' ||
- className == 'ChangeContentOverlay' ||
- className == 'RemoveContentOverlay') &&
+ className == 'ChangeContentOverlay' ||
+ className == 'RemoveContentOverlay') &&
fieldName == 'type') {
return true;
} else {
@@ -358,7 +352,8 @@
}
if (className == 'NavigationRegion') {
privateField(javaName('targetObjects'), () {
- writeln('private final List<NavigationTarget> targetObjects = Lists.newArrayList();');
+ writeln(
+ 'private final List<NavigationTarget> targetObjects = Lists.newArrayList();');
});
}
if (className == 'NavigationTarget') {
@@ -455,7 +450,8 @@
if (className == 'NavigationRegion') {
publicMethod('lookupTargets', () {
- writeln('public void lookupTargets(List<NavigationTarget> allTargets) {');
+ writeln(
+ 'public void lookupTargets(List<NavigationTarget> allTargets) {');
writeln(' for (int i = 0; i < targets.length; i++) {');
writeln(' int targetIndex = targets[i];');
writeln(' NavigationTarget target = allTargets.get(targetIndex);');
@@ -528,8 +524,7 @@
List<String> parameters = new List();
for (TypeObjectField field in fields) {
if (!_isTypeFieldInUpdateContentUnionType(
- className,
- field.name)) {
+ className, field.name)) {
parameters.add('${javaName(field.name)}');
}
}
@@ -751,7 +746,6 @@
writeln('}');
});
}
-
});
}
}
diff --git a/pkg/analysis_server/tool/spec/codegen_matchers.dart b/pkg/analysis_server/tool/spec/codegen_matchers.dart
index fcf621c..e0e6448 100644
--- a/pkg/analysis_server/tool/spec/codegen_matchers.dart
+++ b/pkg/analysis_server/tool/spec/codegen_matchers.dart
@@ -15,8 +15,8 @@
import 'implied_types.dart';
import 'to_html.dart';
-final GeneratedFile target =
- new GeneratedFile('../../test/integration/protocol_matchers.dart', () {
+final GeneratedFile target = new GeneratedFile(
+ '../../test/integration/protocol_matchers.dart', () {
CodegenMatchersVisitor visitor = new CodegenMatchersVisitor(readApi());
return visitor.collectCode(visitor.visitApi);
});
@@ -162,8 +162,9 @@
Iterable<TypeObjectField> requiredFields =
typeObject.fields.where((TypeObjectField field) => !field.optional);
outputObjectFields(requiredFields);
- List<TypeObjectField> optionalFields =
- typeObject.fields.where((TypeObjectField field) => field.optional).toList();
+ List<TypeObjectField> optionalFields = typeObject.fields
+ .where((TypeObjectField field) => field.optional)
+ .toList();
if (optionalFields.isNotEmpty) {
write(', optionalFields: ');
outputObjectFields(optionalFields);
diff --git a/pkg/analysis_server/tool/spec/codegen_tools.dart b/pkg/analysis_server/tool/spec/codegen_tools.dart
index a32ea91..0997b33 100644
--- a/pkg/analysis_server/tool/spec/codegen_tools.dart
+++ b/pkg/analysis_server/tool/spec/codegen_tools.dart
@@ -117,8 +117,8 @@
* The first line of output is indented by [firstAdditionalIndent] instead of
* [additionalIndent].
*/
- void indentSpecial(String firstAdditionalIndent, String additionalIndent, void
- callback()) {
+ void indentSpecial(
+ String firstAdditionalIndent, String additionalIndent, void callback()) {
String oldNextIndent = _state.nextIndent;
String oldIndent = _state.indent;
try {
@@ -237,9 +237,10 @@
*/
int commentLineLength;
- CodeGeneratorSettings({this.languageName: 'java', this.lineCommentLineLeader:
- '// ', this.docCommentStartMarker: '/**', this.docCommentLineLeader: ' * ',
- this.docCommentEndMarker: ' */', this.commentLineLength: 99});
+ CodeGeneratorSettings({this.languageName: 'java',
+ this.lineCommentLineLeader: '// ', this.docCommentStartMarker: '/**',
+ this.docCommentLineLeader: ' * ', this.docCommentEndMarker: ' */',
+ this.commentLineLength: 99});
}
abstract class GeneratedContent {
@@ -290,9 +291,8 @@
}
}
int nonHiddenFileCount = 0;
- outputFile.listSync(
- recursive: false,
- followLinks: false).forEach((FileSystemEntity fileSystemEntity) {
+ outputFile.listSync(recursive: false, followLinks: false).forEach(
+ (FileSystemEntity fileSystemEntity) {
if (fileSystemEntity is File &&
!basename(fileSystemEntity.path).startsWith('.')) {
nonHiddenFileCount++;
diff --git a/pkg/analysis_server/tool/spec/from_html.dart b/pkg/analysis_server/tool/spec/from_html.dart
index 5b27e17..6578a8a 100644
--- a/pkg/analysis_server/tool/spec/from_html.dart
+++ b/pkg/analysis_server/tool/spec/from_html.dart
@@ -16,28 +16,29 @@
import 'html_tools.dart';
const List<String> specialElements = const [
- 'domain',
- 'feedback',
- 'object',
- 'refactorings',
- 'refactoring',
- 'type',
- 'types',
- 'request',
- 'notification',
- 'params',
- 'result',
- 'field',
- 'list',
- 'map',
- 'enum',
- 'key',
- 'value',
- 'options',
- 'ref',
- 'code',
- 'version',
- 'union'];
+ 'domain',
+ 'feedback',
+ 'object',
+ 'refactorings',
+ 'refactoring',
+ 'type',
+ 'types',
+ 'request',
+ 'notification',
+ 'params',
+ 'result',
+ 'field',
+ 'list',
+ 'map',
+ 'enum',
+ 'key',
+ 'value',
+ 'options',
+ 'ref',
+ 'code',
+ 'version',
+ 'union'
+];
/**
* Create an [Api] object from an HTML representation such as:
@@ -86,9 +87,9 @@
* [requiredAttributes], possibly some of the attributes in
* [optionalAttributes], and no others.
*/
-void checkAttributes(dom.Element element, List<String> requiredAttributes,
- String context, {List<String> optionalAttributes: const [
- ]}) {
+void checkAttributes(
+ dom.Element element, List<String> requiredAttributes, String context,
+ {List<String> optionalAttributes: const []}) {
Set<String> attributesFound = new Set<String>();
element.attributes.forEach((String name, String value) {
if (!requiredAttributes.contains(name) &&
@@ -290,8 +291,8 @@
return apiFromHtml(document.firstChild);
}
-void recurse(dom.Element parent, String context, Map<String,
- ElementProcessor> elementProcessors) {
+void recurse(dom.Element parent, String context,
+ Map<String, ElementProcessor> elementProcessors) {
for (String key in elementProcessors.keys) {
if (!specialElements.contains(key)) {
throw new Exception('$context: $key is not a special element');
@@ -476,10 +477,7 @@
String name = html.attributes['name'];
context = '$context.${name != null ? name : 'field'}';
checkAttributes(
- html,
- ['name'],
- context,
- optionalAttributes: ['optional', 'value']);
+ html, ['name'], context, optionalAttributes: ['optional', 'value']);
bool optional = false;
String optionalString = html.attributes['optional'];
if (optionalString != null) {
@@ -497,12 +495,8 @@
}
String value = html.attributes['value'];
TypeDecl type = processContentsAsType(html, context);
- return new TypeObjectField(
- name,
- type,
- html,
- optional: optional,
- value: value);
+ return new TypeObjectField(name, type, html,
+ optional: optional, value: value);
}
/**
diff --git a/pkg/analysis_server/tool/spec/html_tools.dart b/pkg/analysis_server/tool/spec/html_tools.dart
index 0305715..3df949c 100644
--- a/pkg/analysis_server/tool/spec/html_tools.dart
+++ b/pkg/analysis_server/tool/spec/html_tools.dart
@@ -62,8 +62,8 @@
/**
* Create an HTML element with the given name, attributes, and child nodes.
*/
-dom.Element makeElement(String name, Map<dynamic, String> attributes,
- List<dom.Node> children) {
+dom.Element makeElement(
+ String name, Map<dynamic, String> attributes, List<dom.Node> children) {
dom.Element result = new dom.Element.tag(name);
result.attributes.addAll(attributes);
for (dom.Node child in children) {
@@ -116,8 +116,8 @@
* Execute [callback], wrapping its output in an element with the given
* [name] and [attributes].
*/
- void element(String name, Map<dynamic, String> attributes, [void
- callback()]) {
+ void element(String name, Map<dynamic, String> attributes,
+ [void callback()]) {
add(makeElement(name, attributes, collectHtml(callback)));
}
diff --git a/pkg/analysis_server/tool/spec/implied_types.dart b/pkg/analysis_server/tool/spec/implied_types.dart
index b3ab8c6..8f25296 100644
--- a/pkg/analysis_server/tool/spec/implied_types.dart
+++ b/pkg/analysis_server/tool/spec/implied_types.dart
@@ -61,55 +61,30 @@
@override
visitNotification(Notification notification) {
- storeType(
- notification.longEvent,
- 'params',
- notification.params,
- 'notificationParams',
- notification);
+ storeType(notification.longEvent, 'params', notification.params,
+ 'notificationParams', notification);
}
@override
visitRefactoring(Refactoring refactoring) {
String camelKind = camelJoin(refactoring.kind.toLowerCase().split('_'));
- storeType(
- camelKind,
- 'feedback',
- refactoring.feedback,
- 'refactoringFeedback',
- refactoring);
- storeType(
- camelKind,
- 'options',
- refactoring.options,
- 'refactoringOptions',
+ storeType(camelKind, 'feedback', refactoring.feedback,
+ 'refactoringFeedback', refactoring);
+ storeType(camelKind, 'options', refactoring.options, 'refactoringOptions',
refactoring);
}
@override
visitRequest(Request request) {
storeType(
- request.longMethod,
- 'params',
- request.params,
- 'requestParams',
- request);
+ request.longMethod, 'params', request.params, 'requestParams', request);
storeType(
- request.longMethod,
- 'result',
- request.result,
- 'requestResult',
- request);
+ request.longMethod, 'result', request.result, 'requestResult', request);
}
@override
visitTypeDefinition(TypeDefinition typeDefinition) {
- storeType(
- typeDefinition.name,
- null,
- typeDefinition.type,
- 'typeDefinition',
+ storeType(typeDefinition.name, null, typeDefinition.type, 'typeDefinition',
typeDefinition);
}
-
}
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index 9d5ade1..54e0315 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -3611,6 +3611,8 @@
<ref>String</ref>
<p>
The proposed return type for the method.
+ If the returned element does not have a declared return type,
+ this field will contain an empty string.
</p>
</field>
<field name="names">
diff --git a/pkg/analysis_server/tool/spec/to_html.dart b/pkg/analysis_server/tool/spec/to_html.dart
index ed3827c..68abc0c 100644
--- a/pkg/analysis_server/tool/spec/to_html.dart
+++ b/pkg/analysis_server/tool/spec/to_html.dart
@@ -99,49 +99,38 @@
*/
abstract class HtmlMixin {
void anchor(String id, void callback()) {
- element('a', {
- 'name': id
- }, callback);
+ element('a', {'name': id}, callback);
}
void b(void callback()) => element('b', {}, callback);
void body(void callback()) => element('body', {}, callback);
void box(void callback()) {
- element('div', {
- 'class': 'box'
- }, callback);
+ element('div', {'class': 'box'}, callback);
}
void br() => element('br', {});
void dd(void callback()) => element('dd', {}, callback);
void dl(void callback()) => element('dl', {}, callback);
- void dt(String cls, void callback()) => element('dt', {
- 'class': cls
- }, callback);
+ void dt(String cls, void callback()) =>
+ element('dt', {'class': cls}, callback);
void element(String name, Map<dynamic, String> attributes, [void callback()]);
- void gray(void callback()) => element('span', {
- 'style': 'color:#999999'
- }, callback);
+ void gray(void callback()) =>
+ element('span', {'style': 'color:#999999'}, callback);
void h1(void callback()) => element('h1', {}, callback);
void h2(String cls, void callback()) {
if (cls == null) {
return element('h2', {}, callback);
}
- return element('h2', {
- 'class': cls
- }, callback);
+ return element('h2', {'class': cls}, callback);
}
void h3(void callback()) => element('h3', {}, callback);
void h4(void callback()) => element('h4', {}, callback);
- void hangingIndent(void callback()) => element('div', {
- 'class': 'hangingIndent'
- }, callback);
+ void hangingIndent(void callback()) =>
+ element('div', {'class': 'hangingIndent'}, callback);
void head(void callback()) => element('head', {}, callback);
void html(void callback()) => element('html', {}, callback);
void i(void callback()) => element('i', {}, callback);
void link(String id, void callback()) {
- element('a', {
- 'href': '#$id'
- }, callback);
+ element('a', {'href': '#$id'}, callback);
}
void p(void callback()) => element('p', {}, callback);
void pre(void callback()) => element('pre', {}, callback);
@@ -152,8 +141,8 @@
/**
* Visitor that generates HTML documentation of the API.
*/
-class ToHtmlVisitor extends HierarchicalApiVisitor with HtmlMixin, HtmlGenerator
- {
+class ToHtmlVisitor extends HierarchicalApiVisitor
+ with HtmlMixin, HtmlGenerator {
/**
* Set of types defined in the API.
*/
@@ -323,9 +312,7 @@
dd(() {
box(() {
showType(
- 'notification',
- notification.notificationType,
- notification.params);
+ 'notification', notification.notificationType, notification.params);
});
translateHtml(notification.html);
describePayload(notification.params, 'Parameters');
@@ -460,8 +447,7 @@
}
@override
- void visitTypeReference(TypeReference typeReference) {
- }
+ void visitTypeReference(TypeReference typeReference) {}
@override
void visitTypes(Types types) {
@@ -483,8 +469,8 @@
* }
* }
*/
-class TypeVisitor extends HierarchicalApiVisitor with HtmlMixin,
- HtmlCodeGenerator {
+class TypeVisitor extends HierarchicalApiVisitor
+ with HtmlMixin, HtmlCodeGenerator {
/**
* Set of fields which should be shown in boldface, or null if no field
* should be shown in boldface.
diff --git a/pkg/analyzer/bin/analyzer.dart b/pkg/analyzer/bin/analyzer.dart
index 447b386..ccdc619 100644
--- a/pkg/analyzer/bin/analyzer.dart
+++ b/pkg/analyzer/bin/analyzer.dart
@@ -25,14 +25,14 @@
if (options.shouldBatch) {
BatchRunner.runAsBatch(args, (List<String> args) {
CommandLineOptions options = CommandLineOptions.parse(args);
- return _analyzeAll(options);
+ return _analyzeAll(options, true);
});
} else {
- _analyzeAll(options);
+ _analyzeAll(options, false);
}
}
-_analyzeAll(CommandLineOptions options) {
+_analyzeAll(CommandLineOptions options, bool isBatch) {
if (!options.machineFormat) {
stdout.writeln("Analyzing ${options.sourceFiles}...");
}
@@ -53,31 +53,33 @@
// fail fast; don't analyze more files
return ErrorSeverity.ERROR;
}
- ErrorSeverity status = _runAnalyzer(options, sourcePath);
+ ErrorSeverity status = _runAnalyzer(options, sourcePath, isBatch);
allResult = allResult.max(status);
}
return allResult;
}
-_runAnalyzer(CommandLineOptions options, String sourcePath) {
+_runAnalyzer(CommandLineOptions options, String sourcePath, bool isBatch) {
if (options.warmPerf) {
int startTime = JavaSystem.currentTimeMillis();
- AnalyzerImpl analyzer = new AnalyzerImpl(sourcePath, options, startTime);
+ AnalyzerImpl analyzer =
+ new AnalyzerImpl(sourcePath, options, startTime, isBatch);
analyzer.analyzeSync(printMode: 2);
for (int i = 0; i < 8; i++) {
startTime = JavaSystem.currentTimeMillis();
- analyzer = new AnalyzerImpl(sourcePath, options, startTime);
+ analyzer = new AnalyzerImpl(sourcePath, options, startTime, isBatch);
analyzer.analyzeSync(printMode: 0);
}
PerformanceTag.reset();
startTime = JavaSystem.currentTimeMillis();
- analyzer = new AnalyzerImpl(sourcePath, options, startTime);
+ analyzer = new AnalyzerImpl(sourcePath, options, startTime, isBatch);
return analyzer.analyzeSync();
}
int startTime = JavaSystem.currentTimeMillis();
- AnalyzerImpl analyzer = new AnalyzerImpl(sourcePath, options, startTime);
+ AnalyzerImpl analyzer =
+ new AnalyzerImpl(sourcePath, options, startTime, isBatch);
var errorSeverity = analyzer.analyzeSync();
if (errorSeverity == ErrorSeverity.ERROR) {
exitCode = errorSeverity.ordinal;
diff --git a/pkg/analyzer/bin/formatter.dart b/pkg/analyzer/bin/formatter.dart
index 3c9b707..16769bb 100755
--- a/pkg/analyzer/bin/formatter.dart
+++ b/pkg/analyzer/bin/formatter.dart
@@ -11,7 +11,6 @@
import 'package:analyzer/src/services/formatter_impl.dart';
-
const BINARY_NAME = 'dartfmt';
final dartFileRegExp = new RegExp(r'^[^.].*\.dart$', caseSensitive: false);
final argParser = _initArgParser();
@@ -25,7 +24,6 @@
Selection selection;
final List<String> paths = [];
-
const HELP_FLAG = 'help';
const KIND_FLAG = 'kind';
const MACHINE_FLAG = 'machine';
@@ -35,10 +33,8 @@
const MAX_LINE_FLAG = 'max_line_length';
const INDENT_FLAG = 'indent';
-
const FOLLOW_LINKS = false;
-
main(args) {
var options = argParser.parse(args);
if (options['help']) {
@@ -107,7 +103,6 @@
return length;
}
-
Selection _parseSelection(String selectionOption) {
if (selectionOption == null) return null;
@@ -143,9 +138,9 @@
}
}
-_formatDirectory(dir) =>
- dir.listSync(
- followLinks: FOLLOW_LINKS).forEach((resource) => _formatResource(resource));
+_formatDirectory(dir) => dir
+ .listSync(followLinks: FOLLOW_LINKS)
+ .forEach((resource) => _formatResource(resource));
_formatFile(file) {
if (_isDartFile(file)) {
@@ -176,90 +171,70 @@
_formatStdin(kind) {
var input = new StringBuffer();
- stdin.transform(
- new Utf8Decoder()).listen(
- (data) => input.write(data),
- onError: (error) => _log('Error reading from stdin'),
- onDone: () => print(_format(input.toString(), kind)));
+ stdin.transform(new Utf8Decoder()).listen((data) => input.write(data),
+ onError: (error) => _log('Error reading from stdin'),
+ onDone: () => print(_format(input.toString(), kind)));
}
/// Initialize the arg parser instance.
ArgParser _initArgParser() {
// NOTE: these flags are placeholders only!
var parser = new ArgParser();
- parser.addFlag(
- WRITE_FLAG,
+ parser.addFlag(WRITE_FLAG,
abbr: 'w',
negatable: false,
help: 'Write reformatted sources to files (overwriting contents). '
- 'Do not print reformatted sources to standard output.');
- parser.addFlag(
- TRANSFORM_FLAG,
- abbr: 't',
- negatable: false,
- help: 'Perform code transformations.');
- parser.addOption(
- MAX_LINE_FLAG,
- abbr: 'l',
- defaultsTo: '80',
- help: 'Wrap lines longer than this length. '
- 'To never wrap, specify "Infinity" or "Inf" for short.');
- parser.addOption(
- INDENT_FLAG,
+ 'Do not print reformatted sources to standard output.');
+ parser.addFlag(TRANSFORM_FLAG,
+ abbr: 't', negatable: false, help: 'Perform code transformations.');
+ parser.addOption(MAX_LINE_FLAG,
+ abbr: 'l', defaultsTo: '80', help: 'Wrap lines longer than this length. '
+ 'To never wrap, specify "Infinity" or "Inf" for short.');
+ parser.addOption(INDENT_FLAG,
abbr: 'i',
defaultsTo: '2',
help: 'Specify number of spaces per indentation. '
- 'To indent using tabs, specify "--$INDENT_FLAG tab".' '--- [PROVISIONAL API].',
+ 'To indent using tabs, specify "--$INDENT_FLAG tab".' '--- [PROVISIONAL API].',
hide: true);
- parser.addOption(
- KIND_FLAG,
+ parser.addOption(KIND_FLAG,
abbr: 'k',
defaultsTo: 'cu',
help: 'Specify source snippet kind ("stmt" or "cu") ' '--- [PROVISIONAL API].',
hide: true);
- parser.addOption(
- SELECTION_FLAG,
- abbr: 's',
- help: 'Specify selection information as an offset,length pair '
- '(e.g., -s "0,4").',
- hide: true);
- parser.addFlag(
- MACHINE_FLAG,
+ parser.addOption(SELECTION_FLAG,
+ abbr: 's', help: 'Specify selection information as an offset,length pair '
+ '(e.g., -s "0,4").', hide: true);
+ parser.addFlag(MACHINE_FLAG,
abbr: 'm',
negatable: false,
help: 'Produce output in a format suitable for parsing.');
- parser.addFlag(
- HELP_FLAG,
- abbr: 'h',
- negatable: false,
- help: 'Print this usage information.');
+ parser.addFlag(HELP_FLAG,
+ abbr: 'h', negatable: false, help: 'Print this usage information.');
return parser;
}
-
/// Displays usage information.
_printUsage() {
var buffer = new StringBuffer();
buffer
- ..write('$BINARY_NAME formats Dart programs.')
- ..write('\n\n')
- ..write(
- 'Without an explicit path, $BINARY_NAME processes the standard '
- 'input. Given a file, it operates on that file; given a '
- 'directory, it operates on all .dart files in that directory, '
- 'recursively. (Files starting with a period are ignored.) By '
- 'default, $BINARY_NAME prints the reformatted sources to ' 'standard output.')
- ..write('\n\n')
- ..write('Usage: $BINARY_NAME [flags] [path...]\n\n')
- ..write('Supported flags are:\n')
- ..write('${argParser.usage}\n\n');
+ ..write('$BINARY_NAME formats Dart programs.')
+ ..write('\n\n')
+ ..write('Without an explicit path, $BINARY_NAME processes the standard '
+ 'input. Given a file, it operates on that file; given a '
+ 'directory, it operates on all .dart files in that directory, '
+ 'recursively. (Files starting with a period are ignored.) By '
+ 'default, $BINARY_NAME prints the reformatted sources to ' 'standard output.')
+ ..write('\n\n')
+ ..write('Usage: $BINARY_NAME [flags] [path...]\n\n')
+ ..write('Supported flags are:\n')
+ ..write('${argParser.usage}\n\n');
_log(buffer.toString());
}
/// Format this [src], treating it as the given snippet [kind].
String _format(src, kind) {
- var formatResult =
- new CodeFormatter(formatterSettings).format(kind, src, selection: selection);
+ var formatResult = new CodeFormatter(formatterSettings).format(kind, src,
+ selection: selection);
if (machineFormat) {
if (formatResult.selection == null) {
formatResult.selection = defaultSelection;
@@ -270,7 +245,7 @@
}
_toJson(formatResult) => // Actual JSON format TBD
-JSON.encode({
+ JSON.encode({
'source': formatResult.source,
'selection': {
'offset': formatResult.selection.offset,
diff --git a/pkg/analyzer/example/parser_driver.dart b/pkg/analyzer/example/parser_driver.dart
index c4d585d..8fdf1a9 100644
--- a/pkg/analyzer/example/parser_driver.dart
+++ b/pkg/analyzer/example/parser_driver.dart
@@ -10,9 +10,7 @@
import 'package:analyzer/src/generated/parser.dart';
import 'package:analyzer/src/generated/scanner.dart';
-
main(List<String> args) {
-
print('working dir ${new File('.').resolveSymbolicLinksSync()}');
if (args.length == 0) {
@@ -23,7 +21,6 @@
for (var arg in args) {
_parse(new File(arg));
}
-
}
_parse(File file) {
diff --git a/pkg/analyzer/example/scanner_driver.dart b/pkg/analyzer/example/scanner_driver.dart
index 5c150e1..d403fab 100644
--- a/pkg/analyzer/example/scanner_driver.dart
+++ b/pkg/analyzer/example/scanner_driver.dart
@@ -8,7 +8,6 @@
import 'package:analyzer/src/generated/scanner.dart';
main(List<String> args) {
-
print('working dir ${new File('.').resolveSymbolicLinksSync()}');
if (args.length == 0) {
@@ -19,7 +18,6 @@
for (var arg in args) {
_scan(new File(arg));
}
-
}
_scan(File file) {
diff --git a/pkg/analyzer/lib/analyzer.dart b/pkg/analyzer/lib/analyzer.dart
index 2f52d8a3..a4116c3 100644
--- a/pkg/analyzer/lib/analyzer.dart
+++ b/pkg/analyzer/lib/analyzer.dart
@@ -28,8 +28,8 @@
///
/// Throws an [AnalyzerErrorGroup] if any errors occurred, unless
/// [suppressErrors] is `true`, in which case any errors are discarded.
-CompilationUnit parseCompilationUnit(String contents, {String name,
- bool suppressErrors: false}) {
+CompilationUnit parseCompilationUnit(String contents,
+ {String name, bool suppressErrors: false}) {
if (name == null) name = '<unknown source>';
var source = new StringSource(contents, name);
var errorCollector = new _ErrorCollector();
@@ -82,8 +82,8 @@
///
/// Throws an [AnalyzerErrorGroup] if any errors occurred, unless
/// [suppressErrors] is `true`, in which case any errors are discarded.
-CompilationUnit parseDirectives(String contents, {String name,
- bool suppressErrors: false}) {
+CompilationUnit parseDirectives(String contents,
+ {String name, bool suppressErrors: false}) {
if (name == null) name = '<unknown source>';
var source = new StringSource(contents, name);
var errorCollector = new _ErrorCollector();
diff --git a/pkg/analyzer/lib/file_system/file_system.dart b/pkg/analyzer/lib/file_system/file_system.dart
index a53f0e6..d510dbb 100644
--- a/pkg/analyzer/lib/file_system/file_system.dart
+++ b/pkg/analyzer/lib/file_system/file_system.dart
@@ -10,7 +10,6 @@
import 'package:path/path.dart';
import 'package:watcher/watcher.dart';
-
/**
* [File]s are leaf [Resource]s which contain data.
*/
@@ -27,7 +26,6 @@
Source createSource([Uri uri]);
}
-
/**
* Base class for all file system exceptions.
*/
@@ -40,7 +38,6 @@
String toString() => 'FileSystemException(path=$path; message=$message)';
}
-
/**
* [Folder]s are [Resource]s which may contain files and/or other folders.
*/
@@ -77,8 +74,15 @@
* in this folder, in no particular order.
*/
List<Resource> getChildren();
-}
+ /**
+ * Return a [Folder] representing a child [Resource] with the given
+ * [relPath]. This call does not check whether a folder with the given name
+ * exists on the filesystem--client must call the [Folder]'s `exists` getter
+ * to determine whether the folder actually exists.
+ */
+ Folder getChildAssumingFolder(String relPath);
+}
/**
* The abstract class [Resource] is an abstraction of file or folder.
@@ -113,7 +117,6 @@
bool isOrContains(String path);
}
-
/**
* Instances of the class [ResourceProvider] convert [String] paths into
* [Resource]s.
@@ -139,7 +142,6 @@
Folder getStateLocation(String pluginId);
}
-
/**
* A [UriResolver] for [Resource]s.
*/
diff --git a/pkg/analyzer/lib/file_system/memory_file_system.dart b/pkg/analyzer/lib/file_system/memory_file_system.dart
index efb779c..7f4f954 100644
--- a/pkg/analyzer/lib/file_system/memory_file_system.dart
+++ b/pkg/analyzer/lib/file_system/memory_file_system.dart
@@ -14,7 +14,6 @@
import 'file_system.dart';
-
/**
* An in-memory implementation of [ResourceProvider].
* Use `/` as a path separator.
@@ -31,6 +30,9 @@
@override
Context get pathContext => posix;
+ /**
+ * Delete the file with the given path.
+ */
void deleteFile(String path) {
_checkFileAtPath(path);
_pathToResource.remove(path);
@@ -39,6 +41,28 @@
_notifyWatchers(path, ChangeType.REMOVE);
}
+ /**
+ * Delete the folder with the given path
+ * and recurively delete nested files and folders.
+ */
+ void deleteFolder(String path) {
+ _checkFolderAtPath(path);
+ _MemoryFolder folder = _pathToResource[path];
+ for (Resource child in folder.getChildren()) {
+ if (child is File) {
+ deleteFile(child.path);
+ } else if (child is Folder) {
+ deleteFolder(child.path);
+ } else {
+ throw 'failed to delete resource: $child';
+ }
+ }
+ _pathToResource.remove(path);
+ _pathToContent.remove(path);
+ _pathToTimestamp.remove(path);
+ _notifyWatchers(path, ChangeType.REMOVE);
+ }
+
@override
Resource getResource(String path) {
path = posix.normalize(path);
@@ -75,17 +99,28 @@
return link;
}
- File newFile(String path, String content) {
+ File newFile(String path, String content, [int stamp]) {
path = posix.normalize(path);
newFolder(posix.dirname(path));
_MemoryFile file = new _MemoryFile(this, path);
_pathToResource[path] = file;
_pathToContent[path] = content;
- _pathToTimestamp[path] = nextStamp++;
+ _pathToTimestamp[path] = stamp != null ? stamp : nextStamp++;
_notifyWatchers(path, ChangeType.ADD);
return file;
}
+ File updateFile(String path, String content, [int stamp]) {
+ path = posix.normalize(path);
+ newFolder(posix.dirname(path));
+ _MemoryFile file = new _MemoryFile(this, path);
+ _pathToResource[path] = file;
+ _pathToContent[path] = content;
+ _pathToTimestamp[path] = stamp != null ? stamp : nextStamp++;
+ _notifyWatchers(path, ChangeType.MODIFY);
+ return file;
+ }
+
Folder newFolder(String path) {
path = posix.normalize(path);
if (!path.startsWith('/')) {
@@ -118,12 +153,20 @@
}
}
+ void _checkFolderAtPath(String path) {
+ _MemoryResource resource = _pathToResource[path];
+ if (resource is! _MemoryFolder) {
+ throw new ArgumentError(
+ 'Folder expected at "$path" but ${resource.runtimeType} found');
+ }
+ }
+
void _notifyWatchers(String path, ChangeType changeType) {
- _pathToWatchers.forEach(
- (String watcherPath, List<StreamController<WatchEvent>> streamControllers) {
+ _pathToWatchers.forEach((String watcherPath,
+ List<StreamController<WatchEvent>> streamControllers) {
if (posix.isWithin(watcherPath, path)) {
- for (StreamController<WatchEvent> streamController in streamControllers)
- {
+ for (StreamController<WatchEvent> streamController
+ in streamControllers) {
streamController.add(new WatchEvent(changeType, path));
}
}
@@ -131,7 +174,6 @@
}
}
-
/**
* An in-memory implementation of [File] which acts like a symbolic link to a
* non-existent file.
@@ -166,7 +208,6 @@
}
}
-
/**
* An in-memory implementation of [File].
*/
@@ -174,6 +215,9 @@
_MemoryFile(MemoryResourceProvider provider, String path)
: super(provider, path);
+ @override
+ bool get exists => _provider._pathToResource[path] is _MemoryFile;
+
int get modificationStamp {
int stamp = _provider._pathToTimestamp[path];
if (stamp == null) {
@@ -204,7 +248,6 @@
}
}
-
/**
* An in-memory implementation of [Source].
*/
@@ -279,13 +322,13 @@
String toString() => _file.toString();
}
-
/**
* An in-memory implementation of [Folder].
*/
class _MemoryFolder extends _MemoryResource implements Folder {
_MemoryFolder(MemoryResourceProvider provider, String path)
: super(provider, path);
+
@override
Stream<WatchEvent> get changes {
StreamController<WatchEvent> streamController =
@@ -304,6 +347,9 @@
}
@override
+ bool get exists => _provider._pathToResource[path] is _MemoryFolder;
+
+ @override
String canonicalizePath(String relPath) {
relPath = posix.normalize(relPath);
String childPath = posix.join(path, relPath);
@@ -327,6 +373,16 @@
}
@override
+ _MemoryFolder getChildAssumingFolder(String relPath) {
+ String childPath = canonicalizePath(relPath);
+ _MemoryResource resource = _provider._pathToResource[childPath];
+ if (resource is _MemoryFolder) {
+ return resource;
+ }
+ return new _MemoryFolder(_provider, childPath);
+ }
+
+ @override
List<Resource> getChildren() {
List<Resource> children = <Resource>[];
_provider._pathToResource.forEach((resourcePath, resource) {
@@ -346,7 +402,6 @@
}
}
-
/**
* An in-memory implementation of [Resource].
*/
@@ -357,9 +412,6 @@
_MemoryResource(this._provider, this.path);
@override
- bool get exists => _provider._pathToResource.containsKey(path);
-
- @override
get hashCode => path.hashCode;
@override
diff --git a/pkg/analyzer/lib/file_system/physical_file_system.dart b/pkg/analyzer/lib/file_system/physical_file_system.dart
index 398e451..71c4020 100644
--- a/pkg/analyzer/lib/file_system/physical_file_system.dart
+++ b/pkg/analyzer/lib/file_system/physical_file_system.dart
@@ -14,12 +14,10 @@
import 'file_system.dart';
-
/**
* A `dart:io` based implementation of [ResourceProvider].
*/
class PhysicalResourceProvider implements ResourceProvider {
-
static final NORMALIZE_EOL_ALWAYS =
(String string) => string.replaceAll(new RegExp('\r\n?'), '\n');
@@ -70,7 +68,6 @@
}
}
-
/**
* A `dart:io` based implementation of [File].
*/
@@ -103,7 +100,6 @@
}
}
-
/**
* A `dart:io` based implementation of [Folder].
*/
@@ -130,6 +126,13 @@
}
@override
+ _PhysicalFolder getChildAssumingFolder(String relPath) {
+ String canonicalPath = canonicalizePath(relPath);
+ io.Directory directory = new io.Directory(canonicalPath);
+ return new _PhysicalFolder(directory);
+ }
+
+ @override
List<Resource> getChildren() {
List<Resource> children = <Resource>[];
io.Directory directory = _entry as io.Directory;
@@ -155,7 +158,6 @@
}
}
-
/**
* A `dart:io` based implementation of [Resource].
*/
diff --git a/pkg/analyzer/lib/formatter.dart b/pkg/analyzer/lib/formatter.dart
index 9c177ea..58de5ac 100644
--- a/pkg/analyzer/lib/formatter.dart
+++ b/pkg/analyzer/lib/formatter.dart
@@ -4,5 +4,5 @@
library formatter;
-export 'package:analyzer/src/services/formatter_impl.dart' show CodeFormatter,
- FormatterOptions, FormattedSource, CodeKind;
+export 'package:analyzer/src/services/formatter_impl.dart'
+ show CodeFormatter, FormatterOptions, FormattedSource, CodeKind;
diff --git a/pkg/analyzer/lib/instrumentation/file_instrumentation.dart b/pkg/analyzer/lib/instrumentation/file_instrumentation.dart
index 011d211..136ff8c 100644
--- a/pkg/analyzer/lib/instrumentation/file_instrumentation.dart
+++ b/pkg/analyzer/lib/instrumentation/file_instrumentation.dart
@@ -8,7 +8,6 @@
import 'package:analyzer/instrumentation/instrumentation.dart';
-
/**
* An [InstrumentationServer] that writes to a file.
*/
diff --git a/pkg/analyzer/lib/instrumentation/instrumentation.dart b/pkg/analyzer/lib/instrumentation/instrumentation.dart
index 0cf5724..83b8635 100644
--- a/pkg/analyzer/lib/instrumentation/instrumentation.dart
+++ b/pkg/analyzer/lib/instrumentation/instrumentation.dart
@@ -53,6 +53,7 @@
static final InstrumentationService NULL_SERVICE =
new InstrumentationService(null);
+ static const String TAG_ANALYSIS_TASK = 'Task';
static const String TAG_ERROR = 'Err';
static const String TAG_EXCEPTION = 'Ex';
static const String TAG_FILE_READ = 'Read';
@@ -62,6 +63,7 @@
static const String TAG_REQUEST = 'Req';
static const String TAG_RESPONSE = 'Res';
static const String TAG_VERSION = 'Ver';
+ static const String TAG_WATCH_EVENT = 'Watch';
/**
* The instrumentation server used to communicate with the server, or `null`
@@ -87,6 +89,17 @@
String get _timestamp => new DateTime.now().millisecondsSinceEpoch.toString();
/**
+ * Log that an analysis task is being performed in the given [context]. The
+ * task has the given [description].
+ */
+ void logAnalysisTask(String context, String description) {
+ if (_instrumentationServer != null) {
+ _instrumentationServer
+ .log(_join([TAG_ANALYSIS_TASK, context, description]));
+ }
+ }
+
+ /**
* Log the fact that an error, described by the given [message], has occurred.
*/
void logError(String message) {
@@ -112,8 +125,8 @@
void logFileRead(String path, int modificationTime, String content) {
if (_instrumentationServer != null) {
String timeStamp = _toString(modificationTime);
- _instrumentationServer.log(
- _join([TAG_FILE_READ, path, timeStamp, content]));
+ _instrumentationServer
+ .log(_join([TAG_FILE_READ, path, timeStamp, content]));
}
}
@@ -126,8 +139,8 @@
if (_instrumentationServer != null) {
String timeStamp =
time == null ? 'null' : time.millisecondsSinceEpoch.toString();
- _instrumentationServer.log(
- _join([TAG_LOG_ENTRY, level, timeStamp, message]));
+ _instrumentationServer
+ .log(_join([TAG_LOG_ENTRY, level, timeStamp, message]));
}
}
@@ -145,8 +158,8 @@
sw.stop();
String elapsed = sw.elapsedMilliseconds.toString();
if (_instrumentationServer != null) {
- _instrumentationServer.log(
- _join([TAG_PERFORMANCE, kind, elapsed, message]));
+ _instrumentationServer
+ .log(_join([TAG_PERFORMANCE, kind, elapsed, message]));
}
}
@@ -158,8 +171,8 @@
if (_instrumentationServer != null) {
String message = _toString(exception);
String trace = _toString(stackTrace);
- _instrumentationServer.logWithPriority(
- _join([TAG_EXCEPTION, message, trace]));
+ _instrumentationServer
+ .logWithPriority(_join([TAG_EXCEPTION, message, trace]));
}
}
@@ -183,20 +196,31 @@
*/
void logVersion(String uuid, String clientId, String clientVersion,
String serverVersion, String sdkVersion) {
-
String normalize(String value) =>
value != null && value.length > 0 ? value : 'unknown';
if (_instrumentationServer != null) {
- _instrumentationServer.logWithPriority(
- _join(
- [
- TAG_VERSION,
- uuid,
- normalize(clientId),
- normalize(clientVersion),
- serverVersion,
- sdkVersion]));
+ _instrumentationServer.logWithPriority(_join([
+ TAG_VERSION,
+ uuid,
+ normalize(clientId),
+ normalize(clientVersion),
+ serverVersion,
+ sdkVersion
+ ]));
+ }
+ }
+
+ /**
+ * Log that the file system watcher sent an event. The [folderPath] is the
+ * path to the folder containing the changed file, the [filePath] is the path
+ * of the file that changed, and the [changeType] indicates what kind of
+ * change occurred.
+ */
+ void logWatchEvent(String folderPath, String filePath, String changeType) {
+ if (_instrumentationServer != null) {
+ _instrumentationServer
+ .log(_join([TAG_WATCH_EVENT, folderPath, filePath, changeType]));
}
}
diff --git a/pkg/analyzer/lib/options.dart b/pkg/analyzer/lib/options.dart
index ef7a677..37e1b8a 100644
--- a/pkg/analyzer/lib/options.dart
+++ b/pkg/analyzer/lib/options.dart
@@ -73,8 +73,9 @@
/**
* Initialize options from the given parsed [args].
*/
- CommandLineOptions._fromArgs(ArgResults args, Map<String,
- String> definedVariables, Map<String, String> customUrlMappings)
+ CommandLineOptions._fromArgs(ArgResults args,
+ Map<String, String> definedVariables,
+ Map<String, String> customUrlMappings)
: dartSdkPath = args['dart-sdk'],
this.definedVariables = definedVariables,
disableHints = args['no-hints'],
@@ -87,7 +88,7 @@
perf = args['perf'],
shouldBatch = args['batch'],
showPackageWarnings = args['show-package-warnings'] ||
- args['package-warnings'],
+ args['package-warnings'],
showSdkWarnings = args['show-sdk-warnings'] || args['warnings'],
sourceFiles = args.rest,
warmPerf = args['warm-perf'],
@@ -134,115 +135,92 @@
static CommandLineOptions _parse(List<String> args) {
args = args.expand((String arg) => arg.split('=')).toList();
var parser = new CommandLineParser()
- ..addFlag(
- 'batch',
- abbr: 'b',
- help: 'Run in batch mode',
- defaultsTo: false,
- negatable: false)
- ..addOption('dart-sdk', help: 'The path to the Dart SDK')
- ..addOption(
- 'package-root',
- abbr: 'p',
- help:
- 'The path to the package root. The flag package-root is deprecated. Remove to use package information computed by pub.')
- ..addOption(
- 'format',
- help: 'Specifies the format in which errors are displayed')
- ..addFlag(
- 'machine',
- help: 'Print errors in a format suitable for parsing (deprecated)',
- defaultsTo: false,
- negatable: false)
- ..addFlag(
- 'version',
- help: 'Print the analyzer version',
- defaultsTo: false,
- negatable: false)
- ..addFlag(
- 'no-hints',
- help: 'Do not show hint results',
- defaultsTo: false,
- negatable: false)
- ..addFlag(
- 'ignore-unrecognized-flags',
- help: 'Ignore unrecognized command line flags',
- defaultsTo: false,
- negatable: false)
- ..addFlag(
- 'fatal-warnings',
- help: 'Treat non-type warnings as fatal',
- defaultsTo: false,
- negatable: false)
- ..addFlag(
- 'package-warnings',
- help: 'Show warnings from package: imports',
- defaultsTo: false,
- negatable: false)
- ..addFlag(
- 'show-package-warnings',
- help: 'Show warnings from package: imports (deprecated)',
- defaultsTo: false,
- negatable: false)
- ..addFlag(
- 'perf',
- help: 'Show performance statistics',
- defaultsTo: false,
- negatable: false)
- ..addFlag(
- 'warnings',
- help: 'Show warnings from SDK imports',
- defaultsTo: false,
- negatable: false)
- ..addFlag(
- 'show-sdk-warnings',
- help: 'Show warnings from SDK imports (deprecated)',
- defaultsTo: false,
- negatable: false)
- ..addFlag(
- 'help',
- abbr: 'h',
- help: 'Display this help message',
- defaultsTo: false,
- negatable: false)
- ..addOption(
- 'url-mapping',
- help: '--url-mapping=libraryUri,/path/to/library.dart directs the '
- 'analyzer to use "library.dart" as the source for an import ' 'of "libraryUri"',
- allowMultiple: true)
- //
- // Hidden flags.
- //
- ..addFlag(
- 'enable-async',
- help: 'Enable support for the proposed async feature',
- defaultsTo: false,
- negatable: false,
- hide: true)
- ..addFlag(
- 'enable-enum',
- help: 'Enable support for the proposed enum feature',
- defaultsTo: false,
- negatable: false,
- hide: true)
- ..addFlag(
- 'log',
- help: 'Log additional messages and exceptions',
- defaultsTo: false,
- negatable: false,
- hide: true)
- ..addFlag(
- 'warm-perf',
- help: 'Show both cold and warm performance statistics',
- defaultsTo: false,
- negatable: false,
- hide: true)
- ..addFlag(
- 'enable_type_checks',
- help: 'Check types in constant evaluation',
- defaultsTo: false,
- negatable: false,
- hide: true);
+ ..addFlag('batch',
+ abbr: 'b',
+ help: 'Run in batch mode',
+ defaultsTo: false,
+ negatable: false)
+ ..addOption('dart-sdk', help: 'The path to the Dart SDK')
+ ..addOption('package-root',
+ abbr: 'p',
+ help: 'The path to the package root. The flag package-root is deprecated. Remove to use package information computed by pub.')
+ ..addOption('format',
+ help: 'Specifies the format in which errors are displayed')
+ ..addFlag('machine',
+ help: 'Print errors in a format suitable for parsing (deprecated)',
+ defaultsTo: false,
+ negatable: false)
+ ..addFlag('version',
+ help: 'Print the analyzer version',
+ defaultsTo: false,
+ negatable: false)
+ ..addFlag('no-hints',
+ help: 'Do not show hint results', defaultsTo: false, negatable: false)
+ ..addFlag('ignore-unrecognized-flags',
+ help: 'Ignore unrecognized command line flags',
+ defaultsTo: false,
+ negatable: false)
+ ..addFlag('fatal-warnings',
+ help: 'Treat non-type warnings as fatal',
+ defaultsTo: false,
+ negatable: false)
+ ..addFlag('package-warnings',
+ help: 'Show warnings from package: imports',
+ defaultsTo: false,
+ negatable: false)
+ ..addFlag('show-package-warnings',
+ help: 'Show warnings from package: imports (deprecated)',
+ defaultsTo: false,
+ negatable: false)
+ ..addFlag('perf',
+ help: 'Show performance statistics',
+ defaultsTo: false,
+ negatable: false)
+ ..addFlag('warnings',
+ help: 'Show warnings from SDK imports',
+ defaultsTo: false,
+ negatable: false)
+ ..addFlag('show-sdk-warnings',
+ help: 'Show warnings from SDK imports (deprecated)',
+ defaultsTo: false,
+ negatable: false)
+ ..addFlag('help',
+ abbr: 'h',
+ help: 'Display this help message',
+ defaultsTo: false,
+ negatable: false)
+ ..addOption('url-mapping',
+ help: '--url-mapping=libraryUri,/path/to/library.dart directs the '
+ 'analyzer to use "library.dart" as the source for an import ' 'of "libraryUri"',
+ allowMultiple: true)
+ //
+ // Hidden flags.
+ //
+ ..addFlag('enable-async',
+ help: 'Enable support for the proposed async feature',
+ defaultsTo: false,
+ negatable: false,
+ hide: true)
+ ..addFlag('enable-enum',
+ help: 'Enable support for the proposed enum feature',
+ defaultsTo: false,
+ negatable: false,
+ hide: true)
+ ..addFlag('log',
+ help: 'Log additional messages and exceptions',
+ defaultsTo: false,
+ negatable: false,
+ hide: true)
+ ..addFlag('warm-perf',
+ help: 'Show both cold and warm performance statistics',
+ defaultsTo: false,
+ negatable: false,
+ hide: true)
+ ..addFlag('enable_type_checks',
+ help: 'Check types in constant evaluation',
+ defaultsTo: false,
+ negatable: false,
+ hide: true);
try {
// TODO(scheglov) https://code.google.com/p/dart/issues/detail?id=11061
@@ -281,15 +259,12 @@
customUrlMappings[splitMapping[0]] = splitMapping[1];
}
return new CommandLineOptions._fromArgs(
- results,
- definedVariables,
- customUrlMappings);
+ results, definedVariables, customUrlMappings);
} on FormatException catch (e) {
print(e.message);
_showUsage(parser);
exit(15);
}
-
}
static _showUsage(parser) {
@@ -307,7 +282,6 @@
* options/flags, this class can be replaced with a simple [ArgParser] instance.
*/
class CommandLineParser {
-
final List<String> _knownFlags;
final bool _alwaysIgnoreUnrecognized;
final ArgParser _parser;
@@ -318,7 +292,6 @@
_alwaysIgnoreUnrecognized = alwaysIgnoreUnrecognized,
_parser = new ArgParser(allowTrailingOptions: true);
-
ArgParser get parser => _parser;
/**
@@ -329,8 +302,7 @@
void addFlag(String name, {String abbr, String help, bool defaultsTo: false,
bool negatable: true, void callback(bool value), bool hide: false}) {
_knownFlags.add(name);
- _parser.addFlag(
- name,
+ _parser.addFlag(name,
abbr: abbr,
help: help,
defaultsTo: defaultsTo,
@@ -348,8 +320,7 @@
Map<String, String> allowedHelp, String defaultsTo, void callback(value),
bool allowMultiple: false}) {
_knownFlags.add(name);
- _parser.addOption(
- name,
+ _parser.addOption(name,
abbr: abbr,
help: help,
allowed: allowed,
@@ -359,7 +330,6 @@
allowMultiple: allowMultiple);
}
-
/**
* Generates a string displaying usage information for the defined options.
*
@@ -374,11 +344,12 @@
*
* See [ArgParser].
*/
- ArgResults parse(List<String> args, Map<String, String> definedVariables) =>
- _parser.parse(_filterUnknowns(parseDefinedVariables(args, definedVariables)));
+ ArgResults parse(
+ List<String> args, Map<String, String> definedVariables) => _parser
+ .parse(_filterUnknowns(parseDefinedVariables(args, definedVariables)));
- List<String> parseDefinedVariables(List<String> args, Map<String,
- String> definedVariables) {
+ List<String> parseDefinedVariables(
+ List<String> args, Map<String, String> definedVariables) {
int count = args.length;
List<String> remainingArgs = <String>[];
for (int i = 0; i < count; i++) {
@@ -439,7 +410,7 @@
}
_getNextFlagIndex(args, i) {
- for ( ; i < args.length; ++i) {
+ for (; i < args.length; ++i) {
if (args[i].startsWith('--')) {
return i;
}
diff --git a/pkg/analyzer/lib/source/package_map_resolver.dart b/pkg/analyzer/lib/source/package_map_resolver.dart
index 80ce2e6..dac2bb5 100644
--- a/pkg/analyzer/lib/source/package_map_resolver.dart
+++ b/pkg/analyzer/lib/source/package_map_resolver.dart
@@ -8,7 +8,6 @@
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/util/asserts.dart' as asserts;
-
/**
* A [UriResolver] implementation for the `package:` scheme that uses a map of
* package names to their directories.
@@ -77,21 +76,25 @@
@override
Uri restoreAbsolute(Source source) {
String sourcePath = source.fullName;
+ Uri bestMatch;
+ int bestMatchLength = -1;
for (String pkgName in packageMap.keys) {
List<Folder> pkgFolders = packageMap[pkgName];
for (int i = 0; i < pkgFolders.length; i++) {
Folder pkgFolder = pkgFolders[i];
String pkgFolderPath = pkgFolder.path;
// TODO(paulberry): figure out the right thing to do for Windows.
- if (sourcePath.startsWith(pkgFolderPath + '/')) {
+ if (pkgFolderPath.length > bestMatchLength &&
+ sourcePath.startsWith(pkgFolderPath + '/')) {
String relPath = sourcePath.substring(pkgFolderPath.length + 1);
if (_isReversibleTranslation(pkgFolders, i, relPath)) {
- return Uri.parse('$PACKAGE_SCHEME:$pkgName/$relPath');
+ bestMatch = Uri.parse('$PACKAGE_SCHEME:$pkgName/$relPath');
+ bestMatchLength = pkgFolderPath.length;
}
}
}
}
- return null;
+ return bestMatch;
}
/**
@@ -101,8 +104,8 @@
* that is, whether translating the package URI pack to a file path will
* produce the file path we started with.
*/
- bool _isReversibleTranslation(List<Folder> packageDirs, int packageDirIndex,
- String relPath) {
+ bool _isReversibleTranslation(
+ List<Folder> packageDirs, int packageDirIndex, String relPath) {
// The translation is reversible provided there is no prior element of
// [packageDirs] containing a file matching [relPath].
for (int i = 0; i < packageDirIndex; i++) {
diff --git a/pkg/analyzer/lib/source/pub_package_map_provider.dart b/pkg/analyzer/lib/source/pub_package_map_provider.dart
index a45fc90..e16fbef 100644
--- a/pkg/analyzer/lib/source/pub_package_map_provider.dart
+++ b/pkg/analyzer/lib/source/pub_package_map_provider.dart
@@ -12,7 +12,11 @@
import 'package:analyzer/source/package_map_provider.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/sdk_io.dart';
-import 'package:path/path.dart';
+
+/**
+ * The function used to run pub list.
+ */
+typedef io.ProcessResult RunPubList(Folder folder);
/**
* Implementation of PackageMapProvider that operates by executing pub.
@@ -37,20 +41,29 @@
*/
final DirectoryBasedDartSdk sdk;
- PubPackageMapProvider(this.resourceProvider, this.sdk);
+ /**
+ * The function used to run pub list.
+ */
+ RunPubList _runPubList;
+
+ /**
+ * Construct a new instance.
+ * A [RunPubList] implementation may be injected for testing
+ */
+ PubPackageMapProvider(this.resourceProvider, this.sdk, [this._runPubList]) {
+ if (_runPubList == null) {
+ _runPubList = _runPubListDefault;
+ }
+ }
@override
PackageMapInfo computePackageMap(Folder folder) {
// TODO(paulberry) make this asynchronous so that we can (a) do other
// analysis while it's in progress, and (b) time out if it takes too long
// to respond.
- String executable = sdk.pubExecutable.getAbsolutePath();
io.ProcessResult result;
try {
- result = io.Process.runSync(
- executable,
- [PUB_LIST_COMMAND],
- workingDirectory: folder.path);
+ result = _runPubList(folder);
} on io.ProcessException catch (exception, stackTrace) {
AnalysisEngine.instance.logger.logInformation(
"Error running pub $PUB_LIST_COMMAND\n$exception\n$stackTrace");
@@ -58,25 +71,41 @@
if (result == null || result.exitCode != 0) {
String exitCode =
result != null ? 'exit code ${result.exitCode}' : 'null';
- AnalysisEngine.instance.logger.logInformation(
- "pub $PUB_LIST_COMMAND failed: $exitCode");
- return _error(folder);
+ AnalysisEngine.instance.logger
+ .logInformation("pub $PUB_LIST_COMMAND failed: $exitCode");
+ return computePackageMapError(folder);
}
try {
- return parsePackageMap(result.stdout, folder);
+ PackageMapInfo packageMap =
+ parsePackageMap(JSON.decode(result.stdout), folder);
+ return packageMap;
} catch (exception, stackTrace) {
AnalysisEngine.instance.logger.logError(
"Malformed output from pub $PUB_LIST_COMMAND\n$exception\n$stackTrace");
}
- return _error(folder);
+ return computePackageMapError(folder);
+ }
+
+ /**
+ * Create a PackageMapInfo object representing an error condition.
+ */
+ PackageMapInfo computePackageMapError(Folder folder) {
+ // Even if an error occurs, we still need to know the dependencies, so that
+ // we'll know when to try running "pub list-package-dirs" again.
+ // Unfortunately, "pub list-package-dirs" doesn't tell us dependencies when
+ // an error occurs, so just assume there is one dependency, "pubspec.lock".
+ List<String> dependencies = <String>[
+ resourceProvider.pathContext.join(folder.path, PUBSPEC_LOCK_NAME)
+ ];
+ return new PackageMapInfo(null, dependencies.toSet());
}
/**
* Decode the JSON output from pub into a package map. Paths in the
* output are considered relative to [folder].
*/
- PackageMapInfo parsePackageMap(String jsonText, Folder folder) {
+ PackageMapInfo parsePackageMap(Map obj, Folder folder) {
// The output of pub looks like this:
// {
// "packages": {
@@ -89,13 +118,12 @@
// ]
// }
Map<String, List<Folder>> packageMap = new HashMap<String, List<Folder>>();
- Map obj = JSON.decode(jsonText);
Map packages = obj['packages'];
processPaths(String packageName, List paths) {
List<Folder> folders = <Folder>[];
for (var path in paths) {
if (path is String) {
- Resource resource = folder.getChild(path);
+ Resource resource = folder.getChildAssumingFolder(path);
if (resource is Folder) {
folders.add(resource);
}
@@ -125,14 +153,11 @@
}
/**
- * Create a PackageMapInfo object representing an error condition.
+ * Run pub list to determine the packages and input files.
*/
- PackageMapInfo _error(Folder folder) {
- // Even if an error occurs, we still need to know the dependencies, so that
- // we'll know when to try running "pub list-package-dirs" again.
- // Unfortunately, "pub list-package-dirs" doesn't tell us dependencies when
- // an error occurs, so just assume there is one dependency, "pubspec.lock".
- List<String> dependencies = <String>[join(folder.path, PUBSPEC_LOCK_NAME)];
- return new PackageMapInfo(null, dependencies.toSet());
+ io.ProcessResult _runPubListDefault(Folder folder) {
+ return io.Process.runSync(sdk.pubExecutable.getAbsolutePath(), [
+ PUB_LIST_COMMAND
+ ], workingDirectory: folder.path);
}
}
diff --git a/pkg/analyzer/lib/src/analyzer_impl.dart b/pkg/analyzer/lib/src/analyzer_impl.dart
index f0cf30c..222aad7 100644
--- a/pkg/analyzer/lib/src/analyzer_impl.dart
+++ b/pkg/analyzer/lib/src/analyzer_impl.dart
@@ -16,6 +16,7 @@
import 'package:analyzer/src/error_formatter.dart';
import 'package:analyzer/src/generated/java_core.dart' show JavaSystem;
import 'package:analyzer/src/generated/java_engine.dart';
+import 'package:analyzer/src/generated/utilities_general.dart';
import '../options.dart';
import 'generated/constant.dart';
@@ -25,7 +26,6 @@
import 'generated/java_io.dart';
import 'generated/sdk_io.dart';
import 'generated/source_io.dart';
-import 'package:analyzer/src/generated/utilities_general.dart';
DirectoryBasedDartSdk sdk;
@@ -40,6 +40,12 @@
final CommandLineOptions options;
final int startTime;
+
+ /**
+ * True if the analyzer is running in batch mode.
+ */
+ final bool isBatch;
+
ContentCache contentCache = new ContentCache();
SourceFactory sourceFactory;
@@ -55,7 +61,7 @@
final HashMap<Source, AnalysisErrorInfo> sourceErrorsMap =
new HashMap<Source, AnalysisErrorInfo>();
- AnalyzerImpl(String sourcePath, this.options, this.startTime)
+ AnalyzerImpl(String sourcePath, this.options, this.startTime, this.isBatch)
: sourcePath = _normalizeSourcePath(sourcePath) {
if (sdk == null) {
sdk = new DirectoryBasedDartSdk(new JavaFile(options.dartSdkPath));
@@ -140,9 +146,10 @@
void prepareAnalysisContext(JavaFile sourceFile, Source source) {
List<UriResolver> resolvers = [
- new CustomUriResolver(options.customUrlMappings),
- new DartUriResolver(sdk),
- new FileUriResolver()];
+ new CustomUriResolver(options.customUrlMappings),
+ new DartUriResolver(sdk),
+ new FileUriResolver()
+ ];
// may be add package resolver
{
JavaFile packageDirectory;
@@ -156,10 +163,8 @@
PhysicalResourceProvider.INSTANCE.getResource('.'));
Map<String, List<Folder>> packageMap = packageMapInfo.packageMap;
if (packageMap != null) {
- resolvers.add(
- new PackageMapUriResolver(
- PhysicalResourceProvider.INSTANCE,
- packageMap));
+ resolvers.add(new PackageMapUriResolver(
+ PhysicalResourceProvider.INSTANCE, packageMap));
}
}
}
@@ -180,6 +185,8 @@
AnalysisOptionsImpl contextOptions = new AnalysisOptionsImpl();
contextOptions.cacheSize = _MAX_CACHE_SIZE;
contextOptions.hint = !options.disableHints;
+ contextOptions.analyzeFunctionBodiesPredicate =
+ _analyzeFunctionBodiesPredicate;
context.analysisOptions = contextOptions;
// Create and add a ChangeSet
@@ -257,6 +264,26 @@
});
}
+ bool _analyzeFunctionBodiesPredicate(Source source) {
+ // TODO(paulberry): This function will need to be updated when we add the
+ // ability to suppress errors, warnings, and hints for files reached via
+ // custom URI's using the "--url-mapping" flag.
+ if (source.uri.scheme == 'dart') {
+ if (isBatch) {
+ // When running in batch mode, the SDK files are cached from one
+ // analysis run to the next. So we need to parse function bodies even
+ // if the user hasn't asked for errors/warnings from the SDK, since
+ // they might ask for errors/warnings from the SDK in the future.
+ return true;
+ }
+ return options.showSdkWarnings;
+ }
+ if (source.uri.scheme == 'package') {
+ return options.showPackageWarnings;
+ }
+ return true;
+ }
+
/// The sync version of analysis.
ErrorSeverity _analyzeSync(int printMode) {
// don't try to analyze parts
@@ -291,7 +318,7 @@
return false;
}
if (computeSeverity(error, options.enableTypeChecks) ==
- ErrorSeverity.INFO &&
+ ErrorSeverity.INFO &&
options.disableHints) {
return false;
}
@@ -348,8 +375,8 @@
* [enableTypeChecks] is false, then de-escalate checked-mode compile time
* errors to a severity of [ErrorSeverity.INFO].
*/
- static ErrorSeverity computeSeverity(AnalysisError error,
- bool enableTypeChecks) {
+ static ErrorSeverity computeSeverity(
+ AnalysisError error, bool enableTypeChecks) {
if (!enableTypeChecks &&
error.errorCode.type == ErrorType.CHECKED_MODE_COMPILE_TIME_ERROR) {
return ErrorSeverity.INFO;
diff --git a/pkg/analyzer/lib/src/cancelable_future.dart b/pkg/analyzer/lib/src/cancelable_future.dart
index c52b94b..c072be2 100644
--- a/pkg/analyzer/lib/src/cancelable_future.dart
+++ b/pkg/analyzer/lib/src/cancelable_future.dart
@@ -228,8 +228,7 @@
* Error which is used to complete any [CancelableFuture] which has been
* successfully canceled by calling its 'cancel' method.
*/
-class FutureCanceledError {
-}
+class FutureCanceledError {}
class _CancelableCompleterFuture<T> implements CancelableFuture<T> {
final CancelableCompleter<T> _completer;
@@ -260,8 +259,7 @@
Future timeout(Duration timeLimit, {onTimeout()}) {
// TODO(paulberry): Implement this in such a way that a timeout cancels
// the future.
- return _completer._outerCompleter.future.timeout(
- timeLimit,
+ return _completer._outerCompleter.future.timeout(timeLimit,
onTimeout: onTimeout);
}
diff --git a/pkg/analyzer/lib/src/context/cache.dart b/pkg/analyzer/lib/src/context/cache.dart
new file mode 100644
index 0000000..f1290c0
--- /dev/null
+++ b/pkg/analyzer/lib/src/context/cache.dart
@@ -0,0 +1,789 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library analyzer.src.context.cache;
+
+import 'dart:collection';
+
+import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/engine.dart'
+ show AnalysisEngine, CacheState, InternalAnalysisContext, RetentionPriority;
+import 'package:analyzer/src/generated/html.dart';
+import 'package:analyzer/src/generated/java_engine.dart';
+import 'package:analyzer/src/generated/utilities_collection.dart';
+import 'package:analyzer/task/model.dart';
+
+/**
+ * An LRU cache of results produced by analysis.
+ */
+class AnalysisCache {
+ /**
+ * A flag used to control whether trace information should be produced when
+ * the content of the cache is modified.
+ */
+ static bool _TRACE_CHANGES = false;
+
+ /**
+ * An array containing the partitions of which this cache is comprised.
+ */
+ final List<CachePartition> _partitions;
+
+ /**
+ * Initialize a newly created cache to have the given [partitions]. The
+ * partitions will be searched in the order in which they appear in the array,
+ * so the most specific partition (usually an [SdkCachePartition]) should be
+ * first and the most general (usually a [UniversalCachePartition]) last.
+ */
+ AnalysisCache(this._partitions);
+
+ /**
+ * Return the number of entries in this cache that have an AST associated with
+ * them.
+ */
+ int get astSize => _partitions[_partitions.length - 1].astSize;
+
+ // TODO(brianwilkerson) Implement or delete this.
+// /**
+// * Return information about each of the partitions in this cache.
+// */
+// List<AnalysisContextStatistics_PartitionData> get partitionData {
+// int count = _partitions.length;
+// List<AnalysisContextStatistics_PartitionData> data =
+// new List<AnalysisContextStatistics_PartitionData>(count);
+// for (int i = 0; i < count; i++) {
+// CachePartition partition = _partitions[i];
+// data[i] = new AnalysisContextStatisticsImpl_PartitionDataImpl(
+// partition.astSize,
+// partition.map.length);
+// }
+// return data;
+// }
+
+ /**
+ * Record that the AST associated with the given [target] was just read from
+ * the cache.
+ */
+ void accessedAst(AnalysisTarget target) {
+ // TODO(brianwilkerson) Extract this logic to a helper method (here and
+ // elsewhere)
+ int count = _partitions.length;
+ for (int i = 0; i < count; i++) {
+ if (_partitions[i].contains(target)) {
+ _partitions[i].accessedAst(target);
+ return;
+ }
+ }
+ }
+
+ /**
+ * Return the entry associated with the given [target].
+ */
+ CacheEntry get(AnalysisTarget target) {
+ int count = _partitions.length;
+ for (int i = 0; i < count; i++) {
+ if (_partitions[i].contains(target)) {
+ return _partitions[i].get(target);
+ }
+ }
+ //
+ // We should never get to this point because the last partition should
+ // always be a universal partition, except in the case of the SDK context,
+ // in which case the target should always be part of the SDK.
+ //
+ return null;
+ }
+
+ /**
+ * Return the context to which the given [target] was explicitly added.
+ */
+ InternalAnalysisContext getContextFor(AnalysisTarget target) {
+ int count = _partitions.length;
+ for (int i = 0; i < count; i++) {
+ if (_partitions[i].contains(target)) {
+ return _partitions[i].context;
+ }
+ }
+ //
+ // We should never get to this point because the last partition should
+ // always be a universal partition, except in the case of the SDK context,
+ // in which case the target should always be part of the SDK.
+ //
+ // TODO(brianwilkerson) Throw an exception here.
+ AnalysisEngine.instance.logger.logInformation(
+ 'Could not find context for $target',
+ new CaughtException(new AnalysisException(), null));
+ return null;
+ }
+
+ /**
+ * Return an iterator returning all of the map entries mapping targets to
+ * cache entries.
+ */
+ MapIterator<AnalysisTarget, CacheEntry> iterator() {
+ int count = _partitions.length;
+ List<Map<AnalysisTarget, CacheEntry>> maps = new List<Map>(count);
+ for (int i = 0; i < count; i++) {
+ maps[i] = _partitions[i].map;
+ }
+ return new MultipleMapIterator<AnalysisTarget, CacheEntry>(maps);
+ }
+
+ /**
+ * Associate the given [entry] with the given [target].
+ */
+ void put(AnalysisTarget target, CacheEntry entry) {
+ entry.fixExceptionState();
+ int count = _partitions.length;
+ for (int i = 0; i < count; i++) {
+ if (_partitions[i].contains(target)) {
+ if (_TRACE_CHANGES) {
+ CacheEntry oldEntry = _partitions[i].get(target);
+ if (oldEntry == null) {
+ AnalysisEngine.instance.logger
+ .logInformation('Added a cache entry for $target.');
+ } else {
+ AnalysisEngine.instance.logger
+ .logInformation('Modified the cache entry for $target.');
+// 'Diff = ${entry.getDiff(oldEntry)}');
+ }
+ }
+ _partitions[i].put(target, entry);
+ return;
+ }
+ }
+ // TODO(brianwilkerson) Handle the case where no partition was found,
+ // possibly by throwing an exception.
+ }
+
+ /**
+ * Remove all information related to the given [target] from this cache.
+ */
+ void remove(AnalysisTarget target) {
+ int count = _partitions.length;
+ for (int i = 0; i < count; i++) {
+ if (_partitions[i].contains(target)) {
+ if (_TRACE_CHANGES) {
+ AnalysisEngine.instance.logger
+ .logInformation('Removed the cache entry for $target.');
+ }
+ _partitions[i].remove(target);
+ return;
+ }
+ }
+ }
+
+ /**
+ * Record that the AST associated with the given [target] was just removed
+ * from the cache.
+ */
+ void removedAst(AnalysisTarget target) {
+ int count = _partitions.length;
+ for (int i = 0; i < count; i++) {
+ if (_partitions[i].contains(target)) {
+ _partitions[i].removedAst(target);
+ return;
+ }
+ }
+ }
+
+ /**
+ * Return the number of targets that are mapped to cache entries.
+ */
+ int size() {
+ int size = 0;
+ int count = _partitions.length;
+ for (int i = 0; i < count; i++) {
+ size += _partitions[i].size();
+ }
+ return size;
+ }
+
+ /**
+ * Record that the AST associated with the given [target] was just stored to
+ * the cache.
+ */
+ void storedAst(AnalysisTarget target) {
+ int count = _partitions.length;
+ for (int i = 0; i < count; i++) {
+ if (_partitions[i].contains(target)) {
+ _partitions[i].storedAst(target);
+ return;
+ }
+ }
+ }
+}
+
+/**
+ * The information cached by an analysis context about an individual target.
+ */
+class CacheEntry {
+ /**
+ * The index of the flag indicating whether the source was explicitly added to
+ * the context or whether the source was implicitly added because it was
+ * referenced by another source.
+ */
+ static int _EXPLICITLY_ADDED_FLAG = 0;
+
+ /**
+ * The most recent time at which the state of the target matched the state
+ * represented by this entry.
+ */
+ int modificationTime = 0;
+
+ /**
+ * The exception that caused one or more values to have a state of
+ * [CacheState.ERROR].
+ */
+ CaughtException exception;
+
+ /**
+ * A bit-encoding of boolean flags associated with this entry's target.
+ */
+ int _flags = 0;
+
+ /**
+ * A table mapping result descriptors to the cached values of those results.
+ */
+ Map<ResultDescriptor, ResultData> _resultMap =
+ new HashMap<ResultDescriptor, ResultData>();
+
+ /**
+ * Return `true` if the source was explicitly added to the context or `false`
+ * if the source was implicitly added because it was referenced by another
+ * source.
+ */
+ bool get explicitlyAdded => _getFlag(_EXPLICITLY_ADDED_FLAG);
+
+ /**
+ * Set whether the source was explicitly added to the context to match the
+ * [explicitlyAdded] flag.
+ */
+ void set explicitlyAdded(bool explicitlyAdded) {
+ _setFlag(_EXPLICITLY_ADDED_FLAG, explicitlyAdded);
+ }
+
+ /**
+ * Return `true` if this entry contains at least one result whose value is an
+ * AST structure.
+ */
+ bool get hasAstStructure {
+ for (ResultData data in _resultMap.values) {
+ if (data.value is AstNode || data.value is XmlNode) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Fix the state of the [exception] to match the current state of the entry.
+ */
+ void fixExceptionState() {
+ if (hasErrorState()) {
+ if (exception == null) {
+ //
+ // This code should never be reached, but is a fail-safe in case an
+ // exception is not recorded when it should be.
+ //
+ // TODO(brianwilkerson) Log this?
+ String message = 'State set to ERROR without setting an exception';
+ exception = new CaughtException(new AnalysisException(message), null);
+ }
+ } else {
+ exception = null;
+ }
+ }
+
+ /**
+ * Mark any AST structures associated with this cache entry as being flushed.
+ */
+ void flushAstStructures() {
+ _resultMap.forEach((ResultDescriptor descriptor, ResultData data) {
+ if (data.value is AstNode || data.value is XmlNode) {
+ _validateStateChange(descriptor, CacheState.FLUSHED);
+ data.state = CacheState.FLUSHED;
+ data.value = descriptor.defaultValue;
+ }
+ });
+ }
+
+ /**
+ * Return the state of the result represented by the given [descriptor].
+ */
+ CacheState getState(ResultDescriptor descriptor) {
+ ResultData data = _resultMap[descriptor];
+ if (data == null) {
+ return CacheState.INVALID;
+ }
+ return data.state;
+ }
+
+ /**
+ * Return the value of the result represented by the given [descriptor], or
+ * the default value for the result if this entry does not have a valid value.
+ */
+ /*<V>*/ dynamic /*V*/ getValue(ResultDescriptor /*<V>*/ descriptor) {
+ ResultData data = _resultMap[descriptor];
+ if (data == null) {
+ return descriptor.defaultValue;
+ }
+ return data.value;
+ }
+
+ /**
+ * Return `true` if the state of any data value is [CacheState.ERROR].
+ */
+ bool hasErrorState() {
+ for (ResultData data in _resultMap.values) {
+ if (data.state == CacheState.ERROR) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Invalidate all of the information associated with this entry's target.
+ */
+ void invalidateAllInformation() {
+ _resultMap.clear();
+ exception = null;
+ }
+
+ /**
+ * Set the state of the result represented by the given [descriptor] to the
+ * given [state].
+ */
+ void setState(ResultDescriptor descriptor, CacheState state) {
+ // TODO(brianwilkerson) Consider introducing a different method used to set
+ // the state of a list of descriptors to ERROR that could validate that an
+ // exception was also provided. (It would then be an error to use this
+ // method to set the state to ERROR.)
+ if (state == CacheState.VALID) {
+ throw new ArgumentError('use setValue() to set the state to VALID');
+ }
+ _validateStateChange(descriptor, state);
+ if (state == CacheState.INVALID) {
+ _resultMap.remove(descriptor);
+ } else {
+ ResultData data =
+ _resultMap.putIfAbsent(descriptor, () => new ResultData(descriptor));
+ data.state = state;
+ if (state != CacheState.IN_PROCESS) {
+ //
+ // If the state is in-process, we can leave the current value in the
+ // cache for any 'get' methods to access.
+ //
+ data.value = descriptor.defaultValue;
+ }
+ }
+ }
+
+ /**
+ * Set the value of the result represented by the given [descriptor] to the
+ * given [value].
+ */
+ /*<V>*/ void setValue(ResultDescriptor /*<V>*/ descriptor, dynamic /*V*/
+ value) {
+ _validateStateChange(descriptor, CacheState.VALID);
+ ResultData data =
+ _resultMap.putIfAbsent(descriptor, () => new ResultData(descriptor));
+ data.state = CacheState.VALID;
+ data.value = value == null ? descriptor.defaultValue : value;
+ }
+
+ @override
+ String toString() {
+ StringBuffer buffer = new StringBuffer();
+ _writeOn(buffer);
+ return buffer.toString();
+ }
+
+ /**
+ * Return the value of the flag with the given [index].
+ */
+ bool _getFlag(int index) => BooleanArray.get(_flags, index);
+
+ /**
+ * Set the value of the flag with the given [index] to the given [value].
+ */
+ void _setFlag(int index, bool value) {
+ _flags = BooleanArray.set(_flags, index, value);
+ }
+
+ /**
+ * If the state of the value described by the given [descriptor] is changing
+ * from ERROR to anything else, capture the information. This is an attempt to
+ * discover the underlying cause of a long-standing bug.
+ */
+ void _validateStateChange(ResultDescriptor descriptor, CacheState newState) {
+ // TODO(brianwilkerson) Decide whether we still want to capture this data.
+// if (descriptor != CONTENT) {
+// return;
+// }
+// ResultData data = resultMap[CONTENT];
+// if (data != null && data.state == CacheState.ERROR) {
+// String message =
+// 'contentState changing from ${data.state} to $newState';
+// InstrumentationBuilder builder =
+// Instrumentation.builder2('CacheEntry-validateStateChange');
+// builder.data3('message', message);
+// //builder.data('source', source.getFullName());
+// builder.record(new CaughtException(new AnalysisException(message), null));
+// builder.log();
+// }
+ }
+
+ /**
+ * Write a textual representation of this entry to the given [buffer]. The
+ * result should only be used for debugging purposes.
+ */
+ void _writeOn(StringBuffer buffer) {
+ buffer.write('time = ');
+ buffer.write(modificationTime);
+ List<ResultDescriptor> results = _resultMap.keys.toList();
+ results.sort((ResultDescriptor first, ResultDescriptor second) =>
+ first.toString().compareTo(second.toString()));
+ for (ResultDescriptor result in results) {
+ ResultData data = _resultMap[result];
+ buffer.write('; ');
+ buffer.write(result.toString());
+ buffer.write(' = ');
+ buffer.write(data..state);
+ }
+ }
+}
+
+/**
+ * A single partition in an LRU cache of information related to analysis.
+ */
+abstract class CachePartition {
+ /**
+ * The context that owns this partition. Multiple contexts can reference a
+ * partition, but only one context can own it.
+ */
+ final InternalAnalysisContext context;
+
+ /**
+ * The maximum number of sources for which AST structures should be kept in
+ * the cache.
+ */
+ int _maxCacheSize = 0;
+
+ /**
+ * The policy used to determine which results to remove from the cache.
+ */
+ final CacheRetentionPolicy _retentionPolicy;
+
+ /**
+ * A table mapping the targets belonging to this partition to the information
+ * known about those targets.
+ */
+ HashMap<AnalysisTarget, CacheEntry> _targetMap =
+ new HashMap<AnalysisTarget, CacheEntry>();
+
+ /**
+ * A list containing the most recently accessed targets with the most recently
+ * used at the end of the list. When more targets are added than the maximum
+ * allowed then the least recently used target will be removed and will have
+ * it's cached AST structure flushed.
+ */
+ List<AnalysisTarget> _recentlyUsed = <AnalysisTarget>[];
+
+ /**
+ * Initialize a newly created cache partition, belonging to the given
+ * [context]. The partition will maintain at most [_maxCacheSize] AST
+ * structures in the cache, using the [_retentionPolicy] to determine which
+ * AST structures to flush.
+ */
+ CachePartition(this.context, this._maxCacheSize, this._retentionPolicy);
+
+ /**
+ * Return the number of entries in this partition that have an AST associated
+ * with them.
+ */
+ int get astSize {
+ int astSize = 0;
+ int count = _recentlyUsed.length;
+ for (int i = 0; i < count; i++) {
+ AnalysisTarget target = _recentlyUsed[i];
+ CacheEntry entry = _targetMap[target];
+ if (entry.hasAstStructure) {
+ astSize++;
+ }
+ }
+ return astSize;
+ }
+
+ /**
+ * Return a table mapping the targets known to the context to the information
+ * known about the target.
+ *
+ * <b>Note:</b> This method is only visible for use by [AnalysisCache] and
+ * should not be used for any other purpose.
+ */
+ Map<AnalysisTarget, CacheEntry> get map => _targetMap;
+
+ /**
+ * Return the maximum size of the cache.
+ */
+ int get maxCacheSize => _maxCacheSize;
+
+ /**
+ * Set the maximum size of the cache to the given [size].
+ */
+ void set maxCacheSize(int size) {
+ _maxCacheSize = size;
+ while (_recentlyUsed.length > _maxCacheSize) {
+ if (!_flushAstFromCache()) {
+ break;
+ }
+ }
+ }
+
+ /**
+ * Record that the AST associated with the given [target] was just read from
+ * the cache.
+ */
+ void accessedAst(AnalysisTarget target) {
+ if (_recentlyUsed.remove(target)) {
+ _recentlyUsed.add(target);
+ return;
+ }
+ while (_recentlyUsed.length >= _maxCacheSize) {
+ if (!_flushAstFromCache()) {
+ break;
+ }
+ }
+ _recentlyUsed.add(target);
+ }
+
+ /**
+ * Return `true` if the given [target] is contained in this partition.
+ */
+ // TODO(brianwilkerson) Rename this to something more meaningful, such as
+ // isResponsibleFor.
+ bool contains(AnalysisTarget target);
+
+ /**
+ * Return the entry associated with the given [target].
+ */
+ CacheEntry get(AnalysisTarget target) => _targetMap[target];
+
+ /**
+ * Return an iterator returning all of the map entries mapping targets to
+ * cache entries.
+ */
+ MapIterator<AnalysisTarget, CacheEntry> iterator() =>
+ new SingleMapIterator<AnalysisTarget, CacheEntry>(_targetMap);
+
+ /**
+ * Associate the given [entry] with the given [target].
+ */
+ void put(AnalysisTarget target, CacheEntry entry) {
+ entry.fixExceptionState();
+ _targetMap[target] = entry;
+ }
+
+ /**
+ * Remove all information related to the given [target] from this cache.
+ */
+ void remove(AnalysisTarget target) {
+ _recentlyUsed.remove(target);
+ _targetMap.remove(target);
+ }
+
+ /**
+ * Record that the AST associated with the given [target] was just removed
+ * from the cache.
+ */
+ void removedAst(AnalysisTarget target) {
+ _recentlyUsed.remove(target);
+ }
+
+ /**
+ * Return the number of targets that are mapped to cache entries.
+ */
+ int size() => _targetMap.length;
+
+ /**
+ * Record that the AST associated with the given [target] was just stored to
+ * the cache.
+ */
+ void storedAst(AnalysisTarget target) {
+ if (_recentlyUsed.contains(target)) {
+ return;
+ }
+ while (_recentlyUsed.length >= _maxCacheSize) {
+ if (!_flushAstFromCache()) {
+ break;
+ }
+ }
+ _recentlyUsed.add(target);
+ }
+
+ /**
+ * Attempt to flush one AST structure from the cache. Return `true` if a
+ * structure was flushed.
+ */
+ bool _flushAstFromCache() {
+ AnalysisTarget removedTarget = _removeAstToFlush();
+ if (removedTarget == null) {
+ return false;
+ }
+ CacheEntry entry = _targetMap[removedTarget];
+ entry.flushAstStructures();
+ return true;
+ }
+
+ /**
+ * Remove and return one target from the list of recently used targets whose
+ * AST structure can be flushed from the cache, or `null` if none of the
+ * targets can be removed. The target that will be returned will be the target
+ * that has been unreferenced for the longest period of time but that is not a
+ * priority for analysis.
+ */
+ AnalysisTarget _removeAstToFlush() {
+ int targetToRemove = -1;
+ for (int i = 0; i < _recentlyUsed.length; i++) {
+ AnalysisTarget target = _recentlyUsed[i];
+ RetentionPriority priority =
+ _retentionPolicy.getAstPriority(target, _targetMap[target]);
+ if (priority == RetentionPriority.LOW) {
+ return _recentlyUsed.removeAt(i);
+ } else if (priority == RetentionPriority.MEDIUM && targetToRemove < 0) {
+ targetToRemove = i;
+ }
+ }
+ if (targetToRemove < 0) {
+ // This happens if the retention policy returns a priority of HIGH for all
+ // of the targets that have been recently used. This is the case, for
+ // example, when the list of priority sources is bigger than the current
+ // cache size.
+ return null;
+ }
+ return _recentlyUsed.removeAt(targetToRemove);
+ }
+}
+
+/**
+ * A policy objecy that determines how important it is for data to be retained
+ * in the analysis cache.
+ */
+abstract class CacheRetentionPolicy {
+ /**
+ * Return the priority of retaining the AST structure for the given [target]
+ * in the given [entry].
+ */
+ // TODO(brianwilkerson) Find a more general mechanism, probably based on task
+ // descriptors, to determine which data is still needed for analysis and which
+ // can be removed from the cache. Ideally we could (a) remove the need for
+ // this class and (b) be able to flush all result data (not just AST's).
+ RetentionPriority getAstPriority(AnalysisTarget target, CacheEntry entry);
+}
+
+/**
+ * A retention policy that will keep AST's in the cache if there is analysis
+ * information that needs to be computed for a source, where the computation is
+ * dependent on having the AST.
+ */
+class DefaultRetentionPolicy implements CacheRetentionPolicy {
+ /**
+ * An instance of this class that can be shared.
+ */
+ static const DefaultRetentionPolicy POLICY = const DefaultRetentionPolicy();
+
+ /**
+ * Initialize a newly created instance of this class.
+ */
+ const DefaultRetentionPolicy();
+
+ // TODO(brianwilkerson) Implement or delete this.
+// /**
+// * Return `true` if there is analysis information in the given entry that needs to be
+// * computed, where the computation is dependent on having the AST.
+// *
+// * @param dartEntry the entry being tested
+// * @return `true` if there is analysis information that needs to be computed from the AST
+// */
+// bool astIsNeeded(DartEntry dartEntry) =>
+// dartEntry.hasInvalidData(DartEntry.HINTS) ||
+// dartEntry.hasInvalidData(DartEntry.LINTS) ||
+// dartEntry.hasInvalidData(DartEntry.VERIFICATION_ERRORS) ||
+// dartEntry.hasInvalidData(DartEntry.RESOLUTION_ERRORS);
+
+ @override
+ RetentionPriority getAstPriority(AnalysisTarget target, CacheEntry entry) {
+ // TODO(brianwilkerson) Implement or replace this.
+// if (sourceEntry is DartEntry) {
+// DartEntry dartEntry = sourceEntry;
+// if (astIsNeeded(dartEntry)) {
+// return RetentionPriority.MEDIUM;
+// }
+// }
+// return RetentionPriority.LOW;
+ return RetentionPriority.MEDIUM;
+ }
+}
+
+/**
+ * The data about a single analysis result that is stored in a [CacheEntry].
+ */
+// TODO(brianwilkerson) Consider making this a generic class so that the value
+// can be typed.
+class ResultData {
+ /**
+ * The state of the cached value.
+ */
+ CacheState state;
+
+ /**
+ * The value being cached, or the default value for the result if there is no
+ * value (for example, when the [state] is [CacheState.INVALID].
+ */
+ Object value;
+
+ /**
+ * Initialize a newly created result holder to represent the value of data
+ * described by the given [descriptor].
+ */
+ ResultData(ResultDescriptor descriptor) {
+ state = CacheState.INVALID;
+ value = descriptor.defaultValue;
+ }
+}
+
+/**
+ * A cache partition that contains all of the targets in the SDK.
+ */
+class SdkCachePartition extends CachePartition {
+ /**
+ * Initialize a newly created cache partition, belonging to the given
+ * [context]. The partition will maintain at most [maxCacheSize] AST
+ * structures in the cache.
+ */
+ SdkCachePartition(InternalAnalysisContext context, int maxCacheSize)
+ : super(context, maxCacheSize, DefaultRetentionPolicy.POLICY);
+
+ @override
+ bool contains(AnalysisTarget target) => target.source.isInSystemLibrary;
+}
+
+/**
+ * A cache partition that contains all targets not contained in other partitions.
+ */
+class UniversalCachePartition extends CachePartition {
+ /**
+ * Initialize a newly created cache partition, belonging to the given
+ * [context]. The partition will maintain at most [maxCacheSize] AST
+ * structures in the cache, using the [retentionPolicy] to determine which
+ * AST structures to flush.
+ */
+ UniversalCachePartition(InternalAnalysisContext context, int maxCacheSize,
+ CacheRetentionPolicy retentionPolicy)
+ : super(context, maxCacheSize, retentionPolicy);
+
+ @override
+ bool contains(AnalysisTarget target) => true;
+}
diff --git a/pkg/analyzer/lib/src/error_formatter.dart b/pkg/analyzer/lib/src/error_formatter.dart
index ea0ad47..f6d973b 100644
--- a/pkg/analyzer/lib/src/error_formatter.dart
+++ b/pkg/analyzer/lib/src/error_formatter.dart
@@ -28,8 +28,8 @@
ErrorFormatter(this.out, this.options, [this.errorFilter = _anyError]);
- void formatError(Map<AnalysisError, LineInfo> errorToLine,
- AnalysisError error) {
+ void formatError(
+ Map<AnalysisError, LineInfo> errorToLine, AnalysisError error) {
Source source = error.source;
LineInfo_Location location = errorToLine[error].getLocation(error.offset);
int length = error.length;
@@ -91,8 +91,7 @@
return compare;
}
// path
- compare = Comparable.compare(
- error1.source.fullName.toLowerCase(),
+ compare = Comparable.compare(error1.source.fullName.toLowerCase(),
error2.source.fullName.toLowerCase());
if (compare != 0) {
return compare;
diff --git a/pkg/analyzer/lib/src/generated/ast.dart b/pkg/analyzer/lib/src/generated/ast.dart
index 277af7f..b69d355 100644
--- a/pkg/analyzer/lib/src/generated/ast.dart
+++ b/pkg/analyzer/lib/src/generated/ast.dart
@@ -63,15 +63,15 @@
accept(AstVisitor visitor) => visitor.visitAdjacentStrings(this);
@override
- void appendStringValue(StringBuffer buffer) {
- for (StringLiteral stringLiteral in strings) {
- stringLiteral.appendStringValue(buffer);
- }
+ void visitChildren(AstVisitor visitor) {
+ _strings.accept(visitor);
}
@override
- void visitChildren(AstVisitor visitor) {
- _strings.accept(visitor);
+ void _appendStringValue(StringBuffer buffer) {
+ for (StringLiteral stringLiteral in strings) {
+ stringLiteral._appendStringValue(buffer);
+ }
}
}
@@ -97,7 +97,7 @@
* attribute.
*/
AnnotatedNode(Comment comment, List<Annotation> metadata) {
- _comment = becomeParentOf(comment);
+ _comment = _becomeParentOf(comment);
_metadata = new NodeList<Annotation>(this, metadata);
}
@@ -130,7 +130,7 @@
* [comment].
*/
void set documentationComment(Comment comment) {
- _comment = becomeParentOf(comment);
+ _comment = _becomeParentOf(comment);
}
/**
@@ -146,6 +146,7 @@
/**
* Set the metadata associated with this node to the given [metadata].
*/
+ @deprecated // Directly modify the list returned by "this.metadata"
void set metadata(List<Annotation> metadata) {
_metadata.clear();
_metadata.addAll(metadata);
@@ -157,17 +158,20 @@
*/
List<AstNode> get sortedCommentAndAnnotations {
return <AstNode>[]
- ..add(_comment)
- ..addAll(_metadata)
- ..sort(AstNode.LEXICAL_ORDER);
+ ..add(_comment)
+ ..addAll(_metadata)
+ ..sort(AstNode.LEXICAL_ORDER);
}
+ /**
+ * Return a holder of child entities that subclasses can add to.
+ */
ChildEntities get _childEntities {
ChildEntities result = new ChildEntities();
if (_commentIsBeforeAnnotations()) {
result
- ..add(_comment)
- ..addAll(_metadata);
+ ..add(_comment)
+ ..addAll(_metadata);
} else {
result.addAll(sortedCommentAndAnnotations);
}
@@ -187,9 +191,12 @@
}
/**
- * Return `true` if the comment is lexically before any annotations.
+ * Return `true` if there are no annotations before the comment. Note that a
+ * result of `true` does not imply that there is a comment, nor that there are
+ * annotations associated with this node.
*/
bool _commentIsBeforeAnnotations() {
+ // TODO(brianwilkerson) Convert this to a getter.
if (_comment == null || _metadata.isEmpty) {
return true;
}
@@ -256,9 +263,9 @@
*/
Annotation(this.atSign, Identifier name, this.period,
SimpleIdentifier constructorName, ArgumentList arguments) {
- _name = becomeParentOf(name);
- _constructorName = becomeParentOf(constructorName);
- _arguments = becomeParentOf(arguments);
+ _name = _becomeParentOf(name);
+ _constructorName = _becomeParentOf(constructorName);
+ _arguments = _becomeParentOf(arguments);
}
/**
@@ -271,7 +278,7 @@
* Set the arguments to the constructor being invoked to the given arguments.
*/
void set arguments(ArgumentList arguments) {
- _arguments = becomeParentOf(arguments);
+ _arguments = _becomeParentOf(arguments);
}
@override
@@ -279,11 +286,11 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(atSign)
- ..add(_name)
- ..add(period)
- ..add(_constructorName)
- ..add(_arguments);
+ ..add(atSign)
+ ..add(_name)
+ ..add(period)
+ ..add(_constructorName)
+ ..add(_arguments);
/**
* Return the name of the constructor being invoked, or `null` if this
@@ -295,7 +302,7 @@
* Set the name of the constructor being invoked to the given [name].
*/
void set constructorName(SimpleIdentifier name) {
- _constructorName = becomeParentOf(name);
+ _constructorName = _becomeParentOf(name);
}
/**
@@ -340,7 +347,7 @@
* the name of the field that is being referenced to the given [name].
*/
void set name(Identifier name) {
- _name = becomeParentOf(name);
+ _name = _becomeParentOf(name);
}
@override
@@ -355,8 +362,8 @@
}
/**
- * A list of arguments in the invocation of an executable element: a function,
- * method, or constructor.
+ * A list of arguments in the invocation of an executable element (that is, a
+ * function, method, or constructor).
*
* > argumentList ::=
* > '(' arguments? ')'
@@ -405,8 +412,8 @@
* Initialize a newly created list of arguments. The list of [arguments] can
* be `null` if there are no arguments.
*/
- ArgumentList(this.leftParenthesis, List<Expression> arguments,
- this.rightParenthesis) {
+ ArgumentList(
+ this.leftParenthesis, List<Expression> arguments, this.rightParenthesis) {
_arguments = new NodeList<Expression>(this, arguments);
}
@@ -425,9 +432,9 @@
*/
@override
Iterable get childEntities => new ChildEntities()
- ..add(leftParenthesis)
- ..addAll(_arguments)
- ..add(rightParenthesis);
+ ..add(leftParenthesis)
+ ..addAll(_arguments)
+ ..add(rightParenthesis);
/**
* Set the parameter elements corresponding to each of the arguments in this
@@ -435,8 +442,8 @@
* same length as the number of arguments, but can contain `null` entries if a
* given argument does not correspond to a formal parameter.
*/
- void set
- correspondingPropagatedParameters(List<ParameterElement> parameters) {
+ void set correspondingPropagatedParameters(
+ List<ParameterElement> parameters) {
if (parameters.length != _arguments.length) {
throw new IllegalArgumentException(
"Expected ${_arguments.length} parameters, not ${parameters.length}");
@@ -474,14 +481,49 @@
* invoked,
* then return the parameter element representing the parameter to which the
* value of the given expression will be bound. Otherwise, return `null`.
- *
- * This method is only intended to be used by
- * [Expression.propagatedParameterElement].
*/
+ @deprecated // Use "expression.propagatedParameterElement"
ParameterElement getPropagatedParameterElementFor(Expression expression) {
- if (_correspondingPropagatedParameters == null) {
- // Either the AST structure has not been resolved or the invocation
- // of which this list is a part could not be resolved.
+ return _getPropagatedParameterElementFor(expression);
+ }
+
+ /**
+ * If
+ * * the given [expression] is a child of this list,
+ * * the AST structure has been resolved,
+ * * the function being invoked is known based on static type information, and
+ * * the expression corresponds to one of the parameters of the function being
+ * invoked,
+ * then return the parameter element representing the parameter to which the
+ * value of the given expression will be bound. Otherwise, return `null`.
+ */
+ @deprecated // Use "expression.propagatedParameterElement"
+ ParameterElement getStaticParameterElementFor(Expression expression) {
+ return _getStaticParameterElementFor(expression);
+ }
+
+ @override
+ void visitChildren(AstVisitor visitor) {
+ _arguments.accept(visitor);
+ }
+
+ /**
+ * If
+ * * the given [expression] is a child of this list,
+ * * the AST structure has been resolved,
+ * * the function being invoked is known based on propagated type information,
+ * and
+ * * the expression corresponds to one of the parameters of the function being
+ * invoked,
+ * then return the parameter element representing the parameter to which the
+ * value of the given expression will be bound. Otherwise, return `null`.
+ */
+ ParameterElement _getPropagatedParameterElementFor(Expression expression) {
+ if (_correspondingPropagatedParameters == null ||
+ _correspondingPropagatedParameters.length != _arguments.length) {
+ // Either the AST structure has not been resolved, the invocation of which
+ // this list is a part could not be resolved, or the argument list was
+ // modified after the parameters were set.
return null;
}
int index = _arguments.indexOf(expression);
@@ -501,14 +543,13 @@
* invoked,
* then return the parameter element representing the parameter to which the
* value of the given expression will be bound. Otherwise, return `null`.
- *
- * This method is only intended to be used by
- * [Expression.staticParameterElement].
*/
- ParameterElement getStaticParameterElementFor(Expression expression) {
- if (_correspondingStaticParameters == null) {
- // Either the AST structure has not been resolved or the invocation
- // of which this list is a part could not be resolved.
+ ParameterElement _getStaticParameterElementFor(Expression expression) {
+ if (_correspondingStaticParameters == null ||
+ _correspondingStaticParameters.length != _arguments.length) {
+ // Either the AST structure has not been resolved, the invocation of which
+ // this list is a part could not be resolved, or the argument list was
+ // modified after the parameters were set.
return null;
}
int index = _arguments.indexOf(expression);
@@ -518,11 +559,6 @@
}
return _correspondingStaticParameters[index];
}
-
- @override
- void visitChildren(AstVisitor visitor) {
- _arguments.accept(visitor);
- }
}
/**
@@ -538,7 +574,7 @@
Expression _expression;
/**
- * The as operator.
+ * The 'as' operator.
*/
Token asOperator;
@@ -551,8 +587,8 @@
* Initialize a newly created as expression.
*/
AsExpression(Expression expression, this.asOperator, TypeName type) {
- _expression = becomeParentOf(expression);
- _type = becomeParentOf(type);
+ _expression = _becomeParentOf(expression);
+ _type = _becomeParentOf(type);
}
@override
@@ -560,9 +596,9 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(_expression)
- ..add(asOperator)
- ..add(_type);
+ ..add(_expression)
+ ..add(asOperator)
+ ..add(_type);
@override
Token get endToken => _type.endToken;
@@ -577,7 +613,7 @@
* [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
@override
@@ -592,7 +628,7 @@
* Set the name of the type being cast to to the given [name].
*/
void set type(TypeName name) {
- _type = becomeParentOf(name);
+ _type = _becomeParentOf(name);
}
@override
@@ -615,7 +651,7 @@
/**
* The token representing the 'assert' keyword.
*/
- Token keyword;
+ Token assertKeyword;
/**
* The left parenthesis.
@@ -640,24 +676,21 @@
/**
* Initialize a newly created assert statement.
*/
- AssertStatement(this.keyword, this.leftParenthesis, Expression condition,
- this.rightParenthesis, this.semicolon) {
- _condition = becomeParentOf(condition);
+ AssertStatement(this.assertKeyword, this.leftParenthesis,
+ Expression condition, this.rightParenthesis, this.semicolon) {
+ _condition = _becomeParentOf(condition);
}
@override
- Token get beginToken => keyword;
+ Token get beginToken => assertKeyword;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(leftParenthesis)
- ..add(_condition)
- ..add(rightParenthesis)
- ..add(semicolon);
+ ..add(assertKeyword)
+ ..add(leftParenthesis)
+ ..add(_condition)
+ ..add(rightParenthesis)
+ ..add(semicolon);
/**
* Return the condition that is being asserted to be `true`.
@@ -669,12 +702,26 @@
* [expression].
*/
void set condition(Expression condition) {
- _condition = becomeParentOf(condition);
+ _condition = _becomeParentOf(condition);
}
@override
Token get endToken => semicolon;
+ /**
+ * Return the token representing the 'assert' keyword.
+ */
+ @deprecated // Use "this.assertKeyword"
+ Token get keyword => assertKeyword;
+
+ /**
+ * Set the token representing the 'assert' keyword to the given [token].
+ */
+ @deprecated // Use "this.assertKeyword"
+ set keyword(Token token) {
+ assertKeyword = token;
+ }
+
@override
accept(AstVisitor visitor) => visitor.visitAssertStatement(this);
@@ -725,8 +772,8 @@
/**
* Initialize a newly created assignment expression.
*/
- AssignmentExpression(Expression leftHandSide, this.operator,
- Expression rightHandSide) {
+ AssignmentExpression(
+ Expression leftHandSide, this.operator, Expression rightHandSide) {
if (leftHandSide == null || rightHandSide == null) {
String message;
if (leftHandSide == null) {
@@ -739,11 +786,10 @@
message = "The right-hand size is null";
}
AnalysisEngine.instance.logger.logError(
- message,
- new CaughtException(new AnalysisException(message), null));
+ message, new CaughtException(new AnalysisException(message), null));
}
- _leftHandSide = becomeParentOf(leftHandSide);
- _rightHandSide = becomeParentOf(rightHandSide);
+ _leftHandSide = _becomeParentOf(leftHandSide);
+ _rightHandSide = _becomeParentOf(rightHandSide);
}
@override
@@ -766,9 +812,9 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(_leftHandSide)
- ..add(operator)
- ..add(_rightHandSide);
+ ..add(_leftHandSide)
+ ..add(operator)
+ ..add(_rightHandSide);
@override
Token get endToken => _rightHandSide.endToken;
@@ -783,7 +829,7 @@
* Return the expression used to compute the left hand side.
*/
void set leftHandSide(Expression expression) {
- _leftHandSide = becomeParentOf(expression);
+ _leftHandSide = _becomeParentOf(expression);
}
@override
@@ -794,11 +840,43 @@
* known based on propagated type information, then return the parameter
* element representing the parameter to which the value of the right operand
* will be bound. Otherwise, return `null`.
- *
- * This method is only intended to be used by
- * [Expression.propagatedParameterElement].
*/
+ @deprecated // Use "expression.propagatedParameterElement"
ParameterElement get propagatedParameterElementForRightHandSide {
+ return _propagatedParameterElementForRightHandSide;
+ }
+
+ /**
+ * Return the expression used to compute the right hand side.
+ */
+ Expression get rightHandSide => _rightHandSide;
+
+ /**
+ * Set the expression used to compute the left hand side to the given
+ * [expression].
+ */
+ void set rightHandSide(Expression expression) {
+ _rightHandSide = _becomeParentOf(expression);
+ }
+
+ /**
+ * If the AST structure has been resolved, and the function being invoked is
+ * known based on static type information, then return the parameter element
+ * representing the parameter to which the value of the right operand will be
+ * bound. Otherwise, return `null`.
+ */
+ @deprecated // Use "expression.propagatedParameterElement"
+ ParameterElement get staticParameterElementForRightHandSide {
+ return _staticParameterElementForRightHandSide;
+ }
+
+ /**
+ * If the AST structure has been resolved, and the function being invoked is
+ * known based on propagated type information, then return the parameter
+ * element representing the parameter to which the value of the right operand
+ * will be bound. Otherwise, return `null`.
+ */
+ ParameterElement get _propagatedParameterElementForRightHandSide {
ExecutableElement executableElement = null;
if (propagatedElement != null) {
executableElement = propagatedElement;
@@ -830,28 +908,12 @@
}
/**
- * Return the expression used to compute the right hand side.
- */
- Expression get rightHandSide => _rightHandSide;
-
- /**
- * Set the expression used to compute the left hand side to the given
- * [expression].
- */
- void set rightHandSide(Expression expression) {
- _rightHandSide = becomeParentOf(expression);
- }
-
- /**
* If the AST structure has been resolved, and the function being invoked is
* known based on static type information, then return the parameter element
* representing the parameter to which the value of the right operand will be
* bound. Otherwise, return `null`.
- *
- * This method is only intended to be used by
- * [Expression.staticParameterElement].
*/
- ParameterElement get staticParameterElementForRightHandSide {
+ ParameterElement get _staticParameterElementForRightHandSide {
ExecutableElement executableElement = null;
if (staticElement != null) {
executableElement = staticElement;
@@ -906,8 +968,8 @@
* Initialize a newly created AST cloner to optionally clone tokens while
* cloning AST nodes if [cloneTokens] is `true`.
*/
- // TODO(brianwilkerson) Change this to be a named parameter.
- AstCloner([this.cloneTokens = false]);
+ AstCloner(
+ [this.cloneTokens = false]); // TODO(brianwilkerson) Change this to be a named parameter.
/**
* Return a clone of the given [node].
@@ -958,139 +1020,99 @@
new AdjacentStrings(cloneNodeList(node.strings));
@override
- Annotation visitAnnotation(Annotation node) =>
- new Annotation(
- cloneToken(node.atSign),
- cloneNode(node.name),
- cloneToken(node.period),
- cloneNode(node.constructorName),
- cloneNode(node.arguments));
+ Annotation visitAnnotation(Annotation node) => new Annotation(
+ cloneToken(node.atSign), cloneNode(node.name), cloneToken(node.period),
+ cloneNode(node.constructorName), cloneNode(node.arguments));
@override
- ArgumentList visitArgumentList(ArgumentList node) =>
- new ArgumentList(
- cloneToken(node.leftParenthesis),
- cloneNodeList(node.arguments),
- cloneToken(node.rightParenthesis));
+ ArgumentList visitArgumentList(ArgumentList node) => new ArgumentList(
+ cloneToken(node.leftParenthesis), cloneNodeList(node.arguments),
+ cloneToken(node.rightParenthesis));
@override
- AsExpression visitAsExpression(AsExpression node) =>
- new AsExpression(
- cloneNode(node.expression),
- cloneToken(node.asOperator),
- cloneNode(node.type));
+ AsExpression visitAsExpression(AsExpression node) => new AsExpression(
+ cloneNode(node.expression), cloneToken(node.asOperator),
+ cloneNode(node.type));
@override
- AstNode visitAssertStatement(AssertStatement node) =>
- new AssertStatement(
- cloneToken(node.keyword),
- cloneToken(node.leftParenthesis),
- cloneNode(node.condition),
- cloneToken(node.rightParenthesis),
- cloneToken(node.semicolon));
+ AstNode visitAssertStatement(AssertStatement node) => new AssertStatement(
+ cloneToken(node.assertKeyword), cloneToken(node.leftParenthesis),
+ cloneNode(node.condition), cloneToken(node.rightParenthesis),
+ cloneToken(node.semicolon));
@override
AssignmentExpression visitAssignmentExpression(AssignmentExpression node) =>
- new AssignmentExpression(
- cloneNode(node.leftHandSide),
- cloneToken(node.operator),
- cloneNode(node.rightHandSide));
+ new AssignmentExpression(cloneNode(node.leftHandSide),
+ cloneToken(node.operator), cloneNode(node.rightHandSide));
@override
AwaitExpression visitAwaitExpression(AwaitExpression node) =>
- new AwaitExpression(cloneToken(node.awaitKeyword), cloneNode(node.expression));
+ new AwaitExpression(
+ cloneToken(node.awaitKeyword), cloneNode(node.expression));
@override
BinaryExpression visitBinaryExpression(BinaryExpression node) =>
- new BinaryExpression(
- cloneNode(node.leftOperand),
- cloneToken(node.operator),
- cloneNode(node.rightOperand));
+ new BinaryExpression(cloneNode(node.leftOperand),
+ cloneToken(node.operator), cloneNode(node.rightOperand));
@override
- Block visitBlock(Block node) =>
- new Block(
- cloneToken(node.leftBracket),
- cloneNodeList(node.statements),
- cloneToken(node.rightBracket));
+ Block visitBlock(Block node) => new Block(cloneToken(node.leftBracket),
+ cloneNodeList(node.statements), cloneToken(node.rightBracket));
@override
- BlockFunctionBody visitBlockFunctionBody(BlockFunctionBody node) =>
- new BlockFunctionBody(
- cloneToken(node.keyword),
- cloneToken(node.star),
- cloneNode(node.block));
+ BlockFunctionBody visitBlockFunctionBody(
+ BlockFunctionBody node) => new BlockFunctionBody(
+ cloneToken(node.keyword), cloneToken(node.star), cloneNode(node.block));
@override
BooleanLiteral visitBooleanLiteral(BooleanLiteral node) =>
new BooleanLiteral(cloneToken(node.literal), node.value);
@override
- BreakStatement visitBreakStatement(BreakStatement node) =>
- new BreakStatement(
- cloneToken(node.keyword),
- cloneNode(node.label),
- cloneToken(node.semicolon));
+ BreakStatement visitBreakStatement(BreakStatement node) => new BreakStatement(
+ cloneToken(node.breakKeyword), cloneNode(node.label),
+ cloneToken(node.semicolon));
@override
CascadeExpression visitCascadeExpression(CascadeExpression node) =>
new CascadeExpression(
- cloneNode(node.target),
- cloneNodeList(node.cascadeSections));
+ cloneNode(node.target), cloneNodeList(node.cascadeSections));
@override
- CatchClause visitCatchClause(CatchClause node) =>
- new CatchClause(
- cloneToken(node.onKeyword),
- cloneNode(node.exceptionType),
- cloneToken(node.catchKeyword),
- cloneToken(node.leftParenthesis),
- cloneNode(node.exceptionParameter),
- cloneToken(node.comma),
- cloneNode(node.stackTraceParameter),
- cloneToken(node.rightParenthesis),
- cloneNode(node.body));
+ CatchClause visitCatchClause(CatchClause node) => new CatchClause(
+ cloneToken(node.onKeyword), cloneNode(node.exceptionType),
+ cloneToken(node.catchKeyword), cloneToken(node.leftParenthesis),
+ cloneNode(node.exceptionParameter), cloneToken(node.comma),
+ cloneNode(node.stackTraceParameter), cloneToken(node.rightParenthesis),
+ cloneNode(node.body));
@override
ClassDeclaration visitClassDeclaration(ClassDeclaration node) {
ClassDeclaration copy = new ClassDeclaration(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.abstractKeyword),
- cloneToken(node.classKeyword),
- cloneNode(node.name),
- cloneNode(node.typeParameters),
- cloneNode(node.extendsClause),
- cloneNode(node.withClause),
- cloneNode(node.implementsClause),
- cloneToken(node.leftBracket),
- cloneNodeList(node.members),
- cloneToken(node.rightBracket));
+ cloneNode(node.documentationComment), cloneNodeList(node.metadata),
+ cloneToken(node.abstractKeyword), cloneToken(node.classKeyword),
+ cloneNode(node.name), cloneNode(node.typeParameters),
+ cloneNode(node.extendsClause), cloneNode(node.withClause),
+ cloneNode(node.implementsClause), cloneToken(node.leftBracket),
+ cloneNodeList(node.members), cloneToken(node.rightBracket));
copy.nativeClause = cloneNode(node.nativeClause);
return copy;
}
@override
- ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) =>
- new ClassTypeAlias(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.keyword),
- cloneNode(node.name),
- cloneNode(node.typeParameters),
- cloneToken(node.equals),
- cloneToken(node.abstractKeyword),
- cloneNode(node.superclass),
- cloneNode(node.withClause),
- cloneNode(node.implementsClause),
- cloneToken(node.semicolon));
+ ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) => new ClassTypeAlias(
+ cloneNode(node.documentationComment), cloneNodeList(node.metadata),
+ cloneToken(node.typedefKeyword), cloneNode(node.name),
+ cloneNode(node.typeParameters), cloneToken(node.equals),
+ cloneToken(node.abstractKeyword), cloneNode(node.superclass),
+ cloneNode(node.withClause), cloneNode(node.implementsClause),
+ cloneToken(node.semicolon));
@override
Comment visitComment(Comment node) {
if (node.isDocumentation) {
return Comment.createDocumentationCommentWithReferences(
- cloneTokenList(node.tokens),
- cloneNodeList(node.references));
+ cloneTokenList(node.tokens), cloneNodeList(node.references));
} else if (node.isBlock) {
return Comment.createBlockComment(cloneTokenList(node.tokens));
}
@@ -1099,100 +1121,70 @@
@override
CommentReference visitCommentReference(CommentReference node) =>
- new CommentReference(cloneToken(node.newKeyword), cloneNode(node.identifier));
+ new CommentReference(
+ cloneToken(node.newKeyword), cloneNode(node.identifier));
@override
CompilationUnit visitCompilationUnit(CompilationUnit node) {
- CompilationUnit clone = new CompilationUnit(
- cloneToken(node.beginToken),
- cloneNode(node.scriptTag),
- cloneNodeList(node.directives),
- cloneNodeList(node.declarations),
- cloneToken(node.endToken));
+ CompilationUnit clone = new CompilationUnit(cloneToken(node.beginToken),
+ cloneNode(node.scriptTag), cloneNodeList(node.directives),
+ cloneNodeList(node.declarations), cloneToken(node.endToken));
clone.lineInfo = node.lineInfo;
return clone;
}
@override
- ConditionalExpression
- visitConditionalExpression(ConditionalExpression node) =>
- new ConditionalExpression(
- cloneNode(node.condition),
- cloneToken(node.question),
- cloneNode(node.thenExpression),
- cloneToken(node.colon),
- cloneNode(node.elseExpression));
+ ConditionalExpression visitConditionalExpression(
+ ConditionalExpression node) => new ConditionalExpression(
+ cloneNode(node.condition), cloneToken(node.question),
+ cloneNode(node.thenExpression), cloneToken(node.colon),
+ cloneNode(node.elseExpression));
@override
- ConstructorDeclaration
- visitConstructorDeclaration(ConstructorDeclaration node) =>
- new ConstructorDeclaration(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.externalKeyword),
- cloneToken(node.constKeyword),
- cloneToken(node.factoryKeyword),
- cloneNode(node.returnType),
- cloneToken(node.period),
- cloneNode(node.name),
- cloneNode(node.parameters),
- cloneToken(node.separator),
- cloneNodeList(node.initializers),
- cloneNode(node.redirectedConstructor),
- cloneNode(node.body));
+ ConstructorDeclaration visitConstructorDeclaration(
+ ConstructorDeclaration node) => new ConstructorDeclaration(
+ cloneNode(node.documentationComment), cloneNodeList(node.metadata),
+ cloneToken(node.externalKeyword), cloneToken(node.constKeyword),
+ cloneToken(node.factoryKeyword), cloneNode(node.returnType),
+ cloneToken(node.period), cloneNode(node.name), cloneNode(node.parameters),
+ cloneToken(node.separator), cloneNodeList(node.initializers),
+ cloneNode(node.redirectedConstructor), cloneNode(node.body));
@override
- ConstructorFieldInitializer
- visitConstructorFieldInitializer(ConstructorFieldInitializer node) =>
- new ConstructorFieldInitializer(
- cloneToken(node.keyword),
- cloneToken(node.period),
- cloneNode(node.fieldName),
- cloneToken(node.equals),
- cloneNode(node.expression));
+ ConstructorFieldInitializer visitConstructorFieldInitializer(
+ ConstructorFieldInitializer node) => new ConstructorFieldInitializer(
+ cloneToken(node.thisKeyword), cloneToken(node.period),
+ cloneNode(node.fieldName), cloneToken(node.equals),
+ cloneNode(node.expression));
@override
ConstructorName visitConstructorName(ConstructorName node) =>
new ConstructorName(
- cloneNode(node.type),
- cloneToken(node.period),
- cloneNode(node.name));
+ cloneNode(node.type), cloneToken(node.period), cloneNode(node.name));
@override
ContinueStatement visitContinueStatement(ContinueStatement node) =>
- new ContinueStatement(
- cloneToken(node.keyword),
- cloneNode(node.label),
- cloneToken(node.semicolon));
+ new ContinueStatement(cloneToken(node.continueKeyword),
+ cloneNode(node.label), cloneToken(node.semicolon));
@override
DeclaredIdentifier visitDeclaredIdentifier(DeclaredIdentifier node) =>
- new DeclaredIdentifier(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.keyword),
- cloneNode(node.type),
- cloneNode(node.identifier));
+ new DeclaredIdentifier(cloneNode(node.documentationComment),
+ cloneNodeList(node.metadata), cloneToken(node.keyword),
+ cloneNode(node.type), cloneNode(node.identifier));
@override
- DefaultFormalParameter
- visitDefaultFormalParameter(DefaultFormalParameter node) =>
- new DefaultFormalParameter(
- cloneNode(node.parameter),
- node.kind,
- cloneToken(node.separator),
- cloneNode(node.defaultValue));
+ DefaultFormalParameter visitDefaultFormalParameter(
+ DefaultFormalParameter node) => new DefaultFormalParameter(
+ cloneNode(node.parameter), node.kind, cloneToken(node.separator),
+ cloneNode(node.defaultValue));
@override
- DoStatement visitDoStatement(DoStatement node) =>
- new DoStatement(
- cloneToken(node.doKeyword),
- cloneNode(node.body),
- cloneToken(node.whileKeyword),
- cloneToken(node.leftParenthesis),
- cloneNode(node.condition),
- cloneToken(node.rightParenthesis),
- cloneToken(node.semicolon));
+ DoStatement visitDoStatement(DoStatement node) => new DoStatement(
+ cloneToken(node.doKeyword), cloneNode(node.body),
+ cloneToken(node.whileKeyword), cloneToken(node.leftParenthesis),
+ cloneNode(node.condition), cloneToken(node.rightParenthesis),
+ cloneToken(node.semicolon));
@override
DoubleLiteral visitDoubleLiteral(DoubleLiteral node) =>
@@ -1208,136 +1200,97 @@
@override
AstNode visitEnumConstantDeclaration(EnumConstantDeclaration node) =>
- new EnumConstantDeclaration(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneNode(node.name));
+ new EnumConstantDeclaration(cloneNode(node.documentationComment),
+ cloneNodeList(node.metadata), cloneNode(node.name));
@override
EnumDeclaration visitEnumDeclaration(EnumDeclaration node) =>
- new EnumDeclaration(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.keyword),
- cloneNode(node.name),
- cloneToken(node.leftBracket),
- cloneNodeList(node.constants),
- cloneToken(node.rightBracket));
+ new EnumDeclaration(cloneNode(node.documentationComment),
+ cloneNodeList(node.metadata), cloneToken(node.enumKeyword),
+ cloneNode(node.name), cloneToken(node.leftBracket),
+ cloneNodeList(node.constants), cloneToken(node.rightBracket));
@override
ExportDirective visitExportDirective(ExportDirective node) {
ExportDirective directive = new ExportDirective(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.keyword),
- cloneNode(node.uri),
- cloneNodeList(node.combinators),
- cloneToken(node.semicolon));
+ cloneNode(node.documentationComment), cloneNodeList(node.metadata),
+ cloneToken(node.keyword), cloneNode(node.uri),
+ cloneNodeList(node.combinators), cloneToken(node.semicolon));
directive.source = node.source;
directive.uriContent = node.uriContent;
return directive;
}
@override
- ExpressionFunctionBody
- visitExpressionFunctionBody(ExpressionFunctionBody node) =>
- new ExpressionFunctionBody(
- cloneToken(node.keyword),
- cloneToken(node.functionDefinition),
- cloneNode(node.expression),
- cloneToken(node.semicolon));
+ ExpressionFunctionBody visitExpressionFunctionBody(
+ ExpressionFunctionBody node) => new ExpressionFunctionBody(
+ cloneToken(node.keyword), cloneToken(node.functionDefinition),
+ cloneNode(node.expression), cloneToken(node.semicolon));
@override
ExpressionStatement visitExpressionStatement(ExpressionStatement node) =>
- new ExpressionStatement(cloneNode(node.expression), cloneToken(node.semicolon));
+ new ExpressionStatement(
+ cloneNode(node.expression), cloneToken(node.semicolon));
@override
- ExtendsClause visitExtendsClause(ExtendsClause node) =>
- new ExtendsClause(cloneToken(node.keyword), cloneNode(node.superclass));
+ ExtendsClause visitExtendsClause(ExtendsClause node) => new ExtendsClause(
+ cloneToken(node.extendsKeyword), cloneNode(node.superclass));
@override
FieldDeclaration visitFieldDeclaration(FieldDeclaration node) =>
- new FieldDeclaration(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.staticKeyword),
- cloneNode(node.fields),
- cloneToken(node.semicolon));
+ new FieldDeclaration(cloneNode(node.documentationComment),
+ cloneNodeList(node.metadata), cloneToken(node.staticKeyword),
+ cloneNode(node.fields), cloneToken(node.semicolon));
@override
FieldFormalParameter visitFieldFormalParameter(FieldFormalParameter node) =>
- new FieldFormalParameter(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.keyword),
- cloneNode(node.type),
- cloneToken(node.thisToken),
- cloneToken(node.period),
- cloneNode(node.identifier),
+ new FieldFormalParameter(cloneNode(node.documentationComment),
+ cloneNodeList(node.metadata), cloneToken(node.keyword),
+ cloneNode(node.type), cloneToken(node.thisKeyword),
+ cloneToken(node.period), cloneNode(node.identifier),
cloneNode(node.parameters));
@override
ForEachStatement visitForEachStatement(ForEachStatement node) {
DeclaredIdentifier loopVariable = node.loopVariable;
if (loopVariable == null) {
- return new ForEachStatement.con2(
- cloneToken(node.awaitKeyword),
- cloneToken(node.forKeyword),
- cloneToken(node.leftParenthesis),
- cloneNode(node.identifier),
- cloneToken(node.inKeyword),
- cloneNode(node.iterable),
- cloneToken(node.rightParenthesis),
+ return new ForEachStatement.con2(cloneToken(node.awaitKeyword),
+ cloneToken(node.forKeyword), cloneToken(node.leftParenthesis),
+ cloneNode(node.identifier), cloneToken(node.inKeyword),
+ cloneNode(node.iterable), cloneToken(node.rightParenthesis),
cloneNode(node.body));
}
- return new ForEachStatement.con1(
- cloneToken(node.awaitKeyword),
- cloneToken(node.forKeyword),
- cloneToken(node.leftParenthesis),
- cloneNode(loopVariable),
- cloneToken(node.inKeyword),
- cloneNode(node.iterable),
- cloneToken(node.rightParenthesis),
+ return new ForEachStatement.con1(cloneToken(node.awaitKeyword),
+ cloneToken(node.forKeyword), cloneToken(node.leftParenthesis),
+ cloneNode(loopVariable), cloneToken(node.inKeyword),
+ cloneNode(node.iterable), cloneToken(node.rightParenthesis),
cloneNode(node.body));
}
@override
FormalParameterList visitFormalParameterList(FormalParameterList node) =>
- new FormalParameterList(
- cloneToken(node.leftParenthesis),
- cloneNodeList(node.parameters),
- cloneToken(node.leftDelimiter),
- cloneToken(node.rightDelimiter),
- cloneToken(node.rightParenthesis));
+ new FormalParameterList(cloneToken(node.leftParenthesis),
+ cloneNodeList(node.parameters), cloneToken(node.leftDelimiter),
+ cloneToken(node.rightDelimiter), cloneToken(node.rightParenthesis));
@override
- ForStatement visitForStatement(ForStatement node) =>
- new ForStatement(
- cloneToken(node.forKeyword),
- cloneToken(node.leftParenthesis),
- cloneNode(node.variables),
- cloneNode(node.initialization),
- cloneToken(node.leftSeparator),
- cloneNode(node.condition),
- cloneToken(node.rightSeparator),
- cloneNodeList(node.updaters),
- cloneToken(node.rightParenthesis),
- cloneNode(node.body));
+ ForStatement visitForStatement(ForStatement node) => new ForStatement(
+ cloneToken(node.forKeyword), cloneToken(node.leftParenthesis),
+ cloneNode(node.variables), cloneNode(node.initialization),
+ cloneToken(node.leftSeparator), cloneNode(node.condition),
+ cloneToken(node.rightSeparator), cloneNodeList(node.updaters),
+ cloneToken(node.rightParenthesis), cloneNode(node.body));
@override
FunctionDeclaration visitFunctionDeclaration(FunctionDeclaration node) =>
- new FunctionDeclaration(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.externalKeyword),
- cloneNode(node.returnType),
- cloneToken(node.propertyKeyword),
- cloneNode(node.name),
- cloneNode(node.functionExpression));
+ new FunctionDeclaration(cloneNode(node.documentationComment),
+ cloneNodeList(node.metadata), cloneToken(node.externalKeyword),
+ cloneNode(node.returnType), cloneToken(node.propertyKeyword),
+ cloneNode(node.name), cloneNode(node.functionExpression));
@override
- FunctionDeclarationStatement
- visitFunctionDeclarationStatement(FunctionDeclarationStatement node) =>
+ FunctionDeclarationStatement visitFunctionDeclarationStatement(
+ FunctionDeclarationStatement node) =>
new FunctionDeclarationStatement(cloneNode(node.functionDeclaration));
@override
@@ -1345,64 +1298,48 @@
new FunctionExpression(cloneNode(node.parameters), cloneNode(node.body));
@override
- FunctionExpressionInvocation
- visitFunctionExpressionInvocation(FunctionExpressionInvocation node) =>
- new FunctionExpressionInvocation(
- cloneNode(node.function),
- cloneNode(node.argumentList));
+ FunctionExpressionInvocation visitFunctionExpressionInvocation(
+ FunctionExpressionInvocation node) => new FunctionExpressionInvocation(
+ cloneNode(node.function), cloneNode(node.argumentList));
@override
FunctionTypeAlias visitFunctionTypeAlias(FunctionTypeAlias node) =>
- new FunctionTypeAlias(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.keyword),
- cloneNode(node.returnType),
- cloneNode(node.name),
- cloneNode(node.typeParameters),
- cloneNode(node.parameters),
+ new FunctionTypeAlias(cloneNode(node.documentationComment),
+ cloneNodeList(node.metadata), cloneToken(node.typedefKeyword),
+ cloneNode(node.returnType), cloneNode(node.name),
+ cloneNode(node.typeParameters), cloneNode(node.parameters),
cloneToken(node.semicolon));
@override
- FunctionTypedFormalParameter
- visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) =>
- new FunctionTypedFormalParameter(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneNode(node.returnType),
- cloneNode(node.identifier),
- cloneNode(node.parameters));
+ FunctionTypedFormalParameter visitFunctionTypedFormalParameter(
+ FunctionTypedFormalParameter node) => new FunctionTypedFormalParameter(
+ cloneNode(node.documentationComment), cloneNodeList(node.metadata),
+ cloneNode(node.returnType), cloneNode(node.identifier),
+ cloneNode(node.parameters));
@override
- HideCombinator visitHideCombinator(HideCombinator node) =>
- new HideCombinator(cloneToken(node.keyword), cloneNodeList(node.hiddenNames));
+ HideCombinator visitHideCombinator(HideCombinator node) => new HideCombinator(
+ cloneToken(node.keyword), cloneNodeList(node.hiddenNames));
@override
- IfStatement visitIfStatement(IfStatement node) =>
- new IfStatement(
- cloneToken(node.ifKeyword),
- cloneToken(node.leftParenthesis),
- cloneNode(node.condition),
- cloneToken(node.rightParenthesis),
- cloneNode(node.thenStatement),
- cloneToken(node.elseKeyword),
- cloneNode(node.elseStatement));
+ IfStatement visitIfStatement(IfStatement node) => new IfStatement(
+ cloneToken(node.ifKeyword), cloneToken(node.leftParenthesis),
+ cloneNode(node.condition), cloneToken(node.rightParenthesis),
+ cloneNode(node.thenStatement), cloneToken(node.elseKeyword),
+ cloneNode(node.elseStatement));
@override
ImplementsClause visitImplementsClause(ImplementsClause node) =>
- new ImplementsClause(cloneToken(node.keyword), cloneNodeList(node.interfaces));
+ new ImplementsClause(
+ cloneToken(node.implementsKeyword), cloneNodeList(node.interfaces));
@override
ImportDirective visitImportDirective(ImportDirective node) {
ImportDirective directive = new ImportDirective(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.keyword),
- cloneNode(node.uri),
- cloneToken(node.deferredToken),
- cloneToken(node.asToken),
- cloneNode(node.prefix),
- cloneNodeList(node.combinators),
+ cloneNode(node.documentationComment), cloneNodeList(node.metadata),
+ cloneToken(node.keyword), cloneNode(node.uri),
+ cloneToken(node.deferredKeyword), cloneToken(node.asKeyword),
+ cloneNode(node.prefix), cloneNodeList(node.combinators),
cloneToken(node.semicolon));
directive.source = node.source;
directive.uriContent = node.uriContent;
@@ -1413,51 +1350,40 @@
IndexExpression visitIndexExpression(IndexExpression node) {
Token period = node.period;
if (period == null) {
- return new IndexExpression.forTarget(
- cloneNode(node.target),
- cloneToken(node.leftBracket),
- cloneNode(node.index),
+ return new IndexExpression.forTarget(cloneNode(node.target),
+ cloneToken(node.leftBracket), cloneNode(node.index),
cloneToken(node.rightBracket));
} else {
- return new IndexExpression.forCascade(
- cloneToken(period),
- cloneToken(node.leftBracket),
- cloneNode(node.index),
+ return new IndexExpression.forCascade(cloneToken(period),
+ cloneToken(node.leftBracket), cloneNode(node.index),
cloneToken(node.rightBracket));
}
}
@override
- InstanceCreationExpression
- visitInstanceCreationExpression(InstanceCreationExpression node) =>
- new InstanceCreationExpression(
- cloneToken(node.keyword),
- cloneNode(node.constructorName),
- cloneNode(node.argumentList));
+ InstanceCreationExpression visitInstanceCreationExpression(
+ InstanceCreationExpression node) => new InstanceCreationExpression(
+ cloneToken(node.keyword), cloneNode(node.constructorName),
+ cloneNode(node.argumentList));
@override
IntegerLiteral visitIntegerLiteral(IntegerLiteral node) =>
new IntegerLiteral(cloneToken(node.literal), node.value);
@override
- InterpolationExpression
- visitInterpolationExpression(InterpolationExpression node) =>
- new InterpolationExpression(
- cloneToken(node.leftBracket),
- cloneNode(node.expression),
- cloneToken(node.rightBracket));
+ InterpolationExpression visitInterpolationExpression(
+ InterpolationExpression node) => new InterpolationExpression(
+ cloneToken(node.leftBracket), cloneNode(node.expression),
+ cloneToken(node.rightBracket));
@override
InterpolationString visitInterpolationString(InterpolationString node) =>
new InterpolationString(cloneToken(node.contents), node.value);
@override
- IsExpression visitIsExpression(IsExpression node) =>
- new IsExpression(
- cloneNode(node.expression),
- cloneToken(node.isOperator),
- cloneToken(node.notOperator),
- cloneNode(node.type));
+ IsExpression visitIsExpression(IsExpression node) => new IsExpression(
+ cloneNode(node.expression), cloneToken(node.isOperator),
+ cloneToken(node.notOperator), cloneNode(node.type));
@override
Label visitLabel(Label node) =>
@@ -1465,67 +1391,49 @@
@override
LabeledStatement visitLabeledStatement(LabeledStatement node) =>
- new LabeledStatement(cloneNodeList(node.labels), cloneNode(node.statement));
+ new LabeledStatement(
+ cloneNodeList(node.labels), cloneNode(node.statement));
@override
LibraryDirective visitLibraryDirective(LibraryDirective node) =>
- new LibraryDirective(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.libraryToken),
- cloneNode(node.name),
- cloneToken(node.semicolon));
+ new LibraryDirective(cloneNode(node.documentationComment),
+ cloneNodeList(node.metadata), cloneToken(node.libraryKeyword),
+ cloneNode(node.name), cloneToken(node.semicolon));
@override
LibraryIdentifier visitLibraryIdentifier(LibraryIdentifier node) =>
new LibraryIdentifier(cloneNodeList(node.components));
@override
- ListLiteral visitListLiteral(ListLiteral node) =>
- new ListLiteral(
- cloneToken(node.constKeyword),
- cloneNode(node.typeArguments),
- cloneToken(node.leftBracket),
- cloneNodeList(node.elements),
- cloneToken(node.rightBracket));
+ ListLiteral visitListLiteral(ListLiteral node) => new ListLiteral(
+ cloneToken(node.constKeyword), cloneNode(node.typeArguments),
+ cloneToken(node.leftBracket), cloneNodeList(node.elements),
+ cloneToken(node.rightBracket));
@override
- MapLiteral visitMapLiteral(MapLiteral node) =>
- new MapLiteral(
- cloneToken(node.constKeyword),
- cloneNode(node.typeArguments),
- cloneToken(node.leftBracket),
- cloneNodeList(node.entries),
- cloneToken(node.rightBracket));
+ MapLiteral visitMapLiteral(MapLiteral node) => new MapLiteral(
+ cloneToken(node.constKeyword), cloneNode(node.typeArguments),
+ cloneToken(node.leftBracket), cloneNodeList(node.entries),
+ cloneToken(node.rightBracket));
@override
- MapLiteralEntry visitMapLiteralEntry(MapLiteralEntry node) =>
- new MapLiteralEntry(
- cloneNode(node.key),
- cloneToken(node.separator),
- cloneNode(node.value));
+ MapLiteralEntry visitMapLiteralEntry(
+ MapLiteralEntry node) => new MapLiteralEntry(
+ cloneNode(node.key), cloneToken(node.separator), cloneNode(node.value));
@override
MethodDeclaration visitMethodDeclaration(MethodDeclaration node) =>
- new MethodDeclaration(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.externalKeyword),
- cloneToken(node.modifierKeyword),
- cloneNode(node.returnType),
- cloneToken(node.propertyKeyword),
- cloneToken(node.operatorKeyword),
- cloneNode(node.name),
- cloneNode(node.parameters),
+ new MethodDeclaration(cloneNode(node.documentationComment),
+ cloneNodeList(node.metadata), cloneToken(node.externalKeyword),
+ cloneToken(node.modifierKeyword), cloneNode(node.returnType),
+ cloneToken(node.propertyKeyword), cloneToken(node.operatorKeyword),
+ cloneNode(node.name), cloneNode(node.parameters),
cloneNode(node.body));
@override
MethodInvocation visitMethodInvocation(MethodInvocation node) =>
- new MethodInvocation(
- cloneNode(node.target),
- cloneToken(node.period),
- cloneNode(node.methodName),
- cloneNode(node.argumentList));
+ new MethodInvocation(cloneNode(node.target), cloneToken(node.period),
+ cloneNode(node.methodName), cloneNode(node.argumentList));
@override
NamedExpression visitNamedExpression(NamedExpression node) =>
@@ -1533,34 +1441,28 @@
@override
AstNode visitNativeClause(NativeClause node) =>
- new NativeClause(cloneToken(node.keyword), cloneNode(node.name));
+ new NativeClause(cloneToken(node.nativeKeyword), cloneNode(node.name));
@override
NativeFunctionBody visitNativeFunctionBody(NativeFunctionBody node) =>
- new NativeFunctionBody(
- cloneToken(node.nativeToken),
- cloneNode(node.stringLiteral),
- cloneToken(node.semicolon));
+ new NativeFunctionBody(cloneToken(node.nativeKeyword),
+ cloneNode(node.stringLiteral), cloneToken(node.semicolon));
@override
NullLiteral visitNullLiteral(NullLiteral node) =>
new NullLiteral(cloneToken(node.literal));
@override
- ParenthesizedExpression
- visitParenthesizedExpression(ParenthesizedExpression node) =>
- new ParenthesizedExpression(
- cloneToken(node.leftParenthesis),
- cloneNode(node.expression),
- cloneToken(node.rightParenthesis));
+ ParenthesizedExpression visitParenthesizedExpression(
+ ParenthesizedExpression node) => new ParenthesizedExpression(
+ cloneToken(node.leftParenthesis), cloneNode(node.expression),
+ cloneToken(node.rightParenthesis));
@override
PartDirective visitPartDirective(PartDirective node) {
PartDirective directive = new PartDirective(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.partToken),
- cloneNode(node.uri),
+ cloneNode(node.documentationComment), cloneNodeList(node.metadata),
+ cloneToken(node.partKeyword), cloneNode(node.uri),
cloneToken(node.semicolon));
directive.source = node.source;
directive.uriContent = node.uriContent;
@@ -1569,12 +1471,9 @@
@override
PartOfDirective visitPartOfDirective(PartOfDirective node) =>
- new PartOfDirective(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.partToken),
- cloneToken(node.ofToken),
- cloneNode(node.libraryName),
+ new PartOfDirective(cloneNode(node.documentationComment),
+ cloneNodeList(node.metadata), cloneToken(node.partKeyword),
+ cloneToken(node.ofKeyword), cloneNode(node.libraryName),
cloneToken(node.semicolon));
@override
@@ -1583,9 +1482,7 @@
@override
PrefixedIdentifier visitPrefixedIdentifier(PrefixedIdentifier node) =>
- new PrefixedIdentifier(
- cloneNode(node.prefix),
- cloneToken(node.period),
+ new PrefixedIdentifier(cloneNode(node.prefix), cloneToken(node.period),
cloneNode(node.identifier));
@override
@@ -1593,49 +1490,40 @@
new PrefixExpression(cloneToken(node.operator), cloneNode(node.operand));
@override
- PropertyAccess visitPropertyAccess(PropertyAccess node) =>
- new PropertyAccess(
- cloneNode(node.target),
- cloneToken(node.operator),
- cloneNode(node.propertyName));
+ PropertyAccess visitPropertyAccess(PropertyAccess node) => new PropertyAccess(
+ cloneNode(node.target), cloneToken(node.operator),
+ cloneNode(node.propertyName));
@override
- RedirectingConstructorInvocation
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) =>
- new RedirectingConstructorInvocation(
- cloneToken(node.keyword),
- cloneToken(node.period),
- cloneNode(node.constructorName),
+ RedirectingConstructorInvocation visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) =>
+ new RedirectingConstructorInvocation(cloneToken(node.thisKeyword),
+ cloneToken(node.period), cloneNode(node.constructorName),
cloneNode(node.argumentList));
@override
RethrowExpression visitRethrowExpression(RethrowExpression node) =>
- new RethrowExpression(cloneToken(node.keyword));
+ new RethrowExpression(cloneToken(node.rethrowKeyword));
@override
ReturnStatement visitReturnStatement(ReturnStatement node) =>
- new ReturnStatement(
- cloneToken(node.keyword),
- cloneNode(node.expression),
- cloneToken(node.semicolon));
+ new ReturnStatement(cloneToken(node.returnKeyword),
+ cloneNode(node.expression), cloneToken(node.semicolon));
@override
ScriptTag visitScriptTag(ScriptTag node) =>
new ScriptTag(cloneToken(node.scriptTag));
@override
- ShowCombinator visitShowCombinator(ShowCombinator node) =>
- new ShowCombinator(cloneToken(node.keyword), cloneNodeList(node.shownNames));
+ ShowCombinator visitShowCombinator(ShowCombinator node) => new ShowCombinator(
+ cloneToken(node.keyword), cloneNodeList(node.shownNames));
@override
- SimpleFormalParameter
- visitSimpleFormalParameter(SimpleFormalParameter node) =>
- new SimpleFormalParameter(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneToken(node.keyword),
- cloneNode(node.type),
- cloneNode(node.identifier));
+ SimpleFormalParameter visitSimpleFormalParameter(
+ SimpleFormalParameter node) => new SimpleFormalParameter(
+ cloneNode(node.documentationComment), cloneNodeList(node.metadata),
+ cloneToken(node.keyword), cloneNode(node.type),
+ cloneNode(node.identifier));
@override
SimpleIdentifier visitSimpleIdentifier(SimpleIdentifier node) =>
@@ -1650,149 +1538,109 @@
new StringInterpolation(cloneNodeList(node.elements));
@override
- SuperConstructorInvocation
- visitSuperConstructorInvocation(SuperConstructorInvocation node) =>
- new SuperConstructorInvocation(
- cloneToken(node.keyword),
- cloneToken(node.period),
- cloneNode(node.constructorName),
- cloneNode(node.argumentList));
+ SuperConstructorInvocation visitSuperConstructorInvocation(
+ SuperConstructorInvocation node) => new SuperConstructorInvocation(
+ cloneToken(node.superKeyword), cloneToken(node.period),
+ cloneNode(node.constructorName), cloneNode(node.argumentList));
@override
SuperExpression visitSuperExpression(SuperExpression node) =>
- new SuperExpression(cloneToken(node.keyword));
+ new SuperExpression(cloneToken(node.superKeyword));
@override
- SwitchCase visitSwitchCase(SwitchCase node) =>
- new SwitchCase(
- cloneNodeList(node.labels),
- cloneToken(node.keyword),
- cloneNode(node.expression),
- cloneToken(node.colon),
- cloneNodeList(node.statements));
+ SwitchCase visitSwitchCase(SwitchCase node) => new SwitchCase(
+ cloneNodeList(node.labels), cloneToken(node.keyword),
+ cloneNode(node.expression), cloneToken(node.colon),
+ cloneNodeList(node.statements));
@override
- SwitchDefault visitSwitchDefault(SwitchDefault node) =>
- new SwitchDefault(
- cloneNodeList(node.labels),
- cloneToken(node.keyword),
- cloneToken(node.colon),
- cloneNodeList(node.statements));
+ SwitchDefault visitSwitchDefault(SwitchDefault node) => new SwitchDefault(
+ cloneNodeList(node.labels), cloneToken(node.keyword),
+ cloneToken(node.colon), cloneNodeList(node.statements));
@override
SwitchStatement visitSwitchStatement(SwitchStatement node) =>
- new SwitchStatement(
- cloneToken(node.keyword),
- cloneToken(node.leftParenthesis),
- cloneNode(node.expression),
- cloneToken(node.rightParenthesis),
- cloneToken(node.leftBracket),
- cloneNodeList(node.members),
- cloneToken(node.rightBracket));
+ new SwitchStatement(cloneToken(node.switchKeyword),
+ cloneToken(node.leftParenthesis), cloneNode(node.expression),
+ cloneToken(node.rightParenthesis), cloneToken(node.leftBracket),
+ cloneNodeList(node.members), cloneToken(node.rightBracket));
@override
- SymbolLiteral visitSymbolLiteral(SymbolLiteral node) =>
- new SymbolLiteral(cloneToken(node.poundSign), cloneTokenList(node.components));
+ SymbolLiteral visitSymbolLiteral(SymbolLiteral node) => new SymbolLiteral(
+ cloneToken(node.poundSign), cloneTokenList(node.components));
@override
ThisExpression visitThisExpression(ThisExpression node) =>
- new ThisExpression(cloneToken(node.keyword));
+ new ThisExpression(cloneToken(node.thisKeyword));
@override
ThrowExpression visitThrowExpression(ThrowExpression node) =>
- new ThrowExpression(cloneToken(node.keyword), cloneNode(node.expression));
+ new ThrowExpression(
+ cloneToken(node.throwKeyword), cloneNode(node.expression));
@override
- TopLevelVariableDeclaration
- visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) =>
- new TopLevelVariableDeclaration(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneNode(node.variables),
- cloneToken(node.semicolon));
+ TopLevelVariableDeclaration visitTopLevelVariableDeclaration(
+ TopLevelVariableDeclaration node) => new TopLevelVariableDeclaration(
+ cloneNode(node.documentationComment), cloneNodeList(node.metadata),
+ cloneNode(node.variables), cloneToken(node.semicolon));
@override
- TryStatement visitTryStatement(TryStatement node) =>
- new TryStatement(
- cloneToken(node.tryKeyword),
- cloneNode(node.body),
- cloneNodeList(node.catchClauses),
- cloneToken(node.finallyKeyword),
- cloneNode(node.finallyBlock));
+ TryStatement visitTryStatement(TryStatement node) => new TryStatement(
+ cloneToken(node.tryKeyword), cloneNode(node.body),
+ cloneNodeList(node.catchClauses), cloneToken(node.finallyKeyword),
+ cloneNode(node.finallyBlock));
@override
TypeArgumentList visitTypeArgumentList(TypeArgumentList node) =>
- new TypeArgumentList(
- cloneToken(node.leftBracket),
- cloneNodeList(node.arguments),
- cloneToken(node.rightBracket));
+ new TypeArgumentList(cloneToken(node.leftBracket),
+ cloneNodeList(node.arguments), cloneToken(node.rightBracket));
@override
TypeName visitTypeName(TypeName node) =>
new TypeName(cloneNode(node.name), cloneNode(node.typeArguments));
@override
- TypeParameter visitTypeParameter(TypeParameter node) =>
- new TypeParameter(
- cloneNode(node.documentationComment),
- cloneNodeList(node.metadata),
- cloneNode(node.name),
- cloneToken(node.keyword),
- cloneNode(node.bound));
+ TypeParameter visitTypeParameter(TypeParameter node) => new TypeParameter(
+ cloneNode(node.documentationComment), cloneNodeList(node.metadata),
+ cloneNode(node.name), cloneToken(node.extendsKeyword),
+ cloneNode(node.bound));
@override
TypeParameterList visitTypeParameterList(TypeParameterList node) =>
- new TypeParameterList(
- cloneToken(node.leftBracket),
- cloneNodeList(node.typeParameters),
- cloneToken(node.rightBracket));
+ new TypeParameterList(cloneToken(node.leftBracket),
+ cloneNodeList(node.typeParameters), cloneToken(node.rightBracket));
@override
VariableDeclaration visitVariableDeclaration(VariableDeclaration node) =>
- new VariableDeclaration(
- null,
- cloneNodeList(node.metadata),
- cloneNode(node.name),
- cloneToken(node.equals),
+ new VariableDeclaration(null, cloneNodeList(node.metadata),
+ cloneNode(node.name), cloneToken(node.equals),
cloneNode(node.initializer));
@override
- VariableDeclarationList
- visitVariableDeclarationList(VariableDeclarationList node) =>
- new VariableDeclarationList(
- null,
- cloneNodeList(node.metadata),
- cloneToken(node.keyword),
- cloneNode(node.type),
- cloneNodeList(node.variables));
+ VariableDeclarationList visitVariableDeclarationList(
+ VariableDeclarationList node) => new VariableDeclarationList(null,
+ cloneNodeList(node.metadata), cloneToken(node.keyword),
+ cloneNode(node.type), cloneNodeList(node.variables));
@override
- VariableDeclarationStatement
- visitVariableDeclarationStatement(VariableDeclarationStatement node) =>
- new VariableDeclarationStatement(
- cloneNode(node.variables),
- cloneToken(node.semicolon));
+ VariableDeclarationStatement visitVariableDeclarationStatement(
+ VariableDeclarationStatement node) => new VariableDeclarationStatement(
+ cloneNode(node.variables), cloneToken(node.semicolon));
@override
- WhileStatement visitWhileStatement(WhileStatement node) =>
- new WhileStatement(
- cloneToken(node.keyword),
- cloneToken(node.leftParenthesis),
- cloneNode(node.condition),
- cloneToken(node.rightParenthesis),
- cloneNode(node.body));
+ WhileStatement visitWhileStatement(WhileStatement node) => new WhileStatement(
+ cloneToken(node.whileKeyword), cloneToken(node.leftParenthesis),
+ cloneNode(node.condition), cloneToken(node.rightParenthesis),
+ cloneNode(node.body));
@override
- WithClause visitWithClause(WithClause node) =>
- new WithClause(cloneToken(node.withKeyword), cloneNodeList(node.mixinTypes));
+ WithClause visitWithClause(WithClause node) => new WithClause(
+ cloneToken(node.withKeyword), cloneNodeList(node.mixinTypes));
@override
- YieldStatement visitYieldStatement(YieldStatement node) =>
- new YieldStatement(
- cloneToken(node.yieldKeyword),
- cloneToken(node.star),
- cloneNode(node.expression),
- cloneToken(node.semicolon));
+ YieldStatement visitYieldStatement(YieldStatement node) => new YieldStatement(
+ cloneToken(node.yieldKeyword), cloneToken(node.star),
+ cloneNode(node.expression), cloneToken(node.semicolon));
}
/**
@@ -1881,7 +1729,7 @@
@override
bool visitAssertStatement(AssertStatement node) {
AssertStatement other = _other as AssertStatement;
- return isEqualTokens(node.keyword, other.keyword) &&
+ return isEqualTokens(node.assertKeyword, other.assertKeyword) &&
isEqualTokens(node.leftParenthesis, other.leftParenthesis) &&
isEqualNodes(node.condition, other.condition) &&
isEqualTokens(node.rightParenthesis, other.rightParenthesis) &&
@@ -1935,7 +1783,7 @@
@override
bool visitBreakStatement(BreakStatement node) {
BreakStatement other = _other as BreakStatement;
- return isEqualTokens(node.keyword, other.keyword) &&
+ return isEqualTokens(node.breakKeyword, other.breakKeyword) &&
isEqualNodes(node.label, other.label) &&
isEqualTokens(node.semicolon, other.semicolon);
}
@@ -1965,8 +1813,7 @@
bool visitClassDeclaration(ClassDeclaration node) {
ClassDeclaration other = _other as ClassDeclaration;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualTokens(node.abstractKeyword, other.abstractKeyword) &&
isEqualTokens(node.classKeyword, other.classKeyword) &&
@@ -1984,10 +1831,9 @@
bool visitClassTypeAlias(ClassTypeAlias node) {
ClassTypeAlias other = _other as ClassTypeAlias;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
- isEqualTokens(node.keyword, other.keyword) &&
+ isEqualTokens(node.typedefKeyword, other.typedefKeyword) &&
isEqualNodes(node.name, other.name) &&
isEqualNodes(node.typeParameters, other.typeParameters) &&
isEqualTokens(node.equals, other.equals) &&
@@ -2035,8 +1881,7 @@
bool visitConstructorDeclaration(ConstructorDeclaration node) {
ConstructorDeclaration other = _other as ConstructorDeclaration;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualTokens(node.externalKeyword, other.externalKeyword) &&
isEqualTokens(node.constKeyword, other.constKeyword) &&
@@ -2054,7 +1899,7 @@
@override
bool visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
ConstructorFieldInitializer other = _other as ConstructorFieldInitializer;
- return isEqualTokens(node.keyword, other.keyword) &&
+ return isEqualTokens(node.thisKeyword, other.thisKeyword) &&
isEqualTokens(node.period, other.period) &&
isEqualNodes(node.fieldName, other.fieldName) &&
isEqualTokens(node.equals, other.equals) &&
@@ -2072,7 +1917,7 @@
@override
bool visitContinueStatement(ContinueStatement node) {
ContinueStatement other = _other as ContinueStatement;
- return isEqualTokens(node.keyword, other.keyword) &&
+ return isEqualTokens(node.continueKeyword, other.continueKeyword) &&
isEqualNodes(node.label, other.label) &&
isEqualTokens(node.semicolon, other.semicolon);
}
@@ -2081,8 +1926,7 @@
bool visitDeclaredIdentifier(DeclaredIdentifier node) {
DeclaredIdentifier other = _other as DeclaredIdentifier;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualTokens(node.keyword, other.keyword) &&
isEqualNodes(node.type, other.type) &&
@@ -2133,8 +1977,7 @@
bool visitEnumConstantDeclaration(EnumConstantDeclaration node) {
EnumConstantDeclaration other = _other as EnumConstantDeclaration;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualNodes(node.name, other.name);
}
@@ -2143,10 +1986,9 @@
bool visitEnumDeclaration(EnumDeclaration node) {
EnumDeclaration other = _other as EnumDeclaration;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
- isEqualTokens(node.keyword, other.keyword) &&
+ isEqualTokens(node.enumKeyword, other.enumKeyword) &&
isEqualNodes(node.name, other.name) &&
isEqualTokens(node.leftBracket, other.leftBracket) &&
_isEqualNodeLists(node.constants, other.constants) &&
@@ -2157,8 +1999,7 @@
bool visitExportDirective(ExportDirective node) {
ExportDirective other = _other as ExportDirective;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualTokens(node.keyword, other.keyword) &&
isEqualNodes(node.uri, other.uri) &&
@@ -2184,7 +2025,7 @@
@override
bool visitExtendsClause(ExtendsClause node) {
ExtendsClause other = _other as ExtendsClause;
- return isEqualTokens(node.keyword, other.keyword) &&
+ return isEqualTokens(node.extendsKeyword, other.extendsKeyword) &&
isEqualNodes(node.superclass, other.superclass);
}
@@ -2192,8 +2033,7 @@
bool visitFieldDeclaration(FieldDeclaration node) {
FieldDeclaration other = _other as FieldDeclaration;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualTokens(node.staticKeyword, other.staticKeyword) &&
isEqualNodes(node.fields, other.fields) &&
@@ -2204,12 +2044,11 @@
bool visitFieldFormalParameter(FieldFormalParameter node) {
FieldFormalParameter other = _other as FieldFormalParameter;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualTokens(node.keyword, other.keyword) &&
isEqualNodes(node.type, other.type) &&
- isEqualTokens(node.thisToken, other.thisToken) &&
+ isEqualTokens(node.thisKeyword, other.thisKeyword) &&
isEqualTokens(node.period, other.period) &&
isEqualNodes(node.identifier, other.identifier);
}
@@ -2255,8 +2094,7 @@
bool visitFunctionDeclaration(FunctionDeclaration node) {
FunctionDeclaration other = _other as FunctionDeclaration;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualTokens(node.externalKeyword, other.externalKeyword) &&
isEqualNodes(node.returnType, other.returnType) &&
@@ -2289,10 +2127,9 @@
bool visitFunctionTypeAlias(FunctionTypeAlias node) {
FunctionTypeAlias other = _other as FunctionTypeAlias;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
- isEqualTokens(node.keyword, other.keyword) &&
+ isEqualTokens(node.typedefKeyword, other.typedefKeyword) &&
isEqualNodes(node.returnType, other.returnType) &&
isEqualNodes(node.name, other.name) &&
isEqualNodes(node.typeParameters, other.typeParameters) &&
@@ -2304,8 +2141,7 @@
bool visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
FunctionTypedFormalParameter other = _other as FunctionTypedFormalParameter;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualNodes(node.returnType, other.returnType) &&
isEqualNodes(node.identifier, other.identifier) &&
@@ -2334,7 +2170,7 @@
@override
bool visitImplementsClause(ImplementsClause node) {
ImplementsClause other = _other as ImplementsClause;
- return isEqualTokens(node.keyword, other.keyword) &&
+ return isEqualTokens(node.implementsKeyword, other.implementsKeyword) &&
_isEqualNodeLists(node.interfaces, other.interfaces);
}
@@ -2342,12 +2178,12 @@
bool visitImportDirective(ImportDirective node) {
ImportDirective other = _other as ImportDirective;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualTokens(node.keyword, other.keyword) &&
isEqualNodes(node.uri, other.uri) &&
- isEqualTokens(node.asToken, other.asToken) &&
+ isEqualTokens(node.deferredKeyword, other.deferredKeyword) &&
+ isEqualTokens(node.asKeyword, other.asKeyword) &&
isEqualNodes(node.prefix, other.prefix) &&
_isEqualNodeLists(node.combinators, other.combinators) &&
isEqualTokens(node.semicolon, other.semicolon);
@@ -2419,10 +2255,9 @@
bool visitLibraryDirective(LibraryDirective node) {
LibraryDirective other = _other as LibraryDirective;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
- isEqualTokens(node.libraryToken, other.libraryToken) &&
+ isEqualTokens(node.libraryKeyword, other.libraryKeyword) &&
isEqualNodes(node.name, other.name) &&
isEqualTokens(node.semicolon, other.semicolon);
}
@@ -2465,8 +2300,7 @@
bool visitMethodDeclaration(MethodDeclaration node) {
MethodDeclaration other = _other as MethodDeclaration;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualTokens(node.externalKeyword, other.externalKeyword) &&
isEqualTokens(node.modifierKeyword, other.modifierKeyword) &&
@@ -2497,14 +2331,14 @@
@override
bool visitNativeClause(NativeClause node) {
NativeClause other = _other as NativeClause;
- return isEqualTokens(node.keyword, other.keyword) &&
+ return isEqualTokens(node.nativeKeyword, other.nativeKeyword) &&
isEqualNodes(node.name, other.name);
}
@override
bool visitNativeFunctionBody(NativeFunctionBody node) {
NativeFunctionBody other = _other as NativeFunctionBody;
- return isEqualTokens(node.nativeToken, other.nativeToken) &&
+ return isEqualTokens(node.nativeKeyword, other.nativeKeyword) &&
isEqualNodes(node.stringLiteral, other.stringLiteral) &&
isEqualTokens(node.semicolon, other.semicolon);
}
@@ -2527,10 +2361,9 @@
bool visitPartDirective(PartDirective node) {
PartDirective other = _other as PartDirective;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
- isEqualTokens(node.partToken, other.partToken) &&
+ isEqualTokens(node.partKeyword, other.partKeyword) &&
isEqualNodes(node.uri, other.uri) &&
isEqualTokens(node.semicolon, other.semicolon);
}
@@ -2539,11 +2372,10 @@
bool visitPartOfDirective(PartOfDirective node) {
PartOfDirective other = _other as PartOfDirective;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
- isEqualTokens(node.partToken, other.partToken) &&
- isEqualTokens(node.ofToken, other.ofToken) &&
+ isEqualTokens(node.partKeyword, other.partKeyword) &&
+ isEqualTokens(node.ofKeyword, other.ofKeyword) &&
isEqualNodes(node.libraryName, other.libraryName) &&
isEqualTokens(node.semicolon, other.semicolon);
}
@@ -2579,11 +2411,11 @@
}
@override
- bool
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ bool visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
RedirectingConstructorInvocation other =
_other as RedirectingConstructorInvocation;
- return isEqualTokens(node.keyword, other.keyword) &&
+ return isEqualTokens(node.thisKeyword, other.thisKeyword) &&
isEqualTokens(node.period, other.period) &&
isEqualNodes(node.constructorName, other.constructorName) &&
isEqualNodes(node.argumentList, other.argumentList);
@@ -2592,13 +2424,13 @@
@override
bool visitRethrowExpression(RethrowExpression node) {
RethrowExpression other = _other as RethrowExpression;
- return isEqualTokens(node.keyword, other.keyword);
+ return isEqualTokens(node.rethrowKeyword, other.rethrowKeyword);
}
@override
bool visitReturnStatement(ReturnStatement node) {
ReturnStatement other = _other as ReturnStatement;
- return isEqualTokens(node.keyword, other.keyword) &&
+ return isEqualTokens(node.returnKeyword, other.returnKeyword) &&
isEqualNodes(node.expression, other.expression) &&
isEqualTokens(node.semicolon, other.semicolon);
}
@@ -2620,8 +2452,7 @@
bool visitSimpleFormalParameter(SimpleFormalParameter node) {
SimpleFormalParameter other = _other as SimpleFormalParameter;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualTokens(node.keyword, other.keyword) &&
isEqualNodes(node.type, other.type) &&
@@ -2650,7 +2481,7 @@
@override
bool visitSuperConstructorInvocation(SuperConstructorInvocation node) {
SuperConstructorInvocation other = _other as SuperConstructorInvocation;
- return isEqualTokens(node.keyword, other.keyword) &&
+ return isEqualTokens(node.superKeyword, other.superKeyword) &&
isEqualTokens(node.period, other.period) &&
isEqualNodes(node.constructorName, other.constructorName) &&
isEqualNodes(node.argumentList, other.argumentList);
@@ -2659,7 +2490,7 @@
@override
bool visitSuperExpression(SuperExpression node) {
SuperExpression other = _other as SuperExpression;
- return isEqualTokens(node.keyword, other.keyword);
+ return isEqualTokens(node.superKeyword, other.superKeyword);
}
@override
@@ -2684,7 +2515,7 @@
@override
bool visitSwitchStatement(SwitchStatement node) {
SwitchStatement other = _other as SwitchStatement;
- return isEqualTokens(node.keyword, other.keyword) &&
+ return isEqualTokens(node.switchKeyword, other.switchKeyword) &&
isEqualTokens(node.leftParenthesis, other.leftParenthesis) &&
isEqualNodes(node.expression, other.expression) &&
isEqualTokens(node.rightParenthesis, other.rightParenthesis) &&
@@ -2703,13 +2534,13 @@
@override
bool visitThisExpression(ThisExpression node) {
ThisExpression other = _other as ThisExpression;
- return isEqualTokens(node.keyword, other.keyword);
+ return isEqualTokens(node.thisKeyword, other.thisKeyword);
}
@override
bool visitThrowExpression(ThrowExpression node) {
ThrowExpression other = _other as ThrowExpression;
- return isEqualTokens(node.keyword, other.keyword) &&
+ return isEqualTokens(node.throwKeyword, other.throwKeyword) &&
isEqualNodes(node.expression, other.expression);
}
@@ -2717,8 +2548,7 @@
bool visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
TopLevelVariableDeclaration other = _other as TopLevelVariableDeclaration;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualNodes(node.variables, other.variables) &&
isEqualTokens(node.semicolon, other.semicolon);
@@ -2753,11 +2583,10 @@
bool visitTypeParameter(TypeParameter node) {
TypeParameter other = _other as TypeParameter;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualNodes(node.name, other.name) &&
- isEqualTokens(node.keyword, other.keyword) &&
+ isEqualTokens(node.extendsKeyword, other.extendsKeyword) &&
isEqualNodes(node.bound, other.bound);
}
@@ -2773,8 +2602,7 @@
bool visitVariableDeclaration(VariableDeclaration node) {
VariableDeclaration other = _other as VariableDeclaration;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualNodes(node.name, other.name) &&
isEqualTokens(node.equals, other.equals) &&
@@ -2785,8 +2613,7 @@
bool visitVariableDeclarationList(VariableDeclarationList node) {
VariableDeclarationList other = _other as VariableDeclarationList;
return isEqualNodes(
- node.documentationComment,
- other.documentationComment) &&
+ node.documentationComment, other.documentationComment) &&
_isEqualNodeLists(node.metadata, other.metadata) &&
isEqualTokens(node.keyword, other.keyword) &&
isEqualNodes(node.type, other.type) &&
@@ -2803,7 +2630,7 @@
@override
bool visitWhileStatement(WhileStatement node) {
WhileStatement other = _other as WhileStatement;
- return isEqualTokens(node.keyword, other.keyword) &&
+ return isEqualTokens(node.whileKeyword, other.whileKeyword) &&
isEqualTokens(node.leftParenthesis, other.leftParenthesis) &&
isEqualNodes(node.condition, other.condition) &&
isEqualTokens(node.rightParenthesis, other.rightParenthesis) &&
@@ -2878,15 +2705,21 @@
*/
abstract class AstNode {
/**
- * An empty list of ast nodes.
+ * An empty list of AST nodes.
*/
- static const List<AstNode> EMPTY_ARRAY = const <AstNode>[];
+ @deprecated // Use "AstNode.EMPTY_LIST"
+ static const List<AstNode> EMPTY_ARRAY = EMPTY_LIST;
+
+ /**
+ * An empty list of AST nodes.
+ */
+ static const List<AstNode> EMPTY_LIST = const <AstNode>[];
/**
* A comparator that can be used to sort AST nodes in lexical order. In other
* words, `compare` will return a negative value if the offset of the first
* node is less than the offset of the second node, zero (0) if the nodes have
- * the same offset, and a positive value if if the offset of the first node is
+ * the same offset, and a positive value if the offset of the first node is
* greater than the offset of the second node.
*/
static Comparator<AstNode> LEXICAL_ORDER =
@@ -2974,7 +2807,7 @@
/**
* Set the parent of this node to the [newParent].
*/
- @deprecated
+ @deprecated // Never intended for public use.
void set parent(AstNode newParent) {
_parent = newParent;
}
@@ -3003,11 +2836,9 @@
/**
* Make this node the parent of the given [child] node. Return the child node.
*/
+ @deprecated // Never intended for public use.
AstNode becomeParentOf(AstNode child) {
- if (child != null) {
- child._parent = this;
- }
- return child;
+ return _becomeParentOf(child);
}
/**
@@ -3038,7 +2869,7 @@
/**
* If the given [child] is not `null`, use the given [visitor] to visit it.
*/
- @deprecated
+ @deprecated // Never intended for public use.
void safelyVisitChild(AstNode child, AstVisitor visitor) {
if (child != null) {
child.accept(visitor);
@@ -3086,6 +2917,16 @@
void visitChildren(AstVisitor visitor);
/**
+ * Make this node the parent of the given [child] node. Return the child node.
+ */
+ AstNode _becomeParentOf(AstNode child) {
+ if (child != null) {
+ child._parent = this;
+ }
+ return child;
+ }
+
+ /**
* If the given [child] is not `null`, use the given [visitor] to visit it.
*/
void _safelyVisitChild(AstNode child, AstVisitor visitor) {
@@ -3253,8 +3094,8 @@
R visitPropertyAccess(PropertyAccess node);
- R
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node);
+ R visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node);
R visitRethrowExpression(RethrowExpression node);
@@ -3334,7 +3175,7 @@
* Initialize a newly created await expression.
*/
AwaitExpression(this.awaitKeyword, Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
@override
@@ -3347,8 +3188,8 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(awaitKeyword)
- ..add(_expression);
+ ..add(awaitKeyword)
+ ..add(_expression);
@override
Token get endToken => _expression.endToken;
@@ -3362,7 +3203,7 @@
* Set the expression whose value is being waited on to the given [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
@override
@@ -3417,10 +3258,10 @@
/**
* Initialize a newly created binary expression.
*/
- BinaryExpression(Expression leftOperand, this.operator,
- Expression rightOperand) {
- _leftOperand = becomeParentOf(leftOperand);
- _rightOperand = becomeParentOf(rightOperand);
+ BinaryExpression(
+ Expression leftOperand, this.operator, Expression rightOperand) {
+ _leftOperand = _becomeParentOf(leftOperand);
+ _rightOperand = _becomeParentOf(rightOperand);
}
@override
@@ -3443,9 +3284,9 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(_leftOperand)
- ..add(operator)
- ..add(_rightOperand);
+ ..add(_leftOperand)
+ ..add(operator)
+ ..add(_rightOperand);
@override
Token get endToken => _rightOperand.endToken;
@@ -3460,7 +3301,7 @@
* [expression].
*/
void set leftOperand(Expression expression) {
- _leftOperand = becomeParentOf(expression);
+ _leftOperand = _becomeParentOf(expression);
}
@override
@@ -3471,19 +3312,10 @@
* known based on propagated type information, then return the parameter
* element representing the parameter to which the value of the right operand
* will be bound. Otherwise, return `null`.
- *
- * This method is only intended to be used by
- * [Expression.propagatedParameterElement].
*/
+ @deprecated // Use "expression.propagatedParameterElement"
ParameterElement get propagatedParameterElementForRightOperand {
- if (propagatedElement == null) {
- return null;
- }
- List<ParameterElement> parameters = propagatedElement.parameters;
- if (parameters.length < 1) {
- return null;
- }
- return parameters[0];
+ return _propagatedParameterElementForRightOperand;
}
/**
@@ -3496,7 +3328,7 @@
* [expression].
*/
void set rightOperand(Expression expression) {
- _rightOperand = becomeParentOf(expression);
+ _rightOperand = _becomeParentOf(expression);
}
/**
@@ -3504,11 +3336,36 @@
* known based on static type information, then return the parameter element
* representing the parameter to which the value of the right operand will be
* bound. Otherwise, return `null`.
- *
- * This method is only intended to be used by
- * [Expression.staticParameterElement].
*/
+ @deprecated // Use "expression.propagatedParameterElement"
ParameterElement get staticParameterElementForRightOperand {
+ return _staticParameterElementForRightOperand;
+ }
+
+ /**
+ * If the AST structure has been resolved, and the function being invoked is
+ * known based on propagated type information, then return the parameter
+ * element representing the parameter to which the value of the right operand
+ * will be bound. Otherwise, return `null`.
+ */
+ ParameterElement get _propagatedParameterElementForRightOperand {
+ if (propagatedElement == null) {
+ return null;
+ }
+ List<ParameterElement> parameters = propagatedElement.parameters;
+ if (parameters.length < 1) {
+ return null;
+ }
+ return parameters[0];
+ }
+
+ /**
+ * If the AST structure has been resolved, and the function being invoked is
+ * known based on static type information, then return the parameter element
+ * representing the parameter to which the value of the right operand will be
+ * bound. Otherwise, return `null`.
+ */
+ ParameterElement get _staticParameterElementForRightOperand {
if (staticElement == null) {
return null;
}
@@ -3563,9 +3420,9 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(leftBracket)
- ..addAll(_statements)
- ..add(rightBracket);
+ ..add(leftBracket)
+ ..addAll(_statements)
+ ..add(rightBracket);
@override
Token get endToken => rightBracket;
@@ -3615,7 +3472,7 @@
* keyword (and must be `null` if there is no keyword).
*/
BlockFunctionBody(this.keyword, this.star, Block block) {
- _block = becomeParentOf(block);
+ _block = _becomeParentOf(block);
}
@override
@@ -3630,26 +3487,20 @@
* Set the block representing the body of the function to the given [block].
*/
void set block(Block block) {
- _block = becomeParentOf(block);
+ _block = _becomeParentOf(block);
}
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(star)
- ..add(_block);
+ ..add(keyword)
+ ..add(star)
+ ..add(_block);
@override
Token get endToken => _block.endToken;
@override
- bool get isAsynchronous {
- if (keyword == null) {
- return false;
- }
- String keywordValue = keyword.lexeme;
- return keywordValue == Parser.ASYNC;
- }
+ bool get isAsynchronous => keyword != null && keyword.lexeme == Parser.ASYNC;
@override
bool get isGenerator => star != null;
@@ -3691,9 +3542,6 @@
@override
Token get beginToken => literal;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()..add(literal);
@@ -3777,7 +3625,7 @@
/**
* The token representing the 'break' keyword.
*/
- Token keyword;
+ Token breakKeyword;
/**
* The label associated with the statement, or `null` if there is no label.
@@ -3804,26 +3652,37 @@
* Initialize a newly created break statement. The [label] can be `null` if
* there is no label associated with the statement.
*/
- BreakStatement(this.keyword, SimpleIdentifier label, this.semicolon) {
- _label = becomeParentOf(label);
+ BreakStatement(this.breakKeyword, SimpleIdentifier label, this.semicolon) {
+ _label = _becomeParentOf(label);
}
@override
- Token get beginToken => keyword;
+ Token get beginToken => breakKeyword;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(_label)
- ..add(semicolon);
+ ..add(breakKeyword)
+ ..add(_label)
+ ..add(semicolon);
@override
Token get endToken => semicolon;
/**
+ * Return the token representing the 'break' keyword.
+ */
+ @deprecated // Use "this.breakKeyword"
+ Token get keyword => breakKeyword;
+
+ /**
+ * Sethe token representing the 'break' keyword to the given [token].
+ */
+ @deprecated // Use "this.breakKeyword"
+ void set keyword(Token token) {
+ breakKeyword = token;
+ }
+
+ /**
* Return the label associated with the statement, or `null` if there is no
* label.
*/
@@ -3833,7 +3692,7 @@
* Set the label associated with the statement to the given [identifier].
*/
void set label(SimpleIdentifier identifier) {
- _label = becomeParentOf(identifier);
+ _label = _becomeParentOf(identifier);
}
@override
@@ -3877,7 +3736,7 @@
* [cascadeSections] must contain at least one element.
*/
CascadeExpression(Expression target, List<Expression> cascadeSections) {
- _target = becomeParentOf(target);
+ _target = _becomeParentOf(target);
_cascadeSections = new NodeList<Expression>(this, cascadeSections);
}
@@ -3891,8 +3750,8 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(_target)
- ..addAll(_cascadeSections);
+ ..add(_target)
+ ..addAll(_cascadeSections);
@override
Token get endToken => _cascadeSections.endToken;
@@ -3909,7 +3768,7 @@
* Set the target of the cascade sections to the given [expression].
*/
void set target(Expression target) {
- _target = becomeParentOf(target);
+ _target = _becomeParentOf(target);
}
@override
@@ -3952,12 +3811,13 @@
Token catchKeyword;
/**
- * The left parenthesis.
+ * The left parenthesis, or `null` if there is no 'catch' keyword.
*/
Token leftParenthesis;
/**
- * The parameter whose value will be the exception that was thrown.
+ * The parameter whose value will be the exception that was thrown, or `null`
+ * if there is no 'catch' keyword.
*/
SimpleIdentifier _exceptionParameter;
@@ -3974,7 +3834,7 @@
SimpleIdentifier _stackTraceParameter;
/**
- * The right parenthesis.
+ * The right parenthesis, or `null` if there is no 'catch' keyword.
*/
Token rightParenthesis;
@@ -3992,10 +3852,10 @@
CatchClause(this.onKeyword, TypeName exceptionType, this.catchKeyword,
this.leftParenthesis, SimpleIdentifier exceptionParameter, this.comma,
SimpleIdentifier stackTraceParameter, this.rightParenthesis, Block body) {
- _exceptionType = becomeParentOf(exceptionType);
- _exceptionParameter = becomeParentOf(exceptionParameter);
- _stackTraceParameter = becomeParentOf(stackTraceParameter);
- _body = becomeParentOf(body);
+ _exceptionType = _becomeParentOf(exceptionType);
+ _exceptionParameter = _becomeParentOf(exceptionParameter);
+ _stackTraceParameter = _becomeParentOf(stackTraceParameter);
+ _body = _becomeParentOf(body);
}
@override
@@ -4015,26 +3875,27 @@
* Set the body of the catch block to the given [block].
*/
void set body(Block block) {
- _body = becomeParentOf(block);
+ _body = _becomeParentOf(block);
}
@override
Iterable get childEntities => new ChildEntities()
- ..add(onKeyword)
- ..add(_exceptionType)
- ..add(catchKeyword)
- ..add(leftParenthesis)
- ..add(_exceptionParameter)
- ..add(comma)
- ..add(_stackTraceParameter)
- ..add(rightParenthesis)
- ..add(_body);
+ ..add(onKeyword)
+ ..add(_exceptionType)
+ ..add(catchKeyword)
+ ..add(leftParenthesis)
+ ..add(_exceptionParameter)
+ ..add(comma)
+ ..add(_stackTraceParameter)
+ ..add(rightParenthesis)
+ ..add(_body);
@override
Token get endToken => _body.endToken;
/**
- * Return the parameter whose value will be the exception that was thrown.
+ * Return the parameter whose value will be the exception that was thrown, or
+ * `null` if there is no 'catch' keyword.
*/
SimpleIdentifier get exceptionParameter => _exceptionParameter;
@@ -4043,7 +3904,7 @@
* given [parameter].
*/
void set exceptionParameter(SimpleIdentifier parameter) {
- _exceptionParameter = becomeParentOf(parameter);
+ _exceptionParameter = _becomeParentOf(parameter);
}
/**
@@ -4057,7 +3918,7 @@
* [exceptionType].
*/
void set exceptionType(TypeName exceptionType) {
- _exceptionType = becomeParentOf(exceptionType);
+ _exceptionType = _becomeParentOf(exceptionType);
}
/**
@@ -4071,7 +3932,7 @@
* exception to the given [parameter].
*/
void set stackTraceParameter(SimpleIdentifier parameter) {
- _stackTraceParameter = becomeParentOf(parameter);
+ _stackTraceParameter = _becomeParentOf(parameter);
}
@override
@@ -4090,6 +3951,9 @@
* Helper class to allow iteration of child entities of an AST node.
*/
class ChildEntities extends Object with IterableMixin implements Iterable {
+ /**
+ * The list of child entities to be iterated over.
+ */
List _entities = [];
@override
@@ -4198,30 +4062,30 @@
ClassDeclaration(Comment comment, List<Annotation> metadata,
this.abstractKeyword, this.classKeyword, SimpleIdentifier name,
TypeParameterList typeParameters, ExtendsClause extendsClause,
- WithClause withClause, ImplementsClause implementsClause, this.leftBracket,
- List<ClassMember> members, this.rightBracket)
+ WithClause withClause, ImplementsClause implementsClause,
+ this.leftBracket, List<ClassMember> members, this.rightBracket)
: super(comment, metadata) {
- _name = becomeParentOf(name);
- _typeParameters = becomeParentOf(typeParameters);
- _extendsClause = becomeParentOf(extendsClause);
- _withClause = becomeParentOf(withClause);
- _implementsClause = becomeParentOf(implementsClause);
+ _name = _becomeParentOf(name);
+ _typeParameters = _becomeParentOf(typeParameters);
+ _extendsClause = _becomeParentOf(extendsClause);
+ _withClause = _becomeParentOf(withClause);
+ _implementsClause = _becomeParentOf(implementsClause);
_members = new NodeList<ClassMember>(this, members);
}
@override
Iterable get childEntities => super._childEntities
- ..add(abstractKeyword)
- ..add(classKeyword)
- ..add(_name)
- ..add(_typeParameters)
- ..add(_extendsClause)
- ..add(_withClause)
- ..add(_implementsClause)
- ..add(_nativeClause)
- ..add(leftBracket)
- ..addAll(members)
- ..add(rightBracket);
+ ..add(abstractKeyword)
+ ..add(classKeyword)
+ ..add(_name)
+ ..add(_typeParameters)
+ ..add(_extendsClause)
+ ..add(_withClause)
+ ..add(_implementsClause)
+ ..add(_nativeClause)
+ ..add(leftBracket)
+ ..addAll(members)
+ ..add(rightBracket);
@override
ClassElement get element =>
@@ -4240,7 +4104,7 @@
* Set the extends clause for this class to the given [extendsClause].
*/
void set extendsClause(ExtendsClause extendsClause) {
- _extendsClause = becomeParentOf(extendsClause);
+ _extendsClause = _becomeParentOf(extendsClause);
}
@override
@@ -4261,7 +4125,7 @@
* Set the implements clause for the class to the given [implementsClause].
*/
void set implementsClause(ImplementsClause implementsClause) {
- _implementsClause = becomeParentOf(implementsClause);
+ _implementsClause = _becomeParentOf(implementsClause);
}
/**
@@ -4283,7 +4147,7 @@
* Set the name of the class being declared to the given [identifier].
*/
void set name(SimpleIdentifier identifier) {
- _name = becomeParentOf(identifier);
+ _name = _becomeParentOf(identifier);
}
/**
@@ -4296,7 +4160,7 @@
* Set the native clause for this class to the given [nativeClause].
*/
void set nativeClause(NativeClause nativeClause) {
- _nativeClause = becomeParentOf(nativeClause);
+ _nativeClause = _becomeParentOf(nativeClause);
}
/**
@@ -4309,7 +4173,7 @@
* Set the type parameters for the class to the given list of [typeParameters].
*/
void set typeParameters(TypeParameterList typeParameters) {
- _typeParameters = becomeParentOf(typeParameters);
+ _typeParameters = _becomeParentOf(typeParameters);
}
/**
@@ -4322,7 +4186,7 @@
* Set the with clause for the class to the given [withClause].
*/
void set withClause(WithClause withClause) {
- _withClause = becomeParentOf(withClause);
+ _withClause = _becomeParentOf(withClause);
}
@override
@@ -4421,9 +4285,6 @@
* >
* > mixinApplication ::=
* > [TypeName] [WithClause] [ImplementsClause]? ';'
- *
- * Deprecated: This class captures obsolete syntax that is no longer part of the
- * Dart language.
*/
class ClassTypeAlias extends TypeAlias {
/**
@@ -4477,24 +4338,24 @@
this.abstractKeyword, TypeName superclass, WithClause withClause,
ImplementsClause implementsClause, Token semicolon)
: super(comment, metadata, keyword, semicolon) {
- _name = becomeParentOf(name);
- _typeParameters = becomeParentOf(typeParameters);
- _superclass = becomeParentOf(superclass);
- _withClause = becomeParentOf(withClause);
- _implementsClause = becomeParentOf(implementsClause);
+ _name = _becomeParentOf(name);
+ _typeParameters = _becomeParentOf(typeParameters);
+ _superclass = _becomeParentOf(superclass);
+ _withClause = _becomeParentOf(withClause);
+ _implementsClause = _becomeParentOf(implementsClause);
}
@override
Iterable get childEntities => super._childEntities
- ..add(keyword)
- ..add(_name)
- ..add(_typeParameters)
- ..add(equals)
- ..add(abstractKeyword)
- ..add(_superclass)
- ..add(_withClause)
- ..add(_implementsClause)
- ..add(semicolon);
+ ..add(typedefKeyword)
+ ..add(_name)
+ ..add(_typeParameters)
+ ..add(equals)
+ ..add(abstractKeyword)
+ ..add(_superclass)
+ ..add(_withClause)
+ ..add(_implementsClause)
+ ..add(semicolon);
@override
ClassElement get element =>
@@ -4510,7 +4371,7 @@
* Set the implements clause for this class to the given [implementsClause].
*/
void set implementsClause(ImplementsClause implementsClause) {
- _implementsClause = becomeParentOf(implementsClause);
+ _implementsClause = _becomeParentOf(implementsClause);
}
/**
@@ -4527,7 +4388,7 @@
* Set the name of the class being declared to the given [identifier].
*/
void set name(SimpleIdentifier name) {
- _name = becomeParentOf(name);
+ _name = _becomeParentOf(name);
}
/**
@@ -4540,7 +4401,7 @@
* [superclass] name.
*/
void set superclass(TypeName superclass) {
- _superclass = becomeParentOf(superclass);
+ _superclass = _becomeParentOf(superclass);
}
/**
@@ -4553,7 +4414,7 @@
* Set the type parameters for the class to the given list of [typeParameters].
*/
void set typeParameters(TypeParameterList typeParameters) {
- _typeParameters = becomeParentOf(typeParameters);
+ _typeParameters = _becomeParentOf(typeParameters);
}
/**
@@ -4565,7 +4426,7 @@
* Set the with clause for this class to the given with [withClause].
*/
void set withClause(WithClause withClause) {
- _withClause = becomeParentOf(withClause);
+ _withClause = _becomeParentOf(withClause);
}
@override
@@ -4591,13 +4452,13 @@
*/
abstract class Combinator extends AstNode {
/**
- * The keyword specifying what kind of processing is to be done on the
- * imported names.
+ * The 'hide' or 'show' keyword specifying what kind of processing is to be
+ * done on the names.
*/
Token keyword;
/**
- * Initialize a newly created import combinator.
+ * Initialize a newly created combinator.
*/
Combinator(this.keyword);
@@ -4697,15 +4558,15 @@
/**
* Create a documentation comment consisting of the given [tokens].
*/
- static Comment createDocumentationComment(List<Token> tokens) =>
- new Comment(tokens, CommentType.DOCUMENTATION, new List<CommentReference>());
+ static Comment createDocumentationComment(List<Token> tokens) => new Comment(
+ tokens, CommentType.DOCUMENTATION, new List<CommentReference>());
/**
* Create a documentation comment consisting of the given [tokens] and having
* the given [references] embedded within it.
*/
- static Comment createDocumentationCommentWithReferences(List<Token> tokens,
- List<CommentReference> references) =>
+ static Comment createDocumentationCommentWithReferences(
+ List<Token> tokens, List<CommentReference> references) =>
new Comment(tokens, CommentType.DOCUMENTATION, references);
/**
@@ -4738,7 +4599,7 @@
* can be `null` if the reference is not to a constructor.
*/
CommentReference(this.newKeyword, Identifier identifier) {
- _identifier = becomeParentOf(identifier);
+ _identifier = _becomeParentOf(identifier);
}
@override
@@ -4746,8 +4607,8 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(newKeyword)
- ..add(_identifier);
+ ..add(newKeyword)
+ ..add(_identifier);
@override
Token get endToken => _identifier.endToken;
@@ -4761,7 +4622,7 @@
* Set the identifier being referenced to the given [identifier].
*/
void set identifier(Identifier identifier) {
- _identifier = becomeParentOf(identifier);
+ _identifier = _becomeParentOf(identifier);
}
@override
@@ -4879,7 +4740,7 @@
CompilationUnit(this.beginToken, ScriptTag scriptTag,
List<Directive> directives, List<CompilationUnitMember> declarations,
this.endToken) {
- _scriptTag = becomeParentOf(scriptTag);
+ _scriptTag = _becomeParentOf(scriptTag);
_directives = new NodeList<Directive>(this, directives);
_declarations = new NodeList<CompilationUnitMember>(this, declarations);
}
@@ -4887,10 +4748,10 @@
@override
Iterable get childEntities {
ChildEntities result = new ChildEntities()..add(_scriptTag);
- if (_directivesAreBeforeDeclarations()) {
+ if (_directivesAreBeforeDeclarations) {
result
- ..addAll(_directives)
- ..addAll(_declarations);
+ ..addAll(_directives)
+ ..addAll(_declarations);
} else {
result.addAll(sortedDirectivesAndDeclarations);
}
@@ -4930,7 +4791,7 @@
* [scriptTag].
*/
void set scriptTag(ScriptTag scriptTag) {
- _scriptTag = becomeParentOf(scriptTag);
+ _scriptTag = _becomeParentOf(scriptTag);
}
/**
@@ -4939,9 +4800,22 @@
*/
List<AstNode> get sortedDirectivesAndDeclarations {
return <AstNode>[]
- ..addAll(_directives)
- ..addAll(_declarations)
- ..sort(AstNode.LEXICAL_ORDER);
+ ..addAll(_directives)
+ ..addAll(_declarations)
+ ..sort(AstNode.LEXICAL_ORDER);
+ }
+
+ /**
+ * Return `true` if all of the directives are lexically before any
+ * declarations.
+ */
+ bool get _directivesAreBeforeDeclarations {
+ if (_directives.isEmpty || _declarations.isEmpty) {
+ return true;
+ }
+ Directive lastDirective = _directives[_directives.length - 1];
+ CompilationUnitMember firstDeclaration = _declarations[0];
+ return lastDirective.offset < firstDeclaration.offset;
}
@override
@@ -4950,7 +4824,7 @@
@override
void visitChildren(AstVisitor visitor) {
_safelyVisitChild(_scriptTag, visitor);
- if (_directivesAreBeforeDeclarations()) {
+ if (_directivesAreBeforeDeclarations) {
_directives.accept(visitor);
_declarations.accept(visitor);
} else {
@@ -4959,19 +4833,6 @@
}
}
}
-
- /**
- * Return `true` if all of the directives are lexically before any
- * declarations.
- */
- bool _directivesAreBeforeDeclarations() {
- if (_directives.isEmpty || _declarations.isEmpty) {
- return true;
- }
- Directive lastDirective = _directives[_directives.length - 1];
- CompilationUnitMember firstDeclaration = _declarations[0];
- return lastDirective.offset < firstDeclaration.offset;
- }
}
/**
@@ -5032,24 +4893,21 @@
*/
ConditionalExpression(Expression condition, this.question,
Expression thenExpression, this.colon, Expression elseExpression) {
- _condition = becomeParentOf(condition);
- _thenExpression = becomeParentOf(thenExpression);
- _elseExpression = becomeParentOf(elseExpression);
+ _condition = _becomeParentOf(condition);
+ _thenExpression = _becomeParentOf(thenExpression);
+ _elseExpression = _becomeParentOf(elseExpression);
}
@override
Token get beginToken => _condition.beginToken;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..add(_condition)
- ..add(question)
- ..add(_thenExpression)
- ..add(colon)
- ..add(_elseExpression);
+ ..add(_condition)
+ ..add(question)
+ ..add(_thenExpression)
+ ..add(colon)
+ ..add(_elseExpression);
/**
* Return the condition used to determine which of the expressions is executed
@@ -5062,7 +4920,7 @@
* next to the given [expression].
*/
void set condition(Expression expression) {
- _condition = becomeParentOf(expression);
+ _condition = _becomeParentOf(expression);
}
/**
@@ -5076,7 +4934,7 @@
* to the given [expression].
*/
void set elseExpression(Expression expression) {
- _elseExpression = becomeParentOf(expression);
+ _elseExpression = _becomeParentOf(expression);
}
@override
@@ -5096,7 +4954,7 @@
* the given [expression].
*/
void set thenExpression(Expression expression) {
- _thenExpression = becomeParentOf(expression);
+ _thenExpression = _becomeParentOf(expression);
}
@override
@@ -5113,7 +4971,8 @@
/**
* An object that can be used to evaluate constant expressions to produce their
* compile-time value. According to the Dart Language Specification:
- * <blockquote>A constant expression is one of the following:
+ * <blockquote>
+ * A constant expression is one of the following:
* * A literal number.
* * A literal boolean.
* * A literal string where any interpolated expression is a compile-time
@@ -5316,8 +5175,7 @@
} else if (leftOperand is double && rightOperand is double) {
return leftOperand ~/ rightOperand;
}
- } else {
- }
+ } else {}
break;
}
// TODO(brianwilkerson) This doesn't handle numeric conversions.
@@ -5418,8 +5276,7 @@
} else if (operand is double) {
return -operand;
}
- } else {
- }
+ } else {}
break;
}
return NOT_A_CONSTANT;
@@ -5598,12 +5455,12 @@
List<ConstructorInitializer> initializers,
ConstructorName redirectedConstructor, FunctionBody body)
: super(comment, metadata) {
- _returnType = becomeParentOf(returnType);
- _name = becomeParentOf(name);
- _parameters = becomeParentOf(parameters);
+ _returnType = _becomeParentOf(returnType);
+ _name = _becomeParentOf(name);
+ _parameters = _becomeParentOf(parameters);
_initializers = new NodeList<ConstructorInitializer>(this, initializers);
- _redirectedConstructor = becomeParentOf(redirectedConstructor);
- _body = becomeParentOf(body);
+ _redirectedConstructor = _becomeParentOf(redirectedConstructor);
+ _body = _becomeParentOf(body);
}
/**
@@ -5616,22 +5473,22 @@
* Set the body of the constructor to the given [functionBody].
*/
void set body(FunctionBody functionBody) {
- _body = becomeParentOf(functionBody);
+ _body = _becomeParentOf(functionBody);
}
@override
Iterable get childEntities => super._childEntities
- ..add(externalKeyword)
- ..add(constKeyword)
- ..add(factoryKeyword)
- ..add(_returnType)
- ..add(period)
- ..add(_name)
- ..add(_parameters)
- ..add(separator)
- ..addAll(initializers)
- ..add(_redirectedConstructor)
- ..add(_body);
+ ..add(externalKeyword)
+ ..add(constKeyword)
+ ..add(factoryKeyword)
+ ..add(_returnType)
+ ..add(period)
+ ..add(_name)
+ ..add(_parameters)
+ ..add(separator)
+ ..addAll(initializers)
+ ..add(_redirectedConstructor)
+ ..add(_body);
@override
Token get endToken {
@@ -5668,7 +5525,7 @@
* Set the name of the constructor to the given [identifier].
*/
void set name(SimpleIdentifier identifier) {
- _name = becomeParentOf(identifier);
+ _name = _becomeParentOf(identifier);
}
/**
@@ -5681,7 +5538,7 @@
* [parameters].
*/
void set parameters(FormalParameterList parameters) {
- _parameters = becomeParentOf(parameters);
+ _parameters = _becomeParentOf(parameters);
}
/**
@@ -5695,7 +5552,7 @@
* redirected to the given [redirectedConstructor] name.
*/
void set redirectedConstructor(ConstructorName redirectedConstructor) {
- _redirectedConstructor = becomeParentOf(redirectedConstructor);
+ _redirectedConstructor = _becomeParentOf(redirectedConstructor);
}
/**
@@ -5709,7 +5566,7 @@
* Set the type of object being created to the given [typeName].
*/
void set returnType(Identifier typeName) {
- _returnType = becomeParentOf(typeName);
+ _returnType = _becomeParentOf(typeName);
}
@override
@@ -5737,7 +5594,7 @@
/**
* The token for the 'this' keyword, or `null` if there is no 'this' keyword.
*/
- Token keyword;
+ Token thisKeyword;
/**
* The token for the period after the 'this' keyword, or `null` if there is no
@@ -5762,30 +5619,30 @@
/**
* Initialize a newly created field initializer to initialize the field with
- * the given name to the value of the given expression. The [keyword] and
+ * the given name to the value of the given expression. The [thisKeyword] and
* [period] can be `null` if the 'this' keyword was not specified.
*/
- ConstructorFieldInitializer(this.keyword, this.period,
+ ConstructorFieldInitializer(this.thisKeyword, this.period,
SimpleIdentifier fieldName, this.equals, Expression expression) {
- _fieldName = becomeParentOf(fieldName);
- _expression = becomeParentOf(expression);
+ _fieldName = _becomeParentOf(fieldName);
+ _expression = _becomeParentOf(expression);
}
@override
Token get beginToken {
- if (keyword != null) {
- return keyword;
+ if (thisKeyword != null) {
+ return thisKeyword;
}
return _fieldName.beginToken;
}
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(period)
- ..add(_fieldName)
- ..add(equals)
- ..add(_expression);
+ ..add(thisKeyword)
+ ..add(period)
+ ..add(_fieldName)
+ ..add(equals)
+ ..add(_expression);
@override
Token get endToken => _expression.endToken;
@@ -5801,7 +5658,7 @@
* initialized to the given [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
/**
@@ -5813,7 +5670,22 @@
* Set the name of the field being initialized to the given [identifier].
*/
void set fieldName(SimpleIdentifier identifier) {
- _fieldName = becomeParentOf(identifier);
+ _fieldName = _becomeParentOf(identifier);
+ }
+
+ /**
+ * Return the token for the 'this' keyword, or `null` if there is no 'this'
+ * keyword.
+ */
+ @deprecated // Use "this.thisKeyword"
+ Token get keyword => thisKeyword;
+
+ /**
+ * Set the token for the 'this' keyword to the given [token].
+ */
+ @deprecated // Use "this.thisKeyword"
+ set keyword(Token token) {
+ thisKeyword = token;
}
@override
@@ -5833,8 +5705,7 @@
* > [SuperConstructorInvocation]
* > | [ConstructorFieldInitializer]
*/
-abstract class ConstructorInitializer extends AstNode {
-}
+abstract class ConstructorInitializer extends AstNode {}
/**
* The name of the constructor.
@@ -5872,8 +5743,8 @@
* `null` if the constructor being named is the unnamed constructor.
*/
ConstructorName(TypeName type, this.period, SimpleIdentifier name) {
- _type = becomeParentOf(type);
- _name = becomeParentOf(name);
+ _type = _becomeParentOf(type);
+ _name = _becomeParentOf(name);
}
@override
@@ -5881,9 +5752,9 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(_type)
- ..add(period)
- ..add(_name);
+ ..add(_type)
+ ..add(period)
+ ..add(_name);
@override
Token get endToken {
@@ -5903,7 +5774,7 @@
* Set the name of the constructor to the given [name].
*/
void set name(SimpleIdentifier name) {
- _name = becomeParentOf(name);
+ _name = _becomeParentOf(name);
}
/**
@@ -5915,7 +5786,7 @@
* Set the name of the type defining the constructor to the given [type] name.
*/
void set type(TypeName type) {
- _type = becomeParentOf(type);
+ _type = _becomeParentOf(type);
}
@override
@@ -5938,7 +5809,7 @@
/**
* The token representing the 'continue' keyword.
*/
- Token keyword;
+ Token continueKeyword;
/**
* The label associated with the statement, or `null` if there is no label.
@@ -5964,26 +5835,39 @@
* Initialize a newly created continue statement. The [label] can be `null` if
* there is no label associated with the statement.
*/
- ContinueStatement(this.keyword, SimpleIdentifier label, this.semicolon) {
- _label = becomeParentOf(label);
+ ContinueStatement(
+ this.continueKeyword, SimpleIdentifier label, this.semicolon) {
+ _label = _becomeParentOf(label);
}
@override
- Token get beginToken => keyword;
+ Token get beginToken => continueKeyword;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(_label)
- ..add(semicolon);
+ ..add(continueKeyword)
+ ..add(_label)
+ ..add(semicolon);
@override
Token get endToken => semicolon;
/**
+ * Return the token for the 'continue' keyword, or `null` if there is no
+ * 'continue' keyword.
+ */
+ @deprecated // Use "this.continueKeyword"
+ Token get keyword => continueKeyword;
+
+ /**
+ * Set the token for the 'continue' keyword to the given [token].
+ */
+ @deprecated // Use "this.continueKeyword"
+ set keyword(Token token) {
+ continueKeyword = token;
+ }
+
+ /**
* Return the label associated with the statement, or `null` if there is no
* label.
*/
@@ -5993,7 +5877,7 @@
* Set the label associated with the statement to the given [identifier].
*/
void set label(SimpleIdentifier identifier) {
- _label = becomeParentOf(identifier);
+ _label = _becomeParentOf(identifier);
}
@override
@@ -6059,18 +5943,15 @@
DeclaredIdentifier(Comment comment, List<Annotation> metadata, this.keyword,
TypeName type, SimpleIdentifier identifier)
: super(comment, metadata) {
- _type = becomeParentOf(type);
- _identifier = becomeParentOf(identifier);
+ _type = _becomeParentOf(type);
+ _identifier = _becomeParentOf(identifier);
}
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => super._childEntities
- ..add(keyword)
- ..add(_type)
- ..add(_identifier);
+ ..add(keyword)
+ ..add(_type)
+ ..add(_identifier);
@override
LocalVariableElement get element {
@@ -6102,22 +5983,22 @@
* Set the name of the variable being declared to the given [identifier].
*/
void set identifier(SimpleIdentifier identifier) {
- _identifier = becomeParentOf(identifier);
+ _identifier = _becomeParentOf(identifier);
}
/**
* Return `true` if this variable was declared with the 'const' modifier.
*/
- bool get isConst =>
- (keyword is KeywordToken) && (keyword as KeywordToken).keyword == Keyword.CONST;
+ bool get isConst => (keyword is KeywordToken) &&
+ (keyword as KeywordToken).keyword == Keyword.CONST;
/**
* Return `true` if this variable was declared with the 'final' modifier.
* Variables that are declared with the 'const' modifier will return `false`
* even though they are implicitly final.
*/
- bool get isFinal =>
- (keyword is KeywordToken) && (keyword as KeywordToken).keyword == Keyword.FINAL;
+ bool get isFinal => (keyword is KeywordToken) &&
+ (keyword as KeywordToken).keyword == Keyword.FINAL;
/**
* Return the name of the declared type of the parameter, or `null` if the
@@ -6129,7 +6010,7 @@
* Set the name of the declared type of the parameter to the given [typeName].
*/
void set type(TypeName typeName) {
- _type = becomeParentOf(typeName);
+ _type = _becomeParentOf(typeName);
}
@override
@@ -6183,21 +6064,18 @@
*/
DefaultFormalParameter(NormalFormalParameter parameter, this.kind,
this.separator, Expression defaultValue) {
- _parameter = becomeParentOf(parameter);
- _defaultValue = becomeParentOf(defaultValue);
+ _parameter = _becomeParentOf(parameter);
+ _defaultValue = _becomeParentOf(defaultValue);
}
@override
Token get beginToken => _parameter.beginToken;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..add(_parameter)
- ..add(separator)
- ..add(_defaultValue);
+ ..add(_parameter)
+ ..add(separator)
+ ..add(_defaultValue);
/**
* Return the expression computing the default value for the parameter, or
@@ -6210,7 +6088,7 @@
* given [expression].
*/
void set defaultValue(Expression expression) {
- _defaultValue = becomeParentOf(expression);
+ _defaultValue = _becomeParentOf(expression);
}
@override
@@ -6240,7 +6118,7 @@
* given [formalParameter].
*/
void set parameter(NormalFormalParameter formalParameter) {
- _parameter = becomeParentOf(formalParameter);
+ _parameter = _becomeParentOf(formalParameter);
}
@override
@@ -6364,8 +6242,8 @@
DoStatement(this.doKeyword, Statement body, this.whileKeyword,
this.leftParenthesis, Expression condition, this.rightParenthesis,
this.semicolon) {
- _body = becomeParentOf(body);
- _condition = becomeParentOf(condition);
+ _body = _becomeParentOf(body);
+ _condition = _becomeParentOf(condition);
}
@override
@@ -6380,18 +6258,18 @@
* Set the body of the loop to the given [statement].
*/
void set body(Statement statement) {
- _body = becomeParentOf(statement);
+ _body = _becomeParentOf(statement);
}
@override
Iterable get childEntities => new ChildEntities()
- ..add(doKeyword)
- ..add(_body)
- ..add(whileKeyword)
- ..add(leftParenthesis)
- ..add(_condition)
- ..add(rightParenthesis)
- ..add(semicolon);
+ ..add(doKeyword)
+ ..add(_body)
+ ..add(whileKeyword)
+ ..add(leftParenthesis)
+ ..add(_condition)
+ ..add(rightParenthesis)
+ ..add(semicolon);
/**
* Return the condition that determines when the loop will terminate.
@@ -6403,7 +6281,7 @@
* [expression].
*/
void set condition(Expression expression) {
- _condition = becomeParentOf(expression);
+ _condition = _becomeParentOf(expression);
}
@override
@@ -6438,7 +6316,7 @@
/**
* The value of the literal.
*/
- double value = 0.0;
+ double value;
/**
* Initialize a newly created floating point literal.
@@ -6448,9 +6326,6 @@
@override
Token get beginToken => literal;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()..add(literal);
@@ -6475,6 +6350,9 @@
* no element associated with the node.
*/
static Element locate(AstNode node) {
+ if (node == null) {
+ return null;
+ }
ElementLocator_ElementMapper mapper = new ElementLocator_ElementMapper();
return node.accept(mapper);
}
@@ -6484,6 +6362,8 @@
* no element associated with the node.
*/
static Element locateWithOffset(AstNode node, int offset) {
+ // TODO(brianwilkerson) 'offset' is not used. Figure out what's going on:
+ // whether there's a bug or whether this method is unnecessary.
if (node == null) {
return null;
}
@@ -6627,9 +6507,6 @@
@override
Token get beginToken => semicolon;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()..add(semicolon);
@@ -6665,9 +6542,6 @@
@override
Token get beginToken => semicolon;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()..add(semicolon);
@@ -6698,15 +6572,12 @@
* corresponding attribute. (Technically, enum constants cannot have metadata,
* but we allow it for consistency.)
*/
- EnumConstantDeclaration(Comment comment, List<Annotation> metadata,
- SimpleIdentifier name)
+ EnumConstantDeclaration(
+ Comment comment, List<Annotation> metadata, SimpleIdentifier name)
: super(comment, metadata) {
- _name = becomeParentOf(name);
+ _name = _becomeParentOf(name);
}
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => super._childEntities..add(_name);
@@ -6729,7 +6600,7 @@
* Set the name of the constant to the given [name].
*/
void set name(SimpleIdentifier name) {
- _name = becomeParentOf(name);
+ _name = _becomeParentOf(name);
}
@override
@@ -6752,7 +6623,7 @@
/**
* The 'enum' keyword.
*/
- Token keyword;
+ Token enumKeyword;
/**
* The name of the enumeration.
@@ -6780,24 +6651,22 @@
* corresponding attribute. The list of [constants] must contain at least one
* value.
*/
- EnumDeclaration(Comment comment, List<Annotation> metadata, this.keyword,
+ EnumDeclaration(Comment comment, List<Annotation> metadata, this.enumKeyword,
SimpleIdentifier name, this.leftBracket,
List<EnumConstantDeclaration> constants, this.rightBracket)
: super(comment, metadata) {
- _name = becomeParentOf(name);
+ _name = _becomeParentOf(name);
_constants = new NodeList<EnumConstantDeclaration>(this, constants);
}
- /**
- * TODO(paulberry): untested.
- */
@override
+ // TODO(brianwilkerson) Add commas?
Iterable get childEntities => super._childEntities
- ..add(keyword)
- ..add(_name)
- ..add(leftBracket)
- ..addAll(_constants)
- ..add(rightBracket);
+ ..add(enumKeyword)
+ ..add(_name)
+ ..add(leftBracket)
+ ..addAll(_constants)
+ ..add(rightBracket);
/**
* Return the enumeration constants being declared.
@@ -6812,7 +6681,22 @@
Token get endToken => rightBracket;
@override
- Token get firstTokenAfterCommentAndMetadata => keyword;
+ Token get firstTokenAfterCommentAndMetadata => enumKeyword;
+
+ /**
+ * Return the token for the 'enum' keyword, or `null` if there is no
+ * 'enum' keyword.
+ */
+ @deprecated // Use "this.enumKeyword"
+ Token get keyword => enumKeyword;
+
+ /**
+ * Set the token for the 'enum' keyword to the given [token].
+ */
+ @deprecated // Use "this.enumKeyword"
+ set keyword(Token token) {
+ enumKeyword = token;
+ }
/**
* Return the name of the enumeration.
@@ -6823,7 +6707,7 @@
* Set the name of the enumeration to the given [name].
*/
void set name(SimpleIdentifier name) {
- _name = becomeParentOf(name);
+ _name = _becomeParentOf(name);
}
@override
@@ -6844,7 +6728,7 @@
class EphemeralIdentifier extends SimpleIdentifier {
EphemeralIdentifier(AstNode parent, int location)
: super(new StringToken(TokenType.IDENTIFIER, "", location)) {
- parent.becomeParentOf(this);
+ parent._becomeParentOf(this);
}
}
@@ -6867,9 +6751,9 @@
@override
Iterable get childEntities => super._childEntities
- ..add(_uri)
- ..addAll(combinators)
- ..add(semicolon);
+ ..add(_uri)
+ ..addAll(combinators)
+ ..add(semicolon);
@override
ExportElement get element => super.element as ExportElement;
@@ -6904,7 +6788,13 @@
/**
* An empty list of expressions.
*/
- static const List<Expression> EMPTY_ARRAY = const <Expression>[];
+ @deprecated // Use "Expression.EMPTY_LIST"
+ static const List<Expression> EMPTY_ARRAY = EMPTY_LIST;
+
+ /**
+ * An empty list of expressions.
+ */
+ static const List<Expression> EMPTY_LIST = const <Expression>[];
/**
* The static type of this expression, or `null` if the AST structure has not
@@ -6977,26 +6867,26 @@
ParameterElement get propagatedParameterElement {
AstNode parent = this.parent;
if (parent is ArgumentList) {
- return parent.getPropagatedParameterElementFor(this);
+ return parent._getPropagatedParameterElementFor(this);
} else if (parent is IndexExpression) {
IndexExpression indexExpression = parent;
if (identical(indexExpression.index, this)) {
- return indexExpression.propagatedParameterElementForIndex;
+ return indexExpression._propagatedParameterElementForIndex;
}
} else if (parent is BinaryExpression) {
BinaryExpression binaryExpression = parent;
if (identical(binaryExpression.rightOperand, this)) {
- return binaryExpression.propagatedParameterElementForRightOperand;
+ return binaryExpression._propagatedParameterElementForRightOperand;
}
} else if (parent is AssignmentExpression) {
AssignmentExpression assignmentExpression = parent;
if (identical(assignmentExpression.rightHandSide, this)) {
- return assignmentExpression.propagatedParameterElementForRightHandSide;
+ return assignmentExpression._propagatedParameterElementForRightHandSide;
}
} else if (parent is PrefixExpression) {
- return parent.propagatedParameterElementForOperand;
+ return parent._propagatedParameterElementForOperand;
} else if (parent is PostfixExpression) {
- return parent.propagatedParameterElementForOperand;
+ return parent._propagatedParameterElementForOperand;
}
return null;
}
@@ -7012,26 +6902,26 @@
ParameterElement get staticParameterElement {
AstNode parent = this.parent;
if (parent is ArgumentList) {
- return parent.getStaticParameterElementFor(this);
+ return parent._getStaticParameterElementFor(this);
} else if (parent is IndexExpression) {
IndexExpression indexExpression = parent;
if (identical(indexExpression.index, this)) {
- return indexExpression.staticParameterElementForIndex;
+ return indexExpression._staticParameterElementForIndex;
}
} else if (parent is BinaryExpression) {
BinaryExpression binaryExpression = parent;
if (identical(binaryExpression.rightOperand, this)) {
- return binaryExpression.staticParameterElementForRightOperand;
+ return binaryExpression._staticParameterElementForRightOperand;
}
} else if (parent is AssignmentExpression) {
AssignmentExpression assignmentExpression = parent;
if (identical(assignmentExpression.rightHandSide, this)) {
- return assignmentExpression.staticParameterElementForRightHandSide;
+ return assignmentExpression._staticParameterElementForRightHandSide;
}
} else if (parent is PrefixExpression) {
- return parent.staticParameterElementForOperand;
+ return parent._staticParameterElementForOperand;
} else if (parent is PostfixExpression) {
- return parent.staticParameterElementForOperand;
+ return parent._staticParameterElementForOperand;
}
return null;
}
@@ -7073,18 +6963,23 @@
*/
ExpressionFunctionBody(this.keyword, this.functionDefinition,
Expression expression, this.semicolon) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
@override
- Token get beginToken => functionDefinition;
+ Token get beginToken {
+ if (keyword != null) {
+ return keyword;
+ }
+ return functionDefinition;
+ }
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(functionDefinition)
- ..add(_expression)
- ..add(semicolon);
+ ..add(keyword)
+ ..add(functionDefinition)
+ ..add(_expression)
+ ..add(semicolon);
@override
Token get endToken {
@@ -7104,7 +6999,7 @@
* [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
@override
@@ -7144,7 +7039,7 @@
* Initialize a newly created expression statement.
*/
ExpressionStatement(Expression expression, this.semicolon) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
@override
@@ -7152,8 +7047,8 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(_expression)
- ..add(semicolon);
+ ..add(_expression)
+ ..add(semicolon);
@override
Token get endToken {
@@ -7172,7 +7067,7 @@
* Set the expression that comprises the statement to the given [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
@override
@@ -7197,7 +7092,7 @@
/**
* The token representing the 'extends' keyword.
*/
- Token keyword;
+ Token extendsKeyword;
/**
* The name of the class that is being extended.
@@ -7207,22 +7102,36 @@
/**
* Initialize a newly created extends clause.
*/
- ExtendsClause(this.keyword, TypeName superclass) {
- _superclass = becomeParentOf(superclass);
+ ExtendsClause(this.extendsKeyword, TypeName superclass) {
+ _superclass = _becomeParentOf(superclass);
}
@override
- Token get beginToken => keyword;
+ Token get beginToken => extendsKeyword;
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(_superclass);
+ ..add(extendsKeyword)
+ ..add(_superclass);
@override
Token get endToken => _superclass.endToken;
/**
+ * Return the token for the 'extends' keyword.
+ */
+ @deprecated // Use "this.extendsKeyword"
+ Token get keyword => extendsKeyword;
+
+ /**
+ * Set the token for the 'extends' keyword to the given [token].
+ */
+ @deprecated // Use "this.extendsKeyword"
+ set keyword(Token token) {
+ extendsKeyword = token;
+ }
+
+ /**
* Return the name of the class that is being extended.
*/
TypeName get superclass => _superclass;
@@ -7231,7 +7140,7 @@
* Set the name of the class that is being extended to the given [name].
*/
void set superclass(TypeName name) {
- _superclass = becomeParentOf(name);
+ _superclass = _becomeParentOf(name);
}
@override
@@ -7275,14 +7184,14 @@
FieldDeclaration(Comment comment, List<Annotation> metadata,
this.staticKeyword, VariableDeclarationList fieldList, this.semicolon)
: super(comment, metadata) {
- _fieldList = becomeParentOf(fieldList);
+ _fieldList = _becomeParentOf(fieldList);
}
@override
Iterable get childEntities => super._childEntities
- ..add(staticKeyword)
- ..add(_fieldList)
- ..add(semicolon);
+ ..add(staticKeyword)
+ ..add(_fieldList)
+ ..add(semicolon);
@override
Element get element => null;
@@ -7299,7 +7208,7 @@
* Set the fields being declared to the given list of [fields].
*/
void set fields(VariableDeclarationList fields) {
- _fieldList = becomeParentOf(fields);
+ _fieldList = _becomeParentOf(fields);
}
@override
@@ -7348,7 +7257,7 @@
/**
* The token representing the 'this' keyword.
*/
- Token thisToken;
+ Token thisKeyword;
/**
* The token representing the period.
@@ -7365,17 +7274,17 @@
* Initialize a newly created formal parameter. Either or both of the
* [comment] and [metadata] can be `null` if the parameter does not have the
* corresponding attribute. The [keyword] can be `null` if there is a type.
- * The [type] must be `null` if the keyword is 'var'. The [thisToken] and
+ * The [type] must be `null` if the keyword is 'var'. The [thisKeyword] and
* [period] can be `null` if the keyword 'this' was not provided. The
* [parameters] can be `null` if this is not a function-typed field formal
* parameter.
*/
FieldFormalParameter(Comment comment, List<Annotation> metadata, this.keyword,
- TypeName type, this.thisToken, this.period, SimpleIdentifier identifier,
+ TypeName type, this.thisKeyword, this.period, SimpleIdentifier identifier,
FormalParameterList parameters)
: super(comment, metadata, identifier) {
- _type = becomeParentOf(type);
- _parameters = becomeParentOf(parameters);
+ _type = _becomeParentOf(type);
+ _parameters = _becomeParentOf(parameters);
}
@override
@@ -7385,17 +7294,17 @@
} else if (_type != null) {
return _type.beginToken;
}
- return thisToken;
+ return thisKeyword;
}
@override
Iterable get childEntities => super._childEntities
- ..add(keyword)
- ..add(_type)
- ..add(thisToken)
- ..add(period)
- ..add(identifier)
- ..add(_parameters);
+ ..add(keyword)
+ ..add(_type)
+ ..add(thisKeyword)
+ ..add(period)
+ ..add(identifier)
+ ..add(_parameters);
@override
Token get endToken {
@@ -7406,12 +7315,12 @@
}
@override
- bool get isConst =>
- (keyword is KeywordToken) && (keyword as KeywordToken).keyword == Keyword.CONST;
+ bool get isConst => (keyword is KeywordToken) &&
+ (keyword as KeywordToken).keyword == Keyword.CONST;
@override
- bool get isFinal =>
- (keyword is KeywordToken) && (keyword as KeywordToken).keyword == Keyword.FINAL;
+ bool get isFinal => (keyword is KeywordToken) &&
+ (keyword as KeywordToken).keyword == Keyword.FINAL;
/**
* Return the parameters of the function-typed parameter, or `null` if this is
@@ -7424,7 +7333,21 @@
* [parameters].
*/
void set parameters(FormalParameterList parameters) {
- _parameters = becomeParentOf(parameters);
+ _parameters = _becomeParentOf(parameters);
+ }
+
+ /**
+ * Return the token representing the 'this' keyword.
+ */
+ @deprecated // Use "this.thisKeyword"
+ Token get thisToken => thisKeyword;
+
+ /**
+ * Set the token representing the 'this' keyword to the given [token].
+ */
+ @deprecated // Use "this.thisKeyword"
+ set thisToken(Token token) {
+ thisKeyword = token;
}
/**
@@ -7439,7 +7362,7 @@
* Set the name of the declared type of the parameter to the given [typeName].
*/
void set type(TypeName typeName) {
- _type = becomeParentOf(typeName);
+ _type = _becomeParentOf(typeName);
}
@override
@@ -7516,9 +7439,9 @@
ForEachStatement.con1(this.awaitKeyword, this.forKeyword,
this.leftParenthesis, DeclaredIdentifier loopVariable, this.inKeyword,
Expression iterator, this.rightParenthesis, Statement body) {
- _loopVariable = becomeParentOf(loopVariable);
- _iterable = becomeParentOf(iterator);
- _body = becomeParentOf(body);
+ _loopVariable = _becomeParentOf(loopVariable);
+ _iterable = _becomeParentOf(iterator);
+ _body = _becomeParentOf(body);
}
/**
@@ -7528,9 +7451,9 @@
ForEachStatement.con2(this.awaitKeyword, this.forKeyword,
this.leftParenthesis, SimpleIdentifier identifier, this.inKeyword,
Expression iterator, this.rightParenthesis, Statement body) {
- _identifier = becomeParentOf(identifier);
- _iterable = becomeParentOf(iterator);
- _body = becomeParentOf(body);
+ _identifier = _becomeParentOf(identifier);
+ _iterable = _becomeParentOf(iterator);
+ _body = _becomeParentOf(body);
}
@override
@@ -7545,20 +7468,20 @@
* Set the body of the loop to the given [statement].
*/
void set body(Statement statement) {
- _body = becomeParentOf(statement);
+ _body = _becomeParentOf(statement);
}
@override
Iterable get childEntities => new ChildEntities()
- ..add(awaitKeyword)
- ..add(forKeyword)
- ..add(leftParenthesis)
- ..add(_loopVariable)
- ..add(_identifier)
- ..add(inKeyword)
- ..add(_iterable)
- ..add(rightParenthesis)
- ..add(_body);
+ ..add(awaitKeyword)
+ ..add(forKeyword)
+ ..add(leftParenthesis)
+ ..add(_loopVariable)
+ ..add(_identifier)
+ ..add(inKeyword)
+ ..add(_iterable)
+ ..add(rightParenthesis)
+ ..add(_body);
@override
Token get endToken => _body.endToken;
@@ -7573,7 +7496,7 @@
* Set the loop variable to the given [identifier].
*/
void set identifier(SimpleIdentifier identifier) {
- _identifier = becomeParentOf(identifier);
+ _identifier = _becomeParentOf(identifier);
}
/**
@@ -7586,15 +7509,13 @@
* [expression].
*/
void set iterable(Expression expression) {
- _iterable = becomeParentOf(expression);
+ _iterable = _becomeParentOf(expression);
}
/**
* Return the expression evaluated to produce the iterator.
- *
- * Deprecated, use [iterable] instead.
*/
- @deprecated
+ @deprecated // Use "this.iterable"
Expression get iterator => iterable;
/**
@@ -7607,7 +7528,7 @@
* Set the declaration of the loop variable to the given [variable].
*/
void set loopVariable(DeclaredIdentifier variable) {
- _loopVariable = becomeParentOf(variable);
+ _loopVariable = _becomeParentOf(variable);
}
@override
@@ -7711,7 +7632,7 @@
Token leftDelimiter;
/**
- * The right square bracket (']') or right curly brace ('}') introducing the
+ * The right square bracket (']') or right curly brace ('}') terminating the
* optional parameters, or `null` if there are no optional parameters.
*/
Token rightDelimiter;
@@ -7747,8 +7668,8 @@
result.add(parameter);
}
return result
- ..add(rightDelimiter)
- ..add(rightParenthesis);
+ ..add(rightDelimiter)
+ ..add(rightParenthesis);
}
@override
@@ -7861,11 +7782,11 @@
VariableDeclarationList variableList, Expression initialization,
this.leftSeparator, Expression condition, this.rightSeparator,
List<Expression> updaters, this.rightParenthesis, Statement body) {
- _variableList = becomeParentOf(variableList);
- _initialization = becomeParentOf(initialization);
- _condition = becomeParentOf(condition);
+ _variableList = _becomeParentOf(variableList);
+ _initialization = _becomeParentOf(initialization);
+ _condition = _becomeParentOf(condition);
_updaters = new NodeList<Expression>(this, updaters);
- _body = becomeParentOf(body);
+ _body = _becomeParentOf(body);
}
@override
@@ -7880,21 +7801,21 @@
* Set the body of the loop to the given [statement].
*/
void set body(Statement statement) {
- _body = becomeParentOf(statement);
+ _body = _becomeParentOf(statement);
}
@override
Iterable get childEntities => new ChildEntities()
- ..add(forKeyword)
- ..add(leftParenthesis)
- ..add(_variableList)
- ..add(_initialization)
- ..add(leftSeparator)
- ..add(_condition)
- ..add(rightSeparator)
- ..addAll(_updaters)
- ..add(rightParenthesis)
- ..add(_body);
+ ..add(forKeyword)
+ ..add(leftParenthesis)
+ ..add(_variableList)
+ ..add(_initialization)
+ ..add(leftSeparator)
+ ..add(_condition)
+ ..add(rightSeparator)
+ ..addAll(_updaters)
+ ..add(rightParenthesis)
+ ..add(_body);
/**
* Return the condition used to determine when to terminate the loop, or
@@ -7907,7 +7828,7 @@
* [expression].
*/
void set condition(Expression expression) {
- _condition = becomeParentOf(expression);
+ _condition = _becomeParentOf(expression);
}
@override
@@ -7923,7 +7844,7 @@
* Set the initialization expression to the given [expression].
*/
void set initialization(Expression initialization) {
- _initialization = becomeParentOf(initialization);
+ _initialization = _becomeParentOf(initialization);
}
/**
@@ -7941,7 +7862,7 @@
* Set the declaration of the loop variables to the given [variableList].
*/
void set variables(VariableDeclarationList variableList) {
- _variableList = becomeParentOf(variableList);
+ _variableList = _becomeParentOf(variableList);
}
@override
@@ -8044,18 +7965,18 @@
this.externalKeyword, TypeName returnType, this.propertyKeyword,
SimpleIdentifier name, FunctionExpression functionExpression)
: super(comment, metadata) {
- _returnType = becomeParentOf(returnType);
- _name = becomeParentOf(name);
- _functionExpression = becomeParentOf(functionExpression);
+ _returnType = _becomeParentOf(returnType);
+ _name = _becomeParentOf(name);
+ _functionExpression = _becomeParentOf(functionExpression);
}
@override
Iterable get childEntities => super._childEntities
- ..add(externalKeyword)
- ..add(_returnType)
- ..add(propertyKeyword)
- ..add(_name)
- ..add(_functionExpression);
+ ..add(externalKeyword)
+ ..add(_returnType)
+ ..add(propertyKeyword)
+ ..add(_name)
+ ..add(_functionExpression);
@override
ExecutableElement get element =>
@@ -8088,22 +8009,20 @@
* [functionExpression].
*/
void set functionExpression(FunctionExpression functionExpression) {
- _functionExpression = becomeParentOf(functionExpression);
+ _functionExpression = _becomeParentOf(functionExpression);
}
/**
* Return `true` if this function declares a getter.
*/
- bool get isGetter =>
- propertyKeyword != null &&
- (propertyKeyword as KeywordToken).keyword == Keyword.GET;
+ bool get isGetter => propertyKeyword != null &&
+ (propertyKeyword as KeywordToken).keyword == Keyword.GET;
/**
* Return `true` if this function declares a setter.
*/
- bool get isSetter =>
- propertyKeyword != null &&
- (propertyKeyword as KeywordToken).keyword == Keyword.SET;
+ bool get isSetter => propertyKeyword != null &&
+ (propertyKeyword as KeywordToken).keyword == Keyword.SET;
/**
* Return the name of the function, or `null` if the function is not named.
@@ -8114,7 +8033,7 @@
* Set the name of the function to the given [identifier].
*/
void set name(SimpleIdentifier identifier) {
- _name = becomeParentOf(identifier);
+ _name = _becomeParentOf(identifier);
}
/**
@@ -8127,7 +8046,7 @@
* Set the return type of the function to the given [returnType].
*/
void set returnType(TypeName returnType) {
- _returnType = becomeParentOf(returnType);
+ _returnType = _becomeParentOf(returnType);
}
@override
@@ -8155,7 +8074,7 @@
* Initialize a newly created function declaration statement.
*/
FunctionDeclarationStatement(FunctionDeclaration functionDeclaration) {
- _functionDeclaration = becomeParentOf(functionDeclaration);
+ _functionDeclaration = _becomeParentOf(functionDeclaration);
}
@override
@@ -8177,7 +8096,7 @@
* [functionDeclaration].
*/
void set functionDeclaration(FunctionDeclaration functionDeclaration) {
- _functionDeclaration = becomeParentOf(functionDeclaration);
+ _functionDeclaration = _becomeParentOf(functionDeclaration);
}
@override
@@ -8216,8 +8135,8 @@
* Initialize a newly created function declaration.
*/
FunctionExpression(FormalParameterList parameters, FunctionBody body) {
- _parameters = becomeParentOf(parameters);
- _body = becomeParentOf(body);
+ _parameters = _becomeParentOf(parameters);
+ _body = _becomeParentOf(body);
}
@override
@@ -8241,13 +8160,13 @@
* Set the body of the function to the given [functionBody].
*/
void set body(FunctionBody functionBody) {
- _body = becomeParentOf(functionBody);
+ _body = _becomeParentOf(functionBody);
}
@override
Iterable get childEntities => new ChildEntities()
- ..add(_parameters)
- ..add(_body);
+ ..add(_parameters)
+ ..add(_body);
@override
Token get endToken {
@@ -8271,7 +8190,7 @@
* [parameters].
*/
void set parameters(FormalParameterList parameters) {
- _parameters = becomeParentOf(parameters);
+ _parameters = _becomeParentOf(parameters);
}
@override
@@ -8325,8 +8244,8 @@
* Initialize a newly created function expression invocation.
*/
FunctionExpressionInvocation(Expression function, ArgumentList argumentList) {
- _function = becomeParentOf(function);
- _argumentList = becomeParentOf(argumentList);
+ _function = _becomeParentOf(function);
+ _argumentList = _becomeParentOf(argumentList);
}
/**
@@ -8338,7 +8257,7 @@
* Set the list of arguments to the method to the given [argumentList].
*/
void set argumentList(ArgumentList argumentList) {
- _argumentList = becomeParentOf(argumentList);
+ _argumentList = _becomeParentOf(argumentList);
}
@override
@@ -8359,13 +8278,10 @@
return element;
}
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..add(_function)
- ..add(_argumentList);
+ ..add(_function)
+ ..add(_argumentList);
@override
Token get endToken => _argumentList.endToken;
@@ -8380,7 +8296,7 @@
* [expression].
*/
void set function(Expression expression) {
- _function = becomeParentOf(expression);
+ _function = _becomeParentOf(expression);
}
@override
@@ -8436,23 +8352,24 @@
* type parameters.
*/
FunctionTypeAlias(Comment comment, List<Annotation> metadata, Token keyword,
- TypeName returnType, SimpleIdentifier name, TypeParameterList typeParameters,
- FormalParameterList parameters, Token semicolon)
+ TypeName returnType, SimpleIdentifier name,
+ TypeParameterList typeParameters, FormalParameterList parameters,
+ Token semicolon)
: super(comment, metadata, keyword, semicolon) {
- _returnType = becomeParentOf(returnType);
- _name = becomeParentOf(name);
- _typeParameters = becomeParentOf(typeParameters);
- _parameters = becomeParentOf(parameters);
+ _returnType = _becomeParentOf(returnType);
+ _name = _becomeParentOf(name);
+ _typeParameters = _becomeParentOf(typeParameters);
+ _parameters = _becomeParentOf(parameters);
}
@override
Iterable get childEntities => super._childEntities
- ..add(keyword)
- ..add(_returnType)
- ..add(_name)
- ..add(_typeParameters)
- ..add(_parameters)
- ..add(semicolon);
+ ..add(typedefKeyword)
+ ..add(_returnType)
+ ..add(_name)
+ ..add(_typeParameters)
+ ..add(_parameters)
+ ..add(semicolon);
@override
FunctionTypeAliasElement get element =>
@@ -8467,7 +8384,7 @@
* Set the name of the function type being declared to the given [name].
*/
void set name(SimpleIdentifier name) {
- _name = becomeParentOf(name);
+ _name = _becomeParentOf(name);
}
/**
@@ -8480,7 +8397,7 @@
* [parameters].
*/
void set parameters(FormalParameterList parameters) {
- _parameters = becomeParentOf(parameters);
+ _parameters = _becomeParentOf(parameters);
}
/**
@@ -8494,7 +8411,7 @@
* given [typeName].
*/
void set returnType(TypeName typeName) {
- _returnType = becomeParentOf(typeName);
+ _returnType = _becomeParentOf(typeName);
}
/**
@@ -8508,7 +8425,7 @@
* [typeParameters].
*/
void set typeParameters(TypeParameterList typeParameters) {
- _typeParameters = becomeParentOf(typeParameters);
+ _typeParameters = _becomeParentOf(typeParameters);
}
@override
@@ -8552,8 +8469,8 @@
TypeName returnType, SimpleIdentifier identifier,
FormalParameterList parameters)
: super(comment, metadata, identifier) {
- _returnType = becomeParentOf(returnType);
- _parameters = becomeParentOf(parameters);
+ _returnType = _becomeParentOf(returnType);
+ _parameters = _becomeParentOf(parameters);
}
@override
@@ -8564,14 +8481,11 @@
return identifier.beginToken;
}
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => super._childEntities
- ..add(_returnType)
- ..add(identifier)
- ..add(parameters);
+ ..add(_returnType)
+ ..add(identifier)
+ ..add(parameters);
@override
Token get endToken => _parameters.endToken;
@@ -8592,7 +8506,7 @@
* [parameters].
*/
void set parameters(FormalParameterList parameters) {
- _parameters = becomeParentOf(parameters);
+ _parameters = _becomeParentOf(parameters);
}
/**
@@ -8605,7 +8519,7 @@
* Set the return type of the function to the given [type].
*/
void set returnType(TypeName type) {
- _returnType = becomeParentOf(type);
+ _returnType = _becomeParentOf(type);
}
@override
@@ -8926,8 +8840,8 @@
R visitPropertyAccess(PropertyAccess node) => visitExpression(node);
@override
- R
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) =>
+ R visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) =>
visitConstructorInitializer(node);
@override
@@ -9038,8 +8952,8 @@
R visitYieldStatement(YieldStatement node) => visitStatement(node);
}
-class GeneralizingAstVisitor_BreadthFirstVisitor extends
- GeneralizingAstVisitor<Object> {
+class GeneralizingAstVisitor_BreadthFirstVisitor
+ extends GeneralizingAstVisitor<Object> {
final BreadthFirstVisitor BreadthFirstVisitor_this;
GeneralizingAstVisitor_BreadthFirstVisitor(this.BreadthFirstVisitor_this)
@@ -9075,8 +8989,8 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..addAll(_hiddenNames);
+ ..add(keyword)
+ ..addAll(_hiddenNames);
@override
Token get endToken => _hiddenNames.endToken;
@@ -9196,9 +9110,9 @@
IfStatement(this.ifKeyword, this.leftParenthesis, Expression condition,
this.rightParenthesis, Statement thenStatement, this.elseKeyword,
Statement elseStatement) {
- _condition = becomeParentOf(condition);
- _thenStatement = becomeParentOf(thenStatement);
- _elseStatement = becomeParentOf(elseStatement);
+ _condition = _becomeParentOf(condition);
+ _thenStatement = _becomeParentOf(thenStatement);
+ _elseStatement = _becomeParentOf(elseStatement);
}
@override
@@ -9206,13 +9120,13 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(ifKeyword)
- ..add(leftParenthesis)
- ..add(_condition)
- ..add(rightParenthesis)
- ..add(_thenStatement)
- ..add(elseKeyword)
- ..add(_elseStatement);
+ ..add(ifKeyword)
+ ..add(leftParenthesis)
+ ..add(_condition)
+ ..add(rightParenthesis)
+ ..add(_thenStatement)
+ ..add(elseKeyword)
+ ..add(_elseStatement);
/**
* Return the condition used to determine which of the statements is executed
@@ -9225,7 +9139,7 @@
* next to the given [expression].
*/
void set condition(Expression expression) {
- _condition = becomeParentOf(expression);
+ _condition = _becomeParentOf(expression);
}
/**
@@ -9239,7 +9153,7 @@
* to the given [statement].
*/
void set elseStatement(Statement statement) {
- _elseStatement = becomeParentOf(statement);
+ _elseStatement = _becomeParentOf(statement);
}
@override
@@ -9260,7 +9174,7 @@
* the given [statement].
*/
void set thenStatement(Statement statement) {
- _thenStatement = becomeParentOf(statement);
+ _thenStatement = _becomeParentOf(statement);
}
@override
@@ -9284,7 +9198,7 @@
/**
* The token representing the 'implements' keyword.
*/
- Token keyword;
+ Token implementsKeyword;
/**
* The interfaces that are being implemented.
@@ -9294,20 +9208,20 @@
/**
* Initialize a newly created implements clause.
*/
- ImplementsClause(this.keyword, List<TypeName> interfaces) {
+ ImplementsClause(this.implementsKeyword, List<TypeName> interfaces) {
_interfaces = new NodeList<TypeName>(this, interfaces);
}
@override
- Token get beginToken => keyword;
+ Token get beginToken => implementsKeyword;
/**
* TODO(paulberry): add commas.
*/
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..addAll(interfaces);
+ ..add(implementsKeyword)
+ ..addAll(interfaces);
@override
Token get endToken => _interfaces.endToken;
@@ -9317,6 +9231,20 @@
*/
NodeList<TypeName> get interfaces => _interfaces;
+ /**
+ * Return the token representing the 'implements' keyword.
+ */
+ @deprecated // Use "this.implementsKeyword"
+ Token get keyword => implementsKeyword;
+
+ /**
+ * Set the token representing the 'implements' keyword to the given [token].
+ */
+ @deprecated // Use "this.implementsKeyword"
+ set keyword(Token token) {
+ implementsKeyword = token;
+ }
+
@override
accept(AstVisitor visitor) => visitor.visitImplementsClause(this);
@@ -9334,8 +9262,8 @@
* > | [Annotation] 'import' [StringLiteral] 'deferred' 'as' identifier [Combinator]* ';'
*/
class ImportDirective extends NamespaceDirective {
- static Comparator<ImportDirective> COMPARATOR =
- (ImportDirective import1, ImportDirective import2) {
+ static Comparator<ImportDirective> COMPARATOR = (ImportDirective import1,
+ ImportDirective import2) {
//
// uri
//
@@ -9429,16 +9357,16 @@
};
/**
- * The token representing the 'deferred' token, or `null` if the imported is
+ * The token representing the 'deferred' keyword, or `null` if the imported is
* not deferred.
*/
- Token deferredToken;
+ Token deferredKeyword;
/**
- * The token representing the 'as' token, or `null` if the imported names are
+ * The token representing the 'as' keyword, or `null` if the imported names are
* not prefixed.
*/
- Token asToken;
+ Token asKeyword;
/**
* The prefix to be used with the imported names, or `null` if the imported
@@ -9449,26 +9377,56 @@
/**
* Initialize a newly created import directive. Either or both of the
* [comment] and [metadata] can be `null` if the function does not have the
- * corresponding attribute. The [deferredToken] can be `null` if the import is
- * not deferred. The [asToken] and [prefix] can be `null` if the import does
- * not specify a prefix. The list of [combinators] can be `null` if there are
- * no combinators.
+ * corresponding attribute. The [deferredKeyword] can be `null` if the import
+ * is not deferred. The [asKeyword] and [prefix] can be `null` if the import
+ * does not specify a prefix. The list of [combinators] can be `null` if there
+ * are no combinators.
*/
ImportDirective(Comment comment, List<Annotation> metadata, Token keyword,
- StringLiteral libraryUri, this.deferredToken, this.asToken,
+ StringLiteral libraryUri, this.deferredKeyword, this.asKeyword,
SimpleIdentifier prefix, List<Combinator> combinators, Token semicolon)
: super(comment, metadata, keyword, libraryUri, combinators, semicolon) {
- _prefix = becomeParentOf(prefix);
+ _prefix = _becomeParentOf(prefix);
+ }
+
+ /**
+ * The token representing the 'as' token, or `null` if the imported names are
+ * not prefixed.
+ */
+ @deprecated // Use "this.asKeyword"
+ Token get asToken => asKeyword;
+
+ /**
+ * The token representing the 'as' token to the given token.
+ */
+ @deprecated // Use "this.asKeyword"
+ set asToken(Token token) {
+ asKeyword = token;
}
@override
Iterable get childEntities => super._childEntities
- ..add(_uri)
- ..add(deferredToken)
- ..add(asToken)
- ..add(_prefix)
- ..addAll(combinators)
- ..add(semicolon);
+ ..add(_uri)
+ ..add(deferredKeyword)
+ ..add(asKeyword)
+ ..add(_prefix)
+ ..addAll(combinators)
+ ..add(semicolon);
+
+ /**
+ * Return the token representing the 'deferred' token, or `null` if the
+ * imported is not deferred.
+ */
+ @deprecated // Use "this.deferredKeyword"
+ Token get deferredToken => deferredKeyword;
+
+ /**
+ * Set the token representing the 'deferred' token to the given token.
+ */
+ @deprecated // Use "this.deferredKeyword"
+ set deferredToken(Token token) {
+ deferredKeyword = token;
+ }
@override
ImportElement get element => super.element as ImportElement;
@@ -9483,7 +9441,7 @@
* Set the prefix to be used with the imported names to the given [identifier].
*/
void set prefix(SimpleIdentifier identifier) {
- _prefix = becomeParentOf(identifier);
+ _prefix = _becomeParentOf(identifier);
}
@override
@@ -9541,48 +9499,37 @@
@override
Annotation visitAnnotation(Annotation node) {
- Annotation copy = new Annotation(
- _mapToken(node.atSign),
- _cloneNode(node.name),
- _mapToken(node.period),
- _cloneNode(node.constructorName),
- _cloneNode(node.arguments));
+ Annotation copy = new Annotation(_mapToken(node.atSign),
+ _cloneNode(node.name), _mapToken(node.period),
+ _cloneNode(node.constructorName), _cloneNode(node.arguments));
copy.element = node.element;
return copy;
}
@override
- ArgumentList visitArgumentList(ArgumentList node) =>
- new ArgumentList(
- _mapToken(node.leftParenthesis),
- _cloneNodeList(node.arguments),
- _mapToken(node.rightParenthesis));
+ ArgumentList visitArgumentList(ArgumentList node) => new ArgumentList(
+ _mapToken(node.leftParenthesis), _cloneNodeList(node.arguments),
+ _mapToken(node.rightParenthesis));
@override
AsExpression visitAsExpression(AsExpression node) {
- AsExpression copy = new AsExpression(
- _cloneNode(node.expression),
- _mapToken(node.asOperator),
- _cloneNode(node.type));
+ AsExpression copy = new AsExpression(_cloneNode(node.expression),
+ _mapToken(node.asOperator), _cloneNode(node.type));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
@override
- AstNode visitAssertStatement(AssertStatement node) =>
- new AssertStatement(
- _mapToken(node.keyword),
- _mapToken(node.leftParenthesis),
- _cloneNode(node.condition),
- _mapToken(node.rightParenthesis),
- _mapToken(node.semicolon));
+ AstNode visitAssertStatement(AssertStatement node) => new AssertStatement(
+ _mapToken(node.assertKeyword), _mapToken(node.leftParenthesis),
+ _cloneNode(node.condition), _mapToken(node.rightParenthesis),
+ _mapToken(node.semicolon));
@override
AssignmentExpression visitAssignmentExpression(AssignmentExpression node) {
AssignmentExpression copy = new AssignmentExpression(
- _cloneNode(node.leftHandSide),
- _mapToken(node.operator),
+ _cloneNode(node.leftHandSide), _mapToken(node.operator),
_cloneNode(node.rightHandSide));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
@@ -9593,14 +9540,13 @@
@override
AwaitExpression visitAwaitExpression(AwaitExpression node) =>
- new AwaitExpression(_mapToken(node.awaitKeyword), _cloneNode(node.expression));
+ new AwaitExpression(
+ _mapToken(node.awaitKeyword), _cloneNode(node.expression));
@override
BinaryExpression visitBinaryExpression(BinaryExpression node) {
- BinaryExpression copy = new BinaryExpression(
- _cloneNode(node.leftOperand),
- _mapToken(node.operator),
- _cloneNode(node.rightOperand));
+ BinaryExpression copy = new BinaryExpression(_cloneNode(node.leftOperand),
+ _mapToken(node.operator), _cloneNode(node.rightOperand));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -9609,18 +9555,13 @@
}
@override
- Block visitBlock(Block node) =>
- new Block(
- _mapToken(node.leftBracket),
- _cloneNodeList(node.statements),
- _mapToken(node.rightBracket));
+ Block visitBlock(Block node) => new Block(_mapToken(node.leftBracket),
+ _cloneNodeList(node.statements), _mapToken(node.rightBracket));
@override
- BlockFunctionBody visitBlockFunctionBody(BlockFunctionBody node) =>
- new BlockFunctionBody(
- _mapToken(node.keyword),
- _mapToken(node.star),
- _cloneNode(node.block));
+ BlockFunctionBody visitBlockFunctionBody(
+ BlockFunctionBody node) => new BlockFunctionBody(
+ _mapToken(node.keyword), _mapToken(node.star), _cloneNode(node.block));
@override
BooleanLiteral visitBooleanLiteral(BooleanLiteral node) {
@@ -9632,75 +9573,54 @@
}
@override
- BreakStatement visitBreakStatement(BreakStatement node) =>
- new BreakStatement(
- _mapToken(node.keyword),
- _cloneNode(node.label),
- _mapToken(node.semicolon));
+ BreakStatement visitBreakStatement(BreakStatement node) => new BreakStatement(
+ _mapToken(node.breakKeyword), _cloneNode(node.label),
+ _mapToken(node.semicolon));
@override
CascadeExpression visitCascadeExpression(CascadeExpression node) {
CascadeExpression copy = new CascadeExpression(
- _cloneNode(node.target),
- _cloneNodeList(node.cascadeSections));
+ _cloneNode(node.target), _cloneNodeList(node.cascadeSections));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
@override
- CatchClause visitCatchClause(CatchClause node) =>
- new CatchClause(
- _mapToken(node.onKeyword),
- _cloneNode(node.exceptionType),
- _mapToken(node.catchKeyword),
- _mapToken(node.leftParenthesis),
- _cloneNode(node.exceptionParameter),
- _mapToken(node.comma),
- _cloneNode(node.stackTraceParameter),
- _mapToken(node.rightParenthesis),
- _cloneNode(node.body));
+ CatchClause visitCatchClause(CatchClause node) => new CatchClause(
+ _mapToken(node.onKeyword), _cloneNode(node.exceptionType),
+ _mapToken(node.catchKeyword), _mapToken(node.leftParenthesis),
+ _cloneNode(node.exceptionParameter), _mapToken(node.comma),
+ _cloneNode(node.stackTraceParameter), _mapToken(node.rightParenthesis),
+ _cloneNode(node.body));
@override
ClassDeclaration visitClassDeclaration(ClassDeclaration node) {
ClassDeclaration copy = new ClassDeclaration(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.abstractKeyword),
- _mapToken(node.classKeyword),
- _cloneNode(node.name),
- _cloneNode(node.typeParameters),
- _cloneNode(node.extendsClause),
- _cloneNode(node.withClause),
- _cloneNode(node.implementsClause),
- _mapToken(node.leftBracket),
- _cloneNodeList(node.members),
- _mapToken(node.rightBracket));
+ _cloneNode(node.documentationComment), _cloneNodeList(node.metadata),
+ _mapToken(node.abstractKeyword), _mapToken(node.classKeyword),
+ _cloneNode(node.name), _cloneNode(node.typeParameters),
+ _cloneNode(node.extendsClause), _cloneNode(node.withClause),
+ _cloneNode(node.implementsClause), _mapToken(node.leftBracket),
+ _cloneNodeList(node.members), _mapToken(node.rightBracket));
copy.nativeClause = _cloneNode(node.nativeClause);
return copy;
}
@override
- ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) =>
- new ClassTypeAlias(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.keyword),
- _cloneNode(node.name),
- _cloneNode(node.typeParameters),
- _mapToken(node.equals),
- _mapToken(node.abstractKeyword),
- _cloneNode(node.superclass),
- _cloneNode(node.withClause),
- _cloneNode(node.implementsClause),
- _mapToken(node.semicolon));
+ ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) => new ClassTypeAlias(
+ _cloneNode(node.documentationComment), _cloneNodeList(node.metadata),
+ _mapToken(node.typedefKeyword), _cloneNode(node.name),
+ _cloneNode(node.typeParameters), _mapToken(node.equals),
+ _mapToken(node.abstractKeyword), _cloneNode(node.superclass),
+ _cloneNode(node.withClause), _cloneNode(node.implementsClause),
+ _mapToken(node.semicolon));
@override
Comment visitComment(Comment node) {
if (node.isDocumentation) {
return Comment.createDocumentationCommentWithReferences(
- _mapTokens(node.tokens),
- _cloneNodeList(node.references));
+ _mapTokens(node.tokens), _cloneNodeList(node.references));
} else if (node.isBlock) {
return Comment.createBlockComment(_mapTokens(node.tokens));
}
@@ -9709,16 +9629,14 @@
@override
CommentReference visitCommentReference(CommentReference node) =>
- new CommentReference(_mapToken(node.newKeyword), _cloneNode(node.identifier));
+ new CommentReference(
+ _mapToken(node.newKeyword), _cloneNode(node.identifier));
@override
CompilationUnit visitCompilationUnit(CompilationUnit node) {
- CompilationUnit copy = new CompilationUnit(
- _mapToken(node.beginToken),
- _cloneNode(node.scriptTag),
- _cloneNodeList(node.directives),
- _cloneNodeList(node.declarations),
- _mapToken(node.endToken));
+ CompilationUnit copy = new CompilationUnit(_mapToken(node.beginToken),
+ _cloneNode(node.scriptTag), _cloneNodeList(node.directives),
+ _cloneNodeList(node.declarations), _mapToken(node.endToken));
copy.lineInfo = node.lineInfo;
copy.element = node.element;
return copy;
@@ -9727,10 +9645,8 @@
@override
ConditionalExpression visitConditionalExpression(ConditionalExpression node) {
ConditionalExpression copy = new ConditionalExpression(
- _cloneNode(node.condition),
- _mapToken(node.question),
- _cloneNode(node.thenExpression),
- _mapToken(node.colon),
+ _cloneNode(node.condition), _mapToken(node.question),
+ _cloneNode(node.thenExpression), _mapToken(node.colon),
_cloneNode(node.elseExpression));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
@@ -9738,81 +9654,58 @@
}
@override
- ConstructorDeclaration
- visitConstructorDeclaration(ConstructorDeclaration node) {
+ ConstructorDeclaration visitConstructorDeclaration(
+ ConstructorDeclaration node) {
ConstructorDeclaration copy = new ConstructorDeclaration(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.externalKeyword),
- _mapToken(node.constKeyword),
- _mapToken(node.factoryKeyword),
- _cloneNode(node.returnType),
- _mapToken(node.period),
- _cloneNode(node.name),
- _cloneNode(node.parameters),
- _mapToken(node.separator),
+ _cloneNode(node.documentationComment), _cloneNodeList(node.metadata),
+ _mapToken(node.externalKeyword), _mapToken(node.constKeyword),
+ _mapToken(node.factoryKeyword), _cloneNode(node.returnType),
+ _mapToken(node.period), _cloneNode(node.name),
+ _cloneNode(node.parameters), _mapToken(node.separator),
_cloneNodeList(node.initializers),
- _cloneNode(node.redirectedConstructor),
- _cloneNode(node.body));
+ _cloneNode(node.redirectedConstructor), _cloneNode(node.body));
copy.element = node.element;
return copy;
}
@override
- ConstructorFieldInitializer
- visitConstructorFieldInitializer(ConstructorFieldInitializer node) =>
- new ConstructorFieldInitializer(
- _mapToken(node.keyword),
- _mapToken(node.period),
- _cloneNode(node.fieldName),
- _mapToken(node.equals),
- _cloneNode(node.expression));
+ ConstructorFieldInitializer visitConstructorFieldInitializer(
+ ConstructorFieldInitializer node) => new ConstructorFieldInitializer(
+ _mapToken(node.thisKeyword), _mapToken(node.period),
+ _cloneNode(node.fieldName), _mapToken(node.equals),
+ _cloneNode(node.expression));
@override
ConstructorName visitConstructorName(ConstructorName node) {
ConstructorName copy = new ConstructorName(
- _cloneNode(node.type),
- _mapToken(node.period),
- _cloneNode(node.name));
+ _cloneNode(node.type), _mapToken(node.period), _cloneNode(node.name));
copy.staticElement = node.staticElement;
return copy;
}
@override
ContinueStatement visitContinueStatement(ContinueStatement node) =>
- new ContinueStatement(
- _mapToken(node.keyword),
- _cloneNode(node.label),
- _mapToken(node.semicolon));
+ new ContinueStatement(_mapToken(node.continueKeyword),
+ _cloneNode(node.label), _mapToken(node.semicolon));
@override
DeclaredIdentifier visitDeclaredIdentifier(DeclaredIdentifier node) =>
- new DeclaredIdentifier(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.keyword),
- _cloneNode(node.type),
- _cloneNode(node.identifier));
+ new DeclaredIdentifier(_cloneNode(node.documentationComment),
+ _cloneNodeList(node.metadata), _mapToken(node.keyword),
+ _cloneNode(node.type), _cloneNode(node.identifier));
@override
- DefaultFormalParameter
- visitDefaultFormalParameter(DefaultFormalParameter node) =>
- new DefaultFormalParameter(
- _cloneNode(node.parameter),
- node.kind,
- _mapToken(node.separator),
- _cloneNode(node.defaultValue));
+ DefaultFormalParameter visitDefaultFormalParameter(
+ DefaultFormalParameter node) => new DefaultFormalParameter(
+ _cloneNode(node.parameter), node.kind, _mapToken(node.separator),
+ _cloneNode(node.defaultValue));
@override
- DoStatement visitDoStatement(DoStatement node) =>
- new DoStatement(
- _mapToken(node.doKeyword),
- _cloneNode(node.body),
- _mapToken(node.whileKeyword),
- _mapToken(node.leftParenthesis),
- _cloneNode(node.condition),
- _mapToken(node.rightParenthesis),
- _mapToken(node.semicolon));
+ DoStatement visitDoStatement(DoStatement node) => new DoStatement(
+ _mapToken(node.doKeyword), _cloneNode(node.body),
+ _mapToken(node.whileKeyword), _mapToken(node.leftParenthesis),
+ _cloneNode(node.condition), _mapToken(node.rightParenthesis),
+ _mapToken(node.semicolon));
@override
DoubleLiteral visitDoubleLiteral(DoubleLiteral node) {
@@ -9832,141 +9725,102 @@
@override
AstNode visitEnumConstantDeclaration(EnumConstantDeclaration node) =>
- new EnumConstantDeclaration(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _cloneNode(node.name));
+ new EnumConstantDeclaration(_cloneNode(node.documentationComment),
+ _cloneNodeList(node.metadata), _cloneNode(node.name));
@override
- AstNode visitEnumDeclaration(EnumDeclaration node) =>
- new EnumDeclaration(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.keyword),
- _cloneNode(node.name),
- _mapToken(node.leftBracket),
- _cloneNodeList(node.constants),
- _mapToken(node.rightBracket));
+ AstNode visitEnumDeclaration(EnumDeclaration node) => new EnumDeclaration(
+ _cloneNode(node.documentationComment), _cloneNodeList(node.metadata),
+ _mapToken(node.enumKeyword), _cloneNode(node.name),
+ _mapToken(node.leftBracket), _cloneNodeList(node.constants),
+ _mapToken(node.rightBracket));
@override
ExportDirective visitExportDirective(ExportDirective node) {
ExportDirective copy = new ExportDirective(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.keyword),
- _cloneNode(node.uri),
- _cloneNodeList(node.combinators),
- _mapToken(node.semicolon));
+ _cloneNode(node.documentationComment), _cloneNodeList(node.metadata),
+ _mapToken(node.keyword), _cloneNode(node.uri),
+ _cloneNodeList(node.combinators), _mapToken(node.semicolon));
copy.element = node.element;
return copy;
}
@override
- ExpressionFunctionBody
- visitExpressionFunctionBody(ExpressionFunctionBody node) =>
- new ExpressionFunctionBody(
- _mapToken(node.keyword),
- _mapToken(node.functionDefinition),
- _cloneNode(node.expression),
- _mapToken(node.semicolon));
+ ExpressionFunctionBody visitExpressionFunctionBody(
+ ExpressionFunctionBody node) => new ExpressionFunctionBody(
+ _mapToken(node.keyword), _mapToken(node.functionDefinition),
+ _cloneNode(node.expression), _mapToken(node.semicolon));
@override
ExpressionStatement visitExpressionStatement(ExpressionStatement node) =>
- new ExpressionStatement(_cloneNode(node.expression), _mapToken(node.semicolon));
+ new ExpressionStatement(
+ _cloneNode(node.expression), _mapToken(node.semicolon));
@override
- ExtendsClause visitExtendsClause(ExtendsClause node) =>
- new ExtendsClause(_mapToken(node.keyword), _cloneNode(node.superclass));
+ ExtendsClause visitExtendsClause(ExtendsClause node) => new ExtendsClause(
+ _mapToken(node.extendsKeyword), _cloneNode(node.superclass));
@override
FieldDeclaration visitFieldDeclaration(FieldDeclaration node) =>
- new FieldDeclaration(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.staticKeyword),
- _cloneNode(node.fields),
- _mapToken(node.semicolon));
+ new FieldDeclaration(_cloneNode(node.documentationComment),
+ _cloneNodeList(node.metadata), _mapToken(node.staticKeyword),
+ _cloneNode(node.fields), _mapToken(node.semicolon));
@override
FieldFormalParameter visitFieldFormalParameter(FieldFormalParameter node) =>
- new FieldFormalParameter(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.keyword),
- _cloneNode(node.type),
- _mapToken(node.thisToken),
- _mapToken(node.period),
- _cloneNode(node.identifier),
+ new FieldFormalParameter(_cloneNode(node.documentationComment),
+ _cloneNodeList(node.metadata), _mapToken(node.keyword),
+ _cloneNode(node.type), _mapToken(node.thisKeyword),
+ _mapToken(node.period), _cloneNode(node.identifier),
_cloneNode(node.parameters));
@override
ForEachStatement visitForEachStatement(ForEachStatement node) {
DeclaredIdentifier loopVariable = node.loopVariable;
if (loopVariable == null) {
- return new ForEachStatement.con2(
- _mapToken(node.awaitKeyword),
- _mapToken(node.forKeyword),
- _mapToken(node.leftParenthesis),
- _cloneNode(node.identifier),
- _mapToken(node.inKeyword),
- _cloneNode(node.iterable),
- _mapToken(node.rightParenthesis),
+ return new ForEachStatement.con2(_mapToken(node.awaitKeyword),
+ _mapToken(node.forKeyword), _mapToken(node.leftParenthesis),
+ _cloneNode(node.identifier), _mapToken(node.inKeyword),
+ _cloneNode(node.iterable), _mapToken(node.rightParenthesis),
_cloneNode(node.body));
}
- return new ForEachStatement.con1(
- _mapToken(node.awaitKeyword),
- _mapToken(node.forKeyword),
- _mapToken(node.leftParenthesis),
- _cloneNode(loopVariable),
- _mapToken(node.inKeyword),
- _cloneNode(node.iterable),
- _mapToken(node.rightParenthesis),
+ return new ForEachStatement.con1(_mapToken(node.awaitKeyword),
+ _mapToken(node.forKeyword), _mapToken(node.leftParenthesis),
+ _cloneNode(loopVariable), _mapToken(node.inKeyword),
+ _cloneNode(node.iterable), _mapToken(node.rightParenthesis),
_cloneNode(node.body));
}
@override
FormalParameterList visitFormalParameterList(FormalParameterList node) =>
- new FormalParameterList(
- _mapToken(node.leftParenthesis),
- _cloneNodeList(node.parameters),
- _mapToken(node.leftDelimiter),
- _mapToken(node.rightDelimiter),
- _mapToken(node.rightParenthesis));
+ new FormalParameterList(_mapToken(node.leftParenthesis),
+ _cloneNodeList(node.parameters), _mapToken(node.leftDelimiter),
+ _mapToken(node.rightDelimiter), _mapToken(node.rightParenthesis));
@override
- ForStatement visitForStatement(ForStatement node) =>
- new ForStatement(
- _mapToken(node.forKeyword),
- _mapToken(node.leftParenthesis),
- _cloneNode(node.variables),
- _cloneNode(node.initialization),
- _mapToken(node.leftSeparator),
- _cloneNode(node.condition),
- _mapToken(node.rightSeparator),
- _cloneNodeList(node.updaters),
- _mapToken(node.rightParenthesis),
- _cloneNode(node.body));
+ ForStatement visitForStatement(ForStatement node) => new ForStatement(
+ _mapToken(node.forKeyword), _mapToken(node.leftParenthesis),
+ _cloneNode(node.variables), _cloneNode(node.initialization),
+ _mapToken(node.leftSeparator), _cloneNode(node.condition),
+ _mapToken(node.rightSeparator), _cloneNodeList(node.updaters),
+ _mapToken(node.rightParenthesis), _cloneNode(node.body));
@override
FunctionDeclaration visitFunctionDeclaration(FunctionDeclaration node) =>
- new FunctionDeclaration(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.externalKeyword),
- _cloneNode(node.returnType),
- _mapToken(node.propertyKeyword),
- _cloneNode(node.name),
- _cloneNode(node.functionExpression));
+ new FunctionDeclaration(_cloneNode(node.documentationComment),
+ _cloneNodeList(node.metadata), _mapToken(node.externalKeyword),
+ _cloneNode(node.returnType), _mapToken(node.propertyKeyword),
+ _cloneNode(node.name), _cloneNode(node.functionExpression));
@override
- FunctionDeclarationStatement
- visitFunctionDeclarationStatement(FunctionDeclarationStatement node) =>
+ FunctionDeclarationStatement visitFunctionDeclarationStatement(
+ FunctionDeclarationStatement node) =>
new FunctionDeclarationStatement(_cloneNode(node.functionDeclaration));
@override
FunctionExpression visitFunctionExpression(FunctionExpression node) {
- FunctionExpression copy =
- new FunctionExpression(_cloneNode(node.parameters), _cloneNode(node.body));
+ FunctionExpression copy = new FunctionExpression(
+ _cloneNode(node.parameters), _cloneNode(node.body));
copy.element = node.element;
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
@@ -9974,11 +9828,10 @@
}
@override
- FunctionExpressionInvocation
- visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
+ FunctionExpressionInvocation visitFunctionExpressionInvocation(
+ FunctionExpressionInvocation node) {
FunctionExpressionInvocation copy = new FunctionExpressionInvocation(
- _cloneNode(node.function),
- _cloneNode(node.argumentList));
+ _cloneNode(node.function), _cloneNode(node.argumentList));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -9988,74 +9841,54 @@
@override
FunctionTypeAlias visitFunctionTypeAlias(FunctionTypeAlias node) =>
- new FunctionTypeAlias(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.keyword),
- _cloneNode(node.returnType),
- _cloneNode(node.name),
- _cloneNode(node.typeParameters),
- _cloneNode(node.parameters),
+ new FunctionTypeAlias(_cloneNode(node.documentationComment),
+ _cloneNodeList(node.metadata), _mapToken(node.typedefKeyword),
+ _cloneNode(node.returnType), _cloneNode(node.name),
+ _cloneNode(node.typeParameters), _cloneNode(node.parameters),
_mapToken(node.semicolon));
@override
- FunctionTypedFormalParameter
- visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) =>
- new FunctionTypedFormalParameter(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _cloneNode(node.returnType),
- _cloneNode(node.identifier),
- _cloneNode(node.parameters));
+ FunctionTypedFormalParameter visitFunctionTypedFormalParameter(
+ FunctionTypedFormalParameter node) => new FunctionTypedFormalParameter(
+ _cloneNode(node.documentationComment), _cloneNodeList(node.metadata),
+ _cloneNode(node.returnType), _cloneNode(node.identifier),
+ _cloneNode(node.parameters));
@override
- HideCombinator visitHideCombinator(HideCombinator node) =>
- new HideCombinator(_mapToken(node.keyword), _cloneNodeList(node.hiddenNames));
+ HideCombinator visitHideCombinator(HideCombinator node) => new HideCombinator(
+ _mapToken(node.keyword), _cloneNodeList(node.hiddenNames));
@override
- IfStatement visitIfStatement(IfStatement node) =>
- new IfStatement(
- _mapToken(node.ifKeyword),
- _mapToken(node.leftParenthesis),
- _cloneNode(node.condition),
- _mapToken(node.rightParenthesis),
- _cloneNode(node.thenStatement),
- _mapToken(node.elseKeyword),
- _cloneNode(node.elseStatement));
+ IfStatement visitIfStatement(IfStatement node) => new IfStatement(
+ _mapToken(node.ifKeyword), _mapToken(node.leftParenthesis),
+ _cloneNode(node.condition), _mapToken(node.rightParenthesis),
+ _cloneNode(node.thenStatement), _mapToken(node.elseKeyword),
+ _cloneNode(node.elseStatement));
@override
ImplementsClause visitImplementsClause(ImplementsClause node) =>
- new ImplementsClause(_mapToken(node.keyword), _cloneNodeList(node.interfaces));
+ new ImplementsClause(
+ _mapToken(node.implementsKeyword), _cloneNodeList(node.interfaces));
@override
ImportDirective visitImportDirective(ImportDirective node) =>
- new ImportDirective(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.keyword),
- _cloneNode(node.uri),
- _mapToken(node.deferredToken),
- _mapToken(node.asToken),
- _cloneNode(node.prefix),
- _cloneNodeList(node.combinators),
- _mapToken(node.semicolon));
+ new ImportDirective(_cloneNode(node.documentationComment),
+ _cloneNodeList(node.metadata), _mapToken(node.keyword),
+ _cloneNode(node.uri), _mapToken(node.deferredKeyword),
+ _mapToken(node.asKeyword), _cloneNode(node.prefix),
+ _cloneNodeList(node.combinators), _mapToken(node.semicolon));
@override
IndexExpression visitIndexExpression(IndexExpression node) {
Token period = _mapToken(node.period);
IndexExpression copy;
if (period == null) {
- copy = new IndexExpression.forTarget(
- _cloneNode(node.target),
- _mapToken(node.leftBracket),
- _cloneNode(node.index),
+ copy = new IndexExpression.forTarget(_cloneNode(node.target),
+ _mapToken(node.leftBracket), _cloneNode(node.index),
_mapToken(node.rightBracket));
} else {
- copy = new IndexExpression.forCascade(
- period,
- _mapToken(node.leftBracket),
- _cloneNode(node.index),
- _mapToken(node.rightBracket));
+ copy = new IndexExpression.forCascade(period, _mapToken(node.leftBracket),
+ _cloneNode(node.index), _mapToken(node.rightBracket));
}
copy.auxiliaryElements = node.auxiliaryElements;
copy.propagatedElement = node.propagatedElement;
@@ -10066,11 +9899,10 @@
}
@override
- InstanceCreationExpression
- visitInstanceCreationExpression(InstanceCreationExpression node) {
+ InstanceCreationExpression visitInstanceCreationExpression(
+ InstanceCreationExpression node) {
InstanceCreationExpression copy = new InstanceCreationExpression(
- _mapToken(node.keyword),
- _cloneNode(node.constructorName),
+ _mapToken(node.keyword), _cloneNode(node.constructorName),
_cloneNode(node.argumentList));
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -10088,12 +9920,10 @@
}
@override
- InterpolationExpression
- visitInterpolationExpression(InterpolationExpression node) =>
- new InterpolationExpression(
- _mapToken(node.leftBracket),
- _cloneNode(node.expression),
- _mapToken(node.rightBracket));
+ InterpolationExpression visitInterpolationExpression(
+ InterpolationExpression node) => new InterpolationExpression(
+ _mapToken(node.leftBracket), _cloneNode(node.expression),
+ _mapToken(node.rightBracket));
@override
InterpolationString visitInterpolationString(InterpolationString node) =>
@@ -10101,10 +9931,8 @@
@override
IsExpression visitIsExpression(IsExpression node) {
- IsExpression copy = new IsExpression(
- _cloneNode(node.expression),
- _mapToken(node.isOperator),
- _mapToken(node.notOperator),
+ IsExpression copy = new IsExpression(_cloneNode(node.expression),
+ _mapToken(node.isOperator), _mapToken(node.notOperator),
_cloneNode(node.type));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
@@ -10117,16 +9945,14 @@
@override
LabeledStatement visitLabeledStatement(LabeledStatement node) =>
- new LabeledStatement(_cloneNodeList(node.labels), _cloneNode(node.statement));
+ new LabeledStatement(
+ _cloneNodeList(node.labels), _cloneNode(node.statement));
@override
LibraryDirective visitLibraryDirective(LibraryDirective node) =>
- new LibraryDirective(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.libraryToken),
- _cloneNode(node.name),
- _mapToken(node.semicolon));
+ new LibraryDirective(_cloneNode(node.documentationComment),
+ _cloneNodeList(node.metadata), _mapToken(node.libraryKeyword),
+ _cloneNode(node.name), _mapToken(node.semicolon));
@override
LibraryIdentifier visitLibraryIdentifier(LibraryIdentifier node) {
@@ -10139,12 +9965,9 @@
@override
ListLiteral visitListLiteral(ListLiteral node) {
- ListLiteral copy = new ListLiteral(
- _mapToken(node.constKeyword),
- _cloneNode(node.typeArguments),
- _mapToken(node.leftBracket),
- _cloneNodeList(node.elements),
- _mapToken(node.rightBracket));
+ ListLiteral copy = new ListLiteral(_mapToken(node.constKeyword),
+ _cloneNode(node.typeArguments), _mapToken(node.leftBracket),
+ _cloneNodeList(node.elements), _mapToken(node.rightBracket));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
@@ -10152,44 +9975,32 @@
@override
MapLiteral visitMapLiteral(MapLiteral node) {
- MapLiteral copy = new MapLiteral(
- _mapToken(node.constKeyword),
- _cloneNode(node.typeArguments),
- _mapToken(node.leftBracket),
- _cloneNodeList(node.entries),
- _mapToken(node.rightBracket));
+ MapLiteral copy = new MapLiteral(_mapToken(node.constKeyword),
+ _cloneNode(node.typeArguments), _mapToken(node.leftBracket),
+ _cloneNodeList(node.entries), _mapToken(node.rightBracket));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
@override
- MapLiteralEntry visitMapLiteralEntry(MapLiteralEntry node) =>
- new MapLiteralEntry(
- _cloneNode(node.key),
- _mapToken(node.separator),
- _cloneNode(node.value));
+ MapLiteralEntry visitMapLiteralEntry(
+ MapLiteralEntry node) => new MapLiteralEntry(
+ _cloneNode(node.key), _mapToken(node.separator), _cloneNode(node.value));
@override
MethodDeclaration visitMethodDeclaration(MethodDeclaration node) =>
- new MethodDeclaration(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.externalKeyword),
- _mapToken(node.modifierKeyword),
- _cloneNode(node.returnType),
- _mapToken(node.propertyKeyword),
- _mapToken(node.operatorKeyword),
- _cloneNode(node.name),
- _cloneNode(node.parameters),
+ new MethodDeclaration(_cloneNode(node.documentationComment),
+ _cloneNodeList(node.metadata), _mapToken(node.externalKeyword),
+ _mapToken(node.modifierKeyword), _cloneNode(node.returnType),
+ _mapToken(node.propertyKeyword), _mapToken(node.operatorKeyword),
+ _cloneNode(node.name), _cloneNode(node.parameters),
_cloneNode(node.body));
@override
MethodInvocation visitMethodInvocation(MethodInvocation node) {
- MethodInvocation copy = new MethodInvocation(
- _cloneNode(node.target),
- _mapToken(node.period),
- _cloneNode(node.methodName),
+ MethodInvocation copy = new MethodInvocation(_cloneNode(node.target),
+ _mapToken(node.period), _cloneNode(node.methodName),
_cloneNode(node.argumentList));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
@@ -10207,14 +10018,12 @@
@override
AstNode visitNativeClause(NativeClause node) =>
- new NativeClause(_mapToken(node.keyword), _cloneNode(node.name));
+ new NativeClause(_mapToken(node.nativeKeyword), _cloneNode(node.name));
@override
NativeFunctionBody visitNativeFunctionBody(NativeFunctionBody node) =>
- new NativeFunctionBody(
- _mapToken(node.nativeToken),
- _cloneNode(node.stringLiteral),
- _mapToken(node.semicolon));
+ new NativeFunctionBody(_mapToken(node.nativeKeyword),
+ _cloneNode(node.stringLiteral), _mapToken(node.semicolon));
@override
NullLiteral visitNullLiteral(NullLiteral node) {
@@ -10225,11 +10034,10 @@
}
@override
- ParenthesizedExpression
- visitParenthesizedExpression(ParenthesizedExpression node) {
+ ParenthesizedExpression visitParenthesizedExpression(
+ ParenthesizedExpression node) {
ParenthesizedExpression copy = new ParenthesizedExpression(
- _mapToken(node.leftParenthesis),
- _cloneNode(node.expression),
+ _mapToken(node.leftParenthesis), _cloneNode(node.expression),
_mapToken(node.rightParenthesis));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
@@ -10239,10 +10047,8 @@
@override
PartDirective visitPartDirective(PartDirective node) {
PartDirective copy = new PartDirective(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.partToken),
- _cloneNode(node.uri),
+ _cloneNode(node.documentationComment), _cloneNodeList(node.metadata),
+ _mapToken(node.partKeyword), _cloneNode(node.uri),
_mapToken(node.semicolon));
copy.element = node.element;
return copy;
@@ -10251,20 +10057,17 @@
@override
PartOfDirective visitPartOfDirective(PartOfDirective node) {
PartOfDirective copy = new PartOfDirective(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.partToken),
- _mapToken(node.ofToken),
- _cloneNode(node.libraryName),
- _mapToken(node.semicolon));
+ _cloneNode(node.documentationComment), _cloneNodeList(node.metadata),
+ _mapToken(node.partKeyword), _mapToken(node.ofKeyword),
+ _cloneNode(node.libraryName), _mapToken(node.semicolon));
copy.element = node.element;
return copy;
}
@override
PostfixExpression visitPostfixExpression(PostfixExpression node) {
- PostfixExpression copy =
- new PostfixExpression(_cloneNode(node.operand), _mapToken(node.operator));
+ PostfixExpression copy = new PostfixExpression(
+ _cloneNode(node.operand), _mapToken(node.operator));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -10274,10 +10077,8 @@
@override
PrefixedIdentifier visitPrefixedIdentifier(PrefixedIdentifier node) {
- PrefixedIdentifier copy = new PrefixedIdentifier(
- _cloneNode(node.prefix),
- _mapToken(node.period),
- _cloneNode(node.identifier));
+ PrefixedIdentifier copy = new PrefixedIdentifier(_cloneNode(node.prefix),
+ _mapToken(node.period), _cloneNode(node.identifier));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
@@ -10285,8 +10086,8 @@
@override
PrefixExpression visitPrefixExpression(PrefixExpression node) {
- PrefixExpression copy =
- new PrefixExpression(_mapToken(node.operator), _cloneNode(node.operand));
+ PrefixExpression copy = new PrefixExpression(
+ _mapToken(node.operator), _cloneNode(node.operand));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -10296,23 +10097,19 @@
@override
PropertyAccess visitPropertyAccess(PropertyAccess node) {
- PropertyAccess copy = new PropertyAccess(
- _cloneNode(node.target),
- _mapToken(node.operator),
- _cloneNode(node.propertyName));
+ PropertyAccess copy = new PropertyAccess(_cloneNode(node.target),
+ _mapToken(node.operator), _cloneNode(node.propertyName));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
@override
- RedirectingConstructorInvocation
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ RedirectingConstructorInvocation visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
RedirectingConstructorInvocation copy =
- new RedirectingConstructorInvocation(
- _mapToken(node.keyword),
- _mapToken(node.period),
- _cloneNode(node.constructorName),
+ new RedirectingConstructorInvocation(_mapToken(node.thisKeyword),
+ _mapToken(node.period), _cloneNode(node.constructorName),
_cloneNode(node.argumentList));
copy.staticElement = node.staticElement;
return copy;
@@ -10320,7 +10117,8 @@
@override
RethrowExpression visitRethrowExpression(RethrowExpression node) {
- RethrowExpression copy = new RethrowExpression(_mapToken(node.keyword));
+ RethrowExpression copy =
+ new RethrowExpression(_mapToken(node.rethrowKeyword));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
@@ -10328,28 +10126,23 @@
@override
ReturnStatement visitReturnStatement(ReturnStatement node) =>
- new ReturnStatement(
- _mapToken(node.keyword),
- _cloneNode(node.expression),
- _mapToken(node.semicolon));
+ new ReturnStatement(_mapToken(node.returnKeyword),
+ _cloneNode(node.expression), _mapToken(node.semicolon));
@override
ScriptTag visitScriptTag(ScriptTag node) =>
new ScriptTag(_mapToken(node.scriptTag));
@override
- ShowCombinator visitShowCombinator(ShowCombinator node) =>
- new ShowCombinator(_mapToken(node.keyword), _cloneNodeList(node.shownNames));
+ ShowCombinator visitShowCombinator(ShowCombinator node) => new ShowCombinator(
+ _mapToken(node.keyword), _cloneNodeList(node.shownNames));
@override
- SimpleFormalParameter
- visitSimpleFormalParameter(SimpleFormalParameter node) =>
- new SimpleFormalParameter(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _mapToken(node.keyword),
- _cloneNode(node.type),
- _cloneNode(node.identifier));
+ SimpleFormalParameter visitSimpleFormalParameter(
+ SimpleFormalParameter node) => new SimpleFormalParameter(
+ _cloneNode(node.documentationComment), _cloneNodeList(node.metadata),
+ _mapToken(node.keyword), _cloneNode(node.type),
+ _cloneNode(node.identifier));
@override
SimpleIdentifier visitSimpleIdentifier(SimpleIdentifier node) {
@@ -10390,57 +10183,45 @@
}
@override
- SuperConstructorInvocation
- visitSuperConstructorInvocation(SuperConstructorInvocation node) {
+ SuperConstructorInvocation visitSuperConstructorInvocation(
+ SuperConstructorInvocation node) {
SuperConstructorInvocation copy = new SuperConstructorInvocation(
- _mapToken(node.keyword),
- _mapToken(node.period),
- _cloneNode(node.constructorName),
- _cloneNode(node.argumentList));
+ _mapToken(node.superKeyword), _mapToken(node.period),
+ _cloneNode(node.constructorName), _cloneNode(node.argumentList));
copy.staticElement = node.staticElement;
return copy;
}
@override
SuperExpression visitSuperExpression(SuperExpression node) {
- SuperExpression copy = new SuperExpression(_mapToken(node.keyword));
+ SuperExpression copy = new SuperExpression(_mapToken(node.superKeyword));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
@override
- SwitchCase visitSwitchCase(SwitchCase node) =>
- new SwitchCase(
- _cloneNodeList(node.labels),
- _mapToken(node.keyword),
- _cloneNode(node.expression),
- _mapToken(node.colon),
- _cloneNodeList(node.statements));
+ SwitchCase visitSwitchCase(SwitchCase node) => new SwitchCase(
+ _cloneNodeList(node.labels), _mapToken(node.keyword),
+ _cloneNode(node.expression), _mapToken(node.colon),
+ _cloneNodeList(node.statements));
@override
- SwitchDefault visitSwitchDefault(SwitchDefault node) =>
- new SwitchDefault(
- _cloneNodeList(node.labels),
- _mapToken(node.keyword),
- _mapToken(node.colon),
- _cloneNodeList(node.statements));
+ SwitchDefault visitSwitchDefault(SwitchDefault node) => new SwitchDefault(
+ _cloneNodeList(node.labels), _mapToken(node.keyword),
+ _mapToken(node.colon), _cloneNodeList(node.statements));
@override
SwitchStatement visitSwitchStatement(SwitchStatement node) =>
- new SwitchStatement(
- _mapToken(node.keyword),
- _mapToken(node.leftParenthesis),
- _cloneNode(node.expression),
- _mapToken(node.rightParenthesis),
- _mapToken(node.leftBracket),
- _cloneNodeList(node.members),
- _mapToken(node.rightBracket));
+ new SwitchStatement(_mapToken(node.switchKeyword),
+ _mapToken(node.leftParenthesis), _cloneNode(node.expression),
+ _mapToken(node.rightParenthesis), _mapToken(node.leftBracket),
+ _cloneNodeList(node.members), _mapToken(node.rightBracket));
@override
AstNode visitSymbolLiteral(SymbolLiteral node) {
- SymbolLiteral copy =
- new SymbolLiteral(_mapToken(node.poundSign), _mapTokens(node.components));
+ SymbolLiteral copy = new SymbolLiteral(
+ _mapToken(node.poundSign), _mapTokens(node.components));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
@@ -10448,7 +10229,7 @@
@override
ThisExpression visitThisExpression(ThisExpression node) {
- ThisExpression copy = new ThisExpression(_mapToken(node.keyword));
+ ThisExpression copy = new ThisExpression(_mapToken(node.thisKeyword));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
@@ -10456,37 +10237,29 @@
@override
ThrowExpression visitThrowExpression(ThrowExpression node) {
- ThrowExpression copy =
- new ThrowExpression(_mapToken(node.keyword), _cloneNode(node.expression));
+ ThrowExpression copy = new ThrowExpression(
+ _mapToken(node.throwKeyword), _cloneNode(node.expression));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
@override
- TopLevelVariableDeclaration
- visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) =>
- new TopLevelVariableDeclaration(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _cloneNode(node.variables),
- _mapToken(node.semicolon));
+ TopLevelVariableDeclaration visitTopLevelVariableDeclaration(
+ TopLevelVariableDeclaration node) => new TopLevelVariableDeclaration(
+ _cloneNode(node.documentationComment), _cloneNodeList(node.metadata),
+ _cloneNode(node.variables), _mapToken(node.semicolon));
@override
- TryStatement visitTryStatement(TryStatement node) =>
- new TryStatement(
- _mapToken(node.tryKeyword),
- _cloneNode(node.body),
- _cloneNodeList(node.catchClauses),
- _mapToken(node.finallyKeyword),
- _cloneNode(node.finallyBlock));
+ TryStatement visitTryStatement(TryStatement node) => new TryStatement(
+ _mapToken(node.tryKeyword), _cloneNode(node.body),
+ _cloneNodeList(node.catchClauses), _mapToken(node.finallyKeyword),
+ _cloneNode(node.finallyBlock));
@override
TypeArgumentList visitTypeArgumentList(TypeArgumentList node) =>
- new TypeArgumentList(
- _mapToken(node.leftBracket),
- _cloneNodeList(node.arguments),
- _mapToken(node.rightBracket));
+ new TypeArgumentList(_mapToken(node.leftBracket),
+ _cloneNodeList(node.arguments), _mapToken(node.rightBracket));
@override
TypeName visitTypeName(TypeName node) {
@@ -10497,67 +10270,47 @@
}
@override
- TypeParameter visitTypeParameter(TypeParameter node) =>
- new TypeParameter(
- _cloneNode(node.documentationComment),
- _cloneNodeList(node.metadata),
- _cloneNode(node.name),
- _mapToken(node.keyword),
- _cloneNode(node.bound));
+ TypeParameter visitTypeParameter(TypeParameter node) => new TypeParameter(
+ _cloneNode(node.documentationComment), _cloneNodeList(node.metadata),
+ _cloneNode(node.name), _mapToken(node.extendsKeyword),
+ _cloneNode(node.bound));
@override
TypeParameterList visitTypeParameterList(TypeParameterList node) =>
- new TypeParameterList(
- _mapToken(node.leftBracket),
- _cloneNodeList(node.typeParameters),
- _mapToken(node.rightBracket));
+ new TypeParameterList(_mapToken(node.leftBracket),
+ _cloneNodeList(node.typeParameters), _mapToken(node.rightBracket));
@override
VariableDeclaration visitVariableDeclaration(VariableDeclaration node) =>
- new VariableDeclaration(
- null,
- _cloneNodeList(node.metadata),
- _cloneNode(node.name),
- _mapToken(node.equals),
+ new VariableDeclaration(null, _cloneNodeList(node.metadata),
+ _cloneNode(node.name), _mapToken(node.equals),
_cloneNode(node.initializer));
@override
- VariableDeclarationList
- visitVariableDeclarationList(VariableDeclarationList node) =>
- new VariableDeclarationList(
- null,
- _cloneNodeList(node.metadata),
- _mapToken(node.keyword),
- _cloneNode(node.type),
- _cloneNodeList(node.variables));
+ VariableDeclarationList visitVariableDeclarationList(
+ VariableDeclarationList node) => new VariableDeclarationList(null,
+ _cloneNodeList(node.metadata), _mapToken(node.keyword),
+ _cloneNode(node.type), _cloneNodeList(node.variables));
@override
- VariableDeclarationStatement
- visitVariableDeclarationStatement(VariableDeclarationStatement node) =>
- new VariableDeclarationStatement(
- _cloneNode(node.variables),
- _mapToken(node.semicolon));
+ VariableDeclarationStatement visitVariableDeclarationStatement(
+ VariableDeclarationStatement node) => new VariableDeclarationStatement(
+ _cloneNode(node.variables), _mapToken(node.semicolon));
@override
- WhileStatement visitWhileStatement(WhileStatement node) =>
- new WhileStatement(
- _mapToken(node.keyword),
- _mapToken(node.leftParenthesis),
- _cloneNode(node.condition),
- _mapToken(node.rightParenthesis),
- _cloneNode(node.body));
+ WhileStatement visitWhileStatement(WhileStatement node) => new WhileStatement(
+ _mapToken(node.whileKeyword), _mapToken(node.leftParenthesis),
+ _cloneNode(node.condition), _mapToken(node.rightParenthesis),
+ _cloneNode(node.body));
@override
- WithClause visitWithClause(WithClause node) =>
- new WithClause(_mapToken(node.withKeyword), _cloneNodeList(node.mixinTypes));
+ WithClause visitWithClause(WithClause node) => new WithClause(
+ _mapToken(node.withKeyword), _cloneNodeList(node.mixinTypes));
@override
- YieldStatement visitYieldStatement(YieldStatement node) =>
- new YieldStatement(
- _mapToken(node.yieldKeyword),
- _mapToken(node.star),
- _cloneNode(node.expression),
- _mapToken(node.semicolon));
+ YieldStatement visitYieldStatement(YieldStatement node) => new YieldStatement(
+ _mapToken(node.yieldKeyword), _mapToken(node.star),
+ _cloneNode(node.expression), _mapToken(node.semicolon));
AstNode _cloneNode(AstNode node) {
if (node == null) {
@@ -10652,9 +10405,9 @@
/**
* Initialize a newly created index expression.
*/
- IndexExpression.forCascade(this.period, this.leftBracket, Expression index,
- this.rightBracket) {
- _index = becomeParentOf(index);
+ IndexExpression.forCascade(
+ this.period, this.leftBracket, Expression index, this.rightBracket) {
+ _index = _becomeParentOf(index);
}
/**
@@ -10662,8 +10415,8 @@
*/
IndexExpression.forTarget(Expression target, this.leftBracket,
Expression index, this.rightBracket) {
- _target = becomeParentOf(target);
- _index = becomeParentOf(index);
+ _target = _becomeParentOf(target);
+ _index = _becomeParentOf(index);
}
@override
@@ -10689,16 +10442,13 @@
return element;
}
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..add(_target)
- ..add(period)
- ..add(leftBracket)
- ..add(_index)
- ..add(rightBracket);
+ ..add(_target)
+ ..add(period)
+ ..add(leftBracket)
+ ..add(_index)
+ ..add(rightBracket);
@override
Token get endToken => rightBracket;
@@ -10712,7 +10462,7 @@
* Set the expression used to compute the index to the given [expression].
*/
void set index(Expression expression) {
- _index = becomeParentOf(expression);
+ _index = _becomeParentOf(expression);
}
@override
@@ -10733,19 +10483,10 @@
* known based on propagated type information, then return the parameter
* element representing the parameter to which the value of the index
* expression will be bound. Otherwise, return `null`.
- *
- * This method is only intended to be used by
- * [Expression.propagatedParameterElement].
*/
+ @deprecated // Use "expression.propagatedParameterElement"
ParameterElement get propagatedParameterElementForIndex {
- if (propagatedElement == null) {
- return null;
- }
- List<ParameterElement> parameters = propagatedElement.parameters;
- if (parameters.length < 1) {
- return null;
- }
- return parameters[0];
+ return _propagatedParameterElementForIndex;
}
/**
@@ -10773,19 +10514,10 @@
* known based on static type information, then return the parameter element
* representing the parameter to which the value of the index expression will
* be bound. Otherwise, return `null`.
- *
- * This method is only intended to be used by
- * [Expression.staticParameterElement].
*/
+ @deprecated // Use "expression.propagatedParameterElement"
ParameterElement get staticParameterElementForIndex {
- if (staticElement == null) {
- return null;
- }
- List<ParameterElement> parameters = staticElement.parameters;
- if (parameters.length < 1) {
- return null;
- }
- return parameters[0];
+ return _staticParameterElementForIndex;
}
/**
@@ -10802,7 +10534,41 @@
* [expression].
*/
void set target(Expression expression) {
- _target = becomeParentOf(expression);
+ _target = _becomeParentOf(expression);
+ }
+
+ /**
+ * If the AST structure has been resolved, and the function being invoked is
+ * known based on propagated type information, then return the parameter
+ * element representing the parameter to which the value of the index
+ * expression will be bound. Otherwise, return `null`.
+ */
+ ParameterElement get _propagatedParameterElementForIndex {
+ if (propagatedElement == null) {
+ return null;
+ }
+ List<ParameterElement> parameters = propagatedElement.parameters;
+ if (parameters.length < 1) {
+ return null;
+ }
+ return parameters[0];
+ }
+
+ /**
+ * If the AST structure has been resolved, and the function being invoked is
+ * known based on static type information, then return the parameter element
+ * representing the parameter to which the value of the index expression will
+ * be bound. Otherwise, return `null`.
+ */
+ ParameterElement get _staticParameterElementForIndex {
+ if (staticElement == null) {
+ return null;
+ }
+ List<ParameterElement> parameters = staticElement.parameters;
+ if (parameters.length < 1) {
+ return null;
+ }
+ return parameters[0];
}
@override
@@ -10818,6 +10584,7 @@
* methods to return `true` when invoked on the same node.
*/
bool inGetterContext() {
+ // TODO(brianwilkerson) Convert this to a getter.
AstNode parent = this.parent;
if (parent is AssignmentExpression) {
AssignmentExpression assignment = parent;
@@ -10839,6 +10606,7 @@
* methods to return `true` when invoked on the same node.
*/
bool inSetterContext() {
+ // TODO(brianwilkerson) Convert this to a getter.
AstNode parent = this.parent;
if (parent is PrefixExpression) {
return parent.operator.type.isIncrementOperator;
@@ -10865,7 +10633,8 @@
*/
class InstanceCreationExpression extends Expression {
/**
- * The keyword used to indicate how an object should be created.
+ * The 'new' or 'const' keyword used to indicate how an object should be
+ * created.
*/
Token keyword;
@@ -10896,8 +10665,8 @@
*/
InstanceCreationExpression(this.keyword, ConstructorName constructorName,
ArgumentList argumentList) {
- _constructorName = becomeParentOf(constructorName);
- _argumentList = becomeParentOf(argumentList);
+ _constructorName = _becomeParentOf(constructorName);
+ _argumentList = _becomeParentOf(argumentList);
}
/**
@@ -10909,7 +10678,7 @@
* Set the list of arguments to the constructor to the given [argumentList].
*/
void set argumentList(ArgumentList argumentList) {
- _argumentList = becomeParentOf(argumentList);
+ _argumentList = _becomeParentOf(argumentList);
}
@override
@@ -10917,9 +10686,9 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(_constructorName)
- ..add(_argumentList);
+ ..add(keyword)
+ ..add(_constructorName)
+ ..add(_argumentList);
/**
* Return the name of the constructor to be invoked.
@@ -10930,7 +10699,7 @@
* Set the name of the constructor to be invoked to the given [name].
*/
void set constructorName(ConstructorName name) {
- _constructorName = becomeParentOf(name);
+ _constructorName = _becomeParentOf(name);
}
@override
@@ -10940,8 +10709,8 @@
* Return `true` if this creation expression is used to invoke a constant
* constructor.
*/
- bool get isConst =>
- keyword is KeywordToken && (keyword as KeywordToken).keyword == Keyword.CONST;
+ bool get isConst => keyword is KeywordToken &&
+ (keyword as KeywordToken).keyword == Keyword.CONST;
@override
int get precedence => 16;
@@ -10989,9 +10758,6 @@
@override
Token get beginToken => literal;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()..add(literal);
@@ -11014,8 +10780,7 @@
* > [InterpolationExpression]
* > | [InterpolationString]
*/
-abstract class InterpolationElement extends AstNode {
-}
+abstract class InterpolationElement extends AstNode {}
/**
* An expression embedded in a string interpolation.
@@ -11046,9 +10811,9 @@
/**
* Initialize a newly created interpolation expression.
*/
- InterpolationExpression(this.leftBracket, Expression expression,
- this.rightBracket) {
- _expression = becomeParentOf(expression);
+ InterpolationExpression(
+ this.leftBracket, Expression expression, this.rightBracket) {
+ _expression = _becomeParentOf(expression);
}
@override
@@ -11056,9 +10821,9 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(leftBracket)
- ..add(_expression)
- ..add(rightBracket);
+ ..add(leftBracket)
+ ..add(_expression)
+ ..add(rightBracket);
@override
Token get endToken {
@@ -11079,7 +10844,7 @@
* string to the given [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
@override
@@ -11119,9 +10884,6 @@
@override
Token get beginToken => contents;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()..add(contents);
@@ -11177,8 +10939,7 @@
accept(AstVisitor visitor) => visitor.visitInterpolationString(this);
@override
- void visitChildren(AstVisitor visitor) {
- }
+ void visitChildren(AstVisitor visitor) {}
}
/**
@@ -11212,10 +10973,10 @@
* Initialize a newly created is expression. The [notOperator] can be `null`
* if the sense of the test is not negated.
*/
- IsExpression(Expression expression, this.isOperator, this.notOperator,
- TypeName type) {
- _expression = becomeParentOf(expression);
- _type = becomeParentOf(type);
+ IsExpression(
+ Expression expression, this.isOperator, this.notOperator, TypeName type) {
+ _expression = _becomeParentOf(expression);
+ _type = _becomeParentOf(type);
}
@override
@@ -11223,10 +10984,10 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(_expression)
- ..add(isOperator)
- ..add(notOperator)
- ..add(_type);
+ ..add(_expression)
+ ..add(isOperator)
+ ..add(notOperator)
+ ..add(_type);
@override
Token get endToken => _type.endToken;
@@ -11241,7 +11002,7 @@
* the given [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
@override
@@ -11256,7 +11017,7 @@
* Set the name of the type being tested for to the given [name].
*/
void set type(TypeName name) {
- _type = becomeParentOf(name);
+ _type = _becomeParentOf(name);
}
@override
@@ -11290,19 +11051,16 @@
* Initialize a newly created label.
*/
Label(SimpleIdentifier label, this.colon) {
- _label = becomeParentOf(label);
+ _label = _becomeParentOf(label);
}
@override
Token get beginToken => _label.beginToken;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..add(_label)
- ..add(colon);
+ ..add(_label)
+ ..add(colon);
@override
Token get endToken => colon;
@@ -11316,7 +11074,7 @@
* Set the label being associated with the statement to the given [label].
*/
void set label(SimpleIdentifier label) {
- _label = becomeParentOf(label);
+ _label = _becomeParentOf(label);
}
@override
@@ -11350,7 +11108,7 @@
*/
LabeledStatement(List<Label> labels, Statement statement) {
_labels = new NodeList<Label>(this, labels);
- _statement = becomeParentOf(statement);
+ _statement = _becomeParentOf(statement);
}
@override
@@ -11361,13 +11119,10 @@
return _statement.beginToken;
}
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..addAll(_labels)
- ..add(_statement);
+ ..addAll(_labels)
+ ..add(_statement);
@override
Token get endToken => _statement.endToken;
@@ -11387,7 +11142,7 @@
* [statement].
*/
void set statement(Statement statement) {
- _statement = becomeParentOf(statement);
+ _statement = _becomeParentOf(statement);
}
@override
@@ -11411,9 +11166,9 @@
*/
class LibraryDirective extends Directive {
/**
- * The token representing the 'library' token.
+ * The token representing the 'library' keyword.
*/
- Token libraryToken;
+ Token libraryKeyword;
/**
* The name of the library being defined.
@@ -11431,25 +11186,39 @@
* corresponding attribute.
*/
LibraryDirective(Comment comment, List<Annotation> metadata,
- this.libraryToken, LibraryIdentifier name, this.semicolon)
+ this.libraryKeyword, LibraryIdentifier name, this.semicolon)
: super(comment, metadata) {
- _name = becomeParentOf(name);
+ _name = _becomeParentOf(name);
}
@override
Iterable get childEntities => super._childEntities
- ..add(libraryToken)
- ..add(_name)
- ..add(semicolon);
+ ..add(libraryKeyword)
+ ..add(_name)
+ ..add(semicolon);
@override
Token get endToken => semicolon;
@override
- Token get firstTokenAfterCommentAndMetadata => libraryToken;
+ Token get firstTokenAfterCommentAndMetadata => libraryKeyword;
@override
- Token get keyword => libraryToken;
+ Token get keyword => libraryKeyword;
+
+ /**
+ * Return the token representing the 'library' token.
+ */
+ @deprecated // Use "this.libraryKeyword"
+ Token get libraryToken => libraryKeyword;
+
+ /**
+ * Set the token representing the 'library' token to the given [token].
+ */
+ @deprecated // Use "this.libraryKeyword"
+ set libraryToken(Token token) {
+ libraryKeyword = token;
+ }
/**
* Return the name of the library being defined.
@@ -11460,7 +11229,7 @@
* Set the name of the library being defined to the given [name].
*/
void set name(LibraryIdentifier name) {
- _name = becomeParentOf(name);
+ _name = _becomeParentOf(name);
}
@override
@@ -11596,9 +11365,9 @@
*/
@override
Iterable get childEntities => super._childEntities
- ..add(leftBracket)
- ..addAll(_elements)
- ..add(rightBracket);
+ ..add(leftBracket)
+ ..addAll(_elements)
+ ..add(rightBracket);
/**
* Return the expressions used to compute the elements of the list.
@@ -11682,14 +11451,13 @@
}
/**
- * TODO(paulberry): untested.
* TODO(paulberry): add commas.
*/
@override
Iterable get childEntities => super._childEntities
- ..add(leftBracket)
- ..addAll(entries)
- ..add(rightBracket);
+ ..add(leftBracket)
+ ..addAll(entries)
+ ..add(rightBracket);
@override
Token get endToken => rightBracket;
@@ -11735,21 +11503,18 @@
* Initialize a newly created map literal entry.
*/
MapLiteralEntry(Expression key, this.separator, Expression value) {
- _key = becomeParentOf(key);
- _value = becomeParentOf(value);
+ _key = _becomeParentOf(key);
+ _value = _becomeParentOf(value);
}
@override
Token get beginToken => _key.beginToken;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..add(_key)
- ..add(separator)
- ..add(_value);
+ ..add(_key)
+ ..add(separator)
+ ..add(_value);
@override
Token get endToken => _value.endToken;
@@ -11765,7 +11530,7 @@
* associated to the given [string].
*/
void set key(Expression string) {
- _key = becomeParentOf(string);
+ _key = _becomeParentOf(string);
}
/**
@@ -11779,7 +11544,7 @@
* to the given [expression].
*/
void set value(Expression expression) {
- _value = becomeParentOf(expression);
+ _value = _becomeParentOf(expression);
}
@override
@@ -11868,10 +11633,10 @@
this.propertyKeyword, this.operatorKeyword, SimpleIdentifier name,
FormalParameterList parameters, FunctionBody body)
: super(comment, metadata) {
- _returnType = becomeParentOf(returnType);
- _name = becomeParentOf(name);
- _parameters = becomeParentOf(parameters);
- _body = becomeParentOf(body);
+ _returnType = _becomeParentOf(returnType);
+ _name = _becomeParentOf(name);
+ _parameters = _becomeParentOf(parameters);
+ _body = _becomeParentOf(body);
}
/**
@@ -11883,19 +11648,19 @@
* Set the body of the method to the given [functionBody].
*/
void set body(FunctionBody functionBody) {
- _body = becomeParentOf(functionBody);
+ _body = _becomeParentOf(functionBody);
}
@override
Iterable get childEntities => super._childEntities
- ..add(externalKeyword)
- ..add(modifierKeyword)
- ..add(_returnType)
- ..add(propertyKeyword)
- ..add(operatorKeyword)
- ..add(_name)
- ..add(_parameters)
- ..add(_body);
+ ..add(externalKeyword)
+ ..add(modifierKeyword)
+ ..add(_returnType)
+ ..add(propertyKeyword)
+ ..add(operatorKeyword)
+ ..add(_name)
+ ..add(_parameters)
+ ..add(_body);
/**
* Return the element associated with this method, or `null` if the AST
@@ -11928,15 +11693,17 @@
/**
* Return `true` if this method is declared to be an abstract method.
*/
- bool get isAbstract =>
- externalKeyword == null && (_body is EmptyFunctionBody);
+ bool get isAbstract {
+ FunctionBody body = _body;
+ return externalKeyword == null &&
+ (body is EmptyFunctionBody && !body.semicolon.isSynthetic);
+ }
/**
* Return `true` if this method declares a getter.
*/
- bool get isGetter =>
- propertyKeyword != null &&
- (propertyKeyword as KeywordToken).keyword == Keyword.GET;
+ bool get isGetter => propertyKeyword != null &&
+ (propertyKeyword as KeywordToken).keyword == Keyword.GET;
/**
* Return `true` if this method declares an operator.
@@ -11946,16 +11713,14 @@
/**
* Return `true` if this method declares a setter.
*/
- bool get isSetter =>
- propertyKeyword != null &&
- (propertyKeyword as KeywordToken).keyword == Keyword.SET;
+ bool get isSetter => propertyKeyword != null &&
+ (propertyKeyword as KeywordToken).keyword == Keyword.SET;
/**
* Return `true` if this method is declared to be a static method.
*/
- bool get isStatic =>
- modifierKeyword != null &&
- (modifierKeyword as KeywordToken).keyword == Keyword.STATIC;
+ bool get isStatic => modifierKeyword != null &&
+ (modifierKeyword as KeywordToken).keyword == Keyword.STATIC;
/**
* Return the name of the method.
@@ -11966,7 +11731,7 @@
* Set the name of the method to the given [identifier].
*/
void set name(SimpleIdentifier identifier) {
- _name = becomeParentOf(identifier);
+ _name = _becomeParentOf(identifier);
}
/**
@@ -11980,7 +11745,7 @@
* [parameters].
*/
void set parameters(FormalParameterList parameters) {
- _parameters = becomeParentOf(parameters);
+ _parameters = _becomeParentOf(parameters);
}
/**
@@ -11993,7 +11758,7 @@
* Set the return type of the method to the given [typeName].
*/
void set returnType(TypeName typeName) {
- _returnType = becomeParentOf(typeName);
+ _returnType = _becomeParentOf(typeName);
}
@override
@@ -12047,9 +11812,9 @@
*/
MethodInvocation(Expression target, this.period, SimpleIdentifier methodName,
ArgumentList argumentList) {
- _target = becomeParentOf(target);
- _methodName = becomeParentOf(methodName);
- _argumentList = becomeParentOf(argumentList);
+ _target = _becomeParentOf(target);
+ _methodName = _becomeParentOf(methodName);
+ _argumentList = _becomeParentOf(argumentList);
}
/**
@@ -12061,7 +11826,7 @@
* Set the list of arguments to the method to the given [argumentList].
*/
void set argumentList(ArgumentList argumentList) {
- _argumentList = becomeParentOf(argumentList);
+ _argumentList = _becomeParentOf(argumentList);
}
@override
@@ -12076,10 +11841,10 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(_target)
- ..add(period)
- ..add(_methodName)
- ..add(_argumentList);
+ ..add(_target)
+ ..add(period)
+ ..add(_methodName)
+ ..add(_argumentList);
@override
Token get endToken => _argumentList.endToken;
@@ -12101,7 +11866,7 @@
* Set the name of the method being invoked to the given [identifier].
*/
void set methodName(SimpleIdentifier identifier) {
- _methodName = becomeParentOf(identifier);
+ _methodName = _becomeParentOf(identifier);
}
@override
@@ -12142,7 +11907,7 @@
* the given [expression].
*/
void set target(Expression expression) {
- _target = becomeParentOf(expression);
+ _target = _becomeParentOf(expression);
}
@override
@@ -12178,8 +11943,8 @@
* Initialize a newly created named expression..
*/
NamedExpression(Label name, Expression expression) {
- _name = becomeParentOf(name);
- _expression = becomeParentOf(expression);
+ _name = _becomeParentOf(name);
+ _expression = _becomeParentOf(expression);
}
@override
@@ -12187,8 +11952,8 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(_name)
- ..add(_expression);
+ ..add(_name)
+ ..add(_expression);
/**
* Return the element representing the parameter being named by this
@@ -12216,7 +11981,7 @@
* [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
/**
@@ -12228,7 +11993,7 @@
* Set the name associated with the expression to the given [identifier].
*/
void set name(Label identifier) {
- _name = becomeParentOf(identifier);
+ _name = _becomeParentOf(identifier);
}
@override
@@ -12304,7 +12069,7 @@
/**
* The token representing the 'native' keyword.
*/
- Token keyword;
+ Token nativeKeyword;
/**
* The name of the native object that implements the class.
@@ -12314,25 +12079,36 @@
/**
* Initialize a newly created native clause.
*/
- NativeClause(this.keyword, StringLiteral name) {
- _name = becomeParentOf(name);
+ NativeClause(this.nativeKeyword, StringLiteral name) {
+ _name = _becomeParentOf(name);
}
@override
- Token get beginToken => keyword;
+ Token get beginToken => nativeKeyword;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(_name);
+ ..add(nativeKeyword)
+ ..add(_name);
@override
Token get endToken => _name.endToken;
/**
+ * Get the token representing the 'native' keyword.
+ */
+ @deprecated // Use "this.nativeKeyword"
+ Token get keyword => nativeKeyword;
+
+ /**
+ * Set the token representing the 'native' keyword to the given [token].
+ */
+ @deprecated // Use "this.nativeKeyword"
+ set keyword(Token token) {
+ nativeKeyword = token;
+ }
+
+ /**
* Return the name of the native object that implements the class.
*/
StringLiteral get name => _name;
@@ -12342,7 +12118,7 @@
* [name].
*/
void set name(StringLiteral name) {
- _name = becomeParentOf(name);
+ _name = _becomeParentOf(name);
}
@override
@@ -12365,7 +12141,7 @@
/**
* The token representing 'native' that marks the start of the function body.
*/
- Token nativeToken;
+ Token nativeKeyword;
/**
* The string literal, after the 'native' token.
@@ -12382,27 +12158,40 @@
* Initialize a newly created function body consisting of the 'native' token,
* a string literal, and a semicolon.
*/
- NativeFunctionBody(this.nativeToken, StringLiteral stringLiteral,
- this.semicolon) {
- _stringLiteral = becomeParentOf(stringLiteral);
+ NativeFunctionBody(
+ this.nativeKeyword, StringLiteral stringLiteral, this.semicolon) {
+ _stringLiteral = _becomeParentOf(stringLiteral);
}
@override
- Token get beginToken => nativeToken;
+ Token get beginToken => nativeKeyword;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..add(nativeToken)
- ..add(_stringLiteral)
- ..add(semicolon);
+ ..add(nativeKeyword)
+ ..add(_stringLiteral)
+ ..add(semicolon);
@override
Token get endToken => semicolon;
/**
+ * Return the token representing 'native' that marks the start of the function
+ * body.
+ */
+ @deprecated // Use "this.nativeKeyword"
+ Token get nativeToken => nativeKeyword;
+
+ /**
+ * Set the token representing 'native' that marks the start of the function
+ * body to the given [token].
+ */
+ @deprecated // Use "this.nativeKeyword"
+ set nativeToken(Token token) {
+ nativeKeyword = token;
+ }
+
+ /**
* Return the string literal representing the string after the 'native' token.
*/
StringLiteral get stringLiteral => _stringLiteral;
@@ -12412,7 +12201,7 @@
* the given [stringLiteral].
*/
void set stringLiteral(StringLiteral stringLiteral) {
- _stringLiteral = becomeParentOf(stringLiteral);
+ _stringLiteral = _becomeParentOf(stringLiteral);
}
@override
@@ -12472,7 +12261,7 @@
int get length => _elements.length;
- @deprecated
+ @deprecated // Never intended for public use.
void set length(int value) {
throw new UnsupportedError("Cannot resize NodeList.");
}
@@ -12488,7 +12277,7 @@
if (index < 0 || index >= _elements.length) {
throw new RangeError("Index: $index, Size: ${_elements.length}");
}
- owner.becomeParentOf(node);
+ owner._becomeParentOf(node);
_elements[index] = node;
}
@@ -12512,7 +12301,7 @@
if (nodes != null && !nodes.isEmpty) {
_elements.addAll(nodes);
for (E node in nodes) {
- owner.becomeParentOf(node);
+ owner._becomeParentOf(node);
}
return true;
}
@@ -12530,7 +12319,7 @@
if (index < 0 || index > length) {
throw new RangeError("Index: $index, Size: ${_elements.length}");
}
- owner.becomeParentOf(node);
+ owner._becomeParentOf(node);
if (length == 0) {
_elements.add(node);
} else {
@@ -12550,10 +12339,8 @@
/**
* Create an empty list with the given [owner].
- *
- * Use "new NodeList<E>(owner)"
*/
- @deprecated
+ @deprecated // Use "new NodeList<E>(owner)"
static NodeList create(AstNode owner) => new NodeList(owner);
}
@@ -12655,8 +12442,7 @@
* An exception used by [NodeLocator] to cancel visiting after a node has been
* found.
*/
-class NodeLocator_NodeFoundException extends RuntimeException {
-}
+class NodeLocator_NodeFoundException extends RuntimeException {}
/**
* An object that will replace one child node in an AST node with another node.
@@ -13527,8 +13313,8 @@
}
@override
- bool
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ bool visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
if (identical(node.constructorName, _oldNode)) {
node.constructorName = _newNode as SimpleIdentifier;
return true;
@@ -13852,11 +13638,11 @@
* [comment] and [metadata] can be `null` if the parameter does not have the
* corresponding attribute.
*/
- NormalFormalParameter(Comment comment, List<Annotation> metadata,
- SimpleIdentifier identifier) {
- _comment = becomeParentOf(comment);
+ NormalFormalParameter(
+ Comment comment, List<Annotation> metadata, SimpleIdentifier identifier) {
+ _comment = _becomeParentOf(comment);
_metadata = new NodeList<Annotation>(this, metadata);
- _identifier = becomeParentOf(identifier);
+ _identifier = _becomeParentOf(identifier);
}
/**
@@ -13870,7 +13656,7 @@
* [comment].
*/
void set documentationComment(Comment comment) {
- _comment = becomeParentOf(comment);
+ _comment = _becomeParentOf(comment);
}
@override
@@ -13880,7 +13666,7 @@
* Set the name of the parameter being declared to the given [identifier].
*/
void set identifier(SimpleIdentifier identifier) {
- _identifier = becomeParentOf(identifier);
+ _identifier = _becomeParentOf(identifier);
}
@override
@@ -13911,17 +13697,17 @@
*/
List<AstNode> get sortedCommentAndAnnotations {
return <AstNode>[]
- ..add(_comment)
- ..addAll(_metadata)
- ..sort(AstNode.LEXICAL_ORDER);
+ ..add(_comment)
+ ..addAll(_metadata)
+ ..sort(AstNode.LEXICAL_ORDER);
}
ChildEntities get _childEntities {
ChildEntities result = new ChildEntities();
if (_commentIsBeforeAnnotations()) {
result
- ..add(_comment)
- ..addAll(_metadata);
+ ..add(_comment)
+ ..addAll(_metadata);
} else {
result.addAll(sortedCommentAndAnnotations);
}
@@ -13976,9 +13762,6 @@
@override
Token get beginToken => literal;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()..add(literal);
@@ -14019,9 +13802,9 @@
/**
* Initialize a newly created parenthesized expression.
*/
- ParenthesizedExpression(this.leftParenthesis, Expression expression,
- this.rightParenthesis) {
- _expression = becomeParentOf(expression);
+ ParenthesizedExpression(
+ this.leftParenthesis, Expression expression, this.rightParenthesis) {
+ _expression = _becomeParentOf(expression);
}
@override
@@ -14029,9 +13812,9 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(leftParenthesis)
- ..add(_expression)
- ..add(rightParenthesis);
+ ..add(leftParenthesis)
+ ..add(_expression)
+ ..add(rightParenthesis);
@override
Token get endToken => rightParenthesis;
@@ -14045,7 +13828,7 @@
* Set the expression within the parentheses to the given [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
@override
@@ -14068,9 +13851,9 @@
*/
class PartDirective extends UriBasedDirective {
/**
- * The token representing the 'part' token.
+ * The token representing the 'part' keyword.
*/
- Token partToken;
+ Token partKeyword;
/**
* The semicolon terminating the directive.
@@ -14082,27 +13865,38 @@
* and [metadata] can be `null` if the directive does not have the
* corresponding attribute.
*/
- PartDirective(Comment comment, List<Annotation> metadata, this.partToken,
+ PartDirective(Comment comment, List<Annotation> metadata, this.partKeyword,
StringLiteral partUri, this.semicolon)
: super(comment, metadata, partUri);
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => super._childEntities
- ..add(partToken)
- ..add(_uri)
- ..add(semicolon);
+ ..add(partKeyword)
+ ..add(_uri)
+ ..add(semicolon);
@override
Token get endToken => semicolon;
@override
- Token get firstTokenAfterCommentAndMetadata => partToken;
+ Token get firstTokenAfterCommentAndMetadata => partKeyword;
@override
- Token get keyword => partToken;
+ Token get keyword => partKeyword;
+
+ /**
+ * Return the token representing the 'part' token.
+ */
+ @deprecated // Use "this.partKeyword"
+ Token get partToken => partKeyword;
+
+ /**
+ * Set the token representing the 'part' token to the given [token].
+ */
+ @deprecated // Use "this.partKeyword"
+ set partToken(Token token) {
+ partKeyword = token;
+ }
@override
CompilationUnitElement get uriElement => element as CompilationUnitElement;
@@ -14119,14 +13913,14 @@
*/
class PartOfDirective extends Directive {
/**
- * The token representing the 'part' token.
+ * The token representing the 'part' keyword.
*/
- Token partToken;
+ Token partKeyword;
/**
- * The token representing the 'of' token.
+ * The token representing the 'of' keyword.
*/
- Token ofToken;
+ Token ofKeyword;
/**
* The name of the library that the containing compilation unit is part of.
@@ -14143,27 +13937,27 @@
* [comment] and [metadata] can be `null` if the directive does not have the
* corresponding attribute.
*/
- PartOfDirective(Comment comment, List<Annotation> metadata, this.partToken,
- this.ofToken, LibraryIdentifier libraryName, this.semicolon)
+ PartOfDirective(Comment comment, List<Annotation> metadata, this.partKeyword,
+ this.ofKeyword, LibraryIdentifier libraryName, this.semicolon)
: super(comment, metadata) {
- _libraryName = becomeParentOf(libraryName);
+ _libraryName = _becomeParentOf(libraryName);
}
@override
Iterable get childEntities => super._childEntities
- ..add(partToken)
- ..add(ofToken)
- ..add(_libraryName)
- ..add(semicolon);
+ ..add(partKeyword)
+ ..add(ofKeyword)
+ ..add(_libraryName)
+ ..add(semicolon);
@override
Token get endToken => semicolon;
@override
- Token get firstTokenAfterCommentAndMetadata => partToken;
+ Token get firstTokenAfterCommentAndMetadata => partKeyword;
@override
- Token get keyword => partToken;
+ Token get keyword => partKeyword;
/**
* Return the name of the library that the containing compilation unit is part
@@ -14176,7 +13970,35 @@
* to the given [libraryName].
*/
void set libraryName(LibraryIdentifier libraryName) {
- _libraryName = becomeParentOf(libraryName);
+ _libraryName = _becomeParentOf(libraryName);
+ }
+
+ /**
+ * Return the token representing the 'of' token.
+ */
+ @deprecated // Use "this.ofKeyword"
+ Token get ofToken => ofKeyword;
+
+ /**
+ * Set the token representing the 'of' token to the given [token].
+ */
+ @deprecated // Use "this.ofKeyword"
+ set ofToken(Token token) {
+ ofKeyword = token;
+ }
+
+ /**
+ * Return the token representing the 'part' token.
+ */
+ @deprecated // Use "this.partKeyword"
+ Token get partToken => partKeyword;
+
+ /**
+ * Set the token representing the 'part' token to the given [token].
+ */
+ @deprecated // Use "this.partKeyword"
+ set partToken(Token token) {
+ partKeyword = token;
}
@override
@@ -14225,7 +14047,7 @@
* Initialize a newly created postfix expression.
*/
PostfixExpression(Expression operand, this.operator) {
- _operand = becomeParentOf(operand);
+ _operand = _becomeParentOf(operand);
}
@override
@@ -14246,13 +14068,10 @@
return element;
}
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..add(_operand)
- ..add(operator);
+ ..add(_operand)
+ ..add(operator);
@override
Token get endToken => operator;
@@ -14267,7 +14086,7 @@
* [expression].
*/
void set operand(Expression expression) {
- _operand = becomeParentOf(expression);
+ _operand = _becomeParentOf(expression);
}
@override
@@ -14278,11 +14097,30 @@
* known based on propagated type information, then return the parameter
* element representing the parameter to which the value of the operand will
* be bound. Otherwise, return `null`.
- *
- * This method is only intended to be used by
- * [Expression.propagatedParameterElement].
*/
+ @deprecated // Use "expression.propagatedParameterElement"
ParameterElement get propagatedParameterElementForOperand {
+ return _propagatedParameterElementForOperand;
+ }
+
+ /**
+ * If the AST structure has been resolved, and the function being invoked is
+ * known based on static type information, then return the parameter element
+ * representing the parameter to which the value of the operand will be bound.
+ * Otherwise, return `null`.
+ */
+ @deprecated // Use "expression.propagatedParameterElement"
+ ParameterElement get staticParameterElementForOperand {
+ return _staticParameterElementForOperand;
+ }
+
+ /**
+ * If the AST structure has been resolved, and the function being invoked is
+ * known based on propagated type information, then return the parameter
+ * element representing the parameter to which the value of the operand will
+ * be bound. Otherwise, return `null`.
+ */
+ ParameterElement get _propagatedParameterElementForOperand {
if (propagatedElement == null) {
return null;
}
@@ -14298,11 +14136,8 @@
* known based on static type information, then return the parameter element
* representing the parameter to which the value of the operand will be bound.
* Otherwise, return `null`.
- *
- * This method is only intended to be used by
- * [Expression.staticParameterElement].
*/
- ParameterElement get staticParameterElementForOperand {
+ ParameterElement get _staticParameterElementForOperand {
if (staticElement == null) {
return null;
}
@@ -14348,10 +14183,10 @@
/**
* Initialize a newly created prefixed identifier.
*/
- PrefixedIdentifier(SimpleIdentifier prefix, this.period,
- SimpleIdentifier identifier) {
- _prefix = becomeParentOf(prefix);
- _identifier = becomeParentOf(identifier);
+ PrefixedIdentifier(
+ SimpleIdentifier prefix, this.period, SimpleIdentifier identifier) {
+ _prefix = _becomeParentOf(prefix);
+ _identifier = _becomeParentOf(identifier);
}
@override
@@ -14367,9 +14202,9 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(_prefix)
- ..add(period)
- ..add(_identifier);
+ ..add(_prefix)
+ ..add(period)
+ ..add(_identifier);
@override
Token get endToken => _identifier.endToken;
@@ -14383,7 +14218,7 @@
* Set the identifier being prefixed to the given [identifier].
*/
void set identifier(SimpleIdentifier identifier) {
- _identifier = becomeParentOf(identifier);
+ _identifier = _becomeParentOf(identifier);
}
/**
@@ -14424,7 +14259,7 @@
* defined to the given [identifier].
*/
void set prefix(SimpleIdentifier identifier) {
- _prefix = becomeParentOf(identifier);
+ _prefix = _becomeParentOf(identifier);
}
@override
@@ -14488,7 +14323,7 @@
* Initialize a newly created prefix expression.
*/
PrefixExpression(this.operator, Expression operand) {
- _operand = becomeParentOf(operand);
+ _operand = _becomeParentOf(operand);
}
@override
@@ -14511,8 +14346,8 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(operator)
- ..add(_operand);
+ ..add(operator)
+ ..add(_operand);
@override
Token get endToken => _operand.endToken;
@@ -14527,7 +14362,7 @@
* [expression].
*/
void set operand(Expression expression) {
- _operand = becomeParentOf(expression);
+ _operand = _becomeParentOf(expression);
}
@override
@@ -14538,11 +14373,30 @@
* known based on propagated type information, then return the parameter
* element representing the parameter to which the value of the operand will
* be bound. Otherwise, return `null`.
- *
- * This method is only intended to be used by
- * [Expression.propagatedParameterElement].
*/
+ @deprecated // Use "expression.propagatedParameterElement"
ParameterElement get propagatedParameterElementForOperand {
+ return _propagatedParameterElementForOperand;
+ }
+
+ /**
+ * If the AST structure has been resolved, and the function being invoked is
+ * known based on static type information, then return the parameter element
+ * representing the parameter to which the value of the operand will be bound.
+ * Otherwise, return `null`.
+ */
+ @deprecated // Use "expression.propagatedParameterElement"
+ ParameterElement get staticParameterElementForOperand {
+ return _staticParameterElementForOperand;
+ }
+
+ /**
+ * If the AST structure has been resolved, and the function being invoked is
+ * known based on propagated type information, then return the parameter
+ * element representing the parameter to which the value of the operand will
+ * be bound. Otherwise, return `null`.
+ */
+ ParameterElement get _propagatedParameterElementForOperand {
if (propagatedElement == null) {
return null;
}
@@ -14558,11 +14412,8 @@
* known based on static type information, then return the parameter element
* representing the parameter to which the value of the operand will be bound.
* Otherwise, return `null`.
- *
- * This method is only intended to be used by
- * [Expression.staticParameterElement].
*/
- ParameterElement get staticParameterElementForOperand {
+ ParameterElement get _staticParameterElementForOperand {
if (staticElement == null) {
return null;
}
@@ -14611,10 +14462,10 @@
/**
* Initialize a newly created property access expression.
*/
- PropertyAccess(Expression target, this.operator,
- SimpleIdentifier propertyName) {
- _target = becomeParentOf(target);
- _propertyName = becomeParentOf(propertyName);
+ PropertyAccess(
+ Expression target, this.operator, SimpleIdentifier propertyName) {
+ _target = _becomeParentOf(target);
+ _propertyName = _becomeParentOf(propertyName);
}
@override
@@ -14627,9 +14478,9 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(_target)
- ..add(operator)
- ..add(_propertyName);
+ ..add(_target)
+ ..add(operator)
+ ..add(_propertyName);
@override
Token get endToken => _propertyName.endToken;
@@ -14657,7 +14508,7 @@
* Set the name of the property being accessed to the given [identifier].
*/
void set propertyName(SimpleIdentifier identifier) {
- _propertyName = becomeParentOf(identifier);
+ _propertyName = _becomeParentOf(identifier);
}
/**
@@ -14694,7 +14545,7 @@
* accessed to the given [expression].
*/
void set target(Expression expression) {
- _target = becomeParentOf(expression);
+ _target = _becomeParentOf(expression);
}
@override
@@ -15181,8 +15032,8 @@
}
@override
- R
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ R visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
node.visitChildren(this);
return null;
}
@@ -15367,7 +15218,7 @@
/**
* The token for the 'this' keyword.
*/
- Token keyword;
+ Token thisKeyword;
/**
* The token for the period before the name of the constructor that is being
@@ -15398,10 +15249,10 @@
* with the given name with the given arguments. The [constructorName] can be
* `null` if the constructor being invoked is the unnamed constructor.
*/
- RedirectingConstructorInvocation(this.keyword, this.period,
+ RedirectingConstructorInvocation(this.thisKeyword, this.period,
SimpleIdentifier constructorName, ArgumentList argumentList) {
- _constructorName = becomeParentOf(constructorName);
- _argumentList = becomeParentOf(argumentList);
+ _constructorName = _becomeParentOf(constructorName);
+ _argumentList = _becomeParentOf(argumentList);
}
/**
@@ -15413,18 +15264,18 @@
* Set the list of arguments to the constructor to the given [argumentList].
*/
void set argumentList(ArgumentList argumentList) {
- _argumentList = becomeParentOf(argumentList);
+ _argumentList = _becomeParentOf(argumentList);
}
@override
- Token get beginToken => keyword;
+ Token get beginToken => thisKeyword;
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(period)
- ..add(_constructorName)
- ..add(_argumentList);
+ ..add(thisKeyword)
+ ..add(period)
+ ..add(_constructorName)
+ ..add(_argumentList);
/**
* Return the name of the constructor that is being invoked, or `null` if the
@@ -15437,12 +15288,26 @@
* [identifier].
*/
void set constructorName(SimpleIdentifier identifier) {
- _constructorName = becomeParentOf(identifier);
+ _constructorName = _becomeParentOf(identifier);
}
@override
Token get endToken => _argumentList.endToken;
+ /**
+ * Return the token for the 'this' keyword.
+ */
+ @deprecated // Use "this.thisKeyword"
+ Token get keyword => thisKeyword;
+
+ /**
+ * Set the token for the 'this' keyword to the given [token].
+ */
+ @deprecated // Use "this.thisKeyword"
+ set keyword(Token token) {
+ thisKeyword = token;
+ }
+
@override
accept(AstVisitor visitor) =>
visitor.visitRedirectingConstructorInvocation(this);
@@ -15464,24 +15329,35 @@
/**
* The token representing the 'rethrow' keyword.
*/
- Token keyword;
+ Token rethrowKeyword;
/**
* Initialize a newly created rethrow expression.
*/
- RethrowExpression(this.keyword);
+ RethrowExpression(this.rethrowKeyword);
@override
- Token get beginToken => keyword;
+ Token get beginToken => rethrowKeyword;
+
+ @override
+ Iterable get childEntities => new ChildEntities()..add(rethrowKeyword);
+
+ @override
+ Token get endToken => rethrowKeyword;
/**
- * TODO(paulberry): untested.
+ * Return the token representing the 'rethrow' keyword.
*/
- @override
- Iterable get childEntities => new ChildEntities()..add(keyword);
+ @deprecated // Use "this.rethrowKeyword"
+ Token get keyword => rethrowKeyword;
- @override
- Token get endToken => keyword;
+ /**
+ * Set the token representing the 'rethrow' keyword to the given [token].
+ */
+ @deprecated // Use "this.rethrowKeyword"
+ set keyword(Token token) {
+ rethrowKeyword = token;
+ }
@override
int get precedence => 0;
@@ -15505,7 +15381,7 @@
/**
* The token representing the 'return' keyword.
*/
- Token keyword;
+ Token returnKeyword;
/**
* The expression computing the value to be returned, or `null` if no explicit
@@ -15522,18 +15398,18 @@
* Initialize a newly created return statement. The [expression] can be `null`
* if no explicit value was provided.
*/
- ReturnStatement(this.keyword, Expression expression, this.semicolon) {
- _expression = becomeParentOf(expression);
+ ReturnStatement(this.returnKeyword, Expression expression, this.semicolon) {
+ _expression = _becomeParentOf(expression);
}
@override
- Token get beginToken => keyword;
+ Token get beginToken => returnKeyword;
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(_expression)
- ..add(semicolon);
+ ..add(returnKeyword)
+ ..add(_expression)
+ ..add(semicolon);
@override
Token get endToken => semicolon;
@@ -15549,7 +15425,21 @@
* [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
+ }
+
+ /**
+ * Return the token representing the 'return' keyword.
+ */
+ @deprecated // Use "this.returnKeyword"
+ Token get keyword => returnKeyword;
+
+ /**
+ * Set the token representing the 'return' keyword to the given [token].
+ */
+ @deprecated // Use "this.returnKeyword"
+ set keyword(Token token) {
+ returnKeyword = token;
}
@override
@@ -15766,9 +15656,6 @@
@override
Token get beginToken => scriptTag;
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()..add(scriptTag);
@@ -15809,8 +15696,8 @@
*/
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..addAll(_shownNames);
+ ..add(keyword)
+ ..addAll(_shownNames);
@override
Token get endToken => _shownNames.endToken;
@@ -16072,9 +15959,8 @@
R visitPropertyAccess(PropertyAccess node) => null;
@override
- R
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) =>
- null;
+ R visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) => null;
@override
R visitRethrowExpression(RethrowExpression node) => null;
@@ -16190,7 +16076,7 @@
SimpleFormalParameter(Comment comment, List<Annotation> metadata,
this.keyword, TypeName type, SimpleIdentifier identifier)
: super(comment, metadata, identifier) {
- _type = becomeParentOf(type);
+ _type = _becomeParentOf(type);
}
@override
@@ -16206,25 +16092,22 @@
return identifier.beginToken;
}
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => super._childEntities
- ..add(keyword)
- ..add(_type)
- ..add(identifier);
+ ..add(keyword)
+ ..add(_type)
+ ..add(identifier);
@override
Token get endToken => identifier.endToken;
@override
- bool get isConst =>
- (keyword is KeywordToken) && (keyword as KeywordToken).keyword == Keyword.CONST;
+ bool get isConst => (keyword is KeywordToken) &&
+ (keyword as KeywordToken).keyword == Keyword.CONST;
@override
- bool get isFinal =>
- (keyword is KeywordToken) && (keyword as KeywordToken).keyword == Keyword.FINAL;
+ bool get isFinal => (keyword is KeywordToken) &&
+ (keyword as KeywordToken).keyword == Keyword.FINAL;
/**
* Return the name of the declared type of the parameter, or `null` if the
@@ -16236,7 +16119,7 @@
* Set the name of the declared type of the parameter to the given [typeName].
*/
void set type(TypeName typeName) {
- _type = becomeParentOf(typeName);
+ _type = _becomeParentOf(typeName);
}
@override
@@ -16304,9 +16187,6 @@
return _propagatedElement;
}
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()..add(token);
@@ -16372,6 +16252,7 @@
* declaration.
*/
bool inDeclarationContext() {
+ // TODO(brianwilkerson) Convert this to a getter.
AstNode parent = this.parent;
if (parent is CatchClause) {
CatchClause clause = parent;
@@ -16419,6 +16300,7 @@
* methods to return `true` when invoked on the same node.
*/
bool inGetterContext() {
+ // TODO(brianwilkerson) Convert this to a getter.
AstNode parent = this.parent;
AstNode target = this;
// skip prefix
@@ -16466,6 +16348,7 @@
* methods to return `true` when invoked on the same node.
*/
bool inSetterContext() {
+ // TODO(brianwilkerson) Convert this to a getter.
AstNode parent = this.parent;
AstNode target = this;
// skip prefix
@@ -16512,8 +16395,8 @@
* The [isValid] is `true` if the element is appropriate.
* The [element] is the element to be associated with this identifier.
*/
- Element _returnOrReportElement(AstNode parent, bool isValid,
- Element element) {
+ Element _returnOrReportElement(
+ AstNode parent, bool isValid, Element element) {
if (!isValid) {
AnalysisEngine.instance.logger.logInformation(
"Internal error: attempting to set the name of a ${parent.runtimeType} to a ${element.runtimeType}",
@@ -16539,40 +16422,26 @@
} else if (parent is DeclaredIdentifier &&
identical(parent.identifier, this)) {
return _returnOrReportElement(
- parent,
- element is LocalVariableElement,
- element);
+ parent, element is LocalVariableElement, element);
} else if (parent is FormalParameter &&
identical(parent.identifier, this)) {
return _returnOrReportElement(
- parent,
- element is ParameterElement,
- element);
+ parent, element is ParameterElement, element);
} else if (parent is FunctionDeclaration && identical(parent.name, this)) {
return _returnOrReportElement(
- parent,
- element is ExecutableElement,
- element);
+ parent, element is ExecutableElement, element);
} else if (parent is FunctionTypeAlias && identical(parent.name, this)) {
return _returnOrReportElement(
- parent,
- element is FunctionTypeAliasElement,
- element);
+ parent, element is FunctionTypeAliasElement, element);
} else if (parent is MethodDeclaration && identical(parent.name, this)) {
return _returnOrReportElement(
- parent,
- element is ExecutableElement,
- element);
+ parent, element is ExecutableElement, element);
} else if (parent is TypeParameter && identical(parent.name, this)) {
return _returnOrReportElement(
- parent,
- element is TypeParameterElement,
- element);
+ parent, element is TypeParameterElement, element);
} else if (parent is VariableDeclaration && identical(parent.name, this)) {
return _returnOrReportElement(
- parent,
- element is VariableElement,
- element);
+ parent, element is VariableElement, element);
}
return element;
}
@@ -16614,6 +16483,7 @@
/**
* The toolkit specific element associated with this literal, or `null`.
*/
+ @deprecated // No replacement
Element toolkitElement;
/**
@@ -16702,13 +16572,13 @@
accept(AstVisitor visitor) => visitor.visitSimpleStringLiteral(this);
@override
- void appendStringValue(StringBuffer buffer) {
- buffer.write(value);
+ void visitChildren(AstVisitor visitor) {
+ // There are no children to visit.
}
@override
- void visitChildren(AstVisitor visitor) {
- // There are no children to visit.
+ void _appendStringValue(StringBuffer buffer) {
+ buffer.write(value);
}
}
@@ -16845,13 +16715,13 @@
accept(AstVisitor visitor) => visitor.visitStringInterpolation(this);
@override
- void appendStringValue(StringBuffer buffer) {
- throw new IllegalArgumentException();
+ void visitChildren(AstVisitor visitor) {
+ _elements.accept(visitor);
}
@override
- void visitChildren(AstVisitor visitor) {
- _elements.accept(visitor);
+ void _appendStringValue(StringBuffer buffer) {
+ throw new IllegalArgumentException();
}
}
@@ -16871,7 +16741,7 @@
String get stringValue {
StringBuffer buffer = new StringBuffer();
try {
- appendStringValue(buffer);
+ _appendStringValue(buffer);
} on IllegalArgumentException catch (exception) {
return null;
}
@@ -16883,7 +16753,15 @@
* [IllegalArgumentException] if the string is not a constant string without
* any string interpolation.
*/
- void appendStringValue(StringBuffer buffer);
+ @deprecated // Use "this.stringValue"
+ void appendStringValue(StringBuffer buffer) => _appendStringValue(buffer);
+
+ /**
+ * Append the value of this string literal to the given [buffer]. Throw an
+ * [IllegalArgumentException] if the string is not a constant string without
+ * any string interpolation.
+ */
+ void _appendStringValue(StringBuffer buffer);
}
/**
@@ -16897,7 +16775,7 @@
/**
* The token for the 'super' keyword.
*/
- Token keyword;
+ Token superKeyword;
/**
* The token for the period before the name of the constructor that is being
@@ -16929,10 +16807,10 @@
* [constructorName] can be `null` if the constructor being invoked is the
* unnamed constructor.
*/
- SuperConstructorInvocation(this.keyword, this.period,
+ SuperConstructorInvocation(this.superKeyword, this.period,
SimpleIdentifier constructorName, ArgumentList argumentList) {
- _constructorName = becomeParentOf(constructorName);
- _argumentList = becomeParentOf(argumentList);
+ _constructorName = _becomeParentOf(constructorName);
+ _argumentList = _becomeParentOf(argumentList);
}
/**
@@ -16944,18 +16822,18 @@
* Set the list of arguments to the constructor to the given [argumentList].
*/
void set argumentList(ArgumentList argumentList) {
- _argumentList = becomeParentOf(argumentList);
+ _argumentList = _becomeParentOf(argumentList);
}
@override
- Token get beginToken => keyword;
+ Token get beginToken => superKeyword;
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(period)
- ..add(_constructorName)
- ..add(_argumentList);
+ ..add(superKeyword)
+ ..add(period)
+ ..add(_constructorName)
+ ..add(_argumentList);
/**
* Return the name of the constructor that is being invoked, or `null` if the
@@ -16968,12 +16846,26 @@
* [identifier].
*/
void set constructorName(SimpleIdentifier identifier) {
- _constructorName = becomeParentOf(identifier);
+ _constructorName = _becomeParentOf(identifier);
}
@override
Token get endToken => _argumentList.endToken;
+ /**
+ * Return the token for the 'super' keyword.
+ */
+ @deprecated // Use "this.superKeyword"
+ Token get keyword => superKeyword;
+
+ /**
+ * Set the token for the 'super' keyword to the given [token].
+ */
+ @deprecated // Use "this.superKeyword"
+ set keyword(Token token) {
+ superKeyword = token;
+ }
+
@override
accept(AstVisitor visitor) => visitor.visitSuperConstructorInvocation(this);
@@ -16992,26 +16884,37 @@
*/
class SuperExpression extends Expression {
/**
- * The token representing the keyword.
+ * The token representing the 'super' keyword.
*/
- Token keyword;
+ Token superKeyword;
/**
* Initialize a newly created super expression.
*/
- SuperExpression(this.keyword);
+ SuperExpression(this.superKeyword);
@override
- Token get beginToken => keyword;
+ Token get beginToken => superKeyword;
+
+ @override
+ Iterable get childEntities => new ChildEntities()..add(superKeyword);
+
+ @override
+ Token get endToken => superKeyword;
/**
- * TODO(paulberry): untested.
+ * Return the token for the 'super' keyword.
*/
- @override
- Iterable get childEntities => new ChildEntities()..add(keyword);
+ @deprecated // Use "this.superKeyword"
+ Token get keyword => superKeyword;
- @override
- Token get endToken => keyword;
+ /**
+ * Set the token for the 'super' keyword to the given [token].
+ */
+ @deprecated // Use "this.superKeyword"
+ set keyword(Token token) {
+ superKeyword = token;
+ }
@override
int get precedence => 16;
@@ -17044,16 +16947,16 @@
SwitchCase(List<Label> labels, Token keyword, Expression expression,
Token colon, List<Statement> statements)
: super(labels, keyword, colon, statements) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
@override
Iterable get childEntities => new ChildEntities()
- ..addAll(labels)
- ..add(keyword)
- ..add(_expression)
- ..add(colon)
- ..addAll(statements);
+ ..addAll(labels)
+ ..add(keyword)
+ ..add(_expression)
+ ..add(colon)
+ ..addAll(statements);
/**
* Return the expression controlling whether the statements will be executed.
@@ -17065,7 +16968,7 @@
* the given [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
@override
@@ -17094,15 +16997,12 @@
List<Statement> statements)
: super(labels, keyword, colon, statements);
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..addAll(labels)
- ..add(keyword)
- ..add(colon)
- ..addAll(statements);
+ ..addAll(labels)
+ ..add(keyword)
+ ..add(colon)
+ ..addAll(statements);
@override
accept(AstVisitor visitor) => visitor.visitSwitchDefault(this);
@@ -17190,7 +17090,7 @@
/**
* The token representing the 'switch' keyword.
*/
- Token keyword;
+ Token switchKeyword;
/**
* The left parenthesis.
@@ -17227,25 +17127,25 @@
* Initialize a newly created switch statement. The list of [members] can be
* `null` if there are no switch members.
*/
- SwitchStatement(this.keyword, this.leftParenthesis, Expression expression,
- this.rightParenthesis, this.leftBracket, List<SwitchMember> members,
- this.rightBracket) {
- _expression = becomeParentOf(expression);
+ SwitchStatement(this.switchKeyword, this.leftParenthesis,
+ Expression expression, this.rightParenthesis, this.leftBracket,
+ List<SwitchMember> members, this.rightBracket) {
+ _expression = _becomeParentOf(expression);
_members = new NodeList<SwitchMember>(this, members);
}
@override
- Token get beginToken => keyword;
+ Token get beginToken => switchKeyword;
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(leftParenthesis)
- ..add(_expression)
- ..add(rightParenthesis)
- ..add(leftBracket)
- ..addAll(_members)
- ..add(rightBracket);
+ ..add(switchKeyword)
+ ..add(leftParenthesis)
+ ..add(_expression)
+ ..add(rightParenthesis)
+ ..add(leftBracket)
+ ..addAll(_members)
+ ..add(rightBracket);
@override
Token get endToken => rightBracket;
@@ -17261,7 +17161,21 @@
* selected to the given [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
+ }
+
+ /**
+ * Return the token representing the 'switch' keyword.
+ */
+ @deprecated // Use "this.switchKeyword"
+ Token get keyword => switchKeyword;
+
+ /**
+ * Set the token representing the 'switch' keyword to the given [token].
+ */
+ @deprecated // Use "this.switchKeyword"
+ set keyword(Token token) {
+ switchKeyword = token;
}
/**
@@ -17305,13 +17219,12 @@
Token get beginToken => poundSign;
/**
- * TODO(paulberry): untested.
* TODO(paulberry): add "." tokens.
*/
@override
Iterable get childEntities => new ChildEntities()
- ..add(poundSign)
- ..addAll(components);
+ ..add(poundSign)
+ ..addAll(components);
@override
Token get endToken => components[components.length - 1];
@@ -17333,26 +17246,37 @@
*/
class ThisExpression extends Expression {
/**
- * The token representing the keyword.
+ * The token representing the 'this' keyword.
*/
- Token keyword;
+ Token thisKeyword;
/**
* Initialize a newly created this expression.
*/
- ThisExpression(this.keyword);
+ ThisExpression(this.thisKeyword);
@override
- Token get beginToken => keyword;
+ Token get beginToken => thisKeyword;
+
+ @override
+ Iterable get childEntities => new ChildEntities()..add(thisKeyword);
+
+ @override
+ Token get endToken => thisKeyword;
/**
- * TODO(paulberry): untested.
+ * Return the token representing the 'this' keyword.
*/
- @override
- Iterable get childEntities => new ChildEntities()..add(keyword);
+ @deprecated // Use "this.thisKeyword"
+ Token get keyword => thisKeyword;
- @override
- Token get endToken => keyword;
+ /**
+ * Set the token representing the 'this' keyword to the given [token].
+ */
+ @deprecated // Use "this.thisKeyword"
+ set keyword(Token token) {
+ thisKeyword = token;
+ }
@override
int get precedence => 16;
@@ -17376,7 +17300,7 @@
/**
* The token representing the 'throw' keyword.
*/
- Token keyword;
+ Token throwKeyword;
/**
* The expression computing the exception to be thrown.
@@ -17386,24 +17310,24 @@
/**
* Initialize a newly created throw expression.
*/
- ThrowExpression(this.keyword, Expression expression) {
- _expression = becomeParentOf(expression);
+ ThrowExpression(this.throwKeyword, Expression expression) {
+ _expression = _becomeParentOf(expression);
}
@override
- Token get beginToken => keyword;
+ Token get beginToken => throwKeyword;
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(_expression);
+ ..add(throwKeyword)
+ ..add(_expression);
@override
Token get endToken {
if (_expression != null) {
return _expression.endToken;
}
- return keyword;
+ return throwKeyword;
}
/**
@@ -17416,7 +17340,21 @@
* [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
+ }
+
+ /**
+ * Return the token representing the 'throw' keyword.
+ */
+ @deprecated // Use "this.throwKeyword"
+ Token get keyword => throwKeyword;
+
+ /**
+ * Set the token representing the 'throw' keyword to the given [token].
+ */
+ @deprecated // Use "this.throwKeyword"
+ set keyword(Token token) {
+ throwKeyword = token;
}
@override
@@ -17457,13 +17395,13 @@
TopLevelVariableDeclaration(Comment comment, List<Annotation> metadata,
VariableDeclarationList variableList, this.semicolon)
: super(comment, metadata) {
- _variableList = becomeParentOf(variableList);
+ _variableList = _becomeParentOf(variableList);
}
@override
Iterable get childEntities => super._childEntities
- ..add(_variableList)
- ..add(semicolon);
+ ..add(_variableList)
+ ..add(semicolon);
@override
Element get element => null;
@@ -17484,7 +17422,7 @@
* [variables].
*/
void set variables(VariableDeclarationList variables) {
- _variableList = becomeParentOf(variables);
+ _variableList = _becomeParentOf(variables);
}
@override
@@ -17719,7 +17657,7 @@
@override
Object visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
- _visitTokenWithSuffix(node.keyword, ".");
+ _visitTokenWithSuffix(node.thisKeyword, ".");
_visitNode(node.fieldName);
_writer.print(" = ");
_visitNode(node.expression);
@@ -18011,7 +17949,7 @@
_visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
_writer.print("import ");
_visitNode(node.uri);
- if (node.deferredToken != null) {
+ if (node.deferredKeyword != null) {
_writer.print(" deferred");
}
_visitNodeWithPrefix(" as ", node.prefix);
@@ -18258,8 +18196,8 @@
}
@override
- Object
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ Object visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
_writer.print("this");
_visitNodeWithPrefix(".", node.constructorName);
_visitNode(node.argumentList);
@@ -18536,8 +18474,8 @@
* Print a list of [nodes], prefixed by the given [prefix] if the list is not
* empty, and separated by the given [separator].
*/
- void _visitNodeListWithSeparatorAndPrefix(String prefix,
- NodeList<AstNode> nodes, String separator) {
+ void _visitNodeListWithSeparatorAndPrefix(
+ String prefix, NodeList<AstNode> nodes, String separator) {
if (nodes != null) {
int size = nodes.length;
if (size > 0) {
@@ -18556,8 +18494,8 @@
* Print a list of [nodes], separated by the given [separator], followed by
* the given [suffix] if the list is not empty.
*/
- void _visitNodeListWithSeparatorAndSuffix(NodeList<AstNode> nodes,
- String separator, String suffix) {
+ void _visitNodeListWithSeparatorAndSuffix(
+ NodeList<AstNode> nodes, String separator, String suffix) {
if (nodes != null) {
int size = nodes.length;
if (size > 0) {
@@ -18650,9 +18588,9 @@
*/
TryStatement(this.tryKeyword, Block body, List<CatchClause> catchClauses,
this.finallyKeyword, Block finallyBlock) {
- _body = becomeParentOf(body);
+ _body = _becomeParentOf(body);
_catchClauses = new NodeList<CatchClause>(this, catchClauses);
- _finallyBlock = becomeParentOf(finallyBlock);
+ _finallyBlock = _becomeParentOf(finallyBlock);
}
@override
@@ -18667,7 +18605,7 @@
* Set the body of the statement to the given [block].
*/
void set body(Block block) {
- _body = becomeParentOf(block);
+ _body = _becomeParentOf(block);
}
/**
@@ -18677,11 +18615,11 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(tryKeyword)
- ..add(_body)
- ..addAll(_catchClauses)
- ..add(finallyKeyword)
- ..add(_finallyBlock);
+ ..add(tryKeyword)
+ ..add(_body)
+ ..addAll(_catchClauses)
+ ..add(finallyKeyword)
+ ..add(_finallyBlock);
@override
Token get endToken {
@@ -18705,7 +18643,7 @@
* Set the finally block contained in the try statement to the given [block].
*/
void set finallyBlock(Block block) {
- _finallyBlock = becomeParentOf(block);
+ _finallyBlock = _becomeParentOf(block);
}
@override
@@ -18733,7 +18671,7 @@
/**
* The token representing the 'typedef' keyword.
*/
- Token keyword;
+ Token typedefKeyword;
/**
* The semicolon terminating the declaration.
@@ -18745,7 +18683,7 @@
* [metadata] can be `null` if the declaration does not have the corresponding
* attribute.
*/
- TypeAlias(Comment comment, List<Annotation> metadata, this.keyword,
+ TypeAlias(Comment comment, List<Annotation> metadata, this.typedefKeyword,
this.semicolon)
: super(comment, metadata);
@@ -18753,7 +18691,21 @@
Token get endToken => semicolon;
@override
- Token get firstTokenAfterCommentAndMetadata => keyword;
+ Token get firstTokenAfterCommentAndMetadata => typedefKeyword;
+
+ /**
+ * Return the token representing the 'typedef' keyword.
+ */
+ @deprecated // Use "this.typedefKeyword"
+ Token get keyword => typedefKeyword;
+
+ /**
+ * Set the token representing the 'typedef' keyword to the given [token].
+ */
+ @deprecated // Use "this.typedefKeyword"
+ set keyword(Token token) {
+ typedefKeyword = token;
+ }
}
/**
@@ -18781,8 +18733,8 @@
/**
* Initialize a newly created list of type arguments.
*/
- TypeArgumentList(this.leftBracket, List<TypeName> arguments,
- this.rightBracket) {
+ TypeArgumentList(
+ this.leftBracket, List<TypeName> arguments, this.rightBracket) {
_arguments = new NodeList<TypeName>(this, arguments);
}
@@ -18799,9 +18751,9 @@
*/
@override
Iterable get childEntities => new ChildEntities()
- ..add(leftBracket)
- ..addAll(_arguments)
- ..add(rightBracket);
+ ..add(leftBracket)
+ ..addAll(_arguments)
+ ..add(rightBracket);
@override
Token get endToken => rightBracket;
@@ -18841,7 +18793,7 @@
* type arguments were declared.
*/
TypedLiteral(this.constKeyword, TypeArgumentList typeArguments) {
- _typeArguments = becomeParentOf(typeArguments);
+ _typeArguments = _becomeParentOf(typeArguments);
}
/**
@@ -18855,12 +18807,12 @@
* [typeArguments].
*/
void set typeArguments(TypeArgumentList typeArguments) {
- _typeArguments = becomeParentOf(typeArguments);
+ _typeArguments = _becomeParentOf(typeArguments);
}
ChildEntities get _childEntities => new ChildEntities()
- ..add(constKeyword)
- ..add(_typeArguments);
+ ..add(constKeyword)
+ ..add(_typeArguments);
@override
void visitChildren(AstVisitor visitor) {
@@ -18896,8 +18848,8 @@
* there are no type arguments.
*/
TypeName(Identifier name, TypeArgumentList typeArguments) {
- _name = becomeParentOf(name);
- _typeArguments = becomeParentOf(typeArguments);
+ _name = _becomeParentOf(name);
+ _typeArguments = _becomeParentOf(typeArguments);
}
@override
@@ -18905,8 +18857,8 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(_name)
- ..add(_typeArguments);
+ ..add(_name)
+ ..add(_typeArguments);
@override
Token get endToken {
@@ -18942,7 +18894,7 @@
* Set the name of the type to the given [identifier].
*/
void set name(Identifier identifier) {
- _name = becomeParentOf(identifier);
+ _name = _becomeParentOf(identifier);
}
/**
@@ -18956,7 +18908,7 @@
* [typeArguments].
*/
void set typeArguments(TypeArgumentList typeArguments) {
- _typeArguments = becomeParentOf(typeArguments);
+ _typeArguments = _becomeParentOf(typeArguments);
}
@override
@@ -18985,7 +18937,7 @@
* The token representing the 'extends' keyword, or `null` if there is no
* explicit upper bound.
*/
- Token keyword;
+ Token extendsKeyword;
/**
* The name of the upper bound for legal arguments, or `null` if there is no
@@ -18996,14 +18948,14 @@
/**
* Initialize a newly created type parameter. Either or both of the [comment]
* and [metadata] can be `null` if the parameter does not have the
- * corresponding attribute. The [keyword] and [bound] can be `null` if the
- * parameter does not have an upper bound.
+ * corresponding attribute. The [extendsKeyword] and [bound] can be `null` if
+ * the parameter does not have an upper bound.
*/
TypeParameter(Comment comment, List<Annotation> metadata,
- SimpleIdentifier name, this.keyword, TypeName bound)
+ SimpleIdentifier name, this.extendsKeyword, TypeName bound)
: super(comment, metadata) {
- _name = becomeParentOf(name);
- _bound = becomeParentOf(bound);
+ _name = _becomeParentOf(name);
+ _bound = _becomeParentOf(bound);
}
/**
@@ -19017,14 +18969,14 @@
* [typeName].
*/
void set bound(TypeName typeName) {
- _bound = becomeParentOf(typeName);
+ _bound = _becomeParentOf(typeName);
}
@override
Iterable get childEntities => super._childEntities
- ..add(_name)
- ..add(keyword)
- ..add(_bound);
+ ..add(_name)
+ ..add(extendsKeyword)
+ ..add(_bound);
@override
TypeParameterElement get element =>
@@ -19042,6 +18994,21 @@
Token get firstTokenAfterCommentAndMetadata => _name.beginToken;
/**
+ * Return the token representing the 'extends' keyword, or `null` if there is
+ * no explicit upper bound.
+ */
+ @deprecated // Use "this.extendsKeyword"
+ Token get keyword => extendsKeyword;
+
+ /**
+ * Set the token representing the 'extends' keyword to the given [token].
+ */
+ @deprecated // Use "this.extendsKeyword"
+ set keyword(Token token) {
+ extendsKeyword = token;
+ }
+
+ /**
* Return the name of the type parameter.
*/
SimpleIdentifier get name => _name;
@@ -19050,7 +19017,7 @@
* Set the name of the type parameter to the given [identifier].
*/
void set name(SimpleIdentifier identifier) {
- _name = becomeParentOf(identifier);
+ _name = _becomeParentOf(identifier);
}
@override
@@ -19089,8 +19056,8 @@
/**
* Initialize a newly created list of type parameters.
*/
- TypeParameterList(this.leftBracket, List<TypeParameter> typeParameters,
- this.rightBracket) {
+ TypeParameterList(
+ this.leftBracket, List<TypeParameter> typeParameters, this.rightBracket) {
_typeParameters = new NodeList<TypeParameter>(this, typeParameters);
}
@@ -19099,9 +19066,9 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(leftBracket)
- ..addAll(_typeParameters)
- ..add(rightBracket);
+ ..add(leftBracket)
+ ..addAll(_typeParameters)
+ ..add(rightBracket);
@override
Token get endToken => rightBracket;
@@ -19376,9 +19343,8 @@
R visitPropertyAccess(PropertyAccess node) => visitNode(node);
@override
- R
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) =>
- visitNode(node);
+ R visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) => visitNode(node);
@override
R visitRethrowExpression(RethrowExpression node) => visitNode(node);
@@ -19504,10 +19470,10 @@
* [comment] and [metadata] can be `null` if the directive does not have the
* corresponding attribute.
*/
- UriBasedDirective(Comment comment, List<Annotation> metadata,
- StringLiteral uri)
+ UriBasedDirective(
+ Comment comment, List<Annotation> metadata, StringLiteral uri)
: super(comment, metadata) {
- _uri = becomeParentOf(uri);
+ _uri = _becomeParentOf(uri);
}
/**
@@ -19519,7 +19485,7 @@
* Set the URI referenced by this directive to the given [uri].
*/
void set uri(StringLiteral uri) {
- _uri = becomeParentOf(uri);
+ _uri = _becomeParentOf(uri);
}
/**
@@ -19622,15 +19588,15 @@
VariableDeclaration(Comment comment, List<Annotation> metadata,
SimpleIdentifier name, this.equals, Expression initializer)
: super(comment, metadata) {
- _name = becomeParentOf(name);
- _initializer = becomeParentOf(initializer);
+ _name = _becomeParentOf(name);
+ _initializer = _becomeParentOf(initializer);
}
@override
Iterable get childEntities => super._childEntities
- ..add(_name)
- ..add(equals)
- ..add(_initializer);
+ ..add(_name)
+ ..add(equals)
+ ..add(_initializer);
/**
* This overridden implementation of getDocumentationComment() looks in the
@@ -19677,7 +19643,7 @@
* the given [expression].
*/
void set initializer(Expression expression) {
- _initializer = becomeParentOf(expression);
+ _initializer = _becomeParentOf(expression);
}
/**
@@ -19707,7 +19673,7 @@
* Set the name of the variable being declared to the given [identifier].
*/
void set name(SimpleIdentifier identifier) {
- _name = becomeParentOf(identifier);
+ _name = _becomeParentOf(identifier);
}
@override
@@ -19759,7 +19725,7 @@
VariableDeclarationList(Comment comment, List<Annotation> metadata,
this.keyword, TypeName type, List<VariableDeclaration> variables)
: super(comment, metadata) {
- _type = becomeParentOf(type);
+ _type = _becomeParentOf(type);
_variables = new NodeList<VariableDeclaration>(this, variables);
}
@@ -19768,9 +19734,9 @@
*/
@override
Iterable get childEntities => super._childEntities
- ..add(keyword)
- ..add(_type)
- ..addAll(_variables);
+ ..add(keyword)
+ ..add(_type)
+ ..addAll(_variables);
@override
Token get endToken => _variables.endToken;
@@ -19789,8 +19755,8 @@
* Return `true` if the variables in this list were declared with the 'const'
* modifier.
*/
- bool get isConst =>
- keyword is KeywordToken && (keyword as KeywordToken).keyword == Keyword.CONST;
+ bool get isConst => keyword is KeywordToken &&
+ (keyword as KeywordToken).keyword == Keyword.CONST;
/**
* Return `true` if the variables in this list were declared with the 'final'
@@ -19798,8 +19764,8 @@
* `false` even though they are implicitly final. (In other words, this is a
* syntactic check rather than a semantic check.)
*/
- bool get isFinal =>
- keyword is KeywordToken && (keyword as KeywordToken).keyword == Keyword.FINAL;
+ bool get isFinal => keyword is KeywordToken &&
+ (keyword as KeywordToken).keyword == Keyword.FINAL;
/**
* Return the type of the variables being declared, or `null` if no type was
@@ -19811,7 +19777,7 @@
* Set the type of the variables being declared to the given [typeName].
*/
void set type(TypeName typeName) {
- _type = becomeParentOf(typeName);
+ _type = _becomeParentOf(typeName);
}
/**
@@ -19851,9 +19817,9 @@
/**
* Initialize a newly created variable declaration statement.
*/
- VariableDeclarationStatement(VariableDeclarationList variableList,
- this.semicolon) {
- _variableList = becomeParentOf(variableList);
+ VariableDeclarationStatement(
+ VariableDeclarationList variableList, this.semicolon) {
+ _variableList = _becomeParentOf(variableList);
}
@override
@@ -19861,8 +19827,8 @@
@override
Iterable get childEntities => new ChildEntities()
- ..add(_variableList)
- ..add(semicolon);
+ ..add(_variableList)
+ ..add(semicolon);
@override
Token get endToken => semicolon;
@@ -19876,7 +19842,7 @@
* Set the variables being declared to the given list of [variables].
*/
void set variables(VariableDeclarationList variables) {
- _variableList = becomeParentOf(variables);
+ _variableList = _becomeParentOf(variables);
}
@override
@@ -19898,7 +19864,7 @@
/**
* The token representing the 'while' keyword.
*/
- Token keyword;
+ Token whileKeyword;
/**
* The left parenthesis.
@@ -19923,14 +19889,14 @@
/**
* Initialize a newly created while statement.
*/
- WhileStatement(this.keyword, this.leftParenthesis, Expression condition,
+ WhileStatement(this.whileKeyword, this.leftParenthesis, Expression condition,
this.rightParenthesis, Statement body) {
- _condition = becomeParentOf(condition);
- _body = becomeParentOf(body);
+ _condition = _becomeParentOf(condition);
+ _body = _becomeParentOf(body);
}
@override
- Token get beginToken => keyword;
+ Token get beginToken => whileKeyword;
/**
* Return the body of the loop.
@@ -19941,16 +19907,16 @@
* Set the body of the loop to the given [statement].
*/
void set body(Statement statement) {
- _body = becomeParentOf(statement);
+ _body = _becomeParentOf(statement);
}
@override
Iterable get childEntities => new ChildEntities()
- ..add(keyword)
- ..add(leftParenthesis)
- ..add(_condition)
- ..add(rightParenthesis)
- ..add(_body);
+ ..add(whileKeyword)
+ ..add(leftParenthesis)
+ ..add(_condition)
+ ..add(rightParenthesis)
+ ..add(_body);
/**
* Return the expression used to determine whether to execute the body of the
@@ -19963,12 +19929,26 @@
* loop to the given [expression].
*/
void set condition(Expression expression) {
- _condition = becomeParentOf(expression);
+ _condition = _becomeParentOf(expression);
}
@override
Token get endToken => _body.endToken;
+ /**
+ * Return the token representing the 'while' keyword.
+ */
+ @deprecated // Use "this.whileKeyword"
+ Token get keyword => whileKeyword;
+
+ /**
+ * Set the token representing the 'while' keyword to the given [token].
+ */
+ @deprecated // Use "this.whileKeyword"
+ set keyword(Token token) {
+ whileKeyword = token;
+ }
+
@override
accept(AstVisitor visitor) => visitor.visitWhileStatement(this);
@@ -20011,18 +19991,16 @@
*/
@override
Iterable get childEntities => new ChildEntities()
- ..add(withKeyword)
- ..addAll(_mixinTypes);
+ ..add(withKeyword)
+ ..addAll(_mixinTypes);
@override
Token get endToken => _mixinTypes.endToken;
/**
* Set the token representing the 'with' keyword to the given [token].
- *
- * Deprecated: Use withKeyword instead.
*/
- @deprecated
+ @deprecated // Use "this.withKeyword"
void set mixinKeyword(Token token) {
this.withKeyword = token;
}
@@ -20072,9 +20050,9 @@
* Initialize a newly created yield expression. The [star] can be `null` if no
* star was provided.
*/
- YieldStatement(this.yieldKeyword, this.star, Expression expression,
- this.semicolon) {
- _expression = becomeParentOf(expression);
+ YieldStatement(
+ this.yieldKeyword, this.star, Expression expression, this.semicolon) {
+ _expression = _becomeParentOf(expression);
}
@override
@@ -20085,15 +20063,12 @@
return _expression.beginToken;
}
- /**
- * TODO(paulberry): untested.
- */
@override
Iterable get childEntities => new ChildEntities()
- ..add(yieldKeyword)
- ..add(star)
- ..add(_expression)
- ..add(semicolon);
+ ..add(yieldKeyword)
+ ..add(star)
+ ..add(_expression)
+ ..add(semicolon);
@override
Token get endToken {
@@ -20112,7 +20087,7 @@
* Set the expression whose value will be yielded to the given [expression].
*/
void set expression(Expression expression) {
- _expression = becomeParentOf(expression);
+ _expression = _becomeParentOf(expression);
}
@override
diff --git a/pkg/analyzer/lib/src/generated/constant.dart b/pkg/analyzer/lib/src/generated/constant.dart
index dfa60c1..635431a 100644
--- a/pkg/analyzer/lib/src/generated/constant.dart
+++ b/pkg/analyzer/lib/src/generated/constant.dart
@@ -219,8 +219,8 @@
EvaluationResult evaluate(Expression expression) {
RecordingErrorListener errorListener = new RecordingErrorListener();
ErrorReporter errorReporter = new ErrorReporter(errorListener, _source);
- DartObjectImpl result =
- expression.accept(new ConstantVisitor.con1(_typeProvider, errorReporter));
+ DartObjectImpl result = expression
+ .accept(new ConstantVisitor.con1(_typeProvider, errorReporter));
if (result != null) {
return EvaluationResult.forValue(result);
}
@@ -404,23 +404,20 @@
* This method is called just before computing the constant value associated with an AST node.
* Unit tests will override this method to introduce additional error checking.
*/
- void beforeComputeValue(AstNode constNode) {
- }
+ void beforeComputeValue(AstNode constNode) {}
/**
* This method is called just before getting the constant initializers associated with a
* constructor AST node. Unit tests will override this method to introduce additional error
* checking.
*/
- void beforeGetConstantInitializers(ConstructorElement constructor) {
- }
+ void beforeGetConstantInitializers(ConstructorElement constructor) {}
/**
* This method is called just before getting a parameter's default value. Unit tests will override
* this method to introduce additional error checking.
*/
- void beforeGetParameterDefault(ParameterElement parameter) {
- }
+ void beforeGetParameterDefault(ParameterElement parameter) {}
/**
* Compute values for all of the constants in the compilation units that were added.
@@ -431,21 +428,15 @@
_constructorInvocations = _constantFinder.constructorInvocations;
_annotations = _constantFinder.annotations;
_variableDeclarationMap.values.forEach((VariableDeclaration declaration) {
- ReferenceFinder referenceFinder = new ReferenceFinder(
- declaration,
- referenceGraph,
- _variableDeclarationMap,
- constructorDeclarationMap);
+ ReferenceFinder referenceFinder = new ReferenceFinder(declaration,
+ referenceGraph, _variableDeclarationMap, constructorDeclarationMap);
referenceGraph.addNode(declaration);
declaration.initializer.accept(referenceFinder);
});
constructorDeclarationMap.forEach(
(ConstructorElement element, ConstructorDeclaration declaration) {
- ReferenceFinder referenceFinder = new ReferenceFinder(
- declaration,
- referenceGraph,
- _variableDeclarationMap,
- constructorDeclarationMap);
+ ReferenceFinder referenceFinder = new ReferenceFinder(declaration,
+ referenceGraph, _variableDeclarationMap, constructorDeclarationMap);
referenceGraph.addNode(declaration);
bool superInvocationFound = false;
NodeList<ConstructorInitializer> initializers = declaration.initializers;
@@ -477,9 +468,7 @@
Expression defaultValue = parameter.defaultValue;
if (defaultValue != null) {
ReferenceFinder parameterReferenceFinder = new ReferenceFinder(
- parameter,
- referenceGraph,
- _variableDeclarationMap,
+ parameter, referenceGraph, _variableDeclarationMap,
constructorDeclarationMap);
defaultValue.accept(parameterReferenceFinder);
}
@@ -497,11 +486,8 @@
findConstructorDeclaration(constructor);
// An instance creation expression depends both on the constructor and
// the arguments passed to it.
- ReferenceFinder referenceFinder = new ReferenceFinder(
- expression,
- referenceGraph,
- _variableDeclarationMap,
- constructorDeclarationMap);
+ ReferenceFinder referenceFinder = new ReferenceFinder(expression,
+ referenceGraph, _variableDeclarationMap, constructorDeclarationMap);
if (declaration != null) {
referenceGraph.addEdge(expression, declaration);
}
@@ -533,8 +519,8 @@
ConstantVisitor createConstantVisitor(ErrorReporter errorReporter) =>
new ConstantVisitor.con1(typeProvider, errorReporter);
- ConstructorDeclaration
- findConstructorDeclaration(ConstructorElement constructor) =>
+ ConstructorDeclaration findConstructorDeclaration(
+ ConstructorElement constructor) =>
constructorDeclarationMap[_getConstructorBase(constructor)];
/**
@@ -548,8 +534,9 @@
* @return true if the arguments are correct, false if there is an error.
*/
bool _checkFromEnvironmentArguments(NodeList<Expression> arguments,
- List<DartObjectImpl> argumentValues, HashMap<String,
- DartObjectImpl> namedArgumentValues, InterfaceType expectedDefaultValueType) {
+ List<DartObjectImpl> argumentValues,
+ HashMap<String, DartObjectImpl> namedArgumentValues,
+ InterfaceType expectedDefaultValueType) {
int argumentCount = arguments.length;
if (argumentCount < 1 || argumentCount > 2) {
return false;
@@ -587,8 +574,8 @@
* @return true if the arguments are correct, false if there is an error.
*/
bool _checkSymbolArguments(NodeList<Expression> arguments,
- List<DartObjectImpl> argumentValues, HashMap<String,
- DartObjectImpl> namedArgumentValues) {
+ List<DartObjectImpl> argumentValues,
+ HashMap<String, DartObjectImpl> namedArgumentValues) {
if (arguments.length != 1) {
return false;
}
@@ -621,8 +608,7 @@
if (!_runtimeTypeMatch(dartObject, element.type)) {
errorReporter.reportErrorForNode(
CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH,
- declaration,
- [dartObject.type, element.type]);
+ declaration, [dartObject.type, element.type]);
}
}
(element as VariableElementImpl).evaluationResult =
@@ -640,14 +626,11 @@
RecordingErrorListener errorListener = new RecordingErrorListener();
CompilationUnit sourceCompilationUnit =
expression.getAncestor((node) => node is CompilationUnit);
- ErrorReporter errorReporter =
- new ErrorReporter(errorListener, sourceCompilationUnit.element.source);
+ ErrorReporter errorReporter = new ErrorReporter(
+ errorListener, sourceCompilationUnit.element.source);
ConstantVisitor constantVisitor = createConstantVisitor(errorReporter);
- DartObjectImpl result = _evaluateConstructorCall(
- constNode,
- expression.argumentList.arguments,
- constructor,
- constantVisitor,
+ DartObjectImpl result = _evaluateConstructorCall(constNode,
+ expression.argumentList.arguments, constructor, constantVisitor,
errorReporter);
expression.evaluationResult =
new EvaluationResultImpl.con2(result, errorListener.errors);
@@ -657,7 +640,8 @@
ConstructorElementImpl constructor =
declaration.element as ConstructorElementImpl;
constructor.constantInitializers =
- new ConstantValueComputer_InitializerCloner().cloneNodeList(initializers);
+ new ConstantValueComputer_InitializerCloner()
+ .cloneNodeList(initializers);
} else if (constNode is FormalParameter) {
if (constNode is DefaultFormalParameter) {
DefaultFormalParameter parameter = constNode;
@@ -691,15 +675,12 @@
RecordingErrorListener errorListener = new RecordingErrorListener();
CompilationUnit sourceCompilationUnit =
constNode.getAncestor((node) => node is CompilationUnit);
- ErrorReporter errorReporter =
- new ErrorReporter(errorListener, sourceCompilationUnit.element.source);
+ ErrorReporter errorReporter = new ErrorReporter(
+ errorListener, sourceCompilationUnit.element.source);
ConstantVisitor constantVisitor =
createConstantVisitor(errorReporter);
- DartObjectImpl result = _evaluateConstructorCall(
- constNode,
- constNode.arguments.arguments,
- element,
- constantVisitor,
+ DartObjectImpl result = _evaluateConstructorCall(constNode,
+ constNode.arguments.arguments, element, constantVisitor,
errorReporter);
elementAnnotation.evaluationResult =
new EvaluationResultImpl.con2(result, errorListener.errors);
@@ -729,8 +710,8 @@
* @return A [DartObjectImpl] object corresponding to the evaluated result
*/
DartObjectImpl _computeValueFromEnvironment(DartObject environmentValue,
- DartObjectImpl builtInDefaultValue, HashMap<String,
- DartObjectImpl> namedArgumentValues) {
+ DartObjectImpl builtInDefaultValue,
+ HashMap<String, DartObjectImpl> namedArgumentValues) {
DartObjectImpl value = environmentValue as DartObjectImpl;
if (value.isUnknown || value.isNull) {
// The name either doesn't exist in the environment or we couldn't parse
@@ -787,13 +768,9 @@
// that we can emulate.
if (constructor.name == "fromEnvironment") {
if (!_checkFromEnvironmentArguments(
- arguments,
- argumentValues,
- namedArgumentValues,
- definingClass)) {
+ arguments, argumentValues, namedArgumentValues, definingClass)) {
errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
- node);
+ CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, node);
return null;
}
String variableName =
@@ -802,24 +779,21 @@
DartObject valueFromEnvironment;
valueFromEnvironment =
_declaredVariables.getBool(typeProvider, variableName);
- return _computeValueFromEnvironment(
- valueFromEnvironment,
+ return _computeValueFromEnvironment(valueFromEnvironment,
new DartObjectImpl(typeProvider.boolType, BoolState.FALSE_STATE),
namedArgumentValues);
} else if (identical(definingClass, typeProvider.intType)) {
DartObject valueFromEnvironment;
valueFromEnvironment =
_declaredVariables.getInt(typeProvider, variableName);
- return _computeValueFromEnvironment(
- valueFromEnvironment,
+ return _computeValueFromEnvironment(valueFromEnvironment,
new DartObjectImpl(typeProvider.nullType, NullState.NULL_STATE),
namedArgumentValues);
} else if (identical(definingClass, typeProvider.stringType)) {
DartObject valueFromEnvironment;
valueFromEnvironment =
_declaredVariables.getString(typeProvider, variableName);
- return _computeValueFromEnvironment(
- valueFromEnvironment,
+ return _computeValueFromEnvironment(valueFromEnvironment,
new DartObjectImpl(typeProvider.nullType, NullState.NULL_STATE),
namedArgumentValues);
}
@@ -827,18 +801,14 @@
identical(definingClass, typeProvider.symbolType) &&
argumentCount == 1) {
if (!_checkSymbolArguments(
- arguments,
- argumentValues,
- namedArgumentValues)) {
+ arguments, argumentValues, namedArgumentValues)) {
errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
- node);
+ CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, node);
return null;
}
String argumentValue = argumentValues[0].stringValue;
return new DartObjectImpl(
- definingClass,
- new SymbolState(argumentValue));
+ definingClass, new SymbolState(argumentValue));
}
// Either it's an external const factory constructor that we can't
// emulate, or an error occurred (a cycle, or a const constructor trying
@@ -905,8 +875,7 @@
if (!_runtimeTypeMatch(argumentValue, parameter.type)) {
errorReporter.reportErrorForNode(
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
- errorTarget,
- [argumentValue.type, parameter.type]);
+ errorTarget, [argumentValue.type, parameter.type]);
}
if (baseParameter.isInitializingFormal) {
FieldElement field = (parameter as FieldFormalParameterElement).field;
@@ -919,8 +888,7 @@
if (!_runtimeTypeMatch(argumentValue, fieldType)) {
errorReporter.reportErrorForNode(
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
- errorTarget,
- [argumentValue.type, fieldType]);
+ errorTarget, [argumentValue.type, fieldType]);
}
}
String fieldName = field.name;
@@ -952,8 +920,7 @@
if (!_runtimeTypeMatch(evaluationResult, field.type)) {
errorReporter.reportErrorForNode(
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
- node,
- [evaluationResult.type, fieldName, field.type]);
+ node, [evaluationResult.type, fieldName, field.type]);
}
}
}
@@ -969,12 +936,9 @@
// it redirects to.
ConstructorElement constructor = initializer.staticElement;
if (constructor != null && constructor.isConst) {
- return _evaluateConstructorCall(
- node,
- initializer.argumentList.arguments,
- constructor,
- initializerVisitor,
- errorReporter);
+ return _evaluateConstructorCall(node,
+ initializer.argumentList.arguments, constructor,
+ initializerVisitor, errorReporter);
}
}
}
@@ -987,29 +951,20 @@
if (superArguments == null) {
superArguments = new NodeList<Expression>(null);
}
- _evaluateSuperConstructorCall(
- node,
- fieldMap,
- superConstructor,
- superArguments,
- initializerVisitor,
- errorReporter);
+ _evaluateSuperConstructorCall(node, fieldMap, superConstructor,
+ superArguments, initializerVisitor, errorReporter);
}
}
return new DartObjectImpl(definingClass, new GenericState(fieldMap));
}
- void _evaluateSuperConstructorCall(AstNode node, HashMap<String,
- DartObjectImpl> fieldMap, ConstructorElement superConstructor,
- NodeList<Expression> superArguments, ConstantVisitor initializerVisitor,
- ErrorReporter errorReporter) {
+ void _evaluateSuperConstructorCall(AstNode node,
+ HashMap<String, DartObjectImpl> fieldMap,
+ ConstructorElement superConstructor, NodeList<Expression> superArguments,
+ ConstantVisitor initializerVisitor, ErrorReporter errorReporter) {
if (superConstructor != null && superConstructor.isConst) {
- DartObjectImpl evaluationResult = _evaluateConstructorCall(
- node,
- superArguments,
- superConstructor,
- initializerVisitor,
- errorReporter);
+ DartObjectImpl evaluationResult = _evaluateConstructorCall(node,
+ superArguments, superConstructor, initializerVisitor, errorReporter);
if (evaluationResult != null) {
fieldMap[GenericState.SUPERCLASS_FIELD] = evaluationResult;
}
@@ -1025,14 +980,13 @@
* is encountered), the chain will be followed as far as possible and then a const factory
* constructor will be returned.
*/
- ConstructorElement
- _followConstantRedirectionChain(ConstructorElement constructor) {
+ ConstructorElement _followConstantRedirectionChain(
+ ConstructorElement constructor) {
HashSet<ConstructorElement> constructorsVisited =
new HashSet<ConstructorElement>();
while (constructor.isFactory) {
if (identical(
- constructor.enclosingElement.type,
- typeProvider.symbolType)) {
+ constructor.enclosingElement.type, typeProvider.symbolType)) {
// The dart:core.Symbol has a const factory constructor that redirects
// to dart:_internal.Symbol. That in turn redirects to an external
// const constructor, which we won't be able to evaluate.
@@ -1101,10 +1055,9 @@
* Determine whether the given string is a valid name for a public symbol (i.e. whether it is
* allowed for a call to the Symbol constructor).
*/
- static bool isValidPublicSymbol(String name) =>
- name.isEmpty ||
- name == "void" ||
- new JavaPatternMatcher(_PUBLIC_SYMBOL_PATTERN, name).matches();
+ static bool isValidPublicSymbol(String name) => name.isEmpty ||
+ name == "void" ||
+ new JavaPatternMatcher(_PUBLIC_SYMBOL_PATTERN, name).matches();
}
/**
@@ -1119,8 +1072,8 @@
ConstantValueComputer_InitializerCloner() : super(true);
@override
- InstanceCreationExpression
- visitInstanceCreationExpression(InstanceCreationExpression node) {
+ InstanceCreationExpression visitInstanceCreationExpression(
+ InstanceCreationExpression node) {
InstanceCreationExpression expression =
super.visitInstanceCreationExpression(node);
expression.evaluationResult = node.evaluationResult;
@@ -1128,8 +1081,8 @@
}
@override
- RedirectingConstructorInvocation
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ RedirectingConstructorInvocation visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
RedirectingConstructorInvocation invocation =
super.visitRedirectingConstructorInvocation(node);
invocation.staticElement = node.staticElement;
@@ -1144,8 +1097,8 @@
}
@override
- SuperConstructorInvocation
- visitSuperConstructorInvocation(SuperConstructorInvocation node) {
+ SuperConstructorInvocation visitSuperConstructorInvocation(
+ SuperConstructorInvocation node) {
SuperConstructorInvocation invocation =
super.visitSuperConstructorInvocation(node);
invocation.staticElement = node.staticElement;
@@ -1239,8 +1192,8 @@
* @param lexicalEnvironment values which should override simpleIdentifiers, or null if no
* overriding is necessary.
*/
- ConstantVisitor.con2(this._typeProvider, HashMap<String,
- DartObjectImpl> lexicalEnvironment, this._errorReporter) {
+ ConstantVisitor.con2(this._typeProvider,
+ HashMap<String, DartObjectImpl> lexicalEnvironment, this._errorReporter) {
this._lexicalEnvironment = lexicalEnvironment;
this._dartObjectComputer =
new DartObjectComputer(_errorReporter, _typeProvider);
@@ -1263,8 +1216,7 @@
* This method is called just before retrieving an evaluation result from an AST node. Unit tests
* will override it to introduce additional error checking.
*/
- void beforeGetEvaluationResult(AstNode node) {
- }
+ void beforeGetEvaluationResult(AstNode node) {}
/**
* Return `true` if the given [element] represents the `length` getter in
@@ -1326,18 +1278,14 @@
return _dartObjectComputer.greaterThan(node, leftResult, rightResult);
} else if (operatorType == TokenType.GT_EQ) {
return _dartObjectComputer.greaterThanOrEqual(
- node,
- leftResult,
- rightResult);
+ node, leftResult, rightResult);
} else if (operatorType == TokenType.GT_GT) {
return _dartObjectComputer.shiftRight(node, leftResult, rightResult);
} else if (operatorType == TokenType.LT) {
return _dartObjectComputer.lessThan(node, leftResult, rightResult);
} else if (operatorType == TokenType.LT_EQ) {
return _dartObjectComputer.lessThanOrEqual(
- node,
- leftResult,
- rightResult);
+ node, leftResult, rightResult);
} else if (operatorType == TokenType.LT_LT) {
return _dartObjectComputer.shiftLeft(node, leftResult, rightResult);
} else if (operatorType == TokenType.MINUS) {
@@ -1375,8 +1323,7 @@
return conditionResult;
} else if (!conditionResult.isBool) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
- condition);
+ CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL, condition);
return null;
} else if (thenResult == null) {
return thenResult;
@@ -1404,8 +1351,8 @@
new DartObjectImpl(_typeProvider.doubleType, new DoubleState(node.value));
@override
- DartObjectImpl
- visitInstanceCreationExpression(InstanceCreationExpression node) {
+ DartObjectImpl visitInstanceCreationExpression(
+ InstanceCreationExpression node) {
if (!node.isConst) {
// TODO(brianwilkerson) Figure out which error to report.
_error(node, null);
@@ -1443,8 +1390,7 @@
DartObjectImpl visitListLiteral(ListLiteral node) {
if (node.constKeyword == null) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.MISSING_CONST_IN_LIST_LITERAL,
- node);
+ CompileTimeErrorCode.MISSING_CONST_IN_LIST_LITERAL, node);
return null;
}
bool errorOccurred = false;
@@ -1476,8 +1422,7 @@
DartObjectImpl visitMapLiteral(MapLiteral node) {
if (node.constKeyword == null) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.MISSING_CONST_IN_MAP_LITERAL,
- node);
+ CompileTimeErrorCode.MISSING_CONST_IN_MAP_LITERAL, node);
return null;
}
bool errorOccurred = false;
@@ -1528,9 +1473,7 @@
DartObjectImpl leftArgument = arguments[0].accept(this);
DartObjectImpl rightArgument = arguments[1].accept(this);
return _dartObjectComputer.isIdentical(
- node,
- leftArgument,
- rightArgument);
+ node, leftArgument, rightArgument);
}
}
}
@@ -1656,8 +1599,7 @@
buffer.write(components[i].lexeme);
}
return new DartObjectImpl(
- _typeProvider.symbolType,
- new SymbolState(buffer.toString()));
+ _typeProvider.symbolType, new SymbolState(buffer.toString()));
}
/**
@@ -1668,8 +1610,7 @@
*/
void _error(AstNode node, ErrorCode code) {
_errorReporter.reportErrorForNode(
- code == null ? CompileTimeErrorCode.INVALID_CONSTANT : code,
- node);
+ code == null ? CompileTimeErrorCode.INVALID_CONSTANT : code, node);
}
/**
@@ -1858,8 +1799,8 @@
* @param node the node against which errors should be reported
* @return the result of applying boolean conversion to the given value
*/
- DartObjectImpl applyBooleanConversion(AstNode node,
- DartObjectImpl evaluationResult) {
+ DartObjectImpl applyBooleanConversion(
+ AstNode node, DartObjectImpl evaluationResult) {
if (evaluationResult != null) {
try {
return evaluationResult.convertToBool(_typeProvider);
@@ -2095,8 +2036,8 @@
return null;
}
- DartObjectImpl performToString(AstNode node,
- DartObjectImpl evaluationResult) {
+ DartObjectImpl performToString(
+ AstNode node, DartObjectImpl evaluationResult) {
if (evaluationResult != null) {
try {
return evaluationResult.performToString(_typeProvider);
@@ -2149,8 +2090,8 @@
* @param node the node against which errors should be reported
* @return the result of invoking the 'length' getter on this result
*/
- EvaluationResultImpl stringLength(Expression node,
- EvaluationResultImpl evaluationResult) {
+ EvaluationResultImpl stringLength(
+ Expression node, EvaluationResultImpl evaluationResult) {
if (evaluationResult.value != null) {
try {
return new EvaluationResultImpl.con1(
@@ -2323,9 +2264,10 @@
* @return the result of invoking the '&' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl bitAnd(TypeProvider typeProvider,
- DartObjectImpl rightOperand) =>
- new DartObjectImpl(typeProvider.intType, _state.bitAnd(rightOperand._state));
+ DartObjectImpl bitAnd(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) =>
+ new DartObjectImpl(
+ typeProvider.intType, _state.bitAnd(rightOperand._state));
/**
* Return the result of invoking the '~' operator on this object.
@@ -2345,9 +2287,10 @@
* @return the result of invoking the '|' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl bitOr(TypeProvider typeProvider,
- DartObjectImpl rightOperand) =>
- new DartObjectImpl(typeProvider.intType, _state.bitOr(rightOperand._state));
+ DartObjectImpl bitOr(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) =>
+ new DartObjectImpl(
+ typeProvider.intType, _state.bitOr(rightOperand._state));
/**
* Return the result of invoking the '^' operator on this object with the given argument.
@@ -2357,9 +2300,10 @@
* @return the result of invoking the '^' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl bitXor(TypeProvider typeProvider,
- DartObjectImpl rightOperand) =>
- new DartObjectImpl(typeProvider.intType, _state.bitXor(rightOperand._state));
+ DartObjectImpl bitXor(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) =>
+ new DartObjectImpl(
+ typeProvider.intType, _state.bitXor(rightOperand._state));
/**
* Return the result of invoking the ' ' operator on this object with the given argument.
@@ -2369,11 +2313,10 @@
* @return the result of invoking the ' ' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl concatenate(TypeProvider typeProvider,
- DartObjectImpl rightOperand) =>
+ DartObjectImpl concatenate(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) =>
new DartObjectImpl(
- typeProvider.stringType,
- _state.concatenate(rightOperand._state));
+ typeProvider.stringType, _state.concatenate(rightOperand._state));
/**
* Return the result of applying boolean conversion to this object.
@@ -2398,8 +2341,8 @@
* @return the result of invoking the '/' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl divide(TypeProvider typeProvider,
- DartObjectImpl rightOperand) {
+ DartObjectImpl divide(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) {
InstanceState result = _state.divide(rightOperand._state);
if (result is IntState) {
return new DartObjectImpl(typeProvider.intType, result);
@@ -2420,8 +2363,8 @@
* @return the result of invoking the '==' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl equalEqual(TypeProvider typeProvider,
- DartObjectImpl rightOperand) {
+ DartObjectImpl equalEqual(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) {
if (type != rightOperand.type) {
String typeName = type.name;
if (!(typeName == "bool" ||
@@ -2436,8 +2379,7 @@
}
}
return new DartObjectImpl(
- typeProvider.boolType,
- _state.equalEqual(rightOperand._state));
+ typeProvider.boolType, _state.equalEqual(rightOperand._state));
}
/**
@@ -2448,11 +2390,10 @@
* @return the result of invoking the '>' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl greaterThan(TypeProvider typeProvider,
- DartObjectImpl rightOperand) =>
+ DartObjectImpl greaterThan(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) =>
new DartObjectImpl(
- typeProvider.boolType,
- _state.greaterThan(rightOperand._state));
+ typeProvider.boolType, _state.greaterThan(rightOperand._state));
/**
* Return the result of invoking the '>=' operator on this object with the given argument.
@@ -2463,10 +2404,8 @@
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
DartObjectImpl greaterThanOrEqual(TypeProvider typeProvider,
- DartObjectImpl rightOperand) =>
- new DartObjectImpl(
- typeProvider.boolType,
- _state.greaterThanOrEqual(rightOperand._state));
+ DartObjectImpl rightOperand) => new DartObjectImpl(
+ typeProvider.boolType, _state.greaterThanOrEqual(rightOperand._state));
/**
* Return the result of invoking the '~/' operator on this object with the given argument.
@@ -2476,11 +2415,10 @@
* @return the result of invoking the '~/' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl integerDivide(TypeProvider typeProvider,
- DartObjectImpl rightOperand) =>
+ DartObjectImpl integerDivide(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) =>
new DartObjectImpl(
- typeProvider.intType,
- _state.integerDivide(rightOperand._state));
+ typeProvider.intType, _state.integerDivide(rightOperand._state));
/**
* Return the result of invoking the identical function on this object with
@@ -2491,11 +2429,10 @@
* @return the result of invoking the identical function on this object with
* the given argument
*/
- DartObjectImpl isIdentical(TypeProvider typeProvider,
- DartObjectImpl rightOperand) {
+ DartObjectImpl isIdentical(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) {
return new DartObjectImpl(
- typeProvider.boolType,
- _state.isIdentical(rightOperand._state));
+ typeProvider.boolType, _state.isIdentical(rightOperand._state));
}
/**
@@ -2506,9 +2443,10 @@
* @return the result of invoking the '<' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl lessThan(TypeProvider typeProvider,
- DartObjectImpl rightOperand) =>
- new DartObjectImpl(typeProvider.boolType, _state.lessThan(rightOperand._state));
+ DartObjectImpl lessThan(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) =>
+ new DartObjectImpl(
+ typeProvider.boolType, _state.lessThan(rightOperand._state));
/**
* Return the result of invoking the '<=' operator on this object with the given argument.
@@ -2518,11 +2456,10 @@
* @return the result of invoking the '<=' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl lessThanOrEqual(TypeProvider typeProvider,
- DartObjectImpl rightOperand) =>
+ DartObjectImpl lessThanOrEqual(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) =>
new DartObjectImpl(
- typeProvider.boolType,
- _state.lessThanOrEqual(rightOperand._state));
+ typeProvider.boolType, _state.lessThanOrEqual(rightOperand._state));
/**
* Return the result of invoking the '&&' operator on this object with the given argument.
@@ -2532,11 +2469,10 @@
* @return the result of invoking the '&&' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl logicalAnd(TypeProvider typeProvider,
- DartObjectImpl rightOperand) =>
+ DartObjectImpl logicalAnd(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) =>
new DartObjectImpl(
- typeProvider.boolType,
- _state.logicalAnd(rightOperand._state));
+ typeProvider.boolType, _state.logicalAnd(rightOperand._state));
/**
* Return the result of invoking the '!' operator on this object.
@@ -2556,11 +2492,10 @@
* @return the result of invoking the '||' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl logicalOr(TypeProvider typeProvider,
- DartObjectImpl rightOperand) =>
+ DartObjectImpl logicalOr(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) =>
new DartObjectImpl(
- typeProvider.boolType,
- _state.logicalOr(rightOperand._state));
+ typeProvider.boolType, _state.logicalOr(rightOperand._state));
/**
* Return the result of invoking the '-' operator on this object with the given argument.
@@ -2611,8 +2546,8 @@
* @return the result of invoking the '!=' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl notEqual(TypeProvider typeProvider,
- DartObjectImpl rightOperand) {
+ DartObjectImpl notEqual(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) {
if (type != rightOperand.type) {
String typeName = type.name;
if (typeName != "bool" &&
@@ -2623,8 +2558,7 @@
return new DartObjectImpl(typeProvider.boolType, BoolState.TRUE_STATE);
}
}
- return new DartObjectImpl(
- typeProvider.boolType,
+ return new DartObjectImpl(typeProvider.boolType,
_state.equalEqual(rightOperand._state).logicalNot());
}
@@ -2651,8 +2585,8 @@
* @return the result of invoking the '%' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl remainder(TypeProvider typeProvider,
- DartObjectImpl rightOperand) {
+ DartObjectImpl remainder(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) {
InstanceState result = _state.remainder(rightOperand._state);
if (result is IntState) {
return new DartObjectImpl(typeProvider.intType, result);
@@ -2674,9 +2608,10 @@
* @return the result of invoking the '<<' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl shiftLeft(TypeProvider typeProvider,
- DartObjectImpl rightOperand) =>
- new DartObjectImpl(typeProvider.intType, _state.shiftLeft(rightOperand._state));
+ DartObjectImpl shiftLeft(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) =>
+ new DartObjectImpl(
+ typeProvider.intType, _state.shiftLeft(rightOperand._state));
/**
* Return the result of invoking the '>>' operator on this object with the given argument.
@@ -2686,11 +2621,10 @@
* @return the result of invoking the '>>' operator on this object with the given argument
* @throws EvaluationException if the operator is not appropriate for an object of this kind
*/
- DartObjectImpl shiftRight(TypeProvider typeProvider,
- DartObjectImpl rightOperand) =>
+ DartObjectImpl shiftRight(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) =>
new DartObjectImpl(
- typeProvider.intType,
- _state.shiftRight(rightOperand._state));
+ typeProvider.intType, _state.shiftRight(rightOperand._state));
/**
* Return the result of invoking the 'length' getter on this object.
@@ -2805,8 +2739,7 @@
String value = _declaredVariables[variableName];
if (value == null) {
return new DartObjectImpl(
- typeProvider.stringType,
- StringState.UNKNOWN_VALUE);
+ typeProvider.stringType, StringState.UNKNOWN_VALUE);
}
return new DartObjectImpl(typeProvider.stringType, new StringState(value));
}
@@ -4954,8 +4887,7 @@
/**
* A table mapping constant constructors to the declarations of those constructors.
*/
- final HashMap<ConstructorElement, ConstructorDeclaration>
- _constructorDeclarationMap;
+ final HashMap<ConstructorElement, ConstructorDeclaration> _constructorDeclarationMap;
/**
* Initialize a newly created reference finder to find references from the given variable to other
@@ -4981,8 +4913,8 @@
}
@override
- Object
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ Object visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
super.visitRedirectingConstructorInvocation(node);
ConstructorElement target = node.staticElement;
if (target != null && target.isConst) {
diff --git a/pkg/analyzer/lib/src/generated/element.dart b/pkg/analyzer/lib/src/generated/element.dart
index bcd681f..a7d8bf3 100644
--- a/pkg/analyzer/lib/src/generated/element.dart
+++ b/pkg/analyzer/lib/src/generated/element.dart
@@ -24,7 +24,6 @@
import 'utilities_collection.dart';
import 'utilities_dart.dart';
-
/**
* For AST nodes that could be in both the getter and setter contexts ([IndexExpression]s and
* [SimpleIdentifier]s), the additional resolved elements are stored in the AST node, in an
@@ -93,21 +92,18 @@
@override
bool internalIsMoreSpecificThan(DartType type, bool withDynamic,
- Set<TypeImpl_TypePair> visitedTypePairs) =>
- true;
+ Set<TypeImpl_TypePair> visitedTypePairs) => true;
@override
- bool internalIsSubtypeOf(DartType type,
- Set<TypeImpl_TypePair> visitedTypePairs) =>
- true;
+ bool internalIsSubtypeOf(
+ DartType type, Set<TypeImpl_TypePair> visitedTypePairs) => true;
@override
bool isSupertypeOf(DartType type) => false;
@override
- BottomTypeImpl substitute2(List<DartType> argumentTypes,
- List<DartType> parameterTypes) =>
- this;
+ BottomTypeImpl substitute2(
+ List<DartType> argumentTypes, List<DartType> parameterTypes) => this;
}
/**
@@ -384,8 +380,8 @@
* @return the result of looking up the given getter in this class with respect to the given
* library
*/
- PropertyAccessorElement lookUpGetter(String getterName,
- LibraryElement library);
+ PropertyAccessorElement lookUpGetter(
+ String getterName, LibraryElement library);
/**
* Return the element representing the getter that results from looking up the given getter in the
@@ -405,8 +401,8 @@
* @return the result of looking up the given getter in this class with respect to the given
* library
*/
- PropertyAccessorElement lookUpInheritedConcreteGetter(String getterName,
- LibraryElement library);
+ PropertyAccessorElement lookUpInheritedConcreteGetter(
+ String getterName, LibraryElement library);
/**
* Return the element representing the method that results from looking up the given method in the
@@ -425,8 +421,8 @@
* @return the result of looking up the given method in the superclass of this class with respect
* to the given library
*/
- MethodElement lookUpInheritedConcreteMethod(String methodName,
- LibraryElement library);
+ MethodElement lookUpInheritedConcreteMethod(
+ String methodName, LibraryElement library);
/**
* Return the element representing the setter that results from looking up the given setter in the
@@ -446,8 +442,8 @@
* @return the result of looking up the given setter in this class with respect to the given
* library
*/
- PropertyAccessorElement lookUpInheritedConcreteSetter(String setterName,
- LibraryElement library);
+ PropertyAccessorElement lookUpInheritedConcreteSetter(
+ String setterName, LibraryElement library);
/**
* Return the element representing the method that results from looking up the given method in the
@@ -466,8 +462,8 @@
* @return the result of looking up the given method in the superclass of this class with respect
* to the given library
*/
- MethodElement lookUpInheritedMethod(String methodName,
- LibraryElement library);
+ MethodElement lookUpInheritedMethod(
+ String methodName, LibraryElement library);
/**
* Return the element representing the method that results from looking up the given method in
@@ -506,8 +502,8 @@
* @return the result of looking up the given setter in this class with respect to the given
* library
*/
- PropertyAccessorElement lookUpSetter(String setterName,
- LibraryElement library);
+ PropertyAccessorElement lookUpSetter(
+ String setterName, LibraryElement library);
}
/**
@@ -953,33 +949,33 @@
}
@override
- MethodElement lookUpConcreteMethod(String methodName,
- LibraryElement library) =>
+ MethodElement lookUpConcreteMethod(
+ String methodName, LibraryElement library) =>
_internalLookUpConcreteMethod(methodName, library, true);
@override
- PropertyAccessorElement lookUpGetter(String getterName,
- LibraryElement library) =>
+ PropertyAccessorElement lookUpGetter(
+ String getterName, LibraryElement library) =>
_internalLookUpGetter(getterName, library, true);
@override
- PropertyAccessorElement lookUpInheritedConcreteGetter(String getterName,
- LibraryElement library) =>
+ PropertyAccessorElement lookUpInheritedConcreteGetter(
+ String getterName, LibraryElement library) =>
_internalLookUpConcreteGetter(getterName, library, false);
@override
- MethodElement lookUpInheritedConcreteMethod(String methodName,
- LibraryElement library) =>
+ MethodElement lookUpInheritedConcreteMethod(
+ String methodName, LibraryElement library) =>
_internalLookUpConcreteMethod(methodName, library, false);
@override
- PropertyAccessorElement lookUpInheritedConcreteSetter(String setterName,
- LibraryElement library) =>
+ PropertyAccessorElement lookUpInheritedConcreteSetter(
+ String setterName, LibraryElement library) =>
_internalLookUpConcreteSetter(setterName, library, false);
@override
- MethodElement lookUpInheritedMethod(String methodName,
- LibraryElement library) =>
+ MethodElement lookUpInheritedMethod(
+ String methodName, LibraryElement library) =>
_internalLookUpMethod(methodName, library, false);
@override
@@ -987,8 +983,8 @@
_internalLookUpMethod(methodName, library, true);
@override
- PropertyAccessorElement lookUpSetter(String setterName,
- LibraryElement library) =>
+ PropertyAccessorElement lookUpSetter(
+ String setterName, LibraryElement library) =>
_internalLookUpSetter(setterName, library, true);
@override
@@ -1030,8 +1026,8 @@
}
}
- PropertyAccessorElement _internalLookUpConcreteGetter(String getterName,
- LibraryElement library, bool includeThisClass) {
+ PropertyAccessorElement _internalLookUpConcreteGetter(
+ String getterName, LibraryElement library, bool includeThisClass) {
PropertyAccessorElement getter =
_internalLookUpGetter(getterName, library, includeThisClass);
while (getter != null && getter.isAbstract) {
@@ -1040,15 +1036,13 @@
return null;
}
getter = (definingClass as ClassElementImpl)._internalLookUpGetter(
- getterName,
- library,
- false);
+ getterName, library, false);
}
return getter;
}
- MethodElement _internalLookUpConcreteMethod(String methodName,
- LibraryElement library, bool includeThisClass) {
+ MethodElement _internalLookUpConcreteMethod(
+ String methodName, LibraryElement library, bool includeThisClass) {
MethodElement method =
_internalLookUpMethod(methodName, library, includeThisClass);
while (method != null && method.isAbstract) {
@@ -1061,8 +1055,8 @@
return method;
}
- PropertyAccessorElement _internalLookUpConcreteSetter(String setterName,
- LibraryElement library, bool includeThisClass) {
+ PropertyAccessorElement _internalLookUpConcreteSetter(
+ String setterName, LibraryElement library, bool includeThisClass) {
PropertyAccessorElement setter =
_internalLookUpSetter(setterName, library, includeThisClass);
while (setter != null && setter.isAbstract) {
@@ -1071,15 +1065,13 @@
return null;
}
setter = (definingClass as ClassElementImpl)._internalLookUpSetter(
- setterName,
- library,
- false);
+ setterName, library, false);
}
return setter;
}
- PropertyAccessorElement _internalLookUpGetter(String getterName,
- LibraryElement library, bool includeThisClass) {
+ PropertyAccessorElement _internalLookUpGetter(
+ String getterName, LibraryElement library, bool includeThisClass) {
HashSet<ClassElement> visitedClasses = new HashSet<ClassElement>();
ClassElement currentElement = this;
if (includeThisClass) {
@@ -1111,8 +1103,8 @@
return null;
}
- MethodElement _internalLookUpMethod(String methodName, LibraryElement library,
- bool includeThisClass) {
+ MethodElement _internalLookUpMethod(
+ String methodName, LibraryElement library, bool includeThisClass) {
HashSet<ClassElement> visitedClasses = new HashSet<ClassElement>();
ClassElement currentElement = this;
if (includeThisClass) {
@@ -1144,8 +1136,8 @@
return null;
}
- PropertyAccessorElement _internalLookUpSetter(String setterName,
- LibraryElement library, bool includeThisClass) {
+ PropertyAccessorElement _internalLookUpSetter(
+ String setterName, LibraryElement library, bool includeThisClass) {
HashSet<ClassElement> visitedClasses = new HashSet<ClassElement>();
ClassElement currentElement = this;
if (includeThisClass) {
@@ -1177,8 +1169,8 @@
return null;
}
- bool _safeIsOrInheritsProxy(ClassElement classElt,
- HashSet<ClassElement> visitedClassElts) {
+ bool _safeIsOrInheritsProxy(
+ ClassElement classElt, HashSet<ClassElement> visitedClassElts) {
if (visitedClassElts.contains(classElt)) {
return false;
}
@@ -1326,14 +1318,13 @@
* Instances of the class `CompilationUnitElementImpl` implement a
* [CompilationUnitElement].
*/
-class CompilationUnitElementImpl extends UriReferencedElementImpl implements
- CompilationUnitElement {
+class CompilationUnitElementImpl extends UriReferencedElementImpl
+ implements CompilationUnitElement {
/**
* An empty list of compilation unit elements.
*/
- static const List<CompilationUnitElement> EMPTY_ARRAY = const
- <CompilationUnitElement>[
- ];
+ static const List<CompilationUnitElement> EMPTY_ARRAY =
+ const <CompilationUnitElement>[];
/**
* The source that corresponds to this compilation unit.
@@ -1652,8 +1643,8 @@
* The interface `ConstructorElement` defines the behavior of elements representing a
* constructor or a factory method defined within a type.
*/
-abstract class ConstructorElement implements ClassMemberElement,
- ExecutableElement {
+abstract class ConstructorElement
+ implements ClassMemberElement, ExecutableElement {
/**
* Return `true` if this constructor is a const constructor.
*
@@ -1713,14 +1704,13 @@
/**
* Instances of the class `ConstructorElementImpl` implement a `ConstructorElement`.
*/
-class ConstructorElementImpl extends ExecutableElementImpl implements
- ConstructorElement {
+class ConstructorElementImpl extends ExecutableElementImpl
+ implements ConstructorElement {
/**
* An empty list of constructor elements.
*/
- static const List<ConstructorElement> EMPTY_ARRAY = const
- <ConstructorElement>[
- ];
+ static const List<ConstructorElement> EMPTY_ARRAY =
+ const <ConstructorElement>[];
/**
* The constructor to which this constructor is redirecting.
@@ -1929,8 +1919,8 @@
* substitution
* @return the constructor element that will return the correctly substituted types
*/
- static ConstructorElement from(ConstructorElement baseConstructor,
- InterfaceType definingType) {
+ static ConstructorElement from(
+ ConstructorElement baseConstructor, InterfaceType definingType) {
if (baseConstructor == null || definingType.typeArguments.length == 0) {
return baseConstructor;
}
@@ -2082,16 +2072,16 @@
* Note too that the current implementation of this method is only guaranteed
* to work when the argument types are type variables.
*/
- DartType substitute2(List<DartType> argumentTypes,
- List<DartType> parameterTypes);
+ DartType substitute2(
+ List<DartType> argumentTypes, List<DartType> parameterTypes);
}
/**
* Instances of the class `DefaultFieldFormalParameterElementImpl` implement a
* `FieldFormalParameterElementImpl` for parameters that have an initializer.
*/
-class DefaultFieldFormalParameterElementImpl extends
- FieldFormalParameterElementImpl {
+class DefaultFieldFormalParameterElementImpl
+ extends FieldFormalParameterElementImpl {
/**
* The result of evaluating this variable's initializer.
*/
@@ -2225,16 +2215,15 @@
}
@override
- bool internalIsSubtypeOf(DartType type,
- Set<TypeImpl_TypePair> visitedTypePairs) =>
- true;
+ bool internalIsSubtypeOf(
+ DartType type, Set<TypeImpl_TypePair> visitedTypePairs) => true;
@override
bool isSupertypeOf(DartType type) => true;
@override
- DartType substitute2(List<DartType> argumentTypes,
- List<DartType> parameterTypes) {
+ DartType substitute2(
+ List<DartType> argumentTypes, List<DartType> parameterTypes) {
int length = parameterTypes.length;
for (int i = 0; i < length; i++) {
if (parameterTypes[i] == this) {
@@ -2273,9 +2262,9 @@
* A comparator that can be used to sort elements by their name offset. Elements with a smaller
* offset will be sorted to be before elements with a larger name offset.
*/
- static final Comparator<Element> SORT_BY_OFFSET =
- (Element firstElement, Element secondElement) =>
- firstElement.nameOffset - secondElement.nameOffset;
+ static final Comparator<Element> SORT_BY_OFFSET = (Element firstElement,
+ Element secondElement) =>
+ firstElement.nameOffset - secondElement.nameOffset;
/**
* Return the analysis context in which this element is defined.
@@ -2532,9 +2521,8 @@
/**
* An empty list of annotations.
*/
- static const List<ElementAnnotationImpl> EMPTY_ARRAY = const
- <ElementAnnotationImpl>[
- ];
+ static const List<ElementAnnotationImpl> EMPTY_ARRAY =
+ const <ElementAnnotationImpl>[];
/**
* The name of the class used to mark an element as being deprecated.
@@ -3065,31 +3053,32 @@
const ElementKind('UNIVERSE', 24, "<universe>");
static const List<ElementKind> values = const [
- CLASS,
- COMPILATION_UNIT,
- CONSTRUCTOR,
- DYNAMIC,
- EMBEDDED_HTML_SCRIPT,
- ERROR,
- EXPORT,
- EXTERNAL_HTML_SCRIPT,
- FIELD,
- FUNCTION,
- GETTER,
- HTML,
- IMPORT,
- LABEL,
- LIBRARY,
- LOCAL_VARIABLE,
- METHOD,
- NAME,
- PARAMETER,
- PREFIX,
- SETTER,
- TOP_LEVEL_VARIABLE,
- FUNCTION_TYPE_ALIAS,
- TYPE_PARAMETER,
- UNIVERSE];
+ CLASS,
+ COMPILATION_UNIT,
+ CONSTRUCTOR,
+ DYNAMIC,
+ EMBEDDED_HTML_SCRIPT,
+ ERROR,
+ EXPORT,
+ EXTERNAL_HTML_SCRIPT,
+ FIELD,
+ FUNCTION,
+ GETTER,
+ HTML,
+ IMPORT,
+ LABEL,
+ LIBRARY,
+ LOCAL_VARIABLE,
+ METHOD,
+ NAME,
+ PARAMETER,
+ PREFIX,
+ SETTER,
+ TOP_LEVEL_VARIABLE,
+ FUNCTION_TYPE_ALIAS,
+ TYPE_PARAMETER,
+ UNIVERSE
+ ];
/**
* The name displayed in the UI for this kind of element.
@@ -3431,8 +3420,8 @@
* Instances of the class `EmbeddedHtmlScriptElementImpl` implement an
* [EmbeddedHtmlScriptElement].
*/
-class EmbeddedHtmlScriptElementImpl extends HtmlScriptElementImpl implements
- EmbeddedHtmlScriptElement {
+class EmbeddedHtmlScriptElementImpl extends HtmlScriptElementImpl
+ implements EmbeddedHtmlScriptElement {
/**
* The library defined by the script tag's content.
*/
@@ -3561,13 +3550,13 @@
* The abstract class `ExecutableElementImpl` implements the behavior common to
* `ExecutableElement`s.
*/
-abstract class ExecutableElementImpl extends ElementImpl implements
- ExecutableElement {
+abstract class ExecutableElementImpl extends ElementImpl
+ implements ExecutableElement {
/**
* An empty list of executable elements.
*/
static const List<ExecutableElement> EMPTY_ARRAY = const <ExecutableElement>[
- ];
+ ];
/**
* An array containing all of the functions defined within this executable element.
@@ -3902,8 +3891,8 @@
/**
* Instances of the class `ExportElementImpl` implement an [ExportElement].
*/
-class ExportElementImpl extends UriReferencedElementImpl implements
- ExportElement {
+class ExportElementImpl extends UriReferencedElementImpl
+ implements ExportElement {
/**
* The library that is exported from this library by this export directive.
*/
@@ -3955,8 +3944,8 @@
* Instances of the class `ExternalHtmlScriptElementImpl` implement an
* [ExternalHtmlScriptElement].
*/
-class ExternalHtmlScriptElementImpl extends HtmlScriptElementImpl implements
- ExternalHtmlScriptElement {
+class ExternalHtmlScriptElementImpl extends HtmlScriptElementImpl
+ implements ExternalHtmlScriptElement {
/**
* The source specified in the `source` attribute or `null` if unspecified.
*/
@@ -3981,8 +3970,8 @@
* The interface `FieldElement` defines the behavior of elements representing a field defined
* within a type.
*/
-abstract class FieldElement implements ClassMemberElement,
- PropertyInducingElement {
+abstract class FieldElement
+ implements ClassMemberElement, PropertyInducingElement {
/**
* Return {@code true} if this element is an enum constant.
*
@@ -3994,8 +3983,8 @@
/**
* Instances of the class `FieldElementImpl` implement a `FieldElement`.
*/
-class FieldElementImpl extends PropertyInducingElementImpl implements
- FieldElement {
+class FieldElementImpl extends PropertyInducingElementImpl
+ implements FieldElement {
/**
* An empty list of field elements.
*/
@@ -4062,8 +4051,8 @@
* [ParameterElementImpl] to provide the additional information of the [FieldElement]
* associated with the parameter.
*/
-class FieldFormalParameterElementImpl extends ParameterElementImpl implements
- FieldFormalParameterElement {
+class FieldFormalParameterElementImpl extends ParameterElementImpl
+ implements FieldFormalParameterElement {
/**
* The field associated with this field formal parameter.
*/
@@ -4088,16 +4077,16 @@
* Instances of the class `FieldFormalParameterMember` represent a parameter element defined
* in a parameterized type where the values of the type parameters are known.
*/
-class FieldFormalParameterMember extends ParameterMember implements
- FieldFormalParameterElement {
+class FieldFormalParameterMember extends ParameterMember
+ implements FieldFormalParameterElement {
/**
* Initialize a newly created element to represent a parameter of the given parameterized type.
*
* @param baseElement the element on which the parameterized element was created
* @param definingType the type in which the element is defined
*/
- FieldFormalParameterMember(FieldFormalParameterElement baseElement,
- ParameterizedType definingType)
+ FieldFormalParameterMember(
+ FieldFormalParameterElement baseElement, ParameterizedType definingType)
: super(baseElement, definingType);
@override
@@ -4190,8 +4179,8 @@
* substitution
* @return true if the type is changed by type substitution.
*/
- static bool _isChangedByTypeSubstitution(FieldElement baseField,
- InterfaceType definingType) {
+ static bool _isChangedByTypeSubstitution(
+ FieldElement baseField, InterfaceType definingType) {
List<DartType> argumentTypes = definingType.typeArguments;
if (baseField != null && argumentTypes.length != 0) {
DartType baseType = baseField.type;
@@ -4255,8 +4244,8 @@
/**
* Instances of the class `FunctionElementImpl` implement a `FunctionElement`.
*/
-class FunctionElementImpl extends ExecutableElementImpl implements
- FunctionElement {
+class FunctionElementImpl extends ExecutableElementImpl
+ implements FunctionElement {
/**
* An empty list of function elements.
*/
@@ -4465,8 +4454,8 @@
bool isSubtypeOf(DartType type);
@override
- FunctionType substitute2(List<DartType> argumentTypes,
- List<DartType> parameterTypes);
+ FunctionType substitute2(
+ List<DartType> argumentTypes, List<DartType> parameterTypes);
/**
* Return the type resulting from substituting the given arguments for this type's parameters.
@@ -4536,8 +4525,8 @@
* Instances of the class `FunctionTypeAliasElementImpl` implement a
* `FunctionTypeAliasElement`.
*/
-class FunctionTypeAliasElementImpl extends ElementImpl implements
- FunctionTypeAliasElement {
+class FunctionTypeAliasElementImpl extends ElementImpl
+ implements FunctionTypeAliasElement {
/**
* An empty array of type alias elements.
*/
@@ -4933,8 +4922,7 @@
return baseReturnType;
}
return baseReturnType.substitute2(
- typeArguments,
- TypeParameterTypeImpl.getTypes(typeParameters));
+ typeArguments, TypeParameterTypeImpl.getTypes(typeParameters));
}
@override
@@ -5035,22 +5023,14 @@
return elementPair.firstElt == elementPair.secondElt;
}
// Compute the result
- bool result =
- TypeImpl.equalArrays(
- normalParameterTypes,
- otherType.normalParameterTypes,
- visitedElementPairs) &&
- TypeImpl.equalArrays(
- optionalParameterTypes,
- otherType.optionalParameterTypes,
- visitedElementPairs) &&
- _equals(
- namedParameterTypes,
- otherType.namedParameterTypes,
+ bool result = TypeImpl.equalArrays(normalParameterTypes,
+ otherType.normalParameterTypes, visitedElementPairs) &&
+ TypeImpl.equalArrays(optionalParameterTypes,
+ otherType.optionalParameterTypes, visitedElementPairs) &&
+ _equals(namedParameterTypes, otherType.namedParameterTypes,
visitedElementPairs) &&
(returnType as TypeImpl).internalEquals(
- otherType.returnType,
- visitedElementPairs);
+ otherType.returnType, visitedElementPairs);
// Remove the pair from our visited pairs list
visitedElementPairs.remove(elementPair);
// Return the result
@@ -5077,7 +5057,8 @@
}
for (int i = 0; i < optionalParameterTypes.length; i++) {
code = (code << 1) +
- (optionalParameterTypes[i] as TypeImpl).internalHashCode(visitedTypes);
+ (optionalParameterTypes[i] as TypeImpl)
+ .internalHashCode(visitedTypes);
}
for (DartType type in namedParameterTypes) {
code = (code << 1) + (type as TypeImpl).internalHashCode(visitedTypes);
@@ -5098,9 +5079,7 @@
return true;
} else if (type is UnionType) {
return (type as UnionTypeImpl).internalUnionTypeIsLessSpecificThan(
- this,
- withDynamic,
- visitedTypePairs);
+ this, withDynamic, visitedTypePairs);
} else if (type is! FunctionType) {
return false;
} else if (this == type) {
@@ -5127,9 +5106,7 @@
} else if (t.normalParameterTypes.length > 0) {
for (int i = 0; i < tTypes.length; i++) {
if (!(tTypes[i] as TypeImpl).isMoreSpecificThan2(
- sTypes[i],
- withDynamic,
- visitedTypePairs)) {
+ sTypes[i], withDynamic, visitedTypePairs)) {
return false;
}
}
@@ -5150,9 +5127,7 @@
return false;
}
if (!(typeT as TypeImpl).isMoreSpecificThan2(
- namedTypesS[keyS],
- withDynamic,
- visitedTypePairs)) {
+ namedTypesS[keyS], withDynamic, visitedTypePairs)) {
return false;
}
}
@@ -5173,9 +5148,7 @@
// No positional arguments, don't copy contents to new array
for (int i = 0; i < sTypes.length; i++) {
if (!(tTypes[i] as TypeImpl).isMoreSpecificThan2(
- sTypes[i],
- withDynamic,
- visitedTypePairs)) {
+ sTypes[i], withDynamic, visitedTypePairs)) {
return false;
}
}
@@ -5186,23 +5159,19 @@
for (int i = 0; i < tTypes.length; i++) {
tAllTypes[i] = tTypes[i];
}
- for (int i = tTypes.length,
- j = 0; i < sArgLength; i++, j++) {
+ for (int i = tTypes.length, j = 0; i < sArgLength; i++, j++) {
tAllTypes[i] = tOpTypes[j];
}
List<DartType> sAllTypes = new List<DartType>(sArgLength);
for (int i = 0; i < sTypes.length; i++) {
sAllTypes[i] = sTypes[i];
}
- for (int i = sTypes.length,
- j = 0; i < sArgLength; i++, j++) {
+ for (int i = sTypes.length, j = 0; i < sArgLength; i++, j++) {
sAllTypes[i] = sOpTypes[j];
}
for (int i = 0; i < sAllTypes.length; i++) {
if (!(tAllTypes[i] as TypeImpl).isMoreSpecificThan2(
- sAllTypes[i],
- withDynamic,
- visitedTypePairs)) {
+ sAllTypes[i], withDynamic, visitedTypePairs)) {
return false;
}
}
@@ -5212,14 +5181,12 @@
DartType sRetType = s.returnType;
return sRetType.isVoid ||
(tRetType as TypeImpl).isMoreSpecificThan2(
- sRetType,
- withDynamic,
- visitedTypePairs);
+ sRetType, withDynamic, visitedTypePairs);
}
@override
- bool internalIsSubtypeOf(DartType type,
- Set<TypeImpl_TypePair> visitedTypePairs) {
+ bool internalIsSubtypeOf(
+ DartType type, Set<TypeImpl_TypePair> visitedTypePairs) {
// trivial base cases
if (type == null) {
return false;
@@ -5230,8 +5197,7 @@
return true;
} else if (type is UnionType) {
return (type as UnionTypeImpl).internalUnionTypeIsSuperTypeOf(
- this,
- visitedTypePairs);
+ this, visitedTypePairs);
} else if (type is! FunctionType) {
return false;
} else if (this == type) {
@@ -5258,8 +5224,7 @@
} else if (t.normalParameterTypes.length > 0) {
for (int i = 0; i < tTypes.length; i++) {
if (!(tTypes[i] as TypeImpl).isAssignableTo2(
- sTypes[i],
- visitedTypePairs)) {
+ sTypes[i], visitedTypePairs)) {
return false;
}
}
@@ -5280,8 +5245,7 @@
return false;
}
if (!(typeT as TypeImpl).isAssignableTo2(
- namedTypesS[keyS],
- visitedTypePairs)) {
+ namedTypesS[keyS], visitedTypePairs)) {
return false;
}
}
@@ -5302,8 +5266,7 @@
// No positional arguments, don't copy contents to new array
for (int i = 0; i < sTypes.length; i++) {
if (!(tTypes[i] as TypeImpl).isAssignableTo2(
- sTypes[i],
- visitedTypePairs)) {
+ sTypes[i], visitedTypePairs)) {
return false;
}
}
@@ -5314,22 +5277,19 @@
for (int i = 0; i < tTypes.length; i++) {
tAllTypes[i] = tTypes[i];
}
- for (int i = tTypes.length,
- j = 0; i < sArgLength; i++, j++) {
+ for (int i = tTypes.length, j = 0; i < sArgLength; i++, j++) {
tAllTypes[i] = tOpTypes[j];
}
List<DartType> sAllTypes = new List<DartType>(sArgLength);
for (int i = 0; i < sTypes.length; i++) {
sAllTypes[i] = sTypes[i];
}
- for (int i = sTypes.length,
- j = 0; i < sArgLength; i++, j++) {
+ for (int i = sTypes.length, j = 0; i < sArgLength; i++, j++) {
sAllTypes[i] = sOpTypes[j];
}
for (int i = 0; i < sAllTypes.length; i++) {
if (!(tAllTypes[i] as TypeImpl).isAssignableTo2(
- sAllTypes[i],
- visitedTypePairs)) {
+ sAllTypes[i], visitedTypePairs)) {
return false;
}
}
@@ -5356,8 +5316,8 @@
isSubtypeOf2(type, new HashSet<TypeImpl_TypePair>());
@override
- FunctionTypeImpl substitute2(List<DartType> argumentTypes,
- List<DartType> parameterTypes) {
+ FunctionTypeImpl substitute2(
+ List<DartType> argumentTypes, List<DartType> parameterTypes) {
if (argumentTypes.length != parameterTypes.length) {
throw new IllegalArgumentException(
"argumentTypes.length (${argumentTypes.length}) != parameterTypes.length (${parameterTypes.length})");
@@ -5366,9 +5326,9 @@
return this;
}
Element element = this.element;
- FunctionTypeImpl newType = (element is ExecutableElement) ?
- new FunctionTypeImpl.con1(element) :
- new FunctionTypeImpl.con2(element as FunctionTypeAliasElement);
+ FunctionTypeImpl newType = (element is ExecutableElement)
+ ? new FunctionTypeImpl.con1(element)
+ : new FunctionTypeImpl.con2(element as FunctionTypeAliasElement);
newType.typeArguments =
TypeImpl.substitute(typeArguments, argumentTypes, parameterTypes);
return newType;
@@ -5389,8 +5349,8 @@
* @return `true` if all of the name/type pairs in the first map are equal to the
* corresponding name/type pairs in the second map
*/
- static bool _equals(Map<String, DartType> firstTypes, Map<String,
- DartType> secondTypes, Set<ElementPair> visitedElementPairs) {
+ static bool _equals(Map<String, DartType> firstTypes,
+ Map<String, DartType> secondTypes, Set<ElementPair> visitedElementPairs) {
if (secondTypes.length != firstTypes.length) {
return false;
}
@@ -5719,19 +5679,18 @@
*
* See [EmbeddedHtmlScriptElement], and [ExternalHtmlScriptElement],
*/
-abstract class HtmlScriptElement implements Element {
-}
+abstract class HtmlScriptElement implements Element {}
/**
* Instances of the class `HtmlScriptElementImpl` implement an [HtmlScriptElement].
*/
-abstract class HtmlScriptElementImpl extends ElementImpl implements
- HtmlScriptElement {
+abstract class HtmlScriptElementImpl extends ElementImpl
+ implements HtmlScriptElement {
/**
* An empty list of HTML script elements.
*/
static const List<HtmlScriptElement> EMPTY_ARRAY = const <HtmlScriptElement>[
- ];
+ ];
/**
* Initialize a newly created script element to have the specified tag name and offset.
@@ -5795,8 +5754,8 @@
/**
* Instances of the class `ImportElementImpl` implement an [ImportElement].
*/
-class ImportElementImpl extends UriReferencedElementImpl implements
- ImportElement {
+class ImportElementImpl extends UriReferencedElementImpl
+ implements ImportElement {
/**
* The offset of the prefix of this import in the file that contains the this import directive, or
* `-1` if this import is synthetic.
@@ -6025,8 +5984,8 @@
* @return the result of looking up the given constructor in this class with respect to the given
* library
*/
- ConstructorElement lookUpConstructor(String constructorName,
- LibraryElement library);
+ ConstructorElement lookUpConstructor(
+ String constructorName, LibraryElement library);
/**
* Return the element representing the getter that results from looking up the given getter in
@@ -6046,8 +6005,8 @@
* @return the result of looking up the given getter in this class with respect to the given
* library
*/
- PropertyAccessorElement lookUpGetter(String getterName,
- LibraryElement library);
+ PropertyAccessorElement lookUpGetter(
+ String getterName, LibraryElement library);
/**
* Return the element representing the getter that results from looking up the given getter in the
@@ -6067,8 +6026,8 @@
* @return the result of looking up the given getter in this class with respect to the given
* library
*/
- PropertyAccessorElement lookUpGetterInSuperclass(String getterName,
- LibraryElement library);
+ PropertyAccessorElement lookUpGetterInSuperclass(
+ String getterName, LibraryElement library);
/**
* Return the element representing the method that results from looking up the given method in
@@ -6106,8 +6065,8 @@
* @return the result of looking up the given method in this class with respect to the given
* library
*/
- MethodElement lookUpMethodInSuperclass(String methodName,
- LibraryElement library);
+ MethodElement lookUpMethodInSuperclass(
+ String methodName, LibraryElement library);
/**
* Return the element representing the setter that results from looking up the given setter in
@@ -6127,8 +6086,8 @@
* @return the result of looking up the given setter in this class with respect to the given
* library
*/
- PropertyAccessorElement lookUpSetter(String setterName,
- LibraryElement library);
+ PropertyAccessorElement lookUpSetter(
+ String setterName, LibraryElement library);
/**
* Return the element representing the setter that results from looking up the given setter in the
@@ -6148,12 +6107,12 @@
* @return the result of looking up the given setter in this class with respect to the given
* library
*/
- PropertyAccessorElement lookUpSetterInSuperclass(String setterName,
- LibraryElement library);
+ PropertyAccessorElement lookUpSetterInSuperclass(
+ String setterName, LibraryElement library);
@override
- InterfaceType substitute2(List<DartType> argumentTypes,
- List<DartType> parameterTypes);
+ InterfaceType substitute2(
+ List<DartType> argumentTypes, List<DartType> parameterTypes);
/**
* Return the type resulting from substituting the given arguments for this
@@ -6170,8 +6129,8 @@
*
* Otherwise, calls [DartType.getLeastUpperBound].
*/
- static InterfaceType getSmartLeastUpperBound(InterfaceType first,
- InterfaceType second) {
+ static InterfaceType getSmartLeastUpperBound(
+ InterfaceType first, InterfaceType second) {
if (first.element == second.element) {
return _leastUpperBound(first, second);
}
@@ -6187,14 +6146,13 @@
* arguments, keeping those that are the same, and using 'dynamic' for those
* that are different.
*/
- static InterfaceType _leastUpperBound(InterfaceType firstType,
- InterfaceType secondType) {
+ static InterfaceType _leastUpperBound(
+ InterfaceType firstType, InterfaceType secondType) {
ClassElement firstElement = firstType.element;
ClassElement secondElement = secondType.element;
if (firstElement != secondElement) {
- throw new IllegalArgumentException(
- 'The same elements expected, but '
- '$firstElement and $secondElement are given.');
+ throw new IllegalArgumentException('The same elements expected, but '
+ '$firstElement and $secondElement are given.');
}
if (firstType == secondType) {
return firstType;
@@ -6380,8 +6338,12 @@
List<TypeParameterElement> get typeParameters => element.typeParameters;
@override
- bool operator ==(Object object) =>
- internalEquals(object, new HashSet<ElementPair>());
+ bool operator ==(Object object) {
+ if (identical(object, this)) {
+ return true;
+ }
+ return internalEquals(object, new HashSet<ElementPair>());
+ }
@override
void appendTo(StringBuffer buffer, Set<DartType> visitedTypes) {
@@ -6404,10 +6366,8 @@
}
@override
- PropertyAccessorElement getGetter(String getterName) =>
- PropertyAccessorMember.from(
- (element as ClassElementImpl).getGetter(getterName),
- this);
+ PropertyAccessorElement getGetter(String getterName) => PropertyAccessorMember
+ .from((element as ClassElementImpl).getGetter(getterName), this);
@override
DartType getLeastUpperBound(DartType type) {
@@ -6447,7 +6407,7 @@
}
// ensure that the currently computed maxDepth is unique,
// otherwise, decrement and test for uniqueness again
- for ( ; maxDepth >= 0; maxDepth--) {
+ for (; maxDepth >= 0; maxDepth--) {
int indexOfLeastUpperBound = -1;
int numberOfTypesAtMaxDepth = 0;
for (int m = 0; m < depths.length; m++) {
@@ -6467,26 +6427,25 @@
}
@override
- MethodElement getMethod(String methodName) =>
- MethodMember.from((element as ClassElementImpl).getMethod(methodName), this);
+ MethodElement getMethod(String methodName) => MethodMember.from(
+ (element as ClassElementImpl).getMethod(methodName), this);
@override
- PropertyAccessorElement getSetter(String setterName) =>
- PropertyAccessorMember.from(
- (element as ClassElementImpl).getSetter(setterName),
- this);
+ PropertyAccessorElement getSetter(String setterName) => PropertyAccessorMember
+ .from((element as ClassElementImpl).getSetter(setterName), this);
@override
bool internalEquals(Object object, Set<ElementPair> visitedElementPairs) {
+ if (identical(object, this)) {
+ return true;
+ }
if (object is! InterfaceTypeImpl) {
return false;
}
InterfaceTypeImpl otherType = object as InterfaceTypeImpl;
return (element == otherType.element) &&
TypeImpl.equalArrays(
- typeArguments,
- otherType.typeArguments,
- visitedElementPairs);
+ typeArguments, otherType.typeArguments, visitedElementPairs);
}
@override
@@ -6504,22 +6463,17 @@
return true;
} else if (type is UnionType) {
return (type as UnionTypeImpl).internalUnionTypeIsLessSpecificThan(
- this,
- withDynamic,
- visitedTypePairs);
+ this, withDynamic, visitedTypePairs);
} else if (type is! InterfaceType) {
return false;
}
- return _isMoreSpecificThan(
- type as InterfaceType,
- new HashSet<ClassElement>(),
- withDynamic,
- visitedTypePairs);
+ return _isMoreSpecificThan(type as InterfaceType,
+ new HashSet<ClassElement>(), withDynamic, visitedTypePairs);
}
@override
- bool internalIsSubtypeOf(DartType type,
- Set<TypeImpl_TypePair> visitedTypePairs) {
+ bool internalIsSubtypeOf(
+ DartType type, Set<TypeImpl_TypePair> visitedTypePairs) {
//
// T is a subtype of S, written T <: S, iff [bottom/dynamic]T << S
//
@@ -6529,8 +6483,7 @@
return false;
} else if (type is UnionType) {
return (type as UnionTypeImpl).internalUnionTypeIsSuperTypeOf(
- this,
- visitedTypePairs);
+ this, visitedTypePairs);
} else if (type is FunctionType) {
// This implementation assumes transitivity
// for function type subtyping on the RHS, but a literal reading
@@ -6600,9 +6553,7 @@
return true;
}
return _isSubtypeOf(
- type as InterfaceType,
- new HashSet<ClassElement>(),
- visitedTypePairs);
+ type as InterfaceType, new HashSet<ClassElement>(), visitedTypePairs);
}
@override
@@ -6654,8 +6605,8 @@
}
@override
- ConstructorElement lookUpConstructor(String constructorName,
- LibraryElement library) {
+ ConstructorElement lookUpConstructor(
+ String constructorName, LibraryElement library) {
// prepare base ConstructorElement
ConstructorElement constructorElement;
if (constructorName == null) {
@@ -6673,8 +6624,8 @@
}
@override
- PropertyAccessorElement lookUpGetter(String getterName,
- LibraryElement library) {
+ PropertyAccessorElement lookUpGetter(
+ String getterName, LibraryElement library) {
PropertyAccessorElement element = getGetter(getterName);
if (element != null && element.isAccessibleIn(library)) {
return element;
@@ -6683,8 +6634,8 @@
}
@override
- PropertyAccessorElement lookUpGetterInSuperclass(String getterName,
- LibraryElement library) {
+ PropertyAccessorElement lookUpGetterInSuperclass(
+ String getterName, LibraryElement library) {
for (InterfaceType mixin in mixins.reversed) {
PropertyAccessorElement element = mixin.getGetter(getterName);
if (element != null && element.isAccessibleIn(library)) {
@@ -6723,8 +6674,8 @@
}
@override
- MethodElement lookUpMethodInSuperclass(String methodName,
- LibraryElement library) {
+ MethodElement lookUpMethodInSuperclass(
+ String methodName, LibraryElement library) {
for (InterfaceType mixin in mixins.reversed) {
MethodElement element = mixin.getMethod(methodName);
if (element != null && element.isAccessibleIn(library)) {
@@ -6754,8 +6705,8 @@
}
@override
- PropertyAccessorElement lookUpSetter(String setterName,
- LibraryElement library) {
+ PropertyAccessorElement lookUpSetter(
+ String setterName, LibraryElement library) {
PropertyAccessorElement element = getSetter(setterName);
if (element != null && element.isAccessibleIn(library)) {
return element;
@@ -6764,8 +6715,8 @@
}
@override
- PropertyAccessorElement lookUpSetterInSuperclass(String setterName,
- LibraryElement library) {
+ PropertyAccessorElement lookUpSetterInSuperclass(
+ String setterName, LibraryElement library) {
for (InterfaceType mixin in mixins.reversed) {
PropertyAccessorElement element = mixin.getSetter(setterName);
if (element != null && element.isAccessibleIn(library)) {
@@ -6795,8 +6746,8 @@
}
@override
- InterfaceTypeImpl substitute2(List<DartType> argumentTypes,
- List<DartType> parameterTypes) {
+ InterfaceTypeImpl substitute2(
+ List<DartType> argumentTypes, List<DartType> parameterTypes) {
if (argumentTypes.length != parameterTypes.length) {
throw new IllegalArgumentException(
"argumentTypes.length (${argumentTypes.length}) != parameterTypes.length (${parameterTypes.length})");
@@ -6852,9 +6803,7 @@
}
for (int i = 0; i < tArguments.length; i++) {
if (!(tArguments[i] as TypeImpl).isMoreSpecificThan2(
- sArguments[i],
- withDynamic,
- visitedTypePairs)) {
+ sArguments[i], withDynamic, visitedTypePairs)) {
return false;
}
}
@@ -6875,27 +6824,18 @@
InterfaceType supertype = superclass;
if (supertype != null &&
(supertype as InterfaceTypeImpl)._isMoreSpecificThan(
- s,
- visitedClasses,
- withDynamic,
- visitedTypePairs)) {
+ s, visitedClasses, withDynamic, visitedTypePairs)) {
return true;
}
for (InterfaceType interfaceType in interfaces) {
if ((interfaceType as InterfaceTypeImpl)._isMoreSpecificThan(
- s,
- visitedClasses,
- withDynamic,
- visitedTypePairs)) {
+ s, visitedClasses, withDynamic, visitedTypePairs)) {
return true;
}
}
for (InterfaceType mixinType in mixins) {
if ((mixinType as InterfaceTypeImpl)._isMoreSpecificThan(
- s,
- visitedClasses,
- withDynamic,
- visitedTypePairs)) {
+ s, visitedClasses, withDynamic, visitedTypePairs)) {
return true;
}
}
@@ -6927,8 +6867,7 @@
// Recursively call isSubtypeOf the type arguments and return false if
// the T argument is not a subtype of the S argument.
if (!(typeTArgs[i] as TypeImpl).isSubtypeOf2(
- typeSArgs[i],
- visitedTypePairs)) {
+ typeSArgs[i], visitedTypePairs)) {
return false;
}
}
@@ -6940,26 +6879,20 @@
// The type is Object, return false.
if (supertype != null &&
(supertype as InterfaceTypeImpl)._isSubtypeOf(
- typeS,
- visitedClasses,
- visitedTypePairs)) {
+ typeS, visitedClasses, visitedTypePairs)) {
return true;
}
List<InterfaceType> interfaceTypes = interfaces;
for (InterfaceType interfaceType in interfaceTypes) {
if ((interfaceType as InterfaceTypeImpl)._isSubtypeOf(
- typeS,
- visitedClasses,
- visitedTypePairs)) {
+ typeS, visitedClasses, visitedTypePairs)) {
return true;
}
}
List<InterfaceType> mixinTypes = mixins;
for (InterfaceType mixinType in mixinTypes) {
if ((mixinType as InterfaceTypeImpl)._isSubtypeOf(
- typeS,
- visitedClasses,
- visitedTypePairs)) {
+ typeS, visitedClasses, visitedTypePairs)) {
return true;
}
}
@@ -6975,7 +6908,8 @@
* See [InterfaceType.getLeastUpperBound].
*/
static int computeLongestInheritancePathToObject(InterfaceType type) =>
- _computeLongestInheritancePathToObject(type, 0, new HashSet<ClassElement>());
+ _computeLongestInheritancePathToObject(
+ type, 0, new HashSet<ClassElement>());
/**
* Returns the set of all superinterfaces of the passed [Type].
@@ -6999,8 +6933,8 @@
* @return the computed longest inheritance path to Object
* See [computeLongestInheritancePathToObject], and [getLeastUpperBound].
*/
- static int _computeLongestInheritancePathToObject(InterfaceType type,
- int depth, HashSet<ClassElement> visitedClasses) {
+ static int _computeLongestInheritancePathToObject(
+ InterfaceType type, int depth, HashSet<ClassElement> visitedClasses) {
ClassElement classElement = type.element;
// Object case
if (classElement.supertype == null ||
@@ -7017,9 +6951,7 @@
// method and keeping track of the longest path to return
for (InterfaceType superinterface in superinterfaces) {
pathLength = _computeLongestInheritancePathToObject(
- superinterface,
- depth + 1,
- visitedClasses);
+ superinterface, depth + 1, visitedClasses);
if (pathLength > longestPath) {
longestPath = pathLength;
}
@@ -7029,8 +6961,8 @@
// TODO(brianwilkerson) Does this also need to add in the number of mixin
// classes?
InterfaceType supertype = classElement.supertype;
- pathLength =
- _computeLongestInheritancePathToObject(supertype, depth + 1, visitedClasses);
+ pathLength = _computeLongestInheritancePathToObject(
+ supertype, depth + 1, visitedClasses);
if (pathLength > longestPath) {
longestPath = pathLength;
}
@@ -7049,8 +6981,8 @@
* @return the [Set] of superinterfaces of the passed [Type]
* See [computeSuperinterfaceSet], and [getLeastUpperBound].
*/
- static Set<InterfaceType> _computeSuperinterfaceSet(InterfaceType type,
- HashSet<InterfaceType> set) {
+ static Set<InterfaceType> _computeSuperinterfaceSet(
+ InterfaceType type, HashSet<InterfaceType> set) {
Element element = type.element;
if (element != null) {
List<InterfaceType> superinterfaces = type.interfaces;
@@ -7077,8 +7009,8 @@
* @param second the second set of types to be intersected
* @return the intersection of the given sets of types
*/
- static List<InterfaceType> _intersection(Set<InterfaceType> first,
- Set<InterfaceType> second) {
+ static List<InterfaceType> _intersection(
+ Set<InterfaceType> first, Set<InterfaceType> second) {
Set<InterfaceType> result = new HashSet<InterfaceType>.from(first);
result.retainAll(second);
return new List.from(result);
@@ -7127,8 +7059,8 @@
* statement
* @param onSwitchMember `true` if this label is associated with a `switch` member
*/
- LabelElementImpl(Identifier name, this._onSwitchStatement,
- this._onSwitchMember)
+ LabelElementImpl(
+ Identifier name, this._onSwitchStatement, this._onSwitchMember)
: super.forNode(name);
@override
@@ -7381,8 +7313,8 @@
*
* @param definingCompilationUnit the compilation unit that defines this library
*/
- void set
- definingCompilationUnit(CompilationUnitElement definingCompilationUnit) {
+ void set definingCompilationUnit(
+ CompilationUnitElement definingCompilationUnit) {
(definingCompilationUnit as CompilationUnitElementImpl).enclosingElement =
this;
this._definingCompilationUnit = definingCompilationUnit;
@@ -7547,20 +7479,20 @@
try {
Source asyncSource = context.sourceFactory.forUri(DartSdk.DART_ASYNC);
if (asyncSource == null) {
- AnalysisEngine.instance.logger.logError(
- "Could not create a source for dart:async");
+ AnalysisEngine.instance.logger
+ .logError("Could not create a source for dart:async");
return VoidTypeImpl.instance;
}
LibraryElement asyncElement = context.computeLibraryElement(asyncSource);
if (asyncElement == null) {
- AnalysisEngine.instance.logger.logError(
- "Could not build the element model for dart:async");
+ AnalysisEngine.instance.logger
+ .logError("Could not build the element model for dart:async");
return VoidTypeImpl.instance;
}
ClassElement futureElement = asyncElement.getType("Future");
if (futureElement == null) {
- AnalysisEngine.instance.logger.logError(
- "Could not find type Future in dart:async");
+ AnalysisEngine.instance.logger
+ .logError("Could not find type Future in dart:async");
return VoidTypeImpl.instance;
}
InterfaceType futureType = futureElement.type;
@@ -7626,9 +7558,8 @@
}
@override
- bool operator ==(Object object) =>
- object is LibraryElementImpl &&
- _definingCompilationUnit == object.definingCompilationUnit;
+ bool operator ==(Object object) => object is LibraryElementImpl &&
+ _definingCompilationUnit == object.definingCompilationUnit;
@override
accept(ElementVisitor visitor) => visitor.visitLibraryElement(this);
@@ -7702,8 +7633,8 @@
/**
* Recursively fills set of visible libraries for [getVisibleElementsLibraries].
*/
- void _addVisibleLibraries(Set<LibraryElement> visibleLibraries,
- bool includeExports) {
+ void _addVisibleLibraries(
+ Set<LibraryElement> visibleLibraries, bool includeExports) {
// maybe already processed
if (!visibleLibraries.add(this)) {
return;
@@ -7713,8 +7644,7 @@
LibraryElement importedLibrary = importElement.importedLibrary;
if (importedLibrary != null) {
(importedLibrary as LibraryElementImpl)._addVisibleLibraries(
- visibleLibraries,
- true);
+ visibleLibraries, true);
}
}
// add exported libraries
@@ -7723,8 +7653,7 @@
LibraryElement exportedLibrary = exportElement.exportedLibrary;
if (exportedLibrary != null) {
(exportedLibrary as LibraryElementImpl)._addVisibleLibraries(
- visibleLibraries,
- true);
+ visibleLibraries, true);
}
}
}
@@ -7744,7 +7673,8 @@
AnalysisContext context = library.context;
// Check the defining compilation unit.
if (timeStamp <
- context.getModificationStamp(library.definingCompilationUnit.source)) {
+ context
+ .getModificationStamp(library.definingCompilationUnit.source)) {
return false;
}
// Check the parted compilation units.
@@ -7797,20 +7727,18 @@
* The interface `LocalVariableElement` defines the behavior common to elements that represent
* a local variable.
*/
-abstract class LocalVariableElement implements LocalElement, VariableElement {
-}
+abstract class LocalVariableElement implements LocalElement, VariableElement {}
/**
* Instances of the class `LocalVariableElementImpl` implement a `LocalVariableElement`.
*/
-class LocalVariableElementImpl extends VariableElementImpl implements
- LocalVariableElement {
+class LocalVariableElementImpl extends VariableElementImpl
+ implements LocalVariableElement {
/**
* An empty list of field elements.
*/
- static const List<LocalVariableElement> EMPTY_ARRAY = const
- <LocalVariableElement>[
- ];
+ static const List<LocalVariableElement> EMPTY_ARRAY =
+ const <LocalVariableElement>[];
/**
* The offset to the beginning of the visible range for this element.
@@ -8267,8 +8195,8 @@
* substitution
* @return the method element that will return the correctly substituted types
*/
- static MethodElement from(MethodElement baseMethod,
- InterfaceType definingType) {
+ static MethodElement from(
+ MethodElement baseMethod, InterfaceType definingType) {
if (baseMethod == null || definingType.typeArguments.length == 0) {
return baseMethod;
}
@@ -8397,25 +8325,26 @@
static const Modifier TYPEDEF = const Modifier('TYPEDEF', 18);
static const List<Modifier> values = const [
- ABSTRACT,
- ASYNCHRONOUS,
- CONST,
- DEFERRED,
- ENUM,
- FACTORY,
- FINAL,
- GENERATOR,
- GETTER,
- HAS_EXT_URI,
- MIXIN,
- MIXIN_ERRORS_REPORTED,
- POTENTIALLY_MUTATED_IN_CONTEXT,
- POTENTIALLY_MUTATED_IN_SCOPE,
- REFERENCES_SUPER,
- SETTER,
- STATIC,
- SYNTHETIC,
- TYPEDEF];
+ ABSTRACT,
+ ASYNCHRONOUS,
+ CONST,
+ DEFERRED,
+ ENUM,
+ FACTORY,
+ FINAL,
+ GENERATOR,
+ GETTER,
+ HAS_EXT_URI,
+ MIXIN,
+ MIXIN_ERRORS_REPORTED,
+ POTENTIALLY_MUTATED_IN_CONTEXT,
+ POTENTIALLY_MUTATED_IN_SCOPE,
+ REFERENCES_SUPER,
+ SETTER,
+ STATIC,
+ SYNTHETIC,
+ TYPEDEF
+ ];
const Modifier(String name, int ordinal) : super(name, ordinal);
}
@@ -8590,8 +8519,8 @@
* @param firstElement the first element that conflicts
* @param secondElement the second element that conflicts
*/
- static Element fromElements(AnalysisContext context, Element firstElement,
- Element secondElement) {
+ static Element fromElements(
+ AnalysisContext context, Element firstElement, Element secondElement) {
List<Element> conflictingElements =
_computeConflictingElements(firstElement, secondElement);
int length = conflictingElements.length;
@@ -8629,8 +8558,8 @@
* @param secondElement the second element to be included
* @return an array containing all of the conflicting elements
*/
- static List<Element> _computeConflictingElements(Element firstElement,
- Element secondElement) {
+ static List<Element> _computeConflictingElements(
+ Element firstElement, Element secondElement) {
HashSet<Element> elements = new HashSet<Element>();
_add(elements, firstElement);
_add(elements, secondElement);
@@ -8658,8 +8587,8 @@
* [MethodElementImpl], with the additional information of an array of
* [ExecutableElement]s from which this element was composed.
*/
-class MultiplyInheritedMethodElementImpl extends MethodElementImpl implements
- MultiplyInheritedExecutableElement {
+class MultiplyInheritedMethodElementImpl extends MethodElementImpl
+ implements MultiplyInheritedExecutableElement {
/**
* An array the array of executable elements that were used to compose this element.
*/
@@ -8682,8 +8611,9 @@
* an [PropertyAccessorElementImpl], with the additional information of an array of
* [ExecutableElement]s from which this element was composed.
*/
-class MultiplyInheritedPropertyAccessorElementImpl extends
- PropertyAccessorElementImpl implements MultiplyInheritedExecutableElement {
+class MultiplyInheritedPropertyAccessorElementImpl
+ extends PropertyAccessorElementImpl
+ implements MultiplyInheritedExecutableElement {
/**
* An array the array of executable elements that were used to compose this element.
*/
@@ -8710,9 +8640,8 @@
/**
* An empty list of namespace combinators.
*/
- static const List<NamespaceCombinator> EMPTY_ARRAY = const
- <NamespaceCombinator>[
- ];
+ static const List<NamespaceCombinator> EMPTY_ARRAY =
+ const <NamespaceCombinator>[];
}
/**
@@ -8753,8 +8682,8 @@
/**
* Instances of the class `ParameterElementImpl` implement a `ParameterElement`.
*/
-class ParameterElementImpl extends VariableElementImpl implements
- ParameterElement {
+class ParameterElementImpl extends VariableElementImpl
+ implements ParameterElement {
/**
* An empty list of field elements.
*/
@@ -8864,8 +8793,7 @@
} else if (parameterKind == ParameterKind.POSITIONAL) {
left = "[";
right = "]";
- } else if (parameterKind == ParameterKind.REQUIRED) {
- }
+ } else if (parameterKind == ParameterKind.REQUIRED) {}
break;
}
buffer.write(left);
@@ -9041,8 +8969,7 @@
} else if (baseElement.parameterKind == ParameterKind.POSITIONAL) {
left = "[";
right = "]";
- } else if (baseElement.parameterKind == ParameterKind.REQUIRED) {
- }
+ } else if (baseElement.parameterKind == ParameterKind.REQUIRED) {}
break;
}
return '$left$type ${baseElement.displayName}$right';
@@ -9065,8 +8992,8 @@
* substitution
* @return the parameter element that will return the correctly substituted types
*/
- static ParameterElement from(ParameterElement baseParameter,
- ParameterizedType definingType) {
+ static ParameterElement from(
+ ParameterElement baseParameter, ParameterizedType definingType) {
if (baseParameter == null || definingType.typeArguments.length == 0) {
return baseParameter;
}
@@ -9090,8 +9017,7 @@
// We need to see how often the type is being re-computed.
if (isFieldFormal) {
return new FieldFormalParameterMember(
- baseParameter as FieldFormalParameterElement,
- definingType);
+ baseParameter as FieldFormalParameterElement, definingType);
}
return new ParameterMember(baseParameter, definingType);
}
@@ -9250,14 +9176,13 @@
* Instances of the class `PropertyAccessorElementImpl` implement a
* `PropertyAccessorElement`.
*/
-class PropertyAccessorElementImpl extends ExecutableElementImpl implements
- PropertyAccessorElement {
+class PropertyAccessorElementImpl extends ExecutableElementImpl
+ implements PropertyAccessorElement {
/**
* An empty list of property accessor elements.
*/
- static const List<PropertyAccessorElement> EMPTY_ARRAY = const
- <PropertyAccessorElement>[
- ];
+ static const List<PropertyAccessorElement> EMPTY_ARRAY =
+ const <PropertyAccessorElement>[];
/**
* The variable associated with this accessor.
@@ -9389,8 +9314,8 @@
}
@override
- bool operator ==(Object object) =>
- super == object && isGetter == (object as PropertyAccessorElement).isGetter;
+ bool operator ==(Object object) => super == object &&
+ isGetter == (object as PropertyAccessorElement).isGetter;
@override
accept(ElementVisitor visitor) => visitor.visitPropertyAccessorElement(this);
@@ -9407,8 +9332,8 @@
* Instances of the class `PropertyAccessorMember` represent a property accessor element
* defined in a parameterized type where the values of the type parameters are known.
*/
-class PropertyAccessorMember extends ExecutableMember implements
- PropertyAccessorElement {
+class PropertyAccessorMember extends ExecutableMember
+ implements PropertyAccessorElement {
/**
* Initialize a newly created element to represent a property accessor of the given parameterized
* type.
@@ -9416,8 +9341,8 @@
* @param baseElement the element on which the parameterized element was created
* @param definingType the type in which the element is defined
*/
- PropertyAccessorMember(PropertyAccessorElement baseElement,
- InterfaceType definingType)
+ PropertyAccessorMember(
+ PropertyAccessorElement baseElement, InterfaceType definingType)
: super(baseElement, definingType);
@override
@@ -9500,8 +9425,8 @@
* substitution
* @return the property accessor element that will return the correctly substituted types
*/
- static PropertyAccessorElement from(PropertyAccessorElement baseAccessor,
- InterfaceType definingType) {
+ static PropertyAccessorElement from(
+ PropertyAccessorElement baseAccessor, InterfaceType definingType) {
if (!_isChangedByTypeSubstitution(baseAccessor, definingType)) {
return baseAccessor;
}
@@ -9520,8 +9445,8 @@
* substitution
* @return true if the type is changed by type substitution.
*/
- static bool _isChangedByTypeSubstitution(PropertyAccessorElement baseAccessor,
- InterfaceType definingType) {
+ static bool _isChangedByTypeSubstitution(
+ PropertyAccessorElement baseAccessor, InterfaceType definingType) {
List<DartType> argumentTypes = definingType.typeArguments;
if (baseAccessor != null && argumentTypes.length != 0) {
FunctionType baseType = baseAccessor.type;
@@ -9615,9 +9540,8 @@
/**
* An empty list of elements.
*/
- static const List<PropertyInducingElement> EMPTY_ARRAY = const
- <PropertyInducingElement>[
- ];
+ static const List<PropertyInducingElement> EMPTY_ARRAY =
+ const <PropertyInducingElement>[];
/**
* The getter associated with this element.
@@ -9941,21 +9865,19 @@
* The interface `TopLevelVariableElement` defines the behavior of elements representing a
* top-level variable.
*/
-abstract class TopLevelVariableElement implements PropertyInducingElement {
-}
+abstract class TopLevelVariableElement implements PropertyInducingElement {}
/**
* Instances of the class `TopLevelVariableElementImpl` implement a
* `TopLevelVariableElement`.
*/
-class TopLevelVariableElementImpl extends PropertyInducingElementImpl implements
- TopLevelVariableElement {
+class TopLevelVariableElementImpl extends PropertyInducingElementImpl
+ implements TopLevelVariableElement {
/**
* An empty list of top-level variable elements.
*/
- static const List<TopLevelVariableElement> EMPTY_ARRAY = const
- <TopLevelVariableElement>[
- ];
+ static const List<TopLevelVariableElement> EMPTY_ARRAY =
+ const <TopLevelVariableElement>[];
/**
* Initialize a newly created synthetic top-level variable element to have the given name.
@@ -10060,11 +9982,11 @@
int internalHashCode(List<DartType> visitedTypes);
- bool internalIsMoreSpecificThan(DartType type, bool withDynamic,
- Set<TypeImpl_TypePair> visitedTypePairs);
+ bool internalIsMoreSpecificThan(
+ DartType type, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs);
- bool internalIsSubtypeOf(DartType type,
- Set<TypeImpl_TypePair> visitedTypePairs);
+ bool internalIsSubtypeOf(
+ DartType type, Set<TypeImpl_TypePair> visitedTypePairs);
@override
bool isAssignableTo(DartType type) =>
@@ -10203,17 +10125,16 @@
}
for (int i = 0; i < first.length; i++) {
if (first[i] == null) {
- AnalysisEngine.instance.logger.logInformation(
- 'Found null type argument in TypeImpl.equalArrays');
+ AnalysisEngine.instance.logger
+ .logInformation('Found null type argument in TypeImpl.equalArrays');
return second[i] == null;
} else if (second[i] == null) {
- AnalysisEngine.instance.logger.logInformation(
- 'Found null type argument in TypeImpl.equalArrays');
+ AnalysisEngine.instance.logger
+ .logInformation('Found null type argument in TypeImpl.equalArrays');
return false;
}
if (!(first[i] as TypeImpl).internalEquals(
- second[i],
- visitedElementPairs)) {
+ second[i], visitedElementPairs)) {
return false;
}
}
@@ -10309,14 +10230,13 @@
/**
* Instances of the class `TypeParameterElementImpl` implement a [TypeParameterElement].
*/
-class TypeParameterElementImpl extends ElementImpl implements
- TypeParameterElement {
+class TypeParameterElementImpl extends ElementImpl
+ implements TypeParameterElement {
/**
* An empty list of type parameter elements.
*/
- static const List<TypeParameterElement> EMPTY_ARRAY = const
- <TypeParameterElement>[
- ];
+ static const List<TypeParameterElement> EMPTY_ARRAY =
+ const <TypeParameterElement>[];
/**
* The type defined by this type parameter.
@@ -10380,7 +10300,7 @@
* An empty list of type parameter types.
*/
static const List<TypeParameterType> EMPTY_ARRAY = const <TypeParameterType>[
- ];
+ ];
/**
* Initialize a newly created type parameter type to be declared by the given element and to have
@@ -10409,8 +10329,8 @@
int internalHashCode(List<DartType> visitedTypes) => hashCode;
@override
- bool internalIsMoreSpecificThan(DartType s, bool withDynamic,
- Set<TypeImpl_TypePair> visitedTypePairs) {
+ bool internalIsMoreSpecificThan(
+ DartType s, bool withDynamic, Set<TypeImpl_TypePair> visitedTypePairs) {
//
// A type T is more specific than a type S, written T << S,
// if one of the following conditions is met:
@@ -10426,20 +10346,17 @@
return true;
}
return _isMoreSpecificThan(
- s,
- new HashSet<DartType>(),
- withDynamic,
- visitedTypePairs);
+ s, new HashSet<DartType>(), withDynamic, visitedTypePairs);
}
@override
- bool internalIsSubtypeOf(DartType type,
- Set<TypeImpl_TypePair> visitedTypePairs) =>
+ bool internalIsSubtypeOf(
+ DartType type, Set<TypeImpl_TypePair> visitedTypePairs) =>
isMoreSpecificThan2(type, true, new HashSet<TypeImpl_TypePair>());
@override
- DartType substitute2(List<DartType> argumentTypes,
- List<DartType> parameterTypes) {
+ DartType substitute2(
+ List<DartType> argumentTypes, List<DartType> parameterTypes) {
int length = parameterTypes.length;
for (int i = 0; i < length; i++) {
if (parameterTypes[i] == this) {
@@ -10480,16 +10397,11 @@
visitedTypes.add(bound);
// Then check upper bound.
return boundTypeParameter._isMoreSpecificThan(
- s,
- visitedTypes,
- withDynamic,
- visitedTypePairs);
+ s, visitedTypes, withDynamic, visitedTypePairs);
}
// Check interface type.
return (bound as TypeImpl).isMoreSpecificThan2(
- s,
- withDynamic,
- visitedTypePairs);
+ s, withDynamic, visitedTypePairs);
}
/**
@@ -10500,8 +10412,8 @@
* returned
* @return the type parameter types defined by the type parameter elements
*/
- static List<TypeParameterType>
- getTypes(List<TypeParameterElement> typeParameters) {
+ static List<TypeParameterType> getTypes(
+ List<TypeParameterElement> typeParameters) {
int count = typeParameters.length;
if (count == 0) {
return EMPTY_ARRAY;
@@ -10520,8 +10432,7 @@
* this interface always represent an error. As a result, most of the normal operations on elements
* do not make sense and will return useless results.
*/
-abstract class UndefinedElement implements Element {
-}
+abstract class UndefinedElement implements Element {}
/**
* The unique instance of the class `UndefinedTypeImpl` implements the type of
@@ -10580,16 +10491,15 @@
}
@override
- bool internalIsSubtypeOf(DartType type,
- Set<TypeImpl_TypePair> visitedTypePairs) =>
- true;
+ bool internalIsSubtypeOf(
+ DartType type, Set<TypeImpl_TypePair> visitedTypePairs) => true;
@override
bool isSupertypeOf(DartType type) => true;
@override
- DartType substitute2(List<DartType> argumentTypes,
- List<DartType> parameterTypes) {
+ DartType substitute2(
+ List<DartType> argumentTypes, List<DartType> parameterTypes) {
int length = parameterTypes.length;
for (int i = 0; i < length; i++) {
if (parameterTypes[i] == this) {
@@ -10690,9 +10600,7 @@
// The less unsound version: all.
for (DartType t in _types) {
if (!(t as TypeImpl).internalIsMoreSpecificThan(
- type,
- withDynamic,
- visitedTypePairs)) {
+ type, withDynamic, visitedTypePairs)) {
return false;
}
}
@@ -10701,9 +10609,7 @@
// The more unsound version: any.
for (DartType t in _types) {
if ((t as TypeImpl).internalIsMoreSpecificThan(
- type,
- withDynamic,
- visitedTypePairs)) {
+ type, withDynamic, visitedTypePairs)) {
return true;
}
}
@@ -10712,8 +10618,8 @@
}
@override
- bool internalIsSubtypeOf(DartType type,
- Set<TypeImpl_TypePair> visitedTypePairs) {
+ bool internalIsSubtypeOf(
+ DartType type, Set<TypeImpl_TypePair> visitedTypePairs) {
if (AnalysisEngine.instance.strictUnionTypes) {
// The less unsound version: all.
//
@@ -10756,9 +10662,7 @@
}
for (DartType t in _types) {
if ((type as TypeImpl).internalIsMoreSpecificThan(
- t,
- withDynamic,
- visitedTypePairs)) {
+ t, withDynamic, visitedTypePairs)) {
return true;
}
}
@@ -10773,8 +10677,8 @@
* @param visitedTypePairs
* @return true if this union type is a super type of `type`
*/
- bool internalUnionTypeIsSuperTypeOf(DartType type,
- Set<TypeImpl_TypePair> visitedTypePairs) {
+ bool internalUnionTypeIsSuperTypeOf(
+ DartType type, Set<TypeImpl_TypePair> visitedTypePairs) {
// This implementation does not make sense when [type] is a union type,
// at least for the "less unsound" version of [internalIsSubtypeOf] above.
if (type is UnionType) {
@@ -10789,8 +10693,8 @@
}
@override
- DartType substitute2(List<DartType> argumentTypes,
- List<DartType> parameterTypes) {
+ DartType substitute2(
+ List<DartType> argumentTypes, List<DartType> parameterTypes) {
List<DartType> out = new List<DartType>();
for (DartType t in _types) {
out.add(t.substitute2(argumentTypes, parameterTypes));
@@ -10865,8 +10769,8 @@
* Instances of the class `UriReferencedElementImpl` implement an [UriReferencedElement]
* .
*/
-abstract class UriReferencedElementImpl extends ElementImpl implements
- UriReferencedElement {
+abstract class UriReferencedElementImpl extends ElementImpl
+ implements UriReferencedElement {
/**
* The offset of the URI in the file, may be `-1` if synthetic.
*/
@@ -10946,8 +10850,8 @@
/**
* Instances of the class `VariableElementImpl` implement a `VariableElement`.
*/
-abstract class VariableElementImpl extends ElementImpl implements
- VariableElement {
+abstract class VariableElementImpl extends ElementImpl
+ implements VariableElement {
/**
* An empty list of variable elements.
*/
@@ -11131,8 +11035,8 @@
*/
abstract class VoidType implements DartType {
@override
- VoidType substitute2(List<DartType> argumentTypes,
- List<DartType> parameterTypes);
+ VoidType substitute2(
+ List<DartType> argumentTypes, List<DartType> parameterTypes);
}
/**
@@ -11174,16 +11078,14 @@
@override
bool internalIsMoreSpecificThan(DartType type, bool withDynamic,
- Set<TypeImpl_TypePair> visitedTypePairs) =>
- isSubtypeOf(type);
+ Set<TypeImpl_TypePair> visitedTypePairs) => isSubtypeOf(type);
@override
- bool internalIsSubtypeOf(DartType type,
- Set<TypeImpl_TypePair> visitedTypePairs) {
+ bool internalIsSubtypeOf(
+ DartType type, Set<TypeImpl_TypePair> visitedTypePairs) {
if (type is UnionType) {
return (type as UnionTypeImpl).internalUnionTypeIsSuperTypeOf(
- this,
- visitedTypePairs);
+ this, visitedTypePairs);
}
// The only subtype relations that pertain to void are therefore:
// void <: void (by reflexivity)
@@ -11193,7 +11095,6 @@
}
@override
- VoidTypeImpl substitute2(List<DartType> argumentTypes,
- List<DartType> parameterTypes) =>
- this;
+ VoidTypeImpl substitute2(
+ List<DartType> argumentTypes, List<DartType> parameterTypes) => this;
}
diff --git a/pkg/analyzer/lib/src/generated/element_handle.dart b/pkg/analyzer/lib/src/generated/element_handle.dart
index 01abf05..7fd2913 100644
--- a/pkg/analyzer/lib/src/generated/element_handle.dart
+++ b/pkg/analyzer/lib/src/generated/element_handle.dart
@@ -119,33 +119,33 @@
actualElement.isSuperConstructorAccessible(constructor);
@override
- MethodElement lookUpConcreteMethod(String methodName,
- LibraryElement library) =>
+ MethodElement lookUpConcreteMethod(
+ String methodName, LibraryElement library) =>
actualElement.lookUpConcreteMethod(methodName, library);
@override
- PropertyAccessorElement lookUpGetter(String getterName,
- LibraryElement library) =>
+ PropertyAccessorElement lookUpGetter(
+ String getterName, LibraryElement library) =>
actualElement.lookUpGetter(getterName, library);
@override
- PropertyAccessorElement lookUpInheritedConcreteGetter(String methodName,
- LibraryElement library) =>
+ PropertyAccessorElement lookUpInheritedConcreteGetter(
+ String methodName, LibraryElement library) =>
actualElement.lookUpInheritedConcreteGetter(methodName, library);
@override
- MethodElement lookUpInheritedConcreteMethod(String methodName,
- LibraryElement library) =>
+ MethodElement lookUpInheritedConcreteMethod(
+ String methodName, LibraryElement library) =>
actualElement.lookUpInheritedConcreteMethod(methodName, library);
@override
- PropertyAccessorElement lookUpInheritedConcreteSetter(String methodName,
- LibraryElement library) =>
+ PropertyAccessorElement lookUpInheritedConcreteSetter(
+ String methodName, LibraryElement library) =>
actualElement.lookUpInheritedConcreteSetter(methodName, library);
@override
- MethodElement lookUpInheritedMethod(String methodName,
- LibraryElement library) =>
+ MethodElement lookUpInheritedMethod(
+ String methodName, LibraryElement library) =>
actualElement.lookUpInheritedMethod(methodName, library);
@override
@@ -153,8 +153,8 @@
actualElement.lookUpMethod(methodName, library);
@override
- PropertyAccessorElement lookUpSetter(String setterName,
- LibraryElement library) =>
+ PropertyAccessorElement lookUpSetter(
+ String setterName, LibraryElement library) =>
actualElement.lookUpSetter(setterName, library);
}
@@ -162,8 +162,8 @@
* Instances of the class `CompilationUnitElementHandle` implements a handle to a
* [CompilationUnitElement].
*/
-class CompilationUnitElementHandle extends ElementHandle implements
- CompilationUnitElement {
+class CompilationUnitElementHandle extends ElementHandle
+ implements CompilationUnitElement {
/**
* Initialize a newly created element handle to represent the given element.
*
@@ -231,8 +231,8 @@
* Instances of the class `ConstructorElementHandle` implement a handle to a
* `ConstructorElement`.
*/
-class ConstructorElementHandle extends ExecutableElementHandle implements
- ConstructorElement {
+class ConstructorElementHandle extends ExecutableElementHandle
+ implements ConstructorElement {
/**
* Initialize a newly created element handle to represent the given element.
*
@@ -487,8 +487,8 @@
* The abstract class `ExecutableElementHandle` implements the behavior common to objects that
* implement a handle to an [ExecutableElement].
*/
-abstract class ExecutableElementHandle extends ElementHandle implements
- ExecutableElement {
+abstract class ExecutableElementHandle extends ElementHandle
+ implements ExecutableElement {
/**
* Initialize a newly created element handle to represent the given element.
*
@@ -571,8 +571,8 @@
/**
* Instances of the class `FieldElementHandle` implement a handle to a `FieldElement`.
*/
-class FieldElementHandle extends PropertyInducingElementHandle implements
- FieldElement {
+class FieldElementHandle extends PropertyInducingElementHandle
+ implements FieldElement {
/**
* Initialize a newly created element handle to represent the given element.
*
@@ -600,8 +600,8 @@
* Instances of the class `FunctionElementHandle` implement a handle to a
* `FunctionElement`.
*/
-class FunctionElementHandle extends ExecutableElementHandle implements
- FunctionElement {
+class FunctionElementHandle extends ExecutableElementHandle
+ implements FunctionElement {
/**
* Initialize a newly created element handle to represent the given element.
*
@@ -626,8 +626,8 @@
* Instances of the class `FunctionTypeAliasElementHandle` implement a handle to a
* `FunctionTypeAliasElement`.
*/
-class FunctionTypeAliasElementHandle extends ElementHandle implements
- FunctionTypeAliasElement {
+class FunctionTypeAliasElementHandle extends ElementHandle
+ implements FunctionTypeAliasElement {
/**
* Initialize a newly created element handle to represent the given element.
*
@@ -807,8 +807,8 @@
* Instances of the class `LocalVariableElementHandle` implement a handle to a
* `LocalVariableElement`.
*/
-class LocalVariableElementHandle extends VariableElementHandle implements
- LocalVariableElement {
+class LocalVariableElementHandle extends VariableElementHandle
+ implements LocalVariableElement {
/**
* Initialize a newly created element handle to represent the given element.
*
@@ -830,8 +830,8 @@
/**
* Instances of the class `MethodElementHandle` implement a handle to a `MethodElement`.
*/
-class MethodElementHandle extends ExecutableElementHandle implements
- MethodElement {
+class MethodElementHandle extends ExecutableElementHandle
+ implements MethodElement {
/**
* Initialize a newly created element handle to represent the given element.
*
@@ -862,8 +862,8 @@
* Instances of the class `ParameterElementHandle` implement a handle to a
* `ParameterElement`.
*/
-class ParameterElementHandle extends VariableElementHandle implements
- ParameterElement {
+class ParameterElementHandle extends VariableElementHandle
+ implements ParameterElement {
/**
* Initialize a newly created element handle to represent the given element.
*
@@ -922,8 +922,8 @@
* Instances of the class `PropertyAccessorElementHandle` implement a handle to a
* `PropertyAccessorElement`.
*/
-class PropertyAccessorElementHandle extends ExecutableElementHandle implements
- PropertyAccessorElement {
+class PropertyAccessorElementHandle extends ExecutableElementHandle
+ implements PropertyAccessorElement {
/**
* Initialize a newly created element handle to represent the given element.
*
@@ -1019,8 +1019,8 @@
* Instances of the class `TypeParameterElementHandle` implement a handle to a
* [TypeParameterElement].
*/
-class TypeParameterElementHandle extends ElementHandle implements
- TypeParameterElement {
+class TypeParameterElementHandle extends ElementHandle
+ implements TypeParameterElement {
/**
* Initialize a newly created element handle to represent the given element.
*
@@ -1046,8 +1046,8 @@
* The abstract class `VariableElementHandle` implements the behavior common to objects that
* implement a handle to an `VariableElement`.
*/
-abstract class VariableElementHandle extends ElementHandle implements
- VariableElement {
+abstract class VariableElementHandle extends ElementHandle
+ implements VariableElement {
/**
* Initialize a newly created element handle to represent the given element.
*
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 833406f..4084137 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -144,19 +144,20 @@
_lookUpMethod(leftHandSide, propagatedType, methodName);
node.propagatedElement = propagatedMethod;
if (_shouldReportMissingMember(staticType, staticMethod)) {
- _recordUndefinedToken(
- staticType.element,
- StaticTypeWarningCode.UNDEFINED_METHOD,
- operator,
- [methodName, staticType.displayName]);
+ _recordUndefinedToken(staticType.element,
+ StaticTypeWarningCode.UNDEFINED_METHOD, operator, [
+ methodName,
+ staticType.displayName
+ ]);
} else if (_enableHints &&
_shouldReportMissingMember(propagatedType, propagatedMethod) &&
- !_memberFoundInSubclass(propagatedType.element, methodName, true, false)) {
- _recordUndefinedToken(
- propagatedType.element,
- HintCode.UNDEFINED_METHOD,
- operator,
- [methodName, propagatedType.displayName]);
+ !_memberFoundInSubclass(
+ propagatedType.element, methodName, true, false)) {
+ _recordUndefinedToken(propagatedType.element,
+ HintCode.UNDEFINED_METHOD, operator, [
+ methodName,
+ propagatedType.displayName
+ ]);
}
}
}
@@ -253,22 +254,22 @@
if (library == null) {
// TODO(brianwilkerson) We need to understand how the library could
// ever be null.
- AnalysisEngine.instance.logger.logError(
- "Found element with null library: ${element.name}");
+ AnalysisEngine.instance.logger
+ .logError("Found element with null library: ${element.name}");
} else if (library != _definingLibrary) {
// TODO(brianwilkerson) Report this error.
}
name.staticElement = element;
if (node.newKeyword == null) {
if (element is ClassElement) {
- Element memberElement =
- _lookupGetterOrMethod((element as ClassElement).type, name.name);
+ Element memberElement = _lookupGetterOrMethod(
+ (element as ClassElement).type, name.name);
if (memberElement == null) {
memberElement =
(element as ClassElement).getNamedConstructor(name.name);
if (memberElement == null) {
- memberElement =
- _lookUpSetter(prefix, (element as ClassElement).type, name.name);
+ memberElement = _lookUpSetter(
+ prefix, (element as ClassElement).type, name.name);
}
}
if (memberElement == null) {
@@ -474,13 +475,8 @@
node.staticElement = setterStaticMethod;
node.propagatedElement = setterPropagatedMethod;
// generate undefined method warning
- _checkForUndefinedIndexOperator(
- node,
- target,
- getterMethodName,
- setterStaticMethod,
- setterPropagatedMethod,
- staticType,
+ _checkForUndefinedIndexOperator(node, target, getterMethodName,
+ setterStaticMethod, setterPropagatedMethod, staticType,
propagatedType);
// lookup getter method
MethodElement getterStaticMethod =
@@ -492,13 +488,8 @@
new AuxiliaryElements(getterStaticMethod, getterPropagatedMethod);
node.auxiliaryElements = auxiliaryElements;
// generate undefined method warning
- _checkForUndefinedIndexOperator(
- node,
- target,
- getterMethodName,
- getterStaticMethod,
- getterPropagatedMethod,
- staticType,
+ _checkForUndefinedIndexOperator(node, target, getterMethodName,
+ getterStaticMethod, getterPropagatedMethod, staticType,
propagatedType);
} else if (isInGetterContext) {
// lookup getter method
@@ -510,14 +501,8 @@
node.staticElement = staticMethod;
node.propagatedElement = propagatedMethod;
// generate undefined method warning
- _checkForUndefinedIndexOperator(
- node,
- target,
- getterMethodName,
- staticMethod,
- propagatedMethod,
- staticType,
- propagatedType);
+ _checkForUndefinedIndexOperator(node, target, getterMethodName,
+ staticMethod, propagatedMethod, staticType, propagatedType);
} else if (isInSetterContext) {
// lookup setter method
MethodElement staticMethod =
@@ -528,14 +513,8 @@
node.staticElement = staticMethod;
node.propagatedElement = propagatedMethod;
// generate undefined method warning
- _checkForUndefinedIndexOperator(
- node,
- target,
- setterMethodName,
- staticMethod,
- propagatedMethod,
- staticType,
- propagatedType);
+ _checkForUndefinedIndexOperator(node, target, setterMethodName,
+ staticMethod, propagatedMethod, staticType, propagatedType);
}
return null;
}
@@ -545,8 +524,8 @@
ConstructorElement invokedConstructor = node.constructorName.staticElement;
node.staticElement = invokedConstructor;
ArgumentList argumentList = node.argumentList;
- List<ParameterElement> parameters =
- _resolveArgumentsToFunction(node.isConst, argumentList, invokedConstructor);
+ List<ParameterElement> parameters = _resolveArgumentsToFunction(
+ node.isConst, argumentList, invokedConstructor);
if (parameters != null) {
argumentList.correspondingStaticParameters = parameters;
}
@@ -610,8 +589,8 @@
} else {
staticElement =
_resolveInvokedElementWithTarget(target, staticType, methodName);
- propagatedElement =
- _resolveInvokedElementWithTarget(target, propagatedType, methodName);
+ propagatedElement = _resolveInvokedElementWithTarget(
+ target, propagatedType, methodName);
}
}
staticElement = _convertSetterToGetter(staticElement);
@@ -649,9 +628,7 @@
// of the method call the union of the propagated types of all possible
// calls.
if (_lookupMethods(
- target,
- propagatedType as UnionType,
- methodName.name).length >
+ target, propagatedType as UnionType, methodName.name).length >
1) {
return null;
}
@@ -686,30 +663,24 @@
return null;
}
if (identical(
- errorCode,
- StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION)) {
+ errorCode, StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION)) {
_resolver.reportErrorForNode(
- StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION,
- methodName,
- [methodName.name]);
+ StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION, methodName, [
+ methodName.name
+ ]);
} else if (identical(errorCode, StaticTypeWarningCode.UNDEFINED_FUNCTION)) {
- _resolver.reportErrorForNode(
- StaticTypeWarningCode.UNDEFINED_FUNCTION,
- methodName,
- [methodName.name]);
+ _resolver.reportErrorForNode(StaticTypeWarningCode.UNDEFINED_FUNCTION,
+ methodName, [methodName.name]);
} else if (identical(errorCode, StaticTypeWarningCode.UNDEFINED_METHOD)) {
String targetTypeName;
if (target == null) {
ClassElement enclosingClass = _resolver.enclosingClass;
targetTypeName = enclosingClass.displayName;
- ErrorCode proxyErrorCode = (generatedWithTypePropagation ?
- HintCode.UNDEFINED_METHOD :
- StaticTypeWarningCode.UNDEFINED_METHOD);
- _recordUndefinedNode(
- _resolver.enclosingClass,
- proxyErrorCode,
- methodName,
- [methodName.name, targetTypeName]);
+ ErrorCode proxyErrorCode = (generatedWithTypePropagation
+ ? HintCode.UNDEFINED_METHOD
+ : StaticTypeWarningCode.UNDEFINED_METHOD);
+ _recordUndefinedNode(_resolver.enclosingClass, proxyErrorCode,
+ methodName, [methodName.name, targetTypeName]);
} else {
// ignore Function "call"
// (if we are about to create a hint using type propagation,
@@ -733,18 +704,14 @@
return null;
}
targetTypeName = targetType == null ? null : targetType.displayName;
- ErrorCode proxyErrorCode = (generatedWithTypePropagation ?
- HintCode.UNDEFINED_METHOD :
- StaticTypeWarningCode.UNDEFINED_METHOD);
- _recordUndefinedNode(
- targetType.element,
- proxyErrorCode,
- methodName,
- [methodName.name, targetTypeName]);
+ ErrorCode proxyErrorCode = (generatedWithTypePropagation
+ ? HintCode.UNDEFINED_METHOD
+ : StaticTypeWarningCode.UNDEFINED_METHOD);
+ _recordUndefinedNode(targetType.element, proxyErrorCode,
+ methodName, [methodName.name, targetTypeName]);
}
} else if (identical(
- errorCode,
- StaticTypeWarningCode.UNDEFINED_SUPER_METHOD)) {
+ errorCode, StaticTypeWarningCode.UNDEFINED_SUPER_METHOD)) {
// Generate the type name.
// The error code will never be generated via type propagation
DartType targetType = _getStaticType(target);
@@ -752,10 +719,8 @@
targetType = (targetType as InterfaceType).superclass;
}
String targetTypeName = targetType == null ? null : targetType.name;
- _resolver.reportErrorForNode(
- StaticTypeWarningCode.UNDEFINED_SUPER_METHOD,
- methodName,
- [methodName.name, targetTypeName]);
+ _resolver.reportErrorForNode(StaticTypeWarningCode.UNDEFINED_SUPER_METHOD,
+ methodName, [methodName.name, targetTypeName]);
}
return null;
}
@@ -785,26 +750,24 @@
node.propagatedElement = propagatedMethod;
if (_shouldReportMissingMember(staticType, staticMethod)) {
if (operand is SuperExpression) {
- _recordUndefinedToken(
- staticType.element,
- StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR,
- node.operator,
- [methodName, staticType.displayName]);
+ _recordUndefinedToken(staticType.element,
+ StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR, node.operator, [
+ methodName,
+ staticType.displayName
+ ]);
} else {
- _recordUndefinedToken(
- staticType.element,
- StaticTypeWarningCode.UNDEFINED_OPERATOR,
- node.operator,
- [methodName, staticType.displayName]);
+ _recordUndefinedToken(staticType.element,
+ StaticTypeWarningCode.UNDEFINED_OPERATOR, node.operator, [
+ methodName,
+ staticType.displayName
+ ]);
}
} else if (_enableHints &&
_shouldReportMissingMember(propagatedType, propagatedMethod) &&
- !_memberFoundInSubclass(propagatedType.element, methodName, true, false)) {
- _recordUndefinedToken(
- propagatedType.element,
- HintCode.UNDEFINED_OPERATOR,
- node.operator,
- [methodName, propagatedType.displayName]);
+ !_memberFoundInSubclass(
+ propagatedType.element, methodName, true, false)) {
+ _recordUndefinedToken(propagatedType.element, HintCode.UNDEFINED_OPERATOR,
+ node.operator, [methodName, propagatedType.displayName]);
}
return null;
}
@@ -830,26 +793,20 @@
Element element = _resolver.nameScope.lookup(node, _definingLibrary);
if (element == null && identifier.inSetterContext()) {
element = _resolver.nameScope.lookup(
- new SyntheticIdentifier("${node.name}=", node),
- _definingLibrary);
+ new SyntheticIdentifier("${node.name}=", node), _definingLibrary);
}
if (element == null) {
if (identifier.inSetterContext()) {
- _resolver.reportErrorForNode(
- StaticWarningCode.UNDEFINED_SETTER,
- identifier,
- [identifier.name, prefixElement.name]);
+ _resolver.reportErrorForNode(StaticWarningCode.UNDEFINED_SETTER,
+ identifier, [identifier.name, prefixElement.name]);
} else if (node.parent is Annotation) {
Annotation annotation = node.parent as Annotation;
_resolver.reportErrorForNode(
- CompileTimeErrorCode.INVALID_ANNOTATION,
- annotation);
+ CompileTimeErrorCode.INVALID_ANNOTATION, annotation);
return null;
} else {
- _resolver.reportErrorForNode(
- StaticWarningCode.UNDEFINED_GETTER,
- identifier,
- [identifier.name, prefixElement.name]);
+ _resolver.reportErrorForNode(StaticWarningCode.UNDEFINED_GETTER,
+ identifier, [identifier.name, prefixElement.name]);
}
return null;
}
@@ -906,26 +863,27 @@
node.propagatedElement = propagatedMethod;
if (_shouldReportMissingMember(staticType, staticMethod)) {
if (operand is SuperExpression) {
- _recordUndefinedToken(
- staticType.element,
- StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR,
- operator,
- [methodName, staticType.displayName]);
+ _recordUndefinedToken(staticType.element,
+ StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR, operator, [
+ methodName,
+ staticType.displayName
+ ]);
} else {
- _recordUndefinedToken(
- staticType.element,
- StaticTypeWarningCode.UNDEFINED_OPERATOR,
- operator,
- [methodName, staticType.displayName]);
+ _recordUndefinedToken(staticType.element,
+ StaticTypeWarningCode.UNDEFINED_OPERATOR, operator, [
+ methodName,
+ staticType.displayName
+ ]);
}
} else if (_enableHints &&
_shouldReportMissingMember(propagatedType, propagatedMethod) &&
- !_memberFoundInSubclass(propagatedType.element, methodName, true, false)) {
- _recordUndefinedToken(
- propagatedType.element,
- HintCode.UNDEFINED_OPERATOR,
- operator,
- [methodName, propagatedType.displayName]);
+ !_memberFoundInSubclass(
+ propagatedType.element, methodName, true, false)) {
+ _recordUndefinedToken(propagatedType.element,
+ HintCode.UNDEFINED_OPERATOR, operator, [
+ methodName,
+ propagatedType.displayName
+ ]);
}
}
return null;
@@ -943,8 +901,8 @@
}
@override
- Object
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ Object visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
ClassElement enclosingClass = _resolver.enclosingClass;
if (enclosingClass == null) {
// TODO(brianwilkerson) Report this error.
@@ -1013,32 +971,25 @@
if (_isFactoryConstructorReturnType(node) &&
!identical(element, enclosingClass)) {
_resolver.reportErrorForNode(
- CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS,
- node);
+ CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS, node);
} else if (_isConstructorReturnType(node) &&
!identical(element, enclosingClass)) {
_resolver.reportErrorForNode(
- CompileTimeErrorCode.INVALID_CONSTRUCTOR_NAME,
- node);
+ CompileTimeErrorCode.INVALID_CONSTRUCTOR_NAME, node);
element = null;
} else if (element == null ||
(element is PrefixElement && !_isValidAsPrefix(node))) {
// TODO(brianwilkerson) Recover from this error.
if (_isConstructorReturnType(node)) {
_resolver.reportErrorForNode(
- CompileTimeErrorCode.INVALID_CONSTRUCTOR_NAME,
- node);
+ CompileTimeErrorCode.INVALID_CONSTRUCTOR_NAME, node);
} else if (node.parent is Annotation) {
Annotation annotation = node.parent as Annotation;
_resolver.reportErrorForNode(
- CompileTimeErrorCode.INVALID_ANNOTATION,
- annotation);
+ CompileTimeErrorCode.INVALID_ANNOTATION, annotation);
} else {
- _recordUndefinedNode(
- _resolver.enclosingClass,
- StaticWarningCode.UNDEFINED_IDENTIFIER,
- node,
- [node.name]);
+ _recordUndefinedNode(_resolver.enclosingClass,
+ StaticWarningCode.UNDEFINED_IDENTIFIER, node, [node.name]);
}
}
node.staticElement = element;
@@ -1046,8 +997,8 @@
node.inGetterContext() &&
enclosingClass != null) {
InterfaceType enclosingType = enclosingClass.type;
- AuxiliaryElements auxiliaryElements =
- new AuxiliaryElements(_lookUpGetter(null, enclosingType, node.name), null);
+ AuxiliaryElements auxiliaryElements = new AuxiliaryElements(
+ _lookUpGetter(null, enclosingType, node.name), null);
node.auxiliaryElements = auxiliaryElements;
}
//
@@ -1081,22 +1032,20 @@
!enclosingClass.isSuperConstructorAccessible(element))) {
if (name != null) {
_resolver.reportErrorForNode(
- CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER,
- node,
- [superType.displayName, name]);
+ CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER, node, [
+ superType.displayName,
+ name
+ ]);
} else {
_resolver.reportErrorForNode(
CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT,
- node,
- [superType.displayName]);
+ node, [superType.displayName]);
}
return null;
} else {
if (element.isFactory) {
_resolver.reportErrorForNode(
- CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR,
- node,
- [element]);
+ CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR, node, [element]);
}
}
if (name != null) {
@@ -1104,8 +1053,8 @@
}
node.staticElement = element;
ArgumentList argumentList = node.argumentList;
- List<ParameterElement> parameters =
- _resolveArgumentsToFunction(isInConstConstructor, argumentList, element);
+ List<ParameterElement> parameters = _resolveArgumentsToFunction(
+ isInConstConstructor, argumentList, element);
if (parameters != null) {
argumentList.correspondingStaticParameters = parameters;
}
@@ -1116,8 +1065,7 @@
Object visitSuperExpression(SuperExpression node) {
if (!_isSuperInValidContext(node)) {
_resolver.reportErrorForNode(
- CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT,
- node);
+ CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT, node);
}
return super.visitSuperExpression(node);
}
@@ -1165,8 +1113,8 @@
* @param element the element to be invoked
* @return the error code that should be reported
*/
- ErrorCode _checkForInvocationError(Expression target, bool useStaticContext,
- Element element) {
+ ErrorCode _checkForInvocationError(
+ Expression target, bool useStaticContext, Element element) {
// Prefix is not declared, instead "prefix.id" are declared.
if (element is PrefixElement) {
element = null;
@@ -1258,15 +1206,17 @@
* @return `true` if and only if an error code is generated on the passed node
*/
bool _checkForUndefinedIndexOperator(IndexExpression node, Expression target,
- String methodName, MethodElement staticMethod, MethodElement propagatedMethod,
- DartType staticType, DartType propagatedType) {
+ String methodName, MethodElement staticMethod,
+ MethodElement propagatedMethod, DartType staticType,
+ DartType propagatedType) {
bool shouldReportMissingMember_static =
_shouldReportMissingMember(staticType, staticMethod);
bool shouldReportMissingMember_propagated =
!shouldReportMissingMember_static &&
- _enableHints &&
- _shouldReportMissingMember(propagatedType, propagatedMethod) &&
- !_memberFoundInSubclass(propagatedType.element, methodName, true, false);
+ _enableHints &&
+ _shouldReportMissingMember(propagatedType, propagatedMethod) &&
+ !_memberFoundInSubclass(
+ propagatedType.element, methodName, true, false);
if (shouldReportMissingMember_static ||
shouldReportMissingMember_propagated) {
sc.Token leftBracket = node.leftBracket;
@@ -1285,19 +1235,12 @@
shouldReportMissingMember_static ? staticType : propagatedType;
if (leftBracket == null || rightBracket == null) {
_recordUndefinedNode(
- type.element,
- errorCode,
- node,
- [methodName, type.displayName]);
+ type.element, errorCode, node, [methodName, type.displayName]);
} else {
int offset = leftBracket.offset;
int length = rightBracket.offset - offset + 1;
- _recordUndefinedOffset(
- type.element,
- errorCode,
- offset,
- length,
- [methodName, type.displayName]);
+ _recordUndefinedOffset(type.element, errorCode,
+ offset, length, [methodName, type.displayName]);
}
return true;
}
@@ -1313,8 +1256,8 @@
* @param executableElement the element that will be invoked with the arguments
* @return the parameters that correspond to the arguments
*/
- List<ParameterElement>
- _computeCorrespondingParameters(ArgumentList argumentList, Element element) {
+ List<ParameterElement> _computeCorrespondingParameters(
+ ArgumentList argumentList, Element element) {
if (element is PropertyAccessorElement) {
//
// This is an invocation of the call method defined on the value returned
@@ -1325,8 +1268,7 @@
DartType getterReturnType = getterType.returnType;
if (getterReturnType is InterfaceType) {
MethodElement callMethod = getterReturnType.lookUpMethod(
- FunctionElement.CALL_METHOD_NAME,
- _definingLibrary);
+ FunctionElement.CALL_METHOD_NAME, _definingLibrary);
if (callMethod != null) {
return _resolveArgumentsToFunction(false, argumentList, callMethod);
}
@@ -1346,8 +1288,8 @@
return _resolveArgumentsToParameters(false, argumentList, parameters);
} else if (type is InterfaceType) {
// "call" invocation
- MethodElement callMethod =
- type.lookUpMethod(FunctionElement.CALL_METHOD_NAME, _definingLibrary);
+ MethodElement callMethod = type.lookUpMethod(
+ FunctionElement.CALL_METHOD_NAME, _definingLibrary);
if (callMethod != null) {
List<ParameterElement> parameters = callMethod.parameters;
return _resolveArgumentsToParameters(false, argumentList, parameters);
@@ -1398,8 +1340,7 @@
PrefixElement prefixElement = importElement.prefix;
if (prefixElement != null) {
Identifier prefixedIdentifier = new SyntheticIdentifier(
- "${prefixElement.name}.${identifier.name}",
- identifier);
+ "${prefixElement.name}.${identifier.name}", identifier);
Element importedElement =
nameScope.lookup(prefixedIdentifier, _definingLibrary);
if (importedElement != null) {
@@ -1407,9 +1348,7 @@
element = importedElement;
} else {
element = MultiplyDefinedElementImpl.fromElements(
- _definingLibrary.context,
- element,
- importedElement);
+ _definingLibrary.context, element, importedElement);
}
}
}
@@ -1439,9 +1378,9 @@
* @return the name of the method invoked by the expression
*/
String _getPostfixOperator(PostfixExpression node) =>
- (node.operator.type == sc.TokenType.PLUS_PLUS) ?
- sc.TokenType.PLUS.lexeme :
- sc.TokenType.MINUS.lexeme;
+ (node.operator.type == sc.TokenType.PLUS_PLUS)
+ ? sc.TokenType.PLUS.lexeme
+ : sc.TokenType.MINUS.lexeme;
/**
* Return the name of the method invoked by the given postfix expression.
@@ -1548,8 +1487,8 @@
type.isSubtypeOf(_resolver.typeProvider.functionType)) {
return true;
}
- MethodElement methodElement =
- classElement.lookUpMethod(FunctionElement.CALL_METHOD_NAME, _definingLibrary);
+ MethodElement methodElement = classElement.lookUpMethod(
+ FunctionElement.CALL_METHOD_NAME, _definingLibrary);
return methodElement != null;
}
return false;
@@ -1597,8 +1536,8 @@
* statement (if any), and [isContinue] is true if the node being visited is
* a continue statement.
*/
- AstNode _lookupBreakOrContinueTarget(AstNode parentNode,
- SimpleIdentifier labelNode, bool isContinue) {
+ AstNode _lookupBreakOrContinueTarget(
+ AstNode parentNode, SimpleIdentifier labelNode, bool isContinue) {
if (labelNode == null) {
return _resolver.implicitLabelScope.getTarget(isContinue);
} else {
@@ -1607,9 +1546,7 @@
// There are no labels in scope, so by definition the label is
// undefined.
_resolver.reportErrorForNode(
- CompileTimeErrorCode.LABEL_UNDEFINED,
- labelNode,
- [labelNode.name]);
+ CompileTimeErrorCode.LABEL_UNDEFINED, labelNode, [labelNode.name]);
return null;
}
LabelScope definingScope = labelScope.lookup(labelNode.name);
@@ -1617,20 +1554,16 @@
// No definition of the given label name could be found in any
// enclosing scope.
_resolver.reportErrorForNode(
- CompileTimeErrorCode.LABEL_UNDEFINED,
- labelNode,
- [labelNode.name]);
+ CompileTimeErrorCode.LABEL_UNDEFINED, labelNode, [labelNode.name]);
return null;
}
// The target has been found.
labelNode.staticElement = definingScope.element;
- ExecutableElement labelContainer =
- definingScope.element.getAncestor((element) => element is ExecutableElement);
+ ExecutableElement labelContainer = definingScope.element
+ .getAncestor((element) => element is ExecutableElement);
if (!identical(labelContainer, _resolver.enclosingFunction)) {
- _resolver.reportErrorForNode(
- CompileTimeErrorCode.LABEL_IN_OUTER_SCOPE,
- labelNode,
- [labelNode.name]);
+ _resolver.reportErrorForNode(CompileTimeErrorCode.LABEL_IN_OUTER_SCOPE,
+ labelNode, [labelNode.name]);
}
return definingScope.node;
}
@@ -1645,15 +1578,15 @@
* @param getterName the name of the getter being looked up
* @return the element representing the getter that was found
*/
- PropertyAccessorElement _lookUpGetter(Expression target, DartType type,
- String getterName) {
+ PropertyAccessorElement _lookUpGetter(
+ Expression target, DartType type, String getterName) {
type = _resolveTypeParameter(type);
if (type is InterfaceType) {
InterfaceType interfaceType = type;
PropertyAccessorElement accessor;
if (target is SuperExpression) {
- accessor =
- interfaceType.lookUpGetterInSuperclass(getterName, _definingLibrary);
+ accessor = interfaceType.lookUpGetterInSuperclass(
+ getterName, _definingLibrary);
} else {
accessor = interfaceType.lookUpGetter(getterName, _definingLibrary);
}
@@ -1661,10 +1594,7 @@
return accessor;
}
return _lookUpGetterInInterfaces(
- interfaceType,
- false,
- getterName,
- new HashSet<ClassElement>());
+ interfaceType, false, getterName, new HashSet<ClassElement>());
}
return null;
}
@@ -1700,15 +1630,15 @@
}
}
for (InterfaceType interfaceType in targetType.interfaces) {
- PropertyAccessorElement getter =
- _lookUpGetterInInterfaces(interfaceType, true, getterName, visitedInterfaces);
+ PropertyAccessorElement getter = _lookUpGetterInInterfaces(
+ interfaceType, true, getterName, visitedInterfaces);
if (getter != null) {
return getter;
}
}
for (InterfaceType mixinType in targetType.mixins.reversed) {
- PropertyAccessorElement getter =
- _lookUpGetterInInterfaces(mixinType, true, getterName, visitedInterfaces);
+ PropertyAccessorElement getter = _lookUpGetterInInterfaces(
+ mixinType, true, getterName, visitedInterfaces);
if (getter != null) {
return getter;
}
@@ -1718,10 +1648,7 @@
return null;
}
return _lookUpGetterInInterfaces(
- superclass,
- true,
- getterName,
- visitedInterfaces);
+ superclass, true, getterName, visitedInterfaces);
}
/**
@@ -1747,10 +1674,7 @@
return member;
}
return _lookUpGetterOrMethodInInterfaces(
- interfaceType,
- false,
- memberName,
- new HashSet<ClassElement>());
+ interfaceType, false, memberName, new HashSet<ClassElement>());
}
return null;
}
@@ -1791,20 +1715,14 @@
}
for (InterfaceType interfaceType in targetType.interfaces) {
ExecutableElement member = _lookUpGetterOrMethodInInterfaces(
- interfaceType,
- true,
- memberName,
- visitedInterfaces);
+ interfaceType, true, memberName, visitedInterfaces);
if (member != null) {
return member;
}
}
for (InterfaceType mixinType in targetType.mixins.reversed) {
ExecutableElement member = _lookUpGetterOrMethodInInterfaces(
- mixinType,
- true,
- memberName,
- visitedInterfaces);
+ mixinType, true, memberName, visitedInterfaces);
if (member != null) {
return member;
}
@@ -1814,10 +1732,7 @@
return null;
}
return _lookUpGetterOrMethodInInterfaces(
- superclass,
- true,
- memberName,
- visitedInterfaces);
+ superclass, true, memberName, visitedInterfaces);
}
/**
@@ -1829,15 +1744,15 @@
* @param methodName the name of the method being looked up
* @return the element representing the method that was found
*/
- MethodElement _lookUpMethod(Expression target, DartType type,
- String methodName) {
+ MethodElement _lookUpMethod(
+ Expression target, DartType type, String methodName) {
type = _resolveTypeParameter(type);
if (type is InterfaceType) {
InterfaceType interfaceType = type;
MethodElement method;
if (target is SuperExpression) {
- method =
- interfaceType.lookUpMethodInSuperclass(methodName, _definingLibrary);
+ method = interfaceType.lookUpMethodInSuperclass(
+ methodName, _definingLibrary);
} else {
method = interfaceType.lookUpMethod(methodName, _definingLibrary);
}
@@ -1845,10 +1760,7 @@
return method;
}
return _lookUpMethodInInterfaces(
- interfaceType,
- false,
- methodName,
- new HashSet<ClassElement>());
+ interfaceType, false, methodName, new HashSet<ClassElement>());
} else if (type is UnionType) {
// TODO (collinsn): I want [computeMergedExecutableElement] to be general
// and work with functions, methods, constructors, and property accessors.
@@ -1891,15 +1803,15 @@
}
}
for (InterfaceType interfaceType in targetType.interfaces) {
- MethodElement method =
- _lookUpMethodInInterfaces(interfaceType, true, methodName, visitedInterfaces);
+ MethodElement method = _lookUpMethodInInterfaces(
+ interfaceType, true, methodName, visitedInterfaces);
if (method != null) {
return method;
}
}
for (InterfaceType mixinType in targetType.mixins.reversed) {
- MethodElement method =
- _lookUpMethodInInterfaces(mixinType, true, methodName, visitedInterfaces);
+ MethodElement method = _lookUpMethodInInterfaces(
+ mixinType, true, methodName, visitedInterfaces);
if (method != null) {
return method;
}
@@ -1909,10 +1821,7 @@
return null;
}
return _lookUpMethodInInterfaces(
- superclass,
- true,
- methodName,
- visitedInterfaces);
+ superclass, true, methodName, visitedInterfaces);
}
/**
@@ -1923,8 +1832,8 @@
* @param methodName
* @return all methods named `methodName` defined on the union type `type`.
*/
- Set<ExecutableElement> _lookupMethods(Expression target, UnionType type,
- String methodName) {
+ Set<ExecutableElement> _lookupMethods(
+ Expression target, UnionType type, String methodName) {
Set<ExecutableElement> methods = new HashSet<ExecutableElement>();
bool allElementsHaveMethod = true;
for (DartType t in type.elements) {
@@ -1957,15 +1866,15 @@
* @param setterName the name of the setter being looked up
* @return the element representing the setter that was found
*/
- PropertyAccessorElement _lookUpSetter(Expression target, DartType type,
- String setterName) {
+ PropertyAccessorElement _lookUpSetter(
+ Expression target, DartType type, String setterName) {
type = _resolveTypeParameter(type);
if (type is InterfaceType) {
InterfaceType interfaceType = type;
PropertyAccessorElement accessor;
if (target is SuperExpression) {
- accessor =
- interfaceType.lookUpSetterInSuperclass(setterName, _definingLibrary);
+ accessor = interfaceType.lookUpSetterInSuperclass(
+ setterName, _definingLibrary);
} else {
accessor = interfaceType.lookUpSetter(setterName, _definingLibrary);
}
@@ -1973,10 +1882,7 @@
return accessor;
}
return _lookUpSetterInInterfaces(
- interfaceType,
- false,
- setterName,
- new HashSet<ClassElement>());
+ interfaceType, false, setterName, new HashSet<ClassElement>());
}
return null;
}
@@ -2012,15 +1918,15 @@
}
}
for (InterfaceType interfaceType in targetType.interfaces) {
- PropertyAccessorElement setter =
- _lookUpSetterInInterfaces(interfaceType, true, setterName, visitedInterfaces);
+ PropertyAccessorElement setter = _lookUpSetterInInterfaces(
+ interfaceType, true, setterName, visitedInterfaces);
if (setter != null) {
return setter;
}
}
for (InterfaceType mixinType in targetType.mixins.reversed) {
- PropertyAccessorElement setter =
- _lookUpSetterInInterfaces(mixinType, true, setterName, visitedInterfaces);
+ PropertyAccessorElement setter = _lookUpSetterInInterfaces(
+ mixinType, true, setterName, visitedInterfaces);
if (setter != null) {
return setter;
}
@@ -2030,10 +1936,7 @@
return null;
}
return _lookUpSetterInInterfaces(
- superclass,
- true,
- setterName,
- visitedInterfaces);
+ superclass, true, setterName, visitedInterfaces);
}
/**
@@ -2049,8 +1952,8 @@
* the subtypes
* @return `true` if and only if the passed memberName was found in a subtype
*/
- bool _memberFoundInSubclass(Element element, String memberName, bool asMethod,
- bool asAccessor) {
+ bool _memberFoundInSubclass(
+ Element element, String memberName, bool asMethod, bool asAccessor) {
if (element is ClassElement) {
_subtypeManager.ensureLibraryVisited(_definingLibrary);
HashSet<ClassElement> subtypeElements =
@@ -2158,8 +2061,8 @@
}
}
- void _resolveAnnotationConstructorInvocationArguments(Annotation annotation,
- ConstructorElement constructor) {
+ void _resolveAnnotationConstructorInvocationArguments(
+ Annotation annotation, ConstructorElement constructor) {
ArgumentList argumentList = annotation.arguments;
// error will be reported in ConstantVerifier
if (argumentList == null) {
@@ -2207,8 +2110,8 @@
// Class(args)
if (element1 is ClassElement) {
ClassElement classElement = element1;
- constructor = new InterfaceTypeImpl.con1(
- classElement).lookUpConstructor(null, _definingLibrary);
+ constructor = new InterfaceTypeImpl.con1(classElement)
+ .lookUpConstructor(null, _definingLibrary);
}
}
//
@@ -2227,8 +2130,7 @@
nameNode2.staticElement = element2;
annotation.element = element2;
_resolveAnnotationElementGetter(
- annotation,
- element2 as PropertyAccessorElement);
+ annotation, element2 as PropertyAccessorElement);
return;
}
// prefix.Class()
@@ -2239,8 +2141,8 @@
// Class.constructor(args)
if (element1 is ClassElement) {
ClassElement classElement = element1;
- constructor = new InterfaceTypeImpl.con1(
- classElement).lookUpConstructor(nameNode2.name, _definingLibrary);
+ constructor = new InterfaceTypeImpl.con1(classElement)
+ .lookUpConstructor(nameNode2.name, _definingLibrary);
nameNode2.staticElement = constructor;
}
}
@@ -2263,16 +2165,15 @@
return;
}
// prefix.Class.constructor(args)
- constructor = new InterfaceTypeImpl.con1(
- classElement).lookUpConstructor(name3, _definingLibrary);
+ constructor = new InterfaceTypeImpl.con1(classElement)
+ .lookUpConstructor(name3, _definingLibrary);
nameNode3.staticElement = constructor;
}
}
// we need constructor
if (constructor == null) {
_resolver.reportErrorForNode(
- CompileTimeErrorCode.INVALID_ANNOTATION,
- annotation);
+ CompileTimeErrorCode.INVALID_ANNOTATION, annotation);
return;
}
// record element
@@ -2281,21 +2182,19 @@
_resolveAnnotationConstructorInvocationArguments(annotation, constructor);
}
- void _resolveAnnotationElementGetter(Annotation annotation,
- PropertyAccessorElement accessorElement) {
+ void _resolveAnnotationElementGetter(
+ Annotation annotation, PropertyAccessorElement accessorElement) {
// accessor should be synthetic
if (!accessorElement.isSynthetic) {
_resolver.reportErrorForNode(
- CompileTimeErrorCode.INVALID_ANNOTATION,
- annotation);
+ CompileTimeErrorCode.INVALID_ANNOTATION, annotation);
return;
}
// variable should be constant
VariableElement variableElement = accessorElement.variable;
if (!variableElement.isConst) {
_resolver.reportErrorForNode(
- CompileTimeErrorCode.INVALID_ANNOTATION,
- annotation);
+ CompileTimeErrorCode.INVALID_ANNOTATION, annotation);
}
// OK
return;
@@ -2367,9 +2266,9 @@
String name = nameNode.name;
ParameterElement element = namedParameters[name];
if (element == null) {
- ErrorCode errorCode = (reportError ?
- CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER :
- StaticWarningCode.UNDEFINED_NAMED_PARAMETER);
+ ErrorCode errorCode = (reportError
+ ? CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER
+ : StaticWarningCode.UNDEFINED_NAMED_PARAMETER);
_resolver.reportErrorForNode(errorCode, nameNode, [name]);
} else {
resolvedParameters[i] = element;
@@ -2377,9 +2276,7 @@
}
if (!usedNames.add(name)) {
_resolver.reportErrorForNode(
- CompileTimeErrorCode.DUPLICATE_NAMED_ARGUMENT,
- nameNode,
- [name]);
+ CompileTimeErrorCode.DUPLICATE_NAMED_ARGUMENT, nameNode, [name]);
}
} else {
if (argument is SimpleIdentifier && argument.name.isEmpty) {
@@ -2393,21 +2290,17 @@
}
if (positionalArgumentCount < requiredParameters.length &&
noBlankArguments) {
- ErrorCode errorCode = (reportError ?
- CompileTimeErrorCode.NOT_ENOUGH_REQUIRED_ARGUMENTS :
- StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS);
- _resolver.reportErrorForNode(
- errorCode,
- argumentList,
+ ErrorCode errorCode = (reportError
+ ? CompileTimeErrorCode.NOT_ENOUGH_REQUIRED_ARGUMENTS
+ : StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS);
+ _resolver.reportErrorForNode(errorCode, argumentList,
[requiredParameters.length, positionalArgumentCount]);
} else if (positionalArgumentCount > unnamedParameterCount &&
noBlankArguments) {
- ErrorCode errorCode = (reportError ?
- CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS :
- StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS);
- _resolver.reportErrorForNode(
- errorCode,
- argumentList,
+ ErrorCode errorCode = (reportError
+ ? CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS
+ : StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS);
+ _resolver.reportErrorForNode(errorCode, argumentList,
[unnamedParameterCount, positionalArgumentCount]);
}
return resolvedParameters;
@@ -2426,26 +2319,27 @@
node.propagatedElement = propagatedMethod;
if (_shouldReportMissingMember(staticType, staticMethod)) {
if (leftOperand is SuperExpression) {
- _recordUndefinedToken(
- staticType.element,
- StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR,
- node.operator,
- [methodName, staticType.displayName]);
+ _recordUndefinedToken(staticType.element,
+ StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR, node.operator, [
+ methodName,
+ staticType.displayName
+ ]);
} else {
- _recordUndefinedToken(
- staticType.element,
- StaticTypeWarningCode.UNDEFINED_OPERATOR,
- node.operator,
- [methodName, staticType.displayName]);
+ _recordUndefinedToken(staticType.element,
+ StaticTypeWarningCode.UNDEFINED_OPERATOR, node.operator, [
+ methodName,
+ staticType.displayName
+ ]);
}
} else if (_enableHints &&
_shouldReportMissingMember(propagatedType, propagatedMethod) &&
- !_memberFoundInSubclass(propagatedType.element, methodName, true, false)) {
- _recordUndefinedToken(
- propagatedType.element,
- HintCode.UNDEFINED_OPERATOR,
- node.operator,
- [methodName, propagatedType.displayName]);
+ !_memberFoundInSubclass(
+ propagatedType.element, methodName, true, false)) {
+ _recordUndefinedToken(propagatedType.element,
+ HintCode.UNDEFINED_OPERATOR, node.operator, [
+ methodName,
+ propagatedType.displayName
+ ]);
}
}
}
@@ -2456,8 +2350,8 @@
* @param library the library that defines the names
* @param combinators the combinators containing the names to be resolved
*/
- void _resolveCombinators(LibraryElement library,
- NodeList<Combinator> combinators) {
+ void _resolveCombinators(
+ LibraryElement library, NodeList<Combinator> combinators) {
if (library == null) {
//
// The library will be null if the directive containing the combinators
@@ -2496,8 +2390,8 @@
* Given that we are accessing a property of the given [classElement] with
* the given [propertyName], return the element that represents the property.
*/
- Element _resolveElement(ClassElementImpl classElement,
- SimpleIdentifier propertyName) {
+ Element _resolveElement(
+ ClassElementImpl classElement, SimpleIdentifier propertyName) {
String name = propertyName.name;
Element element = null;
if (propertyName.inSetterContext()) {
@@ -2562,8 +2456,8 @@
* @param methodName the name of the method being invoked ('m')
* @return the element being invoked
*/
- Element _resolveInvokedElementWithTarget(Expression target,
- DartType targetType, SimpleIdentifier methodName) {
+ Element _resolveInvokedElementWithTarget(
+ Expression target, DartType targetType, SimpleIdentifier methodName) {
if (targetType is InterfaceType || targetType is UnionType) {
Element element = _lookUpMethod(target, targetType, methodName.name);
if (element == null) {
@@ -2609,8 +2503,8 @@
* @param propertyName the name of the property being accessed
* @return the element that represents the property
*/
- ExecutableElement _resolveProperty(Expression target, DartType targetType,
- SimpleIdentifier propertyName) {
+ ExecutableElement _resolveProperty(
+ Expression target, DartType targetType, SimpleIdentifier propertyName) {
ExecutableElement memberElement = null;
if (propertyName.inSetterContext()) {
memberElement = _lookUpSetter(target, targetType, propertyName.name);
@@ -2624,8 +2518,8 @@
return memberElement;
}
- void _resolvePropertyAccess(Expression target,
- SimpleIdentifier propertyName) {
+ void _resolvePropertyAccess(
+ Expression target, SimpleIdentifier propertyName) {
DartType staticType = _getStaticType(target);
DartType propagatedType = _getPropagatedType(target);
Element staticElement = null;
@@ -2660,9 +2554,10 @@
_shouldReportMissingMember(staticType, staticElement);
bool shouldReportMissingMember_propagated =
!shouldReportMissingMember_static &&
- _enableHints &&
- _shouldReportMissingMember(propagatedType, propagatedElement) &&
- !_memberFoundInSubclass(propagatedType.element, propertyName.name, false, true);
+ _enableHints &&
+ _shouldReportMissingMember(propagatedType, propagatedElement) &&
+ !_memberFoundInSubclass(
+ propagatedType.element, propertyName.name, false, true);
// TODO(collinsn): add support for errors on union types by extending
// [lookupGetter] and [lookupSetter] in analogy with the earlier
// [lookupMethod] extensions.
@@ -2675,9 +2570,9 @@
shouldReportMissingMember_static ? staticType : propagatedType;
Element staticOrPropagatedEnclosingElt = staticOrPropagatedType.element;
bool isStaticProperty = _isStatic(staticOrPropagatedEnclosingElt);
- DartType displayType = staticOrPropagatedType != null ?
- staticOrPropagatedType :
- propagatedType != null ? propagatedType : staticType;
+ DartType displayType = staticOrPropagatedType != null
+ ? staticOrPropagatedType
+ : propagatedType != null ? propagatedType : staticType;
// Special getter cases.
if (propertyName.inGetterContext()) {
if (!isStaticProperty &&
@@ -2693,9 +2588,9 @@
return;
} else if (classElement.isEnum && propertyName.name == "_name") {
_resolver.reportErrorForNode(
- CompileTimeErrorCode.ACCESS_PRIVATE_ENUM_FIELD,
- propertyName,
- [propertyName.name]);
+ CompileTimeErrorCode.ACCESS_PRIVATE_ENUM_FIELD, propertyName, [
+ propertyName.name
+ ]);
return;
}
}
@@ -2721,11 +2616,10 @@
} else {
errorCode = HintCode.UNDEFINED_SETTER;
}
- _recordUndefinedNode(
- declaringElement,
- errorCode,
- propertyName,
- [propertyName.name, displayType.displayName]);
+ _recordUndefinedNode(declaringElement, errorCode, propertyName, [
+ propertyName.name,
+ displayType.displayName
+ ]);
} else if (propertyName.inGetterContext()) {
ErrorCode errorCode;
if (shouldReportMissingMember_static) {
@@ -2745,17 +2639,15 @@
} else {
errorCode = HintCode.UNDEFINED_GETTER;
}
- _recordUndefinedNode(
- declaringElement,
- errorCode,
- propertyName,
- [propertyName.name, displayType.displayName]);
+ _recordUndefinedNode(declaringElement, errorCode, propertyName, [
+ propertyName.name,
+ displayType.displayName
+ ]);
} else {
- _recordUndefinedNode(
- declaringElement,
- StaticWarningCode.UNDEFINED_IDENTIFIER,
- propertyName,
- [propertyName.name]);
+ _recordUndefinedNode(declaringElement,
+ StaticWarningCode.UNDEFINED_IDENTIFIER, propertyName, [
+ propertyName.name
+ ]);
}
}
}
@@ -2792,8 +2684,7 @@
} else if (element == null &&
(node.inSetterContext() || node.parent is CommentReference)) {
element = _resolver.nameScope.lookup(
- new SyntheticIdentifier("${node.name}=", node),
- _definingLibrary);
+ new SyntheticIdentifier("${node.name}=", node), _definingLibrary);
}
ClassElement enclosingClass = _resolver.enclosingClass;
if (element == null && enclosingClass != null) {
@@ -2921,8 +2812,8 @@
* @param elementArrayToMerge non-empty array of elements to merge.
* @return
*/
- static ExecutableElement
- _computeMergedExecutableElement(List<ExecutableElement> elementArrayToMerge) {
+ static ExecutableElement _computeMergedExecutableElement(
+ List<ExecutableElement> elementArrayToMerge) {
// Flatten methods structurally. Based on
// [InheritanceManager.computeMergedExecutableElement] and
// [InheritanceManager.createSyntheticExecutableElement].
@@ -3053,8 +2944,8 @@
* @param elements the `ExecutableElement`s to merge
* @return an `ExecutableElement` representing the merge of `elements`
*/
- static ExecutableElement
- _maybeMergeExecutableElements(Set<ExecutableElement> elements) {
+ static ExecutableElement _maybeMergeExecutableElements(
+ Set<ExecutableElement> elements) {
List<ExecutableElement> elementArrayToMerge = new List.from(elements);
if (elementArrayToMerge.length == 0) {
return null;
@@ -3127,6 +3018,5 @@
accept(AstVisitor visitor) => null;
@override
- void visitChildren(AstVisitor visitor) {
- }
+ void visitChildren(AstVisitor visitor) {}
}
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart
index 7ca2b2a..c5e99c1 100644
--- a/pkg/analyzer/lib/src/generated/engine.dart
+++ b/pkg/analyzer/lib/src/generated/engine.dart
@@ -23,8 +23,8 @@
import 'error.dart';
import 'error_verifier.dart';
import 'html.dart' as ht;
-import 'incremental_resolver.dart' show IncrementalResolver,
- PoorMansIncrementalResolver;
+import 'incremental_resolver.dart'
+ show IncrementalResolver, PoorMansIncrementalResolver;
import 'incremental_scanner.dart';
import 'java_core.dart';
import 'java_engine.dart';
@@ -37,6 +37,12 @@
import 'utilities_general.dart';
/**
+ * Used by [AnalysisOptions] to allow function bodies to be analyzed in some
+ * sources but not others.
+ */
+typedef bool AnalyzeFunctionBodiesPredicate(Source source);
+
+/**
* Type of callback functions used by PendingFuture. Functions of this type
* should perform a computation based on the data in [sourceEntry] and return
* it. If the computation can't be performed yet because more analysis is
@@ -96,8 +102,7 @@
for (int i = 0; i < count; i++) {
CachePartition partition = _partitions[i];
data[i] = new AnalysisContextStatisticsImpl_PartitionDataImpl(
- partition.astSize,
- partition.map.length);
+ partition.astSize, partition.map.length);
}
return data;
}
@@ -402,6 +407,18 @@
List<Source> get librarySources;
/**
+ * Return a client-provided name used to identify this context, or `null` if
+ * the client has not provided a name.
+ */
+ String get name;
+
+ /**
+ * Set the client-provided name used to identify this context to the given
+ * [name].
+ */
+ set name(String name);
+
+ /**
* The stream that is notified when sources have been added or removed,
* or the source's content has changed.
*/
@@ -561,8 +578,8 @@
* source file is not scheduled to be analyzed within the context of the
* given library.
*/
- CancelableFuture<CompilationUnit>
- computeResolvedCompilationUnitAsync(Source source, Source librarySource);
+ CancelableFuture<CompilationUnit> computeResolvedCompilationUnitAsync(
+ Source source, Source librarySource);
/**
* Notifies the context that the client is going to stop using this context.
@@ -591,8 +608,8 @@
* compilation unit
* @return the element model corresponding to the compilation unit defined by the given source
*/
- CompilationUnitElement getCompilationUnitElement(Source unitSource,
- Source librarySource);
+ CompilationUnitElement getCompilationUnitElement(
+ Source unitSource, Source librarySource);
/**
* Get the contents and timestamp of the given source.
@@ -737,8 +754,8 @@
* @return a fully resolved AST for the compilation unit
* See [resolveCompilationUnit].
*/
- CompilationUnit getResolvedCompilationUnit(Source unitSource,
- LibraryElement library);
+ CompilationUnit getResolvedCompilationUnit(
+ Source unitSource, LibraryElement library);
/**
* Return a fully resolved AST for a single compilation unit within the given library, or
@@ -750,8 +767,8 @@
* @return a fully resolved AST for the compilation unit
* See [resolveCompilationUnit].
*/
- CompilationUnit getResolvedCompilationUnit2(Source unitSource,
- Source librarySource);
+ CompilationUnit getResolvedCompilationUnit2(
+ Source unitSource, Source librarySource);
/**
* Return a fully resolved HTML unit, or `null` if the resolved unit is not already
@@ -845,8 +862,8 @@
* @throws AnalysisException if the analysis could not be performed
* See [getResolvedCompilationUnit].
*/
- CompilationUnit resolveCompilationUnit(Source unitSource,
- LibraryElement library);
+ CompilationUnit resolveCompilationUnit(
+ Source unitSource, LibraryElement library);
/**
* Parse and resolve a single source within the given context to produce a fully resolved AST.
@@ -863,8 +880,8 @@
* @throws AnalysisException if the analysis could not be performed
* See [getResolvedCompilationUnit].
*/
- CompilationUnit resolveCompilationUnit2(Source unitSource,
- Source librarySource);
+ CompilationUnit resolveCompilationUnit2(
+ Source unitSource, Source librarySource);
/**
* Parse and resolve a single source within the given context to produce a fully resolved AST.
@@ -888,8 +905,8 @@
* @param oldLength the number of characters in the original contents that were replaced
* @param newLength the number of characters in the replacement text
*/
- void setChangedContents(Source source, String contents, int offset,
- int oldLength, int newLength);
+ void setChangedContents(
+ Source source, String contents, int offset, int oldLength, int newLength);
/**
* Set the contents of the given source to the given contents and mark the source as having
@@ -931,6 +948,12 @@
final int _id = _NEXT_ID++;
/**
+ * A client-provided name used to identify this context, or `null` if the
+ * client has not provided a name.
+ */
+ String name;
+
+ /**
* The set of analysis options controlling the behavior of this context.
*/
AnalysisOptionsImpl _options = new AnalysisOptionsImpl();
@@ -1077,8 +1100,7 @@
*/
AnalysisContextImpl() {
_resultRecorder = new AnalysisContextImpl_AnalysisTaskResultRecorder(this);
- _privatePartition = new UniversalCachePartition(
- this,
+ _privatePartition = new UniversalCachePartition(this,
AnalysisOptionsImpl.DEFAULT_CACHE_SIZE,
new AnalysisContextImpl_ContextRetentionPolicy(this));
_cache = createCacheFromSourceFactory(null);
@@ -1091,8 +1113,8 @@
@override
void set analysisOptions(AnalysisOptions options) {
- bool needsRecompute =
- this._options.analyzeFunctionBodies != options.analyzeFunctionBodies ||
+ bool needsRecompute = this._options.analyzeFunctionBodiesPredicate !=
+ options.analyzeFunctionBodiesPredicate ||
this._options.generateSdkErrors != options.generateSdkErrors ||
this._options.dart2jsHint != options.dart2jsHint ||
(this._options.hint && !options.hint) ||
@@ -1112,15 +1134,12 @@
if (_priorityOrder.length > maxPriorityOrderSize) {
List<Source> newPriorityOrder = new List<Source>(maxPriorityOrderSize);
JavaSystem.arraycopy(
- _priorityOrder,
- 0,
- newPriorityOrder,
- 0,
- maxPriorityOrderSize);
+ _priorityOrder, 0, newPriorityOrder, 0, maxPriorityOrderSize);
_priorityOrder = newPriorityOrder;
}
}
- this._options.analyzeFunctionBodies = options.analyzeFunctionBodies;
+ this._options.analyzeFunctionBodiesPredicate =
+ options.analyzeFunctionBodiesPredicate;
this._options.generateSdkErrors = options.generateSdkErrors;
this._options.dart2jsHint = options.dart2jsHint;
this._options.hint = options.hint;
@@ -1152,8 +1171,8 @@
// performAnalysisTask() because re-caching one AST structure
// can cause another priority source's AST structure to be flushed.
//
- int count =
- math.min(sources.length, _options.cacheSize - _PRIORITY_ORDER_SIZE_DELTA);
+ int count = math.min(
+ sources.length, _options.cacheSize - _PRIORITY_ORDER_SIZE_DELTA);
_priorityOrder = new List<Source>(count);
for (int i = 0; i < count; i++) {
_priorityOrder[i] = sources[i];
@@ -1246,7 +1265,7 @@
for (Source source in _pendingFutureSources.keys) {
SourceEntry sourceEntry = _cache.get(source);
List<PendingFuture> pendingFutures = _pendingFutureSources[source];
- for (int i = 0; i < pendingFutures.length; ) {
+ for (int i = 0; i < pendingFutures.length;) {
if (pendingFutures[i].evaluate(sourceEntry)) {
pendingFutures.removeAt(i);
} else {
@@ -1258,11 +1277,7 @@
continue;
}
AnalysisContextImpl_TaskData taskData = _getNextAnalysisTaskForSource(
- source,
- sourceEntry,
- true,
- hintsEnabled,
- lintsEnabled);
+ source, sourceEntry, true, hintsEnabled, lintsEnabled);
task = taskData.task;
if (task != null) {
break;
@@ -1291,11 +1306,7 @@
for (int i = 0; i < priorityCount; i++) {
Source source = _priorityOrder[i];
AnalysisContextImpl_TaskData taskData = _getNextAnalysisTaskForSource(
- source,
- _cache.get(source),
- true,
- hintsEnabled,
- lintsEnabled);
+ source, _cache.get(source), true, hintsEnabled, lintsEnabled);
AnalysisTask task = taskData.task;
if (task != null) {
return task;
@@ -1339,11 +1350,7 @@
while (sources.hasNext) {
Source source = sources.next();
AnalysisContextImpl_TaskData taskData = _getNextAnalysisTaskForSource(
- source,
- _cache.get(source),
- false,
- hintsEnabled,
- lintsEnabled);
+ source, _cache.get(source), false, hintsEnabled, lintsEnabled);
AnalysisTask task = taskData.task;
if (task != null) {
return task;
@@ -1434,13 +1441,8 @@
// Look for priority sources that need to be analyzed.
//
for (Source source in _priorityOrder) {
- _getSourcesNeedingProcessing(
- source,
- _cache.get(source),
- true,
- hintsEnabled,
- lintsEnabled,
- sources);
+ _getSourcesNeedingProcessing(source, _cache.get(source), true,
+ hintsEnabled, lintsEnabled, sources);
}
//
// Look for non-priority sources that need to be analyzed.
@@ -1448,13 +1450,8 @@
WorkManager_WorkIterator iterator = _workManager.iterator();
while (iterator.hasNext) {
Source source = iterator.next();
- _getSourcesNeedingProcessing(
- source,
- _cache.get(source),
- false,
- hintsEnabled,
- lintsEnabled,
- sources);
+ _getSourcesNeedingProcessing(source,
+ _cache.get(source), false, hintsEnabled, lintsEnabled, sources);
}
return new List<Source>.from(sources);
}
@@ -1560,12 +1557,8 @@
});
changeSet.changedRanges.forEach(
(Source source, ChangeSet_ContentChange change) {
- _contentRangeChanged(
- source,
- change.contents,
- change.offset,
- change.oldLength,
- change.newLength);
+ _contentRangeChanged(source, change.contents, change.offset,
+ change.oldLength, change.newLength);
});
for (Source source in changeSet.deletedSources) {
_sourceDeleted(source);
@@ -1623,66 +1616,44 @@
try {
DartEntry dartEntry = sourceEntry;
ListUtilities.addAll(
- errors,
- _getDartScanData(source, dartEntry, DartEntry.SCAN_ERRORS));
+ errors, _getDartScanData(source, dartEntry, DartEntry.SCAN_ERRORS));
dartEntry = _getReadableDartEntry(source);
- ListUtilities.addAll(
- errors,
+ ListUtilities.addAll(errors,
_getDartParseData(source, dartEntry, DartEntry.PARSE_ERRORS));
dartEntry = _getReadableDartEntry(source);
if (dartEntry.getValue(DartEntry.SOURCE_KIND) == SourceKind.LIBRARY) {
- ListUtilities.addAll(
- errors,
- _getDartResolutionData(source, source, dartEntry, DartEntry.RESOLUTION_ERRORS));
+ ListUtilities.addAll(errors, _getDartResolutionData(
+ source, source, dartEntry, DartEntry.RESOLUTION_ERRORS));
dartEntry = _getReadableDartEntry(source);
- ListUtilities.addAll(
- errors,
- _getDartVerificationData(
- source,
- source,
- dartEntry,
- DartEntry.VERIFICATION_ERRORS));
+ ListUtilities.addAll(errors, _getDartVerificationData(
+ source, source, dartEntry, DartEntry.VERIFICATION_ERRORS));
if (enableHints) {
dartEntry = _getReadableDartEntry(source);
- ListUtilities.addAll(
- errors,
+ ListUtilities.addAll(errors,
_getDartHintData(source, source, dartEntry, DartEntry.HINTS));
}
if (enableLints) {
dartEntry = _getReadableDartEntry(source);
- ListUtilities.addAll(
- errors,
+ ListUtilities.addAll(errors,
_getDartLintData(source, source, dartEntry, DartEntry.LINTS));
}
} else {
List<Source> libraries = getLibrariesContaining(source);
for (Source librarySource in libraries) {
- ListUtilities.addAll(
- errors,
- _getDartResolutionData(
- source,
- librarySource,
- dartEntry,
- DartEntry.RESOLUTION_ERRORS));
+ ListUtilities.addAll(errors, _getDartResolutionData(
+ source, librarySource, dartEntry, DartEntry.RESOLUTION_ERRORS));
dartEntry = _getReadableDartEntry(source);
- ListUtilities.addAll(
- errors,
- _getDartVerificationData(
- source,
- librarySource,
- dartEntry,
- DartEntry.VERIFICATION_ERRORS));
+ ListUtilities.addAll(errors, _getDartVerificationData(source,
+ librarySource, dartEntry, DartEntry.VERIFICATION_ERRORS));
if (enableHints) {
dartEntry = _getReadableDartEntry(source);
- ListUtilities.addAll(
- errors,
- _getDartHintData(source, librarySource, dartEntry, DartEntry.HINTS));
+ ListUtilities.addAll(errors, _getDartHintData(
+ source, librarySource, dartEntry, DartEntry.HINTS));
}
if (enableLints) {
dartEntry = _getReadableDartEntry(source);
- ListUtilities.addAll(
- errors,
- _getDartLintData(source, librarySource, dartEntry, DartEntry.LINTS));
+ ListUtilities.addAll(errors, _getDartLintData(
+ source, librarySource, dartEntry, DartEntry.LINTS));
}
}
}
@@ -1699,9 +1670,7 @@
HtmlEntry htmlEntry = sourceEntry;
try {
return _getHtmlResolutionData2(
- source,
- htmlEntry,
- HtmlEntry.RESOLUTION_ERRORS);
+ source, htmlEntry, HtmlEntry.RESOLUTION_ERRORS);
} on ObsoleteSourceAnalysisException catch (exception, stackTrace) {
AnalysisEngine.instance.logger.logInformation(
"Could not compute errors",
@@ -1712,16 +1681,16 @@
}
@override
- List<Source> computeExportedLibraries(Source source) =>
- _getDartParseData2(source, DartEntry.EXPORTED_LIBRARIES, Source.EMPTY_ARRAY);
+ List<Source> computeExportedLibraries(Source source) => _getDartParseData2(
+ source, DartEntry.EXPORTED_LIBRARIES, Source.EMPTY_ARRAY);
@override
HtmlElement computeHtmlElement(Source source) =>
_getHtmlResolutionData(source, HtmlEntry.ELEMENT, null);
@override
- List<Source> computeImportedLibraries(Source source) =>
- _getDartParseData2(source, DartEntry.IMPORTED_LIBRARIES, Source.EMPTY_ARRAY);
+ List<Source> computeImportedLibraries(Source source) => _getDartParseData2(
+ source, DartEntry.IMPORTED_LIBRARIES, Source.EMPTY_ARRAY);
@override
SourceKind computeKindOf(Source source) {
@@ -1777,20 +1746,18 @@
}
@override
- CancelableFuture<CompilationUnit>
- computeResolvedCompilationUnitAsync(Source unitSource, Source librarySource) {
- return new _AnalysisFutureHelper<CompilationUnit>(
- this).computeAsync(unitSource, (SourceEntry sourceEntry) {
+ CancelableFuture<CompilationUnit> computeResolvedCompilationUnitAsync(
+ Source unitSource, Source librarySource) {
+ return new _AnalysisFutureHelper<CompilationUnit>(this).computeAsync(
+ unitSource, (SourceEntry sourceEntry) {
if (sourceEntry is DartEntry) {
if (sourceEntry.getStateInLibrary(
- DartEntry.RESOLVED_UNIT,
- librarySource) ==
+ DartEntry.RESOLVED_UNIT, librarySource) ==
CacheState.ERROR) {
throw sourceEntry.exception;
}
return sourceEntry.getValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- librarySource);
+ DartEntry.RESOLVED_UNIT, librarySource);
}
throw new AnalysisNotScheduledError();
});
@@ -1810,10 +1777,10 @@
if (sdk == null) {
return new AnalysisCache(<CachePartition>[_privatePartition]);
}
- return new AnalysisCache(
- <CachePartition>[
- AnalysisEngine.instance.partitionManager.forSdk(sdk),
- _privatePartition]);
+ return new AnalysisCache(<CachePartition>[
+ AnalysisEngine.instance.partitionManager.forSdk(sdk),
+ _privatePartition
+ ]);
}
@override
@@ -1828,36 +1795,45 @@
}
@override
- CompilationUnit ensureAnyResolvedDartUnit(Source source) {
- SourceEntry sourceEntry = _cache.get(source);
+ List<CompilationUnit> ensureResolvedDartUnits(Source unitSource) {
+ SourceEntry sourceEntry = _cache.get(unitSource);
if (sourceEntry is! DartEntry) {
return null;
}
DartEntry dartEntry = sourceEntry;
- // Check if there is a resolved unit.
- CompilationUnit unit = dartEntry.anyResolvedCompilationUnit;
- if (unit != null) {
- return unit;
+ // Check every library.
+ List<CompilationUnit> units = <CompilationUnit>[];
+ List<Source> containingLibraries = dartEntry.containingLibraries;
+ for (Source librarySource in containingLibraries) {
+ CompilationUnit unit =
+ dartEntry.getValueInLibrary(DartEntry.RESOLVED_UNIT, librarySource);
+ if (unit == null) {
+ units = null;
+ break;
+ }
+ units.add(unit);
}
// Invalidate the flushed RESOLVED_UNIT to force it eventually.
- bool shouldBeScheduled = false;
- List<Source> librariesContaining = dartEntry.containingLibraries;
- for (Source librarySource in librariesContaining) {
- if (dartEntry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource) ==
- CacheState.FLUSHED) {
- dartEntry.setStateInLibrary(
- DartEntry.RESOLVED_UNIT,
- librarySource,
- CacheState.INVALID);
- shouldBeScheduled = true;
+ if (units == null) {
+ bool shouldBeScheduled = false;
+ for (Source librarySource in containingLibraries) {
+ if (dartEntry.getStateInLibrary(
+ DartEntry.RESOLVED_UNIT, librarySource) ==
+ CacheState.FLUSHED) {
+ dartEntry.setStateInLibrary(
+ DartEntry.RESOLVED_UNIT, librarySource, CacheState.INVALID);
+ shouldBeScheduled = true;
+ }
}
+ if (shouldBeScheduled) {
+ _workManager.add(unitSource, SourcePriority.UNKNOWN);
+ }
+ // We cannot provide resolved units right now,
+ // but the future analysis will.
+ return null;
}
- if (shouldBeScheduled) {
- _workManager.add(source, SourcePriority.UNKNOWN);
- }
- // We cannot provide a resolved unit right now,
- // but the future analysis will.
- return null;
+ // done
+ return units;
}
@override
@@ -1892,8 +1868,8 @@
}
@override
- CompilationUnitElement getCompilationUnitElement(Source unitSource,
- Source librarySource) {
+ CompilationUnitElement getCompilationUnitElement(
+ Source unitSource, Source librarySource) {
LibraryElement libraryElement = getLibraryElement(librarySource);
if (libraryElement != null) {
// try defining unit
@@ -1917,8 +1893,7 @@
String contents = _contentCache.getContents(source);
if (contents != null) {
return new TimestampedData<String>(
- _contentCache.getModificationStamp(source),
- contents);
+ _contentCache.getModificationStamp(source), contents);
}
return source.contents;
}
@@ -1963,13 +1938,11 @@
if (sourceEntry is DartEntry) {
DartEntry dartEntry = sourceEntry;
return new AnalysisErrorInfoImpl(
- dartEntry.allErrors,
- dartEntry.getValue(SourceEntry.LINE_INFO));
+ dartEntry.allErrors, dartEntry.getValue(SourceEntry.LINE_INFO));
} else if (sourceEntry is HtmlEntry) {
HtmlEntry htmlEntry = sourceEntry;
return new AnalysisErrorInfoImpl(
- htmlEntry.allErrors,
- htmlEntry.getValue(SourceEntry.LINE_INFO));
+ htmlEntry.allErrors, htmlEntry.getValue(SourceEntry.LINE_INFO));
}
return new AnalysisErrorInfoImpl(AnalysisError.NO_ERRORS, null);
}
@@ -1997,8 +1970,8 @@
while (partIterator.moveNext()) {
SourceEntry sourceEntry = partIterator.value;
if (sourceEntry.kind == SourceKind.HTML) {
- List<Source> referencedLibraries =
- (sourceEntry as HtmlEntry).getValue(HtmlEntry.REFERENCED_LIBRARIES);
+ List<Source> referencedLibraries = (sourceEntry as HtmlEntry)
+ .getValue(HtmlEntry.REFERENCED_LIBRARIES);
if (_containsAny(referencedLibraries, librarySources)) {
htmlSources.add(partIterator.key);
}
@@ -2009,8 +1982,8 @@
while (iterator.moveNext()) {
SourceEntry sourceEntry = iterator.value;
if (sourceEntry.kind == SourceKind.HTML) {
- List<Source> referencedLibraries =
- (sourceEntry as HtmlEntry).getValue(HtmlEntry.REFERENCED_LIBRARIES);
+ List<Source> referencedLibraries = (sourceEntry as HtmlEntry)
+ .getValue(HtmlEntry.REFERENCED_LIBRARIES);
if (_contains(referencedLibraries, source)) {
htmlSources.add(iterator.key);
}
@@ -2124,8 +2097,8 @@
if (dartEntry == null) {
AnalysisEngine.instance.logger.logError(
"Could not compute the public namespace for ${library.source.fullName}",
- new CaughtException(
- new AnalysisException("A Dart file became a non-Dart file: ${source.fullName}"),
+ new CaughtException(new AnalysisException(
+ "A Dart file became a non-Dart file: ${source.fullName}"),
null));
return null;
}
@@ -2146,8 +2119,8 @@
SourceEntry getReadableSourceEntryOrNull(Source source) => _cache.get(source);
@override
- CompilationUnit getResolvedCompilationUnit(Source unitSource,
- LibraryElement library) {
+ CompilationUnit getResolvedCompilationUnit(
+ Source unitSource, LibraryElement library) {
if (library == null) {
return null;
}
@@ -2155,13 +2128,12 @@
}
@override
- CompilationUnit getResolvedCompilationUnit2(Source unitSource,
- Source librarySource) {
+ CompilationUnit getResolvedCompilationUnit2(
+ Source unitSource, Source librarySource) {
SourceEntry sourceEntry = getReadableSourceEntryOrNull(unitSource);
if (sourceEntry is DartEntry) {
return sourceEntry.getValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- librarySource);
+ DartEntry.RESOLVED_UNIT, librarySource);
}
return null;
}
@@ -2177,8 +2149,8 @@
}
@override
- bool handleContentsChanged(Source source, String originalContents,
- String newContents, bool notify) {
+ bool handleContentsChanged(
+ Source source, String originalContents, String newContents, bool notify) {
SourceEntry sourceEntry = _cache.get(source);
if (sourceEntry == null) {
return false;
@@ -2209,12 +2181,11 @@
TimestampedData<String> fileContents = getContents(source);
String fileContentsData = fileContents.data;
if (fileContentsData == originalContents) {
- sourceEntry.modificationTime = fileContents.modificationTime;
sourceEntry.setValue(SourceEntry.CONTENT, fileContentsData);
+ sourceEntry.modificationTime = fileContents.modificationTime;
changed = false;
}
- } catch (e) {
- }
+ } catch (e) {}
// If not the same content (e.g. the file is being closed without save),
// then force analysis.
if (changed) {
@@ -2222,8 +2193,8 @@
}
}
if (notify && changed) {
- _onSourcesChangedController.add(
- new SourcesChangedEvent.changedContent(source, newContents));
+ _onSourcesChangedController
+ .add(new SourcesChangedEvent.changedContent(source, newContents));
}
return changed;
}
@@ -2246,9 +2217,7 @@
if (dartEntry.getStateInLibrary(DartEntry.HINTS, librarySource) ==
CacheState.VALID) {
dartEntry.setStateInLibrary(
- DartEntry.HINTS,
- librarySource,
- CacheState.INVALID);
+ DartEntry.HINTS, librarySource, CacheState.INVALID);
}
}
}
@@ -2290,8 +2259,8 @@
}
return PerformanceStatistics.performAnaysis.makeCurrentWhile(() {
int getStart = JavaSystem.currentTimeMillis();
- AnalysisTask task =
- PerformanceStatistics.nextTask.makeCurrentWhile(() => nextAnalysisTask);
+ AnalysisTask task = PerformanceStatistics.nextTask
+ .makeCurrentWhile(() => nextAnalysisTask);
int getEnd = JavaSystem.currentTimeMillis();
if (task == null && _validateCacheConsistency()) {
task = nextAnalysisTask;
@@ -2300,16 +2269,12 @@
_validateLastIncrementalResolutionResult();
if (_performAnalysisTaskStopwatch != null) {
AnalysisEngine.instance.instrumentationService.logPerformance(
- AnalysisPerformanceKind.FULL,
- _performAnalysisTaskStopwatch,
+ AnalysisPerformanceKind.FULL, _performAnalysisTaskStopwatch,
'context_id=$_id');
_performAnalysisTaskStopwatch = null;
}
return new AnalysisResult(
- _getChangeNotices(true),
- getEnd - getStart,
- null,
- -1);
+ _getChangeNotices(true), getEnd - getStart, null, -1);
}
if (_performAnalysisTaskStopwatch == null) {
_performAnalysisTaskStopwatch = new Stopwatch()..start();
@@ -2350,11 +2315,8 @@
// }
_notifyErrors(source, notice.errors, notice.lineInfo);
}
- return new AnalysisResult(
- notices,
- getEnd - getStart,
- task.runtimeType.toString(),
- performEnd - performStart);
+ return new AnalysisResult(notices, getEnd - getStart,
+ task.runtimeType.toString(), performEnd - performStart);
});
}
@@ -2382,26 +2344,16 @@
dartEntry.setValue(DartEntry.SCAN_ERRORS, AnalysisError.NO_ERRORS);
dartEntry.setValue(DartEntry.SOURCE_KIND, SourceKind.LIBRARY);
dartEntry.setState(DartEntry.TOKEN_STREAM, CacheState.FLUSHED);
- dartEntry.setValueInLibrary(
- DartEntry.RESOLUTION_ERRORS,
- librarySource,
- AnalysisError.NO_ERRORS);
+ dartEntry.setValueInLibrary(DartEntry.RESOLUTION_ERRORS,
+ librarySource, AnalysisError.NO_ERRORS);
dartEntry.setStateInLibrary(
- DartEntry.RESOLVED_UNIT,
- librarySource,
- CacheState.FLUSHED);
+ DartEntry.RESOLVED_UNIT, librarySource, CacheState.FLUSHED);
+ dartEntry.setValueInLibrary(DartEntry.VERIFICATION_ERRORS,
+ librarySource, AnalysisError.NO_ERRORS);
dartEntry.setValueInLibrary(
- DartEntry.VERIFICATION_ERRORS,
- librarySource,
- AnalysisError.NO_ERRORS);
+ DartEntry.HINTS, librarySource, AnalysisError.NO_ERRORS);
dartEntry.setValueInLibrary(
- DartEntry.HINTS,
- librarySource,
- AnalysisError.NO_ERRORS);
- dartEntry.setValueInLibrary(
- DartEntry.LINTS,
- librarySource,
- AnalysisError.NO_ERRORS);
+ DartEntry.LINTS, librarySource, AnalysisError.NO_ERRORS);
}
});
}
@@ -2410,8 +2362,8 @@
* Record the results produced by performing a [task] and return the cache
* entry associated with the results.
*/
- DartEntry
- recordResolveDartLibraryCycleTaskResults(ResolveDartLibraryCycleTask task) {
+ DartEntry recordResolveDartLibraryCycleTaskResults(
+ ResolveDartLibraryCycleTask task) {
LibraryResolver2 resolver = task.libraryResolver;
CaughtException thrownException = task.exception;
Source unitSource = task.unitSource;
@@ -2428,9 +2380,8 @@
// during resolution.
//
if (thrownException == null) {
- var message =
- "In recordResolveDartLibraryCycleTaskResults, "
- "resolvedLibraries was null and there was no thrown exception";
+ var message = "In recordResolveDartLibraryCycleTaskResults, "
+ "resolvedLibraries was null and there was no thrown exception";
unitEntry.recordResolutionError(
new CaughtException(new AnalysisException(message), null));
} else {
@@ -2454,25 +2405,17 @@
if (thrownException == null) {
dartEntry.setState(DartEntry.PARSED_UNIT, CacheState.FLUSHED);
dartEntry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- librarySource,
- unit);
+ DartEntry.RESOLVED_UNIT, librarySource, unit);
dartEntry.setValueInLibrary(
- DartEntry.RESOLUTION_ERRORS,
- librarySource,
- errors);
+ DartEntry.RESOLUTION_ERRORS, librarySource, errors);
if (source == librarySource) {
_recordElementData(
- dartEntry,
- library.libraryElement,
- librarySource,
- htmlSource);
+ dartEntry, library.libraryElement, librarySource, htmlSource);
}
_cache.storedAst(source);
} else {
dartEntry.recordResolutionErrorInLibrary(
- librarySource,
- thrownException);
+ librarySource, thrownException);
}
if (source != librarySource) {
_workManager.add(source, SourcePriority.PRIORITY_PART);
@@ -2510,9 +2453,8 @@
// during resolution.
//
if (thrownException == null) {
- String message =
- "In recordResolveDartLibraryTaskResults, "
- "resolvedLibraries was null and there was no thrown exception";
+ String message = "In recordResolveDartLibraryTaskResults, "
+ "resolvedLibraries was null and there was no thrown exception";
unitEntry.recordResolutionError(
new CaughtException(new AnalysisException(message), null));
} else {
@@ -2537,25 +2479,17 @@
dartEntry.setValue(SourceEntry.LINE_INFO, lineInfo);
dartEntry.setState(DartEntry.PARSED_UNIT, CacheState.FLUSHED);
dartEntry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- librarySource,
- unit);
+ DartEntry.RESOLVED_UNIT, librarySource, unit);
dartEntry.setValueInLibrary(
- DartEntry.RESOLUTION_ERRORS,
- librarySource,
- errors);
+ DartEntry.RESOLUTION_ERRORS, librarySource, errors);
if (source == librarySource) {
_recordElementData(
- dartEntry,
- library.libraryElement,
- librarySource,
- htmlSource);
+ dartEntry, library.libraryElement, librarySource, htmlSource);
}
_cache.storedAst(source);
} else {
dartEntry.recordResolutionErrorInLibrary(
- librarySource,
- thrownException);
+ librarySource, thrownException);
_cache.remove(source);
}
if (source != librarySource) {
@@ -2579,8 +2513,8 @@
}
@override
- CompilationUnit resolveCompilationUnit(Source unitSource,
- LibraryElement library) {
+ CompilationUnit resolveCompilationUnit(
+ Source unitSource, LibraryElement library) {
if (library == null) {
return null;
}
@@ -2588,13 +2522,9 @@
}
@override
- CompilationUnit resolveCompilationUnit2(Source unitSource,
- Source librarySource) =>
- _getDartResolutionData2(
- unitSource,
- librarySource,
- DartEntry.RESOLVED_UNIT,
- null);
+ CompilationUnit resolveCompilationUnit2(
+ Source unitSource, Source librarySource) => _getDartResolutionData2(
+ unitSource, librarySource, DartEntry.RESOLVED_UNIT, null);
@override
ht.HtmlUnit resolveHtmlUnit(Source htmlSource) {
@@ -2606,13 +2536,8 @@
void setChangedContents(Source source, String contents, int offset,
int oldLength, int newLength) {
if (_contentRangeChanged(source, contents, offset, oldLength, newLength)) {
- _onSourcesChangedController.add(
- new SourcesChangedEvent.changedRange(
- source,
- contents,
- offset,
- oldLength,
- newLength));
+ _onSourcesChangedController.add(new SourcesChangedEvent.changedRange(
+ source, contents, offset, oldLength, newLength));
}
}
@@ -2647,10 +2572,7 @@
continue;
}
callback(
- source,
- sourceEntry,
- descriptor,
- sourceEntry.getState(descriptor));
+ source, sourceEntry, descriptor, sourceEntry.getState(descriptor));
}
if (sourceEntry is DartEntry) {
// get library-specific values
@@ -2673,10 +2595,7 @@
} else if (!lintsEnabled && descriptor == DartEntry.LINTS) {
continue;
}
- callback(
- librarySource,
- sourceEntry,
- descriptor,
+ callback(librarySource, sourceEntry, descriptor,
sourceEntry.getStateInLibrary(descriptor, librarySource));
}
}
@@ -2748,10 +2667,7 @@
//
DartEntry libraryEntry = _getReadableDartEntry(librarySource);
libraryEntry = _cacheDartResolutionData(
- librarySource,
- librarySource,
- libraryEntry,
- DartEntry.ELEMENT);
+ librarySource, librarySource, libraryEntry, DartEntry.ELEMENT);
LibraryElement libraryElement = libraryEntry.getValue(DartEntry.ELEMENT);
CompilationUnitElement definingUnit =
libraryElement.definingCompilationUnit;
@@ -2769,16 +2685,14 @@
units[i + 1] = _getResolvedUnit(parts[i], librarySource);
if (units[i + 1] == null) {
Source source = parts[i].source;
- units[i +
- 1] = new TimestampedData<CompilationUnit>(
- getModificationStamp(source),
- resolveCompilationUnit(source, libraryElement));
+ units[i + 1] = new TimestampedData<CompilationUnit>(
+ getModificationStamp(source),
+ resolveCompilationUnit(source, libraryElement));
}
}
dartEntry = new GenerateDartHintsTask(
- this,
- units,
- getLibraryElement(librarySource)).perform(_resultRecorder) as DartEntry;
+ this, units, getLibraryElement(librarySource))
+ .perform(_resultRecorder) as DartEntry;
state = dartEntry.getStateInLibrary(descriptor, librarySource);
}
return dartEntry;
@@ -2813,10 +2727,7 @@
//
DartEntry libraryEntry = _getReadableDartEntry(librarySource);
libraryEntry = _cacheDartResolutionData(
- librarySource,
- librarySource,
- libraryEntry,
- DartEntry.ELEMENT);
+ librarySource, librarySource, libraryEntry, DartEntry.ELEMENT);
LibraryElement libraryElement = libraryEntry.getValue(DartEntry.ELEMENT);
CompilationUnitElement definingUnit =
libraryElement.definingCompilationUnit;
@@ -2834,17 +2745,15 @@
units[i + 1] = _getResolvedUnit(parts[i], librarySource);
if (units[i + 1] == null) {
Source source = parts[i].source;
- units[i +
- 1] = new TimestampedData<CompilationUnit>(
- getModificationStamp(source),
- resolveCompilationUnit(source, libraryElement));
+ units[i + 1] = new TimestampedData<CompilationUnit>(
+ getModificationStamp(source),
+ resolveCompilationUnit(source, libraryElement));
}
}
//TODO(pquitslund): revisit if we need all units or whether one will do
dartEntry = new GenerateDartLintsTask(
- this,
- units,
- getLibraryElement(librarySource)).perform(_resultRecorder) as DartEntry;
+ this, units, getLibraryElement(librarySource))
+ .perform(_resultRecorder) as DartEntry;
state = dartEntry.getStateInLibrary(descriptor, librarySource);
}
return dartEntry;
@@ -2863,8 +2772,8 @@
* @return a cache entry containing the required data
* @throws AnalysisException if data could not be returned because the source could not be parsed
*/
- DartEntry _cacheDartParseData(Source source, DartEntry dartEntry,
- DataDescriptor descriptor) {
+ DartEntry _cacheDartParseData(
+ Source source, DartEntry dartEntry, DataDescriptor descriptor) {
if (identical(descriptor, DartEntry.PARSED_UNIT)) {
if (dartEntry.hasResolvableCompilationUnit) {
return dartEntry;
@@ -2880,12 +2789,10 @@
// source continues to change, this loop will eventually terminate.
//
dartEntry = _cacheDartScanData(source, dartEntry, DartEntry.TOKEN_STREAM);
- dartEntry = new ParseDartTask(
- this,
- source,
- dartEntry.getValue(DartEntry.TOKEN_STREAM),
- dartEntry.getValue(
- SourceEntry.LINE_INFO)).perform(_resultRecorder) as DartEntry;
+ dartEntry = new ParseDartTask(this, source,
+ dartEntry.getValue(DartEntry.TOKEN_STREAM),
+ dartEntry.getValue(SourceEntry.LINE_INFO))
+ .perform(_resultRecorder) as DartEntry;
state = dartEntry.getState(descriptor);
}
return dartEntry;
@@ -2911,9 +2818,9 @@
//
// Check to see whether we already have the information being requested.
//
- CacheState state = (identical(descriptor, DartEntry.ELEMENT)) ?
- dartEntry.getState(descriptor) :
- dartEntry.getStateInLibrary(descriptor, librarySource);
+ CacheState state = (identical(descriptor, DartEntry.ELEMENT))
+ ? dartEntry.getState(descriptor)
+ : dartEntry.getStateInLibrary(descriptor, librarySource);
while (state != CacheState.ERROR && state != CacheState.VALID) {
//
// If not, compute the information. Unless the modification date of the
@@ -2922,13 +2829,11 @@
// TODO(brianwilkerson) As an optimization, if we already have the
// element model for the library we can use ResolveDartUnitTask to produce
// the resolved AST structure much faster.
- dartEntry = new ResolveDartLibraryTask(
- this,
- unitSource,
- librarySource).perform(_resultRecorder) as DartEntry;
- state = (identical(descriptor, DartEntry.ELEMENT)) ?
- dartEntry.getState(descriptor) :
- dartEntry.getStateInLibrary(descriptor, librarySource);
+ dartEntry = new ResolveDartLibraryTask(this, unitSource, librarySource)
+ .perform(_resultRecorder) as DartEntry;
+ state = (identical(descriptor, DartEntry.ELEMENT))
+ ? dartEntry.getState(descriptor)
+ : dartEntry.getStateInLibrary(descriptor, librarySource);
}
return dartEntry;
}
@@ -2947,8 +2852,8 @@
* @return a cache entry containing the required data
* @throws AnalysisException if data could not be returned because the source could not be scanned
*/
- DartEntry _cacheDartScanData(Source source, DartEntry dartEntry,
- DataDescriptor descriptor) {
+ DartEntry _cacheDartScanData(
+ Source source, DartEntry dartEntry, DataDescriptor descriptor) {
//
// Check to see whether we already have the information being requested.
//
@@ -2960,19 +2865,17 @@
//
try {
if (dartEntry.getState(SourceEntry.CONTENT) != CacheState.VALID) {
- dartEntry =
- new GetContentTask(this, source).perform(_resultRecorder) as DartEntry;
+ dartEntry = new GetContentTask(this, source)
+ .perform(_resultRecorder) as DartEntry;
}
dartEntry = new ScanDartTask(
- this,
- source,
- dartEntry.getValue(SourceEntry.CONTENT)).perform(_resultRecorder) as DartEntry;
+ this, source, dartEntry.getValue(SourceEntry.CONTENT))
+ .perform(_resultRecorder) as DartEntry;
} on AnalysisException catch (exception) {
throw exception;
} catch (exception, stackTrace) {
throw new AnalysisException(
- "Exception",
- new CaughtException(exception, stackTrace));
+ "Exception", new CaughtException(exception, stackTrace));
}
state = dartEntry.getState(descriptor);
}
@@ -3011,11 +2914,8 @@
throw new AnalysisException(
"Could not resolve compilation unit ${unitSource.fullName} in ${librarySource.fullName}");
}
- dartEntry = new GenerateDartErrorsTask(
- this,
- unitSource,
- unit,
- library).perform(_resultRecorder) as DartEntry;
+ dartEntry = new GenerateDartErrorsTask(this, unitSource, unit, library)
+ .perform(_resultRecorder) as DartEntry;
state = dartEntry.getStateInLibrary(descriptor, librarySource);
}
return dartEntry;
@@ -3036,8 +2936,8 @@
* @throws AnalysisException if data could not be returned because the source could not be
* resolved
*/
- HtmlEntry _cacheHtmlParseData(Source source, HtmlEntry htmlEntry,
- DataDescriptor descriptor) {
+ HtmlEntry _cacheHtmlParseData(
+ Source source, HtmlEntry htmlEntry, DataDescriptor descriptor) {
if (identical(descriptor, HtmlEntry.PARSED_UNIT)) {
ht.HtmlUnit unit = htmlEntry.anyParsedUnit;
if (unit != null) {
@@ -3055,19 +2955,17 @@
//
try {
if (htmlEntry.getState(SourceEntry.CONTENT) != CacheState.VALID) {
- htmlEntry =
- new GetContentTask(this, source).perform(_resultRecorder) as HtmlEntry;
+ htmlEntry = new GetContentTask(this, source)
+ .perform(_resultRecorder) as HtmlEntry;
}
htmlEntry = new ParseHtmlTask(
- this,
- source,
- htmlEntry.getValue(SourceEntry.CONTENT)).perform(_resultRecorder) as HtmlEntry;
+ this, source, htmlEntry.getValue(SourceEntry.CONTENT))
+ .perform(_resultRecorder) as HtmlEntry;
} on AnalysisException catch (exception) {
throw exception;
} catch (exception, stackTrace) {
throw new AnalysisException(
- "Exception",
- new CaughtException(exception, stackTrace));
+ "Exception", new CaughtException(exception, stackTrace));
}
state = htmlEntry.getState(descriptor);
}
@@ -3089,8 +2987,8 @@
* @throws AnalysisException if data could not be returned because the source could not be
* resolved
*/
- HtmlEntry _cacheHtmlResolutionData(Source source, HtmlEntry htmlEntry,
- DataDescriptor descriptor) {
+ HtmlEntry _cacheHtmlResolutionData(
+ Source source, HtmlEntry htmlEntry, DataDescriptor descriptor) {
//
// Check to see whether we already have the information being requested.
//
@@ -3101,12 +2999,9 @@
// source continues to change, this loop will eventually terminate.
//
htmlEntry = _cacheHtmlParseData(source, htmlEntry, HtmlEntry.PARSED_UNIT);
- htmlEntry = new ResolveHtmlTask(
- this,
- source,
- htmlEntry.modificationTime,
- htmlEntry.getValue(
- HtmlEntry.PARSED_UNIT)).perform(_resultRecorder) as HtmlEntry;
+ htmlEntry = new ResolveHtmlTask(this, source, htmlEntry.modificationTime,
+ htmlEntry.getValue(HtmlEntry.PARSED_UNIT))
+ .perform(_resultRecorder) as HtmlEntry;
state = htmlEntry.getState(descriptor);
}
return htmlEntry;
@@ -3134,13 +3029,12 @@
* @param library the library on which the other libraries depend
* @param librariesToInvalidate the libraries that depend on the given library
*/
- void _computeAllLibrariesDependingOn(Source library,
- HashSet<Source> librariesToInvalidate) {
+ void _computeAllLibrariesDependingOn(
+ Source library, HashSet<Source> librariesToInvalidate) {
if (librariesToInvalidate.add(library)) {
for (Source dependentLibrary in getLibrariesDependingOn(library)) {
_computeAllLibrariesDependingOn(
- dependentLibrary,
- librariesToInvalidate);
+ dependentLibrary, librariesToInvalidate);
}
}
}
@@ -3223,14 +3117,8 @@
if (contents != originalContents) {
if (_options.incremental) {
_incrementalAnalysisCache = IncrementalAnalysisCache.update(
- _incrementalAnalysisCache,
- source,
- originalContents,
- contents,
- offset,
- oldLength,
- newLength,
- _getReadableSourceEntry(source));
+ _incrementalAnalysisCache, source, originalContents, contents,
+ offset, oldLength, newLength, _getReadableSourceEntry(source));
}
_sourceChanged(source);
changed = true;
@@ -3293,20 +3181,18 @@
AnalysisContextImpl_TaskData _createGenerateDartErrorsTask(Source unitSource,
DartEntry unitEntry, Source librarySource, DartEntry libraryEntry) {
if (unitEntry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource) !=
- CacheState.VALID ||
+ CacheState.VALID ||
libraryEntry.getState(DartEntry.ELEMENT) != CacheState.VALID) {
return _createResolveDartLibraryTask(librarySource, libraryEntry);
}
CompilationUnit unit =
unitEntry.getValueInLibrary(DartEntry.RESOLVED_UNIT, librarySource);
if (unit == null) {
- CaughtException exception = new CaughtException(
- new AnalysisException(
+ CaughtException exception = new CaughtException(new AnalysisException(
"Entry has VALID state for RESOLVED_UNIT but null value for ${unitSource.fullName} in ${librarySource.fullName}"),
null);
AnalysisEngine.instance.logger.logInformation(
- exception.toString(),
- exception);
+ exception.toString(), exception);
unitEntry.recordResolutionError(exception);
return new AnalysisContextImpl_TaskData(null, false);
}
@@ -3352,8 +3238,7 @@
}
}
return new AnalysisContextImpl_TaskData(
- new GenerateDartHintsTask(this, units, libraryElement),
- false);
+ new GenerateDartHintsTask(this, units, libraryElement), false);
}
/**
@@ -3393,8 +3278,7 @@
}
//TODO(pquitslund): revisit if we need all units or whether one will do
return new AnalysisContextImpl_TaskData(
- new GenerateDartLintsTask(this, units, libraryElement),
- false);
+ new GenerateDartLintsTask(this, units, libraryElement), false);
}
/**
@@ -3404,46 +3288,39 @@
* @param sourceEntry the entry for the source
* @return task data representing the created task
*/
- AnalysisContextImpl_TaskData _createGetContentTask(Source source,
- SourceEntry sourceEntry) {
+ AnalysisContextImpl_TaskData _createGetContentTask(
+ Source source, SourceEntry sourceEntry) {
return new AnalysisContextImpl_TaskData(
- new GetContentTask(this, source),
- false);
+ new GetContentTask(this, source), false);
}
/**
* Create a [ParseDartTask] for the given [source].
*/
- AnalysisContextImpl_TaskData _createParseDartTask(Source source,
- DartEntry dartEntry) {
+ AnalysisContextImpl_TaskData _createParseDartTask(
+ Source source, DartEntry dartEntry) {
if (dartEntry.getState(DartEntry.TOKEN_STREAM) != CacheState.VALID ||
dartEntry.getState(SourceEntry.LINE_INFO) != CacheState.VALID) {
return _createScanDartTask(source, dartEntry);
}
Token tokenStream = dartEntry.getValue(DartEntry.TOKEN_STREAM);
dartEntry.setState(DartEntry.TOKEN_STREAM, CacheState.FLUSHED);
- return new AnalysisContextImpl_TaskData(
- new ParseDartTask(
- this,
- source,
- tokenStream,
- dartEntry.getValue(SourceEntry.LINE_INFO)),
- false);
+ return new AnalysisContextImpl_TaskData(new ParseDartTask(this, source,
+ tokenStream, dartEntry.getValue(SourceEntry.LINE_INFO)), false);
}
/**
* Create a [ParseHtmlTask] for the given [source].
*/
- AnalysisContextImpl_TaskData _createParseHtmlTask(Source source,
- HtmlEntry htmlEntry) {
+ AnalysisContextImpl_TaskData _createParseHtmlTask(
+ Source source, HtmlEntry htmlEntry) {
if (htmlEntry.getState(SourceEntry.CONTENT) != CacheState.VALID) {
return _createGetContentTask(source, htmlEntry);
}
String content = htmlEntry.getValue(SourceEntry.CONTENT);
htmlEntry.setState(SourceEntry.CONTENT, CacheState.FLUSHED);
return new AnalysisContextImpl_TaskData(
- new ParseHtmlTask(this, source, content),
- false);
+ new ParseHtmlTask(this, source, content), false);
}
/**
@@ -3453,8 +3330,8 @@
* @param dartEntry the entry for the source
* @return task data representing the created task
*/
- AnalysisContextImpl_TaskData _createResolveDartLibraryTask(Source source,
- DartEntry dartEntry) {
+ AnalysisContextImpl_TaskData _createResolveDartLibraryTask(
+ Source source, DartEntry dartEntry) {
try {
AnalysisContextImpl_CycleBuilder builder =
new AnalysisContextImpl_CycleBuilder(this);
@@ -3465,12 +3342,11 @@
if (taskData != null) {
return taskData;
}
- return new AnalysisContextImpl_TaskData(
- new ResolveDartLibraryCycleTask(this, source, source, builder.librariesInCycle),
- false);
+ return new AnalysisContextImpl_TaskData(new ResolveDartLibraryCycleTask(
+ this, source, source, builder.librariesInCycle), false);
} on AnalysisException catch (exception, stackTrace) {
- dartEntry.recordResolutionError(
- new CaughtException(exception, stackTrace));
+ dartEntry
+ .recordResolutionError(new CaughtException(exception, stackTrace));
AnalysisEngine.instance.logger.logError(
"Internal error trying to create a ResolveDartLibraryTask",
new CaughtException(exception, stackTrace));
@@ -3486,18 +3362,14 @@
* @param htmlEntry the entry for the source
* @return task data representing the created task
*/
- AnalysisContextImpl_TaskData _createResolveHtmlTask(Source source,
- HtmlEntry htmlEntry) {
+ AnalysisContextImpl_TaskData _createResolveHtmlTask(
+ Source source, HtmlEntry htmlEntry) {
if (htmlEntry.getState(HtmlEntry.PARSED_UNIT) != CacheState.VALID) {
return _createParseHtmlTask(source, htmlEntry);
}
- return new AnalysisContextImpl_TaskData(
- new ResolveHtmlTask(
- this,
- source,
- htmlEntry.modificationTime,
- htmlEntry.getValue(HtmlEntry.PARSED_UNIT)),
- false);
+ return new AnalysisContextImpl_TaskData(new ResolveHtmlTask(this, source,
+ htmlEntry.modificationTime,
+ htmlEntry.getValue(HtmlEntry.PARSED_UNIT)), false);
}
/**
@@ -3508,16 +3380,15 @@
* @param dartEntry the entry for the source
* @return task data representing the created task
*/
- AnalysisContextImpl_TaskData _createScanDartTask(Source source,
- DartEntry dartEntry) {
+ AnalysisContextImpl_TaskData _createScanDartTask(
+ Source source, DartEntry dartEntry) {
if (dartEntry.getState(SourceEntry.CONTENT) != CacheState.VALID) {
return _createGetContentTask(source, dartEntry);
}
String content = dartEntry.getValue(SourceEntry.CONTENT);
dartEntry.setState(SourceEntry.CONTENT, CacheState.FLUSHED);
return new AnalysisContextImpl_TaskData(
- new ScanDartTask(this, source, content),
- false);
+ new ScanDartTask(this, source, content), false);
}
/**
@@ -3628,8 +3499,8 @@
* @return the requested data about the given source
* @throws AnalysisException if data could not be returned because the source could not be parsed
*/
- Object _getDartParseData(Source source, DartEntry dartEntry,
- DataDescriptor descriptor) {
+ Object _getDartParseData(
+ Source source, DartEntry dartEntry, DataDescriptor descriptor) {
dartEntry = _cacheDartParseData(source, dartEntry, descriptor);
if (identical(descriptor, DartEntry.PARSED_UNIT)) {
_accessedAst(source);
@@ -3651,8 +3522,8 @@
* @return the requested data about the given source
* @throws AnalysisException if data could not be returned because the source could not be parsed
*/
- Object _getDartParseData2(Source source, DataDescriptor descriptor,
- Object defaultValue) {
+ Object _getDartParseData2(
+ Source source, DataDescriptor descriptor, Object defaultValue) {
DartEntry dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
return defaultValue;
@@ -3684,8 +3555,8 @@
*/
Object _getDartResolutionData(Source unitSource, Source librarySource,
DartEntry dartEntry, DataDescriptor descriptor) {
- dartEntry =
- _cacheDartResolutionData(unitSource, librarySource, dartEntry, descriptor);
+ dartEntry = _cacheDartResolutionData(
+ unitSource, librarySource, dartEntry, descriptor);
if (identical(descriptor, DartEntry.ELEMENT)) {
return dartEntry.getValue(descriptor);
} else if (identical(descriptor, DartEntry.RESOLVED_UNIT)) {
@@ -3718,10 +3589,7 @@
}
try {
return _getDartResolutionData(
- unitSource,
- librarySource,
- dartEntry,
- descriptor);
+ unitSource, librarySource, dartEntry, descriptor);
} on ObsoleteSourceAnalysisException catch (exception, stackTrace) {
AnalysisEngine.instance.logger.logInformation(
"Could not compute $descriptor",
@@ -3743,8 +3611,8 @@
* @return the requested data about the given source
* @throws AnalysisException if data could not be returned because the source could not be scanned
*/
- Object _getDartScanData(Source source, DartEntry dartEntry,
- DataDescriptor descriptor) {
+ Object _getDartScanData(
+ Source source, DartEntry dartEntry, DataDescriptor descriptor) {
dartEntry = _cacheDartScanData(source, dartEntry, descriptor);
return dartEntry.getValue(descriptor);
}
@@ -3763,8 +3631,8 @@
* @return the requested data about the given source
* @throws AnalysisException if data could not be returned because the source could not be scanned
*/
- Object _getDartScanData2(Source source, DataDescriptor descriptor,
- Object defaultValue) {
+ Object _getDartScanData2(
+ Source source, DataDescriptor descriptor, Object defaultValue) {
DartEntry dartEntry = _getReadableDartEntry(source);
if (dartEntry == null) {
return defaultValue;
@@ -3796,8 +3664,8 @@
*/
Object _getDartVerificationData(Source unitSource, Source librarySource,
DartEntry dartEntry, DataDescriptor descriptor) {
- dartEntry =
- _cacheDartVerificationData(unitSource, librarySource, dartEntry, descriptor);
+ dartEntry = _cacheDartVerificationData(
+ unitSource, librarySource, dartEntry, descriptor);
return dartEntry.getValueInLibrary(descriptor, librarySource);
}
@@ -3814,8 +3682,8 @@
* @return the requested data about the given source
* @throws AnalysisException if data could not be returned because the source could not be parsed
*/
- Object _getHtmlParseData(Source source, DataDescriptor descriptor,
- Object defaultValue) {
+ Object _getHtmlParseData(
+ Source source, DataDescriptor descriptor, Object defaultValue) {
HtmlEntry htmlEntry = _getReadableHtmlEntry(source);
if (htmlEntry == null) {
return defaultValue;
@@ -3843,8 +3711,8 @@
* @throws AnalysisException if data could not be returned because the source could not be
* resolved
*/
- Object _getHtmlResolutionData(Source source, DataDescriptor descriptor,
- Object defaultValue) {
+ Object _getHtmlResolutionData(
+ Source source, DataDescriptor descriptor, Object defaultValue) {
HtmlEntry htmlEntry = _getReadableHtmlEntry(source);
if (htmlEntry == null) {
return defaultValue;
@@ -3873,8 +3741,8 @@
* @throws AnalysisException if data could not be returned because the source could not be
* resolved
*/
- Object _getHtmlResolutionData2(Source source, HtmlEntry htmlEntry,
- DataDescriptor descriptor) {
+ Object _getHtmlResolutionData2(
+ Source source, HtmlEntry htmlEntry, DataDescriptor descriptor) {
htmlEntry = _cacheHtmlResolutionData(source, htmlEntry, descriptor);
if (identical(descriptor, HtmlEntry.RESOLVED_UNIT)) {
_accessedAst(source);
@@ -3956,11 +3824,10 @@
(isPriority && elementState == CacheState.FLUSHED)) {
// return createResolveDartLibraryTask(librarySource, (DartEntry) libraryEntry);
return new AnalysisContextImpl_TaskData(
- new ResolveDartLibraryTask(this, source, librarySource),
- false);
+ new ResolveDartLibraryTask(this, source, librarySource), false);
}
- CacheState resolvedUnitState =
- dartEntry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource);
+ CacheState resolvedUnitState = dartEntry.getStateInLibrary(
+ DartEntry.RESOLVED_UNIT, librarySource);
if (resolvedUnitState == CacheState.INVALID ||
(isPriority && resolvedUnitState == CacheState.FLUSHED)) {
//
@@ -3977,19 +3844,15 @@
// Possibly replace with:
// return createResolveDartLibraryTask(librarySource, (DartEntry) libraryEntry);
return new AnalysisContextImpl_TaskData(
- new ResolveDartLibraryTask(this, source, librarySource),
- false);
+ new ResolveDartLibraryTask(this, source, librarySource), false);
}
if (_generateSdkErrors || !source.isInSystemLibrary) {
- CacheState verificationErrorsState =
- dartEntry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, librarySource);
+ CacheState verificationErrorsState = dartEntry.getStateInLibrary(
+ DartEntry.VERIFICATION_ERRORS, librarySource);
if (verificationErrorsState == CacheState.INVALID ||
(isPriority && verificationErrorsState == CacheState.FLUSHED)) {
return _createGenerateDartErrorsTask(
- source,
- dartEntry,
- librarySource,
- libraryEntry);
+ source, dartEntry, librarySource, libraryEntry);
}
if (hintsEnabled) {
CacheState hintsState =
@@ -3997,10 +3860,7 @@
if (hintsState == CacheState.INVALID ||
(isPriority && hintsState == CacheState.FLUSHED)) {
return _createGenerateDartHintsTask(
- source,
- dartEntry,
- librarySource,
- libraryEntry);
+ source, dartEntry, librarySource, libraryEntry);
}
}
if (lintsEnabled) {
@@ -4009,10 +3869,7 @@
if (lintsState == CacheState.INVALID ||
(isPriority && lintsState == CacheState.FLUSHED)) {
return _createGenerateDartLintsTask(
- source,
- dartEntry,
- librarySource,
- libraryEntry);
+ source, dartEntry, librarySource, libraryEntry);
}
}
}
@@ -4114,16 +3971,16 @@
* @param librarySource the source representing the library containing the unit
* @return the specified resolved compilation unit
*/
- TimestampedData<CompilationUnit>
- _getResolvedUnit(CompilationUnitElement element, Source librarySource) {
+ TimestampedData<CompilationUnit> _getResolvedUnit(
+ CompilationUnitElement element, Source librarySource) {
SourceEntry sourceEntry = _cache.get(element.source);
if (sourceEntry is DartEntry) {
DartEntry dartEntry = sourceEntry;
if (dartEntry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource) ==
CacheState.VALID) {
- return new TimestampedData<CompilationUnit>(
- dartEntry.modificationTime,
- dartEntry.getValueInLibrary(DartEntry.RESOLVED_UNIT, librarySource));
+ return new TimestampedData<CompilationUnit>(dartEntry.modificationTime,
+ dartEntry.getValueInLibrary(
+ DartEntry.RESOLVED_UNIT, librarySource));
}
}
return null;
@@ -4194,8 +4051,8 @@
sources.add(source);
return;
}
- CacheState resolvedUnitState =
- dartEntry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource);
+ CacheState resolvedUnitState = dartEntry.getStateInLibrary(
+ DartEntry.RESOLVED_UNIT, librarySource);
if (resolvedUnitState == CacheState.INVALID ||
(isPriority && resolvedUnitState == CacheState.FLUSHED)) {
LibraryElement libraryElement =
@@ -4206,8 +4063,8 @@
}
}
if (_generateSdkErrors || !source.isInSystemLibrary) {
- CacheState verificationErrorsState =
- dartEntry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, librarySource);
+ CacheState verificationErrorsState = dartEntry.getStateInLibrary(
+ DartEntry.VERIFICATION_ERRORS, librarySource);
if (verificationErrorsState == CacheState.INVALID ||
(isPriority && verificationErrorsState == CacheState.FLUSHED)) {
LibraryElement libraryElement =
@@ -4388,8 +4245,8 @@
* @param errors the errors that were computed
* @param lineInfo the line information associated with the source
*/
- void _notifyErrors(Source source, List<AnalysisError> errors,
- LineInfo lineInfo) {
+ void _notifyErrors(
+ Source source, List<AnalysisError> errors, LineInfo lineInfo) {
int count = _listeners.length;
for (int i = 0; i < count; i++) {
_listeners[i].computedErrors(this, source, errors, lineInfo);
@@ -4413,13 +4270,11 @@
HashSet<Source> librariesToInvalidate = new HashSet<Source>();
for (Source containingLibrary in containingLibraries) {
_computeAllLibrariesDependingOn(
- containingLibrary,
- librariesToInvalidate);
+ containingLibrary, librariesToInvalidate);
}
for (Source dependentLibrary in dependentLibraries) {
_computeAllLibrariesDependingOn(
- dependentLibrary,
- librariesToInvalidate);
+ dependentLibrary, librariesToInvalidate);
}
for (Source library in librariesToInvalidate) {
_invalidateLibraryResolution(library);
@@ -4532,9 +4387,7 @@
}
dartEntry.setValueInLibrary(DartEntry.BUILT_UNIT, library, task.unit);
dartEntry.setValueInLibrary(
- DartEntry.BUILT_ELEMENT,
- library,
- task.unitElement);
+ DartEntry.BUILT_ELEMENT, library, task.unitElement);
ChangeNoticeImpl notice = _getNotice(source);
LineInfo lineInfo = dartEntry.getValue(SourceEntry.LINE_INFO);
notice.setErrors(dartEntry.allErrors, lineInfo);
@@ -4554,8 +4407,7 @@
Source librarySource, Source htmlSource) {
dartEntry.setValue(DartEntry.ELEMENT, library);
dartEntry.setValue(DartEntry.IS_LAUNCHABLE, library.entryPoint != null);
- dartEntry.setValue(
- DartEntry.IS_CLIENT,
+ dartEntry.setValue(DartEntry.IS_CLIENT,
_isClient(library, htmlSource, new HashSet<LibraryElement>()));
}
@@ -4570,14 +4422,11 @@
CaughtException thrownException = task.exception;
if (thrownException != null) {
dartEntry.recordVerificationErrorInLibrary(
- librarySource,
- thrownException);
+ librarySource, thrownException);
throw new AnalysisException('<rethrow>', thrownException);
}
dartEntry.setValueInLibrary(
- DartEntry.VERIFICATION_ERRORS,
- librarySource,
- task.errors);
+ DartEntry.VERIFICATION_ERRORS, librarySource, task.errors);
ChangeNoticeImpl notice = _getNotice(source);
LineInfo lineInfo = dartEntry.getValue(SourceEntry.LINE_INFO);
notice.setErrors(dartEntry.allErrors, lineInfo);
@@ -4598,9 +4447,8 @@
// other than the library source.
DartEntry libraryEntry = _cache.get(librarySource);
if (thrownException == null) {
- String message =
- "GenerateDartHintsTask returned a null hint map "
- "without throwing an exception: ${librarySource.fullName}";
+ String message = "GenerateDartHintsTask returned a null hint map "
+ "without throwing an exception: ${librarySource.fullName}";
thrownException =
new CaughtException(new AnalysisException(message), null);
}
@@ -4641,9 +4489,8 @@
// other than the library source.
DartEntry libraryEntry = _cache.get(librarySource);
if (thrownException == null) {
- String message =
- "GenerateDartLintsTask returned a null lint map "
- "without throwing an exception: ${librarySource.fullName}";
+ String message = "GenerateDartLintsTask returned a null lint map "
+ "without throwing an exception: ${librarySource.fullName}";
thrownException =
new CaughtException(new AnalysisException(message), null);
}
@@ -4703,8 +4550,8 @@
* @return an entry containing the computed results
* @throws AnalysisException if the results could not be recorded
*/
- DartEntry
- _recordIncrementalAnalysisTaskResults(IncrementalAnalysisTask task) {
+ DartEntry _recordIncrementalAnalysisTaskResults(
+ IncrementalAnalysisTask task) {
CompilationUnit unit = task.compilationUnit;
if (unit != null) {
ChangeNoticeImpl notice = _getNotice(task.source);
@@ -4742,7 +4589,8 @@
// The file contains no directives.
List<Source> containingLibraries = dartEntry.containingLibraries;
if (containingLibraries.length > 1 ||
- (containingLibraries.length == 1 && containingLibraries[0] != source)) {
+ (containingLibraries.length == 1 &&
+ containingLibraries[0] != source)) {
dartEntry.setValue(DartEntry.SOURCE_KIND, SourceKind.PART);
dartEntry.removeContainingLibrary(source);
_workManager.add(source, SourcePriority.NORMAL_PART);
@@ -4776,9 +4624,7 @@
// Verify that the incrementally parsed and resolved unit in the incremental
// cache is structurally equivalent to the fully parsed unit
_incrementalAnalysisCache = IncrementalAnalysisCache.verifyStructure(
- _incrementalAnalysisCache,
- source,
- task.compilationUnit);
+ _incrementalAnalysisCache, source, task.compilationUnit);
return dartEntry;
}
@@ -4800,8 +4646,7 @@
htmlEntry.setValue(HtmlEntry.PARSED_UNIT, task.htmlUnit);
htmlEntry.setValue(HtmlEntry.PARSE_ERRORS, task.errors);
htmlEntry.setValue(
- HtmlEntry.REFERENCED_LIBRARIES,
- task.referencedLibraries);
+ HtmlEntry.REFERENCED_LIBRARIES, task.referencedLibraries);
_cache.storedAst(source);
ChangeNoticeImpl notice = _getNotice(source);
notice.setErrors(htmlEntry.allErrors, lineInfo);
@@ -4823,9 +4668,7 @@
throw new AnalysisException('<rethrow>', thrownException);
}
dartEntry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- librarySource,
- task.resolvedUnit);
+ DartEntry.RESOLVED_UNIT, librarySource, task.resolvedUnit);
_cache.storedAst(unitSource);
return dartEntry;
}
@@ -4977,13 +4820,22 @@
*/
void _sourceChanged(Source source) {
SourceEntry sourceEntry = _cache.get(source);
- if (sourceEntry == null ||
- sourceEntry.modificationTime == getModificationStamp(source)) {
- // Either we have removed this source, in which case we don't care that
- // it is changed, or we have already invalidated the cache and don't need
- // to invalidate it again.
+ // If the source is removed, we don't care about it.
+ if (sourceEntry == null) {
return;
}
+ // Check if the content of the source is the same as it was the last time.
+ String sourceContent = sourceEntry.getValue(SourceEntry.CONTENT);
+ if (sourceContent != null) {
+ sourceEntry.setState(SourceEntry.CONTENT, CacheState.FLUSHED);
+ try {
+ TimestampedData<String> fileContents = getContents(source);
+ if (fileContents.data == sourceContent) {
+ return;
+ }
+ } catch (e) {}
+ }
+ // We have to invalidate the cache.
_propagateInvalidation(source, sourceEntry);
}
@@ -4996,27 +4848,25 @@
SourceEntry sourceEntry = _cache.get(source);
if (sourceEntry is HtmlEntry) {
HtmlEntry htmlEntry = sourceEntry;
- htmlEntry.recordContentError(
- new CaughtException(
- new AnalysisException("This source was marked as being deleted"),
- null));
+ htmlEntry.recordContentError(new CaughtException(
+ new AnalysisException("This source was marked as being deleted"),
+ null));
} else if (sourceEntry is DartEntry) {
DartEntry dartEntry = sourceEntry;
HashSet<Source> libraries = new HashSet<Source>();
for (Source librarySource in getLibrariesContaining(source)) {
libraries.add(librarySource);
- for (Source dependentLibrary in getLibrariesDependingOn(
- librarySource)) {
+ for (Source dependentLibrary
+ in getLibrariesDependingOn(librarySource)) {
libraries.add(dependentLibrary);
}
}
for (Source librarySource in libraries) {
_invalidateLibraryResolution(librarySource);
}
- dartEntry.recordContentError(
- new CaughtException(
- new AnalysisException("This source was marked as being deleted"),
- null));
+ dartEntry.recordContentError(new CaughtException(
+ new AnalysisException("This source was marked as being deleted"),
+ null));
}
_workManager.remove(source);
_removeFromPriorityOrder(source);
@@ -5029,13 +4879,12 @@
*/
void _sourceRemoved(Source source) {
SourceEntry sourceEntry = _cache.get(source);
- if (sourceEntry is HtmlEntry) {
- } else if (sourceEntry is DartEntry) {
+ if (sourceEntry is HtmlEntry) {} else if (sourceEntry is DartEntry) {
HashSet<Source> libraries = new HashSet<Source>();
for (Source librarySource in getLibrariesContaining(source)) {
libraries.add(librarySource);
- for (Source dependentLibrary in getLibrariesDependingOn(
- librarySource)) {
+ for (Source dependentLibrary
+ in getLibrariesDependingOn(librarySource)) {
libraries.add(dependentLibrary);
}
}
@@ -5081,15 +4930,11 @@
// do resolution
Stopwatch perfCounter = new Stopwatch()..start();
PoorMansIncrementalResolver resolver = new PoorMansIncrementalResolver(
- typeProvider,
- unitSource,
- dartEntry,
- oldUnit,
+ typeProvider, unitSource, dartEntry, oldUnit,
analysisOptions.incrementalApi);
bool success = resolver.resolve(newCode);
AnalysisEngine.instance.instrumentationService.logPerformance(
- AnalysisPerformanceKind.INCREMENTAL,
- perfCounter,
+ AnalysisPerformanceKind.INCREMENTAL, perfCounter,
'success=$success,context_id=$_id,code_length=${newCode.length}');
if (!success) {
return false;
@@ -5188,8 +5033,7 @@
if (fullUnit != null) {
try {
assertSameResolution(
- incrementalResolutionValidation_lastUnit,
- fullUnit);
+ incrementalResolutionValidation_lastUnit, fullUnit);
} on IncrementalResolutionMismatch catch (mismatch, stack) {
String failure = mismatch.message;
String message =
@@ -5207,8 +5051,8 @@
* An `AnalysisTaskResultRecorder` is used by an analysis context to record the
* results of a task.
*/
-class AnalysisContextImpl_AnalysisTaskResultRecorder implements
- AnalysisTaskVisitor<SourceEntry> {
+class AnalysisContextImpl_AnalysisTaskResultRecorder
+ implements AnalysisTaskVisitor<SourceEntry> {
final AnalysisContextImpl AnalysisContextImpl_this;
AnalysisContextImpl_AnalysisTaskResultRecorder(this.AnalysisContextImpl_this);
@@ -5246,8 +5090,8 @@
AnalysisContextImpl_this._recordParseHtmlTaskResults(task);
@override
- DartEntry
- visitResolveDartLibraryCycleTask(ResolveDartLibraryCycleTask task) =>
+ DartEntry visitResolveDartLibraryCycleTask(
+ ResolveDartLibraryCycleTask task) =>
AnalysisContextImpl_this.recordResolveDartLibraryCycleTaskResults(task);
@override
@@ -5267,8 +5111,8 @@
AnalysisContextImpl_this._recordScanDartTaskResults(task);
}
-class AnalysisContextImpl_ContextRetentionPolicy implements CacheRetentionPolicy
- {
+class AnalysisContextImpl_ContextRetentionPolicy
+ implements CacheRetentionPolicy {
final AnalysisContextImpl AnalysisContextImpl_this;
AnalysisContextImpl_ContextRetentionPolicy(this.AnalysisContextImpl_this);
@@ -5384,8 +5228,7 @@
AnalysisTask task = _taskData.task;
if (task is ResolveDartLibraryTask) {
AnalysisContextImpl_this._workManager.addFirst(
- task.librarySource,
- SourcePriority.LIBRARY);
+ task.librarySource, SourcePriority.LIBRARY);
}
return;
}
@@ -5448,9 +5291,7 @@
return;
}
_computeLibraryDependenciesFromDirectives(
- library,
- importedSources,
- exportedSources);
+ library, importedSources, exportedSources);
}
/**
@@ -5484,9 +5325,7 @@
}
library.explicitlyImportsCore = explicitlyImportsCore;
if (!explicitlyImportsCore) {
- if (!_addDependency(
- library,
- AnalysisContextImpl_this._coreLibrarySource,
+ if (!_addDependency(library, AnalysisContextImpl_this._coreLibrarySource,
importedLibraries)) {
return;
}
@@ -5501,9 +5340,7 @@
// be necessary: in theory, dart:core already (indirectly) imports
// dart:async, so if core has been built, async should have been built
// too. However, removing this code causes unit test failures.
- if (!_addDependency(
- library,
- AnalysisContextImpl_this._asyncLibrarySource,
+ if (!_addDependency(library, AnalysisContextImpl_this._asyncLibrarySource,
importedLibraries)) {
return;
}
@@ -5535,8 +5372,8 @@
new List<CycleBuilder_LibraryPair>();
for (int i = 0; i < count; i++) {
ResolvableLibrary library = _librariesInCycle[i];
- libraryData.add(
- new CycleBuilder_LibraryPair(library, _ensurePartsInLibrary(library)));
+ libraryData.add(new CycleBuilder_LibraryPair(
+ library, _ensurePartsInLibrary(library)));
}
AnalysisContextImpl_this._neededForResolution = _gatherSources(libraryData);
if (AnalysisContextImpl._TRACE_PERFORM_TASK) {
@@ -5568,8 +5405,8 @@
CycleBuilder_SourceEntryPair entryPair = entryPairs[i];
Source source = entryPair.source;
DartEntry dartEntry = entryPair.entry;
- units[i] =
- new ResolvableCompilationUnit(source, dartEntry.resolvableCompilationUnit);
+ units[i] = new ResolvableCompilationUnit(
+ source, dartEntry.resolvableCompilationUnit);
}
library.resolvableCompilationUnits = units;
}
@@ -5631,12 +5468,10 @@
if (libraryEntry != null &&
libraryEntry.getState(DartEntry.PARSED_UNIT) != CacheState.ERROR) {
AnalysisContextImpl_this._workManager.addFirst(
- librarySource,
- SourcePriority.LIBRARY);
+ librarySource, SourcePriority.LIBRARY);
if (_taskData == null) {
_taskData = AnalysisContextImpl_this._createResolveDartLibraryTask(
- librarySource,
- libraryEntry);
+ librarySource, libraryEntry);
}
}
}
@@ -5648,8 +5483,8 @@
*
* @param library the library being tested
*/
- void _ensureExports(ResolvableLibrary library,
- HashSet<Source> visitedLibraries) {
+ void _ensureExports(
+ ResolvableLibrary library, HashSet<Source> visitedLibraries) {
List<ResolvableLibrary> dependencies = library.exports;
int dependencyCount = dependencies.length;
for (int i = 0; i < dependencyCount; i++) {
@@ -5717,8 +5552,8 @@
* @param library the library for which resolvable compilation units must be available
* @return a list of (source, entry) pairs for all of the compilation units in the library
*/
- List<CycleBuilder_SourceEntryPair>
- _ensurePartsInLibrary(ResolvableLibrary library) {
+ List<CycleBuilder_SourceEntryPair> _ensurePartsInLibrary(
+ ResolvableLibrary library) {
List<CycleBuilder_SourceEntryPair> pairs =
new List<CycleBuilder_SourceEntryPair>();
Source librarySource = library.librarySource;
@@ -5736,8 +5571,7 @@
throw new AnalysisException(message);
}
throw new AnalysisException(
- message,
- new CaughtException(exception, null));
+ message, new CaughtException(exception, null));
}
_ensureResolvableCompilationUnit(librarySource, libraryEntry);
pairs.add(new CycleBuilder_SourceEntryPair(librarySource, libraryEntry));
@@ -5897,11 +5731,12 @@
* List of possible states which can be queried.
*/
static const List<CacheState> STATES = const <CacheState>[
- CacheState.ERROR,
- CacheState.FLUSHED,
- CacheState.IN_PROCESS,
- CacheState.INVALID,
- CacheState.VALID];
+ CacheState.ERROR,
+ CacheState.FLUSHED,
+ CacheState.IN_PROCESS,
+ CacheState.INVALID,
+ CacheState.VALID
+ ];
/**
* Return the number of entries whose state is [CacheState.ERROR].
@@ -6012,8 +5847,8 @@
}
}
-class AnalysisContextStatisticsImpl_CacheRowImpl implements
- AnalysisContextStatistics_CacheRow {
+class AnalysisContextStatisticsImpl_CacheRowImpl
+ implements AnalysisContextStatistics_CacheRow {
final String name;
Map<CacheState, int> _counts = <CacheState, int>{};
@@ -6061,14 +5896,14 @@
}
}
-class AnalysisContextStatisticsImpl_PartitionDataImpl implements
- AnalysisContextStatistics_PartitionData {
+class AnalysisContextStatisticsImpl_PartitionDataImpl
+ implements AnalysisContextStatistics_PartitionData {
final int astCount;
final int totalCount;
- AnalysisContextStatisticsImpl_PartitionDataImpl(this.astCount,
- this.totalCount);
+ AnalysisContextStatisticsImpl_PartitionDataImpl(
+ this.astCount, this.totalCount);
}
/**
@@ -6130,8 +5965,8 @@
* Appendto the given [builder] all sources with the given analysis [level],
* prefixed with a label and a separator if [needsSeparator] is `true`.
*/
- bool _appendSources(StringBuffer buffer, bool needsSeparator,
- AnalysisLevel level) {
+ bool _appendSources(
+ StringBuffer buffer, bool needsSeparator, AnalysisLevel level) {
bool first = true;
_analysisMap.forEach((Source source, AnalysisLevel sourceLevel) {
if (sourceLevel == level) {
@@ -6275,8 +6110,7 @@
return false;
}
return javaStringEqualsIgnoreCase(
- FileNameUtilities.getExtension(fileName),
- SUFFIX_DART);
+ FileNameUtilities.getExtension(fileName), SUFFIX_DART);
}
/**
@@ -6438,8 +6272,8 @@
* @param source the source that was resolved
* @param unit the result of resolving the source in the given context
*/
- void resolvedDart(AnalysisContext context, Source source,
- CompilationUnit unit);
+ void resolvedDart(
+ AnalysisContext context, Source source, CompilationUnit unit);
/**
* Reports that the given HTML source was resolved in the given context.
@@ -6458,8 +6292,7 @@
* analysis, or because the requested source is a part file which is not a part
* of any known library).
*/
-class AnalysisNotScheduledError implements Exception {
-}
+class AnalysisNotScheduledError implements Exception {}
/**
* The interface `AnalysisOptions` defines the behavior of objects that provide access to a
@@ -6467,13 +6300,24 @@
*/
abstract class AnalysisOptions {
/**
- * Return `true` if analysis is to parse and analyze function bodies.
+ * If analysis is to parse and analyze all function bodies, return `true`.
+ * If analysis is to skip all function bodies, return `false`. If analysis
+ * is to parse and analyze function bodies in some sources and not in others,
+ * throw an exception.
*
- * @return `true` if analysis is to parse and analyzer function bodies
+ * This getter is deprecated; consider using [analyzeFunctionBodiesPredicate]
+ * instead.
*/
+ @deprecated
bool get analyzeFunctionBodies;
/**
+ * Function that returns `true` if analysis is to parse and analyze function
+ * bodies for a given source.
+ */
+ AnalyzeFunctionBodiesPredicate get analyzeFunctionBodiesPredicate;
+
+ /**
* Return the maximum number of sources for which AST structures should be kept in the cache.
*
* @return the maximum number of sources for which AST structures should be kept in the cache
@@ -6582,9 +6426,11 @@
static bool DEFAULT_ENABLE_ENUM = false;
/**
- * A flag indicating whether analysis is to parse and analyze function bodies.
+ * A predicate indicating whether analysis is to parse and analyze function
+ * bodies.
*/
- bool analyzeFunctionBodies = true;
+ AnalyzeFunctionBodiesPredicate _analyzeFunctionBodiesPredicate =
+ _analyzeAllFunctionBodies;
/**
* The maximum number of sources for which AST structures should be kept in the cache.
@@ -6647,7 +6493,7 @@
* @param options the analysis options whose values are being copied
*/
AnalysisOptionsImpl.con1(AnalysisOptions options) {
- analyzeFunctionBodies = options.analyzeFunctionBodies;
+ analyzeFunctionBodiesPredicate = options.analyzeFunctionBodiesPredicate;
cacheSize = options.cacheSize;
dart2jsHint = options.dart2jsHint;
_generateSdkErrors = options.generateSdkErrors;
@@ -6659,6 +6505,36 @@
preserveComments = options.preserveComments;
}
+ bool get analyzeFunctionBodies {
+ if (identical(analyzeFunctionBodiesPredicate, _analyzeAllFunctionBodies)) {
+ return true;
+ } else if (identical(
+ analyzeFunctionBodiesPredicate, _analyzeNoFunctionBodies)) {
+ return false;
+ } else {
+ throw new StateError('analyzeFunctionBodiesPredicate in use');
+ }
+ }
+
+ set analyzeFunctionBodies(bool value) {
+ if (value) {
+ analyzeFunctionBodiesPredicate = _analyzeAllFunctionBodies;
+ } else {
+ analyzeFunctionBodiesPredicate = _analyzeNoFunctionBodies;
+ }
+ }
+
+ @override
+ AnalyzeFunctionBodiesPredicate get analyzeFunctionBodiesPredicate =>
+ _analyzeFunctionBodiesPredicate;
+
+ set analyzeFunctionBodiesPredicate(AnalyzeFunctionBodiesPredicate value) {
+ if (value == null) {
+ throw new ArgumentError.notNull('analyzeFunctionBodiesPredicate');
+ }
+ _analyzeFunctionBodiesPredicate = value;
+ }
+
@deprecated
@override
bool get enableAsync => true;
@@ -6699,6 +6575,18 @@
void set generateSdkErrors(bool generate) {
_generateSdkErrors = generate;
}
+
+ /**
+ * Predicate used for [analyzeFunctionBodiesPredicate] when
+ * [analyzeFunctionBodies] is set to `true`.
+ */
+ static bool _analyzeAllFunctionBodies(Source _) => true;
+
+ /**
+ * Predicate used for [analyzeFunctionBodiesPredicate] when
+ * [analyzeFunctionBodies] is set to `false`.
+ */
+ static bool _analyzeNoFunctionBodies(Source _) => false;
}
/**
@@ -6734,8 +6622,8 @@
* @param taskClassName the name of the class of the task that was performed
* @param performTime the number of milliseconds required to perform the task
*/
- AnalysisResult(this._notices, this.getTime, this.taskClassName,
- this.performTime);
+ AnalysisResult(
+ this._notices, this.getTime, this.taskClassName, this.performTime);
/**
* Return the change notices associated with this result, or `null` if there were no changes
@@ -6823,8 +6711,8 @@
"Task failed: $taskDescription",
new CaughtException(exception, stackTrace));
}
- return PerformanceStatistics.analysisTaskVisitor.makeCurrentWhile(
- () => accept(visitor));
+ return PerformanceStatistics.analysisTaskVisitor
+ .makeCurrentWhile(() => accept(visitor));
}
@override
@@ -6838,13 +6726,18 @@
*/
void _safelyPerform() {
try {
+ String contextName = context.name;
+ if (contextName == null) {
+ contextName = 'unnamed';
+ }
+ AnalysisEngine.instance.instrumentationService.logAnalysisTask(
+ contextName, taskDescription);
internalPerform();
} on AnalysisException catch (exception) {
rethrow;
} catch (exception, stackTrace) {
throw new AnalysisException(
- exception.toString(),
- new CaughtException(exception, stackTrace));
+ exception.toString(), new CaughtException(exception, stackTrace));
}
}
}
@@ -6889,8 +6782,8 @@
* Visit the given [task], returning the result of the visit. This method will
* throw an AnalysisException if the visitor throws an exception.
*/
- E
- visitIncrementalAnalysisTask(IncrementalAnalysisTask incrementalAnalysisTask);
+ E visitIncrementalAnalysisTask(
+ IncrementalAnalysisTask incrementalAnalysisTask);
/**
* Visit the given [task], returning the result of the visit. This method will
@@ -7279,11 +7172,12 @@
static const CacheState VALID = const CacheState('VALID', 4);
static const List<CacheState> values = const [
- ERROR,
- FLUSHED,
- IN_PROCESS,
- INVALID,
- VALID];
+ ERROR,
+ FLUSHED,
+ IN_PROCESS,
+ INVALID,
+ VALID
+ ];
const CacheState(String name, int ordinal) : super(name, ordinal);
}
@@ -7382,8 +7276,7 @@
this._errors = errors;
this._lineInfo = lineInfo;
if (lineInfo == null) {
- AnalysisEngine.instance.logger.logInformation(
- "No line info: $source",
+ AnalysisEngine.instance.logger.logInformation("No line info: $source",
new CaughtException(new AnalysisException(), null));
}
}
@@ -7455,14 +7348,13 @@
*
* @return `true` if this change set does not contain any changes
*/
- bool get isEmpty =>
- addedSources.isEmpty &&
- changedSources.isEmpty &&
- _changedContent.isEmpty &&
- changedRanges.isEmpty &&
- removedSources.isEmpty &&
- removedContainers.isEmpty &&
- deletedSources.isEmpty;
+ bool get isEmpty => addedSources.isEmpty &&
+ changedSources.isEmpty &&
+ _changedContent.isEmpty &&
+ changedRanges.isEmpty &&
+ removedSources.isEmpty &&
+ removedContainers.isEmpty &&
+ deletedSources.isEmpty;
/**
* Record that the specified source has been added and that its content is the default contents of
@@ -7547,16 +7439,16 @@
StringBuffer buffer = new StringBuffer();
bool needsSeparator =
_appendSources(buffer, addedSources, false, "addedSources");
- needsSeparator =
- _appendSources(buffer, changedSources, needsSeparator, "changedSources");
- needsSeparator =
- _appendSources2(buffer, _changedContent, needsSeparator, "changedContent");
+ needsSeparator = _appendSources(
+ buffer, changedSources, needsSeparator, "changedSources");
+ needsSeparator = _appendSources2(
+ buffer, _changedContent, needsSeparator, "changedContent");
needsSeparator =
_appendSources2(buffer, changedRanges, needsSeparator, "changedRanges");
- needsSeparator =
- _appendSources(buffer, deletedSources, needsSeparator, "deletedSources");
- needsSeparator =
- _appendSources(buffer, removedSources, needsSeparator, "removedSources");
+ needsSeparator = _appendSources(
+ buffer, deletedSources, needsSeparator, "deletedSources");
+ needsSeparator = _appendSources(
+ buffer, removedSources, needsSeparator, "removedSources");
int count = removedContainers.length;
if (count > 0) {
if (removedSources.isEmpty) {
@@ -7664,8 +7556,8 @@
* @param oldLength the number of characters in the original contents that were replaced
* @param newLength the number of characters in the replacement text
*/
- ChangeSet_ContentChange(this.contents, this.offset, this.oldLength,
- this.newLength);
+ ChangeSet_ContentChange(
+ this.contents, this.offset, this.oldLength, this.newLength);
}
/**
@@ -7752,8 +7644,7 @@
*/
static final DataDescriptor<List<Source>> CONTAINING_LIBRARIES =
new DataDescriptor<List<Source>>(
- "DartEntry.CONTAINING_LIBRARIES",
- Source.EMPTY_ARRAY);
+ "DartEntry.CONTAINING_LIBRARIES", Source.EMPTY_ARRAY);
/**
* The data descriptor representing the library element for the library. This
@@ -7770,8 +7661,7 @@
*/
static final DataDescriptor<List<Source>> EXPORTED_LIBRARIES =
new DataDescriptor<List<Source>>(
- "DartEntry.EXPORTED_LIBRARIES",
- Source.EMPTY_ARRAY);
+ "DartEntry.EXPORTED_LIBRARIES", Source.EMPTY_ARRAY);
/**
* The data descriptor representing the hints resulting from auditing the
@@ -7779,8 +7669,7 @@
*/
static final DataDescriptor<List<AnalysisError>> HINTS =
new DataDescriptor<List<AnalysisError>>(
- "DartEntry.HINTS",
- AnalysisError.NO_ERRORS);
+ "DartEntry.HINTS", AnalysisError.NO_ERRORS);
/**
* The data descriptor representing the list of imported libraries. This data
@@ -7789,8 +7678,7 @@
*/
static final DataDescriptor<List<Source>> IMPORTED_LIBRARIES =
new DataDescriptor<List<Source>>(
- "DartEntry.IMPORTED_LIBRARIES",
- Source.EMPTY_ARRAY);
+ "DartEntry.IMPORTED_LIBRARIES", Source.EMPTY_ARRAY);
/**
* The data descriptor representing the list of included parts. This data is
@@ -7799,8 +7687,7 @@
*/
static final DataDescriptor<List<Source>> INCLUDED_PARTS =
new DataDescriptor<List<Source>>(
- "DartEntry.INCLUDED_PARTS",
- Source.EMPTY_ARRAY);
+ "DartEntry.INCLUDED_PARTS", Source.EMPTY_ARRAY);
/**
* The data descriptor representing the client flag. This data is only
@@ -7824,8 +7711,7 @@
*/
static final DataDescriptor<List<AnalysisError>> LINTS =
new DataDescriptor<List<AnalysisError>>(
- "DartEntry.LINTS",
- AnalysisError.NO_ERRORS);
+ "DartEntry.LINTS", AnalysisError.NO_ERRORS);
/**
* The data descriptor representing the errors resulting from parsing the
@@ -7833,8 +7719,7 @@
*/
static final DataDescriptor<List<AnalysisError>> PARSE_ERRORS =
new DataDescriptor<List<AnalysisError>>(
- "DartEntry.PARSE_ERRORS",
- AnalysisError.NO_ERRORS);
+ "DartEntry.PARSE_ERRORS", AnalysisError.NO_ERRORS);
/**
* The data descriptor representing the parsed AST structure.
@@ -7856,8 +7741,7 @@
*/
static final DataDescriptor<List<AnalysisError>> RESOLUTION_ERRORS =
new DataDescriptor<List<AnalysisError>>(
- "DartEntry.RESOLUTION_ERRORS",
- AnalysisError.NO_ERRORS);
+ "DartEntry.RESOLUTION_ERRORS", AnalysisError.NO_ERRORS);
/**
* The data descriptor representing the resolved AST structure.
@@ -7871,14 +7755,14 @@
*/
static final DataDescriptor<List<AnalysisError>> SCAN_ERRORS =
new DataDescriptor<List<AnalysisError>>(
- "DartEntry.SCAN_ERRORS",
- AnalysisError.NO_ERRORS);
+ "DartEntry.SCAN_ERRORS", AnalysisError.NO_ERRORS);
/**
* The data descriptor representing the source kind.
*/
static final DataDescriptor<SourceKind> SOURCE_KIND =
- new DataDescriptor<SourceKind>("DartEntry.SOURCE_KIND", SourceKind.UNKNOWN);
+ new DataDescriptor<SourceKind>(
+ "DartEntry.SOURCE_KIND", SourceKind.UNKNOWN);
/**
* The data descriptor representing the token stream.
@@ -7892,8 +7776,7 @@
*/
static final DataDescriptor<List<AnalysisError>> VERIFICATION_ERRORS =
new DataDescriptor<List<AnalysisError>>(
- "DartEntry.VERIFICATION_ERRORS",
- AnalysisError.NO_ERRORS);
+ "DartEntry.VERIFICATION_ERRORS", AnalysisError.NO_ERRORS);
/**
* The list of libraries that contain this compilation unit. The list will be
@@ -7986,26 +7869,26 @@
@override
List<DataDescriptor> get descriptors {
List<DataDescriptor> result = super.descriptors;
- result.addAll(
- <DataDescriptor>[
- DartEntry.SOURCE_KIND,
- DartEntry.CONTAINING_LIBRARIES,
- DartEntry.PARSE_ERRORS,
- DartEntry.PARSED_UNIT,
- DartEntry.SCAN_ERRORS,
- DartEntry.SOURCE_KIND,
- DartEntry.TOKEN_STREAM]);
+ result.addAll(<DataDescriptor>[
+ DartEntry.SOURCE_KIND,
+ DartEntry.CONTAINING_LIBRARIES,
+ DartEntry.PARSE_ERRORS,
+ DartEntry.PARSED_UNIT,
+ DartEntry.SCAN_ERRORS,
+ DartEntry.SOURCE_KIND,
+ DartEntry.TOKEN_STREAM
+ ]);
SourceKind kind = getValue(DartEntry.SOURCE_KIND);
if (kind == SourceKind.LIBRARY) {
- result.addAll(
- <DataDescriptor>[
- DartEntry.ELEMENT,
- DartEntry.EXPORTED_LIBRARIES,
- DartEntry.IMPORTED_LIBRARIES,
- DartEntry.INCLUDED_PARTS,
- DartEntry.IS_CLIENT,
- DartEntry.IS_LAUNCHABLE,
- DartEntry.PUBLIC_NAMESPACE]);
+ result.addAll(<DataDescriptor>[
+ DartEntry.ELEMENT,
+ DartEntry.EXPORTED_LIBRARIES,
+ DartEntry.IMPORTED_LIBRARIES,
+ DartEntry.INCLUDED_PARTS,
+ DartEntry.IS_CLIENT,
+ DartEntry.IS_LAUNCHABLE,
+ DartEntry.PUBLIC_NAMESPACE
+ ]);
}
return result;
}
@@ -8071,13 +7954,14 @@
*/
List<DataDescriptor> get libraryDescriptors {
return <DataDescriptor>[
- DartEntry.BUILT_ELEMENT,
- DartEntry.BUILT_UNIT,
- DartEntry.RESOLUTION_ERRORS,
- DartEntry.RESOLVED_UNIT,
- DartEntry.VERIFICATION_ERRORS,
- DartEntry.HINTS,
- DartEntry.LINTS];
+ DartEntry.BUILT_ELEMENT,
+ DartEntry.BUILT_UNIT,
+ DartEntry.RESOLUTION_ERRORS,
+ DartEntry.RESOLVED_UNIT,
+ DartEntry.VERIFICATION_ERRORS,
+ DartEntry.HINTS,
+ DartEntry.LINTS
+ ];
}
/**
@@ -8127,8 +8011,8 @@
* Return the state of the data represented by the given [descriptor] in the
* context of the given [librarySource].
*/
- CacheState getStateInLibrary(DataDescriptor descriptor,
- Source librarySource) {
+ CacheState getStateInLibrary(
+ DataDescriptor descriptor, Source librarySource) {
if (!_isValidLibraryDescriptor(descriptor)) {
throw new ArgumentError("Invalid descriptor: $descriptor");
}
@@ -8235,8 +8119,8 @@
* [library]. This will set the state of all resolution-based information as
* being in error, but will not change the state of any parse results.
*/
- void recordBuildElementErrorInLibrary(Source librarySource,
- CaughtException exception) {
+ void recordBuildElementErrorInLibrary(
+ Source librarySource, CaughtException exception) {
setStateInLibrary(BUILT_ELEMENT, librarySource, CacheState.ERROR);
setStateInLibrary(BUILT_UNIT, librarySource, CacheState.ERROR);
recordResolutionErrorInLibrary(librarySource, exception);
@@ -8256,8 +8140,8 @@
* @param librarySource the source of the library in which hints were being generated
* @param exception the exception that shows where the error occurred
*/
- void recordHintErrorInLibrary(Source librarySource,
- CaughtException exception) {
+ void recordHintErrorInLibrary(
+ Source librarySource, CaughtException exception) {
this.exception = exception;
ResolutionState state = _getOrCreateResolutionState(librarySource);
state.recordHintError();
@@ -8271,8 +8155,8 @@
* @param librarySource the source of the library in which lints were being generated
* @param exception the exception that shows where the error occurred
*/
- void recordLintErrorInLibrary(Source librarySource,
- CaughtException exception) {
+ void recordLintErrorInLibrary(
+ Source librarySource, CaughtException exception) {
this.exception = exception;
ResolutionState state = _getOrCreateResolutionState(librarySource);
state.recordLintError();
@@ -8318,8 +8202,8 @@
* @param librarySource the source of the library in which resolution was being performed
* @param exception the exception that shows where the error occurred
*/
- void recordResolutionErrorInLibrary(Source librarySource,
- CaughtException exception) {
+ void recordResolutionErrorInLibrary(
+ Source librarySource, CaughtException exception) {
this.exception = exception;
setState(ELEMENT, CacheState.ERROR);
setState(IS_CLIENT, CacheState.ERROR);
@@ -8350,8 +8234,8 @@
* @param librarySource the source of the library in which verification was being performed
* @param exception the exception that shows where the error occurred
*/
- void recordVerificationErrorInLibrary(Source librarySource,
- CaughtException exception) {
+ void recordVerificationErrorInLibrary(
+ Source librarySource, CaughtException exception) {
this.exception = exception;
ResolutionState state = _getOrCreateResolutionState(librarySource);
state.recordVerificationError();
@@ -8404,8 +8288,8 @@
* context for the data
* @param cacheState the new state of the data represented by the given descriptor
*/
- void setStateInLibrary(DataDescriptor descriptor, Source librarySource,
- CacheState cacheState) {
+ void setStateInLibrary(
+ DataDescriptor descriptor, Source librarySource, CacheState cacheState) {
if (!_isValidLibraryDescriptor(descriptor)) {
throw new ArgumentError("Invalid descriptor: $descriptor");
}
@@ -8422,8 +8306,8 @@
* context for the data
* @param value the new value of the data represented by the given descriptor and library
*/
- void setValueInLibrary(DataDescriptor descriptor, Source librarySource,
- Object value) {
+ void setValueInLibrary(
+ DataDescriptor descriptor, Source librarySource, Object value) {
if (!_isValidLibraryDescriptor(descriptor)) {
throw new ArgumentError("Invalid descriptor: $descriptor");
}
@@ -8517,78 +8401,30 @@
buffer.write(oldEntry.runtimeType.toString());
return true;
}
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "tokenStream",
+ DartEntry.TOKEN_STREAM, oldEntry);
needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "tokenStream",
- DartEntry.TOKEN_STREAM,
- oldEntry);
+ buffer, needsSeparator, "scanErrors", DartEntry.SCAN_ERRORS, oldEntry);
needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "scanErrors",
- DartEntry.SCAN_ERRORS,
- oldEntry);
+ buffer, needsSeparator, "sourceKind", DartEntry.SOURCE_KIND, oldEntry);
needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "sourceKind",
- DartEntry.SOURCE_KIND,
- oldEntry);
+ buffer, needsSeparator, "parsedUnit", DartEntry.PARSED_UNIT, oldEntry);
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "parseErrors",
+ DartEntry.PARSE_ERRORS, oldEntry);
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator,
+ "importedLibraries", DartEntry.IMPORTED_LIBRARIES, oldEntry);
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator,
+ "exportedLibraries", DartEntry.EXPORTED_LIBRARIES, oldEntry);
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "includedParts",
+ DartEntry.INCLUDED_PARTS, oldEntry);
needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "parsedUnit",
- DartEntry.PARSED_UNIT,
- oldEntry);
+ buffer, needsSeparator, "element", DartEntry.ELEMENT, oldEntry);
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator,
+ "publicNamespace", DartEntry.PUBLIC_NAMESPACE, oldEntry);
needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "parseErrors",
- DartEntry.PARSE_ERRORS,
- oldEntry);
- needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "importedLibraries",
- DartEntry.IMPORTED_LIBRARIES,
- oldEntry);
- needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "exportedLibraries",
- DartEntry.EXPORTED_LIBRARIES,
- oldEntry);
- needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "includedParts",
- DartEntry.INCLUDED_PARTS,
- oldEntry);
- needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "element",
- DartEntry.ELEMENT,
- oldEntry);
- needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "publicNamespace",
- DartEntry.PUBLIC_NAMESPACE,
- oldEntry);
- needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "clientServer",
- DartEntry.IS_CLIENT,
- oldEntry);
- needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "launchable",
- DartEntry.IS_LAUNCHABLE,
- oldEntry);
+ buffer, needsSeparator, "clientServer", DartEntry.IS_CLIENT, oldEntry);
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "launchable",
+ DartEntry.IS_LAUNCHABLE, oldEntry);
// TODO(brianwilkerson) Add better support for containingLibraries.
// It would be nice to be able to report on size-preserving changes.
int oldLibraryCount = (oldEntry as DartEntry)._containingLibraries.length;
@@ -8629,8 +8465,8 @@
buffer.write(librarySource.fullName);
needsSeparator = true;
} else {
- needsSeparator =
- oldState._writeDiffOn(buffer, needsSeparator, oldEntry as DartEntry);
+ needsSeparator = oldState._writeDiffOn(
+ buffer, needsSeparator, oldEntry as DartEntry);
}
}
state = state._nextState;
@@ -8816,11 +8652,8 @@
//
// Use the ErrorVerifier to compute the rest of the errors.
//
- ErrorVerifier errorVerifier = new ErrorVerifier(
- errorReporter,
- libraryElement,
- typeProvider,
- new InheritanceManager(libraryElement));
+ ErrorVerifier errorVerifier = new ErrorVerifier(errorReporter,
+ libraryElement, typeProvider, new InheritanceManager(libraryElement));
_unit.accept(errorVerifier);
_errors = errorListener.getErrorsForSource(source);
});
@@ -8840,10 +8673,7 @@
for (Directive directive in unit.directives) {
if (directive is UriBasedDirective) {
validateReferencedSource(
- context,
- librarySource,
- directive,
- errorListener);
+ context, librarySource, directive, errorListener);
}
}
}
@@ -8872,13 +8702,9 @@
}
}
StringLiteral uriLiteral = directive.uri;
- errorListener.onError(
- new AnalysisError.con2(
- librarySource,
- uriLiteral.offset,
- uriLiteral.length,
- CompileTimeErrorCode.URI_DOES_NOT_EXIST,
- [directive.uriContent]));
+ errorListener.onError(new AnalysisError.con2(librarySource,
+ uriLiteral.offset, uriLiteral.length,
+ CompileTimeErrorCode.URI_DOES_NOT_EXIST, [directive.uriContent]));
}
}
@@ -8911,8 +8737,8 @@
* unit appearing first in the array
* @param libraryElement the element model for the library being analyzed
*/
- GenerateDartHintsTask(InternalAnalysisContext context, this._units,
- this.libraryElement)
+ GenerateDartHintsTask(
+ InternalAnalysisContext context, this._units, this.libraryElement)
: super(context);
/**
@@ -8990,9 +8816,9 @@
@override
String get taskDescription {
Source librarySource = libraryElement.source;
- return (librarySource == null) ?
- "generate Dart lints for library without source" :
- "generate Dart lints for ${librarySource.fullName}";
+ return (librarySource == null)
+ ? "generate Dart lints for library without source"
+ : "generate Dart lints for ${librarySource.fullName}";
}
@override
@@ -9001,7 +8827,6 @@
@override
void internalPerform() {
-
Iterable<CompilationUnit> compilationUnits =
_units.map((TimestampedData<CompilationUnit> unit) => unit.data);
RecordingErrorListener errorListener = new RecordingErrorListener();
@@ -9017,7 +8842,6 @@
}
}
-
/**
* Instances of the class `GetContentTask` get the contents of a source.
*/
@@ -9101,18 +8925,12 @@
TimestampedData<String> data = context.getContents(source);
_content = data.data;
_modificationTime = data.modificationTime;
- AnalysisEngine.instance.instrumentationService.logFileRead(
- source.fullName,
- _modificationTime,
- _content);
+ AnalysisEngine.instance.instrumentationService
+ .logFileRead(source.fullName, _modificationTime, _content);
} catch (exception, stackTrace) {
- errors.add(
- new AnalysisError.con1(
- source,
- ScannerErrorCode.UNABLE_GET_CONTENT,
- [exception]));
- throw new AnalysisException(
- "Could not get contents of $source",
+ errors.add(new AnalysisError.con1(
+ source, ScannerErrorCode.UNABLE_GET_CONTENT, [exception]));
+ throw new AnalysisException("Could not get contents of $source",
new CaughtException(exception, stackTrace));
}
}
@@ -9135,8 +8953,7 @@
*/
static final DataDescriptor<List<AnalysisError>> HINTS =
new DataDescriptor<List<AnalysisError>>(
- "HtmlEntry.HINTS",
- AnalysisError.NO_ERRORS);
+ "HtmlEntry.HINTS", AnalysisError.NO_ERRORS);
/**
* The data descriptor representing the errors resulting from parsing the
@@ -9144,8 +8961,7 @@
*/
static final DataDescriptor<List<AnalysisError>> PARSE_ERRORS =
new DataDescriptor<List<AnalysisError>>(
- "HtmlEntry.PARSE_ERRORS",
- AnalysisError.NO_ERRORS);
+ "HtmlEntry.PARSE_ERRORS", AnalysisError.NO_ERRORS);
/**
* The data descriptor representing the parsed AST structure.
@@ -9164,8 +8980,7 @@
*/
static final DataDescriptor<List<Source>> REFERENCED_LIBRARIES =
new DataDescriptor<List<Source>>(
- "HtmlEntry.REFERENCED_LIBRARIES",
- Source.EMPTY_ARRAY);
+ "HtmlEntry.REFERENCED_LIBRARIES", Source.EMPTY_ARRAY);
/**
* The data descriptor representing the errors resulting from resolving the
@@ -9173,8 +8988,7 @@
*/
static final DataDescriptor<List<AnalysisError>> RESOLUTION_ERRORS =
new DataDescriptor<List<AnalysisError>>(
- "HtmlEntry.RESOLUTION_ERRORS",
- AnalysisError.NO_ERRORS);
+ "HtmlEntry.RESOLUTION_ERRORS", AnalysisError.NO_ERRORS);
/**
* Return all of the errors associated with the HTML file that are currently
@@ -9210,14 +9024,14 @@
@override
List<DataDescriptor> get descriptors {
List<DataDescriptor> result = super.descriptors;
- result.addAll(
- [
- HtmlEntry.ELEMENT,
- HtmlEntry.PARSE_ERRORS,
- HtmlEntry.PARSED_UNIT,
- HtmlEntry.RESOLUTION_ERRORS,
- HtmlEntry.RESOLVED_UNIT,
- HtmlEntry.HINTS]);
+ result.addAll([
+ HtmlEntry.ELEMENT,
+ HtmlEntry.PARSE_ERRORS,
+ HtmlEntry.PARSED_UNIT,
+ HtmlEntry.RESOLUTION_ERRORS,
+ HtmlEntry.RESOLVED_UNIT,
+ HtmlEntry.HINTS
+ ]);
return result;
}
@@ -9321,42 +9135,18 @@
buffer.write(oldEntry.runtimeType);
return true;
}
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "parseErrors",
+ HtmlEntry.PARSE_ERRORS, oldEntry);
needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "parseErrors",
- HtmlEntry.PARSE_ERRORS,
- oldEntry);
+ buffer, needsSeparator, "parsedUnit", HtmlEntry.PARSED_UNIT, oldEntry);
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "resolvedUnit",
+ HtmlEntry.RESOLVED_UNIT, oldEntry);
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator,
+ "resolutionErrors", HtmlEntry.RESOLUTION_ERRORS, oldEntry);
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator,
+ "referencedLibraries", HtmlEntry.REFERENCED_LIBRARIES, oldEntry);
needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "parsedUnit",
- HtmlEntry.PARSED_UNIT,
- oldEntry);
- needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "resolvedUnit",
- HtmlEntry.RESOLVED_UNIT,
- oldEntry);
- needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "resolutionErrors",
- HtmlEntry.RESOLUTION_ERRORS,
- oldEntry);
- needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "referencedLibraries",
- HtmlEntry.REFERENCED_LIBRARIES,
- oldEntry);
- needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "element",
- HtmlEntry.ELEMENT,
- oldEntry);
+ buffer, needsSeparator, "element", HtmlEntry.ELEMENT, oldEntry);
return needsSeparator;
}
@@ -9397,8 +9187,8 @@
int _newLength = 0;
IncrementalAnalysisCache(this.librarySource, this.source, this.resolvedUnit,
- this.oldContents, String newContents, int offset, int oldLength, int newLength)
- {
+ this.oldContents, String newContents, int offset, int oldLength,
+ int newLength) {
this._newContents = newContents;
this._offset = offset;
this._oldLength = oldLength;
@@ -9448,18 +9238,11 @@
* @return the cache used for incremental analysis or `null` if incremental analysis results
* cannot be cached for the next incremental analysis
*/
- static IncrementalAnalysisCache cacheResult(IncrementalAnalysisCache cache,
- CompilationUnit unit) {
+ static IncrementalAnalysisCache cacheResult(
+ IncrementalAnalysisCache cache, CompilationUnit unit) {
if (cache != null && unit != null) {
- return new IncrementalAnalysisCache(
- cache.librarySource,
- cache.source,
- unit,
- cache._newContents,
- cache._newContents,
- 0,
- 0,
- 0);
+ return new IncrementalAnalysisCache(cache.librarySource, cache.source,
+ unit, cache._newContents, cache._newContents, 0, 0, 0);
}
return null;
}
@@ -9472,8 +9255,8 @@
* @return the cache used for incremental analysis or `null` if incremental analysis cannot
* be performed
*/
- static IncrementalAnalysisCache clear(IncrementalAnalysisCache cache,
- Source source) {
+ static IncrementalAnalysisCache clear(
+ IncrementalAnalysisCache cache, Source source) {
if (cache == null || cache.source == source) {
return null;
}
@@ -9506,8 +9289,8 @@
if (librarySources.length == 1) {
librarySource = librarySources[0];
if (librarySource != null) {
- unit =
- dartEntry.getValueInLibrary(DartEntry.RESOLVED_UNIT, librarySource);
+ unit = dartEntry.getValueInLibrary(
+ DartEntry.RESOLVED_UNIT, librarySource);
}
}
}
@@ -9524,15 +9307,8 @@
oldContents =
"${newContents.substring(0, offset)}${newContents.substring(offset + newLength)}";
}
- return new IncrementalAnalysisCache(
- librarySource,
- source,
- unit,
- oldContents,
- newContents,
- offset,
- oldLength,
- newLength);
+ return new IncrementalAnalysisCache(librarySource, source, unit,
+ oldContents, newContents, offset, oldLength, newLength);
}
// Update the existing cache if the change is contiguous
if (cache._oldLength == 0 && cache._newLength == 0) {
@@ -9559,9 +9335,8 @@
* @return the cache used for incremental analysis or `null` if incremental analysis results
* cannot be cached for the next incremental analysis
*/
- static IncrementalAnalysisCache
- verifyStructure(IncrementalAnalysisCache cache, Source source,
- CompilationUnit unit) {
+ static IncrementalAnalysisCache verifyStructure(
+ IncrementalAnalysisCache cache, Source source, CompilationUnit unit) {
if (cache != null && unit != null && cache.source == source) {
if (!AstComparator.equalNodes(cache.resolvedUnit, unit)) {
return null;
@@ -9645,25 +9420,16 @@
BooleanErrorListener errorListener = new BooleanErrorListener();
IncrementalScanner scanner =
new IncrementalScanner(cache.source, reader, errorListener);
- scanner.rescan(
- cache.resolvedUnit.beginToken,
- cache.offset,
- cache.oldLength,
- cache.newLength);
+ scanner.rescan(cache.resolvedUnit.beginToken, cache.offset,
+ cache.oldLength, cache.newLength);
if (errorListener.errorReported) {
return;
}
// Produce an updated AST
IncrementalParser parser = new IncrementalParser(
- cache.source,
- scanner.tokenMap,
- AnalysisErrorListener.NULL_LISTENER);
- _updatedUnit = parser.reparse(
- cache.resolvedUnit,
- scanner.leftToken,
- scanner.rightToken,
- cache.offset,
- cache.offset + cache.oldLength);
+ cache.source, scanner.tokenMap, AnalysisErrorListener.NULL_LISTENER);
+ _updatedUnit = parser.reparse(cache.resolvedUnit, scanner.leftToken,
+ scanner.rightToken, cache.offset, cache.offset + cache.oldLength);
// Update the resolution
TypeProvider typeProvider = this.typeProvider;
if (_updatedUnit != null && typeProvider != null) {
@@ -9672,10 +9438,7 @@
LibraryElement library = element.library;
if (library != null) {
IncrementalResolver resolver = new IncrementalResolver(
- element,
- cache.offset,
- cache.oldLength,
- cache.newLength);
+ element, cache.offset, cache.oldLength, cache.newLength);
resolver.resolve(parser.updatedNode);
}
}
@@ -9703,6 +9466,9 @@
*/
List<Source> get prioritySources;
+ /** A factory to override how [ResolverVisitor] is created. */
+ ResolverVisitorFactory get resolverVisitorFactory;
+
/**
* Returns a statistics about this context.
*/
@@ -9717,9 +9483,6 @@
*/
TypeProvider get typeProvider;
- /** A factory to override how [ResolverVisitor] is created. */
- ResolverVisitorFactory get resolverVisitorFactory;
-
/** A factory to override how [TypeResolverVisitor] is created. */
TypeResolverVisitorFactory get typeResolverVisitorFactory;
@@ -9767,11 +9530,11 @@
CompilationUnit computeResolvableCompilationUnit(Source source);
/**
- * Return any resolved [CompilationUnit] for the given [source] if not
- * flushed, otherwise return `null` and ensures that the [CompilationUnit]
+ * Return all the resolved [CompilationUnit]s for the given [source] if not
+ * flushed, otherwise return `null` and ensures that the [CompilationUnit]s
* will be eventually returned to the client from [performAnalysisTask].
*/
- CompilationUnit ensureAnyResolvedDartUnit(Source source);
+ List<CompilationUnit> ensureResolvedDartUnits(Source source);
/**
* Return context that owns the given source.
@@ -9806,8 +9569,8 @@
* is either implicitly or explicitly analyzed by this context, and a change
* actually occurred).
*/
- bool handleContentsChanged(Source source, String originalContents,
- String newContents, bool notify);
+ bool handleContentsChanged(
+ Source source, String originalContents, String newContents, bool notify);
/**
* Given a table mapping the source for the libraries represented by the corresponding elements to
@@ -9876,20 +9639,16 @@
*/
class NullLogger implements Logger {
@override
- void logError(String message, [CaughtException exception]) {
- }
+ void logError(String message, [CaughtException exception]) {}
@override
- void logError2(String message, Object exception) {
- }
+ void logError2(String message, Object exception) {}
@override
- void logInformation(String message, [CaughtException exception]) {
- }
+ void logInformation(String message, [CaughtException exception]) {}
@override
- void logInformation2(String message, Object exception) {
- }
+ void logInformation2(String message, Object exception) {}
}
/**
@@ -9908,8 +9667,7 @@
*
* @param source the source that was removed while it was being analyzed
*/
- ObsoleteSourceAnalysisException(Source source)
- : super(
+ ObsoleteSourceAnalysisException(Source source) : super(
"The source '${source.fullName}' was removed while it was being analyzed") {
this._source = source;
}
@@ -10064,7 +9822,8 @@
RecordingErrorListener errorListener = new RecordingErrorListener();
Parser parser = new Parser(source, errorListener);
AnalysisOptions options = context.analysisOptions;
- parser.parseFunctionBodies = options.analyzeFunctionBodies;
+ parser.parseFunctionBodies =
+ options.analyzeFunctionBodiesPredicate(source);
_unit = parser.parseCompilationUnit(_tokenStream);
_unit.lineInfo = lineInfo;
AnalysisContext analysisContext = context;
@@ -10074,8 +9833,8 @@
} else {
_containsNonPartOfDirective = true;
if (directive is UriBasedDirective) {
- Source referencedSource =
- resolveDirective(analysisContext, source, directive, errorListener);
+ Source referencedSource = resolveDirective(
+ analysisContext, source, directive, errorListener);
if (referencedSource != null) {
if (directive is ExportDirective) {
_exportedSources.add(referencedSource);
@@ -10141,22 +9900,15 @@
return null;
}
if (code == UriValidationCode.URI_WITH_INTERPOLATION) {
- errorListener.onError(
- new AnalysisError.con2(
- librarySource,
- uriLiteral.offset,
- uriLiteral.length,
- CompileTimeErrorCode.URI_WITH_INTERPOLATION));
+ errorListener.onError(new AnalysisError.con2(librarySource,
+ uriLiteral.offset, uriLiteral.length,
+ CompileTimeErrorCode.URI_WITH_INTERPOLATION));
return null;
}
if (code == UriValidationCode.INVALID_URI) {
- errorListener.onError(
- new AnalysisError.con2(
- librarySource,
- uriLiteral.offset,
- uriLiteral.length,
- CompileTimeErrorCode.INVALID_URI,
- [uriContent]));
+ errorListener.onError(new AnalysisError.con2(librarySource,
+ uriLiteral.offset, uriLiteral.length,
+ CompileTimeErrorCode.INVALID_URI, [uriContent]));
return null;
}
throw new RuntimeException(
@@ -10282,22 +10034,21 @@
_lineInfo = new LineInfo(scanner.lineStarts);
RecordingErrorListener errorListener = new RecordingErrorListener();
_unit = new ht.HtmlParser(source, errorListener).parse(token, _lineInfo);
- _unit.accept(
- new RecursiveXmlVisitor_ParseHtmlTask_internalPerform(this, errorListener));
+ _unit.accept(new RecursiveXmlVisitor_ParseHtmlTask_internalPerform(
+ this, errorListener));
_errors = errorListener.getErrorsForSource(source);
_referencedLibraries = librarySources;
} catch (exception, stackTrace) {
throw new AnalysisException(
- "Exception",
- new CaughtException(exception, stackTrace));
+ "Exception", new CaughtException(exception, stackTrace));
}
}
/**
* Resolves directives in the given [CompilationUnit].
*/
- void _resolveScriptDirectives(CompilationUnit script,
- AnalysisErrorListener errorListener) {
+ void _resolveScriptDirectives(
+ CompilationUnit script, AnalysisErrorListener errorListener) {
if (script == null) {
return;
}
@@ -10305,10 +10056,7 @@
for (Directive directive in script.directives) {
if (directive is UriBasedDirective) {
ParseDartTask.resolveDirective(
- analysisContext,
- source,
- directive,
- errorListener);
+ analysisContext, source, directive, errorListener);
}
}
}
@@ -10326,8 +10074,7 @@
ht.XmlAttributeNode scriptAttribute = null;
for (ht.XmlAttributeNode attribute in node.attributes) {
if (javaStringEqualsIgnoreCase(
- attribute.name,
- ParseHtmlTask._ATTRIBUTE_SRC)) {
+ attribute.name, ParseHtmlTask._ATTRIBUTE_SRC)) {
scriptAttribute = attribute;
}
}
@@ -10613,14 +10360,14 @@
}
}
-class RecursiveXmlVisitor_ParseHtmlTask_internalPerform extends
- ht.RecursiveXmlVisitor<Object> {
+class RecursiveXmlVisitor_ParseHtmlTask_internalPerform
+ extends ht.RecursiveXmlVisitor<Object> {
final ParseHtmlTask ParseHtmlTask_this;
RecordingErrorListener errorListener;
- RecursiveXmlVisitor_ParseHtmlTask_internalPerform(this.ParseHtmlTask_this,
- this.errorListener)
+ RecursiveXmlVisitor_ParseHtmlTask_internalPerform(
+ this.ParseHtmlTask_this, this.errorListener)
: super();
@override
@@ -10630,25 +10377,22 @@
}
}
-class RecursiveXmlVisitor_ResolveHtmlTask_internalPerform extends
- ht.RecursiveXmlVisitor<Object> {
+class RecursiveXmlVisitor_ResolveHtmlTask_internalPerform
+ extends ht.RecursiveXmlVisitor<Object> {
final ResolveHtmlTask ResolveHtmlTask_this;
RecordingErrorListener errorListener;
- RecursiveXmlVisitor_ResolveHtmlTask_internalPerform(this.ResolveHtmlTask_this,
- this.errorListener)
+ RecursiveXmlVisitor_ResolveHtmlTask_internalPerform(
+ this.ResolveHtmlTask_this, this.errorListener)
: super();
@override
Object visitHtmlScriptTagNode(ht.HtmlScriptTagNode node) {
CompilationUnit script = node.script;
if (script != null) {
- GenerateDartErrorsTask.validateDirectives(
- ResolveHtmlTask_this.context,
- ResolveHtmlTask_this.source,
- script,
- errorListener);
+ GenerateDartErrorsTask.validateDirectives(ResolveHtmlTask_this.context,
+ ResolveHtmlTask_this.source, script, errorListener);
}
return null;
}
@@ -10757,8 +10501,8 @@
}
@override
- Object
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ Object visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
node.staticElement = null;
return super.visitRedirectingConstructorInvocation(node);
}
@@ -10985,30 +10729,18 @@
* @param oldEntry the entry that was replaced by this entry
* @return `true` if some difference was written
*/
- bool _writeDiffOn(StringBuffer buffer, bool needsSeparator,
- DartEntry oldEntry) {
+ bool _writeDiffOn(
+ StringBuffer buffer, bool needsSeparator, DartEntry oldEntry) {
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "resolvedUnit",
+ DartEntry.RESOLVED_UNIT, oldEntry);
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator,
+ "resolutionErrors", DartEntry.RESOLUTION_ERRORS, oldEntry);
+ needsSeparator = _writeStateDiffOn(buffer, needsSeparator,
+ "verificationErrors", DartEntry.VERIFICATION_ERRORS, oldEntry);
needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "resolvedUnit",
- DartEntry.RESOLVED_UNIT,
- oldEntry);
+ buffer, needsSeparator, "hints", DartEntry.HINTS, oldEntry);
needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "resolutionErrors",
- DartEntry.RESOLUTION_ERRORS,
- oldEntry);
- needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "verificationErrors",
- DartEntry.VERIFICATION_ERRORS,
- oldEntry);
- needsSeparator =
- _writeStateDiffOn(buffer, needsSeparator, "hints", DartEntry.HINTS, oldEntry);
- needsSeparator =
- _writeStateDiffOn(buffer, needsSeparator, "lints", DartEntry.LINTS, oldEntry);
+ buffer, needsSeparator, "lints", DartEntry.LINTS, oldEntry);
return needsSeparator;
}
@@ -11025,9 +10757,7 @@
_writeStateOn(buffer, "resolvedUnit", DartEntry.RESOLVED_UNIT);
_writeStateOn(buffer, "resolutionErrors", DartEntry.RESOLUTION_ERRORS);
_writeStateOn(
- buffer,
- "verificationErrors",
- DartEntry.VERIFICATION_ERRORS);
+ buffer, "verificationErrors", DartEntry.VERIFICATION_ERRORS);
_writeStateOn(buffer, "hints", DartEntry.HINTS);
_writeStateOn(buffer, "lints", DartEntry.LINTS);
if (_nextState != null) {
@@ -11064,8 +10794,8 @@
* given [descriptor] to the given bugger, prefixed by the given [label] to
* the given [buffer].
*/
- void _writeStateOn(StringBuffer buffer, String label,
- DataDescriptor descriptor) {
+ void _writeStateOn(
+ StringBuffer buffer, String label, DataDescriptor descriptor) {
CachedResult result = resultMap[descriptor];
buffer.write("; ");
buffer.write(label);
@@ -11188,8 +10918,8 @@
* @param unitSource the source representing the file whose compilation unit is to be returned
* @param librarySource the source representing the library to be resolved
*/
- ResolveDartLibraryTask(InternalAnalysisContext context, this.unitSource,
- this.librarySource)
+ ResolveDartLibraryTask(
+ InternalAnalysisContext context, this.unitSource, this.librarySource)
: super(context);
/**
@@ -11245,8 +10975,8 @@
* @param source the source to be parsed
* @param libraryElement the element model for the library containing the source
*/
- ResolveDartUnitTask(InternalAnalysisContext context, this.source,
- this._libraryElement)
+ ResolveDartUnitTask(
+ InternalAnalysisContext context, this.source, this._libraryElement)
: super(context);
/**
@@ -11293,22 +11023,15 @@
//
RecordingErrorListener errorListener = new RecordingErrorListener();
TypeResolverVisitor typeResolverVisitor = new TypeResolverVisitor.con2(
- _libraryElement,
- source,
- typeProvider,
- errorListener);
+ _libraryElement, source, typeProvider, errorListener);
unit.accept(typeResolverVisitor);
//
// Resolve the rest of the structure
//
InheritanceManager inheritanceManager =
new InheritanceManager(_libraryElement);
- ResolverVisitor resolverVisitor = new ResolverVisitor.con2(
- _libraryElement,
- source,
- typeProvider,
- inheritanceManager,
- errorListener);
+ ResolverVisitor resolverVisitor = new ResolverVisitor.con2(_libraryElement,
+ source, typeProvider, inheritanceManager, errorListener);
unit.accept(resolverVisitor);
//
// Perform additional error checking.
@@ -11316,10 +11039,7 @@
PerformanceStatistics.errors.makeCurrentWhile(() {
ErrorReporter errorReporter = new ErrorReporter(errorListener, source);
ErrorVerifier errorVerifier = new ErrorVerifier(
- errorReporter,
- _libraryElement,
- typeProvider,
- inheritanceManager);
+ errorReporter, _libraryElement, typeProvider, inheritanceManager);
unit.accept(errorVerifier);
// TODO(paulberry): as a temporary workaround for issue 21572,
// ConstantVerifier is being run right after ConstantValueComputer, so we
@@ -11343,8 +11063,8 @@
* @param unitSource the source for the compilation unit whose element is to be returned
* @return the element representing the compilation unit
*/
- CompilationUnitElement _find(LibraryElement libraryElement,
- Source unitSource) {
+ CompilationUnitElement _find(
+ LibraryElement libraryElement, Source unitSource) {
CompilationUnitElement element = libraryElement.definingCompilationUnit;
if (element.source == unitSource) {
return element;
@@ -11437,8 +11157,8 @@
//
// Validate the directives
//
- _unit.accept(
- new RecursiveXmlVisitor_ResolveHtmlTask_internalPerform(this, errorListener));
+ _unit.accept(new RecursiveXmlVisitor_ResolveHtmlTask_internalPerform(
+ this, errorListener));
//
// Record all resolution errors.
//
@@ -11558,16 +11278,15 @@
PerformanceStatistics.scan.makeCurrentWhile(() {
RecordingErrorListener errorListener = new RecordingErrorListener();
try {
- Scanner scanner =
- new Scanner(source, new CharSequenceReader(_content), errorListener);
+ Scanner scanner = new Scanner(
+ source, new CharSequenceReader(_content), errorListener);
scanner.preserveComments = context.analysisOptions.preserveComments;
_tokenStream = scanner.tokenize();
_lineInfo = new LineInfo(scanner.lineStarts);
_errors = errorListener.getErrorsForSource(source);
} catch (exception, stackTrace) {
throw new AnalysisException(
- "Exception",
- new CaughtException(exception, stackTrace));
+ "Exception", new CaughtException(exception, stackTrace));
}
});
}
@@ -11629,8 +11348,7 @@
*/
static final DataDescriptor<List<AnalysisError>> CONTENT_ERRORS =
new DataDescriptor<List<AnalysisError>>(
- "SourceEntry.CONTENT_ERRORS",
- AnalysisError.NO_ERRORS);
+ "SourceEntry.CONTENT_ERRORS", AnalysisError.NO_ERRORS);
/**
* The data descriptor representing the line information.
@@ -11947,13 +11665,9 @@
needsSeparator =
_writeStateDiffOn(buffer, needsSeparator, "content", CONTENT, oldEntry);
needsSeparator = _writeStateDiffOn(
- buffer,
- needsSeparator,
- "contentErrors",
- CONTENT_ERRORS,
- oldEntry);
- needsSeparator =
- _writeStateDiffOn(buffer, needsSeparator, "lineInfo", LINE_INFO, oldEntry);
+ buffer, needsSeparator, "contentErrors", CONTENT_ERRORS, oldEntry);
+ needsSeparator = _writeStateDiffOn(
+ buffer, needsSeparator, "lineInfo", LINE_INFO, oldEntry);
return needsSeparator;
}
@@ -11997,8 +11711,8 @@
* given [descriptor] to the given bugger, prefixed by the given [label] to
* the given [buffer].
*/
- void _writeStateOn(StringBuffer buffer, String label,
- DataDescriptor descriptor) {
+ void _writeStateOn(
+ StringBuffer buffer, String label, DataDescriptor descriptor) {
CachedResult result = resultMap[descriptor];
buffer.write("; ");
buffer.write(label);
@@ -12012,8 +11726,8 @@
* given [result] to a valid state.
*/
static void countTransition(DataDescriptor descriptor, CachedResult result) {
- Map<CacheState, int> countMap =
- transitionMap.putIfAbsent(descriptor, () => new HashMap<CacheState, int>());
+ Map<CacheState, int> countMap = transitionMap.putIfAbsent(
+ descriptor, () => new HashMap<CacheState, int>());
int count = countMap[result.state];
countMap[result.state] = count == null ? 1 : count + 1;
}
@@ -12054,11 +11768,12 @@
static const SourcePriority HTML = const SourcePriority('HTML', 4);
static const List<SourcePriority> values = const [
- PRIORITY_PART,
- LIBRARY,
- UNKNOWN,
- NORMAL_PART,
- HTML];
+ PRIORITY_PART,
+ LIBRARY,
+ UNKNOWN,
+ NORMAL_PART,
+ HTML
+ ];
const SourcePriority(String name, int ordinal) : super(name, ordinal);
}
@@ -12413,8 +12128,8 @@
* updated, it should be free of side effects so that it doesn't cause
* reentrant changes to the analysis state.
*/
- CancelableFuture<T> computeAsync(Source source, T
- computeValue(SourceEntry sourceEntry)) {
+ CancelableFuture<T> computeAsync(
+ Source source, T computeValue(SourceEntry sourceEntry)) {
if (_context.isDisposed) {
// No further analysis is expected, so return a future that completes
// immediately with AnalysisNotScheduledError.
@@ -12427,9 +12142,9 @@
PendingFuture pendingFuture =
new PendingFuture<T>(_context, source, computeValue);
if (!pendingFuture.evaluate(sourceEntry)) {
- _context._pendingFutureSources.putIfAbsent(
- source,
- () => <PendingFuture>[]).add(pendingFuture);
+ _context._pendingFutureSources
+ .putIfAbsent(source, () => <PendingFuture>[])
+ .add(pendingFuture);
}
return pendingFuture.future;
}
@@ -12451,5 +12166,4 @@
}
}
-class _ElementByIdFinderException {
-}
+class _ElementByIdFinderException {}
diff --git a/pkg/analyzer/lib/src/generated/error.dart b/pkg/analyzer/lib/src/generated/error.dart
index 668fcf4..6566108 100644
--- a/pkg/analyzer/lib/src/generated/error.dart
+++ b/pkg/analyzer/lib/src/generated/error.dart
@@ -28,16 +28,15 @@
* A [Comparator] that sorts by the name of the file that the [AnalysisError] was
* found.
*/
- static Comparator<AnalysisError> FILE_COMPARATOR =
- (AnalysisError o1, AnalysisError o2) =>
- o1.source.shortName.compareTo(o2.source.shortName);
+ static Comparator<AnalysisError> FILE_COMPARATOR = (AnalysisError o1,
+ AnalysisError o2) => o1.source.shortName.compareTo(o2.source.shortName);
/**
* A [Comparator] that sorts error codes first by their severity (errors first, warnings
* second), and then by the the error code type.
*/
- static Comparator<AnalysisError> ERROR_CODE_COMPARATOR =
- (AnalysisError o1, AnalysisError o2) {
+ static Comparator<AnalysisError> ERROR_CODE_COMPARATOR = (AnalysisError o1,
+ AnalysisError o2) {
ErrorCode errorCode1 = o1.errorCode;
ErrorCode errorCode2 = o2.errorCode;
ErrorSeverity errorSeverity1 = errorCode1.errorSeverity;
@@ -252,8 +251,8 @@
* @param errorCode the error code to be associated with this error
* @param arguments the arguments used to build the error message
*/
- AnalysisErrorWithProperties.con1(Source source, ErrorCode errorCode,
- List<Object> arguments)
+ AnalysisErrorWithProperties.con1(
+ Source source, ErrorCode errorCode, List<Object> arguments)
: super.con1(source, errorCode, arguments);
/**
@@ -327,8 +326,7 @@
* 12.11.2 Const: It is a compile-time error if evaluation of a constant
* object results in an uncaught exception being thrown.
*/
- static const CheckedModeCompileTimeErrorCode
- CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH =
+ static const CheckedModeCompileTimeErrorCode CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH =
const CheckedModeCompileTimeErrorCode(
'CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH',
"The object type '{0}' cannot be assigned to the field '{1}', which has type '{2}'");
@@ -337,8 +335,7 @@
* 12.11.2 Const: It is a compile-time error if evaluation of a constant
* object results in an uncaught exception being thrown.
*/
- static const CheckedModeCompileTimeErrorCode
- CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH =
+ static const CheckedModeCompileTimeErrorCode CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH =
const CheckedModeCompileTimeErrorCode(
'CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH',
"The object type '{0}' cannot be assigned to a parameter of type '{1}'");
@@ -354,8 +351,7 @@
* @param initializerType the name of the type of the initializer expression
* @param fieldType the name of the type of the field
*/
- static const CheckedModeCompileTimeErrorCode
- CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE =
+ static const CheckedModeCompileTimeErrorCode CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE =
const CheckedModeCompileTimeErrorCode(
'CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE',
"The initializer type '{0}' cannot be assigned to the field type '{1}'");
@@ -373,10 +369,8 @@
* warning if <i>T<sub>j</sub></i> may not be assigned to <i>S<sub>j</sub>,
* 1 <= j <= m</i>.
*/
- static const CheckedModeCompileTimeErrorCode LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
- =
- const CheckedModeCompileTimeErrorCode(
- 'LIST_ELEMENT_TYPE_NOT_ASSIGNABLE',
+ static const CheckedModeCompileTimeErrorCode LIST_ELEMENT_TYPE_NOT_ASSIGNABLE =
+ const CheckedModeCompileTimeErrorCode('LIST_ELEMENT_TYPE_NOT_ASSIGNABLE',
"The element type '{0}' cannot be assigned to the list type '{1}'");
/**
@@ -395,8 +389,7 @@
* <= j <= m</i>.
*/
static const CheckedModeCompileTimeErrorCode MAP_KEY_TYPE_NOT_ASSIGNABLE =
- const CheckedModeCompileTimeErrorCode(
- 'MAP_KEY_TYPE_NOT_ASSIGNABLE',
+ const CheckedModeCompileTimeErrorCode('MAP_KEY_TYPE_NOT_ASSIGNABLE',
"The element type '{0}' cannot be assigned to the map key type '{1}'");
/**
@@ -415,8 +408,7 @@
* <= j <= m</i>.
*/
static const CheckedModeCompileTimeErrorCode MAP_VALUE_TYPE_NOT_ASSIGNABLE =
- const CheckedModeCompileTimeErrorCode(
- 'MAP_VALUE_TYPE_NOT_ASSIGNABLE',
+ const CheckedModeCompileTimeErrorCode('MAP_VALUE_TYPE_NOT_ASSIGNABLE',
"The element type '{0}' cannot be assigned to the map value type '{1}'");
/**
@@ -424,8 +416,7 @@
* object results in an uncaught exception being thrown.
*/
static const CheckedModeCompileTimeErrorCode VARIABLE_TYPE_MISMATCH =
- const CheckedModeCompileTimeErrorCode(
- 'VARIABLE_TYPE_MISMATCH',
+ const CheckedModeCompileTimeErrorCode('VARIABLE_TYPE_MISMATCH',
"The object type '{0}' cannot be assigned to a variable of type '{1}'");
/**
@@ -459,8 +450,7 @@
* enum via 'new' or 'const' or to access its private fields.
*/
static const CompileTimeErrorCode ACCESS_PRIVATE_ENUM_FIELD =
- const CompileTimeErrorCode(
- 'ACCESS_PRIVATE_ENUM_FIELD',
+ const CompileTimeErrorCode('ACCESS_PRIVATE_ENUM_FIELD',
"The private fields of an enum cannot be accessed, even within the same library");
/**
@@ -476,8 +466,7 @@
* found
*/
static const CompileTimeErrorCode AMBIGUOUS_EXPORT =
- const CompileTimeErrorCode(
- 'AMBIGUOUS_EXPORT',
+ const CompileTimeErrorCode('AMBIGUOUS_EXPORT',
"The name '{0}' is defined in the libraries '{1}' and '{2}'");
/**
@@ -489,16 +478,14 @@
*/
static const CompileTimeErrorCode ARGUMENT_DEFINITION_TEST_NON_PARAMETER =
const CompileTimeErrorCode(
- 'ARGUMENT_DEFINITION_TEST_NON_PARAMETER',
- "'{0}' is not a parameter");
+ 'ARGUMENT_DEFINITION_TEST_NON_PARAMETER', "'{0}' is not a parameter");
/**
* ?? Asynchronous For-in: It is a compile-time error if an asynchronous
* for-in statement appears inside a synchronous function.
*/
static const CompileTimeErrorCode ASYNC_FOR_IN_WRONG_CONTEXT =
- const CompileTimeErrorCode(
- 'ASYNC_FOR_IN_WRONG_CONTEXT',
+ const CompileTimeErrorCode('ASYNC_FOR_IN_WRONG_CONTEXT',
"The asynchronous for-in can only be used in a function marked with async or async*");
/**
@@ -506,8 +493,7 @@
* not declared asynchronous.
*/
static const CompileTimeErrorCode AWAIT_IN_WRONG_CONTEXT =
- const CompileTimeErrorCode(
- 'AWAIT_IN_WRONG_CONTEXT',
+ const CompileTimeErrorCode('AWAIT_IN_WRONG_CONTEXT',
"The await expression can only be used in a function marked as async or async*");
/**
@@ -515,8 +501,7 @@
* identifier other than dynamic as a type annotation.
*/
static const CompileTimeErrorCode BUILT_IN_IDENTIFIER_AS_TYPE =
- const CompileTimeErrorCode(
- 'BUILT_IN_IDENTIFIER_AS_TYPE',
+ const CompileTimeErrorCode('BUILT_IN_IDENTIFIER_AS_TYPE',
"The built-in identifier '{0}' cannot be as a type");
/**
@@ -525,8 +510,7 @@
* alias.
*/
static const CompileTimeErrorCode BUILT_IN_IDENTIFIER_AS_TYPE_NAME =
- const CompileTimeErrorCode(
- 'BUILT_IN_IDENTIFIER_AS_TYPE_NAME',
+ const CompileTimeErrorCode('BUILT_IN_IDENTIFIER_AS_TYPE_NAME',
"The built-in identifier '{0}' cannot be used as a type name");
/**
@@ -535,8 +519,7 @@
* alias.
*/
static const CompileTimeErrorCode BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME =
- const CompileTimeErrorCode(
- 'BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME',
+ const CompileTimeErrorCode('BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME',
"The built-in identifier '{0}' cannot be used as a type alias name");
/**
@@ -545,8 +528,7 @@
* alias.
*/
static const CompileTimeErrorCode BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME =
- const CompileTimeErrorCode(
- 'BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME',
+ const CompileTimeErrorCode('BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME',
"The built-in identifier '{0}' cannot be used as a type parameter name");
/**
@@ -554,8 +536,7 @@
* the operator <i>==</i>.
*/
static const CompileTimeErrorCode CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS =
- const CompileTimeErrorCode(
- 'CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS',
+ const CompileTimeErrorCode('CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS',
"The switch case expression type '{0}' cannot override the == operator");
/**
@@ -573,8 +554,7 @@
* method are inherited or not.
*/
static const CompileTimeErrorCode CONFLICTING_GETTER_AND_METHOD =
- const CompileTimeErrorCode(
- 'CONFLICTING_GETTER_AND_METHOD',
+ const CompileTimeErrorCode('CONFLICTING_GETTER_AND_METHOD',
"Class '{0}' cannot have both getter '{1}.{2}' and method with the same name");
/**
@@ -584,8 +564,7 @@
* method are inherited or not.
*/
static const CompileTimeErrorCode CONFLICTING_METHOD_AND_GETTER =
- const CompileTimeErrorCode(
- 'CONFLICTING_METHOD_AND_GETTER',
+ const CompileTimeErrorCode('CONFLICTING_METHOD_AND_GETTER',
"Class '{0}' cannot have both method '{1}.{2}' and getter with the same name");
/**
@@ -595,8 +574,7 @@
* of a member declared in the immediately enclosing class.
*/
static const CompileTimeErrorCode CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD =
- const CompileTimeErrorCode(
- 'CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD',
+ const CompileTimeErrorCode('CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD',
"'{0}' cannot be used to name a constructor and a field in this class");
/**
@@ -606,8 +584,7 @@
* of a member declared in the immediately enclosing class.
*/
static const CompileTimeErrorCode CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD =
- const CompileTimeErrorCode(
- 'CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD',
+ const CompileTimeErrorCode('CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD',
"'{0}' cannot be used to name a constructor and a method in this class");
/**
@@ -616,8 +593,7 @@
* constructors.
*/
static const CompileTimeErrorCode CONFLICTING_TYPE_VARIABLE_AND_CLASS =
- const CompileTimeErrorCode(
- 'CONFLICTING_TYPE_VARIABLE_AND_CLASS',
+ const CompileTimeErrorCode('CONFLICTING_TYPE_VARIABLE_AND_CLASS',
"'{0}' cannot be used to name a type varaible in a class with the same name");
/**
@@ -626,8 +602,7 @@
* constructors.
*/
static const CompileTimeErrorCode CONFLICTING_TYPE_VARIABLE_AND_MEMBER =
- const CompileTimeErrorCode(
- 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
+ const CompileTimeErrorCode('CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
"'{0}' cannot be used to name a type varaible and member in this class");
/**
@@ -635,8 +610,7 @@
* object results in an uncaught exception being thrown.
*/
static const CompileTimeErrorCode CONST_CONSTRUCTOR_THROWS_EXCEPTION =
- const CompileTimeErrorCode(
- 'CONST_CONSTRUCTOR_THROWS_EXCEPTION',
+ const CompileTimeErrorCode('CONST_CONSTRUCTOR_THROWS_EXCEPTION',
"'const' constructors cannot throw exceptions");
/**
@@ -644,8 +618,7 @@
* constructor is declared by a class C if any instance variable declared in C
* is initialized with an expression that is not a constant expression.
*/
- static const CompileTimeErrorCode
- CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST =
+ static const CompileTimeErrorCode CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST =
const CompileTimeErrorCode(
'CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST',
"Can't define the 'const' constructor because the field '{0}' is initialized with a non-constant value");
@@ -660,8 +633,7 @@
* constructor named ... is declared.
*/
static const CompileTimeErrorCode CONST_CONSTRUCTOR_WITH_MIXIN =
- const CompileTimeErrorCode(
- 'CONST_CONSTRUCTOR_WITH_MIXIN',
+ const CompileTimeErrorCode('CONST_CONSTRUCTOR_WITH_MIXIN',
"Constant constructor cannot be declared for a class with a mixin");
/**
@@ -671,8 +643,7 @@
* enclosing class or a compile-time error occurs.
*/
static const CompileTimeErrorCode CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER =
- const CompileTimeErrorCode(
- 'CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER',
+ const CompileTimeErrorCode('CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER',
"Constant constructor cannot call non-constant super constructor of '{0}'");
/**
@@ -682,16 +653,14 @@
* The above refers to both locally declared and inherited instance variables.
*/
static const CompileTimeErrorCode CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD =
- const CompileTimeErrorCode(
- 'CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD',
+ const CompileTimeErrorCode('CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD',
"Cannot define the 'const' constructor for a class with non-final fields");
/**
* 12.12.2 Const: It is a compile-time error if <i>T</i> is a deferred type.
*/
static const CompileTimeErrorCode CONST_DEFERRED_CLASS =
- const CompileTimeErrorCode(
- 'CONST_DEFERRED_CLASS',
+ const CompileTimeErrorCode('CONST_DEFERRED_CLASS',
"Deferred classes cannot be created with 'const'");
/**
@@ -700,16 +669,14 @@
*/
static const CompileTimeErrorCode CONST_FORMAL_PARAMETER =
const CompileTimeErrorCode(
- 'CONST_FORMAL_PARAMETER',
- "Parameters cannot be 'const'");
+ 'CONST_FORMAL_PARAMETER', "Parameters cannot be 'const'");
/**
* 5 Variables: A constant variable must be initialized to a compile-time
* constant or a compile-time error occurs.
*/
static const CompileTimeErrorCode CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE =
- const CompileTimeErrorCode(
- 'CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE',
+ const CompileTimeErrorCode('CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE',
"'const' variables must be constant value");
/**
@@ -719,8 +686,7 @@
* 12.1 Constants: A qualified reference to a static constant variable that is
* not qualified by a deferred prefix.
*/
- static const CompileTimeErrorCode
- CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY =
+ static const CompileTimeErrorCode CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY =
const CompileTimeErrorCode(
'CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY',
"Constant values from a deferred library cannot be used to initialized a 'const' variable");
@@ -730,8 +696,7 @@
* is declared to be constant.
*/
static const CompileTimeErrorCode CONST_INSTANCE_FIELD =
- const CompileTimeErrorCode(
- 'CONST_INSTANCE_FIELD',
+ const CompileTimeErrorCode('CONST_INSTANCE_FIELD',
"Only static fields can be declared as 'const'");
/**
@@ -739,8 +704,7 @@
* map literal is an instance of a class that implements the operator
* <i>==</i> unless the key is a string or integer.
*/
- static const CompileTimeErrorCode
- CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS =
+ static const CompileTimeErrorCode CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS =
const CompileTimeErrorCode(
'CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS',
"The constant map entry key expression type '{0}' cannot override the == operator");
@@ -752,8 +716,7 @@
* @param name the name of the uninitialized final variable
*/
static const CompileTimeErrorCode CONST_NOT_INITIALIZED =
- const CompileTimeErrorCode(
- 'CONST_NOT_INITIALIZED',
+ const CompileTimeErrorCode('CONST_NOT_INITIALIZED',
"The const variable '{0}' must be initialized");
/**
@@ -763,8 +726,7 @@
*/
static const CompileTimeErrorCode CONST_EVAL_TYPE_BOOL =
const CompileTimeErrorCode(
- 'CONST_EVAL_TYPE_BOOL',
- "An expression of type 'bool' was expected");
+ 'CONST_EVAL_TYPE_BOOL', "An expression of type 'bool' was expected");
/**
* 12.11.2 Const: An expression of one of the forms e1 == e2 or e1 != e2 where
@@ -772,8 +734,7 @@
* boolean value or to null.
*/
static const CompileTimeErrorCode CONST_EVAL_TYPE_BOOL_NUM_STRING =
- const CompileTimeErrorCode(
- 'CONST_EVAL_TYPE_BOOL_NUM_STRING',
+ const CompileTimeErrorCode('CONST_EVAL_TYPE_BOOL_NUM_STRING',
"An expression of type 'bool', 'num', 'String' or 'null' was expected");
/**
@@ -783,8 +744,7 @@
*/
static const CompileTimeErrorCode CONST_EVAL_TYPE_INT =
const CompileTimeErrorCode(
- 'CONST_EVAL_TYPE_INT',
- "An expression of type 'int' was expected");
+ 'CONST_EVAL_TYPE_INT', "An expression of type 'int' was expected");
/**
* 12.11.2 Const: An expression of one of the forms e, e1 + e2, e1 - e2, e1 *
@@ -794,16 +754,14 @@
*/
static const CompileTimeErrorCode CONST_EVAL_TYPE_NUM =
const CompileTimeErrorCode(
- 'CONST_EVAL_TYPE_NUM',
- "An expression of type 'num' was expected");
+ 'CONST_EVAL_TYPE_NUM', "An expression of type 'num' was expected");
/**
* 12.11.2 Const: It is a compile-time error if evaluation of a constant
* object results in an uncaught exception being thrown.
*/
static const CompileTimeErrorCode CONST_EVAL_THROWS_EXCEPTION =
- const CompileTimeErrorCode(
- 'CONST_EVAL_THROWS_EXCEPTION',
+ const CompileTimeErrorCode('CONST_EVAL_THROWS_EXCEPTION',
"Evaluation of this constant expression causes exception");
/**
@@ -811,8 +769,7 @@
* object results in an uncaught exception being thrown.
*/
static const CompileTimeErrorCode CONST_EVAL_THROWS_IDBZE =
- const CompileTimeErrorCode(
- 'CONST_EVAL_THROWS_IDBZE',
+ const CompileTimeErrorCode('CONST_EVAL_THROWS_IDBZE',
"Evaluation of this constant expression throws IntegerDivisionByZeroException");
/**
@@ -827,8 +784,7 @@
* [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS].
*/
static const CompileTimeErrorCode CONST_WITH_INVALID_TYPE_PARAMETERS =
- const CompileTimeErrorCode(
- 'CONST_WITH_INVALID_TYPE_PARAMETERS',
+ const CompileTimeErrorCode('CONST_WITH_INVALID_TYPE_PARAMETERS',
"The type '{0}' is declared with {1} type parameters, but {2} type arguments were given");
/**
@@ -839,8 +795,7 @@
* the declaration of <i>T</i>.
*/
static const CompileTimeErrorCode CONST_WITH_NON_CONST =
- const CompileTimeErrorCode(
- 'CONST_WITH_NON_CONST',
+ const CompileTimeErrorCode('CONST_WITH_NON_CONST',
"The constructor being called is not a 'const' constructor");
/**
@@ -849,8 +804,7 @@
* expression.
*/
static const CompileTimeErrorCode CONST_WITH_NON_CONSTANT_ARGUMENT =
- const CompileTimeErrorCode(
- 'CONST_WITH_NON_CONSTANT_ARGUMENT',
+ const CompileTimeErrorCode('CONST_WITH_NON_CONSTANT_ARGUMENT',
"Arguments of a constant creation must be constant expressions");
/**
@@ -867,16 +821,14 @@
*/
static const CompileTimeErrorCode CONST_WITH_NON_TYPE =
const CompileTimeErrorCode(
- 'CONST_WITH_NON_TYPE',
- "The name '{0}' is not a class");
+ 'CONST_WITH_NON_TYPE', "The name '{0}' is not a class");
/**
* 12.11.2 Const: It is a compile-time error if <i>T</i> includes any type
* parameters.
*/
static const CompileTimeErrorCode CONST_WITH_TYPE_PARAMETERS =
- const CompileTimeErrorCode(
- 'CONST_WITH_TYPE_PARAMETERS',
+ const CompileTimeErrorCode('CONST_WITH_TYPE_PARAMETERS',
"The constant creation cannot use a type parameter");
/**
@@ -887,8 +839,7 @@
* @param constructorName the name of the requested constant constructor
*/
static const CompileTimeErrorCode CONST_WITH_UNDEFINED_CONSTRUCTOR =
- const CompileTimeErrorCode(
- 'CONST_WITH_UNDEFINED_CONSTRUCTOR',
+ const CompileTimeErrorCode('CONST_WITH_UNDEFINED_CONSTRUCTOR',
"The class '{0}' does not have a constant constructor '{1}'");
/**
@@ -898,8 +849,7 @@
* @param typeName the name of the type
*/
static const CompileTimeErrorCode CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT =
- const CompileTimeErrorCode(
- 'CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
+ const CompileTimeErrorCode('CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
"The class '{0}' does not have a default constant constructor");
/**
@@ -907,8 +857,7 @@
* specified in the signature of a function type alias.
*/
static const CompileTimeErrorCode DEFAULT_VALUE_IN_FUNCTION_TYPE_ALIAS =
- const CompileTimeErrorCode(
- 'DEFAULT_VALUE_IN_FUNCTION_TYPE_ALIAS',
+ const CompileTimeErrorCode('DEFAULT_VALUE_IN_FUNCTION_TYPE_ALIAS',
"Default values aren't allowed in typedefs");
/**
@@ -918,16 +867,14 @@
* function type.
*/
static const CompileTimeErrorCode DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER =
- const CompileTimeErrorCode(
- 'DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER',
+ const CompileTimeErrorCode('DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER',
"Default values aren't allowed in function type parameters");
/**
* 7.6.2 Factories: It is a compile-time error if <i>k</i> explicitly
* specifies a default value for an optional parameter.
*/
- static const CompileTimeErrorCode
- DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR =
+ static const CompileTimeErrorCode DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR =
const CompileTimeErrorCode(
'DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR',
"Default values aren't allowed in factory constructors that redirect to another constructor");
@@ -937,8 +884,7 @@
* with the same name declared in the same scope.
*/
static const CompileTimeErrorCode DUPLICATE_CONSTRUCTOR_DEFAULT =
- const CompileTimeErrorCode(
- 'DUPLICATE_CONSTRUCTOR_DEFAULT',
+ const CompileTimeErrorCode('DUPLICATE_CONSTRUCTOR_DEFAULT',
"The default constructor is already defined");
/**
@@ -948,8 +894,7 @@
* @param duplicateName the name of the duplicate entity
*/
static const CompileTimeErrorCode DUPLICATE_CONSTRUCTOR_NAME =
- const CompileTimeErrorCode(
- 'DUPLICATE_CONSTRUCTOR_NAME',
+ const CompileTimeErrorCode('DUPLICATE_CONSTRUCTOR_NAME',
"The constructor with name '{0}' is already defined");
/**
@@ -966,8 +911,7 @@
*/
static const CompileTimeErrorCode DUPLICATE_DEFINITION =
const CompileTimeErrorCode(
- 'DUPLICATE_DEFINITION',
- "The name '{0}' is already defined");
+ 'DUPLICATE_DEFINITION', "The name '{0}' is already defined");
/**
* 7. Classes: It is a compile-time error if a class has an instance member
@@ -982,8 +926,7 @@
* See [DUPLICATE_DEFINITION].
*/
static const CompileTimeErrorCode DUPLICATE_DEFINITION_INHERITANCE =
- const CompileTimeErrorCode(
- 'DUPLICATE_DEFINITION_INHERITANCE',
+ const CompileTimeErrorCode('DUPLICATE_DEFINITION_INHERITANCE',
"The name '{0}' is already defined in '{1}'");
/**
@@ -992,8 +935,7 @@
* <i>q<sub>i</sub></i> is the label for a named argument].
*/
static const CompileTimeErrorCode DUPLICATE_NAMED_ARGUMENT =
- const CompileTimeErrorCode(
- 'DUPLICATE_NAMED_ARGUMENT',
+ const CompileTimeErrorCode('DUPLICATE_NAMED_ARGUMENT',
"The argument for the named parameter '{0}' was already specified");
/**
@@ -1002,8 +944,7 @@
* @param uri the uri pointing to a library
*/
static const CompileTimeErrorCode EXPORT_INTERNAL_LIBRARY =
- const CompileTimeErrorCode(
- 'EXPORT_INTERNAL_LIBRARY',
+ const CompileTimeErrorCode('EXPORT_INTERNAL_LIBRARY',
"The library '{0}' is internal and cannot be exported");
/**
@@ -1013,16 +954,15 @@
* @param uri the uri pointing to a non-library declaration
*/
static const CompileTimeErrorCode EXPORT_OF_NON_LIBRARY =
- const CompileTimeErrorCode(
- 'EXPORT_OF_NON_LIBRARY',
+ const CompileTimeErrorCode('EXPORT_OF_NON_LIBRARY',
"The exported library '{0}' must not have a part-of directive");
/**
* Enum proposal: It is a compile-time error to subclass, mix-in or implement
* an enum.
*/
- static const CompileTimeErrorCode EXTENDS_ENUM =
- const CompileTimeErrorCode('EXTENDS_ENUM', "Classes cannot extend an enum");
+ static const CompileTimeErrorCode EXTENDS_ENUM = const CompileTimeErrorCode(
+ 'EXTENDS_ENUM', "Classes cannot extend an enum");
/**
* 7.9 Superclasses: It is a compile-time error if the extends clause of a
@@ -1033,8 +973,7 @@
*/
static const CompileTimeErrorCode EXTENDS_NON_CLASS =
const CompileTimeErrorCode(
- 'EXTENDS_NON_CLASS',
- "Classes can only extend other classes");
+ 'EXTENDS_NON_CLASS', "Classes can only extend other classes");
/**
* 12.2 Null: It is a compile-time error for a class to attempt to extend or
@@ -1061,8 +1000,7 @@
*/
static const CompileTimeErrorCode EXTENDS_DISALLOWED_CLASS =
const CompileTimeErrorCode(
- 'EXTENDS_DISALLOWED_CLASS',
- "Classes cannot extend '{0}'");
+ 'EXTENDS_DISALLOWED_CLASS', "Classes cannot extend '{0}'");
/**
* 7.9 Superclasses: It is a compile-time error if the extends clause of a
@@ -1072,8 +1010,7 @@
* See [IMPLEMENTS_DEFERRED_CLASS], and [MIXIN_DEFERRED_CLASS].
*/
static const CompileTimeErrorCode EXTENDS_DEFERRED_CLASS =
- const CompileTimeErrorCode(
- 'EXTENDS_DEFERRED_CLASS',
+ const CompileTimeErrorCode('EXTENDS_DEFERRED_CLASS',
"This class cannot extend the deferred class '{0}'");
/**
@@ -1087,8 +1024,7 @@
* @param argumentCount the actual number of positional arguments given
*/
static const CompileTimeErrorCode EXTRA_POSITIONAL_ARGUMENTS =
- const CompileTimeErrorCode(
- 'EXTRA_POSITIONAL_ARGUMENTS',
+ const CompileTimeErrorCode('EXTRA_POSITIONAL_ARGUMENTS',
"{0} positional arguments expected, but {1} found");
/**
@@ -1097,8 +1033,7 @@
* given instance variable appears in <i>k</i>'s list.
*/
static const CompileTimeErrorCode FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS =
- const CompileTimeErrorCode(
- 'FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS',
+ const CompileTimeErrorCode('FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS',
"The field '{0}' cannot be initialized twice in the same constructor");
/**
@@ -1107,8 +1042,7 @@
* initializer for a variable that is initialized by means of an initializing
* formal of <i>k</i>.
*/
- static const CompileTimeErrorCode
- FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER =
+ static const CompileTimeErrorCode FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER =
const CompileTimeErrorCode(
'FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER',
"Fields cannot be initialized in both the parameter list and the initializers");
@@ -1121,8 +1055,7 @@
* @param name the name of the field in question
*/
static const CompileTimeErrorCode FINAL_INITIALIZED_MULTIPLE_TIMES =
- const CompileTimeErrorCode(
- 'FINAL_INITIALIZED_MULTIPLE_TIMES',
+ const CompileTimeErrorCode('FINAL_INITIALIZED_MULTIPLE_TIMES',
"'{0}' is a final field and so can only be set once");
/**
@@ -1131,8 +1064,7 @@
* generative constructor.
*/
static const CompileTimeErrorCode FIELD_INITIALIZER_FACTORY_CONSTRUCTOR =
- const CompileTimeErrorCode(
- 'FIELD_INITIALIZER_FACTORY_CONSTRUCTOR',
+ const CompileTimeErrorCode('FIELD_INITIALIZER_FACTORY_CONSTRUCTOR',
"Initializing formal fields cannot be used in factory constructors");
/**
@@ -1141,8 +1073,7 @@
* generative constructor.
*/
static const CompileTimeErrorCode FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR =
- const CompileTimeErrorCode(
- 'FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
+ const CompileTimeErrorCode('FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
"Initializing formal fields can only be used in constructors");
/**
@@ -1154,8 +1085,7 @@
* generative constructor.
*/
static const CompileTimeErrorCode FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR =
- const CompileTimeErrorCode(
- 'FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR',
+ const CompileTimeErrorCode('FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR',
"The redirecting constructor cannot have a field initializer");
/**
@@ -1165,8 +1095,7 @@
* @param name the conflicting name of the getter and method
*/
static const CompileTimeErrorCode GETTER_AND_METHOD_WITH_SAME_NAME =
- const CompileTimeErrorCode(
- 'GETTER_AND_METHOD_WITH_SAME_NAME',
+ const CompileTimeErrorCode('GETTER_AND_METHOD_WITH_SAME_NAME',
"'{0}' cannot be used to name a getter, there is already a method with the same name");
/**
@@ -1178,8 +1107,7 @@
* See [EXTENDS_DEFERRED_CLASS], and [MIXIN_DEFERRED_CLASS].
*/
static const CompileTimeErrorCode IMPLEMENTS_DEFERRED_CLASS =
- const CompileTimeErrorCode(
- 'IMPLEMENTS_DEFERRED_CLASS',
+ const CompileTimeErrorCode('IMPLEMENTS_DEFERRED_CLASS',
"This class cannot implement the deferred class '{0}'");
/**
@@ -1207,8 +1135,7 @@
*/
static const CompileTimeErrorCode IMPLEMENTS_DISALLOWED_CLASS =
const CompileTimeErrorCode(
- 'IMPLEMENTS_DISALLOWED_CLASS',
- "Classes cannot implement '{0}'");
+ 'IMPLEMENTS_DISALLOWED_CLASS', "Classes cannot implement '{0}'");
/**
* 7.10 Superinterfaces: It is a compile-time error if the implements clause
@@ -1216,8 +1143,7 @@
*/
static const CompileTimeErrorCode IMPLEMENTS_DYNAMIC =
const CompileTimeErrorCode(
- 'IMPLEMENTS_DYNAMIC',
- "Classes cannot implement 'dynamic'");
+ 'IMPLEMENTS_DYNAMIC', "Classes cannot implement 'dynamic'");
/**
* Enum proposal: It is a compile-time error to subclass, mix-in or implement
@@ -1225,8 +1151,7 @@
*/
static const CompileTimeErrorCode IMPLEMENTS_ENUM =
const CompileTimeErrorCode(
- 'IMPLEMENTS_ENUM',
- "Classes cannot implement an enum");
+ 'IMPLEMENTS_ENUM', "Classes cannot implement an enum");
/**
* 7.10 Superinterfaces: It is a compile-time error if the implements clause
@@ -1237,8 +1162,7 @@
*/
static const CompileTimeErrorCode IMPLEMENTS_NON_CLASS =
const CompileTimeErrorCode(
- 'IMPLEMENTS_NON_CLASS',
- "Classes can only implement other classes");
+ 'IMPLEMENTS_NON_CLASS', "Classes can only implement other classes");
/**
* 7.10 Superinterfaces: It is a compile-time error if a type <i>T</i> appears
@@ -1248,8 +1172,7 @@
*/
static const CompileTimeErrorCode IMPLEMENTS_REPEATED =
const CompileTimeErrorCode(
- 'IMPLEMENTS_REPEATED',
- "'{0}' can only be implemented once");
+ 'IMPLEMENTS_REPEATED', "'{0}' can only be implemented once");
/**
* 7.10 Superinterfaces: It is a compile-time error if the superclass of a
@@ -1259,8 +1182,7 @@
* "implements" clauses
*/
static const CompileTimeErrorCode IMPLEMENTS_SUPER_CLASS =
- const CompileTimeErrorCode(
- 'IMPLEMENTS_SUPER_CLASS',
+ const CompileTimeErrorCode('IMPLEMENTS_SUPER_CLASS',
"'{0}' cannot be used in both 'extends' and 'implements' clauses");
/**
@@ -1275,8 +1197,7 @@
* @param name the name of the type in question
*/
static const CompileTimeErrorCode IMPLICIT_THIS_REFERENCE_IN_INITIALIZER =
- const CompileTimeErrorCode(
- 'IMPLICIT_THIS_REFERENCE_IN_INITIALIZER',
+ const CompileTimeErrorCode('IMPLICIT_THIS_REFERENCE_IN_INITIALIZER',
"Only static members can be accessed in initializers");
/**
@@ -1285,8 +1206,7 @@
* @param uri the uri pointing to a library
*/
static const CompileTimeErrorCode IMPORT_INTERNAL_LIBRARY =
- const CompileTimeErrorCode(
- 'IMPORT_INTERNAL_LIBRARY',
+ const CompileTimeErrorCode('IMPORT_INTERNAL_LIBRARY',
"The library '{0}' is internal and cannot be imported");
/**
@@ -1297,8 +1217,7 @@
* See [StaticWarningCode.IMPORT_OF_NON_LIBRARY].
*/
static const CompileTimeErrorCode IMPORT_OF_NON_LIBRARY =
- const CompileTimeErrorCode(
- 'IMPORT_OF_NON_LIBRARY',
+ const CompileTimeErrorCode('IMPORT_OF_NON_LIBRARY',
"The imported library '{0}' must not have a part-of directive");
/**
@@ -1311,8 +1230,7 @@
* @param expectedType the name of the expected type
*/
static const CompileTimeErrorCode INCONSISTENT_CASE_EXPRESSION_TYPES =
- const CompileTimeErrorCode(
- 'INCONSISTENT_CASE_EXPRESSION_TYPES',
+ const CompileTimeErrorCode('INCONSISTENT_CASE_EXPRESSION_TYPES',
"Case expressions must have the same types, '{0}' is not a '{1}'");
/**
@@ -1326,8 +1244,7 @@
* See [INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD].
*/
static const CompileTimeErrorCode INITIALIZER_FOR_NON_EXISTENT_FIELD =
- const CompileTimeErrorCode(
- 'INITIALIZER_FOR_NON_EXISTENT_FIELD',
+ const CompileTimeErrorCode('INITIALIZER_FOR_NON_EXISTENT_FIELD',
"'{0}' is not a variable in the enclosing class");
/**
@@ -1341,8 +1258,7 @@
* See [INITIALIZING_FORMAL_FOR_STATIC_FIELD].
*/
static const CompileTimeErrorCode INITIALIZER_FOR_STATIC_FIELD =
- const CompileTimeErrorCode(
- 'INITIALIZER_FOR_STATIC_FIELD',
+ const CompileTimeErrorCode('INITIALIZER_FOR_STATIC_FIELD',
"'{0}' is a static variable in the enclosing class, variables initialized in a constructor cannot be static");
/**
@@ -1356,8 +1272,7 @@
* [INITIALIZER_FOR_NON_EXISTENT_FIELD].
*/
static const CompileTimeErrorCode INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD =
- const CompileTimeErrorCode(
- 'INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD',
+ const CompileTimeErrorCode('INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD',
"'{0}' is not a variable in the enclosing class");
/**
@@ -1370,8 +1285,7 @@
* See [INITIALIZER_FOR_STATIC_FIELD].
*/
static const CompileTimeErrorCode INITIALIZING_FORMAL_FOR_STATIC_FIELD =
- const CompileTimeErrorCode(
- 'INITIALIZING_FORMAL_FOR_STATIC_FIELD',
+ const CompileTimeErrorCode('INITIALIZING_FORMAL_FOR_STATIC_FIELD',
"'{0}' is a static field in the enclosing class, fields initialized in a constructor cannot be static");
/**
@@ -1379,8 +1293,7 @@
* extraction <b>this</b>.<i>id</i>.
*/
static const CompileTimeErrorCode INSTANCE_MEMBER_ACCESS_FROM_FACTORY =
- const CompileTimeErrorCode(
- 'INSTANCE_MEMBER_ACCESS_FROM_FACTORY',
+ const CompileTimeErrorCode('INSTANCE_MEMBER_ACCESS_FROM_FACTORY',
"Instance members cannot be accessed from a factory constructor");
/**
@@ -1388,8 +1301,7 @@
* extraction <b>this</b>.<i>id</i>.
*/
static const CompileTimeErrorCode INSTANCE_MEMBER_ACCESS_FROM_STATIC =
- const CompileTimeErrorCode(
- 'INSTANCE_MEMBER_ACCESS_FROM_STATIC',
+ const CompileTimeErrorCode('INSTANCE_MEMBER_ACCESS_FROM_STATIC',
"Instance members cannot be accessed from a static method");
/**
@@ -1397,7 +1309,8 @@
* enum via 'new' or 'const' or to access its private fields.
*/
static const CompileTimeErrorCode INSTANTIATE_ENUM =
- const CompileTimeErrorCode('INSTANTIATE_ENUM', "Enums cannot be instantiated");
+ const CompileTimeErrorCode(
+ 'INSTANTIATE_ENUM', "Enums cannot be instantiated");
/**
* 11 Metadata: Metadata consists of a series of annotations, each of which
@@ -1405,10 +1318,9 @@
* either a reference to a compile-time constant variable, or a call to a
* constant constructor.
*/
- static const CompileTimeErrorCode INVALID_ANNOTATION =
- const CompileTimeErrorCode(
- 'INVALID_ANNOTATION',
- "Annotation can be only constant variable or constant constructor invocation");
+ static const CompileTimeErrorCode INVALID_ANNOTATION = const CompileTimeErrorCode(
+ 'INVALID_ANNOTATION',
+ "Annotation can be only constant variable or constant constructor invocation");
/**
* 11 Metadata: Metadata consists of a series of annotations, each of which
@@ -1420,8 +1332,7 @@
* not qualified by a deferred prefix.
*/
static const CompileTimeErrorCode INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY =
- const CompileTimeErrorCode(
- 'INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY',
+ const CompileTimeErrorCode('INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY',
"Constant values from a deferred library cannot be used as annotations");
/**
@@ -1430,8 +1341,7 @@
* body marked with either async, async* or sync*.
*/
static const CompileTimeErrorCode INVALID_IDENTIFIER_IN_ASYNC =
- const CompileTimeErrorCode(
- 'INVALID_IDENTIFIER_IN_ASYNC',
+ const CompileTimeErrorCode('INVALID_IDENTIFIER_IN_ASYNC',
"The identifier '{0}' cannot be used in a function marked with async, async* or sync*");
/**
@@ -1439,8 +1349,7 @@
* modifier is attached to the body of a setter or constructor.
*/
static const CompileTimeErrorCode INVALID_MODIFIER_ON_CONSTRUCTOR =
- const CompileTimeErrorCode(
- 'INVALID_MODIFIER_ON_CONSTRUCTOR',
+ const CompileTimeErrorCode('INVALID_MODIFIER_ON_CONSTRUCTOR',
"The modifier '{0}' cannot be applied to the body of a constructor");
/**
@@ -1448,8 +1357,7 @@
* modifier is attached to the body of a setter or constructor.
*/
static const CompileTimeErrorCode INVALID_MODIFIER_ON_SETTER =
- const CompileTimeErrorCode(
- 'INVALID_MODIFIER_ON_SETTER',
+ const CompileTimeErrorCode('INVALID_MODIFIER_ON_SETTER',
"The modifier '{0}' cannot be applied to the body of a setter");
/**
@@ -1468,16 +1376,14 @@
*/
static const CompileTimeErrorCode INVALID_CONSTRUCTOR_NAME =
const CompileTimeErrorCode(
- 'INVALID_CONSTRUCTOR_NAME',
- "Invalid constructor name");
+ 'INVALID_CONSTRUCTOR_NAME', "Invalid constructor name");
/**
* 7.6.2 Factories: It is a compile-time error if <i>M</i> is not the name of
* the immediately enclosing class.
*/
static const CompileTimeErrorCode INVALID_FACTORY_NAME_NOT_A_CLASS =
- const CompileTimeErrorCode(
- 'INVALID_FACTORY_NAME_NOT_A_CLASS',
+ const CompileTimeErrorCode('INVALID_FACTORY_NAME_NOT_A_CLASS',
"The name of the immediately enclosing class expected");
/**
@@ -1487,8 +1393,7 @@
* variable.
*/
static const CompileTimeErrorCode INVALID_REFERENCE_TO_THIS =
- const CompileTimeErrorCode(
- 'INVALID_REFERENCE_TO_THIS',
+ const CompileTimeErrorCode('INVALID_REFERENCE_TO_THIS',
"Invalid reference to 'this' expression");
/**
@@ -1498,8 +1403,7 @@
* @name the name of the type parameter
*/
static const CompileTimeErrorCode INVALID_TYPE_ARGUMENT_IN_CONST_LIST =
- const CompileTimeErrorCode(
- 'INVALID_TYPE_ARGUMENT_IN_CONST_LIST',
+ const CompileTimeErrorCode('INVALID_TYPE_ARGUMENT_IN_CONST_LIST',
"Constant list literals cannot include a type parameter as a type argument, such as '{0}'");
/**
@@ -1509,8 +1413,7 @@
* @name the name of the type parameter
*/
static const CompileTimeErrorCode INVALID_TYPE_ARGUMENT_IN_CONST_MAP =
- const CompileTimeErrorCode(
- 'INVALID_TYPE_ARGUMENT_IN_CONST_MAP',
+ const CompileTimeErrorCode('INVALID_TYPE_ARGUMENT_IN_CONST_MAP',
"Constant map literals cannot include a type parameter as a type argument, such as '{0}'");
/**
@@ -1541,8 +1444,7 @@
* @param labelName the name of the unresolvable label
*/
static const CompileTimeErrorCode LABEL_IN_OUTER_SCOPE =
- const CompileTimeErrorCode(
- 'LABEL_IN_OUTER_SCOPE',
+ const CompileTimeErrorCode('LABEL_IN_OUTER_SCOPE',
"Cannot reference label '{0}' declared in an outer method");
/**
@@ -1558,16 +1460,14 @@
*/
static const CompileTimeErrorCode LABEL_UNDEFINED =
const CompileTimeErrorCode(
- 'LABEL_UNDEFINED',
- "Cannot reference undefined label '{0}'");
+ 'LABEL_UNDEFINED', "Cannot reference undefined label '{0}'");
/**
* 7 Classes: It is a compile time error if a class <i>C</i> declares a member
* with the same name as <i>C</i>.
*/
static const CompileTimeErrorCode MEMBER_WITH_CLASS_NAME =
- const CompileTimeErrorCode(
- 'MEMBER_WITH_CLASS_NAME',
+ const CompileTimeErrorCode('MEMBER_WITH_CLASS_NAME',
"Class members cannot have the same name as the enclosing class");
/**
@@ -1577,24 +1477,21 @@
* @param name the conflicting name of the getter and method
*/
static const CompileTimeErrorCode METHOD_AND_GETTER_WITH_SAME_NAME =
- const CompileTimeErrorCode(
- 'METHOD_AND_GETTER_WITH_SAME_NAME',
+ const CompileTimeErrorCode('METHOD_AND_GETTER_WITH_SAME_NAME',
"'{0}' cannot be used to name a method, there is already a getter with the same name");
/**
* 12.1 Constants: A constant expression is ... a constant list literal.
*/
static const CompileTimeErrorCode MISSING_CONST_IN_LIST_LITERAL =
- const CompileTimeErrorCode(
- 'MISSING_CONST_IN_LIST_LITERAL',
+ const CompileTimeErrorCode('MISSING_CONST_IN_LIST_LITERAL',
"List literals must be prefixed with 'const' when used as a constant expression");
/**
* 12.1 Constants: A constant expression is ... a constant map literal.
*/
static const CompileTimeErrorCode MISSING_CONST_IN_MAP_LITERAL =
- const CompileTimeErrorCode(
- 'MISSING_CONST_IN_MAP_LITERAL',
+ const CompileTimeErrorCode('MISSING_CONST_IN_MAP_LITERAL',
"Map literals must be prefixed with 'const' when used as a constant expression");
/**
@@ -1609,8 +1506,7 @@
* @param constantName the name of the constant that is missing
*/
static const CompileTimeErrorCode MISSING_ENUM_CONSTANT_IN_SWITCH =
- const CompileTimeErrorCode(
- 'MISSING_ENUM_CONSTANT_IN_SWITCH',
+ const CompileTimeErrorCode('MISSING_ENUM_CONSTANT_IN_SWITCH',
"Missing case clause for '{0}'",
"Add a case clause for the missing constant or add a default clause.");
@@ -1621,8 +1517,7 @@
* @param typeName the name of the mixin that is invalid
*/
static const CompileTimeErrorCode MIXIN_DECLARES_CONSTRUCTOR =
- const CompileTimeErrorCode(
- 'MIXIN_DECLARES_CONSTRUCTOR',
+ const CompileTimeErrorCode('MIXIN_DECLARES_CONSTRUCTOR',
"The class '{0}' cannot be used as a mixin because it declares a constructor");
/**
@@ -1633,8 +1528,7 @@
* See [EXTENDS_DEFERRED_CLASS], and [IMPLEMENTS_DEFERRED_CLASS].
*/
static const CompileTimeErrorCode MIXIN_DEFERRED_CLASS =
- const CompileTimeErrorCode(
- 'MIXIN_DEFERRED_CLASS',
+ const CompileTimeErrorCode('MIXIN_DEFERRED_CLASS',
"This class cannot mixin the deferred class '{0}'");
/**
@@ -1645,10 +1539,9 @@
* https://code.google.com/p/dart/issues/detail?id=15101#c4
*/
static const CompileTimeErrorCode MIXIN_HAS_NO_CONSTRUCTORS =
- const CompileTimeErrorCode(
- 'MIXIN_HAS_NO_CONSTRUCTORS',
+ const CompileTimeErrorCode('MIXIN_HAS_NO_CONSTRUCTORS',
"This mixin application is invalid because all of the constructors "
- "in the base class '{0}' have optional parameters.");
+ "in the base class '{0}' have optional parameters.");
/**
* 9 Mixins: It is a compile-time error if a mixin is derived from a class
@@ -1657,8 +1550,7 @@
* @param typeName the name of the mixin that is invalid
*/
static const CompileTimeErrorCode MIXIN_INHERITS_FROM_NOT_OBJECT =
- const CompileTimeErrorCode(
- 'MIXIN_INHERITS_FROM_NOT_OBJECT',
+ const CompileTimeErrorCode('MIXIN_INHERITS_FROM_NOT_OBJECT',
"The class '{0}' cannot be used as a mixin because it extends a class other than Object");
/**
@@ -1685,15 +1577,14 @@
*/
static const CompileTimeErrorCode MIXIN_OF_DISALLOWED_CLASS =
const CompileTimeErrorCode(
- 'MIXIN_OF_DISALLOWED_CLASS',
- "Classes cannot mixin '{0}'");
+ 'MIXIN_OF_DISALLOWED_CLASS', "Classes cannot mixin '{0}'");
/**
* Enum proposal: It is a compile-time error to subclass, mix-in or implement
* an enum.
*/
- static const CompileTimeErrorCode MIXIN_OF_ENUM =
- const CompileTimeErrorCode('MIXIN_OF_ENUM', "Classes cannot mixin an enum");
+ static const CompileTimeErrorCode MIXIN_OF_ENUM = const CompileTimeErrorCode(
+ 'MIXIN_OF_ENUM', "Classes cannot mixin an enum");
/**
* 9.1 Mixin Application: It is a compile-time error if <i>M</i> does not
@@ -1701,16 +1592,14 @@
*/
static const CompileTimeErrorCode MIXIN_OF_NON_CLASS =
const CompileTimeErrorCode(
- 'MIXIN_OF_NON_CLASS',
- "Classes can only mixin other classes");
+ 'MIXIN_OF_NON_CLASS', "Classes can only mixin other classes");
/**
* 9 Mixins: It is a compile-time error if a declared or derived mixin refers
* to super.
*/
static const CompileTimeErrorCode MIXIN_REFERENCES_SUPER =
- const CompileTimeErrorCode(
- 'MIXIN_REFERENCES_SUPER',
+ const CompileTimeErrorCode('MIXIN_REFERENCES_SUPER',
"The class '{0}' cannot be used as a mixin because it references 'super'");
/**
@@ -1718,18 +1607,15 @@
* denote a class available in the immediately enclosing scope.
*/
static const CompileTimeErrorCode MIXIN_WITH_NON_CLASS_SUPERCLASS =
- const CompileTimeErrorCode(
- 'MIXIN_WITH_NON_CLASS_SUPERCLASS',
+ const CompileTimeErrorCode('MIXIN_WITH_NON_CLASS_SUPERCLASS',
"Mixin can only be applied to class");
/**
* 7.6.1 Generative Constructors: A generative constructor may be redirecting,
* in which case its only action is to invoke another generative constructor.
*/
- static const CompileTimeErrorCode MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS
- =
- const CompileTimeErrorCode(
- 'MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS',
+ static const CompileTimeErrorCode MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS =
+ const CompileTimeErrorCode('MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS',
"Constructor may have at most one 'this' redirection");
/**
@@ -1738,8 +1624,7 @@
* list or a compile time error occurs.
*/
static const CompileTimeErrorCode MULTIPLE_SUPER_INITIALIZERS =
- const CompileTimeErrorCode(
- 'MULTIPLE_SUPER_INITIALIZERS',
+ const CompileTimeErrorCode('MULTIPLE_SUPER_INITIALIZERS',
"Constructor may have at most one 'super' initializer");
/**
@@ -1749,8 +1634,7 @@
* constant constructor.
*/
static const CompileTimeErrorCode NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS =
- const CompileTimeErrorCode(
- 'NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS',
+ const CompileTimeErrorCode('NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS',
"Annotation creation must have arguments");
/**
@@ -1764,8 +1648,7 @@
* <i>S.id</i>)
*/
static const CompileTimeErrorCode NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT =
- const CompileTimeErrorCode(
- 'NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT',
+ const CompileTimeErrorCode('NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT',
"The class '{0}' does not have a default constructor");
/**
@@ -1778,8 +1661,7 @@
* <i>S.id</i>)
*/
static const CompileTimeErrorCode NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT =
- const CompileTimeErrorCode(
- 'NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT',
+ const CompileTimeErrorCode('NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT',
"The class '{0}' does not have a default constructor");
/**
@@ -1788,8 +1670,7 @@
* statement is expected.
*/
static const CompileTimeErrorCode NON_CONST_MAP_AS_EXPRESSION_STATEMENT =
- const CompileTimeErrorCode(
- 'NON_CONST_MAP_AS_EXPRESSION_STATEMENT',
+ const CompileTimeErrorCode('NON_CONST_MAP_AS_EXPRESSION_STATEMENT',
"A non-constant map literal without type arguments cannot be used as an expression statement");
/**
@@ -1805,8 +1686,7 @@
*/
static const CompileTimeErrorCode NON_CONSTANT_CASE_EXPRESSION =
const CompileTimeErrorCode(
- 'NON_CONSTANT_CASE_EXPRESSION',
- "Case expressions must be constant");
+ 'NON_CONSTANT_CASE_EXPRESSION', "Case expressions must be constant");
/**
* 13.9 Switch: Given a switch statement of the form <i>switch (e) {
@@ -1822,8 +1702,7 @@
* 12.1 Constants: A qualified reference to a static constant variable that is
* not qualified by a deferred prefix.
*/
- static const CompileTimeErrorCode
- NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY =
+ static const CompileTimeErrorCode NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY =
const CompileTimeErrorCode(
'NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY',
"Constant values from a deferred library cannot be used as a case expression");
@@ -1833,8 +1712,7 @@
* an optional parameter is not a compile-time constant.
*/
static const CompileTimeErrorCode NON_CONSTANT_DEFAULT_VALUE =
- const CompileTimeErrorCode(
- 'NON_CONSTANT_DEFAULT_VALUE',
+ const CompileTimeErrorCode('NON_CONSTANT_DEFAULT_VALUE',
"Default values of an optional parameter must be constant");
/**
@@ -1844,8 +1722,7 @@
* 12.1 Constants: A qualified reference to a static constant variable that is
* not qualified by a deferred prefix.
*/
- static const CompileTimeErrorCode
- NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY =
+ static const CompileTimeErrorCode NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY =
const CompileTimeErrorCode(
'NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY',
"Constant values from a deferred library cannot be used as a default parameter value");
@@ -1855,8 +1732,7 @@
* literal is not a compile-time constant.
*/
static const CompileTimeErrorCode NON_CONSTANT_LIST_ELEMENT =
- const CompileTimeErrorCode(
- 'NON_CONSTANT_LIST_ELEMENT',
+ const CompileTimeErrorCode('NON_CONSTANT_LIST_ELEMENT',
"'const' lists must have all constant values");
/**
@@ -1866,8 +1742,7 @@
* 12.1 Constants: A qualified reference to a static constant variable that is
* not qualified by a deferred prefix.
*/
- static const CompileTimeErrorCode
- NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY =
+ static const CompileTimeErrorCode NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY =
const CompileTimeErrorCode(
'NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY',
"Constant values from a deferred library cannot be used as values in a 'const' list");
@@ -1878,8 +1753,7 @@
*/
static const CompileTimeErrorCode NON_CONSTANT_MAP_KEY =
const CompileTimeErrorCode(
- 'NON_CONSTANT_MAP_KEY',
- "The keys in a map must be constant");
+ 'NON_CONSTANT_MAP_KEY', "The keys in a map must be constant");
/**
* 12.7 Maps: It is a compile time error if either a key or a value of an
@@ -1889,8 +1763,7 @@
* not qualified by a deferred prefix.
*/
static const CompileTimeErrorCode NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY =
- const CompileTimeErrorCode(
- 'NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY',
+ const CompileTimeErrorCode('NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY',
"Constant values from a deferred library cannot be used as keys in a map");
/**
@@ -1898,8 +1771,7 @@
* entry in a constant map literal is not a compile-time constant.
*/
static const CompileTimeErrorCode NON_CONSTANT_MAP_VALUE =
- const CompileTimeErrorCode(
- 'NON_CONSTANT_MAP_VALUE',
+ const CompileTimeErrorCode('NON_CONSTANT_MAP_VALUE',
"The values in a 'const' map must be constant");
/**
@@ -1909,10 +1781,8 @@
* 12.1 Constants: A qualified reference to a static constant variable that is
* not qualified by a deferred prefix.
*/
- static const CompileTimeErrorCode NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY
- =
- const CompileTimeErrorCode(
- 'NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY',
+ static const CompileTimeErrorCode NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY =
+ const CompileTimeErrorCode('NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY',
"Constant values from a deferred library cannot be used as values in a 'const' map");
/**
@@ -1925,8 +1795,7 @@
* [CompileTimeErrorCode.INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY].
*/
static const CompileTimeErrorCode NON_CONSTANT_ANNOTATION_CONSTRUCTOR =
- const CompileTimeErrorCode(
- 'NON_CONSTANT_ANNOTATION_CONSTRUCTOR',
+ const CompileTimeErrorCode('NON_CONSTANT_ANNOTATION_CONSTRUCTOR',
"Annotation creation can use only 'const' constructor");
/**
@@ -1935,8 +1804,7 @@
* expression, or a compile-time error occurs.
*/
static const CompileTimeErrorCode NON_CONSTANT_VALUE_IN_INITIALIZER =
- const CompileTimeErrorCode(
- 'NON_CONSTANT_VALUE_IN_INITIALIZER',
+ const CompileTimeErrorCode('NON_CONSTANT_VALUE_IN_INITIALIZER',
"Initializer expressions in constant constructors must be constants");
/**
@@ -1947,8 +1815,7 @@
* 12.1 Constants: A qualified reference to a static constant variable that is
* not qualified by a deferred prefix.
*/
- static const CompileTimeErrorCode
- NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFERRED_LIBRARY =
+ static const CompileTimeErrorCode NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFERRED_LIBRARY =
const CompileTimeErrorCode(
'NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFERRED_LIBRARY',
"Constant values from a deferred library cannot be used as constant initializers");
@@ -1964,8 +1831,7 @@
* @param argumentCount the actual number of positional arguments given
*/
static const CompileTimeErrorCode NOT_ENOUGH_REQUIRED_ARGUMENTS =
- const CompileTimeErrorCode(
- 'NOT_ENOUGH_REQUIRED_ARGUMENTS',
+ const CompileTimeErrorCode('NOT_ENOUGH_REQUIRED_ARGUMENTS',
"{0} required argument(s) expected, but {1} found");
/**
@@ -1976,8 +1842,7 @@
* (respectively <i>S.id</i>)
*/
static const CompileTimeErrorCode NON_GENERATIVE_CONSTRUCTOR =
- const CompileTimeErrorCode(
- 'NON_GENERATIVE_CONSTRUCTOR',
+ const CompileTimeErrorCode('NON_GENERATIVE_CONSTRUCTOR',
"The generative constructor '{0}' expected, but factory found");
/**
@@ -1992,8 +1857,7 @@
* parameter in an operator.
*/
static const CompileTimeErrorCode OPTIONAL_PARAMETER_IN_OPERATOR =
- const CompileTimeErrorCode(
- 'OPTIONAL_PARAMETER_IN_OPERATOR',
+ const CompileTimeErrorCode('OPTIONAL_PARAMETER_IN_OPERATOR',
"Optional parameters are not allowed when defining an operator");
/**
@@ -2003,8 +1867,7 @@
* @param uri the uri pointing to a non-library declaration
*/
static const CompileTimeErrorCode PART_OF_NON_PART =
- const CompileTimeErrorCode(
- 'PART_OF_NON_PART',
+ const CompileTimeErrorCode('PART_OF_NON_PART',
"The included part '{0}' must have a part-of directive");
/**
@@ -2012,8 +1875,7 @@
* top-level member named <i>p</i>.
*/
static const CompileTimeErrorCode PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER =
- const CompileTimeErrorCode(
- 'PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER',
+ const CompileTimeErrorCode('PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER',
"The name '{0}' is already used as an import prefix and cannot be used to name a top-level element");
/**
@@ -2021,8 +1883,7 @@
* optional parameter begins with an '_' character.
*/
static const CompileTimeErrorCode PRIVATE_OPTIONAL_PARAMETER =
- const CompileTimeErrorCode(
- 'PRIVATE_OPTIONAL_PARAMETER',
+ const CompileTimeErrorCode('PRIVATE_OPTIONAL_PARAMETER',
"Named optional parameters cannot start with an underscore");
/**
@@ -2043,8 +1904,7 @@
* https://code.google.com/p/dart/issues/detail?id=954
*/
static const CompileTimeErrorCode RECURSIVE_CONSTRUCTOR_REDIRECT =
- const CompileTimeErrorCode(
- 'RECURSIVE_CONSTRUCTOR_REDIRECT',
+ const CompileTimeErrorCode('RECURSIVE_CONSTRUCTOR_REDIRECT',
"Cycle in redirecting generative constructors");
/**
@@ -2053,8 +1913,7 @@
* sequence of redirections.
*/
static const CompileTimeErrorCode RECURSIVE_FACTORY_REDIRECT =
- const CompileTimeErrorCode(
- 'RECURSIVE_FACTORY_REDIRECT',
+ const CompileTimeErrorCode('RECURSIVE_FACTORY_REDIRECT',
"Cycle in redirecting factory constructors");
/**
@@ -2071,8 +1930,7 @@
* @param strImplementsPath a string representation of the implements loop
*/
static const CompileTimeErrorCode RECURSIVE_INTERFACE_INHERITANCE =
- const CompileTimeErrorCode(
- 'RECURSIVE_INTERFACE_INHERITANCE',
+ const CompileTimeErrorCode('RECURSIVE_INTERFACE_INHERITANCE',
"'{0}' cannot be a superinterface of itself: {1}");
/**
@@ -2087,8 +1945,7 @@
*
* @param className the name of the class that implements itself recursively
*/
- static const CompileTimeErrorCode
- RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS =
+ static const CompileTimeErrorCode RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS =
const CompileTimeErrorCode(
'RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS',
"'{0}' cannot extend itself");
@@ -2105,8 +1962,7 @@
*
* @param className the name of the class that implements itself recursively
*/
- static const CompileTimeErrorCode
- RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS =
+ static const CompileTimeErrorCode RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS =
const CompileTimeErrorCode(
'RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS',
"'{0}' cannot implement itself");
@@ -2123,8 +1979,7 @@
*
* @param className the name of the class that implements itself recursively
*/
- static const CompileTimeErrorCode
- RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WITH =
+ static const CompileTimeErrorCode RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WITH =
const CompileTimeErrorCode(
'RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WITH',
"'{0}' cannot use itself as a mixin");
@@ -2134,8 +1989,7 @@
* the const modifier but <i>k'</i> is not a constant constructor.
*/
static const CompileTimeErrorCode REDIRECT_TO_MISSING_CONSTRUCTOR =
- const CompileTimeErrorCode(
- 'REDIRECT_TO_MISSING_CONSTRUCTOR',
+ const CompileTimeErrorCode('REDIRECT_TO_MISSING_CONSTRUCTOR',
"The constructor '{0}' could not be found in '{1}'");
/**
@@ -2143,8 +1997,7 @@
* the const modifier but <i>k'</i> is not a constant constructor.
*/
static const CompileTimeErrorCode REDIRECT_TO_NON_CLASS =
- const CompileTimeErrorCode(
- 'REDIRECT_TO_NON_CLASS',
+ const CompileTimeErrorCode('REDIRECT_TO_NON_CLASS',
"The name '{0}' is not a type and cannot be used in a redirected constructor");
/**
@@ -2152,8 +2005,7 @@
* the const modifier but <i>k'</i> is not a constant constructor.
*/
static const CompileTimeErrorCode REDIRECT_TO_NON_CONST_CONSTRUCTOR =
- const CompileTimeErrorCode(
- 'REDIRECT_TO_NON_CONST_CONSTRUCTOR',
+ const CompileTimeErrorCode('REDIRECT_TO_NON_CONST_CONSTRUCTOR',
"Constant factory constructor cannot delegate to a non-constant constructor");
/**
@@ -2162,8 +2014,7 @@
* generative constructor.
*/
static const CompileTimeErrorCode REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR =
- const CompileTimeErrorCode(
- 'REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR',
+ const CompileTimeErrorCode('REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR',
"The constructor '{0}' could not be found in '{1}'");
/**
@@ -2171,8 +2022,7 @@
* <i>redirecting</i>, in which case its only action is to invoke another
* generative constructor.
*/
- static const CompileTimeErrorCode
- REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR =
+ static const CompileTimeErrorCode REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR =
const CompileTimeErrorCode(
'REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR',
"Generative constructor cannot redirect to a factory constructor");
@@ -2183,8 +2033,7 @@
* compile-time error occurs.
*/
static const CompileTimeErrorCode REFERENCED_BEFORE_DECLARATION =
- const CompileTimeErrorCode(
- 'REFERENCED_BEFORE_DECLARATION',
+ const CompileTimeErrorCode('REFERENCED_BEFORE_DECLARATION',
"Local variables cannot be referenced before they are declared");
/**
@@ -2193,16 +2042,14 @@
*/
static const CompileTimeErrorCode RETHROW_OUTSIDE_CATCH =
const CompileTimeErrorCode(
- 'RETHROW_OUTSIDE_CATCH',
- "rethrow must be inside of a catch clause");
+ 'RETHROW_OUTSIDE_CATCH', "rethrow must be inside of a catch clause");
/**
* 13.12 Return: It is a compile-time error if a return statement of the form
* <i>return e;</i> appears in a generative constructor.
*/
static const CompileTimeErrorCode RETURN_IN_GENERATIVE_CONSTRUCTOR =
- const CompileTimeErrorCode(
- 'RETURN_IN_GENERATIVE_CONSTRUCTOR',
+ const CompileTimeErrorCode('RETURN_IN_GENERATIVE_CONSTRUCTOR',
"Constructors cannot return a value");
/**
@@ -2210,8 +2057,7 @@
* <i>return e;</i> appears in a generator function.
*/
static const CompileTimeErrorCode RETURN_IN_GENERATOR =
- const CompileTimeErrorCode(
- 'RETURN_IN_GENERATOR',
+ const CompileTimeErrorCode('RETURN_IN_GENERATOR',
"Cannot return a value from a generator function (one marked with either 'async*' or 'sync*')");
/**
@@ -2219,8 +2065,7 @@
* import is used in another import clause.
*/
static const CompileTimeErrorCode SHARED_DEFERRED_PREFIX =
- const CompileTimeErrorCode(
- 'SHARED_DEFERRED_PREFIX',
+ const CompileTimeErrorCode('SHARED_DEFERRED_PREFIX',
"The prefix of a deferred import cannot be used in other import directives");
/**
@@ -2234,16 +2079,14 @@
*/
static const CompileTimeErrorCode SUPER_IN_INVALID_CONTEXT =
const CompileTimeErrorCode(
- 'SUPER_IN_INVALID_CONTEXT',
- "Invalid context for 'super' invocation");
+ 'SUPER_IN_INVALID_CONTEXT', "Invalid context for 'super' invocation");
/**
* 7.6.1 Generative Constructors: A generative constructor may be redirecting,
* in which case its only action is to invoke another generative constructor.
*/
static const CompileTimeErrorCode SUPER_IN_REDIRECTING_CONSTRUCTOR =
- const CompileTimeErrorCode(
- 'SUPER_IN_REDIRECTING_CONSTRUCTOR',
+ const CompileTimeErrorCode('SUPER_IN_REDIRECTING_CONSTRUCTOR',
"The redirecting constructor cannot have a 'super' initializer");
/**
@@ -2274,16 +2117,14 @@
*/
static const CompileTimeErrorCode TYPE_ARGUMENT_NOT_MATCHING_BOUNDS =
const CompileTimeErrorCode(
- 'TYPE_ARGUMENT_NOT_MATCHING_BOUNDS',
- "'{0}' does not extend '{1}'");
+ 'TYPE_ARGUMENT_NOT_MATCHING_BOUNDS', "'{0}' does not extend '{1}'");
/**
* 15.3.1 Typedef: Any self reference, either directly, or recursively via
* another typedef, is a compile time error.
*/
static const CompileTimeErrorCode TYPE_ALIAS_CANNOT_REFERENCE_ITSELF =
- const CompileTimeErrorCode(
- 'TYPE_ALIAS_CANNOT_REFERENCE_ITSELF',
+ const CompileTimeErrorCode('TYPE_ALIAS_CANNOT_REFERENCE_ITSELF',
"Type alias cannot reference itself directly or recursively via another typedef");
/**
@@ -2301,8 +2142,7 @@
* (respectively <i>S.id</i>)
*/
static const CompileTimeErrorCode UNDEFINED_CONSTRUCTOR_IN_INITIALIZER =
- const CompileTimeErrorCode(
- 'UNDEFINED_CONSTRUCTOR_IN_INITIALIZER',
+ const CompileTimeErrorCode('UNDEFINED_CONSTRUCTOR_IN_INITIALIZER',
"The class '{0}' does not have a generative constructor '{1}'");
/**
@@ -2312,10 +2152,8 @@
* class <i>S</i> does not declare a generative constructor named <i>S</i>
* (respectively <i>S.id</i>)
*/
- static const CompileTimeErrorCode UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT
- =
- const CompileTimeErrorCode(
- 'UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT',
+ static const CompileTimeErrorCode UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT =
+ const CompileTimeErrorCode('UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT',
"The class '{0}' does not have a default generative constructor");
/**
@@ -2330,8 +2168,7 @@
* @param name the name of the requested named parameter
*/
static const CompileTimeErrorCode UNDEFINED_NAMED_PARAMETER =
- const CompileTimeErrorCode(
- 'UNDEFINED_NAMED_PARAMETER',
+ const CompileTimeErrorCode('UNDEFINED_NAMED_PARAMETER',
"The named parameter '{0}' is not defined");
/**
@@ -2349,8 +2186,7 @@
*/
static const CompileTimeErrorCode URI_DOES_NOT_EXIST =
const CompileTimeErrorCode(
- 'URI_DOES_NOT_EXIST',
- "Target of URI does not exist: '{0}'");
+ 'URI_DOES_NOT_EXIST', "Target of URI does not exist: '{0}'");
/**
* 14.1 Imports: It is a compile-time error if <i>x</i> is not a compile-time
@@ -2365,8 +2201,7 @@
*/
static const CompileTimeErrorCode URI_WITH_INTERPOLATION =
const CompileTimeErrorCode(
- 'URI_WITH_INTERPOLATION',
- "URIs cannot use string interpolation");
+ 'URI_WITH_INTERPOLATION', "URIs cannot use string interpolation");
/**
* 7.1.1 Operators: It is a compile-time error if the arity of the
@@ -2383,8 +2218,7 @@
* operator declaration
*/
static const CompileTimeErrorCode WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR =
- const CompileTimeErrorCode(
- 'WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR',
+ const CompileTimeErrorCode('WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR',
"Operator '{0}' should declare exactly {1} parameter(s), but {2} found");
/**
@@ -2394,8 +2228,7 @@
* @param actualNumberOfParameters the number of parameters found in the
* operator declaration
*/
- static const CompileTimeErrorCode
- WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS =
+ static const CompileTimeErrorCode WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS =
const CompileTimeErrorCode(
'WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS',
"Operator '-' should declare 0 or 1 parameter, but {0} found");
@@ -2405,8 +2238,7 @@
* does not include exactly one required formal parameter <i>p</i>.
*/
static const CompileTimeErrorCode WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER =
- const CompileTimeErrorCode(
- 'WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER',
+ const CompileTimeErrorCode('WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER',
"Setters should declare exactly one required parameter");
/**
@@ -2414,8 +2246,7 @@
* function that is not a generator function.
*/
static const CompileTimeErrorCode YIELD_EACH_IN_NON_GENERATOR =
- const CompileTimeErrorCode(
- 'YIELD_EACH_IN_NON_GENERATOR',
+ const CompileTimeErrorCode('YIELD_EACH_IN_NON_GENERATOR',
"Yield-each statements must be in a generator function (one marked with either 'async*' or 'sync*')");
/**
@@ -2423,8 +2254,7 @@
* function that is not a generator function.
*/
static const CompileTimeErrorCode YIELD_IN_NON_GENERATOR =
- const CompileTimeErrorCode(
- 'YIELD_IN_NON_GENERATOR',
+ const CompileTimeErrorCode('YIELD_IN_NON_GENERATOR',
"Yield statements must be in a generator function (one marked with either 'async*' or 'sync*')");
/**
@@ -2573,14 +2403,10 @@
* @param node the node specifying the location of the error
* @param arguments the arguments to the error, used to compose the error message
*/
- AnalysisErrorWithProperties newErrorWithProperties(ErrorCode errorCode,
- AstNode node, List<Object> arguments) =>
+ AnalysisErrorWithProperties newErrorWithProperties(
+ ErrorCode errorCode, AstNode node, List<Object> arguments) =>
new AnalysisErrorWithProperties.con2(
- _source,
- node.offset,
- node.length,
- errorCode,
- arguments);
+ _source, node.offset, node.length, errorCode, arguments);
/**
* Report a passed error.
@@ -2598,13 +2424,10 @@
* @param element the element which name should be used as the location of the error
* @param arguments the arguments to the error, used to compose the error message
*/
- void reportErrorForElement(ErrorCode errorCode, Element element,
- List<Object> arguments) {
+ void reportErrorForElement(
+ ErrorCode errorCode, Element element, List<Object> arguments) {
reportErrorForOffset(
- errorCode,
- element.nameOffset,
- element.displayName.length,
- arguments);
+ errorCode, element.nameOffset, element.displayName.length, arguments);
}
/**
@@ -2662,8 +2485,8 @@
* @param node the node specifying the location of the error
* @param arguments the arguments to the error, used to compose the error message
*/
- void reportTypeErrorForNode(ErrorCode errorCode, AstNode node,
- List<Object> arguments) {
+ void reportTypeErrorForNode(
+ ErrorCode errorCode, AstNode node, List<Object> arguments) {
_convertTypeNames(arguments);
reportErrorForOffset(errorCode, node.offset, node.length, arguments);
}
@@ -2770,8 +2593,8 @@
* @param machineCode the name of the severity used when producing machine output
* @param displayName the name of the severity used when producing readable output
*/
- const ErrorSeverity(String name, int ordinal, this.machineCode,
- this.displayName)
+ const ErrorSeverity(
+ String name, int ordinal, this.machineCode, this.displayName)
: super(name, ordinal);
/**
@@ -2809,8 +2632,8 @@
/**
* Checked mode compile-time errors are errors that preclude execution in checked mode.
*/
- static const ErrorType CHECKED_MODE_COMPILE_TIME_ERROR =
- const ErrorType('CHECKED_MODE_COMPILE_TIME_ERROR', 3, ErrorSeverity.ERROR);
+ static const ErrorType CHECKED_MODE_COMPILE_TIME_ERROR = const ErrorType(
+ 'CHECKED_MODE_COMPILE_TIME_ERROR', 3, ErrorSeverity.ERROR);
/**
* Static warnings are those warnings reported by the static checker. They have no effect on
@@ -2839,14 +2662,15 @@
static const ErrorType LINT = const ErrorType('LINT', 7, ErrorSeverity.INFO);
static const List<ErrorType> values = const [
- TODO,
- HINT,
- COMPILE_TIME_ERROR,
- CHECKED_MODE_COMPILE_TIME_ERROR,
- STATIC_WARNING,
- STATIC_TYPE_WARNING,
- SYNTACTIC_ERROR,
- LINT];
+ TODO,
+ HINT,
+ COMPILE_TIME_ERROR,
+ CHECKED_MODE_COMPILE_TIME_ERROR,
+ STATIC_WARNING,
+ STATIC_TYPE_WARNING,
+ SYNTACTIC_ERROR,
+ LINT
+ ];
/**
* The severity of this type of error.
@@ -2931,38 +2755,33 @@
/**
* Hint for the `x is double` type checks.
*/
- static const HintCode IS_DOUBLE = const HintCode(
- 'IS_DOUBLE',
+ static const HintCode IS_DOUBLE = const HintCode('IS_DOUBLE',
"When compiled to JS, this test might return true when the left hand side is an int");
/**
* Hint for the `x is int` type checks.
*/
- static const HintCode IS_INT = const HintCode(
- 'IS_INT',
+ static const HintCode IS_INT = const HintCode('IS_INT',
"When compiled to JS, this test might return true when the left hand side is a double");
/**
* Hint for the `x is! double` type checks.
*/
- static const HintCode IS_NOT_DOUBLE = const HintCode(
- 'IS_NOT_DOUBLE',
+ static const HintCode IS_NOT_DOUBLE = const HintCode('IS_NOT_DOUBLE',
"When compiled to JS, this test might return false when the left hand side is an int");
/**
* Hint for the `x is! int` type checks.
*/
- static const HintCode IS_NOT_INT = const HintCode(
- 'IS_NOT_INT',
+ static const HintCode IS_NOT_INT = const HintCode('IS_NOT_INT',
"When compiled to JS, this test might return false when the left hand side is a double");
/**
* Deferred libraries shouldn't define a top level function 'loadLibrary'.
*/
- static const HintCode IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION =
- const HintCode(
- 'IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION',
- "The library '{0}' defines a top-level function named 'loadLibrary' which is hidden by deferring this library");
+ static const HintCode IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION = const HintCode(
+ 'IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION',
+ "The library '{0}' defines a top-level function named 'loadLibrary' which is hidden by deferring this library");
/**
* This hint is generated anywhere where the
@@ -2984,8 +2803,7 @@
*
* @param returnType the name of the declared return type
*/
- static const HintCode MISSING_RETURN = const HintCode(
- 'MISSING_RETURN',
+ static const HintCode MISSING_RETURN = const HintCode('MISSING_RETURN',
"This function declares a return type of '{0}', but does not end with a return statement",
"Either add a return statement or change the return type to 'void'");
@@ -3030,8 +2848,7 @@
* Type checks of the type `x is Null` should be done with `x == null`.
*/
static const HintCode TYPE_CHECK_IS_NULL = const HintCode(
- 'TYPE_CHECK_IS_NULL',
- "Tests for null should be done with '== null'");
+ 'TYPE_CHECK_IS_NULL', "Tests for null should be done with '== null'");
/**
* This hint is generated anywhere where the
@@ -3043,8 +2860,7 @@
* @param enclosingType the name of the enclosing type where the getter is
* being looked for
*/
- static const HintCode UNDEFINED_GETTER = const HintCode(
- 'UNDEFINED_GETTER',
+ static const HintCode UNDEFINED_GETTER = const HintCode('UNDEFINED_GETTER',
"The getter '{0}' is not defined for the class '{1}'");
/**
@@ -3056,8 +2872,7 @@
* @param typeName the resolved type name that the method lookup is happening
* on
*/
- static const HintCode UNDEFINED_METHOD = const HintCode(
- 'UNDEFINED_METHOD',
+ static const HintCode UNDEFINED_METHOD = const HintCode('UNDEFINED_METHOD',
"The method '{0}' is not defined for the class '{1}'");
/**
@@ -3083,8 +2898,7 @@
* @param enclosingType the name of the enclosing type where the setter is
* being looked for
*/
- static const HintCode UNDEFINED_SETTER = const HintCode(
- 'UNDEFINED_SETTER',
+ static const HintCode UNDEFINED_SETTER = const HintCode('UNDEFINED_SETTER',
"The setter '{0}' is not defined for the class '{1}'");
/**
@@ -3116,8 +2930,8 @@
/**
* Unused fields are fields which are never read.
*/
- static const HintCode UNUSED_FIELD =
- const HintCode('UNUSED_FIELD', "The value of the field '{0}' is not used");
+ static const HintCode UNUSED_FIELD = const HintCode(
+ 'UNUSED_FIELD', "The value of the field '{0}' is not used");
/**
* Unused imports are imports which are never used.
@@ -3150,8 +2964,7 @@
* directory.
*/
static const HintCode FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE =
- const HintCode(
- 'FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE',
+ const HintCode('FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE',
"A file in the 'lib' directory hierarchy should not reference a file outside that hierarchy");
/**
@@ -3162,8 +2975,7 @@
* directory.
*/
static const HintCode FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE =
- const HintCode(
- 'FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE',
+ const HintCode('FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE',
"A file outside the 'lib' directory hierarchy should not reference a file inside that hierarchy. Use a package: reference instead.");
/**
@@ -3216,8 +3028,7 @@
* @param uri the URI pointing to a non-existent file
*/
static const HtmlWarningCode URI_DOES_NOT_EXIST = const HtmlWarningCode(
- 'URI_DOES_NOT_EXIST',
- "Target of URI does not exist: '{0}'");
+ 'URI_DOES_NOT_EXIST', "Target of URI does not exist: '{0}'");
/**
* Initialize a newly created error code to have the given [name]. The message
@@ -3242,7 +3053,6 @@
* matters of style and practices that might aggregated to define a project's style guide.
*/
class LintCode extends ErrorCode {
-
const LintCode(String name, String message, [String correction])
: super(name, message, correction);
@@ -3268,8 +3078,7 @@
* @param numTypeArgument the number of provided type arguments
*/
static const StaticTypeWarningCode EXPECTED_ONE_LIST_TYPE_ARGUMENTS =
- const StaticTypeWarningCode(
- 'EXPECTED_ONE_LIST_TYPE_ARGUMENTS',
+ const StaticTypeWarningCode('EXPECTED_ONE_LIST_TYPE_ARGUMENTS',
"List literal requires exactly one type arguments or none, but {0} found");
/**
@@ -3279,8 +3088,7 @@
* @param numTypeArgument the number of provided type arguments
*/
static const StaticTypeWarningCode EXPECTED_TWO_MAP_TYPE_ARGUMENTS =
- const StaticTypeWarningCode(
- 'EXPECTED_TWO_MAP_TYPE_ARGUMENTS',
+ const StaticTypeWarningCode('EXPECTED_TWO_MAP_TYPE_ARGUMENTS',
"Map literal requires exactly two type arguments or none, but {0} found");
/**
@@ -3288,8 +3096,7 @@
* function marked async* may not be assigned to Stream.
*/
static const StaticTypeWarningCode ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE =
- const StaticTypeWarningCode(
- 'ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE',
+ const StaticTypeWarningCode('ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE',
"Functions marked 'async*' must have a return type assignable to 'Stream'");
/**
@@ -3297,8 +3104,7 @@
* function marked async may not be assigned to Future.
*/
static const StaticTypeWarningCode ILLEGAL_ASYNC_RETURN_TYPE =
- const StaticTypeWarningCode(
- 'ILLEGAL_ASYNC_RETURN_TYPE',
+ const StaticTypeWarningCode('ILLEGAL_ASYNC_RETURN_TYPE',
"Functions marked 'async' must have a return type assignable to 'Future'");
/**
@@ -3306,8 +3112,7 @@
* function marked sync* may not be assigned to Iterable.
*/
static const StaticTypeWarningCode ILLEGAL_SYNC_GENERATOR_RETURN_TYPE =
- const StaticTypeWarningCode(
- 'ILLEGAL_SYNC_GENERATOR_RETURN_TYPE',
+ const StaticTypeWarningCode('ILLEGAL_SYNC_GENERATOR_RETURN_TYPE',
"Functions marked 'sync*' must have a return type assignable to 'Iterable'");
/**
@@ -3349,8 +3154,7 @@
* m<sub>k</sub></i> is inherited.
*/
static const StaticTypeWarningCode INCONSISTENT_METHOD_INHERITANCE =
- const StaticTypeWarningCode(
- 'INCONSISTENT_METHOD_INHERITANCE',
+ const StaticTypeWarningCode('INCONSISTENT_METHOD_INHERITANCE',
"'{0}' is inherited by at least two interfaces inconsistently, from {1}");
/**
@@ -3361,8 +3165,7 @@
* See [UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER].
*/
static const StaticTypeWarningCode INSTANCE_ACCESS_TO_STATIC_MEMBER =
- const StaticTypeWarningCode(
- 'INSTANCE_ACCESS_TO_STATIC_MEMBER',
+ const StaticTypeWarningCode('INSTANCE_ACCESS_TO_STATIC_MEMBER',
"Static member '{0}' cannot be accessed using instance access");
/**
@@ -3382,8 +3185,7 @@
* @param lhsTypeName the name of the left hand side type
*/
static const StaticTypeWarningCode INVALID_ASSIGNMENT =
- const StaticTypeWarningCode(
- 'INVALID_ASSIGNMENT',
+ const StaticTypeWarningCode('INVALID_ASSIGNMENT',
"A value of type '{0}' cannot be assigned to a variable of type '{1}'");
/**
@@ -3412,8 +3214,7 @@
*/
static const StaticTypeWarningCode INVOCATION_OF_NON_FUNCTION =
const StaticTypeWarningCode(
- 'INVOCATION_OF_NON_FUNCTION',
- "'{0}' is not a method");
+ 'INVOCATION_OF_NON_FUNCTION', "'{0}' is not a method");
/**
* 12.14.4 Function Expression Invocation: A function expression invocation
@@ -3425,8 +3226,7 @@
* <i>e<sub>f</sub></i> may not be assigned to a function type.
*/
static const StaticTypeWarningCode INVOCATION_OF_NON_FUNCTION_EXPRESSION =
- const StaticTypeWarningCode(
- 'INVOCATION_OF_NON_FUNCTION_EXPRESSION',
+ const StaticTypeWarningCode('INVOCATION_OF_NON_FUNCTION_EXPRESSION',
"Cannot invoke a non-function");
/**
@@ -3444,16 +3244,14 @@
*/
static const StaticTypeWarningCode NON_BOOL_CONDITION =
const StaticTypeWarningCode(
- 'NON_BOOL_CONDITION',
- "Conditions must have a static type of 'bool'");
+ 'NON_BOOL_CONDITION', "Conditions must have a static type of 'bool'");
/**
* 13.15 Assert: It is a static type warning if the type of <i>e</i> may not
* be assigned to either bool or () → bool
*/
static const StaticTypeWarningCode NON_BOOL_EXPRESSION =
- const StaticTypeWarningCode(
- 'NON_BOOL_EXPRESSION',
+ const StaticTypeWarningCode('NON_BOOL_EXPRESSION',
"Assertions must be on either a 'bool' or '() -> bool'");
/**
@@ -3464,8 +3262,7 @@
* <i>e<sub>1</sub></i> may not be assigned to bool.
*/
static const StaticTypeWarningCode NON_BOOL_NEGATION_EXPRESSION =
- const StaticTypeWarningCode(
- 'NON_BOOL_NEGATION_EXPRESSION',
+ const StaticTypeWarningCode('NON_BOOL_NEGATION_EXPRESSION',
"Negation argument must have a static type of 'bool'");
/**
@@ -3476,8 +3273,7 @@
* @param operator the lexeme of the logical operator
*/
static const StaticTypeWarningCode NON_BOOL_OPERAND =
- const StaticTypeWarningCode(
- 'NON_BOOL_OPERAND',
+ const StaticTypeWarningCode('NON_BOOL_OPERAND',
"The operands of the '{0}' operator must be assignable to 'bool'");
/**
@@ -3485,8 +3281,7 @@
* 1 <= i <= n</i> does not denote a type in the enclosing lexical scope.
*/
static const StaticTypeWarningCode NON_TYPE_AS_TYPE_ARGUMENT =
- const StaticTypeWarningCode(
- 'NON_TYPE_AS_TYPE_ARGUMENT',
+ const StaticTypeWarningCode('NON_TYPE_AS_TYPE_ARGUMENT',
"The name '{0}' is not a type and cannot be used as a parameterized type");
/**
@@ -3499,8 +3294,7 @@
* @param methodName the name of the method
*/
static const StaticTypeWarningCode RETURN_OF_INVALID_TYPE =
- const StaticTypeWarningCode(
- 'RETURN_OF_INVALID_TYPE',
+ const StaticTypeWarningCode('RETURN_OF_INVALID_TYPE',
"The return type '{0}' is not a '{1}', as defined by the method '{2}'");
/**
@@ -3532,8 +3326,7 @@
*/
static const StaticTypeWarningCode TYPE_ARGUMENT_NOT_MATCHING_BOUNDS =
const StaticTypeWarningCode(
- 'TYPE_ARGUMENT_NOT_MATCHING_BOUNDS',
- "'{0}' does not extend '{1}'");
+ 'TYPE_ARGUMENT_NOT_MATCHING_BOUNDS', "'{0}' does not extend '{1}'");
/**
* 10 Generics: It is a static type warning if a type parameter is a supertype
@@ -3543,8 +3336,7 @@
* See [TYPE_ARGUMENT_NOT_MATCHING_BOUNDS].
*/
static const StaticTypeWarningCode TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND =
- const StaticTypeWarningCode(
- 'TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND',
+ const StaticTypeWarningCode('TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND',
"'{0}' cannot be a supertype of its upper bound");
/**
@@ -3557,8 +3349,7 @@
* @param enumName the name of the enumeration used to access the constant
*/
static const StaticTypeWarningCode UNDEFINED_ENUM_CONSTANT =
- const StaticTypeWarningCode(
- 'UNDEFINED_ENUM_CONSTANT',
+ const StaticTypeWarningCode('UNDEFINED_ENUM_CONSTANT',
"There is no constant named '{0}' in '{1}'");
/**
@@ -3574,8 +3365,7 @@
*/
static const StaticTypeWarningCode UNDEFINED_FUNCTION =
const StaticTypeWarningCode(
- 'UNDEFINED_FUNCTION',
- "The function '{0}' is not defined");
+ 'UNDEFINED_FUNCTION', "The function '{0}' is not defined");
/**
* 12.17 Getter Invocation: Let <i>T</i> be the static type of <i>e</i>. It is
@@ -3586,8 +3376,7 @@
* being looked for
*/
static const StaticTypeWarningCode UNDEFINED_GETTER =
- const StaticTypeWarningCode(
- 'UNDEFINED_GETTER',
+ const StaticTypeWarningCode('UNDEFINED_GETTER',
"The getter '{0}' is not defined for the class '{1}'");
/**
@@ -3600,8 +3389,7 @@
* on
*/
static const StaticTypeWarningCode UNDEFINED_METHOD =
- const StaticTypeWarningCode(
- 'UNDEFINED_METHOD',
+ const StaticTypeWarningCode('UNDEFINED_METHOD',
"The method '{0}' is not defined for the class '{1}'");
/**
@@ -3625,8 +3413,7 @@
* being looked for
*/
static const StaticTypeWarningCode UNDEFINED_OPERATOR =
- const StaticTypeWarningCode(
- 'UNDEFINED_OPERATOR',
+ const StaticTypeWarningCode('UNDEFINED_OPERATOR',
"The operator '{0}' is not defined for the class '{1}'");
/**
@@ -3640,8 +3427,7 @@
* See [INACCESSIBLE_SETTER].
*/
static const StaticTypeWarningCode UNDEFINED_SETTER =
- const StaticTypeWarningCode(
- 'UNDEFINED_SETTER',
+ const StaticTypeWarningCode('UNDEFINED_SETTER',
"The setter '{0}' is not defined for the class '{1}'");
/**
@@ -3653,8 +3439,7 @@
* being looked for
*/
static const StaticTypeWarningCode UNDEFINED_SUPER_GETTER =
- const StaticTypeWarningCode(
- 'UNDEFINED_SUPER_GETTER',
+ const StaticTypeWarningCode('UNDEFINED_SUPER_GETTER',
"The getter '{0}' is not defined in a superclass of '{1}'");
/**
@@ -3669,8 +3454,7 @@
* on
*/
static const StaticTypeWarningCode UNDEFINED_SUPER_METHOD =
- const StaticTypeWarningCode(
- 'UNDEFINED_SUPER_METHOD',
+ const StaticTypeWarningCode('UNDEFINED_SUPER_METHOD',
"The method '{0}' is not defined in a superclass of '{1}'");
/**
@@ -3694,8 +3478,7 @@
* being looked for
*/
static const StaticTypeWarningCode UNDEFINED_SUPER_OPERATOR =
- const StaticTypeWarningCode(
- 'UNDEFINED_SUPER_OPERATOR',
+ const StaticTypeWarningCode('UNDEFINED_SUPER_OPERATOR',
"The operator '{0}' is not defined in a superclass of '{1}'");
/**
@@ -3709,8 +3492,7 @@
* See [INACCESSIBLE_SETTER].
*/
static const StaticTypeWarningCode UNDEFINED_SUPER_SETTER =
- const StaticTypeWarningCode(
- 'UNDEFINED_SUPER_SETTER',
+ const StaticTypeWarningCode('UNDEFINED_SUPER_SETTER',
"The setter '{0}' is not defined in a superclass of '{1}'");
/**
@@ -3721,8 +3503,7 @@
* when we are able to find the name defined in a supertype. It exists to
* provide a more informative error message.
*/
- static const StaticTypeWarningCode
- UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER =
+ static const StaticTypeWarningCode UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER =
const StaticTypeWarningCode(
'UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER',
"Static members from supertypes must be qualified by the name of the defining type");
@@ -3738,8 +3519,7 @@
* [CompileTimeErrorCode.NEW_WITH_INVALID_TYPE_PARAMETERS].
*/
static const StaticTypeWarningCode WRONG_NUMBER_OF_TYPE_ARGUMENTS =
- const StaticTypeWarningCode(
- 'WRONG_NUMBER_OF_TYPE_ARGUMENTS',
+ const StaticTypeWarningCode('WRONG_NUMBER_OF_TYPE_ARGUMENTS',
"The type '{0}' is declared with {1} type parameters, but {2} type arguments were given");
/**
@@ -3761,8 +3541,7 @@
* T may not be assigned to Stream.
*/
static const StaticTypeWarningCode YIELD_OF_INVALID_TYPE =
- const StaticTypeWarningCode(
- 'YIELD_OF_INVALID_TYPE',
+ const StaticTypeWarningCode('YIELD_OF_INVALID_TYPE',
"The type '{0}' implied by the 'yield' expression must be assignable to '{1}'");
/**
@@ -3805,10 +3584,9 @@
* found
*/
static const StaticWarningCode AMBIGUOUS_IMPORT = const StaticWarningCode(
- 'AMBIGUOUS_IMPORT',
- "The name '{0}' is defined in the libraries {1}",
+ 'AMBIGUOUS_IMPORT', "The name '{0}' is defined in the libraries {1}",
"Consider using 'as prefix' for one of the import directives "
- "or hiding the name from all but one of the imports.");
+ "or hiding the name from all but one of the imports.");
/**
* 12.11.1 New: It is a static warning if the static type of <i>a<sub>i</sub>,
@@ -3839,8 +3617,7 @@
* @param expectedType the name of the expected type
*/
static const StaticWarningCode ARGUMENT_TYPE_NOT_ASSIGNABLE =
- const StaticWarningCode(
- 'ARGUMENT_TYPE_NOT_ASSIGNABLE',
+ const StaticWarningCode('ARGUMENT_TYPE_NOT_ASSIGNABLE',
"The argument type '{0}' cannot be assigned to the parameter type '{1}'");
/**
@@ -3851,8 +3628,7 @@
* A constant variable is always implicitly final.
*/
static const StaticWarningCode ASSIGNMENT_TO_CONST = const StaticWarningCode(
- 'ASSIGNMENT_TO_CONST',
- "Constant variables cannot be assigned a value");
+ 'ASSIGNMENT_TO_CONST', "Constant variables cannot be assigned a value");
/**
* 5 Variables: Attempting to assign to a final variable elsewhere will cause
@@ -3860,8 +3636,7 @@
* assignment will also give rise to a static warning for the same reason.
*/
static const StaticWarningCode ASSIGNMENT_TO_FINAL = const StaticWarningCode(
- 'ASSIGNMENT_TO_FINAL',
- "'{0}' cannot be used as a setter, it is final");
+ 'ASSIGNMENT_TO_FINAL', "'{0}' cannot be used as a setter, it is final");
/**
* 5 Variables: Attempting to assign to a final variable elsewhere will cause
@@ -3869,8 +3644,7 @@
* assignment will also give rise to a static warning for the same reason.
*/
static const StaticWarningCode ASSIGNMENT_TO_FINAL_NO_SETTER =
- const StaticWarningCode(
- 'ASSIGNMENT_TO_FINAL_NO_SETTER',
+ const StaticWarningCode('ASSIGNMENT_TO_FINAL_NO_SETTER',
"No setter named '{0}' in class '{1}'");
/**
@@ -3882,8 +3656,7 @@
*/
static const StaticWarningCode ASSIGNMENT_TO_FUNCTION =
const StaticWarningCode(
- 'ASSIGNMENT_TO_FUNCTION',
- "Functions cannot be assigned a value");
+ 'ASSIGNMENT_TO_FUNCTION', "Functions cannot be assigned a value");
/**
* 12.18 Assignment: Let <i>T</i> be the static type of <i>e<sub>1</sub></i>
@@ -3891,8 +3664,7 @@
* instance setter named <i>v=</i>.
*/
static const StaticWarningCode ASSIGNMENT_TO_METHOD = const StaticWarningCode(
- 'ASSIGNMENT_TO_METHOD',
- "Methods cannot be assigned a value");
+ 'ASSIGNMENT_TO_METHOD', "Methods cannot be assigned a value");
/**
* 13.9 Switch: It is a static warning if the last statement of the statement
@@ -3900,8 +3672,7 @@
* statement.
*/
static const StaticWarningCode CASE_BLOCK_NOT_TERMINATED =
- const StaticWarningCode(
- 'CASE_BLOCK_NOT_TERMINATED',
+ const StaticWarningCode('CASE_BLOCK_NOT_TERMINATED',
"The last statement of the 'case' should be 'break', 'continue', 'return' or 'throw'");
/**
@@ -3917,8 +3688,7 @@
* is declared or inherited in a concrete class.
*/
static const StaticWarningCode CONCRETE_CLASS_WITH_ABSTRACT_MEMBER =
- const StaticWarningCode(
- 'CONCRETE_CLASS_WITH_ABSTRACT_MEMBER',
+ const StaticWarningCode('CONCRETE_CLASS_WITH_ABSTRACT_MEMBER',
"'{0}' must have a method body because '{1}' is not abstract");
/**
@@ -3936,8 +3706,7 @@
* is found
*/
static const StaticWarningCode CONFLICTING_DART_IMPORT =
- const StaticWarningCode(
- 'CONFLICTING_DART_IMPORT',
+ const StaticWarningCode('CONFLICTING_DART_IMPORT',
"Element '{0}' from SDK library '{1}' is implicitly hidden by '{2}'");
/**
@@ -3947,8 +3716,7 @@
*
* @param superName the name of the super class declaring a static member
*/
- static const StaticWarningCode
- CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER =
+ static const StaticWarningCode CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER =
const StaticWarningCode(
'CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER',
"Superclass '{0}' declares static member with the same name");
@@ -3958,8 +3726,7 @@
* an instance method named <i>n</i> and has a setter named <i>n=</i>.
*/
static const StaticWarningCode CONFLICTING_INSTANCE_METHOD_SETTER =
- const StaticWarningCode(
- 'CONFLICTING_INSTANCE_METHOD_SETTER',
+ const StaticWarningCode('CONFLICTING_INSTANCE_METHOD_SETTER',
"Class '{0}' declares instance method '{1}', but also has a setter with the same name from '{2}'");
/**
@@ -3967,8 +3734,7 @@
* an instance method named <i>n</i> and has a setter named <i>n=</i>.
*/
static const StaticWarningCode CONFLICTING_INSTANCE_METHOD_SETTER2 =
- const StaticWarningCode(
- 'CONFLICTING_INSTANCE_METHOD_SETTER2',
+ const StaticWarningCode('CONFLICTING_INSTANCE_METHOD_SETTER2',
"Class '{0}' declares the setter '{1}', but also has an instance method in the same class");
/**
@@ -3978,8 +3744,7 @@
*
* @param superName the name of the super class declaring a static member
*/
- static const StaticWarningCode
- CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER =
+ static const StaticWarningCode CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER =
const StaticWarningCode(
'CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER',
"Superclass '{0}' declares static member with the same name");
@@ -3989,8 +3754,7 @@
* named <i>v</i> and also has a non-static setter named <i>v=</i>.
*/
static const StaticWarningCode CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER =
- const StaticWarningCode(
- 'CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER',
+ const StaticWarningCode('CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER',
"Class '{0}' declares non-static setter with the same name");
/**
@@ -3998,8 +3762,7 @@
* named <i>v=</i> and also has a non-static member named <i>v</i>.
*/
static const StaticWarningCode CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER =
- const StaticWarningCode(
- 'CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER',
+ const StaticWarningCode('CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER',
"Class '{0}' declares non-static member with the same name");
/**
@@ -4009,16 +3772,15 @@
* factory constructor.
*/
static const StaticWarningCode CONST_WITH_ABSTRACT_CLASS =
- const StaticWarningCode(
- 'CONST_WITH_ABSTRACT_CLASS',
+ const StaticWarningCode('CONST_WITH_ABSTRACT_CLASS',
"Abstract classes cannot be created with a 'const' expression");
/**
* 12.7 Maps: It is a static warning if the values of any two keys in a map
* literal are equal.
*/
- static const StaticWarningCode EQUAL_KEYS_IN_MAP =
- const StaticWarningCode('EQUAL_KEYS_IN_MAP', "Keys in a map cannot be equal");
+ static const StaticWarningCode EQUAL_KEYS_IN_MAP = const StaticWarningCode(
+ 'EQUAL_KEYS_IN_MAP', "Keys in a map cannot be equal");
/**
* 14.2 Exports: It is a static warning to export two different libraries with
@@ -4029,8 +3791,7 @@
* @param name the shared name of the exported libraries
*/
static const StaticWarningCode EXPORT_DUPLICATED_LIBRARY_NAMED =
- const StaticWarningCode(
- 'EXPORT_DUPLICATED_LIBRARY_NAMED',
+ const StaticWarningCode('EXPORT_DUPLICATED_LIBRARY_NAMED',
"The exported libraries '{0}' and '{1}' cannot have the same name '{2}'");
/**
@@ -4041,8 +3802,7 @@
* @param uri2 the uri pointing to a second library
*/
static const StaticWarningCode EXPORT_DUPLICATED_LIBRARY_UNNAMED =
- const StaticWarningCode(
- 'EXPORT_DUPLICATED_LIBRARY_UNNAMED',
+ const StaticWarningCode('EXPORT_DUPLICATED_LIBRARY_UNNAMED',
"The exported libraries '{0}' and '{1}' cannot both be unnamed");
/**
@@ -4054,8 +3814,7 @@
* See [NOT_ENOUGH_REQUIRED_ARGUMENTS].
*/
static const StaticWarningCode EXTRA_POSITIONAL_ARGUMENTS =
- const StaticWarningCode(
- 'EXTRA_POSITIONAL_ARGUMENTS',
+ const StaticWarningCode('EXTRA_POSITIONAL_ARGUMENTS',
"{0} positional arguments expected, but {1} found");
/**
@@ -4063,8 +3822,7 @@
* been initialized at its point of declaration is also initialized in a
* constructor.
*/
- static const StaticWarningCode
- FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION =
+ static const StaticWarningCode FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION =
const StaticWarningCode(
'FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION',
"Values cannot be set in the constructor if they are final, and have already been set");
@@ -4076,8 +3834,7 @@
*
* @param name the name of the field in question
*/
- static const StaticWarningCode
- FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR =
+ static const StaticWarningCode FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR =
const StaticWarningCode(
'FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR',
"'{0}' is final and was given a value when it was declared, so it cannot be set to a new value");
@@ -4099,8 +3856,7 @@
* @param fieldType the name of the type of the field
*/
static const StaticWarningCode FIELD_INITIALIZER_NOT_ASSIGNABLE =
- const StaticWarningCode(
- 'FIELD_INITIALIZER_NOT_ASSIGNABLE',
+ const StaticWarningCode('FIELD_INITIALIZER_NOT_ASSIGNABLE',
"The initializer type '{0}' cannot be assigned to the field type '{1}'");
/**
@@ -4112,8 +3868,7 @@
* @param fieldType the name of the type of the field
*/
static const StaticWarningCode FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE =
- const StaticWarningCode(
- 'FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE',
+ const StaticWarningCode('FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE',
"The parameter type '{0}' is incompatable with the field type '{1}'");
/**
@@ -4132,18 +3887,16 @@
* @param name the name of the uninitialized final variable
*/
static const StaticWarningCode FINAL_NOT_INITIALIZED =
- const StaticWarningCode(
- 'FINAL_NOT_INITIALIZED',
+ const StaticWarningCode('FINAL_NOT_INITIALIZED',
"The final variable '{0}' must be initialized");
/**
* 15.5 Function Types: It is a static warning if a concrete class implements
* Function and does not have a concrete method named call().
*/
- static const StaticWarningCode FUNCTION_WITHOUT_CALL =
- const StaticWarningCode(
- 'FUNCTION_WITHOUT_CALL',
- "Concrete classes that implement Function must implement the method call()");
+ static const StaticWarningCode FUNCTION_WITHOUT_CALL = const StaticWarningCode(
+ 'FUNCTION_WITHOUT_CALL',
+ "Concrete classes that implement Function must implement the method call()");
/**
* 14.1 Imports: It is a static warning to import two different libraries with
@@ -4154,8 +3907,7 @@
* @param name the shared name of the imported libraries
*/
static const StaticWarningCode IMPORT_DUPLICATED_LIBRARY_NAMED =
- const StaticWarningCode(
- 'IMPORT_DUPLICATED_LIBRARY_NAMED',
+ const StaticWarningCode('IMPORT_DUPLICATED_LIBRARY_NAMED',
"The imported libraries '{0}' and '{1}' cannot have the same name '{2}'");
/**
@@ -4166,8 +3918,7 @@
* @param uri2 the uri pointing to a second library
*/
static const StaticWarningCode IMPORT_DUPLICATED_LIBRARY_UNNAMED =
- const StaticWarningCode(
- 'IMPORT_DUPLICATED_LIBRARY_UNNAMED',
+ const StaticWarningCode('IMPORT_DUPLICATED_LIBRARY_UNNAMED',
"The imported libraries '{0}' and '{1}' cannot both be unnamed");
/**
@@ -4178,8 +3929,7 @@
* See [CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY].
*/
static const StaticWarningCode IMPORT_OF_NON_LIBRARY =
- const StaticWarningCode(
- 'IMPORT_OF_NON_LIBRARY',
+ const StaticWarningCode('IMPORT_OF_NON_LIBRARY',
"The imported library '{0}' must not have a part-of directive");
/**
@@ -4193,8 +3943,7 @@
* getters none of the <i>m<sub>i</sub></i> are inherited, and a static
* warning is issued.
*/
- static const StaticWarningCode
- INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD =
+ static const StaticWarningCode INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD =
const StaticWarningCode(
'INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD',
"'{0}' is inherited as a getter and also a method");
@@ -4208,8 +3957,7 @@
* @param superclassName the name of the enclosing class that has the static
* member
*/
- static const StaticWarningCode
- INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC =
+ static const StaticWarningCode INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC =
const StaticWarningCode(
'INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC',
"'{0}' collides with a static member in the superclass '{1}'");
@@ -4227,8 +3975,7 @@
* See [INVALID_METHOD_OVERRIDE_RETURN_TYPE].
*/
static const StaticWarningCode INVALID_GETTER_OVERRIDE_RETURN_TYPE =
- const StaticWarningCode(
- 'INVALID_GETTER_OVERRIDE_RETURN_TYPE',
+ const StaticWarningCode('INVALID_GETTER_OVERRIDE_RETURN_TYPE',
"The return type '{0}' is not assignable to '{1}' as required by the getter it is overriding from '{2}'");
/**
@@ -4243,8 +3990,7 @@
* declared
*/
static const StaticWarningCode INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE =
- const StaticWarningCode(
- 'INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE',
+ const StaticWarningCode('INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE',
"The parameter type '{0}' is not assignable to '{1}' as required by the method it is overriding from '{2}'");
/**
@@ -4260,8 +4006,7 @@
* See [INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE].
*/
static const StaticWarningCode INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE =
- const StaticWarningCode(
- 'INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE',
+ const StaticWarningCode('INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE',
"The parameter type '{0}' is not assignable to '{1}' as required by the method it is overriding from '{2}'");
/**
@@ -4276,8 +4021,7 @@
* declared
*/
static const StaticWarningCode INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE =
- const StaticWarningCode(
- 'INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE',
+ const StaticWarningCode('INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE',
"The parameter type '{0}' is not assignable to '{1}' as required by the method it is overriding from '{2}'");
/**
@@ -4293,8 +4037,7 @@
* See [INVALID_GETTER_OVERRIDE_RETURN_TYPE].
*/
static const StaticWarningCode INVALID_METHOD_OVERRIDE_RETURN_TYPE =
- const StaticWarningCode(
- 'INVALID_METHOD_OVERRIDE_RETURN_TYPE',
+ const StaticWarningCode('INVALID_METHOD_OVERRIDE_RETURN_TYPE',
"The return type '{0}' is not assignable to '{1}' as required by the method it is overriding from '{2}'");
/**
@@ -4304,10 +4047,8 @@
* <i>p</i> and the signature of <i>m1</i> specifies a different default value
* for <i>p</i>.
*/
- static const StaticWarningCode INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED
- =
- const StaticWarningCode(
- 'INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED',
+ static const StaticWarningCode INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED =
+ const StaticWarningCode('INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED',
"Parameters cannot override default values, this method overrides '{0}.{1}' where '{2}' has a different value");
/**
@@ -4317,8 +4058,7 @@
* <i>p</i> and the signature of <i>m1</i> specifies a different default value
* for <i>p</i>.
*/
- static const StaticWarningCode
- INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL =
+ static const StaticWarningCode INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL =
const StaticWarningCode(
'INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL',
"Parameters cannot override default values, this method overrides '{0}.{1}' where this positional parameter has a different value");
@@ -4331,10 +4071,9 @@
* @param paramCount the number of named parameters in the overridden member
* @param className the name of the class from the overridden method
*/
- static const StaticWarningCode INVALID_OVERRIDE_NAMED =
- const StaticWarningCode(
- 'INVALID_OVERRIDE_NAMED',
- "Missing the named parameter '{0}' to match the overridden method from '{1}'");
+ static const StaticWarningCode INVALID_OVERRIDE_NAMED = const StaticWarningCode(
+ 'INVALID_OVERRIDE_NAMED',
+ "Missing the named parameter '{0}' to match the overridden method from '{1}'");
/**
* 7.1 Instance Methods: It is a static warning if an instance method
@@ -4346,8 +4085,7 @@
* @param className the name of the class from the overridden method
*/
static const StaticWarningCode INVALID_OVERRIDE_POSITIONAL =
- const StaticWarningCode(
- 'INVALID_OVERRIDE_POSITIONAL',
+ const StaticWarningCode('INVALID_OVERRIDE_POSITIONAL',
"Must have at least {0} parameters to match the overridden method from '{1}'");
/**
@@ -4360,8 +4098,7 @@
* @param className the name of the class from the overridden method
*/
static const StaticWarningCode INVALID_OVERRIDE_REQUIRED =
- const StaticWarningCode(
- 'INVALID_OVERRIDE_REQUIRED',
+ const StaticWarningCode('INVALID_OVERRIDE_REQUIRED',
"Must have {0} required parameters or less to match the overridden method from '{1}'");
/**
@@ -4377,8 +4114,7 @@
* See [INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE].
*/
static const StaticWarningCode INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE =
- const StaticWarningCode(
- 'INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE',
+ const StaticWarningCode('INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE',
"The parameter type '{0}' is not assignable to '{1}' as required by the setter it is overriding from '{2}'");
/**
@@ -4395,8 +4131,7 @@
* <= j <= m</i>.
*/
static const StaticWarningCode LIST_ELEMENT_TYPE_NOT_ASSIGNABLE =
- const StaticWarningCode(
- 'LIST_ELEMENT_TYPE_NOT_ASSIGNABLE',
+ const StaticWarningCode('LIST_ELEMENT_TYPE_NOT_ASSIGNABLE',
"The element type '{0}' cannot be assigned to the list type '{1}'");
/**
@@ -4415,8 +4150,7 @@
* <= j <= m</i>.
*/
static const StaticWarningCode MAP_KEY_TYPE_NOT_ASSIGNABLE =
- const StaticWarningCode(
- 'MAP_KEY_TYPE_NOT_ASSIGNABLE',
+ const StaticWarningCode('MAP_KEY_TYPE_NOT_ASSIGNABLE',
"The element type '{0}' cannot be assigned to the map key type '{1}'");
/**
@@ -4435,8 +4169,7 @@
* <= j <= m</i>.
*/
static const StaticWarningCode MAP_VALUE_TYPE_NOT_ASSIGNABLE =
- const StaticWarningCode(
- 'MAP_VALUE_TYPE_NOT_ASSIGNABLE',
+ const StaticWarningCode('MAP_VALUE_TYPE_NOT_ASSIGNABLE',
"The element type '{0}' cannot be assigned to the map value type '{1}'");
/**
@@ -4445,8 +4178,7 @@
* <i>S</i>, and <i>T</i> may not be assigned to <i>S</i>.
*/
static const StaticWarningCode MISMATCHED_GETTER_AND_SETTER_TYPES =
- const StaticWarningCode(
- 'MISMATCHED_GETTER_AND_SETTER_TYPES',
+ const StaticWarningCode('MISMATCHED_GETTER_AND_SETTER_TYPES',
"The parameter type for setter '{0}' is '{1}' which is not assignable to its getter (of type '{2}')");
/**
@@ -4454,8 +4186,7 @@
* with argument type <i>T</i> and a getter named <i>v</i> with return type
* <i>S</i>, and <i>T</i> may not be assigned to <i>S</i>.
*/
- static const StaticWarningCode
- MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE =
+ static const StaticWarningCode MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE =
const StaticWarningCode(
'MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE',
"The parameter type for setter '{0}' is '{1}' which is not assignable to its getter (of type '{2}'), from superclass '{3}'");
@@ -4474,8 +4205,7 @@
* abstract class and <i>q</i> is not a factory constructor.
*/
static const StaticWarningCode NEW_WITH_ABSTRACT_CLASS =
- const StaticWarningCode(
- 'NEW_WITH_ABSTRACT_CLASS',
+ const StaticWarningCode('NEW_WITH_ABSTRACT_CLASS',
"Abstract classes cannot be created with a 'new' expression");
/**
@@ -4489,8 +4219,7 @@
* [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS].
*/
static const StaticWarningCode NEW_WITH_INVALID_TYPE_PARAMETERS =
- const StaticWarningCode(
- 'NEW_WITH_INVALID_TYPE_PARAMETERS',
+ const StaticWarningCode('NEW_WITH_INVALID_TYPE_PARAMETERS',
"The type '{0}' is declared with {1} type parameters, but {2} type arguments were given");
/**
@@ -4499,8 +4228,8 @@
*
* @param name the name of the non-type element
*/
- static const StaticWarningCode NEW_WITH_NON_TYPE =
- const StaticWarningCode('NEW_WITH_NON_TYPE', "The name '{0}' is not a class");
+ static const StaticWarningCode NEW_WITH_NON_TYPE = const StaticWarningCode(
+ 'NEW_WITH_NON_TYPE', "The name '{0}' is not a class");
/**
* 12.11.1 New: If <i>T</i> is a class or parameterized type accessible in the
@@ -4516,8 +4245,7 @@
* declare a constructor with the same name as the declaration of <i>T</i>.
*/
static const StaticWarningCode NEW_WITH_UNDEFINED_CONSTRUCTOR =
- const StaticWarningCode(
- 'NEW_WITH_UNDEFINED_CONSTRUCTOR',
+ const StaticWarningCode('NEW_WITH_UNDEFINED_CONSTRUCTOR',
"The class '{0}' does not have a constructor '{1}'");
/**
@@ -4533,8 +4261,7 @@
* same name as the declaration of <i>T</i>.
*/
static const StaticWarningCode NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT =
- const StaticWarningCode(
- 'NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
+ const StaticWarningCode('NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
"The class '{0}' does not have a default constructor");
/**
@@ -4558,8 +4285,7 @@
* @param additionalCount the number of additional missing members that aren't
* listed
*/
- static const StaticWarningCode
- NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS =
+ static const StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS =
const StaticWarningCode(
'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS',
"Missing concrete implementation of {0}, {1}, {2}, {3} and {4} more");
@@ -4583,8 +4309,7 @@
* @param memberName the name of the third member
* @param memberName the name of the fourth member
*/
- static const StaticWarningCode
- NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR =
+ static const StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR =
const StaticWarningCode(
'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR',
"Missing concrete implementation of {0}, {1}, {2} and {3}");
@@ -4605,10 +4330,8 @@
*
* @param memberName the name of the member
*/
- static const StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
- =
- const StaticWarningCode(
- 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE',
+ static const StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE =
+ const StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE',
"Missing concrete implementation of {0}");
/**
@@ -4629,8 +4352,7 @@
* @param memberName the name of the second member
* @param memberName the name of the third member
*/
- static const StaticWarningCode
- NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE =
+ static const StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE =
const StaticWarningCode(
'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE',
"Missing concrete implementation of {0}, {1} and {2}");
@@ -4652,10 +4374,8 @@
* @param memberName the name of the first member
* @param memberName the name of the second member
*/
- static const StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO
- =
- const StaticWarningCode(
- 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO',
+ static const StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO =
+ const StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO',
"Missing concrete implementation of {0} and {1}");
/**
@@ -4668,8 +4388,7 @@
* @param name the name of the non-type element
*/
static const StaticWarningCode NON_TYPE_IN_CATCH_CLAUSE =
- const StaticWarningCode(
- 'NON_TYPE_IN_CATCH_CLAUSE',
+ const StaticWarningCode('NON_TYPE_IN_CATCH_CLAUSE',
"The name '{0}' is not a type and cannot be used in an on-catch clause");
/**
@@ -4677,8 +4396,7 @@
* user-declared operator []= is explicitly declared and not void.
*/
static const StaticWarningCode NON_VOID_RETURN_FOR_OPERATOR =
- const StaticWarningCode(
- 'NON_VOID_RETURN_FOR_OPERATOR',
+ const StaticWarningCode('NON_VOID_RETURN_FOR_OPERATOR',
"The return type of the operator []= must be 'void'");
/**
@@ -4686,8 +4404,7 @@
* other than void.
*/
static const StaticWarningCode NON_VOID_RETURN_FOR_SETTER =
- const StaticWarningCode(
- 'NON_VOID_RETURN_FOR_SETTER',
+ const StaticWarningCode('NON_VOID_RETURN_FOR_SETTER',
"The return type of the setter must be 'void'");
/**
@@ -4716,8 +4433,7 @@
* See [EXTRA_POSITIONAL_ARGUMENTS].
*/
static const StaticWarningCode NOT_ENOUGH_REQUIRED_ARGUMENTS =
- const StaticWarningCode(
- 'NOT_ENOUGH_REQUIRED_ARGUMENTS',
+ const StaticWarningCode('NOT_ENOUGH_REQUIRED_ARGUMENTS',
"{0} required argument(s) expected, but {1} found");
/**
@@ -4730,8 +4446,7 @@
* "part of" declaration
*/
static const StaticWarningCode PART_OF_DIFFERENT_LIBRARY =
- const StaticWarningCode(
- 'PART_OF_DIFFERENT_LIBRARY',
+ const StaticWarningCode('PART_OF_DIFFERENT_LIBRARY',
"Expected this library to be part of '{0}', not '{1}'");
/**
@@ -4742,8 +4457,7 @@
* @param redirectingName the name of the redirecting constructor
*/
static const StaticWarningCode REDIRECT_TO_INVALID_FUNCTION_TYPE =
- const StaticWarningCode(
- 'REDIRECT_TO_INVALID_FUNCTION_TYPE',
+ const StaticWarningCode('REDIRECT_TO_INVALID_FUNCTION_TYPE',
"The redirected constructor '{0}' has incompatible parameters with '{1}'");
/**
@@ -4754,8 +4468,7 @@
* @param redirectingName the name of the redirecting constructor return type
*/
static const StaticWarningCode REDIRECT_TO_INVALID_RETURN_TYPE =
- const StaticWarningCode(
- 'REDIRECT_TO_INVALID_RETURN_TYPE',
+ const StaticWarningCode('REDIRECT_TO_INVALID_RETURN_TYPE',
"The return type '{0}' of the redirected constructor is not assignable to '{1}'");
/**
@@ -4765,8 +4478,7 @@
* <i>type.id</i>) is not a constructor of <i>C</i>.
*/
static const StaticWarningCode REDIRECT_TO_MISSING_CONSTRUCTOR =
- const StaticWarningCode(
- 'REDIRECT_TO_MISSING_CONSTRUCTOR',
+ const StaticWarningCode('REDIRECT_TO_MISSING_CONSTRUCTOR',
"The constructor '{0}' could not be found in '{1}'");
/**
@@ -4775,10 +4487,9 @@
* it is a static warning if the referenced constructor (be it <i>type</i> or
* <i>type.id</i>) is not a constructor of <i>C</i>.
*/
- static const StaticWarningCode REDIRECT_TO_NON_CLASS =
- const StaticWarningCode(
- 'REDIRECT_TO_NON_CLASS',
- "The name '{0}' is not a type and cannot be used in a redirected constructor");
+ static const StaticWarningCode REDIRECT_TO_NON_CLASS = const StaticWarningCode(
+ 'REDIRECT_TO_NON_CLASS',
+ "The name '{0}' is not a type and cannot be used in a redirected constructor");
/**
* 13.12 Return: Let <i>f</i> be the function immediately enclosing a return
@@ -4788,8 +4499,7 @@
* * The return type of <i>f</i> may not be assigned to void.
*/
static const StaticWarningCode RETURN_WITHOUT_VALUE = const StaticWarningCode(
- 'RETURN_WITHOUT_VALUE',
- "Missing return value after 'return'");
+ 'RETURN_WITHOUT_VALUE', "Missing return value after 'return'");
/**
* 12.16.3 Static Invocation: It is a static warning if <i>C</i> does not
@@ -4798,8 +4508,7 @@
* @param memberName the name of the instance member
*/
static const StaticWarningCode STATIC_ACCESS_TO_INSTANCE_MEMBER =
- const StaticWarningCode(
- 'STATIC_ACCESS_TO_INSTANCE_MEMBER',
+ const StaticWarningCode('STATIC_ACCESS_TO_INSTANCE_MEMBER',
"Instance member '{0}' cannot be accessed using static access");
/**
@@ -4807,8 +4516,7 @@
* assigned to the type of <i>e<sub>k</sub></i>.
*/
static const StaticWarningCode SWITCH_EXPRESSION_NOT_ASSIGNABLE =
- const StaticWarningCode(
- 'SWITCH_EXPRESSION_NOT_ASSIGNABLE',
+ const StaticWarningCode('SWITCH_EXPRESSION_NOT_ASSIGNABLE',
"Type '{0}' of the switch expression is not assignable to the type '{1}' of case expressions");
/**
@@ -4819,26 +4527,23 @@
* annotation
*/
static const StaticWarningCode TYPE_ANNOTATION_DEFERRED_CLASS =
- const StaticWarningCode(
- 'TYPE_ANNOTATION_DEFERRED_CLASS',
+ const StaticWarningCode('TYPE_ANNOTATION_DEFERRED_CLASS',
"The deferred type '{0}' cannot be used in a declaration, cast or type test");
/**
* 12.31 Type Test: It is a static warning if <i>T</i> does not denote a type
* available in the current lexical scope.
*/
- static const StaticWarningCode TYPE_TEST_WITH_NON_TYPE =
- const StaticWarningCode(
- 'TYPE_TEST_WITH_NON_TYPE',
- "The name '{0}' is not a type and cannot be used in an 'is' expression");
+ static const StaticWarningCode TYPE_TEST_WITH_NON_TYPE = const StaticWarningCode(
+ 'TYPE_TEST_WITH_NON_TYPE',
+ "The name '{0}' is not a type and cannot be used in an 'is' expression");
/**
* 12.31 Type Test: It is a static warning if <i>T</i> does not denote a type
* available in the current lexical scope.
*/
static const StaticWarningCode TYPE_TEST_WITH_UNDEFINED_NAME =
- const StaticWarningCode(
- 'TYPE_TEST_WITH_UNDEFINED_NAME',
+ const StaticWarningCode('TYPE_TEST_WITH_UNDEFINED_NAME',
"The name '{0}' is not defined and cannot be used in an 'is' expression");
/**
@@ -4850,8 +4555,7 @@
* checker and the runtime.
*/
static const StaticWarningCode TYPE_PARAMETER_REFERENCED_BY_STATIC =
- const StaticWarningCode(
- 'TYPE_PARAMETER_REFERENCED_BY_STATIC',
+ const StaticWarningCode('TYPE_PARAMETER_REFERENCED_BY_STATIC',
"Static members cannot reference type parameters");
/**
@@ -4869,8 +4573,7 @@
* Same as [UNDEFINED_CLASS], but to catch using "boolean" instead of "bool".
*/
static const StaticWarningCode UNDEFINED_CLASS_BOOLEAN =
- const StaticWarningCode(
- 'UNDEFINED_CLASS_BOOLEAN',
+ const StaticWarningCode('UNDEFINED_CLASS_BOOLEAN',
"Undefined class 'boolean'; did you mean 'bool'?");
/**
@@ -4907,8 +4610,7 @@
* @param name the name of the requested named parameter
*/
static const StaticWarningCode UNDEFINED_NAMED_PARAMETER =
- const StaticWarningCode(
- 'UNDEFINED_NAMED_PARAMETER',
+ const StaticWarningCode('UNDEFINED_NAMED_PARAMETER',
"The named parameter '{0}' is not defined");
/**
@@ -4939,8 +4641,7 @@
* being looked for
*/
static const StaticWarningCode UNDEFINED_STATIC_METHOD_OR_GETTER =
- const StaticWarningCode(
- 'UNDEFINED_STATIC_METHOD_OR_GETTER',
+ const StaticWarningCode('UNDEFINED_STATIC_METHOD_OR_GETTER',
"The static method, getter or setter '{0}' is not defined for the class '{1}'");
/**
@@ -4953,8 +4654,7 @@
* being looked for
*/
static const StaticWarningCode UNDEFINED_SUPER_GETTER =
- const StaticWarningCode(
- 'UNDEFINED_SUPER_GETTER',
+ const StaticWarningCode('UNDEFINED_SUPER_GETTER',
"The getter '{0}' is not defined in a superclass of '{1}'");
/**
@@ -4973,16 +4673,14 @@
* being looked for
*/
static const StaticWarningCode UNDEFINED_SUPER_SETTER =
- const StaticWarningCode(
- 'UNDEFINED_SUPER_SETTER',
+ const StaticWarningCode('UNDEFINED_SUPER_SETTER',
"The setter '{0}' is not defined in a superclass of '{1}'");
/**
* 7.2 Getters: It is a static warning if the return type of a getter is void.
*/
static const StaticWarningCode VOID_RETURN_FOR_GETTER =
- const StaticWarningCode(
- 'VOID_RETURN_FOR_GETTER',
+ const StaticWarningCode('VOID_RETURN_FOR_GETTER',
"The return type of the getter must not be 'void'");
/**
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index bf32a2a..f0f7053 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -265,12 +265,13 @@
_boolType = _typeProvider.boolType;
_intType = _typeProvider.intType;
_DISALLOWED_TYPES_TO_EXTEND_OR_IMPLEMENT = <InterfaceType>[
- _typeProvider.nullType,
- _typeProvider.numType,
- _intType,
- _typeProvider.doubleType,
- _boolType,
- _typeProvider.stringType];
+ _typeProvider.nullType,
+ _typeProvider.numType,
+ _intType,
+ _typeProvider.doubleType,
+ _boolType,
+ _typeProvider.stringType
+ ];
}
@override
@@ -316,8 +317,7 @@
Object visitAwaitExpression(AwaitExpression node) {
if (!_inAsync) {
_errorReporter.reportErrorForToken(
- CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT,
- node.awaitKeyword);
+ CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, node.awaitKeyword);
}
return super.visitAwaitExpression(node);
}
@@ -329,16 +329,10 @@
if (type == sc.TokenType.AMPERSAND_AMPERSAND ||
type == sc.TokenType.BAR_BAR) {
String lexeme = operator.lexeme;
- _checkForAssignability(
- node.leftOperand,
- _boolType,
- StaticTypeWarningCode.NON_BOOL_OPERAND,
- [lexeme]);
- _checkForAssignability(
- node.rightOperand,
- _boolType,
- StaticTypeWarningCode.NON_BOOL_OPERAND,
- [lexeme]);
+ _checkForAssignability(node.leftOperand, _boolType,
+ StaticTypeWarningCode.NON_BOOL_OPERAND, [lexeme]);
+ _checkForAssignability(node.rightOperand, _boolType,
+ StaticTypeWarningCode.NON_BOOL_OPERAND, [lexeme]);
} else {
_checkForArgumentTypeNotAssignableForArgument(node.rightOperand);
}
@@ -377,8 +371,7 @@
Element labelElement = labelNode.staticElement;
if (labelElement is LabelElementImpl && labelElement.isOnSwitchMember) {
_errorReporter.reportErrorForNode(
- ResolverErrorCode.BREAK_LABEL_ON_SWITCH_MEMBER,
- labelNode);
+ ResolverErrorCode.BREAK_LABEL_ON_SWITCH_MEMBER, labelNode);
}
}
return null;
@@ -406,8 +399,7 @@
ImplementsClause implementsClause = node.implementsClause;
WithClause withClause = node.withClause;
_checkForBuiltInIdentifierAsName(
- node.name,
- CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
+ node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
_checkForMemberWithClassName();
_checkForNoDefaultSuperConstructorImplicit(node);
_checkForConflictingTypeVariableErrorCodes(node);
@@ -457,10 +449,8 @@
_initialFieldElementsMap = new HashMap<FieldElement, INIT_STATE>();
for (FieldElement fieldElement in fieldElements) {
if (!fieldElement.isSynthetic) {
- _initialFieldElementsMap[fieldElement] =
- fieldElement.initializer == null ?
- INIT_STATE.NOT_INIT :
- INIT_STATE.INIT_IN_DECLARATION;
+ _initialFieldElementsMap[fieldElement] = fieldElement.initializer ==
+ null ? INIT_STATE.NOT_INIT : INIT_STATE.INIT_IN_DECLARATION;
}
}
}
@@ -469,8 +459,7 @@
@override
Object visitClassTypeAlias(ClassTypeAlias node) {
_checkForBuiltInIdentifierAsName(
- node.name,
- CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
+ node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
ClassElement outerClassElement = _enclosingClass;
try {
_enclosingClass = node.element;
@@ -523,8 +512,7 @@
_isEnclosingConstructorConst = node.constKeyword != null;
_isInFactory = node.factoryKeyword != null;
_checkForInvalidModifierOnBody(
- node.body,
- CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR);
+ node.body, CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR);
_checkForConstConstructorWithNonFinalField(node, constructorElement);
_checkForConstConstructorWithNonConstSuper(node);
_checkForConflictingConstructorNameAndMember(node, constructorElement);
@@ -568,8 +556,7 @@
if (labelElement is LabelElementImpl &&
labelElement.isOnSwitchStatement) {
_errorReporter.reportErrorForNode(
- ResolverErrorCode.CONTINUE_LABEL_ON_SWITCH,
- labelNode);
+ ResolverErrorCode.CONTINUE_LABEL_ON_SWITCH, labelNode);
}
}
return null;
@@ -609,8 +596,9 @@
_inGenerator = node.isGenerator;
FunctionType functionType =
_enclosingFunction == null ? null : _enclosingFunction.type;
- DartType expectedReturnType =
- functionType == null ? DynamicTypeImpl.instance : functionType.returnType;
+ DartType expectedReturnType = functionType == null
+ ? DynamicTypeImpl.instance
+ : functionType.returnType;
_checkForReturnOfInvalidType(node.expression, expectedReturnType);
return super.visitExpressionFunctionBody(node);
} finally {
@@ -627,8 +615,7 @@
VariableDeclarationList variables = node.fields;
if (variables.isConst) {
_errorReporter.reportErrorForToken(
- CompileTimeErrorCode.CONST_INSTANCE_FIELD,
- variables.keyword);
+ CompileTimeErrorCode.CONST_INSTANCE_FIELD, variables.keyword);
}
}
try {
@@ -667,15 +654,13 @@
FunctionExpression functionExpression = node.functionExpression;
if (functionExpression != null) {
_checkForWrongNumberOfParametersForSetter(
- identifier,
- functionExpression.parameters);
+ identifier, functionExpression.parameters);
}
_checkForNonVoidReturnTypeForSetter(returnType);
}
}
if (node.isSetter) {
- _checkForInvalidModifierOnBody(
- node.functionExpression.body,
+ _checkForInvalidModifierOnBody(node.functionExpression.body,
CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER);
}
_checkForTypeAnnotationDeferredClass(returnType);
@@ -718,8 +703,7 @@
@override
Object visitFunctionTypeAlias(FunctionTypeAlias node) {
_checkForBuiltInIdentifierAsName(
- node.name,
- CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
+ node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
_checkForDefaultValueInFunctionTypeAlias(node);
_checkForTypeAliasCannotReferenceItself_function(node);
return super.visitFunctionTypeAlias(node);
@@ -774,9 +758,7 @@
if (_isInConstInstanceCreation) {
_checkForConstWithNonConst(node);
_checkForConstWithUndefinedConstructor(
- node,
- constructorName,
- typeName);
+ node, constructorName, typeName);
_checkForConstWithTypeParameters(typeName);
_checkForConstDeferredClass(node, constructorName, typeName);
} else {
@@ -802,8 +784,7 @@
if (node.constKeyword != null) {
NodeList<TypeName> arguments = typeArguments.arguments;
if (arguments.length != 0) {
- _checkForInvalidTypeArgumentInConstTypedLiteral(
- arguments,
+ _checkForInvalidTypeArgumentInConstTypedLiteral(arguments,
CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST);
}
}
@@ -820,8 +801,7 @@
NodeList<TypeName> arguments = typeArguments.arguments;
if (arguments.length != 0) {
if (node.constKeyword != null) {
- _checkForInvalidTypeArgumentInConstTypedLiteral(
- arguments,
+ _checkForInvalidTypeArgumentInConstTypedLiteral(arguments,
CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP);
}
}
@@ -852,8 +832,7 @@
_checkForConflictingStaticGetterAndInstanceSetter(node);
} else if (node.isSetter) {
_checkForInvalidModifierOnBody(
- node.body,
- CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER);
+ node.body, CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER);
_checkForWrongNumberOfParametersForSetter(node.name, node.parameters);
_checkForNonVoidReturnTypeForSetter(returnTypeName);
_checkForConflictingStaticSetterAndInstanceMember(node);
@@ -893,8 +872,7 @@
// allowed.
if (!_isInSystemLibrary) {
_errorReporter.reportErrorForNode(
- ParserErrorCode.NATIVE_CLAUSE_IN_NON_SDK_CODE,
- node);
+ ParserErrorCode.NATIVE_CLAUSE_IN_NON_SDK_CODE, node);
}
return super.visitNativeClause(node);
}
@@ -948,8 +926,8 @@
}
@override
- Object
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ Object visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
_isInConstructorInitializer = true;
try {
return super.visitRedirectingConstructorInvocation(node);
@@ -1046,8 +1024,7 @@
@override
Object visitTypeParameter(TypeParameter node) {
- _checkForBuiltInIdentifierAsName(
- node.name,
+ _checkForBuiltInIdentifierAsName(node.name,
CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME);
_checkForTypeParameterSupertypeOfItsBound(node);
_checkForTypeAnnotationDeferredClass(node.bound);
@@ -1128,9 +1105,9 @@
}
// report problem
_errorReporter.reportErrorForNode(
- StaticTypeWarningCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS,
- typeArguments,
- [num]);
+ StaticTypeWarningCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS, typeArguments, [
+ num
+ ]);
return true;
}
@@ -1174,16 +1151,14 @@
if (fieldElement.isFinal || fieldElement.isConst) {
_errorReporter.reportErrorForNode(
StaticWarningCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR,
- formalParameter.identifier,
- [fieldElement.displayName]);
+ formalParameter.identifier, [fieldElement.displayName]);
foundError = true;
}
} else if (state == INIT_STATE.INIT_IN_FIELD_FORMAL) {
if (fieldElement.isFinal || fieldElement.isConst) {
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES,
- formalParameter.identifier,
- [fieldElement.displayName]);
+ formalParameter.identifier, [fieldElement.displayName]);
foundError = true;
}
}
@@ -1220,8 +1195,7 @@
} else if (state == INIT_STATE.INIT_IN_INITIALIZERS) {
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS,
- fieldName,
- [fieldElement.displayName]);
+ fieldName, [fieldElement.displayName]);
foundError = true;
}
}
@@ -1233,15 +1207,15 @@
if (state == INIT_STATE.NOT_INIT) {
if (fieldElement.isConst) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONST_NOT_INITIALIZED,
- node.returnType,
- [fieldElement.name]);
+ CompileTimeErrorCode.CONST_NOT_INITIALIZED, node.returnType, [
+ fieldElement.name
+ ]);
foundError = true;
} else if (fieldElement.isFinal) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.FINAL_NOT_INITIALIZED,
- node.returnType,
- [fieldElement.name]);
+ StaticWarningCode.FINAL_NOT_INITIALIZED, node.returnType, [
+ fieldElement.name
+ ]);
foundError = true;
}
}
@@ -1269,8 +1243,8 @@
* [StaticWarningCode.INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE], and
* [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES].
*/
- bool
- _checkForAllInvalidOverrideErrorCodes(ExecutableElement executableElement,
+ bool _checkForAllInvalidOverrideErrorCodes(
+ ExecutableElement executableElement,
ExecutableElement overriddenExecutable, List<ParameterElement> parameters,
List<AstNode> parameterLocations, SimpleIdentifier errorNameTarget) {
bool isGetter = false;
@@ -1284,11 +1258,9 @@
FunctionType overridingFT = executableElement.type;
FunctionType overriddenFT = overriddenExecutable.type;
InterfaceType enclosingType = _enclosingClass.type;
- overriddenFT =
- _inheritanceManager.substituteTypeArgumentsInMemberFromInheritance(
- overriddenFT,
- executableElementName,
- enclosingType);
+ overriddenFT = _inheritanceManager
+ .substituteTypeArgumentsInMemberFromInheritance(
+ overriddenFT, executableElementName, enclosingType);
if (overridingFT == null || overriddenFT == null) {
return false;
}
@@ -1304,19 +1276,19 @@
// CTEC.INVALID_OVERRIDE_NAMED
if (overridingNormalPT.length > overriddenNormalPT.length) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.INVALID_OVERRIDE_REQUIRED,
- errorNameTarget,
- [overriddenNormalPT.length, overriddenExecutable.enclosingElement.displayName]);
+ StaticWarningCode.INVALID_OVERRIDE_REQUIRED, errorNameTarget, [
+ overriddenNormalPT.length,
+ overriddenExecutable.enclosingElement.displayName
+ ]);
return true;
}
if (overridingNormalPT.length + overridingPositionalPT.length <
overriddenPositionalPT.length + overriddenNormalPT.length) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.INVALID_OVERRIDE_POSITIONAL,
- errorNameTarget,
- [
- overriddenPositionalPT.length + overriddenNormalPT.length,
- overriddenExecutable.enclosingElement.displayName]);
+ StaticWarningCode.INVALID_OVERRIDE_POSITIONAL, errorNameTarget, [
+ overriddenPositionalPT.length + overriddenNormalPT.length,
+ overriddenExecutable.enclosingElement.displayName
+ ]);
return true;
}
// For each named parameter in the overridden method, verify that there is
@@ -1326,24 +1298,24 @@
// The overridden method expected the overriding method to have
// overridingParamName, but it does not.
_errorReporter.reportErrorForNode(
- StaticWarningCode.INVALID_OVERRIDE_NAMED,
- errorNameTarget,
- [overriddenParamName, overriddenExecutable.enclosingElement.displayName]);
+ StaticWarningCode.INVALID_OVERRIDE_NAMED, errorNameTarget, [
+ overriddenParamName,
+ overriddenExecutable.enclosingElement.displayName
+ ]);
return true;
}
}
// SWC.INVALID_METHOD_OVERRIDE_RETURN_TYPE
if (overriddenFTReturnType != VoidTypeImpl.instance &&
!overridingFTReturnType.isAssignableTo(overriddenFTReturnType)) {
- _errorReporter.reportTypeErrorForNode(
- !isGetter ?
- StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE :
- StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE,
- errorNameTarget,
- [
- overridingFTReturnType,
- overriddenFTReturnType,
- overriddenExecutable.enclosingElement.displayName]);
+ _errorReporter.reportTypeErrorForNode(!isGetter
+ ? StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE
+ : StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE,
+ errorNameTarget, [
+ overridingFTReturnType,
+ overriddenFTReturnType,
+ overriddenExecutable.enclosingElement.displayName
+ ]);
return true;
}
// SWC.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE
@@ -1353,30 +1325,29 @@
int parameterIndex = 0;
for (int i = 0; i < overridingNormalPT.length; i++) {
if (!overridingNormalPT[i].isAssignableTo(overriddenNormalPT[i])) {
- _errorReporter.reportTypeErrorForNode(
- !isSetter ?
- StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE :
- StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE,
- parameterLocations[parameterIndex],
- [
- overridingNormalPT[i],
- overriddenNormalPT[i],
- overriddenExecutable.enclosingElement.displayName]);
+ _errorReporter.reportTypeErrorForNode(!isSetter
+ ? StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE
+ : StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE,
+ parameterLocations[parameterIndex], [
+ overridingNormalPT[i],
+ overriddenNormalPT[i],
+ overriddenExecutable.enclosingElement.displayName
+ ]);
return true;
}
parameterIndex++;
}
// SWC.INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE
for (int i = 0; i < overriddenPositionalPT.length; i++) {
- if (!overridingPositionalPT[i].isAssignableTo(
- overriddenPositionalPT[i])) {
+ if (!overridingPositionalPT[i]
+ .isAssignableTo(overriddenPositionalPT[i])) {
_errorReporter.reportTypeErrorForNode(
StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE,
- parameterLocations[parameterIndex],
- [
- overridingPositionalPT[i],
- overriddenPositionalPT[i],
- overriddenExecutable.enclosingElement.displayName]);
+ parameterLocations[parameterIndex], [
+ overridingPositionalPT[i],
+ overriddenPositionalPT[i],
+ overriddenExecutable.enclosingElement.displayName
+ ]);
return true;
}
parameterIndex++;
@@ -1407,11 +1378,11 @@
if (parameterToSelect != null) {
_errorReporter.reportTypeErrorForNode(
StaticWarningCode.INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE,
- parameterLocationToSelect,
- [
- overridingType,
- overriddenType,
- overriddenExecutable.enclosingElement.displayName]);
+ parameterLocationToSelect, [
+ overridingType,
+ overriddenType,
+ overriddenExecutable.enclosingElement.displayName
+ ]);
return true;
}
}
@@ -1478,11 +1449,11 @@
if (!result.equalValues(_typeProvider, overriddenResult)) {
_errorReporter.reportErrorForNode(
StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED,
- formalParameters[i],
- [
- overriddenExecutable.enclosingElement.displayName,
- overriddenExecutable.displayName,
- parameterName]);
+ formalParameters[i], [
+ overriddenExecutable.enclosingElement.displayName,
+ overriddenExecutable.displayName,
+ parameterName
+ ]);
foundError = true;
}
}
@@ -1491,8 +1462,9 @@
} else {
// Positional parameters, consider the positions when matching the
// parameterElts to the overriddenParameterElts
- for (int i =
- 0; i < parameterElts.length && i < overriddenParameterElts.length; i++) {
+ for (int i = 0;
+ i < parameterElts.length && i < overriddenParameterElts.length;
+ i++) {
ParameterElementImpl parameterElt = parameterElts[i];
EvaluationResultImpl result = parameterElt.evaluationResult;
// TODO (jwren) Ignore Object types, see Dart bug 11287
@@ -1514,10 +1486,10 @@
if (!result.equalValues(_typeProvider, overriddenResult)) {
_errorReporter.reportErrorForNode(
StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL,
- formalParameters[i],
- [
- overriddenExecutable.enclosingElement.displayName,
- overriddenExecutable.displayName]);
+ formalParameters[i], [
+ overriddenExecutable.enclosingElement.displayName,
+ overriddenExecutable.displayName
+ ]);
foundError = true;
}
}
@@ -1538,27 +1510,21 @@
* @param errorNameTarget the node to report problems on
* @return `true` if and only if an error code is generated on the passed node
*/
- bool
- _checkForAllInvalidOverrideErrorCodesForExecutable(ExecutableElement executableElement,
- List<ParameterElement> parameters, List<AstNode> parameterLocations,
- SimpleIdentifier errorNameTarget) {
+ bool _checkForAllInvalidOverrideErrorCodesForExecutable(
+ ExecutableElement executableElement, List<ParameterElement> parameters,
+ List<AstNode> parameterLocations, SimpleIdentifier errorNameTarget) {
//
// Compute the overridden executable from the InheritanceManager
//
- List<ExecutableElement> overriddenExecutables =
- _inheritanceManager.lookupOverrides(_enclosingClass, executableElement.name);
+ List<ExecutableElement> overriddenExecutables = _inheritanceManager
+ .lookupOverrides(_enclosingClass, executableElement.name);
if (_checkForInstanceMethodNameCollidesWithSuperclassStatic(
- executableElement,
- errorNameTarget)) {
+ executableElement, errorNameTarget)) {
return true;
}
for (ExecutableElement overriddenElement in overriddenExecutables) {
- if (_checkForAllInvalidOverrideErrorCodes(
- executableElement,
- overriddenElement,
- parameters,
- parameterLocations,
- errorNameTarget)) {
+ if (_checkForAllInvalidOverrideErrorCodes(executableElement,
+ overriddenElement, parameters, parameterLocations, errorNameTarget)) {
return true;
}
}
@@ -1587,20 +1553,14 @@
PropertyAccessorElement setter = element.setter;
SimpleIdentifier fieldName = field.name;
if (getter != null) {
- if (_checkForAllInvalidOverrideErrorCodesForExecutable(
- getter,
- ParameterElementImpl.EMPTY_ARRAY,
- AstNode.EMPTY_ARRAY,
- fieldName)) {
+ if (_checkForAllInvalidOverrideErrorCodesForExecutable(getter,
+ ParameterElementImpl.EMPTY_ARRAY, AstNode.EMPTY_LIST, fieldName)) {
hasProblems = true;
}
}
if (setter != null) {
if (_checkForAllInvalidOverrideErrorCodesForExecutable(
- setter,
- setter.parameters,
- <AstNode>[fieldName],
- fieldName)) {
+ setter, setter.parameters, <AstNode>[fieldName], fieldName)) {
hasProblems = true;
}
}
@@ -1634,11 +1594,8 @@
formalParameterList != null ? formalParameterList.parameters : null;
List<AstNode> parameters =
parameterList != null ? new List.from(parameterList) : null;
- return _checkForAllInvalidOverrideErrorCodesForExecutable(
- executableElement,
- executableElement.parameters,
- parameters,
- methodName);
+ return _checkForAllInvalidOverrideErrorCodesForExecutable(executableElement,
+ executableElement.parameters, parameters, methodName);
}
/**
@@ -1661,14 +1618,12 @@
continue;
}
if (_checkForExtendsOrImplementsDisallowedClass(
- mixinName,
- CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS)) {
+ mixinName, CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS)) {
problemReported = true;
} else {
ClassElement mixinElement = (mixinType as InterfaceType).element;
if (_checkForExtendsOrImplementsDeferredClass(
- mixinName,
- CompileTimeErrorCode.MIXIN_DEFERRED_CLASS)) {
+ mixinName, CompileTimeErrorCode.MIXIN_DEFERRED_CLASS)) {
problemReported = true;
}
if (_checkForMixinDeclaresConstructor(mixinName, mixinElement)) {
@@ -1723,12 +1678,10 @@
if (redirectedConstructor.name != null) {
constructorStrName += ".${redirectedConstructor.name.name}";
}
- ErrorCode errorCode = (node.constKeyword != null ?
- CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR :
- StaticWarningCode.REDIRECT_TO_MISSING_CONSTRUCTOR);
- _errorReporter.reportErrorForNode(
- errorCode,
- redirectedConstructor,
+ ErrorCode errorCode = (node.constKeyword != null
+ ? CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR
+ : StaticWarningCode.REDIRECT_TO_MISSING_CONSTRUCTOR);
+ _errorReporter.reportErrorForNode(errorCode, redirectedConstructor,
[constructorStrName, redirectedType.displayName]);
return true;
}
@@ -1744,8 +1697,7 @@
if (!redirectedReturnType.isAssignableTo(constructorReturnType)) {
_errorReporter.reportErrorForNode(
StaticWarningCode.REDIRECT_TO_INVALID_RETURN_TYPE,
- redirectedConstructor,
- [redirectedReturnType, constructorReturnType]);
+ redirectedConstructor, [redirectedReturnType, constructorReturnType]);
return true;
}
//
@@ -1754,8 +1706,7 @@
if (!redirectedType.isSubtypeOf(constructorType)) {
_errorReporter.reportErrorForNode(
StaticWarningCode.REDIRECT_TO_INVALID_FUNCTION_TYPE,
- redirectedConstructor,
- [redirectedType, constructorType]);
+ redirectedConstructor, [redirectedType, constructorType]);
return true;
}
return false;
@@ -1781,12 +1732,12 @@
bool _checkForAllReturnStatementErrorCodes(ReturnStatement node) {
FunctionType functionType =
_enclosingFunction == null ? null : _enclosingFunction.type;
- DartType expectedReturnType =
- functionType == null ? DynamicTypeImpl.instance : functionType.returnType;
+ DartType expectedReturnType = functionType == null
+ ? DynamicTypeImpl.instance
+ : functionType.returnType;
Expression returnExpression = node.expression;
// RETURN_IN_GENERATIVE_CONSTRUCTOR
- bool isGenerativeConstructor =
- _enclosingFunction is ConstructorElement &&
+ bool isGenerativeConstructor = _enclosingFunction is ConstructorElement &&
!(_enclosingFunction as ConstructorElement).isFactory;
if (isGenerativeConstructor) {
if (returnExpression == null) {
@@ -1800,19 +1751,18 @@
// RETURN_WITHOUT_VALUE
if (returnExpression == null) {
if (_inGenerator ||
- _computeReturnTypeForMethod(null).isAssignableTo(expectedReturnType)) {
+ _computeReturnTypeForMethod(null)
+ .isAssignableTo(expectedReturnType)) {
return false;
}
_hasReturnWithoutValue = true;
- _errorReporter.reportErrorForNode(
- StaticWarningCode.RETURN_WITHOUT_VALUE,
- node);
+ _errorReporter
+ .reportErrorForNode(StaticWarningCode.RETURN_WITHOUT_VALUE, node);
return true;
} else if (_inGenerator) {
// RETURN_IN_GENERATOR
- _errorReporter.reportErrorForNode(
- CompileTimeErrorCode.RETURN_IN_GENERATOR,
- node);
+ _errorReporter
+ .reportErrorForNode(CompileTimeErrorCode.RETURN_IN_GENERATOR, node);
}
// RETURN_OF_INVALID_TYPE
return _checkForReturnOfInvalidType(returnExpression, expectedReturnType);
@@ -1842,13 +1792,12 @@
Element element = definedNames[name];
Element prevElement = _exportedElements[name];
if (element != null && prevElement != null && prevElement != element) {
- _errorReporter.reportErrorForNode(
- CompileTimeErrorCode.AMBIGUOUS_EXPORT,
- node,
- [
- name,
- prevElement.library.definingCompilationUnit.displayName,
- element.library.definingCompilationUnit.displayName]);
+ _errorReporter.reportErrorForNode(CompileTimeErrorCode.AMBIGUOUS_EXPORT,
+ node, [
+ name,
+ prevElement.library.definingCompilationUnit.displayName,
+ element.library.definingCompilationUnit.displayName
+ ]);
return true;
} else {
_exportedElements[name] = element;
@@ -1878,16 +1827,15 @@
* [StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE].
*/
bool _checkForArgumentTypeNotAssignable(Expression expression,
- DartType expectedStaticType, DartType actualStaticType, ErrorCode errorCode) {
+ DartType expectedStaticType, DartType actualStaticType,
+ ErrorCode errorCode) {
//
// Warning case: test static type information
//
if (actualStaticType != null && expectedStaticType != null) {
if (!actualStaticType.isAssignableTo(expectedStaticType)) {
_errorReporter.reportTypeErrorForNode(
- errorCode,
- expression,
- [actualStaticType, expectedStaticType]);
+ errorCode, expression, [actualStaticType, expectedStaticType]);
return true;
}
}
@@ -1910,10 +1858,8 @@
ParameterElement staticParameterElement = argument.staticParameterElement;
DartType staticParameterType =
staticParameterElement == null ? null : staticParameterElement.type;
- return _checkForArgumentTypeNotAssignableWithExpectedTypes(
- argument,
- staticParameterType,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
+ return _checkForArgumentTypeNotAssignableWithExpectedTypes(argument,
+ staticParameterType, StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
}
/**
@@ -1934,14 +1880,10 @@
* [StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE], and
* [StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE].
*/
- bool
- _checkForArgumentTypeNotAssignableWithExpectedTypes(Expression expression,
- DartType expectedStaticType, ErrorCode errorCode) =>
- _checkForArgumentTypeNotAssignable(
- expression,
- expectedStaticType,
- getStaticType(expression),
- errorCode);
+ bool _checkForArgumentTypeNotAssignableWithExpectedTypes(
+ Expression expression, DartType expectedStaticType,
+ ErrorCode errorCode) => _checkForArgumentTypeNotAssignable(
+ expression, expectedStaticType, getStaticType(expression), errorCode);
/**
* This verifies that the passed arguments can be assigned to their corresponding parameters.
@@ -2023,8 +1965,7 @@
VariableElement variable = element as VariableElement;
if (variable.isConst) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.ASSIGNMENT_TO_CONST,
- expression);
+ StaticWarningCode.ASSIGNMENT_TO_CONST, expression);
return true;
}
if (variable.isFinal) {
@@ -2032,29 +1973,24 @@
variable.setter == null &&
variable.isSynthetic) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER,
- highlightedNode,
+ StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER, highlightedNode,
[variable.name, variable.enclosingElement.displayName]);
return true;
}
- _errorReporter.reportErrorForNode(
- StaticWarningCode.ASSIGNMENT_TO_FINAL,
- highlightedNode,
- [variable.name]);
+ _errorReporter.reportErrorForNode(StaticWarningCode.ASSIGNMENT_TO_FINAL,
+ highlightedNode, [variable.name]);
return true;
}
return false;
}
if (element is FunctionElement) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.ASSIGNMENT_TO_FUNCTION,
- expression);
+ StaticWarningCode.ASSIGNMENT_TO_FUNCTION, expression);
return true;
}
if (element is MethodElement) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.ASSIGNMENT_TO_METHOD,
- expression);
+ StaticWarningCode.ASSIGNMENT_TO_METHOD, expression);
return true;
}
return false;
@@ -2075,14 +2011,12 @@
* [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME], and
* [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME].
*/
- bool _checkForBuiltInIdentifierAsName(SimpleIdentifier identifier,
- ErrorCode errorCode) {
+ bool _checkForBuiltInIdentifierAsName(
+ SimpleIdentifier identifier, ErrorCode errorCode) {
sc.Token token = identifier.token;
if (token.type == sc.TokenType.KEYWORD) {
_errorReporter.reportErrorForNode(
- errorCode,
- identifier,
- [identifier.name]);
+ errorCode, identifier, [identifier.name]);
return true;
}
return false;
@@ -2128,8 +2062,7 @@
}
// report error
_errorReporter.reportErrorForToken(
- StaticWarningCode.CASE_BLOCK_NOT_TERMINATED,
- node.keyword);
+ StaticWarningCode.CASE_BLOCK_NOT_TERMINATED, node.keyword);
return true;
}
@@ -2170,20 +2103,21 @@
String memberName = nameNode.name;
ExecutableElement overriddenMember;
if (node.isGetter) {
- overriddenMember =
- _enclosingClass.lookUpInheritedConcreteGetter(memberName, _currentLibrary);
+ overriddenMember = _enclosingClass.lookUpInheritedConcreteGetter(
+ memberName, _currentLibrary);
} else if (node.isSetter) {
- overriddenMember =
- _enclosingClass.lookUpInheritedConcreteSetter(memberName, _currentLibrary);
+ overriddenMember = _enclosingClass.lookUpInheritedConcreteSetter(
+ memberName, _currentLibrary);
} else {
- overriddenMember =
- _enclosingClass.lookUpInheritedConcreteMethod(memberName, _currentLibrary);
+ overriddenMember = _enclosingClass.lookUpInheritedConcreteMethod(
+ memberName, _currentLibrary);
}
if (overriddenMember == null) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
- nameNode,
- [memberName, _enclosingClass.displayName]);
+ StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, nameNode, [
+ memberName,
+ _enclosingClass.displayName
+ ]);
return true;
}
}
@@ -2202,8 +2136,8 @@
* [CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD], and
* [CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD].
*/
- bool _checkForConflictingConstructorNameAndMember(ConstructorDeclaration node,
- ConstructorElement constructorElement) {
+ bool _checkForConflictingConstructorNameAndMember(
+ ConstructorDeclaration node, ConstructorElement constructorElement) {
SimpleIdentifier constructorName = node.name;
String name = constructorElement.name;
ClassElement classElement = constructorElement.enclosingElement;
@@ -2216,13 +2150,10 @@
if (name == otherConstructor.name) {
if (name == null || name.length == 0) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT,
- node);
+ CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, node);
} else {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME,
- node,
- [name]);
+ CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, node, [name]);
}
return true;
}
@@ -2235,17 +2166,16 @@
FieldElement field = classElement.getField(name);
if (field != null) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD,
- node,
- [name]);
+ CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD, node, [
+ name
+ ]);
return true;
}
// methods
MethodElement method = classElement.getMethod(name);
if (method != null) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD,
- node,
+ CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD, node,
[name]);
return true;
}
@@ -2278,10 +2208,12 @@
// report problem
hasProblem = true;
_errorReporter.reportErrorForOffset(
- CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD,
- method.nameOffset,
- name.length,
- [_enclosingClass.displayName, inherited.enclosingElement.displayName, name]);
+ CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD, method.nameOffset,
+ name.length, [
+ _enclosingClass.displayName,
+ inherited.enclosingElement.displayName,
+ name
+ ]);
}
// getter declared in the enclosing class vs. inherited method
for (PropertyAccessorElement accessor in _enclosingClass.accessors) {
@@ -2299,9 +2231,11 @@
hasProblem = true;
_errorReporter.reportErrorForOffset(
CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER,
- accessor.nameOffset,
- name.length,
- [_enclosingClass.displayName, inherited.enclosingElement.displayName, name]);
+ accessor.nameOffset, name.length, [
+ _enclosingClass.displayName,
+ inherited.enclosingElement.displayName,
+ name
+ ]);
}
// done
return hasProblem;
@@ -2365,13 +2299,11 @@
if (getter) {
_errorReporter.reportErrorForElement(
StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER,
- accessor,
- [superElementType.displayName]);
+ accessor, [superElementType.displayName]);
} else {
_errorReporter.reportErrorForElement(
StaticWarningCode.CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER,
- accessor,
- [superElementType.displayName]);
+ accessor, [superElementType.displayName]);
}
}
// done
@@ -2428,8 +2360,8 @@
enclosingElementOfSetter =
conflictingSetter.element.enclosingElement;
} else {
- ExecutableElement elementFromInheritance =
- _inheritanceManager.lookupInheritance(_enclosingClass, setterName);
+ ExecutableElement elementFromInheritance = _inheritanceManager
+ .lookupInheritance(_enclosingClass, setterName);
if (elementFromInheritance != null) {
enclosingElementOfSetter =
elementFromInheritance.enclosingElement;
@@ -2438,9 +2370,11 @@
if (enclosingElementOfSetter != null) {
// report problem
_errorReporter.reportErrorForNode(
- StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER,
- name,
- [_enclosingClass.displayName, name.name, enclosingElementOfSetter.displayName]);
+ StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER, name, [
+ _enclosingClass.displayName,
+ name.name,
+ enclosingElementOfSetter.displayName
+ ]);
foundError = true;
addThisMemberToTheMap = false;
}
@@ -2452,8 +2386,7 @@
!conflictingMethod.isGetter) {
// report problem
_errorReporter.reportErrorForNode(
- StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER2,
- name,
+ StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER2, name,
[_enclosingClass.displayName, name.name]);
foundError = true;
addThisMemberToTheMap = false;
@@ -2480,8 +2413,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER].
*/
- bool
- _checkForConflictingStaticGetterAndInstanceSetter(MethodDeclaration node) {
+ bool _checkForConflictingStaticGetterAndInstanceSetter(
+ MethodDeclaration node) {
if (!node.isStatic) {
return false;
}
@@ -2512,8 +2445,7 @@
// report problem
_errorReporter.reportErrorForNode(
StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER,
- nameNode,
- [setterType.displayName]);
+ nameNode, [setterType.displayName]);
return true;
}
@@ -2525,8 +2457,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER].
*/
- bool
- _checkForConflictingStaticSetterAndInstanceMember(MethodDeclaration node) {
+ bool _checkForConflictingStaticSetterAndInstanceMember(
+ MethodDeclaration node) {
if (!node.isStatic) {
return false;
}
@@ -2563,8 +2495,7 @@
// report problem
_errorReporter.reportErrorForNode(
StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER,
- nameNode,
- [memberType.displayName]);
+ nameNode, [memberType.displayName]);
return true;
}
@@ -2584,9 +2515,7 @@
if (_enclosingClass.name == name) {
_errorReporter.reportErrorForOffset(
CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS,
- typeParameter.nameOffset,
- name.length,
- [name]);
+ typeParameter.nameOffset, name.length, [name]);
problemReported = true;
}
// check members
@@ -2595,9 +2524,7 @@
_enclosingClass.getSetter(name) != null) {
_errorReporter.reportErrorForOffset(
CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER,
- typeParameter.nameOffset,
- name.length,
- [name]);
+ typeParameter.nameOffset, name.length, [name]);
problemReported = true;
}
}
@@ -2623,8 +2550,7 @@
// check for mixins
if (_enclosingClass.mixins.length != 0) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN,
- node.returnType);
+ CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN, node.returnType);
return true;
}
// try to find and check super constructor invocation
@@ -2637,8 +2563,7 @@
}
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER,
- superInvocation,
- [element.enclosingElement.displayName]);
+ superInvocation, [element.enclosingElement.displayName]);
return true;
}
}
@@ -2661,8 +2586,7 @@
// default constructor is not 'const', report problem
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER,
- node.returnType,
- [supertype.displayName]);
+ node.returnType, [supertype.displayName]);
return true;
}
@@ -2675,8 +2599,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD].
*/
- bool _checkForConstConstructorWithNonFinalField(ConstructorDeclaration node,
- ConstructorElement constructorElement) {
+ bool _checkForConstConstructorWithNonFinalField(
+ ConstructorDeclaration node, ConstructorElement constructorElement) {
if (!_isEnclosingConstructorConst) {
return false;
}
@@ -2687,8 +2611,7 @@
}
// report problem
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD,
- node);
+ CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD, node);
return true;
}
@@ -2706,9 +2629,9 @@
ConstructorName constructorName, TypeName typeName) {
if (typeName.isDeferred) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONST_DEFERRED_CLASS,
- constructorName,
- [typeName.name.name]);
+ CompileTimeErrorCode.CONST_DEFERRED_CLASS, constructorName, [
+ typeName.name.name
+ ]);
return true;
}
return false;
@@ -2725,8 +2648,7 @@
bool _checkForConstEvalThrowsException(ThrowExpression node) {
if (_isEnclosingConstructorConst) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION,
- node);
+ CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION, node);
return true;
}
return false;
@@ -2742,8 +2664,7 @@
bool _checkForConstFormalParameter(NormalFormalParameter node) {
if (node.isConst) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONST_FORMAL_PARAMETER,
- node);
+ CompileTimeErrorCode.CONST_FORMAL_PARAMETER, node);
return true;
}
return false;
@@ -2761,19 +2682,17 @@
* See [StaticWarningCode.CONST_WITH_ABSTRACT_CLASS], and
* [StaticWarningCode.NEW_WITH_ABSTRACT_CLASS].
*/
- bool _checkForConstOrNewWithAbstractClass(InstanceCreationExpression node,
- TypeName typeName, InterfaceType type) {
+ bool _checkForConstOrNewWithAbstractClass(
+ InstanceCreationExpression node, TypeName typeName, InterfaceType type) {
if (type.element.isAbstract) {
ConstructorElement element = node.staticElement;
if (element != null && !element.isFactory) {
if ((node.keyword as sc.KeywordToken).keyword == sc.Keyword.CONST) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.CONST_WITH_ABSTRACT_CLASS,
- typeName);
+ StaticWarningCode.CONST_WITH_ABSTRACT_CLASS, typeName);
} else {
_errorReporter.reportErrorForNode(
- StaticWarningCode.NEW_WITH_ABSTRACT_CLASS,
- typeName);
+ StaticWarningCode.NEW_WITH_ABSTRACT_CLASS, typeName);
}
return true;
}
@@ -2791,12 +2710,11 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.INSTANTIATE_ENUM].
*/
- bool _checkForConstOrNewWithEnum(InstanceCreationExpression node,
- TypeName typeName, InterfaceType type) {
+ bool _checkForConstOrNewWithEnum(
+ InstanceCreationExpression node, TypeName typeName, InterfaceType type) {
if (type.element.isEnum) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.INSTANTIATE_ENUM,
- typeName);
+ CompileTimeErrorCode.INSTANTIATE_ENUM, typeName);
return true;
}
return false;
@@ -2816,8 +2734,7 @@
ConstructorElement constructorElement = node.staticElement;
if (constructorElement != null && !constructorElement.isConst) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONST_WITH_NON_CONST,
- node);
+ CompileTimeErrorCode.CONST_WITH_NON_CONST, node);
return true;
}
return false;
@@ -2842,8 +2759,7 @@
// should not be a type parameter
if (name.staticElement is TypeParameterElement) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS,
- name);
+ CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS, name);
}
// check type arguments
TypeArgumentList typeArguments = typeName.typeArguments;
@@ -2892,14 +2808,14 @@
SimpleIdentifier name = constructorName.name;
if (name != null) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR,
- name,
- [className, name]);
+ CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR, name, [
+ className,
+ name
+ ]);
} else {
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT,
- constructorName,
- [className]);
+ constructorName, [className]);
}
return true;
}
@@ -2920,8 +2836,7 @@
DefaultFormalParameter defaultFormalParameter = formalParameter;
if (defaultFormalParameter.defaultValue != null) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE_ALIAS,
- node);
+ CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE_ALIAS, node);
result = true;
}
}
@@ -2937,8 +2852,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER].
*/
- bool
- _checkForDefaultValueInFunctionTypedParameter(DefaultFormalParameter node) {
+ bool _checkForDefaultValueInFunctionTypedParameter(
+ DefaultFormalParameter node) {
// OK, not in a function typed parameter.
if (!_isInFunctionTypedFormalParameter) {
return false;
@@ -2949,8 +2864,7 @@
}
// Report problem.
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER,
- node);
+ CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER, node);
return true;
}
@@ -3058,9 +2972,7 @@
// report problem
_errorReporter.reportErrorForOffset(
CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE,
- staticMember.nameOffset,
- name.length,
- [name, displayName]);
+ staticMember.nameOffset, name.length, [name, displayName]);
return true;
}
@@ -3072,8 +2984,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [StaticTypeWarningCode.EXPECTED_ONE_LIST_TYPE_ARGUMENTS].
*/
- bool _checkForExpectedOneListTypeArgument(ListLiteral node,
- TypeArgumentList typeArguments) {
+ bool _checkForExpectedOneListTypeArgument(
+ ListLiteral node, TypeArgumentList typeArguments) {
// check number of type arguments
int num = typeArguments.arguments.length;
if (num == 1) {
@@ -3081,9 +2993,9 @@
}
// report problem
_errorReporter.reportErrorForNode(
- StaticTypeWarningCode.EXPECTED_ONE_LIST_TYPE_ARGUMENTS,
- typeArguments,
- [num]);
+ StaticTypeWarningCode.EXPECTED_ONE_LIST_TYPE_ARGUMENTS, typeArguments, [
+ num
+ ]);
return true;
}
@@ -3109,19 +3021,17 @@
if (prevLibrary != exportedLibrary) {
if (name.isEmpty) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.EXPORT_DUPLICATED_LIBRARY_UNNAMED,
- node,
- [
- prevLibrary.definingCompilationUnit.displayName,
- exportedLibrary.definingCompilationUnit.displayName]);
+ StaticWarningCode.EXPORT_DUPLICATED_LIBRARY_UNNAMED, node, [
+ prevLibrary.definingCompilationUnit.displayName,
+ exportedLibrary.definingCompilationUnit.displayName
+ ]);
} else {
_errorReporter.reportErrorForNode(
- StaticWarningCode.EXPORT_DUPLICATED_LIBRARY_NAMED,
- node,
- [
- prevLibrary.definingCompilationUnit.displayName,
- exportedLibrary.definingCompilationUnit.displayName,
- name]);
+ StaticWarningCode.EXPORT_DUPLICATED_LIBRARY_NAMED, node, [
+ prevLibrary.definingCompilationUnit.displayName,
+ exportedLibrary.definingCompilationUnit.displayName,
+ name
+ ]);
}
return true;
}
@@ -3142,8 +3052,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY].
*/
- bool _checkForExportInternalLibrary(ExportDirective node,
- ExportElement exportElement) {
+ bool _checkForExportInternalLibrary(
+ ExportDirective node, ExportElement exportElement) {
if (_isInSystemLibrary) {
return false;
}
@@ -3159,9 +3069,7 @@
}
// report problem
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY,
- node,
- [node.uri]);
+ CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY, node, [node.uri]);
return true;
}
@@ -3177,8 +3085,7 @@
return false;
}
return _checkForExtendsOrImplementsDeferredClass(
- node.superclass,
- CompileTimeErrorCode.EXTENDS_DEFERRED_CLASS);
+ node.superclass, CompileTimeErrorCode.EXTENDS_DEFERRED_CLASS);
}
/**
@@ -3193,8 +3100,7 @@
return false;
}
return _checkForExtendsOrImplementsDeferredClass(
- node.superclass,
- CompileTimeErrorCode.EXTENDS_DEFERRED_CLASS);
+ node.superclass, CompileTimeErrorCode.EXTENDS_DEFERRED_CLASS);
}
/**
@@ -3209,8 +3115,7 @@
return false;
}
return _checkForExtendsOrImplementsDisallowedClass(
- node.superclass,
- CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS);
+ node.superclass, CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS);
}
/**
@@ -3225,8 +3130,7 @@
return false;
}
return _checkForExtendsOrImplementsDisallowedClass(
- node.superclass,
- CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS);
+ node.superclass, CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS);
}
/**
@@ -3243,16 +3147,14 @@
* [CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS], and
* [CompileTimeErrorCode.MIXIN_DEFERRED_CLASS].
*/
- bool _checkForExtendsOrImplementsDeferredClass(TypeName typeName,
- ErrorCode errorCode) {
+ bool _checkForExtendsOrImplementsDeferredClass(
+ TypeName typeName, ErrorCode errorCode) {
if (typeName.isSynthetic) {
return false;
}
if (typeName.isDeferred) {
_errorReporter.reportErrorForNode(
- errorCode,
- typeName,
- [typeName.name.name]);
+ errorCode, typeName, [typeName.name.name]);
return true;
}
return false;
@@ -3272,14 +3174,14 @@
* [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS], and
* [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS].
*/
- bool _checkForExtendsOrImplementsDisallowedClass(TypeName typeName,
- ErrorCode errorCode) {
+ bool _checkForExtendsOrImplementsDisallowedClass(
+ TypeName typeName, ErrorCode errorCode) {
if (typeName.isSynthetic) {
return false;
}
DartType superType = typeName.type;
- for (InterfaceType disallowedType in
- _DISALLOWED_TYPES_TO_EXTEND_OR_IMPLEMENT) {
+ for (InterfaceType disallowedType
+ in _DISALLOWED_TYPES_TO_EXTEND_OR_IMPLEMENT) {
if (superType != null && superType == disallowedType) {
// if the violating type happens to be 'num', we need to rule out the
// case where the enclosing class is 'int' or 'double'
@@ -3294,16 +3196,15 @@
ClassElement classElement = grandParent.element;
DartType classType = classElement.type;
if (classType != null &&
- (classType == _intType || classType == _typeProvider.doubleType)) {
+ (classType == _intType ||
+ classType == _typeProvider.doubleType)) {
return false;
}
}
}
// otherwise, report the error
_errorReporter.reportErrorForNode(
- errorCode,
- typeName,
- [disallowedType.displayName]);
+ errorCode, typeName, [disallowedType.displayName]);
return true;
}
}
@@ -3321,8 +3222,8 @@
* See [CompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE], and
* [StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE].
*/
- bool _checkForFieldInitializerNotAssignable(ConstructorFieldInitializer node,
- Element staticElement) {
+ bool _checkForFieldInitializerNotAssignable(
+ ConstructorFieldInitializer node, Element staticElement) {
// prepare field element
if (staticElement is! FieldElement) {
return false;
@@ -3349,13 +3250,13 @@
// constant, not the static type. See dartbug.com/21119.
_errorReporter.reportTypeErrorForNode(
CheckedModeCompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE,
- expression,
- [staticType, fieldType]);
+ expression, [staticType, fieldType]);
}
_errorReporter.reportTypeErrorForNode(
- StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE,
- expression,
- [staticType, fieldType]);
+ StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE, expression, [
+ staticType,
+ fieldType
+ ]);
return true;
// TODO(brianwilkerson) Define a hint corresponding to these errors and
// report it if appropriate.
@@ -3388,21 +3289,19 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR].
*/
- bool
- _checkForFieldInitializingFormalRedirectingConstructor(FieldFormalParameter node) {
+ bool _checkForFieldInitializingFormalRedirectingConstructor(
+ FieldFormalParameter node) {
ConstructorDeclaration constructor =
node.getAncestor((node) => node is ConstructorDeclaration);
if (constructor == null) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR,
- node);
+ CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, node);
return true;
}
// constructor cannot be a factory
if (constructor.factoryKeyword != null) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR,
- node);
+ CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR, node);
return true;
}
// constructor cannot have a redirection
@@ -3441,14 +3340,14 @@
if (variable.initializer == null) {
if (node.isConst) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.CONST_NOT_INITIALIZED,
- variable.name,
- [variable.name.name]);
+ CompileTimeErrorCode.CONST_NOT_INITIALIZED, variable.name, [
+ variable.name.name
+ ]);
} else if (node.isFinal) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.FINAL_NOT_INITIALIZED,
- variable.name,
- [variable.name.name]);
+ StaticWarningCode.FINAL_NOT_INITIALIZED, variable.name, [
+ variable.name.name
+ ]);
}
foundError = true;
}
@@ -3497,26 +3396,23 @@
}
if (_enclosingFunction.isAsynchronous) {
if (_enclosingFunction.isGenerator) {
- if (!_enclosingFunction.returnType.isAssignableTo(
- _typeProvider.streamDynamicType)) {
+ if (!_enclosingFunction.returnType
+ .isAssignableTo(_typeProvider.streamDynamicType)) {
_errorReporter.reportErrorForNode(
- StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE,
- node);
+ StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE, node);
}
} else {
- if (!_enclosingFunction.returnType.isAssignableTo(
- _typeProvider.futureDynamicType)) {
+ if (!_enclosingFunction.returnType
+ .isAssignableTo(_typeProvider.futureDynamicType)) {
_errorReporter.reportErrorForNode(
- StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE,
- node);
+ StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE, node);
}
}
} else if (_enclosingFunction.isGenerator) {
- if (!_enclosingFunction.returnType.isAssignableTo(
- _typeProvider.iterableDynamicType)) {
+ if (!_enclosingFunction.returnType
+ .isAssignableTo(_typeProvider.iterableDynamicType)) {
_errorReporter.reportErrorForNode(
- StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE,
- node);
+ StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE, node);
}
}
}
@@ -3535,8 +3431,7 @@
bool foundError = false;
for (TypeName type in node.interfaces) {
if (_checkForExtendsOrImplementsDeferredClass(
- type,
- CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS)) {
+ type, CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS)) {
foundError = true;
}
}
@@ -3558,8 +3453,7 @@
bool foundError = false;
for (TypeName type in node.interfaces) {
if (_checkForExtendsOrImplementsDisallowedClass(
- type,
- CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS)) {
+ type, CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS)) {
foundError = true;
}
}
@@ -3628,16 +3522,13 @@
// report problem
if (_isInStaticMethod) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC,
- node);
+ CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC, node);
} else if (_isInFactory) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY,
- node);
+ CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY, node);
} else {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER,
- node);
+ CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER, node);
}
return true;
}
@@ -3651,8 +3542,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.IMPORT_DUPLICATED_LIBRARY_NAME].
*/
- bool _checkForImportDuplicateLibraryName(ImportDirective node,
- ImportElement importElement) {
+ bool _checkForImportDuplicateLibraryName(
+ ImportDirective node, ImportElement importElement) {
// prepare imported library
LibraryElement nodeLibrary = importElement.importedLibrary;
if (nodeLibrary == null) {
@@ -3665,19 +3556,17 @@
if (prevLibrary != nodeLibrary) {
if (name.isEmpty) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_UNNAMED,
- node,
- [
- prevLibrary.definingCompilationUnit.displayName,
- nodeLibrary.definingCompilationUnit.displayName]);
+ StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_UNNAMED, node, [
+ prevLibrary.definingCompilationUnit.displayName,
+ nodeLibrary.definingCompilationUnit.displayName
+ ]);
} else {
_errorReporter.reportErrorForNode(
- StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_NAMED,
- node,
- [
- prevLibrary.definingCompilationUnit.displayName,
- nodeLibrary.definingCompilationUnit.displayName,
- name]);
+ StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_NAMED, node, [
+ prevLibrary.definingCompilationUnit.displayName,
+ nodeLibrary.definingCompilationUnit.displayName,
+ name
+ ]);
}
return true;
}
@@ -3698,8 +3587,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY].
*/
- bool _checkForImportInternalLibrary(ImportDirective node,
- ImportElement importElement) {
+ bool _checkForImportInternalLibrary(
+ ImportDirective node, ImportElement importElement) {
if (_isInSystemLibrary) {
return false;
}
@@ -3715,9 +3604,7 @@
}
// report problem
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY,
- node,
- [node.uri]);
+ CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY, node, [node.uri]);
return true;
}
@@ -3755,8 +3642,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER].
*/
- bool _checkForInstanceAccessToStaticMember(ClassElement typeReference,
- SimpleIdentifier name) {
+ bool _checkForInstanceAccessToStaticMember(
+ ClassElement typeReference, SimpleIdentifier name) {
// OK, in comment
if (_isInComment) {
return false;
@@ -3781,9 +3668,9 @@
}
// report problem
_errorReporter.reportErrorForNode(
- StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER,
- name,
- [name.name]);
+ StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, name, [
+ name.name
+ ]);
return true;
}
@@ -3796,9 +3683,8 @@
* @return `true` if and only if a warning was generated.
* See [StaticTypeWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC].
*/
- bool
- _checkForInstanceMethodNameCollidesWithSuperclassStatic(ExecutableElement executableElement,
- SimpleIdentifier errorNameTarget) {
+ bool _checkForInstanceMethodNameCollidesWithSuperclassStatic(
+ ExecutableElement executableElement, SimpleIdentifier errorNameTarget) {
String executableElementName = executableElement.name;
if (executableElement is! PropertyAccessorElement &&
!executableElement.isOperator) {
@@ -3813,7 +3699,8 @@
visitedClasses.add(superclassElement);
LibraryElement superclassLibrary = superclassElement.library;
// Check fields.
- FieldElement fieldElt = superclassElement.getField(executableElementName);
+ FieldElement fieldElt =
+ superclassElement.getField(executableElementName);
if (fieldElt != null) {
// Ignore if private in a different library - cannot collide.
if (executableElementPrivate &&
@@ -3824,8 +3711,10 @@
if (fieldElt.isStatic) {
_errorReporter.reportErrorForNode(
StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC,
- errorNameTarget,
- [executableElementName, fieldElt.enclosingElement.displayName]);
+ errorNameTarget, [
+ executableElementName,
+ fieldElt.enclosingElement.displayName
+ ]);
return true;
}
}
@@ -3845,8 +3734,10 @@
if (methodElement.isStatic) {
_errorReporter.reportErrorForNode(
StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC,
- errorNameTarget,
- [executableElementName, methodElement.enclosingElement.displayName]);
+ errorNameTarget, [
+ executableElementName,
+ methodElement.enclosingElement.displayName
+ ]);
return true;
}
}
@@ -3874,11 +3765,8 @@
ParameterElement staticParameterElement = argument.staticParameterElement;
DartType staticParameterType =
staticParameterElement == null ? null : staticParameterElement.type;
- return _checkForArgumentTypeNotAssignable(
- argument,
- staticParameterType,
- _intType,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
+ return _checkForArgumentTypeNotAssignable(argument, staticParameterType,
+ _intType, StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
}
/**
@@ -3914,14 +3802,16 @@
return false;
}
VariableElement leftVariableElement = getVariableElement(lhs);
- DartType leftType =
- (leftVariableElement == null) ? getStaticType(lhs) : leftVariableElement.type;
+ DartType leftType = (leftVariableElement == null)
+ ? getStaticType(lhs)
+ : leftVariableElement.type;
DartType staticRightType = getStaticType(rhs);
if (!staticRightType.isAssignableTo(leftType)) {
_errorReporter.reportTypeErrorForNode(
- StaticTypeWarningCode.INVALID_ASSIGNMENT,
- rhs,
- [staticRightType, leftType]);
+ StaticTypeWarningCode.INVALID_ASSIGNMENT, rhs, [
+ staticRightType,
+ leftType
+ ]);
return true;
}
return false;
@@ -3937,14 +3827,15 @@
* @return `true` if and only if an error code is generated on the passed node
* See [StaticTypeWarningCode.INVALID_ASSIGNMENT].
*/
- bool _checkForInvalidCompoundAssignment(AssignmentExpression node,
- Expression lhs, Expression rhs) {
+ bool _checkForInvalidCompoundAssignment(
+ AssignmentExpression node, Expression lhs, Expression rhs) {
if (lhs == null) {
return false;
}
VariableElement leftVariableElement = getVariableElement(lhs);
- DartType leftType =
- (leftVariableElement == null) ? getStaticType(lhs) : leftVariableElement.type;
+ DartType leftType = (leftVariableElement == null)
+ ? getStaticType(lhs)
+ : leftVariableElement.type;
MethodElement invokedMethod = node.staticElement;
if (invokedMethod == null) {
return false;
@@ -3955,9 +3846,7 @@
}
if (!rightType.isAssignableTo(leftType)) {
_errorReporter.reportTypeErrorForNode(
- StaticTypeWarningCode.INVALID_ASSIGNMENT,
- rhs,
- [rightType, leftType]);
+ StaticTypeWarningCode.INVALID_ASSIGNMENT, rhs, [rightType, leftType]);
return true;
}
return false;
@@ -3977,20 +3866,20 @@
FieldElement fieldElement = staticElement;
if (fieldElement.isSynthetic) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD,
- node,
- [fieldName]);
+ CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD, node, [
+ fieldName
+ ]);
} else if (fieldElement.isStatic) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD,
- node,
- [fieldName]);
+ CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD, node, [
+ fieldName
+ ]);
}
} else {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD,
- node,
- [fieldName]);
+ CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD, node, [
+ fieldName
+ ]);
return;
}
}
@@ -4003,8 +3892,8 @@
* @param errorCode the error code to be reported if a modifier is found
* @return `true` if an error was reported
*/
- bool _checkForInvalidModifierOnBody(FunctionBody body,
- CompileTimeErrorCode errorCode) {
+ bool _checkForInvalidModifierOnBody(
+ FunctionBody body, CompileTimeErrorCode errorCode) {
sc.Token keyword = body.keyword;
if (keyword != null) {
_errorReporter.reportErrorForToken(errorCode, keyword, [keyword.lexeme]);
@@ -4023,8 +3912,7 @@
bool _checkForInvalidReferenceToThis(ThisExpression node) {
if (!_isThisInValidContext(node)) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS,
- node);
+ CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS, node);
return true;
}
return false;
@@ -4040,9 +3928,8 @@
* [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP]
* @return `true` if and only if an error code is generated on the passed node
*/
- bool
- _checkForInvalidTypeArgumentInConstTypedLiteral(NodeList<TypeName> arguments,
- ErrorCode errorCode) {
+ bool _checkForInvalidTypeArgumentInConstTypedLiteral(
+ NodeList<TypeName> arguments, ErrorCode errorCode) {
bool foundError = false;
for (TypeName typeName in arguments) {
if (typeName.type is TypeParameterType) {
@@ -4063,8 +3950,8 @@
* See [CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE], and
* [StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE].
*/
- bool _checkForListElementTypeNotAssignable(ListLiteral node,
- TypeArgumentList typeArguments) {
+ bool _checkForListElementTypeNotAssignable(
+ ListLiteral node, TypeArgumentList typeArguments) {
NodeList<TypeName> typeNames = typeArguments.arguments;
if (typeNames.length < 1) {
return false;
@@ -4076,15 +3963,13 @@
if (node.constKeyword != null) {
// TODO(paulberry): this error should be based on the actual type of the
// list element, not the static type. See dartbug.com/21119.
- if (_checkForArgumentTypeNotAssignableWithExpectedTypes(
- element,
+ if (_checkForArgumentTypeNotAssignableWithExpectedTypes(element,
listElementType,
CheckedModeCompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE)) {
hasProblems = true;
}
}
- if (_checkForArgumentTypeNotAssignableWithExpectedTypes(
- element,
+ if (_checkForArgumentTypeNotAssignableWithExpectedTypes(element,
listElementType,
StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE)) {
hasProblems = true;
@@ -4105,8 +3990,8 @@
* [StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE], and
* [StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE].
*/
- bool _checkForMapTypeNotAssignable(MapLiteral node,
- TypeArgumentList typeArguments) {
+ bool _checkForMapTypeNotAssignable(
+ MapLiteral node, TypeArgumentList typeArguments) {
// Prepare maps key/value types.
NodeList<TypeName> typeNames = typeArguments.arguments;
if (typeNames.length < 2) {
@@ -4123,29 +4008,22 @@
if (node.constKeyword != null) {
// TODO(paulberry): this error should be based on the actual type of the
// list element, not the static type. See dartbug.com/21119.
- if (_checkForArgumentTypeNotAssignableWithExpectedTypes(
- key,
- keyType,
+ if (_checkForArgumentTypeNotAssignableWithExpectedTypes(key, keyType,
CheckedModeCompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE)) {
hasProblems = true;
}
- if (_checkForArgumentTypeNotAssignableWithExpectedTypes(
- value,
+ if (_checkForArgumentTypeNotAssignableWithExpectedTypes(value,
valueType,
CheckedModeCompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE)) {
hasProblems = true;
}
}
if (_checkForArgumentTypeNotAssignableWithExpectedTypes(
- key,
- keyType,
- StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE)) {
+ key, keyType, StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE)) {
hasProblems = true;
}
if (_checkForArgumentTypeNotAssignableWithExpectedTypes(
- value,
- valueType,
- StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE)) {
+ value, valueType, StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE)) {
hasProblems = true;
}
}
@@ -4172,8 +4050,7 @@
for (PropertyAccessorElement accessor in _enclosingClass.accessors) {
if (className == accessor.name) {
_errorReporter.reportErrorForOffset(
- CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME,
- accessor.nameOffset,
+ CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME, accessor.nameOffset,
className.length);
problemReported = true;
}
@@ -4192,8 +4069,8 @@
* See [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES], and
* [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE].
*/
- bool _checkForMismatchedAccessorTypes(Declaration accessorDeclaration,
- String accessorTextName) {
+ bool _checkForMismatchedAccessorTypes(
+ Declaration accessorDeclaration, String accessorTextName) {
ExecutableElement accessorElement =
accessorDeclaration.element as ExecutableElement;
if (accessorElement is! PropertyAccessorElement) {
@@ -4210,8 +4087,7 @@
// If the setter and getter are in the same enclosing element, return,
// this prevents having MISMATCHED_GETTER_AND_SETTER_TYPES reported twice.
if (counterpartAccessor != null &&
- identical(
- counterpartAccessor.enclosingElement,
+ identical(counterpartAccessor.enclosingElement,
propertyAccessorElement.enclosingElement)) {
return false;
}
@@ -4229,8 +4105,8 @@
lookupIdentifier += "=";
}
// lookup with the identifier.
- ExecutableElement elementFromInheritance =
- _inheritanceManager.lookupInheritance(_enclosingClass, lookupIdentifier);
+ ExecutableElement elementFromInheritance = _inheritanceManager
+ .lookupInheritance(_enclosingClass, lookupIdentifier);
// Verify that we found something, and that it is an accessor
if (elementFromInheritance != null &&
elementFromInheritance is PropertyAccessorElement) {
@@ -4262,18 +4138,17 @@
if (enclosingClassForCounterpart == null) {
_errorReporter.reportTypeErrorForNode(
StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES,
- accessorDeclaration,
- [accessorTextName, setterType, getterType]);
+ accessorDeclaration, [accessorTextName, setterType, getterType]);
return true;
} else {
_errorReporter.reportTypeErrorForNode(
StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE,
- accessorDeclaration,
- [
- accessorTextName,
- setterType,
- getterType,
- enclosingClassForCounterpart.displayName]);
+ accessorDeclaration, [
+ accessorTextName,
+ setterType,
+ getterType,
+ enclosingClassForCounterpart.displayName
+ ]);
}
}
return false;
@@ -4329,9 +4204,9 @@
}
for (int i = 0; i < nameCount; i++) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
- statement,
- [constantNames[i]]);
+ CompileTimeErrorCode.MISSING_ENUM_CONSTANT_IN_SWITCH, statement, [
+ constantNames[i]
+ ]);
}
return true;
}
@@ -4352,14 +4227,12 @@
int withoutCount = _returnsWithout.length;
if (withCount > 0 && withoutCount > 0) {
for (int i = 0; i < withCount; i++) {
- _errorReporter.reportErrorForToken(
- StaticWarningCode.MIXED_RETURN_TYPES,
- _returnsWith[i].keyword);
+ _errorReporter.reportErrorForToken(StaticWarningCode.MIXED_RETURN_TYPES,
+ _returnsWith[i].returnKeyword);
}
for (int i = 0; i < withoutCount; i++) {
- _errorReporter.reportErrorForToken(
- StaticWarningCode.MIXED_RETURN_TYPES,
- _returnsWithout[i].keyword);
+ _errorReporter.reportErrorForToken(StaticWarningCode.MIXED_RETURN_TYPES,
+ _returnsWithout[i].returnKeyword);
}
return true;
}
@@ -4374,14 +4247,14 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR].
*/
- bool _checkForMixinDeclaresConstructor(TypeName mixinName,
- ClassElement mixinElement) {
+ bool _checkForMixinDeclaresConstructor(
+ TypeName mixinName, ClassElement mixinElement) {
for (ConstructorElement constructor in mixinElement.constructors) {
if (!constructor.isSynthetic && !constructor.isFactory) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR,
- mixinName,
- [mixinElement.name]);
+ CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR, mixinName, [
+ mixinElement.name
+ ]);
return true;
}
}
@@ -4396,16 +4269,16 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT].
*/
- bool _checkForMixinInheritsNotFromObject(TypeName mixinName,
- ClassElement mixinElement) {
+ bool _checkForMixinInheritsNotFromObject(
+ TypeName mixinName, ClassElement mixinElement) {
InterfaceType mixinSupertype = mixinElement.supertype;
if (mixinSupertype != null) {
if (!mixinSupertype.isObject ||
!mixinElement.isTypedef && mixinElement.mixins.length != 0) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT,
- mixinName,
- [mixinElement.name]);
+ CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, mixinName, [
+ mixinElement.name
+ ]);
return true;
}
}
@@ -4420,13 +4293,13 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.MIXIN_REFERENCES_SUPER].
*/
- bool _checkForMixinReferencesSuper(TypeName mixinName,
- ClassElement mixinElement) {
+ bool _checkForMixinReferencesSuper(
+ TypeName mixinName, ClassElement mixinElement) {
if (mixinElement.hasReferenceToSuper) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.MIXIN_REFERENCES_SUPER,
- mixinName,
- [mixinElement.name]);
+ CompileTimeErrorCode.MIXIN_REFERENCES_SUPER, mixinName, [
+ mixinElement.name
+ ]);
}
return false;
}
@@ -4445,8 +4318,7 @@
numSuperInitializers++;
if (numSuperInitializers > 1) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.MULTIPLE_SUPER_INITIALIZERS,
- initializer);
+ CompileTimeErrorCode.MULTIPLE_SUPER_INITIALIZERS, initializer);
}
}
}
@@ -4463,8 +4335,7 @@
bool _checkForNativeFunctionBodyInNonSDKCode(NativeFunctionBody node) {
if (!_isInSystemLibrary && !_hasExtUri) {
_errorReporter.reportErrorForNode(
- ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE,
- node);
+ ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE, node);
return true;
}
return false;
@@ -4501,14 +4372,14 @@
SimpleIdentifier name = constructorName.name;
if (name != null) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR,
- name,
- [className, name]);
+ StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR, name, [
+ className,
+ name
+ ]);
} else {
_errorReporter.reportErrorForNode(
StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT,
- constructorName,
- [className]);
+ constructorName, [className]);
}
return true;
}
@@ -4544,21 +4415,22 @@
if (superUnnamedConstructor != null) {
if (superUnnamedConstructor.isFactory) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR,
- node.name,
- [superUnnamedConstructor]);
+ CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR, node.name, [
+ superUnnamedConstructor
+ ]);
return true;
}
if (superUnnamedConstructor.isDefaultConstructor &&
- _enclosingClass.isSuperConstructorAccessible(superUnnamedConstructor)) {
+ _enclosingClass
+ .isSuperConstructorAccessible(superUnnamedConstructor)) {
return true;
}
}
// report problem
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT,
- node.name,
- [superType.displayName]);
+ CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT, node.name, [
+ superType.displayName
+ ]);
return true;
}
@@ -4575,8 +4447,8 @@
* [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR], and
* [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS].
*/
- bool
- _checkForNonAbstractClassInheritsAbstractMember(SimpleIdentifier classNameNode) {
+ bool _checkForNonAbstractClassInheritsAbstractMember(
+ SimpleIdentifier classNameNode) {
if (_enclosingClass.isAbstract) {
return false;
}
@@ -4598,10 +4470,10 @@
// Loop through the set of all executable elements declared in the implicit
// interface.
//
- MemberMap membersInheritedFromInterfaces =
- _inheritanceManager.getMapOfMembersInheritedFromInterfaces(_enclosingClass);
- MemberMap membersInheritedFromSuperclasses =
- _inheritanceManager.getMapOfMembersInheritedFromClasses(_enclosingClass);
+ MemberMap membersInheritedFromInterfaces = _inheritanceManager
+ .getMapOfMembersInheritedFromInterfaces(_enclosingClass);
+ MemberMap membersInheritedFromSuperclasses = _inheritanceManager
+ .getMapOfMembersInheritedFromClasses(_enclosingClass);
for (int i = 0; i < membersInheritedFromInterfaces.size; i++) {
String memberName = membersInheritedFromInterfaces.getKey(i);
ExecutableElement executableElt =
@@ -4649,16 +4521,12 @@
(elt is PropertyAccessorElement && !elt.isAbstract)) {
// Since we are comparing two function types, we need to do the
// appropriate type substitutions first ().
- FunctionType foundConcreteFT =
- _inheritanceManager.substituteTypeArgumentsInMemberFromInheritance(
- concreteType,
- memberName,
- enclosingType);
- FunctionType requiredMemberFT =
- _inheritanceManager.substituteTypeArgumentsInMemberFromInheritance(
- requiredMemberType,
- memberName,
- enclosingType);
+ FunctionType foundConcreteFT = _inheritanceManager
+ .substituteTypeArgumentsInMemberFromInheritance(
+ concreteType, memberName, enclosingType);
+ FunctionType requiredMemberFT = _inheritanceManager
+ .substituteTypeArgumentsInMemberFromInheritance(
+ requiredMemberType, memberName, enclosingType);
if (foundConcreteFT.isSubtypeOf(requiredMemberFT)) {
continue;
}
@@ -4705,41 +4573,41 @@
if (stringMembersArray.length == 1) {
analysisError = _errorReporter.newErrorWithProperties(
StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- classNameNode,
- [stringMembersArray[0]]);
+ classNameNode, [stringMembersArray[0]]);
} else if (stringMembersArray.length == 2) {
analysisError = _errorReporter.newErrorWithProperties(
StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
- classNameNode,
- [stringMembersArray[0], stringMembersArray[1]]);
+ classNameNode, [stringMembersArray[0], stringMembersArray[1]]);
} else if (stringMembersArray.length == 3) {
analysisError = _errorReporter.newErrorWithProperties(
StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE,
- classNameNode,
- [stringMembersArray[0], stringMembersArray[1], stringMembersArray[2]]);
+ classNameNode, [
+ stringMembersArray[0],
+ stringMembersArray[1],
+ stringMembersArray[2]
+ ]);
} else if (stringMembersArray.length == 4) {
analysisError = _errorReporter.newErrorWithProperties(
StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR,
- classNameNode,
- [
- stringMembersArray[0],
- stringMembersArray[1],
- stringMembersArray[2],
- stringMembersArray[3]]);
+ classNameNode, [
+ stringMembersArray[0],
+ stringMembersArray[1],
+ stringMembersArray[2],
+ stringMembersArray[3]
+ ]);
} else {
analysisError = _errorReporter.newErrorWithProperties(
StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS,
- classNameNode,
- [
- stringMembersArray[0],
- stringMembersArray[1],
- stringMembersArray[2],
- stringMembersArray[3],
- stringMembersArray.length - 4]);
+ classNameNode, [
+ stringMembersArray[0],
+ stringMembersArray[1],
+ stringMembersArray[2],
+ stringMembersArray[3],
+ stringMembersArray.length - 4
+ ]);
}
analysisError.setProperty(
- ErrorProperty.UNIMPLEMENTED_METHODS,
- missingOverridesArray);
+ ErrorProperty.UNIMPLEMENTED_METHODS, missingOverridesArray);
_errorReporter.reportError(analysisError);
return true;
}
@@ -4756,8 +4624,7 @@
DartType conditionType = getStaticType(condition);
if (conditionType != null && !conditionType.isAssignableTo(_boolType)) {
_errorReporter.reportErrorForNode(
- StaticTypeWarningCode.NON_BOOL_CONDITION,
- condition);
+ StaticTypeWarningCode.NON_BOOL_CONDITION, condition);
return true;
}
return false;
@@ -4776,8 +4643,7 @@
if (type is InterfaceType) {
if (!type.isAssignableTo(_boolType)) {
_errorReporter.reportErrorForNode(
- StaticTypeWarningCode.NON_BOOL_EXPRESSION,
- expression);
+ StaticTypeWarningCode.NON_BOOL_EXPRESSION, expression);
return true;
}
} else if (type is FunctionType) {
@@ -4785,8 +4651,7 @@
if (functionType.typeArguments.length == 0 &&
!functionType.returnType.isAssignableTo(_boolType)) {
_errorReporter.reportErrorForNode(
- StaticTypeWarningCode.NON_BOOL_EXPRESSION,
- expression);
+ StaticTypeWarningCode.NON_BOOL_EXPRESSION, expression);
return true;
}
}
@@ -4804,8 +4669,7 @@
DartType conditionType = getStaticType(expression);
if (conditionType != null && !conditionType.isAssignableTo(_boolType)) {
_errorReporter.reportErrorForNode(
- StaticTypeWarningCode.NON_BOOL_NEGATION_EXPRESSION,
- expression);
+ StaticTypeWarningCode.NON_BOOL_NEGATION_EXPRESSION, expression);
return true;
}
return false;
@@ -4842,8 +4706,7 @@
}
// report problem
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT,
- node);
+ CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT, node);
return true;
}
@@ -4867,8 +4730,7 @@
DartType type = typeName.type;
if (type != null && !type.isVoid) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.NON_VOID_RETURN_FOR_OPERATOR,
- typeName);
+ StaticWarningCode.NON_VOID_RETURN_FOR_OPERATOR, typeName);
}
}
// no warning
@@ -4887,8 +4749,7 @@
DartType type = typeName.type;
if (type != null && !type.isVoid) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.NON_VOID_RETURN_FOR_SETTER,
- typeName);
+ StaticWarningCode.NON_VOID_RETURN_FOR_SETTER, typeName);
}
}
return false;
@@ -4941,8 +4802,7 @@
}
// report problem
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.PRIVATE_OPTIONAL_PARAMETER,
- node);
+ CompileTimeErrorCode.PRIVATE_OPTIONAL_PARAMETER, node);
return true;
}
@@ -4955,8 +4815,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT].
*/
- bool _checkForRecursiveConstructorRedirect(ConstructorDeclaration node,
- ConstructorElement constructorElement) {
+ bool _checkForRecursiveConstructorRedirect(
+ ConstructorDeclaration node, ConstructorElement constructorElement) {
// we check generative constructor here
if (node.factoryKeyword != null) {
return false;
@@ -4971,8 +4831,7 @@
}
// report error
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT,
- initializer);
+ CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT, initializer);
return true;
}
}
@@ -4989,8 +4848,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT].
*/
- bool _checkForRecursiveFactoryRedirect(ConstructorDeclaration node,
- ConstructorElement constructorElement) {
+ bool _checkForRecursiveFactoryRedirect(
+ ConstructorDeclaration node, ConstructorElement constructorElement) {
// prepare redirected constructor
ConstructorName redirectedConstructorNode = node.redirectedConstructor;
if (redirectedConstructorNode == null) {
@@ -5021,8 +4880,7 @@
return false;
}
return _safeCheckForRecursiveInterfaceInheritance(
- classElt,
- new List<ClassElement>());
+ classElt, new List<ClassElement>());
}
/**
@@ -5075,8 +4933,7 @@
}
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR,
- invocation,
- [constructorStrName, enclosingTypeName]);
+ invocation, [constructorStrName, enclosingTypeName]);
} else {
if (redirectingElement.isFactory) {
_errorReporter.reportErrorForNode(
@@ -5118,8 +4975,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.REDIRECT_TO_NON_CONST_CONSTRUCTOR].
*/
- bool _checkForRedirectToNonConstConstructor(ConstructorDeclaration node,
- ConstructorElement constructorElement) {
+ bool _checkForRedirectToNonConstConstructor(
+ ConstructorDeclaration node, ConstructorElement constructorElement) {
// prepare redirected constructor
ConstructorName redirectedConstructorNode = node.redirectedConstructor;
if (redirectedConstructorNode == null) {
@@ -5160,8 +5017,7 @@
bool _checkForRethrowOutsideCatch(RethrowExpression node) {
if (!_isInCatchClause) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH,
- node);
+ CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH, node);
return true;
}
return false;
@@ -5187,8 +5043,7 @@
}
// report error
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR,
- body);
+ CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR, body);
return true;
}
@@ -5204,8 +5059,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE].
*/
- bool _checkForReturnOfInvalidType(Expression returnExpression,
- DartType expectedReturnType) {
+ bool _checkForReturnOfInvalidType(
+ Expression returnExpression, DartType expectedReturnType) {
if (_enclosingFunction == null) {
return false;
}
@@ -5223,18 +5078,22 @@
return false;
}
_errorReporter.reportTypeErrorForNode(
- StaticTypeWarningCode.RETURN_OF_INVALID_TYPE,
- returnExpression,
- [staticReturnType, expectedReturnType, _enclosingFunction.displayName]);
+ StaticTypeWarningCode.RETURN_OF_INVALID_TYPE, returnExpression, [
+ staticReturnType,
+ expectedReturnType,
+ _enclosingFunction.displayName
+ ]);
return true;
}
if (staticReturnType.isAssignableTo(expectedReturnType)) {
return false;
}
_errorReporter.reportTypeErrorForNode(
- StaticTypeWarningCode.RETURN_OF_INVALID_TYPE,
- returnExpression,
- [staticReturnType, expectedReturnType, _enclosingFunction.displayName]);
+ StaticTypeWarningCode.RETURN_OF_INVALID_TYPE, returnExpression, [
+ staticReturnType,
+ expectedReturnType,
+ _enclosingFunction.displayName
+ ]);
return true;
// TODO(brianwilkerson) Define a hint corresponding to the warning and
// report it if appropriate.
@@ -5263,8 +5122,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER].
*/
- bool _checkForStaticAccessToInstanceMember(ClassElement typeReference,
- SimpleIdentifier name) {
+ bool _checkForStaticAccessToInstanceMember(
+ ClassElement typeReference, SimpleIdentifier name) {
// OK, target is not a type
if (typeReference == null) {
return false;
@@ -5281,9 +5140,7 @@
}
// report problem
_errorReporter.reportErrorForNode(
- StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER,
- name,
- [name.name]);
+ StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, name, [name.name]);
return true;
}
@@ -5318,9 +5175,10 @@
}
// report problem
_errorReporter.reportErrorForNode(
- StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE,
- expression,
- [expressionType, caseType]);
+ StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE, expression, [
+ expressionType,
+ caseType
+ ]);
return true;
}
return false;
@@ -5333,15 +5191,14 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF].
*/
- bool
- _checkForTypeAliasCannotReferenceItself_function(FunctionTypeAlias node) {
+ bool _checkForTypeAliasCannotReferenceItself_function(
+ FunctionTypeAlias node) {
FunctionTypeAliasElement element = node.element;
if (!_hasTypedefSelfReference(element)) {
return false;
}
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
- node);
+ CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF, node);
return true;
}
@@ -5355,9 +5212,7 @@
bool _checkForTypeAnnotationDeferredClass(TypeName node) {
if (node != null && node.isDeferred) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS,
- node,
- [node.name]);
+ StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, node, [node.name]);
}
return false;
}
@@ -5410,9 +5265,7 @@
errorCode = StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS;
}
_errorReporter.reportTypeErrorForNode(
- errorCode,
- argTypeName,
- [argType, boundType]);
+ errorCode, argTypeName, [argType, boundType]);
foundError = true;
}
}
@@ -5433,8 +5286,7 @@
DartType type = node.type;
if (type is TypeParameterType) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC,
- node);
+ StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, node);
return true;
}
}
@@ -5461,9 +5313,9 @@
}
// report problem
_errorReporter.reportErrorForNode(
- StaticTypeWarningCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND,
- node,
- [element.displayName]);
+ StaticTypeWarningCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND, node, [
+ element.displayName
+ ]);
return true;
}
@@ -5478,8 +5330,8 @@
* [CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR], and
* [StaticWarningCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT].
*/
- bool
- _checkForUndefinedConstructorInInitializerImplicit(ConstructorDeclaration node) {
+ bool _checkForUndefinedConstructorInInitializerImplicit(
+ ConstructorDeclaration node) {
if (_enclosingClass == null) {
return false;
}
@@ -5518,13 +5370,14 @@
if (superUnnamedConstructor != null) {
if (superUnnamedConstructor.isFactory) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR,
- node.returnType,
- [superUnnamedConstructor]);
+ CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR, node.returnType, [
+ superUnnamedConstructor
+ ]);
return true;
}
if (!superUnnamedConstructor.isDefaultConstructor ||
- !_enclosingClass.isSuperConstructorAccessible(superUnnamedConstructor)) {
+ !_enclosingClass
+ .isSuperConstructorAccessible(superUnnamedConstructor)) {
int offset;
int length;
{
@@ -5534,17 +5387,14 @@
length = (name != null ? name.end : returnType.end) - offset;
}
_errorReporter.reportErrorForOffset(
- CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT,
- offset,
- length,
- [superType.displayName]);
+ CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT, offset,
+ length, [superType.displayName]);
}
return false;
}
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT,
- node.returnType,
- [superElement.name]);
+ node.returnType, [superElement.name]);
return true;
}
@@ -5556,8 +5406,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [StaticTypeWarningCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER].
*/
- bool
- _checkForUnqualifiedReferenceToNonLocalStaticMember(SimpleIdentifier name) {
+ bool _checkForUnqualifiedReferenceToNonLocalStaticMember(
+ SimpleIdentifier name) {
Element element = name.staticElement;
if (element == null || element is TypeParameterElement) {
return false;
@@ -5575,8 +5425,7 @@
}
_errorReporter.reportErrorForNode(
StaticTypeWarningCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER,
- name,
- [name.name]);
+ name, [name.name]);
return true;
}
@@ -5587,8 +5436,7 @@
if (fieldElement == null || fieldElement.isSynthetic) {
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD,
- node,
- [node.identifier.name]);
+ node, [node.identifier.name]);
} else {
ParameterElement parameterElement = node.element;
if (parameterElement is FieldFormalParameterElementImpl) {
@@ -5598,31 +5446,26 @@
if (fieldElement.isSynthetic) {
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD,
- node,
- [node.identifier.name]);
+ node, [node.identifier.name]);
} else if (fieldElement.isStatic) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD,
- node,
+ CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD, node,
[node.identifier.name]);
} else if (declaredType != null &&
fieldType != null &&
!declaredType.isAssignableTo(fieldType)) {
_errorReporter.reportTypeErrorForNode(
StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE,
- node,
- [declaredType, fieldType]);
+ node, [declaredType, fieldType]);
}
} else {
if (fieldElement.isSynthetic) {
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD,
- node,
- [node.identifier.name]);
+ node, [node.identifier.name]);
} else if (fieldElement.isStatic) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD,
- node,
+ CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD, node,
[node.identifier.name]);
}
}
@@ -5647,8 +5490,7 @@
return false;
}
_errorReporter.reportErrorForNode(
- StaticWarningCode.VOID_RETURN_FOR_GETTER,
- returnType);
+ StaticWarningCode.VOID_RETURN_FOR_GETTER, returnType);
return true;
}
@@ -5702,16 +5544,14 @@
if (expected != -1 && numParameters != expected) {
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR,
- nameNode,
- [name, expected, numParameters]);
+ nameNode, [name, expected, numParameters]);
return true;
}
// check for operator "-"
if ("-" == name && numParameters > 1) {
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS,
- nameNode,
- [numParameters]);
+ nameNode, [numParameters]);
return true;
}
// OK
@@ -5728,8 +5568,8 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER].
*/
- bool _checkForWrongNumberOfParametersForSetter(SimpleIdentifier setterName,
- FormalParameterList parameterList) {
+ bool _checkForWrongNumberOfParametersForSetter(
+ SimpleIdentifier setterName, FormalParameterList parameterList) {
if (setterName == null) {
return false;
}
@@ -5753,8 +5593,8 @@
*
* This method should only be called in generator functions.
*/
- bool _checkForYieldOfInvalidType(Expression yieldExpression,
- bool isYieldEach) {
+ bool _checkForYieldOfInvalidType(
+ Expression yieldExpression, bool isYieldEach) {
assert(_inGenerator);
if (_enclosingFunction == null) {
return false;
@@ -5773,9 +5613,10 @@
}
if (!impliedReturnType.isAssignableTo(declaredReturnType)) {
_errorReporter.reportTypeErrorForNode(
- StaticTypeWarningCode.YIELD_OF_INVALID_TYPE,
- yieldExpression,
- [impliedReturnType, declaredReturnType]);
+ StaticTypeWarningCode.YIELD_OF_INVALID_TYPE, yieldExpression, [
+ impliedReturnType,
+ declaredReturnType
+ ]);
return true;
}
if (isYieldEach) {
@@ -5790,9 +5631,10 @@
}
if (!impliedReturnType.isAssignableTo(requiredReturnType)) {
_errorReporter.reportTypeErrorForNode(
- StaticTypeWarningCode.YIELD_OF_INVALID_TYPE,
- yieldExpression,
- [impliedReturnType, requiredReturnType]);
+ StaticTypeWarningCode.YIELD_OF_INVALID_TYPE, yieldExpression, [
+ impliedReturnType,
+ requiredReturnType
+ ]);
return true;
}
}
@@ -5829,8 +5671,7 @@
callMethod is! MethodElement ||
(callMethod as MethodElement).isAbstract) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.FUNCTION_WITHOUT_CALL,
- node.name);
+ StaticWarningCode.FUNCTION_WITHOUT_CALL, node.name);
return true;
}
return false;
@@ -5860,8 +5701,7 @@
if (interfaceNode.type == superType) {
hasProblem = true;
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.IMPLEMENTS_SUPER_CLASS,
- interfaceNode,
+ CompileTimeErrorCode.IMPLEMENTS_SUPER_CLASS, interfaceNode,
[superType.displayName]);
}
}
@@ -5882,8 +5722,9 @@
}
DartType staticReturnType = getStaticType(returnExpression);
if (staticReturnType != null && _enclosingFunction.isAsynchronous) {
- return _typeProvider.futureType.substitute4(
- <DartType>[StaticTypeAnalyzer.flattenFutures(_typeProvider, staticReturnType)]);
+ return _typeProvider.futureType.substitute4(<DartType>[
+ StaticTypeAnalyzer.flattenFutures(_typeProvider, staticReturnType)
+ ]);
}
return staticReturnType;
}
@@ -5897,18 +5738,15 @@
ErrorCode _getBaseCaseErrorCode(ClassElement classElt) {
InterfaceType supertype = classElt.supertype;
if (supertype != null && _enclosingClass == supertype.element) {
- return
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS;
+ return CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS;
}
List<InterfaceType> mixins = classElt.mixins;
for (int i = 0; i < mixins.length; i++) {
if (_enclosingClass == mixins[i].element) {
- return
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WITH;
+ return CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WITH;
}
}
- return
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS;
+ return CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS;
}
/**
@@ -5976,11 +5814,10 @@
int count = directives.length;
if (count > 1) {
for (int i = 0; i < count; i++) {
- sc.Token deferredToken = directives[i].deferredToken;
+ sc.Token deferredToken = directives[i].deferredKeyword;
if (deferredToken != null) {
_errorReporter.reportErrorForToken(
- CompileTimeErrorCode.SHARED_DEFERRED_PREFIX,
- deferredToken);
+ CompileTimeErrorCode.SHARED_DEFERRED_PREFIX, deferredToken);
foundError = true;
}
}
@@ -6015,7 +5852,8 @@
Set<Element> checked = new HashSet<Element>();
List<Element> toCheck = new List<Element>();
GeneralizingElementVisitor_ErrorVerifier_hasTypedefSelfReference elementVisitor =
- new GeneralizingElementVisitor_ErrorVerifier_hasTypedefSelfReference(toCheck);
+ new GeneralizingElementVisitor_ErrorVerifier_hasTypedefSelfReference(
+ toCheck);
toCheck.add(target);
bool firstIteration = true;
while (true) {
@@ -6072,8 +5910,8 @@
* @param classElt the class method to search through the members of
* @return `true` iff the passed member is found in the passed class element
*/
- bool _isMemberInClassOrMixin(ExecutableElement executableElt,
- ClassElement classElt) {
+ bool _isMemberInClassOrMixin(
+ ExecutableElement executableElt, ClassElement classElt) {
ExecutableElement foundElt = null;
String executableName = executableElt.name;
if (executableElt is MethodElement) {
@@ -6147,8 +5985,8 @@
* @return `true` if the given identifier is in a location where it is allowed to resolve to
* a static member of a supertype
*/
- bool
- _isUnqualifiedReferenceToNonLocalStaticMemberAllowed(SimpleIdentifier node) {
+ bool _isUnqualifiedReferenceToNonLocalStaticMemberAllowed(
+ SimpleIdentifier node) {
if (node.inDeclarationContext()) {
return true;
}
@@ -6174,8 +6012,8 @@
return false;
}
- bool _isUserDefinedObject(EvaluationResultImpl result) =>
- result == null || (result.value != null && result.value.isUserDefinedObject);
+ bool _isUserDefinedObject(EvaluationResultImpl result) => result == null ||
+ (result.value != null && result.value.isUserDefinedObject);
/**
* This checks the class declaration is not a superinterface to itself.
@@ -6188,8 +6026,8 @@
* [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS], and
* [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WITH].
*/
- bool _safeCheckForRecursiveInterfaceInheritance(ClassElement classElt,
- List<ClassElement> path) {
+ bool _safeCheckForRecursiveInterfaceInheritance(
+ ClassElement classElt, List<ClassElement> path) {
// Detect error condition.
int size = path.length;
// If this is not the base case (size > 0), and the enclosing class is the
@@ -6208,19 +6046,19 @@
buffer.write(classElt.displayName);
_errorReporter.reportErrorForOffset(
CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- _enclosingClass.nameOffset,
- enclosingClassName.length,
- [enclosingClassName, buffer.toString()]);
+ _enclosingClass.nameOffset, enclosingClassName.length, [
+ enclosingClassName,
+ buffer.toString()
+ ]);
return true;
} else {
// RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS or
// RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS or
// RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WITH
- _errorReporter.reportErrorForOffset(
- _getBaseCaseErrorCode(classElt),
- _enclosingClass.nameOffset,
- enclosingClassName.length,
- [enclosingClassName]);
+ _errorReporter.reportErrorForOffset(_getBaseCaseErrorCode(classElt),
+ _enclosingClass.nameOffset, enclosingClassName.length, [
+ enclosingClassName
+ ]);
return true;
}
}
@@ -6237,8 +6075,7 @@
List<InterfaceType> interfaceTypes = classElt.interfaces;
for (InterfaceType interfaceType in interfaceTypes) {
if (_safeCheckForRecursiveInterfaceInheritance(
- interfaceType.element,
- path)) {
+ interfaceType.element, path)) {
return true;
}
}
@@ -6285,8 +6122,8 @@
}
}
-class GeneralizingElementVisitor_ErrorVerifier_hasTypedefSelfReference extends
- GeneralizingElementVisitor<Object> {
+class GeneralizingElementVisitor_ErrorVerifier_hasTypedefSelfReference
+ extends GeneralizingElementVisitor<Object> {
List<Element> toCheck;
GeneralizingElementVisitor_ErrorVerifier_hasTypedefSelfReference(this.toCheck)
diff --git a/pkg/analyzer/lib/src/generated/html.dart b/pkg/analyzer/lib/src/generated/html.dart
index af8048c..c8cc1d3 100644
--- a/pkg/analyzer/lib/src/generated/html.dart
+++ b/pkg/analyzer/lib/src/generated/html.dart
@@ -83,8 +83,9 @@
* Set array of element tags for which the content between tags should be consider a single token.
*/
void set passThroughElements(List<String> passThroughElements) {
- this._passThroughElements =
- passThroughElements != null ? passThroughElements : _NO_PASS_THROUGH_ELEMENTS;
+ this._passThroughElements = passThroughElements != null
+ ? passThroughElements
+ : _NO_PASS_THROUGH_ELEMENTS;
}
/**
@@ -361,21 +362,21 @@
/**
* A set containing the names of tags that do not have a closing tag.
*/
- static Set<String> SELF_CLOSING = new HashSet<String>.from(
- <String>[
- "area",
- "base",
- "basefont",
- "br",
- "col",
- "frame",
- "hr",
- "img",
- "input",
- "link",
- "meta",
- "param",
- "!"]);
+ static Set<String> SELF_CLOSING = new HashSet<String>.from(<String>[
+ "area",
+ "base",
+ "basefont",
+ "br",
+ "col",
+ "frame",
+ "hr",
+ "img",
+ "input",
+ "link",
+ "meta",
+ "param",
+ "!"
+ ]);
/**
* The line information associated with the source being parsed.
@@ -402,24 +403,16 @@
@override
XmlTagNode createTagNode(Token nodeStart, Token tag,
List<XmlAttributeNode> attributes, Token attributeEnd,
- List<XmlTagNode> tagNodes, Token contentEnd, Token closingTag, Token nodeEnd) {
+ List<XmlTagNode> tagNodes, Token contentEnd, Token closingTag,
+ Token nodeEnd) {
if (_isScriptNode(tag, attributes, tagNodes)) {
- HtmlScriptTagNode tagNode = new HtmlScriptTagNode(
- nodeStart,
- tag,
- attributes,
- attributeEnd,
- tagNodes,
- contentEnd,
- closingTag,
- nodeEnd);
+ HtmlScriptTagNode tagNode = new HtmlScriptTagNode(nodeStart, tag,
+ attributes, attributeEnd, tagNodes, contentEnd, closingTag, nodeEnd);
String contents = tagNode.content;
int contentOffset = attributeEnd.end;
LineInfo_Location location = _lineInfo.getLocation(contentOffset);
- sc.Scanner scanner = new sc.Scanner(
- source,
- new sc.SubSequenceReader(contents, contentOffset),
- _errorListener);
+ sc.Scanner scanner = new sc.Scanner(source,
+ new sc.SubSequenceReader(contents, contentOffset), _errorListener);
scanner.setSourceStart(location.lineNumber, location.columnNumber);
sc.Token firstToken = scanner.tokenize();
Parser parser = new Parser(source, _errorListener);
@@ -428,15 +421,8 @@
tagNode.script = unit;
return tagNode;
}
- return new XmlTagNode(
- nodeStart,
- tag,
- attributes,
- attributeEnd,
- tagNodes,
- contentEnd,
- closingTag,
- nodeEnd);
+ return new XmlTagNode(nodeStart, tag, attributes, attributeEnd, tagNodes,
+ contentEnd, closingTag, nodeEnd);
}
@override
@@ -461,8 +447,8 @@
* @param node the node to be tested (not `null`)
* @return `true` if the node is a Dart script
*/
- bool _isScriptNode(Token tag, List<XmlAttributeNode> attributes,
- List<XmlTagNode> tagNodes) {
+ bool _isScriptNode(
+ Token tag, List<XmlAttributeNode> attributes, List<XmlTagNode> tagNodes) {
if (tagNodes.length != 0 || tag.lexeme != _SCRIPT) {
return false;
}
@@ -489,8 +475,8 @@
* @param token the token to start parsing from
* @return the Dart expression that was parsed
*/
- static Expression parseEmbeddedExpression(Source source, sc.Token token,
- AnalysisErrorListener errorListener) {
+ static Expression parseEmbeddedExpression(
+ Source source, sc.Token token, AnalysisErrorListener errorListener) {
Parser parser = new Parser(source, errorListener);
return parser.parseExpression(token);
}
@@ -507,10 +493,8 @@
static sc.Token scanDartSource(Source source, LineInfo lineInfo,
String contents, int contentOffset, AnalysisErrorListener errorListener) {
LineInfo_Location location = lineInfo.getLocation(contentOffset);
- sc.Scanner scanner = new sc.Scanner(
- source,
- new sc.SubSequenceReader(contents, contentOffset),
- errorListener);
+ sc.Scanner scanner = new sc.Scanner(source,
+ new sc.SubSequenceReader(contents, contentOffset), errorListener);
scanner.setSourceStart(location.lineNumber, location.columnNumber);
return scanner.tokenize();
}
@@ -546,16 +530,10 @@
*/
HtmlScriptTagNode(Token nodeStart, Token tag,
List<XmlAttributeNode> attributes, Token attributeEnd,
- List<XmlTagNode> tagNodes, Token contentEnd, Token closingTag, Token nodeEnd)
- : super(
- nodeStart,
- tag,
- attributes,
- attributeEnd,
- tagNodes,
- contentEnd,
- closingTag,
- nodeEnd);
+ List<XmlTagNode> tagNodes, Token contentEnd, Token closingTag,
+ Token nodeEnd)
+ : super(nodeStart, tag, attributes, attributeEnd, tagNodes, contentEnd,
+ closingTag, nodeEnd);
/**
* Return the AST structure representing the Dart code within this tag, or `null` if this
@@ -900,18 +878,19 @@
static const TokenType TEXT = const TokenType('TEXT', 11, null);
static const List<TokenType> values = const [
- EOF,
- EQ,
- GT,
- LT_SLASH,
- LT,
- SLASH_GT,
- COMMENT,
- DECLARATION,
- DIRECTIVE,
- STRING,
- TAG,
- TEXT];
+ EOF,
+ EQ,
+ GT,
+ LT_SLASH,
+ LT,
+ SLASH_GT,
+ COMMENT,
+ DECLARATION,
+ DIRECTIVE,
+ STRING,
+ TAG,
+ TEXT
+ ];
/**
* The lexeme that defines this type of token, or `null` if there is more than one possible
@@ -1446,16 +1425,9 @@
*/
XmlTagNode createTagNode(Token nodeStart, Token tag,
List<XmlAttributeNode> attributes, Token attributeEnd,
- List<XmlTagNode> tagNodes, Token contentEnd, Token closingTag, Token nodeEnd) =>
- new XmlTagNode(
- nodeStart,
- tag,
- attributes,
- attributeEnd,
- tagNodes,
- contentEnd,
- closingTag,
- nodeEnd);
+ List<XmlTagNode> tagNodes, Token contentEnd, Token closingTag,
+ Token nodeEnd) => new XmlTagNode(nodeStart, tag, attributes, attributeEnd,
+ tagNodes, contentEnd, closingTag, nodeEnd);
/**
* Answer `true` if the specified tag is self closing and thus should never have content or
@@ -1625,15 +1597,8 @@
}
// If the node has no children, then return the node
if (attributeEnd.type == TokenType.SLASH_GT || isSelfClosing(tag)) {
- return createTagNode(
- nodeStart,
- tag,
- attributes,
- attributeEnd,
- XmlTagNode.NO_TAG_NODES,
- _currentToken,
- null,
- attributeEnd);
+ return createTagNode(nodeStart, tag, attributes, attributeEnd,
+ XmlTagNode.NO_TAG_NODES, _currentToken, null, attributeEnd);
}
// Parse the child tag nodes
List<XmlTagNode> tagNodes = _parseChildTagNodes();
@@ -1666,15 +1631,8 @@
_reportUnexpectedToken();
nodeEnd = _insertSyntheticToken(TokenType.GT);
}
- return createTagNode(
- nodeStart,
- tag,
- attributes,
- attributeEnd,
- tagNodes,
- contentEnd,
- closingTag,
- nodeEnd);
+ return createTagNode(nodeStart, tag, attributes, attributeEnd, tagNodes,
+ contentEnd, closingTag, nodeEnd);
}
/**
@@ -1781,8 +1739,8 @@
* `null`)
*/
XmlTagNode(this.nodeStart, this._tag, List<XmlAttributeNode> attributes,
- this.attributeEnd, List<XmlTagNode> tagNodes, this.contentEnd, this.closingTag,
- this.nodeEnd) {
+ this.attributeEnd, List<XmlTagNode> tagNodes, this.contentEnd,
+ this.closingTag, this.nodeEnd) {
this._attributes = becomeParentOfAll(attributes, ifEmpty: NO_ATTRIBUTES);
this._tagNodes = becomeParentOfAll(tagNodes, ifEmpty: NO_TAG_NODES);
}
diff --git a/pkg/analyzer/lib/src/generated/incremental_logger.dart b/pkg/analyzer/lib/src/generated/incremental_logger.dart
index 2c1f3e5..8abc6fe 100644
--- a/pkg/analyzer/lib/src/generated/incremental_logger.dart
+++ b/pkg/analyzer/lib/src/generated/incremental_logger.dart
@@ -4,7 +4,6 @@
library engine.incremental_logger;
-
/**
* The shared instance of [Logger] used by several incremental resolution
* classes. It is initialized externally by the Analysis Engine client.
@@ -21,7 +20,6 @@
*/
final Logger PRINT_LOGGER = new StringSinkLogger(new _PrintStringSink());
-
/**
* A simple hierarchical logger.
*/
@@ -47,7 +45,6 @@
LoggingTimer startTimer();
}
-
/**
* The handle of a timer.
*/
@@ -68,7 +65,6 @@
}
}
-
/**
* A [Logger] that writes to a [StringSink].
*/
@@ -130,7 +126,6 @@
}
}
-
class _LoggerSection {
final DateTime start = new DateTime.now();
final String indent;
@@ -138,22 +133,18 @@
_LoggerSection(this.indent, this.name);
}
-
/**
* A [Logger] that does nothing.
*/
class _NullLogger implements Logger {
@override
- void enter(String name) {
- }
+ void enter(String name) {}
@override
- void exit() {
- }
+ void exit() {}
@override
- void log(Object obj) {
- }
+ void log(Object obj) {}
@override
LoggingTimer startTimer() {
@@ -161,7 +152,6 @@
}
}
-
/**
* A [StringSink] implementation that uses `print`.
*/
diff --git a/pkg/analyzer/lib/src/generated/incremental_resolution_validator.dart b/pkg/analyzer/lib/src/generated/incremental_resolution_validator.dart
index 2b9afd0..bab107e 100644
--- a/pkg/analyzer/lib/src/generated/incremental_resolution_validator.dart
+++ b/pkg/analyzer/lib/src/generated/incremental_resolution_validator.dart
@@ -7,7 +7,6 @@
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart';
-
/**
* Validates that the [actual] and the [expected] units have the same structure
* and resolution. Throws [IncrementalResolutionMismatch] otherwise.
@@ -19,7 +18,6 @@
actual.accept(validator);
}
-
/**
* This exception is thrown when a mismatch between actual and expected AST
* or resolution is found.
@@ -29,7 +27,6 @@
IncrementalResolutionMismatch(this.message);
}
-
class _SameResolutionValidator implements AstVisitor {
final bool validateTypes;
AstNode other;
@@ -37,8 +34,7 @@
_SameResolutionValidator(this.validateTypes, this.other);
@override
- visitAdjacentStrings(AdjacentStrings node) {
- }
+ visitAdjacentStrings(AdjacentStrings node) {}
@override
visitAnnotation(Annotation node) {
@@ -248,12 +244,10 @@
}
@override
- visitEmptyFunctionBody(EmptyFunctionBody node) {
- }
+ visitEmptyFunctionBody(EmptyFunctionBody node) {}
@override
- visitEmptyStatement(EmptyStatement node) {
- }
+ visitEmptyStatement(EmptyStatement node) {}
@override
visitEnumConstantDeclaration(EnumConstantDeclaration node) {
@@ -445,8 +439,7 @@
}
@override
- visitInterpolationString(InterpolationString node) {
- }
+ visitInterpolationString(InterpolationString node) {}
@override
visitIsExpression(IsExpression node) {
@@ -528,12 +521,10 @@
}
@override
- visitNativeClause(NativeClause node) {
- }
+ visitNativeClause(NativeClause node) {}
@override
- visitNativeFunctionBody(NativeFunctionBody node) {
- }
+ visitNativeFunctionBody(NativeFunctionBody node) {}
@override
visitNullLiteral(NullLiteral node) {
@@ -615,8 +606,7 @@
}
@override
- visitScriptTag(ScriptTag node) {
- }
+ visitScriptTag(ScriptTag node) {}
@override
visitShowCombinator(ShowCombinator node) {
@@ -640,8 +630,7 @@
}
@override
- visitSimpleStringLiteral(SimpleStringLiteral node) {
- }
+ visitSimpleStringLiteral(SimpleStringLiteral node) {}
@override
visitStringInterpolation(StringInterpolation node) {
@@ -685,8 +674,7 @@
}
@override
- visitSymbolLiteral(SymbolLiteral node) {
- }
+ visitSymbolLiteral(SymbolLiteral node) {}
@override
visitThisExpression(ThisExpression node) {
@@ -894,8 +882,8 @@
}
}
- void _visitNormalFormalParameter(NormalFormalParameter node,
- NormalFormalParameter other) {
+ void _visitNormalFormalParameter(
+ NormalFormalParameter node, NormalFormalParameter other) {
_verifyElement(node.element, other.element);
_visitNode(node.documentationComment, other.documentationComment);
_visitList(node.metadata, other.metadata);
@@ -915,9 +903,9 @@
ElementLocation location = element.location;
List<String> components = location.components;
String uriPrefix = '';
- Element unit = element is CompilationUnitElement ?
- element :
- element.getAncestor((e) => e is CompilationUnitElement);
+ Element unit = element is CompilationUnitElement
+ ? element
+ : element.getAncestor((e) => e is CompilationUnitElement);
if (unit != null) {
String libComponent = components[0];
String unitComponent = components[1];
diff --git a/pkg/analyzer/lib/src/generated/incremental_resolver.dart b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
index ef8b807..44cca00 100644
--- a/pkg/analyzer/lib/src/generated/incremental_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
@@ -22,13 +22,11 @@
import 'source.dart';
import 'utilities_dart.dart';
-
/**
* If `true`, an attempt to resolve API-changing modifications is made.
*/
bool _resolveApiChanges = false;
-
/**
* This method is used to enable/disable API-changing modifications resolution.
*/
@@ -36,7 +34,6 @@
_resolveApiChanges = value;
}
-
/**
* Instances of the class [DeclarationMatcher] determine whether the element
* model defined by a given AST structure matches an existing element model.
@@ -183,9 +180,9 @@
visitConstructorDeclaration(ConstructorDeclaration node) {
_hasConstructor = true;
SimpleIdentifier constructorName = node.name;
- ConstructorElementImpl element = constructorName == null ?
- _enclosingClass.unnamedConstructor :
- _enclosingClass.getNamedConstructor(constructorName.name);
+ ConstructorElementImpl element = constructorName == null
+ ? _enclosingClass.unnamedConstructor
+ : _enclosingClass.getNamedConstructor(constructorName.name);
_processElement(element);
_assertCompatibleParameters(node.parameters, element.parameters);
// TODO(scheglov) debug null Location
@@ -270,8 +267,7 @@
_assertFalse(element.isSynthetic);
_assertSameType(node.returnType, element.returnType);
_assertCompatibleParameters(
- node.functionExpression.parameters,
- element.parameters);
+ node.functionExpression.parameters, element.parameters);
_assertBodyModifiers(node.functionExpression.body, element);
// matches, update the existing element
ExecutableElement newElement = node.element;
@@ -408,8 +404,7 @@
_assertEquals(_enclosingFieldNode.isStatic, element.isStatic);
}
_assertSameType(
- (node.parent as VariableDeclarationList).type,
- element.type);
+ (node.parent as VariableDeclarationList).type, element.type);
// matches, restore the existing element
node.name.staticElement = element;
if (element is VariableElementImpl) {
@@ -463,8 +458,8 @@
_assertTrue(hideNames.isEmpty);
}
- void _assertCompatibleParameter(FormalParameter node,
- ParameterElement element) {
+ void _assertCompatibleParameter(
+ FormalParameter node, ParameterElement element) {
_assertEquals(node.kind, element.parameterKind);
if (node.kind == ParameterKind.NAMED) {
_assertEquals(node.identifier.name, element.name);
@@ -489,8 +484,8 @@
}
}
- void _assertCompatibleParameters(FormalParameterList nodes,
- List<ParameterElement> elements) {
+ void _assertCompatibleParameters(
+ FormalParameterList nodes, List<ParameterElement> elements) {
if (nodes == null) {
return _assertEquals(elements.length, 0);
}
@@ -597,13 +592,13 @@
}
}
- void _assertSameTypeParameter(TypeParameter node,
- TypeParameterElement element) {
+ void _assertSameTypeParameter(
+ TypeParameter node, TypeParameterElement element) {
_assertSameType(node.bound, element.bound);
}
- void _assertSameTypeParameters(TypeParameterList nodesList,
- List<TypeParameterElement> elements) {
+ void _assertSameTypeParameters(
+ TypeParameterList nodesList, List<TypeParameterElement> elements) {
if (nodesList == null) {
return _assertEquals(elements.length, 0);
}
@@ -709,8 +704,8 @@
* Return the [UriReferencedElement] from [elements] with the given [uri], or
* `null` if there is no such element.
*/
- static UriReferencedElement
- _findUriReferencedElement(List<UriReferencedElement> elements, String uri) {
+ static UriReferencedElement _findUriReferencedElement(
+ List<UriReferencedElement> elements, String uri) {
for (UriReferencedElement element in elements) {
if (element.uri == uri) {
return element;
@@ -743,8 +738,8 @@
}
}
- static void _setLocalElements(ExecutableElementImpl to,
- ExecutableElement from) {
+ static void _setLocalElements(
+ ExecutableElementImpl to, ExecutableElement from) {
to.functions = from.functions;
to.labels = from.labels;
to.localVariables = from.localVariables;
@@ -752,7 +747,6 @@
}
}
-
/**
* Describes how declarations match an existing elements model.
*/
@@ -780,7 +774,6 @@
String toString() => name;
}
-
/**
* Instances of the class [IncrementalResolver] resolve the smallest portion of
* an AST structure that we currently know how to resolve.
@@ -945,15 +938,14 @@
*
* [node] - the node being tested.
*/
- bool _canBeResolved(AstNode node) =>
- node is ClassDeclaration ||
- node is ClassTypeAlias ||
- node is CompilationUnit ||
- node is ConstructorDeclaration ||
- node is FunctionDeclaration ||
- node is FunctionTypeAlias ||
- node is MethodDeclaration ||
- node is TopLevelVariableDeclaration;
+ bool _canBeResolved(AstNode node) => node is ClassDeclaration ||
+ node is ClassTypeAlias ||
+ node is CompilationUnit ||
+ node is ConstructorDeclaration ||
+ node is FunctionDeclaration ||
+ node is FunctionTypeAlias ||
+ node is MethodDeclaration ||
+ node is TopLevelVariableDeclaration;
/**
* Starting at [node], find the smallest AST node that can be resolved
@@ -1015,31 +1007,19 @@
// resolve types
{
TypeResolverVisitor visitor = new TypeResolverVisitor.con3(
- _definingLibrary,
- _source,
- _typeProvider,
- scope,
- errorListener);
+ _definingLibrary, _source, _typeProvider, scope, errorListener);
node.accept(visitor);
}
// resolve variables
{
VariableResolverVisitor visitor = new VariableResolverVisitor.con2(
- _definingLibrary,
- _source,
- _typeProvider,
- scope,
- errorListener);
+ _definingLibrary, _source, _typeProvider, scope, errorListener);
node.accept(visitor);
}
// resolve references
{
ResolverVisitor visitor = new ResolverVisitor.con3(
- _definingLibrary,
- _source,
- _typeProvider,
- scope,
- errorListener);
+ _definingLibrary, _source, _typeProvider, scope, errorListener);
if (_resolutionContext.enclosingClassDeclaration != null) {
visitor.visitClassDeclarationIncrementally(
_resolutionContext.enclosingClassDeclaration);
@@ -1079,8 +1059,8 @@
void _updateElementNameOffsets() {
LoggingTimer timer = logger.startTimer();
try {
- _definingUnit.accept(
- new _ElementNameOffsetUpdater(_updateOffset, _updateDelta));
+ _definingUnit
+ .accept(new _ElementNameOffsetUpdater(_updateOffset, _updateDelta));
} finally {
timer.stop('update element offsets');
}
@@ -1092,24 +1072,20 @@
entry.getValueInLibrary(DartEntry.RESOLUTION_ERRORS, _librarySource);
List<AnalysisError> errors = _updateErrors(oldErrors, _resolveErrors);
entry.setValueInLibrary(
- DartEntry.RESOLUTION_ERRORS,
- _librarySource,
- errors);
+ DartEntry.RESOLUTION_ERRORS, _librarySource, errors);
}
{
- List<AnalysisError> oldErrors =
- entry.getValueInLibrary(DartEntry.VERIFICATION_ERRORS, _librarySource);
+ List<AnalysisError> oldErrors = entry.getValueInLibrary(
+ DartEntry.VERIFICATION_ERRORS, _librarySource);
List<AnalysisError> errors = _updateErrors(oldErrors, _verifyErrors);
entry.setValueInLibrary(
- DartEntry.VERIFICATION_ERRORS,
- _librarySource,
- errors);
+ DartEntry.VERIFICATION_ERRORS, _librarySource, errors);
}
entry.setValueInLibrary(DartEntry.LINTS, _librarySource, _lints);
}
- List<AnalysisError> _updateErrors(List<AnalysisError> oldErrors,
- List<AnalysisError> newErrors) {
+ List<AnalysisError> _updateErrors(
+ List<AnalysisError> oldErrors, List<AnalysisError> newErrors) {
List<AnalysisError> errors = new List<AnalysisError>();
// add updated old errors
for (AnalysisError error in oldErrors) {
@@ -1137,10 +1113,8 @@
try {
RecordingErrorListener errorListener = new RecordingErrorListener();
ErrorReporter errorReporter = new ErrorReporter(errorListener, _source);
- ErrorVerifier errorVerifier = new ErrorVerifier(
- errorReporter,
- _definingLibrary,
- _typeProvider,
+ ErrorVerifier errorVerifier = new ErrorVerifier(errorReporter,
+ _definingLibrary, _typeProvider,
new InheritanceManager(_definingLibrary));
if (_resolutionContext.enclosingClassDeclaration != null) {
errorVerifier.visitClassDeclarationIncrementally(
@@ -1154,7 +1128,6 @@
}
}
-
class PoorMansIncrementalResolver {
final TypeProvider _typeProvider;
final Source _unitSource;
@@ -1228,10 +1201,7 @@
_shiftTokens(firstPair.oldToken);
{
IncrementalResolver incrementalResolver = new IncrementalResolver(
- _unitElement,
- _updateOffset,
- _updateEndOld,
- _updateEndNew);
+ _unitElement, _updateOffset, _updateEndOld, _updateEndNew);
incrementalResolver._updateElementNameOffsets();
incrementalResolver._shiftEntryErrors();
}
@@ -1258,9 +1228,11 @@
AstNode oldParent = oldParents[i];
AstNode newParent = newParents[i];
if (oldParent is FunctionDeclaration &&
- newParent is FunctionDeclaration ||
- oldParent is MethodDeclaration && newParent is MethodDeclaration ||
- oldParent is ConstructorDeclaration && newParent is ConstructorDeclaration) {
+ newParent is FunctionDeclaration ||
+ oldParent is MethodDeclaration &&
+ newParent is MethodDeclaration ||
+ oldParent is ConstructorDeclaration &&
+ newParent is ConstructorDeclaration) {
oldNode = oldParent;
newNode = newParent;
found = true;
@@ -1300,10 +1272,7 @@
}
// perform incremental resolution
IncrementalResolver incrementalResolver = new IncrementalResolver(
- _unitElement,
- _updateOffset,
- _updateEndOld,
- _updateEndNew);
+ _unitElement, _updateOffset, _updateEndOld, _updateEndNew);
bool success = incrementalResolver.resolve(newNode);
// check if success
if (!success) {
@@ -1343,8 +1312,8 @@
* Attempts to resolve a documentation comment change.
* Returns `true` if success.
*/
- bool _resolveComment(CompilationUnit oldUnit, CompilationUnit newUnit,
- _TokenPair firstPair) {
+ bool _resolveComment(
+ CompilationUnit oldUnit, CompilationUnit newUnit, _TokenPair firstPair) {
Token oldToken = firstPair.oldToken;
Token newToken = firstPair.newToken;
CommentToken oldComments = oldToken.precedingComments;
@@ -1367,10 +1336,7 @@
NodeReplacer.replace(oldComment, newComment);
// update elements
IncrementalResolver incrementalResolver = new IncrementalResolver(
- _unitElement,
- _updateOffset,
- _updateEndOld,
- _updateEndNew);
+ _unitElement, _updateOffset, _updateEndOld, _updateEndNew);
incrementalResolver._updateElementNameOffsets();
incrementalResolver._shiftEntryErrors();
_updateEntry();
@@ -1425,8 +1391,8 @@
return numOpen + numOpen2 == numClosed;
}
- static _TokenDifferenceKind _compareToken(Token oldToken, Token newToken,
- int delta, bool forComment) {
+ static _TokenDifferenceKind _compareToken(
+ Token oldToken, Token newToken, int delta, bool forComment) {
while (true) {
if (oldToken == null && newToken == null) {
return null;
@@ -1539,7 +1505,6 @@
return parents;
}
-
/**
* Returns number of tokens with the given [type].
*/
@@ -1573,7 +1538,6 @@
}
}
-
/**
* The context to resolve an [AstNode] in.
*/
@@ -1584,7 +1548,6 @@
Scope scope;
}
-
/**
* Instances of the class [ResolutionContextBuilder] build the context for a
* given node in an AST structure. At the moment, this class only handles
@@ -1660,8 +1623,7 @@
"Cannot build a scope for an unresolved class");
}
scope = new ClassScope(
- new TypeParameterScope(scope, _enclosingClass),
- _enclosingClass);
+ new TypeParameterScope(scope, _enclosingClass), _enclosingClass);
} else if (node is ClassTypeAlias) {
ClassElement element = node.element;
if (element == null) {
@@ -1725,8 +1687,8 @@
* Throws [AnalysisException] if the AST structure has not been resolved or
* is not part of a [CompilationUnit]
*/
- static ResolutionContext contextFor(AstNode node,
- AnalysisErrorListener errorListener) {
+ static ResolutionContext contextFor(
+ AstNode node, AnalysisErrorListener errorListener) {
if (node == null) {
throw new AnalysisException("Cannot create context: node is null");
}
@@ -1744,15 +1706,12 @@
}
}
-
/**
* Instances of the class [_DeclarationMismatchException] represent an exception
* that is thrown when the element model defined by a given AST structure does
* not match an existing element model.
*/
-class _DeclarationMismatchException {
-}
-
+class _DeclarationMismatchException {}
class _ElementNameOffsetUpdater extends GeneralizingElementVisitor {
final int updateOffset;
@@ -1770,7 +1729,6 @@
}
}
-
class _ElementsGatherer extends GeneralizingElementVisitor {
final DeclarationMatcher matcher;
@@ -1796,8 +1754,7 @@
}
@override
- visitParameterElement(ParameterElement element) {
- }
+ visitParameterElement(ParameterElement element) {}
@override
visitPropertyAccessorElement(PropertyAccessorElement element) {
@@ -1816,8 +1773,7 @@
}
@override
- visitTypeParameterElement(TypeParameterElement element) {
- }
+ visitTypeParameterElement(TypeParameterElement element) {}
void _addElement(Element element) {
if (element != null) {
@@ -1827,7 +1783,6 @@
}
}
-
/**
* Describes how two [Token]s are different.
*/
@@ -1845,7 +1800,6 @@
String toString() => name;
}
-
class _TokenPair {
final _TokenDifferenceKind kind;
final Token oldToken;
diff --git a/pkg/analyzer/lib/src/generated/incremental_scanner.dart b/pkg/analyzer/lib/src/generated/incremental_scanner.dart
index ac91b96..d5a3984 100644
--- a/pkg/analyzer/lib/src/generated/incremental_scanner.dart
+++ b/pkg/analyzer/lib/src/generated/incremental_scanner.dart
@@ -217,9 +217,7 @@
*/
Token _scanRange(int start, int end) {
Scanner scanner = new Scanner(
- source,
- new CharacterRangeReader(reader, start, end),
- errorListener);
+ source, new CharacterRangeReader(reader, start, end), errorListener);
return scanner.tokenize();
}
diff --git a/pkg/analyzer/lib/src/generated/java_core.dart b/pkg/analyzer/lib/src/generated/java_core.dart
index a06e984..04ef61c 100644
--- a/pkg/analyzer/lib/src/generated/java_core.dart
+++ b/pkg/analyzer/lib/src/generated/java_core.dart
@@ -11,8 +11,8 @@
* format('{0} are you {1}ing?', 'How', 'do') = 'How are you doing?'
* format('{0} are you {1}ing?', 'What', 'read') = 'What are you reading?'
*/
-String format(String pattern, [arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7])
- {
+String format(String pattern,
+ [arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7]) {
return formatList(pattern, [arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7]);
}
@@ -53,8 +53,8 @@
return a.toLowerCase() == b.toLowerCase();
}
-bool javaStringRegionMatches(String t, int toffset, String o, int ooffset,
- int len) {
+bool javaStringRegionMatches(
+ String t, int toffset, String o, int ooffset, int len) {
if (toffset < 0) return false;
if (ooffset < 0) return false;
var tend = toffset + len;
@@ -279,8 +279,8 @@
}
class JavaSystem {
- static void arraycopy(List src, int srcPos, List dest, int destPos,
- int length) {
+ static void arraycopy(
+ List src, int srcPos, List dest, int destPos, int length) {
for (int i = 0; i < length; i++) {
dest[destPos + i] = src[srcPos + i];
}
@@ -376,8 +376,8 @@
return str == null || str.isEmpty;
}
- static String join(Iterable iter, [String separator = ' ', int start = 0,
- int end = -1]) {
+ static String join(Iterable iter,
+ [String separator = ' ', int start = 0, int end = -1]) {
if (start != 0) {
iter = iter.skip(start);
}
@@ -420,8 +420,8 @@
return s.split(pattern);
}
- static List<String> splitByWholeSeparatorPreserveAllTokens(String s,
- String pattern) {
+ static List<String> splitByWholeSeparatorPreserveAllTokens(
+ String s, String pattern) {
return s.split(pattern);
}
}
diff --git a/pkg/analyzer/lib/src/generated/java_engine.dart b/pkg/analyzer/lib/src/generated/java_engine.dart
index 8a6bb5d..98ff8e4 100644
--- a/pkg/analyzer/lib/src/generated/java_engine.dart
+++ b/pkg/analyzer/lib/src/generated/java_engine.dart
@@ -115,7 +115,6 @@
}
}
-
class StringUtilities {
static const String EMPTY = '';
static const List<String> EMPTY_ARRAY = const <String>[];
@@ -155,8 +154,8 @@
}
return -1;
}
- static int indexOf4(String string, int start, int c1, int c2, int c3,
- int c4) {
+ static int indexOf4(
+ String string, int start, int c1, int c2, int c3, int c4) {
int index = start;
int last = string.length - 3;
while (index < last) {
@@ -170,8 +169,8 @@
}
return -1;
}
- static int indexOf5(String str, int start, int c1, int c2, int c3, int c4,
- int c5) {
+ static int indexOf5(
+ String str, int start, int c1, int c2, int c3, int c4, int c5) {
int index = start;
int last = str.length - 4;
while (index < last) {
@@ -274,8 +273,8 @@
str.codeUnitAt(start + 2) == c3 &&
str.codeUnitAt(start + 3) == c4;
}
- static startsWith5(String str, int start, int c1, int c2, int c3, int c4,
- int c5) {
+ static startsWith5(
+ String str, int start, int c1, int c2, int c3, int c4, int c5) {
return str.length - start >= 5 &&
str.codeUnitAt(start) == c1 &&
str.codeUnitAt(start + 1) == c2 &&
@@ -283,8 +282,8 @@
str.codeUnitAt(start + 3) == c4 &&
str.codeUnitAt(start + 4) == c5;
}
- static startsWith6(String str, int start, int c1, int c2, int c3, int c4,
- int c5, int c6) {
+ static startsWith6(
+ String str, int start, int c1, int c2, int c3, int c4, int c5, int c6) {
return str.length - start >= 6 &&
str.codeUnitAt(start) == c1 &&
str.codeUnitAt(start + 1) == c2 &&
@@ -323,7 +322,6 @@
}
}
-
class UUID {
static int __nextId = 0;
final String id;
diff --git a/pkg/analyzer/lib/src/generated/java_engine_io.dart b/pkg/analyzer/lib/src/generated/java_engine_io.dart
index 5252998..749695a 100644
--- a/pkg/analyzer/lib/src/generated/java_engine_io.dart
+++ b/pkg/analyzer/lib/src/generated/java_engine_io.dart
@@ -3,7 +3,6 @@
import "dart:io";
import "java_io.dart";
-
class OSUtilities {
static String LINE_SEPARATOR = isWindows() ? '\r\n' : '\n';
static bool isWindows() => Platform.operatingSystem == 'windows';
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index ca76b3a..2ecf17e 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -22,603 +22,404 @@
Map<String, MethodTrampoline> methodTable_Parser = <String, MethodTrampoline>{
'parseCompilationUnit_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target.parseCompilationUnit(arg0)),
+ 1, (Parser target, arg0) => target.parseCompilationUnit(arg0)),
'parseDirectives_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target.parseDirectives(arg0)),
+ 1, (Parser target, arg0) => target.parseDirectives(arg0)),
'parseExpression_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target.parseExpression(arg0)),
+ 1, (Parser target, arg0) => target.parseExpression(arg0)),
'parseStatement_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target.parseStatement(arg0)),
+ 1, (Parser target, arg0) => target.parseStatement(arg0)),
'parseStatements_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target.parseStatements(arg0)),
- 'parseAnnotation_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseAnnotation()),
- 'parseArgument_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseArgument()),
- 'parseArgumentList_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseArgumentList()),
+ 1, (Parser target, arg0) => target.parseStatements(arg0)),
+ 'parseAnnotation_0':
+ new MethodTrampoline(0, (Parser target) => target.parseAnnotation()),
+ 'parseArgument_0':
+ new MethodTrampoline(0, (Parser target) => target.parseArgument()),
+ 'parseArgumentList_0':
+ new MethodTrampoline(0, (Parser target) => target.parseArgumentList()),
'parseBitwiseOrExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseBitwiseOrExpression()),
- 'parseBlock_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseBlock()),
+ 0, (Parser target) => target.parseBitwiseOrExpression()),
+ 'parseBlock_0':
+ new MethodTrampoline(0, (Parser target) => target.parseBlock()),
'parseClassMember_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target.parseClassMember(arg0)),
+ 1, (Parser target, arg0) => target.parseClassMember(arg0)),
'parseCompilationUnit_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseCompilationUnit2()),
+ 0, (Parser target) => target.parseCompilationUnit2()),
'parseConditionalExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseConditionalExpression()),
- 'parseConstructorName_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseConstructorName()),
- 'parseExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseExpression2()),
+ 0, (Parser target) => target.parseConditionalExpression()),
+ 'parseConstructorName_0':
+ new MethodTrampoline(0, (Parser target) => target.parseConstructorName()),
+ 'parseExpression_0':
+ new MethodTrampoline(0, (Parser target) => target.parseExpression2()),
'parseExpressionWithoutCascade_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseExpressionWithoutCascade()),
- 'parseExtendsClause_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseExtendsClause()),
+ 0, (Parser target) => target.parseExpressionWithoutCascade()),
+ 'parseExtendsClause_0':
+ new MethodTrampoline(0, (Parser target) => target.parseExtendsClause()),
'parseFormalParameterList_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseFormalParameterList()),
+ 0, (Parser target) => target.parseFormalParameterList()),
'parseFunctionExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseFunctionExpression()),
+ 0, (Parser target) => target.parseFunctionExpression()),
'parseImplementsClause_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseImplementsClause()),
- 'parseLabel_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseLabel()),
+ 0, (Parser target) => target.parseImplementsClause()),
+ 'parseLabel_0':
+ new MethodTrampoline(0, (Parser target) => target.parseLabel()),
'parseLibraryIdentifier_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseLibraryIdentifier()),
+ 0, (Parser target) => target.parseLibraryIdentifier()),
'parseLogicalOrExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseLogicalOrExpression()),
- 'parseMapLiteralEntry_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseMapLiteralEntry()),
+ 0, (Parser target) => target.parseLogicalOrExpression()),
+ 'parseMapLiteralEntry_0':
+ new MethodTrampoline(0, (Parser target) => target.parseMapLiteralEntry()),
'parseNormalFormalParameter_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseNormalFormalParameter()),
+ 0, (Parser target) => target.parseNormalFormalParameter()),
'parsePrefixedIdentifier_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parsePrefixedIdentifier()),
- 'parseReturnType_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseReturnType()),
+ 0, (Parser target) => target.parsePrefixedIdentifier()),
+ 'parseReturnType_0':
+ new MethodTrampoline(0, (Parser target) => target.parseReturnType()),
'parseSimpleIdentifier_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseSimpleIdentifier()),
- 'parseStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseStatement2()),
- 'parseStringLiteral_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseStringLiteral()),
+ 0, (Parser target) => target.parseSimpleIdentifier()),
+ 'parseStatement_0':
+ new MethodTrampoline(0, (Parser target) => target.parseStatement2()),
+ 'parseStringLiteral_0':
+ new MethodTrampoline(0, (Parser target) => target.parseStringLiteral()),
'parseTypeArgumentList_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseTypeArgumentList()),
- 'parseTypeName_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseTypeName()),
- 'parseTypeParameter_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseTypeParameter()),
+ 0, (Parser target) => target.parseTypeArgumentList()),
+ 'parseTypeName_0':
+ new MethodTrampoline(0, (Parser target) => target.parseTypeName()),
+ 'parseTypeParameter_0':
+ new MethodTrampoline(0, (Parser target) => target.parseTypeParameter()),
'parseTypeParameterList_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseTypeParameterList()),
- 'parseWithClause_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseWithClause()),
+ 0, (Parser target) => target.parseTypeParameterList()),
+ 'parseWithClause_0':
+ new MethodTrampoline(0, (Parser target) => target.parseWithClause()),
'advance_0': new MethodTrampoline(0, (Parser target) => target._advance()),
- 'appendScalarValue_5': new MethodTrampoline(
- 5,
- (Parser target, arg0, arg1, arg2, arg3, arg4) =>
- target._appendScalarValue(arg0, arg1, arg2, arg3, arg4)),
- 'computeStringValue_3': new MethodTrampoline(
- 3,
- (Parser target, arg0, arg1, arg2) =>
- target._computeStringValue(arg0, arg1, arg2)),
+ 'appendScalarValue_5': new MethodTrampoline(5, (Parser target, arg0, arg1,
+ arg2, arg3,
+ arg4) => target._appendScalarValue(arg0, arg1, arg2, arg3, arg4)),
+ 'computeStringValue_3': new MethodTrampoline(3, (Parser target, arg0, arg1,
+ arg2) => target._computeStringValue(arg0, arg1, arg2)),
'convertToFunctionDeclaration_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._convertToFunctionDeclaration(arg0)),
+ 1, (Parser target, arg0) => target._convertToFunctionDeclaration(arg0)),
'couldBeStartOfCompilationUnitMember_0': new MethodTrampoline(
- 0,
- (Parser target) => target._couldBeStartOfCompilationUnitMember()),
+ 0, (Parser target) => target._couldBeStartOfCompilationUnitMember()),
'createSyntheticIdentifier_0': new MethodTrampoline(
- 0,
- (Parser target) => target._createSyntheticIdentifier()),
+ 0, (Parser target) => target._createSyntheticIdentifier()),
'createSyntheticKeyword_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._createSyntheticKeyword(arg0)),
+ 1, (Parser target, arg0) => target._createSyntheticKeyword(arg0)),
'createSyntheticStringLiteral_0': new MethodTrampoline(
- 0,
- (Parser target) => target._createSyntheticStringLiteral()),
+ 0, (Parser target) => target._createSyntheticStringLiteral()),
'createSyntheticToken_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._createSyntheticToken(arg0)),
+ 1, (Parser target, arg0) => target._createSyntheticToken(arg0)),
'ensureAssignable_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._ensureAssignable(arg0)),
- 'expect_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._expect(arg0)),
+ 1, (Parser target, arg0) => target._ensureAssignable(arg0)),
+ 'expect_1':
+ new MethodTrampoline(1, (Parser target, arg0) => target._expect(arg0)),
'expectGt_0': new MethodTrampoline(0, (Parser target) => target._expectGt()),
'expectKeyword_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._expectKeyword(arg0)),
- 'expectSemicolon_0': new MethodTrampoline(
- 0,
- (Parser target) => target._expectSemicolon()),
+ 1, (Parser target, arg0) => target._expectKeyword(arg0)),
+ 'expectSemicolon_0':
+ new MethodTrampoline(0, (Parser target) => target._expectSemicolon()),
'findRange_2': new MethodTrampoline(
- 2,
- (Parser target, arg0, arg1) => target._findRange(arg0, arg1)),
+ 2, (Parser target, arg0, arg1) => target._findRange(arg0, arg1)),
'getCodeBlockRanges_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._getCodeBlockRanges(arg0)),
+ 1, (Parser target, arg0) => target._getCodeBlockRanges(arg0)),
'getEndToken_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._getEndToken(arg0)),
+ 1, (Parser target, arg0) => target._getEndToken(arg0)),
'injectToken_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._injectToken(arg0)),
+ 1, (Parser target, arg0) => target._injectToken(arg0)),
'isFunctionDeclaration_0': new MethodTrampoline(
- 0,
- (Parser target) => target._isFunctionDeclaration()),
+ 0, (Parser target) => target._isFunctionDeclaration()),
'isFunctionExpression_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._isFunctionExpression(arg0)),
+ 1, (Parser target, arg0) => target._isFunctionExpression(arg0)),
'isHexDigit_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._isHexDigit(arg0)),
+ 1, (Parser target, arg0) => target._isHexDigit(arg0)),
'isInitializedVariableDeclaration_0': new MethodTrampoline(
- 0,
- (Parser target) => target._isInitializedVariableDeclaration()),
+ 0, (Parser target) => target._isInitializedVariableDeclaration()),
'isLinkText_2': new MethodTrampoline(
- 2,
- (Parser target, arg0, arg1) => target._isLinkText(arg0, arg1)),
+ 2, (Parser target, arg0, arg1) => target._isLinkText(arg0, arg1)),
'isOperator_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._isOperator(arg0)),
- 'isSwitchMember_0': new MethodTrampoline(
- 0,
- (Parser target) => target._isSwitchMember()),
+ 1, (Parser target, arg0) => target._isOperator(arg0)),
+ 'isSwitchMember_0':
+ new MethodTrampoline(0, (Parser target) => target._isSwitchMember()),
'isTypedIdentifier_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._isTypedIdentifier(arg0)),
- 'lockErrorListener_0': new MethodTrampoline(
- 0,
- (Parser target) => target._lockErrorListener()),
- 'matches_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._matches(arg0)),
- 'matchesGt_0': new MethodTrampoline(
- 0,
- (Parser target) => target._matchesGt()),
- 'matchesIdentifier_0': new MethodTrampoline(
- 0,
- (Parser target) => target._matchesIdentifier()),
+ 1, (Parser target, arg0) => target._isTypedIdentifier(arg0)),
+ 'lockErrorListener_0':
+ new MethodTrampoline(0, (Parser target) => target._lockErrorListener()),
+ 'matches_1':
+ new MethodTrampoline(1, (Parser target, arg0) => target._matches(arg0)),
+ 'matchesGt_0':
+ new MethodTrampoline(0, (Parser target) => target._matchesGt()),
+ 'matchesIdentifier_0':
+ new MethodTrampoline(0, (Parser target) => target._matchesIdentifier()),
'matchesKeyword_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._matchesKeyword(arg0)),
+ 1, (Parser target, arg0) => target._matchesKeyword(arg0)),
'matchesString_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._matchesString(arg0)),
- 'optional_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._optional(arg0)),
+ 1, (Parser target, arg0) => target._matchesString(arg0)),
+ 'optional_1':
+ new MethodTrampoline(1, (Parser target, arg0) => target._optional(arg0)),
'parseAdditiveExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseAdditiveExpression()),
+ 0, (Parser target) => target._parseAdditiveExpression()),
'parseAssertStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseAssertStatement()),
+ 0, (Parser target) => target._parseAssertStatement()),
'parseAssignableExpression_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parseAssignableExpression(arg0)),
- 'parseAssignableSelector_2': new MethodTrampoline(
- 2,
- (Parser target, arg0, arg1) => target._parseAssignableSelector(arg0, arg1)),
+ 1, (Parser target, arg0) => target._parseAssignableExpression(arg0)),
+ 'parseAssignableSelector_2': new MethodTrampoline(2, (Parser target, arg0,
+ arg1) => target._parseAssignableSelector(arg0, arg1)),
'parseAwaitExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseAwaitExpression()),
+ 0, (Parser target) => target._parseAwaitExpression()),
'parseBitwiseAndExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseBitwiseAndExpression()),
+ 0, (Parser target) => target._parseBitwiseAndExpression()),
'parseBitwiseXorExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseBitwiseXorExpression()),
- 'parseBreakStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseBreakStatement()),
- 'parseCascadeSection_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseCascadeSection()),
- 'parseClassDeclaration_2': new MethodTrampoline(
- 2,
+ 0, (Parser target) => target._parseBitwiseXorExpression()),
+ 'parseBreakStatement_0':
+ new MethodTrampoline(0, (Parser target) => target._parseBreakStatement()),
+ 'parseCascadeSection_0':
+ new MethodTrampoline(0, (Parser target) => target._parseCascadeSection()),
+ 'parseClassDeclaration_2': new MethodTrampoline(2,
(Parser target, arg0, arg1) => target._parseClassDeclaration(arg0, arg1)),
'parseClassMembers_2': new MethodTrampoline(
- 2,
- (Parser target, arg0, arg1) => target._parseClassMembers(arg0, arg1)),
- 'parseClassTypeAlias_3': new MethodTrampoline(
- 3,
- (Parser target, arg0, arg1, arg2) =>
- target._parseClassTypeAlias(arg0, arg1, arg2)),
- 'parseCombinator_0': new MethodTrampoline(
- 0,
- (Parser target) => target.parseCombinator()),
- 'parseCombinators_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseCombinators()),
+ 2, (Parser target, arg0, arg1) => target._parseClassMembers(arg0, arg1)),
+ 'parseClassTypeAlias_3': new MethodTrampoline(3, (Parser target, arg0, arg1,
+ arg2) => target._parseClassTypeAlias(arg0, arg1, arg2)),
+ 'parseCombinator_0':
+ new MethodTrampoline(0, (Parser target) => target.parseCombinator()),
+ 'parseCombinators_0':
+ new MethodTrampoline(0, (Parser target) => target._parseCombinators()),
'parseCommentAndMetadata_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseCommentAndMetadata()),
- 'parseCommentReference_2': new MethodTrampoline(
- 2,
+ 0, (Parser target) => target._parseCommentAndMetadata()),
+ 'parseCommentReference_2': new MethodTrampoline(2,
(Parser target, arg0, arg1) => target._parseCommentReference(arg0, arg1)),
'parseCommentReferences_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parseCommentReferences(arg0)),
+ 1, (Parser target, arg0) => target._parseCommentReferences(arg0)),
'parseCompilationUnitMember_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parseCompilationUnitMember(arg0)),
+ 1, (Parser target, arg0) => target._parseCompilationUnitMember(arg0)),
'parseConstExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseConstExpression()),
- 'parseConstructor_8': new MethodTrampoline(
- 8,
- (Parser target, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) =>
- target._parseConstructor(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)),
+ 0, (Parser target) => target._parseConstExpression()),
+ 'parseConstructor_8': new MethodTrampoline(8, (Parser target, arg0, arg1,
+ arg2, arg3, arg4, arg5, arg6, arg7) =>
+ target._parseConstructor(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)),
'parseConstructorFieldInitializer_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseConstructorFieldInitializer()),
+ 0, (Parser target) => target._parseConstructorFieldInitializer()),
'parseContinueStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseContinueStatement()),
+ 0, (Parser target) => target._parseContinueStatement()),
'parseDirective_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parseDirective(arg0)),
- 'parseDirectives_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseDirectives()),
+ 1, (Parser target, arg0) => target._parseDirective(arg0)),
+ 'parseDirectives_0':
+ new MethodTrampoline(0, (Parser target) => target._parseDirectives()),
'parseDocumentationComment_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseDocumentationComment()),
- 'parseDoStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseDoStatement()),
- 'parseEmptyStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseEmptyStatement()),
+ 0, (Parser target) => target._parseDocumentationComment()),
+ 'parseDoStatement_0':
+ new MethodTrampoline(0, (Parser target) => target._parseDoStatement()),
+ 'parseEmptyStatement_0':
+ new MethodTrampoline(0, (Parser target) => target._parseEmptyStatement()),
'parseEnumConstantDeclaration_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseEnumConstantDeclaration()),
+ 0, (Parser target) => target._parseEnumConstantDeclaration()),
'parseEnumDeclaration_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parseEnumDeclaration(arg0)),
+ 1, (Parser target, arg0) => target._parseEnumDeclaration(arg0)),
'parseEqualityExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseEqualityExpression()),
+ 0, (Parser target) => target._parseEqualityExpression()),
'parseExportDirective_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parseExportDirective(arg0)),
- 'parseExpressionList_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseExpressionList()),
+ 1, (Parser target, arg0) => target._parseExportDirective(arg0)),
+ 'parseExpressionList_0':
+ new MethodTrampoline(0, (Parser target) => target._parseExpressionList()),
'parseFinalConstVarOrType_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parseFinalConstVarOrType(arg0)),
+ 1, (Parser target, arg0) => target._parseFinalConstVarOrType(arg0)),
'parseFormalParameter_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parseFormalParameter(arg0)),
- 'parseForStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseForStatement()),
- 'parseFunctionBody_3': new MethodTrampoline(
- 3,
- (Parser target, arg0, arg1, arg2) =>
- target._parseFunctionBody(arg0, arg1, arg2)),
- 'parseFunctionDeclaration_3': new MethodTrampoline(
- 3,
- (Parser target, arg0, arg1, arg2) =>
- target._parseFunctionDeclaration(arg0, arg1, arg2)),
+ 1, (Parser target, arg0) => target._parseFormalParameter(arg0)),
+ 'parseForStatement_0':
+ new MethodTrampoline(0, (Parser target) => target._parseForStatement()),
+ 'parseFunctionBody_3': new MethodTrampoline(3, (Parser target, arg0, arg1,
+ arg2) => target._parseFunctionBody(arg0, arg1, arg2)),
+ 'parseFunctionDeclaration_3': new MethodTrampoline(3, (Parser target, arg0,
+ arg1, arg2) => target._parseFunctionDeclaration(arg0, arg1, arg2)),
'parseFunctionDeclarationStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseFunctionDeclarationStatement()),
- 'parseFunctionDeclarationStatementAfterReturnType_2': new MethodTrampoline(
- 2,
+ 0, (Parser target) => target._parseFunctionDeclarationStatement()),
+ 'parseFunctionDeclarationStatementAfterReturnType_2': new MethodTrampoline(2,
(Parser target, arg0, arg1) =>
target._parseFunctionDeclarationStatementAfterReturnType(arg0, arg1)),
- 'parseFunctionTypeAlias_2': new MethodTrampoline(
- 2,
- (Parser target, arg0, arg1) => target._parseFunctionTypeAlias(arg0, arg1)),
- 'parseGetter_4': new MethodTrampoline(
- 4,
- (Parser target, arg0, arg1, arg2, arg3) =>
- target._parseGetter(arg0, arg1, arg2, arg3)),
- 'parseIdentifierList_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseIdentifierList()),
- 'parseIfStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseIfStatement()),
+ 'parseFunctionTypeAlias_2': new MethodTrampoline(2, (Parser target, arg0,
+ arg1) => target._parseFunctionTypeAlias(arg0, arg1)),
+ 'parseGetter_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2,
+ arg3) => target._parseGetter(arg0, arg1, arg2, arg3)),
+ 'parseIdentifierList_0':
+ new MethodTrampoline(0, (Parser target) => target._parseIdentifierList()),
+ 'parseIfStatement_0':
+ new MethodTrampoline(0, (Parser target) => target._parseIfStatement()),
'parseImportDirective_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parseImportDirective(arg0)),
- 'parseInitializedIdentifierList_4': new MethodTrampoline(
- 4,
+ 1, (Parser target, arg0) => target._parseImportDirective(arg0)),
+ 'parseInitializedIdentifierList_4': new MethodTrampoline(4,
(Parser target, arg0, arg1, arg2, arg3) =>
target._parseInitializedIdentifierList(arg0, arg1, arg2, arg3)),
- 'parseInstanceCreationExpression_1': new MethodTrampoline(
- 1,
+ 'parseInstanceCreationExpression_1': new MethodTrampoline(1,
(Parser target, arg0) => target._parseInstanceCreationExpression(arg0)),
'parseLibraryDirective_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parseLibraryDirective(arg0)),
+ 1, (Parser target, arg0) => target._parseLibraryDirective(arg0)),
'parseLibraryName_2': new MethodTrampoline(
- 2,
- (Parser target, arg0, arg1) => target._parseLibraryName(arg0, arg1)),
+ 2, (Parser target, arg0, arg1) => target._parseLibraryName(arg0, arg1)),
'parseListLiteral_2': new MethodTrampoline(
- 2,
- (Parser target, arg0, arg1) => target._parseListLiteral(arg0, arg1)),
+ 2, (Parser target, arg0, arg1) => target._parseListLiteral(arg0, arg1)),
'parseListOrMapLiteral_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parseListOrMapLiteral(arg0)),
+ 1, (Parser target, arg0) => target._parseListOrMapLiteral(arg0)),
'parseLogicalAndExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseLogicalAndExpression()),
+ 0, (Parser target) => target._parseLogicalAndExpression()),
'parseMapLiteral_2': new MethodTrampoline(
- 2,
- (Parser target, arg0, arg1) => target._parseMapLiteral(arg0, arg1)),
- 'parseMethodDeclarationAfterParameters_6': new MethodTrampoline(
- 6,
- (Parser target, arg0, arg1, arg2, arg3, arg4, arg5) =>
- target._parseMethodDeclarationAfterParameters(
- arg0,
- arg1,
- arg2,
- arg3,
- arg4,
- arg5)),
- 'parseMethodDeclarationAfterReturnType_4': new MethodTrampoline(
- 4,
- (Parser target, arg0, arg1, arg2, arg3) =>
- target._parseMethodDeclarationAfterReturnType(arg0, arg1, arg2, arg3)),
- 'parseModifiers_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseModifiers()),
+ 2, (Parser target, arg0, arg1) => target._parseMapLiteral(arg0, arg1)),
+ 'parseMethodDeclarationAfterParameters_6': new MethodTrampoline(6,
+ (Parser target, arg0, arg1, arg2, arg3, arg4, arg5) => target
+ ._parseMethodDeclarationAfterParameters(
+ arg0, arg1, arg2, arg3, arg4, arg5)),
+ 'parseMethodDeclarationAfterReturnType_4': new MethodTrampoline(4,
+ (Parser target, arg0, arg1, arg2, arg3) => target
+ ._parseMethodDeclarationAfterReturnType(arg0, arg1, arg2, arg3)),
+ 'parseModifiers_0':
+ new MethodTrampoline(0, (Parser target) => target._parseModifiers()),
'parseMultiplicativeExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseMultiplicativeExpression()),
- 'parseNativeClause_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseNativeClause()),
- 'parseNewExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseNewExpression()),
+ 0, (Parser target) => target._parseMultiplicativeExpression()),
+ 'parseNativeClause_0':
+ new MethodTrampoline(0, (Parser target) => target._parseNativeClause()),
+ 'parseNewExpression_0':
+ new MethodTrampoline(0, (Parser target) => target._parseNewExpression()),
'parseNonLabeledStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseNonLabeledStatement()),
- 'parseOperator_3': new MethodTrampoline(
- 3,
- (Parser target, arg0, arg1, arg2) => target._parseOperator(arg0, arg1, arg2)),
+ 0, (Parser target) => target._parseNonLabeledStatement()),
+ 'parseOperator_3': new MethodTrampoline(3, (Parser target, arg0, arg1,
+ arg2) => target._parseOperator(arg0, arg1, arg2)),
'parseOptionalReturnType_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseOptionalReturnType()),
+ 0, (Parser target) => target._parseOptionalReturnType()),
'parsePartDirective_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parsePartDirective(arg0)),
+ 1, (Parser target, arg0) => target._parsePartDirective(arg0)),
'parsePostfixExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parsePostfixExpression()),
+ 0, (Parser target) => target._parsePostfixExpression()),
'parsePrimaryExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parsePrimaryExpression()),
+ 0, (Parser target) => target._parsePrimaryExpression()),
'parseRedirectingConstructorInvocation_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseRedirectingConstructorInvocation()),
+ 0, (Parser target) => target._parseRedirectingConstructorInvocation()),
'parseRelationalExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseRelationalExpression()),
+ 0, (Parser target) => target._parseRelationalExpression()),
'parseRethrowExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseRethrowExpression()),
+ 0, (Parser target) => target._parseRethrowExpression()),
'parseReturnStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseReturnStatement()),
- 'parseSetter_4': new MethodTrampoline(
- 4,
- (Parser target, arg0, arg1, arg2, arg3) =>
- target._parseSetter(arg0, arg1, arg2, arg3)),
+ 0, (Parser target) => target._parseReturnStatement()),
+ 'parseSetter_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2,
+ arg3) => target._parseSetter(arg0, arg1, arg2, arg3)),
'parseShiftExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseShiftExpression()),
- 'parseStatementList_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseStatementList()),
+ 0, (Parser target) => target._parseShiftExpression()),
+ 'parseStatementList_0':
+ new MethodTrampoline(0, (Parser target) => target._parseStatementList()),
'parseStringInterpolation_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parseStringInterpolation(arg0)),
+ 1, (Parser target, arg0) => target._parseStringInterpolation(arg0)),
'parseSuperConstructorInvocation_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseSuperConstructorInvocation()),
+ 0, (Parser target) => target._parseSuperConstructorInvocation()),
'parseSwitchStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseSwitchStatement()),
- 'parseSymbolLiteral_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseSymbolLiteral()),
+ 0, (Parser target) => target._parseSwitchStatement()),
+ 'parseSymbolLiteral_0':
+ new MethodTrampoline(0, (Parser target) => target._parseSymbolLiteral()),
'parseThrowExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseThrowExpression()),
+ 0, (Parser target) => target._parseThrowExpression()),
'parseThrowExpressionWithoutCascade_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseThrowExpressionWithoutCascade()),
- 'parseTryStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseTryStatement()),
+ 0, (Parser target) => target._parseThrowExpressionWithoutCascade()),
+ 'parseTryStatement_0':
+ new MethodTrampoline(0, (Parser target) => target._parseTryStatement()),
'parseTypeAlias_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._parseTypeAlias(arg0)),
+ 1, (Parser target, arg0) => target._parseTypeAlias(arg0)),
'parseUnaryExpression_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseUnaryExpression()),
+ 0, (Parser target) => target._parseUnaryExpression()),
'parseVariableDeclaration_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseVariableDeclaration()),
- 'parseVariableDeclarationListAfterMetadata_1': new MethodTrampoline(
- 1,
+ 0, (Parser target) => target._parseVariableDeclaration()),
+ 'parseVariableDeclarationListAfterMetadata_1': new MethodTrampoline(1,
(Parser target, arg0) =>
target._parseVariableDeclarationListAfterMetadata(arg0)),
- 'parseVariableDeclarationListAfterType_3': new MethodTrampoline(
- 3,
+ 'parseVariableDeclarationListAfterType_3': new MethodTrampoline(3,
(Parser target, arg0, arg1, arg2) =>
target._parseVariableDeclarationListAfterType(arg0, arg1, arg2)),
- 'parseVariableDeclarationStatementAfterMetadata_1': new MethodTrampoline(
- 1,
+ 'parseVariableDeclarationStatementAfterMetadata_1': new MethodTrampoline(1,
(Parser target, arg0) =>
target._parseVariableDeclarationStatementAfterMetadata(arg0)),
- 'parseVariableDeclarationStatementAfterType_3': new MethodTrampoline(
- 3,
+ 'parseVariableDeclarationStatementAfterType_3': new MethodTrampoline(3,
(Parser target, arg0, arg1, arg2) =>
target._parseVariableDeclarationStatementAfterType(arg0, arg1, arg2)),
- 'parseWhileStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseWhileStatement()),
- 'parseYieldStatement_0': new MethodTrampoline(
- 0,
- (Parser target) => target._parseYieldStatement()),
+ 'parseWhileStatement_0':
+ new MethodTrampoline(0, (Parser target) => target._parseWhileStatement()),
+ 'parseYieldStatement_0':
+ new MethodTrampoline(0, (Parser target) => target._parseYieldStatement()),
'peek_0': new MethodTrampoline(0, (Parser target) => target._peek()),
- 'peekAt_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._peekAt(arg0)),
+ 'peekAt_1':
+ new MethodTrampoline(1, (Parser target, arg0) => target._peekAt(arg0)),
'reportError_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._reportError(arg0)),
- 'reportErrorForCurrentToken_2': new MethodTrampoline(
- 2,
- (Parser target, arg0, arg1) => target._reportErrorForCurrentToken(arg0, arg1)),
- 'reportErrorForNode_3': new MethodTrampoline(
- 3,
- (Parser target, arg0, arg1, arg2) =>
- target._reportErrorForNode(arg0, arg1, arg2)),
- 'reportErrorForToken_3': new MethodTrampoline(
- 3,
- (Parser target, arg0, arg1, arg2) =>
- target._reportErrorForToken(arg0, arg1, arg2)),
- 'skipBlock_0': new MethodTrampoline(
- 0,
- (Parser target) => target._skipBlock()),
+ 1, (Parser target, arg0) => target._reportError(arg0)),
+ 'reportErrorForCurrentToken_2': new MethodTrampoline(2, (Parser target, arg0,
+ arg1) => target._reportErrorForCurrentToken(arg0, arg1)),
+ 'reportErrorForNode_3': new MethodTrampoline(3, (Parser target, arg0, arg1,
+ arg2) => target._reportErrorForNode(arg0, arg1, arg2)),
+ 'reportErrorForToken_3': new MethodTrampoline(3, (Parser target, arg0, arg1,
+ arg2) => target._reportErrorForToken(arg0, arg1, arg2)),
+ 'skipBlock_0':
+ new MethodTrampoline(0, (Parser target) => target._skipBlock()),
'skipFinalConstVarOrType_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._skipFinalConstVarOrType(arg0)),
+ 1, (Parser target, arg0) => target._skipFinalConstVarOrType(arg0)),
'skipFormalParameterList_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._skipFormalParameterList(arg0)),
+ 1, (Parser target, arg0) => target._skipFormalParameterList(arg0)),
'skipPastMatchingToken_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._skipPastMatchingToken(arg0)),
+ 1, (Parser target, arg0) => target._skipPastMatchingToken(arg0)),
'skipPrefixedIdentifier_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._skipPrefixedIdentifier(arg0)),
+ 1, (Parser target, arg0) => target._skipPrefixedIdentifier(arg0)),
'skipReturnType_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._skipReturnType(arg0)),
+ 1, (Parser target, arg0) => target._skipReturnType(arg0)),
'skipSimpleIdentifier_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._skipSimpleIdentifier(arg0)),
+ 1, (Parser target, arg0) => target._skipSimpleIdentifier(arg0)),
'skipStringInterpolation_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._skipStringInterpolation(arg0)),
+ 1, (Parser target, arg0) => target._skipStringInterpolation(arg0)),
'skipStringLiteral_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._skipStringLiteral(arg0)),
+ 1, (Parser target, arg0) => target._skipStringLiteral(arg0)),
'skipTypeArgumentList_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._skipTypeArgumentList(arg0)),
+ 1, (Parser target, arg0) => target._skipTypeArgumentList(arg0)),
'skipTypeName_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._skipTypeName(arg0)),
+ 1, (Parser target, arg0) => target._skipTypeName(arg0)),
'skipTypeParameterList_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._skipTypeParameterList(arg0)),
+ 1, (Parser target, arg0) => target._skipTypeParameterList(arg0)),
'tokenMatches_2': new MethodTrampoline(
- 2,
- (Parser target, arg0, arg1) => target._tokenMatches(arg0, arg1)),
+ 2, (Parser target, arg0, arg1) => target._tokenMatches(arg0, arg1)),
'tokenMatchesIdentifier_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._tokenMatchesIdentifier(arg0)),
- 'tokenMatchesKeyword_2': new MethodTrampoline(
- 2,
+ 1, (Parser target, arg0) => target._tokenMatchesIdentifier(arg0)),
+ 'tokenMatchesKeyword_2': new MethodTrampoline(2,
(Parser target, arg0, arg1) => target._tokenMatchesKeyword(arg0, arg1)),
'tokenMatchesString_2': new MethodTrampoline(
- 2,
- (Parser target, arg0, arg1) => target._tokenMatchesString(arg0, arg1)),
- 'translateCharacter_3': new MethodTrampoline(
- 3,
- (Parser target, arg0, arg1, arg2) =>
- target._translateCharacter(arg0, arg1, arg2)),
- 'unlockErrorListener_0': new MethodTrampoline(
- 0,
- (Parser target) => target._unlockErrorListener()),
+ 2, (Parser target, arg0, arg1) => target._tokenMatchesString(arg0, arg1)),
+ 'translateCharacter_3': new MethodTrampoline(3, (Parser target, arg0, arg1,
+ arg2) => target._translateCharacter(arg0, arg1, arg2)),
+ 'unlockErrorListener_0':
+ new MethodTrampoline(0, (Parser target) => target._unlockErrorListener()),
'validateFormalParameterList_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._validateFormalParameterList(arg0)),
+ 1, (Parser target, arg0) => target._validateFormalParameterList(arg0)),
'validateModifiersForClass_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._validateModifiersForClass(arg0)),
- 'validateModifiersForConstructor_1': new MethodTrampoline(
- 1,
+ 1, (Parser target, arg0) => target._validateModifiersForClass(arg0)),
+ 'validateModifiersForConstructor_1': new MethodTrampoline(1,
(Parser target, arg0) => target._validateModifiersForConstructor(arg0)),
'validateModifiersForEnum_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._validateModifiersForEnum(arg0)),
+ 1, (Parser target, arg0) => target._validateModifiersForEnum(arg0)),
'validateModifiersForField_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._validateModifiersForField(arg0)),
- 'validateModifiersForFunctionDeclarationStatement_1': new MethodTrampoline(
- 1,
+ 1, (Parser target, arg0) => target._validateModifiersForField(arg0)),
+ 'validateModifiersForFunctionDeclarationStatement_1': new MethodTrampoline(1,
(Parser target, arg0) =>
target._validateModifiersForFunctionDeclarationStatement(arg0)),
- 'validateModifiersForGetterOrSetterOrMethod_1': new MethodTrampoline(
- 1,
+ 'validateModifiersForGetterOrSetterOrMethod_1': new MethodTrampoline(1,
(Parser target, arg0) =>
target._validateModifiersForGetterOrSetterOrMethod(arg0)),
'validateModifiersForOperator_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._validateModifiersForOperator(arg0)),
- 'validateModifiersForTopLevelDeclaration_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._validateModifiersForTopLevelDeclaration(arg0)),
- 'validateModifiersForTopLevelFunction_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._validateModifiersForTopLevelFunction(arg0)),
- 'validateModifiersForTopLevelVariable_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._validateModifiersForTopLevelVariable(arg0)),
+ 1, (Parser target, arg0) => target._validateModifiersForOperator(arg0)),
+ 'validateModifiersForTopLevelDeclaration_1': new MethodTrampoline(1,
+ (Parser target, arg0) =>
+ target._validateModifiersForTopLevelDeclaration(arg0)),
+ 'validateModifiersForTopLevelFunction_1': new MethodTrampoline(1,
+ (Parser target, arg0) =>
+ target._validateModifiersForTopLevelFunction(arg0)),
+ 'validateModifiersForTopLevelVariable_1': new MethodTrampoline(1,
+ (Parser target, arg0) =>
+ target._validateModifiersForTopLevelVariable(arg0)),
'validateModifiersForTypedef_1': new MethodTrampoline(
- 1,
- (Parser target, arg0) => target._validateModifiersForTypedef(arg0)),
+ 1, (Parser target, arg0) => target._validateModifiersForTypedef(arg0)),
};
-Object invokeParserMethodImpl(Parser parser, String methodName,
- List<Object> objects, Token tokenStream) {
+Object invokeParserMethodImpl(
+ Parser parser, String methodName, List<Object> objects, Token tokenStream) {
parser.currentToken = tokenStream;
MethodTrampoline method =
methodTable_Parser['${methodName}_${objects.length}'];
@@ -1112,6 +913,12 @@
}
@override
+ AstNode visitFormalParameterList(FormalParameterList node) {
+ // We don't know which kind of parameter to parse.
+ throw new InsufficientContextException();
+ }
+
+ @override
AstNode visitForStatement(ForStatement node) {
if (identical(_oldNode, node.variables)) {
throw new InsufficientContextException();
@@ -1128,12 +935,6 @@
}
@override
- AstNode visitFormalParameterList(FormalParameterList node) {
- // We don't know which kind of parameter to parse.
- throw new InsufficientContextException();
- }
-
- @override
AstNode visitFunctionDeclaration(FunctionDeclaration node) {
if (identical(_oldNode, node.documentationComment)) {
throw new InsufficientContextException();
@@ -1482,14 +1283,6 @@
}
@override
- AstNode visitPrefixExpression(PrefixExpression node) {
- if (identical(_oldNode, node.operand)) {
- throw new InsufficientContextException();
- }
- return _notAChild(node);
- }
-
- @override
AstNode visitPrefixedIdentifier(PrefixedIdentifier node) {
if (identical(_oldNode, node.prefix)) {
return _parser.parseSimpleIdentifier();
@@ -1500,6 +1293,14 @@
}
@override
+ AstNode visitPrefixExpression(PrefixExpression node) {
+ if (identical(_oldNode, node.operand)) {
+ throw new InsufficientContextException();
+ }
+ return _notAChild(node);
+ }
+
+ @override
AstNode visitPropertyAccess(PropertyAccess node) {
if (identical(_oldNode, node.target)) {
throw new InsufficientContextException();
@@ -1510,8 +1311,8 @@
}
@override
- AstNode
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ AstNode visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
if (identical(_oldNode, node.constructorName)) {
return _parser.parseSimpleIdentifier();
} else if (identical(_oldNode, node.argumentList)) {
@@ -1825,100 +1626,6 @@
}
/**
- * Visitor capable of inferring the correct parser state for incremental
- * parsing. This visitor visits each parent/child relationship in the chain of
- * ancestors of the node to be replaced (starting with the root of the parse
- * tree), updating the parser to the correct state for parsing the child of the
- * given parent. Once it has visited all of these relationships, the parser
- * will be in the correct state for reparsing the node to be replaced.
- *
- * TODO(paulberry): add support for other pieces of parser state (_inAsync,
- * _inGenerator, _inLoop, and _inSwitch). Note that _inLoop and _inSwitch only
- * affect error message generation.
- */
-class IncrementalParseStateBuilder extends SimpleAstVisitor {
- /**
- * The parser whose state should be built.
- */
- final Parser _parser;
-
- /**
- * The child node in the parent/child relationship currently being visited.
- * (The corresponding parent is the node passed to the visit...() function.)
- */
- AstNode _childNode;
-
- /**
- * Create an IncrementalParseStateBuilder which will build the correct state
- * for [_parser].
- */
- IncrementalParseStateBuilder(this._parser);
-
- /**
- * Build the correct parser state for parsing a replacement for [node].
- */
- void buildState(AstNode node) {
- List<AstNode> ancestors = <AstNode>[];
- while (node != null) {
- ancestors.add(node);
- node = node.parent;
- }
- _parser._inInitializer = false;
- for (int i = ancestors.length - 2; i >= 0; i--) {
- _childNode = ancestors[i];
- ancestors[i + 1].accept(this);
- }
- }
-
- @override
- void visitArgumentList(ArgumentList node) {
- _parser._inInitializer = false;
- }
-
- @override
- void visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
- if (identical(_childNode, node.expression)) {
- _parser._inInitializer = true;
- }
- }
-
- @override
- void visitIndexExpression(IndexExpression node) {
- if (identical(_childNode, node.index)) {
- _parser._inInitializer = false;
- }
- }
-
- @override
- void visitInterpolationExpression(InterpolationExpression node) {
- if (identical(_childNode, node.expression)) {
- _parser._inInitializer = false;
- }
- }
-
- @override
- void visitListLiteral(ListLiteral node) {
- if (node.elements.contains(_childNode)) {
- _parser._inInitializer = false;
- }
- }
-
- @override
- void visitMapLiteral(MapLiteral node) {
- if (node.entries.contains(_childNode)) {
- _parser._inInitializer = false;
- }
- }
-
- @override
- void visitParenthesizedExpression(ParenthesizedExpression node) {
- if (identical(_childNode, node.expression)) {
- _parser._inInitializer = false;
- }
- }
-}
-
-/**
* Instances of the class `IncrementalParser` re-parse a single AST structure within a larger
* AST structure.
*/
@@ -1994,9 +1701,8 @@
oldNode =
new NodeLocator.con1(originalStart).searchWithin(originalStructure);
} else {
- oldNode = new NodeLocator.con2(
- originalStart,
- originalEnd).searchWithin(originalStructure);
+ oldNode = new NodeLocator.con2(originalStart, originalEnd)
+ .searchWithin(originalStructure);
}
//
// Find the token at which parsing is to begin.
@@ -2096,6 +1802,100 @@
}
/**
+ * Visitor capable of inferring the correct parser state for incremental
+ * parsing. This visitor visits each parent/child relationship in the chain of
+ * ancestors of the node to be replaced (starting with the root of the parse
+ * tree), updating the parser to the correct state for parsing the child of the
+ * given parent. Once it has visited all of these relationships, the parser
+ * will be in the correct state for reparsing the node to be replaced.
+ *
+ * TODO(paulberry): add support for other pieces of parser state (_inAsync,
+ * _inGenerator, _inLoop, and _inSwitch). Note that _inLoop and _inSwitch only
+ * affect error message generation.
+ */
+class IncrementalParseStateBuilder extends SimpleAstVisitor {
+ /**
+ * The parser whose state should be built.
+ */
+ final Parser _parser;
+
+ /**
+ * The child node in the parent/child relationship currently being visited.
+ * (The corresponding parent is the node passed to the visit...() function.)
+ */
+ AstNode _childNode;
+
+ /**
+ * Create an IncrementalParseStateBuilder which will build the correct state
+ * for [_parser].
+ */
+ IncrementalParseStateBuilder(this._parser);
+
+ /**
+ * Build the correct parser state for parsing a replacement for [node].
+ */
+ void buildState(AstNode node) {
+ List<AstNode> ancestors = <AstNode>[];
+ while (node != null) {
+ ancestors.add(node);
+ node = node.parent;
+ }
+ _parser._inInitializer = false;
+ for (int i = ancestors.length - 2; i >= 0; i--) {
+ _childNode = ancestors[i];
+ ancestors[i + 1].accept(this);
+ }
+ }
+
+ @override
+ void visitArgumentList(ArgumentList node) {
+ _parser._inInitializer = false;
+ }
+
+ @override
+ void visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
+ if (identical(_childNode, node.expression)) {
+ _parser._inInitializer = true;
+ }
+ }
+
+ @override
+ void visitIndexExpression(IndexExpression node) {
+ if (identical(_childNode, node.index)) {
+ _parser._inInitializer = false;
+ }
+ }
+
+ @override
+ void visitInterpolationExpression(InterpolationExpression node) {
+ if (identical(_childNode, node.expression)) {
+ _parser._inInitializer = false;
+ }
+ }
+
+ @override
+ void visitListLiteral(ListLiteral node) {
+ if (node.elements.contains(_childNode)) {
+ _parser._inInitializer = false;
+ }
+ }
+
+ @override
+ void visitMapLiteral(MapLiteral node) {
+ if (node.entries.contains(_childNode)) {
+ _parser._inInitializer = false;
+ }
+ }
+
+ @override
+ void visitParenthesizedExpression(ParenthesizedExpression node) {
+ if (identical(_childNode, node.expression)) {
+ _parser._inInitializer = false;
+ }
+ }
+}
+
+/**
* Instances of the class `InsufficientContextException` represent a situation in which an AST
* node cannot be re-parsed because there is not enough context to know how to re-parse the node.
* Clients can attempt to re-parse the parent of the node.
@@ -2144,11 +1944,7 @@
return trampoline(target, arguments[0], arguments[1], arguments[2]);
case 4:
return trampoline(
- target,
- arguments[0],
- arguments[1],
- arguments[2],
- arguments[3]);
+ target, arguments[0], arguments[1], arguments[2], arguments[3]);
default:
throw new IllegalArgumentException("Not implemented for > 4 arguments");
}
@@ -2465,8 +2261,7 @@
argument = parseArgument();
arguments.add(argument);
if (foundNamedArgument) {
- bool blankArgument =
- argument is SimpleIdentifier &&
+ bool blankArgument = argument is SimpleIdentifier &&
(argument as SimpleIdentifier).name.isEmpty;
if (!generatedError &&
!(argument is NamedExpression && !blankArgument)) {
@@ -2511,8 +2306,8 @@
}
while (_matches(TokenType.BAR)) {
Token operator = getAndAdvance();
- expression =
- new BinaryExpression(expression, operator, _parseBitwiseXorExpression());
+ expression = new BinaryExpression(
+ expression, operator, _parseBitwiseXorExpression());
}
return expression;
}
@@ -2531,17 +2326,15 @@
Token leftBracket = _expect(TokenType.OPEN_CURLY_BRACKET);
List<Statement> statements = new List<Statement>();
Token statementStart = _currentToken;
- while (!_matches(TokenType.EOF) &&
- !_matches(TokenType.CLOSE_CURLY_BRACKET)) {
+ while (
+ !_matches(TokenType.EOF) && !_matches(TokenType.CLOSE_CURLY_BRACKET)) {
Statement statement = parseStatement2();
if (statement != null) {
statements.add(statement);
}
if (identical(_currentToken, statementStart)) {
// Ensure that we are making progress and report an error if we're not.
- _reportErrorForToken(
- ParserErrorCode.UNEXPECTED_TOKEN,
- _currentToken,
+ _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken,
[_currentToken.lexeme]);
_advance();
}
@@ -2571,34 +2364,26 @@
TypeName returnType = parseReturnType();
if (_matchesKeyword(Keyword.GET) && _tokenMatchesIdentifier(_peek())) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseGetter(
- commentAndMetadata,
- modifiers.externalKeyword,
- modifiers.staticKeyword,
- returnType);
+ return _parseGetter(commentAndMetadata, modifiers.externalKeyword,
+ modifiers.staticKeyword, returnType);
} else if (_matchesKeyword(Keyword.SET) &&
_tokenMatchesIdentifier(_peek())) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseSetter(
- commentAndMetadata,
- modifiers.externalKeyword,
- modifiers.staticKeyword,
- returnType);
+ return _parseSetter(commentAndMetadata, modifiers.externalKeyword,
+ modifiers.staticKeyword, returnType);
} else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
_validateModifiersForOperator(modifiers);
return _parseOperator(
- commentAndMetadata,
- modifiers.externalKeyword,
- returnType);
+ commentAndMetadata, modifiers.externalKeyword, returnType);
} else if (_matchesIdentifier() &&
- _peek().matchesAny(
- [TokenType.OPEN_PAREN, TokenType.OPEN_CURLY_BRACKET, TokenType.FUNCTION])) {
+ _peek().matchesAny([
+ TokenType.OPEN_PAREN,
+ TokenType.OPEN_CURLY_BRACKET,
+ TokenType.FUNCTION
+ ])) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseMethodDeclarationAfterReturnType(
- commentAndMetadata,
- modifiers.externalKeyword,
- modifiers.staticKeyword,
- returnType);
+ return _parseMethodDeclarationAfterReturnType(commentAndMetadata,
+ modifiers.externalKeyword, modifiers.staticKeyword, returnType);
} else {
//
// We have found an error of some kind. Try to recover.
@@ -2610,10 +2395,8 @@
// We appear to have a variable declaration with a type of "void".
//
_reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType);
- return _parseInitializedIdentifierList(
- commentAndMetadata,
- modifiers.staticKeyword,
- _validateModifiersForField(modifiers),
+ return _parseInitializedIdentifierList(commentAndMetadata,
+ modifiers.staticKeyword, _validateModifiersForField(modifiers),
returnType);
}
}
@@ -2624,37 +2407,26 @@
//
_validateModifiersForOperator(modifiers);
return _parseOperator(
- commentAndMetadata,
- modifiers.externalKeyword,
- returnType);
+ commentAndMetadata, modifiers.externalKeyword, returnType);
}
_reportErrorForToken(
- ParserErrorCode.EXPECTED_EXECUTABLE,
- _currentToken);
+ ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken);
return null;
}
} else if (_matchesKeyword(Keyword.GET) &&
_tokenMatchesIdentifier(_peek())) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseGetter(
- commentAndMetadata,
- modifiers.externalKeyword,
- modifiers.staticKeyword,
- null);
+ return _parseGetter(commentAndMetadata, modifiers.externalKeyword,
+ modifiers.staticKeyword, null);
} else if (_matchesKeyword(Keyword.SET) &&
_tokenMatchesIdentifier(_peek())) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseSetter(
- commentAndMetadata,
- modifiers.externalKeyword,
- modifiers.staticKeyword,
- null);
+ return _parseSetter(commentAndMetadata, modifiers.externalKeyword,
+ modifiers.staticKeyword, null);
} else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
_validateModifiersForOperator(modifiers);
return _parseOperator(
- commentAndMetadata,
- modifiers.externalKeyword,
- null);
+ commentAndMetadata, modifiers.externalKeyword, null);
} else if (!_matchesIdentifier()) {
//
// Recover from an error.
@@ -2679,9 +2451,7 @@
//
_validateModifiersForOperator(modifiers);
return _parseOperator(
- commentAndMetadata,
- modifiers.externalKeyword,
- null);
+ commentAndMetadata, modifiers.externalKeyword, null);
}
Token keyword = modifiers.varKeyword;
if (keyword == null) {
@@ -2696,18 +2466,15 @@
//
_reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER);
List<VariableDeclaration> variables = new List<VariableDeclaration>();
- variables.add(
- new VariableDeclaration(null, null, _createSyntheticIdentifier(), null, null));
- return new FieldDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- null,
+ variables.add(new VariableDeclaration(
+ null, null, _createSyntheticIdentifier(), null, null));
+ return new FieldDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, null,
new VariableDeclarationList(null, null, keyword, null, variables),
_expectSemicolon());
}
_reportErrorForToken(
- ParserErrorCode.EXPECTED_CLASS_MEMBER,
- _currentToken);
+ ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken);
if (commentAndMetadata.comment != null ||
!commentAndMetadata.metadata.isEmpty) {
//
@@ -2716,30 +2483,19 @@
// to loose, so we'll treat it as a method declaration with a missing
// name, parameters and empty body.
//
- return new MethodDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- null,
- null,
- null,
- null,
- null,
- _createSyntheticIdentifier(),
- new FormalParameterList(null, new List<FormalParameter>(), null, null, null),
+ return new MethodDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, null, null, null, null, null,
+ _createSyntheticIdentifier(), new FormalParameterList(
+ null, new List<FormalParameter>(), null, null, null),
new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON)));
}
return null;
} else if (_tokenMatches(_peek(), TokenType.PERIOD) &&
_tokenMatchesIdentifier(_peekAt(2)) &&
_tokenMatches(_peekAt(3), TokenType.OPEN_PAREN)) {
- return _parseConstructor(
- commentAndMetadata,
- modifiers.externalKeyword,
- _validateModifiersForConstructor(modifiers),
- modifiers.factoryKeyword,
- parseSimpleIdentifier(),
- getAndAdvance(),
- parseSimpleIdentifier(),
+ return _parseConstructor(commentAndMetadata, modifiers.externalKeyword,
+ _validateModifiersForConstructor(modifiers), modifiers.factoryKeyword,
+ parseSimpleIdentifier(), getAndAdvance(), parseSimpleIdentifier(),
parseFormalParameterList());
} else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
SimpleIdentifier methodName = parseSimpleIdentifier();
@@ -2747,38 +2503,25 @@
if (_matches(TokenType.COLON) ||
modifiers.factoryKeyword != null ||
methodName.name == className) {
- return _parseConstructor(
- commentAndMetadata,
- modifiers.externalKeyword,
+ return _parseConstructor(commentAndMetadata, modifiers.externalKeyword,
_validateModifiersForConstructor(modifiers),
- modifiers.factoryKeyword,
- methodName,
- null,
- null,
- parameters);
+ modifiers.factoryKeyword, methodName, null, null, parameters);
}
_validateModifiersForGetterOrSetterOrMethod(modifiers);
_validateFormalParameterList(parameters);
- return _parseMethodDeclarationAfterParameters(
- commentAndMetadata,
- modifiers.externalKeyword,
- modifiers.staticKeyword,
- null,
- methodName,
+ return _parseMethodDeclarationAfterParameters(commentAndMetadata,
+ modifiers.externalKeyword, modifiers.staticKeyword, null, methodName,
parameters);
- } else if (_peek().matchesAny(
- [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
+ } else if (_peek()
+ .matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
if (modifiers.constKeyword == null &&
modifiers.finalKeyword == null &&
modifiers.varKeyword == null) {
_reportErrorForCurrentToken(
ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE);
}
- return _parseInitializedIdentifierList(
- commentAndMetadata,
- modifiers.staticKeyword,
- _validateModifiersForField(modifiers),
- null);
+ return _parseInitializedIdentifierList(commentAndMetadata,
+ modifiers.staticKeyword, _validateModifiersForField(modifiers), null);
} else if (_matchesKeyword(Keyword.TYPEDEF)) {
_reportErrorForCurrentToken(ParserErrorCode.TYPEDEF_IN_CLASS);
// TODO(brianwilkerson) We don't currently have any way to capture the
@@ -2789,25 +2532,17 @@
TypeName type = parseTypeName();
if (_matchesKeyword(Keyword.GET) && _tokenMatchesIdentifier(_peek())) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseGetter(
- commentAndMetadata,
- modifiers.externalKeyword,
- modifiers.staticKeyword,
- type);
+ return _parseGetter(commentAndMetadata, modifiers.externalKeyword,
+ modifiers.staticKeyword, type);
} else if (_matchesKeyword(Keyword.SET) &&
_tokenMatchesIdentifier(_peek())) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseSetter(
- commentAndMetadata,
- modifiers.externalKeyword,
- modifiers.staticKeyword,
- type);
+ return _parseSetter(commentAndMetadata, modifiers.externalKeyword,
+ modifiers.staticKeyword, type);
} else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
_validateModifiersForOperator(modifiers);
return _parseOperator(
- commentAndMetadata,
- modifiers.externalKeyword,
- type);
+ commentAndMetadata, modifiers.externalKeyword, type);
} else if (!_matchesIdentifier()) {
if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
//
@@ -2815,10 +2550,8 @@
// class. At this point it consists of a type name, so we'll treat it as
// a field declaration with a missing field name and semicolon.
//
- return _parseInitializedIdentifierList(
- commentAndMetadata,
- modifiers.staticKeyword,
- _validateModifiersForField(modifiers),
+ return _parseInitializedIdentifierList(commentAndMetadata,
+ modifiers.staticKeyword, _validateModifiersForField(modifiers),
type);
}
if (_isOperator(_currentToken)) {
@@ -2828,9 +2561,7 @@
//
_validateModifiersForOperator(modifiers);
return _parseOperator(
- commentAndMetadata,
- modifiers.externalKeyword,
- type);
+ commentAndMetadata, modifiers.externalKeyword, type);
}
//
// We appear to have found an incomplete declaration before another
@@ -2838,14 +2569,11 @@
// it as a field declaration with a missing field name and semicolon.
//
_reportErrorForToken(
- ParserErrorCode.EXPECTED_CLASS_MEMBER,
- _currentToken);
+ ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken);
try {
_lockErrorListener();
- return _parseInitializedIdentifierList(
- commentAndMetadata,
- modifiers.staticKeyword,
- _validateModifiersForField(modifiers),
+ return _parseInitializedIdentifierList(commentAndMetadata,
+ modifiers.staticKeyword, _validateModifiersForField(modifiers),
type);
} finally {
_unlockErrorListener();
@@ -2855,24 +2583,14 @@
FormalParameterList parameters = parseFormalParameterList();
if (methodName.name == className) {
_reportErrorForNode(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, type);
- return _parseConstructor(
- commentAndMetadata,
- modifiers.externalKeyword,
+ return _parseConstructor(commentAndMetadata, modifiers.externalKeyword,
_validateModifiersForConstructor(modifiers),
- modifiers.factoryKeyword,
- methodName,
- null,
- null,
- parameters);
+ modifiers.factoryKeyword, methodName, null, null, parameters);
}
_validateModifiersForGetterOrSetterOrMethod(modifiers);
_validateFormalParameterList(parameters);
- return _parseMethodDeclarationAfterParameters(
- commentAndMetadata,
- modifiers.externalKeyword,
- modifiers.staticKeyword,
- type,
- methodName,
+ return _parseMethodDeclarationAfterParameters(commentAndMetadata,
+ modifiers.externalKeyword, modifiers.staticKeyword, type, methodName,
parameters);
} else if (_tokenMatches(_peek(), TokenType.OPEN_CURLY_BRACKET)) {
// We have found "TypeName identifier {", and are guessing that this is a
@@ -2881,17 +2599,11 @@
_reportErrorForCurrentToken(ParserErrorCode.MISSING_GET);
_currentToken = _injectToken(
new Parser_SyntheticKeywordToken(Keyword.GET, _currentToken.offset));
- return _parseGetter(
- commentAndMetadata,
- modifiers.externalKeyword,
- modifiers.staticKeyword,
- type);
+ return _parseGetter(commentAndMetadata, modifiers.externalKeyword,
+ modifiers.staticKeyword, type);
}
- return _parseInitializedIdentifierList(
- commentAndMetadata,
- modifiers.staticKeyword,
- _validateModifiersForField(modifiers),
- type);
+ return _parseInitializedIdentifierList(commentAndMetadata,
+ modifiers.staticKeyword, _validateModifiersForField(modifiers), type);
}
/**
@@ -2972,9 +2684,9 @@
while (!_matches(TokenType.EOF)) {
CommentAndMetadata commentAndMetadata = _parseCommentAndMetadata();
if ((_matchesKeyword(Keyword.IMPORT) ||
- _matchesKeyword(Keyword.EXPORT) ||
- _matchesKeyword(Keyword.LIBRARY) ||
- _matchesKeyword(Keyword.PART)) &&
+ _matchesKeyword(Keyword.EXPORT) ||
+ _matchesKeyword(Keyword.LIBRARY) ||
+ _matchesKeyword(Keyword.PART)) &&
!_tokenMatches(_peek(), TokenType.PERIOD) &&
!_tokenMatches(_peek(), TokenType.LT) &&
!_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
@@ -2990,9 +2702,8 @@
ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES);
} else {
if (directives.length > 0) {
- _reportErrorForToken(
- ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST,
- directive.libraryToken);
+ _reportErrorForToken(ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST,
+ directive.libraryKeyword);
}
libraryDirectiveFound = true;
}
@@ -3024,17 +2735,15 @@
}
} else {
if (partOfDirectiveFound) {
- _reportErrorForToken(
- ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART,
+ _reportErrorForToken(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART,
directive.keyword);
}
}
directives.add(directive);
} else if (_matches(TokenType.SEMICOLON)) {
- _reportErrorForToken(
- ParserErrorCode.UNEXPECTED_TOKEN,
- _currentToken,
- [_currentToken.lexeme]);
+ _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [
+ _currentToken.lexeme
+ ]);
_advance();
} else {
CompilationUnitMember member =
@@ -3044,10 +2753,9 @@
}
}
if (identical(_currentToken, memberStart)) {
- _reportErrorForToken(
- ParserErrorCode.UNEXPECTED_TOKEN,
- _currentToken,
- [_currentToken.lexeme]);
+ _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [
+ _currentToken.lexeme
+ ]);
_advance();
while (!_matches(TokenType.EOF) &&
!_couldBeStartOfCompilationUnitMember()) {
@@ -3057,11 +2765,7 @@
memberStart = _currentToken;
}
return new CompilationUnit(
- firstToken,
- scriptTag,
- directives,
- declarations,
- _currentToken);
+ firstToken, scriptTag, directives, declarations, _currentToken);
}
/**
@@ -3084,11 +2788,7 @@
Token colon = _expect(TokenType.COLON);
Expression elseExpression = parseExpressionWithoutCascade();
return new ConditionalExpression(
- condition,
- question,
- thenExpression,
- colon,
- elseExpression);
+ condition, question, thenExpression, colon, elseExpression);
}
/**
@@ -3211,9 +2911,7 @@
Token operator = getAndAdvance();
_ensureAssignable(expression);
expression = new AssignmentExpression(
- expression,
- operator,
- parseExpressionWithoutCascade());
+ expression, operator, parseExpressionWithoutCascade());
}
return expression;
}
@@ -3263,11 +2961,7 @@
Token leftParenthesis = _expect(TokenType.OPEN_PAREN);
if (_matches(TokenType.CLOSE_PAREN)) {
return new FormalParameterList(
- leftParenthesis,
- null,
- null,
- null,
- getAndAdvance());
+ leftParenthesis, null, null, null, getAndAdvance());
}
//
// Even though it is invalid to have default parameters outside of brackets,
@@ -3299,11 +2993,9 @@
// case.
if (_getEndToken(leftParenthesis) != null) {
_reportErrorForCurrentToken(
- ParserErrorCode.EXPECTED_TOKEN,
- [TokenType.COMMA.lexeme]);
+ ParserErrorCode.EXPECTED_TOKEN, [TokenType.COMMA.lexeme]);
} else {
- _reportErrorForToken(
- ParserErrorCode.MISSING_CLOSING_PARENTHESIS,
+ _reportErrorForToken(ParserErrorCode.MISSING_CLOSING_PARENTHESIS,
_currentToken.previous);
break;
}
@@ -3349,8 +3041,7 @@
currentParameters.add(parameter);
if (kind == ParameterKind.REQUIRED && wasOptionalParameter) {
_reportErrorForNode(
- ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS,
- parameter);
+ ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS, parameter);
}
//
// Handle the end of parameter groups.
@@ -3363,14 +3054,14 @@
if (leftSquareBracket == null) {
if (leftCurlyBracket != null) {
_reportErrorForCurrentToken(
- ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP,
- ["}"]);
+ ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]);
rightCurlyBracket = rightSquareBracket;
rightSquareBracket = null;
} else {
_reportErrorForCurrentToken(
- ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP,
- ["["]);
+ ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, [
+ "["
+ ]);
}
}
kind = ParameterKind.REQUIRED;
@@ -3380,14 +3071,14 @@
if (leftCurlyBracket == null) {
if (leftSquareBracket != null) {
_reportErrorForCurrentToken(
- ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP,
- ["]"]);
+ ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["]"]);
rightSquareBracket = rightCurlyBracket;
rightCurlyBracket = null;
} else {
_reportErrorForCurrentToken(
- ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP,
- ["{"]);
+ ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, [
+ "{"
+ ]);
}
}
kind = ParameterKind.REQUIRED;
@@ -3400,13 +3091,11 @@
//
if (leftSquareBracket != null && rightSquareBracket == null) {
_reportErrorForCurrentToken(
- ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP,
- ["]"]);
+ ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["]"]);
}
if (leftCurlyBracket != null && rightCurlyBracket == null) {
_reportErrorForCurrentToken(
- ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP,
- ["}"]);
+ ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]);
}
//
// Build the parameter list.
@@ -3417,12 +3106,8 @@
if (rightSquareBracket == null) {
rightSquareBracket = rightCurlyBracket;
}
- return new FormalParameterList(
- leftParenthesis,
- parameters,
- leftSquareBracket,
- rightSquareBracket,
- rightParenthesis);
+ return new FormalParameterList(leftParenthesis, parameters,
+ leftSquareBracket, rightSquareBracket, rightParenthesis);
}
/**
@@ -3513,8 +3198,8 @@
Expression expression = _parseLogicalAndExpression();
while (_matches(TokenType.BAR_BAR)) {
Token operator = getAndAdvance();
- expression =
- new BinaryExpression(expression, operator, _parseLogicalAndExpression());
+ expression = new BinaryExpression(
+ expression, operator, _parseLogicalAndExpression());
}
return expression;
}
@@ -3572,55 +3257,33 @@
if (thisKeyword == null) {
if (holder.keyword != null) {
_reportErrorForToken(
- ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR,
- holder.keyword);
+ ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, holder.keyword);
}
- return new FunctionTypedFormalParameter(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- holder.type,
- identifier,
- parameters);
+ return new FunctionTypedFormalParameter(commentAndMetadata.comment,
+ commentAndMetadata.metadata, holder.type, identifier, parameters);
} else {
- return new FieldFormalParameter(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- holder.keyword,
- holder.type,
- thisKeyword,
- period,
- identifier,
- parameters);
+ return new FieldFormalParameter(commentAndMetadata.comment,
+ commentAndMetadata.metadata, holder.keyword, holder.type,
+ thisKeyword, period, identifier, parameters);
}
}
TypeName type = holder.type;
if (type != null) {
if (_tokenMatchesKeyword(type.name.beginToken, Keyword.VOID)) {
_reportErrorForToken(
- ParserErrorCode.VOID_PARAMETER,
- type.name.beginToken);
+ ParserErrorCode.VOID_PARAMETER, type.name.beginToken);
} else if (holder.keyword != null &&
_tokenMatchesKeyword(holder.keyword, Keyword.VAR)) {
_reportErrorForToken(ParserErrorCode.VAR_AND_TYPE, holder.keyword);
}
}
if (thisKeyword != null) {
- return new FieldFormalParameter(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- holder.keyword,
- holder.type,
- thisKeyword,
- period,
- identifier,
- null);
+ return new FieldFormalParameter(commentAndMetadata.comment,
+ commentAndMetadata.metadata, holder.keyword, holder.type, thisKeyword,
+ period, identifier, null);
}
- return new SimpleFormalParameter(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- holder.keyword,
- holder.type,
- identifier);
+ return new SimpleFormalParameter(commentAndMetadata.comment,
+ commentAndMetadata.metadata, holder.keyword, holder.type, identifier);
}
/**
@@ -3751,10 +3414,8 @@
_matches(TokenType.STRING_INTERPOLATION_IDENTIFIER)) {
strings.add(_parseStringInterpolation(string));
} else {
- strings.add(
- new SimpleStringLiteral(
- string,
- _computeStringValue(string.lexeme, true, true)));
+ strings.add(new SimpleStringLiteral(
+ string, _computeStringValue(string.lexeme, true, true)));
}
}
if (strings.length < 1) {
@@ -3835,19 +3496,11 @@
if (_matchesKeyword(Keyword.EXTENDS)) {
Token keyword = getAndAdvance();
TypeName bound = parseTypeName();
- return new TypeParameter(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- name,
- keyword,
- bound);
+ return new TypeParameter(commentAndMetadata.comment,
+ commentAndMetadata.metadata, name, keyword, bound);
}
- return new TypeParameter(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- name,
- null,
- null);
+ return new TypeParameter(commentAndMetadata.comment,
+ commentAndMetadata.metadata, name, null, null);
}
/**
@@ -3915,8 +3568,7 @@
scalarValue > Character.MAX_CODE_POINT ||
(scalarValue >= 0xD800 && scalarValue <= 0xDFFF)) {
_reportErrorForCurrentToken(
- ParserErrorCode.INVALID_CODE_POINT,
- [escapeSequence]);
+ ParserErrorCode.INVALID_CODE_POINT, [escapeSequence]);
return;
}
if (scalarValue < Character.MAX_VALUE) {
@@ -3988,14 +3640,9 @@
* declaration
*/
FunctionDeclaration _convertToFunctionDeclaration(MethodDeclaration method) =>
- new FunctionDeclaration(
- method.documentationComment,
- method.metadata,
- method.externalKeyword,
- method.returnType,
- method.propertyKeyword,
- method.name,
- new FunctionExpression(method.parameters, method.body));
+ new FunctionDeclaration(method.documentationComment, method.metadata,
+ method.externalKeyword, method.returnType, method.propertyKeyword,
+ method.name, new FunctionExpression(method.parameters, method.body));
/**
* Return `true` if the current token could be the start of a compilation unit member. This
@@ -4006,9 +3653,9 @@
*/
bool _couldBeStartOfCompilationUnitMember() {
if ((_matchesKeyword(Keyword.IMPORT) ||
- _matchesKeyword(Keyword.EXPORT) ||
- _matchesKeyword(Keyword.LIBRARY) ||
- _matchesKeyword(Keyword.PART)) &&
+ _matchesKeyword(Keyword.EXPORT) ||
+ _matchesKeyword(Keyword.LIBRARY) ||
+ _matchesKeyword(Keyword.PART)) &&
!_tokenMatches(_peek(), TokenType.PERIOD) &&
!_tokenMatches(_peek(), TokenType.LT)) {
// This looks like the start of a directive
@@ -4059,11 +3706,8 @@
// synthetic identifier. By creating SyntheticStringToken we can
// distinguish a real identifier from synthetic. In the code completion
// behavior will depend on a cursor position - before or on "is".
- syntheticToken = _injectToken(
- new SyntheticStringToken(
- TokenType.IDENTIFIER,
- _currentToken.lexeme,
- _currentToken.offset));
+ syntheticToken = _injectToken(new SyntheticStringToken(
+ TokenType.IDENTIFIER, _currentToken.lexeme, _currentToken.offset));
} else {
syntheticToken = _createSyntheticToken(TokenType.IDENTIFIER);
}
@@ -4075,8 +3719,8 @@
*
* @return the synthetic token that was created
*/
- Token _createSyntheticKeyword(Keyword keyword) =>
- _injectToken(new Parser_SyntheticKeywordToken(keyword, _currentToken.offset));
+ Token _createSyntheticKeyword(Keyword keyword) => _injectToken(
+ new Parser_SyntheticKeywordToken(keyword, _currentToken.offset));
/**
* Create a synthetic string literal.
@@ -4154,19 +3798,15 @@
if (type == TokenType.SEMICOLON) {
if (_tokenMatches(_currentToken.next, TokenType.SEMICOLON)) {
_reportErrorForCurrentToken(
- ParserErrorCode.UNEXPECTED_TOKEN,
- [_currentToken.lexeme]);
+ ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken.lexeme]);
_advance();
return getAndAdvance();
}
- _reportErrorForToken(
- ParserErrorCode.EXPECTED_TOKEN,
- _currentToken.previous,
- [type.lexeme]);
+ _reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN,
+ _currentToken.previous, [type.lexeme]);
} else {
_reportErrorForCurrentToken(
- ParserErrorCode.EXPECTED_TOKEN,
- [type.lexeme]);
+ ParserErrorCode.EXPECTED_TOKEN, [type.lexeme]);
}
return _currentToken;
}
@@ -4182,8 +3822,7 @@
return getAndAdvance();
}
_reportErrorForCurrentToken(
- ParserErrorCode.EXPECTED_TOKEN,
- [TokenType.GT.lexeme]);
+ ParserErrorCode.EXPECTED_TOKEN, [TokenType.GT.lexeme]);
return _currentToken;
}
@@ -4201,8 +3840,7 @@
// Remove uses of this method in favor of matches?
// Pass in the error code to use to report the error?
_reportErrorForCurrentToken(
- ParserErrorCode.EXPECTED_TOKEN,
- [keyword.syntax]);
+ ParserErrorCode.EXPECTED_TOKEN, [keyword.syntax]);
return _currentToken;
}
@@ -4217,9 +3855,7 @@
return getAndAdvance();
} else {
_reportErrorForToken(
- ParserErrorCode.EXPECTED_TOKEN,
- _currentToken.previous,
- [";"]);
+ ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [";"]);
return _createSyntheticToken(TokenType.SEMICOLON);
}
}
@@ -4277,14 +3913,7 @@
index = index + 1;
}
if (StringUtilities.startsWith6(
- comment,
- index,
- 0x2A,
- 0x20,
- 0x20,
- 0x20,
- 0x20,
- 0x20)) {
+ comment, index, 0x2A, 0x20, 0x20, 0x20, 0x20, 0x20)) {
int end = index + 6;
while (end < length &&
comment.codeUnitAt(end) != 0xD &&
@@ -4398,8 +4027,8 @@
if (afterParameters == null) {
return false;
}
- if (afterParameters.matchesAny(
- [TokenType.OPEN_CURLY_BRACKET, TokenType.FUNCTION])) {
+ if (afterParameters
+ .matchesAny([TokenType.OPEN_CURLY_BRACKET, TokenType.FUNCTION])) {
return true;
}
String lexeme = afterParameters.lexeme;
@@ -4412,10 +4041,9 @@
* @param character the character being tested
* @return `true` if the character is a valid hexadecimal digit
*/
- bool _isHexDigit(int character) =>
- (0x30 <= character && character <= 0x39) ||
- (0x41 <= character && character <= 0x46) ||
- (0x61 <= character && character <= 0x66);
+ bool _isHexDigit(int character) => (0x30 <= character && character <= 0x39) ||
+ (0x41 <= character && character <= 0x46) ||
+ (0x61 <= character && character <= 0x66);
/**
* Return `true` if the current token is the first token in an initialized variable
@@ -4454,12 +4082,12 @@
if (_matchesKeyword(Keyword.CONST)) {
// Look to see whether we might be at the start of a list or map literal,
// otherwise this should be the start of a variable declaration.
- return !_peek().matchesAny(
- [
- TokenType.LT,
- TokenType.OPEN_CURLY_BRACKET,
- TokenType.OPEN_SQUARE_BRACKET,
- TokenType.INDEX]);
+ return !_peek().matchesAny([
+ TokenType.LT,
+ TokenType.OPEN_CURLY_BRACKET,
+ TokenType.OPEN_SQUARE_BRACKET,
+ TokenType.INDEX
+ ]);
}
// We know that we have an identifier, and need to see whether it might be
// a type name.
@@ -4704,8 +4332,8 @@
}
while (_currentToken.type.isAdditiveOperator) {
Token operator = getAndAdvance();
- expression =
- new BinaryExpression(expression, operator, _parseMultiplicativeExpression());
+ expression = new BinaryExpression(
+ expression, operator, _parseMultiplicativeExpression());
}
return expression;
}
@@ -4726,29 +4354,21 @@
Expression expression = parseExpression2();
if (expression is AssignmentExpression) {
_reportErrorForNode(
- ParserErrorCode.ASSERT_DOES_NOT_TAKE_ASSIGNMENT,
- expression);
+ ParserErrorCode.ASSERT_DOES_NOT_TAKE_ASSIGNMENT, expression);
} else if (expression is CascadeExpression) {
_reportErrorForNode(
- ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE,
- expression);
+ ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE, expression);
} else if (expression is ThrowExpression) {
_reportErrorForNode(
- ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW,
- expression);
+ ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW, expression);
} else if (expression is RethrowExpression) {
_reportErrorForNode(
- ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW,
- expression);
+ ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW, expression);
}
Token rightParen = _expect(TokenType.CLOSE_PAREN);
Token semicolon = _expect(TokenType.SEMICOLON);
return new AssertStatement(
- keyword,
- leftParen,
- expression,
- rightParen,
- semicolon);
+ keyword, leftParen, expression, rightParen, semicolon);
}
/**
@@ -4768,8 +4388,7 @@
Expression _parseAssignableExpression(bool primaryAllowed) {
if (_matchesKeyword(Keyword.SUPER)) {
return _parseAssignableSelector(
- new SuperExpression(getAndAdvance()),
- false);
+ new SuperExpression(getAndAdvance()), false);
}
//
// A primary expression can start with an identifier. We resolve the
@@ -4782,22 +4401,16 @@
while (_matches(TokenType.OPEN_PAREN)) {
ArgumentList argumentList = parseArgumentList();
if (expression is SimpleIdentifier) {
- expression =
- new MethodInvocation(null, null, expression as SimpleIdentifier, argumentList);
+ expression = new MethodInvocation(
+ null, null, expression as SimpleIdentifier, argumentList);
} else if (expression is PrefixedIdentifier) {
PrefixedIdentifier identifier = expression as PrefixedIdentifier;
- expression = new MethodInvocation(
- identifier.prefix,
- identifier.period,
- identifier.identifier,
- argumentList);
+ expression = new MethodInvocation(identifier.prefix,
+ identifier.period, identifier.identifier, argumentList);
} else if (expression is PropertyAccess) {
PropertyAccess access = expression as PropertyAccess;
- expression = new MethodInvocation(
- access.target,
- access.operator,
- access.propertyName,
- argumentList);
+ expression = new MethodInvocation(access.target, access.operator,
+ access.propertyName, argumentList);
} else {
expression =
new FunctionExpressionInvocation(expression, argumentList);
@@ -4807,15 +4420,12 @@
}
}
Expression selectorExpression = _parseAssignableSelector(
- expression,
- isOptional || (expression is PrefixedIdentifier));
+ expression, isOptional || (expression is PrefixedIdentifier));
if (identical(selectorExpression, expression)) {
if (!isOptional && (expression is PrefixedIdentifier)) {
PrefixedIdentifier identifier = expression as PrefixedIdentifier;
expression = new PropertyAccess(
- identifier.prefix,
- identifier.period,
- identifier.identifier);
+ identifier.prefix, identifier.period, identifier.identifier);
}
return expression;
}
@@ -4847,10 +4457,7 @@
Expression index = parseExpression2();
Token rightBracket = _expect(TokenType.CLOSE_SQUARE_BRACKET);
return new IndexExpression.forTarget(
- prefix,
- leftBracket,
- index,
- rightBracket);
+ prefix, leftBracket, index, rightBracket);
} finally {
_inInitializer = wasInInitializer;
}
@@ -4931,8 +4538,8 @@
}
while (_matches(TokenType.CARET)) {
Token operator = getAndAdvance();
- expression =
- new BinaryExpression(expression, operator, _parseBitwiseAndExpression());
+ expression = new BinaryExpression(
+ expression, operator, _parseBitwiseAndExpression());
}
return expression;
}
@@ -4990,17 +4597,16 @@
try {
Expression index = parseExpression2();
Token rightBracket = _expect(TokenType.CLOSE_SQUARE_BRACKET);
- expression =
- new IndexExpression.forCascade(period, leftBracket, index, rightBracket);
+ expression = new IndexExpression.forCascade(
+ period, leftBracket, index, rightBracket);
period = null;
} finally {
_inInitializer = wasInInitializer;
}
} else {
- _reportErrorForToken(
- ParserErrorCode.MISSING_IDENTIFIER,
- _currentToken,
- [_currentToken.lexeme]);
+ _reportErrorForToken(ParserErrorCode.MISSING_IDENTIFIER, _currentToken, [
+ _currentToken.lexeme
+ ]);
functionName = _createSyntheticIdentifier();
}
assert((expression == null && functionName != null) ||
@@ -5008,17 +4614,14 @@
if (_currentToken.type == TokenType.OPEN_PAREN) {
while (_currentToken.type == TokenType.OPEN_PAREN) {
if (functionName != null) {
- expression =
- new MethodInvocation(expression, period, functionName, parseArgumentList());
+ expression = new MethodInvocation(
+ expression, period, functionName, parseArgumentList());
period = null;
functionName = null;
} else if (expression == null) {
// It should not be possible to get here.
- expression = new MethodInvocation(
- expression,
- period,
- _createSyntheticIdentifier(),
- parseArgumentList());
+ expression = new MethodInvocation(expression, period,
+ _createSyntheticIdentifier(), parseArgumentList());
} else {
expression =
new FunctionExpressionInvocation(expression, parseArgumentList());
@@ -5039,14 +4642,12 @@
while (_currentToken.type == TokenType.OPEN_PAREN) {
if (expression is PropertyAccess) {
PropertyAccess propertyAccess = expression as PropertyAccess;
- expression = new MethodInvocation(
- propertyAccess.target,
- propertyAccess.operator,
- propertyAccess.propertyName,
+ expression = new MethodInvocation(propertyAccess.target,
+ propertyAccess.operator, propertyAccess.propertyName,
parseArgumentList());
} else {
- expression =
- new FunctionExpressionInvocation(expression, parseArgumentList());
+ expression = new FunctionExpressionInvocation(
+ expression, parseArgumentList());
}
}
}
@@ -5055,9 +4656,7 @@
Token operator = getAndAdvance();
_ensureAssignable(expression);
expression = new AssignmentExpression(
- expression,
- operator,
- parseExpressionWithoutCascade());
+ expression, operator, parseExpressionWithoutCascade());
}
return expression;
}
@@ -5076,9 +4675,8 @@
* not given
* @return the class declaration that was parsed
*/
- CompilationUnitMember
- _parseClassDeclaration(CommentAndMetadata commentAndMetadata,
- Token abstractKeyword) {
+ CompilationUnitMember _parseClassDeclaration(
+ CommentAndMetadata commentAndMetadata, Token abstractKeyword) {
Token keyword = _expectKeyword(Keyword.CLASS);
if (_matchesIdentifier()) {
Token next = _peek();
@@ -5086,15 +4684,11 @@
next = _skipTypeParameterList(next);
if (next != null && _tokenMatches(next, TokenType.EQ)) {
return _parseClassTypeAlias(
- commentAndMetadata,
- abstractKeyword,
- keyword);
+ commentAndMetadata, abstractKeyword, keyword);
}
} else if (_tokenMatches(next, TokenType.EQ)) {
return _parseClassTypeAlias(
- commentAndMetadata,
- abstractKeyword,
- keyword);
+ commentAndMetadata, abstractKeyword, keyword);
}
}
SimpleIdentifier name = parseSimpleIdentifier();
@@ -5118,31 +4712,26 @@
extendsClause = parseExtendsClause();
if (withClause != null) {
_reportErrorForToken(
- ParserErrorCode.WITH_BEFORE_EXTENDS,
- withClause.withKeyword);
+ ParserErrorCode.WITH_BEFORE_EXTENDS, withClause.withKeyword);
} else if (implementsClause != null) {
- _reportErrorForToken(
- ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS,
- implementsClause.keyword);
+ _reportErrorForToken(ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS,
+ implementsClause.implementsKeyword);
}
} else {
- _reportErrorForToken(
- ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES,
- extendsClause.keyword);
+ _reportErrorForToken(ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES,
+ extendsClause.extendsKeyword);
parseExtendsClause();
}
} else if (_matchesKeyword(Keyword.WITH)) {
if (withClause == null) {
withClause = parseWithClause();
if (implementsClause != null) {
- _reportErrorForToken(
- ParserErrorCode.IMPLEMENTS_BEFORE_WITH,
- implementsClause.keyword);
+ _reportErrorForToken(ParserErrorCode.IMPLEMENTS_BEFORE_WITH,
+ implementsClause.implementsKeyword);
}
} else {
_reportErrorForToken(
- ParserErrorCode.MULTIPLE_WITH_CLAUSES,
- withClause.withKeyword);
+ ParserErrorCode.MULTIPLE_WITH_CLAUSES, withClause.withKeyword);
parseWithClause();
// TODO(brianwilkerson) Should we merge the list of applied mixins
// into a single list?
@@ -5151,9 +4740,8 @@
if (implementsClause == null) {
implementsClause = parseImplementsClause();
} else {
- _reportErrorForToken(
- ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES,
- implementsClause.keyword);
+ _reportErrorForToken(ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES,
+ implementsClause.implementsKeyword);
parseImplementsClause();
// TODO(brianwilkerson) Should we merge the list of implemented
// classes into a single list?
@@ -5164,8 +4752,7 @@
}
if (withClause != null && extendsClause == null) {
_reportErrorForToken(
- ParserErrorCode.WITH_WITHOUT_EXTENDS,
- withClause.withKeyword);
+ ParserErrorCode.WITH_WITHOUT_EXTENDS, withClause.withKeyword);
}
//
// Look for and skip over the extra-lingual 'native' specification.
@@ -5190,18 +4777,9 @@
_reportErrorForCurrentToken(ParserErrorCode.MISSING_CLASS_BODY);
}
ClassDeclaration classDeclaration = new ClassDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- abstractKeyword,
- keyword,
- name,
- typeParameters,
- extendsClause,
- withClause,
- implementsClause,
- leftBracket,
- members,
- rightBracket);
+ commentAndMetadata.comment, commentAndMetadata.metadata,
+ abstractKeyword, keyword, name, typeParameters, extendsClause,
+ withClause, implementsClause, leftBracket, members, rightBracket);
classDeclaration.nativeClause = nativeClause;
return classDeclaration;
}
@@ -5225,12 +4803,12 @@
while (!_matches(TokenType.EOF) &&
!_matches(TokenType.CLOSE_CURLY_BRACKET) &&
(closingBracket != null ||
- (!_matchesKeyword(Keyword.CLASS) && !_matchesKeyword(Keyword.TYPEDEF)))) {
+ (!_matchesKeyword(Keyword.CLASS) &&
+ !_matchesKeyword(Keyword.TYPEDEF)))) {
if (_matches(TokenType.SEMICOLON)) {
- _reportErrorForToken(
- ParserErrorCode.UNEXPECTED_TOKEN,
- _currentToken,
- [_currentToken.lexeme]);
+ _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [
+ _currentToken.lexeme
+ ]);
_advance();
} else {
ClassMember member = parseClassMember(className);
@@ -5239,10 +4817,9 @@
}
}
if (identical(_currentToken, memberStart)) {
- _reportErrorForToken(
- ParserErrorCode.UNEXPECTED_TOKEN,
- _currentToken,
- [_currentToken.lexeme]);
+ _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [
+ _currentToken.lexeme
+ ]);
_advance();
}
memberStart = _currentToken;
@@ -5280,8 +4857,7 @@
withClause = parseWithClause();
} else {
_reportErrorForCurrentToken(
- ParserErrorCode.EXPECTED_TOKEN,
- [Keyword.WITH.syntax]);
+ ParserErrorCode.EXPECTED_TOKEN, [Keyword.WITH.syntax]);
}
ImplementsClause implementsClause = null;
if (_matchesKeyword(Keyword.IMPLEMENTS)) {
@@ -5293,30 +4869,19 @@
} else {
if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
_reportErrorForCurrentToken(
- ParserErrorCode.EXPECTED_TOKEN,
- [TokenType.SEMICOLON.lexeme]);
+ ParserErrorCode.EXPECTED_TOKEN, [TokenType.SEMICOLON.lexeme]);
Token leftBracket = getAndAdvance();
_parseClassMembers(className.name, _getEndToken(leftBracket));
_expect(TokenType.CLOSE_CURLY_BRACKET);
} else {
- _reportErrorForToken(
- ParserErrorCode.EXPECTED_TOKEN,
- _currentToken.previous,
- [TokenType.SEMICOLON.lexeme]);
+ _reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN,
+ _currentToken.previous, [TokenType.SEMICOLON.lexeme]);
}
semicolon = _createSyntheticToken(TokenType.SEMICOLON);
}
- return new ClassTypeAlias(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- classKeyword,
- className,
- typeParameters,
- equals,
- abstractKeyword,
- superclass,
- withClause,
- implementsClause,
+ return new ClassTypeAlias(commentAndMetadata.comment,
+ commentAndMetadata.metadata, classKeyword, className, typeParameters,
+ equals, abstractKeyword, superclass, withClause, implementsClause,
semicolon);
}
@@ -5381,8 +4946,8 @@
* @param sourceOffset the offset of the first character of the reference source
* @return the comment reference that was parsed, or `null` if no reference could be found
*/
- CommentReference _parseCommentReference(String referenceSource,
- int sourceOffset) {
+ CommentReference _parseCommentReference(
+ String referenceSource, int sourceOffset) {
// TODO(brianwilkerson) The errors are not getting the right offset/length
// and are being duplicated.
if (referenceSource.length == 0) {
@@ -5393,9 +4958,7 @@
try {
BooleanErrorListener listener = new BooleanErrorListener();
Scanner scanner = new Scanner(
- null,
- new SubSequenceReader(referenceSource, sourceOffset),
- listener);
+ null, new SubSequenceReader(referenceSource, sourceOffset), listener);
scanner.setSourceStart(1, 1);
Token firstToken = scanner.tokenize();
if (listener.errorReported) {
@@ -5413,10 +4976,8 @@
Identifier identifier;
if (_tokenMatches(secondToken, TokenType.PERIOD) &&
_tokenMatchesIdentifier(thirdToken)) {
- identifier = new PrefixedIdentifier(
- new SimpleIdentifier(firstToken),
- secondToken,
- new SimpleIdentifier(thirdToken));
+ identifier = new PrefixedIdentifier(new SimpleIdentifier(firstToken),
+ secondToken, new SimpleIdentifier(thirdToken));
nextToken = thirdToken.next;
} else {
identifier = new SimpleIdentifier(firstToken);
@@ -5457,8 +5018,8 @@
* @param tokens the comment tokens representing the documentation comments to be parsed
* @return the comment references that were parsed
*/
- List<CommentReference>
- _parseCommentReferences(List<DocumentationCommentToken> tokens) {
+ List<CommentReference> _parseCommentReferences(
+ List<DocumentationCommentToken> tokens) {
List<CommentReference> references = new List<CommentReference>();
for (DocumentationCommentToken token in tokens) {
String comment = token.lexeme;
@@ -5478,8 +5039,7 @@
// URI in the link text.
} else {
CommentReference reference = _parseCommentReference(
- comment.substring(leftIndex + 1, rightIndex),
- nameOffset);
+ comment.substring(leftIndex + 1, rightIndex), nameOffset);
if (reference != null) {
references.add(reference);
token.references.add(reference.beginToken);
@@ -5490,16 +5050,16 @@
// terminating ']' is not typed yet
int charAfterLeft = comment.codeUnitAt(leftIndex + 1);
if (Character.isLetterOrDigit(charAfterLeft)) {
- int nameEnd =
- StringUtilities.indexOfFirstNotLetterDigit(comment, leftIndex + 1);
+ int nameEnd = StringUtilities.indexOfFirstNotLetterDigit(
+ comment, leftIndex + 1);
String name = comment.substring(leftIndex + 1, nameEnd);
Token nameToken =
new StringToken(TokenType.IDENTIFIER, name, nameOffset);
references.add(
new CommentReference(null, new SimpleIdentifier(nameToken)));
} else {
- Token nameToken =
- new SyntheticStringToken(TokenType.IDENTIFIER, "", nameOffset);
+ Token nameToken = new SyntheticStringToken(
+ TokenType.IDENTIFIER, "", nameOffset);
references.add(
new CommentReference(null, new SimpleIdentifier(nameToken)));
}
@@ -5535,13 +5095,12 @@
* @return the compilation unit member that was parsed, or `null` if what was parsed could
* not be represented as a compilation unit member
*/
- CompilationUnitMember
- _parseCompilationUnitMember(CommentAndMetadata commentAndMetadata) {
+ CompilationUnitMember _parseCompilationUnitMember(
+ CommentAndMetadata commentAndMetadata) {
Modifiers modifiers = _parseModifiers();
if (_matchesKeyword(Keyword.CLASS)) {
return _parseClassDeclaration(
- commentAndMetadata,
- _validateModifiersForClass(modifiers));
+ commentAndMetadata, _validateModifiersForClass(modifiers));
} else if (_matchesKeyword(Keyword.TYPEDEF) &&
!_tokenMatches(_peek(), TokenType.PERIOD) &&
!_tokenMatches(_peek(), TokenType.LT) &&
@@ -5558,21 +5117,20 @@
_tokenMatchesIdentifier(_peek())) {
_validateModifiersForTopLevelFunction(modifiers);
return _parseFunctionDeclaration(
- commentAndMetadata,
- modifiers.externalKeyword,
- returnType);
+ commentAndMetadata, modifiers.externalKeyword, returnType);
} else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
_reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken);
- return _convertToFunctionDeclaration(
- _parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType));
+ return _convertToFunctionDeclaration(_parseOperator(
+ commentAndMetadata, modifiers.externalKeyword, returnType));
} else if (_matchesIdentifier() &&
- _peek().matchesAny(
- [TokenType.OPEN_PAREN, TokenType.OPEN_CURLY_BRACKET, TokenType.FUNCTION])) {
+ _peek().matchesAny([
+ TokenType.OPEN_PAREN,
+ TokenType.OPEN_CURLY_BRACKET,
+ TokenType.FUNCTION
+ ])) {
_validateModifiersForTopLevelFunction(modifiers);
return _parseFunctionDeclaration(
- commentAndMetadata,
- modifiers.externalKeyword,
- returnType);
+ commentAndMetadata, modifiers.externalKeyword, returnType);
} else {
//
// We have found an error of some kind. Try to recover.
@@ -5584,28 +5142,22 @@
// We appear to have a variable declaration with a type of "void".
//
_reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType);
- return new TopLevelVariableDeclaration(
- commentAndMetadata.comment,
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment,
commentAndMetadata.metadata,
- _parseVariableDeclarationListAfterType(
- null,
- _validateModifiersForTopLevelVariable(modifiers),
- null),
+ _parseVariableDeclarationListAfterType(null,
+ _validateModifiersForTopLevelVariable(modifiers), null),
_expect(TokenType.SEMICOLON));
}
}
_reportErrorForToken(
- ParserErrorCode.EXPECTED_EXECUTABLE,
- _currentToken);
+ ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken);
return null;
}
} else if ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) &&
_tokenMatchesIdentifier(_peek())) {
_validateModifiersForTopLevelFunction(modifiers);
return _parseFunctionDeclaration(
- commentAndMetadata,
- modifiers.externalKeyword,
- null);
+ commentAndMetadata, modifiers.externalKeyword, null);
} else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
_reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken);
return _convertToFunctionDeclaration(
@@ -5624,10 +5176,9 @@
//
_reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER);
List<VariableDeclaration> variables = new List<VariableDeclaration>();
- variables.add(
- new VariableDeclaration(null, null, _createSyntheticIdentifier(), null, null));
- return new TopLevelVariableDeclaration(
- commentAndMetadata.comment,
+ variables.add(new VariableDeclaration(
+ null, null, _createSyntheticIdentifier(), null, null));
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment,
commentAndMetadata.metadata,
new VariableDeclarationList(null, null, keyword, null, variables),
_expectSemicolon());
@@ -5637,24 +5188,18 @@
} else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
_validateModifiersForTopLevelFunction(modifiers);
return _parseFunctionDeclaration(
- commentAndMetadata,
- modifiers.externalKeyword,
- null);
- } else if (_peek().matchesAny(
- [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
+ commentAndMetadata, modifiers.externalKeyword, null);
+ } else if (_peek()
+ .matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
if (modifiers.constKeyword == null &&
modifiers.finalKeyword == null &&
modifiers.varKeyword == null) {
_reportErrorForCurrentToken(
ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE);
}
- return new TopLevelVariableDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- _parseVariableDeclarationListAfterType(
- null,
- _validateModifiersForTopLevelVariable(modifiers),
- null),
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, _parseVariableDeclarationListAfterType(
+ null, _validateModifiersForTopLevelVariable(modifiers), null),
_expect(TokenType.SEMICOLON));
}
TypeName returnType = parseReturnType();
@@ -5662,22 +5207,16 @@
_tokenMatchesIdentifier(_peek())) {
_validateModifiersForTopLevelFunction(modifiers);
return _parseFunctionDeclaration(
- commentAndMetadata,
- modifiers.externalKeyword,
- returnType);
+ commentAndMetadata, modifiers.externalKeyword, returnType);
} else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
_reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken);
- return _convertToFunctionDeclaration(
- _parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType));
+ return _convertToFunctionDeclaration(_parseOperator(
+ commentAndMetadata, modifiers.externalKeyword, returnType));
} else if (_matches(TokenType.AT)) {
- return new TopLevelVariableDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- _parseVariableDeclarationListAfterType(
- null,
- _validateModifiersForTopLevelVariable(modifiers),
- returnType),
- _expect(TokenType.SEMICOLON));
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, _parseVariableDeclarationListAfterType(
+ null, _validateModifiersForTopLevelVariable(modifiers),
+ returnType), _expect(TokenType.SEMICOLON));
} else if (!_matchesIdentifier()) {
// TODO(brianwilkerson) Generalize this error. We could also be parsing a
// top-level variable at this point.
@@ -5689,29 +5228,25 @@
semicolon = _createSyntheticToken(TokenType.SEMICOLON);
}
List<VariableDeclaration> variables = new List<VariableDeclaration>();
- variables.add(
- new VariableDeclaration(null, null, _createSyntheticIdentifier(), null, null));
- return new TopLevelVariableDeclaration(
- commentAndMetadata.comment,
+ variables.add(new VariableDeclaration(
+ null, null, _createSyntheticIdentifier(), null, null));
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment,
commentAndMetadata.metadata,
new VariableDeclarationList(null, null, null, returnType, variables),
semicolon);
}
- if (_peek().matchesAny(
- [TokenType.OPEN_PAREN, TokenType.FUNCTION, TokenType.OPEN_CURLY_BRACKET])) {
+ if (_peek().matchesAny([
+ TokenType.OPEN_PAREN,
+ TokenType.FUNCTION,
+ TokenType.OPEN_CURLY_BRACKET
+ ])) {
_validateModifiersForTopLevelFunction(modifiers);
return _parseFunctionDeclaration(
- commentAndMetadata,
- modifiers.externalKeyword,
- returnType);
+ commentAndMetadata, modifiers.externalKeyword, returnType);
}
- return new TopLevelVariableDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- _parseVariableDeclarationListAfterType(
- null,
- _validateModifiersForTopLevelVariable(modifiers),
- returnType),
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, _parseVariableDeclarationListAfterType(
+ null, _validateModifiersForTopLevelVariable(modifiers), returnType),
_expect(TokenType.SEMICOLON));
}
@@ -5739,8 +5274,8 @@
return _parseInstanceCreationExpression(keyword);
}
- ConstructorDeclaration
- _parseConstructor(CommentAndMetadata commentAndMetadata, Token externalKeyword,
+ ConstructorDeclaration _parseConstructor(
+ CommentAndMetadata commentAndMetadata, Token externalKeyword,
Token constKeyword, Token factoryKeyword, SimpleIdentifier returnType,
Token period, SimpleIdentifier name, FormalParameterList parameters) {
bool bodyAllowed = externalKeyword == null;
@@ -5772,8 +5307,7 @@
} while (_optional(TokenType.COMMA));
if (factoryKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.FACTORY_WITH_INITIALIZERS,
- factoryKeyword);
+ ParserErrorCode.FACTORY_WITH_INITIALIZERS, factoryKeyword);
}
}
ConstructorName redirectedConstructor = null;
@@ -5788,8 +5322,8 @@
redirectedConstructor);
}
} else {
- body =
- _parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false);
+ body = _parseFunctionBody(
+ true, ParserErrorCode.MISSING_FUNCTION_BODY, false);
if (constKeyword != null &&
factoryKeyword != null &&
externalKeyword == null) {
@@ -5797,35 +5331,22 @@
} else if (body is EmptyFunctionBody) {
if (factoryKeyword != null && externalKeyword == null) {
_reportErrorForToken(
- ParserErrorCode.FACTORY_WITHOUT_BODY,
- factoryKeyword);
+ ParserErrorCode.FACTORY_WITHOUT_BODY, factoryKeyword);
}
} else {
if (constKeyword != null) {
_reportErrorForNode(
- ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY,
- body);
+ ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, body);
} else if (!bodyAllowed) {
_reportErrorForNode(
- ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY,
- body);
+ ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY, body);
}
}
}
- return new ConstructorDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- externalKeyword,
- constKeyword,
- factoryKeyword,
- returnType,
- period,
- name,
- parameters,
- separator,
- initializers,
- redirectedConstructor,
- body);
+ return new ConstructorDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, externalKeyword, constKeyword,
+ factoryKeyword, returnType, period, name, parameters, separator,
+ initializers, redirectedConstructor, body);
}
/**
@@ -5859,12 +5380,8 @@
} else {
_reportErrorForCurrentToken(
ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER);
- return new ConstructorFieldInitializer(
- keyword,
- period,
- fieldName,
- _createSyntheticToken(TokenType.EQ),
- _createSyntheticIdentifier());
+ return new ConstructorFieldInitializer(keyword, period, fieldName,
+ _createSyntheticToken(TokenType.EQ), _createSyntheticIdentifier());
}
bool wasInInitializer = _inInitializer;
_inInitializer = true;
@@ -5883,11 +5400,7 @@
expression = new CascadeExpression(expression, cascadeSections);
}
return new ConstructorFieldInitializer(
- keyword,
- period,
- fieldName,
- equals,
- expression);
+ keyword, period, fieldName, equals, expression);
} finally {
_inInitializer = wasInInitializer;
}
@@ -5907,8 +5420,7 @@
Token continueKeyword = _expectKeyword(Keyword.CONTINUE);
if (!_inLoop && !_inSwitch) {
_reportErrorForToken(
- ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP,
- continueKeyword);
+ ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP, continueKeyword);
}
SimpleIdentifier label = null;
if (_matchesIdentifier()) {
@@ -5916,8 +5428,7 @@
}
if (_inSwitch && !_inLoop && label == null) {
_reportErrorForToken(
- ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE,
- continueKeyword);
+ ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE, continueKeyword);
}
Token semicolon = _expect(TokenType.SEMICOLON);
return new ContinueStatement(continueKeyword, label, semicolon);
@@ -5976,9 +5487,9 @@
while (!_matches(TokenType.EOF)) {
CommentAndMetadata commentAndMetadata = _parseCommentAndMetadata();
if ((_matchesKeyword(Keyword.IMPORT) ||
- _matchesKeyword(Keyword.EXPORT) ||
- _matchesKeyword(Keyword.LIBRARY) ||
- _matchesKeyword(Keyword.PART)) &&
+ _matchesKeyword(Keyword.EXPORT) ||
+ _matchesKeyword(Keyword.LIBRARY) ||
+ _matchesKeyword(Keyword.PART)) &&
!_tokenMatches(_peek(), TokenType.PERIOD) &&
!_tokenMatches(_peek(), TokenType.LT) &&
!_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
@@ -5989,20 +5500,51 @@
while (!_matches(TokenType.EOF)) {
_advance();
}
- return new CompilationUnit(
- firstToken,
- scriptTag,
- directives,
- new List<CompilationUnitMember>(),
- _currentToken);
+ return new CompilationUnit(firstToken, scriptTag, directives,
+ new List<CompilationUnitMember>(), _currentToken);
}
}
- return new CompilationUnit(
- firstToken,
- scriptTag,
- directives,
- new List<CompilationUnitMember>(),
- _currentToken);
+ return new CompilationUnit(firstToken, scriptTag, directives,
+ new List<CompilationUnitMember>(), _currentToken);
+ }
+
+ /**
+ * Parse a documentation comment.
+ *
+ * <pre>
+ * documentationComment ::=
+ * multiLineComment?
+ * | singleLineComment*
+ * </pre>
+ *
+ * @return the documentation comment that was parsed, or `null` if there was no comment
+ */
+ Comment _parseDocumentationComment() {
+ List<DocumentationCommentToken> documentationTokens =
+ <DocumentationCommentToken>[];
+ CommentToken commentToken = _currentToken.precedingComments;
+ while (commentToken != null) {
+ if (commentToken is DocumentationCommentToken) {
+ if (documentationTokens.isNotEmpty) {
+ if (commentToken.type == TokenType.SINGLE_LINE_COMMENT) {
+ if (documentationTokens[0].type != TokenType.SINGLE_LINE_COMMENT) {
+ documentationTokens.clear();
+ }
+ } else {
+ documentationTokens.clear();
+ }
+ }
+ documentationTokens.add(commentToken);
+ }
+ commentToken = commentToken.next;
+ }
+ if (documentationTokens.isEmpty) {
+ return null;
+ }
+ List<CommentReference> references =
+ _parseCommentReferences(documentationTokens);
+ return Comment.createDocumentationCommentWithReferences(
+ documentationTokens, references);
}
/**
@@ -6026,61 +5568,14 @@
Expression condition = parseExpression2();
Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
Token semicolon = _expect(TokenType.SEMICOLON);
- return new DoStatement(
- doKeyword,
- body,
- whileKeyword,
- leftParenthesis,
- condition,
- rightParenthesis,
- semicolon);
+ return new DoStatement(doKeyword, body, whileKeyword, leftParenthesis,
+ condition, rightParenthesis, semicolon);
} finally {
_inLoop = wasInLoop;
}
}
/**
- * Parse a documentation comment.
- *
- * <pre>
- * documentationComment ::=
- * multiLineComment?
- * | singleLineComment*
- * </pre>
- *
- * @return the documentation comment that was parsed, or `null` if there was no comment
- */
- Comment _parseDocumentationComment() {
- List<DocumentationCommentToken> documentationTokens =
- <DocumentationCommentToken>[
- ];
- CommentToken commentToken = _currentToken.precedingComments;
- while (commentToken != null) {
- if (commentToken is DocumentationCommentToken) {
- if (documentationTokens.isNotEmpty) {
- if (commentToken.type == TokenType.SINGLE_LINE_COMMENT) {
- if (documentationTokens[0].type != TokenType.SINGLE_LINE_COMMENT) {
- documentationTokens.clear();
- }
- } else {
- documentationTokens.clear();
- }
- }
- documentationTokens.add(commentToken);
- }
- commentToken = commentToken.next;
- }
- if (documentationTokens.isEmpty) {
- return null;
- }
- List<CommentReference> references =
- _parseCommentReferences(documentationTokens);
- return Comment.createDocumentationCommentWithReferences(
- documentationTokens,
- references);
- }
-
- /**
* Parse an empty statement.
*
* <pre>
@@ -6101,14 +5596,11 @@
name = _createSyntheticIdentifier();
}
if (commentAndMetadata.metadata.isNotEmpty) {
- _reportErrorForNode(
- ParserErrorCode.ANNOTATION_ON_ENUM_CONSTANT,
+ _reportErrorForNode(ParserErrorCode.ANNOTATION_ON_ENUM_CONSTANT,
commentAndMetadata.metadata[0]);
}
return new EnumConstantDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- name);
+ commentAndMetadata.comment, commentAndMetadata.metadata, name);
}
/**
@@ -6153,13 +5645,8 @@
rightBracket = _createSyntheticToken(TokenType.CLOSE_CURLY_BRACKET);
_reportErrorForCurrentToken(ParserErrorCode.MISSING_ENUM_BODY);
}
- return new EnumDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- keyword,
- name,
- leftBracket,
- constants,
+ return new EnumDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, keyword, name, leftBracket, constants,
rightBracket);
}
@@ -6187,11 +5674,10 @@
Token operator = getAndAdvance();
if (leftEqualityExpression) {
_reportErrorForNode(
- ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND,
- expression);
+ ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, expression);
}
- expression =
- new BinaryExpression(expression, operator, _parseRelationalExpression());
+ expression = new BinaryExpression(
+ expression, operator, _parseRelationalExpression());
leftEqualityExpression = true;
}
return expression;
@@ -6213,12 +5699,8 @@
StringLiteral libraryUri = _parseUri();
List<Combinator> combinators = _parseCombinators();
Token semicolon = _expectSemicolon();
- return new ExportDirective(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- exportKeyword,
- libraryUri,
- combinators,
+ return new ExportDirective(commentAndMetadata.comment,
+ commentAndMetadata.metadata, exportKeyword, libraryUri, combinators,
semicolon);
}
@@ -6277,6 +5759,55 @@
}
/**
+ * Parse a formal parameter. At most one of `isOptional` and `isNamed` can be
+ * `true`.
+ *
+ * <pre>
+ * defaultFormalParameter ::=
+ * normalFormalParameter ('=' expression)?
+ *
+ * defaultNamedParameter ::=
+ * normalFormalParameter (':' expression)?
+ * </pre>
+ *
+ * @param kind the kind of parameter being expected based on the presence or absence of group
+ * delimiters
+ * @return the formal parameter that was parsed
+ */
+ FormalParameter _parseFormalParameter(ParameterKind kind) {
+ NormalFormalParameter parameter = parseNormalFormalParameter();
+ if (_matches(TokenType.EQ)) {
+ Token seperator = getAndAdvance();
+ Expression defaultValue = parseExpression2();
+ if (kind == ParameterKind.NAMED) {
+ _reportErrorForToken(
+ ParserErrorCode.WRONG_SEPARATOR_FOR_NAMED_PARAMETER, seperator);
+ } else if (kind == ParameterKind.REQUIRED) {
+ _reportErrorForNode(
+ ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP, parameter);
+ }
+ return new DefaultFormalParameter(
+ parameter, kind, seperator, defaultValue);
+ } else if (_matches(TokenType.COLON)) {
+ Token seperator = getAndAdvance();
+ Expression defaultValue = parseExpression2();
+ if (kind == ParameterKind.POSITIONAL) {
+ _reportErrorForToken(
+ ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER,
+ seperator);
+ } else if (kind == ParameterKind.REQUIRED) {
+ _reportErrorForNode(
+ ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP, parameter);
+ }
+ return new DefaultFormalParameter(
+ parameter, kind, seperator, defaultValue);
+ } else if (kind != ParameterKind.REQUIRED) {
+ return new DefaultFormalParameter(parameter, kind, null, null);
+ }
+ return parameter;
+ }
+
+ /**
* Parse a for statement.
*
* <pre>
@@ -6316,12 +5847,8 @@
SimpleIdentifier variableName = parseSimpleIdentifier();
variables.add(
new VariableDeclaration(null, null, variableName, null, null));
- variableList = new VariableDeclarationList(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- null,
- null,
- variables);
+ variableList = new VariableDeclarationList(commentAndMetadata.comment,
+ commentAndMetadata.metadata, null, null, variables);
} else if (_isInitializedVariableDeclaration()) {
variableList =
_parseVariableDeclarationListAfterMetadata(commentAndMetadata);
@@ -6342,8 +5869,9 @@
NodeList<VariableDeclaration> variables = variableList.variables;
if (variables.length > 1) {
_reportErrorForCurrentToken(
- ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH,
- [variables.length.toString()]);
+ ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH, [
+ variables.length.toString()
+ ]);
}
VariableDeclaration variable = variables[0];
if (variable.initializer != null) {
@@ -6353,12 +5881,8 @@
Token keyword = variableList.keyword;
TypeName type = variableList.type;
if (keyword != null || type != null) {
- loopVariable = new DeclaredIdentifier(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- keyword,
- type,
- variable.name);
+ loopVariable = new DeclaredIdentifier(commentAndMetadata.comment,
+ commentAndMetadata.metadata, keyword, type, variable.name);
} else {
if (!commentAndMetadata.metadata.isEmpty) {
// TODO(jwren) metadata isn't allowed before the identifier in
@@ -6373,31 +5897,18 @@
Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
Statement body = parseStatement2();
if (loopVariable == null) {
- return new ForEachStatement.con2(
- awaitKeyword,
- forKeyword,
- leftParenthesis,
- identifier,
- inKeyword,
- iterator,
- rightParenthesis,
- body);
+ return new ForEachStatement.con2(awaitKeyword, forKeyword,
+ leftParenthesis, identifier, inKeyword, iterator,
+ rightParenthesis, body);
}
- return new ForEachStatement.con1(
- awaitKeyword,
- forKeyword,
- leftParenthesis,
- loopVariable,
- inKeyword,
- iterator,
- rightParenthesis,
- body);
+ return new ForEachStatement.con1(awaitKeyword, forKeyword,
+ leftParenthesis, loopVariable, inKeyword, iterator,
+ rightParenthesis, body);
}
}
if (awaitKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.INVALID_AWAIT_IN_FOR,
- awaitKeyword);
+ ParserErrorCode.INVALID_AWAIT_IN_FOR, awaitKeyword);
}
Token leftSeparator = _expect(TokenType.SEMICOLON);
Expression condition = null;
@@ -6411,81 +5922,15 @@
}
Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
Statement body = parseStatement2();
- return new ForStatement(
- forKeyword,
- leftParenthesis,
- variableList,
- initialization,
- leftSeparator,
- condition,
- rightSeparator,
- updaters,
- rightParenthesis,
- body);
+ return new ForStatement(forKeyword, leftParenthesis, variableList,
+ initialization, leftSeparator, condition, rightSeparator, updaters,
+ rightParenthesis, body);
} finally {
_inLoop = wasInLoop;
}
}
/**
- * Parse a formal parameter. At most one of `isOptional` and `isNamed` can be
- * `true`.
- *
- * <pre>
- * defaultFormalParameter ::=
- * normalFormalParameter ('=' expression)?
- *
- * defaultNamedParameter ::=
- * normalFormalParameter (':' expression)?
- * </pre>
- *
- * @param kind the kind of parameter being expected based on the presence or absence of group
- * delimiters
- * @return the formal parameter that was parsed
- */
- FormalParameter _parseFormalParameter(ParameterKind kind) {
- NormalFormalParameter parameter = parseNormalFormalParameter();
- if (_matches(TokenType.EQ)) {
- Token seperator = getAndAdvance();
- Expression defaultValue = parseExpression2();
- if (kind == ParameterKind.NAMED) {
- _reportErrorForToken(
- ParserErrorCode.WRONG_SEPARATOR_FOR_NAMED_PARAMETER,
- seperator);
- } else if (kind == ParameterKind.REQUIRED) {
- _reportErrorForNode(
- ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP,
- parameter);
- }
- return new DefaultFormalParameter(
- parameter,
- kind,
- seperator,
- defaultValue);
- } else if (_matches(TokenType.COLON)) {
- Token seperator = getAndAdvance();
- Expression defaultValue = parseExpression2();
- if (kind == ParameterKind.POSITIONAL) {
- _reportErrorForToken(
- ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER,
- seperator);
- } else if (kind == ParameterKind.REQUIRED) {
- _reportErrorForNode(
- ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP,
- parameter);
- }
- return new DefaultFormalParameter(
- parameter,
- kind,
- seperator,
- defaultValue);
- } else if (kind != ParameterKind.REQUIRED) {
- return new DefaultFormalParameter(parameter, kind, null, null);
- }
- return parameter;
- }
-
- /**
* Parse a function body.
*
* <pre>
@@ -6504,8 +5949,8 @@
* and therefore does not have a terminating semicolon
* @return the function body that was parsed
*/
- FunctionBody _parseFunctionBody(bool mayBeEmpty,
- ParserErrorCode emptyErrorCode, bool inExpression) {
+ FunctionBody _parseFunctionBody(
+ bool mayBeEmpty, ParserErrorCode emptyErrorCode, bool inExpression) {
bool wasInAsync = _inAsync;
bool wasInGenerator = _inGenerator;
bool wasInLoop = _inLoop;
@@ -6527,9 +5972,7 @@
stringLiteral = parseStringLiteral();
}
return new NativeFunctionBody(
- nativeToken,
- stringLiteral,
- _expect(TokenType.SEMICOLON));
+ nativeToken, stringLiteral, _expect(TokenType.SEMICOLON));
}
Token keyword = null;
Token star = null;
@@ -6554,15 +5997,13 @@
keyword = null;
} else if (star != null) {
_reportErrorForToken(
- ParserErrorCode.INVALID_STAR_AFTER_ASYNC,
- star);
+ ParserErrorCode.INVALID_STAR_AFTER_ASYNC, star);
}
}
Token functionDefinition = getAndAdvance();
if (_matchesKeyword(Keyword.RETURN)) {
_reportErrorForToken(
- ParserErrorCode.UNEXPECTED_TOKEN,
- getAndAdvance());
+ ParserErrorCode.UNEXPECTED_TOKEN, getAndAdvance());
}
Expression expression = parseExpression2();
Token semicolon = null;
@@ -6574,16 +6015,12 @@
_createSyntheticToken(TokenType.SEMICOLON));
}
return new ExpressionFunctionBody(
- keyword,
- functionDefinition,
- expression,
- semicolon);
+ keyword, functionDefinition, expression, semicolon);
} else if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
if (keyword != null) {
if (_tokenMatchesString(keyword, SYNC) && star == null) {
_reportErrorForToken(
- ParserErrorCode.MISSING_STAR_AFTER_SYNC,
- keyword);
+ ParserErrorCode.MISSING_STAR_AFTER_SYNC, keyword);
}
}
if (!_parseFunctionBodies) {
@@ -6622,9 +6059,9 @@
* @param isStatement `true` if the function declaration is being parsed as a statement
* @return the function declaration that was parsed
*/
- FunctionDeclaration
- _parseFunctionDeclaration(CommentAndMetadata commentAndMetadata,
- Token externalKeyword, TypeName returnType) {
+ FunctionDeclaration _parseFunctionDeclaration(
+ CommentAndMetadata commentAndMetadata, Token externalKeyword,
+ TypeName returnType) {
Token keyword = null;
bool isGetter = false;
if (_matchesKeyword(Keyword.GET) &&
@@ -6651,8 +6088,8 @@
}
FunctionBody body;
if (externalKeyword == null) {
- body =
- _parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, false);
+ body = _parseFunctionBody(
+ false, ParserErrorCode.MISSING_FUNCTION_BODY, false);
} else {
body = new EmptyFunctionBody(_expect(TokenType.SEMICOLON));
}
@@ -6661,13 +6098,8 @@
// reportError(ParserErrorCode.UNEXPECTED_TOKEN, currentToken.getLexeme());
// advance();
// }
- return new FunctionDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- externalKeyword,
- returnType,
- keyword,
- name,
+ return new FunctionDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, externalKeyword, returnType, keyword, name,
new FunctionExpression(parameters, body));
}
@@ -6685,8 +6117,7 @@
Modifiers modifiers = _parseModifiers();
_validateModifiersForFunctionDeclarationStatement(modifiers);
return _parseFunctionDeclarationStatementAfterReturnType(
- _parseCommentAndMetadata(),
- _parseOptionalReturnType());
+ _parseCommentAndMetadata(), _parseOptionalReturnType());
}
/**
@@ -6702,21 +6133,18 @@
* @param returnType the return type, or `null` if there is no return type
* @return the function declaration statement that was parsed
*/
- Statement
- _parseFunctionDeclarationStatementAfterReturnType(CommentAndMetadata commentAndMetadata,
- TypeName returnType) {
+ Statement _parseFunctionDeclarationStatementAfterReturnType(
+ CommentAndMetadata commentAndMetadata, TypeName returnType) {
FunctionDeclaration declaration =
_parseFunctionDeclaration(commentAndMetadata, null, returnType);
Token propertyKeyword = declaration.propertyKeyword;
if (propertyKeyword != null) {
if ((propertyKeyword as KeywordToken).keyword == Keyword.GET) {
_reportErrorForToken(
- ParserErrorCode.GETTER_IN_FUNCTION,
- propertyKeyword);
+ ParserErrorCode.GETTER_IN_FUNCTION, propertyKeyword);
} else {
_reportErrorForToken(
- ParserErrorCode.SETTER_IN_FUNCTION,
- propertyKeyword);
+ ParserErrorCode.SETTER_IN_FUNCTION, propertyKeyword);
}
}
return new FunctionDeclarationStatement(declaration);
@@ -6737,8 +6165,8 @@
* @param keyword the token representing the 'typedef' keyword
* @return the function type alias that was parsed
*/
- FunctionTypeAlias
- _parseFunctionTypeAlias(CommentAndMetadata commentAndMetadata, Token keyword) {
+ FunctionTypeAlias _parseFunctionTypeAlias(
+ CommentAndMetadata commentAndMetadata, Token keyword) {
TypeName returnType = null;
if (hasReturnTypeInTypeAlias) {
returnType = parseReturnType();
@@ -6751,54 +6179,31 @@
if (_matches(TokenType.SEMICOLON) || _matches(TokenType.EOF)) {
_reportErrorForCurrentToken(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS);
FormalParameterList parameters = new FormalParameterList(
- _createSyntheticToken(TokenType.OPEN_PAREN),
- null,
- null,
- null,
+ _createSyntheticToken(TokenType.OPEN_PAREN), null, null, null,
_createSyntheticToken(TokenType.CLOSE_PAREN));
Token semicolon = _expect(TokenType.SEMICOLON);
- return new FunctionTypeAlias(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- keyword,
- returnType,
- name,
- typeParameters,
- parameters,
- semicolon);
+ return new FunctionTypeAlias(commentAndMetadata.comment,
+ commentAndMetadata.metadata, keyword, returnType, name,
+ typeParameters, parameters, semicolon);
} else if (!_matches(TokenType.OPEN_PAREN)) {
_reportErrorForCurrentToken(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS);
// TODO(brianwilkerson) Recover from this error. At the very least we
// should skip to the start of the next valid compilation unit member,
// allowing for the possibility of finding the typedef parameters before
// that point.
- return new FunctionTypeAlias(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- keyword,
- returnType,
- name,
- typeParameters,
- new FormalParameterList(
- _createSyntheticToken(TokenType.OPEN_PAREN),
- null,
- null,
- null,
+ return new FunctionTypeAlias(commentAndMetadata.comment,
+ commentAndMetadata.metadata, keyword, returnType, name,
+ typeParameters, new FormalParameterList(
+ _createSyntheticToken(TokenType.OPEN_PAREN), null, null, null,
_createSyntheticToken(TokenType.CLOSE_PAREN)),
_createSyntheticToken(TokenType.SEMICOLON));
}
FormalParameterList parameters = parseFormalParameterList();
_validateFormalParameterList(parameters);
Token semicolon = _expect(TokenType.SEMICOLON);
- return new FunctionTypeAlias(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- keyword,
- returnType,
- name,
- typeParameters,
- parameters,
- semicolon);
+ return new FunctionTypeAlias(commentAndMetadata.comment,
+ commentAndMetadata.metadata, keyword, returnType, name, typeParameters,
+ parameters, semicolon);
}
/**
@@ -6832,22 +6237,13 @@
}
FunctionBody body = _parseFunctionBody(
externalKeyword != null || staticKeyword == null,
- ParserErrorCode.STATIC_GETTER_WITHOUT_BODY,
- false);
+ ParserErrorCode.STATIC_GETTER_WITHOUT_BODY, false);
if (externalKeyword != null && body is! EmptyFunctionBody) {
_reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_GETTER_WITH_BODY);
}
- return new MethodDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- externalKeyword,
- staticKeyword,
- returnType,
- propertyKeyword,
- null,
- name,
- null,
- body);
+ return new MethodDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType,
+ propertyKeyword, null, name, null, body);
}
/**
@@ -6892,14 +6288,8 @@
elseKeyword = getAndAdvance();
elseStatement = parseStatement2();
}
- return new IfStatement(
- ifKeyword,
- leftParenthesis,
- condition,
- rightParenthesis,
- thenStatement,
- elseKeyword,
- elseStatement);
+ return new IfStatement(ifKeyword, leftParenthesis, condition,
+ rightParenthesis, thenStatement, elseKeyword, elseStatement);
}
/**
@@ -6931,16 +6321,9 @@
}
List<Combinator> combinators = _parseCombinators();
Token semicolon = _expectSemicolon();
- return new ImportDirective(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- importKeyword,
- libraryUri,
- deferredToken,
- asToken,
- prefix,
- combinators,
- semicolon);
+ return new ImportDirective(commentAndMetadata.comment,
+ commentAndMetadata.metadata, importKeyword, libraryUri, deferredToken,
+ asToken, prefix, combinators, semicolon);
}
/**
@@ -6966,16 +6349,13 @@
* @param type the type that has already been parsed, or `null` if 'var' was provided
* @return the getter that was parsed
*/
- FieldDeclaration
- _parseInitializedIdentifierList(CommentAndMetadata commentAndMetadata,
- Token staticKeyword, Token keyword, TypeName type) {
+ FieldDeclaration _parseInitializedIdentifierList(
+ CommentAndMetadata commentAndMetadata, Token staticKeyword, Token keyword,
+ TypeName type) {
VariableDeclarationList fieldList =
_parseVariableDeclarationListAfterType(null, keyword, type);
- return new FieldDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- staticKeyword,
- fieldList,
+ return new FieldDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, staticKeyword, fieldList,
_expect(TokenType.SEMICOLON));
}
@@ -6994,9 +6374,7 @@
ConstructorName constructorName = parseConstructorName();
ArgumentList argumentList = parseArgumentList();
return new InstanceCreationExpression(
- keyword,
- constructorName,
- argumentList);
+ keyword, constructorName, argumentList);
}
/**
@@ -7010,18 +6388,14 @@
* @param commentAndMetadata the metadata to be associated with the directive
* @return the library directive that was parsed
*/
- LibraryDirective
- _parseLibraryDirective(CommentAndMetadata commentAndMetadata) {
+ LibraryDirective _parseLibraryDirective(
+ CommentAndMetadata commentAndMetadata) {
Token keyword = _expectKeyword(Keyword.LIBRARY);
- LibraryIdentifier libraryName =
- _parseLibraryName(ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE, keyword);
+ LibraryIdentifier libraryName = _parseLibraryName(
+ ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE, keyword);
Token semicolon = _expect(TokenType.SEMICOLON);
- return new LibraryDirective(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- keyword,
- libraryName,
- semicolon);
+ return new LibraryDirective(commentAndMetadata.comment,
+ commentAndMetadata.metadata, keyword, libraryName, semicolon);
}
/**
@@ -7037,8 +6411,8 @@
* missing
* @return the library name that was parsed
*/
- LibraryIdentifier _parseLibraryName(ParserErrorCode missingNameError,
- Token missingNameToken) {
+ LibraryIdentifier _parseLibraryName(
+ ParserErrorCode missingNameError, Token missingNameToken) {
if (_matchesIdentifier()) {
return parseLibraryIdentifier();
} else if (_matches(TokenType.STRING)) {
@@ -7069,12 +6443,12 @@
* are no type arguments
* @return the list literal that was parsed
*/
- ListLiteral _parseListLiteral(Token modifier,
- TypeArgumentList typeArguments) {
+ ListLiteral _parseListLiteral(
+ Token modifier, TypeArgumentList typeArguments) {
// may be empty list literal
if (_matches(TokenType.INDEX)) {
- BeginToken leftBracket =
- _createToken(_currentToken, TokenType.OPEN_SQUARE_BRACKET, isBegin: true);
+ BeginToken leftBracket = _createToken(
+ _currentToken, TokenType.OPEN_SQUARE_BRACKET, isBegin: true);
Token rightBracket =
new Token(TokenType.CLOSE_SQUARE_BRACKET, _currentToken.offset + 1);
leftBracket.endToken = rightBracket;
@@ -7083,21 +6457,13 @@
_currentToken.previous.setNext(leftBracket);
_currentToken = _currentToken.next;
return new ListLiteral(
- modifier,
- typeArguments,
- leftBracket,
- null,
- rightBracket);
+ modifier, typeArguments, leftBracket, null, rightBracket);
}
// open
Token leftBracket = _expect(TokenType.OPEN_SQUARE_BRACKET);
if (_matches(TokenType.CLOSE_SQUARE_BRACKET)) {
return new ListLiteral(
- modifier,
- typeArguments,
- leftBracket,
- null,
- getAndAdvance());
+ modifier, typeArguments, leftBracket, null, getAndAdvance());
}
bool wasInInitializer = _inInitializer;
_inInitializer = false;
@@ -7107,21 +6473,13 @@
while (_optional(TokenType.COMMA)) {
if (_matches(TokenType.CLOSE_SQUARE_BRACKET)) {
return new ListLiteral(
- modifier,
- typeArguments,
- leftBracket,
- elements,
- getAndAdvance());
+ modifier, typeArguments, leftBracket, elements, getAndAdvance());
}
elements.add(parseExpression2());
}
Token rightBracket = _expect(TokenType.CLOSE_SQUARE_BRACKET);
return new ListLiteral(
- modifier,
- typeArguments,
- leftBracket,
- elements,
- rightBracket);
+ modifier, typeArguments, leftBracket, elements, rightBracket);
} finally {
_inInitializer = wasInInitializer;
}
@@ -7152,11 +6510,8 @@
return _parseListLiteral(modifier, typeArguments);
}
_reportErrorForCurrentToken(ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL);
- return new ListLiteral(
- modifier,
- typeArguments,
- _createSyntheticToken(TokenType.OPEN_SQUARE_BRACKET),
- null,
+ return new ListLiteral(modifier, typeArguments,
+ _createSyntheticToken(TokenType.OPEN_SQUARE_BRACKET), null,
_createSyntheticToken(TokenType.CLOSE_SQUARE_BRACKET));
}
@@ -7174,8 +6529,8 @@
Expression expression = _parseEqualityExpression();
while (_matches(TokenType.AMPERSAND_AMPERSAND)) {
Token operator = getAndAdvance();
- expression =
- new BinaryExpression(expression, operator, _parseEqualityExpression());
+ expression = new BinaryExpression(
+ expression, operator, _parseEqualityExpression());
}
return expression;
}
@@ -7199,11 +6554,7 @@
List<MapLiteralEntry> entries = new List<MapLiteralEntry>();
if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
return new MapLiteral(
- modifier,
- typeArguments,
- leftBracket,
- entries,
- getAndAdvance());
+ modifier, typeArguments, leftBracket, entries, getAndAdvance());
}
bool wasInInitializer = _inInitializer;
_inInitializer = false;
@@ -7212,21 +6563,13 @@
while (_optional(TokenType.COMMA)) {
if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
return new MapLiteral(
- modifier,
- typeArguments,
- leftBracket,
- entries,
- getAndAdvance());
+ modifier, typeArguments, leftBracket, entries, getAndAdvance());
}
entries.add(parseMapLiteralEntry());
}
Token rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET);
return new MapLiteral(
- modifier,
- typeArguments,
- leftBracket,
- entries,
- rightBracket);
+ modifier, typeArguments, leftBracket, entries, rightBracket);
} finally {
_inInitializer = wasInInitializer;
}
@@ -7250,14 +6593,13 @@
* @param parameters the parameters to the method
* @return the method declaration that was parsed
*/
- MethodDeclaration
- _parseMethodDeclarationAfterParameters(CommentAndMetadata commentAndMetadata,
- Token externalKeyword, Token staticKeyword, TypeName returnType,
- SimpleIdentifier name, FormalParameterList parameters) {
+ MethodDeclaration _parseMethodDeclarationAfterParameters(
+ CommentAndMetadata commentAndMetadata, Token externalKeyword,
+ Token staticKeyword, TypeName returnType, SimpleIdentifier name,
+ FormalParameterList parameters) {
FunctionBody body = _parseFunctionBody(
externalKeyword != null || staticKeyword == null,
- ParserErrorCode.MISSING_FUNCTION_BODY,
- false);
+ ParserErrorCode.MISSING_FUNCTION_BODY, false);
if (externalKeyword != null) {
if (body is! EmptyFunctionBody) {
_reportErrorForNode(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, body);
@@ -7267,17 +6609,9 @@
_reportErrorForNode(ParserErrorCode.ABSTRACT_STATIC_METHOD, body);
}
}
- return new MethodDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- externalKeyword,
- staticKeyword,
- returnType,
- null,
- null,
- name,
- parameters,
- body);
+ return new MethodDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType,
+ null, null, name, parameters, body);
}
/**
@@ -7296,33 +6630,25 @@
* @param returnType the return type of the method
* @return the method declaration that was parsed
*/
- MethodDeclaration
- _parseMethodDeclarationAfterReturnType(CommentAndMetadata commentAndMetadata,
- Token externalKeyword, Token staticKeyword, TypeName returnType) {
+ MethodDeclaration _parseMethodDeclarationAfterReturnType(
+ CommentAndMetadata commentAndMetadata, Token externalKeyword,
+ Token staticKeyword, TypeName returnType) {
SimpleIdentifier methodName = parseSimpleIdentifier();
FormalParameterList parameters;
if (!_matches(TokenType.OPEN_PAREN) &&
- (_matches(TokenType.OPEN_CURLY_BRACKET) || _matches(TokenType.FUNCTION))) {
+ (_matches(TokenType.OPEN_CURLY_BRACKET) ||
+ _matches(TokenType.FUNCTION))) {
_reportErrorForToken(
- ParserErrorCode.MISSING_METHOD_PARAMETERS,
- _currentToken.previous);
+ ParserErrorCode.MISSING_METHOD_PARAMETERS, _currentToken.previous);
parameters = new FormalParameterList(
- _createSyntheticToken(TokenType.OPEN_PAREN),
- null,
- null,
- null,
+ _createSyntheticToken(TokenType.OPEN_PAREN), null, null, null,
_createSyntheticToken(TokenType.CLOSE_PAREN));
} else {
parameters = parseFormalParameterList();
}
_validateFormalParameterList(parameters);
- return _parseMethodDeclarationAfterParameters(
- commentAndMetadata,
- externalKeyword,
- staticKeyword,
- returnType,
- methodName,
- parameters);
+ return _parseMethodDeclarationAfterParameters(commentAndMetadata,
+ externalKeyword, staticKeyword, returnType, methodName, parameters);
}
/**
@@ -7350,8 +6676,7 @@
if (_matchesKeyword(Keyword.ABSTRACT)) {
if (modifiers.abstractKeyword != null) {
_reportErrorForCurrentToken(
- ParserErrorCode.DUPLICATED_MODIFIER,
- [_currentToken.lexeme]);
+ ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
_advance();
} else {
modifiers.abstractKeyword = getAndAdvance();
@@ -7359,8 +6684,7 @@
} else if (_matchesKeyword(Keyword.CONST)) {
if (modifiers.constKeyword != null) {
_reportErrorForCurrentToken(
- ParserErrorCode.DUPLICATED_MODIFIER,
- [_currentToken.lexeme]);
+ ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
_advance();
} else {
modifiers.constKeyword = getAndAdvance();
@@ -7370,8 +6694,7 @@
!_tokenMatches(_peek(), TokenType.LT)) {
if (modifiers.externalKeyword != null) {
_reportErrorForCurrentToken(
- ParserErrorCode.DUPLICATED_MODIFIER,
- [_currentToken.lexeme]);
+ ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
_advance();
} else {
modifiers.externalKeyword = getAndAdvance();
@@ -7381,8 +6704,7 @@
!_tokenMatches(_peek(), TokenType.LT)) {
if (modifiers.factoryKeyword != null) {
_reportErrorForCurrentToken(
- ParserErrorCode.DUPLICATED_MODIFIER,
- [_currentToken.lexeme]);
+ ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
_advance();
} else {
modifiers.factoryKeyword = getAndAdvance();
@@ -7390,8 +6712,7 @@
} else if (_matchesKeyword(Keyword.FINAL)) {
if (modifiers.finalKeyword != null) {
_reportErrorForCurrentToken(
- ParserErrorCode.DUPLICATED_MODIFIER,
- [_currentToken.lexeme]);
+ ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
_advance();
} else {
modifiers.finalKeyword = getAndAdvance();
@@ -7401,8 +6722,7 @@
!_tokenMatches(_peek(), TokenType.LT)) {
if (modifiers.staticKeyword != null) {
_reportErrorForCurrentToken(
- ParserErrorCode.DUPLICATED_MODIFIER,
- [_currentToken.lexeme]);
+ ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
_advance();
} else {
modifiers.staticKeyword = getAndAdvance();
@@ -7410,8 +6730,7 @@
} else if (_matchesKeyword(Keyword.VAR)) {
if (modifiers.varKeyword != null) {
_reportErrorForCurrentToken(
- ParserErrorCode.DUPLICATED_MODIFIER,
- [_currentToken.lexeme]);
+ ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
_advance();
} else {
modifiers.varKeyword = getAndAdvance();
@@ -7510,8 +6829,7 @@
Token afterString = _skipStringLiteral(_currentToken.next);
if (afterString != null && afterString.type == TokenType.COLON) {
return new ExpressionStatement(
- parseExpression2(),
- _expect(TokenType.SEMICOLON));
+ parseExpression2(), _expect(TokenType.SEMICOLON));
}
}
return parseBlock();
@@ -7534,16 +6852,14 @@
return _parseIfStatement();
} else if (keyword == Keyword.RETHROW) {
return new ExpressionStatement(
- _parseRethrowExpression(),
- _expect(TokenType.SEMICOLON));
+ _parseRethrowExpression(), _expect(TokenType.SEMICOLON));
} else if (keyword == Keyword.RETURN) {
return _parseReturnStatement();
} else if (keyword == Keyword.SWITCH) {
return _parseSwitchStatement();
} else if (keyword == Keyword.THROW) {
return new ExpressionStatement(
- _parseThrowExpression(),
- _expect(TokenType.SEMICOLON));
+ _parseThrowExpression(), _expect(TokenType.SEMICOLON));
} else if (keyword == Keyword.TRY) {
return _parseTryStatement();
} else if (keyword == Keyword.WHILE) {
@@ -7554,11 +6870,13 @@
} else if (keyword == Keyword.VOID) {
TypeName returnType = parseReturnType();
if (_matchesIdentifier() &&
- _peek().matchesAny(
- [TokenType.OPEN_PAREN, TokenType.OPEN_CURLY_BRACKET, TokenType.FUNCTION])) {
+ _peek().matchesAny([
+ TokenType.OPEN_PAREN,
+ TokenType.OPEN_CURLY_BRACKET,
+ TokenType.FUNCTION
+ ])) {
return _parseFunctionDeclarationStatementAfterReturnType(
- commentAndMetadata,
- returnType);
+ commentAndMetadata, returnType);
} else {
//
// We have found an error of some kind. Try to recover.
@@ -7579,24 +6897,21 @@
// block. Parse it as a variable declaration.
//
return _parseVariableDeclarationStatementAfterType(
- commentAndMetadata,
- null,
- returnType);
+ commentAndMetadata, null, returnType);
}
_reportErrorForCurrentToken(ParserErrorCode.MISSING_STATEMENT);
// TODO(brianwilkerson) Recover from this error.
return new EmptyStatement(_createSyntheticToken(TokenType.SEMICOLON));
}
} else if (keyword == Keyword.CONST) {
- if (_peek().matchesAny(
- [
- TokenType.LT,
- TokenType.OPEN_CURLY_BRACKET,
- TokenType.OPEN_SQUARE_BRACKET,
- TokenType.INDEX])) {
+ if (_peek().matchesAny([
+ TokenType.LT,
+ TokenType.OPEN_CURLY_BRACKET,
+ TokenType.OPEN_SQUARE_BRACKET,
+ TokenType.INDEX
+ ])) {
return new ExpressionStatement(
- parseExpression2(),
- _expect(TokenType.SEMICOLON));
+ parseExpression2(), _expect(TokenType.SEMICOLON));
} else if (_tokenMatches(_peek(), TokenType.IDENTIFIER)) {
Token afterType = _skipTypeName(_peek());
if (afterType != null) {
@@ -7605,8 +6920,7 @@
_tokenMatches(afterType.next, TokenType.IDENTIFIER) &&
_tokenMatches(afterType.next.next, TokenType.OPEN_PAREN))) {
return new ExpressionStatement(
- parseExpression2(),
- _expect(TokenType.SEMICOLON));
+ parseExpression2(), _expect(TokenType.SEMICOLON));
}
}
}
@@ -7619,8 +6933,7 @@
keyword == Keyword.SUPER ||
keyword == Keyword.THIS) {
return new ExpressionStatement(
- parseExpression2(),
- _expect(TokenType.SEMICOLON));
+ parseExpression2(), _expect(TokenType.SEMICOLON));
} else {
//
// We have found an error of some kind. Try to recover.
@@ -7635,16 +6948,14 @@
return _parseForStatement();
}
return new ExpressionStatement(
- parseExpression2(),
- _expect(TokenType.SEMICOLON));
+ parseExpression2(), _expect(TokenType.SEMICOLON));
} else if (_matchesString(_AWAIT) &&
_tokenMatchesKeyword(_peek(), Keyword.FOR)) {
Token awaitToken = _currentToken;
Statement statement = _parseForStatement();
if (statement is! ForStatement) {
_reportErrorForToken(
- CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT,
- awaitToken);
+ CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT, awaitToken);
}
return statement;
} else if (_matches(TokenType.SEMICOLON)) {
@@ -7659,8 +6970,7 @@
return new EmptyStatement(_createSyntheticToken(TokenType.SEMICOLON));
} else {
return new ExpressionStatement(
- parseExpression2(),
- _expect(TokenType.SEMICOLON));
+ parseExpression2(), _expect(TokenType.SEMICOLON));
}
}
@@ -7689,24 +6999,22 @@
operatorKeyword = getAndAdvance();
} else {
_reportErrorForToken(
- ParserErrorCode.MISSING_KEYWORD_OPERATOR,
- _currentToken);
+ ParserErrorCode.MISSING_KEYWORD_OPERATOR, _currentToken);
operatorKeyword = _createSyntheticKeyword(Keyword.OPERATOR);
}
if (!_currentToken.isUserDefinableOperator) {
_reportErrorForCurrentToken(
- ParserErrorCode.NON_USER_DEFINABLE_OPERATOR,
- [_currentToken.lexeme]);
+ ParserErrorCode.NON_USER_DEFINABLE_OPERATOR, [_currentToken.lexeme]);
}
SimpleIdentifier name = new SimpleIdentifier(getAndAdvance());
if (_matches(TokenType.EQ)) {
Token previous = _currentToken.previous;
if ((_tokenMatches(previous, TokenType.EQ_EQ) ||
- _tokenMatches(previous, TokenType.BANG_EQ)) &&
+ _tokenMatches(previous, TokenType.BANG_EQ)) &&
_currentToken.offset == previous.offset + 2) {
- _reportErrorForCurrentToken(
- ParserErrorCode.INVALID_OPERATOR,
- ["${previous.lexeme}${_currentToken.lexeme}"]);
+ _reportErrorForCurrentToken(ParserErrorCode.INVALID_OPERATOR, [
+ "${previous.lexeme}${_currentToken.lexeme}"
+ ]);
_advance();
}
}
@@ -7717,17 +7025,9 @@
if (externalKeyword != null && body is! EmptyFunctionBody) {
_reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY);
}
- return new MethodDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- externalKeyword,
- null,
- returnType,
- null,
- operatorKeyword,
- name,
- parameters,
- body);
+ return new MethodDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, externalKeyword, null, returnType, null,
+ operatorKeyword, name, parameters, body);
}
/**
@@ -7742,7 +7042,8 @@
!_matchesKeyword(Keyword.GET) &&
!_matchesKeyword(Keyword.SET) &&
!_matchesKeyword(Keyword.OPERATOR) &&
- (_tokenMatchesIdentifier(_peek()) || _tokenMatches(_peek(), TokenType.LT))) {
+ (_tokenMatchesIdentifier(_peek()) ||
+ _tokenMatches(_peek(), TokenType.LT))) {
return parseReturnType();
} else if (_matchesIdentifier() &&
_tokenMatches(_peek(), TokenType.PERIOD) &&
@@ -7773,25 +7074,16 @@
if (_matchesString(_OF)) {
Token ofKeyword = getAndAdvance();
LibraryIdentifier libraryName = _parseLibraryName(
- ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE,
- ofKeyword);
+ ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE, ofKeyword);
Token semicolon = _expect(TokenType.SEMICOLON);
- return new PartOfDirective(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- partKeyword,
- ofKeyword,
- libraryName,
+ return new PartOfDirective(commentAndMetadata.comment,
+ commentAndMetadata.metadata, partKeyword, ofKeyword, libraryName,
semicolon);
}
StringLiteral partUri = _parseUri();
Token semicolon = _expect(TokenType.SEMICOLON);
- return new PartDirective(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- partKeyword,
- partUri,
- semicolon);
+ return new PartDirective(commentAndMetadata.comment,
+ commentAndMetadata.metadata, partKeyword, partUri, semicolon);
}
/**
@@ -7819,11 +7111,8 @@
ArgumentList argumentList = parseArgumentList();
if (operand is PropertyAccess) {
PropertyAccess access = operand as PropertyAccess;
- operand = new MethodInvocation(
- access.target,
- access.operator,
- access.propertyName,
- argumentList);
+ operand = new MethodInvocation(access.target, access.operator,
+ access.propertyName, argumentList);
} else {
operand = new FunctionExpressionInvocation(operand, argumentList);
}
@@ -7875,8 +7164,7 @@
return new ThisExpression(getAndAdvance());
} else if (_matchesKeyword(Keyword.SUPER)) {
return _parseAssignableSelector(
- new SuperExpression(getAndAdvance()),
- false);
+ new SuperExpression(getAndAdvance()), false);
} else if (_matchesKeyword(Keyword.NULL)) {
return new NullLiteral(getAndAdvance());
} else if (_matchesKeyword(Keyword.FALSE)) {
@@ -7945,9 +7233,7 @@
Expression expression = parseExpression2();
Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
return new ParenthesizedExpression(
- leftParenthesis,
- expression,
- rightParenthesis);
+ leftParenthesis, expression, rightParenthesis);
} finally {
_inInitializer = wasInInitializer;
}
@@ -7956,8 +7242,7 @@
} else if (_matches(TokenType.QUESTION) &&
_tokenMatches(_peek(), TokenType.IDENTIFIER)) {
_reportErrorForCurrentToken(
- ParserErrorCode.UNEXPECTED_TOKEN,
- [_currentToken.lexeme]);
+ ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken.lexeme]);
_advance();
return _parsePrimaryExpression();
} else if (_matchesKeyword(Keyword.VOID)) {
@@ -7967,8 +7252,7 @@
//
// TODO(brianwilkerson) Improve this error message.
_reportErrorForCurrentToken(
- ParserErrorCode.UNEXPECTED_TOKEN,
- [_currentToken.lexeme]);
+ ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken.lexeme]);
_advance();
return _parsePrimaryExpression();
} else if (_matches(TokenType.HASH)) {
@@ -7999,10 +7283,7 @@
}
ArgumentList argumentList = parseArgumentList();
return new RedirectingConstructorInvocation(
- keyword,
- period,
- constructorName,
- argumentList);
+ keyword, period, constructorName, argumentList);
}
/**
@@ -8021,8 +7302,8 @@
_currentToken.next.type.isRelationalOperator) {
Expression expression = new SuperExpression(getAndAdvance());
Token operator = getAndAdvance();
- expression =
- new BinaryExpression(expression, operator, parseBitwiseOrExpression());
+ expression = new BinaryExpression(
+ expression, operator, parseBitwiseOrExpression());
return expression;
}
Expression expression = parseBitwiseOrExpression();
@@ -8035,12 +7316,12 @@
if (_matches(TokenType.BANG)) {
notOperator = getAndAdvance();
}
- expression =
- new IsExpression(expression, isOperator, notOperator, parseTypeName());
+ expression = new IsExpression(
+ expression, isOperator, notOperator, parseTypeName());
} else if (_currentToken.type.isRelationalOperator) {
Token operator = getAndAdvance();
- expression =
- new BinaryExpression(expression, operator, parseBitwiseOrExpression());
+ expression = new BinaryExpression(
+ expression, operator, parseBitwiseOrExpression());
}
return expression;
}
@@ -8105,22 +7386,13 @@
_validateFormalParameterList(parameters);
FunctionBody body = _parseFunctionBody(
externalKeyword != null || staticKeyword == null,
- ParserErrorCode.STATIC_SETTER_WITHOUT_BODY,
- false);
+ ParserErrorCode.STATIC_SETTER_WITHOUT_BODY, false);
if (externalKeyword != null && body is! EmptyFunctionBody) {
_reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_SETTER_WITH_BODY);
}
- return new MethodDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- externalKeyword,
- staticKeyword,
- returnType,
- propertyKeyword,
- null,
- name,
- parameters,
- body);
+ return new MethodDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType,
+ propertyKeyword, null, name, parameters, body);
}
/**
@@ -8144,8 +7416,8 @@
}
while (_currentToken.type.isShiftOperator) {
Token operator = getAndAdvance();
- expression =
- new BinaryExpression(expression, operator, _parseAdditiveExpression());
+ expression = new BinaryExpression(
+ expression, operator, _parseAdditiveExpression());
}
return expression;
}
@@ -8168,10 +7440,9 @@
!_isSwitchMember()) {
statements.add(parseStatement2());
if (identical(_currentToken, statementStart)) {
- _reportErrorForToken(
- ParserErrorCode.UNEXPECTED_TOKEN,
- _currentToken,
- [_currentToken.lexeme]);
+ _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [
+ _currentToken.lexeme
+ ]);
_advance();
}
statementStart = _currentToken;
@@ -8186,13 +7457,10 @@
*/
StringInterpolation _parseStringInterpolation(Token string) {
List<InterpolationElement> elements = new List<InterpolationElement>();
- bool hasMore =
- _matches(TokenType.STRING_INTERPOLATION_EXPRESSION) ||
+ bool hasMore = _matches(TokenType.STRING_INTERPOLATION_EXPRESSION) ||
_matches(TokenType.STRING_INTERPOLATION_IDENTIFIER);
- elements.add(
- new InterpolationString(
- string,
- _computeStringValue(string.lexeme, true, !hasMore)));
+ elements.add(new InterpolationString(
+ string, _computeStringValue(string.lexeme, true, !hasMore)));
while (hasMore) {
if (_matches(TokenType.STRING_INTERPOLATION_EXPRESSION)) {
Token openToken = getAndAdvance();
@@ -8220,10 +7488,8 @@
string = getAndAdvance();
hasMore = _matches(TokenType.STRING_INTERPOLATION_EXPRESSION) ||
_matches(TokenType.STRING_INTERPOLATION_IDENTIFIER);
- elements.add(
- new InterpolationString(
- string,
- _computeStringValue(string.lexeme, false, !hasMore)));
+ elements.add(new InterpolationString(
+ string, _computeStringValue(string.lexeme, false, !hasMore)));
} else {
hasMore = false;
}
@@ -8251,10 +7517,7 @@
}
ArgumentList argumentList = parseArgumentList();
return new SuperConstructorInvocation(
- keyword,
- period,
- constructorName,
- argumentList);
+ keyword, period, constructorName, argumentList);
}
/**
@@ -8288,15 +7551,14 @@
while (!_matches(TokenType.EOF) &&
!_matches(TokenType.CLOSE_CURLY_BRACKET)) {
List<Label> labels = new List<Label>();
- while (_matchesIdentifier() &&
- _tokenMatches(_peek(), TokenType.COLON)) {
+ while (
+ _matchesIdentifier() && _tokenMatches(_peek(), TokenType.COLON)) {
SimpleIdentifier identifier = parseSimpleIdentifier();
String label = identifier.token.lexeme;
if (definedLabels.contains(label)) {
_reportErrorForToken(
ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT,
- identifier.token,
- [label]);
+ identifier.token, [label]);
} else {
definedLabels.add(label);
}
@@ -8307,13 +7569,8 @@
Token caseKeyword = getAndAdvance();
Expression caseExpression = parseExpression2();
Token colon = _expect(TokenType.COLON);
- members.add(
- new SwitchCase(
- labels,
- caseKeyword,
- caseExpression,
- colon,
- _parseStatementList()));
+ members.add(new SwitchCase(labels, caseKeyword, caseExpression, colon,
+ _parseStatementList()));
if (defaultKeyword != null) {
_reportErrorForToken(
ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE,
@@ -8322,13 +7579,12 @@
} else if (_matchesKeyword(Keyword.DEFAULT)) {
if (defaultKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES,
- _peek());
+ ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES, _peek());
}
defaultKeyword = getAndAdvance();
Token colon = _expect(TokenType.COLON);
- members.add(
- new SwitchDefault(labels, defaultKeyword, colon, _parseStatementList()));
+ members.add(new SwitchDefault(
+ labels, defaultKeyword, colon, _parseStatementList()));
} else {
// We need to advance, otherwise we could end up in an infinite loop,
// but this could be a lot smarter about recovering from the error.
@@ -8342,14 +7598,8 @@
}
}
Token rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET);
- return new SwitchStatement(
- keyword,
- leftParenthesis,
- expression,
- rightParenthesis,
- leftBracket,
- members,
- rightBracket);
+ return new SwitchStatement(keyword, leftParenthesis, expression,
+ rightParenthesis, leftBracket, members, rightBracket);
} finally {
_inSwitch = wasInSwitch;
}
@@ -8405,8 +7655,7 @@
Token keyword = _expectKeyword(Keyword.THROW);
if (_matches(TokenType.SEMICOLON) || _matches(TokenType.CLOSE_PAREN)) {
_reportErrorForToken(
- ParserErrorCode.MISSING_EXPRESSION_IN_THROW,
- _currentToken);
+ ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken);
return new ThrowExpression(keyword, _createSyntheticIdentifier());
}
Expression expression = parseExpression2();
@@ -8427,8 +7676,7 @@
Token keyword = _expectKeyword(Keyword.THROW);
if (_matches(TokenType.SEMICOLON) || _matches(TokenType.CLOSE_PAREN)) {
_reportErrorForToken(
- ParserErrorCode.MISSING_EXPRESSION_IN_THROW,
- _currentToken);
+ ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken);
return new ThrowExpression(keyword, _createSyntheticIdentifier());
}
Expression expression = parseExpressionWithoutCascade();
@@ -8484,17 +7732,9 @@
rightParenthesis = _expect(TokenType.CLOSE_PAREN);
}
Block catchBody = parseBlock();
- catchClauses.add(
- new CatchClause(
- onKeyword,
- exceptionType,
- catchKeyword,
- leftParenthesis,
- exceptionParameter,
- comma,
- stackTraceParameter,
- rightParenthesis,
- catchBody));
+ catchClauses.add(new CatchClause(onKeyword, exceptionType, catchKeyword,
+ leftParenthesis, exceptionParameter, comma, stackTraceParameter,
+ rightParenthesis, catchBody));
}
Token finallyKeyword = null;
if (_matchesKeyword(Keyword.FINALLY)) {
@@ -8506,11 +7746,7 @@
}
}
return new TryStatement(
- tryKeyword,
- body,
- catchClauses,
- finallyKeyword,
- finallyClause);
+ tryKeyword, body, catchClauses, finallyKeyword, finallyClause);
}
/**
@@ -8550,16 +7786,14 @@
TypeAlias typeAlias =
_parseClassTypeAlias(commentAndMetadata, null, keyword);
_reportErrorForToken(
- ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS,
- keyword);
+ ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword);
return typeAlias;
}
} else if (_tokenMatches(next, TokenType.EQ)) {
TypeAlias typeAlias =
_parseClassTypeAlias(commentAndMetadata, null, keyword);
_reportErrorForToken(
- ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS,
- keyword);
+ ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword);
return typeAlias;
}
}
@@ -8596,8 +7830,7 @@
return new PrefixExpression(operator, _parseUnaryExpression());
}
return new PrefixExpression(
- operator,
- new SuperExpression(getAndAdvance()));
+ operator, new SuperExpression(getAndAdvance()));
}
return new PrefixExpression(operator, _parseUnaryExpression());
} else if (_currentToken.type.isIncrementOperator) {
@@ -8622,17 +7855,14 @@
secondOperator.setNext(_currentToken);
firstOperator.setNext(secondOperator);
operator.previous.setNext(firstOperator);
- return new PrefixExpression(
- firstOperator,
- new PrefixExpression(secondOperator, new SuperExpression(getAndAdvance())));
+ return new PrefixExpression(firstOperator, new PrefixExpression(
+ secondOperator, new SuperExpression(getAndAdvance())));
} else {
// Invalid operator before 'super'
_reportErrorForCurrentToken(
- ParserErrorCode.INVALID_OPERATOR_FOR_SUPER,
- [operator.lexeme]);
+ ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, [operator.lexeme]);
return new PrefixExpression(
- operator,
- new SuperExpression(getAndAdvance()));
+ operator, new SuperExpression(getAndAdvance()));
}
}
return new PrefixExpression(operator, _parseAssignableExpression(false));
@@ -8649,10 +7879,9 @@
* Parse a string literal representing a URI.
*/
StringLiteral _parseUri() {
- bool iskeywordAfterUri(Token token) =>
- token.lexeme == Keyword.AS.syntax ||
- token.lexeme == _HIDE ||
- token.lexeme == _SHOW;
+ bool iskeywordAfterUri(Token token) => token.lexeme == Keyword.AS.syntax ||
+ token.lexeme == _HIDE ||
+ token.lexeme == _SHOW;
if (!_matches(TokenType.STRING) &&
!_matches(TokenType.SEMICOLON) &&
!iskeywordAfterUri(_currentToken)) {
@@ -8688,8 +7917,7 @@
Token newToken =
new StringToken(TokenType.STRING, "'$value'", _currentToken.offset);
_reportErrorForToken(
- ParserErrorCode.NON_STRING_LITERAL_AS_URI,
- newToken);
+ ParserErrorCode.NON_STRING_LITERAL_AS_URI, newToken);
_currentToken = endToken.next;
return new SimpleStringLiteral(newToken, value);
}
@@ -8716,12 +7944,8 @@
equals = getAndAdvance();
initializer = parseExpression2();
}
- return new VariableDeclaration(
- commentAndMetadata.comment,
- commentAndMetadata.metadata,
- name,
- equals,
- initializer);
+ return new VariableDeclaration(commentAndMetadata.comment,
+ commentAndMetadata.metadata, name, equals, initializer);
}
/**
@@ -8735,13 +7959,11 @@
* @param commentAndMetadata the metadata to be associated with the variable declaration list
* @return the variable declaration list that was parsed
*/
- VariableDeclarationList
- _parseVariableDeclarationListAfterMetadata(CommentAndMetadata commentAndMetadata) {
+ VariableDeclarationList _parseVariableDeclarationListAfterMetadata(
+ CommentAndMetadata commentAndMetadata) {
FinalConstVarOrType holder = _parseFinalConstVarOrType(false);
return _parseVariableDeclarationListAfterType(
- commentAndMetadata,
- holder.keyword,
- holder.type);
+ commentAndMetadata, holder.keyword, holder.type);
}
/**
@@ -8759,9 +7981,8 @@
* @param type the type of the variables in the list
* @return the variable declaration list that was parsed
*/
- VariableDeclarationList
- _parseVariableDeclarationListAfterType(CommentAndMetadata commentAndMetadata,
- Token keyword, TypeName type) {
+ VariableDeclarationList _parseVariableDeclarationListAfterType(
+ CommentAndMetadata commentAndMetadata, Token keyword, TypeName type) {
if (type != null &&
keyword != null &&
_tokenMatchesKeyword(keyword, Keyword.VAR)) {
@@ -8776,9 +7997,7 @@
return new VariableDeclarationList(
commentAndMetadata != null ? commentAndMetadata.comment : null,
commentAndMetadata != null ? commentAndMetadata.metadata : null,
- keyword,
- type,
- variables);
+ keyword, type, variables);
}
/**
@@ -8793,8 +8012,8 @@
* statement, or `null` if there is no attempt at parsing the comment and metadata
* @return the variable declaration statement that was parsed
*/
- VariableDeclarationStatement
- _parseVariableDeclarationStatementAfterMetadata(CommentAndMetadata commentAndMetadata) {
+ VariableDeclarationStatement _parseVariableDeclarationStatementAfterMetadata(
+ CommentAndMetadata commentAndMetadata) {
// Token startToken = currentToken;
VariableDeclarationList variableList =
_parseVariableDeclarationListAfterMetadata(commentAndMetadata);
@@ -8823,11 +8042,11 @@
* @param type the type of the variables in the list
* @return the variable declaration statement that was parsed
*/
- VariableDeclarationStatement
- _parseVariableDeclarationStatementAfterType(CommentAndMetadata commentAndMetadata,
- Token keyword, TypeName type) {
+ VariableDeclarationStatement _parseVariableDeclarationStatementAfterType(
+ CommentAndMetadata commentAndMetadata, Token keyword, TypeName type) {
VariableDeclarationList variableList =
- _parseVariableDeclarationListAfterType(commentAndMetadata, keyword, type);
+ _parseVariableDeclarationListAfterType(
+ commentAndMetadata, keyword, type);
Token semicolon = _expect(TokenType.SEMICOLON);
return new VariableDeclarationStatement(variableList, semicolon);
}
@@ -8852,11 +8071,7 @@
Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
Statement body = parseStatement2();
return new WhileStatement(
- keyword,
- leftParenthesis,
- condition,
- rightParenthesis,
- body);
+ keyword, leftParenthesis, condition, rightParenthesis, body);
} finally {
_inLoop = wasInLoop;
}
@@ -8938,13 +8153,8 @@
*/
void _reportErrorForNode(ParserErrorCode errorCode, AstNode node,
[List<Object> arguments]) {
- _reportError(
- new AnalysisError.con2(
- _source,
- node.offset,
- node.length,
- errorCode,
- arguments));
+ _reportError(new AnalysisError.con2(
+ _source, node.offset, node.length, errorCode, arguments));
}
/**
@@ -8959,13 +8169,8 @@
if (token.type == TokenType.EOF) {
token = token.previous;
}
- _reportError(
- new AnalysisError.con2(
- _source,
- token.offset,
- math.max(token.length, 1),
- errorCode,
- arguments));
+ _reportError(new AnalysisError.con2(_source, token.offset,
+ math.max(token.length, 1), errorCode, arguments));
}
/**
@@ -8980,9 +8185,7 @@
endToken = _currentToken.next;
}
_reportErrorForToken(
- ParserErrorCode.EXPECTED_TOKEN,
- _currentToken.previous,
- ["}"]);
+ ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, ["}"]);
} else {
_currentToken = endToken.next;
}
@@ -9087,8 +8290,11 @@
// Look to see whether the token after the open parenthesis is something
// that should only occur at the beginning of a parameter list.
//
- if (next.matchesAny(
- [TokenType.AT, TokenType.OPEN_SQUARE_BRACKET, TokenType.OPEN_CURLY_BRACKET]) ||
+ if (next.matchesAny([
+ TokenType.AT,
+ TokenType.OPEN_SQUARE_BRACKET,
+ TokenType.OPEN_CURLY_BRACKET
+ ]) ||
_tokenMatchesKeyword(next, Keyword.VOID) ||
(_tokenMatchesIdentifier(next) &&
(next.next.matchesAny([TokenType.COMMA, TokenType.CLOSE_PAREN])))) {
@@ -9102,7 +8308,8 @@
_tokenMatches(next.next, TokenType.OPEN_PAREN)) {
Token afterParameters = _skipFormalParameterList(next.next);
if (afterParameters != null &&
- (afterParameters.matchesAny([TokenType.COMMA, TokenType.CLOSE_PAREN]))) {
+ (afterParameters
+ .matchesAny([TokenType.COMMA, TokenType.CLOSE_PAREN]))) {
return _skipPastMatchingToken(startToken);
}
}
@@ -9459,7 +8666,8 @@
* @return `true` if the given token matches the given keyword
*/
bool _tokenMatchesKeyword(Token token, Keyword keyword) =>
- token.type == TokenType.KEYWORD && (token as KeywordToken).keyword == keyword;
+ token.type == TokenType.KEYWORD &&
+ (token as KeywordToken).keyword == keyword;
/**
* Return `true` if the given token matches the given identifier.
@@ -9527,8 +8735,7 @@
// Illegal escape sequence: invalid hex digit
_reportErrorForCurrentToken(ParserErrorCode.INVALID_HEX_ESCAPE);
} else {
- int charCode =
- (Character.digit(firstDigit, 16) << 4) +
+ int charCode = (Character.digit(firstDigit, 16) << 4) +
Character.digit(secondDigit, 16);
buffer.writeCharCode(charCode);
}
@@ -9576,12 +8783,8 @@
// Illegal escape sequence: not enough or too many hex digits
_reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE);
}
- _appendScalarValue(
- buffer,
- lexeme.substring(index, currentIndex + 1),
- value,
- index,
- currentIndex);
+ _appendScalarValue(buffer, lexeme.substring(index, currentIndex + 1),
+ value, index, currentIndex);
return currentIndex + 1;
} else {
if (currentIndex + 3 >= length) {
@@ -9600,17 +8803,13 @@
// Illegal escape sequence: invalid hex digits
_reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE);
} else {
- _appendScalarValue(
- buffer,
- lexeme.substring(index, currentIndex + 1),
+ _appendScalarValue(buffer, lexeme.substring(index, currentIndex + 1),
(((((Character.digit(firstDigit, 16) << 4) +
- Character.digit(secondDigit, 16)) <<
- 4) +
- Character.digit(thirdDigit, 16)) <<
- 4) +
- Character.digit(fourthDigit, 16),
- index,
- currentIndex + 3);
+ Character.digit(secondDigit, 16)) <<
+ 4) +
+ Character.digit(thirdDigit, 16)) <<
+ 4) +
+ Character.digit(fourthDigit, 16), index, currentIndex + 3);
}
return currentIndex + 4;
}
@@ -9660,8 +8859,7 @@
}
if (modifiers.externalKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.EXTERNAL_CLASS,
- modifiers.externalKeyword);
+ ParserErrorCode.EXTERNAL_CLASS, modifiers.externalKeyword);
}
if (modifiers.finalKeyword != null) {
_reportErrorForToken(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword);
@@ -9682,23 +8880,19 @@
Token _validateModifiersForConstructor(Modifiers modifiers) {
if (modifiers.abstractKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.ABSTRACT_CLASS_MEMBER,
- modifiers.abstractKeyword);
+ ParserErrorCode.ABSTRACT_CLASS_MEMBER, modifiers.abstractKeyword);
}
if (modifiers.finalKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.FINAL_CONSTRUCTOR,
- modifiers.finalKeyword);
+ ParserErrorCode.FINAL_CONSTRUCTOR, modifiers.finalKeyword);
}
if (modifiers.staticKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.STATIC_CONSTRUCTOR,
- modifiers.staticKeyword);
+ ParserErrorCode.STATIC_CONSTRUCTOR, modifiers.staticKeyword);
}
if (modifiers.varKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE,
- modifiers.varKeyword);
+ ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, modifiers.varKeyword);
}
Token externalKeyword = modifiers.externalKeyword;
Token constKeyword = modifiers.constKeyword;
@@ -9707,15 +8901,13 @@
constKeyword != null &&
constKeyword.offset < externalKeyword.offset) {
_reportErrorForToken(
- ParserErrorCode.EXTERNAL_AFTER_CONST,
- externalKeyword);
+ ParserErrorCode.EXTERNAL_AFTER_CONST, externalKeyword);
}
if (externalKeyword != null &&
factoryKeyword != null &&
factoryKeyword.offset < externalKeyword.offset) {
_reportErrorForToken(
- ParserErrorCode.EXTERNAL_AFTER_FACTORY,
- externalKeyword);
+ ParserErrorCode.EXTERNAL_AFTER_FACTORY, externalKeyword);
}
return constKeyword;
}
@@ -9730,16 +8922,14 @@
_validateModifiersForTopLevelDeclaration(modifiers);
if (modifiers.abstractKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.ABSTRACT_ENUM,
- modifiers.abstractKeyword);
+ ParserErrorCode.ABSTRACT_ENUM, modifiers.abstractKeyword);
}
if (modifiers.constKeyword != null) {
_reportErrorForToken(ParserErrorCode.CONST_ENUM, modifiers.constKeyword);
}
if (modifiers.externalKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.EXTERNAL_ENUM,
- modifiers.externalKeyword);
+ ParserErrorCode.EXTERNAL_ENUM, modifiers.externalKeyword);
}
if (modifiers.finalKeyword != null) {
_reportErrorForToken(ParserErrorCode.FINAL_ENUM, modifiers.finalKeyword);
@@ -9762,13 +8952,11 @@
}
if (modifiers.externalKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.EXTERNAL_FIELD,
- modifiers.externalKeyword);
+ ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword);
}
if (modifiers.factoryKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.NON_CONSTRUCTOR_FACTORY,
- modifiers.factoryKeyword);
+ ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword);
}
Token staticKeyword = modifiers.staticKeyword;
Token constKeyword = modifiers.constKeyword;
@@ -9828,23 +9016,19 @@
}
if (modifiers.constKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.CONST_METHOD,
- modifiers.constKeyword);
+ ParserErrorCode.CONST_METHOD, modifiers.constKeyword);
}
if (modifiers.factoryKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.NON_CONSTRUCTOR_FACTORY,
- modifiers.factoryKeyword);
+ ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword);
}
if (modifiers.finalKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.FINAL_METHOD,
- modifiers.finalKeyword);
+ ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword);
}
if (modifiers.varKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.VAR_RETURN_TYPE,
- modifiers.varKeyword);
+ ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword);
}
Token externalKeyword = modifiers.externalKeyword;
Token staticKeyword = modifiers.staticKeyword;
@@ -9852,8 +9036,7 @@
staticKeyword != null &&
staticKeyword.offset < externalKeyword.offset) {
_reportErrorForToken(
- ParserErrorCode.EXTERNAL_AFTER_STATIC,
- externalKeyword);
+ ParserErrorCode.EXTERNAL_AFTER_STATIC, externalKeyword);
}
}
@@ -9868,28 +9051,23 @@
}
if (modifiers.constKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.CONST_METHOD,
- modifiers.constKeyword);
+ ParserErrorCode.CONST_METHOD, modifiers.constKeyword);
}
if (modifiers.factoryKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.NON_CONSTRUCTOR_FACTORY,
- modifiers.factoryKeyword);
+ ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword);
}
if (modifiers.finalKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.FINAL_METHOD,
- modifiers.finalKeyword);
+ ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword);
}
if (modifiers.staticKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.STATIC_OPERATOR,
- modifiers.staticKeyword);
+ ParserErrorCode.STATIC_OPERATOR, modifiers.staticKeyword);
}
if (modifiers.varKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.VAR_RETURN_TYPE,
- modifiers.varKeyword);
+ ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword);
}
}
@@ -9900,13 +9078,11 @@
*/
void _validateModifiersForTopLevelDeclaration(Modifiers modifiers) {
if (modifiers.factoryKeyword != null) {
- _reportErrorForToken(
- ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION,
+ _reportErrorForToken(ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION,
modifiers.factoryKeyword);
}
if (modifiers.staticKeyword != null) {
- _reportErrorForToken(
- ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION,
+ _reportErrorForToken(ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION,
modifiers.staticKeyword);
}
}
@@ -9929,8 +9105,7 @@
}
if (modifiers.varKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.VAR_RETURN_TYPE,
- modifiers.varKeyword);
+ ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword);
}
}
@@ -9948,8 +9123,7 @@
}
if (modifiers.externalKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.EXTERNAL_FIELD,
- modifiers.externalKeyword);
+ ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword);
}
Token constKeyword = modifiers.constKeyword;
Token finalKeyword = modifiers.finalKeyword;
@@ -9979,23 +9153,19 @@
_validateModifiersForTopLevelDeclaration(modifiers);
if (modifiers.abstractKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.ABSTRACT_TYPEDEF,
- modifiers.abstractKeyword);
+ ParserErrorCode.ABSTRACT_TYPEDEF, modifiers.abstractKeyword);
}
if (modifiers.constKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.CONST_TYPEDEF,
- modifiers.constKeyword);
+ ParserErrorCode.CONST_TYPEDEF, modifiers.constKeyword);
}
if (modifiers.externalKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.EXTERNAL_TYPEDEF,
- modifiers.externalKeyword);
+ ParserErrorCode.EXTERNAL_TYPEDEF, modifiers.externalKeyword);
}
if (modifiers.finalKeyword != null) {
_reportErrorForToken(
- ParserErrorCode.FINAL_TYPEDEF,
- modifiers.finalKeyword);
+ ParserErrorCode.FINAL_TYPEDEF, modifiers.finalKeyword);
}
if (modifiers.varKeyword != null) {
_reportErrorForToken(ParserErrorCode.VAR_TYPEDEF, modifiers.varKeyword);
@@ -10003,723 +9173,6 @@
}
}
/**
- * The enumeration `ParserErrorCode` defines the error codes used for errors
- * detected by the parser. The convention for this class is for the name of the
- * error code to indicate the problem that caused the error to be generated and
- * for the error message to explain what is wrong and, when appropriate, how the
- * problem can be corrected.
- */
-class ParserErrorCode extends ErrorCode {
- static const ParserErrorCode ABSTRACT_CLASS_MEMBER = const ParserErrorCode(
- 'ABSTRACT_CLASS_MEMBER',
- "Members of classes cannot be declared to be 'abstract'");
-
- static const ParserErrorCode ABSTRACT_ENUM = const ParserErrorCode(
- 'ABSTRACT_ENUM',
- "Enums cannot be declared to be 'abstract'");
-
- static const ParserErrorCode ABSTRACT_STATIC_METHOD = const ParserErrorCode(
- 'ABSTRACT_STATIC_METHOD',
- "Static methods cannot be declared to be 'abstract'");
-
- static const ParserErrorCode ABSTRACT_TOP_LEVEL_FUNCTION =
- const ParserErrorCode(
- 'ABSTRACT_TOP_LEVEL_FUNCTION',
- "Top-level functions cannot be declared to be 'abstract'");
-
- static const ParserErrorCode ABSTRACT_TOP_LEVEL_VARIABLE =
- const ParserErrorCode(
- 'ABSTRACT_TOP_LEVEL_VARIABLE',
- "Top-level variables cannot be declared to be 'abstract'");
-
- static const ParserErrorCode ABSTRACT_TYPEDEF = const ParserErrorCode(
- 'ABSTRACT_TYPEDEF',
- "Type aliases cannot be declared to be 'abstract'");
-
- static const ParserErrorCode ANNOTATION_ON_ENUM_CONSTANT =
- const ParserErrorCode(
- 'ANNOTATION_ON_ENUM_CONSTANT',
- "Enum constants cannot have annotations");
-
- static const ParserErrorCode ASSERT_DOES_NOT_TAKE_ASSIGNMENT =
- const ParserErrorCode(
- 'ASSERT_DOES_NOT_TAKE_ASSIGNMENT',
- "Assert cannot be called on an assignment");
-
- static const ParserErrorCode ASSERT_DOES_NOT_TAKE_CASCADE =
- const ParserErrorCode(
- 'ASSERT_DOES_NOT_TAKE_CASCADE',
- "Assert cannot be called on cascade");
-
- static const ParserErrorCode ASSERT_DOES_NOT_TAKE_THROW =
- const ParserErrorCode(
- 'ASSERT_DOES_NOT_TAKE_THROW',
- "Assert cannot be called on throws");
-
- static const ParserErrorCode ASSERT_DOES_NOT_TAKE_RETHROW =
- const ParserErrorCode(
- 'ASSERT_DOES_NOT_TAKE_RETHROW',
- "Assert cannot be called on rethrows");
-
- /**
- * 16.32 Identifier Reference: It is a compile-time error if any of the
- * identifiers async, await, or yield is used as an identifier in a function
- * body marked with either async, async*, or sync*.
- */
- static const ParserErrorCode ASYNC_KEYWORD_USED_AS_IDENTIFIER =
- const ParserErrorCode(
- 'ASYNC_KEYWORD_USED_AS_IDENTIFIER',
- "The keywords 'async', 'await', and 'yield' may not be used as identifiers in an asynchronous or generator function.");
-
- static const ParserErrorCode BREAK_OUTSIDE_OF_LOOP = const ParserErrorCode(
- 'BREAK_OUTSIDE_OF_LOOP',
- "A break statement cannot be used outside of a loop or switch statement");
-
- static const ParserErrorCode CLASS_IN_CLASS = const ParserErrorCode(
- 'CLASS_IN_CLASS',
- "Classes cannot be declared inside other classes");
-
- static const ParserErrorCode COLON_IN_PLACE_OF_IN = const ParserErrorCode(
- 'COLON_IN_PLACE_OF_IN',
- "For-in loops use 'in' rather than a colon");
-
- static const ParserErrorCode CONST_AND_FINAL = const ParserErrorCode(
- 'CONST_AND_FINAL',
- "Members cannot be declared to be both 'const' and 'final'");
-
- static const ParserErrorCode CONST_AND_VAR = const ParserErrorCode(
- 'CONST_AND_VAR',
- "Members cannot be declared to be both 'const' and 'var'");
-
- static const ParserErrorCode CONST_CLASS = const ParserErrorCode(
- 'CONST_CLASS',
- "Classes cannot be declared to be 'const'");
-
- static const ParserErrorCode CONST_CONSTRUCTOR_WITH_BODY =
- const ParserErrorCode(
- 'CONST_CONSTRUCTOR_WITH_BODY',
- "'const' constructors cannot have a body");
-
- static const ParserErrorCode CONST_ENUM =
- const ParserErrorCode('CONST_ENUM', "Enums cannot be declared to be 'const'");
-
- static const ParserErrorCode CONST_FACTORY = const ParserErrorCode(
- 'CONST_FACTORY',
- "Only redirecting factory constructors can be declared to be 'const'");
-
- static const ParserErrorCode CONST_METHOD = const ParserErrorCode(
- 'CONST_METHOD',
- "Getters, setters and methods cannot be declared to be 'const'");
-
- static const ParserErrorCode CONST_TYPEDEF = const ParserErrorCode(
- 'CONST_TYPEDEF',
- "Type aliases cannot be declared to be 'const'");
-
- static const ParserErrorCode CONSTRUCTOR_WITH_RETURN_TYPE =
- const ParserErrorCode(
- 'CONSTRUCTOR_WITH_RETURN_TYPE',
- "Constructors cannot have a return type");
-
- static const ParserErrorCode CONTINUE_OUTSIDE_OF_LOOP = const ParserErrorCode(
- 'CONTINUE_OUTSIDE_OF_LOOP',
- "A continue statement cannot be used outside of a loop or switch statement");
-
- static const ParserErrorCode CONTINUE_WITHOUT_LABEL_IN_CASE =
- const ParserErrorCode(
- 'CONTINUE_WITHOUT_LABEL_IN_CASE',
- "A continue statement in a switch statement must have a label as a target");
-
- static const ParserErrorCode DEPRECATED_CLASS_TYPE_ALIAS =
- const ParserErrorCode(
- 'DEPRECATED_CLASS_TYPE_ALIAS',
- "The 'typedef' mixin application was replaced with 'class'");
-
- static const ParserErrorCode DIRECTIVE_AFTER_DECLARATION =
- const ParserErrorCode(
- 'DIRECTIVE_AFTER_DECLARATION',
- "Directives must appear before any declarations");
-
- static const ParserErrorCode DUPLICATE_LABEL_IN_SWITCH_STATEMENT =
- const ParserErrorCode(
- 'DUPLICATE_LABEL_IN_SWITCH_STATEMENT',
- "The label {0} was already used in this switch statement");
-
- static const ParserErrorCode DUPLICATED_MODIFIER = const ParserErrorCode(
- 'DUPLICATED_MODIFIER',
- "The modifier '{0}' was already specified.");
-
- static const ParserErrorCode EMPTY_ENUM_BODY = const ParserErrorCode(
- 'EMPTY_ENUM_BODY',
- "An enum must declare at least one constant name");
-
- static const ParserErrorCode EQUALITY_CANNOT_BE_EQUALITY_OPERAND =
- const ParserErrorCode(
- 'EQUALITY_CANNOT_BE_EQUALITY_OPERAND',
- "Equality expression cannot be operand of another equality expression.");
-
- static const ParserErrorCode EXPECTED_CASE_OR_DEFAULT = const ParserErrorCode(
- 'EXPECTED_CASE_OR_DEFAULT',
- "Expected 'case' or 'default'");
-
- static const ParserErrorCode EXPECTED_CLASS_MEMBER =
- const ParserErrorCode('EXPECTED_CLASS_MEMBER', "Expected a class member");
-
- static const ParserErrorCode EXPECTED_EXECUTABLE = const ParserErrorCode(
- 'EXPECTED_EXECUTABLE',
- "Expected a method, getter, setter or operator declaration");
-
- static const ParserErrorCode EXPECTED_LIST_OR_MAP_LITERAL =
- const ParserErrorCode(
- 'EXPECTED_LIST_OR_MAP_LITERAL',
- "Expected a list or map literal");
-
- static const ParserErrorCode EXPECTED_STRING_LITERAL =
- const ParserErrorCode('EXPECTED_STRING_LITERAL', "Expected a string literal");
-
- static const ParserErrorCode EXPECTED_TOKEN =
- const ParserErrorCode('EXPECTED_TOKEN', "Expected to find '{0}'");
-
- static const ParserErrorCode EXPECTED_TYPE_NAME =
- const ParserErrorCode('EXPECTED_TYPE_NAME', "Expected a type name");
-
- static const ParserErrorCode EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE =
- const ParserErrorCode(
- 'EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
- "Export directives must preceed part directives");
-
- static const ParserErrorCode EXTERNAL_AFTER_CONST = const ParserErrorCode(
- 'EXTERNAL_AFTER_CONST',
- "The modifier 'external' should be before the modifier 'const'");
-
- static const ParserErrorCode EXTERNAL_AFTER_FACTORY = const ParserErrorCode(
- 'EXTERNAL_AFTER_FACTORY',
- "The modifier 'external' should be before the modifier 'factory'");
-
- static const ParserErrorCode EXTERNAL_AFTER_STATIC = const ParserErrorCode(
- 'EXTERNAL_AFTER_STATIC',
- "The modifier 'external' should be before the modifier 'static'");
-
- static const ParserErrorCode EXTERNAL_CLASS = const ParserErrorCode(
- 'EXTERNAL_CLASS',
- "Classes cannot be declared to be 'external'");
-
- static const ParserErrorCode EXTERNAL_CONSTRUCTOR_WITH_BODY =
- const ParserErrorCode(
- 'EXTERNAL_CONSTRUCTOR_WITH_BODY',
- "External constructors cannot have a body");
-
- static const ParserErrorCode EXTERNAL_ENUM = const ParserErrorCode(
- 'EXTERNAL_ENUM',
- "Enums cannot be declared to be 'external'");
-
- static const ParserErrorCode EXTERNAL_FIELD = const ParserErrorCode(
- 'EXTERNAL_FIELD',
- "Fields cannot be declared to be 'external'");
-
- static const ParserErrorCode EXTERNAL_GETTER_WITH_BODY =
- const ParserErrorCode(
- 'EXTERNAL_GETTER_WITH_BODY',
- "External getters cannot have a body");
-
- static const ParserErrorCode EXTERNAL_METHOD_WITH_BODY =
- const ParserErrorCode(
- 'EXTERNAL_METHOD_WITH_BODY',
- "External methods cannot have a body");
-
- static const ParserErrorCode EXTERNAL_OPERATOR_WITH_BODY =
- const ParserErrorCode(
- 'EXTERNAL_OPERATOR_WITH_BODY',
- "External operators cannot have a body");
-
- static const ParserErrorCode EXTERNAL_SETTER_WITH_BODY =
- const ParserErrorCode(
- 'EXTERNAL_SETTER_WITH_BODY',
- "External setters cannot have a body");
-
- static const ParserErrorCode EXTERNAL_TYPEDEF = const ParserErrorCode(
- 'EXTERNAL_TYPEDEF',
- "Type aliases cannot be declared to be 'external'");
-
- static const ParserErrorCode FACTORY_TOP_LEVEL_DECLARATION =
- const ParserErrorCode(
- 'FACTORY_TOP_LEVEL_DECLARATION',
- "Top-level declarations cannot be declared to be 'factory'");
-
- static const ParserErrorCode FACTORY_WITH_INITIALIZERS =
- const ParserErrorCode(
- 'FACTORY_WITH_INITIALIZERS',
- "A 'factory' constructor cannot have initializers",
- "Either remove the 'factory' keyword to make this a generative "
- "constructor or remove the initializers.");
-
- static const ParserErrorCode FACTORY_WITHOUT_BODY = const ParserErrorCode(
- 'FACTORY_WITHOUT_BODY',
- "A non-redirecting 'factory' constructor must have a body");
-
- static const ParserErrorCode FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR =
- const ParserErrorCode(
- 'FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
- "Field initializers can only be used in a constructor");
-
- static const ParserErrorCode FINAL_AND_VAR = const ParserErrorCode(
- 'FINAL_AND_VAR',
- "Members cannot be declared to be both 'final' and 'var'");
-
- static const ParserErrorCode FINAL_CLASS = const ParserErrorCode(
- 'FINAL_CLASS',
- "Classes cannot be declared to be 'final'");
-
- static const ParserErrorCode FINAL_CONSTRUCTOR = const ParserErrorCode(
- 'FINAL_CONSTRUCTOR',
- "A constructor cannot be declared to be 'final'");
-
- static const ParserErrorCode FINAL_ENUM =
- const ParserErrorCode('FINAL_ENUM', "Enums cannot be declared to be 'final'");
-
- static const ParserErrorCode FINAL_METHOD = const ParserErrorCode(
- 'FINAL_METHOD',
- "Getters, setters and methods cannot be declared to be 'final'");
-
- static const ParserErrorCode FINAL_TYPEDEF = const ParserErrorCode(
- 'FINAL_TYPEDEF',
- "Type aliases cannot be declared to be 'final'");
-
- static const ParserErrorCode FUNCTION_TYPED_PARAMETER_VAR =
- const ParserErrorCode(
- 'FUNCTION_TYPED_PARAMETER_VAR',
- "Function typed parameters cannot specify 'const', 'final' or 'var' instead of return type");
-
- static const ParserErrorCode GETTER_IN_FUNCTION = const ParserErrorCode(
- 'GETTER_IN_FUNCTION',
- "Getters cannot be defined within methods or functions");
-
- static const ParserErrorCode GETTER_WITH_PARAMETERS = const ParserErrorCode(
- 'GETTER_WITH_PARAMETERS',
- "Getter should be declared without a parameter list");
-
- static const ParserErrorCode ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE =
- const ParserErrorCode(
- 'ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE',
- "Illegal assignment to non-assignable expression");
-
- static const ParserErrorCode IMPLEMENTS_BEFORE_EXTENDS =
- const ParserErrorCode(
- 'IMPLEMENTS_BEFORE_EXTENDS',
- "The extends clause must be before the implements clause");
-
- static const ParserErrorCode IMPLEMENTS_BEFORE_WITH = const ParserErrorCode(
- 'IMPLEMENTS_BEFORE_WITH',
- "The with clause must be before the implements clause");
-
- static const ParserErrorCode IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE =
- const ParserErrorCode(
- 'IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
- "Import directives must preceed part directives");
-
- static const ParserErrorCode INITIALIZED_VARIABLE_IN_FOR_EACH =
- const ParserErrorCode(
- 'INITIALIZED_VARIABLE_IN_FOR_EACH',
- "The loop variable in a for-each loop cannot be initialized");
-
- static const ParserErrorCode INVALID_AWAIT_IN_FOR = const ParserErrorCode(
- 'INVALID_AWAIT_IN_FOR',
- "The modifier 'await' is not allowed for a normal 'for' statement",
- "Remove the keyword or use a for-each statement.");
-
- static const ParserErrorCode INVALID_CODE_POINT = const ParserErrorCode(
- 'INVALID_CODE_POINT',
- "The escape sequence '{0}' is not a valid code point");
-
- static const ParserErrorCode INVALID_COMMENT_REFERENCE =
- const ParserErrorCode(
- 'INVALID_COMMENT_REFERENCE',
- "Comment references should contain a possibly prefixed identifier and can start with 'new', but should not contain anything else");
-
- static const ParserErrorCode INVALID_HEX_ESCAPE = const ParserErrorCode(
- 'INVALID_HEX_ESCAPE',
- "An escape sequence starting with '\\x' must be followed by 2 hexidecimal digits");
-
- static const ParserErrorCode INVALID_OPERATOR = const ParserErrorCode(
- 'INVALID_OPERATOR',
- "The string '{0}' is not a valid operator");
-
- static const ParserErrorCode INVALID_OPERATOR_FOR_SUPER =
- const ParserErrorCode(
- 'INVALID_OPERATOR_FOR_SUPER',
- "The operator '{0}' cannot be used with 'super'");
-
- static const ParserErrorCode INVALID_STAR_AFTER_ASYNC = const ParserErrorCode(
- 'INVALID_STAR_AFTER_ASYNC',
- "The modifier 'async*' is not allowed for an expression function body",
- "Convert the body to a block.");
-
- static const ParserErrorCode INVALID_SYNC = const ParserErrorCode(
- 'INVALID_SYNC',
- "The modifier 'sync' is not allowed for an exrpression function body",
- "Convert the body to a block.");
-
- static const ParserErrorCode INVALID_UNICODE_ESCAPE = const ParserErrorCode(
- 'INVALID_UNICODE_ESCAPE',
- "An escape sequence starting with '\\u' must be followed by 4 hexidecimal digits or from 1 to 6 digits between '{' and '}'");
-
- static const ParserErrorCode LIBRARY_DIRECTIVE_NOT_FIRST =
- const ParserErrorCode(
- 'LIBRARY_DIRECTIVE_NOT_FIRST',
- "The library directive must appear before all other directives");
-
- static const ParserErrorCode LOCAL_FUNCTION_DECLARATION_MODIFIER =
- const ParserErrorCode(
- 'LOCAL_FUNCTION_DECLARATION_MODIFIER',
- "Local function declarations cannot specify any modifier");
-
- static const ParserErrorCode MISSING_ASSIGNABLE_SELECTOR =
- const ParserErrorCode(
- 'MISSING_ASSIGNABLE_SELECTOR',
- "Missing selector such as \".<identifier>\" or \"[0]\"");
-
- static const ParserErrorCode MISSING_ASSIGNMENT_IN_INITIALIZER =
- const ParserErrorCode(
- 'MISSING_ASSIGNMENT_IN_INITIALIZER',
- "Expected an assignment after the field name");
-
- static const ParserErrorCode MISSING_CATCH_OR_FINALLY = const ParserErrorCode(
- 'MISSING_CATCH_OR_FINALLY',
- "A try statement must have either a catch or finally clause");
-
- static const ParserErrorCode MISSING_CLASS_BODY = const ParserErrorCode(
- 'MISSING_CLASS_BODY',
- "A class definition must have a body, even if it is empty");
-
- static const ParserErrorCode MISSING_CLOSING_PARENTHESIS =
- const ParserErrorCode(
- 'MISSING_CLOSING_PARENTHESIS',
- "The closing parenthesis is missing");
-
- static const ParserErrorCode MISSING_CONST_FINAL_VAR_OR_TYPE =
- const ParserErrorCode(
- 'MISSING_CONST_FINAL_VAR_OR_TYPE',
- "Variables must be declared using the keywords 'const', 'final', 'var' or a type name");
-
- static const ParserErrorCode MISSING_ENUM_BODY = const ParserErrorCode(
- 'MISSING_ENUM_BODY',
- "An enum definition must have a body with at least one constant name");
-
- static const ParserErrorCode MISSING_EXPRESSION_IN_INITIALIZER =
- const ParserErrorCode(
- 'MISSING_EXPRESSION_IN_INITIALIZER',
- "Expected an expression after the assignment operator");
-
- static const ParserErrorCode MISSING_EXPRESSION_IN_THROW =
- const ParserErrorCode(
- 'MISSING_EXPRESSION_IN_THROW',
- "Throw expressions must compute the object to be thrown");
-
- static const ParserErrorCode MISSING_FUNCTION_BODY = const ParserErrorCode(
- 'MISSING_FUNCTION_BODY',
- "A function body must be provided");
-
- static const ParserErrorCode MISSING_FUNCTION_PARAMETERS =
- const ParserErrorCode(
- 'MISSING_FUNCTION_PARAMETERS',
- "Functions must have an explicit list of parameters");
-
- static const ParserErrorCode MISSING_METHOD_PARAMETERS =
- const ParserErrorCode(
- 'MISSING_METHOD_PARAMETERS',
- "Methods must have an explicit list of parameters");
-
- static const ParserErrorCode MISSING_GET = const ParserErrorCode(
- 'MISSING_GET',
- "Getters must have the keyword 'get' before the getter name");
-
- static const ParserErrorCode MISSING_IDENTIFIER =
- const ParserErrorCode('MISSING_IDENTIFIER', "Expected an identifier");
-
- static const ParserErrorCode MISSING_INITIALIZER =
- const ParserErrorCode('MISSING_INITIALIZER', "Expected an initializer");
-
- static const ParserErrorCode MISSING_KEYWORD_OPERATOR = const ParserErrorCode(
- 'MISSING_KEYWORD_OPERATOR',
- "Operator declarations must be preceeded by the keyword 'operator'");
-
- static const ParserErrorCode MISSING_NAME_IN_LIBRARY_DIRECTIVE =
- const ParserErrorCode(
- 'MISSING_NAME_IN_LIBRARY_DIRECTIVE',
- "Library directives must include a library name");
-
- static const ParserErrorCode MISSING_NAME_IN_PART_OF_DIRECTIVE =
- const ParserErrorCode(
- 'MISSING_NAME_IN_PART_OF_DIRECTIVE',
- "Library directives must include a library name");
-
- static const ParserErrorCode MISSING_PREFIX_IN_DEFERRED_IMPORT =
- const ParserErrorCode(
- 'MISSING_PREFIX_IN_DEFERRED_IMPORT',
- "Deferred imports must have a prefix");
-
- static const ParserErrorCode MISSING_STAR_AFTER_SYNC = const ParserErrorCode(
- 'MISSING_STAR_AFTER_SYNC',
- "The modifier 'sync' must be followed by a star ('*')",
- "Remove the modifier or add a star.");
-
- static const ParserErrorCode MISSING_STATEMENT =
- const ParserErrorCode('MISSING_STATEMENT', "Expected a statement");
-
- static const ParserErrorCode MISSING_TERMINATOR_FOR_PARAMETER_GROUP =
- const ParserErrorCode(
- 'MISSING_TERMINATOR_FOR_PARAMETER_GROUP',
- "There is no '{0}' to close the parameter group");
-
- static const ParserErrorCode MISSING_TYPEDEF_PARAMETERS =
- const ParserErrorCode(
- 'MISSING_TYPEDEF_PARAMETERS',
- "Type aliases for functions must have an explicit list of parameters");
-
- static const ParserErrorCode MISSING_VARIABLE_IN_FOR_EACH =
- const ParserErrorCode(
- 'MISSING_VARIABLE_IN_FOR_EACH',
- "A loop variable must be declared in a for-each loop before the 'in', but none were found");
-
- static const ParserErrorCode MIXED_PARAMETER_GROUPS = const ParserErrorCode(
- 'MIXED_PARAMETER_GROUPS',
- "Cannot have both positional and named parameters in a single parameter list");
-
- static const ParserErrorCode MULTIPLE_EXTENDS_CLAUSES = const ParserErrorCode(
- 'MULTIPLE_EXTENDS_CLAUSES',
- "Each class definition can have at most one extends clause");
-
- static const ParserErrorCode MULTIPLE_IMPLEMENTS_CLAUSES =
- const ParserErrorCode(
- 'MULTIPLE_IMPLEMENTS_CLAUSES',
- "Each class definition can have at most one implements clause");
-
- static const ParserErrorCode MULTIPLE_LIBRARY_DIRECTIVES =
- const ParserErrorCode(
- 'MULTIPLE_LIBRARY_DIRECTIVES',
- "Only one library directive may be declared in a file");
-
- static const ParserErrorCode MULTIPLE_NAMED_PARAMETER_GROUPS =
- const ParserErrorCode(
- 'MULTIPLE_NAMED_PARAMETER_GROUPS',
- "Cannot have multiple groups of named parameters in a single parameter list");
-
- static const ParserErrorCode MULTIPLE_PART_OF_DIRECTIVES =
- const ParserErrorCode(
- 'MULTIPLE_PART_OF_DIRECTIVES',
- "Only one part-of directive may be declared in a file");
-
- static const ParserErrorCode MULTIPLE_POSITIONAL_PARAMETER_GROUPS =
- const ParserErrorCode(
- 'MULTIPLE_POSITIONAL_PARAMETER_GROUPS',
- "Cannot have multiple groups of positional parameters in a single parameter list");
-
- static const ParserErrorCode MULTIPLE_VARIABLES_IN_FOR_EACH =
- const ParserErrorCode(
- 'MULTIPLE_VARIABLES_IN_FOR_EACH',
- "A single loop variable must be declared in a for-each loop before the 'in', but {0} were found");
-
- static const ParserErrorCode MULTIPLE_WITH_CLAUSES = const ParserErrorCode(
- 'MULTIPLE_WITH_CLAUSES',
- "Each class definition can have at most one with clause");
-
- static const ParserErrorCode NAMED_FUNCTION_EXPRESSION =
- const ParserErrorCode(
- 'NAMED_FUNCTION_EXPRESSION',
- "Function expressions cannot be named");
-
- static const ParserErrorCode NAMED_PARAMETER_OUTSIDE_GROUP =
- const ParserErrorCode(
- 'NAMED_PARAMETER_OUTSIDE_GROUP',
- "Named parameters must be enclosed in curly braces ('{' and '}')");
-
- static const ParserErrorCode NATIVE_CLAUSE_IN_NON_SDK_CODE =
- const ParserErrorCode(
- 'NATIVE_CLAUSE_IN_NON_SDK_CODE',
- "Native clause can only be used in the SDK and code that is loaded through native extensions");
-
- static const ParserErrorCode NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE =
- const ParserErrorCode(
- 'NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE',
- "Native functions can only be declared in the SDK and code that is loaded through native extensions");
-
- static const ParserErrorCode NON_CONSTRUCTOR_FACTORY = const ParserErrorCode(
- 'NON_CONSTRUCTOR_FACTORY',
- "Only constructors can be declared to be a 'factory'");
-
- static const ParserErrorCode NON_IDENTIFIER_LIBRARY_NAME =
- const ParserErrorCode(
- 'NON_IDENTIFIER_LIBRARY_NAME',
- "The name of a library must be an identifier");
-
- static const ParserErrorCode NON_PART_OF_DIRECTIVE_IN_PART =
- const ParserErrorCode(
- 'NON_PART_OF_DIRECTIVE_IN_PART',
- "The part-of directive must be the only directive in a part");
-
- static const ParserErrorCode NON_STRING_LITERAL_AS_URI =
- const ParserErrorCode(
- 'NON_STRING_LITERAL_AS_URI',
- "The URI must be a string literal",
- "Enclose the URI in either single or double quotes.");
-
- static const ParserErrorCode NON_USER_DEFINABLE_OPERATOR =
- const ParserErrorCode(
- 'NON_USER_DEFINABLE_OPERATOR',
- "The operator '{0}' is not user definable");
-
- static const ParserErrorCode NORMAL_BEFORE_OPTIONAL_PARAMETERS =
- const ParserErrorCode(
- 'NORMAL_BEFORE_OPTIONAL_PARAMETERS',
- "Normal parameters must occur before optional parameters");
-
- static const ParserErrorCode POSITIONAL_AFTER_NAMED_ARGUMENT =
- const ParserErrorCode(
- 'POSITIONAL_AFTER_NAMED_ARGUMENT',
- "Positional arguments must occur before named arguments");
-
- static const ParserErrorCode POSITIONAL_PARAMETER_OUTSIDE_GROUP =
- const ParserErrorCode(
- 'POSITIONAL_PARAMETER_OUTSIDE_GROUP',
- "Positional parameters must be enclosed in square brackets ('[' and ']')");
-
- static const ParserErrorCode REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR =
- const ParserErrorCode(
- 'REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR',
- "Only factory constructor can specify '=' redirection.");
-
- static const ParserErrorCode SETTER_IN_FUNCTION = const ParserErrorCode(
- 'SETTER_IN_FUNCTION',
- "Setters cannot be defined within methods or functions");
-
- static const ParserErrorCode STATIC_AFTER_CONST = const ParserErrorCode(
- 'STATIC_AFTER_CONST',
- "The modifier 'static' should be before the modifier 'const'");
-
- static const ParserErrorCode STATIC_AFTER_FINAL = const ParserErrorCode(
- 'STATIC_AFTER_FINAL',
- "The modifier 'static' should be before the modifier 'final'");
-
- static const ParserErrorCode STATIC_AFTER_VAR = const ParserErrorCode(
- 'STATIC_AFTER_VAR',
- "The modifier 'static' should be before the modifier 'var'");
-
- static const ParserErrorCode STATIC_CONSTRUCTOR =
- const ParserErrorCode('STATIC_CONSTRUCTOR', "Constructors cannot be static");
-
- static const ParserErrorCode STATIC_GETTER_WITHOUT_BODY =
- const ParserErrorCode(
- 'STATIC_GETTER_WITHOUT_BODY',
- "A 'static' getter must have a body");
-
- static const ParserErrorCode STATIC_OPERATOR =
- const ParserErrorCode('STATIC_OPERATOR', "Operators cannot be static");
-
- static const ParserErrorCode STATIC_SETTER_WITHOUT_BODY =
- const ParserErrorCode(
- 'STATIC_SETTER_WITHOUT_BODY',
- "A 'static' setter must have a body");
-
- static const ParserErrorCode STATIC_TOP_LEVEL_DECLARATION =
- const ParserErrorCode(
- 'STATIC_TOP_LEVEL_DECLARATION',
- "Top-level declarations cannot be declared to be 'static'");
-
- static const ParserErrorCode SWITCH_HAS_CASE_AFTER_DEFAULT_CASE =
- const ParserErrorCode(
- 'SWITCH_HAS_CASE_AFTER_DEFAULT_CASE',
- "The 'default' case should be the last case in a switch statement");
-
- static const ParserErrorCode SWITCH_HAS_MULTIPLE_DEFAULT_CASES =
- const ParserErrorCode(
- 'SWITCH_HAS_MULTIPLE_DEFAULT_CASES',
- "The 'default' case can only be declared once");
-
- static const ParserErrorCode TOP_LEVEL_OPERATOR = const ParserErrorCode(
- 'TOP_LEVEL_OPERATOR',
- "Operators must be declared within a class");
-
- static const ParserErrorCode TYPEDEF_IN_CLASS = const ParserErrorCode(
- 'TYPEDEF_IN_CLASS',
- "Function type aliases cannot be declared inside classes");
-
- static const ParserErrorCode UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP =
- const ParserErrorCode(
- 'UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP',
- "There is no '{0}' to open a parameter group");
-
- static const ParserErrorCode UNEXPECTED_TOKEN =
- const ParserErrorCode('UNEXPECTED_TOKEN', "Unexpected token '{0}'");
-
- static const ParserErrorCode WITH_BEFORE_EXTENDS = const ParserErrorCode(
- 'WITH_BEFORE_EXTENDS',
- "The extends clause must be before the with clause");
-
- static const ParserErrorCode WITH_WITHOUT_EXTENDS = const ParserErrorCode(
- 'WITH_WITHOUT_EXTENDS',
- "The with clause cannot be used without an extends clause");
-
- static const ParserErrorCode WRONG_SEPARATOR_FOR_NAMED_PARAMETER =
- const ParserErrorCode(
- 'WRONG_SEPARATOR_FOR_NAMED_PARAMETER',
- "The default value of a named parameter should be preceeded by ':'");
-
- static const ParserErrorCode WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER =
- const ParserErrorCode(
- 'WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER',
- "The default value of a positional parameter should be preceeded by '='");
-
- static const ParserErrorCode WRONG_TERMINATOR_FOR_PARAMETER_GROUP =
- const ParserErrorCode(
- 'WRONG_TERMINATOR_FOR_PARAMETER_GROUP',
- "Expected '{0}' to close parameter group");
-
- static const ParserErrorCode VAR_AND_TYPE = const ParserErrorCode(
- 'VAR_AND_TYPE',
- "Variables cannot be declared using both 'var' and a type name; remove the 'var'");
-
- static const ParserErrorCode VAR_AS_TYPE_NAME = const ParserErrorCode(
- 'VAR_AS_TYPE_NAME',
- "The keyword 'var' cannot be used as a type name");
-
- static const ParserErrorCode VAR_CLASS =
- const ParserErrorCode('VAR_CLASS', "Classes cannot be declared to be 'var'");
-
- static const ParserErrorCode VAR_ENUM =
- const ParserErrorCode('VAR_ENUM', "Enums cannot be declared to be 'var'");
-
- static const ParserErrorCode VAR_RETURN_TYPE =
- const ParserErrorCode('VAR_RETURN_TYPE', "The return type cannot be 'var'");
-
- static const ParserErrorCode VAR_TYPEDEF = const ParserErrorCode(
- 'VAR_TYPEDEF',
- "Type aliases cannot be declared to be 'var'");
-
- static const ParserErrorCode VOID_PARAMETER = const ParserErrorCode(
- 'VOID_PARAMETER',
- "Parameters cannot have a type of 'void'");
-
- static const ParserErrorCode VOID_VARIABLE = const ParserErrorCode(
- 'VOID_VARIABLE',
- "Variables cannot have a type of 'void'");
-
- /**
- * Initialize a newly created error code to have the given [name]. The message
- * associated with the error will be created from the given [message]
- * template. The correction associated with the error will be created from the
- * given [correction] template.
- */
- const ParserErrorCode(String name, String message, [String correction])
- : super(name, message, correction);
-
- @override
- ErrorSeverity get errorSeverity => ErrorSeverity.ERROR;
-
- @override
- ErrorType get type => ErrorType.SYNTACTIC_ERROR;
-}
-
-
-/**
* Instances of the class `SyntheticKeywordToken` implement a synthetic keyword token.
*/
class Parser_SyntheticKeywordToken extends KeywordToken {
@@ -10739,6 +9192,623 @@
Token copy() => new Parser_SyntheticKeywordToken(keyword, offset);
}
+/**
+ * The enumeration `ParserErrorCode` defines the error codes used for errors
+ * detected by the parser. The convention for this class is for the name of the
+ * error code to indicate the problem that caused the error to be generated and
+ * for the error message to explain what is wrong and, when appropriate, how the
+ * problem can be corrected.
+ */
+class ParserErrorCode extends ErrorCode {
+ static const ParserErrorCode ABSTRACT_CLASS_MEMBER = const ParserErrorCode(
+ 'ABSTRACT_CLASS_MEMBER',
+ "Members of classes cannot be declared to be 'abstract'");
+
+ static const ParserErrorCode ABSTRACT_ENUM = const ParserErrorCode(
+ 'ABSTRACT_ENUM', "Enums cannot be declared to be 'abstract'");
+
+ static const ParserErrorCode ABSTRACT_STATIC_METHOD = const ParserErrorCode(
+ 'ABSTRACT_STATIC_METHOD',
+ "Static methods cannot be declared to be 'abstract'");
+
+ static const ParserErrorCode ABSTRACT_TOP_LEVEL_FUNCTION =
+ const ParserErrorCode('ABSTRACT_TOP_LEVEL_FUNCTION',
+ "Top-level functions cannot be declared to be 'abstract'");
+
+ static const ParserErrorCode ABSTRACT_TOP_LEVEL_VARIABLE =
+ const ParserErrorCode('ABSTRACT_TOP_LEVEL_VARIABLE',
+ "Top-level variables cannot be declared to be 'abstract'");
+
+ static const ParserErrorCode ABSTRACT_TYPEDEF = const ParserErrorCode(
+ 'ABSTRACT_TYPEDEF', "Type aliases cannot be declared to be 'abstract'");
+
+ static const ParserErrorCode ANNOTATION_ON_ENUM_CONSTANT =
+ const ParserErrorCode('ANNOTATION_ON_ENUM_CONSTANT',
+ "Enum constants cannot have annotations");
+
+ static const ParserErrorCode ASSERT_DOES_NOT_TAKE_ASSIGNMENT =
+ const ParserErrorCode('ASSERT_DOES_NOT_TAKE_ASSIGNMENT',
+ "Assert cannot be called on an assignment");
+
+ static const ParserErrorCode ASSERT_DOES_NOT_TAKE_CASCADE =
+ const ParserErrorCode(
+ 'ASSERT_DOES_NOT_TAKE_CASCADE', "Assert cannot be called on cascade");
+
+ static const ParserErrorCode ASSERT_DOES_NOT_TAKE_THROW =
+ const ParserErrorCode(
+ 'ASSERT_DOES_NOT_TAKE_THROW', "Assert cannot be called on throws");
+
+ static const ParserErrorCode ASSERT_DOES_NOT_TAKE_RETHROW =
+ const ParserErrorCode('ASSERT_DOES_NOT_TAKE_RETHROW',
+ "Assert cannot be called on rethrows");
+
+ /**
+ * 16.32 Identifier Reference: It is a compile-time error if any of the
+ * identifiers async, await, or yield is used as an identifier in a function
+ * body marked with either async, async*, or sync*.
+ */
+ static const ParserErrorCode ASYNC_KEYWORD_USED_AS_IDENTIFIER =
+ const ParserErrorCode('ASYNC_KEYWORD_USED_AS_IDENTIFIER',
+ "The keywords 'async', 'await', and 'yield' may not be used as identifiers in an asynchronous or generator function.");
+
+ static const ParserErrorCode BREAK_OUTSIDE_OF_LOOP = const ParserErrorCode(
+ 'BREAK_OUTSIDE_OF_LOOP',
+ "A break statement cannot be used outside of a loop or switch statement");
+
+ static const ParserErrorCode CLASS_IN_CLASS = const ParserErrorCode(
+ 'CLASS_IN_CLASS', "Classes cannot be declared inside other classes");
+
+ static const ParserErrorCode COLON_IN_PLACE_OF_IN = const ParserErrorCode(
+ 'COLON_IN_PLACE_OF_IN', "For-in loops use 'in' rather than a colon");
+
+ static const ParserErrorCode CONST_AND_FINAL = const ParserErrorCode(
+ 'CONST_AND_FINAL',
+ "Members cannot be declared to be both 'const' and 'final'");
+
+ static const ParserErrorCode CONST_AND_VAR = const ParserErrorCode(
+ 'CONST_AND_VAR',
+ "Members cannot be declared to be both 'const' and 'var'");
+
+ static const ParserErrorCode CONST_CLASS = const ParserErrorCode(
+ 'CONST_CLASS', "Classes cannot be declared to be 'const'");
+
+ static const ParserErrorCode CONST_CONSTRUCTOR_WITH_BODY =
+ const ParserErrorCode('CONST_CONSTRUCTOR_WITH_BODY',
+ "'const' constructors cannot have a body");
+
+ static const ParserErrorCode CONST_ENUM = const ParserErrorCode(
+ 'CONST_ENUM', "Enums cannot be declared to be 'const'");
+
+ static const ParserErrorCode CONST_FACTORY = const ParserErrorCode(
+ 'CONST_FACTORY',
+ "Only redirecting factory constructors can be declared to be 'const'");
+
+ static const ParserErrorCode CONST_METHOD = const ParserErrorCode(
+ 'CONST_METHOD',
+ "Getters, setters and methods cannot be declared to be 'const'");
+
+ static const ParserErrorCode CONST_TYPEDEF = const ParserErrorCode(
+ 'CONST_TYPEDEF', "Type aliases cannot be declared to be 'const'");
+
+ static const ParserErrorCode CONSTRUCTOR_WITH_RETURN_TYPE =
+ const ParserErrorCode('CONSTRUCTOR_WITH_RETURN_TYPE',
+ "Constructors cannot have a return type");
+
+ static const ParserErrorCode CONTINUE_OUTSIDE_OF_LOOP = const ParserErrorCode(
+ 'CONTINUE_OUTSIDE_OF_LOOP',
+ "A continue statement cannot be used outside of a loop or switch statement");
+
+ static const ParserErrorCode CONTINUE_WITHOUT_LABEL_IN_CASE =
+ const ParserErrorCode('CONTINUE_WITHOUT_LABEL_IN_CASE',
+ "A continue statement in a switch statement must have a label as a target");
+
+ static const ParserErrorCode DEPRECATED_CLASS_TYPE_ALIAS =
+ const ParserErrorCode('DEPRECATED_CLASS_TYPE_ALIAS',
+ "The 'typedef' mixin application was replaced with 'class'");
+
+ static const ParserErrorCode DIRECTIVE_AFTER_DECLARATION =
+ const ParserErrorCode('DIRECTIVE_AFTER_DECLARATION',
+ "Directives must appear before any declarations");
+
+ static const ParserErrorCode DUPLICATE_LABEL_IN_SWITCH_STATEMENT =
+ const ParserErrorCode('DUPLICATE_LABEL_IN_SWITCH_STATEMENT',
+ "The label {0} was already used in this switch statement");
+
+ static const ParserErrorCode DUPLICATED_MODIFIER = const ParserErrorCode(
+ 'DUPLICATED_MODIFIER', "The modifier '{0}' was already specified.");
+
+ static const ParserErrorCode EMPTY_ENUM_BODY = const ParserErrorCode(
+ 'EMPTY_ENUM_BODY', "An enum must declare at least one constant name");
+
+ static const ParserErrorCode EQUALITY_CANNOT_BE_EQUALITY_OPERAND =
+ const ParserErrorCode('EQUALITY_CANNOT_BE_EQUALITY_OPERAND',
+ "Equality expression cannot be operand of another equality expression.");
+
+ static const ParserErrorCode EXPECTED_CASE_OR_DEFAULT = const ParserErrorCode(
+ 'EXPECTED_CASE_OR_DEFAULT', "Expected 'case' or 'default'");
+
+ static const ParserErrorCode EXPECTED_CLASS_MEMBER =
+ const ParserErrorCode('EXPECTED_CLASS_MEMBER', "Expected a class member");
+
+ static const ParserErrorCode EXPECTED_EXECUTABLE = const ParserErrorCode(
+ 'EXPECTED_EXECUTABLE',
+ "Expected a method, getter, setter or operator declaration");
+
+ static const ParserErrorCode EXPECTED_LIST_OR_MAP_LITERAL =
+ const ParserErrorCode(
+ 'EXPECTED_LIST_OR_MAP_LITERAL', "Expected a list or map literal");
+
+ static const ParserErrorCode EXPECTED_STRING_LITERAL = const ParserErrorCode(
+ 'EXPECTED_STRING_LITERAL', "Expected a string literal");
+
+ static const ParserErrorCode EXPECTED_TOKEN =
+ const ParserErrorCode('EXPECTED_TOKEN', "Expected to find '{0}'");
+
+ static const ParserErrorCode EXPECTED_TYPE_NAME =
+ const ParserErrorCode('EXPECTED_TYPE_NAME', "Expected a type name");
+
+ static const ParserErrorCode EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE =
+ const ParserErrorCode('EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
+ "Export directives must preceed part directives");
+
+ static const ParserErrorCode EXTERNAL_AFTER_CONST = const ParserErrorCode(
+ 'EXTERNAL_AFTER_CONST',
+ "The modifier 'external' should be before the modifier 'const'");
+
+ static const ParserErrorCode EXTERNAL_AFTER_FACTORY = const ParserErrorCode(
+ 'EXTERNAL_AFTER_FACTORY',
+ "The modifier 'external' should be before the modifier 'factory'");
+
+ static const ParserErrorCode EXTERNAL_AFTER_STATIC = const ParserErrorCode(
+ 'EXTERNAL_AFTER_STATIC',
+ "The modifier 'external' should be before the modifier 'static'");
+
+ static const ParserErrorCode EXTERNAL_CLASS = const ParserErrorCode(
+ 'EXTERNAL_CLASS', "Classes cannot be declared to be 'external'");
+
+ static const ParserErrorCode EXTERNAL_CONSTRUCTOR_WITH_BODY =
+ const ParserErrorCode('EXTERNAL_CONSTRUCTOR_WITH_BODY',
+ "External constructors cannot have a body");
+
+ static const ParserErrorCode EXTERNAL_ENUM = const ParserErrorCode(
+ 'EXTERNAL_ENUM', "Enums cannot be declared to be 'external'");
+
+ static const ParserErrorCode EXTERNAL_FIELD = const ParserErrorCode(
+ 'EXTERNAL_FIELD', "Fields cannot be declared to be 'external'");
+
+ static const ParserErrorCode EXTERNAL_GETTER_WITH_BODY =
+ const ParserErrorCode(
+ 'EXTERNAL_GETTER_WITH_BODY', "External getters cannot have a body");
+
+ static const ParserErrorCode EXTERNAL_METHOD_WITH_BODY =
+ const ParserErrorCode(
+ 'EXTERNAL_METHOD_WITH_BODY', "External methods cannot have a body");
+
+ static const ParserErrorCode EXTERNAL_OPERATOR_WITH_BODY =
+ const ParserErrorCode('EXTERNAL_OPERATOR_WITH_BODY',
+ "External operators cannot have a body");
+
+ static const ParserErrorCode EXTERNAL_SETTER_WITH_BODY =
+ const ParserErrorCode(
+ 'EXTERNAL_SETTER_WITH_BODY', "External setters cannot have a body");
+
+ static const ParserErrorCode EXTERNAL_TYPEDEF = const ParserErrorCode(
+ 'EXTERNAL_TYPEDEF', "Type aliases cannot be declared to be 'external'");
+
+ static const ParserErrorCode FACTORY_TOP_LEVEL_DECLARATION =
+ const ParserErrorCode('FACTORY_TOP_LEVEL_DECLARATION',
+ "Top-level declarations cannot be declared to be 'factory'");
+
+ static const ParserErrorCode FACTORY_WITH_INITIALIZERS =
+ const ParserErrorCode('FACTORY_WITH_INITIALIZERS',
+ "A 'factory' constructor cannot have initializers",
+ "Either remove the 'factory' keyword to make this a generative "
+ "constructor or remove the initializers.");
+
+ static const ParserErrorCode FACTORY_WITHOUT_BODY = const ParserErrorCode(
+ 'FACTORY_WITHOUT_BODY',
+ "A non-redirecting 'factory' constructor must have a body");
+
+ static const ParserErrorCode FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR =
+ const ParserErrorCode('FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
+ "Field initializers can only be used in a constructor");
+
+ static const ParserErrorCode FINAL_AND_VAR = const ParserErrorCode(
+ 'FINAL_AND_VAR',
+ "Members cannot be declared to be both 'final' and 'var'");
+
+ static const ParserErrorCode FINAL_CLASS = const ParserErrorCode(
+ 'FINAL_CLASS', "Classes cannot be declared to be 'final'");
+
+ static const ParserErrorCode FINAL_CONSTRUCTOR = const ParserErrorCode(
+ 'FINAL_CONSTRUCTOR', "A constructor cannot be declared to be 'final'");
+
+ static const ParserErrorCode FINAL_ENUM = const ParserErrorCode(
+ 'FINAL_ENUM', "Enums cannot be declared to be 'final'");
+
+ static const ParserErrorCode FINAL_METHOD = const ParserErrorCode(
+ 'FINAL_METHOD',
+ "Getters, setters and methods cannot be declared to be 'final'");
+
+ static const ParserErrorCode FINAL_TYPEDEF = const ParserErrorCode(
+ 'FINAL_TYPEDEF', "Type aliases cannot be declared to be 'final'");
+
+ static const ParserErrorCode FUNCTION_TYPED_PARAMETER_VAR = const ParserErrorCode(
+ 'FUNCTION_TYPED_PARAMETER_VAR',
+ "Function typed parameters cannot specify 'const', 'final' or 'var' instead of return type");
+
+ static const ParserErrorCode GETTER_IN_FUNCTION = const ParserErrorCode(
+ 'GETTER_IN_FUNCTION',
+ "Getters cannot be defined within methods or functions");
+
+ static const ParserErrorCode GETTER_WITH_PARAMETERS = const ParserErrorCode(
+ 'GETTER_WITH_PARAMETERS',
+ "Getter should be declared without a parameter list");
+
+ static const ParserErrorCode ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE =
+ const ParserErrorCode('ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE',
+ "Illegal assignment to non-assignable expression");
+
+ static const ParserErrorCode IMPLEMENTS_BEFORE_EXTENDS =
+ const ParserErrorCode('IMPLEMENTS_BEFORE_EXTENDS',
+ "The extends clause must be before the implements clause");
+
+ static const ParserErrorCode IMPLEMENTS_BEFORE_WITH = const ParserErrorCode(
+ 'IMPLEMENTS_BEFORE_WITH',
+ "The with clause must be before the implements clause");
+
+ static const ParserErrorCode IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE =
+ const ParserErrorCode('IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
+ "Import directives must preceed part directives");
+
+ static const ParserErrorCode INITIALIZED_VARIABLE_IN_FOR_EACH =
+ const ParserErrorCode('INITIALIZED_VARIABLE_IN_FOR_EACH',
+ "The loop variable in a for-each loop cannot be initialized");
+
+ static const ParserErrorCode INVALID_AWAIT_IN_FOR = const ParserErrorCode(
+ 'INVALID_AWAIT_IN_FOR',
+ "The modifier 'await' is not allowed for a normal 'for' statement",
+ "Remove the keyword or use a for-each statement.");
+
+ static const ParserErrorCode INVALID_CODE_POINT = const ParserErrorCode(
+ 'INVALID_CODE_POINT',
+ "The escape sequence '{0}' is not a valid code point");
+
+ static const ParserErrorCode INVALID_COMMENT_REFERENCE = const ParserErrorCode(
+ 'INVALID_COMMENT_REFERENCE',
+ "Comment references should contain a possibly prefixed identifier and can start with 'new', but should not contain anything else");
+
+ static const ParserErrorCode INVALID_HEX_ESCAPE = const ParserErrorCode(
+ 'INVALID_HEX_ESCAPE',
+ "An escape sequence starting with '\\x' must be followed by 2 hexidecimal digits");
+
+ static const ParserErrorCode INVALID_OPERATOR = const ParserErrorCode(
+ 'INVALID_OPERATOR', "The string '{0}' is not a valid operator");
+
+ static const ParserErrorCode INVALID_OPERATOR_FOR_SUPER =
+ const ParserErrorCode('INVALID_OPERATOR_FOR_SUPER',
+ "The operator '{0}' cannot be used with 'super'");
+
+ static const ParserErrorCode INVALID_STAR_AFTER_ASYNC = const ParserErrorCode(
+ 'INVALID_STAR_AFTER_ASYNC',
+ "The modifier 'async*' is not allowed for an expression function body",
+ "Convert the body to a block.");
+
+ static const ParserErrorCode INVALID_SYNC = const ParserErrorCode(
+ 'INVALID_SYNC',
+ "The modifier 'sync' is not allowed for an exrpression function body",
+ "Convert the body to a block.");
+
+ static const ParserErrorCode INVALID_UNICODE_ESCAPE = const ParserErrorCode(
+ 'INVALID_UNICODE_ESCAPE',
+ "An escape sequence starting with '\\u' must be followed by 4 hexidecimal digits or from 1 to 6 digits between '{' and '}'");
+
+ static const ParserErrorCode LIBRARY_DIRECTIVE_NOT_FIRST =
+ const ParserErrorCode('LIBRARY_DIRECTIVE_NOT_FIRST',
+ "The library directive must appear before all other directives");
+
+ static const ParserErrorCode LOCAL_FUNCTION_DECLARATION_MODIFIER =
+ const ParserErrorCode('LOCAL_FUNCTION_DECLARATION_MODIFIER',
+ "Local function declarations cannot specify any modifier");
+
+ static const ParserErrorCode MISSING_ASSIGNABLE_SELECTOR =
+ const ParserErrorCode('MISSING_ASSIGNABLE_SELECTOR',
+ "Missing selector such as \".<identifier>\" or \"[0]\"");
+
+ static const ParserErrorCode MISSING_ASSIGNMENT_IN_INITIALIZER =
+ const ParserErrorCode('MISSING_ASSIGNMENT_IN_INITIALIZER',
+ "Expected an assignment after the field name");
+
+ static const ParserErrorCode MISSING_CATCH_OR_FINALLY = const ParserErrorCode(
+ 'MISSING_CATCH_OR_FINALLY',
+ "A try statement must have either a catch or finally clause");
+
+ static const ParserErrorCode MISSING_CLASS_BODY = const ParserErrorCode(
+ 'MISSING_CLASS_BODY',
+ "A class definition must have a body, even if it is empty");
+
+ static const ParserErrorCode MISSING_CLOSING_PARENTHESIS =
+ const ParserErrorCode(
+ 'MISSING_CLOSING_PARENTHESIS', "The closing parenthesis is missing");
+
+ static const ParserErrorCode MISSING_CONST_FINAL_VAR_OR_TYPE =
+ const ParserErrorCode('MISSING_CONST_FINAL_VAR_OR_TYPE',
+ "Variables must be declared using the keywords 'const', 'final', 'var' or a type name");
+
+ static const ParserErrorCode MISSING_ENUM_BODY = const ParserErrorCode(
+ 'MISSING_ENUM_BODY',
+ "An enum definition must have a body with at least one constant name");
+
+ static const ParserErrorCode MISSING_EXPRESSION_IN_INITIALIZER =
+ const ParserErrorCode('MISSING_EXPRESSION_IN_INITIALIZER',
+ "Expected an expression after the assignment operator");
+
+ static const ParserErrorCode MISSING_EXPRESSION_IN_THROW =
+ const ParserErrorCode('MISSING_EXPRESSION_IN_THROW',
+ "Throw expressions must compute the object to be thrown");
+
+ static const ParserErrorCode MISSING_FUNCTION_BODY = const ParserErrorCode(
+ 'MISSING_FUNCTION_BODY', "A function body must be provided");
+
+ static const ParserErrorCode MISSING_FUNCTION_PARAMETERS =
+ const ParserErrorCode('MISSING_FUNCTION_PARAMETERS',
+ "Functions must have an explicit list of parameters");
+
+ static const ParserErrorCode MISSING_METHOD_PARAMETERS =
+ const ParserErrorCode('MISSING_METHOD_PARAMETERS',
+ "Methods must have an explicit list of parameters");
+
+ static const ParserErrorCode MISSING_GET = const ParserErrorCode(
+ 'MISSING_GET',
+ "Getters must have the keyword 'get' before the getter name");
+
+ static const ParserErrorCode MISSING_IDENTIFIER =
+ const ParserErrorCode('MISSING_IDENTIFIER', "Expected an identifier");
+
+ static const ParserErrorCode MISSING_INITIALIZER =
+ const ParserErrorCode('MISSING_INITIALIZER', "Expected an initializer");
+
+ static const ParserErrorCode MISSING_KEYWORD_OPERATOR = const ParserErrorCode(
+ 'MISSING_KEYWORD_OPERATOR',
+ "Operator declarations must be preceeded by the keyword 'operator'");
+
+ static const ParserErrorCode MISSING_NAME_IN_LIBRARY_DIRECTIVE =
+ const ParserErrorCode('MISSING_NAME_IN_LIBRARY_DIRECTIVE',
+ "Library directives must include a library name");
+
+ static const ParserErrorCode MISSING_NAME_IN_PART_OF_DIRECTIVE =
+ const ParserErrorCode('MISSING_NAME_IN_PART_OF_DIRECTIVE',
+ "Library directives must include a library name");
+
+ static const ParserErrorCode MISSING_PREFIX_IN_DEFERRED_IMPORT =
+ const ParserErrorCode('MISSING_PREFIX_IN_DEFERRED_IMPORT',
+ "Deferred imports must have a prefix");
+
+ static const ParserErrorCode MISSING_STAR_AFTER_SYNC = const ParserErrorCode(
+ 'MISSING_STAR_AFTER_SYNC',
+ "The modifier 'sync' must be followed by a star ('*')",
+ "Remove the modifier or add a star.");
+
+ static const ParserErrorCode MISSING_STATEMENT =
+ const ParserErrorCode('MISSING_STATEMENT', "Expected a statement");
+
+ static const ParserErrorCode MISSING_TERMINATOR_FOR_PARAMETER_GROUP =
+ const ParserErrorCode('MISSING_TERMINATOR_FOR_PARAMETER_GROUP',
+ "There is no '{0}' to close the parameter group");
+
+ static const ParserErrorCode MISSING_TYPEDEF_PARAMETERS =
+ const ParserErrorCode('MISSING_TYPEDEF_PARAMETERS',
+ "Type aliases for functions must have an explicit list of parameters");
+
+ static const ParserErrorCode MISSING_VARIABLE_IN_FOR_EACH = const ParserErrorCode(
+ 'MISSING_VARIABLE_IN_FOR_EACH',
+ "A loop variable must be declared in a for-each loop before the 'in', but none were found");
+
+ static const ParserErrorCode MIXED_PARAMETER_GROUPS = const ParserErrorCode(
+ 'MIXED_PARAMETER_GROUPS',
+ "Cannot have both positional and named parameters in a single parameter list");
+
+ static const ParserErrorCode MULTIPLE_EXTENDS_CLAUSES = const ParserErrorCode(
+ 'MULTIPLE_EXTENDS_CLAUSES',
+ "Each class definition can have at most one extends clause");
+
+ static const ParserErrorCode MULTIPLE_IMPLEMENTS_CLAUSES =
+ const ParserErrorCode('MULTIPLE_IMPLEMENTS_CLAUSES',
+ "Each class definition can have at most one implements clause");
+
+ static const ParserErrorCode MULTIPLE_LIBRARY_DIRECTIVES =
+ const ParserErrorCode('MULTIPLE_LIBRARY_DIRECTIVES',
+ "Only one library directive may be declared in a file");
+
+ static const ParserErrorCode MULTIPLE_NAMED_PARAMETER_GROUPS =
+ const ParserErrorCode('MULTIPLE_NAMED_PARAMETER_GROUPS',
+ "Cannot have multiple groups of named parameters in a single parameter list");
+
+ static const ParserErrorCode MULTIPLE_PART_OF_DIRECTIVES =
+ const ParserErrorCode('MULTIPLE_PART_OF_DIRECTIVES',
+ "Only one part-of directive may be declared in a file");
+
+ static const ParserErrorCode MULTIPLE_POSITIONAL_PARAMETER_GROUPS =
+ const ParserErrorCode('MULTIPLE_POSITIONAL_PARAMETER_GROUPS',
+ "Cannot have multiple groups of positional parameters in a single parameter list");
+
+ static const ParserErrorCode MULTIPLE_VARIABLES_IN_FOR_EACH =
+ const ParserErrorCode('MULTIPLE_VARIABLES_IN_FOR_EACH',
+ "A single loop variable must be declared in a for-each loop before the 'in', but {0} were found");
+
+ static const ParserErrorCode MULTIPLE_WITH_CLAUSES = const ParserErrorCode(
+ 'MULTIPLE_WITH_CLAUSES',
+ "Each class definition can have at most one with clause");
+
+ static const ParserErrorCode NAMED_FUNCTION_EXPRESSION =
+ const ParserErrorCode(
+ 'NAMED_FUNCTION_EXPRESSION', "Function expressions cannot be named");
+
+ static const ParserErrorCode NAMED_PARAMETER_OUTSIDE_GROUP =
+ const ParserErrorCode('NAMED_PARAMETER_OUTSIDE_GROUP',
+ "Named parameters must be enclosed in curly braces ('{' and '}')");
+
+ static const ParserErrorCode NATIVE_CLAUSE_IN_NON_SDK_CODE =
+ const ParserErrorCode('NATIVE_CLAUSE_IN_NON_SDK_CODE',
+ "Native clause can only be used in the SDK and code that is loaded through native extensions");
+
+ static const ParserErrorCode NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE =
+ const ParserErrorCode('NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE',
+ "Native functions can only be declared in the SDK and code that is loaded through native extensions");
+
+ static const ParserErrorCode NON_CONSTRUCTOR_FACTORY = const ParserErrorCode(
+ 'NON_CONSTRUCTOR_FACTORY',
+ "Only constructors can be declared to be a 'factory'");
+
+ static const ParserErrorCode NON_IDENTIFIER_LIBRARY_NAME =
+ const ParserErrorCode('NON_IDENTIFIER_LIBRARY_NAME',
+ "The name of a library must be an identifier");
+
+ static const ParserErrorCode NON_PART_OF_DIRECTIVE_IN_PART =
+ const ParserErrorCode('NON_PART_OF_DIRECTIVE_IN_PART',
+ "The part-of directive must be the only directive in a part");
+
+ static const ParserErrorCode NON_STRING_LITERAL_AS_URI =
+ const ParserErrorCode('NON_STRING_LITERAL_AS_URI',
+ "The URI must be a string literal",
+ "Enclose the URI in either single or double quotes.");
+
+ static const ParserErrorCode NON_USER_DEFINABLE_OPERATOR =
+ const ParserErrorCode('NON_USER_DEFINABLE_OPERATOR',
+ "The operator '{0}' is not user definable");
+
+ static const ParserErrorCode NORMAL_BEFORE_OPTIONAL_PARAMETERS =
+ const ParserErrorCode('NORMAL_BEFORE_OPTIONAL_PARAMETERS',
+ "Normal parameters must occur before optional parameters");
+
+ static const ParserErrorCode POSITIONAL_AFTER_NAMED_ARGUMENT =
+ const ParserErrorCode('POSITIONAL_AFTER_NAMED_ARGUMENT',
+ "Positional arguments must occur before named arguments");
+
+ static const ParserErrorCode POSITIONAL_PARAMETER_OUTSIDE_GROUP =
+ const ParserErrorCode('POSITIONAL_PARAMETER_OUTSIDE_GROUP',
+ "Positional parameters must be enclosed in square brackets ('[' and ']')");
+
+ static const ParserErrorCode REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR =
+ const ParserErrorCode('REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR',
+ "Only factory constructor can specify '=' redirection.");
+
+ static const ParserErrorCode SETTER_IN_FUNCTION = const ParserErrorCode(
+ 'SETTER_IN_FUNCTION',
+ "Setters cannot be defined within methods or functions");
+
+ static const ParserErrorCode STATIC_AFTER_CONST = const ParserErrorCode(
+ 'STATIC_AFTER_CONST',
+ "The modifier 'static' should be before the modifier 'const'");
+
+ static const ParserErrorCode STATIC_AFTER_FINAL = const ParserErrorCode(
+ 'STATIC_AFTER_FINAL',
+ "The modifier 'static' should be before the modifier 'final'");
+
+ static const ParserErrorCode STATIC_AFTER_VAR = const ParserErrorCode(
+ 'STATIC_AFTER_VAR',
+ "The modifier 'static' should be before the modifier 'var'");
+
+ static const ParserErrorCode STATIC_CONSTRUCTOR = const ParserErrorCode(
+ 'STATIC_CONSTRUCTOR', "Constructors cannot be static");
+
+ static const ParserErrorCode STATIC_GETTER_WITHOUT_BODY =
+ const ParserErrorCode(
+ 'STATIC_GETTER_WITHOUT_BODY', "A 'static' getter must have a body");
+
+ static const ParserErrorCode STATIC_OPERATOR =
+ const ParserErrorCode('STATIC_OPERATOR', "Operators cannot be static");
+
+ static const ParserErrorCode STATIC_SETTER_WITHOUT_BODY =
+ const ParserErrorCode(
+ 'STATIC_SETTER_WITHOUT_BODY', "A 'static' setter must have a body");
+
+ static const ParserErrorCode STATIC_TOP_LEVEL_DECLARATION =
+ const ParserErrorCode('STATIC_TOP_LEVEL_DECLARATION',
+ "Top-level declarations cannot be declared to be 'static'");
+
+ static const ParserErrorCode SWITCH_HAS_CASE_AFTER_DEFAULT_CASE =
+ const ParserErrorCode('SWITCH_HAS_CASE_AFTER_DEFAULT_CASE',
+ "The 'default' case should be the last case in a switch statement");
+
+ static const ParserErrorCode SWITCH_HAS_MULTIPLE_DEFAULT_CASES =
+ const ParserErrorCode('SWITCH_HAS_MULTIPLE_DEFAULT_CASES',
+ "The 'default' case can only be declared once");
+
+ static const ParserErrorCode TOP_LEVEL_OPERATOR = const ParserErrorCode(
+ 'TOP_LEVEL_OPERATOR', "Operators must be declared within a class");
+
+ static const ParserErrorCode TYPEDEF_IN_CLASS = const ParserErrorCode(
+ 'TYPEDEF_IN_CLASS',
+ "Function type aliases cannot be declared inside classes");
+
+ static const ParserErrorCode UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP =
+ const ParserErrorCode('UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP',
+ "There is no '{0}' to open a parameter group");
+
+ static const ParserErrorCode UNEXPECTED_TOKEN =
+ const ParserErrorCode('UNEXPECTED_TOKEN', "Unexpected token '{0}'");
+
+ static const ParserErrorCode WITH_BEFORE_EXTENDS = const ParserErrorCode(
+ 'WITH_BEFORE_EXTENDS',
+ "The extends clause must be before the with clause");
+
+ static const ParserErrorCode WITH_WITHOUT_EXTENDS = const ParserErrorCode(
+ 'WITH_WITHOUT_EXTENDS',
+ "The with clause cannot be used without an extends clause");
+
+ static const ParserErrorCode WRONG_SEPARATOR_FOR_NAMED_PARAMETER =
+ const ParserErrorCode('WRONG_SEPARATOR_FOR_NAMED_PARAMETER',
+ "The default value of a named parameter should be preceeded by ':'");
+
+ static const ParserErrorCode WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER =
+ const ParserErrorCode('WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER',
+ "The default value of a positional parameter should be preceeded by '='");
+
+ static const ParserErrorCode WRONG_TERMINATOR_FOR_PARAMETER_GROUP =
+ const ParserErrorCode('WRONG_TERMINATOR_FOR_PARAMETER_GROUP',
+ "Expected '{0}' to close parameter group");
+
+ static const ParserErrorCode VAR_AND_TYPE = const ParserErrorCode(
+ 'VAR_AND_TYPE',
+ "Variables cannot be declared using both 'var' and a type name; remove the 'var'");
+
+ static const ParserErrorCode VAR_AS_TYPE_NAME = const ParserErrorCode(
+ 'VAR_AS_TYPE_NAME', "The keyword 'var' cannot be used as a type name");
+
+ static const ParserErrorCode VAR_CLASS = const ParserErrorCode(
+ 'VAR_CLASS', "Classes cannot be declared to be 'var'");
+
+ static const ParserErrorCode VAR_ENUM =
+ const ParserErrorCode('VAR_ENUM', "Enums cannot be declared to be 'var'");
+
+ static const ParserErrorCode VAR_RETURN_TYPE = const ParserErrorCode(
+ 'VAR_RETURN_TYPE', "The return type cannot be 'var'");
+
+ static const ParserErrorCode VAR_TYPEDEF = const ParserErrorCode(
+ 'VAR_TYPEDEF', "Type aliases cannot be declared to be 'var'");
+
+ static const ParserErrorCode VOID_PARAMETER = const ParserErrorCode(
+ 'VOID_PARAMETER', "Parameters cannot have a type of 'void'");
+
+ static const ParserErrorCode VOID_VARIABLE = const ParserErrorCode(
+ 'VOID_VARIABLE', "Variables cannot have a type of 'void'");
+
+ /**
+ * Initialize a newly created error code to have the given [name]. The message
+ * associated with the error will be created from the given [message]
+ * template. The correction associated with the error will be created from the
+ * given [correction] template.
+ */
+ const ParserErrorCode(String name, String message, [String correction])
+ : super(name, message, correction);
+
+ @override
+ ErrorSeverity get errorSeverity => ErrorSeverity.ERROR;
+
+ @override
+ ErrorType get type => ErrorType.SYNTACTIC_ERROR;
+}
/**
* Instances of the class `ResolutionCopier` copies resolution information from one AST
@@ -10761,8 +9831,7 @@
@override
bool visitAnnotation(Annotation node) {
Annotation toNode = this._toNode as Annotation;
- if (_and(
- _isEqualTokens(node.atSign, toNode.atSign),
+ if (_and(_isEqualTokens(node.atSign, toNode.atSign),
_isEqualNodes(node.name, toNode.name),
_isEqualTokens(node.period, toNode.period),
_isEqualNodes(node.constructorName, toNode.constructorName),
@@ -10776,8 +9845,7 @@
@override
bool visitArgumentList(ArgumentList node) {
ArgumentList toNode = this._toNode as ArgumentList;
- return _and(
- _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
+ return _and(_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
_isEqualNodeLists(node.arguments, toNode.arguments),
_isEqualTokens(node.rightParenthesis, toNode.rightParenthesis));
}
@@ -10785,8 +9853,7 @@
@override
bool visitAsExpression(AsExpression node) {
AsExpression toNode = this._toNode as AsExpression;
- if (_and(
- _isEqualNodes(node.expression, toNode.expression),
+ if (_and(_isEqualNodes(node.expression, toNode.expression),
_isEqualTokens(node.asOperator, toNode.asOperator),
_isEqualNodes(node.type, toNode.type))) {
toNode.propagatedType = node.propagatedType;
@@ -10799,8 +9866,7 @@
@override
bool visitAssertStatement(AssertStatement node) {
AssertStatement toNode = this._toNode as AssertStatement;
- return _and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ return _and(_isEqualTokens(node.assertKeyword, toNode.assertKeyword),
_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
_isEqualNodes(node.condition, toNode.condition),
_isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
@@ -10810,8 +9876,7 @@
@override
bool visitAssignmentExpression(AssignmentExpression node) {
AssignmentExpression toNode = this._toNode as AssignmentExpression;
- if (_and(
- _isEqualNodes(node.leftHandSide, toNode.leftHandSide),
+ if (_and(_isEqualNodes(node.leftHandSide, toNode.leftHandSide),
_isEqualTokens(node.operator, toNode.operator),
_isEqualNodes(node.rightHandSide, toNode.rightHandSide))) {
toNode.propagatedElement = node.propagatedElement;
@@ -10826,16 +9891,14 @@
@override
bool visitAwaitExpression(AwaitExpression node) {
AwaitExpression toNode = this._toNode as AwaitExpression;
- return _and(
- _isEqualTokens(node.awaitKeyword, toNode.awaitKeyword),
+ return _and(_isEqualTokens(node.awaitKeyword, toNode.awaitKeyword),
_isEqualNodes(node.expression, toNode.expression));
}
@override
bool visitBinaryExpression(BinaryExpression node) {
BinaryExpression toNode = this._toNode as BinaryExpression;
- if (_and(
- _isEqualNodes(node.leftOperand, toNode.leftOperand),
+ if (_and(_isEqualNodes(node.leftOperand, toNode.leftOperand),
_isEqualTokens(node.operator, toNode.operator),
_isEqualNodes(node.rightOperand, toNode.rightOperand))) {
toNode.propagatedElement = node.propagatedElement;
@@ -10850,8 +9913,7 @@
@override
bool visitBlock(Block node) {
Block toNode = this._toNode as Block;
- return _and(
- _isEqualTokens(node.leftBracket, toNode.leftBracket),
+ return _and(_isEqualTokens(node.leftBracket, toNode.leftBracket),
_isEqualNodeLists(node.statements, toNode.statements),
_isEqualTokens(node.rightBracket, toNode.rightBracket));
}
@@ -10865,8 +9927,7 @@
@override
bool visitBooleanLiteral(BooleanLiteral node) {
BooleanLiteral toNode = this._toNode as BooleanLiteral;
- if (_and(
- _isEqualTokens(node.literal, toNode.literal),
+ if (_and(_isEqualTokens(node.literal, toNode.literal),
node.value == toNode.value)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
@@ -10878,8 +9939,7 @@
@override
bool visitBreakStatement(BreakStatement node) {
BreakStatement toNode = this._toNode as BreakStatement;
- if (_and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ if (_and(_isEqualTokens(node.breakKeyword, toNode.breakKeyword),
_isEqualNodes(node.label, toNode.label),
_isEqualTokens(node.semicolon, toNode.semicolon))) {
// TODO(paulberry): map node.target to toNode.target.
@@ -10891,8 +9951,7 @@
@override
bool visitCascadeExpression(CascadeExpression node) {
CascadeExpression toNode = this._toNode as CascadeExpression;
- if (_and(
- _isEqualNodes(node.target, toNode.target),
+ if (_and(_isEqualNodes(node.target, toNode.target),
_isEqualNodeLists(node.cascadeSections, toNode.cascadeSections))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
@@ -10904,8 +9963,7 @@
@override
bool visitCatchClause(CatchClause node) {
CatchClause toNode = this._toNode as CatchClause;
- return _and(
- _isEqualTokens(node.onKeyword, toNode.onKeyword),
+ return _and(_isEqualTokens(node.onKeyword, toNode.onKeyword),
_isEqualNodes(node.exceptionType, toNode.exceptionType),
_isEqualTokens(node.catchKeyword, toNode.catchKeyword),
_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
@@ -10940,7 +9998,7 @@
return _and(
_isEqualNodes(node.documentationComment, toNode.documentationComment),
_isEqualNodeLists(node.metadata, toNode.metadata),
- _isEqualTokens(node.keyword, toNode.keyword),
+ _isEqualTokens(node.typedefKeyword, toNode.typedefKeyword),
_isEqualNodes(node.name, toNode.name),
_isEqualNodes(node.typeParameters, toNode.typeParameters),
_isEqualTokens(node.equals, toNode.equals),
@@ -10960,16 +10018,14 @@
@override
bool visitCommentReference(CommentReference node) {
CommentReference toNode = this._toNode as CommentReference;
- return _and(
- _isEqualTokens(node.newKeyword, toNode.newKeyword),
+ return _and(_isEqualTokens(node.newKeyword, toNode.newKeyword),
_isEqualNodes(node.identifier, toNode.identifier));
}
@override
bool visitCompilationUnit(CompilationUnit node) {
CompilationUnit toNode = this._toNode as CompilationUnit;
- if (_and(
- _isEqualTokens(node.beginToken, toNode.beginToken),
+ if (_and(_isEqualTokens(node.beginToken, toNode.beginToken),
_isEqualNodes(node.scriptTag, toNode.scriptTag),
_isEqualNodeLists(node.directives, toNode.directives),
_isEqualNodeLists(node.declarations, toNode.declarations),
@@ -10983,8 +10039,7 @@
@override
bool visitConditionalExpression(ConditionalExpression node) {
ConditionalExpression toNode = this._toNode as ConditionalExpression;
- if (_and(
- _isEqualNodes(node.condition, toNode.condition),
+ if (_and(_isEqualNodes(node.condition, toNode.condition),
_isEqualTokens(node.question, toNode.question),
_isEqualNodes(node.thenExpression, toNode.thenExpression),
_isEqualTokens(node.colon, toNode.colon),
@@ -11023,8 +10078,7 @@
bool visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
ConstructorFieldInitializer toNode =
this._toNode as ConstructorFieldInitializer;
- return _and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ return _and(_isEqualTokens(node.thisKeyword, toNode.thisKeyword),
_isEqualTokens(node.period, toNode.period),
_isEqualNodes(node.fieldName, toNode.fieldName),
_isEqualTokens(node.equals, toNode.equals),
@@ -11034,8 +10088,7 @@
@override
bool visitConstructorName(ConstructorName node) {
ConstructorName toNode = this._toNode as ConstructorName;
- if (_and(
- _isEqualNodes(node.type, toNode.type),
+ if (_and(_isEqualNodes(node.type, toNode.type),
_isEqualTokens(node.period, toNode.period),
_isEqualNodes(node.name, toNode.name))) {
toNode.staticElement = node.staticElement;
@@ -11047,8 +10100,7 @@
@override
bool visitContinueStatement(ContinueStatement node) {
ContinueStatement toNode = this._toNode as ContinueStatement;
- if (_and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ if (_and(_isEqualTokens(node.continueKeyword, toNode.continueKeyword),
_isEqualNodes(node.label, toNode.label),
_isEqualTokens(node.semicolon, toNode.semicolon))) {
// TODO(paulberry): map node.target to toNode.target.
@@ -11071,8 +10123,7 @@
@override
bool visitDefaultFormalParameter(DefaultFormalParameter node) {
DefaultFormalParameter toNode = this._toNode as DefaultFormalParameter;
- return _and(
- _isEqualNodes(node.parameter, toNode.parameter),
+ return _and(_isEqualNodes(node.parameter, toNode.parameter),
node.kind == toNode.kind,
_isEqualTokens(node.separator, toNode.separator),
_isEqualNodes(node.defaultValue, toNode.defaultValue));
@@ -11081,8 +10132,7 @@
@override
bool visitDoStatement(DoStatement node) {
DoStatement toNode = this._toNode as DoStatement;
- return _and(
- _isEqualTokens(node.doKeyword, toNode.doKeyword),
+ return _and(_isEqualTokens(node.doKeyword, toNode.doKeyword),
_isEqualNodes(node.body, toNode.body),
_isEqualTokens(node.whileKeyword, toNode.whileKeyword),
_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
@@ -11094,8 +10144,7 @@
@override
bool visitDoubleLiteral(DoubleLiteral node) {
DoubleLiteral toNode = this._toNode as DoubleLiteral;
- if (_and(
- _isEqualTokens(node.literal, toNode.literal),
+ if (_and(_isEqualTokens(node.literal, toNode.literal),
node.value == toNode.value)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
@@ -11131,7 +10180,7 @@
return _and(
_isEqualNodes(node.documentationComment, toNode.documentationComment),
_isEqualNodeLists(node.metadata, toNode.metadata),
- _isEqualTokens(node.keyword, toNode.keyword),
+ _isEqualTokens(node.enumKeyword, toNode.enumKeyword),
_isEqualNodes(node.name, toNode.name),
_isEqualTokens(node.leftBracket, toNode.leftBracket),
_isEqualNodeLists(node.constants, toNode.constants),
@@ -11166,16 +10215,14 @@
@override
bool visitExpressionStatement(ExpressionStatement node) {
ExpressionStatement toNode = this._toNode as ExpressionStatement;
- return _and(
- _isEqualNodes(node.expression, toNode.expression),
+ return _and(_isEqualNodes(node.expression, toNode.expression),
_isEqualTokens(node.semicolon, toNode.semicolon));
}
@override
bool visitExtendsClause(ExtendsClause node) {
ExtendsClause toNode = this._toNode as ExtendsClause;
- return _and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ return _and(_isEqualTokens(node.extendsKeyword, toNode.extendsKeyword),
_isEqualNodes(node.superclass, toNode.superclass));
}
@@ -11198,7 +10245,7 @@
_isEqualNodeLists(node.metadata, toNode.metadata),
_isEqualTokens(node.keyword, toNode.keyword),
_isEqualNodes(node.type, toNode.type),
- _isEqualTokens(node.thisToken, toNode.thisToken),
+ _isEqualTokens(node.thisKeyword, toNode.thisKeyword),
_isEqualTokens(node.period, toNode.period),
_isEqualNodes(node.identifier, toNode.identifier));
}
@@ -11206,8 +10253,7 @@
@override
bool visitForEachStatement(ForEachStatement node) {
ForEachStatement toNode = this._toNode as ForEachStatement;
- return _and(
- _isEqualTokens(node.forKeyword, toNode.forKeyword),
+ return _and(_isEqualTokens(node.forKeyword, toNode.forKeyword),
_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
_isEqualNodes(node.loopVariable, toNode.loopVariable),
_isEqualTokens(node.inKeyword, toNode.inKeyword),
@@ -11217,10 +10263,19 @@
}
@override
+ bool visitFormalParameterList(FormalParameterList node) {
+ FormalParameterList toNode = this._toNode as FormalParameterList;
+ return _and(_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
+ _isEqualNodeLists(node.parameters, toNode.parameters),
+ _isEqualTokens(node.leftDelimiter, toNode.leftDelimiter),
+ _isEqualTokens(node.rightDelimiter, toNode.rightDelimiter),
+ _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis));
+ }
+
+ @override
bool visitForStatement(ForStatement node) {
ForStatement toNode = this._toNode as ForStatement;
- return _and(
- _isEqualTokens(node.forKeyword, toNode.forKeyword),
+ return _and(_isEqualTokens(node.forKeyword, toNode.forKeyword),
_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
_isEqualNodes(node.variables, toNode.variables),
_isEqualNodes(node.initialization, toNode.initialization),
@@ -11233,17 +10288,6 @@
}
@override
- bool visitFormalParameterList(FormalParameterList node) {
- FormalParameterList toNode = this._toNode as FormalParameterList;
- return _and(
- _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
- _isEqualNodeLists(node.parameters, toNode.parameters),
- _isEqualTokens(node.leftDelimiter, toNode.leftDelimiter),
- _isEqualTokens(node.rightDelimiter, toNode.rightDelimiter),
- _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis));
- }
-
- @override
bool visitFunctionDeclaration(FunctionDeclaration node) {
FunctionDeclaration toNode = this._toNode as FunctionDeclaration;
return _and(
@@ -11266,8 +10310,7 @@
@override
bool visitFunctionExpression(FunctionExpression node) {
FunctionExpression toNode = this._toNode as FunctionExpression;
- if (_and(
- _isEqualNodes(node.parameters, toNode.parameters),
+ if (_and(_isEqualNodes(node.parameters, toNode.parameters),
_isEqualNodes(node.body, toNode.body))) {
toNode.element = node.element;
toNode.propagatedType = node.propagatedType;
@@ -11281,8 +10324,7 @@
bool visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
FunctionExpressionInvocation toNode =
this._toNode as FunctionExpressionInvocation;
- if (_and(
- _isEqualNodes(node.function, toNode.function),
+ if (_and(_isEqualNodes(node.function, toNode.function),
_isEqualNodes(node.argumentList, toNode.argumentList))) {
toNode.propagatedElement = node.propagatedElement;
toNode.propagatedType = node.propagatedType;
@@ -11299,7 +10341,7 @@
return _and(
_isEqualNodes(node.documentationComment, toNode.documentationComment),
_isEqualNodeLists(node.metadata, toNode.metadata),
- _isEqualTokens(node.keyword, toNode.keyword),
+ _isEqualTokens(node.typedefKeyword, toNode.typedefKeyword),
_isEqualNodes(node.returnType, toNode.returnType),
_isEqualNodes(node.name, toNode.name),
_isEqualNodes(node.typeParameters, toNode.typeParameters),
@@ -11322,16 +10364,14 @@
@override
bool visitHideCombinator(HideCombinator node) {
HideCombinator toNode = this._toNode as HideCombinator;
- return _and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ return _and(_isEqualTokens(node.keyword, toNode.keyword),
_isEqualNodeLists(node.hiddenNames, toNode.hiddenNames));
}
@override
bool visitIfStatement(IfStatement node) {
IfStatement toNode = this._toNode as IfStatement;
- return _and(
- _isEqualTokens(node.ifKeyword, toNode.ifKeyword),
+ return _and(_isEqualTokens(node.ifKeyword, toNode.ifKeyword),
_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
_isEqualNodes(node.condition, toNode.condition),
_isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
@@ -11344,7 +10384,7 @@
bool visitImplementsClause(ImplementsClause node) {
ImplementsClause toNode = this._toNode as ImplementsClause;
return _and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ _isEqualTokens(node.implementsKeyword, toNode.implementsKeyword),
_isEqualNodeLists(node.interfaces, toNode.interfaces));
}
@@ -11356,7 +10396,7 @@
_isEqualNodeLists(node.metadata, toNode.metadata),
_isEqualTokens(node.keyword, toNode.keyword),
_isEqualNodes(node.uri, toNode.uri),
- _isEqualTokens(node.asToken, toNode.asToken),
+ _isEqualTokens(node.asKeyword, toNode.asKeyword),
_isEqualNodes(node.prefix, toNode.prefix),
_isEqualNodeLists(node.combinators, toNode.combinators),
_isEqualTokens(node.semicolon, toNode.semicolon))) {
@@ -11369,8 +10409,7 @@
@override
bool visitIndexExpression(IndexExpression node) {
IndexExpression toNode = this._toNode as IndexExpression;
- if (_and(
- _isEqualNodes(node.target, toNode.target),
+ if (_and(_isEqualNodes(node.target, toNode.target),
_isEqualTokens(node.leftBracket, toNode.leftBracket),
_isEqualNodes(node.index, toNode.index),
_isEqualTokens(node.rightBracket, toNode.rightBracket))) {
@@ -11388,8 +10427,7 @@
bool visitInstanceCreationExpression(InstanceCreationExpression node) {
InstanceCreationExpression toNode =
this._toNode as InstanceCreationExpression;
- if (_and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ if (_and(_isEqualTokens(node.keyword, toNode.keyword),
_isEqualNodes(node.constructorName, toNode.constructorName),
_isEqualNodes(node.argumentList, toNode.argumentList))) {
toNode.propagatedType = node.propagatedType;
@@ -11403,8 +10441,7 @@
@override
bool visitIntegerLiteral(IntegerLiteral node) {
IntegerLiteral toNode = this._toNode as IntegerLiteral;
- if (_and(
- _isEqualTokens(node.literal, toNode.literal),
+ if (_and(_isEqualTokens(node.literal, toNode.literal),
node.value == toNode.value)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
@@ -11416,8 +10453,7 @@
@override
bool visitInterpolationExpression(InterpolationExpression node) {
InterpolationExpression toNode = this._toNode as InterpolationExpression;
- return _and(
- _isEqualTokens(node.leftBracket, toNode.leftBracket),
+ return _and(_isEqualTokens(node.leftBracket, toNode.leftBracket),
_isEqualNodes(node.expression, toNode.expression),
_isEqualTokens(node.rightBracket, toNode.rightBracket));
}
@@ -11425,16 +10461,14 @@
@override
bool visitInterpolationString(InterpolationString node) {
InterpolationString toNode = this._toNode as InterpolationString;
- return _and(
- _isEqualTokens(node.contents, toNode.contents),
+ return _and(_isEqualTokens(node.contents, toNode.contents),
node.value == toNode.value);
}
@override
bool visitIsExpression(IsExpression node) {
IsExpression toNode = this._toNode as IsExpression;
- if (_and(
- _isEqualNodes(node.expression, toNode.expression),
+ if (_and(_isEqualNodes(node.expression, toNode.expression),
_isEqualTokens(node.isOperator, toNode.isOperator),
_isEqualTokens(node.notOperator, toNode.notOperator),
_isEqualNodes(node.type, toNode.type))) {
@@ -11448,16 +10482,14 @@
@override
bool visitLabel(Label node) {
Label toNode = this._toNode as Label;
- return _and(
- _isEqualNodes(node.label, toNode.label),
+ return _and(_isEqualNodes(node.label, toNode.label),
_isEqualTokens(node.colon, toNode.colon));
}
@override
bool visitLabeledStatement(LabeledStatement node) {
LabeledStatement toNode = this._toNode as LabeledStatement;
- return _and(
- _isEqualNodeLists(node.labels, toNode.labels),
+ return _and(_isEqualNodeLists(node.labels, toNode.labels),
_isEqualNodes(node.statement, toNode.statement));
}
@@ -11467,7 +10499,7 @@
return _and(
_isEqualNodes(node.documentationComment, toNode.documentationComment),
_isEqualNodeLists(node.metadata, toNode.metadata),
- _isEqualTokens(node.libraryToken, toNode.libraryToken),
+ _isEqualTokens(node.libraryKeyword, toNode.libraryKeyword),
_isEqualNodes(node.name, toNode.name),
_isEqualTokens(node.semicolon, toNode.semicolon));
}
@@ -11486,8 +10518,7 @@
@override
bool visitListLiteral(ListLiteral node) {
ListLiteral toNode = this._toNode as ListLiteral;
- if (_and(
- _isEqualTokens(node.constKeyword, toNode.constKeyword),
+ if (_and(_isEqualTokens(node.constKeyword, toNode.constKeyword),
_isEqualNodes(node.typeArguments, toNode.typeArguments),
_isEqualTokens(node.leftBracket, toNode.leftBracket),
_isEqualNodeLists(node.elements, toNode.elements),
@@ -11502,8 +10533,7 @@
@override
bool visitMapLiteral(MapLiteral node) {
MapLiteral toNode = this._toNode as MapLiteral;
- if (_and(
- _isEqualTokens(node.constKeyword, toNode.constKeyword),
+ if (_and(_isEqualTokens(node.constKeyword, toNode.constKeyword),
_isEqualNodes(node.typeArguments, toNode.typeArguments),
_isEqualTokens(node.leftBracket, toNode.leftBracket),
_isEqualNodeLists(node.entries, toNode.entries),
@@ -11518,8 +10548,7 @@
@override
bool visitMapLiteralEntry(MapLiteralEntry node) {
MapLiteralEntry toNode = this._toNode as MapLiteralEntry;
- return _and(
- _isEqualNodes(node.key, toNode.key),
+ return _and(_isEqualNodes(node.key, toNode.key),
_isEqualTokens(node.separator, toNode.separator),
_isEqualNodes(node.value, toNode.value));
}
@@ -11543,8 +10572,7 @@
@override
bool visitMethodInvocation(MethodInvocation node) {
MethodInvocation toNode = this._toNode as MethodInvocation;
- if (_and(
- _isEqualNodes(node.target, toNode.target),
+ if (_and(_isEqualNodes(node.target, toNode.target),
_isEqualTokens(node.period, toNode.period),
_isEqualNodes(node.methodName, toNode.methodName),
_isEqualNodes(node.argumentList, toNode.argumentList))) {
@@ -11558,8 +10586,7 @@
@override
bool visitNamedExpression(NamedExpression node) {
NamedExpression toNode = this._toNode as NamedExpression;
- if (_and(
- _isEqualNodes(node.name, toNode.name),
+ if (_and(_isEqualNodes(node.name, toNode.name),
_isEqualNodes(node.expression, toNode.expression))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
@@ -11571,16 +10598,14 @@
@override
bool visitNativeClause(NativeClause node) {
NativeClause toNode = this._toNode as NativeClause;
- return _and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ return _and(_isEqualTokens(node.nativeKeyword, toNode.nativeKeyword),
_isEqualNodes(node.name, toNode.name));
}
@override
bool visitNativeFunctionBody(NativeFunctionBody node) {
NativeFunctionBody toNode = this._toNode as NativeFunctionBody;
- return _and(
- _isEqualTokens(node.nativeToken, toNode.nativeToken),
+ return _and(_isEqualTokens(node.nativeKeyword, toNode.nativeKeyword),
_isEqualNodes(node.stringLiteral, toNode.stringLiteral),
_isEqualTokens(node.semicolon, toNode.semicolon));
}
@@ -11599,8 +10624,7 @@
@override
bool visitParenthesizedExpression(ParenthesizedExpression node) {
ParenthesizedExpression toNode = this._toNode as ParenthesizedExpression;
- if (_and(
- _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
+ if (_and(_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
_isEqualNodes(node.expression, toNode.expression),
_isEqualTokens(node.rightParenthesis, toNode.rightParenthesis))) {
toNode.propagatedType = node.propagatedType;
@@ -11616,7 +10640,7 @@
if (_and(
_isEqualNodes(node.documentationComment, toNode.documentationComment),
_isEqualNodeLists(node.metadata, toNode.metadata),
- _isEqualTokens(node.partToken, toNode.partToken),
+ _isEqualTokens(node.partKeyword, toNode.partKeyword),
_isEqualNodes(node.uri, toNode.uri),
_isEqualTokens(node.semicolon, toNode.semicolon))) {
toNode.element = node.element;
@@ -11631,8 +10655,8 @@
if (_and(
_isEqualNodes(node.documentationComment, toNode.documentationComment),
_isEqualNodeLists(node.metadata, toNode.metadata),
- _isEqualTokens(node.partToken, toNode.partToken),
- _isEqualTokens(node.ofToken, toNode.ofToken),
+ _isEqualTokens(node.partKeyword, toNode.partKeyword),
+ _isEqualTokens(node.ofKeyword, toNode.ofKeyword),
_isEqualNodes(node.libraryName, toNode.libraryName),
_isEqualTokens(node.semicolon, toNode.semicolon))) {
toNode.element = node.element;
@@ -11644,8 +10668,7 @@
@override
bool visitPostfixExpression(PostfixExpression node) {
PostfixExpression toNode = this._toNode as PostfixExpression;
- if (_and(
- _isEqualNodes(node.operand, toNode.operand),
+ if (_and(_isEqualNodes(node.operand, toNode.operand),
_isEqualTokens(node.operator, toNode.operator))) {
toNode.propagatedElement = node.propagatedElement;
toNode.propagatedType = node.propagatedType;
@@ -11657,25 +10680,9 @@
}
@override
- bool visitPrefixExpression(PrefixExpression node) {
- PrefixExpression toNode = this._toNode as PrefixExpression;
- if (_and(
- _isEqualTokens(node.operator, toNode.operator),
- _isEqualNodes(node.operand, toNode.operand))) {
- toNode.propagatedElement = node.propagatedElement;
- toNode.propagatedType = node.propagatedType;
- toNode.staticElement = node.staticElement;
- toNode.staticType = node.staticType;
- return true;
- }
- return false;
- }
-
- @override
bool visitPrefixedIdentifier(PrefixedIdentifier node) {
PrefixedIdentifier toNode = this._toNode as PrefixedIdentifier;
- if (_and(
- _isEqualNodes(node.prefix, toNode.prefix),
+ if (_and(_isEqualNodes(node.prefix, toNode.prefix),
_isEqualTokens(node.period, toNode.period),
_isEqualNodes(node.identifier, toNode.identifier))) {
toNode.propagatedType = node.propagatedType;
@@ -11686,10 +10693,23 @@
}
@override
+ bool visitPrefixExpression(PrefixExpression node) {
+ PrefixExpression toNode = this._toNode as PrefixExpression;
+ if (_and(_isEqualTokens(node.operator, toNode.operator),
+ _isEqualNodes(node.operand, toNode.operand))) {
+ toNode.propagatedElement = node.propagatedElement;
+ toNode.propagatedType = node.propagatedType;
+ toNode.staticElement = node.staticElement;
+ toNode.staticType = node.staticType;
+ return true;
+ }
+ return false;
+ }
+
+ @override
bool visitPropertyAccess(PropertyAccess node) {
PropertyAccess toNode = this._toNode as PropertyAccess;
- if (_and(
- _isEqualNodes(node.target, toNode.target),
+ if (_and(_isEqualNodes(node.target, toNode.target),
_isEqualTokens(node.operator, toNode.operator),
_isEqualNodes(node.propertyName, toNode.propertyName))) {
toNode.propagatedType = node.propagatedType;
@@ -11700,12 +10720,11 @@
}
@override
- bool
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ bool visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
RedirectingConstructorInvocation toNode =
this._toNode as RedirectingConstructorInvocation;
- if (_and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ if (_and(_isEqualTokens(node.thisKeyword, toNode.thisKeyword),
_isEqualTokens(node.period, toNode.period),
_isEqualNodes(node.constructorName, toNode.constructorName),
_isEqualNodes(node.argumentList, toNode.argumentList))) {
@@ -11718,7 +10737,7 @@
@override
bool visitRethrowExpression(RethrowExpression node) {
RethrowExpression toNode = this._toNode as RethrowExpression;
- if (_isEqualTokens(node.keyword, toNode.keyword)) {
+ if (_isEqualTokens(node.rethrowKeyword, toNode.rethrowKeyword)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -11729,8 +10748,7 @@
@override
bool visitReturnStatement(ReturnStatement node) {
ReturnStatement toNode = this._toNode as ReturnStatement;
- return _and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ return _and(_isEqualTokens(node.returnKeyword, toNode.returnKeyword),
_isEqualNodes(node.expression, toNode.expression),
_isEqualTokens(node.semicolon, toNode.semicolon));
}
@@ -11744,8 +10762,7 @@
@override
bool visitShowCombinator(ShowCombinator node) {
ShowCombinator toNode = this._toNode as ShowCombinator;
- return _and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ return _and(_isEqualTokens(node.keyword, toNode.keyword),
_isEqualNodeLists(node.shownNames, toNode.shownNames));
}
@@ -11777,8 +10794,7 @@
@override
bool visitSimpleStringLiteral(SimpleStringLiteral node) {
SimpleStringLiteral toNode = this._toNode as SimpleStringLiteral;
- if (_and(
- _isEqualTokens(node.literal, toNode.literal),
+ if (_and(_isEqualTokens(node.literal, toNode.literal),
node.value == toNode.value)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
@@ -11802,8 +10818,7 @@
bool visitSuperConstructorInvocation(SuperConstructorInvocation node) {
SuperConstructorInvocation toNode =
this._toNode as SuperConstructorInvocation;
- if (_and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ if (_and(_isEqualTokens(node.superKeyword, toNode.superKeyword),
_isEqualTokens(node.period, toNode.period),
_isEqualNodes(node.constructorName, toNode.constructorName),
_isEqualNodes(node.argumentList, toNode.argumentList))) {
@@ -11816,7 +10831,7 @@
@override
bool visitSuperExpression(SuperExpression node) {
SuperExpression toNode = this._toNode as SuperExpression;
- if (_isEqualTokens(node.keyword, toNode.keyword)) {
+ if (_isEqualTokens(node.superKeyword, toNode.superKeyword)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -11827,8 +10842,7 @@
@override
bool visitSwitchCase(SwitchCase node) {
SwitchCase toNode = this._toNode as SwitchCase;
- return _and(
- _isEqualNodeLists(node.labels, toNode.labels),
+ return _and(_isEqualNodeLists(node.labels, toNode.labels),
_isEqualTokens(node.keyword, toNode.keyword),
_isEqualNodes(node.expression, toNode.expression),
_isEqualTokens(node.colon, toNode.colon),
@@ -11838,8 +10852,7 @@
@override
bool visitSwitchDefault(SwitchDefault node) {
SwitchDefault toNode = this._toNode as SwitchDefault;
- return _and(
- _isEqualNodeLists(node.labels, toNode.labels),
+ return _and(_isEqualNodeLists(node.labels, toNode.labels),
_isEqualTokens(node.keyword, toNode.keyword),
_isEqualTokens(node.colon, toNode.colon),
_isEqualNodeLists(node.statements, toNode.statements));
@@ -11848,8 +10861,7 @@
@override
bool visitSwitchStatement(SwitchStatement node) {
SwitchStatement toNode = this._toNode as SwitchStatement;
- return _and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ return _and(_isEqualTokens(node.switchKeyword, toNode.switchKeyword),
_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
_isEqualNodes(node.expression, toNode.expression),
_isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
@@ -11861,8 +10873,7 @@
@override
bool visitSymbolLiteral(SymbolLiteral node) {
SymbolLiteral toNode = this._toNode as SymbolLiteral;
- if (_and(
- _isEqualTokens(node.poundSign, toNode.poundSign),
+ if (_and(_isEqualTokens(node.poundSign, toNode.poundSign),
_isEqualTokenLists(node.components, toNode.components))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
@@ -11874,7 +10885,7 @@
@override
bool visitThisExpression(ThisExpression node) {
ThisExpression toNode = this._toNode as ThisExpression;
- if (_isEqualTokens(node.keyword, toNode.keyword)) {
+ if (_isEqualTokens(node.thisKeyword, toNode.thisKeyword)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -11885,8 +10896,7 @@
@override
bool visitThrowExpression(ThrowExpression node) {
ThrowExpression toNode = this._toNode as ThrowExpression;
- if (_and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ if (_and(_isEqualTokens(node.throwKeyword, toNode.throwKeyword),
_isEqualNodes(node.expression, toNode.expression))) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
@@ -11909,8 +10919,7 @@
@override
bool visitTryStatement(TryStatement node) {
TryStatement toNode = this._toNode as TryStatement;
- return _and(
- _isEqualTokens(node.tryKeyword, toNode.tryKeyword),
+ return _and(_isEqualTokens(node.tryKeyword, toNode.tryKeyword),
_isEqualNodes(node.body, toNode.body),
_isEqualNodeLists(node.catchClauses, toNode.catchClauses),
_isEqualTokens(node.finallyKeyword, toNode.finallyKeyword),
@@ -11920,8 +10929,7 @@
@override
bool visitTypeArgumentList(TypeArgumentList node) {
TypeArgumentList toNode = this._toNode as TypeArgumentList;
- return _and(
- _isEqualTokens(node.leftBracket, toNode.leftBracket),
+ return _and(_isEqualTokens(node.leftBracket, toNode.leftBracket),
_isEqualNodeLists(node.arguments, toNode.arguments),
_isEqualTokens(node.rightBracket, toNode.rightBracket));
}
@@ -11929,8 +10937,7 @@
@override
bool visitTypeName(TypeName node) {
TypeName toNode = this._toNode as TypeName;
- if (_and(
- _isEqualNodes(node.name, toNode.name),
+ if (_and(_isEqualNodes(node.name, toNode.name),
_isEqualNodes(node.typeArguments, toNode.typeArguments))) {
toNode.type = node.type;
return true;
@@ -11945,15 +10952,14 @@
_isEqualNodes(node.documentationComment, toNode.documentationComment),
_isEqualNodeLists(node.metadata, toNode.metadata),
_isEqualNodes(node.name, toNode.name),
- _isEqualTokens(node.keyword, toNode.keyword),
+ _isEqualTokens(node.extendsKeyword, toNode.extendsKeyword),
_isEqualNodes(node.bound, toNode.bound));
}
@override
bool visitTypeParameterList(TypeParameterList node) {
TypeParameterList toNode = this._toNode as TypeParameterList;
- return _and(
- _isEqualTokens(node.leftBracket, toNode.leftBracket),
+ return _and(_isEqualTokens(node.leftBracket, toNode.leftBracket),
_isEqualNodeLists(node.typeParameters, toNode.typeParameters),
_isEqualTokens(node.rightBracket, toNode.rightBracket));
}
@@ -11984,16 +10990,14 @@
bool visitVariableDeclarationStatement(VariableDeclarationStatement node) {
VariableDeclarationStatement toNode =
this._toNode as VariableDeclarationStatement;
- return _and(
- _isEqualNodes(node.variables, toNode.variables),
+ return _and(_isEqualNodes(node.variables, toNode.variables),
_isEqualTokens(node.semicolon, toNode.semicolon));
}
@override
bool visitWhileStatement(WhileStatement node) {
WhileStatement toNode = this._toNode as WhileStatement;
- return _and(
- _isEqualTokens(node.keyword, toNode.keyword),
+ return _and(_isEqualTokens(node.whileKeyword, toNode.whileKeyword),
_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
_isEqualNodes(node.condition, toNode.condition),
_isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
@@ -12003,16 +11007,14 @@
@override
bool visitWithClause(WithClause node) {
WithClause toNode = this._toNode as WithClause;
- return _and(
- _isEqualTokens(node.withKeyword, toNode.withKeyword),
+ return _and(_isEqualTokens(node.withKeyword, toNode.withKeyword),
_isEqualNodeLists(node.mixinTypes, toNode.mixinTypes));
}
@override
bool visitYieldStatement(YieldStatement node) {
YieldStatement toNode = this._toNode as YieldStatement;
- return _and(
- _isEqualTokens(node.yieldKeyword, toNode.yieldKeyword),
+ return _and(_isEqualTokens(node.yieldKeyword, toNode.yieldKeyword),
_isEqualNodes(node.expression, toNode.expression),
_isEqualTokens(node.semicolon, toNode.semicolon));
}
@@ -12021,8 +11023,8 @@
* Return `true` if all of the parameters are `true`.
*/
bool _and(bool b1, bool b2, [bool b3 = true, bool b4 = true, bool b5 = true,
- bool b6 = true, bool b7 = true, bool b8 = true, bool b9 = true, bool b10 = true,
- bool b11 = true, bool b12 = true, bool b13 = true]) {
+ bool b6 = true, bool b7 = true, bool b8 = true, bool b9 = true,
+ bool b10 = true, bool b11 = true, bool b12 = true, bool b13 = true]) {
return b1 &&
b2 &&
b3 &&
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 0b59021..fb22d61 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -24,7 +24,6 @@
import 'source.dart';
import 'static_type_analyzer.dart';
import 'utilities_dart.dart';
-import 'utilities_general.dart';
/**
* Callback signature used by ImplicitConstructorBuilder to register
@@ -36,13 +35,13 @@
typedef void ImplicitConstructorBuilderCallback(ClassElement classElement,
ClassElement superclassElement, void computation());
-typedef ResolverVisitor ResolverVisitorFactory(Library library, Source source,
- TypeProvider typeProvider);
+typedef ResolverVisitor ResolverVisitorFactory(
+ Library library, Source source, TypeProvider typeProvider);
typedef StaticTypeAnalyzer StaticTypeAnalyzerFactory(ResolverVisitor visitor);
-typedef TypeResolverVisitor TypeResolverVisitorFactory(Library library,
- Source source, TypeProvider typeProvider);
+typedef TypeResolverVisitor TypeResolverVisitorFactory(
+ Library library, Source source, TypeProvider typeProvider);
typedef void VoidFunction();
@@ -189,8 +188,8 @@
}
@override
- Object
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ Object visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
_checkForDeprecatedMemberUse(node.staticElement, node);
return super.visitRedirectingConstructorInvocation(node);
}
@@ -238,13 +237,11 @@
if (node.notOperator == null) {
// the is case
_errorReporter.reportErrorForNode(
- HintCode.UNNECESSARY_TYPE_CHECK_TRUE,
- node);
+ HintCode.UNNECESSARY_TYPE_CHECK_TRUE, node);
} else {
// the is not case
- _errorReporter.reportErrorForNode(
- HintCode.UNNECESSARY_TYPE_CHECK_FALSE,
- node);
+ _errorReporter
+ .reportErrorForNode(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, node);
}
return true;
}
@@ -258,13 +255,11 @@
if (node.notOperator == null) {
// the is case
_errorReporter.reportErrorForNode(
- HintCode.UNNECESSARY_TYPE_CHECK_TRUE,
- node);
+ HintCode.UNNECESSARY_TYPE_CHECK_TRUE, node);
} else {
// the is not case
- _errorReporter.reportErrorForNode(
- HintCode.UNNECESSARY_TYPE_CHECK_FALSE,
- node);
+ _errorReporter
+ .reportErrorForNode(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, node);
}
return true;
} else if (rhsNameStr == _NULL_TYPE_NAME) {
@@ -273,9 +268,8 @@
_errorReporter.reportErrorForNode(HintCode.TYPE_CHECK_IS_NULL, node);
} else {
// the is not case
- _errorReporter.reportErrorForNode(
- HintCode.TYPE_CHECK_IS_NOT_NULL,
- node);
+ _errorReporter
+ .reportErrorForNode(HintCode.TYPE_CHECK_IS_NOT_NULL, node);
}
return true;
}
@@ -318,16 +312,15 @@
// Hint case: test propagated type information
//
// Compute the best types to use.
- DartType expectedBestType =
- expectedPropagatedType != null ? expectedPropagatedType : expectedStaticType;
+ DartType expectedBestType = expectedPropagatedType != null
+ ? expectedPropagatedType
+ : expectedStaticType;
DartType actualBestType =
actualPropagatedType != null ? actualPropagatedType : actualStaticType;
if (actualBestType != null && expectedBestType != null) {
if (!actualBestType.isAssignableTo(expectedBestType)) {
_errorReporter.reportTypeErrorForNode(
- hintCode,
- expression,
- [actualBestType, expectedBestType]);
+ hintCode, expression, [actualBestType, expectedBestType]);
return true;
}
}
@@ -352,12 +345,11 @@
staticParameterElement == null ? null : staticParameterElement.type;
ParameterElement propagatedParameterElement =
argument.propagatedParameterElement;
- DartType propagatedParameterType =
- propagatedParameterElement == null ? null : propagatedParameterElement.type;
- return _checkForArgumentTypeNotAssignableWithExpectedTypes(
- argument,
- staticParameterType,
- propagatedParameterType,
+ DartType propagatedParameterType = propagatedParameterElement == null
+ ? null
+ : propagatedParameterElement.type;
+ return _checkForArgumentTypeNotAssignableWithExpectedTypes(argument,
+ staticParameterType, propagatedParameterType,
HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
}
@@ -372,17 +364,12 @@
* @return `true` if and only if an hint code is generated on the passed node
* See [HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE].
*/
- bool
- _checkForArgumentTypeNotAssignableWithExpectedTypes(Expression expression,
- DartType expectedStaticType, DartType expectedPropagatedType,
- ErrorCode errorCode) =>
- _checkForArgumentTypeNotAssignable(
- expression,
- expectedStaticType,
- expression.staticType,
- expectedPropagatedType,
- expression.propagatedType,
- errorCode);
+ bool _checkForArgumentTypeNotAssignableWithExpectedTypes(
+ Expression expression, DartType expectedStaticType,
+ DartType expectedPropagatedType, ErrorCode errorCode) =>
+ _checkForArgumentTypeNotAssignable(expression, expectedStaticType,
+ expression.staticType, expectedPropagatedType,
+ expression.propagatedType, errorCode);
/**
* This verifies that the passed arguments can be assigned to their corresponding parameters.
@@ -429,9 +416,7 @@
}
}
_errorReporter.reportErrorForNode(
- HintCode.DEPRECATED_MEMBER_USE,
- node,
- [displayName]);
+ HintCode.DEPRECATED_MEMBER_USE, node, [displayName]);
return true;
}
return false;
@@ -497,8 +482,7 @@
if (_TO_INT_METHOD_NAME == methodInvocation.methodName.name &&
methodInvocation.argumentList.arguments.isEmpty) {
_errorReporter.reportErrorForNode(
- HintCode.DIVISION_OPTIMIZATION,
- methodInvocation);
+ HintCode.DIVISION_OPTIMIZATION, methodInvocation);
return true;
}
}
@@ -521,9 +505,9 @@
return false;
}
VariableElement leftVariableElement = ErrorVerifier.getVariableElement(lhs);
- DartType leftType = (leftVariableElement == null) ?
- ErrorVerifier.getStaticType(lhs) :
- leftVariableElement.type;
+ DartType leftType = (leftVariableElement == null)
+ ? ErrorVerifier.getStaticType(lhs)
+ : leftVariableElement.type;
DartType staticRightType = ErrorVerifier.getStaticType(rhs);
if (!staticRightType.isAssignableTo(leftType)) {
// The warning was generated on this rhs
@@ -534,9 +518,7 @@
if (leftType != null && bestRightType != null) {
if (!bestRightType.isAssignableTo(leftType)) {
_errorReporter.reportTypeErrorForNode(
- HintCode.INVALID_ASSIGNMENT,
- rhs,
- [bestRightType, leftType]);
+ HintCode.INVALID_ASSIGNMENT, rhs, [bestRightType, leftType]);
return true;
}
}
@@ -552,17 +534,17 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION].
*/
- bool _checkForLoadLibraryFunction(ImportDirective node,
- ImportElement importElement) {
+ bool _checkForLoadLibraryFunction(
+ ImportDirective node, ImportElement importElement) {
LibraryElement importedLibrary = importElement.importedLibrary;
if (importedLibrary == null) {
return false;
}
if (importedLibrary.hasLoadLibraryFunction) {
_errorReporter.reportErrorForNode(
- HintCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION,
- node,
- [importedLibrary.name]);
+ HintCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION, node, [
+ importedLibrary.name
+ ]);
return true;
}
return false;
@@ -608,9 +590,7 @@
BlockFunctionBody blockFunctionBody = body as BlockFunctionBody;
if (!ExitDetector.exits(blockFunctionBody)) {
_errorReporter.reportErrorForNode(
- HintCode.MISSING_RETURN,
- returnType,
- [returnTypeType.displayName]);
+ HintCode.MISSING_RETURN, returnType, [returnTypeType.displayName]);
return true;
}
return false;
@@ -713,9 +693,7 @@
if (identical(methodInvocation.staticType, VoidTypeImpl.instance)) {
SimpleIdentifier methodName = methodInvocation.methodName;
_errorReporter.reportErrorForNode(
- HintCode.USE_OF_VOID_RESULT,
- methodName,
- [methodName.name]);
+ HintCode.USE_OF_VOID_RESULT, methodName, [methodName.name]);
return true;
}
return false;
@@ -732,8 +710,8 @@
* @return the first parent or grand-parent that is a parenthesized expression, that does not have
* a parenthesized expression parent
*/
- static ParenthesizedExpression
- _wrapParenthesizedExpression(ParenthesizedExpression parenthesizedExpression) {
+ static ParenthesizedExpression _wrapParenthesizedExpression(
+ ParenthesizedExpression parenthesizedExpression) {
if (parenthesizedExpression.parent is ParenthesizedExpression) {
return _wrapParenthesizedExpression(
parenthesizedExpression.parent as ParenthesizedExpression);
@@ -764,19 +742,17 @@
AnalysisError getErrorForDuplicate(Element existing, Element duplicate) {
if (existing is PropertyAccessorElement && duplicate is MethodElement) {
if (existing.nameOffset < duplicate.nameOffset) {
- return new AnalysisError.con2(
- duplicate.source,
- duplicate.nameOffset,
+ return new AnalysisError.con2(duplicate.source, duplicate.nameOffset,
duplicate.displayName.length,
- CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME,
- [existing.displayName]);
+ CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME, [
+ existing.displayName
+ ]);
} else {
- return new AnalysisError.con2(
- existing.source,
- existing.nameOffset,
+ return new AnalysisError.con2(existing.source, existing.nameOffset,
existing.displayName.length,
- CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME,
- [existing.displayName]);
+ CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME, [
+ existing.displayName
+ ]);
}
}
return super.getErrorForDuplicate(existing, duplicate);
@@ -807,8 +783,8 @@
* compilation [unit] associated with the source. Throw an AnalysisException
* if the element could not be built.
*/
- CompilationUnitElementImpl buildCompilationUnit(Source source,
- CompilationUnit unit) {
+ CompilationUnitElementImpl buildCompilationUnit(
+ Source source, CompilationUnit unit) {
return PerformanceStatistics.resolve.makeCurrentWhile(() {
if (unit == null) {
return null;
@@ -878,8 +854,8 @@
*
* @param errorReporter the error reporter by which errors will be reported
*/
- ConstantVerifier(this._errorReporter, this._currentLibrary,
- this._typeProvider) {
+ ConstantVerifier(
+ this._errorReporter, this._currentLibrary, this._typeProvider) {
this._boolType = _typeProvider.boolType;
this._intType = _typeProvider.intType;
this._numType = _typeProvider.numType;
@@ -896,16 +872,14 @@
// should 'const' constructor
if (!constructorElement.isConst) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR,
- node);
+ CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR, node);
return null;
}
// should have arguments
ArgumentList argumentList = node.arguments;
if (argumentList == null) {
_errorReporter.reportErrorForNode(
- CompileTimeErrorCode.NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS,
- node);
+ CompileTimeErrorCode.NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS, node);
return null;
}
// arguments should be constants
@@ -954,8 +928,7 @@
result =
_validate(element, CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT);
if (result != null) {
- _reportErrorIfFromDeferredLibrary(
- element,
+ _reportErrorIfFromDeferredLibrary(element,
CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY);
}
}
@@ -976,16 +949,14 @@
DartObjectImpl keyResult =
_validate(key, CompileTimeErrorCode.NON_CONSTANT_MAP_KEY);
Expression valueExpression = entry.value;
- DartObjectImpl valueResult =
- _validate(valueExpression, CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE);
+ DartObjectImpl valueResult = _validate(
+ valueExpression, CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE);
if (valueResult != null) {
- _reportErrorIfFromDeferredLibrary(
- valueExpression,
+ _reportErrorIfFromDeferredLibrary(valueExpression,
CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY);
}
if (keyResult != null) {
- _reportErrorIfFromDeferredLibrary(
- key,
+ _reportErrorIfFromDeferredLibrary(key,
CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY);
if (keys.contains(keyResult)) {
invalidKeys.add(key);
@@ -996,8 +967,7 @@
if (_implementsEqualsWhenNotAllowed(type)) {
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS,
- key,
- [type.displayName]);
+ key, [type.displayName]);
}
}
} else {
@@ -1006,8 +976,8 @@
AnalysisErrorListener.NULL_LISTENER;
ErrorReporter subErrorReporter =
new ErrorReporter(errorListener, _errorReporter.source);
- DartObjectImpl result =
- key.accept(new ConstantVisitor.con1(_typeProvider, subErrorReporter));
+ DartObjectImpl result = key
+ .accept(new ConstantVisitor.con1(_typeProvider, subErrorReporter));
if (result != null) {
if (keys.contains(result)) {
invalidKeys.add(key);
@@ -1022,8 +992,7 @@
if (reportEqualKeys) {
for (Expression key in invalidKeys) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.EQUAL_KEYS_IN_MAP,
- key);
+ StaticWarningCode.EQUAL_KEYS_IN_MAP, key);
}
}
return null;
@@ -1048,11 +1017,10 @@
if (switchMember is SwitchCase) {
SwitchCase switchCase = switchMember;
Expression expression = switchCase.expression;
- DartObjectImpl caseResult =
- _validate(expression, CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION);
+ DartObjectImpl caseResult = _validate(
+ expression, CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION);
if (caseResult != null) {
- _reportErrorIfFromDeferredLibrary(
- expression,
+ _reportErrorIfFromDeferredLibrary(expression,
CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY);
DartObject value = caseResult;
if (firstType == null) {
@@ -1062,8 +1030,7 @@
if (firstType != nType) {
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES,
- expression,
- [expression.toSource(), firstType.displayName]);
+ expression, [expression.toSource(), firstType.displayName]);
foundError = true;
}
}
@@ -1089,18 +1056,14 @@
// we have already computed their values. But if we missed it for some
// reason, this gives us a second chance.
//
- result = new EvaluationResultImpl.con1(
- _validate(
- initializer,
- CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE));
+ result = new EvaluationResultImpl.con1(_validate(initializer,
+ CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE));
element.evaluationResult = result;
return null;
}
- _reportErrors(
- result.errors,
+ _reportErrors(result.errors,
CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE);
- _reportErrorIfFromDeferredLibrary(
- initializer,
+ _reportErrorIfFromDeferredLibrary(initializer,
CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY);
}
return null;
@@ -1115,16 +1078,15 @@
* @return `true` if and only if an error code is generated on the passed node
* See [CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS].
*/
- bool _checkForCaseExpressionTypeImplementsEquals(SwitchStatement node,
- DartType type) {
+ bool _checkForCaseExpressionTypeImplementsEquals(
+ SwitchStatement node, DartType type) {
if (!_implementsEqualsWhenNotAllowed(type)) {
return false;
}
// report error
_errorReporter.reportErrorForToken(
CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS,
- node.keyword,
- [type.displayName]);
+ node.switchKeyword, [type.displayName]);
return true;
}
@@ -1163,8 +1125,8 @@
* @param errorCode the error code to be used if the expression is or consists of a reference to a
* deferred library
*/
- void _reportErrorIfFromDeferredLibrary(Expression expression,
- ErrorCode errorCode) {
+ void _reportErrorIfFromDeferredLibrary(
+ Expression expression, ErrorCode errorCode) {
DeferredLibraryReferenceDetector referenceDetector =
new DeferredLibraryReferenceDetector();
expression.accept(referenceDetector);
@@ -1183,29 +1145,25 @@
void _reportErrors(List<AnalysisError> errors, ErrorCode errorCode) {
for (AnalysisError data in errors) {
ErrorCode dataErrorCode = data.errorCode;
- if (identical(
- dataErrorCode,
- CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION) ||
- identical(dataErrorCode, CompileTimeErrorCode.CONST_EVAL_THROWS_IDBZE) ||
+ if (identical(dataErrorCode,
+ CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION) ||
identical(
- dataErrorCode,
+ dataErrorCode, CompileTimeErrorCode.CONST_EVAL_THROWS_IDBZE) ||
+ identical(dataErrorCode,
CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_NUM_STRING) ||
identical(dataErrorCode, CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL) ||
identical(dataErrorCode, CompileTimeErrorCode.CONST_EVAL_TYPE_INT) ||
identical(dataErrorCode, CompileTimeErrorCode.CONST_EVAL_TYPE_NUM) ||
- identical(
- dataErrorCode,
+ identical(dataErrorCode,
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH) ||
- identical(
- dataErrorCode,
+ identical(dataErrorCode,
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH) ||
- identical(
- dataErrorCode,
+ identical(dataErrorCode,
CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH)) {
_errorReporter.reportError(data);
} else if (errorCode != null) {
- _errorReporter.reportError(
- new AnalysisError.con2(data.source, data.offset, data.length, errorCode));
+ _errorReporter.reportError(new AnalysisError.con2(
+ data.source, data.offset, data.length, errorCode));
}
}
}
@@ -1222,8 +1180,8 @@
RecordingErrorListener errorListener = new RecordingErrorListener();
ErrorReporter subErrorReporter =
new ErrorReporter(errorListener, _errorReporter.source);
- DartObjectImpl result =
- expression.accept(new ConstantVisitor.con1(_typeProvider, subErrorReporter));
+ DartObjectImpl result = expression
+ .accept(new ConstantVisitor.con1(_typeProvider, subErrorReporter));
_reportErrors(errorListener.errors, errorCode);
return result;
}
@@ -1239,8 +1197,7 @@
argument = (argument as NamedExpression).expression;
}
_validate(
- argument,
- CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT);
+ argument, CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT);
}
}
@@ -1258,20 +1215,17 @@
if (initializer is ConstructorFieldInitializer) {
ConstructorFieldInitializer fieldInitializer = initializer;
_validateInitializerExpression(
- parameterElements,
- fieldInitializer.expression);
+ parameterElements, fieldInitializer.expression);
}
if (initializer is RedirectingConstructorInvocation) {
RedirectingConstructorInvocation invocation = initializer;
_validateInitializerInvocationArguments(
- parameterElements,
- invocation.argumentList);
+ parameterElements, invocation.argumentList);
}
if (initializer is SuperConstructorInvocation) {
SuperConstructorInvocation invocation = initializer;
_validateInitializerInvocationArguments(
- parameterElements,
- invocation.argumentList);
+ parameterElements, invocation.argumentList);
}
}
}
@@ -1295,11 +1249,10 @@
result =
new DartObjectImpl(_typeProvider.nullType, NullState.NULL_STATE);
} else {
- result =
- _validate(defaultValue, CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE);
+ result = _validate(
+ defaultValue, CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE);
if (result != null) {
- _reportErrorIfFromDeferredLibrary(
- defaultValue,
+ _reportErrorIfFromDeferredLibrary(defaultValue,
CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY);
}
}
@@ -1317,15 +1270,15 @@
* @param classDeclaration the class which should be validated
* @param errorSite the site at which errors should be reported.
*/
- void _validateFieldInitializers(ClassDeclaration classDeclaration,
- ConstructorDeclaration errorSite) {
+ void _validateFieldInitializers(
+ ClassDeclaration classDeclaration, ConstructorDeclaration errorSite) {
NodeList<ClassMember> members = classDeclaration.members;
for (ClassMember member in members) {
if (member is FieldDeclaration) {
FieldDeclaration fieldDeclaration = member;
if (!fieldDeclaration.isStatic) {
- for (VariableDeclaration variableDeclaration in
- fieldDeclaration.fields.variables) {
+ for (VariableDeclaration variableDeclaration
+ in fieldDeclaration.fields.variables) {
Expression initializer = variableDeclaration.initializer;
if (initializer != null) {
// Ignore any errors produced during validation--if the constant
@@ -1334,13 +1287,12 @@
AnalysisErrorListener.NULL_LISTENER;
ErrorReporter subErrorReporter =
new ErrorReporter(errorListener, _errorReporter.source);
- DartObjectImpl result =
- initializer.accept(new ConstantVisitor.con1(_typeProvider, subErrorReporter));
+ DartObjectImpl result = initializer.accept(
+ new ConstantVisitor.con1(_typeProvider, subErrorReporter));
if (result == null) {
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST,
- errorSite,
- [variableDeclaration.name.name]);
+ errorSite, [variableDeclaration.name.name]);
}
}
}
@@ -1356,23 +1308,18 @@
* considered as a valid potentially constant expressions
* @param expression the expression to validate
*/
- void _validateInitializerExpression(List<ParameterElement> parameterElements,
- Expression expression) {
+ void _validateInitializerExpression(
+ List<ParameterElement> parameterElements, Expression expression) {
RecordingErrorListener errorListener = new RecordingErrorListener();
ErrorReporter subErrorReporter =
new ErrorReporter(errorListener, _errorReporter.source);
DartObjectImpl result = expression.accept(
new _ConstantVerifier_validateInitializerExpression(
- _typeProvider,
- subErrorReporter,
- this,
- parameterElements));
- _reportErrors(
- errorListener.errors,
+ _typeProvider, subErrorReporter, this, parameterElements));
+ _reportErrors(errorListener.errors,
CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER);
if (result != null) {
- _reportErrorIfFromDeferredLibrary(
- expression,
+ _reportErrorIfFromDeferredLibrary(expression,
CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFERRED_LIBRARY);
}
}
@@ -1384,9 +1331,8 @@
* considered as a valid potentially constant expressions
* @param argumentList the argument list to validate
*/
- void
- _validateInitializerInvocationArguments(List<ParameterElement> parameterElements,
- ArgumentList argumentList) {
+ void _validateInitializerInvocationArguments(
+ List<ParameterElement> parameterElements, ArgumentList argumentList) {
if (argumentList == null) {
return;
}
@@ -1513,16 +1459,14 @@
if (lhsResult.value.isTrue && isBarBar) {
// report error on else block: true || !e!
_errorReporter.reportErrorForNode(
- HintCode.DEAD_CODE,
- node.rightOperand);
+ HintCode.DEAD_CODE, node.rightOperand);
// only visit the LHS:
_safelyVisit(lhsCondition);
return null;
} else if (lhsResult.value.isFalse && isAmpAmp) {
// report error on if block: false && !e!
_errorReporter.reportErrorForNode(
- HintCode.DEAD_CODE,
- node.rightOperand);
+ HintCode.DEAD_CODE, node.rightOperand);
// only visit the LHS:
_safelyVisit(lhsCondition);
return null;
@@ -1576,15 +1520,13 @@
if (result.value.isTrue) {
// report error on else block: true ? 1 : !2!
_errorReporter.reportErrorForNode(
- HintCode.DEAD_CODE,
- node.elseExpression);
+ HintCode.DEAD_CODE, node.elseExpression);
_safelyVisit(node.thenExpression);
return null;
} else {
// report error on if block: false ? !1! : 2
- _errorReporter.reportErrorForNode(
- HintCode.DEAD_CODE,
- node.thenExpression);
+ _errorReporter
+ .reportErrorForNode(HintCode.DEAD_CODE, node.thenExpression);
_safelyVisit(node.elseExpression);
return null;
}
@@ -1606,16 +1548,14 @@
Statement elseStatement = node.elseStatement;
if (elseStatement != null) {
_errorReporter.reportErrorForNode(
- HintCode.DEAD_CODE,
- elseStatement);
+ HintCode.DEAD_CODE, elseStatement);
_safelyVisit(node.thenStatement);
return null;
}
} else {
// report error on if block: if (false) {!} else {}
- _errorReporter.reportErrorForNode(
- HintCode.DEAD_CODE,
- node.thenStatement);
+ _errorReporter
+ .reportErrorForNode(HintCode.DEAD_CODE, node.thenStatement);
_safelyVisit(node.elseStatement);
return null;
}
@@ -1664,9 +1604,7 @@
int offset = nextCatchClause.offset;
int length = lastCatchClause.end - offset;
_errorReporter.reportErrorForOffset(
- HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH,
- offset,
- length);
+ HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH, offset, length);
return null;
}
}
@@ -1676,10 +1614,10 @@
int offset = catchClause.offset;
int length = lastCatchClause.end - offset;
_errorReporter.reportErrorForOffset(
- HintCode.DEAD_CODE_ON_CATCH_SUBTYPE,
- offset,
- length,
- [currentType.displayName, type.displayName]);
+ HintCode.DEAD_CODE_ON_CATCH_SUBTYPE, offset, length, [
+ currentType.displayName,
+ type.displayName
+ ]);
return null;
}
}
@@ -1698,9 +1636,7 @@
int offset = nextCatchClause.offset;
int length = lastCatchClause.end - offset;
_errorReporter.reportErrorForOffset(
- HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH,
- offset,
- length);
+ HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH, offset, length);
return null;
}
}
@@ -1739,10 +1675,11 @@
for (int i = 0; i < size; i++) {
Statement currentStatement = statements[i];
_safelyVisit(currentStatement);
- bool returnOrBreakingStatement =
- currentStatement is ReturnStatement ||
- (currentStatement is BreakStatement && currentStatement.label == null) ||
- (currentStatement is ContinueStatement && currentStatement.label == null);
+ bool returnOrBreakingStatement = currentStatement is ReturnStatement ||
+ (currentStatement is BreakStatement &&
+ currentStatement.label == null) ||
+ (currentStatement is ContinueStatement &&
+ currentStatement.label == null);
if (returnOrBreakingStatement && i != size - 1) {
Statement nextStatement = statements[i + 1];
Statement lastStatement = statements[size - 1];
@@ -1978,9 +1915,9 @@
String uri = _getStringValue(node.uri);
if (uri != null) {
LibraryElement library = _enclosingUnit.library;
- ExportElement exportElement = _findExport(
- library.exports,
- _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri));
+ ExportElement exportElement = _findExport(library.exports,
+ _enclosingUnit.context.sourceFactory.resolveUri(
+ _enclosingUnit.source, uri));
node.element = exportElement;
}
return super.visitExportDirective(node);
@@ -2084,10 +2021,9 @@
String uri = _getStringValue(node.uri);
if (uri != null) {
LibraryElement library = _enclosingUnit.library;
- ImportElement importElement = _findImport(
- library.imports,
- _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri),
- node.prefix);
+ ImportElement importElement = _findImport(library.imports,
+ _enclosingUnit.context.sourceFactory.resolveUri(
+ _enclosingUnit.source, uri), node.prefix);
node.element = importElement;
}
return super.visitImportDirective(node);
@@ -2121,9 +2057,7 @@
}
if (property == null) {
_enclosingExecutable = _findWithNameAndOffset(
- _enclosingClass.methods,
- nameOfMethod,
- methodName.offset);
+ _enclosingClass.methods, nameOfMethod, methodName.offset);
methodName.staticElement = _enclosingExecutable;
} else {
PropertyAccessorElement accessor =
@@ -2144,8 +2078,8 @@
Object visitPartDirective(PartDirective node) {
String uri = _getStringValue(node.uri);
if (uri != null) {
- Source partSource =
- _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri);
+ Source partSource = _enclosingUnit.context.sourceFactory.resolveUri(
+ _enclosingUnit.source, uri);
node.element = _findPart(_enclosingUnit.library.parts, partSource);
}
return super.visitPartDirective(node);
@@ -2169,8 +2103,7 @@
} finally {
_enclosingParameter = outerParameter;
}
- } else {
- }
+ } else {}
return super.visitSimpleFormalParameter(node);
}
@@ -2288,8 +2221,8 @@
* @param prefix the prefix with which the library was imported
* @return the import element whose library has the given source and prefix
*/
- ImportElement _findImport(List<ImportElement> imports, Source source,
- SimpleIdentifier prefix) {
+ ImportElement _findImport(
+ List<ImportElement> imports, Source source, SimpleIdentifier prefix) {
for (ImportElement element in imports) {
if (element.importedLibrary.source == source) {
PrefixElement prefixElement = element.prefix;
@@ -2316,8 +2249,8 @@
* @param partSource the source for the part whose element is to be returned
* @return the element for the part with the given source
*/
- CompilationUnitElement _findPart(List<CompilationUnitElement> parts,
- Source partSource) {
+ CompilationUnitElement _findPart(
+ List<CompilationUnitElement> parts, Source partSource) {
for (CompilationUnitElement part in parts) {
if (part.source == partSource) {
return part;
@@ -2335,8 +2268,8 @@
* @param offset the offset of the name of the element to be returned
* @return the element with the given name and offset
*/
- Element _findWithNameAndOffset(List<Element> elements, String name,
- int offset) {
+ Element _findWithNameAndOffset(
+ List<Element> elements, String name, int offset) {
for (Element element in elements) {
if (element.displayName == name && element.nameOffset == offset) {
return element;
@@ -2352,8 +2285,8 @@
* @param parameterName the name of the parameter being searched for
* @return the element representing the parameter with that name
*/
- ParameterElement _getElementForParameter(FormalParameter node,
- SimpleIdentifier parameterName) {
+ ParameterElement _getElementForParameter(
+ FormalParameter node, SimpleIdentifier parameterName) {
List<ParameterElement> parameters = null;
if (_enclosingParameter != null) {
parameters = _enclosingParameter.parameters;
@@ -2378,8 +2311,7 @@
buffer.writeln("---------");
parent = parent.parent;
}
- AnalysisEngine.instance.logger.logError(
- buffer.toString(),
+ AnalysisEngine.instance.logger.logError(buffer.toString(),
new CaughtException(new AnalysisException(), null));
}
return element;
@@ -2625,15 +2557,14 @@
@override
Object visitDeclaredIdentifier(DeclaredIdentifier node) {
SimpleIdentifier variableName = node.identifier;
- sc.Token keyword = node.keyword;
LocalVariableElementImpl element =
new LocalVariableElementImpl.forNode(variableName);
ForEachStatement statement = node.parent as ForEachStatement;
int declarationEnd = node.offset + node.length;
int statementEnd = statement.offset + statement.length;
element.setVisibleRange(declarationEnd, statementEnd - declarationEnd - 1);
- element.const3 = _matches(keyword, sc.Keyword.CONST);
- element.final2 = _matches(keyword, sc.Keyword.FINAL);
+ element.const3 = node.isConst;
+ element.final2 = node.isFinal;
_currentHolder.addLocalVariable(element);
variableName.staticElement = element;
return super.visitDeclaredIdentifier(node);
@@ -2779,15 +2710,15 @@
return null;
}
String propertyName = propertyNameNode.name;
- TopLevelVariableElementImpl variable =
- _currentHolder.getTopLevelVariable(propertyName) as TopLevelVariableElementImpl;
+ TopLevelVariableElementImpl variable = _currentHolder
+ .getTopLevelVariable(propertyName) as TopLevelVariableElementImpl;
if (variable == null) {
variable = new TopLevelVariableElementImpl(node.name.name, -1);
variable.final2 = true;
variable.synthetic = true;
_currentHolder.addTopLevelVariable(variable);
}
- if (_matches(property, sc.Keyword.GET)) {
+ if (node.isGetter) {
PropertyAccessorElementImpl getter =
new PropertyAccessorElementImpl.forNode(propertyNameNode);
getter.functions = holder.functions;
@@ -2980,7 +2911,7 @@
field.synthetic = true;
_currentHolder.addField(field);
}
- if (_matches(property, sc.Keyword.GET)) {
+ if (node.isGetter) {
PropertyAccessorElementImpl getter =
new PropertyAccessorElementImpl.forNode(propertyNameNode);
getter.functions = holder.functions;
@@ -2993,8 +2924,7 @@
getter.generator = true;
}
getter.variable = field;
- getter.abstract =
- body is EmptyFunctionBody && node.externalKeyword == null;
+ getter.abstract = node.isAbstract;
getter.getter = true;
getter.static = isStatic;
field.getter = getter;
@@ -3014,8 +2944,7 @@
setter.generator = true;
}
setter.variable = field;
- setter.abstract = body is EmptyFunctionBody &&
- !_matches(node.externalKeyword, sc.Keyword.EXTERNAL);
+ setter.abstract = node.isAbstract;
setter.setter = true;
setter.static = isStatic;
field.setter = setter;
@@ -3036,14 +2965,12 @@
buffer.write(classNode.name);
buffer.write(" was not set while trying to build the element model.");
AnalysisEngine.instance.logger.logError(
- buffer.toString(),
- new CaughtException(exception, stackTrace));
+ buffer.toString(), new CaughtException(exception, stackTrace));
} else {
String message =
"Exception caught in ElementBuilder.visitMethodDeclaration()";
AnalysisEngine.instance.logger.logError(
- message,
- new CaughtException(exception, stackTrace));
+ message, new CaughtException(exception, stackTrace));
}
} finally {
if (node.name.staticElement == null) {
@@ -3055,9 +2982,9 @@
buffer.write(" in ");
buffer.write(classNode.name);
buffer.write(" was not set while trying to resolve types.");
- AnalysisEngine.instance.logger.logError(
- buffer.toString(),
- new CaughtException(new AnalysisException(buffer.toString()), null));
+ AnalysisEngine.instance.logger.logError(buffer.toString(),
+ new CaughtException(
+ new AnalysisException(buffer.toString()), null));
}
}
return null;
@@ -3122,9 +3049,8 @@
@override
Object visitVariableDeclaration(VariableDeclaration node) {
- sc.Token keyword = (node.parent as VariableDeclarationList).keyword;
- bool isConst = _matches(keyword, sc.Keyword.CONST);
- bool isFinal = _matches(keyword, sc.Keyword.FINAL);
+ bool isConst = node.isConst;
+ bool isFinal = node.isFinal;
bool hasInitializer = node.initializer != null;
VariableElementImpl element;
if (_inFieldContext) {
@@ -3191,9 +3117,8 @@
PropertyInducingElementImpl variable =
element as PropertyInducingElementImpl;
if (_inFieldContext) {
- (variable as FieldElementImpl).static = _matches(
- (node.parent.parent as FieldDeclaration).staticKeyword,
- sc.Keyword.STATIC);
+ (variable as FieldElementImpl).static =
+ (node.parent.parent as FieldDeclaration).isStatic;
}
PropertyAccessorElementImpl getter =
new PropertyAccessorElementImpl.forVariable(variable);
@@ -3237,8 +3162,8 @@
* @param interfaceType the interface type for which to create a default constructor
* @return the [ConstructorElement]s array with the single default constructor element
*/
- List<ConstructorElement>
- _createDefaultConstructors(InterfaceTypeImpl interfaceType) {
+ List<ConstructorElement> _createDefaultConstructors(
+ InterfaceTypeImpl interfaceType) {
ConstructorElementImpl constructor =
new ConstructorElementImpl.forNode(null);
constructor.synthetic = true;
@@ -3256,8 +3181,8 @@
* @param typeParameters the type parameters for which types are to be created
* @return an array of types corresponding to the given parameters
*/
- List<DartType>
- _createTypeParameterTypes(List<TypeParameterElement> typeParameters) {
+ List<DartType> _createTypeParameterTypes(
+ List<TypeParameterElement> typeParameters) {
int typeParameterCount = typeParameters.length;
List<DartType> typeArguments = new List<DartType>(typeParameterCount);
for (int i = 0; i < typeParameterCount; i++) {
@@ -3294,22 +3219,10 @@
}
/**
- * Return `true` if the given token is a token for the given keyword.
- *
- * @param token the token being tested
- * @param keyword the keyword being tested for
- * @return `true` if the given token is a token for the given keyword
- */
- bool _matches(sc.Token token, sc.Keyword keyword) =>
- token != null &&
- token.type == sc.TokenType.KEYWORD &&
- (token as sc.KeywordToken).keyword == keyword;
-
- /**
* Sets the visible source range for formal parameter.
*/
- void _setParameterVisibleRange(FormalParameter node,
- ParameterElementImpl element) {
+ void _setParameterVisibleRange(
+ FormalParameter node, ParameterElementImpl element) {
FunctionBody body = _getFunctionBody(node);
if (body != null) {
element.setVisibleRange(body.offset, body.length);
@@ -3708,8 +3621,8 @@
buffer.write(" type parameters");
}
if (buffer.length > 0) {
- AnalysisEngine.instance.logger.logError(
- "Failed to capture elements: $buffer");
+ AnalysisEngine.instance.logger
+ .logError("Failed to capture elements: $buffer");
}
}
}
@@ -3764,8 +3677,8 @@
}
@override
- Element internalLookup(Identifier identifier, String name,
- LibraryElement referencingLibrary) {
+ Element internalLookup(
+ Identifier identifier, String name, LibraryElement referencingLibrary) {
Element element = localLookup(name, referencingLibrary);
if (element != null) {
return element;
@@ -3774,13 +3687,9 @@
if (_hasHiddenName) {
Element hiddenElement = _hiddenElements[name];
if (hiddenElement != null) {
- errorListener.onError(
- new AnalysisError.con2(
- getSource(identifier),
- identifier.offset,
- identifier.length,
- CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION,
- []));
+ errorListener.onError(new AnalysisError.con2(getSource(identifier),
+ identifier.offset, identifier.length,
+ CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION, []));
return hiddenElement;
}
}
@@ -4050,8 +3959,7 @@
// TODO(jwren) Do we want to take all constant expressions into account?
// If for(; true; ) (or for(;;)), and the body doesn't return or the body
// doesn't have a break, then return true.
- bool implicitOrExplictTrue =
- conditionExpression == null ||
+ bool implicitOrExplictTrue = conditionExpression == null ||
(conditionExpression is BooleanLiteral && conditionExpression.value);
if (implicitOrExplictTrue) {
bool blockReturns = _nodeExits(node.body);
@@ -4329,8 +4237,8 @@
return false;
}
- bool
- _visitVariableDeclarations(NodeList<VariableDeclaration> variableDeclarations) {
+ bool _visitVariableDeclarations(
+ NodeList<VariableDeclaration> variableDeclarations) {
for (int i = variableDeclarations.length - 1; i >= 0; i--) {
if (variableDeclarations[i].accept(this)) {
return true;
@@ -4347,7 +4255,6 @@
}
}
-
/**
* Instances of the class `FunctionScope` implement the scope defined by a function.
*/
@@ -4482,14 +4389,14 @@
}
}
}
- ErrorReporter definingCompilationUnitErrorReporter =
- new ErrorReporter(_errorListener, _compilationUnits[0].element.source);
- _importsVerifier.generateDuplicateImportHints(
- definingCompilationUnitErrorReporter);
- _importsVerifier.generateUnusedImportHints(
- definingCompilationUnitErrorReporter);
- _library.accept(
- new _UnusedElementsVerifier(_errorListener, _usedElementsVisitor.usedElements));
+ ErrorReporter definingCompilationUnitErrorReporter = new ErrorReporter(
+ _errorListener, _compilationUnits[0].element.source);
+ _importsVerifier
+ .generateDuplicateImportHints(definingCompilationUnitErrorReporter);
+ _importsVerifier
+ .generateUnusedImportHints(definingCompilationUnitErrorReporter);
+ _library.accept(new _UnusedElementsVerifier(
+ _errorListener, _usedElementsVisitor.usedElements));
});
}
@@ -4639,8 +4546,7 @@
}
@override
- visitXmlAttributeNode(ht.XmlAttributeNode node) {
- }
+ visitXmlAttributeNode(ht.XmlAttributeNode node) {}
@override
visitXmlTagNode(ht.XmlTagNode node) {
@@ -4831,16 +4737,13 @@
_context.sourceFactory.resolveUri(htmlSource, scriptSourcePath);
script.scriptSource = scriptSource;
if (!_context.exists(scriptSource)) {
- _reportValueError(
- HtmlWarningCode.URI_DOES_NOT_EXIST,
- scriptAttribute,
- [scriptSourcePath]);
+ _reportValueError(HtmlWarningCode.URI_DOES_NOT_EXIST,
+ scriptAttribute, [scriptSourcePath]);
}
} on URISyntaxException catch (exception) {
- _reportValueError(
- HtmlWarningCode.INVALID_URI,
- scriptAttribute,
- [scriptSourcePath]);
+ _reportValueError(HtmlWarningCode.INVALID_URI, scriptAttribute, [
+ scriptSourcePath
+ ]);
}
}
node.scriptElement = script;
@@ -4935,15 +4838,10 @@
* @param length the number of characters to be highlighted
* @param arguments the arguments used to compose the error message
*/
- void _reportErrorForOffset(ErrorCode errorCode, int offset, int length,
- List<Object> arguments) {
- _errorListener.onError(
- new AnalysisError.con2(
- _htmlElement.source,
- offset,
- length,
- errorCode,
- arguments));
+ void _reportErrorForOffset(
+ ErrorCode errorCode, int offset, int length, List<Object> arguments) {
+ _errorListener.onError(new AnalysisError.con2(
+ _htmlElement.source, offset, length, errorCode, arguments));
}
/**
@@ -4990,11 +4888,7 @@
*/
ImplicitConstructorBuilder(Source source, LibraryElement libraryElement,
LibraryScope libraryScope, TypeProvider typeProvider, this._callback)
- : super.con3(
- libraryElement,
- source,
- typeProvider,
- libraryScope,
+ : super.con3(libraryElement, source, typeProvider, libraryScope,
libraryScope.errorListener);
@override
@@ -5022,15 +4916,10 @@
constructorFound = true;
}
if (_findForwardedConstructors(
- classElement,
- superclassName,
- superclassType,
- callback) &&
+ classElement, superclassName, superclassType, callback) &&
!constructorFound) {
- reportErrorForNode(
- CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS,
- node.withClause,
- [superclassType.element.name]);
+ reportErrorForNode(CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS,
+ node.withClause, [superclassType.element.name]);
classElement.mixinErrorsReported = true;
}
});
@@ -5059,23 +4948,15 @@
new List<ConstructorElement>();
void callback(ConstructorElement explicitConstructor,
List<DartType> parameterTypes, List<DartType> argumentTypes) {
- implicitConstructors.add(
- _createImplicitContructor(
- classElement.type,
- explicitConstructor,
- parameterTypes,
- argumentTypes));
+ implicitConstructors.add(_createImplicitContructor(
+ classElement.type, explicitConstructor, parameterTypes,
+ argumentTypes));
}
if (_findForwardedConstructors(
- classElement,
- superclassName,
- superclassType,
- callback)) {
+ classElement, superclassName, superclassType, callback)) {
if (implicitConstructors.isEmpty) {
- reportErrorForNode(
- CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS,
- node,
- [superclassElement.name]);
+ reportErrorForNode(CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS,
+ node, [superclassElement.name]);
} else {
classElement.constructors = implicitConstructors;
}
@@ -5151,9 +5032,9 @@
* can't be used as a mixin anyway).
*/
bool _findForwardedConstructors(ClassElementImpl classElement,
- TypeName superclassName, InterfaceType superclassType, void
- callback(ConstructorElement explicitConstructor, List<DartType> parameterTypes,
- List<DartType> argumentTypes)) {
+ TypeName superclassName, InterfaceType superclassType, void callback(
+ ConstructorElement explicitConstructor, List<DartType> parameterTypes,
+ List<DartType> argumentTypes)) {
ClassElement superclassElement = superclassType.element;
List<ConstructorElement> constructors = superclassElement.constructors;
int count = constructors.length;
@@ -5182,8 +5063,8 @@
* @param parameterTypes the parameter types that must be matched by the type arguments
* @return the argument types that correspond to the parameter types
*/
- List<DartType> _getArgumentTypes(TypeArgumentList typeArguments,
- List<DartType> parameterTypes) {
+ List<DartType> _getArgumentTypes(
+ TypeArgumentList typeArguments, List<DartType> parameterTypes) {
DynamicTypeImpl dynamic = DynamicTypeImpl.instance;
int parameterCount = parameterTypes.length;
List<DartType> types = new List<DartType>(parameterCount);
@@ -5244,13 +5125,8 @@
*/
void add(CompilationUnit unit, Source source, LibraryElement libraryElement,
LibraryScope libraryScope) {
- unit.accept(
- new ImplicitConstructorBuilder(
- source,
- libraryElement,
- libraryScope,
- typeProvider,
- _defer));
+ unit.accept(new ImplicitConstructorBuilder(
+ source, libraryElement, libraryScope, typeProvider, _defer));
}
/**
@@ -5279,8 +5155,8 @@
* [classElement], until after implicit constructors have been built for
* [superclassElement].
*/
- void _defer(ClassElement classElement, ClassElement superclassElement, void
- computation()) {
+ void _defer(ClassElement classElement, ClassElement superclassElement,
+ void computation()) {
assert(!_computations.containsKey(classElement));
_computations[classElement] = computation;
_dependencies.addEdge(classElement, superclassElement);
@@ -5439,8 +5315,7 @@
void generateDuplicateImportHints(ErrorReporter errorReporter) {
for (ImportDirective duplicateImport in _duplicateImports) {
errorReporter.reportErrorForNode(
- HintCode.DUPLICATE_IMPORT,
- duplicateImport.uri);
+ HintCode.DUPLICATE_IMPORT, duplicateImport.uri);
}
}
@@ -5463,8 +5338,7 @@
}
}
errorReporter.reportErrorForNode(
- HintCode.UNUSED_IMPORT,
- unusedImport.uri);
+ HintCode.UNUSED_IMPORT, unusedImport.uri);
}
}
@@ -5481,7 +5355,7 @@
//
// Initialize prefixElementMap
//
- if (importDirective.asToken != null) {
+ if (importDirective.asKeyword != null) {
SimpleIdentifier prefixIdentifier = importDirective.prefix;
if (prefixIdentifier != null) {
Element element = prefixIdentifier.staticElement;
@@ -5507,9 +5381,7 @@
// exports from the libraryElement.
//
_addAdditionalLibrariesForExports(
- libraryElement,
- importDirective,
- new List<LibraryElement>());
+ libraryElement, importDirective, new List<LibraryElement>());
}
}
}
@@ -5606,9 +5478,7 @@
for (LibraryElement exportedLibraryElt in library.exportedLibraries) {
_putIntoLibraryMap(exportedLibraryElt, importDirective);
_addAdditionalLibrariesForExports(
- exportedLibraryElt,
- importDirective,
- exportPath);
+ exportedLibraryElt, importDirective, exportPath);
}
}
@@ -5641,8 +5511,8 @@
* used to simply add the mapping between the library element an an import directive without
* needing to check to see if a list needs to be created.
*/
- void _putIntoLibraryMap(LibraryElement libraryElement,
- ImportDirective importDirective) {
+ void _putIntoLibraryMap(
+ LibraryElement libraryElement, ImportDirective importDirective) {
List<ImportDirective> importList = _libraryMap[libraryElement];
if (importList == null) {
importList = new List<ImportDirective>();
@@ -5818,18 +5688,16 @@
* @return the inherited executable element with the member name, or `null` if no such
* member exists
*/
- ExecutableElement lookupInheritance(ClassElement classElt,
- String memberName) {
+ ExecutableElement lookupInheritance(
+ ClassElement classElt, String memberName) {
if (memberName == null || memberName.isEmpty) {
return null;
}
ExecutableElement executable = _computeClassChainLookupMap(
- classElt,
- new HashSet<ClassElement>()).get(memberName);
+ classElt, new HashSet<ClassElement>()).get(memberName);
if (executable == null) {
- return _computeInterfaceLookupMap(
- classElt,
- new HashSet<ClassElement>()).get(memberName);
+ return _computeInterfaceLookupMap(classElt, new HashSet<ClassElement>())
+ .get(memberName);
}
return executable;
}
@@ -5863,17 +5731,15 @@
* @param memberName the name of the executable element to find and return
* @return the member's function type, or `null` if no such member exists
*/
- FunctionType lookupMemberType(InterfaceType interfaceType,
- String memberName) {
+ FunctionType lookupMemberType(
+ InterfaceType interfaceType, String memberName) {
ExecutableElement iteratorMember =
lookupMember(interfaceType.element, memberName);
if (iteratorMember == null) {
return null;
}
return substituteTypeArgumentsInMemberFromInheritance(
- iteratorMember.type,
- memberName,
- interfaceType);
+ iteratorMember.type, memberName, interfaceType);
}
/**
@@ -5886,8 +5752,8 @@
* @param memberName the name of the class member to query
* @return a list of overridden methods
*/
- List<ExecutableElement> lookupOverrides(ClassElement classElt,
- String memberName) {
+ List<ExecutableElement> lookupOverrides(
+ ClassElement classElt, String memberName) {
List<ExecutableElement> result = new List<ExecutableElement>();
if (memberName == null || memberName.isEmpty) {
return result;
@@ -5901,8 +5767,8 @@
if (overriddenElement is MultiplyInheritedExecutableElement) {
MultiplyInheritedExecutableElement multiplyInheritedElement =
overriddenElement;
- for (ExecutableElement element in
- multiplyInheritedElement.inheritedElements) {
+ for (ExecutableElement element
+ in multiplyInheritedElement.inheritedElements) {
result.add(element);
}
} else {
@@ -5924,9 +5790,9 @@
* @param definingType the type that is overriding the member
* @return the passed function type with any parameterized types substituted
*/
- FunctionType
- substituteTypeArgumentsInMemberFromInheritance(FunctionType baseFunctionType,
- String memberName, InterfaceType definingType) {
+ FunctionType substituteTypeArgumentsInMemberFromInheritance(
+ FunctionType baseFunctionType, String memberName,
+ InterfaceType definingType) {
// if the baseFunctionType is null, or does not have any parameters,
// return it.
if (baseFunctionType == null ||
@@ -5963,8 +5829,8 @@
* @return a mapping between the set of all string names of the members inherited from the passed
* [ClassElement] superclass hierarchy, and the associated [ExecutableElement]
*/
- MemberMap _computeClassChainLookupMap(ClassElement classElt,
- HashSet<ClassElement> visitedClasses) {
+ MemberMap _computeClassChainLookupMap(
+ ClassElement classElt, HashSet<ClassElement> visitedClasses) {
MemberMap resultMap = _classLookup[classElt];
if (resultMap != null) {
return resultMap;
@@ -5984,8 +5850,8 @@
if (!visitedClasses.contains(superclassElt)) {
visitedClasses.add(superclassElt);
try {
- resultMap =
- new MemberMap.con2(_computeClassChainLookupMap(superclassElt, visitedClasses));
+ resultMap = new MemberMap.con2(
+ _computeClassChainLookupMap(superclassElt, visitedClasses));
//
// Substitute the super types down the hierarchy.
//
@@ -6017,8 +5883,8 @@
if (!visitedClasses.contains(mixinElement)) {
visitedClasses.add(mixinElement);
try {
- MemberMap map =
- new MemberMap.con2(_computeClassChainLookupMap(mixinElement, visitedClasses));
+ MemberMap map = new MemberMap.con2(
+ _computeClassChainLookupMap(mixinElement, visitedClasses));
//
// Substitute the super types down the hierarchy.
//
@@ -6131,8 +5997,8 @@
* @return a mapping between the set of all string names of the members inherited from the passed
* [ClassElement] interface hierarchy, and the associated [ExecutableElement]
*/
- MemberMap _computeInterfaceLookupMap(ClassElement classElt,
- HashSet<ClassElement> visitedInterfaces) {
+ MemberMap _computeInterfaceLookupMap(
+ ClassElement classElt, HashSet<ClassElement> visitedInterfaces) {
MemberMap resultMap = _interfaceLookup[classElt];
if (resultMap != null) {
return resultMap;
@@ -6164,8 +6030,8 @@
* are no classes above this one in the class hierarchy. Otherwise, a list of interface
* lookup maps.
*/
- List<MemberMap> _gatherInterfaceLookupMaps(ClassElement classElt,
- HashSet<ClassElement> visitedInterfaces) {
+ List<MemberMap> _gatherInterfaceLookupMaps(
+ ClassElement classElt, HashSet<ClassElement> visitedInterfaces) {
InterfaceType supertype = classElt.supertype;
ClassElement superclassElement =
supertype != null ? supertype.element : null;
@@ -6282,8 +6148,8 @@
* @param memberName the name of the member to lookup in the class
* @return the found [ExecutableElement], or `null` if no such member was found
*/
- ExecutableElement _lookupMemberInClass(ClassElement classElt,
- String memberName) {
+ ExecutableElement _lookupMemberInClass(
+ ClassElement classElt, String memberName) {
List<MethodElement> methods = classElt.methods;
for (MethodElement method in methods) {
if (memberName == method.name &&
@@ -6312,8 +6178,8 @@
* @param type the type that will be recorded into the passed map
* @param doIncludeAbstract `true` if abstract members will be put into the map
*/
- void _recordMapWithClassMembers(MemberMap map, InterfaceType type,
- bool doIncludeAbstract) {
+ void _recordMapWithClassMembers(
+ MemberMap map, InterfaceType type, bool doIncludeAbstract) {
List<MethodElement> methods = type.methods;
for (MethodElement method in methods) {
if (method.isAccessibleIn(_library) &&
@@ -6350,8 +6216,8 @@
errorSet = new HashSet<AnalysisError>();
_errorsInClassElement[classElt] = errorSet;
}
- errorSet.add(
- new AnalysisError.con2(classElt.source, offset, length, errorCode, arguments));
+ errorSet.add(new AnalysisError.con2(
+ classElt.source, offset, length, errorCode, arguments));
}
/**
@@ -6366,8 +6232,8 @@
* defined in superclasses of [classElt].
* @return the inheritance lookup map for [classElt].
*/
- MemberMap _resolveInheritanceLookup(ClassElement classElt, HashMap<String,
- List<ExecutableElement>> unionMap) {
+ MemberMap _resolveInheritanceLookup(ClassElement classElt,
+ HashMap<String, List<ExecutableElement>> unionMap) {
MemberMap resultMap = new MemberMap();
unionMap.forEach((String key, List<ExecutableElement> list) {
int numOfEltsWithMatchingNames = list.length;
@@ -6422,8 +6288,9 @@
continue;
}
bool subtypeOfAllTypes = true;
- for (int j =
- 0; j < numOfEltsWithMatchingNames && subtypeOfAllTypes; j++) {
+ for (int j = 0;
+ j < numOfEltsWithMatchingNames && subtypeOfAllTypes;
+ j++) {
if (i != j) {
if (!subtype.isSubtypeOf(executableElementTypes[j])) {
subtypeOfAllTypes = false;
@@ -6476,12 +6343,12 @@
if (!classHasMember) {
String firstTwoFuntionTypesStr =
"${executableElementTypes[0]}, ${executableElementTypes[1]}";
- _reportError(
- classElt,
- classElt.nameOffset,
+ _reportError(classElt, classElt.nameOffset,
classElt.displayName.length,
- StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE,
- [key, firstTwoFuntionTypesStr]);
+ StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE, [
+ key,
+ firstTwoFuntionTypesStr
+ ]);
}
} else {
//
@@ -6494,7 +6361,8 @@
// union_multipleSubtypes_*
//
List<ExecutableElement> elementArrayToMerge =
- new List<ExecutableElement>(subtypesOfAllOtherTypesIndexes.length);
+ new List<ExecutableElement>(
+ subtypesOfAllOtherTypesIndexes.length);
for (int i = 0; i < elementArrayToMerge.length; i++) {
elementArrayToMerge[i] =
elements[subtypesOfAllOtherTypesIndexes[i]];
@@ -6505,9 +6373,7 @@
}
}
} else {
- _reportError(
- classElt,
- classElt.nameOffset,
+ _reportError(classElt, classElt.nameOffset,
classElt.displayName.length,
StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD,
[key]);
@@ -6524,8 +6390,8 @@
* @param superType the supertype to substitute into the members of the [MemberMap]
* @param map the MemberMap to perform the substitutions on
*/
- void _substituteTypeParametersDownHierarchy(InterfaceType superType,
- MemberMap map) {
+ void _substituteTypeParametersDownHierarchy(
+ InterfaceType superType, MemberMap map) {
for (int i = 0; i < map.size; i++) {
ExecutableElement executableElement = map.getValue(i);
if (executableElement is MethodMember) {
@@ -6534,8 +6400,7 @@
map.setValue(i, executableElement);
} else if (executableElement is PropertyAccessorMember) {
executableElement = PropertyAccessorMember.from(
- executableElement as PropertyAccessorMember,
- superType);
+ executableElement as PropertyAccessorMember, superType);
map.setValue(i, executableElement);
}
}
@@ -6550,8 +6415,8 @@
* @param lookupMaps the maps to be unioned together.
* @return the resulting union map.
*/
- HashMap<String, List<ExecutableElement>>
- _unionInterfaceLookupMaps(List<MemberMap> lookupMaps) {
+ HashMap<String, List<ExecutableElement>> _unionInterfaceLookupMaps(
+ List<MemberMap> lookupMaps) {
HashMap<String, List<ExecutableElement>> unionMap =
new HashMap<String, List<ExecutableElement>>();
for (MemberMap lookupMap in lookupMaps) {
@@ -6584,7 +6449,8 @@
for (ExecutableElement executableElementInList in list) {
bool isMethod2 = executableElementInList is MethodElement;
if (isMethod1 == isMethod2 &&
- executableElementInList.type == newExecutableElementEntry.type) {
+ executableElementInList.type ==
+ newExecutableElementEntry.type) {
alreadyInList = true;
break;
}
@@ -6613,8 +6479,8 @@
* <i>s</i> of type <b>dynamic</b> and return type <b>dynamic</b>.
*
*/
- static ExecutableElement
- _computeMergedExecutableElement(List<ExecutableElement> elementArrayToMerge) {
+ static ExecutableElement _computeMergedExecutableElement(
+ List<ExecutableElement> elementArrayToMerge) {
int h = _getNumOfPositionalParameters(elementArrayToMerge[0]);
int r = _getNumOfRequiredParameters(elementArrayToMerge[0]);
Set<String> namedParametersList = new HashSet<String>();
@@ -6630,11 +6496,8 @@
}
namedParametersList.addAll(_getNamedParameterNames(element));
}
- return _createSyntheticExecutableElement(
- elementArrayToMerge,
- elementArrayToMerge[0].displayName,
- r,
- h - r,
+ return _createSyntheticExecutableElement(elementArrayToMerge,
+ elementArrayToMerge[0].displayName, r, h - r,
new List.from(namedParametersList));
}
@@ -6649,13 +6512,13 @@
* @param namedParameters the list of [String]s that are the named parameters
* @return the created synthetic element
*/
- static ExecutableElement
- _createSyntheticExecutableElement(List<ExecutableElement> elementArrayToMerge,
- String name, int numOfRequiredParameters, int numOfPositionalParameters,
+ static ExecutableElement _createSyntheticExecutableElement(
+ List<ExecutableElement> elementArrayToMerge, String name,
+ int numOfRequiredParameters, int numOfPositionalParameters,
List<String> namedParameters) {
DynamicTypeImpl dynamicType = DynamicTypeImpl.instance;
- SimpleIdentifier nameIdentifier =
- new SimpleIdentifier(new sc.StringToken(sc.TokenType.IDENTIFIER, name, 0));
+ SimpleIdentifier nameIdentifier = new SimpleIdentifier(
+ new sc.StringToken(sc.TokenType.IDENTIFIER, name, 0));
ExecutableElementImpl executable;
if (elementArrayToMerge[0] is MethodElement) {
MultiplyInheritedMethodElementImpl unionedMethod =
@@ -6672,8 +6535,7 @@
unionedPropertyAccessor.inheritedElements = elementArrayToMerge;
executable = unionedPropertyAccessor;
}
- int numOfParameters =
- numOfRequiredParameters +
+ int numOfParameters = numOfRequiredParameters +
numOfPositionalParameters +
namedParameters.length;
List<ParameterElement> parameters =
@@ -6708,8 +6570,8 @@
/**
* Given some [ExecutableElement], return the list of named parameters.
*/
- static List<String>
- _getNamedParameterNames(ExecutableElement executableElement) {
+ static List<String> _getNamedParameterNames(
+ ExecutableElement executableElement) {
List<String> namedParameterNames = new List<String>();
List<ParameterElement> parameters = executableElement.parameters;
for (int i = 0; i < parameters.length; i++) {
@@ -6724,8 +6586,8 @@
/**
* Given some [ExecutableElement] return the number of parameters of the specified kind.
*/
- static int _getNumOfParameters(ExecutableElement executableElement,
- ParameterKind parameterKind) {
+ static int _getNumOfParameters(
+ ExecutableElement executableElement, ParameterKind parameterKind) {
int parameterCount = 0;
List<ParameterElement> parameters = executableElement.parameters;
for (int i = 0; i < parameters.length; i++) {
@@ -6742,8 +6604,8 @@
*
* Note: by positional we mean [ParameterKind.REQUIRED] or [ParameterKind.POSITIONAL].
*/
- static int
- _getNumOfPositionalParameters(ExecutableElement executableElement) =>
+ static int _getNumOfPositionalParameters(
+ ExecutableElement executableElement) =>
_getNumOfParameters(executableElement, ParameterKind.REQUIRED) +
_getNumOfParameters(executableElement, ParameterKind.POSITIONAL);
@@ -6788,10 +6650,11 @@
const INIT_STATE('INIT_IN_INITIALIZERS', 3);
static const List<INIT_STATE> values = const [
- NOT_INIT,
- INIT_IN_DECLARATION,
- INIT_IN_FIELD_FORMAL,
- INIT_IN_INITIALIZERS];
+ NOT_INIT,
+ INIT_IN_DECLARATION,
+ INIT_IN_FIELD_FORMAL,
+ INIT_IN_INITIALIZERS
+ ];
const INIT_STATE(String name, int ordinal) : super(name, ordinal);
}
@@ -7033,8 +6896,8 @@
LibraryElementImpl get libraryElement {
if (_libraryElement == null) {
try {
- _libraryElement =
- _analysisContext.computeLibraryElement(librarySource) as LibraryElementImpl;
+ _libraryElement = _analysisContext
+ .computeLibraryElement(librarySource) as LibraryElementImpl;
} on AnalysisException catch (exception, stackTrace) {
AnalysisEngine.instance.logger.logError(
"Could not compute library element for ${librarySource.fullName}",
@@ -7094,12 +6957,9 @@
Source getSource(UriBasedDirective directive) {
StringLiteral uriLiteral = directive.uri;
if (uriLiteral is StringInterpolation) {
- _errorListener.onError(
- new AnalysisError.con2(
- librarySource,
- uriLiteral.offset,
- uriLiteral.length,
- CompileTimeErrorCode.URI_WITH_INTERPOLATION));
+ _errorListener.onError(new AnalysisError.con2(librarySource,
+ uriLiteral.offset, uriLiteral.length,
+ CompileTimeErrorCode.URI_WITH_INTERPOLATION));
return null;
}
String uriContent = uriLiteral.stringValue.trim();
@@ -7115,23 +6975,15 @@
Source source =
_analysisContext.sourceFactory.resolveUri(librarySource, uriContent);
if (!_analysisContext.exists(source)) {
- _errorListener.onError(
- new AnalysisError.con2(
- librarySource,
- uriLiteral.offset,
- uriLiteral.length,
- CompileTimeErrorCode.URI_DOES_NOT_EXIST,
- [uriContent]));
+ _errorListener.onError(new AnalysisError.con2(librarySource,
+ uriLiteral.offset, uriLiteral.length,
+ CompileTimeErrorCode.URI_DOES_NOT_EXIST, [uriContent]));
}
return source;
} on URISyntaxException catch (exception) {
- _errorListener.onError(
- new AnalysisError.con2(
- librarySource,
- uriLiteral.offset,
- uriLiteral.length,
- CompileTimeErrorCode.INVALID_URI,
- [uriContent]));
+ _errorListener.onError(new AnalysisError.con2(librarySource,
+ uriLiteral.offset, uriLiteral.length,
+ CompileTimeErrorCode.INVALID_URI, [uriContent]));
}
return null;
}
@@ -7235,26 +7087,21 @@
String partLibraryName =
_getPartLibraryName(partSource, partUnit, directivesToResolve);
if (partLibraryName == null) {
- _errorListener.onError(
- new AnalysisError.con2(
- librarySource,
- partUri.offset,
- partUri.length,
- CompileTimeErrorCode.PART_OF_NON_PART,
- [partUri.toSource()]));
+ _errorListener.onError(new AnalysisError.con2(librarySource,
+ partUri.offset, partUri.length,
+ CompileTimeErrorCode.PART_OF_NON_PART, [partUri.toSource()]));
} else if (libraryNameNode == null) {
// TODO(brianwilkerson) Collect the names declared by the part.
// If they are all the same then we can use that name as the
// inferred name of the library and present it in a quick-fix.
// partLibraryNames.add(partLibraryName);
} else if (libraryNameNode.name != partLibraryName) {
- _errorListener.onError(
- new AnalysisError.con2(
- librarySource,
- partUri.offset,
- partUri.length,
- StaticWarningCode.PART_OF_DIFFERENT_LIBRARY,
- [libraryNameNode.name, partLibraryName]));
+ _errorListener.onError(new AnalysisError.con2(librarySource,
+ partUri.offset, partUri.length,
+ StaticWarningCode.PART_OF_DIFFERENT_LIBRARY, [
+ libraryNameNode.name,
+ partLibraryName
+ ]));
}
if (entryPoint == null) {
entryPoint = _findEntryPoint(part);
@@ -7265,17 +7112,14 @@
}
}
if (hasPartDirective && libraryNameNode == null) {
- _errorListener.onError(
- new AnalysisError.con1(
- librarySource,
- ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART));
+ _errorListener.onError(new AnalysisError.con1(librarySource,
+ ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART));
}
//
// Create and populate the library element.
//
LibraryElementImpl libraryElement = new LibraryElementImpl.forNode(
- _analysisContext.getContextFor(librarySource),
- libraryNameNode);
+ _analysisContext.getContextFor(librarySource), libraryNameNode);
libraryElement.definingCompilationUnit = definingCompilationUnitElement;
if (entryPoint != null) {
libraryElement.entryPoint = entryPoint;
@@ -7346,26 +7190,21 @@
String partLibraryName =
_getPartLibraryName(partSource, partUnit, directivesToResolve);
if (partLibraryName == null) {
- _errorListener.onError(
- new AnalysisError.con2(
- librarySource,
- partUri.offset,
- partUri.length,
- CompileTimeErrorCode.PART_OF_NON_PART,
- [partUri.toSource()]));
+ _errorListener.onError(new AnalysisError.con2(librarySource,
+ partUri.offset, partUri.length,
+ CompileTimeErrorCode.PART_OF_NON_PART, [partUri.toSource()]));
} else if (libraryNameNode == null) {
// TODO(brianwilkerson) Collect the names declared by the part.
// If they are all the same then we can use that name as the
// inferred name of the library and present it in a quick-fix.
// partLibraryNames.add(partLibraryName);
} else if (libraryNameNode.name != partLibraryName) {
- _errorListener.onError(
- new AnalysisError.con2(
- librarySource,
- partUri.offset,
- partUri.length,
- StaticWarningCode.PART_OF_DIFFERENT_LIBRARY,
- [libraryNameNode.name, partLibraryName]));
+ _errorListener.onError(new AnalysisError.con2(librarySource,
+ partUri.offset, partUri.length,
+ StaticWarningCode.PART_OF_DIFFERENT_LIBRARY, [
+ libraryNameNode.name,
+ partLibraryName
+ ]));
}
if (entryPoint == null) {
entryPoint = _findEntryPoint(part);
@@ -7377,17 +7216,14 @@
}
}
if (hasPartDirective && libraryNameNode == null) {
- _errorListener.onError(
- new AnalysisError.con1(
- librarySource,
- ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART));
+ _errorListener.onError(new AnalysisError.con1(librarySource,
+ ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART));
}
//
// Create and populate the library element.
//
LibraryElementImpl libraryElement = new LibraryElementImpl.forNode(
- _analysisContext.getContextFor(librarySource),
- libraryNameNode);
+ _analysisContext.getContextFor(librarySource), libraryNameNode);
libraryElement.definingCompilationUnit = definingCompilationUnitElement;
if (entryPoint != null) {
libraryElement.entryPoint = entryPoint;
@@ -7542,8 +7378,8 @@
}
@override
- Element internalLookup(Identifier identifier, String name,
- LibraryElement referencingLibrary) {
+ Element internalLookup(
+ Identifier identifier, String name, LibraryElement referencingLibrary) {
Element foundElement = localLookup(name, referencingLibrary);
if (foundElement != null) {
return foundElement;
@@ -7556,17 +7392,13 @@
foundElement = element;
} else if (!identical(foundElement, element)) {
foundElement = MultiplyDefinedElementImpl.fromElements(
- _definingLibrary.context,
- foundElement,
- element);
+ _definingLibrary.context, foundElement, element);
}
}
}
if (foundElement is MultiplyDefinedElementImpl) {
foundElement = _removeSdkElements(
- identifier,
- name,
- foundElement as MultiplyDefinedElementImpl);
+ identifier, name, foundElement as MultiplyDefinedElementImpl);
}
if (foundElement is MultiplyDefinedElementImpl) {
String foundEltName = foundElement.displayName;
@@ -7578,13 +7410,12 @@
libraryNames[i] = _getLibraryName(conflictingMembers[i]);
}
libraryNames.sort();
- errorListener.onError(
- new AnalysisError.con2(
- getSource(identifier),
- identifier.offset,
- identifier.length,
- StaticWarningCode.AMBIGUOUS_IMPORT,
- [foundEltName, StringUtilities.printListOfQuotedNames(libraryNames)]));
+ errorListener.onError(new AnalysisError.con2(getSource(identifier),
+ identifier.offset, identifier.length,
+ StaticWarningCode.AMBIGUOUS_IMPORT, [
+ foundEltName,
+ StringUtilities.printListOfQuotedNames(libraryNames)
+ ]));
return foundElement;
}
if (foundElement != null) {
@@ -7636,11 +7467,11 @@
for (int i = 0; i < count; i++) {
LibraryElement importedLibrary = imports[i].importedLibrary;
if (importedLibrary != null) {
- for (LibraryElement exportedLibrary in
- importedLibrary.exportedLibraries) {
+ for (LibraryElement exportedLibrary
+ in importedLibrary.exportedLibraries) {
if (identical(exportedLibrary, library)) {
- indirectSources.add(
- importedLibrary.definingCompilationUnit.displayName);
+ indirectSources
+ .add(importedLibrary.definingCompilationUnit.displayName);
}
}
}
@@ -7687,13 +7518,13 @@
if (sdkElement != null && to > 0) {
String sdkLibName = _getLibraryName(sdkElement);
String otherLibName = _getLibraryName(conflictingMembers[0]);
- errorListener.onError(
- new AnalysisError.con2(
- getSource(identifier),
- identifier.offset,
- identifier.length,
- StaticWarningCode.CONFLICTING_DART_IMPORT,
- [name, sdkLibName, otherLibName]));
+ errorListener.onError(new AnalysisError.con2(getSource(identifier),
+ identifier.offset, identifier.length,
+ StaticWarningCode.CONFLICTING_DART_IMPORT, [
+ name,
+ sdkLibName,
+ otherLibName
+ ]));
}
if (to == length) {
// None of the members were removed
@@ -7703,8 +7534,8 @@
return conflictingMembers[0];
} else if (to == 0) {
// All members were removed
- AnalysisEngine.instance.logger.logInformation(
- "Multiply defined SDK element: $foundElement");
+ AnalysisEngine.instance.logger
+ .logInformation("Multiply defined SDK element: $foundElement");
return foundElement;
}
List<Element> remaining = new List<Element>(to);
@@ -7818,8 +7649,8 @@
* @return the element representing the resolved library
* @throws AnalysisException if the library could not be resolved for some reason
*/
- LibraryElement resolveEmbeddedLibrary(Source librarySource,
- CompilationUnit unit, bool fullAnalysis) {
+ LibraryElement resolveEmbeddedLibrary(
+ Source librarySource, CompilationUnit unit, bool fullAnalysis) {
//
// Create the objects representing the library being resolved and the core
// library.
@@ -7832,8 +7663,7 @@
_coreLibrary = createLibrary(_coreLibrarySource);
if (_coreLibrary == null) {
LibraryResolver2.missingCoreLibrary(
- analysisContext,
- _coreLibrarySource);
+ analysisContext, _coreLibrarySource);
}
}
_asyncLibrary = _libraryMap[_asyncLibrarySource];
@@ -7843,8 +7673,7 @@
_asyncLibrary = createLibrary(_asyncLibrarySource);
if (_asyncLibrary == null) {
LibraryResolver2.missingAsyncLibrary(
- analysisContext,
- _asyncLibrarySource);
+ analysisContext, _asyncLibrarySource);
}
}
//
@@ -8016,9 +7845,7 @@
if (dependentLibraries != null) {
for (Library dependentLibrary in dependentLibraries) {
_addLibrariesInCycle(
- dependentLibrary,
- librariesInCycle,
- dependencyMap);
+ dependentLibrary, librariesInCycle, dependencyMap);
}
}
}
@@ -8033,8 +7860,9 @@
* @param visitedLibraries the libraries that have already been visited, used to prevent infinite
* recursion
*/
- void _addToDependencyMap(Library library, HashMap<Library,
- List<Library>> dependencyMap, Set<Library> visitedLibraries) {
+ void _addToDependencyMap(Library library,
+ HashMap<Library, List<Library>> dependencyMap,
+ Set<Library> visitedLibraries) {
if (visitedLibraries.add(library)) {
bool asyncFound = false;
for (Library referencedLibrary in library.importsAndExports) {
@@ -8111,7 +7939,7 @@
importElement.uriOffset = uriLiteral.offset;
importElement.uriEnd = uriLiteral.end;
importElement.uri = uriContent;
- importElement.deferred = importDirective.deferredToken != null;
+ importElement.deferred = importDirective.deferredKeyword != null;
importElement.combinators = _buildCombinators(importDirective);
LibraryElement importedLibraryElement =
importedLibrary.libraryElement;
@@ -8134,16 +7962,12 @@
imports.add(importElement);
if (analysisContext.computeKindOf(importedSource) !=
SourceKind.LIBRARY) {
- ErrorCode errorCode = (importElement.isDeferred ?
- StaticWarningCode.IMPORT_OF_NON_LIBRARY :
- CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY);
- _errorListener.onError(
- new AnalysisError.con2(
- library.librarySource,
- uriLiteral.offset,
- uriLiteral.length,
- errorCode,
- [uriLiteral.toSource()]));
+ ErrorCode errorCode = (importElement.isDeferred
+ ? StaticWarningCode.IMPORT_OF_NON_LIBRARY
+ : CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY);
+ _errorListener.onError(new AnalysisError.con2(
+ library.librarySource, uriLiteral.offset, uriLiteral.length,
+ errorCode, [uriLiteral.toSource()]));
}
}
}
@@ -8170,13 +7994,11 @@
exports.add(exportElement);
if (analysisContext.computeKindOf(exportedSource) !=
SourceKind.LIBRARY) {
- _errorListener.onError(
- new AnalysisError.con2(
- library.librarySource,
- uriLiteral.offset,
- uriLiteral.length,
- CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY,
- [uriLiteral.toSource()]));
+ _errorListener.onError(new AnalysisError.con2(
+ library.librarySource, uriLiteral.offset, uriLiteral.length,
+ CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY, [
+ uriLiteral.toSource()
+ ]));
}
}
}
@@ -8194,8 +8016,8 @@
libraryElement.imports = imports;
libraryElement.exports = exports;
if (libraryElement.entryPoint == null) {
- Namespace namespace =
- new NamespaceBuilder().createExportNamespaceForLibrary(libraryElement);
+ Namespace namespace = new NamespaceBuilder()
+ .createExportNamespaceForLibrary(libraryElement);
Element element = namespace.get(LibraryElementBuilder.ENTRY_POINT_NAME);
if (element is FunctionElement) {
libraryElement.entryPoint = element;
@@ -8248,10 +8070,7 @@
new ImplicitConstructorComputer(_typeProvider);
for (Library library in _librariesInCycles) {
for (Source source in library.compilationUnitSources) {
- computer.add(
- library.getAST(source),
- source,
- library.libraryElement,
+ computer.add(library.getAST(source), source, library.libraryElement,
library.libraryScope);
}
}
@@ -8283,8 +8102,8 @@
// TODO(brianwilkerson) We need to sort the type aliases such that all
// aliases referenced by an alias T are resolved before we resolve T.
for (LibraryResolver_TypeAliasInfo info in typeAliases) {
- TypeResolverVisitor visitor =
- new TypeResolverVisitor.con1(info._library, info._source, _typeProvider);
+ TypeResolverVisitor visitor = new TypeResolverVisitor.con1(
+ info._library, info._source, _typeProvider);
info._typeAlias.accept(visitor);
}
});
@@ -8302,9 +8121,9 @@
for (Source source in library.compilationUnitSources) {
TypeResolverVisitorFactory typeResolverVisitorFactory =
analysisContext.typeResolverVisitorFactory;
- TypeResolverVisitor visitor = (typeResolverVisitorFactory == null) ?
- new TypeResolverVisitor.con1(library, source, _typeProvider) :
- typeResolverVisitorFactory(library, source, _typeProvider);
+ TypeResolverVisitor visitor = (typeResolverVisitorFactory == null)
+ ? new TypeResolverVisitor.con1(library, source, _typeProvider)
+ : typeResolverVisitorFactory(library, source, _typeProvider);
library.getAST(source).accept(visitor);
}
}
@@ -8336,8 +8155,8 @@
* @param library the library to be processed to find libraries that have not yet been traversed
* @throws AnalysisException if some portion of the library graph could not be traversed
*/
- void _computeEmbeddedLibraryDependencies(Library library,
- CompilationUnit unit) {
+ void _computeEmbeddedLibraryDependencies(
+ Library library, CompilationUnit unit) {
Source librarySource = library.librarySource;
HashSet<Source> exportedSources = new HashSet<Source>();
HashSet<Source> importedSources = new HashSet<Source>();
@@ -8354,10 +8173,8 @@
}
}
}
- _computeLibraryDependenciesFromDirectives(
- library,
- new List.from(importedSources),
- new List.from(exportedSources));
+ _computeLibraryDependenciesFromDirectives(library,
+ new List.from(importedSources), new List.from(exportedSources));
}
/**
@@ -8385,8 +8202,7 @@
*/
void _computeLibraryDependencies(Library library) {
Source librarySource = library.librarySource;
- _computeLibraryDependenciesFromDirectives(
- library,
+ _computeLibraryDependenciesFromDirectives(library,
analysisContext.computeImportedLibraries(librarySource),
analysisContext.computeExportedLibraries(librarySource));
}
@@ -8514,8 +8330,8 @@
*/
void _performConstantEvaluation() {
PerformanceStatistics.resolve.makeCurrentWhile(() {
- ConstantValueComputer computer =
- new ConstantValueComputer(_typeProvider, analysisContext.declaredVariables);
+ ConstantValueComputer computer = new ConstantValueComputer(
+ _typeProvider, analysisContext.declaredVariables);
for (Library library in _librariesInCycles) {
for (Source source in library.compilationUnitSources) {
try {
@@ -8539,13 +8355,13 @@
CompilationUnit unit = library.getAST(source);
ErrorReporter errorReporter =
new ErrorReporter(_errorListener, source);
- ConstantVerifier constantVerifier =
- new ConstantVerifier(errorReporter, library.libraryElement, _typeProvider);
+ ConstantVerifier constantVerifier = new ConstantVerifier(
+ errorReporter, library.libraryElement, _typeProvider);
unit.accept(constantVerifier);
} on AnalysisException catch (exception, stackTrace) {
AnalysisEngine.instance.logger.logError(
"Internal Error: Could not access AST for ${source.fullName} "
- "during constant verification",
+ "during constant verification",
new CaughtException(exception, stackTrace));
}
}
@@ -8580,9 +8396,9 @@
new VariableResolverVisitor.con1(library, source, _typeProvider));
ResolverVisitorFactory visitorFactory =
analysisContext.resolverVisitorFactory;
- ResolverVisitor visitor = visitorFactory != null ?
- visitorFactory(library, source, _typeProvider) :
- new ResolverVisitor.con1(library, source, _typeProvider);
+ ResolverVisitor visitor = visitorFactory != null
+ ? visitorFactory(library, source, _typeProvider)
+ : new ResolverVisitor.con1(library, source, _typeProvider);
ast.accept(visitor);
}
});
@@ -8703,8 +8519,8 @@
* @return the element representing the resolved library
* @throws AnalysisException if the library could not be resolved for some reason
*/
- LibraryElement resolveLibrary(Source librarySource,
- List<ResolvableLibrary> librariesInCycle) {
+ LibraryElement resolveLibrary(
+ Source librarySource, List<ResolvableLibrary> librariesInCycle) {
//
// Build the map of libraries that are known.
//
@@ -8826,7 +8642,7 @@
importElement.uriEnd = uriLiteral.end;
}
importElement.uri = uriContent;
- importElement.deferred = importDirective.deferredToken != null;
+ importElement.deferred = importDirective.deferredKeyword != null;
importElement.combinators = _buildCombinators(importDirective);
LibraryElement importedLibraryElement =
importedLibrary.libraryElement;
@@ -8849,16 +8665,12 @@
imports.add(importElement);
if (analysisContext.computeKindOf(importedSource) !=
SourceKind.LIBRARY) {
- ErrorCode errorCode = (importElement.isDeferred ?
- StaticWarningCode.IMPORT_OF_NON_LIBRARY :
- CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY);
- _errorListener.onError(
- new AnalysisError.con2(
- library.librarySource,
- uriLiteral.offset,
- uriLiteral.length,
- errorCode,
- [uriLiteral.toSource()]));
+ ErrorCode errorCode = (importElement.isDeferred
+ ? StaticWarningCode.IMPORT_OF_NON_LIBRARY
+ : CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY);
+ _errorListener.onError(new AnalysisError.con2(
+ library.librarySource, uriLiteral.offset, uriLiteral.length,
+ errorCode, [uriLiteral.toSource()]));
}
}
}
@@ -8888,13 +8700,11 @@
exports.add(exportElement);
if (analysisContext.computeKindOf(exportedSource) !=
SourceKind.LIBRARY) {
- _errorListener.onError(
- new AnalysisError.con2(
- library.librarySource,
- uriLiteral.offset,
- uriLiteral.length,
- CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY,
- [uriLiteral.toSource()]));
+ _errorListener.onError(new AnalysisError.con2(
+ library.librarySource, uriLiteral.offset, uriLiteral.length,
+ CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY, [
+ uriLiteral.toSource()
+ ]));
}
}
}
@@ -8912,8 +8722,8 @@
libraryElement.imports = imports;
libraryElement.exports = exports;
if (libraryElement.entryPoint == null) {
- Namespace namespace =
- new NamespaceBuilder().createExportNamespaceForLibrary(libraryElement);
+ Namespace namespace = new NamespaceBuilder()
+ .createExportNamespaceForLibrary(libraryElement);
Element element = namespace.get(LibraryElementBuilder.ENTRY_POINT_NAME);
if (element is FunctionElement) {
libraryElement.entryPoint = element;
@@ -8964,15 +8774,12 @@
ImplicitConstructorComputer computer =
new ImplicitConstructorComputer(_typeProvider);
for (ResolvableLibrary library in _librariesInCycle) {
- for (ResolvableCompilationUnit unit in
- library.resolvableCompilationUnits) {
+ for (ResolvableCompilationUnit unit
+ in library.resolvableCompilationUnits) {
Source source = unit.source;
CompilationUnit ast = unit.compilationUnit;
- computer.add(
- ast,
- source,
- library.libraryElement,
- library.libraryScope);
+ computer
+ .add(ast, source, library.libraryElement, library.libraryScope);
}
}
computer.compute();
@@ -9009,13 +8816,13 @@
List<LibraryResolver2_TypeAliasInfo> typeAliases =
new List<LibraryResolver2_TypeAliasInfo>();
for (ResolvableLibrary library in _librariesInCycle) {
- for (ResolvableCompilationUnit unit in
- library.resolvableCompilationUnits) {
- for (CompilationUnitMember member in
- unit.compilationUnit.declarations) {
+ for (ResolvableCompilationUnit unit
+ in library.resolvableCompilationUnits) {
+ for (CompilationUnitMember member
+ in unit.compilationUnit.declarations) {
if (member is FunctionTypeAlias) {
- typeAliases.add(
- new LibraryResolver2_TypeAliasInfo(library, unit.source, member));
+ typeAliases.add(new LibraryResolver2_TypeAliasInfo(
+ library, unit.source, member));
}
}
}
@@ -9023,8 +8830,8 @@
// TODO(brianwilkerson) We need to sort the type aliases such that all
// aliases referenced by an alias T are resolved before we resolve T.
for (LibraryResolver2_TypeAliasInfo info in typeAliases) {
- TypeResolverVisitor visitor =
- new TypeResolverVisitor.con4(info._library, info._source, _typeProvider);
+ TypeResolverVisitor visitor = new TypeResolverVisitor.con4(
+ info._library, info._source, _typeProvider);
info._typeAlias.accept(visitor);
}
});
@@ -9039,8 +8846,8 @@
void _buildTypeHierarchies() {
PerformanceStatistics.resolve.makeCurrentWhile(() {
for (ResolvableLibrary library in _librariesInCycle) {
- for (ResolvableCompilationUnit unit in
- library.resolvableCompilationUnits) {
+ for (ResolvableCompilationUnit unit
+ in library.resolvableCompilationUnits) {
Source source = unit.source;
CompilationUnit ast = unit.compilationUnit;
TypeResolverVisitor visitor =
@@ -9071,11 +8878,11 @@
*/
void _performConstantEvaluation() {
PerformanceStatistics.resolve.makeCurrentWhile(() {
- ConstantValueComputer computer =
- new ConstantValueComputer(_typeProvider, analysisContext.declaredVariables);
+ ConstantValueComputer computer = new ConstantValueComputer(
+ _typeProvider, analysisContext.declaredVariables);
for (ResolvableLibrary library in _librariesInCycle) {
- for (ResolvableCompilationUnit unit in
- library.resolvableCompilationUnits) {
+ for (ResolvableCompilationUnit unit
+ in library.resolvableCompilationUnits) {
CompilationUnit ast = unit.compilationUnit;
if (ast != null) {
computer.add(ast);
@@ -9086,13 +8893,13 @@
// As a temporary workaround for issue 21572, run ConstantVerifier now.
// TODO(paulberry): remove this workaround once issue 21572 is fixed.
for (ResolvableLibrary library in _librariesInCycle) {
- for (ResolvableCompilationUnit unit in
- library.resolvableCompilationUnits) {
+ for (ResolvableCompilationUnit unit
+ in library.resolvableCompilationUnits) {
CompilationUnit ast = unit.compilationUnit;
ErrorReporter errorReporter =
new ErrorReporter(_errorListener, unit.source);
- ConstantVerifier constantVerifier =
- new ConstantVerifier(errorReporter, library.libraryElement, _typeProvider);
+ ConstantVerifier constantVerifier = new ConstantVerifier(
+ errorReporter, library.libraryElement, _typeProvider);
ast.accept(constantVerifier);
}
}
@@ -9120,8 +8927,8 @@
*/
void _resolveReferencesAndTypesInLibrary(ResolvableLibrary library) {
PerformanceStatistics.resolve.makeCurrentWhile(() {
- for (ResolvableCompilationUnit unit in library.resolvableCompilationUnits)
- {
+ for (ResolvableCompilationUnit unit
+ in library.resolvableCompilationUnits) {
Source source = unit.source;
CompilationUnit ast = unit.compilationUnit;
ast.accept(
@@ -9138,8 +8945,8 @@
* [analysisContext] and throw an exception. [asyncLibrarySource] is the source
* representing the async library.
*/
- static void missingAsyncLibrary(AnalysisContext analysisContext,
- Source asyncLibrarySource) {
+ static void missingAsyncLibrary(
+ AnalysisContext analysisContext, Source asyncLibrarySource) {
throw new AnalysisException("Could not resolve dart:async");
}
@@ -9151,13 +8958,12 @@
* @param coreLibrarySource the source representing the core library
* @throws AnalysisException always
*/
- static void missingCoreLibrary(AnalysisContext analysisContext,
- Source coreLibrarySource) {
+ static void missingCoreLibrary(
+ AnalysisContext analysisContext, Source coreLibrarySource) {
throw new AnalysisException("Could not resolve dart:core");
}
}
-
/**
* Instances of the class `TypeAliasInfo` hold information about a [TypeAlias].
*/
@@ -9209,8 +9015,8 @@
* @param definingLibrary the element representing the library represented by this scope
* @param errorListener the listener that is to be informed when an error is encountered
*/
- LibraryScope(LibraryElement definingLibrary,
- AnalysisErrorListener errorListener)
+ LibraryScope(
+ LibraryElement definingLibrary, AnalysisErrorListener errorListener)
: super(new LibraryImportScope(definingLibrary, errorListener)) {
_defineTopLevelNames(definingLibrary);
}
@@ -9227,12 +9033,11 @@
offset = accessor.variable.nameOffset;
}
}
- return new AnalysisError.con2(
- duplicate.source,
- offset,
+ return new AnalysisError.con2(duplicate.source, offset,
duplicate.displayName.length,
- CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER,
- [existing.displayName]);
+ CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER, [
+ existing.displayName
+ ]);
}
return super.getErrorForDuplicate(existing, duplicate);
}
@@ -9254,8 +9059,8 @@
for (FunctionElement element in compilationUnit.functions) {
define(element);
}
- for (FunctionTypeAliasElement element in
- compilationUnit.functionTypeAliases) {
+ for (FunctionTypeAliasElement element
+ in compilationUnit.functionTypeAliases) {
define(element);
}
for (ClassElement element in compilationUnit.types) {
@@ -9520,7 +9325,8 @@
* @return the export namespace that was created
*/
Namespace createExportNamespaceForLibrary(LibraryElement library) =>
- new Namespace(_createExportMapping(library, new HashSet<LibraryElement>()));
+ new Namespace(
+ _createExportMapping(library, new HashSet<LibraryElement>()));
/**
* Create a namespace representing the import namespace of the given library.
@@ -9565,8 +9371,8 @@
* @param definedNames the mapping table to which the names in the given namespace are to be added
* @param namespace the namespace containing the names to be added to this namespace
*/
- void _addAllFromMap(Map<String, Element> definedNames, Map<String,
- Element> newNames) {
+ void _addAllFromMap(
+ Map<String, Element> definedNames, Map<String, Element> newNames) {
newNames.forEach((String name, Element element) {
definedNames[name] = element;
});
@@ -9578,8 +9384,8 @@
* @param definedNames the mapping table to which the names in the given namespace are to be added
* @param namespace the namespace containing the names to be added to this namespace
*/
- void _addAllFromNamespace(Map<String, Element> definedNames,
- Namespace namespace) {
+ void _addAllFromNamespace(
+ Map<String, Element> definedNames, Namespace namespace) {
if (namespace != null) {
_addAllFromMap(definedNames, namespace.definedNames);
}
@@ -9617,8 +9423,8 @@
for (FunctionElement element in compilationUnit.functions) {
_addIfPublic(definedNames, element);
}
- for (FunctionTypeAliasElement element in
- compilationUnit.functionTypeAliases) {
+ for (FunctionTypeAliasElement element
+ in compilationUnit.functionTypeAliases) {
_addIfPublic(definedNames, element);
}
for (ClassElement element in compilationUnit.types) {
@@ -9632,8 +9438,9 @@
* @param definedNames the mapping table to which the namespace operations are to be applied
* @param combinators the combinators to be applied
*/
- HashMap<String, Element> _applyCombinators(HashMap<String,
- Element> definedNames, List<NamespaceCombinator> combinators) {
+ HashMap<String, Element> _applyCombinators(
+ HashMap<String, Element> definedNames,
+ List<NamespaceCombinator> combinators) {
for (NamespaceCombinator combinator in combinators) {
if (combinator is HideElementCombinator) {
_hide(definedNames, combinator.hiddenNames);
@@ -9641,8 +9448,8 @@
definedNames = _show(definedNames, combinator.shownNames);
} else {
// Internal error.
- AnalysisEngine.instance.logger.logError(
- "Unknown type of combinator: ${combinator.runtimeType}");
+ AnalysisEngine.instance.logger
+ .logError("Unknown type of combinator: ${combinator.runtimeType}");
}
}
return definedNames;
@@ -9654,8 +9461,8 @@
* @param definedNames the names that were defined before this operation
* @param prefixElement the element defining the prefix to be added to the names
*/
- HashMap<String, Element> _applyPrefix(HashMap<String, Element> definedNames,
- PrefixElement prefixElement) {
+ HashMap<String, Element> _applyPrefix(
+ HashMap<String, Element> definedNames, PrefixElement prefixElement) {
if (prefixElement != null) {
String prefix = prefixElement.name;
HashMap<String, Element> newNames = new HashMap<String, Element>();
@@ -9677,8 +9484,8 @@
* be added by another library
* @return the mapping table that was created
*/
- HashMap<String, Element> _createExportMapping(LibraryElement library,
- HashSet<LibraryElement> visitedElements) {
+ HashMap<String, Element> _createExportMapping(
+ LibraryElement library, HashSet<LibraryElement> visitedElements) {
visitedElements.add(library);
try {
HashMap<String, Element> definedNames = new HashMap<String, Element>();
@@ -9696,9 +9503,9 @@
_addAllFromMap(definedNames, exportedNames);
}
}
- _addAllFromNamespace(
- definedNames,
- (library.context as InternalAnalysisContext).getPublicNamespace(library));
+ _addAllFromNamespace(definedNames,
+ (library.context as InternalAnalysisContext)
+ .getPublicNamespace(library));
return definedNames;
} finally {
visitedElements.remove(library);
@@ -9725,8 +9532,8 @@
* @param definedNames the names that were defined before this operation
* @param shownNames the names to be shown
*/
- HashMap<String, Element> _show(HashMap<String, Element> definedNames,
- List<String> shownNames) {
+ HashMap<String, Element> _show(
+ HashMap<String, Element> definedNames, List<String> shownNames) {
HashMap<String, Element> newNames = new HashMap<String, Element>();
for (String name in shownNames) {
Element element = definedNames[name];
@@ -9773,17 +9580,14 @@
if (_getOverriddenMember(element) == null) {
if (element is MethodElement) {
_errorReporter.reportErrorForNode(
- HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD,
- node.name);
+ HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD, node.name);
} else if (element is PropertyAccessorElement) {
if (element.isGetter) {
_errorReporter.reportErrorForNode(
- HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER,
- node.name);
+ HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER, node.name);
} else {
_errorReporter.reportErrorForNode(
- HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER,
- node.name);
+ HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER, node.name);
}
}
}
@@ -10305,18 +10109,15 @@
*/
class ResolverErrorCode extends ErrorCode {
static const ResolverErrorCode BREAK_LABEL_ON_SWITCH_MEMBER =
- const ResolverErrorCode(
- 'BREAK_LABEL_ON_SWITCH_MEMBER',
+ const ResolverErrorCode('BREAK_LABEL_ON_SWITCH_MEMBER',
"Break label resolves to case or default statement");
static const ResolverErrorCode CONTINUE_LABEL_ON_SWITCH =
- const ResolverErrorCode(
- 'CONTINUE_LABEL_ON_SWITCH',
+ const ResolverErrorCode('CONTINUE_LABEL_ON_SWITCH',
"A continue label resolves to switch, must be loop or switch member");
static const ResolverErrorCode MISSING_LIBRARY_DIRECTIVE_WITH_PART =
- const ResolverErrorCode(
- 'MISSING_LIBRARY_DIRECTIVE_WITH_PART',
+ const ResolverErrorCode('MISSING_LIBRARY_DIRECTIVE_WITH_PART',
"Libraries that have parts must have a library directive");
/**
@@ -10412,20 +10213,20 @@
* @param source the source representing the compilation unit being visited
* @param typeProvider the object used to access the types from the core library
*/
- ResolverVisitor.con1(Library library, Source source,
- TypeProvider typeProvider, {StaticTypeAnalyzer typeAnalyzer,
+ ResolverVisitor.con1(
+ Library library, Source source, TypeProvider typeProvider,
+ {StaticTypeAnalyzer typeAnalyzer,
StaticTypeAnalyzerFactory typeAnalyzerFactory})
: super.con1(library, source, typeProvider) {
this._inheritanceManager = library.inheritanceManager;
this._elementResolver = new ElementResolver(this);
- this._typeAnalyzer = typeAnalyzer != null ?
- typeAnalyzer :
- (typeAnalyzerFactory != null ?
- typeAnalyzerFactory(this) :
- new StaticTypeAnalyzer(this));
+ this._typeAnalyzer = typeAnalyzer != null
+ ? typeAnalyzer
+ : (typeAnalyzerFactory != null
+ ? typeAnalyzerFactory(this)
+ : new StaticTypeAnalyzer(this));
}
-
/**
* Initialize a newly created visitor to resolve the nodes in a compilation unit.
*
@@ -10456,13 +10257,10 @@
* during resolution
*/
ResolverVisitor.con3(LibraryElement definingLibrary, Source source,
- TypeProvider typeProvider, Scope nameScope, AnalysisErrorListener errorListener)
+ TypeProvider typeProvider, Scope nameScope,
+ AnalysisErrorListener errorListener)
: super.con3(
- definingLibrary,
- source,
- typeProvider,
- nameScope,
- errorListener) {
+ definingLibrary, source, typeProvider, nameScope, errorListener) {
this._inheritanceManager = new InheritanceManager(definingLibrary);
this._elementResolver = new ElementResolver(this);
this._typeAnalyzer = new StaticTypeAnalyzer(this);
@@ -10475,8 +10273,8 @@
* @param source the source representing the compilation unit being visited
* @param typeProvider the object used to access the types from the core library
*/
- ResolverVisitor.con4(ResolvableLibrary library, Source source,
- TypeProvider typeProvider)
+ ResolverVisitor.con4(
+ ResolvableLibrary library, Source source, TypeProvider typeProvider)
: super.con4(library, source, typeProvider) {
this._inheritanceManager = library.inheritanceManager;
this._elementResolver = new ElementResolver(this);
@@ -10611,8 +10409,8 @@
* @param potentialType the potential type of the elements
* @param allowPrecisionLoss see @{code overrideVariable} docs
*/
- void overrideExpression(Expression expression, DartType potentialType,
- bool allowPrecisionLoss) {
+ void overrideExpression(
+ Expression expression, DartType potentialType, bool allowPrecisionLoss) {
VariableElement element = getOverridableStaticElement(expression);
if (element != null) {
overrideVariable(element, potentialType, allowPrecisionLoss);
@@ -10639,6 +10437,10 @@
}
DartType currentType = _overrideManager.getBestType(element);
+ if (potentialType == currentType) {
+ return;
+ }
+
// If we aren't allowing precision loss then the third and fourth conditions
// check that we aren't losing precision.
//
@@ -11322,8 +11124,8 @@
}
@override
- Object
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ Object visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
//
// We visit the argument list, but do not visit the optional identifier
// because it needs to be visited in the context of the constructor
@@ -11426,8 +11228,8 @@
* If the variable <i>v</i> is accessed by a closure in <i>s<sub>1</sub></i> then the variable
* <i>v</i> is not potentially mutated anywhere in the scope of <i>v</i>.
*/
- void
- _clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(AstNode target) {
+ void _clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(
+ AstNode target) {
for (Element element in _promoteManager.promotedElements) {
if ((element as VariableElementImpl).isPotentiallyMutatedInScope) {
if (_isVariableAccessedInClosure(element, target)) {
@@ -11472,8 +11274,8 @@
DartType iteratorType = iteratorFunction.returnType;
if (iteratorType is InterfaceType) {
InterfaceType iteratorInterfaceType = iteratorType;
- FunctionType currentFunction =
- _inheritanceManager.lookupMemberType(iteratorInterfaceType, "current");
+ FunctionType currentFunction = _inheritanceManager.lookupMemberType(
+ iteratorInterfaceType, "current");
if (currentFunction == null) {
// TODO(brianwilkerson) Should we report this error?
return null;
@@ -11488,8 +11290,8 @@
* If given "mayBeClosure" is [FunctionExpression] without explicit parameters types and its
* required type is [FunctionType], then infer parameters types from [FunctionType].
*/
- void _inferFunctionExpressionParametersTypes(Expression mayBeClosure,
- DartType mayByFunctionType) {
+ void _inferFunctionExpressionParametersTypes(
+ Expression mayBeClosure, DartType mayByFunctionType) {
// prepare closure
if (mayBeClosure is! FunctionExpression) {
return;
@@ -11513,8 +11315,9 @@
// set inferred types for parameters
NodeList<FormalParameter> parameters = closure.parameters.parameters;
List<ParameterElement> expectedParameters = expectedClosureType.parameters;
- for (int i =
- 0; i < parameters.length && i < expectedParameters.length; i++) {
+ for (int i = 0;
+ i < parameters.length && i < expectedParameters.length;
+ i++) {
FormalParameter parameter = parameters[i];
ParameterElement element = parameter.element;
DartType currentType = _overrideManager.getBestType(element);
@@ -11591,7 +11394,6 @@
return false;
}
-
// This last-statement-is-return heuristic is unsound for adversarial
// code, but probably works well in the common case:
//
@@ -11849,8 +11651,8 @@
String name = _getName(element);
if (name != null && !name.isEmpty) {
if (_definedNames.containsKey(name)) {
- errorListener.onError(
- getErrorForDuplicate(_definedNames[name], element));
+ errorListener
+ .onError(getErrorForDuplicate(_definedNames[name], element));
} else {
_definedNames[name] = element;
_hasName = true;
@@ -11893,11 +11695,8 @@
// TODO(jwren) There are 4 error codes for duplicate, but only 1 is being
// generated.
Source source = duplicate.source;
- return new AnalysisError.con2(
- source,
- duplicate.nameOffset,
- duplicate.displayName.length,
- CompileTimeErrorCode.DUPLICATE_DEFINITION,
+ return new AnalysisError.con2(source, duplicate.nameOffset,
+ duplicate.displayName.length, CompileTimeErrorCode.DUPLICATE_DEFINITION,
[existing.displayName]);
}
@@ -11930,8 +11729,8 @@
* implement library-level privacy
* @return the element with which the given name is associated
*/
- Element internalLookup(Identifier identifier, String name,
- LibraryElement referencingLibrary);
+ Element internalLookup(
+ Identifier identifier, String name, LibraryElement referencingLibrary);
/**
* Return the element with which the given name is associated, or `null` if the name is not
@@ -12091,8 +11890,8 @@
* @param source the source representing the compilation unit being visited
* @param typeProvider the object used to access the types from the core library
*/
- ScopedVisitor.con4(ResolvableLibrary library, this.source, this.typeProvider)
- {
+ ScopedVisitor.con4(
+ ResolvableLibrary library, this.source, this.typeProvider) {
this._definingLibrary = library.libraryElement;
LibraryScope libraryScope = library.libraryScope;
this._errorListener = libraryScope.errorListener;
@@ -12156,8 +11955,8 @@
*/
void reportErrorForNode(ErrorCode errorCode, AstNode node,
[List<Object> arguments]) {
- _errorListener.onError(
- new AnalysisError.con2(source, node.offset, node.length, errorCode, arguments));
+ _errorListener.onError(new AnalysisError.con2(
+ source, node.offset, node.length, errorCode, arguments));
}
/**
@@ -12183,13 +11982,8 @@
*/
void reportErrorForToken(ErrorCode errorCode, sc.Token token,
[List<Object> arguments]) {
- _errorListener.onError(
- new AnalysisError.con2(
- source,
- token.offset,
- token.length,
- errorCode,
- arguments));
+ _errorListener.onError(new AnalysisError.con2(
+ source, token.offset, token.length, errorCode, arguments));
}
/**
@@ -12323,8 +12117,7 @@
}
buffer.write(" in ");
buffer.write(definingLibrary.source.fullName);
- AnalysisEngine.instance.logger.logInformation(
- buffer.toString(),
+ AnalysisEngine.instance.logger.logInformation(buffer.toString(),
new CaughtException(new AnalysisException(), null));
} else {
_nameScope = new FunctionScope(_nameScope, constructorElement);
@@ -12396,8 +12189,11 @@
Object visitFormalParameterList(FormalParameterList node) {
super.visitFormalParameterList(node);
// We finished resolving function signature, now include formal parameters
- // scope.
- if (_nameScope is FunctionScope) {
+ // scope. Note: we must not do this if the parent is a
+ // FunctionTypedFormalParameter, because in that case we aren't finished
+ // resolving the full function signature, just a part of it.
+ if (_nameScope is FunctionScope &&
+ node.parent is! FunctionTypedFormalParameter) {
(_nameScope as FunctionScope).defineParameters();
}
if (_nameScope is FunctionTypeScope) {
@@ -12475,15 +12271,15 @@
while (parent != null) {
if (parent is Declaration) {
Element parentElement = (parent as Declaration).element;
- buffer.write(
- parentElement == null ? "<unknown> " : "${parentElement.name} ");
+ buffer.write(parentElement == null
+ ? "<unknown> "
+ : "${parentElement.name} ");
}
parent = parent.parent;
}
buffer.write("in ");
buffer.write(definingLibrary.source.fullName);
- AnalysisEngine.instance.logger.logInformation(
- buffer.toString(),
+ AnalysisEngine.instance.logger.logInformation(buffer.toString(),
new CaughtException(new AnalysisException(), null));
} else {
_nameScope = new FunctionScope(_nameScope, functionElement);
@@ -12713,9 +12509,7 @@
// subtypes
HashSet<ClassElement> allSubtypes = new HashSet<ClassElement>();
_safelyComputeAllSubtypes(
- classElement,
- new HashSet<ClassElement>(),
- allSubtypes);
+ classElement, new HashSet<ClassElement>(), allSubtypes);
return allSubtypes;
}
@@ -12807,8 +12601,8 @@
* @param supertypeElement the key for the [subtypeMap] map
* @param subtypeElement the value for the [subtypeMap] map
*/
- void _putInSubtypeMap(ClassElement supertypeElement,
- ClassElement subtypeElement) {
+ void _putInSubtypeMap(
+ ClassElement supertypeElement, ClassElement subtypeElement) {
HashSet<ClassElement> subtypes = _subtypeMap[supertypeElement];
if (subtypes == null) {
subtypes = new HashSet<ClassElement>();
@@ -12898,15 +12692,10 @@
new JavaPatternMatcher(TodoCode.TODO_REGEX, commentToken.lexeme);
if (matcher.find()) {
int offset =
- commentToken.offset +
- matcher.start() +
- matcher.group(1).length;
+ commentToken.offset + matcher.start() + matcher.group(1).length;
int length = matcher.group(2).length;
_errorReporter.reportErrorForOffset(
- TodoCode.TODO,
- offset,
- length,
- [matcher.group(2)]);
+ TodoCode.TODO, offset, length, [matcher.group(2)]);
}
}
}
@@ -12954,8 +12743,8 @@
* @param variableList the list of variables whose overriding types are to be captured
* @return a table mapping elements to their overriding types
*/
- Map<VariableElement, DartType>
- captureOverrides(VariableDeclarationList variableList) {
+ Map<VariableElement, DartType> captureOverrides(
+ VariableDeclarationList variableList) {
if (_currentScope == null) {
throw new IllegalStateException(
"Cannot capture overrides without a scope");
@@ -13142,8 +12931,8 @@
* @param variableList the list of variables whose overriding types are to be captured
* @return a table mapping elements to their overriding types
*/
- Map<VariableElement, DartType>
- captureOverrides(VariableDeclarationList variableList) {
+ Map<VariableElement, DartType> captureOverrides(
+ VariableDeclarationList variableList) {
Map<VariableElement, DartType> overrides =
new HashMap<VariableElement, DartType>();
if (variableList.isConst || variableList.isFinal) {
@@ -13728,8 +13517,8 @@
InterfaceType _getType(Namespace namespace, String typeName) {
Element element = namespace.get(typeName);
if (element == null) {
- AnalysisEngine.instance.logger.logInformation(
- "No definition of type $typeName");
+ AnalysisEngine.instance.logger
+ .logInformation("No definition of type $typeName");
return null;
}
return (element as ClassElement).type;
@@ -13740,8 +13529,8 @@
*
* @param library the library containing the definitions of the core types
*/
- void _initializeFrom(LibraryElement coreLibrary,
- LibraryElement asyncLibrary) {
+ void _initializeFrom(
+ LibraryElement coreLibrary, LibraryElement asyncLibrary) {
Namespace coreNamespace =
new NamespaceBuilder().createPublicNamespaceForLibrary(coreLibrary);
Namespace asyncNamespace =
@@ -13802,8 +13591,8 @@
* @param source the source representing the compilation unit being visited
* @param typeProvider the object used to access the types from the core library
*/
- TypeResolverVisitor.con1(Library library, Source source,
- TypeProvider typeProvider)
+ TypeResolverVisitor.con1(
+ Library library, Source source, TypeProvider typeProvider)
: super.con1(library, source, typeProvider) {
_dynamicType = typeProvider.dynamicType;
_undefinedType = typeProvider.undefinedType;
@@ -13837,13 +13626,10 @@
* during resolution
*/
TypeResolverVisitor.con3(LibraryElement definingLibrary, Source source,
- TypeProvider typeProvider, Scope nameScope, AnalysisErrorListener errorListener)
+ TypeProvider typeProvider, Scope nameScope,
+ AnalysisErrorListener errorListener)
: super.con3(
- definingLibrary,
- source,
- typeProvider,
- nameScope,
- errorListener) {
+ definingLibrary, source, typeProvider, nameScope, errorListener) {
_dynamicType = typeProvider.dynamicType;
_undefinedType = typeProvider.undefinedType;
}
@@ -13855,8 +13641,8 @@
* @param source the source representing the compilation unit being visited
* @param typeProvider the object used to access the types from the core library
*/
- TypeResolverVisitor.con4(ResolvableLibrary library, Source source,
- TypeProvider typeProvider)
+ TypeResolverVisitor.con4(
+ ResolvableLibrary library, Source source, TypeProvider typeProvider)
: super.con4(library, source, typeProvider) {
_dynamicType = typeProvider.dynamicType;
_undefinedType = typeProvider.undefinedType;
@@ -13945,14 +13731,11 @@
ClassElementImpl classElement = _getClassElement(node.name);
InterfaceType superclassType = null;
if (extendsClause != null) {
- ErrorCode errorCode = (withClause == null ?
- CompileTimeErrorCode.EXTENDS_NON_CLASS :
- CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS);
- superclassType = _resolveType(
- extendsClause.superclass,
- errorCode,
- CompileTimeErrorCode.EXTENDS_ENUM,
- errorCode);
+ ErrorCode errorCode = (withClause == null
+ ? CompileTimeErrorCode.EXTENDS_NON_CLASS
+ : CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS);
+ superclassType = _resolveType(extendsClause.superclass, errorCode,
+ CompileTimeErrorCode.EXTENDS_ENUM, errorCode);
if (!identical(superclassType, typeProvider.objectType)) {
classElement.validMixin = false;
}
@@ -13989,11 +13772,8 @@
Object visitClassTypeAlias(ClassTypeAlias node) {
super.visitClassTypeAlias(node);
ErrorCode errorCode = CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS;
- InterfaceType superclassType = _resolveType(
- node.superclass,
- errorCode,
- CompileTimeErrorCode.EXTENDS_ENUM,
- errorCode);
+ InterfaceType superclassType = _resolveType(node.superclass, errorCode,
+ CompileTimeErrorCode.EXTENDS_ENUM, errorCode);
if (superclassType == null) {
superclassType = typeProvider.objectType;
}
@@ -14024,8 +13804,7 @@
buffer.write(" in ");
buffer.write(source.fullName);
buffer.write(" was not set while trying to resolve types.");
- AnalysisEngine.instance.logger.logError(
- buffer.toString(),
+ AnalysisEngine.instance.logger.logError(buffer.toString(),
new CaughtException(new AnalysisException(), null));
} else {
ClassElement definingClass = element.enclosingElement as ClassElement;
@@ -14095,8 +13874,7 @@
buffer.write(" in ");
buffer.write(source.fullName);
buffer.write(" was not set while trying to resolve types.");
- AnalysisEngine.instance.logger.logError(
- buffer.toString(),
+ AnalysisEngine.instance.logger.logError(buffer.toString(),
new CaughtException(new AnalysisException(), null));
}
element.returnType = _computeReturnType(node.returnType);
@@ -14153,8 +13931,7 @@
buffer.write(" in ");
buffer.write(source.fullName);
buffer.write(" was not set while trying to resolve types.");
- AnalysisEngine.instance.logger.logError(
- buffer.toString(),
+ AnalysisEngine.instance.logger.logError(buffer.toString(),
new CaughtException(new AnalysisException(), null));
}
element.returnType = _computeReturnType(node.returnType);
@@ -14259,17 +14036,16 @@
(parent.parent as InstanceCreationExpression).isConst) {
// If, if this is a const expression, then generate a
// CompileTimeErrorCode.CONST_WITH_NON_TYPE error.
- reportErrorForNode(
- CompileTimeErrorCode.CONST_WITH_NON_TYPE,
+ reportErrorForNode(CompileTimeErrorCode.CONST_WITH_NON_TYPE,
prefixedIdentifier.identifier,
[prefixedIdentifier.identifier.name]);
} else {
// Else, if this expression is a new expression, report a
// NEW_WITH_NON_TYPE warning.
- reportErrorForNode(
- StaticWarningCode.NEW_WITH_NON_TYPE,
- prefixedIdentifier.identifier,
- [prefixedIdentifier.identifier.name]);
+ reportErrorForNode(StaticWarningCode.NEW_WITH_NON_TYPE,
+ prefixedIdentifier.identifier, [
+ prefixedIdentifier.identifier.name
+ ]);
}
_setElement(prefix, element);
return null;
@@ -14300,22 +14076,16 @@
if (creation.isConst) {
if (element == null) {
reportErrorForNode(
- CompileTimeErrorCode.UNDEFINED_CLASS,
- typeNameSimple,
- [typeName]);
+ CompileTimeErrorCode.UNDEFINED_CLASS, typeNameSimple, [typeName]);
} else {
- reportErrorForNode(
- CompileTimeErrorCode.CONST_WITH_NON_TYPE,
- typeNameSimple,
- [typeName]);
+ reportErrorForNode(CompileTimeErrorCode.CONST_WITH_NON_TYPE,
+ typeNameSimple, [typeName]);
}
elementValid = false;
} else {
if (element != null) {
reportErrorForNode(
- StaticWarningCode.NEW_WITH_NON_TYPE,
- typeNameSimple,
- [typeName]);
+ StaticWarningCode.NEW_WITH_NON_TYPE, typeNameSimple, [typeName]);
elementValid = false;
}
}
@@ -14330,47 +14100,34 @@
SimpleIdentifier typeNameSimple = _getTypeSimpleIdentifier(typeName);
RedirectingConstructorKind redirectingConstructorKind;
if (_isBuiltInIdentifier(node) && _isTypeAnnotation(node)) {
- reportErrorForNode(
- CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE,
- typeName,
- [typeName.name]);
+ reportErrorForNode(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE,
+ typeName, [typeName.name]);
} else if (typeNameSimple.name == "boolean") {
reportErrorForNode(
- StaticWarningCode.UNDEFINED_CLASS_BOOLEAN,
- typeNameSimple,
- []);
+ StaticWarningCode.UNDEFINED_CLASS_BOOLEAN, typeNameSimple, []);
} else if (_isTypeNameInCatchClause(node)) {
- reportErrorForNode(
- StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE,
- typeName,
+ reportErrorForNode(StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE, typeName,
[typeName.name]);
} else if (_isTypeNameInAsExpression(node)) {
reportErrorForNode(
- StaticWarningCode.CAST_TO_NON_TYPE,
- typeName,
- [typeName.name]);
+ StaticWarningCode.CAST_TO_NON_TYPE, typeName, [typeName.name]);
} else if (_isTypeNameInIsExpression(node)) {
- reportErrorForNode(
- StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME,
- typeName,
- [typeName.name]);
+ reportErrorForNode(StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME,
+ typeName, [typeName.name]);
} else if ((redirectingConstructorKind =
- _getRedirectingConstructorKind(node)) != null) {
- ErrorCode errorCode =
- (redirectingConstructorKind == RedirectingConstructorKind.CONST ?
- CompileTimeErrorCode.REDIRECT_TO_NON_CLASS :
- StaticWarningCode.REDIRECT_TO_NON_CLASS);
+ _getRedirectingConstructorKind(node)) !=
+ null) {
+ ErrorCode errorCode = (redirectingConstructorKind ==
+ RedirectingConstructorKind.CONST
+ ? CompileTimeErrorCode.REDIRECT_TO_NON_CLASS
+ : StaticWarningCode.REDIRECT_TO_NON_CLASS);
reportErrorForNode(errorCode, typeName, [typeName.name]);
} else if (_isTypeNameInTypeArgumentList(node)) {
- reportErrorForNode(
- StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT,
- typeName,
- [typeName.name]);
+ reportErrorForNode(StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT,
+ typeName, [typeName.name]);
} else {
reportErrorForNode(
- StaticWarningCode.UNDEFINED_CLASS,
- typeName,
- [typeName.name]);
+ StaticWarningCode.UNDEFINED_CLASS, typeName, [typeName.name]);
}
elementValid = false;
}
@@ -14410,32 +14167,25 @@
// The name does not represent a type.
RedirectingConstructorKind redirectingConstructorKind;
if (_isTypeNameInCatchClause(node)) {
- reportErrorForNode(
- StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE,
- typeName,
+ reportErrorForNode(StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE, typeName,
[typeName.name]);
} else if (_isTypeNameInAsExpression(node)) {
reportErrorForNode(
- StaticWarningCode.CAST_TO_NON_TYPE,
- typeName,
- [typeName.name]);
+ StaticWarningCode.CAST_TO_NON_TYPE, typeName, [typeName.name]);
} else if (_isTypeNameInIsExpression(node)) {
- reportErrorForNode(
- StaticWarningCode.TYPE_TEST_WITH_NON_TYPE,
- typeName,
+ reportErrorForNode(StaticWarningCode.TYPE_TEST_WITH_NON_TYPE, typeName,
[typeName.name]);
} else if ((redirectingConstructorKind =
- _getRedirectingConstructorKind(node)) != null) {
- ErrorCode errorCode =
- (redirectingConstructorKind == RedirectingConstructorKind.CONST ?
- CompileTimeErrorCode.REDIRECT_TO_NON_CLASS :
- StaticWarningCode.REDIRECT_TO_NON_CLASS);
+ _getRedirectingConstructorKind(node)) !=
+ null) {
+ ErrorCode errorCode = (redirectingConstructorKind ==
+ RedirectingConstructorKind.CONST
+ ? CompileTimeErrorCode.REDIRECT_TO_NON_CLASS
+ : StaticWarningCode.REDIRECT_TO_NON_CLASS);
reportErrorForNode(errorCode, typeName, [typeName.name]);
} else if (_isTypeNameInTypeArgumentList(node)) {
- reportErrorForNode(
- StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT,
- typeName,
- [typeName.name]);
+ reportErrorForNode(StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT,
+ typeName, [typeName.name]);
} else {
AstNode parent = typeName.parent;
while (parent is TypeName) {
@@ -14448,9 +14198,7 @@
// Ignored. The error will be reported elsewhere.
} else {
reportErrorForNode(
- StaticWarningCode.NOT_A_TYPE,
- typeName,
- [typeName.name]);
+ StaticWarningCode.NOT_A_TYPE, typeName, [typeName.name]);
}
}
_setElement(typeName, _dynamicType.element);
@@ -14474,10 +14222,11 @@
typeArguments[i] = argumentType;
}
} else {
- reportErrorForNode(
- _getInvalidTypeParametersErrorCode(node),
- node,
- [typeName.name, parameterCount, argumentCount]);
+ reportErrorForNode(_getInvalidTypeParametersErrorCode(node), node, [
+ typeName.name,
+ parameterCount,
+ argumentCount
+ ]);
for (int i = 0; i < parameterCount; i++) {
typeArguments[i] = _dynamicType;
}
@@ -14671,8 +14420,7 @@
ConstructorDeclaration constructorDeclaration =
parent as ConstructorDeclaration;
if (identical(
- constructorDeclaration.redirectedConstructor,
- constructorName)) {
+ constructorDeclaration.redirectedConstructor, constructorName)) {
if (constructorDeclaration.constKeyword != null) {
return RedirectingConstructorKind.CONST;
}
@@ -14845,8 +14593,7 @@
void _resolve(ClassElementImpl classElement, WithClause withClause,
ImplementsClause implementsClause) {
if (withClause != null) {
- List<InterfaceType> mixinTypes = _resolveTypes(
- withClause.mixinTypes,
+ List<InterfaceType> mixinTypes = _resolveTypes(withClause.mixinTypes,
CompileTimeErrorCode.MIXIN_OF_NON_CLASS,
CompileTimeErrorCode.MIXIN_OF_ENUM,
CompileTimeErrorCode.MIXIN_OF_NON_CLASS);
@@ -14856,8 +14603,7 @@
}
if (implementsClause != null) {
NodeList<TypeName> interfaces = implementsClause.interfaces;
- List<InterfaceType> interfaceTypes = _resolveTypes(
- interfaces,
+ List<InterfaceType> interfaceTypes = _resolveTypes(interfaces,
CompileTimeErrorCode.IMPLEMENTS_NON_CLASS,
CompileTimeErrorCode.IMPLEMENTS_ENUM,
CompileTimeErrorCode.IMPLEMENTS_DYNAMIC);
@@ -14882,9 +14628,7 @@
if (element != null && element == element2) {
detectedRepeatOnIndex[j] = true;
reportErrorForNode(
- CompileTimeErrorCode.IMPLEMENTS_REPEATED,
- typeName2,
- [name2]);
+ CompileTimeErrorCode.IMPLEMENTS_REPEATED, typeName2, [name2]);
}
}
}
@@ -14935,7 +14679,8 @@
* @return an array containing all of the types that were resolved.
*/
List<InterfaceType> _resolveTypes(NodeList<TypeName> typeNames,
- ErrorCode nonTypeError, ErrorCode enumTypeError, ErrorCode dynamicTypeError) {
+ ErrorCode nonTypeError, ErrorCode enumTypeError,
+ ErrorCode dynamicTypeError) {
List<InterfaceType> types = new List<InterfaceType>();
for (TypeName typeName in typeNames) {
InterfaceType type =
@@ -15052,8 +14797,8 @@
* @param source the source representing the compilation unit being visited
* @param typeProvider the object used to access the types from the core library
*/
- VariableResolverVisitor.con1(Library library, Source source,
- TypeProvider typeProvider)
+ VariableResolverVisitor.con1(
+ Library library, Source source, TypeProvider typeProvider)
: super.con1(library, source, typeProvider);
/**
@@ -15067,13 +14812,10 @@
* during resolution
*/
VariableResolverVisitor.con2(LibraryElement definingLibrary, Source source,
- TypeProvider typeProvider, Scope nameScope, AnalysisErrorListener errorListener)
+ TypeProvider typeProvider, Scope nameScope,
+ AnalysisErrorListener errorListener)
: super.con3(
- definingLibrary,
- source,
- typeProvider,
- nameScope,
- errorListener);
+ definingLibrary, source, typeProvider, nameScope, errorListener);
/**
* Initialize a newly created visitor to resolve the nodes in a compilation unit.
@@ -15082,8 +14824,8 @@
* @param source the source representing the compilation unit being visited
* @param typeProvider the object used to access the types from the core library
*/
- VariableResolverVisitor.con3(ResolvableLibrary library, Source source,
- TypeProvider typeProvider)
+ VariableResolverVisitor.con3(
+ ResolvableLibrary library, Source source, TypeProvider typeProvider)
: super.con4(library, source, typeProvider);
@override
@@ -15134,7 +14876,7 @@
}
if (parent is MethodInvocation &&
identical(parent.methodName, node) &&
- parent.target != null) {
+ parent.realTarget != null) {
return null;
}
if (parent is ConstructorName) {
@@ -15195,28 +14937,22 @@
if (type != null) {
if (type.isDynamic) {
return new DartObjectImpl(
- verifier._typeProvider.objectType,
- DynamicState.DYNAMIC_STATE);
+ verifier._typeProvider.objectType, DynamicState.DYNAMIC_STATE);
} else if (type.isSubtypeOf(verifier._boolType)) {
return new DartObjectImpl(
- verifier._typeProvider.boolType,
- BoolState.UNKNOWN_VALUE);
+ verifier._typeProvider.boolType, BoolState.UNKNOWN_VALUE);
} else if (type.isSubtypeOf(verifier._typeProvider.doubleType)) {
return new DartObjectImpl(
- verifier._typeProvider.doubleType,
- DoubleState.UNKNOWN_VALUE);
+ verifier._typeProvider.doubleType, DoubleState.UNKNOWN_VALUE);
} else if (type.isSubtypeOf(verifier._intType)) {
return new DartObjectImpl(
- verifier._typeProvider.intType,
- IntState.UNKNOWN_VALUE);
+ verifier._typeProvider.intType, IntState.UNKNOWN_VALUE);
} else if (type.isSubtypeOf(verifier._numType)) {
return new DartObjectImpl(
- verifier._typeProvider.numType,
- NumState.UNKNOWN_VALUE);
+ verifier._typeProvider.numType, NumState.UNKNOWN_VALUE);
} else if (type.isSubtypeOf(verifier._stringType)) {
return new DartObjectImpl(
- verifier._typeProvider.stringType,
- StringState.UNKNOWN_VALUE);
+ verifier._typeProvider.stringType, StringState.UNKNOWN_VALUE);
}
//
// We don't test for other types of objects (such as List, Map,
@@ -15240,8 +14976,7 @@
List<ClassMember> nonFields;
- _ElementBuilder_visitClassDeclaration(this.builder, this.nonFields)
- : super();
+ _ElementBuilder_visitClassDeclaration(this.builder, this.nonFields) : super();
@override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
@@ -15427,8 +15162,8 @@
}
}
-class _ResolverVisitor_isVariableAccessedInClosure extends
- RecursiveAstVisitor<Object> {
+class _ResolverVisitor_isVariableAccessedInClosure
+ extends RecursiveAstVisitor<Object> {
final Element variable;
bool result = false;
@@ -15460,9 +15195,8 @@
}
}
-
-class _ResolverVisitor_isVariablePotentiallyMutatedIn extends
- RecursiveAstVisitor<Object> {
+class _ResolverVisitor_isVariablePotentiallyMutatedIn
+ extends RecursiveAstVisitor<Object> {
final Element variable;
bool result = false;
@@ -15483,15 +15217,14 @@
}
}
-
-class _TypeResolverVisitor_visitClassMembersInScope extends
- UnifyingAstVisitor<Object> {
+class _TypeResolverVisitor_visitClassMembersInScope
+ extends UnifyingAstVisitor<Object> {
final TypeResolverVisitor TypeResolverVisitor_this;
List<ClassMember> nonFields;
- _TypeResolverVisitor_visitClassMembersInScope(this.TypeResolverVisitor_this,
- this.nonFields)
+ _TypeResolverVisitor_visitClassMembersInScope(
+ this.TypeResolverVisitor_this, this.nonFields)
: super();
@override
@@ -15519,7 +15252,6 @@
Object visitWithClause(WithClause node) => null;
}
-
/**
* Instances of the class [_UnusedElementsVerifier] traverse an element
* structure looking for cases of [HintCode.UNUSED_ELEMENT] and
@@ -15544,10 +15276,10 @@
@override
visitClassElement(ClassElement element) {
if (!_isUsedElement(element)) {
- _reportErrorForElement(
- HintCode.UNUSED_ELEMENT,
- element,
- [element.kind.displayName, element.displayName]);
+ _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, [
+ element.kind.displayName,
+ element.displayName
+ ]);
}
super.visitClassElement(element);
}
@@ -15556,9 +15288,7 @@
visitFieldElement(FieldElement element) {
if (!_isReadMember(element)) {
_reportErrorForElement(
- HintCode.UNUSED_FIELD,
- element,
- [element.displayName]);
+ HintCode.UNUSED_FIELD, element, [element.displayName]);
}
super.visitFieldElement(element);
}
@@ -15566,10 +15296,10 @@
@override
visitFunctionElement(FunctionElement element) {
if (!_isUsedElement(element)) {
- _reportErrorForElement(
- HintCode.UNUSED_ELEMENT,
- element,
- [element.kind.displayName, element.displayName]);
+ _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, [
+ element.kind.displayName,
+ element.displayName
+ ]);
}
super.visitFunctionElement(element);
}
@@ -15578,19 +15308,17 @@
visitLocalVariableElement(LocalVariableElement element) {
if (!_isUsedElement(element)) {
_reportErrorForElement(
- HintCode.UNUSED_LOCAL_VARIABLE,
- element,
- [element.displayName]);
+ HintCode.UNUSED_LOCAL_VARIABLE, element, [element.displayName]);
}
}
@override
visitMethodElement(MethodElement element) {
if (!_isUsedMember(element)) {
- _reportErrorForElement(
- HintCode.UNUSED_ELEMENT,
- element,
- [element.kind.displayName, element.displayName]);
+ _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, [
+ element.kind.displayName,
+ element.displayName
+ ]);
}
super.visitMethodElement(element);
}
@@ -15598,10 +15326,10 @@
@override
visitPropertyAccessorElement(PropertyAccessorElement element) {
if (!_isUsedMember(element)) {
- _reportErrorForElement(
- HintCode.UNUSED_ELEMENT,
- element,
- [element.kind.displayName, element.displayName]);
+ _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, [
+ element.kind.displayName,
+ element.displayName
+ ]);
}
super.visitPropertyAccessorElement(element);
}
@@ -15644,21 +15372,16 @@
return _usedElements.elements.contains(element);
}
- void _reportErrorForElement(ErrorCode errorCode, Element element,
- List<Object> arguments) {
+ void _reportErrorForElement(
+ ErrorCode errorCode, Element element, List<Object> arguments) {
if (element != null) {
- _errorListener.onError(
- new AnalysisError.con2(
- element.source,
- element.nameOffset,
- element.displayName.length,
- errorCode,
- arguments));
+ _errorListener.onError(new AnalysisError.con2(element.source,
+ element.nameOffset, element.displayName.length, errorCode,
+ arguments));
}
}
}
-
class _UsedElements {
/**
* Resolved, locally defined elements that are used or potentially can be
diff --git a/pkg/analyzer/lib/src/generated/scanner.dart b/pkg/analyzer/lib/src/generated/scanner.dart
index 29ec7cc..877a995 100644
--- a/pkg/analyzer/lib/src/generated/scanner.dart
+++ b/pkg/analyzer/lib/src/generated/scanner.dart
@@ -375,55 +375,56 @@
static const Keyword TYPEDEF = const Keyword('TYPEDEF', "typedef", true);
static const List<Keyword> values = const [
- ASSERT,
- BREAK,
- CASE,
- CATCH,
- CLASS,
- CONST,
- CONTINUE,
- DEFAULT,
- DO,
- ELSE,
- ENUM,
- EXTENDS,
- FALSE,
- FINAL,
- FINALLY,
- FOR,
- IF,
- IN,
- IS,
- NEW,
- NULL,
- RETHROW,
- RETURN,
- SUPER,
- SWITCH,
- THIS,
- THROW,
- TRUE,
- TRY,
- VAR,
- VOID,
- WHILE,
- WITH,
- ABSTRACT,
- AS,
- DEFERRED,
- DYNAMIC,
- EXPORT,
- EXTERNAL,
- FACTORY,
- GET,
- IMPLEMENTS,
- IMPORT,
- LIBRARY,
- OPERATOR,
- PART,
- SET,
- STATIC,
- TYPEDEF];
+ ASSERT,
+ BREAK,
+ CASE,
+ CATCH,
+ CLASS,
+ CONST,
+ CONTINUE,
+ DEFAULT,
+ DO,
+ ELSE,
+ ENUM,
+ EXTENDS,
+ FALSE,
+ FINAL,
+ FINALLY,
+ FOR,
+ IF,
+ IN,
+ IS,
+ NEW,
+ NULL,
+ RETHROW,
+ RETURN,
+ SUPER,
+ SWITCH,
+ THIS,
+ THROW,
+ TRUE,
+ TRY,
+ VAR,
+ VOID,
+ WHILE,
+ WITH,
+ ABSTRACT,
+ AS,
+ DEFERRED,
+ DYNAMIC,
+ EXPORT,
+ EXTERNAL,
+ FACTORY,
+ GET,
+ IMPLEMENTS,
+ IMPORT,
+ LIBRARY,
+ OPERATOR,
+ PART,
+ SET,
+ STATIC,
+ TYPEDEF
+ ];
/**
* A table mapping the lexemes of keywords to the corresponding keyword.
@@ -533,8 +534,8 @@
* [length] the number of strings in the array that pass through the state
* being built
*/
- static KeywordState _computeKeywordStateTable(int start, List<String> strings,
- int offset, int length) {
+ static KeywordState _computeKeywordStateTable(
+ int start, List<String> strings, int offset, int length) {
List<KeywordState> result = new List<KeywordState>(26);
assert(length != 0);
int chunk = 0x0;
@@ -548,8 +549,8 @@
int c = strings[i].codeUnitAt(start);
if (chunk != c) {
if (chunkStart != -1) {
- result[chunk - 0x61] =
- _computeKeywordStateTable(start + 1, strings, chunkStart, i - chunkStart);
+ result[chunk - 0x61] = _computeKeywordStateTable(
+ start + 1, strings, chunkStart, i - chunkStart);
}
chunkStart = i;
chunk = c;
@@ -558,12 +559,8 @@
}
if (chunkStart != -1) {
assert(result[chunk - 0x61] == null);
- result[chunk -
- 0x61] = _computeKeywordStateTable(
- start + 1,
- strings,
- chunkStart,
- offset + length - chunkStart);
+ result[chunk - 0x61] = _computeKeywordStateTable(
+ start + 1, strings, chunkStart, offset + length - chunkStart);
} else {
assert(length == 1);
return new KeywordState(_EMPTY_TABLE, strings[offset]);
@@ -651,8 +648,8 @@
}
@override
- Token copy() =>
- new KeywordTokenWithComment(keyword, offset, copyComments(precedingComments));
+ Token copy() => new KeywordTokenWithComment(
+ keyword, offset, copyComments(precedingComments));
}
/**
@@ -891,8 +888,7 @@
}
if (next == 0x5D) {
_appendEndToken(
- TokenType.CLOSE_SQUARE_BRACKET,
- TokenType.OPEN_SQUARE_BRACKET);
+ TokenType.CLOSE_SQUARE_BRACKET, TokenType.OPEN_SQUARE_BRACKET);
return _reader.advance();
}
if (next == 0x60) {
@@ -905,8 +901,7 @@
}
if (next == 0x7D) {
_appendEndToken(
- TokenType.CLOSE_CURLY_BRACKET,
- TokenType.OPEN_CURLY_BRACKET);
+ TokenType.CLOSE_CURLY_BRACKET, TokenType.OPEN_CURLY_BRACKET);
return _reader.advance();
}
if (next == 0x2F) {
@@ -1038,8 +1033,8 @@
if (_firstComment == null) {
eofToken = new Token(TokenType.EOF, _reader.offset + 1);
} else {
- eofToken =
- new TokenWithComment(TokenType.EOF, _reader.offset + 1, _firstComment);
+ eofToken = new TokenWithComment(
+ TokenType.EOF, _reader.offset + 1, _firstComment);
_firstComment = null;
_lastComment = null;
}
@@ -1079,8 +1074,8 @@
if (_firstComment == null) {
_tail = _tail.setNext(new StringToken(type, value, _tokenStart + offset));
} else {
- _tail = _tail.setNext(
- new StringTokenWithComment(type, value, _tokenStart + offset, _firstComment));
+ _tail = _tail.setNext(new StringTokenWithComment(
+ type, value, _tokenStart + offset, _firstComment));
_firstComment = null;
_lastComment = null;
}
@@ -1141,8 +1136,8 @@
* [arguments] any arguments needed to complete the error message
*/
void _reportError(ScannerErrorCode errorCode, [List<Object> arguments]) {
- _errorListener.onError(
- new AnalysisError.con2(source, _reader.offset, 1, errorCode, arguments));
+ _errorListener.onError(new AnalysisError.con2(
+ source, _reader.offset, 1, errorCode, arguments));
}
int _select(int choice, TokenType yesType, TokenType noType) {
@@ -1156,8 +1151,8 @@
}
}
- int _selectWithOffset(int choice, TokenType yesType, TokenType noType,
- int offset) {
+ int _selectWithOffset(
+ int choice, TokenType yesType, TokenType noType, int offset) {
int next = _reader.advance();
if (next == choice) {
_appendTokenOfTypeWithOffset(yesType, offset);
@@ -1208,9 +1203,7 @@
return _tokenizeFractionPart(next, start);
} else if (0x2E == next) {
return _select(
- 0x2E,
- TokenType.PERIOD_PERIOD_PERIOD,
- TokenType.PERIOD_PERIOD);
+ 0x2E, TokenType.PERIOD_PERIOD_PERIOD, TokenType.PERIOD_PERIOD);
} else {
_appendTokenOfType(TokenType.PERIOD);
return next;
@@ -1280,18 +1273,14 @@
if (!hasDigit) {
_appendStringToken(TokenType.INT, _reader.getString(start, -2));
if (0x2E == next) {
- return _selectWithOffset(
- 0x2E,
- TokenType.PERIOD_PERIOD_PERIOD,
- TokenType.PERIOD_PERIOD,
- _reader.offset - 1);
+ return _selectWithOffset(0x2E, TokenType.PERIOD_PERIOD_PERIOD,
+ TokenType.PERIOD_PERIOD, _reader.offset - 1);
}
_appendTokenOfTypeWithOffset(TokenType.PERIOD, _reader.offset - 1);
return bigSwitch(next);
}
_appendStringToken(
- TokenType.DOUBLE,
- _reader.getString(start, next < 0 ? 0 : -1));
+ TokenType.DOUBLE, _reader.getString(start, next < 0 ? 0 : -1));
return next;
}
@@ -1330,8 +1319,7 @@
_reportError(ScannerErrorCode.MISSING_HEX_DIGIT);
}
_appendStringToken(
- TokenType.HEXADECIMAL,
- _reader.getString(start, next < 0 ? 0 : -1));
+ TokenType.HEXADECIMAL, _reader.getString(start, next < 0 ? 0 : -1));
return next;
}
}
@@ -1355,8 +1343,7 @@
next = _reader.advance();
}
_appendStringToken(
- TokenType.IDENTIFIER,
- _reader.getString(start, next < 0 ? 0 : -1));
+ TokenType.IDENTIFIER, _reader.getString(start, next < 0 ? 0 : -1));
return next;
}
@@ -1376,14 +1363,12 @@
} else if (begin.type == TokenType.OPEN_CURLY_BRACKET) {
_beginToken();
_appendEndToken(
- TokenType.CLOSE_CURLY_BRACKET,
- TokenType.OPEN_CURLY_BRACKET);
+ TokenType.CLOSE_CURLY_BRACKET, TokenType.OPEN_CURLY_BRACKET);
next = _reader.advance();
_beginToken();
} else if (begin.type == TokenType.STRING_INTERPOLATION_EXPRESSION) {
_beginToken();
- _appendEndToken(
- TokenType.CLOSE_CURLY_BRACKET,
+ _appendEndToken(TokenType.CLOSE_CURLY_BRACKET,
TokenType.STRING_INTERPOLATION_EXPRESSION);
next = _reader.advance();
_beginToken();
@@ -1398,9 +1383,7 @@
int _tokenizeInterpolatedIdentifier(int next, int start) {
_appendStringTokenWithOffset(
- TokenType.STRING_INTERPOLATION_IDENTIFIER,
- "\$",
- 0);
+ TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 0);
if ((0x41 <= next && next <= 0x5A) ||
(0x61 <= next && next <= 0x7A) ||
next == 0x5F) {
@@ -1470,16 +1453,14 @@
if (-1 == next) {
_reportError(ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT);
_appendCommentToken(
- TokenType.MULTI_LINE_COMMENT,
- _reader.getString(_tokenStart, 0));
+ TokenType.MULTI_LINE_COMMENT, _reader.getString(_tokenStart, 0));
return next;
} else if (0x2A == next) {
next = _reader.advance();
if (0x2F == next) {
--nesting;
if (0 == nesting) {
- _appendCommentToken(
- TokenType.MULTI_LINE_COMMENT,
+ _appendCommentToken(TokenType.MULTI_LINE_COMMENT,
_reader.getString(_tokenStart, 0));
return _reader.advance();
} else {
@@ -1617,8 +1598,7 @@
return _tokenizeFractionPart(next, start);
} else {
_appendStringToken(
- TokenType.INT,
- _reader.getString(start, next < 0 ? 0 : -1));
+ TokenType.INT, _reader.getString(start, next < 0 ? 0 : -1));
return next;
}
}
@@ -1658,13 +1638,11 @@
next = _reader.advance();
if (-1 == next) {
_appendCommentToken(
- TokenType.SINGLE_LINE_COMMENT,
- _reader.getString(_tokenStart, 0));
+ TokenType.SINGLE_LINE_COMMENT, _reader.getString(_tokenStart, 0));
return next;
} else if (0xA == next || 0xD == next) {
_appendCommentToken(
- TokenType.SINGLE_LINE_COMMENT,
- _reader.getString(_tokenStart, -1));
+ TokenType.SINGLE_LINE_COMMENT, _reader.getString(_tokenStart, -1));
return next;
}
}
@@ -1770,8 +1748,7 @@
next = _reader.advance();
} while (next != 0xA && next != 0xD && next > 0);
_appendStringToken(
- TokenType.SCRIPT_TAG,
- _reader.getString(_tokenStart, 0));
+ TokenType.SCRIPT_TAG, _reader.getString(_tokenStart, 0));
return next;
}
}
@@ -1816,18 +1793,16 @@
static const ScannerErrorCode MISSING_QUOTE =
const ScannerErrorCode('MISSING_QUOTE', "Expected quote (' or \")");
- static const ScannerErrorCode UNABLE_GET_CONTENT =
- const ScannerErrorCode('UNABLE_GET_CONTENT', "Unable to get content: {0}");
+ static const ScannerErrorCode UNABLE_GET_CONTENT = const ScannerErrorCode(
+ 'UNABLE_GET_CONTENT', "Unable to get content: {0}");
static const ScannerErrorCode UNTERMINATED_MULTI_LINE_COMMENT =
const ScannerErrorCode(
- 'UNTERMINATED_MULTI_LINE_COMMENT',
- "Unterminated multi-line comment");
+ 'UNTERMINATED_MULTI_LINE_COMMENT', "Unterminated multi-line comment");
static const ScannerErrorCode UNTERMINATED_STRING_LITERAL =
const ScannerErrorCode(
- 'UNTERMINATED_STRING_LITERAL',
- "Unterminated string literal");
+ 'UNTERMINATED_STRING_LITERAL', "Unterminated string literal");
/**
* Initialize a newly created error code to have the given [name]. The message
@@ -1886,8 +1861,8 @@
* [offset] and to be preceded by the comments reachable from the given
* [comment].
*/
- StringTokenWithComment(TokenType type, String value, int offset,
- this._precedingComment)
+ StringTokenWithComment(
+ TokenType type, String value, int offset, this._precedingComment)
: super(type, value, offset) {
_setCommentParent(_precedingComment);
}
@@ -1910,12 +1885,8 @@
}
@override
- Token copy() =>
- new StringTokenWithComment(
- type,
- lexeme,
- offset,
- copyComments(precedingComments));
+ Token copy() => new StringTokenWithComment(
+ type, lexeme, offset, copyComments(precedingComments));
}
/**
@@ -2306,8 +2277,8 @@
static const TokenType AMPERSAND =
const TokenType('AMPERSAND', TokenClass.BITWISE_AND_OPERATOR, "&");
- static const TokenType AMPERSAND_AMPERSAND =
- const TokenType('AMPERSAND_AMPERSAND', TokenClass.LOGICAL_AND_OPERATOR, "&&");
+ static const TokenType AMPERSAND_AMPERSAND = const TokenType(
+ 'AMPERSAND_AMPERSAND', TokenClass.LOGICAL_AND_OPERATOR, "&&");
static const TokenType AMPERSAND_EQ =
const TokenType('AMPERSAND_EQ', TokenClass.ASSIGNMENT_OPERATOR, "&=");
@@ -2410,8 +2381,8 @@
static const TokenType OPEN_PAREN =
const TokenType('OPEN_PAREN', TokenClass.UNARY_POSTFIX_OPERATOR, "(");
- static const TokenType OPEN_SQUARE_BRACKET =
- const TokenType('OPEN_SQUARE_BRACKET', TokenClass.UNARY_POSTFIX_OPERATOR, "[");
+ static const TokenType OPEN_SQUARE_BRACKET = const TokenType(
+ 'OPEN_SQUARE_BRACKET', TokenClass.UNARY_POSTFIX_OPERATOR, "[");
static const TokenType PERCENT =
const TokenType('PERCENT', TokenClass.MULTIPLICATIVE_OPERATOR, "%");
@@ -2452,11 +2423,11 @@
static const TokenType STAR_EQ =
const TokenType('STAR_EQ', TokenClass.ASSIGNMENT_OPERATOR, "*=");
- static const TokenType STRING_INTERPOLATION_EXPRESSION =
- const TokenType('STRING_INTERPOLATION_EXPRESSION', TokenClass.NO_CLASS, "\${");
+ static const TokenType STRING_INTERPOLATION_EXPRESSION = const TokenType(
+ 'STRING_INTERPOLATION_EXPRESSION', TokenClass.NO_CLASS, "\${");
- static const TokenType STRING_INTERPOLATION_IDENTIFIER =
- const TokenType('STRING_INTERPOLATION_IDENTIFIER', TokenClass.NO_CLASS, "\$");
+ static const TokenType STRING_INTERPOLATION_IDENTIFIER = const TokenType(
+ 'STRING_INTERPOLATION_IDENTIFIER', TokenClass.NO_CLASS, "\$");
static const TokenType TILDE =
const TokenType('TILDE', TokenClass.UNARY_PREFIX_OPERATOR, "~");
@@ -2492,8 +2463,8 @@
*/
final String lexeme;
- const TokenType(this.name, [this._tokenClass = TokenClass.NO_CLASS,
- this.lexeme = null]);
+ const TokenType(this.name,
+ [this._tokenClass = TokenClass.NO_CLASS, this.lexeme = null]);
/**
* Return `true` if this type of token represents an additive operator.
@@ -2518,14 +2489,13 @@
* operators can have an effect because evaluation of the right-hand operand
* is conditional.
*/
- bool get isAssociativeOperator =>
- this == AMPERSAND ||
- this == AMPERSAND_AMPERSAND ||
- this == BAR ||
- this == BAR_BAR ||
- this == CARET ||
- this == PLUS ||
- this == STAR;
+ bool get isAssociativeOperator => this == AMPERSAND ||
+ this == AMPERSAND_AMPERSAND ||
+ this == BAR ||
+ this == BAR_BAR ||
+ this == CARET ||
+ this == PLUS ||
+ this == STAR;
/**
* Return `true` if this type of token represents an equality operator.
@@ -2547,11 +2517,10 @@
/**
* Return `true` if this token type represents an operator.
*/
- bool get isOperator =>
- _tokenClass != TokenClass.NO_CLASS &&
- this != OPEN_PAREN &&
- this != OPEN_SQUARE_BRACKET &&
- this != PERIOD;
+ bool get isOperator => _tokenClass != TokenClass.NO_CLASS &&
+ this != OPEN_PAREN &&
+ this != OPEN_SQUARE_BRACKET &&
+ this != PERIOD;
/**
* Return `true` if this type of token represents a relational operator.
@@ -2580,26 +2549,25 @@
* Return `true` if this token type represents an operator that can be defined
* by users.
*/
- bool get isUserDefinableOperator =>
- identical(lexeme, "==") ||
- identical(lexeme, "~") ||
- identical(lexeme, "[]") ||
- identical(lexeme, "[]=") ||
- identical(lexeme, "*") ||
- identical(lexeme, "/") ||
- identical(lexeme, "%") ||
- identical(lexeme, "~/") ||
- identical(lexeme, "+") ||
- identical(lexeme, "-") ||
- identical(lexeme, "<<") ||
- identical(lexeme, ">>") ||
- identical(lexeme, ">=") ||
- identical(lexeme, ">") ||
- identical(lexeme, "<=") ||
- identical(lexeme, "<") ||
- identical(lexeme, "&") ||
- identical(lexeme, "^") ||
- identical(lexeme, "|");
+ bool get isUserDefinableOperator => identical(lexeme, "==") ||
+ identical(lexeme, "~") ||
+ identical(lexeme, "[]") ||
+ identical(lexeme, "[]=") ||
+ identical(lexeme, "*") ||
+ identical(lexeme, "/") ||
+ identical(lexeme, "%") ||
+ identical(lexeme, "~/") ||
+ identical(lexeme, "+") ||
+ identical(lexeme, "-") ||
+ identical(lexeme, "<<") ||
+ identical(lexeme, ">>") ||
+ identical(lexeme, ">=") ||
+ identical(lexeme, ">") ||
+ identical(lexeme, "<=") ||
+ identical(lexeme, "<") ||
+ identical(lexeme, "&") ||
+ identical(lexeme, "^") ||
+ identical(lexeme, "|");
/**
* Return the precedence of the token, or `0` if the token does not represent
diff --git a/pkg/analyzer/lib/src/generated/sdk_io.dart b/pkg/analyzer/lib/src/generated/sdk_io.dart
index cbbb2bb..2544ebb 100644
--- a/pkg/analyzer/lib/src/generated/sdk_io.dart
+++ b/pkg/analyzer/lib/src/generated/sdk_io.dart
@@ -267,12 +267,11 @@
*/
JavaFile get dart2JsExecutable {
if (_dart2jsExecutable == null) {
- _dart2jsExecutable = _verifyExecutable(
- new JavaFile.relative(
- new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME),
- OSUtilities.isWindows() ?
- _DART2JS_EXECUTABLE_NAME_WIN :
- _DART2JS_EXECUTABLE_NAME));
+ _dart2jsExecutable = _verifyExecutable(new JavaFile.relative(
+ new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME),
+ OSUtilities.isWindows()
+ ? _DART2JS_EXECUTABLE_NAME_WIN
+ : _DART2JS_EXECUTABLE_NAME));
}
return _dart2jsExecutable;
}
@@ -284,12 +283,11 @@
*/
JavaFile get dartFmtExecutable {
if (_dartFmtExecutable == null) {
- _dartFmtExecutable = _verifyExecutable(
- new JavaFile.relative(
- new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME),
- OSUtilities.isWindows() ?
- _DARTFMT_EXECUTABLE_NAME_WIN :
- _DARTFMT_EXECUTABLE_NAME));
+ _dartFmtExecutable = _verifyExecutable(new JavaFile.relative(
+ new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME),
+ OSUtilities.isWindows()
+ ? _DARTFMT_EXECUTABLE_NAME_WIN
+ : _DARTFMT_EXECUTABLE_NAME));
}
return _dartFmtExecutable;
}
@@ -375,10 +373,9 @@
*/
JavaFile get pubExecutable {
if (_pubExecutable == null) {
- _pubExecutable = _verifyExecutable(
- new JavaFile.relative(
- new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME),
- OSUtilities.isWindows() ? _PUB_EXECUTABLE_NAME_WIN : _PUB_EXECUTABLE_NAME));
+ _pubExecutable = _verifyExecutable(new JavaFile.relative(
+ new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME), OSUtilities
+ .isWindows() ? _PUB_EXECUTABLE_NAME_WIN : _PUB_EXECUTABLE_NAME));
}
return _pubExecutable;
}
@@ -438,10 +435,9 @@
*/
JavaFile get vmExecutable {
if (_vmExecutable == null) {
- _vmExecutable = _verifyExecutable(
- new JavaFile.relative(
- new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME),
- vmBinaryName));
+ _vmExecutable = _verifyExecutable(new JavaFile.relative(
+ new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME),
+ vmBinaryName));
}
return _vmExecutable;
}
@@ -532,8 +528,8 @@
_LIBRARIES_FILE);
try {
String contents = librariesFile.readAsStringSync();
- return new SdkLibrariesReader(
- useDart2jsPaths).readFromFile(librariesFile, contents);
+ return new SdkLibrariesReader(useDart2jsPaths).readFromFile(
+ librariesFile, contents);
} catch (exception, stackTrace) {
AnalysisEngine.instance.logger.logError(
"Could not initialize the library map from ${librariesFile.getAbsolutePath()}",
@@ -637,9 +633,7 @@
LibraryMap readFromSource(Source source, String libraryFileContents) {
BooleanErrorListener errorListener = new BooleanErrorListener();
Scanner scanner = new Scanner(
- source,
- new CharSequenceReader(libraryFileContents),
- errorListener);
+ source, new CharSequenceReader(libraryFileContents), errorListener);
Parser parser = new Parser(source, errorListener);
CompilationUnit unit = parser.parseCompilationUnit(scanner.tokenize());
SdkLibrariesReader_LibraryBuilder libraryBuilder =
diff --git a/pkg/analyzer/lib/src/generated/source.dart b/pkg/analyzer/lib/src/generated/source.dart
index 2c01d6d..805897f 100644
--- a/pkg/analyzer/lib/src/generated/source.dart
+++ b/pkg/analyzer/lib/src/generated/source.dart
@@ -624,8 +624,8 @@
/// A table mapping package names to paths of directories containing
/// the package (or [null] if there is no registered package URI resolver).
Map<String, List<Folder>> get packageMap {
- PackageMapUriResolver resolver =
- _resolvers.firstWhere((r) => r is PackageMapUriResolver, orElse: () => null);
+ PackageMapUriResolver resolver = _resolvers.firstWhere(
+ (r) => r is PackageMapUriResolver, orElse: () => null);
return resolver != null ? resolver.packageMap : null;
}
@@ -681,7 +681,8 @@
Source fromEncoding(String encoding) {
Source source = forUri(encoding);
if (source == null) {
- throw new IllegalArgumentException("Invalid source encoding: '$encoding'");
+ throw new IllegalArgumentException(
+ "Invalid source encoding: '$encoding'");
}
return source;
}
@@ -711,8 +712,7 @@
try {
// Force the creation of an escaped URI to deal with spaces, etc.
return _internalResolveUri(
- containingSource,
- parseUriWithException(containedUri));
+ containingSource, parseUriWithException(containedUri));
} catch (exception, stackTrace) {
String containingFullName =
containingSource != null ? containingSource.fullName : '<null>';
diff --git a/pkg/analyzer/lib/src/generated/source_io.dart b/pkg/analyzer/lib/src/generated/source_io.dart
index 06211df..e885cd8f 100644
--- a/pkg/analyzer/lib/src/generated/source_io.dart
+++ b/pkg/analyzer/lib/src/generated/source_io.dart
@@ -7,12 +7,13 @@
library engine.source.io;
+import 'dart:collection';
+
import 'engine.dart';
import 'java_core.dart';
import 'java_engine.dart';
import 'java_io.dart';
import 'source.dart';
-import 'utilities_general.dart';
export 'source.dart';
@@ -93,11 +94,25 @@
static Function fileReadMode = (String s) => s;
/**
+ * Map from encoded URI/filepath pair to a unique integer identifier. This
+ * identifier is used for equality tests and hash codes.
+ *
+ * The URI and filepath are joined into a pair by separating them with an '@'
+ * character.
+ */
+ static final Map<String, int> _idTable = new HashMap<String, int>();
+
+ /**
* The URI from which this source was originally derived.
*/
final Uri uri;
/**
+ * The unique ID associated with this [FileBasedSource].
+ */
+ final int id;
+
+ /**
* The file represented by this source.
*/
final JavaFile file;
@@ -125,7 +140,11 @@
* @param file the file represented by this source
* @param uri the URI from which this source was originally derived
*/
- FileBasedSource.con2(this.uri, this.file);
+ FileBasedSource.con2(Uri uri, JavaFile file)
+ : uri = uri,
+ file = file,
+ id = _idTable.putIfAbsent(
+ '$uri@${file.getPath()}', () => _idTable.length);
@override
TimestampedData<String> get contents {
@@ -147,8 +166,7 @@
*/
TimestampedData<String> get contentsFromFile {
return new TimestampedData<String>(
- file.lastModified(),
- fileReadMode(file.readAsStringSync()));
+ file.lastModified(), fileReadMode(file.readAsStringSync()));
}
@override
@@ -168,7 +186,7 @@
}
@override
- int get hashCode => file.hashCode;
+ int get hashCode => id;
@override
bool get isInSystemLibrary => uri.scheme == DartUriResolver.DART_SCHEME;
@@ -194,7 +212,7 @@
@override
bool operator ==(Object object) =>
- object is FileBasedSource && uri == object.uri;
+ object is FileBasedSource && id == object.id;
@override
bool exists() => file.isFile();
@@ -214,8 +232,8 @@
}
Uri result = baseUri.resolveUri(containedUri);
if (isOpaque) {
- result =
- parseUriWithException("${result.scheme}:${result.path.substring(1)}");
+ result = parseUriWithException(
+ "${result.scheme}:${result.path.substring(1)}");
}
return result;
} catch (exception, stackTrace) {
@@ -365,26 +383,23 @@
* but may be empty string)
* @return the file (not `null`)
*/
- JavaFile getCanonicalFile(JavaFile packagesDirectory, String pkgName,
- String relPath) {
+ JavaFile getCanonicalFile(
+ JavaFile packagesDirectory, String pkgName, String relPath) {
JavaFile pkgDir = new JavaFile.relative(packagesDirectory, pkgName);
try {
pkgDir = pkgDir.getCanonicalFile();
} on JavaIOException catch (exception, stackTrace) {
if (!exception.toString().contains("Required key not available")) {
- AnalysisEngine.instance.logger.logError(
- "Canonical failed: $pkgDir",
+ AnalysisEngine.instance.logger.logError("Canonical failed: $pkgDir",
new CaughtException(exception, stackTrace));
} else if (_CanLogRequiredKeyIoException) {
_CanLogRequiredKeyIoException = false;
- AnalysisEngine.instance.logger.logError(
- "Canonical failed: $pkgDir",
+ AnalysisEngine.instance.logger.logError("Canonical failed: $pkgDir",
new CaughtException(exception, stackTrace));
}
}
- return new JavaFile.relative(
- pkgDir,
- relPath.replaceAll('/', new String.fromCharCode(JavaFile.separatorChar)));
+ return new JavaFile.relative(pkgDir, relPath.replaceAll(
+ '/', new String.fromCharCode(JavaFile.separatorChar)));
}
@override
@@ -426,8 +441,7 @@
}
}
return new FileBasedSource.con2(
- uri,
- getCanonicalFile(_packagesDirectories[0], pkgName, relPath));
+ uri, getCanonicalFile(_packagesDirectories[0], pkgName, relPath));
}
@override
@@ -444,8 +458,7 @@
return parseUriWithException(
"$PACKAGE_SCHEME:${pkgFolder.getName()}$relPath");
}
- } catch (e) {
- }
+ } catch (e) {}
}
}
}
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index da3e457..1297a43 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -151,9 +151,7 @@
DartType overrideType = staticType;
DartType propagatedType = rightHandSide.propagatedType;
if (propagatedType != null) {
- if (propagatedType.isMoreSpecificThan(staticType)) {
- _recordPropagatedType(node, propagatedType);
- }
+ _recordPropagatedTypeIfBetter(node, propagatedType);
overrideType = propagatedType;
}
_resolver.overrideExpression(node.leftHandSide, overrideType, true);
@@ -165,10 +163,7 @@
if (!identical(propagatedMethodElement, staticMethodElement)) {
DartType propagatedType =
_computeStaticReturnType(propagatedMethodElement);
- if (propagatedType != null &&
- propagatedType.isMoreSpecificThan(staticType)) {
- _recordPropagatedType(node, propagatedType);
- }
+ _recordPropagatedTypeIfBetter(node, propagatedType);
}
}
return null;
@@ -191,14 +186,9 @@
DartType staticType = flattenFutures(_typeProvider, staticExpressionType);
_recordStaticType(node, staticType);
DartType propagatedExpressionType = node.expression.propagatedType;
- if (propagatedExpressionType != null) {
- DartType propagatedType =
- flattenFutures(_typeProvider, propagatedExpressionType);
- if (propagatedType != null &&
- propagatedType.isMoreSpecificThan(staticType)) {
- _recordPropagatedType(node, propagatedType);
- }
- }
+ DartType propagatedType =
+ flattenFutures(_typeProvider, propagatedExpressionType);
+ _recordPropagatedTypeIfBetter(node, propagatedType);
return null;
}
@@ -249,10 +239,7 @@
if (!identical(propagatedMethodElement, staticMethodElement)) {
DartType propagatedType =
_computeStaticReturnType(propagatedMethodElement);
- if (propagatedType != null &&
- propagatedType.isMoreSpecificThan(staticType)) {
- _recordPropagatedType(node, propagatedType);
- }
+ _recordPropagatedTypeIfBetter(node, propagatedType);
}
return null;
}
@@ -275,7 +262,7 @@
@override
Object visitCascadeExpression(CascadeExpression node) {
_recordStaticType(node, _getStaticType(node.target));
- _recordPropagatedType(node, node.target.propagatedType);
+ _recordPropagatedTypeIfBetter(node, node.target.propagatedType);
return null;
}
@@ -316,10 +303,7 @@
}
DartType propagatedType =
propagatedThenType.getLeastUpperBound(propagatedElseType);
- if (propagatedType != null &&
- propagatedType.isMoreSpecificThan(staticType)) {
- _recordPropagatedType(node, propagatedType);
- }
+ _recordPropagatedTypeIfBetter(node, propagatedType);
}
return null;
}
@@ -413,35 +397,18 @@
// Record propagated return type of the static element.
DartType staticPropagatedType =
_computePropagatedReturnType(staticMethodElement);
- if (staticPropagatedType != null &&
- (staticStaticType == null ||
- staticPropagatedType.isMoreSpecificThan(staticStaticType))) {
- _recordPropagatedType(node, staticPropagatedType);
- }
+ _recordPropagatedTypeIfBetter(node, staticPropagatedType);
+ // Process propagated element.
ExecutableElement propagatedMethodElement = node.propagatedElement;
if (!identical(propagatedMethodElement, staticMethodElement)) {
// Record static return type of the propagated element.
DartType propagatedStaticType =
_computeStaticReturnType(propagatedMethodElement);
- if (propagatedStaticType != null &&
- (staticStaticType == null ||
- propagatedStaticType.isMoreSpecificThan(staticStaticType)) &&
- (staticPropagatedType == null ||
- propagatedStaticType.isMoreSpecificThan(staticPropagatedType))) {
- _recordPropagatedType(node, propagatedStaticType);
- }
+ _recordPropagatedTypeIfBetter(node, propagatedStaticType, true);
// Record propagated return type of the propagated element.
DartType propagatedPropagatedType =
_computePropagatedReturnType(propagatedMethodElement);
- if (propagatedPropagatedType != null &&
- (staticStaticType == null ||
- propagatedPropagatedType.isMoreSpecificThan(staticStaticType)) &&
- (staticPropagatedType == null ||
- propagatedPropagatedType.isMoreSpecificThan(staticPropagatedType)) &&
- (propagatedStaticType == null ||
- propagatedPropagatedType.isMoreSpecificThan(propagatedStaticType))) {
- _recordPropagatedType(node, propagatedPropagatedType);
- }
+ _recordPropagatedTypeIfBetter(node, propagatedPropagatedType, true);
}
return null;
}
@@ -460,10 +427,7 @@
MethodElement propagatedMethodElement = node.propagatedElement;
if (!identical(propagatedMethodElement, staticMethodElement)) {
DartType propagatedType = _computeArgumentType(propagatedMethodElement);
- if (propagatedType != null &&
- propagatedType.isMoreSpecificThan(staticType)) {
- _recordPropagatedType(node, propagatedType);
- }
+ _recordPropagatedTypeIfBetter(node, propagatedType);
}
} else {
ExecutableElement staticMethodElement = node.staticElement;
@@ -473,10 +437,7 @@
if (!identical(propagatedMethodElement, staticMethodElement)) {
DartType propagatedType =
_computeStaticReturnType(propagatedMethodElement);
- if (propagatedType != null &&
- propagatedType.isMoreSpecificThan(staticType)) {
- _recordPropagatedType(node, propagatedType);
- }
+ _recordPropagatedTypeIfBetter(node, propagatedType);
}
}
return null;
@@ -501,18 +462,12 @@
String constructorName = element.name;
if ("tag" == constructorName) {
DartType returnType = _getFirstArgumentAsTypeWithMap(
- library,
- node.argumentList,
- _HTML_ELEMENT_TO_CLASS_MAP);
- if (returnType != null) {
- _recordPropagatedType(node, returnType);
- }
+ library, node.argumentList, _HTML_ELEMENT_TO_CLASS_MAP);
+ _recordPropagatedTypeIfBetter(node, returnType);
} else {
- DartType returnType =
- _getElementNameAsType(library, constructorName, _HTML_ELEMENT_TO_CLASS_MAP);
- if (returnType != null) {
- _recordPropagatedType(node, returnType);
- }
+ DartType returnType = _getElementNameAsType(
+ library, constructorName, _HTML_ELEMENT_TO_CLASS_MAP);
+ _recordPropagatedTypeIfBetter(node, returnType);
}
}
}
@@ -564,8 +519,7 @@
}
}
_recordStaticType(
- node,
- _typeProvider.listType.substitute4(<DartType>[staticType]));
+ node, _typeProvider.listType.substitute4(<DartType>[staticType]));
return null;
}
@@ -601,9 +555,8 @@
}
}
}
- _recordStaticType(
- node,
- _typeProvider.mapType.substitute4(<DartType>[staticKeyType, staticValueType]));
+ _recordStaticType(node, _typeProvider.mapType
+ .substitute4(<DartType>[staticKeyType, staticValueType]));
return null;
}
@@ -653,10 +606,7 @@
DartType staticType = variable.type;
_recordStaticType(methodNameNode, staticType);
DartType propagatedType = _overrideManager.getType(variable);
- if (propagatedType != null &&
- propagatedType.isMoreSpecificThan(staticType)) {
- _recordPropagatedType(methodNameNode, propagatedType);
- }
+ _recordPropagatedTypeIfBetter(methodNameNode, propagatedType);
}
// Record static return type of the static element.
DartType staticStaticType = _computeStaticReturnType(staticMethodElement);
@@ -664,11 +614,8 @@
// Record propagated return type of the static element.
DartType staticPropagatedType =
_computePropagatedReturnType(staticMethodElement);
- if (staticPropagatedType != null &&
- (staticStaticType == null ||
- staticPropagatedType.isMoreSpecificThan(staticStaticType))) {
- _recordPropagatedType(node, staticPropagatedType);
- }
+ _recordPropagatedTypeIfBetter(node, staticPropagatedType);
+ // Check for special cases.
bool needPropagatedType = true;
String methodName = methodNameNode.name;
if (methodName == "then") {
@@ -713,7 +660,8 @@
if (target != null) {
DartType targetType = target.bestType;
if (targetType is InterfaceType &&
- (targetType.name == "HtmlDocument" || targetType.name == "Document")) {
+ (targetType.name == "HtmlDocument" ||
+ targetType.name == "Document")) {
LibraryElement library = targetType.element.library;
if (_isHtmlLibrary(library)) {
DartType returnType =
@@ -743,7 +691,8 @@
} else {
DartType targetType = target.bestType;
if (targetType is InterfaceType &&
- (targetType.name == "HtmlDocument" || targetType.name == "Document")) {
+ (targetType.name == "HtmlDocument" ||
+ targetType.name == "Document")) {
LibraryElement library = targetType.element.library;
if (_isHtmlLibrary(library)) {
DartType returnType =
@@ -760,7 +709,8 @@
if (target != null) {
DartType targetType = target.bestType;
if (targetType is InterfaceType &&
- (targetType.name == "HtmlDocument" || targetType.name == "Document")) {
+ (targetType.name == "HtmlDocument" ||
+ targetType.name == "Document")) {
LibraryElement library = targetType.element.library;
if (_isHtmlLibrary(library)) {
DartType returnType =
@@ -774,8 +724,7 @@
}
} else if (methodName == "JS") {
DartType returnType = _getFirstArgumentAsType(
- _typeProvider.objectType.element.library,
- node.argumentList);
+ _typeProvider.objectType.element.library, node.argumentList);
if (returnType != null) {
_recordPropagatedType(node, returnType);
needPropagatedType = false;
@@ -819,25 +768,11 @@
// Record static return type of the propagated element.
DartType propagatedStaticType =
_computeStaticReturnType(propagatedElement);
- if (propagatedStaticType != null &&
- (staticStaticType == null ||
- propagatedStaticType.isMoreSpecificThan(staticStaticType)) &&
- (staticPropagatedType == null ||
- propagatedStaticType.isMoreSpecificThan(staticPropagatedType))) {
- _recordPropagatedType(node, propagatedStaticType);
- }
+ _recordPropagatedTypeIfBetter(node, propagatedStaticType, true);
// Record propagated return type of the propagated element.
DartType propagatedPropagatedType =
_computePropagatedReturnType(propagatedElement);
- if (propagatedPropagatedType != null &&
- (staticStaticType == null ||
- propagatedPropagatedType.isMoreSpecificThan(staticStaticType)) &&
- (staticPropagatedType == null ||
- propagatedPropagatedType.isMoreSpecificThan(staticPropagatedType)) &&
- (propagatedStaticType == null ||
- propagatedPropagatedType.isMoreSpecificThan(propagatedStaticType))) {
- _recordPropagatedType(node, propagatedPropagatedType);
- }
+ _recordPropagatedTypeIfBetter(node, propagatedPropagatedType, true);
}
}
return null;
@@ -847,7 +782,7 @@
Object visitNamedExpression(NamedExpression node) {
Expression expression = node.expression;
_recordStaticType(node, _getStaticType(expression));
- _recordPropagatedType(node, expression.propagatedType);
+ _recordPropagatedTypeIfBetter(node, expression.propagatedType);
return null;
}
@@ -865,7 +800,7 @@
Object visitParenthesizedExpression(ParenthesizedExpression node) {
Expression expression = node.expression;
_recordStaticType(node, _getStaticType(expression));
- _recordPropagatedType(node, expression.propagatedType);
+ _recordPropagatedTypeIfBetter(node, expression.propagatedType);
return null;
}
@@ -908,7 +843,7 @@
}
}
_recordStaticType(node, staticType);
- _recordPropagatedType(node, operand.propagatedType);
+ _recordPropagatedTypeIfBetter(node, operand.propagatedType);
return null;
}
@@ -967,8 +902,7 @@
propagatedType = (propagatedElement as MethodElement).type;
} else if (propagatedElement is PropertyAccessorElement) {
propagatedType = _getTypeOfProperty(
- propagatedElement as PropertyAccessorElement,
- node.prefix.staticType);
+ propagatedElement as PropertyAccessorElement, node.prefix.staticType);
propagatedType =
_getPropertyPropagatedType(propagatedElement, propagatedType);
} else if (propagatedElement is ExecutableElement) {
@@ -980,14 +914,12 @@
}
DartType overriddenType = _overrideManager.getType(propagatedElement);
if (propagatedType == null ||
- (overriddenType != null && overriddenType.isMoreSpecificThan(propagatedType))) {
+ (overriddenType != null &&
+ overriddenType.isMoreSpecificThan(propagatedType))) {
propagatedType = overriddenType;
}
- if (propagatedType != null &&
- propagatedType.isMoreSpecificThan(staticType)) {
- _recordPropagatedType(prefixedIdentifier, propagatedType);
- _recordPropagatedType(node, propagatedType);
- }
+ _recordPropagatedTypeIfBetter(prefixedIdentifier, propagatedType);
+ _recordPropagatedTypeIfBetter(node, propagatedType);
return null;
}
@@ -1017,10 +949,7 @@
if (!identical(propagatedMethodElement, staticMethodElement)) {
DartType propagatedType =
_computeStaticReturnType(propagatedMethodElement);
- if (propagatedType != null &&
- propagatedType.isMoreSpecificThan(staticType)) {
- _recordPropagatedType(node, propagatedType);
- }
+ _recordPropagatedTypeIfBetter(node, propagatedType);
}
}
return null;
@@ -1076,8 +1005,7 @@
staticType = staticElement.type;
} else if (staticElement is PropertyAccessorElement) {
Expression realTarget = node.realTarget;
- staticType = _getTypeOfProperty(
- staticElement,
+ staticType = _getTypeOfProperty(staticElement,
realTarget != null ? _getStaticType(realTarget) : null);
} else {
// TODO(brianwilkerson) Report this internal error.
@@ -1091,16 +1019,12 @@
} else if (propagatedElement is PropertyAccessorElement) {
Expression realTarget = node.realTarget;
propagatedType = _getTypeOfProperty(
- propagatedElement,
- realTarget != null ? realTarget.bestType : null);
+ propagatedElement, realTarget != null ? realTarget.bestType : null);
} else {
// TODO(brianwilkerson) Report this internal error.
}
- if (propagatedType != null &&
- propagatedType.isMoreSpecificThan(staticType)) {
- _recordPropagatedType(propertyName, propagatedType);
- _recordPropagatedType(node, propagatedType);
- }
+ _recordPropagatedTypeIfBetter(propertyName, propagatedType);
+ _recordPropagatedTypeIfBetter(node, propagatedType);
return null;
}
@@ -1193,19 +1117,12 @@
if (propagatedType == null) {
DartType overriddenType = _overrideManager.getType(element);
if (propagatedType == null ||
- overriddenType != null && overriddenType.isMoreSpecificThan(propagatedType)) {
+ overriddenType != null &&
+ overriddenType.isMoreSpecificThan(propagatedType)) {
propagatedType = overriddenType;
}
}
- if (propagatedType != null &&
- propagatedType.isMoreSpecificThan(staticType)) {
- // TODO(scheglov) "isMoreSpecificThan" returns "true" when
- // "propagatedType" is the same as "staticType".
- // Not sure if it is useful to record.
- _recordPropagatedType(node, propagatedType);
- } else {
- node.propagatedType = null;
- }
+ _recordPropagatedTypeIfBetter(node, propagatedType);
return null;
}
@@ -1279,7 +1196,7 @@
if (initializer != null) {
DartType rightType = initializer.bestType;
SimpleIdentifier name = node.name;
- _recordPropagatedType(name, rightType);
+ _recordPropagatedTypeIfBetter(name, rightType);
VariableElement element = name.staticElement as VariableElement;
if (element != null) {
_resolver.overrideVariable(element, rightType, true);
@@ -1331,7 +1248,6 @@
return expressionBody.expression.bestType;
}
if (body is BlockFunctionBody) {
-
_StaticTypeAnalyzer_computePropagatedReturnTypeOfFunction visitor =
new _StaticTypeAnalyzer_computePropagatedReturnTypeOfFunction();
body.accept(visitor);
@@ -1359,8 +1275,7 @@
return _dynamicType;
} else if (returnType is InterfaceType) {
MethodElement callMethod = returnType.lookUpMethod(
- FunctionElement.CALL_METHOD_NAME,
- _resolver.definingLibrary);
+ FunctionElement.CALL_METHOD_NAME, _resolver.definingLibrary);
if (callMethod != null) {
return callMethod.type.returnType;
}
@@ -1399,8 +1314,8 @@
* @param node the function expression whose static return type is to be computed
* @return the static return type that was computed
*/
- DartType
- _computeStaticReturnTypeOfFunctionDeclaration(FunctionDeclaration node) {
+ DartType _computeStaticReturnTypeOfFunctionDeclaration(
+ FunctionDeclaration node) {
TypeName returnType = node.returnType;
if (returnType == null) {
return _dynamicType;
@@ -1416,8 +1331,8 @@
* @param node the function expression whose return type is to be computed
* @return the return type that was computed
*/
- DartType
- _computeStaticReturnTypeOfFunctionExpression(FunctionExpression node) {
+ DartType _computeStaticReturnTypeOfFunctionExpression(
+ FunctionExpression node) {
FunctionBody body = node.body;
if (body.isGenerator) {
if (body.isAsynchronous) {
@@ -1433,8 +1348,8 @@
type = _dynamicType;
}
if (body.isAsynchronous) {
- return _typeProvider.futureType.substitute4(
- <DartType>[flattenFutures(_typeProvider, type)]);
+ return _typeProvider.futureType
+ .substitute4(<DartType>[flattenFutures(_typeProvider, type)]);
} else {
return type;
}
@@ -1472,8 +1387,8 @@
* @param argumentList the list of arguments from which a type is to be extracted
* @return the type specified by the first argument in the argument list
*/
- DartType _getFirstArgumentAsQuery(LibraryElement library,
- ArgumentList argumentList) {
+ DartType _getFirstArgumentAsQuery(
+ LibraryElement library, ArgumentList argumentList) {
String argumentValue = _getFirstArgumentAsString(argumentList);
if (argumentValue != null) {
//
@@ -1528,8 +1443,8 @@
* @param argumentList the list of arguments from which a type is to be extracted
* @return the type specified by the first argument in the argument list
*/
- DartType _getFirstArgumentAsType(LibraryElement library,
- ArgumentList argumentList) =>
+ DartType _getFirstArgumentAsType(
+ LibraryElement library, ArgumentList argumentList) =>
_getFirstArgumentAsTypeWithMap(library, argumentList, null);
/**
@@ -1543,11 +1458,9 @@
* @return the type specified by the first argument in the argument list
*/
DartType _getFirstArgumentAsTypeWithMap(LibraryElement library,
- ArgumentList argumentList, HashMap<String, String> nameMap) =>
+ ArgumentList argumentList, HashMap<String, String> nameMap) =>
_getElementNameAsType(
- library,
- _getFirstArgumentAsString(argumentList),
- nameMap);
+ library, _getFirstArgumentAsString(argumentList), nameMap);
/**
* Return the propagated type of the given [Element], or `null`.
@@ -1559,7 +1472,8 @@
PropertyInducingElement variable = accessor.variable;
DartType propagatedType = variable.propagatedType;
if (currentType == null ||
- propagatedType != null && propagatedType.isMoreSpecificThan(currentType)) {
+ propagatedType != null &&
+ propagatedType.isMoreSpecificThan(currentType)) {
return propagatedType;
}
}
@@ -1609,8 +1523,8 @@
* specific type information
* @return the type that should be recorded for a node that resolved to the given accessor
*/
- DartType _getTypeOfProperty(PropertyAccessorElement accessor,
- DartType context) {
+ DartType _getTypeOfProperty(
+ PropertyAccessorElement accessor, DartType context) {
FunctionType functionType = accessor.type;
if (functionType == null) {
// TODO(brianwilkerson) Report this internal error. This happens when we
@@ -1640,9 +1554,9 @@
InterfaceType interfaceTypeContext = context;
// Type[] argumentTypes = interfaceTypeContext.getTypeArguments();
List<TypeParameterElement> typeParameterElements =
- interfaceTypeContext.element != null ?
- interfaceTypeContext.element.typeParameters :
- null;
+ interfaceTypeContext.element != null
+ ? interfaceTypeContext.element.typeParameters
+ : null;
if (typeParameterElements != null) {
for (int i = 0; i < typeParameterElements.length; i++) {
TypeParameterElement typeParameterElement = typeParameterElements[i];
@@ -1662,10 +1576,9 @@
* Return `true` if the given [Type] is the `Future` form the 'dart:async'
* library.
*/
- bool _isAsyncFutureType(DartType type) =>
- type is InterfaceType &&
- type.name == "Future" &&
- _isAsyncLibrary(type.element.library);
+ bool _isAsyncFutureType(DartType type) => type is InterfaceType &&
+ type.name == "Future" &&
+ _isAsyncLibrary(type.element.library);
/**
* Return `true` if the given library is the 'dart:async' library.
@@ -1708,12 +1621,45 @@
void _recordPropagatedType(Expression expression, DartType type) {
if (type != null && !type.isDynamic && !type.isBottom) {
expression.propagatedType = type;
- } else {
- expression.propagatedType = null;
}
}
/**
+ * If the given [type] is valid, strongly more specific than the
+ * existing static type of the given [expression], record it as a propagated
+ * type of the given [expression]. Otherwise, reset it to `null`.
+ *
+ * If [hasOldPropagatedType] is `true` then the existing propagated type
+ * should also is checked.
+ */
+ void _recordPropagatedTypeIfBetter(Expression expression, DartType type,
+ [bool hasOldPropagatedType = false]) {
+ // Ensure that propagated type invalid.
+ if (type == null || type.isDynamic || type.isBottom) {
+ if (!hasOldPropagatedType) {
+ expression.propagatedType = null;
+ }
+ return;
+ }
+ // Ensure that propagated type is more specific than the static type.
+ DartType staticType = expression.staticType;
+ if (type == staticType || !type.isMoreSpecificThan(staticType)) {
+ expression.propagatedType = null;
+ return;
+ }
+ // Ensure that the new propagated type is more specific than the old one.
+ if (hasOldPropagatedType) {
+ DartType oldPropagatedType = expression.propagatedType;
+ if (oldPropagatedType != null &&
+ !type.isMoreSpecificThan(oldPropagatedType)) {
+ return;
+ }
+ }
+ // OK
+ expression.propagatedType = type;
+ }
+
+ /**
* Given a function element and its body, compute and record the propagated return type of the
* function.
*
@@ -1722,8 +1668,8 @@
* @return the propagated return type that was computed, may be `null` if it is not more
* specific than the static return type.
*/
- void _recordPropagatedTypeOfFunction(ExecutableElement functionElement,
- FunctionBody body) {
+ void _recordPropagatedTypeOfFunction(
+ ExecutableElement functionElement, FunctionBody body) {
DartType propagatedReturnType =
_computePropagatedReturnTypeOfFunction(body);
if (propagatedReturnType == null) {
@@ -1763,8 +1709,8 @@
* @param staticType the static type of the expression as resolved
* @return the better type guess, or the same static type as given
*/
- DartType _refineBinaryExpressionType(BinaryExpression node,
- DartType staticType) {
+ DartType _refineBinaryExpressionType(
+ BinaryExpression node, DartType staticType) {
sc.TokenType operator = node.operator.type;
// bool
if (operator == sc.TokenType.AMPERSAND_AMPERSAND ||
@@ -1883,8 +1829,8 @@
}
}
-class _StaticTypeAnalyzer_computePropagatedReturnTypeOfFunction extends
- GeneralizingAstVisitor<Object> {
+class _StaticTypeAnalyzer_computePropagatedReturnTypeOfFunction
+ extends GeneralizingAstVisitor<Object> {
DartType result = null;
_StaticTypeAnalyzer_computePropagatedReturnTypeOfFunction();
diff --git a/pkg/analyzer/lib/src/generated/testing/ast_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_factory.dart
index bc010ee..fa46781 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_factory.dart
@@ -29,68 +29,48 @@
static AdjacentStrings adjacentStrings(List<StringLiteral> strings) =>
new AdjacentStrings(strings);
- static Annotation annotation(Identifier name) =>
- new Annotation(
- TokenFactory.tokenFromType(TokenType.AT),
- name,
- null,
- null,
- null);
+ static Annotation annotation(Identifier name) => new Annotation(
+ TokenFactory.tokenFromType(TokenType.AT), name, null, null, null);
static Annotation annotation2(Identifier name,
- SimpleIdentifier constructorName, ArgumentList arguments) =>
- new Annotation(
- TokenFactory.tokenFromType(TokenType.AT),
- name,
- TokenFactory.tokenFromType(TokenType.PERIOD),
- constructorName,
+ SimpleIdentifier constructorName, ArgumentList arguments) =>
+ new Annotation(TokenFactory.tokenFromType(TokenType.AT), name,
+ TokenFactory.tokenFromType(TokenType.PERIOD), constructorName,
arguments);
static ArgumentList argumentList([List<Expression> arguments]) =>
- new ArgumentList(
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- arguments,
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN));
+ new ArgumentList(TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
+ arguments, TokenFactory.tokenFromType(TokenType.CLOSE_PAREN));
static AsExpression asExpression(Expression expression, TypeName type) =>
- new AsExpression(expression, TokenFactory.tokenFromKeyword(Keyword.AS), type);
+ new AsExpression(
+ expression, TokenFactory.tokenFromKeyword(Keyword.AS), type);
static AssertStatement assertStatement(Expression condition) =>
- new AssertStatement(
- TokenFactory.tokenFromKeyword(Keyword.ASSERT),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- condition,
+ new AssertStatement(TokenFactory.tokenFromKeyword(Keyword.ASSERT),
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN), condition,
TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
TokenFactory.tokenFromType(TokenType.SEMICOLON));
static AssignmentExpression assignmentExpression(Expression leftHandSide,
- TokenType operator, Expression rightHandSide) =>
- new AssignmentExpression(
- leftHandSide,
- TokenFactory.tokenFromType(operator),
- rightHandSide);
+ TokenType operator, Expression rightHandSide) => new AssignmentExpression(
+ leftHandSide, TokenFactory.tokenFromType(operator), rightHandSide);
- static BlockFunctionBody
- asyncBlockFunctionBody([List<Statement> statements]) =>
- new BlockFunctionBody(
- TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"),
- null,
- block(statements));
+ static BlockFunctionBody asyncBlockFunctionBody(
+ [List<Statement> statements]) => new BlockFunctionBody(
+ TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"), null,
+ block(statements));
- static ExpressionFunctionBody
- asyncExpressionFunctionBody(Expression expression) =>
- new ExpressionFunctionBody(
- TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"),
- TokenFactory.tokenFromType(TokenType.FUNCTION),
- expression,
- TokenFactory.tokenFromType(TokenType.SEMICOLON));
+ static ExpressionFunctionBody asyncExpressionFunctionBody(
+ Expression expression) => new ExpressionFunctionBody(
+ TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"),
+ TokenFactory.tokenFromType(TokenType.FUNCTION), expression,
+ TokenFactory.tokenFromType(TokenType.SEMICOLON));
- static BlockFunctionBody
- asyncGeneratorBlockFunctionBody([List<Statement> statements]) =>
- new BlockFunctionBody(
- TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"),
- TokenFactory.tokenFromType(TokenType.STAR),
- block(statements));
+ static BlockFunctionBody asyncGeneratorBlockFunctionBody(
+ [List<Statement> statements]) => new BlockFunctionBody(
+ TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"),
+ TokenFactory.tokenFromType(TokenType.STAR), block(statements));
static AwaitExpression awaitExpression(Expression expression) =>
new AwaitExpression(
@@ -98,17 +78,12 @@
expression);
static BinaryExpression binaryExpression(Expression leftOperand,
- TokenType operator, Expression rightOperand) =>
- new BinaryExpression(
- leftOperand,
- TokenFactory.tokenFromType(operator),
- rightOperand);
+ TokenType operator, Expression rightOperand) => new BinaryExpression(
+ leftOperand, TokenFactory.tokenFromType(operator), rightOperand);
- static Block block([List<Statement> statements]) =>
- new Block(
- TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
- statements,
- TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
+ static Block block([List<Statement> statements]) => new Block(
+ TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET), statements,
+ TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
static BlockFunctionBody blockFunctionBody(Block block) =>
new BlockFunctionBody(null, null, block);
@@ -116,257 +91,208 @@
static BlockFunctionBody blockFunctionBody2([List<Statement> statements]) =>
new BlockFunctionBody(null, null, block(statements));
- static BooleanLiteral booleanLiteral(bool value) =>
- new BooleanLiteral(
- value ?
- TokenFactory.tokenFromKeyword(Keyword.TRUE) :
- TokenFactory.tokenFromKeyword(Keyword.FALSE),
- value);
+ static BooleanLiteral booleanLiteral(bool value) => new BooleanLiteral(value
+ ? TokenFactory.tokenFromKeyword(Keyword.TRUE)
+ : TokenFactory.tokenFromKeyword(Keyword.FALSE), value);
- static BreakStatement breakStatement() =>
- new BreakStatement(
- TokenFactory.tokenFromKeyword(Keyword.BREAK),
- null,
- TokenFactory.tokenFromType(TokenType.SEMICOLON));
+ static BreakStatement breakStatement() => new BreakStatement(
+ TokenFactory.tokenFromKeyword(Keyword.BREAK), null,
+ TokenFactory.tokenFromType(TokenType.SEMICOLON));
- static BreakStatement breakStatement2(String label) =>
- new BreakStatement(
- TokenFactory.tokenFromKeyword(Keyword.BREAK),
- identifier3(label),
- TokenFactory.tokenFromType(TokenType.SEMICOLON));
+ static BreakStatement breakStatement2(String label) => new BreakStatement(
+ TokenFactory.tokenFromKeyword(Keyword.BREAK), identifier3(label),
+ TokenFactory.tokenFromType(TokenType.SEMICOLON));
static IndexExpression cascadedIndexExpression(Expression index) =>
new IndexExpression.forCascade(
TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD),
- TokenFactory.tokenFromType(TokenType.OPEN_SQUARE_BRACKET),
- index,
+ TokenFactory.tokenFromType(TokenType.OPEN_SQUARE_BRACKET), index,
TokenFactory.tokenFromType(TokenType.CLOSE_SQUARE_BRACKET));
static MethodInvocation cascadedMethodInvocation(String methodName,
- [List<Expression> arguments]) =>
- new MethodInvocation(
- null,
- TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD),
- identifier3(methodName),
- argumentList(arguments));
+ [List<Expression> arguments]) => new MethodInvocation(null,
+ TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD),
+ identifier3(methodName), argumentList(arguments));
static PropertyAccess cascadedPropertyAccess(String propertyName) =>
- new PropertyAccess(
- null,
+ new PropertyAccess(null,
TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD),
identifier3(propertyName));
static CascadeExpression cascadeExpression(Expression target,
- [List<Expression> cascadeSections]) =>
+ [List<Expression> cascadeSections]) =>
new CascadeExpression(target, cascadeSections);
static CatchClause catchClause(String exceptionParameter,
- [List<Statement> statements]) =>
+ [List<Statement> statements]) =>
catchClause5(null, exceptionParameter, null, statements);
- static CatchClause catchClause2(String exceptionParameter,
- String stackTraceParameter, [List<Statement> statements]) =>
+ static CatchClause catchClause2(
+ String exceptionParameter, String stackTraceParameter,
+ [List<Statement> statements]) =>
catchClause5(null, exceptionParameter, stackTraceParameter, statements);
static CatchClause catchClause3(TypeName exceptionType,
- [List<Statement> statements]) =>
+ [List<Statement> statements]) =>
catchClause5(exceptionType, null, null, statements);
- static CatchClause catchClause4(TypeName exceptionType,
- String exceptionParameter, [List<Statement> statements]) =>
+ static CatchClause catchClause4(
+ TypeName exceptionType, String exceptionParameter,
+ [List<Statement> statements]) =>
catchClause5(exceptionType, exceptionParameter, null, statements);
static CatchClause catchClause5(TypeName exceptionType,
String exceptionParameter, String stackTraceParameter,
- [List<Statement> statements]) =>
- new CatchClause(
- exceptionType == null ?
- null :
- TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "on"),
- exceptionType,
- exceptionParameter == null ?
- null :
- TokenFactory.tokenFromKeyword(Keyword.CATCH),
- exceptionParameter == null ?
- null :
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- exceptionParameter == null ? null : identifier3(exceptionParameter),
- stackTraceParameter == null ?
- null :
- TokenFactory.tokenFromType(TokenType.COMMA),
- stackTraceParameter == null ? null : identifier3(stackTraceParameter),
- exceptionParameter == null ?
- null :
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
- block(statements));
+ [List<Statement> statements]) => new CatchClause(exceptionType == null
+ ? null
+ : TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "on"),
+ exceptionType, exceptionParameter == null
+ ? null
+ : TokenFactory.tokenFromKeyword(Keyword.CATCH), exceptionParameter ==
+ null ? null : TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
+ exceptionParameter == null ? null : identifier3(exceptionParameter),
+ stackTraceParameter == null
+ ? null
+ : TokenFactory.tokenFromType(TokenType.COMMA),
+ stackTraceParameter == null ? null : identifier3(stackTraceParameter),
+ exceptionParameter == null
+ ? null
+ : TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
+ block(statements));
static ClassDeclaration classDeclaration(Keyword abstractKeyword, String name,
TypeParameterList typeParameters, ExtendsClause extendsClause,
WithClause withClause, ImplementsClause implementsClause,
- [List<ClassMember> members]) =>
- new ClassDeclaration(
- null,
- null,
- abstractKeyword == null ? null : TokenFactory.tokenFromKeyword(abstractKeyword),
- TokenFactory.tokenFromKeyword(Keyword.CLASS),
- identifier3(name),
- typeParameters,
- extendsClause,
- withClause,
- implementsClause,
- TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
- members,
- TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
+ [List<ClassMember> members]) => new ClassDeclaration(null, null,
+ abstractKeyword == null
+ ? null
+ : TokenFactory.tokenFromKeyword(abstractKeyword),
+ TokenFactory.tokenFromKeyword(Keyword.CLASS), identifier3(name),
+ typeParameters, extendsClause, withClause, implementsClause,
+ TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET), members,
+ TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
static ClassTypeAlias classTypeAlias(String name,
- TypeParameterList typeParameters, Keyword abstractKeyword, TypeName superclass,
- WithClause withClause, ImplementsClause implementsClause) =>
- new ClassTypeAlias(
- null,
- null,
- TokenFactory.tokenFromKeyword(Keyword.CLASS),
- identifier3(name),
- typeParameters,
- TokenFactory.tokenFromType(TokenType.EQ),
- abstractKeyword == null ? null : TokenFactory.tokenFromKeyword(abstractKeyword),
- superclass,
- withClause,
- implementsClause,
- TokenFactory.tokenFromType(TokenType.SEMICOLON));
+ TypeParameterList typeParameters, Keyword abstractKeyword,
+ TypeName superclass, WithClause withClause,
+ ImplementsClause implementsClause) => new ClassTypeAlias(null, null,
+ TokenFactory.tokenFromKeyword(Keyword.CLASS), identifier3(name),
+ typeParameters, TokenFactory.tokenFromType(TokenType.EQ),
+ abstractKeyword == null
+ ? null
+ : TokenFactory.tokenFromKeyword(abstractKeyword), superclass,
+ withClause, implementsClause,
+ TokenFactory.tokenFromType(TokenType.SEMICOLON));
static CompilationUnit compilationUnit() =>
compilationUnit8(null, null, null);
- static CompilationUnit
- compilationUnit2(List<CompilationUnitMember> declarations) =>
+ static CompilationUnit compilationUnit2(
+ List<CompilationUnitMember> declarations) =>
compilationUnit8(null, null, declarations);
static CompilationUnit compilationUnit3(List<Directive> directives) =>
compilationUnit8(null, directives, null);
static CompilationUnit compilationUnit4(List<Directive> directives,
- List<CompilationUnitMember> declarations) =>
+ List<CompilationUnitMember> declarations) =>
compilationUnit8(null, directives, declarations);
static CompilationUnit compilationUnit5(String scriptTag) =>
compilationUnit8(scriptTag, null, null);
- static CompilationUnit compilationUnit6(String scriptTag,
- List<CompilationUnitMember> declarations) =>
+ static CompilationUnit compilationUnit6(
+ String scriptTag, List<CompilationUnitMember> declarations) =>
compilationUnit8(scriptTag, null, declarations);
- static CompilationUnit compilationUnit7(String scriptTag,
- List<Directive> directives) =>
+ static CompilationUnit compilationUnit7(
+ String scriptTag, List<Directive> directives) =>
compilationUnit8(scriptTag, directives, null);
static CompilationUnit compilationUnit8(String scriptTag,
- List<Directive> directives, List<CompilationUnitMember> declarations) =>
- new CompilationUnit(
- TokenFactory.tokenFromType(TokenType.EOF),
- scriptTag == null ? null : AstFactory.scriptTag(scriptTag),
- directives == null ? new List<Directive>() : directives,
- declarations == null ? new List<CompilationUnitMember>() : declarations,
- TokenFactory.tokenFromType(TokenType.EOF));
+ List<Directive> directives,
+ List<CompilationUnitMember> declarations) => new CompilationUnit(
+ TokenFactory.tokenFromType(TokenType.EOF),
+ scriptTag == null ? null : AstFactory.scriptTag(scriptTag),
+ directives == null ? new List<Directive>() : directives,
+ declarations == null ? new List<CompilationUnitMember>() : declarations,
+ TokenFactory.tokenFromType(TokenType.EOF));
static ConditionalExpression conditionalExpression(Expression condition,
- Expression thenExpression, Expression elseExpression) =>
- new ConditionalExpression(
- condition,
- TokenFactory.tokenFromType(TokenType.QUESTION),
- thenExpression,
- TokenFactory.tokenFromType(TokenType.COLON),
- elseExpression);
+ Expression thenExpression, Expression elseExpression) =>
+ new ConditionalExpression(condition,
+ TokenFactory.tokenFromType(TokenType.QUESTION), thenExpression,
+ TokenFactory.tokenFromType(TokenType.COLON), elseExpression);
static ConstructorDeclaration constructorDeclaration(Identifier returnType,
String name, FormalParameterList parameters,
- List<ConstructorInitializer> initializers) =>
- new ConstructorDeclaration(
- null,
- null,
- TokenFactory.tokenFromKeyword(Keyword.EXTERNAL),
- null,
- null,
- returnType,
- name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
- name == null ? null : identifier3(name),
- parameters,
- initializers == null || initializers.isEmpty ?
- null :
- TokenFactory.tokenFromType(TokenType.PERIOD),
- initializers == null ? new List<ConstructorInitializer>() : initializers,
- null,
- emptyFunctionBody());
+ List<ConstructorInitializer> initializers) => new ConstructorDeclaration(
+ null, null, TokenFactory.tokenFromKeyword(Keyword.EXTERNAL), null, null,
+ returnType,
+ name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
+ name == null ? null : identifier3(name), parameters,
+ initializers == null || initializers.isEmpty
+ ? null
+ : TokenFactory.tokenFromType(TokenType.PERIOD), initializers == null
+ ? new List<ConstructorInitializer>()
+ : initializers, null, emptyFunctionBody());
static ConstructorDeclaration constructorDeclaration2(Keyword constKeyword,
Keyword factoryKeyword, Identifier returnType, String name,
FormalParameterList parameters, List<ConstructorInitializer> initializers,
- FunctionBody body) =>
- new ConstructorDeclaration(
- null,
- null,
- null,
- constKeyword == null ? null : TokenFactory.tokenFromKeyword(constKeyword),
- factoryKeyword == null ? null : TokenFactory.tokenFromKeyword(factoryKeyword),
- returnType,
- name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
- name == null ? null : identifier3(name),
- parameters,
- initializers == null || initializers.isEmpty ?
- null :
- TokenFactory.tokenFromType(TokenType.PERIOD),
- initializers == null ? new List<ConstructorInitializer>() : initializers,
- null,
- body);
+ FunctionBody body) => new ConstructorDeclaration(null, null, null,
+ constKeyword == null ? null : TokenFactory.tokenFromKeyword(constKeyword),
+ factoryKeyword == null
+ ? null
+ : TokenFactory.tokenFromKeyword(factoryKeyword), returnType,
+ name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
+ name == null ? null : identifier3(name), parameters,
+ initializers == null || initializers.isEmpty
+ ? null
+ : TokenFactory.tokenFromType(TokenType.PERIOD), initializers == null
+ ? new List<ConstructorInitializer>()
+ : initializers, null, body);
- static ConstructorFieldInitializer
- constructorFieldInitializer(bool prefixedWithThis, String fieldName,
- Expression expression) =>
+ static ConstructorFieldInitializer constructorFieldInitializer(
+ bool prefixedWithThis, String fieldName, Expression expression) =>
new ConstructorFieldInitializer(
prefixedWithThis ? TokenFactory.tokenFromKeyword(Keyword.THIS) : null,
- prefixedWithThis ? TokenFactory.tokenFromType(TokenType.PERIOD) : null,
- identifier3(fieldName),
- TokenFactory.tokenFromType(TokenType.EQ),
- expression);
+ prefixedWithThis
+ ? TokenFactory.tokenFromType(TokenType.PERIOD)
+ : null, identifier3(fieldName),
+ TokenFactory.tokenFromType(TokenType.EQ), expression);
static ConstructorName constructorName(TypeName type, String name) =>
- new ConstructorName(
- type,
+ new ConstructorName(type,
name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
name == null ? null : identifier3(name));
static ContinueStatement continueStatement([String label]) =>
- new ContinueStatement(
- TokenFactory.tokenFromKeyword(Keyword.CONTINUE),
+ new ContinueStatement(TokenFactory.tokenFromKeyword(Keyword.CONTINUE),
label == null ? null : identifier3(label),
TokenFactory.tokenFromType(TokenType.SEMICOLON));
- static DeclaredIdentifier declaredIdentifier(Keyword keyword,
- String identifier) =>
+ static DeclaredIdentifier declaredIdentifier(
+ Keyword keyword, String identifier) =>
declaredIdentifier2(keyword, null, identifier);
- static DeclaredIdentifier declaredIdentifier2(Keyword keyword, TypeName type,
- String identifier) =>
- new DeclaredIdentifier(
- null,
- null,
- keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
- type,
+ static DeclaredIdentifier declaredIdentifier2(
+ Keyword keyword, TypeName type, String identifier) =>
+ new DeclaredIdentifier(null, null,
+ keyword == null ? null : TokenFactory.tokenFromKeyword(keyword), type,
identifier3(identifier));
static DeclaredIdentifier declaredIdentifier3(String identifier) =>
declaredIdentifier2(null, null, identifier);
- static DeclaredIdentifier declaredIdentifier4(TypeName type,
- String identifier) =>
+ static DeclaredIdentifier declaredIdentifier4(
+ TypeName type, String identifier) =>
declaredIdentifier2(null, type, identifier);
static DoStatement doStatement(Statement body, Expression condition) =>
- new DoStatement(
- TokenFactory.tokenFromKeyword(Keyword.DO),
- body,
+ new DoStatement(TokenFactory.tokenFromKeyword(Keyword.DO), body,
TokenFactory.tokenFromKeyword(Keyword.WHILE),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- condition,
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN), condition,
TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
TokenFactory.tokenFromType(TokenType.SEMICOLON));
@@ -379,215 +305,155 @@
static EmptyStatement emptyStatement() =>
new EmptyStatement(TokenFactory.tokenFromType(TokenType.SEMICOLON));
- static EnumDeclaration enumDeclaration(SimpleIdentifier name,
- List<EnumConstantDeclaration> constants) =>
- new EnumDeclaration(
- null,
- null,
- TokenFactory.tokenFromKeyword(Keyword.ENUM),
- name,
- TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
- constants,
+ static EnumDeclaration enumDeclaration(
+ SimpleIdentifier name, List<EnumConstantDeclaration> constants) =>
+ new EnumDeclaration(null, null,
+ TokenFactory.tokenFromKeyword(Keyword.ENUM), name,
+ TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET), constants,
TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
- static EnumDeclaration enumDeclaration2(String name,
- List<String> constantNames) {
+ static EnumDeclaration enumDeclaration2(
+ String name, List<String> constantNames) {
int count = constantNames.length;
List<EnumConstantDeclaration> constants =
new List<EnumConstantDeclaration>(count);
for (int i = 0; i < count; i++) {
- constants[i] =
- new EnumConstantDeclaration(null, null, identifier3(constantNames[i]));
+ constants[i] = new EnumConstantDeclaration(
+ null, null, identifier3(constantNames[i]));
}
return enumDeclaration(identifier3(name), constants);
}
static ExportDirective exportDirective(List<Annotation> metadata, String uri,
- [List<Combinator> combinators]) =>
- new ExportDirective(
- null,
- metadata,
- TokenFactory.tokenFromKeyword(Keyword.EXPORT),
- string2(uri),
- combinators,
- TokenFactory.tokenFromType(TokenType.SEMICOLON));
+ [List<Combinator> combinators]) => new ExportDirective(null, metadata,
+ TokenFactory.tokenFromKeyword(Keyword.EXPORT), string2(uri), combinators,
+ TokenFactory.tokenFromType(TokenType.SEMICOLON));
static ExportDirective exportDirective2(String uri,
- [List<Combinator> combinators]) =>
+ [List<Combinator> combinators]) =>
exportDirective(null, uri, combinators);
static ExpressionFunctionBody expressionFunctionBody(Expression expression) =>
- new ExpressionFunctionBody(
- null,
- TokenFactory.tokenFromType(TokenType.FUNCTION),
- expression,
+ new ExpressionFunctionBody(null,
+ TokenFactory.tokenFromType(TokenType.FUNCTION), expression,
TokenFactory.tokenFromType(TokenType.SEMICOLON));
static ExpressionStatement expressionStatement(Expression expression) =>
new ExpressionStatement(
- expression,
- TokenFactory.tokenFromType(TokenType.SEMICOLON));
+ expression, TokenFactory.tokenFromType(TokenType.SEMICOLON));
static ExtendsClause extendsClause(TypeName type) =>
new ExtendsClause(TokenFactory.tokenFromKeyword(Keyword.EXTENDS), type);
static FieldDeclaration fieldDeclaration(bool isStatic, Keyword keyword,
- TypeName type, List<VariableDeclaration> variables) =>
- new FieldDeclaration(
- null,
- null,
+ TypeName type, List<VariableDeclaration> variables) =>
+ new FieldDeclaration(null, null,
isStatic ? TokenFactory.tokenFromKeyword(Keyword.STATIC) : null,
variableDeclarationList(keyword, type, variables),
TokenFactory.tokenFromType(TokenType.SEMICOLON));
static FieldDeclaration fieldDeclaration2(bool isStatic, Keyword keyword,
- List<VariableDeclaration> variables) =>
+ List<VariableDeclaration> variables) =>
fieldDeclaration(isStatic, keyword, null, variables);
- static FieldFormalParameter fieldFormalParameter(Keyword keyword,
- TypeName type, String identifier, [FormalParameterList parameterList]) =>
- new FieldFormalParameter(
- null,
- null,
- keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
- type,
- TokenFactory.tokenFromKeyword(Keyword.THIS),
- TokenFactory.tokenFromType(TokenType.PERIOD),
- identifier3(identifier),
- parameterList);
+ static FieldFormalParameter fieldFormalParameter(
+ Keyword keyword, TypeName type, String identifier,
+ [FormalParameterList parameterList]) => new FieldFormalParameter(null,
+ null, keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
+ type, TokenFactory.tokenFromKeyword(Keyword.THIS),
+ TokenFactory.tokenFromType(TokenType.PERIOD), identifier3(identifier),
+ parameterList);
static FieldFormalParameter fieldFormalParameter2(String identifier) =>
fieldFormalParameter(null, null, identifier);
static ForEachStatement forEachStatement(DeclaredIdentifier loopVariable,
- Expression iterator, Statement body) =>
- new ForEachStatement.con1(
- null,
- TokenFactory.tokenFromKeyword(Keyword.FOR),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- loopVariable,
- TokenFactory.tokenFromKeyword(Keyword.IN),
- iterator,
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
- body);
+ Expression iterator, Statement body) => new ForEachStatement.con1(null,
+ TokenFactory.tokenFromKeyword(Keyword.FOR),
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN), loopVariable,
+ TokenFactory.tokenFromKeyword(Keyword.IN), iterator,
+ TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), body);
- static ForEachStatement forEachStatement2(SimpleIdentifier identifier,
- Expression iterator, Statement body) =>
- new ForEachStatement.con2(
- null,
+ static ForEachStatement forEachStatement2(
+ SimpleIdentifier identifier, Expression iterator, Statement body) =>
+ new ForEachStatement.con2(null,
TokenFactory.tokenFromKeyword(Keyword.FOR),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- identifier,
- TokenFactory.tokenFromKeyword(Keyword.IN),
- iterator,
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
- body);
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN), identifier,
+ TokenFactory.tokenFromKeyword(Keyword.IN), iterator,
+ TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), body);
- static FormalParameterList
- formalParameterList([List<FormalParameter> parameters]) =>
- new FormalParameterList(
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- parameters,
- null,
- null,
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN));
+ static FormalParameterList formalParameterList(
+ [List<FormalParameter> parameters]) => new FormalParameterList(
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN), parameters, null, null,
+ TokenFactory.tokenFromType(TokenType.CLOSE_PAREN));
static ForStatement forStatement(Expression initialization,
- Expression condition, List<Expression> updaters, Statement body) =>
- new ForStatement(
- TokenFactory.tokenFromKeyword(Keyword.FOR),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- null,
- initialization,
- TokenFactory.tokenFromType(TokenType.SEMICOLON),
- condition,
- TokenFactory.tokenFromType(TokenType.SEMICOLON),
- updaters,
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
- body);
+ Expression condition, List<Expression> updaters, Statement body) =>
+ new ForStatement(TokenFactory.tokenFromKeyword(Keyword.FOR),
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN), null,
+ initialization, TokenFactory.tokenFromType(TokenType.SEMICOLON),
+ condition, TokenFactory.tokenFromType(TokenType.SEMICOLON), updaters,
+ TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), body);
static ForStatement forStatement2(VariableDeclarationList variableList,
- Expression condition, List<Expression> updaters, Statement body) =>
- new ForStatement(
- TokenFactory.tokenFromKeyword(Keyword.FOR),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- variableList,
- null,
- TokenFactory.tokenFromType(TokenType.SEMICOLON),
- condition,
- TokenFactory.tokenFromType(TokenType.SEMICOLON),
- updaters,
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
- body);
+ Expression condition, List<Expression> updaters, Statement body) =>
+ new ForStatement(TokenFactory.tokenFromKeyword(Keyword.FOR),
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN), variableList, null,
+ TokenFactory.tokenFromType(TokenType.SEMICOLON), condition,
+ TokenFactory.tokenFromType(TokenType.SEMICOLON), updaters,
+ TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), body);
static FunctionDeclaration functionDeclaration(TypeName type, Keyword keyword,
- String name, FunctionExpression functionExpression) =>
- new FunctionDeclaration(
- null,
- null,
- null,
- type,
+ String name, FunctionExpression functionExpression) =>
+ new FunctionDeclaration(null, null, null, type,
keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
- identifier3(name),
- functionExpression);
+ identifier3(name), functionExpression);
- static FunctionDeclarationStatement
- functionDeclarationStatement(TypeName type, Keyword keyword, String name,
- FunctionExpression functionExpression) =>
+ static FunctionDeclarationStatement functionDeclarationStatement(
+ TypeName type, Keyword keyword, String name,
+ FunctionExpression functionExpression) =>
new FunctionDeclarationStatement(
functionDeclaration(type, keyword, name, functionExpression));
static FunctionExpression functionExpression() =>
new FunctionExpression(formalParameterList(), blockFunctionBody2());
- static FunctionExpression functionExpression2(FormalParameterList parameters,
- FunctionBody body) =>
+ static FunctionExpression functionExpression2(
+ FormalParameterList parameters, FunctionBody body) =>
new FunctionExpression(parameters, body);
- static FunctionExpressionInvocation
- functionExpressionInvocation(Expression function,
- [List<Expression> arguments]) =>
+ static FunctionExpressionInvocation functionExpressionInvocation(
+ Expression function, [List<Expression> arguments]) =>
new FunctionExpressionInvocation(function, argumentList(arguments));
- static FunctionTypedFormalParameter
- functionTypedFormalParameter(TypeName returnType, String identifier,
- [List<FormalParameter> parameters]) =>
- new FunctionTypedFormalParameter(
- null,
- null,
- returnType,
- identifier3(identifier),
- formalParameterList(parameters));
+ static FunctionTypedFormalParameter functionTypedFormalParameter(
+ TypeName returnType, String identifier,
+ [List<FormalParameter> parameters]) => new FunctionTypedFormalParameter(
+ null, null, returnType, identifier3(identifier),
+ formalParameterList(parameters));
static HideCombinator hideCombinator(List<SimpleIdentifier> identifiers) =>
new HideCombinator(TokenFactory.tokenFromString("hide"), identifiers);
static HideCombinator hideCombinator2(List<String> identifiers) =>
new HideCombinator(
- TokenFactory.tokenFromString("hide"),
- identifierList(identifiers));
+ TokenFactory.tokenFromString("hide"), identifierList(identifiers));
- static PrefixedIdentifier identifier(SimpleIdentifier prefix,
- SimpleIdentifier identifier) =>
+ static PrefixedIdentifier identifier(
+ SimpleIdentifier prefix, SimpleIdentifier identifier) =>
new PrefixedIdentifier(
- prefix,
- TokenFactory.tokenFromType(TokenType.PERIOD),
- identifier);
+ prefix, TokenFactory.tokenFromType(TokenType.PERIOD), identifier);
- static SimpleIdentifier identifier3(String lexeme) =>
- new SimpleIdentifier(
- TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, lexeme));
+ static SimpleIdentifier identifier3(String lexeme) => new SimpleIdentifier(
+ TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, lexeme));
- static PrefixedIdentifier identifier4(String prefix,
- SimpleIdentifier identifier) =>
- new PrefixedIdentifier(
- identifier3(prefix),
- TokenFactory.tokenFromType(TokenType.PERIOD),
- identifier);
+ static PrefixedIdentifier identifier4(
+ String prefix, SimpleIdentifier identifier) => new PrefixedIdentifier(
+ identifier3(prefix), TokenFactory.tokenFromType(TokenType.PERIOD),
+ identifier);
static PrefixedIdentifier identifier5(String prefix, String identifier) =>
- new PrefixedIdentifier(
- identifier3(prefix),
+ new PrefixedIdentifier(identifier3(prefix),
TokenFactory.tokenFromType(TokenType.PERIOD),
identifier3(identifier));
@@ -595,131 +461,113 @@
if (identifiers == null) {
return null;
}
- return identifiers.map(
- (String identifier) => identifier3(identifier)).toList();
+ return identifiers
+ .map((String identifier) => identifier3(identifier))
+ .toList();
}
- static IfStatement ifStatement(Expression condition,
- Statement thenStatement) =>
+ static IfStatement ifStatement(
+ Expression condition, Statement thenStatement) =>
ifStatement2(condition, thenStatement, null);
static IfStatement ifStatement2(Expression condition, Statement thenStatement,
- Statement elseStatement) =>
- new IfStatement(
- TokenFactory.tokenFromKeyword(Keyword.IF),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- condition,
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
- thenStatement,
- elseStatement == null ? null : TokenFactory.tokenFromKeyword(Keyword.ELSE),
- elseStatement);
+ Statement elseStatement) => new IfStatement(
+ TokenFactory.tokenFromKeyword(Keyword.IF),
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN), condition,
+ TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), thenStatement,
+ elseStatement == null
+ ? null
+ : TokenFactory.tokenFromKeyword(Keyword.ELSE), elseStatement);
static ImplementsClause implementsClause(List<TypeName> types) =>
- new ImplementsClause(TokenFactory.tokenFromKeyword(Keyword.IMPLEMENTS), types);
+ new ImplementsClause(
+ TokenFactory.tokenFromKeyword(Keyword.IMPLEMENTS), types);
- static ImportDirective importDirective(List<Annotation> metadata, String uri,
- bool isDeferred, String prefix, [List<Combinator> combinators]) =>
- new ImportDirective(
- null,
- metadata,
- TokenFactory.tokenFromKeyword(Keyword.IMPORT),
- string2(uri),
- !isDeferred ? null : TokenFactory.tokenFromKeyword(Keyword.DEFERRED),
- prefix == null ? null : TokenFactory.tokenFromKeyword(Keyword.AS),
- prefix == null ? null : identifier3(prefix),
- combinators,
- TokenFactory.tokenFromType(TokenType.SEMICOLON));
+ static ImportDirective importDirective(
+ List<Annotation> metadata, String uri, bool isDeferred, String prefix,
+ [List<Combinator> combinators]) => new ImportDirective(null, metadata,
+ TokenFactory.tokenFromKeyword(Keyword.IMPORT), string2(uri),
+ !isDeferred ? null : TokenFactory.tokenFromKeyword(Keyword.DEFERRED),
+ prefix == null ? null : TokenFactory.tokenFromKeyword(Keyword.AS),
+ prefix == null ? null : identifier3(prefix), combinators,
+ TokenFactory.tokenFromType(TokenType.SEMICOLON));
- static ImportDirective importDirective2(String uri, bool isDeferred,
- String prefix, [List<Combinator> combinators]) =>
+ static ImportDirective importDirective2(
+ String uri, bool isDeferred, String prefix,
+ [List<Combinator> combinators]) =>
importDirective(null, uri, isDeferred, prefix, combinators);
static ImportDirective importDirective3(String uri, String prefix,
- [List<Combinator> combinators]) =>
+ [List<Combinator> combinators]) =>
importDirective(null, uri, false, prefix, combinators);
static IndexExpression indexExpression(Expression array, Expression index) =>
- new IndexExpression.forTarget(
- array,
- TokenFactory.tokenFromType(TokenType.OPEN_SQUARE_BRACKET),
- index,
+ new IndexExpression.forTarget(array,
+ TokenFactory.tokenFromType(TokenType.OPEN_SQUARE_BRACKET), index,
TokenFactory.tokenFromType(TokenType.CLOSE_SQUARE_BRACKET));
- static InstanceCreationExpression instanceCreationExpression(Keyword keyword,
- ConstructorName name, [List<Expression> arguments]) =>
- new InstanceCreationExpression(
- keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
- name,
- argumentList(arguments));
+ static InstanceCreationExpression instanceCreationExpression(
+ Keyword keyword, ConstructorName name,
+ [List<Expression> arguments]) => new InstanceCreationExpression(
+ keyword == null ? null : TokenFactory.tokenFromKeyword(keyword), name,
+ argumentList(arguments));
- static InstanceCreationExpression instanceCreationExpression2(Keyword keyword,
- TypeName type, [List<Expression> arguments]) =>
+ static InstanceCreationExpression instanceCreationExpression2(
+ Keyword keyword, TypeName type, [List<Expression> arguments]) =>
instanceCreationExpression3(keyword, type, null, arguments);
- static InstanceCreationExpression instanceCreationExpression3(Keyword keyword,
- TypeName type, String identifier, [List<Expression> arguments]) =>
- instanceCreationExpression(
- keyword,
- new ConstructorName(
- type,
- identifier == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
- identifier == null ? null : identifier3(identifier)),
- arguments);
+ static InstanceCreationExpression instanceCreationExpression3(
+ Keyword keyword, TypeName type, String identifier,
+ [List<Expression> arguments]) => instanceCreationExpression(keyword,
+ new ConstructorName(type, identifier == null
+ ? null
+ : TokenFactory.tokenFromType(TokenType.PERIOD),
+ identifier == null ? null : identifier3(identifier)), arguments);
- static IntegerLiteral integer(int value) =>
- new IntegerLiteral(
- TokenFactory.tokenFromTypeAndString(TokenType.INT, value.toString()),
- value);
+ static IntegerLiteral integer(int value) => new IntegerLiteral(
+ TokenFactory.tokenFromTypeAndString(TokenType.INT, value.toString()),
+ value);
- static InterpolationExpression
- interpolationExpression(Expression expression) =>
- new InterpolationExpression(
- TokenFactory.tokenFromType(TokenType.STRING_INTERPOLATION_EXPRESSION),
- expression,
- TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
+ static InterpolationExpression interpolationExpression(
+ Expression expression) => new InterpolationExpression(
+ TokenFactory.tokenFromType(TokenType.STRING_INTERPOLATION_EXPRESSION),
+ expression, TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
static InterpolationExpression interpolationExpression2(String identifier) =>
new InterpolationExpression(
TokenFactory.tokenFromType(TokenType.STRING_INTERPOLATION_IDENTIFIER),
- identifier3(identifier),
- null);
+ identifier3(identifier), null);
- static InterpolationString interpolationString(String contents,
- String value) =>
+ static InterpolationString interpolationString(
+ String contents, String value) =>
new InterpolationString(TokenFactory.tokenFromString(contents), value);
- static IsExpression isExpression(Expression expression, bool negated,
- TypeName type) =>
- new IsExpression(
- expression,
- TokenFactory.tokenFromKeyword(Keyword.IS),
- negated ? TokenFactory.tokenFromType(TokenType.BANG) : null,
- type);
+ static IsExpression isExpression(
+ Expression expression, bool negated, TypeName type) => new IsExpression(
+ expression, TokenFactory.tokenFromKeyword(Keyword.IS),
+ negated ? TokenFactory.tokenFromType(TokenType.BANG) : null, type);
static Label label(SimpleIdentifier label) =>
new Label(label, TokenFactory.tokenFromType(TokenType.COLON));
static Label label2(String label) => AstFactory.label(identifier3(label));
- static LabeledStatement labeledStatement(List<Label> labels,
- Statement statement) =>
+ static LabeledStatement labeledStatement(
+ List<Label> labels, Statement statement) =>
new LabeledStatement(labels, statement);
- static LibraryDirective libraryDirective(List<Annotation> metadata,
- LibraryIdentifier libraryName) =>
- new LibraryDirective(
- null,
- metadata,
- TokenFactory.tokenFromKeyword(Keyword.LIBRARY),
- libraryName,
+ static LibraryDirective libraryDirective(
+ List<Annotation> metadata, LibraryIdentifier libraryName) =>
+ new LibraryDirective(null, metadata,
+ TokenFactory.tokenFromKeyword(Keyword.LIBRARY), libraryName,
TokenFactory.tokenFromType(TokenType.SEMICOLON));
static LibraryDirective libraryDirective2(String libraryName) =>
- libraryDirective(new List<Annotation>(), libraryIdentifier2([libraryName]));
+ libraryDirective(
+ new List<Annotation>(), libraryIdentifier2([libraryName]));
- static LibraryIdentifier
- libraryIdentifier(List<SimpleIdentifier> components) =>
- new LibraryIdentifier(components);
+ static LibraryIdentifier libraryIdentifier(
+ List<SimpleIdentifier> components) => new LibraryIdentifier(components);
static LibraryIdentifier libraryIdentifier2(List<String> components) {
return new LibraryIdentifier(identifierList(components));
@@ -732,115 +580,89 @@
static ListLiteral listLiteral([List<Expression> elements]) =>
listLiteral2(null, null, elements);
- static ListLiteral listLiteral2(Keyword keyword,
- TypeArgumentList typeArguments, [List<Expression> elements]) =>
- new ListLiteral(
- keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
- typeArguments,
- TokenFactory.tokenFromType(TokenType.OPEN_SQUARE_BRACKET),
- elements,
- TokenFactory.tokenFromType(TokenType.CLOSE_SQUARE_BRACKET));
+ static ListLiteral listLiteral2(
+ Keyword keyword, TypeArgumentList typeArguments,
+ [List<Expression> elements]) => new ListLiteral(
+ keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
+ typeArguments, TokenFactory.tokenFromType(TokenType.OPEN_SQUARE_BRACKET),
+ elements, TokenFactory.tokenFromType(TokenType.CLOSE_SQUARE_BRACKET));
static MapLiteral mapLiteral(Keyword keyword, TypeArgumentList typeArguments,
- [List<MapLiteralEntry> entries]) =>
- new MapLiteral(
- keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
- typeArguments,
- TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
- entries,
- TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
+ [List<MapLiteralEntry> entries]) => new MapLiteral(
+ keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
+ typeArguments, TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
+ entries, TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
static MapLiteral mapLiteral2([List<MapLiteralEntry> entries]) =>
mapLiteral(null, null, entries);
static MapLiteralEntry mapLiteralEntry(String key, Expression value) =>
new MapLiteralEntry(
- string2(key),
- TokenFactory.tokenFromType(TokenType.COLON),
- value);
+ string2(key), TokenFactory.tokenFromType(TokenType.COLON), value);
static MethodDeclaration methodDeclaration(Keyword modifier,
- TypeName returnType, Keyword property, Keyword operator, SimpleIdentifier name,
- FormalParameterList parameters) =>
- new MethodDeclaration(
- null,
- null,
- TokenFactory.tokenFromKeyword(Keyword.EXTERNAL),
- modifier == null ? null : TokenFactory.tokenFromKeyword(modifier),
- returnType,
- property == null ? null : TokenFactory.tokenFromKeyword(property),
- operator == null ? null : TokenFactory.tokenFromKeyword(operator),
- name,
- parameters,
- emptyFunctionBody());
+ TypeName returnType, Keyword property, Keyword operator,
+ SimpleIdentifier name,
+ FormalParameterList parameters) => new MethodDeclaration(null, null,
+ TokenFactory.tokenFromKeyword(Keyword.EXTERNAL),
+ modifier == null ? null : TokenFactory.tokenFromKeyword(modifier),
+ returnType,
+ property == null ? null : TokenFactory.tokenFromKeyword(property),
+ operator == null ? null : TokenFactory.tokenFromKeyword(operator), name,
+ parameters, emptyFunctionBody());
static MethodDeclaration methodDeclaration2(Keyword modifier,
- TypeName returnType, Keyword property, Keyword operator, SimpleIdentifier name,
- FormalParameterList parameters, FunctionBody body) =>
- new MethodDeclaration(
- null,
- null,
- null,
- modifier == null ? null : TokenFactory.tokenFromKeyword(modifier),
- returnType,
- property == null ? null : TokenFactory.tokenFromKeyword(property),
- operator == null ? null : TokenFactory.tokenFromKeyword(operator),
- name,
- parameters,
- body);
+ TypeName returnType, Keyword property, Keyword operator,
+ SimpleIdentifier name, FormalParameterList parameters,
+ FunctionBody body) => new MethodDeclaration(null, null, null,
+ modifier == null ? null : TokenFactory.tokenFromKeyword(modifier),
+ returnType,
+ property == null ? null : TokenFactory.tokenFromKeyword(property),
+ operator == null ? null : TokenFactory.tokenFromKeyword(operator), name,
+ parameters, body);
static MethodInvocation methodInvocation(Expression target, String methodName,
- [List<Expression> arguments]) =>
- new MethodInvocation(
- target,
- target == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
- identifier3(methodName),
- argumentList(arguments));
+ [List<Expression> arguments]) => new MethodInvocation(target,
+ target == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
+ identifier3(methodName), argumentList(arguments));
static MethodInvocation methodInvocation2(String methodName,
- [List<Expression> arguments]) =>
+ [List<Expression> arguments]) =>
methodInvocation(null, methodName, arguments);
static NamedExpression namedExpression(Label label, Expression expression) =>
new NamedExpression(label, expression);
- static NamedExpression namedExpression2(String label,
- Expression expression) =>
+ static NamedExpression namedExpression2(
+ String label, Expression expression) =>
namedExpression(label2(label), expression);
- static DefaultFormalParameter
- namedFormalParameter(NormalFormalParameter parameter, Expression expression) =>
- new DefaultFormalParameter(
- parameter,
- ParameterKind.NAMED,
- expression == null ? null : TokenFactory.tokenFromType(TokenType.COLON),
- expression);
+ static DefaultFormalParameter namedFormalParameter(
+ NormalFormalParameter parameter, Expression expression) =>
+ new DefaultFormalParameter(parameter, ParameterKind.NAMED,
+ expression == null
+ ? null
+ : TokenFactory.tokenFromType(TokenType.COLON), expression);
- static NativeClause nativeClause(String nativeCode) =>
- new NativeClause(TokenFactory.tokenFromString("native"), string2(nativeCode));
+ static NativeClause nativeClause(String nativeCode) => new NativeClause(
+ TokenFactory.tokenFromString("native"), string2(nativeCode));
static NativeFunctionBody nativeFunctionBody(String nativeMethodName) =>
- new NativeFunctionBody(
- TokenFactory.tokenFromString("native"),
+ new NativeFunctionBody(TokenFactory.tokenFromString("native"),
string2(nativeMethodName),
TokenFactory.tokenFromType(TokenType.SEMICOLON));
static NullLiteral nullLiteral() =>
new NullLiteral(TokenFactory.tokenFromKeyword(Keyword.NULL));
- static ParenthesizedExpression
- parenthesizedExpression(Expression expression) =>
- new ParenthesizedExpression(
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- expression,
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN));
+ static ParenthesizedExpression parenthesizedExpression(
+ Expression expression) => new ParenthesizedExpression(
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN), expression,
+ TokenFactory.tokenFromType(TokenType.CLOSE_PAREN));
static PartDirective partDirective(List<Annotation> metadata, String url) =>
- new PartDirective(
- null,
- metadata,
- TokenFactory.tokenFromKeyword(Keyword.PART),
- string2(url),
+ new PartDirective(null, metadata,
+ TokenFactory.tokenFromKeyword(Keyword.PART), string2(url),
TokenFactory.tokenFromType(TokenType.SEMICOLON));
static PartDirective partDirective2(String url) =>
@@ -849,57 +671,45 @@
static PartOfDirective partOfDirective(LibraryIdentifier libraryName) =>
partOfDirective2(new List<Annotation>(), libraryName);
- static PartOfDirective partOfDirective2(List<Annotation> metadata,
- LibraryIdentifier libraryName) =>
- new PartOfDirective(
- null,
- metadata,
+ static PartOfDirective partOfDirective2(
+ List<Annotation> metadata, LibraryIdentifier libraryName) =>
+ new PartOfDirective(null, metadata,
TokenFactory.tokenFromKeyword(Keyword.PART),
- TokenFactory.tokenFromString("of"),
- libraryName,
+ TokenFactory.tokenFromString("of"), libraryName,
TokenFactory.tokenFromType(TokenType.SEMICOLON));
- static DefaultFormalParameter
- positionalFormalParameter(NormalFormalParameter parameter,
- Expression expression) =>
- new DefaultFormalParameter(
- parameter,
- ParameterKind.POSITIONAL,
+ static DefaultFormalParameter positionalFormalParameter(
+ NormalFormalParameter parameter, Expression expression) =>
+ new DefaultFormalParameter(parameter, ParameterKind.POSITIONAL,
expression == null ? null : TokenFactory.tokenFromType(TokenType.EQ),
expression);
- static PostfixExpression postfixExpression(Expression expression,
- TokenType operator) =>
+ static PostfixExpression postfixExpression(
+ Expression expression, TokenType operator) =>
new PostfixExpression(expression, TokenFactory.tokenFromType(operator));
- static PrefixExpression prefixExpression(TokenType operator,
- Expression expression) =>
+ static PrefixExpression prefixExpression(
+ TokenType operator, Expression expression) =>
new PrefixExpression(TokenFactory.tokenFromType(operator), expression);
- static PropertyAccess propertyAccess(Expression target,
- SimpleIdentifier propertyName) =>
- new PropertyAccess(
- target,
- TokenFactory.tokenFromType(TokenType.PERIOD),
- propertyName);
+ static PropertyAccess propertyAccess(
+ Expression target, SimpleIdentifier propertyName) => new PropertyAccess(
+ target, TokenFactory.tokenFromType(TokenType.PERIOD), propertyName);
- static PropertyAccess propertyAccess2(Expression target,
- String propertyName) =>
- new PropertyAccess(
- target,
- TokenFactory.tokenFromType(TokenType.PERIOD),
- identifier3(propertyName));
+ static PropertyAccess propertyAccess2(
+ Expression target, String propertyName) => new PropertyAccess(target,
+ TokenFactory.tokenFromType(TokenType.PERIOD), identifier3(propertyName));
- static RedirectingConstructorInvocation
- redirectingConstructorInvocation([List<Expression> arguments]) =>
+ static RedirectingConstructorInvocation redirectingConstructorInvocation(
+ [List<Expression> arguments]) =>
redirectingConstructorInvocation2(null, arguments);
- static RedirectingConstructorInvocation
- redirectingConstructorInvocation2(String constructorName,
- [List<Expression> arguments]) =>
+ static RedirectingConstructorInvocation redirectingConstructorInvocation2(
+ String constructorName, [List<Expression> arguments]) =>
new RedirectingConstructorInvocation(
- TokenFactory.tokenFromKeyword(Keyword.THIS),
- constructorName == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
+ TokenFactory.tokenFromKeyword(Keyword.THIS), constructorName == null
+ ? null
+ : TokenFactory.tokenFromType(TokenType.PERIOD),
constructorName == null ? null : identifier3(constructorName),
argumentList(arguments));
@@ -909,10 +719,8 @@
static ReturnStatement returnStatement() => returnStatement2(null);
static ReturnStatement returnStatement2(Expression expression) =>
- new ReturnStatement(
- TokenFactory.tokenFromKeyword(Keyword.RETURN),
- expression,
- TokenFactory.tokenFromType(TokenType.SEMICOLON));
+ new ReturnStatement(TokenFactory.tokenFromKeyword(Keyword.RETURN),
+ expression, TokenFactory.tokenFromType(TokenType.SEMICOLON));
static ScriptTag scriptTag(String scriptTag) =>
new ScriptTag(TokenFactory.tokenFromString(scriptTag));
@@ -922,84 +730,68 @@
static ShowCombinator showCombinator2(List<String> identifiers) =>
new ShowCombinator(
- TokenFactory.tokenFromString("show"),
- identifierList(identifiers));
+ TokenFactory.tokenFromString("show"), identifierList(identifiers));
- static SimpleFormalParameter simpleFormalParameter(Keyword keyword,
- String parameterName) =>
+ static SimpleFormalParameter simpleFormalParameter(
+ Keyword keyword, String parameterName) =>
simpleFormalParameter2(keyword, null, parameterName);
- static SimpleFormalParameter simpleFormalParameter2(Keyword keyword,
- TypeName type, String parameterName) =>
- new SimpleFormalParameter(
- null,
- null,
- keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
- type,
+ static SimpleFormalParameter simpleFormalParameter2(
+ Keyword keyword, TypeName type, String parameterName) =>
+ new SimpleFormalParameter(null, null,
+ keyword == null ? null : TokenFactory.tokenFromKeyword(keyword), type,
identifier3(parameterName));
static SimpleFormalParameter simpleFormalParameter3(String parameterName) =>
simpleFormalParameter2(null, null, parameterName);
- static SimpleFormalParameter simpleFormalParameter4(TypeName type,
- String parameterName) =>
+ static SimpleFormalParameter simpleFormalParameter4(
+ TypeName type, String parameterName) =>
simpleFormalParameter2(null, type, parameterName);
static StringInterpolation string([List<InterpolationElement> elements]) =>
new StringInterpolation(elements);
- static SimpleStringLiteral string2(String content) =>
- new SimpleStringLiteral(TokenFactory.tokenFromString("'$content'"), content);
+ static SimpleStringLiteral string2(String content) => new SimpleStringLiteral(
+ TokenFactory.tokenFromString("'$content'"), content);
- static SuperConstructorInvocation
- superConstructorInvocation([List<Expression> arguments]) =>
+ static SuperConstructorInvocation superConstructorInvocation(
+ [List<Expression> arguments]) =>
superConstructorInvocation2(null, arguments);
static SuperConstructorInvocation superConstructorInvocation2(String name,
- [List<Expression> arguments]) =>
- new SuperConstructorInvocation(
- TokenFactory.tokenFromKeyword(Keyword.SUPER),
- name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
- name == null ? null : identifier3(name),
- argumentList(arguments));
+ [List<Expression> arguments]) => new SuperConstructorInvocation(
+ TokenFactory.tokenFromKeyword(Keyword.SUPER),
+ name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
+ name == null ? null : identifier3(name), argumentList(arguments));
static SuperExpression superExpression() =>
new SuperExpression(TokenFactory.tokenFromKeyword(Keyword.SUPER));
- static SwitchCase switchCase(Expression expression,
- List<Statement> statements) =>
+ static SwitchCase switchCase(
+ Expression expression, List<Statement> statements) =>
switchCase2(new List<Label>(), expression, statements);
static SwitchCase switchCase2(List<Label> labels, Expression expression,
- List<Statement> statements) =>
- new SwitchCase(
- labels,
- TokenFactory.tokenFromKeyword(Keyword.CASE),
- expression,
- TokenFactory.tokenFromType(TokenType.COLON),
- statements);
+ List<Statement> statements) => new SwitchCase(labels,
+ TokenFactory.tokenFromKeyword(Keyword.CASE), expression,
+ TokenFactory.tokenFromType(TokenType.COLON), statements);
- static SwitchDefault switchDefault(List<Label> labels,
- List<Statement> statements) =>
- new SwitchDefault(
- labels,
- TokenFactory.tokenFromKeyword(Keyword.DEFAULT),
- TokenFactory.tokenFromType(TokenType.COLON),
- statements);
+ static SwitchDefault switchDefault(
+ List<Label> labels, List<Statement> statements) => new SwitchDefault(
+ labels, TokenFactory.tokenFromKeyword(Keyword.DEFAULT),
+ TokenFactory.tokenFromType(TokenType.COLON), statements);
static SwitchDefault switchDefault2(List<Statement> statements) =>
switchDefault(new List<Label>(), statements);
- static SwitchStatement switchStatement(Expression expression,
- List<SwitchMember> members) =>
- new SwitchStatement(
- TokenFactory.tokenFromKeyword(Keyword.SWITCH),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- expression,
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
- TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
- members,
- TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
+ static SwitchStatement switchStatement(
+ Expression expression, List<SwitchMember> members) => new SwitchStatement(
+ TokenFactory.tokenFromKeyword(Keyword.SWITCH),
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN), expression,
+ TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
+ TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET), members,
+ TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
static SymbolLiteral symbolLiteral(List<String> components) {
List<Token> identifierList = new List<Token>();
@@ -1008,23 +800,18 @@
TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, component));
}
return new SymbolLiteral(
- TokenFactory.tokenFromType(TokenType.HASH),
- identifierList);
+ TokenFactory.tokenFromType(TokenType.HASH), identifierList);
}
- static BlockFunctionBody
- syncBlockFunctionBody([List<Statement> statements]) =>
- new BlockFunctionBody(
- TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "sync"),
- null,
- block(statements));
+ static BlockFunctionBody syncBlockFunctionBody(
+ [List<Statement> statements]) => new BlockFunctionBody(
+ TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "sync"), null,
+ block(statements));
- static BlockFunctionBody
- syncGeneratorBlockFunctionBody([List<Statement> statements]) =>
- new BlockFunctionBody(
- TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "sync"),
- TokenFactory.tokenFromType(TokenType.STAR),
- block(statements));
+ static BlockFunctionBody syncGeneratorBlockFunctionBody(
+ [List<Statement> statements]) => new BlockFunctionBody(
+ TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "sync"),
+ TokenFactory.tokenFromType(TokenType.STAR), block(statements));
static ThisExpression thisExpression() =>
new ThisExpression(TokenFactory.tokenFromKeyword(Keyword.THIS));
@@ -1032,62 +819,48 @@
static ThrowExpression throwExpression() => throwExpression2(null);
static ThrowExpression throwExpression2(Expression expression) =>
- new ThrowExpression(TokenFactory.tokenFromKeyword(Keyword.THROW), expression);
+ new ThrowExpression(
+ TokenFactory.tokenFromKeyword(Keyword.THROW), expression);
- static TopLevelVariableDeclaration
- topLevelVariableDeclaration(Keyword keyword, TypeName type,
- List<VariableDeclaration> variables) =>
- new TopLevelVariableDeclaration(
- null,
- null,
- variableDeclarationList(keyword, type, variables),
- TokenFactory.tokenFromType(TokenType.SEMICOLON));
+ static TopLevelVariableDeclaration topLevelVariableDeclaration(
+ Keyword keyword, TypeName type,
+ List<VariableDeclaration> variables) => new TopLevelVariableDeclaration(
+ null, null, variableDeclarationList(keyword, type, variables),
+ TokenFactory.tokenFromType(TokenType.SEMICOLON));
- static TopLevelVariableDeclaration
- topLevelVariableDeclaration2(Keyword keyword,
- List<VariableDeclaration> variables) =>
- new TopLevelVariableDeclaration(
- null,
- null,
+ static TopLevelVariableDeclaration topLevelVariableDeclaration2(
+ Keyword keyword, List<VariableDeclaration> variables) =>
+ new TopLevelVariableDeclaration(null, null,
variableDeclarationList(keyword, null, variables),
TokenFactory.tokenFromType(TokenType.SEMICOLON));
static TryStatement tryStatement(Block body, Block finallyClause) =>
tryStatement3(body, new List<CatchClause>(), finallyClause);
- static TryStatement tryStatement2(Block body,
- List<CatchClause> catchClauses) =>
+ static TryStatement tryStatement2(
+ Block body, List<CatchClause> catchClauses) =>
tryStatement3(body, catchClauses, null);
- static TryStatement tryStatement3(Block body, List<CatchClause> catchClauses,
- Block finallyClause) =>
- new TryStatement(
- TokenFactory.tokenFromKeyword(Keyword.TRY),
- body,
- catchClauses,
- finallyClause == null ? null : TokenFactory.tokenFromKeyword(Keyword.FINALLY),
- finallyClause);
+ static TryStatement tryStatement3(
+ Block body, List<CatchClause> catchClauses, Block finallyClause) =>
+ new TryStatement(TokenFactory.tokenFromKeyword(Keyword.TRY), body,
+ catchClauses, finallyClause == null
+ ? null
+ : TokenFactory.tokenFromKeyword(Keyword.FINALLY), finallyClause);
static FunctionTypeAlias typeAlias(TypeName returnType, String name,
- TypeParameterList typeParameters, FormalParameterList parameters) =>
- new FunctionTypeAlias(
- null,
- null,
- TokenFactory.tokenFromKeyword(Keyword.TYPEDEF),
- returnType,
- identifier3(name),
- typeParameters,
- parameters,
+ TypeParameterList typeParameters, FormalParameterList parameters) =>
+ new FunctionTypeAlias(null, null,
+ TokenFactory.tokenFromKeyword(Keyword.TYPEDEF), returnType,
+ identifier3(name), typeParameters, parameters,
TokenFactory.tokenFromType(TokenType.SEMICOLON));
static TypeArgumentList typeArgumentList(List<TypeName> typeNames) {
if (typeNames == null || typeNames.length == 0) {
return null;
}
- return new TypeArgumentList(
- TokenFactory.tokenFromType(TokenType.LT),
- typeNames,
- TokenFactory.tokenFromType(TokenType.GT));
+ return new TypeArgumentList(TokenFactory.tokenFromType(TokenType.LT),
+ typeNames, TokenFactory.tokenFromType(TokenType.GT));
}
/**
@@ -1115,12 +888,8 @@
new TypeParameter(null, null, identifier3(name), null, null);
static TypeParameter typeParameter2(String name, TypeName bound) =>
- new TypeParameter(
- null,
- null,
- identifier3(name),
- TokenFactory.tokenFromKeyword(Keyword.EXTENDS),
- bound);
+ new TypeParameter(null, null, identifier3(name),
+ TokenFactory.tokenFromKeyword(Keyword.EXTENDS), bound);
static TypeParameterList typeParameterList([List<String> typeNames]) {
List<TypeParameter> typeParameters = null;
@@ -1130,56 +899,42 @@
typeParameters.add(typeParameter(typeName));
}
}
- return new TypeParameterList(
- TokenFactory.tokenFromType(TokenType.LT),
- typeParameters,
- TokenFactory.tokenFromType(TokenType.GT));
+ return new TypeParameterList(TokenFactory.tokenFromType(TokenType.LT),
+ typeParameters, TokenFactory.tokenFromType(TokenType.GT));
}
static VariableDeclaration variableDeclaration(String name) =>
new VariableDeclaration(null, null, identifier3(name), null, null);
- static VariableDeclaration variableDeclaration2(String name,
- Expression initializer) =>
- new VariableDeclaration(
- null,
- null,
- identifier3(name),
- TokenFactory.tokenFromType(TokenType.EQ),
- initializer);
+ static VariableDeclaration variableDeclaration2(
+ String name, Expression initializer) => new VariableDeclaration(null,
+ null, identifier3(name), TokenFactory.tokenFromType(TokenType.EQ),
+ initializer);
static VariableDeclarationList variableDeclarationList(Keyword keyword,
- TypeName type, List<VariableDeclaration> variables) =>
- new VariableDeclarationList(
- null,
- null,
- keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
- type,
+ TypeName type, List<VariableDeclaration> variables) =>
+ new VariableDeclarationList(null, null,
+ keyword == null ? null : TokenFactory.tokenFromKeyword(keyword), type,
variables);
- static VariableDeclarationList variableDeclarationList2(Keyword keyword,
- List<VariableDeclaration> variables) =>
+ static VariableDeclarationList variableDeclarationList2(
+ Keyword keyword, List<VariableDeclaration> variables) =>
variableDeclarationList(keyword, null, variables);
- static VariableDeclarationStatement
- variableDeclarationStatement(Keyword keyword, TypeName type,
- List<VariableDeclaration> variables) =>
- new VariableDeclarationStatement(
- variableDeclarationList(keyword, type, variables),
- TokenFactory.tokenFromType(TokenType.SEMICOLON));
+ static VariableDeclarationStatement variableDeclarationStatement(
+ Keyword keyword, TypeName type,
+ List<VariableDeclaration> variables) => new VariableDeclarationStatement(
+ variableDeclarationList(keyword, type, variables),
+ TokenFactory.tokenFromType(TokenType.SEMICOLON));
- static VariableDeclarationStatement
- variableDeclarationStatement2(Keyword keyword,
- List<VariableDeclaration> variables) =>
+ static VariableDeclarationStatement variableDeclarationStatement2(
+ Keyword keyword, List<VariableDeclaration> variables) =>
variableDeclarationStatement(keyword, null, variables);
static WhileStatement whileStatement(Expression condition, Statement body) =>
- new WhileStatement(
- TokenFactory.tokenFromKeyword(Keyword.WHILE),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- condition,
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
- body);
+ new WhileStatement(TokenFactory.tokenFromKeyword(Keyword.WHILE),
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN), condition,
+ TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), body);
static WithClause withClause(List<TypeName> types) =>
new WithClause(TokenFactory.tokenFromKeyword(Keyword.WITH), types);
@@ -1187,14 +942,11 @@
static YieldStatement yieldEachStatement(Expression expression) =>
new YieldStatement(
TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "yield"),
- TokenFactory.tokenFromType(TokenType.STAR),
- expression,
+ TokenFactory.tokenFromType(TokenType.STAR), expression,
TokenFactory.tokenFromType(TokenType.SEMICOLON));
- static YieldStatement yieldStatement(Expression expression) =>
- new YieldStatement(
- TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "yield"),
- null,
- expression,
- TokenFactory.tokenFromType(TokenType.SEMICOLON));
+ static YieldStatement yieldStatement(
+ Expression expression) => new YieldStatement(
+ TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "yield"), null,
+ expression, TokenFactory.tokenFromType(TokenType.SEMICOLON));
}
diff --git a/pkg/analyzer/lib/src/generated/testing/element_factory.dart b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
index 17f814e..150d2fa 100644
--- a/pkg/analyzer/lib/src/generated/testing/element_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
@@ -38,8 +38,9 @@
static InterfaceType get objectType => object.type;
- static ClassElementImpl classElement(String typeName,
- InterfaceType superclassType, [List<String> parameterNames]) {
+ static ClassElementImpl classElement(
+ String typeName, InterfaceType superclassType,
+ [List<String> parameterNames]) {
ClassElementImpl element = new ClassElementImpl(typeName, 0);
element.supertype = superclassType;
InterfaceTypeImpl type = new InterfaceTypeImpl.con1(element);
@@ -66,7 +67,7 @@
}
static ClassElementImpl classElement2(String typeName,
- [List<String> parameterNames]) =>
+ [List<String> parameterNames]) =>
classElement(typeName, objectType, parameterNames);
static CompilationUnitElementImpl compilationUnit(String fileName) {
@@ -76,12 +77,13 @@
return unit;
}
- static ConstructorElementImpl constructorElement(ClassElement definingClass,
- String name, bool isConst, [List<DartType> argumentTypes]) {
+ static ConstructorElementImpl constructorElement(
+ ClassElement definingClass, String name, bool isConst,
+ [List<DartType> argumentTypes]) {
DartType type = definingClass.type;
- ConstructorElementImpl constructor = name == null ?
- new ConstructorElementImpl("", -1) :
- new ConstructorElementImpl(name, 0);
+ ConstructorElementImpl constructor = name == null
+ ? new ConstructorElementImpl("", -1)
+ : new ConstructorElementImpl(name, 0);
constructor.const2 = isConst;
if (argumentTypes != null) {
int count = argumentTypes.length;
@@ -102,12 +104,14 @@
return constructor;
}
- static ConstructorElementImpl constructorElement2(ClassElement definingClass,
- String name, [List<DartType> argumentTypes]) =>
+ static ConstructorElementImpl constructorElement2(
+ ClassElement definingClass, String name,
+ [List<DartType> argumentTypes]) =>
constructorElement(definingClass, name, false, argumentTypes);
- static ClassElementImpl enumElement(TypeProvider typeProvider,
- String enumName, [List<String> constantNames]) {
+ static ClassElementImpl enumElement(
+ TypeProvider typeProvider, String enumName,
+ [List<String> constantNames]) {
//
// Build the enum.
//
@@ -176,8 +180,8 @@
return spec;
}
- static FieldElementImpl fieldElement(String name, bool isStatic, bool isFinal,
- bool isConst, DartType type) {
+ static FieldElementImpl fieldElement(
+ String name, bool isStatic, bool isFinal, bool isConst, DartType type) {
FieldElementImpl field = new FieldElementImpl(name, 0);
field.const3 = isConst;
field.final2 = isFinal;
@@ -198,8 +202,9 @@
setter.setter = true;
setter.synthetic = true;
setter.variable = field;
- setter.parameters =
- <ParameterElement>[requiredParameter2("_$name", type)];
+ setter.parameters = <ParameterElement>[
+ requiredParameter2("_$name", type)
+ ];
setter.returnType = VoidTypeImpl.instance;
setter.type = new FunctionTypeImpl.con1(setter);
field.setter = setter;
@@ -207,15 +212,14 @@
return field;
}
- static FieldFormalParameterElementImpl
- fieldFormalParameter(Identifier name) =>
- new FieldFormalParameterElementImpl(name);
+ static FieldFormalParameterElementImpl fieldFormalParameter(
+ Identifier name) => new FieldFormalParameterElementImpl(name);
static FunctionElementImpl functionElement(String functionName) =>
functionElement4(functionName, null, null, null, null);
- static FunctionElementImpl functionElement2(String functionName,
- ClassElement returnElement) =>
+ static FunctionElementImpl functionElement2(
+ String functionName, ClassElement returnElement) =>
functionElement3(functionName, returnElement, null, null);
static FunctionElementImpl functionElement3(String functionName,
@@ -295,18 +299,19 @@
return functionElement;
}
- static FunctionElementImpl functionElement5(String functionName,
- List<ClassElement> normalParameters) =>
+ static FunctionElementImpl functionElement5(
+ String functionName, List<ClassElement> normalParameters) =>
functionElement3(functionName, null, normalParameters, null);
static FunctionElementImpl functionElement6(String functionName,
- List<ClassElement> normalParameters, List<ClassElement> optionalParameters) =>
- functionElement3(functionName, null, normalParameters, optionalParameters);
+ List<ClassElement> normalParameters,
+ List<ClassElement> optionalParameters) => functionElement3(
+ functionName, null, normalParameters, optionalParameters);
static FunctionElementImpl functionElement7(String functionName,
List<ClassElement> normalParameters, List<String> names,
- List<ClassElement> namedParameters) =>
- functionElement4(functionName, null, normalParameters, names, namedParameters);
+ List<ClassElement> namedParameters) => functionElement4(
+ functionName, null, normalParameters, names, namedParameters);
static FunctionElementImpl functionElementWithParameters(String functionName,
DartType returnType, List<ParameterElement> parameters) {
@@ -320,8 +325,8 @@
return functionElement;
}
- static PropertyAccessorElementImpl getterElement(String name, bool isStatic,
- DartType type) {
+ static PropertyAccessorElementImpl getterElement(
+ String name, bool isStatic, DartType type) {
FieldElementImpl field = new FieldElementImpl(name, -1);
field.static = isStatic;
field.synthetic = true;
@@ -344,9 +349,9 @@
return unit;
}
- static ImportElementImpl importFor(LibraryElement importedLibrary,
- PrefixElement prefix, [List<NamespaceCombinator> combinators =
- NamespaceCombinator.EMPTY_ARRAY]) {
+ static ImportElementImpl importFor(
+ LibraryElement importedLibrary, PrefixElement prefix,
+ [List<NamespaceCombinator> combinators = NamespaceCombinator.EMPTY_ARRAY]) {
ImportElementImpl spec = new ImportElementImpl(0);
spec.importedLibrary = importedLibrary;
spec.prefix = prefix;
@@ -354,8 +359,8 @@
return spec;
}
- static LibraryElementImpl library(AnalysisContext context,
- String libraryName) {
+ static LibraryElementImpl library(
+ AnalysisContext context, String libraryName) {
String fileName = "/$libraryName.dart";
CompilationUnitElementImpl unit = compilationUnit(fileName);
LibraryElementImpl library =
@@ -446,8 +451,8 @@
return parameter;
}
- static PropertyAccessorElementImpl setterElement(String name, bool isStatic,
- DartType type) {
+ static PropertyAccessorElementImpl setterElement(
+ String name, bool isStatic, DartType type) {
FieldElementImpl field = new FieldElementImpl(name, -1);
field.static = isStatic;
field.synthetic = true;
@@ -479,8 +484,8 @@
static TopLevelVariableElementImpl topLevelVariableElement2(String name) =>
topLevelVariableElement3(name, false, false, null);
- static TopLevelVariableElementImpl topLevelVariableElement3(String name,
- bool isConst, bool isFinal, DartType type) {
+ static TopLevelVariableElementImpl topLevelVariableElement3(
+ String name, bool isConst, bool isFinal, DartType type) {
TopLevelVariableElementImpl variable =
new TopLevelVariableElementImpl(name, -1);
variable.const3 = isConst;
@@ -502,8 +507,9 @@
setter.static = true;
setter.synthetic = true;
setter.variable = variable;
- setter.parameters =
- <ParameterElement>[requiredParameter2("_$name", type)];
+ setter.parameters = <ParameterElement>[
+ requiredParameter2("_$name", type)
+ ];
setter.returnType = VoidTypeImpl.instance;
setter.type = new FunctionTypeImpl.con1(setter);
variable.setter = setter;
diff --git a/pkg/analyzer/lib/src/generated/testing/html_factory.dart b/pkg/analyzer/lib/src/generated/testing/html_factory.dart
index b833a26..a8fcb53 100644
--- a/pkg/analyzer/lib/src/generated/testing/html_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/html_factory.dart
@@ -32,17 +32,10 @@
return new Token.con1(TokenType.LT, 0);
}
- static HtmlScriptTagNode scriptTag([List<XmlAttributeNode> attributes =
- XmlAttributeNode.EMPTY_LIST]) {
- return new HtmlScriptTagNode(
- ltToken(),
- stringToken("script"),
- attributes,
- sgtToken(),
- null,
- null,
- null,
- null);
+ static HtmlScriptTagNode scriptTag(
+ [List<XmlAttributeNode> attributes = XmlAttributeNode.EMPTY_LIST]) {
+ return new HtmlScriptTagNode(ltToken(), stringToken("script"), attributes,
+ sgtToken(), null, null, null, null);
}
static HtmlScriptTagNode scriptTagWithContent(String contents,
@@ -52,15 +45,8 @@
attributeEnd.setNext(contentToken);
Token contentEnd = ltsToken();
contentToken.setNext(contentEnd);
- return new HtmlScriptTagNode(
- ltToken(),
- stringToken("script"),
- attributes,
- attributeEnd,
- null,
- contentEnd,
- stringToken("script"),
- gtToken());
+ return new HtmlScriptTagNode(ltToken(), stringToken("script"), attributes,
+ attributeEnd, null, contentEnd, stringToken("script"), gtToken());
}
static Token sgtToken() {
@@ -71,16 +57,9 @@
return new Token.con2(TokenType.STRING, 0, value);
}
- static XmlTagNode tagNode(String name, [List<XmlAttributeNode> attributes =
- XmlAttributeNode.EMPTY_LIST]) {
- return new XmlTagNode(
- ltToken(),
- stringToken(name),
- attributes,
- sgtToken(),
- null,
- null,
- null,
- null);
+ static XmlTagNode tagNode(String name,
+ [List<XmlAttributeNode> attributes = XmlAttributeNode.EMPTY_LIST]) {
+ return new XmlTagNode(ltToken(), stringToken(name), attributes, sgtToken(),
+ null, null, null, null);
}
}
diff --git a/pkg/analyzer/lib/src/generated/testing/test_type_provider.dart b/pkg/analyzer/lib/src/generated/testing/test_type_provider.dart
index 0d90489..79f5448 100644
--- a/pkg/analyzer/lib/src/generated/testing/test_type_provider.dart
+++ b/pkg/analyzer/lib/src/generated/testing/test_type_provider.dart
@@ -146,11 +146,12 @@
if (_boolType == null) {
ClassElementImpl boolElement = ElementFactory.classElement2("bool");
_boolType = boolElement.type;
- ConstructorElementImpl fromEnvironment =
- ElementFactory.constructorElement(boolElement, "fromEnvironment", true);
+ ConstructorElementImpl fromEnvironment = ElementFactory
+ .constructorElement(boolElement, "fromEnvironment", true);
fromEnvironment.parameters = <ParameterElement>[
- ElementFactory.requiredParameter2("name", stringType),
- ElementFactory.namedParameter2("defaultValue", _boolType)];
+ ElementFactory.requiredParameter2("name", stringType),
+ ElementFactory.namedParameter2("defaultValue", _boolType)
+ ];
fromEnvironment.factory = true;
boolElement.constructors = <ConstructorElement>[fromEnvironment];
}
@@ -171,7 +172,9 @@
ClassElementImpl deprecatedElement =
ElementFactory.classElement2("Deprecated");
deprecatedElement.constructors = <ConstructorElement>[
- ElementFactory.constructorElement(deprecatedElement, null, true, [stringType])];
+ ElementFactory.constructorElement(
+ deprecatedElement, null, true, [stringType])
+ ];
_deprecatedType = deprecatedElement.type;
}
return _deprecatedType;
@@ -248,14 +251,11 @@
ElementFactory.classElement2("Iterable", ["E"]);
_iterableType = iterableElement.type;
DartType eType = iterableElement.typeParameters[0].type;
- _setAccessors(
- iterableElement,
- <PropertyAccessorElement>[
- ElementFactory.getterElement(
- "iterator",
- false,
- iteratorType.substitute4(<DartType>[eType])),
- ElementFactory.getterElement("last", false, eType)]);
+ _setAccessors(iterableElement, <PropertyAccessorElement>[
+ ElementFactory.getterElement(
+ "iterator", false, iteratorType.substitute4(<DartType>[eType])),
+ ElementFactory.getterElement("last", false, eType)
+ ]);
_propagateTypeArguments(iterableElement);
}
return _iterableType;
@@ -267,10 +267,9 @@
ElementFactory.classElement2("Iterator", ["E"]);
_iteratorType = iteratorElement.type;
DartType eType = iteratorElement.typeParameters[0].type;
- _setAccessors(
- iteratorElement,
- <PropertyAccessorElement>[
- ElementFactory.getterElement("current", false, eType)]);
+ _setAccessors(iteratorElement, <PropertyAccessorElement>[
+ ElementFactory.getterElement("current", false, eType)
+ ]);
_propagateTypeArguments(iteratorElement);
}
return _iteratorType;
@@ -281,21 +280,23 @@
if (_listType == null) {
ClassElementImpl listElement =
ElementFactory.classElement2("List", ["E"]);
- listElement.constructors =
- <ConstructorElement>[ElementFactory.constructorElement2(listElement, null)];
+ listElement.constructors = <ConstructorElement>[
+ ElementFactory.constructorElement2(listElement, null)
+ ];
_listType = listElement.type;
DartType eType = listElement.typeParameters[0].type;
InterfaceType iterableType =
this.iterableType.substitute4(<DartType>[eType]);
listElement.interfaces = <InterfaceType>[iterableType];
- _setAccessors(
- listElement,
- <PropertyAccessorElement>[
- ElementFactory.getterElement("length", false, intType)]);
+ _setAccessors(listElement, <PropertyAccessorElement>[
+ ElementFactory.getterElement("length", false, intType)
+ ]);
listElement.methods = <MethodElement>[
- ElementFactory.methodElement("[]", eType, [intType]),
- ElementFactory.methodElement("[]=", VoidTypeImpl.instance, [intType, eType]),
- ElementFactory.methodElement("add", VoidTypeImpl.instance, [eType])];
+ ElementFactory.methodElement("[]", eType, [intType]),
+ ElementFactory.methodElement(
+ "[]=", VoidTypeImpl.instance, [intType, eType]),
+ ElementFactory.methodElement("add", VoidTypeImpl.instance, [eType])
+ ];
_propagateTypeArguments(listElement);
}
return _listType;
@@ -309,13 +310,14 @@
_mapType = mapElement.type;
DartType kType = mapElement.typeParameters[0].type;
DartType vType = mapElement.typeParameters[1].type;
- _setAccessors(
- mapElement,
- <PropertyAccessorElement>[
- ElementFactory.getterElement("length", false, intType)]);
+ _setAccessors(mapElement, <PropertyAccessorElement>[
+ ElementFactory.getterElement("length", false, intType)
+ ]);
mapElement.methods = <MethodElement>[
- ElementFactory.methodElement("[]", vType, [objectType]),
- ElementFactory.methodElement("[]=", VoidTypeImpl.instance, [kType, vType])];
+ ElementFactory.methodElement("[]", vType, [objectType]),
+ ElementFactory.methodElement(
+ "[]=", VoidTypeImpl.instance, [kType, vType])
+ ];
_propagateTypeArguments(mapElement);
}
return _mapType;
@@ -342,17 +344,18 @@
if (_objectType == null) {
ClassElementImpl objectElement = ElementFactory.object;
_objectType = objectElement.type;
- objectElement.constructors =
- <ConstructorElement>[ElementFactory.constructorElement2(objectElement, null)];
+ objectElement.constructors = <ConstructorElement>[
+ ElementFactory.constructorElement2(objectElement, null)
+ ];
objectElement.methods = <MethodElement>[
- ElementFactory.methodElement("toString", stringType),
- ElementFactory.methodElement("==", boolType, [_objectType]),
- ElementFactory.methodElement("noSuchMethod", dynamicType, [dynamicType])];
- _setAccessors(
- objectElement,
- <PropertyAccessorElement>[
- ElementFactory.getterElement("hashCode", false, intType),
- ElementFactory.getterElement("runtimeType", false, typeType)]);
+ ElementFactory.methodElement("toString", stringType),
+ ElementFactory.methodElement("==", boolType, [_objectType]),
+ ElementFactory.methodElement("noSuchMethod", dynamicType, [dynamicType])
+ ];
+ _setAccessors(objectElement, <PropertyAccessorElement>[
+ ElementFactory.getterElement("hashCode", false, intType),
+ ElementFactory.getterElement("runtimeType", false, typeType)
+ ]);
}
return _objectType;
}
@@ -386,24 +389,23 @@
if (_stringType == null) {
_stringType = ElementFactory.classElement2("String").type;
ClassElementImpl stringElement = _stringType.element as ClassElementImpl;
- _setAccessors(
- stringElement,
- <PropertyAccessorElement>[
- ElementFactory.getterElement("isEmpty", false, boolType),
- ElementFactory.getterElement("length", false, intType),
- ElementFactory.getterElement(
- "codeUnits",
- false,
- listType.substitute4(<DartType>[intType]))]);
+ _setAccessors(stringElement, <PropertyAccessorElement>[
+ ElementFactory.getterElement("isEmpty", false, boolType),
+ ElementFactory.getterElement("length", false, intType),
+ ElementFactory.getterElement(
+ "codeUnits", false, listType.substitute4(<DartType>[intType]))
+ ]);
stringElement.methods = <MethodElement>[
- ElementFactory.methodElement("+", _stringType, [_stringType]),
- ElementFactory.methodElement("toLowerCase", _stringType),
- ElementFactory.methodElement("toUpperCase", _stringType)];
- ConstructorElementImpl fromEnvironment =
- ElementFactory.constructorElement(stringElement, "fromEnvironment", true);
+ ElementFactory.methodElement("+", _stringType, [_stringType]),
+ ElementFactory.methodElement("toLowerCase", _stringType),
+ ElementFactory.methodElement("toUpperCase", _stringType)
+ ];
+ ConstructorElementImpl fromEnvironment = ElementFactory
+ .constructorElement(stringElement, "fromEnvironment", true);
fromEnvironment.parameters = <ParameterElement>[
- ElementFactory.requiredParameter2("name", stringType),
- ElementFactory.namedParameter2("defaultValue", _stringType)];
+ ElementFactory.requiredParameter2("name", stringType),
+ ElementFactory.namedParameter2("defaultValue", _stringType)
+ ];
fromEnvironment.factory = true;
stringElement.constructors = <ConstructorElement>[fromEnvironment];
}
@@ -414,8 +416,8 @@
InterfaceType get symbolType {
if (_symbolType == null) {
ClassElementImpl symbolClass = ElementFactory.classElement2("Symbol");
- ConstructorElementImpl constructor =
- ElementFactory.constructorElement(symbolClass, null, true, [stringType]);
+ ConstructorElementImpl constructor = ElementFactory.constructorElement(
+ symbolClass, null, true, [stringType]);
constructor.factory = true;
symbolClass.constructors = <ConstructorElement>[constructor];
_symbolType = symbolClass.type;
@@ -464,65 +466,68 @@
// Add the methods.
//
numElement.methods = <MethodElement>[
- ElementFactory.methodElement("+", _numType, [_numType]),
- ElementFactory.methodElement("-", _numType, [_numType]),
- ElementFactory.methodElement("*", _numType, [_numType]),
- ElementFactory.methodElement("%", _numType, [_numType]),
- ElementFactory.methodElement("/", _doubleType, [_numType]),
- ElementFactory.methodElement("~/", _numType, [_numType]),
- ElementFactory.methodElement("-", _numType),
- ElementFactory.methodElement("remainder", _numType, [_numType]),
- ElementFactory.methodElement("<", _boolType, [_numType]),
- ElementFactory.methodElement("<=", _boolType, [_numType]),
- ElementFactory.methodElement(">", _boolType, [_numType]),
- ElementFactory.methodElement(">=", _boolType, [_numType]),
- ElementFactory.methodElement("==", _boolType, [_objectType]),
- ElementFactory.methodElement("isNaN", _boolType),
- ElementFactory.methodElement("isNegative", _boolType),
- ElementFactory.methodElement("isInfinite", _boolType),
- ElementFactory.methodElement("abs", _numType),
- ElementFactory.methodElement("floor", _numType),
- ElementFactory.methodElement("ceil", _numType),
- ElementFactory.methodElement("round", _numType),
- ElementFactory.methodElement("truncate", _numType),
- ElementFactory.methodElement("toInt", _intType),
- ElementFactory.methodElement("toDouble", _doubleType),
- ElementFactory.methodElement("toStringAsFixed", _stringType, [_intType]),
- ElementFactory.methodElement("toStringAsExponential", _stringType, [_intType]),
- ElementFactory.methodElement("toStringAsPrecision", _stringType, [_intType]),
- ElementFactory.methodElement("toRadixString", _stringType, [_intType])];
+ ElementFactory.methodElement("+", _numType, [_numType]),
+ ElementFactory.methodElement("-", _numType, [_numType]),
+ ElementFactory.methodElement("*", _numType, [_numType]),
+ ElementFactory.methodElement("%", _numType, [_numType]),
+ ElementFactory.methodElement("/", _doubleType, [_numType]),
+ ElementFactory.methodElement("~/", _numType, [_numType]),
+ ElementFactory.methodElement("-", _numType),
+ ElementFactory.methodElement("remainder", _numType, [_numType]),
+ ElementFactory.methodElement("<", _boolType, [_numType]),
+ ElementFactory.methodElement("<=", _boolType, [_numType]),
+ ElementFactory.methodElement(">", _boolType, [_numType]),
+ ElementFactory.methodElement(">=", _boolType, [_numType]),
+ ElementFactory.methodElement("==", _boolType, [_objectType]),
+ ElementFactory.methodElement("isNaN", _boolType),
+ ElementFactory.methodElement("isNegative", _boolType),
+ ElementFactory.methodElement("isInfinite", _boolType),
+ ElementFactory.methodElement("abs", _numType),
+ ElementFactory.methodElement("floor", _numType),
+ ElementFactory.methodElement("ceil", _numType),
+ ElementFactory.methodElement("round", _numType),
+ ElementFactory.methodElement("truncate", _numType),
+ ElementFactory.methodElement("toInt", _intType),
+ ElementFactory.methodElement("toDouble", _doubleType),
+ ElementFactory.methodElement("toStringAsFixed", _stringType, [_intType]),
+ ElementFactory.methodElement(
+ "toStringAsExponential", _stringType, [_intType]),
+ ElementFactory.methodElement(
+ "toStringAsPrecision", _stringType, [_intType]),
+ ElementFactory.methodElement("toRadixString", _stringType, [_intType])
+ ];
intElement.methods = <MethodElement>[
- ElementFactory.methodElement("&", _intType, [_intType]),
- ElementFactory.methodElement("|", _intType, [_intType]),
- ElementFactory.methodElement("^", _intType, [_intType]),
- ElementFactory.methodElement("~", _intType),
- ElementFactory.methodElement("<<", _intType, [_intType]),
- ElementFactory.methodElement(">>", _intType, [_intType]),
- ElementFactory.methodElement("-", _intType),
- ElementFactory.methodElement("abs", _intType),
- ElementFactory.methodElement("round", _intType),
- ElementFactory.methodElement("floor", _intType),
- ElementFactory.methodElement("ceil", _intType),
- ElementFactory.methodElement("truncate", _intType),
- ElementFactory.methodElement("toString", _stringType)];
+ ElementFactory.methodElement("&", _intType, [_intType]),
+ ElementFactory.methodElement("|", _intType, [_intType]),
+ ElementFactory.methodElement("^", _intType, [_intType]),
+ ElementFactory.methodElement("~", _intType),
+ ElementFactory.methodElement("<<", _intType, [_intType]),
+ ElementFactory.methodElement(">>", _intType, [_intType]),
+ ElementFactory.methodElement("-", _intType),
+ ElementFactory.methodElement("abs", _intType),
+ ElementFactory.methodElement("round", _intType),
+ ElementFactory.methodElement("floor", _intType),
+ ElementFactory.methodElement("ceil", _intType),
+ ElementFactory.methodElement("truncate", _intType),
+ ElementFactory.methodElement("toString", _stringType)
+ ];
ConstructorElementImpl fromEnvironment =
ElementFactory.constructorElement(intElement, "fromEnvironment", true);
fromEnvironment.parameters = <ParameterElement>[
- ElementFactory.requiredParameter2("name", stringType),
- ElementFactory.namedParameter2("defaultValue", _intType)];
+ ElementFactory.requiredParameter2("name", stringType),
+ ElementFactory.namedParameter2("defaultValue", _intType)
+ ];
fromEnvironment.factory = true;
intElement.constructors = <ConstructorElement>[fromEnvironment];
List<FieldElement> fields = <FieldElement>[
- ElementFactory.fieldElement("NAN", true, false, true, _doubleType),
- ElementFactory.fieldElement("INFINITY", true, false, true, _doubleType),
- ElementFactory.fieldElement(
- "NEGATIVE_INFINITY",
- true,
- false,
- true,
- _doubleType),
- ElementFactory.fieldElement("MIN_POSITIVE", true, false, true, _doubleType),
- ElementFactory.fieldElement("MAX_FINITE", true, false, true, _doubleType)];
+ ElementFactory.fieldElement("NAN", true, false, true, _doubleType),
+ ElementFactory.fieldElement("INFINITY", true, false, true, _doubleType),
+ ElementFactory.fieldElement(
+ "NEGATIVE_INFINITY", true, false, true, _doubleType),
+ ElementFactory.fieldElement(
+ "MIN_POSITIVE", true, false, true, _doubleType),
+ ElementFactory.fieldElement("MAX_FINITE", true, false, true, _doubleType)
+ ];
doubleElement.fields = fields;
int fieldCount = fields.length;
List<PropertyAccessorElement> accessors =
@@ -532,20 +537,21 @@
}
doubleElement.accessors = accessors;
doubleElement.methods = <MethodElement>[
- ElementFactory.methodElement("remainder", _doubleType, [_numType]),
- ElementFactory.methodElement("+", _doubleType, [_numType]),
- ElementFactory.methodElement("-", _doubleType, [_numType]),
- ElementFactory.methodElement("*", _doubleType, [_numType]),
- ElementFactory.methodElement("%", _doubleType, [_numType]),
- ElementFactory.methodElement("/", _doubleType, [_numType]),
- ElementFactory.methodElement("~/", _doubleType, [_numType]),
- ElementFactory.methodElement("-", _doubleType),
- ElementFactory.methodElement("abs", _doubleType),
- ElementFactory.methodElement("round", _doubleType),
- ElementFactory.methodElement("floor", _doubleType),
- ElementFactory.methodElement("ceil", _doubleType),
- ElementFactory.methodElement("truncate", _doubleType),
- ElementFactory.methodElement("toString", _stringType)];
+ ElementFactory.methodElement("remainder", _doubleType, [_numType]),
+ ElementFactory.methodElement("+", _doubleType, [_numType]),
+ ElementFactory.methodElement("-", _doubleType, [_numType]),
+ ElementFactory.methodElement("*", _doubleType, [_numType]),
+ ElementFactory.methodElement("%", _doubleType, [_numType]),
+ ElementFactory.methodElement("/", _doubleType, [_numType]),
+ ElementFactory.methodElement("~/", _doubleType, [_numType]),
+ ElementFactory.methodElement("-", _doubleType),
+ ElementFactory.methodElement("abs", _doubleType),
+ ElementFactory.methodElement("round", _doubleType),
+ ElementFactory.methodElement("floor", _doubleType),
+ ElementFactory.methodElement("ceil", _doubleType),
+ ElementFactory.methodElement("truncate", _doubleType),
+ ElementFactory.methodElement("toString", _stringType)
+ ];
}
/**
@@ -575,10 +581,11 @@
* Set the accessors for the given class [element] to the given [accessors]
* and also set the fields to those that correspond to the accessors.
*/
- void _setAccessors(ClassElementImpl element,
- List<PropertyAccessorElement> accessors) {
+ void _setAccessors(
+ ClassElementImpl element, List<PropertyAccessorElement> accessors) {
element.accessors = accessors;
- element.fields = accessors.map(
- (PropertyAccessorElement accessor) => accessor.variable).toList();
+ element.fields = accessors
+ .map((PropertyAccessorElement accessor) => accessor.variable)
+ .toList();
}
}
diff --git a/pkg/analyzer/lib/src/generated/visitors.dart b/pkg/analyzer/lib/src/generated/visitors.dart
index 4e3101c..defb317 100644
--- a/pkg/analyzer/lib/src/generated/visitors.dart
+++ b/pkg/analyzer/lib/src/generated/visitors.dart
@@ -9,7 +9,6 @@
/// An [AstVisitor] that delegates calls to visit methods to all [delegates]
/// before calling [visitChildren].
class DelegatingAstVisitor<T> implements AstVisitor<T> {
-
Iterable<AstVisitor<T>> _delegates;
DelegatingAstVisitor(this._delegates);
@@ -155,16 +154,16 @@
@override
T visitConstructorDeclaration(ConstructorDeclaration node) {
- _delegates.forEach(
- (delegate) => delegate.visitConstructorDeclaration(node));
+ _delegates
+ .forEach((delegate) => delegate.visitConstructorDeclaration(node));
node.visitChildren(this);
return null;
}
@override
T visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
- _delegates.forEach(
- (delegate) => delegate.visitConstructorFieldInitializer(node));
+ _delegates
+ .forEach((delegate) => delegate.visitConstructorFieldInitializer(node));
node.visitChildren(this);
return null;
}
@@ -192,8 +191,8 @@
@override
T visitDefaultFormalParameter(DefaultFormalParameter node) {
- _delegates.forEach(
- (delegate) => delegate.visitDefaultFormalParameter(node));
+ _delegates
+ .forEach((delegate) => delegate.visitDefaultFormalParameter(node));
node.visitChildren(this);
return null;
}
@@ -228,8 +227,8 @@
@override
T visitEnumConstantDeclaration(EnumConstantDeclaration node) {
- _delegates.forEach(
- (delegate) => delegate.visitEnumConstantDeclaration(node));
+ _delegates
+ .forEach((delegate) => delegate.visitEnumConstantDeclaration(node));
node.visitChildren(this);
return null;
}
@@ -250,8 +249,8 @@
@override
T visitExpressionFunctionBody(ExpressionFunctionBody node) {
- _delegates.forEach(
- (delegate) => delegate.visitExpressionFunctionBody(node));
+ _delegates
+ .forEach((delegate) => delegate.visitExpressionFunctionBody(node));
node.visitChildren(this);
return null;
}
@@ -386,8 +385,8 @@
@override
T visitInstanceCreationExpression(InstanceCreationExpression node) {
- _delegates.forEach(
- (delegate) => delegate.visitInstanceCreationExpression(node));
+ _delegates
+ .forEach((delegate) => delegate.visitInstanceCreationExpression(node));
node.visitChildren(this);
return null;
}
@@ -401,8 +400,8 @@
@override
T visitInterpolationExpression(InterpolationExpression node) {
- _delegates.forEach(
- (delegate) => delegate.visitInterpolationExpression(node));
+ _delegates
+ .forEach((delegate) => delegate.visitInterpolationExpression(node));
node.visitChildren(this);
return null;
}
@@ -513,8 +512,8 @@
@override
T visitParenthesizedExpression(ParenthesizedExpression node) {
- _delegates.forEach(
- (delegate) => delegate.visitParenthesizedExpression(node));
+ _delegates
+ .forEach((delegate) => delegate.visitParenthesizedExpression(node));
node.visitChildren(this);
return null;
}
@@ -561,8 +560,8 @@
}
@override
- T
- visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ T visitRedirectingConstructorInvocation(
+ RedirectingConstructorInvocation node) {
_delegates.forEach(
(delegate) => delegate.visitRedirectingConstructorInvocation(node));
node.visitChildren(this);
@@ -627,8 +626,8 @@
@override
T visitSuperConstructorInvocation(SuperConstructorInvocation node) {
- _delegates.forEach(
- (delegate) => delegate.visitSuperConstructorInvocation(node));
+ _delegates
+ .forEach((delegate) => delegate.visitSuperConstructorInvocation(node));
node.visitChildren(this);
return null;
}
@@ -684,8 +683,8 @@
@override
T visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
- _delegates.forEach(
- (delegate) => delegate.visitTopLevelVariableDeclaration(node));
+ _delegates
+ .forEach((delegate) => delegate.visitTopLevelVariableDeclaration(node));
node.visitChildren(this);
return null;
}
@@ -734,8 +733,8 @@
@override
T visitVariableDeclarationList(VariableDeclarationList node) {
- _delegates.forEach(
- (delegate) => delegate.visitVariableDeclarationList(node));
+ _delegates
+ .forEach((delegate) => delegate.visitVariableDeclarationList(node));
node.visitChildren(this);
return null;
}
diff --git a/pkg/analyzer/lib/src/services/formatter_impl.dart b/pkg/analyzer/lib/src/services/formatter_impl.dart
index f95e230..e0512f9 100644
--- a/pkg/analyzer/lib/src/services/formatter_impl.dart
+++ b/pkg/analyzer/lib/src/services/formatter_impl.dart
@@ -18,12 +18,8 @@
/// Create formatter options with defaults derived (where defined) from
/// the style guide: <http://www.dartlang.org/articles/style-guide/>.
const FormatterOptions({this.initialIndentationLevel: 0,
- this.spacesPerIndent: 2,
- this.lineSeparator: NEW_LINE,
- this.pageWidth: 80,
- this.tabsForIndent: false,
- this.tabSize: 2,
- this.codeTransforms: false});
+ this.spacesPerIndent: 2, this.lineSeparator: NEW_LINE, this.pageWidth: 80,
+ this.tabsForIndent: false, this.tabSize: 2, this.codeTransforms: false});
final String lineSeparator;
final int initialIndentationLevel;
@@ -34,7 +30,6 @@
final bool codeTransforms;
}
-
/// Thrown when an error occurs in formatting.
class FormatterException implements Exception {
@@ -44,8 +39,8 @@
/// Creates a new FormatterException with an optional error [message].
const FormatterException([this.message = 'FormatterException']);
- FormatterException.forError(List<AnalysisError> errors, [LineInfo line]) :
- message = _createMessage(errors);
+ FormatterException.forError(List<AnalysisError> errors, [LineInfo line])
+ : message = _createMessage(errors);
static String _createMessage(errors) {
//TODO(pquitslund): consider a verbosity flag to add/suppress details
@@ -68,20 +63,18 @@
/// A statement snippet.
static const STATEMENT = const CodeKind._(1);
-
}
/// Dart source code formatter.
abstract class CodeFormatter {
-
- factory CodeFormatter([FormatterOptions options = const FormatterOptions()])
- => new CodeFormatterImpl(options);
+ factory CodeFormatter(
+ [FormatterOptions options = const FormatterOptions()]) =>
+ new CodeFormatterImpl(options);
/// Format the specified portion (from [offset] with [length]) of the given
/// [source] string, optionally providing an [indentationLevel].
FormattedSource format(CodeKind kind, String source, {int offset, int end,
- int indentationLevel: 0, Selection selection: null});
-
+ int indentationLevel: 0, Selection selection: null});
}
/// Source selection state information.
@@ -111,9 +104,7 @@
FormattedSource(this.source, [this.selection = null]);
}
-
class CodeFormatterImpl implements CodeFormatter, AnalysisErrorListener {
-
final FormatterOptions options;
final errors = <AnalysisError>[];
final whitespace = new RegExp(r'[\s]+');
@@ -124,7 +115,6 @@
FormattedSource format(CodeKind kind, String source, {int offset, int end,
int indentationLevel: 0, Selection selection: null}) {
-
var startToken = tokenize(source);
checkForErrors();
@@ -137,17 +127,16 @@
var formattedSource = formatter.writer.toString();
checkTokenStreams(startToken, tokenize(formattedSource),
- allowTransforms: options.codeTransforms);
+ allowTransforms: options.codeTransforms);
return new FormattedSource(formattedSource, formatter.selection);
}
checkTokenStreams(Token t1, Token t2, {allowTransforms: false}) =>
- new TokenStreamComparator(lineInfo, t1, t2, transforms: allowTransforms).
- verifyEquals();
+ new TokenStreamComparator(lineInfo, t1, t2, transforms: allowTransforms)
+ .verifyEquals();
AstNode parse(CodeKind kind, Token start) {
-
var parser = new Parser(null, this);
switch (kind) {
@@ -177,19 +166,17 @@
lineInfo = new LineInfo(scanner.lineStarts);
return token;
}
-
}
-
// Compares two token streams. Used for sanity checking formatted results.
class TokenStreamComparator {
-
final LineInfo lineInfo;
Token token1, token2;
bool allowTransforms;
TokenStreamComparator(this.lineInfo, this.token1, this.token2,
- {transforms: false}) : this.allowTransforms = transforms;
+ {transforms: false})
+ : this.allowTransforms = transforms;
/// Verify that these two token streams are equal.
verifyEquals() {
@@ -199,13 +186,11 @@
throwNotEqualException(token1, token2);
}
advance();
-
}
// TODO(pquitslund): consider a better way to notice trailing synthetics
if (!isEOF(token2) &&
!(isCLOSE_CURLY_BRACKET(token2) && isEOF(token2.next))) {
- throw new FormatterException(
- 'Expected "EOF" but got "$token2".');
+ throw new FormatterException('Expected "EOF" but got "$token2".');
}
}
@@ -238,8 +223,9 @@
'Expected "$t1" but got "$t2", at ${describeLocation(t1)}.');
}
- String describeLocation(Token token) => lineInfo == null ? '<unknown>' :
- 'Line: ${lineInfo.getLocation(token.offset).lineNumber}, '
+ String describeLocation(Token token) => lineInfo == null
+ ? '<unknown>'
+ : 'Line: ${lineInfo.getLocation(token.offset).lineNumber}, '
'Column: ${lineInfo.getLocation(token.offset).columnNumber}';
advance() {
@@ -293,12 +279,10 @@
token2 = token2.next;
return checkTokens();
}
-
}
return false;
}
-
}
/// Test for token type.
@@ -334,13 +318,10 @@
tokenIs(token, TokenType.CLOSE_SQUARE_BRACKET);
/// Test if this token is a SEMICOLON token.
-bool isSEMICOLON(Token token) =>
- tokenIs(token, TokenType.SEMICOLON);
-
+bool isSEMICOLON(Token token) => tokenIs(token, TokenType.SEMICOLON);
/// An AST visitor that drives formatting heuristics.
class SourceVisitor implements AstVisitor {
-
static final OPEN_CURLY = syntheticToken(TokenType.OPEN_CURLY_BRACKET, '{');
static final CLOSE_CURLY = syntheticToken(TokenType.CLOSE_CURLY_BRACKET, '}');
static final SEMI_COLON = syntheticToken(TokenType.SEMICOLON, ';');
@@ -392,24 +373,23 @@
final bool codeTransforms;
-
/// The source being formatted (used in interpolation handling)
final String source;
/// Post format selection information.
Selection selection;
-
/// Initialize a newly created visitor to write source code representing
/// the visited nodes to the given [writer].
- SourceVisitor(FormatterOptions options, this.lineInfo, this.source,
- this.preSelection)
- : writer = new SourceWriter(indentCount: options.initialIndentationLevel,
- lineSeparator: options.lineSeparator,
- maxLineLength: options.pageWidth,
- useTabs: options.tabsForIndent,
- spacesPerIndent: options.spacesPerIndent),
- codeTransforms = options.codeTransforms;
+ SourceVisitor(
+ FormatterOptions options, this.lineInfo, this.source, this.preSelection)
+ : writer = new SourceWriter(
+ indentCount: options.initialIndentationLevel,
+ lineSeparator: options.lineSeparator,
+ maxLineLength: options.pageWidth,
+ useTabs: options.tabsForIndent,
+ spacesPerIndent: options.spacesPerIndent),
+ codeTransforms = options.codeTransforms;
visitAdjacentStrings(AdjacentStrings node) {
visitNodes(node.strings, separatedBy: space);
@@ -428,8 +408,7 @@
if (node.arguments.isNotEmpty) {
int weight = lastSpaceWeight++;
levelSpace(weight, 0);
- visitCommaSeparatedNodes(
- node.arguments,
+ visitCommaSeparatedNodes(node.arguments,
followedBy: () => levelSpace(weight));
}
token(node.rightParenthesis);
@@ -444,7 +423,7 @@
}
visitAssertStatement(AssertStatement node) {
- token(node.keyword);
+ token(node.assertKeyword);
token(node.leftParenthesis);
visit(node.condition);
token(node.rightParenthesis);
@@ -455,7 +434,7 @@
visit(node.leftHandSide);
space();
token(node.operator);
- allowContinuedLines((){
+ allowContinuedLines(() {
levelSpace(SINGLE_SPACE_WEIGHT);
visit(node.rightHandSide);
});
@@ -522,7 +501,7 @@
}
visitBreakStatement(BreakStatement node) {
- token(node.keyword);
+ token(node.breakKeyword);
visitNode(node.label, precededBy: space);
token(node.semicolon);
}
@@ -539,7 +518,6 @@
}
visitCatchClause(CatchClause node) {
-
token(node.onKeyword, followedBy: space);
visit(node.exceptionType);
@@ -568,7 +546,7 @@
token(node.classKeyword);
space();
visit(node.name);
- allowContinuedLines((){
+ allowContinuedLines(() {
visit(node.typeParameters);
visitNode(node.extendsClause, precededBy: space);
visitNode(node.withClause, precededBy: space);
@@ -591,7 +569,7 @@
preserveLeadingNewlines();
visitMemberMetadata(node.metadata);
modifier(node.abstractKeyword);
- token(node.keyword);
+ token(node.typedefKeyword);
space();
visit(node.name);
visit(node.typeParameters);
@@ -638,7 +616,7 @@
visit(node.condition);
space();
token(node.question);
- allowContinuedLines((){
+ allowContinuedLines(() {
levelSpace(weight);
visit(node.thenExpression);
space();
@@ -708,7 +686,7 @@
}
visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
- token(node.keyword);
+ token(node.thisKeyword);
token(node.period);
visit(node.fieldName);
space();
@@ -724,7 +702,7 @@
}
visitContinueStatement(ContinueStatement node) {
- token(node.keyword);
+ token(node.continueKeyword);
visitNode(node.label, precededBy: space);
token(node.semicolon);
}
@@ -755,7 +733,7 @@
token(node.whileKeyword);
space();
token(node.leftParenthesis);
- allowContinuedLines((){
+ allowContinuedLines(() {
visit(node.condition);
token(node.rightParenthesis);
});
@@ -776,13 +754,13 @@
}
}
- visitEnumConstantDeclaration(EnumConstantDeclaration node){
+ visitEnumConstantDeclaration(EnumConstantDeclaration node) {
visit(node.name);
}
- visitEnumDeclaration(EnumDeclaration node){
+ visitEnumDeclaration(EnumDeclaration node) {
visitMemberMetadata(node.metadata);
- token(node.keyword);
+ token(node.enumKeyword);
space();
visit(node.name);
space();
@@ -799,7 +777,7 @@
token(node.keyword);
space();
visit(node.uri);
- allowContinuedLines((){
+ allowContinuedLines(() {
visitNodes(node.combinators, precededBy: space, separatedBy: space);
});
token(node.semicolon);
@@ -820,7 +798,7 @@
}
visitExtendsClause(ExtendsClause node) {
- token(node.keyword);
+ token(node.extendsKeyword);
space();
visit(node.superclass);
}
@@ -835,7 +813,7 @@
visitFieldFormalParameter(FieldFormalParameter node) {
token(node.keyword, followedBy: space);
visitNode(node.type, followedBy: space);
- token(node.thisToken);
+ token(node.thisKeyword);
token(node.period);
visit(node.identifier);
visit(node.parameters);
@@ -945,7 +923,7 @@
visitFunctionTypeAlias(FunctionTypeAlias node) {
visitMemberMetadata(node.metadata);
- token(node.keyword);
+ token(node.typedefKeyword);
space();
visitNode(node.returnType, followedBy: space);
visit(node.name);
@@ -969,7 +947,7 @@
visitIfStatement(IfStatement node) {
var hasElse = node.elseStatement != null;
token(node.ifKeyword);
- allowContinuedLines((){
+ allowContinuedLines(() {
space();
token(node.leftParenthesis);
visit(node.condition);
@@ -992,7 +970,7 @@
}
visitImplementsClause(ImplementsClause node) {
- token(node.keyword);
+ token(node.implementsKeyword);
space();
visitCommaSeparatedNodes(node.interfaces);
}
@@ -1002,9 +980,9 @@
token(node.keyword);
nonBreakingSpace();
visit(node.uri);
- token(node.deferredToken, precededBy: space);
- token(node.asToken, precededBy: space, followedBy: space);
- allowContinuedLines((){
+ token(node.deferredKeyword, precededBy: space);
+ token(node.asKeyword, precededBy: space, followedBy: space);
+ allowContinuedLines(() {
visit(node.prefix);
visitNodes(node.combinators, precededBy: space, separatedBy: space);
});
@@ -1086,8 +1064,7 @@
token(node.leftBracket);
indent();
levelSpace(weight, 0);
- visitCommaSeparatedNodes(
- node.elements,
+ visitCommaSeparatedNodes(node.elements,
followedBy: () => levelSpace(weight));
optionalTrailingComma(node.rightBracket);
token(node.rightBracket, precededBy: unindent);
@@ -1142,13 +1119,13 @@
}
visitNativeClause(NativeClause node) {
- token(node.keyword);
+ token(node.nativeKeyword);
space();
visit(node.name);
}
visitNativeFunctionBody(NativeFunctionBody node) {
- token(node.nativeToken);
+ token(node.nativeKeyword);
space();
visit(node.stringLiteral);
token(node.semicolon);
@@ -1174,7 +1151,7 @@
visitPartOfDirective(PartOfDirective node) {
token(node.keyword);
space();
- token(node.ofToken);
+ token(node.ofKeyword);
space();
visit(node.libraryName);
token(node.semicolon);
@@ -1207,24 +1184,24 @@
}
visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
- token(node.keyword);
+ token(node.thisKeyword);
token(node.period);
visit(node.constructorName);
visit(node.argumentList);
}
visitRethrowExpression(RethrowExpression node) {
- token(node.keyword);
+ token(node.rethrowKeyword);
}
visitReturnStatement(ReturnStatement node) {
var expression = node.expression;
if (expression == null) {
- token(node.keyword);
+ token(node.returnKeyword);
token(node.semicolon);
} else {
- token(node.keyword);
- allowContinuedLines((){
+ token(node.returnKeyword);
+ allowContinuedLines(() {
space();
expression.accept(this);
token(node.semicolon);
@@ -1270,14 +1247,14 @@
}
visitSuperConstructorInvocation(SuperConstructorInvocation node) {
- token(node.keyword);
+ token(node.superKeyword);
token(node.period);
visit(node.constructorName);
visit(node.argumentList);
}
visitSuperExpression(SuperExpression node) {
- token(node.keyword);
+ token(node.superKeyword);
}
visitSwitchCase(SwitchCase node) {
@@ -1303,7 +1280,7 @@
}
visitSwitchStatement(SwitchStatement node) {
- token(node.keyword);
+ token(node.switchKeyword);
space();
token(node.leftParenthesis);
visit(node.expression);
@@ -1314,7 +1291,6 @@
newlines();
visitNodes(node.members, separatedBy: newlines, followedBy: newlines);
token(node.rightBracket, precededBy: unindent);
-
}
visitSymbolLiteral(SymbolLiteral node) {
@@ -1330,11 +1306,11 @@
}
visitThisExpression(ThisExpression node) {
- token(node.keyword);
+ token(node.thisKeyword);
}
visitThrowExpression(ThrowExpression node) {
- token(node.keyword);
+ token(node.throwKeyword);
space();
visit(node.expression);
}
@@ -1367,7 +1343,7 @@
visitTypeParameter(TypeParameter node) {
visitMemberMetadata(node.metadata);
visit(node.name);
- token(node.keyword /* extends */, precededBy: space, followedBy: space);
+ token(node.extendsKeyword, precededBy: space, followedBy: space);
visit(node.bound);
}
@@ -1438,10 +1414,10 @@
}
visitWhileStatement(WhileStatement node) {
- token(node.keyword);
+ token(node.whileKeyword);
space();
token(node.leftParenthesis);
- allowContinuedLines((){
+ allowContinuedLines(() {
visit(node.condition);
token(node.rightParenthesis);
});
@@ -1475,12 +1451,10 @@
/// Visit member metadata
visitMemberMetadata(NodeList<Annotation> metadata) {
- visitNodes(metadata,
- separatedBy: () {
- space();
- preserveLeadingNewlines();
- },
- followedBy: space);
+ visitNodes(metadata, separatedBy: () {
+ space();
+ preserveLeadingNewlines();
+ }, followedBy: space);
if (metadata != null && metadata.length > 0) {
preserveLeadingNewlines();
}
@@ -1502,8 +1476,8 @@
/// Visit a list of [nodes] if not null, optionally separated and/or preceded
/// and followed by the given functions.
- visitNodes(NodeList<AstNode> nodes, {precededBy(): null,
- separatedBy() : null, followedBy(): null}) {
+ visitNodes(NodeList<AstNode> nodes,
+ {precededBy(): null, separatedBy(): null, followedBy(): null}) {
if (nodes != null) {
var size = nodes.length;
if (size > 0) {
@@ -1546,7 +1520,6 @@
}
}
-
/// Visit a [node], and if not null, optionally preceded or followed by the
/// specified functions.
visitNode(AstNode node, {precededBy(): null, followedBy(): null}) {
@@ -1593,8 +1566,8 @@
preserveNewlines = true;
}
- token(Token token, {precededBy(), followedBy(), printToken(tok),
- int minNewlines: 0}) {
+ token(Token token,
+ {precededBy(), followedBy(), printToken(tok), int minNewlines: 0}) {
if (token != null) {
if (needsNewline) {
minNewlines = max(1, minNewlines);
@@ -1638,9 +1611,9 @@
var overshot = token.offset - preSelection.offset;
if (overshot >= 0) {
//TODO(pquitslund): update length (may need truncating)
- selection = new Selection(
- writer.toString().length + leadingSpaces - overshot,
- preSelection.length);
+ selection = new Selection(writer.toString().length +
+ leadingSpaces -
+ overshot, preSelection.length);
}
}
}
@@ -1711,7 +1684,6 @@
/// Emit any detected comments and newlines or a minimum as specified
/// by [min].
int emitPrecedingCommentsAndNewlines(Token token, {min: 0}) {
-
var comment = token.precedingComments;
var currentToken = comment != null ? comment : token;
@@ -1736,7 +1708,6 @@
currentToken.previous != null ? currentToken.previous : token.previous;
while (comment != null) {
-
emitComment(comment, previousToken);
var nextToken = comment.next != null ? comment.next : token;
@@ -1769,14 +1740,13 @@
}
}
-
/// Test if this EOL [comment] is at the beginning of a line.
bool isAtBOL(Token comment) =>
lineInfo.getLocation(comment.offset).columnNumber == 1;
/// Test if this [comment] is at the end of a line.
- bool isAtEOL(Token comment) =>
- comment != null && comment.toString().trim().startsWith(twoSlashes) &&
+ bool isAtEOL(Token comment) => comment != null &&
+ comment.toString().trim().startsWith(twoSlashes) &&
sameLine(comment, previousToken);
/// Emit this [comment], inserting leading whitespace if appropriate.
@@ -1810,8 +1780,9 @@
countNewlinesBetween(node.beginToken.previous, node.beginToken);
/// Count newlines succeeding this [node].
- int countSucceedingNewlines(AstNode node) => node == null ? 0 :
- countNewlinesBetween(node.endToken, node.endToken.next);
+ int countSucceedingNewlines(AstNode node) => node == null
+ ? 0
+ : countNewlinesBetween(node.endToken, node.endToken.next);
/// Count the blanks between these two tokens.
int countNewlinesBetween(Token last, Token current) {
@@ -1858,10 +1829,8 @@
/// Count the lines between two offsets.
int linesBetween(int lastOffset, int currentOffset) {
- var lastLine =
- lineInfo.getLocation(lastOffset).lineNumber;
- var currentLine =
- lineInfo.getLocation(currentOffset).lineNumber;
+ var lastLine = lineInfo.getLocation(lastOffset).lineNumber;
+ var currentLine = lineInfo.getLocation(currentOffset).lineNumber;
return currentLine - lastLine;
}
diff --git a/pkg/analyzer/lib/src/services/lint.dart b/pkg/analyzer/lib/src/services/lint.dart
index 829b371..9dd51a0 100644
--- a/pkg/analyzer/lib/src/services/lint.dart
+++ b/pkg/analyzer/lib/src/services/lint.dart
@@ -5,13 +5,11 @@
library lint;
import 'package:analyzer/src/generated/ast.dart';
-import 'package:analyzer/src/generated/utilities_general.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/error.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/generated/visitors.dart';
-
/// Implementers contribute lint warnings via the provided error [reporter].
abstract class Linter {
/// Used to report lint warnings.
@@ -57,4 +55,4 @@
Iterable<AstVisitor> visitors = _linters.map((l) => l.getVisitor());
unit.accept(new DelegatingAstVisitor(visitors.where((v) => v != null)));
}
-}
\ No newline at end of file
+}
diff --git a/pkg/analyzer/lib/src/services/writer.dart b/pkg/analyzer/lib/src/services/writer.dart
index 31dbbe2..4bf182e 100644
--- a/pkg/analyzer/lib/src/services/writer.dart
+++ b/pkg/analyzer/lib/src/services/writer.dart
@@ -7,7 +7,6 @@
import 'dart:math' as math;
class Line {
-
final List<LineToken> tokens = <LineToken>[];
final bool useTabs;
final int spacesPerIndent;
@@ -39,35 +38,29 @@
bool isEmpty() => tokens.isEmpty;
- bool isWhitespace() => tokens.every(
- (tok) => tok is SpaceToken || tok is TabToken);
+ bool isWhitespace() =>
+ tokens.every((tok) => tok is SpaceToken || tok is TabToken);
void indent(int n) {
- tokens.insert(0,
- useTabs ? new TabToken(n) : new SpaceToken(n * spacesPerIndent));
+ tokens.insert(
+ 0, useTabs ? new TabToken(n) : new SpaceToken(n * spacesPerIndent));
}
String toString() => printer.printLine(this);
-
}
-
/// Base class for line printers
abstract class LinePrinter {
-
const LinePrinter();
/// Convert this [line] to a [String] representation.
String printLine(Line line);
}
-
typedef String Indenter(int n);
-
/// A simple line breaking [LinePrinter]
class SimpleLineBreaker extends LinePrinter {
-
static final NO_OP_INDENTER = (n) => '';
final chunks = <Chunk>[];
@@ -100,7 +93,9 @@
List<Chunk> breakLine(Line line) {
List<LineToken> tokens = preprocess(line.tokens);
- List<Chunk> chunks = <Chunk>[new Chunk(line.indentLevel, maxLength, tokens)];
+ List<Chunk> chunks = <Chunk>[
+ new Chunk(line.indentLevel, maxLength, tokens)
+ ];
// try SINGLE_SPACE_WEIGHT
{
Chunk chunk = chunks[0];
@@ -140,7 +135,8 @@
int length = 0;
for (int i = 0; i < tokens.length; i++) {
LineToken token = tokens[i];
- if (token is SpaceToken && token.breakWeight == weight &&
+ if (token is SpaceToken &&
+ token.breakWeight == weight &&
i < tokens.length - 1) {
LineToken nextToken = tokens[i + 1];
if (length + token.length + nextToken.length > maxLength) {
@@ -189,7 +185,6 @@
}
static List<LineToken> preprocess(List<LineToken> tok) {
-
var tokens = <LineToken>[];
var curr;
@@ -228,8 +223,8 @@
}
/// Test if this [string] contains only whitespace characters
-bool isWhitespace(String string) => string.codeUnits.every(
- (c) => c == 0x09 || c == 0x20 || c == 0x0A || c == 0x0D);
+bool isWhitespace(String string) => string.codeUnits
+ .every((c) => c == 0x09 || c == 0x20 || c == 0x0A || c == 0x0D);
/// Special token indicating a line start
final LINE_START = new SpaceToken(0);
@@ -241,7 +236,6 @@
/// Simple non-breaking printer
class SimpleLinePrinter extends LinePrinter {
-
const SimpleLinePrinter();
String printLine(Line line) {
@@ -249,16 +243,13 @@
line.tokens.forEach((tok) => buffer.write(tok.toString()));
return buffer.toString();
}
-
}
-
/// Describes a piece of text in a [Line].
abstract class LineText {
int get length;
}
-
/// A working piece of text used in calculating line breaks
class Chunk {
final int indent;
@@ -320,9 +311,7 @@
String toString() => tokens.join();
}
-
class LineToken implements LineText {
-
final String value;
LineToken(this.value);
@@ -333,33 +322,24 @@
int lengthLessNewlines(String str) =>
str.endsWith('\n') ? str.length - 1 : str.length;
-
}
-
class SpaceToken extends LineToken {
-
final int breakWeight;
- SpaceToken(int n, {this.breakWeight: DEFAULT_SPACE_WEIGHT}) :
- super(getSpaces(n));
+ SpaceToken(int n, {this.breakWeight: DEFAULT_SPACE_WEIGHT})
+ : super(getSpaces(n));
}
-
class TabToken extends LineToken {
-
TabToken(int n) : super(getTabs(n));
}
-
class NewlineToken extends LineToken {
-
NewlineToken(String value) : super(value);
}
-
class SourceWriter {
-
final StringBuffer buffer = new StringBuffer();
Line currentLine;
@@ -374,8 +354,8 @@
SourceWriter({this.indentCount: 0, this.lineSeparator: NEW_LINE,
this.useTabs: false, this.spacesPerIndent: 2, int maxLineLength: 80}) {
if (maxLineLength > 0) {
- linePrinter = new SimpleLineBreaker(maxLineLength, (n) =>
- getIndentString(n, useTabs: useTabs, spacesPerIndent: spacesPerIndent));
+ linePrinter = new SimpleLineBreaker(maxLineLength, (n) => getIndentString(
+ n, useTabs: useTabs, spacesPerIndent: spacesPerIndent));
} else {
linePrinter = new SimpleLinePrinter();
}
@@ -447,8 +427,11 @@
}
}
- Line newLine() => new Line(indentLevel: indentCount, useTabs: useTabs,
- spacesPerIndent: spacesPerIndent, printer: linePrinter);
+ Line newLine() => new Line(
+ indentLevel: indentCount,
+ useTabs: useTabs,
+ spacesPerIndent: spacesPerIndent,
+ printer: linePrinter);
String toString() {
var source = new StringBuffer(buffer.toString());
@@ -457,52 +440,50 @@
}
return source.toString();
}
-
}
const NEW_LINE = '\n';
const SPACE = ' ';
const SPACES = const [
- '',
- ' ',
- ' ',
- ' ',
- ' ',
- ' ',
- ' ',
- ' ',
- ' ',
- ' ',
- ' ',
- ' ',
- ' ',
- ' ',
- ' ',
- ' ',
- ' ',
+ '',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
];
const TABS = const [
- '',
- '\t',
- '\t\t',
- '\t\t\t',
- '\t\t\t\t',
- '\t\t\t\t\t',
- '\t\t\t\t\t\t',
- '\t\t\t\t\t\t\t',
- '\t\t\t\t\t\t\t\t',
- '\t\t\t\t\t\t\t\t\t',
- '\t\t\t\t\t\t\t\t\t\t',
- '\t\t\t\t\t\t\t\t\t\t\t',
- '\t\t\t\t\t\t\t\t\t\t\t\t',
- '\t\t\t\t\t\t\t\t\t\t\t\t\t',
- '\t\t\t\t\t\t\t\t\t\t\t\t\t\t',
+ '',
+ '\t',
+ '\t\t',
+ '\t\t\t',
+ '\t\t\t\t',
+ '\t\t\t\t\t',
+ '\t\t\t\t\t\t',
+ '\t\t\t\t\t\t\t',
+ '\t\t\t\t\t\t\t\t',
+ '\t\t\t\t\t\t\t\t\t',
+ '\t\t\t\t\t\t\t\t\t\t',
+ '\t\t\t\t\t\t\t\t\t\t\t',
+ '\t\t\t\t\t\t\t\t\t\t\t\t',
+ '\t\t\t\t\t\t\t\t\t\t\t\t\t',
+ '\t\t\t\t\t\t\t\t\t\t\t\t\t\t',
];
-
-String getIndentString(int indentWidth, {bool useTabs: false,
- int spacesPerIndent: 2}) => useTabs ? getTabs(indentWidth) :
- getSpaces(indentWidth * spacesPerIndent);
+String getIndentString(int indentWidth,
+ {bool useTabs: false, int spacesPerIndent: 2}) =>
+ useTabs ? getTabs(indentWidth) : getSpaces(indentWidth * spacesPerIndent);
String getSpaces(int n) => n < SPACES.length ? SPACES[n] : repeat(' ', n);
diff --git a/pkg/analyzer/lib/src/string_source.dart b/pkg/analyzer/lib/src/string_source.dart
index 0d2a9b7..5ffb332 100644
--- a/pkg/analyzer/lib/src/string_source.dart
+++ b/pkg/analyzer/lib/src/string_source.dart
@@ -45,6 +45,6 @@
bool exists() => true;
- Uri resolveRelativeUri(Uri relativeUri) =>
- throw new UnsupportedError("StringSource doesn't support resolveRelative.");
+ Uri resolveRelativeUri(Uri relativeUri) => throw new UnsupportedError(
+ "StringSource doesn't support resolveRelative.");
}
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index 9c741a6..5fd3c1d 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -39,17 +39,15 @@
* The task descriptor describing this kind of task.
*/
static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
- 'BUILD_COMPILATION_UNIT_ELEMENT',
- createTask,
- buildInputs,
+ 'BUILD_COMPILATION_UNIT_ELEMENT', createTask, buildInputs,
<ResultDescriptor>[COMPILATION_UNIT_ELEMENT, BUILT_UNIT]);
/**
* Initialize a newly created task to build a compilation unit element for
* the given [target] in the given [context].
*/
- BuildCompilationUnitElementTask(InternalAnalysisContext context,
- AnalysisTarget target)
+ BuildCompilationUnitElementTask(
+ InternalAnalysisContext context, AnalysisTarget target)
: super(context, target);
@override
@@ -81,8 +79,8 @@
* Create a [BuildCompilationUnitElementTask] based on the given [target] in
* the given [context].
*/
- static BuildCompilationUnitElementTask createTask(AnalysisContext context,
- AnalysisTarget target) {
+ static BuildCompilationUnitElementTask createTask(
+ AnalysisContext context, AnalysisTarget target) {
return new BuildCompilationUnitElementTask(context, target);
}
}
@@ -105,17 +103,15 @@
/**
* The task descriptor describing this kind of task.
*/
- static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
- 'PARSE_DART',
- createTask,
- buildInputs,
- <ResultDescriptor>[
- EXPORTED_LIBRARIES,
- IMPORTED_LIBRARIES,
- INCLUDED_PARTS,
- PARSE_ERRORS,
- PARSED_UNIT,
- SOURCE_KIND]);
+ static final TaskDescriptor DESCRIPTOR = new TaskDescriptor('PARSE_DART',
+ createTask, buildInputs, <ResultDescriptor>[
+ EXPORTED_LIBRARIES,
+ IMPORTED_LIBRARIES,
+ INCLUDED_PARTS,
+ PARSE_ERRORS,
+ PARSED_UNIT,
+ SOURCE_KIND
+ ]);
/**
* Initialize a newly created task to parse the content of the Dart file
@@ -136,7 +132,7 @@
RecordingErrorListener errorListener = new RecordingErrorListener();
Parser parser = new Parser(source, errorListener);
AnalysisOptions options = context.analysisOptions;
- parser.parseFunctionBodies = options.analyzeFunctionBodies;
+ parser.parseFunctionBodies = options.analyzeFunctionBodiesPredicate(source);
CompilationUnit unit = parser.parseCompilationUnit(tokenStream);
unit.lineInfo = lineInfo;
@@ -198,8 +194,8 @@
* Create a [ParseDartTask] based on the given [target] in the given
* [context].
*/
- static ParseDartTask createTask(AnalysisContext context,
- AnalysisTarget target) {
+ static ParseDartTask createTask(
+ AnalysisContext context, AnalysisTarget target) {
return new ParseDartTask(context, target);
}
@@ -230,22 +226,15 @@
return null;
}
if (code == UriValidationCode.URI_WITH_INTERPOLATION) {
- errorListener.onError(
- new AnalysisError.con2(
- librarySource,
- uriLiteral.offset,
- uriLiteral.length,
- CompileTimeErrorCode.URI_WITH_INTERPOLATION));
+ errorListener.onError(new AnalysisError.con2(librarySource,
+ uriLiteral.offset, uriLiteral.length,
+ CompileTimeErrorCode.URI_WITH_INTERPOLATION));
return null;
}
if (code == UriValidationCode.INVALID_URI) {
- errorListener.onError(
- new AnalysisError.con2(
- librarySource,
- uriLiteral.offset,
- uriLiteral.length,
- CompileTimeErrorCode.INVALID_URI,
- [uriContent]));
+ errorListener.onError(new AnalysisError.con2(librarySource,
+ uriLiteral.offset, uriLiteral.length,
+ CompileTimeErrorCode.INVALID_URI, [uriContent]));
return null;
}
throw new AnalysisException('Failed to handle validation code: $code');
@@ -264,11 +253,12 @@
/**
* The task descriptor describing this kind of task.
*/
- static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
- 'SCAN_DART',
- createTask,
- buildInputs,
- <ResultDescriptor>[LINE_INFO, SCAN_ERRORS, TOKEN_STREAM]);
+ static final TaskDescriptor DESCRIPTOR = new TaskDescriptor('SCAN_DART',
+ createTask, buildInputs, <ResultDescriptor>[
+ LINE_INFO,
+ SCAN_ERRORS,
+ TOKEN_STREAM
+ ]);
/**
* Initialize a newly created task to access the content of the source
@@ -299,16 +289,14 @@
* input descriptors describing those inputs for a task with the given [target].
*/
static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
- return <String, TaskInput>{
- CONTENT_INPUT_NAME: CONTENT.inputFor(target)
- };
+ return <String, TaskInput>{CONTENT_INPUT_NAME: CONTENT.inputFor(target)};
}
/**
* Create a [ScanDartTask] based on the given [target] in the given [context].
*/
- static ScanDartTask createTask(AnalysisContext context,
- AnalysisTarget target) {
+ static ScanDartTask createTask(
+ AnalysisContext context, AnalysisTarget target) {
return new ScanDartTask(context, target);
}
}
diff --git a/pkg/analyzer/lib/src/task/driver.dart b/pkg/analyzer/lib/src/task/driver.dart
new file mode 100644
index 0000000..e5dbb9d4
--- /dev/null
+++ b/pkg/analyzer/lib/src/task/driver.dart
@@ -0,0 +1,416 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library analyzer.src.task.driver;
+
+import 'dart:async';
+import 'dart:collection';
+
+import 'package:analyzer/src/context/cache.dart';
+import 'package:analyzer/src/generated/engine.dart' hide AnalysisTask;
+import 'package:analyzer/src/generated/java_engine.dart';
+import 'package:analyzer/src/task/inputs.dart';
+import 'package:analyzer/src/task/manager.dart';
+import 'package:analyzer/task/model.dart';
+
+/**
+ * An object that is used to cause analysis to be performed until all of the
+ * required analysis information has been computed.
+ */
+class AnalysisDriver {
+ /**
+ * The task manager used to figure out how to compute analysis results.
+ */
+ final TaskManager taskManager;
+
+ /**
+ * The context in which analysis is to be performed.
+ */
+ final ExtendedAnalysisContext context;
+
+ /**
+ * The work order that was previously computed but that has not yet been
+ * completed.
+ */
+ WorkOrder currentWorkOrder;
+
+ /**
+ * The controller that is notified when a task is started.
+ */
+ StreamController<AnalysisTask> _onTaskStartedController;
+
+ /**
+ * The controller that is notified when a task is complete.
+ */
+ StreamController<AnalysisTask> _onTaskCompletedController;
+
+ /**
+ * Initialize a newly created driver to use the tasks know to the given
+ * [taskManager] to perform analysis in the given [context].
+ */
+ AnalysisDriver(this.taskManager, this.context) {
+ _onTaskStartedController = new StreamController.broadcast();
+ _onTaskCompletedController = new StreamController.broadcast();
+ }
+
+ /**
+ * The stream that is notified when a task is complete.
+ */
+ Stream<AnalysisTask> get onTaskCompleted => _onTaskCompletedController.stream;
+
+ /**
+ * The stream that is notified when a task is started.
+ */
+ Stream<AnalysisTask> get onTaskStarted => _onTaskStartedController.stream;
+
+ /**
+ * Perform work until the given [result] has been computed for the given
+ * [target].
+ */
+ void computeResult(AnalysisTarget target, ResultDescriptor result) {
+ WorkOrder workOrder = createWorkOrderForResult(target, result);
+ if (workOrder != null) {
+ while (workOrder.moveNext()) {
+ performWorkItem(workOrder.current);
+ }
+ }
+ }
+
+ /**
+ * Return the work order describing the work that should be getting worked on,
+ * or `null` if there is currently no work to be done.
+ */
+ WorkOrder createNextWorkOrder() {
+ //
+ // TODO(brianwilkerson) This is an inefficient implementation. We need to
+ // port over the concept of the WorkManager to manage the list of sources
+ // for which some work needs to be performed so that we do not waste time
+ // repeatedly looking at the same completed sources to see whether there is
+ // work that needs to be done.
+ //
+ for (AnalysisTarget target in context.priorityTargets) {
+ WorkOrder workOrder = createWorkOrderForTarget(target, true);
+ if (workOrder != null) {
+ return workOrder;
+ }
+ }
+ // TODO(brianwilkerson) Add a third priority, corresponding to
+ // AnalysisContextImpl._pendingFutureSources to support code completion.
+ for (AnalysisTarget target in context.explicitTargets) {
+ WorkOrder workOrder = createWorkOrderForTarget(target, false);
+ if (workOrder != null) {
+ return workOrder;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Create a work order that will produce the given [result] for the given
+ * [target]. Return the work order that was created, or `null` if the result
+ * has already been computed.
+ */
+ WorkOrder createWorkOrderForResult(
+ AnalysisTarget target, ResultDescriptor result) {
+ CacheEntry entry = context.getCacheEntry(target);
+ CacheState state = entry.getState(result);
+ if (state == CacheState.VALID ||
+ state == CacheState.ERROR ||
+ state == CacheState.IN_PROCESS) {
+ return null;
+ }
+ return new WorkOrder(taskManager,
+ new WorkItem(context, target, taskManager.findTask(target, result)));
+ }
+
+ /**
+ * Create a work order that will produce the required analysis results for
+ * the given [target]. If [isPriority] is true, then the target is a priority
+ * target. Return the work order that was created, or `null` if there is no
+ * further work that needs to be done for the given target.
+ */
+ WorkOrder createWorkOrderForTarget(AnalysisTarget target, bool isPriority) {
+ for (ResultDescriptor result in taskManager.generalResults) {
+ WorkOrder workOrder = createWorkOrderForResult(target, result);
+ if (workOrder != null) {
+ return workOrder;
+ }
+ }
+ if (isPriority) {
+ for (ResultDescriptor result in taskManager.priorityResults) {
+ WorkOrder workOrder = createWorkOrderForResult(target, result);
+ if (workOrder != null) {
+ return workOrder;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Perform the next analysis task, and return `true` if there is more work to
+ * be done in order to compute all of the required analysis information.
+ */
+ bool performAnalysisTask() {
+ //
+ // TODO(brianwilkerson) This implementaiton does not allow us to prioritize
+ // work across contexts. What we need is a way for an external client to ask
+ // to have all priority files analyzed for each context, then ask for normal
+ // files to be analyzed. There are a couple of ways to do this.
+ //
+ // First, we could add a "bool priorityOnly" parameter to this method and
+ // return null here when it is true.
+ //
+ // Second, we could add a concept of a priority order and (externally) run
+ // through the priorities from highest to lowest. That would be a nice
+ // generalization of the previous idea, but it isn't clear that we need the
+ // generality.
+ //
+ // Third, we could move performAnalysisTask and createNextWorkOrder to an
+ // object that knows about all sources in all contexts, so that instead of
+ // the client choosing a context and telling it do to some work, the client
+ // simply says "do some work", and the engine chooses the best thing to do
+ // next regardless of what context it's in.
+ //
+ if (currentWorkOrder == null) {
+ currentWorkOrder = createNextWorkOrder();
+ } else if (currentWorkOrder.moveNext()) {
+ performWorkItem(currentWorkOrder.current);
+ } else {
+ currentWorkOrder = createNextWorkOrder();
+ }
+ return currentWorkOrder != null;
+ }
+
+ /**
+ * Perform the given work item.
+ */
+ void performWorkItem(WorkItem item) {
+ if (item.exception != null) {
+ // Mark all of the results that the task would have computed as being in
+ // ERROR with the exception recorded on the work item.
+ CacheEntry targetEntry = context.getCacheEntry(item.target);
+ targetEntry.exception = item.exception;
+ for (ResultDescriptor result in item.descriptor.results) {
+ targetEntry.setState(result, CacheState.ERROR);
+ }
+ return;
+ }
+ // Otherwise, perform the task.
+ AnalysisTask task = item.buildTask();
+ _onTaskStartedController.add(task);
+ task.perform();
+ CacheEntry entry = context.getCacheEntry(task.target);
+ if (task.caughtException == null) {
+ Map<ResultDescriptor, dynamic> outputs = task.outputs;
+ for (ResultDescriptor result in task.descriptor.results) {
+ // TODO(brianwilkerson) We could check here that a value was produced
+ // and throw an exception if not (unless we want to allow null values).
+ entry.setValue(result, outputs[result]);
+ }
+ } else {
+ entry.exception = task.caughtException;
+ for (ResultDescriptor result in task.descriptor.results) {
+ entry.setState(result, CacheState.ERROR);
+ }
+ }
+ _onTaskCompletedController.add(task);
+ }
+
+ /**
+ * Reset the state of the driver in response to a change in the state of one
+ * or more analysis targets. This will cause any analysis that was currently
+ * in process to be stopped and for analysis to resume based on the new state.
+ */
+ void reset() {
+ currentWorkOrder = null;
+ }
+}
+
+/**
+ * A place to define the behaviors that need to be added to
+ * [InternalAnalysisContext].
+ */
+abstract class ExtendedAnalysisContext implements InternalAnalysisContext {
+ List<AnalysisTarget> get explicitTargets;
+ List<AnalysisTarget> get priorityTargets;
+ CacheEntry getCacheEntry(AnalysisTarget target);
+}
+
+/**
+ * A description of a single anaysis task that can be performed to advance
+ * analysis.
+ */
+class WorkItem {
+ /**
+ * The context in which the task will be performed.
+ */
+ final ExtendedAnalysisContext context;
+
+ /**
+ * The target for which a task is to be performed.
+ */
+ final AnalysisTarget target;
+
+ /**
+ * A description of the task to be performed.
+ */
+ final TaskDescriptor descriptor;
+
+ /**
+ * An iterator used to iterate over the descriptors of the inputs to the task,
+ * or `null` if all of the inputs have been collected and the task can be
+ * created.
+ */
+ TaskInputBuilder builder;
+
+ /**
+ * The inputs to the task that have been computed.
+ */
+ Map<String, dynamic> inputs;
+
+ /**
+ * The exception that was found while trying to populate the inputs. If this
+ * field is non-`null`, then the task cannot be performed and all of the
+ * results that this task would have computed need to be marked as being in
+ * ERROR with this exception.
+ */
+ CaughtException exception = null;
+
+ /**
+ * Initialize a newly created work item to compute the inputs for the task
+ * described by the given descriptor.
+ */
+ WorkItem(this.context, this.target, this.descriptor) {
+ Map<String, TaskInput> inputDescriptors =
+ descriptor.createTaskInputs(target);
+ builder = new TopLevelTaskInputBuilder(inputDescriptors);
+ if (!builder.moveNext()) {
+ builder = null;
+ }
+ inputs = new HashMap<String, dynamic>();
+ }
+
+ /**
+ * Build the task represented by this work item.
+ */
+ AnalysisTask buildTask() {
+ if (builder != null) {
+ throw new StateError("some inputs have not been computed");
+ }
+ return descriptor.createTask(context, target, inputs);
+ }
+
+ /**
+ * Gather all of the inputs needed to perform the task.
+ *
+ * If at least one of the inputs have not yet been computed, return a work
+ * item that can be used to generate that input to indicate that the caller
+ * should perform the returned item's task before returning to gathering
+ * inputs for this item's task.
+ *
+ * If all of the inputs have been gathered, return `null` to indicate that the
+ * client should build and perform the task. A value of `null` will also be
+ * returned if some of the inputs cannot be computed and the task cannot be
+ * performed. Callers can differentiate between these cases by checking the
+ * [exception] field. If the field is `null`, then the task can be performed;
+ * if the field is non-`null` then the task cannot be performed and all of the
+ * tasks' results should be marked as being in ERROR.
+ */
+ WorkItem gatherInputs(TaskManager taskManager) {
+ while (builder != null) {
+ //
+ // TODO(brianwilkerson) Capture information about which inputs were used
+ // to compute the results. This information can later be used to compute
+ // which results depend on a given result, and hence which results need to
+ // be invalidated when one result is invalidated.
+ //
+ AnalysisTarget inputTarget = builder.currentTarget;
+ ResultDescriptor inputResult = builder.currentResult;
+ CacheEntry inputEntry = context.getCacheEntry(inputTarget);
+ CacheState inputState = inputEntry.getState(inputResult);
+ if (inputState == CacheState.ERROR) {
+ exception = inputEntry.exception;
+ return null;
+ } else if (inputState == CacheState.IN_PROCESS) {
+ //
+ // TODO(brianwilkerson) Implement this case.
+ //
+ // One possibility would be to return a WorkItem that would perform a
+ // no-op task in order to cause us to come back to this work item on the
+ // next iteration. It would be more efficient, in general, to push this
+ // input onto a waiting list and proceed to the next input so that work
+ // could proceed, but given that the only result that can currently be
+ // IN_PROCESS is CONTENT, I don't know that it's worth the extra effort
+ // to implement the general solution at this point.
+ //
+ } else if (inputState != CacheState.VALID) {
+ try {
+ TaskDescriptor descriptor =
+ taskManager.findTask(inputTarget, inputResult);
+ return new WorkItem(context, inputTarget, descriptor);
+ } on AnalysisException catch (exception, stackTrace) {
+ this.exception = new CaughtException(exception, stackTrace);
+ return null;
+ }
+ }
+ builder.currentValue = inputEntry.getValue(inputResult);
+ if (!builder.moveNext()) {
+ inputs = builder.inputValue;
+ builder = null;
+ }
+ }
+ return null;
+ }
+}
+
+/**
+ * A description of the work to be done to compute a desired analysis result.
+ * The class implements a lazy depth-first traversal of the work item's input.
+ */
+class WorkOrder implements Iterator<WorkItem> {
+ /**
+ * The task manager used to build work items.
+ */
+ final TaskManager taskManager;
+
+ /**
+ * A list containing the work items that are being prepared for being worked.
+ */
+ final List<WorkItem> pendingItems = <WorkItem>[];
+
+ /**
+ * The current work item.
+ */
+ WorkItem currentItem;
+
+ /**
+ * Initialize a newly created work order to compute the result described by
+ * the given work item.
+ */
+ WorkOrder(this.taskManager, WorkItem item) {
+ pendingItems.add(item);
+ }
+
+ @override
+ WorkItem get current {
+ return currentItem;
+ }
+
+ @override
+ bool moveNext() {
+ if (pendingItems.isEmpty) {
+ currentItem = null;
+ return false;
+ }
+ currentItem = pendingItems.removeLast();
+ WorkItem childItem = currentItem.gatherInputs(taskManager);
+ while (childItem != null) {
+ pendingItems.add(currentItem);
+ currentItem = childItem;
+ childItem = currentItem.gatherInputs(taskManager);
+ }
+ return true;
+ }
+}
diff --git a/pkg/analyzer/lib/src/task/general.dart b/pkg/analyzer/lib/src/task/general.dart
index 5cb31ed..0905771 100644
--- a/pkg/analyzer/lib/src/task/general.dart
+++ b/pkg/analyzer/lib/src/task/general.dart
@@ -17,11 +17,8 @@
/**
* The task descriptor describing this kind of task.
*/
- static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
- 'GET_CONTENT',
- createTask,
- buildInputs,
- <ResultDescriptor>[CONTENT, MODIFICATION_TIME]);
+ static final TaskDescriptor DESCRIPTOR = new TaskDescriptor('GET_CONTENT',
+ createTask, buildInputs, <ResultDescriptor>[CONTENT, MODIFICATION_TIME]);
/**
* Initialize a newly created task to access the content of the source
@@ -54,8 +51,8 @@
* Create a [GetContentTask] based on the given [target] in the given
* [context].
*/
- static GetContentTask createTask(AnalysisContext context,
- AnalysisTarget target) {
+ static GetContentTask createTask(
+ AnalysisContext context, AnalysisTarget target) {
return new GetContentTask(context, target);
}
}
diff --git a/pkg/analyzer/lib/src/task/inputs.dart b/pkg/analyzer/lib/src/task/inputs.dart
index d99055f..bddcfc4 100644
--- a/pkg/analyzer/lib/src/task/inputs.dart
+++ b/pkg/analyzer/lib/src/task/inputs.dart
@@ -271,8 +271,8 @@
* inputs. The task inputs to be built are specified by a table mapping the name
* of the input to the task used to access the input's value.
*/
-class TopLevelTaskInputBuilder implements TaskInputBuilder<Map<String, Object>>
- {
+class TopLevelTaskInputBuilder
+ implements TaskInputBuilder<Map<String, Object>> {
/**
* The descriptors describing the inputs to be built.
*/
diff --git a/pkg/analyzer/lib/src/task/model.dart b/pkg/analyzer/lib/src/task/model.dart
index 36878d3..05a922b 100644
--- a/pkg/analyzer/lib/src/task/model.dart
+++ b/pkg/analyzer/lib/src/task/model.dart
@@ -11,8 +11,8 @@
/**
* A concrete implementation of a [ContributionPoint].
*/
-class ContributionPointImpl<V> extends ResultDescriptorImpl<V> implements
- ContributionPoint<V> {
+class ContributionPointImpl<V> extends ResultDescriptorImpl<V>
+ implements ContributionPoint<V> {
/**
* The results that contribute to this result.
*/
@@ -97,8 +97,8 @@
* and produces the given [results]. The [buildTask] will be used to create
* the instance of [AnalysisTask] thusly described.
*/
- TaskDescriptorImpl(this.name, this.buildTask, this.createTaskInputs,
- this.results);
+ TaskDescriptorImpl(
+ this.name, this.buildTask, this.createTaskInputs, this.results);
@override
AnalysisTask createTask(AnalysisContext context, AnalysisTarget target,
diff --git a/pkg/analyzer/lib/src/task/task_dart.dart b/pkg/analyzer/lib/src/task/task_dart.dart
index 2ea6b9a..5a3491b 100644
--- a/pkg/analyzer/lib/src/task/task_dart.dart
+++ b/pkg/analyzer/lib/src/task/task_dart.dart
@@ -40,8 +40,8 @@
* the given [source] in the given [library] based on the compilation [unit]
* that was parsed.
*/
- BuildUnitElementTask(InternalAnalysisContext context, this.source,
- this.library, this.unit)
+ BuildUnitElementTask(
+ InternalAnalysisContext context, this.source, this.library, this.unit)
: super(context);
@override
diff --git a/pkg/analyzer/lib/src/util/lru_map.dart b/pkg/analyzer/lib/src/util/lru_map.dart
new file mode 100644
index 0000000..38ef8ff
--- /dev/null
+++ b/pkg/analyzer/lib/src/util/lru_map.dart
@@ -0,0 +1,63 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library engine.utilities.lru_cache;
+
+import 'dart:collection';
+
+/**
+ * This handler is notified when an item is evicted from the cache.
+ */
+typedef EvictionHandler<K, V>(K key, V value);
+
+/**
+ * A hash-table based cache implementation.
+ *
+ * When it reaches the specified number of items, the item that has not been
+ * accessed (both get and put) recently is evicted.
+ */
+class LRUMap<K, V> {
+ final LinkedHashMap<K, V> _map = new LinkedHashMap<K, V>();
+ final int _maxSize;
+ final EvictionHandler _handler;
+
+ LRUMap(this._maxSize, [this._handler]);
+
+ /**
+ * Returns the value for the given [key] or null if [key] is not
+ * in the cache.
+ */
+ V get(K key) {
+ V value = _map.remove(key);
+ if (value != null) {
+ _map[key] = value;
+ }
+ return value;
+ }
+
+ /**
+ * Associates the [key] with the given [value].
+ *
+ * If the cache is full, an item that has not been accessed recently is
+ * evicted.
+ */
+ void put(K key, V value) {
+ _map.remove(key);
+ _map[key] = value;
+ if (_map.length > _maxSize) {
+ K evictedKey = _map.keys.first;
+ V evictedValue = _map.remove(evictedKey);
+ if (_handler != null) {
+ _handler(evictedKey, evictedValue);
+ }
+ }
+ }
+
+ /**
+ * Removes the association for the given [key].
+ */
+ void remove(K key) {
+ _map.remove(key);
+ }
+}
diff --git a/pkg/analyzer/lib/task/dart.dart b/pkg/analyzer/lib/task/dart.dart
index 4b016fe..2bfbdc8 100644
--- a/pkg/analyzer/lib/task/dart.dart
+++ b/pkg/analyzer/lib/task/dart.dart
@@ -27,7 +27,8 @@
* The result is only available for targets representing a Dart compilation unit.
*/
final ResultDescriptor<CompilationUnitElement> COMPILATION_UNIT_ELEMENT =
- new ResultDescriptor<CompilationUnitElement>('COMPILATION_UNIT_ELEMENT', null);
+ new ResultDescriptor<CompilationUnitElement>(
+ 'COMPILATION_UNIT_ELEMENT', null);
/**
* The sources of the libraries that are exported from a library.
@@ -38,7 +39,8 @@
* The result is only available for targets representing a Dart library.
*/
final ResultDescriptor<List<Source>> EXPORTED_LIBRARIES =
- new ResultDescriptor<List<Source>>('EXPORTED_LIBRARIES', Source.EMPTY_ARRAY);
+ new ResultDescriptor<List<Source>>(
+ 'EXPORTED_LIBRARIES', Source.EMPTY_ARRAY);
/**
* The sources of the libraries that are imported into a library.
@@ -49,7 +51,8 @@
* The result is only available for targets representing a Dart library.
*/
final ResultDescriptor<List<Source>> IMPORTED_LIBRARIES =
- new ResultDescriptor<List<Source>>('IMPORTED_LIBRARIES', Source.EMPTY_ARRAY);
+ new ResultDescriptor<List<Source>>(
+ 'IMPORTED_LIBRARIES', Source.EMPTY_ARRAY);
/**
* The sources of the parts that are included in a library.
@@ -71,8 +74,7 @@
*/
final ResultDescriptor<List<AnalysisError>> PARSE_ERRORS =
new ResultDescriptor<List<AnalysisError>>(
- 'PARSE_ERRORS',
- AnalysisError.NO_ERRORS,
+ 'PARSE_ERRORS', AnalysisError.NO_ERRORS,
contributesTo: ANALYSIS_ERRORS);
/**
@@ -94,9 +96,7 @@
*/
final ResultDescriptor<List<AnalysisError>> SCAN_ERRORS =
new ResultDescriptor<List<AnalysisError>>(
- 'SCAN_ERRORS',
- AnalysisError.NO_ERRORS,
- contributesTo: ANALYSIS_ERRORS);
+ 'SCAN_ERRORS', AnalysisError.NO_ERRORS, contributesTo: ANALYSIS_ERRORS);
/**
* The token stream produced while scanning a compilation unit.
diff --git a/pkg/analyzer/lib/task/model.dart b/pkg/analyzer/lib/task/model.dart
index 3fd8ddb..48e616d 100644
--- a/pkg/analyzer/lib/task/model.dart
+++ b/pkg/analyzer/lib/task/model.dart
@@ -154,8 +154,7 @@
} on AnalysisException catch (exception, stackTrace) {
caughtException = new CaughtException(exception, stackTrace);
AnalysisEngine.instance.logger.logInformation(
- "Task failed: ${description}",
- caughtException);
+ "Task failed: ${description}", caughtException);
}
}
@@ -170,6 +169,18 @@
*/
void _safelyPerform() {
try {
+ //
+ // Report that this task is being performed.
+ //
+ String contextName = context.name;
+ if (contextName == null) {
+ contextName = 'unnamed';
+ }
+ AnalysisEngine.instance.instrumentationService.logAnalysisTask(
+ contextName, description);
+ //
+ // Gather statistics on the performance of the task.
+ //
int count = countMap[runtimeType];
countMap[runtimeType] = count == null ? 1 : count + 1;
Stopwatch stopwatch = stopwatchMap[runtimeType];
@@ -178,6 +189,9 @@
stopwatchMap[runtimeType] = stopwatch;
}
stopwatch.start();
+ //
+ // Actually perform the task.
+ //
try {
internalPerform();
} finally {
@@ -250,8 +264,8 @@
* the instance of [AnalysisTask] thusly described.
*/
factory TaskDescriptor(String name, BuildTask buildTask,
- CreateTaskInputs inputBuilder, List<ResultDescriptor> results) =
- TaskDescriptorImpl;
+ CreateTaskInputs inputBuilder,
+ List<ResultDescriptor> results) = TaskDescriptorImpl;
/**
* Return the builder used to build the inputs to the task.
diff --git a/pkg/analyzer/test/cancelable_future_test.dart b/pkg/analyzer/test/cancelable_future_test.dart
index 825945d..c9d88f2 100644
--- a/pkg/analyzer/test/cancelable_future_test.dart
+++ b/pkg/analyzer/test/cancelable_future_test.dart
@@ -70,7 +70,8 @@
Future test_delayed_noCallback() {
DateTime start = new DateTime.now();
- return new CancelableFuture.delayed(new Duration(seconds: 1)).then((result) {
+ return new CancelableFuture.delayed(new Duration(seconds: 1)).then(
+ (result) {
DateTime end = new DateTime.now();
expect(result, isNull);
expect(end.difference(start).inMilliseconds > 900, isTrue);
@@ -146,7 +147,9 @@
int cancelCount = 0;
void setUp() {
- completer = new CancelableCompleter<Object>(() { cancelCount++; });
+ completer = new CancelableCompleter<Object>(() {
+ cancelCount++;
+ });
}
void test_initialState() {
@@ -158,16 +161,24 @@
// As with an ordinary Completer, calling complete() (or completeError)
// after calling complete() should throw an exception.
completer.complete();
- expect(() { completer.complete(); }, throws);
- expect(() { completer.completeError(new Object()); }, throws);
+ expect(() {
+ completer.complete();
+ }, throws);
+ expect(() {
+ completer.completeError(new Object());
+ }, throws);
}
void test_complete_after_completeError() {
// As with an ordinary Completer, calling complete() (or completeError)
// after calling completeError() should throw an exception.
completer.completeError(new Object());
- expect(() { completer.complete(); }, throws);
- expect(() { completer.completeError(new Object()); }, throws);
+ expect(() {
+ completer.complete();
+ }, throws);
+ expect(() {
+ completer.completeError(new Object());
+ }, throws);
// Now absorb the error that's in the completer's future.
completer.future.catchError((_) => null);
}
@@ -394,4 +405,4 @@
expect(cancelCount, 1);
});
}
-}
\ No newline at end of file
+}
diff --git a/pkg/analyzer/test/enum_test.dart b/pkg/analyzer/test/enum_test.dart
index 3fcf557..854f217b 100644
--- a/pkg/analyzer/test/enum_test.dart
+++ b/pkg/analyzer/test/enum_test.dart
@@ -24,113 +24,111 @@
runReflectiveTests(EnumTest);
}
-
@reflectiveTest
class EnumTest {
void test_AnalysisLevel() {
new EnumTester<AnalysisLevel>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_AssignmentKind() {
new EnumTester<AssignmentKind>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_CacheState() {
new EnumTester<CacheState>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_ElementKind() {
new EnumTester<ElementKind>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_ErrorProperty() {
new EnumTester<ErrorProperty>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_ErrorSeverity() {
new EnumTester<ErrorSeverity>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_ErrorType() {
new EnumTester<ErrorType>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_html_TokenType() {
new EnumTester<html.TokenType>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_INIT_STATE() {
new EnumTester<INIT_STATE>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_Modifier() {
new EnumTester<Modifier>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_ParameterKind() {
new EnumTester<ParameterKind>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_RedirectingConstructorKind() {
new EnumTester<RedirectingConstructorKind>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_RetentionPriority() {
new EnumTester<RetentionPriority>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_SourceKind() {
new EnumTester<SourceKind>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_SourcePriority() {
new EnumTester<SourcePriority>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_UriKind() {
new EnumTester<UriKind>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
void test_WrapperKind() {
new EnumTester<WrapperKind>()
- ..check_getters()
- ..check_explicit_values();
+ ..check_getters()
+ ..check_explicit_values();
}
}
-
/**
* Helper class for testing invariants of enumerated types.
*/
diff --git a/pkg/analyzer/test/error_test.dart b/pkg/analyzer/test/error_test.dart
index 9724fde..b396624 100644
--- a/pkg/analyzer/test/error_test.dart
+++ b/pkg/analyzer/test/error_test.dart
@@ -18,40 +18,34 @@
});
test("an error on the first line", () {
- expect(
- errorsForFile('void foo;\n'),
+ expect(errorsForFile('void foo;\n'),
equals("Error in test.dart: Variables cannot have a type of 'void'\n"));
});
test("an error on the last line", () {
- expect(
- errorsForFile('\nvoid foo;'),
+ expect(errorsForFile('\nvoid foo;'),
equals("Error in test.dart: Variables cannot have a type of 'void'\n"));
});
test("an error in the middle", () {
- expect(
- errorsForFile('\nvoid foo;\n'),
+ expect(errorsForFile('\nvoid foo;\n'),
equals("Error in test.dart: Variables cannot have a type of 'void'\n"));
});
var veryLongString = new List.filled(107, ' ').join('');
test("an error at the end of a very long line", () {
- expect(
- errorsForFile('$veryLongString void foo;'),
+ expect(errorsForFile('$veryLongString void foo;'),
equals("Error in test.dart: Variables cannot have a type of 'void'\n"));
});
test("an error at the beginning of a very long line", () {
- expect(
- errorsForFile('void foo; $veryLongString'),
+ expect(errorsForFile('void foo; $veryLongString'),
equals("Error in test.dart: Variables cannot have a type of 'void'\n"));
});
test("an error in the middle of a very long line", () {
- expect(
- errorsForFile('$veryLongString void foo;$veryLongString'),
+ expect(errorsForFile('$veryLongString void foo;$veryLongString'),
equals("Error in test.dart: Variables cannot have a type of 'void'\n"));
});
}
diff --git a/pkg/analyzer/test/file_system/memory_file_system_test.dart b/pkg/analyzer/test/file_system/memory_file_system_test.dart
index 2dd95de..b17d39e 100644
--- a/pkg/analyzer/test/file_system/memory_file_system_test.dart
+++ b/pkg/analyzer/test/file_system/memory_file_system_test.dart
@@ -14,11 +14,9 @@
import 'package:unittest/unittest.dart';
import 'package:watcher/watcher.dart';
-
var _isFile = new isInstanceOf<File>();
-var _isFolder = new isInstanceOf<Folder>();
var _isFileSystemException = new isInstanceOf<FileSystemException>();
-
+var _isFolder = new isInstanceOf<Folder>();
main() {
groupSep = ' | ';
@@ -34,13 +32,11 @@
var exception = new FileSystemException('/my/path', 'my message');
expect(exception.path, '/my/path');
expect(exception.message, 'my message');
- expect(
- exception.toString(),
+ expect(exception.toString(),
'FileSystemException(path=/my/path; message=my message)');
});
group('Watch', () {
-
Future delayed(computation()) {
return new Future.delayed(Duration.ZERO, computation);
}
@@ -377,6 +373,28 @@
});
});
+ group('getChildAssumingFolder', () {
+ test('does not exist', () {
+ Folder child = folder.getChildAssumingFolder('foldername');
+ expect(child, isNotNull);
+ expect(child.exists, isFalse);
+ });
+
+ test('file', () {
+ provider.newFile('/foo/bar/foldername', 'content');
+ Folder child = folder.getChildAssumingFolder('foldername');
+ expect(child, isNotNull);
+ expect(child.exists, isFalse);
+ });
+
+ test('folder', () {
+ provider.newFolder('/foo/bar/foldername');
+ Folder child = folder.getChildAssumingFolder('foldername');
+ expect(child, isNotNull);
+ expect(child.exists, isTrue);
+ });
+ });
+
test('getChildren', () {
provider.newFile('/foo/bar/a.txt', 'aaa');
provider.newFolder('/foo/bar/bFolder');
diff --git a/pkg/analyzer/test/file_system/physical_resource_provider_test.dart b/pkg/analyzer/test/file_system/physical_resource_provider_test.dart
index 3ba46e8..69eaa11 100644
--- a/pkg/analyzer/test/file_system/physical_resource_provider_test.dart
+++ b/pkg/analyzer/test/file_system/physical_resource_provider_test.dart
@@ -14,12 +14,10 @@
import 'package:unittest/unittest.dart';
import 'package:watcher/watcher.dart';
-
var _isFile = new isInstanceOf<File>();
var _isFolder = new isInstanceOf<Folder>();
var _isFileSystemException = new isInstanceOf<FileSystemException>();
-
main() {
groupSep = ' | ';
@@ -37,7 +35,6 @@
});
group('Watch', () {
-
Future delayed(computation()) {
// Give the tests 1 second to detect the changes. While it may only
// take up to a few hundred ms, a whole second gives a good margin
@@ -293,6 +290,28 @@
});
});
+ group('getChildAssumingFolder', () {
+ test('does not exist', () {
+ Folder child = folder.getChildAssumingFolder('no-such-resource');
+ expect(child, isNotNull);
+ expect(child.exists, isFalse);
+ });
+
+ test('file', () {
+ new io.File(join(path, 'myFile')).createSync();
+ Folder child = folder.getChildAssumingFolder('myFile');
+ expect(child, isNotNull);
+ expect(child.exists, isFalse);
+ });
+
+ test('folder', () {
+ new io.Directory(join(path, 'myFolder')).createSync();
+ Folder child = folder.getChildAssumingFolder('myFolder');
+ expect(child, isNotNull);
+ expect(child.exists, isTrue);
+ });
+ });
+
test('getChildren', () {
// create 2 files and 1 folder
new io.File(join(path, 'a.txt')).createSync();
@@ -342,14 +361,11 @@
expect(folder.canonicalizePath('baz'), equals(join(path, 'baz')));
expect(folder.canonicalizePath(path2), equals(path2));
expect(folder.canonicalizePath(join('..', 'folder2')), equals(path2));
- expect(
- folder.canonicalizePath(join(path2, '..', 'folder3')),
+ expect(folder.canonicalizePath(join(path2, '..', 'folder3')),
equals(path3));
- expect(
- folder.canonicalizePath(join('.', 'baz')),
+ expect(folder.canonicalizePath(join('.', 'baz')),
equals(join(path, 'baz')));
- expect(
- folder.canonicalizePath(join(path2, '.', 'baz')),
+ expect(folder.canonicalizePath(join(path2, '.', 'baz')),
equals(join(path2, 'baz')));
});
});
diff --git a/pkg/analyzer/test/file_system/resource_uri_resolver_test.dart b/pkg/analyzer/test/file_system/resource_uri_resolver_test.dart
index c5eeed2..95b0ffa 100644
--- a/pkg/analyzer/test/file_system/resource_uri_resolver_test.dart
+++ b/pkg/analyzer/test/file_system/resource_uri_resolver_test.dart
@@ -9,7 +9,6 @@
import 'package:analyzer/src/generated/source.dart';
import 'package:unittest/unittest.dart';
-
main() {
groupSep = ' | ';
group('ResourceUriResolver', () {
diff --git a/pkg/analyzer/test/file_system/test_all.dart b/pkg/analyzer/test/file_system/test_all.dart
index e89490c..3bacc6c 100644
--- a/pkg/analyzer/test/file_system/test_all.dart
+++ b/pkg/analyzer/test/file_system/test_all.dart
@@ -7,11 +7,10 @@
import 'package:unittest/unittest.dart';
import 'memory_file_system_test.dart' as memory_file_system_test;
-import 'physical_resource_provider_test.dart' as
- physical_resource_provider_test;
+import 'physical_resource_provider_test.dart'
+ as physical_resource_provider_test;
import 'resource_uri_resolver_test.dart' as resource_uri_resolver_test;
-
/// Utility for manually running all tests.
main() {
groupSep = ' | ';
diff --git a/pkg/analyzer/test/generated/all_the_rest_test.dart b/pkg/analyzer/test/generated/all_the_rest_test.dart
index 0e9027e..845711d 100644
--- a/pkg/analyzer/test/generated/all_the_rest_test.dart
+++ b/pkg/analyzer/test/generated/all_the_rest_test.dart
@@ -43,7 +43,6 @@
import 'resolver_test.dart';
import 'test_support.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(ConstantEvaluatorTest);
@@ -82,15 +81,14 @@
ht.AbstractScanner newScanner(String input);
void test_tokenize_attribute() {
- _tokenize(
- "<html bob=\"one two\">",
- <Object>[
- ht.TokenType.LT,
- "html",
- "bob",
- ht.TokenType.EQ,
- "\"one two\"",
- ht.TokenType.GT]);
+ _tokenize("<html bob=\"one two\">", <Object>[
+ ht.TokenType.LT,
+ "html",
+ "bob",
+ ht.TokenType.EQ,
+ "\"one two\"",
+ ht.TokenType.GT
+ ]);
}
void test_tokenize_comment() {
@@ -106,15 +104,21 @@
}
void test_tokenize_declaration() {
- _tokenize(
- "<! foo ><html>",
- <Object>["<! foo >", ht.TokenType.LT, "html", ht.TokenType.GT]);
+ _tokenize("<! foo ><html>", <Object>[
+ "<! foo >",
+ ht.TokenType.LT,
+ "html",
+ ht.TokenType.GT
+ ]);
}
void test_tokenize_declaration_malformed() {
- _tokenize(
- "<! foo /><html>",
- <Object>["<! foo />", ht.TokenType.LT, "html", ht.TokenType.GT]);
+ _tokenize("<! foo /><html>", <Object>[
+ "<! foo />",
+ ht.TokenType.LT,
+ "html",
+ ht.TokenType.GT
+ ]);
}
void test_tokenize_directive_incomplete() {
@@ -122,9 +126,9 @@
}
void test_tokenize_directive_xml() {
- _tokenize(
- "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>",
- <Object>["<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"]);
+ _tokenize("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>", <Object>[
+ "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
+ ]);
}
void test_tokenize_directives_incomplete_with_newline() {
@@ -140,119 +144,122 @@
}
void test_tokenize_script_embedded_tags() {
- _tokenize(
- "<script> <p></p></script>",
- <Object>[
- ht.TokenType.LT,
- "script",
- ht.TokenType.GT,
- " <p></p>",
- ht.TokenType.LT_SLASH,
- "script",
- ht.TokenType.GT]);
+ _tokenize("<script> <p></p></script>", <Object>[
+ ht.TokenType.LT,
+ "script",
+ ht.TokenType.GT,
+ " <p></p>",
+ ht.TokenType.LT_SLASH,
+ "script",
+ ht.TokenType.GT
+ ]);
}
void test_tokenize_script_embedded_tags2() {
- _tokenize(
- "<script> <p></p><</script>",
- <Object>[
- ht.TokenType.LT,
- "script",
- ht.TokenType.GT,
- " <p></p><",
- ht.TokenType.LT_SLASH,
- "script",
- ht.TokenType.GT]);
+ _tokenize("<script> <p></p><</script>", <Object>[
+ ht.TokenType.LT,
+ "script",
+ ht.TokenType.GT,
+ " <p></p><",
+ ht.TokenType.LT_SLASH,
+ "script",
+ ht.TokenType.GT
+ ]);
}
void test_tokenize_script_embedded_tags3() {
- _tokenize(
- "<script> <p></p></</script>",
- <Object>[
- ht.TokenType.LT,
- "script",
- ht.TokenType.GT,
- " <p></p></",
- ht.TokenType.LT_SLASH,
- "script",
- ht.TokenType.GT]);
+ _tokenize("<script> <p></p></</script>", <Object>[
+ ht.TokenType.LT,
+ "script",
+ ht.TokenType.GT,
+ " <p></p></",
+ ht.TokenType.LT_SLASH,
+ "script",
+ ht.TokenType.GT
+ ]);
}
void test_tokenize_script_partial() {
- _tokenize(
- "<script> <p> ",
- <Object>[ht.TokenType.LT, "script", ht.TokenType.GT, " <p> "]);
+ _tokenize("<script> <p> ", <Object>[
+ ht.TokenType.LT,
+ "script",
+ ht.TokenType.GT,
+ " <p> "
+ ]);
}
void test_tokenize_script_partial2() {
- _tokenize(
- "<script> <p> <",
- <Object>[ht.TokenType.LT, "script", ht.TokenType.GT, " <p> <"]);
+ _tokenize("<script> <p> <", <Object>[
+ ht.TokenType.LT,
+ "script",
+ ht.TokenType.GT,
+ " <p> <"
+ ]);
}
void test_tokenize_script_partial3() {
- _tokenize(
- "<script> <p> </",
- <Object>[ht.TokenType.LT, "script", ht.TokenType.GT, " <p> </"]);
+ _tokenize("<script> <p> </", <Object>[
+ ht.TokenType.LT,
+ "script",
+ ht.TokenType.GT,
+ " <p> </"
+ ]);
}
void test_tokenize_script_ref() {
- _tokenize(
- "<script source='some.dart'/> <p>",
- <Object>[
- ht.TokenType.LT,
- "script",
- "source",
- ht.TokenType.EQ,
- "'some.dart'",
- ht.TokenType.SLASH_GT,
- " ",
- ht.TokenType.LT,
- "p",
- ht.TokenType.GT]);
+ _tokenize("<script source='some.dart'/> <p>", <Object>[
+ ht.TokenType.LT,
+ "script",
+ "source",
+ ht.TokenType.EQ,
+ "'some.dart'",
+ ht.TokenType.SLASH_GT,
+ " ",
+ ht.TokenType.LT,
+ "p",
+ ht.TokenType.GT
+ ]);
}
void test_tokenize_script_with_newline() {
- _tokenize2(
- "<script> <p>\n </script>",
- <Object>[
- ht.TokenType.LT,
- "script",
- ht.TokenType.GT,
- " <p>\n ",
- ht.TokenType.LT_SLASH,
- "script",
- ht.TokenType.GT],
- <int>[0, 13]);
+ _tokenize2("<script> <p>\n </script>", <Object>[
+ ht.TokenType.LT,
+ "script",
+ ht.TokenType.GT,
+ " <p>\n ",
+ ht.TokenType.LT_SLASH,
+ "script",
+ ht.TokenType.GT
+ ], <int>[0, 13]);
}
void test_tokenize_spaces_and_newlines() {
ht.Token token = _tokenize2(
" < html \n bob = 'joe\n' >\n <\np > one \r\n two <!-- \rfoo --> </ p > </ html > ",
<Object>[
- " ",
- ht.TokenType.LT,
- "html",
- "bob",
- ht.TokenType.EQ,
- "'joe\n'",
- ht.TokenType.GT,
- "\n ",
- ht.TokenType.LT,
- "p",
- ht.TokenType.GT,
- " one \r\n two ",
- "<!-- \rfoo -->",
- " ",
- ht.TokenType.LT_SLASH,
- "p",
- ht.TokenType.GT,
- " ",
- ht.TokenType.LT_SLASH,
- "html",
- ht.TokenType.GT,
- " "],
- <int>[0, 9, 21, 25, 28, 38, 49]);
+ " ",
+ ht.TokenType.LT,
+ "html",
+ "bob",
+ ht.TokenType.EQ,
+ "'joe\n'",
+ ht.TokenType.GT,
+ "\n ",
+ ht.TokenType.LT,
+ "p",
+ ht.TokenType.GT,
+ " one \r\n two ",
+ "<!-- \rfoo -->",
+ " ",
+ ht.TokenType.LT_SLASH,
+ "p",
+ ht.TokenType.GT,
+ " ",
+ ht.TokenType.LT_SLASH,
+ "html",
+ ht.TokenType.GT,
+ " "
+ ], <int>[0, 9, 21, 25, 28, 38, 49]);
token = token.next;
expect(token.offset, 1);
token = token.next;
@@ -262,51 +269,56 @@
}
void test_tokenize_string() {
- _tokenize(
- "<p bob=\"foo\">",
- <Object>[
- ht.TokenType.LT,
- "p",
- "bob",
- ht.TokenType.EQ,
- "\"foo\"",
- ht.TokenType.GT]);
+ _tokenize("<p bob=\"foo\">", <Object>[
+ ht.TokenType.LT,
+ "p",
+ "bob",
+ ht.TokenType.EQ,
+ "\"foo\"",
+ ht.TokenType.GT
+ ]);
}
void test_tokenize_string_partial() {
- _tokenize(
- "<p bob=\"foo",
- <Object>[ht.TokenType.LT, "p", "bob", ht.TokenType.EQ, "\"foo"]);
+ _tokenize("<p bob=\"foo", <Object>[
+ ht.TokenType.LT,
+ "p",
+ "bob",
+ ht.TokenType.EQ,
+ "\"foo"
+ ]);
}
void test_tokenize_string_single_quote() {
- _tokenize(
- "<p bob='foo'>",
- <Object>[
- ht.TokenType.LT,
- "p",
- "bob",
- ht.TokenType.EQ,
- "'foo'",
- ht.TokenType.GT]);
+ _tokenize("<p bob='foo'>", <Object>[
+ ht.TokenType.LT,
+ "p",
+ "bob",
+ ht.TokenType.EQ,
+ "'foo'",
+ ht.TokenType.GT
+ ]);
}
void test_tokenize_string_single_quote_partial() {
- _tokenize(
- "<p bob='foo",
- <Object>[ht.TokenType.LT, "p", "bob", ht.TokenType.EQ, "'foo"]);
+ _tokenize("<p bob='foo", <Object>[
+ ht.TokenType.LT,
+ "p",
+ "bob",
+ ht.TokenType.EQ,
+ "'foo"
+ ]);
}
void test_tokenize_tag_begin_end() {
- _tokenize(
- "<html></html>",
- <Object>[
- ht.TokenType.LT,
- "html",
- ht.TokenType.GT,
- ht.TokenType.LT_SLASH,
- "html",
- ht.TokenType.GT]);
+ _tokenize("<html></html>", <Object>[
+ ht.TokenType.LT,
+ "html",
+ ht.TokenType.GT,
+ ht.TokenType.LT_SLASH,
+ "html",
+ ht.TokenType.GT
+ ]);
}
void test_tokenize_tag_begin_only() {
@@ -325,22 +337,21 @@
}
void test_tokenize_tags_wellformed() {
- _tokenize(
- "<html><p>one two</p></html>",
- <Object>[
- ht.TokenType.LT,
- "html",
- ht.TokenType.GT,
- ht.TokenType.LT,
- "p",
- ht.TokenType.GT,
- "one two",
- ht.TokenType.LT_SLASH,
- "p",
- ht.TokenType.GT,
- ht.TokenType.LT_SLASH,
- "html",
- ht.TokenType.GT]);
+ _tokenize("<html><p>one two</p></html>", <Object>[
+ ht.TokenType.LT,
+ "html",
+ ht.TokenType.GT,
+ ht.TokenType.LT,
+ "p",
+ ht.TokenType.GT,
+ "one two",
+ ht.TokenType.LT_SLASH,
+ "p",
+ ht.TokenType.GT,
+ ht.TokenType.LT_SLASH,
+ "html",
+ ht.TokenType.GT
+ ]);
}
/**
@@ -393,8 +404,8 @@
ht.Token _tokenize(String input, List<Object> expectedTokens) =>
_tokenize2(input, expectedTokens, <int>[0]);
- ht.Token _tokenize2(String input, List<Object> expectedTokens,
- List<int> expectedLineStarts) {
+ ht.Token _tokenize2(
+ String input, List<Object> expectedTokens, List<int> expectedLineStarts) {
ht.AbstractScanner scanner = newScanner(input);
scanner.passThroughElements = <String>["script"];
int count = 0;
@@ -456,7 +467,6 @@
}
}
-
@reflectiveTest
class ConstantEvaluatorTest extends ResolverTestCase {
void fail_constructor() {
@@ -827,21 +837,17 @@
NodeList<CompilationUnitMember> declarations = unit.declarations;
expect(declarations, hasLength(1));
CompilationUnitMember declaration = declarations[0];
- EngineTestCase.assertInstanceOf(
- (obj) => obj is TopLevelVariableDeclaration,
- TopLevelVariableDeclaration,
- declaration);
+ EngineTestCase.assertInstanceOf((obj) => obj is TopLevelVariableDeclaration,
+ TopLevelVariableDeclaration, declaration);
NodeList<VariableDeclaration> variables =
(declaration as TopLevelVariableDeclaration).variables.variables;
expect(variables, hasLength(1));
ConstantEvaluator evaluator = new ConstantEvaluator(
- source,
- (analysisContext as AnalysisContextImpl).typeProvider);
+ source, (analysisContext as AnalysisContextImpl).typeProvider);
return evaluator.evaluate(variables[0].initializer);
}
}
-
@reflectiveTest
class ConstantFinderTest extends EngineTestCase {
AstNode _node;
@@ -861,9 +867,7 @@
*/
void test_visitAnnotation_invocation() {
_node = AstFactory.annotation2(
- AstFactory.identifier3('A'),
- null,
- AstFactory.argumentList());
+ AstFactory.identifier3('A'), null, AstFactory.argumentList());
expect(_findAnnotations(), contains(_node));
}
@@ -938,14 +942,9 @@
ConstructorElement _setupConstructorDeclaration(String name, bool isConst) {
Keyword constKeyword = isConst ? Keyword.CONST : null;
- ConstructorDeclaration constructorDeclaration =
- AstFactory.constructorDeclaration2(
- constKeyword,
- null,
- null,
- name,
- AstFactory.formalParameterList(),
- null,
+ ConstructorDeclaration constructorDeclaration = AstFactory
+ .constructorDeclaration2(constKeyword, null, null, name,
+ AstFactory.formalParameterList(), null,
AstFactory.blockFunctionBody2());
ClassElement classElement = ElementFactory.classElement2(name);
ConstructorElement element =
@@ -961,23 +960,21 @@
AstFactory.typeName3(AstFactory.identifier3(name)));
}
- VariableElement _setupVariableDeclaration(String name, bool isConst,
- bool isInitialized) {
- VariableDeclaration variableDeclaration = isInitialized ?
- AstFactory.variableDeclaration2(name, AstFactory.integer(0)) :
- AstFactory.variableDeclaration(name);
+ VariableElement _setupVariableDeclaration(
+ String name, bool isConst, bool isInitialized) {
+ VariableDeclaration variableDeclaration = isInitialized
+ ? AstFactory.variableDeclaration2(name, AstFactory.integer(0))
+ : AstFactory.variableDeclaration(name);
SimpleIdentifier identifier = variableDeclaration.name;
VariableElement element = ElementFactory.localVariableElement(identifier);
identifier.staticElement = element;
AstFactory.variableDeclarationList2(
- isConst ? Keyword.CONST : null,
- [variableDeclaration]);
+ isConst ? Keyword.CONST : null, [variableDeclaration]);
_node = variableDeclaration;
return element;
}
}
-
@reflectiveTest
class ConstantValueComputerTest extends ResolverTestCase {
void test_annotation_constConstructor() {
@@ -1221,11 +1218,9 @@
NodeList<CompilationUnitMember> libraryMembers = libraryUnit.declarations;
expect(libraryMembers, hasLength(2));
_validate(
- true,
- (libraryMembers[0] as TopLevelVariableDeclaration).variables);
+ true, (libraryMembers[0] as TopLevelVariableDeclaration).variables);
_validate(
- true,
- (libraryMembers[1] as TopLevelVariableDeclaration).variables);
+ true, (libraryMembers[1] as TopLevelVariableDeclaration).variables);
NodeList<CompilationUnitMember> partMembers = libraryUnit.declarations;
expect(partMembers, hasLength(2));
_validate(true, (partMembers[0] as TopLevelVariableDeclaration).variables);
@@ -1441,13 +1436,11 @@
void test_fromEnvironment_bool_default_overridden() {
expect(
- _assertValidBool(_check_fromEnvironment_bool("false", "true")),
- false);
+ _assertValidBool(_check_fromEnvironment_bool("false", "true")), false);
}
void test_fromEnvironment_bool_default_parseError() {
- expect(
- _assertValidBool(_check_fromEnvironment_bool("parseError", "true")),
+ expect(_assertValidBool(_check_fromEnvironment_bool("parseError", "true")),
true);
}
@@ -1460,8 +1453,7 @@
}
void test_fromEnvironment_bool_parseError() {
- expect(
- _assertValidBool(_check_fromEnvironment_bool("parseError", null)),
+ expect(_assertValidBool(_check_fromEnvironment_bool("parseError", null)),
false);
}
@@ -1479,8 +1471,7 @@
void test_fromEnvironment_int_default_parseError() {
expect(
- _assertValidInt(_check_fromEnvironment_int("parseError", "123")),
- 123);
+ _assertValidInt(_check_fromEnvironment_int("parseError", "123")), 123);
}
void test_fromEnvironment_int_default_undeclared() {
@@ -1508,14 +1499,12 @@
}
void test_fromEnvironment_string_default_overridden() {
- expect(
- _assertValidString(_check_fromEnvironment_string("abc", "'def'")),
+ expect(_assertValidString(_check_fromEnvironment_string("abc", "'def'")),
"abc");
}
void test_fromEnvironment_string_default_undeclared() {
- expect(
- _assertValidString(_check_fromEnvironment_string(null, "'def'")),
+ expect(_assertValidString(_check_fromEnvironment_string(null, "'def'")),
"def");
}
@@ -1525,8 +1514,7 @@
void test_fromEnvironment_string_ok() {
expect(
- _assertValidString(_check_fromEnvironment_string("abc", null)),
- "abc");
+ _assertValidString(_check_fromEnvironment_string("abc", null)), "abc");
}
void test_fromEnvironment_string_undeclared() {
@@ -1551,23 +1539,19 @@
_assertIntField(fields, "k", 13);
}
- void
- test_instanceCreationExpression_computedField_namedOptionalWithDefault() {
+ void test_instanceCreationExpression_computedField_namedOptionalWithDefault() {
_checkInstanceCreationOptionalParams(false, true, true);
}
- void
- test_instanceCreationExpression_computedField_namedOptionalWithoutDefault() {
+ void test_instanceCreationExpression_computedField_namedOptionalWithoutDefault() {
_checkInstanceCreationOptionalParams(false, true, false);
}
- void
- test_instanceCreationExpression_computedField_unnamedOptionalWithDefault() {
+ void test_instanceCreationExpression_computedField_unnamedOptionalWithDefault() {
_checkInstanceCreationOptionalParams(false, false, true);
}
- void
- test_instanceCreationExpression_computedField_unnamedOptionalWithoutDefault() {
+ void test_instanceCreationExpression_computedField_unnamedOptionalWithoutDefault() {
_checkInstanceCreationOptionalParams(false, false, false);
}
@@ -1660,23 +1644,19 @@
_assertIntField(fields, "x", 42);
}
- void
- test_instanceCreationExpression_fieldFormalParameter_namedOptionalWithDefault() {
+ void test_instanceCreationExpression_fieldFormalParameter_namedOptionalWithDefault() {
_checkInstanceCreationOptionalParams(true, true, true);
}
- void
- test_instanceCreationExpression_fieldFormalParameter_namedOptionalWithoutDefault() {
+ void test_instanceCreationExpression_fieldFormalParameter_namedOptionalWithoutDefault() {
_checkInstanceCreationOptionalParams(true, true, false);
}
- void
- test_instanceCreationExpression_fieldFormalParameter_unnamedOptionalWithDefault() {
+ void test_instanceCreationExpression_fieldFormalParameter_unnamedOptionalWithDefault() {
_checkInstanceCreationOptionalParams(true, false, true);
}
- void
- test_instanceCreationExpression_fieldFormalParameter_unnamedOptionalWithoutDefault() {
+ void test_instanceCreationExpression_fieldFormalParameter_unnamedOptionalWithoutDefault() {
_checkInstanceCreationOptionalParams(true, false, false);
}
@@ -1710,8 +1690,8 @@
const A.a2() : x = 5;
final int x;
}''');
- Map<String, DartObjectImpl> aFields =
- _assertType(_evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
+ Map<String, DartObjectImpl> aFields = _assertType(
+ _evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
_assertIntField(aFields, 'x', 5);
}
@@ -1723,8 +1703,8 @@
const A.a2(x) : y = x + 10;
final int y;
}''');
- Map<String, DartObjectImpl> aFields =
- _assertType(_evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
+ Map<String, DartObjectImpl> aFields = _assertType(
+ _evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
_assertIntField(aFields, 'y', 111);
}
@@ -1750,8 +1730,8 @@
const A.a2([x = 100]) : y = x + 10;
final int y;
}''');
- Map<String, DartObjectImpl> aFields =
- _assertType(_evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
+ Map<String, DartObjectImpl> aFields = _assertType(
+ _evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
_assertIntField(aFields, 'y', 110);
}
@@ -1765,8 +1745,7 @@
// error), but we shouldn't crash, and we should figure
// out that it evaluates to an instance of class A.
_assertType(
- _evaluateInstanceCreationExpression(compilationUnit, "foo"),
- "A");
+ _evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
}
void test_instanceCreationExpression_nonFactoryRedirect_toNonConst() {
@@ -1780,8 +1759,7 @@
// error), but we shouldn't crash, and we should figure
// out that it evaluates to an instance of class A.
_assertType(
- _evaluateInstanceCreationExpression(compilationUnit, "foo"),
- "A");
+ _evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
}
void test_instanceCreationExpression_nonFactoryRedirect_unnamed() {
@@ -1792,8 +1770,8 @@
const A() : x = 5;
final int x;
}''');
- Map<String, DartObjectImpl> aFields =
- _assertType(_evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
+ Map<String, DartObjectImpl> aFields = _assertType(
+ _evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
_assertIntField(aFields, 'x', 5);
}
@@ -1807,8 +1785,7 @@
const B();
}''');
_assertType(
- _evaluateInstanceCreationExpression(compilationUnit, "foo"),
- "B");
+ _evaluateInstanceCreationExpression(compilationUnit, "foo"), "B");
}
void test_instanceCreationExpression_redirect_cycle() {
@@ -1966,15 +1943,16 @@
expect(value.value, "void");
}
- Map<String, DartObjectImpl> _assertFieldType(Map<String,
- DartObjectImpl> fields, String fieldName, String expectedType) {
+ Map<String, DartObjectImpl> _assertFieldType(
+ Map<String, DartObjectImpl> fields, String fieldName,
+ String expectedType) {
DartObjectImpl field = fields[fieldName];
expect(field.type.displayName, expectedType);
return field.fields;
}
- void _assertIntField(Map<String, DartObjectImpl> fields, String fieldName,
- int expectedValue) {
+ void _assertIntField(
+ Map<String, DartObjectImpl> fields, String fieldName, int expectedValue) {
DartObjectImpl field = fields[fieldName];
expect(field.type.name, "int");
expect(field.intValue, expectedValue);
@@ -1998,8 +1976,8 @@
assertErrors(source, expectedErrorCodes);
}
- Map<String, DartObjectImpl> _assertType(EvaluationResultImpl result,
- String typeName) {
+ Map<String, DartObjectImpl> _assertType(
+ EvaluationResultImpl result, String typeName) {
expect(result.value, isNotNull);
DartObjectImpl value = result.value;
expect(value.type.displayName, typeName);
@@ -2041,8 +2019,8 @@
expect(value.isUnknown, isTrue);
}
- EvaluationResultImpl _check_fromEnvironment_bool(String valueInEnvironment,
- String defaultExpr) {
+ EvaluationResultImpl _check_fromEnvironment_bool(
+ String valueInEnvironment, String defaultExpr) {
String envVarName = "x";
String varName = "foo";
if (valueInEnvironment != null) {
@@ -2055,8 +2033,8 @@
return _evaluateInstanceCreationExpression(compilationUnit, varName);
}
- EvaluationResultImpl _check_fromEnvironment_int(String valueInEnvironment,
- String defaultExpr) {
+ EvaluationResultImpl _check_fromEnvironment_int(
+ String valueInEnvironment, String defaultExpr) {
String envVarName = "x";
String varName = "foo";
if (valueInEnvironment != null) {
@@ -2069,8 +2047,8 @@
return _evaluateInstanceCreationExpression(compilationUnit, varName);
}
- EvaluationResultImpl _check_fromEnvironment_string(String valueInEnvironment,
- String defaultExpr) {
+ EvaluationResultImpl _check_fromEnvironment_string(
+ String valueInEnvironment, String defaultExpr) {
String envVarName = "x";
String varName = "foo";
if (valueInEnvironment != null) {
@@ -2109,8 +2087,8 @@
_assertFieldType(c_int_num_fields, GenericState.SUPERCLASS_FIELD, "A<num>");
}
- void _checkInstanceCreationOptionalParams(bool isFieldFormal, bool isNamed,
- bool hasDefault) {
+ void _checkInstanceCreationOptionalParams(
+ bool isFieldFormal, bool isNamed, bool hasDefault) {
String fieldName = "j";
String paramName = isFieldFormal ? fieldName : "i";
String formalParam =
@@ -2143,8 +2121,8 @@
* method [methodName], with exactly one annotation. Return the constant
* value of the annotation.
*/
- EvaluationResultImpl _evaluateAnnotation(CompilationUnit compilationUnit,
- String className, String memberName) {
+ EvaluationResultImpl _evaluateAnnotation(
+ CompilationUnit compilationUnit, String className, String memberName) {
for (CompilationUnitMember member in compilationUnit.declarations) {
if (member is ClassDeclaration && member.name.name == className) {
for (ClassMember classMember in member.members) {
@@ -2162,9 +2140,8 @@
return null;
}
- EvaluationResultImpl
- _evaluateInstanceCreationExpression(CompilationUnit compilationUnit,
- String name) {
+ EvaluationResultImpl _evaluateInstanceCreationExpression(
+ CompilationUnit compilationUnit, String name) {
Expression expression =
findTopLevelConstantExpression(compilationUnit, name);
return (expression as InstanceCreationExpression).evaluationResult;
@@ -2172,8 +2149,7 @@
ConstantValueComputer _makeConstantValueComputer() {
return new ValidatingConstantValueComputer(
- analysisContext2.typeProvider,
- analysisContext2.declaredVariables);
+ analysisContext2.typeProvider, analysisContext2.declaredVariables);
}
void _validate(bool shouldBeValid, VariableDeclarationList declarationList) {
@@ -2190,14 +2166,14 @@
}
}
-
-class ConstantValueComputerTest_ValidatingConstantVisitor extends
- ConstantVisitor {
+class ConstantValueComputerTest_ValidatingConstantVisitor
+ extends ConstantVisitor {
final DirectedGraph<AstNode> _referenceGraph;
final AstNode _nodeBeingEvaluated;
ConstantValueComputerTest_ValidatingConstantVisitor(TypeProvider typeProvider,
- this._referenceGraph, this._nodeBeingEvaluated, ErrorReporter errorReporter)
+ this._referenceGraph, this._nodeBeingEvaluated,
+ ErrorReporter errorReporter)
: super.con1(typeProvider, errorReporter);
@override
@@ -2211,54 +2187,42 @@
}
}
-
@reflectiveTest
class ConstantVisitorTest extends ResolverTestCase {
void test_visitConditionalExpression_false() {
Expression thenExpression = AstFactory.integer(1);
Expression elseExpression = AstFactory.integer(0);
ConditionalExpression expression = AstFactory.conditionalExpression(
- AstFactory.booleanLiteral(false),
- thenExpression,
- elseExpression);
+ AstFactory.booleanLiteral(false), thenExpression, elseExpression);
GatheringErrorListener errorListener = new GatheringErrorListener();
ErrorReporter errorReporter =
new ErrorReporter(errorListener, _dummySource());
- _assertValue(
- 0,
- expression.accept(
- new ConstantVisitor.con1(new TestTypeProvider(), errorReporter)));
+ _assertValue(0, expression.accept(
+ new ConstantVisitor.con1(new TestTypeProvider(), errorReporter)));
errorListener.assertNoErrors();
}
- void
- test_visitConditionalExpression_instanceCreation_invalidFieldInitializer() {
+ void test_visitConditionalExpression_instanceCreation_invalidFieldInitializer() {
TestTypeProvider typeProvider = new TestTypeProvider();
LibraryElementImpl libraryElement = ElementFactory.library(null, "lib");
String className = "C";
ClassElementImpl classElement = ElementFactory.classElement2(className);
(libraryElement.definingCompilationUnit as CompilationUnitElementImpl).types =
<ClassElement>[classElement];
- ConstructorElementImpl constructorElement =
- ElementFactory.constructorElement(
- classElement,
- null,
- true,
- [typeProvider.intType]);
+ ConstructorElementImpl constructorElement = ElementFactory
+ .constructorElement(classElement, null, true, [typeProvider.intType]);
constructorElement.parameters[0] =
new FieldFormalParameterElementImpl(AstFactory.identifier3("x"));
- InstanceCreationExpression expression =
- AstFactory.instanceCreationExpression2(
- Keyword.CONST,
- AstFactory.typeName4(className),
- [AstFactory.integer(0)]);
+ InstanceCreationExpression expression = AstFactory
+ .instanceCreationExpression2(Keyword.CONST,
+ AstFactory.typeName4(className), [AstFactory.integer(0)]);
expression.staticElement = constructorElement;
GatheringErrorListener errorListener = new GatheringErrorListener();
ErrorReporter errorReporter =
new ErrorReporter(errorListener, _dummySource());
expression.accept(new ConstantVisitor.con1(typeProvider, errorReporter));
- errorListener.assertErrorsWithCodes(
- [CompileTimeErrorCode.INVALID_CONSTANT]);
+ errorListener
+ .assertErrorsWithCodes([CompileTimeErrorCode.INVALID_CONSTANT]);
}
void test_visitConditionalExpression_nonBooleanCondition() {
@@ -2266,67 +2230,57 @@
Expression elseExpression = AstFactory.integer(0);
NullLiteral conditionExpression = AstFactory.nullLiteral();
ConditionalExpression expression = AstFactory.conditionalExpression(
- conditionExpression,
- thenExpression,
- elseExpression);
+ conditionExpression, thenExpression, elseExpression);
GatheringErrorListener errorListener = new GatheringErrorListener();
ErrorReporter errorReporter =
new ErrorReporter(errorListener, _dummySource());
DartObjectImpl result = expression.accept(
new ConstantVisitor.con1(new TestTypeProvider(), errorReporter));
expect(result, isNull);
- errorListener.assertErrorsWithCodes(
- [CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL]);
+ errorListener
+ .assertErrorsWithCodes([CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL]);
}
void test_visitConditionalExpression_nonConstantElse() {
Expression thenExpression = AstFactory.integer(1);
Expression elseExpression = AstFactory.identifier3("x");
ConditionalExpression expression = AstFactory.conditionalExpression(
- AstFactory.booleanLiteral(true),
- thenExpression,
- elseExpression);
+ AstFactory.booleanLiteral(true), thenExpression, elseExpression);
GatheringErrorListener errorListener = new GatheringErrorListener();
ErrorReporter errorReporter =
new ErrorReporter(errorListener, _dummySource());
DartObjectImpl result = expression.accept(
new ConstantVisitor.con1(new TestTypeProvider(), errorReporter));
expect(result, isNull);
- errorListener.assertErrorsWithCodes(
- [CompileTimeErrorCode.INVALID_CONSTANT]);
+ errorListener
+ .assertErrorsWithCodes([CompileTimeErrorCode.INVALID_CONSTANT]);
}
void test_visitConditionalExpression_nonConstantThen() {
Expression thenExpression = AstFactory.identifier3("x");
Expression elseExpression = AstFactory.integer(0);
ConditionalExpression expression = AstFactory.conditionalExpression(
- AstFactory.booleanLiteral(true),
- thenExpression,
- elseExpression);
+ AstFactory.booleanLiteral(true), thenExpression, elseExpression);
GatheringErrorListener errorListener = new GatheringErrorListener();
ErrorReporter errorReporter =
new ErrorReporter(errorListener, _dummySource());
DartObjectImpl result = expression.accept(
new ConstantVisitor.con1(new TestTypeProvider(), errorReporter));
expect(result, isNull);
- errorListener.assertErrorsWithCodes(
- [CompileTimeErrorCode.INVALID_CONSTANT]);
+ errorListener
+ .assertErrorsWithCodes([CompileTimeErrorCode.INVALID_CONSTANT]);
}
void test_visitConditionalExpression_true() {
Expression thenExpression = AstFactory.integer(1);
Expression elseExpression = AstFactory.integer(0);
ConditionalExpression expression = AstFactory.conditionalExpression(
- AstFactory.booleanLiteral(true),
- thenExpression,
- elseExpression);
+ AstFactory.booleanLiteral(true), thenExpression, elseExpression);
GatheringErrorListener errorListener = new GatheringErrorListener();
ErrorReporter errorReporter =
new ErrorReporter(errorListener, _dummySource());
- _assertValue(
- 1,
- expression.accept(
- new ConstantVisitor.con1(new TestTypeProvider(), errorReporter)));
+ _assertValue(1, expression.accept(
+ new ConstantVisitor.con1(new TestTypeProvider(), errorReporter)));
errorListener.assertNoErrors();
}
@@ -2376,14 +2330,13 @@
findTopLevelConstantExpression(compilationUnit, name);
GatheringErrorListener errorListener = new GatheringErrorListener();
ErrorReporter errorReporter = new ErrorReporter(errorListener, source);
- DartObjectImpl result = expression.accept(
- new ConstantVisitor.con2(typeProvider, lexicalEnvironment, errorReporter));
+ DartObjectImpl result = expression.accept(new ConstantVisitor.con2(
+ typeProvider, lexicalEnvironment, errorReporter));
errorListener.assertNoErrors();
return result;
}
}
-
@reflectiveTest
class ContentCacheTest {
void test_setContents() {
@@ -2403,7 +2356,6 @@
}
}
-
@reflectiveTest
class CustomUriResolverTest {
void test_creation() {
@@ -2411,9 +2363,8 @@
}
void test_resolve_unknown_uri() {
- UriResolver resolver = new CustomUriResolver({
- 'custom:library': '/path/to/library.dart',
- });
+ UriResolver resolver =
+ new CustomUriResolver({'custom:library': '/path/to/library.dart',});
Source result =
resolver.resolveAbsolute(parseUriWithException("custom:non_library"));
expect(result, isNull);
@@ -2422,9 +2373,7 @@
void test_resolve_uri() {
String path =
FileUtilities2.createFile("/path/to/library.dart").getAbsolutePath();
- UriResolver resolver = new CustomUriResolver({
- 'custom:library': path,
- });
+ UriResolver resolver = new CustomUriResolver({'custom:library': path,});
Source result =
resolver.resolveAbsolute(parseUriWithException("custom:library"));
expect(result, isNotNull);
@@ -2432,7 +2381,6 @@
}
}
-
@reflectiveTest
class DartObjectImplTest extends EngineTestCase {
TypeProvider _typeProvider = new TestTypeProvider();
@@ -2598,23 +2546,17 @@
void test_concatenate_knownString_knownString() {
_assertConcatenate(
- _stringValue("abcdef"),
- _stringValue("abc"),
- _stringValue("def"));
+ _stringValue("abcdef"), _stringValue("abc"), _stringValue("def"));
}
void test_concatenate_knownString_unknownString() {
_assertConcatenate(
- _stringValue(null),
- _stringValue("abc"),
- _stringValue(null));
+ _stringValue(null), _stringValue("abc"), _stringValue(null));
}
void test_concatenate_unknownString_knownString() {
_assertConcatenate(
- _stringValue(null),
- _stringValue(null),
- _stringValue("def"));
+ _stringValue(null), _stringValue(null), _stringValue("def"));
}
void test_divide_knownDouble_knownDouble() {
@@ -2727,35 +2669,26 @@
void test_equalEqual_string_false() {
_assertEqualEqual(
- _boolValue(false),
- _stringValue("abc"),
- _stringValue("def"));
+ _boolValue(false), _stringValue("abc"), _stringValue("def"));
}
void test_equalEqual_string_true() {
_assertEqualEqual(
- _boolValue(true),
- _stringValue("abc"),
- _stringValue("abc"));
+ _boolValue(true), _stringValue("abc"), _stringValue("abc"));
}
void test_equalEqual_string_unknown() {
_assertEqualEqual(
- _boolValue(null),
- _stringValue(null),
- _stringValue("def"));
+ _boolValue(null), _stringValue(null), _stringValue("def"));
}
void test_equals_list_false_differentSizes() {
- expect(
- _listValue([_boolValue(true)]) ==
- _listValue([_boolValue(true), _boolValue(false)]),
- isFalse);
+ expect(_listValue([_boolValue(true)]) ==
+ _listValue([_boolValue(true), _boolValue(false)]), isFalse);
}
void test_equals_list_false_sameSize() {
- expect(
- _listValue([_boolValue(true)]) == _listValue([_boolValue(false)]),
+ expect(_listValue([_boolValue(true)]) == _listValue([_boolValue(false)]),
isFalse);
}
@@ -2917,44 +2850,32 @@
void test_greaterThanOrEqual_knownDouble_knownDouble_false() {
_assertGreaterThanOrEqual(
- _boolValue(false),
- _doubleValue(1.0),
- _doubleValue(2.0));
+ _boolValue(false), _doubleValue(1.0), _doubleValue(2.0));
}
void test_greaterThanOrEqual_knownDouble_knownDouble_true() {
_assertGreaterThanOrEqual(
- _boolValue(true),
- _doubleValue(2.0),
- _doubleValue(1.0));
+ _boolValue(true), _doubleValue(2.0), _doubleValue(1.0));
}
void test_greaterThanOrEqual_knownDouble_knownInt_false() {
_assertGreaterThanOrEqual(
- _boolValue(false),
- _doubleValue(1.0),
- _intValue(2));
+ _boolValue(false), _doubleValue(1.0), _intValue(2));
}
void test_greaterThanOrEqual_knownDouble_knownInt_true() {
_assertGreaterThanOrEqual(
- _boolValue(true),
- _doubleValue(2.0),
- _intValue(1));
+ _boolValue(true), _doubleValue(2.0), _intValue(1));
}
void test_greaterThanOrEqual_knownDouble_unknownDouble() {
_assertGreaterThanOrEqual(
- _boolValue(null),
- _doubleValue(1.0),
- _doubleValue(null));
+ _boolValue(null), _doubleValue(1.0), _doubleValue(null));
}
void test_greaterThanOrEqual_knownDouble_unknownInt() {
_assertGreaterThanOrEqual(
- _boolValue(null),
- _doubleValue(1.0),
- _intValue(null));
+ _boolValue(null), _doubleValue(1.0), _intValue(null));
}
void test_greaterThanOrEqual_knownInt_knownInt_false() {
@@ -2971,9 +2892,7 @@
void test_greaterThanOrEqual_knownInt_unknownDouble() {
_assertGreaterThanOrEqual(
- _boolValue(null),
- _intValue(1),
- _doubleValue(null));
+ _boolValue(null), _intValue(1), _doubleValue(null));
}
void test_greaterThanOrEqual_knownInt_unknownInt() {
@@ -2986,23 +2905,17 @@
void test_greaterThanOrEqual_unknownDouble_knownDouble() {
_assertGreaterThanOrEqual(
- _boolValue(null),
- _doubleValue(null),
- _doubleValue(2.0));
+ _boolValue(null), _doubleValue(null), _doubleValue(2.0));
}
void test_greaterThanOrEqual_unknownDouble_knownInt() {
_assertGreaterThanOrEqual(
- _boolValue(null),
- _doubleValue(null),
- _intValue(2));
+ _boolValue(null), _doubleValue(null), _intValue(2));
}
void test_greaterThanOrEqual_unknownInt_knownDouble() {
_assertGreaterThanOrEqual(
- _boolValue(null),
- _intValue(null),
- _doubleValue(2.0));
+ _boolValue(null), _intValue(null), _doubleValue(2.0));
}
void test_greaterThanOrEqual_unknownInt_knownInt() {
@@ -3058,14 +2971,12 @@
}
void test_hasExactValue_map_invalidKey() {
- expect(
- _mapValue([_dynamicValue(), _stringValue("value")]).hasExactValue,
+ expect(_mapValue([_dynamicValue(), _stringValue("value")]).hasExactValue,
isFalse);
}
void test_hasExactValue_map_invalidValue() {
- expect(
- _mapValue([_stringValue("key"), _dynamicValue()]).hasExactValue,
+ expect(_mapValue([_stringValue("key"), _dynamicValue()]).hasExactValue,
isFalse);
}
@@ -3133,9 +3044,7 @@
void test_identical_list_false() {
_assertIdentical(
- _boolValue(false),
- _listValue(),
- _listValue([_intValue(3)]));
+ _boolValue(false), _listValue(), _listValue([_intValue(3)]));
}
void test_identical_map_empty() {
@@ -3143,9 +3052,7 @@
}
void test_identical_map_false() {
- _assertIdentical(
- _boolValue(false),
- _mapValue(),
+ _assertIdentical(_boolValue(false), _mapValue(),
_mapValue([_intValue(1), _intValue(2)]));
}
@@ -3155,16 +3062,12 @@
void test_identical_string_false() {
_assertIdentical(
- _boolValue(false),
- _stringValue("abc"),
- _stringValue("def"));
+ _boolValue(false), _stringValue("abc"), _stringValue("def"));
}
void test_identical_string_true() {
_assertIdentical(
- _boolValue(true),
- _stringValue("abc"),
- _stringValue("abc"));
+ _boolValue(true), _stringValue("abc"), _stringValue("abc"));
}
void test_identical_string_unknown() {
@@ -3181,9 +3084,7 @@
void test_integerDivide_knownDouble_unknownDouble() {
_assertIntegerDivide(
- _intValue(null),
- _doubleValue(6.0),
- _doubleValue(null));
+ _intValue(null), _doubleValue(6.0), _doubleValue(null));
}
void test_integerDivide_knownDouble_unknownInt() {
@@ -3212,9 +3113,7 @@
void test_integerDivide_unknownDouble_knownDouble() {
_assertIntegerDivide(
- _intValue(null),
- _doubleValue(null),
- _doubleValue(2.0));
+ _intValue(null), _doubleValue(null), _doubleValue(2.0));
}
void test_integerDivide_unknownDouble_knownInt() {
@@ -3347,16 +3246,12 @@
void test_lessThanOrEqual_knownDouble_knownDouble_false() {
_assertLessThanOrEqual(
- _boolValue(false),
- _doubleValue(2.0),
- _doubleValue(1.0));
+ _boolValue(false), _doubleValue(2.0), _doubleValue(1.0));
}
void test_lessThanOrEqual_knownDouble_knownDouble_true() {
_assertLessThanOrEqual(
- _boolValue(true),
- _doubleValue(1.0),
- _doubleValue(2.0));
+ _boolValue(true), _doubleValue(1.0), _doubleValue(2.0));
}
void test_lessThanOrEqual_knownDouble_knownInt_false() {
@@ -3369,16 +3264,12 @@
void test_lessThanOrEqual_knownDouble_unknownDouble() {
_assertLessThanOrEqual(
- _boolValue(null),
- _doubleValue(1.0),
- _doubleValue(null));
+ _boolValue(null), _doubleValue(1.0), _doubleValue(null));
}
void test_lessThanOrEqual_knownDouble_unknownInt() {
_assertLessThanOrEqual(
- _boolValue(null),
- _doubleValue(1.0),
- _intValue(null));
+ _boolValue(null), _doubleValue(1.0), _intValue(null));
}
void test_lessThanOrEqual_knownInt_knownInt_false() {
@@ -3407,9 +3298,7 @@
void test_lessThanOrEqual_unknownDouble_knownDouble() {
_assertLessThanOrEqual(
- _boolValue(null),
- _doubleValue(null),
- _doubleValue(2.0));
+ _boolValue(null), _doubleValue(null), _doubleValue(2.0));
}
void test_lessThanOrEqual_unknownDouble_knownInt() {
@@ -3418,9 +3307,7 @@
void test_lessThanOrEqual_unknownInt_knownDouble() {
_assertLessThanOrEqual(
- _boolValue(null),
- _intValue(null),
- _doubleValue(2.0));
+ _boolValue(null), _intValue(null), _doubleValue(2.0));
}
void test_lessThanOrEqual_unknownInt_knownInt() {
@@ -3435,19 +3322,15 @@
try {
_assertLogicalAnd(_boolValue(false), _boolValue(false), _nullValue());
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalAnd_false_string() {
try {
_assertLogicalAnd(
- _boolValue(false),
- _boolValue(false),
- _stringValue("false"));
+ _boolValue(false), _boolValue(false), _stringValue("false"));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalAnd_false_true() {
@@ -3458,38 +3341,30 @@
try {
_assertLogicalAnd(_boolValue(false), _nullValue(), _boolValue(false));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalAnd_null_true() {
try {
_assertLogicalAnd(_boolValue(false), _nullValue(), _boolValue(true));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalAnd_string_false() {
try {
_assertLogicalAnd(
- _boolValue(false),
- _stringValue("true"),
- _boolValue(false));
+ _boolValue(false), _stringValue("true"), _boolValue(false));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalAnd_string_true() {
try {
_assertLogicalAnd(
- _boolValue(false),
- _stringValue("false"),
- _boolValue(true));
+ _boolValue(false), _stringValue("false"), _boolValue(true));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalAnd_true_false() {
@@ -3503,12 +3378,9 @@
void test_logicalAnd_true_string() {
try {
_assertLogicalAnd(
- _boolValue(false),
- _boolValue(true),
- _stringValue("true"));
+ _boolValue(false), _boolValue(true), _stringValue("true"));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalAnd_true_true() {
@@ -3527,8 +3399,7 @@
try {
_assertLogicalNot(_boolValue(true), _stringValue(null));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalNot_true() {
@@ -3550,12 +3421,9 @@
void test_logicalOr_false_string() {
try {
_assertLogicalOr(
- _boolValue(false),
- _boolValue(false),
- _stringValue("false"));
+ _boolValue(false), _boolValue(false), _stringValue("false"));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalOr_false_true() {
@@ -3566,38 +3434,30 @@
try {
_assertLogicalOr(_boolValue(false), _nullValue(), _boolValue(false));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalOr_null_true() {
try {
_assertLogicalOr(_boolValue(true), _nullValue(), _boolValue(true));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalOr_string_false() {
try {
_assertLogicalOr(
- _boolValue(false),
- _stringValue("true"),
- _boolValue(false));
+ _boolValue(false), _stringValue("true"), _boolValue(false));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalOr_string_true() {
try {
_assertLogicalOr(
- _boolValue(true),
- _stringValue("false"),
- _boolValue(true));
+ _boolValue(true), _stringValue("false"), _boolValue(true));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalOr_true_false() {
@@ -3608,19 +3468,15 @@
try {
_assertLogicalOr(_boolValue(true), _boolValue(true), _nullValue());
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalOr_true_string() {
try {
_assertLogicalOr(
- _boolValue(true),
- _boolValue(true),
- _stringValue("true"));
+ _boolValue(true), _boolValue(true), _stringValue("true"));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_logicalOr_true_true() {
@@ -3741,9 +3597,7 @@
void test_notEqual_string_false() {
_assertNotEqual(
- _boolValue(false),
- _stringValue("abc"),
- _stringValue("abc"));
+ _boolValue(false), _stringValue("abc"), _stringValue("abc"));
}
void test_notEqual_string_true() {
@@ -3855,10 +3709,8 @@
}
void test_shiftLeft_knownInt_tooLarge() {
- _assertShiftLeft(
- _intValue(null),
- _intValue(6),
- new DartObjectImpl(_typeProvider.intType, new IntState(LONG_MAX_VALUE)));
+ _assertShiftLeft(_intValue(null), _intValue(6), new DartObjectImpl(
+ _typeProvider.intType, new IntState(LONG_MAX_VALUE)));
}
void test_shiftLeft_knownInt_unknownInt() {
@@ -3886,10 +3738,8 @@
}
void test_shiftRight_knownInt_tooLarge() {
- _assertShiftRight(
- _intValue(null),
- _intValue(48),
- new DartObjectImpl(_typeProvider.intType, new IntState(LONG_MAX_VALUE)));
+ _assertShiftRight(_intValue(null), _intValue(48), new DartObjectImpl(
+ _typeProvider.intType, new IntState(LONG_MAX_VALUE)));
}
void test_shiftRight_knownInt_unknownInt() {
@@ -3912,8 +3762,7 @@
try {
_assertStringLength(_intValue(null), _intValue(0));
fail("Expected EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
}
void test_stringLength_knownString() {
@@ -3991,8 +3840,7 @@
try {
leftOperand.add(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = leftOperand.add(_typeProvider, rightOperand);
expect(result, isNotNull);
@@ -4015,8 +3863,7 @@
try {
leftOperand.bitAnd(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = leftOperand.bitAnd(_typeProvider, rightOperand);
expect(result, isNotNull);
@@ -4037,8 +3884,7 @@
try {
operand.bitNot(_typeProvider);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = operand.bitNot(_typeProvider);
expect(result, isNotNull);
@@ -4061,8 +3907,7 @@
try {
leftOperand.bitOr(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = leftOperand.bitOr(_typeProvider, rightOperand);
expect(result, isNotNull);
@@ -4085,8 +3930,7 @@
try {
leftOperand.bitXor(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = leftOperand.bitXor(_typeProvider, rightOperand);
expect(result, isNotNull);
@@ -4109,8 +3953,7 @@
try {
leftOperand.concatenate(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result =
leftOperand.concatenate(_typeProvider, rightOperand);
@@ -4134,8 +3977,7 @@
try {
leftOperand.divide(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = leftOperand.divide(_typeProvider, rightOperand);
expect(result, isNotNull);
@@ -4158,8 +4000,7 @@
try {
leftOperand.equalEqual(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result =
leftOperand.equalEqual(_typeProvider, rightOperand);
@@ -4183,8 +4024,7 @@
try {
leftOperand.greaterThan(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result =
leftOperand.greaterThan(_typeProvider, rightOperand);
@@ -4208,8 +4048,7 @@
try {
leftOperand.greaterThanOrEqual(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result =
leftOperand.greaterThanOrEqual(_typeProvider, rightOperand);
@@ -4253,8 +4092,7 @@
try {
leftOperand.integerDivide(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result =
leftOperand.integerDivide(_typeProvider, rightOperand);
@@ -4278,8 +4116,7 @@
try {
leftOperand.lessThan(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = leftOperand.lessThan(_typeProvider, rightOperand);
expect(result, isNotNull);
@@ -4302,8 +4139,7 @@
try {
leftOperand.lessThanOrEqual(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result =
leftOperand.lessThanOrEqual(_typeProvider, rightOperand);
@@ -4327,8 +4163,7 @@
try {
leftOperand.logicalAnd(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result =
leftOperand.logicalAnd(_typeProvider, rightOperand);
@@ -4350,8 +4185,7 @@
try {
operand.logicalNot(_typeProvider);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = operand.logicalNot(_typeProvider);
expect(result, isNotNull);
@@ -4374,8 +4208,7 @@
try {
leftOperand.logicalOr(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result =
leftOperand.logicalOr(_typeProvider, rightOperand);
@@ -4399,8 +4232,7 @@
try {
leftOperand.minus(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = leftOperand.minus(_typeProvider, rightOperand);
expect(result, isNotNull);
@@ -4421,8 +4253,7 @@
try {
operand.negated(_typeProvider);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = operand.negated(_typeProvider);
expect(result, isNotNull);
@@ -4445,8 +4276,7 @@
try {
leftOperand.notEqual(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = leftOperand.notEqual(_typeProvider, rightOperand);
expect(result, isNotNull);
@@ -4467,8 +4297,7 @@
try {
operand.performToString(_typeProvider);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = operand.performToString(_typeProvider);
expect(result, isNotNull);
@@ -4491,8 +4320,7 @@
try {
leftOperand.remainder(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result =
leftOperand.remainder(_typeProvider, rightOperand);
@@ -4516,8 +4344,7 @@
try {
leftOperand.shiftLeft(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result =
leftOperand.shiftLeft(_typeProvider, rightOperand);
@@ -4541,8 +4368,7 @@
try {
leftOperand.shiftRight(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result =
leftOperand.shiftRight(_typeProvider, rightOperand);
@@ -4564,8 +4390,7 @@
try {
operand.stringLength(_typeProvider);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = operand.stringLength(_typeProvider);
expect(result, isNotNull);
@@ -4588,8 +4413,7 @@
try {
leftOperand.times(_typeProvider, rightOperand);
fail("Expected an EvaluationException");
- } on EvaluationException catch (exception) {
- }
+ } on EvaluationException catch (exception) {}
} else {
DartObjectImpl result = leftOperand.times(_typeProvider, rightOperand);
expect(result, isNotNull);
@@ -4600,8 +4424,7 @@
DartObjectImpl _boolValue(bool value) {
if (value == null) {
return new DartObjectImpl(
- _typeProvider.boolType,
- BoolState.UNKNOWN_VALUE);
+ _typeProvider.boolType, BoolState.UNKNOWN_VALUE);
} else if (identical(value, false)) {
return new DartObjectImpl(_typeProvider.boolType, BoolState.FALSE_STATE);
} else if (identical(value, true)) {
@@ -4614,19 +4437,16 @@
DartObjectImpl _doubleValue(double value) {
if (value == null) {
return new DartObjectImpl(
- _typeProvider.doubleType,
- DoubleState.UNKNOWN_VALUE);
+ _typeProvider.doubleType, DoubleState.UNKNOWN_VALUE);
} else {
return new DartObjectImpl(
- _typeProvider.doubleType,
- new DoubleState(value));
+ _typeProvider.doubleType, new DoubleState(value));
}
}
DartObjectImpl _dynamicValue() {
return new DartObjectImpl(
- _typeProvider.nullType,
- DynamicState.DYNAMIC_STATE);
+ _typeProvider.nullType, DynamicState.DYNAMIC_STATE);
}
DartObjectImpl _intValue(int value) {
@@ -4637,17 +4457,17 @@
}
}
- DartObjectImpl _listValue([List<DartObjectImpl> elements =
- DartObjectImpl.EMPTY_LIST]) {
+ DartObjectImpl _listValue(
+ [List<DartObjectImpl> elements = DartObjectImpl.EMPTY_LIST]) {
return new DartObjectImpl(_typeProvider.listType, new ListState(elements));
}
- DartObjectImpl _mapValue([List<DartObjectImpl> keyElementPairs =
- DartObjectImpl.EMPTY_LIST]) {
+ DartObjectImpl _mapValue(
+ [List<DartObjectImpl> keyElementPairs = DartObjectImpl.EMPTY_LIST]) {
Map<DartObjectImpl, DartObjectImpl> map =
new Map<DartObjectImpl, DartObjectImpl>();
int count = keyElementPairs.length;
- for (int i = 0; i < count; ) {
+ for (int i = 0; i < count;) {
map[keyElementPairs[i++]] = keyElementPairs[i++];
}
return new DartObjectImpl(_typeProvider.mapType, new MapState(map));
@@ -4664,12 +4484,10 @@
DartObjectImpl _stringValue(String value) {
if (value == null) {
return new DartObjectImpl(
- _typeProvider.stringType,
- StringState.UNKNOWN_VALUE);
+ _typeProvider.stringType, StringState.UNKNOWN_VALUE);
} else {
return new DartObjectImpl(
- _typeProvider.stringType,
- new StringState(value));
+ _typeProvider.stringType, new StringState(value));
}
}
@@ -4678,7 +4496,6 @@
}
}
-
@reflectiveTest
class DartUriResolverTest {
void test_creation() {
@@ -4718,13 +4535,12 @@
expect(sdkDirectory, isNotNull);
DartSdk sdk = new DirectoryBasedDartSdk(sdkDirectory);
UriResolver resolver = new DartUriResolver(sdk);
- Source result =
- resolver.resolveAbsolute(parseUriWithException("package:some/file.dart"));
+ Source result = resolver
+ .resolveAbsolute(parseUriWithException("package:some/file.dart"));
expect(result, isNull);
}
}
-
@reflectiveTest
class DeclaredVariablesTest extends EngineTestCase {
void test_getBool_false() {
@@ -4743,8 +4559,7 @@
DeclaredVariables variables = new DeclaredVariables();
variables.define(variableName, "not true");
_assertNullDartObject(
- typeProvider,
- variables.getBool(typeProvider, variableName));
+ typeProvider, variables.getBool(typeProvider, variableName));
}
void test_getBool_true() {
@@ -4762,8 +4577,7 @@
String variableName = "var";
DeclaredVariables variables = new DeclaredVariables();
_assertUnknownDartObject(
- typeProvider.boolType,
- variables.getBool(typeProvider, variableName));
+ typeProvider.boolType, variables.getBool(typeProvider, variableName));
}
void test_getInt_invalid() {
@@ -4772,8 +4586,7 @@
DeclaredVariables variables = new DeclaredVariables();
variables.define(variableName, "four score and seven years");
_assertNullDartObject(
- typeProvider,
- variables.getInt(typeProvider, variableName));
+ typeProvider, variables.getInt(typeProvider, variableName));
}
void test_getInt_undefined() {
@@ -4781,8 +4594,7 @@
String variableName = "var";
DeclaredVariables variables = new DeclaredVariables();
_assertUnknownDartObject(
- typeProvider.intType,
- variables.getInt(typeProvider, variableName));
+ typeProvider.intType, variables.getInt(typeProvider, variableName));
}
void test_getInt_valid() {
@@ -4810,8 +4622,7 @@
TestTypeProvider typeProvider = new TestTypeProvider();
String variableName = "var";
DeclaredVariables variables = new DeclaredVariables();
- _assertUnknownDartObject(
- typeProvider.stringType,
+ _assertUnknownDartObject(typeProvider.stringType,
variables.getString(typeProvider, variableName));
}
@@ -4819,14 +4630,13 @@
expect(result.type, typeProvider.nullType);
}
- void _assertUnknownDartObject(ParameterizedType expectedType,
- DartObject result) {
+ void _assertUnknownDartObject(
+ ParameterizedType expectedType, DartObject result) {
expect((result as DartObjectImpl).isUnknown, isTrue);
expect(result.type, expectedType);
}
}
-
@reflectiveTest
class DirectoryBasedDartSdkTest {
void fail_getDocFileFor() {
@@ -4843,16 +4653,14 @@
void test_fromFile_invalid() {
DirectoryBasedDartSdk sdk = _createDartSdk();
expect(
- sdk.fromFileUri(new JavaFile("/not/in/the/sdk.dart").toURI()),
- isNull);
+ sdk.fromFileUri(new JavaFile("/not/in/the/sdk.dart").toURI()), isNull);
}
void test_fromFile_library() {
DirectoryBasedDartSdk sdk = _createDartSdk();
- Source source = sdk.fromFileUri(
- new JavaFile.relative(
- new JavaFile.relative(sdk.libraryDirectory, "core"),
- "core.dart").toURI());
+ Source source = sdk.fromFileUri(new JavaFile.relative(
+ new JavaFile.relative(sdk.libraryDirectory, "core"), "core.dart")
+ .toURI());
expect(source, isNotNull);
expect(source.isInSystemLibrary, isTrue);
expect(source.uri.toString(), "dart:core");
@@ -4860,10 +4668,9 @@
void test_fromFile_part() {
DirectoryBasedDartSdk sdk = _createDartSdk();
- Source source = sdk.fromFileUri(
- new JavaFile.relative(
- new JavaFile.relative(sdk.libraryDirectory, "core"),
- "num.dart").toURI());
+ Source source = sdk.fromFileUri(new JavaFile.relative(
+ new JavaFile.relative(sdk.libraryDirectory, "core"), "num.dart")
+ .toURI());
expect(source, isNotNull);
expect(source.isInSystemLibrary, isTrue);
expect(source.uri.toString(), "dart:core/num.dart");
@@ -4930,16 +4737,12 @@
DirectoryBasedDartSdk _createDartSdk() {
JavaFile sdkDirectory = DirectoryBasedDartSdk.defaultSdkDirectory;
- expect(
- sdkDirectory,
- isNotNull,
- reason:
- "No SDK configured; set the property 'com.google.dart.sdk' on the command line");
+ expect(sdkDirectory, isNotNull,
+ reason: "No SDK configured; set the property 'com.google.dart.sdk' on the command line");
return new DirectoryBasedDartSdk(sdkDirectory);
}
}
-
@reflectiveTest
class DirectoryBasedSourceContainerTest {
void test_contains() {
@@ -4959,7 +4762,6 @@
}
}
-
@reflectiveTest
class ElementBuilderTest extends EngineTestCase {
void test_visitCatchClause() {
@@ -4993,12 +4795,7 @@
ElementBuilder builder = new ElementBuilder(holder);
String className = "C";
ClassDeclaration classDeclaration = AstFactory.classDeclaration(
- Keyword.ABSTRACT,
- className,
- null,
- null,
- null,
- null);
+ Keyword.ABSTRACT, className, null, null, null, null);
classDeclaration.accept(builder);
List<ClassElement> types = holder.types;
expect(types, hasLength(1));
@@ -5035,13 +4832,10 @@
String className = "C";
String firstVariableName = "E";
String secondVariableName = "F";
- ClassDeclaration classDeclaration = AstFactory.classDeclaration(
- null,
+ ClassDeclaration classDeclaration = AstFactory.classDeclaration(null,
className,
AstFactory.typeParameterList([firstVariableName, secondVariableName]),
- null,
- null,
- null);
+ null, null, null);
classDeclaration.accept(builder);
List<ClassElement> types = holder.types;
expect(types, hasLength(1));
@@ -5063,26 +4857,15 @@
String typeParameterName = "E";
String fieldName = "f";
String methodName = "m";
- ClassDeclaration classDeclaration = AstFactory.classDeclaration(
- null,
- className,
- AstFactory.typeParameterList([typeParameterName]),
- null,
- null,
- null,
- [
- AstFactory.fieldDeclaration2(
- false,
- null,
- [AstFactory.variableDeclaration(fieldName)]),
- AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
- AstFactory.identifier3(methodName),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2())]);
+ ClassDeclaration classDeclaration = AstFactory.classDeclaration(null,
+ className, AstFactory.typeParameterList([typeParameterName]), null,
+ null, null, [
+ AstFactory.fieldDeclaration2(
+ false, null, [AstFactory.variableDeclaration(fieldName)]),
+ AstFactory.methodDeclaration2(null, null, null, null,
+ AstFactory.identifier3(methodName), AstFactory.formalParameterList(),
+ AstFactory.blockFunctionBody2())
+ ]);
classDeclaration.accept(builder);
List<ClassElement> types = holder.types;
expect(types, hasLength(1));
@@ -5123,12 +4906,7 @@
WithClause withClause =
AstFactory.withClause([AstFactory.typeName(classM, [])]);
ClassTypeAlias alias = AstFactory.classTypeAlias(
- 'C',
- null,
- null,
- AstFactory.typeName(classB, []),
- withClause,
- null);
+ 'C', null, null, AstFactory.typeName(classB, []), withClause, null);
alias.accept(builder);
List<ClassElement> types = holder.types;
expect(types, hasLength(1));
@@ -5156,13 +4934,8 @@
ClassElement classM = ElementFactory.classElement2('M', []);
WithClause withClause =
AstFactory.withClause([AstFactory.typeName(classM, [])]);
- ClassTypeAlias classCAst = AstFactory.classTypeAlias(
- 'C',
- null,
- Keyword.ABSTRACT,
- AstFactory.typeName(classB, []),
- withClause,
- null);
+ ClassTypeAlias classCAst = AstFactory.classTypeAlias('C', null,
+ Keyword.ABSTRACT, AstFactory.typeName(classB, []), withClause, null);
classCAst.accept(builder);
List<ClassElement> types = holder.types;
expect(types, hasLength(1));
@@ -5184,13 +4957,9 @@
ClassElementImpl classM = ElementFactory.classElement2('M', []);
WithClause withClause =
AstFactory.withClause([AstFactory.typeName(classM, [])]);
- ClassTypeAlias classCAst = AstFactory.classTypeAlias(
- 'C',
- AstFactory.typeParameterList(['T']),
- null,
- AstFactory.typeName(classB, []),
- withClause,
- null);
+ ClassTypeAlias classCAst = AstFactory.classTypeAlias('C',
+ AstFactory.typeParameterList(['T']), null,
+ AstFactory.typeName(classB, []), withClause, null);
classCAst.accept(builder);
List<ClassElement> types = holder.types;
expect(types, hasLength(1));
@@ -5203,14 +4972,10 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String className = "A";
- ConstructorDeclaration constructorDeclaration =
- AstFactory.constructorDeclaration2(
- null,
- Keyword.FACTORY,
- AstFactory.identifier3(className),
- null,
- AstFactory.formalParameterList(),
- null,
+ ConstructorDeclaration constructorDeclaration = AstFactory
+ .constructorDeclaration2(null, Keyword.FACTORY,
+ AstFactory.identifier3(className), null,
+ AstFactory.formalParameterList(), null,
AstFactory.blockFunctionBody2());
constructorDeclaration.accept(builder);
List<ConstructorElement> constructors = holder.constructors;
@@ -5229,14 +4994,9 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String className = "A";
- ConstructorDeclaration constructorDeclaration =
- AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3(className),
- null,
- AstFactory.formalParameterList(),
- null,
+ ConstructorDeclaration constructorDeclaration = AstFactory
+ .constructorDeclaration2(null, null, AstFactory.identifier3(className),
+ null, AstFactory.formalParameterList(), null,
AstFactory.blockFunctionBody2());
constructorDeclaration.accept(builder);
List<ConstructorElement> constructors = holder.constructors;
@@ -5256,14 +5016,9 @@
ElementBuilder builder = new ElementBuilder(holder);
String className = "A";
String constructorName = "c";
- ConstructorDeclaration constructorDeclaration =
- AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3(className),
- constructorName,
- AstFactory.formalParameterList(),
- null,
+ ConstructorDeclaration constructorDeclaration = AstFactory
+ .constructorDeclaration2(null, null, AstFactory.identifier3(className),
+ constructorName, AstFactory.formalParameterList(), null,
AstFactory.blockFunctionBody2());
constructorDeclaration.accept(builder);
List<ConstructorElement> constructors = holder.constructors;
@@ -5284,14 +5039,9 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String className = "A";
- ConstructorDeclaration constructorDeclaration =
- AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3(className),
- null,
- AstFactory.formalParameterList(),
- null,
+ ConstructorDeclaration constructorDeclaration = AstFactory
+ .constructorDeclaration2(null, null, AstFactory.identifier3(className),
+ null, AstFactory.formalParameterList(), null,
AstFactory.blockFunctionBody2());
constructorDeclaration.accept(builder);
List<ConstructorElement> constructors = holder.constructors;
@@ -5326,12 +5076,11 @@
ElementBuilder builder = new ElementBuilder(holder);
String firstFieldName = "x";
String secondFieldName = "y";
- FieldDeclaration fieldDeclaration = AstFactory.fieldDeclaration2(
- false,
- null,
- [
- AstFactory.variableDeclaration(firstFieldName),
- AstFactory.variableDeclaration(secondFieldName)]);
+ FieldDeclaration fieldDeclaration = AstFactory.fieldDeclaration2(false,
+ null, [
+ AstFactory.variableDeclaration(firstFieldName),
+ AstFactory.variableDeclaration(secondFieldName)
+ ]);
fieldDeclaration.accept(builder);
List<FieldElement> fields = holder.fields;
expect(fields, hasLength(2));
@@ -5375,11 +5124,9 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String parameterName = "p";
- FieldFormalParameter formalParameter = AstFactory.fieldFormalParameter(
- null,
- null,
- parameterName,
- AstFactory.formalParameterList([AstFactory.simpleFormalParameter3("a")]));
+ FieldFormalParameter formalParameter = AstFactory.fieldFormalParameter(null,
+ null, parameterName, AstFactory
+ .formalParameterList([AstFactory.simpleFormalParameter3("a")]));
formalParameter.accept(builder);
List<ParameterElement> parameters = holder.parameters;
expect(parameters, hasLength(1));
@@ -5399,10 +5146,10 @@
ElementBuilder builder = new ElementBuilder(holder);
String firstParameterName = "a";
String secondParameterName = "b";
- FormalParameterList parameterList = AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3(firstParameterName),
- AstFactory.simpleFormalParameter3(secondParameterName)]);
+ FormalParameterList parameterList = AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3(firstParameterName),
+ AstFactory.simpleFormalParameter3(secondParameterName)
+ ]);
parameterList.accept(builder);
List<ParameterElement> parameters = holder.parameters;
expect(parameters, hasLength(2));
@@ -5414,13 +5161,9 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String functionName = "f";
- FunctionDeclaration declaration = AstFactory.functionDeclaration(
- null,
- Keyword.GET,
- functionName,
- AstFactory.functionExpression2(
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ FunctionDeclaration declaration = AstFactory.functionDeclaration(null,
+ Keyword.GET, functionName, AstFactory.functionExpression2(
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2()));
declaration.accept(builder);
List<PropertyAccessorElement> accessors = holder.accessors;
expect(accessors, hasLength(1));
@@ -5433,10 +5176,8 @@
expect(accessor.isSetter, isFalse);
expect(accessor.isSynthetic, isFalse);
PropertyInducingElement variable = accessor.variable;
- EngineTestCase.assertInstanceOf(
- (obj) => obj is TopLevelVariableElement,
- TopLevelVariableElement,
- variable);
+ EngineTestCase.assertInstanceOf((obj) => obj is TopLevelVariableElement,
+ TopLevelVariableElement, variable);
expect(variable.isSynthetic, isTrue);
}
@@ -5444,13 +5185,9 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String functionName = "f";
- FunctionDeclaration declaration = AstFactory.functionDeclaration(
- null,
- null,
- functionName,
- AstFactory.functionExpression2(
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ FunctionDeclaration declaration = AstFactory.functionDeclaration(null, null,
+ functionName, AstFactory.functionExpression2(
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2()));
declaration.accept(builder);
List<FunctionElement> functions = holder.functions;
expect(functions, hasLength(1));
@@ -5466,13 +5203,9 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String functionName = "f";
- FunctionDeclaration declaration = AstFactory.functionDeclaration(
- null,
- Keyword.SET,
- functionName,
- AstFactory.functionExpression2(
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ FunctionDeclaration declaration = AstFactory.functionDeclaration(null,
+ Keyword.SET, functionName, AstFactory.functionExpression2(
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2()));
declaration.accept(builder);
List<PropertyAccessorElement> accessors = holder.accessors;
expect(accessors, hasLength(1));
@@ -5485,10 +5218,8 @@
expect(accessor.isSetter, isTrue);
expect(accessor.isSynthetic, isFalse);
PropertyInducingElement variable = accessor.variable;
- EngineTestCase.assertInstanceOf(
- (obj) => obj is TopLevelVariableElement,
- TopLevelVariableElement,
- variable);
+ EngineTestCase.assertInstanceOf((obj) => obj is TopLevelVariableElement,
+ TopLevelVariableElement, variable);
expect(variable.isSynthetic, isTrue);
}
@@ -5496,8 +5227,7 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
FunctionExpression expression = AstFactory.functionExpression2(
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2());
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2());
expression.accept(builder);
List<FunctionElement> functions = holder.functions;
expect(functions, hasLength(1));
@@ -5513,10 +5243,7 @@
String aliasName = "F";
String parameterName = "E";
FunctionTypeAlias aliasNode = AstFactory.typeAlias(
- null,
- aliasName,
- AstFactory.typeParameterList([parameterName]),
- null);
+ null, aliasName, AstFactory.typeParameterList([parameterName]), null);
aliasNode.accept(builder);
List<FunctionTypeAliasElement> aliases = holder.typeAliases;
expect(aliases, hasLength(1));
@@ -5561,8 +5288,7 @@
ElementBuilder builder = new ElementBuilder(holder);
String labelName = "l";
LabeledStatement statement = AstFactory.labeledStatement(
- [AstFactory.label2(labelName)],
- AstFactory.breakStatement());
+ [AstFactory.label2(labelName)], AstFactory.breakStatement());
statement.accept(builder);
List<LabelElement> labels = holder.labels;
expect(labels, hasLength(1));
@@ -5576,14 +5302,9 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String methodName = "m";
- MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
- AstFactory.identifier3(methodName),
- AstFactory.formalParameterList(),
- AstFactory.emptyFunctionBody());
+ MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(null,
+ null, null, null, AstFactory.identifier3(methodName),
+ AstFactory.formalParameterList(), AstFactory.emptyFunctionBody());
methodDeclaration.accept(builder);
List<MethodElement> methods = holder.methods;
expect(methods, hasLength(1));
@@ -5603,14 +5324,9 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String methodName = "m";
- MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
- null,
- null,
- Keyword.GET,
- null,
- AstFactory.identifier3(methodName),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2());
+ MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(null,
+ null, Keyword.GET, null, AstFactory.identifier3(methodName),
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2());
methodDeclaration.accept(builder);
List<FieldElement> fields = holder.fields;
expect(fields, hasLength(1));
@@ -5636,14 +5352,9 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String methodName = "m";
- MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
- null,
- null,
- Keyword.GET,
- null,
- AstFactory.identifier3(methodName),
- AstFactory.formalParameterList(),
- AstFactory.emptyFunctionBody());
+ MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(null,
+ null, Keyword.GET, null, AstFactory.identifier3(methodName),
+ AstFactory.formalParameterList(), AstFactory.emptyFunctionBody());
methodDeclaration.accept(builder);
List<FieldElement> fields = holder.fields;
expect(fields, hasLength(1));
@@ -5669,12 +5380,8 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String methodName = "m";
- MethodDeclaration methodDeclaration = AstFactory.methodDeclaration(
- null,
- null,
- Keyword.GET,
- null,
- AstFactory.identifier3(methodName),
+ MethodDeclaration methodDeclaration = AstFactory.methodDeclaration(null,
+ null, Keyword.GET, null, AstFactory.identifier3(methodName),
AstFactory.formalParameterList());
methodDeclaration.accept(builder);
List<FieldElement> fields = holder.fields;
@@ -5701,14 +5408,9 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String methodName = "m";
- MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
- AstFactory.identifier3(methodName),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2());
+ MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(null,
+ null, null, null, AstFactory.identifier3(methodName),
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2());
methodDeclaration.accept(builder);
List<MethodElement> methods = holder.methods;
expect(methods, hasLength(1));
@@ -5728,13 +5430,10 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String methodName = "+";
- MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
- null,
- null,
- null,
- Keyword.OPERATOR,
- AstFactory.identifier3(methodName),
- AstFactory.formalParameterList([AstFactory.simpleFormalParameter3("addend")]),
+ MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(null,
+ null, null, Keyword.OPERATOR, AstFactory.identifier3(methodName),
+ AstFactory
+ .formalParameterList([AstFactory.simpleFormalParameter3("addend")]),
AstFactory.blockFunctionBody2());
methodDeclaration.accept(builder);
List<MethodElement> methods = holder.methods;
@@ -5755,14 +5454,9 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String methodName = "m";
- MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
- null,
- null,
- Keyword.SET,
- null,
- AstFactory.identifier3(methodName),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2());
+ MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(null,
+ null, Keyword.SET, null, AstFactory.identifier3(methodName),
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2());
methodDeclaration.accept(builder);
List<FieldElement> fields = holder.fields;
expect(fields, hasLength(1));
@@ -5789,14 +5483,9 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String methodName = "m";
- MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
- null,
- null,
- Keyword.SET,
- null,
- AstFactory.identifier3(methodName),
- AstFactory.formalParameterList(),
- AstFactory.emptyFunctionBody());
+ MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(null,
+ null, Keyword.SET, null, AstFactory.identifier3(methodName),
+ AstFactory.formalParameterList(), AstFactory.emptyFunctionBody());
methodDeclaration.accept(builder);
List<FieldElement> fields = holder.fields;
expect(fields, hasLength(1));
@@ -5823,12 +5512,8 @@
ElementHolder holder = new ElementHolder();
ElementBuilder builder = new ElementBuilder(holder);
String methodName = "m";
- MethodDeclaration methodDeclaration = AstFactory.methodDeclaration(
- null,
- null,
- Keyword.SET,
- null,
- AstFactory.identifier3(methodName),
+ MethodDeclaration methodDeclaration = AstFactory.methodDeclaration(null,
+ null, Keyword.SET, null, AstFactory.identifier3(methodName),
AstFactory.formalParameterList());
methodDeclaration.accept(builder);
List<FieldElement> fields = holder.fields;
@@ -5857,13 +5542,8 @@
ElementBuilder builder = new ElementBuilder(holder);
String methodName = "m";
MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
- Keyword.STATIC,
- null,
- null,
- null,
- AstFactory.identifier3(methodName),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2());
+ Keyword.STATIC, null, null, null, AstFactory.identifier3(methodName),
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2());
methodDeclaration.accept(builder);
List<MethodElement> methods = holder.methods;
expect(methods, hasLength(1));
@@ -5887,26 +5567,18 @@
String localVariableName = "v";
String labelName = "l";
String exceptionParameterName = "e";
- MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
- AstFactory.identifier3(methodName),
- AstFactory.formalParameterList(
- [AstFactory.simpleFormalParameter3(parameterName)]),
- AstFactory.blockFunctionBody2(
- [
- AstFactory.variableDeclarationStatement2(
- Keyword.VAR,
- [AstFactory.variableDeclaration(localVariableName)]),
- AstFactory.tryStatement2(
- AstFactory.block(
- [
- AstFactory.labeledStatement(
- [AstFactory.label2(labelName)],
- AstFactory.returnStatement())]),
- [AstFactory.catchClause(exceptionParameterName)])]));
+ MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(null,
+ null, null, null, AstFactory.identifier3(methodName), AstFactory
+ .formalParameterList(
+ [AstFactory.simpleFormalParameter3(parameterName)]), AstFactory
+ .blockFunctionBody2([
+ AstFactory.variableDeclarationStatement2(
+ Keyword.VAR, [AstFactory.variableDeclaration(localVariableName)]),
+ AstFactory.tryStatement2(AstFactory.block([
+ AstFactory.labeledStatement(
+ [AstFactory.label2(labelName)], AstFactory.returnStatement())
+ ]), [AstFactory.catchClause(exceptionParameterName)])
+ ]));
methodDeclaration.accept(builder);
List<MethodElement> methods = holder.methods;
expect(methods, hasLength(1));
@@ -5927,12 +5599,10 @@
VariableElement secondVariable = localVariables[1];
expect(firstVariable, isNotNull);
expect(secondVariable, isNotNull);
- expect(
- (firstVariable.name == localVariableName &&
+ expect((firstVariable.name == localVariableName &&
secondVariable.name == exceptionParameterName) ||
- (firstVariable.name == exceptionParameterName &&
- secondVariable.name == localVariableName),
- isTrue);
+ (firstVariable.name == exceptionParameterName &&
+ secondVariable.name == localVariableName), isTrue);
List<LabelElement> labels = method.labels;
expect(labels, hasLength(1));
LabelElement label = labels[0];
@@ -6015,14 +5685,11 @@
String aliasName = "F";
String firstParameterName = "x";
String secondParameterName = "y";
- TypeAlias typeAlias = AstFactory.typeAlias(
- null,
- aliasName,
- AstFactory.typeParameterList(),
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3(firstParameterName),
- AstFactory.simpleFormalParameter3(secondParameterName)]));
+ TypeAlias typeAlias = AstFactory.typeAlias(null, aliasName,
+ AstFactory.typeParameterList(), AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3(firstParameterName),
+ AstFactory.simpleFormalParameter3(secondParameterName)
+ ]));
typeAlias.accept(builder);
List<FunctionTypeAliasElement> aliases = holder.typeAliases;
expect(aliases, hasLength(1));
@@ -6046,11 +5713,11 @@
String aliasName = "F";
String firstTypeParameterName = "A";
String secondTypeParameterName = "B";
- TypeAlias typeAlias = AstFactory.typeAlias(
- null,
- aliasName,
- AstFactory.typeParameterList([firstTypeParameterName, secondTypeParameterName]),
- AstFactory.formalParameterList());
+ TypeAlias typeAlias = AstFactory.typeAlias(null, aliasName, AstFactory
+ .typeParameterList([
+ firstTypeParameterName,
+ secondTypeParameterName
+ ]), AstFactory.formalParameterList());
typeAlias.accept(builder);
List<FunctionTypeAliasElement> aliases = holder.typeAliases;
expect(aliases, hasLength(1));
@@ -6095,12 +5762,8 @@
Statement statement =
AstFactory.variableDeclarationStatement2(null, [variable]);
ConstructorDeclaration constructor = AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- "C",
- AstFactory.formalParameterList(),
- null,
+ null, null, AstFactory.identifier3("C"), "C",
+ AstFactory.formalParameterList(), null,
AstFactory.blockFunctionBody2([statement]));
constructor.accept(builder);
List<ConstructorElement> constructors = holder.constructors;
@@ -6123,12 +5786,8 @@
AstFactory.variableDeclaration2(variableName, null);
Statement statement =
AstFactory.variableDeclarationStatement2(null, [variable]);
- MethodDeclaration constructor = AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
- AstFactory.identifier3("m"),
+ MethodDeclaration constructor = AstFactory.methodDeclaration2(null, null,
+ null, null, AstFactory.identifier3("m"),
AstFactory.formalParameterList(),
AstFactory.blockFunctionBody2([statement]));
constructor.accept(builder);
@@ -6241,42 +5900,32 @@
expect(variable.setter, isNull);
}
- void _useParameterInMethod(FormalParameter formalParameter, int blockOffset,
- int blockEnd) {
+ void _useParameterInMethod(
+ FormalParameter formalParameter, int blockOffset, int blockEnd) {
Block block = AstFactory.block();
block.leftBracket.offset = blockOffset;
block.rightBracket.offset = blockEnd - 1;
BlockFunctionBody body = AstFactory.blockFunctionBody(block);
- AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
+ AstFactory.methodDeclaration2(null, null, null, null,
AstFactory.identifier3("main"),
- AstFactory.formalParameterList([formalParameter]),
- body);
+ AstFactory.formalParameterList([formalParameter]), body);
}
}
-
@reflectiveTest
class ElementLocatorTest extends ResolverTestCase {
void fail_locate_ExportDirective() {
AstNode id = _findNodeIn("export", "export 'dart:core';");
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ImportElement,
- ImportElement,
- element);
+ (obj) => obj is ImportElement, ImportElement, element);
}
void fail_locate_Identifier_libraryDirective() {
AstNode id = _findNodeIn("foo", "library foo.bar;");
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is LibraryElement,
- LibraryElement,
- element);
+ (obj) => obj is LibraryElement, LibraryElement, element);
}
void fail_locate_Identifier_partOfDirective() {
@@ -6302,27 +5951,21 @@
}''');
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodElement,
- MethodElement,
- element);
+ (obj) => obj is MethodElement, MethodElement, element);
}
void test_locate_BinaryExpression() {
AstNode id = _findNodeIn("+", "var x = 3 + 4;");
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodElement,
- MethodElement,
- element);
+ (obj) => obj is MethodElement, MethodElement, element);
}
void test_locate_ClassDeclaration() {
AstNode id = _findNodeIn("class", "class A { }");
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ClassElement,
- ClassElement,
- element);
+ (obj) => obj is ClassElement, ClassElement, element);
}
void test_locate_CompilationUnit() {
@@ -6341,9 +5984,7 @@
id.getAncestor((node) => node is ConstructorDeclaration);
Element element = ElementLocator.locate(declaration);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ConstructorElement,
- ConstructorElement,
- element);
+ (obj) => obj is ConstructorElement, ConstructorElement, element);
}
void test_locate_FunctionDeclaration() {
@@ -6352,13 +5993,10 @@
id.getAncestor((node) => node is FunctionDeclaration);
Element element = ElementLocator.locate(declaration);
EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionElement,
- FunctionElement,
- element);
+ (obj) => obj is FunctionElement, FunctionElement, element);
}
- void
- test_locate_Identifier_annotationClass_namedConstructor_forSimpleFormalParameter() {
+ void test_locate_Identifier_annotationClass_namedConstructor_forSimpleFormalParameter() {
AstNode id = _findNodeIndexedIn("Class", 2, r'''
class Class {
const Class.name();
@@ -6367,13 +6005,10 @@
}''');
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ClassElement,
- ClassElement,
- element);
+ (obj) => obj is ClassElement, ClassElement, element);
}
- void
- test_locate_Identifier_annotationClass_unnamedConstructor_forSimpleFormalParameter() {
+ void test_locate_Identifier_annotationClass_unnamedConstructor_forSimpleFormalParameter() {
AstNode id = _findNodeIndexedIn("Class", 2, r'''
class Class {
const Class();
@@ -6382,18 +6017,14 @@
}''');
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ConstructorElement,
- ConstructorElement,
- element);
+ (obj) => obj is ConstructorElement, ConstructorElement, element);
}
void test_locate_Identifier_className() {
AstNode id = _findNodeIn("A", "class A { }");
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ClassElement,
- ClassElement,
- element);
+ (obj) => obj is ClassElement, ClassElement, element);
}
void test_locate_Identifier_constructor_named() {
@@ -6403,9 +6034,7 @@
}''');
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ConstructorElement,
- ConstructorElement,
- element);
+ (obj) => obj is ConstructorElement, ConstructorElement, element);
}
void test_locate_Identifier_constructor_unnamed() {
@@ -6415,18 +6044,14 @@
}''');
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ConstructorElement,
- ConstructorElement,
- element);
+ (obj) => obj is ConstructorElement, ConstructorElement, element);
}
void test_locate_Identifier_fieldName() {
AstNode id = _findNodeIn("x", "class A { var x; }");
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is FieldElement,
- FieldElement,
- element);
+ (obj) => obj is FieldElement, FieldElement, element);
}
void test_locate_Identifier_propertAccess() {
@@ -6435,19 +6060,15 @@
int x = 'foo'.length;
}''');
Element element = ElementLocator.locate(id);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is PropertyAccessorElement,
- PropertyAccessorElement,
- element);
+ EngineTestCase.assertInstanceOf((obj) => obj is PropertyAccessorElement,
+ PropertyAccessorElement, element);
}
void test_locate_ImportDirective() {
AstNode id = _findNodeIn("import", "import 'dart:core';");
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ImportElement,
- ImportElement,
- element);
+ (obj) => obj is ImportElement, ImportElement, element);
}
void test_locate_IndexExpression() {
@@ -6458,9 +6079,7 @@
}''');
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodElement,
- MethodElement,
- element);
+ (obj) => obj is MethodElement, MethodElement, element);
}
void test_locate_InstanceCreationExpression() {
@@ -6471,9 +6090,7 @@
}''');
Element element = ElementLocator.locate(node);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ConstructorElement,
- ConstructorElement,
- element);
+ (obj) => obj is ConstructorElement, ConstructorElement, element);
}
void test_locate_InstanceCreationExpression_type_prefixedIdentifier() {
@@ -6481,10 +6098,9 @@
SimpleIdentifier identifier = AstFactory.identifier3("A");
PrefixedIdentifier prefixedIdentifier =
AstFactory.identifier4("pref", identifier);
- InstanceCreationExpression creation =
- AstFactory.instanceCreationExpression2(
- Keyword.NEW,
- AstFactory.typeName3(prefixedIdentifier));
+ InstanceCreationExpression creation = AstFactory
+ .instanceCreationExpression2(
+ Keyword.NEW, AstFactory.typeName3(prefixedIdentifier));
// set ClassElement
ClassElement classElement = ElementFactory.classElement2("A");
identifier.staticElement = classElement;
@@ -6500,10 +6116,9 @@
void test_locate_InstanceCreationExpression_type_simpleIdentifier() {
// prepare: new A()
SimpleIdentifier identifier = AstFactory.identifier3("A");
- InstanceCreationExpression creation =
- AstFactory.instanceCreationExpression2(
- Keyword.NEW,
- AstFactory.typeName3(identifier));
+ InstanceCreationExpression creation = AstFactory
+ .instanceCreationExpression2(
+ Keyword.NEW, AstFactory.typeName3(identifier));
// set ClassElement
ClassElement classElement = ElementFactory.classElement2("A");
identifier.staticElement = classElement;
@@ -6520,9 +6135,7 @@
AstNode id = _findNodeIn("library", "library foo;");
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is LibraryElement,
- LibraryElement,
- element);
+ (obj) => obj is LibraryElement, LibraryElement, element);
}
void test_locate_MethodDeclaration() {
@@ -6534,9 +6147,7 @@
id.getAncestor((node) => node is MethodDeclaration);
Element element = ElementLocator.locate(declaration);
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodElement,
- MethodElement,
- element);
+ (obj) => obj is MethodElement, MethodElement, element);
}
void test_locate_MethodInvocation_method() {
@@ -6549,9 +6160,7 @@
}''');
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodElement,
- MethodElement,
- element);
+ (obj) => obj is MethodElement, MethodElement, element);
}
void test_locate_MethodInvocation_topLevel() {
@@ -6567,18 +6176,14 @@
node.getAncestor((n) => n is MethodInvocation);
Element element = ElementLocator.locate(invocation);
EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionElement,
- FunctionElement,
- element);
+ (obj) => obj is FunctionElement, FunctionElement, element);
}
void test_locate_PostfixExpression() {
AstNode id = _findNodeIn("++", "int addOne(int x) => x++;");
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodElement,
- MethodElement,
- element);
+ (obj) => obj is MethodElement, MethodElement, element);
}
void test_locate_PrefixedIdentifier() {
@@ -6589,18 +6194,14 @@
id.getAncestor((node) => node is PrefixedIdentifier);
Element element = ElementLocator.locate(identifier);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ClassElement,
- ClassElement,
- element);
+ (obj) => obj is ClassElement, ClassElement, element);
}
void test_locate_PrefixExpression() {
AstNode id = _findNodeIn("++", "int addOne(int x) => ++x;");
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodElement,
- MethodElement,
- element);
+ (obj) => obj is MethodElement, MethodElement, element);
}
void test_locate_StringLiteral_exportUri() {
@@ -6608,9 +6209,7 @@
AstNode id = _findNodeIn("'foo.dart'", "export 'foo.dart';");
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is LibraryElement,
- LibraryElement,
- element);
+ (obj) => obj is LibraryElement, LibraryElement, element);
}
void test_locate_StringLiteral_expression() {
@@ -6625,19 +6224,15 @@
_findNodeIn("'foo.dart'", "import 'foo.dart'; class B extends A {}");
Element element = ElementLocator.locate(id);
EngineTestCase.assertInstanceOf(
- (obj) => obj is LibraryElement,
- LibraryElement,
- element);
+ (obj) => obj is LibraryElement, LibraryElement, element);
}
void test_locate_StringLiteral_partUri() {
addNamedSource("/foo.dart", "part of app;");
AstNode id = _findNodeIn("'foo.dart'", "library app; part 'foo.dart';");
Element element = ElementLocator.locate(id);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is CompilationUnitElement,
- CompilationUnitElement,
- element);
+ EngineTestCase.assertInstanceOf((obj) => obj is CompilationUnitElement,
+ CompilationUnitElement, element);
}
void test_locate_VariableDeclaration() {
@@ -6645,19 +6240,15 @@
VariableDeclaration declaration =
id.getAncestor((node) => node is VariableDeclaration);
Element element = ElementLocator.locate(declaration);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is TopLevelVariableElement,
- TopLevelVariableElement,
- element);
+ EngineTestCase.assertInstanceOf((obj) => obj is TopLevelVariableElement,
+ TopLevelVariableElement, element);
}
void test_locateWithOffset_BinaryExpression() {
AstNode id = _findNodeIn("+", "var x = 3 + 4;");
Element element = ElementLocator.locateWithOffset(id, 0);
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodElement,
- MethodElement,
- element);
+ (obj) => obj is MethodElement, MethodElement, element);
}
void test_locateWithOffset_StringLiteral() {
@@ -6729,7 +6320,6 @@
}
}
-
@reflectiveTest
class EnumMemberBuilderTest extends EngineTestCase {
void test_visitEnumDeclaration_multiple() {
@@ -6812,7 +6402,6 @@
}
}
-
@reflectiveTest
class ErrorReporterTest extends EngineTestCase {
/**
@@ -6843,8 +6432,7 @@
new ErrorReporter(listener, firstType.element.source);
reporter.reportTypeErrorForNode(
StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
- AstFactory.identifier3("x"),
- [firstType, secondType]);
+ AstFactory.identifier3("x"), [firstType, secondType]);
AnalysisError error = listener.errors[0];
expect(error.message.indexOf("(") < 0, isTrue);
}
@@ -6858,8 +6446,7 @@
new ErrorReporter(listener, firstType.element.source);
reporter.reportTypeErrorForNode(
StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
- AstFactory.identifier3("x"),
- [firstType, secondType]);
+ AstFactory.identifier3("x"), [firstType, secondType]);
AnalysisError error = listener.errors[0];
expect(error.message.indexOf("(") >= 0, isTrue);
}
@@ -6868,56 +6455,47 @@
@reflectiveTest
class ErrorSeverityTest extends EngineTestCase {
void test_max_error_error() {
- expect(
- ErrorSeverity.ERROR.max(ErrorSeverity.ERROR),
+ expect(ErrorSeverity.ERROR.max(ErrorSeverity.ERROR),
same(ErrorSeverity.ERROR));
}
void test_max_error_none() {
expect(
- ErrorSeverity.ERROR.max(ErrorSeverity.NONE),
- same(ErrorSeverity.ERROR));
+ ErrorSeverity.ERROR.max(ErrorSeverity.NONE), same(ErrorSeverity.ERROR));
}
void test_max_error_warning() {
- expect(
- ErrorSeverity.ERROR.max(ErrorSeverity.WARNING),
+ expect(ErrorSeverity.ERROR.max(ErrorSeverity.WARNING),
same(ErrorSeverity.ERROR));
}
void test_max_none_error() {
expect(
- ErrorSeverity.NONE.max(ErrorSeverity.ERROR),
- same(ErrorSeverity.ERROR));
+ ErrorSeverity.NONE.max(ErrorSeverity.ERROR), same(ErrorSeverity.ERROR));
}
void test_max_none_none() {
expect(
- ErrorSeverity.NONE.max(ErrorSeverity.NONE),
- same(ErrorSeverity.NONE));
+ ErrorSeverity.NONE.max(ErrorSeverity.NONE), same(ErrorSeverity.NONE));
}
void test_max_none_warning() {
- expect(
- ErrorSeverity.NONE.max(ErrorSeverity.WARNING),
+ expect(ErrorSeverity.NONE.max(ErrorSeverity.WARNING),
same(ErrorSeverity.WARNING));
}
void test_max_warning_error() {
- expect(
- ErrorSeverity.WARNING.max(ErrorSeverity.ERROR),
+ expect(ErrorSeverity.WARNING.max(ErrorSeverity.ERROR),
same(ErrorSeverity.ERROR));
}
void test_max_warning_none() {
- expect(
- ErrorSeverity.WARNING.max(ErrorSeverity.NONE),
+ expect(ErrorSeverity.WARNING.max(ErrorSeverity.NONE),
same(ErrorSeverity.WARNING));
}
void test_max_warning_warning() {
- expect(
- ErrorSeverity.WARNING.max(ErrorSeverity.WARNING),
+ expect(ErrorSeverity.WARNING.max(ErrorSeverity.WARNING),
same(ErrorSeverity.WARNING));
}
}
@@ -7423,7 +7001,6 @@
}
}
-
/**
* Tests for the [ExitDetector] that require that the AST be resolved.
*
@@ -7516,7 +7093,6 @@
}
}
-
@reflectiveTest
class FileBasedSourceTest {
void test_equals_false_differentFiles() {
@@ -7668,8 +7244,8 @@
void test_resolveRelative_dart_filePathWithParent() {
JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
- FileBasedSource source =
- new FileBasedSource.con2(parseUriWithException("dart:test/b/test.dart"), file);
+ FileBasedSource source = new FileBasedSource.con2(
+ parseUriWithException("dart:test/b/test.dart"), file);
expect(source, isNotNull);
Uri relative =
source.resolveRelativeUri(parseUriWithException("../c/lib.dart"));
@@ -7725,8 +7301,8 @@
void test_resolveRelative_package_fileName() {
JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
- FileBasedSource source =
- new FileBasedSource.con2(parseUriWithException("package:b/test.dart"), file);
+ FileBasedSource source = new FileBasedSource.con2(
+ parseUriWithException("package:b/test.dart"), file);
expect(source, isNotNull);
Uri relative = source.resolveRelativeUri(parseUriWithException("lib.dart"));
expect(relative, isNotNull);
@@ -7735,8 +7311,8 @@
void test_resolveRelative_package_fileNameWithoutPackageName() {
JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
- FileBasedSource source =
- new FileBasedSource.con2(parseUriWithException("package:test.dart"), file);
+ FileBasedSource source = new FileBasedSource.con2(
+ parseUriWithException("package:test.dart"), file);
expect(source, isNotNull);
Uri relative = source.resolveRelativeUri(parseUriWithException("lib.dart"));
expect(relative, isNotNull);
@@ -7745,8 +7321,8 @@
void test_resolveRelative_package_filePath() {
JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
- FileBasedSource source =
- new FileBasedSource.con2(parseUriWithException("package:b/test.dart"), file);
+ FileBasedSource source = new FileBasedSource.con2(
+ parseUriWithException("package:b/test.dart"), file);
expect(source, isNotNull);
Uri relative =
source.resolveRelativeUri(parseUriWithException("c/lib.dart"));
@@ -7756,8 +7332,8 @@
void test_resolveRelative_package_filePathWithParent() {
JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
- FileBasedSource source =
- new FileBasedSource.con2(parseUriWithException("package:a/b/test.dart"), file);
+ FileBasedSource source = new FileBasedSource.con2(
+ parseUriWithException("package:a/b/test.dart"), file);
expect(source, isNotNull);
Uri relative =
source.resolveRelativeUri(parseUriWithException("../c/lib.dart"));
@@ -7775,7 +7351,6 @@
}
}
-
@reflectiveTest
class FileUriResolverTest {
void test_creation() {
@@ -7784,11 +7359,10 @@
void test_resolve_file() {
UriResolver resolver = new FileUriResolver();
- Source result =
- resolver.resolveAbsolute(parseUriWithException("file:/does/not/exist.dart"));
+ Source result = resolver
+ .resolveAbsolute(parseUriWithException("file:/does/not/exist.dart"));
expect(result, isNotNull);
- expect(
- result.fullName,
+ expect(result.fullName,
FileUtilities2.createFile("/does/not/exist.dart").getAbsolutePath());
}
@@ -7800,7 +7374,6 @@
}
}
-
@reflectiveTest
class HtmlParserTest extends EngineTestCase {
/**
@@ -7822,13 +7395,13 @@
</script>
</body>
</html>""");
- _validate(
- htmlUnit,
- [
- _t4(
- "html",
- [
- _t4("body", [_t("script", _a(["type", "'application/dart'"]), scriptBody)])])]);
+ _validate(htmlUnit, [
+ _t4("html", [
+ _t4("body", [
+ _t("script", _a(["type", "'application/dart'"]), scriptBody)
+ ])
+ ])
+ ]);
}
ht.HtmlUnit parse(String contents) {
// TestSource source =
@@ -7846,8 +7419,7 @@
void test_parse_attribute() {
ht.HtmlUnit htmlUnit = parse("<html><body foo=\"sdfsdf\"></body></html>");
_validate(
- htmlUnit,
- [_t4("html", [_t("body", _a(["foo", "\"sdfsdf\""]), "")])]);
+ htmlUnit, [_t4("html", [_t("body", _a(["foo", "\"sdfsdf\""]), "")])]);
ht.XmlTagNode htmlNode = htmlUnit.tagNodes[0];
ht.XmlTagNode bodyNode = htmlNode.tagNodes[0];
expect(bodyNode.attributes[0].text, "sdfsdf");
@@ -7855,14 +7427,12 @@
void test_parse_attribute_EOF() {
ht.HtmlUnit htmlUnit = parse("<html><body foo=\"sdfsdf\"");
_validate(
- htmlUnit,
- [_t4("html", [_t("body", _a(["foo", "\"sdfsdf\""]), "")])]);
+ htmlUnit, [_t4("html", [_t("body", _a(["foo", "\"sdfsdf\""]), "")])]);
}
void test_parse_attribute_EOF_missing_quote() {
ht.HtmlUnit htmlUnit = parse("<html><body foo=\"sdfsd");
_validate(
- htmlUnit,
- [_t4("html", [_t("body", _a(["foo", "\"sdfsd"]), "")])]);
+ htmlUnit, [_t4("html", [_t("body", _a(["foo", "\"sdfsd"]), "")])]);
ht.XmlTagNode htmlNode = htmlUnit.tagNodes[0];
ht.XmlTagNode bodyNode = htmlNode.tagNodes[0];
expect(bodyNode.attributes[0].text, "sdfsd");
@@ -7870,14 +7440,12 @@
void test_parse_attribute_extra_quote() {
ht.HtmlUnit htmlUnit = parse("<html><body foo=\"sdfsdf\"\"></body></html>");
_validate(
- htmlUnit,
- [_t4("html", [_t("body", _a(["foo", "\"sdfsdf\""]), "")])]);
+ htmlUnit, [_t4("html", [_t("body", _a(["foo", "\"sdfsdf\""]), "")])]);
}
void test_parse_attribute_single_quote() {
ht.HtmlUnit htmlUnit = parse("<html><body foo='sdfsdf'></body></html>");
_validate(
- htmlUnit,
- [_t4("html", [_t("body", _a(["foo", "'sdfsdf'"]), "")])]);
+ htmlUnit, [_t4("html", [_t("body", _a(["foo", "'sdfsdf'"]), "")])]);
ht.XmlTagNode htmlNode = htmlUnit.tagNodes[0];
ht.XmlTagNode bodyNode = htmlNode.tagNodes[0];
expect(bodyNode.attributes[0].text, "sdfsdf");
@@ -7898,19 +7466,16 @@
ht.HtmlUnit htmlUnit = parse("<html>\n<p a=\"b\">blat \n </p>\n</html>");
// ht.XmlTagNode.getContent() does not include whitespace
// between '<' and '>' at this time
- _validate(
- htmlUnit,
- [
- _t3(
- "html",
- "\n<pa=\"b\">blat \n </p>\n",
- [_t("p", _a(["a", "\"b\""]), "blat \n ")])]);
+ _validate(htmlUnit, [
+ _t3("html", "\n<pa=\"b\">blat \n </p>\n", [
+ _t("p", _a(["a", "\"b\""]), "blat \n ")
+ ])
+ ]);
}
void test_parse_content_none() {
ht.HtmlUnit htmlUnit = parse("<html><p/>blat<p/></html>");
_validate(
- htmlUnit,
- [_t3("html", "<p/>blat<p/>", [_t3("p", ""), _t3("p", "")])]);
+ htmlUnit, [_t3("html", "<p/>blat<p/>", [_t3("p", ""), _t3("p", "")])]);
}
void test_parse_declaration() {
ht.HtmlUnit htmlUnit = parse("<!DOCTYPE html>\n\n<html><p></p></html>");
@@ -7948,8 +7513,7 @@
</html>''';
ht.HtmlUnit htmlUnit = parse(code);
_validate(
- htmlUnit,
- [_t4("html", [_t4("body", [_t3("h2", "000"), _t4("div")])])]);
+ htmlUnit, [_t4("html", [_t4("body", [_t3("h2", "000"), _t4("div")])])]);
}
void test_parse_script() {
ht.HtmlUnit htmlUnit =
@@ -7966,15 +7530,16 @@
}
XmlValidator_Attributes _a(List<String> keyValuePairs) =>
new XmlValidator_Attributes(keyValuePairs);
- XmlValidator_Tag _t(String tag, XmlValidator_Attributes attributes,
- String content, [List<XmlValidator_Tag> children =
- XmlValidator_Tag.EMPTY_LIST]) =>
+ XmlValidator_Tag _t(
+ String tag, XmlValidator_Attributes attributes, String content,
+ [List<XmlValidator_Tag> children = XmlValidator_Tag.EMPTY_LIST]) =>
new XmlValidator_Tag(tag, attributes, content, children);
XmlValidator_Tag _t3(String tag, String content,
- [List<XmlValidator_Tag> children = XmlValidator_Tag.EMPTY_LIST]) =>
- new XmlValidator_Tag(tag, new XmlValidator_Attributes(), content, children);
- XmlValidator_Tag _t4(String tag, [List<XmlValidator_Tag> children =
- XmlValidator_Tag.EMPTY_LIST]) =>
+ [List<XmlValidator_Tag> children = XmlValidator_Tag.EMPTY_LIST]) =>
+ new XmlValidator_Tag(
+ tag, new XmlValidator_Attributes(), content, children);
+ XmlValidator_Tag _t4(String tag,
+ [List<XmlValidator_Tag> children = XmlValidator_Tag.EMPTY_LIST]) =>
new XmlValidator_Tag(tag, new XmlValidator_Attributes(), null, children);
void _validate(ht.HtmlUnit htmlUnit, List<XmlValidator_Tag> expectedTags) {
XmlValidator validator = new XmlValidator();
@@ -7984,7 +7549,6 @@
}
}
-
@reflectiveTest
class HtmlTagInfoBuilderTest extends HtmlParserTest {
void test_builder() {
@@ -8008,7 +7572,6 @@
}
}
-
@reflectiveTest
class HtmlUnitBuilderTest extends EngineTestCase {
AnalysisContextImpl _context;
@@ -8073,17 +7636,15 @@
}
HtmlElementImpl _build(String contents) {
TestSource source = new TestSource(
- FileUtilities2.createFile("/test.html").getAbsolutePath(),
- contents);
+ FileUtilities2.createFile("/test.html").getAbsolutePath(), contents);
ChangeSet changeSet = new ChangeSet();
changeSet.addedSource(source);
_context.applyChanges(changeSet);
HtmlUnitBuilder builder = new HtmlUnitBuilder(_context);
return builder.buildHtmlElement(source, _context.parseHtmlUnit(source));
}
- HtmlUnitBuilderTest_ExpectedLibrary
- _l([List<HtmlUnitBuilderTest_ExpectedVariable> expectedVariables =
- HtmlUnitBuilderTest_ExpectedVariable.EMPTY_LIST]) =>
+ HtmlUnitBuilderTest_ExpectedLibrary _l(
+ [List<HtmlUnitBuilderTest_ExpectedVariable> expectedVariables = HtmlUnitBuilderTest_ExpectedVariable.EMPTY_LIST]) =>
new HtmlUnitBuilderTest_ExpectedLibrary(this, expectedVariables);
_ExpectedScript _s(HtmlUnitBuilderTest_ExpectedLibrary expectedLibrary) =>
new _ExpectedScript.con1(expectedLibrary);
@@ -8091,8 +7652,8 @@
new _ExpectedScript.con2(scriptSourcePath);
HtmlUnitBuilderTest_ExpectedVariable _v(String varName) =>
new HtmlUnitBuilderTest_ExpectedVariable(varName);
- void _validate(HtmlElementImpl element,
- List<_ExpectedScript> expectedScripts) {
+ void _validate(
+ HtmlElementImpl element, List<_ExpectedScript> expectedScripts) {
expect(element.context, same(_context));
List<HtmlScriptElement> scripts = element.scripts;
expect(scripts, isNotNull);
@@ -8103,7 +7664,6 @@
}
}
-
class HtmlUnitBuilderTest_ExpectedLibrary {
final HtmlUnitBuilderTest HtmlUnitBuilderTest_this;
final List<HtmlUnitBuilderTest_ExpectedVariable> _expectedVariables;
@@ -8112,9 +7672,7 @@
void _validate(int scriptIndex, EmbeddedHtmlScriptElementImpl script) {
LibraryElement library = script.scriptLibrary;
expect(library, isNotNull, reason: "script $scriptIndex");
- expect(
- script.context,
- same(HtmlUnitBuilderTest_this._context),
+ expect(script.context, same(HtmlUnitBuilderTest_this._context),
reason: "script $scriptIndex");
CompilationUnitElement unit = library.definingCompilationUnit;
expect(unit, isNotNull, reason: "script $scriptIndex");
@@ -8123,18 +7681,14 @@
for (int index = 0; index < variables.length; index++) {
_expectedVariables[index].validate(scriptIndex, variables[index]);
}
- expect(
- library.enclosingElement,
- same(script),
+ expect(library.enclosingElement, same(script),
reason: "script $scriptIndex");
}
}
-
class HtmlUnitBuilderTest_ExpectedVariable {
- static const List<HtmlUnitBuilderTest_ExpectedVariable> EMPTY_LIST = const
- <HtmlUnitBuilderTest_ExpectedVariable>[
- ];
+ static const List<HtmlUnitBuilderTest_ExpectedVariable> EMPTY_LIST =
+ const <HtmlUnitBuilderTest_ExpectedVariable>[];
final String _expectedName;
HtmlUnitBuilderTest_ExpectedVariable(this._expectedName);
void validate(int scriptIndex, TopLevelVariableElement variable) {
@@ -8143,7 +7697,6 @@
}
}
-
/**
* Instances of the class `HtmlWarningCodeTest` test the generation of HTML warning codes.
*/
@@ -8200,24 +7753,21 @@
_assertErrorLocation2(_errors[0], "other.dart");
}
- void _assertErrorLocation(AnalysisError error, int expectedOffset,
- int expectedLength) {
+ void _assertErrorLocation(
+ AnalysisError error, int expectedOffset, int expectedLength) {
expect(error.offset, expectedOffset, reason: error.toString());
expect(error.length, expectedLength, reason: error.toString());
}
void _assertErrorLocation2(AnalysisError error, String expectedString) {
_assertErrorLocation(
- error,
- _contents.indexOf(expectedString),
- expectedString.length);
+ error, _contents.indexOf(expectedString), expectedString.length);
}
void _verify(String contents, List<ErrorCode> expectedErrorCodes) {
this._contents = contents;
TestSource source = new TestSource(
- FileUtilities2.createFile("/test.html").getAbsolutePath(),
- contents);
+ FileUtilities2.createFile("/test.html").getAbsolutePath(), contents);
ChangeSet changeSet = new ChangeSet();
changeSet.addedSource(source);
_context.applyChanges(changeSet);
@@ -8230,7 +7780,6 @@
}
}
-
/**
* Instances of the class `MockDartSdk` implement a [DartSdk].
*/
@@ -8257,7 +7806,6 @@
Source mapDartUri(String dartUri) => null;
}
-
@reflectiveTest
class ReferenceFinderTest extends EngineTestCase {
DirectedGraph<AstNode> _referenceGraph;
@@ -8338,51 +7886,41 @@
expect(tails, hasLength(1));
expect(tails.first, same(tail));
}
- ReferenceFinder _createReferenceFinder(AstNode source) =>
- new ReferenceFinder(
- source,
- _referenceGraph,
- _variableDeclarationMap,
- _constructorDeclarationMap);
- InstanceCreationExpression _makeTailConstructor(String name,
- bool isConstDeclaration, bool isConstUsage, bool inMap) {
+ ReferenceFinder _createReferenceFinder(AstNode source) => new ReferenceFinder(
+ source, _referenceGraph, _variableDeclarationMap,
+ _constructorDeclarationMap);
+ InstanceCreationExpression _makeTailConstructor(
+ String name, bool isConstDeclaration, bool isConstUsage, bool inMap) {
List<ConstructorInitializer> initializers =
new List<ConstructorInitializer>();
- ConstructorDeclaration constructorDeclaration =
- AstFactory.constructorDeclaration(
- AstFactory.identifier3(name),
- null,
- AstFactory.formalParameterList(),
- initializers);
+ ConstructorDeclaration constructorDeclaration = AstFactory
+ .constructorDeclaration(AstFactory.identifier3(name), null,
+ AstFactory.formalParameterList(), initializers);
if (isConstDeclaration) {
constructorDeclaration.constKeyword = new KeywordToken(Keyword.CONST, 0);
}
ClassElementImpl classElement = ElementFactory.classElement2(name);
SimpleIdentifier identifier = AstFactory.identifier3(name);
TypeName type = AstFactory.typeName3(identifier);
- InstanceCreationExpression instanceCreationExpression =
- AstFactory.instanceCreationExpression2(
- isConstUsage ? Keyword.CONST : Keyword.NEW,
- type);
+ InstanceCreationExpression instanceCreationExpression = AstFactory
+ .instanceCreationExpression2(
+ isConstUsage ? Keyword.CONST : Keyword.NEW, type);
_tail = instanceCreationExpression;
- ConstructorElementImpl constructorElement =
- ElementFactory.constructorElement(classElement, name, isConstDeclaration);
+ ConstructorElementImpl constructorElement = ElementFactory
+ .constructorElement(classElement, name, isConstDeclaration);
if (inMap) {
_constructorDeclarationMap[constructorElement] = constructorDeclaration;
}
instanceCreationExpression.staticElement = constructorElement;
return instanceCreationExpression;
}
- SuperConstructorInvocation _makeTailSuperConstructorInvocation(String name,
- bool isConst, bool inMap) {
+ SuperConstructorInvocation _makeTailSuperConstructorInvocation(
+ String name, bool isConst, bool inMap) {
List<ConstructorInitializer> initializers =
new List<ConstructorInitializer>();
- ConstructorDeclaration constructorDeclaration =
- AstFactory.constructorDeclaration(
- AstFactory.identifier3(name),
- null,
- AstFactory.formalParameterList(),
- initializers);
+ ConstructorDeclaration constructorDeclaration = AstFactory
+ .constructorDeclaration(AstFactory.identifier3(name), null,
+ AstFactory.formalParameterList(), initializers);
_tail = constructorDeclaration;
if (isConst) {
constructorDeclaration.constKeyword = new KeywordToken(Keyword.CONST, 0);
@@ -8406,8 +7944,7 @@
ElementFactory.localVariableElement2(name);
variableElement.const3 = isConst;
AstFactory.variableDeclarationList2(
- isConst ? Keyword.CONST : Keyword.VAR,
- [variableDeclaration]);
+ isConst ? Keyword.CONST : Keyword.VAR, [variableDeclaration]);
if (inMap) {
_variableDeclarationMap[variableElement] = variableDeclaration;
}
@@ -8420,12 +7957,11 @@
}
}
-
@reflectiveTest
class SDKLibrariesReaderTest extends EngineTestCase {
void test_readFrom_dart2js() {
- LibraryMap libraryMap = new SdkLibrariesReader(
- true).readFromFile(FileUtilities2.createFile("/libs.dart"), r'''
+ LibraryMap libraryMap = new SdkLibrariesReader(true).readFromFile(
+ FileUtilities2.createFile("/libs.dart"), r'''
final Map<String, LibraryInfo> LIBRARIES = const <String, LibraryInfo> {
'first' : const LibraryInfo(
'first/first.dart',
@@ -8447,14 +7983,14 @@
expect(first.isVmLibrary, true);
}
void test_readFrom_empty() {
- LibraryMap libraryMap = new SdkLibrariesReader(
- false).readFromFile(FileUtilities2.createFile("/libs.dart"), "");
+ LibraryMap libraryMap = new SdkLibrariesReader(false).readFromFile(
+ FileUtilities2.createFile("/libs.dart"), "");
expect(libraryMap, isNotNull);
expect(libraryMap.size(), 0);
}
void test_readFrom_normal() {
- LibraryMap libraryMap = new SdkLibrariesReader(
- false).readFromFile(FileUtilities2.createFile("/libs.dart"), r'''
+ LibraryMap libraryMap = new SdkLibrariesReader(false).readFromFile(
+ FileUtilities2.createFile("/libs.dart"), r'''
final Map<String, LibraryInfo> LIBRARIES = const <String, LibraryInfo> {
'first' : const LibraryInfo(
'first/first.dart',
@@ -8492,7 +8028,6 @@
}
}
-
@reflectiveTest
class SourceFactoryTest {
void test_creation() {
@@ -8503,16 +8038,14 @@
try {
factory.fromEncoding("<:&%>");
fail("Expected IllegalArgumentException");
- } on IllegalArgumentException catch (exception) {
- }
+ } on IllegalArgumentException catch (exception) {}
}
void test_fromEncoding_noResolver() {
SourceFactory factory = new SourceFactory([]);
try {
factory.fromEncoding("foo:/does/not/exist.dart");
fail("Expected IllegalArgumentException");
- } on IllegalArgumentException catch (exception) {
- }
+ } on IllegalArgumentException catch (exception) {}
}
void test_fromEncoding_valid() {
String encoding = "file:///does/not/exist.dart";
@@ -8530,21 +8063,19 @@
SourceFactory factory =
new SourceFactory([new UriResolver_nonAbsolute_absolute()]);
String absolutePath = "/does/not/matter.dart";
- Source containingSource =
- new FileBasedSource.con1(FileUtilities2.createFile("/does/not/exist.dart"));
+ Source containingSource = new FileBasedSource.con1(
+ FileUtilities2.createFile("/does/not/exist.dart"));
Source result = factory.resolveUri(containingSource, absolutePath);
- expect(
- result.fullName,
+ expect(result.fullName,
FileUtilities2.createFile(absolutePath).getAbsolutePath());
}
void test_resolveUri_nonAbsolute_relative() {
SourceFactory factory =
new SourceFactory([new UriResolver_nonAbsolute_relative()]);
- Source containingSource =
- new FileBasedSource.con1(FileUtilities2.createFile("/does/not/have.dart"));
+ Source containingSource = new FileBasedSource.con1(
+ FileUtilities2.createFile("/does/not/have.dart"));
Source result = factory.resolveUri(containingSource, "exist.dart");
- expect(
- result.fullName,
+ expect(result.fullName,
FileUtilities2.createFile("/does/not/exist.dart").getAbsolutePath());
}
@@ -8564,9 +8095,8 @@
File firstFile = provider.newFile(firstPath, '');
provider.newFile(secondPath, '');
- PackageMapUriResolver resolver = new PackageMapUriResolver(provider, {
- 'package': [libFolder]
- });
+ PackageMapUriResolver resolver =
+ new PackageMapUriResolver(provider, {'package': [libFolder]});
SourceFactory factory = new SourceFactory([resolver]);
Source librarySource =
firstFile.createSource(Uri.parse('package:package/dir/first.dart'));
@@ -8590,7 +8120,6 @@
}
}
-
@reflectiveTest
class StringScannerTest extends AbstractScannerTest {
@override
@@ -8599,30 +8128,25 @@
}
}
-
/**
* Instances of the class `ToSourceVisitorTest`
*/
@reflectiveTest
class ToSourceVisitorTest extends EngineTestCase {
void fail_visitHtmlScriptTagNode_attributes_content() {
- _assertSource(
- "<script type='application/dart'>f() {}</script>",
- HtmlFactory.scriptTagWithContent(
- "f() {}",
- [HtmlFactory.attribute("type", "'application/dart'")]));
+ _assertSource("<script type='application/dart'>f() {}</script>", HtmlFactory
+ .scriptTagWithContent(
+ "f() {}", [HtmlFactory.attribute("type", "'application/dart'")]));
}
void fail_visitHtmlScriptTagNode_noAttributes_content() {
_assertSource(
- "<script>f() {}</script>",
- HtmlFactory.scriptTagWithContent("f() {}"));
+ "<script>f() {}</script>", HtmlFactory.scriptTagWithContent("f() {}"));
}
void test_visitHtmlScriptTagNode_attributes_noContent() {
- _assertSource(
- "<script type='application/dart'/>",
- HtmlFactory.scriptTag([HtmlFactory.attribute("type", "'application/dart'")]));
+ _assertSource("<script type='application/dart'/>", HtmlFactory
+ .scriptTag([HtmlFactory.attribute("type", "'application/dart'")]));
}
void test_visitHtmlScriptTagNode_noAttributes_noContent() {
@@ -8635,8 +8159,7 @@
void test_visitHtmlUnit_nonEmpty() {
_assertSource(
- "<html/>",
- new ht.HtmlUnit(null, [HtmlFactory.tagNode("html")], null));
+ "<html/>", new ht.HtmlUnit(null, [HtmlFactory.tagNode("html")], null));
}
void test_visitXmlAttributeNode() {
@@ -8657,7 +8180,6 @@
}
}
-
@reflectiveTest
class UriKindTest {
void test_fromEncoding() {
@@ -8674,7 +8196,6 @@
}
}
-
class UriResolver_absolute extends UriResolver {
bool invoked = false;
@@ -8687,7 +8208,6 @@
}
}
-
class UriResolver_nonAbsolute_absolute extends UriResolver {
@override
Source resolveAbsolute(Uri uri) {
@@ -8695,7 +8215,6 @@
}
}
-
class UriResolver_nonAbsolute_relative extends UriResolver {
@override
Source resolveAbsolute(Uri uri) {
@@ -8703,7 +8222,6 @@
}
}
-
class UriResolver_restoreUri extends UriResolver {
Source source1;
@@ -8723,9 +8241,8 @@
}
}
-
-class UriResolver_SourceFactoryTest_test_fromEncoding_valid extends UriResolver
- {
+class UriResolver_SourceFactoryTest_test_fromEncoding_valid
+ extends UriResolver {
String encoding;
UriResolver_SourceFactoryTest_test_fromEncoding_valid(this.encoding);
@@ -8739,11 +8256,10 @@
}
}
-
class ValidatingConstantValueComputer extends ConstantValueComputer {
AstNode _nodeBeingEvaluated;
- ValidatingConstantValueComputer(TypeProvider typeProvider,
- DeclaredVariables declaredVariables)
+ ValidatingConstantValueComputer(
+ TypeProvider typeProvider, DeclaredVariables declaredVariables)
: super(typeProvider, declaredVariables);
@override
@@ -8787,8 +8303,7 @@
FormalParameter parameterNode =
constructorNode.parameters.parameters[parameterIndex];
expect(referenceGraph.nodes.contains(parameterNode), isTrue);
- expect(
- referenceGraph.containsPath(_nodeBeingEvaluated, parameterNode),
+ expect(referenceGraph.containsPath(_nodeBeingEvaluated, parameterNode),
isTrue);
}
}
@@ -8796,14 +8311,10 @@
@override
ConstantVisitor createConstantVisitor(ErrorReporter errorReporter) {
return new ConstantValueComputerTest_ValidatingConstantVisitor(
- typeProvider,
- referenceGraph,
- _nodeBeingEvaluated,
- errorReporter);
+ typeProvider, referenceGraph, _nodeBeingEvaluated, errorReporter);
}
}
-
/**
* Instances of `XmlValidator` traverse an [XmlNode] structure and validate the node
* hierarchy.
@@ -8919,8 +8430,7 @@
}
_expectedAttributeKeyValuePairs = expected._attributes._keyValuePairs;
int expectedAttributeCount =
- _expectedAttributeKeyValuePairs.length ~/
- 2;
+ _expectedAttributeKeyValuePairs.length ~/ 2;
int actualAttributeCount = actual.attributes.length;
if (expectedAttributeCount != actualAttributeCount) {
_errors.add(
@@ -8982,8 +8492,8 @@
* @param expected the array to which the tags are added (not `null`)
* @param expectedTags the expected tags to be added (not `null`, contains no `null`s)
*/
- void _expectTags(List<XmlValidator_Tag> expected,
- List<XmlValidator_Tag> expectedTags) {
+ void _expectTags(
+ List<XmlValidator_Tag> expected, List<XmlValidator_Tag> expectedTags) {
for (XmlValidator_Tag tag in expectedTags) {
expected.add(tag);
_expectTags(expected, tag._children);
@@ -9018,24 +8528,21 @@
}
}
-
class XmlValidator_Attributes {
final List<String> _keyValuePairs;
XmlValidator_Attributes([this._keyValuePairs = StringUtilities.EMPTY_ARRAY]);
}
-
class XmlValidator_Tag {
static const List<XmlValidator_Tag> EMPTY_LIST = const <XmlValidator_Tag>[];
final String _tag;
final XmlValidator_Attributes _attributes;
final String _content;
final List<XmlValidator_Tag> _children;
- XmlValidator_Tag(this._tag, this._attributes, this._content, [this._children =
- EMPTY_LIST]);
+ XmlValidator_Tag(this._tag, this._attributes, this._content,
+ [this._children = EMPTY_LIST]);
}
-
class _ExpectedScript {
String _expectedExternalScriptName;
HtmlUnitBuilderTest_ExpectedLibrary _expectedLibrary;
@@ -9076,9 +8583,7 @@
} else {
expect(scriptSource, isNotNull, reason: "script $scriptIndex");
String actualExternalScriptName = scriptSource.shortName;
- expect(
- actualExternalScriptName,
- _expectedExternalScriptName,
+ expect(actualExternalScriptName, _expectedExternalScriptName,
reason: "script $scriptIndex");
}
}
diff --git a/pkg/analyzer/test/generated/ast_test.dart b/pkg/analyzer/test/generated/ast_test.dart
index 7fc025d..347c87e 100644
--- a/pkg/analyzer/test/generated/ast_test.dart
+++ b/pkg/analyzer/test/generated/ast_test.dart
@@ -20,7 +20,6 @@
import 'parser_test.dart' show ParserTestCase;
import 'test_support.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(BreadthFirstVisitorTest);
@@ -69,22 +68,23 @@
static const AssignmentKind NONE = const AssignmentKind('NONE', 9);
static const List<AssignmentKind> values = const [
- BINARY,
- COMPOUND_LEFT,
- COMPOUND_RIGHT,
- POSTFIX_INC,
- PREFIX_DEC,
- PREFIX_INC,
- PREFIX_NOT,
- SIMPLE_LEFT,
- SIMPLE_RIGHT,
- NONE];
+ BINARY,
+ COMPOUND_LEFT,
+ COMPOUND_RIGHT,
+ POSTFIX_INC,
+ PREFIX_DEC,
+ PREFIX_INC,
+ PREFIX_NOT,
+ SIMPLE_LEFT,
+ SIMPLE_RIGHT,
+ NONE
+ ];
const AssignmentKind(String name, int ordinal) : super(name, ordinal);
}
-class BreadthFirstVisitor_BreadthFirstVisitorTest_testIt extends
- BreadthFirstVisitor<Object> {
+class BreadthFirstVisitor_BreadthFirstVisitorTest_testIt
+ extends BreadthFirstVisitor<Object> {
List<AstNode> nodes;
BreadthFirstVisitor_BreadthFirstVisitorTest_testIt(this.nodes) : super();
@@ -125,25 +125,16 @@
visitor.visitAllNodes(unit);
expect(nodes, hasLength(59));
EngineTestCase.assertInstanceOf(
- (obj) => obj is CompilationUnit,
- CompilationUnit,
- nodes[0]);
+ (obj) => obj is CompilationUnit, CompilationUnit, nodes[0]);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ClassDeclaration,
- ClassDeclaration,
- nodes[2]);
+ (obj) => obj is ClassDeclaration, ClassDeclaration, nodes[2]);
EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionDeclaration,
- FunctionDeclaration,
- nodes[3]);
+ (obj) => obj is FunctionDeclaration, FunctionDeclaration, nodes[3]);
EngineTestCase.assertInstanceOf(
(obj) => obj is FunctionDeclarationStatement,
- FunctionDeclarationStatement,
- nodes[27]);
+ FunctionDeclarationStatement, nodes[27]);
EngineTestCase.assertInstanceOf(
- (obj) => obj is IntegerLiteral,
- IntegerLiteral,
- nodes[58]);
+ (obj) => obj is IntegerLiteral, IntegerLiteral, nodes[58]);
//3
}
}
@@ -153,30 +144,17 @@
void test_getConstructor() {
List<ConstructorInitializer> initializers =
new List<ConstructorInitializer>();
- ConstructorDeclaration defaultConstructor =
- AstFactory.constructorDeclaration(
- AstFactory.identifier3("Test"),
- null,
- AstFactory.formalParameterList(),
- initializers);
+ ConstructorDeclaration defaultConstructor = AstFactory
+ .constructorDeclaration(AstFactory.identifier3("Test"), null,
+ AstFactory.formalParameterList(), initializers);
ConstructorDeclaration aConstructor = AstFactory.constructorDeclaration(
- AstFactory.identifier3("Test"),
- "a",
- AstFactory.formalParameterList(),
+ AstFactory.identifier3("Test"), "a", AstFactory.formalParameterList(),
initializers);
ConstructorDeclaration bConstructor = AstFactory.constructorDeclaration(
- AstFactory.identifier3("Test"),
- "b",
- AstFactory.formalParameterList(),
+ AstFactory.identifier3("Test"), "b", AstFactory.formalParameterList(),
initializers);
- ClassDeclaration clazz = AstFactory.classDeclaration(
- null,
- "Test",
- null,
- null,
- null,
- null,
- [defaultConstructor, aConstructor, bConstructor]);
+ ClassDeclaration clazz = AstFactory.classDeclaration(null, "Test", null,
+ null, null, null, [defaultConstructor, aConstructor, bConstructor]);
expect(clazz.getConstructor(null), same(defaultConstructor));
expect(clazz.getConstructor("a"), same(aConstructor));
expect(clazz.getConstructor("b"), same(bConstructor));
@@ -187,16 +165,11 @@
VariableDeclaration aVar = AstFactory.variableDeclaration("a");
VariableDeclaration bVar = AstFactory.variableDeclaration("b");
VariableDeclaration cVar = AstFactory.variableDeclaration("c");
- ClassDeclaration clazz = AstFactory.classDeclaration(
- null,
- "Test",
- null,
- null,
- null,
- null,
- [
- AstFactory.fieldDeclaration2(false, null, [aVar]),
- AstFactory.fieldDeclaration2(false, null, [bVar, cVar])]);
+ ClassDeclaration clazz = AstFactory.classDeclaration(null, "Test", null,
+ null, null, null, [
+ AstFactory.fieldDeclaration2(false, null, [aVar]),
+ AstFactory.fieldDeclaration2(false, null, [bVar, cVar])
+ ]);
expect(clazz.getField("a"), same(aVar));
expect(clazz.getField("b"), same(bVar));
expect(clazz.getField("c"), same(cVar));
@@ -204,46 +177,22 @@
}
void test_getMethod() {
- MethodDeclaration aMethod = AstFactory.methodDeclaration(
- null,
- null,
- null,
- null,
- AstFactory.identifier3("a"),
- AstFactory.formalParameterList());
- MethodDeclaration bMethod = AstFactory.methodDeclaration(
- null,
- null,
- null,
- null,
- AstFactory.identifier3("b"),
- AstFactory.formalParameterList());
+ MethodDeclaration aMethod = AstFactory.methodDeclaration(null, null, null,
+ null, AstFactory.identifier3("a"), AstFactory.formalParameterList());
+ MethodDeclaration bMethod = AstFactory.methodDeclaration(null, null, null,
+ null, AstFactory.identifier3("b"), AstFactory.formalParameterList());
ClassDeclaration clazz = AstFactory.classDeclaration(
- null,
- "Test",
- null,
- null,
- null,
- null,
- [aMethod, bMethod]);
+ null, "Test", null, null, null, null, [aMethod, bMethod]);
expect(clazz.getMethod("a"), same(aMethod));
expect(clazz.getMethod("b"), same(bMethod));
expect(clazz.getMethod("noSuchMethod"), same(null));
}
void test_isAbstract() {
- expect(
- AstFactory.classDeclaration(null, "A", null, null, null, null).isAbstract,
- isFalse);
- expect(
- AstFactory.classDeclaration(
- Keyword.ABSTRACT,
- "B",
- null,
- null,
- null,
- null).isAbstract,
- isTrue);
+ expect(AstFactory.classDeclaration(
+ null, "A", null, null, null, null).isAbstract, isFalse);
+ expect(AstFactory.classDeclaration(
+ Keyword.ABSTRACT, "B", null, null, null, null).isAbstract, isTrue);
}
}
@@ -253,15 +202,8 @@
expect(
AstFactory.classTypeAlias("A", null, null, null, null, null).isAbstract,
isFalse);
- expect(
- AstFactory.classTypeAlias(
- "B",
- null,
- Keyword.ABSTRACT,
- null,
- null,
- null).isAbstract,
- isTrue);
+ expect(AstFactory.classTypeAlias(
+ "B", null, Keyword.ABSTRACT, null, null, null).isAbstract, isTrue);
}
}
@@ -589,13 +531,8 @@
Token externalKeyword = TokenFactory.tokenFromKeyword(Keyword.EXTERNAL);
externalKeyword.offset = 14;
ConstructorDeclaration declaration = AstFactory.constructorDeclaration2(
- Keyword.CONST,
- Keyword.FACTORY,
- AstFactory.identifier3('int'),
- null,
- null,
- null,
- null);
+ Keyword.CONST, Keyword.FACTORY, AstFactory.identifier3('int'), null,
+ null, null, null);
declaration.externalKeyword = externalKeyword;
declaration.constKeyword.offset = 8;
Token factoryKeyword = declaration.factoryKeyword;
@@ -607,13 +544,8 @@
Token token = TokenFactory.tokenFromKeyword(Keyword.EXTERNAL);
token.offset = 0;
ConstructorDeclaration declaration = AstFactory.constructorDeclaration2(
- Keyword.CONST,
- Keyword.FACTORY,
- AstFactory.identifier3('int'),
- null,
- null,
- null,
- null);
+ Keyword.CONST, Keyword.FACTORY, AstFactory.identifier3('int'), null,
+ null, null, null);
declaration.externalKeyword = token;
declaration.constKeyword.offset = 9;
declaration.factoryKeyword.offset = 15;
@@ -622,43 +554,25 @@
void test_firstTokenAfterCommentAndMetadata_constOnly() {
ConstructorDeclaration declaration = AstFactory.constructorDeclaration2(
- Keyword.CONST,
- null,
- AstFactory.identifier3('int'),
- null,
- null,
- null,
+ Keyword.CONST, null, AstFactory.identifier3('int'), null, null, null,
null);
- expect(
- declaration.firstTokenAfterCommentAndMetadata,
+ expect(declaration.firstTokenAfterCommentAndMetadata,
declaration.constKeyword);
}
void test_firstTokenAfterCommentAndMetadata_externalOnly() {
Token externalKeyword = TokenFactory.tokenFromKeyword(Keyword.EXTERNAL);
ConstructorDeclaration declaration = AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3('int'),
- null,
- null,
- null,
- null);
+ null, null, AstFactory.identifier3('int'), null, null, null, null);
declaration.externalKeyword = externalKeyword;
expect(declaration.firstTokenAfterCommentAndMetadata, externalKeyword);
}
void test_firstTokenAfterCommentAndMetadata_factoryOnly() {
ConstructorDeclaration declaration = AstFactory.constructorDeclaration2(
- null,
- Keyword.FACTORY,
- AstFactory.identifier3('int'),
- null,
- null,
- null,
+ null, Keyword.FACTORY, AstFactory.identifier3('int'), null, null, null,
null);
- expect(
- declaration.firstTokenAfterCommentAndMetadata,
+ expect(declaration.firstTokenAfterCommentAndMetadata,
declaration.factoryKeyword);
}
}
@@ -671,7 +585,8 @@
}
void test_endToken_parameters() {
- FieldFormalParameter parameter = AstFactory.fieldFormalParameter(null, null, 'field', AstFactory.formalParameterList([]));
+ FieldFormalParameter parameter = AstFactory.fieldFormalParameter(
+ null, null, 'field', AstFactory.formalParameterList([]));
expect(parameter.endToken, parameter.parameters.endToken);
}
}
@@ -680,104 +595,79 @@
class IndexExpressionTest extends EngineTestCase {
void test_inGetterContext_assignment_compound_left() {
IndexExpression expression = AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"));
+ AstFactory.identifier3("a"), AstFactory.identifier3("b"));
// a[b] += c
AstFactory.assignmentExpression(
- expression,
- TokenType.PLUS_EQ,
- AstFactory.identifier3("c"));
+ expression, TokenType.PLUS_EQ, AstFactory.identifier3("c"));
expect(expression.inGetterContext(), isTrue);
}
void test_inGetterContext_assignment_simple_left() {
IndexExpression expression = AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"));
+ AstFactory.identifier3("a"), AstFactory.identifier3("b"));
// a[b] = c
AstFactory.assignmentExpression(
- expression,
- TokenType.EQ,
- AstFactory.identifier3("c"));
+ expression, TokenType.EQ, AstFactory.identifier3("c"));
expect(expression.inGetterContext(), isFalse);
}
void test_inGetterContext_nonAssignment() {
IndexExpression expression = AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"));
+ AstFactory.identifier3("a"), AstFactory.identifier3("b"));
// a[b] + c
AstFactory.binaryExpression(
- expression,
- TokenType.PLUS,
- AstFactory.identifier3("c"));
+ expression, TokenType.PLUS, AstFactory.identifier3("c"));
expect(expression.inGetterContext(), isTrue);
}
void test_inSetterContext_assignment_compound_left() {
IndexExpression expression = AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"));
+ AstFactory.identifier3("a"), AstFactory.identifier3("b"));
// a[b] += c
AstFactory.assignmentExpression(
- expression,
- TokenType.PLUS_EQ,
- AstFactory.identifier3("c"));
+ expression, TokenType.PLUS_EQ, AstFactory.identifier3("c"));
expect(expression.inSetterContext(), isTrue);
}
void test_inSetterContext_assignment_compound_right() {
IndexExpression expression = AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"));
+ AstFactory.identifier3("a"), AstFactory.identifier3("b"));
// c += a[b]
AstFactory.assignmentExpression(
- AstFactory.identifier3("c"),
- TokenType.PLUS_EQ,
- expression);
+ AstFactory.identifier3("c"), TokenType.PLUS_EQ, expression);
expect(expression.inSetterContext(), isFalse);
}
void test_inSetterContext_assignment_simple_left() {
IndexExpression expression = AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"));
+ AstFactory.identifier3("a"), AstFactory.identifier3("b"));
// a[b] = c
AstFactory.assignmentExpression(
- expression,
- TokenType.EQ,
- AstFactory.identifier3("c"));
+ expression, TokenType.EQ, AstFactory.identifier3("c"));
expect(expression.inSetterContext(), isTrue);
}
void test_inSetterContext_assignment_simple_right() {
IndexExpression expression = AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"));
+ AstFactory.identifier3("a"), AstFactory.identifier3("b"));
// c = a[b]
AstFactory.assignmentExpression(
- AstFactory.identifier3("c"),
- TokenType.EQ,
- expression);
+ AstFactory.identifier3("c"), TokenType.EQ, expression);
expect(expression.inSetterContext(), isFalse);
}
void test_inSetterContext_nonAssignment() {
IndexExpression expression = AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"));
+ AstFactory.identifier3("a"), AstFactory.identifier3("b"));
AstFactory.binaryExpression(
- expression,
- TokenType.PLUS,
- AstFactory.identifier3("c"));
+ expression, TokenType.PLUS, AstFactory.identifier3("c"));
// a[b] + cc
expect(expression.inSetterContext(), isFalse);
}
void test_inSetterContext_postfix() {
IndexExpression expression = AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"));
+ AstFactory.identifier3("a"), AstFactory.identifier3("b"));
AstFactory.postfixExpression(expression, TokenType.PLUS_PLUS);
// a[b]++
expect(expression.inSetterContext(), isTrue);
@@ -785,8 +675,7 @@
void test_inSetterContext_prefix_bang() {
IndexExpression expression = AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"));
+ AstFactory.identifier3("a"), AstFactory.identifier3("b"));
// !a[b]
AstFactory.prefixExpression(TokenType.BANG, expression);
expect(expression.inSetterContext(), isFalse);
@@ -794,8 +683,7 @@
void test_inSetterContext_prefix_minusMinus() {
IndexExpression expression = AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"));
+ AstFactory.identifier3("a"), AstFactory.identifier3("b"));
// --a[b]
AstFactory.prefixExpression(TokenType.MINUS_MINUS, expression);
expect(expression.inSetterContext(), isTrue);
@@ -803,8 +691,7 @@
void test_inSetterContext_prefix_plusPlus() {
IndexExpression expression = AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"));
+ AstFactory.identifier3("a"), AstFactory.identifier3("b"));
// ++a[b]
AstFactory.prefixExpression(TokenType.PLUS_PLUS, expression);
expect(expression.inSetterContext(), isTrue);
@@ -1045,11 +932,7 @@
CompilationUnit unit =
ParserTestCase.parseCompilationUnit("library myLib;");
_assertLocate(
- unit,
- 4,
- 10,
- (node) => node is LibraryDirective,
- LibraryDirective);
+ unit, 4, 10, (node) => node is LibraryDirective, LibraryDirective);
}
void test_searchWithin_null() {
@@ -1061,11 +944,7 @@
CompilationUnit unit =
ParserTestCase.parseCompilationUnit("library myLib;");
_assertLocate(
- unit,
- 10,
- 10,
- (node) => node is SimpleIdentifier,
- SimpleIdentifier);
+ unit, 10, 10, (node) => node is SimpleIdentifier, SimpleIdentifier);
}
void test_searchWithin_offsetAfterNode() {
@@ -1093,9 +972,7 @@
expect(node, isNotNull);
expect(locator.foundNode, same(node));
expect(node.offset <= start, isTrue, reason: "Node starts after range");
- expect(
- node.offset + node.length > end,
- isTrue,
+ expect(node.offset + node.length > end, isTrue,
reason: "Node ends before range");
EngineTestCase.assertInstanceOf(predicate, expectedClass, node);
}
@@ -1129,10 +1006,7 @@
void test_inDeclarationContext_constructorDeclaration() {
SimpleIdentifier identifier = AstFactory.constructorDeclaration(
- AstFactory.identifier3("C"),
- "c",
- null,
- null).name;
+ AstFactory.identifier3("C"), "c", null, null).name;
expect(identifier.inDeclarationContext(), isTrue);
}
@@ -1190,13 +1064,7 @@
void test_inDeclarationContext_methodDeclaration() {
SimpleIdentifier identifier = AstFactory.identifier3("m");
AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
- identifier,
- null,
- null);
+ null, null, null, null, identifier, null, null);
expect(identifier.inDeclarationContext(), isTrue);
}
@@ -1259,8 +1127,7 @@
void test_inReferenceContext() {
SimpleIdentifier identifier = AstFactory.identifier3("id");
AstFactory.namedExpression(
- AstFactory.label(identifier),
- AstFactory.identifier3("_"));
+ AstFactory.label(identifier), AstFactory.identifier3("_"));
expect(identifier.inGetterContext(), isFalse);
expect(identifier.inSetterContext(), isFalse);
}
@@ -1305,9 +1172,9 @@
void test_isQualified_inMethodInvocation_withTarget() {
MethodInvocation invocation = AstFactory.methodInvocation(
- AstFactory.identifier3("target"),
- "test",
- [AstFactory.identifier3("arg0")]);
+ AstFactory.identifier3("target"), "test", [
+ AstFactory.identifier3("arg0")
+ ]);
SimpleIdentifier identifier = invocation.methodName;
expect(identifier.isQualified, isTrue);
}
@@ -1342,8 +1209,8 @@
expect(identifier.isQualified, isFalse);
}
- SimpleIdentifier _createIdentifier(WrapperKind wrapper,
- AssignmentKind assignment) {
+ SimpleIdentifier _createIdentifier(
+ WrapperKind wrapper, AssignmentKind assignment) {
SimpleIdentifier identifier = AstFactory.identifier3("a");
Expression expression = identifier;
while (true) {
@@ -1358,26 +1225,19 @@
} else if (wrapper == WrapperKind.PROPERTY_RIGHT) {
expression =
AstFactory.propertyAccess(AstFactory.identifier3("_"), identifier);
- } else if (wrapper == WrapperKind.NONE) {
- }
+ } else if (wrapper == WrapperKind.NONE) {}
break;
}
while (true) {
if (assignment == AssignmentKind.BINARY) {
AstFactory.binaryExpression(
- expression,
- TokenType.PLUS,
- AstFactory.identifier3("_"));
+ expression, TokenType.PLUS, AstFactory.identifier3("_"));
} else if (assignment == AssignmentKind.COMPOUND_LEFT) {
AstFactory.assignmentExpression(
- expression,
- TokenType.PLUS_EQ,
- AstFactory.identifier3("_"));
+ expression, TokenType.PLUS_EQ, AstFactory.identifier3("_"));
} else if (assignment == AssignmentKind.COMPOUND_RIGHT) {
AstFactory.assignmentExpression(
- AstFactory.identifier3("_"),
- TokenType.PLUS_EQ,
- expression);
+ AstFactory.identifier3("_"), TokenType.PLUS_EQ, expression);
} else if (assignment == AssignmentKind.POSTFIX_INC) {
AstFactory.postfixExpression(expression, TokenType.PLUS_PLUS);
} else if (assignment == AssignmentKind.PREFIX_DEC) {
@@ -1388,16 +1248,11 @@
AstFactory.prefixExpression(TokenType.BANG, expression);
} else if (assignment == AssignmentKind.SIMPLE_LEFT) {
AstFactory.assignmentExpression(
- expression,
- TokenType.EQ,
- AstFactory.identifier3("_"));
+ expression, TokenType.EQ, AstFactory.identifier3("_"));
} else if (assignment == AssignmentKind.SIMPLE_RIGHT) {
AstFactory.assignmentExpression(
- AstFactory.identifier3("_"),
- TokenType.EQ,
- expression);
- } else if (assignment == AssignmentKind.NONE) {
- }
+ AstFactory.identifier3("_"), TokenType.EQ, expression);
+ } else if (assignment == AssignmentKind.NONE) {}
break;
}
return identifier;
@@ -1423,119 +1278,61 @@
@reflectiveTest
class SimpleStringLiteralTest extends ParserTestCase {
void test_contentsEnd() {
- expect(
- new SimpleStringLiteral(TokenFactory.tokenFromString("'X'"), "X").contentsEnd,
- 2);
- expect(
- new SimpleStringLiteral(TokenFactory.tokenFromString("\"X\""), "X").contentsEnd,
- 2);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("\"\"\"X\"\"\""),
- "X").contentsEnd,
- 4);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("'''X'''"),
- "X").contentsEnd,
- 4);
- expect(
- new SimpleStringLiteral(TokenFactory.tokenFromString("r'X'"), "X").contentsEnd,
- 3);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("r\"X\""),
- "X").contentsEnd,
- 3);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("r\"\"\"X\"\"\""),
- "X").contentsEnd,
- 5);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("r'''X'''"),
- "X").contentsEnd,
- 5);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("'X'"), "X").contentsEnd, 2);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("\"X\""), "X").contentsEnd, 2);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("\"\"\"X\"\"\""), "X").contentsEnd, 4);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("'''X'''"), "X").contentsEnd, 4);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r'X'"), "X").contentsEnd, 3);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r\"X\""), "X").contentsEnd, 3);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r\"\"\"X\"\"\""), "X").contentsEnd, 5);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r'''X'''"), "X").contentsEnd, 5);
}
void test_contentsOffset() {
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("'X'"),
- "X").contentsOffset,
- 1);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("\"X\""),
- "X").contentsOffset,
- 1);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("\"\"\"X\"\"\""),
- "X").contentsOffset,
- 3);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("'''X'''"),
- "X").contentsOffset,
- 3);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("r'X'"),
- "X").contentsOffset,
- 2);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("r\"X\""),
- "X").contentsOffset,
- 2);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("r\"\"\"X\"\"\""),
- "X").contentsOffset,
- 4);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("r'''X'''"),
- "X").contentsOffset,
- 4);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("'X'"), "X").contentsOffset, 1);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("\"X\""), "X").contentsOffset, 1);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("\"\"\"X\"\"\""), "X").contentsOffset, 3);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("'''X'''"), "X").contentsOffset, 3);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r'X'"), "X").contentsOffset, 2);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r\"X\""), "X").contentsOffset, 2);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r\"\"\"X\"\"\""), "X").contentsOffset, 4);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r'''X'''"), "X").contentsOffset, 4);
}
void test_isMultiline() {
- expect(
- new SimpleStringLiteral(TokenFactory.tokenFromString("'X'"), "X").isMultiline,
- isFalse);
- expect(
- new SimpleStringLiteral(TokenFactory.tokenFromString("r'X'"), "X").isMultiline,
- isFalse);
- expect(
- new SimpleStringLiteral(TokenFactory.tokenFromString("\"X\""), "X").isMultiline,
- isFalse);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("r\"X\""),
- "X").isMultiline,
- isFalse);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("'''X'''"),
- "X").isMultiline,
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("'X'"), "X").isMultiline, isFalse);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r'X'"), "X").isMultiline, isFalse);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("\"X\""), "X").isMultiline, isFalse);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r\"X\""), "X").isMultiline, isFalse);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("'''X'''"), "X").isMultiline, isTrue);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r'''X'''"), "X").isMultiline, isTrue);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("\"\"\"X\"\"\""), "X").isMultiline,
isTrue);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("r'''X'''"),
- "X").isMultiline,
- isTrue);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("\"\"\"X\"\"\""),
- "X").isMultiline,
- isTrue);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("r\"\"\"X\"\"\""),
- "X").isMultiline,
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r\"\"\"X\"\"\""), "X").isMultiline,
isTrue);
}
@@ -1543,31 +1340,20 @@
expect(
new SimpleStringLiteral(TokenFactory.tokenFromString("'X'"), "X").isRaw,
isFalse);
- expect(
- new SimpleStringLiteral(TokenFactory.tokenFromString("\"X\""), "X").isRaw,
- isFalse);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("\"\"\"X\"\"\""),
- "X").isRaw,
- isFalse);
- expect(
- new SimpleStringLiteral(TokenFactory.tokenFromString("'''X'''"), "X").isRaw,
- isFalse);
- expect(
- new SimpleStringLiteral(TokenFactory.tokenFromString("r'X'"), "X").isRaw,
- isTrue);
- expect(
- new SimpleStringLiteral(TokenFactory.tokenFromString("r\"X\""), "X").isRaw,
- isTrue);
- expect(
- new SimpleStringLiteral(
- TokenFactory.tokenFromString("r\"\"\"X\"\"\""),
- "X").isRaw,
- isTrue);
- expect(
- new SimpleStringLiteral(TokenFactory.tokenFromString("r'''X'''"), "X").isRaw,
- isTrue);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("\"X\""), "X").isRaw, isFalse);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("\"\"\"X\"\"\""), "X").isRaw, isFalse);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("'''X'''"), "X").isRaw, isFalse);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r'X'"), "X").isRaw, isTrue);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r\"X\""), "X").isRaw, isTrue);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r\"\"\"X\"\"\""), "X").isRaw, isTrue);
+ expect(new SimpleStringLiteral(
+ TokenFactory.tokenFromString("r'''X'''"), "X").isRaw, isTrue);
}
void test_isSingleQuoted() {
@@ -1767,9 +1553,8 @@
@reflectiveTest
class ToSourceVisitorTest extends EngineTestCase {
void test_visitAdjacentStrings() {
- _assertSource(
- "'a' 'b'",
- AstFactory.adjacentStrings([AstFactory.string2("a"), AstFactory.string2("b")]));
+ _assertSource("'a' 'b'", AstFactory
+ .adjacentStrings([AstFactory.string2("a"), AstFactory.string2("b")]));
}
void test_visitAnnotation_constant() {
@@ -1777,57 +1562,40 @@
}
void test_visitAnnotation_constructor() {
- _assertSource(
- "@A.c()",
- AstFactory.annotation2(
- AstFactory.identifier3("A"),
- AstFactory.identifier3("c"),
- AstFactory.argumentList()));
+ _assertSource("@A.c()", AstFactory.annotation2(AstFactory.identifier3("A"),
+ AstFactory.identifier3("c"), AstFactory.argumentList()));
}
void test_visitArgumentList() {
- _assertSource(
- "(a, b)",
- AstFactory.argumentList(
- [AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
+ _assertSource("(a, b)", AstFactory.argumentList(
+ [AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
}
void test_visitAsExpression() {
- _assertSource(
- "e as T",
- AstFactory.asExpression(
- AstFactory.identifier3("e"),
- AstFactory.typeName4("T")));
+ _assertSource("e as T", AstFactory.asExpression(
+ AstFactory.identifier3("e"), AstFactory.typeName4("T")));
}
void test_visitAssertStatement() {
_assertSource(
- "assert (a);",
- AstFactory.assertStatement(AstFactory.identifier3("a")));
+ "assert (a);", AstFactory.assertStatement(AstFactory.identifier3("a")));
}
void test_visitAssignmentExpression() {
- _assertSource(
- "a = b",
- AstFactory.assignmentExpression(
- AstFactory.identifier3("a"),
- TokenType.EQ,
- AstFactory.identifier3("b")));
+ _assertSource("a = b", AstFactory.assignmentExpression(
+ AstFactory.identifier3("a"), TokenType.EQ,
+ AstFactory.identifier3("b")));
}
void test_visitAwaitExpression() {
_assertSource(
- "await e;",
- AstFactory.awaitExpression(AstFactory.identifier3("e")));
+ "await e;", AstFactory.awaitExpression(AstFactory.identifier3("e")));
}
void test_visitBinaryExpression() {
- _assertSource(
- "a + b",
- AstFactory.binaryExpression(
- AstFactory.identifier3("a"),
- TokenType.PLUS,
- AstFactory.identifier3("b")));
+ _assertSource("a + b", AstFactory.binaryExpression(
+ AstFactory.identifier3("a"), TokenType.PLUS,
+ AstFactory.identifier3("b")));
}
void test_visitBlock_empty() {
@@ -1835,9 +1603,8 @@
}
void test_visitBlock_nonEmpty() {
- _assertSource(
- "{break; break;}",
- AstFactory.block([AstFactory.breakStatement(), AstFactory.breakStatement()]));
+ _assertSource("{break; break;}", AstFactory
+ .block([AstFactory.breakStatement(), AstFactory.breakStatement()]));
}
void test_visitBlockFunctionBody_async() {
@@ -1877,33 +1644,27 @@
}
void test_visitCascadeExpression_field() {
- _assertSource(
- "a..b..c",
- AstFactory.cascadeExpression(
- AstFactory.identifier3("a"),
- [
- AstFactory.cascadedPropertyAccess("b"),
- AstFactory.cascadedPropertyAccess("c")]));
+ _assertSource("a..b..c", AstFactory.cascadeExpression(
+ AstFactory.identifier3("a"), [
+ AstFactory.cascadedPropertyAccess("b"),
+ AstFactory.cascadedPropertyAccess("c")
+ ]));
}
void test_visitCascadeExpression_index() {
- _assertSource(
- "a..[0]..[1]",
- AstFactory.cascadeExpression(
- AstFactory.identifier3("a"),
- [
- AstFactory.cascadedIndexExpression(AstFactory.integer(0)),
- AstFactory.cascadedIndexExpression(AstFactory.integer(1))]));
+ _assertSource("a..[0]..[1]", AstFactory.cascadeExpression(
+ AstFactory.identifier3("a"), [
+ AstFactory.cascadedIndexExpression(AstFactory.integer(0)),
+ AstFactory.cascadedIndexExpression(AstFactory.integer(1))
+ ]));
}
void test_visitCascadeExpression_method() {
- _assertSource(
- "a..b()..c()",
- AstFactory.cascadeExpression(
- AstFactory.identifier3("a"),
- [
- AstFactory.cascadedMethodInvocation("b"),
- AstFactory.cascadedMethodInvocation("c")]));
+ _assertSource("a..b()..c()", AstFactory.cascadeExpression(
+ AstFactory.identifier3("a"), [
+ AstFactory.cascadedMethodInvocation("b"),
+ AstFactory.cascadedMethodInvocation("c")
+ ]));
}
void test_visitCatchClause_catch_noStack() {
@@ -1916,321 +1677,190 @@
void test_visitCatchClause_on() {
_assertSource(
- "on E {}",
- AstFactory.catchClause3(AstFactory.typeName4("E")));
+ "on E {}", AstFactory.catchClause3(AstFactory.typeName4("E")));
}
void test_visitCatchClause_on_catch() {
- _assertSource(
- "on E catch (e) {}",
+ _assertSource("on E catch (e) {}",
AstFactory.catchClause4(AstFactory.typeName4("E"), "e"));
}
void test_visitClassDeclaration_abstract() {
- _assertSource(
- "abstract class C {}",
- AstFactory.classDeclaration(Keyword.ABSTRACT, "C", null, null, null, null));
+ _assertSource("abstract class C {}", AstFactory.classDeclaration(
+ Keyword.ABSTRACT, "C", null, null, null, null));
}
void test_visitClassDeclaration_empty() {
- _assertSource(
- "class C {}",
+ _assertSource("class C {}",
AstFactory.classDeclaration(null, "C", null, null, null, null));
}
void test_visitClassDeclaration_extends() {
- _assertSource(
- "class C extends A {}",
- AstFactory.classDeclaration(
- null,
- "C",
- null,
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- null,
- null));
+ _assertSource("class C extends A {}", AstFactory.classDeclaration(null, "C",
+ null, AstFactory.extendsClause(AstFactory.typeName4("A")), null, null));
}
void test_visitClassDeclaration_extends_implements() {
- _assertSource(
- "class C extends A implements B {}",
- AstFactory.classDeclaration(
- null,
- "C",
- null,
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- null,
+ _assertSource("class C extends A implements B {}", AstFactory
+ .classDeclaration(null, "C", null,
+ AstFactory.extendsClause(AstFactory.typeName4("A")), null,
AstFactory.implementsClause([AstFactory.typeName4("B")])));
}
void test_visitClassDeclaration_extends_with() {
- _assertSource(
- "class C extends A with M {}",
- AstFactory.classDeclaration(
- null,
- "C",
- null,
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- AstFactory.withClause([AstFactory.typeName4("M")]),
- null));
+ _assertSource("class C extends A with M {}", AstFactory.classDeclaration(
+ null, "C", null, AstFactory.extendsClause(AstFactory.typeName4("A")),
+ AstFactory.withClause([AstFactory.typeName4("M")]), null));
}
void test_visitClassDeclaration_extends_with_implements() {
- _assertSource(
- "class C extends A with M implements B {}",
- AstFactory.classDeclaration(
- null,
- "C",
- null,
+ _assertSource("class C extends A with M implements B {}", AstFactory
+ .classDeclaration(null, "C", null,
AstFactory.extendsClause(AstFactory.typeName4("A")),
AstFactory.withClause([AstFactory.typeName4("M")]),
AstFactory.implementsClause([AstFactory.typeName4("B")])));
}
void test_visitClassDeclaration_implements() {
- _assertSource(
- "class C implements B {}",
- AstFactory.classDeclaration(
- null,
- "C",
- null,
- null,
- null,
- AstFactory.implementsClause([AstFactory.typeName4("B")])));
+ _assertSource("class C implements B {}", AstFactory.classDeclaration(null,
+ "C", null, null, null,
+ AstFactory.implementsClause([AstFactory.typeName4("B")])));
}
void test_visitClassDeclaration_multipleMember() {
- _assertSource(
- "class C {var a; var b;}",
- AstFactory.classDeclaration(
- null,
- "C",
- null,
- null,
- null,
- null,
- [
- AstFactory.fieldDeclaration2(
- false,
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")]),
- AstFactory.fieldDeclaration2(
- false,
- Keyword.VAR,
- [AstFactory.variableDeclaration("b")])]));
+ _assertSource("class C {var a; var b;}", AstFactory.classDeclaration(null,
+ "C", null, null, null, null, [
+ AstFactory.fieldDeclaration2(
+ false, Keyword.VAR, [AstFactory.variableDeclaration("a")]),
+ AstFactory.fieldDeclaration2(
+ false, Keyword.VAR, [AstFactory.variableDeclaration("b")])
+ ]));
}
void test_visitClassDeclaration_parameters() {
- _assertSource(
- "class C<E> {}",
- AstFactory.classDeclaration(
- null,
- "C",
- AstFactory.typeParameterList(["E"]),
- null,
- null,
- null));
+ _assertSource("class C<E> {}", AstFactory.classDeclaration(
+ null, "C", AstFactory.typeParameterList(["E"]), null, null, null));
}
void test_visitClassDeclaration_parameters_extends() {
- _assertSource(
- "class C<E> extends A {}",
- AstFactory.classDeclaration(
- null,
- "C",
- AstFactory.typeParameterList(["E"]),
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- null,
- null));
+ _assertSource("class C<E> extends A {}", AstFactory.classDeclaration(null,
+ "C", AstFactory.typeParameterList(["E"]),
+ AstFactory.extendsClause(AstFactory.typeName4("A")), null, null));
}
void test_visitClassDeclaration_parameters_extends_implements() {
- _assertSource(
- "class C<E> extends A implements B {}",
- AstFactory.classDeclaration(
- null,
- "C",
- AstFactory.typeParameterList(["E"]),
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- null,
+ _assertSource("class C<E> extends A implements B {}", AstFactory
+ .classDeclaration(null, "C", AstFactory.typeParameterList(["E"]),
+ AstFactory.extendsClause(AstFactory.typeName4("A")), null,
AstFactory.implementsClause([AstFactory.typeName4("B")])));
}
void test_visitClassDeclaration_parameters_extends_with() {
- _assertSource(
- "class C<E> extends A with M {}",
- AstFactory.classDeclaration(
- null,
- "C",
- AstFactory.typeParameterList(["E"]),
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- AstFactory.withClause([AstFactory.typeName4("M")]),
- null));
+ _assertSource("class C<E> extends A with M {}", AstFactory.classDeclaration(
+ null, "C", AstFactory.typeParameterList(["E"]),
+ AstFactory.extendsClause(AstFactory.typeName4("A")),
+ AstFactory.withClause([AstFactory.typeName4("M")]), null));
}
void test_visitClassDeclaration_parameters_extends_with_implements() {
- _assertSource(
- "class C<E> extends A with M implements B {}",
- AstFactory.classDeclaration(
- null,
- "C",
- AstFactory.typeParameterList(["E"]),
+ _assertSource("class C<E> extends A with M implements B {}", AstFactory
+ .classDeclaration(null, "C", AstFactory.typeParameterList(["E"]),
AstFactory.extendsClause(AstFactory.typeName4("A")),
AstFactory.withClause([AstFactory.typeName4("M")]),
AstFactory.implementsClause([AstFactory.typeName4("B")])));
}
void test_visitClassDeclaration_parameters_implements() {
- _assertSource(
- "class C<E> implements B {}",
- AstFactory.classDeclaration(
- null,
- "C",
- AstFactory.typeParameterList(["E"]),
- null,
- null,
- AstFactory.implementsClause([AstFactory.typeName4("B")])));
+ _assertSource("class C<E> implements B {}", AstFactory.classDeclaration(
+ null, "C", AstFactory.typeParameterList(["E"]), null, null,
+ AstFactory.implementsClause([AstFactory.typeName4("B")])));
}
void test_visitClassDeclaration_singleMember() {
- _assertSource(
- "class C {var a;}",
- AstFactory.classDeclaration(
- null,
- "C",
- null,
- null,
- null,
- null,
- [
- AstFactory.fieldDeclaration2(
- false,
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")])]));
+ _assertSource("class C {var a;}", AstFactory.classDeclaration(null, "C",
+ null, null, null, null, [
+ AstFactory.fieldDeclaration2(
+ false, Keyword.VAR, [AstFactory.variableDeclaration("a")])
+ ]));
}
void test_visitClassDeclaration_withMetadata() {
ClassDeclaration declaration =
AstFactory.classDeclaration(null, "C", null, null, null, null);
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated class C {}", declaration);
}
void test_visitClassTypeAlias_abstract() {
- _assertSource(
- "abstract class C = S with M1;",
- AstFactory.classTypeAlias(
- "C",
- null,
- Keyword.ABSTRACT,
- AstFactory.typeName4("S"),
- AstFactory.withClause([AstFactory.typeName4("M1")]),
- null));
+ _assertSource("abstract class C = S with M1;", AstFactory.classTypeAlias(
+ "C", null, Keyword.ABSTRACT, AstFactory.typeName4("S"),
+ AstFactory.withClause([AstFactory.typeName4("M1")]), null));
}
void test_visitClassTypeAlias_abstract_implements() {
- _assertSource(
- "abstract class C = S with M1 implements I;",
- AstFactory.classTypeAlias(
- "C",
- null,
- Keyword.ABSTRACT,
- AstFactory.typeName4("S"),
+ _assertSource("abstract class C = S with M1 implements I;", AstFactory
+ .classTypeAlias("C", null, Keyword.ABSTRACT, AstFactory.typeName4("S"),
AstFactory.withClause([AstFactory.typeName4("M1")]),
AstFactory.implementsClause([AstFactory.typeName4("I")])));
}
void test_visitClassTypeAlias_generic() {
- _assertSource(
- "class C<E> = S<E> with M1<E>;",
- AstFactory.classTypeAlias(
- "C",
- AstFactory.typeParameterList(["E"]),
- null,
- AstFactory.typeName4("S", [AstFactory.typeName4("E")]),
- AstFactory.withClause(
- [AstFactory.typeName4("M1", [AstFactory.typeName4("E")])]),
- null));
+ _assertSource("class C<E> = S<E> with M1<E>;", AstFactory.classTypeAlias(
+ "C", AstFactory.typeParameterList(["E"]), null,
+ AstFactory.typeName4("S", [AstFactory.typeName4("E")]),
+ AstFactory.withClause(
+ [AstFactory.typeName4("M1", [AstFactory.typeName4("E")])]), null));
}
void test_visitClassTypeAlias_implements() {
- _assertSource(
- "class C = S with M1 implements I;",
- AstFactory.classTypeAlias(
- "C",
- null,
- null,
- AstFactory.typeName4("S"),
+ _assertSource("class C = S with M1 implements I;", AstFactory
+ .classTypeAlias("C", null, null, AstFactory.typeName4("S"),
AstFactory.withClause([AstFactory.typeName4("M1")]),
AstFactory.implementsClause([AstFactory.typeName4("I")])));
}
void test_visitClassTypeAlias_minimal() {
- _assertSource(
- "class C = S with M1;",
- AstFactory.classTypeAlias(
- "C",
- null,
- null,
- AstFactory.typeName4("S"),
- AstFactory.withClause([AstFactory.typeName4("M1")]),
- null));
+ _assertSource("class C = S with M1;", AstFactory.classTypeAlias("C", null,
+ null, AstFactory.typeName4("S"),
+ AstFactory.withClause([AstFactory.typeName4("M1")]), null));
}
void test_visitClassTypeAlias_parameters_abstract() {
- _assertSource(
- "abstract class C<E> = S with M1;",
- AstFactory.classTypeAlias(
- "C",
- AstFactory.typeParameterList(["E"]),
- Keyword.ABSTRACT,
- AstFactory.typeName4("S"),
- AstFactory.withClause([AstFactory.typeName4("M1")]),
- null));
+ _assertSource("abstract class C<E> = S with M1;", AstFactory.classTypeAlias(
+ "C", AstFactory.typeParameterList(["E"]), Keyword.ABSTRACT,
+ AstFactory.typeName4("S"),
+ AstFactory.withClause([AstFactory.typeName4("M1")]), null));
}
void test_visitClassTypeAlias_parameters_abstract_implements() {
- _assertSource(
- "abstract class C<E> = S with M1 implements I;",
- AstFactory.classTypeAlias(
- "C",
- AstFactory.typeParameterList(["E"]),
- Keyword.ABSTRACT,
- AstFactory.typeName4("S"),
+ _assertSource("abstract class C<E> = S with M1 implements I;", AstFactory
+ .classTypeAlias("C", AstFactory.typeParameterList(["E"]),
+ Keyword.ABSTRACT, AstFactory.typeName4("S"),
AstFactory.withClause([AstFactory.typeName4("M1")]),
AstFactory.implementsClause([AstFactory.typeName4("I")])));
}
void test_visitClassTypeAlias_parameters_implements() {
- _assertSource(
- "class C<E> = S with M1 implements I;",
- AstFactory.classTypeAlias(
- "C",
- AstFactory.typeParameterList(["E"]),
- null,
+ _assertSource("class C<E> = S with M1 implements I;", AstFactory
+ .classTypeAlias("C", AstFactory.typeParameterList(["E"]), null,
AstFactory.typeName4("S"),
AstFactory.withClause([AstFactory.typeName4("M1")]),
AstFactory.implementsClause([AstFactory.typeName4("I")])));
}
void test_visitClassTypeAlias_withMetadata() {
- ClassTypeAlias declaration = AstFactory.classTypeAlias(
- "C",
- null,
- null,
+ ClassTypeAlias declaration = AstFactory.classTypeAlias("C", null, null,
AstFactory.typeName4("S"),
- AstFactory.withClause([AstFactory.typeName4("M1")]),
- null);
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ AstFactory.withClause([AstFactory.typeName4("M1")]), null);
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated class C = S with M1;", declaration);
}
void test_visitComment() {
- _assertSource(
- "",
- Comment.createBlockComment(
- <Token>[TokenFactory.tokenFromString("/* comment */")]));
+ _assertSource("", Comment.createBlockComment(
+ <Token>[TokenFactory.tokenFromString("/* comment */")]));
}
void test_visitCommentReference() {
@@ -2238,30 +1868,24 @@
}
void test_visitCompilationUnit_declaration() {
- _assertSource(
- "var a;",
- AstFactory.compilationUnit2(
- [
- AstFactory.topLevelVariableDeclaration2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")])]));
+ _assertSource("var a;", AstFactory.compilationUnit2([
+ AstFactory.topLevelVariableDeclaration2(
+ Keyword.VAR, [AstFactory.variableDeclaration("a")])
+ ]));
}
void test_visitCompilationUnit_directive() {
- _assertSource(
- "library l;",
+ _assertSource("library l;",
AstFactory.compilationUnit3([AstFactory.libraryDirective2("l")]));
}
void test_visitCompilationUnit_directive_declaration() {
- _assertSource(
- "library l; var a;",
- AstFactory.compilationUnit4(
- [AstFactory.libraryDirective2("l")],
- [
- AstFactory.topLevelVariableDeclaration2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")])]));
+ _assertSource("library l; var a;", AstFactory.compilationUnit4([
+ AstFactory.libraryDirective2("l")
+ ], [
+ AstFactory.topLevelVariableDeclaration2(
+ Keyword.VAR, [AstFactory.variableDeclaration("a")])
+ ]));
}
void test_visitCompilationUnit_empty() {
@@ -2270,197 +1894,125 @@
void test_visitCompilationUnit_script() {
_assertSource(
- "!#/bin/dartvm",
- AstFactory.compilationUnit5("!#/bin/dartvm"));
+ "!#/bin/dartvm", AstFactory.compilationUnit5("!#/bin/dartvm"));
}
void test_visitCompilationUnit_script_declaration() {
- _assertSource(
- "!#/bin/dartvm var a;",
- AstFactory.compilationUnit6(
- "!#/bin/dartvm",
- [
- AstFactory.topLevelVariableDeclaration2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")])]));
+ _assertSource("!#/bin/dartvm var a;", AstFactory.compilationUnit6(
+ "!#/bin/dartvm", [
+ AstFactory.topLevelVariableDeclaration2(
+ Keyword.VAR, [AstFactory.variableDeclaration("a")])
+ ]));
}
void test_visitCompilationUnit_script_directive() {
- _assertSource(
- "!#/bin/dartvm library l;",
- AstFactory.compilationUnit7(
- "!#/bin/dartvm",
- [AstFactory.libraryDirective2("l")]));
+ _assertSource("!#/bin/dartvm library l;", AstFactory.compilationUnit7(
+ "!#/bin/dartvm", [AstFactory.libraryDirective2("l")]));
}
void test_visitCompilationUnit_script_directives_declarations() {
- _assertSource(
- "!#/bin/dartvm library l; var a;",
- AstFactory.compilationUnit8(
- "!#/bin/dartvm",
- [AstFactory.libraryDirective2("l")],
- [
- AstFactory.topLevelVariableDeclaration2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")])]));
+ _assertSource("!#/bin/dartvm library l; var a;", AstFactory
+ .compilationUnit8("!#/bin/dartvm", [
+ AstFactory.libraryDirective2("l")
+ ], [
+ AstFactory.topLevelVariableDeclaration2(
+ Keyword.VAR, [AstFactory.variableDeclaration("a")])
+ ]));
}
void test_visitConditionalExpression() {
- _assertSource(
- "a ? b : c",
- AstFactory.conditionalExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"),
- AstFactory.identifier3("c")));
+ _assertSource("a ? b : c", AstFactory.conditionalExpression(
+ AstFactory.identifier3("a"), AstFactory.identifier3("b"),
+ AstFactory.identifier3("c")));
}
void test_visitConstructorDeclaration_const() {
- _assertSource(
- "const C() {}",
- AstFactory.constructorDeclaration2(
- Keyword.CONST,
- null,
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(),
- null,
- AstFactory.blockFunctionBody2()));
+ _assertSource("const C() {}", AstFactory.constructorDeclaration2(
+ Keyword.CONST, null, AstFactory.identifier3("C"), null,
+ AstFactory.formalParameterList(), null,
+ AstFactory.blockFunctionBody2()));
}
void test_visitConstructorDeclaration_external() {
- _assertSource(
- "external C();",
- AstFactory.constructorDeclaration(
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(),
- null));
+ _assertSource("external C();", AstFactory.constructorDeclaration(
+ AstFactory.identifier3("C"), null, AstFactory.formalParameterList(),
+ null));
}
void test_visitConstructorDeclaration_minimal() {
- _assertSource(
- "C() {}",
- AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(),
- null,
- AstFactory.blockFunctionBody2()));
+ _assertSource("C() {}", AstFactory.constructorDeclaration2(null, null,
+ AstFactory.identifier3("C"), null, AstFactory.formalParameterList(),
+ null, AstFactory.blockFunctionBody2()));
}
void test_visitConstructorDeclaration_multipleInitializers() {
- _assertSource(
- "C() : a = b, c = d {}",
- AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(),
- [
- AstFactory.constructorFieldInitializer(false, "a", AstFactory.identifier3("b")),
- AstFactory.constructorFieldInitializer(
- false,
- "c",
- AstFactory.identifier3("d"))],
- AstFactory.blockFunctionBody2()));
+ _assertSource("C() : a = b, c = d {}", AstFactory.constructorDeclaration2(
+ null, null, AstFactory.identifier3("C"), null,
+ AstFactory.formalParameterList(), [
+ AstFactory.constructorFieldInitializer(
+ false, "a", AstFactory.identifier3("b")),
+ AstFactory.constructorFieldInitializer(
+ false, "c", AstFactory.identifier3("d"))
+ ], AstFactory.blockFunctionBody2()));
}
void test_visitConstructorDeclaration_multipleParameters() {
- _assertSource(
- "C(var a, var b) {}",
- AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
- AstFactory.simpleFormalParameter(Keyword.VAR, "b")]),
- null,
- AstFactory.blockFunctionBody2()));
+ _assertSource("C(var a, var b) {}", AstFactory.constructorDeclaration2(null,
+ null, AstFactory.identifier3("C"), null, AstFactory.formalParameterList(
+ [
+ AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
+ AstFactory.simpleFormalParameter(Keyword.VAR, "b")
+ ]), null, AstFactory.blockFunctionBody2()));
}
void test_visitConstructorDeclaration_named() {
- _assertSource(
- "C.m() {}",
- AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- "m",
- AstFactory.formalParameterList(),
- null,
- AstFactory.blockFunctionBody2()));
+ _assertSource("C.m() {}", AstFactory.constructorDeclaration2(null, null,
+ AstFactory.identifier3("C"), "m", AstFactory.formalParameterList(),
+ null, AstFactory.blockFunctionBody2()));
}
void test_visitConstructorDeclaration_singleInitializer() {
- _assertSource(
- "C() : a = b {}",
- AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(),
- [
- AstFactory.constructorFieldInitializer(
- false,
- "a",
- AstFactory.identifier3("b"))],
- AstFactory.blockFunctionBody2()));
+ _assertSource("C() : a = b {}", AstFactory.constructorDeclaration2(null,
+ null, AstFactory.identifier3("C"), null,
+ AstFactory.formalParameterList(), [
+ AstFactory.constructorFieldInitializer(
+ false, "a", AstFactory.identifier3("b"))
+ ], AstFactory.blockFunctionBody2()));
}
void test_visitConstructorDeclaration_withMetadata() {
ConstructorDeclaration declaration = AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(),
- null,
+ null, null, AstFactory.identifier3("C"), null,
+ AstFactory.formalParameterList(), null,
AstFactory.blockFunctionBody2());
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated C() {}", declaration);
}
void test_visitConstructorFieldInitializer_withoutThis() {
- _assertSource(
- "a = b",
- AstFactory.constructorFieldInitializer(
- false,
- "a",
- AstFactory.identifier3("b")));
+ _assertSource("a = b", AstFactory.constructorFieldInitializer(
+ false, "a", AstFactory.identifier3("b")));
}
void test_visitConstructorFieldInitializer_withThis() {
- _assertSource(
- "this.a = b",
- AstFactory.constructorFieldInitializer(true, "a", AstFactory.identifier3("b")));
+ _assertSource("this.a = b", AstFactory.constructorFieldInitializer(
+ true, "a", AstFactory.identifier3("b")));
}
void test_visitConstructorName_named_prefix() {
- _assertSource(
- "p.C.n",
+ _assertSource("p.C.n",
AstFactory.constructorName(AstFactory.typeName4("p.C.n"), null));
}
void test_visitConstructorName_unnamed_noPrefix() {
_assertSource(
- "C",
- AstFactory.constructorName(AstFactory.typeName4("C"), null));
+ "C", AstFactory.constructorName(AstFactory.typeName4("C"), null));
}
void test_visitConstructorName_unnamed_prefix() {
- _assertSource(
- "p.C",
- AstFactory.constructorName(
- AstFactory.typeName3(AstFactory.identifier5("p", "C")),
- null));
+ _assertSource("p.C", AstFactory.constructorName(
+ AstFactory.typeName3(AstFactory.identifier5("p", "C")), null));
}
void test_visitContinueStatement_label() {
@@ -2472,39 +2024,28 @@
}
void test_visitDefaultFormalParameter_named_noValue() {
- _assertSource(
- "p",
- AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p"), null));
+ _assertSource("p", AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("p"), null));
}
void test_visitDefaultFormalParameter_named_value() {
- _assertSource(
- "p : 0",
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("p"),
- AstFactory.integer(0)));
+ _assertSource("p : 0", AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("p"), AstFactory.integer(0)));
}
void test_visitDefaultFormalParameter_positional_noValue() {
- _assertSource(
- "p",
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("p"),
- null));
+ _assertSource("p", AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("p"), null));
}
void test_visitDefaultFormalParameter_positional_value() {
- _assertSource(
- "p = 0",
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("p"),
- AstFactory.integer(0)));
+ _assertSource("p = 0", AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("p"), AstFactory.integer(0)));
}
void test_visitDoStatement() {
- _assertSource(
- "do {} while (c);",
- AstFactory.doStatement(AstFactory.block(), AstFactory.identifier3("c")));
+ _assertSource("do {} while (c);", AstFactory.doStatement(
+ AstFactory.block(), AstFactory.identifier3("c")));
}
void test_visitDoubleLiteral() {
@@ -2521,8 +2062,7 @@
void test_visitEnumDeclaration_multiple() {
_assertSource(
- "enum E {ONE, TWO}",
- AstFactory.enumDeclaration2("E", ["ONE", "TWO"]));
+ "enum E {ONE, TWO}", AstFactory.enumDeclaration2("E", ["ONE", "TWO"]));
}
void test_visitEnumDeclaration_single() {
@@ -2530,21 +2070,16 @@
}
void test_visitExportDirective_combinator() {
- _assertSource(
- "export 'a.dart' show A;",
- AstFactory.exportDirective2(
- "a.dart",
- [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
+ _assertSource("export 'a.dart' show A;", AstFactory.exportDirective2(
+ "a.dart", [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
}
void test_visitExportDirective_combinators() {
- _assertSource(
- "export 'a.dart' show A hide B;",
- AstFactory.exportDirective2(
- "a.dart",
- [
- AstFactory.showCombinator([AstFactory.identifier3("A")]),
- AstFactory.hideCombinator([AstFactory.identifier3("B")])]));
+ _assertSource("export 'a.dart' show A hide B;", AstFactory.exportDirective2(
+ "a.dart", [
+ AstFactory.showCombinator([AstFactory.identifier3("A")]),
+ AstFactory.hideCombinator([AstFactory.identifier3("B")])
+ ]));
}
void test_visitExportDirective_minimal() {
@@ -2553,126 +2088,93 @@
void test_visitExportDirective_withMetadata() {
ExportDirective directive = AstFactory.exportDirective2("a.dart");
- directive.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ directive.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated export 'a.dart';", directive);
}
void test_visitExpressionFunctionBody_async() {
- _assertSource(
- "async => a;",
+ _assertSource("async => a;",
AstFactory.asyncExpressionFunctionBody(AstFactory.identifier3("a")));
}
void test_visitExpressionFunctionBody_simple() {
- _assertSource(
- "=> a;",
+ _assertSource("=> a;",
AstFactory.expressionFunctionBody(AstFactory.identifier3("a")));
}
void test_visitExpressionStatement() {
_assertSource(
- "a;",
- AstFactory.expressionStatement(AstFactory.identifier3("a")));
+ "a;", AstFactory.expressionStatement(AstFactory.identifier3("a")));
}
void test_visitExtendsClause() {
_assertSource(
- "extends C",
- AstFactory.extendsClause(AstFactory.typeName4("C")));
+ "extends C", AstFactory.extendsClause(AstFactory.typeName4("C")));
}
void test_visitFieldDeclaration_instance() {
- _assertSource(
- "var a;",
- AstFactory.fieldDeclaration2(
- false,
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")]));
+ _assertSource("var a;", AstFactory.fieldDeclaration2(
+ false, Keyword.VAR, [AstFactory.variableDeclaration("a")]));
}
void test_visitFieldDeclaration_static() {
- _assertSource(
- "static var a;",
- AstFactory.fieldDeclaration2(
- true,
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")]));
+ _assertSource("static var a;", AstFactory.fieldDeclaration2(
+ true, Keyword.VAR, [AstFactory.variableDeclaration("a")]));
}
void test_visitFieldDeclaration_withMetadata() {
FieldDeclaration declaration = AstFactory.fieldDeclaration2(
- false,
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")]);
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ false, Keyword.VAR, [AstFactory.variableDeclaration("a")]);
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated var a;", declaration);
}
void test_visitFieldFormalParameter_functionTyped() {
- _assertSource(
- "A this.a(b)",
- AstFactory.fieldFormalParameter(
- null,
- AstFactory.typeName4("A"),
- "a",
- AstFactory.formalParameterList([AstFactory.simpleFormalParameter3("b")])));
+ _assertSource("A this.a(b)", AstFactory.fieldFormalParameter(null,
+ AstFactory.typeName4("A"), "a", AstFactory
+ .formalParameterList([AstFactory.simpleFormalParameter3("b")])));
}
void test_visitFieldFormalParameter_keyword() {
_assertSource(
- "var this.a",
- AstFactory.fieldFormalParameter(Keyword.VAR, null, "a"));
+ "var this.a", AstFactory.fieldFormalParameter(Keyword.VAR, null, "a"));
}
void test_visitFieldFormalParameter_keywordAndType() {
- _assertSource(
- "final A this.a",
- AstFactory.fieldFormalParameter(Keyword.FINAL, AstFactory.typeName4("A"), "a"));
+ _assertSource("final A this.a", AstFactory.fieldFormalParameter(
+ Keyword.FINAL, AstFactory.typeName4("A"), "a"));
}
void test_visitFieldFormalParameter_type() {
- _assertSource(
- "A this.a",
+ _assertSource("A this.a",
AstFactory.fieldFormalParameter(null, AstFactory.typeName4("A"), "a"));
}
void test_visitForEachStatement_declared() {
- _assertSource(
- "for (a in b) {}",
- AstFactory.forEachStatement(
- AstFactory.declaredIdentifier3("a"),
- AstFactory.identifier3("b"),
- AstFactory.block()));
+ _assertSource("for (a in b) {}", AstFactory.forEachStatement(
+ AstFactory.declaredIdentifier3("a"), AstFactory.identifier3("b"),
+ AstFactory.block()));
}
void test_visitForEachStatement_variable() {
- _assertSource(
- "for (a in b) {}",
- new ForEachStatement.con2(
- null,
- TokenFactory.tokenFromKeyword(Keyword.FOR),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- AstFactory.identifier3("a"),
- TokenFactory.tokenFromKeyword(Keyword.IN),
- AstFactory.identifier3("b"),
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
- AstFactory.block()));
+ _assertSource("for (a in b) {}", new ForEachStatement.con2(null,
+ TokenFactory.tokenFromKeyword(Keyword.FOR),
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
+ AstFactory.identifier3("a"), TokenFactory.tokenFromKeyword(Keyword.IN),
+ AstFactory.identifier3("b"),
+ TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), AstFactory.block()));
}
void test_visitForEachStatement_variable_await() {
- _assertSource(
- "await for (a in b) {}",
- new ForEachStatement.con2(
- TokenFactory.tokenFromString("await"),
- TokenFactory.tokenFromKeyword(Keyword.FOR),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- AstFactory.identifier3("a"),
- TokenFactory.tokenFromKeyword(Keyword.IN),
- AstFactory.identifier3("b"),
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
- AstFactory.block()));
+ _assertSource("await for (a in b) {}", new ForEachStatement.con2(
+ TokenFactory.tokenFromString("await"),
+ TokenFactory.tokenFromKeyword(Keyword.FOR),
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
+ AstFactory.identifier3("a"), TokenFactory.tokenFromKeyword(Keyword.IN),
+ AstFactory.identifier3("b"),
+ TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), AstFactory.block()));
}
void test_visitFormalParameterList_empty() {
@@ -2680,379 +2182,251 @@
}
void test_visitFormalParameterList_n() {
- _assertSource(
- "({a : 0})",
- AstFactory.formalParameterList(
- [
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.integer(0))]));
+ _assertSource("({a : 0})", AstFactory.formalParameterList([
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0))
+ ]));
}
void test_visitFormalParameterList_nn() {
- _assertSource(
- "({a : 0, b : 1})",
- AstFactory.formalParameterList(
- [
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.integer(0)),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.integer(1))]));
+ _assertSource("({a : 0, b : 1})", AstFactory.formalParameterList([
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0)),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1))
+ ]));
}
void test_visitFormalParameterList_p() {
- _assertSource(
- "([a = 0])",
- AstFactory.formalParameterList(
- [
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.integer(0))]));
+ _assertSource("([a = 0])", AstFactory.formalParameterList([
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0))
+ ]));
}
void test_visitFormalParameterList_pp() {
- _assertSource(
- "([a = 0, b = 1])",
- AstFactory.formalParameterList(
- [
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.integer(0)),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.integer(1))]));
+ _assertSource("([a = 0, b = 1])", AstFactory.formalParameterList([
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0)),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1))
+ ]));
}
void test_visitFormalParameterList_r() {
- _assertSource(
- "(a)",
- AstFactory.formalParameterList([AstFactory.simpleFormalParameter3("a")]));
+ _assertSource("(a)", AstFactory
+ .formalParameterList([AstFactory.simpleFormalParameter3("a")]));
}
void test_visitFormalParameterList_rn() {
- _assertSource(
- "(a, {b : 1})",
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.integer(1))]));
+ _assertSource("(a, {b : 1})", AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1))
+ ]));
}
void test_visitFormalParameterList_rnn() {
- _assertSource(
- "(a, {b : 1, c : 2})",
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.integer(1)),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("c"),
- AstFactory.integer(2))]));
+ _assertSource("(a, {b : 1, c : 2})", AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1)),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("c"), AstFactory.integer(2))
+ ]));
}
void test_visitFormalParameterList_rp() {
- _assertSource(
- "(a, [b = 1])",
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.integer(1))]));
+ _assertSource("(a, [b = 1])", AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1))
+ ]));
}
void test_visitFormalParameterList_rpp() {
- _assertSource(
- "(a, [b = 1, c = 2])",
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.integer(1)),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("c"),
- AstFactory.integer(2))]));
+ _assertSource("(a, [b = 1, c = 2])", AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1)),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("c"), AstFactory.integer(2))
+ ]));
}
void test_visitFormalParameterList_rr() {
- _assertSource(
- "(a, b)",
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.simpleFormalParameter3("b")]));
+ _assertSource("(a, b)", AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.simpleFormalParameter3("b")
+ ]));
}
void test_visitFormalParameterList_rrn() {
- _assertSource(
- "(a, b, {c : 3})",
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("c"),
- AstFactory.integer(3))]));
+ _assertSource("(a, b, {c : 3})", AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.simpleFormalParameter3("b"),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("c"), AstFactory.integer(3))
+ ]));
}
void test_visitFormalParameterList_rrnn() {
- _assertSource(
- "(a, b, {c : 3, d : 4})",
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("c"),
- AstFactory.integer(3)),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("d"),
- AstFactory.integer(4))]));
+ _assertSource("(a, b, {c : 3, d : 4})", AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.simpleFormalParameter3("b"),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("c"), AstFactory.integer(3)),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("d"), AstFactory.integer(4))
+ ]));
}
void test_visitFormalParameterList_rrp() {
- _assertSource(
- "(a, b, [c = 3])",
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("c"),
- AstFactory.integer(3))]));
+ _assertSource("(a, b, [c = 3])", AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.simpleFormalParameter3("b"),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("c"), AstFactory.integer(3))
+ ]));
}
void test_visitFormalParameterList_rrpp() {
- _assertSource(
- "(a, b, [c = 3, d = 4])",
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("c"),
- AstFactory.integer(3)),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("d"),
- AstFactory.integer(4))]));
+ _assertSource("(a, b, [c = 3, d = 4])", AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.simpleFormalParameter3("b"),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("c"), AstFactory.integer(3)),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("d"), AstFactory.integer(4))
+ ]));
}
void test_visitForStatement_c() {
- _assertSource(
- "for (; c;) {}",
- AstFactory.forStatement(
- null,
- AstFactory.identifier3("c"),
- null,
- AstFactory.block()));
+ _assertSource("for (; c;) {}", AstFactory.forStatement(
+ null, AstFactory.identifier3("c"), null, AstFactory.block()));
}
void test_visitForStatement_cu() {
- _assertSource(
- "for (; c; u) {}",
- AstFactory.forStatement(
- null,
- AstFactory.identifier3("c"),
- [AstFactory.identifier3("u")],
- AstFactory.block()));
+ _assertSource("for (; c; u) {}", AstFactory.forStatement(null,
+ AstFactory.identifier3("c"), [
+ AstFactory.identifier3("u")
+ ], AstFactory.block()));
}
void test_visitForStatement_e() {
- _assertSource(
- "for (e;;) {}",
- AstFactory.forStatement(
- AstFactory.identifier3("e"),
- null,
- null,
- AstFactory.block()));
+ _assertSource("for (e;;) {}", AstFactory.forStatement(
+ AstFactory.identifier3("e"), null, null, AstFactory.block()));
}
void test_visitForStatement_ec() {
- _assertSource(
- "for (e; c;) {}",
- AstFactory.forStatement(
- AstFactory.identifier3("e"),
- AstFactory.identifier3("c"),
- null,
- AstFactory.block()));
+ _assertSource("for (e; c;) {}", AstFactory.forStatement(
+ AstFactory.identifier3("e"), AstFactory.identifier3("c"), null,
+ AstFactory.block()));
}
void test_visitForStatement_ecu() {
- _assertSource(
- "for (e; c; u) {}",
- AstFactory.forStatement(
- AstFactory.identifier3("e"),
- AstFactory.identifier3("c"),
- [AstFactory.identifier3("u")],
- AstFactory.block()));
+ _assertSource("for (e; c; u) {}", AstFactory.forStatement(
+ AstFactory.identifier3("e"), AstFactory.identifier3("c"), [
+ AstFactory.identifier3("u")
+ ], AstFactory.block()));
}
void test_visitForStatement_eu() {
- _assertSource(
- "for (e;; u) {}",
- AstFactory.forStatement(
- AstFactory.identifier3("e"),
- null,
- [AstFactory.identifier3("u")],
- AstFactory.block()));
+ _assertSource("for (e;; u) {}", AstFactory.forStatement(
+ AstFactory.identifier3("e"), null, [
+ AstFactory.identifier3("u")
+ ], AstFactory.block()));
}
void test_visitForStatement_i() {
- _assertSource(
- "for (var i;;) {}",
- AstFactory.forStatement2(
- AstFactory.variableDeclarationList2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("i")]),
- null,
- null,
- AstFactory.block()));
+ _assertSource("for (var i;;) {}", AstFactory.forStatement2(AstFactory
+ .variableDeclarationList2(
+ Keyword.VAR, [AstFactory.variableDeclaration("i")]), null, null,
+ AstFactory.block()));
}
void test_visitForStatement_ic() {
- _assertSource(
- "for (var i; c;) {}",
- AstFactory.forStatement2(
- AstFactory.variableDeclarationList2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("i")]),
- AstFactory.identifier3("c"),
- null,
- AstFactory.block()));
+ _assertSource("for (var i; c;) {}", AstFactory.forStatement2(AstFactory
+ .variableDeclarationList2(Keyword.VAR, [
+ AstFactory.variableDeclaration("i")
+ ]), AstFactory.identifier3("c"), null, AstFactory.block()));
}
void test_visitForStatement_icu() {
- _assertSource(
- "for (var i; c; u) {}",
- AstFactory.forStatement2(
- AstFactory.variableDeclarationList2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("i")]),
- AstFactory.identifier3("c"),
- [AstFactory.identifier3("u")],
- AstFactory.block()));
+ _assertSource("for (var i; c; u) {}", AstFactory.forStatement2(AstFactory
+ .variableDeclarationList2(Keyword.VAR, [
+ AstFactory.variableDeclaration("i")
+ ]), AstFactory.identifier3("c"), [
+ AstFactory.identifier3("u")
+ ], AstFactory.block()));
}
void test_visitForStatement_iu() {
- _assertSource(
- "for (var i;; u) {}",
- AstFactory.forStatement2(
- AstFactory.variableDeclarationList2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("i")]),
- null,
- [AstFactory.identifier3("u")],
- AstFactory.block()));
+ _assertSource("for (var i;; u) {}", AstFactory.forStatement2(AstFactory
+ .variableDeclarationList2(
+ Keyword.VAR, [AstFactory.variableDeclaration("i")]), null, [
+ AstFactory.identifier3("u")
+ ], AstFactory.block()));
}
void test_visitForStatement_u() {
- _assertSource(
- "for (;; u) {}",
- AstFactory.forStatement(
- null,
- null,
- [AstFactory.identifier3("u")],
- AstFactory.block()));
+ _assertSource("for (;; u) {}", AstFactory.forStatement(
+ null, null, [AstFactory.identifier3("u")], AstFactory.block()));
}
void test_visitFunctionDeclaration_getter() {
- _assertSource(
- "get f() {}",
- AstFactory.functionDeclaration(
- null,
- Keyword.GET,
- "f",
- AstFactory.functionExpression()));
+ _assertSource("get f() {}", AstFactory.functionDeclaration(
+ null, Keyword.GET, "f", AstFactory.functionExpression()));
}
void test_visitFunctionDeclaration_local_blockBody() {
FunctionDeclaration f = AstFactory.functionDeclaration(
- null,
- null,
- "f",
- AstFactory.functionExpression());
+ null, null, "f", AstFactory.functionExpression());
FunctionDeclarationStatement fStatement =
new FunctionDeclarationStatement(f);
- _assertSource(
- "main() {f() {} 42;}",
- AstFactory.functionDeclaration(
- null,
- null,
- "main",
- AstFactory.functionExpression2(
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2(
- [fStatement, AstFactory.expressionStatement(AstFactory.integer(42))]))));
+ _assertSource("main() {f() {} 42;}", AstFactory.functionDeclaration(null,
+ null, "main", AstFactory.functionExpression2(
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2([
+ fStatement,
+ AstFactory.expressionStatement(AstFactory.integer(42))
+ ]))));
}
void test_visitFunctionDeclaration_local_expressionBody() {
- FunctionDeclaration f = AstFactory.functionDeclaration(
- null,
- null,
- "f",
- AstFactory.functionExpression2(
- AstFactory.formalParameterList(),
+ FunctionDeclaration f = AstFactory.functionDeclaration(null, null, "f",
+ AstFactory.functionExpression2(AstFactory.formalParameterList(),
AstFactory.expressionFunctionBody(AstFactory.integer(1))));
FunctionDeclarationStatement fStatement =
new FunctionDeclarationStatement(f);
- _assertSource(
- "main() {f() => 1; 2;}",
- AstFactory.functionDeclaration(
- null,
- null,
- "main",
- AstFactory.functionExpression2(
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2(
- [fStatement, AstFactory.expressionStatement(AstFactory.integer(2))]))));
+ _assertSource("main() {f() => 1; 2;}", AstFactory.functionDeclaration(null,
+ null, "main", AstFactory.functionExpression2(
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2([
+ fStatement,
+ AstFactory.expressionStatement(AstFactory.integer(2))
+ ]))));
}
void test_visitFunctionDeclaration_normal() {
- _assertSource(
- "f() {}",
- AstFactory.functionDeclaration(
- null,
- null,
- "f",
- AstFactory.functionExpression()));
+ _assertSource("f() {}", AstFactory.functionDeclaration(
+ null, null, "f", AstFactory.functionExpression()));
}
void test_visitFunctionDeclaration_setter() {
- _assertSource(
- "set f() {}",
- AstFactory.functionDeclaration(
- null,
- Keyword.SET,
- "f",
- AstFactory.functionExpression()));
+ _assertSource("set f() {}", AstFactory.functionDeclaration(
+ null, Keyword.SET, "f", AstFactory.functionExpression()));
}
void test_visitFunctionDeclaration_withMetadata() {
FunctionDeclaration declaration = AstFactory.functionDeclaration(
- null,
- null,
- "f",
- AstFactory.functionExpression());
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ null, null, "f", AstFactory.functionExpression());
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated f() {}", declaration);
}
void test_visitFunctionDeclarationStatement() {
- _assertSource(
- "f() {}",
- AstFactory.functionDeclarationStatement(
- null,
- null,
- "f",
- AstFactory.functionExpression()));
+ _assertSource("f() {}", AstFactory.functionDeclarationStatement(
+ null, null, "f", AstFactory.functionExpression()));
}
void test_visitFunctionExpression() {
@@ -3060,39 +2434,27 @@
}
void test_visitFunctionExpressionInvocation() {
- _assertSource(
- "f()",
+ _assertSource("f()",
AstFactory.functionExpressionInvocation(AstFactory.identifier3("f")));
}
void test_visitFunctionTypeAlias_generic() {
- _assertSource(
- "typedef A F<B>();",
- AstFactory.typeAlias(
- AstFactory.typeName4("A"),
- "F",
- AstFactory.typeParameterList(["B"]),
- AstFactory.formalParameterList()));
+ _assertSource("typedef A F<B>();", AstFactory.typeAlias(
+ AstFactory.typeName4("A"), "F", AstFactory.typeParameterList(["B"]),
+ AstFactory.formalParameterList()));
}
void test_visitFunctionTypeAlias_nonGeneric() {
- _assertSource(
- "typedef A F();",
- AstFactory.typeAlias(
- AstFactory.typeName4("A"),
- "F",
- null,
- AstFactory.formalParameterList()));
+ _assertSource("typedef A F();", AstFactory.typeAlias(
+ AstFactory.typeName4("A"), "F", null,
+ AstFactory.formalParameterList()));
}
void test_visitFunctionTypeAlias_withMetadata() {
FunctionTypeAlias declaration = AstFactory.typeAlias(
- AstFactory.typeName4("A"),
- "F",
- null,
- AstFactory.formalParameterList());
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ AstFactory.typeName4("A"), "F", null, AstFactory.formalParameterList());
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated typedef A F();", declaration);
}
@@ -3101,159 +2463,120 @@
}
void test_visitFunctionTypedFormalParameter_type() {
- _assertSource(
- "T f()",
- AstFactory.functionTypedFormalParameter(AstFactory.typeName4("T"), "f"));
+ _assertSource("T f()", AstFactory.functionTypedFormalParameter(
+ AstFactory.typeName4("T"), "f"));
}
void test_visitIfStatement_withElse() {
- _assertSource(
- "if (c) {} else {}",
- AstFactory.ifStatement2(
- AstFactory.identifier3("c"),
- AstFactory.block(),
- AstFactory.block()));
+ _assertSource("if (c) {} else {}", AstFactory.ifStatement2(
+ AstFactory.identifier3("c"), AstFactory.block(), AstFactory.block()));
}
void test_visitIfStatement_withoutElse() {
- _assertSource(
- "if (c) {}",
- AstFactory.ifStatement(AstFactory.identifier3("c"), AstFactory.block()));
+ _assertSource("if (c) {}", AstFactory.ifStatement(
+ AstFactory.identifier3("c"), AstFactory.block()));
}
void test_visitImplementsClause_multiple() {
- _assertSource(
- "implements A, B",
- AstFactory.implementsClause(
- [AstFactory.typeName4("A"), AstFactory.typeName4("B")]));
+ _assertSource("implements A, B", AstFactory.implementsClause(
+ [AstFactory.typeName4("A"), AstFactory.typeName4("B")]));
}
void test_visitImplementsClause_single() {
- _assertSource(
- "implements A",
+ _assertSource("implements A",
AstFactory.implementsClause([AstFactory.typeName4("A")]));
}
void test_visitImportDirective_combinator() {
- _assertSource(
- "import 'a.dart' show A;",
- AstFactory.importDirective3(
- "a.dart",
- null,
- [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
+ _assertSource("import 'a.dart' show A;", AstFactory.importDirective3(
+ "a.dart", null, [
+ AstFactory.showCombinator([AstFactory.identifier3("A")])
+ ]));
}
void test_visitImportDirective_combinators() {
- _assertSource(
- "import 'a.dart' show A hide B;",
- AstFactory.importDirective3(
- "a.dart",
- null,
- [
- AstFactory.showCombinator([AstFactory.identifier3("A")]),
- AstFactory.hideCombinator([AstFactory.identifier3("B")])]));
+ _assertSource("import 'a.dart' show A hide B;", AstFactory.importDirective3(
+ "a.dart", null, [
+ AstFactory.showCombinator([AstFactory.identifier3("A")]),
+ AstFactory.hideCombinator([AstFactory.identifier3("B")])
+ ]));
}
void test_visitImportDirective_deferred() {
- _assertSource(
- "import 'a.dart' deferred as p;",
+ _assertSource("import 'a.dart' deferred as p;",
AstFactory.importDirective2("a.dart", true, "p"));
}
void test_visitImportDirective_minimal() {
_assertSource(
- "import 'a.dart';",
- AstFactory.importDirective3("a.dart", null));
+ "import 'a.dart';", AstFactory.importDirective3("a.dart", null));
}
void test_visitImportDirective_prefix() {
_assertSource(
- "import 'a.dart' as p;",
- AstFactory.importDirective3("a.dart", "p"));
+ "import 'a.dart' as p;", AstFactory.importDirective3("a.dart", "p"));
}
void test_visitImportDirective_prefix_combinator() {
- _assertSource(
- "import 'a.dart' as p show A;",
- AstFactory.importDirective3(
- "a.dart",
- "p",
- [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
+ _assertSource("import 'a.dart' as p show A;", AstFactory.importDirective3(
+ "a.dart", "p", [
+ AstFactory.showCombinator([AstFactory.identifier3("A")])
+ ]));
}
void test_visitImportDirective_prefix_combinators() {
- _assertSource(
- "import 'a.dart' as p show A hide B;",
- AstFactory.importDirective3(
- "a.dart",
- "p",
- [
- AstFactory.showCombinator([AstFactory.identifier3("A")]),
- AstFactory.hideCombinator([AstFactory.identifier3("B")])]));
+ _assertSource("import 'a.dart' as p show A hide B;", AstFactory
+ .importDirective3("a.dart", "p", [
+ AstFactory.showCombinator([AstFactory.identifier3("A")]),
+ AstFactory.hideCombinator([AstFactory.identifier3("B")])
+ ]));
}
void test_visitImportDirective_withMetadata() {
ImportDirective directive = AstFactory.importDirective3("a.dart", null);
- directive.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ directive.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated import 'a.dart';", directive);
}
void test_visitImportHideCombinator_multiple() {
- _assertSource(
- "hide a, b",
- AstFactory.hideCombinator(
- [AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
+ _assertSource("hide a, b", AstFactory.hideCombinator(
+ [AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
}
void test_visitImportHideCombinator_single() {
_assertSource(
- "hide a",
- AstFactory.hideCombinator([AstFactory.identifier3("a")]));
+ "hide a", AstFactory.hideCombinator([AstFactory.identifier3("a")]));
}
void test_visitImportShowCombinator_multiple() {
- _assertSource(
- "show a, b",
- AstFactory.showCombinator(
- [AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
+ _assertSource("show a, b", AstFactory.showCombinator(
+ [AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
}
void test_visitImportShowCombinator_single() {
_assertSource(
- "show a",
- AstFactory.showCombinator([AstFactory.identifier3("a")]));
+ "show a", AstFactory.showCombinator([AstFactory.identifier3("a")]));
}
void test_visitIndexExpression() {
- _assertSource(
- "a[i]",
- AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("i")));
+ _assertSource("a[i]", AstFactory.indexExpression(
+ AstFactory.identifier3("a"), AstFactory.identifier3("i")));
}
void test_visitInstanceCreationExpression_const() {
- _assertSource(
- "const C()",
- AstFactory.instanceCreationExpression2(
- Keyword.CONST,
- AstFactory.typeName4("C")));
+ _assertSource("const C()", AstFactory.instanceCreationExpression2(
+ Keyword.CONST, AstFactory.typeName4("C")));
}
void test_visitInstanceCreationExpression_named() {
- _assertSource(
- "new C.c()",
- AstFactory.instanceCreationExpression3(
- Keyword.NEW,
- AstFactory.typeName4("C"),
- "c"));
+ _assertSource("new C.c()", AstFactory.instanceCreationExpression3(
+ Keyword.NEW, AstFactory.typeName4("C"), "c"));
}
void test_visitInstanceCreationExpression_unnamed() {
- _assertSource(
- "new C()",
- AstFactory.instanceCreationExpression2(Keyword.NEW, AstFactory.typeName4("C")));
+ _assertSource("new C()", AstFactory.instanceCreationExpression2(
+ Keyword.NEW, AstFactory.typeName4("C")));
}
void test_visitIntegerLiteral() {
@@ -3261,8 +2584,7 @@
}
void test_visitInterpolationExpression_expression() {
- _assertSource(
- "\${a}",
+ _assertSource("\${a}",
AstFactory.interpolationExpression(AstFactory.identifier3("a")));
}
@@ -3275,21 +2597,13 @@
}
void test_visitIsExpression_negated() {
- _assertSource(
- "a is! C",
- AstFactory.isExpression(
- AstFactory.identifier3("a"),
- true,
- AstFactory.typeName4("C")));
+ _assertSource("a is! C", AstFactory.isExpression(
+ AstFactory.identifier3("a"), true, AstFactory.typeName4("C")));
}
void test_visitIsExpression_normal() {
- _assertSource(
- "a is C",
- AstFactory.isExpression(
- AstFactory.identifier3("a"),
- false,
- AstFactory.typeName4("C")));
+ _assertSource("a is C", AstFactory.isExpression(
+ AstFactory.identifier3("a"), false, AstFactory.typeName4("C")));
}
void test_visitLabel() {
@@ -3297,19 +2611,15 @@
}
void test_visitLabeledStatement_multiple() {
- _assertSource(
- "a: b: return;",
- AstFactory.labeledStatement(
- [AstFactory.label2("a"), AstFactory.label2("b")],
- AstFactory.returnStatement()));
+ _assertSource("a: b: return;", AstFactory.labeledStatement([
+ AstFactory.label2("a"),
+ AstFactory.label2("b")
+ ], AstFactory.returnStatement()));
}
void test_visitLabeledStatement_single() {
- _assertSource(
- "a: return;",
- AstFactory.labeledStatement(
- [AstFactory.label2("a")],
- AstFactory.returnStatement()));
+ _assertSource("a: return;", AstFactory.labeledStatement(
+ [AstFactory.label2("a")], AstFactory.returnStatement()));
}
void test_visitLibraryDirective() {
@@ -3318,25 +2628,22 @@
void test_visitLibraryDirective_withMetadata() {
LibraryDirective directive = AstFactory.libraryDirective2("l");
- directive.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ directive.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated library l;", directive);
}
void test_visitLibraryIdentifier_multiple() {
- _assertSource(
- "a.b.c",
- AstFactory.libraryIdentifier(
- [
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"),
- AstFactory.identifier3("c")]));
+ _assertSource("a.b.c", AstFactory.libraryIdentifier([
+ AstFactory.identifier3("a"),
+ AstFactory.identifier3("b"),
+ AstFactory.identifier3("c")
+ ]));
}
void test_visitLibraryIdentifier_single() {
_assertSource(
- "a",
- AstFactory.libraryIdentifier([AstFactory.identifier3("a")]));
+ "a", AstFactory.libraryIdentifier([AstFactory.identifier3("a")]));
}
void test_visitListLiteral_const() {
@@ -3348,13 +2655,11 @@
}
void test_visitListLiteral_nonEmpty() {
- _assertSource(
- "[a, b, c]",
- AstFactory.listLiteral(
- [
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"),
- AstFactory.identifier3("c")]));
+ _assertSource("[a, b, c]", AstFactory.listLiteral([
+ AstFactory.identifier3("a"),
+ AstFactory.identifier3("b"),
+ AstFactory.identifier3("c")
+ ]));
}
void test_visitMapLiteral_const() {
@@ -3366,204 +2671,111 @@
}
void test_visitMapLiteral_nonEmpty() {
- _assertSource(
- "{'a' : a, 'b' : b, 'c' : c}",
- AstFactory.mapLiteral2(
- [
- AstFactory.mapLiteralEntry("a", AstFactory.identifier3("a")),
- AstFactory.mapLiteralEntry("b", AstFactory.identifier3("b")),
- AstFactory.mapLiteralEntry("c", AstFactory.identifier3("c"))]));
+ _assertSource("{'a' : a, 'b' : b, 'c' : c}", AstFactory.mapLiteral2([
+ AstFactory.mapLiteralEntry("a", AstFactory.identifier3("a")),
+ AstFactory.mapLiteralEntry("b", AstFactory.identifier3("b")),
+ AstFactory.mapLiteralEntry("c", AstFactory.identifier3("c"))
+ ]));
}
void test_visitMapLiteralEntry() {
- _assertSource(
- "'a' : b",
+ _assertSource("'a' : b",
AstFactory.mapLiteralEntry("a", AstFactory.identifier3("b")));
}
void test_visitMethodDeclaration_external() {
- _assertSource(
- "external m();",
- AstFactory.methodDeclaration(
- null,
- null,
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList()));
+ _assertSource("external m();", AstFactory.methodDeclaration(null, null,
+ null, null, AstFactory.identifier3("m"),
+ AstFactory.formalParameterList()));
}
void test_visitMethodDeclaration_external_returnType() {
- _assertSource(
- "external T m();",
- AstFactory.methodDeclaration(
- null,
- AstFactory.typeName4("T"),
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList()));
+ _assertSource("external T m();", AstFactory.methodDeclaration(null,
+ AstFactory.typeName4("T"), null, null, AstFactory.identifier3("m"),
+ AstFactory.formalParameterList()));
}
void test_visitMethodDeclaration_getter() {
- _assertSource(
- "get m {}",
- AstFactory.methodDeclaration2(
- null,
- null,
- Keyword.GET,
- null,
- AstFactory.identifier3("m"),
- null,
- AstFactory.blockFunctionBody2()));
+ _assertSource("get m {}", AstFactory.methodDeclaration2(null, null,
+ Keyword.GET, null, AstFactory.identifier3("m"), null,
+ AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_getter_returnType() {
- _assertSource(
- "T get m {}",
- AstFactory.methodDeclaration2(
- null,
- AstFactory.typeName4("T"),
- Keyword.GET,
- null,
- AstFactory.identifier3("m"),
- null,
- AstFactory.blockFunctionBody2()));
+ _assertSource("T get m {}", AstFactory.methodDeclaration2(null,
+ AstFactory.typeName4("T"), Keyword.GET, null,
+ AstFactory.identifier3("m"), null, AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_getter_seturnType() {
- _assertSource(
- "T set m(var v) {}",
- AstFactory.methodDeclaration2(
- null,
- AstFactory.typeName4("T"),
- Keyword.SET,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(
- [AstFactory.simpleFormalParameter(Keyword.VAR, "v")]),
- AstFactory.blockFunctionBody2()));
+ _assertSource("T set m(var v) {}", AstFactory.methodDeclaration2(null,
+ AstFactory.typeName4("T"), Keyword.SET, null,
+ AstFactory.identifier3("m"), AstFactory.formalParameterList(
+ [AstFactory.simpleFormalParameter(Keyword.VAR, "v")]),
+ AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_minimal() {
- _assertSource(
- "m() {}",
- AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ _assertSource("m() {}", AstFactory.methodDeclaration2(null, null, null,
+ null, AstFactory.identifier3("m"), AstFactory.formalParameterList(),
+ AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_multipleParameters() {
- _assertSource(
- "m(var a, var b) {}",
- AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
- AstFactory.simpleFormalParameter(Keyword.VAR, "b")]),
- AstFactory.blockFunctionBody2()));
+ _assertSource("m(var a, var b) {}", AstFactory.methodDeclaration2(null,
+ null, null, null, AstFactory.identifier3("m"), AstFactory
+ .formalParameterList([
+ AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
+ AstFactory.simpleFormalParameter(Keyword.VAR, "b")
+ ]), AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_operator() {
- _assertSource(
- "operator +() {}",
- AstFactory.methodDeclaration2(
- null,
- null,
- null,
- Keyword.OPERATOR,
- AstFactory.identifier3("+"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ _assertSource("operator +() {}", AstFactory.methodDeclaration2(null, null,
+ null, Keyword.OPERATOR, AstFactory.identifier3("+"),
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_operator_returnType() {
- _assertSource(
- "T operator +() {}",
- AstFactory.methodDeclaration2(
- null,
- AstFactory.typeName4("T"),
- null,
- Keyword.OPERATOR,
- AstFactory.identifier3("+"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ _assertSource("T operator +() {}", AstFactory.methodDeclaration2(null,
+ AstFactory.typeName4("T"), null, Keyword.OPERATOR,
+ AstFactory.identifier3("+"), AstFactory.formalParameterList(),
+ AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_returnType() {
- _assertSource(
- "T m() {}",
- AstFactory.methodDeclaration2(
- null,
- AstFactory.typeName4("T"),
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ _assertSource("T m() {}", AstFactory.methodDeclaration2(null,
+ AstFactory.typeName4("T"), null, null, AstFactory.identifier3("m"),
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_setter() {
- _assertSource(
- "set m(var v) {}",
- AstFactory.methodDeclaration2(
- null,
- null,
- Keyword.SET,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(
+ _assertSource("set m(var v) {}", AstFactory.methodDeclaration2(null, null,
+ Keyword.SET, null, AstFactory.identifier3("m"), AstFactory
+ .formalParameterList(
[AstFactory.simpleFormalParameter(Keyword.VAR, "v")]),
- AstFactory.blockFunctionBody2()));
+ AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_static() {
- _assertSource(
- "static m() {}",
- AstFactory.methodDeclaration2(
- Keyword.STATIC,
- null,
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ _assertSource("static m() {}", AstFactory.methodDeclaration2(Keyword.STATIC,
+ null, null, null, AstFactory.identifier3("m"),
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_static_returnType() {
- _assertSource(
- "static T m() {}",
- AstFactory.methodDeclaration2(
- Keyword.STATIC,
- AstFactory.typeName4("T"),
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ _assertSource("static T m() {}", AstFactory.methodDeclaration2(
+ Keyword.STATIC, AstFactory.typeName4("T"), null, null,
+ AstFactory.identifier3("m"), AstFactory.formalParameterList(),
+ AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_withMetadata() {
- MethodDeclaration declaration = AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2());
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ MethodDeclaration declaration = AstFactory.methodDeclaration2(null, null,
+ null, null, AstFactory.identifier3("m"),
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2());
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated m() {}", declaration);
}
@@ -3573,22 +2785,18 @@
void test_visitMethodInvocation_target() {
_assertSource(
- "t.m()",
- AstFactory.methodInvocation(AstFactory.identifier3("t"), "m"));
+ "t.m()", AstFactory.methodInvocation(AstFactory.identifier3("t"), "m"));
}
void test_visitNamedExpression() {
_assertSource(
- "a: b",
- AstFactory.namedExpression2("a", AstFactory.identifier3("b")));
+ "a: b", AstFactory.namedExpression2("a", AstFactory.identifier3("b")));
}
void test_visitNamedFormalParameter() {
- _assertSource(
- "var a : 0",
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
- AstFactory.integer(0)));
+ _assertSource("var a : 0", AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
+ AstFactory.integer(0)));
}
void test_visitNativeClause() {
@@ -3605,8 +2813,7 @@
void test_visitParenthesizedExpression() {
_assertSource(
- "(a)",
- AstFactory.parenthesizedExpression(AstFactory.identifier3("a")));
+ "(a)", AstFactory.parenthesizedExpression(AstFactory.identifier3("a")));
}
void test_visitPartDirective() {
@@ -3615,37 +2822,33 @@
void test_visitPartDirective_withMetadata() {
PartDirective directive = AstFactory.partDirective2("a.dart");
- directive.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ directive.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated part 'a.dart';", directive);
}
void test_visitPartOfDirective() {
- _assertSource(
- "part of l;",
+ _assertSource("part of l;",
AstFactory.partOfDirective(AstFactory.libraryIdentifier2(["l"])));
}
void test_visitPartOfDirective_withMetadata() {
PartOfDirective directive =
AstFactory.partOfDirective(AstFactory.libraryIdentifier2(["l"]));
- directive.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ directive.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated part of l;", directive);
}
void test_visitPositionalFormalParameter() {
- _assertSource(
- "var a = 0",
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
- AstFactory.integer(0)));
+ _assertSource("var a = 0", AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
+ AstFactory.integer(0)));
}
void test_visitPostfixExpression() {
- _assertSource(
- "a++",
- AstFactory.postfixExpression(AstFactory.identifier3("a"), TokenType.PLUS_PLUS));
+ _assertSource("a++", AstFactory.postfixExpression(
+ AstFactory.identifier3("a"), TokenType.PLUS_PLUS));
}
void test_visitPrefixedIdentifier() {
@@ -3653,21 +2856,18 @@
}
void test_visitPrefixExpression() {
- _assertSource(
- "-a",
- AstFactory.prefixExpression(TokenType.MINUS, AstFactory.identifier3("a")));
+ _assertSource("-a", AstFactory.prefixExpression(
+ TokenType.MINUS, AstFactory.identifier3("a")));
}
void test_visitPropertyAccess() {
_assertSource(
- "a.b",
- AstFactory.propertyAccess2(AstFactory.identifier3("a"), "b"));
+ "a.b", AstFactory.propertyAccess2(AstFactory.identifier3("a"), "b"));
}
void test_visitRedirectingConstructorInvocation_named() {
_assertSource(
- "this.c()",
- AstFactory.redirectingConstructorInvocation2("c"));
+ "this.c()", AstFactory.redirectingConstructorInvocation2("c"));
}
void test_visitRedirectingConstructorInvocation_unnamed() {
@@ -3680,8 +2880,7 @@
void test_visitReturnStatement_expression() {
_assertSource(
- "return a;",
- AstFactory.returnStatement2(AstFactory.identifier3("a")));
+ "return a;", AstFactory.returnStatement2(AstFactory.identifier3("a")));
}
void test_visitReturnStatement_noExpression() {
@@ -3698,17 +2897,12 @@
}
void test_visitSimpleFormalParameter_keyword_type() {
- _assertSource(
- "final A a",
- AstFactory.simpleFormalParameter2(
- Keyword.FINAL,
- AstFactory.typeName4("A"),
- "a"));
+ _assertSource("final A a", AstFactory.simpleFormalParameter2(
+ Keyword.FINAL, AstFactory.typeName4("A"), "a"));
}
void test_visitSimpleFormalParameter_type() {
- _assertSource(
- "A a",
+ _assertSource("A a",
AstFactory.simpleFormalParameter4(AstFactory.typeName4("A"), "a"));
}
@@ -3721,13 +2915,11 @@
}
void test_visitStringInterpolation() {
- _assertSource(
- "'a\${e}b'",
- AstFactory.string(
- [
- AstFactory.interpolationString("'a", "a"),
- AstFactory.interpolationExpression(AstFactory.identifier3("e")),
- AstFactory.interpolationString("b'", "b")]));
+ _assertSource("'a\${e}b'", AstFactory.string([
+ AstFactory.interpolationString("'a", "a"),
+ AstFactory.interpolationExpression(AstFactory.identifier3("e")),
+ AstFactory.interpolationString("b'", "b")
+ ]));
}
void test_visitSuperConstructorInvocation() {
@@ -3743,71 +2935,56 @@
}
void test_visitSwitchCase_multipleLabels() {
- _assertSource(
- "l1: l2: case a: {}",
- AstFactory.switchCase2(
- [AstFactory.label2("l1"), AstFactory.label2("l2")],
- AstFactory.identifier3("a"),
- [AstFactory.block()]));
+ _assertSource("l1: l2: case a: {}", AstFactory.switchCase2([
+ AstFactory.label2("l1"),
+ AstFactory.label2("l2")
+ ], AstFactory.identifier3("a"), [AstFactory.block()]));
}
void test_visitSwitchCase_multipleStatements() {
- _assertSource(
- "case a: {} {}",
- AstFactory.switchCase(
- AstFactory.identifier3("a"),
- [AstFactory.block(), AstFactory.block()]));
+ _assertSource("case a: {} {}", AstFactory.switchCase(
+ AstFactory.identifier3("a"), [AstFactory.block(), AstFactory.block()]));
}
void test_visitSwitchCase_noLabels() {
- _assertSource(
- "case a: {}",
- AstFactory.switchCase(AstFactory.identifier3("a"), [AstFactory.block()]));
+ _assertSource("case a: {}", AstFactory.switchCase(
+ AstFactory.identifier3("a"), [AstFactory.block()]));
}
void test_visitSwitchCase_singleLabel() {
- _assertSource(
- "l1: case a: {}",
- AstFactory.switchCase2(
- [AstFactory.label2("l1")],
- AstFactory.identifier3("a"),
- [AstFactory.block()]));
+ _assertSource("l1: case a: {}", AstFactory.switchCase2([
+ AstFactory.label2("l1")
+ ], AstFactory.identifier3("a"), [AstFactory.block()]));
}
void test_visitSwitchDefault_multipleLabels() {
- _assertSource(
- "l1: l2: default: {}",
- AstFactory.switchDefault(
- [AstFactory.label2("l1"), AstFactory.label2("l2")],
- [AstFactory.block()]));
+ _assertSource("l1: l2: default: {}", AstFactory.switchDefault([
+ AstFactory.label2("l1"),
+ AstFactory.label2("l2")
+ ], [AstFactory.block()]));
}
void test_visitSwitchDefault_multipleStatements() {
- _assertSource(
- "default: {} {}",
+ _assertSource("default: {} {}",
AstFactory.switchDefault2([AstFactory.block(), AstFactory.block()]));
}
void test_visitSwitchDefault_noLabels() {
_assertSource(
- "default: {}",
- AstFactory.switchDefault2([AstFactory.block()]));
+ "default: {}", AstFactory.switchDefault2([AstFactory.block()]));
}
void test_visitSwitchDefault_singleLabel() {
- _assertSource(
- "l1: default: {}",
- AstFactory.switchDefault([AstFactory.label2("l1")], [AstFactory.block()]));
+ _assertSource("l1: default: {}", AstFactory.switchDefault(
+ [AstFactory.label2("l1")], [AstFactory.block()]));
}
void test_visitSwitchStatement() {
- _assertSource(
- "switch (a) {case 'b': {} default: {}}",
- AstFactory.switchStatement(
- AstFactory.identifier3("a"),
- [
- AstFactory.switchCase(AstFactory.string2("b"), [AstFactory.block()]),
- AstFactory.switchDefault2([AstFactory.block()])]));
+ _assertSource("switch (a) {case 'b': {} default: {}}", AstFactory
+ .switchStatement(AstFactory.identifier3("a"), [
+ AstFactory.switchCase(AstFactory.string2("b"), [AstFactory.block()]),
+ AstFactory.switchDefault2([AstFactory.block()])
+ ]));
}
void test_visitSymbolLiteral_multiple() {
@@ -3824,86 +3001,65 @@
void test_visitThrowStatement() {
_assertSource(
- "throw e",
- AstFactory.throwExpression2(AstFactory.identifier3("e")));
+ "throw e", AstFactory.throwExpression2(AstFactory.identifier3("e")));
}
void test_visitTopLevelVariableDeclaration_multiple() {
- _assertSource(
- "var a;",
- AstFactory.topLevelVariableDeclaration2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")]));
+ _assertSource("var a;", AstFactory.topLevelVariableDeclaration2(
+ Keyword.VAR, [AstFactory.variableDeclaration("a")]));
}
void test_visitTopLevelVariableDeclaration_single() {
- _assertSource(
- "var a, b;",
- AstFactory.topLevelVariableDeclaration2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a"), AstFactory.variableDeclaration("b")]));
+ _assertSource("var a, b;", AstFactory.topLevelVariableDeclaration2(
+ Keyword.VAR, [
+ AstFactory.variableDeclaration("a"),
+ AstFactory.variableDeclaration("b")
+ ]));
}
void test_visitTryStatement_catch() {
- _assertSource(
- "try {} on E {}",
- AstFactory.tryStatement2(
- AstFactory.block(),
- [AstFactory.catchClause3(AstFactory.typeName4("E"))]));
+ _assertSource("try {} on E {}", AstFactory.tryStatement2(AstFactory.block(),
+ [AstFactory.catchClause3(AstFactory.typeName4("E"))]));
}
void test_visitTryStatement_catches() {
- _assertSource(
- "try {} on E {} on F {}",
- AstFactory.tryStatement2(
- AstFactory.block(),
- [
- AstFactory.catchClause3(AstFactory.typeName4("E")),
- AstFactory.catchClause3(AstFactory.typeName4("F"))]));
+ _assertSource("try {} on E {} on F {}", AstFactory.tryStatement2(
+ AstFactory.block(), [
+ AstFactory.catchClause3(AstFactory.typeName4("E")),
+ AstFactory.catchClause3(AstFactory.typeName4("F"))
+ ]));
}
void test_visitTryStatement_catchFinally() {
- _assertSource(
- "try {} on E {} finally {}",
- AstFactory.tryStatement3(
- AstFactory.block(),
- [AstFactory.catchClause3(AstFactory.typeName4("E"))],
- AstFactory.block()));
+ _assertSource("try {} on E {} finally {}", AstFactory.tryStatement3(
+ AstFactory.block(), [
+ AstFactory.catchClause3(AstFactory.typeName4("E"))
+ ], AstFactory.block()));
}
void test_visitTryStatement_finally() {
- _assertSource(
- "try {} finally {}",
+ _assertSource("try {} finally {}",
AstFactory.tryStatement(AstFactory.block(), AstFactory.block()));
}
void test_visitTypeArgumentList_multiple() {
- _assertSource(
- "<E, F>",
- AstFactory.typeArgumentList(
- [AstFactory.typeName4("E"), AstFactory.typeName4("F")]));
+ _assertSource("<E, F>", AstFactory.typeArgumentList(
+ [AstFactory.typeName4("E"), AstFactory.typeName4("F")]));
}
void test_visitTypeArgumentList_single() {
_assertSource(
- "<E>",
- AstFactory.typeArgumentList([AstFactory.typeName4("E")]));
+ "<E>", AstFactory.typeArgumentList([AstFactory.typeName4("E")]));
}
void test_visitTypeName_multipleArgs() {
- _assertSource(
- "C<D, E>",
- AstFactory.typeName4(
- "C",
- [AstFactory.typeName4("D"), AstFactory.typeName4("E")]));
+ _assertSource("C<D, E>", AstFactory.typeName4(
+ "C", [AstFactory.typeName4("D"), AstFactory.typeName4("E")]));
}
void test_visitTypeName_nestedArg() {
- _assertSource(
- "C<D<E>>",
- AstFactory.typeName4(
- "C",
- [AstFactory.typeName4("D", [AstFactory.typeName4("E")])]));
+ _assertSource("C<D<E>>", AstFactory.typeName4(
+ "C", [AstFactory.typeName4("D", [AstFactory.typeName4("E")])]));
}
void test_visitTypeName_noArgs() {
@@ -3912,20 +3068,18 @@
void test_visitTypeName_singleArg() {
_assertSource(
- "C<D>",
- AstFactory.typeName4("C", [AstFactory.typeName4("D")]));
+ "C<D>", AstFactory.typeName4("C", [AstFactory.typeName4("D")]));
}
void test_visitTypeParameter_withExtends() {
- _assertSource(
- "E extends C",
+ _assertSource("E extends C",
AstFactory.typeParameter2("E", AstFactory.typeName4("C")));
}
void test_visitTypeParameter_withMetadata() {
TypeParameter parameter = AstFactory.typeParameter("E");
- parameter.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ parameter.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated E", parameter);
}
@@ -3942,8 +3096,7 @@
}
void test_visitVariableDeclaration_initialized() {
- _assertSource(
- "a = b",
+ _assertSource("a = b",
AstFactory.variableDeclaration2("a", AstFactory.identifier3("b")));
}
@@ -3953,78 +3106,69 @@
void test_visitVariableDeclaration_withMetadata() {
VariableDeclaration declaration = AstFactory.variableDeclaration("a");
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated a", declaration);
}
void test_visitVariableDeclarationList_const_type() {
- _assertSource(
- "const C a, b",
- AstFactory.variableDeclarationList(
- Keyword.CONST,
- AstFactory.typeName4("C"),
- [AstFactory.variableDeclaration("a"), AstFactory.variableDeclaration("b")]));
+ _assertSource("const C a, b", AstFactory.variableDeclarationList(
+ Keyword.CONST, AstFactory.typeName4("C"), [
+ AstFactory.variableDeclaration("a"),
+ AstFactory.variableDeclaration("b")
+ ]));
}
void test_visitVariableDeclarationList_final_noType() {
- _assertSource(
- "final a, b",
- AstFactory.variableDeclarationList2(
- Keyword.FINAL,
- [AstFactory.variableDeclaration("a"), AstFactory.variableDeclaration("b")]));
+ _assertSource("final a, b", AstFactory.variableDeclarationList2(
+ Keyword.FINAL, [
+ AstFactory.variableDeclaration("a"),
+ AstFactory.variableDeclaration("b")
+ ]));
}
void test_visitVariableDeclarationList_final_withMetadata() {
- VariableDeclarationList declarationList =
- AstFactory.variableDeclarationList2(
- Keyword.FINAL,
- [AstFactory.variableDeclaration("a"), AstFactory.variableDeclaration("b")]);
- declarationList.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ VariableDeclarationList declarationList = AstFactory
+ .variableDeclarationList2(Keyword.FINAL, [
+ AstFactory.variableDeclaration("a"),
+ AstFactory.variableDeclaration("b")
+ ]);
+ declarationList.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertSource("@deprecated final a, b", declarationList);
}
void test_visitVariableDeclarationList_type() {
- _assertSource(
- "C a, b",
- AstFactory.variableDeclarationList(
- null,
- AstFactory.typeName4("C"),
- [AstFactory.variableDeclaration("a"), AstFactory.variableDeclaration("b")]));
+ _assertSource("C a, b", AstFactory.variableDeclarationList(null,
+ AstFactory.typeName4("C"), [
+ AstFactory.variableDeclaration("a"),
+ AstFactory.variableDeclaration("b")
+ ]));
}
void test_visitVariableDeclarationList_var() {
- _assertSource(
- "var a, b",
- AstFactory.variableDeclarationList2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a"), AstFactory.variableDeclaration("b")]));
+ _assertSource("var a, b", AstFactory.variableDeclarationList2(Keyword.VAR, [
+ AstFactory.variableDeclaration("a"),
+ AstFactory.variableDeclaration("b")
+ ]));
}
void test_visitVariableDeclarationStatement() {
- _assertSource(
- "C c;",
- AstFactory.variableDeclarationStatement(
- null,
- AstFactory.typeName4("C"),
- [AstFactory.variableDeclaration("c")]));
+ _assertSource("C c;", AstFactory.variableDeclarationStatement(null,
+ AstFactory.typeName4("C"), [AstFactory.variableDeclaration("c")]));
}
void test_visitWhileStatement() {
- _assertSource(
- "while (c) {}",
- AstFactory.whileStatement(AstFactory.identifier3("c"), AstFactory.block()));
+ _assertSource("while (c) {}", AstFactory.whileStatement(
+ AstFactory.identifier3("c"), AstFactory.block()));
}
void test_visitWithClause_multiple() {
- _assertSource(
- "with A, B, C",
- AstFactory.withClause(
- [
- AstFactory.typeName4("A"),
- AstFactory.typeName4("B"),
- AstFactory.typeName4("C")]));
+ _assertSource("with A, B, C", AstFactory.withClause([
+ AstFactory.typeName4("A"),
+ AstFactory.typeName4("B"),
+ AstFactory.typeName4("C")
+ ]));
}
void test_visitWithClause_single() {
@@ -4033,13 +3177,11 @@
void test_visitYieldStatement() {
_assertSource(
- "yield e;",
- AstFactory.yieldStatement(AstFactory.identifier3("e")));
+ "yield e;", AstFactory.yieldStatement(AstFactory.identifier3("e")));
}
void test_visitYieldStatement_each() {
- _assertSource(
- "yield* e;",
+ _assertSource("yield* e;",
AstFactory.yieldEachStatement(AstFactory.identifier3("e")));
}
@@ -4095,11 +3237,12 @@
static const WrapperKind NONE = const WrapperKind('NONE', 4);
static const List<WrapperKind> values = const [
- PREFIXED_LEFT,
- PREFIXED_RIGHT,
- PROPERTY_LEFT,
- PROPERTY_RIGHT,
- NONE];
+ PREFIXED_LEFT,
+ PREFIXED_RIGHT,
+ PROPERTY_LEFT,
+ PROPERTY_RIGHT,
+ NONE
+ ];
const WrapperKind(String name, int ordinal) : super(name, ordinal);
}
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
index 095c419..0ee4698 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -12,7 +12,6 @@
import '../reflective_tests.dart';
import 'resolver_test.dart';
-
main() {
_ut.groupSep = ' | ';
runReflectiveTests(CompileTimeErrorCodeTest);
@@ -51,8 +50,7 @@
''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.COMPILE_TIME_CONSTANT_RAISES_EXCEPTION]);
+ source, [CompileTimeErrorCode.COMPILE_TIME_CONSTANT_RAISES_EXCEPTION]);
verify([source]);
}
@@ -64,8 +62,7 @@
f() { return const C(); }''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION]);
+ source, [CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION]);
verify([source]);
}
@@ -134,8 +131,7 @@
''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.OBJECT_CANNOT_EXTEND_ANOTHER_CLASS]);
+ source, [CompileTimeErrorCode.OBJECT_CANNOT_EXTEND_ANOTHER_CLASS]);
verify([source]);
}
@@ -147,8 +143,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT]);
+ source, [CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT]);
verify([source]);
}
@@ -158,8 +153,7 @@
const y = x + 1;''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT]);
+ source, [CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT]);
verify([source]);
}
@@ -304,11 +298,10 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [
- ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER,
- CompileTimeErrorCode.LABEL_UNDEFINED]);
+ assertErrors(source, [
+ ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER,
+ CompileTimeErrorCode.LABEL_UNDEFINED
+ ]);
// Note: we don't call verify([source]) because the reference to the
// "async" label is unresolved.
}
@@ -378,11 +371,10 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [
- ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER,
- CompileTimeErrorCode.LABEL_UNDEFINED]);
+ assertErrors(source, [
+ ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER,
+ CompileTimeErrorCode.LABEL_UNDEFINED
+ ]);
// Note: we don't call verify([source]) because the reference to the
// "async" label is unresolved.
}
@@ -591,8 +583,7 @@
class as = A with B;''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME]);
+ source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME]);
verify([source]);
}
@@ -630,8 +621,7 @@
Source source = addSource("typedef bool as();");
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME]);
+ source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME]);
verify([source]);
}
@@ -639,17 +629,16 @@
Source source = addSource("class as {}");
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME]);
+ source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME]);
verify([source]);
}
void test_builtInIdentifierAsTypeParameterName() {
Source source = addSource("class A<as> {}");
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME]);
+ assertErrors(source, [
+ CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME
+ ]);
verify([source]);
}
@@ -672,8 +661,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
+ source, [CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
verify([source]);
}
@@ -685,8 +673,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD]);
+ source, [CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD]);
verify([source]);
}
@@ -698,8 +685,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD]);
+ source, [CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD]);
verify([source]);
}
@@ -761,8 +747,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS]);
+ source, [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS]);
verify([source]);
}
@@ -773,8 +758,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
+ source, [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
verify([source]);
}
@@ -785,8 +769,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
+ source, [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
verify([source]);
}
@@ -797,8 +780,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
+ source, [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
verify([source]);
}
@@ -809,8 +791,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
+ source, [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
verify([source]);
}
@@ -821,8 +802,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
+ source, [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER]);
verify([source]);
}
@@ -861,9 +841,9 @@
return 3;
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST
+ ]);
verify([source]);
}
@@ -903,8 +883,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER]);
+ source, [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER]);
verify([source]);
}
@@ -918,8 +897,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER]);
+ source, [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER]);
verify([source]);
}
@@ -932,11 +910,10 @@
const B();
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN,
- CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN,
+ CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD
+ ]);
verify([source]);
}
@@ -949,11 +926,10 @@
const B();
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD,
- CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD,
+ CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER
+ ]);
verify([source]);
}
@@ -965,35 +941,40 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD]);
+ source, [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD]);
verify([source]);
}
void test_constDeferredClass() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
class A {
const A();
-}''', r'''
+}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
main() {
const a.A();
-}'''], <ErrorCode>[CompileTimeErrorCode.CONST_DEFERRED_CLASS]);
+}'''
+ ], <ErrorCode>[CompileTimeErrorCode.CONST_DEFERRED_CLASS]);
}
void test_constDeferredClass_namedConstructor() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
class A {
const A.b();
-}''', r'''
+}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
main() {
const a.A.b();
-}'''], <ErrorCode>[CompileTimeErrorCode.CONST_DEFERRED_CLASS]);
+}'''
+ ], <ErrorCode>[CompileTimeErrorCode.CONST_DEFERRED_CLASS]);
}
void test_constEval_newInstance_constConstructor() {
@@ -1003,9 +984,9 @@
}
const a = new A();''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+ ]);
verify([source]);
}
@@ -1031,9 +1012,9 @@
final a = const A();
const C = a.m;''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+ ]);
verify([source]);
}
@@ -1083,12 +1064,11 @@
void test_constEvalTypeBool_binary_leftTrue() {
Source source = addSource("const C = (true || 0);");
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
- StaticTypeWarningCode.NON_BOOL_OPERAND,
- HintCode.DEAD_CODE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
+ StaticTypeWarningCode.NON_BOOL_OPERAND,
+ HintCode.DEAD_CODE
+ ]);
verify([source]);
}
@@ -1103,8 +1083,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_NUM_STRING]);
+ source, [CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_NUM_STRING]);
verify([source]);
}
@@ -1119,8 +1098,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_NUM_STRING]);
+ source, [CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_NUM_STRING]);
verify([source]);
}
@@ -1169,50 +1147,56 @@
const C = p;
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+ ]);
verify([source]);
}
void test_constInitializedWithNonConstValue_missingConstInListLiteral() {
Source source = addSource("const List L = [0];");
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+ ]);
verify([source]);
}
void test_constInitializedWithNonConstValue_missingConstInMapLiteral() {
Source source = addSource("const Map M = {'a' : 0};");
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+ ]);
verify([source]);
}
void test_constInitializedWithNonConstValueFromDeferredClass() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const V = 1;''', r'''
+const V = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-const B = a.V;'''],
- <ErrorCode>[
- CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY]);
+const B = a.V;'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_constInitializedWithNonConstValueFromDeferredClass_nested() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const V = 1;''', r'''
+const V = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-const B = a.V + 1;'''],
- <ErrorCode>[
- CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY]);
+const B = a.V + 1;'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_constInstanceField() {
@@ -1235,9 +1219,9 @@
const {const A() : 0};
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS
+ ]);
verify([source]);
}
@@ -1257,9 +1241,9 @@
const {B.a : 0};
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS
+ ]);
verify([source]);
}
@@ -1277,9 +1261,9 @@
var m = const { const A(): 42 };
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS
+ ]);
verify([source]);
}
@@ -1296,9 +1280,9 @@
const {const B() : 0};
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS
+ ]);
verify([source]);
}
@@ -1310,8 +1294,7 @@
f() { return const A<A>(); }''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS]);
+ source, [CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS]);
verify([source]);
}
@@ -1326,8 +1309,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS]);
+ source, [CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS]);
verify([source]);
}
@@ -1342,8 +1324,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS]);
+ source, [CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS]);
verify([source]);
}
@@ -1369,8 +1350,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT]);
+ source, [CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT]);
verify([source]);
}
@@ -1382,8 +1362,7 @@
f(p) { return const A(p); }''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT]);
+ source, [CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT]);
verify([source]);
}
@@ -1418,11 +1397,10 @@
const A();
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS,
- StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS,
+ StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ ]);
verify([source]);
}
@@ -1433,11 +1411,10 @@
const A();
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS,
- StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS,
+ StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ ]);
verify([source]);
}
@@ -1451,8 +1428,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR]);
// no verify(), 'noSuchConstructor' is not resolved
}
@@ -1465,9 +1441,9 @@
return const A();
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
+ ]);
verify([source]);
}
@@ -1475,26 +1451,25 @@
Source source = addSource("typedef F([x = 0]);");
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE_ALIAS]);
+ source, [CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE_ALIAS]);
verify([source]);
}
void test_defaultValueInFunctionTypedParameter_named() {
Source source = addSource("f(g({p: null})) {}");
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER]);
+ assertErrors(source, [
+ CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER
+ ]);
verify([source]);
}
void test_defaultValueInFunctionTypedParameter_optional() {
Source source = addSource("f(g([p = null])) {}");
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER]);
+ assertErrors(source, [
+ CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER
+ ]);
verify([source]);
}
@@ -1508,9 +1483,9 @@
B([int x = 1]) {}
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR]);
+ assertErrors(source, [
+ CompileTimeErrorCode.DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR
+ ]);
verify([source]);
}
@@ -1521,11 +1496,10 @@
A.a() {}
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME,
- CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME]);
+ assertErrors(source, [
+ CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME,
+ CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME
+ ]);
verify([source]);
}
@@ -1536,11 +1510,10 @@
A() {}
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT,
- CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT,
+ CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT
+ ]);
verify([source]);
}
@@ -1630,13 +1603,11 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
+ source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
verify([source]);
}
- void
- test_duplicateDefinitionInheritance_instanceGetterAbstract_staticGetter() {
+ void test_duplicateDefinitionInheritance_instanceGetterAbstract_staticGetter() {
Source source = addSource(r'''
abstract class A {
int get x;
@@ -1646,8 +1617,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
+ source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
verify([source]);
}
@@ -1661,13 +1631,11 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
+ source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
verify([source]);
}
- void
- test_duplicateDefinitionInheritance_instanceMethodAbstract_staticMethod() {
+ void test_duplicateDefinitionInheritance_instanceMethodAbstract_staticMethod() {
Source source = addSource(r'''
abstract class A {
x();
@@ -1677,8 +1645,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
+ source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
verify([source]);
}
@@ -1692,13 +1659,11 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
+ source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
verify([source]);
}
- void
- test_duplicateDefinitionInheritance_instanceSetterAbstract_staticSetter() {
+ void test_duplicateDefinitionInheritance_instanceSetterAbstract_staticSetter() {
Source source = addSource(r'''
abstract class A {
set x(value);
@@ -1708,8 +1673,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
+ source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
verify([source]);
}
@@ -1742,89 +1706,87 @@
}
void test_extendsDeferredClass() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-class B extends a.A {}'''],
- <ErrorCode>[CompileTimeErrorCode.EXTENDS_DEFERRED_CLASS]);
+class B extends a.A {}'''
+ ], <ErrorCode>[CompileTimeErrorCode.EXTENDS_DEFERRED_CLASS]);
}
void test_extendsDeferredClass_classTypeAlias() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
class M {}
-class C = a.A with M;'''],
- <ErrorCode>[CompileTimeErrorCode.EXTENDS_DEFERRED_CLASS]);
+class C = a.A with M;'''
+ ], <ErrorCode>[CompileTimeErrorCode.EXTENDS_DEFERRED_CLASS]);
}
void test_extendsDisallowedClass_class_bool() {
Source source = addSource("class A extends bool {}");
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
- CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+ CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+ ]);
verify([source]);
}
void test_extendsDisallowedClass_class_double() {
Source source = addSource("class A extends double {}");
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
- CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+ CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+ ]);
verify([source]);
}
void test_extendsDisallowedClass_class_int() {
Source source = addSource("class A extends int {}");
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
- CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+ CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+ ]);
verify([source]);
}
void test_extendsDisallowedClass_class_Null() {
Source source = addSource("class A extends Null {}");
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
- CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+ CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+ ]);
verify([source]);
}
void test_extendsDisallowedClass_class_num() {
Source source = addSource("class A extends num {}");
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
- CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+ CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+ ]);
verify([source]);
}
void test_extendsDisallowedClass_class_String() {
Source source = addSource("class A extends String {}");
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
- CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+ CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+ ]);
verify([source]);
}
@@ -1833,11 +1795,10 @@
class M {}
class C = bool with M;''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
- CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+ CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS
+ ]);
verify([source]);
}
@@ -1855,11 +1816,10 @@
class M {}
class C = int with M;''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
- CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+ CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS
+ ]);
verify([source]);
}
@@ -1886,11 +1846,10 @@
class M {}
class C = String with M;''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
- CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+ CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS
+ ]);
verify([source]);
}
@@ -1952,9 +1911,9 @@
A() : x = 0, x = 1 {}
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS
+ ]);
verify([source]);
}
@@ -1965,11 +1924,10 @@
A() : x = 0, x = 1, x = 2 {}
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS,
- CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS,
+ CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS
+ ]);
verify([source]);
}
@@ -1981,11 +1939,10 @@
A() : x = 0, x = 1, y = 0, y = 1 {}
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS,
- CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS,
+ CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS
+ ]);
verify([source]);
}
@@ -1996,9 +1953,9 @@
A(this.x) : x = 1 {}
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER]);
+ assertErrors(source, [
+ CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER
+ ]);
verify([source]);
}
@@ -2010,8 +1967,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR]);
verify([source]);
}
@@ -2023,11 +1979,10 @@
m(this.x) {}
}''');
resolve(source);
- assertErrors(
- source,
- [
- ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR,
- CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR]);
+ assertErrors(source, [
+ ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR,
+ CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR
+ ]);
verify([source]);
}
@@ -2039,8 +1994,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR]);
verify([source]);
}
@@ -2052,9 +2006,9 @@
A() : this.named(), x = 42;
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR]);
+ assertErrors(source, [
+ CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR
+ ]);
verify([source]);
}
@@ -2066,9 +2020,9 @@
A() : x = 42, this.named();
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR]);
+ assertErrors(source, [
+ CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR
+ ]);
verify([source]);
}
@@ -2080,9 +2034,9 @@
A(this.x) : this.named();
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR]);
+ assertErrors(source, [
+ CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR
+ ]);
verify([source]);
}
@@ -2093,9 +2047,9 @@
A() : x = 0, x = 0 {}
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS
+ ]);
verify([source]);
}
@@ -2114,9 +2068,9 @@
A(this.x) : x = 0 {}
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER]);
+ assertErrors(source, [
+ CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER
+ ]);
verify([source]);
}
@@ -2128,8 +2082,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES]);
+ source, [CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES]);
verify([source]);
}
@@ -2165,13 +2118,12 @@
var b1 = const bool.fromEnvironment(1);
var b2 = const bool.fromEnvironment('x', defaultValue: 1);''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
- CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
verify([source]);
}
@@ -2182,11 +2134,10 @@
Source source =
addSource("var b = const bool.fromEnvironment('x', defaultValue: 1);");
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
verify([source]);
}
@@ -2198,31 +2149,34 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME]);
+ source, [CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME]);
verify([source]);
}
void test_implementsDeferredClass() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-class B implements a.A {}'''],
- <ErrorCode>[CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS]);
+class B implements a.A {}'''
+ ], <ErrorCode>[CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS]);
}
void test_implementsDeferredClass_classTypeAlias() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
class B {}
class M {}
-class C = B with M implements a.A;'''],
- <ErrorCode>[CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS]);
+class C = B with M implements a.A;'''
+ ], <ErrorCode>[CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS]);
}
void test_implementsDisallowedClass_class_bool() {
@@ -2270,11 +2224,10 @@
void test_implementsDisallowedClass_class_String_num() {
Source source = addSource("class A implements String, num {}");
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
- CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
+ CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+ ]);
verify([source]);
}
@@ -2344,11 +2297,10 @@
class M {}
class C = A with M implements String, num;''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
- CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
+ CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+ ]);
verify([source]);
}
@@ -2402,12 +2354,11 @@
class A {} class C{}
class B implements A, A, A, A {}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.IMPLEMENTS_REPEATED,
- CompileTimeErrorCode.IMPLEMENTS_REPEATED,
- CompileTimeErrorCode.IMPLEMENTS_REPEATED]);
+ assertErrors(source, [
+ CompileTimeErrorCode.IMPLEMENTS_REPEATED,
+ CompileTimeErrorCode.IMPLEMENTS_REPEATED,
+ CompileTimeErrorCode.IMPLEMENTS_REPEATED
+ ]);
verify([source]);
}
@@ -2436,8 +2387,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
verify([source]);
}
@@ -2449,8 +2399,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
verify([source]);
}
@@ -2463,8 +2412,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
verify([source]);
}
@@ -2476,13 +2424,11 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
verify([source]);
}
- void
- test_implicitThisReferenceInInitializer_redirectingConstructorInvocation() {
+ void test_implicitThisReferenceInInitializer_redirectingConstructorInvocation() {
Source source = addSource(r'''
class A {
A(p) {}
@@ -2491,8 +2437,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
verify([source]);
}
@@ -2507,8 +2452,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
verify([source]);
}
@@ -2520,9 +2464,10 @@
// directive for the error, this is such a minor corner case that we don't
// think we should add the additional computation time to figure out such
// cases.
- assertErrors(
- source,
- [CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY, HintCode.UNUSED_IMPORT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY,
+ HintCode.UNUSED_IMPORT
+ ]);
verify([source]);
}
@@ -2534,9 +2479,10 @@
// directive for the error, this is such a minor corner case that we don't
// think we should add the additional computation time to figure out such
// cases.
- assertErrors(
- source,
- [CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY, HintCode.UNUSED_IMPORT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY,
+ HintCode.UNUSED_IMPORT
+ ]);
verify([source]);
}
@@ -2565,8 +2511,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES]);
+ source, [CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES]);
verify([source]);
}
@@ -2591,11 +2536,10 @@
}
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES,
- CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES]);
+ assertErrors(source, [
+ CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES,
+ CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES
+ ]);
verify([source]);
}
@@ -2612,11 +2556,10 @@
}
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES,
- CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES]);
+ assertErrors(source, [
+ CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES,
+ CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES
+ ]);
verify([source]);
}
@@ -2630,8 +2573,7 @@
A a = const A();''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD]);
+ source, [CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD]);
}
void test_initializerForNonExistent_initializer() {
@@ -2641,8 +2583,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD]);
+ source, [CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD]);
}
void test_initializerForStaticField() {
@@ -2662,9 +2603,9 @@
A(this.x) {}
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
+ assertErrors(source, [
+ CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD
+ ]);
verify([source]);
}
@@ -2677,9 +2618,9 @@
B(this.x) {}
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
+ assertErrors(source, [
+ CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD
+ ]);
verify([source]);
}
@@ -2689,9 +2630,9 @@
A([this.x]) {}
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
+ assertErrors(source, [
+ CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD
+ ]);
verify([source]);
}
@@ -2702,9 +2643,9 @@
A(this.x) {}
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
+ assertErrors(source, [
+ CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD
+ ]);
verify([source]);
}
@@ -2716,8 +2657,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD]);
+ source, [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD]);
verify([source]);
}
@@ -2733,8 +2673,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY]);
+ source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY]);
verify([source]);
}
@@ -2750,8 +2689,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY]);
+ source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY]);
verify([source]);
}
@@ -2765,8 +2703,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
+ source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
verify([source]);
}
@@ -2780,8 +2717,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
+ source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
verify([source]);
}
@@ -2795,8 +2731,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
+ source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
verify([source]);
}
@@ -2861,8 +2796,7 @@
verify([source]);
}
- void
- test_invalidAnnotation_importWithPrefix_notVariableOrConstructorInvocation() {
+ void test_invalidAnnotation_importWithPrefix_notVariableOrConstructorInvocation() {
addNamedSource("/lib.dart", r'''
library lib;
typedef V();''');
@@ -2951,36 +2885,48 @@
void test_invalidAnnotationFromDeferredLibrary() {
// See test_invalidAnnotation_notConstantVariable
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
class V { const V(); }
-const v = const V();''', r'''
+const v = const V();''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-@a.v main () {}'''],
- <ErrorCode>[CompileTimeErrorCode.INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY]);
+@a.v main () {}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_invalidAnnotationFromDeferredLibrary_constructor() {
// See test_invalidAnnotation_notConstantVariable
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class C { const C(); }''', r'''
+class C { const C(); }''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-@a.C() main () {}'''],
- <ErrorCode>[CompileTimeErrorCode.INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY]);
+@a.C() main () {}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_invalidAnnotationFromDeferredLibrary_namedConstructor() {
// See test_invalidAnnotation_notConstantVariable
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class C { const C.name(); }''', r'''
+class C { const C.name(); }''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-@a.C.name() main () {}'''],
- <ErrorCode>[CompileTimeErrorCode.INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY]);
+@a.C.name() main () {}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_invalidConstructorName_notEnclosingClassName_defined() {
@@ -3012,8 +2958,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS]);
+ source, [CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS]);
verify([source]);
}
@@ -3024,8 +2969,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS]);
+ source, [CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS]);
// no verify() call, "B" is not resolved
}
@@ -3036,8 +2980,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
verify([source]);
}
@@ -3048,8 +2991,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
verify([source]);
}
@@ -3060,8 +3002,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
verify([source]);
}
@@ -3203,8 +3144,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST]);
+ source, [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST]);
verify([source]);
}
@@ -3217,8 +3157,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP]);
+ source, [CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP]);
verify([source]);
}
@@ -3253,8 +3192,7 @@
''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -3276,8 +3214,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
verify([source]);
}
@@ -3363,8 +3300,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME]);
+ source, [CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME]);
verify([source]);
}
@@ -3379,11 +3315,10 @@
return false;
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
- CompileTimeErrorCode.MISSING_ENUM_CONSTANT_IN_SWITCH]);
+ assertErrors(source, [
+ CompileTimeErrorCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
+ CompileTimeErrorCode.MISSING_ENUM_CONSTANT_IN_SWITCH
+ ]);
verify([source]);
}
@@ -3410,24 +3345,28 @@
}
void test_mixinDeferredClass() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-class B extends Object with a.A {}'''],
- <ErrorCode>[CompileTimeErrorCode.MIXIN_DEFERRED_CLASS]);
+class B extends Object with a.A {}'''
+ ], <ErrorCode>[CompileTimeErrorCode.MIXIN_DEFERRED_CLASS]);
}
void test_mixinDeferredClass_classTypeAlias() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
class B {}
-class C = B with a.A;'''],
- <ErrorCode>[CompileTimeErrorCode.MIXIN_DEFERRED_CLASS]);
+class C = B with a.A;'''
+ ], <ErrorCode>[CompileTimeErrorCode.MIXIN_DEFERRED_CLASS]);
}
void test_mixinHasNoConstructors_mixinApp() {
@@ -3658,11 +3597,10 @@
class A {}
class C = A with String, num;''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
- CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
+ CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
+ ]);
verify([source]);
}
@@ -3712,8 +3650,7 @@
class C extends A with B {}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS]);
+ source, [CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS]);
verify([source]);
}
@@ -3724,8 +3661,7 @@
class C = A with B;''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS]);
+ source, [CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS]);
verify([source]);
}
@@ -3737,9 +3673,9 @@
A.b() {}
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS
+ ]);
verify([source]);
}
@@ -3771,8 +3707,7 @@
Source source = addSource("int m(a) native 'string';");
resolve(source);
assertErrors(
- source,
- [ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE]);
+ source, [ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE]);
verify([source]);
}
@@ -3786,8 +3721,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE]);
+ source, [ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE]);
verify([source]);
}
@@ -3801,8 +3735,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS]);
+ source, [CompileTimeErrorCode.NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS]);
verify([source]);
}
@@ -3816,8 +3749,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
+ source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
verify([source]);
}
@@ -3834,9 +3766,9 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT
+ ]);
verify([source]);
}
@@ -3853,9 +3785,9 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT
+ ]);
verify([source]);
}
@@ -3873,8 +3805,7 @@
''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
// Don't verify since call to super.named() can't be resolved.
}
@@ -3891,9 +3822,9 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT
+ ]);
verify([source]);
}
@@ -3909,9 +3840,9 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT
+ ]);
verify([source]);
}
@@ -3928,8 +3859,7 @@
''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
+ source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
verify([source]);
}
@@ -3946,8 +3876,7 @@
''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
// Don't verify since call to super.named() can't be resolved.
}
@@ -3964,8 +3893,7 @@
''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
+ source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
verify([source]);
}
@@ -3981,8 +3909,7 @@
''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
+ source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
verify([source]);
}
@@ -3998,8 +3925,7 @@
''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
+ source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
verify([source]);
}
@@ -4014,8 +3940,7 @@
''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
+ source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
verify([source]);
}
@@ -4030,8 +3955,7 @@
''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
+ source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
verify([source]);
}
@@ -4044,8 +3968,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
+ source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
verify([source]);
}
@@ -4055,8 +3978,7 @@
class B extends A {}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
+ source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
verify([source]);
}
@@ -4070,8 +3992,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR]);
verify([source]);
}
@@ -4085,8 +4006,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR]);
verify([source]);
}
@@ -4153,25 +4073,31 @@
}
void test_nonConstantDefaultValueFromDeferredLibrary() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const V = 1;''', r'''
+const V = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-f({x : a.V}) {}'''],
- <ErrorCode>[
- CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY]);
+f({x : a.V}) {}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonConstantDefaultValueFromDeferredLibrary_nested() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const V = 1;''', r'''
+const V = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-f({x : a.V + 1}) {}'''],
- <ErrorCode>[
- CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY]);
+f({x : a.V + 1}) {}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonConstCaseExpression() {
@@ -4188,9 +4114,11 @@
}
void test_nonConstCaseExpressionFromDeferredLibrary() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const int c = 1;''', r'''
+const int c = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
main (int p) {
@@ -4198,15 +4126,18 @@
case a.c:
break;
}
-}'''],
- <ErrorCode>[
- CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY]);
+}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonConstCaseExpressionFromDeferredLibrary_nested() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const int c = 1;''', r'''
+const int c = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
main (int p) {
@@ -4214,9 +4145,10 @@
case a.c + 1:
break;
}
-}'''],
- <ErrorCode>[
- CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY]);
+}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonConstListElement() {
@@ -4230,29 +4162,35 @@
}
void test_nonConstListElementFromDeferredLibrary() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const int c = 1;''', r'''
+const int c = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
f() {
return const [a.c];
-}'''],
- <ErrorCode>[
- CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY]);
+}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonConstListElementFromDeferredLibrary_nested() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const int c = 1;''', r'''
+const int c = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
f() {
return const [a.c + 1];
-}'''],
- <ErrorCode>[
- CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY]);
+}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonConstMapAsExpressionStatement_begin() {
@@ -4262,8 +4200,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
+ source, [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
verify([source]);
}
@@ -4274,8 +4211,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
+ source, [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
verify([source]);
}
@@ -4290,27 +4226,35 @@
}
void test_nonConstMapKeyFromDeferredLibrary() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const int c = 1;''', r'''
+const int c = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
f() {
return const {a.c : 0};
-}'''],
- <ErrorCode>[CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY]);
+}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonConstMapKeyFromDeferredLibrary_nested() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const int c = 1;''', r'''
+const int c = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
f() {
return const {a.c + 1 : 0};
-}'''],
- <ErrorCode>[CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY]);
+}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonConstMapValue() {
@@ -4324,27 +4268,35 @@
}
void test_nonConstMapValueFromDeferredLibrary() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const int c = 1;''', r'''
+const int c = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
f() {
return const {'a' : a.c};
-}'''],
- <ErrorCode>[CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY]);
+}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonConstMapValueFromDeferredLibrary_nested() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const int c = 1;''', r'''
+const int c = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
f() {
return const {'a' : a.c + 1};
-}'''],
- <ErrorCode>[CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY]);
+}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonConstValueInInitializer_binary_notBool_left() {
@@ -4354,11 +4306,10 @@
const A(String p) : a = p && true;
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
- StaticTypeWarningCode.NON_BOOL_OPERAND]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
+ StaticTypeWarningCode.NON_BOOL_OPERAND
+ ]);
verify([source]);
}
@@ -4369,11 +4320,10 @@
const A(String p) : a = true && p;
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
- StaticTypeWarningCode.NON_BOOL_OPERAND]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
+ StaticTypeWarningCode.NON_BOOL_OPERAND
+ ]);
verify([source]);
}
@@ -4384,11 +4334,10 @@
const A(String p) : a = 5 & p;
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_EVAL_TYPE_INT,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_EVAL_TYPE_INT,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
verify([source]);
}
@@ -4399,11 +4348,10 @@
const A(String p) : a = 5 + p;
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_EVAL_TYPE_NUM,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_EVAL_TYPE_NUM,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
verify([source]);
}
@@ -4416,8 +4364,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
verify([source]);
}
@@ -4433,8 +4380,7 @@
var b = const B();''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
verify([source]);
}
@@ -4447,8 +4393,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
verify([source]);
}
@@ -4463,57 +4408,67 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
verify([source]);
}
void test_nonConstValueInInitializerFromDeferredLibrary_field() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const int c = 1;''', r'''
+const int c = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
class A {
final int x;
const A() : x = a.c;
-}'''],
- <ErrorCode>[
- CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFERRED_LIBRARY]);
+}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonConstValueInInitializerFromDeferredLibrary_field_nested() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const int c = 1;''', r'''
+const int c = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
class A {
final int x;
const A() : x = a.c + 1;
-}'''],
- <ErrorCode>[
- CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFERRED_LIBRARY]);
+}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonConstValueInInitializerFromDeferredLibrary_redirecting() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const int c = 1;''', r'''
+const int c = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
class A {
const A.named(p);
const A() : this.named(a.c);
-}'''],
- <ErrorCode>[
- CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFERRED_LIBRARY]);
+}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonConstValueInInitializerFromDeferredLibrary_super() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-const int c = 1;''', r'''
+const int c = 1;''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
class A {
@@ -4521,9 +4476,10 @@
}
class B extends A {
const B() : super(a.c);
-}'''],
- <ErrorCode>[
- CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFERRED_LIBRARY]);
+}'''
+ ], <ErrorCode>[
+ CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFERRED_LIBRARY
+ ]);
}
void test_nonGenerativeConstructor_explicit() {
@@ -4630,8 +4586,7 @@
p.A a;''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER]);
+ source, [CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER]);
verify([source]);
}
@@ -4645,8 +4600,7 @@
p.A a;''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER]);
+ source, [CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER]);
verify([source]);
}
@@ -4660,8 +4614,7 @@
p.A a;''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER]);
+ source, [CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER]);
verify([source]);
}
@@ -4675,8 +4628,7 @@
p.A a;''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER]);
+ source, [CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER]);
verify([source]);
}
@@ -4712,11 +4664,10 @@
A.b() : this.a();
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT,
- CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT,
+ CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT
+ ]);
verify([source]);
}
@@ -4742,15 +4693,14 @@
factory C() = B;
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
- CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
- CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
+ CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
+ CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
+ ]);
verify([source]);
}
@@ -4776,15 +4726,14 @@
factory C() = B;
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
- CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
- CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
+ CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
+ CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
+ ]);
verify([source]);
}
@@ -4800,15 +4749,14 @@
factory C.nameC() = B.nameB;
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
- CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
- CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
+ CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
+ CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
+ ]);
verify([source]);
}
@@ -4828,13 +4776,12 @@
factory C() = B;
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
- CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
+ CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
+ ]);
verify([source]);
}
@@ -4843,11 +4790,10 @@
class A extends B {}
class B extends A {}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
+ ]);
verify([source]);
}
@@ -4856,11 +4802,10 @@
class A extends B {}
class B implements A {}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
+ ]);
verify([source]);
}
@@ -4869,11 +4814,10 @@
class A implements B {}
class B implements A {}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
+ ]);
verify([source]);
}
@@ -4882,11 +4826,10 @@
class M1 = Object with M2;
class M2 = Object with M1;''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
+ ]);
verify([source]);
}
@@ -4895,9 +4838,9 @@
abstract class A implements A {}
class B implements A {}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS
+ ]);
verify([source]);
}
@@ -4907,11 +4850,10 @@
abstract class B implements A {}
class C implements A {}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
+ ]);
verify([source]);
}
@@ -4922,30 +4864,29 @@
abstract class C implements A {}
class D implements A {}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
- CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE
+ ]);
verify([source]);
}
void test_recursiveInterfaceInheritanceBaseCaseExtends() {
Source source = addSource("class A extends A {}");
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS
+ ]);
verify([source]);
}
void test_recursiveInterfaceInheritanceBaseCaseImplements() {
Source source = addSource("class A implements A {}");
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS
+ ]);
verify([source]);
}
@@ -4955,18 +4896,18 @@
class M {}
class B = A with M implements B;''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS
+ ]);
verify([source]);
}
void test_recursiveInterfaceInheritanceBaseCaseWith() {
Source source = addSource("class M = Object with M;");
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WITH]);
+ assertErrors(source, [
+ CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WITH
+ ]);
verify([source]);
}
@@ -4976,9 +4917,9 @@
A() : this.noSuchConstructor();
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR]);
+ assertErrors(source, [
+ CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR
+ ]);
}
void test_redirectGenerativeToNonGenerativeConstructor() {
@@ -4988,9 +4929,9 @@
factory A.x() => null;
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR]);
+ assertErrors(source, [
+ CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR
+ ]);
verify([source]);
}
@@ -5004,8 +4945,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR]);
}
void test_redirectToMissingConstructor_unnamed() {
@@ -5018,8 +4958,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR]);
}
void test_redirectToNonClass_notAType() {
@@ -5051,8 +4990,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.REDIRECT_TO_NON_CONST_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.REDIRECT_TO_NON_CONST_CONSTRUCTOR]);
verify([source]);
}
@@ -5129,8 +5067,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR]);
verify([source]);
}
@@ -5141,8 +5078,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR]);
verify([source]);
}
@@ -5167,16 +5103,19 @@
}
void test_sharedDeferredPrefix() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-f1() {}''', r'''
+f1() {}''',
+ r'''
library lib2;
-f2() {}''', r'''
+f2() {}''',
+ r'''
library root;
import 'lib1.dart' deferred as lib;
import 'lib2.dart' as lib;
-main() { lib.f1(); lib.f2(); }'''],
- <ErrorCode>[CompileTimeErrorCode.SHARED_DEFERRED_PREFIX]);
+main() { lib.f1(); lib.f2(); }'''
+ ], <ErrorCode>[CompileTimeErrorCode.SHARED_DEFERRED_PREFIX]);
}
void test_superInInvalidContext_binaryExpression() {
@@ -5280,8 +5219,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR]);
verify([source]);
}
@@ -5294,8 +5232,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR]);
+ source, [CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR]);
verify([source]);
}
@@ -5307,15 +5244,14 @@
var s4 = const Symbol('x', 'y');
var s5 = const Symbol('x', foo: 'x');''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
- CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
- CompileTimeErrorCode.NOT_ENOUGH_REQUIRED_ARGUMENTS,
- CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS,
- CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
+ CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.NOT_ENOUGH_REQUIRED_ARGUMENTS,
+ CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS,
+ CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER
+ ]);
verify([source]);
}
@@ -5327,12 +5263,11 @@
F foo(G g) => g;
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
- CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
- StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
+ CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
+ StaticTypeWarningCode.RETURN_OF_INVALID_TYPE
+ ]);
verify([source]);
}
@@ -5356,8 +5291,7 @@
Source source = addSource("typedef A({A a});");
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
+ source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
verify([source]);
}
@@ -5365,8 +5299,7 @@
Source source = addSource("typedef A([A a]);");
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
+ source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
verify([source]);
}
@@ -5374,8 +5307,7 @@
Source source = addSource("typedef A(A a);");
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
+ source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
verify([source]);
}
@@ -5383,8 +5315,7 @@
Source source = addSource("typedef A(List<A> a);");
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
+ source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
verify([source]);
}
@@ -5405,8 +5336,7 @@
Source source = addSource("typedef A A();");
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
+ source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
verify([source]);
}
@@ -5415,11 +5345,10 @@
typedef B A();
typedef A B();''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
- CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
+ assertErrors(source, [
+ CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
+ CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF
+ ]);
verify([source]);
}
@@ -5427,8 +5356,7 @@
Source source = addSource("typedef A<T extends A>();");
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
+ source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
verify([source]);
}
@@ -5442,8 +5370,7 @@
f() { return const G<B>(); }''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -5465,8 +5392,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
+ source, [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
// no verify(), "super.named()" is not resolved
}
@@ -5479,9 +5405,9 @@
B() : super();
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT
+ ]);
verify([source]);
}
@@ -5494,9 +5420,9 @@
B();
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT
+ ]);
verify([source]);
}
@@ -5534,11 +5460,10 @@
void test_uriWithInterpolation_constant() {
Source source = addSource("import 'stuff_\$platform.dart';");
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.URI_WITH_INTERPOLATION,
- StaticWarningCode.UNDEFINED_IDENTIFIER]);
+ assertErrors(source, [
+ CompileTimeErrorCode.URI_WITH_INTERPOLATION,
+ StaticWarningCode.UNDEFINED_IDENTIFIER
+ ]);
// We cannot verify resolution with an unresolvable
// URI: 'stuff_$platform.dart'
}
@@ -5576,9 +5501,9 @@
operator -(a, b) {}
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS]);
+ assertErrors(source, [
+ CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS
+ ]);
verify([source]);
reset();
}
@@ -5592,8 +5517,7 @@
Source source = addSource("set x({p}) {}");
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
+ source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
verify([source]);
}
@@ -5601,8 +5525,7 @@
Source source = addSource("set x([p]) {}");
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
+ source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
verify([source]);
}
@@ -5610,8 +5533,7 @@
Source source = addSource("set x() {}");
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
+ source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
verify([source]);
}
@@ -5619,8 +5541,7 @@
Source source = addSource("set x(a, b) {}");
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
+ source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
verify([source]);
}
@@ -5631,8 +5552,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
+ source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
verify([source]);
}
@@ -5643,8 +5563,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
+ source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
verify([source]);
}
@@ -5655,8 +5574,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
+ source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
verify([source]);
}
@@ -5667,8 +5585,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
+ source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER]);
verify([source]);
}
@@ -5725,11 +5642,10 @@
const A(bool p) : a = $expr;
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
- StaticTypeWarningCode.NON_BOOL_OPERAND]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
+ StaticTypeWarningCode.NON_BOOL_OPERAND
+ ]);
verify([source]);
reset();
}
@@ -5741,11 +5657,10 @@
const A(int p) : a = $expr;
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_EVAL_TYPE_INT,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_EVAL_TYPE_INT,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
verify([source]);
reset();
}
@@ -5757,25 +5672,23 @@
const A(num p) : a = $expr;
}''');
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.CONST_EVAL_TYPE_NUM,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CompileTimeErrorCode.CONST_EVAL_TYPE_NUM,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
verify([source]);
reset();
}
- void _check_wrongNumberOfParametersForOperator(String name,
- String parameters) {
+ void _check_wrongNumberOfParametersForOperator(
+ String name, String parameters) {
Source source = addSource('''
class A {
operator $name($parameters) {}
}''');
resolve(source);
assertErrors(
- source,
- [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR]);
+ source, [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR]);
verify([source]);
reset();
}
diff --git a/pkg/analyzer/test/generated/element_test.dart b/pkg/analyzer/test/generated/element_test.dart
index 64d5fb4..f94b44a 100644
--- a/pkg/analyzer/test/generated/element_test.dart
+++ b/pkg/analyzer/test/generated/element_test.dart
@@ -9,8 +9,8 @@
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart';
-import 'package:analyzer/src/generated/engine.dart' show AnalysisContext,
- AnalysisContextImpl;
+import 'package:analyzer/src/generated/engine.dart'
+ show AnalysisContext, AnalysisContextImpl;
import 'package:analyzer/src/generated/java_core.dart';
import 'package:analyzer/src/generated/source_io.dart';
import 'package:analyzer/src/generated/testing/ast_factory.dart';
@@ -22,7 +22,6 @@
import 'resolver_test.dart' show TestTypeProvider, AnalysisContextHelper;
import 'test_support.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(ElementKindTest);
@@ -144,14 +143,16 @@
void test_hasNonFinalField_false_const() {
ClassElementImpl classA = ElementFactory.classElement2("A");
classA.fields = <FieldElement>[
- ElementFactory.fieldElement("f", false, false, true, classA.type)];
+ ElementFactory.fieldElement("f", false, false, true, classA.type)
+ ];
expect(classA.hasNonFinalField, isFalse);
}
void test_hasNonFinalField_false_final() {
ClassElementImpl classA = ElementFactory.classElement2("A");
classA.fields = <FieldElement>[
- ElementFactory.fieldElement("f", false, true, false, classA.type)];
+ ElementFactory.fieldElement("f", false, true, false, classA.type)
+ ];
expect(classA.hasNonFinalField, isFalse);
}
@@ -165,7 +166,8 @@
void test_hasNonFinalField_true_immediate() {
ClassElementImpl classA = ElementFactory.classElement2("A");
classA.fields = <FieldElement>[
- ElementFactory.fieldElement("f", false, false, false, classA.type)];
+ ElementFactory.fieldElement("f", false, false, false, classA.type)
+ ];
expect(classA.hasNonFinalField, isTrue);
}
@@ -173,7 +175,8 @@
ClassElementImpl classA = ElementFactory.classElement2("A");
ClassElementImpl classB = ElementFactory.classElement("B", classA.type);
classA.fields = <FieldElement>[
- ElementFactory.fieldElement("f", false, false, false, classA.type)];
+ ElementFactory.fieldElement("f", false, false, false, classA.type)
+ ];
expect(classB.hasNonFinalField, isTrue);
}
@@ -231,9 +234,7 @@
String firstConst = "A";
String secondConst = "B";
ClassElementImpl enumE = ElementFactory.enumElement(
- new TestTypeProvider(),
- "E",
- [firstConst, secondConst]);
+ new TestTypeProvider(), "E", [firstConst, secondConst]);
// E is an enum
expect(enumE.isEnum, true);
@@ -294,8 +295,7 @@
classB.methods = <MethodElement>[method];
(library.definingCompilationUnit as CompilationUnitElementImpl).types =
<ClassElement>[classA, classB];
- expect(
- classB.lookUpConcreteMethod(methodName, library),
+ expect(classB.lookUpConcreteMethod(methodName, library),
same(inheritedMethod));
}
@@ -361,8 +361,7 @@
ClassElementImpl classB = ElementFactory.classElement("B", classA.type);
(library.definingCompilationUnit as CompilationUnitElementImpl).types =
<ClassElement>[classA, classB];
- expect(
- classB.lookUpConcreteMethod(methodName, library),
+ expect(classB.lookUpConcreteMethod(methodName, library),
same(inheritedMethod));
}
@@ -470,8 +469,7 @@
ClassElementImpl classB = ElementFactory.classElement("B", classA.type);
(library.definingCompilationUnit as CompilationUnitElementImpl).types =
<ClassElement>[classA, classB];
- expect(
- classB.lookUpInheritedConcreteGetter(getterName, library),
+ expect(classB.lookUpInheritedConcreteGetter(getterName, library),
same(inheritedGetter));
}
@@ -536,8 +534,7 @@
classB.methods = <MethodElement>[method];
(library.definingCompilationUnit as CompilationUnitElementImpl).types =
<ClassElement>[classA, classB];
- expect(
- classB.lookUpInheritedConcreteMethod(methodName, library),
+ expect(classB.lookUpInheritedConcreteMethod(methodName, library),
same(inheritedMethod));
}
@@ -560,8 +557,7 @@
classB.methods = <MethodElement>[method];
(library.definingCompilationUnit as CompilationUnitElementImpl).types =
<ClassElement>[classA, classB];
- expect(
- classB.lookUpInheritedConcreteMethod(methodName, library),
+ expect(classB.lookUpInheritedConcreteMethod(methodName, library),
same(inheritedMethod));
}
@@ -589,8 +585,7 @@
expect(classB.lookUpInheritedConcreteMethod(methodName, library), isNull);
}
- void
- test_lookUpInheritedConcreteMethod_declaredAndInheritedWithAbstractBetween() {
+ void test_lookUpInheritedConcreteMethod_declaredAndInheritedWithAbstractBetween() {
// class A {
// m() {}
// }
@@ -617,8 +612,7 @@
classC.methods = <MethodElement>[method];
(library.definingCompilationUnit as CompilationUnitElementImpl).types =
<ClassElement>[classA, classB, classC];
- expect(
- classC.lookUpInheritedConcreteMethod(methodName, library),
+ expect(classC.lookUpInheritedConcreteMethod(methodName, library),
same(inheritedMethod));
}
@@ -638,8 +632,7 @@
ClassElementImpl classB = ElementFactory.classElement("B", classA.type);
(library.definingCompilationUnit as CompilationUnitElementImpl).types =
<ClassElement>[classA, classB];
- expect(
- classB.lookUpInheritedConcreteMethod(methodName, library),
+ expect(classB.lookUpInheritedConcreteMethod(methodName, library),
same(inheritedMethod));
}
@@ -686,8 +679,7 @@
ClassElementImpl classB = ElementFactory.classElement("B", classA.type);
(library.definingCompilationUnit as CompilationUnitElementImpl).types =
<ClassElement>[classA, classB];
- expect(
- classB.lookUpInheritedConcreteSetter(setterName, library),
+ expect(classB.lookUpInheritedConcreteSetter(setterName, library),
same(setter));
}
@@ -751,8 +743,7 @@
classB.methods = <MethodElement>[method];
(library.definingCompilationUnit as CompilationUnitElementImpl).types =
<ClassElement>[classA, classB];
- expect(
- classB.lookUpInheritedMethod(methodName, library),
+ expect(classB.lookUpInheritedMethod(methodName, library),
same(inheritedMethod));
}
@@ -772,8 +763,7 @@
ClassElementImpl classB = ElementFactory.classElement("B", classA.type);
(library.definingCompilationUnit as CompilationUnitElementImpl).types =
<ClassElement>[classA, classB];
- expect(
- classB.lookUpInheritedMethod(methodName, library),
+ expect(classB.lookUpInheritedMethod(methodName, library),
same(inheritedMethod));
}
@@ -946,8 +936,8 @@
ClassElementImpl classElement = ElementFactory.classElement2("C");
(library.definingCompilationUnit as CompilationUnitElementImpl).types =
<ClassElement>[classElement];
- FieldElement field =
- ElementFactory.fieldElement("next", false, false, false, classElement.type);
+ FieldElement field = ElementFactory.fieldElement(
+ "next", false, false, false, classElement.type);
classElement.fields = <FieldElement>[field];
expect(field == field, isTrue);
expect(field == field.getter, isFalse);
@@ -1037,8 +1027,7 @@
@reflectiveTest
class ElementKindTest extends EngineTestCase {
void test_of_nonNull() {
- expect(
- ElementKind.of(ElementFactory.classElement2("A")),
+ expect(ElementKind.of(ElementFactory.classElement2("A")),
same(ElementKind.CLASS));
}
@@ -1115,8 +1104,7 @@
@reflectiveTest
class FunctionTypeImplTest extends EngineTestCase {
void test_creation() {
- expect(
- new FunctionTypeImpl.con1(
+ expect(new FunctionTypeImpl.con1(
new FunctionElementImpl.forNode(AstFactory.identifier3("f"))),
isNotNull);
}
@@ -1188,7 +1176,8 @@
// () -> void <: Function
ClassElementImpl functionElement = ElementFactory.classElement2("Function");
InterfaceTypeImpl functionType =
- new _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction(functionElement);
+ new _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction(
+ functionElement);
FunctionType f = ElementFactory.functionElement("f").type;
expect(f.isSubtypeOf(functionType), isTrue);
}
@@ -1220,35 +1209,21 @@
ClassElement a = ElementFactory.classElement2("A");
ClassElement b = ElementFactory.classElement("B", a.type);
FunctionType t = ElementFactory.functionElement4(
- "t",
- null,
- null,
- <String>["name"],
- <ClassElement>[a]).type;
+ "t", null, null, <String>["name"], <ClassElement>[a]).type;
FunctionType s = ElementFactory.functionElement4(
- "s",
- null,
- null,
- <String>["name"],
- <ClassElement>[b]).type;
+ "s", null, null, <String>["name"], <ClassElement>[b]).type;
expect(t.isSubtypeOf(s), isTrue);
expect(s.isSubtypeOf(t), isTrue);
}
void test_isSubtypeOf_namedParameters_isNotAssignable() {
// ! ({name: A}) -> void <: ({name: B}) -> void
- FunctionType t = ElementFactory.functionElement4(
- "t",
- null,
- null,
- <String>["name"],
- <ClassElement>[ElementFactory.classElement2("A")]).type;
- FunctionType s = ElementFactory.functionElement4(
- "s",
- null,
- null,
- <String>["name"],
- <ClassElement>[ElementFactory.classElement2("B")]).type;
+ FunctionType t = ElementFactory.functionElement4("t", null, null, <String>[
+ "name"
+ ], <ClassElement>[ElementFactory.classElement2("A")]).type;
+ FunctionType s = ElementFactory.functionElement4("s", null, null, <String>[
+ "name"
+ ], <ClassElement>[ElementFactory.classElement2("B")]).type;
expect(t.isSubtypeOf(s), isFalse);
}
@@ -1261,17 +1236,9 @@
ClassElement a = ElementFactory.classElement2("A");
ClassElement b = ElementFactory.classElement("B", a.type);
FunctionType t = ElementFactory.functionElement4(
- "t",
- null,
- null,
- <String>["name"],
- <ClassElement>[a]).type;
+ "t", null, null, <String>["name"], <ClassElement>[a]).type;
FunctionType s = ElementFactory.functionElement4(
- "s",
- null,
- null,
- <String>["diff"],
- <ClassElement>[b]).type;
+ "s", null, null, <String>["diff"], <ClassElement>[b]).type;
expect(t.isSubtypeOf(s), isFalse);
expect(s.isSubtypeOf(t), isFalse);
}
@@ -1282,17 +1249,9 @@
ClassElement a = ElementFactory.classElement2("A");
ClassElement b = ElementFactory.classElement("B", a.type);
FunctionType t = ElementFactory.functionElement4(
- "t",
- null,
- null,
- <String>["A", "B"],
- <ClassElement>[a, b]).type;
+ "t", null, null, <String>["A", "B"], <ClassElement>[a, b]).type;
FunctionType s = ElementFactory.functionElement4(
- "s",
- null,
- null,
- <String>["B", "A"],
- <ClassElement>[b, a]).type;
+ "s", null, null, <String>["B", "A"], <ClassElement>[b, a]).type;
expect(t.isSubtypeOf(s), isTrue);
}
@@ -1302,17 +1261,9 @@
ClassElement a = ElementFactory.classElement2("A");
ClassElement b = ElementFactory.classElement("B", a.type);
FunctionType t = ElementFactory.functionElement4(
- "t",
- null,
- null,
- <String>["B"],
- <ClassElement>[b]).type;
+ "t", null, null, <String>["B"], <ClassElement>[b]).type;
FunctionType s = ElementFactory.functionElement4(
- "s",
- null,
- null,
- <String>["B", "A"],
- <ClassElement>[b, a]).type;
+ "s", null, null, <String>["B", "A"], <ClassElement>[b, a]).type;
expect(t.isSubtypeOf(s), isFalse);
}
@@ -1322,17 +1273,9 @@
ClassElement a = ElementFactory.classElement2("A");
ClassElement b = ElementFactory.classElement("B", a.type);
FunctionType t = ElementFactory.functionElement4(
- "t",
- null,
- null,
- <String>["A", "B"],
- <ClassElement>[a, b]).type;
+ "t", null, null, <String>["A", "B"], <ClassElement>[a, b]).type;
FunctionType s = ElementFactory.functionElement4(
- "s",
- null,
- null,
- <String>["B"],
- <ClassElement>[b]).type;
+ "s", null, null, <String>["B"], <ClassElement>[b]).type;
expect(t.isSubtypeOf(s), isTrue);
}
@@ -1342,17 +1285,9 @@
ClassElement a = ElementFactory.classElement2("A");
ClassElement b = ElementFactory.classElement("B", a.type);
FunctionType t = ElementFactory.functionElement4(
- "t",
- null,
- null,
- <String>["name"],
- <ClassElement>[a]).type;
+ "t", null, null, <String>["name"], <ClassElement>[a]).type;
FunctionType s = ElementFactory.functionElement4(
- "s",
- null,
- null,
- <String>["name", "name2"],
- <ClassElement>[b, b]).type;
+ "s", null, null, <String>["name", "name2"], <ClassElement>[b, b]).type;
expect(t.isSubtypeOf(s), isFalse);
}
@@ -1362,17 +1297,9 @@
ClassElement a = ElementFactory.classElement2("A");
ClassElement b = ElementFactory.classElement("B", a.type);
FunctionType t = ElementFactory.functionElement4(
- "t",
- null,
- null,
- <String>["name", "name2"],
- <ClassElement>[a, a]).type;
+ "t", null, null, <String>["name", "name2"], <ClassElement>[a, a]).type;
FunctionType s = ElementFactory.functionElement4(
- "s",
- null,
- null,
- <String>["name"],
- <ClassElement>[b]).type;
+ "s", null, null, <String>["name"], <ClassElement>[b]).type;
expect(t.isSubtypeOf(s), isTrue);
}
@@ -1391,9 +1318,7 @@
// (a, [a]) -> void <: (a) -> void
ClassElement a = ElementFactory.classElement2("A");
FunctionType t = ElementFactory.functionElement6(
- "t",
- <ClassElement>[a],
- <ClassElement>[a]).type;
+ "t", <ClassElement>[a], <ClassElement>[a]).type;
FunctionType s =
ElementFactory.functionElement5("s", <ClassElement>[a]).type;
expect(t.isSubtypeOf(s), isTrue);
@@ -1418,13 +1343,9 @@
ClassElement d = ElementFactory.classElement2("D");
ClassElement e = ElementFactory.classElement2("E");
FunctionType t = ElementFactory.functionElement6(
- "t",
- <ClassElement>[a, b],
- <ClassElement>[c, d, e]).type;
+ "t", <ClassElement>[a, b], <ClassElement>[c, d, e]).type;
FunctionType s = ElementFactory.functionElement6(
- "s",
- <ClassElement>[a, b, c],
- <ClassElement>[d]).type;
+ "s", <ClassElement>[a, b, c], <ClassElement>[d]).type;
expect(t.isSubtypeOf(s), isTrue);
expect(s.isSubtypeOf(t), isFalse);
}
@@ -1446,11 +1367,9 @@
void test_isSubtypeOf_normalParameters_isNotAssignable() {
// ! (a) -> void <: (b) -> void
FunctionType t = ElementFactory.functionElement5(
- "t",
- <ClassElement>[ElementFactory.classElement2("A")]).type;
+ "t", <ClassElement>[ElementFactory.classElement2("A")]).type;
FunctionType s = ElementFactory.functionElement5(
- "s",
- <ClassElement>[ElementFactory.classElement2("B")]).type;
+ "s", <ClassElement>[ElementFactory.classElement2("B")]).type;
expect(t.isSubtypeOf(s), isFalse);
}
@@ -1505,13 +1424,9 @@
void test_isSubtypeOf_positionalParameters_isNotAssignable() {
// ! ([a]) -> void <: ([b]) -> void
FunctionType t = ElementFactory.functionElement6(
- "t",
- null,
- <ClassElement>[ElementFactory.classElement2("A")]).type;
+ "t", null, <ClassElement>[ElementFactory.classElement2("A")]).type;
FunctionType s = ElementFactory.functionElement6(
- "s",
- null,
- <ClassElement>[ElementFactory.classElement2("B")]).type;
+ "s", null, <ClassElement>[ElementFactory.classElement2("B")]).type;
expect(t.isSubtypeOf(s), isFalse);
}
@@ -1562,10 +1477,10 @@
void test_isSubtypeOf_returnType_tNotAssignableToS() {
// ! () -> A <: () -> B
- FunctionType t =
- ElementFactory.functionElement2("t", ElementFactory.classElement2("A")).type;
- FunctionType s =
- ElementFactory.functionElement2("s", ElementFactory.classElement2("B")).type;
+ FunctionType t = ElementFactory.functionElement2(
+ "t", ElementFactory.classElement2("A")).type;
+ FunctionType s = ElementFactory.functionElement2(
+ "s", ElementFactory.classElement2("B")).type;
expect(t.isSubtypeOf(s), isFalse);
}
@@ -1584,8 +1499,9 @@
FunctionElementImpl functionAliasElement =
new FunctionElementImpl.forNode(AstFactory.identifier3("func"));
functionAliasElement.parameters = <ParameterElement>[
- ElementFactory.requiredParameter2("a", typeB),
- ElementFactory.positionalParameter2("b", typeS)];
+ ElementFactory.requiredParameter2("a", typeB),
+ ElementFactory.positionalParameter2("b", typeS)
+ ];
functionAliasElement.returnType = stringType;
FunctionTypeImpl functionAliasType =
new FunctionTypeImpl.con1(functionAliasElement);
@@ -1593,8 +1509,9 @@
FunctionElementImpl functionElement =
new FunctionElementImpl.forNode(AstFactory.identifier3("f"));
functionElement.parameters = <ParameterElement>[
- ElementFactory.requiredParameter2("c", boolType),
- ElementFactory.positionalParameter2("d", stringType)];
+ ElementFactory.requiredParameter2("c", boolType),
+ ElementFactory.positionalParameter2("d", stringType)
+ ];
functionElement.returnType = provider.dynamicType;
FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement);
functionElement.type = functionType;
@@ -1608,10 +1525,7 @@
FunctionType t =
ElementFactory.functionElement5("t", <ClassElement>[a]).type;
FunctionType s = ElementFactory.functionElement7(
- "s",
- null,
- <String>["name"],
- <ClassElement>[a]).type;
+ "s", null, <String>["name"], <ClassElement>[a]).type;
expect(t.isSubtypeOf(s), isFalse);
expect(s.isSubtypeOf(t), isFalse);
}
@@ -1623,10 +1537,7 @@
FunctionType t =
ElementFactory.functionElement6("t", null, <ClassElement>[a]).type;
FunctionType s = ElementFactory.functionElement7(
- "s",
- null,
- <String>["name"],
- <ClassElement>[a]).type;
+ "s", null, <String>["name"], <ClassElement>[a]).type;
expect(t.isSubtypeOf(s), isFalse);
expect(s.isSubtypeOf(t), isFalse);
}
@@ -1651,17 +1562,18 @@
new MethodElementImpl.forNode(AstFactory.identifier3("m"));
String namedParameterName = "c";
functionElement.parameters = <ParameterElement>[
- ElementFactory.requiredParameter2("a", parameterType),
- ElementFactory.positionalParameter2("b", parameterType),
- ElementFactory.namedParameter2(namedParameterName, parameterType)];
+ ElementFactory.requiredParameter2("a", parameterType),
+ ElementFactory.positionalParameter2("b", parameterType),
+ ElementFactory.namedParameter2(namedParameterName, parameterType)
+ ];
functionElement.returnType = parameterType;
definingClass.methods = <MethodElement>[functionElement];
FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement);
functionType.typeArguments = <DartType>[parameterType];
InterfaceTypeImpl argumentType = new InterfaceTypeImpl.con1(
new ClassElementImpl.forNode(AstFactory.identifier3("D")));
- FunctionType result =
- functionType.substitute2(<DartType>[argumentType], <DartType>[parameterType]);
+ FunctionType result = functionType.substitute2(
+ <DartType>[argumentType], <DartType>[parameterType]);
expect(result.returnType, argumentType);
List<DartType> normalParameters = result.normalParameterTypes;
expect(normalParameters, hasLength(1));
@@ -1687,17 +1599,18 @@
new FunctionElementImpl.forNode(AstFactory.identifier3("f"));
String namedParameterName = "c";
functionElement.parameters = <ParameterElement>[
- ElementFactory.requiredParameter2("a", normalParameterType),
- ElementFactory.positionalParameter2("b", optionalParameterType),
- ElementFactory.namedParameter2(namedParameterName, namedParameterType)];
+ ElementFactory.requiredParameter2("a", normalParameterType),
+ ElementFactory.positionalParameter2("b", optionalParameterType),
+ ElementFactory.namedParameter2(namedParameterName, namedParameterType)
+ ];
functionElement.returnType = returnType;
FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement);
InterfaceTypeImpl argumentType = new InterfaceTypeImpl.con1(
new ClassElementImpl.forNode(AstFactory.identifier3("D")));
TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl(
new TypeParameterElementImpl.forNode(AstFactory.identifier3("E")));
- FunctionType result =
- functionType.substitute2(<DartType>[argumentType], <DartType>[parameterType]);
+ FunctionType result = functionType.substitute2(
+ <DartType>[argumentType], <DartType>[parameterType]);
expect(result.returnType, returnType);
List<DartType> normalParameters = result.normalParameterTypes;
expect(normalParameters, hasLength(1));
@@ -1784,11 +1697,9 @@
// assertion: even though the longest path to Object for typeB is 2, and
// typeE implements typeB, the longest path for typeE is 4 since it also
// implements typeD
- expect(
- InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
+ expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
2);
- expect(
- InterfaceTypeImpl.computeLongestInheritancePathToObject(classE.type),
+ expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classE.type),
4);
}
@@ -1813,11 +1724,9 @@
// assertion: even though the longest path to Object for typeB is 2, and
// typeE extends typeB, the longest path for typeE is 4 since it also
// implements typeD
- expect(
- InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
+ expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
2);
- expect(
- InterfaceTypeImpl.computeLongestInheritancePathToObject(classE.type),
+ expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classE.type),
4);
}
@@ -1836,8 +1745,7 @@
ClassElementImpl classA = ElementFactory.classElement2("A");
ClassElementImpl classB = ElementFactory.classElement("B", classA.type);
classA.supertype = classB.type;
- expect(
- InterfaceTypeImpl.computeLongestInheritancePathToObject(classA.type),
+ expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classA.type),
2);
}
@@ -1856,14 +1764,11 @@
ClassElementImpl classC = ElementFactory.classElement2("C");
classB.interfaces = <InterfaceType>[classA.type];
classC.interfaces = <InterfaceType>[classB.type];
- expect(
- InterfaceTypeImpl.computeLongestInheritancePathToObject(classA.type),
+ expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classA.type),
1);
- expect(
- InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
+ expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
2);
- expect(
- InterfaceTypeImpl.computeLongestInheritancePathToObject(classC.type),
+ expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classC.type),
3);
}
@@ -1880,14 +1785,11 @@
ClassElement classA = ElementFactory.classElement2("A");
ClassElement classB = ElementFactory.classElement("B", classA.type);
ClassElement classC = ElementFactory.classElement("C", classB.type);
- expect(
- InterfaceTypeImpl.computeLongestInheritancePathToObject(classA.type),
+ expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classA.type),
1);
- expect(
- InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
+ expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
2);
- expect(
- InterfaceTypeImpl.computeLongestInheritancePathToObject(classC.type),
+ expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classC.type),
3);
}
@@ -2100,8 +2002,7 @@
}
void test_creation() {
- expect(
- new InterfaceTypeImpl.con1(ElementFactory.classElement2("A")),
+ expect(new InterfaceTypeImpl.con1(ElementFactory.classElement2("A")),
isNotNull);
}
@@ -2273,10 +2174,11 @@
InterfaceType typeC = classC.type;
InterfaceType typeD = classD.type;
classD.mixins = <InterfaceType>[
- ElementFactory.classElement2("M").type,
- ElementFactory.classElement2("N").type,
- ElementFactory.classElement2("O").type,
- ElementFactory.classElement2("P").type];
+ ElementFactory.classElement2("M").type,
+ ElementFactory.classElement2("N").type,
+ ElementFactory.classElement2("O").type,
+ ElementFactory.classElement2("P").type
+ ];
expect(typeD.getLeastUpperBound(typeC), typeA);
expect(typeC.getLeastUpperBound(typeD), typeA);
}
@@ -2437,8 +2339,7 @@
InterfaceType listOfIntType = listType.substitute4(<DartType>[intType]);
InterfaceType listOfDoubleType =
listType.substitute4(<DartType>[doubleType]);
- expect(
- listOfIntType.getLeastUpperBound(listOfDoubleType),
+ expect(listOfIntType.getLeastUpperBound(listOfDoubleType),
_typeProvider.objectType);
}
@@ -2673,8 +2574,7 @@
void test_isAssignableTo_void() {
expect(
- VoidTypeImpl.instance.isAssignableTo(_typeProvider.intType),
- isFalse);
+ VoidTypeImpl.instance.isAssignableTo(_typeProvider.intType), isFalse);
}
void test_isDirectSupertypeOf_extends() {
@@ -2875,9 +2775,10 @@
InterfaceType stringType = _typeProvider.stringType;
ClassElementImpl classA = ElementFactory.classElement2("A");
classA.methods = <MethodElement>[
- ElementFactory.methodElement("call", VoidTypeImpl.instance, [stringType])];
- FunctionType functionType =
- ElementFactory.functionElement5("f", <ClassElement>[stringType.element]).type;
+ ElementFactory.methodElement("call", VoidTypeImpl.instance, [stringType])
+ ];
+ FunctionType functionType = ElementFactory.functionElement5(
+ "f", <ClassElement>[stringType.element]).type;
expect(classA.type.isSubtypeOf(functionType), isTrue);
}
@@ -3129,12 +3030,12 @@
String getterName = 'g';
ClassElementImpl classB = ElementFactory.classElement2('B');
ClassElementImpl classM1 = ElementFactory.classElement2('M1');
- PropertyAccessorElementImpl getterM1g =
- ElementFactory.getterElement(getterName, false, typeProvider.dynamicType);
+ PropertyAccessorElementImpl getterM1g = ElementFactory.getterElement(
+ getterName, false, typeProvider.dynamicType);
classM1.accessors = <PropertyAccessorElement>[getterM1g];
ClassElementImpl classM2 = ElementFactory.classElement2('M2');
- PropertyAccessorElementImpl getterM2g =
- ElementFactory.getterElement(getterName, false, typeProvider.dynamicType);
+ PropertyAccessorElementImpl getterM2g = ElementFactory.getterElement(
+ getterName, false, typeProvider.dynamicType);
classM2.accessors = <PropertyAccessorElement>[getterM2g];
ClassElementImpl classC = ElementFactory.classElement('C', classB.type);
classC.mixins = <InterfaceType>[classM1.type, classM2.type];
@@ -3347,12 +3248,12 @@
String setterName = 's';
ClassElementImpl classB = ElementFactory.classElement2('B');
ClassElementImpl classM1 = ElementFactory.classElement2('M1');
- PropertyAccessorElementImpl setterM1g =
- ElementFactory.setterElement(setterName, false, typeProvider.dynamicType);
+ PropertyAccessorElementImpl setterM1g = ElementFactory.setterElement(
+ setterName, false, typeProvider.dynamicType);
classM1.accessors = <PropertyAccessorElement>[setterM1g];
ClassElementImpl classM2 = ElementFactory.classElement2('M2');
- PropertyAccessorElementImpl setterM2g =
- ElementFactory.getterElement(setterName, false, typeProvider.dynamicType);
+ PropertyAccessorElementImpl setterM2g = ElementFactory.getterElement(
+ setterName, false, typeProvider.dynamicType);
classM2.accessors = <PropertyAccessorElement>[setterM2g];
ClassElementImpl classC = ElementFactory.classElement('C', classB.type);
classC.mixins = <InterfaceType>[classM1.type, classM2.type];
@@ -3396,8 +3297,9 @@
InterfaceTypeImpl type =
ElementFactory.classElement2("A").type as InterfaceTypeImpl;
List<DartType> typeArguments = <DartType>[
- ElementFactory.classElement2("B").type,
- ElementFactory.classElement2("C").type];
+ ElementFactory.classElement2("B").type,
+ ElementFactory.classElement2("C").type
+ ];
type.typeArguments = typeArguments;
expect(type.typeArguments, typeArguments);
}
@@ -3453,10 +3355,8 @@
@reflectiveTest
class LibraryElementImplTest extends EngineTestCase {
void test_creation() {
- expect(
- new LibraryElementImpl.forNode(
- createAnalysisContext(),
- AstFactory.libraryIdentifier2(["l"])),
+ expect(new LibraryElementImpl.forNode(
+ createAnalysisContext(), AstFactory.libraryIdentifier2(["l"])),
isNotNull);
}
@@ -3471,16 +3371,16 @@
PrefixElement prefixB =
new PrefixElementImpl.forNode(AstFactory.identifier3("b"));
List<ImportElementImpl> imports = [
- ElementFactory.importFor(library2, null),
- ElementFactory.importFor(library2, prefixB),
- ElementFactory.importFor(library3, null),
- ElementFactory.importFor(library3, prefixA),
- ElementFactory.importFor(library3, prefixB),
- ElementFactory.importFor(library4, prefixA)];
+ ElementFactory.importFor(library2, null),
+ ElementFactory.importFor(library2, prefixB),
+ ElementFactory.importFor(library3, null),
+ ElementFactory.importFor(library3, prefixA),
+ ElementFactory.importFor(library3, prefixB),
+ ElementFactory.importFor(library4, prefixA)
+ ];
library1.imports = imports;
List<LibraryElement> libraries = library1.importedLibraries;
- expect(
- libraries,
+ expect(libraries,
unorderedEquals(<LibraryElement>[library2, library3, library4]));
}
@@ -3492,11 +3392,12 @@
PrefixElement prefixB =
new PrefixElementImpl.forNode(AstFactory.identifier3("b"));
List<ImportElementImpl> imports = [
- ElementFactory.importFor(ElementFactory.library(context, "l2"), null),
- ElementFactory.importFor(ElementFactory.library(context, "l3"), null),
- ElementFactory.importFor(ElementFactory.library(context, "l4"), prefixA),
- ElementFactory.importFor(ElementFactory.library(context, "l5"), prefixA),
- ElementFactory.importFor(ElementFactory.library(context, "l6"), prefixB)];
+ ElementFactory.importFor(ElementFactory.library(context, "l2"), null),
+ ElementFactory.importFor(ElementFactory.library(context, "l3"), null),
+ ElementFactory.importFor(ElementFactory.library(context, "l4"), prefixA),
+ ElementFactory.importFor(ElementFactory.library(context, "l5"), prefixA),
+ ElementFactory.importFor(ElementFactory.library(context, "l6"), prefixB)
+ ];
library.imports = imports;
List<PrefixElement> prefixes = library.prefixes;
expect(prefixes, hasLength(2));
@@ -3517,8 +3418,7 @@
CompilationUnitElementImpl unitB =
ElementFactory.compilationUnit("unit_b.dart");
library.parts = <CompilationUnitElement>[unitA, unitB];
- expect(
- library.units,
+ expect(library.units,
unorderedEquals(<CompilationUnitElement>[unitLib, unitA, unitB]));
}
@@ -3526,10 +3426,12 @@
AnalysisContext context = createAnalysisContext();
LibraryElementImpl library = ElementFactory.library(context, "app");
LibraryElementImpl libraryA = ElementFactory.library(context, "A");
- libraryA.imports =
- <ImportElementImpl>[ElementFactory.importFor(library, null)];
- library.imports =
- <ImportElementImpl>[ElementFactory.importFor(libraryA, null)];
+ libraryA.imports = <ImportElementImpl>[
+ ElementFactory.importFor(library, null)
+ ];
+ library.imports = <ImportElementImpl>[
+ ElementFactory.importFor(libraryA, null)
+ ];
List<LibraryElement> libraries = library.visibleLibraries;
expect(libraries, unorderedEquals(<LibraryElement>[library, libraryA]));
}
@@ -3547,8 +3449,9 @@
AnalysisContext context = createAnalysisContext();
LibraryElementImpl library = ElementFactory.library(context, "app");
LibraryElementImpl libraryA = ElementFactory.library(context, "A");
- library.imports =
- <ImportElementImpl>[ElementFactory.importFor(libraryA, null)];
+ library.imports = <ImportElementImpl>[
+ ElementFactory.importFor(libraryA, null)
+ ];
List<LibraryElement> libraries = library.visibleLibraries;
expect(libraries, unorderedEquals(<LibraryElement>[library, libraryA]));
}
@@ -3559,11 +3462,11 @@
LibraryElementImpl libraryA = ElementFactory.library(context, "A");
LibraryElementImpl libraryAA = ElementFactory.library(context, "AA");
libraryA.exports = <ExportElementImpl>[ElementFactory.exportFor(libraryAA)];
- library.imports =
- <ImportElementImpl>[ElementFactory.importFor(libraryA, null)];
+ library.imports = <ImportElementImpl>[
+ ElementFactory.importFor(libraryA, null)
+ ];
List<LibraryElement> libraries = library.visibleLibraries;
- expect(
- libraries,
+ expect(libraries,
unorderedEquals(<LibraryElement>[library, libraryA, libraryAA]));
}
@@ -3573,23 +3476,23 @@
LibraryElementImpl libraryA = ElementFactory.library(context, "A");
LibraryElementImpl libraryAA = ElementFactory.library(context, "AA");
LibraryElementImpl libraryB = ElementFactory.library(context, "B");
- libraryA.imports =
- <ImportElementImpl>[ElementFactory.importFor(libraryAA, null)];
+ libraryA.imports = <ImportElementImpl>[
+ ElementFactory.importFor(libraryAA, null)
+ ];
library.imports = <ImportElementImpl>[
- ElementFactory.importFor(libraryA, null),
- ElementFactory.importFor(libraryB, null)];
+ ElementFactory.importFor(libraryA, null),
+ ElementFactory.importFor(libraryB, null)
+ ];
List<LibraryElement> libraries = library.visibleLibraries;
- expect(
- libraries,
- unorderedEquals(<LibraryElement>[library, libraryA, libraryAA, libraryB]));
+ expect(libraries, unorderedEquals(
+ <LibraryElement>[library, libraryA, libraryAA, libraryB]));
}
void test_getVisibleLibraries_noImports() {
AnalysisContext context = createAnalysisContext();
LibraryElementImpl library = ElementFactory.library(context, "app");
expect(
- library.visibleLibraries,
- unorderedEquals(<LibraryElement>[library]));
+ library.visibleLibraries, unorderedEquals(<LibraryElement>[library]));
}
void test_isUpToDate() {
@@ -3606,11 +3509,12 @@
void test_setImports() {
AnalysisContext context = createAnalysisContext();
- LibraryElementImpl library =
- new LibraryElementImpl.forNode(context, AstFactory.libraryIdentifier2(["l1"]));
+ LibraryElementImpl library = new LibraryElementImpl.forNode(
+ context, AstFactory.libraryIdentifier2(["l1"]));
List<ImportElementImpl> expectedImports = [
- ElementFactory.importFor(ElementFactory.library(context, "l2"), null),
- ElementFactory.importFor(ElementFactory.library(context, "l3"), null)];
+ ElementFactory.importFor(ElementFactory.library(context, "l2"), null),
+ ElementFactory.importFor(ElementFactory.library(context, "l3"), null)
+ ];
library.imports = expectedImports;
List<ImportElement> actualImports = library.imports;
expect(actualImports, hasLength(expectedImports.length));
@@ -3625,20 +3529,16 @@
void test_fromElements_conflicting() {
Element firstElement = ElementFactory.localVariableElement2("xx");
Element secondElement = ElementFactory.localVariableElement2("yy");
- Element result =
- MultiplyDefinedElementImpl.fromElements(null, firstElement, secondElement);
+ Element result = MultiplyDefinedElementImpl.fromElements(
+ null, firstElement, secondElement);
EngineTestCase.assertInstanceOf(
- (obj) => obj is MultiplyDefinedElement,
- MultiplyDefinedElement,
- result);
+ (obj) => obj is MultiplyDefinedElement, MultiplyDefinedElement, result);
List<Element> elements =
(result as MultiplyDefinedElement).conflictingElements;
expect(elements, hasLength(2));
for (int i = 0; i < elements.length; i++) {
- EngineTestCase.assertInstanceOf(
- (obj) => obj is LocalVariableElement,
- LocalVariableElement,
- elements[i]);
+ EngineTestCase.assertInstanceOf((obj) => obj is LocalVariableElement,
+ LocalVariableElement, elements[i]);
}
}
@@ -3646,29 +3546,23 @@
Element firstElement = ElementFactory.localVariableElement2("xx");
Element secondElement = ElementFactory.localVariableElement2("yy");
Element thirdElement = ElementFactory.localVariableElement2("zz");
- Element result = MultiplyDefinedElementImpl.fromElements(
- null,
- MultiplyDefinedElementImpl.fromElements(null, firstElement, secondElement),
- thirdElement);
+ Element result = MultiplyDefinedElementImpl.fromElements(null,
+ MultiplyDefinedElementImpl.fromElements(
+ null, firstElement, secondElement), thirdElement);
EngineTestCase.assertInstanceOf(
- (obj) => obj is MultiplyDefinedElement,
- MultiplyDefinedElement,
- result);
+ (obj) => obj is MultiplyDefinedElement, MultiplyDefinedElement, result);
List<Element> elements =
(result as MultiplyDefinedElement).conflictingElements;
expect(elements, hasLength(3));
for (int i = 0; i < elements.length; i++) {
- EngineTestCase.assertInstanceOf(
- (obj) => obj is LocalVariableElement,
- LocalVariableElement,
- elements[i]);
+ EngineTestCase.assertInstanceOf((obj) => obj is LocalVariableElement,
+ LocalVariableElement, elements[i]);
}
}
void test_fromElements_nonConflicting() {
Element element = ElementFactory.localVariableElement2("xx");
- expect(
- MultiplyDefinedElementImpl.fromElements(null, element, element),
+ expect(MultiplyDefinedElementImpl.fromElements(null, element, element),
same(element));
}
}
@@ -3676,8 +3570,7 @@
@reflectiveTest
class TypeParameterTypeImplTest extends EngineTestCase {
void test_creation() {
- expect(
- new TypeParameterTypeImpl(
+ expect(new TypeParameterTypeImpl(
new TypeParameterElementImpl.forNode(AstFactory.identifier3("E"))),
isNotNull);
}
@@ -3784,8 +3677,7 @@
InterfaceTypeImpl argument = new InterfaceTypeImpl.con1(
new ClassElementImpl.forNode(AstFactory.identifier3("A")));
TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(element);
- expect(
- type.substitute2(<DartType>[argument], <DartType>[parameter]),
+ expect(type.substitute2(<DartType>[argument], <DartType>[parameter]),
same(argument));
}
@@ -3796,8 +3688,7 @@
new ClassElementImpl.forNode(AstFactory.identifier3("A")));
TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(
new TypeParameterElementImpl.forNode(AstFactory.identifier3("F")));
- expect(
- type.substitute2(<DartType>[argument], <DartType>[parameter]),
+ expect(type.substitute2(<DartType>[argument], <DartType>[parameter]),
same(type));
}
}
@@ -3890,8 +3781,7 @@
}
}
- void
- test_isMoreSpecificThan_someElementOnLHSIsNotASubtypeOfAnyElementOnRHS() {
+ void test_isMoreSpecificThan_someElementOnLHSIsNotASubtypeOfAnyElementOnRHS() {
// Unions are subtypes when some element is a subtype
expect(_uAB.isMoreSpecificThan(_uB), isTrue);
expect(_uAB.isMoreSpecificThan(_typeB), isTrue);
@@ -3946,8 +3836,8 @@
}
void test_noLossage() {
- UnionType u = UnionTypeImpl.union(
- [_typeA, _typeB, _typeB, _typeA, _typeB, _typeB]) as UnionType;
+ UnionType u = UnionTypeImpl
+ .union([_typeA, _typeB, _typeB, _typeA, _typeB, _typeB]) as UnionType;
Set<DartType> elements = u.elements;
expect(elements.contains(_typeA), isTrue);
expect(elements.contains(_typeB), isTrue);
@@ -3962,8 +3852,7 @@
List<DartType> params = [classAE.typeParameters[0].type];
DartType typeAESubbed = typeAE.substitute2(args, params);
expect(typeAE == typeAESubbed, isFalse);
- expect(
- UnionTypeImpl.union([_typeA, typeAESubbed]),
+ expect(UnionTypeImpl.union([_typeA, typeAESubbed]),
UnionTypeImpl.union([_typeA, typeAE]).substitute2(args, params));
}
@@ -4039,9 +3928,8 @@
}
}
-class _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction extends
- InterfaceTypeImpl {
-
+class _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction
+ extends InterfaceTypeImpl {
_FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction(ClassElement arg0)
: super.con1(arg0);
diff --git a/pkg/analyzer/test/generated/engine_test.dart b/pkg/analyzer/test/generated/engine_test.dart
index d20ab08..57ee31a 100644
--- a/pkg/analyzer/test/generated/engine_test.dart
+++ b/pkg/analyzer/test/generated/engine_test.dart
@@ -42,7 +42,6 @@
import 'resolver_test.dart';
import 'test_support.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(AnalysisCacheTest);
@@ -71,7 +70,6 @@
runReflectiveTests(WorkManagerTest);
}
-
@reflectiveTest
class AnalysisCacheTest extends EngineTestCase {
void test_creation() {
@@ -135,9 +133,7 @@
void test_setMaxCacheSize() {
CachePartition partition = new UniversalCachePartition(
- null,
- 8,
- new _AnalysisCacheTest_test_setMaxCacheSize());
+ null, 8, new _AnalysisCacheTest_test_setMaxCacheSize());
AnalysisCache cache = new AnalysisCache(<CachePartition>[partition]);
int size = 6;
for (int i = 0; i < size; i++) {
@@ -179,7 +175,6 @@
}
}
-
@reflectiveTest
class AnalysisContextImplTest extends EngineTestCase {
/**
@@ -208,29 +203,19 @@
</script></body></html>''');
Source libBSource = _addSource("/libB.dart", "library libB;");
_analyzeAll_assertFinished();
- expect(
- _context.getResolvedHtmlUnit(htmlSource),
- isNotNull,
+ expect(_context.getResolvedHtmlUnit(htmlSource), isNotNull,
reason: "htmlUnit resolved 1");
- expect(
- _context.getResolvedCompilationUnit2(libBSource, libBSource),
- isNotNull,
- reason: "libB resolved 1");
- expect(
- !_hasAnalysisErrorWithErrorSeverity(_context.getErrors(htmlSource)),
- isTrue,
- reason: "htmlSource doesn't have errors");
+ expect(_context.getResolvedCompilationUnit2(libBSource, libBSource),
+ isNotNull, reason: "libB resolved 1");
+ expect(!_hasAnalysisErrorWithErrorSeverity(_context.getErrors(htmlSource)),
+ isTrue, reason: "htmlSource doesn't have errors");
// remove libB.dart content and analyze
_context.setContents(libBSource, null);
_analyzeAll_assertFinished();
- expect(
- _context.getResolvedHtmlUnit(htmlSource),
- isNotNull,
+ expect(_context.getResolvedHtmlUnit(htmlSource), isNotNull,
reason: "htmlUnit resolved 1");
AnalysisErrorInfo errors = _context.getErrors(htmlSource);
- expect(
- _hasAnalysisErrorWithErrorSeverity(errors),
- isTrue,
+ expect(_hasAnalysisErrorWithErrorSeverity(errors), isTrue,
reason: "htmlSource has an error");
}
@@ -241,8 +226,10 @@
@override
void setUp() {
_context = new AnalysisContextImpl();
- _sourceFactory = new SourceFactory(
- [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk), new FileUriResolver()]);
+ _sourceFactory = new SourceFactory([
+ new DartUriResolver(DirectoryBasedDartSdk.defaultSdk),
+ new FileUriResolver()
+ ]);
_context.sourceFactory = _sourceFactory;
AnalysisOptionsImpl options =
new AnalysisOptionsImpl.con1(_context.analysisOptions);
@@ -366,10 +353,9 @@
Element declarationElement = declaration.variables.variables[0].element;
TopLevelVariableDeclaration use =
partUnit.declarations[0] as TopLevelVariableDeclaration;
- Element useElement =
- (use.variables.variables[0].initializer as SimpleIdentifier).staticElement;
- expect(
- (useElement as PropertyAccessorElement).variable,
+ Element useElement = (use.variables.variables[
+ 0].initializer as SimpleIdentifier).staticElement;
+ expect((useElement as PropertyAccessorElement).variable,
same(declarationElement));
return pumpEventQueue().then((_) {
listener.assertEvent(wereSourcesAdded: true);
@@ -587,8 +573,7 @@
// addSource("/lib1.dart", "library lib1;");
// addSource("/lib2.dart", "library lib2;");
Source source = _addSource(
- "/test.dart",
- "library test; export 'lib1.dart'; export 'lib2.dart';");
+ "/test.dart", "library test; export 'lib1.dart'; export 'lib2.dart';");
expect(_context.computeExportedLibraries(source), hasLength(2));
}
@@ -613,8 +598,7 @@
// addSource("/lib1.dart", "library lib1;");
// addSource("/lib2.dart", "library lib2;");
Source source = _addSource(
- "/test.dart",
- "library test; import 'lib1.dart'; import 'lib2.dart';");
+ "/test.dart", "library test; import 'lib1.dart'; import 'lib2.dart';");
expect(_context.computeImportedLibraries(source), hasLength(2));
}
@@ -706,9 +690,8 @@
DartEntry dartEntry = _context.getReadableSourceEntryOrNull(source);
dartEntry.flushAstStructures();
bool completed = false;
- _context.computeResolvedCompilationUnitAsync(
- source,
- source).then((CompilationUnit unit) {
+ _context.computeResolvedCompilationUnitAsync(source, source).then(
+ (CompilationUnit unit) {
expect(unit, isNotNull);
completed = true;
});
@@ -811,9 +794,9 @@
Source librarySource = _addSource("/lib.dart", "library lib;");
Source partSource = _addSource("/part.dart", "part of foo;");
bool completed = false;
- _context.computeResolvedCompilationUnitAsync(
- partSource,
- librarySource).then((_) {
+ _context
+ .computeResolvedCompilationUnitAsync(partSource, librarySource)
+ .then((_) {
fail('Expected resolution to fail');
}, onError: (e) {
expect(e, new isInstanceOf<AnalysisNotScheduledError>());
@@ -850,8 +833,7 @@
}
void test_exists_true() {
- expect(
- _context.exists(new AnalysisContextImplTest_Source_exists_true()),
+ expect(_context.exists(new AnalysisContextImplTest_Source_exists_true()),
isTrue);
}
@@ -1210,16 +1192,16 @@
void test_getModificationStamp_fromSource() {
int stamp = 42;
- expect(
- _context.getModificationStamp(
- new AnalysisContextImplTest_Source_getModificationStamp_fromSource(stamp)),
- stamp);
+ expect(_context.getModificationStamp(
+ new AnalysisContextImplTest_Source_getModificationStamp_fromSource(
+ stamp)), stamp);
}
void test_getModificationStamp_overridden() {
int stamp = 42;
Source source =
- new AnalysisContextImplTest_Source_getModificationStamp_overridden(stamp);
+ new AnalysisContextImplTest_Source_getModificationStamp_overridden(
+ stamp);
_context.setContents(source, "");
expect(stamp != _context.getModificationStamp(source), isTrue);
}
@@ -1232,9 +1214,7 @@
Namespace namespace = _context.getPublicNamespace(library);
expect(namespace, isNotNull);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ClassElement,
- ClassElement,
- namespace.get("A"));
+ (obj) => obj is ClassElement, ClassElement, namespace.get("A"));
}
void test_getRefactoringUnsafeSources() {
@@ -1445,50 +1425,35 @@
Source partSource = _addSource("/test-part.dart", "part of lib;");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
reason: "library resolved 1");
expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
reason: "part resolved 1");
// update and analyze #1
_context.setContents(libSource, "library lib;");
- expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull,
reason: "library changed 2");
- expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
reason: "part changed 2");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
reason: "library resolved 2");
- expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
reason: "part resolved 2");
// update and analyze #2
_context.setContents(libSource, "library lib; part 'test-part.dart';");
- expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull,
reason: "library changed 3");
- expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
reason: "part changed 3");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
reason: "library resolved 2");
expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
reason: "part resolved 3");
}
@@ -1498,52 +1463,37 @@
Source partSource = _addSource("/test-part.dart", "part of lib;");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
reason: "library resolved 1");
expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
reason: "part resolved 1");
// update and analyze #1
_context.setContents(libSource, "library lib;");
- expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull,
reason: "library changed 2");
- expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
reason: "part changed 2");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
reason: "library resolved 2");
- expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
reason: "part resolved 2");
// update and analyze #2
_context.setContents(partSource, "part of lib; // 1");
// Assert that changing the part's content does not effect the library
// now that it is no longer part of that library
expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
reason: "library changed 3");
- expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
reason: "part changed 3");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
reason: "library resolved 3");
- expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
reason: "part resolved 3");
}
@@ -1555,33 +1505,25 @@
Source partSource = _addSource("/part.dart", "void g() { f(null); }");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
reason: "library resolved 1");
expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
reason: "part resolved 1");
// update and analyze
_context.setContents(partSource, r'''
part of lib;
void g() { f(null); }''');
- expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull,
reason: "library changed 2");
- expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
reason: "part changed 2");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
reason: "library resolved 2");
expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
reason: "part resolved 2");
expect(_context.getErrors(libSource).errors, hasLength(0));
expect(_context.getErrors(partSource).errors, hasLength(0));
@@ -1615,50 +1557,36 @@
Source partSource = _addSource("/test-part.dart", "part of lib;");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
reason: "library resolved 1");
expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
reason: "part resolved 1");
// update and analyze #1
_context.setContents(partSource, "part of lib; // 1");
- expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull,
reason: "library changed 2");
- expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
reason: "part changed 2");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
reason: "library resolved 2");
expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
reason: "part resolved 2");
// update and analyze #2
_context.setContents(partSource, "part of lib; // 12");
- expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull,
reason: "library changed 3");
- expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNull,
+ expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
reason: "part changed 3");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
reason: "library resolved 3");
expect(
- _context.getResolvedCompilationUnit2(partSource, libSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
reason: "part resolved 3");
}
@@ -1703,28 +1631,21 @@
_addSource("/libA.dart", "library libA; import 'libB.dart';");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libASource, libASource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull,
reason: "libA resolved 1");
- expect(
- _hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)),
- isTrue,
- reason: "libA has an error");
+ expect(_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)),
+ isTrue, reason: "libA has an error");
// add libB.dart and analyze
Source libBSource = _addSource("/libB.dart", "library libB;");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libASource, libASource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull,
reason: "libA resolved 2");
expect(
- _context.getResolvedCompilationUnit2(libBSource, libBSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull,
reason: "libB resolved 2");
- expect(
- !_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)),
- isTrue,
- reason: "libA doesn't have errors");
+ expect(!_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)),
+ isTrue, reason: "libA doesn't have errors");
}
void test_performAnalysisTask_importedLibraryAdd_html() {
@@ -1734,25 +1655,17 @@
main() {print('hello dart');}
</script></body></html>''');
_analyzeAll_assertFinished();
- expect(
- _context.getResolvedHtmlUnit(htmlSource),
- isNotNull,
+ expect(_context.getResolvedHtmlUnit(htmlSource), isNotNull,
reason: "htmlUnit resolved 1");
- expect(
- _hasAnalysisErrorWithErrorSeverity(_context.getErrors(htmlSource)),
- isTrue,
- reason: "htmlSource has an error");
+ expect(_hasAnalysisErrorWithErrorSeverity(_context.getErrors(htmlSource)),
+ isTrue, reason: "htmlSource has an error");
// add libB.dart and analyze
Source libBSource = _addSource("/libB.dart", "library libB;");
_analyzeAll_assertFinished();
- expect(
- _context.getResolvedHtmlUnit(htmlSource),
- isNotNull,
+ expect(_context.getResolvedHtmlUnit(htmlSource), isNotNull,
reason: "htmlUnit resolved 1");
- expect(
- _context.getResolvedCompilationUnit2(libBSource, libBSource),
- isNotNull,
- reason: "libB resolved 2");
+ expect(_context.getResolvedCompilationUnit2(libBSource, libBSource),
+ isNotNull, reason: "libB resolved 2");
// TODO (danrubel) commented out to fix red bots
// AnalysisErrorInfo errors = _context.getErrors(htmlSource);
// expect(
@@ -1767,28 +1680,21 @@
Source libBSource = _addSource("/libB.dart", "library libB;");
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libASource, libASource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull,
reason: "libA resolved 1");
expect(
- _context.getResolvedCompilationUnit2(libBSource, libBSource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull,
reason: "libB resolved 1");
- expect(
- !_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)),
- isTrue,
- reason: "libA doesn't have errors");
+ expect(!_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)),
+ isTrue, reason: "libA doesn't have errors");
// remove libB.dart content and analyze
_context.setContents(libBSource, null);
_analyzeAll_assertFinished();
expect(
- _context.getResolvedCompilationUnit2(libASource, libASource),
- isNotNull,
+ _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull,
reason: "libA resolved 2");
- expect(
- _hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)),
- isTrue,
- reason: "libA has an error");
+ expect(_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)),
+ isTrue, reason: "libA has an error");
}
void test_performAnalysisTask_IOException() {
@@ -1811,9 +1717,7 @@
Source source =
_addSource("/test.dart", "library lib; part 'no-such-file.dart';");
_analyzeAll_assertFinished();
- expect(
- _context.getLibraryElement(source),
- isNotNull,
+ expect(_context.getLibraryElement(source), isNotNull,
reason: "performAnalysisTask failed to compute an element model");
}
@@ -1978,8 +1882,7 @@
_getIncrementalAnalysisCache(_context);
expect(incrementalCache.librarySource, librarySource);
expect(incrementalCache.resolvedUnit, same(unit));
- expect(
- _context.getResolvedCompilationUnit2(partSource, librarySource),
+ expect(_context.getResolvedCompilationUnit2(partSource, librarySource),
isNull);
expect(incrementalCache.newContents, newCode);
return pumpEventQueue().then((_) {
@@ -2028,14 +1931,7 @@
Source partSource = _addSource("/part.dart", partContents1);
_context.computeLibraryElement(librarySource);
IncrementalAnalysisCache incrementalCache = new IncrementalAnalysisCache(
- librarySource,
- librarySource,
- null,
- null,
- null,
- 0,
- 0,
- 0);
+ librarySource, librarySource, null, null, null, 0, 0, 0);
_setIncrementalAnalysisCache(_context, incrementalCache);
expect(_getIncrementalAnalysisCache(_context), same(incrementalCache));
String libraryContents2 = r'''
@@ -2043,8 +1939,7 @@
part 'part.dart';
int aa = 0;''';
_context.setContents(librarySource, libraryContents2);
- expect(
- _context.getResolvedCompilationUnit2(partSource, librarySource),
+ expect(_context.getResolvedCompilationUnit2(partSource, librarySource),
isNull);
expect(_getIncrementalAnalysisCache(_context), isNull);
return pumpEventQueue().then((_) {
@@ -2065,19 +1960,11 @@
int a = 0;''');
_context.computeLibraryElement(librarySource);
IncrementalAnalysisCache incrementalCache = new IncrementalAnalysisCache(
- librarySource,
- librarySource,
- null,
- null,
- null,
- 0,
- 0,
- 0);
+ librarySource, librarySource, null, null, null, 0, 0, 0);
_setIncrementalAnalysisCache(_context, incrementalCache);
expect(_getIncrementalAnalysisCache(_context), same(incrementalCache));
_context.setContents(librarySource, null);
- expect(
- _context.getResolvedCompilationUnit2(librarySource, librarySource),
+ expect(_context.getResolvedCompilationUnit2(librarySource, librarySource),
isNull);
expect(_getIncrementalAnalysisCache(_context), isNull);
}
@@ -2238,8 +2125,8 @@
return null;
}
- IncrementalAnalysisCache
- _getIncrementalAnalysisCache(AnalysisContextImpl context2) {
+ IncrementalAnalysisCache _getIncrementalAnalysisCache(
+ AnalysisContextImpl context2) {
return context2.test_incrementalAnalysisCache;
}
@@ -2261,8 +2148,8 @@
_context.applyChanges(changeSet);
}
- void _setIncrementalAnalysisCache(AnalysisContextImpl context,
- IncrementalAnalysisCache incrementalCache) {
+ void _setIncrementalAnalysisCache(
+ AnalysisContextImpl context, IncrementalAnalysisCache incrementalCache) {
context.test_incrementalAnalysisCache = incrementalCache;
}
@@ -2286,25 +2173,22 @@
bool exists() => true;
}
-
-class AnalysisContextImplTest_Source_getModificationStamp_fromSource extends
- TestSource {
+class AnalysisContextImplTest_Source_getModificationStamp_fromSource
+ extends TestSource {
int stamp;
AnalysisContextImplTest_Source_getModificationStamp_fromSource(this.stamp);
@override
int get modificationStamp => stamp;
}
-
-class AnalysisContextImplTest_Source_getModificationStamp_overridden extends
- TestSource {
+class AnalysisContextImplTest_Source_getModificationStamp_overridden
+ extends TestSource {
int stamp;
AnalysisContextImplTest_Source_getModificationStamp_overridden(this.stamp);
@override
int get modificationStamp => stamp;
}
-
@reflectiveTest
class AnalysisOptionsImplTest extends EngineTestCase {
void test_AnalysisOptionsImpl_copy() {
@@ -2380,7 +2264,6 @@
}
}
-
class AnalysisTask_test_perform_exception extends AnalysisTask {
AnalysisTask_test_perform_exception(InternalAnalysisContext arg0)
: super(arg0);
@@ -2397,7 +2280,6 @@
}
}
-
@reflectiveTest
class AnalysisTaskTest extends EngineTestCase {
void test_perform_exception() {
@@ -2408,46 +2290,39 @@
}
}
-
class CompilationUnitMock extends TypedMock implements CompilationUnit {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
@reflectiveTest
class DartEntryTest extends EngineTestCase {
void test_allErrors() {
Source source = new TestSource();
DartEntry entry = new DartEntry();
expect(entry.allErrors, hasLength(0));
- entry.setValue(
- SourceEntry.CONTENT_ERRORS,
+ entry.setValue(SourceEntry.CONTENT_ERRORS, <AnalysisError>[
+ new AnalysisError.con1(source, ScannerErrorCode.UNABLE_GET_CONTENT)
+ ]);
+ entry.setValue(DartEntry.SCAN_ERRORS, <AnalysisError>[
+ new AnalysisError.con1(
+ source, ScannerErrorCode.UNTERMINATED_STRING_LITERAL)
+ ]);
+ entry.setValue(DartEntry.PARSE_ERRORS, <AnalysisError>[
+ new AnalysisError.con1(source, ParserErrorCode.ABSTRACT_CLASS_MEMBER)
+ ]);
+ entry.setValueInLibrary(DartEntry.RESOLUTION_ERRORS, source,
<AnalysisError>[
- new AnalysisError.con1(source, ScannerErrorCode.UNABLE_GET_CONTENT)]);
- entry.setValue(
- DartEntry.SCAN_ERRORS,
+ new AnalysisError.con1(
+ source, CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION)
+ ]);
+ entry.setValueInLibrary(DartEntry.VERIFICATION_ERRORS, source,
<AnalysisError>[
- new AnalysisError.con1(source, ScannerErrorCode.UNTERMINATED_STRING_LITERAL)]);
- entry.setValue(
- DartEntry.PARSE_ERRORS,
- <AnalysisError>[
- new AnalysisError.con1(source, ParserErrorCode.ABSTRACT_CLASS_MEMBER)]);
- entry.setValueInLibrary(
- DartEntry.RESOLUTION_ERRORS,
- source,
- <AnalysisError>[
- new AnalysisError.con1(
- source,
- CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION)]);
- entry.setValueInLibrary(
- DartEntry.VERIFICATION_ERRORS,
- source,
- <AnalysisError>[
- new AnalysisError.con1(source, StaticWarningCode.CASE_BLOCK_NOT_TERMINATED)]);
- entry.setValueInLibrary(
- DartEntry.HINTS,
- source,
- <AnalysisError>[new AnalysisError.con1(source, HintCode.DEAD_CODE)]);
+ new AnalysisError.con1(
+ source, StaticWarningCode.CASE_BLOCK_NOT_TERMINATED)
+ ]);
+ entry.setValueInLibrary(DartEntry.HINTS, source, <AnalysisError>[
+ new AnalysisError.con1(source, HintCode.DEAD_CODE)
+ ]);
expect(entry.allErrors, hasLength(6));
}
@@ -2456,42 +2331,33 @@
DartEntry entry = new DartEntry();
expect(entry.getState(SourceEntry.CONTENT), same(CacheState.INVALID));
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.INVALID));
- expect(
- entry.getState(DartEntry.CONTAINING_LIBRARIES),
+ expect(entry.getState(DartEntry.CONTAINING_LIBRARIES),
same(CacheState.INVALID));
expect(entry.getState(DartEntry.ELEMENT), same(CacheState.INVALID));
expect(
- entry.getState(DartEntry.EXPORTED_LIBRARIES),
- same(CacheState.INVALID));
+ entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.INVALID));
expect(
- entry.getState(DartEntry.IMPORTED_LIBRARIES),
- same(CacheState.INVALID));
+ entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.INVALID));
expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.INVALID));
expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.INVALID));
expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.INVALID));
expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.INVALID));
expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.INVALID));
expect(
- entry.getState(DartEntry.PUBLIC_NAMESPACE),
- same(CacheState.INVALID));
+ entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.INVALID));
expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.INVALID));
expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.INVALID));
expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource),
same(CacheState.INVALID));
expect(
entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, librarySource),
@@ -2521,8 +2387,8 @@
PartDirective partDirective = AstFactory.partDirective2(partUri);
partDirective.source = partSource;
partDirective.uriContent = partUri;
- CompilationUnit unit =
- AstFactory.compilationUnit3([importDirective, exportDirective, partDirective]);
+ CompilationUnit unit = AstFactory
+ .compilationUnit3([importDirective, exportDirective, partDirective]);
DartEntry entry = new DartEntry();
entry.setValue(DartEntry.PARSED_UNIT, unit);
entry.getValue(DartEntry.PARSED_UNIT);
@@ -2567,13 +2433,11 @@
PartDirective partDirective = AstFactory.partDirective2(partUri);
partDirective.source = partSource;
partDirective.uriContent = partUri;
- CompilationUnit unit =
- AstFactory.compilationUnit3([importDirective, exportDirective, partDirective]);
+ CompilationUnit unit = AstFactory
+ .compilationUnit3([importDirective, exportDirective, partDirective]);
DartEntry entry = new DartEntry();
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- new TestSource("lib.dart"),
- unit);
+ DartEntry.RESOLVED_UNIT, new TestSource("lib.dart"), unit);
CompilationUnit result = entry.resolvableCompilationUnit;
expect(result, isNot(same(unit)));
NodeList<Directive> directives = result.directives;
@@ -2637,8 +2501,7 @@
try {
entry.getValue(DartEntry.RESOLUTION_ERRORS);
fail("Expected IllegalArgumentException for RESOLUTION_ERRORS");
- } on ArgumentError catch (exception) {
- }
+ } on ArgumentError catch (exception) {}
}
void test_getValue_invalid_verificationErrors() {
@@ -2667,17 +2530,11 @@
Source source3 = new TestSource();
DartEntry entry = new DartEntry();
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- source1,
- AstFactory.compilationUnit());
+ DartEntry.RESOLVED_UNIT, source1, AstFactory.compilationUnit());
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- source2,
- AstFactory.compilationUnit());
+ DartEntry.RESOLVED_UNIT, source2, AstFactory.compilationUnit());
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- source3,
- AstFactory.compilationUnit());
+ DartEntry.RESOLVED_UNIT, source3, AstFactory.compilationUnit());
try {
entry.getValueInLibrary(DartEntry.ELEMENT, source3);
fail("Expected IllegalArgumentException for ELEMENT");
@@ -2731,45 +2588,35 @@
entry.invalidateAllInformation();
expect(entry.getState(SourceEntry.CONTENT), same(CacheState.INVALID));
expect(
- entry.getState(SourceEntry.CONTENT_ERRORS),
- same(CacheState.INVALID));
+ entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.INVALID));
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.INVALID));
expect(
- entry.getState(DartEntry.CONTAINING_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.ELEMENT), same(CacheState.INVALID));
expect(
- entry.getState(DartEntry.EXPORTED_LIBRARIES),
- same(CacheState.INVALID));
+ entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.INVALID));
expect(
- entry.getState(DartEntry.IMPORTED_LIBRARIES),
- same(CacheState.INVALID));
+ entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.INVALID));
expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.INVALID));
expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.INVALID));
expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.INVALID));
expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.INVALID));
expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.INVALID));
expect(
- entry.getState(DartEntry.PUBLIC_NAMESPACE),
- same(CacheState.INVALID));
+ entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.INVALID));
expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.INVALID));
expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.INVALID));
expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource),
same(CacheState.INVALID));
expect(
entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, librarySource),
@@ -2784,41 +2631,32 @@
expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID));
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.CONTAINING_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.ELEMENT), same(CacheState.INVALID));
expect(
- entry.getState(DartEntry.EXPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.IMPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID));
expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.INVALID));
expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.INVALID));
expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.VALID));
expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.PUBLIC_NAMESPACE),
- same(CacheState.INVALID));
+ entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.INVALID));
expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.VALID));
expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID));
expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource),
same(CacheState.INVALID));
expect(
entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, librarySource),
@@ -2833,41 +2671,32 @@
expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID));
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.CONTAINING_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.ELEMENT), same(CacheState.INVALID));
expect(
- entry.getState(DartEntry.EXPORTED_LIBRARIES),
- same(CacheState.INVALID));
+ entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.INVALID));
expect(
- entry.getState(DartEntry.IMPORTED_LIBRARIES),
- same(CacheState.INVALID));
+ entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.INVALID));
expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.INVALID));
expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.INVALID));
expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.INVALID));
expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.VALID));
expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.PUBLIC_NAMESPACE),
- same(CacheState.INVALID));
+ entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.INVALID));
expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.VALID));
expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID));
expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, librarySource),
same(CacheState.INVALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource),
same(CacheState.INVALID));
expect(
entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, librarySource),
@@ -2909,21 +2738,17 @@
Source secondLibrary = new TestSource('second.dart');
DartEntry entry = _entryWithValidState(firstLibrary, secondLibrary);
entry.recordBuildElementErrorInLibrary(
- firstLibrary,
- new CaughtException(new AnalysisException(), null));
+ firstLibrary, new CaughtException(new AnalysisException(), null));
expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID));
expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID));
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.CONTAINING_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.ELEMENT), same(CacheState.ERROR));
expect(
- entry.getState(DartEntry.EXPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.IMPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID));
expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.ERROR));
expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.ERROR));
@@ -2934,39 +2759,28 @@
expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID));
expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary),
same(CacheState.VALID));
expect(
entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary),
@@ -2977,21 +2791,18 @@
Source firstLibrary = new TestSource('first.dart');
// Source secondLibrary = new TestSource('second.dart');
DartEntry entry = _entryWithValidState(firstLibrary);
- entry.recordContentError(
- new CaughtException(new AnalysisException(), null));
+ entry
+ .recordContentError(new CaughtException(new AnalysisException(), null));
expect(entry.getState(SourceEntry.CONTENT), same(CacheState.ERROR));
expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID));
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.ERROR));
expect(
- entry.getState(DartEntry.CONTAINING_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.ELEMENT), same(CacheState.ERROR));
expect(
- entry.getState(DartEntry.EXPORTED_LIBRARIES),
- same(CacheState.ERROR));
+ entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.ERROR));
expect(
- entry.getState(DartEntry.IMPORTED_LIBRARIES),
- same(CacheState.ERROR));
+ entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.ERROR));
expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.ERROR));
expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.ERROR));
expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.ERROR));
@@ -3002,23 +2813,17 @@
expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.ERROR));
expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
same(CacheState.ERROR));
// The following lines are commented out because we don't currently have
@@ -3038,21 +2843,17 @@
Source secondLibrary = new TestSource('second.dart');
DartEntry entry = _entryWithValidState(firstLibrary, secondLibrary);
entry.recordHintErrorInLibrary(
- firstLibrary,
- new CaughtException(new AnalysisException(), null));
+ firstLibrary, new CaughtException(new AnalysisException(), null));
expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID));
expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID));
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.CONTAINING_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.ELEMENT), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.EXPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.IMPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID));
expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.VALID));
expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.VALID));
@@ -3063,39 +2864,28 @@
expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID));
expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary),
same(CacheState.VALID));
expect(
entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary),
@@ -3111,15 +2901,12 @@
expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID));
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.CONTAINING_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.ELEMENT), same(CacheState.ERROR));
expect(
- entry.getState(DartEntry.EXPORTED_LIBRARIES),
- same(CacheState.ERROR));
+ entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.ERROR));
expect(
- entry.getState(DartEntry.IMPORTED_LIBRARIES),
- same(CacheState.ERROR));
+ entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.ERROR));
expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.ERROR));
expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.ERROR));
expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.ERROR));
@@ -3130,23 +2917,17 @@
expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.ERROR));
expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
same(CacheState.ERROR));
// The following lines are commented out because we don't currently have
@@ -3171,15 +2952,12 @@
expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID));
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.CONTAINING_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.ELEMENT), same(CacheState.ERROR));
expect(
- entry.getState(DartEntry.EXPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.IMPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID));
expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.ERROR));
expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.ERROR));
@@ -3190,23 +2968,17 @@
expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID));
expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
same(CacheState.ERROR));
// The following lines are commented out because we don't currently have
@@ -3226,21 +2998,17 @@
Source secondLibrary = new TestSource('second.dart');
DartEntry entry = _entryWithValidState(firstLibrary, secondLibrary);
entry.recordResolutionErrorInLibrary(
- firstLibrary,
- new CaughtException(new AnalysisException(), null));
+ firstLibrary, new CaughtException(new AnalysisException(), null));
expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID));
expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID));
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.CONTAINING_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.ELEMENT), same(CacheState.ERROR));
expect(
- entry.getState(DartEntry.EXPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.IMPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID));
expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.ERROR));
expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.ERROR));
@@ -3251,39 +3019,28 @@
expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID));
expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary),
same(CacheState.VALID));
expect(
entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary),
@@ -3299,15 +3056,12 @@
expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID));
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.ERROR));
expect(
- entry.getState(DartEntry.CONTAINING_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.ELEMENT), same(CacheState.ERROR));
expect(
- entry.getState(DartEntry.EXPORTED_LIBRARIES),
- same(CacheState.ERROR));
+ entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.ERROR));
expect(
- entry.getState(DartEntry.IMPORTED_LIBRARIES),
- same(CacheState.ERROR));
+ entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.ERROR));
expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.ERROR));
expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.ERROR));
expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.ERROR));
@@ -3318,23 +3072,17 @@
expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.ERROR));
expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
same(CacheState.ERROR));
// The following lines are commented out because we don't currently have
@@ -3354,21 +3102,17 @@
Source secondLibrary = new TestSource('second.dart');
DartEntry entry = _entryWithValidState(firstLibrary, secondLibrary);
entry.recordVerificationErrorInLibrary(
- firstLibrary,
- new CaughtException(new AnalysisException(), null));
+ firstLibrary, new CaughtException(new AnalysisException(), null));
expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID));
expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID));
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.CONTAINING_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.ELEMENT), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.EXPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.IMPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID));
expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.VALID));
expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.VALID));
@@ -3379,39 +3123,28 @@
expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID));
expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
same(CacheState.ERROR));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary),
same(CacheState.VALID));
expect(
entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary),
@@ -3424,17 +3157,11 @@
Source source3 = new TestSource('third.dart');
DartEntry entry = new DartEntry();
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- source1,
- AstFactory.compilationUnit());
+ DartEntry.RESOLVED_UNIT, source1, AstFactory.compilationUnit());
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- source2,
- AstFactory.compilationUnit());
+ DartEntry.RESOLVED_UNIT, source2, AstFactory.compilationUnit());
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- source3,
- AstFactory.compilationUnit());
+ DartEntry.RESOLVED_UNIT, source3, AstFactory.compilationUnit());
entry.removeResolution(source1);
}
@@ -3444,17 +3171,11 @@
Source source3 = new TestSource('third.dart');
DartEntry entry = new DartEntry();
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- source1,
- AstFactory.compilationUnit());
+ DartEntry.RESOLVED_UNIT, source1, AstFactory.compilationUnit());
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- source2,
- AstFactory.compilationUnit());
+ DartEntry.RESOLVED_UNIT, source2, AstFactory.compilationUnit());
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- source3,
- AstFactory.compilationUnit());
+ DartEntry.RESOLVED_UNIT, source3, AstFactory.compilationUnit());
entry.removeResolution(source3);
}
@@ -3464,17 +3185,11 @@
Source source3 = new TestSource('third.dart');
DartEntry entry = new DartEntry();
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- source1,
- AstFactory.compilationUnit());
+ DartEntry.RESOLVED_UNIT, source1, AstFactory.compilationUnit());
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- source2,
- AstFactory.compilationUnit());
+ DartEntry.RESOLVED_UNIT, source2, AstFactory.compilationUnit());
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- source3,
- AstFactory.compilationUnit());
+ DartEntry.RESOLVED_UNIT, source3, AstFactory.compilationUnit());
entry.removeResolution(source2);
}
@@ -3482,9 +3197,7 @@
Source source1 = new TestSource();
DartEntry entry = new DartEntry();
entry.setValueInLibrary(
- DartEntry.RESOLVED_UNIT,
- source1,
- AstFactory.compilationUnit());
+ DartEntry.RESOLVED_UNIT, source1, AstFactory.compilationUnit());
entry.removeResolution(source1);
}
@@ -3578,8 +3291,7 @@
try {
entry.setState(SourceEntry.LINE_INFO, CacheState.VALID);
fail("Expected ArgumentError for a state of VALID");
- } on ArgumentError catch (exception) {
- }
+ } on ArgumentError catch (exception) {}
}
void test_setState_invalid_verificationErrors() {
@@ -3641,9 +3353,8 @@
}
void test_setValue_element() {
- _setValue(
- DartEntry.ELEMENT,
- new LibraryElementImpl.forNode(null, AstFactory.libraryIdentifier2(["lib"])));
+ _setValue(DartEntry.ELEMENT, new LibraryElementImpl.forNode(
+ null, AstFactory.libraryIdentifier2(["lib"])));
}
void test_setValue_exportedLibraries() {
@@ -3651,9 +3362,9 @@
}
void test_setValue_hints() {
- _setValueInLibrary(
- DartEntry.HINTS,
- <AnalysisError>[new AnalysisError.con1(null, HintCode.DEAD_CODE)]);
+ _setValueInLibrary(DartEntry.HINTS, <AnalysisError>[
+ new AnalysisError.con1(null, HintCode.DEAD_CODE)
+ ]);
}
void test_setValue_importedLibraries() {
@@ -3681,25 +3392,21 @@
}
void test_setValue_parseErrors() {
- _setValue(
- DartEntry.PARSE_ERRORS,
- <AnalysisError>[
- new AnalysisError.con1(null, ParserErrorCode.ABSTRACT_CLASS_MEMBER)]);
+ _setValue(DartEntry.PARSE_ERRORS, <AnalysisError>[
+ new AnalysisError.con1(null, ParserErrorCode.ABSTRACT_CLASS_MEMBER)
+ ]);
}
void test_setValue_publicNamespace() {
- _setValue(
- DartEntry.PUBLIC_NAMESPACE,
+ _setValue(DartEntry.PUBLIC_NAMESPACE,
new Namespace(new HashMap<String, Element>()));
}
void test_setValue_resolutionErrors() {
- _setValueInLibrary(
- DartEntry.RESOLUTION_ERRORS,
- <AnalysisError>[
- new AnalysisError.con1(
- null,
- CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION)]);
+ _setValueInLibrary(DartEntry.RESOLUTION_ERRORS, <AnalysisError>[
+ new AnalysisError.con1(
+ null, CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION)
+ ]);
}
void test_setValue_resolvedUnit() {
@@ -3707,12 +3414,10 @@
}
void test_setValue_scanErrors() {
- _setValue(
- DartEntry.SCAN_ERRORS,
- <AnalysisError>[
- new AnalysisError.con1(
- null,
- ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT)]);
+ _setValue(DartEntry.SCAN_ERRORS, <AnalysisError>[
+ new AnalysisError.con1(
+ null, ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT)
+ ]);
}
void test_setValue_sourceKind() {
@@ -3724,10 +3429,9 @@
}
void test_setValue_verificationErrors() {
- _setValueInLibrary(
- DartEntry.VERIFICATION_ERRORS,
- <AnalysisError>[
- new AnalysisError.con1(null, StaticWarningCode.CASE_BLOCK_NOT_TERMINATED)]);
+ _setValueInLibrary(DartEntry.VERIFICATION_ERRORS, <AnalysisError>[
+ new AnalysisError.con1(null, StaticWarningCode.CASE_BLOCK_NOT_TERMINATED)
+ ]);
}
DartEntry _entryWithValidState([Source firstLibrary, Source secondLibrary]) {
@@ -3755,9 +3459,7 @@
entry.setValueInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary, null);
entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary, null);
entry.setValueInLibrary(
- DartEntry.VERIFICATION_ERRORS,
- firstLibrary,
- null);
+ DartEntry.VERIFICATION_ERRORS, firstLibrary, null);
}
if (secondLibrary != null) {
entry.setValueInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary, null);
@@ -3766,9 +3468,7 @@
entry.setValueInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary, null);
entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary, null);
entry.setValueInLibrary(
- DartEntry.VERIFICATION_ERRORS,
- secondLibrary,
- null);
+ DartEntry.VERIFICATION_ERRORS, secondLibrary, null);
}
//
// Validate that the state was set correctly.
@@ -3777,15 +3477,12 @@
expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID));
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.CONTAINING_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.ELEMENT), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.EXPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID));
expect(
- entry.getState(DartEntry.IMPORTED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID));
expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.VALID));
expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.VALID));
@@ -3796,40 +3493,31 @@
expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID));
expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID));
if (firstLibrary != null) {
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary),
same(CacheState.VALID));
expect(
entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary),
same(CacheState.VALID));
}
if (secondLibrary != null) {
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.HINTS, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.HINTS, secondLibrary),
same(CacheState.VALID));
expect(
entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary),
same(CacheState.VALID));
- expect(
- entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary),
+ expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary),
same(CacheState.VALID));
expect(
entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary),
@@ -3848,13 +3536,11 @@
void _setStateInLibrary(DataDescriptor descriptor) {
Source source = new TestSource();
DartEntry entry = new DartEntry();
- expect(
- entry.getStateInLibrary(descriptor, source),
+ expect(entry.getStateInLibrary(descriptor, source),
isNot(same(CacheState.FLUSHED)));
entry.setStateInLibrary(descriptor, source, CacheState.FLUSHED);
expect(
- entry.getStateInLibrary(descriptor, source),
- same(CacheState.FLUSHED));
+ entry.getStateInLibrary(descriptor, source), same(CacheState.FLUSHED));
}
void _setValue(DataDescriptor descriptor, Object newValue) {
@@ -3877,7 +3563,6 @@
}
}
-
@reflectiveTest
class GenerateDartErrorsTaskTest extends EngineTestCase {
void test_accept() {
@@ -3952,20 +3637,16 @@
context.getResolvedCompilationUnit(source, libraryElement);
GenerateDartErrorsTask task =
new GenerateDartErrorsTask(context, source, unit, libraryElement);
- task.perform(
- new GenerateDartErrorsTaskTestTV_perform_validateDirectives(
- libraryElement,
- source));
+ task.perform(new GenerateDartErrorsTaskTestTV_perform_validateDirectives(
+ libraryElement, source));
}
}
-
class GenerateDartErrorsTaskTestTV_accept extends TestTaskVisitor<bool> {
@override
bool visitGenerateDartErrorsTask(GenerateDartErrorsTask task) => true;
}
-
class GenerateDartErrorsTaskTestTV_perform extends TestTaskVisitor<bool> {
LibraryElement libraryElement;
Source source;
@@ -3984,13 +3665,12 @@
}
}
-
-class GenerateDartErrorsTaskTestTV_perform_validateDirectives extends
- TestTaskVisitor<bool> {
+class GenerateDartErrorsTaskTestTV_perform_validateDirectives
+ extends TestTaskVisitor<bool> {
LibraryElement libraryElement;
Source source;
- GenerateDartErrorsTaskTestTV_perform_validateDirectives(this.libraryElement,
- this.source);
+ GenerateDartErrorsTaskTestTV_perform_validateDirectives(
+ this.libraryElement, this.source);
@override
bool visitGenerateDartErrorsTask(GenerateDartErrorsTask task) {
CaughtException exception = task.exception;
@@ -4006,7 +3686,6 @@
}
}
-
@reflectiveTest
class GenerateDartHintsTaskTest extends EngineTestCase {
void test_accept() {
@@ -4055,21 +3734,17 @@
context.getModificationStamp(partSource),
context.resolveCompilationUnit2(partSource, librarySource));
GenerateDartHintsTask task = new GenerateDartHintsTask(
- context,
- units,
- context.computeLibraryElement(librarySource));
+ context, units, context.computeLibraryElement(librarySource));
task.perform(
new GenerateDartHintsTaskTestTV_perform(librarySource, partSource));
}
}
-
class GenerateDartHintsTaskTestTV_accept extends TestTaskVisitor<bool> {
@override
bool visitGenerateDartHintsTask(GenerateDartHintsTask task) => true;
}
-
class GenerateDartHintsTaskTestTV_perform extends TestTaskVisitor<bool> {
Source librarySource;
Source partSource;
@@ -4126,9 +3801,7 @@
context.getModificationStamp(librarySource),
context.resolveCompilationUnit2(librarySource, librarySource));
GenerateDartLintsTask task = new GenerateDartLintsTask(
- context,
- units,
- context.computeLibraryElement(librarySource));
+ context, units, context.computeLibraryElement(librarySource));
task.perform(new GenerateDartLintsTaskTestTV_perform(librarySource));
}
}
@@ -4201,7 +3874,6 @@
bool visitGetContentTask(GetContentTask task) => true;
}
-
class GetContentTaskTestTV_perform_exception extends TestTaskVisitor<bool> {
@override
bool visitGetContentTask(GetContentTask task) {
@@ -4226,7 +3898,6 @@
}
}
-
@reflectiveTest
class HtmlEntryTest extends EngineTestCase {
void set state(DataDescriptor descriptor) {
@@ -4245,17 +3916,15 @@
Source source = new TestSource();
HtmlEntry entry = new HtmlEntry();
expect(entry.allErrors, hasLength(0));
- entry.setValue(
- HtmlEntry.PARSE_ERRORS,
- <AnalysisError>[
- new AnalysisError.con1(source, ParserErrorCode.EXPECTED_TOKEN, [";"])]);
- entry.setValue(
- HtmlEntry.RESOLUTION_ERRORS,
- <AnalysisError>[
- new AnalysisError.con1(source, HtmlWarningCode.INVALID_URI, ["-"])]);
- entry.setValue(
- HtmlEntry.HINTS,
- <AnalysisError>[new AnalysisError.con1(source, HintCode.DEAD_CODE)]);
+ entry.setValue(HtmlEntry.PARSE_ERRORS, <AnalysisError>[
+ new AnalysisError.con1(source, ParserErrorCode.EXPECTED_TOKEN, [";"])
+ ]);
+ entry.setValue(HtmlEntry.RESOLUTION_ERRORS, <AnalysisError>[
+ new AnalysisError.con1(source, HtmlWarningCode.INVALID_URI, ["-"])
+ ]);
+ entry.setValue(HtmlEntry.HINTS, <AnalysisError>[
+ new AnalysisError.con1(source, HintCode.DEAD_CODE)
+ ]);
expect(entry.allErrors, hasLength(3));
}
@@ -4268,11 +3937,9 @@
expect(entry.getState(HtmlEntry.PARSE_ERRORS), same(CacheState.VALID));
expect(entry.getState(HtmlEntry.PARSED_UNIT), same(CacheState.VALID));
expect(
- entry.getState(HtmlEntry.REFERENCED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(HtmlEntry.REFERENCED_LIBRARIES), same(CacheState.VALID));
expect(
- entry.getState(HtmlEntry.RESOLUTION_ERRORS),
- same(CacheState.INVALID));
+ entry.getState(HtmlEntry.RESOLUTION_ERRORS), same(CacheState.INVALID));
}
void test_invalidateAllResolutionInformation_includingUris() {
@@ -4283,12 +3950,10 @@
expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID));
expect(entry.getState(HtmlEntry.PARSE_ERRORS), same(CacheState.VALID));
expect(entry.getState(HtmlEntry.PARSED_UNIT), same(CacheState.VALID));
- expect(
- entry.getState(HtmlEntry.REFERENCED_LIBRARIES),
+ expect(entry.getState(HtmlEntry.REFERENCED_LIBRARIES),
same(CacheState.INVALID));
expect(
- entry.getState(HtmlEntry.RESOLUTION_ERRORS),
- same(CacheState.INVALID));
+ entry.getState(HtmlEntry.RESOLUTION_ERRORS), same(CacheState.INVALID));
}
void test_setState_element() {
@@ -4324,9 +3989,9 @@
}
void test_setValue_hints() {
- _setValue(
- HtmlEntry.HINTS,
- <AnalysisError>[new AnalysisError.con1(null, HintCode.DEAD_CODE)]);
+ _setValue(HtmlEntry.HINTS, <AnalysisError>[
+ new AnalysisError.con1(null, HintCode.DEAD_CODE)
+ ]);
}
void test_setValue_illegal() {
@@ -4334,8 +3999,7 @@
try {
entry.setValue(DartEntry.ELEMENT, null);
fail("Expected IllegalArgumentException for DartEntry.ELEMENT");
- } on ArgumentError catch (exception) {
- }
+ } on ArgumentError catch (exception) {}
}
void test_setValue_lineInfo() {
@@ -4347,10 +4011,9 @@
}
void test_setValue_parseErrors() {
- _setValue(
- HtmlEntry.PARSE_ERRORS,
- <AnalysisError>[
- new AnalysisError.con1(null, HtmlWarningCode.INVALID_URI, ["-"])]);
+ _setValue(HtmlEntry.PARSE_ERRORS, <AnalysisError>[
+ new AnalysisError.con1(null, HtmlWarningCode.INVALID_URI, ["-"])
+ ]);
}
void test_setValue_referencedLibraries() {
@@ -4358,10 +4021,9 @@
}
void test_setValue_resolutionErrors() {
- _setValue(
- HtmlEntry.RESOLUTION_ERRORS,
- <AnalysisError>[
- new AnalysisError.con1(null, HtmlWarningCode.INVALID_URI, ["-"])]);
+ _setValue(HtmlEntry.RESOLUTION_ERRORS, <AnalysisError>[
+ new AnalysisError.con1(null, HtmlWarningCode.INVALID_URI, ["-"])
+ ]);
}
HtmlEntry _entryWithValidState() {
@@ -4379,8 +4041,7 @@
expect(entry.getState(HtmlEntry.PARSE_ERRORS), same(CacheState.VALID));
expect(entry.getState(HtmlEntry.PARSED_UNIT), same(CacheState.VALID));
expect(
- entry.getState(HtmlEntry.REFERENCED_LIBRARIES),
- same(CacheState.VALID));
+ entry.getState(HtmlEntry.REFERENCED_LIBRARIES), same(CacheState.VALID));
expect(entry.getState(HtmlEntry.RESOLUTION_ERRORS), same(CacheState.VALID));
return entry;
}
@@ -4395,7 +4056,6 @@
}
}
-
@reflectiveTest
class IncrementalAnalysisCacheTest {
Source _source = new TestSource();
@@ -4407,14 +4067,7 @@
}
void test_cacheResult() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
CompilationUnit newUnit = new CompilationUnitMock();
_result = IncrementalAnalysisCache.cacheResult(cache, newUnit);
expect(_result, isNotNull);
@@ -4440,28 +4093,14 @@
}
void test_cacheResult_noResult() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
CompilationUnit newUnit = null;
_result = IncrementalAnalysisCache.cacheResult(cache, newUnit);
expect(_result, isNull);
}
void test_clear_differentSource() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
Source otherSource = new TestSource("blat.dart", "blat");
_result = IncrementalAnalysisCache.clear(cache, otherSource);
expect(_result, same(cache));
@@ -4473,37 +4112,16 @@
}
void test_clear_sameSource() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
_result = IncrementalAnalysisCache.clear(cache, _source);
expect(_result, isNull);
}
void test_update_append() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
DartEntry newEntry = new DartEntry();
_result = IncrementalAnalysisCache.update(
- cache,
- _source,
- "hbazlo",
- "hbazxlo",
- 4,
- 0,
- 1,
- newEntry);
+ cache, _source, "hbazlo", "hbazxlo", 4, 0, 1, newEntry);
expect(_result, isNotNull);
expect(_result.source, same(_source));
expect(_result.resolvedUnit, same(_unit));
@@ -4515,27 +4133,13 @@
}
void test_update_appendToCachedResult() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
CompilationUnit newUnit = new CompilationUnitMock();
cache = IncrementalAnalysisCache.cacheResult(cache, newUnit);
expect(cache, isNotNull);
DartEntry newEntry = new DartEntry();
_result = IncrementalAnalysisCache.update(
- cache,
- _source,
- "hbazlo",
- "hbazxlo",
- 4,
- 0,
- 1,
- newEntry);
+ cache, _source, "hbazlo", "hbazxlo", 4, 0, 1, newEntry);
expect(_result, isNotNull);
expect(_result.source, same(_source));
expect(_result.resolvedUnit, same(newUnit));
@@ -4547,26 +4151,12 @@
}
void test_update_appendWithNewResolvedUnit() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
DartEntry newEntry = new DartEntry();
CompilationUnit newUnit = new CompilationUnitMock();
newEntry.setValueInLibrary(DartEntry.RESOLVED_UNIT, _source, newUnit);
_result = IncrementalAnalysisCache.update(
- cache,
- _source,
- "hbazlo",
- "hbazxlo",
- 4,
- 0,
- 1,
- newEntry);
+ cache, _source, "hbazlo", "hbazxlo", 4, 0, 1, newEntry);
expect(_result, isNotNull);
expect(_result.source, same(_source));
expect(_result.resolvedUnit, same(newUnit));
@@ -4578,24 +4168,10 @@
}
void test_update_appendWithNoNewResolvedUnit() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
DartEntry newEntry = new DartEntry();
_result = IncrementalAnalysisCache.update(
- cache,
- _source,
- "hbazlo",
- "hbazxlo",
- 4,
- 0,
- 1,
- newEntry);
+ cache, _source, "hbazlo", "hbazxlo", 4, 0, 1, newEntry);
expect(_result, isNotNull);
expect(_result.source, same(_source));
expect(_result.resolvedUnit, same(_unit));
@@ -4607,24 +4183,10 @@
}
void test_update_delete() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
DartEntry newEntry = new DartEntry();
_result = IncrementalAnalysisCache.update(
- cache,
- _source,
- "hbazlo",
- "hzlo",
- 1,
- 2,
- 0,
- newEntry);
+ cache, _source, "hbazlo", "hzlo", 1, 2, 0, newEntry);
expect(_result, isNotNull);
expect(_result.source, same(_source));
expect(_result.resolvedUnit, same(_unit));
@@ -4636,46 +4198,18 @@
}
void test_update_insert_nonContiguous_after() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
DartEntry newEntry = new DartEntry();
_result = IncrementalAnalysisCache.update(
- cache,
- _source,
- "hbazlo",
- "hbazlox",
- 6,
- 0,
- 1,
- newEntry);
+ cache, _source, "hbazlo", "hbazlox", 6, 0, 1, newEntry);
expect(_result, isNull);
}
void test_update_insert_nonContiguous_before() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
DartEntry newEntry = new DartEntry();
_result = IncrementalAnalysisCache.update(
- cache,
- _source,
- "hbazlo",
- "xhbazlo",
- 0,
- 0,
- 1,
- newEntry);
+ cache, _source, "hbazlo", "xhbazlo", 0, 0, 1, newEntry);
expect(_result, isNull);
}
void test_update_newSource_entry() {
@@ -4684,25 +4218,11 @@
CompilationUnit oldUnit = new CompilationUnitMock();
oldEntry.setValueInLibrary(DartEntry.RESOLVED_UNIT, _source, oldUnit);
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- oldSource,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- oldEntry);
+ null, oldSource, "hello", "hbazlo", 1, 2, 3, oldEntry);
expect(cache.source, same(oldSource));
expect(cache.resolvedUnit, same(oldUnit));
_result = IncrementalAnalysisCache.update(
- cache,
- _source,
- "foo",
- "foobz",
- 3,
- 0,
- 2,
- _entry);
+ cache, _source, "foo", "foobz", 3, 0, 2, _entry);
expect(_result, isNotNull);
expect(_result.source, same(_source));
expect(_result.resolvedUnit, same(_unit));
@@ -4718,37 +4238,16 @@
CompilationUnit oldUnit = new CompilationUnitMock();
oldEntry.setValueInLibrary(DartEntry.RESOLVED_UNIT, _source, oldUnit);
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- oldSource,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- oldEntry);
+ null, oldSource, "hello", "hbazlo", 1, 2, 3, oldEntry);
expect(cache.source, same(oldSource));
expect(cache.resolvedUnit, same(oldUnit));
_result = IncrementalAnalysisCache.update(
- cache,
- _source,
- "foo",
- "foobar",
- 3,
- 0,
- 3,
- null);
+ cache, _source, "foo", "foobar", 3, 0, 3, null);
expect(_result, isNull);
}
void test_update_noCache_entry() {
_result = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
expect(_result, isNotNull);
expect(_result.source, same(_source));
expect(_result.resolvedUnit, same(_unit));
@@ -4761,14 +4260,7 @@
}
void test_update_noCache_entry_noOldSource_append() {
_result = IncrementalAnalysisCache.update(
- null,
- _source,
- null,
- "hellxo",
- 4,
- 0,
- 1,
- _entry);
+ null, _source, null, "hellxo", 4, 0, 1, _entry);
expect(_result, isNotNull);
expect(_result.source, same(_source));
expect(_result.resolvedUnit, same(_unit));
@@ -4780,46 +4272,25 @@
expect(_result.hasWork, isTrue);
}
void test_update_noCache_entry_noOldSource_delete() {
- _result =
- IncrementalAnalysisCache.update(null, _source, null, "helo", 4, 1, 0, _entry);
+ _result = IncrementalAnalysisCache.update(
+ null, _source, null, "helo", 4, 1, 0, _entry);
expect(_result, isNull);
}
void test_update_noCache_entry_noOldSource_replace() {
- _result =
- IncrementalAnalysisCache.update(null, _source, null, "helxo", 4, 1, 1, _entry);
+ _result = IncrementalAnalysisCache.update(
+ null, _source, null, "helxo", 4, 1, 1, _entry);
expect(_result, isNull);
}
void test_update_noCache_noEntry() {
_result = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- null);
+ null, _source, "hello", "hbazlo", 1, 2, 3, null);
expect(_result, isNull);
}
void test_update_replace() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
_result = IncrementalAnalysisCache.update(
- cache,
- _source,
- "hbazlo",
- "hbarrlo",
- 3,
- 1,
- 2,
- null);
+ cache, _source, "hbazlo", "hbarrlo", 3, 1, 2, null);
expect(_result, isNotNull);
expect(_result.source, same(_source));
expect(_result.resolvedUnit, same(_unit));
@@ -4835,14 +4306,7 @@
CompilationUnit badUnit = _parse("main() {bad;}");
_entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, _source, badUnit);
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- oldCode,
- newCode,
- 8,
- 1,
- 1,
- _entry);
+ null, _source, oldCode, newCode, 8, 1, 1, _entry);
CompilationUnit newUnit = _parse(newCode);
_result = IncrementalAnalysisCache.verifyStructure(cache, _source, newUnit);
expect(_result, isNull);
@@ -4861,14 +4325,7 @@
}
void test_verifyStructure_noUnit() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
CompilationUnit newUnit = null;
_result = IncrementalAnalysisCache.verifyStructure(cache, _source, newUnit);
expect(_result, same(cache));
@@ -4876,14 +4333,7 @@
}
void test_verifyStructure_otherSource() {
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- "hello",
- "hbazlo",
- 1,
- 2,
- 3,
- _entry);
+ null, _source, "hello", "hbazlo", 1, 2, 3, _entry);
CompilationUnit newUnit = new CompilationUnitMock();
Source otherSource = new TestSource("blat.dart", "blat");
_result =
@@ -4897,30 +4347,20 @@
CompilationUnit goodUnit = _parse(newCode);
_entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, _source, goodUnit);
IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- _source,
- oldCode,
- newCode,
- 1,
- 2,
- 3,
- _entry);
+ null, _source, oldCode, newCode, 1, 2, 3, _entry);
CompilationUnit newUnit = _parse(newCode);
_result = IncrementalAnalysisCache.verifyStructure(cache, _source, newUnit);
expect(_result, same(cache));
expect(_result.resolvedUnit, same(goodUnit));
}
CompilationUnit _parse(String code) {
- Scanner scanner = new Scanner(
- _source,
- new CharSequenceReader(code),
+ Scanner scanner = new Scanner(_source, new CharSequenceReader(code),
AnalysisErrorListener.NULL_LISTENER);
Parser parser = new Parser(_source, AnalysisErrorListener.NULL_LISTENER);
return parser.parseCompilationUnit(scanner.tokenize());
}
}
-
@reflectiveTest
class IncrementalAnalysisTaskTest extends EngineTestCase {
void test_accept() {
@@ -4951,8 +4391,8 @@
// assert element reference is preserved
}
- CompilationUnit _assertTask(String prefix, String removed, String added,
- String suffix) {
+ CompilationUnit _assertTask(
+ String prefix, String removed, String added, String suffix) {
String oldCode = "$prefix$removed$suffix";
String newCode = "$prefix$added$suffix";
InternalAnalysisContext context = AnalysisContextFactory.contextWithCore();
@@ -4961,14 +4401,8 @@
CompilationUnit oldUnit = context.resolveCompilationUnit2(source, source);
expect(oldUnit, isNotNull);
entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, source, oldUnit);
- IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(
- null,
- source,
- oldCode,
- newCode,
- prefix.length,
- removed.length,
- added.length,
+ IncrementalAnalysisCache cache = IncrementalAnalysisCache.update(null,
+ source, oldCode, newCode, prefix.length, removed.length, added.length,
entry);
expect(cache, isNotNull);
IncrementalAnalysisTask task = new IncrementalAnalysisTask(context, cache);
@@ -4979,28 +4413,23 @@
}
}
-
class IncrementalAnalysisTaskTestTV_accept extends TestTaskVisitor<bool> {
@override
bool visitIncrementalAnalysisTask(IncrementalAnalysisTask task) => true;
}
-
-class IncrementalAnalysisTaskTestTV_assertTask extends
- TestTaskVisitor<CompilationUnit> {
+class IncrementalAnalysisTaskTestTV_assertTask
+ extends TestTaskVisitor<CompilationUnit> {
IncrementalAnalysisTask task;
IncrementalAnalysisTaskTestTV_assertTask(this.task);
@override
- CompilationUnit
- visitIncrementalAnalysisTask(IncrementalAnalysisTask incrementalAnalysisTask) =>
- task.compilationUnit;
+ CompilationUnit visitIncrementalAnalysisTask(
+ IncrementalAnalysisTask incrementalAnalysisTask) => task.compilationUnit;
}
-
@reflectiveTest
class LintGeneratorTest extends EngineTestCase {
void test_generate() {
-
InternalAnalysisContext context = AnalysisContextFactory.contextWithCore();
ChangeSet changeSet = new ChangeSet();
Source librarySource =
@@ -5028,7 +4457,6 @@
}
void test_generate_null_visitor() {
-
InternalAnalysisContext context = AnalysisContextFactory.contextWithCore();
ChangeSet changeSet = new ChangeSet();
Source librarySource =
@@ -5056,12 +4484,9 @@
// Well-formed linter should still get called
goodLinter.testExpectations();
}
-
}
-
class LintGeneratorTest_Linter extends Linter with SimpleAstVisitor<Object> {
-
bool visited;
@override
@@ -5079,7 +4504,6 @@
}
}
-
class LintGeneratorTest_Linter_Null_Visitor extends Linter {
@override
AstVisitor getVisitor() => null;
@@ -5183,31 +4607,25 @@
* @return the task that was created
* @throws AnalysisException if the task could not be created
*/
- ParseDartTask _createParseTask(InternalAnalysisContext context, Source source,
- String content) {
+ ParseDartTask _createParseTask(
+ InternalAnalysisContext context, Source source, String content) {
ScanDartTask scanTask = new ScanDartTask(context, source, content);
scanTask.perform(new ParseDartTaskTestTV_createParseTask());
return new ParseDartTask(
- context,
- source,
- scanTask.tokenStream,
- scanTask.lineInfo);
+ context, source, scanTask.tokenStream, scanTask.lineInfo);
}
}
-
class ParseDartTaskTestTV_accept extends TestTaskVisitor<bool> {
@override
bool visitParseDartTask(ParseDartTask task) => true;
}
-
class ParseDartTaskTestTV_createParseTask extends TestTaskVisitor<Object> {
@override
Object visitScanDartTask(ScanDartTask task) => null;
}
-
class ParseDartTaskTestTV_perform_exception extends TestTaskVisitor<bool> {
@override
bool visitParseDartTask(ParseDartTask task) {
@@ -5216,7 +4634,6 @@
}
}
-
class ParseDartTaskTestTV_perform_library extends TestTaskVisitor<Object> {
InternalAnalysisContext context;
Source source;
@@ -5236,7 +4653,6 @@
}
}
-
class ParseDartTaskTestTV_perform_part extends TestTaskVisitor<Object> {
InternalAnalysisContext context;
Source source;
@@ -5256,9 +4672,8 @@
}
}
-
-class ParseDartTaskTestTV_perform_validateDirectives extends
- TestTaskVisitor<Object> {
+class ParseDartTaskTestTV_perform_validateDirectives
+ extends TestTaskVisitor<Object> {
InternalAnalysisContext context;
Source source;
ParseDartTaskTestTV_perform_validateDirectives(this.context, this.source);
@@ -5271,10 +4686,10 @@
expect(task.compilationUnit, isNotNull);
GatheringErrorListener errorListener = new GatheringErrorListener();
errorListener.addAll(task.errors);
- errorListener.assertErrorsWithCodes(
- [
- CompileTimeErrorCode.URI_WITH_INTERPOLATION,
- CompileTimeErrorCode.INVALID_URI]);
+ errorListener.assertErrorsWithCodes([
+ CompileTimeErrorCode.URI_WITH_INTERPOLATION,
+ CompileTimeErrorCode.INVALID_URI
+ ]);
expect(task.source, same(source));
expect(task.hasNonPartOfDirective, isTrue);
expect(task.hasPartOfDirective, isFalse);
@@ -5282,18 +4697,15 @@
}
}
-
@reflectiveTest
class ParseHtmlTaskTest extends EngineTestCase {
ParseHtmlTask parseContents(String contents, TestLogger testLogger) {
return parseSource(
- new TestSource('/test.dart', contents),
- contents,
- testLogger);
+ new TestSource('/test.dart', contents), contents, testLogger);
}
- ParseHtmlTask parseSource(Source source, String contents,
- TestLogger testLogger) {
+ ParseHtmlTask parseSource(
+ Source source, String contents, TestLogger testLogger) {
InternalAnalysisContext context = new AnalysisContextImpl();
context.setContents(source, contents);
context.sourceFactory = new SourceFactory([new FileUriResolver()]);
@@ -5400,8 +4812,7 @@
</html>''';
TestLogger testLogger = new TestLogger();
ParseHtmlTask task = parseSource(
- new ParseHtmlTaskTest_non_existing_source(contents),
- contents,
+ new ParseHtmlTaskTest_non_existing_source(contents), contents,
testLogger);
expect(task.referencedLibraries, hasLength(0));
expect(testLogger.errorCount, 0);
@@ -5429,7 +4840,6 @@
}
}
-
class ParseHtmlTaskTest_non_existing_source extends TestSource {
ParseHtmlTaskTest_non_existing_source(String arg0) : super(arg0);
@override
@@ -5442,13 +4852,11 @@
}
}
-
class ParseHtmlTaskTestTV_accept extends TestTaskVisitor<bool> {
@override
bool visitParseHtmlTask(ParseHtmlTask task) => true;
}
-
class ParseHtmlTaskTestTV_parseSource extends TestTaskVisitor<bool> {
InternalAnalysisContext context;
Source source;
@@ -5466,7 +4874,6 @@
}
}
-
@reflectiveTest
class PartitionManagerTest extends EngineTestCase {
void test_clearCache() {
@@ -5496,7 +4903,6 @@
}
}
-
@reflectiveTest
class ResolveDartLibraryTaskTest extends EngineTestCase {
void test_accept() {
@@ -5543,15 +4949,13 @@
}
}
-
class ResolveDartLibraryTaskTestTV_accept extends TestTaskVisitor<bool> {
@override
bool visitResolveDartLibraryTask(ResolveDartLibraryTask task) => true;
}
-
-class ResolveDartLibraryTaskTestTV_perform_exception extends
- TestTaskVisitor<bool> {
+class ResolveDartLibraryTaskTestTV_perform_exception
+ extends TestTaskVisitor<bool> {
@override
bool visitResolveDartLibraryTask(ResolveDartLibraryTask task) {
expect(task.exception, isNotNull);
@@ -5559,9 +4963,8 @@
}
}
-
-class ResolveDartLibraryTaskTestTV_perform_library extends TestTaskVisitor<bool>
- {
+class ResolveDartLibraryTaskTestTV_perform_library
+ extends TestTaskVisitor<bool> {
Source source;
ResolveDartLibraryTaskTestTV_perform_library(this.source);
@override
@@ -5577,7 +4980,6 @@
}
}
-
@reflectiveTest
class ResolveDartUnitTaskTest extends EngineTestCase {
void test_accept() {
@@ -5644,15 +5046,13 @@
}
}
-
class ResolveDartUnitTaskTestTV_accept extends TestTaskVisitor<bool> {
@override
bool visitResolveDartUnitTask(ResolveDartUnitTask task) => true;
}
-
-class ResolveDartUnitTaskTestTV_perform_exception extends TestTaskVisitor<bool>
- {
+class ResolveDartUnitTaskTestTV_perform_exception
+ extends TestTaskVisitor<bool> {
@override
bool visitResolveDartUnitTask(ResolveDartUnitTask task) {
expect(task.exception, isNotNull);
@@ -5660,7 +5060,6 @@
}
}
-
class ResolveDartUnitTaskTestTV_perform_library extends TestTaskVisitor<bool> {
Source source;
InternalAnalysisContext context;
@@ -5678,7 +5077,6 @@
}
}
-
@reflectiveTest
class ResolveHtmlTaskTest extends EngineTestCase {
void test_accept() {
@@ -5731,20 +5129,18 @@
InternalAnalysisContext context = AnalysisContextFactory.contextWithCore();
ParseHtmlTask parseTask = new ParseHtmlTask(context, source, content);
parseTask.perform(new ResolveHtmlTaskTestTV_perform_valid_2());
- ResolveHtmlTask task =
- new ResolveHtmlTask(context, source, modificationStamp, parseTask.htmlUnit);
+ ResolveHtmlTask task = new ResolveHtmlTask(
+ context, source, modificationStamp, parseTask.htmlUnit);
task.perform(
new ResolveHtmlTaskTestTV_perform_valid(modificationStamp, source));
}
}
-
class ResolveHtmlTaskTestTV_accept extends TestTaskVisitor<bool> {
@override
bool visitResolveHtmlTask(ResolveHtmlTask task) => true;
}
-
class ResolveHtmlTaskTestTV_perform_exception extends TestTaskVisitor<bool> {
@override
bool visitResolveHtmlTask(ResolveHtmlTask task) {
@@ -5753,7 +5149,6 @@
}
}
-
class ResolveHtmlTaskTestTV_perform_valid extends TestTaskVisitor<Object> {
int modificationStamp;
Source source;
@@ -5771,13 +5166,11 @@
}
}
-
class ResolveHtmlTaskTestTV_perform_valid_2 extends TestTaskVisitor<Object> {
@override
Object visitParseHtmlTask(ParseHtmlTask task) => null;
}
-
@reflectiveTest
class ScanDartTaskTest extends EngineTestCase {
void test_accept() {
@@ -5816,13 +5209,11 @@
}
}
-
class ScanDartTaskTestTV_accept extends TestTaskVisitor<bool> {
@override
bool visitScanDartTask(ScanDartTask task) => true;
}
-
class ScanDartTaskTestTV_perform_valid extends TestTaskVisitor<bool> {
InternalAnalysisContext context;
Source source;
@@ -5841,7 +5232,6 @@
}
}
-
@reflectiveTest
class SdkCachePartitionTest extends EngineTestCase {
void test_contains_false() {
@@ -5852,8 +5242,8 @@
void test_contains_true() {
SdkCachePartition partition = new SdkCachePartition(null, 8);
- SourceFactory factory =
- new SourceFactory([new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
+ SourceFactory factory = new SourceFactory(
+ [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
Source source = factory.forUri("dart:core");
expect(partition.contains(source), isTrue);
}
@@ -5863,10 +5253,8 @@
}
}
-
@reflectiveTest
class SourcesChangedEventTest {
-
void test_added() {
var source = new StringSource('', '/test.dart');
var changeSet = new ChangeSet();
@@ -5934,8 +5322,9 @@
assertEvent(event, wereSourcesRemovedOrDeleted: true);
}
- static void assertEvent(SourcesChangedEvent event, {bool wereSourcesAdded:
- false, List<Source> changedSources: Source.EMPTY_ARRAY,
+ static void assertEvent(SourcesChangedEvent event,
+ {bool wereSourcesAdded: false,
+ List<Source> changedSources: Source.EMPTY_ARRAY,
bool wereSourcesRemovedOrDeleted: false}) {
expect(event.wereSourcesAdded, wereSourcesAdded);
expect(event.changedSources, changedSources);
@@ -5943,18 +5332,17 @@
}
}
-
class SourcesChangedListener {
List<SourcesChangedEvent> actualEvents = [];
- void assertEvent({bool wereSourcesAdded: false, List<Source> changedSources:
- Source.EMPTY_ARRAY, bool wereSourcesRemovedOrDeleted: false}) {
+ void assertEvent({bool wereSourcesAdded: false,
+ List<Source> changedSources: Source.EMPTY_ARRAY,
+ bool wereSourcesRemovedOrDeleted: false}) {
if (actualEvents.isEmpty) {
fail('Expected event but found none');
}
SourcesChangedEvent actual = actualEvents.removeAt(0);
- SourcesChangedEventTest.assertEvent(
- actual,
+ SourcesChangedEventTest.assertEvent(actual,
wereSourcesAdded: wereSourcesAdded,
changedSources: changedSources,
wereSourcesRemovedOrDeleted: wereSourcesRemovedOrDeleted);
@@ -5969,7 +5357,6 @@
}
}
-
/**
* Instances of the class `TestAnalysisContext` implement an analysis context in which every
* method will cause a test to fail when invoked.
@@ -6023,6 +5410,15 @@
return null;
}
@override
+ String get name {
+ fail("Unexpected invocation of name");
+ return null;
+ }
+ @override
+ set name(String value) {
+ fail("Unexpected invocation of name");
+ }
+ @override
Stream<SourcesChangedEvent> get onSourcesChanged {
fail("Unexpected invocation of onSourcesChanged");
return null;
@@ -6038,37 +5434,37 @@
return null;
}
@override
+ ResolverVisitorFactory get resolverVisitorFactory {
+ fail("Unexpected invocation of getResolverVisitorFactory");
+ return null;
+ }
+ @override
SourceFactory get sourceFactory {
fail("Unexpected invocation of getSourceFactory");
return null;
}
+
@override
void set sourceFactory(SourceFactory factory) {
fail("Unexpected invocation of setSourceFactory");
}
+
@override
AnalysisContextStatistics get statistics {
fail("Unexpected invocation of getStatistics");
return null;
}
+
@override
TypeProvider get typeProvider {
fail("Unexpected invocation of getTypeProvider");
return null;
}
-
@override
TypeResolverVisitorFactory get typeResolverVisitorFactory {
fail("Unexpected invocation of getTypeResolverVisitorFactory");
return null;
}
-
- @override
- ResolverVisitorFactory get resolverVisitorFactory {
- fail("Unexpected invocation of getResolverVisitorFactory");
- return null;
- }
-
@override
void addListener(AnalysisListener listener) {
fail("Unexpected invocation of addListener");
@@ -6131,8 +5527,8 @@
return null;
}
@override
- Future<CompilationUnit> computeResolvedCompilationUnitAsync(Source source,
- Source librarySource) {
+ Future<CompilationUnit> computeResolvedCompilationUnitAsync(
+ Source source, Source librarySource) {
fail("Unexpected invocation of getResolvedCompilationUnitFuture");
return null;
}
@@ -6141,8 +5537,8 @@
fail("Unexpected invocation of dispose");
}
@override
- CompilationUnit ensureAnyResolvedDartUnit(Source source) {
- fail("Unexpected invocation of ensureAnyResolvedDartUnit");
+ List<CompilationUnit> ensureResolvedDartUnits(Source source) {
+ fail("Unexpected invocation of ensureResolvedDartUnits");
return null;
}
@override
@@ -6151,8 +5547,8 @@
return false;
}
@override
- CompilationUnitElement getCompilationUnitElement(Source unitSource,
- Source librarySource) {
+ CompilationUnitElement getCompilationUnitElement(
+ Source unitSource, Source librarySource) {
fail("Unexpected invocation of getCompilationUnitElement");
return null;
}
@@ -6227,14 +5623,14 @@
return null;
}
@override
- CompilationUnit getResolvedCompilationUnit(Source unitSource,
- LibraryElement library) {
+ CompilationUnit getResolvedCompilationUnit(
+ Source unitSource, LibraryElement library) {
fail("Unexpected invocation of getResolvedCompilationUnit");
return null;
}
@override
- CompilationUnit getResolvedCompilationUnit2(Source unitSource,
- Source librarySource) {
+ CompilationUnit getResolvedCompilationUnit2(
+ Source unitSource, Source librarySource) {
fail("Unexpected invocation of getResolvedCompilationUnit");
return null;
}
@@ -6244,8 +5640,8 @@
return null;
}
@override
- bool handleContentsChanged(Source source, String originalContents,
- String newContents, bool notify) {
+ bool handleContentsChanged(
+ Source source, String originalContents, String newContents, bool notify) {
fail("Unexpected invocation of handleContentsChanged");
return false;
}
@@ -6283,14 +5679,14 @@
fail("Unexpected invocation of removeListener");
}
@override
- CompilationUnit resolveCompilationUnit(Source unitSource,
- LibraryElement library) {
+ CompilationUnit resolveCompilationUnit(
+ Source unitSource, LibraryElement library) {
fail("Unexpected invocation of resolveCompilationUnit");
return null;
}
@override
- CompilationUnit resolveCompilationUnit2(Source unitSource,
- Source librarySource) {
+ CompilationUnit resolveCompilationUnit2(
+ Source unitSource, Source librarySource) {
fail("Unexpected invocation of resolveCompilationUnit");
return null;
}
@@ -6308,7 +5704,6 @@
void setContents(Source source, String contents) {
fail("Unexpected invocation of setContents");
}
-
@override
void visitCacheItems(void callback(Source source, SourceEntry dartEntry,
DataDescriptor rowDesc, CacheState state)) {
@@ -6316,7 +5711,6 @@
}
}
-
class TestAnalysisContext_test_addSourceInfo extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_addSourceInfo();
@@ -6326,7 +5720,6 @@
}
}
-
class TestAnalysisContext_test_applyChanges extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_applyChanges();
@@ -6336,9 +5729,8 @@
}
}
-
-class TestAnalysisContext_test_computeDocumentationComment extends
- TestAnalysisContext {
+class TestAnalysisContext_test_computeDocumentationComment
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_computeDocumentationComment();
@override
@@ -6348,7 +5740,6 @@
}
}
-
class TestAnalysisContext_test_computeErrors extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_computeErrors();
@@ -6359,9 +5750,8 @@
}
}
-
-class TestAnalysisContext_test_computeExportedLibraries extends
- TestAnalysisContext {
+class TestAnalysisContext_test_computeExportedLibraries
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_computeExportedLibraries();
@override
@@ -6371,7 +5761,6 @@
}
}
-
class TestAnalysisContext_test_computeHtmlElement extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_computeHtmlElement();
@@ -6382,9 +5771,8 @@
}
}
-
-class TestAnalysisContext_test_computeImportedLibraries extends
- TestAnalysisContext {
+class TestAnalysisContext_test_computeImportedLibraries
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_computeImportedLibraries();
@override
@@ -6394,7 +5782,6 @@
}
}
-
class TestAnalysisContext_test_computeKindOf extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_computeKindOf();
@@ -6405,9 +5792,8 @@
}
}
-
-class TestAnalysisContext_test_computeLibraryElement extends TestAnalysisContext
- {
+class TestAnalysisContext_test_computeLibraryElement
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_computeLibraryElement();
@override
@@ -6417,7 +5803,6 @@
}
}
-
class TestAnalysisContext_test_computeLineInfo extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_computeLineInfo();
@@ -6428,9 +5813,8 @@
}
}
-
-class TestAnalysisContext_test_computeResolvableCompilationUnit extends
- TestAnalysisContext {
+class TestAnalysisContext_test_computeResolvableCompilationUnit
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_computeResolvableCompilationUnit();
@override
@@ -6440,7 +5824,6 @@
}
}
-
class TestAnalysisContext_test_dispose extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_dispose();
@@ -6450,7 +5833,6 @@
}
}
-
class TestAnalysisContext_test_exists extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_exists();
@@ -6461,7 +5843,6 @@
}
}
-
class TestAnalysisContext_test_getAnalysisOptions extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getAnalysisOptions();
@@ -6472,20 +5853,18 @@
}
}
-
-class TestAnalysisContext_test_getCompilationUnitElement extends
- TestAnalysisContext {
+class TestAnalysisContext_test_getCompilationUnitElement
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getCompilationUnitElement();
@override
- CompilationUnitElement getCompilationUnitElement(Source unitSource,
- Source librarySource) {
+ CompilationUnitElement getCompilationUnitElement(
+ Source unitSource, Source librarySource) {
invoked = true;
return null;
}
}
-
class TestAnalysisContext_test_getContents extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getContents();
@@ -6496,7 +5875,6 @@
}
}
-
class TestAnalysisContext_test_getElement extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getElement();
@@ -6507,7 +5885,6 @@
}
}
-
class TestAnalysisContext_test_getErrors extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getErrors();
@@ -6518,7 +5895,6 @@
}
}
-
class TestAnalysisContext_test_getHtmlElement extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getHtmlElement();
@@ -6529,9 +5905,8 @@
}
}
-
-class TestAnalysisContext_test_getHtmlFilesReferencing extends
- TestAnalysisContext {
+class TestAnalysisContext_test_getHtmlFilesReferencing
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getHtmlFilesReferencing();
@override
@@ -6541,7 +5916,6 @@
}
}
-
class TestAnalysisContext_test_getHtmlSources extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getHtmlSources();
@@ -6552,7 +5926,6 @@
}
}
-
class TestAnalysisContext_test_getKindOf extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getKindOf();
@@ -6563,9 +5936,8 @@
}
}
-
-class TestAnalysisContext_test_getLaunchableClientLibrarySources extends
- TestAnalysisContext {
+class TestAnalysisContext_test_getLaunchableClientLibrarySources
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getLaunchableClientLibrarySources();
@override
@@ -6575,9 +5947,8 @@
}
}
-
-class TestAnalysisContext_test_getLaunchableServerLibrarySources extends
- TestAnalysisContext {
+class TestAnalysisContext_test_getLaunchableServerLibrarySources
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getLaunchableServerLibrarySources();
@override
@@ -6587,9 +5958,8 @@
}
}
-
-class TestAnalysisContext_test_getLibrariesContaining extends
- TestAnalysisContext {
+class TestAnalysisContext_test_getLibrariesContaining
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getLibrariesContaining();
@override
@@ -6599,9 +5969,8 @@
}
}
-
-class TestAnalysisContext_test_getLibrariesDependingOn extends
- TestAnalysisContext {
+class TestAnalysisContext_test_getLibrariesDependingOn
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getLibrariesDependingOn();
@override
@@ -6611,9 +5980,8 @@
}
}
-
-class TestAnalysisContext_test_getLibrariesReferencedFromHtml extends
- TestAnalysisContext {
+class TestAnalysisContext_test_getLibrariesReferencedFromHtml
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getLibrariesReferencedFromHtml();
@override
@@ -6623,7 +5991,6 @@
}
}
-
class TestAnalysisContext_test_getLibraryElement extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getLibraryElement();
@@ -6634,7 +6001,6 @@
}
}
-
class TestAnalysisContext_test_getLibrarySources extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getLibrarySources();
@@ -6645,7 +6011,6 @@
}
}
-
class TestAnalysisContext_test_getLineInfo extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getLineInfo();
@@ -6656,9 +6021,8 @@
}
}
-
-class TestAnalysisContext_test_getModificationStamp extends TestAnalysisContext
- {
+class TestAnalysisContext_test_getModificationStamp
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getModificationStamp();
@override
@@ -6668,7 +6032,6 @@
}
}
-
class TestAnalysisContext_test_getPublicNamespace extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getPublicNamespace();
@@ -6679,9 +6042,8 @@
}
}
-
-class TestAnalysisContext_test_getRefactoringUnsafeSources extends
- TestAnalysisContext {
+class TestAnalysisContext_test_getRefactoringUnsafeSources
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getRefactoringUnsafeSources();
@override
@@ -6691,33 +6053,30 @@
}
}
-
-class TestAnalysisContext_test_getResolvedCompilationUnit_element extends
- TestAnalysisContext {
+class TestAnalysisContext_test_getResolvedCompilationUnit_element
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getResolvedCompilationUnit_element();
@override
- CompilationUnit getResolvedCompilationUnit(Source unitSource,
- LibraryElement library) {
+ CompilationUnit getResolvedCompilationUnit(
+ Source unitSource, LibraryElement library) {
invoked = true;
return null;
}
}
-
-class TestAnalysisContext_test_getResolvedCompilationUnit_source extends
- TestAnalysisContext {
+class TestAnalysisContext_test_getResolvedCompilationUnit_source
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getResolvedCompilationUnit_source();
@override
- CompilationUnit getResolvedCompilationUnit2(Source unitSource,
- Source librarySource) {
+ CompilationUnit getResolvedCompilationUnit2(
+ Source unitSource, Source librarySource) {
invoked = true;
return null;
}
}
-
class TestAnalysisContext_test_getResolvedHtmlUnit extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getResolvedHtmlUnit();
@@ -6728,7 +6087,6 @@
}
}
-
class TestAnalysisContext_test_getSourceFactory extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getSourceFactory();
@@ -6739,7 +6097,6 @@
}
}
-
class TestAnalysisContext_test_getStatistics extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getStatistics();
@@ -6750,7 +6107,6 @@
}
}
-
class TestAnalysisContext_test_getTypeProvider extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_getTypeProvider();
@@ -6761,7 +6117,6 @@
}
}
-
class TestAnalysisContext_test_isClientLibrary extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_isClientLibrary();
@@ -6772,7 +6127,6 @@
}
}
-
class TestAnalysisContext_test_isDisposed extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_isDisposed();
@@ -6783,7 +6137,6 @@
}
}
-
class TestAnalysisContext_test_isServerLibrary extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_isServerLibrary();
@@ -6794,9 +6147,8 @@
}
}
-
-class TestAnalysisContext_test_parseCompilationUnit extends TestAnalysisContext
- {
+class TestAnalysisContext_test_parseCompilationUnit
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_parseCompilationUnit();
@override
@@ -6806,7 +6158,6 @@
}
}
-
class TestAnalysisContext_test_parseHtmlUnit extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_parseHtmlUnit();
@@ -6817,7 +6168,6 @@
}
}
-
class TestAnalysisContext_test_performAnalysisTask extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_performAnalysisTask();
@@ -6828,9 +6178,8 @@
}
}
-
-class TestAnalysisContext_test_recordLibraryElements extends TestAnalysisContext
- {
+class TestAnalysisContext_test_recordLibraryElements
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_recordLibraryElements();
@override
@@ -6839,33 +6188,30 @@
}
}
-
-class TestAnalysisContext_test_resolveCompilationUnit extends
- TestAnalysisContext {
+class TestAnalysisContext_test_resolveCompilationUnit
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_resolveCompilationUnit();
@override
- CompilationUnit resolveCompilationUnit2(Source unitSource,
- Source librarySource) {
+ CompilationUnit resolveCompilationUnit2(
+ Source unitSource, Source librarySource) {
invoked = true;
return null;
}
}
-
-class TestAnalysisContext_test_resolveCompilationUnit_element extends
- TestAnalysisContext {
+class TestAnalysisContext_test_resolveCompilationUnit_element
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_resolveCompilationUnit_element();
@override
- CompilationUnit resolveCompilationUnit(Source unitSource,
- LibraryElement library) {
+ CompilationUnit resolveCompilationUnit(
+ Source unitSource, LibraryElement library) {
invoked = true;
return null;
}
}
-
class TestAnalysisContext_test_resolveHtmlUnit extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_resolveHtmlUnit();
@@ -6876,7 +6222,6 @@
}
}
-
class TestAnalysisContext_test_setAnalysisOptions extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_setAnalysisOptions();
@@ -6886,9 +6231,8 @@
}
}
-
-class TestAnalysisContext_test_setAnalysisPriorityOrder extends
- TestAnalysisContext {
+class TestAnalysisContext_test_setAnalysisPriorityOrder
+ extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_setAnalysisPriorityOrder();
@override
@@ -6897,7 +6241,6 @@
}
}
-
class TestAnalysisContext_test_setChangedContents extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_setChangedContents();
@@ -6908,7 +6251,6 @@
}
}
-
class TestAnalysisContext_test_setContents extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_setContents();
@@ -6918,7 +6260,6 @@
}
}
-
class TestAnalysisContext_test_setSourceFactory extends TestAnalysisContext {
bool invoked = false;
TestAnalysisContext_test_setSourceFactory();
@@ -6928,7 +6269,6 @@
}
}
-
/**
* Instances of the class `TestTaskVisitor` implement a task visitor that fails if any of its
* methods are invoked. Subclasses typically override the expected methods to not cause a test
@@ -6962,8 +6302,8 @@
return null;
}
@override
- E
- visitIncrementalAnalysisTask(IncrementalAnalysisTask incrementalAnalysisTask) {
+ E visitIncrementalAnalysisTask(
+ IncrementalAnalysisTask incrementalAnalysisTask) {
fail("Unexpectedly invoked visitIncrementalAnalysisTask");
return null;
}
@@ -7005,7 +6345,6 @@
}
}
-
@reflectiveTest
class UniversalCachePartitionTest extends EngineTestCase {
void test_contains() {
@@ -7055,9 +6394,7 @@
}
void test_setMaxCacheSize() {
UniversalCachePartition partition = new UniversalCachePartition(
- null,
- 8,
- new _UniversalCachePartitionTest_test_setMaxCacheSize());
+ null, 8, new _UniversalCachePartitionTest_test_setMaxCacheSize());
int size = 6;
for (int i = 0; i < size; i++) {
Source source = new TestSource("/test$i.dart");
@@ -7082,8 +6419,8 @@
}
expect(partition.size(), size);
}
- void _assertNonFlushedCount(int expectedCount,
- UniversalCachePartition partition) {
+ void _assertNonFlushedCount(
+ int expectedCount, UniversalCachePartition partition) {
int nonFlushedCount = 0;
Map<Source, SourceEntry> entryMap = partition.map;
entryMap.values.forEach((SourceEntry value) {
@@ -7095,7 +6432,6 @@
}
}
-
@reflectiveTest
class WorkManagerTest extends EngineTestCase {
void test_addFirst() {
@@ -7118,8 +6454,7 @@
try {
iterator.next();
fail("Expected NoSuchElementException");
- } on NoSuchElementException catch (exception) {
- }
+ } on NoSuchElementException catch (exception) {}
}
void test_iterator_nonEmpty() {
TestSource source = new TestSource();
@@ -7157,16 +6492,14 @@
}
}
-
class _AnalysisCacheTest_test_setMaxCacheSize implements CacheRetentionPolicy {
@override
RetentionPriority getAstPriority(Source source, SourceEntry sourceEntry) =>
RetentionPriority.LOW;
}
-
-class _AnalysisContext_sourceChangeDuringResolution extends
- AnalysisContextForTests {
+class _AnalysisContext_sourceChangeDuringResolution
+ extends AnalysisContextForTests {
@override
DartEntry recordResolveDartLibraryTaskResults(ResolveDartLibraryTask task) {
ChangeSet changeSet = new ChangeSet();
@@ -7176,16 +6509,14 @@
}
}
-
-class _AnalysisContextImplTest_test_applyChanges_removeContainer implements
- SourceContainer {
+class _AnalysisContextImplTest_test_applyChanges_removeContainer
+ implements SourceContainer {
Source libB;
_AnalysisContextImplTest_test_applyChanges_removeContainer(this.libB);
@override
bool contains(Source source) => source == libB;
}
-
class _Source_getContent_throwException extends NonExistingSource {
_Source_getContent_throwException(String name)
: super(name, UriKind.FILE_URI);
@@ -7199,9 +6530,8 @@
bool exists() => true;
}
-
-class _UniversalCachePartitionTest_test_setMaxCacheSize implements
- CacheRetentionPolicy {
+class _UniversalCachePartitionTest_test_setMaxCacheSize
+ implements CacheRetentionPolicy {
@override
RetentionPriority getAstPriority(Source source, SourceEntry sourceEntry) =>
RetentionPriority.LOW;
diff --git a/pkg/analyzer/test/generated/incremental_resolver_test.dart b/pkg/analyzer/test/generated/incremental_resolver_test.dart
index 314b7ca..44a595c 100644
--- a/pkg/analyzer/test/generated/incremental_resolver_test.dart
+++ b/pkg/analyzer/test/generated/incremental_resolver_test.dart
@@ -25,8 +25,6 @@
import 'resolver_test.dart';
import 'test_support.dart';
-
-
main() {
groupSep = ' | ';
runReflectiveTests(DeclarationMatcherTest);
@@ -35,7 +33,6 @@
runReflectiveTests(ResolutionContextBuilderTest);
}
-
void _assertEqualError(AnalysisError incrError, AnalysisError fullError) {
expect(incrError.errorCode, same(fullError.errorCode));
expect(incrError.source, fullError.source);
@@ -44,9 +41,8 @@
expect(incrError.message, fullError.message);
}
-
-void _assertEqualErrors(List<AnalysisError> incrErrors,
- List<AnalysisError> fullErrors) {
+void _assertEqualErrors(
+ List<AnalysisError> incrErrors, List<AnalysisError> fullErrors) {
expect(incrErrors, hasLength(fullErrors.length));
if (incrErrors.isNotEmpty) {
incrErrors.sort((a, b) => a.offset - b.offset);
@@ -62,7 +58,6 @@
}
}
-
@reflectiveTest
class DeclarationMatcherTest extends ResolverTestCase {
void setUp() {
@@ -2147,8 +2142,8 @@
_assertMatchKind(DeclarationMatchKind.MATCH, oldContent, newContent);
}
- void _assertMatchKind(DeclarationMatchKind expectMatch, String oldContent,
- String newContent) {
+ void _assertMatchKind(
+ DeclarationMatchKind expectMatch, String oldContent, String newContent) {
Source source = addSource(oldContent);
LibraryElement library = resolve(source);
CompilationUnit oldUnit = resolveCompilationUnit(source, library);
@@ -2167,7 +2162,6 @@
}
}
-
@reflectiveTest
class IncrementalResolverTest extends ResolverTestCase {
Source source;
@@ -2485,8 +2479,7 @@
void _resolve(_Edit edit, Predicate<AstNode> predicate) {
int offset = edit.offset;
// parse "newCode"
- String newCode =
- code.substring(0, offset) +
+ String newCode = code.substring(0, offset) +
edit.replacement +
code.substring(offset + edit.length);
CompilationUnit newUnit = _parseUnit(newCode);
@@ -2507,10 +2500,7 @@
int updateEndOld = updateOffset + edit.length;
int updateOldNew = updateOffset + edit.replacement.length;
IncrementalResolver resolver = new IncrementalResolver(
- unit.element,
- updateOffset,
- updateEndOld,
- updateOldNew);
+ unit.element, updateOffset, updateEndOld, updateOldNew);
bool success = resolver.resolve(newNode);
expect(success, isTrue);
List<AnalysisError> newErrors = analysisContext.computeErrors(source);
@@ -2550,8 +2540,8 @@
}
}
- static AstNode _findNodeAt(CompilationUnit oldUnit, int offset,
- Predicate<AstNode> predicate) {
+ static AstNode _findNodeAt(
+ CompilationUnit oldUnit, int offset, Predicate<AstNode> predicate) {
NodeLocator locator = new NodeLocator.con1(offset);
AstNode node = locator.searchWithin(oldUnit);
return node.getAncestor(predicate);
@@ -2588,7 +2578,6 @@
}
}
-
/**
* The test for [poorMansIncrementalResolution] function and its integration
* into [AnalysisContext].
@@ -3487,8 +3476,8 @@
}
}
- void _updateAndValidate(String newCode, {bool expectedSuccess: true,
- bool compareWithFull: true}) {
+ void _updateAndValidate(String newCode,
+ {bool expectedSuccess: true, bool compareWithFull: true}) {
// Run any pending tasks tasks.
_runTasks();
// Update the source - currently this may cause incremental resolution.
@@ -3540,8 +3529,8 @@
expect(incrToken.lexeme, fullToken.lexeme);
}
- static void _assertEqualTokens(CompilationUnit incrUnit,
- CompilationUnit fullUnit) {
+ static void _assertEqualTokens(
+ CompilationUnit incrUnit, CompilationUnit fullUnit) {
Token incrToken = incrUnit.beginToken;
Token fullToken = fullUnit.beginToken;
while (incrToken.type != TokenType.EOF && fullToken.type != TokenType.EOF) {
@@ -3568,7 +3557,6 @@
}
}
-
@reflectiveTest
class ResolutionContextBuilderTest extends EngineTestCase {
GatheringErrorListener listener = new GatheringErrorListener();
@@ -3576,90 +3564,68 @@
void test_scopeFor_ClassDeclaration() {
Scope scope = _scopeFor(_createResolvedClassDeclaration());
EngineTestCase.assertInstanceOf(
- (obj) => obj is LibraryScope,
- LibraryScope,
- scope);
+ (obj) => obj is LibraryScope, LibraryScope, scope);
}
void test_scopeFor_ClassTypeAlias() {
Scope scope = _scopeFor(_createResolvedClassTypeAlias());
EngineTestCase.assertInstanceOf(
- (obj) => obj is LibraryScope,
- LibraryScope,
- scope);
+ (obj) => obj is LibraryScope, LibraryScope, scope);
}
void test_scopeFor_CompilationUnit() {
Scope scope = _scopeFor(_createResolvedCompilationUnit());
EngineTestCase.assertInstanceOf(
- (obj) => obj is LibraryScope,
- LibraryScope,
- scope);
+ (obj) => obj is LibraryScope, LibraryScope, scope);
}
void test_scopeFor_ConstructorDeclaration() {
Scope scope = _scopeFor(_createResolvedConstructorDeclaration());
EngineTestCase.assertInstanceOf(
- (obj) => obj is ClassScope,
- ClassScope,
- scope);
+ (obj) => obj is ClassScope, ClassScope, scope);
}
void test_scopeFor_ConstructorDeclaration_parameters() {
Scope scope = _scopeFor(_createResolvedConstructorDeclaration().parameters);
EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionScope,
- FunctionScope,
- scope);
+ (obj) => obj is FunctionScope, FunctionScope, scope);
}
void test_scopeFor_FunctionDeclaration() {
Scope scope = _scopeFor(_createResolvedFunctionDeclaration());
EngineTestCase.assertInstanceOf(
- (obj) => obj is LibraryScope,
- LibraryScope,
- scope);
+ (obj) => obj is LibraryScope, LibraryScope, scope);
}
void test_scopeFor_FunctionDeclaration_parameters() {
- Scope scope =
- _scopeFor(_createResolvedFunctionDeclaration().functionExpression.parameters);
+ Scope scope = _scopeFor(
+ _createResolvedFunctionDeclaration().functionExpression.parameters);
EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionScope,
- FunctionScope,
- scope);
+ (obj) => obj is FunctionScope, FunctionScope, scope);
}
void test_scopeFor_FunctionTypeAlias() {
Scope scope = _scopeFor(_createResolvedFunctionTypeAlias());
EngineTestCase.assertInstanceOf(
- (obj) => obj is LibraryScope,
- LibraryScope,
- scope);
+ (obj) => obj is LibraryScope, LibraryScope, scope);
}
void test_scopeFor_FunctionTypeAlias_parameters() {
Scope scope = _scopeFor(_createResolvedFunctionTypeAlias().parameters);
EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionTypeScope,
- FunctionTypeScope,
- scope);
+ (obj) => obj is FunctionTypeScope, FunctionTypeScope, scope);
}
void test_scopeFor_MethodDeclaration() {
Scope scope = _scopeFor(_createResolvedMethodDeclaration());
EngineTestCase.assertInstanceOf(
- (obj) => obj is ClassScope,
- ClassScope,
- scope);
+ (obj) => obj is ClassScope, ClassScope, scope);
}
void test_scopeFor_MethodDeclaration_body() {
Scope scope = _scopeFor(_createResolvedMethodDeclaration().body);
EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionScope,
- FunctionScope,
- scope);
+ (obj) => obj is FunctionScope, FunctionScope, scope);
}
void test_scopeFor_notInCompilationUnit() {
@@ -3693,17 +3659,13 @@
CompilationUnit unit = _createResolvedCompilationUnit();
String className = "C";
ClassDeclaration classNode = AstFactory.classDeclaration(
- null,
- className,
- AstFactory.typeParameterList(),
- null,
- null,
- null);
+ null, className, AstFactory.typeParameterList(), null, null, null);
unit.declarations.add(classNode);
ClassElement classElement = ElementFactory.classElement2(className);
classNode.name.staticElement = classElement;
- (unit.element as CompilationUnitElementImpl).types =
- <ClassElement>[classElement];
+ (unit.element as CompilationUnitElementImpl).types = <ClassElement>[
+ classElement
+ ];
return classNode;
}
@@ -3711,17 +3673,13 @@
CompilationUnit unit = _createResolvedCompilationUnit();
String className = "C";
ClassTypeAlias classNode = AstFactory.classTypeAlias(
- className,
- AstFactory.typeParameterList(),
- null,
- null,
- null,
- null);
+ className, AstFactory.typeParameterList(), null, null, null, null);
unit.declarations.add(classNode);
ClassElement classElement = ElementFactory.classElement2(className);
classNode.name.staticElement = classElement;
- (unit.element as CompilationUnitElementImpl).types =
- <ClassElement>[classElement];
+ (unit.element as CompilationUnitElementImpl).types = <ClassElement>[
+ classElement
+ ];
return classNode;
}
@@ -3737,16 +3695,15 @@
ClassDeclaration classNode = _createResolvedClassDeclaration();
String constructorName = "f";
ConstructorDeclaration constructorNode = AstFactory.constructorDeclaration(
- AstFactory.identifier3(constructorName),
- null,
- AstFactory.formalParameterList(),
- null);
+ AstFactory.identifier3(constructorName), null,
+ AstFactory.formalParameterList(), null);
classNode.members.add(constructorNode);
ConstructorElement constructorElement =
ElementFactory.constructorElement2(classNode.element, null);
constructorNode.element = constructorElement;
- (classNode.element as ClassElementImpl).constructors =
- <ConstructorElement>[constructorElement];
+ (classNode.element as ClassElementImpl).constructors = <ConstructorElement>[
+ constructorElement
+ ];
return constructorNode;
}
@@ -3754,25 +3711,21 @@
CompilationUnit unit = _createResolvedCompilationUnit();
String functionName = "f";
FunctionDeclaration functionNode = AstFactory.functionDeclaration(
- null,
- null,
- functionName,
- AstFactory.functionExpression());
+ null, null, functionName, AstFactory.functionExpression());
unit.declarations.add(functionNode);
FunctionElement functionElement =
ElementFactory.functionElement(functionName);
functionNode.name.staticElement = functionElement;
- (unit.element as CompilationUnitElementImpl).functions =
- <FunctionElement>[functionElement];
+ (unit.element as CompilationUnitElementImpl).functions = <FunctionElement>[
+ functionElement
+ ];
return functionNode;
}
FunctionTypeAlias _createResolvedFunctionTypeAlias() {
CompilationUnit unit = _createResolvedCompilationUnit();
FunctionTypeAlias aliasNode = AstFactory.typeAlias(
- AstFactory.typeName4("A"),
- "F",
- AstFactory.typeParameterList(),
+ AstFactory.typeName4("A"), "F", AstFactory.typeParameterList(),
AstFactory.formalParameterList());
unit.declarations.add(aliasNode);
SimpleIdentifier aliasName = aliasNode.name;
@@ -3787,19 +3740,16 @@
MethodDeclaration _createResolvedMethodDeclaration() {
ClassDeclaration classNode = _createResolvedClassDeclaration();
String methodName = "f";
- MethodDeclaration methodNode = AstFactory.methodDeclaration(
- null,
- null,
- null,
- null,
- AstFactory.identifier3(methodName),
+ MethodDeclaration methodNode = AstFactory.methodDeclaration(null, null,
+ null, null, AstFactory.identifier3(methodName),
AstFactory.formalParameterList());
classNode.members.add(methodNode);
MethodElement methodElement =
ElementFactory.methodElement(methodName, null);
methodNode.name.staticElement = methodElement;
- (classNode.element as ClassElementImpl).methods =
- <MethodElement>[methodElement];
+ (classNode.element as ClassElementImpl).methods = <MethodElement>[
+ methodElement
+ ];
return methodNode;
}
@@ -3808,7 +3758,6 @@
}
}
-
class _Edit {
final int offset;
final int length;
diff --git a/pkg/analyzer/test/generated/incremental_scanner_test.dart b/pkg/analyzer/test/generated/incremental_scanner_test.dart
index 9592bc0..c0b4365 100644
--- a/pkg/analyzer/test/generated/incremental_scanner_test.dart
+++ b/pkg/analyzer/test/generated/incremental_scanner_test.dart
@@ -121,9 +121,7 @@
// "f() => 0; g() {}"
_scan("f()", "", " => 0; g()", " {}");
_assertTokens(
- 2,
- 9,
- ["f", "(", ")", "=>", "0", ";", "g", "(", ")", "{", "}"]);
+ 2, 9, ["f", "(", ")", "=>", "0", ";", "g", "(", ")", "{", "}"]);
expect(_incrementalScanner.hasNonWhitespaceChange, isTrue);
}
@@ -386,9 +384,7 @@
}
Token comment = token.precedingComments;
if (lexemes.isEmpty) {
- expect(
- comment,
- isNull,
+ expect(comment, isNull,
reason: "No comments expected but comments found");
}
int count = 0;
@@ -415,13 +411,9 @@
void _assertEqualTokens(Token actual, Token expected) {
expect(actual.type, same(expected.type), reason: "Wrong type for token");
expect(actual.lexeme, expected.lexeme, reason: "Wrong lexeme for token");
- expect(
- actual.offset,
- expected.offset,
+ expect(actual.offset, expected.offset,
reason: "Wrong offset for token ('${actual.lexeme}' != '${expected.lexeme}')");
- expect(
- actual.length,
- expected.length,
+ expect(actual.length, expected.length,
reason: "Wrong length for token ('${actual.lexeme}' != '${expected.lexeme}')");
}
@@ -432,13 +424,9 @@
*/
void _assertTokens(int leftIndex, int rightIndex, List<String> lexemes) {
int count = lexemes.length;
- expect(
- leftIndex >= -1 && leftIndex < count,
- isTrue,
+ expect(leftIndex >= -1 && leftIndex < count, isTrue,
reason: "Invalid left index");
- expect(
- rightIndex >= 0 && rightIndex <= count,
- isTrue,
+ expect(rightIndex >= 0 && rightIndex <= count, isTrue,
reason: "Invalid right index");
Token leftToken = null;
Token rightToken = null;
@@ -463,16 +451,12 @@
if (leftIndex >= 0) {
expect(leftToken, isNotNull);
}
- expect(
- _incrementalScanner.leftToken,
- same(leftToken),
+ expect(_incrementalScanner.leftToken, same(leftToken),
reason: "Invalid left token");
if (rightIndex >= 0) {
expect(rightToken, isNotNull);
}
- expect(
- _incrementalScanner.rightToken,
- same(rightToken),
+ expect(_incrementalScanner.rightToken, same(rightToken),
reason: "Invalid right token");
}
@@ -499,9 +483,7 @@
//
GatheringErrorListener originalListener = new GatheringErrorListener();
Scanner originalScanner = new Scanner(
- source,
- new CharSequenceReader(originalContents),
- originalListener);
+ source, new CharSequenceReader(originalContents), originalListener);
_originalTokens = originalScanner.tokenize();
expect(_originalTokens, isNotNull);
//
@@ -509,9 +491,7 @@
//
GatheringErrorListener modifiedListener = new GatheringErrorListener();
Scanner modifiedScanner = new Scanner(
- source,
- new CharSequenceReader(modifiedContents),
- modifiedListener);
+ source, new CharSequenceReader(modifiedContents), modifiedListener);
Token modifiedTokens = modifiedScanner.tokenize();
expect(modifiedTokens, isNotNull);
//
@@ -519,14 +499,9 @@
//
GatheringErrorListener incrementalListener = new GatheringErrorListener();
_incrementalScanner = new IncrementalScanner(
- source,
- new CharSequenceReader(modifiedContents),
- incrementalListener);
+ source, new CharSequenceReader(modifiedContents), incrementalListener);
_incrementalTokens = _incrementalScanner.rescan(
- _originalTokens,
- replaceStart,
- removed.length,
- added.length);
+ _originalTokens, replaceStart, removed.length, added.length);
//
// Validate that the results of the incremental scan are the same as the
// full scan of the modified source.
@@ -543,24 +518,16 @@
incrementalComment = incrementalComment.next;
modifiedComment = modifiedComment.next;
}
- expect(
- incrementalComment,
- isNull,
+ expect(incrementalComment, isNull,
reason: "Too many comment tokens preceeding '${incrementalToken.lexeme}'");
- expect(
- modifiedComment,
- isNull,
+ expect(modifiedComment, isNull,
reason: "Not enough comment tokens preceeding '${incrementalToken.lexeme}'");
incrementalToken = incrementalToken.next;
modifiedTokens = modifiedTokens.next;
}
- expect(
- incrementalToken.type,
- same(TokenType.EOF),
+ expect(incrementalToken.type, same(TokenType.EOF),
reason: "Too many tokens");
- expect(
- modifiedTokens.type,
- same(TokenType.EOF),
+ expect(modifiedTokens.type, same(TokenType.EOF),
reason: "Not enough tokens");
// TODO(brianwilkerson) Verify that the errors are correct?
}
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 034544f..5fc22dc 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -15,7 +15,6 @@
import 'resolver_test.dart';
import 'test_support.dart';
-
main() {
_ut.groupSep = ' | ';
runReflectiveTests(NonErrorResolverTest);
@@ -763,12 +762,10 @@
verify([source]);
CompilationUnit unit = analysisContext.parseCompilationUnit(source);
{
- SimpleIdentifier ref =
- EngineTestCase.findNode(unit, code, "p]", (node) => node is SimpleIdentifier);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is ParameterElement,
- ParameterElement,
- ref.staticElement);
+ SimpleIdentifier ref = EngineTestCase.findNode(
+ unit, code, "p]", (node) => node is SimpleIdentifier);
+ EngineTestCase.assertInstanceOf((obj) => obj is ParameterElement,
+ ParameterElement, ref.staticElement);
}
}
@@ -782,12 +779,10 @@
assertNoErrors(source);
verify([source]);
CompilationUnit unit = analysisContext.parseCompilationUnit(source);
- SimpleIdentifier ref =
- EngineTestCase.findNode(unit, code, "p]", (node) => node is SimpleIdentifier);
+ SimpleIdentifier ref = EngineTestCase.findNode(
+ unit, code, "p]", (node) => node is SimpleIdentifier);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ParameterElement,
- ParameterElement,
- ref.staticElement);
+ (obj) => obj is ParameterElement, ParameterElement, ref.staticElement);
}
void test_commentReference_beforeFunction_expressionBody() {
@@ -799,12 +794,10 @@
assertNoErrors(source);
verify([source]);
CompilationUnit unit = analysisContext.parseCompilationUnit(source);
- SimpleIdentifier ref =
- EngineTestCase.findNode(unit, code, "p]", (node) => node is SimpleIdentifier);
+ SimpleIdentifier ref = EngineTestCase.findNode(
+ unit, code, "p]", (node) => node is SimpleIdentifier);
EngineTestCase.assertInstanceOf(
- (obj) => obj is ParameterElement,
- ParameterElement,
- ref.staticElement);
+ (obj) => obj is ParameterElement, ParameterElement, ref.staticElement);
}
void test_commentReference_beforeMethod() {
@@ -821,20 +814,16 @@
verify([source]);
CompilationUnit unit = analysisContext.parseCompilationUnit(source);
{
- SimpleIdentifier ref =
- EngineTestCase.findNode(unit, code, "p1]", (node) => node is SimpleIdentifier);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is ParameterElement,
- ParameterElement,
- ref.staticElement);
+ SimpleIdentifier ref = EngineTestCase.findNode(
+ unit, code, "p1]", (node) => node is SimpleIdentifier);
+ EngineTestCase.assertInstanceOf((obj) => obj is ParameterElement,
+ ParameterElement, ref.staticElement);
}
{
- SimpleIdentifier ref =
- EngineTestCase.findNode(unit, code, "p2]", (node) => node is SimpleIdentifier);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is ParameterElement,
- ParameterElement,
- ref.staticElement);
+ SimpleIdentifier ref = EngineTestCase.findNode(
+ unit, code, "p2]", (node) => node is SimpleIdentifier);
+ EngineTestCase.assertInstanceOf((obj) => obj is ParameterElement,
+ ParameterElement, ref.staticElement);
}
}
@@ -850,14 +839,9 @@
verify([source]);
CompilationUnit unit = analysisContext.parseCompilationUnit(source);
SimpleIdentifier ref = EngineTestCase.findNode(
- unit,
- code,
- "foo]",
- (node) => node is SimpleIdentifier);
+ unit, code, "foo]", (node) => node is SimpleIdentifier);
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodElement,
- MethodElement,
- ref.staticElement);
+ (obj) => obj is MethodElement, MethodElement, ref.staticElement);
}
void test_commentReference_setter() {
@@ -879,25 +863,15 @@
CompilationUnit unit = analysisContext.parseCompilationUnit(source);
{
SimpleIdentifier ref = EngineTestCase.findNode(
- unit,
- code,
- "x] in A",
- (node) => node is SimpleIdentifier);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is PropertyAccessorElement,
- PropertyAccessorElement,
- ref.staticElement);
+ unit, code, "x] in A", (node) => node is SimpleIdentifier);
+ EngineTestCase.assertInstanceOf((obj) => obj is PropertyAccessorElement,
+ PropertyAccessorElement, ref.staticElement);
}
{
SimpleIdentifier ref = EngineTestCase.findNode(
- unit,
- code,
- "x] in B",
- (node) => node is SimpleIdentifier);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is PropertyAccessorElement,
- PropertyAccessorElement,
- ref.staticElement);
+ unit, code, "x] in B", (node) => node is SimpleIdentifier);
+ EngineTestCase.assertInstanceOf((obj) => obj is PropertyAccessorElement,
+ PropertyAccessorElement, ref.staticElement);
}
}
@@ -997,9 +971,9 @@
const B(): super();
}''');
resolve(source);
- assertErrors(
- source,
- [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT
+ ]);
verify([source]);
}
@@ -1051,16 +1025,19 @@
}
void test_constDeferredClass_new() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
class A {
const A.b();
-}''', r'''
+}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
main() {
new a.A.b();
-}'''], <ErrorCode>[]);
+}'''
+ ], <ErrorCode>[]);
}
void test_constEval_functionTypeLiteral() {
@@ -1884,9 +1861,11 @@
import 'lib.dart';''');
addNamedSource("/lib.dart", "library lib;");
resolve(source);
- assertErrors(
- source,
- [HintCode.UNUSED_IMPORT, HintCode.UNUSED_IMPORT, HintCode.DUPLICATE_IMPORT]);
+ assertErrors(source, [
+ HintCode.UNUSED_IMPORT,
+ HintCode.UNUSED_IMPORT,
+ HintCode.DUPLICATE_IMPORT
+ ]);
verify([source]);
}
@@ -2821,13 +2800,16 @@
}
void test_loadLibraryDefined() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-foo() => 22;''', r'''
+foo() => 22;''',
+ r'''
import 'lib1.dart' deferred as other;
main() {
other.loadLibrary().then((_) => other.foo());
-}'''], <ErrorCode>[]);
+}'''
+ ], <ErrorCode>[]);
}
void test_local_generator_async() {
@@ -3143,8 +3125,7 @@
verify([source]);
}
- void
- test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcretes_getter() {
+ void test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcretes_getter() {
Source source = addSource(r'''
class A {
int get g => 0;
@@ -3158,8 +3139,7 @@
verify([source]);
}
- void
- test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcretes_method() {
+ void test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcretes_method() {
Source source = addSource(r'''
class A {
m(p) {}
@@ -3173,8 +3153,7 @@
verify([source]);
}
- void
- test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcretes_setter() {
+ void test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcretes_setter() {
Source source = addSource(r'''
class A {
set s(v) {}
@@ -3188,8 +3167,7 @@
verify([source]);
}
- void
- test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_interface() {
+ void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_interface() {
// 15979
Source source = addSource(r'''
abstract class M {}
@@ -3216,8 +3194,7 @@
verify([source]);
}
- void
- test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_superclass() {
+ void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_superclass() {
// 15979
Source source = addSource(r'''
class M {}
@@ -3781,6 +3758,15 @@
verify([source]);
}
+ void test_parameterDefaultDoesNotReferToParameterName() {
+ // The final "f" should refer to the toplevel function "f", not to the
+ // parameter called "f". See dartbug.com/13179.
+ Source source = addSource('void f([void f([x]) = f]) {}');
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
void test_parameterScope_local() {
// Parameter names shouldn't conflict with the name of the function they
// are enclosed in.
@@ -4087,6 +4073,22 @@
verify([source]);
}
+ void test_referencedBeforeDeclaration_cascade() {
+ Source source = addSource(r'''
+testRequestHandler() {}
+
+main() {
+ var s1 = null;
+ testRequestHandler()
+ ..stream(s1);
+ var stream = 123;
+ print(stream);
+}''');
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
void test_referenceToDeclaredVariableInInitializer_constructorName() {
Source source = addSource(r'''
class A {
@@ -4318,18 +4320,23 @@
}
void test_sharedDeferredPrefix() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-f1() {}''', r'''
+f1() {}''',
+ r'''
library lib2;
-f2() {}''', r'''
+f2() {}''',
+ r'''
library lib3;
-f3() {}''', r'''
+f3() {}''',
+ r'''
library root;
import 'lib1.dart' deferred as lib1;
import 'lib2.dart' as lib;
import 'lib3.dart' as lib;
-main() { lib1.f1(); lib.f2(); lib.f3(); }'''], <ErrorCode>[]);
+main() { lib1.f1(); lib.f2(); lib.f3(); }'''
+ ], <ErrorCode>[]);
}
void test_staticAccessToInstanceMember_annotation() {
@@ -4473,8 +4480,7 @@
verify([source]);
}
- void
- test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_noAssignment() {
+ void test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_noAssignment() {
Source source = addSource(r'''
callMe(f()) { f(); }
main(Object p) {
@@ -4511,8 +4517,7 @@
verify([source]);
}
- void
- test_typePromotion_conditional_useInThen_accessedInClosure_noAssignment() {
+ void test_typePromotion_conditional_useInThen_accessedInClosure_noAssignment() {
Source source = addSource(r'''
callMe(f()) { f(); }
main(Object p) {
@@ -5357,8 +5362,8 @@
verify([source]);
}
- void _check_wrongNumberOfParametersForOperator(String name,
- String parameters) {
+ void _check_wrongNumberOfParametersForOperator(
+ String name, String parameters) {
Source source = addSource("""
class A {
operator $name($parameters) {}
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 77877f9..524d0511 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -20,7 +20,6 @@
import '../reflective_tests.dart';
import 'test_support.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(ComplexParserTest);
@@ -32,8 +31,8 @@
runReflectiveTests(SimpleParserTest);
}
-class AnalysisErrorListener_SimpleParserTest_computeStringValue implements
- AnalysisErrorListener {
+class AnalysisErrorListener_SimpleParserTest_computeStringValue
+ implements AnalysisErrorListener {
@override
void onError(AnalysisError event) {
fail(
@@ -125,58 +124,44 @@
*/
@reflectiveTest
class ComplexParserTest extends ParserTestCase {
- void test_additiveExpression_noSpaces() {
- BinaryExpression expression = ParserTestCase.parseExpression("i+1");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is IntegerLiteral,
- IntegerLiteral,
- expression.rightOperand);
- }
-
void test_additiveExpression_normal() {
BinaryExpression expression = ParserTestCase.parseExpression("x + y - z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
+ }
+
+ void test_additiveExpression_noSpaces() {
+ BinaryExpression expression = ParserTestCase.parseExpression("i+1");
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is IntegerLiteral,
+ IntegerLiteral, expression.rightOperand);
}
void test_additiveExpression_precedence_multiplicative_left() {
BinaryExpression expression = ParserTestCase.parseExpression("x * y + z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_additiveExpression_precedence_multiplicative_left_withSuper() {
BinaryExpression expression =
ParserTestCase.parseExpression("super * y - z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_additiveExpression_precedence_multiplicative_right() {
BinaryExpression expression = ParserTestCase.parseExpression("x + y * z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
}
void test_additiveExpression_super() {
BinaryExpression expression =
ParserTestCase.parseExpression("super + y - z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_assignableExpression_arguments_normal_chain() {
@@ -187,8 +172,7 @@
// a(b)(c).d(e)
//
MethodInvocation invocation2 = EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodInvocation,
- MethodInvocation,
+ (obj) => obj is MethodInvocation, MethodInvocation,
propertyAccess1.target);
expect(invocation2.methodName.name, "d");
ArgumentList argumentList2 = invocation2.argumentList;
@@ -199,8 +183,7 @@
//
FunctionExpressionInvocation invocation3 = EngineTestCase.assertInstanceOf(
(obj) => obj is FunctionExpressionInvocation,
- FunctionExpressionInvocation,
- invocation2.target);
+ FunctionExpressionInvocation, invocation2.target);
ArgumentList argumentList3 = invocation3.argumentList;
expect(argumentList3, isNotNull);
expect(argumentList3.arguments, hasLength(1));
@@ -208,8 +191,7 @@
// a(b)
//
MethodInvocation invocation4 = EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodInvocation,
- MethodInvocation,
+ (obj) => obj is MethodInvocation, MethodInvocation,
invocation3.function);
expect(invocation4.methodName.name, "a");
ArgumentList argumentList4 = invocation4.argumentList;
@@ -220,151 +202,111 @@
void test_assignmentExpression_compound() {
AssignmentExpression expression =
ParserTestCase.parseExpression("x = y = 0");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftHandSide);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is AssignmentExpression,
- AssignmentExpression,
- expression.rightHandSide);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftHandSide);
+ EngineTestCase.assertInstanceOf((obj) => obj is AssignmentExpression,
+ AssignmentExpression, expression.rightHandSide);
}
void test_assignmentExpression_indexExpression() {
AssignmentExpression expression =
ParserTestCase.parseExpression("x[1] = 0");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is IndexExpression,
- IndexExpression,
- expression.leftHandSide);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is IntegerLiteral,
- IntegerLiteral,
- expression.rightHandSide);
+ EngineTestCase.assertInstanceOf((obj) => obj is IndexExpression,
+ IndexExpression, expression.leftHandSide);
+ EngineTestCase.assertInstanceOf((obj) => obj is IntegerLiteral,
+ IntegerLiteral, expression.rightHandSide);
}
void test_assignmentExpression_prefixedIdentifier() {
AssignmentExpression expression = ParserTestCase.parseExpression("x.y = 0");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is PrefixedIdentifier,
- PrefixedIdentifier,
- expression.leftHandSide);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is IntegerLiteral,
- IntegerLiteral,
- expression.rightHandSide);
+ EngineTestCase.assertInstanceOf((obj) => obj is PrefixedIdentifier,
+ PrefixedIdentifier, expression.leftHandSide);
+ EngineTestCase.assertInstanceOf((obj) => obj is IntegerLiteral,
+ IntegerLiteral, expression.rightHandSide);
}
void test_assignmentExpression_propertyAccess() {
AssignmentExpression expression =
ParserTestCase.parseExpression("super.y = 0");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is PropertyAccess,
- PropertyAccess,
- expression.leftHandSide);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is IntegerLiteral,
- IntegerLiteral,
- expression.rightHandSide);
+ EngineTestCase.assertInstanceOf((obj) => obj is PropertyAccess,
+ PropertyAccess, expression.leftHandSide);
+ EngineTestCase.assertInstanceOf((obj) => obj is IntegerLiteral,
+ IntegerLiteral, expression.rightHandSide);
}
void test_bitwiseAndExpression_normal() {
BinaryExpression expression = ParserTestCase.parseExpression("x & y & z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_bitwiseAndExpression_precedence_equality_left() {
BinaryExpression expression = ParserTestCase.parseExpression("x == y && z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_bitwiseAndExpression_precedence_equality_right() {
BinaryExpression expression = ParserTestCase.parseExpression("x && y == z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
}
void test_bitwiseAndExpression_super() {
BinaryExpression expression =
ParserTestCase.parseExpression("super & y & z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_bitwiseOrExpression_normal() {
BinaryExpression expression = ParserTestCase.parseExpression("x | y | z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_bitwiseOrExpression_precedence_xor_left() {
BinaryExpression expression = ParserTestCase.parseExpression("x ^ y | z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_bitwiseOrExpression_precedence_xor_right() {
BinaryExpression expression = ParserTestCase.parseExpression("x | y ^ z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
}
void test_bitwiseOrExpression_super() {
BinaryExpression expression =
ParserTestCase.parseExpression("super | y | z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_bitwiseXorExpression_normal() {
BinaryExpression expression = ParserTestCase.parseExpression("x ^ y ^ z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_bitwiseXorExpression_precedence_and_left() {
BinaryExpression expression = ParserTestCase.parseExpression("x & y ^ z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_bitwiseXorExpression_precedence_and_right() {
BinaryExpression expression = ParserTestCase.parseExpression("x ^ y & z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
}
void test_bitwiseXorExpression_super() {
BinaryExpression expression =
ParserTestCase.parseExpression("super ^ y ^ z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_cascade_withAssignment() {
@@ -373,14 +315,10 @@
Expression target = cascade.target;
for (Expression section in cascade.cascadeSections) {
EngineTestCase.assertInstanceOf(
- (obj) => obj is AssignmentExpression,
- AssignmentExpression,
- section);
+ (obj) => obj is AssignmentExpression, AssignmentExpression, section);
Expression lhs = (section as AssignmentExpression).leftHandSide;
EngineTestCase.assertInstanceOf(
- (obj) => obj is IndexExpression,
- IndexExpression,
- lhs);
+ (obj) => obj is IndexExpression, IndexExpression, lhs);
IndexExpression index = lhs as IndexExpression;
expect(index.isCascaded, isTrue);
expect(index.realTarget, same(target));
@@ -390,10 +328,8 @@
void test_conditionalExpression_precedence_logicalOrExpression() {
ConditionalExpression expression =
ParserTestCase.parseExpression("a | b ? y : z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.condition);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.condition);
}
void test_constructor_initializer_withParenthesizedExpression() {
@@ -409,86 +345,66 @@
void test_equalityExpression_normal() {
BinaryExpression expression = ParserTestCase.parseExpression(
- "x == y != z",
- [ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ "x == y != z", [ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_equalityExpression_precedence_relational_left() {
BinaryExpression expression = ParserTestCase.parseExpression("x is y == z");
EngineTestCase.assertInstanceOf(
- (obj) => obj is IsExpression,
- IsExpression,
- expression.leftOperand);
+ (obj) => obj is IsExpression, IsExpression, expression.leftOperand);
}
void test_equalityExpression_precedence_relational_right() {
BinaryExpression expression = ParserTestCase.parseExpression("x == y is z");
EngineTestCase.assertInstanceOf(
- (obj) => obj is IsExpression,
- IsExpression,
- expression.rightOperand);
+ (obj) => obj is IsExpression, IsExpression, expression.rightOperand);
}
void test_equalityExpression_super() {
BinaryExpression expression = ParserTestCase.parseExpression(
- "super == y != z",
- [ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ "super == y != z", [
+ ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_logicalAndExpression() {
BinaryExpression expression = ParserTestCase.parseExpression("x && y && z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_logicalAndExpression_precedence_bitwiseOr_left() {
BinaryExpression expression = ParserTestCase.parseExpression("x | y < z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_logicalAndExpression_precedence_bitwiseOr_right() {
BinaryExpression expression = ParserTestCase.parseExpression("x < y | z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
}
void test_logicalOrExpression() {
BinaryExpression expression = ParserTestCase.parseExpression("x || y || z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_logicalOrExpression_precedence_logicalAnd_left() {
BinaryExpression expression = ParserTestCase.parseExpression("x && y || z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_logicalOrExpression_precedence_logicalAnd_right() {
BinaryExpression expression = ParserTestCase.parseExpression("x || y && z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
}
void test_multipleLabels_statement() {
@@ -496,83 +412,63 @@
ParserTestCase.parseStatement("a: b: c: return x;");
expect(statement.labels, hasLength(3));
EngineTestCase.assertInstanceOf(
- (obj) => obj is ReturnStatement,
- ReturnStatement,
- statement.statement);
+ (obj) => obj is ReturnStatement, ReturnStatement, statement.statement);
}
void test_multiplicativeExpression_normal() {
BinaryExpression expression = ParserTestCase.parseExpression("x * y / z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_multiplicativeExpression_precedence_unary_left() {
BinaryExpression expression = ParserTestCase.parseExpression("-x * y");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is PrefixExpression,
- PrefixExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is PrefixExpression,
+ PrefixExpression, expression.leftOperand);
}
void test_multiplicativeExpression_precedence_unary_right() {
BinaryExpression expression = ParserTestCase.parseExpression("x * -y");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is PrefixExpression,
- PrefixExpression,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is PrefixExpression,
+ PrefixExpression, expression.rightOperand);
}
void test_multiplicativeExpression_super() {
BinaryExpression expression =
ParserTestCase.parseExpression("super * y / z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_relationalExpression_precedence_shift_right() {
IsExpression expression = ParserTestCase.parseExpression("x << y is z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.expression);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.expression);
}
void test_shiftExpression_normal() {
BinaryExpression expression = ParserTestCase.parseExpression("x >> 4 << 3");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_shiftExpression_precedence_additive_left() {
BinaryExpression expression = ParserTestCase.parseExpression("x + y << z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_shiftExpression_precedence_additive_right() {
BinaryExpression expression = ParserTestCase.parseExpression("x << y + z");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
}
void test_shiftExpression_super() {
BinaryExpression expression =
ParserTestCase.parseExpression("super >> 4 << 3");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_topLevelVariable_withMetadata() {
@@ -593,11 +489,8 @@
// literals that are being created are not always zero length (because they
// could have type parameters), which violates the contract of
// isSynthetic().
- TypedLiteral literal = ParserTestCase.parse3(
- "parseListOrMapLiteral",
- <Object>[null],
- "1",
- [ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL]);
+ TypedLiteral literal = ParserTestCase.parse3("parseListOrMapLiteral",
+ <Object>[null], "1", [ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL]);
expect(literal.isSynthetic, isTrue);
}
@@ -605,52 +498,43 @@
// TODO(brianwilkerson) When this test starts to pass, remove the test
// test_illegalAssignmentToNonAssignable_superAssigned.
ParserTestCase.parseExpression(
- "super = x;",
- [ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE]);
+ "super = x;", [ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE]);
}
void fail_invalidCommentReference__new_nonIdentifier() {
// This test fails because the method parseCommentReference returns null.
- ParserTestCase.parse3(
- "parseCommentReference",
- <Object>["new 42", 0],
- "",
- [ParserErrorCode.INVALID_COMMENT_REFERENCE]);
+ ParserTestCase.parse3("parseCommentReference", <Object>["new 42", 0], "", [
+ ParserErrorCode.INVALID_COMMENT_REFERENCE
+ ]);
}
void fail_invalidCommentReference__new_tooMuch() {
- ParserTestCase.parse3(
- "parseCommentReference",
- <Object>["new a.b.c.d", 0],
- "",
- [ParserErrorCode.INVALID_COMMENT_REFERENCE]);
+ ParserTestCase.parse3("parseCommentReference", <Object>[
+ "new a.b.c.d",
+ 0
+ ], "", [ParserErrorCode.INVALID_COMMENT_REFERENCE]);
}
void fail_invalidCommentReference__nonNew_nonIdentifier() {
// This test fails because the method parseCommentReference returns null.
- ParserTestCase.parse3(
- "parseCommentReference",
- <Object>["42", 0],
- "",
- [ParserErrorCode.INVALID_COMMENT_REFERENCE]);
+ ParserTestCase.parse3("parseCommentReference", <Object>["42", 0], "", [
+ ParserErrorCode.INVALID_COMMENT_REFERENCE
+ ]);
}
void fail_invalidCommentReference__nonNew_tooMuch() {
- ParserTestCase.parse3(
- "parseCommentReference",
- <Object>["a.b.c.d", 0],
- "",
- [ParserErrorCode.INVALID_COMMENT_REFERENCE]);
+ ParserTestCase.parse3("parseCommentReference", <Object>["a.b.c.d", 0], "", [
+ ParserErrorCode.INVALID_COMMENT_REFERENCE
+ ]);
}
void fail_missingClosingParenthesis() {
// It is possible that it is not possible to generate this error (that it's
// being reported in code that cannot actually be reached), but that hasn't
// been proven yet.
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(int a, int b ;",
- [ParserErrorCode.MISSING_CLOSING_PARENTHESIS]);
+ ParserTestCase.parse4("parseFormalParameterList", "(int a, int b ;", [
+ ParserErrorCode.MISSING_CLOSING_PARENTHESIS
+ ]);
}
void fail_missingFunctionParameters_local_nonVoid_block() {
@@ -658,8 +542,7 @@
// to parse it as an expression statement. It isn't clear what the best
// error message is in this case.
ParserTestCase.parseStatement(
- "int f { return x;}",
- [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
+ "int f { return x;}", [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
}
void fail_missingFunctionParameters_local_nonVoid_expression() {
@@ -667,19 +550,14 @@
// to parse it as an expression statement. It isn't clear what the best
// error message is in this case.
ParserTestCase.parseStatement(
- "int f => x;",
- [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
+ "int f => x;", [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
}
void fail_namedFunctionExpression() {
- Expression expression = ParserTestCase.parse4(
- "parsePrimaryExpression",
- "f() {}",
- [ParserErrorCode.NAMED_FUNCTION_EXPRESSION]);
+ Expression expression = ParserTestCase.parse4("parsePrimaryExpression",
+ "f() {}", [ParserErrorCode.NAMED_FUNCTION_EXPRESSION]);
EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionExpression,
- FunctionExpression,
- expression);
+ (obj) => obj is FunctionExpression, FunctionExpression, expression);
}
void fail_unexpectedToken_invalidPostfixExpression() {
@@ -697,126 +575,105 @@
void fail_varAndType_parameter() {
// This is currently reporting EXPECTED_TOKEN for a missing semicolon, but
// this would be a better error message.
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(var int x)",
- [ParserErrorCode.VAR_AND_TYPE]);
+ ParserTestCase.parse4("parseFormalParameterList", "(var int x)", [
+ ParserErrorCode.VAR_AND_TYPE
+ ]);
}
void test_abstractClassMember_constructor() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "abstract C.c();",
- [ParserErrorCode.ABSTRACT_CLASS_MEMBER]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "abstract C.c();", [ParserErrorCode.ABSTRACT_CLASS_MEMBER]);
}
void test_abstractClassMember_field() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "abstract C f;",
- [ParserErrorCode.ABSTRACT_CLASS_MEMBER]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "abstract C f;", [
+ ParserErrorCode.ABSTRACT_CLASS_MEMBER
+ ]);
}
void test_abstractClassMember_getter() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "abstract get m;",
- [ParserErrorCode.ABSTRACT_CLASS_MEMBER]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "abstract get m;", [ParserErrorCode.ABSTRACT_CLASS_MEMBER]);
}
void test_abstractClassMember_method() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "abstract m();",
- [ParserErrorCode.ABSTRACT_CLASS_MEMBER]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "abstract m();", [
+ ParserErrorCode.ABSTRACT_CLASS_MEMBER
+ ]);
}
void test_abstractClassMember_setter() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "abstract set m(v);",
- [ParserErrorCode.ABSTRACT_CLASS_MEMBER]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "abstract set m(v);", [ParserErrorCode.ABSTRACT_CLASS_MEMBER]);
}
void test_abstractEnum() {
ParserTestCase.parseCompilationUnit(
- "abstract enum E {ONE}",
- [ParserErrorCode.ABSTRACT_ENUM]);
+ "abstract enum E {ONE}", [ParserErrorCode.ABSTRACT_ENUM]);
}
void test_abstractTopLevelFunction_function() {
ParserTestCase.parseCompilationUnit(
- "abstract f(v) {}",
- [ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION]);
+ "abstract f(v) {}", [ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION]);
}
void test_abstractTopLevelFunction_getter() {
ParserTestCase.parseCompilationUnit(
- "abstract get m {}",
- [ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION]);
+ "abstract get m {}", [ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION]);
}
void test_abstractTopLevelFunction_setter() {
ParserTestCase.parseCompilationUnit(
- "abstract set m(v) {}",
- [ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION]);
+ "abstract set m(v) {}", [ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION]);
}
void test_abstractTopLevelVariable() {
ParserTestCase.parseCompilationUnit(
- "abstract C f;",
- [ParserErrorCode.ABSTRACT_TOP_LEVEL_VARIABLE]);
+ "abstract C f;", [ParserErrorCode.ABSTRACT_TOP_LEVEL_VARIABLE]);
}
void test_abstractTypeDef() {
ParserTestCase.parseCompilationUnit(
- "abstract typedef F();",
- [ParserErrorCode.ABSTRACT_TYPEDEF]);
+ "abstract typedef F();", [ParserErrorCode.ABSTRACT_TYPEDEF]);
}
void test_annotationOnEnumConstant_first() {
- ParserTestCase.parseCompilationUnit(
- "enum E { @override C }",
- [ParserErrorCode.ANNOTATION_ON_ENUM_CONSTANT]);
+ ParserTestCase.parseCompilationUnit("enum E { @override C }", [
+ ParserErrorCode.ANNOTATION_ON_ENUM_CONSTANT
+ ]);
}
void test_annotationOnEnumConstant_middle() {
- ParserTestCase.parseCompilationUnit(
- "enum E { C, @override D, E }",
- [ParserErrorCode.ANNOTATION_ON_ENUM_CONSTANT]);
+ ParserTestCase.parseCompilationUnit("enum E { C, @override D, E }", [
+ ParserErrorCode.ANNOTATION_ON_ENUM_CONSTANT
+ ]);
}
void test_assertDoesNotTakeAssignment() {
- ParserTestCase.parse4(
- "parseAssertStatement",
- "assert(b = true);",
- [ParserErrorCode.ASSERT_DOES_NOT_TAKE_ASSIGNMENT]);
+ ParserTestCase.parse4("parseAssertStatement", "assert(b = true);", [
+ ParserErrorCode.ASSERT_DOES_NOT_TAKE_ASSIGNMENT
+ ]);
}
void test_assertDoesNotTakeCascades() {
- ParserTestCase.parse4(
- "parseAssertStatement",
- "assert(new A()..m());",
- [ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE]);
+ ParserTestCase.parse4("parseAssertStatement", "assert(new A()..m());", [
+ ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE
+ ]);
}
void test_assertDoesNotTakeRethrow() {
- ParserTestCase.parse4(
- "parseAssertStatement",
- "assert(rethrow);",
- [ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW]);
+ ParserTestCase.parse4("parseAssertStatement", "assert(rethrow);", [
+ ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW
+ ]);
}
void test_assertDoesNotTakeThrow() {
- ParserTestCase.parse4(
- "parseAssertStatement",
- "assert(throw x);",
- [ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW]);
+ ParserTestCase.parse4("parseAssertStatement", "assert(throw x);", [
+ ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW
+ ]);
}
void test_breakOutsideOfLoop_breakInDoStatement() {
@@ -828,16 +685,14 @@
}
void test_breakOutsideOfLoop_breakInIfStatement() {
- ParserTestCase.parse4(
- "parseIfStatement",
- "if (x) {break;}",
- [ParserErrorCode.BREAK_OUTSIDE_OF_LOOP]);
+ ParserTestCase.parse4("parseIfStatement", "if (x) {break;}", [
+ ParserErrorCode.BREAK_OUTSIDE_OF_LOOP
+ ]);
}
void test_breakOutsideOfLoop_breakInSwitchStatement() {
ParserTestCase.parse4(
- "parseSwitchStatement",
- "switch (x) {case 1: break;}");
+ "parseSwitchStatement", "switch (x) {case 1: break;}");
}
void test_breakOutsideOfLoop_breakInWhileStatement() {
@@ -846,8 +701,7 @@
void test_breakOutsideOfLoop_functionExpression_inALoop() {
ParserTestCase.parseStatement(
- "for(; x;) {() {break;};}",
- [ParserErrorCode.BREAK_OUTSIDE_OF_LOOP]);
+ "for(; x;) {() {break;};}", [ParserErrorCode.BREAK_OUTSIDE_OF_LOOP]);
}
void test_breakOutsideOfLoop_functionExpression_withALoop() {
@@ -856,104 +710,85 @@
void test_classInClass_abstract() {
ParserTestCase.parseCompilationUnit(
- "class C { abstract class B {} }",
- [ParserErrorCode.CLASS_IN_CLASS]);
+ "class C { abstract class B {} }", [ParserErrorCode.CLASS_IN_CLASS]);
}
void test_classInClass_nonAbstract() {
ParserTestCase.parseCompilationUnit(
- "class C { class B {} }",
- [ParserErrorCode.CLASS_IN_CLASS]);
+ "class C { class B {} }", [ParserErrorCode.CLASS_IN_CLASS]);
}
void test_classTypeAlias_abstractAfterEq() {
// This syntax has been removed from the language in favor of
// "abstract class A = B with C;" (issue 18098).
- ParserTestCase.parse3(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "class A = abstract B with C;",
- [ParserErrorCode.EXPECTED_TOKEN, ParserErrorCode.EXPECTED_TOKEN]);
+ ParserTestCase.parse3("parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "class A = abstract B with C;", [
+ ParserErrorCode.EXPECTED_TOKEN,
+ ParserErrorCode.EXPECTED_TOKEN
+ ]);
}
void test_colonInPlaceOfIn() {
ParserTestCase.parseStatement(
- "for (var x : list) {}",
- [ParserErrorCode.COLON_IN_PLACE_OF_IN]);
+ "for (var x : list) {}", [ParserErrorCode.COLON_IN_PLACE_OF_IN]);
}
void test_constAndFinal() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "const final int x;",
- [ParserErrorCode.CONST_AND_FINAL]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "const final int x;", [ParserErrorCode.CONST_AND_FINAL]);
}
void test_constAndVar() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "const var x;",
- [ParserErrorCode.CONST_AND_VAR]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "const var x;", [
+ ParserErrorCode.CONST_AND_VAR
+ ]);
}
void test_constClass() {
ParserTestCase.parseCompilationUnit(
- "const class C {}",
- [ParserErrorCode.CONST_CLASS]);
+ "const class C {}", [ParserErrorCode.CONST_CLASS]);
}
void test_constConstructorWithBody() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "const C() {}",
- [ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "const C() {}", [
+ ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY
+ ]);
}
void test_constEnum() {
ParserTestCase.parseCompilationUnit(
- "const enum E {ONE}",
- [ParserErrorCode.CONST_ENUM]);
+ "const enum E {ONE}", [ParserErrorCode.CONST_ENUM]);
}
void test_constFactory() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "const factory C() {}",
- [ParserErrorCode.CONST_FACTORY]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "const factory C() {}", [ParserErrorCode.CONST_FACTORY]);
}
void test_constMethod() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "const int m() {}",
- [ParserErrorCode.CONST_METHOD]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "const int m() {}", [ParserErrorCode.CONST_METHOD]);
+ }
+
+ void test_constructorWithReturnType() {
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "C C() {}", [
+ ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE
+ ]);
+ }
+
+ void test_constructorWithReturnType_var() {
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "var C() {}", [
+ ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE
+ ]);
}
void test_constTypedef() {
ParserTestCase.parseCompilationUnit(
- "const typedef F();",
- [ParserErrorCode.CONST_TYPEDEF]);
- }
-
- void test_constructorWithReturnType() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "C C() {}",
- [ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE]);
- }
-
- void test_constructorWithReturnType_var() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "var C() {}",
- [ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE]);
+ "const typedef F();", [ParserErrorCode.CONST_TYPEDEF]);
}
void test_continueOutsideOfLoop_continueInDoStatement() {
@@ -965,16 +800,14 @@
}
void test_continueOutsideOfLoop_continueInIfStatement() {
- ParserTestCase.parse4(
- "parseIfStatement",
- "if (x) {continue;}",
- [ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]);
+ ParserTestCase.parse4("parseIfStatement", "if (x) {continue;}", [
+ ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP
+ ]);
}
void test_continueOutsideOfLoop_continueInSwitchStatement() {
ParserTestCase.parse4(
- "parseSwitchStatement",
- "switch (x) {case 1: continue a;}");
+ "parseSwitchStatement", "switch (x) {case 1: continue a;}");
}
void test_continueOutsideOfLoop_continueInWhileStatement() {
@@ -982,9 +815,9 @@
}
void test_continueOutsideOfLoop_functionExpression_inALoop() {
- ParserTestCase.parseStatement(
- "for(; x;) {() {continue;};}",
- [ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]);
+ ParserTestCase.parseStatement("for(; x;) {() {continue;};}", [
+ ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP
+ ]);
}
void test_continueOutsideOfLoop_functionExpression_withALoop() {
@@ -992,246 +825,207 @@
}
void test_continueWithoutLabelInCase_error() {
- ParserTestCase.parse4(
- "parseSwitchStatement",
- "switch (x) {case 1: continue;}",
- [ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE]);
+ ParserTestCase.parse4("parseSwitchStatement",
+ "switch (x) {case 1: continue;}", [
+ ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE
+ ]);
}
void test_continueWithoutLabelInCase_noError() {
ParserTestCase.parse4(
- "parseSwitchStatement",
- "switch (x) {case 1: continue a;}");
+ "parseSwitchStatement", "switch (x) {case 1: continue a;}");
}
void test_continueWithoutLabelInCase_noError_switchInLoop() {
ParserTestCase.parse4(
- "parseWhileStatement",
- "while (a) { switch (b) {default: continue;}}");
+ "parseWhileStatement", "while (a) { switch (b) {default: continue;}}");
}
void test_deprecatedClassTypeAlias() {
ParserTestCase.parseCompilationUnit(
- "typedef C = S with M;",
- [ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS]);
+ "typedef C = S with M;", [ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS]);
}
void test_deprecatedClassTypeAlias_withGeneric() {
- ParserTestCase.parseCompilationUnit(
- "typedef C<T> = S<T> with M;",
- [ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS]);
+ ParserTestCase.parseCompilationUnit("typedef C<T> = S<T> with M;", [
+ ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS
+ ]);
}
void test_directiveAfterDeclaration_classBeforeDirective() {
CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "class Foo{} library l;",
- [ParserErrorCode.DIRECTIVE_AFTER_DECLARATION]);
+ "class Foo{} library l;", [
+ ParserErrorCode.DIRECTIVE_AFTER_DECLARATION
+ ]);
expect(unit, isNotNull);
}
void test_directiveAfterDeclaration_classBetweenDirectives() {
CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "library l;\nclass Foo{}\npart 'a.dart';",
- [ParserErrorCode.DIRECTIVE_AFTER_DECLARATION]);
+ "library l;\nclass Foo{}\npart 'a.dart';", [
+ ParserErrorCode.DIRECTIVE_AFTER_DECLARATION
+ ]);
expect(unit, isNotNull);
}
- void test_duplicateLabelInSwitchStatement() {
- ParserTestCase.parse4(
- "parseSwitchStatement",
- "switch (e) {l1: case 0: break; l1: case 1: break;}",
- [ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT]);
- }
-
void test_duplicatedModifier_const() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "const const m;",
- [ParserErrorCode.DUPLICATED_MODIFIER]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "const const m;", [
+ ParserErrorCode.DUPLICATED_MODIFIER
+ ]);
}
void test_duplicatedModifier_external() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "external external f();",
- [ParserErrorCode.DUPLICATED_MODIFIER]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "external external f();", [ParserErrorCode.DUPLICATED_MODIFIER]);
}
void test_duplicatedModifier_factory() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "factory factory C() {}",
- [ParserErrorCode.DUPLICATED_MODIFIER]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "factory factory C() {}", [ParserErrorCode.DUPLICATED_MODIFIER]);
}
void test_duplicatedModifier_final() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "final final m;",
- [ParserErrorCode.DUPLICATED_MODIFIER]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "final final m;", [
+ ParserErrorCode.DUPLICATED_MODIFIER
+ ]);
}
void test_duplicatedModifier_static() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "static static var m;",
- [ParserErrorCode.DUPLICATED_MODIFIER]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "static static var m;", [ParserErrorCode.DUPLICATED_MODIFIER]);
}
void test_duplicatedModifier_var() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "var var m;",
- [ParserErrorCode.DUPLICATED_MODIFIER]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "var var m;", [
+ ParserErrorCode.DUPLICATED_MODIFIER
+ ]);
+ }
+
+ void test_duplicateLabelInSwitchStatement() {
+ ParserTestCase.parse4("parseSwitchStatement",
+ "switch (e) {l1: case 0: break; l1: case 1: break;}", [
+ ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT
+ ]);
}
void test_emptyEnumBody() {
- ParserTestCase.parse3(
- "parseEnumDeclaration",
- <Object>[emptyCommentAndMetadata()],
- "enum E {}",
- [ParserErrorCode.EMPTY_ENUM_BODY]);
+ ParserTestCase.parse3("parseEnumDeclaration", <Object>[
+ emptyCommentAndMetadata()
+ ], "enum E {}", [ParserErrorCode.EMPTY_ENUM_BODY]);
}
void test_equalityCannotBeEqualityOperand_eq_eq() {
ParserTestCase.parseExpression(
- "1 == 2 == 3",
- [ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]);
+ "1 == 2 == 3", [ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]);
}
void test_equalityCannotBeEqualityOperand_eq_neq() {
ParserTestCase.parseExpression(
- "1 == 2 != 3",
- [ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]);
+ "1 == 2 != 3", [ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]);
}
void test_equalityCannotBeEqualityOperand_neq_eq() {
ParserTestCase.parseExpression(
- "1 != 2 == 3",
- [ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]);
+ "1 != 2 == 3", [ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]);
}
void test_expectedCaseOrDefault() {
- ParserTestCase.parse4(
- "parseSwitchStatement",
- "switch (e) {break;}",
- [ParserErrorCode.EXPECTED_CASE_OR_DEFAULT]);
+ ParserTestCase.parse4("parseSwitchStatement", "switch (e) {break;}", [
+ ParserErrorCode.EXPECTED_CASE_OR_DEFAULT
+ ]);
}
void test_expectedClassMember_inClass_afterType() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "heart 2 heart",
- [ParserErrorCode.EXPECTED_CLASS_MEMBER]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "heart 2 heart", [
+ ParserErrorCode.EXPECTED_CLASS_MEMBER
+ ]);
}
void test_expectedClassMember_inClass_beforeType() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "4 score",
- [ParserErrorCode.EXPECTED_CLASS_MEMBER]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "4 score", [
+ ParserErrorCode.EXPECTED_CLASS_MEMBER
+ ]);
}
void test_expectedExecutable_inClass_afterVoid() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "void 2 void",
- [ParserErrorCode.EXPECTED_EXECUTABLE]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "void 2 void", [
+ ParserErrorCode.EXPECTED_EXECUTABLE
+ ]);
}
void test_expectedExecutable_topLevel_afterType() {
- ParserTestCase.parse3(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "heart 2 heart",
- [ParserErrorCode.EXPECTED_EXECUTABLE]);
+ ParserTestCase.parse3("parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "heart 2 heart", [ParserErrorCode.EXPECTED_EXECUTABLE]);
}
void test_expectedExecutable_topLevel_afterVoid() {
- ParserTestCase.parse3(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "void 2 void",
- [ParserErrorCode.EXPECTED_EXECUTABLE]);
+ ParserTestCase.parse3("parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "void 2 void", [ParserErrorCode.EXPECTED_EXECUTABLE]);
}
void test_expectedExecutable_topLevel_beforeType() {
- ParserTestCase.parse3(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "4 score",
- [ParserErrorCode.EXPECTED_EXECUTABLE]);
+ ParserTestCase.parse3("parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "4 score", [ParserErrorCode.EXPECTED_EXECUTABLE]);
}
void test_expectedExecutable_topLevel_eof() {
- ParserTestCase.parse2(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "x",
- [new AnalysisError.con2(null, 0, 1, ParserErrorCode.EXPECTED_EXECUTABLE)]);
+ ParserTestCase.parse2("parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "x", [
+ new AnalysisError.con2(null, 0, 1, ParserErrorCode.EXPECTED_EXECUTABLE)
+ ]);
}
void test_expectedInterpolationIdentifier() {
ParserTestCase.parse4(
- "parseStringLiteral",
- "'\$x\$'",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ "parseStringLiteral", "'\$x\$'", [ParserErrorCode.MISSING_IDENTIFIER]);
}
void test_expectedInterpolationIdentifier_emptyString() {
// The scanner inserts an empty string token between the two $'s; we need to
// make sure that the MISSING_IDENTIFIER error that is generated has a
// nonzero width so that it will show up in the editor UI.
- ParserTestCase.parse2(
- "parseStringLiteral",
- <Object>[],
- "'\$\$foo'",
- [new AnalysisError.con2(null, 2, 1, ParserErrorCode.MISSING_IDENTIFIER)]);
+ ParserTestCase.parse2("parseStringLiteral", <Object>[], "'\$\$foo'", [
+ new AnalysisError.con2(null, 2, 1, ParserErrorCode.MISSING_IDENTIFIER)
+ ]);
}
void test_expectedStringLiteral() {
StringLiteral expression = ParserTestCase.parse4(
- "parseStringLiteral",
- "1",
- [ParserErrorCode.EXPECTED_STRING_LITERAL]);
+ "parseStringLiteral", "1", [ParserErrorCode.EXPECTED_STRING_LITERAL]);
expect(expression.isSynthetic, isTrue);
}
void test_expectedToken_commaMissingInArgumentList() {
ParserTestCase.parse4(
- "parseArgumentList",
- "(x, y z)",
- [ParserErrorCode.EXPECTED_TOKEN]);
+ "parseArgumentList", "(x, y z)", [ParserErrorCode.EXPECTED_TOKEN]);
}
void test_expectedToken_parseStatement_afterVoid() {
- ParserTestCase.parseStatement(
- "void}",
- [ParserErrorCode.EXPECTED_TOKEN, ParserErrorCode.MISSING_IDENTIFIER]);
+ ParserTestCase.parseStatement("void}", [
+ ParserErrorCode.EXPECTED_TOKEN,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
}
void test_expectedToken_semicolonAfterClass() {
Token token = TokenFactory.tokenFromKeyword(Keyword.CLASS);
- ParserTestCase.parse3(
- "parseClassTypeAlias",
- <Object>[emptyCommentAndMetadata(), null, token],
- "A = B with C",
- [ParserErrorCode.EXPECTED_TOKEN]);
+ ParserTestCase.parse3("parseClassTypeAlias", <Object>[
+ emptyCommentAndMetadata(),
+ null,
+ token
+ ], "A = B with C", [ParserErrorCode.EXPECTED_TOKEN]);
}
void test_expectedToken_semicolonMissingAfterExport() {
CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "export '' class A {}",
- [ParserErrorCode.EXPECTED_TOKEN]);
+ "export '' class A {}", [ParserErrorCode.EXPECTED_TOKEN]);
ExportDirective directive = unit.directives[0] as ExportDirective;
Token semicolon = directive.semicolon;
expect(semicolon, isNotNull);
@@ -1244,8 +1038,7 @@
void test_expectedToken_semicolonMissingAfterImport() {
CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "import '' class A {}",
- [ParserErrorCode.EXPECTED_TOKEN]);
+ "import '' class A {}", [ParserErrorCode.EXPECTED_TOKEN]);
ImportDirective directive = unit.directives[0] as ImportDirective;
Token semicolon = directive.semicolon;
expect(semicolon, isNotNull);
@@ -1254,302 +1047,245 @@
void test_expectedToken_whileMissingInDoStatement() {
ParserTestCase.parseStatement(
- "do {} (x);",
- [ParserErrorCode.EXPECTED_TOKEN]);
+ "do {} (x);", [ParserErrorCode.EXPECTED_TOKEN]);
}
void test_expectedTypeName_is() {
ParserTestCase.parseExpression(
- "x is",
- [ParserErrorCode.EXPECTED_TYPE_NAME]);
+ "x is", [ParserErrorCode.EXPECTED_TYPE_NAME]);
}
void test_exportDirectiveAfterPartDirective() {
- ParserTestCase.parseCompilationUnit(
- "part 'a.dart'; export 'b.dart';",
- [ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE]);
+ ParserTestCase.parseCompilationUnit("part 'a.dart'; export 'b.dart';", [
+ ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE
+ ]);
}
void test_externalAfterConst() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "const external C();",
- [ParserErrorCode.EXTERNAL_AFTER_CONST]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "const external C();", [ParserErrorCode.EXTERNAL_AFTER_CONST]);
}
void test_externalAfterFactory() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "factory external C();",
- [ParserErrorCode.EXTERNAL_AFTER_FACTORY]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "factory external C();", [ParserErrorCode.EXTERNAL_AFTER_FACTORY]);
}
void test_externalAfterStatic() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "static external int m();",
- [ParserErrorCode.EXTERNAL_AFTER_STATIC]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "static external int m();", [ParserErrorCode.EXTERNAL_AFTER_STATIC]);
}
void test_externalClass() {
ParserTestCase.parseCompilationUnit(
- "external class C {}",
- [ParserErrorCode.EXTERNAL_CLASS]);
+ "external class C {}", [ParserErrorCode.EXTERNAL_CLASS]);
}
void test_externalConstructorWithBody_factory() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "external factory C() {}",
- [ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "external factory C() {}", [
+ ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY
+ ]);
}
void test_externalConstructorWithBody_named() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "external C.c() {}",
- [ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "external C.c() {}", [ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY]);
}
void test_externalEnum() {
ParserTestCase.parseCompilationUnit(
- "external enum E {ONE}",
- [ParserErrorCode.EXTERNAL_ENUM]);
+ "external enum E {ONE}", [ParserErrorCode.EXTERNAL_ENUM]);
}
void test_externalField_const() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "external const A f;",
- [ParserErrorCode.EXTERNAL_FIELD]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "external const A f;", [ParserErrorCode.EXTERNAL_FIELD]);
}
void test_externalField_final() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "external final A f;",
- [ParserErrorCode.EXTERNAL_FIELD]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "external final A f;", [ParserErrorCode.EXTERNAL_FIELD]);
}
void test_externalField_static() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "external static A f;",
- [ParserErrorCode.EXTERNAL_FIELD]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "external static A f;", [ParserErrorCode.EXTERNAL_FIELD]);
}
void test_externalField_typed() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "external A f;",
- [ParserErrorCode.EXTERNAL_FIELD]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "external A f;", [
+ ParserErrorCode.EXTERNAL_FIELD
+ ]);
}
void test_externalField_untyped() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "external var f;",
- [ParserErrorCode.EXTERNAL_FIELD]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "external var f;", [ParserErrorCode.EXTERNAL_FIELD]);
}
void test_externalGetterWithBody() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "external int get x {}",
- [ParserErrorCode.EXTERNAL_GETTER_WITH_BODY]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "external int get x {}", [ParserErrorCode.EXTERNAL_GETTER_WITH_BODY]);
}
void test_externalMethodWithBody() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "external m() {}",
- [ParserErrorCode.EXTERNAL_METHOD_WITH_BODY]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "external m() {}", [ParserErrorCode.EXTERNAL_METHOD_WITH_BODY]);
}
void test_externalOperatorWithBody() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "external operator +(int value) {}",
- [ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "external operator +(int value) {}", [
+ ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY
+ ]);
}
void test_externalSetterWithBody() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "external set x(int value) {}",
- [ParserErrorCode.EXTERNAL_SETTER_WITH_BODY]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "external set x(int value) {}", [
+ ParserErrorCode.EXTERNAL_SETTER_WITH_BODY
+ ]);
}
void test_externalTypedef() {
ParserTestCase.parseCompilationUnit(
- "external typedef F();",
- [ParserErrorCode.EXTERNAL_TYPEDEF]);
+ "external typedef F();", [ParserErrorCode.EXTERNAL_TYPEDEF]);
}
void test_factoryTopLevelDeclaration_class() {
ParserTestCase.parseCompilationUnit(
- "factory class C {}",
- [ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION]);
+ "factory class C {}", [ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION]);
}
void test_factoryTopLevelDeclaration_typedef() {
- ParserTestCase.parseCompilationUnit(
- "factory typedef F();",
- [ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION]);
+ ParserTestCase.parseCompilationUnit("factory typedef F();", [
+ ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION
+ ]);
}
void test_factoryWithInitializers() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "factory C() : x = 3 {}",
- [ParserErrorCode.FACTORY_WITH_INITIALIZERS]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "factory C() : x = 3 {}", [ParserErrorCode.FACTORY_WITH_INITIALIZERS]);
}
void test_factoryWithoutBody() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "factory C();",
- [ParserErrorCode.FACTORY_WITHOUT_BODY]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "factory C();", [
+ ParserErrorCode.FACTORY_WITHOUT_BODY
+ ]);
}
void test_fieldInitializerOutsideConstructor() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "void m(this.x);",
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "void m(this.x);",
[ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR]);
}
void test_finalAndVar() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "final var x;",
- [ParserErrorCode.FINAL_AND_VAR]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "final var x;", [
+ ParserErrorCode.FINAL_AND_VAR
+ ]);
}
void test_finalClass() {
ParserTestCase.parseCompilationUnit(
- "final class C {}",
- [ParserErrorCode.FINAL_CLASS]);
+ "final class C {}", [ParserErrorCode.FINAL_CLASS]);
}
void test_finalConstructor() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "final C() {}",
- [ParserErrorCode.FINAL_CONSTRUCTOR]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "final C() {}", [
+ ParserErrorCode.FINAL_CONSTRUCTOR
+ ]);
}
void test_finalEnum() {
ParserTestCase.parseCompilationUnit(
- "final enum E {ONE}",
- [ParserErrorCode.FINAL_ENUM]);
+ "final enum E {ONE}", [ParserErrorCode.FINAL_ENUM]);
}
void test_finalMethod() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "final int m() {}",
- [ParserErrorCode.FINAL_METHOD]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "final int m() {}", [ParserErrorCode.FINAL_METHOD]);
}
void test_finalTypedef() {
ParserTestCase.parseCompilationUnit(
- "final typedef F();",
- [ParserErrorCode.FINAL_TYPEDEF]);
+ "final typedef F();", [ParserErrorCode.FINAL_TYPEDEF]);
}
void test_functionTypedParameter_const() {
ParserTestCase.parseCompilationUnit(
- "void f(const x()) {}",
- [ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR]);
+ "void f(const x()) {}", [ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR]);
}
void test_functionTypedParameter_final() {
ParserTestCase.parseCompilationUnit(
- "void f(final x()) {}",
- [ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR]);
+ "void f(final x()) {}", [ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR]);
}
void test_functionTypedParameter_var() {
ParserTestCase.parseCompilationUnit(
- "void f(var x()) {}",
- [ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR]);
+ "void f(var x()) {}", [ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR]);
}
void test_getterInFunction_block_noReturnType() {
ParserTestCase.parseStatement(
- "get x { return _x; }",
- [ParserErrorCode.GETTER_IN_FUNCTION]);
+ "get x { return _x; }", [ParserErrorCode.GETTER_IN_FUNCTION]);
}
void test_getterInFunction_block_returnType() {
ParserTestCase.parseStatement(
- "int get x { return _x; }",
- [ParserErrorCode.GETTER_IN_FUNCTION]);
+ "int get x { return _x; }", [ParserErrorCode.GETTER_IN_FUNCTION]);
}
void test_getterInFunction_expression_noReturnType() {
ParserTestCase.parseStatement(
- "get x => _x;",
- [ParserErrorCode.GETTER_IN_FUNCTION]);
+ "get x => _x;", [ParserErrorCode.GETTER_IN_FUNCTION]);
}
void test_getterInFunction_expression_returnType() {
ParserTestCase.parseStatement(
- "int get x => _x;",
- [ParserErrorCode.GETTER_IN_FUNCTION]);
+ "int get x => _x;", [ParserErrorCode.GETTER_IN_FUNCTION]);
}
void test_getterWithParameters() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "int get x() {}",
- [ParserErrorCode.GETTER_WITH_PARAMETERS]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "int get x() {}", [
+ ParserErrorCode.GETTER_WITH_PARAMETERS
+ ]);
}
void test_illegalAssignmentToNonAssignable_postfix_minusMinus_literal() {
ParserTestCase.parseExpression(
- "0--",
- [ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE]);
+ "0--", [ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE]);
}
void test_illegalAssignmentToNonAssignable_postfix_plusPlus_literal() {
ParserTestCase.parseExpression(
- "0++",
- [ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE]);
+ "0++", [ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE]);
}
void test_illegalAssignmentToNonAssignable_postfix_plusPlus_parethesized() {
ParserTestCase.parseExpression(
- "(x)++",
- [ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE]);
+ "(x)++", [ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE]);
}
void test_illegalAssignmentToNonAssignable_primarySelectorPostfix() {
ParserTestCase.parseExpression(
- "x(y)(z)++",
- [ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE]);
+ "x(y)(z)++", [ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE]);
}
void test_illegalAssignmentToNonAssignable_superAssigned() {
@@ -1558,181 +1294,164 @@
// remove this test (there should only be one error generated, but we're
// keeping this test until that time so that we can catch other forms of
// regressions).
- ParserTestCase.parseExpression(
- "super = x;",
- [
- ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR,
- ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE]);
+ ParserTestCase.parseExpression("super = x;", [
+ ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR,
+ ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
+ ]);
}
void test_implementsBeforeExtends() {
- ParserTestCase.parseCompilationUnit(
- "class A implements B extends C {}",
- [ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS]);
+ ParserTestCase.parseCompilationUnit("class A implements B extends C {}", [
+ ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS
+ ]);
}
void test_implementsBeforeWith() {
ParserTestCase.parseCompilationUnit(
- "class A extends B implements C with D {}",
- [ParserErrorCode.IMPLEMENTS_BEFORE_WITH]);
+ "class A extends B implements C with D {}", [
+ ParserErrorCode.IMPLEMENTS_BEFORE_WITH
+ ]);
}
void test_importDirectiveAfterPartDirective() {
- ParserTestCase.parseCompilationUnit(
- "part 'a.dart'; import 'b.dart';",
- [ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE]);
+ ParserTestCase.parseCompilationUnit("part 'a.dart'; import 'b.dart';", [
+ ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE
+ ]);
}
void test_initializedVariableInForEach() {
- ParserTestCase.parse4(
- "parseForStatement",
- "for (int a = 0 in foo) {}",
- [ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH]);
+ ParserTestCase.parse4("parseForStatement", "for (int a = 0 in foo) {}", [
+ ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH
+ ]);
}
void test_invalidAwaitInFor() {
- ParserTestCase.parse4(
- "parseForStatement",
- "await for (; ;) {}",
- [ParserErrorCode.INVALID_AWAIT_IN_FOR]);
+ ParserTestCase.parse4("parseForStatement", "await for (; ;) {}", [
+ ParserErrorCode.INVALID_AWAIT_IN_FOR
+ ]);
}
void test_invalidCodePoint() {
- ParserTestCase.parse4(
- "parseStringLiteral",
- "'\\uD900'",
- [ParserErrorCode.INVALID_CODE_POINT]);
+ ParserTestCase.parse4("parseStringLiteral", "'\\uD900'", [
+ ParserErrorCode.INVALID_CODE_POINT
+ ]);
}
void test_invalidHexEscape_invalidDigit() {
ParserTestCase.parse4(
- "parseStringLiteral",
- "'\\x0 a'",
- [ParserErrorCode.INVALID_HEX_ESCAPE]);
+ "parseStringLiteral", "'\\x0 a'", [ParserErrorCode.INVALID_HEX_ESCAPE]);
}
void test_invalidHexEscape_tooFewDigits() {
ParserTestCase.parse4(
- "parseStringLiteral",
- "'\\x0'",
- [ParserErrorCode.INVALID_HEX_ESCAPE]);
+ "parseStringLiteral", "'\\x0'", [ParserErrorCode.INVALID_HEX_ESCAPE]);
}
void test_invalidInterpolationIdentifier_startWithDigit() {
ParserTestCase.parse4(
- "parseStringLiteral",
- "'\$1'",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ "parseStringLiteral", "'\$1'", [ParserErrorCode.MISSING_IDENTIFIER]);
}
void test_invalidOperator() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "void operator ===(x) {}",
- [ParserErrorCode.INVALID_OPERATOR]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "void operator ===(x) {}", [ParserErrorCode.INVALID_OPERATOR]);
}
void test_invalidOperatorForSuper() {
- ParserTestCase.parse4(
- "parseUnaryExpression",
- "++super",
- [ParserErrorCode.INVALID_OPERATOR_FOR_SUPER]);
+ ParserTestCase.parse4("parseUnaryExpression", "++super", [
+ ParserErrorCode.INVALID_OPERATOR_FOR_SUPER
+ ]);
}
void test_invalidStarAfterAsync() {
- ParserTestCase.parse3(
- "parseFunctionBody",
- <Object>[false, null, false],
- "async* => 0;",
- [ParserErrorCode.INVALID_STAR_AFTER_ASYNC]);
+ ParserTestCase.parse3("parseFunctionBody", <Object>[
+ false,
+ null,
+ false
+ ], "async* => 0;", [ParserErrorCode.INVALID_STAR_AFTER_ASYNC]);
}
void test_invalidSync() {
- ParserTestCase.parse3(
- "parseFunctionBody",
- <Object>[false, null, false],
- "sync* => 0;",
- [ParserErrorCode.INVALID_SYNC]);
+ ParserTestCase.parse3("parseFunctionBody", <Object>[
+ false,
+ null,
+ false
+ ], "sync* => 0;", [ParserErrorCode.INVALID_SYNC]);
}
void test_invalidUnicodeEscape_incomplete_noDigits() {
- ParserTestCase.parse4(
- "parseStringLiteral",
- "'\\u{'",
- [ParserErrorCode.INVALID_UNICODE_ESCAPE]);
+ ParserTestCase.parse4("parseStringLiteral", "'\\u{'", [
+ ParserErrorCode.INVALID_UNICODE_ESCAPE
+ ]);
}
void test_invalidUnicodeEscape_incomplete_someDigits() {
- ParserTestCase.parse4(
- "parseStringLiteral",
- "'\\u{0A'",
- [ParserErrorCode.INVALID_UNICODE_ESCAPE]);
+ ParserTestCase.parse4("parseStringLiteral", "'\\u{0A'", [
+ ParserErrorCode.INVALID_UNICODE_ESCAPE
+ ]);
}
void test_invalidUnicodeEscape_invalidDigit() {
- ParserTestCase.parse4(
- "parseStringLiteral",
- "'\\u0 a'",
- [ParserErrorCode.INVALID_UNICODE_ESCAPE]);
+ ParserTestCase.parse4("parseStringLiteral", "'\\u0 a'", [
+ ParserErrorCode.INVALID_UNICODE_ESCAPE
+ ]);
}
void test_invalidUnicodeEscape_tooFewDigits_fixed() {
- ParserTestCase.parse4(
- "parseStringLiteral",
- "'\\u04'",
- [ParserErrorCode.INVALID_UNICODE_ESCAPE]);
+ ParserTestCase.parse4("parseStringLiteral", "'\\u04'", [
+ ParserErrorCode.INVALID_UNICODE_ESCAPE
+ ]);
}
void test_invalidUnicodeEscape_tooFewDigits_variable() {
- ParserTestCase.parse4(
- "parseStringLiteral",
- "'\\u{}'",
- [ParserErrorCode.INVALID_UNICODE_ESCAPE]);
+ ParserTestCase.parse4("parseStringLiteral", "'\\u{}'", [
+ ParserErrorCode.INVALID_UNICODE_ESCAPE
+ ]);
}
void test_invalidUnicodeEscape_tooManyDigits_variable() {
- ParserTestCase.parse4(
- "parseStringLiteral",
- "'\\u{12345678}'",
- [ParserErrorCode.INVALID_UNICODE_ESCAPE, ParserErrorCode.INVALID_CODE_POINT]);
+ ParserTestCase.parse4("parseStringLiteral", "'\\u{12345678}'", [
+ ParserErrorCode.INVALID_UNICODE_ESCAPE,
+ ParserErrorCode.INVALID_CODE_POINT
+ ]);
}
void test_libraryDirectiveNotFirst() {
- ParserTestCase.parseCompilationUnit(
- "import 'x.dart'; library l;",
- [ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST]);
+ ParserTestCase.parseCompilationUnit("import 'x.dart'; library l;", [
+ ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST
+ ]);
}
void test_libraryDirectiveNotFirst_afterPart() {
CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "part 'a.dart';\nlibrary l;",
- [ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST]);
+ "part 'a.dart';\nlibrary l;", [
+ ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST
+ ]);
expect(unit, isNotNull);
}
void test_localFunctionDeclarationModifier_abstract() {
- ParserTestCase.parseStatement(
- "abstract f() {}",
- [ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER]);
+ ParserTestCase.parseStatement("abstract f() {}", [
+ ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER
+ ]);
}
void test_localFunctionDeclarationModifier_external() {
- ParserTestCase.parseStatement(
- "external f() {}",
- [ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER]);
+ ParserTestCase.parseStatement("external f() {}", [
+ ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER
+ ]);
}
void test_localFunctionDeclarationModifier_factory() {
- ParserTestCase.parseStatement(
- "factory f() {}",
- [ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER]);
+ ParserTestCase.parseStatement("factory f() {}", [
+ ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER
+ ]);
}
void test_localFunctionDeclarationModifier_static() {
ParserTestCase.parseStatement(
- "static f() {}",
- [ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER]);
+ "static f() {}", [ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER]);
}
void test_missingAssignableSelector_identifiersAssigned() {
@@ -1741,14 +1460,12 @@
void test_missingAssignableSelector_prefix_minusMinus_literal() {
ParserTestCase.parseExpression(
- "--0",
- [ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR]);
+ "--0", [ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR]);
}
void test_missingAssignableSelector_prefix_plusPlus_literal() {
ParserTestCase.parseExpression(
- "++0",
- [ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR]);
+ "++0", [ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR]);
}
void test_missingAssignableSelector_selector() {
@@ -1756,11 +1473,9 @@
}
void test_missingAssignableSelector_superPrimaryExpression() {
- SuperExpression expression = ParserTestCase.parse4(
- "parsePrimaryExpression",
- "super",
- [ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR]);
- expect(expression.keyword, isNotNull);
+ SuperExpression expression = ParserTestCase.parse4("parsePrimaryExpression",
+ "super", [ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR]);
+ expect(expression.superKeyword, isNotNull);
}
void test_missingAssignableSelector_superPropertyAccessAssigned() {
@@ -1768,233 +1483,195 @@
}
void test_missingCatchOrFinally() {
- TryStatement statement = ParserTestCase.parse4(
- "parseTryStatement",
- "try {}",
- [ParserErrorCode.MISSING_CATCH_OR_FINALLY]);
+ TryStatement statement = ParserTestCase.parse4("parseTryStatement",
+ "try {}", [ParserErrorCode.MISSING_CATCH_OR_FINALLY]);
expect(statement, isNotNull);
}
void test_missingClassBody() {
ParserTestCase.parseCompilationUnit(
- "class A class B {}",
- [ParserErrorCode.MISSING_CLASS_BODY]);
+ "class A class B {}", [ParserErrorCode.MISSING_CLASS_BODY]);
}
void test_missingConstFinalVarOrType_static() {
- ParserTestCase.parseCompilationUnit(
- "class A { static f; }",
- [ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE]);
+ ParserTestCase.parseCompilationUnit("class A { static f; }", [
+ ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE
+ ]);
}
void test_missingConstFinalVarOrType_topLevel() {
- ParserTestCase.parse3(
- "parseFinalConstVarOrType",
- <Object>[false],
- "a;",
- [ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE]);
+ ParserTestCase.parse3("parseFinalConstVarOrType", <Object>[false], "a;", [
+ ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE
+ ]);
}
void test_missingEnumBody() {
- ParserTestCase.parse3(
- "parseEnumDeclaration",
- <Object>[emptyCommentAndMetadata()],
- "enum E;",
- [ParserErrorCode.MISSING_ENUM_BODY]);
+ ParserTestCase.parse3("parseEnumDeclaration", <Object>[
+ emptyCommentAndMetadata()
+ ], "enum E;", [ParserErrorCode.MISSING_ENUM_BODY]);
}
void test_missingExpressionInThrow_withCascade() {
- ParserTestCase.parse4(
- "parseThrowExpression",
- "throw;",
- [ParserErrorCode.MISSING_EXPRESSION_IN_THROW]);
+ ParserTestCase.parse4("parseThrowExpression", "throw;", [
+ ParserErrorCode.MISSING_EXPRESSION_IN_THROW
+ ]);
}
void test_missingExpressionInThrow_withoutCascade() {
- ParserTestCase.parse4(
- "parseThrowExpressionWithoutCascade",
- "throw;",
- [ParserErrorCode.MISSING_EXPRESSION_IN_THROW]);
+ ParserTestCase.parse4("parseThrowExpressionWithoutCascade", "throw;", [
+ ParserErrorCode.MISSING_EXPRESSION_IN_THROW
+ ]);
}
void test_missingFunctionBody_emptyNotAllowed() {
- ParserTestCase.parse3(
- "parseFunctionBody",
- <Object>[false, ParserErrorCode.MISSING_FUNCTION_BODY, false],
- ";",
- [ParserErrorCode.MISSING_FUNCTION_BODY]);
+ ParserTestCase.parse3("parseFunctionBody", <Object>[
+ false,
+ ParserErrorCode.MISSING_FUNCTION_BODY,
+ false
+ ], ";", [ParserErrorCode.MISSING_FUNCTION_BODY]);
}
void test_missingFunctionBody_invalid() {
- ParserTestCase.parse3(
- "parseFunctionBody",
- <Object>[false, ParserErrorCode.MISSING_FUNCTION_BODY, false],
- "return 0;",
- [ParserErrorCode.MISSING_FUNCTION_BODY]);
+ ParserTestCase.parse3("parseFunctionBody", <Object>[
+ false,
+ ParserErrorCode.MISSING_FUNCTION_BODY,
+ false
+ ], "return 0;", [ParserErrorCode.MISSING_FUNCTION_BODY]);
}
void test_missingFunctionParameters_local_void_block() {
ParserTestCase.parseStatement(
- "void f { return x;}",
- [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
+ "void f { return x;}", [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
}
void test_missingFunctionParameters_local_void_expression() {
ParserTestCase.parseStatement(
- "void f => x;",
- [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
+ "void f => x;", [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
}
void test_missingFunctionParameters_topLevel_nonVoid_block() {
ParserTestCase.parseCompilationUnit(
- "int f { return x;}",
- [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
+ "int f { return x;}", [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
}
void test_missingFunctionParameters_topLevel_nonVoid_expression() {
ParserTestCase.parseCompilationUnit(
- "int f => x;",
- [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
+ "int f => x;", [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
}
void test_missingFunctionParameters_topLevel_void_block() {
ParserTestCase.parseCompilationUnit(
- "void f { return x;}",
- [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
+ "void f { return x;}", [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
}
void test_missingFunctionParameters_topLevel_void_expression() {
ParserTestCase.parseCompilationUnit(
- "void f => x;",
- [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
+ "void f => x;", [ParserErrorCode.MISSING_FUNCTION_PARAMETERS]);
}
void test_missingIdentifier_afterOperator() {
- ParserTestCase.parse4(
- "parseMultiplicativeExpression",
- "1 *",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ ParserTestCase.parse4("parseMultiplicativeExpression", "1 *", [
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
}
void test_missingIdentifier_beforeClosingCurly() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "int}",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.EXPECTED_TOKEN]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "int}", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.EXPECTED_TOKEN
+ ]);
}
void test_missingIdentifier_functionDeclaration_returnTypeWithoutName() {
- ParserTestCase.parse4(
- "parseFunctionDeclarationStatement",
- "A<T> () {}",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ ParserTestCase.parse4("parseFunctionDeclarationStatement", "A<T> () {}", [
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
}
void test_missingIdentifier_inEnum() {
- ParserTestCase.parse3(
- "parseEnumDeclaration",
- <Object>[emptyCommentAndMetadata()],
- "enum E {, TWO}",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ ParserTestCase.parse3("parseEnumDeclaration", <Object>[
+ emptyCommentAndMetadata()
+ ], "enum E {, TWO}", [ParserErrorCode.MISSING_IDENTIFIER]);
}
void test_missingIdentifier_inSymbol_afterPeriod() {
ParserTestCase.parse4(
- "parseSymbolLiteral",
- "#a.",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ "parseSymbolLiteral", "#a.", [ParserErrorCode.MISSING_IDENTIFIER]);
}
void test_missingIdentifier_inSymbol_first() {
ParserTestCase.parse4(
- "parseSymbolLiteral",
- "#",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ "parseSymbolLiteral", "#", [ParserErrorCode.MISSING_IDENTIFIER]);
}
void test_missingIdentifier_number() {
SimpleIdentifier expression = ParserTestCase.parse4(
- "parseSimpleIdentifier",
- "1",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ "parseSimpleIdentifier", "1", [ParserErrorCode.MISSING_IDENTIFIER]);
expect(expression.isSynthetic, isTrue);
}
void test_missingKeywordOperator() {
- ParserTestCase.parse3(
- "parseOperator",
- <Object>[emptyCommentAndMetadata(), null, null],
- "+(x) {}",
- [ParserErrorCode.MISSING_KEYWORD_OPERATOR]);
+ ParserTestCase.parse3("parseOperator", <Object>[
+ emptyCommentAndMetadata(),
+ null,
+ null
+ ], "+(x) {}", [ParserErrorCode.MISSING_KEYWORD_OPERATOR]);
}
void test_missingKeywordOperator_parseClassMember() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "+() {}",
- [ParserErrorCode.MISSING_KEYWORD_OPERATOR]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "+() {}", [
+ ParserErrorCode.MISSING_KEYWORD_OPERATOR
+ ]);
}
void test_missingKeywordOperator_parseClassMember_afterTypeName() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "int +() {}",
- [ParserErrorCode.MISSING_KEYWORD_OPERATOR]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "int +() {}", [
+ ParserErrorCode.MISSING_KEYWORD_OPERATOR
+ ]);
}
void test_missingKeywordOperator_parseClassMember_afterVoid() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "void +() {}",
- [ParserErrorCode.MISSING_KEYWORD_OPERATOR]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "void +() {}", [
+ ParserErrorCode.MISSING_KEYWORD_OPERATOR
+ ]);
}
void test_missingMethodParameters_void_block() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "void m {} }",
- [ParserErrorCode.MISSING_METHOD_PARAMETERS]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "void m {} }", [
+ ParserErrorCode.MISSING_METHOD_PARAMETERS
+ ]);
}
void test_missingMethodParameters_void_expression() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "void m => null; }",
- [ParserErrorCode.MISSING_METHOD_PARAMETERS]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "void m => null; }", [ParserErrorCode.MISSING_METHOD_PARAMETERS]);
}
void test_missingNameInLibraryDirective() {
CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "library;",
- [ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE]);
+ "library;", [ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE]);
expect(unit, isNotNull);
}
void test_missingNameInPartOfDirective() {
CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "part of;",
- [ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE]);
+ "part of;", [ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE]);
expect(unit, isNotNull);
}
void test_missingPrefixInDeferredImport() {
- ParserTestCase.parseCompilationUnit(
- "import 'foo.dart' deferred;",
- [ParserErrorCode.MISSING_PREFIX_IN_DEFERRED_IMPORT]);
+ ParserTestCase.parseCompilationUnit("import 'foo.dart' deferred;", [
+ ParserErrorCode.MISSING_PREFIX_IN_DEFERRED_IMPORT
+ ]);
}
void test_missingStartAfterSync() {
- ParserTestCase.parse3(
- "parseFunctionBody",
- <Object>[false, null, false],
- "sync {}",
- [ParserErrorCode.MISSING_STAR_AFTER_SYNC]);
+ ParserTestCase.parse3("parseFunctionBody", <Object>[
+ false,
+ null,
+ false
+ ], "sync {}", [ParserErrorCode.MISSING_STAR_AFTER_SYNC]);
}
void test_missingStatement() {
@@ -2006,587 +1683,498 @@
}
void test_missingTerminatorForParameterGroup_named() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, {b: 0)",
- [ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, {b: 0)", [
+ ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP
+ ]);
}
void test_missingTerminatorForParameterGroup_optional() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, [b = 0)",
- [ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, [b = 0)", [
+ ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP
+ ]);
}
void test_missingTypedefParameters_nonVoid() {
ParserTestCase.parseCompilationUnit(
- "typedef int F;",
- [ParserErrorCode.MISSING_TYPEDEF_PARAMETERS]);
+ "typedef int F;", [ParserErrorCode.MISSING_TYPEDEF_PARAMETERS]);
}
void test_missingTypedefParameters_typeParameters() {
ParserTestCase.parseCompilationUnit(
- "typedef F<E>;",
- [ParserErrorCode.MISSING_TYPEDEF_PARAMETERS]);
+ "typedef F<E>;", [ParserErrorCode.MISSING_TYPEDEF_PARAMETERS]);
}
void test_missingTypedefParameters_void() {
ParserTestCase.parseCompilationUnit(
- "typedef void F;",
- [ParserErrorCode.MISSING_TYPEDEF_PARAMETERS]);
+ "typedef void F;", [ParserErrorCode.MISSING_TYPEDEF_PARAMETERS]);
}
void test_missingVariableInForEach() {
- ParserTestCase.parse4(
- "parseForStatement",
- "for (a < b in foo) {}",
- [ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH]);
+ ParserTestCase.parse4("parseForStatement", "for (a < b in foo) {}", [
+ ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH
+ ]);
}
void test_mixedParameterGroups_namedPositional() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, {b}, [c])",
- [ParserErrorCode.MIXED_PARAMETER_GROUPS]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, {b}, [c])", [
+ ParserErrorCode.MIXED_PARAMETER_GROUPS
+ ]);
}
void test_mixedParameterGroups_positionalNamed() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, [b], {c})",
- [ParserErrorCode.MIXED_PARAMETER_GROUPS]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, [b], {c})", [
+ ParserErrorCode.MIXED_PARAMETER_GROUPS
+ ]);
}
void test_mixin_application_lacks_with_clause() {
ParserTestCase.parseCompilationUnit(
- "class Foo = Bar;",
- [ParserErrorCode.EXPECTED_TOKEN]);
+ "class Foo = Bar;", [ParserErrorCode.EXPECTED_TOKEN]);
}
void test_multipleExtendsClauses() {
- ParserTestCase.parseCompilationUnit(
- "class A extends B extends C {}",
- [ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES]);
+ ParserTestCase.parseCompilationUnit("class A extends B extends C {}", [
+ ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES
+ ]);
}
void test_multipleImplementsClauses() {
- ParserTestCase.parseCompilationUnit(
- "class A implements B implements C {}",
+ ParserTestCase.parseCompilationUnit("class A implements B implements C {}",
[ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES]);
}
void test_multipleLibraryDirectives() {
ParserTestCase.parseCompilationUnit(
- "library l; library m;",
- [ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES]);
+ "library l; library m;", [ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES]);
}
void test_multipleNamedParameterGroups() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, {b}, {c})",
- [ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, {b}, {c})", [
+ ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS
+ ]);
}
void test_multiplePartOfDirectives() {
ParserTestCase.parseCompilationUnit(
- "part of l; part of m;",
- [ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES]);
+ "part of l; part of m;", [ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES]);
}
void test_multiplePositionalParameterGroups() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, [b], [c])",
- [ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, [b], [c])", [
+ ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS
+ ]);
}
void test_multipleVariablesInForEach() {
- ParserTestCase.parse4(
- "parseForStatement",
- "for (int a, b in foo) {}",
- [ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH]);
+ ParserTestCase.parse4("parseForStatement", "for (int a, b in foo) {}", [
+ ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH
+ ]);
}
void test_multipleWithClauses() {
- ParserTestCase.parseCompilationUnit(
- "class A extends B with C with D {}",
- [ParserErrorCode.MULTIPLE_WITH_CLAUSES]);
+ ParserTestCase.parseCompilationUnit("class A extends B with C with D {}", [
+ ParserErrorCode.MULTIPLE_WITH_CLAUSES
+ ]);
}
void test_namedParameterOutsideGroup() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, b : 0)",
- [ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, b : 0)", [
+ ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP
+ ]);
}
void test_nonConstructorFactory_field() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "factory int x;",
- [ParserErrorCode.NON_CONSTRUCTOR_FACTORY]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "factory int x;", [
+ ParserErrorCode.NON_CONSTRUCTOR_FACTORY
+ ]);
}
void test_nonConstructorFactory_method() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "factory int m() {}",
- [ParserErrorCode.NON_CONSTRUCTOR_FACTORY]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "factory int m() {}", [ParserErrorCode.NON_CONSTRUCTOR_FACTORY]);
}
void test_nonIdentifierLibraryName_library() {
CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "library 'lib';",
- [ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME]);
+ "library 'lib';", [ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME]);
expect(unit, isNotNull);
}
void test_nonIdentifierLibraryName_partOf() {
CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "part of 'lib';",
- [ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME]);
+ "part of 'lib';", [ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME]);
expect(unit, isNotNull);
}
void test_nonPartOfDirectiveInPart_after() {
- ParserTestCase.parseCompilationUnit(
- "part of l; part 'f.dart';",
- [ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART]);
+ ParserTestCase.parseCompilationUnit("part of l; part 'f.dart';", [
+ ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART
+ ]);
}
void test_nonPartOfDirectiveInPart_before() {
- ParserTestCase.parseCompilationUnit(
- "part 'f.dart'; part of m;",
- [ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART]);
+ ParserTestCase.parseCompilationUnit("part 'f.dart'; part of m;", [
+ ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART
+ ]);
}
void test_nonUserDefinableOperator() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "operator +=(int x) => x + 1;",
- [ParserErrorCode.NON_USER_DEFINABLE_OPERATOR]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "operator +=(int x) => x + 1;", [
+ ParserErrorCode.NON_USER_DEFINABLE_OPERATOR
+ ]);
}
void test_optionalAfterNormalParameters_named() {
ParserTestCase.parseCompilationUnit(
- "f({a}, b) {}",
- [ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS]);
+ "f({a}, b) {}", [ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS]);
}
void test_optionalAfterNormalParameters_positional() {
ParserTestCase.parseCompilationUnit(
- "f([a], b) {}",
- [ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS]);
+ "f([a], b) {}", [ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS]);
}
void test_parseCascadeSection_missingIdentifier() {
MethodInvocation methodInvocation = ParserTestCase.parse4(
- "parseCascadeSection",
- "..()",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ "parseCascadeSection", "..()", [ParserErrorCode.MISSING_IDENTIFIER]);
expect(methodInvocation.target, isNull);
expect(methodInvocation.methodName.name, "");
expect(methodInvocation.argumentList.arguments, hasLength(0));
}
void test_positionalAfterNamedArgument() {
- ParserTestCase.parse4(
- "parseArgumentList",
- "(x: 1, 2)",
- [ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT]);
+ ParserTestCase.parse4("parseArgumentList", "(x: 1, 2)", [
+ ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT
+ ]);
}
void test_positionalParameterOutsideGroup() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, b = 0)",
- [ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, b = 0)", [
+ ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP
+ ]);
}
void test_redirectionInNonFactoryConstructor() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "C() = D;",
- [ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "C() = D;", [
+ ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR
+ ]);
}
void test_setterInFunction_block() {
ParserTestCase.parseStatement(
- "set x(v) {_x = v;}",
- [ParserErrorCode.SETTER_IN_FUNCTION]);
+ "set x(v) {_x = v;}", [ParserErrorCode.SETTER_IN_FUNCTION]);
}
void test_setterInFunction_expression() {
ParserTestCase.parseStatement(
- "set x(v) => _x = v;",
- [ParserErrorCode.SETTER_IN_FUNCTION]);
+ "set x(v) => _x = v;", [ParserErrorCode.SETTER_IN_FUNCTION]);
}
void test_staticAfterConst() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "final static int f;",
- [ParserErrorCode.STATIC_AFTER_FINAL]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "final static int f;", [ParserErrorCode.STATIC_AFTER_FINAL]);
}
void test_staticAfterFinal() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "const static int f;",
- [ParserErrorCode.STATIC_AFTER_CONST]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "const static int f;", [ParserErrorCode.STATIC_AFTER_CONST]);
}
void test_staticAfterVar() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "var static f;",
- [ParserErrorCode.STATIC_AFTER_VAR]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "var static f;", [
+ ParserErrorCode.STATIC_AFTER_VAR
+ ]);
}
void test_staticConstructor() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "static C.m() {}",
- [ParserErrorCode.STATIC_CONSTRUCTOR]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "static C.m() {}", [ParserErrorCode.STATIC_CONSTRUCTOR]);
}
void test_staticGetterWithoutBody() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "static get m;",
- [ParserErrorCode.STATIC_GETTER_WITHOUT_BODY]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "static get m;", [
+ ParserErrorCode.STATIC_GETTER_WITHOUT_BODY
+ ]);
}
void test_staticOperator_noReturnType() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "static operator +(int x) => x + 1;",
- [ParserErrorCode.STATIC_OPERATOR]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "static operator +(int x) => x + 1;", [ParserErrorCode.STATIC_OPERATOR]);
}
void test_staticOperator_returnType() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "static int operator +(int x) => x + 1;",
- [ParserErrorCode.STATIC_OPERATOR]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "static int operator +(int x) => x + 1;", [
+ ParserErrorCode.STATIC_OPERATOR
+ ]);
}
void test_staticSetterWithoutBody() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "static set m(x);",
- [ParserErrorCode.STATIC_SETTER_WITHOUT_BODY]);
+ ParserTestCase.parse3("parseClassMember", <Object>[
+ "C"
+ ], "static set m(x);", [ParserErrorCode.STATIC_SETTER_WITHOUT_BODY]);
}
void test_staticTopLevelDeclaration_class() {
ParserTestCase.parseCompilationUnit(
- "static class C {}",
- [ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION]);
+ "static class C {}", [ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION]);
}
void test_staticTopLevelDeclaration_function() {
ParserTestCase.parseCompilationUnit(
- "static f() {}",
- [ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION]);
+ "static f() {}", [ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION]);
}
void test_staticTopLevelDeclaration_typedef() {
ParserTestCase.parseCompilationUnit(
- "static typedef F();",
- [ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION]);
+ "static typedef F();", [ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION]);
}
void test_staticTopLevelDeclaration_variable() {
ParserTestCase.parseCompilationUnit(
- "static var x;",
- [ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION]);
+ "static var x;", [ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION]);
}
void test_switchHasCaseAfterDefaultCase() {
- ParserTestCase.parse4(
- "parseSwitchStatement",
- "switch (a) {default: return 0; case 1: return 1;}",
- [ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE]);
+ ParserTestCase.parse4("parseSwitchStatement",
+ "switch (a) {default: return 0; case 1: return 1;}", [
+ ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE
+ ]);
}
void test_switchHasCaseAfterDefaultCase_repeated() {
- ParserTestCase.parse4(
- "parseSwitchStatement",
- "switch (a) {default: return 0; case 1: return 1; case 2: return 2;}",
- [
- ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE,
- ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE]);
+ ParserTestCase.parse4("parseSwitchStatement",
+ "switch (a) {default: return 0; case 1: return 1; case 2: return 2;}", [
+ ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE,
+ ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE
+ ]);
}
void test_switchHasMultipleDefaultCases() {
- ParserTestCase.parse4(
- "parseSwitchStatement",
- "switch (a) {default: return 0; default: return 1;}",
- [ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES]);
+ ParserTestCase.parse4("parseSwitchStatement",
+ "switch (a) {default: return 0; default: return 1;}", [
+ ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES
+ ]);
}
void test_switchHasMultipleDefaultCases_repeated() {
- ParserTestCase.parse4(
- "parseSwitchStatement",
+ ParserTestCase.parse4("parseSwitchStatement",
"switch (a) {default: return 0; default: return 1; default: return 2;}",
[
- ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES,
- ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES]);
- }
-
- void test_topLevelOperator_withType() {
- ParserTestCase.parse3(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "bool operator +(bool x, bool y) => x | y;",
- [ParserErrorCode.TOP_LEVEL_OPERATOR]);
- }
-
- void test_topLevelOperator_withVoid() {
- ParserTestCase.parse3(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "void operator +(bool x, bool y) => x | y;",
- [ParserErrorCode.TOP_LEVEL_OPERATOR]);
+ ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES,
+ ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES
+ ]);
}
void test_topLevelOperator_withoutType() {
- ParserTestCase.parse3(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "operator +(bool x, bool y) => x | y;",
- [ParserErrorCode.TOP_LEVEL_OPERATOR]);
+ ParserTestCase.parse3("parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "operator +(bool x, bool y) => x | y;", [
+ ParserErrorCode.TOP_LEVEL_OPERATOR
+ ]);
}
- void test_typedefInClass_withReturnType() {
- ParserTestCase.parseCompilationUnit(
- "class C { typedef int F(int x); }",
- [ParserErrorCode.TYPEDEF_IN_CLASS]);
+ void test_topLevelOperator_withType() {
+ ParserTestCase.parse3("parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "bool operator +(bool x, bool y) => x | y;", [
+ ParserErrorCode.TOP_LEVEL_OPERATOR
+ ]);
+ }
+
+ void test_topLevelOperator_withVoid() {
+ ParserTestCase.parse3("parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "void operator +(bool x, bool y) => x | y;", [
+ ParserErrorCode.TOP_LEVEL_OPERATOR
+ ]);
}
void test_typedefInClass_withoutReturnType() {
ParserTestCase.parseCompilationUnit(
- "class C { typedef F(x); }",
- [ParserErrorCode.TYPEDEF_IN_CLASS]);
+ "class C { typedef F(x); }", [ParserErrorCode.TYPEDEF_IN_CLASS]);
+ }
+
+ void test_typedefInClass_withReturnType() {
+ ParserTestCase.parseCompilationUnit("class C { typedef int F(int x); }", [
+ ParserErrorCode.TYPEDEF_IN_CLASS
+ ]);
}
void test_unexpectedTerminatorForParameterGroup_named() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, b})",
- [ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, b})", [
+ ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP
+ ]);
}
void test_unexpectedTerminatorForParameterGroup_optional() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, b])",
- [ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, b])", [
+ ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP
+ ]);
}
void test_unexpectedToken_endOfFieldDeclarationStatement() {
ParserTestCase.parseStatement(
- "String s = (null));",
- [ParserErrorCode.UNEXPECTED_TOKEN]);
+ "String s = (null));", [ParserErrorCode.UNEXPECTED_TOKEN]);
}
void test_unexpectedToken_returnInExpressionFuntionBody() {
ParserTestCase.parseCompilationUnit(
- "f() => return null;",
- [ParserErrorCode.UNEXPECTED_TOKEN]);
+ "f() => return null;", [ParserErrorCode.UNEXPECTED_TOKEN]);
}
void test_unexpectedToken_semicolonBetweenClassMembers() {
- ParserTestCase.parse3(
- "parseClassDeclaration",
- <Object>[emptyCommentAndMetadata(), null],
- "class C { int x; ; int y;}",
- [ParserErrorCode.UNEXPECTED_TOKEN]);
+ ParserTestCase.parse3("parseClassDeclaration", <Object>[
+ emptyCommentAndMetadata(),
+ null
+ ], "class C { int x; ; int y;}", [ParserErrorCode.UNEXPECTED_TOKEN]);
}
void test_unexpectedToken_semicolonBetweenCompilationUnitMembers() {
ParserTestCase.parseCompilationUnit(
- "int x; ; int y;",
- [ParserErrorCode.UNEXPECTED_TOKEN]);
+ "int x; ; int y;", [ParserErrorCode.UNEXPECTED_TOKEN]);
}
void test_useOfUnaryPlusOperator() {
SimpleIdentifier expression = ParserTestCase.parse4(
- "parseUnaryExpression",
- "+x",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ "parseUnaryExpression", "+x", [ParserErrorCode.MISSING_IDENTIFIER]);
EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression);
+ (obj) => obj is SimpleIdentifier, SimpleIdentifier, expression);
expect(expression.isSynthetic, isTrue);
}
void test_varAndType_field() {
ParserTestCase.parseCompilationUnit(
- "class C { var int x; }",
- [ParserErrorCode.VAR_AND_TYPE]);
+ "class C { var int x; }", [ParserErrorCode.VAR_AND_TYPE]);
}
void test_varAndType_topLevelVariable() {
ParserTestCase.parseCompilationUnit(
- "var int x;",
- [ParserErrorCode.VAR_AND_TYPE]);
+ "var int x;", [ParserErrorCode.VAR_AND_TYPE]);
}
void test_varAsTypeName_as() {
ParserTestCase.parseExpression(
- "x as var",
- [ParserErrorCode.VAR_AS_TYPE_NAME]);
+ "x as var", [ParserErrorCode.VAR_AS_TYPE_NAME]);
}
void test_varClass() {
ParserTestCase.parseCompilationUnit(
- "var class C {}",
- [ParserErrorCode.VAR_CLASS]);
+ "var class C {}", [ParserErrorCode.VAR_CLASS]);
}
void test_varEnum() {
ParserTestCase.parseCompilationUnit(
- "var enum E {ONE}",
- [ParserErrorCode.VAR_ENUM]);
+ "var enum E {ONE}", [ParserErrorCode.VAR_ENUM]);
}
void test_varReturnType() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "var m() {}",
- [ParserErrorCode.VAR_RETURN_TYPE]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "var m() {}", [
+ ParserErrorCode.VAR_RETURN_TYPE
+ ]);
}
void test_varTypedef() {
ParserTestCase.parseCompilationUnit(
- "var typedef F();",
- [ParserErrorCode.VAR_TYPEDEF]);
+ "var typedef F();", [ParserErrorCode.VAR_TYPEDEF]);
}
void test_voidParameter() {
- ParserTestCase.parse4(
- "parseNormalFormalParameter",
- "void a)",
- [ParserErrorCode.VOID_PARAMETER]);
+ ParserTestCase.parse4("parseNormalFormalParameter", "void a)", [
+ ParserErrorCode.VOID_PARAMETER
+ ]);
}
void test_voidVariable_parseClassMember_initializer() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "void x = 0;",
- [ParserErrorCode.VOID_VARIABLE]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "void x = 0;", [
+ ParserErrorCode.VOID_VARIABLE
+ ]);
}
void test_voidVariable_parseClassMember_noInitializer() {
- ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "void x;",
- [ParserErrorCode.VOID_VARIABLE]);
- }
-
- void test_voidVariable_parseCompilationUnitMember_initializer() {
- ParserTestCase.parse3(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "void a = 0;",
- [ParserErrorCode.VOID_VARIABLE]);
- }
-
- void test_voidVariable_parseCompilationUnitMember_noInitializer() {
- ParserTestCase.parse3(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "void a;",
- [ParserErrorCode.VOID_VARIABLE]);
+ ParserTestCase.parse3("parseClassMember", <Object>["C"], "void x;", [
+ ParserErrorCode.VOID_VARIABLE
+ ]);
}
void test_voidVariable_parseCompilationUnit_initializer() {
ParserTestCase.parseCompilationUnit(
- "void x = 0;",
- [ParserErrorCode.VOID_VARIABLE]);
+ "void x = 0;", [ParserErrorCode.VOID_VARIABLE]);
}
void test_voidVariable_parseCompilationUnit_noInitializer() {
ParserTestCase.parseCompilationUnit(
- "void x;",
- [ParserErrorCode.VOID_VARIABLE]);
+ "void x;", [ParserErrorCode.VOID_VARIABLE]);
+ }
+
+ void test_voidVariable_parseCompilationUnitMember_initializer() {
+ ParserTestCase.parse3("parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "void a = 0;", [ParserErrorCode.VOID_VARIABLE]);
+ }
+
+ void test_voidVariable_parseCompilationUnitMember_noInitializer() {
+ ParserTestCase.parse3("parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "void a;", [ParserErrorCode.VOID_VARIABLE]);
}
void test_voidVariable_statement_initializer() {
- ParserTestCase.parseStatement(
- "void x = 0;",
- [
- ParserErrorCode.VOID_VARIABLE,
- ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE]);
+ ParserTestCase.parseStatement("void x = 0;", [
+ ParserErrorCode.VOID_VARIABLE,
+ ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE
+ ]);
}
void test_voidVariable_statement_noInitializer() {
- ParserTestCase.parseStatement(
- "void x;",
- [
- ParserErrorCode.VOID_VARIABLE,
- ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE]);
+ ParserTestCase.parseStatement("void x;", [
+ ParserErrorCode.VOID_VARIABLE,
+ ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE
+ ]);
}
void test_withBeforeExtends() {
ParserTestCase.parseCompilationUnit(
- "class A with B extends C {}",
- [ParserErrorCode.WITH_BEFORE_EXTENDS]);
+ "class A with B extends C {}", [ParserErrorCode.WITH_BEFORE_EXTENDS]);
}
void test_withWithoutExtends() {
- ParserTestCase.parse3(
- "parseClassDeclaration",
- <Object>[emptyCommentAndMetadata(), null],
- "class A with B, C {}",
- [ParserErrorCode.WITH_WITHOUT_EXTENDS]);
+ ParserTestCase.parse3("parseClassDeclaration", <Object>[
+ emptyCommentAndMetadata(),
+ null
+ ], "class A with B, C {}", [ParserErrorCode.WITH_WITHOUT_EXTENDS]);
}
void test_wrongSeparatorForNamedParameter() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, {b = 0})",
- [ParserErrorCode.WRONG_SEPARATOR_FOR_NAMED_PARAMETER]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, {b = 0})", [
+ ParserErrorCode.WRONG_SEPARATOR_FOR_NAMED_PARAMETER
+ ]);
}
void test_wrongSeparatorForPositionalParameter() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, [b : 0])",
- [ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, [b : 0])", [
+ ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER
+ ]);
}
void test_wrongTerminatorForParameterGroup_named() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, {b, c])",
- [ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, {b, c])", [
+ ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP
+ ]);
}
void test_wrongTerminatorForParameterGroup_optional() {
- ParserTestCase.parse4(
- "parseFormalParameterList",
- "(a, [b, c})",
- [ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP]);
+ ParserTestCase.parse4("parseFormalParameterList", "(a, [b, c})", [
+ ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP
+ ]);
}
}
@@ -2714,11 +2302,8 @@
void test_insert_newIdentifier4() {
// "/** An [A]. */ class A {} class B { m() { return 1; } }"
// "/** An [A]. */ class A {} class B { m() { return 1 + 2; } }"
- _assertParse(
- "/** An [A]. */ class A {} class B { m() { return 1",
- "",
- " + 2",
- "; } }");
+ _assertParse("/** An [A]. */ class A {} class B { m() { return 1", "",
+ " + 2", "; } }");
}
void test_insert_period() {
@@ -2727,12 +2312,6 @@
_assertParse("f() => a + b", "", ".", ";");
}
- void test_insert_periodAndIdentifier() {
- // "f() => a + b;"
- // "f() => a + b.x;"
- _assertParse("f() => a + b", "", ".x", ";");
- }
-
void test_insert_period_betweenIdentifiers1() {
// "f() => a b;"
// "f() => a. b;"
@@ -2757,14 +2336,17 @@
_assertParse("f() => a", "", ".", "b;");
}
+ void test_insert_periodAndIdentifier() {
+ // "f() => a + b;"
+ // "f() => a + b.x;"
+ _assertParse("f() => a + b", "", ".x", ";");
+ }
+
void test_insert_simpleToComplexExression() {
// "/** An [A]. */ class A {} class B { m() => 1; }"
// "/** An [A]. */ class A {} class B { m() => 1 + 2; }"
_assertParse(
- "/** An [A]. */ class A {} class B { m() => 1",
- "",
- " + 2",
- "; }");
+ "/** An [A]. */ class A {} class B { m() => 1", "", " + 2", "; }");
}
void test_insert_statement_in_method_with_mismatched_braces() {
@@ -2839,10 +2421,7 @@
// "class A { var a; A(b) : a = b ? b : 0 { } }"
// "class A { var a; A(b) : a = b ? () {} : 0 { } }"
_assertParse(
- "class A { var a; A(b) : a = b ? ",
- "b",
- "() {}",
- " : 0 { } }");
+ "class A { var a; A(b) : a = b ? ", "b", "() {}", " : 0 { } }");
}
void test_replace_identifier_with_functionLiteral_in_initializer_index() {
@@ -2910,8 +2489,8 @@
* @param added the text that was added to the modified contents
* @param suffix the unchanged text after the edit region
*/
- void _assertParse(String prefix, String removed, String added,
- String suffix) {
+ void _assertParse(
+ String prefix, String removed, String added, String suffix) {
//
// Compute the information needed to perform the test.
//
@@ -2924,9 +2503,7 @@
//
GatheringErrorListener originalListener = new GatheringErrorListener();
Scanner originalScanner = new Scanner(
- source,
- new CharSequenceReader(originalContents),
- originalListener);
+ source, new CharSequenceReader(originalContents), originalListener);
Token originalTokens = originalScanner.tokenize();
expect(originalTokens, isNotNull);
Parser originalParser = new Parser(source, originalListener);
@@ -2938,9 +2515,7 @@
//
GatheringErrorListener modifiedListener = new GatheringErrorListener();
Scanner modifiedScanner = new Scanner(
- source,
- new CharSequenceReader(modifiedContents),
- modifiedListener);
+ source, new CharSequenceReader(modifiedContents), modifiedListener);
Token modifiedTokens = modifiedScanner.tokenize();
expect(modifiedTokens, isNotNull);
Parser modifiedParser = new Parser(source, modifiedListener);
@@ -2952,25 +2527,15 @@
//
GatheringErrorListener incrementalListener = new GatheringErrorListener();
IncrementalScanner incrementalScanner = new IncrementalScanner(
- source,
- new CharSequenceReader(modifiedContents),
- incrementalListener);
+ source, new CharSequenceReader(modifiedContents), incrementalListener);
Token incrementalTokens = incrementalScanner.rescan(
- originalTokens,
- replaceStart,
- removed.length,
- added.length);
+ originalTokens, replaceStart, removed.length, added.length);
expect(incrementalTokens, isNotNull);
IncrementalParser incrementalParser = new IncrementalParser(
- source,
- incrementalScanner.tokenMap,
- incrementalListener);
- CompilationUnit incrementalUnit = incrementalParser.reparse(
- originalUnit,
- incrementalScanner.leftToken,
- incrementalScanner.rightToken,
- replaceStart,
- prefix.length + removed.length);
+ source, incrementalScanner.tokenMap, incrementalListener);
+ CompilationUnit incrementalUnit = incrementalParser.reparse(originalUnit,
+ incrementalScanner.leftToken, incrementalScanner.rightToken,
+ replaceStart, prefix.length + removed.length);
expect(incrementalUnit, isNotNull);
//
// Validate that the results of the incremental parse are the same as the
@@ -2985,9 +2550,7 @@
class NonErrorParserTest extends ParserTestCase {
void test_constFactory_external() {
ParserTestCase.parse(
- "parseClassMember",
- <Object>["C"],
- "external const factory C();");
+ "parseClassMember", <Object>["C"], "external const factory C();");
}
}
@@ -3093,8 +2656,8 @@
* @throws AssertionFailedError if the result is `null` or the errors produced while
* scanning and parsing the source do not match the expected errors
*/
- static Object invokeParserMethod2(String methodName, String source,
- GatheringErrorListener listener) =>
+ static Object invokeParserMethod2(
+ String methodName, String source, GatheringErrorListener listener) =>
invokeParserMethod(methodName, _EMPTY_ARGUMENTS, source, listener);
/**
@@ -3177,7 +2740,7 @@
* scanning and parsing the source do not match the expected errors
*/
static Object parse4(String methodName, String source,
- [List<ErrorCode> errorCodes = ErrorCode.EMPTY_LIST]) =>
+ [List<ErrorCode> errorCodes = ErrorCode.EMPTY_LIST]) =>
parse3(methodName, _EMPTY_ARGUMENTS, source, errorCodes);
/**
@@ -3212,8 +2775,8 @@
* @throws Exception if the source could not be parsed, if the compilation errors in the source do
* not match those that are expected, or if the result would have been `null`
*/
- static Expression parseExpression(String source, [List<ErrorCode> errorCodes =
- ErrorCode.EMPTY_LIST]) {
+ static Expression parseExpression(String source,
+ [List<ErrorCode> errorCodes = ErrorCode.EMPTY_LIST]) {
GatheringErrorListener listener = new GatheringErrorListener();
Scanner scanner =
new Scanner(null, new CharSequenceReader(source), listener);
@@ -3235,8 +2798,8 @@
* @throws Exception if the source could not be parsed, if the compilation errors in the source do
* not match those that are expected, or if the result would have been `null`
*/
- static Statement parseStatement(String source, [List<ErrorCode> errorCodes =
- ErrorCode.EMPTY_LIST]) {
+ static Statement parseStatement(String source,
+ [List<ErrorCode> errorCodes = ErrorCode.EMPTY_LIST]) {
GatheringErrorListener listener = new GatheringErrorListener();
Scanner scanner =
new Scanner(null, new CharSequenceReader(source), listener);
@@ -3294,393 +2857,312 @@
}
void test_additiveExpression_missing_LHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("+ y", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "+ y", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
}
void test_additiveExpression_missing_LHS_RHS() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "+",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("+", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_additiveExpression_missing_RHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("x +", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "x +", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_additiveExpression_missing_RHS_super() {
BinaryExpression expression = ParserTestCase.parseExpression(
- "super +",
- [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ "super +", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_additiveExpression_precedence_multiplicative_left() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "* +",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("* +", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_additiveExpression_precedence_multiplicative_right() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "+ *",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("+ *", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
}
void test_additiveExpression_super() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "super + +",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
- }
-
- void test_assignmentExpression_missing_LHS() {
- AssignmentExpression expression =
- ParserTestCase.parseExpression("= 0", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftHandSide);
- expect(expression.leftHandSide.isSynthetic, isTrue);
- }
-
- void test_assignmentExpression_missing_RHS() {
- AssignmentExpression expression =
- ParserTestCase.parseExpression("x =", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftHandSide);
- expect(expression.rightHandSide.isSynthetic, isTrue);
+ BinaryExpression expression = ParserTestCase.parseExpression("super + +", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_assignmentExpression_missing_compound1() {
AssignmentExpression expression = ParserTestCase.parseExpression(
- "= y = 0",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ "= y = 0", [ParserErrorCode.MISSING_IDENTIFIER]);
Expression syntheticExpression = expression.leftHandSide;
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- syntheticExpression);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, syntheticExpression);
expect(syntheticExpression.isSynthetic, isTrue);
}
void test_assignmentExpression_missing_compound2() {
AssignmentExpression expression = ParserTestCase.parseExpression(
- "x = = 0",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ "x = = 0", [ParserErrorCode.MISSING_IDENTIFIER]);
Expression syntheticExpression =
(expression.rightHandSide as AssignmentExpression).leftHandSide;
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- syntheticExpression);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, syntheticExpression);
expect(syntheticExpression.isSynthetic, isTrue);
}
void test_assignmentExpression_missing_compound3() {
AssignmentExpression expression = ParserTestCase.parseExpression(
- "x = y =",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ "x = y =", [ParserErrorCode.MISSING_IDENTIFIER]);
Expression syntheticExpression =
(expression.rightHandSide as AssignmentExpression).rightHandSide;
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- syntheticExpression);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, syntheticExpression);
expect(syntheticExpression.isSynthetic, isTrue);
}
+ void test_assignmentExpression_missing_LHS() {
+ AssignmentExpression expression = ParserTestCase.parseExpression(
+ "= 0", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftHandSide);
+ expect(expression.leftHandSide.isSynthetic, isTrue);
+ }
+
+ void test_assignmentExpression_missing_RHS() {
+ AssignmentExpression expression = ParserTestCase.parseExpression(
+ "x =", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftHandSide);
+ expect(expression.rightHandSide.isSynthetic, isTrue);
+ }
+
void test_bitwiseAndExpression_missing_LHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("& y", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "& y", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
}
void test_bitwiseAndExpression_missing_LHS_RHS() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "&",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("&", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_bitwiseAndExpression_missing_RHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("x &", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "x &", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_bitwiseAndExpression_missing_RHS_super() {
BinaryExpression expression = ParserTestCase.parseExpression(
- "super &",
- [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ "super &", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_bitwiseAndExpression_precedence_equality_left() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "== &&",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("== &&", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_bitwiseAndExpression_precedence_equality_right() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "&& ==",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("&& ==", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
}
void test_bitwiseAndExpression_super() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "super & &",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("super & &", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_bitwiseOrExpression_missing_LHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("| y", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "| y", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
}
void test_bitwiseOrExpression_missing_LHS_RHS() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "|",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("|", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_bitwiseOrExpression_missing_RHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("x |", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "x |", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_bitwiseOrExpression_missing_RHS_super() {
BinaryExpression expression = ParserTestCase.parseExpression(
- "super |",
- [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ "super |", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_bitwiseOrExpression_precedence_xor_left() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "^ |",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("^ |", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_bitwiseOrExpression_precedence_xor_right() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "| ^",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("| ^", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
}
void test_bitwiseOrExpression_super() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "super | |",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("super | |", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_bitwiseXorExpression_missing_LHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("^ y", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "^ y", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
}
void test_bitwiseXorExpression_missing_LHS_RHS() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "^",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("^", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_bitwiseXorExpression_missing_RHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("x ^", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "x ^", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_bitwiseXorExpression_missing_RHS_super() {
BinaryExpression expression = ParserTestCase.parseExpression(
- "super ^",
- [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ "super ^", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_bitwiseXorExpression_precedence_and_left() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "& ^",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("& ^", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_bitwiseXorExpression_precedence_and_right() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "^ &",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("^ &", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
}
void test_bitwiseXorExpression_super() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "super ^ ^",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("super ^ ^", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_classTypeAlias_withBody() {
@@ -3691,168 +3173,134 @@
void test_conditionalExpression_missingElse() {
ConditionalExpression expression = ParserTestCase.parse4(
- "parseConditionalExpression",
- "x ? y :",
- [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.elseExpression);
+ "parseConditionalExpression", "x ? y :", [
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.elseExpression);
expect(expression.elseExpression.isSynthetic, isTrue);
}
void test_conditionalExpression_missingThen() {
ConditionalExpression expression = ParserTestCase.parse4(
- "parseConditionalExpression",
- "x ? : z",
- [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.thenExpression);
+ "parseConditionalExpression", "x ? : z", [
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.thenExpression);
expect(expression.thenExpression.isSynthetic, isTrue);
}
void test_equalityExpression_missing_LHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("== y", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "== y", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
}
void test_equalityExpression_missing_LHS_RHS() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "==",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("==", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_equalityExpression_missing_RHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("x ==", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "x ==", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_equalityExpression_missing_RHS_super() {
BinaryExpression expression = ParserTestCase.parseExpression(
- "super ==",
- [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ "super ==", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_equalityExpression_precedence_relational_left() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "is ==",
- [
- ParserErrorCode.EXPECTED_TYPE_NAME,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
+ BinaryExpression expression = ParserTestCase.parseExpression("is ==", [
+ ParserErrorCode.EXPECTED_TYPE_NAME,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
EngineTestCase.assertInstanceOf(
- (obj) => obj is IsExpression,
- IsExpression,
- expression.leftOperand);
+ (obj) => obj is IsExpression, IsExpression, expression.leftOperand);
}
void test_equalityExpression_precedence_relational_right() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "== is",
- [
- ParserErrorCode.EXPECTED_TYPE_NAME,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
+ BinaryExpression expression = ParserTestCase.parseExpression("== is", [
+ ParserErrorCode.EXPECTED_TYPE_NAME,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
EngineTestCase.assertInstanceOf(
- (obj) => obj is IsExpression,
- IsExpression,
- expression.rightOperand);
+ (obj) => obj is IsExpression, IsExpression, expression.rightOperand);
}
void test_equalityExpression_super() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "super == ==",
+ BinaryExpression expression = ParserTestCase.parseExpression("super == ==",
[
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_expressionList_multiple_end() {
- List<Expression> result = ParserTestCase.parse4(
- "parseExpressionList",
- ", 2, 3, 4",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ List<Expression> result = ParserTestCase.parse4("parseExpressionList",
+ ", 2, 3, 4", [ParserErrorCode.MISSING_IDENTIFIER]);
expect(result, hasLength(4));
Expression syntheticExpression = result[0];
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- syntheticExpression);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, syntheticExpression);
expect(syntheticExpression.isSynthetic, isTrue);
}
void test_expressionList_multiple_middle() {
- List<Expression> result = ParserTestCase.parse4(
- "parseExpressionList",
- "1, 2, , 4",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ List<Expression> result = ParserTestCase.parse4("parseExpressionList",
+ "1, 2, , 4", [ParserErrorCode.MISSING_IDENTIFIER]);
expect(result, hasLength(4));
Expression syntheticExpression = result[2];
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- syntheticExpression);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, syntheticExpression);
expect(syntheticExpression.isSynthetic, isTrue);
}
void test_expressionList_multiple_start() {
- List<Expression> result = ParserTestCase.parse4(
- "parseExpressionList",
- "1, 2, 3,",
- [ParserErrorCode.MISSING_IDENTIFIER]);
+ List<Expression> result = ParserTestCase.parse4("parseExpressionList",
+ "1, 2, 3,", [ParserErrorCode.MISSING_IDENTIFIER]);
expect(result, hasLength(4));
Expression syntheticExpression = result[3];
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- syntheticExpression);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, syntheticExpression);
expect(syntheticExpression.isSynthetic, isTrue);
}
void test_functionExpression_in_ConstructorFieldInitializer() {
CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "class A { A() : a = (){}; var v; }",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.UNEXPECTED_TOKEN]);
+ "class A { A() : a = (){}; var v; }", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.UNEXPECTED_TOKEN
+ ]);
// Make sure we recovered and parsed "var v" correctly
ClassDeclaration declaration = unit.declarations[0] as ClassDeclaration;
NodeList<ClassMember> members = declaration.members;
ClassMember fieldDecl = members[1];
EngineTestCase.assertInstanceOf(
- (obj) => obj is FieldDeclaration,
- FieldDeclaration,
- fieldDecl);
+ (obj) => obj is FieldDeclaration, FieldDeclaration, fieldDecl);
NodeList<VariableDeclaration> vars =
(fieldDecl as FieldDeclaration).fields.variables;
expect(vars, hasLength(1));
@@ -3861,8 +3309,113 @@
void test_functionExpression_named() {
ParserTestCase.parseExpression(
- "m(f() => 0);",
- [ParserErrorCode.EXPECTED_TOKEN]);
+ "m(f() => 0);", [ParserErrorCode.EXPECTED_TOKEN]);
+ }
+
+ void test_incomplete_conditionalExpression() {
+ ParserTestCase.parseExpression("x ? 0", [
+ ParserErrorCode.EXPECTED_TOKEN,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ }
+
+ void test_incomplete_constructorInitializers_empty() {
+ ParserTestCase.parse3("parseClassMember", ["C"], "C() : {}", [
+ ParserErrorCode.MISSING_INITIALIZER
+ ]);
+ }
+
+ void test_incomplete_constructorInitializers_missingEquals() {
+ ClassMember member = ParserTestCase.parse3("parseClassMember", [
+ "C"
+ ], "C() : x(3) {}", [ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER]);
+ expect(member, new isInstanceOf<ConstructorDeclaration>());
+ NodeList<ConstructorInitializer> initializers =
+ (member as ConstructorDeclaration).initializers;
+ expect(initializers, hasLength(1));
+ ConstructorInitializer initializer = initializers[0];
+ expect(initializer, new isInstanceOf<ConstructorFieldInitializer>());
+ Expression expression =
+ (initializer as ConstructorFieldInitializer).expression;
+ expect(expression, isNotNull);
+ expect(expression, new isInstanceOf<ParenthesizedExpression>());
+ }
+
+ void test_incomplete_constructorInitializers_variable() {
+ ParserTestCase.parse3("parseClassMember", ["C"], "C() : x {}", [
+ ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER
+ ]);
+ }
+
+ void test_incomplete_topLevelFunction() {
+ ParserTestCase.parseCompilationUnit(
+ "foo();", [ParserErrorCode.MISSING_FUNCTION_BODY]);
+ }
+
+ void test_incomplete_topLevelVariable() {
+ CompilationUnit unit = ParserTestCase.parseCompilationUnit(
+ "String", [ParserErrorCode.EXPECTED_EXECUTABLE]);
+ NodeList<CompilationUnitMember> declarations = unit.declarations;
+ expect(declarations, hasLength(1));
+ CompilationUnitMember member = declarations[0];
+ EngineTestCase.assertInstanceOf((obj) => obj is TopLevelVariableDeclaration,
+ TopLevelVariableDeclaration, member);
+ NodeList<VariableDeclaration> variables =
+ (member as TopLevelVariableDeclaration).variables.variables;
+ expect(variables, hasLength(1));
+ SimpleIdentifier name = variables[0].name;
+ expect(name.isSynthetic, isTrue);
+ }
+
+ void test_incomplete_topLevelVariable_const() {
+ CompilationUnit unit = ParserTestCase.parseCompilationUnit("const ", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.EXPECTED_TOKEN
+ ]);
+ NodeList<CompilationUnitMember> declarations = unit.declarations;
+ expect(declarations, hasLength(1));
+ CompilationUnitMember member = declarations[0];
+ EngineTestCase.assertInstanceOf((obj) => obj is TopLevelVariableDeclaration,
+ TopLevelVariableDeclaration, member);
+ NodeList<VariableDeclaration> variables =
+ (member as TopLevelVariableDeclaration).variables.variables;
+ expect(variables, hasLength(1));
+ SimpleIdentifier name = variables[0].name;
+ expect(name.isSynthetic, isTrue);
+ }
+
+ void test_incomplete_topLevelVariable_final() {
+ CompilationUnit unit = ParserTestCase.parseCompilationUnit("final ", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.EXPECTED_TOKEN
+ ]);
+ NodeList<CompilationUnitMember> declarations = unit.declarations;
+ expect(declarations, hasLength(1));
+ CompilationUnitMember member = declarations[0];
+ EngineTestCase.assertInstanceOf((obj) => obj is TopLevelVariableDeclaration,
+ TopLevelVariableDeclaration, member);
+ NodeList<VariableDeclaration> variables =
+ (member as TopLevelVariableDeclaration).variables.variables;
+ expect(variables, hasLength(1));
+ SimpleIdentifier name = variables[0].name;
+ expect(name.isSynthetic, isTrue);
+ }
+
+ void test_incomplete_topLevelVariable_var() {
+ CompilationUnit unit = ParserTestCase.parseCompilationUnit("var ", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.EXPECTED_TOKEN
+ ]);
+ NodeList<CompilationUnitMember> declarations = unit.declarations;
+ expect(declarations, hasLength(1));
+ CompilationUnitMember member = declarations[0];
+ EngineTestCase.assertInstanceOf((obj) => obj is TopLevelVariableDeclaration,
+ TopLevelVariableDeclaration, member);
+ NodeList<VariableDeclaration> variables =
+ (member as TopLevelVariableDeclaration).variables.variables;
+ expect(variables, hasLength(1));
+ SimpleIdentifier name = variables[0].name;
+ expect(name.isSynthetic, isTrue);
}
void test_incompleteField_const() {
@@ -3874,16 +3427,12 @@
expect(declarations, hasLength(1));
CompilationUnitMember unitMember = declarations[0];
EngineTestCase.assertInstanceOf(
- (obj) => obj is ClassDeclaration,
- ClassDeclaration,
- unitMember);
+ (obj) => obj is ClassDeclaration, ClassDeclaration, unitMember);
NodeList<ClassMember> members = (unitMember as ClassDeclaration).members;
expect(members, hasLength(1));
ClassMember classMember = members[0];
EngineTestCase.assertInstanceOf(
- (obj) => obj is FieldDeclaration,
- FieldDeclaration,
- classMember);
+ (obj) => obj is FieldDeclaration, FieldDeclaration, classMember);
VariableDeclarationList fieldList =
(classMember as FieldDeclaration).fields;
expect((fieldList.keyword as KeywordToken).keyword, Keyword.CONST);
@@ -3902,16 +3451,12 @@
expect(declarations, hasLength(1));
CompilationUnitMember unitMember = declarations[0];
EngineTestCase.assertInstanceOf(
- (obj) => obj is ClassDeclaration,
- ClassDeclaration,
- unitMember);
+ (obj) => obj is ClassDeclaration, ClassDeclaration, unitMember);
NodeList<ClassMember> members = (unitMember as ClassDeclaration).members;
expect(members, hasLength(1));
ClassMember classMember = members[0];
EngineTestCase.assertInstanceOf(
- (obj) => obj is FieldDeclaration,
- FieldDeclaration,
- classMember);
+ (obj) => obj is FieldDeclaration, FieldDeclaration, classMember);
VariableDeclarationList fieldList =
(classMember as FieldDeclaration).fields;
expect((fieldList.keyword as KeywordToken).keyword, Keyword.FINAL);
@@ -3930,16 +3475,12 @@
expect(declarations, hasLength(1));
CompilationUnitMember unitMember = declarations[0];
EngineTestCase.assertInstanceOf(
- (obj) => obj is ClassDeclaration,
- ClassDeclaration,
- unitMember);
+ (obj) => obj is ClassDeclaration, ClassDeclaration, unitMember);
NodeList<ClassMember> members = (unitMember as ClassDeclaration).members;
expect(members, hasLength(1));
ClassMember classMember = members[0];
EngineTestCase.assertInstanceOf(
- (obj) => obj is FieldDeclaration,
- FieldDeclaration,
- classMember);
+ (obj) => obj is FieldDeclaration, FieldDeclaration, classMember);
VariableDeclarationList fieldList =
(classMember as FieldDeclaration).fields;
expect((fieldList.keyword as KeywordToken).keyword, Keyword.VAR);
@@ -3949,137 +3490,18 @@
expect(field.name.isSynthetic, isTrue);
}
- void test_incomplete_conditionalExpression() {
- ParserTestCase.parseExpression(
- "x ? 0",
- [ParserErrorCode.EXPECTED_TOKEN, ParserErrorCode.MISSING_IDENTIFIER]);
- }
-
- void test_incomplete_constructorInitializers_empty() {
- ParserTestCase.parse3(
- "parseClassMember",
- ["C"],
- "C() : {}",
- [ParserErrorCode.MISSING_INITIALIZER]);
- }
-
- void test_incomplete_constructorInitializers_missingEquals() {
- ClassMember member = ParserTestCase.parse3(
- "parseClassMember",
- ["C"],
- "C() : x(3) {}",
- [ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER]);
- expect(member, new isInstanceOf<ConstructorDeclaration>());
- NodeList<ConstructorInitializer> initializers =
- (member as ConstructorDeclaration).initializers;
- expect(initializers, hasLength(1));
- ConstructorInitializer initializer = initializers[0];
- expect(initializer, new isInstanceOf<ConstructorFieldInitializer>());
- Expression expression =
- (initializer as ConstructorFieldInitializer).expression;
- expect(expression, isNotNull);
- expect(expression, new isInstanceOf<ParenthesizedExpression>());
- }
-
- void test_incomplete_constructorInitializers_variable() {
- ParserTestCase.parse3(
- "parseClassMember",
- ["C"],
- "C() : x {}",
- [ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER]);
- }
-
- void test_incomplete_topLevelFunction() {
- ParserTestCase.parseCompilationUnit(
- "foo();",
- [ParserErrorCode.MISSING_FUNCTION_BODY]);
- }
-
- void test_incomplete_topLevelVariable() {
- CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "String",
- [ParserErrorCode.EXPECTED_EXECUTABLE]);
- NodeList<CompilationUnitMember> declarations = unit.declarations;
- expect(declarations, hasLength(1));
- CompilationUnitMember member = declarations[0];
- EngineTestCase.assertInstanceOf(
- (obj) => obj is TopLevelVariableDeclaration,
- TopLevelVariableDeclaration,
- member);
- NodeList<VariableDeclaration> variables =
- (member as TopLevelVariableDeclaration).variables.variables;
- expect(variables, hasLength(1));
- SimpleIdentifier name = variables[0].name;
- expect(name.isSynthetic, isTrue);
- }
-
- void test_incomplete_topLevelVariable_const() {
- CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "const ",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.EXPECTED_TOKEN]);
- NodeList<CompilationUnitMember> declarations = unit.declarations;
- expect(declarations, hasLength(1));
- CompilationUnitMember member = declarations[0];
- EngineTestCase.assertInstanceOf(
- (obj) => obj is TopLevelVariableDeclaration,
- TopLevelVariableDeclaration,
- member);
- NodeList<VariableDeclaration> variables =
- (member as TopLevelVariableDeclaration).variables.variables;
- expect(variables, hasLength(1));
- SimpleIdentifier name = variables[0].name;
- expect(name.isSynthetic, isTrue);
- }
-
- void test_incomplete_topLevelVariable_final() {
- CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "final ",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.EXPECTED_TOKEN]);
- NodeList<CompilationUnitMember> declarations = unit.declarations;
- expect(declarations, hasLength(1));
- CompilationUnitMember member = declarations[0];
- EngineTestCase.assertInstanceOf(
- (obj) => obj is TopLevelVariableDeclaration,
- TopLevelVariableDeclaration,
- member);
- NodeList<VariableDeclaration> variables =
- (member as TopLevelVariableDeclaration).variables.variables;
- expect(variables, hasLength(1));
- SimpleIdentifier name = variables[0].name;
- expect(name.isSynthetic, isTrue);
- }
-
- void test_incomplete_topLevelVariable_var() {
- CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "var ",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.EXPECTED_TOKEN]);
- NodeList<CompilationUnitMember> declarations = unit.declarations;
- expect(declarations, hasLength(1));
- CompilationUnitMember member = declarations[0];
- EngineTestCase.assertInstanceOf(
- (obj) => obj is TopLevelVariableDeclaration,
- TopLevelVariableDeclaration,
- member);
- NodeList<VariableDeclaration> variables =
- (member as TopLevelVariableDeclaration).variables.variables;
- expect(variables, hasLength(1));
- SimpleIdentifier name = variables[0].name;
- expect(name.isSynthetic, isTrue);
- }
-
void test_invalidFunctionBodyModifier() {
ParserTestCase.parseCompilationUnit(
- "f() sync {}",
- [ParserErrorCode.MISSING_STAR_AFTER_SYNC]);
+ "f() sync {}", [ParserErrorCode.MISSING_STAR_AFTER_SYNC]);
}
void test_isExpression_noType() {
CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "class Bar<T extends Foo> {m(x){if (x is ) return;if (x is !)}}",
- [
- ParserErrorCode.EXPECTED_TYPE_NAME,
- ParserErrorCode.EXPECTED_TYPE_NAME,
- ParserErrorCode.MISSING_STATEMENT]);
+ "class Bar<T extends Foo> {m(x){if (x is ) return;if (x is !)}}", [
+ ParserErrorCode.EXPECTED_TYPE_NAME,
+ ParserErrorCode.EXPECTED_TYPE_NAME,
+ ParserErrorCode.MISSING_STATEMENT
+ ]);
ClassDeclaration declaration = unit.declarations[0] as ClassDeclaration;
MethodDeclaration method = declaration.members[0] as MethodDeclaration;
BlockFunctionBody body = method.body as BlockFunctionBody;
@@ -4091,141 +3513,119 @@
TypeName type = expression.type;
expect(type, isNotNull);
expect(type.name.isSynthetic, isTrue);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is EmptyStatement,
- EmptyStatement,
- ifStatement.thenStatement);
+ EngineTestCase.assertInstanceOf((obj) => obj is EmptyStatement,
+ EmptyStatement, ifStatement.thenStatement);
}
void test_keywordInPlaceOfIdentifier() {
// TODO(brianwilkerson) We could do better with this.
- ParserTestCase.parseCompilationUnit(
- "do() {}",
- [ParserErrorCode.EXPECTED_EXECUTABLE, ParserErrorCode.UNEXPECTED_TOKEN]);
+ ParserTestCase.parseCompilationUnit("do() {}", [
+ ParserErrorCode.EXPECTED_EXECUTABLE,
+ ParserErrorCode.UNEXPECTED_TOKEN
+ ]);
}
void test_logicalAndExpression_missing_LHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("&& y", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "&& y", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
}
void test_logicalAndExpression_missing_LHS_RHS() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "&&",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("&&", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_logicalAndExpression_missing_RHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("x &&", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "x &&", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_logicalAndExpression_precedence_bitwiseOr_left() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "| &&",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("| &&", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_logicalAndExpression_precedence_bitwiseOr_right() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "&& |",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("&& |", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
}
void test_logicalOrExpression_missing_LHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("|| y", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "|| y", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
}
void test_logicalOrExpression_missing_LHS_RHS() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "||",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("||", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_logicalOrExpression_missing_RHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("x ||", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "x ||", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_logicalOrExpression_precedence_logicalAnd_left() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "&& ||",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("&& ||", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_logicalOrExpression_precedence_logicalAnd_right() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "|| &&",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("|| &&", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
+ }
+
+ void test_missing_commaInArgumentList() {
+ ParserTestCase.parseExpression(
+ "f(x: 1 y: 2)", [ParserErrorCode.EXPECTED_TOKEN]);
}
void test_missingGet() {
@@ -4240,284 +3640,222 @@
NodeList<ClassMember> members = classDeclaration.members;
expect(members, hasLength(2));
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodDeclaration,
- MethodDeclaration,
- members[0]);
+ (obj) => obj is MethodDeclaration, MethodDeclaration, members[0]);
ClassMember member = members[1];
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodDeclaration,
- MethodDeclaration,
- member);
+ (obj) => obj is MethodDeclaration, MethodDeclaration, member);
expect((member as MethodDeclaration).name.name, "foo");
}
void test_missingIdentifier_afterAnnotation() {
- MethodDeclaration method = ParserTestCase.parse3(
- "parseClassMember",
- <Object>["C"],
- "@override }",
- [ParserErrorCode.EXPECTED_CLASS_MEMBER]);
+ MethodDeclaration method = ParserTestCase.parse3("parseClassMember",
+ <Object>["C"], "@override }", [ParserErrorCode.EXPECTED_CLASS_MEMBER]);
expect(method.documentationComment, isNull);
NodeList<Annotation> metadata = method.metadata;
expect(metadata, hasLength(1));
expect(metadata[0].name.name, "override");
}
- void test_missing_commaInArgumentList() {
- ParserTestCase.parseExpression(
- "f(x: 1 y: 2)",
- [ParserErrorCode.EXPECTED_TOKEN]);
- }
-
void test_multiplicativeExpression_missing_LHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("* y", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "* y", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
}
void test_multiplicativeExpression_missing_LHS_RHS() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "*",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("*", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_multiplicativeExpression_missing_RHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("x *", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "x *", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_multiplicativeExpression_missing_RHS_super() {
BinaryExpression expression = ParserTestCase.parseExpression(
- "super *",
- [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ "super *", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_multiplicativeExpression_precedence_unary_left() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("-x *", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is PrefixExpression,
- PrefixExpression,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "-x *", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is PrefixExpression,
+ PrefixExpression, expression.leftOperand);
}
void test_multiplicativeExpression_precedence_unary_right() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("* -y", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is PrefixExpression,
- PrefixExpression,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "* -y", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is PrefixExpression,
+ PrefixExpression, expression.rightOperand);
}
void test_multiplicativeExpression_super() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "super == ==",
+ BinaryExpression expression = ParserTestCase.parseExpression("super == ==",
[
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_nonStringLiteralUri_import() {
- ParserTestCase.parseCompilationUnit(
- "import dart:io; class C {}",
- [ParserErrorCode.NON_STRING_LITERAL_AS_URI]);
+ ParserTestCase.parseCompilationUnit("import dart:io; class C {}", [
+ ParserErrorCode.NON_STRING_LITERAL_AS_URI
+ ]);
}
void test_prefixExpression_missing_operand_minus() {
- PrefixExpression expression =
- ParserTestCase.parseExpression("-", [ParserErrorCode.MISSING_IDENTIFIER]);
+ PrefixExpression expression = ParserTestCase.parseExpression(
+ "-", [ParserErrorCode.MISSING_IDENTIFIER]);
EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.operand);
+ (obj) => obj is SimpleIdentifier, SimpleIdentifier, expression.operand);
expect(expression.operand.isSynthetic, isTrue);
expect(expression.operator.type, TokenType.MINUS);
}
void test_primaryExpression_argumentDefinitionTest() {
Expression expression = ParserTestCase.parse4(
- "parsePrimaryExpression",
- "?a",
- [ParserErrorCode.UNEXPECTED_TOKEN]);
+ "parsePrimaryExpression", "?a", [ParserErrorCode.UNEXPECTED_TOKEN]);
EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression);
+ (obj) => obj is SimpleIdentifier, SimpleIdentifier, expression);
}
void test_relationalExpression_missing_LHS() {
- IsExpression expression =
- ParserTestCase.parseExpression("is y", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.expression);
+ IsExpression expression = ParserTestCase.parseExpression(
+ "is y", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.expression);
expect(expression.expression.isSynthetic, isTrue);
}
void test_relationalExpression_missing_LHS_RHS() {
- IsExpression expression = ParserTestCase.parseExpression(
- "is",
- [ParserErrorCode.EXPECTED_TYPE_NAME, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.expression);
+ IsExpression expression = ParserTestCase.parseExpression("is", [
+ ParserErrorCode.EXPECTED_TYPE_NAME,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.expression);
expect(expression.expression.isSynthetic, isTrue);
EngineTestCase.assertInstanceOf(
- (obj) => obj is TypeName,
- TypeName,
- expression.type);
+ (obj) => obj is TypeName, TypeName, expression.type);
expect(expression.type.isSynthetic, isTrue);
}
void test_relationalExpression_missing_RHS() {
- IsExpression expression =
- ParserTestCase.parseExpression("x is", [ParserErrorCode.EXPECTED_TYPE_NAME]);
+ IsExpression expression = ParserTestCase.parseExpression(
+ "x is", [ParserErrorCode.EXPECTED_TYPE_NAME]);
EngineTestCase.assertInstanceOf(
- (obj) => obj is TypeName,
- TypeName,
- expression.type);
+ (obj) => obj is TypeName, TypeName, expression.type);
expect(expression.type.isSynthetic, isTrue);
}
void test_relationalExpression_precedence_shift_right() {
- IsExpression expression = ParserTestCase.parseExpression(
- "<< is",
- [
- ParserErrorCode.EXPECTED_TYPE_NAME,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.expression);
+ IsExpression expression = ParserTestCase.parseExpression("<< is", [
+ ParserErrorCode.EXPECTED_TYPE_NAME,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.expression);
}
void test_shiftExpression_missing_LHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("<< y", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "<< y", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
}
void test_shiftExpression_missing_LHS_RHS() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "<<",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("<<", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.leftOperand);
expect(expression.leftOperand.isSynthetic, isTrue);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_shiftExpression_missing_RHS() {
- BinaryExpression expression =
- ParserTestCase.parseExpression("x <<", [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression(
+ "x <<", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_shiftExpression_missing_RHS_super() {
BinaryExpression expression = ParserTestCase.parseExpression(
- "super <<",
- [ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
- expression.rightOperand);
+ "super <<", [ParserErrorCode.MISSING_IDENTIFIER]);
+ EngineTestCase.assertInstanceOf((obj) => obj is SimpleIdentifier,
+ SimpleIdentifier, expression.rightOperand);
expect(expression.rightOperand.isSynthetic, isTrue);
}
void test_shiftExpression_precedence_unary_left() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "+ <<",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("+ <<", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_shiftExpression_precedence_unary_right() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "<< +",
- [
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER,
- ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.rightOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("<< +", [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.rightOperand);
}
void test_shiftExpression_super() {
- BinaryExpression expression = ParserTestCase.parseExpression(
- "super << <<",
- [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.MISSING_IDENTIFIER]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression.leftOperand);
+ BinaryExpression expression = ParserTestCase.parseExpression("super << <<",
+ [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_IDENTIFIER
+ ]);
+ EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
+ BinaryExpression, expression.leftOperand);
}
void test_typedef_eof() {
- CompilationUnit unit = ParserTestCase.parseCompilationUnit(
- "typedef n",
- [ParserErrorCode.EXPECTED_TOKEN, ParserErrorCode.MISSING_TYPEDEF_PARAMETERS]);
+ CompilationUnit unit = ParserTestCase.parseCompilationUnit("typedef n", [
+ ParserErrorCode.EXPECTED_TOKEN,
+ ParserErrorCode.MISSING_TYPEDEF_PARAMETERS
+ ]);
NodeList<CompilationUnitMember> declarations = unit.declarations;
expect(declarations, hasLength(1));
CompilationUnitMember member = declarations[0];
EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionTypeAlias,
- FunctionTypeAlias,
- member);
+ (obj) => obj is FunctionTypeAlias, FunctionTypeAlias, member);
}
void test_unaryPlus() {
@@ -4541,15 +3879,13 @@
void test_visitAsExpression() {
AsExpression fromNode = AstFactory.asExpression(
- AstFactory.identifier3("x"),
- AstFactory.typeName4("A"));
+ AstFactory.identifier3("x"), AstFactory.typeName4("A"));
DartType propagatedType = ElementFactory.classElement2("A").type;
fromNode.propagatedType = propagatedType;
DartType staticType = ElementFactory.classElement2("B").type;
fromNode.staticType = staticType;
AsExpression toNode = AstFactory.asExpression(
- AstFactory.identifier3("x"),
- AstFactory.typeName4("A"));
+ AstFactory.identifier3("x"), AstFactory.typeName4("A"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
expect(toNode.propagatedType, same(propagatedType));
expect(toNode.staticType, same(staticType));
@@ -4557,8 +3893,7 @@
void test_visitAssignmentExpression() {
AssignmentExpression fromNode = AstFactory.assignmentExpression(
- AstFactory.identifier3("a"),
- TokenType.PLUS_EQ,
+ AstFactory.identifier3("a"), TokenType.PLUS_EQ,
AstFactory.identifier3("b"));
DartType propagatedType = ElementFactory.classElement2("C").type;
MethodElement propagatedElement =
@@ -4570,8 +3905,7 @@
fromNode.staticElement = staticElement;
fromNode.staticType = staticType;
AssignmentExpression toNode = AstFactory.assignmentExpression(
- AstFactory.identifier3("a"),
- TokenType.PLUS_EQ,
+ AstFactory.identifier3("a"), TokenType.PLUS_EQ,
AstFactory.identifier3("b"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
expect(toNode.propagatedElement, same(propagatedElement));
@@ -4582,8 +3916,7 @@
void test_visitBinaryExpression() {
BinaryExpression fromNode = AstFactory.binaryExpression(
- AstFactory.identifier3("a"),
- TokenType.PLUS,
+ AstFactory.identifier3("a"), TokenType.PLUS,
AstFactory.identifier3("b"));
DartType propagatedType = ElementFactory.classElement2("C").type;
MethodElement propagatedElement =
@@ -4595,8 +3928,7 @@
fromNode.staticElement = staticElement;
fromNode.staticType = staticType;
BinaryExpression toNode = AstFactory.binaryExpression(
- AstFactory.identifier3("a"),
- TokenType.PLUS,
+ AstFactory.identifier3("a"), TokenType.PLUS,
AstFactory.identifier3("b"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
expect(toNode.propagatedElement, same(propagatedElement));
@@ -4619,15 +3951,13 @@
void test_visitCascadeExpression() {
CascadeExpression fromNode = AstFactory.cascadeExpression(
- AstFactory.identifier3("a"),
- [AstFactory.identifier3("b")]);
+ AstFactory.identifier3("a"), [AstFactory.identifier3("b")]);
DartType propagatedType = ElementFactory.classElement2("C").type;
fromNode.propagatedType = propagatedType;
DartType staticType = ElementFactory.classElement2("C").type;
fromNode.staticType = staticType;
CascadeExpression toNode = AstFactory.cascadeExpression(
- AstFactory.identifier3("a"),
- [AstFactory.identifier3("b")]);
+ AstFactory.identifier3("a"), [AstFactory.identifier3("b")]);
ResolutionCopier.copyResolutionData(fromNode, toNode);
expect(toNode.propagatedType, same(propagatedType));
expect(toNode.staticType, same(staticType));
@@ -4645,16 +3975,14 @@
void test_visitConditionalExpression() {
ConditionalExpression fromNode = AstFactory.conditionalExpression(
- AstFactory.identifier3("c"),
- AstFactory.identifier3("a"),
+ AstFactory.identifier3("c"), AstFactory.identifier3("a"),
AstFactory.identifier3("b"));
DartType propagatedType = ElementFactory.classElement2("C").type;
fromNode.propagatedType = propagatedType;
DartType staticType = ElementFactory.classElement2("C").type;
fromNode.staticType = staticType;
ConditionalExpression toNode = AstFactory.conditionalExpression(
- AstFactory.identifier3("c"),
- AstFactory.identifier3("a"),
+ AstFactory.identifier3("c"), AstFactory.identifier3("a"),
AstFactory.identifier3("b"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
expect(toNode.propagatedType, same(propagatedType));
@@ -4665,19 +3993,14 @@
String className = "A";
String constructorName = "c";
ConstructorDeclaration fromNode = AstFactory.constructorDeclaration(
- AstFactory.identifier3(className),
- constructorName,
- AstFactory.formalParameterList(),
- null);
+ AstFactory.identifier3(className), constructorName,
+ AstFactory.formalParameterList(), null);
ConstructorElement element = ElementFactory.constructorElement2(
- ElementFactory.classElement2(className),
- constructorName);
+ ElementFactory.classElement2(className), constructorName);
fromNode.element = element;
ConstructorDeclaration toNode = AstFactory.constructorDeclaration(
- AstFactory.identifier3(className),
- constructorName,
- AstFactory.formalParameterList(),
- null);
+ AstFactory.identifier3(className), constructorName,
+ AstFactory.formalParameterList(), null);
ResolutionCopier.copyResolutionData(fromNode, toNode);
expect(toNode.element, same(element));
}
@@ -4685,8 +4008,8 @@
void test_visitConstructorName() {
ConstructorName fromNode =
AstFactory.constructorName(AstFactory.typeName4("A"), "c");
- ConstructorElement staticElement =
- ElementFactory.constructorElement2(ElementFactory.classElement2("A"), "c");
+ ConstructorElement staticElement = ElementFactory.constructorElement2(
+ ElementFactory.classElement2("A"), "c");
fromNode.staticElement = staticElement;
ConstructorName toNode =
AstFactory.constructorName(AstFactory.typeName4("A"), "c");
@@ -4717,18 +4040,16 @@
void test_visitFunctionExpression() {
FunctionExpression fromNode = AstFactory.functionExpression2(
- AstFactory.formalParameterList(),
- AstFactory.emptyFunctionBody());
- MethodElement element =
- ElementFactory.methodElement("m", ElementFactory.classElement2("C").type);
+ AstFactory.formalParameterList(), AstFactory.emptyFunctionBody());
+ MethodElement element = ElementFactory.methodElement(
+ "m", ElementFactory.classElement2("C").type);
fromNode.element = element;
DartType propagatedType = ElementFactory.classElement2("C").type;
fromNode.propagatedType = propagatedType;
DartType staticType = ElementFactory.classElement2("C").type;
fromNode.staticType = staticType;
FunctionExpression toNode = AstFactory.functionExpression2(
- AstFactory.formalParameterList(),
- AstFactory.emptyFunctionBody());
+ AstFactory.formalParameterList(), AstFactory.emptyFunctionBody());
ResolutionCopier.copyResolutionData(fromNode, toNode);
expect(toNode.element, same(element));
expect(toNode.propagatedType, same(propagatedType));
@@ -4738,13 +4059,13 @@
void test_visitFunctionExpressionInvocation() {
FunctionExpressionInvocation fromNode =
AstFactory.functionExpressionInvocation(AstFactory.identifier3("f"));
- MethodElement propagatedElement =
- ElementFactory.methodElement("m", ElementFactory.classElement2("C").type);
+ MethodElement propagatedElement = ElementFactory.methodElement(
+ "m", ElementFactory.classElement2("C").type);
fromNode.propagatedElement = propagatedElement;
DartType propagatedType = ElementFactory.classElement2("C").type;
fromNode.propagatedType = propagatedType;
- MethodElement staticElement =
- ElementFactory.methodElement("m", ElementFactory.classElement2("C").type);
+ MethodElement staticElement = ElementFactory.methodElement(
+ "m", ElementFactory.classElement2("C").type);
fromNode.staticElement = staticElement;
DartType staticType = ElementFactory.classElement2("C").type;
fromNode.staticType = staticType;
@@ -4767,12 +4088,12 @@
}
void test_visitIndexExpression() {
- IndexExpression fromNode =
- AstFactory.indexExpression(AstFactory.identifier3("a"), AstFactory.integer(0));
- MethodElement propagatedElement =
- ElementFactory.methodElement("m", ElementFactory.classElement2("C").type);
- MethodElement staticElement =
- ElementFactory.methodElement("m", ElementFactory.classElement2("C").type);
+ IndexExpression fromNode = AstFactory.indexExpression(
+ AstFactory.identifier3("a"), AstFactory.integer(0));
+ MethodElement propagatedElement = ElementFactory.methodElement(
+ "m", ElementFactory.classElement2("C").type);
+ MethodElement staticElement = ElementFactory.methodElement(
+ "m", ElementFactory.classElement2("C").type);
AuxiliaryElements auxiliaryElements =
new AuxiliaryElements(staticElement, propagatedElement);
fromNode.auxiliaryElements = auxiliaryElements;
@@ -4782,8 +4103,8 @@
fromNode.staticElement = staticElement;
DartType staticType = ElementFactory.classElement2("C").type;
fromNode.staticType = staticType;
- IndexExpression toNode =
- AstFactory.indexExpression(AstFactory.identifier3("a"), AstFactory.integer(0));
+ IndexExpression toNode = AstFactory.indexExpression(
+ AstFactory.identifier3("a"), AstFactory.integer(0));
ResolutionCopier.copyResolutionData(fromNode, toNode);
expect(toNode.auxiliaryElements, same(auxiliaryElements));
expect(toNode.propagatedElement, same(propagatedElement));
@@ -4793,17 +4114,17 @@
}
void test_visitInstanceCreationExpression() {
- InstanceCreationExpression fromNode =
- AstFactory.instanceCreationExpression2(Keyword.NEW, AstFactory.typeName4("C"));
+ InstanceCreationExpression fromNode = AstFactory
+ .instanceCreationExpression2(Keyword.NEW, AstFactory.typeName4("C"));
DartType propagatedType = ElementFactory.classElement2("C").type;
fromNode.propagatedType = propagatedType;
- ConstructorElement staticElement =
- ElementFactory.constructorElement2(ElementFactory.classElement2("C"), null);
+ ConstructorElement staticElement = ElementFactory.constructorElement2(
+ ElementFactory.classElement2("C"), null);
fromNode.staticElement = staticElement;
DartType staticType = ElementFactory.classElement2("C").type;
fromNode.staticType = staticType;
- InstanceCreationExpression toNode =
- AstFactory.instanceCreationExpression2(Keyword.NEW, AstFactory.typeName4("C"));
+ InstanceCreationExpression toNode = AstFactory.instanceCreationExpression2(
+ Keyword.NEW, AstFactory.typeName4("C"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
expect(toNode.propagatedType, same(propagatedType));
expect(toNode.staticElement, same(staticElement));
@@ -4824,17 +4145,13 @@
void test_visitIsExpression() {
IsExpression fromNode = AstFactory.isExpression(
- AstFactory.identifier3("x"),
- false,
- AstFactory.typeName4("A"));
+ AstFactory.identifier3("x"), false, AstFactory.typeName4("A"));
DartType propagatedType = ElementFactory.classElement2("C").type;
fromNode.propagatedType = propagatedType;
DartType staticType = ElementFactory.classElement2("C").type;
fromNode.staticType = staticType;
IsExpression toNode = AstFactory.isExpression(
- AstFactory.identifier3("x"),
- false,
- AstFactory.typeName4("A"));
+ AstFactory.identifier3("x"), false, AstFactory.typeName4("A"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
expect(toNode.propagatedType, same(propagatedType));
expect(toNode.staticType, same(staticType));
@@ -4932,8 +4249,8 @@
void test_visitPartDirective() {
PartDirective fromNode = AstFactory.partDirective2("part.dart");
- LibraryElement element =
- new LibraryElementImpl.forNode(null, AstFactory.libraryIdentifier2(["lib"]));
+ LibraryElement element = new LibraryElementImpl.forNode(
+ null, AstFactory.libraryIdentifier2(["lib"]));
fromNode.element = element;
PartDirective toNode = AstFactory.partDirective2("part.dart");
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -4943,8 +4260,8 @@
void test_visitPartOfDirective() {
PartOfDirective fromNode =
AstFactory.partOfDirective(AstFactory.libraryIdentifier2(["lib"]));
- LibraryElement element =
- new LibraryElementImpl.forNode(null, AstFactory.libraryIdentifier2(["lib"]));
+ LibraryElement element = new LibraryElementImpl.forNode(
+ null, AstFactory.libraryIdentifier2(["lib"]));
fromNode.element = element;
PartOfDirective toNode =
AstFactory.partOfDirective(AstFactory.libraryIdentifier2(["lib"]));
@@ -4955,43 +4272,19 @@
void test_visitPostfixExpression() {
String variableName = "x";
PostfixExpression fromNode = AstFactory.postfixExpression(
- AstFactory.identifier3(variableName),
- TokenType.PLUS_PLUS);
- MethodElement propagatedElement =
- ElementFactory.methodElement("+", ElementFactory.classElement2("C").type);
+ AstFactory.identifier3(variableName), TokenType.PLUS_PLUS);
+ MethodElement propagatedElement = ElementFactory.methodElement(
+ "+", ElementFactory.classElement2("C").type);
fromNode.propagatedElement = propagatedElement;
DartType propagatedType = ElementFactory.classElement2("C").type;
fromNode.propagatedType = propagatedType;
- MethodElement staticElement =
- ElementFactory.methodElement("+", ElementFactory.classElement2("C").type);
+ MethodElement staticElement = ElementFactory.methodElement(
+ "+", ElementFactory.classElement2("C").type);
fromNode.staticElement = staticElement;
DartType staticType = ElementFactory.classElement2("C").type;
fromNode.staticType = staticType;
PostfixExpression toNode = AstFactory.postfixExpression(
- AstFactory.identifier3(variableName),
- TokenType.PLUS_PLUS);
- ResolutionCopier.copyResolutionData(fromNode, toNode);
- expect(toNode.propagatedElement, same(propagatedElement));
- expect(toNode.propagatedType, same(propagatedType));
- expect(toNode.staticElement, same(staticElement));
- expect(toNode.staticType, same(staticType));
- }
-
- void test_visitPrefixExpression() {
- PrefixExpression fromNode =
- AstFactory.prefixExpression(TokenType.PLUS_PLUS, AstFactory.identifier3("x"));
- MethodElement propagatedElement =
- ElementFactory.methodElement("+", ElementFactory.classElement2("C").type);
- DartType propagatedType = ElementFactory.classElement2("C").type;
- fromNode.propagatedElement = propagatedElement;
- fromNode.propagatedType = propagatedType;
- DartType staticType = ElementFactory.classElement2("C").type;
- MethodElement staticElement =
- ElementFactory.methodElement("+", ElementFactory.classElement2("C").type);
- fromNode.staticElement = staticElement;
- fromNode.staticType = staticType;
- PrefixExpression toNode =
- AstFactory.prefixExpression(TokenType.PLUS_PLUS, AstFactory.identifier3("x"));
+ AstFactory.identifier3(variableName), TokenType.PLUS_PLUS);
ResolutionCopier.copyResolutionData(fromNode, toNode);
expect(toNode.propagatedElement, same(propagatedElement));
expect(toNode.propagatedType, same(propagatedType));
@@ -5011,6 +4304,28 @@
expect(toNode.staticType, same(staticType));
}
+ void test_visitPrefixExpression() {
+ PrefixExpression fromNode = AstFactory.prefixExpression(
+ TokenType.PLUS_PLUS, AstFactory.identifier3("x"));
+ MethodElement propagatedElement = ElementFactory.methodElement(
+ "+", ElementFactory.classElement2("C").type);
+ DartType propagatedType = ElementFactory.classElement2("C").type;
+ fromNode.propagatedElement = propagatedElement;
+ fromNode.propagatedType = propagatedType;
+ DartType staticType = ElementFactory.classElement2("C").type;
+ MethodElement staticElement = ElementFactory.methodElement(
+ "+", ElementFactory.classElement2("C").type);
+ fromNode.staticElement = staticElement;
+ fromNode.staticType = staticType;
+ PrefixExpression toNode = AstFactory.prefixExpression(
+ TokenType.PLUS_PLUS, AstFactory.identifier3("x"));
+ ResolutionCopier.copyResolutionData(fromNode, toNode);
+ expect(toNode.propagatedElement, same(propagatedElement));
+ expect(toNode.propagatedType, same(propagatedType));
+ expect(toNode.staticElement, same(staticElement));
+ expect(toNode.staticType, same(staticType));
+ }
+
void test_visitPropertyAccess() {
PropertyAccess fromNode =
AstFactory.propertyAccess2(AstFactory.identifier3("x"), "y");
@@ -5028,8 +4343,8 @@
void test_visitRedirectingConstructorInvocation() {
RedirectingConstructorInvocation fromNode =
AstFactory.redirectingConstructorInvocation();
- ConstructorElement staticElement =
- ElementFactory.constructorElement2(ElementFactory.classElement2("C"), null);
+ ConstructorElement staticElement = ElementFactory.constructorElement2(
+ ElementFactory.classElement2("C"), null);
fromNode.staticElement = staticElement;
RedirectingConstructorInvocation toNode =
AstFactory.redirectingConstructorInvocation();
@@ -5051,10 +4366,10 @@
void test_visitSimpleIdentifier() {
SimpleIdentifier fromNode = AstFactory.identifier3("x");
- MethodElement propagatedElement =
- ElementFactory.methodElement("m", ElementFactory.classElement2("C").type);
- MethodElement staticElement =
- ElementFactory.methodElement("m", ElementFactory.classElement2("C").type);
+ MethodElement propagatedElement = ElementFactory.methodElement(
+ "m", ElementFactory.classElement2("C").type);
+ MethodElement staticElement = ElementFactory.methodElement(
+ "m", ElementFactory.classElement2("C").type);
AuxiliaryElements auxiliaryElements =
new AuxiliaryElements(staticElement, propagatedElement);
fromNode.auxiliaryElements = auxiliaryElements;
@@ -5102,8 +4417,8 @@
void test_visitSuperConstructorInvocation() {
SuperConstructorInvocation fromNode =
AstFactory.superConstructorInvocation();
- ConstructorElement staticElement =
- ElementFactory.constructorElement2(ElementFactory.classElement2("C"), null);
+ ConstructorElement staticElement = ElementFactory.constructorElement2(
+ ElementFactory.classElement2("C"), null);
fromNode.staticElement = staticElement;
SuperConstructorInvocation toNode = AstFactory.superConstructorInvocation();
ResolutionCopier.copyResolutionData(fromNode, toNode);
@@ -5182,32 +4497,20 @@
// particular, we need to be able to distinguish between an await expression
// in the wrong context, and the use of 'await' as an identifier.
MethodDeclaration method = ParserTestCase.parse(
- "parseClassMember",
- <Object>["C"],
- "m() { return await x + await y; }");
+ "parseClassMember", <Object>["C"], "m() { return await x + await y; }");
FunctionBody body = method.body;
EngineTestCase.assertInstanceOf(
- (obj) => obj is BlockFunctionBody,
- BlockFunctionBody,
- body);
+ (obj) => obj is BlockFunctionBody, BlockFunctionBody, body);
Statement statement = (body as BlockFunctionBody).block.statements[0];
EngineTestCase.assertInstanceOf(
- (obj) => obj is ReturnStatement,
- ReturnStatement,
- statement);
+ (obj) => obj is ReturnStatement, ReturnStatement, statement);
Expression expression = (statement as ReturnStatement).expression;
EngineTestCase.assertInstanceOf(
- (obj) => obj is BinaryExpression,
- BinaryExpression,
- expression);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is AwaitExpression,
- AwaitExpression,
- (expression as BinaryExpression).leftOperand);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is AwaitExpression,
- AwaitExpression,
- (expression as BinaryExpression).rightOperand);
+ (obj) => obj is BinaryExpression, BinaryExpression, expression);
+ EngineTestCase.assertInstanceOf((obj) => obj is AwaitExpression,
+ AwaitExpression, (expression as BinaryExpression).leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is AwaitExpression,
+ AwaitExpression, (expression as BinaryExpression).rightOperand);
}
void fail_parseCommentReference_this() {
@@ -5216,18 +4519,13 @@
CommentReference reference =
ParserTestCase.parse("parseCommentReference", <Object>["this", 5], "");
SimpleIdentifier identifier = EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
+ (obj) => obj is SimpleIdentifier, SimpleIdentifier,
reference.identifier);
expect(identifier.token, isNotNull);
expect(identifier.name, "a");
expect(identifier.offset, 5);
}
- void test_Parser() {
- expect(new Parser(null, null), isNotNull);
- }
-
void test_computeStringValue_emptyInterpolationPrefix() {
expect(_computeStringValue("'''", true, false), "");
}
@@ -5310,9 +4608,7 @@
void test_constFactory() {
ParserTestCase.parse(
- "parseClassMember",
- <Object>["C"],
- "const factory C() = A;");
+ "parseClassMember", <Object>["C"], "const factory C() = A;");
}
void test_createSyntheticIdentifier() {
@@ -5329,34 +4625,28 @@
ParserTestCase.parseCompilationUnit("var x = () {};");
}
- void
- test_function_literal_allowed_in_ArgumentList_in_ConstructorFieldInitializer() {
+ void test_function_literal_allowed_in_ArgumentList_in_ConstructorFieldInitializer() {
ParserTestCase.parseCompilationUnit("class C { C() : a = f(() {}); }");
}
- void
- test_function_literal_allowed_in_IndexExpression_in_ConstructorFieldInitializer() {
+ void test_function_literal_allowed_in_IndexExpression_in_ConstructorFieldInitializer() {
ParserTestCase.parseCompilationUnit("class C { C() : a = x[() {}]; }");
}
- void
- test_function_literal_allowed_in_ListLiteral_in_ConstructorFieldInitializer() {
+ void test_function_literal_allowed_in_ListLiteral_in_ConstructorFieldInitializer() {
ParserTestCase.parseCompilationUnit("class C { C() : a = [() {}]; }");
}
- void
- test_function_literal_allowed_in_MapLiteral_in_ConstructorFieldInitializer() {
- ParserTestCase.parseCompilationUnit(
- "class C { C() : a = {'key': () {}}; }");
+ void test_function_literal_allowed_in_MapLiteral_in_ConstructorFieldInitializer() {
+ ParserTestCase
+ .parseCompilationUnit("class C { C() : a = {'key': () {}}; }");
}
- void
- test_function_literal_allowed_in_ParenthesizedExpression_in_ConstructorFieldInitializer() {
+ void test_function_literal_allowed_in_ParenthesizedExpression_in_ConstructorFieldInitializer() {
ParserTestCase.parseCompilationUnit("class C { C() : a = (() {}); }");
}
- void
- test_function_literal_allowed_in_StringInterpolation_in_ConstructorFieldInitializer() {
+ void test_function_literal_allowed_in_StringInterpolation_in_ConstructorFieldInitializer() {
ParserTestCase.parseCompilationUnit("class C { C() : a = \"\${(){}}\"; }");
}
@@ -5442,8 +4732,7 @@
}
void test_isInitializedVariableDeclaration_conditional() {
- expect(
- _isInitializedVariableDeclaration("a == null ? init() : update();"),
+ expect(_isInitializedVariableDeclaration("a == null ? init() : update();"),
isFalse);
}
@@ -5535,10 +4824,8 @@
void test_parseAdditiveExpression_super() {
BinaryExpression expression =
ParserTestCase.parse4("parseAdditiveExpression", "super + y");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SuperExpression,
- SuperExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SuperExpression,
+ SuperExpression, expression.leftOperand);
expect(expression.operator, isNotNull);
expect(expression.operator.type, TokenType.PLUS);
expect(expression.rightOperand, isNotNull);
@@ -5600,6 +4887,22 @@
expect(annotation.arguments, isNotNull);
}
+ void test_parseArgument_named() {
+ NamedExpression expression = ParserTestCase.parse4("parseArgument", "n: x");
+ Label name = expression.name;
+ expect(name, isNotNull);
+ expect(name.label, isNotNull);
+ expect(name.colon, isNotNull);
+ expect(expression.expression, isNotNull);
+ }
+
+ void test_parseArgument_unnamed() {
+ String lexeme = "x";
+ SimpleIdentifier identifier =
+ ParserTestCase.parse4("parseArgument", lexeme);
+ expect(identifier.name, lexeme);
+ }
+
void test_parseArgumentList_empty() {
ArgumentList argumentList =
ParserTestCase.parse4("parseArgumentList", "()");
@@ -5628,26 +4931,10 @@
expect(arguments, hasLength(2));
}
- void test_parseArgument_named() {
- NamedExpression expression = ParserTestCase.parse4("parseArgument", "n: x");
- Label name = expression.name;
- expect(name, isNotNull);
- expect(name.label, isNotNull);
- expect(name.colon, isNotNull);
- expect(expression.expression, isNotNull);
- }
-
- void test_parseArgument_unnamed() {
- String lexeme = "x";
- SimpleIdentifier identifier =
- ParserTestCase.parse4("parseArgument", lexeme);
- expect(identifier.name, lexeme);
- }
-
void test_parseAssertStatement() {
AssertStatement statement =
ParserTestCase.parse4("parseAssertStatement", "assert (x);");
- expect(statement.keyword, isNotNull);
+ expect(statement.assertKeyword, isNotNull);
expect(statement.leftParenthesis, isNotNull);
expect(statement.condition, isNotNull);
expect(statement.rightParenthesis, isNotNull);
@@ -5655,8 +4942,8 @@
}
void test_parseAssignableExpression_expression_args_dot() {
- PropertyAccess propertyAccess =
- ParserTestCase.parse("parseAssignableExpression", <Object>[false], "(x)(y).z");
+ PropertyAccess propertyAccess = ParserTestCase.parse(
+ "parseAssignableExpression", <Object>[false], "(x)(y).z");
FunctionExpressionInvocation invocation =
propertyAccess.target as FunctionExpressionInvocation;
expect(invocation.function, isNotNull);
@@ -5668,16 +4955,16 @@
}
void test_parseAssignableExpression_expression_dot() {
- PropertyAccess propertyAccess =
- ParserTestCase.parse("parseAssignableExpression", <Object>[false], "(x).y");
+ PropertyAccess propertyAccess = ParserTestCase.parse(
+ "parseAssignableExpression", <Object>[false], "(x).y");
expect(propertyAccess.target, isNotNull);
expect(propertyAccess.operator, isNotNull);
expect(propertyAccess.propertyName, isNotNull);
}
void test_parseAssignableExpression_expression_index() {
- IndexExpression expression =
- ParserTestCase.parse("parseAssignableExpression", <Object>[false], "(x)[y]");
+ IndexExpression expression = ParserTestCase.parse(
+ "parseAssignableExpression", <Object>[false], "(x)[y]");
expect(expression.target, isNotNull);
expect(expression.leftBracket, isNotNull);
expect(expression.index, isNotNull);
@@ -5691,8 +4978,8 @@
}
void test_parseAssignableExpression_identifier_args_dot() {
- PropertyAccess propertyAccess =
- ParserTestCase.parse("parseAssignableExpression", <Object>[false], "x(y).z");
+ PropertyAccess propertyAccess = ParserTestCase.parse(
+ "parseAssignableExpression", <Object>[false], "x(y).z");
MethodInvocation invocation = propertyAccess.target as MethodInvocation;
expect(invocation.methodName.name, "x");
ArgumentList argumentList = invocation.argumentList;
@@ -5703,16 +4990,16 @@
}
void test_parseAssignableExpression_identifier_dot() {
- PropertyAccess propertyAccess =
- ParserTestCase.parse("parseAssignableExpression", <Object>[false], "x.y");
+ PropertyAccess propertyAccess = ParserTestCase.parse(
+ "parseAssignableExpression", <Object>[false], "x.y");
expect(propertyAccess.target, isNotNull);
expect(propertyAccess.operator, isNotNull);
expect(propertyAccess.propertyName, isNotNull);
}
void test_parseAssignableExpression_identifier_index() {
- IndexExpression expression =
- ParserTestCase.parse("parseAssignableExpression", <Object>[false], "x[y]");
+ IndexExpression expression = ParserTestCase.parse(
+ "parseAssignableExpression", <Object>[false], "x[y]");
expect(expression.target, isNotNull);
expect(expression.leftBracket, isNotNull);
expect(expression.index, isNotNull);
@@ -5720,48 +5007,42 @@
}
void test_parseAssignableExpression_super_dot() {
- PropertyAccess propertyAccess =
- ParserTestCase.parse("parseAssignableExpression", <Object>[false], "super.y");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SuperExpression,
- SuperExpression,
- propertyAccess.target);
+ PropertyAccess propertyAccess = ParserTestCase.parse(
+ "parseAssignableExpression", <Object>[false], "super.y");
+ EngineTestCase.assertInstanceOf((obj) => obj is SuperExpression,
+ SuperExpression, propertyAccess.target);
expect(propertyAccess.operator, isNotNull);
expect(propertyAccess.propertyName, isNotNull);
}
void test_parseAssignableExpression_super_index() {
- IndexExpression expression =
- ParserTestCase.parse("parseAssignableExpression", <Object>[false], "super[y]");
+ IndexExpression expression = ParserTestCase.parse(
+ "parseAssignableExpression", <Object>[false], "super[y]");
EngineTestCase.assertInstanceOf(
- (obj) => obj is SuperExpression,
- SuperExpression,
- expression.target);
+ (obj) => obj is SuperExpression, SuperExpression, expression.target);
expect(expression.leftBracket, isNotNull);
expect(expression.index, isNotNull);
expect(expression.rightBracket, isNotNull);
}
void test_parseAssignableSelector_dot() {
- PropertyAccess selector =
- ParserTestCase.parse("parseAssignableSelector", <Object>[null, true], ".x");
+ PropertyAccess selector = ParserTestCase.parse(
+ "parseAssignableSelector", <Object>[null, true], ".x");
expect(selector.operator, isNotNull);
expect(selector.propertyName, isNotNull);
}
void test_parseAssignableSelector_index() {
- IndexExpression selector =
- ParserTestCase.parse("parseAssignableSelector", <Object>[null, true], "[x]");
+ IndexExpression selector = ParserTestCase.parse(
+ "parseAssignableSelector", <Object>[null, true], "[x]");
expect(selector.leftBracket, isNotNull);
expect(selector.index, isNotNull);
expect(selector.rightBracket, isNotNull);
}
void test_parseAssignableSelector_none() {
- SimpleIdentifier selector = ParserTestCase.parse(
- "parseAssignableSelector",
- <Object>[new SimpleIdentifier(null), true],
- ";");
+ SimpleIdentifier selector = ParserTestCase.parse("parseAssignableSelector",
+ <Object>[new SimpleIdentifier(null), true], ";");
expect(selector, isNotNull);
}
@@ -5774,41 +5055,30 @@
void test_parseAwaitExpression_asStatement_inAsync() {
MethodDeclaration method = ParserTestCase.parse(
- "parseClassMember",
- <Object>["C"],
- "m() async { await x; }");
+ "parseClassMember", <Object>["C"], "m() async { await x; }");
FunctionBody body = method.body;
EngineTestCase.assertInstanceOf(
- (obj) => obj is BlockFunctionBody,
- BlockFunctionBody,
- body);
+ (obj) => obj is BlockFunctionBody, BlockFunctionBody, body);
Statement statement = (body as BlockFunctionBody).block.statements[0];
EngineTestCase.assertInstanceOf(
- (obj) => obj is ExpressionStatement,
- ExpressionStatement,
- statement);
+ (obj) => obj is ExpressionStatement, ExpressionStatement, statement);
Expression expression = (statement as ExpressionStatement).expression;
EngineTestCase.assertInstanceOf(
- (obj) => obj is AwaitExpression,
- AwaitExpression,
- expression);
+ (obj) => obj is AwaitExpression, AwaitExpression, expression);
expect((expression as AwaitExpression).awaitKeyword, isNotNull);
expect((expression as AwaitExpression).expression, isNotNull);
}
void test_parseAwaitExpression_asStatement_inSync() {
- MethodDeclaration method =
- ParserTestCase.parse("parseClassMember", <Object>["C"], "m() { await x; }");
+ MethodDeclaration method = ParserTestCase.parse(
+ "parseClassMember", <Object>["C"], "m() { await x; }");
FunctionBody body = method.body;
EngineTestCase.assertInstanceOf(
- (obj) => obj is BlockFunctionBody,
- BlockFunctionBody,
- body);
+ (obj) => obj is BlockFunctionBody, BlockFunctionBody, body);
Statement statement = (body as BlockFunctionBody).block.statements[0];
EngineTestCase.assertInstanceOf(
(obj) => obj is VariableDeclarationStatement,
- VariableDeclarationStatement,
- statement);
+ VariableDeclarationStatement, statement);
}
void test_parseBitwiseAndExpression_normal() {
@@ -5823,10 +5093,8 @@
void test_parseBitwiseAndExpression_super() {
BinaryExpression expression =
ParserTestCase.parse4("parseBitwiseAndExpression", "super & y");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SuperExpression,
- SuperExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SuperExpression,
+ SuperExpression, expression.leftOperand);
expect(expression.operator, isNotNull);
expect(expression.operator.type, TokenType.AMPERSAND);
expect(expression.rightOperand, isNotNull);
@@ -5844,10 +5112,8 @@
void test_parseBitwiseOrExpression_super() {
BinaryExpression expression =
ParserTestCase.parse4("parseBitwiseOrExpression", "super | y");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SuperExpression,
- SuperExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SuperExpression,
+ SuperExpression, expression.leftOperand);
expect(expression.operator, isNotNull);
expect(expression.operator.type, TokenType.BAR);
expect(expression.rightOperand, isNotNull);
@@ -5865,10 +5131,8 @@
void test_parseBitwiseXorExpression_super() {
BinaryExpression expression =
ParserTestCase.parse4("parseBitwiseXorExpression", "super ^ y");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SuperExpression,
- SuperExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SuperExpression,
+ SuperExpression, expression.leftOperand);
expect(expression.operator, isNotNull);
expect(expression.operator.type, TokenType.CARET);
expect(expression.rightOperand, isNotNull);
@@ -5891,17 +5155,15 @@
void test_parseBreakStatement_label() {
BreakStatement statement =
ParserTestCase.parse4("parseBreakStatement", "break foo;");
- expect(statement.keyword, isNotNull);
+ expect(statement.breakKeyword, isNotNull);
expect(statement.label, isNotNull);
expect(statement.semicolon, isNotNull);
}
void test_parseBreakStatement_noLabel() {
- BreakStatement statement = ParserTestCase.parse4(
- "parseBreakStatement",
- "break;",
- [ParserErrorCode.BREAK_OUTSIDE_OF_LOOP]);
- expect(statement.keyword, isNotNull);
+ BreakStatement statement = ParserTestCase.parse4("parseBreakStatement",
+ "break;", [ParserErrorCode.BREAK_OUTSIDE_OF_LOOP]);
+ expect(statement.breakKeyword, isNotNull);
expect(statement.label, isNull);
expect(statement.semicolon, isNotNull);
}
@@ -5919,9 +5181,7 @@
FunctionExpressionInvocation section =
ParserTestCase.parse4("parseCascadeSection", "..[i](b)");
EngineTestCase.assertInstanceOf(
- (obj) => obj is IndexExpression,
- IndexExpression,
- section.function);
+ (obj) => obj is IndexExpression, IndexExpression, section.function);
expect(section.argumentList, isNotNull);
}
@@ -5929,9 +5189,7 @@
MethodInvocation section =
ParserTestCase.parse4("parseCascadeSection", "..a(b).c(d)");
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodInvocation,
- MethodInvocation,
- section.target);
+ (obj) => obj is MethodInvocation, MethodInvocation, section.target);
expect(section.period, isNotNull);
expect(section.methodName, isNotNull);
expect(section.argumentList, isNotNull);
@@ -5961,10 +5219,8 @@
expect(section.leftHandSide, isNotNull);
expect(section.operator, isNotNull);
Expression rhs = section.rightHandSide;
- EngineTestCase.assertInstanceOf(
- (obj) => obj is IntegerLiteral,
- IntegerLiteral,
- rhs);
+ EngineTestCase
+ .assertInstanceOf((obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
}
void test_parseCascadeSection_p_builtIn() {
@@ -5989,9 +5245,7 @@
FunctionExpressionInvocation section =
ParserTestCase.parse4("parseCascadeSection", "..a(b)(c)");
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodInvocation,
- MethodInvocation,
- section.function);
+ (obj) => obj is MethodInvocation, MethodInvocation, section.function);
expect(section.argumentList, isNotNull);
expect(section.argumentList.arguments, hasLength(1));
}
@@ -6000,9 +5254,7 @@
FunctionExpressionInvocation section =
ParserTestCase.parse4("parseCascadeSection", "..a(b)(c).d(e)(f)");
EngineTestCase.assertInstanceOf(
- (obj) => obj is MethodInvocation,
- MethodInvocation,
- section.function);
+ (obj) => obj is MethodInvocation, MethodInvocation, section.function);
expect(section.argumentList, isNotNull);
expect(section.argumentList.arguments, hasLength(1));
}
@@ -6016,12 +5268,11 @@
}
void test_parseClassDeclaration_abstract() {
- ClassDeclaration declaration = ParserTestCase.parse(
- "parseClassDeclaration",
+ ClassDeclaration declaration = ParserTestCase.parse("parseClassDeclaration",
<Object>[
- emptyCommentAndMetadata(),
- TokenFactory.tokenFromKeyword(Keyword.ABSTRACT)],
- "class A {}");
+ emptyCommentAndMetadata(),
+ TokenFactory.tokenFromKeyword(Keyword.ABSTRACT)
+ ], "class A {}");
expect(declaration.documentationComment, isNull);
expect(declaration.abstractKeyword, isNotNull);
expect(declaration.extendsClause, isNull);
@@ -6035,10 +5286,8 @@
}
void test_parseClassDeclaration_empty() {
- ClassDeclaration declaration = ParserTestCase.parse(
- "parseClassDeclaration",
- <Object>[emptyCommentAndMetadata(), null],
- "class A {}");
+ ClassDeclaration declaration = ParserTestCase.parse("parseClassDeclaration",
+ <Object>[emptyCommentAndMetadata(), null], "class A {}");
expect(declaration.documentationComment, isNull);
expect(declaration.abstractKeyword, isNull);
expect(declaration.extendsClause, isNull);
@@ -6052,10 +5301,8 @@
}
void test_parseClassDeclaration_extends() {
- ClassDeclaration declaration = ParserTestCase.parse(
- "parseClassDeclaration",
- <Object>[emptyCommentAndMetadata(), null],
- "class A extends B {}");
+ ClassDeclaration declaration = ParserTestCase.parse("parseClassDeclaration",
+ <Object>[emptyCommentAndMetadata(), null], "class A extends B {}");
expect(declaration.documentationComment, isNull);
expect(declaration.abstractKeyword, isNull);
expect(declaration.extendsClause, isNotNull);
@@ -6069,10 +5316,11 @@
}
void test_parseClassDeclaration_extendsAndImplements() {
- ClassDeclaration declaration = ParserTestCase.parse(
- "parseClassDeclaration",
- <Object>[emptyCommentAndMetadata(), null],
- "class A extends B implements C {}");
+ ClassDeclaration declaration = ParserTestCase.parse("parseClassDeclaration",
+ <Object>[
+ emptyCommentAndMetadata(),
+ null
+ ], "class A extends B implements C {}");
expect(declaration.documentationComment, isNull);
expect(declaration.abstractKeyword, isNull);
expect(declaration.extendsClause, isNotNull);
@@ -6086,10 +5334,11 @@
}
void test_parseClassDeclaration_extendsAndWith() {
- ClassDeclaration declaration = ParserTestCase.parse(
- "parseClassDeclaration",
- <Object>[emptyCommentAndMetadata(), null],
- "class A extends B with C {}");
+ ClassDeclaration declaration = ParserTestCase.parse("parseClassDeclaration",
+ <Object>[
+ emptyCommentAndMetadata(),
+ null
+ ], "class A extends B with C {}");
expect(declaration.documentationComment, isNull);
expect(declaration.abstractKeyword, isNull);
expect(declaration.classKeyword, isNotNull);
@@ -6104,10 +5353,11 @@
}
void test_parseClassDeclaration_extendsAndWithAndImplements() {
- ClassDeclaration declaration = ParserTestCase.parse(
- "parseClassDeclaration",
- <Object>[emptyCommentAndMetadata(), null],
- "class A extends B with C implements D {}");
+ ClassDeclaration declaration = ParserTestCase.parse("parseClassDeclaration",
+ <Object>[
+ emptyCommentAndMetadata(),
+ null
+ ], "class A extends B with C implements D {}");
expect(declaration.documentationComment, isNull);
expect(declaration.abstractKeyword, isNull);
expect(declaration.classKeyword, isNotNull);
@@ -6122,10 +5372,8 @@
}
void test_parseClassDeclaration_implements() {
- ClassDeclaration declaration = ParserTestCase.parse(
- "parseClassDeclaration",
- <Object>[emptyCommentAndMetadata(), null],
- "class A implements C {}");
+ ClassDeclaration declaration = ParserTestCase.parse("parseClassDeclaration",
+ <Object>[emptyCommentAndMetadata(), null], "class A implements C {}");
expect(declaration.documentationComment, isNull);
expect(declaration.abstractKeyword, isNull);
expect(declaration.extendsClause, isNull);
@@ -6139,23 +5387,22 @@
}
void test_parseClassDeclaration_native() {
- ClassDeclaration declaration = ParserTestCase.parse(
- "parseClassDeclaration",
- <Object>[emptyCommentAndMetadata(), null],
- "class A native 'nativeValue' {}");
+ ClassDeclaration declaration = ParserTestCase.parse("parseClassDeclaration",
+ <Object>[
+ emptyCommentAndMetadata(),
+ null
+ ], "class A native 'nativeValue' {}");
NativeClause nativeClause = declaration.nativeClause;
expect(nativeClause, isNotNull);
- expect(nativeClause.keyword, isNotNull);
+ expect(nativeClause.nativeKeyword, isNotNull);
expect(nativeClause.name.stringValue, "nativeValue");
- expect(nativeClause.beginToken, same(nativeClause.keyword));
+ expect(nativeClause.beginToken, same(nativeClause.nativeKeyword));
expect(nativeClause.endToken, same(nativeClause.name.endToken));
}
void test_parseClassDeclaration_nonEmpty() {
- ClassDeclaration declaration = ParserTestCase.parse(
- "parseClassDeclaration",
- <Object>[emptyCommentAndMetadata(), null],
- "class A {var f;}");
+ ClassDeclaration declaration = ParserTestCase.parse("parseClassDeclaration",
+ <Object>[emptyCommentAndMetadata(), null], "class A {var f;}");
expect(declaration.documentationComment, isNull);
expect(declaration.abstractKeyword, isNull);
expect(declaration.extendsClause, isNull);
@@ -6169,26 +5416,25 @@
}
void test_parseClassDeclaration_typeAlias_implementsC() {
- ClassTypeAlias typeAlias = ParserTestCase.parse(
- "parseClassDeclaration",
- <Object>[emptyCommentAndMetadata(), null],
- "class A = Object with B implements C;");
- expect(typeAlias.keyword, isNotNull);
+ ClassTypeAlias typeAlias = ParserTestCase.parse("parseClassDeclaration",
+ <Object>[
+ emptyCommentAndMetadata(),
+ null
+ ], "class A = Object with B implements C;");
+ expect(typeAlias.typedefKeyword, isNotNull);
expect(typeAlias.name, isNotNull);
expect(typeAlias.typeParameters, isNull);
expect(typeAlias.withClause, isNotNull);
expect(typeAlias.implementsClause, isNotNull);
- expect(typeAlias.implementsClause.keyword, isNotNull);
+ expect(typeAlias.implementsClause.implementsKeyword, isNotNull);
expect(typeAlias.implementsClause.interfaces.length, 1);
expect(typeAlias.semicolon, isNotNull);
}
void test_parseClassDeclaration_typeAlias_withB() {
- ClassTypeAlias typeAlias = ParserTestCase.parse(
- "parseClassDeclaration",
- <Object>[emptyCommentAndMetadata(), null],
- "class A = Object with B;");
- expect(typeAlias.keyword, isNotNull);
+ ClassTypeAlias typeAlias = ParserTestCase.parse("parseClassDeclaration",
+ <Object>[emptyCommentAndMetadata(), null], "class A = Object with B;");
+ expect(typeAlias.typedefKeyword, isNotNull);
expect(typeAlias.name, isNotNull);
expect(typeAlias.typeParameters, isNull);
expect(typeAlias.withClause, isNotNull);
@@ -6199,10 +5445,8 @@
}
void test_parseClassDeclaration_typeParameters() {
- ClassDeclaration declaration = ParserTestCase.parse(
- "parseClassDeclaration",
- <Object>[emptyCommentAndMetadata(), null],
- "class A<B> {}");
+ ClassDeclaration declaration = ParserTestCase.parse("parseClassDeclaration",
+ <Object>[emptyCommentAndMetadata(), null], "class A<B> {}");
expect(declaration.documentationComment, isNull);
expect(declaration.abstractKeyword, isNull);
expect(declaration.extendsClause, isNull);
@@ -6220,9 +5464,9 @@
// TODO(brianwilkerson) Test other kinds of class members: fields, getters
// and setters.
ConstructorDeclaration constructor = ParserTestCase.parse(
- "parseClassMember",
- <Object>["C"],
- "C(_, _\$, this.__) : _a = _ + _\$ {}");
+ "parseClassMember", <Object>[
+ "C"
+ ], "C(_, _\$, this.__) : _a = _ + _\$ {}");
expect(constructor.body, isNotNull);
expect(constructor.separator, isNotNull);
expect(constructor.externalKeyword, isNull);
@@ -6264,8 +5508,8 @@
}
void test_parseClassMember_field_namedOperator() {
- FieldDeclaration field =
- ParserTestCase.parse("parseClassMember", <Object>["C"], "var operator;");
+ FieldDeclaration field = ParserTestCase.parse(
+ "parseClassMember", <Object>["C"], "var operator;");
expect(field.documentationComment, isNull);
expect(field.metadata, hasLength(0));
expect(field.staticKeyword, isNull);
@@ -6278,8 +5522,8 @@
}
void test_parseClassMember_field_namedOperator_withAssignment() {
- FieldDeclaration field =
- ParserTestCase.parse("parseClassMember", <Object>["C"], "var operator = (5);");
+ FieldDeclaration field = ParserTestCase.parse(
+ "parseClassMember", <Object>["C"], "var operator = (5);");
expect(field.documentationComment, isNull);
expect(field.metadata, hasLength(0));
expect(field.staticKeyword, isNull);
@@ -6307,8 +5551,8 @@
}
void test_parseClassMember_getter_void() {
- MethodDeclaration method =
- ParserTestCase.parse("parseClassMember", <Object>["C"], "void get g {}");
+ MethodDeclaration method = ParserTestCase.parse(
+ "parseClassMember", <Object>["C"], "void get g {}");
expect(method.documentationComment, isNull);
expect(method.externalKeyword, isNull);
expect(method.modifierKeyword, isNull);
@@ -6320,8 +5564,8 @@
}
void test_parseClassMember_method_external() {
- MethodDeclaration method =
- ParserTestCase.parse("parseClassMember", <Object>["C"], "external m();");
+ MethodDeclaration method = ParserTestCase.parse(
+ "parseClassMember", <Object>["C"], "external m();");
expect(method.body, isNotNull);
expect(method.documentationComment, isNull);
expect(method.externalKeyword, isNotNull);
@@ -6335,9 +5579,7 @@
void test_parseClassMember_method_external_withTypeAndArgs() {
MethodDeclaration method = ParserTestCase.parse(
- "parseClassMember",
- <Object>["C"],
- "external int m(int a);");
+ "parseClassMember", <Object>["C"], "external int m(int a);");
expect(method.body, isNotNull);
expect(method.documentationComment, isNull);
expect(method.externalKeyword, isNotNull);
@@ -6378,8 +5620,8 @@
}
void test_parseClassMember_method_get_void() {
- MethodDeclaration method =
- ParserTestCase.parse("parseClassMember", <Object>["C"], "void get() {}");
+ MethodDeclaration method = ParserTestCase.parse(
+ "parseClassMember", <Object>["C"], "void get() {}");
expect(method.documentationComment, isNull);
expect(method.externalKeyword, isNull);
expect(method.modifierKeyword, isNull);
@@ -6392,8 +5634,8 @@
}
void test_parseClassMember_method_operator_noType() {
- MethodDeclaration method =
- ParserTestCase.parse("parseClassMember", <Object>["C"], "operator() {}");
+ MethodDeclaration method = ParserTestCase.parse(
+ "parseClassMember", <Object>["C"], "operator() {}");
expect(method.documentationComment, isNull);
expect(method.externalKeyword, isNull);
expect(method.modifierKeyword, isNull);
@@ -6406,8 +5648,8 @@
}
void test_parseClassMember_method_operator_type() {
- MethodDeclaration method =
- ParserTestCase.parse("parseClassMember", <Object>["C"], "int operator() {}");
+ MethodDeclaration method = ParserTestCase.parse(
+ "parseClassMember", <Object>["C"], "int operator() {}");
expect(method.documentationComment, isNull);
expect(method.externalKeyword, isNull);
expect(method.modifierKeyword, isNull);
@@ -6420,8 +5662,8 @@
}
void test_parseClassMember_method_operator_void() {
- MethodDeclaration method =
- ParserTestCase.parse("parseClassMember", <Object>["C"], "void operator() {}");
+ MethodDeclaration method = ParserTestCase.parse(
+ "parseClassMember", <Object>["C"], "void operator() {}");
expect(method.documentationComment, isNull);
expect(method.externalKeyword, isNull);
expect(method.modifierKeyword, isNull);
@@ -6476,8 +5718,8 @@
}
void test_parseClassMember_method_set_void() {
- MethodDeclaration method =
- ParserTestCase.parse("parseClassMember", <Object>["C"], "void set() {}");
+ MethodDeclaration method = ParserTestCase.parse(
+ "parseClassMember", <Object>["C"], "void set() {}");
expect(method.documentationComment, isNull);
expect(method.externalKeyword, isNull);
expect(method.modifierKeyword, isNull);
@@ -6491,9 +5733,7 @@
void test_parseClassMember_operator_index() {
MethodDeclaration method = ParserTestCase.parse(
- "parseClassMember",
- <Object>["C"],
- "int operator [](int i) {}");
+ "parseClassMember", <Object>["C"], "int operator [](int i) {}");
expect(method.documentationComment, isNull);
expect(method.externalKeyword, isNull);
expect(method.modifierKeyword, isNull);
@@ -6507,9 +5747,7 @@
void test_parseClassMember_operator_indexAssign() {
MethodDeclaration method = ParserTestCase.parse(
- "parseClassMember",
- <Object>["C"],
- "int operator []=(int i) {}");
+ "parseClassMember", <Object>["C"], "int operator []=(int i) {}");
expect(method.documentationComment, isNull);
expect(method.externalKeyword, isNull);
expect(method.modifierKeyword, isNull);
@@ -6523,9 +5761,7 @@
void test_parseClassMember_redirectingFactory_const() {
ConstructorDeclaration constructor = ParserTestCase.parse(
- "parseClassMember",
- <Object>["C"],
- "const factory C() = B;");
+ "parseClassMember", <Object>["C"], "const factory C() = B;");
expect(constructor.externalKeyword, isNull);
expect(constructor.constKeyword, isNotNull);
expect(constructor.factoryKeyword, isNotNull);
@@ -6540,8 +5776,8 @@
}
void test_parseClassMember_redirectingFactory_nonConst() {
- ConstructorDeclaration constructor =
- ParserTestCase.parse("parseClassMember", <Object>["C"], "factory C() = B;");
+ ConstructorDeclaration constructor = ParserTestCase.parse(
+ "parseClassMember", <Object>["C"], "factory C() = B;");
expect(constructor.externalKeyword, isNull);
expect(constructor.constKeyword, isNull);
expect(constructor.factoryKeyword, isNotNull);
@@ -6558,11 +5794,13 @@
void test_parseClassTypeAlias_abstract() {
Token classToken = TokenFactory.tokenFromKeyword(Keyword.CLASS);
Token abstractToken = TokenFactory.tokenFromKeyword(Keyword.ABSTRACT);
- ClassTypeAlias classTypeAlias = ParserTestCase.parse(
- "parseClassTypeAlias",
- <Object>[emptyCommentAndMetadata(), abstractToken, classToken],
- "A = B with C;");
- expect(classTypeAlias.keyword, isNotNull);
+ ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias",
+ <Object>[
+ emptyCommentAndMetadata(),
+ abstractToken,
+ classToken
+ ], "A = B with C;");
+ expect(classTypeAlias.typedefKeyword, isNotNull);
expect(classTypeAlias.name.name, "A");
expect(classTypeAlias.equals, isNotNull);
expect(classTypeAlias.abstractKeyword, isNotNull);
@@ -6574,11 +5812,13 @@
void test_parseClassTypeAlias_implements() {
Token token = TokenFactory.tokenFromKeyword(Keyword.CLASS);
- ClassTypeAlias classTypeAlias = ParserTestCase.parse(
- "parseClassTypeAlias",
- <Object>[emptyCommentAndMetadata(), null, token],
- "A = B with C implements D;");
- expect(classTypeAlias.keyword, isNotNull);
+ ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias",
+ <Object>[
+ emptyCommentAndMetadata(),
+ null,
+ token
+ ], "A = B with C implements D;");
+ expect(classTypeAlias.typedefKeyword, isNotNull);
expect(classTypeAlias.name.name, "A");
expect(classTypeAlias.equals, isNotNull);
expect(classTypeAlias.abstractKeyword, isNull);
@@ -6590,11 +5830,9 @@
void test_parseClassTypeAlias_with() {
Token token = TokenFactory.tokenFromKeyword(Keyword.CLASS);
- ClassTypeAlias classTypeAlias = ParserTestCase.parse(
- "parseClassTypeAlias",
- <Object>[emptyCommentAndMetadata(), null, token],
- "A = B with C;");
- expect(classTypeAlias.keyword, isNotNull);
+ ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias",
+ <Object>[emptyCommentAndMetadata(), null, token], "A = B with C;");
+ expect(classTypeAlias.typedefKeyword, isNotNull);
expect(classTypeAlias.name.name, "A");
expect(classTypeAlias.equals, isNotNull);
expect(classTypeAlias.abstractKeyword, isNull);
@@ -6606,11 +5844,13 @@
void test_parseClassTypeAlias_with_implements() {
Token token = TokenFactory.tokenFromKeyword(Keyword.CLASS);
- ClassTypeAlias classTypeAlias = ParserTestCase.parse(
- "parseClassTypeAlias",
- <Object>[emptyCommentAndMetadata(), null, token],
- "A = B with C implements D;");
- expect(classTypeAlias.keyword, isNotNull);
+ ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias",
+ <Object>[
+ emptyCommentAndMetadata(),
+ null,
+ token
+ ], "A = B with C implements D;");
+ expect(classTypeAlias.typedefKeyword, isNotNull);
expect(classTypeAlias.name.name, "A");
expect(classTypeAlias.equals, isNotNull);
expect(classTypeAlias.abstractKeyword, isNull);
@@ -6661,8 +5901,8 @@
}
void test_parseCombinators_hshs() {
- List<Combinator> combinators =
- ParserTestCase.parse4("parseCombinators", "hide a show b hide c show d;");
+ List<Combinator> combinators = ParserTestCase.parse4(
+ "parseCombinators", "hide a show b hide c show d;");
expect(combinators, hasLength(4));
}
@@ -6684,16 +5924,15 @@
}
void test_parseCommentAndMetadata_cmc() {
- CommentAndMetadata commentAndMetadata =
- ParserTestCase.parse4("parseCommentAndMetadata", "/** 1 */ @A /** 2 */ void");
+ CommentAndMetadata commentAndMetadata = ParserTestCase.parse4(
+ "parseCommentAndMetadata", "/** 1 */ @A /** 2 */ void");
expect(commentAndMetadata.comment, isNotNull);
expect(commentAndMetadata.metadata, hasLength(1));
}
void test_parseCommentAndMetadata_cmcm() {
CommentAndMetadata commentAndMetadata = ParserTestCase.parse4(
- "parseCommentAndMetadata",
- "/** 1 */ @A /** 2 */ @B void");
+ "parseCommentAndMetadata", "/** 1 */ @A /** 2 */ @B void");
expect(commentAndMetadata.comment, isNotNull);
expect(commentAndMetadata.metadata, hasLength(2));
}
@@ -6721,8 +5960,7 @@
void test_parseCommentAndMetadata_mcmc() {
CommentAndMetadata commentAndMetadata = ParserTestCase.parse4(
- "parseCommentAndMetadata",
- "@A /** 1 */ @B /** 2 */ void");
+ "parseCommentAndMetadata", "@A /** 1 */ @B /** 2 */ void");
expect(commentAndMetadata.comment, isNotNull);
expect(commentAndMetadata.metadata, hasLength(2));
}
@@ -6742,8 +5980,8 @@
}
void test_parseCommentAndMetadata_singleLine() {
- CommentAndMetadata commentAndMetadata =
- ParserTestCase.parse4("parseCommentAndMetadata", r'''
+ CommentAndMetadata commentAndMetadata = ParserTestCase.parse4(
+ "parseCommentAndMetadata", r'''
/// 1
/// 2
void''');
@@ -6752,11 +5990,10 @@
}
void test_parseCommentReference_new_prefixed() {
- CommentReference reference =
- ParserTestCase.parse("parseCommentReference", <Object>["new a.b", 7], "");
+ CommentReference reference = ParserTestCase.parse(
+ "parseCommentReference", <Object>["new a.b", 7], "");
PrefixedIdentifier prefixedIdentifier = EngineTestCase.assertInstanceOf(
- (obj) => obj is PrefixedIdentifier,
- PrefixedIdentifier,
+ (obj) => obj is PrefixedIdentifier, PrefixedIdentifier,
reference.identifier);
SimpleIdentifier prefix = prefixedIdentifier.prefix;
expect(prefix.token, isNotNull);
@@ -6773,8 +6010,7 @@
CommentReference reference =
ParserTestCase.parse("parseCommentReference", <Object>["new a", 5], "");
SimpleIdentifier identifier = EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
+ (obj) => obj is SimpleIdentifier, SimpleIdentifier,
reference.identifier);
expect(identifier.token, isNotNull);
expect(identifier.name, "a");
@@ -6785,8 +6021,7 @@
CommentReference reference =
ParserTestCase.parse("parseCommentReference", <Object>["a.b", 7], "");
PrefixedIdentifier prefixedIdentifier = EngineTestCase.assertInstanceOf(
- (obj) => obj is PrefixedIdentifier,
- PrefixedIdentifier,
+ (obj) => obj is PrefixedIdentifier, PrefixedIdentifier,
reference.identifier);
SimpleIdentifier prefix = prefixedIdentifier.prefix;
expect(prefix.token, isNotNull);
@@ -6803,8 +6038,7 @@
CommentReference reference =
ParserTestCase.parse("parseCommentReference", <Object>["a", 5], "");
SimpleIdentifier identifier = EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
+ (obj) => obj is SimpleIdentifier, SimpleIdentifier,
reference.identifier);
expect(identifier.token, isNotNull);
expect(identifier.name, "a");
@@ -6815,8 +6049,7 @@
CommentReference reference =
ParserTestCase.parse("parseCommentReference", <Object>["", 5], "");
SimpleIdentifier identifier = EngineTestCase.assertInstanceOf(
- (obj) => obj is SimpleIdentifier,
- SimpleIdentifier,
+ (obj) => obj is SimpleIdentifier, SimpleIdentifier,
reference.identifier);
expect(identifier, isNotNull);
expect(identifier.isSynthetic, isTrue);
@@ -6827,9 +6060,7 @@
void test_parseCommentReferences_multiLine() {
DocumentationCommentToken token = new DocumentationCommentToken(
- TokenType.MULTI_LINE_COMMENT,
- "/** xxx [a] yyy [bb] zzz */",
- 3);
+ TokenType.MULTI_LINE_COMMENT, "/** xxx [a] yyy [bb] zzz */", 3);
List<DocumentationCommentToken> tokens = <DocumentationCommentToken>[token];
List<CommentReference> references =
ParserTestCase.parse("parseCommentReferences", <Object>[tokens], "");
@@ -6860,10 +6091,9 @@
void test_parseCommentReferences_notClosed_noIdentifier() {
List<DocumentationCommentToken> tokens = <DocumentationCommentToken>[
- new DocumentationCommentToken(
- TokenType.MULTI_LINE_COMMENT,
- "/** [ some text",
- 5)];
+ new DocumentationCommentToken(
+ TokenType.MULTI_LINE_COMMENT, "/** [ some text", 5)
+ ];
List<CommentReference> references =
ParserTestCase.parse("parseCommentReferences", <Object>[tokens], "");
expect(references, hasLength(1));
@@ -6876,10 +6106,9 @@
void test_parseCommentReferences_notClosed_withIdentifier() {
List<DocumentationCommentToken> tokens = <DocumentationCommentToken>[
- new DocumentationCommentToken(
- TokenType.MULTI_LINE_COMMENT,
- "/** [namePrefix some text",
- 5)];
+ new DocumentationCommentToken(
+ TokenType.MULTI_LINE_COMMENT, "/** [namePrefix some text", 5)
+ ];
List<CommentReference> references =
ParserTestCase.parse("parseCommentReferences", <Object>[tokens], "");
expect(references, hasLength(1));
@@ -6892,11 +6121,11 @@
void test_parseCommentReferences_singleLine() {
List<DocumentationCommentToken> tokens = <DocumentationCommentToken>[
- new DocumentationCommentToken(
- TokenType.SINGLE_LINE_COMMENT,
- "/// xxx [a] yyy [b] zzz",
- 3),
- new DocumentationCommentToken(TokenType.SINGLE_LINE_COMMENT, "/// x [c]", 28)];
+ new DocumentationCommentToken(
+ TokenType.SINGLE_LINE_COMMENT, "/// xxx [a] yyy [b] zzz", 3),
+ new DocumentationCommentToken(
+ TokenType.SINGLE_LINE_COMMENT, "/// x [c]", 28)
+ ];
List<CommentReference> references =
ParserTestCase.parse("parseCommentReferences", <Object>[tokens], "");
expect(references, hasLength(3));
@@ -6916,10 +6145,9 @@
void test_parseCommentReferences_skipCodeBlock_bracketed() {
List<DocumentationCommentToken> tokens = <DocumentationCommentToken>[
- new DocumentationCommentToken(
- TokenType.MULTI_LINE_COMMENT,
- "/** [:xxx [a] yyy:] [b] zzz */",
- 3)];
+ new DocumentationCommentToken(
+ TokenType.MULTI_LINE_COMMENT, "/** [:xxx [a] yyy:] [b] zzz */", 3)
+ ];
List<CommentReference> references =
ParserTestCase.parse("parseCommentReferences", <Object>[tokens], "");
expect(references, hasLength(1));
@@ -6931,10 +6159,9 @@
void test_parseCommentReferences_skipCodeBlock_spaces() {
List<DocumentationCommentToken> tokens = <DocumentationCommentToken>[
- new DocumentationCommentToken(
- TokenType.MULTI_LINE_COMMENT,
- "/**\n * a[i]\n * xxx [i] zzz\n */",
- 3)];
+ new DocumentationCommentToken(TokenType.MULTI_LINE_COMMENT,
+ "/**\n * a[i]\n * xxx [i] zzz\n */", 3)
+ ];
List<CommentReference> references =
ParserTestCase.parse("parseCommentReferences", <Object>[tokens], "");
expect(references, hasLength(1));
@@ -6946,10 +6173,9 @@
void test_parseCommentReferences_skipLinkDefinition() {
List<DocumentationCommentToken> tokens = <DocumentationCommentToken>[
- new DocumentationCommentToken(
- TokenType.MULTI_LINE_COMMENT,
- "/** [a]: http://www.google.com (Google) [b] zzz */",
- 3)];
+ new DocumentationCommentToken(TokenType.MULTI_LINE_COMMENT,
+ "/** [a]: http://www.google.com (Google) [b] zzz */", 3)
+ ];
List<CommentReference> references =
ParserTestCase.parse("parseCommentReferences", <Object>[tokens], "");
expect(references, hasLength(1));
@@ -6961,10 +6187,9 @@
void test_parseCommentReferences_skipLinked() {
List<DocumentationCommentToken> tokens = <DocumentationCommentToken>[
- new DocumentationCommentToken(
- TokenType.MULTI_LINE_COMMENT,
- "/** [a](http://www.google.com) [b] zzz */",
- 3)];
+ new DocumentationCommentToken(TokenType.MULTI_LINE_COMMENT,
+ "/** [a](http://www.google.com) [b] zzz */", 3)
+ ];
List<CommentReference> references =
ParserTestCase.parse("parseCommentReferences", <Object>[tokens], "");
expect(references, hasLength(1));
@@ -6976,10 +6201,9 @@
void test_parseCommentReferences_skipReferenceLink() {
List<DocumentationCommentToken> tokens = <DocumentationCommentToken>[
- new DocumentationCommentToken(
- TokenType.MULTI_LINE_COMMENT,
- "/** [a][c] [b] zzz */",
- 3)];
+ new DocumentationCommentToken(
+ TokenType.MULTI_LINE_COMMENT, "/** [a][c] [b] zzz */", 3)
+ ];
List<CommentReference> references =
ParserTestCase.parse("parseCommentReferences", <Object>[tokens], "");
expect(references, hasLength(1));
@@ -6989,277 +6213,8 @@
expect(reference.offset, 15);
}
- void test_parseCompilationUnitMember_abstractAsPrefix() {
- TopLevelVariableDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "abstract.A _abstract = new abstract.A();");
- expect(declaration.semicolon, isNotNull);
- expect(declaration.variables, isNotNull);
- }
-
- void test_parseCompilationUnitMember_class() {
- ClassDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "class A {}");
- expect(declaration.name.name, "A");
- expect(declaration.members, hasLength(0));
- }
-
- void test_parseCompilationUnitMember_classTypeAlias() {
- ClassTypeAlias alias = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "abstract class A = B with C;");
- expect(alias.name.name, "A");
- expect(alias.abstractKeyword, isNotNull);
- }
-
- void test_parseCompilationUnitMember_constVariable() {
- TopLevelVariableDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "const int x = 0;");
- expect(declaration.semicolon, isNotNull);
- expect(declaration.variables, isNotNull);
- }
-
- void test_parseCompilationUnitMember_finalVariable() {
- TopLevelVariableDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "final x = 0;");
- expect(declaration.semicolon, isNotNull);
- expect(declaration.variables, isNotNull);
- }
-
- void test_parseCompilationUnitMember_function_external_noType() {
- FunctionDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "external f();");
- expect(declaration.externalKeyword, isNotNull);
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNull);
- }
-
- void test_parseCompilationUnitMember_function_external_type() {
- FunctionDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "external int f();");
- expect(declaration.externalKeyword, isNotNull);
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNull);
- }
-
- void test_parseCompilationUnitMember_function_noType() {
- FunctionDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "f() {}");
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNull);
- }
-
- void test_parseCompilationUnitMember_function_type() {
- FunctionDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "int f() {}");
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNull);
- }
-
- void test_parseCompilationUnitMember_function_void() {
- FunctionDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "void f() {}");
- expect(declaration.returnType, isNotNull);
- }
-
- void test_parseCompilationUnitMember_getter_external_noType() {
- FunctionDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "external get p;");
- expect(declaration.externalKeyword, isNotNull);
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
- }
-
- void test_parseCompilationUnitMember_getter_external_type() {
- FunctionDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "external int get p;");
- expect(declaration.externalKeyword, isNotNull);
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
- }
-
- void test_parseCompilationUnitMember_getter_noType() {
- FunctionDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "get p => 0;");
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
- }
-
- void test_parseCompilationUnitMember_getter_type() {
- FunctionDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "int get p => 0;");
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
- }
-
- void test_parseCompilationUnitMember_setter_external_noType() {
- FunctionDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "external set p(v);");
- expect(declaration.externalKeyword, isNotNull);
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
- }
-
- void test_parseCompilationUnitMember_setter_external_type() {
- FunctionDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "external void set p(int v);");
- expect(declaration.externalKeyword, isNotNull);
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
- }
-
- void test_parseCompilationUnitMember_setter_noType() {
- FunctionDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "set p(v) {}");
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
- }
-
- void test_parseCompilationUnitMember_setter_type() {
- FunctionDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "void set p(int v) {}");
- expect(declaration.functionExpression, isNotNull);
- expect(declaration.propertyKeyword, isNotNull);
- expect(declaration.returnType, isNotNull);
- }
-
- void test_parseCompilationUnitMember_typeAlias_abstract() {
- ClassTypeAlias typeAlias = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "abstract class C = S with M;");
- expect(typeAlias.keyword, isNotNull);
- expect(typeAlias.name.name, "C");
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.equals, isNotNull);
- expect(typeAlias.abstractKeyword, isNotNull);
- expect(typeAlias.superclass.name.name, "S");
- expect(typeAlias.withClause, isNotNull);
- expect(typeAlias.implementsClause, isNull);
- expect(typeAlias.semicolon, isNotNull);
- }
-
- void test_parseCompilationUnitMember_typeAlias_generic() {
- ClassTypeAlias typeAlias = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "class C<E> = S<E> with M<E> implements I<E>;");
- expect(typeAlias.keyword, isNotNull);
- expect(typeAlias.name.name, "C");
- expect(typeAlias.typeParameters.typeParameters, hasLength(1));
- expect(typeAlias.equals, isNotNull);
- expect(typeAlias.abstractKeyword, isNull);
- expect(typeAlias.superclass.name.name, "S");
- expect(typeAlias.withClause, isNotNull);
- expect(typeAlias.implementsClause, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
- }
-
- void test_parseCompilationUnitMember_typeAlias_implements() {
- ClassTypeAlias typeAlias = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "class C = S with M implements I;");
- expect(typeAlias.keyword, isNotNull);
- expect(typeAlias.name.name, "C");
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.equals, isNotNull);
- expect(typeAlias.abstractKeyword, isNull);
- expect(typeAlias.superclass.name.name, "S");
- expect(typeAlias.withClause, isNotNull);
- expect(typeAlias.implementsClause, isNotNull);
- expect(typeAlias.semicolon, isNotNull);
- }
-
- void test_parseCompilationUnitMember_typeAlias_noImplements() {
- ClassTypeAlias typeAlias = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "class C = S with M;");
- expect(typeAlias.keyword, isNotNull);
- expect(typeAlias.name.name, "C");
- expect(typeAlias.typeParameters, isNull);
- expect(typeAlias.equals, isNotNull);
- expect(typeAlias.abstractKeyword, isNull);
- expect(typeAlias.superclass.name.name, "S");
- expect(typeAlias.withClause, isNotNull);
- expect(typeAlias.implementsClause, isNull);
- expect(typeAlias.semicolon, isNotNull);
- }
-
- void test_parseCompilationUnitMember_typedef() {
- FunctionTypeAlias typeAlias = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "typedef F();");
- expect(typeAlias.name.name, "F");
- expect(typeAlias.parameters.parameters, hasLength(0));
- }
-
- void test_parseCompilationUnitMember_variable() {
- TopLevelVariableDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "var x = 0;");
- expect(declaration.semicolon, isNotNull);
- expect(declaration.variables, isNotNull);
- }
-
- void test_parseCompilationUnitMember_variableGet() {
- TopLevelVariableDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "String get = null;");
- expect(declaration.semicolon, isNotNull);
- expect(declaration.variables, isNotNull);
- }
-
- void test_parseCompilationUnitMember_variableSet() {
- TopLevelVariableDeclaration declaration = ParserTestCase.parse(
- "parseCompilationUnitMember",
- <Object>[emptyCommentAndMetadata()],
- "String set = null;");
- expect(declaration.semicolon, isNotNull);
- expect(declaration.variables, isNotNull);
- }
-
void test_parseCompilationUnit_abstractAsPrefix_parameterized() {
- CompilationUnit unit = ParserTestCase.parse4(
- "parseCompilationUnit",
+ CompilationUnit unit = ParserTestCase.parse4("parseCompilationUnit",
"abstract<dynamic> _abstract = new abstract.A();");
expect(unit.scriptTag, isNull);
expect(unit.directives, hasLength(0));
@@ -7285,8 +6240,8 @@
}
void test_parseCompilationUnit_directives_multiple() {
- CompilationUnit unit =
- ParserTestCase.parse4("parseCompilationUnit", "library l;\npart 'a.dart';");
+ CompilationUnit unit = ParserTestCase.parse4(
+ "parseCompilationUnit", "library l;\npart 'a.dart';");
expect(unit.scriptTag, isNull);
expect(unit.directives, hasLength(2));
expect(unit.declarations, hasLength(0));
@@ -7309,8 +6264,7 @@
void test_parseCompilationUnit_exportAsPrefix() {
CompilationUnit unit = ParserTestCase.parse4(
- "parseCompilationUnit",
- "export.A _export = new export.A();");
+ "parseCompilationUnit", "export.A _export = new export.A();");
expect(unit.scriptTag, isNull);
expect(unit.directives, hasLength(0));
expect(unit.declarations, hasLength(1));
@@ -7318,16 +6272,14 @@
void test_parseCompilationUnit_exportAsPrefix_parameterized() {
CompilationUnit unit = ParserTestCase.parse4(
- "parseCompilationUnit",
- "export<dynamic> _export = new export.A();");
+ "parseCompilationUnit", "export<dynamic> _export = new export.A();");
expect(unit.scriptTag, isNull);
expect(unit.directives, hasLength(0));
expect(unit.declarations, hasLength(1));
}
void test_parseCompilationUnit_operatorAsPrefix_parameterized() {
- CompilationUnit unit = ParserTestCase.parse4(
- "parseCompilationUnit",
+ CompilationUnit unit = ParserTestCase.parse4("parseCompilationUnit",
"operator<dynamic> _operator = new operator.A();");
expect(unit.scriptTag, isNull);
expect(unit.directives, hasLength(0));
@@ -7360,13 +6312,278 @@
void test_parseCompilationUnit_typedefAsPrefix() {
CompilationUnit unit = ParserTestCase.parse4(
- "parseCompilationUnit",
- "typedef.A _typedef = new typedef.A();");
+ "parseCompilationUnit", "typedef.A _typedef = new typedef.A();");
expect(unit.scriptTag, isNull);
expect(unit.directives, hasLength(0));
expect(unit.declarations, hasLength(1));
}
+ void test_parseCompilationUnitMember_abstractAsPrefix() {
+ TopLevelVariableDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "abstract.A _abstract = new abstract.A();");
+ expect(declaration.semicolon, isNotNull);
+ expect(declaration.variables, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_class() {
+ ClassDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "class A {}");
+ expect(declaration.name.name, "A");
+ expect(declaration.members, hasLength(0));
+ }
+
+ void test_parseCompilationUnitMember_classTypeAlias() {
+ ClassTypeAlias alias = ParserTestCase.parse("parseCompilationUnitMember",
+ <Object>[emptyCommentAndMetadata()], "abstract class A = B with C;");
+ expect(alias.name.name, "A");
+ expect(alias.abstractKeyword, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_constVariable() {
+ TopLevelVariableDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "const int x = 0;");
+ expect(declaration.semicolon, isNotNull);
+ expect(declaration.variables, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_finalVariable() {
+ TopLevelVariableDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "final x = 0;");
+ expect(declaration.semicolon, isNotNull);
+ expect(declaration.variables, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_function_external_noType() {
+ FunctionDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "external f();");
+ expect(declaration.externalKeyword, isNotNull);
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNull);
+ }
+
+ void test_parseCompilationUnitMember_function_external_type() {
+ FunctionDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "external int f();");
+ expect(declaration.externalKeyword, isNotNull);
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNull);
+ }
+
+ void test_parseCompilationUnitMember_function_noType() {
+ FunctionDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "f() {}");
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNull);
+ }
+
+ void test_parseCompilationUnitMember_function_type() {
+ FunctionDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "int f() {}");
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNull);
+ }
+
+ void test_parseCompilationUnitMember_function_void() {
+ FunctionDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "void f() {}");
+ expect(declaration.returnType, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_getter_external_noType() {
+ FunctionDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "external get p;");
+ expect(declaration.externalKeyword, isNotNull);
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_getter_external_type() {
+ FunctionDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "external int get p;");
+ expect(declaration.externalKeyword, isNotNull);
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_getter_noType() {
+ FunctionDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "get p => 0;");
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_getter_type() {
+ FunctionDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "int get p => 0;");
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_setter_external_noType() {
+ FunctionDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "external set p(v);");
+ expect(declaration.externalKeyword, isNotNull);
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_setter_external_type() {
+ FunctionDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "external void set p(int v);");
+ expect(declaration.externalKeyword, isNotNull);
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_setter_noType() {
+ FunctionDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "set p(v) {}");
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_setter_type() {
+ FunctionDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "void set p(int v) {}");
+ expect(declaration.functionExpression, isNotNull);
+ expect(declaration.propertyKeyword, isNotNull);
+ expect(declaration.returnType, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_typeAlias_abstract() {
+ ClassTypeAlias typeAlias = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "abstract class C = S with M;");
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name.name, "C");
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.equals, isNotNull);
+ expect(typeAlias.abstractKeyword, isNotNull);
+ expect(typeAlias.superclass.name.name, "S");
+ expect(typeAlias.withClause, isNotNull);
+ expect(typeAlias.implementsClause, isNull);
+ expect(typeAlias.semicolon, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_typeAlias_generic() {
+ ClassTypeAlias typeAlias = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "class C<E> = S<E> with M<E> implements I<E>;");
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name.name, "C");
+ expect(typeAlias.typeParameters.typeParameters, hasLength(1));
+ expect(typeAlias.equals, isNotNull);
+ expect(typeAlias.abstractKeyword, isNull);
+ expect(typeAlias.superclass.name.name, "S");
+ expect(typeAlias.withClause, isNotNull);
+ expect(typeAlias.implementsClause, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_typeAlias_implements() {
+ ClassTypeAlias typeAlias = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "class C = S with M implements I;");
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name.name, "C");
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.equals, isNotNull);
+ expect(typeAlias.abstractKeyword, isNull);
+ expect(typeAlias.superclass.name.name, "S");
+ expect(typeAlias.withClause, isNotNull);
+ expect(typeAlias.implementsClause, isNotNull);
+ expect(typeAlias.semicolon, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_typeAlias_noImplements() {
+ ClassTypeAlias typeAlias = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "class C = S with M;");
+ expect(typeAlias.typedefKeyword, isNotNull);
+ expect(typeAlias.name.name, "C");
+ expect(typeAlias.typeParameters, isNull);
+ expect(typeAlias.equals, isNotNull);
+ expect(typeAlias.abstractKeyword, isNull);
+ expect(typeAlias.superclass.name.name, "S");
+ expect(typeAlias.withClause, isNotNull);
+ expect(typeAlias.implementsClause, isNull);
+ expect(typeAlias.semicolon, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_typedef() {
+ FunctionTypeAlias typeAlias = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "typedef F();");
+ expect(typeAlias.name.name, "F");
+ expect(typeAlias.parameters.parameters, hasLength(0));
+ }
+
+ void test_parseCompilationUnitMember_variable() {
+ TopLevelVariableDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "var x = 0;");
+ expect(declaration.semicolon, isNotNull);
+ expect(declaration.variables, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_variableGet() {
+ TopLevelVariableDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "String get = null;");
+ expect(declaration.semicolon, isNotNull);
+ expect(declaration.variables, isNotNull);
+ }
+
+ void test_parseCompilationUnitMember_variableSet() {
+ TopLevelVariableDeclaration declaration = ParserTestCase.parse(
+ "parseCompilationUnitMember", <Object>[
+ emptyCommentAndMetadata()
+ ], "String set = null;");
+ expect(declaration.semicolon, isNotNull);
+ expect(declaration.variables, isNotNull);
+ }
+
void test_parseConditionalExpression() {
ConditionalExpression expression =
ParserTestCase.parse4("parseConditionalExpression", "x ? y : z");
@@ -7435,13 +6652,33 @@
// null, null, null, null, null, null}, "");
}
+ void test_parseConstructor_with_pseudo_function_literal() {
+ // "(b) {}" should not be misinterpreted as a function literal even though
+ // it looks like one.
+ ClassMember classMember = ParserTestCase.parse(
+ "parseClassMember", <Object>["C"], "C() : a = (b) {}");
+ EngineTestCase.assertInstanceOf((obj) => obj is ConstructorDeclaration,
+ ConstructorDeclaration, classMember);
+ ConstructorDeclaration constructor = classMember as ConstructorDeclaration;
+ NodeList<ConstructorInitializer> initializers = constructor.initializers;
+ expect(initializers, hasLength(1));
+ ConstructorInitializer initializer = initializers[0];
+ EngineTestCase.assertInstanceOf((obj) => obj is ConstructorFieldInitializer,
+ ConstructorFieldInitializer, initializer);
+ EngineTestCase.assertInstanceOf((obj) => obj is ParenthesizedExpression,
+ ParenthesizedExpression,
+ (initializer as ConstructorFieldInitializer).expression);
+ EngineTestCase.assertInstanceOf(
+ (obj) => obj is BlockFunctionBody, BlockFunctionBody, constructor.body);
+ }
+
void test_parseConstructorFieldInitializer_qualified() {
ConstructorFieldInitializer invocation =
ParserTestCase.parse4("parseConstructorFieldInitializer", "this.a = b");
expect(invocation.equals, isNotNull);
expect(invocation.expression, isNotNull);
expect(invocation.fieldName, isNotNull);
- expect(invocation.keyword, isNotNull);
+ expect(invocation.thisKeyword, isNotNull);
expect(invocation.period, isNotNull);
}
@@ -7451,7 +6688,7 @@
expect(invocation.equals, isNotNull);
expect(invocation.expression, isNotNull);
expect(invocation.fieldName, isNotNull);
- expect(invocation.keyword, isNull);
+ expect(invocation.thisKeyword, isNull);
expect(invocation.period, isNull);
}
@@ -7486,58 +6723,30 @@
expect(name.name, isNull);
}
- void test_parseConstructor_with_pseudo_function_literal() {
- // "(b) {}" should not be misinterpreted as a function literal even though
- // it looks like one.
- ClassMember classMember =
- ParserTestCase.parse("parseClassMember", <Object>["C"], "C() : a = (b) {}");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is ConstructorDeclaration,
- ConstructorDeclaration,
- classMember);
- ConstructorDeclaration constructor = classMember as ConstructorDeclaration;
- NodeList<ConstructorInitializer> initializers = constructor.initializers;
- expect(initializers, hasLength(1));
- ConstructorInitializer initializer = initializers[0];
- EngineTestCase.assertInstanceOf(
- (obj) => obj is ConstructorFieldInitializer,
- ConstructorFieldInitializer,
- initializer);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is ParenthesizedExpression,
- ParenthesizedExpression,
- (initializer as ConstructorFieldInitializer).expression);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is BlockFunctionBody,
- BlockFunctionBody,
- constructor.body);
- }
-
void test_parseContinueStatement_label() {
ContinueStatement statement = ParserTestCase.parse4(
- "parseContinueStatement",
- "continue foo;",
- [ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]);
- expect(statement.keyword, isNotNull);
+ "parseContinueStatement", "continue foo;", [
+ ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP
+ ]);
+ expect(statement.continueKeyword, isNotNull);
expect(statement.label, isNotNull);
expect(statement.semicolon, isNotNull);
}
void test_parseContinueStatement_noLabel() {
ContinueStatement statement = ParserTestCase.parse4(
- "parseContinueStatement",
- "continue;",
- [ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]);
- expect(statement.keyword, isNotNull);
+ "parseContinueStatement", "continue;", [
+ ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP
+ ]);
+ expect(statement.continueKeyword, isNotNull);
expect(statement.label, isNull);
expect(statement.semicolon, isNotNull);
}
void test_parseDirective_export() {
- ExportDirective directive = ParserTestCase.parse(
- "parseDirective",
- <Object>[emptyCommentAndMetadata()],
- "export 'lib/lib.dart';");
+ ExportDirective directive = ParserTestCase.parse("parseDirective", <Object>[
+ emptyCommentAndMetadata()
+ ], "export 'lib/lib.dart';");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
expect(directive.combinators, hasLength(0));
@@ -7545,13 +6754,12 @@
}
void test_parseDirective_import() {
- ImportDirective directive = ParserTestCase.parse(
- "parseDirective",
- <Object>[emptyCommentAndMetadata()],
- "import 'lib/lib.dart';");
+ ImportDirective directive = ParserTestCase.parse("parseDirective", <Object>[
+ emptyCommentAndMetadata()
+ ], "import 'lib/lib.dart';");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
- expect(directive.asToken, isNull);
+ expect(directive.asKeyword, isNull);
expect(directive.prefix, isNull);
expect(directive.combinators, hasLength(0));
expect(directive.semicolon, isNotNull);
@@ -7559,31 +6767,26 @@
void test_parseDirective_library() {
LibraryDirective directive = ParserTestCase.parse(
- "parseDirective",
- <Object>[emptyCommentAndMetadata()],
- "library l;");
- expect(directive.libraryToken, isNotNull);
+ "parseDirective", <Object>[emptyCommentAndMetadata()], "library l;");
+ expect(directive.libraryKeyword, isNotNull);
expect(directive.name, isNotNull);
expect(directive.semicolon, isNotNull);
}
void test_parseDirective_part() {
- PartDirective directive = ParserTestCase.parse(
- "parseDirective",
- <Object>[emptyCommentAndMetadata()],
- "part 'lib/lib.dart';");
- expect(directive.partToken, isNotNull);
+ PartDirective directive = ParserTestCase.parse("parseDirective", <Object>[
+ emptyCommentAndMetadata()
+ ], "part 'lib/lib.dart';");
+ expect(directive.partKeyword, isNotNull);
expect(directive.uri, isNotNull);
expect(directive.semicolon, isNotNull);
}
void test_parseDirective_partOf() {
PartOfDirective directive = ParserTestCase.parse(
- "parseDirective",
- <Object>[emptyCommentAndMetadata()],
- "part of l;");
- expect(directive.partToken, isNotNull);
- expect(directive.ofToken, isNotNull);
+ "parseDirective", <Object>[emptyCommentAndMetadata()], "part of l;");
+ expect(directive.partKeyword, isNotNull);
+ expect(directive.ofKeyword, isNotNull);
expect(directive.libraryName, isNotNull);
expect(directive.semicolon, isNotNull);
}
@@ -7632,18 +6835,6 @@
expect(unit.directives, hasLength(0));
}
- void test_parseDoStatement() {
- DoStatement statement =
- ParserTestCase.parse4("parseDoStatement", "do {} while (x);");
- expect(statement.doKeyword, isNotNull);
- expect(statement.body, isNotNull);
- expect(statement.whileKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.condition, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.semicolon, isNotNull);
- }
-
void test_parseDocumentationComment_block() {
Comment comment =
ParserTestCase.parse4("parseDocumentationComment", "/** */ class");
@@ -7666,13 +6857,25 @@
}
void test_parseDocumentationComment_endOfLine() {
- Comment comment =
- ParserTestCase.parse4("parseDocumentationComment", "/// \n/// \n class");
+ Comment comment = ParserTestCase.parse4(
+ "parseDocumentationComment", "/// \n/// \n class");
expect(comment.isBlock, isFalse);
expect(comment.isDocumentation, isTrue);
expect(comment.isEndOfLine, isFalse);
}
+ void test_parseDoStatement() {
+ DoStatement statement =
+ ParserTestCase.parse4("parseDoStatement", "do {} while (x);");
+ expect(statement.doKeyword, isNotNull);
+ expect(statement.body, isNotNull);
+ expect(statement.whileKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.condition, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.semicolon, isNotNull);
+ }
+
void test_parseEmptyStatement() {
EmptyStatement statement =
ParserTestCase.parse4("parseEmptyStatement", ";");
@@ -7680,12 +6883,10 @@
}
void test_parseEnumDeclaration_one() {
- EnumDeclaration declaration = ParserTestCase.parse(
- "parseEnumDeclaration",
- <Object>[emptyCommentAndMetadata()],
- "enum E {ONE}");
+ EnumDeclaration declaration = ParserTestCase.parse("parseEnumDeclaration",
+ <Object>[emptyCommentAndMetadata()], "enum E {ONE}");
expect(declaration.documentationComment, isNull);
- expect(declaration.keyword, isNotNull);
+ expect(declaration.enumKeyword, isNotNull);
expect(declaration.leftBracket, isNotNull);
expect(declaration.name, isNotNull);
expect(declaration.constants, hasLength(1));
@@ -7693,12 +6894,10 @@
}
void test_parseEnumDeclaration_trailingComma() {
- EnumDeclaration declaration = ParserTestCase.parse(
- "parseEnumDeclaration",
- <Object>[emptyCommentAndMetadata()],
- "enum E {ONE,}");
+ EnumDeclaration declaration = ParserTestCase.parse("parseEnumDeclaration",
+ <Object>[emptyCommentAndMetadata()], "enum E {ONE,}");
expect(declaration.documentationComment, isNull);
- expect(declaration.keyword, isNotNull);
+ expect(declaration.enumKeyword, isNotNull);
expect(declaration.leftBracket, isNotNull);
expect(declaration.name, isNotNull);
expect(declaration.constants, hasLength(1));
@@ -7706,12 +6905,10 @@
}
void test_parseEnumDeclaration_two() {
- EnumDeclaration declaration = ParserTestCase.parse(
- "parseEnumDeclaration",
- <Object>[emptyCommentAndMetadata()],
- "enum E {ONE, TWO}");
+ EnumDeclaration declaration = ParserTestCase.parse("parseEnumDeclaration",
+ <Object>[emptyCommentAndMetadata()], "enum E {ONE, TWO}");
expect(declaration.documentationComment, isNull);
- expect(declaration.keyword, isNotNull);
+ expect(declaration.enumKeyword, isNotNull);
expect(declaration.leftBracket, isNotNull);
expect(declaration.name, isNotNull);
expect(declaration.constants, hasLength(2));
@@ -7730,20 +6927,18 @@
void test_parseEqualityExpression_super() {
BinaryExpression expression =
ParserTestCase.parse4("parseEqualityExpression", "super == y");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SuperExpression,
- SuperExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SuperExpression,
+ SuperExpression, expression.leftOperand);
expect(expression.operator, isNotNull);
expect(expression.operator.type, TokenType.EQ_EQ);
expect(expression.rightOperand, isNotNull);
}
void test_parseExportDirective_hide() {
- ExportDirective directive = ParserTestCase.parse(
- "parseExportDirective",
- <Object>[emptyCommentAndMetadata()],
- "export 'lib/lib.dart' hide A, B;");
+ ExportDirective directive = ParserTestCase.parse("parseExportDirective",
+ <Object>[
+ emptyCommentAndMetadata()
+ ], "export 'lib/lib.dart' hide A, B;");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
expect(directive.combinators, hasLength(1));
@@ -7751,10 +6946,10 @@
}
void test_parseExportDirective_hide_show() {
- ExportDirective directive = ParserTestCase.parse(
- "parseExportDirective",
- <Object>[emptyCommentAndMetadata()],
- "export 'lib/lib.dart' hide A show B;");
+ ExportDirective directive = ParserTestCase.parse("parseExportDirective",
+ <Object>[
+ emptyCommentAndMetadata()
+ ], "export 'lib/lib.dart' hide A show B;");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
expect(directive.combinators, hasLength(2));
@@ -7762,10 +6957,8 @@
}
void test_parseExportDirective_noCombinator() {
- ExportDirective directive = ParserTestCase.parse(
- "parseExportDirective",
- <Object>[emptyCommentAndMetadata()],
- "export 'lib/lib.dart';");
+ ExportDirective directive = ParserTestCase.parse("parseExportDirective",
+ <Object>[emptyCommentAndMetadata()], "export 'lib/lib.dart';");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
expect(directive.combinators, hasLength(0));
@@ -7773,10 +6966,10 @@
}
void test_parseExportDirective_show() {
- ExportDirective directive = ParserTestCase.parse(
- "parseExportDirective",
- <Object>[emptyCommentAndMetadata()],
- "export 'lib/lib.dart' show A, B;");
+ ExportDirective directive = ParserTestCase.parse("parseExportDirective",
+ <Object>[
+ emptyCommentAndMetadata()
+ ], "export 'lib/lib.dart' show A, B;");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
expect(directive.combinators, hasLength(1));
@@ -7784,54 +6977,16 @@
}
void test_parseExportDirective_show_hide() {
- ExportDirective directive = ParserTestCase.parse(
- "parseExportDirective",
- <Object>[emptyCommentAndMetadata()],
- "export 'lib/lib.dart' show B hide A;");
+ ExportDirective directive = ParserTestCase.parse("parseExportDirective",
+ <Object>[
+ emptyCommentAndMetadata()
+ ], "export 'lib/lib.dart' show B hide A;");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
expect(directive.combinators, hasLength(2));
expect(directive.semicolon, isNotNull);
}
- void test_parseExpressionList_multiple() {
- List<Expression> result =
- ParserTestCase.parse4("parseExpressionList", "1, 2, 3");
- expect(result, hasLength(3));
- }
-
- void test_parseExpressionList_single() {
- List<Expression> result = ParserTestCase.parse4("parseExpressionList", "1");
- expect(result, hasLength(1));
- }
-
- void test_parseExpressionWithoutCascade_assign() {
- // TODO(brianwilkerson) Implement more tests for this method.
- AssignmentExpression expression =
- ParserTestCase.parse4("parseExpressionWithoutCascade", "x = y");
- expect(expression.leftHandSide, isNotNull);
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.EQ);
- expect(expression.rightHandSide, isNotNull);
- }
-
- void test_parseExpressionWithoutCascade_comparison() {
- BinaryExpression expression =
- ParserTestCase.parse4("parseExpressionWithoutCascade", "--a.b == c");
- expect(expression.leftOperand, isNotNull);
- expect(expression.operator, isNotNull);
- expect(expression.operator.type, TokenType.EQ_EQ);
- expect(expression.rightOperand, isNotNull);
- }
-
- void test_parseExpressionWithoutCascade_superMethodInvocation() {
- MethodInvocation invocation =
- ParserTestCase.parse4("parseExpressionWithoutCascade", "super.m()");
- expect(invocation.target, isNotNull);
- expect(invocation.methodName, isNotNull);
- expect(invocation.argumentList, isNotNull);
- }
-
void test_parseExpression_assign() {
// TODO(brianwilkerson) Implement more tests for this method.
AssignmentExpression expression =
@@ -7889,10 +7044,8 @@
void test_parseExpression_invokeFunctionExpression() {
FunctionExpressionInvocation invocation =
ParserTestCase.parse4("parseExpression", "(a) {return a + a;} (3)");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionExpression,
- FunctionExpression,
- invocation.function);
+ EngineTestCase.assertInstanceOf((obj) => obj is FunctionExpression,
+ FunctionExpression, invocation.function);
FunctionExpression expression = invocation.function as FunctionExpression;
expect(expression.parameters, isNotNull);
expect(expression.body, isNotNull);
@@ -7914,20 +7067,56 @@
expect(invocation.argumentList, isNotNull);
}
+ void test_parseExpressionList_multiple() {
+ List<Expression> result =
+ ParserTestCase.parse4("parseExpressionList", "1, 2, 3");
+ expect(result, hasLength(3));
+ }
+
+ void test_parseExpressionList_single() {
+ List<Expression> result = ParserTestCase.parse4("parseExpressionList", "1");
+ expect(result, hasLength(1));
+ }
+
+ void test_parseExpressionWithoutCascade_assign() {
+ // TODO(brianwilkerson) Implement more tests for this method.
+ AssignmentExpression expression =
+ ParserTestCase.parse4("parseExpressionWithoutCascade", "x = y");
+ expect(expression.leftHandSide, isNotNull);
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.EQ);
+ expect(expression.rightHandSide, isNotNull);
+ }
+
+ void test_parseExpressionWithoutCascade_comparison() {
+ BinaryExpression expression =
+ ParserTestCase.parse4("parseExpressionWithoutCascade", "--a.b == c");
+ expect(expression.leftOperand, isNotNull);
+ expect(expression.operator, isNotNull);
+ expect(expression.operator.type, TokenType.EQ_EQ);
+ expect(expression.rightOperand, isNotNull);
+ }
+
+ void test_parseExpressionWithoutCascade_superMethodInvocation() {
+ MethodInvocation invocation =
+ ParserTestCase.parse4("parseExpressionWithoutCascade", "super.m()");
+ expect(invocation.target, isNotNull);
+ expect(invocation.methodName, isNotNull);
+ expect(invocation.argumentList, isNotNull);
+ }
+
void test_parseExtendsClause() {
ExtendsClause clause =
ParserTestCase.parse4("parseExtendsClause", "extends B");
- expect(clause.keyword, isNotNull);
+ expect(clause.extendsKeyword, isNotNull);
expect(clause.superclass, isNotNull);
EngineTestCase.assertInstanceOf(
- (obj) => obj is TypeName,
- TypeName,
- clause.superclass);
+ (obj) => obj is TypeName, TypeName, clause.superclass);
}
void test_parseFinalConstVarOrType_const_noType() {
- FinalConstVarOrType result =
- ParserTestCase.parse("parseFinalConstVarOrType", <Object>[false], "const");
+ FinalConstVarOrType result = ParserTestCase.parse(
+ "parseFinalConstVarOrType", <Object>[false], "const");
Token keyword = result.keyword;
expect(keyword, isNotNull);
expect(keyword.type, TokenType.KEYWORD);
@@ -7936,8 +7125,8 @@
}
void test_parseFinalConstVarOrType_const_type() {
- FinalConstVarOrType result =
- ParserTestCase.parse("parseFinalConstVarOrType", <Object>[false], "const A a");
+ FinalConstVarOrType result = ParserTestCase.parse(
+ "parseFinalConstVarOrType", <Object>[false], "const A a");
Token keyword = result.keyword;
expect(keyword, isNotNull);
expect(keyword.type, TokenType.KEYWORD);
@@ -7946,8 +7135,8 @@
}
void test_parseFinalConstVarOrType_final_noType() {
- FinalConstVarOrType result =
- ParserTestCase.parse("parseFinalConstVarOrType", <Object>[false], "final");
+ FinalConstVarOrType result = ParserTestCase.parse(
+ "parseFinalConstVarOrType", <Object>[false], "final");
Token keyword = result.keyword;
expect(keyword, isNotNull);
expect(keyword.type, TokenType.KEYWORD);
@@ -7957,9 +7146,7 @@
void test_parseFinalConstVarOrType_final_prefixedType() {
FinalConstVarOrType result = ParserTestCase.parse(
- "parseFinalConstVarOrType",
- <Object>[false],
- "final p.A a");
+ "parseFinalConstVarOrType", <Object>[false], "final p.A a");
Token keyword = result.keyword;
expect(keyword, isNotNull);
expect(keyword.type, TokenType.KEYWORD);
@@ -7968,8 +7155,8 @@
}
void test_parseFinalConstVarOrType_final_type() {
- FinalConstVarOrType result =
- ParserTestCase.parse("parseFinalConstVarOrType", <Object>[false], "final A a");
+ FinalConstVarOrType result = ParserTestCase.parse(
+ "parseFinalConstVarOrType", <Object>[false], "final A a");
Token keyword = result.keyword;
expect(keyword, isNotNull);
expect(keyword.type, TokenType.KEYWORD);
@@ -7978,43 +7165,43 @@
}
void test_parseFinalConstVarOrType_type_parameterized() {
- FinalConstVarOrType result =
- ParserTestCase.parse("parseFinalConstVarOrType", <Object>[false], "A<B> a");
+ FinalConstVarOrType result = ParserTestCase.parse(
+ "parseFinalConstVarOrType", <Object>[false], "A<B> a");
expect(result.keyword, isNull);
expect(result.type, isNotNull);
}
void test_parseFinalConstVarOrType_type_prefixed() {
- FinalConstVarOrType result =
- ParserTestCase.parse("parseFinalConstVarOrType", <Object>[false], "p.A a");
- expect(result.keyword, isNull);
- expect(result.type, isNotNull);
- }
-
- void test_parseFinalConstVarOrType_type_prefixedAndParameterized() {
- FinalConstVarOrType result =
- ParserTestCase.parse("parseFinalConstVarOrType", <Object>[false], "p.A<B> a");
+ FinalConstVarOrType result = ParserTestCase.parse(
+ "parseFinalConstVarOrType", <Object>[false], "p.A a");
expect(result.keyword, isNull);
expect(result.type, isNotNull);
}
void test_parseFinalConstVarOrType_type_prefixed_noIdentifier() {
- FinalConstVarOrType result =
- ParserTestCase.parse("parseFinalConstVarOrType", <Object>[false], "p.A,");
+ FinalConstVarOrType result = ParserTestCase.parse(
+ "parseFinalConstVarOrType", <Object>[false], "p.A,");
+ expect(result.keyword, isNull);
+ expect(result.type, isNotNull);
+ }
+
+ void test_parseFinalConstVarOrType_type_prefixedAndParameterized() {
+ FinalConstVarOrType result = ParserTestCase.parse(
+ "parseFinalConstVarOrType", <Object>[false], "p.A<B> a");
expect(result.keyword, isNull);
expect(result.type, isNotNull);
}
void test_parseFinalConstVarOrType_type_simple() {
- FinalConstVarOrType result =
- ParserTestCase.parse("parseFinalConstVarOrType", <Object>[false], "A a");
+ FinalConstVarOrType result = ParserTestCase.parse(
+ "parseFinalConstVarOrType", <Object>[false], "A a");
expect(result.keyword, isNull);
expect(result.type, isNotNull);
}
void test_parseFinalConstVarOrType_var() {
- FinalConstVarOrType result =
- ParserTestCase.parse("parseFinalConstVarOrType", <Object>[false], "var");
+ FinalConstVarOrType result = ParserTestCase.parse(
+ "parseFinalConstVarOrType", <Object>[false], "var");
Token keyword = result.keyword;
expect(keyword, isNotNull);
expect(keyword.type, TokenType.KEYWORD);
@@ -8023,254 +7210,137 @@
}
void test_parseFinalConstVarOrType_void() {
- FinalConstVarOrType result =
- ParserTestCase.parse("parseFinalConstVarOrType", <Object>[false], "void f()");
+ FinalConstVarOrType result = ParserTestCase.parse(
+ "parseFinalConstVarOrType", <Object>[false], "void f()");
expect(result.keyword, isNull);
expect(result.type, isNotNull);
}
void test_parseFinalConstVarOrType_void_noIdentifier() {
- FinalConstVarOrType result =
- ParserTestCase.parse("parseFinalConstVarOrType", <Object>[false], "void,");
+ FinalConstVarOrType result = ParserTestCase.parse(
+ "parseFinalConstVarOrType", <Object>[false], "void,");
expect(result.keyword, isNull);
expect(result.type, isNotNull);
}
- void test_parseForStatement_each_await() {
- ForEachStatement statement =
- ParserTestCase.parse4("parseForStatement", "await for (element in list) {}");
- expect(statement.awaitKeyword, isNotNull);
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.loopVariable, isNull);
- expect(statement.identifier, isNotNull);
- expect(statement.inKeyword, isNotNull);
- expect(statement.iterable, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
+ void test_parseFormalParameter_final_withType_named() {
+ ParameterKind kind = ParameterKind.NAMED;
+ DefaultFormalParameter parameter = ParserTestCase.parse(
+ "parseFormalParameter", <Object>[kind], "final A a : null");
+ SimpleFormalParameter simpleParameter =
+ parameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
+ expect(parameter.separator, isNotNull);
+ expect(parameter.defaultValue, isNotNull);
+ expect(parameter.kind, kind);
}
- void test_parseForStatement_each_identifier() {
- ForEachStatement statement =
- ParserTestCase.parse4("parseForStatement", "for (element in list) {}");
- expect(statement.awaitKeyword, isNull);
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.loopVariable, isNull);
- expect(statement.identifier, isNotNull);
- expect(statement.inKeyword, isNotNull);
- expect(statement.iterable, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
+ void test_parseFormalParameter_final_withType_normal() {
+ ParameterKind kind = ParameterKind.REQUIRED;
+ SimpleFormalParameter parameter = ParserTestCase.parse(
+ "parseFormalParameter", <Object>[kind], "final A a");
+ expect(parameter.identifier, isNotNull);
+ expect(parameter.keyword, isNotNull);
+ expect(parameter.type, isNotNull);
+ expect(parameter.kind, kind);
}
- void test_parseForStatement_each_noType_metadata() {
- ForEachStatement statement =
- ParserTestCase.parse4("parseForStatement", "for (@A var element in list) {}");
- expect(statement.awaitKeyword, isNull);
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.loopVariable, isNotNull);
- expect(statement.loopVariable.metadata, hasLength(1));
- expect(statement.identifier, isNull);
- expect(statement.inKeyword, isNotNull);
- expect(statement.iterable, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
+ void test_parseFormalParameter_final_withType_positional() {
+ ParameterKind kind = ParameterKind.POSITIONAL;
+ DefaultFormalParameter parameter = ParserTestCase.parse(
+ "parseFormalParameter", <Object>[kind], "final A a = null");
+ SimpleFormalParameter simpleParameter =
+ parameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
+ expect(parameter.separator, isNotNull);
+ expect(parameter.defaultValue, isNotNull);
+ expect(parameter.kind, kind);
}
- void test_parseForStatement_each_type() {
- ForEachStatement statement =
- ParserTestCase.parse4("parseForStatement", "for (A element in list) {}");
- expect(statement.awaitKeyword, isNull);
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.loopVariable, isNotNull);
- expect(statement.identifier, isNull);
- expect(statement.inKeyword, isNotNull);
- expect(statement.iterable, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
+ void test_parseFormalParameter_nonFinal_withType_named() {
+ ParameterKind kind = ParameterKind.NAMED;
+ DefaultFormalParameter parameter = ParserTestCase.parse(
+ "parseFormalParameter", <Object>[kind], "A a : null");
+ SimpleFormalParameter simpleParameter =
+ parameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
+ expect(parameter.separator, isNotNull);
+ expect(parameter.defaultValue, isNotNull);
+ expect(parameter.kind, kind);
}
- void test_parseForStatement_each_var() {
- ForEachStatement statement =
- ParserTestCase.parse4("parseForStatement", "for (var element in list) {}");
- expect(statement.awaitKeyword, isNull);
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.loopVariable, isNotNull);
- expect(statement.identifier, isNull);
- expect(statement.inKeyword, isNotNull);
- expect(statement.iterable, isNotNull);
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
+ void test_parseFormalParameter_nonFinal_withType_normal() {
+ ParameterKind kind = ParameterKind.REQUIRED;
+ SimpleFormalParameter parameter =
+ ParserTestCase.parse("parseFormalParameter", <Object>[kind], "A a");
+ expect(parameter.identifier, isNotNull);
+ expect(parameter.keyword, isNull);
+ expect(parameter.type, isNotNull);
+ expect(parameter.kind, kind);
}
- void test_parseForStatement_loop_c() {
- ForStatement statement =
- ParserTestCase.parse4("parseForStatement", "for (; i < count;) {}");
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.variables, isNull);
- expect(statement.initialization, isNull);
- expect(statement.leftSeparator, isNotNull);
- expect(statement.condition, isNotNull);
- expect(statement.rightSeparator, isNotNull);
- expect(statement.updaters, hasLength(0));
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
+ void test_parseFormalParameter_nonFinal_withType_positional() {
+ ParameterKind kind = ParameterKind.POSITIONAL;
+ DefaultFormalParameter parameter = ParserTestCase.parse(
+ "parseFormalParameter", <Object>[kind], "A a = null");
+ SimpleFormalParameter simpleParameter =
+ parameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNull);
+ expect(simpleParameter.type, isNotNull);
+ expect(simpleParameter.kind, kind);
+ expect(parameter.separator, isNotNull);
+ expect(parameter.defaultValue, isNotNull);
+ expect(parameter.kind, kind);
}
- void test_parseForStatement_loop_cu() {
- ForStatement statement =
- ParserTestCase.parse4("parseForStatement", "for (; i < count; i++) {}");
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.variables, isNull);
- expect(statement.initialization, isNull);
- expect(statement.leftSeparator, isNotNull);
- expect(statement.condition, isNotNull);
- expect(statement.rightSeparator, isNotNull);
- expect(statement.updaters, hasLength(1));
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
+ void test_parseFormalParameter_var() {
+ ParameterKind kind = ParameterKind.REQUIRED;
+ SimpleFormalParameter parameter =
+ ParserTestCase.parse("parseFormalParameter", <Object>[kind], "var a");
+ expect(parameter.identifier, isNotNull);
+ expect(parameter.keyword, isNotNull);
+ expect(parameter.type, isNull);
+ expect(parameter.kind, kind);
}
- void test_parseForStatement_loop_ecu() {
- ForStatement statement =
- ParserTestCase.parse4("parseForStatement", "for (i--; i < count; i++) {}");
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.variables, isNull);
- expect(statement.initialization, isNotNull);
- expect(statement.leftSeparator, isNotNull);
- expect(statement.condition, isNotNull);
- expect(statement.rightSeparator, isNotNull);
- expect(statement.updaters, hasLength(1));
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
+ void test_parseFormalParameter_var_named() {
+ ParameterKind kind = ParameterKind.NAMED;
+ DefaultFormalParameter parameter = ParserTestCase.parse(
+ "parseFormalParameter", <Object>[kind], "var a : null");
+ SimpleFormalParameter simpleParameter =
+ parameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
+ expect(parameter.separator, isNotNull);
+ expect(parameter.defaultValue, isNotNull);
+ expect(parameter.kind, kind);
}
- void test_parseForStatement_loop_i() {
- ForStatement statement =
- ParserTestCase.parse4("parseForStatement", "for (var i = 0;;) {}");
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- VariableDeclarationList variables = statement.variables;
- expect(variables, isNotNull);
- expect(variables.metadata, hasLength(0));
- expect(variables.variables, hasLength(1));
- expect(statement.initialization, isNull);
- expect(statement.leftSeparator, isNotNull);
- expect(statement.condition, isNull);
- expect(statement.rightSeparator, isNotNull);
- expect(statement.updaters, hasLength(0));
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
- }
-
- void test_parseForStatement_loop_i_withMetadata() {
- ForStatement statement =
- ParserTestCase.parse4("parseForStatement", "for (@A var i = 0;;) {}");
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- VariableDeclarationList variables = statement.variables;
- expect(variables, isNotNull);
- expect(variables.metadata, hasLength(1));
- expect(variables.variables, hasLength(1));
- expect(statement.initialization, isNull);
- expect(statement.leftSeparator, isNotNull);
- expect(statement.condition, isNull);
- expect(statement.rightSeparator, isNotNull);
- expect(statement.updaters, hasLength(0));
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
- }
-
- void test_parseForStatement_loop_ic() {
- ForStatement statement =
- ParserTestCase.parse4("parseForStatement", "for (var i = 0; i < count;) {}");
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- VariableDeclarationList variables = statement.variables;
- expect(variables, isNotNull);
- expect(variables.variables, hasLength(1));
- expect(statement.initialization, isNull);
- expect(statement.leftSeparator, isNotNull);
- expect(statement.condition, isNotNull);
- expect(statement.rightSeparator, isNotNull);
- expect(statement.updaters, hasLength(0));
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
- }
-
- void test_parseForStatement_loop_icu() {
- ForStatement statement = ParserTestCase.parse4(
- "parseForStatement",
- "for (var i = 0; i < count; i++) {}");
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- VariableDeclarationList variables = statement.variables;
- expect(variables, isNotNull);
- expect(variables.variables, hasLength(1));
- expect(statement.initialization, isNull);
- expect(statement.leftSeparator, isNotNull);
- expect(statement.condition, isNotNull);
- expect(statement.rightSeparator, isNotNull);
- expect(statement.updaters, hasLength(1));
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
- }
-
- void test_parseForStatement_loop_iicuu() {
- ForStatement statement = ParserTestCase.parse4(
- "parseForStatement",
- "for (int i = 0, j = count; i < j; i++, j--) {}");
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- VariableDeclarationList variables = statement.variables;
- expect(variables, isNotNull);
- expect(variables.variables, hasLength(2));
- expect(statement.initialization, isNull);
- expect(statement.leftSeparator, isNotNull);
- expect(statement.condition, isNotNull);
- expect(statement.rightSeparator, isNotNull);
- expect(statement.updaters, hasLength(2));
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
- }
-
- void test_parseForStatement_loop_iu() {
- ForStatement statement =
- ParserTestCase.parse4("parseForStatement", "for (var i = 0;; i++) {}");
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- VariableDeclarationList variables = statement.variables;
- expect(variables, isNotNull);
- expect(variables.variables, hasLength(1));
- expect(statement.initialization, isNull);
- expect(statement.leftSeparator, isNotNull);
- expect(statement.condition, isNull);
- expect(statement.rightSeparator, isNotNull);
- expect(statement.updaters, hasLength(1));
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
- }
-
- void test_parseForStatement_loop_u() {
- ForStatement statement =
- ParserTestCase.parse4("parseForStatement", "for (;; i++) {}");
- expect(statement.forKeyword, isNotNull);
- expect(statement.leftParenthesis, isNotNull);
- expect(statement.variables, isNull);
- expect(statement.initialization, isNull);
- expect(statement.leftSeparator, isNotNull);
- expect(statement.condition, isNull);
- expect(statement.rightSeparator, isNotNull);
- expect(statement.updaters, hasLength(1));
- expect(statement.rightParenthesis, isNotNull);
- expect(statement.body, isNotNull);
+ void test_parseFormalParameter_var_positional() {
+ ParameterKind kind = ParameterKind.POSITIONAL;
+ DefaultFormalParameter parameter = ParserTestCase.parse(
+ "parseFormalParameter", <Object>[kind], "var a = null");
+ SimpleFormalParameter simpleParameter =
+ parameter.parameter as SimpleFormalParameter;
+ expect(simpleParameter.identifier, isNotNull);
+ expect(simpleParameter.keyword, isNotNull);
+ expect(simpleParameter.type, isNull);
+ expect(simpleParameter.kind, kind);
+ expect(parameter.separator, isNotNull);
+ expect(parameter.defaultValue, isNotNull);
+ expect(parameter.kind, kind);
}
void test_parseFormalParameterList_empty() {
@@ -8284,8 +7354,8 @@
}
void test_parseFormalParameterList_named_multiple() {
- FormalParameterList parameterList =
- ParserTestCase.parse4("parseFormalParameterList", "({A a : 1, B b, C c : 3})");
+ FormalParameterList parameterList = ParserTestCase.parse4(
+ "parseFormalParameterList", "({A a : 1, B b, C c : 3})");
expect(parameterList.leftParenthesis, isNotNull);
expect(parameterList.leftDelimiter, isNotNull);
expect(parameterList.parameters, hasLength(3));
@@ -8345,8 +7415,7 @@
void test_parseFormalParameterList_positional_multiple() {
FormalParameterList parameterList = ParserTestCase.parse4(
- "parseFormalParameterList",
- "([A a = null, B b, C c = null])");
+ "parseFormalParameterList", "([A a = null, B b, C c = null])");
expect(parameterList.leftParenthesis, isNotNull);
expect(parameterList.leftDelimiter, isNotNull);
expect(parameterList.parameters, hasLength(3));
@@ -8364,133 +7433,244 @@
expect(parameterList.rightParenthesis, isNotNull);
}
- void test_parseFormalParameter_final_withType_named() {
- ParameterKind kind = ParameterKind.NAMED;
- DefaultFormalParameter parameter = ParserTestCase.parse(
- "parseFormalParameter",
- <Object>[kind],
- "final A a : null");
- SimpleFormalParameter simpleParameter =
- parameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
- expect(parameter.separator, isNotNull);
- expect(parameter.defaultValue, isNotNull);
- expect(parameter.kind, kind);
+ void test_parseForStatement_each_await() {
+ ForEachStatement statement = ParserTestCase.parse4(
+ "parseForStatement", "await for (element in list) {}");
+ expect(statement.awaitKeyword, isNotNull);
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.loopVariable, isNull);
+ expect(statement.identifier, isNotNull);
+ expect(statement.inKeyword, isNotNull);
+ expect(statement.iterable, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
}
- void test_parseFormalParameter_final_withType_normal() {
- ParameterKind kind = ParameterKind.REQUIRED;
- SimpleFormalParameter parameter =
- ParserTestCase.parse("parseFormalParameter", <Object>[kind], "final A a");
- expect(parameter.identifier, isNotNull);
- expect(parameter.keyword, isNotNull);
- expect(parameter.type, isNotNull);
- expect(parameter.kind, kind);
+ void test_parseForStatement_each_identifier() {
+ ForEachStatement statement =
+ ParserTestCase.parse4("parseForStatement", "for (element in list) {}");
+ expect(statement.awaitKeyword, isNull);
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.loopVariable, isNull);
+ expect(statement.identifier, isNotNull);
+ expect(statement.inKeyword, isNotNull);
+ expect(statement.iterable, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
}
- void test_parseFormalParameter_final_withType_positional() {
- ParameterKind kind = ParameterKind.POSITIONAL;
- DefaultFormalParameter parameter = ParserTestCase.parse(
- "parseFormalParameter",
- <Object>[kind],
- "final A a = null");
- SimpleFormalParameter simpleParameter =
- parameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
- expect(parameter.separator, isNotNull);
- expect(parameter.defaultValue, isNotNull);
- expect(parameter.kind, kind);
+ void test_parseForStatement_each_noType_metadata() {
+ ForEachStatement statement = ParserTestCase.parse4(
+ "parseForStatement", "for (@A var element in list) {}");
+ expect(statement.awaitKeyword, isNull);
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.loopVariable, isNotNull);
+ expect(statement.loopVariable.metadata, hasLength(1));
+ expect(statement.identifier, isNull);
+ expect(statement.inKeyword, isNotNull);
+ expect(statement.iterable, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
}
- void test_parseFormalParameter_nonFinal_withType_named() {
- ParameterKind kind = ParameterKind.NAMED;
- DefaultFormalParameter parameter =
- ParserTestCase.parse("parseFormalParameter", <Object>[kind], "A a : null");
- SimpleFormalParameter simpleParameter =
- parameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
- expect(parameter.separator, isNotNull);
- expect(parameter.defaultValue, isNotNull);
- expect(parameter.kind, kind);
+ void test_parseForStatement_each_type() {
+ ForEachStatement statement = ParserTestCase.parse4(
+ "parseForStatement", "for (A element in list) {}");
+ expect(statement.awaitKeyword, isNull);
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.loopVariable, isNotNull);
+ expect(statement.identifier, isNull);
+ expect(statement.inKeyword, isNotNull);
+ expect(statement.iterable, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
}
- void test_parseFormalParameter_nonFinal_withType_normal() {
- ParameterKind kind = ParameterKind.REQUIRED;
- SimpleFormalParameter parameter =
- ParserTestCase.parse("parseFormalParameter", <Object>[kind], "A a");
- expect(parameter.identifier, isNotNull);
- expect(parameter.keyword, isNull);
- expect(parameter.type, isNotNull);
- expect(parameter.kind, kind);
+ void test_parseForStatement_each_var() {
+ ForEachStatement statement = ParserTestCase.parse4(
+ "parseForStatement", "for (var element in list) {}");
+ expect(statement.awaitKeyword, isNull);
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.loopVariable, isNotNull);
+ expect(statement.identifier, isNull);
+ expect(statement.inKeyword, isNotNull);
+ expect(statement.iterable, isNotNull);
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
}
- void test_parseFormalParameter_nonFinal_withType_positional() {
- ParameterKind kind = ParameterKind.POSITIONAL;
- DefaultFormalParameter parameter =
- ParserTestCase.parse("parseFormalParameter", <Object>[kind], "A a = null");
- SimpleFormalParameter simpleParameter =
- parameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNull);
- expect(simpleParameter.type, isNotNull);
- expect(simpleParameter.kind, kind);
- expect(parameter.separator, isNotNull);
- expect(parameter.defaultValue, isNotNull);
- expect(parameter.kind, kind);
+ void test_parseForStatement_loop_c() {
+ ForStatement statement =
+ ParserTestCase.parse4("parseForStatement", "for (; i < count;) {}");
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.variables, isNull);
+ expect(statement.initialization, isNull);
+ expect(statement.leftSeparator, isNotNull);
+ expect(statement.condition, isNotNull);
+ expect(statement.rightSeparator, isNotNull);
+ expect(statement.updaters, hasLength(0));
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
}
- void test_parseFormalParameter_var() {
- ParameterKind kind = ParameterKind.REQUIRED;
- SimpleFormalParameter parameter =
- ParserTestCase.parse("parseFormalParameter", <Object>[kind], "var a");
- expect(parameter.identifier, isNotNull);
- expect(parameter.keyword, isNotNull);
- expect(parameter.type, isNull);
- expect(parameter.kind, kind);
+ void test_parseForStatement_loop_cu() {
+ ForStatement statement =
+ ParserTestCase.parse4("parseForStatement", "for (; i < count; i++) {}");
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.variables, isNull);
+ expect(statement.initialization, isNull);
+ expect(statement.leftSeparator, isNotNull);
+ expect(statement.condition, isNotNull);
+ expect(statement.rightSeparator, isNotNull);
+ expect(statement.updaters, hasLength(1));
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
}
- void test_parseFormalParameter_var_named() {
- ParameterKind kind = ParameterKind.NAMED;
- DefaultFormalParameter parameter =
- ParserTestCase.parse("parseFormalParameter", <Object>[kind], "var a : null");
- SimpleFormalParameter simpleParameter =
- parameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
- expect(parameter.separator, isNotNull);
- expect(parameter.defaultValue, isNotNull);
- expect(parameter.kind, kind);
+ void test_parseForStatement_loop_ecu() {
+ ForStatement statement = ParserTestCase.parse4(
+ "parseForStatement", "for (i--; i < count; i++) {}");
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.variables, isNull);
+ expect(statement.initialization, isNotNull);
+ expect(statement.leftSeparator, isNotNull);
+ expect(statement.condition, isNotNull);
+ expect(statement.rightSeparator, isNotNull);
+ expect(statement.updaters, hasLength(1));
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
}
- void test_parseFormalParameter_var_positional() {
- ParameterKind kind = ParameterKind.POSITIONAL;
- DefaultFormalParameter parameter =
- ParserTestCase.parse("parseFormalParameter", <Object>[kind], "var a = null");
- SimpleFormalParameter simpleParameter =
- parameter.parameter as SimpleFormalParameter;
- expect(simpleParameter.identifier, isNotNull);
- expect(simpleParameter.keyword, isNotNull);
- expect(simpleParameter.type, isNull);
- expect(simpleParameter.kind, kind);
- expect(parameter.separator, isNotNull);
- expect(parameter.defaultValue, isNotNull);
- expect(parameter.kind, kind);
+ void test_parseForStatement_loop_i() {
+ ForStatement statement =
+ ParserTestCase.parse4("parseForStatement", "for (var i = 0;;) {}");
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ VariableDeclarationList variables = statement.variables;
+ expect(variables, isNotNull);
+ expect(variables.metadata, hasLength(0));
+ expect(variables.variables, hasLength(1));
+ expect(statement.initialization, isNull);
+ expect(statement.leftSeparator, isNotNull);
+ expect(statement.condition, isNull);
+ expect(statement.rightSeparator, isNotNull);
+ expect(statement.updaters, hasLength(0));
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
+ }
+
+ void test_parseForStatement_loop_i_withMetadata() {
+ ForStatement statement =
+ ParserTestCase.parse4("parseForStatement", "for (@A var i = 0;;) {}");
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ VariableDeclarationList variables = statement.variables;
+ expect(variables, isNotNull);
+ expect(variables.metadata, hasLength(1));
+ expect(variables.variables, hasLength(1));
+ expect(statement.initialization, isNull);
+ expect(statement.leftSeparator, isNotNull);
+ expect(statement.condition, isNull);
+ expect(statement.rightSeparator, isNotNull);
+ expect(statement.updaters, hasLength(0));
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
+ }
+
+ void test_parseForStatement_loop_ic() {
+ ForStatement statement = ParserTestCase.parse4(
+ "parseForStatement", "for (var i = 0; i < count;) {}");
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ VariableDeclarationList variables = statement.variables;
+ expect(variables, isNotNull);
+ expect(variables.variables, hasLength(1));
+ expect(statement.initialization, isNull);
+ expect(statement.leftSeparator, isNotNull);
+ expect(statement.condition, isNotNull);
+ expect(statement.rightSeparator, isNotNull);
+ expect(statement.updaters, hasLength(0));
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
+ }
+
+ void test_parseForStatement_loop_icu() {
+ ForStatement statement = ParserTestCase.parse4(
+ "parseForStatement", "for (var i = 0; i < count; i++) {}");
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ VariableDeclarationList variables = statement.variables;
+ expect(variables, isNotNull);
+ expect(variables.variables, hasLength(1));
+ expect(statement.initialization, isNull);
+ expect(statement.leftSeparator, isNotNull);
+ expect(statement.condition, isNotNull);
+ expect(statement.rightSeparator, isNotNull);
+ expect(statement.updaters, hasLength(1));
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
+ }
+
+ void test_parseForStatement_loop_iicuu() {
+ ForStatement statement = ParserTestCase.parse4(
+ "parseForStatement", "for (int i = 0, j = count; i < j; i++, j--) {}");
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ VariableDeclarationList variables = statement.variables;
+ expect(variables, isNotNull);
+ expect(variables.variables, hasLength(2));
+ expect(statement.initialization, isNull);
+ expect(statement.leftSeparator, isNotNull);
+ expect(statement.condition, isNotNull);
+ expect(statement.rightSeparator, isNotNull);
+ expect(statement.updaters, hasLength(2));
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
+ }
+
+ void test_parseForStatement_loop_iu() {
+ ForStatement statement =
+ ParserTestCase.parse4("parseForStatement", "for (var i = 0;; i++) {}");
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ VariableDeclarationList variables = statement.variables;
+ expect(variables, isNotNull);
+ expect(variables.variables, hasLength(1));
+ expect(statement.initialization, isNull);
+ expect(statement.leftSeparator, isNotNull);
+ expect(statement.condition, isNull);
+ expect(statement.rightSeparator, isNotNull);
+ expect(statement.updaters, hasLength(1));
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
+ }
+
+ void test_parseForStatement_loop_u() {
+ ForStatement statement =
+ ParserTestCase.parse4("parseForStatement", "for (;; i++) {}");
+ expect(statement.forKeyword, isNotNull);
+ expect(statement.leftParenthesis, isNotNull);
+ expect(statement.variables, isNull);
+ expect(statement.initialization, isNull);
+ expect(statement.leftSeparator, isNotNull);
+ expect(statement.condition, isNull);
+ expect(statement.rightSeparator, isNotNull);
+ expect(statement.updaters, hasLength(1));
+ expect(statement.rightParenthesis, isNotNull);
+ expect(statement.body, isNotNull);
}
void test_parseFunctionBody_block() {
- BlockFunctionBody functionBody =
- ParserTestCase.parse("parseFunctionBody", <Object>[false, null, false], "{}");
+ BlockFunctionBody functionBody = ParserTestCase.parse(
+ "parseFunctionBody", <Object>[false, null, false], "{}");
expect(functionBody.keyword, isNull);
expect(functionBody.star, isNull);
expect(functionBody.block, isNotNull);
@@ -8501,9 +7681,7 @@
void test_parseFunctionBody_block_async() {
BlockFunctionBody functionBody = ParserTestCase.parse(
- "parseFunctionBody",
- <Object>[false, null, false],
- "async {}");
+ "parseFunctionBody", <Object>[false, null, false], "async {}");
expect(functionBody.keyword, isNotNull);
expect(functionBody.keyword.lexeme, Parser.ASYNC);
expect(functionBody.star, isNull);
@@ -8515,9 +7693,7 @@
void test_parseFunctionBody_block_asyncGenerator() {
BlockFunctionBody functionBody = ParserTestCase.parse(
- "parseFunctionBody",
- <Object>[false, null, false],
- "async* {}");
+ "parseFunctionBody", <Object>[false, null, false], "async* {}");
expect(functionBody.keyword, isNotNull);
expect(functionBody.keyword.lexeme, Parser.ASYNC);
expect(functionBody.star, isNotNull);
@@ -8529,9 +7705,7 @@
void test_parseFunctionBody_block_syncGenerator() {
BlockFunctionBody functionBody = ParserTestCase.parse(
- "parseFunctionBody",
- <Object>[false, null, false],
- "sync* {}");
+ "parseFunctionBody", <Object>[false, null, false], "sync* {}");
expect(functionBody.keyword, isNotNull);
expect(functionBody.keyword.lexeme, Parser.SYNC);
expect(functionBody.star, isNotNull);
@@ -8542,16 +7716,14 @@
}
void test_parseFunctionBody_empty() {
- EmptyFunctionBody functionBody =
- ParserTestCase.parse("parseFunctionBody", <Object>[true, null, false], ";");
+ EmptyFunctionBody functionBody = ParserTestCase.parse(
+ "parseFunctionBody", <Object>[true, null, false], ";");
expect(functionBody.semicolon, isNotNull);
}
void test_parseFunctionBody_expression() {
ExpressionFunctionBody functionBody = ParserTestCase.parse(
- "parseFunctionBody",
- <Object>[false, null, false],
- "=> y;");
+ "parseFunctionBody", <Object>[false, null, false], "=> y;");
expect(functionBody.keyword, isNull);
expect(functionBody.functionDefinition, isNotNull);
expect(functionBody.expression, isNotNull);
@@ -8563,9 +7735,7 @@
void test_parseFunctionBody_expression_async() {
ExpressionFunctionBody functionBody = ParserTestCase.parse(
- "parseFunctionBody",
- <Object>[false, null, false],
- "async => y;");
+ "parseFunctionBody", <Object>[false, null, false], "async => y;");
expect(functionBody.keyword, isNotNull);
expect(functionBody.keyword.lexeme, Parser.ASYNC);
expect(functionBody.functionDefinition, isNotNull);
@@ -8578,75 +7748,53 @@
void test_parseFunctionBody_nativeFunctionBody() {
NativeFunctionBody functionBody = ParserTestCase.parse(
- "parseFunctionBody",
- <Object>[false, null, false],
- "native 'str';");
- expect(functionBody.nativeToken, isNotNull);
+ "parseFunctionBody", <Object>[false, null, false], "native 'str';");
+ expect(functionBody.nativeKeyword, isNotNull);
expect(functionBody.stringLiteral, isNotNull);
expect(functionBody.semicolon, isNotNull);
}
void test_parseFunctionBody_skip_block() {
ParserTestCase.parseFunctionBodies = false;
- FunctionBody functionBody =
- ParserTestCase.parse("parseFunctionBody", <Object>[false, null, false], "{}");
+ FunctionBody functionBody = ParserTestCase.parse(
+ "parseFunctionBody", <Object>[false, null, false], "{}");
EngineTestCase.assertInstanceOf(
- (obj) => obj is EmptyFunctionBody,
- EmptyFunctionBody,
- functionBody);
+ (obj) => obj is EmptyFunctionBody, EmptyFunctionBody, functionBody);
}
void test_parseFunctionBody_skip_block_invalid() {
ParserTestCase.parseFunctionBodies = false;
- FunctionBody functionBody = ParserTestCase.parse3(
- "parseFunctionBody",
- <Object>[false, null, false],
- "{",
- [ParserErrorCode.EXPECTED_TOKEN]);
+ FunctionBody functionBody = ParserTestCase.parse3("parseFunctionBody",
+ <Object>[false, null, false], "{", [ParserErrorCode.EXPECTED_TOKEN]);
EngineTestCase.assertInstanceOf(
- (obj) => obj is EmptyFunctionBody,
- EmptyFunctionBody,
- functionBody);
+ (obj) => obj is EmptyFunctionBody, EmptyFunctionBody, functionBody);
}
void test_parseFunctionBody_skip_blocks() {
ParserTestCase.parseFunctionBodies = false;
FunctionBody functionBody = ParserTestCase.parse(
- "parseFunctionBody",
- <Object>[false, null, false],
- "{ {} }");
+ "parseFunctionBody", <Object>[false, null, false], "{ {} }");
EngineTestCase.assertInstanceOf(
- (obj) => obj is EmptyFunctionBody,
- EmptyFunctionBody,
- functionBody);
+ (obj) => obj is EmptyFunctionBody, EmptyFunctionBody, functionBody);
}
void test_parseFunctionBody_skip_expression() {
ParserTestCase.parseFunctionBodies = false;
FunctionBody functionBody = ParserTestCase.parse(
- "parseFunctionBody",
- <Object>[false, null, false],
- "=> y;");
+ "parseFunctionBody", <Object>[false, null, false], "=> y;");
EngineTestCase.assertInstanceOf(
- (obj) => obj is EmptyFunctionBody,
- EmptyFunctionBody,
- functionBody);
- }
-
- void test_parseFunctionDeclarationStatement() {
- FunctionDeclarationStatement statement = ParserTestCase.parse4(
- "parseFunctionDeclarationStatement",
- "void f(int p) => p * 2;");
- expect(statement.functionDeclaration, isNotNull);
+ (obj) => obj is EmptyFunctionBody, EmptyFunctionBody, functionBody);
}
void test_parseFunctionDeclaration_function() {
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
FunctionDeclaration declaration = ParserTestCase.parse(
- "parseFunctionDeclaration",
- <Object>[commentAndMetadata(comment), null, returnType],
- "f() {}");
+ "parseFunctionDeclaration", <Object>[
+ commentAndMetadata(comment),
+ null,
+ returnType
+ ], "f() {}");
expect(declaration.documentationComment, comment);
expect(declaration.returnType, returnType);
expect(declaration.name, isNotNull);
@@ -8661,9 +7809,11 @@
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
FunctionDeclaration declaration = ParserTestCase.parse(
- "parseFunctionDeclaration",
- <Object>[commentAndMetadata(comment), null, returnType],
- "get p => 0;");
+ "parseFunctionDeclaration", <Object>[
+ commentAndMetadata(comment),
+ null,
+ returnType
+ ], "get p => 0;");
expect(declaration.documentationComment, comment);
expect(declaration.returnType, returnType);
expect(declaration.name, isNotNull);
@@ -8678,9 +7828,11 @@
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
FunctionDeclaration declaration = ParserTestCase.parse(
- "parseFunctionDeclaration",
- <Object>[commentAndMetadata(comment), null, returnType],
- "set p(v) {}");
+ "parseFunctionDeclaration", <Object>[
+ commentAndMetadata(comment),
+ null,
+ returnType
+ ], "set p(v) {}");
expect(declaration.documentationComment, comment);
expect(declaration.returnType, returnType);
expect(declaration.name, isNotNull);
@@ -8691,6 +7843,12 @@
expect(declaration.propertyKeyword, isNotNull);
}
+ void test_parseFunctionDeclarationStatement() {
+ FunctionDeclarationStatement statement = ParserTestCase.parse4(
+ "parseFunctionDeclarationStatement", "void f(int p) => p * 2;");
+ expect(statement.functionDeclaration, isNotNull);
+ }
+
void test_parseFunctionExpression_body_inExpression() {
FunctionExpression expression =
ParserTestCase.parse4("parseFunctionExpression", "(int i) => i++");
@@ -8702,10 +7860,12 @@
void test_parseGetter_nonStatic() {
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
- MethodDeclaration method = ParserTestCase.parse(
- "parseGetter",
- <Object>[commentAndMetadata(comment), null, null, returnType],
- "get a;");
+ MethodDeclaration method = ParserTestCase.parse("parseGetter", <Object>[
+ commentAndMetadata(comment),
+ null,
+ null,
+ returnType
+ ], "get a;");
expect(method.body, isNotNull);
expect(method.documentationComment, comment);
expect(method.externalKeyword, isNull);
@@ -8721,10 +7881,12 @@
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
Token staticKeyword = TokenFactory.tokenFromKeyword(Keyword.STATIC);
TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
- MethodDeclaration method = ParserTestCase.parse(
- "parseGetter",
- <Object>[commentAndMetadata(comment), null, staticKeyword, returnType],
- "get a => 42;");
+ MethodDeclaration method = ParserTestCase.parse("parseGetter", <Object>[
+ commentAndMetadata(comment),
+ null,
+ staticKeyword,
+ returnType
+ ], "get a => 42;");
expect(method.body, isNotNull);
expect(method.documentationComment, comment);
expect(method.externalKeyword, isNull);
@@ -8800,109 +7962,105 @@
ImplementsClause clause =
ParserTestCase.parse4("parseImplementsClause", "implements A, B, C");
expect(clause.interfaces, hasLength(3));
- expect(clause.keyword, isNotNull);
+ expect(clause.implementsKeyword, isNotNull);
}
void test_parseImplementsClause_single() {
ImplementsClause clause =
ParserTestCase.parse4("parseImplementsClause", "implements A");
expect(clause.interfaces, hasLength(1));
- expect(clause.keyword, isNotNull);
+ expect(clause.implementsKeyword, isNotNull);
}
void test_parseImportDirective_deferred() {
- ImportDirective directive = ParserTestCase.parse(
- "parseImportDirective",
- <Object>[emptyCommentAndMetadata()],
- "import 'lib/lib.dart' deferred as a;");
+ ImportDirective directive = ParserTestCase.parse("parseImportDirective",
+ <Object>[
+ emptyCommentAndMetadata()
+ ], "import 'lib/lib.dart' deferred as a;");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
- expect(directive.deferredToken, isNotNull);
- expect(directive.asToken, isNotNull);
+ expect(directive.deferredKeyword, isNotNull);
+ expect(directive.asKeyword, isNotNull);
expect(directive.prefix, isNotNull);
expect(directive.combinators, hasLength(0));
expect(directive.semicolon, isNotNull);
}
void test_parseImportDirective_hide() {
- ImportDirective directive = ParserTestCase.parse(
- "parseImportDirective",
- <Object>[emptyCommentAndMetadata()],
- "import 'lib/lib.dart' hide A, B;");
+ ImportDirective directive = ParserTestCase.parse("parseImportDirective",
+ <Object>[
+ emptyCommentAndMetadata()
+ ], "import 'lib/lib.dart' hide A, B;");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
- expect(directive.deferredToken, isNull);
- expect(directive.asToken, isNull);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNull);
expect(directive.prefix, isNull);
expect(directive.combinators, hasLength(1));
expect(directive.semicolon, isNotNull);
}
void test_parseImportDirective_noCombinator() {
- ImportDirective directive = ParserTestCase.parse(
- "parseImportDirective",
- <Object>[emptyCommentAndMetadata()],
- "import 'lib/lib.dart';");
+ ImportDirective directive = ParserTestCase.parse("parseImportDirective",
+ <Object>[emptyCommentAndMetadata()], "import 'lib/lib.dart';");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
- expect(directive.deferredToken, isNull);
- expect(directive.asToken, isNull);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNull);
expect(directive.prefix, isNull);
expect(directive.combinators, hasLength(0));
expect(directive.semicolon, isNotNull);
}
void test_parseImportDirective_prefix() {
- ImportDirective directive = ParserTestCase.parse(
- "parseImportDirective",
- <Object>[emptyCommentAndMetadata()],
- "import 'lib/lib.dart' as a;");
+ ImportDirective directive = ParserTestCase.parse("parseImportDirective",
+ <Object>[emptyCommentAndMetadata()], "import 'lib/lib.dart' as a;");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
- expect(directive.deferredToken, isNull);
- expect(directive.asToken, isNotNull);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNotNull);
expect(directive.prefix, isNotNull);
expect(directive.combinators, hasLength(0));
expect(directive.semicolon, isNotNull);
}
void test_parseImportDirective_prefix_hide_show() {
- ImportDirective directive = ParserTestCase.parse(
- "parseImportDirective",
- <Object>[emptyCommentAndMetadata()],
- "import 'lib/lib.dart' as a hide A show B;");
+ ImportDirective directive = ParserTestCase.parse("parseImportDirective",
+ <Object>[
+ emptyCommentAndMetadata()
+ ], "import 'lib/lib.dart' as a hide A show B;");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
- expect(directive.deferredToken, isNull);
- expect(directive.asToken, isNotNull);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNotNull);
expect(directive.prefix, isNotNull);
expect(directive.combinators, hasLength(2));
expect(directive.semicolon, isNotNull);
}
void test_parseImportDirective_prefix_show_hide() {
- ImportDirective directive = ParserTestCase.parse(
- "parseImportDirective",
- <Object>[emptyCommentAndMetadata()],
- "import 'lib/lib.dart' as a show B hide A;");
+ ImportDirective directive = ParserTestCase.parse("parseImportDirective",
+ <Object>[
+ emptyCommentAndMetadata()
+ ], "import 'lib/lib.dart' as a show B hide A;");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
- expect(directive.deferredToken, isNull);
- expect(directive.asToken, isNotNull);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNotNull);
expect(directive.prefix, isNotNull);
expect(directive.combinators, hasLength(2));
expect(directive.semicolon, isNotNull);
}
void test_parseImportDirective_show() {
- ImportDirective directive = ParserTestCase.parse(
- "parseImportDirective",
- <Object>[emptyCommentAndMetadata()],
- "import 'lib/lib.dart' show A, B;");
+ ImportDirective directive = ParserTestCase.parse("parseImportDirective",
+ <Object>[
+ emptyCommentAndMetadata()
+ ], "import 'lib/lib.dart' show A, B;");
expect(directive.keyword, isNotNull);
expect(directive.uri, isNotNull);
- expect(directive.deferredToken, isNull);
- expect(directive.asToken, isNull);
+ expect(directive.deferredKeyword, isNull);
+ expect(directive.asKeyword, isNull);
expect(directive.prefix, isNull);
expect(directive.combinators, hasLength(1));
expect(directive.semicolon, isNotNull);
@@ -8913,9 +8071,12 @@
Token staticKeyword = TokenFactory.tokenFromKeyword(Keyword.STATIC);
TypeName type = new TypeName(new SimpleIdentifier(null), null);
FieldDeclaration declaration = ParserTestCase.parse(
- "parseInitializedIdentifierList",
- <Object>[commentAndMetadata(comment), staticKeyword, null, type],
- "a = 1, b, c = 3;");
+ "parseInitializedIdentifierList", <Object>[
+ commentAndMetadata(comment),
+ staticKeyword,
+ null,
+ type
+ ], "a = 1, b, c = 3;");
expect(declaration.documentationComment, comment);
VariableDeclarationList fields = declaration.fields;
expect(fields, isNotNull);
@@ -8931,9 +8092,12 @@
Token staticKeyword = TokenFactory.tokenFromKeyword(Keyword.STATIC);
Token varKeyword = TokenFactory.tokenFromKeyword(Keyword.VAR);
FieldDeclaration declaration = ParserTestCase.parse(
- "parseInitializedIdentifierList",
- <Object>[commentAndMetadata(comment), staticKeyword, varKeyword, null],
- "a = 1, b, c = 3;");
+ "parseInitializedIdentifierList", <Object>[
+ commentAndMetadata(comment),
+ staticKeyword,
+ varKeyword,
+ null
+ ], "a = 1, b, c = 3;");
expect(declaration.documentationComment, comment);
VariableDeclarationList fields = declaration.fields;
expect(fields, isNotNull);
@@ -8947,9 +8111,7 @@
void test_parseInstanceCreationExpression_qualifiedType() {
Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
InstanceCreationExpression expression = ParserTestCase.parse(
- "parseInstanceCreationExpression",
- <Object>[token],
- "A.B()");
+ "parseInstanceCreationExpression", <Object>[token], "A.B()");
expect(expression.keyword, token);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
@@ -8962,9 +8124,7 @@
void test_parseInstanceCreationExpression_qualifiedType_named() {
Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
InstanceCreationExpression expression = ParserTestCase.parse(
- "parseInstanceCreationExpression",
- <Object>[token],
- "A.B.c()");
+ "parseInstanceCreationExpression", <Object>[token], "A.B.c()");
expect(expression.keyword, token);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
@@ -8977,9 +8137,7 @@
void test_parseInstanceCreationExpression_type() {
Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
InstanceCreationExpression expression = ParserTestCase.parse(
- "parseInstanceCreationExpression",
- <Object>[token],
- "A()");
+ "parseInstanceCreationExpression", <Object>[token], "A()");
expect(expression.keyword, token);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
@@ -8992,9 +8150,7 @@
void test_parseInstanceCreationExpression_type_named() {
Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
InstanceCreationExpression expression = ParserTestCase.parse(
- "parseInstanceCreationExpression",
- <Object>[token],
- "A<B>.c()");
+ "parseInstanceCreationExpression", <Object>[token], "A<B>.c()");
expect(expression.keyword, token);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
@@ -9005,11 +8161,9 @@
}
void test_parseLibraryDirective() {
- LibraryDirective directive = ParserTestCase.parse(
- "parseLibraryDirective",
- <Object>[emptyCommentAndMetadata()],
- "library l;");
- expect(directive.libraryToken, isNotNull);
+ LibraryDirective directive = ParserTestCase.parse("parseLibraryDirective",
+ <Object>[emptyCommentAndMetadata()], "library l;");
+ expect(directive.libraryKeyword, isNotNull);
expect(directive.name, isNotNull);
expect(directive.semicolon, isNotNull);
}
@@ -9031,8 +8185,8 @@
void test_parseListLiteral_empty_oneToken() {
Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
TypeArgumentList typeArguments = null;
- ListLiteral literal =
- ParserTestCase.parse("parseListLiteral", <Object>[token, typeArguments], "[]");
+ ListLiteral literal = ParserTestCase.parse(
+ "parseListLiteral", <Object>[token, typeArguments], "[]");
expect(literal.constKeyword, token);
expect(literal.typeArguments, typeArguments);
expect(literal.leftBracket, isNotNull);
@@ -9044,9 +8198,7 @@
Token constToken = null;
TypeArgumentList typeArguments = null;
ListLiteral literal = ParserTestCase.parse(
- "parseListLiteral",
- <Object>[constToken, typeArguments],
- "/* 0 */ []");
+ "parseListLiteral", <Object>[constToken, typeArguments], "/* 0 */ []");
expect(literal.constKeyword, constToken);
expect(literal.typeArguments, typeArguments);
Token leftBracket = literal.leftBracket;
@@ -9060,9 +8212,7 @@
Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
TypeArgumentList typeArguments = null;
ListLiteral literal = ParserTestCase.parse(
- "parseListLiteral",
- <Object>[token, typeArguments],
- "[ ]");
+ "parseListLiteral", <Object>[token, typeArguments], "[ ]");
expect(literal.constKeyword, token);
expect(literal.typeArguments, typeArguments);
expect(literal.leftBracket, isNotNull);
@@ -9071,8 +8221,8 @@
}
void test_parseListLiteral_multiple() {
- ListLiteral literal =
- ParserTestCase.parse("parseListLiteral", <Object>[null, null], "[1, 2, 3]");
+ ListLiteral literal = ParserTestCase.parse(
+ "parseListLiteral", <Object>[null, null], "[1, 2, 3]");
expect(literal.constKeyword, isNull);
expect(literal.typeArguments, isNull);
expect(literal.leftBracket, isNotNull);
@@ -9101,8 +8251,8 @@
}
void test_parseListOrMapLiteral_list_type() {
- ListLiteral literal =
- ParserTestCase.parse("parseListOrMapLiteral", <Object>[null], "<int> [1]");
+ ListLiteral literal = ParserTestCase.parse(
+ "parseListOrMapLiteral", <Object>[null], "<int> [1]");
expect(literal.constKeyword, isNull);
expect(literal.typeArguments, isNotNull);
expect(literal.leftBracket, isNotNull);
@@ -9111,8 +8261,8 @@
}
void test_parseListOrMapLiteral_map_noType() {
- MapLiteral literal =
- ParserTestCase.parse("parseListOrMapLiteral", <Object>[null], "{'1' : 1}");
+ MapLiteral literal = ParserTestCase.parse(
+ "parseListOrMapLiteral", <Object>[null], "{'1' : 1}");
expect(literal.constKeyword, isNull);
expect(literal.typeArguments, isNull);
expect(literal.leftBracket, isNotNull);
@@ -9122,9 +8272,7 @@
void test_parseListOrMapLiteral_map_type() {
MapLiteral literal = ParserTestCase.parse(
- "parseListOrMapLiteral",
- <Object>[null],
- "<String, int> {'1' : 1}");
+ "parseListOrMapLiteral", <Object>[null], "<String, int> {'1' : 1}");
expect(literal.constKeyword, isNull);
expect(literal.typeArguments, isNotNull);
expect(literal.leftBracket, isNotNull);
@@ -9150,6 +8298,35 @@
expect(expression.rightOperand, isNotNull);
}
+ void test_parseMapLiteral_empty() {
+ Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
+ TypeArgumentList typeArguments = AstFactory.typeArgumentList(
+ [AstFactory.typeName4("String"), AstFactory.typeName4("int")]);
+ MapLiteral literal = ParserTestCase.parse(
+ "parseMapLiteral", <Object>[token, typeArguments], "{}");
+ expect(literal.constKeyword, token);
+ expect(literal.typeArguments, typeArguments);
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.entries, hasLength(0));
+ expect(literal.rightBracket, isNotNull);
+ }
+
+ void test_parseMapLiteral_multiple() {
+ MapLiteral literal = ParserTestCase.parse(
+ "parseMapLiteral", <Object>[null, null], "{'a' : b, 'x' : y}");
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.entries, hasLength(2));
+ expect(literal.rightBracket, isNotNull);
+ }
+
+ void test_parseMapLiteral_single() {
+ MapLiteral literal = ParserTestCase.parse(
+ "parseMapLiteral", <Object>[null, null], "{'x' : y}");
+ expect(literal.leftBracket, isNotNull);
+ expect(literal.entries, hasLength(1));
+ expect(literal.rightBracket, isNotNull);
+ }
+
void test_parseMapLiteralEntry_complex() {
MapLiteralEntry entry =
ParserTestCase.parse4("parseMapLiteralEntry", "2 + 2 : y");
@@ -9174,37 +8351,6 @@
expect(entry.value, isNotNull);
}
- void test_parseMapLiteral_empty() {
- Token token = TokenFactory.tokenFromKeyword(Keyword.CONST);
- TypeArgumentList typeArguments = AstFactory.typeArgumentList(
- [AstFactory.typeName4("String"), AstFactory.typeName4("int")]);
- MapLiteral literal =
- ParserTestCase.parse("parseMapLiteral", <Object>[token, typeArguments], "{}");
- expect(literal.constKeyword, token);
- expect(literal.typeArguments, typeArguments);
- expect(literal.leftBracket, isNotNull);
- expect(literal.entries, hasLength(0));
- expect(literal.rightBracket, isNotNull);
- }
-
- void test_parseMapLiteral_multiple() {
- MapLiteral literal = ParserTestCase.parse(
- "parseMapLiteral",
- <Object>[null, null],
- "{'a' : b, 'x' : y}");
- expect(literal.leftBracket, isNotNull);
- expect(literal.entries, hasLength(2));
- expect(literal.rightBracket, isNotNull);
- }
-
- void test_parseMapLiteral_single() {
- MapLiteral literal =
- ParserTestCase.parse("parseMapLiteral", <Object>[null, null], "{'x' : y}");
- expect(literal.leftBracket, isNotNull);
- expect(literal.entries, hasLength(1));
- expect(literal.rightBracket, isNotNull);
- }
-
void test_parseModifiers_abstract() {
Modifiers modifiers = ParserTestCase.parse4("parseModifiers", "abstract A");
expect(modifiers.abstractKeyword, isNotNull);
@@ -9252,10 +8398,8 @@
void test_parseMultiplicativeExpression_super() {
BinaryExpression expression =
ParserTestCase.parse4("parseMultiplicativeExpression", "super * y");
- EngineTestCase.assertInstanceOf(
- (obj) => obj is SuperExpression,
- SuperExpression,
- expression.leftOperand);
+ EngineTestCase.assertInstanceOf((obj) => obj is SuperExpression,
+ SuperExpression, expression.leftOperand);
expect(expression.operator, isNotNull);
expect(expression.operator.type, TokenType.STAR);
expect(expression.rightOperand, isNotNull);
@@ -9341,18 +8485,15 @@
}
void test_parseNonLabeledStatement_invokeFunctionExpression() {
- ExpressionStatement statement =
- ParserTestCase.parse4("parseNonLabeledStatement", "(a) {return a + a;} (3);");
+ ExpressionStatement statement = ParserTestCase.parse4(
+ "parseNonLabeledStatement", "(a) {return a + a;} (3);");
EngineTestCase.assertInstanceOf(
(obj) => obj is FunctionExpressionInvocation,
- FunctionExpressionInvocation,
- statement.expression);
+ FunctionExpressionInvocation, statement.expression);
FunctionExpressionInvocation invocation =
statement.expression as FunctionExpressionInvocation;
- EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionExpression,
- FunctionExpression,
- invocation.function);
+ EngineTestCase.assertInstanceOf((obj) => obj is FunctionExpression,
+ FunctionExpression, invocation.function);
FunctionExpression expression = invocation.function as FunctionExpression;
expect(expression.parameters, isNotNull);
expect(expression.body, isNotNull);
@@ -9545,10 +8686,11 @@
void test_parseOperator() {
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
- MethodDeclaration method = ParserTestCase.parse(
- "parseOperator",
- <Object>[commentAndMetadata(comment), null, returnType],
- "operator +(A a);");
+ MethodDeclaration method = ParserTestCase.parse("parseOperator", <Object>[
+ commentAndMetadata(comment),
+ null,
+ returnType
+ ], "operator +(A a);");
expect(method.body, isNotNull);
expect(method.documentationComment, comment);
expect(method.externalKeyword, isNull);
@@ -9565,22 +8707,18 @@
}
void test_parsePartDirective_part() {
- PartDirective directive = ParserTestCase.parse(
- "parsePartDirective",
- <Object>[emptyCommentAndMetadata()],
- "part 'lib/lib.dart';");
- expect(directive.partToken, isNotNull);
+ PartDirective directive = ParserTestCase.parse("parsePartDirective",
+ <Object>[emptyCommentAndMetadata()], "part 'lib/lib.dart';");
+ expect(directive.partKeyword, isNotNull);
expect(directive.uri, isNotNull);
expect(directive.semicolon, isNotNull);
}
void test_parsePartDirective_partOf() {
- PartOfDirective directive = ParserTestCase.parse(
- "parsePartDirective",
- <Object>[emptyCommentAndMetadata()],
- "part of l;");
- expect(directive.partToken, isNotNull);
- expect(directive.ofToken, isNotNull);
+ PartOfDirective directive = ParserTestCase.parse("parsePartDirective",
+ <Object>[emptyCommentAndMetadata()], "part of l;");
+ expect(directive.partKeyword, isNotNull);
+ expect(directive.ofKeyword, isNotNull);
expect(directive.libraryName, isNotNull);
expect(directive.semicolon, isNotNull);
}
@@ -9781,7 +8919,7 @@
void test_parsePrimaryExpression_this() {
ThisExpression expression =
ParserTestCase.parse4("parsePrimaryExpression", "this");
- expect(expression.keyword, isNotNull);
+ expect(expression.thisKeyword, isNotNull);
}
void test_parsePrimaryExpression_true() {
@@ -9791,21 +8929,25 @@
expect(literal.value, isTrue);
}
+ void test_Parser() {
+ expect(new Parser(null, null), isNotNull);
+ }
+
void test_parseRedirectingConstructorInvocation_named() {
- RedirectingConstructorInvocation invocation =
- ParserTestCase.parse4("parseRedirectingConstructorInvocation", "this.a()");
+ RedirectingConstructorInvocation invocation = ParserTestCase.parse4(
+ "parseRedirectingConstructorInvocation", "this.a()");
expect(invocation.argumentList, isNotNull);
expect(invocation.constructorName, isNotNull);
- expect(invocation.keyword, isNotNull);
+ expect(invocation.thisKeyword, isNotNull);
expect(invocation.period, isNotNull);
}
void test_parseRedirectingConstructorInvocation_unnamed() {
- RedirectingConstructorInvocation invocation =
- ParserTestCase.parse4("parseRedirectingConstructorInvocation", "this()");
+ RedirectingConstructorInvocation invocation = ParserTestCase.parse4(
+ "parseRedirectingConstructorInvocation", "this()");
expect(invocation.argumentList, isNotNull);
expect(invocation.constructorName, isNull);
- expect(invocation.keyword, isNotNull);
+ expect(invocation.thisKeyword, isNotNull);
expect(invocation.period, isNull);
}
@@ -9856,13 +8998,13 @@
void test_parseRethrowExpression() {
RethrowExpression expression =
ParserTestCase.parse4("parseRethrowExpression", "rethrow;");
- expect(expression.keyword, isNotNull);
+ expect(expression.rethrowKeyword, isNotNull);
}
void test_parseReturnStatement_noValue() {
ReturnStatement statement =
ParserTestCase.parse4("parseReturnStatement", "return;");
- expect(statement.keyword, isNotNull);
+ expect(statement.returnKeyword, isNotNull);
expect(statement.expression, isNull);
expect(statement.semicolon, isNotNull);
}
@@ -9870,7 +9012,7 @@
void test_parseReturnStatement_value() {
ReturnStatement statement =
ParserTestCase.parse4("parseReturnStatement", "return x;");
- expect(statement.keyword, isNotNull);
+ expect(statement.returnKeyword, isNotNull);
expect(statement.expression, isNotNull);
expect(statement.semicolon, isNotNull);
}
@@ -9890,10 +9032,12 @@
void test_parseSetter_nonStatic() {
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
- MethodDeclaration method = ParserTestCase.parse(
- "parseSetter",
- <Object>[commentAndMetadata(comment), null, null, returnType],
- "set a(var x);");
+ MethodDeclaration method = ParserTestCase.parse("parseSetter", <Object>[
+ commentAndMetadata(comment),
+ null,
+ null,
+ returnType
+ ], "set a(var x);");
expect(method.body, isNotNull);
expect(method.documentationComment, comment);
expect(method.externalKeyword, isNull);
@@ -9909,10 +9053,12 @@
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
Token staticKeyword = TokenFactory.tokenFromKeyword(Keyword.STATIC);
TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
- MethodDeclaration method = ParserTestCase.parse(
- "parseSetter",
- <Object>[commentAndMetadata(comment), null, staticKeyword, returnType],
- "set a(var x) {}");
+ MethodDeclaration method = ParserTestCase.parse("parseSetter", <Object>[
+ commentAndMetadata(comment),
+ null,
+ staticKeyword,
+ returnType
+ ], "set a(var x) {}");
expect(method.body, isNotNull);
expect(method.documentationComment, comment);
expect(method.externalKeyword, isNull);
@@ -10033,7 +9179,7 @@
ParserTestCase.parse4("parseSuperConstructorInvocation", "super.a()");
expect(invocation.argumentList, isNotNull);
expect(invocation.constructorName, isNotNull);
- expect(invocation.keyword, isNotNull);
+ expect(invocation.superKeyword, isNotNull);
expect(invocation.period, isNotNull);
}
@@ -10042,15 +9188,14 @@
ParserTestCase.parse4("parseSuperConstructorInvocation", "super()");
expect(invocation.argumentList, isNotNull);
expect(invocation.constructorName, isNull);
- expect(invocation.keyword, isNotNull);
+ expect(invocation.superKeyword, isNotNull);
expect(invocation.period, isNull);
}
void test_parseSwitchStatement_case() {
SwitchStatement statement = ParserTestCase.parse4(
- "parseSwitchStatement",
- "switch (a) {case 1: return 'I';}");
- expect(statement.keyword, isNotNull);
+ "parseSwitchStatement", "switch (a) {case 1: return 'I';}");
+ expect(statement.switchKeyword, isNotNull);
expect(statement.leftParenthesis, isNotNull);
expect(statement.expression, isNotNull);
expect(statement.rightParenthesis, isNotNull);
@@ -10062,7 +9207,7 @@
void test_parseSwitchStatement_empty() {
SwitchStatement statement =
ParserTestCase.parse4("parseSwitchStatement", "switch (a) {}");
- expect(statement.keyword, isNotNull);
+ expect(statement.switchKeyword, isNotNull);
expect(statement.leftParenthesis, isNotNull);
expect(statement.expression, isNotNull);
expect(statement.rightParenthesis, isNotNull);
@@ -10073,9 +9218,8 @@
void test_parseSwitchStatement_labeledCase() {
SwitchStatement statement = ParserTestCase.parse4(
- "parseSwitchStatement",
- "switch (a) {l1: l2: l3: case(1):}");
- expect(statement.keyword, isNotNull);
+ "parseSwitchStatement", "switch (a) {l1: l2: l3: case(1):}");
+ expect(statement.switchKeyword, isNotNull);
expect(statement.leftParenthesis, isNotNull);
expect(statement.expression, isNotNull);
expect(statement.rightParenthesis, isNotNull);
@@ -10087,9 +9231,8 @@
void test_parseSwitchStatement_labeledStatementInCase() {
SwitchStatement statement = ParserTestCase.parse4(
- "parseSwitchStatement",
- "switch (a) {case 0: f(); l1: g(); break;}");
- expect(statement.keyword, isNotNull);
+ "parseSwitchStatement", "switch (a) {case 0: f(); l1: g(); break;}");
+ expect(statement.switchKeyword, isNotNull);
expect(statement.leftParenthesis, isNotNull);
expect(statement.expression, isNotNull);
expect(statement.rightParenthesis, isNotNull);
@@ -10149,14 +9292,14 @@
void test_parseThrowExpression() {
ThrowExpression expression =
ParserTestCase.parse4("parseThrowExpression", "throw x;");
- expect(expression.keyword, isNotNull);
+ expect(expression.throwKeyword, isNotNull);
expect(expression.expression, isNotNull);
}
void test_parseThrowExpressionWithoutCascade() {
ThrowExpression expression =
ParserTestCase.parse4("parseThrowExpressionWithoutCascade", "throw x;");
- expect(expression.keyword, isNotNull);
+ expect(expression.throwKeyword, isNotNull);
expect(expression.expression, isNotNull);
}
@@ -10181,8 +9324,7 @@
void test_parseTryStatement_catch_finally() {
TryStatement statement = ParserTestCase.parse4(
- "parseTryStatement",
- "try {} catch (e, s) {} finally {}");
+ "parseTryStatement", "try {} catch (e, s) {} finally {}");
expect(statement.tryKeyword, isNotNull);
expect(statement.body, isNotNull);
NodeList<CatchClause> catchClauses = statement.catchClauses;
@@ -10210,8 +9352,7 @@
}
void test_parseTryStatement_multiple() {
- TryStatement statement = ParserTestCase.parse4(
- "parseTryStatement",
+ TryStatement statement = ParserTestCase.parse4("parseTryStatement",
"try {} on NPE catch (e) {} on Error {} catch (e) {}");
expect(statement.tryKeyword, isNotNull);
expect(statement.body, isNotNull);
@@ -10240,8 +9381,8 @@
}
void test_parseTryStatement_on_catch() {
- TryStatement statement =
- ParserTestCase.parse4("parseTryStatement", "try {} on Error catch (e, s) {}");
+ TryStatement statement = ParserTestCase.parse4(
+ "parseTryStatement", "try {} on Error catch (e, s) {}");
expect(statement.tryKeyword, isNotNull);
expect(statement.body, isNotNull);
NodeList<CatchClause> catchClauses = statement.catchClauses;
@@ -10260,8 +9401,7 @@
void test_parseTryStatement_on_catch_finally() {
TryStatement statement = ParserTestCase.parse4(
- "parseTryStatement",
- "try {} on Error catch (e, s) {} finally {}");
+ "parseTryStatement", "try {} on Error catch (e, s) {} finally {}");
expect(statement.tryKeyword, isNotNull);
expect(statement.body, isNotNull);
NodeList<CatchClause> catchClauses = statement.catchClauses;
@@ -10279,11 +9419,9 @@
}
void test_parseTypeAlias_function_noParameters() {
- FunctionTypeAlias typeAlias = ParserTestCase.parse(
- "parseTypeAlias",
- <Object>[emptyCommentAndMetadata()],
- "typedef bool F();");
- expect(typeAlias.keyword, isNotNull);
+ FunctionTypeAlias typeAlias = ParserTestCase.parse("parseTypeAlias",
+ <Object>[emptyCommentAndMetadata()], "typedef bool F();");
+ expect(typeAlias.typedefKeyword, isNotNull);
expect(typeAlias.name, isNotNull);
expect(typeAlias.parameters, isNotNull);
expect(typeAlias.returnType, isNotNull);
@@ -10293,10 +9431,8 @@
void test_parseTypeAlias_function_noReturnType() {
FunctionTypeAlias typeAlias = ParserTestCase.parse(
- "parseTypeAlias",
- <Object>[emptyCommentAndMetadata()],
- "typedef F();");
- expect(typeAlias.keyword, isNotNull);
+ "parseTypeAlias", <Object>[emptyCommentAndMetadata()], "typedef F();");
+ expect(typeAlias.typedefKeyword, isNotNull);
expect(typeAlias.name, isNotNull);
expect(typeAlias.parameters, isNotNull);
expect(typeAlias.returnType, isNull);
@@ -10305,11 +9441,9 @@
}
void test_parseTypeAlias_function_parameterizedReturnType() {
- FunctionTypeAlias typeAlias = ParserTestCase.parse(
- "parseTypeAlias",
- <Object>[emptyCommentAndMetadata()],
- "typedef A<B> F();");
- expect(typeAlias.keyword, isNotNull);
+ FunctionTypeAlias typeAlias = ParserTestCase.parse("parseTypeAlias",
+ <Object>[emptyCommentAndMetadata()], "typedef A<B> F();");
+ expect(typeAlias.typedefKeyword, isNotNull);
expect(typeAlias.name, isNotNull);
expect(typeAlias.parameters, isNotNull);
expect(typeAlias.returnType, isNotNull);
@@ -10318,11 +9452,9 @@
}
void test_parseTypeAlias_function_parameters() {
- FunctionTypeAlias typeAlias = ParserTestCase.parse(
- "parseTypeAlias",
- <Object>[emptyCommentAndMetadata()],
- "typedef bool F(Object value);");
- expect(typeAlias.keyword, isNotNull);
+ FunctionTypeAlias typeAlias = ParserTestCase.parse("parseTypeAlias",
+ <Object>[emptyCommentAndMetadata()], "typedef bool F(Object value);");
+ expect(typeAlias.typedefKeyword, isNotNull);
expect(typeAlias.name, isNotNull);
expect(typeAlias.parameters, isNotNull);
expect(typeAlias.returnType, isNotNull);
@@ -10331,11 +9463,9 @@
}
void test_parseTypeAlias_function_typeParameters() {
- FunctionTypeAlias typeAlias = ParserTestCase.parse(
- "parseTypeAlias",
- <Object>[emptyCommentAndMetadata()],
- "typedef bool F<E>();");
- expect(typeAlias.keyword, isNotNull);
+ FunctionTypeAlias typeAlias = ParserTestCase.parse("parseTypeAlias",
+ <Object>[emptyCommentAndMetadata()], "typedef bool F<E>();");
+ expect(typeAlias.typedefKeyword, isNotNull);
expect(typeAlias.name, isNotNull);
expect(typeAlias.parameters, isNotNull);
expect(typeAlias.returnType, isNotNull);
@@ -10344,11 +9474,9 @@
}
void test_parseTypeAlias_function_voidReturnType() {
- FunctionTypeAlias typeAlias = ParserTestCase.parse(
- "parseTypeAlias",
- <Object>[emptyCommentAndMetadata()],
- "typedef void F();");
- expect(typeAlias.keyword, isNotNull);
+ FunctionTypeAlias typeAlias = ParserTestCase.parse("parseTypeAlias",
+ <Object>[emptyCommentAndMetadata()], "typedef void F();");
+ expect(typeAlias.typedefKeyword, isNotNull);
expect(typeAlias.name, isNotNull);
expect(typeAlias.parameters, isNotNull);
expect(typeAlias.returnType, isNotNull);
@@ -10442,6 +9570,21 @@
expect(typeName.typeArguments, isNull);
}
+ void test_parseTypeParameter_bounded() {
+ TypeParameter parameter =
+ ParserTestCase.parse4("parseTypeParameter", "A extends B");
+ expect(parameter.bound, isNotNull);
+ expect(parameter.extendsKeyword, isNotNull);
+ expect(parameter.name, isNotNull);
+ }
+
+ void test_parseTypeParameter_simple() {
+ TypeParameter parameter = ParserTestCase.parse4("parseTypeParameter", "A");
+ expect(parameter.bound, isNull);
+ expect(parameter.extendsKeyword, isNull);
+ expect(parameter.name, isNotNull);
+ }
+
void test_parseTypeParameterList_multiple() {
TypeParameterList parameterList =
ParserTestCase.parse4("parseTypeParameterList", "<A, B extends C, D>");
@@ -10474,21 +9617,6 @@
expect(parameterList.typeParameters, hasLength(1));
}
- void test_parseTypeParameter_bounded() {
- TypeParameter parameter =
- ParserTestCase.parse4("parseTypeParameter", "A extends B");
- expect(parameter.bound, isNotNull);
- expect(parameter.keyword, isNotNull);
- expect(parameter.name, isNotNull);
- }
-
- void test_parseTypeParameter_simple() {
- TypeParameter parameter = ParserTestCase.parse4("parseTypeParameter", "A");
- expect(parameter.bound, isNull);
- expect(parameter.keyword, isNull);
- expect(parameter.name, isNotNull);
- }
-
void test_parseUnaryExpression_decrement_normal() {
PrefixExpression expression =
ParserTestCase.parse4("parseUnaryExpression", "--x");
@@ -10615,130 +9743,6 @@
expect(expression.operand, isNotNull);
}
- void test_parseVariableDeclarationListAfterMetadata_const_noType() {
- VariableDeclarationList declarationList = ParserTestCase.parse(
- "parseVariableDeclarationListAfterMetadata",
- <Object>[emptyCommentAndMetadata()],
- "const a");
- expect(declarationList.keyword, isNotNull);
- expect(declarationList.type, isNull);
- expect(declarationList.variables, hasLength(1));
- }
-
- void test_parseVariableDeclarationListAfterMetadata_const_type() {
- VariableDeclarationList declarationList = ParserTestCase.parse(
- "parseVariableDeclarationListAfterMetadata",
- <Object>[emptyCommentAndMetadata()],
- "const A a");
- expect(declarationList.keyword, isNotNull);
- expect(declarationList.type, isNotNull);
- expect(declarationList.variables, hasLength(1));
- }
-
- void test_parseVariableDeclarationListAfterMetadata_final_noType() {
- VariableDeclarationList declarationList = ParserTestCase.parse(
- "parseVariableDeclarationListAfterMetadata",
- <Object>[emptyCommentAndMetadata()],
- "final a");
- expect(declarationList.keyword, isNotNull);
- expect(declarationList.type, isNull);
- expect(declarationList.variables, hasLength(1));
- }
-
- void test_parseVariableDeclarationListAfterMetadata_final_type() {
- VariableDeclarationList declarationList = ParserTestCase.parse(
- "parseVariableDeclarationListAfterMetadata",
- <Object>[emptyCommentAndMetadata()],
- "final A a");
- expect(declarationList.keyword, isNotNull);
- expect(declarationList.type, isNotNull);
- expect(declarationList.variables, hasLength(1));
- }
-
- void test_parseVariableDeclarationListAfterMetadata_type_multiple() {
- VariableDeclarationList declarationList = ParserTestCase.parse(
- "parseVariableDeclarationListAfterMetadata",
- <Object>[emptyCommentAndMetadata()],
- "A a, b, c");
- expect(declarationList.keyword, isNull);
- expect(declarationList.type, isNotNull);
- expect(declarationList.variables, hasLength(3));
- }
-
- void test_parseVariableDeclarationListAfterMetadata_type_single() {
- VariableDeclarationList declarationList = ParserTestCase.parse(
- "parseVariableDeclarationListAfterMetadata",
- <Object>[emptyCommentAndMetadata()],
- "A a");
- expect(declarationList.keyword, isNull);
- expect(declarationList.type, isNotNull);
- expect(declarationList.variables, hasLength(1));
- }
-
- void test_parseVariableDeclarationListAfterMetadata_var_multiple() {
- VariableDeclarationList declarationList = ParserTestCase.parse(
- "parseVariableDeclarationListAfterMetadata",
- <Object>[emptyCommentAndMetadata()],
- "var a, b, c");
- expect(declarationList.keyword, isNotNull);
- expect(declarationList.type, isNull);
- expect(declarationList.variables, hasLength(3));
- }
-
- void test_parseVariableDeclarationListAfterMetadata_var_single() {
- VariableDeclarationList declarationList = ParserTestCase.parse(
- "parseVariableDeclarationListAfterMetadata",
- <Object>[emptyCommentAndMetadata()],
- "var a");
- expect(declarationList.keyword, isNotNull);
- expect(declarationList.type, isNull);
- expect(declarationList.variables, hasLength(1));
- }
-
- void test_parseVariableDeclarationListAfterType_type() {
- TypeName type = new TypeName(new SimpleIdentifier(null), null);
- VariableDeclarationList declarationList = ParserTestCase.parse(
- "parseVariableDeclarationListAfterType",
- <Object>[emptyCommentAndMetadata(), null, type],
- "a");
- expect(declarationList.keyword, isNull);
- expect(declarationList.type, type);
- expect(declarationList.variables, hasLength(1));
- }
-
- void test_parseVariableDeclarationListAfterType_var() {
- Token keyword = TokenFactory.tokenFromKeyword(Keyword.VAR);
- VariableDeclarationList declarationList = ParserTestCase.parse(
- "parseVariableDeclarationListAfterType",
- <Object>[emptyCommentAndMetadata(), keyword, null],
- "a, b, c");
- expect(declarationList.keyword, keyword);
- expect(declarationList.type, isNull);
- expect(declarationList.variables, hasLength(3));
- }
-
- void test_parseVariableDeclarationStatementAfterMetadata_multiple() {
- VariableDeclarationStatement statement = ParserTestCase.parse(
- "parseVariableDeclarationStatementAfterMetadata",
- <Object>[emptyCommentAndMetadata()],
- "var x, y, z;");
- expect(statement.semicolon, isNotNull);
- VariableDeclarationList variableList = statement.variables;
- expect(variableList, isNotNull);
- expect(variableList.variables, hasLength(3));
- }
-
- void test_parseVariableDeclarationStatementAfterMetadata_single() {
- VariableDeclarationStatement statement = ParserTestCase.parse(
- "parseVariableDeclarationStatementAfterMetadata",
- <Object>[emptyCommentAndMetadata()],
- "var x;");
- expect(statement.semicolon, isNotNull);
- VariableDeclarationList variableList = statement.variables;
- expect(variableList, isNotNull);
- expect(variableList.variables, hasLength(1));
- }
-
void test_parseVariableDeclaration_equals() {
VariableDeclaration declaration =
ParserTestCase.parse4("parseVariableDeclaration", "a = b");
@@ -10755,10 +9759,138 @@
expect(declaration.initializer, isNull);
}
+ void test_parseVariableDeclarationListAfterMetadata_const_noType() {
+ VariableDeclarationList declarationList = ParserTestCase.parse(
+ "parseVariableDeclarationListAfterMetadata", <Object>[
+ emptyCommentAndMetadata()
+ ], "const a");
+ expect(declarationList.keyword, isNotNull);
+ expect(declarationList.type, isNull);
+ expect(declarationList.variables, hasLength(1));
+ }
+
+ void test_parseVariableDeclarationListAfterMetadata_const_type() {
+ VariableDeclarationList declarationList = ParserTestCase.parse(
+ "parseVariableDeclarationListAfterMetadata", <Object>[
+ emptyCommentAndMetadata()
+ ], "const A a");
+ expect(declarationList.keyword, isNotNull);
+ expect(declarationList.type, isNotNull);
+ expect(declarationList.variables, hasLength(1));
+ }
+
+ void test_parseVariableDeclarationListAfterMetadata_final_noType() {
+ VariableDeclarationList declarationList = ParserTestCase.parse(
+ "parseVariableDeclarationListAfterMetadata", <Object>[
+ emptyCommentAndMetadata()
+ ], "final a");
+ expect(declarationList.keyword, isNotNull);
+ expect(declarationList.type, isNull);
+ expect(declarationList.variables, hasLength(1));
+ }
+
+ void test_parseVariableDeclarationListAfterMetadata_final_type() {
+ VariableDeclarationList declarationList = ParserTestCase.parse(
+ "parseVariableDeclarationListAfterMetadata", <Object>[
+ emptyCommentAndMetadata()
+ ], "final A a");
+ expect(declarationList.keyword, isNotNull);
+ expect(declarationList.type, isNotNull);
+ expect(declarationList.variables, hasLength(1));
+ }
+
+ void test_parseVariableDeclarationListAfterMetadata_type_multiple() {
+ VariableDeclarationList declarationList = ParserTestCase.parse(
+ "parseVariableDeclarationListAfterMetadata", <Object>[
+ emptyCommentAndMetadata()
+ ], "A a, b, c");
+ expect(declarationList.keyword, isNull);
+ expect(declarationList.type, isNotNull);
+ expect(declarationList.variables, hasLength(3));
+ }
+
+ void test_parseVariableDeclarationListAfterMetadata_type_single() {
+ VariableDeclarationList declarationList = ParserTestCase.parse(
+ "parseVariableDeclarationListAfterMetadata", <Object>[
+ emptyCommentAndMetadata()
+ ], "A a");
+ expect(declarationList.keyword, isNull);
+ expect(declarationList.type, isNotNull);
+ expect(declarationList.variables, hasLength(1));
+ }
+
+ void test_parseVariableDeclarationListAfterMetadata_var_multiple() {
+ VariableDeclarationList declarationList = ParserTestCase.parse(
+ "parseVariableDeclarationListAfterMetadata", <Object>[
+ emptyCommentAndMetadata()
+ ], "var a, b, c");
+ expect(declarationList.keyword, isNotNull);
+ expect(declarationList.type, isNull);
+ expect(declarationList.variables, hasLength(3));
+ }
+
+ void test_parseVariableDeclarationListAfterMetadata_var_single() {
+ VariableDeclarationList declarationList = ParserTestCase.parse(
+ "parseVariableDeclarationListAfterMetadata", <Object>[
+ emptyCommentAndMetadata()
+ ], "var a");
+ expect(declarationList.keyword, isNotNull);
+ expect(declarationList.type, isNull);
+ expect(declarationList.variables, hasLength(1));
+ }
+
+ void test_parseVariableDeclarationListAfterType_type() {
+ TypeName type = new TypeName(new SimpleIdentifier(null), null);
+ VariableDeclarationList declarationList = ParserTestCase.parse(
+ "parseVariableDeclarationListAfterType", <Object>[
+ emptyCommentAndMetadata(),
+ null,
+ type
+ ], "a");
+ expect(declarationList.keyword, isNull);
+ expect(declarationList.type, type);
+ expect(declarationList.variables, hasLength(1));
+ }
+
+ void test_parseVariableDeclarationListAfterType_var() {
+ Token keyword = TokenFactory.tokenFromKeyword(Keyword.VAR);
+ VariableDeclarationList declarationList = ParserTestCase.parse(
+ "parseVariableDeclarationListAfterType", <Object>[
+ emptyCommentAndMetadata(),
+ keyword,
+ null
+ ], "a, b, c");
+ expect(declarationList.keyword, keyword);
+ expect(declarationList.type, isNull);
+ expect(declarationList.variables, hasLength(3));
+ }
+
+ void test_parseVariableDeclarationStatementAfterMetadata_multiple() {
+ VariableDeclarationStatement statement = ParserTestCase.parse(
+ "parseVariableDeclarationStatementAfterMetadata", <Object>[
+ emptyCommentAndMetadata()
+ ], "var x, y, z;");
+ expect(statement.semicolon, isNotNull);
+ VariableDeclarationList variableList = statement.variables;
+ expect(variableList, isNotNull);
+ expect(variableList.variables, hasLength(3));
+ }
+
+ void test_parseVariableDeclarationStatementAfterMetadata_single() {
+ VariableDeclarationStatement statement = ParserTestCase.parse(
+ "parseVariableDeclarationStatementAfterMetadata", <Object>[
+ emptyCommentAndMetadata()
+ ], "var x;");
+ expect(statement.semicolon, isNotNull);
+ VariableDeclarationList variableList = statement.variables;
+ expect(variableList, isNotNull);
+ expect(variableList.variables, hasLength(1));
+ }
+
void test_parseWhileStatement() {
WhileStatement statement =
ParserTestCase.parse4("parseWhileStatement", "while (x) {}");
- expect(statement.keyword, isNotNull);
+ expect(statement.whileKeyword, isNotNull);
expect(statement.leftParenthesis, isNotNull);
expect(statement.condition, isNotNull);
expect(statement.rightParenthesis, isNotNull);
@@ -10917,11 +10049,11 @@
AnalysisErrorListener listener =
new AnalysisErrorListener_SimpleParserTest_computeStringValue();
Parser parser = new Parser(null, listener);
- return invokeParserMethodImpl(
- parser,
- "computeStringValue",
- <Object>[lexeme, first, last],
- null) as String;
+ return invokeParserMethodImpl(parser, "computeStringValue", <Object>[
+ lexeme,
+ first,
+ last
+ ], null) as String;
}
/**
@@ -10935,9 +10067,7 @@
SimpleIdentifier _createSyntheticIdentifier() {
GatheringErrorListener listener = new GatheringErrorListener();
return ParserTestCase.invokeParserMethod2(
- "createSyntheticIdentifier",
- "",
- listener);
+ "createSyntheticIdentifier", "", listener);
}
/**
@@ -10951,9 +10081,7 @@
SimpleStringLiteral _createSyntheticStringLiteral() {
GatheringErrorListener listener = new GatheringErrorListener();
return ParserTestCase.invokeParserMethod2(
- "createSyntheticStringLiteral",
- "",
- listener);
+ "createSyntheticStringLiteral", "", listener);
}
/**
@@ -10967,9 +10095,7 @@
bool _isFunctionDeclaration(String source) {
GatheringErrorListener listener = new GatheringErrorListener();
return ParserTestCase.invokeParserMethod2(
- "isFunctionDeclaration",
- source,
- listener) as bool;
+ "isFunctionDeclaration", source, listener) as bool;
}
/**
@@ -10992,11 +10118,9 @@
// Parse the source.
//
Parser parser = new Parser(null, listener);
- return invokeParserMethodImpl(
- parser,
- "isFunctionExpression",
- <Object>[tokenStream],
- tokenStream) as bool;
+ return invokeParserMethodImpl(parser, "isFunctionExpression", <Object>[
+ tokenStream
+ ], tokenStream) as bool;
}
/**
@@ -11010,9 +10134,7 @@
bool _isInitializedVariableDeclaration(String source) {
GatheringErrorListener listener = new GatheringErrorListener();
return ParserTestCase.invokeParserMethod2(
- "isInitializedVariableDeclaration",
- source,
- listener) as bool;
+ "isInitializedVariableDeclaration", source, listener) as bool;
}
/**
@@ -11026,9 +10148,7 @@
bool _isSwitchMember(String source) {
GatheringErrorListener listener = new GatheringErrorListener();
return ParserTestCase.invokeParserMethod2(
- "isSwitchMember",
- source,
- listener) as bool;
+ "isSwitchMember", source, listener) as bool;
}
/**
@@ -11040,8 +10160,8 @@
* @throws Exception if the source could not be parsed, if the compilation errors in the source do
* not match those that are expected, or if the result would have been `null`
*/
- CompilationUnit _parseDirectives(String source, [List<ErrorCode> errorCodes =
- ErrorCode.EMPTY_LIST]) {
+ CompilationUnit _parseDirectives(String source,
+ [List<ErrorCode> errorCodes = ErrorCode.EMPTY_LIST]) {
GatheringErrorListener listener = new GatheringErrorListener();
Scanner scanner =
new Scanner(null, new CharSequenceReader(source), listener);
@@ -11078,9 +10198,6 @@
//
Parser parser = new Parser(null, listener);
return invokeParserMethodImpl(
- parser,
- methodName,
- <Object>[tokenStream],
- tokenStream) as Token;
+ parser, methodName, <Object>[tokenStream], tokenStream) as Token;
}
}
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index dbebaa5..89f83f1 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -32,7 +32,6 @@
import '../reflective_tests.dart';
import 'test_support.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(AnalysisDeltaTest);
@@ -91,8 +90,8 @@
* @param options the options to be applied to the context
* @return the analysis context that was created
*/
- static AnalysisContextImpl
- contextWithCoreAndOptions(AnalysisOptions options) {
+ static AnalysisContextImpl contextWithCoreAndOptions(
+ AnalysisOptions options) {
AnalysisContextForTests context = new AnalysisContextForTests();
context._internalSetAnalysisOptions(options);
return initContextWithCore(context);
@@ -105,8 +104,8 @@
* @return the analysis context that was created
*/
static AnalysisContextImpl initContextWithCore(AnalysisContextImpl context) {
- DirectoryBasedDartSdk sdk =
- new _AnalysisContextFactory_initContextWithCore(new JavaFile("/fake/sdk"));
+ DirectoryBasedDartSdk sdk = new _AnalysisContextFactory_initContextWithCore(
+ new JavaFile("/fake/sdk"));
SourceFactory sourceFactory =
new SourceFactory([new DartUriResolver(sdk), new FileUriResolver()]);
context.sourceFactory = sourceFactory;
@@ -122,55 +121,48 @@
coreUnit.source = coreSource;
ClassElementImpl proxyClassElement = ElementFactory.classElement2("_Proxy");
coreUnit.types = <ClassElement>[
- provider.boolType.element,
- provider.deprecatedType.element,
- provider.doubleType.element,
- provider.functionType.element,
- provider.intType.element,
- provider.iterableType.element,
- provider.iteratorType.element,
- provider.listType.element,
- provider.mapType.element,
- provider.nullType.element,
- provider.numType.element,
- provider.objectType.element,
- proxyClassElement,
- provider.stackTraceType.element,
- provider.stringType.element,
- provider.symbolType.element,
- provider.typeType.element];
+ provider.boolType.element,
+ provider.deprecatedType.element,
+ provider.doubleType.element,
+ provider.functionType.element,
+ provider.intType.element,
+ provider.iterableType.element,
+ provider.iteratorType.element,
+ provider.listType.element,
+ provider.mapType.element,
+ provider.nullType.element,
+ provider.numType.element,
+ provider.objectType.element,
+ proxyClassElement,
+ provider.stackTraceType.element,
+ provider.stringType.element,
+ provider.symbolType.element,
+ provider.typeType.element
+ ];
coreUnit.functions = <FunctionElement>[
- ElementFactory.functionElement3(
- "identical",
- provider.boolType.element,
- <ClassElement>[provider.objectType.element, provider.objectType.element],
- null),
- ElementFactory.functionElement3(
- "print",
- VoidTypeImpl.instance.element,
- <ClassElement>[provider.objectType.element],
- null)];
- TopLevelVariableElement proxyTopLevelVariableElt =
- ElementFactory.topLevelVariableElement3(
- "proxy",
- true,
- false,
- proxyClassElement.type);
- TopLevelVariableElement deprecatedTopLevelVariableElt =
- ElementFactory.topLevelVariableElement3(
- "deprecated",
- true,
- false,
- provider.deprecatedType);
+ ElementFactory.functionElement3("identical", provider.boolType.element,
+ <ClassElement>[
+ provider.objectType.element,
+ provider.objectType.element
+ ], null),
+ ElementFactory.functionElement3("print", VoidTypeImpl.instance.element,
+ <ClassElement>[provider.objectType.element], null)
+ ];
+ TopLevelVariableElement proxyTopLevelVariableElt = ElementFactory
+ .topLevelVariableElement3("proxy", true, false, proxyClassElement.type);
+ TopLevelVariableElement deprecatedTopLevelVariableElt = ElementFactory
+ .topLevelVariableElement3(
+ "deprecated", true, false, provider.deprecatedType);
coreUnit.accessors = <PropertyAccessorElement>[
- proxyTopLevelVariableElt.getter,
- deprecatedTopLevelVariableElt.getter];
+ proxyTopLevelVariableElt.getter,
+ deprecatedTopLevelVariableElt.getter
+ ];
coreUnit.topLevelVariables = <TopLevelVariableElement>[
- proxyTopLevelVariableElt,
- deprecatedTopLevelVariableElt];
+ proxyTopLevelVariableElt,
+ deprecatedTopLevelVariableElt
+ ];
LibraryElementImpl coreLibrary = new LibraryElementImpl.forNode(
- coreContext,
- AstFactory.libraryIdentifier2(["dart", "core"]));
+ coreContext, AstFactory.libraryIdentifier2(["dart", "core"]));
coreLibrary.definingCompilationUnit = coreUnit;
//
// dart:async
@@ -188,16 +180,17 @@
ConstructorElementImpl futureConstructor =
ElementFactory.constructorElement2(futureElement, "value");
futureConstructor.parameters = <ParameterElement>[
- ElementFactory.positionalParameter2("value", provider.dynamicType)];
+ ElementFactory.positionalParameter2("value", provider.dynamicType)
+ ];
futureConstructor.factory = true;
(futureConstructor.type as FunctionTypeImpl).typeArguments =
futureElement.type.typeArguments;
futureElement.constructors = <ConstructorElement>[futureConstructor];
// Future then(onValue(T value), { Function onError });
List<ParameterElement> parameters = <ParameterElement>[
- ElementFactory.requiredParameter2(
- "value",
- futureElement.typeParameters[0].type)];
+ ElementFactory.requiredParameter2(
+ "value", futureElement.typeParameters[0].type)
+ ];
FunctionTypeAliasElementImpl aliasElement =
new FunctionTypeAliasElementImpl.forNode(null);
aliasElement.synthetic = true;
@@ -208,12 +201,10 @@
aliasElement.shareTypeParameters(futureElement.typeParameters);
aliasType.typeArguments = futureElement.type.typeArguments;
MethodElement thenMethod = ElementFactory.methodElementWithParameters(
- "then",
- futureElement.type.typeArguments,
- futureType,
- [
- ElementFactory.requiredParameter2("onValue", aliasType),
- ElementFactory.namedParameter2("onError", provider.functionType)]);
+ "then", futureElement.type.typeArguments, futureType, [
+ ElementFactory.requiredParameter2("onValue", aliasType),
+ ElementFactory.namedParameter2("onError", provider.functionType)
+ ]);
futureElement.methods = <MethodElement>[thenMethod];
// Completer
ClassElementImpl completerElement =
@@ -224,12 +215,12 @@
completerElement.type.typeArguments;
completerElement.constructors = <ConstructorElement>[completerConstructor];
asyncUnit.types = <ClassElement>[
- completerElement,
- futureElement,
- ElementFactory.classElement2("Stream", ["T"])];
+ completerElement,
+ futureElement,
+ ElementFactory.classElement2("Stream", ["T"])
+ ];
LibraryElementImpl asyncLibrary = new LibraryElementImpl.forNode(
- coreContext,
- AstFactory.libraryIdentifier2(["dart", "async"]));
+ coreContext, AstFactory.libraryIdentifier2(["dart", "async"]));
asyncLibrary.definingCompilationUnit = asyncUnit;
//
// dart:html
@@ -246,56 +237,52 @@
ClassElementImpl contextElement =
ElementFactory.classElement2("CanvasRenderingContext");
InterfaceType contextElementType = contextElement.type;
- ClassElementImpl context2dElement =
- ElementFactory.classElement("CanvasRenderingContext2D", contextElementType);
+ ClassElementImpl context2dElement = ElementFactory.classElement(
+ "CanvasRenderingContext2D", contextElementType);
canvasElement.methods = <MethodElement>[
- ElementFactory.methodElement(
- "getContext",
- contextElementType,
- [provider.stringType])];
+ ElementFactory.methodElement(
+ "getContext", contextElementType, [provider.stringType])
+ ];
canvasElement.accessors = <PropertyAccessorElement>[
- ElementFactory.getterElement("context2D", false, context2dElement.type)];
- canvasElement.fields = canvasElement.accessors.map(
- (PropertyAccessorElement accessor) => accessor.variable).toList();
+ ElementFactory.getterElement("context2D", false, context2dElement.type)
+ ];
+ canvasElement.fields = canvasElement.accessors
+ .map((PropertyAccessorElement accessor) => accessor.variable)
+ .toList();
ClassElementImpl documentElement =
ElementFactory.classElement("Document", elementType);
ClassElementImpl htmlDocumentElement =
ElementFactory.classElement("HtmlDocument", documentElement.type);
htmlDocumentElement.methods = <MethodElement>[
- ElementFactory.methodElement(
- "query",
- elementType,
- <DartType>[provider.stringType])];
+ ElementFactory.methodElement(
+ "query", elementType, <DartType>[provider.stringType])
+ ];
htmlUnit.types = <ClassElement>[
- ElementFactory.classElement("AnchorElement", elementType),
- ElementFactory.classElement("BodyElement", elementType),
- ElementFactory.classElement("ButtonElement", elementType),
- canvasElement,
- contextElement,
- context2dElement,
- ElementFactory.classElement("DivElement", elementType),
- documentElement,
- elementElement,
- htmlDocumentElement,
- ElementFactory.classElement("InputElement", elementType),
- ElementFactory.classElement("SelectElement", elementType)];
+ ElementFactory.classElement("AnchorElement", elementType),
+ ElementFactory.classElement("BodyElement", elementType),
+ ElementFactory.classElement("ButtonElement", elementType),
+ canvasElement,
+ contextElement,
+ context2dElement,
+ ElementFactory.classElement("DivElement", elementType),
+ documentElement,
+ elementElement,
+ htmlDocumentElement,
+ ElementFactory.classElement("InputElement", elementType),
+ ElementFactory.classElement("SelectElement", elementType)
+ ];
htmlUnit.functions = <FunctionElement>[
- ElementFactory.functionElement3(
- "query",
- elementElement,
- <ClassElement>[provider.stringType.element],
- ClassElementImpl.EMPTY_ARRAY)];
- TopLevelVariableElementImpl document =
- ElementFactory.topLevelVariableElement3(
- "document",
- false,
- true,
- htmlDocumentElement.type);
+ ElementFactory.functionElement3("query", elementElement, <ClassElement>[
+ provider.stringType.element
+ ], ClassElementImpl.EMPTY_ARRAY)
+ ];
+ TopLevelVariableElementImpl document = ElementFactory
+ .topLevelVariableElement3(
+ "document", false, true, htmlDocumentElement.type);
htmlUnit.topLevelVariables = <TopLevelVariableElement>[document];
htmlUnit.accessors = <PropertyAccessorElement>[document.getter];
LibraryElementImpl htmlLibrary = new LibraryElementImpl.forNode(
- coreContext,
- AstFactory.libraryIdentifier2(["dart", "dom", "html"]));
+ coreContext, AstFactory.libraryIdentifier2(["dart", "dom", "html"]));
htmlLibrary.definingCompilationUnit = htmlUnit;
//
// dart:math
@@ -305,22 +292,14 @@
Source mathSource = sourceFactory.forUri(_DART_MATH);
coreContext.setContents(mathSource, "");
mathUnit.source = mathSource;
- FunctionElement cosElement = ElementFactory.functionElement3(
- "cos",
- provider.doubleType.element,
- <ClassElement>[provider.numType.element],
- ClassElementImpl.EMPTY_ARRAY);
- TopLevelVariableElement ln10Element =
- ElementFactory.topLevelVariableElement3(
- "LN10",
- true,
- false,
- provider.doubleType);
+ FunctionElement cosElement = ElementFactory.functionElement3("cos",
+ provider.doubleType.element, <ClassElement>[
+ provider.numType.element
+ ], ClassElementImpl.EMPTY_ARRAY);
+ TopLevelVariableElement ln10Element = ElementFactory
+ .topLevelVariableElement3("LN10", true, false, provider.doubleType);
TopLevelVariableElement piElement = ElementFactory.topLevelVariableElement3(
- "PI",
- true,
- false,
- provider.doubleType);
+ "PI", true, false, provider.doubleType);
ClassElementImpl randomElement = ElementFactory.classElement2("Random");
randomElement.abstract = true;
ConstructorElementImpl randomConstructor =
@@ -331,25 +310,26 @@
seedParam.type = provider.intType;
randomConstructor.parameters = <ParameterElement>[seedParam];
randomElement.constructors = <ConstructorElement>[randomConstructor];
- FunctionElement sinElement = ElementFactory.functionElement3(
- "sin",
- provider.doubleType.element,
- <ClassElement>[provider.numType.element],
- ClassElementImpl.EMPTY_ARRAY);
- FunctionElement sqrtElement = ElementFactory.functionElement3(
- "sqrt",
- provider.doubleType.element,
- <ClassElement>[provider.numType.element],
- ClassElementImpl.EMPTY_ARRAY);
- mathUnit.accessors =
- <PropertyAccessorElement>[ln10Element.getter, piElement.getter];
+ FunctionElement sinElement = ElementFactory.functionElement3("sin",
+ provider.doubleType.element, <ClassElement>[
+ provider.numType.element
+ ], ClassElementImpl.EMPTY_ARRAY);
+ FunctionElement sqrtElement = ElementFactory.functionElement3("sqrt",
+ provider.doubleType.element, <ClassElement>[
+ provider.numType.element
+ ], ClassElementImpl.EMPTY_ARRAY);
+ mathUnit.accessors = <PropertyAccessorElement>[
+ ln10Element.getter,
+ piElement.getter
+ ];
mathUnit.functions = <FunctionElement>[cosElement, sinElement, sqrtElement];
- mathUnit.topLevelVariables =
- <TopLevelVariableElement>[ln10Element, piElement];
+ mathUnit.topLevelVariables = <TopLevelVariableElement>[
+ ln10Element,
+ piElement
+ ];
mathUnit.types = <ClassElement>[randomElement];
LibraryElementImpl mathLibrary = new LibraryElementImpl.forNode(
- coreContext,
- AstFactory.libraryIdentifier2(["dart", "math"]));
+ coreContext, AstFactory.libraryIdentifier2(["dart", "math"]));
mathLibrary.definingCompilationUnit = mathUnit;
//
// Set empty sources for the rest of the libraries.
@@ -380,8 +360,8 @@
@override
void set analysisOptions(AnalysisOptions options) {
AnalysisOptions currentOptions = analysisOptions;
- bool needsRecompute =
- currentOptions.analyzeFunctionBodies != options.analyzeFunctionBodies ||
+ bool needsRecompute = currentOptions.analyzeFunctionBodiesPredicate !=
+ options.analyzeFunctionBodiesPredicate ||
currentOptions.generateSdkErrors != options.generateSdkErrors ||
currentOptions.dart2jsHint != options.dart2jsHint ||
(currentOptions.hint && !options.hint) ||
@@ -555,8 +535,8 @@
changeSet.changedRange(new TestSource(), "", 0, 0, 0);
changeSet.deletedSource(new TestSource());
changeSet.removedSource(new TestSource());
- changeSet.removedContainer(
- new SourceContainer_ChangeSetTest_test_toString());
+ changeSet
+ .removedContainer(new SourceContainer_ChangeSetTest_test_toString());
expect(changeSet.toString(), isNotNull);
}
}
@@ -745,11 +725,10 @@
}
var v = const A('foo');''');
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
verify([source]);
}
@@ -770,9 +749,9 @@
}
var v = const C(const A());''');
resolve(source);
- assertErrors(
- source,
- [CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+ ]);
verify([source]);
}
@@ -784,11 +763,10 @@
}
var v = const A('foo');''');
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
- StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
+ ]);
verify([source]);
}
@@ -800,11 +778,10 @@
}
var v = const A('foo');''');
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
- StaticWarningCode.UNDEFINED_CLASS]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.UNDEFINED_CLASS
+ ]);
verify([source]);
}
@@ -823,9 +800,9 @@
}
var v = const C(const A());''');
resolve(source);
- assertErrors(
- source,
- [CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+ ]);
verify([source]);
}
@@ -837,9 +814,9 @@
}
var x = const A(const <num>[1, 2, 3]);''');
resolve(source);
- assertErrors(
- source,
- [CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+ ]);
verify([source]);
}
@@ -852,9 +829,9 @@
}
var x = const A(const <num, int>{1: 2});''');
resolve(source);
- assertErrors(
- source,
- [CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+ ]);
verify([source]);
}
@@ -867,9 +844,9 @@
}
var x = const A(const <int, num>{1: 2});''');
resolve(source);
- assertErrors(
- source,
- [CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+ ]);
verify([source]);
}
@@ -881,11 +858,10 @@
}
var v = const A();''');
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
- StaticTypeWarningCode.INVALID_ASSIGNMENT]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticTypeWarningCode.INVALID_ASSIGNMENT
+ ]);
verify([source]);
}
@@ -901,11 +877,10 @@
int foo(String x) => 1;
var v = const A(foo);''');
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
verify([source]);
}
@@ -916,11 +891,10 @@
const A() : x = '';
}''');
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE,
- StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE,
+ StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE
+ ]);
verify([source]);
}
@@ -932,9 +906,9 @@
}
var v = const A('foo');''');
resolve(source);
- assertErrors(
- source,
- [CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH
+ ]);
verify([source]);
}
@@ -946,11 +920,10 @@
}
var v = const A('foo');''');
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
- StaticWarningCode.UNDEFINED_CLASS]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
+ StaticWarningCode.UNDEFINED_CLASS
+ ]);
verify([source]);
}
@@ -983,33 +956,30 @@
void test_listElementTypeNotAssignable() {
Source source = addSource("var v = const <String> [42];");
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,
- StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,
+ StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+ ]);
verify([source]);
}
void test_mapKeyTypeNotAssignable() {
Source source = addSource("var v = const <String, int > {1 : 2};");
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
- StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
+ StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE
+ ]);
verify([source]);
}
void test_mapValueTypeNotAssignable() {
Source source = addSource("var v = const <String, String> {'a' : 2};");
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
- StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
+ StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE
+ ]);
verify([source]);
}
@@ -1056,11 +1026,10 @@
}
var v = const A('foo');''');
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
verify([source]);
}
@@ -1071,11 +1040,10 @@
}
var v = const A<int>('foo');''');
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ ]);
verify([source]);
}
@@ -1086,11 +1054,10 @@
}
var v = const A('foo');''');
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
- StaticWarningCode.UNDEFINED_CLASS]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+ StaticWarningCode.UNDEFINED_CLASS
+ ]);
verify([source]);
}
@@ -1102,9 +1069,9 @@
}
var v = const A.a1(0);''');
resolve(source);
- assertErrors(
- source,
- [CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+ ]);
verify([source]);
}
@@ -1127,22 +1094,20 @@
void test_topLevelVarNotAssignable() {
Source source = addSource("const int x = 'foo';");
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH,
- StaticTypeWarningCode.INVALID_ASSIGNMENT]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH,
+ StaticTypeWarningCode.INVALID_ASSIGNMENT
+ ]);
verify([source]);
}
void test_topLevelVarNotAssignable_undefined() {
Source source = addSource("const Unresolved x = 'foo';");
resolve(source);
- assertErrors(
- source,
- [
- CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH,
- StaticWarningCode.UNDEFINED_CLASS]);
+ assertErrors(source, [
+ CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH,
+ StaticWarningCode.UNDEFINED_CLASS
+ ]);
verify([source]);
}
}
@@ -1193,8 +1158,8 @@
fail("Not yet tested");
// Need to set up the imported library so that the identifier can be
// resolved.
- ImportDirective directive =
- AstFactory.importDirective3(null, null, [AstFactory.showCombinator2(["A"])]);
+ ImportDirective directive = AstFactory.importDirective3(
+ null, null, [AstFactory.showCombinator2(["A"])]);
_resolveNode(directive);
_listener.assertNoErrors();
}
@@ -1205,11 +1170,12 @@
// resolved.
String prefixName = "p";
_definingLibrary.imports = <ImportElement>[
- ElementFactory.importFor(null, ElementFactory.prefix(prefixName))];
- ImportDirective directive = AstFactory.importDirective3(
- null,
- prefixName,
- [AstFactory.showCombinator2(["A"]), AstFactory.hideCombinator2(["B"])]);
+ ElementFactory.importFor(null, ElementFactory.prefix(prefixName))
+ ];
+ ImportDirective directive = AstFactory.importDirective3(null, prefixName, [
+ AstFactory.showCombinator2(["A"]),
+ AstFactory.hideCombinator2(["B"])
+ ]);
_resolveNode(directive);
_listener.assertNoErrors();
}
@@ -1266,21 +1232,16 @@
SimpleIdentifier leftHandSide = AstFactory.identifier3("a");
leftHandSide.staticType = intType;
AssignmentExpression assignment = AstFactory.assignmentExpression(
- leftHandSide,
- TokenType.PLUS_EQ,
- AstFactory.integer(1));
+ leftHandSide, TokenType.PLUS_EQ, AstFactory.integer(1));
_resolveNode(assignment);
expect(
- assignment.staticElement,
- same(getMethod(_typeProvider.numType, "+")));
+ assignment.staticElement, same(getMethod(_typeProvider.numType, "+")));
_listener.assertNoErrors();
}
void test_visitAssignmentExpression_simple() {
AssignmentExpression expression = AstFactory.assignmentExpression(
- AstFactory.identifier3("x"),
- TokenType.EQ,
- AstFactory.integer(0));
+ AstFactory.identifier3("x"), TokenType.EQ, AstFactory.integer(0));
_resolveNode(expression);
expect(expression.staticElement, isNull);
_listener.assertNoErrors();
@@ -1294,15 +1255,12 @@
SimpleIdentifier left = AstFactory.identifier3("i");
left.staticType = stringType;
BinaryExpression expression = AstFactory.binaryExpression(
- left,
- TokenType.BANG_EQ,
- AstFactory.identifier3("j"));
+ left, TokenType.BANG_EQ, AstFactory.identifier3("j"));
_resolveNode(expression);
var stringElement = stringType.element;
expect(expression.staticElement, isNotNull);
- expect(
- expression.staticElement,
- stringElement.lookUpMethod(TokenType.EQ_EQ.lexeme, stringElement.library));
+ expect(expression.staticElement, stringElement.lookUpMethod(
+ TokenType.EQ_EQ.lexeme, stringElement.library));
expect(expression.propagatedElement, isNull);
_listener.assertNoErrors();
}
@@ -1315,14 +1273,11 @@
SimpleIdentifier left = AstFactory.identifier3("i");
left.staticType = stringType;
BinaryExpression expression = AstFactory.binaryExpression(
- left,
- TokenType.EQ_EQ,
- AstFactory.identifier3("j"));
+ left, TokenType.EQ_EQ, AstFactory.identifier3("j"));
_resolveNode(expression);
var stringElement = stringType.element;
- expect(
- expression.staticElement,
- stringElement.lookUpMethod(TokenType.EQ_EQ.lexeme, stringElement.library));
+ expect(expression.staticElement, stringElement.lookUpMethod(
+ TokenType.EQ_EQ.lexeme, stringElement.library));
expect(expression.propagatedElement, isNull);
_listener.assertNoErrors();
}
@@ -1334,8 +1289,8 @@
InterfaceType numType = _typeProvider.numType;
SimpleIdentifier left = AstFactory.identifier3("i");
left.staticType = numType;
- BinaryExpression expression =
- AstFactory.binaryExpression(left, TokenType.PLUS, AstFactory.identifier3("j"));
+ BinaryExpression expression = AstFactory.binaryExpression(
+ left, TokenType.PLUS, AstFactory.identifier3("j"));
_resolveNode(expression);
expect(expression.staticElement, getMethod(numType, "+"));
expect(expression.propagatedElement, isNull);
@@ -1349,8 +1304,8 @@
InterfaceType numType = _typeProvider.numType;
SimpleIdentifier left = AstFactory.identifier3("i");
left.propagatedType = numType;
- BinaryExpression expression =
- AstFactory.binaryExpression(left, TokenType.PLUS, AstFactory.identifier3("j"));
+ BinaryExpression expression = AstFactory.binaryExpression(
+ left, TokenType.PLUS, AstFactory.identifier3("j"));
_resolveNode(expression);
expect(expression.staticElement, isNull);
expect(expression.propagatedElement, getMethod(numType, "+"));
@@ -1368,8 +1323,7 @@
Expression condition = AstFactory.booleanLiteral(true);
WhileStatement whileStatement =
AstFactory.whileStatement(condition, breakStatement);
- expect(
- _resolveBreak(breakStatement, labelElement, whileStatement),
+ expect(_resolveBreak(breakStatement, labelElement, whileStatement),
same(labelElement));
expect(breakStatement.target, same(whileStatement));
_listener.assertNoErrors();
@@ -1387,8 +1341,8 @@
ConstructorElement constructor =
ElementFactory.constructorElement2(classA, constructorName);
classA.constructors = <ConstructorElement>[constructor];
- ConstructorName name =
- AstFactory.constructorName(AstFactory.typeName(classA), constructorName);
+ ConstructorName name = AstFactory.constructorName(
+ AstFactory.typeName(classA), constructorName);
_resolveNode(name);
expect(name.staticElement, same(constructor));
_listener.assertNoErrors();
@@ -1400,8 +1354,8 @@
ConstructorElement constructor =
ElementFactory.constructorElement2(classA, constructorName);
classA.constructors = <ConstructorElement>[constructor];
- ConstructorName name =
- AstFactory.constructorName(AstFactory.typeName(classA), constructorName);
+ ConstructorName name = AstFactory.constructorName(
+ AstFactory.typeName(classA), constructorName);
_resolveNode(name);
expect(name.staticElement, same(constructor));
_listener.assertNoErrors();
@@ -1418,8 +1372,7 @@
Expression condition = AstFactory.booleanLiteral(true);
WhileStatement whileStatement =
AstFactory.whileStatement(condition, continueStatement);
- expect(
- _resolveContinue(continueStatement, labelElement, whileStatement),
+ expect(_resolveContinue(continueStatement, labelElement, whileStatement),
same(labelElement));
expect(continueStatement.target, same(whileStatement));
_listener.assertNoErrors();
@@ -1433,8 +1386,8 @@
void test_visitExportDirective_noCombinators() {
ExportDirective directive = AstFactory.exportDirective2(null);
- directive.element = ElementFactory.exportFor(
- ElementFactory.library(_definingLibrary.context, "lib"));
+ directive.element = ElementFactory
+ .exportFor(ElementFactory.library(_definingLibrary.context, "lib"));
_resolveNode(directive);
_listener.assertNoErrors();
}
@@ -1460,8 +1413,7 @@
void test_visitImportDirective_noCombinators_noPrefix() {
ImportDirective directive = AstFactory.importDirective3(null, null);
directive.element = ElementFactory.importFor(
- ElementFactory.library(_definingLibrary.context, "lib"),
- null);
+ ElementFactory.library(_definingLibrary.context, "lib"), null);
_resolveNode(directive);
_listener.assertNoErrors();
}
@@ -1492,8 +1444,12 @@
ElementFactory.topLevelVariableElement2("C");
CompilationUnitElementImpl unit =
library.definingCompilationUnit as CompilationUnitElementImpl;
- unit.accessors =
- <PropertyAccessorElement>[varA.getter, varA.setter, varB.getter, varC.setter];
+ unit.accessors = <PropertyAccessorElement>[
+ varA.getter,
+ varA.setter,
+ varB.getter,
+ varC.setter
+ ];
unit.topLevelVariables = <TopLevelVariableElement>[varA, varB, varC];
directive.element = ElementFactory.importFor(library, null);
_resolveNode(directive);
@@ -1528,9 +1484,7 @@
IndexExpression expression =
AstFactory.indexExpression(array, AstFactory.identifier3("i"));
AstFactory.assignmentExpression(
- expression,
- TokenType.EQ,
- AstFactory.integer(0));
+ expression, TokenType.EQ, AstFactory.integer(0));
expect(_resolveIndexExpression(expression), same(setter));
_listener.assertNoErrors();
}
@@ -1541,8 +1495,8 @@
ConstructorElement constructor =
ElementFactory.constructorElement2(classA, constructorName);
classA.constructors = <ConstructorElement>[constructor];
- ConstructorName name =
- AstFactory.constructorName(AstFactory.typeName(classA), constructorName);
+ ConstructorName name = AstFactory.constructorName(
+ AstFactory.typeName(classA), constructorName);
name.staticElement = constructor;
InstanceCreationExpression creation =
AstFactory.instanceCreationExpression(Keyword.NEW, name);
@@ -1557,8 +1511,8 @@
ConstructorElement constructor =
ElementFactory.constructorElement2(classA, constructorName);
classA.constructors = <ConstructorElement>[constructor];
- ConstructorName name =
- AstFactory.constructorName(AstFactory.typeName(classA), constructorName);
+ ConstructorName name = AstFactory.constructorName(
+ AstFactory.typeName(classA), constructorName);
name.staticElement = constructor;
InstanceCreationExpression creation =
AstFactory.instanceCreationExpression(Keyword.NEW, name);
@@ -1576,19 +1530,17 @@
ParameterElement parameter = ElementFactory.namedParameter(parameterName);
constructor.parameters = <ParameterElement>[parameter];
classA.constructors = <ConstructorElement>[constructor];
- ConstructorName name =
- AstFactory.constructorName(AstFactory.typeName(classA), constructorName);
+ ConstructorName name = AstFactory.constructorName(
+ AstFactory.typeName(classA), constructorName);
name.staticElement = constructor;
InstanceCreationExpression creation = AstFactory.instanceCreationExpression(
- Keyword.NEW,
- name,
- [AstFactory.namedExpression2(parameterName, AstFactory.integer(0))]);
+ Keyword.NEW, name, [
+ AstFactory.namedExpression2(parameterName, AstFactory.integer(0))
+ ]);
_resolveNode(creation);
expect(creation.staticElement, same(constructor));
- expect(
- (creation.argumentList.arguments[0] as
- NamedExpression).name.label.staticElement,
- same(parameter));
+ expect((creation.argumentList.arguments[
+ 0] as NamedExpression).name.label.staticElement, same(parameter));
_listener.assertNoErrors();
}
@@ -1599,8 +1551,7 @@
String methodName = "abs";
MethodInvocation invocation = AstFactory.methodInvocation(left, methodName);
_resolveNode(invocation);
- expect(
- invocation.methodName.staticElement,
+ expect(invocation.methodName.staticElement,
same(getMethod(numType, methodName)));
_listener.assertNoErrors();
}
@@ -1615,16 +1566,12 @@
classA.methods = <MethodElement>[method];
SimpleIdentifier left = AstFactory.identifier3("i");
left.staticType = classA.type;
- MethodInvocation invocation = AstFactory.methodInvocation(
- left,
- methodName,
+ MethodInvocation invocation = AstFactory.methodInvocation(left, methodName,
[AstFactory.namedExpression2(parameterName, AstFactory.integer(0))]);
_resolveNode(invocation);
expect(invocation.methodName.staticElement, same(method));
- expect(
- (invocation.argumentList.arguments[0] as
- NamedExpression).name.label.staticElement,
- same(parameter));
+ expect((invocation.argumentList.arguments[
+ 0] as NamedExpression).name.label.staticElement, same(parameter));
_listener.assertNoErrors();
}
@@ -1709,9 +1656,7 @@
PrefixedIdentifier identifier =
AstFactory.identifier(target, AstFactory.identifier3(propName));
AstFactory.assignmentExpression(
- identifier,
- TokenType.EQ,
- AstFactory.nullLiteral());
+ identifier, TokenType.EQ, AstFactory.nullLiteral());
// resolve
_resolveNode(identifier);
expect(identifier.staticElement, same(method));
@@ -1735,9 +1680,7 @@
PrefixedIdentifier identifier =
AstFactory.identifier(target, AstFactory.identifier3(propName));
AstFactory.assignmentExpression(
- identifier,
- TokenType.EQ,
- AstFactory.nullLiteral());
+ identifier, TokenType.EQ, AstFactory.nullLiteral());
// resolve
_resolveNode(identifier);
expect(identifier.staticElement, same(setter));
@@ -1787,13 +1730,8 @@
SuperExpression target = AstFactory.superExpression();
target.staticType = ElementFactory.classElement("B", classA.type).type;
PropertyAccess access = AstFactory.propertyAccess2(target, getterName);
- AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(),
+ AstFactory.methodDeclaration2(null, null, null, null,
+ AstFactory.identifier3("m"), AstFactory.formalParameterList(),
AstFactory.expressionFunctionBody(access));
_resolveNode(access);
expect(access.propertyName.staticElement, same(getter));
@@ -1810,9 +1748,7 @@
target.staticType = classA.type;
PropertyAccess access = AstFactory.propertyAccess2(target, setterName);
AstFactory.assignmentExpression(
- access,
- TokenType.EQ,
- AstFactory.integer(0));
+ access, TokenType.EQ, AstFactory.integer(0));
_resolveNode(access);
expect(access.propertyName.staticElement, same(setter));
_listener.assertNoErrors();
@@ -1854,10 +1790,8 @@
AstFactory.assignmentExpression(node, TokenType.EQ, AstFactory.integer(0));
_resolveInClass(node, classA);
Element element = node.staticElement;
- EngineTestCase.assertInstanceOf(
- (obj) => obj is PropertyAccessorElement,
- PropertyAccessorElement,
- element);
+ EngineTestCase.assertInstanceOf((obj) => obj is PropertyAccessorElement,
+ PropertyAccessorElement, element);
expect((element as PropertyAccessorElement).isSetter, isTrue);
_listener.assertNoErrors();
}
@@ -1892,15 +1826,14 @@
ConstructorElementImpl subConstructor =
ElementFactory.constructorElement2(subclass, null);
subclass.constructors = <ConstructorElement>[subConstructor];
- SuperConstructorInvocation invocation =
- AstFactory.superConstructorInvocation(
- [AstFactory.namedExpression2(parameterName, AstFactory.integer(0))]);
+ SuperConstructorInvocation invocation = AstFactory
+ .superConstructorInvocation([
+ AstFactory.namedExpression2(parameterName, AstFactory.integer(0))
+ ]);
_resolveInClass(invocation, subclass);
expect(invocation.staticElement, superConstructor);
- expect(
- (invocation.argumentList.arguments[0] as
- NamedExpression).name.label.staticElement,
- same(parameter));
+ expect((invocation.argumentList.arguments[
+ 0] as NamedExpression).name.label.staticElement, same(parameter));
_listener.assertNoErrors();
}
@@ -1911,8 +1844,8 @@
*/
ElementResolver _createResolver() {
AnalysisContextImpl context = new AnalysisContextImpl();
- SourceFactory sourceFactory =
- new SourceFactory([new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
+ SourceFactory sourceFactory = new SourceFactory(
+ [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
context.sourceFactory = sourceFactory;
FileBasedSource source =
new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
@@ -1928,8 +1861,7 @@
return _visitor.elementResolver_J2DAccessor as ElementResolver;
} catch (exception) {
throw new IllegalArgumentException(
- "Could not create resolver",
- exception);
+ "Could not create resolver", exception);
}
}
@@ -1989,8 +1921,7 @@
try {
_visitor.enclosingClass = enclosingClass;
EnclosedScope innerScope = new ClassScope(
- new TypeParameterScope(outerScope, enclosingClass),
- enclosingClass);
+ new TypeParameterScope(outerScope, enclosingClass), enclosingClass);
_visitor.nameScope_J2DAccessor = innerScope;
node.accept(_resolver);
} finally {
@@ -2054,8 +1985,8 @@
* @param labelElement the label element to be defined in the statement's label scope
* @return the element to which the statement's label was resolved
*/
- void _resolveStatement(Statement statement, LabelElementImpl labelElement,
- AstNode labelTarget) {
+ void _resolveStatement(
+ Statement statement, LabelElementImpl labelElement, AstNode labelTarget) {
try {
LabelScope outerScope = _visitor.labelScope_J2DAccessor as LabelScope;
try {
@@ -2063,8 +1994,8 @@
if (labelElement == null) {
innerScope = outerScope;
} else {
- innerScope =
- new LabelScope(outerScope, labelElement.name, labelTarget, labelElement);
+ innerScope = new LabelScope(
+ outerScope, labelElement.name, labelTarget, labelElement);
}
_visitor.labelScope_J2DAccessor = innerScope;
statement.accept(_resolver);
@@ -2261,8 +2192,7 @@
void test_argumentTypeNotAssignable_message() {
// The implementation of HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE assumes that
// StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE has the same message.
- expect(
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE.message,
+ expect(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE.message,
HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE.message);
}
@@ -2956,8 +2886,7 @@
class A {}''');
resolve(source);
assertErrors(
- source,
- [HintCode.DUPLICATE_IMPORT, HintCode.DUPLICATE_IMPORT]);
+ source, [HintCode.DUPLICATE_IMPORT, HintCode.DUPLICATE_IMPORT]);
verify([source]);
}
@@ -2977,14 +2906,16 @@
}
void test_importDeferredLibraryWithLoadFunction() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
loadLibrary() {}
-f() {}''', r'''
+f() {}''',
+ r'''
library root;
import 'lib1.dart' deferred as lib1;
-main() { lib1.f(); }'''],
- <ErrorCode>[HintCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION]);
+main() { lib1.f(); }'''
+ ], <ErrorCode>[HintCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION]);
}
void test_invalidAssignment_instanceVariable() {
@@ -3018,8 +2949,7 @@
void test_invalidAssignment_message() {
// The implementation of HintCode.INVALID_ASSIGNMENT assumes that
// StaticTypeWarningCode.INVALID_ASSIGNMENT has the same message.
- expect(
- StaticTypeWarningCode.INVALID_ASSIGNMENT.message,
+ expect(StaticTypeWarningCode.INVALID_ASSIGNMENT.message,
HintCode.INVALID_ASSIGNMENT.message);
}
@@ -3180,8 +3110,7 @@
// The implementation of HintCode.UNDEFINED_SETTER assumes that
// UNDEFINED_SETTER in StaticTypeWarningCode and StaticWarningCode are the
// same, this verifies that assumption.
- expect(
- StaticWarningCode.UNDEFINED_GETTER.message,
+ expect(StaticWarningCode.UNDEFINED_GETTER.message,
StaticTypeWarningCode.UNDEFINED_GETTER.message);
}
@@ -3319,8 +3248,7 @@
// The implementation of HintCode.UNDEFINED_SETTER assumes that
// UNDEFINED_SETTER in StaticTypeWarningCode and StaticWarningCode are the
// same, this verifies that assumption.
- expect(
- StaticWarningCode.UNDEFINED_SETTER.message,
+ expect(StaticWarningCode.UNDEFINED_SETTER.message,
StaticTypeWarningCode.UNDEFINED_SETTER.message);
}
@@ -4445,8 +4373,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [HintCode.USE_OF_VOID_RESULT, HintCode.USE_OF_VOID_RESULT]);
+ source, [HintCode.USE_OF_VOID_RESULT, HintCode.USE_OF_VOID_RESULT]);
verify([source]);
}
}
@@ -4710,8 +4637,7 @@
_assertNoErrors(classA);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_getter_method() {
+ void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_getter_method() {
// class I1 { int m(); }
// class I2 { int get m; }
// class A implements I2, I1 {}
@@ -4730,13 +4656,12 @@
_inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
expect(mapA.size, _numOfMembersInObject);
expect(mapA.get(methodName), isNull);
- _assertErrors(
- classA,
- [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD]);
+ _assertErrors(classA, [
+ StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD
+ ]);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_int_str() {
+ void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_int_str() {
// class I1 { int m(); }
// class I2 { String m(); }
// class A implements I1, I2 {}
@@ -4746,8 +4671,8 @@
ElementFactory.methodElement(methodName, null, [_typeProvider.intType]);
classI1.methods = <MethodElement>[methodM1];
ClassElementImpl classI2 = ElementFactory.classElement2("I2");
- MethodElement methodM2 =
- ElementFactory.methodElement(methodName, null, [_typeProvider.stringType]);
+ MethodElement methodM2 = ElementFactory.methodElement(
+ methodName, null, [_typeProvider.stringType]);
classI2.methods = <MethodElement>[methodM2];
ClassElementImpl classA = ElementFactory.classElement2("A");
classA.interfaces = <InterfaceType>[classI1.type, classI2.type];
@@ -4756,12 +4681,10 @@
expect(mapA.size, _numOfMembersInObject);
expect(mapA.get(methodName), isNull);
_assertErrors(
- classA,
- [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+ classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_method_getter() {
+ void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_method_getter() {
// class I1 { int m(); }
// class I2 { int get m; }
// class A implements I1, I2 {}
@@ -4780,13 +4703,12 @@
_inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
expect(mapA.size, _numOfMembersInObject);
expect(mapA.get(methodName), isNull);
- _assertErrors(
- classA,
- [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD]);
+ _assertErrors(classA, [
+ StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD
+ ]);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_numOfRequiredParams() {
+ void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_numOfRequiredParams() {
// class I1 { dynamic m(int, [int]); }
// class I2 { dynamic m(int, int, int); }
// class A implements I1, I2 {}
@@ -4819,8 +4741,11 @@
new ParameterElementImpl.forNode(AstFactory.identifier3("a5"));
parameter5.type = _typeProvider.intType;
parameter5.parameterKind = ParameterKind.REQUIRED;
- methodM2.parameters =
- <ParameterElement>[parameter3, parameter4, parameter5];
+ methodM2.parameters = <ParameterElement>[
+ parameter3,
+ parameter4,
+ parameter5
+ ];
classI2.methods = <MethodElement>[methodM2];
ClassElementImpl classA = ElementFactory.classElement2("A");
classA.interfaces = <InterfaceType>[classI1.type, classI2.type];
@@ -4829,19 +4754,17 @@
expect(mapA.size, _numOfMembersInObject);
expect(mapA.get(methodName), isNull);
_assertErrors(
- classA,
- [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+ classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_str_int() {
+ void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance_str_int() {
// class I1 { int m(); }
// class I2 { String m(); }
// class A implements I2, I1 {}
ClassElementImpl classI1 = ElementFactory.classElement2("I1");
String methodName = "m";
- MethodElement methodM1 =
- ElementFactory.methodElement(methodName, null, [_typeProvider.stringType]);
+ MethodElement methodM1 = ElementFactory.methodElement(
+ methodName, null, [_typeProvider.stringType]);
classI1.methods = <MethodElement>[methodM1];
ClassElementImpl classI2 = ElementFactory.classElement2("I2");
MethodElement methodM2 =
@@ -4854,8 +4777,7 @@
expect(mapA.size, _numOfMembersInObject);
expect(mapA.get(methodName), isNull);
_assertErrors(
- classA,
- [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+ classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
}
void test_getMapOfMembersInheritedFromInterfaces_method_extends() {
@@ -4944,33 +4866,31 @@
_assertNoErrors(classA);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_getters() {
+ void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_getters() {
// class I1 { int get g; }
// class I2 { num get g; }
// class A implements I1, I2 {}
ClassElementImpl classI1 = ElementFactory.classElement2("I1");
String accessorName = "g";
- PropertyAccessorElement getter1 =
- ElementFactory.getterElement(accessorName, false, _typeProvider.intType);
+ PropertyAccessorElement getter1 = ElementFactory.getterElement(
+ accessorName, false, _typeProvider.intType);
classI1.accessors = <PropertyAccessorElement>[getter1];
ClassElementImpl classI2 = ElementFactory.classElement2("I2");
- PropertyAccessorElement getter2 =
- ElementFactory.getterElement(accessorName, false, _typeProvider.numType);
+ PropertyAccessorElement getter2 = ElementFactory.getterElement(
+ accessorName, false, _typeProvider.numType);
classI2.accessors = <PropertyAccessorElement>[getter2];
ClassElementImpl classA = ElementFactory.classElement2("A");
classA.interfaces = <InterfaceType>[classI1.type, classI2.type];
MemberMap mapA =
_inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
expect(mapA.size, _numOfMembersInObject + 1);
- PropertyAccessorElement syntheticAccessor =
- ElementFactory.getterElement(accessorName, false, _typeProvider.dynamicType);
+ PropertyAccessorElement syntheticAccessor = ElementFactory.getterElement(
+ accessorName, false, _typeProvider.dynamicType);
expect(mapA.get(accessorName).type, syntheticAccessor.type);
_assertNoErrors(classA);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_methods() {
+ void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_methods() {
// class I1 { dynamic m(int); }
// class I2 { dynamic m(num); }
// class A implements I1, I2 {}
@@ -4999,41 +4919,37 @@
_inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
expect(mapA.size, _numOfMembersInObject + 1);
MethodElement syntheticMethod = ElementFactory.methodElement(
- methodName,
- _typeProvider.dynamicType,
- [_typeProvider.dynamicType]);
+ methodName, _typeProvider.dynamicType, [_typeProvider.dynamicType]);
expect(mapA.get(methodName).type, syntheticMethod.type);
_assertNoErrors(classA);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_setters() {
+ void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_setters() {
// class I1 { set s(int); }
// class I2 { set s(num); }
// class A implements I1, I2 {}
ClassElementImpl classI1 = ElementFactory.classElement2("I1");
String accessorName = "s";
- PropertyAccessorElement setter1 =
- ElementFactory.setterElement(accessorName, false, _typeProvider.intType);
+ PropertyAccessorElement setter1 = ElementFactory.setterElement(
+ accessorName, false, _typeProvider.intType);
classI1.accessors = <PropertyAccessorElement>[setter1];
ClassElementImpl classI2 = ElementFactory.classElement2("I2");
- PropertyAccessorElement setter2 =
- ElementFactory.setterElement(accessorName, false, _typeProvider.numType);
+ PropertyAccessorElement setter2 = ElementFactory.setterElement(
+ accessorName, false, _typeProvider.numType);
classI2.accessors = <PropertyAccessorElement>[setter2];
ClassElementImpl classA = ElementFactory.classElement2("A");
classA.interfaces = <InterfaceType>[classI1.type, classI2.type];
MemberMap mapA =
_inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
expect(mapA.size, _numOfMembersInObject + 1);
- PropertyAccessorElementImpl syntheticAccessor =
- ElementFactory.setterElement(accessorName, false, _typeProvider.dynamicType);
+ PropertyAccessorElementImpl syntheticAccessor = ElementFactory
+ .setterElement(accessorName, false, _typeProvider.dynamicType);
syntheticAccessor.returnType = _typeProvider.dynamicType;
expect(mapA.get("$accessorName=").type, syntheticAccessor.type);
_assertNoErrors(classA);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_getters() {
+ void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_getters() {
// class A {}
// class B extends A {}
// class C extends B {}
@@ -5058,19 +4974,21 @@
ElementFactory.getterElement(accessorName, false, classC.type);
classI3.accessors = <PropertyAccessorElement>[getter3];
ClassElementImpl classD = ElementFactory.classElement2("D");
- classD.interfaces =
- <InterfaceType>[classI1.type, classI2.type, classI3.type];
+ classD.interfaces = <InterfaceType>[
+ classI1.type,
+ classI2.type,
+ classI3.type
+ ];
MemberMap mapD =
_inheritanceManager.getMapOfMembersInheritedFromInterfaces(classD);
expect(mapD.size, _numOfMembersInObject + 1);
- PropertyAccessorElement syntheticAccessor =
- ElementFactory.getterElement(accessorName, false, _typeProvider.dynamicType);
+ PropertyAccessorElement syntheticAccessor = ElementFactory.getterElement(
+ accessorName, false, _typeProvider.dynamicType);
expect(mapD.get(accessorName).type, syntheticAccessor.type);
_assertNoErrors(classD);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_methods() {
+ void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_methods() {
// class A {}
// class B extends A {}
// class C extends B {}
@@ -5110,21 +5028,21 @@
methodM3.parameters = <ParameterElement>[parameter3];
classI3.methods = <MethodElement>[methodM3];
ClassElementImpl classD = ElementFactory.classElement2("D");
- classD.interfaces =
- <InterfaceType>[classI1.type, classI2.type, classI3.type];
+ classD.interfaces = <InterfaceType>[
+ classI1.type,
+ classI2.type,
+ classI3.type
+ ];
MemberMap mapD =
_inheritanceManager.getMapOfMembersInheritedFromInterfaces(classD);
expect(mapD.size, _numOfMembersInObject + 1);
MethodElement syntheticMethod = ElementFactory.methodElement(
- methodName,
- _typeProvider.dynamicType,
- [_typeProvider.dynamicType]);
+ methodName, _typeProvider.dynamicType, [_typeProvider.dynamicType]);
expect(mapD.get(methodName).type, syntheticMethod.type);
_assertNoErrors(classD);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_setters() {
+ void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_setters() {
// class A {}
// class B extends A {}
// class C extends B {}
@@ -5149,20 +5067,22 @@
ElementFactory.setterElement(accessorName, false, classC.type);
classI3.accessors = <PropertyAccessorElement>[setter3];
ClassElementImpl classD = ElementFactory.classElement2("D");
- classD.interfaces =
- <InterfaceType>[classI1.type, classI2.type, classI3.type];
+ classD.interfaces = <InterfaceType>[
+ classI1.type,
+ classI2.type,
+ classI3.type
+ ];
MemberMap mapD =
_inheritanceManager.getMapOfMembersInheritedFromInterfaces(classD);
expect(mapD.size, _numOfMembersInObject + 1);
- PropertyAccessorElementImpl syntheticAccessor =
- ElementFactory.setterElement(accessorName, false, _typeProvider.dynamicType);
+ PropertyAccessorElementImpl syntheticAccessor = ElementFactory
+ .setterElement(accessorName, false, _typeProvider.dynamicType);
syntheticAccessor.returnType = _typeProvider.dynamicType;
expect(mapD.get("$accessorName=").type, syntheticAccessor.type);
_assertNoErrors(classD);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_2_methods() {
+ void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_2_methods() {
// class I1 { int m(); }
// class I2 { int m([int]); }
// class A implements I1, I2 {}
@@ -5189,8 +5109,7 @@
_assertNoErrors(classA);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_3_methods() {
+ void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_3_methods() {
// class I1 { int m(); }
// class I2 { int m([int]); }
// class I3 { int m([int, int]); }
@@ -5223,8 +5142,11 @@
methodM3.parameters = <ParameterElement>[parameter2, parameter3];
classI3.methods = <MethodElement>[methodM3];
ClassElementImpl classA = ElementFactory.classElement2("A");
- classA.interfaces =
- <InterfaceType>[classI1.type, classI2.type, classI3.type];
+ classA.interfaces = <InterfaceType>[
+ classI1.type,
+ classI2.type,
+ classI3.type
+ ];
MemberMap mapA =
_inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
expect(mapA.size, _numOfMembersInObject + 1);
@@ -5232,8 +5154,7 @@
_assertNoErrors(classA);
}
- void
- test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_4_methods() {
+ void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_4_methods() {
// class I1 { int m(); }
// class I2 { int m(); }
// class I3 { int m([int]); }
@@ -5271,8 +5192,12 @@
methodM4.parameters = <ParameterElement>[parameter2, parameter3];
classI4.methods = <MethodElement>[methodM4];
ClassElementImpl classA = ElementFactory.classElement2("A");
- classA.interfaces =
- <InterfaceType>[classI1.type, classI2.type, classI3.type, classI4.type];
+ classA.interfaces = <InterfaceType>[
+ classI1.type,
+ classI2.type,
+ classI3.type,
+ classI4.type
+ ];
MemberMap mapA =
_inheritanceManager.getMapOfMembersInheritedFromInterfaces(classA);
expect(mapA.size, _numOfMembersInObject + 1);
@@ -5288,8 +5213,7 @@
classA.accessors = <PropertyAccessorElement>[getterG];
ClassElementImpl classB = ElementFactory.classElement2("B");
classB.interfaces = <InterfaceType>[classA.type];
- expect(
- _inheritanceManager.lookupInheritance(classB, getterName),
+ expect(_inheritanceManager.lookupInheritance(classB, getterName),
same(getterG));
_assertNoErrors(classA);
_assertNoErrors(classB);
@@ -5303,8 +5227,7 @@
classA.methods = <MethodElement>[methodM];
ClassElementImpl classB = ElementFactory.classElement2("B");
classB.interfaces = <InterfaceType>[classA.type];
- expect(
- _inheritanceManager.lookupInheritance(classB, methodName),
+ expect(_inheritanceManager.lookupInheritance(classB, methodName),
same(methodM));
_assertNoErrors(classA);
_assertNoErrors(classB);
@@ -5318,8 +5241,7 @@
classA.accessors = <PropertyAccessorElement>[setterS];
ClassElementImpl classB = ElementFactory.classElement2("B");
classB.interfaces = <InterfaceType>[classA.type];
- expect(
- _inheritanceManager.lookupInheritance(classB, "$setterName="),
+ expect(_inheritanceManager.lookupInheritance(classB, "$setterName="),
same(setterS));
_assertNoErrors(classA);
_assertNoErrors(classB);
@@ -5370,11 +5292,9 @@
classI2.interfaces = <InterfaceType>[classI1.type];
ClassElementImpl classA = ElementFactory.classElement2("A");
classA.interfaces = <InterfaceType>[classI2.type];
- expect(
- _inheritanceManager.lookupInheritance(classA, methodName1),
+ expect(_inheritanceManager.lookupInheritance(classA, methodName1),
same(methodM1));
- expect(
- _inheritanceManager.lookupInheritance(classA, methodName2),
+ expect(_inheritanceManager.lookupInheritance(classA, methodName2),
same(methodM2));
_assertNoErrors(classI1);
_assertNoErrors(classI2);
@@ -5389,8 +5309,7 @@
classA.accessors = <PropertyAccessorElement>[getterG];
ClassElementImpl classB = ElementFactory.classElement2("B");
classB.mixins = <InterfaceType>[classA.type];
- expect(
- _inheritanceManager.lookupInheritance(classB, getterName),
+ expect(_inheritanceManager.lookupInheritance(classB, getterName),
same(getterG));
_assertNoErrors(classA);
_assertNoErrors(classB);
@@ -5404,8 +5323,7 @@
classA.methods = <MethodElement>[methodM];
ClassElementImpl classB = ElementFactory.classElement2("B");
classB.mixins = <InterfaceType>[classA.type];
- expect(
- _inheritanceManager.lookupInheritance(classB, methodName),
+ expect(_inheritanceManager.lookupInheritance(classB, methodName),
same(methodM));
_assertNoErrors(classA);
_assertNoErrors(classB);
@@ -5419,8 +5337,7 @@
classA.accessors = <PropertyAccessorElement>[setterS];
ClassElementImpl classB = ElementFactory.classElement2("B");
classB.mixins = <InterfaceType>[classA.type];
- expect(
- _inheritanceManager.lookupInheritance(classB, "$setterName="),
+ expect(_inheritanceManager.lookupInheritance(classB, "$setterName="),
same(setterS));
_assertNoErrors(classA);
_assertNoErrors(classB);
@@ -5453,8 +5370,7 @@
ElementFactory.getterElement(getterName, false, _typeProvider.intType);
classA.accessors = <PropertyAccessorElement>[getterG];
ClassElementImpl classB = ElementFactory.classElement("B", classA.type);
- expect(
- _inheritanceManager.lookupInheritance(classB, getterName),
+ expect(_inheritanceManager.lookupInheritance(classB, getterName),
same(getterG));
_assertNoErrors(classA);
_assertNoErrors(classB);
@@ -5484,8 +5400,7 @@
ElementFactory.methodElement(methodName, _typeProvider.intType);
classA.methods = <MethodElement>[methodM];
ClassElementImpl classB = ElementFactory.classElement("B", classA.type);
- expect(
- _inheritanceManager.lookupInheritance(classB, methodName),
+ expect(_inheritanceManager.lookupInheritance(classB, methodName),
same(methodM));
_assertNoErrors(classA);
_assertNoErrors(classB);
@@ -5498,8 +5413,7 @@
ElementFactory.setterElement(setterName, false, _typeProvider.intType);
classA.accessors = <PropertyAccessorElement>[setterS];
ClassElementImpl classB = ElementFactory.classElement("B", classA.type);
- expect(
- _inheritanceManager.lookupInheritance(classB, "$setterName="),
+ expect(_inheritanceManager.lookupInheritance(classB, "$setterName="),
same(setterS));
_assertNoErrors(classA);
_assertNoErrors(classB);
@@ -5571,8 +5485,7 @@
PropertyAccessorElement setterS =
ElementFactory.setterElement(setterName, false, _typeProvider.intType);
classA.accessors = <PropertyAccessorElement>[setterS];
- expect(
- _inheritanceManager.lookupMember(classA, "$setterName="),
+ expect(_inheritanceManager.lookupMember(classA, "$setterName="),
same(setterS));
_assertNoErrors(classA);
}
@@ -5594,8 +5507,7 @@
ElementFactory.methodElement(methodName, _typeProvider.intType);
classA.methods = <MethodElement>[methodM];
expect(
- _inheritanceManager.lookupOverrides(classA, methodName),
- hasLength(0));
+ _inheritanceManager.lookupOverrides(classA, methodName), hasLength(0));
_assertNoErrors(classA);
}
@@ -5657,8 +5569,8 @@
_assertNoErrors(classC);
}
- void _assertErrors(ClassElement classElt, [List<ErrorCode> expectedErrorCodes
- = ErrorCode.EMPTY_LIST]) {
+ void _assertErrors(ClassElement classElt,
+ [List<ErrorCode> expectedErrorCodes = ErrorCode.EMPTY_LIST]) {
GatheringErrorListener errorListener = new GatheringErrorListener();
HashSet<AnalysisError> actualErrors =
_inheritanceManager.getErrors(classElt);
@@ -5715,8 +5627,10 @@
@override
void setUp() {
- SourceFactory sourceFactory = new SourceFactory(
- [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk), new FileUriResolver()]);
+ SourceFactory sourceFactory = new SourceFactory([
+ new DartUriResolver(DirectoryBasedDartSdk.defaultSdk),
+ new FileUriResolver()
+ ]);
_context = new AnalysisContextImpl();
_context.sourceFactory = sourceFactory;
}
@@ -5775,8 +5689,7 @@
addSource("/a.dart", "part of lib;");
Source librarySource = addSource("/lib.dart", "part 'a.dart';");
LibraryElement element = _buildLibrary(
- librarySource,
- [ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART]);
+ librarySource, [ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART]);
expect(element, isNotNull);
}
@@ -5865,8 +5778,8 @@
LibraryElement _buildLibrary(Source librarySource,
[List<ErrorCode> expectedErrorCodes = ErrorCode.EMPTY_LIST]) {
LibraryResolver resolver = new LibraryResolver(_context);
- LibraryElementBuilder builder =
- new LibraryElementBuilder(resolver.analysisContext, resolver.errorListener);
+ LibraryElementBuilder builder = new LibraryElementBuilder(
+ resolver.analysisContext, resolver.errorListener);
Library library = resolver.createLibrary(librarySource);
LibraryElement element = builder.buildLibrary(library);
GatheringErrorListener listener = new GatheringErrorListener();
@@ -5904,21 +5817,17 @@
{
GatheringErrorListener errorListener = new GatheringErrorListener();
Scope scope = new LibraryImportScope(importingLibrary, errorListener);
- expect(
- scope.lookup(AstFactory.identifier3(typeNameA), importingLibrary),
+ expect(scope.lookup(AstFactory.identifier3(typeNameA), importingLibrary),
typeA);
errorListener.assertNoErrors();
- expect(
- scope.lookup(AstFactory.identifier3(typeNameC), importingLibrary),
+ expect(scope.lookup(AstFactory.identifier3(typeNameC), importingLibrary),
typeC);
errorListener.assertNoErrors();
Element element =
scope.lookup(AstFactory.identifier3(typeNameB), importingLibrary);
errorListener.assertErrorsWithCodes([StaticWarningCode.AMBIGUOUS_IMPORT]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is MultiplyDefinedElement,
- MultiplyDefinedElement,
- element);
+ EngineTestCase.assertInstanceOf((obj) => obj is MultiplyDefinedElement,
+ MultiplyDefinedElement, element);
List<Element> conflictingElements =
(element as MultiplyDefinedElement).conflictingElements;
expect(conflictingElements, hasLength(2));
@@ -5934,19 +5843,12 @@
GatheringErrorListener errorListener = new GatheringErrorListener();
Scope scope = new LibraryImportScope(importingLibrary, errorListener);
Identifier identifier = AstFactory.identifier3(typeNameB);
- AstFactory.methodDeclaration(
- null,
- AstFactory.typeName3(identifier),
- null,
- null,
- AstFactory.identifier3("foo"),
- null);
+ AstFactory.methodDeclaration(null, AstFactory.typeName3(identifier), null,
+ null, AstFactory.identifier3("foo"), null);
Element element = scope.lookup(identifier, importingLibrary);
errorListener.assertErrorsWithCodes([StaticWarningCode.AMBIGUOUS_IMPORT]);
- EngineTestCase.assertInstanceOf(
- (obj) => obj is MultiplyDefinedElement,
- MultiplyDefinedElement,
- element);
+ EngineTestCase.assertInstanceOf((obj) => obj is MultiplyDefinedElement,
+ MultiplyDefinedElement, element);
}
}
@@ -6003,10 +5905,9 @@
GatheringErrorListener errorListener = new GatheringErrorListener();
Scope scope = new LibraryImportScope(importingLibrary, errorListener);
expect(
- scope.lookup(AstFactory.identifier3(typeName), importingLibrary),
- type);
- errorListener.assertErrorsWithCodes(
- [StaticWarningCode.CONFLICTING_DART_IMPORT]);
+ scope.lookup(AstFactory.identifier3(typeName), importingLibrary), type);
+ errorListener
+ .assertErrorsWithCodes([StaticWarningCode.CONFLICTING_DART_IMPORT]);
}
void test_nonConflictingImports_sameElement() {
@@ -6026,12 +5927,10 @@
importingLibrary.imports = <ImportElement>[import1, import2];
GatheringErrorListener errorListener = new GatheringErrorListener();
Scope scope = new LibraryImportScope(importingLibrary, errorListener);
- expect(
- scope.lookup(AstFactory.identifier3(typeNameA), importingLibrary),
+ expect(scope.lookup(AstFactory.identifier3(typeNameA), importingLibrary),
typeA);
errorListener.assertNoErrors();
- expect(
- scope.lookup(AstFactory.identifier3(typeNameB), importingLibrary),
+ expect(scope.lookup(AstFactory.identifier3(typeNameB), importingLibrary),
typeB);
errorListener.assertNoErrors();
}
@@ -6047,8 +5946,8 @@
createTestLibrary(context, "import.prefixed");
(prefixedLibrary.definingCompilationUnit as CompilationUnitElementImpl).types =
<ClassElement>[prefixedType];
- ImportElementImpl prefixedImport =
- ElementFactory.importFor(prefixedLibrary, ElementFactory.prefix(prefixName));
+ ImportElementImpl prefixedImport = ElementFactory.importFor(
+ prefixedLibrary, ElementFactory.prefix(prefixName));
LibraryElement nonPrefixedLibrary =
createTestLibrary(context, "import.nonPrefixed");
(nonPrefixedLibrary.definingCompilationUnit as CompilationUnitElementImpl).types =
@@ -6057,12 +5956,14 @@
ElementFactory.importFor(nonPrefixedLibrary, null);
LibraryElementImpl importingLibrary =
createTestLibrary(context, "importing");
- importingLibrary.imports =
- <ImportElement>[prefixedImport, nonPrefixedImport];
+ importingLibrary.imports = <ImportElement>[
+ prefixedImport,
+ nonPrefixedImport
+ ];
GatheringErrorListener errorListener = new GatheringErrorListener();
Scope scope = new LibraryImportScope(importingLibrary, errorListener);
- Element prefixedElement =
- scope.lookup(AstFactory.identifier5(prefixName, typeName), importingLibrary);
+ Element prefixedElement = scope.lookup(
+ AstFactory.identifier5(prefixName, typeName), importingLibrary);
errorListener.assertNoErrors();
expect(prefixedElement, same(prefixedType));
Element nonPrefixedElement =
@@ -6101,11 +6002,11 @@
class B {}''');
List<ResolvableLibrary> cycle = new List<ResolvableLibrary>();
ResolvableLibrary coreLib = _createResolvableLibrary(_coreLibrarySource);
- coreLib.libraryElement = analysisContext2.computeLibraryElement(
- _coreLibrarySource) as LibraryElementImpl;
+ coreLib.libraryElement = analysisContext2
+ .computeLibraryElement(_coreLibrarySource) as LibraryElementImpl;
ResolvableLibrary asyncLib = _createResolvableLibrary(_asyncLibrarySource);
- asyncLib.libraryElement = analysisContext2.computeLibraryElement(
- _asyncLibrarySource) as LibraryElementImpl;
+ asyncLib.libraryElement = analysisContext2
+ .computeLibraryElement(_asyncLibrarySource) as LibraryElementImpl;
ResolvableLibrary libA = _createResolvableLibrary(sourceA);
ResolvableLibrary libB = _createResolvableLibrary(sourceB);
libA.importedLibraries = <ResolvableLibrary>[coreLib, asyncLib, libB];
@@ -6120,8 +6021,9 @@
ResolvableLibrary _createResolvableLibrary(Source source) {
CompilationUnit unit = analysisContext2.parseCompilationUnit(source);
ResolvableLibrary resolvableLibrary = new ResolvableLibrary(source);
- resolvableLibrary.resolvableCompilationUnits =
- <ResolvableCompilationUnit>[new ResolvableCompilationUnit(source, unit)];
+ resolvableLibrary.resolvableCompilationUnits = <ResolvableCompilationUnit>[
+ new ResolvableCompilationUnit(source, unit)
+ ];
return resolvableLibrary;
}
}
@@ -6268,8 +6170,7 @@
void test_getLibraryScope() {
LibraryElementImpl element = new LibraryElementImpl.forNode(
- _analysisContext,
- AstFactory.libraryIdentifier2(["lib"]));
+ _analysisContext, AstFactory.libraryIdentifier2(["lib"]));
element.definingCompilationUnit =
new CompilationUnitElementImpl("lib.dart");
_library.libraryElement = element;
@@ -6307,18 +6208,14 @@
void test_setLibraryElement() {
LibraryElementImpl element = new LibraryElementImpl.forNode(
- _analysisContext,
- AstFactory.libraryIdentifier2(["lib"]));
+ _analysisContext, AstFactory.libraryIdentifier2(["lib"]));
_library.libraryElement = element;
expect(_library.libraryElement, same(element));
}
- Library _createLibrary(String definingCompilationUnitPath) =>
- new Library(
- _analysisContext,
- _errorListener,
- new FileBasedSource.con1(
- FileUtilities2.createFile(definingCompilationUnitPath)));
+ Library _createLibrary(String definingCompilationUnitPath) => new Library(
+ _analysisContext, _errorListener, new FileBasedSource.con1(
+ FileUtilities2.createFile(definingCompilationUnitPath)));
}
@reflectiveTest
@@ -6369,24 +6266,6 @@
@reflectiveTest
class NonHintCodeTest extends ResolverTestCase {
- void fail_propagatedFieldType() {
- // From dartbug.com/20019
- Source source = addSource(r'''
-class A { }
-class X<T> {
- final x = new List<T>();
-}
-class Z {
- final X<A> y = new X<A>();
- foo() {
- y.x.add(new A());
- }
-}''');
- resolve(source);
- assertNoErrors(source);
- verify([source]);
- }
-
void test_deadCode_deadBlock_conditionalElse_debugConst() {
Source source = addSource(r'''
const bool DEBUG = true;
@@ -6604,12 +6483,15 @@
}
void test_importDeferredLibraryWithLoadFunction() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-f() {}''', r'''
+f() {}''',
+ r'''
library root;
import 'lib1.dart' deferred as lib1;
-main() { lib1.f(); }'''], ErrorCode.EMPTY_LIST);
+main() { lib1.f(); }'''
+ ], ErrorCode.EMPTY_LIST);
}
void test_issue20904BuggyTypePromotionAtIfJoin_1() {
@@ -6812,6 +6694,23 @@
verify([source]);
}
+ void test_propagatedFieldType() {
+ Source source = addSource(r'''
+class A { }
+class X<T> {
+ final x = new List<T>();
+}
+class Z {
+ final X<A> y = new X<A>();
+ foo() {
+ y.x.add(new A());
+ }
+}''');
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
void test_proxy_annotation_prefixed() {
Source source = addSource(r'''
library L;
@@ -7299,21 +7198,19 @@
void test_import_packageWithDotDot() {
Source source = addSource("import 'package:somepackage/../other.dart';");
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.URI_DOES_NOT_EXIST,
- HintCode.PACKAGE_IMPORT_CONTAINS_DOT_DOT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.URI_DOES_NOT_EXIST,
+ HintCode.PACKAGE_IMPORT_CONTAINS_DOT_DOT
+ ]);
}
void test_import_packageWithLeadingDotDot() {
Source source = addSource("import 'package:../other.dart';");
resolve(source);
- assertErrors(
- source,
- [
- CompileTimeErrorCode.URI_DOES_NOT_EXIST,
- HintCode.PACKAGE_IMPORT_CONTAINS_DOT_DOT]);
+ assertErrors(source, [
+ CompileTimeErrorCode.URI_DOES_NOT_EXIST,
+ HintCode.PACKAGE_IMPORT_CONTAINS_DOT_DOT
+ ]);
}
void test_import_referenceIntoLibDirectory() {
@@ -7323,8 +7220,7 @@
addNamedSource("/myproj/web/test.dart", "import '../lib/other.dart';");
resolve(source);
assertErrors(
- source,
- [HintCode.FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE]);
+ source, [HintCode.FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE]);
}
void test_import_referenceIntoLibDirectory_no_pubspec() {
@@ -7342,8 +7238,7 @@
addNamedSource("/myproj/lib/test.dart", "import '../web/other.dart';");
resolve(source);
assertErrors(
- source,
- [HintCode.FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE]);
+ source, [HintCode.FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE]);
}
void test_import_referenceOutOfLibDirectory_no_pubspec() {
@@ -7366,8 +7261,8 @@
void test_import_valid_inside_lib2() {
cacheSource("/myproj/pubspec.yaml", "");
cacheSource("/myproj/lib/bar/other.dart", "");
- Source source =
- addNamedSource("/myproj/lib/foo/test.dart", "import '../bar/other.dart';");
+ Source source = addNamedSource(
+ "/myproj/lib/foo/test.dart", "import '../bar/other.dart';");
resolve(source);
assertNoErrors(source);
}
@@ -7467,9 +7362,7 @@
return null;
}
return _checkResolved(
- node,
- node.staticElement,
- (node) => node is MethodElement);
+ node, node.staticElement, (node) => node is MethodElement);
}
@override
@@ -7479,9 +7372,7 @@
Object visitCompilationUnit(CompilationUnit node) {
node.visitChildren(this);
return _checkResolved(
- node,
- node.element,
- (node) => node is CompilationUnitElement);
+ node, node.element, (node) => node is CompilationUnitElement);
}
@override
@@ -7516,9 +7407,7 @@
return null;
}
return _checkResolved(
- prefix,
- prefix.staticElement,
- (node) => node is PrefixElement);
+ prefix, prefix.staticElement, (node) => node is PrefixElement);
}
@override
@@ -7529,9 +7418,7 @@
return null;
}
return _checkResolved(
- node,
- node.staticElement,
- (node) => node is MethodElement);
+ node, node.staticElement, (node) => node is MethodElement);
}
@override
@@ -7543,8 +7430,8 @@
node.expression.accept(this);
@override
- Object visitPartDirective(PartDirective node) =>
- _checkResolved(node, node.element, (node) => node is CompilationUnitElement);
+ Object visitPartDirective(PartDirective node) => _checkResolved(
+ node, node.element, (node) => node is CompilationUnitElement);
@override
Object visitPartOfDirective(PartOfDirective node) =>
@@ -7561,9 +7448,7 @@
return null;
}
return _checkResolved(
- node,
- node.staticElement,
- (node) => node is MethodElement);
+ node, node.staticElement, (node) => node is MethodElement);
}
@override
@@ -7588,9 +7473,7 @@
return null;
}
return _checkResolved(
- node,
- node.staticElement,
- (node) => node is MethodElement);
+ node, node.staticElement, (node) => node is MethodElement);
}
@override
@@ -7623,8 +7506,8 @@
return _checkResolved(node, node.staticElement, null);
}
- Object _checkResolved(AstNode node, Element element,
- Predicate<Element> predicate) {
+ Object _checkResolved(
+ AstNode node, Element element, Predicate<Element> predicate) {
if (element == null) {
if (_knownExceptions == null || !_knownExceptions.contains(node)) {
_unresolvedNodes.add(node);
@@ -7650,8 +7533,7 @@
return "<unknown file- CompilationUnit.getElement() returned null>";
}
} else {
- return
- "<unknown file- CompilationUnit.getRoot() is not a CompilationUnit>";
+ return "<unknown file- CompilationUnit.getRoot() is not a CompilationUnit>";
}
}
return "<unknown file- ASTNode is null>";
@@ -7731,13 +7613,14 @@
* @throws AssertionFailedError if a different number of errors have been reported than were
* expected
*/
- void assertErrors(Source source, [List<ErrorCode> expectedErrorCodes =
- ErrorCode.EMPTY_LIST]) {
+ void assertErrors(Source source,
+ [List<ErrorCode> expectedErrorCodes = ErrorCode.EMPTY_LIST]) {
GatheringErrorListener errorListener = new GatheringErrorListener();
for (AnalysisError error in analysisContext2.computeErrors(source)) {
ErrorCode errorCode = error.errorCode;
if (!enableUnusedElement &&
- (errorCode == HintCode.UNUSED_ELEMENT || errorCode == HintCode.UNUSED_FIELD)) {
+ (errorCode == HintCode.UNUSED_ELEMENT ||
+ errorCode == HintCode.UNUSED_FIELD)) {
continue;
}
if (!enableUnusedLocalVariable &&
@@ -7791,8 +7674,8 @@
* @param libraryName the name of the library to be created
* @return the library element that was created
*/
- LibraryElementImpl createTestLibrary(AnalysisContext context,
- String libraryName, [List<String> typeNames]) {
+ LibraryElementImpl createTestLibrary(
+ AnalysisContext context, String libraryName, [List<String> typeNames]) {
List<CompilationUnitElement> sourcedCompilationUnits;
if (typeNames == null) {
sourcedCompilationUnits = CompilationUnitElementImpl.EMPTY_ARRAY;
@@ -7816,8 +7699,7 @@
new CompilationUnitElementImpl(fileName);
compilationUnit.source = _createNamedSource(fileName);
LibraryElementImpl library = new LibraryElementImpl.forNode(
- context,
- AstFactory.libraryIdentifier2([libraryName]));
+ context, AstFactory.libraryIdentifier2([libraryName]));
library.definingCompilationUnit = compilationUnit;
library.parts = sourcedCompilationUnits;
return library;
@@ -7833,12 +7715,12 @@
AnalysisEngine.instance.strictUnionTypes = strictUnionTypes;
}
- Expression findTopLevelConstantExpression(CompilationUnit compilationUnit,
- String name) =>
+ Expression findTopLevelConstantExpression(
+ CompilationUnit compilationUnit, String name) =>
findTopLevelDeclaration(compilationUnit, name).initializer;
- VariableDeclaration findTopLevelDeclaration(CompilationUnit compilationUnit,
- String name) {
+ VariableDeclaration findTopLevelDeclaration(
+ CompilationUnit compilationUnit, String name) {
for (CompilationUnitMember member in compilationUnit.declarations) {
if (member is TopLevelVariableDeclaration) {
for (VariableDeclaration variable in member.variables.variables) {
@@ -7894,8 +7776,8 @@
* @return the resolved compilation unit
* @throws Exception if the compilation unit could not be resolved
*/
- CompilationUnit resolveCompilationUnit(Source source,
- LibraryElement library) =>
+ CompilationUnit resolveCompilationUnit(
+ Source source, LibraryElement library) =>
analysisContext2.resolveCompilationUnit(source, library);
CompilationUnit resolveSource(String sourceText) =>
@@ -7997,8 +7879,7 @@
@override
Element internalLookup(Identifier identifier, String name,
- LibraryElement referencingLibrary) =>
- null;
+ LibraryElement referencingLibrary) => null;
}
class Scope_EnclosedScopeTest_test_define_normal extends Scope {
@@ -8011,8 +7892,7 @@
@override
Element internalLookup(Identifier identifier, String name,
- LibraryElement referencingLibrary) =>
- null;
+ LibraryElement referencingLibrary) => null;
}
@reflectiveTest
@@ -8069,7 +7949,7 @@
@override
Element internalLookup(Identifier identifier, String name,
- LibraryElement referencingLibrary) =>
+ LibraryElement referencingLibrary) =>
localLookup(name, referencingLibrary);
}
@@ -8106,8 +7986,7 @@
AssignmentExpression assignment = stmt.expression;
PropertyAccess propertyAccess = assignment.leftHandSide;
expect(
- propertyAccess.propertyName.staticElement.enclosingElement.name,
- 'M2');
+ propertyAccess.propertyName.staticElement.enclosingElement.name, 'M2');
expect(
propertyAccess.propertyName.auxiliaryElements.staticElement.enclosingElement.name,
'M2');
@@ -8378,16 +8257,13 @@
''';
CompilationUnit unit = resolveSource(text);
WhileStatement whileStatement = EngineTestCase.findNode(
- unit,
- text,
- 'while (true)',
- (n) => n is WhileStatement);
+ unit, text, 'while (true)', (n) => n is WhileStatement);
ForStatement forStatement =
EngineTestCase.findNode(unit, text, 'for', (n) => n is ForStatement);
- BreakStatement break1 =
- EngineTestCase.findNode(unit, text, 'break loop1', (n) => n is BreakStatement);
- BreakStatement break2 =
- EngineTestCase.findNode(unit, text, 'break loop2', (n) => n is BreakStatement);
+ BreakStatement break1 = EngineTestCase.findNode(
+ unit, text, 'break loop1', (n) => n is BreakStatement);
+ BreakStatement break2 = EngineTestCase.findNode(
+ unit, text, 'break loop2', (n) => n is BreakStatement);
expect(break1.target, same(whileStatement));
expect(break2.target, same(forStatement));
}
@@ -8403,8 +8279,8 @@
CompilationUnit unit = resolveSource(text);
DoStatement doStatement =
EngineTestCase.findNode(unit, text, 'do', (n) => n is DoStatement);
- BreakStatement breakStatement =
- EngineTestCase.findNode(unit, text, 'break', (n) => n is BreakStatement);
+ BreakStatement breakStatement = EngineTestCase.findNode(
+ unit, text, 'break', (n) => n is BreakStatement);
expect(breakStatement.target, same(doStatement));
}
@@ -8419,8 +8295,8 @@
CompilationUnit unit = resolveSource(text);
ForStatement forStatement =
EngineTestCase.findNode(unit, text, 'for', (n) => n is ForStatement);
- BreakStatement breakStatement =
- EngineTestCase.findNode(unit, text, 'break', (n) => n is BreakStatement);
+ BreakStatement breakStatement = EngineTestCase.findNode(
+ unit, text, 'break', (n) => n is BreakStatement);
expect(breakStatement.target, same(forStatement));
}
@@ -8433,10 +8309,10 @@
}
''';
CompilationUnit unit = resolveSource(text);
- ForEachStatement forStatement =
- EngineTestCase.findNode(unit, text, 'for', (n) => n is ForEachStatement);
- BreakStatement breakStatement =
- EngineTestCase.findNode(unit, text, 'break', (n) => n is BreakStatement);
+ ForEachStatement forStatement = EngineTestCase.findNode(
+ unit, text, 'for', (n) => n is ForEachStatement);
+ BreakStatement breakStatement = EngineTestCase.findNode(
+ unit, text, 'break', (n) => n is BreakStatement);
expect(breakStatement.target, same(forStatement));
}
@@ -8452,10 +8328,10 @@
}
''';
CompilationUnit unit = resolveSource(text);
- SwitchStatement switchStatement =
- EngineTestCase.findNode(unit, text, 'switch', (n) => n is SwitchStatement);
- BreakStatement breakStatement =
- EngineTestCase.findNode(unit, text, 'break', (n) => n is BreakStatement);
+ SwitchStatement switchStatement = EngineTestCase.findNode(
+ unit, text, 'switch', (n) => n is SwitchStatement);
+ BreakStatement breakStatement = EngineTestCase.findNode(
+ unit, text, 'break', (n) => n is BreakStatement);
expect(breakStatement.target, same(switchStatement));
}
@@ -8468,10 +8344,10 @@
}
''';
CompilationUnit unit = resolveSource(text);
- WhileStatement whileStatement =
- EngineTestCase.findNode(unit, text, 'while', (n) => n is WhileStatement);
- BreakStatement breakStatement =
- EngineTestCase.findNode(unit, text, 'break', (n) => n is BreakStatement);
+ WhileStatement whileStatement = EngineTestCase.findNode(
+ unit, text, 'while', (n) => n is WhileStatement);
+ BreakStatement breakStatement = EngineTestCase.findNode(
+ unit, text, 'break', (n) => n is BreakStatement);
expect(breakStatement.target, same(whileStatement));
}
@@ -8488,8 +8364,8 @@
}
''';
CompilationUnit unit = resolveSource(text);
- BreakStatement breakStatement =
- EngineTestCase.findNode(unit, text, 'break', (n) => n is BreakStatement);
+ BreakStatement breakStatement = EngineTestCase.findNode(
+ unit, text, 'break', (n) => n is BreakStatement);
expect(breakStatement.target, isNull);
}
@@ -8567,22 +8443,13 @@
''';
CompilationUnit unit = resolveSource(text);
WhileStatement whileStatement = EngineTestCase.findNode(
- unit,
- text,
- 'while (true)',
- (n) => n is WhileStatement);
+ unit, text, 'while (true)', (n) => n is WhileStatement);
ForStatement forStatement =
EngineTestCase.findNode(unit, text, 'for', (n) => n is ForStatement);
ContinueStatement continue1 = EngineTestCase.findNode(
- unit,
- text,
- 'continue loop1',
- (n) => n is ContinueStatement);
+ unit, text, 'continue loop1', (n) => n is ContinueStatement);
ContinueStatement continue2 = EngineTestCase.findNode(
- unit,
- text,
- 'continue loop2',
- (n) => n is ContinueStatement);
+ unit, text, 'continue loop2', (n) => n is ContinueStatement);
expect(continue1.target, same(whileStatement));
expect(continue2.target, same(forStatement));
}
@@ -8598,8 +8465,8 @@
CompilationUnit unit = resolveSource(text);
DoStatement doStatement =
EngineTestCase.findNode(unit, text, 'do', (n) => n is DoStatement);
- ContinueStatement continueStatement =
- EngineTestCase.findNode(unit, text, 'continue', (n) => n is ContinueStatement);
+ ContinueStatement continueStatement = EngineTestCase.findNode(
+ unit, text, 'continue', (n) => n is ContinueStatement);
expect(continueStatement.target, same(doStatement));
}
@@ -8614,8 +8481,8 @@
CompilationUnit unit = resolveSource(text);
ForStatement forStatement =
EngineTestCase.findNode(unit, text, 'for', (n) => n is ForStatement);
- ContinueStatement continueStatement =
- EngineTestCase.findNode(unit, text, 'continue', (n) => n is ContinueStatement);
+ ContinueStatement continueStatement = EngineTestCase.findNode(
+ unit, text, 'continue', (n) => n is ContinueStatement);
expect(continueStatement.target, same(forStatement));
}
@@ -8628,10 +8495,10 @@
}
''';
CompilationUnit unit = resolveSource(text);
- ForEachStatement forStatement =
- EngineTestCase.findNode(unit, text, 'for', (n) => n is ForEachStatement);
- ContinueStatement continueStatement =
- EngineTestCase.findNode(unit, text, 'continue', (n) => n is ContinueStatement);
+ ForEachStatement forStatement = EngineTestCase.findNode(
+ unit, text, 'for', (n) => n is ForEachStatement);
+ ContinueStatement continueStatement = EngineTestCase.findNode(
+ unit, text, 'continue', (n) => n is ContinueStatement);
expect(continueStatement.target, same(forStatement));
}
@@ -8644,10 +8511,10 @@
}
''';
CompilationUnit unit = resolveSource(text);
- WhileStatement whileStatement =
- EngineTestCase.findNode(unit, text, 'while', (n) => n is WhileStatement);
- ContinueStatement continueStatement =
- EngineTestCase.findNode(unit, text, 'continue', (n) => n is ContinueStatement);
+ WhileStatement whileStatement = EngineTestCase.findNode(
+ unit, text, 'while', (n) => n is WhileStatement);
+ ContinueStatement continueStatement = EngineTestCase.findNode(
+ unit, text, 'continue', (n) => n is ContinueStatement);
expect(continueStatement.target, same(whileStatement));
}
@@ -8663,10 +8530,10 @@
}
''';
CompilationUnit unit = resolveSource(text);
- WhileStatement whileStatement =
- EngineTestCase.findNode(unit, text, 'while', (n) => n is WhileStatement);
- ContinueStatement continueStatement =
- EngineTestCase.findNode(unit, text, 'continue', (n) => n is ContinueStatement);
+ WhileStatement whileStatement = EngineTestCase.findNode(
+ unit, text, 'while', (n) => n is WhileStatement);
+ ContinueStatement continueStatement = EngineTestCase.findNode(
+ unit, text, 'continue', (n) => n is ContinueStatement);
expect(continueStatement.target, same(whileStatement));
}
@@ -8683,8 +8550,8 @@
}
''';
CompilationUnit unit = resolveSource(text);
- ContinueStatement continueStatement =
- EngineTestCase.findNode(unit, text, 'continue', (n) => n is ContinueStatement);
+ ContinueStatement continueStatement = EngineTestCase.findNode(
+ unit, text, 'continue', (n) => n is ContinueStatement);
expect(continueStatement.target, isNull);
}
@@ -8840,8 +8707,7 @@
AssignmentExpression assignment = stmt.expression;
SimpleIdentifier leftHandSide = assignment.leftHandSide;
expect(leftHandSide.staticElement.enclosingElement.name, 'M2');
- expect(
- leftHandSide.auxiliaryElements.staticElement.enclosingElement.name,
+ expect(leftHandSide.auxiliaryElements.staticElement.enclosingElement.name,
'M2');
}
@@ -8898,8 +8764,7 @@
VariableDeclarationStatement stmt = body.block.statements[0];
PropertyAccess propertyAccess = stmt.variables.variables[0].initializer;
expect(
- propertyAccess.propertyName.staticElement.enclosingElement.name,
- 'M2');
+ propertyAccess.propertyName.staticElement.enclosingElement.name, 'M2');
}
void test_getterAndSetterWithDifferentTypes() {
@@ -8913,8 +8778,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES]);
+ source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES]);
verify([source]);
}
@@ -9142,15 +9006,11 @@
expect(unit, isNotNull);
List<bool> found = [false];
List<CaughtException> thrownException = new List<CaughtException>(1);
- unit.accept(
- new _SimpleResolverTest_localVariable_types_invoked(
- this,
- found,
- thrownException));
+ unit.accept(new _SimpleResolverTest_localVariable_types_invoked(
+ this, found, thrownException));
if (thrownException[0] != null) {
throw new AnalysisException(
- "Exception",
- new CaughtException(thrownException[0], null));
+ "Exception", new CaughtException(thrownException[0], null));
}
expect(found[0], isTrue);
}
@@ -9172,13 +9032,11 @@
CompilationUnit unit = resolveCompilationUnit(source, library);
NodeList<CompilationUnitMember> declarations = unit.declarations;
expect(declarations, hasLength(2));
- Element expectedElement =
- (declarations[0] as
- TopLevelVariableDeclaration).variables.variables[0].name.staticElement;
- EngineTestCase.assertInstanceOf(
- (obj) => obj is PropertyInducingElement,
- PropertyInducingElement,
- expectedElement);
+ Element expectedElement = (declarations[
+ 0] as TopLevelVariableDeclaration).variables.variables[
+ 0].name.staticElement;
+ EngineTestCase.assertInstanceOf((obj) => obj is PropertyInducingElement,
+ PropertyInducingElement, expectedElement);
expectedElement = (expectedElement as PropertyInducingElement).getter;
Element actualElement =
(declarations[1] as ClassDeclaration).metadata[0].name.staticElement;
@@ -9365,13 +9223,11 @@
CompilationUnit unit = resolveCompilationUnit(source, library);
NodeList<CompilationUnitMember> declarations = unit.declarations;
expect(declarations, hasLength(2));
- Element expectedElement =
- (declarations[0] as
- TopLevelVariableDeclaration).variables.variables[0].name.staticElement;
- EngineTestCase.assertInstanceOf(
- (obj) => obj is PropertyInducingElement,
- PropertyInducingElement,
- expectedElement);
+ Element expectedElement = (declarations[
+ 0] as TopLevelVariableDeclaration).variables.variables[
+ 0].name.staticElement;
+ EngineTestCase.assertInstanceOf((obj) => obj is PropertyInducingElement,
+ PropertyInducingElement, expectedElement);
expectedElement = (expectedElement as PropertyInducingElement).getter;
Element actualElement =
(declarations[1] as FunctionTypeAlias).metadata[0].name.staticElement;
@@ -9593,8 +9449,7 @@
AssignmentExpression assignment = stmt.expression;
PropertyAccess propertyAccess = assignment.leftHandSide;
expect(
- propertyAccess.propertyName.staticElement.enclosingElement.name,
- 'M2');
+ propertyAccess.propertyName.staticElement.enclosingElement.name, 'M2');
}
void test_setter_inherited() {
@@ -9740,10 +9595,7 @@
SimpleIdentifier _findIdentifier(String search) {
SimpleIdentifier identifier = EngineTestCase.findNode(
- testUnit,
- testCode,
- search,
- (node) => node is SimpleIdentifier);
+ testUnit, testCode, search, (node) => node is SimpleIdentifier);
return identifier;
}
@@ -9803,8 +9655,8 @@
void test_visitAdjacentStrings() {
// "a" "b"
- Expression node =
- AstFactory.adjacentStrings([_resolvedString("a"), _resolvedString("b")]);
+ Expression node = AstFactory
+ .adjacentStrings([_resolvedString("a"), _resolvedString("b")]);
expect(_analyze(node), same(_typeProvider.stringType));
_listener.assertNoErrors();
}
@@ -9816,8 +9668,7 @@
InterfaceType superclassType = superclass.type;
ClassElement subclass = ElementFactory.classElement("B", superclassType);
Expression node = AstFactory.asExpression(
- AstFactory.thisExpression(),
- AstFactory.typeName(subclass));
+ AstFactory.thisExpression(), AstFactory.typeName(subclass));
expect(_analyze3(node, superclassType), same(subclass.type));
_listener.assertNoErrors();
}
@@ -9827,9 +9678,7 @@
InterfaceType numType = _typeProvider.numType;
SimpleIdentifier identifier = _resolvedVariable(_typeProvider.intType, "i");
AssignmentExpression node = AstFactory.assignmentExpression(
- identifier,
- TokenType.PLUS_EQ,
- _resolvedInteger(1));
+ identifier, TokenType.PLUS_EQ, _resolvedInteger(1));
MethodElement plusMethod = getMethod(numType, "+");
node.staticElement = plusMethod;
expect(_analyze(node), same(numType));
@@ -9840,9 +9689,7 @@
// i = 0
InterfaceType intType = _typeProvider.intType;
Expression node = AstFactory.assignmentExpression(
- _resolvedVariable(intType, "i"),
- TokenType.EQ,
- _resolvedInteger(0));
+ _resolvedVariable(intType, "i"), TokenType.EQ, _resolvedInteger(0));
expect(_analyze(node), same(intType));
_listener.assertNoErrors();
}
@@ -9874,9 +9721,7 @@
void test_visitBinaryExpression_equals() {
// 2 == 3
Expression node = AstFactory.binaryExpression(
- _resolvedInteger(2),
- TokenType.EQ_EQ,
- _resolvedInteger(3));
+ _resolvedInteger(2), TokenType.EQ_EQ, _resolvedInteger(3));
expect(_analyze(node), same(_typeProvider.boolType));
_listener.assertNoErrors();
}
@@ -9884,8 +9729,7 @@
void test_visitBinaryExpression_logicalAnd() {
// false && true
Expression node = AstFactory.binaryExpression(
- AstFactory.booleanLiteral(false),
- TokenType.AMPERSAND_AMPERSAND,
+ AstFactory.booleanLiteral(false), TokenType.AMPERSAND_AMPERSAND,
AstFactory.booleanLiteral(true));
expect(_analyze(node), same(_typeProvider.boolType));
_listener.assertNoErrors();
@@ -9894,8 +9738,7 @@
void test_visitBinaryExpression_logicalOr() {
// false || true
Expression node = AstFactory.binaryExpression(
- AstFactory.booleanLiteral(false),
- TokenType.BAR_BAR,
+ AstFactory.booleanLiteral(false), TokenType.BAR_BAR,
AstFactory.booleanLiteral(true));
expect(_analyze(node), same(_typeProvider.boolType));
_listener.assertNoErrors();
@@ -9904,9 +9747,7 @@
void test_visitBinaryExpression_notEquals() {
// 2 != 3
Expression node = AstFactory.binaryExpression(
- _resolvedInteger(2),
- TokenType.BANG_EQ,
- _resolvedInteger(3));
+ _resolvedInteger(2), TokenType.BANG_EQ, _resolvedInteger(3));
expect(_analyze(node), same(_typeProvider.boolType));
_listener.assertNoErrors();
}
@@ -9914,9 +9755,7 @@
void test_visitBinaryExpression_plusID() {
// 1 + 2.0
BinaryExpression node = AstFactory.binaryExpression(
- _resolvedInteger(1),
- TokenType.PLUS,
- _resolvedDouble(2.0));
+ _resolvedInteger(1), TokenType.PLUS, _resolvedDouble(2.0));
node.staticElement = getMethod(_typeProvider.numType, "+");
expect(_analyze(node), same(_typeProvider.doubleType));
_listener.assertNoErrors();
@@ -9925,9 +9764,7 @@
void test_visitBinaryExpression_plusII() {
// 1 + 2
BinaryExpression node = AstFactory.binaryExpression(
- _resolvedInteger(1),
- TokenType.PLUS,
- _resolvedInteger(2));
+ _resolvedInteger(1), TokenType.PLUS, _resolvedInteger(2));
node.staticElement = getMethod(_typeProvider.numType, "+");
expect(_analyze(node), same(_typeProvider.intType));
_listener.assertNoErrors();
@@ -9936,9 +9773,7 @@
void test_visitBinaryExpression_slash() {
// 2 / 2
BinaryExpression node = AstFactory.binaryExpression(
- _resolvedInteger(2),
- TokenType.SLASH,
- _resolvedInteger(2));
+ _resolvedInteger(2), TokenType.SLASH, _resolvedInteger(2));
node.staticElement = getMethod(_typeProvider.numType, "/");
expect(_analyze(node), same(_typeProvider.doubleType));
_listener.assertNoErrors();
@@ -9954,12 +9789,9 @@
MethodElement operator =
ElementFactory.methodElement("*", typeA, [_typeProvider.doubleType]);
classA.methods = <MethodElement>[operator];
- BinaryExpression node = AstFactory.binaryExpression(
- AstFactory.asExpression(
- AstFactory.identifier3("a"),
- AstFactory.typeName(classA)),
- TokenType.PLUS,
- _resolvedDouble(2.0));
+ BinaryExpression node = AstFactory.binaryExpression(AstFactory.asExpression(
+ AstFactory.identifier3("a"), AstFactory.typeName(classA)),
+ TokenType.PLUS, _resolvedDouble(2.0));
node.staticElement = operator;
expect(_analyze(node), same(typeA));
_listener.assertNoErrors();
@@ -9968,9 +9800,7 @@
void test_visitBinaryExpression_starID() {
// 1 * 2.0
BinaryExpression node = AstFactory.binaryExpression(
- _resolvedInteger(1),
- TokenType.PLUS,
- _resolvedDouble(2.0));
+ _resolvedInteger(1), TokenType.PLUS, _resolvedDouble(2.0));
node.staticElement = getMethod(_typeProvider.numType, "*");
expect(_analyze(node), same(_typeProvider.doubleType));
_listener.assertNoErrors();
@@ -9993,8 +9823,7 @@
void test_visitCascadeExpression() {
// a..length
Expression node = AstFactory.cascadeExpression(
- _resolvedString("a"),
- [AstFactory.propertyAccess2(null, "length")]);
+ _resolvedString("a"), [AstFactory.propertyAccess2(null, "length")]);
expect(_analyze(node), same(_typeProvider.stringType));
_listener.assertNoErrors();
}
@@ -10002,8 +9831,7 @@
void test_visitConditionalExpression_differentTypes() {
// true ? 1.0 : 0
Expression node = AstFactory.conditionalExpression(
- AstFactory.booleanLiteral(true),
- _resolvedDouble(1.0),
+ AstFactory.booleanLiteral(true), _resolvedDouble(1.0),
_resolvedInteger(0));
expect(_analyze(node), same(_typeProvider.numType));
_listener.assertNoErrors();
@@ -10012,8 +9840,7 @@
void test_visitConditionalExpression_sameTypes() {
// true ? 1 : 0
Expression node = AstFactory.conditionalExpression(
- AstFactory.booleanLiteral(true),
- _resolvedInteger(1),
+ AstFactory.booleanLiteral(true), _resolvedInteger(1),
_resolvedInteger(0));
expect(_analyze(node), same(_typeProvider.intType));
_listener.assertNoErrors();
@@ -10034,11 +9861,7 @@
_resolvedFunctionExpression(AstFactory.formalParameterList([]), body);
DartType resultType = _analyze(node);
_assertFunctionType(
- _typeProvider.futureDynamicType,
- null,
- null,
- null,
- resultType);
+ _typeProvider.futureDynamicType, null, null, null, resultType);
_listener.assertNoErrors();
}
@@ -10098,11 +9921,7 @@
_resolvedFunctionExpression(AstFactory.formalParameterList([]), body);
DartType resultType = _analyze(node);
_assertFunctionType(
- _typeProvider.streamDynamicType,
- null,
- null,
- null,
- resultType);
+ _typeProvider.streamDynamicType, null, null, null, resultType);
_listener.assertNoErrors();
}
@@ -10115,11 +9934,7 @@
_resolvedFunctionExpression(AstFactory.formalParameterList([]), body);
DartType resultType = _analyze(node);
_assertFunctionType(
- _typeProvider.iterableDynamicType,
- null,
- null,
- null,
- resultType);
+ _typeProvider.iterableDynamicType, null, null, null, resultType);
_listener.assertNoErrors();
}
@@ -10127,12 +9942,10 @@
// ({p1 : 0, p2 : 0}) {}
DartType dynamicType = _typeProvider.dynamicType;
FormalParameter p1 = AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("p1"),
- _resolvedInteger(0));
+ AstFactory.simpleFormalParameter3("p1"), _resolvedInteger(0));
_setType(p1, dynamicType);
FormalParameter p2 = AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("p2"),
- _resolvedInteger(0));
+ AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0));
_setType(p2, dynamicType);
FunctionExpression node = _resolvedFunctionExpression(
AstFactory.formalParameterList([p1, p2]),
@@ -10144,11 +9957,7 @@
expectedNamedTypes["p1"] = dynamicType;
expectedNamedTypes["p2"] = dynamicType;
_assertFunctionType(
- dynamicType,
- null,
- null,
- expectedNamedTypes,
- resultType);
+ dynamicType, null, null, expectedNamedTypes, resultType);
_listener.assertNoErrors();
}
@@ -10156,8 +9965,7 @@
// ({p : 0}) -> 0;
DartType dynamicType = _typeProvider.dynamicType;
FormalParameter p = AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("p"),
- _resolvedInteger(0));
+ AstFactory.simpleFormalParameter3("p"), _resolvedInteger(0));
_setType(p, dynamicType);
FunctionExpression node = _resolvedFunctionExpression(
AstFactory.formalParameterList([p]),
@@ -10167,11 +9975,7 @@
Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>();
expectedNamedTypes["p"] = dynamicType;
_assertFunctionType(
- _typeProvider.intType,
- null,
- null,
- expectedNamedTypes,
- resultType);
+ _typeProvider.intType, null, null, expectedNamedTypes, resultType);
_listener.assertNoErrors();
}
@@ -10188,12 +9992,8 @@
_analyze5(p1);
_analyze5(p2);
DartType resultType = _analyze(node);
- _assertFunctionType(
- dynamicType,
- <DartType>[dynamicType, dynamicType],
- null,
- null,
- resultType);
+ _assertFunctionType(dynamicType,
+ <DartType>[dynamicType, dynamicType], null, null, resultType);
_listener.assertNoErrors();
}
@@ -10208,11 +10008,7 @@
_analyze5(p);
DartType resultType = _analyze(node);
_assertFunctionType(
- _typeProvider.intType,
- <DartType>[dynamicType],
- null,
- null,
- resultType);
+ _typeProvider.intType, <DartType>[dynamicType], null, null, resultType);
_listener.assertNoErrors();
}
@@ -10222,8 +10018,7 @@
FormalParameter p1 = AstFactory.simpleFormalParameter3("p1");
_setType(p1, dynamicType);
FormalParameter p2 = AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("p2"),
- _resolvedInteger(0));
+ AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0));
_setType(p2, dynamicType);
FunctionExpression node = _resolvedFunctionExpression(
AstFactory.formalParameterList([p1, p2]),
@@ -10232,12 +10027,8 @@
DartType resultType = _analyze(node);
Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>();
expectedNamedTypes["p2"] = dynamicType;
- _assertFunctionType(
- dynamicType,
- <DartType>[dynamicType],
- null,
- expectedNamedTypes,
- resultType);
+ _assertFunctionType(dynamicType,
+ <DartType>[dynamicType], null, expectedNamedTypes, resultType);
_listener.assertNoErrors();
}
@@ -10247,8 +10038,7 @@
FormalParameter p1 = AstFactory.simpleFormalParameter3("p1");
_setType(p1, dynamicType);
FormalParameter p2 = AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("p2"),
- _resolvedInteger(0));
+ AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0));
_setType(p2, dynamicType);
FunctionExpression node = _resolvedFunctionExpression(
AstFactory.formalParameterList([p1, p2]),
@@ -10257,12 +10047,8 @@
DartType resultType = _analyze(node);
Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>();
expectedNamedTypes["p2"] = dynamicType;
- _assertFunctionType(
- _typeProvider.intType,
- <DartType>[dynamicType],
- null,
- expectedNamedTypes,
- resultType);
+ _assertFunctionType(_typeProvider.intType,
+ <DartType>[dynamicType], null, expectedNamedTypes, resultType);
_listener.assertNoErrors();
}
@@ -10272,8 +10058,7 @@
FormalParameter p1 = AstFactory.simpleFormalParameter3("p1");
_setType(p1, dynamicType);
FormalParameter p2 = AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("p2"),
- _resolvedInteger(0));
+ AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0));
_setType(p2, dynamicType);
FunctionExpression node = _resolvedFunctionExpression(
AstFactory.formalParameterList([p1, p2]),
@@ -10281,12 +10066,8 @@
_analyze5(p1);
_analyze5(p2);
DartType resultType = _analyze(node);
- _assertFunctionType(
- dynamicType,
- <DartType>[dynamicType],
- <DartType>[dynamicType],
- null,
- resultType);
+ _assertFunctionType(dynamicType,
+ <DartType>[dynamicType], <DartType>[dynamicType], null, resultType);
_listener.assertNoErrors();
}
@@ -10296,8 +10077,7 @@
FormalParameter p1 = AstFactory.simpleFormalParameter3("p1");
_setType(p1, dynamicType);
FormalParameter p2 = AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("p2"),
- _resolvedInteger(0));
+ AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0));
_setType(p2, dynamicType);
FunctionExpression node = _resolvedFunctionExpression(
AstFactory.formalParameterList([p1, p2]),
@@ -10305,12 +10085,8 @@
_analyze5(p1);
_analyze5(p2);
DartType resultType = _analyze(node);
- _assertFunctionType(
- _typeProvider.intType,
- <DartType>[dynamicType],
- <DartType>[dynamicType],
- null,
- resultType);
+ _assertFunctionType(_typeProvider.intType,
+ <DartType>[dynamicType], <DartType>[dynamicType], null, resultType);
_listener.assertNoErrors();
}
@@ -10318,12 +10094,10 @@
// ([p1 = 0, p2 = 0]) {}
DartType dynamicType = _typeProvider.dynamicType;
FormalParameter p1 = AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("p1"),
- _resolvedInteger(0));
+ AstFactory.simpleFormalParameter3("p1"), _resolvedInteger(0));
_setType(p1, dynamicType);
FormalParameter p2 = AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("p2"),
- _resolvedInteger(0));
+ AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0));
_setType(p2, dynamicType);
FunctionExpression node = _resolvedFunctionExpression(
AstFactory.formalParameterList([p1, p2]),
@@ -10331,12 +10105,8 @@
_analyze5(p1);
_analyze5(p2);
DartType resultType = _analyze(node);
- _assertFunctionType(
- dynamicType,
- null,
- <DartType>[dynamicType, dynamicType],
- null,
- resultType);
+ _assertFunctionType(dynamicType,
+ null, <DartType>[dynamicType, dynamicType], null, resultType);
_listener.assertNoErrors();
}
@@ -10344,8 +10114,7 @@
// ([p1 = 0, p2 = 0]) -> 0
DartType dynamicType = _typeProvider.dynamicType;
FormalParameter p = AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("p"),
- _resolvedInteger(0));
+ AstFactory.simpleFormalParameter3("p"), _resolvedInteger(0));
_setType(p, dynamicType);
FunctionExpression node = _resolvedFunctionExpression(
AstFactory.formalParameterList([p]),
@@ -10353,11 +10122,7 @@
_analyze5(p);
DartType resultType = _analyze(node);
_assertFunctionType(
- _typeProvider.intType,
- null,
- <DartType>[dynamicType],
- null,
- resultType);
+ _typeProvider.intType, null, <DartType>[dynamicType], null, resultType);
_listener.assertNoErrors();
}
@@ -10427,9 +10192,7 @@
indexExpression.staticElement = indexMethod;
// list[0] should be in a setter context
AstFactory.assignmentExpression(
- indexExpression,
- TokenType.EQ,
- AstFactory.integer(0));
+ indexExpression, TokenType.EQ, AstFactory.integer(0));
// analyze and assert result of the index expression
expect(_analyze(indexExpression), same(intType));
_listener.assertNoErrors();
@@ -10446,9 +10209,9 @@
constructor.type = constructorType;
classElement.constructors = <ConstructorElement>[constructor];
InstanceCreationExpression node = AstFactory.instanceCreationExpression2(
- null,
- AstFactory.typeName(classElement),
- [AstFactory.identifier3(constructorName)]);
+ null, AstFactory.typeName(classElement), [
+ AstFactory.identifier3(constructorName)
+ ]);
node.staticElement = constructor;
expect(_analyze(node), same(classElement.type));
_listener.assertNoErrors();
@@ -10487,8 +10250,7 @@
constructor.type = constructorType;
classElement.constructors = <ConstructorElement>[constructor];
InstanceCreationExpression node = AstFactory.instanceCreationExpression2(
- null,
- AstFactory.typeName(classElement));
+ null, AstFactory.typeName(classElement));
node.staticElement = constructor;
expect(_analyze(node), same(classElement.type));
_listener.assertNoErrors();
@@ -10504,9 +10266,7 @@
void test_visitIsExpression_negated() {
// a is! String
Expression node = AstFactory.isExpression(
- _resolvedString("a"),
- true,
- AstFactory.typeName4("String"));
+ _resolvedString("a"), true, AstFactory.typeName4("String"));
expect(_analyze(node), same(_typeProvider.boolType));
_listener.assertNoErrors();
}
@@ -10514,9 +10274,7 @@
void test_visitIsExpression_notNegated() {
// a is String
Expression node = AstFactory.isExpression(
- _resolvedString("a"),
- false,
- AstFactory.typeName4("String"));
+ _resolvedString("a"), false, AstFactory.typeName4("String"));
expect(_analyze(node), same(_typeProvider.boolType));
_listener.assertNoErrors();
}
@@ -10525,9 +10283,8 @@
// []
Expression node = AstFactory.listLiteral();
DartType resultType = _analyze(node);
- _assertType2(
- _typeProvider.listType.substitute4(<DartType>[_typeProvider.dynamicType]),
- resultType);
+ _assertType2(_typeProvider.listType
+ .substitute4(<DartType>[_typeProvider.dynamicType]), resultType);
_listener.assertNoErrors();
}
@@ -10535,9 +10292,8 @@
// [0]
Expression node = AstFactory.listLiteral([_resolvedInteger(0)]);
DartType resultType = _analyze(node);
- _assertType2(
- _typeProvider.listType.substitute4(<DartType>[_typeProvider.dynamicType]),
- resultType);
+ _assertType2(_typeProvider.listType
+ .substitute4(<DartType>[_typeProvider.dynamicType]), resultType);
_listener.assertNoErrors();
}
@@ -10545,22 +10301,22 @@
// {}
Expression node = AstFactory.mapLiteral2();
DartType resultType = _analyze(node);
- _assertType2(
- _typeProvider.mapType.substitute4(
- <DartType>[_typeProvider.dynamicType, _typeProvider.dynamicType]),
- resultType);
+ _assertType2(_typeProvider.mapType.substitute4(<DartType>[
+ _typeProvider.dynamicType,
+ _typeProvider.dynamicType
+ ]), resultType);
_listener.assertNoErrors();
}
void test_visitMapLiteral_nonEmpty() {
// {"k" : 0}
- Expression node =
- AstFactory.mapLiteral2([AstFactory.mapLiteralEntry("k", _resolvedInteger(0))]);
+ Expression node = AstFactory
+ .mapLiteral2([AstFactory.mapLiteralEntry("k", _resolvedInteger(0))]);
DartType resultType = _analyze(node);
- _assertType2(
- _typeProvider.mapType.substitute4(
- <DartType>[_typeProvider.dynamicType, _typeProvider.dynamicType]),
- resultType);
+ _assertType2(_typeProvider.mapType.substitute4(<DartType>[
+ _typeProvider.dynamicType,
+ _typeProvider.dynamicType
+ ]), resultType);
_listener.assertNoErrors();
}
@@ -10594,8 +10350,8 @@
void test_visitPostfixExpression_minusMinus() {
// 0--
- PostfixExpression node =
- AstFactory.postfixExpression(_resolvedInteger(0), TokenType.MINUS_MINUS);
+ PostfixExpression node = AstFactory.postfixExpression(
+ _resolvedInteger(0), TokenType.MINUS_MINUS);
expect(_analyze(node), same(_typeProvider.intType));
_listener.assertNoErrors();
}
@@ -10668,8 +10424,8 @@
void test_visitPrefixExpression_not() {
// !true
- Expression node =
- AstFactory.prefixExpression(TokenType.BANG, AstFactory.booleanLiteral(true));
+ Expression node = AstFactory.prefixExpression(
+ TokenType.BANG, AstFactory.booleanLiteral(true));
expect(_analyze(node), same(_typeProvider.boolType));
_listener.assertNoErrors();
}
@@ -10759,11 +10515,11 @@
void test_visitStringInterpolation() {
// "a${'b'}c"
- Expression node = AstFactory.string(
- [
- AstFactory.interpolationString("a", "a"),
- AstFactory.interpolationExpression(_resolvedString("b")),
- AstFactory.interpolationString("c", "c")]);
+ Expression node = AstFactory.string([
+ AstFactory.interpolationString("a", "a"),
+ AstFactory.interpolationExpression(_resolvedString("b")),
+ AstFactory.interpolationString("c", "c")
+ ]);
expect(_analyze(node), same(_typeProvider.stringType));
_listener.assertNoErrors();
}
@@ -10778,15 +10534,14 @@
}
void test_visitSymbolLiteral() {
- expect(
- _analyze(AstFactory.symbolLiteral(["a"])),
+ expect(_analyze(AstFactory.symbolLiteral(["a"])),
same(_typeProvider.symbolType));
}
void test_visitThisExpression() {
// this
- InterfaceType thisType =
- ElementFactory.classElement("B", ElementFactory.classElement2("A").type).type;
+ InterfaceType thisType = ElementFactory.classElement(
+ "B", ElementFactory.classElement2("A").type).type;
Expression node = AstFactory.thisExpression();
expect(_analyze3(node, thisType), same(thisType));
_listener.assertNoErrors();
@@ -10848,14 +10603,13 @@
* the propagated type is being requested
* @return the type associated with the expression
*/
- DartType _analyze4(Expression node, InterfaceType thisType,
- bool useStaticType) {
+ DartType _analyze4(
+ Expression node, InterfaceType thisType, bool useStaticType) {
try {
_analyzer.thisType = thisType;
} catch (exception) {
throw new IllegalArgumentException(
- "Could not set type of 'this'",
- exception);
+ "Could not set type of 'this'", exception);
}
node.accept(_analyzer);
if (useStaticType) {
@@ -10890,9 +10644,7 @@
List<DartType> expectedNormalTypes, List<DartType> expectedOptionalTypes,
Map<String, DartType> expectedNamedTypes, DartType actualType) {
EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionType,
- FunctionType,
- actualType);
+ (obj) => obj is FunctionType, FunctionType, actualType);
FunctionType functionType = actualType as FunctionType;
List<DartType> normalTypes = functionType.normalParameterTypes;
if (expectedNormalTypes == null) {
@@ -10926,8 +10678,8 @@
expect(functionType.returnType, equals(expectedReturnType));
}
- void _assertType(InterfaceTypeImpl expectedType,
- InterfaceTypeImpl actualType) {
+ void _assertType(
+ InterfaceTypeImpl expectedType, InterfaceTypeImpl actualType) {
expect(actualType.displayName, expectedType.displayName);
expect(actualType.element, expectedType.element);
List<DartType> expectedArguments = expectedType.typeArguments;
@@ -10942,9 +10694,7 @@
void _assertType2(DartType expectedType, DartType actualType) {
if (expectedType is InterfaceTypeImpl) {
EngineTestCase.assertInstanceOf(
- (obj) => obj is InterfaceTypeImpl,
- InterfaceTypeImpl,
- actualType);
+ (obj) => obj is InterfaceTypeImpl, InterfaceTypeImpl, actualType);
_assertType(expectedType, actualType as InterfaceTypeImpl);
}
// TODO(brianwilkerson) Compare other kinds of types then make this a shared
@@ -10958,8 +10708,8 @@
*/
StaticTypeAnalyzer _createAnalyzer() {
AnalysisContextImpl context = new AnalysisContextImpl();
- SourceFactory sourceFactory =
- new SourceFactory([new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
+ SourceFactory sourceFactory = new SourceFactory(
+ [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
context.sourceFactory = sourceFactory;
FileBasedSource source =
new FileBasedSource.con1(FileUtilities2.createFile("/lib.dart"));
@@ -10977,8 +10727,7 @@
return _visitor.typeAnalyzer_J2DAccessor as StaticTypeAnalyzer;
} catch (exception) {
throw new IllegalArgumentException(
- "Could not create analyzer",
- exception);
+ "Could not create analyzer", exception);
}
}
@@ -11004,8 +10753,8 @@
* @param body the body of the function
* @return a resolved function expression
*/
- FunctionExpression _resolvedFunctionExpression(FormalParameterList parameters,
- FunctionBody body) {
+ FunctionExpression _resolvedFunctionExpression(
+ FormalParameterList parameters, FunctionBody body) {
List<ParameterElement> parameterElements = new List<ParameterElement>();
for (FormalParameter parameter in parameters.parameters) {
ParameterElementImpl element =
@@ -11081,7 +10830,6 @@
}
}
-
/**
* Instances of the class `StaticTypeVerifier` verify that all of the nodes in an AST
* structure that should have a static type associated with them do have a static type.
@@ -11285,8 +11033,7 @@
return "<unknown file- CompilationUnit.getElement() returned null>";
}
} else {
- return
- "<unknown file- CompilationUnit.getRoot() is not a CompilationUnit>";
+ return "<unknown file- CompilationUnit.getRoot() is not a CompilationUnit>";
}
}
return "<unknown file- ASTNode is null>";
@@ -11504,8 +11251,13 @@
ClassElementImpl classC = ElementFactory.classElement("C", classB.type);
ClassElementImpl classD = ElementFactory.classElement("D", classB.type);
ClassElementImpl classE = ElementFactory.classElement("E", classB.type);
- _definingCompilationUnit.types =
- <ClassElement>[classA, classB, classC, classD, classE];
+ _definingCompilationUnit.types = <ClassElement>[
+ classA,
+ classB,
+ classC,
+ classD,
+ classE
+ ];
HashSet<ClassElement> subtypesOfA =
_subtypeManager.computeAllSubtypes(classA);
List<ClassElement> arraySubtypesOfA = new List.from(subtypesOfA);
@@ -11545,8 +11297,6 @@
}
}
-
-
@reflectiveTest
class TypeOverrideManagerTest extends EngineTestCase {
void test_exitScope_noScopes() {
@@ -11631,9 +11381,7 @@
return a.v; // marker
}''';
_assertTypeOfMarkedExpression(
- code,
- typeProvider.dynamicType,
- typeProvider.intType);
+ code, typeProvider.dynamicType, typeProvider.intType);
}
void fail_finalPropertyInducingVariable_classMember_instance_inherited() {
@@ -11649,13 +11397,10 @@
}
}''';
_assertTypeOfMarkedExpression(
- code,
- typeProvider.dynamicType,
- typeProvider.intType);
+ code, typeProvider.dynamicType, typeProvider.intType);
}
- void
- fail_finalPropertyInducingVariable_classMember_instance_propagatedTarget() {
+ void fail_finalPropertyInducingVariable_classMember_instance_propagatedTarget() {
addNamedSource("/lib.dart", r'''
class A {
final v = 0;
@@ -11668,9 +11413,7 @@
}
}''';
_assertTypeOfMarkedExpression(
- code,
- typeProvider.dynamicType,
- typeProvider.intType);
+ code, typeProvider.dynamicType, typeProvider.intType);
}
void fail_finalPropertyInducingVariable_classMember_static() {
@@ -11684,9 +11427,7 @@
return A.V; // marker
}''';
_assertTypeOfMarkedExpression(
- code,
- typeProvider.dynamicType,
- typeProvider.intType);
+ code, typeProvider.dynamicType, typeProvider.intType);
}
void fail_finalPropertyInducingVariable_topLevelVaraible_prefixed() {
@@ -11697,9 +11438,7 @@
var v2 = p.V; // marker prefixed
}''';
_assertTypeOfMarkedExpression(
- code,
- typeProvider.dynamicType,
- typeProvider.intType);
+ code, typeProvider.dynamicType, typeProvider.intType);
}
void fail_finalPropertyInducingVariable_topLevelVaraible_simple() {
@@ -11710,9 +11449,7 @@
return V; // marker simple
}''';
_assertTypeOfMarkedExpression(
- code,
- typeProvider.dynamicType,
- typeProvider.intType);
+ code, typeProvider.dynamicType, typeProvider.intType);
}
void fail_mergePropagatedTypesAtJoinPoint_1() {
@@ -11846,9 +11583,7 @@
var v = (() {return 42;})();
}''';
_assertPropagatedReturnType(
- code,
- typeProvider.dynamicType,
- typeProvider.intType);
+ code, typeProvider.dynamicType, typeProvider.intType);
}
void test_as() {
@@ -11955,28 +11690,19 @@
}
{
SimpleIdentifier identifier = EngineTestCase.findNode(
- unit,
- code,
- "v; // declare",
- (node) => node is SimpleIdentifier);
+ unit, code, "v; // declare", (node) => node is SimpleIdentifier);
expect(identifier.staticType, same(typeProvider.intType));
expect(identifier.propagatedType, same(null));
}
{
SimpleIdentifier identifier = EngineTestCase.findNode(
- unit,
- code,
- "v = null;",
- (node) => node is SimpleIdentifier);
+ unit, code, "v = null;", (node) => node is SimpleIdentifier);
expect(identifier.staticType, same(typeProvider.intType));
expect(identifier.propagatedType, same(null));
}
{
SimpleIdentifier identifier = EngineTestCase.findNode(
- unit,
- code,
- "v; // return",
- (node) => node is SimpleIdentifier);
+ unit, code, "v; // return", (node) => node is SimpleIdentifier);
expect(identifier.staticType, same(typeProvider.intType));
expect(identifier.propagatedType, same(null));
}
@@ -11994,10 +11720,7 @@
verify([source]);
CompilationUnit unit = resolveCompilationUnit(source, library);
SimpleIdentifier identifier = EngineTestCase.findNode(
- unit,
- code,
- "context",
- (node) => node is SimpleIdentifier);
+ unit, code, "context", (node) => node is SimpleIdentifier);
expect(identifier.propagatedType.name, "CanvasRenderingContext2D");
}
@@ -12018,16 +11741,13 @@
// in the declaration
{
SimpleIdentifier identifier = EngineTestCase.findNode(
- unit,
- code,
- "e in",
- (node) => node is SimpleIdentifier);
+ unit, code, "e in", (node) => node is SimpleIdentifier);
expect(identifier.propagatedType, same(stringType));
}
// in the loop body
{
- SimpleIdentifier identifier =
- EngineTestCase.findNode(unit, code, "e;", (node) => node is SimpleIdentifier);
+ SimpleIdentifier identifier = EngineTestCase.findNode(
+ unit, code, "e;", (node) => node is SimpleIdentifier);
expect(identifier.propagatedType, same(stringType));
}
}
@@ -12051,25 +11771,19 @@
// k
DartType intType = typeProvider.intType;
FormalParameter kParameter = EngineTestCase.findNode(
- unit,
- code,
- "k, ",
- (node) => node is SimpleFormalParameter);
+ unit, code, "k, ", (node) => node is SimpleFormalParameter);
expect(kParameter.identifier.propagatedType, same(intType));
- SimpleIdentifier kIdentifier =
- EngineTestCase.findNode(unit, code, "k;", (node) => node is SimpleIdentifier);
+ SimpleIdentifier kIdentifier = EngineTestCase.findNode(
+ unit, code, "k;", (node) => node is SimpleIdentifier);
expect(kIdentifier.propagatedType, same(intType));
expect(kIdentifier.staticType, same(typeProvider.dynamicType));
// v
DartType stringType = typeProvider.stringType;
FormalParameter vParameter = EngineTestCase.findNode(
- unit,
- code,
- "v)",
- (node) => node is SimpleFormalParameter);
+ unit, code, "v)", (node) => node is SimpleFormalParameter);
expect(vParameter.identifier.propagatedType, same(stringType));
- SimpleIdentifier vIdentifier =
- EngineTestCase.findNode(unit, code, "v;", (node) => node is SimpleIdentifier);
+ SimpleIdentifier vIdentifier = EngineTestCase.findNode(
+ unit, code, "v;", (node) => node is SimpleIdentifier);
expect(vIdentifier.propagatedType, same(stringType));
expect(vIdentifier.staticType, same(typeProvider.dynamicType));
}
@@ -12091,23 +11805,16 @@
// k
DartType intType = typeProvider.intType;
FormalParameter kParameter = EngineTestCase.findNode(
- unit,
- code,
- "k, ",
- (node) => node is SimpleFormalParameter);
+ unit, code, "k, ", (node) => node is SimpleFormalParameter);
expect(kParameter.identifier.propagatedType, same(intType));
// v
DartType stringType = typeProvider.stringType;
FormalParameter vParameter = EngineTestCase.findNode(
- unit,
- code,
- "v)",
- (node) => node is SimpleFormalParameter);
+ unit, code, "v)", (node) => node is SimpleFormalParameter);
expect(vParameter.identifier.propagatedType, same(stringType));
}
- void
- test_functionExpression_asInvocationArgument_functionExpressionInvocation() {
+ void test_functionExpression_asInvocationArgument_functionExpressionInvocation() {
String code = r'''
main() {
(f(String value)) {} ((v) {
@@ -12122,12 +11829,12 @@
// v
DartType dynamicType = typeProvider.dynamicType;
DartType stringType = typeProvider.stringType;
- FormalParameter vParameter =
- EngineTestCase.findNode(unit, code, "v)", (node) => node is FormalParameter);
+ FormalParameter vParameter = EngineTestCase.findNode(
+ unit, code, "v)", (node) => node is FormalParameter);
expect(vParameter.identifier.propagatedType, same(stringType));
expect(vParameter.identifier.staticType, same(dynamicType));
- SimpleIdentifier vIdentifier =
- EngineTestCase.findNode(unit, code, "v;", (node) => node is SimpleIdentifier);
+ SimpleIdentifier vIdentifier = EngineTestCase.findNode(
+ unit, code, "v;", (node) => node is SimpleIdentifier);
expect(vIdentifier.propagatedType, same(stringType));
expect(vIdentifier.staticType, same(dynamicType));
}
@@ -12150,14 +11857,11 @@
// v
DartType intType = typeProvider.intType;
FormalParameter vParameter = EngineTestCase.findNode(
- unit,
- code,
- "v)",
- (node) => node is SimpleFormalParameter);
+ unit, code, "v)", (node) => node is SimpleFormalParameter);
expect(vParameter.identifier.propagatedType, same(null));
expect(vParameter.identifier.staticType, same(intType));
- SimpleIdentifier vIdentifier =
- EngineTestCase.findNode(unit, code, "v;", (node) => node is SimpleIdentifier);
+ SimpleIdentifier vIdentifier = EngineTestCase.findNode(
+ unit, code, "v;", (node) => node is SimpleIdentifier);
expect(vIdentifier.staticType, same(intType));
expect(vIdentifier.propagatedType, same(null));
}
@@ -12178,12 +11882,8 @@
CompilationUnit unit = resolveCompilationUnit(source, library);
// () => 0
FunctionExpression functionExpression = EngineTestCase.findNode(
- unit,
- code,
- "() => 0)",
- (node) => node is FunctionExpression);
- expect(
- (functionExpression.staticType as FunctionType).parameters.length,
+ unit, code, "() => 0)", (node) => node is FunctionExpression);
+ expect((functionExpression.staticType as FunctionType).parameters.length,
same(0));
expect(functionExpression.propagatedType, same(null));
}
@@ -12206,14 +11906,11 @@
// v
DartType stringType = typeProvider.stringType;
FormalParameter vParameter = EngineTestCase.findNode(
- unit,
- code,
- "v)",
- (node) => node is SimpleFormalParameter);
+ unit, code, "v)", (node) => node is SimpleFormalParameter);
expect(vParameter.identifier.propagatedType, same(stringType));
expect(vParameter.identifier.staticType, same(typeProvider.objectType));
- SimpleIdentifier vIdentifier =
- EngineTestCase.findNode(unit, code, "v;", (node) => node is SimpleIdentifier);
+ SimpleIdentifier vIdentifier = EngineTestCase.findNode(
+ unit, code, "v;", (node) => node is SimpleIdentifier);
expect(vIdentifier.propagatedType, same(stringType));
}
@@ -12235,24 +11932,15 @@
CompilationUnit unit = resolveCompilationUnit(source, library);
// p1
FormalParameter p1 = EngineTestCase.findNode(
- unit,
- code,
- "p1) {",
- (node) => node is SimpleFormalParameter);
+ unit, code, "p1) {", (node) => node is SimpleFormalParameter);
expect(p1.identifier.propagatedType, same(typeProvider.intType));
// p2
FormalParameter p2 = EngineTestCase.findNode(
- unit,
- code,
- "p2) {",
- (node) => node is SimpleFormalParameter);
+ unit, code, "p2) {", (node) => node is SimpleFormalParameter);
expect(p2.identifier.propagatedType, same(typeProvider.doubleType));
// p3
FormalParameter p3 = EngineTestCase.findNode(
- unit,
- code,
- "p3) {",
- (node) => node is SimpleFormalParameter);
+ unit, code, "p3) {", (node) => node is SimpleFormalParameter);
expect(p3.identifier.propagatedType, same(typeProvider.stringType));
}
@@ -12304,6 +11992,68 @@
expect(variableName.propagatedType, same(typeProvider.stringType));
}
+ void test_initializer_hasStaticType() {
+ Source source = addSource(r'''
+f() {
+ int v = 0;
+ return v;
+}''');
+ LibraryElement library = resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ CompilationUnit unit = resolveCompilationUnit(source, library);
+ FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
+ BlockFunctionBody body =
+ function.functionExpression.body as BlockFunctionBody;
+ NodeList<Statement> statements = body.block.statements;
+ // Type of 'v' in declaration.
+ {
+ VariableDeclarationStatement statement =
+ statements[0] as VariableDeclarationStatement;
+ SimpleIdentifier variableName = statement.variables.variables[0].name;
+ expect(variableName.staticType, same(typeProvider.intType));
+ expect(variableName.propagatedType, isNull);
+ }
+ // Type of 'v' in reference.
+ {
+ ReturnStatement statement = statements[1] as ReturnStatement;
+ SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
+ expect(variableName.staticType, same(typeProvider.intType));
+ expect(variableName.propagatedType, isNull);
+ }
+ }
+
+ void test_initializer_hasStaticType_parameterized() {
+ Source source = addSource(r'''
+f() {
+ List<int> v = <int>[];
+ return v;
+}''');
+ LibraryElement library = resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ CompilationUnit unit = resolveCompilationUnit(source, library);
+ FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
+ BlockFunctionBody body =
+ function.functionExpression.body as BlockFunctionBody;
+ NodeList<Statement> statements = body.block.statements;
+ // Type of 'v' in declaration.
+ {
+ VariableDeclarationStatement statement =
+ statements[0] as VariableDeclarationStatement;
+ SimpleIdentifier variableName = statement.variables.variables[0].name;
+ expect(variableName.staticType, isNotNull);
+ expect(variableName.propagatedType, isNull);
+ }
+ // Type of 'v' in reference.
+ {
+ ReturnStatement statement = statements[1] as ReturnStatement;
+ SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
+ expect(variableName.staticType, isNotNull);
+ expect(variableName.propagatedType, isNull);
+ }
+ }
+
void test_initializer_null() {
String code = r'''
main() {
@@ -12320,19 +12070,13 @@
}
{
SimpleIdentifier identifier = EngineTestCase.findNode(
- unit,
- code,
- "v = null;",
- (node) => node is SimpleIdentifier);
+ unit, code, "v = null;", (node) => node is SimpleIdentifier);
expect(identifier.staticType, same(typeProvider.intType));
expect(identifier.propagatedType, same(null));
}
{
SimpleIdentifier identifier = EngineTestCase.findNode(
- unit,
- code,
- "v; // marker",
- (node) => node is SimpleIdentifier);
+ unit, code, "v; // marker", (node) => node is SimpleIdentifier);
expect(identifier.staticType, same(typeProvider.intType));
expect(identifier.propagatedType, same(null));
}
@@ -12507,7 +12251,8 @@
ReturnStatement statement =
(ifStatement.thenStatement as Block).statements[0] as ReturnStatement;
MethodInvocation invocation = statement.expression as MethodInvocation;
- expect(invocation.methodName.propagatedElement, isNotNull);
+ expect(invocation.methodName.staticElement, isNotNull);
+ expect(invocation.methodName.propagatedElement, isNull);
}
void test_is_while() {
@@ -12680,7 +12425,6 @@
// following, when the propagated type of [x] is [A] -- as happens for the
// fix these tests aim to warn against -- there is no warning for
-
// calling a method defined on [B] but not [A] (there aren't any, but
// pretend), but there is for calling a method not defined on either.
// By not overriding the propagated type via an is-check that loses
@@ -12902,9 +12646,7 @@
var v = f();
}''';
_assertPropagatedReturnType(
- code,
- typeProvider.dynamicType,
- typeProvider.stringType);
+ code, typeProvider.dynamicType, typeProvider.stringType);
}
void test_propagatedReturnType_function_lessSpecificStaticReturnType() {
@@ -12914,9 +12656,7 @@
var v = f();
}''';
_assertPropagatedReturnType(
- code,
- typeProvider.dynamicType,
- typeProvider.intType);
+ code, typeProvider.dynamicType, typeProvider.intType);
}
void test_propagatedReturnType_function_moreSpecificStaticReturnType() {
@@ -12926,13 +12666,10 @@
var v = f(3);
}''';
_assertPropagatedReturnType(
- code,
- typeProvider.dynamicType,
- typeProvider.intType);
+ code, typeProvider.dynamicType, typeProvider.intType);
}
- void
- test_propagatedReturnType_function_noReturnTypeName_blockBody_multipleReturns() {
+ void test_propagatedReturnType_function_noReturnTypeName_blockBody_multipleReturns() {
String code = r'''
f() {
if (true) return 0;
@@ -12942,13 +12679,10 @@
var v = f();
}''';
_assertPropagatedReturnType(
- code,
- typeProvider.dynamicType,
- typeProvider.numType);
+ code, typeProvider.dynamicType, typeProvider.numType);
}
- void
- test_propagatedReturnType_function_noReturnTypeName_blockBody_oneReturn() {
+ void test_propagatedReturnType_function_noReturnTypeName_blockBody_oneReturn() {
String code = r'''
f() {
var z = 42;
@@ -12958,9 +12692,7 @@
var v = f();
}''';
_assertPropagatedReturnType(
- code,
- typeProvider.dynamicType,
- typeProvider.intType);
+ code, typeProvider.dynamicType, typeProvider.intType);
}
void test_propagatedReturnType_function_noReturnTypeName_expressionBody() {
@@ -12970,9 +12702,7 @@
var v = f();
}''';
_assertPropagatedReturnType(
- code,
- typeProvider.dynamicType,
- typeProvider.intType);
+ code, typeProvider.dynamicType, typeProvider.intType);
}
void test_propagatedReturnType_localFunction() {
@@ -12982,9 +12712,7 @@
var v = f();
}''';
_assertPropagatedReturnType(
- code,
- typeProvider.dynamicType,
- typeProvider.intType);
+ code, typeProvider.dynamicType, typeProvider.intType);
}
void test_query() {
@@ -13078,10 +12806,7 @@
// Could generalize this further by making [SimpleIdentifier.class] a
// parameter.
return EngineTestCase.findNode(
- unit,
- code,
- marker,
- (node) => node is SimpleIdentifier);
+ unit, code, marker, (node) => node is SimpleIdentifier);
} catch (exception) {
// Is there a better exception to throw here? The point is that an
// assertion failure here should be a failure, in both "test_*" and
@@ -13093,7 +12818,6 @@
}
}
-
@reflectiveTest
class TypeProviderImplTest extends EngineTestCase {
void test_creation() {
@@ -13122,29 +12846,28 @@
CompilationUnitElementImpl coreUnit =
new CompilationUnitElementImpl("core.dart");
coreUnit.types = <ClassElement>[
- boolType.element,
- doubleType.element,
- functionType.element,
- intType.element,
- iterableType.element,
- listType.element,
- mapType.element,
- objectType.element,
- stackTraceType.element,
- stringType.element,
- symbolType.element,
- typeType.element];
+ boolType.element,
+ doubleType.element,
+ functionType.element,
+ intType.element,
+ iterableType.element,
+ listType.element,
+ mapType.element,
+ objectType.element,
+ stackTraceType.element,
+ stringType.element,
+ symbolType.element,
+ typeType.element
+ ];
CompilationUnitElementImpl asyncUnit =
new CompilationUnitElementImpl("async.dart");
asyncUnit.types = <ClassElement>[futureType.element, streamType.element];
AnalysisContextImpl context = new AnalysisContextImpl();
LibraryElementImpl coreLibrary = new LibraryElementImpl.forNode(
- context,
- AstFactory.libraryIdentifier2(["dart.core"]));
+ context, AstFactory.libraryIdentifier2(["dart.core"]));
coreLibrary.definingCompilationUnit = coreUnit;
LibraryElementImpl asyncLibrary = new LibraryElementImpl.forNode(
- context,
- AstFactory.libraryIdentifier2(["dart.async"]));
+ context, AstFactory.libraryIdentifier2(["dart.async"]));
asyncLibrary.definingCompilationUnit = asyncUnit;
//
// Create a type provider and ensure that it can return the expected types.
@@ -13182,7 +12905,8 @@
new List<TypeParameterTypeImpl>(count);
for (int i = 0; i < count; i++) {
TypeParameterElementImpl typeParameter =
- new TypeParameterElementImpl.forNode(AstFactory.identifier3(parameterNames[i]));
+ new TypeParameterElementImpl.forNode(
+ AstFactory.identifier3(parameterNames[i]));
typeParameters[i] = typeParameter;
typeArguments[i] = new TypeParameterTypeImpl(typeParameter);
typeParameter.type = typeArguments[i];
@@ -13268,21 +12992,17 @@
new FileBasedSource.con1(FileUtilities2.createFile("/lib.dart"));
_library = new Library(context, _listener, librarySource);
LibraryElementImpl element = new LibraryElementImpl.forNode(
- context,
- AstFactory.libraryIdentifier2(["lib"]));
+ context, AstFactory.libraryIdentifier2(["lib"]));
element.definingCompilationUnit =
new CompilationUnitElementImpl("lib.dart");
_library.libraryElement = element;
_typeProvider = new TestTypeProvider();
_visitor =
new TypeResolverVisitor.con1(_library, librarySource, _typeProvider);
- _implicitConstructorBuilder = new ImplicitConstructorBuilder(
- librarySource,
- _library.libraryElement,
- _library.libraryScope,
- _typeProvider,
- (ClassElement classElement, ClassElement superclassElement, void computation())
- {
+ _implicitConstructorBuilder = new ImplicitConstructorBuilder(librarySource,
+ _library.libraryElement, _library.libraryScope, _typeProvider,
+ (ClassElement classElement, ClassElement superclassElement,
+ void computation()) {
// For these tests, we assume the classes for which implicit
// constructors need to be built are visited in proper dependency order,
// so we just invoke the computation immediately.
@@ -13310,9 +13030,7 @@
stackTraceParameter.staticElement =
new LocalVariableElementImpl.forNode(stackTraceParameter);
_resolveCatchClause(
- clause,
- _typeProvider.dynamicType,
- _typeProvider.stackTraceType);
+ clause, _typeProvider.dynamicType, _typeProvider.stackTraceType);
_listener.assertNoErrors();
}
@@ -13325,10 +13043,7 @@
exceptionParameter.staticElement =
new LocalVariableElementImpl.forNode(exceptionParameter);
_resolveCatchClause(
- clause,
- exceptionElement.type,
- null,
- [exceptionElement]);
+ clause, exceptionElement.type, null, [exceptionElement]);
_listener.assertNoErrors();
}
@@ -13344,11 +13059,8 @@
SimpleIdentifier stackTraceParameter = clause.stackTraceParameter;
stackTraceParameter.staticElement =
new LocalVariableElementImpl.forNode(stackTraceParameter);
- _resolveCatchClause(
- clause,
- exceptionElement.type,
- _typeProvider.stackTraceType,
- [exceptionElement]);
+ _resolveCatchClause(clause, exceptionElement.type,
+ _typeProvider.stackTraceType, [exceptionElement]);
_listener.assertNoErrors();
}
@@ -13368,12 +13080,7 @@
ImplementsClause implementsClause =
AstFactory.implementsClause([AstFactory.typeName(elementD)]);
ClassDeclaration declaration = AstFactory.classDeclaration(
- null,
- "A",
- null,
- extendsClause,
- withClause,
- implementsClause);
+ null, "A", null, extendsClause, withClause, implementsClause);
declaration.name.staticElement = elementA;
_resolveNode(declaration, [elementA, elementB, elementC, elementD]);
expect(elementA.supertype, same(elementB.type));
@@ -13393,8 +13100,9 @@
// }
ClassElementImpl elementA = ElementFactory.classElement2("A");
ClassElementImpl elementB = ElementFactory.classElement2("B");
- elementB.methods =
- <MethodElement>[ElementFactory.methodElement("A", VoidTypeImpl.instance)];
+ elementB.methods = <MethodElement>[
+ ElementFactory.methodElement("A", VoidTypeImpl.instance)
+ ];
ExtendsClause extendsClause =
AstFactory.extendsClause(AstFactory.typeName(elementA));
ClassDeclaration declaration =
@@ -13415,13 +13123,8 @@
AstFactory.withClause([AstFactory.typeName(elementC)]);
ImplementsClause implementsClause =
AstFactory.implementsClause([AstFactory.typeName(elementD)]);
- ClassTypeAlias alias = AstFactory.classTypeAlias(
- "A",
- null,
- null,
- AstFactory.typeName(elementB),
- withClause,
- implementsClause);
+ ClassTypeAlias alias = AstFactory.classTypeAlias("A", null, null,
+ AstFactory.typeName(elementB), withClause, implementsClause);
alias.name.staticElement = elementA;
_resolveNode(alias, [elementA, elementB, elementC, elementD]);
expect(elementA.supertype, same(elementB.type));
@@ -13461,12 +13164,7 @@
AstFactory.withClause([AstFactory.typeName(classM, [])]);
ClassElement classC = ElementFactory.classElement2('C', []);
ClassTypeAlias alias = AstFactory.classTypeAlias(
- 'C',
- null,
- null,
- AstFactory.typeName(classB, []),
- withClause,
- null);
+ 'C', null, null, AstFactory.typeName(classB, []), withClause, null);
alias.name.staticElement = classC;
_resolveNode(alias, [classT, classB, classM, classC]);
expect(classC.constructors, hasLength(1));
@@ -13497,12 +13195,7 @@
AstFactory.withClause([AstFactory.typeName(classM, [])]);
ClassElement classC = ElementFactory.classElement2('C', []);
ClassTypeAlias alias = AstFactory.classTypeAlias(
- 'C',
- null,
- null,
- AstFactory.typeName(classB, []),
- withClause,
- null);
+ 'C', null, null, AstFactory.typeName(classB, []), withClause, null);
alias.name.staticElement = classC;
_resolveNode(alias, [classT, classB, classM, classC]);
expect(classC.constructors, hasLength(1));
@@ -13515,8 +13208,7 @@
expect(constructor.localVariables, hasLength(0));
expect(constructor.parameters, hasLength(1));
expect(constructor.parameters[0].type, equals(classT.type));
- expect(
- constructor.parameters[0].name,
+ expect(constructor.parameters[0].name,
equals(constructorB.parameters[0].name));
}
@@ -13534,12 +13226,7 @@
AstFactory.withClause([AstFactory.typeName(classM, [])]);
ClassElement classC = ElementFactory.classElement2('C', []);
ClassTypeAlias alias = AstFactory.classTypeAlias(
- 'C',
- null,
- null,
- AstFactory.typeName(classB, []),
- withClause,
- null);
+ 'C', null, null, AstFactory.typeName(classB, []), withClause, null);
alias.name.staticElement = classC;
_resolveNode(alias, [classB, classM, classC]);
expect(classC.constructors, hasLength(1));
@@ -13562,18 +13249,13 @@
parameter.identifier.staticElement =
ElementFactory.requiredParameter(innerParameterName);
String outerParameterName = "p";
- FormalParameter node = AstFactory.fieldFormalParameter(
- null,
- intTypeName,
- outerParameterName,
- AstFactory.formalParameterList([parameter]));
+ FormalParameter node = AstFactory.fieldFormalParameter(null, intTypeName,
+ outerParameterName, AstFactory.formalParameterList([parameter]));
node.identifier.staticElement =
ElementFactory.requiredParameter(outerParameterName);
DartType parameterType = _resolveFormalParameter(node, [intType.element]);
EngineTestCase.assertInstanceOf(
- (obj) => obj is FunctionType,
- FunctionType,
- parameterType);
+ (obj) => obj is FunctionType, FunctionType, parameterType);
FunctionType functionType = parameterType as FunctionType;
expect(functionType.returnType, same(intType));
expect(functionType.parameters, hasLength(1));
@@ -13680,8 +13362,9 @@
* @param definedElements the elements that are to be defined in the scope in which the element is
* being resolved
*/
- void _resolveCatchClause(CatchClause node, DartType exceptionType,
- InterfaceType stackTraceType, [List<Element> definedElements]) {
+ void _resolveCatchClause(
+ CatchClause node, DartType exceptionType, InterfaceType stackTraceType,
+ [List<Element> definedElements]) {
_resolveNode(node, definedElements);
SimpleIdentifier exceptionParameter = node.exceptionParameter;
if (exceptionParameter != null) {
@@ -13728,11 +13411,9 @@
}
}
-class _AnalysisContextFactory_initContextWithCore extends DirectoryBasedDartSdk
- {
-
- _AnalysisContextFactory_initContextWithCore(JavaFile arg0)
- : super(arg0);
+class _AnalysisContextFactory_initContextWithCore
+ extends DirectoryBasedDartSdk {
+ _AnalysisContextFactory_initContextWithCore(JavaFile arg0) : super(arg0);
@override
LibraryMap initialLibraryMap(bool useDart2jsPaths) {
@@ -13741,16 +13422,10 @@
_addLibrary(map, DartSdk.DART_CORE, false, "core.dart");
_addLibrary(map, DartSdk.DART_HTML, false, "html_dartium.dart");
_addLibrary(map, AnalysisContextFactory._DART_MATH, false, "math.dart");
- _addLibrary(
- map,
- AnalysisContextFactory._DART_INTERCEPTORS,
- true,
+ _addLibrary(map, AnalysisContextFactory._DART_INTERCEPTORS, true,
"_interceptors.dart");
_addLibrary(
- map,
- AnalysisContextFactory._DART_JS_HELPER,
- true,
- "_js_helper.dart");
+ map, AnalysisContextFactory._DART_JS_HELPER, true, "_js_helper.dart");
return map;
}
@@ -13764,16 +13439,16 @@
}
}
-class _SimpleResolverTest_localVariable_types_invoked extends
- RecursiveAstVisitor<Object> {
+class _SimpleResolverTest_localVariable_types_invoked
+ extends RecursiveAstVisitor<Object> {
final SimpleResolverTest test;
List<bool> found;
List<CaughtException> thrownException;
- _SimpleResolverTest_localVariable_types_invoked(this.test, this.found,
- this.thrownException)
+ _SimpleResolverTest_localVariable_types_invoked(
+ this.test, this.found, this.thrownException)
: super();
@override
diff --git a/pkg/analyzer/test/generated/scanner_test.dart b/pkg/analyzer/test/generated/scanner_test.dart
index 59321ec..19e2a02 100644
--- a/pkg/analyzer/test/generated/scanner_test.dart
+++ b/pkg/analyzer/test/generated/scanner_test.dart
@@ -172,14 +172,12 @@
class ScannerTest {
void fail_incomplete_string_interpolation() {
// https://code.google.com/p/dart/issues/detail?id=18073
- _assertErrorAndTokens(
- ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
- 9,
- "\"foo \${bar",
- [
- new StringToken(TokenType.STRING, "\"foo ", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 5),
- new StringToken(TokenType.IDENTIFIER, "bar", 7)]);
+ _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 9,
+ "\"foo \${bar", [
+ new StringToken(TokenType.STRING, "\"foo ", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 5),
+ new StringToken(TokenType.IDENTIFIER, "bar", 7)
+ ]);
}
void test_ampersand() {
@@ -255,8 +253,7 @@
}
void test_comment_disabled_multi() {
- Scanner scanner = new Scanner(
- null,
+ Scanner scanner = new Scanner(null,
new CharSequenceReader("/* comment */ "),
AnalysisErrorListener.NULL_LISTENER);
scanner.preserveComments = false;
@@ -275,8 +272,7 @@
void test_comment_nested() {
_assertComment(
- TokenType.MULTI_LINE_COMMENT,
- "/* comment /* within a */ comment */");
+ TokenType.MULTI_LINE_COMMENT, "/* comment /* within a */ comment */");
}
void test_comment_single() {
@@ -581,42 +577,38 @@
void test_lineInfo_multilineComment() {
String source = "/*\r *\r */";
- _assertLineInfo(
- source,
- [
- new ScannerTest_ExpectedLocation(0, 1, 1),
- new ScannerTest_ExpectedLocation(4, 2, 2),
- new ScannerTest_ExpectedLocation(source.length - 1, 3, 3)]);
+ _assertLineInfo(source, [
+ new ScannerTest_ExpectedLocation(0, 1, 1),
+ new ScannerTest_ExpectedLocation(4, 2, 2),
+ new ScannerTest_ExpectedLocation(source.length - 1, 3, 3)
+ ]);
}
void test_lineInfo_multilineString() {
String source = "'''a\r\nbc\r\nd'''";
- _assertLineInfo(
- source,
- [
- new ScannerTest_ExpectedLocation(0, 1, 1),
- new ScannerTest_ExpectedLocation(7, 2, 2),
- new ScannerTest_ExpectedLocation(source.length - 1, 3, 4)]);
+ _assertLineInfo(source, [
+ new ScannerTest_ExpectedLocation(0, 1, 1),
+ new ScannerTest_ExpectedLocation(7, 2, 2),
+ new ScannerTest_ExpectedLocation(source.length - 1, 3, 4)
+ ]);
}
void test_lineInfo_simpleClass() {
String source =
"class Test {\r\n String s = '...';\r\n int get x => s.MISSING_GETTER;\r\n}";
- _assertLineInfo(
- source,
- [
- new ScannerTest_ExpectedLocation(0, 1, 1),
- new ScannerTest_ExpectedLocation(source.indexOf("MISSING_GETTER"), 3, 20),
- new ScannerTest_ExpectedLocation(source.length - 1, 4, 1)]);
+ _assertLineInfo(source, [
+ new ScannerTest_ExpectedLocation(0, 1, 1),
+ new ScannerTest_ExpectedLocation(source.indexOf("MISSING_GETTER"), 3, 20),
+ new ScannerTest_ExpectedLocation(source.length - 1, 4, 1)
+ ]);
}
void test_lineInfo_slashN() {
String source = "class Test {\n}";
- _assertLineInfo(
- source,
- [
- new ScannerTest_ExpectedLocation(0, 1, 1),
- new ScannerTest_ExpectedLocation(source.indexOf("}"), 2, 1)]);
+ _assertLineInfo(source, [
+ new ScannerTest_ExpectedLocation(0, 1, 1),
+ new ScannerTest_ExpectedLocation(source.indexOf("}"), 2, 1)
+ ]);
}
void test_lt() {
@@ -676,25 +668,23 @@
}
void test_periodAfterNumberNotIncluded_identifier() {
- _assertTokens(
- "42.isEven()",
- [
- new StringToken(TokenType.INT, "42", 0),
- new Token(TokenType.PERIOD, 2),
- new StringToken(TokenType.IDENTIFIER, "isEven", 3),
- new Token(TokenType.OPEN_PAREN, 9),
- new Token(TokenType.CLOSE_PAREN, 10)]);
+ _assertTokens("42.isEven()", [
+ new StringToken(TokenType.INT, "42", 0),
+ new Token(TokenType.PERIOD, 2),
+ new StringToken(TokenType.IDENTIFIER, "isEven", 3),
+ new Token(TokenType.OPEN_PAREN, 9),
+ new Token(TokenType.CLOSE_PAREN, 10)
+ ]);
}
void test_periodAfterNumberNotIncluded_period() {
- _assertTokens(
- "42..isEven()",
- [
- new StringToken(TokenType.INT, "42", 0),
- new Token(TokenType.PERIOD_PERIOD, 2),
- new StringToken(TokenType.IDENTIFIER, "isEven", 4),
- new Token(TokenType.OPEN_PAREN, 10),
- new Token(TokenType.CLOSE_PAREN, 11)]);
+ _assertTokens("42..isEven()", [
+ new StringToken(TokenType.INT, "42", 0),
+ new Token(TokenType.PERIOD_PERIOD, 2),
+ new StringToken(TokenType.IDENTIFIER, "isEven", 4),
+ new Token(TokenType.OPEN_PAREN, 10),
+ new Token(TokenType.CLOSE_PAREN, 11)
+ ]);
}
void test_period_period() {
@@ -789,24 +779,22 @@
}
void test_string_multi_interpolation_block() {
- _assertTokens(
- "\"Hello \${name}!\"",
- [
- new StringToken(TokenType.STRING, "\"Hello ", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7),
- new StringToken(TokenType.IDENTIFIER, "name", 9),
- new Token(TokenType.CLOSE_CURLY_BRACKET, 13),
- new StringToken(TokenType.STRING, "!\"", 14)]);
+ _assertTokens("\"Hello \${name}!\"", [
+ new StringToken(TokenType.STRING, "\"Hello ", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7),
+ new StringToken(TokenType.IDENTIFIER, "name", 9),
+ new Token(TokenType.CLOSE_CURLY_BRACKET, 13),
+ new StringToken(TokenType.STRING, "!\"", 14)
+ ]);
}
void test_string_multi_interpolation_identifier() {
- _assertTokens(
- "\"Hello \$name!\"",
- [
- new StringToken(TokenType.STRING, "\"Hello ", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7),
- new StringToken(TokenType.IDENTIFIER, "name", 8),
- new StringToken(TokenType.STRING, "!\"", 12)]);
+ _assertTokens("\"Hello \$name!\"", [
+ new StringToken(TokenType.STRING, "\"Hello ", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7),
+ new StringToken(TokenType.IDENTIFIER, "name", 8),
+ new StringToken(TokenType.STRING, "!\"", 12)
+ ]);
}
void test_string_multi_single() {
@@ -818,35 +806,28 @@
}
void test_string_multi_unterminated() {
- _assertErrorAndTokens(
- ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
- 8,
- "'''string",
- [new StringToken(TokenType.STRING, "'''string", 0)]);
+ _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8,
+ "'''string", [new StringToken(TokenType.STRING, "'''string", 0)]);
}
void test_string_multi_unterminated_interpolation_block() {
- _assertErrorAndTokens(
- ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
- 8,
- "'''\${name",
- [
- new StringToken(TokenType.STRING, "'''", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 3),
- new StringToken(TokenType.IDENTIFIER, "name", 5),
- new StringToken(TokenType.STRING, "", 9)]);
+ _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8,
+ "'''\${name", [
+ new StringToken(TokenType.STRING, "'''", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 3),
+ new StringToken(TokenType.IDENTIFIER, "name", 5),
+ new StringToken(TokenType.STRING, "", 9)
+ ]);
}
void test_string_multi_unterminated_interpolation_identifier() {
- _assertErrorAndTokens(
- ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
- 7,
- "'''\$name",
- [
- new StringToken(TokenType.STRING, "'''", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3),
- new StringToken(TokenType.IDENTIFIER, "name", 4),
- new StringToken(TokenType.STRING, "", 8)]);
+ _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 7,
+ "'''\$name", [
+ new StringToken(TokenType.STRING, "'''", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3),
+ new StringToken(TokenType.IDENTIFIER, "name", 4),
+ new StringToken(TokenType.STRING, "", 8)
+ ]);
}
void test_string_raw_multi_double() {
@@ -859,11 +840,8 @@
void test_string_raw_multi_unterminated() {
String source = "r'''string";
- _assertErrorAndTokens(
- ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
- 9,
- source,
- [new StringToken(TokenType.STRING, source, 0)]);
+ _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
+ 9, source, [new StringToken(TokenType.STRING, source, 0)]);
}
void test_string_raw_simple_double() {
@@ -876,20 +854,14 @@
void test_string_raw_simple_unterminated_eof() {
String source = "r'string";
- _assertErrorAndTokens(
- ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
- 7,
- source,
- [new StringToken(TokenType.STRING, source, 0)]);
+ _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
+ 7, source, [new StringToken(TokenType.STRING, source, 0)]);
}
void test_string_raw_simple_unterminated_eol() {
String source = "r'string";
- _assertErrorAndTokens(
- ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
- 8,
- "$source\n",
- [new StringToken(TokenType.STRING, source, 0)]);
+ _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
+ 8, "$source\n", [new StringToken(TokenType.STRING, source, 0)]);
}
void test_string_simple_double() {
@@ -901,89 +873,82 @@
}
void test_string_simple_interpolation_adjacentIdentifiers() {
- _assertTokens(
- "'\$a\$b'",
- [
- new StringToken(TokenType.STRING, "'", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
- new StringToken(TokenType.IDENTIFIER, "a", 2),
- new StringToken(TokenType.STRING, "", 3),
- new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3),
- new StringToken(TokenType.IDENTIFIER, "b", 4),
- new StringToken(TokenType.STRING, "'", 5)]);
+ _assertTokens("'\$a\$b'", [
+ new StringToken(TokenType.STRING, "'", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
+ new StringToken(TokenType.IDENTIFIER, "a", 2),
+ new StringToken(TokenType.STRING, "", 3),
+ new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3),
+ new StringToken(TokenType.IDENTIFIER, "b", 4),
+ new StringToken(TokenType.STRING, "'", 5)
+ ]);
}
void test_string_simple_interpolation_block() {
- _assertTokens(
- "'Hello \${name}!'",
- [
- new StringToken(TokenType.STRING, "'Hello ", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7),
- new StringToken(TokenType.IDENTIFIER, "name", 9),
- new Token(TokenType.CLOSE_CURLY_BRACKET, 13),
- new StringToken(TokenType.STRING, "!'", 14)]);
+ _assertTokens("'Hello \${name}!'", [
+ new StringToken(TokenType.STRING, "'Hello ", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7),
+ new StringToken(TokenType.IDENTIFIER, "name", 9),
+ new Token(TokenType.CLOSE_CURLY_BRACKET, 13),
+ new StringToken(TokenType.STRING, "!'", 14)
+ ]);
}
void test_string_simple_interpolation_blockWithNestedMap() {
- _assertTokens(
- "'a \${f({'b' : 'c'})} d'",
- [
- new StringToken(TokenType.STRING, "'a ", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 3),
- new StringToken(TokenType.IDENTIFIER, "f", 5),
- new Token(TokenType.OPEN_PAREN, 6),
- new Token(TokenType.OPEN_CURLY_BRACKET, 7),
- new StringToken(TokenType.STRING, "'b'", 8),
- new Token(TokenType.COLON, 12),
- new StringToken(TokenType.STRING, "'c'", 14),
- new Token(TokenType.CLOSE_CURLY_BRACKET, 17),
- new Token(TokenType.CLOSE_PAREN, 18),
- new Token(TokenType.CLOSE_CURLY_BRACKET, 19),
- new StringToken(TokenType.STRING, " d'", 20)]);
+ _assertTokens("'a \${f({'b' : 'c'})} d'", [
+ new StringToken(TokenType.STRING, "'a ", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 3),
+ new StringToken(TokenType.IDENTIFIER, "f", 5),
+ new Token(TokenType.OPEN_PAREN, 6),
+ new Token(TokenType.OPEN_CURLY_BRACKET, 7),
+ new StringToken(TokenType.STRING, "'b'", 8),
+ new Token(TokenType.COLON, 12),
+ new StringToken(TokenType.STRING, "'c'", 14),
+ new Token(TokenType.CLOSE_CURLY_BRACKET, 17),
+ new Token(TokenType.CLOSE_PAREN, 18),
+ new Token(TokenType.CLOSE_CURLY_BRACKET, 19),
+ new StringToken(TokenType.STRING, " d'", 20)
+ ]);
}
void test_string_simple_interpolation_firstAndLast() {
- _assertTokens(
- "'\$greeting \$name'",
- [
- new StringToken(TokenType.STRING, "'", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
- new StringToken(TokenType.IDENTIFIER, "greeting", 2),
- new StringToken(TokenType.STRING, " ", 10),
- new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 11),
- new StringToken(TokenType.IDENTIFIER, "name", 12),
- new StringToken(TokenType.STRING, "'", 16)]);
+ _assertTokens("'\$greeting \$name'", [
+ new StringToken(TokenType.STRING, "'", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
+ new StringToken(TokenType.IDENTIFIER, "greeting", 2),
+ new StringToken(TokenType.STRING, " ", 10),
+ new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 11),
+ new StringToken(TokenType.IDENTIFIER, "name", 12),
+ new StringToken(TokenType.STRING, "'", 16)
+ ]);
}
void test_string_simple_interpolation_identifier() {
- _assertTokens(
- "'Hello \$name!'",
- [
- new StringToken(TokenType.STRING, "'Hello ", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7),
- new StringToken(TokenType.IDENTIFIER, "name", 8),
- new StringToken(TokenType.STRING, "!'", 12)]);
+ _assertTokens("'Hello \$name!'", [
+ new StringToken(TokenType.STRING, "'Hello ", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7),
+ new StringToken(TokenType.IDENTIFIER, "name", 8),
+ new StringToken(TokenType.STRING, "!'", 12)
+ ]);
}
void test_string_simple_interpolation_missingIdentifier() {
- _assertTokens(
- "'\$x\$'",
- [
- new StringToken(TokenType.STRING, "'", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
- new StringToken(TokenType.IDENTIFIER, "x", 2),
- new StringToken(TokenType.STRING, "", 3),
- new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3),
- new StringToken(TokenType.STRING, "'", 4)]);
+ _assertTokens("'\$x\$'", [
+ new StringToken(TokenType.STRING, "'", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
+ new StringToken(TokenType.IDENTIFIER, "x", 2),
+ new StringToken(TokenType.STRING, "", 3),
+ new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3),
+ new StringToken(TokenType.STRING, "'", 4)
+ ]);
}
void test_string_simple_interpolation_nonIdentifier() {
- _assertTokens(
- "'\$1'",
- [
- new StringToken(TokenType.STRING, "'", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
- new StringToken(TokenType.STRING, "1'", 2)]);
+ _assertTokens("'\$1'", [
+ new StringToken(TokenType.STRING, "'", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
+ new StringToken(TokenType.STRING, "1'", 2)
+ ]);
}
void test_string_simple_single() {
@@ -992,44 +957,34 @@
void test_string_simple_unterminated_eof() {
String source = "'string";
- _assertErrorAndTokens(
- ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
- 6,
- source,
- [new StringToken(TokenType.STRING, source, 0)]);
+ _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
+ 6, source, [new StringToken(TokenType.STRING, source, 0)]);
}
void test_string_simple_unterminated_eol() {
String source = "'string";
- _assertErrorAndTokens(
- ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
- 7,
- "$source\r",
- [new StringToken(TokenType.STRING, source, 0)]);
+ _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
+ 7, "$source\r", [new StringToken(TokenType.STRING, source, 0)]);
}
void test_string_simple_unterminated_interpolation_block() {
- _assertErrorAndTokens(
- ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
- 6,
- "'\${name",
- [
- new StringToken(TokenType.STRING, "'", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 1),
- new StringToken(TokenType.IDENTIFIER, "name", 3),
- new StringToken(TokenType.STRING, "", 7)]);
+ _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 6,
+ "'\${name", [
+ new StringToken(TokenType.STRING, "'", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 1),
+ new StringToken(TokenType.IDENTIFIER, "name", 3),
+ new StringToken(TokenType.STRING, "", 7)
+ ]);
}
void test_string_simple_unterminated_interpolation_identifier() {
- _assertErrorAndTokens(
- ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
- 5,
- "'\$name",
- [
- new StringToken(TokenType.STRING, "'", 0),
- new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
- new StringToken(TokenType.IDENTIFIER, "name", 2),
- new StringToken(TokenType.STRING, "", 6)]);
+ _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 5,
+ "'\$name", [
+ new StringToken(TokenType.STRING, "'", 0),
+ new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
+ new StringToken(TokenType.IDENTIFIER, "name", 2),
+ new StringToken(TokenType.STRING, "", 6)
+ ]);
}
void test_tilde() {
@@ -1084,18 +1039,15 @@
* [expectedOffset] the string offset that should be associated with the error
* [source] the source to be scanned to produce the error
*/
- void _assertError(ScannerErrorCode expectedError, int expectedOffset,
- String source) {
+ void _assertError(
+ ScannerErrorCode expectedError, int expectedOffset, String source) {
GatheringErrorListener listener = new GatheringErrorListener();
_scanWithListener(source, listener);
- listener.assertErrors(
- [
- new AnalysisError.con2(
- null,
- expectedOffset,
- 1,
- expectedError,
- [source.codeUnitAt(expectedOffset)])]);
+ listener.assertErrors([
+ new AnalysisError.con2(null, expectedOffset, 1, expectedError, [
+ source.codeUnitAt(expectedOffset)
+ ])
+ ]);
}
/**
@@ -1111,14 +1063,11 @@
String source, List<Token> expectedTokens) {
GatheringErrorListener listener = new GatheringErrorListener();
Token token = _scanWithListener(source, listener);
- listener.assertErrors(
- [
- new AnalysisError.con2(
- null,
- expectedOffset,
- 1,
- expectedError,
- [source.codeUnitAt(expectedOffset)])]);
+ listener.assertErrors([
+ new AnalysisError.con2(null, expectedOffset, 1, expectedError, [
+ source.codeUnitAt(expectedOffset)
+ ])
+ ]);
_checkTokens(token, expectedTokens);
}
@@ -1148,8 +1097,8 @@
expect(token.next.type, TokenType.EOF);
}
- void _assertLineInfo(String source,
- List<ScannerTest_ExpectedLocation> expectedLocations) {
+ void _assertLineInfo(
+ String source, List<ScannerTest_ExpectedLocation> expectedLocations) {
GatheringErrorListener listener = new GatheringErrorListener();
_scanWithListener(source, listener);
listener.assertNoErrors();
@@ -1226,17 +1175,11 @@
for (int i = 0; i < expectedTokens.length; i++) {
Token expectedToken = expectedTokens[i];
expect(token.type, expectedToken.type, reason: "Wrong type for token $i");
- expect(
- token.offset,
- expectedToken.offset,
+ expect(token.offset, expectedToken.offset,
reason: "Wrong offset for token $i");
- expect(
- token.length,
- expectedToken.length,
+ expect(token.length, expectedToken.length,
reason: "Wrong length for token $i");
- expect(
- token.lexeme,
- expectedToken.lexeme,
+ expect(token.lexeme, expectedToken.lexeme,
reason: "Wrong lexeme for token $i");
token = token.next;
expect(token, isNotNull);
@@ -1271,8 +1214,8 @@
final int _columnNumber;
- ScannerTest_ExpectedLocation(this._offset, this._lineNumber,
- this._columnNumber);
+ ScannerTest_ExpectedLocation(
+ this._offset, this._lineNumber, this._columnNumber);
}
/**
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
index c0ea73e..fc712ce 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
@@ -11,7 +11,6 @@
import '../reflective_tests.dart';
import 'resolver_test.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(StaticTypeWarningCodeTest);
@@ -87,8 +86,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.EXPECTED_ONE_LIST_TYPE_ARGUMENTS]);
+ source, [StaticTypeWarningCode.EXPECTED_ONE_LIST_TYPE_ARGUMENTS]);
verify([source]);
}
@@ -99,8 +97,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS]);
+ source, [StaticTypeWarningCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS]);
verify([source]);
}
@@ -111,8 +108,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS]);
+ source, [StaticTypeWarningCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS]);
verify([source]);
}
@@ -121,9 +117,10 @@
int f() async {}
''');
resolve(source);
- assertErrors(
- source,
- [StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE, HintCode.MISSING_RETURN]);
+ assertErrors(source, [
+ StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE,
+ HintCode.MISSING_RETURN
+ ]);
verify([source]);
}
@@ -133,8 +130,7 @@
''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE]);
+ source, [StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE]);
verify([source]);
}
@@ -146,8 +142,7 @@
''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE]);
+ source, [StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE]);
verify([source]);
}
@@ -158,9 +153,10 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE, HintCode.MISSING_RETURN]);
+ assertErrors(source, [
+ StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE,
+ HintCode.MISSING_RETURN
+ ]);
verify([source]);
}
@@ -170,8 +166,7 @@
''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE]);
+ source, [StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE]);
verify([source]);
}
@@ -183,8 +178,7 @@
''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE]);
+ source, [StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE]);
verify([source]);
}
@@ -200,8 +194,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+ source, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
verify([source]);
}
@@ -216,8 +209,7 @@
abstract class C implements A, B {}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+ source, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
verify([source]);
}
@@ -232,8 +224,7 @@
abstract class C implements A, B {}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+ source, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
verify([source]);
}
@@ -247,8 +238,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
+ source, [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
verify([source]);
}
@@ -262,8 +252,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
+ source, [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
verify([source]);
}
@@ -277,8 +266,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
+ source, [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
verify([source]);
}
@@ -292,8 +280,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
+ source, [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
verify([source]);
}
@@ -307,8 +294,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
+ source, [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
verify([source]);
}
@@ -510,8 +496,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION]);
+ source, [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION]);
verify([source]);
}
@@ -696,11 +681,10 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [
- StaticTypeWarningCode.RETURN_OF_INVALID_TYPE,
- StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE]);
+ assertErrors(source, [
+ StaticTypeWarningCode.RETURN_OF_INVALID_TYPE,
+ StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE
+ ]);
verify([source]);
}
@@ -801,8 +785,7 @@
class D = G<B> with C;''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -814,8 +797,7 @@
class C extends G<B>{}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -826,8 +808,7 @@
class Y<U> extends X<U> {}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -842,8 +823,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -855,8 +835,7 @@
G<B> f() { return null; }''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -868,8 +847,7 @@
typedef G<B> f();''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -881,8 +859,7 @@
f(G<B> h()) {}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -894,8 +871,7 @@
class C implements G<B>{}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -907,8 +883,7 @@
var b = 1 is G<B>;''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -922,8 +897,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -935,8 +909,7 @@
f() { return new G<B>(); }''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -949,8 +922,7 @@
f() { return new G<A>(); }''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -962,8 +934,7 @@
f(G<B> g) {}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -976,11 +947,10 @@
factory X.name(int x, int y) = X<B>;
}''');
resolve(source);
- assertErrors(
- source,
- [
- StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
- StaticWarningCode.REDIRECT_TO_INVALID_RETURN_TYPE]);
+ assertErrors(source, [
+ StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
+ StaticWarningCode.REDIRECT_TO_INVALID_RETURN_TYPE
+ ]);
verify([source]);
}
@@ -993,8 +963,7 @@
C<D<B>> Var;''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -1007,8 +976,7 @@
class D<F extends G<B>> {}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -1020,8 +988,7 @@
G<B> g;''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -1033,8 +1000,7 @@
class C extends Object with G<B>{}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
+ source, [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]);
verify([source]);
}
@@ -1044,13 +1010,11 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND]);
+ source, [StaticTypeWarningCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND]);
verify([source]);
}
- void
- test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_mutated() {
+ void test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_mutated() {
Source source = addSource(r'''
callMe(f()) { f(); }
main(Object p) {
@@ -1079,8 +1043,7 @@
assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
}
- void
- test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_after() {
+ void test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_after() {
Source source = addSource(r'''
callMe(f()) { f(); }
main(Object p) {
@@ -1091,8 +1054,7 @@
assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
}
- void
- test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_before() {
+ void test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_before() {
Source source = addSource(r'''
callMe(f()) { f(); }
main(Object p) {
@@ -1370,8 +1332,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
+ source, [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
verify([source]);
}
@@ -1385,8 +1346,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
+ source, [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
verify([source]);
}
@@ -1654,9 +1614,9 @@
}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticTypeWarningCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER]);
+ assertErrors(source, [
+ StaticTypeWarningCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER
+ ]);
verify([source]);
}
@@ -1671,9 +1631,9 @@
}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticTypeWarningCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER]);
+ assertErrors(source, [
+ StaticTypeWarningCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER
+ ]);
verify([source]);
}
@@ -1688,9 +1648,9 @@
}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticTypeWarningCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER]);
+ assertErrors(source, [
+ StaticTypeWarningCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER
+ ]);
verify([source]);
}
@@ -1701,8 +1661,7 @@
class B<F extends num> = A<F> with M;''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
+ source, [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
verify([source]);
}
@@ -1712,8 +1671,7 @@
A<A> a = null;''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
+ source, [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
verify([source]);
}
@@ -1723,8 +1681,7 @@
A<A, A> a = null;''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
+ source, [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
verify([source]);
}
@@ -1737,8 +1694,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
+ source, [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
verify([source]);
}
@@ -1751,8 +1707,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
+ source, [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
verify([source]);
}
@@ -1763,11 +1718,10 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [
- StaticTypeWarningCode.YIELD_OF_INVALID_TYPE,
- StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE]);
+ assertErrors(source, [
+ StaticTypeWarningCode.YIELD_OF_INVALID_TYPE,
+ StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE
+ ]);
verify([source]);
}
@@ -1778,11 +1732,10 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [
- StaticTypeWarningCode.YIELD_OF_INVALID_TYPE,
- StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE]);
+ assertErrors(source, [
+ StaticTypeWarningCode.YIELD_OF_INVALID_TYPE,
+ StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE
+ ]);
verify([source]);
}
@@ -1852,11 +1805,10 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [
- StaticTypeWarningCode.YIELD_OF_INVALID_TYPE,
- StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE]);
+ assertErrors(source, [
+ StaticTypeWarningCode.YIELD_OF_INVALID_TYPE,
+ StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE
+ ]);
verify([source]);
}
@@ -1879,11 +1831,10 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [
- StaticTypeWarningCode.YIELD_OF_INVALID_TYPE,
- StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE]);
+ assertErrors(source, [
+ StaticTypeWarningCode.YIELD_OF_INVALID_TYPE,
+ StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE
+ ]);
verify([source]);
}
}
diff --git a/pkg/analyzer/test/generated/static_warning_code_test.dart b/pkg/analyzer/test/generated/static_warning_code_test.dart
index df69a54..06124d6 100644
--- a/pkg/analyzer/test/generated/static_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_test.dart
@@ -11,7 +11,6 @@
import '../reflective_tests.dart';
import 'resolver_test.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(StaticWarningCodeTest);
@@ -33,11 +32,10 @@
class A {
}''');
resolve(source);
- assertErrors(
- source,
- [
- StaticWarningCode.UNDEFINED_IDENTIFIER,
- StaticWarningCode.UNDEFINED_IDENTIFIER]);
+ assertErrors(source, [
+ StaticWarningCode.UNDEFINED_IDENTIFIER,
+ StaticWarningCode.UNDEFINED_IDENTIFIER
+ ]);
}
void fail_undefinedSetter() {
@@ -78,9 +76,10 @@
library lib2;
class N {}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.AMBIGUOUS_IMPORT, CompileTimeErrorCode.EXTENDS_NON_CLASS]);
+ assertErrors(source, [
+ StaticWarningCode.AMBIGUOUS_IMPORT,
+ CompileTimeErrorCode.EXTENDS_NON_CLASS
+ ]);
}
void test_ambiguousImport_implements() {
@@ -95,11 +94,10 @@
library lib2;
class N {}''');
resolve(source);
- assertErrors(
- source,
- [
- StaticWarningCode.AMBIGUOUS_IMPORT,
- CompileTimeErrorCode.IMPLEMENTS_NON_CLASS]);
+ assertErrors(source, [
+ StaticWarningCode.AMBIGUOUS_IMPORT,
+ CompileTimeErrorCode.IMPLEMENTS_NON_CLASS
+ ]);
}
void test_ambiguousImport_inPart() {
@@ -118,9 +116,10 @@
part of lib;
class A extends N {}''');
resolve(source);
- assertErrors(
- partSource,
- [StaticWarningCode.AMBIGUOUS_IMPORT, CompileTimeErrorCode.EXTENDS_NON_CLASS]);
+ assertErrors(partSource, [
+ StaticWarningCode.AMBIGUOUS_IMPORT,
+ CompileTimeErrorCode.EXTENDS_NON_CLASS
+ ]);
}
void test_ambiguousImport_instanceCreation() {
@@ -189,16 +188,15 @@
library lib2;
class N {}''');
resolve(source);
- assertErrors(
- source,
- [
- StaticWarningCode.AMBIGUOUS_IMPORT,
- StaticWarningCode.AMBIGUOUS_IMPORT,
- StaticWarningCode.AMBIGUOUS_IMPORT,
- StaticWarningCode.AMBIGUOUS_IMPORT,
- StaticWarningCode.AMBIGUOUS_IMPORT,
- StaticWarningCode.AMBIGUOUS_IMPORT,
- StaticWarningCode.AMBIGUOUS_IMPORT]);
+ assertErrors(source, [
+ StaticWarningCode.AMBIGUOUS_IMPORT,
+ StaticWarningCode.AMBIGUOUS_IMPORT,
+ StaticWarningCode.AMBIGUOUS_IMPORT,
+ StaticWarningCode.AMBIGUOUS_IMPORT,
+ StaticWarningCode.AMBIGUOUS_IMPORT,
+ StaticWarningCode.AMBIGUOUS_IMPORT,
+ StaticWarningCode.AMBIGUOUS_IMPORT
+ ]);
}
void test_ambiguousImport_typeArgument_annotation() {
@@ -376,11 +374,10 @@
const A(42);
}''');
resolve(source);
- assertErrors(
- source,
- [
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
- CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH]);
+ assertErrors(source, [
+ StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
+ CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+ ]);
verify([source]);
}
@@ -859,8 +856,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
+ source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
verify([source]);
}
@@ -877,8 +873,7 @@
assertErrors(source, [StaticWarningCode.CONFLICTING_DART_IMPORT]);
}
- void
- test_conflictingInstanceGetterAndSuperclassMember_declField_direct_setter() {
+ void test_conflictingInstanceGetterAndSuperclassMember_declField_direct_setter() {
Source source = addSource(r'''
class A {
static set v(x) {}
@@ -887,14 +882,13 @@
var v;
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
+ assertErrors(source, [
+ StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER
+ ]);
verify([source]);
}
- void
- test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_getter() {
+ void test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_getter() {
Source source = addSource(r'''
class A {
static get v => 0;
@@ -903,14 +897,13 @@
get v => 0;
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
+ assertErrors(source, [
+ StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER
+ ]);
verify([source]);
}
- void
- test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_method() {
+ void test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_method() {
Source source = addSource(r'''
class A {
static v() {}
@@ -919,14 +912,13 @@
get v => 0;
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
+ assertErrors(source, [
+ StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER
+ ]);
verify([source]);
}
- void
- test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_setter() {
+ void test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_setter() {
Source source = addSource(r'''
class A {
static set v(x) {}
@@ -935,9 +927,9 @@
get v => 0;
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
+ assertErrors(source, [
+ StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER
+ ]);
verify([source]);
}
@@ -951,9 +943,9 @@
get v => 0;
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
+ assertErrors(source, [
+ StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER
+ ]);
verify([source]);
}
@@ -966,9 +958,9 @@
get v => 0;
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
+ assertErrors(source, [
+ StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER
+ ]);
verify([source]);
}
@@ -981,9 +973,9 @@
get v => 0;
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
+ assertErrors(source, [
+ StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER
+ ]);
verify([source]);
}
@@ -995,8 +987,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER2]);
+ source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER2]);
verify([source]);
}
@@ -1008,8 +999,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
+ source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
verify([source]);
}
@@ -1023,8 +1013,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
+ source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
verify([source]);
}
@@ -1038,8 +1027,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
+ source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
verify([source]);
}
@@ -1052,9 +1040,9 @@
set v(x) {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER]);
+ assertErrors(source, [
+ StaticWarningCode.CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER
+ ]);
verify([source]);
}
@@ -1067,9 +1055,9 @@
static get x => 0;
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER]);
+ assertErrors(source, [
+ StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER
+ ]);
verify([source]);
}
@@ -1082,9 +1070,9 @@
static get x => 0;
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER]);
+ assertErrors(source, [
+ StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER
+ ]);
verify([source]);
}
@@ -1095,9 +1083,9 @@
set x(int p) {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER]);
+ assertErrors(source, [
+ StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER
+ ]);
verify([source]);
}
@@ -1108,9 +1096,9 @@
static set x(int p) {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER]);
+ assertErrors(source, [
+ StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER
+ ]);
verify([source]);
}
@@ -1121,9 +1109,9 @@
static set x(int p) {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER]);
+ assertErrors(source, [
+ StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER
+ ]);
verify([source]);
}
@@ -1223,9 +1211,9 @@
A() : x = 1 {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION]);
+ assertErrors(source, [
+ StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
+ ]);
verify([source]);
}
@@ -1248,8 +1236,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE]);
+ source, [StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE]);
verify([source]);
}
@@ -1269,9 +1256,9 @@
A() : x = 0 {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION]);
+ assertErrors(source, [
+ StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
+ ]);
verify([source]);
}
@@ -1282,9 +1269,9 @@
A(this.x) {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR]);
+ assertErrors(source, [
+ StaticWarningCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
+ ]);
verify([source]);
}
@@ -1375,12 +1362,11 @@
addNamedSource("/lib1.dart", "library lib;");
addNamedSource("/lib2.dart", "library lib;");
resolve(source);
- assertErrors(
- source,
- [
- StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_NAMED,
- HintCode.UNUSED_IMPORT,
- HintCode.UNUSED_IMPORT]);
+ assertErrors(source, [
+ StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_NAMED,
+ HintCode.UNUSED_IMPORT,
+ HintCode.UNUSED_IMPORT
+ ]);
verify([source]);
}
@@ -1392,22 +1378,24 @@
addNamedSource("/lib1.dart", "");
addNamedSource("/lib2.dart", "");
resolve(source);
- assertErrors(
- source,
- [
- StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_UNNAMED,
- HintCode.UNUSED_IMPORT,
- HintCode.UNUSED_IMPORT]);
+ assertErrors(source, [
+ StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_UNNAMED,
+ HintCode.UNUSED_IMPORT,
+ HintCode.UNUSED_IMPORT
+ ]);
verify([source]);
}
void test_importOfNonLibrary() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
part of lib;
-class A {}''', r'''
+class A {}''',
+ r'''
library lib;
import 'lib1.dart' deferred as p;
-var a = new p.A();'''], <ErrorCode>[StaticWarningCode.IMPORT_OF_NON_LIBRARY]);
+var a = new p.A();'''
+ ], <ErrorCode>[StaticWarningCode.IMPORT_OF_NON_LIBRARY]);
}
void test_inconsistentMethodInheritanceGetterAndMethod() {
@@ -1421,9 +1409,9 @@
class C implements A, B {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD]);
+ assertErrors(source, [
+ StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD
+ ]);
verify([source]);
}
@@ -1436,9 +1424,9 @@
void n() {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC]);
+ assertErrors(source, [
+ StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
+ ]);
verify([source]);
}
@@ -1453,9 +1441,9 @@
void n() {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC]);
+ assertErrors(source, [
+ StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
+ ]);
verify([source]);
}
@@ -1468,9 +1456,9 @@
void n() {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC]);
+ assertErrors(source, [
+ StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
+ ]);
verify([source]);
}
@@ -1485,9 +1473,9 @@
void n() {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC]);
+ assertErrors(source, [
+ StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
+ ]);
verify([source]);
}
@@ -1504,9 +1492,9 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC]);
+ assertErrors(source, [
+ StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
+ ]);
verify([source]);
}
@@ -1519,9 +1507,9 @@
void n() {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC]);
+ assertErrors(source, [
+ StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
+ ]);
verify([source]);
}
@@ -1536,9 +1524,9 @@
void n() {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC]);
+ assertErrors(source, [
+ StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
+ ]);
verify([source]);
}
@@ -1551,9 +1539,9 @@
void n() {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC]);
+ assertErrors(source, [
+ StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
+ ]);
verify([source]);
}
@@ -1568,9 +1556,9 @@
void n() {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC]);
+ assertErrors(source, [
+ StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC
+ ]);
verify([source]);
}
@@ -1584,8 +1572,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]);
+ source, [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]);
verify([source]);
}
@@ -1598,11 +1585,10 @@
int f;
}''');
resolve(source);
- assertErrors(
- source,
- [
- StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE,
- StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
+ assertErrors(source, [
+ StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE,
+ StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE
+ ]);
verify([source]);
}
@@ -1621,8 +1607,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]);
+ source, [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]);
verify([source]);
}
@@ -1639,8 +1624,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]);
+ source, [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]);
verify([source]);
}
@@ -1654,8 +1638,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE]);
+ source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE]);
verify([source]);
}
@@ -1669,8 +1652,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
+ source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
verify([source]);
}
@@ -1684,8 +1666,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
+ source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
verify([source]);
}
@@ -1702,8 +1683,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
+ source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
verify([source]);
}
@@ -1721,8 +1701,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
+ source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
verify([source]);
}
@@ -1740,8 +1719,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
+ source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]);
verify([source]);
}
@@ -1754,9 +1732,9 @@
m([String a]) {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE]);
+ assertErrors(source, [
+ StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE
+ ]);
verify([source]);
}
@@ -1773,9 +1751,9 @@
m([String n]) {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE]);
+ assertErrors(source, [
+ StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE
+ ]);
verify([source]);
}
@@ -1789,8 +1767,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
+ source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
verify([source]);
}
@@ -1806,8 +1783,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
+ source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
verify([source]);
}
@@ -1821,8 +1797,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
+ source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
verify([source]);
}
@@ -1836,8 +1811,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
+ source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
verify([source]);
}
@@ -1853,8 +1827,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
+ source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
verify([source]);
}
@@ -1872,8 +1845,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
+ source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
verify([source]);
}
@@ -1887,8 +1859,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
+ source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]);
verify([source]);
}
@@ -1905,9 +1876,9 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL]);
+ assertErrors(source, [
+ StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL
+ ]);
verify([source]);
}
@@ -1924,9 +1895,9 @@
}
''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED]);
+ assertErrors(source, [
+ StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED
+ ]);
verify([source]);
}
@@ -2009,9 +1980,9 @@
m({int p : 1}) {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED]);
+ assertErrors(source, [
+ StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED
+ ]);
verify([source]);
}
@@ -2024,9 +1995,9 @@
m([int p = 1]) {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL]);
+ assertErrors(source, [
+ StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL
+ ]);
verify([source]);
}
@@ -2118,8 +2089,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
+ source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
verify([source]);
}
@@ -2137,8 +2107,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
+ source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
verify([source]);
}
@@ -2157,8 +2126,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
+ source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
verify([source]);
}
@@ -2175,8 +2143,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
+ source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]);
verify([source]);
}
@@ -2209,8 +2176,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES]);
+ source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES]);
verify([source]);
}
@@ -2223,9 +2189,9 @@
set g(String v) {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE]);
+ assertErrors(source, [
+ StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE
+ ]);
verify([source]);
}
@@ -2238,9 +2204,9 @@
String get g { return ''; }
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE]);
+ assertErrors(source, [
+ StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE
+ ]);
verify([source]);
}
@@ -2250,8 +2216,7 @@
set g(String v) {}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES]);
+ source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES]);
verify([source]);
}
@@ -2268,9 +2233,10 @@
}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.MIXED_RETURN_TYPES, StaticWarningCode.MIXED_RETURN_TYPES]);
+ assertErrors(source, [
+ StaticWarningCode.MIXED_RETURN_TYPES,
+ StaticWarningCode.MIXED_RETURN_TYPES
+ ]);
verify([source]);
}
@@ -2285,9 +2251,10 @@
}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.MIXED_RETURN_TYPES, StaticWarningCode.MIXED_RETURN_TYPES]);
+ assertErrors(source, [
+ StaticWarningCode.MIXED_RETURN_TYPES,
+ StaticWarningCode.MIXED_RETURN_TYPES
+ ]);
verify([source]);
}
@@ -2300,9 +2267,10 @@
return 0;
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.MIXED_RETURN_TYPES, StaticWarningCode.MIXED_RETURN_TYPES]);
+ assertErrors(source, [
+ StaticWarningCode.MIXED_RETURN_TYPES,
+ StaticWarningCode.MIXED_RETURN_TYPES
+ ]);
verify([source]);
}
@@ -2398,8 +2366,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT]);
+ source, [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT]);
verify([source]);
}
@@ -2415,9 +2382,9 @@
class C extends A {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS
+ ]);
verify([source]);
}
@@ -2432,14 +2399,13 @@
class C extends A {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR
+ ]);
verify([source]);
}
- void
- test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_interface() {
+ void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_interface() {
// 15979
Source source = addSource(r'''
abstract class M {}
@@ -2449,9 +2415,9 @@
}
class B = A with M implements I;''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
@@ -2464,14 +2430,13 @@
abstract class A {}
class B = A with M;''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
- void
- test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_superclass() {
+ void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_superclass() {
// 15979
Source source = addSource(r'''
class M {}
@@ -2480,14 +2445,13 @@
}
class B = A with M;''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
- void
- test_nonAbstractClassInheritsAbstractMemberOne_ensureCorrectFunctionSubtypeIsUsedInImplementation() {
+ void test_nonAbstractClassInheritsAbstractMemberOne_ensureCorrectFunctionSubtypeIsUsedInImplementation() {
// 15028
Source source = addSource(r'''
class C {
@@ -2498,9 +2462,9 @@
}
class E extends C implements D {}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
@@ -2512,9 +2476,9 @@
class C implements I {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
@@ -2526,9 +2490,9 @@
class C extends A {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
@@ -2540,9 +2504,9 @@
class C implements I {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
@@ -2554,14 +2518,13 @@
class C extends A {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
- void
- test_nonAbstractClassInheritsAbstractMemberOne_method_optionalParamCount() {
+ void test_nonAbstractClassInheritsAbstractMemberOne_method_optionalParamCount() {
// 7640
Source source = addSource(r'''
abstract class A {
@@ -2573,9 +2536,9 @@
class C implements A, B {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
@@ -2586,9 +2549,9 @@
abstract class B implements A { get g1 => 1; }
class C extends Object with B {}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
}
void test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_method() {
@@ -2598,9 +2561,9 @@
abstract class B implements A { m1() => 1; }
class C extends Object with B {}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
}
void test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_setter() {
@@ -2610,13 +2573,12 @@
abstract class B implements A { set s1(v) {} }
class C extends Object with B {}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
}
- void
- test_nonAbstractClassInheritsAbstractMemberOne_setter_and_implicitSetter() {
+ void test_nonAbstractClassInheritsAbstractMemberOne_setter_and_implicitSetter() {
// test from language/override_inheritance_abstract_test_14.dart
Source source = addSource(r'''
abstract class A {
@@ -2629,9 +2591,9 @@
get field => 0;
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
@@ -2643,9 +2605,9 @@
class C implements I {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
@@ -2657,9 +2619,9 @@
class C extends A {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
@@ -2675,14 +2637,13 @@
class C extends B {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
- void
- test_nonAbstractClassInheritsAbstractMemberOne_variable_fromInterface_missingGetter() {
+ void test_nonAbstractClassInheritsAbstractMemberOne_variable_fromInterface_missingGetter() {
// 16133
Source source = addSource(r'''
class I {
@@ -2692,14 +2653,13 @@
set v(_) {}
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
- void
- test_nonAbstractClassInheritsAbstractMemberOne_variable_fromInterface_missingSetter() {
+ void test_nonAbstractClassInheritsAbstractMemberOne_variable_fromInterface_missingSetter() {
// 16133
Source source = addSource(r'''
class I {
@@ -2709,9 +2669,9 @@
get v => 1;
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+ ]);
verify([source]);
}
@@ -2725,9 +2685,9 @@
class C extends A {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE
+ ]);
verify([source]);
}
@@ -2740,14 +2700,13 @@
class C extends A {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO
+ ]);
verify([source]);
}
- void
- test_nonAbstractClassInheritsAbstractMemberTwo_variable_fromInterface_missingBoth() {
+ void test_nonAbstractClassInheritsAbstractMemberTwo_variable_fromInterface_missingBoth() {
// 16133
Source source = addSource(r'''
class I {
@@ -2756,9 +2715,9 @@
class C implements I {
}''');
resolve(source);
- assertErrors(
- source,
- [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO]);
+ assertErrors(source, [
+ StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO
+ ]);
verify([source]);
}
@@ -3070,133 +3029,165 @@
}
void test_typeAnnotationDeferredClass_asExpression() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
f(var v) {
v as a.A;
-}'''], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
+}'''
+ ], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
}
void test_typeAnnotationDeferredClass_catchClause() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
f(var v) {
try {
} on a.A {
}
-}'''], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
+}'''
+ ], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
}
void test_typeAnnotationDeferredClass_fieldFormalParameter() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
class C {
var v;
C(a.A this.v);
-}'''], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
+}'''
+ ], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
}
void test_typeAnnotationDeferredClass_functionDeclaration_returnType() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-a.A f() { return null; }'''],
- <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
+a.A f() { return null; }'''
+ ], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
}
- void
- test_typeAnnotationDeferredClass_functionTypedFormalParameter_returnType() {
- resolveWithErrors(<String>[r'''
+ void test_typeAnnotationDeferredClass_functionTypedFormalParameter_returnType() {
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-f(a.A g()) {}'''],
- <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
+f(a.A g()) {}'''
+ ], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
}
void test_typeAnnotationDeferredClass_isExpression() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
f(var v) {
bool b = v is a.A;
-}'''], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
+}'''
+ ], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
}
void test_typeAnnotationDeferredClass_methodDeclaration_returnType() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
class C {
a.A m() { return null; }
-}'''], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
+}'''
+ ], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
}
void test_typeAnnotationDeferredClass_simpleFormalParameter() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-f(a.A v) {}'''], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
+f(a.A v) {}'''
+ ], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
}
void test_typeAnnotationDeferredClass_typeArgumentList() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
class C<E> {}
-C<a.A> c;'''], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
+C<a.A> c;'''
+ ], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
}
void test_typeAnnotationDeferredClass_typeArgumentList2() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
class C<E, F> {}
-C<a.A, a.A> c;'''],
- <ErrorCode>[
- StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS,
- StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
+C<a.A, a.A> c;'''
+ ], <ErrorCode>[
+ StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS,
+ StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS
+ ]);
}
void test_typeAnnotationDeferredClass_typeParameter_bound() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-class C<E extends a.A> {}'''],
- <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
+class C<E extends a.A> {}'''
+ ], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
}
void test_typeAnnotationDeferredClass_variableDeclarationList() {
- resolveWithErrors(<String>[r'''
+ resolveWithErrors(<String>[
+ r'''
library lib1;
-class A {}''', r'''
+class A {}''',
+ r'''
library root;
import 'lib1.dart' deferred as a;
-a.A v;'''], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
+a.A v;'''
+ ], <ErrorCode>[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]);
}
void test_typeParameterReferencedByStatic_field() {
@@ -3206,8 +3197,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
+ source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
verify([source]);
}
@@ -3218,8 +3208,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
+ source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
verify([source]);
}
@@ -3232,8 +3221,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
+ source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
verify([source]);
}
@@ -3244,8 +3232,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
+ source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
verify([source]);
}
@@ -3256,8 +3243,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
+ source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
verify([source]);
}
@@ -3268,8 +3254,7 @@
}''');
resolve(source);
assertErrors(
- source,
- [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
+ source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
verify([source]);
}
diff --git a/pkg/analyzer/test/generated/test_support.dart b/pkg/analyzer/test/generated/test_support.dart
index b4ea7b2..c59d375 100644
--- a/pkg/analyzer/test/generated/test_support.dart
+++ b/pkg/analyzer/test/generated/test_support.dart
@@ -18,7 +18,6 @@
import 'package:analyzer/src/generated/source.dart';
import 'package:unittest/unittest.dart';
-
/**
* The class `EngineTestCase` defines utility methods for making assertions.
*/
@@ -107,8 +106,8 @@
* @return the object that was being tested
* @throws Exception if the object is not an instance of the expected class
*/
- static Object assertInstanceOf(Predicate<Object> predicate,
- Type expectedClass, Object object) {
+ static Object assertInstanceOf(
+ Predicate<Object> predicate, Type expectedClass, Object object) {
if (!predicate(object)) {
fail(
"Expected instance of $expectedClass, found ${object == null ? "null" : object.runtimeType}");
@@ -119,8 +118,8 @@
/**
* @return the [AstNode] with requested type at offset of the "prefix".
*/
- static AstNode findNode(AstNode root, String code, String prefix,
- Predicate<AstNode> predicate) {
+ static AstNode findNode(
+ AstNode root, String code, String prefix, Predicate<AstNode> predicate) {
int offset = code.indexOf(prefix);
if (offset == -1) {
throw new IllegalArgumentException("Not found '$prefix'.");
@@ -222,16 +221,14 @@
* @throws AssertionFailedError if a different number of errors have been gathered than were
* expected
*/
- void assertErrorsWithCodes([List<ErrorCode> expectedErrorCodes =
- ErrorCode.EMPTY_LIST]) {
+ void assertErrorsWithCodes(
+ [List<ErrorCode> expectedErrorCodes = ErrorCode.EMPTY_LIST]) {
StringBuffer buffer = new StringBuffer();
//
// Verify that the expected error codes have a non-empty message.
//
for (ErrorCode errorCode in expectedErrorCodes) {
- expect(
- errorCode.message.isEmpty,
- isFalse,
+ expect(errorCode.message.isEmpty, isFalse,
reason: "Empty error code message");
}
//
@@ -446,25 +443,21 @@
buffer.writeln();
if (lineInfo == null) {
int offset = error.offset;
- StringUtils.printf(
- buffer,
- " %s %s (%d..%d)",
- [
- source == null ? "" : source.shortName,
- error.errorCode,
- offset,
- offset + error.length]);
+ StringUtils.printf(buffer, " %s %s (%d..%d)", [
+ source == null ? "" : source.shortName,
+ error.errorCode,
+ offset,
+ offset + error.length
+ ]);
} else {
LineInfo_Location location = lineInfo.getLocation(error.offset);
- StringUtils.printf(
- buffer,
- " %s %s (%d, %d/%d)",
- [
- source == null ? "" : source.shortName,
- error.errorCode,
- location.lineNumber,
- location.columnNumber,
- error.length]);
+ StringUtils.printf(buffer, " %s %s (%d, %d/%d)", [
+ source == null ? "" : source.shortName,
+ error.errorCode,
+ location.lineNumber,
+ location.columnNumber,
+ error.length
+ ]);
}
}
buffer.writeln();
@@ -477,27 +470,23 @@
buffer.writeln();
if (lineInfo == null) {
int offset = error.offset;
- StringUtils.printf(
- buffer,
- " %s %s (%d..%d): %s",
- [
- source == null ? "" : source.shortName,
- error.errorCode,
- offset,
- offset + error.length,
- error.message]);
+ StringUtils.printf(buffer, " %s %s (%d..%d): %s", [
+ source == null ? "" : source.shortName,
+ error.errorCode,
+ offset,
+ offset + error.length,
+ error.message
+ ]);
} else {
LineInfo_Location location = lineInfo.getLocation(error.offset);
- StringUtils.printf(
- buffer,
- " %s %s (%d, %d/%d): %s",
- [
- source == null ? "" : source.shortName,
- error.errorCode,
- location.lineNumber,
- location.columnNumber,
- error.length,
- error.message]);
+ StringUtils.printf(buffer, " %s %s (%d, %d/%d): %s", [
+ source == null ? "" : source.shortName,
+ error.errorCode,
+ location.lineNumber,
+ location.columnNumber,
+ error.length,
+ error.message
+ ]);
}
}
fail(buffer.toString());
@@ -559,7 +548,6 @@
}
}
-
class TestSource extends Source {
String _name;
String _contents;
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index 02a3667..fec0743 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -64,8 +64,8 @@
@reflectiveTest
class AstClonerTest extends EngineTestCase {
void test_visitAdjacentStrings() {
- _assertClone(
- AstFactory.adjacentStrings([AstFactory.string2("a"), AstFactory.string2("b")]));
+ _assertClone(AstFactory
+ .adjacentStrings([AstFactory.string2("a"), AstFactory.string2("b")]));
}
void test_visitAnnotation_constant() {
@@ -73,24 +73,18 @@
}
void test_visitAnnotation_constructor() {
- _assertClone(
- AstFactory.annotation2(
- AstFactory.identifier3("A"),
- AstFactory.identifier3("c"),
- AstFactory.argumentList()));
+ _assertClone(AstFactory.annotation2(AstFactory.identifier3("A"),
+ AstFactory.identifier3("c"), AstFactory.argumentList()));
}
void test_visitArgumentList() {
- _assertClone(
- AstFactory.argumentList(
- [AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
+ _assertClone(AstFactory.argumentList(
+ [AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
}
void test_visitAsExpression() {
- _assertClone(
- AstFactory.asExpression(
- AstFactory.identifier3("e"),
- AstFactory.typeName4("T")));
+ _assertClone(AstFactory.asExpression(
+ AstFactory.identifier3("e"), AstFactory.typeName4("T")));
}
void test_visitAssertStatement() {
@@ -98,11 +92,8 @@
}
void test_visitAssignmentExpression() {
- _assertClone(
- AstFactory.assignmentExpression(
- AstFactory.identifier3("a"),
- TokenType.EQ,
- AstFactory.identifier3("b")));
+ _assertClone(AstFactory.assignmentExpression(AstFactory.identifier3("a"),
+ TokenType.EQ, AstFactory.identifier3("b")));
}
void test_visitAwaitExpression() {
@@ -110,11 +101,8 @@
}
void test_visitBinaryExpression() {
- _assertClone(
- AstFactory.binaryExpression(
- AstFactory.identifier3("a"),
- TokenType.PLUS,
- AstFactory.identifier3("b")));
+ _assertClone(AstFactory.binaryExpression(AstFactory.identifier3("a"),
+ TokenType.PLUS, AstFactory.identifier3("b")));
}
void test_visitBlock_empty() {
@@ -122,8 +110,8 @@
}
void test_visitBlock_nonEmpty() {
- _assertClone(
- AstFactory.block([AstFactory.breakStatement(), AstFactory.breakStatement()]));
+ _assertClone(AstFactory
+ .block([AstFactory.breakStatement(), AstFactory.breakStatement()]));
}
void test_visitBlockFunctionBody() {
@@ -147,30 +135,24 @@
}
void test_visitCascadeExpression_field() {
- _assertClone(
- AstFactory.cascadeExpression(
- AstFactory.identifier3("a"),
- [
- AstFactory.cascadedPropertyAccess("b"),
- AstFactory.cascadedPropertyAccess("c")]));
+ _assertClone(AstFactory.cascadeExpression(AstFactory.identifier3("a"), [
+ AstFactory.cascadedPropertyAccess("b"),
+ AstFactory.cascadedPropertyAccess("c")
+ ]));
}
void test_visitCascadeExpression_index() {
- _assertClone(
- AstFactory.cascadeExpression(
- AstFactory.identifier3("a"),
- [
- AstFactory.cascadedIndexExpression(AstFactory.integer(0)),
- AstFactory.cascadedIndexExpression(AstFactory.integer(1))]));
+ _assertClone(AstFactory.cascadeExpression(AstFactory.identifier3("a"), [
+ AstFactory.cascadedIndexExpression(AstFactory.integer(0)),
+ AstFactory.cascadedIndexExpression(AstFactory.integer(1))
+ ]));
}
void test_visitCascadeExpression_method() {
- _assertClone(
- AstFactory.cascadeExpression(
- AstFactory.identifier3("a"),
- [
- AstFactory.cascadedMethodInvocation("b"),
- AstFactory.cascadedMethodInvocation("c")]));
+ _assertClone(AstFactory.cascadeExpression(AstFactory.identifier3("a"), [
+ AstFactory.cascadedMethodInvocation("b"),
+ AstFactory.cascadedMethodInvocation("c")
+ ]));
}
void test_visitCatchClause_catch_noStack() {
@@ -190,8 +172,8 @@
}
void test_visitClassDeclaration_abstract() {
- _assertClone(
- AstFactory.classDeclaration(Keyword.ABSTRACT, "C", null, null, null, null));
+ _assertClone(AstFactory.classDeclaration(
+ Keyword.ABSTRACT, "C", null, null, null, null));
}
void test_visitClassDeclaration_empty() {
@@ -200,276 +182,167 @@
}
void test_visitClassDeclaration_extends() {
- _assertClone(
- AstFactory.classDeclaration(
- null,
- "C",
- null,
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- null,
- null));
+ _assertClone(AstFactory.classDeclaration(null, "C", null,
+ AstFactory.extendsClause(AstFactory.typeName4("A")), null, null));
}
void test_visitClassDeclaration_extends_implements() {
- _assertClone(
- AstFactory.classDeclaration(
- null,
- "C",
- null,
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- null,
- AstFactory.implementsClause([AstFactory.typeName4("B")])));
+ _assertClone(AstFactory.classDeclaration(null, "C", null,
+ AstFactory.extendsClause(AstFactory.typeName4("A")), null,
+ AstFactory.implementsClause([AstFactory.typeName4("B")])));
}
void test_visitClassDeclaration_extends_with() {
- _assertClone(
- AstFactory.classDeclaration(
- null,
- "C",
- null,
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- AstFactory.withClause([AstFactory.typeName4("M")]),
- null));
+ _assertClone(AstFactory.classDeclaration(null, "C", null,
+ AstFactory.extendsClause(AstFactory.typeName4("A")),
+ AstFactory.withClause([AstFactory.typeName4("M")]), null));
}
void test_visitClassDeclaration_extends_with_implements() {
- _assertClone(
- AstFactory.classDeclaration(
- null,
- "C",
- null,
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- AstFactory.withClause([AstFactory.typeName4("M")]),
- AstFactory.implementsClause([AstFactory.typeName4("B")])));
+ _assertClone(AstFactory.classDeclaration(null, "C", null,
+ AstFactory.extendsClause(AstFactory.typeName4("A")),
+ AstFactory.withClause([AstFactory.typeName4("M")]),
+ AstFactory.implementsClause([AstFactory.typeName4("B")])));
}
void test_visitClassDeclaration_implements() {
- _assertClone(
- AstFactory.classDeclaration(
- null,
- "C",
- null,
- null,
- null,
- AstFactory.implementsClause([AstFactory.typeName4("B")])));
+ _assertClone(AstFactory.classDeclaration(null, "C", null, null, null,
+ AstFactory.implementsClause([AstFactory.typeName4("B")])));
}
void test_visitClassDeclaration_multipleMember() {
- _assertClone(
- AstFactory.classDeclaration(
- null,
- "C",
- null,
- null,
- null,
- null,
- [
- AstFactory.fieldDeclaration2(
- false,
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")]),
- AstFactory.fieldDeclaration2(
- false,
- Keyword.VAR,
- [AstFactory.variableDeclaration("b")])]));
+ _assertClone(AstFactory.classDeclaration(null, "C", null, null, null, null,
+ [
+ AstFactory.fieldDeclaration2(
+ false, Keyword.VAR, [AstFactory.variableDeclaration("a")]),
+ AstFactory.fieldDeclaration2(
+ false, Keyword.VAR, [AstFactory.variableDeclaration("b")])
+ ]));
}
void test_visitClassDeclaration_parameters() {
- _assertClone(
- AstFactory.classDeclaration(
- null,
- "C",
- AstFactory.typeParameterList(["E"]),
- null,
- null,
- null));
+ _assertClone(AstFactory.classDeclaration(
+ null, "C", AstFactory.typeParameterList(["E"]), null, null, null));
}
void test_visitClassDeclaration_parameters_extends() {
- _assertClone(
- AstFactory.classDeclaration(
- null,
- "C",
- AstFactory.typeParameterList(["E"]),
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- null,
- null));
+ _assertClone(AstFactory.classDeclaration(null, "C",
+ AstFactory.typeParameterList(["E"]),
+ AstFactory.extendsClause(AstFactory.typeName4("A")), null, null));
}
void test_visitClassDeclaration_parameters_extends_implements() {
- _assertClone(
- AstFactory.classDeclaration(
- null,
- "C",
- AstFactory.typeParameterList(["E"]),
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- null,
- AstFactory.implementsClause([AstFactory.typeName4("B")])));
+ _assertClone(AstFactory.classDeclaration(null, "C",
+ AstFactory.typeParameterList(["E"]),
+ AstFactory.extendsClause(AstFactory.typeName4("A")), null,
+ AstFactory.implementsClause([AstFactory.typeName4("B")])));
}
void test_visitClassDeclaration_parameters_extends_with() {
- _assertClone(
- AstFactory.classDeclaration(
- null,
- "C",
- AstFactory.typeParameterList(["E"]),
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- AstFactory.withClause([AstFactory.typeName4("M")]),
- null));
+ _assertClone(AstFactory.classDeclaration(null, "C",
+ AstFactory.typeParameterList(["E"]),
+ AstFactory.extendsClause(AstFactory.typeName4("A")),
+ AstFactory.withClause([AstFactory.typeName4("M")]), null));
}
void test_visitClassDeclaration_parameters_extends_with_implements() {
- _assertClone(
- AstFactory.classDeclaration(
- null,
- "C",
- AstFactory.typeParameterList(["E"]),
- AstFactory.extendsClause(AstFactory.typeName4("A")),
- AstFactory.withClause([AstFactory.typeName4("M")]),
- AstFactory.implementsClause([AstFactory.typeName4("B")])));
+ _assertClone(AstFactory.classDeclaration(null, "C",
+ AstFactory.typeParameterList(["E"]),
+ AstFactory.extendsClause(AstFactory.typeName4("A")),
+ AstFactory.withClause([AstFactory.typeName4("M")]),
+ AstFactory.implementsClause([AstFactory.typeName4("B")])));
}
void test_visitClassDeclaration_parameters_implements() {
- _assertClone(
- AstFactory.classDeclaration(
- null,
- "C",
- AstFactory.typeParameterList(["E"]),
- null,
- null,
- AstFactory.implementsClause([AstFactory.typeName4("B")])));
+ _assertClone(AstFactory.classDeclaration(null, "C",
+ AstFactory.typeParameterList(["E"]), null, null,
+ AstFactory.implementsClause([AstFactory.typeName4("B")])));
}
void test_visitClassDeclaration_singleMember() {
- _assertClone(
- AstFactory.classDeclaration(
- null,
- "C",
- null,
- null,
- null,
- null,
- [
- AstFactory.fieldDeclaration2(
- false,
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")])]));
+ _assertClone(AstFactory.classDeclaration(null, "C", null, null, null, null,
+ [
+ AstFactory.fieldDeclaration2(
+ false, Keyword.VAR, [AstFactory.variableDeclaration("a")])
+ ]));
}
void test_visitClassDeclaration_withMetadata() {
ClassDeclaration declaration =
AstFactory.classDeclaration(null, "C", null, null, null, null);
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(declaration);
}
void test_visitClassTypeAlias_abstract() {
- _assertClone(
- AstFactory.classTypeAlias(
- "C",
- null,
- Keyword.ABSTRACT,
- AstFactory.typeName4("S"),
- AstFactory.withClause([AstFactory.typeName4("M1")]),
- null));
+ _assertClone(AstFactory.classTypeAlias("C", null, Keyword.ABSTRACT,
+ AstFactory.typeName4("S"),
+ AstFactory.withClause([AstFactory.typeName4("M1")]), null));
}
void test_visitClassTypeAlias_abstract_implements() {
- _assertClone(
- AstFactory.classTypeAlias(
- "C",
- null,
- Keyword.ABSTRACT,
- AstFactory.typeName4("S"),
- AstFactory.withClause([AstFactory.typeName4("M1")]),
- AstFactory.implementsClause([AstFactory.typeName4("I")])));
+ _assertClone(AstFactory.classTypeAlias("C", null, Keyword.ABSTRACT,
+ AstFactory.typeName4("S"),
+ AstFactory.withClause([AstFactory.typeName4("M1")]),
+ AstFactory.implementsClause([AstFactory.typeName4("I")])));
}
void test_visitClassTypeAlias_generic() {
- _assertClone(
- AstFactory.classTypeAlias(
- "C",
- AstFactory.typeParameterList(["E"]),
- null,
- AstFactory.typeName4("S", [AstFactory.typeName4("E")]),
- AstFactory.withClause(
- [AstFactory.typeName4("M1", [AstFactory.typeName4("E")])]),
- null));
+ _assertClone(AstFactory.classTypeAlias("C",
+ AstFactory.typeParameterList(["E"]), null,
+ AstFactory.typeName4("S", [AstFactory.typeName4("E")]),
+ AstFactory.withClause(
+ [AstFactory.typeName4("M1", [AstFactory.typeName4("E")])]), null));
}
void test_visitClassTypeAlias_implements() {
- _assertClone(
- AstFactory.classTypeAlias(
- "C",
- null,
- null,
- AstFactory.typeName4("S"),
- AstFactory.withClause([AstFactory.typeName4("M1")]),
- AstFactory.implementsClause([AstFactory.typeName4("I")])));
+ _assertClone(AstFactory.classTypeAlias("C", null, null,
+ AstFactory.typeName4("S"),
+ AstFactory.withClause([AstFactory.typeName4("M1")]),
+ AstFactory.implementsClause([AstFactory.typeName4("I")])));
}
void test_visitClassTypeAlias_minimal() {
- _assertClone(
- AstFactory.classTypeAlias(
- "C",
- null,
- null,
- AstFactory.typeName4("S"),
- AstFactory.withClause([AstFactory.typeName4("M1")]),
- null));
+ _assertClone(AstFactory.classTypeAlias("C", null, null,
+ AstFactory.typeName4("S"),
+ AstFactory.withClause([AstFactory.typeName4("M1")]), null));
}
void test_visitClassTypeAlias_parameters_abstract() {
- _assertClone(
- AstFactory.classTypeAlias(
- "C",
- AstFactory.typeParameterList(["E"]),
- Keyword.ABSTRACT,
- AstFactory.typeName4("S"),
- AstFactory.withClause([AstFactory.typeName4("M1")]),
- null));
+ _assertClone(AstFactory.classTypeAlias("C",
+ AstFactory.typeParameterList(["E"]), Keyword.ABSTRACT,
+ AstFactory.typeName4("S"),
+ AstFactory.withClause([AstFactory.typeName4("M1")]), null));
}
void test_visitClassTypeAlias_parameters_abstract_implements() {
- _assertClone(
- AstFactory.classTypeAlias(
- "C",
- AstFactory.typeParameterList(["E"]),
- Keyword.ABSTRACT,
- AstFactory.typeName4("S"),
- AstFactory.withClause([AstFactory.typeName4("M1")]),
- AstFactory.implementsClause([AstFactory.typeName4("I")])));
+ _assertClone(AstFactory.classTypeAlias("C",
+ AstFactory.typeParameterList(["E"]), Keyword.ABSTRACT,
+ AstFactory.typeName4("S"),
+ AstFactory.withClause([AstFactory.typeName4("M1")]),
+ AstFactory.implementsClause([AstFactory.typeName4("I")])));
}
void test_visitClassTypeAlias_parameters_implements() {
- _assertClone(
- AstFactory.classTypeAlias(
- "C",
- AstFactory.typeParameterList(["E"]),
- null,
- AstFactory.typeName4("S"),
- AstFactory.withClause([AstFactory.typeName4("M1")]),
- AstFactory.implementsClause([AstFactory.typeName4("I")])));
+ _assertClone(AstFactory.classTypeAlias("C",
+ AstFactory.typeParameterList(["E"]), null, AstFactory.typeName4("S"),
+ AstFactory.withClause([AstFactory.typeName4("M1")]),
+ AstFactory.implementsClause([AstFactory.typeName4("I")])));
}
void test_visitClassTypeAlias_withMetadata() {
- ClassTypeAlias declaration = AstFactory.classTypeAlias(
- "C",
- null,
- null,
+ ClassTypeAlias declaration = AstFactory.classTypeAlias("C", null, null,
AstFactory.typeName4("S"),
- AstFactory.withClause([AstFactory.typeName4("M1")]),
- null);
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ AstFactory.withClause([AstFactory.typeName4("M1")]), null);
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(declaration);
}
void test_visitComment() {
- _assertClone(
- Comment.createBlockComment(
- <Token>[TokenFactory.tokenFromString("/* comment */")]));
+ _assertClone(Comment.createBlockComment(
+ <Token>[TokenFactory.tokenFromString("/* comment */")]));
}
void test_visitCommentReference() {
@@ -477,12 +350,10 @@
}
void test_visitCompilationUnit_declaration() {
- _assertClone(
- AstFactory.compilationUnit2(
- [
- AstFactory.topLevelVariableDeclaration2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")])]));
+ _assertClone(AstFactory.compilationUnit2([
+ AstFactory.topLevelVariableDeclaration2(
+ Keyword.VAR, [AstFactory.variableDeclaration("a")])
+ ]));
}
void test_visitCompilationUnit_directive() {
@@ -491,13 +362,12 @@
}
void test_visitCompilationUnit_directive_declaration() {
- _assertClone(
- AstFactory.compilationUnit4(
- [AstFactory.libraryDirective2("l")],
- [
- AstFactory.topLevelVariableDeclaration2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")])]));
+ _assertClone(AstFactory.compilationUnit4([
+ AstFactory.libraryDirective2("l")
+ ], [
+ AstFactory.topLevelVariableDeclaration2(
+ Keyword.VAR, [AstFactory.variableDeclaration("a")])
+ ]));
}
void test_visitCompilationUnit_empty() {
@@ -509,159 +379,98 @@
}
void test_visitCompilationUnit_script_declaration() {
- _assertClone(
- AstFactory.compilationUnit6(
- "!#/bin/dartvm",
- [
- AstFactory.topLevelVariableDeclaration2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")])]));
+ _assertClone(AstFactory.compilationUnit6("!#/bin/dartvm", [
+ AstFactory.topLevelVariableDeclaration2(
+ Keyword.VAR, [AstFactory.variableDeclaration("a")])
+ ]));
}
void test_visitCompilationUnit_script_directive() {
- _assertClone(
- AstFactory.compilationUnit7(
- "!#/bin/dartvm",
- [AstFactory.libraryDirective2("l")]));
+ _assertClone(AstFactory.compilationUnit7(
+ "!#/bin/dartvm", [AstFactory.libraryDirective2("l")]));
}
void test_visitCompilationUnit_script_directives_declarations() {
- _assertClone(
- AstFactory.compilationUnit8(
- "!#/bin/dartvm",
- [AstFactory.libraryDirective2("l")],
- [
- AstFactory.topLevelVariableDeclaration2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")])]));
+ _assertClone(AstFactory.compilationUnit8("!#/bin/dartvm", [
+ AstFactory.libraryDirective2("l")
+ ], [
+ AstFactory.topLevelVariableDeclaration2(
+ Keyword.VAR, [AstFactory.variableDeclaration("a")])
+ ]));
}
void test_visitConditionalExpression() {
- _assertClone(
- AstFactory.conditionalExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"),
- AstFactory.identifier3("c")));
+ _assertClone(AstFactory.conditionalExpression(AstFactory.identifier3("a"),
+ AstFactory.identifier3("b"), AstFactory.identifier3("c")));
}
void test_visitConstructorDeclaration_const() {
- _assertClone(
- AstFactory.constructorDeclaration2(
- Keyword.CONST,
- null,
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(),
- null,
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.constructorDeclaration2(Keyword.CONST, null,
+ AstFactory.identifier3("C"), null, AstFactory.formalParameterList(),
+ null, AstFactory.blockFunctionBody2()));
}
void test_visitConstructorDeclaration_external() {
- _assertClone(
- AstFactory.constructorDeclaration(
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(),
- null));
+ _assertClone(AstFactory.constructorDeclaration(AstFactory.identifier3("C"),
+ null, AstFactory.formalParameterList(), null));
}
void test_visitConstructorDeclaration_minimal() {
- _assertClone(
- AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(),
- null,
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.constructorDeclaration2(null, null,
+ AstFactory.identifier3("C"), null, AstFactory.formalParameterList(),
+ null, AstFactory.blockFunctionBody2()));
}
void test_visitConstructorDeclaration_multipleInitializers() {
- _assertClone(
- AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(),
- [
- AstFactory.constructorFieldInitializer(false, "a", AstFactory.identifier3("b")),
- AstFactory.constructorFieldInitializer(
- false,
- "c",
- AstFactory.identifier3("d"))],
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.constructorDeclaration2(null, null,
+ AstFactory.identifier3("C"), null, AstFactory.formalParameterList(), [
+ AstFactory.constructorFieldInitializer(
+ false, "a", AstFactory.identifier3("b")),
+ AstFactory.constructorFieldInitializer(
+ false, "c", AstFactory.identifier3("d"))
+ ], AstFactory.blockFunctionBody2()));
}
void test_visitConstructorDeclaration_multipleParameters() {
- _assertClone(
- AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
- AstFactory.simpleFormalParameter(Keyword.VAR, "b")]),
- null,
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.constructorDeclaration2(null, null,
+ AstFactory.identifier3("C"), null, AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
+ AstFactory.simpleFormalParameter(Keyword.VAR, "b")
+ ]), null, AstFactory.blockFunctionBody2()));
}
void test_visitConstructorDeclaration_named() {
- _assertClone(
- AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- "m",
- AstFactory.formalParameterList(),
- null,
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.constructorDeclaration2(null, null,
+ AstFactory.identifier3("C"), "m", AstFactory.formalParameterList(),
+ null, AstFactory.blockFunctionBody2()));
}
void test_visitConstructorDeclaration_singleInitializer() {
- _assertClone(
- AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(),
- [
- AstFactory.constructorFieldInitializer(
- false,
- "a",
- AstFactory.identifier3("b"))],
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.constructorDeclaration2(null, null,
+ AstFactory.identifier3("C"), null, AstFactory.formalParameterList(), [
+ AstFactory.constructorFieldInitializer(
+ false, "a", AstFactory.identifier3("b"))
+ ], AstFactory.blockFunctionBody2()));
}
void test_visitConstructorDeclaration_withMetadata() {
ConstructorDeclaration declaration = AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- null,
- AstFactory.formalParameterList(),
- null,
+ null, null, AstFactory.identifier3("C"), null,
+ AstFactory.formalParameterList(), null,
AstFactory.blockFunctionBody2());
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(declaration);
}
void test_visitConstructorFieldInitializer_withoutThis() {
- _assertClone(
- AstFactory.constructorFieldInitializer(
- false,
- "a",
- AstFactory.identifier3("b")));
+ _assertClone(AstFactory.constructorFieldInitializer(
+ false, "a", AstFactory.identifier3("b")));
}
void test_visitConstructorFieldInitializer_withThis() {
- _assertClone(
- AstFactory.constructorFieldInitializer(true, "a", AstFactory.identifier3("b")));
+ _assertClone(AstFactory.constructorFieldInitializer(
+ true, "a", AstFactory.identifier3("b")));
}
void test_visitConstructorName_named_prefix() {
@@ -674,10 +483,8 @@
}
void test_visitConstructorName_unnamed_prefix() {
- _assertClone(
- AstFactory.constructorName(
- AstFactory.typeName3(AstFactory.identifier5("p", "C")),
- null));
+ _assertClone(AstFactory.constructorName(
+ AstFactory.typeName3(AstFactory.identifier5("p", "C")), null));
}
void test_visitContinueStatement_label() {
@@ -689,34 +496,28 @@
}
void test_visitDefaultFormalParameter_named_noValue() {
- _assertClone(
- AstFactory.namedFormalParameter(AstFactory.simpleFormalParameter3("p"), null));
+ _assertClone(AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("p"), null));
}
void test_visitDefaultFormalParameter_named_value() {
- _assertClone(
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("p"),
- AstFactory.integer(0)));
+ _assertClone(AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("p"), AstFactory.integer(0)));
}
void test_visitDefaultFormalParameter_positional_noValue() {
- _assertClone(
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("p"),
- null));
+ _assertClone(AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("p"), null));
}
void test_visitDefaultFormalParameter_positional_value() {
- _assertClone(
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("p"),
- AstFactory.integer(0)));
+ _assertClone(AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("p"), AstFactory.integer(0)));
}
void test_visitDoStatement() {
- _assertClone(
- AstFactory.doStatement(AstFactory.block(), AstFactory.identifier3("c")));
+ _assertClone(AstFactory.doStatement(
+ AstFactory.block(), AstFactory.identifier3("c")));
}
void test_visitDoubleLiteral() {
@@ -732,19 +533,15 @@
}
void test_visitExportDirective_combinator() {
- _assertClone(
- AstFactory.exportDirective2(
- "a.dart",
- [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
+ _assertClone(AstFactory.exportDirective2(
+ "a.dart", [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
}
void test_visitExportDirective_combinators() {
- _assertClone(
- AstFactory.exportDirective2(
- "a.dart",
- [
- AstFactory.showCombinator([AstFactory.identifier3("A")]),
- AstFactory.hideCombinator([AstFactory.identifier3("B")])]));
+ _assertClone(AstFactory.exportDirective2("a.dart", [
+ AstFactory.showCombinator([AstFactory.identifier3("A")]),
+ AstFactory.hideCombinator([AstFactory.identifier3("B")])
+ ]));
}
void test_visitExportDirective_minimal() {
@@ -753,8 +550,8 @@
void test_visitExportDirective_withMetadata() {
ExportDirective directive = AstFactory.exportDirective2("a.dart");
- directive.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ directive.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(directive);
}
@@ -772,38 +569,27 @@
}
void test_visitFieldDeclaration_instance() {
- _assertClone(
- AstFactory.fieldDeclaration2(
- false,
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")]));
+ _assertClone(AstFactory.fieldDeclaration2(
+ false, Keyword.VAR, [AstFactory.variableDeclaration("a")]));
}
void test_visitFieldDeclaration_static() {
- _assertClone(
- AstFactory.fieldDeclaration2(
- true,
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")]));
+ _assertClone(AstFactory.fieldDeclaration2(
+ true, Keyword.VAR, [AstFactory.variableDeclaration("a")]));
}
void test_visitFieldDeclaration_withMetadata() {
FieldDeclaration declaration = AstFactory.fieldDeclaration2(
- false,
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")]);
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ false, Keyword.VAR, [AstFactory.variableDeclaration("a")]);
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(declaration);
}
void test_visitFieldFormalParameter_functionTyped() {
- _assertClone(
- AstFactory.fieldFormalParameter(
- null,
- AstFactory.typeName4("A"),
- "a",
- AstFactory.formalParameterList([AstFactory.simpleFormalParameter3("b")])));
+ _assertClone(AstFactory.fieldFormalParameter(null,
+ AstFactory.typeName4("A"), "a", AstFactory
+ .formalParameterList([AstFactory.simpleFormalParameter3("b")])));
}
void test_visitFieldFormalParameter_keyword() {
@@ -811,8 +597,8 @@
}
void test_visitFieldFormalParameter_keywordAndType() {
- _assertClone(
- AstFactory.fieldFormalParameter(Keyword.FINAL, AstFactory.typeName4("A"), "a"));
+ _assertClone(AstFactory.fieldFormalParameter(
+ Keyword.FINAL, AstFactory.typeName4("A"), "a"));
}
void test_visitFieldFormalParameter_type() {
@@ -821,37 +607,28 @@
}
void test_visitForEachStatement_declared() {
- _assertClone(
- AstFactory.forEachStatement(
- AstFactory.declaredIdentifier3("a"),
- AstFactory.identifier3("b"),
- AstFactory.block()));
+ _assertClone(AstFactory.forEachStatement(
+ AstFactory.declaredIdentifier3("a"), AstFactory.identifier3("b"),
+ AstFactory.block()));
}
void test_visitForEachStatement_variable() {
- _assertClone(
- new ForEachStatement.con2(
- null,
- TokenFactory.tokenFromKeyword(Keyword.FOR),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- AstFactory.identifier3("a"),
- TokenFactory.tokenFromKeyword(Keyword.IN),
- AstFactory.identifier3("b"),
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
- AstFactory.block()));
+ _assertClone(new ForEachStatement.con2(null,
+ TokenFactory.tokenFromKeyword(Keyword.FOR),
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
+ AstFactory.identifier3("a"), TokenFactory.tokenFromKeyword(Keyword.IN),
+ AstFactory.identifier3("b"),
+ TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), AstFactory.block()));
}
void test_visitForEachStatement_variable_await() {
- _assertClone(
- new ForEachStatement.con2(
- TokenFactory.tokenFromString("await"),
- TokenFactory.tokenFromKeyword(Keyword.FOR),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- AstFactory.identifier3("a"),
- TokenFactory.tokenFromKeyword(Keyword.IN),
- AstFactory.identifier3("b"),
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
- AstFactory.block()));
+ _assertClone(new ForEachStatement.con2(
+ TokenFactory.tokenFromString("await"),
+ TokenFactory.tokenFromKeyword(Keyword.FOR),
+ TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
+ AstFactory.identifier3("a"), TokenFactory.tokenFromKeyword(Keyword.IN),
+ AstFactory.identifier3("b"),
+ TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), AstFactory.block()));
}
void test_visitFormalParameterList_empty() {
@@ -859,308 +636,217 @@
}
void test_visitFormalParameterList_n() {
- _assertClone(
- AstFactory.formalParameterList(
- [
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.integer(0))]));
+ _assertClone(AstFactory.formalParameterList([
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0))
+ ]));
}
void test_visitFormalParameterList_nn() {
- _assertClone(
- AstFactory.formalParameterList(
- [
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.integer(0)),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.integer(1))]));
+ _assertClone(AstFactory.formalParameterList([
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0)),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1))
+ ]));
}
void test_visitFormalParameterList_p() {
- _assertClone(
- AstFactory.formalParameterList(
- [
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.integer(0))]));
+ _assertClone(AstFactory.formalParameterList([
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0))
+ ]));
}
void test_visitFormalParameterList_pp() {
- _assertClone(
- AstFactory.formalParameterList(
- [
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.integer(0)),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.integer(1))]));
+ _assertClone(AstFactory.formalParameterList([
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("a"), AstFactory.integer(0)),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1))
+ ]));
}
void test_visitFormalParameterList_r() {
- _assertClone(
- AstFactory.formalParameterList([AstFactory.simpleFormalParameter3("a")]));
+ _assertClone(AstFactory
+ .formalParameterList([AstFactory.simpleFormalParameter3("a")]));
}
void test_visitFormalParameterList_rn() {
- _assertClone(
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.integer(1))]));
+ _assertClone(AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1))
+ ]));
}
void test_visitFormalParameterList_rnn() {
- _assertClone(
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.integer(1)),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("c"),
- AstFactory.integer(2))]));
+ _assertClone(AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1)),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("c"), AstFactory.integer(2))
+ ]));
}
void test_visitFormalParameterList_rp() {
- _assertClone(
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.integer(1))]));
+ _assertClone(AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1))
+ ]));
}
void test_visitFormalParameterList_rpp() {
- _assertClone(
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.integer(1)),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("c"),
- AstFactory.integer(2))]));
+ _assertClone(AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("b"), AstFactory.integer(1)),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("c"), AstFactory.integer(2))
+ ]));
}
void test_visitFormalParameterList_rr() {
- _assertClone(
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.simpleFormalParameter3("b")]));
+ _assertClone(AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.simpleFormalParameter3("b")
+ ]));
}
void test_visitFormalParameterList_rrn() {
- _assertClone(
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("c"),
- AstFactory.integer(3))]));
+ _assertClone(AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.simpleFormalParameter3("b"),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("c"), AstFactory.integer(3))
+ ]));
}
void test_visitFormalParameterList_rrnn() {
- _assertClone(
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("c"),
- AstFactory.integer(3)),
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter3("d"),
- AstFactory.integer(4))]));
+ _assertClone(AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.simpleFormalParameter3("b"),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("c"), AstFactory.integer(3)),
+ AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter3("d"), AstFactory.integer(4))
+ ]));
}
void test_visitFormalParameterList_rrp() {
- _assertClone(
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("c"),
- AstFactory.integer(3))]));
+ _assertClone(AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.simpleFormalParameter3("b"),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("c"), AstFactory.integer(3))
+ ]));
}
void test_visitFormalParameterList_rrpp() {
- _assertClone(
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter3("a"),
- AstFactory.simpleFormalParameter3("b"),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("c"),
- AstFactory.integer(3)),
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("d"),
- AstFactory.integer(4))]));
+ _assertClone(AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter3("a"),
+ AstFactory.simpleFormalParameter3("b"),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("c"), AstFactory.integer(3)),
+ AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter3("d"), AstFactory.integer(4))
+ ]));
}
void test_visitForStatement_c() {
- _assertClone(
- AstFactory.forStatement(
- null,
- AstFactory.identifier3("c"),
- null,
- AstFactory.block()));
+ _assertClone(AstFactory.forStatement(
+ null, AstFactory.identifier3("c"), null, AstFactory.block()));
}
void test_visitForStatement_cu() {
- _assertClone(
- AstFactory.forStatement(
- null,
- AstFactory.identifier3("c"),
- [AstFactory.identifier3("u")],
- AstFactory.block()));
+ _assertClone(AstFactory.forStatement(null, AstFactory.identifier3("c"), [
+ AstFactory.identifier3("u")
+ ], AstFactory.block()));
}
void test_visitForStatement_e() {
- _assertClone(
- AstFactory.forStatement(
- AstFactory.identifier3("e"),
- null,
- null,
- AstFactory.block()));
+ _assertClone(AstFactory.forStatement(
+ AstFactory.identifier3("e"), null, null, AstFactory.block()));
}
void test_visitForStatement_ec() {
- _assertClone(
- AstFactory.forStatement(
- AstFactory.identifier3("e"),
- AstFactory.identifier3("c"),
- null,
- AstFactory.block()));
+ _assertClone(AstFactory.forStatement(AstFactory.identifier3("e"),
+ AstFactory.identifier3("c"), null, AstFactory.block()));
}
void test_visitForStatement_ecu() {
- _assertClone(
- AstFactory.forStatement(
- AstFactory.identifier3("e"),
- AstFactory.identifier3("c"),
- [AstFactory.identifier3("u")],
- AstFactory.block()));
+ _assertClone(AstFactory.forStatement(AstFactory.identifier3("e"),
+ AstFactory.identifier3("c"), [
+ AstFactory.identifier3("u")
+ ], AstFactory.block()));
}
void test_visitForStatement_eu() {
- _assertClone(
- AstFactory.forStatement(
- AstFactory.identifier3("e"),
- null,
- [AstFactory.identifier3("u")],
- AstFactory.block()));
+ _assertClone(AstFactory.forStatement(AstFactory.identifier3("e"), null, [
+ AstFactory.identifier3("u")
+ ], AstFactory.block()));
}
void test_visitForStatement_i() {
- _assertClone(
- AstFactory.forStatement2(
- AstFactory.variableDeclarationList2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("i")]),
- null,
- null,
- AstFactory.block()));
+ _assertClone(AstFactory.forStatement2(AstFactory.variableDeclarationList2(
+ Keyword.VAR, [AstFactory.variableDeclaration("i")]), null, null,
+ AstFactory.block()));
}
void test_visitForStatement_ic() {
- _assertClone(
- AstFactory.forStatement2(
- AstFactory.variableDeclarationList2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("i")]),
- AstFactory.identifier3("c"),
- null,
- AstFactory.block()));
+ _assertClone(AstFactory.forStatement2(AstFactory.variableDeclarationList2(
+ Keyword.VAR, [AstFactory.variableDeclaration("i")]),
+ AstFactory.identifier3("c"), null, AstFactory.block()));
}
void test_visitForStatement_icu() {
- _assertClone(
- AstFactory.forStatement2(
- AstFactory.variableDeclarationList2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("i")]),
- AstFactory.identifier3("c"),
- [AstFactory.identifier3("u")],
- AstFactory.block()));
+ _assertClone(AstFactory.forStatement2(AstFactory.variableDeclarationList2(
+ Keyword.VAR, [AstFactory.variableDeclaration("i")]),
+ AstFactory.identifier3("c"), [
+ AstFactory.identifier3("u")
+ ], AstFactory.block()));
}
void test_visitForStatement_iu() {
- _assertClone(
- AstFactory.forStatement2(
- AstFactory.variableDeclarationList2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("i")]),
- null,
- [AstFactory.identifier3("u")],
- AstFactory.block()));
+ _assertClone(AstFactory.forStatement2(AstFactory.variableDeclarationList2(
+ Keyword.VAR, [AstFactory.variableDeclaration("i")]), null, [
+ AstFactory.identifier3("u")
+ ], AstFactory.block()));
}
void test_visitForStatement_u() {
- _assertClone(
- AstFactory.forStatement(
- null,
- null,
- [AstFactory.identifier3("u")],
- AstFactory.block()));
+ _assertClone(AstFactory.forStatement(
+ null, null, [AstFactory.identifier3("u")], AstFactory.block()));
}
void test_visitFunctionDeclaration_getter() {
- _assertClone(
- AstFactory.functionDeclaration(
- null,
- Keyword.GET,
- "f",
- AstFactory.functionExpression()));
+ _assertClone(AstFactory.functionDeclaration(
+ null, Keyword.GET, "f", AstFactory.functionExpression()));
}
void test_visitFunctionDeclaration_normal() {
- _assertClone(
- AstFactory.functionDeclaration(
- null,
- null,
- "f",
- AstFactory.functionExpression()));
+ _assertClone(AstFactory.functionDeclaration(
+ null, null, "f", AstFactory.functionExpression()));
}
void test_visitFunctionDeclaration_setter() {
- _assertClone(
- AstFactory.functionDeclaration(
- null,
- Keyword.SET,
- "f",
- AstFactory.functionExpression()));
+ _assertClone(AstFactory.functionDeclaration(
+ null, Keyword.SET, "f", AstFactory.functionExpression()));
}
void test_visitFunctionDeclaration_withMetadata() {
FunctionDeclaration declaration = AstFactory.functionDeclaration(
- null,
- null,
- "f",
- AstFactory.functionExpression());
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ null, null, "f", AstFactory.functionExpression());
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(declaration);
}
void test_visitFunctionDeclarationStatement() {
- _assertClone(
- AstFactory.functionDeclarationStatement(
- null,
- null,
- "f",
- AstFactory.functionExpression()));
+ _assertClone(AstFactory.functionDeclarationStatement(
+ null, null, "f", AstFactory.functionExpression()));
}
void test_visitFunctionExpression() {
@@ -1173,31 +859,20 @@
}
void test_visitFunctionTypeAlias_generic() {
- _assertClone(
- AstFactory.typeAlias(
- AstFactory.typeName4("A"),
- "F",
- AstFactory.typeParameterList(["B"]),
- AstFactory.formalParameterList()));
+ _assertClone(AstFactory.typeAlias(AstFactory.typeName4("A"), "F",
+ AstFactory.typeParameterList(["B"]), AstFactory.formalParameterList()));
}
void test_visitFunctionTypeAlias_nonGeneric() {
- _assertClone(
- AstFactory.typeAlias(
- AstFactory.typeName4("A"),
- "F",
- null,
- AstFactory.formalParameterList()));
+ _assertClone(AstFactory.typeAlias(AstFactory.typeName4("A"), "F", null,
+ AstFactory.formalParameterList()));
}
void test_visitFunctionTypeAlias_withMetadata() {
FunctionTypeAlias declaration = AstFactory.typeAlias(
- AstFactory.typeName4("A"),
- "F",
- null,
- AstFactory.formalParameterList());
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ AstFactory.typeName4("A"), "F", null, AstFactory.formalParameterList());
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(declaration);
}
@@ -1206,27 +881,23 @@
}
void test_visitFunctionTypedFormalParameter_type() {
- _assertClone(
- AstFactory.functionTypedFormalParameter(AstFactory.typeName4("T"), "f"));
+ _assertClone(AstFactory.functionTypedFormalParameter(
+ AstFactory.typeName4("T"), "f"));
}
void test_visitIfStatement_withElse() {
- _assertClone(
- AstFactory.ifStatement2(
- AstFactory.identifier3("c"),
- AstFactory.block(),
- AstFactory.block()));
+ _assertClone(AstFactory.ifStatement2(
+ AstFactory.identifier3("c"), AstFactory.block(), AstFactory.block()));
}
void test_visitIfStatement_withoutElse() {
- _assertClone(
- AstFactory.ifStatement(AstFactory.identifier3("c"), AstFactory.block()));
+ _assertClone(AstFactory.ifStatement(
+ AstFactory.identifier3("c"), AstFactory.block()));
}
void test_visitImplementsClause_multiple() {
- _assertClone(
- AstFactory.implementsClause(
- [AstFactory.typeName4("A"), AstFactory.typeName4("B")]));
+ _assertClone(AstFactory.implementsClause(
+ [AstFactory.typeName4("A"), AstFactory.typeName4("B")]));
}
void test_visitImplementsClause_single() {
@@ -1234,21 +905,16 @@
}
void test_visitImportDirective_combinator() {
- _assertClone(
- AstFactory.importDirective3(
- "a.dart",
- null,
- [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
+ _assertClone(AstFactory.importDirective3("a.dart", null, [
+ AstFactory.showCombinator([AstFactory.identifier3("A")])
+ ]));
}
void test_visitImportDirective_combinators() {
- _assertClone(
- AstFactory.importDirective3(
- "a.dart",
- null,
- [
- AstFactory.showCombinator([AstFactory.identifier3("A")]),
- AstFactory.hideCombinator([AstFactory.identifier3("B")])]));
+ _assertClone(AstFactory.importDirective3("a.dart", null, [
+ AstFactory.showCombinator([AstFactory.identifier3("A")]),
+ AstFactory.hideCombinator([AstFactory.identifier3("B")])
+ ]));
}
void test_visitImportDirective_minimal() {
@@ -1260,34 +926,28 @@
}
void test_visitImportDirective_prefix_combinator() {
- _assertClone(
- AstFactory.importDirective3(
- "a.dart",
- "p",
- [AstFactory.showCombinator([AstFactory.identifier3("A")])]));
+ _assertClone(AstFactory.importDirective3("a.dart", "p", [
+ AstFactory.showCombinator([AstFactory.identifier3("A")])
+ ]));
}
void test_visitImportDirective_prefix_combinators() {
- _assertClone(
- AstFactory.importDirective3(
- "a.dart",
- "p",
- [
- AstFactory.showCombinator([AstFactory.identifier3("A")]),
- AstFactory.hideCombinator([AstFactory.identifier3("B")])]));
+ _assertClone(AstFactory.importDirective3("a.dart", "p", [
+ AstFactory.showCombinator([AstFactory.identifier3("A")]),
+ AstFactory.hideCombinator([AstFactory.identifier3("B")])
+ ]));
}
void test_visitImportDirective_withMetadata() {
ImportDirective directive = AstFactory.importDirective3("a.dart", null);
- directive.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ directive.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(directive);
}
void test_visitImportHideCombinator_multiple() {
- _assertClone(
- AstFactory.hideCombinator(
- [AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
+ _assertClone(AstFactory.hideCombinator(
+ [AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
}
void test_visitImportHideCombinator_single() {
@@ -1295,9 +955,8 @@
}
void test_visitImportShowCombinator_multiple() {
- _assertClone(
- AstFactory.showCombinator(
- [AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
+ _assertClone(AstFactory.showCombinator(
+ [AstFactory.identifier3("a"), AstFactory.identifier3("b")]));
}
void test_visitImportShowCombinator_single() {
@@ -1305,30 +964,23 @@
}
void test_visitIndexExpression() {
- _assertClone(
- AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("i")));
+ _assertClone(AstFactory.indexExpression(
+ AstFactory.identifier3("a"), AstFactory.identifier3("i")));
}
void test_visitInstanceCreationExpression_const() {
- _assertClone(
- AstFactory.instanceCreationExpression2(
- Keyword.CONST,
- AstFactory.typeName4("C")));
+ _assertClone(AstFactory.instanceCreationExpression2(
+ Keyword.CONST, AstFactory.typeName4("C")));
}
void test_visitInstanceCreationExpression_named() {
- _assertClone(
- AstFactory.instanceCreationExpression3(
- Keyword.NEW,
- AstFactory.typeName4("C"),
- "c"));
+ _assertClone(AstFactory.instanceCreationExpression3(
+ Keyword.NEW, AstFactory.typeName4("C"), "c"));
}
void test_visitInstanceCreationExpression_unnamed() {
- _assertClone(
- AstFactory.instanceCreationExpression2(Keyword.NEW, AstFactory.typeName4("C")));
+ _assertClone(AstFactory.instanceCreationExpression2(
+ Keyword.NEW, AstFactory.typeName4("C")));
}
void test_visitIntegerLiteral() {
@@ -1349,19 +1001,13 @@
}
void test_visitIsExpression_negated() {
- _assertClone(
- AstFactory.isExpression(
- AstFactory.identifier3("a"),
- true,
- AstFactory.typeName4("C")));
+ _assertClone(AstFactory.isExpression(
+ AstFactory.identifier3("a"), true, AstFactory.typeName4("C")));
}
void test_visitIsExpression_normal() {
- _assertClone(
- AstFactory.isExpression(
- AstFactory.identifier3("a"),
- false,
- AstFactory.typeName4("C")));
+ _assertClone(AstFactory.isExpression(
+ AstFactory.identifier3("a"), false, AstFactory.typeName4("C")));
}
void test_visitLabel() {
@@ -1369,17 +1015,15 @@
}
void test_visitLabeledStatement_multiple() {
- _assertClone(
- AstFactory.labeledStatement(
- [AstFactory.label2("a"), AstFactory.label2("b")],
- AstFactory.returnStatement()));
+ _assertClone(AstFactory.labeledStatement([
+ AstFactory.label2("a"),
+ AstFactory.label2("b")
+ ], AstFactory.returnStatement()));
}
void test_visitLabeledStatement_single() {
- _assertClone(
- AstFactory.labeledStatement(
- [AstFactory.label2("a")],
- AstFactory.returnStatement()));
+ _assertClone(AstFactory.labeledStatement(
+ [AstFactory.label2("a")], AstFactory.returnStatement()));
}
void test_visitLibraryDirective() {
@@ -1388,18 +1032,17 @@
void test_visitLibraryDirective_withMetadata() {
LibraryDirective directive = AstFactory.libraryDirective2("l");
- directive.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ directive.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(directive);
}
void test_visitLibraryIdentifier_multiple() {
- _assertClone(
- AstFactory.libraryIdentifier(
- [
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"),
- AstFactory.identifier3("c")]));
+ _assertClone(AstFactory.libraryIdentifier([
+ AstFactory.identifier3("a"),
+ AstFactory.identifier3("b"),
+ AstFactory.identifier3("c")
+ ]));
}
void test_visitLibraryIdentifier_single() {
@@ -1415,12 +1058,11 @@
}
void test_visitListLiteral_nonEmpty() {
- _assertClone(
- AstFactory.listLiteral(
- [
- AstFactory.identifier3("a"),
- AstFactory.identifier3("b"),
- AstFactory.identifier3("c")]));
+ _assertClone(AstFactory.listLiteral([
+ AstFactory.identifier3("a"),
+ AstFactory.identifier3("b"),
+ AstFactory.identifier3("c")
+ ]));
}
void test_visitMapLiteral_const() {
@@ -1432,12 +1074,11 @@
}
void test_visitMapLiteral_nonEmpty() {
- _assertClone(
- AstFactory.mapLiteral2(
- [
- AstFactory.mapLiteralEntry("a", AstFactory.identifier3("a")),
- AstFactory.mapLiteralEntry("b", AstFactory.identifier3("b")),
- AstFactory.mapLiteralEntry("c", AstFactory.identifier3("c"))]));
+ _assertClone(AstFactory.mapLiteral2([
+ AstFactory.mapLiteralEntry("a", AstFactory.identifier3("a")),
+ AstFactory.mapLiteralEntry("b", AstFactory.identifier3("b")),
+ AstFactory.mapLiteralEntry("c", AstFactory.identifier3("c"))
+ ]));
}
void test_visitMapLiteralEntry() {
@@ -1445,175 +1086,92 @@
}
void test_visitMethodDeclaration_external() {
- _assertClone(
- AstFactory.methodDeclaration(
- null,
- null,
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList()));
+ _assertClone(AstFactory.methodDeclaration(null, null, null, null,
+ AstFactory.identifier3("m"), AstFactory.formalParameterList()));
}
void test_visitMethodDeclaration_external_returnType() {
- _assertClone(
- AstFactory.methodDeclaration(
- null,
- AstFactory.typeName4("T"),
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList()));
+ _assertClone(AstFactory.methodDeclaration(null, AstFactory.typeName4("T"),
+ null, null, AstFactory.identifier3("m"),
+ AstFactory.formalParameterList()));
}
void test_visitMethodDeclaration_getter() {
- _assertClone(
- AstFactory.methodDeclaration2(
- null,
- null,
- Keyword.GET,
- null,
- AstFactory.identifier3("m"),
- null,
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.methodDeclaration2(null, null, Keyword.GET, null,
+ AstFactory.identifier3("m"), null, AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_getter_returnType() {
- _assertClone(
- AstFactory.methodDeclaration2(
- null,
- AstFactory.typeName4("T"),
- Keyword.GET,
- null,
- AstFactory.identifier3("m"),
- null,
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.methodDeclaration2(null, AstFactory.typeName4("T"),
+ Keyword.GET, null, AstFactory.identifier3("m"), null,
+ AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_getter_seturnType() {
- _assertClone(
- AstFactory.methodDeclaration2(
- null,
- AstFactory.typeName4("T"),
- Keyword.SET,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(
+ _assertClone(AstFactory.methodDeclaration2(null, AstFactory.typeName4("T"),
+ Keyword.SET, null, AstFactory.identifier3("m"), AstFactory
+ .formalParameterList(
[AstFactory.simpleFormalParameter(Keyword.VAR, "v")]),
- AstFactory.blockFunctionBody2()));
+ AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_minimal() {
- _assertClone(
- AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.methodDeclaration2(null, null, null, null,
+ AstFactory.identifier3("m"), AstFactory.formalParameterList(),
+ AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_multipleParameters() {
- _assertClone(
- AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(
- [
- AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
- AstFactory.simpleFormalParameter(Keyword.VAR, "b")]),
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.methodDeclaration2(null, null, null, null,
+ AstFactory.identifier3("m"), AstFactory.formalParameterList([
+ AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
+ AstFactory.simpleFormalParameter(Keyword.VAR, "b")
+ ]), AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_operator() {
- _assertClone(
- AstFactory.methodDeclaration2(
- null,
- null,
- null,
- Keyword.OPERATOR,
- AstFactory.identifier3("+"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.methodDeclaration2(null, null, null,
+ Keyword.OPERATOR, AstFactory.identifier3("+"),
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_operator_returnType() {
- _assertClone(
- AstFactory.methodDeclaration2(
- null,
- AstFactory.typeName4("T"),
- null,
- Keyword.OPERATOR,
- AstFactory.identifier3("+"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.methodDeclaration2(null, AstFactory.typeName4("T"),
+ null, Keyword.OPERATOR, AstFactory.identifier3("+"),
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_returnType() {
- _assertClone(
- AstFactory.methodDeclaration2(
- null,
- AstFactory.typeName4("T"),
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.methodDeclaration2(null, AstFactory.typeName4("T"),
+ null, null, AstFactory.identifier3("m"),
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_setter() {
- _assertClone(
- AstFactory.methodDeclaration2(
- null,
- null,
- Keyword.SET,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(
- [AstFactory.simpleFormalParameter(Keyword.VAR, "v")]),
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.methodDeclaration2(null, null, Keyword.SET, null,
+ AstFactory.identifier3("m"), AstFactory.formalParameterList(
+ [AstFactory.simpleFormalParameter(Keyword.VAR, "v")]),
+ AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_static() {
- _assertClone(
- AstFactory.methodDeclaration2(
- Keyword.STATIC,
- null,
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.methodDeclaration2(Keyword.STATIC, null, null, null,
+ AstFactory.identifier3("m"), AstFactory.formalParameterList(),
+ AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_static_returnType() {
- _assertClone(
- AstFactory.methodDeclaration2(
- Keyword.STATIC,
- AstFactory.typeName4("T"),
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2()));
+ _assertClone(AstFactory.methodDeclaration2(Keyword.STATIC,
+ AstFactory.typeName4("T"), null, null, AstFactory.identifier3("m"),
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2()));
}
void test_visitMethodDeclaration_withMetadata() {
- MethodDeclaration declaration = AstFactory.methodDeclaration2(
- null,
- null,
- null,
- null,
- AstFactory.identifier3("m"),
- AstFactory.formalParameterList(),
- AstFactory.blockFunctionBody2());
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ MethodDeclaration declaration = AstFactory.methodDeclaration2(null, null,
+ null, null, AstFactory.identifier3("m"),
+ AstFactory.formalParameterList(), AstFactory.blockFunctionBody2());
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(declaration);
}
@@ -1630,10 +1188,9 @@
}
void test_visitNamedFormalParameter() {
- _assertClone(
- AstFactory.namedFormalParameter(
- AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
- AstFactory.integer(0)));
+ _assertClone(AstFactory.namedFormalParameter(
+ AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
+ AstFactory.integer(0)));
}
void test_visitNativeClause() {
@@ -1659,8 +1216,8 @@
void test_visitPartDirective_withMetadata() {
PartDirective directive = AstFactory.partDirective2("a.dart");
- directive.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ directive.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(directive);
}
@@ -1672,21 +1229,20 @@
void test_visitPartOfDirective_withMetadata() {
PartOfDirective directive =
AstFactory.partOfDirective(AstFactory.libraryIdentifier2(["l"]));
- directive.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ directive.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(directive);
}
void test_visitPositionalFormalParameter() {
- _assertClone(
- AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
- AstFactory.integer(0)));
+ _assertClone(AstFactory.positionalFormalParameter(
+ AstFactory.simpleFormalParameter(Keyword.VAR, "a"),
+ AstFactory.integer(0)));
}
void test_visitPostfixExpression() {
- _assertClone(
- AstFactory.postfixExpression(AstFactory.identifier3("a"), TokenType.PLUS_PLUS));
+ _assertClone(AstFactory.postfixExpression(
+ AstFactory.identifier3("a"), TokenType.PLUS_PLUS));
}
void test_visitPrefixedIdentifier() {
@@ -1694,8 +1250,8 @@
}
void test_visitPrefixExpression() {
- _assertClone(
- AstFactory.prefixExpression(TokenType.MINUS, AstFactory.identifier3("a")));
+ _assertClone(AstFactory.prefixExpression(
+ TokenType.MINUS, AstFactory.identifier3("a")));
}
void test_visitPropertyAccess() {
@@ -1732,11 +1288,8 @@
}
void test_visitSimpleFormalParameter_keyword_type() {
- _assertClone(
- AstFactory.simpleFormalParameter2(
- Keyword.FINAL,
- AstFactory.typeName4("A"),
- "a"));
+ _assertClone(AstFactory.simpleFormalParameter2(
+ Keyword.FINAL, AstFactory.typeName4("A"), "a"));
}
void test_visitSimpleFormalParameter_type() {
@@ -1753,12 +1306,11 @@
}
void test_visitStringInterpolation() {
- _assertClone(
- AstFactory.string(
- [
- AstFactory.interpolationString("'a", "a"),
- AstFactory.interpolationExpression(AstFactory.identifier3("e")),
- AstFactory.interpolationString("b'", "b")]));
+ _assertClone(AstFactory.string([
+ AstFactory.interpolationString("'a", "a"),
+ AstFactory.interpolationExpression(AstFactory.identifier3("e")),
+ AstFactory.interpolationString("b'", "b")
+ ]));
}
void test_visitSuperConstructorInvocation() {
@@ -1774,38 +1326,33 @@
}
void test_visitSwitchCase_multipleLabels() {
- _assertClone(
- AstFactory.switchCase2(
- [AstFactory.label2("l1"), AstFactory.label2("l2")],
- AstFactory.identifier3("a"),
- [AstFactory.block()]));
+ _assertClone(AstFactory.switchCase2([
+ AstFactory.label2("l1"),
+ AstFactory.label2("l2")
+ ], AstFactory.identifier3("a"), [AstFactory.block()]));
}
void test_visitSwitchCase_multipleStatements() {
- _assertClone(
- AstFactory.switchCase(
- AstFactory.identifier3("a"),
- [AstFactory.block(), AstFactory.block()]));
+ _assertClone(AstFactory.switchCase(
+ AstFactory.identifier3("a"), [AstFactory.block(), AstFactory.block()]));
}
void test_visitSwitchCase_noLabels() {
- _assertClone(
- AstFactory.switchCase(AstFactory.identifier3("a"), [AstFactory.block()]));
+ _assertClone(AstFactory.switchCase(
+ AstFactory.identifier3("a"), [AstFactory.block()]));
}
void test_visitSwitchCase_singleLabel() {
- _assertClone(
- AstFactory.switchCase2(
- [AstFactory.label2("l1")],
- AstFactory.identifier3("a"),
- [AstFactory.block()]));
+ _assertClone(AstFactory.switchCase2([
+ AstFactory.label2("l1")
+ ], AstFactory.identifier3("a"), [AstFactory.block()]));
}
void test_visitSwitchDefault_multipleLabels() {
- _assertClone(
- AstFactory.switchDefault(
- [AstFactory.label2("l1"), AstFactory.label2("l2")],
- [AstFactory.block()]));
+ _assertClone(AstFactory.switchDefault([
+ AstFactory.label2("l1"),
+ AstFactory.label2("l2")
+ ], [AstFactory.block()]));
}
void test_visitSwitchDefault_multipleStatements() {
@@ -1818,17 +1365,15 @@
}
void test_visitSwitchDefault_singleLabel() {
- _assertClone(
- AstFactory.switchDefault([AstFactory.label2("l1")], [AstFactory.block()]));
+ _assertClone(AstFactory.switchDefault(
+ [AstFactory.label2("l1")], [AstFactory.block()]));
}
void test_visitSwitchStatement() {
- _assertClone(
- AstFactory.switchStatement(
- AstFactory.identifier3("a"),
- [
- AstFactory.switchCase(AstFactory.string2("b"), [AstFactory.block()]),
- AstFactory.switchDefault2([AstFactory.block()])]));
+ _assertClone(AstFactory.switchStatement(AstFactory.identifier3("a"), [
+ AstFactory.switchCase(AstFactory.string2("b"), [AstFactory.block()]),
+ AstFactory.switchDefault2([AstFactory.block()])
+ ]));
}
void test_visitSymbolLiteral_multiple() {
@@ -1848,41 +1393,34 @@
}
void test_visitTopLevelVariableDeclaration_multiple() {
- _assertClone(
- AstFactory.topLevelVariableDeclaration2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a")]));
+ _assertClone(AstFactory.topLevelVariableDeclaration2(
+ Keyword.VAR, [AstFactory.variableDeclaration("a")]));
}
void test_visitTopLevelVariableDeclaration_single() {
- _assertClone(
- AstFactory.topLevelVariableDeclaration2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a"), AstFactory.variableDeclaration("b")]));
+ _assertClone(AstFactory.topLevelVariableDeclaration2(Keyword.VAR, [
+ AstFactory.variableDeclaration("a"),
+ AstFactory.variableDeclaration("b")
+ ]));
}
void test_visitTryStatement_catch() {
- _assertClone(
- AstFactory.tryStatement2(
- AstFactory.block(),
- [AstFactory.catchClause3(AstFactory.typeName4("E"))]));
+ _assertClone(AstFactory.tryStatement2(AstFactory.block(), [
+ AstFactory.catchClause3(AstFactory.typeName4("E"))
+ ]));
}
void test_visitTryStatement_catches() {
- _assertClone(
- AstFactory.tryStatement2(
- AstFactory.block(),
- [
- AstFactory.catchClause3(AstFactory.typeName4("E")),
- AstFactory.catchClause3(AstFactory.typeName4("F"))]));
+ _assertClone(AstFactory.tryStatement2(AstFactory.block(), [
+ AstFactory.catchClause3(AstFactory.typeName4("E")),
+ AstFactory.catchClause3(AstFactory.typeName4("F"))
+ ]));
}
void test_visitTryStatement_catchFinally() {
- _assertClone(
- AstFactory.tryStatement3(
- AstFactory.block(),
- [AstFactory.catchClause3(AstFactory.typeName4("E"))],
- AstFactory.block()));
+ _assertClone(AstFactory.tryStatement3(AstFactory.block(), [
+ AstFactory.catchClause3(AstFactory.typeName4("E"))
+ ], AstFactory.block()));
}
void test_visitTryStatement_finally() {
@@ -1891,9 +1429,8 @@
}
void test_visitTypeArgumentList_multiple() {
- _assertClone(
- AstFactory.typeArgumentList(
- [AstFactory.typeName4("E"), AstFactory.typeName4("F")]));
+ _assertClone(AstFactory.typeArgumentList(
+ [AstFactory.typeName4("E"), AstFactory.typeName4("F")]));
}
void test_visitTypeArgumentList_single() {
@@ -1901,17 +1438,13 @@
}
void test_visitTypeName_multipleArgs() {
- _assertClone(
- AstFactory.typeName4(
- "C",
- [AstFactory.typeName4("D"), AstFactory.typeName4("E")]));
+ _assertClone(AstFactory.typeName4(
+ "C", [AstFactory.typeName4("D"), AstFactory.typeName4("E")]));
}
void test_visitTypeName_nestedArg() {
- _assertClone(
- AstFactory.typeName4(
- "C",
- [AstFactory.typeName4("D", [AstFactory.typeName4("E")])]));
+ _assertClone(AstFactory.typeName4(
+ "C", [AstFactory.typeName4("D", [AstFactory.typeName4("E")])]));
}
void test_visitTypeName_noArgs() {
@@ -1928,8 +1461,8 @@
void test_visitTypeParameter_withMetadata() {
TypeParameter parameter = AstFactory.typeParameter("E");
- parameter.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ parameter.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(parameter);
}
@@ -1956,71 +1489,68 @@
void test_visitVariableDeclaration_withMetadata() {
VariableDeclaration declaration = AstFactory.variableDeclaration("a");
- declaration.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ declaration.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(declaration);
}
void test_visitVariableDeclarationList_const_type() {
- _assertClone(
- AstFactory.variableDeclarationList(
- Keyword.CONST,
- AstFactory.typeName4("C"),
- [AstFactory.variableDeclaration("a"), AstFactory.variableDeclaration("b")]));
+ _assertClone(AstFactory.variableDeclarationList(Keyword.CONST,
+ AstFactory.typeName4("C"), [
+ AstFactory.variableDeclaration("a"),
+ AstFactory.variableDeclaration("b")
+ ]));
}
void test_visitVariableDeclarationList_final_noType() {
- _assertClone(
- AstFactory.variableDeclarationList2(
- Keyword.FINAL,
- [AstFactory.variableDeclaration("a"), AstFactory.variableDeclaration("b")]));
+ _assertClone(AstFactory.variableDeclarationList2(Keyword.FINAL, [
+ AstFactory.variableDeclaration("a"),
+ AstFactory.variableDeclaration("b")
+ ]));
}
void test_visitVariableDeclarationList_final_withMetadata() {
- VariableDeclarationList declarationList =
- AstFactory.variableDeclarationList2(
- Keyword.FINAL,
- [AstFactory.variableDeclaration("a"), AstFactory.variableDeclaration("b")]);
- declarationList.metadata =
- [AstFactory.annotation(AstFactory.identifier3("deprecated"))];
+ VariableDeclarationList declarationList = AstFactory
+ .variableDeclarationList2(Keyword.FINAL, [
+ AstFactory.variableDeclaration("a"),
+ AstFactory.variableDeclaration("b")
+ ]);
+ declarationList.metadata
+ .add(AstFactory.annotation(AstFactory.identifier3("deprecated")));
_assertClone(declarationList);
}
void test_visitVariableDeclarationList_type() {
- _assertClone(
- AstFactory.variableDeclarationList(
- null,
- AstFactory.typeName4("C"),
- [AstFactory.variableDeclaration("a"), AstFactory.variableDeclaration("b")]));
+ _assertClone(AstFactory.variableDeclarationList(null,
+ AstFactory.typeName4("C"), [
+ AstFactory.variableDeclaration("a"),
+ AstFactory.variableDeclaration("b")
+ ]));
}
void test_visitVariableDeclarationList_var() {
- _assertClone(
- AstFactory.variableDeclarationList2(
- Keyword.VAR,
- [AstFactory.variableDeclaration("a"), AstFactory.variableDeclaration("b")]));
+ _assertClone(AstFactory.variableDeclarationList2(Keyword.VAR, [
+ AstFactory.variableDeclaration("a"),
+ AstFactory.variableDeclaration("b")
+ ]));
}
void test_visitVariableDeclarationStatement() {
- _assertClone(
- AstFactory.variableDeclarationStatement(
- null,
- AstFactory.typeName4("C"),
- [AstFactory.variableDeclaration("c")]));
+ _assertClone(AstFactory.variableDeclarationStatement(null,
+ AstFactory.typeName4("C"), [AstFactory.variableDeclaration("c")]));
}
void test_visitWhileStatement() {
- _assertClone(
- AstFactory.whileStatement(AstFactory.identifier3("c"), AstFactory.block()));
+ _assertClone(AstFactory.whileStatement(
+ AstFactory.identifier3("c"), AstFactory.block()));
}
void test_visitWithClause_multiple() {
- _assertClone(
- AstFactory.withClause(
- [
- AstFactory.typeName4("A"),
- AstFactory.typeName4("B"),
- AstFactory.typeName4("C")]));
+ _assertClone(AstFactory.withClause([
+ AstFactory.typeName4("A"),
+ AstFactory.typeName4("B"),
+ AstFactory.typeName4("C")
+ ]));
}
void test_visitWithClause_single() {
@@ -2381,366 +1911,365 @@
/**
* Instances of the class `Node` represent simple nodes used for testing purposes.
*/
-class DirectedGraphTest_Node {
-}
+class DirectedGraphTest_Node {}
-class Getter_NodeReplacerTest_test_annotation implements NodeReplacerTest_Getter
- {
+class Getter_NodeReplacerTest_test_annotation
+ implements NodeReplacerTest_Getter {
@override
ArgumentList get(Annotation node) => node.arguments;
}
-class Getter_NodeReplacerTest_test_annotation_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_annotation_2
+ implements NodeReplacerTest_Getter {
@override
Identifier get(Annotation node) => node.name;
}
-class Getter_NodeReplacerTest_test_annotation_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_annotation_3
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(Annotation node) => node.constructorName;
}
-class Getter_NodeReplacerTest_test_asExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_asExpression
+ implements NodeReplacerTest_Getter {
@override
TypeName get(AsExpression node) => node.type;
}
-class Getter_NodeReplacerTest_test_asExpression_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_asExpression_2
+ implements NodeReplacerTest_Getter {
@override
Expression get(AsExpression node) => node.expression;
}
-class Getter_NodeReplacerTest_test_assertStatement implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_assertStatement
+ implements NodeReplacerTest_Getter {
@override
Expression get(AssertStatement node) => node.condition;
}
-class Getter_NodeReplacerTest_test_assignmentExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_assignmentExpression
+ implements NodeReplacerTest_Getter {
@override
Expression get(AssignmentExpression node) => node.rightHandSide;
}
-class Getter_NodeReplacerTest_test_assignmentExpression_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_assignmentExpression_2
+ implements NodeReplacerTest_Getter {
@override
Expression get(AssignmentExpression node) => node.leftHandSide;
}
-class Getter_NodeReplacerTest_test_binaryExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_binaryExpression
+ implements NodeReplacerTest_Getter {
@override
Expression get(BinaryExpression node) => node.leftOperand;
}
-class Getter_NodeReplacerTest_test_binaryExpression_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_binaryExpression_2
+ implements NodeReplacerTest_Getter {
@override
Expression get(BinaryExpression node) => node.rightOperand;
}
-class Getter_NodeReplacerTest_test_blockFunctionBody implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_blockFunctionBody
+ implements NodeReplacerTest_Getter {
@override
Block get(BlockFunctionBody node) => node.block;
}
-class Getter_NodeReplacerTest_test_breakStatement implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_breakStatement
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(BreakStatement node) => node.label;
}
-class Getter_NodeReplacerTest_test_cascadeExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_cascadeExpression
+ implements NodeReplacerTest_Getter {
@override
Expression get(CascadeExpression node) => node.target;
}
-class Getter_NodeReplacerTest_test_catchClause implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_catchClause
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(CatchClause node) => node.stackTraceParameter;
}
-class Getter_NodeReplacerTest_test_catchClause_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_catchClause_2
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(CatchClause node) => node.exceptionParameter;
}
-class Getter_NodeReplacerTest_test_catchClause_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_catchClause_3
+ implements NodeReplacerTest_Getter {
@override
TypeName get(CatchClause node) => node.exceptionType;
}
-class Getter_NodeReplacerTest_test_classDeclaration implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_classDeclaration
+ implements NodeReplacerTest_Getter {
@override
ImplementsClause get(ClassDeclaration node) => node.implementsClause;
}
-class Getter_NodeReplacerTest_test_classDeclaration_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_classDeclaration_2
+ implements NodeReplacerTest_Getter {
@override
WithClause get(ClassDeclaration node) => node.withClause;
}
-class Getter_NodeReplacerTest_test_classDeclaration_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_classDeclaration_3
+ implements NodeReplacerTest_Getter {
@override
NativeClause get(ClassDeclaration node) => node.nativeClause;
}
-class Getter_NodeReplacerTest_test_classDeclaration_4 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_classDeclaration_4
+ implements NodeReplacerTest_Getter {
@override
ExtendsClause get(ClassDeclaration node) => node.extendsClause;
}
-class Getter_NodeReplacerTest_test_classDeclaration_5 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_classDeclaration_5
+ implements NodeReplacerTest_Getter {
@override
TypeParameterList get(ClassDeclaration node) => node.typeParameters;
}
-class Getter_NodeReplacerTest_test_classDeclaration_6 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_classDeclaration_6
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(ClassDeclaration node) => node.name;
}
-class Getter_NodeReplacerTest_test_classTypeAlias implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_classTypeAlias
+ implements NodeReplacerTest_Getter {
@override
TypeName get(ClassTypeAlias node) => node.superclass;
}
-class Getter_NodeReplacerTest_test_classTypeAlias_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_classTypeAlias_2
+ implements NodeReplacerTest_Getter {
@override
ImplementsClause get(ClassTypeAlias node) => node.implementsClause;
}
-class Getter_NodeReplacerTest_test_classTypeAlias_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_classTypeAlias_3
+ implements NodeReplacerTest_Getter {
@override
WithClause get(ClassTypeAlias node) => node.withClause;
}
-class Getter_NodeReplacerTest_test_classTypeAlias_4 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_classTypeAlias_4
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(ClassTypeAlias node) => node.name;
}
-class Getter_NodeReplacerTest_test_classTypeAlias_5 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_classTypeAlias_5
+ implements NodeReplacerTest_Getter {
@override
TypeParameterList get(ClassTypeAlias node) => node.typeParameters;
}
-class Getter_NodeReplacerTest_test_commentReference implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_commentReference
+ implements NodeReplacerTest_Getter {
@override
Identifier get(CommentReference node) => node.identifier;
}
-class Getter_NodeReplacerTest_test_compilationUnit implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_compilationUnit
+ implements NodeReplacerTest_Getter {
@override
ScriptTag get(CompilationUnit node) => node.scriptTag;
}
-class Getter_NodeReplacerTest_test_conditionalExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_conditionalExpression
+ implements NodeReplacerTest_Getter {
@override
Expression get(ConditionalExpression node) => node.elseExpression;
}
-class Getter_NodeReplacerTest_test_conditionalExpression_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_conditionalExpression_2
+ implements NodeReplacerTest_Getter {
@override
Expression get(ConditionalExpression node) => node.thenExpression;
}
-class Getter_NodeReplacerTest_test_conditionalExpression_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_conditionalExpression_3
+ implements NodeReplacerTest_Getter {
@override
Expression get(ConditionalExpression node) => node.condition;
}
-class Getter_NodeReplacerTest_test_constructorDeclaration implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_constructorDeclaration
+ implements NodeReplacerTest_Getter {
@override
ConstructorName get(ConstructorDeclaration node) =>
node.redirectedConstructor;
}
-class Getter_NodeReplacerTest_test_constructorDeclaration_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_constructorDeclaration_2
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(ConstructorDeclaration node) => node.name;
}
-class Getter_NodeReplacerTest_test_constructorDeclaration_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_constructorDeclaration_3
+ implements NodeReplacerTest_Getter {
@override
Identifier get(ConstructorDeclaration node) => node.returnType;
}
-class Getter_NodeReplacerTest_test_constructorDeclaration_4 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_constructorDeclaration_4
+ implements NodeReplacerTest_Getter {
@override
FormalParameterList get(ConstructorDeclaration node) => node.parameters;
}
-class Getter_NodeReplacerTest_test_constructorDeclaration_5 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_constructorDeclaration_5
+ implements NodeReplacerTest_Getter {
@override
FunctionBody get(ConstructorDeclaration node) => node.body;
}
-class Getter_NodeReplacerTest_test_constructorFieldInitializer implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_constructorFieldInitializer
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(ConstructorFieldInitializer node) => node.fieldName;
}
-class Getter_NodeReplacerTest_test_constructorFieldInitializer_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_constructorFieldInitializer_2
+ implements NodeReplacerTest_Getter {
@override
Expression get(ConstructorFieldInitializer node) => node.expression;
}
-class Getter_NodeReplacerTest_test_constructorName implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_constructorName
+ implements NodeReplacerTest_Getter {
@override
TypeName get(ConstructorName node) => node.type;
}
-class Getter_NodeReplacerTest_test_constructorName_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_constructorName_2
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(ConstructorName node) => node.name;
}
-class Getter_NodeReplacerTest_test_continueStatement implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_continueStatement
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(ContinueStatement node) => node.label;
}
-class Getter_NodeReplacerTest_test_declaredIdentifier implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_declaredIdentifier
+ implements NodeReplacerTest_Getter {
@override
TypeName get(DeclaredIdentifier node) => node.type;
}
-class Getter_NodeReplacerTest_test_declaredIdentifier_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_declaredIdentifier_2
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(DeclaredIdentifier node) => node.identifier;
}
-class Getter_NodeReplacerTest_test_defaultFormalParameter implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_defaultFormalParameter
+ implements NodeReplacerTest_Getter {
@override
NormalFormalParameter get(DefaultFormalParameter node) => node.parameter;
}
-class Getter_NodeReplacerTest_test_defaultFormalParameter_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_defaultFormalParameter_2
+ implements NodeReplacerTest_Getter {
@override
Expression get(DefaultFormalParameter node) => node.defaultValue;
}
-class Getter_NodeReplacerTest_test_doStatement implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_doStatement
+ implements NodeReplacerTest_Getter {
@override
Expression get(DoStatement node) => node.condition;
}
-class Getter_NodeReplacerTest_test_doStatement_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_doStatement_2
+ implements NodeReplacerTest_Getter {
@override
Statement get(DoStatement node) => node.body;
}
-class Getter_NodeReplacerTest_test_enumConstantDeclaration implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_enumConstantDeclaration
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(EnumConstantDeclaration node) => node.name;
}
-class Getter_NodeReplacerTest_test_enumDeclaration implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_enumDeclaration
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(EnumDeclaration node) => node.name;
}
-class Getter_NodeReplacerTest_test_expressionFunctionBody implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_expressionFunctionBody
+ implements NodeReplacerTest_Getter {
@override
Expression get(ExpressionFunctionBody node) => node.expression;
}
-class Getter_NodeReplacerTest_test_expressionStatement implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_expressionStatement
+ implements NodeReplacerTest_Getter {
@override
Expression get(ExpressionStatement node) => node.expression;
}
-class Getter_NodeReplacerTest_test_extendsClause implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_extendsClause
+ implements NodeReplacerTest_Getter {
@override
TypeName get(ExtendsClause node) => node.superclass;
}
-class Getter_NodeReplacerTest_test_fieldDeclaration implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_fieldDeclaration
+ implements NodeReplacerTest_Getter {
@override
VariableDeclarationList get(FieldDeclaration node) => node.fields;
}
-class Getter_NodeReplacerTest_test_fieldFormalParameter implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_fieldFormalParameter
+ implements NodeReplacerTest_Getter {
@override
FormalParameterList get(FieldFormalParameter node) => node.parameters;
}
-class Getter_NodeReplacerTest_test_fieldFormalParameter_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_fieldFormalParameter_2
+ implements NodeReplacerTest_Getter {
@override
TypeName get(FieldFormalParameter node) => node.type;
}
-class Getter_NodeReplacerTest_test_forEachStatement_withIdentifier implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_forEachStatement_withIdentifier
+ implements NodeReplacerTest_Getter {
@override
Statement get(ForEachStatement node) => node.body;
}
-class Getter_NodeReplacerTest_test_forEachStatement_withIdentifier_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_forEachStatement_withIdentifier_2
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(ForEachStatement node) => node.identifier;
}
-class Getter_NodeReplacerTest_test_forEachStatement_withIdentifier_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_forEachStatement_withIdentifier_3
+ implements NodeReplacerTest_Getter {
@override
Expression get(ForEachStatement node) => node.iterable;
}
-class Getter_NodeReplacerTest_test_forEachStatement_withLoopVariable implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_forEachStatement_withLoopVariable
+ implements NodeReplacerTest_Getter {
@override
Expression get(ForEachStatement node) => node.iterable;
}
@@ -2757,189 +2286,189 @@
Statement get(ForEachStatement node) => node.body;
}
-class Getter_NodeReplacerTest_test_forStatement_withInitialization implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_forStatement_withInitialization
+ implements NodeReplacerTest_Getter {
@override
Statement get(ForStatement node) => node.body;
}
-class Getter_NodeReplacerTest_test_forStatement_withInitialization_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_forStatement_withInitialization_2
+ implements NodeReplacerTest_Getter {
@override
Expression get(ForStatement node) => node.condition;
}
-class Getter_NodeReplacerTest_test_forStatement_withInitialization_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_forStatement_withInitialization_3
+ implements NodeReplacerTest_Getter {
@override
Expression get(ForStatement node) => node.initialization;
}
-class Getter_NodeReplacerTest_test_forStatement_withVariables implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_forStatement_withVariables
+ implements NodeReplacerTest_Getter {
@override
Statement get(ForStatement node) => node.body;
}
-class Getter_NodeReplacerTest_test_forStatement_withVariables_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_forStatement_withVariables_2
+ implements NodeReplacerTest_Getter {
@override
VariableDeclarationList get(ForStatement node) => node.variables;
}
-class Getter_NodeReplacerTest_test_forStatement_withVariables_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_forStatement_withVariables_3
+ implements NodeReplacerTest_Getter {
@override
Expression get(ForStatement node) => node.condition;
}
-class Getter_NodeReplacerTest_test_functionDeclaration implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionDeclaration
+ implements NodeReplacerTest_Getter {
@override
TypeName get(FunctionDeclaration node) => node.returnType;
}
-class Getter_NodeReplacerTest_test_functionDeclaration_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionDeclaration_2
+ implements NodeReplacerTest_Getter {
@override
FunctionExpression get(FunctionDeclaration node) => node.functionExpression;
}
-class Getter_NodeReplacerTest_test_functionDeclaration_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionDeclaration_3
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(FunctionDeclaration node) => node.name;
}
-class Getter_NodeReplacerTest_test_functionDeclarationStatement implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionDeclarationStatement
+ implements NodeReplacerTest_Getter {
@override
FunctionDeclaration get(FunctionDeclarationStatement node) =>
node.functionDeclaration;
}
-class Getter_NodeReplacerTest_test_functionExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionExpression
+ implements NodeReplacerTest_Getter {
@override
FormalParameterList get(FunctionExpression node) => node.parameters;
}
-class Getter_NodeReplacerTest_test_functionExpression_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionExpression_2
+ implements NodeReplacerTest_Getter {
@override
FunctionBody get(FunctionExpression node) => node.body;
}
-class Getter_NodeReplacerTest_test_functionExpressionInvocation implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionExpressionInvocation
+ implements NodeReplacerTest_Getter {
@override
Expression get(FunctionExpressionInvocation node) => node.function;
}
-class Getter_NodeReplacerTest_test_functionExpressionInvocation_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionExpressionInvocation_2
+ implements NodeReplacerTest_Getter {
@override
ArgumentList get(FunctionExpressionInvocation node) => node.argumentList;
}
-class Getter_NodeReplacerTest_test_functionTypeAlias implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionTypeAlias
+ implements NodeReplacerTest_Getter {
@override
TypeParameterList get(FunctionTypeAlias node) => node.typeParameters;
}
-class Getter_NodeReplacerTest_test_functionTypeAlias_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionTypeAlias_2
+ implements NodeReplacerTest_Getter {
@override
FormalParameterList get(FunctionTypeAlias node) => node.parameters;
}
-class Getter_NodeReplacerTest_test_functionTypeAlias_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionTypeAlias_3
+ implements NodeReplacerTest_Getter {
@override
TypeName get(FunctionTypeAlias node) => node.returnType;
}
-class Getter_NodeReplacerTest_test_functionTypeAlias_4 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionTypeAlias_4
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(FunctionTypeAlias node) => node.name;
}
-class Getter_NodeReplacerTest_test_functionTypedFormalParameter implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionTypedFormalParameter
+ implements NodeReplacerTest_Getter {
@override
TypeName get(FunctionTypedFormalParameter node) => node.returnType;
}
-class Getter_NodeReplacerTest_test_functionTypedFormalParameter_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_functionTypedFormalParameter_2
+ implements NodeReplacerTest_Getter {
@override
FormalParameterList get(FunctionTypedFormalParameter node) => node.parameters;
}
-class Getter_NodeReplacerTest_test_ifStatement implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_ifStatement
+ implements NodeReplacerTest_Getter {
@override
Expression get(IfStatement node) => node.condition;
}
-class Getter_NodeReplacerTest_test_ifStatement_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_ifStatement_2
+ implements NodeReplacerTest_Getter {
@override
Statement get(IfStatement node) => node.elseStatement;
}
-class Getter_NodeReplacerTest_test_ifStatement_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_ifStatement_3
+ implements NodeReplacerTest_Getter {
@override
Statement get(IfStatement node) => node.thenStatement;
}
-class Getter_NodeReplacerTest_test_importDirective implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_importDirective
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(ImportDirective node) => node.prefix;
}
-class Getter_NodeReplacerTest_test_indexExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_indexExpression
+ implements NodeReplacerTest_Getter {
@override
Expression get(IndexExpression node) => node.target;
}
-class Getter_NodeReplacerTest_test_indexExpression_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_indexExpression_2
+ implements NodeReplacerTest_Getter {
@override
Expression get(IndexExpression node) => node.index;
}
-class Getter_NodeReplacerTest_test_instanceCreationExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_instanceCreationExpression
+ implements NodeReplacerTest_Getter {
@override
ArgumentList get(InstanceCreationExpression node) => node.argumentList;
}
-class Getter_NodeReplacerTest_test_instanceCreationExpression_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_instanceCreationExpression_2
+ implements NodeReplacerTest_Getter {
@override
ConstructorName get(InstanceCreationExpression node) => node.constructorName;
}
-class Getter_NodeReplacerTest_test_interpolationExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_interpolationExpression
+ implements NodeReplacerTest_Getter {
@override
Expression get(InterpolationExpression node) => node.expression;
}
-class Getter_NodeReplacerTest_test_isExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_isExpression
+ implements NodeReplacerTest_Getter {
@override
Expression get(IsExpression node) => node.expression;
}
-class Getter_NodeReplacerTest_test_isExpression_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_isExpression_2
+ implements NodeReplacerTest_Getter {
@override
TypeName get(IsExpression node) => node.type;
}
@@ -2949,214 +2478,214 @@
SimpleIdentifier get(Label node) => node.label;
}
-class Getter_NodeReplacerTest_test_labeledStatement implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_labeledStatement
+ implements NodeReplacerTest_Getter {
@override
Statement get(LabeledStatement node) => node.statement;
}
-class Getter_NodeReplacerTest_test_libraryDirective implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_libraryDirective
+ implements NodeReplacerTest_Getter {
@override
LibraryIdentifier get(LibraryDirective node) => node.name;
}
-class Getter_NodeReplacerTest_test_mapLiteralEntry implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_mapLiteralEntry
+ implements NodeReplacerTest_Getter {
@override
Expression get(MapLiteralEntry node) => node.value;
}
-class Getter_NodeReplacerTest_test_mapLiteralEntry_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_mapLiteralEntry_2
+ implements NodeReplacerTest_Getter {
@override
Expression get(MapLiteralEntry node) => node.key;
}
-class Getter_NodeReplacerTest_test_methodDeclaration implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_methodDeclaration
+ implements NodeReplacerTest_Getter {
@override
TypeName get(MethodDeclaration node) => node.returnType;
}
-class Getter_NodeReplacerTest_test_methodDeclaration_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_methodDeclaration_2
+ implements NodeReplacerTest_Getter {
@override
FunctionBody get(MethodDeclaration node) => node.body;
}
-class Getter_NodeReplacerTest_test_methodDeclaration_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_methodDeclaration_3
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(MethodDeclaration node) => node.name;
}
-class Getter_NodeReplacerTest_test_methodDeclaration_4 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_methodDeclaration_4
+ implements NodeReplacerTest_Getter {
@override
FormalParameterList get(MethodDeclaration node) => node.parameters;
}
-class Getter_NodeReplacerTest_test_methodInvocation implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_methodInvocation
+ implements NodeReplacerTest_Getter {
@override
ArgumentList get(MethodInvocation node) => node.argumentList;
}
-class Getter_NodeReplacerTest_test_methodInvocation_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_methodInvocation_2
+ implements NodeReplacerTest_Getter {
@override
Expression get(MethodInvocation node) => node.target;
}
-class Getter_NodeReplacerTest_test_methodInvocation_3 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_methodInvocation_3
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(MethodInvocation node) => node.methodName;
}
-class Getter_NodeReplacerTest_test_namedExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_namedExpression
+ implements NodeReplacerTest_Getter {
@override
Label get(NamedExpression node) => node.name;
}
-class Getter_NodeReplacerTest_test_namedExpression_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_namedExpression_2
+ implements NodeReplacerTest_Getter {
@override
Expression get(NamedExpression node) => node.expression;
}
-class Getter_NodeReplacerTest_test_nativeClause implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_nativeClause
+ implements NodeReplacerTest_Getter {
@override
StringLiteral get(NativeClause node) => node.name;
}
-class Getter_NodeReplacerTest_test_nativeFunctionBody implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_nativeFunctionBody
+ implements NodeReplacerTest_Getter {
@override
StringLiteral get(NativeFunctionBody node) => node.stringLiteral;
}
-class Getter_NodeReplacerTest_test_parenthesizedExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_parenthesizedExpression
+ implements NodeReplacerTest_Getter {
@override
Expression get(ParenthesizedExpression node) => node.expression;
}
-class Getter_NodeReplacerTest_test_partOfDirective implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_partOfDirective
+ implements NodeReplacerTest_Getter {
@override
LibraryIdentifier get(PartOfDirective node) => node.libraryName;
}
-class Getter_NodeReplacerTest_test_postfixExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_postfixExpression
+ implements NodeReplacerTest_Getter {
@override
Expression get(PostfixExpression node) => node.operand;
}
-class Getter_NodeReplacerTest_test_prefixedIdentifier implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_prefixedIdentifier
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(PrefixedIdentifier node) => node.identifier;
}
-class Getter_NodeReplacerTest_test_prefixedIdentifier_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_prefixedIdentifier_2
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(PrefixedIdentifier node) => node.prefix;
}
-class Getter_NodeReplacerTest_test_prefixExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_prefixExpression
+ implements NodeReplacerTest_Getter {
@override
Expression get(PrefixExpression node) => node.operand;
}
-class Getter_NodeReplacerTest_test_propertyAccess implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_propertyAccess
+ implements NodeReplacerTest_Getter {
@override
Expression get(PropertyAccess node) => node.target;
}
-class Getter_NodeReplacerTest_test_propertyAccess_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_propertyAccess_2
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(PropertyAccess node) => node.propertyName;
}
-class Getter_NodeReplacerTest_test_redirectingConstructorInvocation implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_redirectingConstructorInvocation
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(RedirectingConstructorInvocation node) =>
node.constructorName;
}
-class Getter_NodeReplacerTest_test_redirectingConstructorInvocation_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_redirectingConstructorInvocation_2
+ implements NodeReplacerTest_Getter {
@override
ArgumentList get(RedirectingConstructorInvocation node) => node.argumentList;
}
-class Getter_NodeReplacerTest_test_returnStatement implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_returnStatement
+ implements NodeReplacerTest_Getter {
@override
Expression get(ReturnStatement node) => node.expression;
}
-class Getter_NodeReplacerTest_test_simpleFormalParameter implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_simpleFormalParameter
+ implements NodeReplacerTest_Getter {
@override
TypeName get(SimpleFormalParameter node) => node.type;
}
-class Getter_NodeReplacerTest_test_superConstructorInvocation implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_superConstructorInvocation
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(SuperConstructorInvocation node) => node.constructorName;
}
-class Getter_NodeReplacerTest_test_superConstructorInvocation_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_superConstructorInvocation_2
+ implements NodeReplacerTest_Getter {
@override
ArgumentList get(SuperConstructorInvocation node) => node.argumentList;
}
-class Getter_NodeReplacerTest_test_switchCase implements NodeReplacerTest_Getter
- {
+class Getter_NodeReplacerTest_test_switchCase
+ implements NodeReplacerTest_Getter {
@override
Expression get(SwitchCase node) => node.expression;
}
-class Getter_NodeReplacerTest_test_switchStatement implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_switchStatement
+ implements NodeReplacerTest_Getter {
@override
Expression get(SwitchStatement node) => node.expression;
}
-class Getter_NodeReplacerTest_test_throwExpression implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_throwExpression
+ implements NodeReplacerTest_Getter {
@override
Expression get(ThrowExpression node) => node.expression;
}
-class Getter_NodeReplacerTest_test_topLevelVariableDeclaration implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_topLevelVariableDeclaration
+ implements NodeReplacerTest_Getter {
@override
VariableDeclarationList get(TopLevelVariableDeclaration node) =>
node.variables;
}
-class Getter_NodeReplacerTest_test_tryStatement implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_tryStatement
+ implements NodeReplacerTest_Getter {
@override
Block get(TryStatement node) => node.finallyBlock;
}
-class Getter_NodeReplacerTest_test_tryStatement_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_tryStatement_2
+ implements NodeReplacerTest_Getter {
@override
Block get(TryStatement node) => node.body;
}
@@ -3166,87 +2695,87 @@
TypeArgumentList get(TypeName node) => node.typeArguments;
}
-class Getter_NodeReplacerTest_test_typeName_2 implements NodeReplacerTest_Getter
- {
+class Getter_NodeReplacerTest_test_typeName_2
+ implements NodeReplacerTest_Getter {
@override
Identifier get(TypeName node) => node.name;
}
-class Getter_NodeReplacerTest_test_typeParameter implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_typeParameter
+ implements NodeReplacerTest_Getter {
@override
TypeName get(TypeParameter node) => node.bound;
}
-class Getter_NodeReplacerTest_test_typeParameter_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_typeParameter_2
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(TypeParameter node) => node.name;
}
-class Getter_NodeReplacerTest_test_variableDeclaration implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_variableDeclaration
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(VariableDeclaration node) => node.name;
}
-class Getter_NodeReplacerTest_test_variableDeclaration_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_variableDeclaration_2
+ implements NodeReplacerTest_Getter {
@override
Expression get(VariableDeclaration node) => node.initializer;
}
-class Getter_NodeReplacerTest_test_variableDeclarationList implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_variableDeclarationList
+ implements NodeReplacerTest_Getter {
@override
TypeName get(VariableDeclarationList node) => node.type;
}
-class Getter_NodeReplacerTest_test_variableDeclarationStatement implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_variableDeclarationStatement
+ implements NodeReplacerTest_Getter {
@override
VariableDeclarationList get(VariableDeclarationStatement node) =>
node.variables;
}
-class Getter_NodeReplacerTest_test_whileStatement implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_whileStatement
+ implements NodeReplacerTest_Getter {
@override
Expression get(WhileStatement node) => node.condition;
}
-class Getter_NodeReplacerTest_test_whileStatement_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_test_whileStatement_2
+ implements NodeReplacerTest_Getter {
@override
Statement get(WhileStatement node) => node.body;
}
-class Getter_NodeReplacerTest_testAnnotatedNode implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_testAnnotatedNode
+ implements NodeReplacerTest_Getter {
@override
Comment get(AnnotatedNode node) => node.documentationComment;
}
-class Getter_NodeReplacerTest_testNormalFormalParameter implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_testNormalFormalParameter
+ implements NodeReplacerTest_Getter {
@override
SimpleIdentifier get(NormalFormalParameter node) => node.identifier;
}
-class Getter_NodeReplacerTest_testNormalFormalParameter_2 implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_testNormalFormalParameter_2
+ implements NodeReplacerTest_Getter {
@override
Comment get(NormalFormalParameter node) => node.documentationComment;
}
-class Getter_NodeReplacerTest_testTypedLiteral implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_testTypedLiteral
+ implements NodeReplacerTest_Getter {
@override
TypeArgumentList get(TypedLiteral node) => node.typeArguments;
}
-class Getter_NodeReplacerTest_testUriBasedDirective implements
- NodeReplacerTest_Getter {
+class Getter_NodeReplacerTest_testUriBasedDirective
+ implements NodeReplacerTest_Getter {
@override
StringLiteral get(UriBasedDirective node) => node.uri;
}
@@ -3297,72 +2826,72 @@
}
}
-class ListGetter_NodeReplacerTest_test_adjacentStrings extends
- NodeReplacerTest_ListGetter<AdjacentStrings, StringLiteral> {
+class ListGetter_NodeReplacerTest_test_adjacentStrings
+ extends NodeReplacerTest_ListGetter<AdjacentStrings, StringLiteral> {
ListGetter_NodeReplacerTest_test_adjacentStrings(int arg0) : super(arg0);
@override
NodeList<StringLiteral> getList(AdjacentStrings node) => node.strings;
}
-class ListGetter_NodeReplacerTest_test_adjacentStrings_2 extends
- NodeReplacerTest_ListGetter<AdjacentStrings, StringLiteral> {
+class ListGetter_NodeReplacerTest_test_adjacentStrings_2
+ extends NodeReplacerTest_ListGetter<AdjacentStrings, StringLiteral> {
ListGetter_NodeReplacerTest_test_adjacentStrings_2(int arg0) : super(arg0);
@override
NodeList<StringLiteral> getList(AdjacentStrings node) => node.strings;
}
-class ListGetter_NodeReplacerTest_test_argumentList extends
- NodeReplacerTest_ListGetter<ArgumentList, Expression> {
+class ListGetter_NodeReplacerTest_test_argumentList
+ extends NodeReplacerTest_ListGetter<ArgumentList, Expression> {
ListGetter_NodeReplacerTest_test_argumentList(int arg0) : super(arg0);
@override
NodeList<Expression> getList(ArgumentList node) => node.arguments;
}
-class ListGetter_NodeReplacerTest_test_block extends
- NodeReplacerTest_ListGetter<Block, Statement> {
+class ListGetter_NodeReplacerTest_test_block
+ extends NodeReplacerTest_ListGetter<Block, Statement> {
ListGetter_NodeReplacerTest_test_block(int arg0) : super(arg0);
@override
NodeList<Statement> getList(Block node) => node.statements;
}
-class ListGetter_NodeReplacerTest_test_cascadeExpression extends
- NodeReplacerTest_ListGetter<CascadeExpression, Expression> {
+class ListGetter_NodeReplacerTest_test_cascadeExpression
+ extends NodeReplacerTest_ListGetter<CascadeExpression, Expression> {
ListGetter_NodeReplacerTest_test_cascadeExpression(int arg0) : super(arg0);
@override
NodeList<Expression> getList(CascadeExpression node) => node.cascadeSections;
}
-class ListGetter_NodeReplacerTest_test_classDeclaration extends
- NodeReplacerTest_ListGetter<ClassDeclaration, ClassMember> {
+class ListGetter_NodeReplacerTest_test_classDeclaration
+ extends NodeReplacerTest_ListGetter<ClassDeclaration, ClassMember> {
ListGetter_NodeReplacerTest_test_classDeclaration(int arg0) : super(arg0);
@override
NodeList<ClassMember> getList(ClassDeclaration node) => node.members;
}
-class ListGetter_NodeReplacerTest_test_comment extends
- NodeReplacerTest_ListGetter<Comment, CommentReference> {
+class ListGetter_NodeReplacerTest_test_comment
+ extends NodeReplacerTest_ListGetter<Comment, CommentReference> {
ListGetter_NodeReplacerTest_test_comment(int arg0) : super(arg0);
@override
NodeList<CommentReference> getList(Comment node) => node.references;
}
-class ListGetter_NodeReplacerTest_test_compilationUnit extends
- NodeReplacerTest_ListGetter<CompilationUnit, Directive> {
+class ListGetter_NodeReplacerTest_test_compilationUnit
+ extends NodeReplacerTest_ListGetter<CompilationUnit, Directive> {
ListGetter_NodeReplacerTest_test_compilationUnit(int arg0) : super(arg0);
@override
NodeList<Directive> getList(CompilationUnit node) => node.directives;
}
-class ListGetter_NodeReplacerTest_test_compilationUnit_2 extends
- NodeReplacerTest_ListGetter<CompilationUnit, CompilationUnitMember> {
+class ListGetter_NodeReplacerTest_test_compilationUnit_2
+ extends NodeReplacerTest_ListGetter<CompilationUnit, CompilationUnitMember> {
ListGetter_NodeReplacerTest_test_compilationUnit_2(int arg0) : super(arg0);
@override
@@ -3370,8 +2899,8 @@
node.declarations;
}
-class ListGetter_NodeReplacerTest_test_constructorDeclaration extends
- NodeReplacerTest_ListGetter<ConstructorDeclaration, ConstructorInitializer> {
+class ListGetter_NodeReplacerTest_test_constructorDeclaration
+ extends NodeReplacerTest_ListGetter<ConstructorDeclaration, ConstructorInitializer> {
ListGetter_NodeReplacerTest_test_constructorDeclaration(int arg0)
: super(arg0);
@@ -3380,8 +2909,8 @@
node.initializers;
}
-class ListGetter_NodeReplacerTest_test_formalParameterList extends
- NodeReplacerTest_ListGetter<FormalParameterList, FormalParameter> {
+class ListGetter_NodeReplacerTest_test_formalParameterList
+ extends NodeReplacerTest_ListGetter<FormalParameterList, FormalParameter> {
ListGetter_NodeReplacerTest_test_formalParameterList(int arg0) : super(arg0);
@override
@@ -3389,8 +2918,8 @@
node.parameters;
}
-class ListGetter_NodeReplacerTest_test_forStatement_withInitialization extends
- NodeReplacerTest_ListGetter<ForStatement, Expression> {
+class ListGetter_NodeReplacerTest_test_forStatement_withInitialization
+ extends NodeReplacerTest_ListGetter<ForStatement, Expression> {
ListGetter_NodeReplacerTest_test_forStatement_withInitialization(int arg0)
: super(arg0);
@@ -3398,8 +2927,8 @@
NodeList<Expression> getList(ForStatement node) => node.updaters;
}
-class ListGetter_NodeReplacerTest_test_forStatement_withVariables extends
- NodeReplacerTest_ListGetter<ForStatement, Expression> {
+class ListGetter_NodeReplacerTest_test_forStatement_withVariables
+ extends NodeReplacerTest_ListGetter<ForStatement, Expression> {
ListGetter_NodeReplacerTest_test_forStatement_withVariables(int arg0)
: super(arg0);
@@ -3407,64 +2936,64 @@
NodeList<Expression> getList(ForStatement node) => node.updaters;
}
-class ListGetter_NodeReplacerTest_test_hideCombinator extends
- NodeReplacerTest_ListGetter<HideCombinator, SimpleIdentifier> {
+class ListGetter_NodeReplacerTest_test_hideCombinator
+ extends NodeReplacerTest_ListGetter<HideCombinator, SimpleIdentifier> {
ListGetter_NodeReplacerTest_test_hideCombinator(int arg0) : super(arg0);
@override
NodeList<SimpleIdentifier> getList(HideCombinator node) => node.hiddenNames;
}
-class ListGetter_NodeReplacerTest_test_implementsClause extends
- NodeReplacerTest_ListGetter<ImplementsClause, TypeName> {
+class ListGetter_NodeReplacerTest_test_implementsClause
+ extends NodeReplacerTest_ListGetter<ImplementsClause, TypeName> {
ListGetter_NodeReplacerTest_test_implementsClause(int arg0) : super(arg0);
@override
NodeList<TypeName> getList(ImplementsClause node) => node.interfaces;
}
-class ListGetter_NodeReplacerTest_test_labeledStatement extends
- NodeReplacerTest_ListGetter<LabeledStatement, Label> {
+class ListGetter_NodeReplacerTest_test_labeledStatement
+ extends NodeReplacerTest_ListGetter<LabeledStatement, Label> {
ListGetter_NodeReplacerTest_test_labeledStatement(int arg0) : super(arg0);
@override
NodeList<Label> getList(LabeledStatement node) => node.labels;
}
-class ListGetter_NodeReplacerTest_test_libraryIdentifier extends
- NodeReplacerTest_ListGetter<LibraryIdentifier, SimpleIdentifier> {
+class ListGetter_NodeReplacerTest_test_libraryIdentifier
+ extends NodeReplacerTest_ListGetter<LibraryIdentifier, SimpleIdentifier> {
ListGetter_NodeReplacerTest_test_libraryIdentifier(int arg0) : super(arg0);
@override
NodeList<SimpleIdentifier> getList(LibraryIdentifier node) => node.components;
}
-class ListGetter_NodeReplacerTest_test_listLiteral extends
- NodeReplacerTest_ListGetter<ListLiteral, Expression> {
+class ListGetter_NodeReplacerTest_test_listLiteral
+ extends NodeReplacerTest_ListGetter<ListLiteral, Expression> {
ListGetter_NodeReplacerTest_test_listLiteral(int arg0) : super(arg0);
@override
NodeList<Expression> getList(ListLiteral node) => node.elements;
}
-class ListGetter_NodeReplacerTest_test_mapLiteral extends
- NodeReplacerTest_ListGetter<MapLiteral, MapLiteralEntry> {
+class ListGetter_NodeReplacerTest_test_mapLiteral
+ extends NodeReplacerTest_ListGetter<MapLiteral, MapLiteralEntry> {
ListGetter_NodeReplacerTest_test_mapLiteral(int arg0) : super(arg0);
@override
NodeList<MapLiteralEntry> getList(MapLiteral node) => node.entries;
}
-class ListGetter_NodeReplacerTest_test_showCombinator extends
- NodeReplacerTest_ListGetter<ShowCombinator, SimpleIdentifier> {
+class ListGetter_NodeReplacerTest_test_showCombinator
+ extends NodeReplacerTest_ListGetter<ShowCombinator, SimpleIdentifier> {
ListGetter_NodeReplacerTest_test_showCombinator(int arg0) : super(arg0);
@override
NodeList<SimpleIdentifier> getList(ShowCombinator node) => node.shownNames;
}
-class ListGetter_NodeReplacerTest_test_stringInterpolation extends
- NodeReplacerTest_ListGetter<StringInterpolation, InterpolationElement> {
+class ListGetter_NodeReplacerTest_test_stringInterpolation
+ extends NodeReplacerTest_ListGetter<StringInterpolation, InterpolationElement> {
ListGetter_NodeReplacerTest_test_stringInterpolation(int arg0) : super(arg0);
@override
@@ -3472,32 +3001,32 @@
node.elements;
}
-class ListGetter_NodeReplacerTest_test_switchStatement extends
- NodeReplacerTest_ListGetter<SwitchStatement, SwitchMember> {
+class ListGetter_NodeReplacerTest_test_switchStatement
+ extends NodeReplacerTest_ListGetter<SwitchStatement, SwitchMember> {
ListGetter_NodeReplacerTest_test_switchStatement(int arg0) : super(arg0);
@override
NodeList<SwitchMember> getList(SwitchStatement node) => node.members;
}
-class ListGetter_NodeReplacerTest_test_tryStatement extends
- NodeReplacerTest_ListGetter<TryStatement, CatchClause> {
+class ListGetter_NodeReplacerTest_test_tryStatement
+ extends NodeReplacerTest_ListGetter<TryStatement, CatchClause> {
ListGetter_NodeReplacerTest_test_tryStatement(int arg0) : super(arg0);
@override
NodeList<CatchClause> getList(TryStatement node) => node.catchClauses;
}
-class ListGetter_NodeReplacerTest_test_typeArgumentList extends
- NodeReplacerTest_ListGetter<TypeArgumentList, TypeName> {
+class ListGetter_NodeReplacerTest_test_typeArgumentList
+ extends NodeReplacerTest_ListGetter<TypeArgumentList, TypeName> {
ListGetter_NodeReplacerTest_test_typeArgumentList(int arg0) : super(arg0);
@override
NodeList<TypeName> getList(TypeArgumentList node) => node.arguments;
}
-class ListGetter_NodeReplacerTest_test_typeParameterList extends
- NodeReplacerTest_ListGetter<TypeParameterList, TypeParameter> {
+class ListGetter_NodeReplacerTest_test_typeParameterList
+ extends NodeReplacerTest_ListGetter<TypeParameterList, TypeParameter> {
ListGetter_NodeReplacerTest_test_typeParameterList(int arg0) : super(arg0);
@override
@@ -3505,8 +3034,8 @@
node.typeParameters;
}
-class ListGetter_NodeReplacerTest_test_variableDeclarationList extends
- NodeReplacerTest_ListGetter<VariableDeclarationList, VariableDeclaration> {
+class ListGetter_NodeReplacerTest_test_variableDeclarationList
+ extends NodeReplacerTest_ListGetter<VariableDeclarationList, VariableDeclaration> {
ListGetter_NodeReplacerTest_test_variableDeclarationList(int arg0)
: super(arg0);
@@ -3515,48 +3044,48 @@
node.variables;
}
-class ListGetter_NodeReplacerTest_test_withClause extends
- NodeReplacerTest_ListGetter<WithClause, TypeName> {
+class ListGetter_NodeReplacerTest_test_withClause
+ extends NodeReplacerTest_ListGetter<WithClause, TypeName> {
ListGetter_NodeReplacerTest_test_withClause(int arg0) : super(arg0);
@override
NodeList<TypeName> getList(WithClause node) => node.mixinTypes;
}
-class ListGetter_NodeReplacerTest_testAnnotatedNode extends
- NodeReplacerTest_ListGetter<AnnotatedNode, Annotation> {
+class ListGetter_NodeReplacerTest_testAnnotatedNode
+ extends NodeReplacerTest_ListGetter<AnnotatedNode, Annotation> {
ListGetter_NodeReplacerTest_testAnnotatedNode(int arg0) : super(arg0);
@override
NodeList<Annotation> getList(AnnotatedNode node) => node.metadata;
}
-class ListGetter_NodeReplacerTest_testNamespaceDirective extends
- NodeReplacerTest_ListGetter<NamespaceDirective, Combinator> {
+class ListGetter_NodeReplacerTest_testNamespaceDirective
+ extends NodeReplacerTest_ListGetter<NamespaceDirective, Combinator> {
ListGetter_NodeReplacerTest_testNamespaceDirective(int arg0) : super(arg0);
@override
NodeList<Combinator> getList(NamespaceDirective node) => node.combinators;
}
-class ListGetter_NodeReplacerTest_testNormalFormalParameter extends
- NodeReplacerTest_ListGetter<NormalFormalParameter, Annotation> {
+class ListGetter_NodeReplacerTest_testNormalFormalParameter
+ extends NodeReplacerTest_ListGetter<NormalFormalParameter, Annotation> {
ListGetter_NodeReplacerTest_testNormalFormalParameter(int arg0) : super(arg0);
@override
NodeList<Annotation> getList(NormalFormalParameter node) => node.metadata;
}
-class ListGetter_NodeReplacerTest_testSwitchMember extends
- NodeReplacerTest_ListGetter<SwitchMember, Label> {
+class ListGetter_NodeReplacerTest_testSwitchMember
+ extends NodeReplacerTest_ListGetter<SwitchMember, Label> {
ListGetter_NodeReplacerTest_testSwitchMember(int arg0) : super(arg0);
@override
NodeList<Label> getList(SwitchMember node) => node.labels;
}
-class ListGetter_NodeReplacerTest_testSwitchMember_2 extends
- NodeReplacerTest_ListGetter<SwitchMember, Statement> {
+class ListGetter_NodeReplacerTest_testSwitchMember_2
+ extends NodeReplacerTest_ListGetter<SwitchMember, Statement> {
ListGetter_NodeReplacerTest_testSwitchMember_2(int arg0) : super(arg0);
@override
@@ -3722,19 +3251,16 @@
static const List<Token> EMPTY_TOKEN_LIST = const <Token>[];
void test_adjacentStrings() {
- AdjacentStrings node =
- AstFactory.adjacentStrings([AstFactory.string2("a"), AstFactory.string2("b")]);
+ AdjacentStrings node = AstFactory
+ .adjacentStrings([AstFactory.string2("a"), AstFactory.string2("b")]);
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_adjacentStrings_2(0));
+ node, new ListGetter_NodeReplacerTest_test_adjacentStrings_2(0));
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_adjacentStrings(1));
+ node, new ListGetter_NodeReplacerTest_test_adjacentStrings(1));
}
void test_annotation() {
- Annotation node = AstFactory.annotation2(
- AstFactory.identifier3("C"),
+ Annotation node = AstFactory.annotation2(AstFactory.identifier3("C"),
AstFactory.identifier3("c"),
AstFactory.argumentList([AstFactory.integer(0)]));
_assertReplace(node, new Getter_NodeReplacerTest_test_annotation());
@@ -3748,9 +3274,9 @@
}
void test_asExpression() {
- AsExpression node = AstFactory.asExpression(
- AstFactory.integer(0),
- AstFactory.typeName3(AstFactory.identifier3("a"), [AstFactory.typeName4("C")]));
+ AsExpression node = AstFactory.asExpression(AstFactory.integer(0),
+ AstFactory.typeName3(
+ AstFactory.identifier3("a"), [AstFactory.typeName4("C")]));
_assertReplace(node, new Getter_NodeReplacerTest_test_asExpression_2());
_assertReplace(node, new Getter_NodeReplacerTest_test_asExpression());
}
@@ -3763,21 +3289,16 @@
void test_assignmentExpression() {
AssignmentExpression node = AstFactory.assignmentExpression(
- AstFactory.identifier3("l"),
- TokenType.EQ,
- AstFactory.identifier3("r"));
+ AstFactory.identifier3("l"), TokenType.EQ, AstFactory.identifier3("r"));
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_assignmentExpression_2());
+ node, new Getter_NodeReplacerTest_test_assignmentExpression_2());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_assignmentExpression());
+ node, new Getter_NodeReplacerTest_test_assignmentExpression());
}
void test_binaryExpression() {
BinaryExpression node = AstFactory.binaryExpression(
- AstFactory.identifier3("l"),
- TokenType.PLUS,
+ AstFactory.identifier3("l"), TokenType.PLUS,
AstFactory.identifier3("r"));
_assertReplace(node, new Getter_NodeReplacerTest_test_binaryExpression());
_assertReplace(node, new Getter_NodeReplacerTest_test_binaryExpression_2());
@@ -3799,42 +3320,33 @@
}
void test_cascadeExpression() {
- CascadeExpression node = AstFactory.cascadeExpression(
- AstFactory.integer(0),
+ CascadeExpression node = AstFactory.cascadeExpression(AstFactory.integer(0),
[AstFactory.propertyAccess(null, AstFactory.identifier3("b"))]);
_assertReplace(node, new Getter_NodeReplacerTest_test_cascadeExpression());
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_cascadeExpression(0));
+ node, new ListGetter_NodeReplacerTest_test_cascadeExpression(0));
}
void test_catchClause() {
CatchClause node = AstFactory.catchClause5(
- AstFactory.typeName4("E"),
- "e",
- "s",
- [AstFactory.emptyStatement()]);
+ AstFactory.typeName4("E"), "e", "s", [AstFactory.emptyStatement()]);
_assertReplace(node, new Getter_NodeReplacerTest_test_catchClause_3());
_assertReplace(node, new Getter_NodeReplacerTest_test_catchClause_2());
_assertReplace(node, new Getter_NodeReplacerTest_test_catchClause());
}
void test_classDeclaration() {
- ClassDeclaration node = AstFactory.classDeclaration(
- null,
- "A",
+ ClassDeclaration node = AstFactory.classDeclaration(null, "A",
AstFactory.typeParameterList(["E"]),
AstFactory.extendsClause(AstFactory.typeName4("B")),
AstFactory.withClause([AstFactory.typeName4("C")]),
- AstFactory.implementsClause([AstFactory.typeName4("D")]),
- [
- AstFactory.fieldDeclaration2(
- false,
- null,
- [AstFactory.variableDeclaration("f")])]);
+ AstFactory.implementsClause([AstFactory.typeName4("D")]), [
+ AstFactory.fieldDeclaration2(
+ false, null, [AstFactory.variableDeclaration("f")])
+ ]);
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
node.nativeClause = AstFactory.nativeClause("");
_assertReplace(node, new Getter_NodeReplacerTest_test_classDeclaration_6());
_assertReplace(node, new Getter_NodeReplacerTest_test_classDeclaration_5());
@@ -3843,22 +3355,18 @@
_assertReplace(node, new Getter_NodeReplacerTest_test_classDeclaration());
_assertReplace(node, new Getter_NodeReplacerTest_test_classDeclaration_3());
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_classDeclaration(0));
+ node, new ListGetter_NodeReplacerTest_test_classDeclaration(0));
_testAnnotatedNode(node);
}
void test_classTypeAlias() {
- ClassTypeAlias node = AstFactory.classTypeAlias(
- "A",
- AstFactory.typeParameterList(["E"]),
- null,
- AstFactory.typeName4("B"),
+ ClassTypeAlias node = AstFactory.classTypeAlias("A",
+ AstFactory.typeParameterList(["E"]), null, AstFactory.typeName4("B"),
AstFactory.withClause([AstFactory.typeName4("C")]),
AstFactory.implementsClause([AstFactory.typeName4("D")]));
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_assertReplace(node, new Getter_NodeReplacerTest_test_classTypeAlias_4());
_assertReplace(node, new Getter_NodeReplacerTest_test_classTypeAlias_5());
_assertReplace(node, new Getter_NodeReplacerTest_test_classTypeAlias());
@@ -3869,8 +3377,8 @@
void test_comment() {
Comment node = Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.references.add(
- new CommentReference(null, AstFactory.identifier3("x")));
+ node.references
+ .add(new CommentReference(null, AstFactory.identifier3("x")));
_assertReplace(node, new ListGetter_NodeReplacerTest_test_comment(0));
}
@@ -3881,82 +3389,63 @@
}
void test_compilationUnit() {
- CompilationUnit node = AstFactory.compilationUnit8(
- "",
- [AstFactory.libraryDirective2("lib")],
- [
- AstFactory.topLevelVariableDeclaration2(
- null,
- [AstFactory.variableDeclaration("X")])]);
+ CompilationUnit node = AstFactory.compilationUnit8("", [
+ AstFactory.libraryDirective2("lib")
+ ], [
+ AstFactory.topLevelVariableDeclaration2(
+ null, [AstFactory.variableDeclaration("X")])
+ ]);
_assertReplace(node, new Getter_NodeReplacerTest_test_compilationUnit());
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_compilationUnit(0));
+ node, new ListGetter_NodeReplacerTest_test_compilationUnit(0));
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_compilationUnit_2(0));
+ node, new ListGetter_NodeReplacerTest_test_compilationUnit_2(0));
}
void test_conditionalExpression() {
ConditionalExpression node = AstFactory.conditionalExpression(
- AstFactory.booleanLiteral(true),
- AstFactory.integer(0),
+ AstFactory.booleanLiteral(true), AstFactory.integer(0),
AstFactory.integer(1));
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_conditionalExpression_3());
+ node, new Getter_NodeReplacerTest_test_conditionalExpression_3());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_conditionalExpression_2());
+ node, new Getter_NodeReplacerTest_test_conditionalExpression_2());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_conditionalExpression());
+ node, new Getter_NodeReplacerTest_test_conditionalExpression());
}
void test_constructorDeclaration() {
- ConstructorDeclaration node = AstFactory.constructorDeclaration2(
- null,
- null,
- AstFactory.identifier3("C"),
- "d",
- AstFactory.formalParameterList(),
- [AstFactory.constructorFieldInitializer(false, "x", AstFactory.integer(0))],
- AstFactory.emptyFunctionBody());
+ ConstructorDeclaration node = AstFactory.constructorDeclaration2(null, null,
+ AstFactory.identifier3("C"), "d", AstFactory.formalParameterList(), [
+ AstFactory.constructorFieldInitializer(false, "x", AstFactory.integer(0))
+ ], AstFactory.emptyFunctionBody());
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
node.redirectedConstructor =
AstFactory.constructorName(AstFactory.typeName4("B"), "a");
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_constructorDeclaration_3());
+ node, new Getter_NodeReplacerTest_test_constructorDeclaration_3());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_constructorDeclaration_2());
+ node, new Getter_NodeReplacerTest_test_constructorDeclaration_2());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_constructorDeclaration_4());
+ node, new Getter_NodeReplacerTest_test_constructorDeclaration_4());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_constructorDeclaration());
+ node, new Getter_NodeReplacerTest_test_constructorDeclaration());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_constructorDeclaration_5());
+ node, new Getter_NodeReplacerTest_test_constructorDeclaration_5());
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_constructorDeclaration(0));
+ node, new ListGetter_NodeReplacerTest_test_constructorDeclaration(0));
_testAnnotatedNode(node);
}
void test_constructorFieldInitializer() {
- ConstructorFieldInitializer node =
- AstFactory.constructorFieldInitializer(false, "f", AstFactory.integer(0));
+ ConstructorFieldInitializer node = AstFactory.constructorFieldInitializer(
+ false, "f", AstFactory.integer(0));
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_constructorFieldInitializer());
+ node, new Getter_NodeReplacerTest_test_constructorFieldInitializer());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_constructorFieldInitializer_2());
+ node, new Getter_NodeReplacerTest_test_constructorFieldInitializer_2());
}
void test_constructorName() {
@@ -3976,41 +3465,36 @@
AstFactory.declaredIdentifier4(AstFactory.typeName4("C"), "i");
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_assertReplace(node, new Getter_NodeReplacerTest_test_declaredIdentifier());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_declaredIdentifier_2());
+ node, new Getter_NodeReplacerTest_test_declaredIdentifier_2());
_testAnnotatedNode(node);
}
void test_defaultFormalParameter() {
DefaultFormalParameter node = AstFactory.positionalFormalParameter(
- AstFactory.simpleFormalParameter3("p"),
- AstFactory.integer(0));
+ AstFactory.simpleFormalParameter3("p"), AstFactory.integer(0));
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_defaultFormalParameter());
+ node, new Getter_NodeReplacerTest_test_defaultFormalParameter());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_defaultFormalParameter_2());
+ node, new Getter_NodeReplacerTest_test_defaultFormalParameter_2());
}
void test_doStatement() {
- DoStatement node =
- AstFactory.doStatement(AstFactory.block(), AstFactory.booleanLiteral(true));
+ DoStatement node = AstFactory.doStatement(
+ AstFactory.block(), AstFactory.booleanLiteral(true));
_assertReplace(node, new Getter_NodeReplacerTest_test_doStatement_2());
_assertReplace(node, new Getter_NodeReplacerTest_test_doStatement());
}
void test_enumConstantDeclaration() {
EnumConstantDeclaration node = new EnumConstantDeclaration(
- Comment.createEndOfLineComment(EMPTY_TOKEN_LIST),
- [AstFactory.annotation(AstFactory.identifier3("a"))],
- AstFactory.identifier3("C"));
+ Comment.createEndOfLineComment(EMPTY_TOKEN_LIST), [
+ AstFactory.annotation(AstFactory.identifier3("a"))
+ ], AstFactory.identifier3("C"));
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_enumConstantDeclaration());
+ node, new Getter_NodeReplacerTest_test_enumConstantDeclaration());
_testAnnotatedNode(node);
}
@@ -4018,7 +3502,7 @@
EnumDeclaration node = AstFactory.enumDeclaration2("E", ["ONE", "TWO"]);
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_assertReplace(node, new Getter_NodeReplacerTest_test_enumDeclaration());
_testAnnotatedNode(node);
}
@@ -4028,7 +3512,7 @@
AstFactory.exportDirective2("", [AstFactory.hideCombinator2(["C"])]);
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_testNamespaceDirective(node);
}
@@ -4036,16 +3520,14 @@
ExpressionFunctionBody node =
AstFactory.expressionFunctionBody(AstFactory.integer(0));
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_expressionFunctionBody());
+ node, new Getter_NodeReplacerTest_test_expressionFunctionBody());
}
void test_expressionStatement() {
ExpressionStatement node =
AstFactory.expressionStatement(AstFactory.integer(0));
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_expressionStatement());
+ node, new Getter_NodeReplacerTest_test_expressionStatement());
}
void test_extendsClause() {
@@ -4054,152 +3536,116 @@
}
void test_fieldDeclaration() {
- FieldDeclaration node = AstFactory.fieldDeclaration(
- false,
- null,
- AstFactory.typeName4("C"),
- [AstFactory.variableDeclaration("c")]);
+ FieldDeclaration node = AstFactory.fieldDeclaration(false, null,
+ AstFactory.typeName4("C"), [AstFactory.variableDeclaration("c")]);
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_assertReplace(node, new Getter_NodeReplacerTest_test_fieldDeclaration());
_testAnnotatedNode(node);
}
void test_fieldFormalParameter() {
FieldFormalParameter node = AstFactory.fieldFormalParameter(
- null,
- AstFactory.typeName4("C"),
- "f",
- AstFactory.formalParameterList());
+ null, AstFactory.typeName4("C"), "f", AstFactory.formalParameterList());
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_fieldFormalParameter_2());
+ node, new Getter_NodeReplacerTest_test_fieldFormalParameter_2());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_fieldFormalParameter());
+ node, new Getter_NodeReplacerTest_test_fieldFormalParameter());
_testNormalFormalParameter(node);
}
void test_forEachStatement_withIdentifier() {
ForEachStatement node = AstFactory.forEachStatement2(
- AstFactory.identifier3("i"),
- AstFactory.identifier3("l"),
+ AstFactory.identifier3("i"), AstFactory.identifier3("l"),
AstFactory.block());
- _assertReplace(
- node,
+ _assertReplace(node,
new Getter_NodeReplacerTest_test_forEachStatement_withIdentifier_2());
- _assertReplace(
- node,
+ _assertReplace(node,
new Getter_NodeReplacerTest_test_forEachStatement_withIdentifier_3());
- _assertReplace(
- node,
+ _assertReplace(node,
new Getter_NodeReplacerTest_test_forEachStatement_withIdentifier());
}
void test_forEachStatement_withLoopVariable() {
ForEachStatement node = AstFactory.forEachStatement(
- AstFactory.declaredIdentifier3("e"),
- AstFactory.identifier3("l"),
+ AstFactory.declaredIdentifier3("e"), AstFactory.identifier3("l"),
AstFactory.block());
- _assertReplace(
- node,
+ _assertReplace(node,
new Getter_NodeReplacerTest_test_forEachStatement_withLoopVariable_2());
- _assertReplace(
- node,
+ _assertReplace(node,
new Getter_NodeReplacerTest_test_forEachStatement_withLoopVariable());
- _assertReplace(
- node,
+ _assertReplace(node,
new Getter_NodeReplacerTest_test_forEachStatement_withLoopVariable_3());
}
void test_formalParameterList() {
- FormalParameterList node =
- AstFactory.formalParameterList([AstFactory.simpleFormalParameter3("p")]);
+ FormalParameterList node = AstFactory
+ .formalParameterList([AstFactory.simpleFormalParameter3("p")]);
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_formalParameterList(0));
+ node, new ListGetter_NodeReplacerTest_test_formalParameterList(0));
}
void test_forStatement_withInitialization() {
- ForStatement node = AstFactory.forStatement(
- AstFactory.identifier3("a"),
- AstFactory.booleanLiteral(true),
- [AstFactory.integer(0)],
- AstFactory.block());
- _assertReplace(
- node,
+ ForStatement node = AstFactory.forStatement(AstFactory.identifier3("a"),
+ AstFactory.booleanLiteral(true), [
+ AstFactory.integer(0)
+ ], AstFactory.block());
+ _assertReplace(node,
new Getter_NodeReplacerTest_test_forStatement_withInitialization_3());
- _assertReplace(
- node,
+ _assertReplace(node,
new Getter_NodeReplacerTest_test_forStatement_withInitialization_2());
- _assertReplace(
- node,
+ _assertReplace(node,
new Getter_NodeReplacerTest_test_forStatement_withInitialization());
- _assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_forStatement_withInitialization(0));
+ _assertReplace(node,
+ new ListGetter_NodeReplacerTest_test_forStatement_withInitialization(
+ 0));
}
void test_forStatement_withVariables() {
- ForStatement node = AstFactory.forStatement2(
- AstFactory.variableDeclarationList2(
- null,
- [AstFactory.variableDeclaration("i")]),
- AstFactory.booleanLiteral(true),
- [AstFactory.integer(0)],
- AstFactory.block());
+ ForStatement node = AstFactory.forStatement2(AstFactory
+ .variableDeclarationList2(null, [
+ AstFactory.variableDeclaration("i")
+ ]), AstFactory.booleanLiteral(true), [
+ AstFactory.integer(0)
+ ], AstFactory.block());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_forStatement_withVariables_2());
+ node, new Getter_NodeReplacerTest_test_forStatement_withVariables_2());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_forStatement_withVariables_3());
+ node, new Getter_NodeReplacerTest_test_forStatement_withVariables_3());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_forStatement_withVariables());
- _assertReplace(
- node,
+ node, new Getter_NodeReplacerTest_test_forStatement_withVariables());
+ _assertReplace(node,
new ListGetter_NodeReplacerTest_test_forStatement_withVariables(0));
}
void test_functionDeclaration() {
FunctionDeclaration node = AstFactory.functionDeclaration(
- AstFactory.typeName4("R"),
- null,
- "f",
- AstFactory.functionExpression2(
+ AstFactory.typeName4("R"), null, "f", AstFactory.functionExpression2(
AstFactory.formalParameterList(),
AstFactory.blockFunctionBody(AstFactory.block())));
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_functionDeclaration());
+ node, new Getter_NodeReplacerTest_test_functionDeclaration());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_functionDeclaration_3());
+ node, new Getter_NodeReplacerTest_test_functionDeclaration_3());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_functionDeclaration_2());
+ node, new Getter_NodeReplacerTest_test_functionDeclaration_2());
_testAnnotatedNode(node);
}
void test_functionDeclarationStatement() {
FunctionDeclarationStatement node = AstFactory.functionDeclarationStatement(
- AstFactory.typeName4("R"),
- null,
- "f",
- AstFactory.functionExpression2(
+ AstFactory.typeName4("R"), null, "f", AstFactory.functionExpression2(
AstFactory.formalParameterList(),
AstFactory.blockFunctionBody(AstFactory.block())));
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_functionDeclarationStatement());
+ node, new Getter_NodeReplacerTest_test_functionDeclarationStatement());
}
void test_functionExpression() {
@@ -4208,57 +3654,46 @@
AstFactory.blockFunctionBody(AstFactory.block()));
_assertReplace(node, new Getter_NodeReplacerTest_test_functionExpression());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_functionExpression_2());
+ node, new Getter_NodeReplacerTest_test_functionExpression_2());
}
void test_functionExpressionInvocation() {
FunctionExpressionInvocation node = AstFactory.functionExpressionInvocation(
- AstFactory.identifier3("f"),
- [AstFactory.integer(0)]);
+ AstFactory.identifier3("f"), [AstFactory.integer(0)]);
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_functionExpressionInvocation());
- _assertReplace(
- node,
+ node, new Getter_NodeReplacerTest_test_functionExpressionInvocation());
+ _assertReplace(node,
new Getter_NodeReplacerTest_test_functionExpressionInvocation_2());
}
void test_functionTypeAlias() {
- FunctionTypeAlias node = AstFactory.typeAlias(
- AstFactory.typeName4("R"),
- "F",
- AstFactory.typeParameterList(["E"]),
+ FunctionTypeAlias node = AstFactory.typeAlias(AstFactory.typeName4("R"),
+ "F", AstFactory.typeParameterList(["E"]),
AstFactory.formalParameterList());
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_functionTypeAlias_3());
+ node, new Getter_NodeReplacerTest_test_functionTypeAlias_3());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_functionTypeAlias_4());
+ node, new Getter_NodeReplacerTest_test_functionTypeAlias_4());
_assertReplace(node, new Getter_NodeReplacerTest_test_functionTypeAlias());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_functionTypeAlias_2());
+ node, new Getter_NodeReplacerTest_test_functionTypeAlias_2());
_testAnnotatedNode(node);
}
void test_functionTypedFormalParameter() {
FunctionTypedFormalParameter node = AstFactory.functionTypedFormalParameter(
- AstFactory.typeName4("R"),
- "f",
- [AstFactory.simpleFormalParameter3("p")]);
+ AstFactory.typeName4("R"), "f", [
+ AstFactory.simpleFormalParameter3("p")
+ ]);
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_functionTypedFormalParameter());
- _assertReplace(
- node,
+ node, new Getter_NodeReplacerTest_test_functionTypedFormalParameter());
+ _assertReplace(node,
new Getter_NodeReplacerTest_test_functionTypedFormalParameter_2());
_testNormalFormalParameter(node);
}
@@ -4266,15 +3701,12 @@
void test_hideCombinator() {
HideCombinator node = AstFactory.hideCombinator2(["A", "B"]);
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_hideCombinator(0));
+ node, new ListGetter_NodeReplacerTest_test_hideCombinator(0));
}
void test_ifStatement() {
- IfStatement node = AstFactory.ifStatement2(
- AstFactory.booleanLiteral(true),
- AstFactory.block(),
- AstFactory.block());
+ IfStatement node = AstFactory.ifStatement2(AstFactory.booleanLiteral(true),
+ AstFactory.block(), AstFactory.block());
_assertReplace(node, new Getter_NodeReplacerTest_test_ifStatement());
_assertReplace(node, new Getter_NodeReplacerTest_test_ifStatement_3());
_assertReplace(node, new Getter_NodeReplacerTest_test_ifStatement_2());
@@ -4284,56 +3716,46 @@
ImplementsClause node = AstFactory.implementsClause(
[AstFactory.typeName4("I"), AstFactory.typeName4("J")]);
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_implementsClause(0));
+ node, new ListGetter_NodeReplacerTest_test_implementsClause(0));
}
void test_importDirective() {
- ImportDirective node = AstFactory.importDirective3(
- "",
- "p",
- [AstFactory.showCombinator2(["A"]), AstFactory.hideCombinator2(["B"])]);
+ ImportDirective node = AstFactory.importDirective3("", "p", [
+ AstFactory.showCombinator2(["A"]),
+ AstFactory.hideCombinator2(["B"])
+ ]);
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_assertReplace(node, new Getter_NodeReplacerTest_test_importDirective());
_testNamespaceDirective(node);
}
void test_indexExpression() {
IndexExpression node = AstFactory.indexExpression(
- AstFactory.identifier3("a"),
- AstFactory.identifier3("i"));
+ AstFactory.identifier3("a"), AstFactory.identifier3("i"));
_assertReplace(node, new Getter_NodeReplacerTest_test_indexExpression());
_assertReplace(node, new Getter_NodeReplacerTest_test_indexExpression_2());
}
void test_instanceCreationExpression() {
InstanceCreationExpression node = AstFactory.instanceCreationExpression3(
- null,
- AstFactory.typeName4("C"),
- "c",
- [AstFactory.integer(2)]);
+ null, AstFactory.typeName4("C"), "c", [AstFactory.integer(2)]);
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_instanceCreationExpression_2());
+ node, new Getter_NodeReplacerTest_test_instanceCreationExpression_2());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_instanceCreationExpression());
+ node, new Getter_NodeReplacerTest_test_instanceCreationExpression());
}
void test_interpolationExpression() {
InterpolationExpression node = AstFactory.interpolationExpression2("x");
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_interpolationExpression());
+ node, new Getter_NodeReplacerTest_test_interpolationExpression());
}
void test_isExpression() {
IsExpression node = AstFactory.isExpression(
- AstFactory.identifier3("v"),
- false,
- AstFactory.typeName4("T"));
+ AstFactory.identifier3("v"), false, AstFactory.typeName4("T"));
_assertReplace(node, new Getter_NodeReplacerTest_test_isExpression());
_assertReplace(node, new Getter_NodeReplacerTest_test_isExpression_2());
}
@@ -4344,11 +3766,10 @@
}
void test_labeledStatement() {
- LabeledStatement node =
- AstFactory.labeledStatement([AstFactory.label2("l")], AstFactory.block());
+ LabeledStatement node = AstFactory.labeledStatement(
+ [AstFactory.label2("l")], AstFactory.block());
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_labeledStatement(0));
+ node, new ListGetter_NodeReplacerTest_test_labeledStatement(0));
_assertReplace(node, new Getter_NodeReplacerTest_test_labeledStatement());
}
@@ -4356,7 +3777,7 @@
LibraryDirective node = AstFactory.libraryDirective2("lib");
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_assertReplace(node, new Getter_NodeReplacerTest_test_libraryDirective());
_testAnnotatedNode(node);
}
@@ -4364,24 +3785,23 @@
void test_libraryIdentifier() {
LibraryIdentifier node = AstFactory.libraryIdentifier2(["lib"]);
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_libraryIdentifier(0));
+ node, new ListGetter_NodeReplacerTest_test_libraryIdentifier(0));
}
void test_listLiteral() {
- ListLiteral node = AstFactory.listLiteral2(
- null,
- AstFactory.typeArgumentList([AstFactory.typeName4("E")]),
- [AstFactory.identifier3("e")]);
+ ListLiteral node = AstFactory.listLiteral2(null,
+ AstFactory.typeArgumentList([AstFactory.typeName4("E")]), [
+ AstFactory.identifier3("e")
+ ]);
_assertReplace(node, new ListGetter_NodeReplacerTest_test_listLiteral(0));
_testTypedLiteral(node);
}
void test_mapLiteral() {
- MapLiteral node = AstFactory.mapLiteral(
- null,
- AstFactory.typeArgumentList([AstFactory.typeName4("E")]),
- [AstFactory.mapLiteralEntry("k", AstFactory.identifier3("v"))]);
+ MapLiteral node = AstFactory.mapLiteral(null,
+ AstFactory.typeArgumentList([AstFactory.typeName4("E")]), [
+ AstFactory.mapLiteralEntry("k", AstFactory.identifier3("v"))
+ ]);
_assertReplace(node, new ListGetter_NodeReplacerTest_test_mapLiteral(0));
_testTypedLiteral(node);
}
@@ -4394,35 +3814,26 @@
}
void test_methodDeclaration() {
- MethodDeclaration node = AstFactory.methodDeclaration2(
- null,
- AstFactory.typeName4("A"),
- null,
- null,
- AstFactory.identifier3("m"),
+ MethodDeclaration node = AstFactory.methodDeclaration2(null,
+ AstFactory.typeName4("A"), null, null, AstFactory.identifier3("m"),
AstFactory.formalParameterList(),
AstFactory.blockFunctionBody(AstFactory.block()));
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_assertReplace(node, new Getter_NodeReplacerTest_test_methodDeclaration());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_methodDeclaration_3());
+ node, new Getter_NodeReplacerTest_test_methodDeclaration_3());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_methodDeclaration_4());
+ node, new Getter_NodeReplacerTest_test_methodDeclaration_4());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_methodDeclaration_2());
+ node, new Getter_NodeReplacerTest_test_methodDeclaration_2());
_testAnnotatedNode(node);
}
void test_methodInvocation() {
MethodInvocation node = AstFactory.methodInvocation(
- AstFactory.identifier3("t"),
- "m",
- [AstFactory.integer(0)]);
+ AstFactory.identifier3("t"), "m", [AstFactory.integer(0)]);
_assertReplace(node, new Getter_NodeReplacerTest_test_methodInvocation_2());
_assertReplace(node, new Getter_NodeReplacerTest_test_methodInvocation_3());
_assertReplace(node, new Getter_NodeReplacerTest_test_methodInvocation());
@@ -4449,15 +3860,14 @@
ParenthesizedExpression node =
AstFactory.parenthesizedExpression(AstFactory.integer(0));
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_parenthesizedExpression());
+ node, new Getter_NodeReplacerTest_test_parenthesizedExpression());
}
void test_partDirective() {
PartDirective node = AstFactory.partDirective2("");
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_testUriBasedDirective(node);
}
@@ -4466,29 +3876,27 @@
AstFactory.partOfDirective(AstFactory.libraryIdentifier2(["lib"]));
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_assertReplace(node, new Getter_NodeReplacerTest_test_partOfDirective());
_testAnnotatedNode(node);
}
void test_postfixExpression() {
PostfixExpression node = AstFactory.postfixExpression(
- AstFactory.identifier3("x"),
- TokenType.MINUS_MINUS);
+ AstFactory.identifier3("x"), TokenType.MINUS_MINUS);
_assertReplace(node, new Getter_NodeReplacerTest_test_postfixExpression());
}
void test_prefixedIdentifier() {
PrefixedIdentifier node = AstFactory.identifier5("a", "b");
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_prefixedIdentifier_2());
+ node, new Getter_NodeReplacerTest_test_prefixedIdentifier_2());
_assertReplace(node, new Getter_NodeReplacerTest_test_prefixedIdentifier());
}
void test_prefixExpression() {
- PrefixExpression node =
- AstFactory.prefixExpression(TokenType.PLUS_PLUS, AstFactory.identifier3("y"));
+ PrefixExpression node = AstFactory.prefixExpression(
+ TokenType.PLUS_PLUS, AstFactory.identifier3("y"));
_assertReplace(node, new Getter_NodeReplacerTest_test_prefixExpression());
}
@@ -4500,13 +3908,11 @@
}
void test_redirectingConstructorInvocation() {
- RedirectingConstructorInvocation node =
- AstFactory.redirectingConstructorInvocation2("c", [AstFactory.integer(0)]);
- _assertReplace(
- node,
+ RedirectingConstructorInvocation node = AstFactory
+ .redirectingConstructorInvocation2("c", [AstFactory.integer(0)]);
+ _assertReplace(node,
new Getter_NodeReplacerTest_test_redirectingConstructorInvocation());
- _assertReplace(
- node,
+ _assertReplace(node,
new Getter_NodeReplacerTest_test_redirectingConstructorInvocation_2());
}
@@ -4518,8 +3924,7 @@
void test_showCombinator() {
ShowCombinator node = AstFactory.showCombinator2(["X", "Y"]);
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_showCombinator(0));
+ node, new ListGetter_NodeReplacerTest_test_showCombinator(0));
}
void test_simpleFormalParameter() {
@@ -4529,8 +3934,7 @@
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_simpleFormalParameter());
+ node, new Getter_NodeReplacerTest_test_simpleFormalParameter());
_testNormalFormalParameter(node);
}
@@ -4538,49 +3942,42 @@
StringInterpolation node =
AstFactory.string([AstFactory.interpolationExpression2("a")]);
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_stringInterpolation(0));
+ node, new ListGetter_NodeReplacerTest_test_stringInterpolation(0));
}
void test_superConstructorInvocation() {
SuperConstructorInvocation node =
AstFactory.superConstructorInvocation2("s", [AstFactory.integer(1)]);
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_superConstructorInvocation());
+ node, new Getter_NodeReplacerTest_test_superConstructorInvocation());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_superConstructorInvocation_2());
+ node, new Getter_NodeReplacerTest_test_superConstructorInvocation_2());
}
void test_switchCase() {
SwitchCase node = AstFactory.switchCase2(
- [AstFactory.label2("l")],
- AstFactory.integer(0),
- [AstFactory.block()]);
+ [AstFactory.label2("l")], AstFactory.integer(0), [AstFactory.block()]);
_assertReplace(node, new Getter_NodeReplacerTest_test_switchCase());
_testSwitchMember(node);
}
void test_switchDefault() {
- SwitchDefault node =
- AstFactory.switchDefault([AstFactory.label2("l")], [AstFactory.block()]);
+ SwitchDefault node = AstFactory.switchDefault(
+ [AstFactory.label2("l")], [AstFactory.block()]);
_testSwitchMember(node);
}
void test_switchStatement() {
SwitchStatement node = AstFactory.switchStatement(
- AstFactory.identifier3("x"),
- [
- AstFactory.switchCase2(
- [AstFactory.label2("l")],
- AstFactory.integer(0),
- [AstFactory.block()]),
- AstFactory.switchDefault([AstFactory.label2("l")], [AstFactory.block()])]);
+ AstFactory.identifier3("x"), [
+ AstFactory.switchCase2([AstFactory.label2("l")], AstFactory.integer(0), [
+ AstFactory.block()
+ ]),
+ AstFactory.switchDefault([AstFactory.label2("l")], [AstFactory.block()])
+ ]);
_assertReplace(node, new Getter_NodeReplacerTest_test_switchStatement());
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_switchStatement(0));
+ node, new ListGetter_NodeReplacerTest_test_switchStatement(0));
}
void test_throwExpression() {
@@ -4591,23 +3988,19 @@
void test_topLevelVariableDeclaration() {
TopLevelVariableDeclaration node = AstFactory.topLevelVariableDeclaration(
- null,
- AstFactory.typeName4("T"),
- [AstFactory.variableDeclaration("t")]);
+ null, AstFactory.typeName4("T"), [AstFactory.variableDeclaration("t")]);
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_topLevelVariableDeclaration());
+ node, new Getter_NodeReplacerTest_test_topLevelVariableDeclaration());
_testAnnotatedNode(node);
}
void test_tryStatement() {
- TryStatement node = AstFactory.tryStatement3(
- AstFactory.block(),
- [AstFactory.catchClause("e", [AstFactory.block()])],
- AstFactory.block());
+ TryStatement node = AstFactory.tryStatement3(AstFactory.block(), [
+ AstFactory.catchClause("e", [AstFactory.block()])
+ ], AstFactory.block());
_assertReplace(node, new Getter_NodeReplacerTest_test_tryStatement_2());
_assertReplace(node, new Getter_NodeReplacerTest_test_tryStatement());
_assertReplace(node, new ListGetter_NodeReplacerTest_test_tryStatement(0));
@@ -4617,14 +4010,12 @@
TypeArgumentList node =
AstFactory.typeArgumentList([AstFactory.typeName4("A")]);
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_typeArgumentList(0));
+ node, new ListGetter_NodeReplacerTest_test_typeArgumentList(0));
}
void test_typeName() {
TypeName node = AstFactory.typeName4(
- "T",
- [AstFactory.typeName4("E"), AstFactory.typeName4("F")]);
+ "T", [AstFactory.typeName4("E"), AstFactory.typeName4("F")]);
_assertReplace(node, new Getter_NodeReplacerTest_test_typeName_2());
_assertReplace(node, new Getter_NodeReplacerTest_test_typeName());
}
@@ -4639,8 +4030,7 @@
void test_typeParameterList() {
TypeParameterList node = AstFactory.typeParameterList(["A", "B"]);
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_typeParameterList(0));
+ node, new ListGetter_NodeReplacerTest_test_typeParameterList(0));
}
void test_variableDeclaration() {
@@ -4648,42 +4038,33 @@
AstFactory.variableDeclaration2("a", AstFactory.nullLiteral());
node.documentationComment =
Comment.createEndOfLineComment(EMPTY_TOKEN_LIST);
- node.metadata = [AstFactory.annotation(AstFactory.identifier3("a"))];
+ node.metadata.add(AstFactory.annotation(AstFactory.identifier3("a")));
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_variableDeclaration());
+ node, new Getter_NodeReplacerTest_test_variableDeclaration());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_variableDeclaration_2());
+ node, new Getter_NodeReplacerTest_test_variableDeclaration_2());
_testAnnotatedNode(node);
}
void test_variableDeclarationList() {
VariableDeclarationList node = AstFactory.variableDeclarationList(
- null,
- AstFactory.typeName4("T"),
- [AstFactory.variableDeclaration("a")]);
+ null, AstFactory.typeName4("T"), [AstFactory.variableDeclaration("a")]);
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_variableDeclarationList());
+ node, new Getter_NodeReplacerTest_test_variableDeclarationList());
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_test_variableDeclarationList(0));
+ node, new ListGetter_NodeReplacerTest_test_variableDeclarationList(0));
}
void test_variableDeclarationStatement() {
VariableDeclarationStatement node = AstFactory.variableDeclarationStatement(
- null,
- AstFactory.typeName4("T"),
- [AstFactory.variableDeclaration("a")]);
+ null, AstFactory.typeName4("T"), [AstFactory.variableDeclaration("a")]);
_assertReplace(
- node,
- new Getter_NodeReplacerTest_test_variableDeclarationStatement());
+ node, new Getter_NodeReplacerTest_test_variableDeclarationStatement());
}
void test_whileStatement() {
- WhileStatement node =
- AstFactory.whileStatement(AstFactory.booleanLiteral(true), AstFactory.block());
+ WhileStatement node = AstFactory.whileStatement(
+ AstFactory.booleanLiteral(true), AstFactory.block());
_assertReplace(node, new Getter_NodeReplacerTest_test_whileStatement());
_assertReplace(node, new Getter_NodeReplacerTest_test_whileStatement_2());
}
@@ -4710,21 +4091,17 @@
void _testNamespaceDirective(NamespaceDirective node) {
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_testNamespaceDirective(0));
+ node, new ListGetter_NodeReplacerTest_testNamespaceDirective(0));
_testUriBasedDirective(node);
}
void _testNormalFormalParameter(NormalFormalParameter node) {
_assertReplace(
- node,
- new Getter_NodeReplacerTest_testNormalFormalParameter_2());
+ node, new Getter_NodeReplacerTest_testNormalFormalParameter_2());
_assertReplace(
- node,
- new Getter_NodeReplacerTest_testNormalFormalParameter());
+ node, new Getter_NodeReplacerTest_testNormalFormalParameter());
_assertReplace(
- node,
- new ListGetter_NodeReplacerTest_testNormalFormalParameter(0));
+ node, new ListGetter_NodeReplacerTest_testNormalFormalParameter(0));
}
void _testSwitchMember(SwitchMember node) {
@@ -4922,18 +4299,14 @@
}
void test_getUnion() {
- expect(
- new SourceRange(10, 10).getUnion(new SourceRange(15, 10)),
+ expect(new SourceRange(10, 10).getUnion(new SourceRange(15, 10)),
new SourceRange(10, 15));
- expect(
- new SourceRange(15, 10).getUnion(new SourceRange(10, 10)),
+ expect(new SourceRange(15, 10).getUnion(new SourceRange(10, 10)),
new SourceRange(10, 15));
// "other" is covered/covers
- expect(
- new SourceRange(10, 10).getUnion(new SourceRange(15, 2)),
+ expect(new SourceRange(10, 10).getUnion(new SourceRange(15, 2)),
new SourceRange(10, 10));
- expect(
- new SourceRange(15, 2).getUnion(new SourceRange(10, 10)),
+ expect(new SourceRange(15, 2).getUnion(new SourceRange(10, 10)),
new SourceRange(10, 10));
}
@@ -5022,18 +4395,15 @@
expect(StringUtilities.indexOf4("abcdefghi", 0, 0x63, 0x64, 0x65, 0x66), 2);
expect(StringUtilities.indexOf4("abcdefghi", 0, 0x66, 0x67, 0x68, 0x69), 5);
expect(
- StringUtilities.indexOf4("abcdefghi", 0, 0x64, 0x65, 0x61, 0x64),
- -1);
+ StringUtilities.indexOf4("abcdefghi", 0, 0x64, 0x65, 0x61, 0x64), -1);
expect(
- StringUtilities.indexOf4("abcdefghi", 1, 0x61, 0x62, 0x63, 0x64),
- -1);
+ StringUtilities.indexOf4("abcdefghi", 1, 0x61, 0x62, 0x63, 0x64), -1);
// before start
}
void test_indexOf5() {
expect(
- StringUtilities.indexOf5("abcde", 0, 0x61, 0x62, 0x63, 0x64, 0x65),
- 0);
+ StringUtilities.indexOf5("abcde", 0, 0x61, 0x62, 0x63, 0x64, 0x65), 0);
expect(
StringUtilities.indexOf5("abcdefghi", 0, 0x61, 0x62, 0x63, 0x64, 0x65),
0);
@@ -5082,8 +4452,8 @@
}
void test_printListOfQuotedNames_five() {
- expect(
- StringUtilities.printListOfQuotedNames(<String>["a", "b", "c", "d", "e"]),
+ expect(StringUtilities
+ .printListOfQuotedNames(<String>["a", "b", "c", "d", "e"]),
"'a', 'b', 'c', 'd' and 'e'");
}
@@ -5106,14 +4476,12 @@
}
void test_printListOfQuotedNames_three() {
- expect(
- StringUtilities.printListOfQuotedNames(<String>["a", "b", "c"]),
+ expect(StringUtilities.printListOfQuotedNames(<String>["a", "b", "c"]),
"'a', 'b' and 'c'");
}
void test_printListOfQuotedNames_two() {
- expect(
- StringUtilities.printListOfQuotedNames(<String>["a", "b"]),
+ expect(StringUtilities.printListOfQuotedNames(<String>["a", "b"]),
"'a' and 'b'");
}
@@ -5129,35 +4497,26 @@
void test_startsWith3() {
expect(StringUtilities.startsWith3("abc", 0, 0x61, 0x62, 0x63), isTrue);
expect(
- StringUtilities.startsWith3("abcdefghi", 0, 0x61, 0x62, 0x63),
- isTrue);
+ StringUtilities.startsWith3("abcdefghi", 0, 0x61, 0x62, 0x63), isTrue);
expect(
- StringUtilities.startsWith3("abcdefghi", 2, 0x63, 0x64, 0x65),
- isTrue);
+ StringUtilities.startsWith3("abcdefghi", 2, 0x63, 0x64, 0x65), isTrue);
expect(
- StringUtilities.startsWith3("abcdefghi", 6, 0x67, 0x68, 0x69),
- isTrue);
+ StringUtilities.startsWith3("abcdefghi", 6, 0x67, 0x68, 0x69), isTrue);
expect(
- StringUtilities.startsWith3("abcdefghi", 0, 0x64, 0x65, 0x61),
- isFalse);
+ StringUtilities.startsWith3("abcdefghi", 0, 0x64, 0x65, 0x61), isFalse);
// missing
}
void test_startsWith4() {
expect(
- StringUtilities.startsWith4("abcd", 0, 0x61, 0x62, 0x63, 0x64),
+ StringUtilities.startsWith4("abcd", 0, 0x61, 0x62, 0x63, 0x64), isTrue);
+ expect(StringUtilities.startsWith4("abcdefghi", 0, 0x61, 0x62, 0x63, 0x64),
isTrue);
- expect(
- StringUtilities.startsWith4("abcdefghi", 0, 0x61, 0x62, 0x63, 0x64),
+ expect(StringUtilities.startsWith4("abcdefghi", 2, 0x63, 0x64, 0x65, 0x66),
isTrue);
- expect(
- StringUtilities.startsWith4("abcdefghi", 2, 0x63, 0x64, 0x65, 0x66),
+ expect(StringUtilities.startsWith4("abcdefghi", 5, 0x66, 0x67, 0x68, 0x69),
isTrue);
- expect(
- StringUtilities.startsWith4("abcdefghi", 5, 0x66, 0x67, 0x68, 0x69),
- isTrue);
- expect(
- StringUtilities.startsWith4("abcdefghi", 0, 0x64, 0x65, 0x61, 0x64),
+ expect(StringUtilities.startsWith4("abcdefghi", 0, 0x64, 0x65, 0x61, 0x64),
isFalse);
// missing
}
@@ -5166,37 +4525,28 @@
expect(
StringUtilities.startsWith5("abcde", 0, 0x61, 0x62, 0x63, 0x64, 0x65),
isTrue);
- expect(
- StringUtilities.startsWith5("abcdefghi", 0, 0x61, 0x62, 0x63, 0x64, 0x65),
- isTrue);
- expect(
- StringUtilities.startsWith5("abcdefghi", 2, 0x63, 0x64, 0x65, 0x66, 0x67),
- isTrue);
- expect(
- StringUtilities.startsWith5("abcdefghi", 4, 0x65, 0x66, 0x67, 0x68, 0x69),
- isTrue);
- expect(
- StringUtilities.startsWith5("abcdefghi", 0, 0x61, 0x62, 0x63, 0x62, 0x61),
- isFalse);
+ expect(StringUtilities.startsWith5(
+ "abcdefghi", 0, 0x61, 0x62, 0x63, 0x64, 0x65), isTrue);
+ expect(StringUtilities.startsWith5(
+ "abcdefghi", 2, 0x63, 0x64, 0x65, 0x66, 0x67), isTrue);
+ expect(StringUtilities.startsWith5(
+ "abcdefghi", 4, 0x65, 0x66, 0x67, 0x68, 0x69), isTrue);
+ expect(StringUtilities.startsWith5(
+ "abcdefghi", 0, 0x61, 0x62, 0x63, 0x62, 0x61), isFalse);
// missing
}
void test_startsWith6() {
- expect(
- StringUtilities.startsWith6("abcdef", 0, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66),
- isTrue);
- expect(
- StringUtilities.startsWith6("abcdefghi", 0, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66),
- isTrue);
- expect(
- StringUtilities.startsWith6("abcdefghi", 2, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68),
- isTrue);
- expect(
- StringUtilities.startsWith6("abcdefghi", 3, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69),
- isTrue);
- expect(
- StringUtilities.startsWith6("abcdefghi", 0, 0x61, 0x62, 0x63, 0x64, 0x65, 0x67),
- isFalse);
+ expect(StringUtilities.startsWith6(
+ "abcdef", 0, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66), isTrue);
+ expect(StringUtilities.startsWith6(
+ "abcdefghi", 0, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66), isTrue);
+ expect(StringUtilities.startsWith6(
+ "abcdefghi", 2, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68), isTrue);
+ expect(StringUtilities.startsWith6(
+ "abcdefghi", 3, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69), isTrue);
+ expect(StringUtilities.startsWith6(
+ "abcdefghi", 0, 0x61, 0x62, 0x63, 0x64, 0x65, 0x67), isFalse);
// missing
}
@@ -5228,7 +4578,6 @@
}
}
-
@reflectiveTest
class TokenMapTest {
void test_creation() {
diff --git a/pkg/analyzer/test/instrumentation/instrumentation_test.dart b/pkg/analyzer/test/instrumentation/instrumentation_test.dart
index 30de819..b1c263d 100644
--- a/pkg/analyzer/test/instrumentation/instrumentation_test.dart
+++ b/pkg/analyzer/test/instrumentation/instrumentation_test.dart
@@ -18,8 +18,8 @@
@reflectiveTest
class InstrumentationServiceTest {
- void assertNormal(TestInstrumentationServer server, String tag,
- String message) {
+ void assertNormal(
+ TestInstrumentationServer server, String tag, String message) {
String sent = server.normalChannel.toString();
if (!sent.endsWith(':$tag:$message\n')) {
fail('Expected "...:$tag:$message", found "$sent"');
@@ -64,9 +64,7 @@
String content = 'class C {\n}\n';
service.logFileRead(path, time, content);
assertNormal(
- server,
- InstrumentationService.TAG_FILE_READ,
- '$path:$time:$content');
+ server, InstrumentationService.TAG_FILE_READ, '$path:$time:$content');
}
void test_logLogEntry() {
@@ -76,9 +74,7 @@
DateTime time = new DateTime(2001);
String message = 'message';
service.logLogEntry(level, time, message);
- assertNormal(
- server,
- InstrumentationService.TAG_LOG_ENTRY,
+ assertNormal(server, InstrumentationService.TAG_LOG_ENTRY,
'$level:${time.millisecondsSinceEpoch}:$message');
}
@@ -109,17 +105,11 @@
void test_logVersion() {
TestInstrumentationServer server = new TestInstrumentationServer();
InstrumentationService service = new InstrumentationService(server);
- service.logVersion(
- 'myUuid',
- 'someClientId',
- 'someClientVersion',
- 'aServerVersion',
- 'anSdkVersion');
+ service.logVersion('myUuid', 'someClientId', 'someClientVersion',
+ 'aServerVersion', 'anSdkVersion');
expect(server.normalChannel.toString(), '');
- expect(
- server.priorityChannel.toString(),
- endsWith(
- ':myUuid:someClientId:someClientVersion:aServerVersion:anSdkVersion\n'));
+ expect(server.priorityChannel.toString(), endsWith(
+ ':myUuid:someClientId:someClientVersion:aServerVersion:anSdkVersion\n'));
}
}
diff --git a/pkg/analyzer/test/options_test.dart b/pkg/analyzer/test/options_test.dart
index 4830306..fcff6ef 100644
--- a/pkg/analyzer/test/options_test.dart
+++ b/pkg/analyzer/test/options_test.dart
@@ -11,9 +11,7 @@
import 'reflective_tests.dart';
main() {
-
group('AnalyzerOptions.parse()', () {
-
test('defaults', () {
CommandLineOptions options =
CommandLineOptions.parse(['--dart-sdk', '.', 'foo.dart']);
@@ -44,15 +42,15 @@
});
test('defined variables', () {
- CommandLineOptions options =
- CommandLineOptions.parse(['--dart-sdk', '.', '-Dfoo=bar', 'foo.dart']);
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '-Dfoo=bar', 'foo.dart']);
expect(options.definedVariables['foo'], equals('bar'));
expect(options.definedVariables['bar'], isNull);
});
test('enable type checks', () {
- CommandLineOptions options = CommandLineOptions.parse(
- ['--dart-sdk', '.', '--enable_type_checks', 'foo.dart']);
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '--enable_type_checks', 'foo.dart']);
expect(options.enableTypeChecks, isTrue);
});
@@ -63,26 +61,26 @@
});
test('machine format', () {
- CommandLineOptions options =
- CommandLineOptions.parse(['--dart-sdk', '.', '--format=machine', 'foo.dart']);
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '--format=machine', 'foo.dart']);
expect(options.machineFormat, isTrue);
});
test('no-hints', () {
- CommandLineOptions options =
- CommandLineOptions.parse(['--dart-sdk', '.', '--no-hints', 'foo.dart']);
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '--no-hints', 'foo.dart']);
expect(options.disableHints, isTrue);
});
test('package root', () {
- CommandLineOptions options =
- CommandLineOptions.parse(['--dart-sdk', '.', '-p', 'bar', 'foo.dart']);
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '-p', 'bar', 'foo.dart']);
expect(options.packageRootPath, equals('bar'));
});
test('package warnings', () {
- CommandLineOptions options = CommandLineOptions.parse(
- ['--dart-sdk', '.', '--package-warnings', 'foo.dart']);
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '--package-warnings', 'foo.dart']);
expect(options.showPackageWarnings, isTrue);
});
@@ -93,8 +91,8 @@
});
test('sdk warnings', () {
- CommandLineOptions options =
- CommandLineOptions.parse(['--dart-sdk', '.', '--warnings', 'foo.dart']);
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '--warnings', 'foo.dart']);
expect(options.showSdkWarnings, isTrue);
});
@@ -102,28 +100,26 @@
CommandLineOptions options = CommandLineOptions.parse(
['--dart-sdk', '.', '--log', 'foo.dart', 'foo2.dart', 'foo3.dart']);
expect(
- options.sourceFiles,
- equals(['foo.dart', 'foo2.dart', 'foo3.dart']));
+ options.sourceFiles, equals(['foo.dart', 'foo2.dart', 'foo3.dart']));
});
test('warningsAreFatal', () {
- CommandLineOptions options =
- CommandLineOptions.parse(['--dart-sdk', '.', '--fatal-warnings', 'foo.dart']);
+ CommandLineOptions options = CommandLineOptions
+ .parse(['--dart-sdk', '.', '--fatal-warnings', 'foo.dart']);
expect(options.warningsAreFatal, isTrue);
});
test('customUrlMappings', () {
- CommandLineOptions options = CommandLineOptions.parse(
- [
- '--dart-sdk',
- '.',
- '--url-mapping',
- 'dart:dummy,/path/to/dummy.dart',
- 'foo.dart']);
+ CommandLineOptions options = CommandLineOptions.parse([
+ '--dart-sdk',
+ '.',
+ '--url-mapping',
+ 'dart:dummy,/path/to/dummy.dart',
+ 'foo.dart'
+ ]);
expect(options.customUrlMappings, isNotNull);
expect(options.customUrlMappings.isEmpty, isFalse);
- expect(
- options.customUrlMappings['dart:dummy'],
+ expect(options.customUrlMappings['dart:dummy'],
equals('/path/to/dummy.dart'));
});
@@ -134,24 +130,22 @@
// });
test('ignore unrecognized flags', () {
- CommandLineOptions options = CommandLineOptions.parse(
- [
- '--ignore-unrecognized-flags',
- '--bar',
- '--baz',
- '--dart-sdk',
- '.',
- 'foo.dart']);
+ CommandLineOptions options = CommandLineOptions.parse([
+ '--ignore-unrecognized-flags',
+ '--bar',
+ '--baz',
+ '--dart-sdk',
+ '.',
+ 'foo.dart'
+ ]);
expect(options, isNotNull);
expect(options.sourceFiles, equals(['foo.dart']));
});
-
});
runReflectiveTests(CommandLineParserTest);
}
-
@reflectiveTest
class CommandLineParserTest {
test_ignoreUnrecognizedOptions() {
diff --git a/pkg/analyzer/test/parse_compilation_unit_test.dart b/pkg/analyzer/test/parse_compilation_unit_test.dart
index 756c227..bbc05c4 100644
--- a/pkg/analyzer/test/parse_compilation_unit_test.dart
+++ b/pkg/analyzer/test/parse_compilation_unit_test.dart
@@ -15,8 +15,7 @@
test("throws errors for an invalid compilation unit", () {
expect(() {
- parseCompilationUnit(
- "void main() => print('Hello, world!')",
+ parseCompilationUnit("void main() => print('Hello, world!')",
name: 'test.dart');
}, throwsA(predicate((error) {
return error is AnalyzerErrorGroup &&
@@ -29,7 +28,9 @@
parseCompilationUnit("void main() => print('Hello, world!')");
}, throwsA(predicate((error) {
return error is AnalyzerErrorGroup &&
- error.toString().contains("Error in <unknown source>: Expected to find ';'");
+ error
+ .toString()
+ .contains("Error in <unknown source>: Expected to find ';'");
})));
});
}
diff --git a/pkg/analyzer/test/reflective_tests.dart b/pkg/analyzer/test/reflective_tests.dart
index 80c9073..f421e6c 100644
--- a/pkg/analyzer/test/reflective_tests.dart
+++ b/pkg/analyzer/test/reflective_tests.dart
@@ -10,7 +10,6 @@
import 'package:unittest/unittest.dart';
-
/**
* Runs test methods existing in the given [type].
*
@@ -29,13 +28,11 @@
*/
void runReflectiveTests(Type type) {
ClassMirror classMirror = reflectClass(type);
- if (!classMirror.metadata.any(
- (InstanceMirror annotation) =>
- annotation.type.reflectedType == ReflectiveTest)) {
+ if (!classMirror.metadata.any((InstanceMirror annotation) =>
+ annotation.type.reflectedType == ReflectiveTest)) {
String name = MirrorSystem.getName(classMirror.qualifiedName);
- throw new Exception(
- 'Class $name must have annotation "@reflectiveTest" '
- 'in order to be run by runReflectiveTests.');
+ throw new Exception('Class $name must have annotation "@reflectiveTest" '
+ 'in order to be run by runReflectiveTests.');
}
String className = MirrorSystem.getName(classMirror.simpleName);
group(className, () {
@@ -74,13 +71,11 @@
});
}
-
Future _invokeSymbolIfExists(InstanceMirror instanceMirror, Symbol symbol) {
var invocationResult = null;
try {
invocationResult = instanceMirror.invoke(symbol, []).reflectee;
- } on NoSuchMethodError catch (e) {
- }
+ } on NoSuchMethodError catch (e) {}
if (invocationResult is Future) {
return invocationResult;
} else {
@@ -88,7 +83,6 @@
}
}
-
/**
* Run a test that is expected to fail, and confirm that it fails.
*
@@ -105,21 +99,13 @@
}, onError: (_) {});
}
-
_runTest(ClassMirror classMirror, Symbol symbol) {
InstanceMirror instanceMirror = classMirror.newInstance(new Symbol(''), []);
- return _invokeSymbolIfExists(
- instanceMirror,
- #setUp).then(
- (_) =>
- instanceMirror.invoke(
- symbol,
- [
- ]).reflectee).whenComplete(
- () => _invokeSymbolIfExists(instanceMirror, #tearDown));
+ return _invokeSymbolIfExists(instanceMirror, #setUp)
+ .then((_) => instanceMirror.invoke(symbol, []).reflectee)
+ .whenComplete(() => _invokeSymbolIfExists(instanceMirror, #tearDown));
}
-
/**
* A marker annotation used to instruct dart2js to keep reflection information
* for the annotated classes.
diff --git a/pkg/analyzer/test/services/formatter_test.dart b/pkg/analyzer/test/services/formatter_test.dart
index 5416b24..b039e06 100644
--- a/pkg/analyzer/test/services/formatter_test.dart
+++ b/pkg/analyzer/test/services/formatter_test.dart
@@ -23,8 +23,8 @@
// NOTE: statement tests are run with transforms enabled
runTests('stmt_tests.data', (input, expectedOutput) {
expect(formatStatement(input,
- options: new FormatterOptions(codeTransforms: true)) + '\n',
- equals(expectedOutput));
+ options: new FormatterOptions(codeTransforms: true)) +
+ '\n', equals(expectedOutput));
});
});
@@ -51,16 +51,14 @@
/// Formatter tests
group('formatter', () {
-
test('failed parse', () {
var formatter = new CodeFormatter();
expect(() => formatter.format(CodeKind.COMPILATION_UNIT, '~'),
- throwsA(new isInstanceOf<FormatterException>()));
+ throwsA(new isInstanceOf<FormatterException>()));
});
test('indent', () {
- var original =
- 'class A {\n'
+ var original = 'class A {\n'
' var z;\n'
' inc(int x) => ++x;\n'
' foo(int x) {\n'
@@ -69,13 +67,8 @@
' }\n'
' }\n'
'}\n';
- expectCUFormatsTo(
- original,
- original
- );
- expectIndentFormatsTo(3, false,
- original,
- 'class A {\n'
+ expectCUFormatsTo(original, original);
+ expectIndentFormatsTo(3, false, original, 'class A {\n'
' var z;\n'
' inc(int x) => ++x;\n'
' foo(int x) {\n'
@@ -83,11 +76,8 @@
' return true;\n'
' }\n'
' }\n'
- '}\n'
- );
- expectIndentFormatsTo(1, true,
- original,
- 'class A {\n'
+ '}\n');
+ expectIndentFormatsTo(1, true, original, 'class A {\n'
'\tvar z;\n'
'\tinc(int x) => ++x;\n'
'\tfoo(int x) {\n'
@@ -95,298 +85,226 @@
'\t\t\treturn true;\n'
'\t\t}\n'
'\t}\n'
- '}\n'
- );
+ '}\n');
});
test('CU (1)', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
' var z;\n'
' inc(int x) => ++x;\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
' var z;\n'
' inc(int x) => ++x;\n'
- '}\n'
- );
+ '}\n');
});
test('CU (2)', () {
- expectCUFormatsTo(
- 'class A { \n'
- '}\n',
- 'class A {\n'
- '}\n'
- );
+ expectCUFormatsTo('class A { \n'
+ '}\n', 'class A {\n'
+ '}\n');
});
test('CU (3)', () {
- expectCUFormatsTo(
- 'class A {\n'
- ' }',
- 'class A {\n'
- '}\n'
- );
+ expectCUFormatsTo('class A {\n'
+ ' }', 'class A {\n'
+ '}\n');
});
test('CU (4)', () {
- expectCUFormatsTo(
- ' class A {\n'
- '}\n',
- 'class A {\n'
- '}\n'
- );
+ expectCUFormatsTo(' class A {\n'
+ '}\n', 'class A {\n'
+ '}\n');
});
test('CU (5)', () {
- expectCUFormatsTo(
- 'class A { int meaningOfLife() => 42; }',
- 'class A {\n'
+ expectCUFormatsTo('class A { int meaningOfLife() => 42; }', 'class A {\n'
' int meaningOfLife() => 42;\n'
- '}\n'
- );
+ '}\n');
});
test('CU - EOL comments', () {
- expectCUFormatsTo(
- '//comment one\n\n'
- '//comment two\n\n',
- '//comment one\n\n'
- '//comment two\n\n'
- );
- expectCUFormatsTo(
- 'var x; //x\n',
- 'var x; //x\n'
- );
- expectCUFormatsTo(
- 'library foo;\n'
+ expectCUFormatsTo('//comment one\n\n'
+ '//comment two\n\n', '//comment one\n\n'
+ '//comment two\n\n');
+ expectCUFormatsTo('var x; //x\n', 'var x; //x\n');
+ expectCUFormatsTo('library foo;\n'
'\n'
'//comment one\n'
'\n'
'class C {\n'
- '}\n',
- 'library foo;\n'
+ '}\n', 'library foo;\n'
'\n'
'//comment one\n'
'\n'
'class C {\n'
- '}\n'
- );
- expectCUFormatsTo(
- 'library foo;\n'
+ '}\n');
+ expectCUFormatsTo('library foo;\n'
'\n'
'//comment one\n'
'\n'
'//comment two\n'
'\n'
'class C {\n'
- '}\n',
- 'library foo;\n'
+ '}\n', 'library foo;\n'
'\n'
'//comment one\n'
'\n'
'//comment two\n'
'\n'
'class C {\n'
- '}\n'
- );
- expectCUFormatsTo(
- 'main() {\n'
+ '}\n');
+ expectCUFormatsTo('main() {\n'
'// print(1);\n'
'// print(2);\n'
' print(3);\n'
- '}\n',
- 'main() {\n'
+ '}\n', 'main() {\n'
'// print(1);\n'
'// print(2);\n'
' print(3);\n'
- '}\n'
- );
- expectCUFormatsTo(
- 'class A {\n'
+ '}\n');
+ expectCUFormatsTo('class A {\n'
'// int a;\n'
'// int b;\n'
' int c;\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
'// int a;\n'
'// int b;\n'
' int c;\n'
- '}\n'
- );
+ '}\n');
});
test('CU - nested functions', () {
- expectCUFormatsTo(
- 'x() {\n'
+ expectCUFormatsTo('x() {\n'
' y() {\n'
' }\n'
- '}\n',
- 'x() {\n'
+ '}\n', 'x() {\n'
' y() {\n'
' }\n'
- '}\n'
- );
+ '}\n');
});
test('CU - top level', () {
- expectCUFormatsTo(
- '\n\n'
+ expectCUFormatsTo('\n\n'
'foo() {\n'
'}\n'
'bar() {\n'
- '}\n',
- '\n\n'
+ '}\n', '\n\n'
'foo() {\n'
'}\n'
'bar() {\n'
- '}\n'
- );
- expectCUFormatsTo(
- 'const A = 42;\n'
- 'final foo = 32;\n',
- 'const A = 42;\n'
- 'final foo = 32;\n'
- );
+ '}\n');
+ expectCUFormatsTo('const A = 42;\n'
+ 'final foo = 32;\n', 'const A = 42;\n'
+ 'final foo = 32;\n');
});
test('CU - imports', () {
- expectCUFormatsTo(
- 'import "dart:io";\n\n'
+ expectCUFormatsTo('import "dart:io";\n\n'
'import "package:unittest/unittest.dart";\n'
'foo() {\n'
- '}\n',
- 'import "dart:io";\n\n'
+ '}\n', 'import "dart:io";\n\n'
'import "package:unittest/unittest.dart";\n'
'foo() {\n'
- '}\n'
- );
- expectCUFormatsTo(
- 'library a; class B { }',
- 'library a;\n'
- 'class B {}\n'
- );
+ '}\n');
+ expectCUFormatsTo('library a; class B { }', 'library a;\n'
+ 'class B {}\n');
});
test('CU - method invocations', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
' foo() {\n'
' bar();\n'
' for (int i = 0; i < 42; i++) {\n'
' baz();\n'
' }\n'
' }\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
' foo() {\n'
' bar();\n'
' for (int i = 0; i < 42; i++) {\n'
' baz();\n'
' }\n'
' }\n'
- '}\n'
- );
+ '}\n');
});
test('CU w/class decl comment', () {
- expectCUFormatsTo(
- 'import "foo";\n\n'
+ expectCUFormatsTo('import "foo";\n\n'
'//Killer class\n'
'class A {\n'
- '}',
- 'import "foo";\n\n'
+ '}', 'import "foo";\n\n'
'//Killer class\n'
'class A {\n'
- '}\n'
- );
+ '}\n');
});
test('CU (method body)', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
' foo(path) {\n'
' var buffer = new StringBuffer();\n'
' var file = new File(path);\n'
' return file;\n'
' }\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
' foo(path) {\n'
' var buffer = new StringBuffer();\n'
' var file = new File(path);\n'
' return file;\n'
' }\n'
- '}\n'
- );
- expectCUFormatsTo(
- 'class A {\n'
+ '}\n');
+ expectCUFormatsTo('class A {\n'
' foo(files) {\n'
' for (var file in files) {\n'
' print(file);\n'
' }\n'
' }\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
' foo(files) {\n'
' for (var file in files) {\n'
' print(file);\n'
' }\n'
' }\n'
- '}\n'
- );
+ '}\n');
});
test('CU (method indent)', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
'void x(){\n'
'}\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
' void x() {\n'
' }\n'
- '}\n'
- );
+ '}\n');
});
test('CU (method indent - 2)', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
' static bool x(){\n'
'return true; }\n'
- ' }\n',
- 'class A {\n'
+ ' }\n', 'class A {\n'
' static bool x() {\n'
' return true;\n'
' }\n'
- '}\n'
- );
+ '}\n');
});
test('CU (method indent - 3)', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
' int x() => 42 + 3 ; \n'
- ' }\n',
- 'class A {\n'
+ ' }\n', 'class A {\n'
' int x() => 42 + 3;\n'
- '}\n'
- );
+ '}\n');
});
test('CU (method indent - 4)', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
' int x() { \n'
'if (true) {\n'
'return 42;\n'
'} else {\n'
'return 13;\n }\n'
' }'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
' int x() {\n'
' if (true) {\n'
' return 42;\n'
@@ -394,80 +312,63 @@
' return 13;\n'
' }\n'
' }\n'
- '}\n'
- );
+ '}\n');
});
test('CU (multiple members)', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
'}\n'
'class B {\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
'}\n'
'class B {\n'
- '}\n'
- );
+ '}\n');
});
test('CU (multiple members w/blanks)', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
'}\n\n'
'class B {\n\n\n'
' int b() => 42;\n\n'
' int c() => b();\n\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
'}\n\n'
'class B {\n\n\n'
' int b() => 42;\n\n'
' int c() => b();\n\n'
- '}\n'
- );
+ '}\n');
});
test('CU - Block comments', () {
- expectCUFormatsTo(
- '/** Old school class comment */\n'
+ expectCUFormatsTo('/** Old school class comment */\n'
'class C {\n'
' /** Foo! */ int foo() => 42;\n'
- '}\n',
- '/** Old school class comment */\n'
+ '}\n', '/** Old school class comment */\n'
'class C {\n'
' /** Foo! */\n'
' int foo() => 42;\n'
- '}\n'
- );
- expectCUFormatsTo(
- 'library foo;\n'
+ '}\n');
+ expectCUFormatsTo('library foo;\n'
'class C /* is cool */ {\n'
' /* int */ foo() => 42;\n'
- '}\n',
- 'library foo;\n'
+ '}\n', 'library foo;\n'
'class C /* is cool */ {\n'
' /* int */ foo() => 42;\n'
- '}\n'
- );
- expectCUFormatsTo(
- 'library foo;\n'
+ '}\n');
+ expectCUFormatsTo('library foo;\n'
'/* A long\n'
' * Comment\n'
'*/\n'
'class C /* is cool */ {\n'
' /* int */ foo() => 42;\n'
- '}\n',
- 'library foo;\n'
+ '}\n', 'library foo;\n'
'/* A long\n'
' * Comment\n'
'*/\n'
'class C /* is cool */ {\n'
' /* int */ foo() => 42;\n'
- '}\n'
- );
- expectCUFormatsTo(
- 'library foo;\n'
+ '}\n');
+ expectCUFormatsTo('library foo;\n'
'/* A long\n'
' * Comment\n'
'*/\n'
@@ -480,8 +381,7 @@
'\n'
'class C /* is cool */ {\n'
' /* int */ foo() => 42;\n'
- '}\n',
- 'library foo;\n'
+ '}\n', 'library foo;\n'
'/* A long\n'
' * Comment\n'
'*/\n'
@@ -494,124 +394,91 @@
'\n'
'class C /* is cool */ {\n'
' /* int */ foo() => 42;\n'
- '}\n'
- );
- expectCUFormatsTo(
- '/// Copyright info\n'
+ '}\n');
+ expectCUFormatsTo('/// Copyright info\n'
'\n'
'library foo;\n'
'/// Class comment\n'
'//TODO: implement\n'
'class C {\n'
- '}\n',
- '/// Copyright info\n'
+ '}\n', '/// Copyright info\n'
'\n'
'library foo;\n'
'/// Class comment\n'
'//TODO: implement\n'
'class C {\n'
- '}\n'
- );
+ '}\n');
});
test('CU - mixed comments', () {
- expectCUFormatsTo(
- 'library foo;\n'
+ expectCUFormatsTo('library foo;\n'
'\n'
'\n'
'/* Comment 1 */\n'
'\n'
'// Comment 2\n'
'\n'
- '/* Comment 3 */',
- 'library foo;\n'
+ '/* Comment 3 */', 'library foo;\n'
'\n'
'\n'
'/* Comment 1 */\n'
'\n'
'// Comment 2\n'
'\n'
- '/* Comment 3 */\n'
- );
+ '/* Comment 3 */\n');
});
test('CU - comments (EOF)', () {
- expectCUFormatsTo(
- 'library foo; //zamm',
+ expectCUFormatsTo('library foo; //zamm',
'library foo; //zamm\n' //<-- note extra NEWLINE
- );
+ );
});
test('CU - comments (0)', () {
- expectCUFormatsTo(
- 'library foo; //zamm\n'
+ expectCUFormatsTo('library foo; //zamm\n'
'\n'
'class A {\n'
- '}\n',
- 'library foo; //zamm\n'
+ '}\n', 'library foo; //zamm\n'
'\n'
'class A {\n'
- '}\n'
- );
+ '}\n');
});
test('CU - comments (1)', () {
- expectCUFormatsTo(
- '/* foo */ /* bar */\n',
- '/* foo */ /* bar */\n'
- );
+ expectCUFormatsTo('/* foo */ /* bar */\n', '/* foo */ /* bar */\n');
});
test('CU - comments (2)', () {
- expectCUFormatsTo(
- '/** foo */ /** bar */\n',
- '/** foo */\n'
- '/** bar */\n'
- );
+ expectCUFormatsTo('/** foo */ /** bar */\n', '/** foo */\n'
+ '/** bar */\n');
});
test('CU - comments (3)', () {
- expectCUFormatsTo(
- 'var x; //x\n',
- 'var x; //x\n'
- );
+ expectCUFormatsTo('var x; //x\n', 'var x; //x\n');
});
test('CU - comments (4)', () {
- expectCUFormatsTo(
- 'class X { //X!\n'
- '}',
- 'class X { //X!\n'
- '}\n'
- );
+ expectCUFormatsTo('class X { //X!\n'
+ '}', 'class X { //X!\n'
+ '}\n');
});
test('CU - comments (5)', () {
- expectCUFormatsTo(
- '//comment one\n\n'
- '//comment two\n\n',
- '//comment one\n\n'
- '//comment two\n\n'
- );
+ expectCUFormatsTo('//comment one\n\n'
+ '//comment two\n\n', '//comment one\n\n'
+ '//comment two\n\n');
});
test('CU - comments (6)', () {
- expectCUFormatsTo(
- 'var x; //x\n',
- 'var x; //x\n'
- );
+ expectCUFormatsTo('var x; //x\n', 'var x; //x\n');
});
test('CU - comments (6)', () {
- expectCUFormatsTo(
- 'var /* int */ x; //x\n',
- 'var /* int */ x; //x\n'
- );
+ expectCUFormatsTo('var /* int */ x; //x\n', 'var /* int */ x; //x\n');
});
test('CU - comments (7)', () {
- expectCUFormatsTo(
- 'library foo;\n'
+ expectCUFormatsTo('library foo;\n'
'\n'
'/// Docs\n'
'/// spanning\n'
@@ -622,8 +489,7 @@
'/// ... and\n'
'\n'
'/// Dangling ones too\n'
- 'int x;\n',
- 'library foo;\n'
+ 'int x;\n', 'library foo;\n'
'\n'
'/// Docs\n'
'/// spanning\n'
@@ -634,433 +500,319 @@
'/// ... and\n'
'\n'
'/// Dangling ones too\n'
- 'int x;\n'
- );
+ 'int x;\n');
});
test('CU - comments (8)', () {
- expectCUFormatsTo(
- 'var x /* X */, y;\n',
- 'var x /* X */, y;\n'
- );
+ expectCUFormatsTo('var x /* X */, y;\n', 'var x /* X */, y;\n');
});
test('CU - comments (9)', () {
- expectCUFormatsTo(
- 'main() {\n'
+ expectCUFormatsTo('main() {\n'
' foo(1 /* bang */, 2);\n'
'}\n'
- 'foo(x, y) => null;\n',
- 'main() {\n'
+ 'foo(x, y) => null;\n', 'main() {\n'
' foo(1 /* bang */, 2);\n'
'}\n'
- 'foo(x, y) => null;\n'
- );
+ 'foo(x, y) => null;\n');
});
test('CU - comments (10)', () {
expectCUFormatsTo(
- 'var l = [1 /* bang */, 2];\n',
- 'var l = [1 /* bang */, 2];\n'
- );
+ 'var l = [1 /* bang */, 2];\n', 'var l = [1 /* bang */, 2];\n');
});
test('CU - comments (11)', () {
- expectCUFormatsTo(
- 'var m = {1: 2 /* bang */, 3: 4};\n',
- 'var m = {\n'
+ expectCUFormatsTo('var m = {1: 2 /* bang */, 3: 4};\n', 'var m = {\n'
' 1: 2 /* bang */,\n'
' 3: 4\n'
- '};\n'
- );
+ '};\n');
});
test('CU - EOF nl', () {
- expectCUFormatsTo(
- 'var x = 1;',
- 'var x = 1;\n'
- );
+ expectCUFormatsTo('var x = 1;', 'var x = 1;\n');
});
test('CU - constructor', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
' const _a;\n'
' A();\n'
' int a() => _a;\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
' const _a;\n'
' A();\n'
' int a() => _a;\n'
- '}\n'
- );
+ '}\n');
});
test('CU - method decl w/ named params', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
' int a(var x, {optional: null}) => null;\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
' int a(var x, {optional: null}) => null;\n'
- '}\n'
- );
+ '}\n');
});
test('CU - method decl w/ optional params', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
' int a(var x, [optional = null]) => null;\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
' int a(var x, [optional = null]) => null;\n'
- '}\n'
- );
+ '}\n');
});
test('CU - factory constructor redirects', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
' const factory A() = B;\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
' const factory A() = B;\n'
- '}\n'
- );
+ '}\n');
});
test('CU - constructor auto field inits', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
' int _a;\n'
' A(this._a);\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
' int _a;\n'
' A(this._a);\n'
- '}\n'
- );
+ '}\n');
});
test('CU - parts', () {
- expectCUFormatsTo(
- 'part of foo;',
- 'part of foo;\n'
- );
+ expectCUFormatsTo('part of foo;', 'part of foo;\n');
});
test('CU (cons inits)', () {
expectCUFormatsTo('class X {\n'
' var x, y;\n'
' X() : x = 1, y = 2;\n'
- '}\n',
- 'class X {\n'
+ '}\n', 'class X {\n'
' var x, y;\n'
' X()\n'
' : x = 1,\n'
' y = 2;\n'
- '}\n'
- );
+ '}\n');
});
test('CU (empty cons bodies)', () {
- expectCUFormatsTo(
- 'class A {\n'
+ expectCUFormatsTo('class A {\n'
' A() {\n'
' }\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
' A();\n'
- '}\n',
- transforms: true
- );
- expectCUFormatsTo(
- 'class A {\n'
+ '}\n', transforms: true);
+ expectCUFormatsTo('class A {\n'
' A() {\n'
' }\n'
- '}\n',
- 'class A {\n'
+ '}\n', 'class A {\n'
' A() {\n'
' }\n'
- '}\n',
- transforms: false
- );
+ '}\n', transforms: false);
});
test('stmt', () {
- expectStmtFormatsTo(
- 'if (true){\n'
- 'if (true){\n'
- 'if (true){\n'
- 'return true;\n'
- '} else{\n'
- 'return false;\n'
- '}\n'
- '}\n'
- '}else{\n'
- 'return false;\n'
- '}',
- 'if (true) {\n'
- ' if (true) {\n'
- ' if (true) {\n'
- ' return true;\n'
- ' } else {\n'
- ' return false;\n'
- ' }\n'
- ' }\n'
- '} else {\n'
- ' return false;\n'
- '}'
- );
+ expectStmtFormatsTo('if (true){\n'
+ 'if (true){\n'
+ 'if (true){\n'
+ 'return true;\n'
+ '} else{\n'
+ 'return false;\n'
+ '}\n'
+ '}\n'
+ '}else{\n'
+ 'return false;\n'
+ '}', 'if (true) {\n'
+ ' if (true) {\n'
+ ' if (true) {\n'
+ ' return true;\n'
+ ' } else {\n'
+ ' return false;\n'
+ ' }\n'
+ ' }\n'
+ '} else {\n'
+ ' return false;\n'
+ '}');
});
test('stmt (switch)', () {
- expectStmtFormatsTo(
- 'switch (fruit) {\n'
- 'case "apple":\n'
- 'print("delish");\n'
- 'break;\n'
- 'case "fig":\n'
- 'print("bleh");\n'
- 'break;\n'
- '}',
- 'switch (fruit) {\n'
- ' case "apple":\n'
- ' print("delish");\n'
- ' break;\n'
- ' case "fig":\n'
- ' print("bleh");\n'
- ' break;\n'
- '}'
- );
+ expectStmtFormatsTo('switch (fruit) {\n'
+ 'case "apple":\n'
+ 'print("delish");\n'
+ 'break;\n'
+ 'case "fig":\n'
+ 'print("bleh");\n'
+ 'break;\n'
+ '}', 'switch (fruit) {\n'
+ ' case "apple":\n'
+ ' print("delish");\n'
+ ' break;\n'
+ ' case "fig":\n'
+ ' print("bleh");\n'
+ ' break;\n'
+ '}');
});
test('stmt (empty while body)', () {
- expectStmtFormatsTo(
- 'while (true);',
- 'while (true);'
- );
+ expectStmtFormatsTo('while (true);', 'while (true);');
});
test('stmt (empty for body)', () {
- expectStmtFormatsTo(
- 'for ( ; ; );',
- 'for ( ; ; );'
- );
+ expectStmtFormatsTo('for ( ; ; );', 'for ( ; ; );');
});
test('stmt (cascades)', () {
- expectStmtFormatsTo(
- '"foo"\n'
- '..toString()\n'
- '..toString();',
- '"foo"\n'
- ' ..toString()\n'
- ' ..toString();'
- );
+ expectStmtFormatsTo('"foo"\n'
+ '..toString()\n'
+ '..toString();', '"foo"\n'
+ ' ..toString()\n'
+ ' ..toString();');
});
test('stmt (generics)', () {
- expectStmtFormatsTo(
- 'var numbers = <int>[1, 2, (3 + 4)];',
- 'var numbers = <int>[1, 2, (3 + 4)];'
- );
+ expectStmtFormatsTo('var numbers = <int>[1, 2, (3 + 4)];',
+ 'var numbers = <int>[1, 2, (3 + 4)];');
});
test('stmt (lists)', () {
- expectStmtFormatsTo(
- 'var l = [1,2,3,4];',
- 'var l = [1, 2, 3, 4];'
- );
- expectStmtFormatsTo(
- 'var l = [\n'
- '1,\n'
- '2,\n'
- '];',
- 'var l = [1, 2,];'
- );
+ expectStmtFormatsTo('var l = [1,2,3,4];', 'var l = [1, 2, 3, 4];');
+ expectStmtFormatsTo('var l = [\n'
+ '1,\n'
+ '2,\n'
+ '];', 'var l = [1, 2,];');
//Dangling ','
- expectStmtFormatsTo(
- 'var l = [1,];',
- 'var l = [1,];'
- );
+ expectStmtFormatsTo('var l = [1,];', 'var l = [1,];');
});
test('stmt (maps)', () {
- expectStmtFormatsTo(
- 'var map = const {"foo": "bar", "fuz": null};',
- 'var map = const {\n'
- ' "foo": "bar",\n'
- ' "fuz": null\n'
- '};'
- );
+ expectStmtFormatsTo('var map = const {"foo": "bar", "fuz": null};',
+ 'var map = const {\n'
+ ' "foo": "bar",\n'
+ ' "fuz": null\n'
+ '};');
- expectStmtFormatsTo(
- 'var map = {\n'
+ expectStmtFormatsTo('var map = {\n'
'"foo": "bar",\n'
'"bar": "baz"\n'
- '};',
- 'var map = {\n'
+ '};', 'var map = {\n'
' "foo": "bar",\n'
' "bar": "baz"\n'
- '};'
- );
+ '};');
//Dangling ','
- expectStmtFormatsTo(
- 'var map = {"foo": "bar",};',
- 'var map = {\n'
- ' "foo": "bar",\n'
- '};'
- );
+ expectStmtFormatsTo('var map = {"foo": "bar",};', 'var map = {\n'
+ ' "foo": "bar",\n'
+ '};');
});
test('stmt (try/catch)', () {
- expectStmtFormatsTo(
- 'try {\n'
- 'doSomething();\n'
- '} catch (e) {\n'
- 'print(e);\n'
- '}',
- 'try {\n'
- ' doSomething();\n'
- '} catch (e) {\n'
- ' print(e);\n'
- '}'
- );
- expectStmtFormatsTo(
- 'try{\n'
+ expectStmtFormatsTo('try {\n'
+ 'doSomething();\n'
+ '} catch (e) {\n'
+ 'print(e);\n'
+ '}', 'try {\n'
+ ' doSomething();\n'
+ '} catch (e) {\n'
+ ' print(e);\n'
+ '}');
+ expectStmtFormatsTo('try{\n'
'doSomething();\n'
'}on Exception catch (e){\n'
'print(e);\n'
- '}',
- 'try {\n'
+ '}', 'try {\n'
' doSomething();\n'
'} on Exception catch (e) {\n'
' print(e);\n'
- '}'
- );
+ '}');
});
test('stmt (binary/ternary ops)', () {
expectStmtFormatsTo(
- 'var a = 1 + 2 / (3 * -b);',
- 'var a = 1 + 2 / (3 * -b);'
- );
+ 'var a = 1 + 2 / (3 * -b);', 'var a = 1 + 2 / (3 * -b);');
expectStmtFormatsTo(
- 'var c = !condition == a > b;',
- 'var c = !condition == a > b;'
- );
+ 'var c = !condition == a > b;', 'var c = !condition == a > b;');
+ expectStmtFormatsTo('var d = condition ? b : object.method(a, b, c);',
+ 'var d = condition ? b : object.method(a, b, c);');
expectStmtFormatsTo(
- 'var d = condition ? b : object.method(a, b, c);',
- 'var d = condition ? b : object.method(a, b, c);'
- );
- expectStmtFormatsTo(
- 'var d = obj is! SomeType;',
- 'var d = obj is! SomeType;'
- );
+ 'var d = obj is! SomeType;', 'var d = obj is! SomeType;');
});
test('stmt (for in)', () {
- expectStmtFormatsTo(
- 'for (Foo foo in bar.foos) {\n'
- ' print(foo);\n'
- '}',
- 'for (Foo foo in bar.foos) {\n'
- ' print(foo);\n'
- '}'
- );
- expectStmtFormatsTo(
- 'for (final Foo foo in bar.foos) {\n'
- ' print(foo);\n'
- '}',
- 'for (final Foo foo in bar.foos) {\n'
- ' print(foo);\n'
- '}'
- );
- expectStmtFormatsTo(
- 'for (final foo in bar.foos) {\n'
- ' print(foo);\n'
- '}',
- 'for (final foo in bar.foos) {\n'
- ' print(foo);\n'
- '}'
- );
+ expectStmtFormatsTo('for (Foo foo in bar.foos) {\n'
+ ' print(foo);\n'
+ '}', 'for (Foo foo in bar.foos) {\n'
+ ' print(foo);\n'
+ '}');
+ expectStmtFormatsTo('for (final Foo foo in bar.foos) {\n'
+ ' print(foo);\n'
+ '}', 'for (final Foo foo in bar.foos) {\n'
+ ' print(foo);\n'
+ '}');
+ expectStmtFormatsTo('for (final foo in bar.foos) {\n'
+ ' print(foo);\n'
+ '}', 'for (final foo in bar.foos) {\n'
+ ' print(foo);\n'
+ '}');
});
test('Statement (if)', () {
- expectStmtFormatsTo('if (true) print("true!");',
- 'if (true) print("true!");');
- expectStmtFormatsTo('if (true) { print("true!"); }',
- 'if (true) {\n'
- ' print("true!");\n'
- '}');
+ expectStmtFormatsTo(
+ 'if (true) print("true!");', 'if (true) print("true!");');
+ expectStmtFormatsTo('if (true) { print("true!"); }', 'if (true) {\n'
+ ' print("true!");\n'
+ '}');
expectStmtFormatsTo('if (true) print("true!"); else print("false!");',
- 'if (true) {\n'
- ' print("true!");\n'
- '} else {\n'
- ' print("false!");\n'
- '}');
+ 'if (true) {\n'
+ ' print("true!");\n'
+ '} else {\n'
+ ' print("false!");\n'
+ '}');
expectStmtFormatsTo('if (true) print("true!"); else print("false!");',
- 'if (true) print("true!"); else print("false!");',
- transforms: false);
+ 'if (true) print("true!"); else print("false!");', transforms: false);
});
test('String - multiline - short - same line', () {
- expectCUFormatsTo(
- 'main() {\n'
- ' print("""01234567890123456789012345678901234567890123456789""");\n'
- '}\n',
- 'main() {\n'
- ' print("""01234567890123456789012345678901234567890123456789""");\n'
- '}\n'
- );
+ expectCUFormatsTo('main() {\n'
+ ' print("""01234567890123456789012345678901234567890123456789""");\n'
+ '}\n', 'main() {\n'
+ ' print("""01234567890123456789012345678901234567890123456789""");\n'
+ '}\n');
});
test('String - multiline - short - next line', () {
- expectCUFormatsTo(
- 'main() {\n'
- ' print("""\n'
- '01234567890123456789012345678901234567890123456789\n'
- '""");\n'
- '}\n',
- 'main() {\n'
- ' print("""\n'
- '01234567890123456789012345678901234567890123456789\n'
- '""");\n'
- '}\n'
- );
+ expectCUFormatsTo('main() {\n'
+ ' print("""\n'
+ '01234567890123456789012345678901234567890123456789\n'
+ '""");\n'
+ '}\n', 'main() {\n'
+ ' print("""\n'
+ '01234567890123456789012345678901234567890123456789\n'
+ '""");\n'
+ '}\n');
});
test('String - multiline - long', () {
- expectCUFormatsTo(
- 'main() {\n'
- ' print("""\n'
- '01234567890123456789012345678901234567890123456789\n'
- '01234567890123456789012345678901234567890123456789\n'
- '01234567890123456789012345678901234567890123456789\n'
- '""");\n'
- '}\n',
- 'main() {\n'
- ' print("""\n'
- '01234567890123456789012345678901234567890123456789\n'
- '01234567890123456789012345678901234567890123456789\n'
- '01234567890123456789012345678901234567890123456789\n'
- '""");\n'
- '}\n'
- );
+ expectCUFormatsTo('main() {\n'
+ ' print("""\n'
+ '01234567890123456789012345678901234567890123456789\n'
+ '01234567890123456789012345678901234567890123456789\n'
+ '01234567890123456789012345678901234567890123456789\n'
+ '""");\n'
+ '}\n', 'main() {\n'
+ ' print("""\n'
+ '01234567890123456789012345678901234567890123456789\n'
+ '01234567890123456789012345678901234567890123456789\n'
+ '01234567890123456789012345678901234567890123456789\n'
+ '""");\n'
+ '}\n');
});
// smoketest to ensure we're enforcing the 'no gratuitous linebreaks'
// opinion
test('CU (eat newlines)', () {
- expectCUFormatsTo(
- 'abstract\n'
- 'class\n'
- 'A{}',
- 'abstract class A {}\n'
- );
+ expectCUFormatsTo('abstract\n'
+ 'class\n'
+ 'A{}', 'abstract class A {}\n');
});
// test('line continuations - 1', () {
@@ -1181,8 +933,8 @@
// });
test('initialIndent', () {
- var formatter = new CodeFormatter(
- new FormatterOptions(initialIndentationLevel: 2));
+ var formatter =
+ new CodeFormatter(new FormatterOptions(initialIndentationLevel: 2));
var formattedSource =
formatter.format(CodeKind.STATEMENT, 'var x;').source;
expect(formattedSource, startsWith(' '));
@@ -1195,13 +947,10 @@
expectSelectedPostFormat('class X{int y;}', '}');
expectSelectedPostFormat('class X {}', ' {');
});
-
});
-
/// Token streams
group('token streams', () {
-
test('string tokens', () {
expectTokenizedEqual('class A{}', 'class A{ }');
expectTokenizedEqual('class A{}', 'class A{\n }\n');
@@ -1240,13 +989,10 @@
var t2 = string('foo')..setNext(eof());
expectStreamsNotEqual(t1, t2);
});
-
});
-
/// Line tests
group('line', () {
-
test('space', () {
var line = new Line(indentLevel: 0);
line.addSpaces(2);
@@ -1259,7 +1005,7 @@
});
test('initial indent (tabbed)', () {
- var line = new Line(indentLevel:1, useTabs: true);
+ var line = new Line(indentLevel: 1, useTabs: true);
expect(line.toString(), equals('\t'));
});
@@ -1279,12 +1025,10 @@
var line = new Line(indentLevel: 1);
expect(line.isWhitespace(), isTrue);
});
-
});
/// Writer tests
group('writer', () {
-
test('basic print', () {
var writer = new SourceWriter();
writer.write('foo');
@@ -1301,7 +1045,7 @@
});
test('newline trims whitespace', () {
- var writer = new SourceWriter(indentCount:2);
+ var writer = new SourceWriter(indentCount: 2);
writer.newline();
expect(writer.toString(), equals('\n'));
});
@@ -1326,27 +1070,21 @@
expect(writer.toString(), equals('\n aaa\nbbb\nccc'));
expect(writer.currentLine.toString(), equals('ccc'));
});
-
});
-
-
/// Line breaker tests
group('linebreaker', () {
-
List<Chunk> breakLine(Line line, int maxLength) =>
new SimpleLineBreaker(maxLength).breakLine(line);
String printLine(Line line, int maxLength) =>
- new SimpleLineBreaker(
- maxLength,
- (n) => new List.filled(n, ' ').join()
- ).printLine(line);
+ new SimpleLineBreaker(maxLength, (n) => new List.filled(n, ' ').join())
+ .printLine(line);
Line line(List tokens) {
var line = new Line();
- tokens.forEach((t) =>
- line.addToken(t is LineToken ? t : new LineToken(t)));
+ tokens
+ .forEach((t) => line.addToken(t is LineToken ? t : new LineToken(t)));
return line;
}
@@ -1358,19 +1096,40 @@
expect(tokens.map((token) => token.toString()), orderedEquals(texts));
}
-
final SP_1 = new SpaceToken(1, breakWeight: DEFAULT_SPACE_WEIGHT);
final SP_w1 = new SpaceToken(1, breakWeight: 1);
final SP_w2 = new SpaceToken(1, breakWeight: 2);
final SP_i = new SpaceToken(1, breakWeight: SINGLE_SPACE_WEIGHT);
// 'foo|1|bar|1|baz|1|foo|1|bar|1|baz'
- final LINE_1 = line(['foo', SP_1, 'bar', SP_1, 'baz', SP_1,
- 'foo', SP_1, 'bar', SP_1, 'baz']);
+ final LINE_1 = line([
+ 'foo',
+ SP_1,
+ 'bar',
+ SP_1,
+ 'baz',
+ SP_1,
+ 'foo',
+ SP_1,
+ 'bar',
+ SP_1,
+ 'baz'
+ ]);
// ' foo|1|bar|1|baz|1|foo|1|bar|1|baz'
- final LINE_2 = line([' foo', SP_1, 'bar', SP_1, 'baz', SP_1,
- 'foo', SP_1, 'bar', SP_1, 'baz']);
+ final LINE_2 = line([
+ ' foo',
+ SP_1,
+ 'bar',
+ SP_1,
+ 'baz',
+ SP_1,
+ 'foo',
+ SP_1,
+ 'bar',
+ SP_1,
+ 'baz'
+ ]);
test('breakLine - 0', () {
var chunks = breakLine(line([' foo']), 8);
@@ -1403,8 +1162,19 @@
});
test('breakLine - use weights - 1', () {
- var source = line(['111', SP_w2, '222', SP_w1, '333', SP_w2,
- '444', SP_w1, '555', SP_w2, '666']);
+ var source = line([
+ '111',
+ SP_w2,
+ '222',
+ SP_w1,
+ '333',
+ SP_w2,
+ '444',
+ SP_w1,
+ '555',
+ SP_w2,
+ '666'
+ ]);
var chunks = breakLine(source, 12);
expectTextsEqual(chunks, ['111 222', '333 444', '555 666']);
});
@@ -1430,34 +1200,61 @@
});
test('printLine - use weight - 1', () {
- var source = line(
- ['111111', SP_w2, '222222', SP_w1,
- '333333', SP_w2, '444444', SP_w1,
- '555555', SP_w2, '666666']);
+ var source = line([
+ '111111',
+ SP_w2,
+ '222222',
+ SP_w1,
+ '333333',
+ SP_w2,
+ '444444',
+ SP_w1,
+ '555555',
+ SP_w2,
+ '666666'
+ ]);
var result = printLine(source, 20);
expect(result, '111111 222222\n 333333 444444\n 555555 666666');
});
test('printLine - use weight - initializer - success', () {
- var source = line(
- ['111111', SP_i, '2222', SP_w1,
- '3333', SP_w1, '4444']);
+ var source = line(['111111', SP_i, '2222', SP_w1, '3333', SP_w1, '4444']);
var result = printLine(source, 20);
expect(result, '111111\n 2222 3333 4444');
});
test('printLine - use weight - initializer - rest too long', () {
- var source = line(
- ['111', SP_i, '222', SP_w1,
- '333', SP_w1, '444', SP_w1, '555', SP_w1, '666']);
+ var source = line([
+ '111',
+ SP_i,
+ '222',
+ SP_w1,
+ '333',
+ SP_w1,
+ '444',
+ SP_w1,
+ '555',
+ SP_w1,
+ '666'
+ ]);
var result = printLine(source, 15);
expect(result, '111 222\n 333\n 444\n 555\n 666');
});
test('printLine - use weight - initializer - decl/rest too long', () {
- var source = line(
- ['111', SP_i, '2222222222222', SP_w1,
- '333', SP_w1, '444', SP_w1, '555', SP_w1, '666']);
+ var source = line([
+ '111',
+ SP_i,
+ '2222222222222',
+ SP_w1,
+ '333',
+ SP_w1,
+ '444',
+ SP_w1,
+ '555',
+ SP_w1,
+ '666'
+ ]);
var result = printLine(source, 15);
expect(result, '111\n 2222222222222\n'
' 333\n 444\n 555\n 666');
@@ -1493,12 +1290,10 @@
var processed = SimpleLineBreaker.preprocess(tokens);
expectTokensEqual(processed, ['foo', ' ', 'bar', ' ']);
});
-
});
/// Helper method tests
group('helpers', () {
-
test('indentString', () {
expect(getIndentString(0), '');
expect(getIndentString(1), ' ');
@@ -1516,9 +1311,7 @@
expect(repeat('x', 1), 'x');
expect(repeat('x', 4), 'xxxx');
});
-
});
-
}
Token closeSqBracket() => new Token(TokenType.CLOSE_SQUARE_BRACKET, 0);
@@ -1554,8 +1347,8 @@
}
FormattedSource formatCU(src, {options: const FormatterOptions(), selection}) =>
- new CodeFormatter(options).format(
- CodeKind.COMPILATION_UNIT, src, selection: selection);
+ new CodeFormatter(options).format(CodeKind.COMPILATION_UNIT, src,
+ selection: selection);
String formatStatement(src, {options: const FormatterOptions()}) =>
new CodeFormatter(options).format(CodeKind.STATEMENT, src).source;
@@ -1577,44 +1370,43 @@
expectTokenizedEqual(String s1, String s2) =>
expectStreamsEqual(tokenize(s1), tokenize(s2));
-expectTokenizedNotEqual(String s1, String s2) =>
- expect(()=> expectStreamsEqual(tokenize(s1), tokenize(s2)),
+expectTokenizedNotEqual(String s1, String s2) => expect(
+ () => expectStreamsEqual(tokenize(s1), tokenize(s2)),
throwsA(new isInstanceOf<FormatterException>()));
expectStreamsEqual(Token t1, Token t2) =>
new TokenStreamComparator(null, t1, t2).verifyEquals();
-expectStreamsNotEqual(Token t1, Token t2) =>
- expect(() => new TokenStreamComparator(null, t1, t2).verifyEquals(),
+expectStreamsNotEqual(Token t1, Token t2) => expect(
+ () => new TokenStreamComparator(null, t1, t2).verifyEquals(),
throwsA(new isInstanceOf<FormatterException>()));
-expectCUFormatsTo(src, expected, {transforms: true}) =>
- expect(formatCU(src, options: new FormatterOptions(
- codeTransforms: transforms)).source, equals(expected));
+expectCUFormatsTo(src, expected, {transforms: true}) => expect(formatCU(src,
+ options: new FormatterOptions(codeTransforms: transforms)).source,
+ equals(expected));
-expectIndentFormatsTo(spacesPerIndent, tabsForIndent, src, expected) =>
- expect(
- formatCU(src, options: new FormatterOptions(
- spacesPerIndent: spacesPerIndent,
- tabsForIndent: tabsForIndent
- )).source,
- equals(expected));
+expectIndentFormatsTo(spacesPerIndent, tabsForIndent, src, expected) => expect(
+ formatCU(src,
+ options: new FormatterOptions(
+ spacesPerIndent: spacesPerIndent,
+ tabsForIndent: tabsForIndent)).source, equals(expected));
-expectStmtFormatsTo(src, expected, {transforms: true}) =>
- expect(formatStatement(src, options:
- new FormatterOptions(codeTransforms: transforms)), equals(expected));
-
+expectStmtFormatsTo(src, expected, {transforms: true}) => expect(
+ formatStatement(src,
+ options: new FormatterOptions(codeTransforms: transforms)),
+ equals(expected));
runTests(testFileName, expectClause(String input, String output)) {
var testIndex = 1;
var testFile = new File(join(TEST_DATA_DIR, testFileName));
var lines = testFile.readAsLinesSync();
for (var i = 1; i < lines.length; ++i) {
- var input = '', expectedOutput = '';
- while(!lines[i].startsWith('<<<')) {
+ var input = '',
+ expectedOutput = '';
+ while (!lines[i].startsWith('<<<')) {
input += lines[i++] + '\n';
}
- while(++i < lines.length && !lines[i].startsWith('>>>')) {
+ while (++i < lines.length && !lines[i].startsWith('>>>')) {
expectedOutput += lines[i] + '\n';
}
test('test - (${testIndex++})', () {
diff --git a/pkg/analyzer/test/services/test_utils.dart b/pkg/analyzer/test/services/test_utils.dart
index a0fb2d1..5773d4d 100644
--- a/pkg/analyzer/test/services/test_utils.dart
+++ b/pkg/analyzer/test/services/test_utils.dart
@@ -12,11 +12,9 @@
import 'package:analyzer/src/generated/source.dart';
import 'package:unittest/unittest.dart';
-
/// Parse the given [source] as a statement and assert, if provided, that
/// exactly a given set of [expectedErrorCodes] are encountered.
Statement parseStatement(String source, [List<ErrorCode> expectedErrorCodes]) {
-
var listener = new _GatheringErrorListener();
var reader = new CharSequenceReader(source);
var scanner = new Scanner(null, reader, listener);
@@ -34,7 +32,6 @@
return statement;
}
-
Set<_MapEntry> _getMapEntrySet(Map m) {
var result = new Set();
m.forEach((k, v) {
@@ -43,10 +40,8 @@
return result;
}
-
_unsupported() => throw new _UnsupportedOperationException();
-
/// Instances of the class [_GatheringErrorListener] implement an error listener
/// that collects all of the errors passed to it for later examination.
class _GatheringErrorListener implements AnalysisErrorListener {
@@ -143,21 +138,17 @@
}
}
-
void onError(AnalysisError error) {
_errors.add(error);
}
-
/// Sets the line information associated with the given source to the given
/// information.
void setLineInfo(Source source, List<int> lineStarts) {
_lineInfoMap[source] = new LineInfo(lineStarts);
}
-
}
-
class _MapEntry<K, V> {
K _key;
V _value;
@@ -167,7 +158,6 @@
}
class _TestSource extends Source {
-
TimestampedData<String> get contents => _unsupported();
AnalysisContext get context => _unsupported();
@@ -197,7 +187,6 @@
Uri resolveRelativeUri(Uri uri) => _unsupported();
}
-
class _UnsupportedOperationException implements Exception {
String toString() => 'UnsupportedOperationException';
}
diff --git a/pkg/analyzer/test/source/package_map_provider_test.dart b/pkg/analyzer/test/source/package_map_provider_test.dart
index 311a5f5..ea7987b 100644
--- a/pkg/analyzer/test/source/package_map_provider_test.dart
+++ b/pkg/analyzer/test/source/package_map_provider_test.dart
@@ -4,8 +4,6 @@
library test.package.map.provider;
-import 'dart:convert';
-
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/memory_file_system.dart';
import 'package:analyzer/source/package_map_provider.dart';
@@ -25,26 +23,21 @@
setUp(() {
resourceProvider = new MemoryResourceProvider();
- packageMapProvider =
- new PubPackageMapProvider(resourceProvider, DirectoryBasedDartSdk.defaultSdk);
+ packageMapProvider = new PubPackageMapProvider(
+ resourceProvider, DirectoryBasedDartSdk.defaultSdk);
projectFolder = resourceProvider.newFolder(projectPath);
});
PackageMapInfo parsePackageMap(Object obj) {
- return packageMapProvider.parsePackageMap(
- JSON.encode(obj),
- projectFolder);
+ return packageMapProvider.parsePackageMap(obj, projectFolder);
}
test('normal folder', () {
String packageName = 'foo';
String folderPath = '/path/to/folder';
resourceProvider.newFolder(folderPath);
- Map<String, List<Folder>> result = parsePackageMap({
- 'packages': {
- packageName: folderPath
- }
- }).packageMap;
+ Map<String, List<Folder>> result =
+ parsePackageMap({'packages': {packageName: folderPath}}).packageMap;
expect(result, hasLength(1));
expect(result.keys, contains(packageName));
expect(result[packageName], hasLength(1));
@@ -52,15 +45,16 @@
expect(result[packageName][0].path, equals(folderPath));
});
- test('ignore nonexistent folder', () {
+ test("don't ignore nonexistent folder", () {
String packageName = 'foo';
String folderPath = '/path/to/folder';
- Map<String, List<Folder>> result = parsePackageMap({
- 'packages': {
- packageName: folderPath
- }
- }).packageMap;
- expect(result, hasLength(0));
+ Map<String, List<Folder>> result =
+ parsePackageMap({'packages': {packageName: folderPath}}).packageMap;
+ expect(result, hasLength(1));
+ expect(result.keys, contains(packageName));
+ expect(result[packageName], hasLength(1));
+ expect(result[packageName][0], new isInstanceOf<Folder>());
+ expect(result[packageName][0].path, equals(folderPath));
});
test('package maps to list', () {
@@ -69,11 +63,8 @@
String folderPath2 = '/path/to/folder2';
resourceProvider.newFolder(folderPath1);
resourceProvider.newFolder(folderPath2);
- Map<String, List<Folder>> result = parsePackageMap({
- 'packages': {
- packageName: [folderPath1, folderPath2]
- }
- }).packageMap;
+ Map<String, List<Folder>> result = parsePackageMap(
+ {'packages': {packageName: [folderPath1, folderPath2]}}).packageMap;
expect(result, hasLength(1));
expect(result.keys, contains(packageName));
expect(result[packageName], hasLength(2));
@@ -88,10 +79,8 @@
String path2 = '/path/to/folder2/pubspec.lock';
resourceProvider.newFile(path1, '...');
resourceProvider.newFile(path2, '...');
- Set<String> dependencies = parsePackageMap({
- 'packages': {},
- 'input_files': [path1, path2]
- }).dependencies;
+ Set<String> dependencies = parsePackageMap(
+ {'packages': {}, 'input_files': [path1, path2]}).dependencies;
expect(dependencies, hasLength(2));
expect(dependencies, contains(path1));
expect(dependencies, contains(path2));
@@ -103,11 +92,8 @@
String packageName = 'foo';
resourceProvider.newFolder(projectPath);
resourceProvider.newFolder(packagePath);
- Map<String, List<Folder>> result = parsePackageMap({
- 'packages': {
- packageName: [relativePackagePath]
- }
- }).packageMap;
+ Map<String, List<Folder>> result = parsePackageMap(
+ {'packages': {packageName: [relativePackagePath]}}).packageMap;
expect(result[packageName][0].path, equals(packagePath));
});
diff --git a/pkg/analyzer/test/source/package_map_resolver_test.dart b/pkg/analyzer/test/source/package_map_resolver_test.dart
index cacb186..6ed6817 100644
--- a/pkg/analyzer/test/source/package_map_resolver_test.dart
+++ b/pkg/analyzer/test/source/package_map_resolver_test.dart
@@ -12,13 +12,11 @@
import '../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(_PackageMapUriResolverTest);
}
-
@reflectiveTest
class _PackageMapUriResolverTest {
static const Map EMPTY_MAP = const <String, List<Folder>>{};
@@ -59,11 +57,12 @@
const pkgFileB = '/part2/lib/libB.dart';
provider.newFile(pkgFileA, 'library lib_a');
provider.newFile(pkgFileB, 'library lib_b');
- PackageMapUriResolver resolver =
- new PackageMapUriResolver(provider, <String, List<Folder>>{
+ PackageMapUriResolver resolver = new PackageMapUriResolver(provider,
+ <String, List<Folder>>{
'pkg': [
- provider.getResource('/part1/lib/'),
- provider.getResource('/part2/lib/')]
+ provider.getResource('/part1/lib/'),
+ provider.getResource('/part2/lib/')
+ ]
});
{
Uri uri = Uri.parse('package:pkg/libA.dart');
@@ -95,8 +94,8 @@
const pkgFileB = '/pkgB/lib/libB.dart';
provider.newFile(pkgFileA, 'library lib_a;');
provider.newFile(pkgFileB, 'library lib_b;');
- PackageMapUriResolver resolver =
- new PackageMapUriResolver(provider, <String, List<Folder>>{
+ PackageMapUriResolver resolver = new PackageMapUriResolver(provider,
+ <String, List<Folder>>{
'pkgA': [provider.getResource('/pkgA/lib/')],
'pkgB': [provider.getResource('/pkgB/lib/')]
});
@@ -153,8 +152,8 @@
const pkgFileB = '/pkgB/lib/src/libB.dart';
provider.newFile(pkgFileA, 'library lib_a;');
provider.newFile(pkgFileB, 'library lib_b;');
- PackageMapUriResolver resolver =
- new PackageMapUriResolver(provider, <String, List<Folder>>{
+ PackageMapUriResolver resolver = new PackageMapUriResolver(provider,
+ <String, List<Folder>>{
'pkgA': [provider.getResource('/pkgA/lib/')],
'pkgB': [provider.getResource('/pkgB/lib/')]
});
@@ -182,11 +181,12 @@
const file2 = '/foo2/lib/bar.dart';
provider.newFile(file1, 'library bar');
provider.newFile(file2, 'library bar');
- PackageMapUriResolver resolver =
- new PackageMapUriResolver(provider, <String, List<Folder>>{
+ PackageMapUriResolver resolver = new PackageMapUriResolver(provider,
+ <String, List<Folder>>{
'foo': [
- provider.getResource('/foo1/lib'),
- provider.getResource('/foo2/lib')]
+ provider.getResource('/foo1/lib'),
+ provider.getResource('/foo2/lib')
+ ]
});
// Restoring file1 should yield a package URI, and that package URI should
// resolve back to file1.
@@ -200,6 +200,34 @@
expect(resolver.restoreAbsolute(source2), isNull);
}
+ void test_restoreLongestMatch() {
+ const file1 = '/foo1/bar1/lib.dart';
+ const file2 = '/foo2/bar2/lib.dart';
+ provider.newFile(file1, 'library lib');
+ provider.newFile(file2, 'library lib');
+ PackageMapUriResolver resolver = new PackageMapUriResolver(provider,
+ <String, List<Folder>>{
+ 'pkg1': [
+ provider.getResource('/foo1'),
+ provider.getResource('/foo2/bar2')
+ ],
+ 'pkg2': [
+ provider.getResource('/foo1/bar1'),
+ provider.getResource('/foo2')
+ ]
+ });
+ // Restoring file1 should yield a package URI for pkg2, since pkg2's match
+ // for the file path (/foo1/bar1) is longer than pkg1's match (/foo1).
+ Source source1 = _createFileSource(file1);
+ Uri uri1 = resolver.restoreAbsolute(source1);
+ expect(uri1.toString(), 'package:pkg2/lib.dart');
+ // Restoring file2 should yield a package URI for pkg1, since pkg1's match
+ // for the file path (/foo2/bar2) is longer than pkg2's match (/foo2).
+ Source source2 = _createFileSource(file2);
+ Uri uri2 = resolver.restoreAbsolute(source2);
+ expect(uri2.toString(), 'package:pkg1/lib.dart');
+ }
+
Source _createFileSource(String path) {
return new NonExistingSource(path, UriKind.FILE_URI);
}
diff --git a/pkg/analyzer/test/source/test_all.dart b/pkg/analyzer/test/source/test_all.dart
index 0f6ef62..d2de433 100644
--- a/pkg/analyzer/test/source/test_all.dart
+++ b/pkg/analyzer/test/source/test_all.dart
@@ -9,7 +9,6 @@
import 'package_map_provider_test.dart' as package_map_provider_test;
import 'package_map_resolver_test.dart' as package_map_resolver_test;
-
/// Utility for manually running all tests.
main() {
groupSep = ' | ';
diff --git a/pkg/analyzer/test/src/context/cache_test.dart b/pkg/analyzer/test/src/context/cache_test.dart
new file mode 100644
index 0000000..b5ff24a
--- /dev/null
+++ b/pkg/analyzer/test/src/context/cache_test.dart
@@ -0,0 +1,436 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.src.task.driver_test;
+
+import 'package:analyzer/src/context/cache.dart';
+import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/engine.dart'
+ show AnalysisContext, CacheState, RetentionPriority;
+import 'package:analyzer/src/generated/java_engine.dart';
+import 'package:analyzer/src/generated/sdk_io.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/utilities_collection.dart';
+import 'package:analyzer/task/model.dart';
+import 'package:unittest/unittest.dart';
+
+import '../../generated/engine_test.dart';
+import '../../generated/test_support.dart';
+import '../../reflective_tests.dart';
+
+main() {
+ groupSep = ' | ';
+ runReflectiveTests(AnalysisCacheTest);
+ runReflectiveTests(CacheEntryTest);
+ runReflectiveTests(SdkCachePartitionTest);
+ runReflectiveTests(UniversalCachePartitionTest);
+ runReflectiveTests(ResultDataTest);
+}
+
+@reflectiveTest
+class AnalysisCacheTest extends EngineTestCase {
+ AnalysisCache createCache({AnalysisContext context,
+ RetentionPriority policy: RetentionPriority.LOW}) {
+ CachePartition partition = new UniversalCachePartition(
+ context, 8, new TestCacheRetentionPolicy(policy));
+ return new AnalysisCache(<CachePartition>[partition]);
+ }
+
+ void test_astSize_empty() {
+ AnalysisCache cache = createCache();
+ expect(cache.astSize, 0);
+ }
+
+ void test_astSize_nonEmpty() {
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ AstNode node = new NullLiteral(null);
+ AnalysisCache cache = createCache();
+ AnalysisTarget target1 = new TestSource('/test1.dart');
+ CacheEntry entry1 = new CacheEntry();
+ entry1.setValue(result, node);
+ AnalysisTarget target2 = new TestSource('/test2.dart');
+ CacheEntry entry2 = new CacheEntry();
+ entry2.setValue(result, node);
+ cache.put(target1, entry1);
+ cache.accessedAst(target1);
+ cache.put(target2, entry2);
+ cache.accessedAst(target2);
+ expect(cache.astSize, 2);
+ }
+
+ void test_creation() {
+ expect(createCache(), isNotNull);
+ }
+
+ void test_get() {
+ AnalysisCache cache = createCache();
+ AnalysisTarget target = new TestSource();
+ expect(cache.get(target), isNull);
+ }
+
+ void test_getContextFor() {
+ AnalysisContext context = new TestAnalysisContext();
+ AnalysisCache cache = createCache(context: context);
+ AnalysisTarget target = new TestSource();
+ expect(cache.getContextFor(target), context);
+ }
+
+ void test_iterator() {
+ AnalysisCache cache = createCache();
+ AnalysisTarget target = new TestSource();
+ CacheEntry entry = new CacheEntry();
+ cache.put(target, entry);
+ MapIterator<AnalysisTarget, CacheEntry> iterator = cache.iterator();
+ expect(iterator.moveNext(), isTrue);
+ expect(iterator.key, same(target));
+ expect(iterator.value, same(entry));
+ expect(iterator.moveNext(), isFalse);
+ }
+
+ void test_put() {
+ AnalysisCache cache = createCache();
+ AnalysisTarget target = new TestSource();
+ CacheEntry entry = new CacheEntry();
+ expect(cache.get(target), isNull);
+ cache.put(target, entry);
+ expect(cache.get(target), entry);
+ }
+
+ void test_remove() {
+ AnalysisCache cache = createCache();
+ AnalysisTarget target = new TestSource();
+ cache.remove(target);
+ }
+
+ void test_setMaxCacheSize() {
+ CachePartition partition = new UniversalCachePartition(
+ null, 8, new TestCacheRetentionPolicy(RetentionPriority.MEDIUM));
+ AnalysisCache cache = new AnalysisCache(<CachePartition>[partition]);
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ AstNode node = new NullLiteral(null);
+ int size = 6;
+ for (int i = 0; i < size; i++) {
+ AnalysisTarget target = new TestSource("/test$i.dart");
+ CacheEntry entry = new CacheEntry();
+ entry.setValue(result, node);
+ cache.put(target, entry);
+ cache.accessedAst(target);
+ }
+
+ void _assertNonFlushedCount(int expectedCount, AnalysisCache cache) {
+ int nonFlushedCount = 0;
+ MapIterator<AnalysisTarget, CacheEntry> iterator = cache.iterator();
+ while (iterator.moveNext()) {
+ if (iterator.value.getState(result) != CacheState.FLUSHED) {
+ nonFlushedCount++;
+ }
+ }
+ expect(nonFlushedCount, expectedCount);
+ }
+
+ _assertNonFlushedCount(size, cache);
+ int newSize = size - 2;
+ partition.maxCacheSize = newSize;
+ _assertNonFlushedCount(newSize, cache);
+ }
+
+ void test_size() {
+ AnalysisCache cache = createCache();
+ int size = 4;
+ for (int i = 0; i < size; i++) {
+ AnalysisTarget target = new TestSource("/test$i.dart");
+ cache.put(target, new CacheEntry());
+ }
+ expect(cache.size(), size);
+ }
+}
+
+@reflectiveTest
+class CacheEntryTest extends EngineTestCase {
+ test_explicitlyAdded() {
+ CacheEntry entry = new CacheEntry();
+ expect(entry.explicitlyAdded, false);
+ entry.explicitlyAdded = true;
+ expect(entry.explicitlyAdded, true);
+ }
+
+ test_fixExceptionState_error_exception() {
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CaughtException exception = new CaughtException(null, null);
+ CacheEntry entry = new CacheEntry();
+ entry.setState(result, CacheState.ERROR);
+ entry.exception = exception;
+ entry.fixExceptionState();
+ expect(entry.getState(result), CacheState.ERROR);
+ expect(entry.exception, exception);
+ }
+
+ test_fixExceptionState_error_noException() {
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CacheEntry entry = new CacheEntry();
+ entry.setState(result, CacheState.ERROR);
+ entry.fixExceptionState();
+ expect(entry.getState(result), CacheState.ERROR);
+ expect(entry.exception, isNotNull);
+ }
+
+ test_fixExceptionState_noError_exception() {
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CacheEntry entry = new CacheEntry();
+ entry.exception = new CaughtException(null, null);
+ entry.fixExceptionState();
+ expect(entry.getState(result), CacheState.INVALID);
+ expect(entry.exception, isNull);
+ }
+
+ test_fixExceptionState_noError_noException() {
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CacheEntry entry = new CacheEntry();
+ entry.fixExceptionState();
+ expect(entry.getState(result), CacheState.INVALID);
+ expect(entry.exception, isNull);
+ }
+
+ test_flushAstStructures() {
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CacheEntry entry = new CacheEntry();
+ entry.setValue(result, new NullLiteral(null));
+ expect(entry.hasAstStructure, true);
+ entry.flushAstStructures();
+ expect(entry.hasAstStructure, false);
+ }
+
+ test_getState() {
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CacheEntry entry = new CacheEntry();
+ expect(entry.getState(result), CacheState.INVALID);
+ }
+
+ test_getValue() {
+ String defaultValue = 'value';
+ ResultDescriptor result = new ResultDescriptor('test', defaultValue);
+ CacheEntry entry = new CacheEntry();
+ expect(entry.getValue(result), defaultValue);
+ }
+
+ test_hasAstStructure_false() {
+ CacheEntry entry = new CacheEntry();
+ expect(entry.hasAstStructure, false);
+ }
+
+ test_hasAstStructure_true() {
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CacheEntry entry = new CacheEntry();
+ entry.setValue(result, new NullLiteral(null));
+ expect(entry.hasAstStructure, true);
+ }
+
+ test_hasErrorState_false() {
+ CacheEntry entry = new CacheEntry();
+ expect(entry.hasErrorState(), false);
+ }
+
+ test_hasErrorState_true() {
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CacheEntry entry = new CacheEntry();
+ entry.setState(result, CacheState.ERROR);
+ expect(entry.hasErrorState(), true);
+ }
+
+ test_invalidateAllInformation() {
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CacheEntry entry = new CacheEntry();
+ entry.setValue(result, 'value');
+ entry.invalidateAllInformation();
+ expect(entry.getState(result), CacheState.INVALID);
+ expect(entry.getValue(result), isNull);
+ }
+
+ test_setState_error() {
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CacheEntry entry = new CacheEntry();
+ entry.setState(result, CacheState.ERROR);
+ expect(entry.getState(result), CacheState.ERROR);
+ expect(entry.getValue(result), isNull);
+ }
+
+ test_setState_invalid() {
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CacheEntry entry = new CacheEntry();
+ entry.setState(result, CacheState.INVALID);
+ expect(entry.getState(result), CacheState.INVALID);
+ expect(entry.getValue(result), isNull);
+ }
+
+ test_setState_valid() {
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CacheEntry entry = new CacheEntry();
+ expect(() => entry.setState(result, CacheState.VALID), throwsArgumentError);
+ }
+
+ test_setValue() {
+ String value = 'value';
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CacheEntry entry = new CacheEntry();
+ entry.setValue(result, value);
+ expect(entry.getState(result), CacheState.VALID);
+ expect(entry.getValue(result), value);
+ }
+
+ test_toString_empty() {
+ CacheEntry entry = new CacheEntry();
+ expect(entry.toString(), isNotNull);
+ }
+
+ test_toString_nonEmpty() {
+ String value = 'value';
+ ResultDescriptor result = new ResultDescriptor('test', null);
+ CacheEntry entry = new CacheEntry();
+ entry.setValue(result, value);
+ expect(entry.toString(), isNotNull);
+ }
+}
+
+abstract class CachePartitionTest extends EngineTestCase {
+ CachePartition createPartition([CacheRetentionPolicy policy = null]);
+
+ void test_creation() {
+ expect(createPartition(), isNotNull);
+ }
+
+ void test_entrySet() {
+ CachePartition partition = createPartition();
+ AnalysisTarget target = new TestSource();
+ CacheEntry entry = new CacheEntry();
+ partition.put(target, entry);
+ Map<AnalysisTarget, CacheEntry> entryMap = partition.map;
+ expect(entryMap, hasLength(1));
+ AnalysisTarget entryKey = entryMap.keys.first;
+ expect(entryKey, target);
+ expect(entryMap[entryKey], entry);
+ }
+
+ void test_get() {
+ CachePartition partition = createPartition();
+ AnalysisTarget target = new TestSource();
+ expect(partition.get(target), isNull);
+ }
+
+ void test_put_noFlush() {
+ CachePartition partition = createPartition();
+ AnalysisTarget target = new TestSource();
+ CacheEntry entry = new CacheEntry();
+ partition.put(target, entry);
+ expect(partition.get(target), entry);
+ }
+
+ void test_remove() {
+ CachePartition partition = createPartition();
+ AnalysisTarget target = new TestSource();
+ CacheEntry entry = new CacheEntry();
+ partition.put(target, entry);
+ expect(partition.get(target), entry);
+ partition.remove(target);
+ expect(partition.get(target), isNull);
+ }
+
+ void test_setMaxCacheSize() {
+ CachePartition partition =
+ createPartition(new TestCacheRetentionPolicy(RetentionPriority.LOW));
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ NullLiteral node = new NullLiteral(null);
+ int size = 6; // Must be <= partition.maxCacheSize
+ for (int i = 0; i < size; i++) {
+ AnalysisTarget target = new TestSource("/test$i.dart");
+ CacheEntry entry = new CacheEntry();
+ entry.setValue(result, node);
+ partition.put(target, entry);
+ partition.accessedAst(target);
+ }
+
+ void assertNonFlushedCount(int expectedCount, CachePartition partition) {
+ int nonFlushedCount = 0;
+ Map<AnalysisTarget, CacheEntry> entryMap = partition.map;
+ entryMap.values.forEach((CacheEntry entry) {
+ if (entry.getState(result) != CacheState.FLUSHED) {
+ nonFlushedCount++;
+ }
+ });
+ expect(nonFlushedCount, expectedCount);
+ }
+
+ assertNonFlushedCount(size, partition);
+ int newSize = size - 2;
+ partition.maxCacheSize = newSize;
+ assertNonFlushedCount(newSize, partition);
+ }
+
+ void test_size() {
+ CachePartition partition = createPartition();
+ int size = 4;
+ for (int i = 0; i < size; i++) {
+ AnalysisTarget target = new TestSource("/test$i.dart");
+ partition.put(target, new CacheEntry());
+ partition.accessedAst(target);
+ }
+ expect(partition.size(), size);
+ }
+}
+
+@reflectiveTest
+class ResultDataTest extends EngineTestCase {
+ test_creation() {
+ String value = 'value';
+ ResultData data = new ResultData(new ResultDescriptor('test', value));
+ expect(data, isNotNull);
+ expect(data.state, CacheState.INVALID);
+ expect(data.value, value);
+ }
+}
+
+@reflectiveTest
+class SdkCachePartitionTest extends CachePartitionTest {
+ CachePartition createPartition([CacheRetentionPolicy policy = null]) {
+ return new SdkCachePartition(null, 8);
+ }
+
+ void test_contains_false() {
+ CachePartition partition = createPartition();
+ AnalysisTarget target = new TestSource();
+ expect(partition.contains(target), isFalse);
+ }
+
+ void test_contains_true() {
+ SdkCachePartition partition = new SdkCachePartition(null, 8);
+ SourceFactory factory = new SourceFactory(
+ [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
+ AnalysisTarget target = factory.forUri("dart:core");
+ expect(partition.contains(target), isTrue);
+ }
+}
+
+@reflectiveTest
+class TestCacheRetentionPolicy extends CacheRetentionPolicy {
+ final RetentionPriority policy;
+
+ TestCacheRetentionPolicy([this.policy = RetentionPriority.MEDIUM]);
+
+ @override
+ RetentionPriority getAstPriority(AnalysisTarget target, CacheEntry entry) =>
+ policy;
+}
+
+@reflectiveTest
+class UniversalCachePartitionTest extends CachePartitionTest {
+ CachePartition createPartition([CacheRetentionPolicy policy = null]) {
+ return new UniversalCachePartition(null, 8, policy);
+ }
+
+ void test_contains() {
+ UniversalCachePartition partition =
+ new UniversalCachePartition(null, 8, null);
+ TestSource source = new TestSource();
+ expect(partition.contains(source), isTrue);
+ }
+}
diff --git a/pkg/analyzer/test/src/context/test_all.dart b/pkg/analyzer/test/src/context/test_all.dart
new file mode 100644
index 0000000..8b733b0
--- /dev/null
+++ b/pkg/analyzer/test/src/context/test_all.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.src.context.test_all;
+
+import 'package:unittest/unittest.dart';
+
+import 'cache_test.dart' as cache_test;
+
+/// Utility for manually running all tests.
+main() {
+ groupSep = ' | ';
+ group('task tests', () {
+ cache_test.main();
+ });
+}
diff --git a/pkg/analyzer/test/src/task/dart_test.dart b/pkg/analyzer/test/src/task/dart_test.dart
index 95a8fe5..7f34808 100644
--- a/pkg/analyzer/test/src/task/dart_test.dart
+++ b/pkg/analyzer/test/src/task/dart_test.dart
@@ -4,8 +4,8 @@
library test.src.task.dart_test;
-import 'package:analyzer/src/generated/engine.dart' hide AnalysisTask,
- ParseDartTask, ScanDartTask;
+import 'package:analyzer/src/generated/engine.dart'
+ hide AnalysisTask, ParseDartTask, ScanDartTask;
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/task/dart.dart';
import 'package:analyzer/task/dart.dart';
@@ -32,8 +32,7 @@
BuildCompilationUnitElementTask.buildInputs(target);
expect(inputs, isNotNull);
expect(inputs, hasLength(1));
- expect(
- inputs[BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME],
+ expect(inputs[BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME],
isNotNull);
}
@@ -89,9 +88,7 @@
AnalysisTarget target = new TestSource();
ScanDartTask scanTask = new ScanDartTask(context, target);
- scanTask.inputs = {
- ScanDartTask.CONTENT_INPUT_NAME: content
- };
+ scanTask.inputs = {ScanDartTask.CONTENT_INPUT_NAME: content};
scanTask.perform();
Map<ResultDescriptor, dynamic> scanOutputs = scanTask.outputs;
@@ -215,9 +212,7 @@
AnalysisTarget target = new TestSource();
ScanDartTask scanTask = new ScanDartTask(context, target);
- scanTask.inputs = {
- ScanDartTask.CONTENT_INPUT_NAME: content
- };
+ scanTask.inputs = {ScanDartTask.CONTENT_INPUT_NAME: content};
scanTask.perform();
Map<ResultDescriptor, dynamic> scanOutputs = scanTask.outputs;
@@ -297,9 +292,7 @@
AnalysisTarget target = new TestSource();
ScanDartTask scanTask = new ScanDartTask(context, target);
- scanTask.inputs = {
- ScanDartTask.CONTENT_INPUT_NAME: content
- };
+ scanTask.inputs = {ScanDartTask.CONTENT_INPUT_NAME: content};
scanTask.perform();
return scanTask;
}
diff --git a/pkg/analyzer/test/src/task/driver_test.dart b/pkg/analyzer/test/src/task/driver_test.dart
new file mode 100644
index 0000000..9a7afd9
--- /dev/null
+++ b/pkg/analyzer/test/src/task/driver_test.dart
@@ -0,0 +1,787 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.src.task.driver_test;
+
+import 'dart:async';
+import 'dart:collection';
+
+import 'package:analyzer/src/cancelable_future.dart';
+import 'package:analyzer/src/context/cache.dart';
+import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/constant.dart';
+import 'package:analyzer/src/generated/element.dart';
+import 'package:analyzer/src/generated/engine.dart' hide AnalysisTask;
+import 'package:analyzer/src/generated/error.dart';
+import 'package:analyzer/src/generated/html.dart';
+import 'package:analyzer/src/generated/java_engine.dart';
+import 'package:analyzer/src/generated/resolver.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/task/driver.dart';
+import 'package:analyzer/src/task/manager.dart';
+import 'package:analyzer/task/model.dart';
+import 'package:unittest/unittest.dart';
+
+import '../../generated/resolver_test.dart';
+import '../../generated/test_support.dart';
+import '../../reflective_tests.dart';
+import 'test_support.dart';
+
+main() {
+ groupSep = ' | ';
+ runReflectiveTests(AnalysisDriverTest);
+ runReflectiveTests(WorkOrderTest);
+ runReflectiveTests(WorkItemTest);
+}
+
+@reflectiveTest
+class AnalysisDriverTest extends EngineTestCase {
+ TaskManager manager;
+ _TestContext context;
+ AnalysisDriver driver;
+
+ void setUp() {
+ manager = new TaskManager();
+ context = new _TestContext();
+ driver = new AnalysisDriver(manager, context);
+ }
+
+ test_computeResult() {
+ AnalysisTarget target = new TestSource();
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ TestAnalysisTask task;
+ TaskDescriptor descriptor = new TaskDescriptor(
+ 'task', (context, target) => task, (target) => {}, [result]);
+ task = new TestAnalysisTask(context, target, descriptor: descriptor);
+ manager.addTaskDescriptor(descriptor);
+
+ driver.computeResult(target, result);
+ expect(context.getCacheEntry(target).getValue(result), 1);
+ }
+
+ test_create() {
+ expect(driver, isNotNull);
+ expect(driver.context, context);
+ expect(driver.currentWorkOrder, isNull);
+ expect(driver.taskManager, manager);
+ }
+
+ test_createNextWorkOrder_complete() {
+ AnalysisTarget priorityTarget = new TestSource();
+ AnalysisTarget normalTarget = new TestSource();
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ TaskDescriptor descriptor = new TaskDescriptor('task',
+ (context, target) => new TestAnalysisTask(context, target),
+ (target) => {}, [result]);
+ manager.addGeneralResult(result);
+ manager.addTaskDescriptor(descriptor);
+ context.priorityTargets.add(priorityTarget);
+ context.getCacheEntry(priorityTarget).setValue(result, '');
+ context.explicitTargets.add(normalTarget);
+ context.getCacheEntry(priorityTarget).setValue(result, '');
+
+ expect(driver.createNextWorkOrder(), isNull);
+ }
+
+ test_createNextWorkOrder_normalTarget() {
+ AnalysisTarget priorityTarget = new TestSource();
+ AnalysisTarget normalTarget = new TestSource();
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ TaskDescriptor descriptor = new TaskDescriptor('task',
+ (context, target) => new TestAnalysisTask(context, target),
+ (target) => {}, [result]);
+ manager.addGeneralResult(result);
+ manager.addTaskDescriptor(descriptor);
+ context.priorityTargets.add(priorityTarget);
+ context.getCacheEntry(priorityTarget).setValue(result, '');
+ context.explicitTargets.add(normalTarget);
+ context.getCacheEntry(normalTarget).setState(result, CacheState.INVALID);
+
+ WorkOrder workOrder = driver.createNextWorkOrder();
+ expect(workOrder, isNotNull);
+ expect(workOrder.moveNext(), true);
+ expect(workOrder.currentItem.target, normalTarget);
+ }
+
+ test_createNextWorkOrder_noTargets() {
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ TaskDescriptor descriptor = new TaskDescriptor('task',
+ (context, target) => new TestAnalysisTask(context, target),
+ (target) => {}, [result]);
+ manager.addGeneralResult(result);
+ manager.addTaskDescriptor(descriptor);
+
+ expect(driver.createNextWorkOrder(), isNull);
+ }
+
+ test_createNextWorkOrder_priorityTarget() {
+ AnalysisTarget priorityTarget = new TestSource();
+ AnalysisTarget normalTarget = new TestSource();
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ TaskDescriptor descriptor = new TaskDescriptor('task',
+ (context, target) => new TestAnalysisTask(context, target),
+ (target) => {}, [result]);
+ manager.addGeneralResult(result);
+ manager.addTaskDescriptor(descriptor);
+ context.priorityTargets.add(priorityTarget);
+ context.getCacheEntry(priorityTarget).setState(result, CacheState.INVALID);
+ context.explicitTargets.add(normalTarget);
+ context.getCacheEntry(normalTarget).setState(result, CacheState.INVALID);
+
+ WorkOrder workOrder = driver.createNextWorkOrder();
+ expect(workOrder, isNotNull);
+ expect(workOrder.moveNext(), true);
+ expect(workOrder.currentItem.target, priorityTarget);
+ }
+
+ test_createWorkOrderForResult_error() {
+ AnalysisTarget target = new TestSource();
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ context.getCacheEntry(target).setState(result, CacheState.ERROR);
+
+ expect(driver.createWorkOrderForResult(target, result), isNull);
+ }
+
+ test_createWorkOrderForResult_inProcess() {
+ AnalysisTarget target = new TestSource();
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ context.getCacheEntry(target).setState(result, CacheState.IN_PROCESS);
+
+ expect(driver.createWorkOrderForResult(target, result), isNull);
+ }
+
+ test_createWorkOrderForResult_invalid() {
+ AnalysisTarget target = new TestSource();
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ TaskDescriptor descriptor = new TaskDescriptor('task',
+ (context, target) => new TestAnalysisTask(context, target),
+ (target) => {}, [result]);
+ manager.addTaskDescriptor(descriptor);
+ context.getCacheEntry(target).setState(result, CacheState.INVALID);
+
+ WorkOrder workOrder = driver.createWorkOrderForResult(target, result);
+ expect(workOrder, isNotNull);
+ }
+
+ test_createWorkOrderForResult_valid() {
+ AnalysisTarget target = new TestSource();
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ context.getCacheEntry(target).setValue(result, '');
+
+ expect(driver.createWorkOrderForResult(target, result), isNull);
+ }
+
+ test_createWorkOrderForTarget_complete_generalTarget_generalResult() {
+ _createWorkOrderForTarget(true, false, false);
+ }
+
+ test_createWorkOrderForTarget_complete_generalTarget_priorityResult() {
+ _createWorkOrderForTarget(true, false, true);
+ }
+
+ test_createWorkOrderForTarget_complete_priorityTarget_generalResult() {
+ _createWorkOrderForTarget(true, true, false);
+ }
+
+ test_createWorkOrderForTarget_complete_priorityTarget_priorityResult() {
+ _createWorkOrderForTarget(true, true, true);
+ }
+
+ test_createWorkOrderForTarget_incomplete_generalTarget_generalResult() {
+ _createWorkOrderForTarget(false, false, false);
+ }
+
+ test_createWorkOrderForTarget_incomplete_generalTarget_priorityResult() {
+ _createWorkOrderForTarget(false, false, true);
+ }
+
+ test_createWorkOrderForTarget_incomplete_priorityTarget_generalResult() {
+ _createWorkOrderForTarget(false, true, false);
+ }
+
+ test_createWorkOrderForTarget_incomplete_priorityTarget_priorityResult() {
+ _createWorkOrderForTarget(false, true, true);
+ }
+
+ test_performAnalysisTask() {
+ AnalysisTarget target = new TestSource();
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ TestAnalysisTask task;
+ TaskDescriptor descriptor = new TaskDescriptor(
+ 'task', (context, target) => task, (target) => {}, [result]);
+ task = new TestAnalysisTask(context, target, descriptor: descriptor);
+ manager.addTaskDescriptor(descriptor);
+ manager.addGeneralResult(result);
+ context.priorityTargets.add(target);
+
+ expect(driver.performAnalysisTask(), true);
+ expect(driver.performAnalysisTask(), true);
+ expect(driver.performAnalysisTask(), false);
+ }
+
+ test_performWorkItem_exceptionInTask() {
+ AnalysisTarget target = new TestSource();
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ CaughtException exception =
+ new CaughtException(new AnalysisException(), null);
+ TestAnalysisTask task;
+ TaskDescriptor descriptor = new TaskDescriptor(
+ 'task', (context, target) => task, (target) => {}, [result]);
+ task = new TestAnalysisTask(context, target,
+ descriptor: descriptor, exception: exception);
+ WorkItem item = new WorkItem(context, target, descriptor);
+
+ driver.performWorkItem(item);
+ CacheEntry targetEntry = context.getCacheEntry(item.target);
+ expect(targetEntry.exception, exception);
+ expect(targetEntry.getState(result), CacheState.ERROR);
+ }
+
+ test_performWorkItem_noException() {
+ AnalysisTarget target = new TestSource();
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ TestAnalysisTask task;
+ TaskDescriptor descriptor = new TaskDescriptor(
+ 'task', (context, target) => task, (target) => {}, [result]);
+ task = new TestAnalysisTask(context, target, descriptor: descriptor);
+ WorkItem item = new WorkItem(context, target, descriptor);
+
+ driver.performWorkItem(item);
+ CacheEntry targetEntry = context.getCacheEntry(item.target);
+ expect(targetEntry.exception, isNull);
+ expect(targetEntry.getState(result), CacheState.VALID);
+ }
+
+ test_performWorkItem_preExistingException() {
+ AnalysisTarget target = new TestSource();
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ TaskDescriptor descriptor = new TaskDescriptor('task',
+ (context, target) => new TestAnalysisTask(context, target),
+ (target) => {}, [result]);
+ CaughtException exception =
+ new CaughtException(new AnalysisException(), null);
+ WorkItem item = new WorkItem(context, target, descriptor);
+ item.exception = exception;
+
+ driver.performWorkItem(item);
+ CacheEntry targetEntry = context.getCacheEntry(item.target);
+ expect(targetEntry.exception, exception);
+ expect(targetEntry.getState(result), CacheState.ERROR);
+ }
+
+ test_reset() {
+ ResultDescriptor inputResult = new ResultDescriptor('input', null);
+ TaskDescriptor descriptor = new TaskDescriptor('task',
+ (context, target) => new TestAnalysisTask(context, target),
+ (target) => {'one': inputResult.inputFor(target)}, [
+ new ResultDescriptor('output', null)
+ ]);
+ driver.currentWorkOrder =
+ new WorkOrder(manager, new WorkItem(null, null, descriptor));
+
+ driver.reset();
+ expect(driver.currentWorkOrder, isNull);
+ }
+
+ /**
+ * [complete] is `true` if the value of the result has already been computed.
+ * [priorityTarget] is `true` if the target is in the list of priority
+ * targets.
+ * [priorityResult] is `true` if the result should only be computed for
+ * priority targets.
+ */
+ _createWorkOrderForTarget(
+ bool complete, bool priorityTarget, bool priorityResult) {
+ AnalysisTarget target = new TestSource();
+ ResultDescriptor result = new ResultDescriptor('result', null);
+ TaskDescriptor descriptor = new TaskDescriptor('task',
+ (context, target) => new TestAnalysisTask(context, target),
+ (target) => {}, [result]);
+ if (priorityResult) {
+ manager.addPriorityResult(result);
+ } else {
+ manager.addGeneralResult(result);
+ }
+ manager.addTaskDescriptor(descriptor);
+ if (priorityTarget) {
+ context.priorityTargets.add(target);
+ } else {
+ context.explicitTargets.add(target);
+ }
+ if (complete) {
+ context.getCacheEntry(target).setValue(result, '');
+ } else {
+ context.getCacheEntry(target).setState(result, CacheState.INVALID);
+ }
+
+ WorkOrder workOrder =
+ driver.createWorkOrderForTarget(target, priorityTarget);
+ if (complete) {
+ expect(workOrder, isNull);
+ } else if (priorityResult) {
+ expect(workOrder, priorityTarget ? isNotNull : isNull);
+ } else {
+ expect(workOrder, isNotNull);
+ }
+ }
+}
+
+@reflectiveTest
+class WorkItemTest extends EngineTestCase {
+ test_buildTask_complete() {
+ AnalysisContext context = new _TestContext();
+ AnalysisTarget target = new TestSource();
+ TaskDescriptor descriptor = new TaskDescriptor('task',
+ (context, target) => new TestAnalysisTask(context, target),
+ (target) => {}, [new ResultDescriptor('output', null)]);
+ WorkItem item = new WorkItem(context, target, descriptor);
+ AnalysisTask task = item.buildTask();
+ expect(task, isNotNull);
+ }
+
+ test_buildTask_incomplete() {
+ AnalysisContext context = new _TestContext();
+ AnalysisTarget target = new TestSource();
+ ResultDescriptor inputResult = new ResultDescriptor('input', null);
+ List<ResultDescriptor> outputResults = <ResultDescriptor>[
+ new ResultDescriptor('output', null)
+ ];
+ TaskDescriptor descriptor = new TaskDescriptor('task', (context, target) =>
+ new TestAnalysisTask(context, target, results: outputResults),
+ (target) => {'one': inputResult.inputFor(target)}, outputResults);
+ WorkItem item = new WorkItem(context, target, descriptor);
+ expect(() => item.buildTask(), throwsStateError);
+ }
+
+ test_create() {
+ AnalysisContext context = new _TestContext();
+ AnalysisTarget target = new TestSource();
+ TaskDescriptor descriptor = new TaskDescriptor(
+ 'task', null, (target) => {}, [new ResultDescriptor('result', null)]);
+ WorkItem item = new WorkItem(context, target, descriptor);
+ expect(item, isNotNull);
+ expect(item.context, context);
+ expect(item.descriptor, descriptor);
+ expect(item.target, target);
+ }
+
+ test_gatherInputs_complete() {
+ TaskManager manager = new TaskManager();
+ AnalysisContext context = new _TestContext();
+ AnalysisTarget target = new TestSource();
+ TaskDescriptor descriptor = new TaskDescriptor('task',
+ (context, target) => new TestAnalysisTask(context, target),
+ (target) => {}, [new ResultDescriptor('output', null)]);
+ WorkItem item = new WorkItem(context, target, descriptor);
+ WorkItem result = item.gatherInputs(manager);
+ expect(result, isNull);
+ expect(item.exception, isNull);
+ }
+
+ test_gatherInputs_incomplete() {
+ TaskManager manager = new TaskManager();
+ AnalysisContext context = new _TestContext();
+ AnalysisTarget target = new TestSource();
+ ResultDescriptor resultA = new ResultDescriptor('resultA', null);
+ ResultDescriptor resultB = new ResultDescriptor('resultB', null);
+ TaskDescriptor task1 = new TaskDescriptor('task', (context, target) =>
+ new TestAnalysisTask(context, target, results: [resultA]),
+ (target) => {}, [resultA]);
+ TaskDescriptor task2 = new TaskDescriptor('task',
+ (context, target) => new TestAnalysisTask(context, target),
+ (target) => {'one': resultA.inputFor(target)}, [resultB]);
+ manager.addTaskDescriptor(task1);
+ manager.addTaskDescriptor(task2);
+ WorkItem item = new WorkItem(context, target, task2);
+ expect(item.gatherInputs(manager), isNotNull);
+ }
+
+ test_gatherInputs_invalid() {
+ TaskManager manager = new TaskManager();
+ AnalysisContext context = new _TestContext();
+ AnalysisTarget target = new TestSource();
+ ResultDescriptor inputResult = new ResultDescriptor('input', null);
+ TaskDescriptor descriptor = new TaskDescriptor('task',
+ (context, target) => new TestAnalysisTask(context, target),
+ (target) => {'one': inputResult.inputFor(target)}, [
+ new ResultDescriptor('output', null)
+ ]);
+ WorkItem item = new WorkItem(context, target, descriptor);
+ WorkItem result = item.gatherInputs(manager);
+ expect(result, isNull);
+ expect(item.exception, isNotNull);
+ }
+}
+
+@reflectiveTest
+class WorkOrderTest extends EngineTestCase {
+ test_create() {
+ TaskManager manager = new TaskManager();
+ TaskDescriptor descriptor = new TaskDescriptor(
+ 'task', null, (_) => {}, [new ResultDescriptor('result', null)]);
+ WorkOrder order =
+ new WorkOrder(manager, new WorkItem(null, null, descriptor));
+ expect(order, isNotNull);
+ expect(order.currentItem, isNull);
+ expect(order.pendingItems, hasLength(1));
+ expect(order.taskManager, manager);
+ }
+
+ test_moveNext() {
+ TaskManager manager = new TaskManager();
+ TaskDescriptor descriptor = new TaskDescriptor(
+ 'task', null, (_) => {}, [new ResultDescriptor('result', null)]);
+ WorkItem workItem = new WorkItem(null, null, descriptor);
+ WorkOrder order = new WorkOrder(manager, workItem);
+ expect(order.moveNext(), true);
+ expect(order.current, workItem);
+ }
+}
+
+class _TestContext implements ExtendedAnalysisContext {
+ InternalAnalysisContext baseContext =
+ AnalysisContextFactory.contextWithCore();
+
+ @override
+ List<AnalysisTarget> explicitTargets = <AnalysisTarget>[];
+
+ Map<AnalysisTarget, CacheEntry> entryMap =
+ new HashMap<AnalysisTarget, CacheEntry>();
+
+ @override
+ List<AnalysisTarget> priorityTargets = <AnalysisTarget>[];
+
+ String name = 'Test Context';
+
+ _TestContext();
+
+ AnalysisOptions get analysisOptions => baseContext.analysisOptions;
+
+ void set analysisOptions(AnalysisOptions options) {
+ baseContext.analysisOptions = options;
+ }
+
+ @override
+ void set analysisPriorityOrder(List<Source> sources) {
+ baseContext.analysisPriorityOrder = sources;
+ }
+
+ @override
+ set contentCache(ContentCache value) {
+ baseContext.contentCache = value;
+ }
+
+ @override
+ DeclaredVariables get declaredVariables => baseContext.declaredVariables;
+
+ @override
+ List<Source> get htmlSources => baseContext.htmlSources;
+
+ @override
+ bool get isDisposed => baseContext.isDisposed;
+
+ @override
+ List<Source> get launchableClientLibrarySources =>
+ baseContext.launchableClientLibrarySources;
+
+ @override
+ List<Source> get launchableServerLibrarySources =>
+ baseContext.launchableServerLibrarySources;
+
+ @override
+ List<Source> get librarySources => baseContext.librarySources;
+
+ @override
+ Stream<SourcesChangedEvent> get onSourcesChanged =>
+ baseContext.onSourcesChanged;
+
+ @override
+ List<Source> get prioritySources => baseContext.prioritySources;
+
+ @override
+ List<Source> get refactoringUnsafeSources =>
+ baseContext.refactoringUnsafeSources;
+
+ @override
+ ResolverVisitorFactory get resolverVisitorFactory =>
+ baseContext.resolverVisitorFactory;
+
+ SourceFactory get sourceFactory => baseContext.sourceFactory;
+
+ void set sourceFactory(SourceFactory factory) {
+ baseContext.sourceFactory = factory;
+ }
+
+ @override
+ AnalysisContextStatistics get statistics => baseContext.statistics;
+
+ @override
+ TypeProvider get typeProvider => baseContext.typeProvider;
+
+ @override
+ TypeResolverVisitorFactory get typeResolverVisitorFactory =>
+ baseContext.typeResolverVisitorFactory;
+
+ @override
+ void addListener(AnalysisListener listener) {
+ baseContext.addListener(listener);
+ }
+
+ @override
+ void addSourceInfo(Source source, SourceEntry info) {
+ baseContext.addSourceInfo(source, info);
+ }
+
+ @override
+ void applyAnalysisDelta(AnalysisDelta delta) {
+ baseContext.applyAnalysisDelta(delta);
+ }
+
+ @override
+ void applyChanges(ChangeSet changeSet) {
+ baseContext.applyChanges(changeSet);
+ }
+
+ @override
+ String computeDocumentationComment(Element element) {
+ return baseContext.computeDocumentationComment(element);
+ }
+
+ @override
+ List<AnalysisError> computeErrors(Source source) {
+ return baseContext.computeErrors(source);
+ }
+
+ @override
+ List<Source> computeExportedLibraries(Source source) {
+ return baseContext.computeExportedLibraries(source);
+ }
+
+ @override
+ HtmlElement computeHtmlElement(Source source) {
+ return baseContext.computeHtmlElement(source);
+ }
+
+ @override
+ List<Source> computeImportedLibraries(Source source) {
+ return baseContext.computeImportedLibraries(source);
+ }
+
+ @override
+ SourceKind computeKindOf(Source source) {
+ return baseContext.computeKindOf(source);
+ }
+
+ @override
+ LibraryElement computeLibraryElement(Source source) {
+ return baseContext.computeLibraryElement(source);
+ }
+
+ @override
+ LineInfo computeLineInfo(Source source) {
+ return baseContext.computeLineInfo(source);
+ }
+
+ @override
+ CompilationUnit computeResolvableCompilationUnit(Source source) {
+ return baseContext.computeResolvableCompilationUnit(source);
+ }
+
+ @override
+ CancelableFuture<CompilationUnit> computeResolvedCompilationUnitAsync(
+ Source source, Source librarySource) {
+ return baseContext.computeResolvedCompilationUnitAsync(
+ source, librarySource);
+ }
+
+ @override
+ void dispose() {
+ baseContext.dispose();
+ }
+
+ @override
+ List<CompilationUnit> ensureResolvedDartUnits(Source source) {
+ return baseContext.ensureResolvedDartUnits(source);
+ }
+
+ @override
+ bool exists(Source source) {
+ return baseContext.exists(source);
+ }
+
+ @override
+ CacheEntry getCacheEntry(AnalysisTarget target) {
+ return entryMap.putIfAbsent(target, () => new CacheEntry());
+ }
+
+ @override
+ CompilationUnitElement getCompilationUnitElement(
+ Source unitSource, Source librarySource) {
+ return baseContext.getCompilationUnitElement(unitSource, librarySource);
+ }
+
+ @override
+ TimestampedData<String> getContents(Source source) {
+ return baseContext.getContents(source);
+ }
+
+ @override
+ InternalAnalysisContext getContextFor(Source source) {
+ return baseContext.getContextFor(source);
+ }
+
+ @override
+ Element getElement(ElementLocation location) {
+ return baseContext.getElement(location);
+ }
+
+ @override
+ AnalysisErrorInfo getErrors(Source source) {
+ return baseContext.getErrors(source);
+ }
+
+ @override
+ HtmlElement getHtmlElement(Source source) {
+ return baseContext.getHtmlElement(source);
+ }
+
+ @override
+ List<Source> getHtmlFilesReferencing(Source source) {
+ return baseContext.getHtmlFilesReferencing(source);
+ }
+
+ @override
+ SourceKind getKindOf(Source source) {
+ return baseContext.getKindOf(source);
+ }
+
+ @override
+ List<Source> getLibrariesContaining(Source source) {
+ return baseContext.getLibrariesContaining(source);
+ }
+
+ @override
+ List<Source> getLibrariesDependingOn(Source librarySource) {
+ return baseContext.getLibrariesDependingOn(librarySource);
+ }
+
+ @override
+ List<Source> getLibrariesReferencedFromHtml(Source htmlSource) {
+ return baseContext.getLibrariesReferencedFromHtml(htmlSource);
+ }
+
+ @override
+ LibraryElement getLibraryElement(Source source) {
+ return baseContext.getLibraryElement(source);
+ }
+
+ @override
+ LineInfo getLineInfo(Source source) {
+ return baseContext.getLineInfo(source);
+ }
+
+ @override
+ int getModificationStamp(Source source) {
+ return baseContext.getModificationStamp(source);
+ }
+
+ @override
+ Namespace getPublicNamespace(LibraryElement library) {
+ return baseContext.getPublicNamespace(library);
+ }
+
+ @override
+ CompilationUnit getResolvedCompilationUnit(
+ Source unitSource, LibraryElement library) {
+ return baseContext.getResolvedCompilationUnit(unitSource, library);
+ }
+
+ @override
+ CompilationUnit getResolvedCompilationUnit2(
+ Source unitSource, Source librarySource) {
+ return baseContext.getResolvedCompilationUnit2(unitSource, librarySource);
+ }
+
+ @override
+ HtmlUnit getResolvedHtmlUnit(Source htmlSource) {
+ return baseContext.getResolvedHtmlUnit(htmlSource);
+ }
+
+ @override
+ bool handleContentsChanged(
+ Source source, String originalContents, String newContents, bool notify) {
+ return baseContext.handleContentsChanged(
+ source, originalContents, newContents, notify);
+ }
+
+ @override
+ bool isClientLibrary(Source librarySource) {
+ return baseContext.isClientLibrary(librarySource);
+ }
+
+ @override
+ bool isServerLibrary(Source librarySource) {
+ return baseContext.isServerLibrary(librarySource);
+ }
+
+ @override
+ CompilationUnit parseCompilationUnit(Source source) {
+ return baseContext.parseCompilationUnit(source);
+ }
+
+ @override
+ HtmlUnit parseHtmlUnit(Source source) {
+ return baseContext.parseHtmlUnit(source);
+ }
+
+ @override
+ AnalysisResult performAnalysisTask() {
+ return baseContext.performAnalysisTask();
+ }
+
+ @override
+ void recordLibraryElements(Map<Source, LibraryElement> elementMap) {
+ baseContext.recordLibraryElements(elementMap);
+ }
+
+ @override
+ void removeListener(AnalysisListener listener) {
+ baseContext.removeListener(listener);
+ }
+
+ @override
+ CompilationUnit resolveCompilationUnit(
+ Source unitSource, LibraryElement library) {
+ return baseContext.resolveCompilationUnit(unitSource, library);
+ }
+
+ @override
+ CompilationUnit resolveCompilationUnit2(
+ Source unitSource, Source librarySource) {
+ return baseContext.resolveCompilationUnit2(unitSource, librarySource);
+ }
+
+ @override
+ HtmlUnit resolveHtmlUnit(Source htmlSource) {
+ return baseContext.resolveHtmlUnit(htmlSource);
+ }
+
+ @override
+ void setChangedContents(Source source, String contents, int offset,
+ int oldLength, int newLength) {
+ baseContext.setChangedContents(
+ source, contents, offset, oldLength, newLength);
+ }
+
+ @override
+ void setContents(Source source, String contents) {
+ baseContext.setContents(source, contents);
+ }
+
+ @override
+ void visitCacheItems(void callback(Source source, SourceEntry dartEntry,
+ DataDescriptor rowDesc, CacheState state)) {
+ baseContext.visitCacheItems(callback);
+ }
+}
diff --git a/pkg/analyzer/test/src/task/inputs_test.dart b/pkg/analyzer/test/src/task/inputs_test.dart
index 685a206..04305bc 100644
--- a/pkg/analyzer/test/src/task/inputs_test.dart
+++ b/pkg/analyzer/test/src/task/inputs_test.dart
@@ -29,8 +29,7 @@
static final ResultDescriptorImpl result2 =
new ResultDescriptorImpl('result2', null);
static final ListBasedTaskInput input = new ListBasedTaskInput(
- result1.inputFor(target1),
- (element) => result2.inputFor(element));
+ result1.inputFor(target1), (element) => result2.inputFor(element));
test_create() {
ListBasedTaskInputBuilder builder = new ListBasedTaskInputBuilder(input);
@@ -296,9 +295,7 @@
}
test_currentResult_afterComplete() {
- Map<String, TaskInput> inputDescriptors = {
- 'one': input1
- };
+ Map<String, TaskInput> inputDescriptors = {'one': input1};
TopLevelTaskInputBuilder builder =
new TopLevelTaskInputBuilder(inputDescriptors);
builder.moveNext();
@@ -308,10 +305,7 @@
}
test_currentResult_afterOneMoveNext() {
- Map<String, TaskInput> inputDescriptors = {
- 'one': input1,
- 'two': input2
- };
+ Map<String, TaskInput> inputDescriptors = {'one': input1, 'two': input2};
TopLevelTaskInputBuilder builder =
new TopLevelTaskInputBuilder(inputDescriptors);
builder.moveNext();
@@ -326,9 +320,7 @@
}
test_currentTarget_afterComplete() {
- Map<String, TaskInput> inputDescriptors = {
- 'one': input1
- };
+ Map<String, TaskInput> inputDescriptors = {'one': input1};
TopLevelTaskInputBuilder builder =
new TopLevelTaskInputBuilder(inputDescriptors);
builder.moveNext();
@@ -338,9 +330,7 @@
}
test_currentTarget_afterOneMoveNext() {
- Map<String, TaskInput> inputDescriptors = {
- 'one': input1
- };
+ Map<String, TaskInput> inputDescriptors = {'one': input1};
TopLevelTaskInputBuilder builder =
new TopLevelTaskInputBuilder(inputDescriptors);
builder.moveNext();
@@ -355,9 +345,7 @@
}
test_currentValue_afterOneMoveNext() {
- Map<String, TaskInput> inputDescriptors = {
- 'one': input1
- };
+ Map<String, TaskInput> inputDescriptors = {'one': input1};
TopLevelTaskInputBuilder builder =
new TopLevelTaskInputBuilder(inputDescriptors);
builder.moveNext();
@@ -365,9 +353,7 @@
}
test_currentValue_beforeMoveNext() {
- Map<String, TaskInput> inputDescriptors = {
- 'one': input1
- };
+ Map<String, TaskInput> inputDescriptors = {'one': input1};
TopLevelTaskInputBuilder builder =
new TopLevelTaskInputBuilder(inputDescriptors);
expect(() {
@@ -380,10 +366,7 @@
String key2 = 'two';
String value1 = 'value1';
String value2 = 'value2';
- Map<String, TaskInput> inputDescriptors = {
- key1: input1,
- key2: input2
- };
+ Map<String, TaskInput> inputDescriptors = {key1: input1, key2: input2};
TopLevelTaskInputBuilder builder =
new TopLevelTaskInputBuilder(inputDescriptors);
builder.moveNext(); // Advance to requesting result1 for target
@@ -400,9 +383,7 @@
}
test_inputValue_afterOneMoveNext() {
- Map<String, TaskInput> inputDescriptors = {
- 'one': input1
- };
+ Map<String, TaskInput> inputDescriptors = {'one': input1};
TopLevelTaskInputBuilder builder =
new TopLevelTaskInputBuilder(inputDescriptors);
builder.moveNext();
@@ -417,9 +398,7 @@
}
test_moveNext_withoutSet() {
- Map<String, TaskInput> inputDescriptors = {
- 'one': input1
- };
+ Map<String, TaskInput> inputDescriptors = {'one': input1};
TopLevelTaskInputBuilder builder =
new TopLevelTaskInputBuilder(inputDescriptors);
expect(builder.moveNext(), true);
@@ -427,9 +406,7 @@
}
test_moveNext_withSet() {
- Map<String, TaskInput> inputDescriptors = {
- 'one': input1
- };
+ Map<String, TaskInput> inputDescriptors = {'one': input1};
TopLevelTaskInputBuilder builder =
new TopLevelTaskInputBuilder(inputDescriptors);
expect(builder.moveNext(), true);
diff --git a/pkg/analyzer/test/src/task/manager_test.dart b/pkg/analyzer/test/src/task/manager_test.dart
index 5cd171a..e4aa6de 100644
--- a/pkg/analyzer/test/src/task/manager_test.dart
+++ b/pkg/analyzer/test/src/task/manager_test.dart
@@ -63,8 +63,7 @@
test_findTask_empty() {
TaskManager manager = new TaskManager();
AnalysisTarget target = new TestSource();
- expect(
- () => manager.findTask(target, result1),
+ expect(() => manager.findTask(target, result1),
throwsA(new isInstanceOf<AnalysisException>()));
}
@@ -91,8 +90,7 @@
new TaskDescriptor('task', null, null, [result1]);
manager.addTaskDescriptor(descriptor);
AnalysisTarget target = new TestSource();
- expect(
- () => manager.findTask(target, result2),
+ expect(() => manager.findTask(target, result2),
throwsA(new isInstanceOf<AnalysisException>()));
}
diff --git a/pkg/analyzer/test/src/task/model_test.dart b/pkg/analyzer/test/src/task/model_test.dart
index 88b5915..8bf9625 100644
--- a/pkg/analyzer/test/src/task/model_test.dart
+++ b/pkg/analyzer/test/src/task/model_test.dart
@@ -27,19 +27,15 @@
test_getRequiredInput_missingKey() {
AnalysisTarget target = new TestSource();
AnalysisTask task = new TestAnalysisTask(null, target);
- task.inputs = {
- 'a': 'b'
- };
- expect(
- () => task.getRequiredInput('c'),
+ task.inputs = {'a': 'b'};
+ expect(() => task.getRequiredInput('c'),
throwsA(new isInstanceOf<AnalysisException>()));
}
test_getRequiredInput_noInputs() {
AnalysisTarget target = new TestSource();
AnalysisTask task = new TestAnalysisTask(null, target);
- expect(
- () => task.getRequiredInput('x'),
+ expect(() => task.getRequiredInput('x'),
throwsA(new isInstanceOf<AnalysisException>()));
}
@@ -48,9 +44,7 @@
AnalysisTask task = new TestAnalysisTask(null, target);
String key = 'a';
String value = 'b';
- task.inputs = {
- key: value
- };
+ task.inputs = {key: value};
expect(task.getRequiredInput(key), value);
}
diff --git a/pkg/analyzer/test/src/task/test_all.dart b/pkg/analyzer/test/src/task/test_all.dart
index 12fccc4..39216fe 100644
--- a/pkg/analyzer/test/src/task/test_all.dart
+++ b/pkg/analyzer/test/src/task/test_all.dart
@@ -2,11 +2,12 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-library test.src.task;
+library test.src.task.test_all;
import 'package:unittest/unittest.dart';
import 'dart_test.dart' as dart_test;
+import 'driver_test.dart' as driver_test;
import 'inputs_test.dart' as inputs_test;
import 'manager_test.dart' as manager_test;
import 'model_test.dart' as model_test;
@@ -16,6 +17,7 @@
groupSep = ' | ';
group('task tests', () {
dart_test.main();
+ driver_test.main();
inputs_test.main();
manager_test.main();
model_test.main();
diff --git a/pkg/analyzer/test/src/task/test_support.dart b/pkg/analyzer/test/src/task/test_support.dart
index 85297f6..cafd4b9 100644
--- a/pkg/analyzer/test/src/task/test_support.dart
+++ b/pkg/analyzer/test/src/task/test_support.dart
@@ -5,19 +5,52 @@
library test.src.task.test_support;
import 'package:analyzer/src/generated/engine.dart' hide AnalysisTask;
+import 'package:analyzer/src/generated/java_engine.dart';
import 'package:analyzer/task/model.dart';
+/**
+ * A configurable analysis task that can be used by tests.
+ */
class TestAnalysisTask extends AnalysisTask {
- TestAnalysisTask(AnalysisContext context, AnalysisTarget target)
+ /**
+ * The descriptor describing this task.
+ */
+ TaskDescriptor descriptor;
+
+ /**
+ * The exception that is to be "thrown" by this task.
+ */
+ CaughtException exception;
+
+ /**
+ * The results whose values are to be provided as outputs from this task.
+ */
+ List<ResultDescriptor> results;
+
+ /**
+ * The next value that is to be used for a result.
+ */
+ int value = 1;
+
+ TestAnalysisTask(AnalysisContext context, AnalysisTarget target,
+ {this.descriptor, this.exception, this.results})
: super(context, target);
@override
String get description => 'Test task';
@override
- TaskDescriptor get descriptor => null;
-
- @override
internalPerform() {
+ if (exception != null) {
+ caughtException = exception;
+ } else if (results != null) {
+ for (ResultDescriptor result in results) {
+ outputs[result] = value++;
+ }
+ } else if (descriptor != null) {
+ for (ResultDescriptor result in descriptor.results) {
+ outputs[result] = value++;
+ }
+ }
}
}
diff --git a/pkg/analyzer/test/src/test_all.dart b/pkg/analyzer/test/src/test_all.dart
index 4f8b2a5..0608083 100644
--- a/pkg/analyzer/test/src/test_all.dart
+++ b/pkg/analyzer/test/src/test_all.dart
@@ -2,10 +2,11 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-library test.src;
+library test.src.test_all;
import 'package:unittest/unittest.dart';
+import 'context/test_all.dart' as context;
import 'task/test_all.dart' as task;
import 'util/test_all.dart' as util;
@@ -13,6 +14,7 @@
main() {
groupSep = ' | ';
group('src tests', () {
+ context.main();
task.main();
util.main();
});
diff --git a/pkg/analyzer/test/src/util/asserts_test.dart b/pkg/analyzer/test/src/util/asserts_test.dart
index 0e76eb5..bb4c032 100644
--- a/pkg/analyzer/test/src/util/asserts_test.dart
+++ b/pkg/analyzer/test/src/util/asserts_test.dart
@@ -9,13 +9,11 @@
import '../../reflective_tests.dart';
-
main() {
groupSep = ' | ';
runReflectiveTests(AnalysisTaskTest);
}
-
@reflectiveTest
class AnalysisTaskTest {
void test_notNull_notNull() {
diff --git a/pkg/analyzer/test/src/util/lru_map_test.dart b/pkg/analyzer/test/src/util/lru_map_test.dart
new file mode 100644
index 0000000..da82568
--- /dev/null
+++ b/pkg/analyzer/test/src/util/lru_map_test.dart
@@ -0,0 +1,95 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.src.util.lru_map;
+
+import 'package:analyzer/src/util/lru_map.dart';
+import 'package:unittest/unittest.dart';
+
+import '../../reflective_tests.dart';
+
+main() {
+ groupSep = ' | ';
+ runReflectiveTests(_LRUCacheTest);
+}
+
+@reflectiveTest
+class _LRUCacheTest {
+ LRUMap<int, String> cache = new LRUMap<int, String>(3);
+
+ void test_evict_notGet() {
+ List<int> evictedKeys = new List<int>();
+ List<String> evictedValues = new List<String>();
+ cache = new LRUMap<int, String>(3, (int key, String value) {
+ evictedKeys.add(key);
+ evictedValues.add(value);
+ });
+ // fill
+ cache.put(1, 'A');
+ cache.put(2, 'B');
+ cache.put(3, 'C');
+ // access '1' and '3'
+ cache.get(1);
+ cache.get(3);
+ // put '4', evict '2'
+ cache.put(4, 'D');
+ expect(cache.get(1), 'A');
+ expect(cache.get(2), isNull);
+ expect(cache.get(3), 'C');
+ expect(cache.get(4), 'D');
+ // check eviction listener
+ expect(evictedKeys, contains(2));
+ expect(evictedValues, contains('B'));
+ }
+
+ void test_evict_notPut() {
+ List<int> evictedKeys = new List<int>();
+ List<String> evictedValues = new List<String>();
+ cache = new LRUMap<int, String>(3, (int key, String value) {
+ evictedKeys.add(key);
+ evictedValues.add(value);
+ });
+ // fill
+ cache.put(1, 'A');
+ cache.put(2, 'B');
+ cache.put(3, 'C');
+ // put '1' and '3'
+ cache.put(1, 'AA');
+ cache.put(3, 'CC');
+ // put '4', evict '2'
+ cache.put(4, 'D');
+ expect(cache.get(1), 'AA');
+ expect(cache.get(2), isNull);
+ expect(cache.get(3), 'CC');
+ expect(cache.get(4), 'D');
+ // check eviction listener
+ expect(evictedKeys, contains(2));
+ expect(evictedValues, contains('B'));
+ }
+
+ void test_putGet() {
+ // fill
+ cache.put(1, 'A');
+ cache.put(2, 'B');
+ cache.put(3, 'C');
+ // check
+ expect(cache.get(1), 'A');
+ expect(cache.get(2), 'B');
+ expect(cache.get(3), 'C');
+ expect(cache.get(4), isNull);
+ }
+
+ void test_remove() {
+ cache.put(1, 'A');
+ cache.put(2, 'B');
+ cache.put(3, 'C');
+ // remove
+ cache.remove(1);
+ cache.remove(3);
+ // check
+ expect(cache.get(1), isNull);
+ expect(cache.get(2), 'B');
+ expect(cache.get(3), isNull);
+ }
+}
diff --git a/pkg/analyzer/test/src/util/test_all.dart b/pkg/analyzer/test/src/util/test_all.dart
index 88de6e4..4b60777 100644
--- a/pkg/analyzer/test/src/util/test_all.dart
+++ b/pkg/analyzer/test/src/util/test_all.dart
@@ -7,11 +7,13 @@
import 'package:unittest/unittest.dart';
import 'asserts_test.dart' as asserts_test;
+import 'lru_map_test.dart' as lru_map_test;
/// Utility for manually running all tests.
main() {
groupSep = ' | ';
group('task tests', () {
asserts_test.main();
+ lru_map_test.main();
});
}
diff --git a/pkg/analyzer/test/task/task_dart_test.dart b/pkg/analyzer/test/task/task_dart_test.dart
index 3d951be..352bc3b 100644
--- a/pkg/analyzer/test/task/task_dart_test.dart
+++ b/pkg/analyzer/test/task/task_dart_test.dart
@@ -22,12 +22,12 @@
}
class BuildUnitElementTaskTest extends EngineTestCase {
- CompilationUnit parseUnit(InternalAnalysisContext context, Source source,
- String content) {
+ CompilationUnit parseUnit(
+ InternalAnalysisContext context, Source source, String content) {
ScanDartTask scanTask = new ScanDartTask(context, source, content);
scanTask.perform(new ScanDartTaskTestTV_accept());
- ParseDartTask parseTask =
- new ParseDartTask(context, source, scanTask.tokenStream, scanTask.lineInfo);
+ ParseDartTask parseTask = new ParseDartTask(
+ context, source, scanTask.tokenStream, scanTask.lineInfo);
parseTask.perform(new ParseDartTaskTestTV_accept());
return parseTask.compilationUnit;
}
diff --git a/pkg/analyzer/test/test_all.dart b/pkg/analyzer/test/test_all.dart
index 56de8fd..7392070 100644
--- a/pkg/analyzer/test/test_all.dart
+++ b/pkg/analyzer/test/test_all.dart
@@ -18,7 +18,6 @@
import 'task/test_all.dart' as task;
import 'cancelable_future_test.dart' as cancelable_future_test;
-
/// Utility for manually running all tests.
main() {
groupSep = ' | ';
diff --git a/pkg/analyzer/test/utils.dart b/pkg/analyzer/test/utils.dart
index df06283..2a9ba81 100644
--- a/pkg/analyzer/test/utils.dart
+++ b/pkg/analyzer/test/utils.dart
@@ -24,8 +24,7 @@
try {
parseDartFile(path);
} on AnalyzerErrorGroup catch (e) {
- return e.toString().replaceAllMapped(
- new RegExp(
+ return e.toString().replaceAllMapped(new RegExp(
r"^(Error on line \d+ of )((?:[A-Z]+:)?[^:]+): .*$",
multiLine: true),
(match) => match[1] + pathos.basename(match[2]) + ': ...');
diff --git a/pkg/analyzer2dart/lib/src/cps_generator.dart b/pkg/analyzer2dart/lib/src/cps_generator.dart
index 879b308..e932e99 100644
--- a/pkg/analyzer2dart/lib/src/cps_generator.dart
+++ b/pkg/analyzer2dart/lib/src/cps_generator.dart
@@ -96,7 +96,7 @@
new DartIrBuilder(DART_CONSTANT_SYSTEM,
element,
// TODO(johnniwinther): Supported closure variables.
- new NullCapturedVariableInfo()),
+ new NullCapturedVariables()),
() {
irBuilder.buildFunctionHeader(
constructor.parameters.map(converter.convertElement));
@@ -115,7 +115,7 @@
new DartIrBuilder(DART_CONSTANT_SYSTEM,
element,
// TODO(johnniwinther): Supported closure variables.
- new NullCapturedVariableInfo()),
+ new NullCapturedVariables()),
() {
irBuilder.buildFieldInitializerHeader();
ir.Primitive initializer = build(node.initializer);
@@ -130,7 +130,7 @@
new DartIrBuilder(DART_CONSTANT_SYSTEM,
element,
// TODO(johnniwinther): Supported closure variables.
- new NullCapturedVariableInfo()),
+ new NullCapturedVariables()),
() {
irBuilder.buildFunctionHeader(
function.parameters.map(converter.convertElement));
@@ -574,6 +574,6 @@
}
}
-class NullCapturedVariableInfo extends DartCapturedVariableInfo {
- Iterable get capturedVariables => const [];
+class NullCapturedVariables extends DartCapturedVariables {
+ NullCapturedVariables() : super(null);
}
diff --git a/pkg/collection/CHANGELOG.md b/pkg/collection/CHANGELOG.md
deleted file mode 100644
index 6742b4c..0000000
--- a/pkg/collection/CHANGELOG.md
+++ /dev/null
@@ -1,20 +0,0 @@
-## 1.1.0
-
-* Add a `QueueList` class that implements both `Queue` and `List`.
-
-## 0.9.4
-
-* Add a `CanonicalizedMap` class that canonicalizes its keys to provide a custom
- equality relation.
-
-## 0.9.3+1
-
-* Fix all analyzer hints.
-
-## 0.9.3
-
-* Add a `MapKeySet` class that exposes an unmodifiable `Set` view of a `Map`'s
- keys.
-
-* Add a `MapValueSet` class that takes a function from values to keys and uses
- it to expose a `Set` view of a `Map`'s values.
diff --git a/pkg/collection/LICENSE b/pkg/collection/LICENSE
deleted file mode 100644
index ee99930..0000000
--- a/pkg/collection/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright 2013, the Dart project authors. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of Google Inc. nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/collection/README.md b/pkg/collection/README.md
deleted file mode 100644
index 7ebd62a..0000000
--- a/pkg/collection/README.md
+++ /dev/null
@@ -1,69 +0,0 @@
-Helper libraries for working with collections.
-
-The `collection` package contains a number of separate libraries
-with utility functions and classes that makes working with collections easier.
-
-## Using
-
-The `collection` package can be imported as separate libraries, or
-in totality:
-
- import 'package:collection/algorithms.dart';
- import 'package:collection/equality.dart';
- import 'package:collection/iterable_zip.dart';
- import 'package:collection/priority_queue.dart';
- import 'package:collection/wrappers.dart';
-
-or
-
- import 'package:collection/collection.dart';
-
-## Algorithms
-
-The algorithms library contains functions that operate on lists.
-
-It contains ways to shuffle a `List`, do binary search on a sorted `List`, and
-various sorting algorithms.
-
-
-## Equality
-
-The equality library gives a way to specify equality of elements and
-collections.
-
-Collections in Dart have no inherent equality. Two sets are not equal, even
-if they contain exactly the same objects as elements.
-
-The equality library provides a way to say define such an equality. In this
-case, for example, `const SetEquality(const IdentityEquality())` is an equality
-that considers two sets equal exactly if they contain identical elements.
-
-The library provides ways to define equalities on `Iterable`s, `List`s, `Set`s,
-and `Map`s, as well as combinations of these, such as:
-
- const MapEquality(const IdentityEquality(), const ListEquality());
-
-This equality considers maps equal if they have identical keys, and the
-corresponding values are lists with equal (`operator==`) values.
-
-
-## Iterable Zip
-
-Utilities for "zipping" a list of iterables into an iterable of lists.
-
-
-## Priority Queue
-
-An interface and implemention of a priority queue.
-
-
-## Wrappers
-
-The wrappers library contains classes that "wrap" a collection.
-
-A wrapper class contains an object of the same type, and it forwards all
-methods to the wrapped object.
-
-Wrapper classes can be used in various ways, for example to restrict the type
-of an object to that of a supertype, or to change the behavior of selected
-functions on an existing object.
diff --git a/pkg/collection/lib/algorithms.dart b/pkg/collection/lib/algorithms.dart
deleted file mode 100644
index 5ff0bb3..0000000
--- a/pkg/collection/lib/algorithms.dart
+++ /dev/null
@@ -1,301 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * Operations on collections.
- */
-library dart.pkg.collection.algorithms;
-
-import "dart:math" show Random;
-
-/** Version of [binarySearch] optimized for comparable keys */
-int _comparableBinarySearch(List<Comparable> list, Comparable key) {
- int min = 0;
- int max = list.length;
- while (min < max) {
- int mid = min + ((max - min) >> 1);
- var element = list[mid];
- int comp = element.compareTo(key);
- if (comp == 0) return mid;
- if (comp < 0) {
- min = mid + 1;
- } else {
- max = mid;
- }
- }
- return -1;
-}
-
-/**
- * Returns a position of the [key] in [sortedList], if it is there.
- *
- * If the list isn't sorted according to the [compare] function, the result
- * is unpredictable.
- *
- * If [compare] is omitted, it defaults to calling [Comparable.compareTo] on
- * the objects.
- *
- * Returns -1 if [key] is not in the list by default.
- */
-int binarySearch(List sortedList, var key,
- { int compare(var a, var b) }) {
- if (compare == null) {
- return _comparableBinarySearch(sortedList, key);
- }
- int min = 0;
- int max = sortedList.length;
- while (min < max) {
- int mid = min + ((max - min) >> 1);
- var element = sortedList[mid];
- int comp = compare(element, key);
- if (comp == 0) return mid;
- if (comp < 0) {
- min = mid + 1;
- } else {
- max = mid;
- }
- }
- return -1;
-}
-
-
-/**
- * Shuffles a list randomly.
- *
- * A sub-range of a list can be shuffled by providing [start] and [end].
- */
-void shuffle(List list, [int start = 0, int end = null]) {
- Random random = new Random();
- if (end == null) end = list.length;
- int length = end - start;
- while (length > 1) {
- int pos = random.nextInt(length);
- length--;
- var tmp1 = list[start + pos];
- list[start + pos] = list[start + length];
- list[start + length] = tmp1;
- }
-}
-
-
-/**
- * Reverses a list, or a part of a list, in-place.
- */
-void reverse(List list, [int start = 0, int end = null]) {
- if (end == null) end = list.length;
- _reverse(list, start, end);
-}
-
-// Internal helper function that assumes valid arguments.
-void _reverse(List list, int start, int end) {
- for (int i = start, j = end - 1; i < j; i++, j--) {
- var tmp = list[i];
- list[i] = list[j];
- list[j] = tmp;
- }
-}
-
-/**
- * Sort a list using insertion sort.
- *
- * Insertion sort is a simple sorting algorithm. For `n` elements it does on
- * the order of `n * log(n)` comparisons but up to `n` squared moves. The
- * sorting is performed in-place, without using extra memory.
- *
- * For short lists the many moves have less impact than the simple algorithm,
- * and it is often the favored sorting algorithm for short lists.
- *
- * This insertion sort is stable: Equal elements end up in the same order
- * as they started in.
- */
-void insertionSort(List list,
- { int compare(a, b),
- int start: 0,
- int end: null }) {
- // If the same method could have both positional and named optional
- // parameters, this should be (list, [start, end], {compare}).
- if (end == null) end = list.length;
- if (compare == null) compare = Comparable.compare;
- _insertionSort(list, compare, start, end, start + 1);
-}
-
-/**
- * Internal helper function that assumes arguments correct.
- *
- * Assumes that the elements up to [sortedUntil] (not inclusive) are
- * already sorted. The [sortedUntil] values should always be at least
- * `start + 1`.
- */
-void _insertionSort(List list, int compare(a, b), int start, int end,
- int sortedUntil) {
- for (int pos = sortedUntil; pos < end; pos++) {
- int min = start;
- int max = pos;
- var element = list[pos];
- while (min < max) {
- int mid = min + ((max - min) >> 1);
- int comparison = compare(element, list[mid]);
- if (comparison < 0) {
- max = mid;
- } else {
- min = mid + 1;
- }
- }
- list.setRange(min + 1, pos + 1, list, min);
- list[min] = element;
- }
-}
-
-/** Limit below which merge sort defaults to insertion sort. */
-const int _MERGE_SORT_LIMIT = 32;
-
-/**
- * Sorts a list, or a range of a list, using the merge sort algorithm.
- *
- * Merge-sorting works by splitting the job into two parts, sorting each
- * recursively, and then merging the two sorted parts.
- *
- * This takes on the order of `n * log(n)` comparisons and moves to sort
- * `n` elements, but requires extra space of about the same size as the list
- * being sorted.
- *
- * This merge sort is stable: Equal elements end up in the same order
- * as they started in.
- */
-void mergeSort(List list, {int start: 0, int end: null, int compare(a, b)}) {
- if (end == null) end = list.length;
- if (compare == null) compare = Comparable.compare;
- int length = end - start;
- if (length < 2) return;
- if (length < _MERGE_SORT_LIMIT) {
- _insertionSort(list, compare, start, end, start + 1);
- return;
- }
- // Special case the first split instead of directly calling
- // _mergeSort, because the _mergeSort requires its target to
- // be different from its source, and it requires extra space
- // of the same size as the list to sort.
- // This split allows us to have only half as much extra space,
- // and it ends up in the original place.
- int middle = start + ((end - start) >> 1);
- int firstLength = middle - start;
- int secondLength = end - middle;
- // secondLength is always the same as firstLength, or one greater.
- List scratchSpace = new List(secondLength);
- _mergeSort(list, compare, middle, end, scratchSpace, 0);
- int firstTarget = end - firstLength;
- _mergeSort(list, compare, start, middle, list, firstTarget);
- _merge(compare,
- list, firstTarget, end,
- scratchSpace, 0, secondLength,
- list, start);
-}
-
-/**
- * Performs an insertion sort into a potentially different list than the
- * one containing the original values.
- *
- * It will work in-place as well.
- */
-void _movingInsertionSort(List list, int compare(a, b), int start, int end,
- List target, int targetOffset) {
- int length = end - start;
- if (length == 0) return;
- target[targetOffset] = list[start];
- for (int i = 1; i < length; i++) {
- var element = list[start + i];
- int min = targetOffset;
- int max = targetOffset + i;
- while (min < max) {
- int mid = min + ((max - min) >> 1);
- if (compare(element, target[mid]) < 0) {
- max = mid;
- } else {
- min = mid + 1;
- }
- }
- target.setRange(min + 1, targetOffset + i + 1,
- target, min);
- target[min] = element;
- }
-}
-
-/**
- * Sorts [list] from [start] to [end] into [target] at [targetOffset].
- *
- * The `target` list must be able to contain the range from `start` to `end`
- * after `targetOffset`.
- *
- * Allows target to be the same list as [list], as long as it's not
- * overlapping the `start..end` range.
- */
-void _mergeSort(List list, int compare(a, b), int start, int end,
- List target, int targetOffset) {
- int length = end - start;
- if (length < _MERGE_SORT_LIMIT) {
- _movingInsertionSort(list, compare, start, end, target, targetOffset);
- return;
- }
- int middle = start + (length >> 1);
- int firstLength = middle - start;
- int secondLength = end - middle;
- // Here secondLength >= firstLength (differs by at most one).
- int targetMiddle = targetOffset + firstLength;
- // Sort the second half into the end of the target area.
- _mergeSort(list, compare, middle, end,
- target, targetMiddle);
- // Sort the first half into the end of the source area.
- _mergeSort(list, compare, start, middle,
- list, middle);
- // Merge the two parts into the target area.
- _merge(compare,
- list, middle, middle + firstLength,
- target, targetMiddle, targetMiddle + secondLength,
- target, targetOffset);
-}
-
-/**
- * Merges two lists into a target list.
- *
- * One of the input lists may be positioned at the end of the target
- * list.
- *
- * For equal object, elements from [firstList] are always preferred.
- * This allows the merge to be stable if the first list contains elements
- * that started out earlier than the ones in [secondList]
- */
-void _merge(int compare(a, b),
- List firstList, int firstStart, int firstEnd,
- List secondList, int secondStart, int secondEnd,
- List target, int targetOffset) {
- // No empty lists reaches here.
- assert(firstStart < firstEnd);
- assert(secondStart < secondEnd);
- int cursor1 = firstStart;
- int cursor2 = secondStart;
- var firstElement = firstList[cursor1++];
- var secondElement = secondList[cursor2++];
- while (true) {
- if (compare(firstElement, secondElement) <= 0) {
- target[targetOffset++] = firstElement;
- if (cursor1 == firstEnd) break; // Flushing second list after loop.
- firstElement = firstList[cursor1++];
- } else {
- target[targetOffset++] = secondElement;
- if (cursor2 != secondEnd) {
- secondElement = secondList[cursor2++];
- continue;
- }
- // Second list empties first. Flushing first list here.
- target[targetOffset++] = firstElement;
- target.setRange(targetOffset, targetOffset + (firstEnd - cursor1),
- firstList, cursor1);
- return;
- }
- }
- // First list empties first. Reached by break above.
- target[targetOffset++] = secondElement;
- target.setRange(targetOffset, targetOffset + (secondEnd - cursor2),
- secondList, cursor2);
-}
diff --git a/pkg/collection/lib/collection.dart b/pkg/collection/lib/collection.dart
deleted file mode 100644
index 45d3867..0000000
--- a/pkg/collection/lib/collection.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * Exports all the individual parts of the collection-helper library.
- *
- * The sub-libraries of this package are:
- *
- * - `algorithms.dart`: Algorithms that work on lists (shuffle, binary search
- * and various sorting algorithms).
- * - `equality.dart`: Different notions of equality of collections.
- * - `iterable_zip.dart`: Combining multiple iterables into one.
- * - `priority_queue.dart`: Priority queue type and implementations.
- * - `wrappers.dart`: Wrapper classes that delegate to a collection object.
- * Includes unmodifiable views of collections.
- */
-library dart.pkg.collection;
-
-export "algorithms.dart";
-export "equality.dart";
-export "iterable_zip.dart";
-export "priority_queue.dart";
-export "src/canonicalized_map.dart";
-export "src/queue_list.dart";
-export "wrappers.dart";
diff --git a/pkg/collection/lib/equality.dart b/pkg/collection/lib/equality.dart
deleted file mode 100644
index c6fdafa..0000000
--- a/pkg/collection/lib/equality.dart
+++ /dev/null
@@ -1,419 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * Defines equality relations on collections.
- */
-library dart.pkg.collection.equality;
-
-import "dart:collection";
-
-const int _HASH_MASK = 0x7fffffff;
-
-/**
- * A generic equality relation on objects.
- */
-abstract class Equality<E> {
- const factory Equality() = DefaultEquality;
-
- /**
- * Compare two elements for being equal.
- *
- * This should be a proper equality relation.
- */
- bool equals(E e1, E e2);
-
- /**
- * Get a hashcode of an element.
- *
- * The hashcode should be compatible with [equals], so that if
- * `equals(a, b)` then `hash(a) == hash(b)`.
- */
- int hash(E e);
-
- /**
- * Test whether an object is a valid argument to [equals] and [hash].
- *
- * Some implementations may be restricted to only work on specific types
- * of objects.
- */
- bool isValidKey(Object o);
-}
-
-/**
- * Equality of objects that compares only the natural equality of the objects.
- *
- * This equality uses the objects' own [Object.==] and [Object.hashCode] for
- * the equality.
- */
-class DefaultEquality implements Equality {
- const DefaultEquality();
- bool equals(Object e1, Object e2) => e1 == e2;
- int hash(Object e) => e.hashCode;
- bool isValidKey(Object o) => true;
-}
-
-/**
- * Equality of objects that compares only the identity of the objects.
- */
-class IdentityEquality implements Equality {
- const IdentityEquality();
- bool equals(Object e1, Object e2) => identical(e1, e2);
- int hash(Object e) => identityHashCode(e);
- bool isValidKey(Object o) => true;
-}
-
-/**
- * Equality on iterables.
- *
- * Two iterables are equal if they have the same elements in the same order.
- */
-class IterableEquality<E> implements Equality<Iterable<E>> {
- final Equality<E> _elementEquality;
- const IterableEquality([Equality<E> elementEquality =
- const DefaultEquality()])
- : _elementEquality = elementEquality;
-
- bool equals(Iterable<E> elements1, Iterable<E> elements2) {
- if (identical(elements1, elements2)) return true;
- if (elements1 == null || elements2 == null) return false;
- Iterator it1 = elements1.iterator;
- Iterator it2 = elements2.iterator;
- while (true) {
- bool hasNext = it1.moveNext();
- if (hasNext != it2.moveNext()) return false;
- if (!hasNext) return true;
- if (!_elementEquality.equals(it1.current, it2.current)) return false;
- }
- }
-
- int hash(Iterable<E> elements) {
- // Jenkins's one-at-a-time hash function.
- int hash = 0;
- for (E element in elements) {
- int c = _elementEquality.hash(element);
- hash = (hash + c) & _HASH_MASK;
- hash = (hash + (hash << 10)) & _HASH_MASK;
- hash ^= (hash >> 6);
- }
- hash = (hash + (hash << 3)) & _HASH_MASK;
- hash ^= (hash >> 11);
- hash = (hash + (hash << 15)) & _HASH_MASK;
- return hash;
- }
-
- bool isValidKey(Object o) => o is Iterable<E>;
-}
-
-/**
- * Equality on lists.
- *
- * Two lists are equal if they have the same length and their elements
- * at each index are equal.
- *
- * This is effectively the same as [IterableEquality] except that it
- * accesses elements by index instead of through iteration.
- */
-class ListEquality<E> implements Equality<List<E>> {
- final Equality<E> _elementEquality;
- const ListEquality([Equality<E> elementEquality = const DefaultEquality()])
- : _elementEquality = elementEquality;
-
- bool equals(List<E> e1, List<E> e2) {
- if (identical(e1, e2)) return true;
- if (e1 == null || e2 == null) return false;
- int length = e1.length;
- if (length != e2.length) return false;
- for (int i = 0; i < length; i++) {
- if (!_elementEquality.equals(e1[i], e2[i])) return false;
- }
- return true;
- }
-
- int hash(List<E> e) {
- // Jenkins's one-at-a-time hash function.
- // This code is almost identical to the one in IterableEquality, except
- // that it uses indexing instead of iterating to get the elements.
- int hash = 0;
- for (int i = 0; i < e.length; i++) {
- int c = _elementEquality.hash(e[i]);
- hash = (hash + c) & _HASH_MASK;
- hash = (hash + (hash << 10)) & _HASH_MASK;
- hash ^= (hash >> 6);
- }
- hash = (hash + (hash << 3)) & _HASH_MASK;
- hash ^= (hash >> 11);
- hash = (hash + (hash << 15)) & _HASH_MASK;
- return hash;
- }
-
- bool isValidKey(Object o) => o is List<E>;
-}
-
-abstract class _UnorderedEquality<E, T extends Iterable<E>>
- implements Equality<T> {
- final Equality<E> _elementEquality;
-
- const _UnorderedEquality(this._elementEquality);
-
- bool equals(T e1, T e2) {
- if (identical(e1, e2)) return true;
- if (e1 == null || e2 == null) return false;
- HashMap<E, int> counts = new HashMap(
- equals: _elementEquality.equals,
- hashCode: _elementEquality.hash,
- isValidKey: _elementEquality.isValidKey);
- int length = 0;
- for (var e in e1) {
- int count = counts[e];
- if (count == null) count = 0;
- counts[e] = count + 1;
- length++;
- }
- for (var e in e2) {
- int count = counts[e];
- if (count == null || count == 0) return false;
- counts[e] = count - 1;
- length--;
- }
- return length == 0;
- }
-
- int hash(T e) {
- int hash = 0;
- for (E element in e) {
- int c = _elementEquality.hash(element);
- hash = (hash + c) & _HASH_MASK;
- }
- hash = (hash + (hash << 3)) & _HASH_MASK;
- hash ^= (hash >> 11);
- hash = (hash + (hash << 15)) & _HASH_MASK;
- return hash;
- }
-}
-
-/**
- * Equality of the elements of two iterables without considering order.
- *
- * Two iterables are considered equal if they have the same number of elements,
- * and the elements of one set can be paired with the elements
- * of the other iterable, so that each pair are equal.
- */
-class UnorderedIterableEquality<E> extends _UnorderedEquality<E, Iterable<E>> {
- const UnorderedIterableEquality(
- [Equality<E> elementEquality = const DefaultEquality()])
- : super(elementEquality);
-
- bool isValidKey(Object o) => o is Iterable<E>;
-}
-
-/**
- * Equality of sets.
- *
- * Two sets are considered equal if they have the same number of elements,
- * and the elements of one set can be paired with the elements
- * of the other set, so that each pair are equal.
- *
- * This equality behaves the same as [UnorderedIterableEquality] except that
- * it expects sets instead of iterables as arguments.
- */
-class SetEquality<E> extends _UnorderedEquality<E, Set<E>> {
- const SetEquality(
- [Equality<E> elementEquality = const DefaultEquality()])
- : super(elementEquality);
-
- bool isValidKey(Object o) => o is Set<E>;
-}
-
-/**
- * Internal class used by [MapEquality].
- *
- * The class represents a map entry as a single object,
- * using a combined hashCode and equality of the key and value.
- */
-class _MapEntry {
- final MapEquality equality;
- final key;
- final value;
- _MapEntry(this.equality, this.key, this.value);
-
- int get hashCode =>
- (3 * equality._keyEquality.hash(key) +
- 7 * equality._valueEquality.hash(value)) & _HASH_MASK;
-
- bool operator==(Object other) {
- if (other is! _MapEntry) return false;
- _MapEntry otherEntry = other;
- return equality._keyEquality.equals(key, otherEntry.key) &&
- equality._valueEquality.equals(value, otherEntry.value);
-
- }
-}
-
-/**
- * Equality on maps.
- *
- * Two maps are equal if they have the same number of entries, and if the
- * entries of the two maps are pairwise equal on both key and value.
- */
-class MapEquality<K, V> implements Equality<Map<K, V>> {
- final Equality<K> _keyEquality;
- final Equality<V> _valueEquality;
- const MapEquality({ Equality<K> keys : const DefaultEquality(),
- Equality<V> values : const DefaultEquality() })
- : _keyEquality = keys, _valueEquality = values;
-
- bool equals(Map<K, V> e1, Map<K, V> e2) {
- if (identical(e1, e2)) return true;
- if (e1 == null || e2 == null) return false;
- int length = e1.length;
- if (length != e2.length) return false;
- Map<_MapEntry, int> equalElementCounts = new HashMap();
- for (K key in e1.keys) {
- _MapEntry entry = new _MapEntry(this, key, e1[key]);
- int count = equalElementCounts[entry];
- if (count == null) count = 0;
- equalElementCounts[entry] = count + 1;
- }
- for (K key in e2.keys) {
- _MapEntry entry = new _MapEntry(this, key, e2[key]);
- int count = equalElementCounts[entry];
- if (count == null || count == 0) return false;
- equalElementCounts[entry] = count - 1;
- }
- return true;
- }
-
- int hash(Map<K, V> map) {
- int hash = 0;
- for (K key in map.keys) {
- int keyHash = _keyEquality.hash(key);
- int valueHash = _valueEquality.hash(map[key]);
- hash = (hash + 3 * keyHash + 7 * valueHash) & _HASH_MASK;
- }
- hash = (hash + (hash << 3)) & _HASH_MASK;
- hash ^= (hash >> 11);
- hash = (hash + (hash << 15)) & _HASH_MASK;
- return hash;
- }
-
- bool isValidKey(Object o) => o is Map<K, V>;
-}
-
-/**
- * Combines several equalities into a single equality.
- *
- * Tries each equality in order, using [Equality.isValidKey], and returns
- * the result of the first equality that applies to the argument or arguments.
- *
- * For `equals`, the first equality that matches the first argument is used,
- * and if the second argument of `equals` is not valid for that equality,
- * it returns false.
- *
- * Because the equalities are tried in order, they should generally work on
- * disjoint types. Otherwise the multi-equality may give inconsistent results
- * for `equals(e1, e2)` and `equals(e2, e1)`. This can happen if one equality
- * considers only `e1` a valid key, and not `e2`, but an equality which is
- * checked later, allows both.
- */
-class MultiEquality<E> implements Equality<E> {
- final Iterable<Equality<E>> _equalities;
-
- const MultiEquality(Iterable<Equality<E>> equalities)
- : _equalities = equalities;
-
- bool equals(E e1, E e2) {
- for (Equality<E> eq in _equalities) {
- if (eq.isValidKey(e1)) return eq.isValidKey(e2) && eq.equals(e1, e2);
- }
- return false;
- }
-
- int hash(E e) {
- for (Equality<E> eq in _equalities) {
- if (eq.isValidKey(e)) return eq.hash(e);
- }
- return -1;
- }
-
- bool isValidKey(Object o) {
- for (Equality<E> eq in _equalities) {
- if (eq.isValidKey(o)) return true;
- }
- return false;
- }
-}
-
-/**
- * Deep equality on collections.
- *
- * Recognizes lists, sets, iterables and maps and compares their elements using
- * deep equality as well.
- *
- * Non-iterable/map objects are compared using a configurable base equality.
- *
- * Works in one of two modes: ordered or unordered.
- *
- * In ordered mode, lists and iterables are required to have equal elements
- * in the same order. In unordered mode, the order of elements in iterables
- * and lists are not importan.
- *
- * A list is only equal to another list, likewise for sets and maps. All other
- * iterables are compared as iterables only.
- */
-class DeepCollectionEquality implements Equality {
- final Equality _base;
- final bool _unordered;
- const DeepCollectionEquality([Equality base = const DefaultEquality()])
- : _base = base, _unordered = false;
-
- /**
- * Creates a deep equality on collections where the order of lists and
- * iterables are not considered important. That is, lists and iterables are
- * treated as unordered iterables.
- */
- const DeepCollectionEquality.unordered(
- [Equality base = const DefaultEquality()])
- : _base = base, _unordered = true;
-
- bool equals(e1, e2) {
- if (e1 is Set) {
- if (e2 is! Set) return false;
- return new SetEquality(this).equals(e1, e2);
- }
- if (e1 is Map) {
- if (e2 is! Map) return false;
- return new MapEquality(keys: this, values: this).equals(e1, e2);
- }
- if (!_unordered) {
- if (e1 is List) {
- if (e2 is! List) return false;
- return new ListEquality(this).equals(e1, e2);
- }
- if (e1 is Iterable) {
- if (e2 is! Iterable) return false;
- return new IterableEquality(this).equals(e1, e2);
- }
- } else if (e1 is Iterable) {
- if (e2 is! Iterable) return false;
- if (e1 is List != e2 is List) return false;
- return new UnorderedIterableEquality(this).equals(e1, e2);
- }
- return _base.equals(e1, e2);
- }
-
- int hash(Object o) {
- if (o is Set) return new SetEquality(this).hash(o);
- if (o is Map) return new MapEquality(keys: this, values: this).hash(o);
- if (!_unordered) {
- if (o is List) return new ListEquality(this).hash(o);
- if (o is Iterable) return new IterableEquality(this).hash(o);
- } else if (o is Iterable) {
- return new UnorderedIterableEquality(this).hash(o);
- }
- return _base.hash(o);
- }
-
- bool isValidKey(Object o) => o is Iterable || o is Map || _base.isValidKey(o);
-}
diff --git a/pkg/collection/lib/iterable_zip.dart b/pkg/collection/lib/iterable_zip.dart
deleted file mode 100644
index 772b07e..0000000
--- a/pkg/collection/lib/iterable_zip.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * Zipping multiple iterables into one iterable of tuples of values.
- */
-library dart.pkg.collection.iterable_zip;
-
-import "dart:collection" show IterableBase;
-
-/**
- * Iterable that iterates over lists of values from other iterables.
- *
- * When [iterator] is read, an [Iterator] is created for each [Iterable] in
- * the [Iterable] passed to the constructor.
- *
- * As long as all these iterators have a next value, those next values are
- * combined into a single list, which becomes the next value of this
- * [Iterable]'s [Iterator]. As soon as any of the iterators run out,
- * the zipped iterator also stops.
- */
-class IterableZip extends IterableBase<List> {
- final Iterable<Iterable> _iterables;
- IterableZip(Iterable<Iterable> iterables)
- : this._iterables = iterables;
-
- /**
- * Returns an iterator that combines values of the iterables' iterators
- * as long as they all have values.
- */
- Iterator<List> get iterator {
- List iterators = _iterables.map((x) => x.iterator).toList(growable: false);
- // TODO(lrn): Return an empty iterator directly if iterators is empty?
- return new _IteratorZip(iterators);
- }
-}
-
-class _IteratorZip implements Iterator<List> {
- final List<Iterator> _iterators;
- List _current;
- _IteratorZip(List iterators) : _iterators = iterators;
- bool moveNext() {
- if (_iterators.isEmpty) return false;
- for (int i = 0; i < _iterators.length; i++) {
- if (!_iterators[i].moveNext()) {
- _current = null;
- return false;
- }
- }
- _current = new List(_iterators.length);
- for (int i = 0; i < _iterators.length; i++) {
- _current[i] = _iterators[i].current;
- }
- return true;
- }
-
- List get current => _current;
-}
diff --git a/pkg/collection/lib/priority_queue.dart b/pkg/collection/lib/priority_queue.dart
deleted file mode 100644
index efb3239..0000000
--- a/pkg/collection/lib/priority_queue.dart
+++ /dev/null
@@ -1,396 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library dart.pkg.collection.priority_queue;
-
-import "dart:collection" show SplayTreeSet;
-
-/**
- * A priority queue is a priority based work-list of elements.
- *
- * The queue allows adding elements, and removing them again in priority order.
- */
-abstract class PriorityQueue<E> {
- /**
- * Number of elements in the queue.
- */
- int get length;
-
- /**
- * Whether the queue is empty.
- */
- bool get isEmpty;
-
- /**
- * Whether the queue has any elements.
- */
- bool get isNotEmpty;
-
- /**
- * Checks if [object] is in the queue.
- *
- * Returns true if the element is found.
- */
- bool contains(E object);
-
- /**
- * Adds element to the queue.
- *
- * The element will become the next to be removed by [removeFirst]
- * when all elements with higher priority have been removed.
- */
- void add(E element);
-
- /**
- * Adds all [elements] to the queue.
- */
- void addAll(Iterable<E> elements);
-
- /**
- * Returns the next element that will be returned by [removeFirst].
- *
- * The element is not removed from the queue.
- *
- * The queue must not be empty when this method is called.
- */
- E get first;
-
- /**
- * Removes and returns the element with the highest priority.
- *
- * Repeatedly calling this method, without adding element in between,
- * is guaranteed to return elements in non-decreasing order as, specified by
- * [comparison].
- *
- * The queue must not be empty when this method is called.
- */
- E removeFirst();
-
- /**
- * Removes an element that compares equal to [element] in the queue.
- *
- * Returns true if an element is found and removed,
- * and false if no equal element is found.
- */
- bool remove(E element);
-
- /**
- * Removes all the elements from this queue and returns them.
- *
- * The returned iterable has no specified order.
- */
- Iterable<E> removeAll();
-
- /**
- * Removes all the elements from this queue.
- */
- void clear();
-
- /**
- * Returns a list of the elements of this queue in priority order.
- *
- * The queue is not modified.
- *
- * The order is the order that the elements would be in if they were
- * removed from this queue using [removeFirst].
- */
- List<E> toList();
-
- /**
- * Return a comparator based set using the comparator of this queue.
- *
- * The queue is not modified.
- *
- * The returned [Set] is currently a [SplayTreeSet],
- * but this may change as other ordered sets are implemented.
- *
- * The set contains all the elements of this queue.
- * If an element occurs more than once in the queue,
- * the set will contain it only once.
- */
- Set<E> toSet();
-}
-
-/**
- * Heap based priority queue.
- *
- * The elements are kept in a heap structure,
- * where the element with the highest priority is immediately accessible,
- * and modifying a single element takes
- * logarithmic time in the number of elements on average.
- *
- * * The [add] and [removeFirst] operations take amortized logarithmic time,
- * O(log(n)), but may occasionally take linear time when growing the capacity
- * of the heap.
- * * The [addAll] operation works as doing repeated [add] operations.
- * * The [first] getter takes constant time, O(1).
- * * The [clear] and [removeAll] methods also take constant time, O(1).
- * * The [contains] and [remove] operations may need to search the entire
- * queue for the elements, taking O(n) time.
- * * The [toList] operation effectively sorts the elements, taking O(n*log(n))
- * time.
- * * The [toSet] operation effectively adds each element to the new set, taking
- * an expected O(n*log(n)) time.
- */
-class HeapPriorityQueue<E> implements PriorityQueue<E> {
- /**
- * Initial capacity of a queue when created, or when added to after a [clear].
- *
- * Number can be any positive value. Picking a size that gives a whole
- * number of "tree levels" in the heap is only done for aesthetic reasons.
- */
- static const int _INITIAL_CAPACITY = 7;
-
- /**
- * The comparison being used to compare the priority of elements.
- */
- final Comparator comparison;
-
- /**
- * List implementation of a heap.
- */
- List<E> _queue = new List<E>(_INITIAL_CAPACITY);
-
- /**
- * Number of elements in queue.
- *
- * The heap is implemented in the first [_length] entries of [_queue].
- */
- int _length = 0;
-
- /**
- * Create a new priority queue.
- *
- * The [comparison] is a [Comparator] used to compare the priority of
- * elements. An element that compares as less than another element has
- * a higher priority.
- *
- * If [comparison] is omitted, it defaults to [Comparable.compare].
- */
- HeapPriorityQueue([int comparison(E e1, E e2)])
- : comparison = (comparison != null) ? comparison : Comparable.compare;
-
- void add(E element) {
- _add(element);
- }
-
- void addAll(Iterable<E> elements) {
- for (E element in elements) {
- _add(element);
- }
- }
-
- void clear() {
- _queue = const [];
- _length = 0;
- }
-
- bool contains(E object) {
- return _locate(object) >= 0;
- }
-
- E get first {
- if (_length == 0) throw new StateError("No such element");
- return _queue[0];
- }
-
- bool get isEmpty => _length == 0;
-
- bool get isNotEmpty => _length != 0;
-
- int get length => _length;
-
- bool remove(E element) {
- int index = _locate(element);
- if (index < 0) return false;
- E last = _removeLast();
- if (index < _length) {
- int comp = comparison(last, element);
- if (comp <= 0) {
- _bubbleUp(last, index);
- } else {
- _bubbleDown(last, index);
- }
- }
- return true;
- }
-
- Iterable<E> removeAll() {
- List<E> result = _queue;
- int length = _length;
- _queue = const [];
- _length = 0;
- return result.take(length);
- }
-
- E removeFirst() {
- if (_length == 0) throw new StateError("No such element");
- E result = _queue[0];
- E last = _removeLast();
- if (_length > 0) {
- _bubbleDown(last, 0);
- }
- return result;
- }
-
- List<E> toList() {
- List<E> list = new List<E>()..length = _length;
- list.setRange(0, _length, _queue);
- list.sort(comparison);
- return list;
- }
-
- Set<E> toSet() {
- Set<E> set = new SplayTreeSet<E>(comparison);
- for (int i = 0; i < _length; i++) {
- set.add(_queue[i]);
- }
- return set;
- }
-
- /**
- * Returns some representation of the queue.
- *
- * The format isn't significant, and may change in the future.
- */
- String toString() {
- return _queue.take(_length).toString();
- }
-
- /**
- * Add element to the queue.
- *
- * Grows the capacity if the backing list is full.
- */
- void _add(E element) {
- if (_length == _queue.length) _grow();
- _bubbleUp(element, _length++);
- }
-
- /**
- * Find the index of an object in the heap.
- *
- * Returns -1 if the object is not found.
- */
- int _locate(E object) {
- if (_length == 0) return -1;
- // Count positions from one instad of zero. This gives the numbers
- // some nice properties. For example, all right children are odd,
- // their left sibling is even, and the parent is found by shifting
- // right by one.
- // Valid range for position is [1.._length], inclusive.
- int position = 1;
- // Pre-order depth first search, omit child nodes if the current
- // node has lower priority than [object], because all nodes lower
- // in the heap will also have lower priority.
- do {
- int index = position - 1;
- E element = _queue[index];
- int comp = comparison(element, object);
- if (comp == 0) return index;
- if (comp < 0) {
- // Element may be in subtree.
- // Continue with the left child, if it is there.
- int leftChildPosition = position * 2;
- if (leftChildPosition <= _length) {
- position = leftChildPosition;
- continue;
- }
- }
- // Find the next right sibling or right ancestor sibling.
- do {
- while (position.isOdd) {
- // While position is a right child, go to the parent.
- position >>= 1;
- }
- // Then go to the right sibling of the left-child.
- position += 1;
- } while (position > _length); // Happens if last element is a left child.
- } while (position != 1); // At root again. Happens for right-most element.
- return -1;
- }
-
- E _removeLast() {
- int newLength = _length - 1;
- E last = _queue[newLength];
- _queue[newLength] = null;
- _length = newLength;
- return last;
- }
-
- /**
- * Place [element] in heap at [index] or above.
- *
- * Put element into the empty cell at `index`.
- * While the `element` has higher priority than the
- * parent, swap it with the parent.
- */
- void _bubbleUp(E element, int index) {
- while (index > 0) {
- int parentIndex = (index - 1) ~/ 2;
- E parent = _queue[parentIndex];
- if (comparison(element, parent) > 0) break;
- _queue[index] = parent;
- index = parentIndex;
- }
- _queue[index] = element;
- }
-
- /**
- * Place [element] in heap at [index] or above.
- *
- * Put element into the empty cell at `index`.
- * While the `element` has lower priority than either child,
- * swap it with the highest priority child.
- */
- void _bubbleDown(E element, int index) {
- int rightChildIndex = index * 2 + 2;
- while (rightChildIndex < _length) {
- int leftChildIndex = rightChildIndex - 1;
- E leftChild = _queue[leftChildIndex];
- E rightChild = _queue[rightChildIndex];
- int comp = comparison(leftChild, rightChild);
- int minChildIndex;
- E minChild;
- if (comp < 0) {
- minChild = leftChild;
- minChildIndex = leftChildIndex;
- } else {
- minChild = rightChild;
- minChildIndex = rightChildIndex;
- }
- comp = comparison(element, minChild);
- if (comp <= 0) {
- _queue[index] = element;
- return;
- }
- _queue[index] = minChild;
- index = minChildIndex;
- rightChildIndex = index * 2 + 2;
- }
- int leftChildIndex = rightChildIndex - 1;
- if (leftChildIndex < _length) {
- E child = _queue[leftChildIndex];
- int comp = comparison(element, child);
- if (comp > 0) {
- _queue[index] = child;
- index = leftChildIndex;
- }
- }
- _queue[index] = element;
- }
-
- /**
- * Grows the capacity of the list holding the heap.
- *
- * Called when the list is full.
- */
- void _grow() {
- int newCapacity = _queue.length * 2 + 1;
- if (newCapacity < _INITIAL_CAPACITY) newCapacity = _INITIAL_CAPACITY;
- List<E> newQueue = new List<E>(newCapacity);
- newQueue.setRange(0, _length, _queue);
- _queue = newQueue;
- }
-}
diff --git a/pkg/collection/lib/src/canonicalized_map.dart b/pkg/collection/lib/src/canonicalized_map.dart
deleted file mode 100644
index f1cd859..0000000
--- a/pkg/collection/lib/src/canonicalized_map.dart
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library dart.pkg.collection.canonicalized_map;
-
-import 'dart:collection';
-
-import 'utils.dart';
-
-/**
- * A map whose keys are converted to canonical values of type `C`.
- *
- * This is useful for using case-insensitive String keys, for example. It's more
- * efficient than a [LinkedHashMap] with a custom equality operator because it
- * only canonicalizes each key once, rather than doing so for each comparison.
- *
- * By default, `null` is allowed as a key. It can be forbidden via the
- * `isValidKey` parameter.
- */
-class CanonicalizedMap<C, K, V> implements Map<K, V> {
- final Function _canonicalize;
-
- final Function _isValidKeyFn;
-
- final _base = new Map<C, Pair<K, V>>();
-
- /**
- * Creates an empty canonicalized map.
- *
- * The [canonicalize] function should return the canonical value for the given
- * key. Keys with the same canonical value are considered equivalent.
- *
- * The [isValidKey] function is called before calling [canonicalize] for
- * methods that take arbitrary objects. It can be used to filter out keys that
- * can't be canonicalized.
- */
- CanonicalizedMap(C canonicalize(K key), {bool isValidKey(K key)})
- : _canonicalize = canonicalize,
- _isValidKeyFn = isValidKey;
-
- /**
- * Creates a canonicalized map that is initialized with the key/value pairs of
- * [other].
- *
- * The [canonicalize] function should return the canonical value for the given
- * key. Keys with the same canonical value are considered equivalent.
- *
- * The [isValidKey] function is called before calling [canonicalize] for
- * methods that take arbitrary objects. It can be used to filter out keys that
- * can't be canonicalized.
- */
- CanonicalizedMap.from(Map<K, V> other, C canonicalize(K key),
- {bool isValidKey(K key)})
- : _canonicalize = canonicalize,
- _isValidKeyFn = isValidKey {
- addAll(other);
- }
-
- V operator [](Object key) {
- if (!_isValidKey(key)) return null;
- var pair = _base[_canonicalize(key)];
- return pair == null ? null : pair.last;
- }
-
- void operator []=(K key, V value) {
- _base[_canonicalize(key)] = new Pair(key, value);
- }
-
- void addAll(Map<K, V> other) {
- other.forEach((key, value) => this[key] = value);
- }
-
- void clear() {
- _base.clear();
- }
-
- bool containsKey(Object key) {
- if (!_isValidKey(key)) return false;
- return _base.containsKey(_canonicalize(key));
- }
-
- bool containsValue(Object value) =>
- _base.values.any((pair) => pair.last == value);
-
- void forEach(void f(K key, V value)) {
- _base.forEach((key, pair) => f(pair.first, pair.last));
- }
-
- bool get isEmpty => _base.isEmpty;
-
- bool get isNotEmpty => _base.isNotEmpty;
-
- Iterable<K> get keys => _base.values.map((pair) => pair.first);
-
- int get length => _base.length;
-
- V putIfAbsent(K key, V ifAbsent()) {
- return _base.putIfAbsent(_canonicalize(key),
- () => new Pair(key, ifAbsent())).last;
- }
-
- V remove(Object key) {
- if (!_isValidKey(key)) return null;
- var pair = _base.remove(_canonicalize(key));
- return pair == null ? null : pair.last;
- }
-
- Iterable<V> get values => _base.values.map((pair) => pair.last);
-
- String toString() => Maps.mapToString(this);
-
- bool _isValidKey(Object key) => (key == null || key is K) &&
- (_isValidKeyFn == null || _isValidKeyFn(key));
-}
diff --git a/pkg/collection/lib/src/queue_list.dart b/pkg/collection/lib/src/queue_list.dart
deleted file mode 100644
index 0ef888f..0000000
--- a/pkg/collection/lib/src/queue_list.dart
+++ /dev/null
@@ -1,231 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:collection';
-
-/**
- * A class that efficiently implements both [Queue] and [List].
- */
-// TODO(nweiz): Currently this code is copied almost verbatim from
-// dart:collection. The only changes are to implement List and to remove methods
-// that are redundant with ListMixin. Remove or simplify it when issue 21330 is
-// fixed.
-class QueueList<E> extends Object with ListMixin<E> implements Queue<E> {
- static const int _INITIAL_CAPACITY = 8;
- List<E> _table;
- int _head;
- int _tail;
-
- /**
- * Create an empty queue.
- *
- * If [initialCapacity] is given, prepare the queue for at least that many
- * elements.
- */
- QueueList([int initialCapacity]) : _head = 0, _tail = 0 {
- if (initialCapacity == null || initialCapacity < _INITIAL_CAPACITY) {
- initialCapacity = _INITIAL_CAPACITY;
- } else if (!_isPowerOf2(initialCapacity)) {
- initialCapacity = _nextPowerOf2(initialCapacity);
- }
- assert(_isPowerOf2(initialCapacity));
- _table = new List<E>(initialCapacity);
- }
-
- /**
- * Create a queue initially containing the elements of [source].
- */
- factory QueueList.from(Iterable<E> source) {
- if (source is List) {
- int length = source.length;
- QueueList<E> queue = new QueueList(length + 1);
- assert(queue._table.length > length);
- List sourceList = source;
- queue._table.setRange(0, length, sourceList, 0);
- queue._tail = length;
- return queue;
- } else {
- return new QueueList<E>()..addAll(source);
- }
- }
-
- // Collection interface.
-
- void add(E element) {
- _add(element);
- }
-
- void addAll(Iterable<E> elements) {
- if (elements is List) {
- List list = elements;
- int addCount = list.length;
- int length = this.length;
- if (length + addCount >= _table.length) {
- _preGrow(length + addCount);
- // After preGrow, all elements are at the start of the list.
- _table.setRange(length, length + addCount, list, 0);
- _tail += addCount;
- } else {
- // Adding addCount elements won't reach _head.
- int endSpace = _table.length - _tail;
- if (addCount < endSpace) {
- _table.setRange(_tail, _tail + addCount, list, 0);
- _tail += addCount;
- } else {
- int preSpace = addCount - endSpace;
- _table.setRange(_tail, _tail + endSpace, list, 0);
- _table.setRange(0, preSpace, list, endSpace);
- _tail = preSpace;
- }
- }
- } else {
- for (E element in elements) _add(element);
- }
- }
-
- String toString() => IterableBase.iterableToFullString(this, "{", "}");
-
- // Queue interface.
-
- void addLast(E element) { _add(element); }
-
- void addFirst(E element) {
- _head = (_head - 1) & (_table.length - 1);
- _table[_head] = element;
- if (_head == _tail) _grow();
- }
-
- E removeFirst() {
- if (_head == _tail) throw new StateError("No element");
- E result = _table[_head];
- _table[_head] = null;
- _head = (_head + 1) & (_table.length - 1);
- return result;
- }
-
- E removeLast() {
- if (_head == _tail) throw new StateError("No element");
- _tail = (_tail - 1) & (_table.length - 1);
- E result = _table[_tail];
- _table[_tail] = null;
- return result;
- }
-
- // List interface.
-
- int get length => (_tail - _head) & (_table.length - 1);
-
- void set length(int value) {
- if (value < 0) throw new RangeError("Length $value may not be negative.");
-
- int delta = value - length;
- if (delta >= 0) {
- if (_table.length <= value) {
- _preGrow(value);
- }
- _tail = (_tail + delta) & (_table.length - 1);
- return;
- }
-
- int newTail = _tail + delta; // [delta] is negative.
- if (newTail >= 0) {
- _table.fillRange(newTail, _tail, null);
- } else {
- newTail += _table.length;
- _table.fillRange(0, _tail, null);
- _table.fillRange(newTail, _table.length, null);
- }
- _tail = newTail;
- }
-
- E operator [](int index) {
- if (index < 0 || index >= length) {
- throw new RangeError("Index $index must be in the range [0..$length).");
- }
-
- return _table[(_head + index) & (_table.length - 1)];
- }
-
- void operator[]=(int index, E value) {
- if (index < 0 || index >= length) {
- throw new RangeError("Index $index must be in the range [0..$length).");
- }
-
- _table[(_head + index) & (_table.length - 1)] = value;
- }
-
- // Internal helper functions.
-
- /**
- * Whether [number] is a power of two.
- *
- * Only works for positive numbers.
- */
- static bool _isPowerOf2(int number) => (number & (number - 1)) == 0;
-
- /**
- * Rounds [number] up to the nearest power of 2.
- *
- * If [number] is a power of 2 already, it is returned.
- *
- * Only works for positive numbers.
- */
- static int _nextPowerOf2(int number) {
- assert(number > 0);
- number = (number << 1) - 1;
- for(;;) {
- int nextNumber = number & (number - 1);
- if (nextNumber == 0) return number;
- number = nextNumber;
- }
- }
-
- /** Adds element at end of queue. Used by both [add] and [addAll]. */
- void _add(E element) {
- _table[_tail] = element;
- _tail = (_tail + 1) & (_table.length - 1);
- if (_head == _tail) _grow();
- }
-
- /**
- * Grow the table when full.
- */
- void _grow() {
- List<E> newTable = new List<E>(_table.length * 2);
- int split = _table.length - _head;
- newTable.setRange(0, split, _table, _head);
- newTable.setRange(split, split + _head, _table, 0);
- _head = 0;
- _tail = _table.length;
- _table = newTable;
- }
-
- int _writeToList(List<E> target) {
- assert(target.length >= length);
- if (_head <= _tail) {
- int length = _tail - _head;
- target.setRange(0, length, _table, _head);
- return length;
- } else {
- int firstPartSize = _table.length - _head;
- target.setRange(0, firstPartSize, _table, _head);
- target.setRange(firstPartSize, firstPartSize + _tail, _table, 0);
- return _tail + firstPartSize;
- }
- }
-
- /** Grows the table even if it is not full. */
- void _preGrow(int newElementCount) {
- assert(newElementCount >= length);
-
- // Add 1.5x extra room to ensure that there's room for more elements after
- // expansion.
- newElementCount += newElementCount >> 1;
- int newCapacity = _nextPowerOf2(newElementCount);
- List<E> newTable = new List<E>(newCapacity);
- _tail = _writeToList(newTable);
- _table = newTable;
- _head = 0;
- }
-}
diff --git a/pkg/collection/lib/src/unmodifiable_wrappers.dart b/pkg/collection/lib/src/unmodifiable_wrappers.dart
deleted file mode 100644
index 72b189c..0000000
--- a/pkg/collection/lib/src/unmodifiable_wrappers.dart
+++ /dev/null
@@ -1,247 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * Wrappers that prevent a List, Set, or Map object from being modified.
- *
- * The [Set] and [Map] wrappers allow reading from the wrapped collection,
- * but prohibit writing.
- *
- * The [List] wrapper prevents changes to the length of the wrapped list,
- * but allows changes to the contents.
- */
-part of dart.pkg.collection.wrappers;
-
-/**
- * A fixed-length list.
- *
- * A `NonGrowableListView` contains a [List] object and ensures that
- * its length does not change.
- * Methods that would change the length of the list,
- * such as [add] and [remove], throw an [UnsupportedError].
- * All other methods work directly on the underlying list.
- *
- * This class _does_ allow changes to the contents of the wrapped list.
- * You can, for example, [sort] the list.
- * Permitted operations defer to the wrapped list.
- */
-class NonGrowableListView<E> extends DelegatingList<E>
- with NonGrowableListMixin<E> {
- NonGrowableListView(List<E> listBase) : super(listBase);
-}
-
-/**
- * Mixin class that implements a throwing version of all list operations that
- * change the List's length.
- */
-abstract class NonGrowableListMixin<E> implements List<E> {
- static _throw() {
- throw new UnsupportedError(
- "Cannot change the length of a fixed-length list");
- }
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the length of the list are disallowed.
- */
- void set length(int newLength) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the length of the list are disallowed.
- */
- bool add(E value) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the length of the list are disallowed.
- */
- void addAll(Iterable<E> iterable) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the length of the list are disallowed.
- */
- void insert(int index, E element) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the length of the list are disallowed.
- */
- void insertAll(int index, Iterable<E> iterable) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the length of the list are disallowed.
- */
- bool remove(Object value) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the length of the list are disallowed.
- */
- E removeAt(int index) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the length of the list are disallowed.
- */
- E removeLast() => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the length of the list are disallowed.
- */
- void removeWhere(bool test(E element)) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the length of the list are disallowed.
- */
- void retainWhere(bool test(E element)) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the length of the list are disallowed.
- */
- void removeRange(int start, int end) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the length of the list are disallowed.
- */
- void replaceRange(int start, int end, Iterable<E> iterable) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the length of the list are disallowed.
- */
- void clear() => _throw();
-}
-
-/**
- * An unmodifiable set.
- *
- * An UnmodifiableSetView contains a [Set] object and ensures
- * that it does not change.
- * Methods that would change the set,
- * such as [add] and [remove], throw an [UnsupportedError].
- * Permitted operations defer to the wrapped set.
- */
-class UnmodifiableSetView<E> extends DelegatingSet<E>
- with UnmodifiableSetMixin<E> {
- UnmodifiableSetView(Set<E> setBase) : super(setBase);
-}
-
-/**
- * Mixin class that implements a throwing version of all set operations that
- * change the Set.
- */
-abstract class UnmodifiableSetMixin<E> implements Set<E> {
- _throw() {
- throw new UnsupportedError("Cannot modify an unmodifiable Set");
- }
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the set are disallowed.
- */
- bool add(E value) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the set are disallowed.
- */
- void addAll(Iterable<E> elements) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the set are disallowed.
- */
- bool remove(Object value) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the set are disallowed.
- */
- void removeAll(Iterable elements) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the set are disallowed.
- */
- void retainAll(Iterable elements) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the set are disallowed.
- */
- void removeWhere(bool test(E element)) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the set are disallowed.
- */
- void retainWhere(bool test(E element)) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the set are disallowed.
- */
- void clear() => _throw();
-}
-
-/**
- * An unmodifiable map.
- *
- * An UnmodifiableMapView contains a [Map] object and ensures
- * that it does not change.
- * Methods that would change the map,
- * such as [addAll] and [remove], throw an [UnsupportedError].
- * Permitted operations defer to the wrapped map.
- */
-class UnmodifiableMapView<K, V> extends DelegatingMap<K, V>
- with UnmodifiableMapMixin<K, V> {
- UnmodifiableMapView(Map<K, V> baseMap) : super(baseMap);
-}
-
-/**
- * Mixin class that implements a throwing version of all map operations that
- * change the Map.
- */
-abstract class UnmodifiableMapMixin<K, V> implements Map<K, V> {
- static _throw() {
- throw new UnsupportedError("Cannot modify an unmodifiable Map");
- }
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the map are disallowed.
- */
- void operator []=(K key, V value) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the map are disallowed.
- */
- V putIfAbsent(K key, V ifAbsent()) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the map are disallowed.
- */
- void addAll(Map<K, V> other) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the map are disallowed.
- */
- V remove(K key) => _throw();
-
- /**
- * Throws an [UnsupportedError];
- * operations that change the map are disallowed.
- */
- void clear() => _throw();
-}
diff --git a/pkg/collection/lib/src/utils.dart b/pkg/collection/lib/src/utils.dart
deleted file mode 100644
index c9c7537..0000000
--- a/pkg/collection/lib/src/utils.dart
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library dart.pkg.collection.utils;
-
-/// A pair of values.
-class Pair<E, F> {
- E first;
- F last;
-
- Pair(this.first, this.last);
-}
diff --git a/pkg/collection/lib/wrappers.dart b/pkg/collection/lib/wrappers.dart
deleted file mode 100644
index 509a966..0000000
--- a/pkg/collection/lib/wrappers.dart
+++ /dev/null
@@ -1,570 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * Delegating wrappers for [Iterable], [List], [Set], [Queue] and [Map].
- *
- * Also adds unmodifiable views for `Set` and `Map`, and a fixed length
- * view for `List`. The unmodifable list view from `dart:collection` is exported
- * as well, just for completeness.
- */
-library dart.pkg.collection.wrappers;
-
-import "dart:collection";
-import "dart:math" show Random;
-
-export "dart:collection" show UnmodifiableListView;
-
-export "src/canonicalized_map.dart";
-part "src/unmodifiable_wrappers.dart";
-
-/**
- * A base class for delegating iterables.
- *
- * Subclasses can provide a [_base] that should be delegated to. Unlike
- * [DelegatingIterable], this allows the base to be created on demand.
- */
-abstract class _DelegatingIterableBase<E> implements Iterable<E> {
- Iterable<E> get _base;
-
- const _DelegatingIterableBase();
-
- bool any(bool test(E element)) => _base.any(test);
-
- bool contains(Object element) => _base.contains(element);
-
- E elementAt(int index) => _base.elementAt(index);
-
- bool every(bool test(E element)) => _base.every(test);
-
- Iterable expand(Iterable f(E element)) => _base.expand(f);
-
- E get first => _base.first;
-
- E firstWhere(bool test(E element), {E orElse()}) =>
- _base.firstWhere(test, orElse: orElse);
-
- fold(initialValue, combine(previousValue, E element)) =>
- _base.fold(initialValue, combine);
-
- void forEach(void f(E element)) => _base.forEach(f);
-
- bool get isEmpty => _base.isEmpty;
-
- bool get isNotEmpty => _base.isNotEmpty;
-
- Iterator<E> get iterator => _base.iterator;
-
- String join([String separator = ""]) => _base.join(separator);
-
- E get last => _base.last;
-
- E lastWhere(bool test(E element), {E orElse()}) =>
- _base.lastWhere(test, orElse: orElse);
-
- int get length => _base.length;
-
- Iterable map(f(E element)) => _base.map(f);
-
- E reduce(E combine(E value, E element)) => _base.reduce(combine);
-
- E get single => _base.single;
-
- E singleWhere(bool test(E element)) => _base.singleWhere(test);
-
- Iterable<E> skip(int n) => _base.skip(n);
-
- Iterable<E> skipWhile(bool test(E value)) => _base.skipWhile(test);
-
- Iterable<E> take(int n) => _base.take(n);
-
- Iterable<E> takeWhile(bool test(E value)) => _base.takeWhile(test);
-
- List<E> toList({bool growable: true}) => _base.toList(growable: growable);
-
- Set<E> toSet() => _base.toSet();
-
- Iterable<E> where(bool test(E element)) => _base.where(test);
-
- String toString() => _base.toString();
-}
-
-/**
- * Creates an [Iterable] that delegates all operations to a base iterable.
- *
- * This class can be used hide non-`Iterable` methods of an iterable object,
- * or it can be extended to add extra functionality on top of an existing
- * iterable object.
- */
-class DelegatingIterable<E> extends _DelegatingIterableBase<E> {
- final Iterable<E> _base;
-
- /**
- * Create a wrapper that forwards operations to [base].
- */
- const DelegatingIterable(Iterable<E> base) : _base = base;
-}
-
-
-/**
- * Creates a [List] that delegates all operations to a base list.
- *
- * This class can be used hide non-`List` methods of a list object,
- * or it can be extended to add extra functionality on top of an existing
- * list object.
- */
-class DelegatingList<E> extends DelegatingIterable<E> implements List<E> {
- const DelegatingList(List<E> base) : super(base);
-
- List<E> get _listBase => _base;
-
- E operator [](int index) => _listBase[index];
-
- void operator []=(int index, E value) {
- _listBase[index] = value;
- }
-
- void add(E value) {
- _listBase.add(value);
- }
-
- void addAll(Iterable<E> iterable) {
- _listBase.addAll(iterable);
- }
-
- Map<int, E> asMap() => _listBase.asMap();
-
- void clear() {
- _listBase.clear();
- }
-
- void fillRange(int start, int end, [E fillValue]) {
- _listBase.fillRange(start, end, fillValue);
- }
-
- Iterable<E> getRange(int start, int end) => _listBase.getRange(start, end);
-
- int indexOf(E element, [int start = 0]) => _listBase.indexOf(element, start);
-
- void insert(int index, E element) {
- _listBase.insert(index, element);
- }
-
- void insertAll(int index, Iterable<E> iterable) {
- _listBase.insertAll(index, iterable);
- }
-
- int lastIndexOf(E element, [int start]) =>
- _listBase.lastIndexOf(element, start);
-
- void set length(int newLength) {
- _listBase.length = newLength;
- }
-
- bool remove(Object value) => _listBase.remove(value);
-
- E removeAt(int index) => _listBase.removeAt(index);
-
- E removeLast() => _listBase.removeLast();
-
- void removeRange(int start, int end) {
- _listBase.removeRange(start, end);
- }
-
- void removeWhere(bool test(E element)) {
- _listBase.removeWhere(test);
- }
-
- void replaceRange(int start, int end, Iterable<E> iterable) {
- _listBase.replaceRange(start, end, iterable);
- }
-
- void retainWhere(bool test(E element)) {
- _listBase.retainWhere(test);
- }
-
- Iterable<E> get reversed => _listBase.reversed;
-
- void setAll(int index, Iterable<E> iterable) {
- _listBase.setAll(index, iterable);
- }
-
- void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
- _listBase.setRange(start, end, iterable, skipCount);
- }
-
- void shuffle([Random random]) {
- _listBase.shuffle(random);
- }
-
- void sort([int compare(E a, E b)]) {
- _listBase.sort(compare);
- }
-
- List<E> sublist(int start, [int end]) => _listBase.sublist(start, end);
-}
-
-
-/**
- * Creates a [Set] that delegates all operations to a base set.
- *
- * This class can be used hide non-`Set` methods of a set object,
- * or it can be extended to add extra functionality on top of an existing
- * set object.
- */
-class DelegatingSet<E> extends DelegatingIterable<E> implements Set<E> {
- const DelegatingSet(Set<E> base) : super(base);
-
- Set<E> get _setBase => _base;
-
- bool add(E value) => _setBase.add(value);
-
- void addAll(Iterable<E> elements) {
- _setBase.addAll(elements);
- }
-
- void clear() {
- _setBase.clear();
- }
-
- bool containsAll(Iterable<Object> other) => _setBase.containsAll(other);
-
- Set<E> difference(Set<E> other) => _setBase.difference(other);
-
- Set<E> intersection(Set<Object> other) => _setBase.intersection(other);
-
- E lookup(E element) => _setBase.lookup(element);
-
- bool remove(Object value) => _setBase.remove(value);
-
- void removeAll(Iterable<Object> elements) {
- _setBase.removeAll(elements);
- }
-
- void removeWhere(bool test(E element)) {
- _setBase.removeWhere(test);
- }
-
- void retainAll(Iterable<Object> elements) {
- _setBase.retainAll(elements);
- }
-
- void retainWhere(bool test(E element)) {
- _setBase.retainWhere(test);
- }
-
- Set<E> union(Set<E> other) => _setBase.union(other);
-
- Set<E> toSet() => new DelegatingSet<E>(_setBase.toSet());
-}
-
-/**
- * Creates a [Queue] that delegates all operations to a base queue.
- *
- * This class can be used hide non-`Queue` methods of a queue object,
- * or it can be extended to add extra functionality on top of an existing
- * queue object.
- */
-class DelegatingQueue<E> extends DelegatingIterable<E> implements Queue<E> {
- const DelegatingQueue(Queue<E> queue) : super(queue);
-
- Queue<E> get _baseQueue => _base;
-
- void add(E value) {
- _baseQueue.add(value);
- }
-
- void addAll(Iterable<E> iterable) {
- _baseQueue.addAll(iterable);
- }
-
- void addFirst(E value) {
- _baseQueue.addFirst(value);
- }
-
- void addLast(E value) {
- _baseQueue.addLast(value);
- }
-
- void clear() {
- _baseQueue.clear();
- }
-
- bool remove(Object object) => _baseQueue.remove(object);
-
- void removeWhere(bool test(E element)) { _baseQueue.removeWhere(test); }
-
- void retainWhere(bool test(E element)) { _baseQueue.retainWhere(test); }
-
- E removeFirst() => _baseQueue.removeFirst();
-
- E removeLast() => _baseQueue.removeLast();
-}
-
-/**
- * Creates a [Map] that delegates all operations to a base map.
- *
- * This class can be used hide non-`Map` methods of an object that extends
- * `Map`, or it can be extended to add extra functionality on top of an existing
- * map object.
- */
-class DelegatingMap<K, V> implements Map<K, V> {
- final Map<K, V> _base;
-
- const DelegatingMap(Map<K, V> base) : _base = base;
-
- V operator [](Object key) => _base[key];
-
- void operator []=(K key, V value) {
- _base[key] = value;
- }
-
- void addAll(Map<K, V> other) {
- _base.addAll(other);
- }
-
- void clear() {
- _base.clear();
- }
-
- bool containsKey(Object key) => _base.containsKey(key);
-
- bool containsValue(Object value) => _base.containsValue(value);
-
- void forEach(void f(K key, V value)) {
- _base.forEach(f);
- }
-
- bool get isEmpty => _base.isEmpty;
-
- bool get isNotEmpty => _base.isNotEmpty;
-
- Iterable<K> get keys => _base.keys;
-
- int get length => _base.length;
-
- V putIfAbsent(K key, V ifAbsent()) => _base.putIfAbsent(key, ifAbsent);
-
- V remove(Object key) => _base.remove(key);
-
- Iterable<V> get values => _base.values;
-
- String toString() => _base.toString();
-}
-
-/**
- * An unmodifiable [Set] view of the keys of a [Map].
- *
- * The set delegates all operations to the underlying map.
- *
- * A `Map` can only contain each key once, so its keys can always
- * be viewed as a `Set` without any loss, even if the [Map.keys]
- * getter only shows an [Iterable] view of the keys.
- *
- * Note that [lookup] is not supported for this set.
- */
-class MapKeySet<E> extends _DelegatingIterableBase<E>
- with UnmodifiableSetMixin<E> {
- final Map<E, dynamic> _baseMap;
-
- MapKeySet(Map<E, dynamic> base) : _baseMap = base;
-
- Iterable<E> get _base => _baseMap.keys;
-
- bool contains(Object element) => _baseMap.containsKey(element);
-
- bool get isEmpty => _baseMap.isEmpty;
-
- bool get isNotEmpty => _baseMap.isNotEmpty;
-
- int get length => _baseMap.length;
-
- String toString() => "{${_base.join(', ')}}";
-
- bool containsAll(Iterable<Object> other) => other.every(contains);
-
- /**
- * Returns a new set with the the elements of [this] that are not in [other].
- *
- * That is, the returned set contains all the elements of this [Set] that are
- * not elements of [other] according to `other.contains`.
- *
- * Note that the returned set will use the default equality operation, which
- * may be different than the equality operation [this] uses.
- */
- Set<E> difference(Set<E> other) =>
- where((element) => !other.contains(element)).toSet();
-
- /**
- * Returns a new set which is the intersection between [this] and [other].
- *
- * That is, the returned set contains all the elements of this [Set] that are
- * also elements of [other] according to `other.contains`.
- *
- * Note that the returned set will use the default equality operation, which
- * may be different than the equality operation [this] uses.
- */
- Set<E> intersection(Set<Object> other) => where(other.contains).toSet();
-
- /**
- * Throws an [UnsupportedError] since there's no corresponding method for
- * [Map]s.
- */
- E lookup(E element) => throw new UnsupportedError(
- "MapKeySet doesn't support lookup().");
-
- /**
- * Returns a new set which contains all the elements of [this] and [other].
- *
- * That is, the returned set contains all the elements of this [Set] and all
- * the elements of [other].
- *
- * Note that the returned set will use the default equality operation, which
- * may be different than the equality operation [this] uses.
- */
- Set<E> union(Set<E> other) => toSet()..addAll(other);
-}
-
-/**
- * Creates a modifiable [Set] view of the values of a [Map].
- *
- * The `Set` view assumes that the keys of the `Map` can be uniquely determined
- * from the values. The `keyForValue` function passed to the constructor finds
- * the key for a single value. The `keyForValue` function should be consistent
- * with equality. If `value1 == value2` then `keyForValue(value1)` and
- * `keyForValue(value2)` should be considered equal keys by the underlying map,
- * and vice versa.
- *
- * Modifying the set will modify the underlying map based on the key returned by
- * `keyForValue`.
- *
- * If the `Map` contents are not compatible with the `keyForValue` function, the
- * set will not work consistently, and may give meaningless responses or do
- * inconsistent updates.
- *
- * This set can, for example, be used on a map from database record IDs to the
- * records. It exposes the records as a set, and allows for writing both
- * `recordSet.add(databaseRecord)` and `recordMap[id]`.
- *
- * Effectively, the map will act as a kind of index for the set.
- */
-class MapValueSet<K, V> extends _DelegatingIterableBase<V> implements Set<V> {
- final Map<K, V> _baseMap;
- final Function _keyForValue;
-
- /**
- * Creates a new [MapValueSet] based on [base].
- *
- * [keyForValue] returns the key in the map that should be associated with the
- * given value. The set's notion of equality is identical to the equality of
- * the return values of [keyForValue].
- */
- MapValueSet(Map<K, V> base, K keyForValue(V value))
- : _baseMap = base,
- _keyForValue = keyForValue;
-
- Iterable<V> get _base => _baseMap.values;
-
- bool contains(Object element) {
- if (element != null && element is! V) return false;
- return _baseMap.containsKey(_keyForValue(element));
- }
-
- bool get isEmpty => _baseMap.isEmpty;
-
- bool get isNotEmpty => _baseMap.isNotEmpty;
-
- int get length => _baseMap.length;
-
- String toString() => toSet().toString();
-
- bool add(V value) {
- K key = _keyForValue(value);
- bool result = false;
- _baseMap.putIfAbsent(key, () {
- result = true;
- return value;
- });
- return result;
- }
-
- void addAll(Iterable<V> elements) => elements.forEach(add);
-
- void clear() => _baseMap.clear();
-
- bool containsAll(Iterable<Object> other) => other.every(contains);
-
- /**
- * Returns a new set with the the elements of [this] that are not in [other].
- *
- * That is, the returned set contains all the elements of this [Set] that are
- * not elements of [other] according to `other.contains`.
- *
- * Note that the returned set will use the default equality operation, which
- * may be different than the equality operation [this] uses.
- */
- Set<V> difference(Set<V> other) =>
- where((element) => !other.contains(element)).toSet();
-
- /**
- * Returns a new set which is the intersection between [this] and [other].
- *
- * That is, the returned set contains all the elements of this [Set] that are
- * also elements of [other] according to `other.contains`.
- *
- * Note that the returned set will use the default equality operation, which
- * may be different than the equality operation [this] uses.
- */
- Set<V> intersection(Set<Object> other) => where(other.contains).toSet();
-
- V lookup(V element) => _baseMap[_keyForValue(element)];
-
- bool remove(Object value) {
- if (value != null && value is! V) return false;
- var key = _keyForValue(value);
- if (!_baseMap.containsKey(key)) return false;
- _baseMap.remove(key);
- return true;
- }
-
- void removeAll(Iterable<Object> elements) => elements.forEach(remove);
-
- void removeWhere(bool test(V element)) {
- var toRemove = [];
- _baseMap.forEach((key, value) {
- if (test(value)) toRemove.add(key);
- });
- toRemove.forEach(_baseMap.remove);
- }
-
- void retainAll(Iterable<Object> elements) {
- var valuesToRetain = new Set<V>.identity();
- for (var element in elements) {
- if (element != null && element is! V) continue;
- var key = _keyForValue(element);
- if (!_baseMap.containsKey(key)) continue;
- valuesToRetain.add(_baseMap[key]);
- }
-
- var keysToRemove = [];
- _baseMap.forEach((k, v) {
- if (!valuesToRetain.contains(v)) keysToRemove.add(k);
- });
- keysToRemove.forEach(_baseMap.remove);
- }
-
- void retainWhere(bool test(V element)) =>
- removeWhere((element) => !test(element));
-
- /**
- * Returns a new set which contains all the elements of [this] and [other].
- *
- * That is, the returned set contains all the elements of this [Set] and all
- * the elements of [other].
- *
- * Note that the returned set will use the default equality operation, which
- * may be different than the equality operation [this] uses.
- */
- Set<V> union(Set<V> other) => toSet()..addAll(other);
-}
diff --git a/pkg/collection/pubspec.yaml b/pkg/collection/pubspec.yaml
deleted file mode 100644
index b4396b9..0000000
--- a/pkg/collection/pubspec.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-name: collection
-version: 1.1.0
-author: Dart Team <misc@dartlang.org>
-description: Collections and utilities functions and classes related to collections.
-homepage: http://www.dartlang.org
-environment:
- sdk: '>=1.5.0 <2.0.0'
-dev_dependencies:
- unittest: '>=0.9.0 <0.11.0'
diff --git a/pkg/collection/test/algorithms_test.dart b/pkg/collection/test/algorithms_test.dart
deleted file mode 100644
index 933e268..0000000
--- a/pkg/collection/test/algorithms_test.dart
+++ /dev/null
@@ -1,271 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// Tests algorithm utilities.
-
-import "package:collection/collection.dart";
-import "package:unittest/unittest.dart";
-import 'dart:math';
-
-void main() {
- void testShuffle(List list) {
- List copy = list.toList();
- shuffle(list);
- expect(new UnorderedIterableEquality().equals(list, copy), isTrue);
- }
-
- test("Shuffle 0", () {
- testShuffle([]);
- });
- test("Shuffle 1", () {
- testShuffle([1]);
- });
- test("Shuffle 3", () {
- testShuffle([1, 2, 3]);
- });
- test("Shuffle 10", () {
- testShuffle([1, 2, 3, 4, 5, 1, 3, 5, 7, 9]);
- });
- test("Shuffle shuffles", () {
- List l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
- List c = l.toList();
- int count = 0;
- do {
- shuffle(l);
- if (!const ListEquality().equals(c, l)) return;
- // Odds of not changing the order should be one in ~ 16! ~= 2e+13.
- // Repeat this 10 times, and the odds of accidentally shuffling to the
- // same result every time is disappearingly tiny.
- count++;
- // If this happens even once, it's ok to report it.
- print("Failed shuffle $count times");
- if (count == 10) fail("Shuffle didn't change order.");
- } while (true);
- });
- test("Shuffle sublist", (){
- List l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
- List c = l.toList();
- shuffle(l, 4, 12);
- expect(const IterableEquality().equals(l.getRange(0, 4),
- c.getRange(0, 4)), isTrue);
- expect(const IterableEquality().equals(l.getRange(12, 16),
- c.getRange(12, 16)), isTrue);
- expect(const UnorderedIterableEquality().equals(l.getRange(4, 12),
- c.getRange(4, 12)),
- isTrue);
-
- });
-
- test("binsearch0", () {
- expect(binarySearch([], 2), equals(-1));
- });
-
- test("binsearch1", () {
- expect(binarySearch([5], 2), equals(-1));
- expect(binarySearch([5], 5), equals(0));
- expect(binarySearch([5], 7), equals(-1));
- });
-
- test("binsearch3", () {
- expect(binarySearch([0, 5, 10], -1), equals(-1));
- expect(binarySearch([0, 5, 10], 0), equals(0));
- expect(binarySearch([0, 5, 10], 2), equals(-1));
- expect(binarySearch([0, 5, 10], 5), equals(1));
- expect(binarySearch([0, 5, 10], 7), equals(-1));
- expect(binarySearch([0, 5, 10], 10), equals(2));
- expect(binarySearch([0, 5, 10], 12), equals(-1));
- });
-
- test("binsearchCompare0", () {
- expect(binarySearch([], new C(2), compare: compareC), equals(-1));
- });
-
- test("binsearchCompare1", () {
- var l1 = [new C(5)];
- expect(binarySearch(l1, new C(2), compare: compareC), equals(-1));
- expect(binarySearch(l1, new C(5), compare: compareC), equals(0));
- expect(binarySearch(l1, new C(7), compare: compareC), equals(-1));
- });
-
- test("binsearchCompare3", () {
- var l3 = [new C(0), new C(5), new C(10)];
- expect(binarySearch(l3, new C(-1), compare: compareC), equals(-1));
- expect(binarySearch(l3, new C(0), compare: compareC), equals(0));
- expect(binarySearch(l3, new C(2), compare: compareC), equals(-1));
- expect(binarySearch(l3, new C(5), compare: compareC), equals(1));
- expect(binarySearch(l3, new C(7), compare: compareC), equals(-1));
- expect(binarySearch(l3, new C(10), compare: compareC), equals(2));
- expect(binarySearch(l3, new C(12), compare: compareC), equals(-1));
- });
-
- test("insertionSortRandom", () {
- Random random = new Random();
- for (int i = 0; i < 25; i++) {
- List list = new List(i);
- for (int j = 0; j < i; j++) {
- list[j] = random.nextInt(25); // Expect some equal elements.
- }
- insertionSort(list);
- for (int j = 1; j < i; j++) {
- expect(list[j - 1], lessThanOrEqualTo(list[j]));
- }
- }
- });
-
- test("insertionSortSubRanges", () {
- List l = [6, 5, 4, 3, 2, 1];
- insertionSort(l, start: 2, end: 4);
- expect(l, equals([6, 5, 3, 4, 2, 1]));
- insertionSort(l, start: 1, end: 1);
- expect(l, equals([6, 5, 3, 4, 2, 1]));
- insertionSort(l, start: 4, end: 6);
- expect(l, equals([6, 5, 3, 4, 1, 2]));
- insertionSort(l, start: 0, end: 2);
- expect(l, equals([5, 6, 3, 4, 1, 2]));
- insertionSort(l, start: 0, end: 6);
- expect(l, equals([1, 2, 3, 4, 5, 6]));
- });
-
- test("insertionSortSpecialCases", () {
- List l = [6, 6, 6, 6, 6, 6];
- insertionSort(l);
- expect(l, equals([6, 6, 6, 6, 6, 6]));
-
- l = [6, 6, 3, 3, 0, 0];
- insertionSort(l);
- expect(l, equals([0, 0, 3, 3, 6, 6]));
- });
-
- test("MergeSortRandom", () {
- Random random = new Random();
- for (int i = 0; i < 250; i += 1) {
- List list = new List(i);
- for (int j = 0; j < i; j++) {
- list[j] = random.nextInt(i); // Expect some equal elements.
- }
- mergeSort(list);
- for (int j = 1; j < i; j++) {
- expect(list[j - 1], lessThanOrEqualTo(list[j]));
- }
- }
- });
-
- test("MergeSortPreservesOrder", () {
- Random random = new Random();
- // Small case where only insertion call is called,
- // larger case where the internal moving insertion sort is used
- // larger cases with multiple splittings, numbers just around a power of 2.
- for (int size in [8, 50, 511, 512, 513]) {
- List list = new List(size);
- // Class OC compares using id.
- // With size elements with id's in the range 0..size/4, a number of
- // collisions are guaranteed. These should be sorted so that the "order"
- // part of the objects are still in order.
- for (int i = 0; i < size; i++) {
- list[i] = new OC(random.nextInt(size >> 2), i);
- }
- mergeSort(list);
- OC prev = list[0];
- for (int i = 1; i < size; i++) {
- OC next = list[i];
- expect(prev.id, lessThanOrEqualTo(next.id));
- if (next.id == prev.id) {
- expect(prev.order, lessThanOrEqualTo(next.order));
- }
- prev = next;
- }
- // Reverse compare on part of list.
- List copy = list.toList();
- int min = size >> 2;
- int max = size - min;
- mergeSort(list, start: min, end: max, compare: (a, b) => b.compareTo(a));
- prev = list[min];
- for (int i = min + 1; i < max; i++) {
- OC next = list[i];
- expect(prev.id, greaterThanOrEqualTo(next.id));
- if (next.id == prev.id) {
- expect(prev.order, lessThanOrEqualTo(next.order));
- }
- prev = next;
- }
- // Equals on OC objects is identity, so this means the parts before min,
- // and the parts after max, didn't change at all.
- expect(list.sublist(0, min), equals(copy.sublist(0, min)));
- expect(list.sublist(max), equals(copy.sublist(max)));
- }
- });
-
- test("MergeSortSpecialCases", () {
- for (int size in [511, 512, 513]) {
- // All equal.
- List list = new List(size);
- for (int i = 0; i < size; i++) {
- list[i] = new OC(0, i);
- }
- mergeSort(list);
- for (int i = 0; i < size; i++) {
- expect(list[i].order, equals(i));
- }
- // All but one equal, first.
- list[0] = new OC(1, 0);
- for (int i = 1; i < size; i++) {
- list[i] = new OC(0, i);
- }
- mergeSort(list);
- for (int i = 0; i < size - 1; i++) {
- expect(list[i].order, equals(i + 1));
- }
- expect(list[size - 1].order, equals(0));
-
- // All but one equal, last.
- for (int i = 0; i < size - 1; i++) {
- list[i] = new OC(0, i);
- }
- list[size - 1] = new OC(-1, size - 1);
- mergeSort(list);
- expect(list[0].order, equals(size - 1));
- for (int i = 1; i < size; i++) {
- expect(list[i].order, equals(i - 1));
- }
-
- // Reversed.
- for (int i = 0; i < size; i++) {
- list[i] = new OC(size - 1 - i, i);
- }
- mergeSort(list);
- for (int i = 0; i < size; i++) {
- expect(list[i].id, equals(i));
- expect(list[i].order, equals(size - 1 - i));
- }
- }
- });
-
- test("Reverse", () {
- List l = [6, 5, 4, 3, 2, 1];
- reverse(l, 2, 4);
- expect(l, equals([6, 5, 3, 4, 2, 1]));
- reverse(l, 1, 1);
- expect(l, equals([6, 5, 3, 4, 2, 1]));
- reverse(l, 4, 6);
- expect(l, equals([6, 5, 3, 4, 1, 2]));
- reverse(l, 0, 2);
- expect(l, equals([5, 6, 3, 4, 1, 2]));
- reverse(l, 0, 6);
- expect(l, equals([2, 1, 4, 3, 6, 5]));
- });
-}
-
-class C {
- final int id;
- C(this.id);
-}
-int compareC(C one, C other) => one.id - other.id;
-
-class OC implements Comparable<OC> {
- final int id;
- final int order;
- OC(this.id, this.order);
- int compareTo(OC other) => id - other.id;
- String toString() => "OC[$id,$order]";
-}
diff --git a/pkg/collection/test/canonicalized_map_test.dart b/pkg/collection/test/canonicalized_map_test.dart
deleted file mode 100644
index 1793777..0000000
--- a/pkg/collection/test/canonicalized_map_test.dart
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "package:collection/collection.dart";
-import "package:unittest/unittest.dart";
-
-void main() {
- group("with an empty canonicalized map", () {
- var map;
- setUp(() {
- map = new CanonicalizedMap<int, String, String>(int.parse,
- isValidKey: new RegExp(r"^\d+$").hasMatch);
- });
-
- test("canonicalizes keys on set and get", () {
- map["1"] = "value";
- expect(map["01"], equals("value"));
- });
-
- test("get returns null for uncanonicalizable key", () {
- expect(map["foo"], isNull);
- });
-
- test("canonicalizes keys for addAll", () {
- map.addAll({
- "1": "value 1",
- "2": "value 2",
- "3": "value 3"
- });
- expect(map["01"], equals("value 1"));
- expect(map["02"], equals("value 2"));
- expect(map["03"], equals("value 3"));
- });
-
- test("uses the final value for addAll collisions", () {
- map.addAll({
- "1": "value 1",
- "01": "value 2",
- "001": "value 3"
- });
- expect(map.length, equals(1));
- expect(map["0001"], equals("value 3"));
- });
-
- test("clear clears the map", () {
- map.addAll({
- "1": "value 1",
- "2": "value 2",
- "3": "value 3"
- });
- expect(map, isNot(isEmpty));
- map.clear();
- expect(map, isEmpty);
- });
-
- test("canonicalizes keys for containsKey", () {
- map["1"] = "value";
- expect(map.containsKey("01"), isTrue);
- expect(map.containsKey("2"), isFalse);
- });
-
- test("containsKey returns false for uncanonicalizable key", () {
- expect(map.containsKey("foo"), isFalse);
- });
-
- test("canonicalizes keys for putIfAbsent", () {
- map["1"] = "value";
- expect(map.putIfAbsent("01", () => throw "shouldn't run"),
- equals("value"));
- expect(map.putIfAbsent("2", () => "new value"), equals("new value"));
- });
-
- test("canonicalizes keys for remove", () {
- map["1"] = "value";
- expect(map.remove("2"), isNull);
- expect(map.remove("01"), equals("value"));
- expect(map, isEmpty);
- });
-
- test("remove returns null for uncanonicalizable key", () {
- expect(map.remove("foo"), isNull);
- });
-
- test("containsValue returns whether a value is in the map", () {
- map["1"] = "value";
- expect(map.containsValue("value"), isTrue);
- expect(map.containsValue("not value"), isFalse);
- });
-
- test("isEmpty returns whether the map is empty", () {
- expect(map.isEmpty, isTrue);
- map["1"] = "value";
- expect(map.isEmpty, isFalse);
- map.remove("01");
- expect(map.isEmpty, isTrue);
- });
-
- test("isNotEmpty returns whether the map isn't empty", () {
- expect(map.isNotEmpty, isFalse);
- map["1"] = "value";
- expect(map.isNotEmpty, isTrue);
- map.remove("01");
- expect(map.isNotEmpty, isFalse);
- });
-
- test("length returns the number of pairs in the map", () {
- expect(map.length, equals(0));
- map["1"] = "value 1";
- expect(map.length, equals(1));
- map["01"] = "value 01";
- expect(map.length, equals(1));
- map["02"] = "value 02";
- expect(map.length, equals(2));
- });
-
- test("uses original keys for keys", () {
- map["001"] = "value 1";
- map["02"] = "value 2";
- expect(map.keys, equals(["001", "02"]));
- });
-
- test("uses original keys for forEach", () {
- map["001"] = "value 1";
- map["02"] = "value 2";
-
- var keys = [];
- map.forEach((key, value) => keys.add(key));
- expect(keys, equals(["001", "02"]));
- });
-
- test("values returns all values in the map", () {
- map.addAll({
- "1": "value 1",
- "01": "value 01",
- "2": "value 2",
- "03": "value 03"
- });
-
- expect(map.values, equals(["value 01", "value 2", "value 03"]));
- });
- });
-
- group("CanonicalizedMap.from", () {
- test("canonicalizes its keys", () {
- var map = new CanonicalizedMap.from({
- "1": "value 1",
- "2": "value 2",
- "3": "value 3"
- }, int.parse);
- expect(map["01"], equals("value 1"));
- expect(map["02"], equals("value 2"));
- expect(map["03"], equals("value 3"));
- });
-
- test("uses the final value for collisions", () {
- var map = new CanonicalizedMap.from({
- "1": "value 1",
- "01": "value 2",
- "001": "value 3"
- }, int.parse);
- expect(map.length, equals(1));
- expect(map["0001"], equals("value 3"));
- });
- });
-}
diff --git a/pkg/collection/test/equality_test.dart b/pkg/collection/test/equality_test.dart
deleted file mode 100644
index edabfd5..0000000
--- a/pkg/collection/test/equality_test.dart
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Tests equality utilities.
-
-import "dart:collection";
-import "package:collection/collection.dart";
-import "package:unittest/unittest.dart";
-
-main() {
- test("IterableEquality - List", () {
- var l1 = [1, 2, 3, 4, 5];
- var l2 = [1.0, 2.0, 3.0, 4.0, 5.0];
- expect(const IterableEquality().equals(l1, l2), isTrue);
- Equality iterId = const IterableEquality(const IdentityEquality());
- expect(iterId.equals(l1, l2), isFalse); /// 01: ok
- });
-
- test("IterableEquality - LinkedSet", () {
- var l1 = new LinkedHashSet.from([1, 2, 3, 4, 5]);
- var l2 = new LinkedHashSet.from([1.0, 2.0, 3.0, 4.0, 5.0]);
- expect(const IterableEquality().equals(l1, l2), isTrue);
- Equality iterId = const IterableEquality(const IdentityEquality());
- expect(iterId.equals(l1, l2), isFalse); /// 02: ok
- });
-
- test("ListEquality", () {
- var l1 = [1, 2, 3, 4, 5];
- var l2 = [1.0, 2.0, 3.0, 4.0, 5.0];
- expect(const ListEquality().equals(l1, l2),
- isTrue);
- Equality listId = const ListEquality(const IdentityEquality());
- expect(listId.equals(l1, l2), isFalse); /// 03: ok
- });
-
- test("ListInequality length", () {
- var l1 = [1, 2, 3, 4, 5];
- var l2 = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0];
- expect(const ListEquality().equals(l1, l2),
- isFalse);
- expect(const ListEquality(const IdentityEquality()).equals(l1, l2),
- isFalse);
- });
-
- test("ListInequality value", () {
- var l1 = [1, 2, 3, 4, 5];
- var l2 = [1.0, 2.0, 3.0, 4.0, 6.0];
- expect(const ListEquality().equals(l1, l2),
- isFalse);
- expect(const ListEquality(const IdentityEquality()).equals(l1, l2),
- isFalse);
- });
-
- test("UnorderedIterableEquality", () {
- var l1 = [1, 2, 3, 4, 5];
- var l2 = [1.0, 3.0, 5.0, 4.0, 2.0];
- expect(const UnorderedIterableEquality().equals(l1, l2),
- isTrue);
- Equality uniterId =
- const UnorderedIterableEquality(const IdentityEquality());
- expect(uniterId.equals(l1, l2), isFalse); /// 04: ok
- });
-
- test("UnorderedIterableInequality length", () {
- var l1 = [1, 2, 3, 4, 5];
- var l2 = [1.0, 3.0, 5.0, 4.0, 2.0, 1.0];
- expect(const UnorderedIterableEquality().equals(l1, l2),
- isFalse);
- expect(const UnorderedIterableEquality(const IdentityEquality())
- .equals(l1, l2),
- isFalse);
- });
-
- test("UnorderedIterableInequality values", () {
- var l1 = [1, 2, 3, 4, 5];
- var l2 = [1.0, 3.0, 5.0, 4.0, 6.0];
- expect(const UnorderedIterableEquality().equals(l1, l2),
- isFalse);
- expect(const UnorderedIterableEquality(const IdentityEquality())
- .equals(l1, l2),
- isFalse);
- });
-
- test("SetEquality", () {
- var l1 = new HashSet.from([1, 2, 3, 4, 5]);
- var l2 = new LinkedHashSet.from([1.0, 3.0, 5.0, 4.0, 2.0]);
- expect(const SetEquality().equals(l1, l2),
- isTrue);
- Equality setId = const SetEquality(const IdentityEquality());
- expect(setId.equals(l1, l2), isFalse); /// 05: ok
- });
-
- test("SetInequality length", () {
- var l1 = new HashSet.from([1, 2, 3, 4, 5]);
- var l2 = new LinkedHashSet.from([1.0, 3.0, 5.0, 4.0, 2.0, 6.0]);
- expect(const SetEquality().equals(l1, l2),
- isFalse);
- expect(const SetEquality(const IdentityEquality()).equals(l1, l2),
- isFalse);
- });
-
- test("SetInequality value", () {
- var l1 = new HashSet.from([1, 2, 3, 4, 5]);
- var l2 = new LinkedHashSet.from([1.0, 3.0, 5.0, 4.0, 6.0]);
- expect(const SetEquality().equals(l1, l2),
- isFalse);
- expect(const SetEquality(const IdentityEquality()).equals(l1, l2),
- isFalse);
- });
-
- var map1a = {"x": [1, 2, 3], "y": [true, false, null]};
- var map1b = {"x": [4.0, 5.0, 6.0], "y": [false, true, null]};
- var map2a = {"x": [3.0, 2.0, 1.0], "y": [false, true, null]};
- var map2b = {"x": [6, 5, 4], "y": [null, false, true]};
- var l1 = [map1a, map1b];
- var l2 = [map2a, map2b];
- var s1 = new Set.from(l1);
- var s2 = new Set.from([map2b, map2a]);
-
- test("RecursiveEquality", () {
- const unordered = const UnorderedIterableEquality();
- expect(unordered.equals(map1a["x"], map2a["x"]),
- isTrue);
- expect(unordered.equals(map1a["y"], map2a["y"]),
- isTrue);
- expect(unordered.equals(map1b["x"], map2b["x"]),
- isTrue);
- expect(unordered.equals(map1b["y"], map2b["y"]),
- isTrue);
- const mapval = const MapEquality(values: unordered);
- expect(
- mapval.equals(map1a, map2a),
- isTrue);
- expect(mapval.equals(map1b, map2b),
- isTrue);
- const listmapval = const ListEquality(mapval);
- expect(listmapval.equals(l1, l2),
- isTrue);
- const setmapval = const SetEquality(mapval);
- expect(setmapval.equals(s1, s2),
- isTrue);
- });
-
- test("DeepEquality", () {
- var colleq = const DeepCollectionEquality.unordered();
- expect(colleq.equals(map1a["x"], map2a["x"]),
- isTrue);
- expect(colleq.equals(map1a["y"], map2a["y"]),
- isTrue);
- expect(colleq.equals(map1b["x"], map2b["x"]),
- isTrue);
- expect(colleq.equals(map1b["y"], map2b["y"]),
- isTrue);
- expect(colleq.equals(map1a, map2a),
- isTrue);
- expect(colleq.equals(map1b, map2b),
- isTrue);
- expect(colleq.equals(l1, l2),
- isTrue);
- expect(colleq.equals(s1, s2),
- isTrue);
- });
-}
diff --git a/pkg/collection/test/iterable_zip_test.dart b/pkg/collection/test/iterable_zip_test.dart
deleted file mode 100644
index ec191fe..0000000
--- a/pkg/collection/test/iterable_zip_test.dart
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "dart:collection";
-import "package:collection/iterable_zip.dart";
-import "package:unittest/unittest.dart";
-
-/// Iterable like [base] except that it throws when value equals [errorValue].
-Iterable iterError(Iterable base, int errorValue) {
- return base.map((x) => x == errorValue ? throw "BAD" : x);
-}
-
-main() {
- test("Basic", () {
- expect(new IterableZip([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
- equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]]));
- });
-
- test("Uneven length 1", () {
- expect(new IterableZip([[1, 2, 3, 99, 100], [4, 5, 6], [7, 8, 9]]),
- equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]]));
- });
-
- test("Uneven length 2", () {
- expect(new IterableZip([[1, 2, 3], [4, 5, 6, 99, 100], [7, 8, 9]]),
- equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]]));
- });
-
- test("Uneven length 3", () {
- expect(new IterableZip([[1, 2, 3], [4, 5, 6], [7, 8, 9, 99, 100]]),
- equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]]));
- });
-
- test("Uneven length 3", () {
- expect(new IterableZip([[1, 2, 3, 98], [4, 5, 6], [7, 8, 9, 99, 100]]),
- equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]]));
- });
-
- test("Empty 1", () {
- expect(new IterableZip([[], [4, 5, 6], [7, 8, 9]]), equals([]));
- });
-
- test("Empty 2", () {
- expect(new IterableZip([[1, 2, 3], [], [7, 8, 9]]), equals([]));
- });
-
- test("Empty 3", () {
- expect(new IterableZip([[1, 2, 3], [4, 5, 6], []]), equals([]));
- });
-
- test("Empty source", () {
- expect(new IterableZip([]), equals([]));
- });
-
- test("Single Source", () {
- expect(new IterableZip([[1, 2, 3]]), equals([[1], [2], [3]]));
- });
-
- test("Not-lists", () {
- // Use other iterables than list literals.
- Iterable it1 = [1, 2, 3, 4, 5, 6].where((x) => x < 4);
- Set it2 = new LinkedHashSet()..add(4)..add(5)..add(6);
- Iterable it3 = (new LinkedHashMap()..[7] = 0 ..[8] = 0 ..[9] = 0).keys;
- Iterable<Iterable> allIts =
- new Iterable.generate(3, (i) => [it1, it2, it3][i]);
- expect(new IterableZip(allIts),
- equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]]));
- });
-
- test("Error 1", () {
- expect(() => new IterableZip([iterError([1, 2, 3], 2),
- [4, 5, 6],
- [7, 8, 9]]).toList(),
- throwsA(equals("BAD")));
- });
-
- test("Error 2", () {
- expect(() => new IterableZip([[1, 2, 3],
- iterError([4, 5, 6], 5),
- [7, 8, 9]]).toList(),
- throwsA(equals("BAD")));
- });
-
- test("Error 3", () {
- expect(() => new IterableZip([[1, 2, 3],
- [4, 5, 6],
- iterError([7, 8, 9], 8)]).toList(),
- throwsA(equals("BAD")));
- });
-
- test("Error at end", () {
- expect(() => new IterableZip([[1, 2, 3],
- iterError([4, 5, 6], 6),
- [7, 8, 9]]).toList(),
- throwsA(equals("BAD")));
- });
-
- test("Error before first end", () {
- expect(() => new IterableZip([iterError([1, 2, 3, 4], 4),
- [4, 5, 6],
- [7, 8, 9]]).toList(),
- throwsA(equals("BAD")));
- });
-
- test("Error after first end", () {
- expect(new IterableZip([[1, 2, 3],
- [4, 5, 6],
- iterError([7, 8, 9, 10], 10)]),
- equals([[1, 4, 7], [2, 5, 8], [3, 6, 9]]));
- });
-}
diff --git a/pkg/collection/test/priority_queue_test.dart b/pkg/collection/test/priority_queue_test.dart
deleted file mode 100644
index 703ab72..0000000
--- a/pkg/collection/test/priority_queue_test.dart
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// Tests priority queue implementations utilities.
-
-import "package:collection/priority_queue.dart";
-import "package:unittest/unittest.dart";
-
-void main() {
- testInt(() => new HeapPriorityQueue<int>());
- testCustom((comparator) => new HeapPriorityQueue<C>(comparator));
-}
-
-void testInt(PriorityQueue<int> create()) {
- for (int count in [1, 5, 127, 128]) {
- testQueue("int:$count",
- create,
- new List<int>.generate(count, (x) => x),
- count);
- }
-}
-
-void testCustom(PriorityQueue<C> create(comparator)) {
- for (int count in [1, 5, 127, 128]) {
- testQueue("Custom:$count/null",
- () => create(null),
- new List<C>.generate(count, (x) => new C(x)),
- new C(count));
- testQueue("Custom:$count/compare",
- () => create(compare),
- new List<C>.generate(count, (x) => new C(x)),
- new C(count));
- testQueue("Custom:$count/compareNeg",
- () => create(compareNeg),
- new List<C>.generate(count, (x) => new C(count - x)),
- new C(0));
- }
-}
-
-/**
- * Test that a queue behaves correctly.
- *
- * The elements must be in priority order, from highest to lowest.
- */
-void testQueue(String name, PriorityQueue create(), List elements, notElement) {
- test(name, () => testQueueBody(create, elements, notElement));
-}
-
-void testQueueBody(PriorityQueue create(), List elements, notElement) {
- PriorityQueue q = create();
- expect(q.isEmpty, isTrue);
- expect(q, hasLength(0));
- expect(() { q.first; }, throwsStateError);
- expect(() { q.removeFirst(); }, throwsStateError);
-
- // Tests removeFirst, first, contains, toList and toSet.
- void testElements() {
- expect(q.isNotEmpty, isTrue);
- expect(q, hasLength(elements.length));
-
- expect(q.toList(), equals(elements));
- expect(q.toSet().toList(), equals(elements));
-
- for (int i = 0; i < elements.length; i++) {
- expect(q.contains(elements[i]), isTrue);
- }
- expect(q.contains(notElement), isFalse);
-
- List all = [];
- while (!q.isEmpty) {
- var expected = q.first;
- var actual = q.removeFirst();
- expect(actual, same(expected));
- all.add(actual);
- }
-
- expect(all.length, elements.length);
- for (int i = 0; i < all.length; i++) {
- expect(all[i], same(elements[i]));
- }
-
- expect(q.isEmpty, isTrue);
- }
-
- q.addAll(elements);
- testElements();
-
- q.addAll(elements.reversed);
- testElements();
-
- // Add elements in a non-linear order (gray order).
- for (int i = 0, j = 0; i < elements.length; i++) {
- int gray;
- do {
- gray = j ^ (j >> 1);
- j++;
- } while (gray >= elements.length);
- q.add(elements[gray]);
- }
- testElements();
-
- // Add elements by picking the middle element first, and then recursing
- // on each side.
- void addRec(int min, int max) {
- int mid = min + ((max - min) >> 1);
- q.add(elements[mid]);
- if (mid + 1 < max) addRec(mid + 1, max);
- if (mid > min) addRec(min, mid);
- }
- addRec(0, elements.length);
- testElements();
-
- // Test removeAll.
- q.addAll(elements);
- expect(q, hasLength(elements.length));
- Iterable all = q.removeAll();
- expect(q.isEmpty, isTrue);
- expect(all, hasLength(elements.length));
- for (int i = 0; i < elements.length; i++) {
- expect(all, contains(elements[i]));
- }
-
- // Test the same element more than once in queue.
- q.addAll(elements);
- q.addAll(elements.reversed);
- expect(q, hasLength(elements.length * 2));
- for (int i = 0; i < elements.length; i++) {
- var element = elements[i];
- expect(q.contains(element), isTrue);
- expect(q.removeFirst(), element);
- expect(q.removeFirst(), element);
- }
-
- // Test queue with all same element.
- var a = elements[0];
- for (int i = 0; i < elements.length; i++) {
- q.add(a);
- }
- expect(q, hasLength(elements.length));
- expect(q.contains(a), isTrue);
- expect(q.contains(notElement), isFalse);
- q.removeAll().forEach((x) => expect(x, same(a)));
-
- // Test remove.
- q.addAll(elements);
- for (var element in elements.reversed) {
- expect(q.remove(element), isTrue);
- }
- expect(q.isEmpty, isTrue);
-}
-
-
-// Custom class.
-// Class is comparable, comparators match normal and inverse order.
-int compare(C c1, C c2) => c1.value - c2.value;
-int compareNeg(C c1, C c2) => c2.value - c1.value;
-
-class C implements Comparable {
- final int value;
- const C(this.value);
- int get hashCode => value;
- bool operator==(Object other) => other is C && value == other.value;
- int compareTo(C other) => value - other.value;
- String toString() => "C($value)";
-}
diff --git a/pkg/collection/test/queue_list_test.dart b/pkg/collection/test/queue_list_test.dart
deleted file mode 100644
index 6b213c8..0000000
--- a/pkg/collection/test/queue_list_test.dart
+++ /dev/null
@@ -1,276 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "package:collection/collection.dart";
-import "package:unittest/unittest.dart";
-
-void main() {
- group("new QueueList()", () {
- test("creates an empty QueueList", () {
- expect(new QueueList(), isEmpty);
- });
-
- test("takes an initial capacity", () {
- expect(new QueueList(100), isEmpty);
- });
- });
-
- test("new QueueList.from() copies the contents of an iterable", () {
- expect(new QueueList.from([1, 2, 3].skip(1)), equals([2, 3]));
- });
-
- group("add()", () {
- test("adds an element to the end of the queue", () {
- var queue = new QueueList.from([1, 2, 3]);
- queue.add(4);
- expect(queue, equals([1, 2, 3, 4]));
- });
-
- test("expands a full queue", () {
- var queue = atCapacity();
- queue.add(8);
- expect(queue, equals([1, 2, 3, 4, 5, 6, 7, 8]));
- });
- });
-
- group("addAll()", () {
- test("adds elements to the end of the queue", () {
- var queue = new QueueList.from([1, 2, 3]);
- queue.addAll([4, 5, 6]);
- expect(queue, equals([1, 2, 3, 4, 5, 6]));
- });
-
- test("expands a full queue", () {
- var queue = atCapacity();
- queue.addAll([8, 9]);
- expect(queue, equals([1, 2, 3, 4, 5, 6, 7, 8, 9]));
- });
- });
-
- group("addFirst()", () {
- test("adds an element to the beginning of the queue", () {
- var queue = new QueueList.from([1, 2, 3]);
- queue.addFirst(0);
- expect(queue, equals([0, 1, 2, 3]));
- });
-
- test("expands a full queue", () {
- var queue = atCapacity();
- queue.addFirst(0);
- expect(queue, equals([0, 1, 2, 3, 4, 5, 6, 7]));
- });
- });
-
- group("removeFirst()", () {
- test("removes an element from the beginning of the queue", () {
- var queue = new QueueList.from([1, 2, 3]);
- expect(queue.removeFirst(), equals(1));
- expect(queue, equals([2, 3]));
- });
-
- test("removes an element from the beginning of a queue with an internal "
- "gap", () {
- var queue = withInternalGap();
- expect(queue.removeFirst(), equals(1));
- expect(queue, equals([2, 3, 4, 5, 6, 7]));
- });
-
- test("removes an element from the beginning of a queue at capacity", () {
- var queue = atCapacity();
- expect(queue.removeFirst(), equals(1));
- expect(queue, equals([2, 3, 4, 5, 6, 7]));
- });
-
- test("throws a StateError for an empty queue", () {
- expect(new QueueList().removeFirst, throwsStateError);
- });
- });
-
- group("removeLast()", () {
- test("removes an element from the end of the queue", () {
- var queue = new QueueList.from([1, 2, 3]);
- expect(queue.removeLast(), equals(3));
- expect(queue, equals([1, 2]));
- });
-
- test("removes an element from the end of a queue with an internal gap", () {
- var queue = withInternalGap();
- expect(queue.removeLast(), equals(7));
- expect(queue, equals([1, 2, 3, 4, 5, 6]));
- });
-
- test("removes an element from the end of a queue at capacity", () {
- var queue = atCapacity();
- expect(queue.removeLast(), equals(7));
- expect(queue, equals([1, 2, 3, 4, 5, 6]));
- });
-
- test("throws a StateError for an empty queue", () {
- expect(new QueueList().removeLast, throwsStateError);
- });
- });
-
- group("length", () {
- test("returns the length of a queue", () {
- expect(new QueueList.from([1, 2, 3]).length, equals(3));
- });
-
- test("returns the length of a queue with an internal gap", () {
- expect(withInternalGap().length, equals(7));
- });
-
- test("returns the length of a queue at capacity", () {
- expect(atCapacity().length, equals(7));
- });
- });
-
- group("length=", () {
- test("shrinks a larger queue", () {
- var queue = new QueueList.from([1, 2, 3]);
- queue.length = 1;
- expect(queue, equals([1]));
- });
-
- test("grows a smaller queue", () {
- var queue = new QueueList.from([1, 2, 3]);
- queue.length = 5;
- expect(queue, equals([1, 2, 3, null, null]));
- });
-
- test("throws a RangeError if length is less than 0", () {
- expect(() => new QueueList().length = -1, throwsRangeError);
- });
- });
-
- group("[]", () {
- test("returns individual entries in the queue", () {
- var queue = new QueueList.from([1, 2, 3]);
- expect(queue[0], equals(1));
- expect(queue[1], equals(2));
- expect(queue[2], equals(3));
- });
-
- test("returns individual entries in a queue with an internal gap", () {
- var queue = withInternalGap();
- expect(queue[0], equals(1));
- expect(queue[1], equals(2));
- expect(queue[2], equals(3));
- expect(queue[3], equals(4));
- expect(queue[4], equals(5));
- expect(queue[5], equals(6));
- expect(queue[6], equals(7));
- });
-
- test("throws a RangeError if the index is less than 0", () {
- var queue = new QueueList.from([1, 2, 3]);
- expect(() => queue[-1], throwsRangeError);
- });
-
- test("throws a RangeError if the index is greater than or equal to the "
- "length", () {
- var queue = new QueueList.from([1, 2, 3]);
- expect(() => queue[3], throwsRangeError);
- });
- });
-
- group("[]=", () {
- test("sets individual entries in the queue", () {
- var queue = new QueueList.from([1, 2, 3]);
- queue[0] = "a";
- queue[1] = "b";
- queue[2] = "c";
- expect(queue, equals(["a", "b", "c"]));
- });
-
- test("sets individual entries in a queue with an internal gap", () {
- var queue = withInternalGap();
- queue[0] = "a";
- queue[1] = "b";
- queue[2] = "c";
- queue[3] = "d";
- queue[4] = "e";
- queue[5] = "f";
- queue[6] = "g";
- expect(queue, equals(["a", "b", "c", "d", "e", "f", "g"]));
- });
-
- test("throws a RangeError if the index is less than 0", () {
- var queue = new QueueList.from([1, 2, 3]);
- expect(() {
- queue[-1] = 0;
- }, throwsRangeError);
- });
-
- test("throws a RangeError if the index is greater than or equal to the "
- "length", () {
- var queue = new QueueList.from([1, 2, 3]);
- expect(() {
- queue[3] = 4;
- }, throwsRangeError);
- });
- });
-
- group("throws a modification error for", () {
- var queue;
- setUp(() {
- queue = new QueueList.from([1, 2, 3]);
- });
-
- test("add", () {
- expect(() => queue.forEach((_) => queue.add(4)),
- throwsConcurrentModificationError);
- });
-
- test("addAll", () {
- expect(() => queue.forEach((_) => queue.addAll([4, 5, 6])),
- throwsConcurrentModificationError);
- });
-
- test("addFirst", () {
- expect(() => queue.forEach((_) => queue.addFirst(0)),
- throwsConcurrentModificationError);
- });
-
- test("removeFirst", () {
- expect(() => queue.forEach((_) => queue.removeFirst()),
- throwsConcurrentModificationError);
- });
-
- test("removeLast", () {
- expect(() => queue.forEach((_) => queue.removeLast()),
- throwsConcurrentModificationError);
- });
-
- test("length=", () {
- expect(() => queue.forEach((_) => queue.length = 1),
- throwsConcurrentModificationError);
- });
- });
-}
-
-/// Returns a queue whose internal ring buffer is full enough that adding a new
-/// element will expand it.
-QueueList atCapacity() {
- // Use addAll because [new QueueList.from(List)] won't use the default initial
- // capacity of 8.
- return new QueueList()..addAll([1, 2, 3, 4, 5, 6, 7]);
-}
-
-/// Returns a queue whose internal tail has a lower index than its head.
-QueueList withInternalGap() {
- var queue = new QueueList.from([null, null, null, null, 1, 2, 3, 4]);
- for (var i = 0; i < 4; i++) {
- queue.removeFirst();
- }
- for (var i = 5; i < 8; i++) {
- queue.addLast(i);
- }
- return queue;
-}
-
-/// Returns a matcher that expects that a closure throws a
-/// [ConcurrentModificationError].
-final throwsConcurrentModificationError = throwsA(
- new isInstanceOf<ConcurrentModificationError>(
- "ConcurrentModificationError"));
diff --git a/pkg/collection/test/unmodifiable_collection_test.dart b/pkg/collection/test/unmodifiable_collection_test.dart
deleted file mode 100644
index d810b75..0000000
--- a/pkg/collection/test/unmodifiable_collection_test.dart
+++ /dev/null
@@ -1,629 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "package:collection/wrappers.dart";
-import "package:unittest/unittest.dart";
-
-// Test unmodifiable collection views.
-// The collections should pass through the operations that are allowed,
-// an throw on the ones that aren't without affecting the original.
-
-main() {
- List list = [];
- testUnmodifiableList(list, new UnmodifiableListView(list), "empty");
- list = [42];
- testUnmodifiableList(list, new UnmodifiableListView(list), "single-42");
- list = [7];
- testUnmodifiableList(list, new UnmodifiableListView(list), "single!42");
- list = [1, 42, 10];
- testUnmodifiableList(list, new UnmodifiableListView(list), "three-42");
- list = [1, 7, 10];
- testUnmodifiableList(list, new UnmodifiableListView(list), "three!42");
-
- list = [];
- testNonGrowableList(list, new NonGrowableListView(list), "empty");
- list = [42];
- testNonGrowableList(list, new NonGrowableListView(list), "single-42");
- list = [7];
- testNonGrowableList(list, new NonGrowableListView(list), "single!42");
- list = [1, 42, 10];
- testNonGrowableList(list, new NonGrowableListView(list), "three-42");
- list = [1, 7, 10];
- testNonGrowableList(list, new NonGrowableListView(list), "three!42");
-
- Set aSet = new Set();
- testUnmodifiableSet(aSet, new UnmodifiableSetView(aSet), "empty");
- aSet = new Set.from([42]);
- testUnmodifiableSet(aSet, new UnmodifiableSetView(aSet), "single-42");
- aSet = new Set.from([7]);
- testUnmodifiableSet(aSet, new UnmodifiableSetView(aSet), "single!42");
- aSet = new Set.from([1, 42, 10]);
- testUnmodifiableSet(aSet, new UnmodifiableSetView(aSet), "three-42");
- aSet = new Set.from([1, 7, 10]);
- testUnmodifiableSet(aSet, new UnmodifiableSetView(aSet), "three!42");
-
- Map map = new Map();
- testUnmodifiableMap(map, new UnmodifiableMapView(map), "empty");
- map = new Map()..[0] = 2;
- testUnmodifiableMap(map, new UnmodifiableMapView(map), "single-0");
- map = new Map()..[3] = 2;
- testUnmodifiableMap(map, new UnmodifiableMapView(map), "single!0");
- map = new Map()..[0] = 2
- ..[1] = 1
- ..[2] = 0;
- testUnmodifiableMap(map, new UnmodifiableMapView(map), "three-0");
- map = new Map()..[3] = 2
- ..[1] = 1
- ..[2] = 3;
- testUnmodifiableMap(map, new UnmodifiableMapView(map), "three!0");
-}
-
-void testUnmodifiableList(List original, List wrapped, String name) {
- name = "unmodifiable-list-$name";
- testIterable(original, wrapped, name);
- testReadList(original, wrapped, name);
- testNoWriteList(original, wrapped, name);
- testNoChangeLengthList(original, wrapped, name);
-}
-
-void testNonGrowableList(List original, List wrapped, String name) {
- name = "nongrowable-list-$name";
- testIterable(original, wrapped, name);
- testReadList(original, wrapped, name);
- testWriteList(original, wrapped, name);
- testNoChangeLengthList(original, wrapped, name);
-}
-
-void testUnmodifiableSet(Set original, Set wrapped, String name) {
- name = "unmodifiable-set-$name";
- testIterable(original, wrapped, name);
- testReadSet(original, wrapped, name);
- testNoChangeSet(original, wrapped, name);
-}
-
-void testUnmodifiableMap(Map original, Map wrapped, name) {
- name = "unmodifiable-map-$name";
- testReadMap(original, wrapped, name);
- testNoChangeMap(original, wrapped, name);
-}
-
-void testIterable(Iterable original, Iterable wrapped, String name) {
- test("$name - any", () {
- expect(wrapped.any((x) => true), equals(original.any((x) => true)));
- expect(wrapped.any((x) => false), equals(original.any((x) => false)));
- });
-
- test("$name - contains", () {
- expect(wrapped.contains(0), equals(original.contains(0)));
- });
-
- test("$name - elementAt", () {
- if (original.isEmpty) {
- expect(() => wrapped.elementAt(0), throws);
- } else {
- expect(wrapped.elementAt(0), equals(original.elementAt(0)));
- }
- });
-
- test("$name - every", () {
- expect(wrapped.every((x) => true), equals(original.every((x) => true)));
- expect(wrapped.every((x) => false), equals(original.every((x) => false)));
- });
-
- test("$name - expand", () {
- expect(wrapped.expand((x) => [x, x]),
- equals(original.expand((x) => [x, x])));
- });
-
- test("$name - first", () {
- if (original.isEmpty) {
- expect(() => wrapped.first, throws);
- } else {
- expect(wrapped.first, equals(original.first));
- }
- });
-
- test("$name - firstWhere", () {
- if (original.isEmpty) {
- expect(() => wrapped.firstWhere((_) => true), throws);
- } else {
- expect(wrapped.firstWhere((_) => true),
- equals(original.firstWhere((_) => true)));
- }
- expect(() => wrapped.firstWhere((_) => false), throws);
- });
-
- test("$name - fold", () {
- expect(wrapped.fold(0, (x, y) => x + y),
- equals(original.fold(0, (x, y) => x + y)));
- });
-
- test("$name - forEach", () {
- int wrapCtr = 0;
- int origCtr = 0;
- wrapped.forEach((x) { wrapCtr += x; });
- original.forEach((x) { origCtr += x; });
- expect(wrapCtr, equals(origCtr));
- });
-
- test("$name - isEmpty", () {
- expect(wrapped.isEmpty, equals(original.isEmpty));
- });
-
- test("$name - isNotEmpty", () {
- expect(wrapped.isNotEmpty, equals(original.isNotEmpty));
- });
-
- test("$name - iterator", () {
- Iterator wrapIter = wrapped.iterator;
- Iterator origIter = original.iterator;
- while (origIter.moveNext()) {
- expect(wrapIter.moveNext(), equals(true));
- expect(wrapIter.current, equals(origIter.current));
- }
- expect(wrapIter.moveNext(), equals(false));
- });
-
- test("$name - join", () {
- expect(wrapped.join(""), equals(original.join("")));
- expect(wrapped.join("-"), equals(original.join("-")));
- });
-
- test("$name - last", () {
- if (original.isEmpty) {
- expect(() => wrapped.last, throws);
- } else {
- expect(wrapped.last, equals(original.last));
- }
- });
-
- test("$name - lastWhere", () {
- if (original.isEmpty) {
- expect(() => wrapped.lastWhere((_) => true), throws);
- } else {
- expect(wrapped.lastWhere((_) => true),
- equals(original.lastWhere((_) => true)));
- }
- expect(() => wrapped.lastWhere((_) => false), throws);
- });
-
- test("$name - length", () {
- expect(wrapped.length, equals(original.length));
- });
-
- test("$name - map", () {
- expect(wrapped.map((x) => "[$x]"),
- equals(original.map((x) => "[$x]")));
- });
-
- test("$name - reduce", () {
- if (original.isEmpty) {
- expect(() => wrapped.reduce((x, y) => x + y), throws);
- } else {
- expect(wrapped.reduce((x, y) => x + y),
- equals(original.reduce((x, y) => x + y)));
- }
- });
-
- test("$name - single", () {
- if (original.length != 1) {
- expect(() => wrapped.single, throws);
- } else {
- expect(wrapped.single, equals(original.single));
- }
- });
-
- test("$name - singleWhere", () {
- if (original.length != 1) {
- expect(() => wrapped.singleWhere((_) => true), throws);
- } else {
- expect(wrapped.singleWhere((_) => true),
- equals(original.singleWhere((_) => true)));
- }
- expect(() => wrapped.singleWhere((_) => false), throws);
- });
-
- test("$name - skip", () {
- expect(wrapped.skip(0), orderedEquals(original.skip(0)));
- expect(wrapped.skip(1), orderedEquals(original.skip(1)));
- expect(wrapped.skip(5), orderedEquals(original.skip(5)));
- });
-
- test("$name - skipWhile", () {
- expect(wrapped.skipWhile((x) => true),
- orderedEquals(original.skipWhile((x) => true)));
- expect(wrapped.skipWhile((x) => false),
- orderedEquals(original.skipWhile((x) => false)));
- expect(wrapped.skipWhile((x) => x != 42),
- orderedEquals(original.skipWhile((x) => x != 42)));
- });
-
- test("$name - take", () {
- expect(wrapped.take(0), orderedEquals(original.take(0)));
- expect(wrapped.take(1), orderedEquals(original.take(1)));
- expect(wrapped.take(5), orderedEquals(original.take(5)));
- });
-
- test("$name - takeWhile", () {
- expect(wrapped.takeWhile((x) => true),
- orderedEquals(original.takeWhile((x) => true)));
- expect(wrapped.takeWhile((x) => false),
- orderedEquals(original.takeWhile((x) => false)));
- expect(wrapped.takeWhile((x) => x != 42),
- orderedEquals(original.takeWhile((x) => x != 42)));
- });
-
- test("$name - toList", () {
- expect(wrapped.toList(), orderedEquals(original.toList()));
- expect(wrapped.toList(growable: false),
- orderedEquals(original.toList(growable: false)));
- });
-
- test("$name - toSet", () {
- expect(wrapped.toSet(), unorderedEquals(original.toSet()));
- });
-
- test("$name - where", () {
- expect(wrapped.where((x) => true),
- orderedEquals(original.where((x) => true)));
- expect(wrapped.where((x) => false),
- orderedEquals(original.where((x) => false)));
- expect(wrapped.where((x) => x != 42),
- orderedEquals(original.where((x) => x != 42)));
- });
-}
-
-void testReadList(List original, List wrapped, String name) {
- test("$name - length", () {
- expect(wrapped.length, equals(original.length));
- });
-
- test("$name - isEmpty", () {
- expect(wrapped.isEmpty, equals(original.isEmpty));
- });
-
- test("$name - isNotEmpty", () {
- expect(wrapped.isNotEmpty, equals(original.isNotEmpty));
- });
-
- test("$name - []", () {
- if (original.isEmpty) {
- expect(() { wrapped[0]; }, throwsRangeError);
- } else {
- expect(wrapped[0], equals(original[0]));
- }
- });
-
- test("$name - indexOf", () {
- expect(wrapped.indexOf(42), equals(original.indexOf(42)));
- });
-
- test("$name - lastIndexOf", () {
- expect(wrapped.lastIndexOf(42), equals(original.lastIndexOf(42)));
- });
-
- test("$name - getRange", () {
- int len = original.length;
- expect(wrapped.getRange(0, len), equals(original.getRange(0, len)));
- expect(wrapped.getRange(len ~/ 2, len),
- equals(original.getRange(len ~/ 2, len)));
- expect(wrapped.getRange(0, len ~/ 2),
- equals(original.getRange(0, len ~/ 2)));
- });
-
- test("$name - sublist", () {
- int len = original.length;
- expect(wrapped.sublist(0), equals(original.sublist(0)));
- expect(wrapped.sublist(len ~/ 2), equals(original.sublist(len ~/ 2)));
- expect(wrapped.sublist(0, len ~/ 2),
- equals(original.sublist(0, len ~/ 2)));
- });
-
- test("$name - asMap", () {
- expect(wrapped.asMap(), equals(original.asMap()));
- });
-}
-
-void testNoWriteList(List original, List wrapped, String name) {
- List copy = new List.from(original);
-
- testThrows(name, thunk) {
- test(name, () {
- expect(thunk, throwsUnsupportedError);
- // No modifications happened.
- expect(original, equals(copy));
- });
- }
-
- testThrows("$name - []= throws", () { wrapped[0] = 42; });
-
- testThrows("$name - sort throws", () { wrapped.sort(); });
-
- testThrows("$name - fillRange throws", () {
- wrapped.fillRange(0, wrapped.length, 42);
- });
-
- testThrows("$name - setRange throws", () {
- wrapped.setRange(0, wrapped.length,
- new Iterable.generate(wrapped.length, (i) => i));
- });
-
- testThrows("$name - setAll throws", () {
- wrapped.setAll(0, new Iterable.generate(wrapped.length, (i) => i));
- });
-}
-
-void testWriteList(List original, List wrapped, String name) {
- List copy = new List.from(original);
-
- test("$name - []=", () {
- if (original.isNotEmpty) {
- int originalFirst = original[0];
- wrapped[0] = originalFirst + 1;
- expect(original[0], equals(originalFirst + 1));
- original[0] = originalFirst;
- } else {
- expect(() { wrapped[0] = 42; }, throws);
- }
- });
-
- test("$name - sort", () {
- List sortCopy = new List.from(original);
- sortCopy.sort();
- wrapped.sort();
- expect(original, orderedEquals(sortCopy));
- original.setAll(0, copy);
- });
-
- test("$name - fillRange", () {
- wrapped.fillRange(0, wrapped.length, 37);
- for (int i = 0; i < original.length; i++) {
- expect(original[i], equals(37));
- }
- original.setAll(0, copy);
- });
-
- test("$name - setRange", () {
- List reverseList = original.reversed.toList();
- wrapped.setRange(0, wrapped.length, reverseList);
- expect(original, equals(reverseList));
- original.setAll(0, copy);
- });
-
- test("$name - setAll", () {
- List reverseList = original.reversed.toList();
- wrapped.setAll(0, reverseList);
- expect(original, equals(reverseList));
- original.setAll(0, copy);
- });
-}
-
-void testNoChangeLengthList(List original, List wrapped, String name) {
- List copy = new List.from(original);
-
- testThrows(name, thunk) {
- test(name, () {
- expect(thunk, throwsUnsupportedError);
- // No modifications happened.
- expect(original, equals(copy));
- });
- }
-
- testThrows("$name - length= throws", () {
- wrapped.length = 100;
- });
-
- testThrows("$name - add throws", () {
- wrapped.add(42);
- });
-
- testThrows("$name - addAll throws", () {
- wrapped.addAll([42]);
- });
-
- testThrows("$name - insert throws", () {
- wrapped.insert(0, 42);
- });
-
- testThrows("$name - insertAll throws", () {
- wrapped.insertAll(0, [42]);
- });
-
- testThrows("$name - remove throws", () {
- wrapped.remove(42);
- });
-
- testThrows("$name - removeAt throws", () {
- wrapped.removeAt(0);
- });
-
- testThrows("$name - removeLast throws", () {
- wrapped.removeLast();
- });
-
- testThrows("$name - removeWhere throws", () {
- wrapped.removeWhere((element) => false);
- });
-
- testThrows("$name - retainWhere throws", () {
- wrapped.retainWhere((element) => true);
- });
-
- testThrows("$name - removeRange throws", () {
- wrapped.removeRange(0, wrapped.length);
- });
-
- testThrows("$name - replaceRange throws", () {
- wrapped.replaceRange(0, wrapped.length, [42]);
- });
-
- testThrows("$name - clear throws", () {
- wrapped.clear();
- });
-}
-
-void testReadSet(Set original, Set wrapped, String name) {
- Set copy = new Set.from(original);
-
- test("$name - containsAll", () {
- expect(wrapped.containsAll(copy), isTrue);
- expect(wrapped.containsAll(copy.toList()), isTrue);
- expect(wrapped.containsAll([]), isTrue);
- expect(wrapped.containsAll([42]), equals(original.containsAll([42])));
- });
-
- test("$name - intersection", () {
- expect(wrapped.intersection(new Set()), isEmpty);
- expect(wrapped.intersection(copy), unorderedEquals(original));
- expect(wrapped.intersection(new Set.from([42])),
- new Set.from(original.contains(42) ? [42] : []));
- });
-
- test("$name - union", () {
- expect(wrapped.union(new Set()), unorderedEquals(original));
- expect(wrapped.union(copy), unorderedEquals(original));
- expect(wrapped.union(new Set.from([42])),
- equals(original.union(new Set.from([42]))));
- });
-
- test("$name - difference", () {
- expect(wrapped.difference(new Set()), unorderedEquals(original));
- expect(wrapped.difference(copy), isEmpty);
- expect(wrapped.difference(new Set.from([42])),
- equals(original.difference(new Set.from([42]))));
- });
-}
-
-void testNoChangeSet(Set original, Set wrapped, String name) {
- List originalElements = original.toList();
-
- testThrows(name, thunk) {
- test(name, () {
- expect(thunk, throwsUnsupportedError);
- // No modifications happened.
- expect(original.toList(), equals(originalElements));
- });
- }
-
- testThrows("$name - add throws", () {
- wrapped.add(42);
- });
-
- testThrows("$name - addAll throws", () {
- wrapped.addAll([42]);
- });
-
- testThrows("$name - addAll empty throws", () {
- wrapped.addAll([]);
- });
-
- testThrows("$name - remove throws", () {
- wrapped.remove(42);
- });
-
- testThrows("$name - removeAll throws", () {
- wrapped.removeAll([42]);
- });
-
- testThrows("$name - removeAll empty throws", () {
- wrapped.removeAll([]);
- });
-
- testThrows("$name - retainAll throws", () {
- wrapped.retainAll([42]);
- });
-
- testThrows("$name - removeWhere throws", () {
- wrapped.removeWhere((_) => false);
- });
-
- testThrows("$name - retainWhere throws", () {
- wrapped.retainWhere((_) => true);
- });
-
- testThrows("$name - clear throws", () {
- wrapped.clear();
- });
-}
-
-void testReadMap(Map original, Map wrapped, String name) {
- test("$name length", () {
- expect(wrapped.length, equals(original.length));
- });
-
- test("$name isEmpty", () {
- expect(wrapped.isEmpty, equals(original.isEmpty));
- });
-
- test("$name isNotEmpty", () {
- expect(wrapped.isNotEmpty, equals(original.isNotEmpty));
- });
-
- test("$name operator[]", () {
- expect(wrapped[0], equals(original[0]));
- expect(wrapped[999], equals(original[999]));
- });
-
- test("$name containsKey", () {
- expect(wrapped.containsKey(0), equals(original.containsKey(0)));
- expect(wrapped.containsKey(999), equals(original.containsKey(999)));
- });
-
- test("$name containsValue", () {
- expect(wrapped.containsValue(0), equals(original.containsValue(0)));
- expect(wrapped.containsValue(999), equals(original.containsValue(999)));
- });
-
- test("$name forEach", () {
- int origCnt = 0;
- int wrapCnt = 0;
- wrapped.forEach((k, v) { wrapCnt += 1 << k + 3 * v; });
- original.forEach((k, v) { origCnt += 1 << k + 3 * v; });
- expect(wrapCnt, equals(origCnt));
- });
-
- test("$name keys", () {
- expect(wrapped.keys, orderedEquals(original.keys));
- });
-
- test("$name values", () {
- expect(wrapped.values, orderedEquals(original.values));
- });
-}
-
-testNoChangeMap(Map original, Map wrapped, String name) {
- Map copy = new Map.from(original);
-
- testThrows(name, thunk) {
- test(name, () {
- expect(thunk, throwsUnsupportedError);
- // No modifications happened.
- expect(original, equals(copy));
- });
- }
-
- testThrows("$name operator[]= throws", () {
- wrapped[0] = 42;
- });
-
- testThrows("$name putIfAbsent throws", () {
- wrapped.putIfAbsent(0, () => 42);
- });
-
- testThrows("$name addAll throws", () {
- wrapped.addAll(new Map()..[42] = 42);
- });
-
- testThrows("$name addAll empty throws", () {
- wrapped.addAll(new Map());
- });
-
- testThrows("$name remove throws", () {
- wrapped.remove(0);
- });
-
- testThrows("$name clear throws", () {
- wrapped.clear();
- });
-}
diff --git a/pkg/collection/test/wrapper_test.dart b/pkg/collection/test/wrapper_test.dart
deleted file mode 100644
index 5858aaf..0000000
--- a/pkg/collection/test/wrapper_test.dart
+++ /dev/null
@@ -1,664 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// Tests wrapper utilities.
-
-import "dart:collection";
-import "package:collection/collection.dart";
-import "package:unittest/unittest.dart";
-
-// Test that any member access/call on the wrapper object is equal to
-// an expected access on the wrapped object.
-// This is implemented by capturing accesses using noSuchMethod and comparing
-// them to expected accesses captured previously.
-
-// Compare two Invocations for having equal type and arguments.
-void testInvocations(Invocation i1, Invocation i2) {
- String name = "${i1.memberName}";
- expect(i1.isGetter, equals(i2.isGetter), reason: name);
- expect(i1.isSetter, equals(i2.isSetter), reason: name);
- expect(i1.memberName, equals(i2.memberName), reason: name);
- expect(i1.positionalArguments, equals(i2.positionalArguments), reason: name);
- expect(i1.namedArguments, equals(i2.namedArguments), reason: name);
-}
-
-/**
- * Utility class to record a member access and a member access on a wrapped
- * object, and compare them for equality.
- */
-abstract class Expector {
- getWrappedObject(action(Invocation i));
- // Hack to test assignment ([]=) because it doesn't return the result
- // of the member call. Instead use (expect..[4]=5).equal[4]=5 where
- // you would normally use expect[4].equals[4] for non-assignments.
- var equals;
-
- noSuchMethod(Invocation m) => new _Equals(equals = getWrappedObject((m2) {
- testInvocations(m, m2);
- }));
-
- toString() => new _Equals(equals = getWrappedObject((m2) {
- testInvocations(TO_STRING_INVOCATION, m2);
- }));
-}
-
-// An object with a field called "equals", only introduced into the
-// flow to allow writing expect.xxx.equals.xxx.
-class _Equals {
- final equals;
- _Equals(this.equals);
-}
-
-class SyntheticInvocation implements Invocation {
- static const int METHOD = 0x00;
- static const int GETTER = 0x01;
- static const int SETTER = 0x02;
- final Symbol memberName;
- final List positionalArguments;
- final Map namedArguments;
- final int _type;
- const SyntheticInvocation(this.memberName,
- this.positionalArguments,
- this.namedArguments,
- this._type);
- bool get isMethod => _type == METHOD;
-
- bool get isGetter => _type == GETTER;
-
- bool get isSetter => _type == SETTER;
-
- bool get isAccessor => isGetter || isSetter;
-}
-
-// Parameterization of noSuchMethod.
-class NSM {
- Function _action;
- NSM(this._action);
- noSuchMethod(Invocation i) => _action(i);
-}
-
-const TO_STRING_INVOCATION = const SyntheticInvocation(
- #toString, const[], const{}, SyntheticInvocation.METHOD);
-
-// LikeNSM, but has types Iterable, Set and List to allow it as
-// argument to DelegatingIterable/Set/List.
-class IterableNSM extends NSM implements Iterable, Set, List, Queue {
- IterableNSM(action(Invocation i)) : super(action);
- noSuchMethod(Invocation i) => super.noSuchMethod(i); // Silence warnings
- toString() => super.noSuchMethod(TO_STRING_INVOCATION);
-}
-
-// Expector that wraps in DelegatingIterable.
-class IterableExpector extends Expector {
- getWrappedObject(void action(Invocation i)) {
- return new DelegatingIterable(new IterableNSM(action));
- }
-}
-
-// Expector that wraps in DelegatingList.
-class ListExpector extends Expector {
- getWrappedObject(void action(Invocation i)) {
- return new DelegatingList(new IterableNSM(action));
- }
-}
-
-// Expector that wraps in DelegatingSet.
-class SetExpector extends Expector {
- getWrappedObject(void action(Invocation i)) {
- return new DelegatingSet(new IterableNSM(action));
- }
-}
-
-// Expector that wraps in DelegatingSet.
-class QueueExpector extends Expector {
- getWrappedObject(void action(Invocation i)) {
- return new DelegatingQueue(new IterableNSM(action));
- }
-}
-
-// Like NSM but implements Map to allow as argument for DelegatingMap.
-class MapNSM extends NSM implements Map {
- MapNSM(action(Invocation i)) : super(action);
- noSuchMethod(Invocation i) => super.noSuchMethod(i);
- toString() => super.noSuchMethod(TO_STRING_INVOCATION);
-}
-
-// Expector that wraps in DelegatingMap.
-class MapExpector extends Expector {
- getWrappedObject(void action(Invocation i)) {
- return new DelegatingMap(new MapNSM(action));
- }
-}
-
-// Utility values to use as arguments in calls.
-func0() {}
-func1(x) {}
-func2(x, y) {}
-var val = new Object();
-
-void main() {
- testIterable(var expect) {
- expect.any(func1).equals.any(func1);
- expect.contains(val).equals.contains(val);
- expect.elementAt(0).equals.elementAt(0);
- expect.every(func1).equals.every(func1);
- expect.expand(func1).equals.expand(func1);
- expect.first.equals.first;
- // Default values of the Iterable interface will be added in the
- // second call to firstWhere, so we must record them in our
- // expectation (which doesn't have the interface implementat or
- // its default values).
- expect.firstWhere(func1, orElse: null).equals.firstWhere(func1);
- expect.firstWhere(func1, orElse: func0).equals.
- firstWhere(func1, orElse: func0);
- expect.fold(null, func2).equals.fold(null, func2);
- expect.forEach(func1).equals.forEach(func1);
- expect.isEmpty.equals.isEmpty;
- expect.isNotEmpty.equals.isNotEmpty;
- expect.iterator.equals.iterator;
- expect.join('').equals.join();
- expect.join("X").equals.join("X");
- expect.last.equals.last;
- expect.lastWhere(func1, orElse: null).equals.lastWhere(func1);
- expect.lastWhere(func1, orElse: func0).equals.
- lastWhere(func1, orElse: func0);
- expect.length.equals.length;
- expect.map(func1).equals.map(func1);
- expect.reduce(func2).equals.reduce(func2);
- expect.single.equals.single;
- expect.singleWhere(func1).equals.singleWhere(func1);
- expect.skip(5).equals.skip(5);
- expect.skipWhile(func1).equals.skipWhile(func1);
- expect.take(5).equals.take(5);
- expect.takeWhile(func1).equals.takeWhile(func1);
- expect.toList(growable: true).equals.toList();
- expect.toList(growable: true).equals.toList(growable: true);
- expect.toList(growable: false).equals.toList(growable: false);
- expect.toSet().equals.toSet();
- expect.toString().equals.toString();
- expect.where(func1).equals.where(func1);
- }
-
- void testList(var expect) {
- testIterable(expect);
-
- expect[4].equals[4];
- (expect..[4] = 5).equals[4] = 5;
-
- expect.add(val).equals.add(val);
- expect.addAll([val]).equals.addAll([val]);
- expect.asMap().equals.asMap();
- expect.clear().equals.clear();
- expect.fillRange(4, 5, null).equals.fillRange(4, 5);
- expect.fillRange(4, 5, val).equals.fillRange(4, 5, val);
- expect.getRange(4, 5).equals.getRange(4, 5);
- expect.indexOf(val, 0).equals.indexOf(val);
- expect.indexOf(val, 4).equals.indexOf(val, 4);
- expect.insert(4, val).equals.insert(4, val);
- expect.insertAll(4, [val]).equals.insertAll(4, [val]);
- expect.lastIndexOf(val, null).equals.lastIndexOf(val);
- expect.lastIndexOf(val, 4).equals.lastIndexOf(val, 4);
- (expect..length = 4).equals.length = 4;
- expect.remove(val).equals.remove(val);
- expect.removeAt(4).equals.removeAt(4);
- expect.removeLast().equals.removeLast();
- expect.removeRange(4, 5).equals.removeRange(4, 5);
- expect.removeWhere(func1).equals.removeWhere(func1);
- expect.replaceRange(4, 5, [val]).equals.replaceRange(4, 5, [val]);
- expect.retainWhere(func1).equals.retainWhere(func1);
- expect.reversed.equals.reversed;
- expect.setAll(4, [val]).equals.setAll(4, [val]);
- expect.setRange(4, 5, [val], 0).equals.setRange(4, 5, [val]);
- expect.setRange(4, 5, [val], 3).equals.setRange(4, 5, [val], 3);
- expect.sort(null).equals.sort();
- expect.sort(func2).equals.sort(func2);
- expect.sublist(4, null).equals.sublist(4);
- expect.sublist(4, 5).equals.sublist(4, 5);
- }
-
- void testSet(var expect) {
- testIterable(expect);
- Set set = new Set();
- expect.add(val).equals.add(val);
- expect.addAll([val]).equals.addAll([val]);
- expect.clear().equals.clear();
- expect.containsAll([val]).equals.containsAll([val]);
- expect.difference(set).equals.difference(set);
- expect.intersection(set).equals.intersection(set);
- expect.remove(val).equals.remove(val);
- expect.removeAll([val]).equals.removeAll([val]);
- expect.removeWhere(func1).equals.removeWhere(func1);
- expect.retainAll([val]).equals.retainAll([val]);
- expect.retainWhere(func1).equals.retainWhere(func1);
- expect.union(set).equals.union(set);
- }
-
- void testQueue(var expect) {
- testIterable(expect);
- expect.add(val).equals.add(val);
- expect.addAll([val]).equals.addAll([val]);
- expect.addFirst(val).equals.addFirst(val);
- expect.addLast(val).equals.addLast(val);
- expect.clear().equals.clear();
- expect.remove(val).equals.remove(val);
- expect.removeFirst().equals.removeFirst();
- expect.removeLast().equals.removeLast();
- }
-
- void testMap(var expect) {
- Map map = new Map();
- expect[val].equals[val];
- (expect..[val] = val).equals[val] = val;
- expect.addAll(map).equals.addAll(map);
- expect.clear().equals.clear();
- expect.containsKey(val).equals.containsKey(val);
- expect.containsValue(val).equals.containsValue(val);
- expect.forEach(func2).equals.forEach(func2);
- expect.isEmpty.equals.isEmpty;
- expect.isNotEmpty.equals.isNotEmpty;
- expect.keys.equals.keys;
- expect.length.equals.length;
- expect.putIfAbsent(val, func0).equals.putIfAbsent(val, func0);
- expect.remove(val).equals.remove(val);
- expect.values.equals.values;
- expect.toString().equals.toString();
- }
-
- // Runs tests of Set behavior.
- //
- // [setUpSet] should return a set with two elements: "foo" and "bar".
- void testTwoElementSet(Set<String> setUpSet()) {
- group("with two elements", () {
- var set;
- setUp(() => set = setUpSet());
-
- test(".any", () {
- expect(set.any((element) => element == "foo"), isTrue);
- expect(set.any((element) => element == "baz"), isFalse);
- });
-
- test(".elementAt", () {
- expect(set.elementAt(0), equals("foo"));
- expect(set.elementAt(1), equals("bar"));
- expect(() => set.elementAt(2), throwsRangeError);
- });
-
- test(".every", () {
- expect(set.every((element) => element == "foo"), isFalse);
- expect(set.every((element) => element is String), isTrue);
- });
-
- test(".expand", () {
- expect(set.expand((element) {
- return [element.substring(0, 1), element.substring(1)];
- }), equals(["f", "oo", "b", "ar"]));
- });
-
- test(".first", () {
- expect(set.first, equals("foo"));
- });
-
- test(".firstWhere", () {
- expect(set.firstWhere((element) => element is String), equals("foo"));
- expect(set.firstWhere((element) => element.startsWith("b")),
- equals("bar"));
- expect(() => set.firstWhere((element) => element is int),
- throwsStateError);
- expect(set.firstWhere((element) => element is int, orElse: () => "baz"),
- equals("baz"));
- });
-
- test(".fold", () {
- expect(set.fold("start", (previous, element) => previous + element),
- equals("startfoobar"));
- });
-
- test(".forEach", () {
- var values = [];
- set.forEach(values.add);
- expect(values, equals(["foo", "bar"]));
- });
-
- test(".iterator", () {
- var values = [];
- for (var element in set) {
- values.add(element);
- }
- expect(values, equals(["foo", "bar"]));
- });
-
- test(".join", () {
- expect(set.join(", "), equals("foo, bar"));
- });
-
- test(".last", () {
- expect(set.last, equals("bar"));
- });
-
- test(".lastWhere", () {
- expect(set.lastWhere((element) => element is String), equals("bar"));
- expect(set.lastWhere((element) => element.startsWith("f")),
- equals("foo"));
- expect(() => set.lastWhere((element) => element is int),
- throwsStateError);
- expect(set.lastWhere((element) => element is int, orElse: () => "baz"),
- equals("baz"));
- });
-
- test(".map", () {
- expect(set.map((element) => element.substring(1)),
- equals(["oo", "ar"]));
- });
-
- test(".reduce", () {
- expect(set.reduce((previous, element) => previous + element),
- equals("foobar"));
- });
-
- test(".singleWhere", () {
- expect(() => set.singleWhere((element) => element == "baz"),
- throwsStateError);
- expect(set.singleWhere((element) => element == "foo"),
- "foo");
- expect(() => set.singleWhere((element) => element is String),
- throwsStateError);
- });
-
- test(".skip", () {
- expect(set.skip(0), equals(["foo", "bar"]));
- expect(set.skip(1), equals(["bar"]));
- expect(set.skip(2), equals([]));
- });
-
- test(".skipWhile", () {
- expect(set.skipWhile((element) => element.startsWith("f")),
- equals(["bar"]));
- expect(set.skipWhile((element) => element.startsWith("z")),
- equals(["foo", "bar"]));
- expect(set.skipWhile((element) => element is String),
- equals([]));
- });
-
- test(".take", () {
- expect(set.take(0), equals([]));
- expect(set.take(1), equals(["foo"]));
- expect(set.take(2), equals(["foo", "bar"]));
- });
-
- test(".takeWhile", () {
- expect(set.takeWhile((element) => element.startsWith("f")),
- equals(["foo"]));
- expect(set.takeWhile((element) => element.startsWith("z")),
- equals([]));
- expect(set.takeWhile((element) => element is String),
- equals(["foo", "bar"]));
- });
-
- test(".toList", () {
- expect(set.toList(), equals(["foo", "bar"]));
- expect(() => set.toList(growable: false).add("baz"),
- throwsUnsupportedError);
- expect(set.toList()..add("baz"), equals(["foo", "bar", "baz"]));
- });
-
- test(".toSet", () {
- expect(set.toSet(), equals(new Set.from(["foo", "bar"])));
- });
-
- test(".where", () {
- expect(set.where((element) => element.startsWith("f")),
- equals(["foo"]));
- expect(set.where((element) => element.startsWith("z")), equals([]));
- expect(set.where((element) => element is String),
- equals(["foo", "bar"]));
- });
-
- test(".containsAll", () {
- expect(set.containsAll(["foo", "bar"]), isTrue);
- expect(set.containsAll(["foo"]), isTrue);
- expect(set.containsAll(["foo", "bar", "qux"]), isFalse);
- });
-
- test(".difference", () {
- expect(set.difference(new Set.from(["foo", "baz"])),
- equals(new Set.from(["bar"])));
- });
-
- test(".intersection", () {
- expect(set.intersection(new Set.from(["foo", "baz"])),
- equals(new Set.from(["foo"])));
- });
-
- test(".union", () {
- expect(set.union(new Set.from(["foo", "baz"])),
- equals(new Set.from(["foo", "bar", "baz"])));
- });
- });
- }
-
- test("Iterable", () {
- testIterable(new IterableExpector());
- });
-
- test("List", () {
- testList(new ListExpector());
- });
-
- test("Set", () {
- testSet(new SetExpector());
- });
-
- test("Queue", () {
- testQueue(new QueueExpector());
- });
-
- test("Map", () {
- testMap(new MapExpector());
- });
-
- group("MapKeySet", () {
- var map;
- var set;
-
- setUp(() {
- map = new Map<String, int>();
- set = new MapKeySet<String>(map);
- });
-
- testTwoElementSet(() {
- map["foo"] = 1;
- map["bar"] = 2;
- return set;
- });
-
- test(".single", () {
- expect(() => set.single, throwsStateError);
- map["foo"] = 1;
- expect(set.single, equals("foo"));
- map["bar"] = 1;
- expect(() => set.single, throwsStateError);
- });
-
- test(".toString", () {
- expect(set.toString(), equals("{}"));
- map["foo"] = 1;
- map["bar"] = 2;
- expect(set.toString(), equals("{foo, bar}"));
- });
-
- test(".contains", () {
- expect(set.contains("foo"), isFalse);
- map["foo"] = 1;
- expect(set.contains("foo"), isTrue);
- });
-
- test(".isEmpty", () {
- expect(set.isEmpty, isTrue);
- map["foo"] = 1;
- expect(set.isEmpty, isFalse);
- });
-
- test(".isNotEmpty", () {
- expect(set.isNotEmpty, isFalse);
- map["foo"] = 1;
- expect(set.isNotEmpty, isTrue);
- });
-
- test(".length", () {
- expect(set, hasLength(0));
- map["foo"] = 1;
- expect(set, hasLength(1));
- map["bar"] = 2;
- expect(set, hasLength(2));
- });
-
- test("is unmodifiable", () {
- expect(() => set.add("baz"), throwsUnsupportedError);
- expect(() => set.addAll(["baz", "bang"]), throwsUnsupportedError);
- expect(() => set.remove("foo"), throwsUnsupportedError);
- expect(() => set.removeAll(["baz", "bang"]), throwsUnsupportedError);
- expect(() => set.retainAll(["foo"]), throwsUnsupportedError);
- expect(() => set.removeWhere((_) => true), throwsUnsupportedError);
- expect(() => set.retainWhere((_) => true), throwsUnsupportedError);
- expect(() => set.clear(), throwsUnsupportedError);
- });
- });
-
- group("MapValueSet", () {
- var map;
- var set;
-
- setUp(() {
- map = new Map<String, String>();
- set = new MapValueSet<String, String>(map,
- (string) => string.substring(0, 1));
- });
-
- testTwoElementSet(() {
- map["f"] = "foo";
- map["b"] = "bar";
- return set;
- });
-
- test(".single", () {
- expect(() => set.single, throwsStateError);
- map["f"] = "foo";
- expect(set.single, equals("foo"));
- map["b"] = "bar";
- expect(() => set.single, throwsStateError);
- });
-
- test(".toString", () {
- expect(set.toString(), equals("{}"));
- map["f"] = "foo";
- map["b"] = "bar";
- expect(set.toString(), equals("{foo, bar}"));
- });
-
- test(".contains", () {
- expect(set.contains("foo"), isFalse);
- map["f"] = "foo";
- expect(set.contains("foo"), isTrue);
- expect(set.contains("fblthp"), isTrue);
- });
-
- test(".isEmpty", () {
- expect(set.isEmpty, isTrue);
- map["f"] = "foo";
- expect(set.isEmpty, isFalse);
- });
-
- test(".isNotEmpty", () {
- expect(set.isNotEmpty, isFalse);
- map["f"] = "foo";
- expect(set.isNotEmpty, isTrue);
- });
-
- test(".length", () {
- expect(set, hasLength(0));
- map["f"] = "foo";
- expect(set, hasLength(1));
- map["b"] = "bar";
- expect(set, hasLength(2));
- });
-
- test(".lookup", () {
- map["f"] = "foo";
- expect(set.lookup("fblthp"), equals("foo"));
- expect(set.lookup("bar"), isNull);
- });
-
- test(".add", () {
- set.add("foo");
- set.add("bar");
- expect(map, equals({"f": "foo", "b": "bar"}));
- });
-
- test(".addAll", () {
- set.addAll(["foo", "bar"]);
- expect(map, equals({"f": "foo", "b": "bar"}));
- });
-
- test(".clear", () {
- map["f"] = "foo";
- map["b"] = "bar";
- set.clear();
- expect(map, isEmpty);
- });
-
- test(".remove", () {
- map["f"] = "foo";
- map["b"] = "bar";
- set.remove("fblthp");
- expect(map, equals({"b": "bar"}));
- });
-
- test(".removeAll", () {
- map["f"] = "foo";
- map["b"] = "bar";
- map["q"] = "qux";
- set.removeAll(["fblthp", "qux"]);
- expect(map, equals({"b": "bar"}));
- });
-
- test(".removeWhere", () {
- map["f"] = "foo";
- map["b"] = "bar";
- map["q"] = "qoo";
- set.removeWhere((element) => element.endsWith("o"));
- expect(map, equals({"b": "bar"}));
- });
-
- test(".retainAll", () {
- map["f"] = "foo";
- map["b"] = "bar";
- map["q"] = "qux";
- set.retainAll(["fblthp", "qux"]);
- expect(map, equals({"f": "foo", "q": "qux"}));
- });
-
- test(".retainAll respects an unusual notion of equality", () {
- map = new HashMap<String, String>(
- equals: (value1, value2) =>
- value1.toLowerCase() == value2.toLowerCase(),
- hashCode: (value) => value.toLowerCase().hashCode);
- set = new MapValueSet<String, String>(map,
- (string) => string.substring(0, 1));
-
- map["f"] = "foo";
- map["B"] = "bar";
- map["Q"] = "qux";
- set.retainAll(["fblthp", "qux"]);
- expect(map, equals({"f": "foo", "Q": "qux"}));
- });
-
- test(".retainWhere", () {
- map["f"] = "foo";
- map["b"] = "bar";
- map["q"] = "qoo";
- set.retainWhere((element) => element.endsWith("o"));
- expect(map, equals({"f": "foo", "q": "qoo"}));
- });
- });
-}
diff --git a/pkg/compiler/lib/src/closure.dart b/pkg/compiler/lib/src/closure.dart
index fbefe05..beeadde 100644
--- a/pkg/compiler/lib/src/closure.dart
+++ b/pkg/compiler/lib/src/closure.dart
@@ -1028,6 +1028,18 @@
node.visitChildren(this);
inTryStatement = oldInTryStatement;
}
+
+ visitForIn(ForIn node) {
+ if (node.awaitToken != null) {
+ // An `await for` loop is enclosed in an implicit try-finally.
+ bool oldInTryStatement = inTryStatement;
+ inTryStatement = true;
+ visitLoop(node);
+ inTryStatement = oldInTryStatement;
+ } else {
+ visitLoop(node);
+ }
+ }
}
/// A type variable as a local variable.
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 5427478..bd636e4 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -1322,10 +1322,16 @@
}
return true;
});
- reportWarning(NO_LOCATION_SPANNABLE,
- MessageKind.IMPORT_EXPERIMENTAL_MIRRORS,
- {'importChain': importChains.join(
- MessageKind.IMPORT_EXPERIMENTAL_MIRRORS_PADDING)});
+
+ if (const bool.fromEnvironment("dart2js.use.new.emitter")) {
+ reportError(NO_LOCATION_SPANNABLE,
+ MessageKind.MIRRORS_LIBRARY_NEW_EMITTER);
+ } else {
+ reportWarning(NO_LOCATION_SPANNABLE,
+ MessageKind.IMPORT_EXPERIMENTAL_MIRRORS,
+ {'importChain': importChains.join(
+ MessageKind.IMPORT_EXPERIMENTAL_MIRRORS_PADDING)});
+ }
}
functionClass.ensureResolved(this);
@@ -2223,6 +2229,9 @@
/// Returns `true` when [s] is private if used as an identifier.
bool isPrivateName(String s) => !s.isEmpty && s.codeUnitAt(0) == $_;
+/// Returns `true` when [s] is public if used as an identifier.
+bool isPublicName(String s) => !isPrivateName(s);
+
/// A sink that drains into /dev/null.
class NullSink implements EventSink<String> {
final String name;
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
index e45762e..b0bc57c 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
@@ -10,6 +10,7 @@
import '../dart2jslib.dart';
import '../elements/elements.dart';
import '../io/source_file.dart';
+import '../io/source_information.dart';
import '../tree/tree.dart' as ast;
import '../scanner/scannerlib.dart' show Token, isUserDefinableOperator;
import '../universe/universe.dart' show SelectorKind;
@@ -111,6 +112,8 @@
final JumpTarget target;
final List<ir.InvokeContinuation> _invocations = <ir.InvokeContinuation>[];
final List<Environment> _environments = <Environment>[];
+ final List<Iterable<LocalVariableElement>> boxedTryVariables =
+ <Iterable<LocalVariableElement>>[];
JumpCollector(this.target);
@@ -120,6 +123,15 @@
List<Environment> get environments => _environments;
void addJump(IrBuilder builder) {
+ // Unbox all variables that were boxed on entry to try blocks between the
+ // jump and the target.
+ for (Iterable<LocalVariableElement> boxedOnEntry in boxedTryVariables) {
+ for (LocalVariableElement variable in boxedOnEntry) {
+ assert(builder.isInMutableVariable(variable));
+ ir.Primitive value = builder.buildLocalGet(variable);
+ builder.environment.update(variable, value);
+ }
+ }
ir.InvokeContinuation invoke = new ir.InvokeContinuation.uninitialized();
builder.add(invoke);
_invocations.add(invoke);
@@ -128,6 +140,26 @@
// TODO(kmillikin): Can we set builder.environment to null to make it
// less likely to mutate it?
}
+
+ /// Add a set of variables that were boxed on entry to a try block.
+ ///
+ /// Jumps from a try block to targets outside have to unbox the variables
+ /// that were boxed on entry before invoking the target continuation. Call
+ /// this function before translating a try block and call [leaveTry] after
+ /// translating it.
+ void enterTry(Iterable<LocalVariableElement> boxedOnEntry) {
+ // The boxed variables are maintained as a stack to make leaving easy.
+ boxedTryVariables.add(boxedOnEntry);
+ }
+
+ /// Remove the most recently added set of variables boxed on entry to a try
+ /// block.
+ ///
+ /// Call [enterTry] before translating a try block and call this function
+ /// after translating it.
+ void leaveTry() {
+ boxedTryVariables.removeLast();
+ }
}
/// Function for building a node in the context of the current builder.
@@ -208,6 +240,30 @@
abstract class IrBuilder {
IrBuilder _makeInstance();
+ /// A map from TryStatements in the AST to their analysis information.
+ ///
+ /// This includes which variables should be copied into [ir.MutableVariable]s
+ /// on entry to the try and copied out on exit.
+ Map<ast.TryStatement, TryStatementInfo> get tryStatements;
+
+ /// The set of local variables that will spend their lifetime as
+ /// [ir.MutableVariable]s due to being captured by a nested function.
+ Set<Local> get mutableCapturedVariables;
+
+ /// True if [local] should currently be accessed from a [ir.MutableVariable].
+ bool isInMutableVariable(Local local);
+
+ /// Creates a [ir.MutableVariable] for the given local.
+ void makeMutableVariable(Local local);
+
+ /// Remove an [ir.MutableVariable] for a local.
+ ///
+ /// Subsequent access to the local will be direct rather than through the
+ /// mutable variable. This is used for variables that do not spend their
+ /// entire lifetime as mutable variables (e.g., variables that are boxed
+ /// in mutable variables for a try block).
+ void removeMutableVariable(Local local);
+
void declareLocalVariable(LocalVariableElement element,
{ir.Primitive initialValue});
ir.Primitive buildLocalGet(LocalElement element);
@@ -390,10 +446,12 @@
ir.Primitive _buildInvokeStatic(Element element,
Selector selector,
- List<ir.Primitive> arguments) {
+ List<ir.Primitive> arguments,
+ SourceInformation sourceInformation) {
assert(isOpen);
return _continueWithExpression(
- (k) => new ir.InvokeStatic(element, selector, k, arguments));
+ (k) => new ir.InvokeStatic(element, selector, k, arguments,
+ sourceInformation));
}
ir.Primitive _buildInvokeSuper(Element target,
@@ -689,26 +747,32 @@
/// defined by [selector] and the argument values are defined by [arguments].
ir.Primitive buildStaticInvocation(Element element,
Selector selector,
- List<ir.Primitive> arguments) {
- return _buildInvokeStatic(element, selector, arguments);
+ List<ir.Primitive> arguments,
+ {SourceInformation sourceInformation}) {
+ return _buildInvokeStatic(element, selector, arguments, sourceInformation);
}
/// Create a static getter invocation of [element] where the getter name is
/// defined by [selector].
- ir.Primitive buildStaticGet(Element element, Selector selector) {
+ ir.Primitive buildStaticGet(Element element,
+ Selector selector,
+ {SourceInformation sourceInformation}) {
assert(selector.isGetter);
// TODO(karlklose,sigurdm): build different nodes for getters.
- return _buildInvokeStatic(element, selector, const <ir.Primitive>[]);
+ return _buildInvokeStatic(
+ element, selector, const <ir.Primitive>[], sourceInformation);
}
/// Create a static setter invocation of [element] where the setter name and
/// argument are defined by [selector] and [value], respectively.
ir.Primitive buildStaticSet(Element element,
Selector selector,
- ir.Primitive value) {
+ ir.Primitive value,
+ {SourceInformation sourceInformation}) {
assert(selector.isSetter);
// TODO(karlklose,sigurdm): build different nodes for setters.
- _buildInvokeStatic(element, selector, <ir.Primitive>[value]);
+ _buildInvokeStatic(
+ element, selector, <ir.Primitive>[value], sourceInformation);
return value;
}
@@ -816,6 +880,19 @@
}
}
+ void jumpTo(ir.Continuation continuation) {
+ assert(isOpen);
+ assert(environment.length >= continuation.parameters.length);
+ ir.InvokeContinuation jump = new ir.InvokeContinuation.uninitialized();
+ jump.continuation = new ir.Reference(continuation);
+ jump.arguments = new List<ir.Reference>.generate(
+ continuation.parameters.length, (i) {
+ return new ir.Reference(environment[i]);
+ });
+ add(jump);
+ _current = null;
+ }
+
/// Invoke a join-point continuation that contains arguments for all local
/// variables.
///
@@ -824,6 +901,9 @@
void invokeFullJoin(ir.Continuation join,
JumpCollector jumps,
{recursive: false}) {
+ // TODO(kmillikin): If the JumpCollector collected open IrBuilders instead
+ // of pairs of invocations and environments, we could use IrBuilder.jumpTo
+ // here --- the code is almost the same.
join.isRecursive = recursive;
for (int i = 0; i < jumps.length; ++i) {
Environment currentEnvironment = jumps.environments[i];
@@ -1518,7 +1598,7 @@
final Map<Local, ir.MutableVariable> local2mutable =
<Local, ir.MutableVariable>{};
- final DartCapturedVariableInfo capturedVariables;
+ final DartCapturedVariables capturedVariables;
/// Creates a [MutableVariable] for the given local.
void makeMutableVariable(Local local) {
@@ -1550,17 +1630,32 @@
DartIrBuilder(ConstantSystem constantSystem,
ExecutableElement currentElement,
- DartCapturedVariableInfo capturedVariables)
+ DartCapturedVariables capturedVariables)
: dartState = new DartIrBuilderSharedState(capturedVariables) {
_init(constantSystem, currentElement);
}
- /// True if [local] should currently be accessed from a [MutableVariable].
+ Map<ast.TryStatement, TryStatementInfo> get tryStatements {
+ return dartState.capturedVariables.tryStatements;
+ }
+
+ Set<Local> get mutableCapturedVariables {
+ return dartState.capturedVariables.capturedVariables;
+ }
+
bool isInMutableVariable(Local local) {
return dartState.local2mutable.containsKey(local) &&
!dartState.registerizedMutableVariables.contains(local);
}
+ void makeMutableVariable(Local local) {
+ dartState.makeMutableVariable(local);
+ }
+
+ void removeMutableVariable(Local local) {
+ dartState.local2mutable.remove(local);
+ }
+
/// Gets the [MutableVariable] containing the value of [local].
ir.MutableVariable getMutableVariable(Local local) {
return dartState.local2mutable[local];
@@ -1734,6 +1829,12 @@
_init(constantSystem, currentElement);
}
+ Map<ast.TryStatement, TryStatementInfo> get tryStatements => null;
+ Set<Local> get mutableCapturedVariables => null;
+ bool isInMutableVariable(Local local) => false;
+ void makeMutableVariable(Local local) {}
+ void removeMutableVariable(Local local) {}
+
void _enterClosureEnvironment(ClosureEnvironment env) {
if (env == null) return;
@@ -2012,10 +2113,8 @@
ClosureEnvironment(this.selfReference, this.thisLocal, this.freeVariables);
}
-/// Information about which variables are captured by a nested function.
-///
-/// This is used by the [DartIrBuilder] instead of [ClosureScope] and
-/// [ClosureEnvironment].
-abstract class DartCapturedVariableInfo {
- Iterable<Local> get capturedVariables;
+class TryStatementInfo {
+ final Set<LocalVariableElement> declared = new Set<LocalVariableElement>();
+ final Set<LocalVariableElement> boxedOnEntry =
+ new Set<LocalVariableElement>();
}
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart
index 492f117..5c8313b 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart
@@ -24,8 +24,10 @@
class IrBuilderTask extends CompilerTask {
final Map<Element, ir.ExecutableDefinition> nodes =
<Element, ir.ExecutableDefinition>{};
+ final bool generateSourceMap;
- IrBuilderTask(Compiler compiler) : super(compiler);
+ IrBuilderTask(Compiler compiler, {this.generateSourceMap: true})
+ : super(compiler);
String get name => 'IR builder';
@@ -37,27 +39,33 @@
ir.ExecutableDefinition buildNode(AstElement element) {
if (!canBuild(element)) return null;
+
TreeElements elementsMapping = element.resolvedAst.elements;
element = element.implementation;
return compiler.withCurrentElement(element, () {
- SourceFile sourceFile = elementSourceFile(element);
+ SourceInformationBuilder sourceInformationBuilder = generateSourceMap
+ ? new PositionSourceInformationBuilder(element)
+ : const SourceInformationBuilder();
+
IrBuilderVisitor builder =
compiler.backend is JavaScriptBackend
- ? new JsIrBuilderVisitor(elementsMapping, compiler, sourceFile)
- : new DartIrBuilderVisitor(elementsMapping, compiler, sourceFile);
- return builder.buildExecutable(element);
+ ? new JsIrBuilderVisitor(
+ elementsMapping, compiler, sourceInformationBuilder)
+ : new DartIrBuilderVisitor(
+ elementsMapping, compiler, sourceInformationBuilder);
+ ir.ExecutableDefinition definition =
+ builder.buildExecutable(element);
+ if (definition != null) {
+ nodes[element] = definition;
+ }
+ return definition;
});
}
void buildNodes() {
measure(() {
Set<Element> resolved = compiler.enqueuer.resolution.resolvedElements;
- resolved.forEach((AstElement element) {
- ir.ExecutableDefinition definition = buildNode(element);
- if (definition != null) {
- nodes[element] = definition;
- }
- });
+ resolved.forEach(buildNode);
});
}
@@ -91,14 +99,6 @@
}
-SourceFile elementSourceFile(Element element) {
- if (element is FunctionElement) {
- FunctionElement functionElement = element;
- if (functionElement.patch != null) element = functionElement.patch;
- }
- return element.compilationUnit.script.file;
-}
-
class _GetterElements {
ir.Primitive result;
ir.Primitive index;
@@ -115,7 +115,7 @@
abstract class IrBuilderVisitor extends ResolvedVisitor<ir.Primitive>
with IrBuilderMixin<ast.Node> {
final Compiler compiler;
- final SourceFile sourceFile;
+ final SourceInformationBuilder sourceInformationBuilder;
// In SSA terms, join-point continuation parameters are the phis and the
// continuation invocation arguments are the corresponding phi inputs. To
@@ -136,7 +136,9 @@
// arguments, and what the arguments are.
/// Construct a top-level visitor.
- IrBuilderVisitor(TreeElements elements, this.compiler, this.sourceFile)
+ IrBuilderVisitor(TreeElements elements,
+ this.compiler,
+ this.sourceInformationBuilder)
: super(elements);
/**
@@ -451,6 +453,152 @@
return null;
}
+ ir.Primitive visitTryStatement(ast.TryStatement node) {
+ assert(this.irBuilder.isOpen);
+ // Try/catch is not yet implemented in the JS backend.
+ if (this.irBuilder.tryStatements == null) {
+ return giveup(node, 'try/catch in the JS backend');
+ }
+ // Multiple catch blocks are not yet implemented.
+ if (node.catchBlocks.isEmpty ||
+ node.catchBlocks.nodes.tail == null) {
+ return giveup(node, 'not exactly one catch block');
+ }
+ // 'on T' catch blocks are not yet implemented.
+ if ((node.catchBlocks.nodes.head as ast.CatchBlock).onKeyword != null) {
+ return giveup(node, '"on T" catch block');
+ }
+ // Finally blocks are not yet implemented.
+ if (node.finallyBlock != null) {
+ return giveup(node, 'try/finally');
+ }
+
+ // Catch handlers are in scope for their body. The CPS translation of
+ // [[try tryBlock catch (e) catchBlock; successor]] is:
+ //
+ // let cont join(v0, v1, ...) = [[successor]] in
+ // let mutable m0 = x0 in
+ // let mutable m1 = x1 in
+ // ...
+ // let handler catch_(e) =
+ // let prim p0 = GetMutable(m0) in
+ // let prim p1 = GetMutable(m1) in
+ // ...
+ // [[catchBlock]]
+ // join(p0, p1, ...)
+ // in
+ // [[tryBlock]]
+ // let prim p0' = GetMutable(m0) in
+ // let prim p1' = GetMutable(m1) in
+ // ...
+ // join(p0', p1', ...)
+ //
+ // In other words, both the try and catch block are in the scope of the
+ // join-point continuation, and they are both in the scope of a sequence
+ // of mutable bindings for the variables assigned in the try. The join-
+ // point continuation is not in the scope of these mutable bindings.
+ // The tryBlock is in the scope of a binding for the catch handler. Each
+ // instruction (specifically, each call) in the tryBlock is in the dynamic
+ // scope of the handler. The mutable bindings are dereferenced at the end
+ // of the try block and at the beginning of the catch block, so the
+ // variables are unboxed in the catch block and at the join point.
+
+ IrBuilder tryCatchBuilder = irBuilder.makeDelimitedBuilder();
+ TryStatementInfo tryInfo = tryCatchBuilder.tryStatements[node];
+ // Variables that are boxed due to being captured in a closure are boxed
+ // for their entire lifetime, and so they do not need to be boxed on
+ // entry to any try block. We check for them here because we can not
+ // identify all of them in the same pass where we identify the variables
+ // assigned in the try (the may be captured by a closure after the try
+ // statement).
+ Iterable<LocalVariableElement> boxedOnEntry =
+ tryInfo.boxedOnEntry.where((LocalVariableElement variable) {
+ return !tryCatchBuilder.mutableCapturedVariables.contains(variable);
+ });
+ for (LocalVariableElement variable in boxedOnEntry) {
+ assert(!tryCatchBuilder.isInMutableVariable(variable));
+ ir.Primitive value = tryCatchBuilder.buildLocalGet(variable);
+ tryCatchBuilder.makeMutableVariable(variable);
+ tryCatchBuilder.declareLocalVariable(variable, initialValue: value);
+ }
+
+ IrBuilder catchBuilder = tryCatchBuilder.makeDelimitedBuilder();
+ IrBuilder tryBuilder = tryCatchBuilder.makeDelimitedBuilder();
+ List<ir.Parameter> joinParameters =
+ new List<ir.Parameter>.generate(irBuilder.environment.length, (i) {
+ return new ir.Parameter(irBuilder.environment.index2variable[i]);
+ });
+ ir.Continuation joinContinuation = new ir.Continuation(joinParameters);
+
+ void interceptJumps(JumpCollector collector) {
+ collector.enterTry(boxedOnEntry);
+ }
+ void restoreJumps(JumpCollector collector) {
+ collector.leaveTry();
+ }
+ tryBuilder.state.breakCollectors.forEach(interceptJumps);
+ tryBuilder.state.continueCollectors.forEach(interceptJumps);
+ withBuilder(tryBuilder, () {
+ visit(node.tryBlock);
+ });
+ tryBuilder.state.breakCollectors.forEach(restoreJumps);
+ tryBuilder.state.continueCollectors.forEach(restoreJumps);
+ if (tryBuilder.isOpen) {
+ for (LocalVariableElement variable in boxedOnEntry) {
+ assert(tryBuilder.isInMutableVariable(variable));
+ ir.Primitive value = tryBuilder.buildLocalGet(variable);
+ tryBuilder.environment.update(variable, value);
+ }
+ tryBuilder.jumpTo(joinContinuation);
+ }
+
+ for (LocalVariableElement variable in boxedOnEntry) {
+ assert(catchBuilder.isInMutableVariable(variable));
+ ir.Primitive value = catchBuilder.buildLocalGet(variable);
+ // Note that we remove the variable from the set of mutable variables
+ // here (and not above for the try body). This is because the set of
+ // mutable variables is global for the whole function and not local to
+ // a delimited builder.
+ catchBuilder.removeMutableVariable(variable);
+ catchBuilder.environment.update(variable, value);
+ }
+ ast.CatchBlock catchClause = node.catchBlocks.nodes.head;
+ assert(catchClause.exception != null);
+ LocalVariableElement exceptionElement = elements[catchClause.exception];
+ ir.Parameter exceptionParameter = new ir.Parameter(exceptionElement);
+ catchBuilder.environment.extend(exceptionElement, exceptionParameter);
+ ir.Parameter traceParameter;
+ if (catchClause.trace != null) {
+ LocalVariableElement traceElement = elements[catchClause.trace];
+ traceParameter = new ir.Parameter(traceElement);
+ catchBuilder.environment.extend(traceElement, traceParameter);
+ } else {
+ // Use a dummy continuation parameter for the stack trace parameter.
+ // This will ensure that all handlers have two parameters and so they
+ // can be treated uniformly.
+ traceParameter = new ir.Parameter(null);
+ }
+ withBuilder(catchBuilder, () {
+ visit(catchClause.block);
+ });
+ if (catchBuilder.isOpen) {
+ catchBuilder.jumpTo(joinContinuation);
+ }
+ List<ir.Parameter> catchParameters =
+ <ir.Parameter>[exceptionParameter, traceParameter];
+ ir.Continuation catchContinuation = new ir.Continuation(catchParameters);
+ catchContinuation.body = catchBuilder._root;
+
+ tryCatchBuilder.add(new ir.LetHandler(catchContinuation, tryBuilder._root));
+ tryCatchBuilder._current = null;
+
+ irBuilder.add(new ir.LetCont(joinContinuation, tryCatchBuilder._root));
+ for (int i = 0; i < irBuilder.environment.length; ++i) {
+ irBuilder.environment.index2value[i] = joinParameters[i];
+ }
+ return null;
+ }
+
// ==== Expressions ====
ir.Primitive visitConditional(ast.Conditional node) {
return irBuilder.buildConditional(
@@ -653,7 +801,8 @@
// so the vm can fail at runtime.
assert(selector.kind == SelectorKind.GETTER ||
selector.kind == SelectorKind.SETTER);
- result = irBuilder.buildStaticGet(element, selector);
+ result = irBuilder.buildStaticGet(element, selector,
+ sourceInformation: sourceInformationBuilder.buildGet(node));
} else if (Elements.isStaticOrTopLevelFunction(element)) {
// Convert a top-level or static function to a function object.
result = translateConstant(node);
@@ -752,7 +901,8 @@
assert(element is FunctionElement);
List<ir.Primitive> arguments = node.arguments.mapToList(visit);
arguments = normalizeStaticArguments(selector, element, arguments);
- return irBuilder.buildStaticInvocation(element, selector, arguments);
+ return irBuilder.buildStaticInvocation(element, selector, arguments,
+ sourceInformation: sourceInformationBuilder.buildCall(node));
}
}
@@ -984,8 +1134,7 @@
/// sees a feature that is currently unsupport by that builder. In particular,
/// loop variables captured in a for-loop initializer, condition, or update
/// expression are unsupported.
-class DartCapturedVariables extends ast.Visitor
- implements DartCapturedVariableInfo {
+class DartCapturedVariables extends ast.Visitor {
final TreeElements elements;
DartCapturedVariables(this.elements);
@@ -993,6 +1142,12 @@
bool insideInitializer = false;
Set<Local> capturedVariables = new Set<Local>();
+ Map<ast.TryStatement, TryStatementInfo> tryStatements =
+ <ast.TryStatement, TryStatementInfo>{};
+
+ List<TryStatementInfo> tryNestingStack = <TryStatementInfo>[];
+ bool get inTryStatement => tryNestingStack.isNotEmpty;
+
void markAsCaptured(Local local) {
capturedVariables.add(local);
}
@@ -1040,18 +1195,32 @@
visitSendSet(ast.SendSet node) {
handleSend(node);
Element element = elements[node];
- // Initializers in an initializer-list can communicate via parameters.
- // If a parameter is stored in an initializer list we box it.
- if (insideInitializer &&
- Elements.isLocal(element) &&
- element.isParameter) {
+ if (Elements.isLocal(element)) {
LocalElement local = element;
- // TODO(sigurdm): Fix this.
- // Though these variables do not outlive the activation of the function,
- // they still need to be boxed. As a simplification, we treat them as if
- // they are captured by a closure (i.e., they do outlive the activation of
- // the function).
- markAsCaptured(local);
+ if (insideInitializer) {
+ assert(local.isParameter);
+ // Initializers in an initializer-list can communicate via parameters.
+ // If a parameter is stored in an initializer list we box it.
+ // TODO(sigurdm): Fix this.
+ // Though these variables do not outlive the activation of the
+ // function, they still need to be boxed. As a simplification, we
+ // treat them as if they are captured by a closure (i.e., they do
+ // outlive the activation of the function).
+ markAsCaptured(local);
+ } else if (inTryStatement) {
+ assert(local.isParameter || local.isVariable);
+ // Search for the position of the try block containing the variable
+ // declaration, or -1 if it is declared outside the outermost try.
+ int i = tryNestingStack.length - 1;
+ while (i >= 0 && !tryNestingStack[i].declared.contains(local)) {
+ --i;
+ }
+ // If there is a next inner try, then the variable should be boxed on
+ // entry to it.
+ if (i + 1 < tryNestingStack.length) {
+ tryNestingStack[i + 1].boxedOnEntry.add(local);
+ }
+ }
}
node.visitChildren(this);
}
@@ -1070,6 +1239,32 @@
visit(node.body);
currentFunction = oldFunction;
}
+
+ visitTryStatement(ast.TryStatement node) {
+ TryStatementInfo info = new TryStatementInfo();
+ tryStatements[node] = info;
+ tryNestingStack.add(info);
+ visit(node.tryBlock);
+ assert(tryNestingStack.last == info);
+ tryNestingStack.removeLast();
+
+ visit(node.catchBlocks);
+ if (node.finallyBlock != null) visit(node.finallyBlock);
+ }
+
+ visitVariableDefinitions(ast.VariableDefinitions node) {
+ if (inTryStatement) {
+ for (ast.Node definition in node.definitions.nodes) {
+ LocalVariableElement local = elements[definition];
+ assert(local != null);
+ // In the closure conversion pass we check for isInitializingFormal,
+ // but I'm not sure it can arise.
+ assert(!local.isInitializingFormal);
+ tryNestingStack.last.declared.add(local);
+ }
+ }
+ node.visitChildren(this);
+ }
}
/// IR builder specific to the Dart backend, coupled to the [DartIrBuilder].
@@ -1078,9 +1273,9 @@
DartIrBuilder get irBuilder => super.irBuilder;
DartIrBuilderVisitor(TreeElements elements,
- Compiler compiler,
- SourceFile sourceFile)
- : super(elements, compiler, sourceFile);
+ Compiler compiler,
+ SourceInformationBuilder sourceInformationBuilder)
+ : super(elements, compiler, sourceInformationBuilder);
DartIrBuilder makeIRBuilder(ast.Node node, ExecutableElement element) {
DartCapturedVariables closures = new DartCapturedVariables(elements);
@@ -1205,8 +1400,8 @@
JsIrBuilderVisitor(TreeElements elements,
Compiler compiler,
- SourceFile sourceFile)
- : super(elements, compiler, sourceFile);
+ SourceInformationBuilder sourceInformationBuilder)
+ : super(elements, compiler, sourceInformationBuilder);
/// Builds the IR for creating an instance of the closure class corresponding
/// to the given nested function.
@@ -1317,7 +1512,7 @@
JsIrBuilderVisitor visitor = new JsIrBuilderVisitor(
context.resolvedAst.elements,
compiler,
- elementSourceFile(context));
+ sourceInformationBuilder.forContext(context));
return visitor.withBuilder(irBuilder, () => visitor.visit(expression));
}
@@ -1329,7 +1524,7 @@
JsIrBuilderVisitor visitor = new JsIrBuilderVisitor(
context.resolvedAst.elements,
compiler,
- elementSourceFile(context));
+ sourceInformationBuilder.forContext(context));
return visitor.withBuilder(irBuilder, () => visitor.translateConstant(exp));
}
@@ -1711,6 +1906,45 @@
}
return result;
}
-
}
+/// Interface for generating [SourceInformation] for the CPS.
+class SourceInformationBuilder {
+ const SourceInformationBuilder();
+
+ /// Create a [SourceInformationBuilder] for [element].
+ SourceInformationBuilder forContext(AstElement element) => this;
+
+ /// Generate [SourceInformation] for the read access in [node].
+ SourceInformation buildGet(ast.Node node) => null;
+
+ /// Generate [SourceInformation] for the invocation in [node].
+ SourceInformation buildCall(ast.Node node) => null;
+}
+
+/// [SourceInformationBuilder] that generates [PositionSourceInformation].
+class PositionSourceInformationBuilder implements SourceInformationBuilder {
+ final SourceFile sourceFile;
+ final String name;
+
+ PositionSourceInformationBuilder(AstElement element)
+ : sourceFile = element.compilationUnit.script.file,
+ name = element.name;
+
+ @override
+ SourceInformation buildGet(ast.Node node) {
+ return new PositionSourceInformation(
+ new TokenSourceLocation(sourceFile, node.getBeginToken(), name));
+ }
+
+ @override
+ SourceInformation buildCall(ast.Node node) {
+ return new PositionSourceInformation(
+ new TokenSourceLocation(sourceFile, node.getBeginToken(), name));
+ }
+
+ @override
+ SourceInformationBuilder forContext(AstElement element) {
+ return new PositionSourceInformationBuilder(element);
+ }
+}
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
index f1d5616..3296adc 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
@@ -8,11 +8,12 @@
import '../constants/expressions.dart';
import '../constants/values.dart' as values show ConstantValue;
+import '../cps_ir/optimizers.dart';
+import '../dart_types.dart' show DartType, GenericType;
import '../dart2jslib.dart' as dart2js show invariant;
import '../elements/elements.dart';
+import '../io/source_information.dart' show SourceInformation;
import '../universe/universe.dart' show Selector, SelectorKind;
-import '../dart_types.dart' show DartType, GenericType;
-import '../cps_ir/optimizers.dart';
abstract class Node {
/// A pointer to the parent node. Is null until set by optimization passes.
@@ -154,6 +155,24 @@
accept(Visitor visitor) => visitor.visitLetCont(this);
}
+// Binding an exception handler.
+//
+// let handler h(v0, v1) = E0 in E1
+//
+// The handler is a two-argument (exception, stack trace) continuation which
+// is implicitly the error continuation of all the code in its body E1.
+// [LetHandler] differs from a [LetCont] binding in that it (1) has the
+// runtime semantics of pushing/popping a handler from the dynamic exception
+// handler stack and (2) it does not have any explicit invocations.
+class LetHandler extends Expression implements InteriorNode {
+ Continuation handler;
+ Expression body;
+
+ LetHandler(this.handler, this.body);
+
+ accept(Visitor visitor) => visitor.visitLetHandler(this);
+}
+
/// Binding mutable variables.
///
/// let mutable v = P in E
@@ -209,9 +228,13 @@
final Reference<Continuation> continuation;
final List<Reference<Primitive>> arguments;
+ final SourceInformation sourceInformation;
- InvokeStatic(this.target, this.selector, Continuation cont,
- List<Primitive> args)
+ InvokeStatic(this.target,
+ this.selector,
+ Continuation cont,
+ List<Primitive> args,
+ this.sourceInformation)
: continuation = new Reference<Continuation>(cont),
arguments = _referenceList(args) {
assert(target is ErroneousElement || selector.name == target.name);
@@ -873,6 +896,7 @@
// Expressions.
T visitLetPrim(LetPrim node) => visitExpression(node);
T visitLetCont(LetCont node) => visitExpression(node);
+ T visitLetHandler(LetHandler node) => visitExpression(node);
T visitLetMutable(LetMutable node) => visitExpression(node);
T visitInvokeStatic(InvokeStatic node) => visitExpression(node);
T visitInvokeContinuation(InvokeContinuation node) => visitExpression(node);
@@ -985,6 +1009,13 @@
visit(node.body);
}
+ processLetHandler(LetHandler node) {}
+ visitLetHandler(LetHandler node) {
+ processLetHandler(node);
+ visit(node.handler);
+ visit(node.body);
+ }
+
processLetMutable(LetMutable node) {}
visitLetMutable(LetMutable node) {
processLetMutable(node);
@@ -1279,6 +1310,22 @@
visit(node.body);
}
+ void visitLetHandler(LetHandler node) {
+ visit(node.handler);
+ // Handler parameters that were not used in the handler body will not have
+ // had register indexes assigned. Assign them here, otherwise they will
+ // be eliminated later and they should not be (i.e., a catch clause that
+ // does not use the exception parameter should not have the exception
+ // parameter eliminated, because it would not be well-formed anymore).
+ // In any case release the parameter indexes because the parameters are
+ // not live in the try block.
+ node.handler.parameters.forEach((Parameter parameter) {
+ allocate(parameter);
+ release(parameter);
+ });
+ visit(node.body);
+ }
+
void visitLetMutable(LetMutable node) {
visit(node.body);
visitReference(node.value);
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart
index d5000f1..5e8eff6 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart
@@ -98,7 +98,19 @@
}
}
String body = indentBlock(() => visit(node.body));
- return '$indentation($LetCont ($conts)\n$body)';
+ return '$indentation(LetCont ($conts)\n$body)';
+ }
+
+ String visitLetHandler(LetHandler node) {
+ // There are no explicit references to the handler, so we leave it
+ // anonymous in the printed representation.
+ String parameters = node.handler.parameters
+ .map((p) => '${decorator(p, newValueName(p))}')
+ .join(' ');
+ String handlerBody =
+ indentBlock(() => indentBlock(() => visit(node.handler.body)));
+ String body = indentBlock(() => visit(node.body));
+ return '$indentation(LetHandler (($parameters)\n$handlerBody)\n$body)';
}
String visitLetMutable(LetMutable node) {
@@ -315,19 +327,27 @@
}
String visitList(ListConstantValue constant, _) {
- return _failWith(constant);
+ String entries =
+ constant.entries.map((entry) => entry.accept(this, _)).join(' ');
+ return '(List $entries)';
}
String visitMap(MapConstantValue constant, _) {
- return _failWith(constant);
+ List<String> elements = <String>[];
+ for (int i = 0; i < constant.keys.length; ++i) {
+ ConstantValue key = constant.keys[i];
+ ConstantValue value = constant.values[i];
+ elements.add('(${key.accept(this, _)} . ${value.accept(this, _)})');
+ }
+ return '(Map (${elements.join(' ')}))';
}
String visitConstructed(ConstructedConstantValue constant, _) {
- return _failWith(constant);
+ return '(Constructed "${constant.unparse()}")';
}
String visitType(TypeConstantValue constant, _) {
- return _failWith(constant);
+ return '(Type "${constant.representedType}")';
}
String visitInterceptor(InterceptorConstantValue constant, _) {
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
index bb50842..1fcb5a7 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
@@ -120,6 +120,15 @@
visit(node.body);
}
+ visitLetHandler(cps_ir.LetHandler node) {
+ if (IR_TRACE_LET_CONT) {
+ String dummy = names.name(node);
+ String id = names.name(node.handler);
+ printStmt(dummy, "LetHandler $id = <$id>");
+ }
+ visit(node.body);
+ }
+
visitLetMutable(cps_ir.LetMutable node) {
String id = names.name(node.variable);
printStmt(id, "${node.runtimeType} $id = ${formatReference(node.value)}");
@@ -435,6 +444,15 @@
visit(exp.body);
}
+ visitLetHandler(cps_ir.LetHandler exp) {
+ visit(exp.handler);
+ visit(exp.body);
+ }
+
+ visitLetMutable(cps_ir.LetMutable exp) {
+ visit(exp.body);
+ }
+
void addEdgeToContinuation(cps_ir.Reference continuation) {
cps_ir.Definition target = continuation.definition;
if (target is cps_ir.Continuation && !target.isReturnContinuation) {
@@ -466,10 +484,6 @@
visit(exp.body);
}
- visitLetMutable(cps_ir.LetMutable exp) {
- visit(exp.body);
- }
-
visitSetField(cps_ir.SetField exp) {
visit(exp.body);
}
diff --git a/pkg/compiler/lib/src/cps_ir/redundant_phi.dart b/pkg/compiler/lib/src/cps_ir/redundant_phi.dart
index c4964c0..c0c80bd 100644
--- a/pkg/compiler/lib/src/cps_ir/redundant_phi.dart
+++ b/pkg/compiler/lib/src/cps_ir/redundant_phi.dart
@@ -78,6 +78,24 @@
return value;
}
+ // If uniqueDefinition is in the body of the LetCont binding the
+ // continuation, then we will drop the continuation binding to just inside
+ // the binding of uniqueDefiniton. This is not safe if we drop the
+ // continuation binding inside a LetHandler exception handler binding.
+ LetCont letCont = cont.parent;
+ bool safeForHandlers(Definition uniqueDefinition) {
+ bool seenHandler = false;
+ Node current = uniqueDefinition.parent;
+ while (current != null) {
+ if (current == letCont) return !seenHandler;
+ seenHandler = seenHandler || current is LetHandler;
+ current = current.parent;
+ }
+ // When uniqueDefinition is not in the body of the LetCont binding the
+ // continuation, we will not move any code, so that is safe.
+ return true;
+ }
+
// Check if individual parameters are always called with a unique
// definition, and remove them if that is the case. During each iteration,
// we read the current parameter/argument from index `src` and copy it
@@ -86,13 +104,14 @@
for (int src = 0; src < cont.parameters.length; src++) {
// Is the current phi redundant?
Definition uniqueDefinition = uniqueDefinitionOf(src);
- if (uniqueDefinition == null) {
+ if (uniqueDefinition == null || !safeForHandlers(uniqueDefinition)) {
// Reorganize parameters and arguments in case of deletions.
- cont.parameters[dst] = cont.parameters[src];
- for (InvokeContinuation invoke in invokes) {
+ if (src != dst) {
+ cont.parameters[dst] = cont.parameters[src];
+ for (InvokeContinuation invoke in invokes) {
invoke.arguments[dst] = invoke.arguments[src];
+ }
}
-
dst++;
continue;
}
@@ -101,7 +120,8 @@
// Add continuations of about-to-be modified invokes to worklist since
// we might introduce new optimization opportunities.
- for (Reference ref = oldDefinition.firstRef; ref != null;
+ for (Reference ref = oldDefinition.firstRef;
+ ref != null;
ref = ref.next) {
Node parent = ref.parent;
if (parent is InvokeContinuation) {
@@ -128,7 +148,6 @@
// invokes, and all such invokes must be within the scope of
// [uniqueDefinition]. Note that this is linear in the depth of
// the binding of [uniqueDefinition].
- LetCont letCont = cont.parent;
assert(letCont != null);
_moveIntoScopeOf(letCont, uniqueDefinition);
}
diff --git a/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart b/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart
index 61a72fa..79234f8 100644
--- a/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart
+++ b/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart
@@ -263,12 +263,20 @@
return false;
}
- if (cont.firstRef.parent is InvokeContinuation) {
- InvokeContinuation invoke = cont.firstRef.parent;
- return (cont == invoke.continuation.definition);
- }
+ if (cont.firstRef.parent is! InvokeContinuation) return false;
- return false;
+ InvokeContinuation invoke = cont.firstRef.parent;
+ if (cont != invoke.continuation.definition) return false;
+
+ // Beta-reduction will move the continuation's body to its unique invocation
+ // site. This is not safe if the body is moved into an exception handler
+ // binding.
+ Node current = invoke.parent;
+ while (current != cont.parent) {
+ if (current is LetHandler) return false;
+ current = current.parent;
+ }
+ return true;
}
/// Returns true iff the continuation consists of a continuation
@@ -357,6 +365,12 @@
return false;
}
+ // We cannot remove exception handler parameters, they have a fixed arity
+ // of two.
+ if (parameter.parent.parent is LetHandler) {
+ return false;
+ }
+
// We cannot remove the parameter to a call continuation, because the
// resulting expression will not be well-formed (call continuations have
// exactly one argument). The return continuation is a call continuation, so
@@ -386,6 +400,11 @@
}
void processContinuation(Continuation node) {
+ // While it would be nice to remove exception handlers that are provably
+ // unnecessary (e.g., the body cannot throw), that takes more sophisticated
+ // analysis than we do in this pass.
+ if (node.parent is LetHandler) return;
+
// Continuation beta- and eta-redexes can overlap, namely when an eta-redex
// is invoked exactly once. We prioritize continuation beta-redexes over
// eta-redexes because some reductions (e.g., dead parameter elimination)
@@ -512,6 +531,11 @@
node.body.parent = node;
}
+ processLetHandler(LetHandler node) {
+ node.handler.parent = node;
+ node.body.parent = node;
+ }
+
processLetMutable(LetMutable node) {
node.variable.parent = node;
node.value.parent = node;
diff --git a/pkg/compiler/lib/src/cps_ir/type_propagation.dart b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
index dc36d80..ceef60f 100644
--- a/pkg/compiler/lib/src/cps_ir/type_propagation.dart
+++ b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
@@ -445,6 +445,20 @@
setReachable(node.body);
}
+ void visitLetHandler(LetHandler node) {
+ setReachable(node.body);
+ // The handler is assumed to be reachable (we could instead treat it as
+ // unreachable unless we find something reachable that might throw in the
+ // body --- it's not clear if we want to do that here or in some other
+ // pass). The handler parameters are assumed to be unknown.
+ //
+ // TODO(kmillikin): we should set the type of the exception and stack
+ // trace here. The way we do that depends on how we handle 'on T' catch
+ // clauses.
+ setReachable(node.handler);
+ node.handler.parameters.forEach((Parameter p) => setValue(p, nonConst()));
+ }
+
void visitLetMutable(LetMutable node) {
setValue(node.variable, getValue(node.value.definition));
setReachable(node.body);
diff --git a/pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart b/pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart
index 2779663..787dd5f 100644
--- a/pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart
+++ b/pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart
@@ -38,6 +38,9 @@
/// Variables that have had their declaration created.
final Set<tree.Variable> declaredVariables = new Set<tree.Variable>();
+ /// Variables that are used as catch handler parameters.
+ final Set<tree.Variable> handlerVariables = new Set<tree.Variable>();
+
/// Variable names that have already been used. Used to avoid name clashes.
final Set<String> usedVariableNames;
@@ -83,7 +86,7 @@
new Map<tree.Variable, String>.from(parent.variableNames);
// TODO(johnniwinther): Fully encapsulate handling of parameter, variable
- // and local funciton declarations.
+ // and local function declarations.
void addDeclaration(tree.Variable variable, [Expression initializer]) {
assert(!declaredVariables.contains(variable));
String name = getVariableName(variable);
@@ -93,6 +96,12 @@
variables.add(decl);
}
+ /// Creates an [Identifier] referring to the given variable.
+ Expression makeVariableAccess(tree.Variable variable) {
+ return new Identifier(getVariableName(variable))
+ ..element = variable.element;
+ }
+
/// Generates a name for the given variable and synthesizes an element for it,
/// if necessary.
String getVariableName(tree.Variable variable) {
@@ -360,7 +369,8 @@
// if their first assignment could be pulled into the initializer.
// Add the remaining variable declarations now.
for (tree.Variable variable in context.variableNames.keys) {
- if (!context.declaredVariables.contains(variable)) {
+ if (!context.declaredVariables.contains(variable) &&
+ !context.handlerVariables.contains(variable)) {
context.addDeclaration(variable);
}
}
@@ -536,7 +546,7 @@
}
// Emit a variable declaration if we are required to do so.
- // This is to ensure that a fresh closure variable is created.
+ // For captured variables, this ensures that a fresh variable is created.
if (stmt.isDeclaration) {
assert(isFirstOccurrence);
assert(isDeclaredHere);
@@ -550,7 +560,7 @@
}
context.addStatement(new ExpressionStatement(makeAssignment(
- visitVariable(stmt.variable, context),
+ context.makeVariableAccess(stmt.variable),
definition)));
visitStatement(stmt.next, context);
}
@@ -629,6 +639,34 @@
}
@override
+ void visitTry(tree.Try stmt,
+ BuilderContext<Statement> context) {
+ Block tryBody = visitInSubContext(stmt.tryBody, context);
+ Block catchBody = visitInSubContext(stmt.catchBody, context);
+ CatchBlock catchBlock;
+ tree.Variable exceptionVariable = stmt.catchParameters[0];
+ context.handlerVariables.add(exceptionVariable);
+ VariableDeclaration exceptionParameter =
+ new VariableDeclaration(context.getVariableName(exceptionVariable));
+ exceptionParameter.element = exceptionVariable.element;
+ if (stmt.catchParameters.length == 2) {
+ tree.Variable stackTraceVariable = stmt.catchParameters[1];
+ context.handlerVariables.add(stackTraceVariable);
+ VariableDeclaration stackTraceParameter =
+ new VariableDeclaration(context.getVariableName(stackTraceVariable));
+ stackTraceParameter.element = stackTraceVariable.element;
+ catchBlock = new CatchBlock(catchBody,
+ exceptionVar: exceptionParameter,
+ stackVar: stackTraceParameter);
+ } else {
+ assert(stmt.catchParameters.length == 1);
+ catchBlock = new CatchBlock(catchBody,
+ exceptionVar: exceptionParameter);
+ }
+ context.addStatement(new Try(tryBody, <CatchBlock>[catchBlock], null));
+ }
+
+ @override
Expression visitConstant(tree.Constant exp,
BuilderContext<Statement> context) {
return ConstantEmitter.createExpression(exp.expression, context);
@@ -831,10 +869,9 @@
}
@override
- Expression visitVariable(tree.Variable exp,
- BuilderContext<Statement> context) {
- return new Identifier(context.getVariableName(exp))
- ..element = exp.element;
+ Expression visitVariableUse(tree.VariableUse exp,
+ BuilderContext<Statement> context) {
+ return context.makeVariableAccess(exp.variable);
}
FunctionExpression makeSubFunction(tree.FunctionDefinition function,
@@ -1233,12 +1270,15 @@
tree.Variable newParam = new tree.Variable(definition.element,
param.element);
definition.parameters[i] = newParam;
- definition.body = new tree.Assign(param, newParam, definition.body);
+ definition.body = new tree.Assign(param, new tree.VariableUse(newParam),
+ definition.body);
newParam.writeCount = 1; // Being a parameter counts as a write.
+ param.writeCount--; // Not a parameter anymore.
}
}
}
+ @override
visitVariable(tree.Variable variable) {
if (shadowedParameters.contains(variable)) {
hasShadowedUse.add(variable);
diff --git a/pkg/compiler/lib/src/dart_backend/backend_ast_nodes.dart b/pkg/compiler/lib/src/dart_backend/backend_ast_nodes.dart
index f9292a5..ba21ccb 100644
--- a/pkg/compiler/lib/src/dart_backend/backend_ast_nodes.dart
+++ b/pkg/compiler/lib/src/dart_backend/backend_ast_nodes.dart
@@ -207,8 +207,8 @@
class CatchBlock extends Node {
final TypeAnnotation onType;
- final String exceptionVar;
- final String stackVar;
+ final VariableDeclaration exceptionVar;
+ final VariableDeclaration stackVar;
final Statement body;
/// At least onType or exceptionVar must be given.
@@ -1210,10 +1210,10 @@
}
if (block.exceptionVar != null) {
write('catch(');
- write(block.exceptionVar);
+ write(block.exceptionVar.name);
if (block.stackVar != null) {
write(',');
- write(block.stackVar);
+ write(block.stackVar.name);
}
write(')');
}
diff --git a/pkg/compiler/lib/src/dart_backend/backend_ast_to_frontend_ast.dart b/pkg/compiler/lib/src/dart_backend/backend_ast_to_frontend_ast.dart
index 373ccfd..8398cbb 100644
--- a/pkg/compiler/lib/src/dart_backend/backend_ast_to_frontend_ast.dart
+++ b/pkg/compiler/lib/src/dart_backend/backend_ast_to_frontend_ast.dart
@@ -840,10 +840,10 @@
} else if (stmt is Try) {
return new tree.TryStatement(
makeBlock(stmt.tryBlock),
- braceList('', stmt.catchBlocks.map(makeCatchBlock)),
+ makeList(null, stmt.catchBlocks.map(makeCatchBlock)),
stmt.finallyBlock == null ? null : makeBlock(stmt.finallyBlock),
tryToken,
- finallyToken);
+ stmt.finallyBlock == null ? null : finallyToken);
} else if (stmt is VariableDeclarations) {
return makeVariableDeclarations(stmt, useVar: true, endToken: semicolon);
} else if (stmt is While) {
@@ -890,16 +890,20 @@
tree.CatchBlock makeCatchBlock(CatchBlock block) {
List<tree.VariableDefinitions> formals = [];
if (block.exceptionVar != null) {
+ tree.Node exceptionName = makeIdentifier(block.exceptionVar.name);
+ setElement(exceptionName, block.exceptionVar.element, block.exceptionVar);
formals.add(new tree.VariableDefinitions(
null,
makeEmptyModifiers(),
- singleton(makeIdentifier(block.exceptionVar))));
+ singleton(exceptionName)));
}
if (block.stackVar != null) {
+ tree.Node stackTraceName = makeIdentifier(block.stackVar.name);
+ setElement(stackTraceName, block.stackVar.element, block.stackVar);
formals.add(new tree.VariableDefinitions(
null,
makeEmptyModifiers(),
- singleton(makeIdentifier(block.stackVar))));
+ singleton(stackTraceName)));
}
return new tree.CatchBlock(
block.onType == null ? null : makeType(block.onType),
diff --git a/pkg/compiler/lib/src/io/code_output.dart b/pkg/compiler/lib/src/io/code_output.dart
index d046f22..8566f23 100644
--- a/pkg/compiler/lib/src/io/code_output.dart
+++ b/pkg/compiler/lib/src/io/code_output.dart
@@ -41,6 +41,9 @@
/// Closes the output. Further writes will cause a [StateError].
void close();
+ /// Sets the [sourcePosition] for the code next added to this output.
+ void setSourceLocation(SourceLocation sourcePosition);
+
/// Applies [f] to every marker in this output.
void forEachSourceLocation(void f(int targetOffset,
SourceLocation sourceLocation));
diff --git a/pkg/compiler/lib/src/io/source_information.dart b/pkg/compiler/lib/src/io/source_information.dart
index c238268..6ee34e6 100644
--- a/pkg/compiler/lib/src/io/source_information.dart
+++ b/pkg/compiler/lib/src/io/source_information.dart
@@ -95,14 +95,57 @@
String toString() {
StringBuffer sb = new StringBuffer();
sb.write('${startPosition.sourceUri}:');
- sb.write('[${startPosition.line},${startPosition.column}]');
+ // Use 1-based line/column info to match usual dart tool output.
+ sb.write('[${startPosition.line + 1},${startPosition.column + 1}]');
if (endPosition != null) {
- sb.write('-[${endPosition.line},${endPosition.column}]');
+ sb.write('-[${endPosition.line + 1},${endPosition.column + 1}]');
}
return sb.toString();
}
}
+/// [SourceInformation] that consists of an offset position into the source
+/// code.
+class PositionSourceInformation implements SourceInformation {
+ final SourceLocation sourcePosition;
+
+ PositionSourceInformation(this.sourcePosition);
+
+ @override
+ void beginMapping(CodeOutput output) {
+ output.setSourceLocation(sourcePosition);
+ }
+
+ @override
+ void endMapping(CodeOutput output) {
+ // Do nothing.
+ }
+
+ SourceSpan get sourceSpan {
+ Uri uri = sourcePosition.sourceUri;
+ int offset = sourcePosition.offset;
+ return new SourceSpan(uri, offset, offset);
+ }
+
+ int get hashCode {
+ return sourcePosition.hashCode * 17 & 0x7FFFFFFF;
+ }
+
+ bool operator ==(other) {
+ if (identical(this, other)) return true;
+ if (other is! PositionSourceInformation) return false;
+ return sourcePosition == other.sourcePosition;
+ }
+
+ String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.write('${sourcePosition.sourceUri}:');
+ // Use 1-based line/column info to match usual dart tool output.
+ sb.write('[${sourcePosition.line + 1},${sourcePosition.column + 1}]');
+ return sb.toString();
+ }
+}
+
/// A location in a source file.
abstract class SourceLocation {
final SourceFile _sourceFile;
@@ -147,7 +190,10 @@
sourceName == other.sourceName;
}
- String toString() => '${sourceUri}:[${line},${column}]';
+ String toString() {
+ // Use 1-based line/column info to match usual dart tool output.
+ return '${sourceUri}:[${line + 1},${column + 1}]';
+ }
}
class TokenSourceLocation extends SourceLocation {
diff --git a/pkg/compiler/lib/src/js/rewrite_async.dart b/pkg/compiler/lib/src/js/rewrite_async.dart
index c2948bf..66d94ab 100644
--- a/pkg/compiler/lib/src/js/rewrite_async.dart
+++ b/pkg/compiler/lib/src/js/rewrite_async.dart
@@ -27,7 +27,7 @@
/// (Currently handled in closure.dart).
///
/// Look at [visitFun], [visitDartYield] and [visitAwait] for more explanation.
-class AsyncRewriter extends js.NodeVisitor {
+abstract class AsyncRewriterBase extends js.NodeVisitor {
// Local variables are hoisted to the top of the function, so they are
// collected here.
@@ -108,53 +108,42 @@
/// }
/// }
///
- /// It is a parameter to the [bodyName] function, so that [asyncHelper] and
- /// [streamHelper] can call [bodyName] with the result of an awaited Future.
+ /// It is a parameter to the [body] function, so that [awaitStatement] can
+ /// call [body] with the result of an awaited Future.
+ js.VariableUse get result => new js.VariableUse(resultName);
String resultName;
/// A parameter to the [bodyName] function. Indicating if we are in success
/// or error case.
String errorCodeName;
- /// The name of the inner function that is scheduled to do each await/yield,
+ /// The inner function that is scheduled to do each await/yield,
/// and called to do a new iteration for sync*.
+ js.VariableUse get body => new js.VariableUse(bodyName);
String bodyName;
- /// The Completer that will finish an async function.
- ///
- /// Not used for sync* or async* functions.
- String completerName;
-
- /// The StreamController that controls an async* function.
- ///
- /// Not used for async and sync* functions
- String controllerName;
-
/// Used to simulate a goto.
///
- /// To "goto" a label, the label is assigned to this
- /// variable, and break out of the switch to take another iteration in the
- /// while loop. See [addGoto]
+ /// To "goto" a label, the label is assigned to this variable, and break out
+ /// of the switch to take another iteration in the while loop. See [addGoto]
+ js.VariableUse get goto => new js.VariableUse(gotoName);
String gotoName;
- /// The label of the current error handler.
+ /// Variable containing the label of the current error handler.
+ js.VariableUse get handler => new js.VariableUse(handlerName);
String handlerName;
- /// Current caught error.
- String errorName;
-
/// A stack of labels of finally blocks to visit, and the label to go to after
/// the last.
+ js.VariableUse get next => new js.VariableUse(nextName);
String nextName;
- /// The stack of labels of finally blocks to assign to [nextName] if the
- /// async* [StreamSubscription] was canceled during a yield.
- String nextWhenCanceledName;
-
/// The current returned value (a finally block may overwrite it).
+ js.VariableUse get returnValue => new js.VariableUse(returnValueName);
String returnValueName;
- /// If we are in the process of handling an error, stores the current error.
+ /// Stores the current error when we are in the process of handling an error.
+ js.VariableUse get currentError => new js.VariableUse(currentErrorName);
String currentErrorName;
/// The label of the outer loop.
@@ -165,86 +154,9 @@
/// If javascript `this` is used, it is accessed via this variable, in the
/// [bodyName] function.
+ js.VariableUse get self => new js.VariableUse(selfName);
String selfName;
- // These expressions are hooks for communicating with the runtime.
-
- /// The function called by an async function to simulate an await or return.
- ///
- /// For an await it is called with:
- ///
- /// - The value to await
- /// - The body function [bodyName]
- /// - The completer object [completerName]
- ///
- /// For a return it is called with:
- ///
- /// - The value to complete the completer with.
- /// - [error_codes.SUCCESS]
- /// - The completer object [completerName]
- ///
- /// For a throw it is called with:
- ///
- /// - The error to complete the completer with.
- /// - [error_codes.ERROR]
- /// - The completer object [completerName]
- final js.Expression asyncHelper;
-
- /// The function called by an async* function to simulate an await, yield or
- /// yield*.
- ///
- /// For an await/yield/yield* it is called with:
- ///
- /// - The value to await/yieldExpression(value to yield)/
- /// yieldStarExpression(stream to yield)
- /// - The body function [bodyName]
- /// - The controller object [controllerName]
- ///
- /// For a return it is called with:
- ///
- /// - null
- /// - null
- /// - The [controllerName]
- /// - null.
- final js.Expression streamHelper;
-
- /// Contructor used to initialize the [completerName] variable.
- ///
- /// Specific to async methods.
- final js.Expression newCompleter;
-
- /// Contructor used to initialize the [controllerName] variable.
- ///
- /// Specific to async* methods.
- final js.Expression newController;
-
- /// Used to get the `Stream` out of the [controllerName] variable.
- ///
- /// Specific to async* methods.
- final js.Expression streamOfController;
-
- /// Contructor creating the Iterable for a sync* method. Called with
- /// [bodyName].
- final js.Expression newIterable;
-
- /// A JS Expression that creates a marker showing that iteration is over.
- ///
- /// Called without arguments.
- final js.Expression endOfIteration;
-
- /// A JS Expression that creates a marker indicating a 'yield' statement.
- ///
- /// Called with the value to yield.
- final js.Expression yieldExpression;
-
- /// A JS Expression that creates a marker indication a 'yield*' statement.
- ///
- /// Called with the stream to yield from.
- final js.Expression yieldStarExpression;
-
- /// Used by sync* functions to throw exeptions.
- final js.Expression uncaughtErrorExpression;
-
final DiagnosticListener diagnosticListener;
// For error reporting only.
Spannable get spannable {
@@ -261,28 +173,18 @@
int tempVarHighWaterMark = 0;
Map<int, js.Expression> tempVarNames = new Map<int, js.Expression>();
- js.AsyncModifier async;
+ bool get isAsync => false;
+ bool get isSyncStar => false;
+ bool get isAsyncStar => false;
- bool get isSync => async == const js.AsyncModifier.sync();
- bool get isAsync => async == const js.AsyncModifier.async();
- bool get isSyncStar => async == const js.AsyncModifier.syncStar();
- bool get isAsyncStar => async == const js.AsyncModifier.asyncStar();
-
- AsyncRewriter(this.diagnosticListener,
- spannable,
- {this.asyncHelper,
- this.streamHelper,
- this.streamOfController,
- this.newCompleter,
- this.newController,
- this.endOfIteration,
- this.newIterable,
- this.yieldExpression,
- this.yieldStarExpression,
- this.uncaughtErrorExpression,
- this.safeVariableName})
+ AsyncRewriterBase(this.diagnosticListener,
+ spannable,
+ this.safeVariableName)
: _spannable = spannable;
+ /// Initialize names used by the subClass.
+ void initializeNames();
+
/// Main entry point.
/// Rewrites a sync*/async/async* function to an equivalent normal function.
///
@@ -290,9 +192,6 @@
js.Fun rewrite(js.Fun node, [Spannable spannable]) {
_spannable = spannable;
- async = node.asyncModifier;
- assert(!isSync);
-
analysis = new PreTranslationAnalysis(unsupported);
analysis.analyze(node);
@@ -300,18 +199,16 @@
// generated after the analysis.
resultName = freshName("result");
errorCodeName = freshName("errorCode");
- completerName = freshName("completer");
- controllerName = freshName("controller");
bodyName = freshName("body");
gotoName = freshName("goto");
handlerName = freshName("handler");
- errorName = freshName("error");
nextName = freshName("next");
- nextWhenCanceledName = freshName("nextWhenCanceled");
returnValueName = freshName("returnValue");
currentErrorName = freshName("currentError");
outerLabelName = freshName("outer");
selfName = freshName("self");
+ // Initialize names specific to the subclass.
+ initializeNames();
return node.accept(this);
}
@@ -402,7 +299,7 @@
/// This should be followed by a break for the goto to be executed. Use
/// [gotoWithBreak] or [addGoto] for this.
js.Statement setGotoVariable(int label) {
- return js.js.statement('# = #;', [gotoName, js.number(label)]);
+ return js.js.statement('# = #;', [goto, js.number(label)]);
}
/// Returns a block that has a goto to [label] including the break.
@@ -562,125 +459,54 @@
}
}
List<js.Node> visited = nodes.take(lastTransformIndex).map((js.Node node) {
- return node == null ? null : _storeIfNecessary(visitExpression(node));
+ return (node == null) ? null : _storeIfNecessary(visitExpression(node));
}).toList();
visited.addAll(nodes.skip(lastTransformIndex).map((js.Node node) {
- return node == null ? null : visitExpression(node);
+ return (node == null) ? null : visitExpression(node);
}));
var result = fn(visited);
currentTempVarIndex = oldTempVarIndex;
return result;
}
- /// Emits the return block that all returns should jump to (after going
+ /// Emits the return block that all returns jump to (after going
/// through all the enclosing finally blocks). The jump to here is made in
/// [visitReturn].
- ///
- /// Returning from an async method calls the [asyncHelper] with the result.
- /// (the result might have been stored in [returnValueName] by some finally
- /// block).
- ///
- /// Returning from a sync* function returns an [endOfIteration] marker.
- ///
- /// Returning from an async* function calls the [streamHelper] with an
- /// [endOfIteration] marker.
- void addExit() {
- if (analysis.hasExplicitReturns || isAsyncStar) {
- beginLabel(exitLabel);
- } else {
- addStatement(new js.Comment("implicit return"));
- }
- switch (async) {
- case const js.AsyncModifier.async():
- addStatement(js.js.statement(
- "return #runtimeHelper(#returnValue, #successCode, "
- "#completer, null);", {
- "runtimeHelper": asyncHelper,
- "successCode": js.number(error_codes.SUCCESS),
- "returnValue": analysis.hasExplicitReturns
- ? returnValueName
- : new js.LiteralNull(),
- "completer": completerName}));
- break;
- case const js.AsyncModifier.syncStar():
- addStatement(js.js.statement('return #();', [endOfIteration]));
- break;
- case const js.AsyncModifier.asyncStar():
- addStatement(js.js.statement(
- "return #streamHelper(null, #successCode, #controller);", {
- "streamHelper": streamHelper,
- "successCode": js.number(error_codes.SUCCESS),
- "controller": controllerName}));
- break;
- default:
- diagnosticListener.internalError(
- spannable, "Internal error, unexpected asyncmodifier $async");
- }
- if (isAsync || isAsyncStar) {
- beginLabel(rethrowLabel);
- addStatement(js.js.statement(
- "return #thenHelper(#currentError, #errorCode, #controller);", {
- "thenHelper": isAsync ? asyncHelper : streamHelper,
- "errorCode": js.number(error_codes.ERROR),
- "currentError": currentErrorName,
- "controller": isAsync ? completerName : controllerName}));
- } else {
- assert(isSyncStar);
- beginLabel(rethrowLabel);
- addStatement(js.js.statement('return #(#);',
- [uncaughtErrorExpression, currentErrorName]));
- }
+ void addSuccesExit();
+
+ /// Emits the block that control flows to if an error has been thrown
+ /// but not caught. (after going through all the enclosing finally blocks).
+ void addErrorExit();
+
+ void addFunctionExits() {
+ addSuccesExit();
+ addErrorExit();
}
- /// The initial call to [asyncHelper]/[streamHelper].
- ///
- /// There is no value to await/yield, so the first argument is `null` and
- /// also the errorCallback is `null`.
- ///
- /// Returns the [Future]/[Stream] coming from [completerName]/
- /// [controllerName].
- js.Statement generateInitializer() {
- if (isAsync) {
- return js.js.statement(
- "return #asyncHelper(null, #body, #completer, null);", {
- "asyncHelper": asyncHelper,
- "body": bodyName,
- "completer": completerName,
- });
- } else if (isAsyncStar) {
- return js.js.statement(
- "return #streamOfController(#controller);", {
- "streamOfController": streamOfController,
- "controller": controllerName,
- });
- } else {
- throw diagnosticListener.internalError(
- spannable, "Unexpected asyncModifier: $async");
- }
- }
+ /// Returns the rewritten function.
+ js.Fun finishFunction(List<js.Parameter> parameters,
+ js.Statement rewrittenBody,
+ js.VariableDeclarationList variableDeclarations);
+
+ Iterable<js.VariableInitialization> variableInitializations();
/// Rewrites an async/sync*/async* function to a normal Javascript function.
///
/// The control flow is flattened by simulating 'goto' using a switch in a
- /// loop and a state variable [gotoName] inside a nested function [bodyName]
- /// that can be called back by [asyncHelper]/[asyncStarHelper]/the [Iterator].
+ /// loop and a state variable [goto] inside a nested function [body]
+ /// that can be called back by [asyncStarHelper]/[asyncStarHelper]/the
+ /// [Iterator].
///
/// Local variables are hoisted outside the helper.
///
/// Awaits in async/async* are translated to code that remembers the current
- /// location (so the function can resume from where it was) followed by a call
- /// to the [asyncHelper]. The helper sets up the waiting for the awaited value
- /// and returns a future which is immediately returned by the translated
- /// await.
- /// Yields in async* are translated to a call to the [asyncStarHelper]. They,
- /// too, need to be prepared to be interrupted in case the stream is paused or
- /// canceled. (Currently we always suspend - this is different from the spec,
- /// see `streamHelper` in `js_helper.dart`).
+ /// location (so the function can resume from where it was) followed by a
+ /// [awaitStatement]. The helper sets up the waiting for the awaited
+ /// value and returns a future which is immediately returned by the
+ /// [awaitStatement].
///
- /// Yield/yield* in a sync* function is translated to a return of the value,
- /// wrapped into a "IterationMarker" that signals the type (yield or yield*).
- /// Sync* functions are executed on demand (when the user requests a value) by
- /// the Iterable that knows how to handle these values.
+ /// Yields in sync*/async* are translated to a calls to helper functions.
+ /// (see [visitYield])
///
/// Simplified examples (not the exact translation, but intended to show the
/// ideas):
@@ -713,15 +539,15 @@
/// }
/// }
///
- /// Try/catch is implemented by maintaining [handlerName] to contain the label
- /// of the current handler. If [bodyName] throws, the caller should catch the
- /// error and recall [bodyName] with first argument [error_codes.ERROR] and
+ /// Try/catch is implemented by maintaining [handler] to contain the label
+ /// of the current handler. If [body] throws, the caller should catch the
+ /// error and recall [body] with first argument [error_codes.ERROR] and
/// second argument the error.
///
/// A `finally` clause is compiled similar to normal code, with the additional
/// complexity that `finally` clauses need to know where to jump to after the
/// clause is done. In the translation, each flow-path that enters a `finally`
- /// sets up the variable [nextName] with a stack of finally-blocks and a final
+ /// sets up the variable [next] with a stack of finally-blocks and a final
/// jump-target (exit, catch, ...).
///
/// function(x, y, z) async {
@@ -801,140 +627,55 @@
///
@override
js.Expression visitFun(js.Fun node) {
- if (isSync) return node;
-
beginLabel(newLabel("Function start"));
// AsyncStar needs a returnlabel for its handling of cancelation. See
// [visitDartYield].
- exitLabel =
- analysis.hasExplicitReturns || isAsyncStar ? newLabel("return") : null;
+ exitLabel = (analysis.hasExplicitReturns || isAsyncStar)
+ ? newLabel("return")
+ : null;
rethrowLabel = newLabel("rethrow");
handlerLabels[node] = rethrowLabel;
js.Statement body = node.body;
jumpTargets.add(node);
visitStatement(body);
jumpTargets.removeLast();
- addExit();
+ addFunctionExits();
List<js.SwitchClause> clauses = labelledParts.keys.map((label) {
return new js.Case(js.number(label), new js.Block(labelledParts[label]));
}).toList();
- js.Statement helperBody =
- new js.Switch(new js.VariableUse(gotoName), clauses);
+ js.Statement rewrittenBody =
+ new js.Switch(goto, clauses);
if (hasJumpThoughOuterLabel) {
- helperBody = new js.LabeledStatement(outerLabelName, helperBody);
+ rewrittenBody = new js.LabeledStatement(outerLabelName, rewrittenBody);
}
+ rewrittenBody = js.js.statement('while (true) {#}', rewrittenBody);
+ List<js.VariableInitialization> variables =
+ new List<js.VariableInitialization>();
- List<js.VariableInitialization> inits = <js.VariableInitialization>[];
-
- js.VariableInitialization makeInit(String name, js.Expression initValue) {
- return new js.VariableInitialization(
- new js.VariableDeclaration(name), initValue);
- }
-
- inits.add(makeInit(gotoName, js.number(0)));
- if (isAsync) {
- inits.add(makeInit(completerName, new js.New(newCompleter, [])));
- } else if (isAsyncStar) {
- inits.add(makeInit(controllerName,
- js.js('#(#)', [newController, bodyName])));
- }
- inits.add(makeInit(handlerName, js.number(rethrowLabel)));
- inits.add(makeInit(currentErrorName, null));
+ variables.add(_makeVariableInitializer(goto, js.number(0)));
+ variables.addAll(variableInitializations());
+ variables.add(
+ _makeVariableInitializer(handler, js.number(rethrowLabel)));
+ variables.add(_makeVariableInitializer(currentError, null));
if (analysis.hasFinally || (isAsyncStar && analysis.hasYield)) {
- inits.add(makeInit(nextName, null));
- }
- if (isAsyncStar && analysis.hasYield) {
- inits.add(makeInit(nextWhenCanceledName, null));
- }
- if (analysis.hasExplicitReturns && isAsync) {
- inits.add(makeInit(returnValueName, null));
+ variables.add(_makeVariableInitializer(next, null));
}
if (analysis.hasThis && !isSyncStar) {
// Sync* functions must remember `this` on the level of the outer
// function.
- inits.add(makeInit(selfName, js.js('this')));
+ variables.add(_makeVariableInitializer(self, js.js('this')));
}
- inits.addAll(localVariables.map((js.VariableDeclaration decl) {
- return new js.VariableInitialization(decl, null);
+ variables.addAll(localVariables.map(
+ (js.VariableDeclaration declaration) {
+ return new js.VariableInitialization(declaration, null);
}));
- inits.addAll(new Iterable.generate(tempVarHighWaterMark,
- (int i) => makeInit(useTempVar(i + 1).name, null)));
- js.VariableDeclarationList varDecl = new js.VariableDeclarationList(inits);
- // TODO(sigurdm): Explain the difference between these cases.
- if (isSyncStar) {
- return js.js("""
- function (#params) {
- if (#needsThis)
- var #self = this;
- return new #newIterable(function () {
- #varDecl;
- return function #body(#errorCode, #result) {
- if (#errorCode === #ERROR) {
- #currentError = #result;
- #goto = #handler;
- }
- while (true)
- #helperBody;
- };
- });
- }
- """, {
- "params": node.params,
- "needsThis": analysis.hasThis,
- "helperBody": helperBody,
- "varDecl": varDecl,
- "errorCode": errorCodeName,
- "newIterable": newIterable,
- "body": bodyName,
- "self": selfName,
- "result": resultName,
- "goto": gotoName,
- "handler": handlerName,
- "currentError": currentErrorName,
- "ERROR": js.number(error_codes.ERROR),
- });
- }
- return js.js("""
- function (#params) {
- #varDecl;
- function #bodyName(#errorCode, #result) {
- if (#hasYield)
- switch (#errorCode) {
- case #STREAM_WAS_CANCELED:
- #next = #nextWhenCanceled;
- #goto = #next.pop();
- break;
- case #ERROR:
- #currentError = #result;
- #goto = #handler;
- }
- else
- if (#errorCode === #ERROR) {
- #currentError = #result;
- #goto = #handler;
- }
- while (true)
- #helperBody;
- }
- #init;
- }""", {
- "params": node.params,
- "varDecl": varDecl,
- "STREAM_WAS_CANCELED": js.number(error_codes.STREAM_WAS_CANCELED),
- "ERROR": js.number(error_codes.ERROR),
- "hasYield": analysis.hasYield,
- "helperBody": helperBody,
- "init": generateInitializer(),
- "bodyName": bodyName,
- "currentError": currentErrorName,
- "goto": gotoName,
- "handler": handlerName,
- "next": nextName,
- "nextWhenCanceled": nextWhenCanceledName,
- "errorCode": errorCodeName,
- "result": resultName,
- });
+ variables.addAll(new Iterable.generate(tempVarHighWaterMark,
+ (int i) => _makeVariableInitializer(useTempVar(i + 1).name, null)));
+ js.VariableDeclarationList variableDeclarations =
+ new js.VariableDeclarationList(variables);
+
+ return finishFunction(node.params, rewrittenBody, variableDeclarations);
}
@override
@@ -981,7 +722,9 @@
}
}
- /// An await is translated to a call to [asyncHelper]/[streamHelper].
+ js.Statement awaitStatement(js.Expression value);
+
+ /// An await is translated to an [awaitStatement].
///
/// See the comments of [visitFun] for an example.
@override
@@ -990,28 +733,19 @@
int afterAwait = newLabel("returning from await.");
withExpression(node.expression, (js.Expression value) {
addStatement(setGotoVariable(afterAwait));
- addStatement(js.js.statement("""
- return #asyncHelper(#value,
- #body,
- #controller);
- """, {
- "asyncHelper": isAsync ? asyncHelper : streamHelper,
- "value": value,
- "body": bodyName,
- "controller": isAsync ? completerName : controllerName,
- }));
+ addStatement(awaitStatement(value));
}, store: false);
beginLabel(afterAwait);
- return new js.VariableUse(resultName);
+ return result;
}
/// Checks if [node] is the variable named [resultName].
///
- /// [resultName] is used to hold the result of a transformed computation
+ /// [result] is used to hold the result of a transformed computation
/// for example the result of awaiting, or the result of a conditional or
/// short-circuiting expression.
/// If the subexpression of some transformed node already is transformed and
- /// visiting it returns [resultName], it is not redundantly assigned to itself
+ /// visiting it returns [result], it is not redundantly assigned to itself
/// again.
bool isResult(js.Expression node) {
return node is js.VariableUse && node.name == resultName;
@@ -1025,7 +759,7 @@
withExpression(node.left, (js.Expression left) {
js.Statement assignLeft = isResult(left)
? new js.Block.empty()
- : js.js.statement('# = #;', [resultName, left]);
+ : js.js.statement('# = #;', [result, left]);
if (node.op == "||") {
addStatement(js.js.statement('if (#) {#} else #',
[left, gotoAndBreak(thenLabel), assignLeft]));
@@ -1039,11 +773,11 @@
beginLabel(thenLabel);
withExpression(node.right, (js.Expression value) {
if (!isResult(value)) {
- addStatement(js.js.statement('# = #;', [resultName, value]));
+ addStatement(js.js.statement('# = #;', [result, value]));
}
}, store: false);
beginLabel(joinLabel);
- return new js.VariableUse(resultName);
+ return result;
}
return withExpression2(node.left, node.right,
@@ -1097,31 +831,31 @@
if (!shouldTransform(node.then) && !shouldTransform(node.otherwise)) {
return withExpression(node.condition, (js.Expression condition) {
return js.js('# ? # : #', [condition, node.then, node.otherwise]);
- });
+ }, store: false);
}
int thenLabel = newLabel("then");
int joinLabel = newLabel("join");
int elseLabel = newLabel("else");
withExpression(node.condition, (js.Expression condition) {
addStatement(js.js.statement('# = # ? # : #;',
- [gotoName, condition, js.number(thenLabel), js.number(elseLabel)]));
+ [goto, condition, js.number(thenLabel), js.number(elseLabel)]));
}, store: false);
addBreak();
beginLabel(thenLabel);
withExpression(node.then, (js.Expression value) {
if (!isResult(value)) {
- addStatement(js.js.statement('# = #;', [resultName, value]));
+ addStatement(js.js.statement('# = #;', [result, value]));
}
}, store: false);
addGoto(joinLabel);
beginLabel(elseLabel);
withExpression(node.otherwise, (js.Expression value) {
if (!isResult(value)) {
- addStatement(js.js.statement('# = #;', [resultName, value]));
+ addStatement(js.js.statement('# = #;', [result, value]));
}
}, store: false);
beginLabel(joinLabel);
- return new js.VariableUse(resultName);
+ return result;
}
@override
@@ -1147,7 +881,7 @@
/// Common code for handling break, continue, return.
///
/// It is necessary to run all nesting finally-handlers between the jump and
- /// the target. For that [nextName] is used as a stack of places to go.
+ /// the target. For that [next] is used as a stack of places to go.
///
/// See also [visitFun].
void translateJump(js.Node target, int targetLabel) {
@@ -1171,7 +905,7 @@
if (jumpStack.isNotEmpty) {
js.Expression jsJumpStack = new js.ArrayInitializer(
jumpStack.map((int label) => js.number(label)).toList());
- addStatement(js.js.statement("# = #;", [nextName, jsJumpStack]));
+ addStatement(js.js.statement("# = #;", [next, jsJumpStack]));
}
addGoto(firstTarget);
}
@@ -1316,13 +1050,14 @@
}
int thenLabel = newLabel("then");
int joinLabel = newLabel("join");
- int elseLabel =
- node.otherwise is js.EmptyStatement ? joinLabel : newLabel("else");
+ int elseLabel = (node.otherwise is js.EmptyStatement)
+ ? joinLabel
+ : newLabel("else");
withExpression(node.condition, (js.Expression condition) {
addExpressionStatement(
new js.Assignment(
- new js.VariableUse(gotoName),
+ goto,
new js.Conditional(
condition,
js.number(thenLabel),
@@ -1493,11 +1228,11 @@
@override
void visitReturn(js.Return node) {
- assert(node.value == null || !isSyncStar && !isAsyncStar);
+ assert(node.value == null || (!isSyncStar && !isAsyncStar));
js.Node target = analysis.targets[node];
if (node.value != null) {
withExpression(node.value, (js.Expression value) {
- addStatement(js.js.statement("# = #;", [returnValueName, value]));
+ addStatement(js.js.statement("# = #;", [returnValue, value]));
}, store: false);
}
translateJump(target, exitLabel);
@@ -1570,7 +1305,7 @@
if (clause is js.Case) {
labels[i] = newLabel("case");
clauses.add(new js.Case(clause.expression, gotoAndBreak(labels[i])));
- } else if (i is js.Default) {
+ } else if (clause is js.Default) {
labels[i] = newLabel("default");
clauses.add(new js.Default(gotoAndBreak(labels[i])));
hasDefault = true;
@@ -1580,12 +1315,14 @@
}
i++;
}
+ if (!hasDefault) {
+ clauses.add(new js.Default(gotoAndBreak(after)));
+ }
withExpression(node.key, (js.Expression key) {
addStatement(new js.Switch(key, clauses));
}, store: false);
- if (!hasDefault) {
- addGoto(after);
- }
+
+ addBreak();
}
jumpTargets.add(node);
@@ -1599,7 +1336,7 @@
@override
js.Expression visitThis(js.This node) {
- return new js.VariableUse(selfName);
+ return self;
}
@override
@@ -1610,9 +1347,10 @@
}
setErrorHandler([int errorHandler]) {
- addExpressionStatement(new js.Assignment(
- new js.VariableUse(handlerName),
- errorHandler == null ? currentErrorHandler : js.number(errorHandler)));
+ js.Expression label = (errorHandler == null)
+ ? currentErrorHandler
+ : js.number(errorHandler);
+ addStatement(js.js.statement('# = #;',[handler, label]));
}
List<int> _finalliesUpToAndEnclosingHandler() {
@@ -1678,8 +1416,7 @@
} else {
// The handler is reset as the first thing in the finally block.
addStatement(
- js.js.statement("# = [#];",
- [nextName, js.number(afterFinallyLabel)]));
+ js.js.statement("# = [#];", [next, js.number(afterFinallyLabel)]));
addGoto(finallyLabel);
}
@@ -1697,16 +1434,14 @@
localVariables.add(new js.VariableDeclaration(errorRename));
variableRenamings
.add(new Pair(node.catchPart.declaration.name, errorRename));
- addExpressionStatement(new js.Assignment(
- new js.VariableUse(errorRename),
- new js.VariableUse(currentErrorName)));
+ addStatement(js.js.statement("# = #;", [errorRename, currentError]));
visitStatement(node.catchPart.body);
variableRenamings.removeLast();
if (node.finallyPart != null) {
// The error has been caught, so after the finally, continue after the
// try.
addStatement(js.js.statement("# = [#];",
- [nextName, js.number(afterFinallyLabel)]));
+ [next, js.number(afterFinallyLabel)]));
addGoto(finallyLabel);
} else {
addGoto(afterFinallyLabel);
@@ -1726,7 +1461,7 @@
// [enclosingFinallies] can be empty if there is no surrounding finally
// blocks. Then [nextLabel] will be [rethrowLabel].
addStatement(
- js.js.statement("# = #;", [nextName, new js.ArrayInitializer(
+ js.js.statement("# = #;", [next, new js.ArrayInitializer(
enclosingFinallies.map(js.number).toList())]));
}
if (node.finallyPart == null) {
@@ -1742,7 +1477,7 @@
setErrorHandler();
visitStatement(node.finallyPart);
addStatement(new js.Comment("// goto the next finally handler"));
- addStatement(js.js.statement("# = #.pop();", [gotoName, nextName]));
+ addStatement(js.js.statement("# = #.pop();", [goto, next]));
addBreak();
}
beginLabel(afterFinallyLabel);
@@ -1814,50 +1549,7 @@
beginLabel(afterLabel);
}
- /// Translates a yield/yield* in an sync*.
- ///
- /// `yield` in a sync* function just returns [value].
- /// `yield*` wraps [value] in a [yieldStarExpression] and returns it.
- void addSyncYield(js.DartYield node, js.Expression expression) {
- assert(isSyncStar);
- if (node.hasStar) {
- addStatement(
- new js.Return(new js.Call(yieldStarExpression, [expression])));
- } else {
- addStatement(new js.Return(expression));
- }
- }
-
- /// Translates a yield/yield* in an async* function.
- ///
- /// yield/yield* in an async* function is translated much like the `await` is
- /// translated in [visitAwait], only the object is wrapped in a
- /// [yieldExpression]/[yieldStarExpression] to let [asyncStarHelper]
- /// distinguish them.
- /// Also [nextWhenCanceledName] is set up to contain the finally blocks that
- /// must be run in case the stream was canceled.
- void addAsyncYield(js.DartYield node, js.Expression expression) {
- assert(isAsyncStar);
- // Find all the finally blocks that should be performed if the stream is
- // canceled during the yield.
- // At the bottom of the stack is the return label.
- List<int> enclosingFinallyLabels = <int>[exitLabel];
- enclosingFinallyLabels.addAll(jumpTargets
- .where((js.Node node) => finallyLabels[node] != null)
- .map((js.Block node) => finallyLabels[node]));
- addStatement(js.js.statement("# = #;",
- [nextWhenCanceledName, new js.ArrayInitializer(
- enclosingFinallyLabels.map(js.number).toList())]));
- addStatement(js.js.statement("""
- return #streamHelper(#yieldExpression(#expression), #body,
- #controller);""", {
- "streamHelper": streamHelper,
- "yieldExpression": node.hasStar ? yieldStarExpression : yieldExpression,
- "expression": expression,
- "body": bodyName,
- "controller": controllerName,
- }));
- }
+ addYield(js.DartYield node, js.Expression expression);
@override
void visitDartYield(js.DartYield node) {
@@ -1867,16 +1559,483 @@
// addSynYield or addAsyncYield.
withExpression(node.expression, (js.Expression expression) {
addStatement(setGotoVariable(label));
- if (isSyncStar) {
- addSyncYield(node, expression);
- } else {
- addAsyncYield(node, expression);
- }
+ addYield(node, expression);
}, store: false);
beginLabel(label);
}
}
+js.VariableInitialization
+ _makeVariableInitializer(dynamic variable, js.Expression initValue) {
+ js.VariableDeclaration declaration;
+ if (variable is js.VariableUse) {
+ declaration = new js.VariableDeclaration(variable.name);
+ } else if (variable is String) {
+ declaration = new js.VariableDeclaration(variable);
+ } else {
+ assert(variable is js.VariableDeclaration);
+ declaration = variable;
+ }
+ return new js.VariableInitialization(declaration, initValue);
+}
+
+class AsyncRewriter extends AsyncRewriterBase {
+
+ bool get isAsync => true;
+
+ /// The Completer that will finish an async function.
+ ///
+ /// Not used for sync* or async* functions.
+ String completerName;
+ js.VariableUse get completer => new js.VariableUse(completerName);
+
+ /// The function called by an async function to simulate an await or return.
+ ///
+ /// For an await it is called with:
+ ///
+ /// - The value to await
+ /// - The body function [bodyName]
+ /// - The completer object [completer]
+ ///
+ /// For a return it is called with:
+ ///
+ /// - The value to complete the completer with.
+ /// - [error_codes.SUCCESS]
+ /// - The completer object [completer]
+ ///
+ /// For a throw it is called with:
+ ///
+ /// - The error to complete the completer with.
+ /// - [error_codes.ERROR]
+ /// - The completer object [completer]
+ final js.Expression asyncHelper;
+
+ /// Contructor used to initialize the [completer] variable.
+ ///
+ /// Specific to async methods.
+ final js.Expression newCompleter;
+
+
+ AsyncRewriter(DiagnosticListener diagnosticListener,
+ spannable,
+ {this.asyncHelper,
+ this.newCompleter,
+ safeVariableName})
+ : super(diagnosticListener,
+ spannable,
+ safeVariableName);
+
+ @override
+ void addYield(js.DartYield node, js.Expression expression) {
+ diagnosticListener.internalError(spannable,
+ "Yield in non-generating async function");
+ }
+
+ void addErrorExit() {
+ beginLabel(rethrowLabel);
+ addStatement(js.js.statement(
+ "return #thenHelper(#currentError, #errorCode, #completer);", {
+ "thenHelper": asyncHelper,
+ "errorCode": js.number(error_codes.ERROR),
+ "currentError": currentError,
+ "completer": completer}));
+ }
+
+ /// Returning from an async method calls [asyncStarHelper] with the result.
+ /// (the result might have been stored in [returnValue] by some finally
+ /// block).
+ void addSuccesExit() {
+ if (analysis.hasExplicitReturns) {
+ beginLabel(exitLabel);
+ } else {
+ addStatement(new js.Comment("implicit return"));
+ }
+ addStatement(js.js.statement(
+ "return #runtimeHelper(#returnValue, #successCode, "
+ "#completer, null);", {
+ "runtimeHelper": asyncHelper,
+ "successCode": js.number(error_codes.SUCCESS),
+ "returnValue": analysis.hasExplicitReturns
+ ? returnValue
+ : new js.LiteralNull(),
+ "completer": completer}));
+ }
+
+ @override
+ Iterable<js.VariableInitialization> variableInitializations() {
+ List<js.VariableInitialization> variables =
+ new List<js.VariableInitialization>();
+ variables.add(_makeVariableInitializer(completer,
+ new js.New(newCompleter, [])));
+ if (analysis.hasExplicitReturns) {
+ variables.add(_makeVariableInitializer(returnValue, null));
+ }
+ return variables;
+ }
+
+ @override
+ void initializeNames() {
+ completerName = freshName("completer");
+ }
+
+ @override
+ js.Statement awaitStatement(js.Expression value) {
+ return js.js.statement("""
+ return #asyncHelper(#value,
+ #body,
+ #completer);
+ """, {
+ "asyncHelper": asyncHelper,
+ "value": value,
+ "body": body,
+ "completer": completer});
+ }
+
+ @override
+ js.Fun finishFunction(List<js.Parameter> parameters,
+ js.Statement rewrittenBody,
+ js.VariableDeclarationList variableDeclarations) {
+ return js.js("""
+ function (#parameters) {
+ #variableDeclarations;
+ function #bodyName(#errorCode, #result) {
+ if (#errorCode === #ERROR) {
+ #currentError = #result;
+ #goto = #handler;
+ }
+ #rewrittenBody;
+ }
+ return #asyncHelper(null, #bodyName, #completer, null);
+ }""", {
+ "parameters": parameters,
+ "variableDeclarations": variableDeclarations,
+ "ERROR": js.number(error_codes.ERROR),
+ "rewrittenBody": rewrittenBody,
+ "bodyName": bodyName,
+ "currentError": currentError,
+ "goto": goto,
+ "handler": handler,
+ "errorCode": errorCodeName,
+ "result": resultName,
+ "asyncHelper": asyncHelper,
+ "completer": completer,
+ });
+ }
+}
+
+class SyncStarRewriter extends AsyncRewriterBase {
+
+ bool get isSyncStar => true;
+
+ /// Contructor creating the Iterable for a sync* method. Called with
+ /// [bodyName].
+ final js.Expression newIterable;
+
+ /// A JS Expression that creates a marker showing that iteration is over.
+ ///
+ /// Called without arguments.
+ final js.Expression endOfIteration;
+
+ /// A JS Expression that creates a marker indication a 'yield*' statement.
+ ///
+ /// Called with the stream to yield from.
+ final js.Expression yieldStarExpression;
+
+ /// Used by sync* functions to throw exeptions.
+ final js.Expression uncaughtErrorExpression;
+
+ SyncStarRewriter(DiagnosticListener diagnosticListener,
+ spannable,
+ {this.endOfIteration,
+ this.newIterable,
+ this.yieldStarExpression,
+ this.uncaughtErrorExpression,
+ safeVariableName})
+ : super(diagnosticListener,
+ spannable,
+ safeVariableName);
+
+ /// Translates a yield/yield* in an sync*.
+ ///
+ /// `yield` in a sync* function just returns [value].
+ /// `yield*` wraps [value] in a [yieldStarExpression] and returns it.
+ @override
+ void addYield(js.DartYield node, js.Expression expression) {
+ if (node.hasStar) {
+ addStatement(
+ new js.Return(new js.Call(yieldStarExpression, [expression])));
+ } else {
+ addStatement(new js.Return(expression));
+ }
+ }
+
+ @override
+ js.Fun finishFunction(List<js.Parameter> params,
+ js.Statement rewrittenBody,
+ js.VariableDeclarationList variableDeclarations) {
+ return js.js("""
+ function (#params) {
+ if (#needsThis)
+ var #self = this;
+ return new #newIterable(function () {
+ #varDecl;
+ return function #body(#errorCode, #result) {
+ if (#errorCode === #ERROR) {
+ #currentError = #result;
+ #goto = #handler;
+ }
+ #helperBody;
+ };
+ });
+ }
+ """, {
+ "params": params,
+ "needsThis": analysis.hasThis,
+ "helperBody": rewrittenBody,
+ "varDecl": variableDeclarations,
+ "errorCode": errorCodeName,
+ "newIterable": newIterable,
+ "body": bodyName,
+ "self": selfName,
+ "result": resultName,
+ "goto": goto,
+ "handler": handler,
+ "currentError": currentErrorName,
+ "ERROR": js.number(error_codes.ERROR),
+ });
+ }
+
+ void addErrorExit() {
+ beginLabel(rethrowLabel);
+ addStatement(js.js.statement('return #(#);',
+ [uncaughtErrorExpression, currentError]));
+ }
+
+ /// Returning from a sync* function returns an [endOfIteration] marker.
+ void addSuccesExit() {
+ if (analysis.hasExplicitReturns) {
+ beginLabel(exitLabel);
+ } else {
+ addStatement(new js.Comment("implicit return"));
+ }
+ addStatement(js.js.statement('return #();', [endOfIteration]));
+ }
+
+ @override
+ Iterable<js.VariableInitialization> variableInitializations() {
+ List<js.VariableInitialization> variables =
+ new List<js.VariableInitialization>();
+ return variables;
+ }
+
+ @override
+ js.Statement awaitStatement(js.Expression value) {
+ throw diagnosticListener.internalError(spannable,
+ "Sync* functions cannot contain await statements.");
+ }
+
+ @override
+ void initializeNames() {}
+}
+
+class AsyncStarRewriter extends AsyncRewriterBase {
+
+ bool get isAsyncStar => true;
+
+ /// The stack of labels of finally blocks to assign to [next] if the
+ /// async* [StreamSubscription] was canceled during a yield.
+ js.VariableUse get nextWhenCanceled {
+ return new js.VariableUse(nextWhenCanceledName);
+ }
+ String nextWhenCanceledName;
+
+ /// The StreamController that controls an async* function.
+ String controllerName;
+ js.VariableUse get controller => new js.VariableUse(controllerName);
+
+ /// The function called by an async* function to simulate an await, yield or
+ /// yield*.
+ ///
+ /// For an await/yield/yield* it is called with:
+ ///
+ /// - The value to await/yieldExpression(value to yield)/
+ /// yieldStarExpression(stream to yield)
+ /// - The body function [bodyName]
+ /// - The controller object [controllerName]
+ ///
+ /// For a return it is called with:
+ ///
+ /// - null
+ /// - null
+ /// - The [controllerName]
+ /// - null.
+ final js.Expression asyncStarHelper;
+
+ /// Contructor used to initialize the [controllerName] variable.
+ ///
+ /// Specific to async* methods.
+ final js.Expression newController;
+
+ /// Used to get the `Stream` out of the [controllerName] variable.
+ final js.Expression streamOfController;
+
+ /// A JS Expression that creates a marker indicating a 'yield' statement.
+ ///
+ /// Called with the value to yield.
+ final js.Expression yieldExpression;
+
+ /// A JS Expression that creates a marker indication a 'yield*' statement.
+ ///
+ /// Called with the stream to yield from.
+ final js.Expression yieldStarExpression;
+
+ AsyncStarRewriter(DiagnosticListener diagnosticListener,
+ spannable,
+ {this.asyncStarHelper,
+ this.streamOfController,
+ this.newController,
+ this.yieldExpression,
+ this.yieldStarExpression,
+ String safeVariableName(String original)})
+ : super(diagnosticListener,
+ spannable,
+ safeVariableName);
+
+
+ /// Translates a yield/yield* in an async* function.
+ ///
+ /// yield/yield* in an async* function is translated much like the `await` is
+ /// translated in [visitAwait], only the object is wrapped in a
+ /// [yieldExpression]/[yieldStarExpression] to let [asyncStarHelper]
+ /// distinguish them.
+ /// Also [nextWhenCanceled] is set up to contain the finally blocks that
+ /// must be run in case the stream was canceled.
+ @override
+ void addYield(js.DartYield node, js.Expression expression) {
+ // Find all the finally blocks that should be performed if the stream is
+ // canceled during the yield.
+ // At the bottom of the stack is the return label.
+ List<int> enclosingFinallyLabels = <int>[exitLabel];
+ enclosingFinallyLabels.addAll(jumpTargets
+ .where((js.Node node) => finallyLabels[node] != null)
+ .map((js.Block node) => finallyLabels[node]));
+ addStatement(js.js.statement("# = #;",
+ [nextWhenCanceled, new js.ArrayInitializer(
+ enclosingFinallyLabels.map(js.number).toList())]));
+ addStatement(js.js.statement("""
+ return #asyncStarHelper(#yieldExpression(#expression), #body,
+ #controller);""", {
+ "asyncStarHelper": asyncStarHelper,
+ "yieldExpression": node.hasStar ? yieldStarExpression : yieldExpression,
+ "expression": expression,
+ "body": body,
+ "controller": controllerName,
+ }));
+ }
+
+ @override
+ js.Fun finishFunction(List<js.Parameter> parameters,
+ js.Statement rewrittenBody,
+ js.VariableDeclarationList variableDeclarations) {
+ return js.js("""
+ function (#parameters) {
+ #variableDeclarations;
+ function #bodyName(#errorCode, #result) {
+ if (#hasYield) {
+ switch (#errorCode) {
+ case #STREAM_WAS_CANCELED:
+ #next = #nextWhenCanceled;
+ #goto = #next.pop();
+ break;
+ case #ERROR:
+ #currentError = #result;
+ #goto = #handler;
+ }
+ } else {
+ if (#errorCode === #ERROR) {
+ #currentError = #result;
+ #goto = #handler;
+ }
+ }
+ #rewrittenBody;
+ }
+ return #streamOfController(#controller);
+ }""", {
+ "parameters": parameters,
+ "variableDeclarations": variableDeclarations,
+ "STREAM_WAS_CANCELED": js.number(error_codes.STREAM_WAS_CANCELED),
+ "ERROR": js.number(error_codes.ERROR),
+ "hasYield": analysis.hasYield,
+ "rewrittenBody": rewrittenBody,
+ "bodyName": bodyName,
+ "currentError": currentError,
+ "goto": goto,
+ "handler": handler,
+ "next": next,
+ "nextWhenCanceled": nextWhenCanceled,
+ "errorCode": errorCodeName,
+ "result": resultName,
+ "streamOfController": streamOfController,
+ "controller": controllerName,
+ });
+ }
+
+ @override
+ void addErrorExit() {
+ beginLabel(rethrowLabel);
+ addStatement(js.js.statement(
+ "return #asyncHelper(#currentError, #errorCode, #controller);", {
+ "asyncHelper": asyncStarHelper,
+ "errorCode": js.number(error_codes.ERROR),
+ "currentError": currentError,
+ "controller": controllerName}));
+ }
+
+ /// Returning from an async* function calls the [streamHelper] with an
+ /// [endOfIteration] marker.
+ @override
+ void addSuccesExit() {
+ beginLabel(exitLabel);
+
+ addStatement(js.js.statement(
+ "return #streamHelper(null, #successCode, #controller);", {
+ "streamHelper": asyncStarHelper,
+ "successCode": js.number(error_codes.SUCCESS),
+ "controller": controllerName}));
+ }
+
+ @override
+ Iterable<js.VariableInitialization> variableInitializations() {
+ List<js.VariableInitialization> variables =
+ new List<js.VariableInitialization>();
+ variables.add(_makeVariableInitializer(controller,
+ js.js('#(#)', [newController, bodyName])));
+ if (analysis.hasYield) {
+ variables.add(_makeVariableInitializer(nextWhenCanceled, null));
+ }
+ return variables;
+ }
+
+ @override
+ void initializeNames() {
+ controllerName = freshName("controller");
+ nextWhenCanceledName = freshName("nextWhenCanceled");
+ }
+
+ @override
+ js.Statement awaitStatement(js.Expression value) {
+ return js.js.statement("""
+ return #asyncHelper(#value,
+ #body,
+ #controller);
+ """, {
+ "asyncHelper": asyncStarHelper,
+ "value": value,
+ "body": body,
+ "controller": controllerName});
+ }
+}
+
/// Finds out
///
/// - which expressions have yield or await nested in them.
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index ee80103..0723cd1 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -73,6 +73,8 @@
new Uri(scheme: 'dart', path: '_js_mirrors');
static final Uri DART_JS_NAMES =
new Uri(scheme: 'dart', path: '_js_names');
+ static final Uri DART_EMBEDDED_NAMES =
+ new Uri(scheme: 'dart', path: '_js_embedded_names');
static final Uri DART_ISOLATE_HELPER =
new Uri(scheme: 'dart', path: '_isolate_helper');
static final Uri DART_HTML =
@@ -363,6 +365,9 @@
/// Holds the method "requiresPreamble" in _js_helper.
FunctionElement requiresPreambleMarker;
+ /// Holds the class for the [JsGetName] enum.
+ EnumClassElement jsGetNameEnum;
+
/// True if a call to preserveMetadataMarker has been seen. This means that
/// metadata must be retained for dart:mirrors to work correctly.
bool mustRetainMetadata = false;
@@ -460,7 +465,8 @@
resolutionCallbacks = new JavaScriptResolutionCallbacks(this);
patchResolverTask = new PatchResolverTask(compiler);
functionCompiler = USE_CPS_IR
- ? new CpsFunctionCompiler(compiler, this)
+ ? new CpsFunctionCompiler(
+ compiler, this, generateSourceMap: generateSourceMap)
: new SsaFunctionCompiler(this, generateSourceMap);
}
@@ -542,7 +548,7 @@
String registerOneShotInterceptor(Selector selector) {
Set<ClassElement> classes = getInterceptedClassesOn(selector.name);
- String name = namer.getOneShotInterceptorName(selector, classes);
+ String name = namer.nameForGetOneShotInterceptor(selector, classes);
if (!oneShotInterceptors.containsKey(name)) {
registerSpecializedGetInterceptor(classes);
oneShotInterceptors[name] = selector;
@@ -741,7 +747,7 @@
}
void registerSpecializedGetInterceptor(Set<ClassElement> classes) {
- String name = namer.getInterceptorName(getInterceptorMethod, classes);
+ String name = namer.nameForGetInterceptor(classes);
if (classes.contains(jsInterceptorClass)) {
// We can't use a specialized [getInterceptorMethod], so we make
// sure we emit the one with all checks.
@@ -1875,6 +1881,8 @@
preserveLibraryNamesMarker = find(library, 'preserveLibraryNames');
} else if (uri == DART_JS_NAMES) {
preserveNamesMarker = find(library, 'preserveNames');
+ } else if (uri == DART_EMBEDDED_NAMES) {
+ jsGetNameEnum = find(library, 'JsGetName');
} else if (uri == DART_HTML) {
htmlLibraryIsLoaded = true;
}
diff --git a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
index b1f03bf..9449644 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
@@ -9,6 +9,7 @@
import '../../tree_ir/tree_ir_nodes.dart' as tree_ir;
import '../../js/js.dart' as js;
import '../../elements/elements.dart';
+import '../../io/source_information.dart' show SourceInformation;
import '../../util/maplet.dart';
import '../../constants/values.dart';
import '../../dart2jslib.dart';
@@ -182,7 +183,8 @@
// TODO(karlklose): get rid of the selector argument.
js.Expression buildStaticInvoke(Selector selector,
Element target,
- List<js.Expression> arguments) {
+ List<js.Expression> arguments,
+ {SourceInformation sourceInformation}) {
registry.registerStaticInvocation(target.declaration);
if (target == glue.getInterceptorMethod) {
// This generates a call to the specialized interceptor function, which
@@ -196,7 +198,8 @@
return js.propertyCall(interceptorLibrary, selector.name, arguments);
} else {
js.Expression elementAccess = glue.staticFunctionAccess(target);
- return new js.Call(elementAccess, arguments);
+ return new js.Call(elementAccess, arguments,
+ sourceInformation: sourceInformation);
}
}
@@ -261,7 +264,8 @@
Selector selector = node.selector;
FunctionElement target = node.target;
List<js.Expression> arguments = visitArguments(node.arguments);
- return buildStaticInvoke(selector, target, arguments);
+ return buildStaticInvoke(selector, target, arguments,
+ sourceInformation: node.sourceInformation);
}
@override
@@ -270,7 +274,6 @@
if (node.target is ConstructorBodyElement) {
// A constructor body cannot be overriden or intercepted, so we can
// use the short form for this invocation.
- // TODO(asgerf): prevent name clash between constructor bodies.
return js.js('#.#(#)',
[visitExpression(node.receiver),
glue.instanceMethodName(node.target),
@@ -345,8 +348,12 @@
}
@override
- js.Expression visitVariable(tree_ir.Variable node) {
- return new js.VariableUse(getVariableName(node));
+ js.Expression visitVariableUse(tree_ir.VariableUse node) {
+ return buildVariableAccess(node.variable);
+ }
+
+ js.Expression buildVariableAccess(tree_ir.Variable variable) {
+ return new js.VariableUse(getVariableName(variable));
}
@override
@@ -404,7 +411,7 @@
js.Expression definition = visitExpression(value);
accumulator.add(new js.ExpressionStatement(new js.Assignment(
- visitVariable(node.variable),
+ buildVariableAccess(node.variable),
definition)));
visitStatement(node.next);
}
@@ -475,6 +482,12 @@
}
@override
+ void visitTry(tree_ir.Try node) {
+ // TODO(kmillikin): implement TryStatement.
+ return giveup(node);
+ }
+
+ @override
js.Expression visitCreateBox(tree_ir.CreateBox node) {
return new js.ObjectInitializer([]);
}
diff --git a/pkg/compiler/lib/src/js_backend/codegen/glue.dart b/pkg/compiler/lib/src/js_backend/codegen/glue.dart
index 0c8310c..ebe8923 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/glue.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/glue.dart
@@ -108,9 +108,7 @@
String getInterceptorName(Set<ClassElement> interceptedClasses) {
- return _backend.namer.getInterceptorName(
- getInterceptorMethod,
- interceptedClasses);
+ return _backend.namer.nameForGetInterceptor(interceptedClasses);
}
js.Expression getInterceptorLibrary() {
diff --git a/pkg/compiler/lib/src/js_backend/codegen/js_tree_builder.dart b/pkg/compiler/lib/src/js_backend/codegen/js_tree_builder.dart
index ac76882..fcc772c 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/js_tree_builder.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/js_tree_builder.dart
@@ -36,8 +36,8 @@
return new InvokeStatic(
identicalFunction,
identicalSelector,
- <Expression>[getVariableReference(node.left),
- getVariableReference(node.right)]);
+ <Expression>[getVariableUse(node.left),
+ getVariableUse(node.right)]);
}
Expression visitInterceptor(cps_ir.Interceptor node) {
@@ -48,17 +48,17 @@
return new InvokeStatic(
getInterceptor,
selector,
- <Expression>[getVariableReference(node.input)]);
+ <Expression>[getVariableUse(node.input)]);
}
Expression visitGetField(cps_ir.GetField node) {
- return new GetField(getVariableReference(node.object), node.field);
+ return new GetField(getVariableUse(node.object), node.field);
}
Statement visitSetField(cps_ir.SetField node) {
- return new SetField(getVariableReference(node.object),
+ return new SetField(getVariableUse(node.object),
node.field,
- getVariableReference(node.value),
+ getVariableUse(node.value),
visit(node.body));
}
@@ -69,6 +69,6 @@
Expression visitCreateInstance(cps_ir.CreateInstance node) {
return new CreateInstance(
node.classElement,
- node.arguments.map(getVariableReference).toList());
+ node.arguments.map(getVariableUse).toList());
}
}
diff --git a/pkg/compiler/lib/src/js_backend/codegen/task.dart b/pkg/compiler/lib/src/js_backend/codegen/task.dart
index dbfb871..0eb0685 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/task.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/task.dart
@@ -30,7 +30,6 @@
import 'js_tree_builder.dart';
class CpsFunctionCompiler implements FunctionCompiler {
- final IrBuilderTask irBuilderTask;
final ConstantSystem constantSystem;
final Compiler compiler;
final Glue glue;
@@ -42,9 +41,12 @@
Tracer get tracer => compiler.tracer;
- CpsFunctionCompiler(Compiler compiler, JavaScriptBackend backend)
- : irBuilderTask = new IrBuilderTask(compiler),
- fallbackCompiler = new ssa.SsaFunctionCompiler(backend, true),
+ IrBuilderTask get irBuilderTask => compiler.irBuilder;
+
+ CpsFunctionCompiler(Compiler compiler, JavaScriptBackend backend,
+ {bool generateSourceMap: true})
+ : fallbackCompiler =
+ new ssa.SsaFunctionCompiler(backend, generateSourceMap),
constantSystem = backend.constantSystem,
compiler = compiler,
glue = new Glue(compiler);
diff --git a/pkg/compiler/lib/src/js_backend/constant_emitter.dart b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
index 58eedc0..8f5738f 100644
--- a/pkg/compiler/lib/src/js_backend/constant_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
@@ -4,165 +4,16 @@
part of js_backend;
-class ConstantEmitter {
- ConstantReferenceEmitter _referenceEmitter;
- ConstantLiteralEmitter _literalEmitter;
-
- ConstantEmitter(Compiler compiler,
- Namer namer,
- jsAst.Template makeConstantListTemplate) {
- _literalEmitter = new ConstantLiteralEmitter(
- compiler, namer, makeConstantListTemplate, this);
- _referenceEmitter = new ConstantReferenceEmitter(compiler, namer, this);
- }
-
- /**
- * Constructs an expression that is a reference to the constant. Uses a
- * canonical name unless the constant can be emitted multiple times (as for
- * numbers and strings).
- */
- jsAst.Expression reference(ConstantValue constant) {
- return _referenceEmitter.generate(constant);
- }
-
- /**
- * Constructs a literal expression that evaluates to the constant. Uses a
- * canonical name unless the constant can be emitted multiple times (as for
- * numbers and strings).
- */
- jsAst.Expression literal(ConstantValue constant) {
- return _literalEmitter.generate(constant);
- }
-
- /**
- * Constructs an expression like [reference], but the expression is valid
- * during isolate initialization.
- */
- jsAst.Expression referenceInInitializationContext(ConstantValue constant) {
- return _referenceEmitter.generate(constant);
- }
-
- /**
- * Constructs an expression used to initialize a canonicalized constant.
- */
- jsAst.Expression initializationExpression(ConstantValue constant) {
- return _literalEmitter.generate(constant);
- }
-}
+typedef jsAst.Expression _ConstantReferenceGenerator(ConstantValue constant);
/**
- * Visitor for generating JavaScript expressions to refer to [ConstantValue]s.
- * Do not use directly, use methods from [ConstantEmitter].
+ * Generates the JavaScript expressions for constants.
+ *
+ * It uses a given [constantReferenceGenerator] to reference nested constants
+ * (if there are some). It is hence up to that function to decide which
+ * constants should be inlined or not.
*/
-class ConstantReferenceEmitter
- implements ConstantValueVisitor<jsAst.Expression, Null> {
- final Compiler compiler;
- final Namer namer;
-
- final ConstantEmitter constantEmitter;
-
- ConstantReferenceEmitter(this.compiler, this.namer, this.constantEmitter);
-
- JavaScriptBackend get backend => compiler.backend;
-
- jsAst.Expression generate(ConstantValue constant) {
- return _visit(constant);
- }
-
- jsAst.Expression _visit(ConstantValue constant) {
- return constant.accept(this, null);
- }
-
- jsAst.Expression emitCanonicalVersion(ConstantValue constant) {
- String name = namer.constantName(constant);
- return new jsAst.PropertyAccess.field(
- new jsAst.VariableUse(namer.globalObjectForConstant(constant)), name);
- }
-
- jsAst.Expression literal(ConstantValue constant) {
- return constantEmitter.literal(constant);
- }
-
- @override
- jsAst.Expression visitFunction(FunctionConstantValue constant, [_]) {
- return backend.emitter.isolateStaticClosureAccess(constant.element);
- }
-
- @override
- jsAst.Expression visitNull(NullConstantValue constant, [_]) {
- return literal(constant);
- }
-
- @override
- jsAst.Expression visitInt(IntConstantValue constant, [_]) {
- return literal(constant);
- }
-
- @override
- jsAst.Expression visitDouble(DoubleConstantValue constant, [_]) {
- return literal(constant);
- }
-
- @override
- jsAst.Expression visitBool(BoolConstantValue constant, [_]) {
- return literal(constant);
- }
-
- /**
- * Write the contents of the quoted string to a [CodeBuffer] in
- * a form that is valid as JavaScript string literal content.
- * The string is assumed quoted by double quote characters.
- */
- @override
- jsAst.Expression visitString(StringConstantValue constant, [_]) {
- // TODO(sra): If the string is long *and repeated* (and not on a hot path)
- // then it should be assigned to a name. We don't have reference counts (or
- // profile information) here, so this is the wrong place.
- return literal(constant);
- }
-
- @override
- jsAst.Expression visitList(ListConstantValue constant, [_]) {
- return emitCanonicalVersion(constant);
- }
-
- @override
- jsAst.Expression visitMap(MapConstantValue constant, [_]) {
- return emitCanonicalVersion(constant);
- }
-
- @override
- jsAst.Expression visitType(TypeConstantValue constant, [_]) {
- return emitCanonicalVersion(constant);
- }
-
- @override
- jsAst.Expression visitConstructed(ConstructedConstantValue constant, [_]) {
- return emitCanonicalVersion(constant);
- }
-
- @override
- jsAst.Expression visitInterceptor(InterceptorConstantValue constant, [_]) {
- return emitCanonicalVersion(constant);
- }
-
- @override
- jsAst.Expression visitDummy(DummyConstantValue constant, [_]) {
- return literal(constant);
- }
-
- @override
- jsAst.Expression visitDeferred(DeferredConstantValue constant, [_]) {
- return emitCanonicalVersion(constant);
- }
-}
-
-/**
- * Visitor for generating JavaScript expressions that litterally represent
- * [ConstantValue]s. These can be used for inlining constants or in
- * initializers. Do not use directly, use methods from [ConstantEmitter].
- */
-class ConstantLiteralEmitter
+class ConstantEmitter
implements ConstantValueVisitor<jsAst.Expression, Null> {
// Matches blank lines, comment lines and trailing comments that can't be part
@@ -172,14 +23,25 @@
final Compiler compiler;
final Namer namer;
+ final _ConstantReferenceGenerator constantReferenceGenerator;
final jsAst.Template makeConstantListTemplate;
- final ConstantEmitter constantEmitter;
- ConstantLiteralEmitter(this.compiler,
- this.namer,
- this.makeConstantListTemplate,
- this.constantEmitter);
+ /**
+ * The given [constantReferenceGenerator] function must, when invoked with a
+ * constant, either return a reference or return its literal expression if it
+ * can be inlined.
+ */
+ ConstantEmitter(
+ this.compiler,
+ this.namer,
+ jsAst.Expression this.constantReferenceGenerator(ConstantValue constant),
+ this.makeConstantListTemplate);
+ /**
+ * Constructs a literal expression that evaluates to the constant. Uses a
+ * canonical name unless the constant can be emitted multiple times (as for
+ * numbers and strings).
+ */
jsAst.Expression generate(ConstantValue constant) {
return _visit(constant);
}
@@ -294,7 +156,9 @@
@override
jsAst.Expression visitList(ListConstantValue constant, [_]) {
- List<jsAst.Expression> elements = _array(constant.entries);
+ List<jsAst.Expression> elements = constant.entries
+ .map(constantReferenceGenerator)
+ .toList(growable: false);
jsAst.ArrayInitializer array = new jsAst.ArrayInitializer(elements);
jsAst.Expression value = makeConstantListTemplate.instantiate([array]);
return maybeAddTypeArguments(constant.type, value);
@@ -313,7 +177,7 @@
// Keys in literal maps must be emitted in place.
jsAst.Literal keyExpression = _visit(key);
jsAst.Expression valueExpression =
- constantEmitter.reference(constant.values[i]);
+ constantReferenceGenerator(constant.values[i]);
properties.add(new jsAst.Property(keyExpression, valueExpression));
}
return new jsAst.ObjectInitializer(properties);
@@ -322,10 +186,9 @@
jsAst.Expression jsGeneralMap() {
List<jsAst.Expression> data = <jsAst.Expression>[];
for (int i = 0; i < constant.keys.length; i++) {
- jsAst.Expression keyExpression =
- constantEmitter.reference(constant.keys[i]);
+ jsAst.Expression keyExpression = constantReferenceGenerator(constant.keys[i]);
jsAst.Expression valueExpression =
- constantEmitter.reference(constant.values[i]);
+ constantReferenceGenerator(constant.values[i]);
data.add(keyExpression);
data.add(valueExpression);
}
@@ -348,10 +211,10 @@
} else if (field.name == JavaScriptMapConstant.JS_OBJECT_NAME) {
arguments.add(jsMap());
} else if (field.name == JavaScriptMapConstant.KEYS_NAME) {
- arguments.add(constantEmitter.reference(constant.keyList));
+ arguments.add(constantReferenceGenerator(constant.keyList));
} else if (field.name == JavaScriptMapConstant.PROTO_VALUE) {
assert(constant.protoValue != null);
- arguments.add(constantEmitter.reference(constant.protoValue));
+ arguments.add(constantReferenceGenerator(constant.protoValue));
} else if (field.name == JavaScriptMapConstant.JS_DATA_NAME) {
arguments.add(jsGeneralMap());
} else {
@@ -387,7 +250,7 @@
@override
jsAst.Expression visitType(TypeConstantValue constant, [_]) {
DartType type = constant.representedType;
- String name = namer.getRuntimeTypeName(type.element);
+ String name = namer.runtimeTypeName(type.element);
jsAst.Expression typeName = new jsAst.LiteralString("'$name'");
return new jsAst.Call(getHelperProperty(backend.getCreateRuntimeType()),
[typeName]);
@@ -415,8 +278,9 @@
}
jsAst.Expression constructor =
backend.emitter.constructorAccess(constant.type.element);
- jsAst.New instantiation =
- new jsAst.New(constructor, _array(constant.fields));
+ List<jsAst.Expression> fields =
+ constant.fields.map(constantReferenceGenerator).toList(growable: false);
+ jsAst.New instantiation = new jsAst.New(constructor, fields);
return maybeAddTypeArguments(constant.type, instantiation);
}
@@ -424,10 +288,6 @@
return rawJavaScript.replaceAll(COMMENT_RE, '');
}
- List<jsAst.Expression> _array(List<ConstantValue> values) {
- return values.map(constantEmitter.reference).toList(growable: false);
- }
-
jsAst.Expression maybeAddTypeArguments(InterfaceType type,
jsAst.Expression value) {
if (type is InterfaceType &&
@@ -448,6 +308,6 @@
@override
jsAst.Expression visitDeferred(DeferredConstantValue constant, [_]) {
- return constantEmitter.reference(constant.referenced);
+ return constantReferenceGenerator(constant.referenced);
}
}
diff --git a/pkg/compiler/lib/src/js_backend/js_backend.dart b/pkg/compiler/lib/src/js_backend/js_backend.dart
index 114ebd9..daf1a71 100644
--- a/pkg/compiler/lib/src/js_backend/js_backend.dart
+++ b/pkg/compiler/lib/src/js_backend/js_backend.dart
@@ -8,6 +8,8 @@
import 'package:_internal/compiler/js_lib/shared/embedded_names.dart'
as embeddedNames;
+import 'package:_internal/compiler/js_lib/shared/embedded_names.dart'
+ show JsGetName;
import '../closure.dart';
import '../constants/expressions.dart';
diff --git a/pkg/compiler/lib/src/js_backend/minify_namer.dart b/pkg/compiler/lib/src/js_backend/minify_namer.dart
index 4641afdd..579429e 100644
--- a/pkg/compiler/lib/src/js_backend/minify_namer.dart
+++ b/pkg/compiler/lib/src/js_backend/minify_namer.dart
@@ -26,14 +26,18 @@
_FieldNamingRegistry fieldRegistry;
- // You can pass an invalid identifier to this and unlike its non-minifying
- // counterpart it will never return the proposedName as the new fresh name.
+ /// You can pass an invalid identifier to this and unlike its non-minifying
+ /// counterpart it will never return the proposedName as the new fresh name.
+ ///
+ /// [sanitizeForNatives] and [sanitizeForAnnotations] are ignored because the
+ /// minified names will always avoid clashing with annotated names or natives.
String getFreshName(String proposedName,
Set<String> usedNames,
Map<String, String> suggestedNames,
- {bool ensureSafe: true}) {
- var freshName;
- var suggestion = suggestedNames[proposedName];
+ {bool sanitizeForNatives: false,
+ bool sanitizeForAnnotations: false}) {
+ String freshName;
+ String suggestion = suggestedNames[proposedName];
if (suggestion != null && !usedNames.contains(suggestion)) {
freshName = suggestion;
} else {
@@ -44,18 +48,20 @@
return freshName;
}
- String getClosureVariableName(String name, int id) {
+ String getClosureVariableName(String _, int id) {
if (id < ALPHABET_CHARACTERS) {
return new String.fromCharCodes([_letterNumber(id)]);
}
- return "${getMappedInstanceName('closure')}_$id";
+ // Fall back to a slightly longer name.
+ String basename = _disambiguateMember(null, 'closure');
+ return '${basename}_$id';
}
// From issue 7554. These should not be used on objects (as instance
// variables) because they clash with names from the DOM. However, it is
// OK to use them as fields, as we only access fields directly if we know
// the receiver type.
- static const _reservedNativeProperties = const <String>[
+ static const List<String> _reservedNativeProperties = const <String>[
'Q', 'a', 'b', 'c', 'd', 'e', 'f', 'r', 'x', 'y', 'z',
// 2-letter:
'ch', 'cx', 'cy', 'db', 'dx', 'dy', 'fr', 'fx', 'fy', 'go', 'id', 'k1',
@@ -80,9 +86,11 @@
'Text', 'time', 'type', 'view', 'warn', 'wrap', 'ZERO'];
void reserveBackendNames() {
- for (var name in _reservedNativeProperties) {
+ for (String name in _reservedNativeProperties) {
if (name.length < 2) {
- instanceNameMap[name] = name;
+ // Ensure the 1-letter names are disambiguated to the same name.
+ String disambiguatedName = name;
+ reservePublicMemberName(name, disambiguatedName);
}
usedInstanceNames.add(name);
// Getter and setter names are autogenerated by prepending 'g' and 's' to
@@ -166,12 +174,12 @@
// in a predictable order determined by the proposed name. This is in order
// to make the renamer stable: small changes in the input should nornally
// result in relatively small changes in the output.
- for (var n = 1; n <= 3; n++) {
+ for (int n = 1; n <= 3; n++) {
int h = hash;
while (h > 10) {
- var codes = <int>[_letterNumber(h)];
+ List<int> codes = <int>[_letterNumber(h)];
int h2 = h ~/ ALPHABET_CHARACTERS;
- for (var i = 1; i < n; i++) {
+ for (int i = 1; i < n; i++) {
codes.add(_alphaNumericNumber(h2));
h2 ~/= ALPHANUMERIC_CHARACTERS;
}
@@ -213,9 +221,9 @@
/// If we can't find a hash based name in the three-letter space, then base
/// the name on a letter and a counter.
String _badName(int hash, Set<String> usedNames) {
- var startLetter = new String.fromCharCodes([_letterNumber(hash)]);
- var name;
- var i = 0;
+ String startLetter = new String.fromCharCodes([_letterNumber(hash)]);
+ String name;
+ int i = 0;
do {
name = "$startLetter${i++}";
} while (usedNames.contains(name));
@@ -291,8 +299,7 @@
nameStore.add(MinifyNamer._reservedNativeProperties[count]);
} else {
nameStore.add(namer.getFreshName("field$count",
- namer.usedInstanceNames, namer.suggestedInstanceNames,
- ensureSafe: true));
+ namer.usedInstanceNames, namer.suggestedInstanceNames));
}
}
@@ -422,7 +429,7 @@
: super.inherit(container, superScope, registry);
String _nextName() {
- var proposed = super._nextName();
+ String proposed = super._nextName();
return proposed + r'$';
}
}
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 9368968..edc0a20 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -6,10 +6,104 @@
/**
* Assigns JavaScript identifiers to Dart variables, class-names and members.
+ *
+ * Names are generated through three stages:
+ *
+ * 1. Original names and proposed names
+ * 2. Disambiguated names (also known as "mangled names")
+ * 3. Annotated names
+ *
+ * Original names are names taken directly from the input.
+ *
+ * Proposed names are either original names or synthesized names for input
+ * elements that do not have original names.
+ *
+ * Disambiguated names are derived from the above, but are mangled to ensure
+ * uniqueness within some namespace (e.g. as fields on the same JS object).
+ * In [MinifyNamer], disambiguated names are also minified.
+ *
+ * Annotated names are names generated from a disambiguated name. Annnotated
+ * names must be computable at runtime by prefixing/suffixing constant strings
+ * onto the disambiguated name.
+ *
+ * For example, some entity called `x` might be associated with these names:
+ *
+ * Original name: `x`
+ *
+ * Disambiguated name: `x1` (if something else was called `x`)
+ *
+ * Annotated names: `x1` (field name)
+ * `get$x1` (getter name)
+ * `set$x1` (setter name)
+ *
+ * The [Namer] can choose the disambiguated names, and to some degree the
+ * prefix/suffix constants used to construct annotated names. It cannot choose
+ * annotated names with total freedom, for example, it cannot choose that the
+ * getter for `x1` should be called `getX` -- the annotated names are always
+ * built by concatenation.
+ *
+ * Disambiguated names must be chosen such that none of the annotated names can
+ * clash with each other. This may happen even if the disambiguated names are
+ * distinct, for example, suppose a field `x` and `get$x` exists in the input:
+ *
+ * Original names: `x` and `get$x`
+ *
+ * Disambiguated names: `x` and `get$x` (the two names a different)
+ *
+ * Annotated names: `x` (field for `x`)
+ * `get$x` (getter for `x`)
+ * `get$x` (field for `get$x`)
+ * `get$get$x` (getter for `get$x`)
+ *
+ * The getter for `x` clashes with the field name for `get$x`, so the
+ * disambiguated names are invalid.
+ *
+ * Additionally, disambiguated names must be chosen such that all annotated
+ * names are valid JavaScript identifiers and do not coincide with a native
+ * JavaScript property such as `__proto__`.
+ *
+ * The following annotated names are generated for instance members, where
+ * <NAME> denotes the disambiguated name.
+ *
+ * 0. The disambiguated name can itself be seen as an annotated name.
+ *
+ * 1. Multiple annotated names exist for the `call` method, encoding arity and
+ * named parameters with the pattern:
+ *
+ * call$<N>$namedParam1...$namedParam<M>
+ *
+ * where <N> is the number of parameters (required and optional) and <M> is
+ * the number of named parameters, and namedParam<n> are the names of the
+ * named parameters in alphabetical order.
+ *
+ * Note that the same convention is used for the *proposed name* of other
+ * methods. Thus, for ordinary methods, the suffix becomes embedded in the
+ * disambiguated name (and can be minified), whereas for the 'call' method,
+ * the suffix is an annotation that must be computable at runtime
+ * (and thus cannot be minified).
+ *
+ * Note that the ordering of named parameters is not encapsulated in the
+ * [Namer], and is hardcoded into other components, such as [Element] and
+ * [Selector].
+ *
+ * 2. The getter/setter for a field:
+ *
+ * get$<NAME>
+ * set$<NAME>
+ *
+ * (The [getterPrefix] and [setterPrefix] are different in [MinifyNamer]).
+ *
+ * 3. The `is` and operator uses the following names:
+ *
+ * $is<NAME>
+ * $as<NAME>
+ *
+ * For local variables, the [Namer] only provides *proposed names*. These names
+ * must be disambiguated elsewhere.
*/
class Namer implements ClosureNamer {
- static const javaScriptKeywords = const <String>[
+ static const List<String> javaScriptKeywords = const <String>[
// These are current keywords.
"break", "delete", "function", "return", "typeof", "case", "do", "if",
"switch", "var", "catch", "else", "in", "this", "void", "continue",
@@ -24,7 +118,7 @@
"long", "short", "volatile"
];
- static const reservedPropertySymbols =
+ static const List<String> reservedPropertySymbols =
const <String>[
"__proto__", "prototype", "constructor", "call",
// "use strict" disallows the use of "arguments" and "eval" as
@@ -33,7 +127,7 @@
"eval", "arguments"];
// Symbols that we might be using in our JS snippets.
- static const reservedGlobalSymbols = const <String>[
+ static const List<String> reservedGlobalSymbols = const <String>[
// Section references are from Ecma-262
// (http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf)
@@ -153,7 +247,7 @@
"JavaArray", "JavaMember",
];
- static const reservedGlobalObjectNames = const <String>[
+ static const List<String> reservedGlobalObjectNames = const <String>[
"A",
"B",
"C", // Global object for *C*onstants.
@@ -182,12 +276,13 @@
"Z",
];
- static const reservedGlobalHelperFunctions = const <String>[
+ static const List<String> reservedGlobalHelperFunctions = const <String>[
"init",
"Isolate",
];
- static final userGlobalObjects = new List.from(reservedGlobalObjectNames)
+ static final List<String> userGlobalObjects =
+ new List.from(reservedGlobalObjectNames)
..remove('C')
..remove('H')
..remove('J')
@@ -241,54 +336,63 @@
final String classDescriptorProperty = r'^';
final String requiredParameterField = r'$requiredArgCount';
+ /// The non-minifying namer's [callPrefix] with a dollar after it.
+ static const String _callPrefixDollar = r'call$';
+
// Name of property in a class description for the native dispatch metadata.
final String nativeSpecProperty = '%';
static final RegExp IDENTIFIER = new RegExp(r'^[A-Za-z_$][A-Za-z0-9_$]*$');
static final RegExp NON_IDENTIFIER_CHAR = new RegExp(r'[^A-Za-z_0-9$]');
- /**
- * Map from top-level or static elements to their unique identifiers provided
- * by [getName].
- *
- * Invariant: Keys must be declaration elements.
- */
final Compiler compiler;
- final Map<Element, String> globals;
- final Map<String, LibraryElement> shortPrivateNameOwners;
- final Set<String> usedGlobalNames;
- final Set<String> usedInstanceNames;
- final Map<String, String> globalNameMap;
- final Map<String, String> suggestedGlobalNames;
- final Map<String, String> instanceNameMap;
- final Map<String, String> suggestedInstanceNames;
+ /// Used disambiguated names in the global namespace, issued by
+ /// [_disambiguateGlobal], and [_disambiguateInternalGlobal].
+ ///
+ /// Although global names are distributed across a number of global objects,
+ /// (see [globalObjectFor]), we currently use a single namespace for all these
+ /// names.
+ final Set<String> usedGlobalNames = new Set<String>();
+ final Map<Element, String> userGlobals = <Element, String>{};
+ final Map<String, String> internalGlobals = <String, String>{};
- final Map<String, String> operatorNameMap;
- final Map<String, int> popularNameCounters;
+ /// Used disambiguated names in the instance namespace, issued by
+ /// [_disambiguateMember], [_disambiguateInternalMember],
+ /// [_disambiguateOperator], and [reservePublicMemberName].
+ final Set<String> usedInstanceNames = new Set<String>();
+ final Map<String, String> userInstanceMembers = <String, String>{};
+ final Map<Element, String> internalInstanceMembers = <Element, String>{};
+ final Map<String, String> userInstanceOperators = <String, String>{};
- final Map<ConstantValue, String> constantNames;
- final Map<ConstantValue, String> constantLongNames;
+ final Map<String, int> popularNameCounters = <String, int>{};
+
+ final Map<ConstantValue, String> constantNames = <ConstantValue, String>{};
+ final Map<ConstantValue, String> constantLongNames =
+ <ConstantValue, String>{};
ConstantCanonicalHasher constantHasher;
+ /// Maps private names to a library that may use that name without prefixing
+ /// itself. Used for building proposed names.
+ final Map<String, LibraryElement> shortPrivateNameOwners =
+ <String, LibraryElement>{};
+
+ /// Maps proposed names to *suggested* disambiguated names.
+ ///
+ /// Suggested names are hints to the [MinifyNamer], suggesting that a specific
+ /// names be given to the first item with the given proposed name.
+ ///
+ /// This is currently used in [MinifyNamer] to assign very short minified
+ /// names to things that tend to be used very often.
+ final Map<String, String> suggestedGlobalNames = <String, String>{};
+ final Map<String, String> suggestedInstanceNames = <String, String>{};
+
// All alphanumeric characters.
static const String _alphaNumeric =
'abcdefghijklmnopqrstuvwxyzABZDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
Namer(Compiler compiler)
: compiler = compiler,
- globals = new Map<Element, String>(),
- shortPrivateNameOwners = new Map<String, LibraryElement>(),
- usedGlobalNames = new Set<String>(),
- usedInstanceNames = new Set<String>(),
- instanceNameMap = new Map<String, String>(),
- operatorNameMap = new Map<String, String>(),
- globalNameMap = new Map<String, String>(),
- suggestedGlobalNames = new Map<String, String>(),
- suggestedInstanceNames = new Map<String, String>(),
- popularNameCounters = new Map<String, int>(),
- constantNames = new Map<ConstantValue, String>(),
- constantLongNames = new Map<ConstantValue, String>(),
constantHasher = new ConstantCanonicalHasher(compiler),
functionTypeNamer = new FunctionTypeNamer(compiler);
@@ -306,25 +410,32 @@
String get closureInvocationSelectorName => Compiler.CALL_OPERATOR_NAME;
bool get shouldMinify => false;
- String getNameForJsGetName(Node node, String name) {
+ /// Returns the string that is to be used as the result of a call to
+ /// [JS_GET_NAME] at [node] with argument [name].
+ String getNameForJsGetName(Node node, JsGetName name) {
switch (name) {
- case 'GETTER_PREFIX': return getterPrefix;
- case 'SETTER_PREFIX': return setterPrefix;
- case 'CALL_PREFIX': return callPrefix;
- case 'CALL_CATCH_ALL': return callCatchAllName;
- case 'REFLECTABLE': return reflectableField;
- case 'CLASS_DESCRIPTOR_PROPERTY': return classDescriptorProperty;
- case 'REQUIRED_PARAMETER_PROPERTY': return requiredParameterField;
- case 'DEFAULT_VALUES_PROPERTY': return defaultValuesField;
- case 'CALL_NAME_PROPERTY': return callNameField;
+ case JsGetName.GETTER_PREFIX: return getterPrefix;
+ case JsGetName.SETTER_PREFIX: return setterPrefix;
+ case JsGetName.CALL_PREFIX: return callPrefix;
+ case JsGetName.CALL_CATCH_ALL: return callCatchAllName;
+ case JsGetName.REFLECTABLE: return reflectableField;
+ case JsGetName.CLASS_DESCRIPTOR_PROPERTY:
+ return classDescriptorProperty;
+ case JsGetName.REQUIRED_PARAMETER_PROPERTY:
+ return requiredParameterField;
+ case JsGetName.DEFAULT_VALUES_PROPERTY: return defaultValuesField;
+ case JsGetName.CALL_NAME_PROPERTY: return callNameField;
default:
compiler.reportError(
- node, MessageKind.GENERIC,
- {'text': 'Error: Namer has no name for "$name".'});
+ node, MessageKind.GENERIC,
+ {'text': 'Error: Namer has no name for "$name".'});
return 'BROKEN';
}
}
+ /// Disambiguated name for [constant].
+ ///
+ /// Unique within the global-member namespace.
String constantName(ConstantValue constant) {
// In the current implementation it doesn't make sense to give names to
// function constants since the function-implementation itself serves as
@@ -333,14 +444,13 @@
String result = constantNames[constant];
if (result == null) {
String longName = constantLongName(constant);
- result = getFreshName(longName, usedGlobalNames, suggestedGlobalNames,
- ensureSafe: true);
+ result = getFreshName(longName, usedGlobalNames, suggestedGlobalNames);
constantNames[constant] = result;
}
return result;
}
- // The long name is unminified and may have collisions.
+ /// Proposed name for [constant].
String constantLongName(ConstantValue constant) {
String longName = constantLongNames[constant];
if (longName == null) {
@@ -370,107 +480,132 @@
}
/**
- * If the [name] is not private returns [:name:]. Otherwise
- * mangles the [name] so that each library has a unique name.
+ * If the [originalName] is not private returns [originalName]. Otherwise
+ * mangles the [originalName] so that each library has its own distinguished
+ * version of the name.
+ *
+ * Although the name is not guaranteed to be unique within any namespace,
+ * clashes are very unlikely in practice. Therefore, it can be used in cases
+ * where uniqueness is nice but not a strict requirement.
+ *
+ * The resulting name is a *proposed name* and is never minified.
*/
- String privateName(LibraryElement library, String name) {
+ String privateName(LibraryElement library, String originalName) {
// Public names are easy.
- String nameString = name;
- if (!isPrivateName(name)) return nameString;
+ if (!isPrivateName(originalName)) return originalName;
// The first library asking for a short private name wins.
LibraryElement owner =
- shortPrivateNameOwners.putIfAbsent(nameString, () => library);
+ shortPrivateNameOwners.putIfAbsent(originalName, () => library);
- if (owner == library && !nameString.contains('\$')) {
- // Since the name doesn't contain $ it doesn't clash with any
- // of the private names that have the library name as the prefix.
- return nameString;
+ if (owner == library) {
+ return originalName;
} else {
// Make sure to return a private name that starts with _ so it
// cannot clash with any public names.
- String libraryName = getNameOfLibrary(library);
- return '_$libraryName\$$nameString';
+ // The name is still not guaranteed to be unique, since both the library
+ // name and originalName could contain $ symbols.
+ String libraryName = _disambiguateGlobal(library);
+ return '_$libraryName\$${originalName}';
}
}
- String instanceMethodName(FunctionElement element) {
- // TODO(ahe): Could this be: return invocationName(new
- // Selector.fromElement(element))?
- String elementName = element.name;
- String name = operatorNameToIdentifier(elementName);
- if (name != elementName) return getMappedOperatorName(name);
-
- LibraryElement library = element.library;
- if (element.isGenerativeConstructorBody) {
- name = Elements.reconstructConstructorNameSourceString(element);
- }
- FunctionSignature signature = element.functionSignature;
- // We don't mangle the closure invoking function name because it
- // is generated by string concatenation in applyFunction from
- // js_helper.dart. To keep code size down, we potentially shorten
- // the prefix though.
- String methodName;
- if (name == closureInvocationSelectorName) {
- methodName = '$callPrefix\$${signature.parameterCount}';
- } else {
- methodName = '${privateName(library, name)}\$${signature.parameterCount}';
- }
- if (signature.optionalParametersAreNamed &&
- !signature.optionalParameters.isEmpty) {
- StringBuffer buffer = new StringBuffer();
- signature.orderedOptionalParameters.forEach((Element element) {
- buffer.write('\$${safeName(element.name)}');
- });
- methodName = '$methodName$buffer';
- }
- if (name == closureInvocationSelectorName) return methodName;
- return getMappedInstanceName(methodName);
+ String _proposeNameForConstructorBody(ConstructorBodyElement method) {
+ String name = Elements.reconstructConstructorNameSourceString(method);
+ // We include the method suffix on constructor bodies. It has no purpose,
+ // but this way it produces the same names as previous versions of the
+ // Namer class did.
+ List<String> suffix = callSuffixForSignature(method.functionSignature);
+ return '$name\$${suffix.join(r'$')}';
}
- String publicInstanceMethodNameByArity(String name, int arity) {
- String newName = operatorNameToIdentifier(name);
- if (newName != name) return getMappedOperatorName(newName);
- assert(!isPrivateName(name));
- // We don't mangle the closure invoking function name because it
- // is generated by string concatenation in applyFunction from
- // js_helper.dart. To keep code size down, we potentially shorten
- // the prefix though.
- if (name == closureInvocationSelectorName) return '$callPrefix\$$arity';
-
- return getMappedInstanceName('$name\$$arity');
+ /// Annotated name for [method] encoding arity and named parameters.
+ String instanceMethodName(FunctionElement method) {
+ if (method.isGenerativeConstructorBody) {
+ return _disambiguateInternalMember(method,
+ () => _proposeNameForConstructorBody(method));
+ }
+ return invocationName(new Selector.fromElement(method));
}
+ /// Annotated name for a public method with the given [originalName]
+ /// and [arity] and no named parameters.
+ String publicInstanceMethodNameByArity(String originalName, int arity) {
+ return invocationName(new Selector.call(originalName, null, arity));
+ }
+
+ /// Returns the annotated name for a variant of `call`.
+ /// The result has the form:
+ ///
+ /// call$<N>$namedParam1...$namedParam<M>
+ ///
+ /// This name cannot be minified because it is generated by string
+ /// concatenation at runtime, by applyFunction in js_helper.dart.
+ String deriveCallMethodName(List<String> suffix) {
+ // TODO(asgerf): Avoid clashes when named parameters contain $ symbols.
+ return '$callPrefix\$${suffix.join(r'$')}';
+ }
+
+ /// The suffix list for the pattern:
+ ///
+ /// $<N>$namedParam1...$namedParam<M>
+ ///
+ /// This is used for the annotated names of `call`, and for the proposed name
+ /// for other instance methods.
+ List<String> callSuffixForSelector(Selector selector) {
+ List<String> suffixes = ['${selector.argumentCount}'];
+ suffixes.addAll(selector.getOrderedNamedArguments());
+ return suffixes;
+ }
+
+ /// The suffix list for the pattern:
+ ///
+ /// $<N>$namedParam1...$namedParam<M>
+ ///
+ /// This is used for the annotated names of `call`, and for the proposed name
+ /// for other instance methods.
+ List<String> callSuffixForSignature(FunctionSignature sig) {
+ List<String> suffixes = ['${sig.parameterCount}'];
+ if (sig.optionalParametersAreNamed) {
+ for (FormalElement param in sig.orderedOptionalParameters) {
+ suffixes.add(param.name);
+ }
+ }
+ return suffixes;
+ }
+
+ /// Annotated name for the member being invoked by [selector].
String invocationName(Selector selector) {
- if (selector.isGetter) {
- String proposedName = privateName(selector.library, selector.name);
- return '$getterPrefix${getMappedInstanceName(proposedName)}';
- } else if (selector.isSetter) {
- String proposedName = privateName(selector.library, selector.name);
- return '$setterPrefix${getMappedInstanceName(proposedName)}';
- } else {
- String name = selector.name;
- if (selector.kind == SelectorKind.OPERATOR
- || selector.kind == SelectorKind.INDEX) {
- name = operatorNameToIdentifier(name);
- assert(name != selector.name);
- return getMappedOperatorName(name);
- }
- assert(name == operatorNameToIdentifier(name));
- StringBuffer buffer = new StringBuffer();
- for (String argumentName in selector.getOrderedNamedArguments()) {
- buffer.write('\$${safeName(argumentName)}');
- }
- String suffix = '\$${selector.argumentCount}$buffer';
- // We don't mangle the closure invoking function name because it
- // is generated by string concatenation in applyFunction from
- // js_helper.dart. We potentially shorten the prefix though.
- if (selector.isClosureCall) {
- return "$callPrefix$suffix";
- } else {
- String proposedName = privateName(selector.library, name);
- return getMappedInstanceName('$proposedName$suffix');
- }
+ LibraryElement library = selector.library;
+ switch (selector.kind) {
+ case SelectorKind.GETTER:
+ String disambiguatedName = _disambiguateMember(library, selector.name);
+ return deriveGetterName(disambiguatedName);
+
+ case SelectorKind.SETTER:
+ String disambiguatedName = _disambiguateMember(library, selector.name);
+ return deriveSetterName(disambiguatedName);
+
+ case SelectorKind.OPERATOR:
+ case SelectorKind.INDEX:
+ String operatorIdentifier = operatorNameToIdentifier(selector.name);
+ String disambiguatedName = _disambiguateOperator(operatorIdentifier);
+ return disambiguatedName; // Operators are not annotated.
+
+ case SelectorKind.CALL:
+ List<String> suffix = callSuffixForSelector(selector);
+ if (selector.name == Compiler.CALL_OPERATOR_NAME) {
+ // Derive the annotated name for this variant of 'call'.
+ return deriveCallMethodName(suffix);
+ }
+ String disambiguatedName =
+ _disambiguateMember(library, selector.name, suffix);
+ return disambiguatedName; // Methods other than call are not annotated.
+
+ default:
+ compiler.internalError(compiler.currentElement,
+ 'Unexpected selector kind: ${selector.kind}');
+ return null;
}
}
@@ -481,13 +616,13 @@
=> invocationName(selector);
/**
- * Returns name of accessor (root to getter and setter) for a static or
- * instance field.
+ * Returns the disambiguated name for the given field, used for constructing
+ * the getter and setter names.
*/
String fieldAccessorName(Element element) {
return element.isInstanceMember
- ? instanceFieldAccessorName(element)
- : getNameOfField(element);
+ ? _disambiguateMember(element.library, element.name)
+ : _disambiguateGlobal(element);
}
/**
@@ -497,126 +632,296 @@
String fieldPropertyName(Element element) {
return element.isInstanceMember
? instanceFieldPropertyName(element)
- : getNameOfField(element);
+ : _disambiguateGlobal(element);
}
/**
- * Returns name of accessor (root to getter and setter) for an instance field.
+ * Returns name of the JavaScript property used to store the
+ * `readTypeVariable` function for the given type variable.
*/
- String instanceFieldAccessorName(Element element) {
- String proposedName = privateName(element.library, element.name);
- return getMappedInstanceName(proposedName);
- }
-
- String readTypeVariableName(TypeVariableElement element) {
- return '\$tv_${instanceFieldAccessorName(element)}';
+ String nameForReadTypeVariable(TypeVariableElement element) {
+ return _disambiguateInternalMember(element, () => element.name);
}
/**
- * Returns name of the JavaScript property used to store an instance field.
+ * Returns a JavaScript property name used to store [element] on one
+ * of the global objects.
+ *
+ * Should be used together with [globalObjectFor], which denotes the object
+ * on which the returned property name should be used.
+ */
+ String globalPropertyName(Element element) {
+ return _disambiguateGlobal(element);
+ }
+
+ /**
+ * Returns the JavaScript property name used to store an instance field.
*/
String instanceFieldPropertyName(Element element) {
+ ClassElement enclosingClass = element.enclosingClass;
+
if (element.hasFixedBackendName) {
+ // Box fields and certain native fields must be given a specific name.
+ // Native names must not contain '$'. We rely on this to avoid clashes.
+ assert(element is BoxFieldElement ||
+ enclosingClass.isNative && !element.fixedBackendName.contains(r'$'));
+
return element.fixedBackendName;
}
- // If a class is used anywhere as a mixin, we must make the name unique so
- // that it does not accidentally shadow. Also, the mixin name must be
- // constant over all mixins.
+
+ // If the name of the field might clash with another field,
+ // use a mangled field name to avoid potential clashes.
+ // Note that if the class extends a native class, that native class might
+ // have fields with fixed backend names, so we assume the worst and always
+ // mangle the field names of classes extending native classes.
+ // Methods on such classes are stored on the interceptor, not the instance,
+ // so only fields have the potential to clash with a native property name.
ClassWorld classWorld = compiler.world;
- if (classWorld.isUsedAsMixin(element.enclosingClass) ||
- shadowingAnotherField(element)) {
- // Construct a new name for the element based on the library and class it
- // is in. The name here is not important, we just need to make sure it is
- // unique. If we are minifying, we actually construct the name from the
- // minified version of the class name, but the result is minified once
- // again, so that is not visible in the end result.
- String libraryName = getNameOfLibrary(element.library);
- String className = getNameOfClass(element.enclosingClass);
- String instanceName = privateName(element.library, element.name);
- return getMappedInstanceName('$libraryName\$$className\$$instanceName');
+ if (classWorld.isUsedAsMixin(enclosingClass) ||
+ _isShadowingSuperField(element) ||
+ _isUserClassExtendingNative(enclosingClass)) {
+ String proposeName() => '${enclosingClass.name}_${element.name}';
+ return _disambiguateInternalMember(element, proposeName);
}
- String proposedName = privateName(element.library, element.name);
- return getMappedInstanceName(proposedName);
+ // No superclass uses the disambiguated name as a property name, so we can
+ // use it for this field. This generates nicer field names since otherwise
+ // the field name would have to be mangled.
+ return _disambiguateMember(element.library, element.name);
}
-
- bool shadowingAnotherField(Element element) {
+ bool _isShadowingSuperField(Element element) {
return element.enclosingClass.hasFieldShadowedBy(element);
}
- String setterName(Element element) {
+ /// True if [class_] is a non-native class that inherits from a native class.
+ bool _isUserClassExtendingNative(ClassElement class_) {
+ return !class_.isNative &&
+ Elements.isNativeOrExtendsNative(class_.superclass);
+ }
+
+ /// Annotated name for the setter of [element].
+ String setterForElement(Element element) {
// We dynamically create setters from the field-name. The setter name must
// therefore be derived from the instance field-name.
- LibraryElement library = element.library;
- String name = getMappedInstanceName(privateName(library, element.name));
- return '$setterPrefix$name';
+ String name = _disambiguateMember(element.library, element.name);
+ return deriveSetterName(name);
}
- String setterNameFromAccessorName(String name) {
+ /// Annotated name for the setter of any member with [disambiguatedName].
+ String deriveSetterName(String disambiguatedName) {
// We dynamically create setters from the field-name. The setter name must
// therefore be derived from the instance field-name.
- return '$setterPrefix$name';
+ return '$setterPrefix$disambiguatedName';
}
- String getterNameFromAccessorName(String name) {
+ /// Annotated name for the setter of any member with [disambiguatedName].
+ String deriveGetterName(String disambiguatedName) {
// We dynamically create getters from the field-name. The getter name must
// therefore be derived from the instance field-name.
- return '$getterPrefix$name';
+ return '$getterPrefix$disambiguatedName';
}
- String getterName(Element element) {
+ /// Annotated name for the getter of [element].
+ String getterForElement(Element element) {
// We dynamically create getters from the field-name. The getter name must
// therefore be derived from the instance field-name.
- LibraryElement library = element.library;
- String name = getMappedInstanceName(privateName(library, element.name));
- return '$getterPrefix$name';
+ String name = _disambiguateMember(element.library, element.name);
+ return deriveGetterName(name);
}
- String getMappedGlobalName(String proposedName, {bool ensureSafe: true}) {
- var newName = globalNameMap[proposedName];
+ /// Property name for the getter of an instance member with [originalName]
+ /// in [library].
+ ///
+ /// [library] may be `null` if [originalName] is known to be public.
+ String getterForMember(LibraryElement library, String originalName) {
+ String disambiguatedName = _disambiguateMember(library, originalName);
+ return deriveGetterName(disambiguatedName);
+ }
+
+ /// Property name for the getter or a public instance member with
+ /// [originalName].
+ String getterForPublicMember(String originalName) {
+ return getterForMember(null, originalName);
+ }
+
+ /// Disambiguated name for a compiler-owned global variable.
+ ///
+ /// The resulting name is unique within the global-member namespace.
+ String _disambiguateInternalGlobal(String name) {
+ String newName = internalGlobals[name];
if (newName == null) {
+ newName = getFreshName(name, usedGlobalNames, suggestedGlobalNames);
+ internalGlobals[name] = newName;
+ }
+ return newName;
+ }
+
+ /// Returns the property name to use for a compiler-owner global variable,
+ /// i.e. one that does not correspond to any element but is used as a utility
+ /// global by code generation.
+ ///
+ /// [name] functions as both the proposed name for the global, and as a key
+ /// identifying the global. The [name] must not contain `$` symbols, since
+ /// the [Namer] uses those names internally.
+ ///
+ /// This provides an easy mechanism of avoiding a name-clash with user-space
+ /// globals, although the callers of must still take care not to accidentally
+ /// pass in the same [name] for two different internal globals.
+ String internalGlobal(String name) {
+ assert(!name.contains(r'$'));
+ return _disambiguateInternalGlobal(name);
+ }
+
+ /// Returns the disambiguated name for a top-level or static element.
+ ///
+ /// The resulting name is unique within the global-member namespace.
+ String _disambiguateGlobal(Element element) {
+ // TODO(asgerf): We can reuse more short names if we disambiguate with
+ // a separate namespace for each of the global holder objects.
+ element = element.declaration;
+ String newName = userGlobals[element];
+ if (newName == null) {
+ String proposedName = _proposeNameForGlobal(element);
newName = getFreshName(proposedName, usedGlobalNames,
- suggestedGlobalNames, ensureSafe: ensureSafe);
- globalNameMap[proposedName] = newName;
+ suggestedGlobalNames);
+ userGlobals[element] = newName;
}
return newName;
}
- String getMappedInstanceName(String proposedName) {
- var newName = instanceNameMap[proposedName];
+ /// Returns the disambiguated name for an instance method or field
+ /// with [originalName] in [library].
+ ///
+ /// [library] may be `null` if [originalName] is known to be public.
+ ///
+ /// This is the name used for deriving property names of accessors (getters
+ /// and setters) and as property name for storing methods and method stubs.
+ ///
+ /// [suffixes] denote an extension of [originalName] to distiguish it from
+ /// other members with that name. These are used to encode the arity and
+ /// named parameters to a method. Disambiguating the same [originalName] with
+ /// different [suffixes] will yield different disambiguated names.
+ ///
+ /// The resulting name, and its associated annotated names, are unique
+ /// to the ([originalName], [suffixes]) pair within the instance-member
+ /// namespace.
+ String _disambiguateMember(LibraryElement library,
+ String originalName,
+ [List<String> suffixes = const []]) {
+ // For private names, a library must be given.
+ assert(isPublicName(originalName) || library != null);
+
+ // Build a string encoding the library name, if the name is private.
+ String libraryKey = isPrivateName(originalName)
+ ? _disambiguateGlobal(library)
+ : '';
+
+ // In the unique key, separate the name parts by '@'.
+ // This avoids clashes since the original names cannot contain that symbol.
+ String key = '$libraryKey@$originalName@${suffixes.join('@')}';
+ String newName = userInstanceMembers[key];
if (newName == null) {
- newName = getFreshName(proposedName, usedInstanceNames,
- suggestedInstanceNames, ensureSafe: true);
- instanceNameMap[proposedName] = newName;
+ String proposedName = privateName(library, originalName);
+ if (!suffixes.isEmpty) {
+ // In the proposed name, separate the name parts by '$', because the
+ // proposed name must be a valid identifier, but not necessarily unique.
+ proposedName += r'$' + suffixes.join(r'$');
+ }
+ newName = getFreshName(proposedName,
+ usedInstanceNames, suggestedInstanceNames,
+ sanitizeForAnnotations: true);
+ userInstanceMembers[key] = newName;
}
return newName;
}
- String getMappedOperatorName(String proposedName) {
- var newName = operatorNameMap[proposedName];
+ /// Forces the public instance member with [originalName] to have the given
+ /// [disambiguatedName].
+ ///
+ /// The [originalName] must not have been disambiguated before, and the
+ /// [disambiguatedName] must not have been used.
+ ///
+ /// Using [_disambiguateMember] with the given [originalName] and no suffixes
+ /// will subsequently return [disambiguatedName].
+ void reservePublicMemberName(String originalName,
+ String disambiguatedName) {
+ // Build a key that corresponds to the one built in disambiguateMember.
+ String libraryPrefix = ''; // Public names have an empty library prefix.
+ String suffix = ''; // We don't need any suffixes.
+ String key = '$libraryPrefix@$originalName@$suffix';
+ assert(!userInstanceMembers.containsKey(key));
+ assert(!usedInstanceNames.contains(disambiguatedName));
+ userInstanceMembers[key] = disambiguatedName;
+ usedInstanceNames.add(disambiguatedName);
+ }
+
+ /// Disambiguated name unique to [element].
+ ///
+ /// This is used as the property name for fields, type variables,
+ /// constructor bodies, and super-accessors.
+ ///
+ /// The resulting name is unique within the instance-member namespace.
+ String _disambiguateInternalMember(Element element, String proposeName()) {
+ String newName = internalInstanceMembers[element];
if (newName == null) {
- newName = getFreshName(proposedName, usedInstanceNames,
- suggestedInstanceNames, ensureSafe: false);
- operatorNameMap[proposedName] = newName;
+ String name = proposeName();
+ bool mayClashNative = _isUserClassExtendingNative(element.enclosingClass);
+ newName = getFreshName(name,
+ usedInstanceNames, suggestedInstanceNames,
+ sanitizeForAnnotations: true,
+ sanitizeForNatives: mayClashNative);
+ internalInstanceMembers[element] = newName;
}
return newName;
}
+ /// Disambiguated name for the given operator.
+ ///
+ /// [operatorIdentifier] must be the operator's identifier, e.g.
+ /// `$add` and not `+`.
+ ///
+ /// The resulting name is unique within the instance-member namespace.
+ String _disambiguateOperator(String operatorIdentifier) {
+ String newName = userInstanceOperators[operatorIdentifier];
+ if (newName == null) {
+ newName = getFreshName(operatorIdentifier, usedInstanceNames,
+ suggestedInstanceNames);
+ userInstanceOperators[operatorIdentifier] = newName;
+ }
+ return newName;
+ }
+
+ /// Returns an unused name.
+ ///
+ /// [proposedName] must be a valid JavaScript identifier.
+ ///
+ /// If [sanitizeForAnnotations] is `true`, then the result is guaranteed not
+ /// to have the form of an annotated name.
+ ///
+ /// If [sanitizeForNatives] it `true`, then the result is guaranteed not to
+ /// clash with a property name on a native object.
+ ///
+ /// Note that [MinifyNamer] overrides this method with one that produces
+ /// minified names.
String getFreshName(String proposedName,
Set<String> usedNames,
Map<String, String> suggestedNames,
- {bool ensureSafe: true}) {
- var candidate;
- if (ensureSafe) {
- proposedName = safeName(proposedName);
+ {bool sanitizeForAnnotations: false,
+ bool sanitizeForNatives: false}) {
+ if (sanitizeForAnnotations) {
+ proposedName = _sanitizeForAnnotations(proposedName);
}
- assert(!jsReserved.contains(proposedName));
+ if (sanitizeForNatives) {
+ proposedName = _sanitizeForNatives(proposedName);
+ }
+ proposedName = _sanitizeForKeywords(proposedName);
+ String candidate;
if (!usedNames.contains(proposedName)) {
candidate = proposedName;
} else {
- var counter = popularNameCounters[proposedName];
- var i = counter == null ? 0 : counter;
+ int counter = popularNameCounters[proposedName];
+ int i = (counter == null) ? 0 : counter;
while (usedNames.contains("$proposedName$i")) {
i++;
}
@@ -627,15 +932,63 @@
return candidate;
}
+ /// Returns a variant of [name] that cannot clash with the annotated
+ /// version of another name, that is, the resulting name can never be returned
+ /// by [deriveGetterName], [deriveSetterName], [deriveCallMethodName],
+ /// [operatorIs], or [substitutionName].
+ ///
+ /// For example, a name `get$x` would be converted to `$get$x` to ensure it
+ /// cannot clash with the getter for `x`.
+ ///
+ /// We don't want to register all potential annotated names in
+ /// [usedInstanceNames] (there are too many), so we use this step to avoid
+ /// clashes between annotated and unannotated names.
+ String _sanitizeForAnnotations(String name) {
+ // Ensure name does not clash with a getter or setter of another name,
+ // one of the other special names that start with `$`, such as `$is`,
+ // or with one of the `call` stubs, such as `call$1`.
+ assert(this is! MinifyNamer);
+ if (name.startsWith(r'$') ||
+ name.startsWith(getterPrefix) ||
+ name.startsWith(setterPrefix) ||
+ name.startsWith(_callPrefixDollar)) {
+ name = '\$$name';
+ }
+ return name;
+ }
+
+ /// Returns a variant of [name] that cannot clash with a native property name
+ /// (e.g. the name of a method on a JS DOM object).
+ ///
+ /// If [name] is not an annotated name, the result will not be an annotated
+ /// name either.
+ String _sanitizeForNatives(String name) {
+ if (!name.contains(r'$')) {
+ // Prepend $$. The result must not coincide with an annotated name.
+ name = '\$\$$name';
+ }
+ return name;
+ }
+
+ /// Generate a unique name for the [id]th closure variable, with proposed name
+ /// [name].
+ ///
+ /// The result is used as the name of [BoxFieldElement]s and
+ /// [ClosureFieldElement]s, and must therefore be unique to avoid breaking an
+ /// invariant in the element model (classes cannot declare multiple fields
+ /// with the same name).
+ ///
+ /// Since the result is used as an element name, it will later show up as a
+ /// *proposed name* when the element is passed to [instanceFieldPropertyName].
String getClosureVariableName(String name, int id) {
return "${name}_$id";
}
/**
- * Returns a preferred JS-id for the given top-level or static element.
+ * Returns a proposed name for the given top-level or static element.
* The returned id is guaranteed to be a valid JS-id.
*/
- String _computeGuess(Element element) {
+ String _proposeNameForGlobal(Element element) {
assert(!element.isInstanceMember);
String name;
if (element.isGenerativeConstructor) {
@@ -680,7 +1033,7 @@
return name;
}
- String getInterceptorSuffix(Iterable<ClassElement> classes) {
+ String suffixForGetInterceptor(Iterable<ClassElement> classes) {
String abbreviate(ClassElement cls) {
if (cls == compiler.objectClass) return "o";
if (cls == backend.jsStringClass) return "s";
@@ -707,137 +1060,118 @@
return names.join();
}
- String getInterceptorName(Element element, Iterable<ClassElement> classes) {
+ /// Property name used for `getInterceptor` or one of its specializations.
+ String nameForGetInterceptor(Iterable<ClassElement> classes) {
+ FunctionElement getInterceptor = backend.getInterceptorMethod;
if (classes.contains(backend.jsInterceptorClass)) {
// If the base Interceptor class is in the set of intercepted classes, we
// need to go through the generic getInterceptorMethod, since any subclass
// of the base Interceptor could match.
- return getNameOfInstanceMember(element);
+ // The unspecialized getInterceptor method can also be accessed through
+ // its element, so we treat this as a user-space global instead of an
+ // internal global.
+ return _disambiguateGlobal(getInterceptor);
}
- String suffix = getInterceptorSuffix(classes);
- return getMappedGlobalName("${element.name}\$$suffix");
+ String suffix = suffixForGetInterceptor(classes);
+ return _disambiguateInternalGlobal("${getInterceptor.name}\$$suffix");
}
- String getOneShotInterceptorName(Selector selector,
- Iterable<ClassElement> classes) {
+ /// Property name used for the one-shot interceptor method for the given
+ /// [selector] and return-type specialization.
+ String nameForGetOneShotInterceptor(Selector selector,
+ Iterable<ClassElement> classes) {
// The one-shot name is a global name derived from the invocation name. To
// avoid instability we would like the names to be unique and not clash with
// other global names.
- String root = invocationName(selector); // Is already safe.
+ String root = invocationName(selector);
if (classes.contains(backend.jsInterceptorClass)) {
// If the base Interceptor class is in the set of intercepted classes,
// this is the most general specialization which uses the generic
// getInterceptor method. To keep the name short, we add '$' only to
- // distinguish from global getters or setters; operators and methods can't
- // clash.
+ // distinguish from internal globals requested from outside the Namer
+ // with internalGlobal().
// TODO(sra): Find a way to get the simple name when Object is not in the
// set of classes for most general variant, e.g. "$lt$n" could be "$lt".
if (selector.isGetter || selector.isSetter) root = '$root\$';
- return getMappedGlobalName(root, ensureSafe: false);
+ return _disambiguateInternalGlobal(root);
} else {
- String suffix = getInterceptorSuffix(classes);
- return getMappedGlobalName("$root\$$suffix", ensureSafe: false);
+ String suffix = suffixForGetInterceptor(classes);
+ return _disambiguateInternalGlobal("$root\$$suffix");
}
}
- /// Returns the runtime name for [element]. The result is not safe as an id.
- String getRuntimeTypeName(Element element) {
+ /// Returns the runtime name for [element].
+ ///
+ /// This name is used as the basis for deriving `is` and `as` property names
+ /// for the given type.
+ ///
+ /// The result is not always safe as a property name unless prefixing
+ /// [operatorIsPrefix] or [operatorAsPrefix]. If this is a function type,
+ /// then by convention, an underscore must also separate [operatorIsPrefix]
+ /// from the type name.
+ String runtimeTypeName(TypeDeclarationElement element) {
if (element == null) return 'dynamic';
- return getNameForRti(element);
+ // The returned name affects both the global and instance member namespaces:
+ //
+ // - If given a class, this must coincide with the class name, which
+ // is also the GLOBAL property name of its constructor.
+ //
+ // - The result is used to derive `$isX` and `$asX` names, which are used
+ // as INSTANCE property names.
+ //
+ // To prevent clashes in both namespaces at once, we disambiguate the name
+ // as a global here, and in [_sanitizeForAnnotations] we ensure that
+ // ordinary instance members cannot start with `$is` or `$as`.
+ return _disambiguateGlobal(element);
}
- /**
- * Returns a preferred JS-id for the given element. The returned id is
- * guaranteed to be a valid JS-id. Globals and static fields are furthermore
- * guaranteed to be unique.
- *
- * For accessing statics consider calling [elementAccess] instead.
- */
- // TODO(ahe): This is an internal method to the Namer (and its subclasses)
- // and should not be call from outside.
- String getNameX(Element element) {
- if (element.isInstanceMember) {
- if (element.kind == ElementKind.GENERATIVE_CONSTRUCTOR_BODY
- || element.kind == ElementKind.FUNCTION) {
- return instanceMethodName(element);
- } else if (element.kind == ElementKind.GETTER) {
- return getterName(element);
- } else if (element.kind == ElementKind.SETTER) {
- return setterName(element);
- } else if (element.kind == ElementKind.FIELD) {
- compiler.internalError(element,
- 'Use instanceFieldPropertyName or instanceFieldAccessorName.');
- return null;
- } else {
- compiler.internalError(element,
- 'getName for bad kind: ${element.kind}.');
- return null;
- }
- } else {
- // Use declaration element to ensure invariant on [globals].
- element = element.declaration;
- // Dealing with a top-level or static element.
- String cached = globals[element];
- if (cached != null) return cached;
+ /// Returns the disambiguated name of [class_].
+ ///
+ /// This is both the *runtime type* of the class (see [runtimeTypeName])
+ /// and a global property name in which to store its JS constructor.
+ String className(ClassElement class_) => _disambiguateGlobal(class_);
- String guess = _computeGuess(element);
- ElementKind kind = element.kind;
- if (kind == ElementKind.VARIABLE ||
- kind == ElementKind.PARAMETER) {
- // The name is not guaranteed to be unique.
- return safeName(guess);
- }
- if (kind == ElementKind.GENERATIVE_CONSTRUCTOR ||
- kind == ElementKind.FUNCTION ||
- kind == ElementKind.CLASS ||
- kind == ElementKind.FIELD ||
- kind == ElementKind.GETTER ||
- kind == ElementKind.SETTER ||
- kind == ElementKind.TYPEDEF ||
- kind == ElementKind.LIBRARY) {
- bool fixedName = false;
- if (Elements.isInstanceField(element)) {
- fixedName = element.hasFixedBackendName;
- }
- String result = fixedName
- ? guess
- : getFreshName(guess, usedGlobalNames, suggestedGlobalNames,
- ensureSafe: true);
- globals[element] = result;
- return result;
- }
- compiler.internalError(element,
- 'getName for unknown kind: ${element.kind}.');
- return null;
- }
+ /// Property name on which [member] can be accessed directly,
+ /// without clashing with another JS property name.
+ ///
+ /// This is used for implementing super-calls, where ordinary dispatch
+ /// semantics must be circumvented. For example:
+ ///
+ /// class A { foo() }
+ /// class B extends A {
+ /// foo() { super.foo() }
+ /// }
+ ///
+ /// Example translation to JS:
+ ///
+ /// A.prototype.super$A$foo = function() {...}
+ /// A.prototype.foo$0 = A.prototype.super$A$foo
+ ///
+ /// B.prototype.foo$0 = function() {
+ /// this.super$A$foo(); // super.foo()
+ /// }
+ ///
+ String aliasedSuperMemberPropertyName(Element member) {
+ assert(!member.isField); // Fields do not need super aliases.
+ String methodName = instanceMethodName(member);
+ return _disambiguateInternalMember(member,
+ () => 'super\$${member.enclosingClass.name}\$$methodName');
}
- String getNameForRti(Element element) => getNameX(element);
-
- String getNameOfLibrary(LibraryElement library) => getNameX(library);
-
- String getNameOfClass(ClassElement cls) => getNameX(cls);
-
- String getNameOfField(VariableElement field) => getNameX(field);
-
- // TODO(ahe): Remove this method. Use get getNameOfMember instead.
- String getNameOfInstanceMember(Element member) => getNameX(member);
-
- String getNameOfAliasedSuperMember(Element member) {
- ClassElement superClass = member.enclosingClass;
- String className = getNameOfClass(superClass);
- String memberName = getNameOfMember(member);
- String proposal = "$superPrefix$className\$$memberName";
- // TODO(herhut): Use field naming constraints (unique wrt. inheritance).
- return getMappedInstanceName(proposal);
+ /// Property name in which to store the given static or instance [method].
+ /// For instance methods, this includes the suffix encoding arity and named
+ /// parameters.
+ ///
+ /// The name is not necessarily unique to [method], since a static method
+ /// may share its name with an instance method.
+ String methodPropertyName(Element method) {
+ return method.isInstanceMember
+ ? instanceMethodName(method)
+ : globalPropertyName(method);
}
- String getNameOfMember(Element member) => getNameX(member);
-
- String getNameOfGlobalField(VariableElement field) => getNameX(field);
-
/// Returns true if [element] is stored on current isolate ('$'). We intend
/// to store only mutable static state in [currentIsolate], constants are
/// stored in 'C', and functions, accessors, classes, etc. are stored in one
@@ -871,21 +1205,23 @@
library.getLibraryOrScriptName().hashCode % userGlobalObjects.length];
}
- String getLazyInitializerName(Element element) {
+ String lazyInitializerName(Element element) {
assert(Elements.isStaticOrTopLevelField(element));
- return getMappedGlobalName("$getterPrefix${getNameX(element)}");
+ String name = _disambiguateGlobal(element);
+ return _disambiguateInternalGlobal("$getterPrefix$name");
}
- String getStaticClosureName(Element element) {
- assert(invariant(element, Elements.isStaticOrTopLevelFunction(element)));
- return getMappedGlobalName("${getNameX(element)}\$closure");
+ String staticClosureName(Element element) {
+ assert(Elements.isStaticOrTopLevelFunction(element));
+ String name = _disambiguateGlobal(element);
+ return _disambiguateInternalGlobal("$name\$closure");
}
// This name is used as part of the name of a TypeConstant
String uniqueNameForTypeConstantElement(Element element) {
// TODO(sra): If we replace the period with an identifier character,
// TypeConstants will have better names in unminified code.
- return "${globalObjectFor(element)}.${getNameX(element)}";
+ return "${globalObjectFor(element)}.${globalPropertyName(element)}";
}
String globalObjectForConstant(ConstantValue constant) => 'C';
@@ -918,7 +1254,7 @@
return functionTypeNameMap.putIfAbsent(functionType, () {
String proposedName = functionTypeNamer.computeName(functionType);
String freshName = getFreshName(proposedName, usedInstanceNames,
- suggestedInstanceNames, ensureSafe: true);
+ suggestedInstanceNames);
return freshName;
});
}
@@ -931,32 +1267,35 @@
return operatorIs(type.element);
}
- String operatorIs(Element element) {
+ String operatorIs(ClassElement element) {
// TODO(erikcorry): Reduce from $isx to ix when we are minifying.
- return '${operatorIsPrefix}${getRuntimeTypeName(element)}';
+ return '${operatorIsPrefix}${runtimeTypeName(element)}';
}
- /*
- * Returns a name that does not clash with reserved JS keywords,
- * and also ensures it won't clash with other identifiers.
- */
- String _safeName(String name, Set<String> reserved) {
- if (reserved.contains(name) || name.startsWith(r'$')) {
+ /// Returns a name that does not clash with reserved JS keywords.
+ String _sanitizeForKeywords(String name) {
+ if (jsReserved.contains(name)) {
name = '\$$name';
}
- assert(!reserved.contains(name));
+ assert(!jsReserved.contains(name));
return name;
}
String substitutionName(Element element) {
- // TODO(ahe): Creating a string here is unfortunate. It is slow (due to
- // string concatenation in the implementation), and may prevent
- // segmentation of '$'.
- return '${operatorAsPrefix}${getNameForRti(element)}';
+ return '${operatorAsPrefix}${runtimeTypeName(element)}';
}
- String safeName(String name) => _safeName(name, jsReserved);
- String safeVariableName(String name) => _safeName(name, jsVariableReserved);
+ /// Returns a variable name that cannot clash with a keyword, a global
+ /// variable, or any name starting with a single '$'.
+ ///
+ /// Furthermore, this function is injective, that is, it never returns the
+ /// same name for two different inputs.
+ String safeVariableName(String name) {
+ if (jsVariableReserved.contains(name) || name.startsWith(r'$')) {
+ return '\$$name';
+ }
+ return name;
+ }
String operatorNameToIdentifier(String name) {
if (name == null) return null;
@@ -1013,10 +1352,10 @@
}
void forgetElement(Element element) {
- String globalName = globals[element];
+ String globalName = userGlobals[element];
invariant(element, globalName != null, message: 'No global name.');
usedGlobalNames.remove(globalName);
- globals.remove(element);
+ userGlobals.remove(element);
}
}
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index eb4616c..4e8e368 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -33,7 +33,7 @@
JavaScriptBackend get backend => compiler.backend;
String get getFunctionThatReturnsNullName
- => backend.namer.getMappedInstanceName('functionThatReturnsNull');
+ => backend.namer.internalGlobal('functionThatReturnsNull');
RuntimeTypes(Compiler compiler)
: this.compiler = compiler,
@@ -401,7 +401,7 @@
String getTypeRepresentationForTypeConstant(DartType type) {
JavaScriptBackend backend = compiler.backend;
Namer namer = backend.namer;
- if (type.isDynamic) return namer.getRuntimeTypeName(null);
+ if (type.isDynamic) return namer.runtimeTypeName(null);
String name = namer.uniqueNameForTypeConstantElement(type.element);
if (!type.element.isClass) return name;
InterfaceType interface = type;
@@ -541,7 +541,7 @@
getTypeEncoding(type, alwaysGenerateFunction: true);
if (contextClass != null) {
JavaScriptBackend backend = compiler.backend;
- String contextName = backend.namer.getNameOfClass(contextClass);
+ String contextName = backend.namer.className(contextClass);
return js('function () { return #(#, #, #); }',
[ backend.emitter.staticFunctionAccess(backend.getComputeSignature()),
encoding, this_, js.string(contextName) ]);
diff --git a/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart
index 01e74555..2a5ded5 100644
--- a/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart
@@ -62,7 +62,7 @@
jsAst.Expression receiver =
js(isInterceptorClass ? receiverArgumentName : 'this');
if (member.isGetter) {
- String getterName = namer.getterName(member);
+ String getterName = namer.getterForElement(member);
if (isInterceptedMethod) {
return js('this.#(#)', [getterName, receiver]);
}
diff --git a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
index 7f64f57..3572ff4 100644
--- a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
+++ b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
@@ -417,9 +417,6 @@
/// Returns the JS code for accessing the embedded [global].
jsAst.Expression generateEmbeddedGlobalAccess(String global);
- /// Returns the JS code for accessing the given [constant].
- jsAst.Expression constantReference(ConstantValue constant);
-
/// Returns the JS function representing the given function.
///
/// The function must be invoked and can not be used as closure.
@@ -447,5 +444,8 @@
int compareConstants(ConstantValue a, ConstantValue b);
bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant);
+ /// Returns the JS code for accessing the given [constant].
+ jsAst.Expression constantReference(ConstantValue constant);
+
void invalidateCaches();
}
diff --git a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
index 9f10524..26d9a13 100644
--- a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
@@ -291,8 +291,7 @@
Selector selector = backend.oneShotInterceptors[name];
Set<ClassElement> classes =
backend.getInterceptedClassesOn(selector.name);
- String getInterceptorName =
- namer.getInterceptorName(backend.getInterceptorMethod, classes);
+ String getInterceptorName = namer.nameForGetInterceptor(classes);
List<String> parameterNames = <String>[];
parameterNames.add('receiver');
diff --git a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
index 4748854..3423d30 100644
--- a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
@@ -14,7 +14,7 @@
/// Returns the code equivalent to:
/// `function(args) { $.startRootIsolate(X.main$closure(), args); }`
jsAst.Expression _buildIsolateSetupClosure(Element appMain,
- Element isolateMain) {
+ Element isolateMain) {
jsAst.Expression mainAccess =
emitterTask.isolateStaticClosureAccess(appMain);
// Since we pass the closurized version of the main method to
diff --git a/pkg/compiler/lib/src/js_emitter/model.dart b/pkg/compiler/lib/src/js_emitter/model.dart
index 8d3ba95..4e19d86 100644
--- a/pkg/compiler/lib/src/js_emitter/model.dart
+++ b/pkg/compiler/lib/src/js_emitter/model.dart
@@ -17,7 +17,7 @@
final List<Fragment> fragments;
final List<Holder> holders;
final bool outputContainsConstantList;
- final bool outputContainsNativeClasses;
+ final bool needsNativeSupport;
final bool hasIsolateSupport;
/// A map from load id to the list of fragments that need to be loaded.
final Map<String, List<Fragment>> loadMap;
@@ -35,10 +35,10 @@
this.loadMap,
this.typeToInterceptorMap,
this._metadataCollector,
- {this.outputContainsNativeClasses,
+ {this.needsNativeSupport,
this.outputContainsConstantList,
this.hasIsolateSupport}) {
- assert(outputContainsNativeClasses != null);
+ assert(needsNativeSupport != null);
assert(outputContainsConstantList != null);
assert(hasIsolateSupport != null);
}
diff --git a/pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart
index c37d533..ef11a58 100644
--- a/pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart
@@ -40,38 +40,18 @@
// TODO(floitsch): copied from OldEmitter. Adjust or share.
@override
bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
- if (constant.isFunction) return true; // Already emitted.
- if (constant.isPrimitive) return true; // Inlined.
- if (constant.isDummy) return true; // Inlined.
- // The name is null when the constant is already a JS constant.
- // TODO(floitsch): every constant should be registered, so that we can
- // share the ones that take up too much space (like some strings).
- if (namer.constantName(constant) == null) return true;
- return false;
+ return _emitter.isConstantInlinedOrAlreadyEmitted(constant);
}
// TODO(floitsch): copied from OldEmitter. Adjust or share.
@override
int compareConstants(ConstantValue a, ConstantValue b) {
- // Inlined constants don't affect the order and sometimes don't even have
- // names.
- int cmp1 = isConstantInlinedOrAlreadyEmitted(a) ? 0 : 1;
- int cmp2 = isConstantInlinedOrAlreadyEmitted(b) ? 0 : 1;
- if (cmp1 + cmp2 < 2) return cmp1 - cmp2;
+ return _emitter.compareConstants(a, b);
+ }
- // Emit constant interceptors first. Constant interceptors for primitives
- // might be used by code that builds other constants. See Issue 18173.
- if (a.isInterceptor != b.isInterceptor) {
- return a.isInterceptor ? -1 : 1;
- }
-
- // Sorting by the long name clusters constants with the same constructor
- // which compresses a tiny bit better.
- int r = namer.constantLongName(a).compareTo(namer.constantLongName(b));
- if (r != 0) return r;
- // Resolve collisions in the long name by using the constant name (i.e. JS
- // name) which is unique.
- return namer.constantName(a).compareTo(namer.constantName(b));
+ @override
+ js.Expression constantReference(ConstantValue value) {
+ return _emitter.generateConstantReference(value);
}
@override
@@ -85,13 +65,8 @@
return js.js('function() {}');
}
- @override
- js.Expression constantReference(ConstantValue value) {
- return _emitter.constantEmitter.reference(value);
- }
-
js.PropertyAccess _globalPropertyAccess(Element element) {
- String name = namer.getNameX(element);
+ String name = namer.globalPropertyName(element);
js.PropertyAccess pa = new js.PropertyAccess.field(
new js.VariableUse(namer.globalObjectFor(element)),
name);
@@ -101,13 +76,12 @@
@override
js.Expression isolateLazyInitializerAccess(FieldElement element) {
return js.js('#.#', [namer.globalObjectFor(element),
- namer.getLazyInitializerName(element)]);
+ namer.lazyInitializerName(element)]);
}
@override
js.Expression isolateStaticClosureAccess(FunctionElement element) {
- return js.js('#.#()',
- [namer.globalObjectFor(element), namer.getStaticClosureName(element)]);
+ return _emitter.generateStaticClosureAccess(element);
}
@override
diff --git a/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
index 3e913ab..9afa419 100644
--- a/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
@@ -4,10 +4,10 @@
library dart2js.new_js_emitter.model_emitter;
-import '../../constants/values.dart' show ConstantValue;
+import '../../constants/values.dart' show ConstantValue, FunctionConstantValue;
import '../../dart2jslib.dart' show Compiler;
import '../../dart_types.dart' show DartType;
-import '../../elements/elements.dart' show ClassElement;
+import '../../elements/elements.dart' show ClassElement, FunctionElement;
import '../../js/js.dart' as js;
import '../../js_backend/js_backend.dart' show
JavaScriptBackend,
@@ -38,7 +38,7 @@
class ModelEmitter {
final Compiler compiler;
final Namer namer;
- final ConstantEmitter constantEmitter;
+ ConstantEmitter constantEmitter;
final NativeEmitter nativeEmitter;
JavaScriptBackend get backend => compiler.backend;
@@ -51,15 +51,76 @@
ModelEmitter(Compiler compiler, Namer namer, this.nativeEmitter)
: this.compiler = compiler,
- this.namer = namer,
- constantEmitter =
- new ConstantEmitter(compiler, namer, makeConstantListTemplate);
+ this.namer = namer {
+ // TODO(floitsch): remove hard-coded name.
+ // TODO(floitsch): there is no harm in caching the template.
+ js.Template makeConstantListTemplate =
+ js.js.uncachedExpressionTemplate('makeConstList(#)');
+
+ this.constantEmitter = new ConstantEmitter(
+ compiler, namer, this.generateConstantReference,
+ makeConstantListTemplate);
+ }
js.Expression generateEmbeddedGlobalAccess(String global) {
// TODO(floitsch): We should not use "init" for globals.
return js.js("init.$global");
}
+ bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
+ if (constant.isFunction) return true; // Already emitted.
+ if (constant.isPrimitive) return true; // Inlined.
+ if (constant.isDummy) return true; // Inlined.
+ // The name is null when the constant is already a JS constant.
+ // TODO(floitsch): every constant should be registered, so that we can
+ // share the ones that take up too much space (like some strings).
+ if (namer.constantName(constant) == null) return true;
+ return false;
+ }
+
+ // TODO(floitsch): copied from OldEmitter. Adjust or share.
+ int compareConstants(ConstantValue a, ConstantValue b) {
+ // Inlined constants don't affect the order and sometimes don't even have
+ // names.
+ int cmp1 = isConstantInlinedOrAlreadyEmitted(a) ? 0 : 1;
+ int cmp2 = isConstantInlinedOrAlreadyEmitted(b) ? 0 : 1;
+ if (cmp1 + cmp2 < 2) return cmp1 - cmp2;
+
+ // Emit constant interceptors first. Constant interceptors for primitives
+ // might be used by code that builds other constants. See Issue 18173.
+ if (a.isInterceptor != b.isInterceptor) {
+ return a.isInterceptor ? -1 : 1;
+ }
+
+ // Sorting by the long name clusters constants with the same constructor
+ // which compresses a tiny bit better.
+ int r = namer.constantLongName(a).compareTo(namer.constantLongName(b));
+ if (r != 0) return r;
+ // Resolve collisions in the long name by using the constant name (i.e. JS
+ // name) which is unique.
+ return namer.constantName(a).compareTo(namer.constantName(b));
+ }
+
+ js.Expression generateStaticClosureAccess(FunctionElement element) {
+ return js.js('#.#()',
+ [namer.globalObjectFor(element), namer.staticClosureName(element)]);
+ }
+
+ js.Expression generateConstantReference(ConstantValue value) {
+ if (value.isFunction) {
+ FunctionConstantValue functionConstant = value;
+ return generateStaticClosureAccess(functionConstant.element);
+ }
+
+ // We are only interested in the "isInlined" part, but it does not hurt to
+ // test for the other predicates.
+ if (isConstantInlinedOrAlreadyEmitted(value)) {
+ return constantEmitter.generate(value);
+ }
+ return js.js('#.#', [namer.globalObjectForConstant(value),
+ namer.constantName(value)]);
+ }
+
int emitProgram(Program program) {
List<Fragment> fragments = program.fragments;
MainFragment mainFragment = fragments.first;
@@ -173,8 +234,8 @@
interceptorsByTagAccess,
leafTagsAccess);
- nativeHoles['hasNativeClasses'] = program.outputContainsNativeClasses;
- nativeHoles['hasNoNativeClasses'] = !program.outputContainsNativeClasses;
+ nativeHoles['needsNativeSupport'] = program.needsNativeSupport;
+ nativeHoles['needsNoNativeSupport'] = !program.needsNativeSupport;
nativeHoles['nativeInfoHandler'] = nativeInfoHandler;
return nativeHoles;
@@ -205,12 +266,6 @@
return new js.Block(statements);
}
- static js.Template get makeConstantListTemplate {
- // TODO(floitsch): remove hard-coded name.
- // TODO(floitsch): there is no harm in caching the template.
- return js.js.uncachedExpressionTemplate('makeConstList(#)');
- }
-
js.Block emitEmbeddedGlobals(Program program) {
List<js.Property> globals = <js.Property>[];
@@ -237,7 +292,7 @@
globals.add(emitMetadata(program));
- if (program.outputContainsNativeClasses) {
+ if (program.needsNativeSupport) {
globals.add(new js.Property(js.string(INTERCEPTORS_BY_TAG),
js.js('Object.create(null)', [])));
globals.add(new js.Property(js.string(LEAF_TAGS),
@@ -265,7 +320,7 @@
compiler.stringClass, compiler.boolClass, compiler.nullClass,
compiler.listClass];
nativeClassesNeedingUnmangledName.forEach((element) {
- names.add(new js.Property(js.string(namer.getNameOfClass(element)),
+ names.add(new js.Property(js.string(namer.className(element)),
js.string(element.name)));
});
@@ -386,8 +441,7 @@
js.Block emitConstants(List<Constant> constants) {
Iterable<js.Statement> statements = constants.map((Constant constant) {
- js.Expression code =
- constantEmitter.initializationExpression(constant.value);
+ js.Expression code = constantEmitter.generate(constant.value);
return js.js.statement("#.# = #;",
[constant.holder.name, constant.name, code]);
});
@@ -632,18 +686,19 @@
""";
js.Expression _encodeOptionalParameterDefaultValues(DartMethod method) {
- js.Expression result;
// TODO(herhut): Replace [js.LiteralNull] with [js.ArrayHole].
if (method.optionalParameterDefaultValues is List) {
- List<ConstantValue> defs = method.optionalParameterDefaultValues;
- Iterable<js.Expression> elements = defs.map(constantEmitter.reference);
+ List<ConstantValue> defaultValues = method.optionalParameterDefaultValues;
+ Iterable<js.Expression> elements =
+ defaultValues.map(generateConstantReference);
return new js.ArrayInitializer(elements.toList());
} else {
- Map<String, ConstantValue> defs = method.optionalParameterDefaultValues;
+ Map<String, ConstantValue> defaultValues =
+ method.optionalParameterDefaultValues;
List<js.Property> properties = <js.Property>[];
- defs.forEach((String name, ConstantValue value) {
+ defaultValues.forEach((String name, ConstantValue value) {
properties.add(new js.Property(js.string(name),
- constantEmitter.reference(value)));
+ generateConstantReference(value)));
});
return new js.ObjectInitializer(properties);
}
@@ -777,7 +832,7 @@
var name = classes[i];
var cls = classes[i + 1];
- if (#hasNativeClasses) {
+ if (#needsNativeSupport) {
// $nativeInfoDescription.
var indexOrNativeInfo = classes[i + 2];
if (typeof indexOrNativeInfo == "number") {
@@ -789,7 +844,7 @@
}
}
- if (#hasNoNativeClasses) {
+ if (#needsNoNativeSupport) {
var holderIndex = classes[i + 2];
}
@@ -984,7 +1039,7 @@
}
}
- if (#hasNativeClasses) {
+ if (#needsNativeSupport) {
function handleNativeClassInfos() {
for (var nativeClass in nativeInfos) {
var constructor = holdersMap[nativeClass][nativeClass].ensureResolved();
@@ -1007,7 +1062,7 @@
// generic arguments (which should be fine, but maybe there are other
// similar things).
// Initialize natives.
- if (#hasNativeClasses) handleNativeClassInfos();
+ if (#needsNativeSupport) handleNativeClassInfos();
// Initialize static non-final fields.
#staticNonFinals;
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart
index 064e35f..d56dbb4 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart
@@ -22,7 +22,7 @@
ClassElement superclass = classElement.superclass;
String superName = "";
if (superclass != null) {
- superName = namer.getNameOfClass(superclass);
+ superName = namer.className(superclass);
}
if (cls.isMixinApplication) {
@@ -44,6 +44,14 @@
emitRuntimeTypeInformation(cls, builder);
emitNativeInfo(cls, builder);
+ if (classElement == backend.closureClass) {
+ // We add a special getter here to allow for tearing off a closure from
+ // itself.
+ jsAst.Fun function = js('function() { return this; }');
+ String name = namer.getterForPublicMember(Compiler.CALL_OPERATOR_NAME);
+ builder.addProperty(name, function);
+ }
+
emitClassBuilderWithReflectionData(cls, builder, enclosingBuilder);
}
/**
@@ -63,7 +71,7 @@
jsAst.Expression constructorAst =
_stubGenerator.generateClassConstructor(classElement, fieldNames);
- String constructorName = namer.getNameOfClass(classElement);
+ String constructorName = namer.className(classElement);
OutputUnit outputUnit =
compiler.deferredLoadTask.outputUnitForElement(classElement);
emitter.emitPrecompiledConstructor(
@@ -134,14 +142,14 @@
if (field.needsInterceptedGetter) {
emitter.interceptorEmitter.interceptorInvocationNames.add(
- namer.getterName(fieldElement));
+ namer.getterForElement(fieldElement));
}
// TODO(16168): The setter creator only looks at the getter-name.
// Even though the setter could avoid the interceptor convention we
// currently still need to add the additional argument.
if (field.needsInterceptedGetter || field.needsInterceptedSetter) {
emitter.interceptorEmitter.interceptorInvocationNames.add(
- namer.setterName(fieldElement));
+ namer.setterForElement(fieldElement));
}
int code = field.getterFlags + (field.setterFlags << 2);
@@ -483,7 +491,7 @@
ClassBuilder builder) {
jsAst.Expression code = backend.generatedCode[member];
assert(code != null);
- String setterName = namer.setterNameFromAccessorName(accessorName);
+ String setterName = namer.deriveSetterName(accessorName);
compiler.dumpInfoTask.registerElementAst(member,
builder.addProperty(setterName, code));
generateReflectionDataForFieldGetterOrSetter(
@@ -495,9 +503,9 @@
jsAst.Expression function =
_stubGenerator.generateGetter(member, fieldName);
- String getterName = namer.getterNameFromAccessorName(accessorName);
+ String getterName = namer.deriveGetterName(accessorName);
ClassElement cls = member.enclosingClass;
- String className = namer.getNameOfClass(cls);
+ String className = namer.className(cls);
OutputUnit outputUnit =
compiler.deferredLoadTask.outputUnitForElement(member);
emitter.cspPrecompiledFunctionFor(outputUnit).add(
@@ -514,9 +522,9 @@
jsAst.Expression function =
_stubGenerator.generateSetter(member, fieldName);
- String setterName = namer.setterNameFromAccessorName(accessorName);
+ String setterName = namer.deriveSetterName(accessorName);
ClassElement cls = member.enclosingClass;
- String className = namer.getNameOfClass(cls);
+ String className = namer.className(cls);
OutputUnit outputUnit =
compiler.deferredLoadTask.outputUnitForElement(member);
emitter.cspPrecompiledFunctionFor(outputUnit).add(
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/declarations.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/declarations.dart
index 4c2a922..9edfdce 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/declarations.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/declarations.dart
@@ -57,6 +57,12 @@
// if this function is defined, the Dart [main] method will not be invoked
// directly. Instead, a closure that will invoke [main], and its arguments
// [args] is passed to [dartMainRunner].
+//
+// dartDeferredLibraryLoader(uri, successCallback, errorCallback):
+// if this function is defined, it will be called when a deferered library
+// is loaded. It should load and eval the javascript of `uri`, and call
+// successCallback. If it fails to do so, it should call errorCallback with
+// an error.
""";
// Compact field specifications. The format of the field specification is
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
index bbce58a..1ee6e57 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
@@ -95,8 +95,8 @@
cachedEmittedConstants = compiler.cacheStrategy.newSet(),
cachedClassBuilders = compiler.cacheStrategy.newMap(),
cachedElements = compiler.cacheStrategy.newSet() {
- constantEmitter =
- new ConstantEmitter(compiler, namer, makeConstantListTemplate);
+ constantEmitter = new ConstantEmitter(
+ compiler, namer, this.constantReference, makeConstantListTemplate);
containerBuilder.emitter = this;
classEmitter.emitter = this;
nsmEmitter.emitter = this;
@@ -128,12 +128,58 @@
}
@override
+ bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
+ if (constant.isFunction) return true; // Already emitted.
+ if (constant.isPrimitive) return true; // Inlined.
+ if (constant.isDummy) return true; // Inlined.
+ // The name is null when the constant is already a JS constant.
+ // TODO(floitsch): every constant should be registered, so that we can
+ // share the ones that take up too much space (like some strings).
+ if (namer.constantName(constant) == null) return true;
+ return false;
+ }
+
+ @override
+ int compareConstants(ConstantValue a, ConstantValue b) {
+ // Inlined constants don't affect the order and sometimes don't even have
+ // names.
+ int cmp1 = isConstantInlinedOrAlreadyEmitted(a) ? 0 : 1;
+ int cmp2 = isConstantInlinedOrAlreadyEmitted(b) ? 0 : 1;
+ if (cmp1 + cmp2 < 2) return cmp1 - cmp2;
+
+ // Emit constant interceptors first. Constant interceptors for primitives
+ // might be used by code that builds other constants. See Issue 18173.
+ if (a.isInterceptor != b.isInterceptor) {
+ return a.isInterceptor ? -1 : 1;
+ }
+
+ // Sorting by the long name clusters constants with the same constructor
+ // which compresses a tiny bit better.
+ int r = namer.constantLongName(a).compareTo(namer.constantLongName(b));
+ if (r != 0) return r;
+ // Resolve collisions in the long name by using the constant name (i.e. JS
+ // name) which is unique.
+ return namer.constantName(a).compareTo(namer.constantName(b));
+ }
+
+ @override
jsAst.Expression constantReference(ConstantValue value) {
- return constantEmitter.reference(value);
+ if (value.isFunction) {
+ FunctionConstantValue functionConstant = value;
+ return isolateStaticClosureAccess(functionConstant.element);
+ }
+
+ // We are only interested in the "isInlined" part, but it does not hurt to
+ // test for the other predicates.
+ if (isConstantInlinedOrAlreadyEmitted(value)) {
+ return constantEmitter.generate(value);
+ }
+ return js('#.#', [namer.globalObjectForConstant(value),
+ namer.constantName(value)]);
}
jsAst.Expression constantInitializerExpression(ConstantValue value) {
- return constantEmitter.initializationExpression(value);
+ return constantEmitter.generate(value);
}
String get name => 'CodeEmitter';
@@ -148,8 +194,7 @@
=> '${namer.isolateName}.${lazyInitializerProperty}';
String get initName => 'init';
- String get makeConstListProperty
- => namer.getMappedInstanceName('makeConstantList');
+ String get makeConstListProperty => namer.internalGlobal('makeConstantList');
/// The name of the property that contains all field names.
///
@@ -159,8 +204,9 @@
/// For deferred loading we communicate the initializers via this global var.
final String deferredInitializers = r"$dart_deferred_initializers";
- /// All the global state can be passed around with this variable.
- String get globalsHolder => namer.getMappedGlobalName("globalsHolder");
+ /// Contains the global state that is needed to initialize and load a
+ /// deferred library.
+ String get globalsHolder => namer.internalGlobal("globalsHolder");
@override
jsAst.Expression generateEmbeddedGlobalAccess(String global) {
@@ -173,7 +219,7 @@
}
jsAst.PropertyAccess globalPropertyAccess(Element element) {
- String name = namer.getNameX(element);
+ String name = namer.globalPropertyName(element);
jsAst.PropertyAccess pa = new jsAst.PropertyAccess.field(
new jsAst.VariableUse(namer.globalObjectFor(element)),
name);
@@ -183,13 +229,13 @@
@override
jsAst.Expression isolateLazyInitializerAccess(FieldElement element) {
return jsAst.js('#.#', [namer.globalObjectFor(element),
- namer.getLazyInitializerName(element)]);
+ namer.lazyInitializerName(element)]);
}
@override
jsAst.Expression isolateStaticClosureAccess(FunctionElement element) {
return jsAst.js('#.#()',
- [namer.globalObjectFor(element), namer.getStaticClosureName(element)]);
+ [namer.globalObjectFor(element), namer.staticClosureName(element)]);
}
@override
@@ -456,7 +502,7 @@
return js(r'var inheritFrom = #', [result]);
}
- jsAst.Statement buildFinishClass(bool hasNativeClasses) {
+ jsAst.Statement buildFinishClass(bool needsNativeSupport) {
String specProperty = '"${namer.nativeSpecProperty}"'; // "%"
jsAst.Expression finishedClassesAccess =
@@ -524,13 +570,13 @@
var constructor = allClasses[cls];
var prototype = inheritFrom(constructor, superConstructor);
- if (#hasNativeClasses)
+ if (#needsNativeSupport)
if (Object.prototype.hasOwnProperty.call(prototype, $specProperty))
#nativeInfoHandler
}
}''', {'finishedClassesAccess': finishedClassesAccess,
'needsMixinSupport': needsMixinSupport,
- 'hasNativeClasses': hasNativeClasses,
+ 'needsNativeSupport': needsNativeSupport,
'nativeInfoHandler': nativeInfoHandler});
}
@@ -672,16 +718,21 @@
return ':$names';
}
- jsAst.FunctionDeclaration buildCspPrecompiledFunctionFor(
+ jsAst.Statement buildCspPrecompiledFunctionFor(
OutputUnit outputUnit) {
// TODO(ahe): Compute a hash code.
+ // TODO(sigurdm): Avoid this precompiled function. Generated
+ // constructor-functions and getter/setter functions can be stored in the
+ // library-description table. Setting properties on these can be moved to
+ // finishClasses.
return js.statement('''
- function dart_precompiled(\$collectedClasses) {
+ # = function (\$collectedClasses) {
var \$desc;
#;
return #;
- }''',
- [cspPrecompiledFunctionFor(outputUnit),
+ };''',
+ [generateEmbeddedGlobalAccess(embeddedNames.PRECOMPILED),
+ cspPrecompiledFunctionFor(outputUnit),
new jsAst.ArrayInitializer(
cspPrecompiledConstructorNamesFor(outputUnit))]);
}
@@ -726,7 +777,7 @@
void emitInitialization(Element element, jsAst.Expression initialValue) {
jsAst.Expression init =
js('$isolateProperties.# = #',
- [namer.getNameOfGlobalField(element), initialValue]);
+ [namer.globalPropertyName(element), initialValue]);
output.addBuffer(jsAst.prettyPrint(init, compiler,
monitor: compiler.dumpInfoTask));
output.add('$N');
@@ -742,9 +793,7 @@
for (Element element in fields) {
compiler.withCurrentElement(element, () {
ConstantValue constant = handler.getInitialValueFor(element).value;
- emitInitialization(
- element,
- constantEmitter.referenceInInitializationContext(constant));
+ emitInitialization(element, constantReference(constant));
});
}
}
@@ -797,8 +846,8 @@
[js(lazyInitializerName),
js(isolateProperties),
js.string(element.name),
- js.string(namer.getNameX(element)),
- js.string(namer.getLazyInitializerName(element)),
+ js.string(namer.globalPropertyName(element)),
+ js.string(namer.lazyInitializerName(element)),
code]);
}
@@ -819,39 +868,6 @@
output.add('];$n');
}
- bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
- if (constant.isFunction) return true; // Already emitted.
- if (constant.isPrimitive) return true; // Inlined.
- if (constant.isDummy) return true; // Inlined.
- // The name is null when the constant is already a JS constant.
- // TODO(floitsch): every constant should be registered, so that we can
- // share the ones that take up too much space (like some strings).
- if (namer.constantName(constant) == null) return true;
- return false;
- }
-
- int compareConstants(ConstantValue a, ConstantValue b) {
- // Inlined constants don't affect the order and sometimes don't even have
- // names.
- int cmp1 = isConstantInlinedOrAlreadyEmitted(a) ? 0 : 1;
- int cmp2 = isConstantInlinedOrAlreadyEmitted(b) ? 0 : 1;
- if (cmp1 + cmp2 < 2) return cmp1 - cmp2;
-
- // Emit constant interceptors first. Constant interceptors for primitives
- // might be used by code that builds other constants. See Issue 18173.
- if (a.isInterceptor != b.isInterceptor) {
- return a.isInterceptor ? -1 : 1;
- }
-
- // Sorting by the long name clusters constants with the same constructor
- // which compresses a tiny bit better.
- int r = namer.constantLongName(a).compareTo(namer.constantLongName(b));
- if (r != 0) return r;
- // Resolve collisions in the long name by using the constant name (i.e. JS
- // name) which is unique.
- return namer.constantName(a).compareTo(namer.constantName(b));
- }
-
void emitCompileTimeConstants(CodeOutput output,
List<Constant> constants,
{bool isMainFragment}) {
@@ -1212,9 +1228,9 @@
// typedefs are only emitted with reflection, which requires lots of
// classes.
assert(compiler.objectClass != null);
- builder.superName = namer.getNameOfClass(compiler.objectClass);
+ builder.superName = namer.className(compiler.objectClass);
jsAst.Node declaration = builder.toObjectInitializer();
- String mangledName = namer.getNameX(typedef);
+ String mangledName = namer.globalPropertyName(typedef);
String reflectionName = getReflectionName(typedef, mangledName);
getElementDescriptor(library)
..addProperty(mangledName, declaration)
@@ -1418,11 +1434,11 @@
elementDescriptors.remove(library);
}
- bool hasNativeClasses = program.outputContainsNativeClasses;
+ bool needsNativeSupport = program.needsNativeSupport;
mainOutput
..addBuffer(
jsAst.prettyPrint(
- getReflectionDataParser(this, backend, hasNativeClasses),
+ getReflectionDataParser(this, backend, needsNativeSupport),
compiler))
..add(n);
@@ -1431,8 +1447,19 @@
// traces and profile entries.
mainOutput..add('var dart = [$n')
..addBuffer(libraryBuffer)
- ..add(']$N')
- ..add('$parseReflectionDataName(dart)$N');
+ ..add(']$N');
+ if (compiler.useContentSecurityPolicy) {
+ jsAst.Statement precompiledFunctionAst =
+ buildCspPrecompiledFunctionFor(mainOutputUnit);
+ mainOutput.addBuffer(
+ jsAst.prettyPrint(
+ precompiledFunctionAst,
+ compiler,
+ monitor: compiler.dumpInfoTask,
+ allowVariableMinification: false));
+ }
+
+ mainOutput.add('$parseReflectionDataName(dart)$N');
interceptorEmitter.emitGetInterceptorMethods(mainOutput);
interceptorEmitter.emitOneShotInterceptors(mainOutput);
@@ -1517,20 +1544,11 @@
}
}
- jsAst.FunctionDeclaration precompiledFunctionAst =
- buildCspPrecompiledFunctionFor(mainOutputUnit);
emitInitFunction(mainOutput);
emitMain(mainOutput, mainFragment.invokeMain);
+
mainOutput.add('})()\n');
- if (compiler.useContentSecurityPolicy) {
- mainOutput.addBuffer(
- jsAst.prettyPrint(
- precompiledFunctionAst,
- compiler,
- monitor: compiler.dumpInfoTask,
- allowVariableMinification: false));
- }
if (generateSourceMap) {
mainOutput.add(
@@ -1886,8 +1904,19 @@
// in stack traces and profile entries.
..add('var dart = [$n ')
..addBuffer(libraryDescriptorBuffer)
- ..add(']$N')
- ..add('$parseReflectionDataName(dart)$N');
+ ..add(']$N');
+
+ if (compiler.useContentSecurityPolicy) {
+ jsAst.Statement precompiledFunctionAst =
+ buildCspPrecompiledFunctionFor(outputUnit);
+
+ output.addBuffer(
+ jsAst.prettyPrint(
+ precompiledFunctionAst, compiler,
+ monitor: compiler.dumpInfoTask,
+ allowVariableMinification: false));
+ }
+ output.add('$parseReflectionDataName(dart)$N');
}
// Set the currentIsolate variable to the current isolate (which is
@@ -1904,19 +1933,8 @@
emitCompileTimeConstants(
output, fragment.constants, isMainFragment: false);
emitStaticNonFinalFieldInitializations(output, outputUnit);
+
output.add('}$N');
-
- if (compiler.useContentSecurityPolicy) {
- jsAst.FunctionDeclaration precompiledFunctionAst =
- buildCspPrecompiledFunctionFor(outputUnit);
-
- output.addBuffer(
- jsAst.prettyPrint(
- precompiledFunctionAst, compiler,
- monitor: compiler.dumpInfoTask,
- allowVariableMinification: false));
- }
-
// Make a unique hash of the code (before the sourcemaps are added)
// This will be used to retrieve the initializing function from the global
// variable.
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/nsm_emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/nsm_emitter.dart
index a3e5a38..5f955f3 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/nsm_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/nsm_emitter.dart
@@ -260,7 +260,7 @@
}
shortNames.splice.apply(shortNames, calculatedShortNames);
}
- }''', {'objectClass': js.string(namer.getNameOfClass(objectClass)),
+ }''', {'objectClass': js.string(namer.className(objectClass)),
'diffEncoding': js.string('$diffEncoding')}));
} else {
// No useDiffEncoding version.
@@ -269,7 +269,7 @@
statements.add(js.statement(
'var objectClassObject = processedClasses.collected[#objectClass],'
' shortNames = #diffEncoding.split(",")',
- {'objectClass': js.string(namer.getNameOfClass(objectClass)),
+ {'objectClass': js.string(namer.className(objectClass)),
'diffEncoding': js.string('$diffEncoding')}));
if (!minify) {
statements.add(js.statement('var longNames = #longs.split(",")',
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/reflection_data_parser.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/reflection_data_parser.dart
index c595178..fc014bc 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/reflection_data_parser.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/reflection_data_parser.dart
@@ -19,7 +19,7 @@
jsAst.Expression getReflectionDataParser(OldEmitter oldEmitter,
JavaScriptBackend backend,
- bool hasNativeClasses) {
+ bool needsNativeSupport) {
Namer namer = backend.namer;
Compiler compiler = backend.compiler;
CodeEmitterTask emitter = backend.emitter;
@@ -375,7 +375,7 @@
var allClasses = #allClasses;
if (#inCspMode) {
- var constructors = dart_precompiled(processedClasses.collected);
+ var constructors = #precompiled(processedClasses.collected);
}
if (#notInCspMode) {
@@ -415,10 +415,12 @@
}''', {'allClasses': allClassesAccess,
'debugFastObjects': DEBUG_FAST_OBJECTS,
'isTreeShakingDisabled': backend.isTreeShakingDisabled,
- 'finishClassFunction': oldEmitter.buildFinishClass(hasNativeClasses),
+ 'finishClassFunction': oldEmitter.buildFinishClass(needsNativeSupport),
'trivialNsmHandlers': oldEmitter.buildTrivialNsmHandlers(),
'inCspMode': compiler.useContentSecurityPolicy,
- 'notInCspMode': !compiler.useContentSecurityPolicy});
+ 'notInCspMode': !compiler.useContentSecurityPolicy,
+ 'precompiled': oldEmitter
+ .generateEmbeddedGlobalAccess(embeddedNames.PRECOMPILED)});
List<jsAst.Statement> incrementalSupport = <jsAst.Statement>[];
if (compiler.hasIncrementalSupport) {
diff --git a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
index 3649219..9009784 100644
--- a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
@@ -59,7 +59,7 @@
// If the method is intercepted, we need to also pass the actual receiver.
int extraArgumentCount = isInterceptedMethod ? 1 : 0;
// Use '$receiver' to avoid clashes with other parameter names. Using
- // '$receiver' works because [:namer.safeName:] used for getting parameter
+ // '$receiver' works because namer.safeVariableName used for getting parameter
// names never returns a name beginning with a single '$'.
String receiverArgumentName = r'$receiver';
@@ -84,7 +84,7 @@
int parameterIndex = 0;
parameters.orderedForEachParameter((ParameterElement element) {
- String jsName = backend.namer.safeName(element.name);
+ String jsName = backend.namer.safeVariableName(element.name);
assert(jsName != receiverArgumentName);
if (count < optionalParameterStart) {
parametersBuffer[count] = new jsAst.Parameter(jsName);
@@ -126,7 +126,7 @@
} else if (member.isInstanceMember) {
if (needsSuperGetter(member)) {
ClassElement superClass = member.enclosingClass;
- String methodName = namer.getNameOfInstanceMember(member);
+ String methodName = namer.instanceMethodName(member);
// When redirecting, we must ensure that we don't end up in a subclass.
// We thus can't just invoke `this.foo$1.call(filledInArguments)`.
// Instead we need to call the statically resolved target.
@@ -140,7 +140,7 @@
} else {
body = js.statement(
'return this.#(#);',
- [namer.getNameOfInstanceMember(member), argumentsBuffer]);
+ [namer.instanceMethodName(member), argumentsBuffer]);
}
} else {
body = js.statement('return #(#)',
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder.dart
index 2d22ead..02961bb 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder.dart
@@ -117,18 +117,20 @@
_markEagerClasses();
- bool containsNativeClasses =
- nativeClasses.length != _unneededNativeClasses.length;
-
List<Holder> holders = _registry.holders.toList(growable: false);
+ bool needsNativeSupport = _compiler.enqueuer.codegen.nativeEnqueuer
+ .hasInstantiatedNativeClasses();
+
+ assert(!needsNativeSupport || nativeClasses.isNotEmpty);
+
return new Program(
fragments,
holders,
_buildLoadMap(),
_buildTypeToInterceptorMap(),
_task.metadataCollector,
- outputContainsNativeClasses: containsNativeClasses,
+ needsNativeSupport: needsNativeSupport,
outputContainsConstantList: _task.outputContainsConstantList,
hasIsolateSupport: _compiler.hasIsolateSupport);
}
@@ -216,7 +218,7 @@
// a static field.
_registry.registerHolder(namer.globalObjectForConstant(initialValue));
js.Expression code = _task.emitter.constantReference(initialValue);
- String name = namer.getNameOfGlobalField(element);
+ String name = namer.globalPropertyName(element);
bool isFinal = false;
bool isLazy = false;
@@ -252,7 +254,7 @@
// before code generation.
if (code == null) return null;
- String name = namer.getNameOfGlobalField(element);
+ String name = namer.globalPropertyName(element);
bool isFinal = element.isFinal;
bool isLazy = true;
// TODO(floitsch): we shouldn't update the registry in the middle of
@@ -308,7 +310,7 @@
assert(_compiler.hasIncrementalSupport);
List<Field> instanceFields = _buildFields(element, false);
- String name = namer.getNameOfClass(element);
+ String name = namer.className(element);
return new Class(
element, name, null, [], instanceFields, [], [], [], [], [], null,
@@ -356,7 +358,7 @@
runtimeTypeGenerator.generateTypeVariableReaderStubs(element);
List<StubMethod> noSuchMethodStubs = <StubMethod>[];
- if (element == _compiler.objectClass) {
+ if (_compiler.enabledNoSuchMethod && element == _compiler.objectClass) {
Map<String, Selector> selectors =
classStubGenerator.computeSelectorsForNsmHandlers();
selectors.forEach((String name, Selector selector) {
@@ -369,8 +371,7 @@
if (element == backend.closureClass) {
// We add a special getter here to allow for tearing off a closure from
// itself.
- String name = namer.getterNameFromAccessorName(
- namer.getMappedInstanceName(Compiler.CALL_OPERATOR_NAME));
+ String name = namer.getterForPublicMember(Compiler.CALL_OPERATOR_NAME);
js.Fun function = js.js('function() { return this; }');
callStubs.add(_buildStubMethod(name, function));
}
@@ -398,7 +399,7 @@
isChecks.add(_buildStubMethod(name, code));
});
- String name = namer.getNameOfClass(element);
+ String name = namer.className(element);
String holderName = namer.globalObjectFor(element);
// TODO(floitsch): we shouldn't update the registry in the middle of
// building a class.
@@ -485,7 +486,7 @@
}
DartMethod _buildMethod(FunctionElement element) {
- String name = namer.getNameOfInstanceMember(element);
+ String name = namer.methodPropertyName(element);
js.Expression code = backend.generatedCode[element];
// TODO(kasperl): Figure out under which conditions code is null.
@@ -501,7 +502,7 @@
bool canBeApplied = _methodCanBeApplied(element);
String aliasName = backend.isAliasedSuperMember(element)
- ? namer.getNameOfAliasedSuperMember(element)
+ ? namer.aliasedSuperMemberPropertyName(element)
: null;
if (isNotApplyTarget) {
@@ -516,7 +517,7 @@
(canBeReflected && !element.isOperator);
assert(canTearOff ||
!universe.methodsNeedingSuperGetter.contains(element));
- tearOffName = namer.getterName(element);
+ tearOffName = namer.getterForElement(element);
}
}
@@ -692,7 +693,7 @@
}
StaticDartMethod _buildStaticMethod(FunctionElement element) {
- String name = namer.getNameOfMember(element);
+ String name = namer.methodPropertyName(element);
String holder = namer.globalObjectFor(element);
js.Expression code = backend.generatedCode[element];
@@ -705,7 +706,7 @@
universe.staticFunctionsNeedingGetter.contains(element));
String tearOffName =
- needsTearOff ? namer.getStaticClosureName(element) : null;
+ needsTearOff ? namer.staticClosureName(element) : null;
String callName = null;
diff --git a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
index 9abed6d..6f294f6 100644
--- a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
@@ -284,7 +284,7 @@
StubMethod _generateTypeVariableReader(ClassElement cls,
TypeVariableElement element) {
- String name = namer.readTypeVariableName(element);
+ String name = namer.nameForReadTypeVariable(element);
int index = RuntimeTypes.getTypeVariableIndex(element);
jsAst.Expression computeTypeVariable;
diff --git a/pkg/compiler/lib/src/mirrors/dart2js_type_mirrors.dart b/pkg/compiler/lib/src/mirrors/dart2js_type_mirrors.dart
index e7abe4c..a5e6e94 100644
--- a/pkg/compiler/lib/src/mirrors/dart2js_type_mirrors.dart
+++ b/pkg/compiler/lib/src/mirrors/dart2js_type_mirrors.dart
@@ -236,6 +236,8 @@
bool get isAbstract => _element.isAbstract;
+ bool get isEnum => throw new UnimplementedError();
+
bool operator ==(other) {
if (identical(this, other)) {
return true;
@@ -304,6 +306,8 @@
bool get isAbstract => false;
+ bool get isEnum => throw new UnimplementedError();
+
String toString() => 'Mirror on typedef $_type';
}
@@ -410,6 +414,8 @@
bool get isAbstract => false;
+ bool get isEnum => throw new UnimplementedError();
+
List<TypeVariableMirror> get typeVariables =>
originalDeclaration.typeVariables;
diff --git a/pkg/compiler/lib/src/native/enqueue.dart b/pkg/compiler/lib/src/native/enqueue.dart
index 131ba18..a7c7af9 100644
--- a/pkg/compiler/lib/src/native/enqueue.dart
+++ b/pkg/compiler/lib/src/native/enqueue.dart
@@ -65,6 +65,7 @@
abstract class NativeEnqueuerBase implements NativeEnqueuer {
+ static final RegExp _identifier = new RegExp(r'^[a-zA-Z_$][a-zA-Z0-9_$]*$');
/**
* The set of all native classes. Each native class is in [nativeClasses] and
@@ -399,7 +400,11 @@
handleMethodAnnotations(Element method) {
if (isNativeMethod(method)) {
- setNativeName(method);
+ if (method.isStatic) {
+ setNativeNameForStaticMethod(method);
+ } else {
+ setNativeName(method);
+ }
}
}
@@ -411,6 +416,32 @@
element.setNative(name);
}
+ /// Sets the native name of the static native method [element], using the
+ /// following rules:
+ /// 1. If [element] has a @JSName annotation that is an identifier, qualify
+ /// that identifier to the @Native name of the enclosing class
+ /// 2. If [element] has a @JSName annotation that is not an identifier,
+ /// use the declared @JSName as the expression
+ /// 3. If [element] does not have a @JSName annotation, qualify the name of
+ /// the method with the @Native name of the enclosing class.
+ void setNativeNameForStaticMethod(Element element) {
+ String name = findJsNameFromAnnotation(element);
+ if (name == null) name = element.name;
+ if (isIdentifier(name)) {
+ List<String> nativeNames = nativeTagsOfClassRaw(element.enclosingClass);
+ if (nativeNames.length != 1) {
+ compiler.internalError(element,
+ 'Unable to determine a native name for the enclosing class, '
+ 'options: $nativeNames');
+ }
+ element.setNative('${nativeNames[0]}.$name');
+ } else {
+ element.setNative(name);
+ }
+ }
+
+ bool isIdentifier(String s) => _identifier.hasMatch(s);
+
bool isNativeMethod(FunctionElementX element) {
if (!element.library.canUseNative) return false;
// Native method?
diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
index a4ddda5..40ed27d 100644
--- a/pkg/compiler/lib/src/resolution/members.dart
+++ b/pkg/compiler/lib/src/resolution/members.dart
@@ -520,13 +520,24 @@
}
if (functionExpression.body.asReturn() != null &&
- element.asyncMarker.isYielding) {
+ element.asyncMarker.isYielding) {
compiler.reportError(asyncModifier,
MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY,
{'modifier': element.asyncMarker});
}
}
registry.registerAsyncMarker(element);
+ switch (element.asyncMarker) {
+ case AsyncMarker.ASYNC:
+ compiler.futureClass.ensureResolved(compiler);
+ break;
+ case AsyncMarker.ASYNC_STAR:
+ compiler.streamClass.ensureResolved(compiler);
+ break;
+ case AsyncMarker.SYNC_STAR:
+ compiler.iterableClass.ensureResolved(compiler);
+ break;
+ }
}
}
@@ -3132,13 +3143,19 @@
visitReturn(Return node) {
Node expression = node.expression;
- if (expression != null &&
- enclosingElement.isGenerativeConstructor) {
- // It is a compile-time error if a return statement of the form
- // `return e;` appears in a generative constructor. (Dart Language
- // Specification 13.12.)
- compiler.reportError(expression,
- MessageKind.CANNOT_RETURN_FROM_CONSTRUCTOR);
+ if (expression != null) {
+ if (enclosingElement.isGenerativeConstructor) {
+ // It is a compile-time error if a return statement of the form
+ // `return e;` appears in a generative constructor. (Dart Language
+ // Specification 13.12.)
+ compiler.reportError(expression,
+ MessageKind.CANNOT_RETURN_FROM_CONSTRUCTOR);
+ } else if (!node.isArrowBody && currentAsyncMarker.isYielding) {
+ compiler.reportError(
+ node,
+ MessageKind.RETURN_IN_GENERATOR,
+ {'modifier': currentAsyncMarker});
+ }
}
visit(node.expression);
}
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index c1d5d55..2db55a0 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -24,7 +24,7 @@
if (element is FunctionElement) {
JavaScriptBackend backend = builder.backend;
- AsyncRewriter rewriter = null;
+ AsyncRewriterBase rewriter = null;
if (element.asyncMarker == AsyncMarker.ASYNC) {
rewriter = new AsyncRewriter(
@@ -36,7 +36,7 @@
backend.getCompleterConstructor()),
safeVariableName: backend.namer.safeVariableName);
} else if (element.asyncMarker == AsyncMarker.SYNC_STAR) {
- rewriter = new AsyncRewriter(
+ rewriter = new SyncStarRewriter(
backend.compiler,
backend.compiler.currentElement,
endOfIteration: backend.emitter.staticFunctionAccess(
@@ -50,10 +50,10 @@
safeVariableName: backend.namer.safeVariableName);
}
else if (element.asyncMarker == AsyncMarker.ASYNC_STAR) {
- rewriter = new AsyncRewriter(
+ rewriter = new AsyncStarRewriter(
backend.compiler,
backend.compiler.currentElement,
- streamHelper: backend.emitter.staticFunctionAccess(
+ asyncStarHelper: backend.emitter.staticFunctionAccess(
backend.getAsyncStarHelper()),
streamOfController: backend.emitter.staticFunctionAccess(
backend.getStreamOfController()),
@@ -2228,6 +2228,15 @@
}
});
+ // If there are locals that escape (ie mutated in closures), we
+ // pass the box to the constructor.
+ // The box must be passed before any type variable.
+ ClosureScope scopeData = parameterClosureData.capturingScopes[node];
+ if (scopeData != null) {
+ bodyCallInputs.add(localsHandler.readLocal(scopeData.boxElement));
+ }
+
+ // Type variables arguments must come after the box (if there is one).
ClassElement currentClass = constructor.enclosingClass;
if (backend.classNeedsRti(currentClass)) {
// If [currentClass] needs RTI, we add the type variables as
@@ -2240,13 +2249,6 @@
});
}
- // If there are locals that escape (ie mutated in closures), we
- // pass the box to the constructor.
- ClosureScope scopeData = parameterClosureData.capturingScopes[node];
- if (scopeData != null) {
- bodyCallInputs.add(localsHandler.readLocal(scopeData.boxElement));
- }
-
if (!isNativeUpgradeFactory && // TODO(13836): Fix inlining.
tryInlineMethod(body, null, bodyCallInputs, function)) {
pop();
@@ -3711,12 +3713,17 @@
}
String name = string.dartString.slowToString();
bool value = false;
- if (name == 'MUST_RETAIN_METADATA') {
- value = backend.mustRetainMetadata;
- } else {
- compiler.reportError(
- node, MessageKind.GENERIC,
- {'text': 'Error: Unknown internal flag "$name".'});
+ switch (name) {
+ case 'MUST_RETAIN_METADATA':
+ value = backend.mustRetainMetadata;
+ break;
+ case 'USE_CONTENT_SECURITY_POLICY':
+ value = compiler.useContentSecurityPolicy;
+ break;
+ default:
+ compiler.reportError(
+ node, MessageKind.GENERIC,
+ {'text': 'Error: Unknown internal flag "$name".'});
}
stack.add(graph.addConstantBool(value, compiler));
}
@@ -3741,16 +3748,20 @@
}
return;
}
- ast.LiteralString string = argument.asLiteralString();
- if (string == null) {
+ Element element = elements[argument];
+ if (element == null ||
+ element is! FieldElement ||
+ element.enclosingClass != backend.jsGetNameEnum) {
compiler.reportError(
argument, MessageKind.GENERIC,
- {'text': 'Error: Expected a literal string.'});
+ {'text': 'Error: Expected a JsGetName enum value.'});
}
+ EnumClassElement enumClass = element.enclosingClass;
+ int index = enumClass.enumValues.indexOf(element);
stack.add(
addConstantString(
backend.namer.getNameForJsGetName(
- argument, string.dartString.slowToString())));
+ argument, JsGetName.values[index])));
}
void handleForeignJsEmbeddedGlobal(ast.Send node) {
@@ -3934,15 +3945,15 @@
stack.add(addConstantString(backend.namer.operatorIsPrefix));
} else if (name == 'JS_OBJECT_CLASS_NAME') {
// TODO(floitsch): this should be a JS_NAME.
- String name = backend.namer.getRuntimeTypeName(compiler.objectClass);
+ String name = backend.namer.runtimeTypeName(compiler.objectClass);
stack.add(addConstantString(name));
} else if (name == 'JS_NULL_CLASS_NAME') {
// TODO(floitsch): this should be a JS_NAME.
- String name = backend.namer.getRuntimeTypeName(compiler.nullClass);
+ String name = backend.namer.runtimeTypeName(compiler.nullClass);
stack.add(addConstantString(name));
} else if (name == 'JS_FUNCTION_CLASS_NAME') {
// TODO(floitsch): this should be a JS_NAME.
- String name = backend.namer.getRuntimeTypeName(compiler.functionClass);
+ String name = backend.namer.runtimeTypeName(compiler.functionClass);
stack.add(addConstantString(name));
} else if (name == 'JS_OPERATOR_AS_PREFIX') {
// TODO(floitsch): this should be a JS_NAME.
@@ -4139,7 +4150,7 @@
// TODO(ahe): Creating a string here is unfortunate. It is slow (due to
// string concatenation in the implementation), and may prevent
// segmentation of '$'.
- String substitutionNameString = backend.namer.getNameForRti(cls);
+ String substitutionNameString = backend.namer.runtimeTypeName(cls);
HInstruction substitutionName = graph.addConstantString(
new ast.LiteralDartString(substitutionNameString), compiler);
pushInvokeStatic(null,
@@ -6013,7 +6024,16 @@
/// Calls [buildTry] inside a synthetic try block with [buildFinally] in the
/// finally block.
+ ///
+ /// Note that to get the right locals behavior, the code visited by [buildTry]
+ /// and [buildFinally] must have been analyzed as if inside a try-statement by
+ /// [ClosureTranslator].
void buildProtectedByFinally(void buildTry(), void buildFinally()) {
+ // Save the current locals. The finally block must not reuse the existing
+ // locals handler. None of the variables that have been defined in the
+ // body-block will be used, but for loops we will add (unnecessary) phis
+ // that will reference the body variables. This makes it look as if the
+ // variables were used in a non-dominated block.
HBasicBlock enterBlock = openNewBlock();
HTry tryInstruction = new HTry();
close(tryInstruction);
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 21387ea..752df17 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -1473,8 +1473,7 @@
void visitInterceptor(HInterceptor node) {
registry.registerSpecializedGetInterceptor(node.interceptedClasses);
- String name = backend.namer.getInterceptorName(
- backend.getInterceptorMethod, node.interceptedClasses);
+ String name = backend.namer.nameForGetInterceptor(node.interceptedClasses);
var isolate = new js.VariableUse(
backend.namer.globalObjectFor(backend.interceptorsLibrary));
use(node.receiver);
@@ -1520,7 +1519,7 @@
void visitInvokeConstructorBody(HInvokeConstructorBody node) {
use(node.inputs[0]);
js.Expression object = pop();
- String methodName = backend.namer.getNameOfInstanceMember(node.element);
+ String methodName = backend.namer.instanceMethodName(node.element);
List<js.Expression> arguments = visitArguments(node.inputs);
push(js.propertyCall(object, methodName, arguments), node);
registry.registerStaticUse(node.element);
@@ -1660,7 +1659,7 @@
methodName = backend.namer.invocationName(selector);
} else {
assert(invariant(node, compiler.hasIncrementalSupport));
- methodName = backend.namer.getNameOfInstanceMember(superMethod);
+ methodName = backend.namer.instanceMethodName(superMethod);
}
push(js.js('#.#.call(#)',
[backend.emitter.prototypeAccess(superClass,
@@ -1671,7 +1670,7 @@
use(node.receiver);
push(
js.js('#.#(#)', [
- pop(), backend.namer.getNameOfAliasedSuperMember(superMethod),
+ pop(), backend.namer.aliasedSuperMemberPropertyName(superMethod),
visitArguments(node.inputs, start: 1)]), // Skip receiver argument.
node);
}
@@ -2632,7 +2631,7 @@
} else {
backend.emitter.registerReadTypeVariable(element);
push(js.js('#.#()',
- [pop(), backend.namer.readTypeVariableName(element)]));
+ [pop(), backend.namer.nameForReadTypeVariable(element)]));
}
} else {
push(js.js('#(#)', [
diff --git a/pkg/compiler/lib/src/ssa/ssa.dart b/pkg/compiler/lib/src/ssa/ssa.dart
index 3e80b8e..1081923 100644
--- a/pkg/compiler/lib/src/ssa/ssa.dart
+++ b/pkg/compiler/lib/src/ssa/ssa.dart
@@ -32,6 +32,7 @@
import '../universe/universe.dart';
import '../util/util.dart';
import '../js/rewrite_async.dart';
+import 'package:_internal/compiler/js_lib/shared/embedded_names.dart';
part 'builder.dart';
part 'codegen.dart';
diff --git a/pkg/compiler/lib/src/ssa/ssa_tracer.dart b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
index 103ecae..ebac199 100644
--- a/pkg/compiler/lib/src/ssa/ssa_tracer.dart
+++ b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
@@ -289,7 +289,8 @@
String value = temporaryId(node.inputs[0]);
if (node.interceptedClasses != null) {
JavaScriptBackend backend = compiler.backend;
- String cls = backend.namer.getInterceptorSuffix(node.interceptedClasses);
+ String cls =
+ backend.namer.suffixForGetInterceptor(node.interceptedClasses);
return "Intercept ($cls): $value";
}
return "Intercept: $value";
diff --git a/pkg/compiler/lib/src/tree/nodes.dart b/pkg/compiler/lib/src/tree/nodes.dart
index 0b65913..2c22466 100644
--- a/pkg/compiler/lib/src/tree/nodes.dart
+++ b/pkg/compiler/lib/src/tree/nodes.dart
@@ -1066,6 +1066,9 @@
bool get hasExpression => expression != null;
+ /// `true` if this return is of the form `=> e;`.
+ bool get isArrowBody => beginToken.info == FUNCTION_INFO;
+
accept(Visitor visitor) => visitor.visitReturn(this);
visitChildren(Visitor visitor) {
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/copy_propagator.dart b/pkg/compiler/lib/src/tree_ir/optimization/copy_propagator.dart
index a2828b6..2f3761d 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/copy_propagator.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/copy_propagator.dart
@@ -14,7 +14,7 @@
/// After visitStatement returns, [move] maps a variable v to an
/// assignment A of form w := v, under the following conditions:
- /// - there are no uses of w before A
+ /// - there are no reads or writes of w before A
/// - A is the only use of v
Map<Variable, Assign> move = <Variable, Assign>{};
@@ -51,7 +51,7 @@
// BODY
// }
// Cannot declare function as foo(x,x)!
- node.parameters.forEach(visitVariable);
+ node.parameters.forEach(invalidateMovingAssignment);
// Now do the propagation.
for (int i = 0; i < node.parameters.length; i++) {
@@ -87,7 +87,7 @@
// BODY
// }
// Cannot declare function as foo(x,x)!
- node.parameters.forEach(visitVariable);
+ node.parameters.forEach(invalidateMovingAssignment);
// Now do the propagation.
for (int i = 0; i < node.parameters.length; i++) {
@@ -107,15 +107,20 @@
return node;
}
- void visitVariable(Variable variable) {
- // We have found a use of w.
- // Remove assignments of form w := v from the move maps.
- Assign movingAssignment = inverseMove.remove(variable);
+ /// Remove an assignment of form [w] := v from the move maps.
+ void invalidateMovingAssignment(Variable w) {
+ Assign movingAssignment = inverseMove.remove(w);
if (movingAssignment != null) {
- move.remove(movingAssignment.definition);
+ VariableUse def = movingAssignment.definition;
+ move.remove(def.variable);
}
}
+ visitVariableUse(VariableUse node) {
+ // We found a use of w; we can't propagate assignments across this use.
+ invalidateMovingAssignment(node.variable);
+ }
+
/**
* Called when a definition of [v] is encountered.
* Attempts to propagate the assignment through a moving assignment.
@@ -139,16 +144,13 @@
// Make w := w.
// We can't remove the statement from here because we don't have
// parent pointers. So just make it a no-op so it can be removed later.
- movingAssign.definition = w;
+ movingAssign.definition = new VariableUse(w);
// The intermediate variable 'v' should now be orphaned, so don't bother
// updating its read/write counters.
- // Due to the nop trick, the variable 'w' now has one additional read
- // and write.
- ++w.writeCount;
- ++w.readCount;
// Make w := EXPR
+ ++w.writeCount;
return w;
}
return v;
@@ -157,17 +159,21 @@
Statement visitAssign(Assign node) {
node.next = visitStatement(node.next);
node.variable = copyPropagateVariable(node.variable);
+
+ // If a moving assignment w := v exists later, and we assign to w here,
+ // the moving assignment is no longer a candidate for copy propagation.
+ invalidateMovingAssignment(node.variable);
+
visitExpression(node.definition);
- visitVariable(node.variable);
// If this is a moving assignment w := v, with this being the only use of v,
// try to propagate it backwards. Do not propagate assignments where w
// is from an outer function scope.
- if (node.definition is Variable) {
- Variable def = node.definition;
- if (def.readCount == 1 &&
+ if (node.definition is VariableUse) {
+ VariableUse definition = node.definition;
+ if (definition.variable.readCount == 1 &&
node.variable.host == currentElement) {
- move[node.definition] = node;
+ move[definition.variable] = node;
inverseMove[node.variable] = node;
}
}
@@ -210,6 +216,12 @@
throw "WhileCondition before LoopRewriter";
}
+ Statement visitTry(Try node) {
+ node.tryBody = visitBasicBlock(node.tryBody);
+ node.catchBody = visitBasicBlock(node.catchBody);
+ return node;
+ }
+
Statement visitFunctionDeclaration(FunctionDeclaration node) {
// Unlike var declarations, function declarations are not hoisted, so we
// can't do copy propagation of the variable.
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart b/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart
index abf3627..a34e87f 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart
@@ -171,14 +171,19 @@
return node;
}
+ Statement visitTry(Try node) {
+ node.tryBody = visitStatement(node.tryBody);
+ node.catchBody = visitStatement(node.catchBody);
+ return node;
+ }
+
Statement visitExpressionStatement(ExpressionStatement node) {
node.expression = visitExpression(node.expression);
node.next = visitStatement(node.next);
return node;
}
-
- Expression visitVariable(Variable node) {
+ Expression visitVariableUse(VariableUse node) {
return node;
}
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart b/pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart
index c461157..0913a11 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart
@@ -43,7 +43,8 @@
Statement visitAssign(Assign node) {
// Clean up redundant assignments left behind in the previous phase.
- if (node.variable == node.definition) {
+ Expression def = node.definition;
+ if (def is VariableUse && node.variable == def.variable) {
--node.variable.readCount;
--node.variable.writeCount;
return visitStatement(node.next);
@@ -118,6 +119,12 @@
return node;
}
+ Statement visitTry(Try node) {
+ node.tryBody = visitStatement(node.tryBody);
+ node.catchBody = visitStatement(node.catchBody);
+ return node;
+ }
+
Statement visitFunctionDeclaration(FunctionDeclaration node) {
new LoopRewriter().rewrite(node.definition);
node.next = visitStatement(node.next);
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart b/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart
index 768ecae..61f0a31 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart
@@ -37,8 +37,8 @@
* environment and the definition is recursively processed (in the
* new environment at the use site) before being propagated.
*
- * See [visitVariable] for the implementation of the heuristic for propagating
- * a definition.
+ * See [visitVariableUse] for the implementation of the heuristic for
+ * propagating a definition.
*
*
* IF-TO-CONDITIONAL CONVERSION:
@@ -111,7 +111,15 @@
StatementRewriter.nested(StatementRewriter parent)
: constantEnvironment = parent.constantEnvironment;
- /// Returns the redirect target of [label] or [label] itself if it should not
+ /// A set of labels that can be safely inlined at their use.
+ ///
+ /// The successor statements for labeled statements that have only one break
+ /// from them are normally rewritten inline at the site of the break. This
+ /// is not safe if the code would be moved inside the scope of an exception
+ /// handler (i.e., if the code would be moved into a try from outside it).
+ Set<Label> safeForInlining = new Set<Label>();
+
+ /// Returns the redirect target of [jump] or [jump] itself if it should not
/// be redirected.
Jump redirect(Jump jump) {
Jump newJump = labelRedirects[jump.target];
@@ -157,9 +165,10 @@
Expression visitExpression(Expression e) => e.processed ? e : e.accept(this);
- Expression visitVariable(Variable node) {
+ @override
+ Expression visitVariableUse(VariableUse node) {
// Propagate constant to use site.
- Expression constant = constantEnvironment[node];
+ Expression constant = constantEnvironment[node.variable];
if (constant != null) return constant;
// Propagate a variable's definition to its use site if:
@@ -168,10 +177,11 @@
// 2. It was the most recent expression evaluated so that we do not
// reorder expressions with side effects.
if (!environment.isEmpty &&
- environment.last.variable == node &&
+ environment.last.variable == node.variable &&
environment.last.hasExactlyOneUse) {
return visitExpression(environment.removeLast().definition);
}
+
// If the definition could not be propagated, leave the variable use.
return node;
}
@@ -185,7 +195,7 @@
return exp is Constant ||
exp is This ||
exp is ReifyTypeVar ||
- exp is Variable && constantEnvironment.containsKey(exp);
+ exp is VariableUse && constantEnvironment.containsKey(exp.variable);
}
Statement visitAssign(Assign node) {
@@ -310,7 +320,9 @@
// Note that useCount was accounted for at visitLabeledStatement.
// Note redirect may return either a Break or Continue statement.
Jump jump = redirect(node);
- if (jump is Break && jump.target.useCount == 1) {
+ if (jump is Break &&
+ jump.target.useCount == 1 &&
+ safeForInlining.contains(jump.target)) {
--jump.target.useCount;
return visitStatement(jump.target.binding.next);
}
@@ -337,7 +349,9 @@
return result;
}
+ safeForInlining.add(node.label);
node.body = visitStatement(node.body);
+ safeForInlining.remove(node.label);
if (node.label.useCount == 0) {
// Eliminate the label if next was inlined at a break
@@ -397,6 +411,15 @@
throw "Unexpected WhileCondition in StatementRewriter";
}
+ Statement visitTry(Try node) {
+ Set<Label> saved = safeForInlining;
+ safeForInlining = new Set<Label>();
+ node.tryBody = visitStatement(node.tryBody);
+ safeForInlining = saved;
+ node.catchBody = visitStatement(node.catchBody);
+ return node;
+ }
+
Expression visitConstant(Constant node) {
return node;
}
@@ -537,8 +560,8 @@
/// If non-null is returned, the caller must discard [e1] and [e2] and use
/// the resulting expression in the tree.
static Expression combineExpressions(Expression e1, Expression e2) {
- if (e1 is Variable && e1 == e2) {
- --e1.readCount; // Two references become one.
+ if (e1 is VariableUse && e2 is VariableUse && e1.variable == e2.variable) {
+ --e1.variable.readCount; // Two references become one.
return e1;
}
if (e1 is Constant && e2 is Constant && e1.value == e2.value) {
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
index 3181b59..78ce88c 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
@@ -57,6 +57,15 @@
// is the mapping from continuations to labels.
final Map<cps_ir.Continuation, Label> labels = <cps_ir.Continuation, Label>{};
+ /// A stack of singly-used labels that can be safely inlined at their use
+ /// site.
+ ///
+ /// Code for continuations with exactly one use is inlined at the use site.
+ /// This is not safe if the code is moved inside the scope of an exception
+ /// handler (i.e., into a try block). We keep a stack of singly-referenced
+ /// continuations that are in scope without crossing a binding for a handler.
+ List<cps_ir.Continuation> safeForInlining = <cps_ir.Continuation>[];
+
ExecutableElement currentElement;
cps_ir.Continuation returnContinuation;
@@ -82,14 +91,17 @@
return variable;
}
- Variable getMutableVariableReference(
- cps_ir.Reference<cps_ir.MutableVariable> reference) {
- if (reference.definition.host != currentElement) {
- return parent.getMutableVariableReference(reference);
+ Variable getMutableVariable(cps_ir.MutableVariable mutableVariable) {
+ if (mutableVariable.host != currentElement) {
+ return parent.getMutableVariable(mutableVariable);
}
- Variable variable = local2mutable[reference.definition];
- ++variable.readCount;
- return variable;
+ return local2mutable[mutableVariable];
+ }
+
+ VariableUse getMutableVariableUse(
+ cps_ir.Reference<cps_ir.MutableVariable> reference) {
+ Variable variable = getMutableVariable(reference.definition);
+ return new VariableUse(variable);
}
/// Obtains the variable representing the given primitive. Returns null for
@@ -110,15 +122,14 @@
/// referred to by [reference].
/// This increments the reference count for the given variable, so the
/// returned expression must be used in the tree.
- Expression getVariableReference(cps_ir.Reference reference) {
+ VariableUse getVariableUse(cps_ir.Reference<cps_ir.Primitive> reference) {
Variable variable = getVariable(reference.definition);
if (variable == null) {
internalError(
CURRENT_ELEMENT_SPANNABLE,
"Reference to ${reference.definition} has no register");
}
- ++variable.readCount;
- return variable;
+ return new VariableUse(variable);
}
ExecutableDefinition build(cps_ir.ExecutableDefinition node) {
@@ -159,14 +170,8 @@
FunctionDefinition buildFunction(cps_ir.FunctionDefinition node) {
currentElement = node.element;
- List<Variable> parameters = <Variable>[];
- for (cps_ir.Definition p in node.parameters) {
- Variable parameter = addFunctionParameter(p);
- assert(parameter != null);
- ++parameter.writeCount; // Being a parameter counts as a write.
- parameters.add(parameter);
- }
-
+ List<Variable> parameters =
+ node.parameters.map(addFunctionParameter).toList();
Statement body;
if (!node.isAbstract) {
returnContinuation = node.body.returnContinuation;
@@ -180,13 +185,8 @@
ConstructorDefinition buildConstructor(cps_ir.ConstructorDefinition node) {
currentElement = node.element;
- List<Variable> parameters = <Variable>[];
- for (cps_ir.Definition p in node.parameters) {
- Variable parameter = addFunctionParameter(p);
- assert(parameter != null);
- ++parameter.writeCount; // Being a parameter counts as a write.
- parameters.add(parameter);
- }
+ List<Variable> parameters =
+ node.parameters.map(addFunctionParameter).toList();
List<Initializer> initializers;
Statement body;
if (!node.isAbstract) {
@@ -210,7 +210,7 @@
/// on the list during the rewrite phases.
List<Expression> translateArguments(List<cps_ir.Reference> args) {
return new List<Expression>.generate(args.length,
- (int index) => getVariableReference(args[index]),
+ (int index) => getVariableUse(args[index]),
growable: false);
}
@@ -271,12 +271,10 @@
Statement first, current;
void addAssignment(Variable dst, Variable src) {
- ++src.readCount;
- // `dst.writeCount` will be updated by the Assign constructor.
if (first == null) {
- first = current = new Assign(dst, src, null);
+ first = current = new Assign(dst, new VariableUse(src), null);
} else {
- current = current.next = new Assign(dst, src, null);
+ current = current.next = new Assign(dst, new VariableUse(src), null);
}
}
@@ -372,12 +370,16 @@
Statement visitLetCont(cps_ir.LetCont node) {
// Introduce labels for continuations that need them.
+ int safeForInliningLengthOnEntry = safeForInlining.length;
for (cps_ir.Continuation continuation in node.continuations) {
if (continuation.hasMultipleUses) {
labels[continuation] = new Label();
+ } else {
+ safeForInlining.add(continuation);
}
}
Statement body = visit(node.body);
+ safeForInlining.length = safeForInliningLengthOnEntry;
// Continuations are bound at the same level, but they have to be
// translated as if nested. This is because the body can invoke any
// of them from anywhere, so it must be nested inside all of them.
@@ -401,22 +403,34 @@
return current;
}
+ Statement visitLetHandler(cps_ir.LetHandler node) {
+ List<cps_ir.Continuation> saved = safeForInlining;
+ safeForInlining = <cps_ir.Continuation>[];
+ Statement tryBody = visit(node.body);
+ safeForInlining = saved;
+ List<Variable> catchParameters =
+ node.handler.parameters.map(getVariable).toList();
+ Statement catchBody = visit(node.handler.body);
+ return new Try(tryBody, catchParameters, catchBody);
+ }
+
Statement visitInvokeStatic(cps_ir.InvokeStatic node) {
// Calls are translated to direct style.
List<Expression> arguments = translateArguments(node.arguments);
- Expression invoke = new InvokeStatic(node.target, node.selector, arguments);
+ Expression invoke = new InvokeStatic(node.target, node.selector, arguments,
+ sourceInformation: node.sourceInformation);
return continueWithExpression(node.continuation, invoke);
}
Statement visitInvokeMethod(cps_ir.InvokeMethod node) {
- Expression invoke = new InvokeMethod(getVariableReference(node.receiver),
+ Expression invoke = new InvokeMethod(getVariableUse(node.receiver),
node.selector,
translateArguments(node.arguments));
return continueWithExpression(node.continuation, invoke);
}
Statement visitInvokeMethodDirectly(cps_ir.InvokeMethodDirectly node) {
- Expression receiver = getVariableReference(node.receiver);
+ Expression receiver = getVariableUse(node.receiver);
List<Expression> arguments = translateArguments(node.arguments);
Expression invoke = new InvokeMethodDirectly(receiver, node.target,
node.selector, arguments);
@@ -445,17 +459,17 @@
Statement visitLetMutable(cps_ir.LetMutable node) {
Variable variable = addMutableVariable(node.variable);
- Expression value = getVariableReference(node.value);
+ Expression value = getVariableUse(node.value);
return new Assign(variable, value, visit(node.body), isDeclaration: true);
}
Expression visitGetMutableVariable(cps_ir.GetMutableVariable node) {
- return getMutableVariableReference(node.variable);
+ return getMutableVariableUse(node.variable);
}
Statement visitSetMutableVariable(cps_ir.SetMutableVariable node) {
- Variable variable = getMutableVariableReference(node.variable);
- Expression value = getVariableReference(node.value);
+ Variable variable = getMutableVariable(node.variable.definition);
+ Expression value = getVariableUse(node.value);
return new Assign(variable, value, visit(node.body));
}
@@ -466,7 +480,7 @@
}
Statement visitTypeOperator(cps_ir.TypeOperator node) {
- Expression receiver = getVariableReference(node.receiver);
+ Expression receiver = getVariableUse(node.receiver);
Expression concat =
new TypeOperator(receiver, node.type, isTypeTest: node.isTypeTest);
return continueWithExpression(node.continuation, concat);
@@ -488,9 +502,9 @@
cps_ir.Continuation cont = node.continuation.definition;
if (cont == returnContinuation) {
assert(node.arguments.length == 1);
- return new Return(getVariableReference(node.arguments.single));
+ return new Return(getVariableUse(node.arguments.single));
} else {
- List<Expression> arguments = translatePhiArguments(node.arguments);
+ List<Variable> arguments = translatePhiArguments(node.arguments);
return buildPhiAssignments(cont.parameters, arguments,
() {
// Translate invocations of recursive and non-recursive
@@ -509,9 +523,13 @@
? new Continue(labels[cont])
: new WhileTrue(labels[cont], visit(cont.body));
} else {
- return cont.hasExactlyOneUse
- ? visit(cont.body)
- : new Break(labels[cont]);
+ if (cont.hasExactlyOneUse) {
+ if (safeForInlining.contains(cont)) {
+ return visit(cont.body);
+ }
+ labels[cont] = new Label();
+ }
+ return new Break(labels[cont]);
}
});
}
@@ -554,8 +572,8 @@
node.type,
new List<LiteralMapEntry>.generate(node.entries.length, (int index) {
return new LiteralMapEntry(
- getVariableReference(node.entries[index].key),
- getVariableReference(node.entries[index].value));
+ getVariableUse(node.entries[index].key),
+ getVariableUse(node.entries[index].value));
})
);
}
@@ -592,7 +610,7 @@
}
Expression visitIsTrue(cps_ir.IsTrue node) {
- return getVariableReference(node.value);
+ return getVariableUse(node.value);
}
}
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
index 4312130..e0adf01 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
@@ -8,6 +8,7 @@
import '../constants/values.dart' as values;
import '../dart_types.dart' show DartType, GenericType;
import '../elements/elements.dart';
+import '../io/source_information.dart' show SourceInformation;
import '../universe/universe.dart';
import '../universe/universe.dart' show Selector;
import 'optimization/optimization.dart';
@@ -84,9 +85,20 @@
}
/**
- * Variables are [Expression]s.
+ * A local variable in the tree IR.
+ *
+ * All tree IR variables are mutable, and may in Dart-mode be referenced inside
+ * nested functions.
+ *
+ * To use a variable as an expression, reference it from a [VariableUse], with
+ * one [VariableUse] per expression.
+ *
+ * [Variable]s are reference counted. The node constructors [VariableUse],
+ * [Assign], [FunctionDefinition], and [Try] automatically update the reference
+ * count for their variables, but when transforming the tree, the transformer
+ * is responsible for updating reference counts.
*/
-class Variable extends Expression {
+class Variable extends Node {
/// Function that declares this variable.
ExecutableElement host;
@@ -94,20 +106,34 @@
/// Different variables may have the same entity. May be null.
Entity element;
+ /// Number of places where this variable occurs in a [VariableUse].
int readCount = 0;
/// Number of places where this variable occurs as:
/// - left-hand of an [Assign]
/// - left-hand of a [FunctionDeclaration]
/// - parameter in a [FunctionDefinition]
+ /// - catch parameter in a [Try]
int writeCount = 0;
Variable(this.host, this.element) {
assert(host != null);
}
+}
- accept(ExpressionVisitor visitor) => visitor.visitVariable(this);
- accept1(ExpressionVisitor1 visitor, arg) => visitor.visitVariable(this, arg);
+/// Read the value of a variable.
+class VariableUse extends Expression {
+ Variable variable;
+
+ /// Creates a use of [variable] and updates its `readCount`.
+ VariableUse(this.variable) {
+ variable.readCount++;
+ }
+
+ accept(ExpressionVisitor visitor) => visitor.visitVariableUse(this);
+ accept1(ExpressionVisitor1 visitor, arg) {
+ return visitor.visitVariableUse(this, arg);
+ }
}
/**
@@ -127,8 +153,10 @@
final Entity target;
final List<Expression> arguments;
final Selector selector;
+ final SourceInformation sourceInformation;
- InvokeStatic(this.target, this.selector, this.arguments);
+ InvokeStatic(this.target, this.selector, this.arguments,
+ {this.sourceInformation});
accept(ExpressionVisitor visitor) => visitor.visitInvokeStatic(this);
accept1(ExpressionVisitor1 visitor, arg) {
@@ -498,6 +526,7 @@
/// Variable declarations themselves are hoisted to function level.
bool isDeclaration;
+ /// Creates an assignment to [variable] and updates its `writeCount`.
Assign(this.variable, this.definition, this.next,
{ this.isDeclaration: false }) {
variable.writeCount++;
@@ -560,6 +589,29 @@
}
}
+// TODO(kmillikin): Do we want this 'TryStatement'? Other than
+// LabeledStatement and EmptyStatement, the statement class names are not
+// suffixed with 'Statement'.
+class Try extends Statement {
+ Statement tryBody;
+ List<Variable> catchParameters;
+ Statement catchBody;
+
+ Statement get next => null;
+ void set next(Statement s) => throw 'UNREACHABLE';
+
+ Try(this.tryBody, this.catchParameters, this.catchBody) {
+ for (Variable variable in catchParameters) {
+ variable.writeCount++; // Being a catch parameter counts as a write.
+ }
+ }
+
+ accept(StatementVisitor visitor) => visitor.visitTry(this);
+ accept1(StatementVisitor1 visitor, arg) {
+ return visitor.visitTry(this, arg);
+ }
+}
+
abstract class ExecutableDefinition {
ExecutableElement get element;
Statement body;
@@ -602,8 +654,13 @@
final List<ConstDeclaration> localConstants;
final List<ConstantExpression> defaultParameterValues;
+ /// Creates a function definition and updates `writeCount` for [parameters].
FunctionDefinition(this.element, this.parameters, this.body,
- this.localConstants, this.defaultParameterValues);
+ this.localConstants, this.defaultParameterValues) {
+ for (Variable param in parameters) {
+ param.writeCount++; // Being a parameter counts as a write.
+ }
+ }
/// Returns `true` if this function is abstract.
///
@@ -700,7 +757,7 @@
abstract class ExpressionVisitor<E> {
E visitExpression(Expression e) => e.accept(this);
- E visitVariable(Variable node);
+ E visitVariableUse(VariableUse node);
E visitInvokeStatic(InvokeStatic node);
E visitInvokeMethod(InvokeMethod node);
E visitInvokeMethodDirectly(InvokeMethodDirectly node);
@@ -725,7 +782,7 @@
abstract class ExpressionVisitor1<E, A> {
E visitExpression(Expression e, A arg) => e.accept1(this, arg);
- E visitVariable(Variable node, A arg);
+ E visitVariableUse(VariableUse node, A arg);
E visitInvokeStatic(InvokeStatic node, A arg);
E visitInvokeMethod(InvokeMethod node, A arg);
E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg);
@@ -760,6 +817,7 @@
S visitWhileCondition(WhileCondition node);
S visitFunctionDeclaration(FunctionDeclaration node);
S visitExpressionStatement(ExpressionStatement node);
+ S visitTry(Try node);
S visitSetField(SetField node);
}
@@ -775,6 +833,7 @@
S visitWhileCondition(WhileCondition node, A arg);
S visitFunctionDeclaration(FunctionDeclaration node, A arg);
S visitExpressionStatement(ExpressionStatement node, A arg);
+ S visitTry(Try node, A arg);
S visitSetField(SetField node, A arg);
}
@@ -792,11 +851,16 @@
class RecursiveVisitor extends Visitor {
visitFunctionDefinition(FunctionDefinition node) {
+ node.parameters.forEach(visitVariable);
visitStatement(node.body);
}
visitVariable(Variable node) {}
+ visitVariableUse(VariableUse node) {
+ visitVariable(node.variable);
+ }
+
visitInvokeStatic(InvokeStatic node) {
node.arguments.forEach(visitExpression);
}
@@ -904,6 +968,11 @@
visitStatement(node.next);
}
+ visitTry(Try node) {
+ visitStatement(node.tryBody);
+ visitStatement(node.catchBody);
+ }
+
visitFieldInitializer(FieldInitializer node) {
visitStatement(node.body);
}
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart
index 9828c94..2259fbe 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart
@@ -18,6 +18,10 @@
final List<Block> predecessors = <Block>[];
final List<Block> successors = <Block>[];
+ /// The catch block associated with the immediately enclosing try block or
+ /// `null` if not inside a try block.
+ Block catcher;
+
String get name => 'B$index';
Block([this.label]);
@@ -37,7 +41,9 @@
// (if targets) to blocks.
final Map<Label, Block> breakTargets = <Label, Block>{};
final Map<Label, Block> continueTargets = <Label, Block>{};
- final Map<Statement, Block> ifTargets = <Statement, Block>{};
+ final Map<Statement, Block> substatements = <Statement, Block>{};
+
+ Block catcher;
void _addStatement(Statement statement) {
blocks.last.statements.add(statement);
@@ -48,6 +54,7 @@
void _addBlock(Block block) {
block.index = blocks.length;
+ block.catcher = catcher;
blocks.add(block);
}
@@ -95,8 +102,8 @@
_addStatement(node);
Block thenTarget = new Block();
Block elseTarget = new Block();
- ifTargets[node.thenStatement] = thenTarget;
- ifTargets[node.elseStatement] = elseTarget;
+ substatements[node.thenStatement] = thenTarget;
+ substatements[node.elseStatement] = elseTarget;
blocks.last.addEdgeTo(thenTarget);
blocks.last.addEdgeTo(elseTarget);
_addBlock(thenTarget);
@@ -137,8 +144,26 @@
_addBlock(nextBlock);
visitStatement(node.next);
- ifTargets[node.body] = bodyBlock;
- ifTargets[node.next] = nextBlock;
+ substatements[node.body] = bodyBlock;
+ substatements[node.next] = nextBlock;
+ }
+
+ visitTry(Try node) {
+ _addStatement(node);
+ Block tryBlock = new Block();
+ Block catchBlock = new Block();
+
+ Block oldCatcher = catcher;
+ catcher = catchBlock;
+ _addBlock(tryBlock);
+ visitStatement(node.tryBody);
+ catcher = oldCatcher;
+
+ _addBlock(catchBlock);
+ visitStatement(node.catchBody);
+
+ substatements[node.tryBody] = tryBlock;
+ substatements[node.catchBody] = catchBlock;
}
visitExpressionStatement(ExpressionStatement node) {
@@ -207,6 +232,9 @@
printStatement(null,
"Label ${block.name}, useCount=${block.label.useCount}");
}
+ if (block.catcher != null) {
+ printStatement(null, 'Catch exceptions at ${block.catcher.name}');
+ }
block.statements.forEach(visitBlockMember);
});
});
@@ -258,8 +286,8 @@
visitIf(If node) {
String condition = expr(node.condition);
- String thenTarget = collector.ifTargets[node.thenStatement].name;
- String elseTarget = collector.ifTargets[node.elseStatement].name;
+ String thenTarget = collector.substatements[node.thenStatement].name;
+ String elseTarget = collector.substatements[node.elseStatement].name;
printStatement(null, "if $condition then $thenTarget else $elseTarget");
}
@@ -268,13 +296,20 @@
}
visitWhileCondition(WhileCondition node) {
- String bodyTarget = collector.ifTargets[node.body].name;
- String nextTarget = collector.ifTargets[node.next].name;
+ String bodyTarget = collector.substatements[node.body].name;
+ String nextTarget = collector.substatements[node.next].name;
printStatement(null, "while ${expr(node.condition)}");
printStatement(null, "do $bodyTarget");
printStatement(null, "then $nextTarget" );
}
+ visitTry(Try node) {
+ String tryTarget = collector.substatements[node.tryBody].name;
+ String catchParams = node.catchParameters.map(names.varName).join(',');
+ String catchTarget = collector.substatements[node.catchBody].name;
+ printStatement(null, 'try $tryTarget catch($catchParams) $catchTarget');
+ }
+
visitExpressionStatement(ExpressionStatement node) {
printStatement(null, expr(node.expression));
}
@@ -303,8 +338,8 @@
SubexpressionVisitor(this.names);
- String visitVariable(Variable node) {
- return names.varName(node);
+ String visitVariableUse(VariableUse node) {
+ return names.varName(node.variable);
}
String formatArguments(Invoke node) {
diff --git a/pkg/compiler/lib/src/typechecker.dart b/pkg/compiler/lib/src/typechecker.dart
index 321be25..68684a4 100644
--- a/pkg/compiler/lib/src/typechecker.dart
+++ b/pkg/compiler/lib/src/typechecker.dart
@@ -10,6 +10,8 @@
void check(TreeElements elements) {
AstElement element = elements.analyzedElement;
+ if (element.isTypedef) return;
+
compiler.withCurrentElement(element, () {
measure(() {
Node tree = element.node;
@@ -61,7 +63,7 @@
}
}
return compiler.types.isAssignable(
- computeType(compiler), compiler.functionClass.computeType(compiler));
+ computeType(compiler), compiler.coreTypes.functionType);
}
}
@@ -264,6 +266,16 @@
final ClassElement currentClass;
+ /// The immediately enclosing field, method or constructor being analyzed.
+ ExecutableElement executableContext;
+
+ CoreTypes get coreTypes => compiler.coreTypes;
+
+ InterfaceType get intType => coreTypes.intType;
+ InterfaceType get doubleType => coreTypes.doubleType;
+ InterfaceType get boolType => coreTypes.boolType;
+ InterfaceType get stringType => coreTypes.stringType;
+
DartType thisType;
DartType superType;
@@ -271,13 +283,6 @@
bool analyzingInitializer = false;
- DartType intType;
- DartType doubleType;
- DartType boolType;
- DartType stringType;
- DartType objectType;
- DartType listType;
-
Map<Node, List<TypePromotion>> shownTypePromotionsMap =
new Map<Node, List<TypePromotion>>();
@@ -337,14 +342,9 @@
TypeCheckerVisitor(this.compiler, TreeElements elements, this.types)
: this.elements = elements,
- currentClass = elements.analyzedElement != null
+ this.executableContext = elements.analyzedElement,
+ this.currentClass = elements.analyzedElement != null
? elements.analyzedElement.enclosingClass : null {
- intType = compiler.intClass.computeType(compiler);
- doubleType = compiler.doubleClass.computeType(compiler);
- boolType = compiler.boolClass.computeType(compiler);
- stringType = compiler.stringClass.computeType(compiler);
- objectType = compiler.objectClass.computeType(compiler);
- listType = compiler.listClass.computeType(compiler);
if (currentClass != null) {
thisType = currentClass.thisType;
@@ -411,7 +411,7 @@
if (lastSeenNode != null) {
compiler.internalError(lastSeenNode, error);
} else {
- compiler.internalError(elements.analyzedElement, error);
+ compiler.internalError(executableContext, error);
}
} else {
lastSeenNode = node;
@@ -599,8 +599,7 @@
assert(invariant(node, element != null,
message: 'FunctionExpression with no element'));
if (Elements.isUnresolved(element)) return const DynamicType();
- if (identical(element.kind, ElementKind.GENERATIVE_CONSTRUCTOR) ||
- identical(element.kind, ElementKind.GENERATIVE_CONSTRUCTOR_BODY)) {
+ if (element.isGenerativeConstructor) {
type = const DynamicType();
returnType = const VoidType();
@@ -619,11 +618,16 @@
returnType = functionType.returnType;
type = functionType;
}
+ ExecutableElement previousExecutableContext = executableContext;
DartType previousReturnType = expectedReturnType;
expectedReturnType = returnType;
AsyncMarker previousAsyncMarker = currentAsyncMarker;
+
+ executableContext = element;
currentAsyncMarker = element.asyncMarker;
analyze(node.body);
+
+ executableContext = previousExecutableContext;
expectedReturnType = previousReturnType;
currentAsyncMarker = previousAsyncMarker;
return type;
@@ -1575,30 +1579,33 @@
return const StatementType();
}
- final expression = node.expression;
- final isVoidFunction = expectedReturnType.isVoid;
+ final Node expression = node.expression;
// Executing a return statement return e; [...] It is a static type warning
// if the type of e may not be assigned to the declared return type of the
// immediately enclosing function.
if (expression != null) {
- final expressionType = analyze(expression);
- Element element = elements.analyzedElement;
- if (element != null && element.isGenerativeConstructor) {
+ DartType expressionType = analyze(expression);
+ if (executableContext.isGenerativeConstructor) {
// The resolver already emitted an error for this expression.
- } else if (isVoidFunction
- && !types.isAssignable(expressionType, const VoidType())) {
- reportTypeWarning(expression, MessageKind.RETURN_VALUE_IN_VOID);
} else {
- checkAssignable(expression, expressionType, expectedReturnType);
+ if (currentAsyncMarker == AsyncMarker.ASYNC) {
+ expressionType = coreTypes.futureType(flatten(expressionType));
+ }
+ if (expectedReturnType.isVoid &&
+ !types.isAssignable(expressionType, const VoidType())) {
+ reportTypeWarning(expression, MessageKind.RETURN_VALUE_IN_VOID);
+ } else {
+ checkAssignable(expression, expressionType, expectedReturnType);
+ }
}
- // Let f be the function immediately enclosing a return statement of the
- // form 'return;' It is a static warning if both of the following conditions
- // hold:
- // - f is not a generative constructor.
- // - The return type of f may not be assigned to void.
} else if (!types.isAssignable(expectedReturnType, const VoidType())) {
+ // Let f be the function immediately enclosing a return statement of the
+ // form 'return;' It is a static warning if both of the following
+ // conditions hold:
+ // - f is not a generative constructor.
+ // - The return type of f may not be assigned to void.
reportTypeWarning(node, MessageKind.RETURN_NOTHING,
{'returnType': expectedReturnType});
}
@@ -1639,17 +1646,17 @@
DartType resultType = analyze(node.expression);
if (!node.hasStar) {
if (currentAsyncMarker.isAsync) {
- resultType = compiler.coreTypes.streamType(resultType);
+ resultType = coreTypes.streamType(resultType);
} else {
- resultType = compiler.coreTypes.iterableType(resultType);
+ resultType = coreTypes.iterableType(resultType);
}
} else {
if (currentAsyncMarker.isAsync) {
// The static type of expression must be assignable to Stream.
- checkAssignable(node, resultType, compiler.coreTypes.streamType());
+ checkAssignable(node, resultType, coreTypes.streamType());
} else {
// The static type of expression must be assignable to Iterable.
- checkAssignable(node, resultType, compiler.coreTypes.iterableType());
+ checkAssignable(node, resultType, coreTypes.iterableType());
}
}
// The static type of the result must be assignable to the declared type.
@@ -1706,7 +1713,7 @@
DartType thenType = analyzeInPromotedContext(condition, thenExpression);
DartType elseType = analyze(node.elseExpression);
- return compiler.types.computeLeastUpperBound(thenType, elseType);
+ return types.computeLeastUpperBound(thenType, elseType);
}
visitStringInterpolation(StringInterpolation node) {
@@ -1792,8 +1799,7 @@
}
if (!hasDefaultCase && expressionType.isEnumType) {
- compiler.enqueuer.resolution.addDeferredAction(
- elements.analyzedElement, () {
+ compiler.enqueuer.resolution.addDeferredAction(executableContext, () {
Map<ConstantValue, FieldElement> enumValues =
<ConstantValue, FieldElement>{};
List<FieldElement> unreferencedFields = <FieldElement>[];
diff --git a/pkg/compiler/lib/src/use_unused_api.dart b/pkg/compiler/lib/src/use_unused_api.dart
index 0ba3b3d..bf44322 100644
--- a/pkg/compiler/lib/src/use_unused_api.dart
+++ b/pkg/compiler/lib/src/use_unused_api.dart
@@ -63,7 +63,7 @@
useCodeBuffer(null);
usedByTests();
useElements(null, null, null, null, null);
- useIr(null, null, null);
+ useIr(null, null);
useCompiler(null);
useTypes();
useCodeEmitterTask(null);
@@ -238,23 +238,8 @@
pfe.copyWithEnclosing(null);
}
-useIr(cps_ir_nodes_sexpr.SExpressionStringifier stringifier,
- ir_builder.IrBuilderTask task,
+useIr(ir_builder.IrBuilderTask task,
ir_builder.IrBuilder builder) {
- new cps_ir_nodes_sexpr.SExpressionStringifier();
- stringifier
- ..newContinuationName(null)
- ..newValueName(null)
- ..visitConstant(null)
- ..visitContinuation(null)
- ..visitDefinition(null)
- ..visitExpression(null)
- ..visitFunctionDefinition(null)
- ..visitFieldDefinition(null)
- ..visitInvokeStatic(null)
- ..visitLetCont(null)
- ..visitNode(null)
- ..visitParameter(null);
task
..hasIr(null)
..getIr(null);
diff --git a/pkg/compiler/lib/src/warnings.dart b/pkg/compiler/lib/src/warnings.dart
index 6a78b8a..40b04ed 100644
--- a/pkg/compiler/lib/src/warnings.dart
+++ b/pkg/compiler/lib/src/warnings.dart
@@ -2132,7 +2132,7 @@
"""
class A {
A();
- factory A.a() async* => new A();
+ factory A.a() async* {}
}
main() => new A.a();"""]);
@@ -2176,6 +2176,23 @@
var yield;
}"""]);
+ static const MessageKind RETURN_IN_GENERATOR =
+ const MessageKind(
+ "'return' with a value is not allowed in a method body using the "
+ "'#{modifier}' modifier.",
+ howToFix: "Try removing the value, replacing 'return' with 'yield' "
+ "or changing the method body modifier.",
+ examples: const [
+"""
+foo() async* { return 0; }
+main() => foo();
+""",
+
+"""
+foo() sync* { return 0; }
+main() => foo();
+"""]);
+
static const MessageKind NATIVE_NOT_SUPPORTED = const MessageKind(
"'native' modifier is not supported.",
howToFix: "Try removing the 'native' implementation or analyzing the "
@@ -2382,6 +2399,12 @@
****************************************************************
''');
+
+ static const MessageKind MIRRORS_LIBRARY_NEW_EMITTER =
+ const MessageKind(
+ "dart:mirrors library is not supported when using the new emitter "
+ "(DART_VM_OPTIONS='-Ddart2js.use.new.emitter=true')");
+
static const MessageKind CALL_NOT_SUPPORTED_ON_NATIVE_CLASS =
const MessageKind(
"Non-supported 'call' member on a native class, or a "
diff --git a/pkg/crypto/LICENSE b/pkg/crypto/LICENSE
deleted file mode 100644
index 5c60afe..0000000
--- a/pkg/crypto/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright 2014, the Dart project authors. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of Google Inc. nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/crypto/lib/crypto.dart b/pkg/crypto/lib/crypto.dart
deleted file mode 100644
index 892626f..0000000
--- a/pkg/crypto/lib/crypto.dart
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * Cryptographic algorithms, with support for hash functions such as
- * SHA-1, SHA-256, HMAC, and MD5.
- */
-library crypto;
-
-import 'dart:math';
-import 'dart:typed_data';
-
-part 'src/crypto_utils.dart';
-part 'src/hash_utils.dart';
-part 'src/hmac.dart';
-part 'src/md5.dart';
-part 'src/sha1.dart';
-part 'src/sha256.dart';
-
-/**
- * Interface for cryptographic hash functions.
- *
- * The [add] method is used to add data to the hash. The [close] method
- * is used to extract the message digest.
- *
- * Once the [close] method has been called no more data can be added using the
- * [add] method. If [add] is called after the first call to [close] a
- * HashException is thrown.
- *
- * If multiple instances of a given Hash is needed the [newInstance]
- * method can provide a new instance.
- */
-// TODO(floitsch): make Hash implement Sink, EventSink or similar.
-abstract class Hash {
- /**
- * Add a list of bytes to the hash computation.
- */
- void add(List<int> data);
-
- /**
- * Finish the hash computation and extract the message digest as
- * a list of bytes.
- */
- List<int> close();
-
- /**
- * Returns a new instance of this hash function.
- */
- Hash newInstance();
-
- /**
- * Internal block size of the hash in bytes.
- *
- * This is exposed for use by the HMAC class which needs to know the
- * block size for the [Hash] it is using.
- */
- int get blockSize;
-}
-
-/**
- * Utility methods for working with message digests.
- */
-class CryptoUtils {
- /**
- * Convert a list of bytes (for example a message digest) into a hex
- * string.
- */
- static String bytesToHex(List<int> bytes) {
- return _CryptoUtils.bytesToHex(bytes);
- }
-
- /**
- * Converts a list of bytes into a Base 64 encoded string.
- *
- * The list can be any list of integers in the range 0..255,
- * for example a message digest.
- *
- * If [addLineSeparator] is true, the resulting string will be
- * broken into lines of 76 characters, separated by "\r\n".
- *
- * If [urlSafe] is true, the result is URL and filename safe.
- *
- * Based on [RFC 4648](http://tools.ietf.org/html/rfc4648)
- *
- */
- static String bytesToBase64(List<int> bytes,
- {bool urlSafe : false,
- bool addLineSeparator : false}) {
- return _CryptoUtils.bytesToBase64(bytes,
- urlSafe,
- addLineSeparator);
- }
-
-
- /**
- * Converts a Base 64 encoded String into list of bytes.
- *
- * Decoder ignores "\r\n" sequences from input.
- *
- * Accepts both URL safe and unsafe Base 64 encoded strings.
- *
- * Throws a FormatException exception if input contains invalid characters.
- *
- * Based on [RFC 4648](http://tools.ietf.org/html/rfc4648)
- */
- static List<int> base64StringToBytes(String input) {
- return _CryptoUtils.base64StringToBytes(input);
- }
-}
diff --git a/pkg/crypto/lib/src/crypto_utils.dart b/pkg/crypto/lib/src/crypto_utils.dart
deleted file mode 100644
index 515c1e9..0000000
--- a/pkg/crypto/lib/src/crypto_utils.dart
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of crypto;
-
-abstract class _CryptoUtils {
- static String bytesToHex(List<int> bytes) {
- var result = new StringBuffer();
- for (var part in bytes) {
- result.write('${part < 16 ? '0' : ''}${part.toRadixString(16)}');
- }
- return result.toString();
- }
-
- static const int PAD = 61; // '='
- static const int CR = 13; // '\r'
- static const int LF = 10; // '\n'
- static const int LINE_LENGTH = 76;
-
- static const String _encodeTable =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
- static const String _encodeTableUrlSafe =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
-
- // Lookup table used for finding Base 64 alphabet index of a given byte.
- // -2 : Outside Base 64 alphabet.
- // -1 : '\r' or '\n'
- // 0 : = (Padding character).
- // >0 : Base 64 alphabet index of given byte.
- static const List<int> _decodeTable =
- const [ -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -2, -2, -1, -2, -2,
- -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
- -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 62, -2, 62, -2, 63,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -2, -2, -2, 0, -2, -2,
- -2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -2, -2, -2, -2, 63,
- -2, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -2, -2, -2, -2, -2,
- -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
- -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
- -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
- -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
- -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
- -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
- -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
- -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2 ];
-
- static String bytesToBase64(List<int> bytes,
- [bool urlSafe = false,
- bool addLineSeparator = false]) {
- int len = bytes.length;
- if (len == 0) {
- return "";
- }
- final String lookup = urlSafe ? _encodeTableUrlSafe : _encodeTable;
- // Size of 24 bit chunks.
- final int remainderLength = len.remainder(3);
- final int chunkLength = len - remainderLength;
- // Size of base output.
- int outputLen = ((len ~/ 3) * 4) + ((remainderLength > 0) ? 4 : 0);
- // Add extra for line separators.
- if (addLineSeparator) {
- outputLen += ((outputLen - 1) ~/ LINE_LENGTH) << 1;
- }
- List<int> out = new List<int>(outputLen);
-
- // Encode 24 bit chunks.
- int j = 0, i = 0, c = 0;
- while (i < chunkLength) {
- int x = ((bytes[i++] << 16) & 0xFFFFFF) |
- ((bytes[i++] << 8) & 0xFFFFFF) |
- bytes[i++];
- out[j++] = lookup.codeUnitAt(x >> 18);
- out[j++] = lookup.codeUnitAt((x >> 12) & 0x3F);
- out[j++] = lookup.codeUnitAt((x >> 6) & 0x3F);
- out[j++] = lookup.codeUnitAt(x & 0x3f);
- // Add optional line separator for each 76 char output.
- if (addLineSeparator && ++c == 19 && j < outputLen - 2) {
- out[j++] = CR;
- out[j++] = LF;
- c = 0;
- }
- }
-
- // If input length if not a multiple of 3, encode remaining bytes and
- // add padding.
- if (remainderLength == 1) {
- int x = bytes[i];
- out[j++] = lookup.codeUnitAt(x >> 2);
- out[j++] = lookup.codeUnitAt((x << 4) & 0x3F);
- out[j++] = PAD;
- out[j++] = PAD;
- } else if (remainderLength == 2) {
- int x = bytes[i];
- int y = bytes[i + 1];
- out[j++] = lookup.codeUnitAt(x >> 2);
- out[j++] = lookup.codeUnitAt(((x << 4) | (y >> 4)) & 0x3F);
- out[j++] = lookup.codeUnitAt((y << 2) & 0x3F);
- out[j++] = PAD;
- }
-
- return new String.fromCharCodes(out);
- }
-
- static List<int> base64StringToBytes(String input) {
- int len = input.length;
- if (len == 0) {
- return new List<int>(0);
- }
-
- // Count '\r', '\n' and illegal characters, For illegal characters,
- // throw an exception.
- int extrasLen = 0;
- for (int i = 0; i < len; i++) {
- int c = _decodeTable[input.codeUnitAt(i)];
- if (c < 0) {
- extrasLen++;
- if (c == -2) {
- throw new FormatException('Invalid character: ${input[i]}');
- }
- }
- }
-
- if ((len - extrasLen) % 4 != 0) {
- throw new FormatException('''Size of Base 64 characters in Input
- must be a multiple of 4. Input: $input''');
- }
-
- // Count pad characters.
- int padLength = 0;
- for (int i = len - 1; i >= 0; i--) {
- int currentCodeUnit = input.codeUnitAt(i);
- if (_decodeTable[currentCodeUnit] > 0) break;
- if (currentCodeUnit == PAD) padLength++;
- }
- int outputLen = (((len - extrasLen) * 6) >> 3) - padLength;
- List<int> out = new List<int>(outputLen);
-
- for (int i = 0, o = 0; o < outputLen; ) {
- // Accumulate 4 valid 6 bit Base 64 characters into an int.
- int x = 0;
- for (int j = 4; j > 0; ) {
- int c = _decodeTable[input.codeUnitAt(i++)];
- if (c >= 0) {
- x = ((x << 6) & 0xFFFFFF) | c;
- j--;
- }
- }
- out[o++] = x >> 16;
- if (o < outputLen) {
- out[o++] = (x >> 8) & 0xFF;
- if (o < outputLen) out[o++] = x & 0xFF;
- }
- }
- return out;
- }
-
-}
diff --git a/pkg/crypto/lib/src/hash_utils.dart b/pkg/crypto/lib/src/hash_utils.dart
deleted file mode 100644
index 12bcb0d..0000000
--- a/pkg/crypto/lib/src/hash_utils.dart
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of crypto;
-
-// Constants.
-const _MASK_8 = 0xff;
-const _MASK_32 = 0xffffffff;
-const _BITS_PER_BYTE = 8;
-const _BYTES_PER_WORD = 4;
-
-// Helper functions used by more than one hasher.
-
-// Rotate left limiting to unsigned 32-bit values.
-int _rotl32(int val, int shift) {
- var mod_shift = shift & 31;
- return ((val << mod_shift) & _MASK_32) |
- ((val & _MASK_32) >> (32 - mod_shift));
-}
-
-// Base class encapsulating common behavior for cryptographic hash
-// functions.
-abstract class _HashBase implements Hash {
- final int _chunkSizeInWords;
- final int _digestSizeInWords;
- final bool _bigEndianWords;
- final Uint32List _currentChunk;
- final Uint32List _h;
- int _lengthInBytes = 0;
- List<int> _pendingData;
- bool _digestCalled = false;
-
- _HashBase(int chunkSizeInWords,
- int digestSizeInWords,
- bool this._bigEndianWords)
- : _pendingData = [],
- _currentChunk = new Uint32List(chunkSizeInWords),
- _h = new Uint32List(digestSizeInWords),
- _chunkSizeInWords = chunkSizeInWords,
- _digestSizeInWords = digestSizeInWords;
-
- // Update the hasher with more data.
- void add(List<int> data) {
- if (_digestCalled) {
- throw new StateError(
- 'Hash update method called after digest was retrieved');
- }
- _lengthInBytes += data.length;
- _pendingData.addAll(data);
- _iterate();
- }
-
- // Finish the hash computation and return the digest string.
- List<int> close() {
- if (_digestCalled) {
- return _resultAsBytes();
- }
- _digestCalled = true;
- _finalizeData();
- _iterate();
- assert(_pendingData.length == 0);
- return _resultAsBytes();
- }
-
- // Returns the block size of the hash in bytes.
- int get blockSize {
- return _chunkSizeInWords * _BYTES_PER_WORD;
- }
-
- // One round of the hash computation.
- void _updateHash(Uint32List m);
-
- // Helper methods.
- int _add32(x, y) => (x + y) & _MASK_32;
- int _roundUp(val, n) => (val + n - 1) & -n;
-
- // Compute the final result as a list of bytes from the hash words.
- List<int> _resultAsBytes() {
- var result = [];
- for (var i = 0; i < _h.length; i++) {
- result.addAll(_wordToBytes(_h[i]));
- }
- return result;
- }
-
- // Converts a list of bytes to a chunk of 32-bit words.
- void _bytesToChunk(List<int> data, int dataIndex) {
- assert((data.length - dataIndex) >= (_chunkSizeInWords * _BYTES_PER_WORD));
-
- for (var wordIndex = 0; wordIndex < _chunkSizeInWords; wordIndex++) {
- var w3 = _bigEndianWords ? data[dataIndex] : data[dataIndex + 3];
- var w2 = _bigEndianWords ? data[dataIndex + 1] : data[dataIndex + 2];
- var w1 = _bigEndianWords ? data[dataIndex + 2] : data[dataIndex + 1];
- var w0 = _bigEndianWords ? data[dataIndex + 3] : data[dataIndex];
- dataIndex += 4;
- var word = (w3 & 0xff) << 24;
- word |= (w2 & _MASK_8) << 16;
- word |= (w1 & _MASK_8) << 8;
- word |= (w0 & _MASK_8);
- _currentChunk[wordIndex] = word;
- }
- }
-
- // Convert a 32-bit word to four bytes.
- List<int> _wordToBytes(int word) {
- List bytes = new List<int>(_BYTES_PER_WORD);
- bytes[0] = (word >> (_bigEndianWords ? 24 : 0)) & _MASK_8;
- bytes[1] = (word >> (_bigEndianWords ? 16 : 8)) & _MASK_8;
- bytes[2] = (word >> (_bigEndianWords ? 8 : 16)) & _MASK_8;
- bytes[3] = (word >> (_bigEndianWords ? 0 : 24)) & _MASK_8;
- return bytes;
- }
-
- // Iterate through data updating the hash computation for each
- // chunk.
- void _iterate() {
- var len = _pendingData.length;
- var chunkSizeInBytes = _chunkSizeInWords * _BYTES_PER_WORD;
- if (len >= chunkSizeInBytes) {
- var index = 0;
- for (; (len - index) >= chunkSizeInBytes; index += chunkSizeInBytes) {
- _bytesToChunk(_pendingData, index);
- _updateHash(_currentChunk);
- }
- _pendingData = _pendingData.sublist(index, len);
- }
- }
-
- // Finalize the data. Add a 1 bit to the end of the message. Expand with
- // 0 bits and add the length of the message.
- void _finalizeData() {
- _pendingData.add(0x80);
- var contentsLength = _lengthInBytes + 9;
- var chunkSizeInBytes = _chunkSizeInWords * _BYTES_PER_WORD;
- var finalizedLength = _roundUp(contentsLength, chunkSizeInBytes);
- var zeroPadding = finalizedLength - contentsLength;
- for (var i = 0; i < zeroPadding; i++) {
- _pendingData.add(0);
- }
- var lengthInBits = _lengthInBytes * _BITS_PER_BYTE;
- assert(lengthInBits < pow(2, 32));
- if (_bigEndianWords) {
- _pendingData.addAll(_wordToBytes(0));
- _pendingData.addAll(_wordToBytes(lengthInBits & _MASK_32));
- } else {
- _pendingData.addAll(_wordToBytes(lengthInBits & _MASK_32));
- _pendingData.addAll(_wordToBytes(0));
- }
- }
-}
diff --git a/pkg/crypto/lib/src/hmac.dart b/pkg/crypto/lib/src/hmac.dart
deleted file mode 100644
index a4ea193..0000000
--- a/pkg/crypto/lib/src/hmac.dart
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of crypto;
-
-/**
- * Hash-based Message Authentication Code support.
- *
- * The [add] method is used to add data to the message. The [digest] and
- * [close] methods are used to extract the message authentication code.
- */
-// TODO(floitsch): make Hash implement Sink, EventSink or similar.
-class HMAC {
- final List<int> _message;
- Hash _hash;
- List<int> _key;
- bool _isClosed = false;
-
- /**
- * Create an [HMAC] object from a [Hash] and a key.
- */
- HMAC(Hash this._hash, List<int> this._key): _message = [];
-
- /**
- * Add a list of bytes to the message.
- */
- void add(List<int> data) {
- if (_isClosed) throw new StateError("HMAC is closed");
- _message.addAll(data);
- }
-
- /**
- * Extract the message digest as a list of bytes without closing [this].
- */
- List<int> get digest {
- var blockSize = _hash.blockSize;
-
- // Hash the key if it is longer than the block size of the hash.
- if (_key.length > blockSize) {
- _hash = _hash.newInstance();
- _hash.add(_key);
- _key = _hash.close();
- }
-
- // Zero-pad the key until its size is equal to the block size of the hash.
- if (_key.length < blockSize) {
- var newKey = new List(blockSize);
- newKey.setRange(0, _key.length, _key);
- for (var i = _key.length; i < blockSize; i++) {
- newKey[i] = 0;
- }
- _key = newKey;
- }
-
- // Compute inner padding.
- var padding = new List(blockSize);
- for (var i = 0; i < blockSize; i++) {
- padding[i] = 0x36 ^ _key[i];
- }
-
- // Inner hash computation.
- _hash = _hash.newInstance();
- _hash.add(padding);
- _hash.add(_message);
- var innerHash = _hash.close();
-
- // Compute outer padding.
- for (var i = 0; i < blockSize; i++) {
- padding[i] = 0x5c ^ _key[i];
- }
-
- // Outer hash computation which is the result.
- _hash = _hash.newInstance();
- _hash.add(padding);
- _hash.add(innerHash);
- return _hash.close();
- }
-
- /**
- * Perform the actual computation and extract the message digest
- * as a list of bytes.
- */
- List<int> close() {
- _isClosed = true;
- return digest;
- }
-
- /**
- * Verify that the HMAC computed for the data so far matches the
- * given message digest.
- *
- * This method should be used instead of memcmp-style comparisons
- * to avoid leaking information via timing.
- *
- * Throws an exception if the given digest does not have the same
- * size as the digest computed by this HMAC instance.
- */
- bool verify(List<int> digest) {
- var computedDigest = this.digest;
- if (digest.length != computedDigest.length) {
- throw new ArgumentError(
- 'Invalid digest size: ${digest.length} in HMAC.verify. '
- 'Expected: ${_hash.blockSize}.');
- }
- int result = 0;
- for (var i = 0; i < digest.length; i++) {
- result |= digest[i] ^ computedDigest[i];
- }
- return result == 0;
- }
-}
diff --git a/pkg/crypto/lib/src/md5.dart b/pkg/crypto/lib/src/md5.dart
deleted file mode 100644
index 54bf3be..0000000
--- a/pkg/crypto/lib/src/md5.dart
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of crypto;
-
-/**
- * MD5 hash function implementation.
- *
- * WARNING: MD5 has known collisions and should only be used when
- * required for backwards compatibility.
- */
-class MD5 extends _HashBase {
- MD5(): super(16, 4, false) {
- _h[0] = 0x67452301;
- _h[1] = 0xefcdab89;
- _h[2] = 0x98badcfe;
- _h[3] = 0x10325476;
- }
-
- // Returns a new instance of this Hash.
- MD5 newInstance() {
- return new MD5();
- }
-
- static const _k = const [
- 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a,
- 0xa8304613, 0xfd469501, 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
- 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, 0xf61e2562, 0xc040b340,
- 0x265e5a51, 0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,
- 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8,
- 0x676f02d9, 0x8d2a4c8a, 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,
- 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, 0x289b7ec6, 0xeaa127fa,
- 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,
- 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92,
- 0xffeff47d, 0x85845dd1, 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,
- 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 ];
-
- static const _r = const [
- 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14,
- 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11,
- 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6,
- 10, 15, 21, 6, 10, 15, 21 ];
-
- // Compute one iteration of the MD5 algorithm with a chunk of
- // 16 32-bit pieces.
- void _updateHash(Uint32List m) {
- assert(m.length == 16);
-
- var a = _h[0];
- var b = _h[1];
- var c = _h[2];
- var d = _h[3];
-
- var t0;
- var t1;
-
- for (var i = 0; i < 64; i++) {
- if (i < 16) {
- t0 = (b & c) | ((~b & _MASK_32) & d);
- t1 = i;
- } else if (i < 32) {
- t0 = (d & b) | ((~d & _MASK_32) & c);
- t1 = ((5 * i) + 1) % 16;
- } else if (i < 48) {
- t0 = b ^ c ^ d;
- t1 = ((3 * i) + 5) % 16;
- } else {
- t0 = c ^ (b | (~d & _MASK_32));
- t1 = (7 * i) % 16;
- }
-
- var temp = d;
- d = c;
- c = b;
- b = _add32(b, _rotl32(_add32(_add32(a, t0),
- _add32(_k[i], m[t1])),
- _r[i]));
- a = temp;
- }
-
- _h[0] = _add32(a, _h[0]);
- _h[1] = _add32(b, _h[1]);
- _h[2] = _add32(c, _h[2]);
- _h[3] = _add32(d, _h[3]);
- }
-}
diff --git a/pkg/crypto/lib/src/sha1.dart b/pkg/crypto/lib/src/sha1.dart
deleted file mode 100644
index 6e8ea48..0000000
--- a/pkg/crypto/lib/src/sha1.dart
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of crypto;
-
-/**
- * SHA1 hash function implementation.
- */
-class SHA1 extends _HashBase {
- final Uint32List _w;
-
- // Construct a SHA1 hasher object.
- SHA1() : _w = new Uint32List(80), super(16, 5, true) {
- _h[0] = 0x67452301;
- _h[1] = 0xEFCDAB89;
- _h[2] = 0x98BADCFE;
- _h[3] = 0x10325476;
- _h[4] = 0xC3D2E1F0;
- }
-
- // Returns a new instance of this Hash.
- SHA1 newInstance() {
- return new SHA1();
- }
-
- // Compute one iteration of the SHA1 algorithm with a chunk of
- // 16 32-bit pieces.
- void _updateHash(Uint32List m) {
- assert(m.length == 16);
-
- var a = _h[0];
- var b = _h[1];
- var c = _h[2];
- var d = _h[3];
- var e = _h[4];
-
- for (var i = 0; i < 80; i++) {
- if (i < 16) {
- _w[i] = m[i];
- } else {
- var n = _w[i - 3] ^ _w[i - 8] ^ _w[i - 14] ^ _w[i - 16];
- _w[i] = _rotl32(n, 1);
- }
- var t = _add32(_add32(_rotl32(a, 5), e), _w[i]);
- if (i < 20) {
- t = _add32(_add32(t, (b & c) | (~b & d)), 0x5A827999);
- } else if (i < 40) {
- t = _add32(_add32(t, (b ^ c ^ d)), 0x6ED9EBA1);
- } else if (i < 60) {
- t = _add32(_add32(t, (b & c) | (b & d) | (c & d)), 0x8F1BBCDC);
- } else {
- t = _add32(_add32(t, b ^ c ^ d), 0xCA62C1D6);
- }
-
- e = d;
- d = c;
- c = _rotl32(b, 30);
- b = a;
- a = t & _MASK_32;
- }
-
- _h[0] = _add32(a, _h[0]);
- _h[1] = _add32(b, _h[1]);
- _h[2] = _add32(c, _h[2]);
- _h[3] = _add32(d, _h[3]);
- _h[4] = _add32(e, _h[4]);
- }
-}
diff --git a/pkg/crypto/lib/src/sha256.dart b/pkg/crypto/lib/src/sha256.dart
deleted file mode 100644
index f36561f..0000000
--- a/pkg/crypto/lib/src/sha256.dart
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of crypto;
-
-/**
- * SHA256 hash function implementation.
- */
-class SHA256 extends _HashBase {
- final Uint32List _w;
-
- // Construct a SHA256 hasher object.
- SHA256() : _w = new Uint32List(64), super(16, 8, true) {
- // Initial value of the hash parts. First 32 bits of the fractional parts
- // of the square roots of the first 8 prime numbers.
- _h[0] = 0x6a09e667;
- _h[1] = 0xbb67ae85;
- _h[2] = 0x3c6ef372;
- _h[3] = 0xa54ff53a;
- _h[4] = 0x510e527f;
- _h[5] = 0x9b05688c;
- _h[6] = 0x1f83d9ab;
- _h[7] = 0x5be0cd19;
- }
-
- // Returns a new instance of this Hash.
- SHA256 newInstance() {
- return new SHA256();
- }
-
- // Table of round constants. First 32 bits of the fractional
- // parts of the cube roots of the first 64 prime numbers.
- static const List<int> _K =
- const [ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,
- 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,
- 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,
- 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
- 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,
- 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
- 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,
- 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
- 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,
- 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,
- 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,
- 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
- 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 ];
-
- // Helper functions as defined in http://tools.ietf.org/html/rfc6234
- _rotr32(n, x) => (x >> n) | ((x << (32 - n)) & _MASK_32);
- _ch(x, y, z) => (x & y) ^ ((~x & _MASK_32) & z);
- _maj(x, y, z) => (x & y) ^ (x & z) ^ (y & z);
- _bsig0(x) => _rotr32(2, x) ^ _rotr32(13, x) ^ _rotr32(22, x);
- _bsig1(x) => _rotr32(6, x) ^ _rotr32(11, x) ^ _rotr32(25, x);
- _ssig0(x) => _rotr32(7, x) ^ _rotr32(18, x) ^ (x >> 3);
- _ssig1(x) => _rotr32(17, x) ^ _rotr32(19, x) ^ (x >> 10);
-
- // Compute one iteration of the SHA256 algorithm with a chunk of
- // 16 32-bit pieces.
- void _updateHash(Uint32List M) {
- assert(M.length == 16);
-
- // Prepare message schedule.
- var i = 0;
- for (; i < 16; i++) {
- _w[i] = M[i];
- }
- for (; i < 64; i++) {
- _w[i] = _add32(_add32(_ssig1(_w[i - 2]), _w[i - 7]),
- _add32(_ssig0(_w[i - 15]), _w[i - 16]));
- }
-
- // Shuffle around the bits.
- var a = _h[0];
- var b = _h[1];
- var c = _h[2];
- var d = _h[3];
- var e = _h[4];
- var f = _h[5];
- var g = _h[6];
- var h = _h[7];
-
- for (var t = 0; t < 64; t++) {
- var t1 = _add32(_add32(h, _bsig1(e)),
- _add32(_ch(e, f, g), _add32(_K[t], _w[t])));
- var t2 = _add32(_bsig0(a), _maj(a, b, c));
- h = g;
- g = f;
- f = e;
- e = _add32(d, t1);
- d = c;
- c = b;
- b = a;
- a = _add32(t1, t2);
- }
-
- // Update hash values after iteration.
- _h[0] = _add32(a, _h[0]);
- _h[1] = _add32(b, _h[1]);
- _h[2] = _add32(c, _h[2]);
- _h[3] = _add32(d, _h[3]);
- _h[4] = _add32(e, _h[4]);
- _h[5] = _add32(f, _h[5]);
- _h[6] = _add32(g, _h[6]);
- _h[7] = _add32(h, _h[7]);
- }
-}
diff --git a/pkg/crypto/pubspec.yaml b/pkg/crypto/pubspec.yaml
deleted file mode 100644
index c07af24..0000000
--- a/pkg/crypto/pubspec.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-name: crypto
-version: 0.9.1-dev
-author: Dart Team <misc@dartlang.org>
-description: Library of cryptographic functions.
-homepage: http://www.dartlang.org
-environment:
- sdk: '>=0.8.10+6 <2.0.0'
-dev_dependencies:
- unittest: '>=0.10.0 <0.11.0'
diff --git a/pkg/crypto/test/base64_test.dart b/pkg/crypto/test/base64_test.dart
deleted file mode 100644
index 4215af99..0000000
--- a/pkg/crypto/test/base64_test.dart
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Library tag to allow the test to run on Dartium.
-library base64_test;
-
-import 'dart:math';
-
-import "package:crypto/crypto.dart";
-import "package:unittest/unittest.dart";
-
-void main() {
- test('encoder', _testEncoder);
- test('decoder', _testDecoder);
- test('decoder for malformed input', _testDecoderForMalformedInput);
- test('encode decode lists', _testEncodeDecodeLists);
- test('url safe encode-decode', _testUrlSafeEncodeDecode);
- test('performance', _testPerformance);
-}
-
-// Data from http://tools.ietf.org/html/rfc4648.
-const _INPUTS =
- const [ '', 'f', 'fo', 'foo', 'foob', 'fooba', 'foobar'];
-const _RESULTS =
- const [ '', 'Zg==', 'Zm8=', 'Zm9v', 'Zm9vYg==', 'Zm9vYmE=', 'Zm9vYmFy'];
-
-// Test data with only zeroes.
-var inputsWithZeroes = [[0, 0, 0], [0, 0], [0], []];
-const _RESULTS_WITH_ZEROS = const ['AAAA', 'AAA=', 'AA==', ''];
-
-const _LONG_LINE =
- "Man is distinguished, not only by his reason, but by this singular "
- "passion from other animals, which is a lust of the mind, that by a "
- "perseverance of delight in the continued and indefatigable generation "
- "of knowledge, exceeds the short vehemence of any carnal pleasure.";
-
-const _LONG_LINE_RESULT =
- "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbm"
- "x5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz\r\n"
- "IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlci"
- "BhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg\r\n"
- "dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcm"
- "FuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu\r\n"
- "dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYX"
- "Rpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo\r\n"
- "ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm"
- "5hbCBwbGVhc3VyZS4=";
-
-const _LONG_LINE_RESULT_NO_BREAK =
- "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbm"
- "x5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz"
- "IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlci"
- "BhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg"
- "dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcm"
- "FuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu"
- "dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYX"
- "Rpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo"
- "ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm"
- "5hbCBwbGVhc3VyZS4=";
-
-void _testEncoder() {
- for (var i = 0; i < _INPUTS.length; i++) {
- expect(CryptoUtils.bytesToBase64(_INPUTS[i].codeUnits), _RESULTS[i]);
- }
- for (var i = 0; i < inputsWithZeroes.length; i++) {
- expect(CryptoUtils.bytesToBase64(inputsWithZeroes[i]),
- _RESULTS_WITH_ZEROS[i]);
- }
- expect(
- CryptoUtils.bytesToBase64(_LONG_LINE.codeUnits, addLineSeparator : true),
- _LONG_LINE_RESULT);
- expect(CryptoUtils.bytesToBase64(_LONG_LINE.codeUnits),
- _LONG_LINE_RESULT_NO_BREAK);
-}
-
-void _testDecoder() {
- for (var i = 0; i < _RESULTS.length; i++) {
- expect(
- new String.fromCharCodes(CryptoUtils.base64StringToBytes(_RESULTS[i])),
- _INPUTS[i]);
- }
- for (var i = 0; i < _RESULTS_WITH_ZEROS.length; i++) {
- expect(CryptoUtils.base64StringToBytes(_RESULTS_WITH_ZEROS[i]),
- inputsWithZeroes[i]);
- }
- var longLineDecoded = CryptoUtils.base64StringToBytes(_LONG_LINE_RESULT);
- expect(new String.fromCharCodes(longLineDecoded), _LONG_LINE);
- var longLineResultNoBreak =
- CryptoUtils.base64StringToBytes(_LONG_LINE_RESULT);
- expect(new String.fromCharCodes(longLineResultNoBreak), _LONG_LINE);
-}
-
-void _testDecoderForMalformedInput() {
- expect(() {
- CryptoUtils.base64StringToBytes('AB~');
- }, throwsFormatException);
-
- expect(() {
- CryptoUtils.base64StringToBytes('A');
- }, throwsFormatException);
-}
-
-void _testUrlSafeEncodeDecode() {
- List<int> decUrlSafe = CryptoUtils.base64StringToBytes('-_A=');
- List<int> dec = CryptoUtils.base64StringToBytes('+/A=');
- expect(decUrlSafe, dec);
- expect(CryptoUtils.bytesToBase64(dec, urlSafe: true), '-_A=');
- expect(CryptoUtils.bytesToBase64(dec), '+/A=');
-}
-
-void _testEncodeDecodeLists() {
- for (int i = 0; i < 10; i++) {
- for (int j = 0; j < 256 - i; j++) {
- List<int> x = new List<int>(i);
- for (int k = 0; k < i; k++) {
- x[k] = j;
- }
- var enc = CryptoUtils.bytesToBase64(x);
- var dec = CryptoUtils.base64StringToBytes(enc);
- expect(dec, x);
- }
- }
-}
-
-void _fillRandom(List<int> l) {
- var random = new Random(0xBABE);
- for (int j = 0; j < l.length; j++) {
- l[j] = random.nextInt(255);
- }
-}
-
-void _testPerformance() {
- var l = new List<int>(1024);
- var iters = 5000;
- _fillRandom(l);
- String enc;
- var w = new Stopwatch()..start();
- for( int i = 0; i < iters; ++i ) {
- enc = CryptoUtils.bytesToBase64(l);
- }
- int ms = w.elapsedMilliseconds;
- int perSec = (iters * l.length) * 1000 ~/ ms;
- // print("Encode 1024 bytes for $iters times: $ms msec. $perSec b/s");
- w..reset();
- for( int i = 0; i < iters; ++i ) {
- CryptoUtils.base64StringToBytes(enc);
- }
- ms = w.elapsedMilliseconds;
- perSec = (iters * l.length) * 1000 ~/ ms;
- // print('''Decode into ${l.length} bytes for $iters
- // times: $ms msec. $perSec b/s''');
-}
diff --git a/pkg/crypto/test/hmac_md5_test.dart b/pkg/crypto/test/hmac_md5_test.dart
deleted file mode 100644
index 15b941f..0000000
--- a/pkg/crypto/test/hmac_md5_test.dart
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Library tag to allow the test to run on Dartium.
-library hmac_md5_test;
-
-import "package:crypto/crypto.dart";
-import "package:unittest/unittest.dart";
-
-void main() {
- test('standard vectors', () {
- _testStandardVectors(_HMAC_MD5_INPUTS, _HMAC_MD5_KEYS,
- _HMAC_MD5_STRING_MACS, _HMAC_MD5_MACS);
- });
-}
-
-void _testStandardVectors(inputs, keys, string_macs, macs) {
- for (var i = 0; i < inputs.length; i++) {
- var h = new HMAC(new MD5(), keys[i]);
- h.add(inputs[i]);
- var d = h.close();
- expect(CryptoUtils.bytesToHex(d).startsWith(string_macs[i]), isTrue);
- expect(h.verify(macs[i]), isTrue);
- expect(h.verify(macs[(i + 1) % macs.length]), isFalse);
- expect(() => h.verify([]), throws);
- }
-}
-
-// Data from http://tools.ietf.org/html/rfc2202.
-const _HMAC_MD5_INPUTS =
- const [
- const [ 0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65 ],
- const [ 0x77, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x20, 0x79, 0x61,
- 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20,
- 0x6e, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x3f ],
- const [ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd ],
- const [ 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
- 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
- 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
- 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
- 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd ],
- const [ 0x54, 0x65, 0x73, 0x74, 0x20, 0x57, 0x69, 0x74, 0x68, 0x20,
- 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e ],
- const [ 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, 0x73, 0x69, 0x6e, 0x67,
- 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x54, 0x68,
- 0x61, 0x6e, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x53,
- 0x69, 0x7a, 0x65, 0x20, 0x4b, 0x65, 0x79, 0x20, 0x2d, 0x20,
- 0x48, 0x61, 0x73, 0x68, 0x20, 0x4b, 0x65, 0x79, 0x20, 0x46,
- 0x69, 0x72, 0x73, 0x74 ],
- const [ 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, 0x73, 0x69, 0x6e, 0x67,
- 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x54, 0x68,
- 0x61, 0x6e, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x53,
- 0x69, 0x7a, 0x65, 0x20, 0x4b, 0x65, 0x79, 0x20, 0x61, 0x6e,
- 0x64, 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x54,
- 0x68, 0x61, 0x6e, 0x20, 0x4f, 0x6e, 0x65, 0x20, 0x42, 0x6c,
- 0x6f, 0x63, 0x6b, 0x2d, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x44,
- 0x61, 0x74, 0x61 ] ];
-
-const _HMAC_MD5_KEYS =
- const [ const [0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b],
- const [ 0x4a, 0x65, 0x66, 0x65 ],
- const [0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa],
- const [ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
- 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
- 0x15, 0x16, 0x17, 0x18, 0x19 ],
- const [ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
- 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c ],
- const [ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa ],
- const [ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa ] ];
-
-const _HMAC_MD5_STRING_MACS =
- const [ '9294727a3638bb1c13f48ef8158bfc9d',
- '750c783e6ab0b503eaa86e310a5db738',
- '56be34521d144c88dbb8c733f0e8b3f6',
- '697eaf0aca3a3aea3a75164746ffaa79',
- '56461ef2342edc00f9bab995690efd4c',
- '6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd',
- '6f630fad67cda0ee1fb1f562db3aa53e' ];
-
-const _HMAC_MD5_MACS =
- const [ const [0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c, 0x13, 0xf4,
- 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d],
- const [0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03, 0xea, 0xa8,
- 0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38],
- const [0x56, 0xbe, 0x34, 0x52, 0x1d, 0x14, 0x4c, 0x88, 0xdb, 0xb8,
- 0xc7, 0x33, 0xf0, 0xe8, 0xb3, 0xf6],
- const [0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea, 0x3a, 0x75,
- 0x16, 0x47, 0x46, 0xff, 0xaa, 0x79],
- const [0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00, 0xf9, 0xba,
- 0xb9, 0x95, 0x69, 0x0e, 0xfd, 0x4c],
- const [0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f, 0x0b, 0x62,
- 0xe6, 0xce, 0x61, 0xb9, 0xd0, 0xcd],
- const [0x6f, 0x63, 0x0f, 0xad, 0x67, 0xcd, 0xa0, 0xee, 0x1f, 0xb1,
- 0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e]];
diff --git a/pkg/crypto/test/hmac_sha1_test.dart b/pkg/crypto/test/hmac_sha1_test.dart
deleted file mode 100644
index 13ff34a..0000000
--- a/pkg/crypto/test/hmac_sha1_test.dart
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Library tag to allow the test to run on Dartium.
-library hmac_sha1_test;
-
-import "package:crypto/crypto.dart";
-import "package:unittest/unittest.dart";
-
-part 'hmac_sha1_test_vectors.dart';
-
-
-void main() {
- test('standard vectors', () {
- _testStandardVectors(hmac_sha1_inputs, hmac_sha1_keys, hmac_sha1_macs);
- });
-}
-
-void _testStandardVectors(inputs, keys, macs) {
- for (var i = 0; i < inputs.length; i++) {
- var hmac = new HMAC(new SHA1(), keys[i]);
- hmac.add(inputs[i]);
- var d = hmac.close();
- expect(CryptoUtils.bytesToHex(d).startsWith(macs[i]), isTrue);
- }
-}
diff --git a/pkg/crypto/test/hmac_sha1_test_vectors.dart b/pkg/crypto/test/hmac_sha1_test_vectors.dart
deleted file mode 100644
index 26f37f9..0000000
--- a/pkg/crypto/test/hmac_sha1_test_vectors.dart
+++ /dev/null
@@ -1,917 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Standard test vectors from:
-// http://csrc.nist.gov/groups/STM/cavp/documents/mac/hmactestvectors.zip
-
-part of hmac_sha1_test;
-
-const hmac_sha1_inputs = const [
-const [ 0xfc, 0xd6, 0xd9, 0x8b, 0xef, 0x45, 0xed, 0x68, 0x50, 0x80, 0x6e, 0x96, 0xf2, 0x55, 0xfa, 0x0c, 0x81, 0x14, 0xb7, 0x28, 0x73, 0xab, 0xe8, 0xf4, 0x3c, 0x10, 0xbe, 0xa7, 0xc1, 0xdf, 0x70, 0x6f, 0x10, 0x45, 0x8e, 0x6d, 0x4e, 0x1c, 0x92, 0x01, 0xf0, 0x57, 0xb8, 0x49, 0x2f, 0xa1, 0x0f, 0xe4, 0xb5, 0x41, 0xd0, 0xfc, 0x9d, 0x41, 0xef, 0x83, 0x9a, 0xcf, 0xf1, 0xbc, 0x76, 0xe3, 0xfd, 0xfe, 0xbf, 0x22, 0x35, 0xb5, 0xbd, 0x03, 0x47, 0xa9, 0xa6, 0x30, 0x3e, 0x83, 0x15, 0x2f, 0x9f, 0x8d, 0xb9, 0x41, 0xb1, 0xb9, 0x4a, 0x8a, 0x1c, 0xe5, 0xc2, 0x73, 0xb5, 0x5d, 0xc9, 0x4d, 0x99, 0xa1, 0x71, 0x37, 0x79, 0x69, 0x23, 0x41, 0x34, 0xe7, 0xda, 0xd1, 0xab, 0x4c, 0x8e, 0x46, 0xd1, 0x8d, 0xf4, 0xdc, 0x01, 0x67, 0x64, 0xcf, 0x95, 0xa1, 0x1a, 0xc4, 0xb4, 0x91, 0xa2, 0x64, 0x6b, 0xe1 ],
-const [ 0xd6, 0x8b, 0x82, 0x8a, 0x15, 0x3f, 0x51, 0x98, 0xc0, 0x05, 0xee, 0x36, 0xc0, 0xaf, 0x2f, 0xf9, 0x2e, 0x84, 0x90, 0x75, 0x17, 0xf0, 0x1d, 0x9b, 0x7c, 0x79, 0x93, 0x46, 0x9d, 0xf5, 0xc2, 0x10, 0x78, 0xfa, 0x35, 0x6a, 0x8c, 0x97, 0x15, 0xec, 0xe2, 0x41, 0x4b, 0xe9, 0x4e, 0x10, 0xe5, 0x47, 0xf3, 0x2c, 0xbb, 0x8d, 0x05, 0x82, 0x52, 0x3e, 0xd3, 0xbb, 0x00, 0x66, 0x04, 0x6e, 0x51, 0x72, 0x20, 0x94, 0xaa, 0x44, 0x53, 0x3d, 0x2c, 0x87, 0x6e, 0x82, 0xdb, 0x40, 0x2f, 0xbb, 0x00, 0xa6, 0xc2, 0xf2, 0xcc, 0x34, 0x87, 0x97, 0x3d, 0xfc, 0x16, 0x74, 0x46, 0x3e, 0x81, 0xe4, 0x2a, 0x39, 0xd9, 0x40, 0x29, 0x41, 0xf3, 0x9b, 0x5e, 0x12, 0x6b, 0xaf, 0xe8, 0x64, 0xea, 0x16, 0x48, 0xc0, 0xa5, 0xbe, 0x0a, 0x91, 0x26, 0x97, 0xa8, 0x7e, 0x4f, 0x8e, 0xab, 0xf7, 0x9c, 0xbf, 0x13, 0x0e ],
-const [ 0xf8, 0x4d, 0x0d, 0x81, 0x3d, 0x2e, 0x9e, 0x77, 0x9e, 0x85, 0x70, 0xbd, 0xdb, 0xdf, 0x6f, 0xdc, 0x6b, 0xaa, 0xde, 0x5a, 0xcb, 0x3c, 0x4c, 0xde, 0x16, 0x18, 0xc4, 0x94, 0xd6, 0x6d, 0x45, 0xd3, 0x19, 0xe0, 0x71, 0xfe, 0xc8, 0x8b, 0x89, 0xa8, 0x35, 0x46, 0x99, 0xfb, 0xf3, 0x25, 0xf0, 0x5a, 0xea, 0x42, 0xd3, 0x45, 0xaa, 0xbc, 0x73, 0x7d, 0x00, 0xff, 0x1c, 0x69, 0xc7, 0x46, 0xae, 0xb9, 0x01, 0x5f, 0x51, 0x49, 0x27, 0xae, 0x65, 0x48, 0xbd, 0x75, 0xb8, 0x99, 0x28, 0x53, 0xfc, 0x79, 0xc4, 0x0a, 0x78, 0x63, 0x32, 0x85, 0xfd, 0x30, 0xef, 0x19, 0x1c, 0x83, 0x2b, 0x0b, 0x96, 0x64, 0xd8, 0x52, 0x14, 0x2b, 0x01, 0x9f, 0x18, 0xa0, 0x5d, 0x9b, 0x34, 0x60, 0x24, 0x6f, 0x7a, 0x83, 0x21, 0x8a, 0x33, 0x7b, 0x09, 0x9e, 0xd4, 0x3f, 0x0b, 0xec, 0x2d, 0xaa, 0xa8, 0xc2, 0xe4, 0x1d ],
-const [ 0xd6, 0xeb, 0x23, 0xc5, 0xea, 0x87, 0xfd, 0x67, 0xb9, 0x43, 0x92, 0x8b, 0xe0, 0x52, 0x18, 0x23, 0xdc, 0x50, 0x8a, 0xcb, 0x2a, 0xd5, 0xf0, 0xfd, 0xac, 0x49, 0xe0, 0x84, 0x4f, 0xfa, 0x45, 0x33, 0xeb, 0x6b, 0x5f, 0xd6, 0x6b, 0xf0, 0x0b, 0x69, 0x2d, 0x77, 0x45, 0x88, 0xac, 0xa9, 0xeb, 0x27, 0x5c, 0x32, 0xc3, 0x83, 0xd5, 0x5c, 0xc0, 0x58, 0x34, 0xe3, 0x81, 0x55, 0xbe, 0x05, 0x1b, 0xcd, 0xc7, 0xd8, 0x18, 0xaf, 0xd3, 0xe0, 0xc0, 0xb8, 0xfa, 0xe1, 0x97, 0xe7, 0x91, 0xf2, 0x26, 0x32, 0x06, 0xd3, 0xfe, 0x77, 0x0c, 0x80, 0xfb, 0xb5, 0xf8, 0x06, 0xc6, 0x7c, 0x6b, 0x96, 0x9d, 0xa2, 0x32, 0xd8, 0x57, 0x38, 0x6a, 0x81, 0xa2, 0xbc, 0xe8, 0x28, 0x90, 0x90, 0xd8, 0x56, 0x52, 0xab, 0xa3, 0xdc, 0x43, 0x8f, 0x17, 0x69, 0x28, 0x7b, 0xc2, 0x5b, 0xb5, 0xe1, 0x9e, 0xd6, 0x54, 0x1a ],
-const [ 0xa6, 0x4e, 0xc0, 0xd9, 0x33, 0x60, 0x97, 0x6b, 0x75, 0xf5, 0x0e, 0xa5, 0x32, 0xc3, 0xd5, 0x01, 0x46, 0x4a, 0x39, 0x2c, 0x00, 0xab, 0xa5, 0x72, 0xc9, 0xbd, 0x69, 0x77, 0x06, 0x5e, 0xbb, 0x29, 0x40, 0x07, 0xfb, 0xf2, 0x82, 0xa4, 0x3c, 0x32, 0x03, 0xa2, 0xff, 0xec, 0x05, 0x49, 0x41, 0xc0, 0xfd, 0x4c, 0xb9, 0x19, 0xf4, 0x9e, 0x5b, 0xa7, 0x2d, 0x88, 0x20, 0x10, 0x08, 0xf9, 0x09, 0xe2, 0x26, 0x1d, 0x62, 0xcd, 0xce, 0x30, 0x44, 0x0f, 0x90, 0x95, 0x5d, 0x2f, 0x28, 0x22, 0xf3, 0xee, 0xa5, 0xbf, 0x27, 0x7b, 0xca, 0x2f, 0x77, 0xe6, 0xb4, 0x2d, 0x87, 0xd7, 0xbd, 0xbb, 0x21, 0x80, 0xa1, 0xb7, 0x7a, 0xd0, 0xdf, 0xaf, 0xb7, 0xe9, 0x62, 0xf6, 0xaf, 0xd5, 0x61, 0xf7, 0xf3, 0x74, 0x84, 0xca, 0x0c, 0xb9, 0x48, 0x05, 0x03, 0x16, 0xa4, 0xd5, 0x27, 0x35, 0xed, 0x4d, 0x0a, 0xe9 ],
-const [ 0x5f, 0x45, 0x86, 0x57, 0xda, 0x5a, 0xec, 0x73, 0xd8, 0xaa, 0x5e, 0x34, 0x8b, 0xed, 0xc6, 0xaf, 0x48, 0x73, 0x41, 0x59, 0x3a, 0x0a, 0x74, 0x12, 0x56, 0x22, 0x23, 0x62, 0x91, 0x2f, 0xff, 0x02, 0x51, 0x4f, 0xc0, 0x9e, 0x22, 0x2d, 0x74, 0xd9, 0xab, 0x25, 0x17, 0x92, 0xe0, 0xa9, 0x63, 0x65, 0x79, 0xe3, 0xe9, 0x75, 0xa2, 0x9b, 0x61, 0x69, 0xf4, 0x5c, 0x3f, 0xb5, 0xa4, 0xd2, 0x87, 0x1b, 0xfa, 0x77, 0xe1, 0x71, 0x05, 0x6f, 0xf0, 0xa4, 0x8e, 0xaf, 0xe0, 0xfd, 0x4a, 0x65, 0x3e, 0xa3, 0x53, 0x94, 0x0d, 0x62, 0xd9, 0xff, 0x16, 0xaa, 0x15, 0x49, 0x7f, 0xdb, 0x7f, 0x5a, 0x9f, 0xbf, 0x41, 0x05, 0x11, 0x58, 0xeb, 0xe7, 0x07, 0xdd, 0x68, 0x92, 0xe1, 0xff, 0x31, 0xeb, 0xff, 0x70, 0xc0, 0xd0, 0xd3, 0xa6, 0x48, 0xfe, 0x3a, 0xdd, 0xa3, 0x32, 0x0c, 0x5b, 0x8c, 0x8f, 0xf1, 0xf7 ],
-const [ 0x20, 0x10, 0x0e, 0xd9, 0x97, 0xab, 0x74, 0x37, 0x06, 0x07, 0xae, 0xeb, 0x0b, 0xd2, 0xf6, 0x4f, 0x6a, 0x56, 0xc7, 0x04, 0x0d, 0x64, 0xfd, 0x8a, 0x49, 0x8a, 0x38, 0x0d, 0x63, 0x8c, 0x81, 0x82, 0x53, 0x12, 0x30, 0xf3, 0xc7, 0x9f, 0x0c, 0x17, 0x6b, 0xc2, 0xb5, 0x26, 0x68, 0x90, 0x3f, 0xeb, 0x2a, 0x51, 0x20, 0x1b, 0x67, 0x7a, 0x4c, 0xe5, 0x5d, 0xdc, 0x9e, 0xca, 0x5b, 0x1a, 0x7a, 0xaf, 0x82, 0x60, 0xb1, 0x31, 0xcd, 0x52, 0xa4, 0x38, 0x4f, 0x43, 0xad, 0xcf, 0xbc, 0xa8, 0xba, 0x33, 0x2b, 0xcc, 0x3b, 0x29, 0x1a, 0xc5, 0x3f, 0x95, 0xb3, 0xa6, 0xd9, 0x49, 0x4e, 0xf6, 0xc9, 0x1b, 0x36, 0x61, 0x58, 0x3a, 0xb0, 0xae, 0x84, 0xc2, 0x39, 0xf1, 0x5d, 0x8d, 0x10, 0x02, 0xaf, 0x4d, 0xf4, 0x2d, 0xe1, 0xd7, 0x2f, 0x2b, 0x1d, 0xc2, 0xd3, 0x51, 0xb2, 0x31, 0x44, 0x08, 0xb6, 0xed ],
-const [ 0x32, 0x23, 0x74, 0x43, 0x02, 0xf4, 0x81, 0xdd, 0x32, 0xa9, 0xd4, 0xd1, 0xce, 0xaf, 0x72, 0x22, 0x9b, 0x45, 0xf4, 0x13, 0xa1, 0xe8, 0x2d, 0x3c, 0xe7, 0x0f, 0x0d, 0xde, 0x7e, 0x19, 0xc5, 0x74, 0xc0, 0x84, 0x2c, 0x8a, 0xda, 0x5f, 0x62, 0xd2, 0x88, 0x02, 0xb3, 0x75, 0x20, 0xfc, 0xbe, 0xa7, 0xd2, 0x4d, 0xd6, 0x7e, 0x2e, 0xd6, 0xa8, 0x04, 0xe6, 0x0d, 0x1e, 0x8b, 0xd6, 0xf5, 0x84, 0x40, 0x41, 0x4e, 0xea, 0x03, 0x5e, 0x08, 0xc9, 0x76, 0x13, 0xfe, 0xe9, 0x54, 0x00, 0xe1, 0x81, 0x05, 0xbf, 0x72, 0xa1, 0x6f, 0x6a, 0xf5, 0xcd, 0x0e, 0x5e, 0xe2, 0xea, 0x47, 0x3f, 0xdd, 0x5f, 0xf9, 0x3d, 0xe8, 0x74, 0x56, 0x95, 0xd8, 0xfd, 0xf1, 0x5a, 0x05, 0x3d, 0x17, 0x75, 0x46, 0x05, 0x63, 0xeb, 0x1d, 0x1c, 0x8d, 0x5e, 0x2e, 0xe3, 0x83, 0xd7, 0xf6, 0x39, 0xbb, 0xc2, 0xb9, 0x9d, 0xc7 ],
-const [ 0xfb, 0x09, 0x1d, 0xdd, 0x95, 0xb1, 0x00, 0xdf, 0xcf, 0x89, 0x2d, 0x78, 0xe5, 0xe7, 0x70, 0xd3, 0xa3, 0x7b, 0x8c, 0x38, 0x85, 0xdf, 0x80, 0x3c, 0x1d, 0x6f, 0x09, 0x35, 0xb5, 0x5b, 0x68, 0xf1, 0x36, 0xfb, 0x65, 0xa8, 0x48, 0x62, 0x94, 0x2e, 0xbb, 0x35, 0xd7, 0x6d, 0x26, 0xbe, 0x24, 0x13, 0xcd, 0x3c, 0x89, 0x88, 0xc8, 0x7d, 0x6d, 0x23, 0x62, 0xaf, 0x18, 0x9d, 0xc0, 0x74, 0x76, 0xc6, 0xc3, 0x34, 0x17, 0x76, 0x2e, 0xb7, 0x7b, 0xc7, 0x0c, 0xf3, 0x8d, 0x81, 0x4c, 0x22, 0x6d, 0xd6, 0xaf, 0x18, 0x72, 0x50, 0xe4, 0xd4, 0x70, 0x07, 0xf1, 0x55, 0x36, 0x17, 0xd4, 0xaf, 0x5b, 0x51, 0x6a, 0x5d, 0x3b, 0x31, 0x91, 0xd9, 0x3c, 0x10, 0x89, 0x6a, 0x56, 0x9b, 0xa1, 0x3d, 0xd2, 0x84, 0x0f, 0xb8, 0x51, 0x78, 0x1f, 0x0b, 0x11, 0x50, 0x90, 0x08, 0x6c, 0x8b, 0x3a, 0x34, 0xa1, 0xfc ],
-const [ 0x97, 0xf2, 0x76, 0x9d, 0xc0, 0x81, 0xf1, 0xfd, 0x71, 0x38, 0xad, 0x61, 0xbd, 0x30, 0x74, 0x3c, 0xd8, 0x1a, 0x45, 0x65, 0xcf, 0x22, 0xa4, 0x1a, 0x76, 0x1a, 0x35, 0x44, 0xa2, 0xd4, 0x89, 0xfc, 0x99, 0xcf, 0x38, 0x4f, 0xc7, 0x16, 0x30, 0x3e, 0xb3, 0x66, 0x4c, 0x09, 0x31, 0x8f, 0x29, 0xae, 0xd8, 0x1c, 0x35, 0xac, 0xb6, 0x36, 0x08, 0x0c, 0x43, 0xc6, 0xf8, 0xa2, 0x94, 0xda, 0xe7, 0x91, 0xd1, 0x4a, 0x60, 0x0d, 0xe9, 0x9b, 0xe3, 0x65, 0x84, 0x23, 0x7c, 0x40, 0x3a, 0x6e, 0x9a, 0x26, 0x02, 0xe1, 0x1f, 0x43, 0xed, 0x9d, 0xb4, 0x68, 0x14, 0xa7, 0x5f, 0x53, 0xce, 0x45, 0x57, 0x30, 0x27, 0xab, 0x17, 0x60, 0x8e, 0xd6, 0xb1, 0x78, 0xce, 0xb9, 0x65, 0x8d, 0x40, 0x97, 0x72, 0xaf, 0x3e, 0xb0, 0x2c, 0xb3, 0xda, 0x1f, 0x4f, 0x36, 0xd0, 0x03, 0x93, 0xde, 0xba, 0xdd, 0x80, 0xe3 ],
-const [ 0x76, 0xa6, 0x9c, 0xdd, 0x9f, 0xf8, 0x7e, 0xe6, 0xb0, 0x7f, 0xfe, 0x6d, 0x49, 0x6c, 0x54, 0x56, 0x0d, 0xe1, 0xe9, 0xf6, 0x4c, 0x06, 0x1a, 0xcb, 0xe0, 0x59, 0x38, 0x6a, 0x54, 0x45, 0xd3, 0xb8, 0x4c, 0xf7, 0x38, 0x5d, 0x20, 0x6d, 0x38, 0x76, 0xcb, 0xcf, 0x2b, 0x8a, 0x04, 0x03, 0x35, 0xc0, 0xaa, 0x7c, 0xc8, 0x4f, 0x65, 0x52, 0x6a, 0x35, 0x8b, 0x98, 0xb9, 0x2c, 0x40, 0xea, 0xac, 0xda, 0xe2, 0x45, 0x1b, 0x48, 0xa4, 0x1b, 0x82, 0x95, 0x78, 0xa7, 0x02, 0xec, 0x33, 0x7f, 0xa8, 0xb3, 0xeb, 0x68, 0xf2, 0x05, 0xa4, 0x6d, 0x8f, 0x63, 0x2c, 0x33, 0x67, 0xa6, 0x44, 0x87, 0xdb, 0x38, 0x00, 0x39, 0x4e, 0x84, 0x71, 0x2d, 0xe4, 0xab, 0x81, 0xaf, 0x89, 0x79, 0x1d, 0x07, 0x36, 0x97, 0x9a, 0x4d, 0x6f, 0x02, 0x51, 0x7f, 0x11, 0xbb, 0x8d, 0xd1, 0x4a, 0xc1, 0xa8, 0x44, 0xe9, 0x3c ],
-const [ 0x36, 0x58, 0x21, 0x2a, 0x14, 0xb6, 0x5a, 0xc3, 0xbd, 0x9e, 0x3d, 0x90, 0x39, 0xc6, 0x31, 0xa9, 0x4b, 0xb4, 0x3c, 0x4e, 0x49, 0x38, 0x77, 0x85, 0x2a, 0x3a, 0xbf, 0x05, 0xe1, 0xb5, 0xae, 0x53, 0xea, 0x04, 0xc9, 0x2b, 0x22, 0x5d, 0xfb, 0x21, 0xdb, 0x9b, 0x43, 0x88, 0x30, 0x40, 0xa9, 0x93, 0x96, 0xba, 0x76, 0xba, 0xb4, 0xe5, 0xa4, 0x5f, 0x75, 0xd2, 0x94, 0xb2, 0x5b, 0xc7, 0xff, 0xd2, 0x16, 0x86, 0x2f, 0x35, 0x55, 0xd2, 0x6f, 0x49, 0xdc, 0x30, 0xc0, 0x5b, 0xd6, 0xeb, 0xcd, 0xb9, 0x6d, 0x5a, 0x21, 0x13, 0x99, 0x65, 0x98, 0x27, 0x35, 0x46, 0x13, 0x9e, 0x58, 0x8d, 0x70, 0x30, 0xe2, 0x67, 0xba, 0x0f, 0x55, 0x1f, 0x9c, 0x83, 0xe7, 0xe5, 0x1c, 0xd1, 0xd5, 0xcf, 0x86, 0x62, 0xf9, 0x1d, 0xa5, 0x21, 0x9f, 0xc1, 0x39, 0x25, 0x95, 0x1f, 0xa6, 0x90, 0x81, 0x11, 0xea, 0xb7 ],
-const [ 0xfc, 0xd6, 0xd3, 0xab, 0x67, 0x57, 0x4d, 0x8f, 0x0b, 0xbf, 0x5a, 0xd1, 0x49, 0x37, 0x96, 0x6d, 0xbd, 0x43, 0x86, 0xa9, 0x28, 0xe6, 0x2a, 0x53, 0xad, 0x0d, 0xd1, 0x4a, 0x41, 0x2b, 0x31, 0x40, 0x5d, 0x20, 0xb7, 0xbd, 0xf5, 0x5f, 0x1c, 0x67, 0xae, 0x50, 0x39, 0x82, 0x4c, 0xf3, 0x1c, 0xb3, 0x69, 0xc7, 0x5b, 0x09, 0x6d, 0xea, 0xa8, 0x3d, 0xba, 0x81, 0xa6, 0x39, 0x27, 0x5a, 0xfc, 0xd8, 0xb0, 0xd0, 0xa7, 0xed, 0x6c, 0xef, 0x94, 0x86, 0xbf, 0xd9, 0x6e, 0x72, 0xd0, 0x68, 0xb5, 0x00, 0x3d, 0x15, 0x10, 0x0a, 0x0e, 0x19, 0xe4, 0x32, 0xe8, 0xd2, 0x25, 0x6c, 0x83, 0x67, 0x6c, 0xbd, 0x5e, 0xaf, 0x4a, 0x42, 0xb2, 0x4f, 0xdd, 0x73, 0xa4, 0x23, 0xa0, 0xa9, 0xbe, 0xe0, 0x87, 0xde, 0xa0, 0xf7, 0x4c, 0xb4, 0xf3, 0xbc, 0x03, 0xb9, 0x9f, 0xc7, 0xf5, 0xea, 0x3e, 0x9a, 0xab, 0x76 ],
-const [ 0xc8, 0xf1, 0x6e, 0xfe, 0x63, 0x65, 0x81, 0xb6, 0xab, 0x7a, 0xb7, 0xf3, 0x94, 0x26, 0xbd, 0x03, 0x3d, 0xdc, 0xcb, 0x8e, 0xc5, 0x0d, 0x1b, 0x31, 0x60, 0xef, 0x9f, 0x69, 0xaa, 0x7d, 0xf3, 0xb3, 0x3b, 0xbf, 0x91, 0xf1, 0x7b, 0x4b, 0x44, 0x10, 0xb7, 0x0c, 0xdf, 0xe8, 0x75, 0x42, 0x2e, 0x63, 0x05, 0xca, 0x2d, 0xe2, 0x59, 0xa0, 0x78, 0xdc, 0x17, 0xa2, 0x03, 0xc8, 0xeb, 0x96, 0x0b, 0x3e, 0x22, 0x6f, 0x4c, 0x59, 0x75, 0xcc, 0x75, 0x5f, 0x22, 0xc2, 0xd9, 0xa4, 0x42, 0xdb, 0x67, 0xab, 0x56, 0x5e, 0xdc, 0x8f, 0x23, 0xd1, 0x37, 0xa1, 0xc0, 0xbd, 0x6d, 0x53, 0xed, 0xb1, 0x5f, 0x55, 0xa6, 0x89, 0x09, 0xfd, 0xf8, 0xf0, 0xfc, 0xec, 0x14, 0x24, 0x0e, 0xef, 0xa2, 0xfa, 0x50, 0x23, 0x57, 0x21, 0x40, 0x5d, 0xca, 0xaa, 0x40, 0xc8, 0x83, 0xc8, 0x47, 0xd0, 0x55, 0xd5, 0xd7, 0x3f ],
-const [ 0xca, 0xd5, 0x34, 0xc8, 0x66, 0x29, 0xfc, 0x60, 0x0b, 0x38, 0x13, 0x8a, 0x7f, 0x3e, 0x1a, 0x70, 0x1b, 0xc4, 0xbd, 0x1f, 0x86, 0x5f, 0x96, 0xda, 0xc3, 0x9a, 0x4e, 0xb4, 0x6e, 0x31, 0x06, 0x5e, 0x42, 0x80, 0xf5, 0x3d, 0xdf, 0x3a, 0x52, 0xbf, 0xca, 0x5e, 0x74, 0xf0, 0xb6, 0x67, 0x38, 0x48, 0x02, 0xc4, 0xa3, 0xc7, 0x82, 0x87, 0xc8, 0x45, 0x82, 0x61, 0xec, 0x03, 0x08, 0xce, 0xe9, 0x85, 0x5a, 0x8d, 0xd0, 0xa4, 0xc0, 0x53, 0xd2, 0xdf, 0x8b, 0xc0, 0x61, 0xf2, 0x56, 0x92, 0x92, 0xaa, 0x8c, 0x19, 0xc6, 0xf7, 0x2b, 0xeb, 0x89, 0x43, 0xc7, 0xd8, 0xba, 0x02, 0xd1, 0x20, 0xed, 0x8a, 0x19, 0xe4, 0x0d, 0x25, 0x92, 0xdb, 0x46, 0x65, 0x55, 0x46, 0x21, 0xb8, 0xe9, 0x26, 0xf1, 0x3c, 0xc2, 0xac, 0x6f, 0xd5, 0x07, 0xf1, 0xa1, 0x7c, 0x99, 0xe7, 0x00, 0xda, 0x50, 0x90, 0xd9, 0x15 ],
-const [ 0x96, 0xfa, 0x56, 0x19, 0xfa, 0xc6, 0x48, 0x84, 0x3d, 0xb7, 0x88, 0xcb, 0x8e, 0x90, 0xdc, 0x6f, 0xfd, 0x6e, 0xfe, 0x13, 0x32, 0xab, 0xf0, 0x81, 0x5f, 0x03, 0x90, 0xee, 0x73, 0xf5, 0x6c, 0x7f, 0x91, 0x6c, 0xd7, 0x0c, 0xc0, 0x9f, 0x3d, 0x23, 0xe4, 0x36, 0xb3, 0x50, 0xed, 0xae, 0xd2, 0x9b, 0x4e, 0xfe, 0xc6, 0x53, 0xb0, 0x7b, 0xa2, 0x0a, 0xe8, 0xf9, 0xf6, 0xe1, 0x27, 0x33, 0xa4, 0x06, 0x71, 0x6d, 0xef, 0x7a, 0x51, 0x57, 0xd5, 0x18, 0xca, 0x35, 0x9f, 0xd3, 0x90, 0x3d, 0xb6, 0x3f, 0x79, 0x40, 0xb8, 0x53, 0x2e, 0x8d, 0xcb, 0x6d, 0x26, 0x13, 0x32, 0x96, 0xd5, 0xc5, 0x1e, 0x07, 0x20, 0x43, 0xc6, 0xed, 0x15, 0xb6, 0xb9, 0x6a, 0xd9, 0xfb, 0x73, 0xdc, 0xe1, 0x05, 0x2f, 0x61, 0x65, 0x7c, 0xfd, 0x9b, 0x12, 0xaa, 0x14, 0xb0, 0x00, 0x98, 0x69, 0x95, 0xe3, 0x74, 0x81, 0x8d ],
-const [ 0x91, 0xf8, 0xec, 0x84, 0x8d, 0x6f, 0x81, 0x14, 0x31, 0xcb, 0xde, 0xee, 0x15, 0x0b, 0x93, 0xaf, 0x6f, 0x67, 0x8b, 0xe9, 0x9c, 0x90, 0x3f, 0x81, 0xfc, 0x38, 0x29, 0x55, 0x03, 0xd5, 0x7c, 0x22, 0x8d, 0xa2, 0x12, 0xa6, 0x72, 0xe7, 0xa6, 0x01, 0x5b, 0x7b, 0x43, 0x61, 0xd4, 0x87, 0xfc, 0xde, 0xa2, 0x8c, 0xde, 0xa3, 0x56, 0xa8, 0x23, 0x4f, 0x22, 0x15, 0xa8, 0x9b, 0xec, 0xf2, 0xa2, 0x3c, 0xa1, 0x46, 0x8c, 0x0b, 0xcc, 0x42, 0x64, 0x63, 0x67, 0xc6, 0x16, 0xca, 0xf0, 0x27, 0x39, 0xd4, 0xc0, 0x30, 0xf9, 0x45, 0x99, 0x66, 0x54, 0x76, 0x7e, 0x90, 0x8a, 0xfa, 0xc7, 0x77, 0xce, 0x80, 0x74, 0xeb, 0x42, 0xfb, 0xc2, 0x06, 0x22, 0x01, 0xfc, 0xb5, 0x3f, 0x71, 0x94, 0x73, 0xb0, 0x59, 0x72, 0x58, 0xc4, 0x17, 0x8c, 0x53, 0x3b, 0xbe, 0xb7, 0xb4, 0xb5, 0xbb, 0xbc, 0xed, 0x6a, 0xb8 ],
-const [ 0x5a, 0x52, 0x91, 0x14, 0xba, 0x6b, 0xda, 0xb6, 0x9b, 0xad, 0xa5, 0xe8, 0x91, 0x6f, 0xb6, 0xeb, 0x22, 0x2c, 0x71, 0x25, 0x6f, 0x91, 0x9d, 0xd1, 0x17, 0xd3, 0x69, 0xf6, 0x58, 0x46, 0xac, 0x95, 0x77, 0x2c, 0x71, 0x27, 0x62, 0xca, 0xb3, 0x47, 0x95, 0xc2, 0x65, 0xab, 0x3a, 0x9c, 0xb6, 0x58, 0x94, 0xa6, 0x92, 0x16, 0x9d, 0xfe, 0x6c, 0x22, 0xee, 0xed, 0x3b, 0x24, 0xe0, 0x76, 0xc2, 0x60, 0xf1, 0x2f, 0x15, 0x30, 0x69, 0x50, 0x59, 0xb2, 0x3d, 0x0a, 0xcb, 0xbe, 0x33, 0x1a, 0x04, 0x1b, 0x47, 0x9d, 0x7b, 0xf2, 0x4d, 0x26, 0x4b, 0x82, 0xd9, 0x0e, 0x36, 0x16, 0x5c, 0x0b, 0xea, 0x34, 0x8f, 0x04, 0x84, 0x18, 0x15, 0x24, 0x53, 0x61, 0x5c, 0x2e, 0xde, 0x09, 0xc4, 0x10, 0x28, 0x9a, 0x03, 0xba, 0x32, 0x9f, 0xc8, 0x30, 0xc2, 0x59, 0x9e, 0xde, 0x63, 0xb4, 0x13, 0x2d, 0xad, 0x79 ],
-const [ 0xf6, 0xd9, 0x56, 0x5e, 0xf9, 0x7e, 0xa1, 0x17, 0x48, 0x68, 0x9e, 0x26, 0x3f, 0x52, 0xb4, 0xaf, 0x88, 0x0f, 0xf5, 0xc8, 0xed, 0x12, 0x95, 0x22, 0x6a, 0x34, 0xa1, 0xec, 0x87, 0xb2, 0xed, 0xf4, 0xe5, 0x75, 0x4f, 0x10, 0x16, 0x97, 0x0a, 0xbc, 0xb1, 0x22, 0x8d, 0x04, 0xa6, 0x1b, 0x5e, 0xa5, 0xd0, 0xbf, 0x51, 0x6f, 0xc9, 0x0c, 0xfd, 0xed, 0x02, 0x83, 0x70, 0x48, 0x13, 0x2d, 0x22, 0x69, 0x4f, 0xdc, 0x28, 0x5e, 0x9c, 0xb3, 0xaa, 0xff, 0x82, 0xe8, 0x97, 0xd1, 0x81, 0xc9, 0x97, 0x2a, 0xa8, 0xfd, 0x42, 0x96, 0x63, 0x0d, 0x8f, 0x7a, 0x95, 0x23, 0x8f, 0xf7, 0xe6, 0x11, 0x5b, 0x11, 0x5f, 0x94, 0x4b, 0x11, 0x34, 0xda, 0x68, 0x27, 0xe0, 0x43, 0x24, 0x54, 0x77, 0x65, 0x49, 0x87, 0x38, 0x52, 0x30, 0x07, 0x62, 0x1d, 0x33, 0x10, 0x4a, 0x9a, 0x64, 0xc1, 0xa9, 0x66, 0x80, 0x36 ],
-const [ 0x68, 0xde, 0x2a, 0x68, 0xbd, 0x42, 0x15, 0xac, 0x21, 0xbf, 0xe2, 0xb6, 0xf0, 0xd2, 0x6f, 0xfd, 0x90, 0xd4, 0xff, 0xc9, 0xf9, 0x72, 0xdd, 0x47, 0x74, 0x5e, 0x43, 0xdd, 0xa2, 0x44, 0x79, 0xbb, 0xc1, 0x00, 0x41, 0xb3, 0x2b, 0x0e, 0x73, 0x4a, 0x1f, 0x41, 0xe5, 0x0f, 0xc4, 0xb8, 0x8d, 0x2b, 0x6b, 0x0f, 0xea, 0x3a, 0x15, 0xd2, 0x9f, 0x59, 0x35, 0x37, 0x62, 0x80, 0xb7, 0x0c, 0x14, 0x13, 0x40, 0xee, 0x31, 0xb3, 0xb8, 0xbc, 0x6b, 0x5a, 0x06, 0x4b, 0x92, 0xa7, 0x1a, 0x5b, 0xb7, 0x76, 0x31, 0xca, 0x91, 0xb4, 0x54, 0x08, 0x20, 0x72, 0x22, 0xcb, 0x8f, 0x37, 0xd0, 0x04, 0x5f, 0x9b, 0x6e, 0x11, 0xc2, 0x11, 0x6c, 0x34, 0x45, 0x05, 0x5c, 0x44, 0xb2, 0x27, 0xf9, 0xa2, 0x35, 0x06, 0x69, 0x6f, 0xbd, 0xe0, 0xbf, 0xfc, 0xa5, 0xb8, 0xc4, 0x82, 0x94, 0xaa, 0xf7, 0x14, 0xa2, 0x7c ],
-const [ 0xe1, 0xdb, 0x8f, 0x7b, 0xcc, 0x0e, 0x5c, 0x22, 0xee, 0xa3, 0xe8, 0xdc, 0xe3, 0x9a, 0xc2, 0x50, 0xc8, 0x68, 0x1d, 0x30, 0x95, 0xf8, 0xc8, 0x61, 0xad, 0xf0, 0x60, 0x5c, 0xb4, 0x35, 0xc4, 0xd4, 0xa1, 0xb1, 0xc9, 0x99, 0x14, 0x54, 0x2f, 0xbc, 0xe9, 0x58, 0xd4, 0xf4, 0x0d, 0xca, 0x28, 0x40, 0x90, 0x46, 0xe1, 0xce, 0xfc, 0x02, 0xf0, 0x1c, 0xe6, 0x0d, 0xb3, 0x5d, 0xc2, 0xd9, 0x6c, 0x1e, 0xfc, 0xf8, 0xf2, 0x29, 0x44, 0x23, 0xa6, 0xa9, 0x29, 0x80, 0xa9, 0x90, 0xe9, 0x25, 0x4c, 0x36, 0x87, 0xd8, 0xc8, 0x42, 0x1f, 0x18, 0x30, 0xce, 0x77, 0x62, 0xa3, 0xc6, 0xd6, 0xad, 0xc6, 0x91, 0x19, 0x37, 0x71, 0xf4, 0x03, 0x83, 0xa9, 0x33, 0xd5, 0xa2, 0xcf, 0x79, 0x1e, 0xb3, 0x16, 0x79, 0xd5, 0xa6, 0x3b, 0x56, 0xa5, 0x45, 0x70, 0xc0, 0x88, 0x74, 0x99, 0x61, 0x97, 0xb7, 0xba, 0x77 ],
-const [ 0x28, 0x5d, 0x72, 0x49, 0xef, 0x30, 0xbf, 0x4b, 0x6e, 0x5f, 0x6b, 0xdc, 0x3c, 0xba, 0x55, 0x70, 0xc7, 0x7f, 0x11, 0x5d, 0xe0, 0xd0, 0x8a, 0xee, 0x7a, 0x63, 0xec, 0xb2, 0xae, 0x7c, 0xc1, 0x1a, 0x03, 0x18, 0x5a, 0x43, 0xed, 0x6b, 0x70, 0x11, 0x93, 0x8d, 0x0b, 0x7d, 0xd5, 0x71, 0xa3, 0x30, 0x8e, 0x16, 0x85, 0x50, 0x16, 0x01, 0x79, 0x9a, 0x0c, 0xea, 0xa2, 0xb1, 0x52, 0xb6, 0xa5, 0xb5, 0x58, 0xa5, 0x0e, 0x18, 0x9e, 0xcd, 0xef, 0xad, 0x74, 0xc7, 0xc9, 0x02, 0x05, 0xa8, 0xb0, 0xf0, 0x93, 0x32, 0xab, 0x70, 0x04, 0x4c, 0x5a, 0xb0, 0x9e, 0xb0, 0xdb, 0x67, 0x0f, 0xe4, 0xed, 0x65, 0xb0, 0x6b, 0x56, 0x6e, 0x0a, 0x3c, 0x83, 0x48, 0x9a, 0x73, 0x6f, 0x13, 0xd1, 0x47, 0xc6, 0xd9, 0x5f, 0x3c, 0x49, 0x66, 0xb1, 0x99, 0x74, 0x5a, 0xb8, 0x1d, 0x5e, 0x7c, 0xed, 0xee, 0xe2, 0x51 ],
-const [ 0x2b, 0x7e, 0x03, 0x68, 0x0c, 0x9c, 0xa6, 0xc7, 0x59, 0xb6, 0x92, 0x93, 0x83, 0xca, 0xdf, 0x56, 0x7e, 0x4e, 0x38, 0xdd, 0x72, 0x16, 0x31, 0x3c, 0xb4, 0x77, 0xdb, 0x12, 0xf4, 0xad, 0x97, 0x0e, 0xb8, 0x7a, 0x27, 0xb2, 0x09, 0x10, 0x0b, 0x57, 0x6b, 0x31, 0x0a, 0x72, 0x13, 0x95, 0x0f, 0x15, 0x55, 0x8c, 0x36, 0xb9, 0x5c, 0xe4, 0x27, 0x3a, 0x1d, 0x0d, 0xa3, 0x23, 0x8d, 0x7b, 0x5c, 0x2c, 0x12, 0x4c, 0x0a, 0x01, 0x38, 0x2b, 0xbb, 0x45, 0xa6, 0x74, 0x6a, 0xd7, 0x50, 0x98, 0xd4, 0x54, 0xee, 0xc4, 0x87, 0xdd, 0xac, 0xbd, 0x3c, 0x1a, 0x23, 0x0f, 0x66, 0x7e, 0x88, 0x66, 0x0b, 0xcd, 0x23, 0x3c, 0xd3, 0xdc, 0x03, 0xb4, 0x5f, 0x99, 0xf1, 0xc6, 0xdb, 0x4a, 0xa2, 0x9d, 0xd7, 0x1a, 0x31, 0x3d, 0x52, 0xd1, 0xcc, 0x69, 0x18, 0xe3, 0xad, 0xc4, 0x4f, 0xac, 0x4b, 0x36, 0x4c, 0xfa ],
-const [ 0x59, 0x88, 0xc7, 0x94, 0xc1, 0xf1, 0xe8, 0x5d, 0x23, 0xd6, 0x5b, 0xe0, 0x40, 0xc0, 0x12, 0x9b, 0xb8, 0xa6, 0xbb, 0xcc, 0xd8, 0x6c, 0x3b, 0x1e, 0xb3, 0xa9, 0x58, 0x87, 0x74, 0xad, 0xb5, 0x71, 0xf2, 0xc3, 0x04, 0x18, 0x85, 0xb3, 0x77, 0x33, 0x19, 0x8b, 0x77, 0xd6, 0x80, 0x9f, 0x99, 0x97, 0x0d, 0xcf, 0xce, 0xf0, 0x5e, 0x08, 0xda, 0xe4, 0x79, 0x0e, 0x07, 0xe5, 0x1b, 0x78, 0x1a, 0xf6, 0x4c, 0xfc, 0x86, 0x0d, 0x37, 0xec, 0xe0, 0xbb, 0x39, 0x01, 0x93, 0x0e, 0x38, 0x58, 0xd5, 0xb7, 0x36, 0xba, 0xd9, 0x68, 0x25, 0x20, 0x46, 0x80, 0xfd, 0x76, 0xe9, 0xea, 0x0d, 0xa0, 0xa6, 0x42, 0x8e, 0xbb, 0xb5, 0x3a, 0x7e, 0xa5, 0x0b, 0x3d, 0xac, 0xbf, 0x15, 0x52, 0x0f, 0xf1, 0xac, 0x42, 0x5b, 0xef, 0x46, 0xfd, 0xd6, 0xbb, 0x69, 0x3a, 0x68, 0x6c, 0x66, 0x5e, 0xf2, 0x2d, 0x43, 0x9f ],
-const [ 0xe8, 0xbf, 0xc5, 0xc0, 0x9e, 0xc4, 0x80, 0x73, 0x19, 0xd8, 0xf7, 0x36, 0x95, 0x56, 0xe7, 0x65, 0x4e, 0x98, 0x16, 0x39, 0xe8, 0xc5, 0xdd, 0x3f, 0x0f, 0xea, 0xe3, 0x08, 0x5b, 0x4d, 0x2b, 0x22, 0x76, 0xfe, 0x51, 0x48, 0x80, 0xae, 0x10, 0xd6, 0xb2, 0xc4, 0x08, 0x80, 0x42, 0xae, 0xbe, 0x42, 0x87, 0x75, 0xe5, 0x9a, 0x5e, 0x95, 0xdc, 0xf6, 0xcc, 0x0b, 0x77, 0x68, 0xe5, 0xaf, 0x02, 0xa1, 0xec, 0xc4, 0x83, 0x1d, 0xbb, 0xce, 0x40, 0x9b, 0x65, 0xa3, 0x81, 0xd0, 0x1b, 0xc5, 0x97, 0x5c, 0x4c, 0xef, 0x1d, 0xfd, 0x10, 0xee, 0x7e, 0x03, 0xc7, 0xb2, 0xb8, 0x04, 0xfd, 0xa5, 0x5f, 0xd0, 0x92, 0x3c, 0xe4, 0xa7, 0x17, 0xcb, 0x17, 0xaa, 0x7a, 0x9d, 0xeb, 0x90, 0xe6, 0x44, 0x79, 0x9a, 0xe5, 0x2e, 0x48, 0xc9, 0xc8, 0x79, 0xcc, 0x4e, 0x48, 0x08, 0x2c, 0x42, 0x6d, 0xd7, 0x49, 0x97 ],
-const [ 0x7d, 0x70, 0xcf, 0xf8, 0xdf, 0x77, 0x77, 0x0e, 0xaf, 0x0c, 0xe6, 0x71, 0xb7, 0xa1, 0x5d, 0xaf, 0x5b, 0xdd, 0x75, 0x48, 0x2a, 0xe1, 0x58, 0x12, 0xb3, 0xcf, 0x30, 0xdc, 0x9a, 0x8d, 0xe0, 0x52, 0xeb, 0xc6, 0xf3, 0x21, 0xad, 0x32, 0xd1, 0x5b, 0xbb, 0x18, 0x39, 0x1c, 0xcf, 0x11, 0xeb, 0x6e, 0xe0, 0x0e, 0xa5, 0x6a, 0xae, 0x9c, 0x51, 0xa0, 0x9b, 0x67, 0x7d, 0xb9, 0xbc, 0xfd, 0x0b, 0x5b, 0x30, 0xd5, 0x2a, 0x4d, 0xb0, 0x90, 0x85, 0xdc, 0x68, 0x7e, 0xba, 0x7d, 0x05, 0x64, 0x0d, 0xb3, 0x10, 0x7d, 0x5e, 0x33, 0x7a, 0xbe, 0x58, 0x47, 0x78, 0x5e, 0xec, 0x70, 0x91, 0x96, 0xfd, 0x4f, 0xf4, 0xa6, 0x5d, 0xc5, 0x10, 0x18, 0xf9, 0x5a, 0x5f, 0x48, 0x50, 0xdb, 0x82, 0x24, 0x2a, 0x47, 0x93, 0x31, 0x86, 0xed, 0xb7, 0xcf, 0xd4, 0xce, 0xf2, 0xbd, 0x64, 0x48, 0x40, 0xdf, 0x1f, 0xf6 ],
-const [ 0xf9, 0x59, 0x8e, 0x9f, 0x4e, 0xce, 0x15, 0x9b, 0xeb, 0x89, 0x73, 0x17, 0xf6, 0x25, 0xa6, 0xa7, 0x08, 0xe9, 0xaa, 0xeb, 0x8e, 0x9d, 0xf7, 0x06, 0x70, 0x9c, 0x4c, 0x52, 0xf1, 0x2b, 0xab, 0x53, 0xd7, 0x09, 0xa4, 0xe9, 0xcb, 0x48, 0xd7, 0xc9, 0x02, 0x5a, 0xb5, 0x2d, 0x1d, 0x6f, 0x86, 0xcb, 0x4e, 0xff, 0xb0, 0x04, 0xbd, 0xa2, 0x36, 0x5f, 0x2a, 0x28, 0x7f, 0x35, 0xd3, 0xe6, 0x59, 0xae, 0x98, 0x4e, 0x3d, 0xec, 0x5d, 0xc3, 0xd5, 0x85, 0xb0, 0xab, 0xbb, 0x37, 0xab, 0xc5, 0x84, 0xd7, 0x1c, 0xbc, 0xfd, 0x8b, 0xe4, 0xfd, 0xb4, 0x39, 0x9d, 0xc6, 0xba, 0x3f, 0x80, 0x80, 0xa8, 0x65, 0x85, 0x4f, 0xe0, 0x0f, 0xcb, 0xe7, 0x15, 0xb8, 0x3b, 0xa1, 0x0e, 0x9b, 0x69, 0xce, 0xa6, 0xb3, 0xba, 0x4b, 0x18, 0xe6, 0xcc, 0x56, 0x79, 0x7e, 0x12, 0x9f, 0x86, 0xd8, 0xbf, 0xa2, 0xa0, 0x60 ],
-const [ 0x0f, 0x80, 0xcc, 0xfe, 0x5a, 0xde, 0x38, 0x6b, 0x40, 0xe4, 0x3f, 0x48, 0x13, 0x6a, 0xed, 0xbe, 0x69, 0x84, 0x93, 0x30, 0x27, 0x4b, 0x76, 0x1e, 0xde, 0xe1, 0xc4, 0x4a, 0x5b, 0xaf, 0xcc, 0x19, 0x79, 0xf1, 0x6d, 0x3b, 0x3a, 0x75, 0xcf, 0x8e, 0x16, 0x9f, 0x52, 0x40, 0x93, 0xb1, 0xc4, 0x35, 0x16, 0x49, 0xd7, 0xa8, 0xf9, 0x2c, 0xd2, 0x14, 0xdd, 0x41, 0x86, 0x55, 0x42, 0xe1, 0x84, 0x0a, 0x55, 0x4e, 0x8d, 0x3f, 0x08, 0x80, 0x4a, 0x49, 0x68, 0x28, 0x3d, 0xf0, 0x2c, 0xef, 0xf8, 0xd4, 0x89, 0xfe, 0x8d, 0x09, 0x4e, 0xc4, 0x45, 0x05, 0x2c, 0xf3, 0x95, 0xbc, 0x55, 0xcc, 0x4d, 0x09, 0x4a, 0x9d, 0x13, 0x50, 0xed, 0x88, 0x10, 0x62, 0xde, 0x85, 0xe9, 0xa0, 0x04, 0xaa, 0xf1, 0x64, 0x6a, 0xab, 0x9d, 0x9c, 0x4d, 0x9d, 0x38, 0xb8, 0x73, 0xff, 0xd7, 0xc7, 0xbe, 0xfa, 0x90, 0xdc ],
-const [ 0x49, 0x86, 0x7d, 0xfd, 0x01, 0x5a, 0x50, 0xdf, 0x8c, 0x67, 0x61, 0x41, 0xee, 0xef, 0x02, 0xfa, 0x2c, 0x34, 0x75, 0x15, 0xbb, 0x25, 0x02, 0x8d, 0x39, 0x3d, 0x47, 0x55, 0x5b, 0xa9, 0xd0, 0x9b, 0x27, 0xa9, 0xe7, 0x4e, 0x63, 0x38, 0xad, 0xde, 0x4d, 0xef, 0x6a, 0x43, 0x8c, 0x27, 0x22, 0x40, 0x67, 0x5e, 0x69, 0xe9, 0x35, 0xdc, 0x77, 0x63, 0x14, 0x95, 0x7f, 0xeb, 0xde, 0x52, 0x3d, 0x19, 0x59, 0x0c, 0xcf, 0x66, 0xae, 0x98, 0xc5, 0xed, 0x1d, 0x8a, 0x7b, 0x6e, 0xee, 0x53, 0xa7, 0x98, 0xab, 0xac, 0x2e, 0x88, 0x8c, 0x38, 0x3c, 0x8d, 0x33, 0x64, 0x93, 0x2e, 0x99, 0x93, 0x23, 0x6e, 0x49, 0x78, 0xdb, 0x4e, 0xcc, 0xc2, 0xc0, 0x94, 0x64, 0xff, 0x3c, 0xcb, 0xfd, 0xba, 0xb8, 0x8b, 0x60, 0xe7, 0x6d, 0xfa, 0xaa, 0x82, 0x76, 0x93, 0xfc, 0x72, 0x2a, 0x26, 0x75, 0xb3, 0xaa, 0x20 ],
-const [ 0x20, 0x4c, 0xdf, 0x0f, 0x38, 0x42, 0x80, 0xe3, 0xd5, 0x5f, 0x8d, 0xd0, 0x10, 0xe8, 0x86, 0x66, 0x08, 0x0d, 0x2d, 0x72, 0x2a, 0x1c, 0xe7, 0xcf, 0xaf, 0xf5, 0x64, 0x7f, 0x65, 0xbe, 0x82, 0xfa, 0xb3, 0xd8, 0x6f, 0xc6, 0xd7, 0x11, 0x0e, 0x48, 0x73, 0x1b, 0x9d, 0xda, 0x48, 0x3d, 0x94, 0x1e, 0x41, 0x48, 0xd0, 0x91, 0xb3, 0xcd, 0xf0, 0x63, 0xe3, 0x8d, 0x00, 0x86, 0xc9, 0x31, 0x55, 0x05, 0x13, 0x3b, 0xb7, 0x97, 0x6d, 0x3d, 0xc6, 0x74, 0x00, 0x48, 0x96, 0x67, 0x38, 0xa8, 0x9d, 0x24, 0xcb, 0xce, 0xcf, 0xdd, 0xf7, 0x8e, 0x07, 0x10, 0x0b, 0x8b, 0xa9, 0xa3, 0x28, 0xef, 0x85, 0x32, 0x49, 0x5f, 0xff, 0xa8, 0x81, 0x2e, 0x6d, 0x0c, 0x84, 0xd0, 0xc1, 0x9e, 0x69, 0x92, 0x68, 0x23, 0xae, 0x89, 0x72, 0x7d, 0x7d, 0xc8, 0xf2, 0x7e, 0x2d, 0xd6, 0xa8, 0xfe, 0x0c, 0x60, 0xdd, 0x2b ],
-const [ 0x44, 0xc7, 0xcc, 0x06, 0xad, 0x29, 0x0f, 0x3a, 0x54, 0xa9, 0x70, 0xb6, 0x40, 0x01, 0x4c, 0xb5, 0xd1, 0xe6, 0x18, 0x23, 0x52, 0x45, 0x99, 0x01, 0xcd, 0xcd, 0x57, 0x0c, 0x23, 0xad, 0x4f, 0x99, 0x5b, 0x9f, 0xe8, 0xc4, 0x3b, 0x25, 0x28, 0xc9, 0x15, 0x12, 0x28, 0xb2, 0xe4, 0x4d, 0xc5, 0x33, 0x98, 0xd2, 0x99, 0xd2, 0xad, 0xf9, 0x2a, 0x4a, 0x02, 0xfb, 0x60, 0x32, 0xe9, 0xb2, 0x3d, 0xda, 0x7a, 0xa0, 0xc8, 0x76, 0x2e, 0x33, 0x4a, 0x7e, 0xa9, 0x47, 0xbd, 0x54, 0xd6, 0xed, 0x82, 0x28, 0x39, 0x6b, 0x52, 0x19, 0x81, 0x84, 0x77, 0x9c, 0x5d, 0xf9, 0x3c, 0x22, 0x91, 0x4f, 0xa2, 0xf5, 0x49, 0xd3, 0x54, 0x63, 0xad, 0xdc, 0xdd, 0x1f, 0xb5, 0x50, 0x19, 0xe4, 0x3f, 0x69, 0xe9, 0x5b, 0x5f, 0xb9, 0x2b, 0x3f, 0xf6, 0x6c, 0xea, 0xbf, 0x86, 0xce, 0xd1, 0x24, 0x44, 0x0d, 0xe6, 0xb3 ],
-const [ 0x78, 0x7f, 0xda, 0xa9, 0x0a, 0x2d, 0xe3, 0x93, 0x7e, 0x79, 0x42, 0xe6, 0x71, 0x1f, 0x16, 0x5a, 0x89, 0xb9, 0xe0, 0x77, 0xfe, 0x32, 0x2c, 0xab, 0x59, 0x7d, 0x74, 0x9a, 0x7c, 0x87, 0x41, 0xb5, 0xe3, 0x6a, 0x93, 0x0e, 0x29, 0xe3, 0x83, 0x6a, 0xce, 0x06, 0x27, 0x98, 0x37, 0x30, 0xb6, 0x02, 0xf6, 0x3e, 0xec, 0x82, 0x4c, 0xfc, 0xb0, 0x77, 0xec, 0xe0, 0xf5, 0x17, 0x02, 0xf9, 0xde, 0x07, 0x74, 0x22, 0x25, 0x29, 0x68, 0x7b, 0xbd, 0xb5, 0x06, 0x1a, 0xb6, 0x8b, 0x7f, 0xfd, 0x62, 0xc7, 0x4e, 0x43, 0xb6, 0x96, 0xbe, 0x9c, 0xf2, 0x49, 0xac, 0xff, 0x85, 0xa8, 0x8e, 0x9b, 0x2a, 0x89, 0xb4, 0x0f, 0x58, 0xa1, 0xce, 0xdd, 0xd9, 0x99, 0xaf, 0x1c, 0xb8, 0x64, 0x50, 0x6e, 0x61, 0xd1, 0x18, 0x32, 0x04, 0x5c, 0x5a, 0xfb, 0x3a, 0x4a, 0x20, 0x40, 0xeb, 0xf5, 0x27, 0x55, 0x6f, 0x64 ],
-const [ 0xf9, 0xa9, 0xc1, 0x6e, 0x3a, 0x4b, 0xef, 0xf0, 0xd3, 0x64, 0x30, 0xc0, 0xe7, 0xe1, 0xd6, 0xbd, 0x68, 0x34, 0x94, 0x98, 0xd2, 0x40, 0xd8, 0xdc, 0x19, 0x75, 0x5a, 0x2c, 0xdf, 0x3c, 0xf5, 0xcc, 0xeb, 0x95, 0xb7, 0x64, 0xd7, 0xfe, 0x34, 0x00, 0x08, 0x98, 0x1f, 0x5a, 0xe4, 0x85, 0x1b, 0x5c, 0x3e, 0x94, 0xce, 0xe1, 0x15, 0x20, 0x37, 0xbc, 0x7f, 0x35, 0x42, 0xfb, 0xe0, 0xf5, 0x9a, 0x6d, 0x5f, 0x3a, 0xbf, 0x61, 0x9b, 0x7d, 0x58, 0xb1, 0x99, 0xf7, 0xca, 0xff, 0x02, 0x05, 0x09, 0x3f, 0x8b, 0xd1, 0xaf, 0x75, 0xb4, 0x2f, 0x4b, 0xc0, 0xb5, 0xc5, 0xfb, 0x98, 0xb5, 0x6f, 0x3d, 0x54, 0x3e, 0xe2, 0x02, 0xef, 0xee, 0x8f, 0x04, 0x0b, 0x6f, 0xca, 0x5a, 0x36, 0xa9, 0x2b, 0x49, 0x6d, 0x35, 0x34, 0x5e, 0xde, 0x15, 0x35, 0xb9, 0xf2, 0xa3, 0x6d, 0xac, 0x8b, 0xc8, 0x72, 0x85, 0x8b ],
-const [ 0xb9, 0x49, 0xdf, 0x3b, 0x02, 0x87, 0x1b, 0xea, 0x09, 0x76, 0x87, 0x3a, 0x9c, 0x76, 0x94, 0x2a, 0xc9, 0x34, 0xce, 0x63, 0xac, 0x29, 0x56, 0xd2, 0x85, 0x64, 0x92, 0x97, 0x0d, 0x8a, 0x23, 0x1e, 0x0b, 0x1b, 0x17, 0x8b, 0x22, 0xf6, 0x60, 0x5c, 0xed, 0x20, 0x85, 0x49, 0x4e, 0xc1, 0x98, 0x6f, 0x02, 0x6f, 0x68, 0xae, 0x79, 0xaf, 0xf7, 0x50, 0xe5, 0xb9, 0x2f, 0xeb, 0x92, 0x7c, 0xd0, 0x88, 0x75, 0xe2, 0xad, 0x04, 0x07, 0x55, 0x18, 0xb7, 0x54, 0x82, 0x9b, 0x54, 0x4e, 0x5d, 0xe9, 0x10, 0x68, 0x65, 0x13, 0x07, 0x60, 0x29, 0xff, 0xdb, 0x5c, 0x0b, 0x17, 0x9e, 0x39, 0x44, 0x3e, 0xf2, 0x20, 0x28, 0x08, 0x6e, 0x5a, 0xab, 0x2a, 0x44, 0x65, 0x25, 0x2f, 0x21, 0x47, 0x52, 0x6d, 0x55, 0x22, 0x9d, 0x38, 0x34, 0x09, 0x9e, 0x55, 0xbc, 0x12, 0xe1, 0xb1, 0x78, 0xac, 0xe9, 0x53, 0xa3 ],
-const [ 0x85, 0x0d, 0x67, 0x37, 0x23, 0x78, 0x9c, 0x78, 0x00, 0x40, 0x62, 0x0a, 0xd9, 0x45, 0xec, 0xe6, 0x18, 0x50, 0xa9, 0x4f, 0x41, 0xef, 0xc6, 0x4c, 0x8c, 0x81, 0xf4, 0x5b, 0xd4, 0x8d, 0x6b, 0x64, 0xaf, 0x58, 0x2e, 0xec, 0xdf, 0xb6, 0x91, 0x8b, 0xe9, 0x20, 0xf9, 0xa0, 0x03, 0x07, 0xe4, 0x43, 0x33, 0x68, 0x29, 0x7b, 0xb6, 0xa1, 0x80, 0xb1, 0x9f, 0x83, 0x44, 0x65, 0xc0, 0xa8, 0x78, 0x20, 0xcd, 0x06, 0x09, 0xaa, 0xbf, 0xc5, 0x52, 0x7c, 0x77, 0x4e, 0xe5, 0x78, 0xa4, 0xa5, 0x89, 0xd8, 0xe6, 0xf8, 0x7f, 0x65, 0x34, 0x78, 0x0a, 0xe9, 0x7b, 0x67, 0x2e, 0xe6, 0x87, 0x72, 0xb7, 0x88, 0x27, 0x42, 0x7d, 0xd9, 0x8c, 0x4e, 0xe7, 0x34, 0xf3, 0xf3, 0xae, 0xfc, 0x84, 0xc6, 0xe3, 0x8d, 0x79, 0x29, 0x34, 0x73, 0x82, 0x1c, 0x6b, 0xdb, 0x68, 0x56, 0x37, 0x46, 0xf1, 0x95, 0x2f, 0x85 ],
-const [ 0xb4, 0xc3, 0x0b, 0x45, 0x13, 0x25, 0xa9, 0x62, 0x1e, 0x25, 0x8a, 0x5d, 0x91, 0xde, 0x6d, 0xcb, 0x42, 0x1c, 0xfe, 0x79, 0x57, 0xc1, 0xa7, 0xf5, 0xb6, 0x67, 0xaa, 0x50, 0xbd, 0x46, 0x6d, 0x23, 0x34, 0x58, 0x14, 0xd0, 0x7f, 0xbc, 0x55, 0x0a, 0x18, 0x59, 0x88, 0x98, 0x3d, 0xc3, 0xfe, 0x55, 0xe6, 0x62, 0x94, 0x7c, 0xfa, 0xd1, 0x88, 0x22, 0xc2, 0x84, 0x8b, 0x04, 0x9e, 0xae, 0x17, 0x83, 0xf7, 0x61, 0x02, 0xed, 0x74, 0xf7, 0x54, 0xfe, 0x71, 0xb2, 0x56, 0xa7, 0xad, 0x9f, 0xeb, 0x0d, 0x42, 0xc0, 0x23, 0xd5, 0xdb, 0x69, 0x0e, 0x9f, 0x21, 0xeb, 0xce, 0xd0, 0x76, 0x70, 0xf0, 0x95, 0xe6, 0x26, 0xfd, 0x25, 0x5a, 0xa0, 0x4b, 0x46, 0x0f, 0x79, 0x19, 0x12, 0x47, 0x3a, 0xdb, 0xfb, 0x3f, 0x7d, 0xd3, 0x0d, 0x60, 0x53, 0xe1, 0x73, 0xb9, 0xe4, 0x9c, 0x3d, 0xad, 0x55, 0xa1, 0x60 ],
-const [ 0x48, 0x7e, 0xe9, 0x33, 0xa4, 0x92, 0x75, 0x72, 0x7c, 0x8e, 0x36, 0x58, 0x8e, 0x4c, 0x68, 0xc2, 0x95, 0xa5, 0x51, 0x6a, 0xb4, 0x41, 0xc8, 0x5b, 0x18, 0xae, 0xf8, 0xa9, 0xda, 0xb0, 0x62, 0x5e, 0x22, 0xd8, 0x21, 0xb7, 0x92, 0x58, 0x72, 0x91, 0xe2, 0x16, 0x73, 0x1e, 0xc7, 0xff, 0x2b, 0xdc, 0x1a, 0x9e, 0xcb, 0xc8, 0x36, 0xed, 0x33, 0xcf, 0xa2, 0x6b, 0xb8, 0x85, 0xf0, 0x6e, 0x25, 0x19, 0xe4, 0xbb, 0xff, 0x89, 0xd9, 0x54, 0x0e, 0x12, 0x61, 0x91, 0x18, 0xeb, 0x2c, 0x72, 0xf0, 0x32, 0x2b, 0x34, 0xb0, 0x27, 0xf4, 0x22, 0x42, 0x98, 0x69, 0xae, 0x25, 0x9c, 0x94, 0xc0, 0x6d, 0x84, 0xd6, 0x4e, 0x0c, 0x0f, 0x41, 0x2d, 0x51, 0xdd, 0x42, 0x27, 0xae, 0x26, 0x83, 0x4d, 0xbe, 0xac, 0x0f, 0x8e, 0x86, 0xee, 0xb8, 0x89, 0xfc, 0x9f, 0xb6, 0xa0, 0xc5, 0x56, 0x90, 0x4e, 0x43, 0x87 ],
-const [ 0x9c, 0x3a, 0x85, 0x24, 0xf8, 0xd6, 0xd9, 0xec, 0x90, 0x7b, 0xe8, 0x03, 0xba, 0xef, 0xee, 0x0a, 0xa0, 0x8b, 0x74, 0xad, 0x4f, 0xf6, 0x0f, 0x86, 0x0a, 0x33, 0x4a, 0x3e, 0xe4, 0xde, 0xe1, 0xf6, 0x8e, 0xb2, 0x30, 0xe5, 0x6d, 0x4f, 0xea, 0x42, 0xef, 0x3a, 0x0e, 0x64, 0x20, 0x26, 0x17, 0x28, 0x78, 0x72, 0x74, 0x93, 0xf7, 0xf2, 0x37, 0xb8, 0x75, 0xf2, 0x11, 0xdc, 0x33, 0x78, 0x7e, 0xd9, 0xb5, 0xca, 0x3d, 0xc0, 0xd4, 0x30, 0x03, 0xc2, 0x0f, 0xfb, 0x70, 0x51, 0x22, 0xc6, 0x42, 0x82, 0xda, 0xfc, 0xc9, 0xb6, 0x27, 0x9b, 0x9b, 0x79, 0x73, 0x37, 0x88, 0xaa, 0x32, 0x41, 0xd0, 0xdd, 0xba, 0x89, 0x94, 0xfd, 0x55, 0x02, 0x8b, 0x36, 0x95, 0xc5, 0xf6, 0x11, 0xe8, 0x59, 0xd6, 0xe1, 0x6c, 0x32, 0x5c, 0x5f, 0x05, 0x77, 0xa1, 0x91, 0xac, 0x09, 0x97, 0xf0, 0x0a, 0xc0, 0x40, 0xc9 ],
-const [ 0xf1, 0xf9, 0xc8, 0x95, 0xab, 0x63, 0xfc, 0xdd, 0x69, 0xae, 0xd7, 0x63, 0xd9, 0x98, 0xa7, 0x88, 0xe9, 0x2d, 0xdb, 0x52, 0x94, 0x47, 0x73, 0x13, 0xfc, 0x56, 0xb5, 0x45, 0xba, 0x5d, 0x22, 0xb9, 0x72, 0x3d, 0xa8, 0xf1, 0xaa, 0x36, 0x19, 0xca, 0xdc, 0xab, 0xdc, 0x5d, 0xc9, 0x25, 0xe3, 0x28, 0x11, 0x9b, 0xdc, 0x69, 0x01, 0xf1, 0xac, 0xcb, 0xac, 0xbe, 0x19, 0x44, 0x3d, 0x52, 0xc6, 0x3e, 0x8b, 0xf8, 0x65, 0xf5, 0xee, 0x78, 0x28, 0x20, 0x52, 0xe0, 0x78, 0xd3, 0x89, 0x84, 0xea, 0xa4, 0xe6, 0x44, 0x6f, 0x0d, 0x07, 0x0d, 0xcb, 0x11, 0xf2, 0xa3, 0x48, 0x22, 0x64, 0x9d, 0xab, 0x43, 0x65, 0xb1, 0x67, 0x6a, 0x20, 0x31, 0x11, 0x28, 0xf2, 0xd6, 0x14, 0x8b, 0xc1, 0xbd, 0xa6, 0x44, 0x8f, 0xaf, 0xfa, 0x05, 0x4e, 0xa5, 0xb7, 0x2d, 0xf6, 0x8b, 0xaa, 0xa7, 0xd6, 0x45, 0xb7, 0x0f ],
-const [ 0x5b, 0x1a, 0x67, 0x54, 0xc3, 0xc3, 0x0c, 0xc2, 0x9d, 0x04, 0x17, 0x79, 0x32, 0x59, 0x22, 0x78, 0x14, 0x54, 0x89, 0x7c, 0x9c, 0x3f, 0x7c, 0xc6, 0x97, 0x03, 0x52, 0x1e, 0x3d, 0x49, 0x20, 0x18, 0x63, 0xde, 0x8b, 0x96, 0xf1, 0x5c, 0xda, 0x8e, 0x95, 0x07, 0x50, 0x0e, 0xb9, 0xf5, 0xb8, 0x7d, 0xb3, 0x72, 0x41, 0x23, 0x3c, 0xa2, 0x8c, 0xec, 0x24, 0x68, 0x04, 0x68, 0x44, 0x87, 0x6e, 0x17, 0xb3, 0x07, 0xc0, 0xe4, 0x3d, 0xdb, 0x37, 0xef, 0x10, 0xc0, 0xa4, 0x8f, 0xb9, 0x68, 0x07, 0x98, 0x4f, 0xd8, 0x5e, 0xd9, 0xee, 0x0f, 0xbf, 0xe9, 0x67, 0xe8, 0xa5, 0x24, 0x36, 0x41, 0x88, 0xf0, 0xb5, 0x5d, 0xb0, 0x45, 0x8f, 0x87, 0x4a, 0x6c, 0x76, 0xf8, 0xbc, 0x06, 0x19, 0xfb, 0x36, 0x51, 0x50, 0x4f, 0x89, 0xa7, 0x9a, 0xcd, 0x3d, 0x47, 0xca, 0x4a, 0xdd, 0x58, 0xfd, 0xbf, 0x96, 0x2b ],
-const [ 0x43, 0x4a, 0x42, 0x27, 0x3f, 0x11, 0xfc, 0x06, 0xbc, 0x8e, 0xed, 0x40, 0x24, 0x50, 0xf1, 0x91, 0x53, 0x99, 0xd7, 0xe0, 0xa7, 0x1c, 0x12, 0x20, 0x56, 0x05, 0xb1, 0x74, 0x05, 0x3a, 0x92, 0x96, 0x96, 0xe0, 0xd2, 0x79, 0x41, 0x22, 0x87, 0x2d, 0xe6, 0x2d, 0xb2, 0x04, 0xa1, 0x7f, 0x6f, 0xf3, 0xa0, 0x62, 0x6f, 0x3a, 0x31, 0xb3, 0xa8, 0x47, 0x1f, 0xe8, 0x4b, 0xd8, 0x3f, 0x52, 0xf7, 0x61, 0x46, 0x9e, 0x2c, 0xad, 0xdd, 0xa2, 0x02, 0xc7, 0xf8, 0x57, 0x1b, 0x1b, 0x63, 0x21, 0xd6, 0xd9, 0x9d, 0x57, 0xc5, 0x9a, 0xea, 0xff, 0x62, 0x46, 0xa4, 0xd9, 0xfd, 0x35, 0xd2, 0xa0, 0xf9, 0x94, 0xfc, 0x8c, 0x38, 0x0b, 0x3d, 0x1b, 0xd4, 0x9c, 0x99, 0x11, 0x10, 0xcf, 0x91, 0xbd, 0x8e, 0x0c, 0xf5, 0x7f, 0xc2, 0x48, 0xfa, 0x87, 0xa6, 0xe4, 0x8c, 0xdf, 0xaf, 0xd1, 0xe5, 0xac, 0x00, 0xf9 ],
-const [ 0xf7, 0x53, 0xf3, 0xe9, 0xb4, 0xbd, 0x18, 0x95, 0xa2, 0x59, 0x49, 0x2b, 0xa1, 0x60, 0x71, 0x3f, 0x00, 0xac, 0x8e, 0x24, 0xdb, 0xbf, 0xab, 0x0d, 0xa7, 0x07, 0x0e, 0x72, 0x0b, 0x61, 0xb2, 0xb6, 0xf1, 0xdb, 0xf8, 0x06, 0xde, 0xbe, 0x99, 0x84, 0x7e, 0xcc, 0xdf, 0xa5, 0x84, 0xc6, 0x15, 0xd7, 0xb1, 0x31, 0x3c, 0x68, 0x31, 0x5a, 0xff, 0xa3, 0x2e, 0x98, 0xe9, 0x3c, 0xa0, 0xd1, 0xd6, 0xee, 0x62, 0x3f, 0xa7, 0x62, 0x8b, 0x74, 0x3a, 0x53, 0xfb, 0x9c, 0x9a, 0xf0, 0x34, 0x03, 0x72, 0x81, 0x6c, 0xd7, 0xc8, 0x4e, 0xe0, 0x2e, 0xe7, 0xbc, 0x6a, 0x4a, 0x9d, 0xba, 0x56, 0x1c, 0xa7, 0x5b, 0x72, 0x08, 0x6a, 0xc4, 0x64, 0xe8, 0xe4, 0x49, 0x40, 0x53, 0xe1, 0xd3, 0x5a, 0x1f, 0x72, 0x85, 0x59, 0x24, 0x9b, 0x9f, 0x8d, 0x43, 0x4c, 0xa2, 0x83, 0xa8, 0x92, 0xb5, 0xd6, 0x4b, 0x0f, 0x47 ],
-const [ 0xc5, 0xff, 0x34, 0xdd, 0x39, 0x8c, 0x10, 0xfc, 0x02, 0x02, 0x77, 0xab, 0x85, 0x05, 0x0c, 0x51, 0xa1, 0xc4, 0xd2, 0x38, 0x88, 0x7e, 0x9b, 0x34, 0xcd, 0x46, 0xc3, 0x86, 0xbe, 0x03, 0x1d, 0xff, 0xf3, 0xba, 0x2e, 0x69, 0x27, 0x10, 0x99, 0x22, 0x47, 0x0a, 0xdb, 0x0a, 0xc9, 0x18, 0x38, 0x9f, 0x3f, 0x52, 0xf5, 0x67, 0x2c, 0x01, 0xc8, 0x8f, 0x16, 0x61, 0x8d, 0xd1, 0xdc, 0xa5, 0x3a, 0x9b, 0x4a, 0x3c, 0x15, 0x6d, 0xeb, 0x53, 0x25, 0x82, 0x1e, 0x9b, 0xe6, 0xb4, 0x6c, 0x4c, 0x41, 0x9a, 0x19, 0x6a, 0xba, 0xf3, 0xf9, 0x47, 0xec, 0x47, 0x85, 0x49, 0x32, 0xcb, 0x2e, 0xed, 0xa8, 0x86, 0xf2, 0x0c, 0x52, 0xb2, 0x2c, 0x5d, 0x9a, 0x65, 0xb0, 0x3c, 0x00, 0x70, 0x17, 0xa9, 0x0d, 0x87, 0x58, 0x94, 0x88, 0xa3, 0x99, 0x58, 0xed, 0xa5, 0x44, 0x85, 0x1b, 0x3c, 0x5c, 0xe2, 0x4d, 0x08 ],
-const [ 0x5e, 0x09, 0xb4, 0x21, 0x39, 0xc3, 0xe0, 0xc7, 0x09, 0x52, 0x7f, 0x4f, 0x86, 0xd7, 0x36, 0x97, 0xaa, 0xbc, 0xdb, 0xec, 0x1d, 0x51, 0x8a, 0xcc, 0xf1, 0xb7, 0xf6, 0xf0, 0x8f, 0xfe, 0xfe, 0x8a, 0xf1, 0x8a, 0x81, 0xcb, 0x12, 0xbb, 0x72, 0xa8, 0xa3, 0xcd, 0x2f, 0xde, 0x00, 0xfc, 0x0e, 0x33, 0x62, 0xec, 0x39, 0xff, 0x56, 0x49, 0xbd, 0xec, 0x6e, 0xaa, 0xdd, 0xfa, 0x36, 0xbc, 0xac, 0xc6, 0x69, 0x9c, 0xdb, 0x0b, 0x65, 0x84, 0xcf, 0x69, 0xdd, 0xaa, 0xf6, 0x65, 0xce, 0x65, 0x5c, 0xb2, 0xb4, 0x92, 0x79, 0xaf, 0xfd, 0x36, 0x4e, 0x30, 0xbe, 0x65, 0xb0, 0x81, 0xa5, 0x62, 0xe3, 0xa8, 0x2f, 0x07, 0x6a, 0xeb, 0x1a, 0x67, 0x1e, 0x92, 0x1e, 0xb3, 0x7e, 0xee, 0xd8, 0x5a, 0x46, 0x9a, 0x07, 0x74, 0x43, 0x01, 0xfa, 0x61, 0x65, 0x20, 0x49, 0xad, 0x16, 0x8e, 0xc4, 0x37, 0xca, 0xb9 ],
-const [ 0x6e, 0xd7, 0xbb, 0x66, 0x53, 0xef, 0x66, 0xce, 0x21, 0xb7, 0xba, 0x0e, 0xe6, 0x16, 0xd0, 0x71, 0x14, 0xc6, 0x4d, 0x92, 0x28, 0x64, 0x2b, 0x15, 0x8a, 0xc3, 0xbc, 0x94, 0xb4, 0x86, 0xeb, 0xdc, 0x97, 0xee, 0xc6, 0x5a, 0x3a, 0xf0, 0x39, 0xd0, 0xa5, 0x8b, 0x1c, 0x4c, 0xfd, 0x58, 0x71, 0x5b, 0xf0, 0x63, 0xe6, 0x7a, 0x54, 0x39, 0xa2, 0xcd, 0x0a, 0x42, 0x3d, 0x14, 0x29, 0x51, 0x10, 0xda, 0x58, 0x7a, 0xb0, 0xef, 0x7c, 0x24, 0xb5, 0x19, 0x94, 0x5e, 0xc0, 0x07, 0xe0, 0x77, 0xbc, 0x86, 0x49, 0xc8, 0x63, 0xf8, 0xfd, 0xd5, 0x04, 0x01, 0x5a, 0x95, 0x84, 0x83, 0x0d, 0x0d, 0xa4, 0xcd, 0x7b, 0x24, 0x81, 0x0f, 0x60, 0xb2, 0x61, 0x11, 0xb5, 0xda, 0xac, 0x25, 0xd8, 0x9a, 0x39, 0x5b, 0xe7, 0xa0, 0xcb, 0xf3, 0x6c, 0x5f, 0xdc, 0x18, 0x40, 0x63, 0x99, 0xcb, 0xa9, 0xe1, 0x2d, 0x1d ],
-const [ 0xa3, 0xce, 0x88, 0x99, 0xdf, 0x10, 0x22, 0xe8, 0xd2, 0xd5, 0x39, 0xb4, 0x7b, 0xf0, 0xe3, 0x09, 0xc6, 0x6f, 0x84, 0x09, 0x5e, 0x21, 0x43, 0x8e, 0xc3, 0x55, 0xbf, 0x11, 0x9c, 0xe5, 0xfd, 0xcb, 0x4e, 0x73, 0xa6, 0x19, 0xcd, 0xf3, 0x6f, 0x25, 0xb3, 0x69, 0xd8, 0xc3, 0x8f, 0xf4, 0x19, 0x99, 0x7f, 0x0c, 0x59, 0x83, 0x01, 0x08, 0x22, 0x36, 0x06, 0xe3, 0x12, 0x23, 0x48, 0x3f, 0xd3, 0x9e, 0xde, 0xaa, 0x4d, 0x3f, 0x0d, 0x21, 0x19, 0x88, 0x62, 0xd2, 0x39, 0xc9, 0xfd, 0x26, 0x07, 0x41, 0x30, 0xff, 0x6c, 0x86, 0x49, 0x3f, 0x52, 0x27, 0xab, 0x89, 0x5c, 0x8f, 0x24, 0x4b, 0xd4, 0x2c, 0x7a, 0xfc, 0xe5, 0xd1, 0x47, 0xa2, 0x0a, 0x59, 0x07, 0x98, 0xc6, 0x8e, 0x70, 0x8e, 0x96, 0x49, 0x02, 0xd1, 0x24, 0xda, 0xde, 0xcd, 0xbd, 0xa9, 0xdb, 0xd0, 0x05, 0x1e, 0xd7, 0x10, 0xe9, 0xbf ],
-const [ 0x52, 0xb1, 0x13, 0x61, 0x4b, 0x80, 0xb9, 0x70, 0x51, 0x0f, 0x65, 0xa2, 0x5d, 0x46, 0xed, 0xc0, 0x23, 0xd9, 0xc7, 0xb8, 0xe7, 0xca, 0x7c, 0x41, 0x92, 0x30, 0x59, 0xc2, 0x05, 0x36, 0x68, 0x70, 0xad, 0x66, 0x9f, 0xb7, 0x57, 0x28, 0x56, 0xdc, 0x46, 0x85, 0xff, 0xe0, 0x83, 0x31, 0x11, 0xa7, 0x75, 0xc9, 0x45, 0x5a, 0xb1, 0x59, 0x05, 0x09, 0x13, 0x21, 0x21, 0x95, 0x0e, 0x99, 0xc5, 0xcd, 0x40, 0xb2, 0xa8, 0xd7, 0x4a, 0x5f, 0x85, 0xd2, 0xde, 0x54, 0xcf, 0xb9, 0x1a, 0x0d, 0xa1, 0x8a, 0x14, 0x13, 0xf4, 0xa8, 0xb6, 0x7b, 0x14, 0x7e, 0xcc, 0xaf, 0x55, 0x66, 0x5b, 0x71, 0x01, 0xc9, 0x34, 0x1c, 0x96, 0x87, 0xca, 0x2d, 0x2e, 0x99, 0x41, 0x03, 0x3f, 0xf5, 0xc7, 0xe3, 0x84, 0xb1, 0x27, 0x3f, 0x3b, 0x6c, 0x9b, 0x38, 0x91, 0xea, 0xe2, 0x61, 0x5b, 0xfe, 0x93, 0xc6, 0x06, 0xad ],
-const [ 0x9f, 0x33, 0x60, 0xcf, 0x8f, 0x54, 0x65, 0xc7, 0xd2, 0x4d, 0x7c, 0xbd, 0x7b, 0xef, 0x00, 0x31, 0x5c, 0xd4, 0xf4, 0xac, 0x29, 0xf2, 0x45, 0xf6, 0xdb, 0x71, 0x4e, 0x88, 0x53, 0xba, 0xa1, 0x44, 0x40, 0xd1, 0x05, 0x64, 0x42, 0xe4, 0xbb, 0xb1, 0x50, 0x24, 0x06, 0xf5, 0x57, 0xd3, 0xea, 0xb2, 0x23, 0x9e, 0x33, 0x14, 0x83, 0x2e, 0xb9, 0x25, 0xa8, 0xfa, 0xe3, 0x40, 0xcf, 0x5f, 0x6a, 0xc8, 0x20, 0xf2, 0x5f, 0x19, 0xd5, 0x15, 0x70, 0xbf, 0x9e, 0xc8, 0x67, 0xe7, 0x44, 0xc2, 0xf3, 0x12, 0x8d, 0xc1, 0xab, 0x11, 0x61, 0x1e, 0x50, 0x2d, 0x2a, 0xa4, 0x52, 0xa6, 0x81, 0xa2, 0x96, 0x5f, 0x06, 0x3f, 0x77, 0xd7, 0x8f, 0x0e, 0x0b, 0x5b, 0x86, 0xe2, 0xa7, 0x7a, 0x8c, 0xe4, 0xa5, 0xba, 0x62, 0xe2, 0x64, 0x89, 0x0a, 0xea, 0x91, 0x76, 0x29, 0x18, 0xa5, 0xa1, 0xb0, 0xac, 0xaf, 0x70 ],
-const [ 0xf5, 0xa0, 0x7e, 0x37, 0x41, 0xf0, 0x31, 0x74, 0xc6, 0xef, 0xcb, 0x1f, 0x9f, 0x18, 0x6d, 0x1f, 0x23, 0x3b, 0x36, 0x70, 0x73, 0xc5, 0x6e, 0x81, 0x4f, 0x42, 0x04, 0xdb, 0x2e, 0x20, 0x3b, 0x04, 0x8d, 0xb6, 0xa0, 0xa3, 0x87, 0x85, 0x3f, 0xe4, 0xa6, 0xbd, 0x16, 0x1e, 0xf9, 0x03, 0xca, 0xb4, 0x66, 0x71, 0x99, 0x39, 0x42, 0xde, 0x90, 0xd7, 0x1f, 0x60, 0xfe, 0xf1, 0xe5, 0x10, 0x28, 0x07, 0x25, 0x0d, 0x3e, 0xda, 0xa9, 0xc4, 0x8e, 0xd1, 0x50, 0x6e, 0xf8, 0x9c, 0x19, 0xd9, 0xa2, 0x17, 0x7d, 0x6c, 0xed, 0x71, 0x02, 0x66, 0xa7, 0x8d, 0x0d, 0x66, 0x82, 0xa8, 0xf7, 0x30, 0xc4, 0x3d, 0x64, 0xae, 0x41, 0x25, 0xd0, 0x35, 0x86, 0x03, 0x6b, 0x0a, 0x58, 0xdf, 0x27, 0x25, 0x5d, 0x11, 0x0f, 0x34, 0x18, 0x61, 0xda, 0xe3, 0x1b, 0x6c, 0xc0, 0x5b, 0x77, 0x4a, 0x8c, 0x08, 0x78, 0x6d ],
-const [ 0xda, 0x82, 0x64, 0x1c, 0x0e, 0x59, 0xbf, 0xab, 0xc0, 0x61, 0x8c, 0xd5, 0xcf, 0xce, 0xc1, 0x07, 0x05, 0x0c, 0xa4, 0xc1, 0xed, 0x4b, 0x3b, 0x3f, 0xe9, 0x3b, 0x04, 0x58, 0x7f, 0x14, 0xe7, 0xa6, 0xf4, 0xda, 0x69, 0xe7, 0x1c, 0xdf, 0x22, 0xa3, 0x70, 0x89, 0x71, 0x10, 0x61, 0x55, 0x6e, 0x32, 0xec, 0x1c, 0x20, 0x46, 0x6f, 0x96, 0xf1, 0x61, 0xbb, 0x1c, 0x5e, 0x55, 0x6a, 0xb2, 0xf3, 0xd4, 0x73, 0x44, 0x77, 0xd8, 0xfb, 0x30, 0x64, 0x41, 0x6e, 0x05, 0x9a, 0xc0, 0xcf, 0x8a, 0x53, 0xf5, 0x4c, 0x03, 0x5a, 0xd4, 0x16, 0xaf, 0x78, 0x4d, 0x6f, 0x95, 0x2f, 0x2c, 0x05, 0x81, 0xab, 0x3e, 0x7e, 0x49, 0xf6, 0xb5, 0x54, 0x54, 0x6b, 0xcd, 0xe3, 0x5d, 0x6d, 0xb0, 0xc0, 0x75, 0x59, 0x97, 0x4d, 0x47, 0xb8, 0x33, 0x8a, 0xa0, 0xba, 0x4b, 0x2e, 0x2f, 0xe0, 0xa6, 0xf7, 0x89, 0xf8, 0x2b ],
-const [ 0x1a, 0x40, 0xe8, 0x96, 0xd0, 0xc0, 0xc1, 0x3e, 0x78, 0x24, 0xc3, 0xef, 0x86, 0xe0, 0x23, 0x55, 0xfe, 0xb6, 0x29, 0xea, 0x88, 0x7c, 0xe4, 0xd2, 0xc7, 0x1f, 0x1d, 0x02, 0xe7, 0xe8, 0x89, 0xa8, 0x75, 0xfe, 0x42, 0xc7, 0x74, 0x2d, 0x78, 0x22, 0xad, 0xe5, 0x64, 0x5c, 0x46, 0x86, 0x7e, 0x5d, 0x96, 0xda, 0xf0, 0xf8, 0x38, 0xe3, 0x4a, 0xca, 0x5e, 0xd8, 0x77, 0x65, 0x68, 0x6a, 0xf0, 0xae, 0xb6, 0x4b, 0x2f, 0x83, 0xba, 0xf1, 0x67, 0xa1, 0x51, 0x98, 0x72, 0xc5, 0x53, 0x86, 0x0b, 0x12, 0x68, 0x92, 0x3d, 0xb3, 0x1e, 0xe7, 0x1b, 0xc1, 0x39, 0x06, 0xb2, 0x67, 0x4b, 0x0a, 0x3c, 0x44, 0x84, 0x30, 0x97, 0x10, 0xca, 0x96, 0xf5, 0x83, 0x0c, 0x43, 0xd4, 0x72, 0xd4, 0x68, 0x31, 0x3c, 0x1c, 0xe5, 0xf8, 0x64, 0x63, 0x0f, 0xc0, 0x7f, 0x00, 0xb1, 0xb5, 0x51, 0xb5, 0x51, 0xd5, 0x33 ],
-const [ 0x59, 0x35, 0xa8, 0x70, 0x22, 0x9c, 0x72, 0x51, 0xfc, 0xd0, 0xc5, 0xc6, 0x95, 0x61, 0x44, 0xf2, 0x51, 0xab, 0x2a, 0x39, 0xd7, 0x4d, 0xe9, 0x51, 0xd0, 0xdc, 0x11, 0x9c, 0xeb, 0xd8, 0x72, 0xb5, 0x25, 0xde, 0x85, 0x49, 0x47, 0x20, 0x08, 0x28, 0xb0, 0x13, 0xe9, 0x9b, 0x54, 0x67, 0x65, 0xf9, 0x05, 0x3c, 0x71, 0x75, 0xf2, 0x93, 0x59, 0x3a, 0x6d, 0x02, 0xa7, 0xba, 0xf1, 0xad, 0x46, 0x42, 0x63, 0x71, 0xe7, 0xd2, 0x98, 0x62, 0xa4, 0x2d, 0x18, 0x78, 0xe3, 0x2c, 0x21, 0x85, 0x7e, 0x57, 0xef, 0x6a, 0x21, 0xb6, 0x3b, 0x8b, 0xf3, 0xe5, 0x02, 0x80, 0x78, 0x67, 0x87, 0x0e, 0xb6, 0x3c, 0x9b, 0x55, 0x96, 0xb6, 0x1c, 0x4a, 0x8e, 0x88, 0xbc, 0x68, 0x7d, 0x20, 0x03, 0xa3, 0xd6, 0x37, 0x98, 0x9e, 0x01, 0xa6, 0xbc, 0x1d, 0xfe, 0x7b, 0x17, 0xbd, 0x4c, 0x4c, 0xb7, 0xe3, 0x09, 0xcb ],
-const [ 0xeb, 0x5d, 0xe6, 0x9e, 0xb1, 0x37, 0x1b, 0xfc, 0xe0, 0x0a, 0xb6, 0x29, 0xa1, 0x36, 0x2f, 0x0d, 0x48, 0x85, 0xaf, 0x7a, 0x71, 0xf9, 0xc9, 0x0f, 0x4e, 0xc9, 0x65, 0x5d, 0x3f, 0xa6, 0xfc, 0x49, 0xa3, 0x42, 0x0b, 0xb1, 0xef, 0x13, 0xc1, 0x53, 0xfd, 0x55, 0xfb, 0xea, 0xa6, 0x4e, 0x73, 0x99, 0x92, 0xd5, 0x34, 0x8d, 0x4f, 0x15, 0x52, 0xdf, 0xa1, 0x8f, 0xd7, 0xb7, 0x19, 0x5e, 0x00, 0xb7, 0xe9, 0xbf, 0xaa, 0x97, 0xf7, 0xd0, 0x07, 0x0c, 0x30, 0x98, 0x95, 0xef, 0x1f, 0x48, 0x51, 0x9b, 0xbe, 0xc0, 0x28, 0x97, 0x8c, 0x55, 0xae, 0x75, 0xdf, 0xd2, 0x12, 0xf9, 0x7c, 0xbc, 0x52, 0x7e, 0x65, 0xdb, 0xab, 0x96, 0xf2, 0xf5, 0x54, 0xf1, 0x23, 0xdd, 0x6b, 0x80, 0x35, 0xad, 0x30, 0xd9, 0x73, 0x4f, 0x71, 0xde, 0x4f, 0x42, 0x45, 0x99, 0xb1, 0x9a, 0xfd, 0x6b, 0x8f, 0x49, 0x58, 0x66 ],
-const [ 0x10, 0xca, 0x18, 0x6b, 0xaa, 0x79, 0xd9, 0x02, 0x9e, 0xb6, 0x18, 0xa2, 0xe5, 0xa6, 0x36, 0xb9, 0x89, 0x3b, 0x30, 0xe2, 0x0b, 0x06, 0x22, 0x58, 0x03, 0x4c, 0x0a, 0xb1, 0x06, 0x5b, 0xcf, 0xc9, 0xcc, 0x1e, 0x82, 0xfc, 0x92, 0xf0, 0xe3, 0x98, 0xbe, 0xae, 0x27, 0x91, 0xc2, 0x10, 0xf8, 0x77, 0x42, 0x39, 0xbe, 0xa6, 0x79, 0x8c, 0x1d, 0xbd, 0xd9, 0xc2, 0xbe, 0x51, 0xf1, 0x39, 0x53, 0xe2, 0x94, 0x8f, 0xd5, 0x0d, 0x38, 0x70, 0x10, 0x04, 0x9c, 0xac, 0x62, 0x3c, 0xae, 0x8d, 0xc0, 0x65, 0xab, 0x67, 0xf9, 0x9f, 0x88, 0x70, 0x3f, 0xeb, 0x91, 0xd2, 0xe3, 0xdf, 0x50, 0xff, 0x60, 0x9f, 0xb0, 0x45, 0x9b, 0x08, 0x62, 0xa2, 0x69, 0x2e, 0x80, 0xd9, 0x52, 0x09, 0x70, 0xc5, 0x95, 0x6b, 0x0c, 0xee, 0x6b, 0x35, 0xff, 0x5a, 0x90, 0xcb, 0x72, 0xa6, 0x00, 0xc5, 0xe9, 0x55, 0xfe, 0xe8 ],
-const [ 0x53, 0x69, 0x74, 0x5b, 0xbc, 0xcb, 0xba, 0x88, 0x78, 0x0e, 0xd2, 0xe2, 0xcc, 0x2d, 0x57, 0xe2, 0x59, 0x1d, 0x02, 0xb5, 0xaa, 0x0c, 0xd5, 0x9d, 0x0a, 0xe7, 0x99, 0x95, 0x98, 0x1e, 0x8b, 0x34, 0x9d, 0xab, 0x53, 0xd3, 0x1c, 0x51, 0x35, 0xf2, 0xab, 0x21, 0x8b, 0xd8, 0x82, 0x43, 0x73, 0x7a, 0xd2, 0xf3, 0xc5, 0x9e, 0x58, 0xca, 0x48, 0x40, 0x31, 0x3f, 0x25, 0x35, 0xf0, 0x6d, 0x9b, 0x0e, 0xee, 0x17, 0xf5, 0x3f, 0xe1, 0xe9, 0xb9, 0x81, 0xb0, 0x00, 0x23, 0x74, 0x86, 0xad, 0xd1, 0x89, 0x26, 0x76, 0xc0, 0x1f, 0x7e, 0x5e, 0x77, 0xec, 0x7e, 0x67, 0x82, 0x9f, 0x2a, 0x54, 0x22, 0xc3, 0xee, 0xb3, 0x43, 0xe7, 0x32, 0x1b, 0xae, 0xfc, 0x2f, 0xb3, 0x80, 0xfe, 0x01, 0xf3, 0xdb, 0xd7, 0xfd, 0xaf, 0xdb, 0x80, 0x44, 0x51, 0xcc, 0x69, 0x98, 0x66, 0x9a, 0x1b, 0x6f, 0x5c, 0x88, 0x1c ],
-const [ 0xa4, 0x13, 0xed, 0x98, 0xdd, 0x6e, 0x09, 0x01, 0xb1, 0x07, 0x43, 0x81, 0xe1, 0xa9, 0x0d, 0x59, 0xfb, 0xb6, 0x0e, 0x22, 0x82, 0xbd, 0x67, 0x06, 0x49, 0x4f, 0x3a, 0x2f, 0x20, 0x0f, 0x6d, 0x80, 0xb2, 0x09, 0xab, 0x83, 0xae, 0x45, 0xac, 0xa3, 0x25, 0x9b, 0xb7, 0x9c, 0x34, 0xc8, 0x65, 0x2f, 0xe2, 0xc2, 0xa7, 0x1a, 0x4b, 0x49, 0x0a, 0x47, 0xff, 0xbf, 0x3a, 0x44, 0xa5, 0x39, 0xc5, 0xf3, 0xe4, 0xd6, 0x22, 0x83, 0x83, 0x50, 0xf2, 0x9e, 0xce, 0xd0, 0x85, 0xe4, 0x3c, 0x07, 0xa0, 0x99, 0x50, 0x7a, 0x7e, 0x9a, 0xbd, 0x1d, 0x14, 0x96, 0xcd, 0x24, 0x9a, 0x7a, 0x03, 0x16, 0x46, 0x2d, 0x00, 0x23, 0x5b, 0x7e, 0xa3, 0xb7, 0x62, 0x5b, 0x74, 0x4f, 0xb7, 0x43, 0x43, 0x8c, 0x48, 0xfd, 0x0c, 0x85, 0x9a, 0x8b, 0x1e, 0x62, 0x0d, 0x5a, 0x7c, 0x27, 0x60, 0xbb, 0x84, 0xcd, 0x77, 0x97 ],
-const [ 0x25, 0xae, 0xe3, 0x05, 0xcd, 0xa0, 0x93, 0xa7, 0x10, 0x94, 0xbc, 0x5c, 0xa6, 0xf5, 0x70, 0xfb, 0xd6, 0x7f, 0xcb, 0x42, 0x39, 0xf3, 0xd7, 0x24, 0xc0, 0x0f, 0xad, 0x64, 0xf8, 0xbd, 0xdd, 0x63, 0x8d, 0x8b, 0x10, 0x37, 0x0e, 0x5b, 0xec, 0xfc, 0xef, 0x5b, 0x38, 0x6f, 0xd4, 0x38, 0x41, 0xb9, 0x0d, 0x8f, 0x7c, 0x88, 0x5c, 0xa5, 0x6c, 0x64, 0xff, 0x57, 0xc6, 0x41, 0xea, 0x54, 0xd4, 0x50, 0x55, 0x89, 0x17, 0x1b, 0x76, 0xdd, 0x30, 0xd1, 0x90, 0x1f, 0x01, 0xde, 0x2c, 0x3c, 0x0f, 0xbf, 0xa6, 0xb6, 0x2a, 0x15, 0xec, 0x51, 0x51, 0xf8, 0x83, 0x10, 0xd0, 0x8d, 0xcb, 0x5f, 0xab, 0xdb, 0x83, 0x92, 0x3f, 0xda, 0x8f, 0x8e, 0x27, 0xcd, 0xf9, 0xc6, 0x5d, 0xd2, 0x37, 0x6a, 0xa1, 0xb8, 0xac, 0xda, 0x1f, 0x10, 0x71, 0x61, 0x4c, 0x87, 0x54, 0x20, 0x11, 0x73, 0x21, 0x48, 0x2b, 0xab ],
-const [ 0x9d, 0x31, 0xb1, 0x68, 0xce, 0x6e, 0xc3, 0x18, 0x4d, 0x7c, 0x36, 0x24, 0x3a, 0xcb, 0x4e, 0x14, 0x04, 0xd8, 0x1d, 0xfd, 0x82, 0xf7, 0x3f, 0x60, 0x3f, 0x4f, 0xc8, 0x4f, 0x15, 0x26, 0x7b, 0xd1, 0xfd, 0x5f, 0x3d, 0x88, 0x25, 0x40, 0xc9, 0x91, 0x43, 0x79, 0xa4, 0xac, 0x2a, 0x62, 0x54, 0x9d, 0x9a, 0x85, 0xcd, 0xd2, 0x5d, 0x5c, 0x2c, 0x45, 0x8f, 0x5c, 0xa7, 0xa4, 0x3e, 0x32, 0xc4, 0xb0, 0x33, 0x4c, 0xca, 0xe3, 0x0e, 0x9b, 0x75, 0x55, 0x99, 0x97, 0xee, 0xe0, 0x56, 0x84, 0xfa, 0x82, 0x5a, 0xf4, 0x72, 0x04, 0x5e, 0x8e, 0xf3, 0xd9, 0x14, 0x0d, 0xd6, 0x49, 0xb7, 0x8c, 0x63, 0xcf, 0xe6, 0x00, 0x41, 0xbf, 0xb2, 0x06, 0x31, 0x2b, 0xf6, 0xdf, 0xfd, 0x08, 0xe7, 0xb8, 0xaa, 0x8d, 0xeb, 0x2f, 0xf5, 0xdc, 0xaf, 0x14, 0xfe, 0xe4, 0x73, 0x6c, 0x3e, 0x86, 0xa9, 0xbc, 0xbe, 0xf6 ],
-const [ 0xa7, 0x85, 0xab, 0xa7, 0x5e, 0x68, 0x29, 0xf9, 0x3f, 0x7a, 0x14, 0x1c, 0x71, 0x57, 0x63, 0xb6, 0x4e, 0xff, 0xee, 0xd0, 0x0c, 0xe1, 0x31, 0x89, 0x9d, 0x39, 0x4c, 0x0b, 0xd3, 0x9c, 0x4f, 0xbf, 0xc8, 0xd1, 0xb5, 0xbd, 0x7d, 0xe3, 0x2e, 0x87, 0xc1, 0x74, 0xa2, 0xf6, 0x55, 0x54, 0x72, 0x74, 0x4d, 0x53, 0x01, 0x6c, 0xb9, 0x53, 0x73, 0xff, 0x85, 0xa1, 0xb4, 0xf9, 0x9e, 0x85, 0xbc, 0x03, 0x56, 0x17, 0x12, 0x1a, 0x0a, 0x55, 0x8f, 0x3f, 0x02, 0x73, 0x65, 0x70, 0x98, 0x72, 0x60, 0xd8, 0x9d, 0xf4, 0x6b, 0x43, 0xf8, 0x4f, 0x55, 0xd4, 0x90, 0xe0, 0xd5, 0xfa, 0x6d, 0xa2, 0xcc, 0xa0, 0x1a, 0xfe, 0xcb, 0xa4, 0x4d, 0xe5, 0xd5, 0x8b, 0xc9, 0x1d, 0x66, 0x73, 0x84, 0xd8, 0xb3, 0x48, 0x05, 0x8b, 0x34, 0x3b, 0x11, 0xfd, 0x60, 0x70, 0x86, 0x9f, 0xb8, 0xf7, 0x87, 0x1b, 0x06, 0xfe ],
-const [ 0xed, 0xb2, 0xba, 0x09, 0x99, 0x61, 0xd3, 0x8f, 0xd0, 0xa0, 0xa6, 0xa2, 0x35, 0xd6, 0x12, 0x71, 0xcb, 0x4d, 0x49, 0x3b, 0x64, 0xd9, 0xde, 0x13, 0x5c, 0xbb, 0x1f, 0xe0, 0x86, 0xc4, 0xa4, 0xa7, 0x67, 0xbe, 0x28, 0x0d, 0xa2, 0x07, 0x98, 0x17, 0xb4, 0x7f, 0x6a, 0x35, 0xe1, 0xa4, 0x30, 0x7f, 0x6e, 0xfc, 0x6d, 0x3e, 0x11, 0xb4, 0xa7, 0xae, 0xa6, 0x86, 0xbd, 0x02, 0x23, 0xe0, 0x7b, 0xa9, 0xce, 0x42, 0x6c, 0xd0, 0xae, 0xe7, 0xef, 0x28, 0x3f, 0xa9, 0x8d, 0xe9, 0x6a, 0x1f, 0x8a, 0x17, 0xb3, 0x08, 0xba, 0x04, 0xb5, 0xec, 0x96, 0x16, 0xcb, 0x00, 0x8f, 0xca, 0x11, 0x4b, 0xa3, 0xf9, 0x8b, 0x07, 0x2d, 0x5a, 0xa3, 0x4a, 0x01, 0x49, 0xd9, 0xe5, 0xb8, 0xc6, 0xb6, 0x8c, 0x49, 0xc1, 0x01, 0x38, 0xda, 0x95, 0x36, 0xca, 0xd5, 0xd2, 0x34, 0xf1, 0x3d, 0x3f, 0x36, 0x4d, 0x43, 0x1f ],
-const [ 0x19, 0x48, 0xc7, 0x12, 0x0a, 0x06, 0x18, 0xc5, 0x44, 0xa3, 0x9e, 0x59, 0x57, 0x40, 0x8b, 0x89, 0x22, 0x0a, 0xe3, 0x98, 0xec, 0x05, 0x30, 0x39, 0xb0, 0x09, 0x78, 0xad, 0xb7, 0x0a, 0x6c, 0x2b, 0x6c, 0x9c, 0xe2, 0x84, 0x6d, 0xb5, 0x85, 0x07, 0xde, 0xb5, 0xcb, 0xa2, 0x02, 0xa5, 0x28, 0x4b, 0x0c, 0xbc, 0x82, 0x9e, 0x32, 0x28, 0xe4, 0xc8, 0x04, 0x0b, 0x76, 0xa3, 0xfc, 0xc3, 0xad, 0x22, 0x56, 0x6e, 0xbf, 0xf0, 0x21, 0xad, 0x5a, 0x54, 0x97, 0xa9, 0x95, 0x58, 0xaa, 0x54, 0x27, 0x2a, 0xdf, 0xf2, 0xd6, 0xc2, 0x5f, 0xd7, 0x33, 0xc5, 0x4c, 0x72, 0x85, 0xaa, 0x51, 0x8a, 0x03, 0x1b, 0x7d, 0xc8, 0x46, 0x9e, 0x51, 0x76, 0xfd, 0x74, 0x17, 0x86, 0xe3, 0xc1, 0x76, 0xd6, 0xee, 0xee, 0x44, 0xb2, 0xc9, 0x4c, 0x9b, 0x9b, 0x85, 0xfa, 0x2f, 0x46, 0x8c, 0x08, 0xde, 0xe8, 0xd6, 0xdc ],
-const [ 0x44, 0xc9, 0xbf, 0x3a, 0xe8, 0xf1, 0x4c, 0xc9, 0xd6, 0x93, 0x5d, 0xed, 0xa3, 0xc2, 0x4d, 0xe6, 0x9c, 0x67, 0xf0, 0x88, 0x5a, 0x87, 0xc8, 0x99, 0x96, 0xc4, 0x7c, 0x7b, 0x3e, 0x27, 0x85, 0x0a, 0xc7, 0x1c, 0x2b, 0xc8, 0xc6, 0xbe, 0xb0, 0x38, 0xba, 0x55, 0xcb, 0x87, 0x2c, 0x1d, 0x58, 0x71, 0xfb, 0x4a, 0x4d, 0x63, 0xf1, 0x48, 0xf0, 0xdd, 0x99, 0x47, 0x47, 0x1b, 0x55, 0xf7, 0xd0, 0xf4, 0xab, 0x90, 0x73, 0x02, 0xe0, 0x16, 0xb5, 0x03, 0xc8, 0xdb, 0x2e, 0x7f, 0xdc, 0x45, 0x3d, 0xac, 0x8d, 0xd1, 0xfa, 0x8e, 0xd8, 0x58, 0x6c, 0x62, 0x1b, 0x92, 0xfd, 0x3d, 0x27, 0xd8, 0x2a, 0xf1, 0x96, 0x2e, 0x7f, 0x30, 0x5f, 0x80, 0xc3, 0xf4, 0xa7, 0x2c, 0x70, 0x1d, 0xda, 0xc1, 0x66, 0x5c, 0xfb, 0x06, 0xdf, 0x51, 0x38, 0x3f, 0xa6, 0xf0, 0xc2, 0xab, 0x84, 0x29, 0xdb, 0x51, 0xfb, 0xc8 ],
-const [ 0xcb, 0x2a, 0x07, 0x2d, 0x74, 0xa5, 0x74, 0x94, 0x81, 0x03, 0x0e, 0xe4, 0x6e, 0xdc, 0xe2, 0x8c, 0x47, 0x1e, 0xf4, 0x12, 0xc8, 0xa4, 0x81, 0x4a, 0xc4, 0x0b, 0x87, 0xcb, 0xc3, 0xc1, 0x88, 0xa3, 0xef, 0x5e, 0x8a, 0x4a, 0x31, 0x38, 0x62, 0xd5, 0x97, 0x31, 0x32, 0x6c, 0xf9, 0xd4, 0x31, 0xfe, 0xdc, 0xa1, 0xaa, 0x33, 0x96, 0xa4, 0x48, 0xa3, 0xb3, 0x4d, 0x90, 0x45, 0x98, 0x7b, 0xaf, 0x2a, 0x66, 0xda, 0x76, 0x6b, 0x21, 0x6f, 0xa3, 0x60, 0x12, 0x71, 0x62, 0x12, 0x69, 0x5b, 0x13, 0xf3, 0x27, 0x3f, 0x4e, 0xcd, 0x3b, 0x5d, 0x24, 0xf9, 0xeb, 0xf4, 0xa8, 0xd1, 0x76, 0x58, 0xaf, 0x67, 0xf8, 0x45, 0xd3, 0x78, 0x8d, 0x73, 0xbe, 0x9b, 0xb9, 0x6a, 0xa5, 0xbe, 0x08, 0x98, 0x12, 0xd3, 0xf1, 0xa1, 0xe7, 0xc7, 0x00, 0xf6, 0xa0, 0xb4, 0x35, 0xa9, 0xd8, 0x57, 0xa7, 0x80, 0x0e, 0xc4 ],
-const [ 0xc7, 0xf4, 0x61, 0x2d, 0xc4, 0x7f, 0x7c, 0xe6, 0xb4, 0x99, 0xaf, 0x0a, 0x51, 0xe4, 0xa3, 0xec, 0xb2, 0xef, 0x40, 0x25, 0x1c, 0xb4, 0x20, 0x35, 0x1c, 0x65, 0x43, 0x6d, 0xd2, 0x68, 0x04, 0x0c, 0x90, 0xa0, 0x4b, 0xa8, 0xa4, 0xee, 0x05, 0xcf, 0x71, 0xf7, 0xd1, 0xef, 0xc5, 0x28, 0xfc, 0x73, 0x66, 0xf8, 0xb0, 0x2f, 0xee, 0x6d, 0x68, 0xfe, 0xd9, 0xe2, 0xa7, 0xa9, 0xdd, 0x07, 0xea, 0x0b, 0x7a, 0x29, 0xdb, 0x73, 0xd1, 0xb4, 0xc7, 0x4a, 0xb9, 0xf6, 0x52, 0xf6, 0x10, 0x25, 0x6a, 0xfd, 0x4f, 0xa4, 0x79, 0x6e, 0x61, 0x82, 0xdf, 0x7d, 0xb6, 0x44, 0x9f, 0x6d, 0x93, 0xe4, 0x58, 0xb3, 0xac, 0x19, 0x78, 0x58, 0xf4, 0xd9, 0xac, 0x9f, 0xb4, 0x1c, 0x9b, 0xe8, 0xda, 0xe4, 0xd3, 0xd4, 0x94, 0x7a, 0x03, 0xaa, 0x1e, 0xfa, 0x6c, 0xf9, 0xd9, 0x11, 0x92, 0x7f, 0x9c, 0x06, 0x37, 0x4a ],
-const [ 0x4c, 0x25, 0x9e, 0xd5, 0x3a, 0x1f, 0xaa, 0x09, 0xd9, 0xcf, 0x2a, 0x14, 0x54, 0xcc, 0x2e, 0x5a, 0xcf, 0xb3, 0xab, 0x88, 0x93, 0xbf, 0xc3, 0xca, 0x6b, 0x9a, 0x47, 0x3f, 0x4d, 0x73, 0x7b, 0xaa, 0x3d, 0x51, 0x19, 0x6a, 0x6f, 0xa7, 0x98, 0xac, 0xac, 0x28, 0xad, 0xdf, 0xf6, 0xdc, 0x13, 0x68, 0x6f, 0x74, 0x88, 0x97, 0x77, 0xdb, 0x18, 0xda, 0x15, 0x0d, 0x9d, 0x31, 0x98, 0x2c, 0x87, 0xe2, 0x7e, 0xd1, 0xd9, 0x6e, 0x94, 0xa0, 0x74, 0xc3, 0x5f, 0x1f, 0x98, 0xb3, 0xbb, 0xc8, 0xa8, 0xa5, 0xc2, 0x5c, 0x2d, 0x8b, 0xef, 0x7b, 0x1e, 0x14, 0x83, 0x72, 0x5f, 0x22, 0x28, 0x54, 0x87, 0x7e, 0xd5, 0x4c, 0xe6, 0xcb, 0xf1, 0x31, 0xc7, 0xb8, 0xbb, 0x5b, 0xf2, 0x7a, 0xe9, 0xb5, 0x75, 0x7a, 0x8f, 0x14, 0xa4, 0x4a, 0x43, 0xc7, 0x5f, 0xde, 0x7f, 0x70, 0x93, 0xf9, 0x47, 0x12, 0x03, 0xe5 ],
-const [ 0x1b, 0x87, 0x47, 0xaf, 0x6d, 0x82, 0xc6, 0x1f, 0x98, 0xcc, 0xc3, 0xd7, 0x9c, 0x7a, 0xce, 0xbe, 0x18, 0xbd, 0x1f, 0xb5, 0xb0, 0xba, 0x1f, 0x15, 0xb1, 0x95, 0x2b, 0x58, 0xf8, 0xcf, 0x94, 0x16, 0x10, 0xd3, 0xea, 0x34, 0x9a, 0xcb, 0x7a, 0x58, 0xf2, 0xb8, 0x15, 0x9f, 0x0f, 0xc2, 0x13, 0x93, 0xab, 0xcc, 0x98, 0x57, 0xa4, 0x4c, 0x16, 0x25, 0xa3, 0x5a, 0x13, 0xfb, 0xfb, 0x07, 0x2d, 0x90, 0xd4, 0xef, 0x5b, 0x8d, 0x88, 0x12, 0x75, 0xfa, 0x4d, 0xdf, 0xf7, 0xf6, 0x15, 0x92, 0x02, 0xac, 0xb2, 0xc0, 0xa3, 0x82, 0x3e, 0x30, 0x58, 0x93, 0xba, 0xed, 0xd0, 0x60, 0xf5, 0x99, 0xf3, 0xc2, 0xaf, 0x04, 0x22, 0x24, 0xff, 0xfe, 0xc0, 0xee, 0xf2, 0x69, 0xf1, 0x44, 0x75, 0x92, 0xa1, 0xf1, 0x75, 0xc1, 0xc9, 0x9e, 0x44, 0x0e, 0xed, 0x48, 0x3f, 0x77, 0xea, 0xf1, 0xae, 0x30, 0xee, 0x95 ],
-const [ 0x46, 0x17, 0xb3, 0x23, 0xbc, 0x28, 0x6d, 0x76, 0x80, 0xdf, 0x7e, 0xdd, 0xc1, 0x01, 0xae, 0xcf, 0xa4, 0x6c, 0x6d, 0xcc, 0x39, 0x43, 0x67, 0xa1, 0xae, 0x4b, 0x5a, 0xe8, 0xc2, 0x95, 0x24, 0xce, 0x7d, 0x5e, 0x21, 0x19, 0x1e, 0x33, 0xb3, 0x69, 0x56, 0x59, 0x22, 0xbd, 0xb3, 0x6b, 0xa7, 0x3a, 0x5f, 0x45, 0xc3, 0x28, 0x0a, 0x21, 0xd5, 0x3e, 0x25, 0x00, 0xec, 0x1f, 0x51, 0x4c, 0xda, 0x24, 0x17, 0xbb, 0x8a, 0x5c, 0xd9, 0x76, 0x93, 0xd1, 0x08, 0x7b, 0x0c, 0x0d, 0x98, 0x3f, 0xa3, 0xdd, 0xb1, 0x98, 0xe9, 0x55, 0xa8, 0xdb, 0xf0, 0x14, 0x2d, 0x41, 0x18, 0xca, 0xc6, 0x90, 0x26, 0xf7, 0x7c, 0xf7, 0x96, 0xf5, 0xd3, 0x39, 0x33, 0x38, 0x00, 0x0e, 0xe4, 0xd5, 0x57, 0xc6, 0xc9, 0x41, 0x03, 0x2f, 0x86, 0x5b, 0xf9, 0xb9, 0xdf, 0xad, 0x2f, 0xd8, 0x86, 0xef, 0x08, 0xaa, 0x30, 0xcd ],
-const [ 0xa0, 0xcf, 0xcc, 0x65, 0x59, 0xf2, 0xbd, 0xc8, 0xd0, 0xef, 0xe0, 0x51, 0x9e, 0x8d, 0x31, 0x1d, 0x3a, 0xf5, 0x85, 0xbf, 0xbf, 0x66, 0x6d, 0x90, 0xef, 0x2b, 0x5d, 0x46, 0x78, 0xca, 0x0e, 0xc9, 0x77, 0x7f, 0x20, 0x42, 0x3b, 0xe8, 0x04, 0x74, 0x4b, 0x02, 0x19, 0x4f, 0xaa, 0x54, 0x15, 0xc2, 0x59, 0x6a, 0xa7, 0xd2, 0x1e, 0x85, 0x5b, 0xe9, 0x84, 0x91, 0xbd, 0x70, 0x23, 0x57, 0xc1, 0x9f, 0x21, 0xf4, 0x62, 0x94, 0xf9, 0x8a, 0x8a, 0xa3, 0x7b, 0x35, 0x32, 0xee, 0x15, 0x41, 0xca, 0x35, 0x50, 0x9a, 0xdb, 0xef, 0x9d, 0x83, 0xeb, 0x99, 0x52, 0x8b, 0xa1, 0x4e, 0xf0, 0xbd, 0x29, 0x98, 0xa7, 0x18, 0xda, 0x86, 0x1c, 0x3f, 0x16, 0xfe, 0x69, 0x71, 0x72, 0x55, 0x65, 0xba, 0x17, 0x1d, 0x27, 0x6b, 0x69, 0x3e, 0xc5, 0xc9, 0xe6, 0x49, 0x61, 0x02, 0x50, 0x08, 0x67, 0x65, 0x0e, 0x5a ],
-const [ 0x2f, 0xa3, 0x3c, 0x03, 0xad, 0xa4, 0x0c, 0x59, 0x8f, 0x88, 0x00, 0xe0, 0x17, 0xdc, 0x80, 0x2a, 0x1c, 0x6a, 0x3f, 0xf0, 0xff, 0x5e, 0xcb, 0x58, 0xe1, 0xa7, 0x63, 0x77, 0x13, 0xa0, 0x08, 0x15, 0xce, 0xf0, 0xd6, 0xb1, 0x25, 0xaf, 0x95, 0xc5, 0x37, 0xca, 0x8c, 0x4c, 0xa9, 0xa8, 0x95, 0x80, 0x54, 0x0d, 0x77, 0xe8, 0x3a, 0x3f, 0x6f, 0x92, 0xbf, 0x68, 0x10, 0x9e, 0x16, 0x3c, 0x4e, 0xfc, 0xf9, 0xdb, 0xd5, 0x75, 0x9d, 0xf9, 0x9f, 0xf0, 0xe5, 0x3c, 0xc5, 0xee, 0xd6, 0xe5, 0x95, 0x58, 0x4b, 0xb3, 0xe6, 0x7a, 0xe9, 0x04, 0xa8, 0x4f, 0x56, 0x3e, 0xbf, 0xff, 0xa6, 0x6d, 0x12, 0xa6, 0x16, 0x2e, 0xde, 0x57, 0xfd, 0xcb, 0x51, 0x61, 0xff, 0xa7, 0x54, 0xd0, 0x84, 0xdd, 0xa8, 0x37, 0x68, 0x24, 0x34, 0xad, 0xf5, 0xf6, 0x9d, 0x16, 0x0e, 0xf1, 0x18, 0xa4, 0xac, 0x7d, 0x7c, 0x9d ],
-const [ 0x0f, 0x54, 0x68, 0x34, 0xa3, 0x13, 0xfe, 0x39, 0x81, 0xef, 0x45, 0x0f, 0x3e, 0x3b, 0x16, 0xbc, 0x18, 0x4e, 0x3d, 0x6b, 0xda, 0xd5, 0x7e, 0x65, 0x00, 0x6e, 0xd6, 0x3c, 0x1c, 0x72, 0x02, 0x49, 0x78, 0x11, 0x46, 0x59, 0xfd, 0xa5, 0x67, 0xa4, 0x53, 0x40, 0xf9, 0xff, 0x4a, 0x87, 0xe1, 0x52, 0x79, 0xc4, 0x12, 0x4b, 0x25, 0x36, 0x9a, 0x54, 0x64, 0xac, 0xe2, 0xc3, 0x81, 0x52, 0x31, 0x51, 0xa3, 0xca, 0x73, 0xce, 0xaa, 0x7e, 0x39, 0x13, 0x5a, 0x35, 0x00, 0x37, 0xbb, 0xe5, 0xb6, 0x06, 0xbf, 0xc8, 0x7a, 0xae, 0x26, 0xb2, 0xa4, 0xbc, 0x9f, 0xa2, 0x05, 0x47, 0x30, 0x97, 0x70, 0x6b, 0xd7, 0xa5, 0x78, 0xfa, 0x72, 0x47, 0x7c, 0x6d, 0xdc, 0xf7, 0xe1, 0x21, 0x59, 0xfc, 0x9f, 0xc0, 0x34, 0x84, 0xff, 0xfc, 0xa6, 0xf2, 0xa3, 0x84, 0xfa, 0x79, 0xc6, 0x30, 0xef, 0xea, 0xc5, 0x7f ],
-const [ 0x6f, 0xb3, 0xec, 0x66, 0xf9, 0xeb, 0x07, 0x0a, 0x71, 0x9b, 0xeb, 0xbe, 0x70, 0x8b, 0x93, 0xa6, 0x5b, 0x20, 0x1b, 0x78, 0xe2, 0xd2, 0x6d, 0x8c, 0xcc, 0xdf, 0x1c, 0x33, 0xf7, 0x41, 0x90, 0x4a, 0x9a, 0xde, 0x64, 0x0f, 0xce, 0x00, 0x0c, 0x33, 0x4d, 0x04, 0xbb, 0x30, 0x79, 0x56, 0x83, 0xdc, 0xa0, 0x9d, 0xbf, 0x3e, 0x7e, 0x32, 0xae, 0xa1, 0x03, 0xd7, 0x60, 0xe8, 0x57, 0xa6, 0xd6, 0x21, 0x1c, 0x47, 0x65, 0x5d, 0xf3, 0x66, 0x5b, 0xbe, 0x41, 0x64, 0xe5, 0xd1, 0x33, 0x4d, 0x30, 0x1e, 0xff, 0x0b, 0xcf, 0xfe, 0x6d, 0xd9, 0x5d, 0xad, 0x97, 0xfa, 0x63, 0xa0, 0xec, 0xaa, 0x7b, 0x19, 0x7b, 0x55, 0xb6, 0xf8, 0x6f, 0x07, 0x3c, 0xd4, 0xd5, 0x24, 0x32, 0x4a, 0xa6, 0x59, 0xe1, 0x95, 0x01, 0xd2, 0x14, 0x5f, 0xb8, 0xad, 0xc1, 0xd7, 0x0e, 0xaf, 0xec, 0x04, 0xbf, 0x36, 0xc9, 0x59 ],
-const [ 0x1d, 0x7f, 0x68, 0x33, 0x33, 0x3d, 0x6f, 0x99, 0xcc, 0x4d, 0xe8, 0x6d, 0xcb, 0x1a, 0x66, 0x8a, 0xf3, 0x69, 0x66, 0x07, 0x4c, 0x31, 0xd4, 0xad, 0xc9, 0xac, 0xd0, 0xae, 0x27, 0xae, 0xb1, 0x93, 0x18, 0x36, 0x4a, 0x77, 0xa1, 0x42, 0x6d, 0x73, 0xc1, 0xe8, 0xae, 0x59, 0x53, 0xa3, 0x69, 0xa5, 0x35, 0xeb, 0x07, 0xb0, 0xaa, 0x08, 0x7c, 0x27, 0xfd, 0x27, 0x14, 0xbc, 0x68, 0xae, 0x70, 0x1b, 0x33, 0xcd, 0xcb, 0x20, 0x20, 0x55, 0x83, 0x47, 0x07, 0xce, 0xd4, 0x64, 0xbe, 0xc4, 0xe6, 0x94, 0x3b, 0x61, 0x0a, 0x73, 0xfd, 0x41, 0x40, 0x8f, 0xa8, 0x81, 0xfe, 0x1d, 0xef, 0x19, 0x2c, 0xeb, 0xb6, 0x6c, 0x73, 0x96, 0x78, 0x1e, 0xb7, 0xfd, 0xe7, 0x26, 0xe2, 0xf5, 0xd3, 0x24, 0xe4, 0x3f, 0x4d, 0xf4, 0xf8, 0xb7, 0x0c, 0x83, 0x28, 0xcd, 0x10, 0xe1, 0x13, 0x39, 0x84, 0x98, 0xee, 0xeb ],
-const [ 0x3f, 0x5f, 0xe1, 0xa8, 0xa1, 0x3c, 0x83, 0x57, 0x14, 0x9f, 0x68, 0xbc, 0xe4, 0x73, 0x60, 0xbd, 0x6e, 0x73, 0xc9, 0x89, 0x32, 0xec, 0x4a, 0x7d, 0x2a, 0xc4, 0xc5, 0x49, 0x5b, 0xbb, 0x86, 0x4e, 0xa9, 0xf1, 0xc1, 0x4b, 0xef, 0xa9, 0x3b, 0x39, 0x4f, 0x4c, 0x47, 0x73, 0xc7, 0xb1, 0xf4, 0x1a, 0x05, 0x9b, 0x85, 0xb8, 0x7d, 0x83, 0x21, 0x23, 0xb8, 0x98, 0xcc, 0xa5, 0xef, 0x05, 0x96, 0x59, 0xd8, 0x72, 0x12, 0xd8, 0xc0, 0xcd, 0x0a, 0x15, 0xda, 0x4a, 0x71, 0x86, 0xd7, 0xa8, 0x99, 0x85, 0xb6, 0xb7, 0xa7, 0xf5, 0xde, 0x17, 0x43, 0x28, 0x6a, 0x42, 0x94, 0x00, 0xc4, 0xcc, 0x6b, 0x55, 0x75, 0xea, 0xbe, 0x97, 0x3b, 0x32, 0x59, 0xb5, 0x5c, 0xa1, 0xd0, 0x3d, 0x3b, 0xe2, 0xb8, 0xc4, 0x29, 0xcd, 0x16, 0x88, 0x7d, 0x2f, 0x18, 0x54, 0xe7, 0xc9, 0x03, 0xa4, 0x01, 0x9b, 0x6d, 0x0a ],
-const [ 0xa0, 0x4d, 0x56, 0x3e, 0xec, 0x5c, 0x90, 0x9d, 0xee, 0x3f, 0x6f, 0xa8, 0x13, 0x3c, 0x70, 0xf8, 0x62, 0xd4, 0x63, 0x33, 0xb9, 0xf5, 0xca, 0xde, 0x59, 0x71, 0x82, 0x73, 0xa4, 0xaf, 0xa5, 0xb4, 0x26, 0xa1, 0xae, 0x3e, 0xd3, 0xf5, 0xde, 0x61, 0x8f, 0x90, 0xdf, 0x2f, 0xf4, 0x38, 0xa8, 0xd3, 0x4f, 0x90, 0xa0, 0x25, 0xeb, 0x4a, 0x06, 0x7b, 0x93, 0x98, 0x90, 0xc1, 0x52, 0xe3, 0x52, 0xcc, 0x7d, 0xc0, 0xe2, 0xeb, 0xf3, 0x20, 0xba, 0xbf, 0xa4, 0xc6, 0xdd, 0x4d, 0x50, 0xff, 0xbe, 0x52, 0x91, 0x8d, 0x5d, 0xd6, 0x1c, 0xe4, 0xb3, 0x04, 0x44, 0x99, 0x50, 0x39, 0xc0, 0x17, 0x43, 0x5b, 0xad, 0x94, 0x3a, 0x6c, 0xd7, 0x43, 0xea, 0x5f, 0x34, 0xcb, 0xb1, 0x2a, 0xb1, 0xf9, 0x7a, 0x1c, 0x31, 0xb1, 0xe2, 0x71, 0xd3, 0x2b, 0x99, 0x24, 0x74, 0x5c, 0x0a, 0x04, 0x76, 0xb1, 0x3e, 0x0a ],
-const [ 0xbe, 0xc8, 0xd8, 0x8f, 0x65, 0xe4, 0x95, 0x67, 0xf2, 0x3c, 0xc9, 0x53, 0xd9, 0xca, 0x9b, 0xad, 0x9a, 0x5a, 0xb3, 0x4f, 0x38, 0x33, 0x4c, 0x55, 0xed, 0xf9, 0x8a, 0x25, 0x1c, 0xd2, 0x0e, 0xad, 0x87, 0xc8, 0xc9, 0xec, 0xc2, 0x6f, 0x0d, 0xb4, 0xe8, 0xc7, 0xea, 0xae, 0x8c, 0x63, 0xb7, 0x9e, 0xf2, 0xcb, 0xef, 0xe8, 0x7f, 0x20, 0x3f, 0x54, 0x6f, 0xfe, 0xdc, 0x0e, 0xc6, 0xa6, 0x1a, 0xf1, 0x89, 0x5d, 0x3b, 0x04, 0x2d, 0x0f, 0x84, 0x45, 0x50, 0x38, 0x97, 0xa6, 0xa7, 0x05, 0xfc, 0x56, 0x38, 0xb6, 0x01, 0x41, 0xc9, 0x46, 0xc4, 0xda, 0x98, 0x4e, 0x8e, 0x18, 0x4c, 0x27, 0x62, 0xbe, 0x2c, 0x4e, 0xd6, 0xe0, 0x8f, 0x0d, 0x22, 0xa3, 0x93, 0x58, 0x77, 0x44, 0x12, 0xf6, 0x92, 0x5c, 0xd2, 0xe1, 0x90, 0x62, 0xfc, 0xee, 0x04, 0x71, 0xd0, 0xb0, 0x47, 0x4b, 0x96, 0x9a, 0x0f, 0x9f ],
-const [ 0xd1, 0x99, 0x87, 0x5b, 0xb7, 0x07, 0x1c, 0x43, 0x4a, 0xb2, 0x36, 0xe6, 0xd1, 0x0f, 0x84, 0x05, 0x97, 0x8f, 0xca, 0x25, 0x9f, 0x7c, 0x34, 0x93, 0x94, 0x24, 0xea, 0xa6, 0xff, 0x3a, 0xe4, 0x44, 0xbd, 0x79, 0x00, 0xa7, 0xaf, 0x8a, 0x51, 0x61, 0xb3, 0x28, 0xba, 0x9e, 0xd3, 0x82, 0xbc, 0xaa, 0xbd, 0xe1, 0x8d, 0xb3, 0x73, 0x8a, 0x6a, 0xcf, 0x44, 0xe6, 0x2d, 0x41, 0xfb, 0xe0, 0x22, 0xf8, 0x56, 0x8f, 0x17, 0x58, 0xba, 0x15, 0xb2, 0x3d, 0x24, 0xc7, 0x08, 0x3d, 0x63, 0x8e, 0x6a, 0x2e, 0x85, 0x8c, 0x82, 0xe8, 0x8f, 0x03, 0xa0, 0x4c, 0x71, 0x73, 0x4e, 0x86, 0x38, 0x03, 0x2a, 0x8e, 0x86, 0x22, 0xf5, 0xf5, 0x3f, 0x6e, 0xe7, 0xde, 0x86, 0xd5, 0x45, 0x4b, 0xe8, 0xfa, 0x36, 0x9a, 0xd6, 0xda, 0xd3, 0x4f, 0x59, 0xaf, 0x7d, 0x13, 0x01, 0x15, 0x73, 0xfd, 0x1f, 0x6b, 0xa3, 0x11 ],
-const [ 0xac, 0x76, 0xa7, 0xdb, 0x96, 0x4e, 0x9f, 0xad, 0x2f, 0x98, 0xc1, 0x8c, 0x06, 0xf9, 0x29, 0xf2, 0x3b, 0x62, 0x17, 0xee, 0x35, 0xef, 0x45, 0x25, 0x92, 0x0f, 0x77, 0x17, 0x64, 0xe6, 0x53, 0xa3, 0x9a, 0xef, 0x73, 0xcd, 0xbc, 0xe6, 0xb9, 0xc0, 0xdc, 0xe5, 0xe2, 0x0f, 0xc9, 0xcd, 0x5e, 0x40, 0x85, 0xe7, 0x5f, 0x8b, 0xf9, 0xcb, 0x31, 0xdf, 0xe8, 0x81, 0xc9, 0x26, 0x22, 0xe7, 0xa0, 0xca, 0xfa, 0x52, 0xc2, 0x78, 0xf9, 0x78, 0x21, 0x24, 0xd4, 0x8e, 0x30, 0x4d, 0x9c, 0xad, 0xad, 0x82, 0x35, 0x7a, 0xbe, 0x25, 0x09, 0x06, 0x40, 0x6f, 0xfd, 0xf3, 0x5c, 0xb4, 0xa5, 0xd9, 0x5b, 0xe8, 0xb3, 0xe7, 0xbb, 0x63, 0xb6, 0xce, 0x82, 0xe1, 0x01, 0xda, 0xd2, 0xcd, 0xe8, 0x62, 0xbe, 0xbf, 0x33, 0x63, 0x5c, 0x43, 0xcc, 0x68, 0x1b, 0xdc, 0xbb, 0xad, 0x57, 0x48, 0x54, 0x83, 0x2b, 0x06 ],
-const [ 0xbf, 0x46, 0x5c, 0x88, 0x70, 0x60, 0xc7, 0x62, 0xcc, 0xcd, 0x43, 0xe4, 0xa6, 0x5c, 0x76, 0xe9, 0xfd, 0x68, 0x5f, 0x44, 0xe7, 0xfd, 0xea, 0x03, 0xc8, 0x3d, 0xc2, 0xf5, 0xc7, 0x02, 0x67, 0x69, 0x83, 0xc5, 0x80, 0x39, 0x01, 0xbf, 0x72, 0x07, 0xea, 0x4d, 0x31, 0xc7, 0xf3, 0x99, 0x57, 0x7d, 0x9c, 0x77, 0x73, 0x48, 0x1d, 0x8d, 0xa3, 0xa0, 0x9d, 0xb7, 0x65, 0xdc, 0xa6, 0xaa, 0xaa, 0xf7, 0xd6, 0xd7, 0x2c, 0x93, 0xd7, 0x92, 0x02, 0x3e, 0x91, 0x73, 0x71, 0xf5, 0x9d, 0xfc, 0x06, 0xe6, 0xfd, 0x7d, 0xe1, 0x7a, 0x0b, 0x35, 0x54, 0x93, 0xb0, 0xba, 0xad, 0x13, 0xd6, 0x9b, 0x4f, 0x9d, 0x20, 0x43, 0x08, 0x9f, 0xd8, 0x20, 0x9e, 0x90, 0x29, 0x05, 0xab, 0x76, 0x8e, 0xcd, 0xab, 0xac, 0x8a, 0x42, 0x54, 0xe2, 0x9a, 0x3d, 0x26, 0x65, 0x68, 0x0e, 0x42, 0xa1, 0x41, 0x1d, 0x7f, 0xe4 ],
-const [ 0x63, 0x5a, 0x50, 0x8c, 0x6c, 0x44, 0xc1, 0xeb, 0x78, 0xe3, 0xdb, 0xf5, 0x96, 0x1a, 0xca, 0xb6, 0xee, 0x7d, 0x9b, 0x92, 0xa8, 0xaa, 0x47, 0x36, 0x09, 0xdc, 0xed, 0xce, 0xdf, 0xbd, 0x5f, 0x78, 0x20, 0x7c, 0xe0, 0xf9, 0xce, 0x20, 0x2c, 0xb0, 0x1d, 0x1c, 0xb9, 0xc8, 0xd8, 0x23, 0x3d, 0xb1, 0x01, 0x3d, 0x70, 0xd0, 0xb8, 0x1b, 0x13, 0x75, 0x5d, 0xa7, 0x31, 0x0e, 0xf9, 0xe0, 0xa5, 0x9b, 0xda, 0xe5, 0xdc, 0x62, 0x7e, 0x4f, 0xdc, 0xe4, 0xb3, 0xc4, 0x85, 0x0f, 0xfb, 0xca, 0x17, 0xb5, 0x35, 0xd8, 0xf5, 0x3d, 0x7a, 0xb3, 0xa9, 0x99, 0x46, 0xf8, 0x27, 0x78, 0xd8, 0xf4, 0x56, 0xbc, 0xdb, 0xbc, 0xcc, 0x2e, 0x45, 0x7a, 0xd9, 0x70, 0x80, 0x06, 0xc8, 0x34, 0xc8, 0xb6, 0x61, 0xac, 0xd4, 0x76, 0xb3, 0x41, 0xb8, 0x1b, 0x10, 0x88, 0x0a, 0xf4, 0x58, 0x72, 0x43, 0xa2, 0x7b, 0xc3 ],
-const [ 0x63, 0x49, 0xe3, 0x26, 0x5d, 0x26, 0x30, 0xd1, 0xe1, 0x4b, 0xea, 0x68, 0x0d, 0x34, 0x2c, 0xe9, 0xf7, 0x6a, 0xef, 0xb7, 0x89, 0x02, 0x7f, 0x3d, 0x8f, 0x66, 0x30, 0xd5, 0x0e, 0x58, 0x4c, 0xe8, 0xd7, 0x33, 0x51, 0x56, 0x5d, 0x74, 0x59, 0x18, 0xc4, 0x7a, 0xda, 0x24, 0x3a, 0x8a, 0x8f, 0x90, 0x8a, 0x16, 0xb6, 0xfb, 0xee, 0x3f, 0x7c, 0x29, 0x25, 0x98, 0xb6, 0xed, 0xc6, 0x2d, 0xd1, 0x4c, 0xd4, 0xc4, 0x0c, 0xdf, 0x92, 0x62, 0xe4, 0x79, 0x99, 0x11, 0xd0, 0x0a, 0x27, 0xe1, 0x2f, 0xc3, 0xba, 0x2d, 0x7f, 0x7b, 0xde, 0x1f, 0xcf, 0x52, 0x43, 0x76, 0x77, 0x94, 0x12, 0x87, 0x06, 0xe0, 0x81, 0x82, 0x7c, 0x89, 0xa6, 0xf7, 0xba, 0x3c, 0x88, 0x99, 0x36, 0xe3, 0x7c, 0x41, 0xf3, 0xca, 0xaf, 0x36, 0xb1, 0x00, 0xff, 0xab, 0x61, 0x01, 0x0f, 0x89, 0xdb, 0x91, 0x9a, 0x6f, 0xd3, 0xeb ],
-const [ 0x64, 0xf3, 0xd0, 0xce, 0x82, 0x09, 0x7d, 0x36, 0x38, 0x5b, 0x67, 0x17, 0xfe, 0x15, 0x5d, 0x0f, 0xc5, 0xed, 0x85, 0xbf, 0x80, 0xa1, 0xfe, 0xd9, 0xe3, 0xa1, 0xc3, 0x7a, 0x6b, 0x08, 0xd3, 0xbb, 0x9e, 0xd1, 0x8f, 0x83, 0x94, 0x48, 0x63, 0x9f, 0xb6, 0xbe, 0xa8, 0x14, 0xc6, 0x81, 0xc9, 0xb3, 0x20, 0x0c, 0xa5, 0xef, 0x3f, 0x7a, 0x35, 0xec, 0x82, 0x41, 0x6f, 0xd8, 0x30, 0x1c, 0x6a, 0x7e, 0xbb, 0x49, 0xc2, 0x18, 0x41, 0xf5, 0x3e, 0x65, 0x58, 0xf5, 0xb0, 0xfc, 0x0b, 0xb6, 0x1d, 0xe0, 0x20, 0x77, 0x1e, 0x54, 0x9d, 0xb5, 0x86, 0xf1, 0x8a, 0xe7, 0x45, 0xf5, 0xf7, 0x6c, 0x8d, 0xde, 0x41, 0xc2, 0x33, 0x38, 0x92, 0xf8, 0x57, 0xb3, 0xa7, 0x66, 0x47, 0x78, 0xd6, 0x9b, 0xa1, 0xbd, 0x4f, 0x97, 0xb8, 0x97, 0xa2, 0x3b, 0x39, 0x10, 0x81, 0xfd, 0x0f, 0x7a, 0xc7, 0xe0, 0x83, 0x03 ],
-const [ 0x9c, 0x84, 0xd1, 0x8b, 0x6e, 0xc3, 0x39, 0x24, 0x74, 0x82, 0xcc, 0x3e, 0xe5, 0x2a, 0x1b, 0xbd, 0x6b, 0xd4, 0xae, 0x91, 0x82, 0x16, 0x91, 0x2d, 0x21, 0x1c, 0x10, 0x3a, 0x9d, 0xfb, 0xbe, 0x8d, 0xca, 0x43, 0xbc, 0x57, 0x63, 0xd3, 0x37, 0x9c, 0xac, 0xf2, 0x33, 0xe7, 0x55, 0x9b, 0x87, 0x3b, 0xa2, 0x17, 0x29, 0x4c, 0xc9, 0xd2, 0xac, 0xef, 0x9c, 0x67, 0x07, 0xd0, 0x67, 0xfd, 0x98, 0x63, 0x1c, 0xd6, 0x69, 0x1d, 0xad, 0x25, 0xb1, 0xe3, 0xba, 0x20, 0x9e, 0xc3, 0x6c, 0x57, 0x51, 0xe2, 0xa1, 0x44, 0x2b, 0xb5, 0x49, 0x23, 0x47, 0x74, 0x0f, 0x04, 0x47, 0xcc, 0x3d, 0x1e, 0x54, 0xd5, 0xd9, 0x66, 0x60, 0x43, 0x14, 0x60, 0xae, 0xe0, 0xe6, 0x35, 0x95, 0x3a, 0xf2, 0x07, 0x81, 0x98, 0xaf, 0x81, 0x3a, 0x33, 0xc9, 0xb2, 0x69, 0xa3, 0xc5, 0x1b, 0x58, 0x98, 0xe5, 0x06, 0xf9, 0xca ],
-const [ 0x84, 0x36, 0x22, 0x85, 0x56, 0xa7, 0x56, 0x92, 0x74, 0xbb, 0x14, 0xad, 0x62, 0x71, 0xab, 0xfb, 0x82, 0x39, 0x1e, 0x80, 0x93, 0x63, 0xcb, 0x38, 0x77, 0xd8, 0x4a, 0x63, 0x39, 0x08, 0x98, 0x20, 0x4e, 0x23, 0x75, 0x3d, 0x1b, 0x8c, 0x0a, 0x4e, 0xb8, 0x8b, 0xcf, 0xfc, 0xf4, 0x42, 0xac, 0xa0, 0x99, 0xe2, 0x5f, 0x11, 0xf1, 0x1e, 0x1d, 0xb9, 0x88, 0xe0, 0x7c, 0xef, 0x34, 0x3b, 0x90, 0x81, 0x53, 0xa2, 0x54, 0x8f, 0x54, 0x57, 0x4c, 0xa0, 0x79, 0x25, 0x69, 0xef, 0xda, 0x52, 0x2d, 0x06, 0xae, 0xd0, 0x0f, 0x8e, 0xc6, 0xb3, 0x21, 0x66, 0x5a, 0xe8, 0xf0, 0xf2, 0x08, 0x23, 0xac, 0xb6, 0x1a, 0x19, 0x89, 0x23, 0x08, 0xf0, 0x64, 0xb0, 0x3d, 0xf3, 0xaa, 0x2d, 0x1e, 0x8b, 0x76, 0x54, 0x49, 0x6a, 0xf9, 0xa2, 0x1a, 0x0a, 0x1f, 0x65, 0x74, 0x56, 0x6f, 0x15, 0xbe, 0xa7, 0x34, 0xe7 ],
-const [ 0xe0, 0x1e, 0x41, 0x33, 0x81, 0x98, 0x00, 0xb3, 0x04, 0x45, 0x98, 0x4a, 0x5f, 0x12, 0xd6, 0xe3, 0xe1, 0xe2, 0x9e, 0x1b, 0xc6, 0xd4, 0x28, 0xa2, 0x09, 0xc5, 0x69, 0xe3, 0x79, 0x17, 0xce, 0xe7, 0x0f, 0xb0, 0x30, 0x76, 0x7f, 0x45, 0x05, 0x80, 0x0d, 0xd8, 0xd3, 0xbc, 0xa2, 0x7f, 0xeb, 0x8f, 0x1f, 0x68, 0x53, 0x2f, 0xf1, 0x1a, 0x04, 0x08, 0xe6, 0xfd, 0x55, 0x5f, 0x3e, 0x1d, 0xb8, 0x35, 0x06, 0x2b, 0xa4, 0x6e, 0xa1, 0xc5, 0xd2, 0x32, 0xa8, 0xf6, 0xac, 0x94, 0xf4, 0x01, 0x03, 0x71, 0xf8, 0x5a, 0x00, 0x9b, 0x54, 0xf6, 0x5d, 0x37, 0xa8, 0xc4, 0xd4, 0x64, 0xa6, 0x7c, 0xd8, 0x1e, 0x6c, 0x97, 0x84, 0x61, 0x10, 0x9e, 0xd1, 0x91, 0x7c, 0xa8, 0x0b, 0x19, 0x7c, 0x1f, 0x86, 0x53, 0x15, 0xc2, 0x8d, 0xa8, 0x19, 0xf0, 0x9b, 0xf8, 0xf8, 0x23, 0xce, 0x3b, 0xd9, 0xbb, 0x98, 0x69 ],
-const [ 0x99, 0xd4, 0x48, 0x2d, 0xae, 0xcf, 0xee, 0xb8, 0xd4, 0x42, 0x26, 0xa3, 0x9f, 0x85, 0xb4, 0x2f, 0x95, 0x13, 0xfd, 0xc2, 0xd7, 0x98, 0xc6, 0x98, 0x04, 0x4c, 0x3e, 0xb5, 0x5a, 0x80, 0x3f, 0x1e, 0x1e, 0x76, 0xd1, 0x48, 0x3e, 0x76, 0xf0, 0xd1, 0x36, 0x1e, 0x8f, 0x6e, 0x30, 0xfa, 0xdc, 0x25, 0x6f, 0x55, 0xc6, 0xbc, 0xed, 0x4e, 0xbc, 0x71, 0x43, 0x2e, 0xb8, 0xeb, 0xca, 0xf8, 0x7d, 0x71, 0x00, 0x42, 0x1d, 0x5a, 0x2d, 0x44, 0xbd, 0xc4, 0x46, 0x2f, 0x9c, 0x89, 0x11, 0xc0, 0x52, 0x6f, 0x8a, 0x14, 0x56, 0x9f, 0x86, 0xbe, 0xc3, 0x59, 0x96, 0x17, 0x5c, 0xe5, 0x2e, 0xd5, 0xcd, 0xcd, 0x06, 0xdf, 0x34, 0x49, 0xc1, 0x60, 0xdf, 0xfb, 0xcd, 0x1a, 0x57, 0xdc, 0x8a, 0xfe, 0x9e, 0x77, 0xae, 0xf9, 0xb6, 0x55, 0xe8, 0x10, 0x62, 0xb8, 0xc3, 0xaf, 0x31, 0x8c, 0xce, 0x3e, 0xb7, 0x9a ],
-const [ 0xd8, 0x3c, 0x04, 0x02, 0x72, 0x97, 0xba, 0xca, 0xa0, 0xba, 0x8b, 0xed, 0xb8, 0x34, 0x16, 0x9f, 0xea, 0x05, 0xae, 0xf6, 0xc6, 0x0e, 0x00, 0xfc, 0xfe, 0xc5, 0xf6, 0x03, 0x6e, 0x2d, 0xdc, 0x38, 0x59, 0x06, 0xc2, 0x7b, 0xf6, 0x40, 0x21, 0x6e, 0x2b, 0xb6, 0xc1, 0xcc, 0x98, 0x19, 0xd9, 0xfd, 0xd7, 0x2a, 0x79, 0xe7, 0x02, 0x2d, 0x25, 0x06, 0x76, 0x9a, 0xc2, 0xbf, 0xd7, 0x15, 0xb7, 0xf1, 0x55, 0xa0, 0x4c, 0xce, 0x2d, 0x10, 0x55, 0xe9, 0x72, 0xbd, 0x15, 0x8f, 0x0d, 0x7e, 0x5d, 0x5b, 0x03, 0xd5, 0xf4, 0x05, 0xf6, 0x66, 0x3b, 0x7b, 0xef, 0xae, 0x11, 0x33, 0x5a, 0xf1, 0xf5, 0xbf, 0x52, 0x74, 0x6a, 0xa2, 0x1f, 0xed, 0xa0, 0x62, 0xfd, 0x38, 0x50, 0xde, 0x1f, 0x4b, 0xe8, 0xe2, 0xf4, 0x6c, 0xe8, 0xf9, 0xa9, 0xa2, 0x8c, 0x82, 0xef, 0x69, 0xab, 0x06, 0xfe, 0xa9, 0xdf, 0xc9 ],
-const [ 0x0e, 0x9b, 0x07, 0x3a, 0x31, 0xc8, 0xfd, 0x21, 0x5a, 0xf1, 0xd8, 0xd0, 0xce, 0x54, 0xac, 0x9a, 0xe1, 0x09, 0x03, 0x6e, 0x17, 0x94, 0x25, 0x09, 0x88, 0xb7, 0x96, 0x6a, 0x89, 0x8a, 0xdf, 0x86, 0x88, 0xcd, 0x91, 0x3e, 0x38, 0x7c, 0x88, 0x8e, 0xef, 0xa4, 0x6d, 0x07, 0x4c, 0x76, 0x7e, 0x7f, 0x1c, 0x99, 0x92, 0x07, 0x7e, 0xc5, 0x57, 0x1d, 0x46, 0x8e, 0xdf, 0x23, 0xa0, 0x7d, 0x5b, 0x10, 0xf6, 0x65, 0x26, 0x66, 0x13, 0xf4, 0x05, 0x64, 0x88, 0x89, 0xad, 0x7c, 0x4e, 0x45, 0x85, 0x07, 0xae, 0x65, 0xae, 0x38, 0x5e, 0xcf, 0x41, 0x4e, 0xed, 0xea, 0xd7, 0x0e, 0x60, 0xb3, 0x4f, 0x71, 0x1e, 0x0e, 0xcb, 0x9a, 0x09, 0x59, 0xfc, 0x0a, 0xee, 0x47, 0xa0, 0x17, 0x1f, 0xec, 0x48, 0x9a, 0x5e, 0x14, 0x5f, 0xe9, 0xfd, 0xd9, 0x68, 0x05, 0x44, 0x75, 0x87, 0x14, 0x13, 0x54, 0x43, 0x11 ],
-const [ 0x86, 0xc7, 0xc8, 0x2b, 0xba, 0x16, 0x5b, 0x31, 0xad, 0x74, 0xd9, 0x2b, 0xa2, 0x2a, 0x3b, 0xbf, 0xf9, 0x26, 0x80, 0x7e, 0x53, 0x96, 0xf4, 0x14, 0xf7, 0xb6, 0xb2, 0xc2, 0x75, 0xe6, 0x68, 0x0f, 0x89, 0x00, 0x5a, 0xba, 0x41, 0xe8, 0xaa, 0xf2, 0x62, 0x65, 0xd6, 0xc9, 0x09, 0x2f, 0x82, 0xe7, 0x8e, 0x49, 0x78, 0x7b, 0xad, 0x90, 0xed, 0x78, 0xe8, 0x95, 0x06, 0xfd, 0x27, 0xa8, 0x9a, 0x14, 0xa2, 0x35, 0x3a, 0xa0, 0x00, 0x54, 0x6e, 0x91, 0xc0, 0x9b, 0x42, 0x5a, 0xd9, 0x36, 0x01, 0xa5, 0x9d, 0x3a, 0x41, 0x45, 0xe3, 0x37, 0x1f, 0x6c, 0x65, 0x0d, 0xcc, 0x1e, 0x67, 0x00, 0x49, 0xe5, 0x9a, 0x0e, 0x6e, 0xc7, 0x3f, 0x7f, 0x31, 0x75, 0x8f, 0xbf, 0x25, 0xc5, 0x5b, 0x69, 0x41, 0x62, 0xf0, 0xa4, 0xe3, 0xc2, 0x3d, 0xb2, 0x14, 0x59, 0x38, 0xc6, 0x0e, 0x0d, 0x7d, 0x16, 0xfc, 0xe9 ],
-const [ 0xa6, 0x4a, 0xd9, 0x6b, 0xe2, 0x24, 0xdc, 0xee, 0xf6, 0x56, 0x3f, 0x18, 0xc6, 0x3f, 0xb7, 0x55, 0x5a, 0xd9, 0x26, 0x93, 0x3f, 0x8e, 0x1c, 0xb0, 0x2a, 0x4d, 0x9e, 0x2e, 0xdf, 0xdc, 0x27, 0x2e, 0x51, 0x70, 0xed, 0x9c, 0x0b, 0x7b, 0x65, 0xa7, 0xce, 0xc5, 0x09, 0x74, 0x7c, 0xbe, 0x59, 0x13, 0x34, 0x13, 0x20, 0xb2, 0xbf, 0x7f, 0xf8, 0x10, 0x2b, 0xe4, 0x10, 0x35, 0xb5, 0x9a, 0x2d, 0x61, 0xed, 0x06, 0xef, 0x42, 0x14, 0x6f, 0x56, 0x69, 0xc9, 0x0e, 0x84, 0xff, 0xe5, 0x64, 0xc5, 0xb4, 0xa3, 0xd1, 0xcc, 0xf9, 0x04, 0x61, 0x40, 0x6f, 0x71, 0xe9, 0x77, 0x9f, 0xa2, 0x53, 0x81, 0xeb, 0xc0, 0x36, 0x68, 0xc4, 0xc6, 0xaa, 0xb6, 0x1e, 0x2d, 0x5a, 0x38, 0x21, 0xc8, 0xda, 0x02, 0x22, 0xed, 0x3b, 0xb3, 0xd1, 0xd5, 0xdd, 0xfa, 0xb4, 0x45, 0x85, 0x59, 0xd4, 0x6e, 0xaf, 0x29, 0xb6 ],
-const [ 0x22, 0xee, 0xed, 0x3b, 0x24, 0xe0, 0x76, 0xc2, 0x60, 0xf1, 0x2f, 0x15, 0x30, 0x69, 0x50, 0x59, 0xb2, 0x3d, 0x0a, 0xcb, 0xbe, 0x33, 0x1a, 0x04, 0x1b, 0x47, 0x9d, 0x7b, 0xf2, 0x4d, 0x26, 0x4b, 0x82, 0xd9, 0x0e, 0x36, 0x16, 0x5c, 0x0b, 0xea, 0x34, 0x8f, 0x04, 0x84, 0x18, 0x15, 0x24, 0x53, 0x61, 0x5c, 0x2e, 0xde, 0x09, 0xc4, 0x10, 0x28, 0x9a, 0x03, 0xba, 0x32, 0x9f, 0xc8, 0x30, 0xc2, 0x59, 0x9e, 0xde, 0x63, 0xb4, 0x13, 0x2d, 0xad, 0x79, 0x1a, 0x53, 0xc6, 0xc5, 0xaf, 0x6f, 0x29, 0xba, 0xb9, 0xd5, 0xa6, 0x74, 0x34, 0xa6, 0xaa, 0x3f, 0x8f, 0xa5, 0xc1, 0x07, 0x53, 0x45, 0x59, 0x10, 0x06, 0x07, 0xc9, 0xe7, 0x4f, 0x02, 0x92, 0x98, 0x5b, 0xc3, 0xe4, 0x21, 0x7e, 0x58, 0x64, 0x27, 0x1e, 0xa8, 0x2c, 0xe8, 0xcd, 0x06, 0x13, 0x71, 0xb5, 0x05, 0x2f, 0x10, 0x39, 0x8d, 0x99 ],
-const [ 0x48, 0x0b, 0xe7, 0x58, 0xa9, 0xb7, 0xba, 0x9a, 0xf0, 0x01, 0xbf, 0x21, 0xdb, 0x00, 0xc4, 0x51, 0xcf, 0xd6, 0x6f, 0x06, 0xc9, 0xd8, 0xd5, 0xd6, 0x98, 0xef, 0x47, 0x97, 0x4a, 0x3d, 0x6f, 0x21, 0xe4, 0x04, 0x9d, 0x55, 0x56, 0xc4, 0x5b, 0x5f, 0xad, 0xa4, 0x47, 0x37, 0x8b, 0x13, 0x22, 0x6e, 0xd4, 0xaf, 0x24, 0x27, 0xab, 0x66, 0x92, 0x64, 0x9d, 0xdb, 0x93, 0x83, 0x1b, 0x0b, 0x40, 0x08, 0x2e, 0x30, 0xfa, 0x9c, 0x66, 0xe6, 0x00, 0x56, 0x14, 0x8c, 0x40, 0x3a, 0xb8, 0xed, 0x6e, 0xff, 0xbd, 0x1f, 0x54, 0x16, 0x64, 0xac, 0x69, 0xe7, 0xff, 0xf0, 0xa4, 0x5e, 0x5f, 0xc2, 0x92, 0xa6, 0x8f, 0x57, 0xa7, 0x34, 0xc3, 0x62, 0xd2, 0x08, 0x8b, 0x80, 0x53, 0x2f, 0x4c, 0xd4, 0xd1, 0x8d, 0xf1, 0xee, 0xa7, 0xd9, 0xde, 0xf2, 0x80, 0xe9, 0x25, 0xf6, 0x23, 0x30, 0xfd, 0xab, 0x90, 0x85 ],
-const [ 0x22, 0x02, 0x48, 0xf5, 0xe6, 0xd7, 0xa4, 0x93, 0x35, 0xb3, 0xf9, 0x13, 0x74, 0xf1, 0x8b, 0xb8, 0xb0, 0xff, 0x5e, 0x8b, 0x9a, 0x58, 0x53, 0xf3, 0xcf, 0xb2, 0x93, 0x85, 0x5d, 0x78, 0x30, 0x1d, 0x83, 0x7a, 0x0a, 0x2e, 0xb9, 0xe4, 0xf0, 0x56, 0xf0, 0x6c, 0x08, 0x36, 0x1b, 0xd0, 0x71, 0x80, 0xee, 0x80, 0x26, 0x51, 0xe6, 0x97, 0x26, 0xc2, 0x89, 0x10, 0xd2, 0xba, 0xef, 0x37, 0x96, 0x06, 0x81, 0x5d, 0xcb, 0xab, 0x01, 0xd0, 0xdc, 0x7a, 0xcb, 0x0b, 0xa8, 0xe6, 0x5a, 0x29, 0x28, 0x13, 0x0d, 0xa0, 0x52, 0x2f, 0x2b, 0x2b, 0x3d, 0x05, 0x26, 0x08, 0x85, 0xcf, 0x1c, 0x64, 0xf1, 0x4c, 0xa3, 0x14, 0x53, 0x13, 0xc6, 0x85, 0xb0, 0x27, 0x4b, 0xf6, 0xa1, 0xcb, 0x38, 0xe4, 0xf9, 0x98, 0x95, 0xc6, 0xa8, 0xcc, 0x72, 0xfb, 0xe0, 0xe5, 0x2c, 0x01, 0x76, 0x6f, 0xed, 0xe7, 0x8a, 0x1a ],
-const [ 0x6d, 0xcc, 0x39, 0x49, 0x42, 0x4f, 0xef, 0xab, 0xd4, 0xb3, 0xb7, 0xb4, 0xcb, 0xd0, 0x98, 0xa6, 0x77, 0x87, 0x81, 0x01, 0x64, 0x03, 0x80, 0xec, 0x2f, 0x3f, 0x34, 0xd6, 0x99, 0xc8, 0x85, 0x5d, 0xda, 0xc5, 0x92, 0x6f, 0x38, 0x34, 0xeb, 0xaf, 0xd7, 0x76, 0x01, 0x1a, 0xd3, 0x0e, 0xdb, 0xea, 0x8c, 0xa6, 0x0a, 0xba, 0x41, 0x52, 0xde, 0xec, 0xe1, 0x19, 0xda, 0x48, 0x1d, 0xb2, 0x66, 0xe5, 0xc2, 0x8b, 0xc4, 0x4d, 0x46, 0x10, 0x45, 0xdc, 0xa0, 0x29, 0xbd, 0x69, 0x5d, 0x04, 0x34, 0x29, 0xf1, 0x16, 0xde, 0xcf, 0x4b, 0x5c, 0x4e, 0xf8, 0xac, 0xe7, 0xe6, 0xc7, 0xb8, 0x97, 0x92, 0xcc, 0xce, 0x27, 0xb6, 0x2b, 0x95, 0x69, 0x64, 0xfa, 0xd7, 0xd3, 0xd3, 0xea, 0x93, 0x3b, 0x0c, 0x2a, 0x4d, 0xdf, 0xe7, 0x88, 0xa9, 0xa8, 0x36, 0xda, 0x38, 0xb0, 0x40, 0x9c, 0x92, 0x01, 0x71, 0xda ],
-const [ 0xf5, 0x3e, 0xe3, 0xe2, 0xce, 0x44, 0x67, 0xde, 0x8b, 0x3b, 0x30, 0xae, 0xce, 0x94, 0x04, 0xdc, 0x90, 0xae, 0xd0, 0x67, 0x5b, 0x3f, 0x84, 0x54, 0xba, 0xf6, 0x24, 0x65, 0xef, 0x5f, 0x1c, 0x29, 0xe3, 0x06, 0xd5, 0x35, 0x63, 0xdf, 0x85, 0xb0, 0x88, 0xe5, 0x4b, 0x15, 0x77, 0x02, 0x7b, 0x34, 0x4b, 0x2f, 0x37, 0x7a, 0x50, 0xdc, 0x3f, 0x73, 0x72, 0x92, 0x09, 0x8d, 0xf5, 0xd7, 0x15, 0x1f, 0x66, 0x52, 0x7b, 0xa9, 0xd1, 0x2f, 0xc6, 0x5e, 0x34, 0xc5, 0x04, 0xdf, 0x34, 0x76, 0x1e, 0x4a, 0x0f, 0xd7, 0x66, 0x73, 0xd2, 0x11, 0x6f, 0x71, 0xcc, 0x88, 0x21, 0x5d, 0x42, 0xba, 0x0c, 0x56, 0x64, 0x69, 0xfd, 0xc8, 0x80, 0xfc, 0xcf, 0xee, 0x76, 0x23, 0x84, 0x96, 0x6c, 0xba, 0x95, 0x25, 0xc2, 0xf0, 0x85, 0xda, 0x48, 0xa8, 0xbc, 0x57, 0xaf, 0x1f, 0x93, 0x5d, 0x3e, 0xcf, 0xac, 0xd7 ],
-const [ 0x53, 0x8e, 0x37, 0x9b, 0x06, 0xf1, 0xd8, 0x9a, 0x9e, 0xa9, 0x78, 0xa8, 0xf1, 0x7e, 0xcd, 0x6f, 0x8a, 0x22, 0xd1, 0xd1, 0x5a, 0x14, 0x18, 0xe4, 0xaa, 0xc5, 0x60, 0x3b, 0x54, 0xfa, 0x6a, 0x68, 0x33, 0x71, 0x08, 0xbe, 0xd8, 0xc7, 0x78, 0x5c, 0x7e, 0x99, 0xf0, 0x67, 0x40, 0xea, 0x7a, 0x96, 0x8a, 0xc4, 0x02, 0xf4, 0xce, 0x22, 0xad, 0xe1, 0x78, 0x0e, 0x6d, 0x5a, 0x23, 0x07, 0xd3, 0x7b, 0x0d, 0xa5, 0x24, 0x42, 0xc8, 0x80, 0xae, 0x96, 0x33, 0x4d, 0x5c, 0x88, 0xa9, 0x4a, 0x89, 0xd8, 0x78, 0xdd, 0x12, 0xbb, 0x95, 0x77, 0xaf, 0xdb, 0x8e, 0xbf, 0x83, 0xa0, 0xbf, 0xed, 0xf1, 0xae, 0xc9, 0x73, 0xb2, 0xaf, 0x40, 0xe3, 0x24, 0x52, 0xa4, 0x0d, 0xe5, 0x93, 0x93, 0x67, 0xa1, 0x3e, 0x3c, 0xb3, 0x28, 0xae, 0x17, 0xdb, 0xc4, 0xdb, 0xd4, 0x20, 0xc9, 0x94, 0x91, 0x73, 0x6d, 0x08 ],
-const [ 0x42, 0x60, 0x90, 0x15, 0x3d, 0xd0, 0x66, 0x65, 0x12, 0x3a, 0xa3, 0x75, 0xcb, 0x99, 0x2e, 0x22, 0x1c, 0xdd, 0x03, 0x06, 0x8b, 0x82, 0x7a, 0xa7, 0xd3, 0x67, 0xcc, 0xed, 0x8b, 0xde, 0xd3, 0xda, 0x03, 0xff, 0x11, 0x75, 0x6f, 0x43, 0xf4, 0x07, 0x47, 0x4e, 0x58, 0x8a, 0xed, 0x0b, 0x4e, 0x5f, 0x91, 0xfe, 0x1c, 0x3f, 0x52, 0xd6, 0x85, 0x74, 0xa5, 0x42, 0x4a, 0x49, 0xfb, 0x06, 0xf0, 0xbf, 0x9e, 0x4e, 0xc4, 0x81, 0xdc, 0x42, 0x1d, 0x1a, 0x68, 0xda, 0xe1, 0x66, 0xfd, 0xf4, 0x4a, 0x46, 0x44, 0xa4, 0xea, 0x98, 0xf8, 0xcb, 0xed, 0x67, 0x48, 0xeb, 0x9f, 0x5e, 0x7d, 0x39, 0x2e, 0x83, 0xdc, 0xf4, 0xb0, 0x22, 0xce, 0xf6, 0x67, 0x06, 0x3e, 0x89, 0x44, 0xef, 0x43, 0x7b, 0xab, 0x41, 0xff, 0x75, 0x76, 0xfa, 0xc7, 0x88, 0x3c, 0xe6, 0x83, 0x09, 0xd3, 0x16, 0x58, 0x9f, 0x13, 0x8e ],
-const [ 0x3c, 0x17, 0xd3, 0x27, 0x44, 0x95, 0xdc, 0xc8, 0x6f, 0x27, 0x22, 0x39, 0x8d, 0xb6, 0x02, 0x37, 0xfc, 0x70, 0xfc, 0x0e, 0x63, 0xb3, 0x0a, 0xa4, 0xa3, 0x2c, 0x30, 0xb9, 0x0b, 0x40, 0x55, 0x6d, 0xcc, 0xaa, 0x51, 0x03, 0xac, 0x66, 0x47, 0xe4, 0xfe, 0xce, 0x35, 0xe7, 0xd1, 0x04, 0xc9, 0xcf, 0x68, 0x8f, 0x77, 0x16, 0xea, 0x49, 0xc8, 0xe9, 0x5b, 0x78, 0xf5, 0x73, 0xcb, 0x3b, 0xb4, 0x5e, 0xcd, 0x28, 0x52, 0x97, 0x2b, 0x33, 0x02, 0x52, 0xd8, 0xd1, 0x75, 0x4f, 0x26, 0x5e, 0xaa, 0x5b, 0x39, 0xbc, 0x08, 0x19, 0xbc, 0x3e, 0xaa, 0x02, 0xd2, 0xc4, 0xfa, 0xab, 0x50, 0x27, 0x81, 0x46, 0x29, 0xd7, 0xfd, 0x6c, 0x2a, 0xc2, 0xb4, 0x1a, 0xe7, 0x78, 0x09, 0xf9, 0xf5, 0x8d, 0x4d, 0xe2, 0x59, 0x3f, 0xd7, 0xa1, 0x41, 0x59, 0x57, 0xf9, 0xf2, 0x58, 0x67, 0xe9, 0x02, 0xcb, 0x63, 0x2e ],
-const [ 0x4a, 0xe2, 0x31, 0xea, 0xfe, 0x77, 0xa1, 0x58, 0xc2, 0x47, 0x21, 0x43, 0xfa, 0xf1, 0x69, 0xdb, 0x29, 0xbf, 0x2b, 0x53, 0xc3, 0x28, 0x8d, 0x8b, 0x3c, 0x9a, 0xdd, 0xed, 0x65, 0x77, 0x80, 0x95, 0xf8, 0x5e, 0x2c, 0xb4, 0x71, 0xab, 0x58, 0x36, 0x20, 0x41, 0xf0, 0xa2, 0x7d, 0x87, 0x4c, 0x42, 0xbb, 0xb0, 0x63, 0x85, 0xa0, 0x40, 0x3c, 0xa1, 0x93, 0xcb, 0xa6, 0x7c, 0xf7, 0x00, 0x29, 0xcd, 0xb7, 0xe7, 0x3c, 0x7e, 0x22, 0x67, 0xb8, 0x56, 0xfa, 0x0b, 0x8d, 0xd4, 0xc7, 0x06, 0xb4, 0x5e, 0x71, 0x74, 0x65, 0x9b, 0x0e, 0xe2, 0x89, 0x1d, 0xf9, 0x11, 0x72, 0x43, 0x24, 0xf7, 0xca, 0x5d, 0xaf, 0x07, 0xc9, 0x12, 0xb9, 0xb2, 0xab, 0xff, 0x76, 0x2e, 0x62, 0xa1, 0x81, 0x76, 0x88, 0x75, 0x74, 0x92, 0x97, 0x5d, 0xb7, 0x18, 0x5c, 0x46, 0x95, 0xf3, 0xa9, 0x08, 0x95, 0x63, 0x4b, 0x8d ],
-const [ 0x00, 0xbf, 0x40, 0xf1, 0xef, 0xb6, 0x48, 0x4f, 0xb6, 0xf9, 0xfc, 0xff, 0x80, 0x51, 0x0b, 0xc8, 0x81, 0x79, 0x59, 0xcd, 0xe4, 0x3a, 0x98, 0xca, 0x04, 0xd5, 0x18, 0x9b, 0xde, 0xa1, 0xe0, 0xfe, 0xc7, 0xf5, 0xfd, 0x99, 0x5a, 0x48, 0x1a, 0x3f, 0xb5, 0x97, 0x51, 0x6f, 0xe5, 0x08, 0x41, 0x1d, 0x9e, 0xcc, 0x61, 0xb5, 0x2f, 0x49, 0x93, 0x5e, 0xb6, 0x79, 0xfd, 0x7c, 0x90, 0x8d, 0x14, 0x78, 0x14, 0xd7, 0xf9, 0xc3, 0x81, 0xe6, 0x09, 0x18, 0x34, 0xf3, 0xb0, 0x02, 0x1f, 0x7c, 0x7d, 0x9f, 0x76, 0x2e, 0x7c, 0xa3, 0xab, 0x08, 0xc0, 0x9f, 0x9d, 0xbe, 0x3f, 0x84, 0x0d, 0x5b, 0xe3, 0x63, 0x51, 0x2b, 0xdd, 0x76, 0x4c, 0xd8, 0x3d, 0x64, 0x9d, 0xd3, 0xbf, 0xc1, 0x17, 0xf5, 0xe8, 0xd4, 0x71, 0x67, 0x52, 0x9e, 0x3f, 0xbf, 0x45, 0x17, 0x21, 0x6b, 0x86, 0xbb, 0x3b, 0x53, 0x74, 0x45 ],
-const [ 0xfb, 0x9c, 0xfb, 0x8a, 0x89, 0x76, 0x1e, 0x4c, 0x02, 0x11, 0x7b, 0xe8, 0x50, 0x00, 0x6b, 0x26, 0xae, 0xde, 0x2a, 0x20, 0x5f, 0x34, 0x2d, 0x45, 0x9f, 0x9c, 0xb6, 0xa4, 0xda, 0x27, 0xa5, 0x68, 0x1c, 0xfd, 0x91, 0x9e, 0xc9, 0x43, 0x17, 0x3f, 0x8e, 0x42, 0x72, 0x6a, 0x97, 0xc5, 0x4c, 0xf1, 0x02, 0xc2, 0xd4, 0x17, 0x94, 0x3d, 0x11, 0x98, 0xab, 0x6a, 0x76, 0xea, 0x74, 0x12, 0xb6, 0xc3, 0x5e, 0x37, 0xda, 0xdb, 0xcf, 0xfb, 0x90, 0xf3, 0x15, 0xbe, 0xc6, 0x16, 0x9f, 0x87, 0x77, 0x1f, 0x6d, 0xa5, 0xc5, 0x7b, 0xc5, 0x96, 0x49, 0x30, 0x28, 0x27, 0xa7, 0x1e, 0x84, 0xdd, 0x65, 0x85, 0xab, 0x94, 0xfd, 0xc8, 0x04, 0x66, 0x30, 0x71, 0x80, 0xce, 0x9e, 0x74, 0xd0, 0x0d, 0x94, 0xb8, 0xd6, 0xcd, 0x25, 0xd3, 0x59, 0x05, 0x7c, 0x16, 0xfc, 0x1c, 0x70, 0xc9, 0x71, 0x51, 0x59, 0xb7 ],
-const [ 0xe7, 0x46, 0x28, 0x35, 0xe3, 0x85, 0x09, 0xf5, 0xbe, 0xe7, 0x4c, 0x31, 0x33, 0x48, 0x2a, 0xd4, 0xd7, 0xfb, 0x7d, 0xdc, 0xfb, 0x18, 0xc7, 0x54, 0xd2, 0x17, 0x76, 0x82, 0xd7, 0x9e, 0x66, 0x61, 0x69, 0x98, 0xa8, 0x52, 0xb8, 0x87, 0x82, 0x0e, 0xe5, 0x1b, 0xb6, 0xdf, 0x65, 0x03, 0x07, 0x10, 0xa7, 0x03, 0xfa, 0xa1, 0xf6, 0x47, 0xda, 0x40, 0xa0, 0xf7, 0xfe, 0x75, 0x58, 0x0b, 0x4f, 0x1d, 0xd9, 0x61, 0x04, 0x19, 0xcc, 0x0c, 0xb0, 0x47, 0xec, 0xf0, 0x7f, 0xb1, 0x68, 0x8c, 0xbc, 0x05, 0x88, 0x16, 0x97, 0x46, 0x94, 0xcd, 0x26, 0xc0, 0xf2, 0x8b, 0xa9, 0x41, 0x8e, 0x99, 0x12, 0x86, 0x7f, 0xc8, 0xc5, 0xf4, 0xe7, 0xbd, 0x9c, 0x89, 0x1a, 0x8d, 0x2e, 0x11, 0x03, 0x8a, 0x51, 0x9d, 0xc4, 0x5c, 0xdd, 0x31, 0x9d, 0x53, 0xb3, 0xbd, 0x0f, 0xfb, 0xfe, 0x4e, 0x41, 0xf1, 0xb9, 0x86 ],
-const [ 0x75, 0x7d, 0x2b, 0x41, 0x48, 0x47, 0x41, 0xe4, 0xf9, 0xa9, 0xfc, 0x4c, 0x30, 0xfc, 0x63, 0x3d, 0x31, 0xbe, 0x09, 0xc8, 0x56, 0x36, 0x27, 0x15, 0xbd, 0x5b, 0xed, 0x60, 0x3e, 0xf3, 0x1a, 0x42, 0xa0, 0xf8, 0xcb, 0x32, 0x0c, 0x3f, 0x90, 0x4b, 0xc1, 0x5c, 0xc5, 0x50, 0x0a, 0xc0, 0x20, 0xed, 0x6d, 0x24, 0x86, 0x3f, 0x26, 0x2b, 0x23, 0x97, 0xd4, 0x42, 0xb9, 0x7b, 0x71, 0xcb, 0x38, 0xee, 0x87, 0x7c, 0x90, 0xf2, 0xa1, 0x01, 0xc3, 0x4a, 0x00, 0xe9, 0x3e, 0x84, 0x90, 0xbf, 0x69, 0x37, 0x1b, 0x77, 0x7d, 0x8a, 0xbb, 0x0d, 0x96, 0xf5, 0x95, 0x68, 0x09, 0x4c, 0xc4, 0x84, 0xf7, 0xf9, 0x94, 0xd0, 0x22, 0x88, 0xf1, 0xd5, 0x00, 0x6a, 0x1f, 0x19, 0x0e, 0xf2, 0xab, 0x43, 0x67, 0xa4, 0xa1, 0x7f, 0x95, 0xaf, 0xff, 0x24, 0xa7, 0xb8, 0x6a, 0x95, 0x83, 0xd9, 0x20, 0x65, 0x7e, 0xea ],
-const [ 0x71, 0xdb, 0x63, 0xe8, 0xb1, 0x39, 0x26, 0x44, 0xe6, 0xfc, 0xf7, 0xc3, 0xd8, 0x1a, 0x03, 0xa7, 0x51, 0x82, 0x90, 0xf4, 0xd3, 0x00, 0x48, 0x76, 0x8a, 0x61, 0xd4, 0x05, 0x80, 0xd7, 0xad, 0x08, 0x10, 0x9f, 0x2f, 0x38, 0x9d, 0xe0, 0xf0, 0xa7, 0x84, 0xd7, 0x4f, 0x00, 0x4e, 0x31, 0x50, 0x10, 0x2b, 0xb8, 0xa7, 0x85, 0x9c, 0x32, 0x12, 0xf6, 0x6f, 0x86, 0xec, 0x24, 0xf0, 0x21, 0x00, 0x80, 0x5e, 0x98, 0x9b, 0xed, 0x9c, 0x8f, 0xe5, 0xc6, 0x29, 0xd9, 0x70, 0x23, 0x52, 0xe1, 0x12, 0x58, 0xa6, 0x48, 0xf0, 0xbf, 0xab, 0xcf, 0xdc, 0xb8, 0xcf, 0x78, 0xe1, 0xed, 0xa1, 0xe8, 0x1b, 0xdb, 0x41, 0x10, 0xcc, 0x8e, 0x15, 0x0c, 0xad, 0xab, 0xbe, 0x4b, 0x82, 0xb4, 0x4b, 0xf1, 0xf1, 0x88, 0xac, 0x79, 0x94, 0x29, 0x69, 0x9f, 0x4d, 0xc2, 0x94, 0x7d, 0xda, 0xe9, 0xfc, 0xf4, 0xa9, 0x21 ],
-const [ 0x17, 0x96, 0x45, 0xa0, 0x88, 0x5b, 0xf0, 0xf1, 0xde, 0xb9, 0xf6, 0xc1, 0x05, 0xbd, 0xbf, 0x2b, 0xbd, 0xf7, 0x28, 0xe6, 0xed, 0x81, 0x78, 0x6c, 0x3a, 0x3e, 0x95, 0x5b, 0xd9, 0x60, 0x78, 0x1b, 0xa1, 0x2d, 0xde, 0xc1, 0x65, 0x02, 0x40, 0x33, 0x80, 0x98, 0x06, 0x8d, 0xb1, 0x86, 0xf8, 0xc4, 0x2a, 0x07, 0xf5, 0x8a, 0xe3, 0xfe, 0xe7, 0x71, 0x34, 0x37, 0xf6, 0x52, 0xa3, 0xf0, 0xfc, 0xf0, 0xfb, 0x98, 0x39, 0xd9, 0x9e, 0xd6, 0x49, 0x8d, 0x1b, 0xcd, 0x52, 0xe2, 0x03, 0x9f, 0x82, 0xa7, 0xf9, 0x2f, 0xb9, 0x88, 0x09, 0x2c, 0x82, 0x31, 0x3b, 0x4b, 0x48, 0xb7, 0x67, 0xd3, 0xc7, 0x33, 0x4a, 0x5f, 0xc0, 0xb0, 0xda, 0xdf, 0xf1, 0x47, 0xd7, 0xe1, 0x44, 0x88, 0xa3, 0x0f, 0x47, 0x1c, 0x53, 0xf8, 0xdc, 0xa9, 0x06, 0x13, 0x32, 0xf6, 0x75, 0x00, 0xf3, 0x50, 0xcc, 0x12, 0xbf, 0x2c ],
-const [ 0xb2, 0x0f, 0x96, 0x99, 0x7b, 0x06, 0x03, 0xa0, 0xbb, 0x86, 0x00, 0x70, 0x36, 0x98, 0x85, 0xf3, 0xbb, 0x19, 0x08, 0x93, 0x9f, 0x61, 0x95, 0xfd, 0x6b, 0x23, 0x21, 0x24, 0xd2, 0x94, 0x1c, 0x89, 0xe6, 0xd0, 0x45, 0xbb, 0x8b, 0x79, 0xc2, 0x19, 0x2b, 0xa1, 0x70, 0xdf, 0xab, 0xea, 0x78, 0x61, 0x9e, 0xeb, 0x23, 0x91, 0xb9, 0xd6, 0xef, 0xc7, 0x87, 0x58, 0xe2, 0xc2, 0x5e, 0xc1, 0x1e, 0xea, 0x92, 0x65, 0xb6, 0xd7, 0xe8, 0x42, 0xc0, 0x17, 0x4e, 0xe3, 0xab, 0x2c, 0xc9, 0x84, 0xd3, 0xd5, 0xae, 0x76, 0x53, 0x8f, 0x15, 0xc5, 0x1a, 0x5a, 0x8b, 0x19, 0x42, 0xc0, 0x07, 0xda, 0x9d, 0x14, 0x20, 0x97, 0x90, 0xf8, 0x7c, 0xa9, 0x24, 0x21, 0x8c, 0x13, 0x5a, 0x5f, 0x76, 0xad, 0xbf, 0xd7, 0x53, 0x82, 0x41, 0x93, 0x9b, 0x76, 0x41, 0x3e, 0xdd, 0x2c, 0xe9, 0x28, 0xb4, 0x26, 0xc0, 0x91 ],
-const [ 0x88, 0x3e, 0x6c, 0xa2, 0xb1, 0x9e, 0xf5, 0x46, 0x40, 0xbb, 0x83, 0x33, 0xf8, 0x5a, 0x93, 0x80, 0xe1, 0x72, 0x11, 0xf6, 0xee, 0x3d, 0x1d, 0xc7, 0xdc, 0x8f, 0x0e, 0x7c, 0x5d, 0x67, 0xb7, 0x30, 0x76, 0xc3, 0xea, 0xfc, 0x26, 0xb9, 0x3b, 0xb2, 0x48, 0xc4, 0x06, 0xce, 0xba, 0x5c, 0xb4, 0xa9, 0xbf, 0xc9, 0x39, 0xf0, 0xa2, 0x38, 0xe1, 0x55, 0x9d, 0x0f, 0x4d, 0x84, 0xf8, 0x7e, 0xb8, 0x59, 0x75, 0x56, 0x80, 0x50, 0xec, 0x1f, 0xe1, 0x3d, 0x33, 0x65, 0x03, 0x3d, 0x40, 0x52, 0x37, 0xec, 0x92, 0x82, 0x7d, 0xd8, 0xcd, 0x12, 0x4b, 0x36, 0xa4, 0xfa, 0x89, 0xd4, 0xfb, 0x9d, 0xe0, 0x4f, 0x4d, 0x9f, 0x34, 0x86, 0x4c, 0xf7, 0x6f, 0x4e, 0xc8, 0x45, 0x81, 0x68, 0xd2, 0x65, 0xa5, 0xb0, 0x21, 0x44, 0xe5, 0x96, 0xb5, 0xf2, 0xe0, 0xd2, 0xb9, 0xf9, 0xcb, 0x54, 0xae, 0xee, 0xb6, 0x7a ],
-const [ 0xe4, 0x63, 0x62, 0x65, 0x06, 0x14, 0x4c, 0xec, 0xe5, 0x5d, 0xfb, 0x7a, 0xa2, 0x2e, 0xb2, 0x1e, 0xa3, 0xa4, 0x27, 0x7d, 0x89, 0x2c, 0x21, 0x17, 0x62, 0xea, 0x45, 0xcc, 0x20, 0x5c, 0x2d, 0x9e, 0x4b, 0x3a, 0xbb, 0xb8, 0xf2, 0xa1, 0xad, 0xb0, 0xe7, 0x71, 0x71, 0x09, 0x2c, 0xf4, 0x3a, 0xfc, 0xa8, 0xc0, 0x53, 0x77, 0x1e, 0xde, 0xb4, 0x67, 0x60, 0x2b, 0xd3, 0x33, 0xc0, 0xff, 0xbc, 0x88, 0xc8, 0x0d, 0x64, 0x5c, 0x2b, 0x8a, 0x3a, 0x2d, 0xfa, 0x92, 0x00, 0x8a, 0x1b, 0xc7, 0xd9, 0xd5, 0xf8, 0x3b, 0xa3, 0x47, 0x74, 0x90, 0x86, 0x34, 0x23, 0x5d, 0xcd, 0x91, 0xba, 0xd4, 0xf5, 0xb3, 0xc4, 0xa2, 0x04, 0x59, 0x97, 0x17, 0x1d, 0xed, 0x87, 0x87, 0x50, 0x07, 0x59, 0xf0, 0xb6, 0x33, 0xfb, 0xdc, 0xbe, 0xf4, 0x72, 0x89, 0xc2, 0x09, 0x13, 0x48, 0xde, 0xee, 0xf6, 0x23, 0x01, 0xa6 ],
-const [ 0x6c, 0xd7, 0x00, 0x39, 0xa7, 0x7e, 0x42, 0x0d, 0x99, 0x9b, 0x57, 0xca, 0xae, 0xb5, 0x3a, 0xce, 0xdd, 0xba, 0xb1, 0x17, 0x39, 0x44, 0x7f, 0xaa, 0xc3, 0x1a, 0xdb, 0x35, 0x83, 0xfa, 0x22, 0xf3, 0xd7, 0x96, 0xc9, 0xd0, 0x0a, 0xdc, 0x95, 0xce, 0x28, 0x7a, 0x0e, 0xa7, 0x11, 0xa2, 0x31, 0xb4, 0xcd, 0x0a, 0x65, 0x0d, 0x1f, 0x38, 0xb0, 0xf2, 0x5d, 0xfc, 0x2b, 0x69, 0x7e, 0x3e, 0xb3, 0x29, 0x75, 0xf9, 0xe2, 0xb7, 0xbe, 0x88, 0x3d, 0xcf, 0x36, 0x21, 0xaf, 0x05, 0x2f, 0x9f, 0x37, 0xac, 0xc4, 0x84, 0xdd, 0xf7, 0x6a, 0x3e, 0xea, 0x5e, 0xc8, 0xa9, 0x58, 0x43, 0xc9, 0xd6, 0x88, 0xd6, 0xef, 0x0b, 0x33, 0x36, 0xea, 0x0a, 0xa3, 0xd9, 0x69, 0x96, 0x23, 0x2d, 0x30, 0x34, 0xb4, 0x7f, 0x6a, 0x2f, 0x01, 0x1d, 0x41, 0xde, 0x95, 0xb7, 0xad, 0x29, 0x4c, 0x0b, 0x89, 0x4a, 0x07, 0xc2 ],
-const [ 0x8a, 0x2d, 0xb9, 0x6a, 0x4d, 0xf1, 0x88, 0xec, 0x32, 0x3e, 0xf6, 0xea, 0xa7, 0xd5, 0x8b, 0x56, 0x21, 0x6b, 0x00, 0x97, 0xbe, 0xb5, 0x01, 0x39, 0x29, 0xc2, 0x31, 0xe3, 0xbe, 0x8d, 0x6f, 0x89, 0xee, 0xd3, 0x58, 0xe2, 0xe5, 0x22, 0x0c, 0x1d, 0x6b, 0x33, 0x35, 0xd0, 0x08, 0x79, 0x46, 0x31, 0x6c, 0xfa, 0x01, 0x88, 0x0d, 0x5e, 0x3c, 0xe4, 0x12, 0x45, 0xe4, 0x0d, 0x70, 0xde, 0x42, 0xbb, 0x53, 0xb6, 0x7d, 0x05, 0xbf, 0xcd, 0x61, 0x1c, 0x77, 0xef, 0x5e, 0x39, 0x1e, 0x41, 0xd4, 0xd4, 0x9c, 0x1b, 0x8e, 0x17, 0xc3, 0x15, 0x8c, 0x92, 0x33, 0x65, 0x05, 0x30, 0x7a, 0x68, 0xac, 0x6a, 0x80, 0x7e, 0x33, 0xba, 0x23, 0x1b, 0x0d, 0x53, 0x1e, 0x1b, 0x79, 0x0f, 0x2f, 0x56, 0xbc, 0xa9, 0x79, 0x75, 0xad, 0x2c, 0x27, 0x04, 0x77, 0xab, 0x52, 0xc8, 0x9b, 0x33, 0x24, 0x52, 0x34, 0xfe ],
-const [ 0x1e, 0x69, 0x13, 0x65, 0xad, 0x90, 0x64, 0x60, 0x31, 0xe0, 0x1e, 0x73, 0x7c, 0xb3, 0xc6, 0x5a, 0x66, 0x54, 0x09, 0x62, 0x1d, 0x05, 0xad, 0x86, 0xbd, 0x47, 0xc9, 0xd7, 0x21, 0x55, 0x31, 0x21, 0xf8, 0xf2, 0x35, 0xcb, 0x1b, 0x64, 0x8b, 0xff, 0x1e, 0xc1, 0x89, 0x0b, 0x24, 0x69, 0x97, 0x07, 0xf8, 0xd4, 0xe5, 0xb8, 0x5a, 0x8e, 0x59, 0xb5, 0x97, 0x7f, 0xcc, 0xc8, 0x5d, 0x70, 0x75, 0x97, 0xcc, 0xcb, 0xa5, 0x84, 0xd0, 0xa2, 0xb5, 0xd1, 0xaf, 0xf3, 0x3d, 0x08, 0xde, 0x2b, 0x87, 0x9a, 0x19, 0xe8, 0x44, 0xc6, 0xb2, 0x03, 0x7d, 0xbc, 0x2a, 0xce, 0xcc, 0x03, 0xfe, 0x9a, 0xcb, 0x18, 0xc3, 0x7d, 0xcd, 0x58, 0x75, 0x52, 0xcc, 0x1f, 0x0d, 0x00, 0xa3, 0x32, 0x51, 0x00, 0x7d, 0x5a, 0xf0, 0x19, 0x8e, 0x52, 0xce, 0x6e, 0x01, 0xe3, 0x9d, 0xbb, 0x31, 0x4e, 0xad, 0xdc, 0x1b, 0xea ],
-const [ 0x21, 0x2a, 0x04, 0x48, 0xf4, 0xb3, 0x9f, 0x0d, 0x22, 0xf9, 0xa0, 0xd5, 0xa4, 0x20, 0x66, 0x16, 0x70, 0x56, 0x36, 0x8b, 0x9c, 0x66, 0x82, 0x72, 0xc7, 0x8a, 0x6b, 0xf8, 0xb5, 0x81, 0x84, 0xf2, 0x39, 0xe2, 0xd9, 0xcd, 0x58, 0xb0, 0x30, 0xc8, 0xab, 0x2e, 0x8e, 0x60, 0x05, 0xf5, 0xfd, 0x0c, 0x56, 0x43, 0x8d, 0x2b, 0xcf, 0x96, 0x99, 0x3b, 0x47, 0x7a, 0x4b, 0x4b, 0xde, 0x9f, 0x62, 0xb3, 0xe0, 0x2e, 0x33, 0x02, 0xec, 0x5d, 0xee, 0x38, 0x55, 0x42, 0x23, 0x36, 0xc8, 0xe4, 0x85, 0x72, 0x2f, 0x98, 0xed, 0xef, 0xd6, 0x8b, 0xa2, 0x6d, 0xcc, 0x9b, 0xd7, 0xdd, 0x8d, 0x6b, 0x75, 0x17, 0xdd, 0xb6, 0x1b, 0xcf, 0xf7, 0xe3, 0x63, 0xc5, 0xe7, 0xda, 0x68, 0x3d, 0x35, 0x17, 0x85, 0xaf, 0xc3, 0xfc, 0x5f, 0xbf, 0xf8, 0x6c, 0x25, 0x6f, 0x1e, 0x95, 0x16, 0x94, 0x09, 0x0d, 0x44, 0x87 ],
-const [ 0x2d, 0x93, 0x13, 0x69, 0x18, 0x68, 0x16, 0x1f, 0xf6, 0x09, 0xb6, 0xf0, 0xb0, 0x94, 0x31, 0x71, 0x98, 0xdd, 0x94, 0xcb, 0x41, 0xfb, 0x2e, 0x62, 0x93, 0x07, 0x44, 0xb4, 0x1e, 0x20, 0x06, 0x83, 0xaf, 0xb2, 0xc2, 0x36, 0x21, 0xf8, 0x58, 0x7d, 0x76, 0xc0, 0xee, 0x34, 0x27, 0x6f, 0xe4, 0x8a, 0xb7, 0x44, 0x0a, 0x62, 0x8e, 0xe1, 0x11, 0xf9, 0x05, 0x07, 0x40, 0xc9, 0xbe, 0xa1, 0x68, 0xae, 0x36, 0x04, 0x1a, 0x48, 0x9d, 0x75, 0x17, 0xa0, 0xe5, 0xeb, 0x08, 0x0e, 0x19, 0x17, 0x70, 0x5a, 0xf0, 0xa2, 0xde, 0x21, 0xa2, 0xb6, 0x67, 0x7a, 0xfa, 0xbf, 0x53, 0xda, 0xac, 0x73, 0x17, 0x35, 0xea, 0x10, 0x84, 0x66, 0x32, 0xe4, 0x3d, 0xd1, 0x6a, 0x13, 0x6e, 0x47, 0x2e, 0x95, 0xbb, 0x2a, 0x69, 0x7e, 0x77, 0xd1, 0x22, 0x82, 0x17, 0x2d, 0x99, 0xb8, 0xe6, 0xad, 0x93, 0x9e, 0xfa, 0x60 ],
-const [ 0x81, 0xc9, 0x4b, 0xe4, 0x26, 0xea, 0xf0, 0x18, 0x64, 0xe8, 0x13, 0xa0, 0x3e, 0x46, 0x74, 0x49, 0x1b, 0x61, 0x51, 0x6b, 0xc9, 0x5d, 0x8a, 0x77, 0xc1, 0x5f, 0x03, 0xd0, 0xad, 0xfc, 0x4a, 0xdc, 0x27, 0xf2, 0x7a, 0x5a, 0xc4, 0x16, 0x5f, 0xf6, 0x51, 0x8e, 0xda, 0x1a, 0x5c, 0x40, 0x87, 0x08, 0xf7, 0x8a, 0x9e, 0x26, 0xb8, 0x34, 0x17, 0x98, 0x04, 0xa3, 0x12, 0x14, 0x8d, 0x4f, 0x75, 0xf2, 0x1a, 0x77, 0xd7, 0x83, 0x87, 0x13, 0x9d, 0xa4, 0x0c, 0x0a, 0x62, 0x93, 0xc2, 0xa5, 0x9d, 0x01, 0x62, 0x43, 0x7d, 0x68, 0x50, 0x4f, 0x18, 0x9e, 0xd9, 0x70, 0xc5, 0xab, 0xb9, 0xff, 0xc6, 0xd8, 0xe1, 0xbe, 0x2b, 0x08, 0x77, 0xc7, 0xf2, 0x4b, 0x1d, 0xc2, 0x73, 0xb1, 0x76, 0x5b, 0xfc, 0x5c, 0xe6, 0xf4, 0xb8, 0xd9, 0x9a, 0x96, 0xd5, 0xb1, 0xc9, 0x2e, 0xe5, 0x3a, 0x39, 0xf6, 0x85, 0xb3 ],
-const [ 0xb3, 0x4e, 0x5b, 0x08, 0x32, 0x12, 0x8d, 0x3a, 0x87, 0x94, 0xc2, 0xab, 0x44, 0x71, 0x32, 0x85, 0x7a, 0xc0, 0xa8, 0x34, 0x75, 0xf6, 0xd9, 0x6e, 0xa6, 0x07, 0xf4, 0x70, 0xe1, 0xce, 0x7a, 0x8b, 0xc9, 0xaf, 0x50, 0xe0, 0x88, 0x7b, 0x13, 0x68, 0xc3, 0x93, 0xab, 0x37, 0xcc, 0x51, 0x23, 0x01, 0x1a, 0xa3, 0xb7, 0xdd, 0xf7, 0xf9, 0x2f, 0x49, 0x79, 0x62, 0x6c, 0x6e, 0xb3, 0xf1, 0x41, 0xa6, 0x2c, 0x66, 0x84, 0x3c, 0x91, 0x0a, 0x64, 0x73, 0xa6, 0xdb, 0xfc, 0xc9, 0x82, 0xe9, 0x29, 0x7c, 0xfc, 0x00, 0x99, 0x4e, 0x61, 0x87, 0x25, 0x85, 0x68, 0xa8, 0x61, 0x37, 0x67, 0xb2, 0x71, 0xc4, 0xc6, 0xbb, 0x1e, 0xa4, 0xb4, 0x89, 0x29, 0x63, 0x1a, 0xb3, 0xde, 0xe9, 0xcd, 0x03, 0xed, 0xff, 0x08, 0x1f, 0x76, 0x0f, 0x19, 0x68, 0x63, 0x2b, 0x5a, 0x23, 0xfa, 0x51, 0x63, 0xd7, 0xb2, 0xee ],
-const [ 0xf1, 0x84, 0xd3, 0x80, 0x9b, 0x13, 0xc4, 0x17, 0xe0, 0x6c, 0x7e, 0xd5, 0x1d, 0x89, 0xe7, 0x9c, 0x02, 0x6f, 0xbf, 0xbb, 0xf1, 0x02, 0x26, 0x62, 0xa6, 0x1d, 0x5e, 0x5a, 0x1d, 0xe2, 0xd3, 0xf2, 0xb0, 0x4f, 0x58, 0x3d, 0x81, 0x12, 0xb4, 0x7a, 0x17, 0x9f, 0x5d, 0xd4, 0x4c, 0x7f, 0x83, 0x4c, 0x66, 0xeb, 0x50, 0xf3, 0x84, 0x99, 0x6f, 0x5c, 0x3c, 0xd6, 0xcb, 0x51, 0x82, 0xd5, 0x99, 0xc5, 0xcb, 0x47, 0x98, 0x0a, 0x73, 0x2b, 0x97, 0x44, 0x5c, 0xe8, 0x39, 0x1e, 0xd9, 0x99, 0xf5, 0xbb, 0xca, 0xa8, 0x60, 0xf0, 0x08, 0x9e, 0xaf, 0xb0, 0x03, 0x39, 0x77, 0xc7, 0xa9, 0xc0, 0xb8, 0xcb, 0x8a, 0x93, 0x1a, 0x50, 0x3a, 0x06, 0x76, 0x5c, 0xf7, 0x6f, 0x98, 0x1b, 0x8c, 0x7e, 0x44, 0xd3, 0x75, 0xcd, 0x76, 0x19, 0x44, 0xb8, 0xee, 0x46, 0x44, 0x6f, 0xec, 0x25, 0x5b, 0x49, 0x39, 0xee ],
-const [ 0xbc, 0x74, 0x04, 0x1e, 0xa2, 0x0c, 0x9b, 0x74, 0x89, 0xdc, 0xe3, 0xba, 0x9e, 0x27, 0x9c, 0x00, 0xc1, 0x24, 0xb6, 0xbf, 0x94, 0xb9, 0x0c, 0xbf, 0xd2, 0x86, 0x4f, 0x37, 0xe3, 0x25, 0x40, 0x37, 0xad, 0xb0, 0x23, 0x43, 0xac, 0x84, 0x70, 0x40, 0x45, 0x45, 0xcb, 0x95, 0x57, 0x23, 0x36, 0x8a, 0x14, 0x5b, 0x86, 0xf3, 0x0f, 0x00, 0x13, 0x13, 0x95, 0xfb, 0xb4, 0xbb, 0x41, 0x51, 0xeb, 0xb2, 0xcb, 0xa4, 0x5c, 0x59, 0x21, 0xfd, 0x84, 0x8f, 0xb9, 0xc8, 0xa7, 0xd3, 0x25, 0x20, 0x0a, 0xa8, 0xe8, 0x4d, 0x63, 0x3e, 0x88, 0x8b, 0x8e, 0x4e, 0xe4, 0x0d, 0x81, 0x46, 0xc8, 0x42, 0x82, 0xa6, 0xbf, 0x57, 0x98, 0xaa, 0x28, 0xfd, 0x3f, 0x29, 0x8c, 0x6c, 0x5f, 0xbd, 0x2f, 0xa8, 0x7f, 0x24, 0xe5, 0x03, 0x36, 0xe6, 0x27, 0xe3, 0xe3, 0x38, 0x66, 0xc5, 0x9e, 0x21, 0x9f, 0x82, 0x6f, 0xdb ],
-const [ 0x2f, 0x42, 0xa2, 0xad, 0x39, 0xf8, 0x42, 0xc3, 0x55, 0xd4, 0x66, 0x70, 0x45, 0x58, 0x17, 0xe6, 0x89, 0xdd, 0xd9, 0xe7, 0xe8, 0xd8, 0xe1, 0x2b, 0x4d, 0x5b, 0x83, 0x02, 0xd4, 0xdf, 0xea, 0x3a, 0x25, 0x40, 0x0b, 0x43, 0x01, 0x09, 0xdb, 0x91, 0x1a, 0xf2, 0xc0, 0x42, 0x28, 0xa7, 0x46, 0x01, 0x39, 0xcb, 0x14, 0x2a, 0x48, 0x3d, 0x1e, 0x2e, 0x12, 0x9a, 0x1c, 0x3a, 0x25, 0x03, 0x3a, 0x13, 0x3a, 0x20, 0x11, 0x45, 0xc4, 0x64, 0xd6, 0x7c, 0xc9, 0x93, 0xd1, 0x32, 0xf1, 0x82, 0x11, 0x8a, 0xdd, 0x1f, 0x5f, 0x7c, 0xb9, 0xb0, 0x70, 0x33, 0x15, 0x60, 0x5f, 0xb3, 0xf0, 0xf7, 0x5a, 0xbf, 0x16, 0xe9, 0x9b, 0xfa, 0xad, 0x92, 0x99, 0x4c, 0x0a, 0xc0, 0x80, 0x87, 0xc9, 0x72, 0xdf, 0x4b, 0x1c, 0xdf, 0xa1, 0x27, 0x63, 0xba, 0x3f, 0x00, 0xfd, 0xb5, 0x34, 0xb7, 0x5e, 0x44, 0xb0, 0x06 ],
-const [ 0xee, 0xb9, 0x55, 0xb9, 0x59, 0xc4, 0x8f, 0x35, 0x9e, 0x05, 0xda, 0x6f, 0xe4, 0x99, 0x2c, 0x90, 0x7c, 0x1c, 0x01, 0x34, 0x67, 0x1c, 0x00, 0x78, 0x18, 0xce, 0xdb, 0x54, 0x7a, 0x00, 0x77, 0x2c, 0x35, 0x4f, 0x4d, 0xa1, 0x2e, 0x9a, 0x10, 0xad, 0x4c, 0xb7, 0x8f, 0xef, 0x82, 0x64, 0xde, 0x43, 0x0a, 0x80, 0xb0, 0x96, 0xee, 0x7b, 0x08, 0xf9, 0xcd, 0x0b, 0x11, 0xf3, 0xdc, 0x20, 0x49, 0x1c, 0x2b, 0x1b, 0xe5, 0xe7, 0x2a, 0x3a, 0x72, 0xc0, 0x6b, 0x57, 0xb8, 0x57, 0xa9, 0xd3, 0xe3, 0x3b, 0x0a, 0xcd, 0xe5, 0xaa, 0xa1, 0x97, 0x16, 0xa8, 0x37, 0x6a, 0x1d, 0x4e, 0x4b, 0x58, 0x14, 0x65, 0x57, 0x83, 0xe7, 0x33, 0x55, 0x8d, 0xfd, 0x95, 0x82, 0x4f, 0x1b, 0x4e, 0x62, 0xce, 0x85, 0x9f, 0x04, 0x6a, 0x66, 0x18, 0x87, 0x59, 0x71, 0xad, 0xdd, 0x54, 0xc9, 0x0c, 0xcf, 0x90, 0x1e, 0x2e ],
-const [ 0x15, 0x52, 0xdf, 0x9b, 0xae, 0x4f, 0xc9, 0x79, 0x85, 0xbc, 0xf7, 0xd5, 0xfa, 0x01, 0x79, 0x93, 0x32, 0x42, 0x3b, 0xff, 0x19, 0x4a, 0x2a, 0x61, 0xa7, 0xc2, 0x98, 0xd2, 0x63, 0xa7, 0xe2, 0x4d, 0x26, 0xfb, 0x50, 0x09, 0x22, 0xba, 0x3c, 0x06, 0x22, 0x0f, 0x77, 0xe6, 0x13, 0xc8, 0xe8, 0xff, 0xc4, 0x08, 0x76, 0xae, 0xea, 0x3b, 0x29, 0xee, 0x67, 0x4f, 0x8b, 0x29, 0xcc, 0x22, 0x55, 0x4e, 0x1c, 0x36, 0x47, 0x23, 0xd3, 0xac, 0x58, 0xdd, 0x26, 0x70, 0x0f, 0xee, 0x8d, 0xb1, 0x31, 0x1e, 0x7f, 0x94, 0x9c, 0xdd, 0x7c, 0x29, 0x73, 0xd7, 0x51, 0x9e, 0x7b, 0xca, 0x98, 0xb2, 0xc5, 0x94, 0x7e, 0x6d, 0x8e, 0x91, 0xc9, 0x0e, 0x63, 0x23, 0x19, 0x46, 0x89, 0x92, 0x6d, 0xa3, 0x9b, 0x17, 0xea, 0x4f, 0x75, 0x33, 0xd8, 0xfa, 0x51, 0x45, 0xee, 0x15, 0x30, 0x5c, 0xcf, 0x41, 0x7c, 0x4a ],
-const [ 0x4d, 0x44, 0x81, 0x93, 0x6f, 0x52, 0x30, 0x35, 0xb9, 0x21, 0x00, 0x51, 0x01, 0xba, 0x20, 0x6b, 0x85, 0xf5, 0x5e, 0x27, 0x2e, 0xa4, 0x90, 0x16, 0x16, 0x0e, 0x32, 0xd0, 0x47, 0x9f, 0x50, 0x43, 0xc6, 0xdd, 0xa7, 0x4a, 0xd0, 0x9e, 0x07, 0x82, 0x63, 0x78, 0xfb, 0x59, 0x00, 0x7a, 0xac, 0x67, 0xb0, 0x19, 0x03, 0x02, 0x45, 0x6d, 0x0e, 0x0c, 0xe2, 0x9e, 0xa5, 0x10, 0xbd, 0x99, 0x4d, 0x8d, 0x24, 0x07, 0x5c, 0x92, 0xbe, 0x7f, 0x5e, 0x8b, 0x14, 0xfa, 0xb8, 0x5b, 0x4f, 0x88, 0x8b, 0xab, 0x43, 0x42, 0xdb, 0x81, 0xad, 0x80, 0xf1, 0x14, 0xb9, 0x4c, 0xfd, 0xdf, 0xc8, 0x16, 0x00, 0xf4, 0x6f, 0xa9, 0xe9, 0x93, 0xc3, 0x5d, 0xfe, 0xfb, 0xd4, 0x8e, 0x7e, 0x80, 0x77, 0x4e, 0x85, 0xde, 0x49, 0x57, 0x2f, 0xcd, 0xf0, 0x43, 0x00, 0xd5, 0xa4, 0x00, 0x84, 0x64, 0xef, 0x7e, 0x32, 0x1e ],
-const [ 0x7c, 0x88, 0x1d, 0xe0, 0x03, 0x88, 0xa0, 0x0f, 0x8c, 0xee, 0xa8, 0x87, 0xb8, 0xe8, 0x7e, 0xf7, 0xce, 0xb2, 0x3e, 0xa0, 0x5d, 0xad, 0x95, 0x06, 0x23, 0xb0, 0xca, 0xeb, 0x2e, 0xa2, 0xfb, 0x7d, 0x41, 0x49, 0xaa, 0xcf, 0x79, 0x5d, 0x78, 0x86, 0x30, 0xe1, 0x2f, 0xd5, 0x22, 0xb3, 0x06, 0xab, 0xce, 0x61, 0x21, 0x2a, 0x20, 0x3e, 0x58, 0x5c, 0x4c, 0xb5, 0x39, 0x21, 0xfd, 0xde, 0x50, 0x6c, 0xaf, 0x4f, 0xa6, 0xaf, 0x59, 0x35, 0x87, 0x94, 0x50, 0xa3, 0x88, 0xee, 0x68, 0x29, 0xc9, 0xef, 0x5c, 0xa9, 0x78, 0x9b, 0x70, 0x66, 0x96, 0x7c, 0x54, 0x5e, 0xfe, 0x98, 0x4c, 0xda, 0xa3, 0xa0, 0x8e, 0x43, 0x19, 0x6a, 0xeb, 0x37, 0x57, 0xa1, 0xb2, 0xdc, 0xbb, 0xbc, 0xd2, 0x74, 0x4e, 0x2c, 0x3e, 0x32, 0x4a, 0xda, 0x96, 0x4c, 0xd9, 0xd0, 0x03, 0x52, 0x20, 0x36, 0x63, 0xbe, 0x7c, 0x81 ],
-const [ 0x83, 0x7d, 0xc1, 0x90, 0xbf, 0x0a, 0x96, 0xd9, 0xc7, 0x87, 0x9d, 0x8d, 0x99, 0x8c, 0x5c, 0x21, 0xa2, 0x63, 0x47, 0x51, 0x80, 0xbc, 0x9c, 0x70, 0x0c, 0xa2, 0x8c, 0xfc, 0x98, 0xae, 0x9b, 0x75, 0x75, 0x7b, 0x49, 0x6f, 0xb9, 0x59, 0xf2, 0xe7, 0x3e, 0x46, 0xf3, 0xd3, 0xee, 0x1a, 0x0e, 0xfc, 0x3e, 0x01, 0x10, 0x10, 0xf9, 0x2e, 0xb0, 0xf3, 0x3f, 0xce, 0xbb, 0x57, 0xcd, 0x3b, 0x6e, 0x8c, 0x7f, 0x73, 0x23, 0x99, 0x12, 0xc8, 0x31, 0x8b, 0x2f, 0xd9, 0x0d, 0x0d, 0xa5, 0xc0, 0xb5, 0x39, 0xf7, 0x8d, 0x4e, 0xae, 0x16, 0xf4, 0x0b, 0xe3, 0x6f, 0x42, 0x52, 0xbb, 0x28, 0x95, 0x1a, 0x59, 0xa7, 0x4d, 0x98, 0x35, 0x55, 0xbe, 0x1a, 0x6f, 0xa1, 0x27, 0x33, 0x64, 0x47, 0xe8, 0x18, 0x80, 0xd2, 0xef, 0x4a, 0x53, 0x5f, 0x74, 0x75, 0xe6, 0xa5, 0xe6, 0x98, 0x4f, 0x32, 0x25, 0x67, 0x83 ],
-const [ 0xd6, 0x08, 0x12, 0x43, 0x30, 0x98, 0xc4, 0x46, 0x23, 0x15, 0x91, 0x53, 0xde, 0x7c, 0xd2, 0x72, 0x1b, 0x34, 0x9f, 0x68, 0x5c, 0x43, 0x38, 0x8a, 0x74, 0xc2, 0xa3, 0xd0, 0x4a, 0x8e, 0x97, 0x2a, 0xda, 0x41, 0x99, 0x17, 0x7c, 0x61, 0x65, 0x73, 0x69, 0xd7, 0x8f, 0x90, 0x7b, 0xa2, 0x6a, 0x89, 0x34, 0xcc, 0x29, 0xd3, 0x02, 0x9d, 0x44, 0x15, 0xc1, 0x10, 0x1e, 0x3a, 0x82, 0x83, 0xe4, 0xc4, 0x8b, 0xb2, 0xb8, 0x63, 0x9f, 0xe6, 0x0f, 0xc6, 0x7f, 0x6a, 0x57, 0xb1, 0xb0, 0x3f, 0xde, 0x50, 0x7f, 0x10, 0xef, 0xcb, 0x43, 0x68, 0x3e, 0x1a, 0xe2, 0x23, 0x85, 0x1b, 0x96, 0x23, 0x70, 0xe1, 0xf1, 0x44, 0xb7, 0x4f, 0x1f, 0x91, 0x89, 0xe6, 0x6c, 0xb8, 0x31, 0xdc, 0x05, 0xbb, 0xf4, 0x6e, 0x03, 0xe9, 0x38, 0x77, 0xa5, 0x0d, 0xec, 0x40, 0xdd, 0xe5, 0x23, 0x9a, 0x0f, 0xd5, 0x02, 0x2a ],
-const [ 0xa1, 0x6b, 0x3f, 0xdc, 0xaa, 0x7e, 0xb6, 0xa2, 0x13, 0x51, 0x59, 0xaa, 0x69, 0x48, 0xc6, 0xa8, 0xdc, 0xe7, 0x47, 0x51, 0x9f, 0x9f, 0x54, 0xcb, 0x92, 0xe7, 0x59, 0x62, 0x1f, 0x8f, 0xb9, 0x7c, 0x61, 0x51, 0x12, 0xcf, 0x8c, 0xaa, 0xc3, 0xd1, 0x89, 0xe8, 0xab, 0x70, 0xe0, 0x83, 0x34, 0x04, 0xdb, 0xb0, 0x90, 0x82, 0xe9, 0x34, 0x43, 0xf2, 0x40, 0x76, 0xe2, 0x23, 0xc6, 0xd9, 0x1a, 0x9d, 0x32, 0x48, 0xf3, 0xd7, 0x6e, 0x13, 0x56, 0xaa, 0x40, 0xf9, 0xce, 0x06, 0x2a, 0x86, 0x8b, 0xe4, 0x8f, 0x9f, 0xac, 0x7b, 0x16, 0x5b, 0xbe, 0xb7, 0x54, 0x14, 0x7f, 0xe7, 0xa5, 0xbe, 0xe8, 0xb6, 0x5a, 0x78, 0x6b, 0x5c, 0x1a, 0x61, 0x7a, 0x15, 0x82, 0xad, 0x48, 0xd2, 0x0f, 0xf8, 0xd3, 0x2f, 0x3e, 0xd9, 0x22, 0xa6, 0xf1, 0xbb, 0xcb, 0x02, 0x15, 0xe8, 0xb9, 0x16, 0x82, 0xe7, 0x2c, 0xae ],
-const [ 0x04, 0xe4, 0x79, 0x8b, 0x90, 0xbe, 0xae, 0xe2, 0xec, 0xca, 0x6a, 0x4c, 0x14, 0x63, 0xad, 0x9c, 0x1f, 0x96, 0x61, 0xe0, 0x71, 0x83, 0x32, 0xe7, 0x31, 0x05, 0x9f, 0x00, 0xfe, 0x95, 0x51, 0x05, 0xdd, 0x6b, 0xac, 0x98, 0x76, 0xe7, 0xa5, 0xad, 0x81, 0x30, 0xd3, 0x49, 0x7b, 0x1b, 0xc8, 0x88, 0x9d, 0x4e, 0xa1, 0xe5, 0x0e, 0xa5, 0xdc, 0xb6, 0x58, 0xd4, 0x6a, 0xf6, 0x19, 0x4e, 0x05, 0x47, 0xfb, 0x66, 0xc4, 0x37, 0xe5, 0xb4, 0xed, 0xc3, 0x73, 0xbb, 0x0a, 0x1a, 0xa4, 0xc8, 0x3f, 0xa3, 0xd3, 0x1d, 0xda, 0x40, 0xe9, 0x4f, 0x2c, 0xd5, 0xd0, 0xed, 0x98, 0x04, 0x2b, 0x62, 0xe9, 0x3b, 0x44, 0x1d, 0xe8, 0xf1, 0x45, 0xef, 0x2f, 0x2c, 0xac, 0xb4, 0x38, 0x47, 0xf9, 0x35, 0xb9, 0xf2, 0xa9, 0x4d, 0x34, 0x7a, 0x68, 0x4b, 0xc9, 0x4b, 0x83, 0x98, 0x50, 0xb3, 0x9c, 0x9a, 0xa4, 0xe8 ],
-const [ 0x2d, 0x20, 0x11, 0x94, 0xf7, 0x3a, 0x9c, 0xa6, 0xe4, 0x48, 0x34, 0xd8, 0xa4, 0x4a, 0xa9, 0x48, 0x28, 0x7d, 0x15, 0x36, 0x06, 0x2c, 0x64, 0x70, 0x20, 0xc9, 0x14, 0x0d, 0x81, 0x3c, 0x3a, 0x5e, 0x87, 0x7b, 0xc6, 0x22, 0x47, 0x5b, 0x07, 0xf9, 0x2d, 0xa6, 0x72, 0x1c, 0xe3, 0x6d, 0x9f, 0x4a, 0x74, 0x9f, 0x94, 0x06, 0xb2, 0xdb, 0x46, 0xff, 0xd5, 0x83, 0x5d, 0xd0, 0x64, 0x12, 0x38, 0xe9, 0x59, 0xaf, 0x31, 0xcd, 0x80, 0x02, 0x22, 0x7f, 0x20, 0x46, 0x28, 0x36, 0xdd, 0x9f, 0xa6, 0x58, 0xdd, 0xae, 0x8d, 0xa6, 0x2a, 0x63, 0xdb, 0xb4, 0x57, 0x13, 0x62, 0x9d, 0x67, 0xcb, 0xcb, 0xf4, 0xea, 0xe3, 0xda, 0xfe, 0x69, 0xd6, 0xf4, 0x1e, 0x04, 0x51, 0xde, 0x90, 0x5a, 0x89, 0xc7, 0x5a, 0xa9, 0xd2, 0x89, 0x80, 0x36, 0x6e, 0x2c, 0x78, 0xf0, 0xa2, 0xab, 0xdd, 0x50, 0x0f, 0xfb, 0x68 ],
-const [ 0x1b, 0x3b, 0x01, 0x2e, 0x5a, 0x31, 0x47, 0x20, 0x73, 0x50, 0xe9, 0x81, 0xc0, 0x5f, 0x20, 0xf2, 0x68, 0xb4, 0x79, 0x20, 0x78, 0xf9, 0x86, 0xa2, 0x36, 0x30, 0xd3, 0x25, 0xb2, 0xf5, 0x1b, 0xc6, 0x9d, 0x03, 0xbc, 0xbf, 0x5e, 0xfa, 0x69, 0x46, 0x63, 0x60, 0x1f, 0xb2, 0xb5, 0xe5, 0x5a, 0xe0, 0xd0, 0xeb, 0x88, 0xd5, 0xb1, 0x45, 0xbe, 0xa4, 0x30, 0x3f, 0xaa, 0x92, 0x90, 0xdf, 0xc9, 0x79, 0x55, 0x6b, 0xd9, 0x6a, 0x55, 0x2b, 0x92, 0x96, 0x12, 0x70, 0x91, 0x6f, 0x47, 0xd6, 0x95, 0x0a, 0xc1, 0xc5, 0xed, 0xc8, 0x70, 0x3e, 0x31, 0x35, 0xbe, 0xd4, 0x31, 0x30, 0x1f, 0xf8, 0x2b, 0x4d, 0xea, 0x7a, 0x41, 0x77, 0x67, 0x4d, 0x29, 0xda, 0x29, 0x8b, 0x27, 0x00, 0x9e, 0xb8, 0x38, 0x39, 0xe4, 0x4b, 0x90, 0x41, 0xde, 0x6a, 0x47, 0x1d, 0x88, 0xf6, 0x50, 0x46, 0x87, 0xc7, 0xaa, 0x09 ],
-const [ 0xf8, 0x0c, 0x55, 0xde, 0x4b, 0x5a, 0xd7, 0x4e, 0x4f, 0x8d, 0xc1, 0x4b, 0x6a, 0x45, 0xc0, 0x19, 0xe1, 0x82, 0x66, 0x54, 0xed, 0x66, 0xd9, 0xd5, 0x12, 0x3d, 0xcd, 0xda, 0xac, 0xba, 0xaf, 0x60, 0xcb, 0x83, 0x23, 0xd4, 0x40, 0xf1, 0xb1, 0xeb, 0xf8, 0x10, 0xbb, 0xcf, 0x89, 0xee, 0xb3, 0x7b, 0x0b, 0x12, 0x8b, 0x68, 0x29, 0x4a, 0x6c, 0x69, 0x77, 0xaa, 0xaa, 0xd3, 0x07, 0xd1, 0xf8, 0xe2, 0x37, 0x6e, 0xd8, 0x58, 0xcc, 0x03, 0x56, 0x67, 0x45, 0xe9, 0xf6, 0xd1, 0x69, 0x95, 0xeb, 0x4e, 0x23, 0x19, 0x89, 0x2e, 0x8f, 0xed, 0xfd, 0x3f, 0x55, 0xf0, 0x3c, 0xf1, 0x36, 0xaa, 0x39, 0xb8, 0xe4, 0xd4, 0x5b, 0xb2, 0x17, 0x1a, 0x2e, 0x8a, 0xdd, 0x1f, 0x59, 0x9c, 0x31, 0xc2, 0xd0, 0x5a, 0xd0, 0xa0, 0x4a, 0xee, 0x48, 0xd9, 0xf6, 0x21, 0x52, 0x18, 0x69, 0x7b, 0x61, 0xcd, 0xdb, 0xab ],
-const [ 0x9f, 0x65, 0xa4, 0x26, 0x10, 0x6d, 0xb9, 0x9d, 0xcb, 0x21, 0x30, 0xbe, 0x14, 0x83, 0x92, 0x41, 0xd4, 0xa9, 0x2c, 0x8b, 0xec, 0xc1, 0x08, 0xd2, 0xc9, 0x52, 0x1b, 0x82, 0x38, 0xc5, 0xc0, 0xdf, 0x7c, 0x23, 0x65, 0xec, 0x9f, 0x20, 0x84, 0x8c, 0x05, 0x59, 0xd6, 0xe8, 0x47, 0xda, 0xc3, 0x10, 0x3e, 0xe3, 0x1c, 0xe5, 0x5d, 0xec, 0x0c, 0x36, 0x44, 0xe6, 0x4c, 0x29, 0x93, 0xc4, 0x97, 0xdd, 0xfc, 0x3a, 0x5e, 0x4d, 0x9d, 0xc4, 0xbc, 0x78, 0x8c, 0xeb, 0xac, 0xbf, 0xb3, 0xc4, 0x7a, 0x8e, 0xde, 0xb9, 0x77, 0x3e, 0x12, 0x8b, 0xf1, 0x3a, 0x21, 0x98, 0x62, 0x61, 0x7b, 0x5a, 0xe8, 0xac, 0x47, 0x31, 0xf5, 0x11, 0xb2, 0x62, 0x48, 0xa7, 0x87, 0x5f, 0x1c, 0x0a, 0x01, 0x49, 0x9f, 0x01, 0xdd, 0xb3, 0xa5, 0x5e, 0xb2, 0xa9, 0x9e, 0x26, 0x85, 0xf0, 0xc5, 0xf2, 0x98, 0x90, 0x9b, 0x95 ],
-const [ 0x5f, 0x17, 0x29, 0x73, 0x85, 0x2b, 0x94, 0x7a, 0xd8, 0x40, 0x6f, 0xe0, 0x04, 0xde, 0x6e, 0x94, 0x12, 0x7c, 0x7f, 0xe2, 0xe9, 0xf3, 0x65, 0x8c, 0x14, 0x33, 0xa2, 0x1d, 0xc5, 0x35, 0x9b, 0x7a, 0x1a, 0x31, 0xf7, 0xba, 0xa0, 0x10, 0x48, 0x37, 0x16, 0x24, 0xed, 0xe5, 0x73, 0x17, 0x37, 0xe3, 0x2a, 0x21, 0xca, 0x50, 0xac, 0x7e, 0x46, 0x60, 0x2e, 0x20, 0x27, 0xaf, 0xad, 0xa1, 0xea, 0xd5, 0x30, 0x7b, 0x72, 0x3a, 0x4e, 0x7b, 0xa9, 0x2c, 0xef, 0x73, 0x6a, 0x2e, 0x57, 0x30, 0x9f, 0x93, 0x60, 0xab, 0xa6, 0x4c, 0x06, 0x83, 0xfa, 0xff, 0x29, 0xab, 0x0f, 0x59, 0x8f, 0x60, 0x7d, 0xa4, 0x29, 0x5f, 0x61, 0x9c, 0x97, 0x54, 0x00, 0x7e, 0xed, 0x95, 0xae, 0x63, 0xb8, 0x10, 0xef, 0xcc, 0x3c, 0x83, 0xdb, 0x7e, 0x00, 0xeb, 0xc7, 0x90, 0x8d, 0x3e, 0x21, 0xc2, 0x72, 0x5c, 0x9c, 0x10 ],
-const [ 0xe8, 0x4d, 0xc3, 0xe5, 0xa3, 0xe9, 0xc5, 0x9b, 0x8d, 0x4c, 0x80, 0xfe, 0xe2, 0x0b, 0x43, 0xf3, 0x88, 0xc9, 0x35, 0xd5, 0xfd, 0x5c, 0xe9, 0xb9, 0x8f, 0x2b, 0x32, 0xf7, 0xcb, 0xda, 0x39, 0xe6, 0x37, 0x2a, 0xcc, 0xe6, 0x44, 0x1a, 0xf9, 0xa4, 0x7e, 0x53, 0xdc, 0x99, 0x06, 0xc2, 0xb5, 0xd4, 0x42, 0x87, 0x3d, 0xfa, 0xd3, 0x0e, 0x3b, 0x8b, 0xc7, 0x7b, 0x52, 0x66, 0x10, 0x4c, 0x1d, 0x90, 0x35, 0x39, 0x7e, 0x31, 0x48, 0x5f, 0x32, 0xdf, 0x18, 0x9e, 0xa9, 0x1f, 0xa7, 0x40, 0x15, 0x29, 0xdf, 0xdb, 0xc2, 0xec, 0x80, 0x78, 0xa5, 0x52, 0x5d, 0xf4, 0x37, 0xc5, 0xc8, 0xa7, 0x84, 0xf2, 0x4b, 0x44, 0x7e, 0xcd, 0x99, 0x00, 0x98, 0xd5, 0xc3, 0xf7, 0x90, 0x99, 0xaf, 0xcb, 0x8c, 0x7b, 0xc7, 0x8e, 0x69, 0xb4, 0xee, 0xe2, 0x50, 0x98, 0xb8, 0x5e, 0x8a, 0x1b, 0xda, 0x34, 0x95, 0x95 ],
-const [ 0xaa, 0xa0, 0x5c, 0x3e, 0x8c, 0x33, 0x37, 0x30, 0x6a, 0xbc, 0x75, 0x2b, 0x9b, 0x04, 0x4d, 0xd7, 0x34, 0x9c, 0x96, 0x04, 0xda, 0x69, 0x37, 0x49, 0xd4, 0x61, 0xdf, 0xea, 0x64, 0x8f, 0xf6, 0xff, 0x58, 0x5d, 0xd3, 0xd3, 0xdc, 0x12, 0x2f, 0x8b, 0x92, 0x9a, 0xd9, 0x08, 0xe5, 0x86, 0xac, 0x0e, 0x9a, 0x53, 0xbf, 0xa5, 0xa7, 0xef, 0xdb, 0xbf, 0x49, 0x79, 0x32, 0x1c, 0x51, 0x48, 0x4d, 0x6b, 0xbe, 0x30, 0x47, 0xb2, 0x91, 0x00, 0x39, 0xef, 0xdd, 0x4f, 0xf5, 0x00, 0x1e, 0x79, 0xf7, 0xc0, 0xcb, 0xe4, 0x98, 0x73, 0x2f, 0x88, 0x85, 0x64, 0x74, 0xae, 0x70, 0xcc, 0x01, 0xf7, 0x05, 0xf6, 0x06, 0xa1, 0x20, 0xa1, 0x54, 0x06, 0x3d, 0xa6, 0x73, 0x65, 0x30, 0xda, 0xee, 0xe5, 0x16, 0x36, 0xf2, 0xd7, 0x8b, 0x35, 0x17, 0x3c, 0x1d, 0x7e, 0x7e, 0x87, 0x01, 0xc3, 0x1c, 0xa4, 0x05, 0xe9 ],
-const [ 0xc8, 0xdc, 0x13, 0x45, 0xa0, 0x6e, 0x53, 0xe6, 0xd7, 0xb7, 0xee, 0xf4, 0x51, 0x9d, 0x82, 0xa4, 0x3f, 0x19, 0x77, 0xcd, 0xe9, 0xe8, 0xe2, 0x42, 0xac, 0x84, 0xa9, 0x5e, 0x3e, 0x52, 0xe9, 0xe0, 0x3a, 0x1d, 0x94, 0xf9, 0xd8, 0xc3, 0x5f, 0xa4, 0xfb, 0x2e, 0xdb, 0x36, 0x72, 0x86, 0xe1, 0x36, 0x77, 0xa5, 0x34, 0x6e, 0x7c, 0xcc, 0x62, 0x42, 0x28, 0x94, 0xeb, 0x41, 0x9c, 0x27, 0xa5, 0xfa, 0xfa, 0xaf, 0x5f, 0x11, 0x28, 0x0f, 0xc5, 0x92, 0xd1, 0xd2, 0x84, 0x84, 0xad, 0x60, 0xae, 0xc2, 0x03, 0x78, 0x5f, 0x06, 0x6c, 0xda, 0xa1, 0x47, 0xd9, 0x44, 0x8d, 0x45, 0xd7, 0xa0, 0xb3, 0x62, 0x12, 0x7c, 0xbc, 0xb3, 0x18, 0xba, 0x4e, 0x57, 0x60, 0x89, 0x30, 0x07, 0x8b, 0x94, 0xaf, 0xef, 0xe9, 0x79, 0x40, 0xbc, 0x3f, 0x7c, 0x66, 0xf7, 0xc8, 0x7d, 0xd6, 0x91, 0x79, 0x27, 0xda, 0xbf ],
-const [ 0x77, 0xc1, 0x92, 0x47, 0x22, 0x53, 0x68, 0x5d, 0x52, 0xa6, 0xfc, 0x39, 0x3b, 0xb7, 0xa9, 0xd5, 0xbd, 0x73, 0xf5, 0xaf, 0x2b, 0x6e, 0x74, 0x20, 0x50, 0xd7, 0xea, 0xe9, 0xb4, 0xac, 0xb0, 0x0f, 0x1b, 0x2a, 0x59, 0xea, 0x4f, 0x88, 0x94, 0x78, 0x1f, 0xe4, 0x54, 0xf7, 0xa8, 0x7e, 0x2f, 0xb2, 0xd3, 0x24, 0x04, 0x1b, 0x1f, 0xed, 0xe1, 0x1a, 0xa1, 0x2a, 0x24, 0xa5, 0x49, 0x9a, 0xe0, 0x91, 0x66, 0xdd, 0x82, 0xa7, 0x6c, 0x2b, 0xb4, 0xfb, 0xf5, 0x46, 0x81, 0x79, 0x07, 0xad, 0xba, 0xc1, 0x95, 0x13, 0x99, 0x35, 0x48, 0x0f, 0xa5, 0x4f, 0x7f, 0x15, 0xd5, 0x39, 0x94, 0xa5, 0xf8, 0x97, 0x61, 0xc2, 0x54, 0xa7, 0x02, 0xa6, 0x8e, 0x8d, 0xdd, 0xb4, 0xca, 0xe8, 0xe0, 0xae, 0x12, 0xa9, 0x0a, 0x28, 0xfc, 0x25, 0x2d, 0x3d, 0x87, 0x69, 0xf2, 0x80, 0x47, 0xcd, 0x1d, 0x35, 0xc2, 0xcc ],
-const [ 0x22, 0x72, 0x57, 0x9c, 0xa6, 0xeb, 0x22, 0xdc, 0x3f, 0x55, 0x83, 0x14, 0xc4, 0x7c, 0x2e, 0xf8, 0xab, 0x4d, 0x67, 0x8a, 0x7d, 0x80, 0x17, 0xe0, 0x87, 0x7a, 0x1f, 0x28, 0xd3, 0x71, 0xec, 0xe9, 0x56, 0xd1, 0x4b, 0x8c, 0x6b, 0xde, 0x7f, 0x1a, 0x80, 0x9b, 0x92, 0x47, 0x0f, 0xeb, 0xe8, 0xb0, 0xd1, 0xf7, 0x1a, 0x61, 0x2e, 0xcf, 0x01, 0x9a, 0xf7, 0x54, 0x10, 0xd3, 0x57, 0x55, 0xe7, 0xfd, 0x07, 0xf8, 0x26, 0x0b, 0xc2, 0x5c, 0x7f, 0xb1, 0xf9, 0x7c, 0x10, 0x6b, 0xc7, 0x57, 0xef, 0xc2, 0x27, 0x4e, 0x06, 0xcb, 0x65, 0xcd, 0x21, 0xf0, 0xd2, 0x2d, 0x45, 0xf2, 0xbc, 0xd9, 0x44, 0x2f, 0x9d, 0xb0, 0x8e, 0x21, 0x93, 0xab, 0x4a, 0x28, 0x10, 0xc0, 0xa5, 0x89, 0xd3, 0x06, 0x6a, 0xb6, 0x17, 0x19, 0xd4, 0xd0, 0x0a, 0xc0, 0xa0, 0x6a, 0x80, 0xcd, 0x65, 0x90, 0xe9, 0x45, 0x28, 0x07 ],
-const [ 0xf5, 0x4c, 0x5e, 0x14, 0xa2, 0x9a, 0xbb, 0x69, 0x9f, 0xea, 0x35, 0x04, 0xf4, 0xb9, 0xa0, 0x77, 0xbd, 0x40, 0xa4, 0xdd, 0x72, 0xa6, 0x1c, 0xb5, 0x6c, 0x75, 0xbd, 0xf0, 0xa5, 0x4b, 0xf8, 0x48, 0xc0, 0xd2, 0x21, 0xd4, 0x49, 0xf1, 0xd0, 0xd9, 0x3d, 0x44, 0x88, 0xe4, 0xcd, 0xca, 0x96, 0x15, 0x5f, 0xde, 0x3c, 0xbe, 0xd6, 0x69, 0x0f, 0x2d, 0x13, 0x55, 0x9e, 0xc5, 0xbb, 0x45, 0x54, 0x54, 0x3b, 0x83, 0xa0, 0xa0, 0x0a, 0x39, 0x52, 0x43, 0x2e, 0xe5, 0x49, 0xb9, 0x02, 0x07, 0x4b, 0xb8, 0x36, 0x1c, 0x34, 0xbf, 0x17, 0xd0, 0x53, 0xf2, 0x11, 0x70, 0x11, 0x25, 0x72, 0x9e, 0xd3, 0x37, 0x70, 0x48, 0x22, 0xa1, 0x6e, 0xdb, 0x0a, 0x4e, 0x7b, 0xb3, 0xbf, 0xae, 0x1c, 0xd7, 0x87, 0x06, 0x4b, 0xe3, 0xd3, 0x0a, 0xbf, 0x45, 0xaf, 0xad, 0x6e, 0xac, 0x5d, 0x38, 0x51, 0xbe, 0x3d, 0x99 ],
-const [ 0x8f, 0x63, 0x60, 0x70, 0xd8, 0xc5, 0xc1, 0xf9, 0x79, 0x73, 0x4a, 0xe3, 0x6a, 0xcf, 0xe6, 0x3f, 0x0c, 0x08, 0x17, 0x53, 0x1a, 0x3f, 0x8d, 0xe1, 0xdd, 0xe9, 0xf7, 0xad, 0xa0, 0x75, 0x19, 0x39, 0x64, 0x2e, 0x1e, 0xd3, 0xd5, 0x62, 0x30, 0xd1, 0x7c, 0xc4, 0x47, 0x1c, 0x35, 0x0f, 0x3e, 0xeb, 0xe4, 0xec, 0x2c, 0xd1, 0x64, 0x16, 0xf1, 0xfa, 0xc0, 0xbc, 0x0f, 0xb2, 0xa6, 0x27, 0xbc, 0x26, 0x18, 0x9c, 0x35, 0x6f, 0x65, 0x84, 0x54, 0xcc, 0x58, 0xca, 0x65, 0x2f, 0xaf, 0x85, 0x36, 0xfc, 0xce, 0xd7, 0x6d, 0x0d, 0xb5, 0x14, 0x1e, 0xf9, 0x30, 0x27, 0x9d, 0x96, 0x4d, 0x32, 0x91, 0xbc, 0x13, 0x75, 0x4a, 0x4c, 0x71, 0x71, 0x55, 0x71, 0x75, 0x4d, 0x4d, 0x26, 0xbf, 0x78, 0xf3, 0xf9, 0x34, 0x90, 0x81, 0x0e, 0xf7, 0x83, 0x3c, 0x66, 0x95, 0xf4, 0x49, 0x61, 0x7f, 0xe0, 0xc1, 0x82 ],
-const [ 0xa8, 0x9b, 0xba, 0xa8, 0x6a, 0x33, 0x99, 0x51, 0xdd, 0xcd, 0x37, 0x79, 0x9e, 0x21, 0xb5, 0xd1, 0x68, 0x8e, 0x4a, 0xbe, 0xdb, 0xc7, 0x2d, 0xaf, 0x7c, 0xc9, 0xb5, 0xad, 0xfe, 0x10, 0xbe, 0x34, 0xc0, 0x0a, 0x50, 0x41, 0x96, 0xcc, 0x7b, 0xac, 0xcc, 0x04, 0x85, 0xb8, 0x68, 0x2e, 0x48, 0xe9, 0xb0, 0x0b, 0xd5, 0x15, 0xec, 0x4f, 0x5d, 0xbe, 0x6d, 0x9a, 0x52, 0x9f, 0xce, 0xaa, 0xc9, 0x85, 0x7a, 0xcf, 0x23, 0x60, 0x6e, 0x9f, 0xec, 0x9a, 0x41, 0xea, 0x03, 0xa7, 0x61, 0xf1, 0xfb, 0xde, 0x9f, 0xd2, 0xc2, 0x87, 0xee, 0x47, 0x80, 0x35, 0x67, 0x90, 0xc2, 0x56, 0x91, 0xae, 0xd8, 0x08, 0xe0, 0xd2, 0x7b, 0x2e, 0x7b, 0x15, 0xb4, 0xc3, 0x42, 0x69, 0xf9, 0x6f, 0x10, 0xd0, 0x98, 0x58, 0x3d, 0xcc, 0x59, 0x3b, 0x68, 0x16, 0x5e, 0xbb, 0x73, 0x92, 0x4f, 0xf9, 0xce, 0x83, 0xb4, 0x64 ],
-const [ 0x46, 0x25, 0x2e, 0x54, 0x90, 0x7e, 0xc1, 0x02, 0x94, 0x8e, 0x82, 0x33, 0xe7, 0x25, 0x4a, 0x6a, 0xd0, 0xfe, 0x41, 0x42, 0x50, 0xaa, 0x00, 0x02, 0x5f, 0xca, 0xf2, 0x72, 0x79, 0x81, 0x00, 0xed, 0x59, 0x29, 0x6d, 0xb8, 0x05, 0x45, 0xfe, 0x92, 0x0a, 0xb7, 0x5f, 0x8c, 0x09, 0x34, 0xc2, 0x1b, 0x72, 0xf4, 0xc9, 0x6c, 0x90, 0xae, 0xa6, 0xf7, 0xc6, 0xc3, 0x81, 0x57, 0x18, 0xba, 0x19, 0x59, 0xec, 0xec, 0xaf, 0x53, 0x12, 0x80, 0x20, 0xb7, 0x03, 0x9a, 0x51, 0xe7, 0x66, 0xd0, 0xcf, 0x4b, 0xd9, 0xde, 0xb7, 0xa2, 0xed, 0x9a, 0xd4, 0x95, 0x72, 0x2a, 0x08, 0x92, 0xf6, 0x74, 0xed, 0xd7, 0x88, 0xd6, 0xbb, 0xcd, 0xc2, 0x17, 0x6d, 0x98, 0x06, 0x9e, 0x1f, 0xec, 0x07, 0xe2, 0xbb, 0x22, 0x8b, 0x22, 0xd4, 0x8b, 0x70, 0x56, 0xd2, 0x04, 0xed, 0x65, 0x50, 0xca, 0x1b, 0x98, 0xc2, 0x90 ],
-const [ 0x8d, 0x50, 0x44, 0xa3, 0x08, 0xc1, 0x8e, 0x30, 0x5d, 0x0a, 0x13, 0xbd, 0xa0, 0xc6, 0x95, 0x55, 0xbd, 0xfa, 0x93, 0xc9, 0x54, 0x9b, 0xc0, 0x53, 0xc7, 0x51, 0xb3, 0x7a, 0x91, 0x7b, 0xe0, 0x35, 0xd9, 0x73, 0xc7, 0x53, 0x46, 0x13, 0x6b, 0x1a, 0x16, 0x78, 0x06, 0x2f, 0x6a, 0x05, 0xfb, 0xb6, 0xe4, 0xab, 0x0c, 0xb9, 0x74, 0x68, 0xcd, 0xce, 0x6f, 0x0e, 0x58, 0xf4, 0xe2, 0x46, 0x43, 0xbf, 0x25, 0xd4, 0xcf, 0xb5, 0xb3, 0x1d, 0x62, 0xf7, 0x38, 0xe6, 0x38, 0x24, 0xec, 0x5e, 0x55, 0x7a, 0x20, 0x5f, 0xbe, 0x3e, 0x16, 0xf1, 0xe8, 0x5e, 0x16, 0x10, 0x71, 0x56, 0xbe, 0xaf, 0x0e, 0x50, 0x9a, 0xfc, 0xc5, 0x8f, 0xf5, 0xe6, 0x5c, 0x0d, 0xee, 0xdc, 0x11, 0x63, 0xce, 0xd8, 0x8b, 0xea, 0x98, 0x9d, 0x11, 0x20, 0xe2, 0x3d, 0xfa, 0x4d, 0xe4, 0xdd, 0x64, 0x66, 0xcf, 0xbc, 0x29, 0x31 ],
-const [ 0xf3, 0x9d, 0xcf, 0xd6, 0x5a, 0xb7, 0xd0, 0x25, 0xbb, 0xea, 0x7a, 0xa4, 0x05, 0xf6, 0xd6, 0x4a, 0x22, 0xae, 0xc2, 0x8f, 0x7c, 0x64, 0x93, 0x7f, 0xc0, 0xa2, 0xff, 0x0d, 0xe2, 0x1b, 0x3b, 0xa9, 0x61, 0xe0, 0x60, 0x15, 0xcc, 0xd7, 0x13, 0x74, 0x85, 0x6a, 0x65, 0xa4, 0xc5, 0x7c, 0xf8, 0xcd, 0xe0, 0xa1, 0x64, 0x3a, 0xca, 0x8e, 0xd8, 0x68, 0xda, 0xce, 0x05, 0x5d, 0xcf, 0xb7, 0x37, 0x3b, 0x11, 0x9d, 0xc5, 0x15, 0x39, 0x45, 0xac, 0x01, 0xd2, 0x9c, 0x77, 0x6f, 0x61, 0xa9, 0x62, 0xb9, 0xa4, 0xc1, 0xbe, 0xfb, 0x18, 0xfa, 0x97, 0x24, 0xbd, 0xe2, 0x95, 0x4d, 0x1d, 0x70, 0x20, 0x4a, 0x8b, 0x3a, 0xc7, 0x7f, 0xa9, 0xe9, 0xe3, 0xf5, 0x2d, 0xea, 0x77, 0xae, 0xe4, 0x67, 0x5b, 0x35, 0xf7, 0x76, 0x9a, 0x78, 0x6d, 0x90, 0x18, 0xda, 0xf1, 0x44, 0x78, 0x85, 0xd5, 0x2c, 0x3c, 0xfd ],
-const [ 0xa1, 0x8a, 0x27, 0x74, 0x8e, 0xf3, 0x9b, 0x49, 0xbe, 0x98, 0x4e, 0x8d, 0x18, 0x52, 0x01, 0x10, 0x00, 0x8b, 0xc8, 0xa1, 0xd5, 0xae, 0xb4, 0x24, 0xbe, 0xdc, 0xae, 0xe5, 0xa7, 0xe1, 0xa6, 0x2c, 0x86, 0x66, 0xee, 0x12, 0xe3, 0x67, 0xe0, 0x92, 0x97, 0xe8, 0xc7, 0xe3, 0xd4, 0xe4, 0xfd, 0x05, 0x65, 0x87, 0x50, 0x9b, 0x37, 0x9d, 0xaa, 0xf8, 0x19, 0x49, 0xf2, 0x7c, 0xc0, 0xfa, 0x2d, 0x21, 0x0e, 0x9b, 0xe9, 0x51, 0x94, 0x0a, 0xdb, 0xfb, 0x55, 0xcc, 0xc7, 0xe5, 0xcc, 0xff, 0xa0, 0x44, 0x31, 0x8f, 0xf1, 0x8a, 0xf9, 0xad, 0x7b, 0x7f, 0x9c, 0x7d, 0x1f, 0x93, 0x9a, 0x0f, 0xff, 0x72, 0xc0, 0x91, 0xe1, 0xda, 0xa7, 0xc3, 0xd4, 0xa9, 0x7f, 0xab, 0x15, 0x3b, 0x0a, 0x89, 0x33, 0xf2, 0xeb, 0x0d, 0x72, 0x16, 0x21, 0xc8, 0x6d, 0xe0, 0xcf, 0xe1, 0x00, 0xd1, 0x3e, 0x09, 0x65, 0x48 ],
-const [ 0x9e, 0xeb, 0x07, 0x9c, 0x55, 0x2e, 0x42, 0x1f, 0x70, 0x30, 0x85, 0xb9, 0xb2, 0x75, 0xd5, 0xb0, 0x5c, 0x0c, 0x92, 0x2e, 0xfe, 0x14, 0xf2, 0xe7, 0x8c, 0x7f, 0xae, 0xfb, 0xb4, 0x16, 0xfb, 0x1e, 0x6f, 0xbd, 0xbc, 0xf6, 0xd7, 0xf9, 0xf6, 0xc4, 0x38, 0xaf, 0x84, 0x47, 0x69, 0x2f, 0x0c, 0xde, 0x5d, 0x70, 0x31, 0xec, 0xf5, 0x9d, 0x0a, 0x80, 0x18, 0xd1, 0xd3, 0x36, 0x06, 0x20, 0xe3, 0x58, 0xe9, 0xd6, 0xde, 0x49, 0xae, 0x03, 0x2c, 0x24, 0x12, 0x37, 0xaa, 0xa0, 0x00, 0x8a, 0x9f, 0x37, 0x1a, 0xdf, 0xf1, 0x87, 0x96, 0x6a, 0x99, 0xf8, 0x4b, 0x70, 0x54, 0x9f, 0x0b, 0x4e, 0x9b, 0x62, 0x34, 0xbd, 0xd6, 0x5d, 0x82, 0x54, 0xcd, 0x85, 0x27, 0x4f, 0x5f, 0x8b, 0x1e, 0x8e, 0x76, 0x04, 0xbc, 0xe1, 0x3a, 0xc6, 0x88, 0x82, 0x85, 0x95, 0x4c, 0xe3, 0x97, 0xff, 0x6c, 0xaa, 0x0c, 0x84 ],
-const [ 0xb8, 0xec, 0x37, 0x14, 0xf0, 0xf5, 0x4c, 0x83, 0xd7, 0xe1, 0xe5, 0xe1, 0x87, 0xb1, 0x10, 0xd0, 0xab, 0xba, 0xdd, 0xf1, 0xec, 0x4a, 0x71, 0xa9, 0xac, 0x8e, 0x56, 0x25, 0xf7, 0xb3, 0x15, 0x9b, 0xb6, 0x4c, 0x07, 0xd3, 0x26, 0xf4, 0x68, 0xe7, 0x89, 0x34, 0xad, 0x47, 0x1c, 0xa7, 0x17, 0xff, 0x48, 0x5b, 0x89, 0x3d, 0x1c, 0x7b, 0x97, 0x0d, 0xfb, 0x2b, 0xdf, 0x68, 0x92, 0xb4, 0x9c, 0x6d, 0x0d, 0xe1, 0x78, 0xee, 0x8b, 0xa9, 0xa2, 0x2e, 0xcf, 0x0d, 0x21, 0xe9, 0x38, 0x44, 0x68, 0x95, 0xf3, 0x16, 0x2a, 0xe8, 0x6f, 0x86, 0x6f, 0x9a, 0x11, 0xb3, 0xe8, 0x6c, 0x2a, 0x00, 0x7f, 0x69, 0x26, 0x73, 0x33, 0x6c, 0x06, 0x5b, 0x23, 0xe2, 0x10, 0x36, 0xe8, 0xd1, 0xc4, 0xd1, 0x28, 0x1a, 0x13, 0xb1, 0x68, 0xfb, 0xcc, 0xb2, 0x22, 0xd7, 0x57, 0xee, 0x18, 0x3a, 0xa5, 0xe0, 0xe7, 0x18 ],
-const [ 0xbd, 0xff, 0x02, 0x4f, 0x5c, 0x8c, 0x62, 0x5b, 0xf0, 0xe5, 0x57, 0xc1, 0x38, 0xe0, 0x2f, 0x1f, 0xa7, 0x32, 0x9b, 0xf7, 0x0b, 0x84, 0x6d, 0x61, 0x6c, 0xca, 0xa1, 0xfc, 0x37, 0xd0, 0x9a, 0x2a, 0x9c, 0x15, 0xaf, 0x7d, 0x34, 0xdd, 0xe6, 0x6c, 0xe7, 0x82, 0xff, 0x4b, 0x0d, 0x0b, 0xb5, 0x7a, 0xd3, 0xff, 0x40, 0xdc, 0xe0, 0x7c, 0x1e, 0x8a, 0x39, 0x83, 0x13, 0xc9, 0x62, 0x96, 0x6f, 0x3a, 0xc7, 0x85, 0x8f, 0x51, 0x5a, 0x85, 0xa6, 0x08, 0x7c, 0x82, 0xbe, 0xd5, 0x21, 0xb6, 0xf9, 0xd9, 0x2f, 0x7b, 0x1d, 0x5a, 0x28, 0x5d, 0x4f, 0x73, 0x09, 0x74, 0x1f, 0x0a, 0x72, 0xf1, 0xc5, 0x03, 0x06, 0xf6, 0xaa, 0xb3, 0x15, 0xab, 0x2b, 0x98, 0x79, 0x8e, 0x99, 0x47, 0xbd, 0x0a, 0x84, 0xa5, 0x85, 0x4c, 0x39, 0x5a, 0x29, 0x52, 0x89, 0x83, 0xa4, 0x44, 0xcc, 0xa7, 0xad, 0x08, 0x26, 0xed ],
-const [ 0x8d, 0x80, 0x94, 0xc0, 0x73, 0x65, 0x64, 0x17, 0x5a, 0x29, 0xe5, 0x67, 0x30, 0x98, 0x09, 0xea, 0x14, 0xe0, 0x90, 0x74, 0x5e, 0x8e, 0x29, 0x04, 0xdf, 0xb9, 0xda, 0x99, 0x6a, 0x7d, 0xa1, 0x47, 0x92, 0xac, 0x5c, 0x89, 0xb6, 0xbf, 0xe6, 0xd9, 0x3b, 0x13, 0x83, 0x7e, 0x19, 0x52, 0x7e, 0xa6, 0x99, 0x2e, 0x10, 0xb4, 0x5d, 0x56, 0x84, 0xdb, 0xa0, 0xa2, 0x99, 0xec, 0xbf, 0x91, 0x28, 0x6c, 0xf8, 0xf6, 0x06, 0xea, 0x72, 0xee, 0x2c, 0x8f, 0x7e, 0x15, 0x15, 0xf7, 0x1d, 0xfa, 0x68, 0x3f, 0xc2, 0xd0, 0xd7, 0x60, 0x59, 0x66, 0x47, 0xbb, 0x87, 0x59, 0x31, 0xf5, 0x34, 0x88, 0x48, 0x04, 0x47, 0xc8, 0x5c, 0x8a, 0xb0, 0xd9, 0x7e, 0x62, 0xac, 0x99, 0x65, 0x79, 0x44, 0x78, 0x10, 0xe0, 0x17, 0x2c, 0xad, 0x1f, 0x5a, 0xa6, 0xba, 0xcb, 0x1d, 0x44, 0x6a, 0x5b, 0xd0, 0x48, 0x4a, 0x37 ],
-const [ 0x69, 0x96, 0x92, 0x42, 0xb7, 0x7b, 0xb6, 0x9e, 0x8d, 0x7d, 0x63, 0xbb, 0x08, 0xd6, 0x3e, 0xbe, 0x8b, 0xe9, 0x6a, 0x46, 0x07, 0x78, 0xf4, 0x44, 0x7a, 0x17, 0x6f, 0x0d, 0xb6, 0xe1, 0xdb, 0xad, 0x64, 0x69, 0xcc, 0x7e, 0x48, 0xf4, 0xc8, 0xfa, 0xc7, 0xe5, 0xf0, 0xce, 0xa6, 0x78, 0xe2, 0x2f, 0x14, 0xb3, 0xdf, 0x71, 0xeb, 0x9a, 0x29, 0xd6, 0x33, 0xa3, 0xaf, 0xa4, 0xe8, 0x69, 0xec, 0x7a, 0xfc, 0xa4, 0x0d, 0xe3, 0xa0, 0x59, 0x52, 0x2c, 0xc0, 0x4e, 0xb6, 0x73, 0xcc, 0xc1, 0xd2, 0x01, 0xbe, 0x59, 0xff, 0xda, 0x59, 0x5d, 0xbb, 0x91, 0xae, 0x24, 0x4e, 0x61, 0xe5, 0xcd, 0xad, 0x7a, 0x3a, 0x30, 0x9e, 0x99, 0x46, 0x13, 0x1d, 0xdb, 0x80, 0xa2, 0xfe, 0xd3, 0x03, 0x19, 0xd5, 0xda, 0x92, 0xc4, 0x13, 0xa6, 0xd9, 0x29, 0x71, 0x1f, 0xf5, 0x84, 0x92, 0x6d, 0x37, 0x73, 0xe3, 0x56 ],
-const [ 0xe6, 0x8c, 0xcc, 0x21, 0xd4, 0xd7, 0xe9, 0x15, 0x57, 0x73, 0xe9, 0xd6, 0x12, 0x81, 0x3f, 0x99, 0xba, 0xf6, 0xd7, 0x2c, 0x33, 0x36, 0x56, 0x2c, 0xf6, 0xe5, 0xa4, 0x78, 0xb6, 0xf9, 0xa8, 0xe5, 0x43, 0x14, 0x52, 0x34, 0xae, 0x12, 0xdf, 0x41, 0xae, 0xdd, 0x58, 0x7c, 0x42, 0x89, 0x5c, 0x9d, 0x98, 0x9d, 0x20, 0x94, 0x2e, 0xae, 0xb4, 0xbf, 0x37, 0x33, 0x88, 0x60, 0x40, 0x94, 0x2e, 0x4e, 0x13, 0x84, 0x61, 0xeb, 0xdc, 0x91, 0x47, 0x55, 0x8a, 0xf9, 0xf3, 0xe1, 0x78, 0xc0, 0x2e, 0xc5, 0x4d, 0xff, 0x77, 0x14, 0x21, 0x7f, 0x48, 0xf0, 0xe1, 0x86, 0x9b, 0xfb, 0xf4, 0xf1, 0xad, 0x0e, 0x1e, 0x83, 0x02, 0x2e, 0xa5, 0x7d, 0xa9, 0xbb, 0xb3, 0x6f, 0xc1, 0xeb, 0xfc, 0x4d, 0x3c, 0x77, 0xa0, 0xc5, 0xe3, 0x94, 0x53, 0xd0, 0x9a, 0x25, 0xbb, 0x88, 0xe6, 0x2f, 0x19, 0x39, 0xac, 0x8d ],
-const [ 0x65, 0x7f, 0xce, 0xf9, 0x62, 0xdb, 0x04, 0xbd, 0x26, 0x9a, 0xe5, 0xfe, 0xf2, 0xcb, 0xd5, 0xe6, 0x55, 0x8d, 0x07, 0x29, 0x46, 0xd2, 0x35, 0xe8, 0x70, 0x63, 0x94, 0xd4, 0xcd, 0x25, 0x07, 0x96, 0x76, 0x9a, 0x92, 0x6f, 0xba, 0xaa, 0x12, 0x1b, 0x6d, 0xa4, 0x2c, 0xfc, 0x82, 0x80, 0x84, 0x74, 0xdd, 0x67, 0x2f, 0x93, 0x62, 0x75, 0x6a, 0xf2, 0x52, 0xbd, 0x8c, 0xde, 0xd7, 0x8d, 0x39, 0xb9, 0xdd, 0xf4, 0xd9, 0x9e, 0x24, 0x82, 0x48, 0x44, 0x93, 0x4f, 0xcf, 0x25, 0xd0, 0x3e, 0x54, 0xdf, 0x0d, 0x83, 0xcd, 0xda, 0x25, 0x63, 0xfb, 0x2b, 0xe7, 0x3b, 0x54, 0xb8, 0xb1, 0xc4, 0x41, 0x9d, 0x42, 0x95, 0x89, 0xcf, 0xc9, 0xea, 0x0d, 0xff, 0x41, 0xa3, 0xb7, 0xc2, 0x01, 0x90, 0xad, 0xee, 0x8f, 0xeb, 0xca, 0x47, 0xb6, 0x26, 0x4e, 0x5b, 0xd8, 0xe8, 0xd4, 0xaa, 0x85, 0x52, 0x85, 0x0a ],
-const [ 0x42, 0x2e, 0x4c, 0xbd, 0xbc, 0xb7, 0x12, 0x8f, 0x19, 0x66, 0xef, 0x74, 0x32, 0x04, 0x9d, 0x13, 0xa4, 0x07, 0xcb, 0x27, 0xc8, 0xb4, 0xb7, 0xcb, 0xe6, 0x86, 0xff, 0xf4, 0xa5, 0xd3, 0xb5, 0x3f, 0xc6, 0xad, 0xb1, 0xed, 0x12, 0x07, 0x2b, 0x2b, 0x91, 0x18, 0x89, 0x97, 0xfd, 0x05, 0x75, 0x01, 0x76, 0xba, 0x33, 0x6e, 0x77, 0x18, 0x31, 0x63, 0x09, 0x56, 0xe0, 0x60, 0x37, 0xa1, 0xc3, 0xaa, 0xc1, 0x06, 0xc6, 0x4d, 0x15, 0x92, 0xd0, 0x62, 0x7a, 0xb8, 0x9b, 0x8e, 0x8f, 0xf2, 0xc4, 0xcb, 0xf4, 0xab, 0x1e, 0x6b, 0x47, 0x5d, 0x4c, 0x5a, 0x52, 0xf7, 0x8f, 0xa3, 0x82, 0x81, 0xdc, 0x35, 0x9b, 0x02, 0x32, 0xe8, 0xab, 0xa2, 0x2a, 0xbb, 0x3d, 0x0c, 0xd0, 0x5f, 0xce, 0x16, 0xb1, 0xfa, 0x85, 0xa4, 0x35, 0x25, 0x1e, 0xc9, 0x2f, 0x36, 0x28, 0x30, 0xb3, 0xc5, 0x70, 0xbb, 0x28, 0x69 ],
-const [ 0xa6, 0x7b, 0x1d, 0xc3, 0x63, 0x3d, 0x30, 0xc4, 0xef, 0x2b, 0xf3, 0x18, 0x5f, 0xd4, 0x48, 0x65, 0xd2, 0xaf, 0x5e, 0x72, 0x01, 0x5c, 0xdf, 0x8c, 0x18, 0x2e, 0x6b, 0x28, 0xc5, 0xe7, 0x46, 0xc9, 0x8e, 0xc2, 0x4d, 0x24, 0x67, 0xb7, 0x2f, 0x82, 0x84, 0xfa, 0xd9, 0x67, 0x6c, 0xc5, 0x32, 0x71, 0x4f, 0x57, 0x09, 0x82, 0x99, 0x3d, 0x4b, 0x22, 0xc7, 0xd0, 0x7a, 0x1e, 0x79, 0xff, 0x5a, 0x75, 0xc9, 0x4e, 0xee, 0x75, 0xdc, 0x1f, 0xa2, 0x22, 0xb6, 0x30, 0xca, 0xd7, 0x53, 0x66, 0x4b, 0x30, 0xf3, 0xc9, 0x98, 0x26, 0xb5, 0xcf, 0xe1, 0x7c, 0x67, 0xdd, 0x87, 0x5b, 0x9d, 0x0b, 0xd2, 0x39, 0x00, 0x28, 0xe6, 0xff, 0xe9, 0xfe, 0xf3, 0x6a, 0x2f, 0xd6, 0xad, 0xb1, 0x3d, 0x3f, 0xfc, 0x69, 0x67, 0x0c, 0xf4, 0xa6, 0x7e, 0x9c, 0x07, 0x64, 0xa1, 0x5e, 0x79, 0x25, 0x57, 0x93, 0x15, 0xdb ],
-const [ 0xa9, 0x17, 0x4a, 0x67, 0x60, 0x3a, 0x4d, 0x5f, 0xba, 0xa8, 0xcf, 0xb5, 0x62, 0xf0, 0x73, 0x93, 0xab, 0xad, 0xbc, 0x80, 0xd1, 0xb5, 0x72, 0x31, 0x82, 0x93, 0x47, 0xa2, 0x9c, 0x38, 0xba, 0x66, 0x39, 0xed, 0x3c, 0x3c, 0xe9, 0x8c, 0x91, 0xe2, 0x3e, 0xf0, 0x7a, 0x2e, 0x8e, 0xaa, 0x91, 0x5a, 0xf4, 0xf5, 0x74, 0xa0, 0x98, 0xed, 0x25, 0x06, 0x30, 0xfb, 0xb1, 0x7c, 0xc7, 0x94, 0x10, 0x24, 0xbd, 0x23, 0x4d, 0xf1, 0x10, 0x43, 0xe7, 0x73, 0xd9, 0x32, 0x76, 0xf1, 0x1a, 0x82, 0x91, 0xb9, 0xb6, 0x12, 0xf0, 0xb4, 0xc1, 0x3d, 0xce, 0x3d, 0xfa, 0x51, 0x91, 0x33, 0x96, 0x43, 0xad, 0x4d, 0x40, 0xa1, 0xc6, 0xae, 0x5d, 0xc7, 0x15, 0xba, 0x94, 0x56, 0x0c, 0x27, 0x8e, 0xe2, 0x3d, 0x57, 0xfa, 0xeb, 0x78, 0xe5, 0xd5, 0x0f, 0x33, 0x7e, 0xe8, 0x7d, 0x2f, 0xf2, 0x92, 0xad, 0x59, 0x8a ],
-const [ 0x5c, 0x97, 0xf1, 0x33, 0x31, 0xdb, 0x20, 0xf6, 0x35, 0x1f, 0x9a, 0xef, 0x4e, 0x0b, 0x7c, 0x9c, 0x92, 0xa2, 0xca, 0xbf, 0x47, 0x69, 0x03, 0xa8, 0x0e, 0xcb, 0xf8, 0xb6, 0x5b, 0xbc, 0xdd, 0x1c, 0x28, 0x9d, 0xa1, 0xe1, 0xeb, 0x5f, 0x7b, 0x2b, 0xc5, 0xec, 0xc6, 0xbc, 0xfc, 0xc2, 0x0e, 0xbd, 0xab, 0xe1, 0x6b, 0xba, 0xb8, 0xe8, 0x0d, 0xef, 0x07, 0x7b, 0x19, 0xc2, 0xed, 0xe7, 0xb4, 0x90, 0xe8, 0x09, 0x5c, 0xac, 0x8d, 0x6c, 0x7f, 0xa5, 0xc1, 0xb1, 0x46, 0xc8, 0x2c, 0x34, 0xb2, 0xe6, 0xeb, 0xec, 0xeb, 0x58, 0x85, 0x93, 0xd5, 0x3f, 0x21, 0x07, 0xe3, 0x10, 0xf6, 0xf1, 0x30, 0x51, 0x02, 0xa4, 0xcc, 0x9d, 0xff, 0x48, 0x53, 0xee, 0x93, 0x37, 0xc5, 0x1c, 0xc7, 0xa7, 0x91, 0xa0, 0xba, 0x8a, 0xf3, 0x9e, 0x97, 0xb2, 0x80, 0x23, 0xc4, 0x39, 0x00, 0xab, 0x5c, 0x20, 0x7b, 0xe6 ],
-const [ 0x17, 0x96, 0x45, 0xa0, 0x88, 0x5b, 0xf0, 0xf1, 0xde, 0xb9, 0xf6, 0xc1, 0x05, 0xbd, 0xbf, 0x2b, 0xbd, 0xf7, 0x28, 0xe6, 0xed, 0x81, 0x78, 0x6c, 0x3a, 0x3e, 0x95, 0x5b, 0xd9, 0x60, 0x78, 0x1b, 0xa1, 0x2d, 0xde, 0xc1, 0x65, 0x02, 0x40, 0x33, 0x80, 0x98, 0x06, 0x8d, 0xb1, 0x86, 0xf8, 0xc4, 0x2a, 0x07, 0xf5, 0x8a, 0xe3, 0xfe, 0xe7, 0x71, 0x34, 0x37, 0xf6, 0x52, 0xa3, 0xf0, 0xfc, 0xf0, 0xfb, 0x98, 0x39, 0xd9, 0x9e, 0xd6, 0x49, 0x8d, 0x1b, 0xcd, 0x52, 0xe2, 0x03, 0x9f, 0x82, 0xa7, 0xf9, 0x2f, 0xb9, 0x88, 0x09, 0x2c, 0x82, 0x31, 0x3b, 0x4b, 0x48, 0xb7, 0x67, 0xd3, 0xc7, 0x33, 0x4a, 0x5f, 0xc0, 0xb0, 0xda, 0xdf, 0xf1, 0x47, 0xd7, 0xe1, 0x44, 0x88, 0xa3, 0x0f, 0x47, 0x1c, 0x53, 0xf8, 0xdc, 0xa9, 0x06, 0x13, 0x32, 0xf6, 0x75, 0x00, 0xf3, 0x50, 0xcc, 0x12, 0xbf, 0x2c ],
-const [ 0xa7, 0x82, 0xb8, 0x73, 0x23, 0xa0, 0xec, 0x6a, 0xbd, 0x8f, 0x27, 0xe5, 0x0e, 0x97, 0x61, 0x84, 0x84, 0x7e, 0x16, 0x6a, 0x04, 0xa0, 0x01, 0xf1, 0xd4, 0x42, 0x28, 0x9c, 0xb9, 0x23, 0x18, 0x4e, 0x5c, 0x54, 0x72, 0xb9, 0xf2, 0x4a, 0xa6, 0x18, 0x1c, 0x32, 0xff, 0x21, 0x0c, 0x84, 0xe0, 0x35, 0xea, 0xdb, 0x4d, 0xdb, 0x76, 0x04, 0xac, 0x6c, 0xee, 0x54, 0xcd, 0x10, 0x32, 0x3f, 0x29, 0xe8, 0x26, 0x27, 0x67, 0x8d, 0x58, 0x72, 0x25, 0xba, 0xe3, 0xdf, 0xf4, 0x45, 0x93, 0x1a, 0xa4, 0x54, 0x49, 0x8e, 0xc3, 0xcd, 0xa1, 0x7a, 0x60, 0x0e, 0xd3, 0x47, 0x14, 0xdf, 0xd7, 0x19, 0x44, 0xa4, 0xcd, 0xa4, 0xa0, 0xd8, 0x9b, 0x41, 0xef, 0xb6, 0xd8, 0x40, 0x0f, 0x39, 0xe9, 0x80, 0x37, 0x47, 0x69, 0x3e, 0x80, 0x29, 0xcf, 0x2b, 0xa4, 0x3f, 0x4a, 0xc1, 0x05, 0xf2, 0xf0, 0xd6, 0xf1, 0xe9 ],
-const [ 0xf7, 0xa5, 0x19, 0xf3, 0xb5, 0xae, 0x6f, 0xd9, 0x88, 0xea, 0xe9, 0x2a, 0x9b, 0xdf, 0xbe, 0xcf, 0x81, 0xe7, 0xb4, 0x05, 0xd7, 0x3e, 0xe5, 0x0e, 0x25, 0x59, 0xc3, 0x26, 0x06, 0x79, 0x5a, 0xb9, 0x89, 0x81, 0xd5, 0xd3, 0xd6, 0x04, 0x44, 0xd8, 0x15, 0xa3, 0x9c, 0x75, 0x8b, 0x96, 0xff, 0xd6, 0x06, 0x88, 0x3e, 0x1a, 0x7c, 0xa8, 0x9d, 0x04, 0xef, 0xfd, 0xd6, 0xf3, 0x93, 0xf9, 0x60, 0x14, 0x33, 0x52, 0xf0, 0xd6, 0xd1, 0x0d, 0x41, 0x9e, 0x8d, 0xdc, 0x11, 0xbd, 0xc8, 0xa9, 0x6c, 0x9f, 0x88, 0x73, 0x2c, 0x44, 0x1e, 0x59, 0xc1, 0xf4, 0x07, 0xf4, 0x2e, 0x2f, 0x11, 0xea, 0x54, 0xe4, 0xbe, 0xc0, 0x73, 0xe3, 0xed, 0xf0, 0xee, 0x93, 0xb7, 0x3c, 0x4e, 0xe8, 0x98, 0x41, 0x8a, 0x90, 0xcf, 0x4f, 0x86, 0x6d, 0x07, 0x78, 0xd9, 0x48, 0x36, 0xe7, 0xd3, 0xc4, 0xc6, 0x74, 0xbf, 0x90 ],
-const [ 0x2f, 0xb3, 0xb0, 0x4e, 0x1f, 0x5e, 0x7f, 0xad, 0xe5, 0xab, 0xfb, 0x52, 0xef, 0xe1, 0x9e, 0xdd, 0x2e, 0xbc, 0x80, 0x18, 0x1a, 0x65, 0x7b, 0x85, 0xf7, 0xa1, 0x8d, 0x39, 0x57, 0x49, 0x7f, 0xed, 0xe1, 0xfa, 0xc4, 0x53, 0x50, 0x0d, 0xa4, 0xa6, 0xbf, 0xca, 0x9a, 0x85, 0x23, 0xd8, 0xfa, 0x01, 0x19, 0xf8, 0xd6, 0xf5, 0xe2, 0xf4, 0x23, 0x96, 0xab, 0xd1, 0x18, 0x4a, 0x12, 0x4c, 0xd7, 0xbe, 0xe7, 0x85, 0x4f, 0x32, 0x2f, 0xf5, 0x61, 0x18, 0x6f, 0xa5, 0x41, 0xde, 0x27, 0xa2, 0x20, 0x08, 0x9c, 0xac, 0x08, 0x81, 0xda, 0x2e, 0x07, 0x33, 0xfa, 0x73, 0x8f, 0xd5, 0xa1, 0x16, 0x1d, 0x04, 0xc9, 0xba, 0x19, 0x96, 0xc4, 0xfc, 0xfd, 0x2b, 0x7d, 0xa6, 0xba, 0x04, 0x02, 0x25, 0x58, 0x19, 0x3f, 0x3e, 0xdc, 0x65, 0x0c, 0xfc, 0x6e, 0x85, 0x6b, 0xed, 0xbb, 0x81, 0x0a, 0x8e, 0x99, 0xea ],
-const [ 0x7f, 0x75, 0x77, 0x73, 0x63, 0x13, 0xf7, 0x25, 0xfb, 0x87, 0x2d, 0x07, 0x03, 0xa3, 0x75, 0x9c, 0x42, 0x2a, 0x55, 0xdb, 0x25, 0xe3, 0x4a, 0xe0, 0xa7, 0xeb, 0xc8, 0xe2, 0x73, 0x4f, 0x7c, 0x65, 0x4d, 0xda, 0xd4, 0xb1, 0xae, 0x2c, 0xc1, 0x82, 0xae, 0x0c, 0xbc, 0x01, 0x27, 0x00, 0x07, 0xf3, 0x18, 0x1a, 0x35, 0x31, 0x47, 0x14, 0xec, 0x58, 0x2b, 0xa0, 0xea, 0xc1, 0x08, 0xf9, 0x46, 0xb4, 0x5c, 0xbe, 0xf8, 0xd8, 0x7a, 0x00, 0x9c, 0xee, 0x75, 0x9a, 0x73, 0xbf, 0x3f, 0xc0, 0xab, 0x53, 0x12, 0xdb, 0xe0, 0x64, 0x0f, 0x94, 0xe2, 0x12, 0x26, 0x2f, 0xb9, 0xd9, 0x35, 0x1b, 0xe6, 0xbf, 0x74, 0xc7, 0xec, 0xd2, 0x10, 0xb7, 0x0f, 0xd1, 0x16, 0xd6, 0x5c, 0x2a, 0x93, 0x0e, 0xe9, 0x24, 0xfa, 0x16, 0x5e, 0x5e, 0xc5, 0x8b, 0xb4, 0x78, 0x5f, 0x43, 0x3d, 0x10, 0x42, 0xde, 0xe5, 0xf0 ],
-const [ 0xca, 0xd0, 0x4d, 0x5a, 0x15, 0xec, 0x41, 0xe2, 0x8c, 0x99, 0x44, 0xfd, 0x13, 0xba, 0xfc, 0xc5, 0x2f, 0x54, 0xaa, 0x86, 0xc5, 0x42, 0x0d, 0x17, 0x25, 0x2a, 0x84, 0x6b, 0x46, 0xaf, 0x72, 0x63, 0x53, 0xe8, 0xe6, 0xe6, 0x67, 0x11, 0x7c, 0x34, 0x96, 0x81, 0x7e, 0x77, 0x2c, 0xdc, 0x4f, 0x9c, 0x39, 0x8a, 0x0a, 0x60, 0x4d, 0x68, 0x66, 0xae, 0x80, 0xbd, 0xdd, 0x28, 0xb5, 0x6f, 0x0d, 0x04, 0x20, 0x77, 0x5e, 0x19, 0x06, 0x92, 0xe5, 0x39, 0xc4, 0x39, 0x88, 0xc2, 0x13, 0xd4, 0x63, 0x70, 0x8a, 0x2b, 0x6b, 0x75, 0x65, 0x1d, 0x51, 0xcc, 0x84, 0x94, 0xaa, 0xca, 0xb7, 0xb8, 0x4c, 0xf6, 0x38, 0x63, 0xfb, 0x1a, 0x79, 0xd5, 0x45, 0x9a, 0x20, 0xaa, 0xaa, 0x05, 0x50, 0x09, 0x00, 0xea, 0x2b, 0x1d, 0x16, 0xed, 0x95, 0xc9, 0x98, 0x19, 0x3a, 0x97, 0x32, 0x78, 0xd2, 0xf2, 0xf8, 0xe1 ],
-const [ 0x55, 0xce, 0xb7, 0x32, 0x8e, 0xc0, 0x45, 0x96, 0x78, 0x07, 0xa8, 0x07, 0x90, 0xb5, 0xf5, 0x5b, 0x2a, 0x66, 0xaa, 0x1f, 0x6d, 0x2e, 0xdc, 0x2c, 0x9f, 0xd0, 0x92, 0x7b, 0xa3, 0x31, 0x6c, 0x3b, 0xbf, 0x0c, 0x88, 0x20, 0xa3, 0xe6, 0xa5, 0xfd, 0xa7, 0x45, 0x89, 0x95, 0x55, 0x1d, 0xa1, 0xaf, 0x27, 0x8b, 0xe8, 0x68, 0x91, 0xc5, 0x09, 0xcd, 0x42, 0x52, 0xc8, 0xa9, 0xa8, 0x76, 0x9e, 0x9c, 0xb2, 0xf1, 0xa3, 0x6d, 0xd9, 0xe9, 0xb2, 0xa1, 0x61, 0x24, 0xc7, 0x4d, 0xdc, 0x7a, 0xab, 0x28, 0xf1, 0x8a, 0xd4, 0xe4, 0x5b, 0xad, 0x86, 0xbf, 0x34, 0x28, 0x3f, 0x55, 0x74, 0xa6, 0x52, 0xb8, 0xb5, 0xe5, 0xd2, 0xc2, 0x39, 0xaf, 0xb1, 0xaa, 0x2d, 0x0c, 0x29, 0xd6, 0x2f, 0xb6, 0x5b, 0xf0, 0x0f, 0xcd, 0x37, 0x3c, 0xd2, 0xcc, 0x9b, 0x29, 0xfd, 0xbc, 0xbf, 0x26, 0x10, 0xa7, 0xd0, 0xb6 ],
-const [ 0xde, 0x66, 0xe5, 0x19, 0x98, 0x3b, 0xa0, 0x74, 0x22, 0x06, 0x40, 0xd0, 0x98, 0x48, 0xcf, 0x60, 0x6f, 0x6f, 0x95, 0x9c, 0x4e, 0x58, 0x8d, 0xe6, 0x1f, 0x11, 0x15, 0x6e, 0x67, 0xe3, 0xe9, 0x53, 0xd2, 0x90, 0x52, 0x0b, 0x13, 0xd9, 0x9b, 0x04, 0xea, 0x43, 0xc5, 0x8b, 0x86, 0x1b, 0x7c, 0xee, 0x0e, 0xb8, 0x49, 0xdd, 0x7b, 0x00, 0x08, 0x16, 0xa8, 0x2e, 0x9d, 0x42, 0xac, 0xd2, 0xe3, 0x19, 0x67, 0x18, 0xe5, 0xcd, 0x5b, 0x4e, 0x51, 0xa6, 0xbd, 0xa1, 0x29, 0xe9, 0xcc, 0x27, 0xbc, 0xff, 0x62, 0x23, 0xd5, 0xd3, 0xc9, 0x84, 0x32, 0x7c, 0xcf, 0xae, 0x37, 0x1c, 0x1d, 0x7d, 0xe4, 0x08, 0xc4, 0x87, 0x05, 0x29, 0x19, 0xa2, 0xa8, 0xa2, 0xc3, 0xa7, 0xd4, 0xb2, 0x12, 0x75, 0x78, 0xdc, 0x93, 0x38, 0xa2, 0x46, 0xe1, 0xeb, 0xf1, 0x60, 0xbd, 0x1b, 0x4d, 0xc5, 0x61, 0xee, 0xd5, 0x66 ],
-const [ 0xac, 0xa7, 0xf7, 0xf3, 0x26, 0x45, 0x34, 0x35, 0xb2, 0xec, 0x9e, 0x17, 0xf0, 0xc8, 0x82, 0x3f, 0x3c, 0xda, 0xb1, 0xcb, 0x8d, 0x47, 0x83, 0x42, 0x9d, 0xf6, 0x1c, 0xca, 0x4b, 0x59, 0xee, 0x9c, 0x3d, 0x8b, 0x7f, 0xb6, 0xc9, 0x9c, 0x6d, 0xcf, 0x16, 0x29, 0xaf, 0x90, 0x7e, 0x2f, 0x1d, 0x01, 0x37, 0x20, 0x33, 0x42, 0x33, 0x37, 0x12, 0x7b, 0x44, 0x09, 0xc7, 0x15, 0x84, 0x5e, 0xd0, 0x2b, 0xf4, 0x3e, 0xdc, 0x3b, 0x63, 0x4f, 0xd3, 0x22, 0x92, 0x5e, 0x16, 0x47, 0x95, 0x3b, 0x08, 0x16, 0x7c, 0xca, 0xcd, 0xb0, 0x33, 0x57, 0x52, 0xe0, 0xa7, 0x2a, 0x8d, 0x52, 0x2a, 0x5b, 0x06, 0xff, 0x19, 0xe8, 0x96, 0xec, 0xbc, 0x05, 0x6e, 0x14, 0x6d, 0xb3, 0x5c, 0xa2, 0xfd, 0x94, 0x4a, 0x64, 0x53, 0xfe, 0x08, 0x7d, 0x56, 0x4e, 0x4b, 0x5a, 0x0e, 0x7f, 0xf5, 0xe7, 0x05, 0xfb, 0x96, 0x02 ],
-const [ 0x13, 0x47, 0x5d, 0x77, 0xc3, 0x02, 0x10, 0xf6, 0xbe, 0xed, 0xff, 0x5c, 0x38, 0xb9, 0x26, 0x80, 0x3e, 0x95, 0x0d, 0xa0, 0xa5, 0x4f, 0x55, 0xa5, 0x40, 0xbc, 0x90, 0xa8, 0x56, 0x5b, 0x56, 0xb6, 0x52, 0x35, 0x95, 0xd0, 0xbd, 0x07, 0x28, 0x36, 0x6a, 0xa3, 0xab, 0xe6, 0xf0, 0x94, 0x8e, 0x5f, 0x5d, 0x01, 0x69, 0xaa, 0x29, 0xd4, 0x8f, 0x9b, 0x69, 0x1a, 0xe6, 0x55, 0x45, 0xad, 0xf6, 0x0c, 0xac, 0x11, 0x3f, 0x0f, 0x47, 0x9d, 0xd0, 0x05, 0xab, 0xdb, 0x15, 0x76, 0xd2, 0x31, 0xf1, 0x8e, 0xcc, 0xc0, 0x0c, 0x1e, 0xb2, 0x8c, 0x6f, 0xe4, 0xdc, 0xdd, 0x4e, 0x0c, 0x53, 0xe6, 0x24, 0xf6, 0x89, 0xa5, 0x06, 0x3a, 0x48, 0x0a, 0x30, 0xea, 0xe9, 0x5b, 0xe5, 0x17, 0xc6, 0xd7, 0x76, 0x96, 0xf2, 0x9a, 0xa0, 0x03, 0x27, 0xc0, 0x1a, 0x07, 0xff, 0xcd, 0x6f, 0xd7, 0x67, 0x4d, 0x0a, 0xfd ],
-const [ 0x3c, 0x5a, 0x85, 0xe4, 0xd4, 0xcc, 0xc1, 0xb8, 0xff, 0x94, 0xc7, 0xc7, 0xaf, 0x30, 0x31, 0x13, 0x6b, 0x58, 0xe1, 0xc7, 0x45, 0x29, 0x94, 0x79, 0x0c, 0x83, 0xba, 0xac, 0xc2, 0xb0, 0x86, 0x99, 0x50, 0x46, 0x41, 0x2f, 0x79, 0x4e, 0xe3, 0x58, 0x0d, 0xa5, 0xe4, 0x7e, 0x5f, 0xa3, 0x50, 0x4e, 0xf8, 0xfb, 0x1a, 0xbb, 0x8d, 0xe2, 0xb2, 0x46, 0x2f, 0x74, 0xd9, 0x7d, 0xc2, 0x53, 0xb5, 0xc2, 0xb0, 0x91, 0x20, 0x4e, 0xdf, 0xd0, 0x46, 0x76, 0xe0, 0xa7, 0x6f, 0x2c, 0x69, 0x48, 0x19, 0xc8, 0x05, 0x60, 0x4a, 0x09, 0x0a, 0x3f, 0x24, 0x56, 0xcb, 0x39, 0xba, 0x4a, 0x10, 0x4c, 0x22, 0x70, 0xc3, 0x03, 0xcc, 0x4b, 0xec, 0x99, 0x11, 0x9a, 0xe0, 0x62, 0x0f, 0xd9, 0xb4, 0x67, 0xb5, 0x0b, 0xf8, 0x50, 0x1a, 0xb7, 0xa2, 0x88, 0x13, 0x31, 0x49, 0x9b, 0x04, 0x1a, 0x94, 0xe3, 0xf6, 0x2a ],
-const [ 0x0e, 0x16, 0xa3, 0xbf, 0x11, 0x59, 0x33, 0x40, 0x3b, 0x17, 0x8e, 0xb5, 0x8a, 0x60, 0x4e, 0xe2, 0x03, 0x39, 0x3a, 0xfc, 0x54, 0xa6, 0x10, 0x60, 0xb8, 0x08, 0x82, 0x85, 0x1b, 0xa9, 0x7e, 0x2f, 0x7f, 0x96, 0xb2, 0xe6, 0x9e, 0xad, 0x50, 0xa7, 0xd0, 0xf6, 0x0e, 0xd9, 0x30, 0x37, 0x72, 0x82, 0xfa, 0xc2, 0x4c, 0xbb, 0x38, 0x92, 0x84, 0x62, 0x9e, 0x96, 0x15, 0x0e, 0xb2, 0x4d, 0x5a, 0x48, 0x30, 0x93, 0x89, 0xf8, 0xac, 0xbb, 0x7d, 0x1d, 0x79, 0xdd, 0xb8, 0xc1, 0xca, 0x71, 0xa8, 0x2d, 0x17, 0x1d, 0x29, 0x59, 0xc2, 0xcc, 0x4c, 0xa6, 0xfb, 0x00, 0x56, 0xcf, 0xe1, 0x69, 0x0c, 0x1d, 0xe9, 0xb6, 0x2e, 0xdb, 0x84, 0xab, 0x42, 0x0a, 0xfc, 0x74, 0x92, 0x56, 0x9f, 0x39, 0x78, 0x48, 0x20, 0xf2, 0xd9, 0xbc, 0x3a, 0x7d, 0xf0, 0x96, 0x96, 0xed, 0x4d, 0xb1, 0xef, 0x26, 0x1d, 0x18 ],
-const [ 0x8c, 0x83, 0x87, 0xf4, 0xae, 0x2c, 0xa1, 0xa6, 0xdd, 0x13, 0xd2, 0x9e, 0x93, 0x58, 0x0b, 0x1c, 0xdf, 0x62, 0x68, 0xda, 0x66, 0xcf, 0x58, 0x9c, 0xa8, 0xb1, 0xff, 0x08, 0x84, 0xf7, 0xd8, 0xb8, 0xfe, 0x29, 0x9f, 0x8e, 0x41, 0x59, 0x6e, 0x47, 0xe0, 0x56, 0x26, 0x53, 0x61, 0x22, 0x10, 0xe4, 0xfc, 0xa6, 0xc4, 0x46, 0xa0, 0xa5, 0x4a, 0x6e, 0x37, 0xef, 0x80, 0xd5, 0x2b, 0xd7, 0xbb, 0x87, 0x29, 0xe6, 0xb1, 0x76, 0x25, 0xd1, 0x97, 0x15, 0x9e, 0xa9, 0x86, 0x22, 0x23, 0x52, 0x23, 0xc3, 0x16, 0x36, 0x7f, 0xd5, 0xb0, 0x3a, 0x3c, 0x81, 0x45, 0xf2, 0xf2, 0x10, 0xc9, 0x10, 0xd0, 0x00, 0x94, 0x23, 0x87, 0x57, 0x62, 0x7e, 0x63, 0x37, 0x9e, 0x75, 0xbb, 0xb3, 0xe0, 0xd0, 0x8c, 0xe1, 0xb4, 0x79, 0x61, 0x30, 0x9d, 0x78, 0x76, 0xfc, 0x59, 0x21, 0x1c, 0x60, 0x67, 0x8c, 0x5f, 0x4c ],
-const [ 0x50, 0xbc, 0xdf, 0x31, 0x38, 0x9e, 0xad, 0xac, 0x5b, 0xb8, 0x19, 0x7e, 0xe9, 0x49, 0xf2, 0x86, 0x4e, 0xde, 0x28, 0x4c, 0x07, 0xd0, 0x39, 0xa0, 0xb4, 0x0e, 0xed, 0x7e, 0x6f, 0x1c, 0x43, 0x35, 0x5d, 0x5c, 0xab, 0xc8, 0x82, 0x8d, 0x75, 0x95, 0xda, 0x91, 0x8a, 0x34, 0xa5, 0x73, 0x5a, 0xa2, 0x02, 0xa8, 0x15, 0x9f, 0xbf, 0x95, 0x1e, 0x54, 0x70, 0x52, 0xbd, 0x39, 0xbe, 0xae, 0x14, 0x36, 0x02, 0x73, 0x54, 0x09, 0x13, 0xeb, 0x30, 0xe7, 0x5b, 0xa2, 0x92, 0x66, 0x31, 0x6e, 0x8d, 0x9a, 0x63, 0xad, 0x94, 0x7e, 0x11, 0xce, 0xe9, 0x96, 0xc2, 0x13, 0x57, 0xd3, 0xb1, 0x94, 0x24, 0xb7, 0x68, 0x88, 0x42, 0xb9, 0x90, 0xc0, 0xc5, 0xeb, 0x08, 0x74, 0x9a, 0xda, 0x34, 0x42, 0x75, 0xb6, 0x98, 0x74, 0x0b, 0xb3, 0xa5, 0x82, 0x82, 0xae, 0xd2, 0xd7, 0x25, 0x14, 0xef, 0xd8, 0x5d, 0x00 ],
-const [ 0x65, 0xbf, 0x93, 0x63, 0x3e, 0x3a, 0x4c, 0xf8, 0x78, 0xdd, 0xb2, 0x1a, 0x5a, 0xa2, 0x67, 0x2f, 0xbe, 0xc6, 0x44, 0xfc, 0x6b, 0xcc, 0x4e, 0xc5, 0x9e, 0xc6, 0xe5, 0xb5, 0xea, 0xd0, 0x3f, 0x80, 0x42, 0xdd, 0x15, 0x46, 0x55, 0xb6, 0x9c, 0xbb, 0x1a, 0x3f, 0xb7, 0x85, 0xab, 0xfc, 0x6b, 0xe5, 0x56, 0xd5, 0x93, 0x9a, 0xf1, 0x16, 0xd5, 0x02, 0x6f, 0xba, 0xd4, 0x83, 0xb1, 0xe9, 0xa7, 0x29, 0x9e, 0xbf, 0x8b, 0x90, 0x76, 0x4f, 0xd4, 0x05, 0x63, 0xe8, 0x2a, 0xe8, 0x52, 0x97, 0xf1, 0x54, 0x00, 0xec, 0x09, 0x03, 0x58, 0x01, 0xb8, 0x6b, 0xfc, 0xb9, 0xe4, 0x2d, 0x22, 0x46, 0x86, 0xb0, 0xa1, 0xee, 0x5b, 0x09, 0x4b, 0x0e, 0xdd, 0x1f, 0x7e, 0x5f, 0x71, 0x0c, 0xf6, 0x78, 0xe2, 0xc6, 0xe5, 0x94, 0x0e, 0xfe, 0x46, 0x96, 0xdf, 0x48, 0x6e, 0x4a, 0x7d, 0x7d, 0xe4, 0xee, 0xc2, 0x5d ],
-const [ 0xcf, 0x72, 0x10, 0xd4, 0x24, 0x0c, 0xbb, 0xa9, 0x5a, 0x86, 0x35, 0xc1, 0xc3, 0x7e, 0xf8, 0xbc, 0x4b, 0xbe, 0xf2, 0xdb, 0xfd, 0xb3, 0x2e, 0x16, 0xc9, 0x22, 0xb0, 0x68, 0x84, 0x16, 0xa1, 0x6e, 0x30, 0x1d, 0xac, 0x30, 0x7e, 0xb3, 0xa7, 0x3f, 0x91, 0xff, 0x76, 0x00, 0x05, 0xbd, 0x2c, 0x47, 0x30, 0x7c, 0x74, 0x27, 0xa7, 0x09, 0x30, 0x09, 0x04, 0x2b, 0x5f, 0xfc, 0xe7, 0x90, 0x44, 0x4c, 0x3b, 0x08, 0xc5, 0x56, 0xbb, 0xf1, 0x11, 0x9a, 0xb4, 0xf2, 0x85, 0x12, 0x0c, 0xed, 0xd1, 0xc3, 0x83, 0x2e, 0x56, 0x91, 0x39, 0xe9, 0xd3, 0x57, 0x71, 0xe3, 0x41, 0x37, 0x94, 0x6f, 0xfb, 0x2f, 0x79, 0x9c, 0x22, 0xed, 0xe3, 0xad, 0x40, 0xe5, 0x4b, 0xc9, 0x2b, 0xa0, 0xe0, 0xf4, 0x2d, 0x57, 0xcd, 0x3e, 0x61, 0xc0, 0xba, 0x3a, 0x60, 0x28, 0x95, 0xb2, 0x1d, 0xc2, 0x92, 0x99, 0x0e, 0x3f ],
-const [ 0x5d, 0x11, 0x8e, 0xbe, 0xeb, 0x1a, 0x97, 0x74, 0x90, 0x10, 0x45, 0xf4, 0xaf, 0x19, 0x39, 0x2c, 0x0a, 0x3f, 0x64, 0x1b, 0x35, 0x16, 0x18, 0x93, 0x4b, 0x9e, 0x65, 0x3d, 0xdf, 0x6a, 0xa2, 0xdd, 0x35, 0x02, 0x4a, 0xd7, 0xb2, 0x87, 0x0a, 0xf3, 0x92, 0x95, 0x17, 0x5d, 0xd9, 0x6d, 0xc5, 0xf0, 0x8c, 0x54, 0x56, 0xb3, 0x20, 0x36, 0x0f, 0xa4, 0x33, 0x8f, 0x92, 0xb5, 0x7a, 0x8c, 0x67, 0x15, 0xfb, 0x6d, 0xdc, 0xb0, 0x7c, 0x2d, 0x0f, 0xf9, 0x3b, 0x65, 0x49, 0xe7, 0xdf, 0x6e, 0x8d, 0x3d, 0xaf, 0xc5, 0x71, 0x0f, 0x02, 0xb4, 0x2d, 0x82, 0xf6, 0x2f, 0xf2, 0xd3, 0x65, 0xfd, 0x7d, 0x9b, 0x15, 0x18, 0xeb, 0x51, 0x2f, 0x55, 0xcf, 0x10, 0xf3, 0x47, 0x82, 0x9a, 0xa9, 0x61, 0xba, 0x9e, 0xdb, 0x5c, 0x5e, 0x36, 0xc1, 0xd8, 0x99, 0xb4, 0xfd, 0x46, 0x2e, 0x9e, 0x89, 0x05, 0x0b, 0xf7 ],
-const [ 0x15, 0x5f, 0x60, 0xad, 0x0a, 0x95, 0xbd, 0xde, 0xde, 0x2a, 0x10, 0xf0, 0xc8, 0x44, 0x7a, 0xcd, 0x23, 0xa5, 0x41, 0xf3, 0x7b, 0x76, 0x80, 0x62, 0xe8, 0x43, 0x1d, 0xb9, 0x9a, 0x48, 0xfc, 0x9c, 0xb6, 0xeb, 0x72, 0x58, 0x61, 0x89, 0xfd, 0xca, 0x19, 0x75, 0x32, 0x7d, 0x4c, 0x3e, 0xf6, 0x12, 0x23, 0x31, 0xf1, 0xe5, 0x9f, 0x1f, 0x40, 0xed, 0xe8, 0x61, 0x6a, 0xe4, 0xe2, 0x18, 0x96, 0xa8, 0x00, 0xb9, 0xfb, 0xe2, 0x5d, 0xca, 0x97, 0xe5, 0x09, 0xe6, 0x24, 0xd9, 0xa0, 0x07, 0x48, 0x18, 0x22, 0x05, 0x0c, 0xd8, 0xfe, 0x59, 0x8f, 0x0b, 0x70, 0x27, 0xfc, 0x83, 0x0d, 0x7c, 0xb9, 0x5a, 0x9d, 0xd4, 0xe1, 0x91, 0x28, 0xdf, 0xf5, 0xf7, 0x54, 0x84, 0xce, 0x4c, 0xee, 0x27, 0xd6, 0xa7, 0xc6, 0x27, 0x78, 0x15, 0xc0, 0xab, 0xd5, 0x83, 0x28, 0x9f, 0xb9, 0xde, 0x46, 0xf9, 0xcd, 0x78 ],
-const [ 0xa5, 0xbd, 0xdb, 0x41, 0x03, 0x51, 0x56, 0x67, 0x08, 0x18, 0xc0, 0x30, 0xd2, 0x89, 0x3f, 0x7e, 0xca, 0x39, 0xa4, 0x29, 0x79, 0x5d, 0xe6, 0xa1, 0x9e, 0x8a, 0xce, 0xd5, 0x7d, 0xc0, 0xf3, 0x53, 0x79, 0xa7, 0xe9, 0xb0, 0xe5, 0x18, 0xb6, 0x2a, 0x18, 0xdf, 0x85, 0x8c, 0xbf, 0xc0, 0x9f, 0x52, 0x78, 0xb8, 0x96, 0x0e, 0x9c, 0x84, 0xc3, 0x0a, 0x5b, 0x68, 0xf3, 0x2f, 0x0f, 0x29, 0x5e, 0x25, 0xca, 0x5b, 0xd9, 0xbc, 0x31, 0xe3, 0x4c, 0x8b, 0x8e, 0xb4, 0x65, 0xd7, 0x20, 0xdc, 0x8e, 0xb6, 0xb6, 0xc4, 0x1d, 0x73, 0x7c, 0xb3, 0xcb, 0x35, 0x14, 0x95, 0x68, 0xdc, 0xe8, 0xfb, 0xcd, 0x2c, 0xbf, 0x62, 0x11, 0x2d, 0x8f, 0xb8, 0x00, 0xd1, 0x92, 0x1c, 0xc8, 0xd8, 0x9c, 0xe6, 0xf6, 0xf1, 0xac, 0xe7, 0xa1, 0x22, 0xc1, 0xf2, 0xe5, 0x69, 0xef, 0x9a, 0x94, 0xa4, 0xb1, 0x3e, 0x27, 0xae ],
-const [ 0x32, 0x80, 0x22, 0x4a, 0x9c, 0x75, 0xf0, 0x1d, 0xa9, 0xfd, 0x8b, 0xef, 0x8b, 0x92, 0x5a, 0x1b, 0x7e, 0x90, 0x16, 0x04, 0xac, 0x8c, 0xd0, 0x06, 0x4e, 0xe8, 0x36, 0xad, 0x15, 0xa4, 0x12, 0x25, 0xc8, 0x77, 0x13, 0xf2, 0x2e, 0x1f, 0xd0, 0xe1, 0x2e, 0xf5, 0x0a, 0x3f, 0x35, 0xc4, 0x31, 0x48, 0xd8, 0xdb, 0x2a, 0xe2, 0xbb, 0x61, 0x50, 0x8c, 0xb1, 0xe9, 0xb9, 0x91, 0x24, 0x46, 0xba, 0x81, 0xb8, 0xa1, 0xad, 0xe1, 0x2b, 0xc9, 0xf1, 0x22, 0x80, 0xc9, 0x33, 0xd0, 0x5c, 0xc0, 0xec, 0x0c, 0xb0, 0xed, 0x2b, 0x3c, 0x98, 0x0a, 0x95, 0x01, 0x83, 0xdb, 0xaa, 0x6a, 0x95, 0x06, 0x4a, 0x67, 0x49, 0x25, 0x77, 0x80, 0x5b, 0x1a, 0x5c, 0xc6, 0xe5, 0xa2, 0x8e, 0x0a, 0xc8, 0x2e, 0x93, 0x4e, 0x4d, 0xee, 0xa1, 0x79, 0x0c, 0x2e, 0xa7, 0x4f, 0x0d, 0xe5, 0x92, 0x9f, 0x2e, 0x8b, 0xc9, 0xbe ],
-const [ 0x01, 0x28, 0x70, 0x16, 0x9a, 0xd7, 0x2e, 0xb3, 0x7a, 0x51, 0xb6, 0x76, 0x59, 0x7a, 0x2a, 0x8c, 0x01, 0x04, 0x46, 0x4f, 0xb3, 0x3f, 0xe6, 0xbd, 0xc6, 0x32, 0xc8, 0x28, 0x91, 0xea, 0x92, 0x2e, 0x8b, 0x12, 0x17, 0xec, 0xb1, 0xc4, 0xd6, 0x6f, 0x28, 0x9f, 0xc3, 0x6b, 0x24, 0x1a, 0x4b, 0x30, 0x08, 0x17, 0x92, 0xd9, 0xcf, 0xbc, 0xff, 0xc7, 0xaa, 0x7e, 0xfa, 0x4e, 0xea, 0x7e, 0xf4, 0xad, 0x21, 0x19, 0xa8, 0x44, 0x84, 0xba, 0xa1, 0x01, 0x94, 0xf3, 0xfd, 0x1c, 0xfe, 0xcd, 0x70, 0x04, 0xbf, 0x5c, 0x8c, 0x99, 0x8b, 0x96, 0x3f, 0x9b, 0x70, 0x65, 0x9d, 0x62, 0xb7, 0xfa, 0xdf, 0xd0, 0x0b, 0x65, 0xac, 0x85, 0xdd, 0x62, 0x98, 0x51, 0x06, 0x76, 0xeb, 0xef, 0xae, 0x3b, 0xa3, 0xf0, 0x6d, 0xf8, 0xbc, 0xf5, 0xb1, 0x75, 0xae, 0x21, 0x60, 0x0e, 0x38, 0xce, 0xbe, 0x05, 0x5c, 0x7f ],
-const [ 0x44, 0x32, 0xf4, 0x3f, 0x1b, 0x00, 0xd3, 0x06, 0xdf, 0xab, 0x2c, 0x2a, 0x24, 0x09, 0xd0, 0x49, 0xe1, 0xc3, 0x0e, 0x89, 0x74, 0x50, 0xd4, 0x2c, 0xe6, 0x24, 0x18, 0x65, 0x71, 0x24, 0x76, 0x6a, 0x3f, 0x5e, 0x1b, 0xcb, 0x75, 0xf7, 0xe1, 0x02, 0x70, 0x64, 0xbb, 0x4b, 0x4e, 0xdd, 0x54, 0xb6, 0xb1, 0x0f, 0xf3, 0x7a, 0xbf, 0x12, 0xa2, 0x8c, 0x6e, 0x9a, 0x8f, 0x70, 0xfe, 0x71, 0xb2, 0x50, 0xc7, 0x25, 0xb0, 0x4b, 0x34, 0xfe, 0x00, 0x0f, 0x10, 0x32, 0x4c, 0xaa, 0x00, 0x5c, 0x1a, 0x9d, 0x51, 0x2b, 0xab, 0x32, 0xf4, 0x57, 0x23, 0x10, 0xc7, 0xda, 0xeb, 0x0d, 0x17, 0x5c, 0x54, 0x43, 0x62, 0xef, 0x7d, 0x66, 0x61, 0xfc, 0x76, 0x55, 0x45, 0x7d, 0xa5, 0xee, 0x42, 0x6d, 0x69, 0x27, 0x4a, 0x7d, 0xfe, 0x5a, 0x1b, 0x09, 0xa1, 0xe1, 0x7b, 0x4a, 0xf4, 0xe3, 0xc2, 0xcd, 0xa3, 0x6d ],
-const [ 0x7a, 0xc3, 0x3a, 0xce, 0x5b, 0x4a, 0x6a, 0x32, 0x92, 0xb7, 0x2d, 0x0d, 0xd4, 0xbd, 0xf8, 0x53, 0x50, 0x9d, 0x9b, 0xdf, 0x87, 0xa5, 0xbc, 0x15, 0x5e, 0xf6, 0x84, 0xc6, 0x71, 0x8b, 0x98, 0x53, 0xab, 0x77, 0x4b, 0x16, 0x14, 0x6e, 0x12, 0xfd, 0xe9, 0x87, 0x38, 0x78, 0xf2, 0x40, 0xd2, 0x96, 0x10, 0xc3, 0xf6, 0x6b, 0x16, 0x68, 0x28, 0xb4, 0xd9, 0x7a, 0x15, 0xbe, 0x8b, 0x3e, 0x84, 0x83, 0x44, 0x31, 0x89, 0x16, 0xe2, 0x92, 0xfb, 0x42, 0x13, 0x20, 0x29, 0x6e, 0xb0, 0x25, 0xc9, 0xc4, 0x4d, 0xb3, 0x31, 0x93, 0x0e, 0x2e, 0xca, 0xf1, 0xbc, 0x0a, 0xc1, 0xa4, 0x17, 0xd6, 0xff, 0x43, 0x6e, 0x7a, 0x5c, 0x98, 0x6e, 0xbd, 0x0f, 0x49, 0x38, 0x0a, 0x69, 0xb7, 0xb6, 0x73, 0xc4, 0x27, 0x2e, 0xf6, 0xb6, 0x20, 0x17, 0xff, 0x8a, 0x13, 0x2c, 0x2f, 0xf0, 0x42, 0xc0, 0x5c, 0xf3, 0xda ],
-const [ 0xf4, 0xd7, 0xa8, 0xf7, 0x38, 0x98, 0xfe, 0x68, 0xc3, 0x98, 0x58, 0x8d, 0xfe, 0x2e, 0x01, 0x92, 0x31, 0x13, 0x1e, 0x19, 0x45, 0x17, 0x90, 0x8c, 0xce, 0x12, 0x1b, 0xb2, 0x49, 0x1e, 0xc7, 0x81, 0xa1, 0x03, 0x86, 0x34, 0xf9, 0xf3, 0x18, 0x9d, 0xa5, 0x78, 0x2c, 0xbb, 0x79, 0xaa, 0xc8, 0x8f, 0x47, 0xa5, 0xea, 0x2c, 0xa3, 0x3a, 0x70, 0x0e, 0xe9, 0xe5, 0x35, 0xac, 0x82, 0xff, 0x7d, 0x50, 0x62, 0x35, 0x93, 0x27, 0xd5, 0x39, 0xb0, 0x94, 0x7c, 0xb7, 0x1f, 0xca, 0x92, 0x8b, 0x9f, 0x9a, 0x74, 0x31, 0x09, 0x89, 0x61, 0x7d, 0x32, 0x26, 0x7e, 0x8c, 0x13, 0x9b, 0x1d, 0xfa, 0x27, 0x81, 0x3e, 0x55, 0x15, 0xf9, 0x56, 0xd2, 0x8f, 0xf8, 0x50, 0x3f, 0x7a, 0xe2, 0xd2, 0x39, 0x4f, 0x5b, 0xc1, 0x9f, 0xc1, 0x5a, 0x07, 0x47, 0xa0, 0x7e, 0x94, 0xef, 0xfd, 0xa6, 0xa2, 0x76, 0x8f, 0xbc ],
-const [ 0x50, 0x4c, 0xca, 0xaa, 0xf0, 0x9c, 0x8e, 0x8a, 0x0c, 0x56, 0x7a, 0xb7, 0xf1, 0xa1, 0xec, 0xa7, 0x8e, 0xbf, 0xed, 0xce, 0xd9, 0xe3, 0xb7, 0x12, 0x6e, 0x43, 0x75, 0x7e, 0x79, 0x6f, 0x49, 0x3a, 0xd7, 0xe1, 0x93, 0xbb, 0x78, 0xd5, 0x71, 0x37, 0x08, 0x5b, 0x82, 0x5c, 0xce, 0xaa, 0xf0, 0x41, 0xd4, 0xb7, 0xad, 0x9d, 0x48, 0x06, 0xfc, 0x37, 0x22, 0xc0, 0x34, 0x9d, 0x07, 0x07, 0xc0, 0x19, 0x6d, 0x86, 0x6b, 0xe1, 0x01, 0x4c, 0xdb, 0x8e, 0x45, 0xda, 0x5a, 0xcf, 0x7e, 0x7a, 0xdd, 0x5f, 0xcd, 0xd3, 0x3e, 0x34, 0x9c, 0xbb, 0xcd, 0xfa, 0x3b, 0x4c, 0x07, 0xbf, 0xcb, 0x3a, 0xa5, 0xf0, 0x5c, 0x63, 0xd9, 0x84, 0x52, 0xa8, 0xd4, 0x77, 0x0d, 0xfc, 0x8b, 0x7a, 0xc9, 0xba, 0xbb, 0xe9, 0xc2, 0x3c, 0x2a, 0xfd, 0x9c, 0xa9, 0x31, 0x43, 0x03, 0x0e, 0x77, 0x4c, 0x8f, 0xb1, 0xff, 0xa6 ],
-const [ 0x74, 0x16, 0xef, 0x51, 0xd9, 0xee, 0x97, 0x10, 0xb8, 0x3b, 0x2f, 0x0b, 0xba, 0x93, 0x45, 0xaa, 0x7c, 0xb4, 0xf4, 0xab, 0x8f, 0x73, 0x08, 0xba, 0xc4, 0xf6, 0x62, 0x42, 0xa6, 0x23, 0x9f, 0x82, 0x47, 0x58, 0xf4, 0xe3, 0x40, 0x5d, 0x5c, 0x89, 0xf3, 0x97, 0xf6, 0x28, 0x13, 0x7e, 0xa8, 0x19, 0x67, 0x51, 0x09, 0xad, 0xca, 0x08, 0x7e, 0xc1, 0x77, 0x8a, 0xa3, 0x92, 0x83, 0x20, 0xec, 0xd3, 0xab, 0x29, 0x8c, 0xfd, 0x50, 0x10, 0x95, 0xe7, 0xc0, 0x7c, 0x61, 0x96, 0xb7, 0xc6, 0x32, 0x56, 0x26, 0xb0, 0x15, 0x09, 0x32, 0x54, 0x0c, 0xc0, 0x80, 0x5a, 0x6b, 0x88, 0xb0, 0x6e, 0x83, 0x87, 0x27, 0xf1, 0x7e, 0x47, 0x12, 0xef, 0x8a, 0x51, 0xa7, 0x52, 0x3a, 0xfe, 0xae, 0x55, 0x28, 0x8a, 0x41, 0x3b, 0xe0, 0x6a, 0xd0, 0x40, 0xf9, 0xdf, 0x68, 0xd0, 0x85, 0xcc, 0x34, 0xf7, 0xac, 0xc5 ],
-const [ 0x0c, 0x69, 0x08, 0xb5, 0x05, 0x3e, 0x85, 0x8b, 0xd9, 0x01, 0xc1, 0x8b, 0xfe, 0x5f, 0x85, 0xe7, 0x33, 0x28, 0x30, 0x14, 0x65, 0xa5, 0xb6, 0xc2, 0xd4, 0x2d, 0xe9, 0x11, 0x72, 0xf3, 0xf7, 0x02, 0x8b, 0x22, 0x34, 0x2b, 0xab, 0x2c, 0x1a, 0xb0, 0xbd, 0x5e, 0x8e, 0x6e, 0x70, 0xb9, 0x65, 0x79, 0xdf, 0xfd, 0x27, 0xc9, 0x70, 0x06, 0x13, 0x30, 0xfc, 0x5b, 0x63, 0x8f, 0x31, 0x05, 0xd1, 0x4a, 0x35, 0x9d, 0x59, 0xf9, 0x8c, 0xa9, 0x41, 0x61, 0x3c, 0x29, 0x57, 0xa2, 0x2f, 0x6c, 0x7a, 0xb1, 0xd8, 0x28, 0x5b, 0x09, 0x1a, 0xca, 0x85, 0x9e, 0x65, 0x0b, 0x9b, 0x13, 0x22, 0xc4, 0xe1, 0x2c, 0x51, 0x03, 0xfe, 0x86, 0x70, 0x5e, 0x01, 0x86, 0x9f, 0x87, 0xa1, 0x8f, 0x03, 0x21, 0xc9, 0x78, 0x68, 0xd2, 0x54, 0x3d, 0x2a, 0x9a, 0x15, 0xf4, 0x55, 0x63, 0x1a, 0x03, 0x0b, 0xd9, 0x31, 0x91 ],
-const [ 0x07, 0x35, 0x5a, 0xc8, 0x18, 0xce, 0x6b, 0x46, 0xd3, 0x41, 0x63, 0xae, 0xec, 0x45, 0xab, 0x17, 0x2d, 0x4b, 0x85, 0x0b, 0x0d, 0xbb, 0x42, 0xe6, 0x83, 0x81, 0xb6, 0x7f, 0x1c, 0xc8, 0xe9, 0x0a, 0x4c, 0x05, 0x0f, 0x3d, 0x01, 0x38, 0xba, 0xb2, 0x7e, 0x6f, 0x4f, 0x8d, 0x67, 0x8b, 0xb6, 0x5e, 0x18, 0x46, 0x56, 0x49, 0x3b, 0x75, 0x41, 0x64, 0x9a, 0x8b, 0xab, 0x60, 0x31, 0x5f, 0xa1, 0x6c, 0x88, 0x2f, 0xf8, 0x56, 0x40, 0xe4, 0x83, 0xf3, 0xeb, 0x97, 0x89, 0xc2, 0x21, 0x55, 0x75, 0xcc, 0xd0, 0x1f, 0xd0, 0xce, 0xd3, 0x35, 0x6d, 0x9a, 0xc6, 0x95, 0xe3, 0xbb, 0x19, 0xbe, 0x40, 0x58, 0x64, 0xb9, 0xfc, 0x5b, 0xfa, 0x5a, 0x2c, 0xd1, 0xc1, 0xc4, 0xf8, 0x94, 0x41, 0x2b, 0x4f, 0x28, 0xfa, 0xde, 0xda, 0xe4, 0xfb, 0x84, 0x2e, 0x52, 0xb0, 0xa5, 0x45, 0xd8, 0xfc, 0x6d, 0x2f, 0x97 ],
-const [ 0x17, 0x92, 0x59, 0x52, 0xaf, 0x30, 0x95, 0x9b, 0x1a, 0x5a, 0x13, 0x6f, 0xf1, 0x1b, 0x3d, 0xe1, 0x0d, 0xb6, 0xe4, 0xce, 0xe1, 0x9f, 0x31, 0x08, 0x0d, 0xcb, 0xde, 0xb4, 0x31, 0x29, 0xa5, 0xf1, 0xff, 0x71, 0xf9, 0xbb, 0x95, 0x1c, 0xf5, 0x0e, 0x09, 0xb3, 0x92, 0x4e, 0x45, 0x4d, 0x1c, 0xe6, 0x15, 0x54, 0xe7, 0x30, 0x7e, 0x87, 0x3e, 0x95, 0x52, 0x45, 0x9c, 0xf5, 0x01, 0x08, 0x1f, 0x48, 0xb2, 0x30, 0x39, 0x86, 0x92, 0x02, 0xa9, 0xc5, 0x6c, 0xf0, 0xa9, 0xa1, 0x7b, 0x1a, 0x69, 0xe1, 0x7c, 0x16, 0xbd, 0x58, 0x06, 0xec, 0x12, 0x08, 0x1e, 0x65, 0xa7, 0x8e, 0x07, 0x86, 0xfa, 0xba, 0x57, 0x57, 0x80, 0x7d, 0x50, 0xe9, 0x98, 0x08, 0x6c, 0x96, 0xc2, 0x32, 0x3a, 0x8b, 0x0c, 0x1a, 0x69, 0x84, 0xce, 0x0e, 0x22, 0xd7, 0x97, 0xac, 0x9c, 0xb4, 0x67, 0x47, 0xea, 0xab, 0x1f, 0x8d ],
-const [ 0x00, 0xbd, 0x47, 0xd7, 0x52, 0x53, 0x29, 0x88, 0x75, 0x84, 0x06, 0xe3, 0xcf, 0x71, 0x8b, 0xaf, 0x9b, 0xb9, 0xed, 0x1b, 0xe0, 0x9a, 0x80, 0xfe, 0x9f, 0x59, 0x86, 0x63, 0x51, 0xe4, 0x44, 0x45, 0x91, 0xb7, 0x5c, 0x97, 0x15, 0xfc, 0x56, 0x88, 0xe2, 0xf6, 0x80, 0x04, 0xc0, 0x9f, 0xf8, 0x7e, 0xec, 0x90, 0x07, 0xed, 0x0e, 0x22, 0xb0, 0x14, 0x6a, 0xd3, 0x89, 0x07, 0x5a, 0xeb, 0xca, 0xeb, 0xfc, 0x5f, 0xa4, 0xfd, 0x28, 0xf5, 0xd4, 0xd6, 0xa5, 0xa9, 0x77, 0xed, 0x9c, 0x4f, 0x20, 0x5d, 0x4c, 0x7b, 0x28, 0xe8, 0x00, 0x9e, 0x45, 0x3c, 0x3e, 0x71, 0x5e, 0x76, 0x42, 0x97, 0x9e, 0xe5, 0xab, 0x7e, 0xc8, 0x10, 0x73, 0x86, 0xca, 0xfa, 0x24, 0x65, 0x94, 0xa4, 0x49, 0xca, 0x2a, 0xd4, 0x23, 0x40, 0xf8, 0x15, 0x9e, 0x55, 0x67, 0xff, 0x83, 0xfc, 0xad, 0xb8, 0xef, 0x31, 0xe9, 0xbb ],
-const [ 0xca, 0x7e, 0x27, 0x51, 0x13, 0xfa, 0xea, 0x9f, 0xa7, 0x09, 0xa4, 0xff, 0x19, 0x3b, 0xb0, 0x35, 0xae, 0x19, 0x85, 0xa5, 0xc9, 0xc3, 0xd3, 0x16, 0xa6, 0xd8, 0xcf, 0xb7, 0x4b, 0x96, 0xca, 0x5f, 0xbc, 0x43, 0x09, 0x19, 0x6f, 0xcb, 0xd1, 0xe0, 0xff, 0xaa, 0xc1, 0xa7, 0x24, 0x0c, 0x65, 0x9d, 0xe3, 0x33, 0x07, 0xae, 0x02, 0x1a, 0xc8, 0x4d, 0xbf, 0x58, 0xf0, 0x71, 0xc2, 0x46, 0x83, 0xdd, 0x4f, 0x64, 0x15, 0xa5, 0xc0, 0xf9, 0xde, 0xee, 0x33, 0xfa, 0x11, 0xf5, 0x80, 0x2d, 0x6a, 0x53, 0x6e, 0x8e, 0x06, 0x7f, 0x26, 0xf2, 0x78, 0x94, 0xe7, 0xea, 0x19, 0x54, 0xfc, 0xea, 0x9f, 0x6d, 0xeb, 0xab, 0xf2, 0xfc, 0xf0, 0xcd, 0x3b, 0x50, 0xa9, 0xc1, 0x3d, 0xf0, 0x13, 0xe6, 0xe8, 0xdf, 0xb5, 0xf2, 0x2b, 0x1e, 0x1b, 0x94, 0x0b, 0x73, 0x86, 0x58, 0xf2, 0x69, 0xe2, 0xca, 0x49, 0x98 ],
-const [ 0xf2, 0x11, 0xcb, 0xcb, 0xf3, 0xf7, 0xa9, 0xc4, 0x89, 0xeb, 0xe8, 0xf7, 0x69, 0x22, 0xfa, 0xd5, 0xcd, 0x3d, 0x0f, 0xa6, 0x6b, 0x6e, 0x9f, 0xd0, 0xa4, 0xdd, 0x42, 0x56, 0xff, 0x4a, 0xc8, 0x9f, 0xd5, 0xf3, 0x86, 0x79, 0x4e, 0xb8, 0xee, 0x5d, 0x8c, 0x7d, 0x63, 0xf5, 0x25, 0xd0, 0x4b, 0xdb, 0xd7, 0xcb, 0x65, 0xa4, 0x77, 0x3c, 0x5c, 0x1d, 0x2b, 0x04, 0x9d, 0xd4, 0xd9, 0xbd, 0x66, 0xda, 0xdf, 0xa0, 0x20, 0xc8, 0x05, 0xa5, 0xef, 0x00, 0xaf, 0xeb, 0x87, 0x35, 0x58, 0x5b, 0x41, 0x2e, 0x3b, 0x89, 0x6e, 0xc6, 0x53, 0xda, 0xeb, 0x38, 0x86, 0xec, 0xf6, 0x99, 0x1e, 0x32, 0x3f, 0xa6, 0x78, 0xdf, 0x42, 0xc0, 0x00, 0x06, 0xd5, 0x35, 0x5d, 0xff, 0xfd, 0xc1, 0xe8, 0x0c, 0x06, 0x55, 0x63, 0x3c, 0xd3, 0x16, 0xe8, 0x90, 0x72, 0xa9, 0x1f, 0x5d, 0xf3, 0xae, 0xb4, 0xf1, 0x7b, 0x8a ],
-const [ 0xdc, 0x59, 0xa9, 0xd3, 0xb6, 0xd8, 0x46, 0xf0, 0xc7, 0xb2, 0xce, 0x52, 0xeb, 0xa3, 0x1d, 0x3b, 0xf1, 0x92, 0x91, 0x5e, 0x4c, 0x72, 0x60, 0xe7, 0x0b, 0x66, 0x2f, 0xbc, 0x0c, 0x28, 0xe0, 0x02, 0x6c, 0xab, 0xab, 0xe4, 0x41, 0xff, 0x70, 0x8f, 0x8c, 0x76, 0x4b, 0x81, 0x69, 0x05, 0x6a, 0x04, 0x89, 0xec, 0x1b, 0xf5, 0xe2, 0x99, 0x29, 0xca, 0xa5, 0xca, 0x69, 0xd4, 0x71, 0xf3, 0x90, 0xc0, 0xc6, 0xdf, 0x47, 0x64, 0xbc, 0x99, 0x82, 0xb9, 0xf5, 0x8d, 0x0d, 0x23, 0xd0, 0xeb, 0x67, 0xf9, 0xdf, 0x4c, 0xd4, 0x41, 0x9c, 0x98, 0xae, 0xbb, 0x57, 0x27, 0xfc, 0x22, 0x73, 0x26, 0x46, 0xae, 0xd2, 0x3d, 0xa7, 0xdd, 0x8e, 0x6e, 0x23, 0x73, 0xea, 0x41, 0x3b, 0xbf, 0x88, 0x1e, 0xbf, 0x21, 0xdc, 0xfa, 0xe4, 0xc9, 0xe0, 0x36, 0x96, 0xc1, 0x09, 0xc3, 0x0f, 0x2e, 0x7a, 0x8b, 0xa9, 0xd3 ],
-const [ 0x62, 0xe2, 0xa7, 0x3b, 0xc7, 0x7a, 0xc8, 0x5b, 0x1a, 0xa8, 0x12, 0x46, 0x3d, 0xce, 0x29, 0xa0, 0x97, 0xcf, 0x3c, 0x69, 0x73, 0xd9, 0x8b, 0x76, 0xa2, 0x82, 0x26, 0x22, 0x68, 0x17, 0xf7, 0x41, 0x96, 0x30, 0x02, 0x55, 0xf3, 0x88, 0xec, 0x05, 0xe0, 0x0c, 0xba, 0xca, 0x3c, 0x32, 0xdc, 0xec, 0x86, 0x8c, 0x6a, 0xad, 0x41, 0x9d, 0xad, 0xc3, 0x9d, 0xeb, 0xe1, 0x0c, 0x53, 0x55, 0x39, 0x7e, 0xd1, 0xa7, 0x24, 0x5d, 0x97, 0x6c, 0xcf, 0xb0, 0xe1, 0x04, 0xeb, 0xf5, 0x86, 0xf6, 0xb0, 0x14, 0x20, 0x87, 0x22, 0x92, 0x6d, 0x8b, 0x93, 0x07, 0xf5, 0x7b, 0x69, 0xd2, 0xed, 0xc8, 0x21, 0x0b, 0x5c, 0x6f, 0x94, 0xb9, 0x7c, 0xce, 0x79, 0x45, 0x63, 0xb5, 0x2c, 0x2f, 0xe2, 0xc1, 0xae, 0x00, 0xae, 0xe5, 0xec, 0x80, 0xbd, 0x4a, 0x44, 0x28, 0xf3, 0x59, 0x45, 0xda, 0xfe, 0x16, 0xb6, 0xd0 ],
-const [ 0x34, 0x57, 0x6c, 0xe2, 0xcb, 0xe2, 0x17, 0x3b, 0xf4, 0x0d, 0xe2, 0x30, 0x50, 0x85, 0x1a, 0xed, 0x2f, 0xe7, 0x34, 0x1f, 0x56, 0x78, 0xb3, 0x4f, 0x00, 0x15, 0x4d, 0x6e, 0x22, 0x6d, 0x49, 0xb1, 0xf3, 0x6d, 0x2b, 0x9f, 0xac, 0xfc, 0x93, 0x68, 0x8c, 0xe9, 0x63, 0x78, 0x20, 0x21, 0x20, 0x4c, 0xc1, 0x26, 0x9b, 0x84, 0x5e, 0xbc, 0xd0, 0x3a, 0x7c, 0xe6, 0x0e, 0x93, 0x7a, 0x10, 0x58, 0x93, 0x1a, 0x8e, 0x0c, 0x36, 0x3d, 0x45, 0xc2, 0xbc, 0xee, 0xa8, 0x77, 0x44, 0xa2, 0xe7, 0xeb, 0x9c, 0xbe, 0x62, 0x47, 0x58, 0x5a, 0x64, 0x03, 0x21, 0x45, 0x0e, 0x07, 0x50, 0x49, 0x91, 0x10, 0xbc, 0xb0, 0xa1, 0x56, 0xcf, 0x06, 0x26, 0x6c, 0xe0, 0x21, 0x34, 0x67, 0xbc, 0x5f, 0x3d, 0x42, 0x86, 0x2f, 0x85, 0x81, 0xc2, 0xd3, 0xd7, 0x15, 0xac, 0x64, 0x77, 0x80, 0xce, 0x16, 0x57, 0x39, 0xd1 ],
-const [ 0xc8, 0xce, 0x98, 0x13, 0xcc, 0x18, 0xff, 0x5a, 0xc3, 0x09, 0xea, 0x9e, 0x2a, 0x79, 0xe5, 0x09, 0x13, 0x87, 0xa2, 0x58, 0xd2, 0x81, 0x4a, 0xe1, 0xfa, 0x05, 0x11, 0xd4, 0x88, 0x66, 0x0d, 0xc1, 0x5d, 0x51, 0x48, 0x5a, 0xf2, 0xb1, 0x14, 0x7b, 0x47, 0xcf, 0x9e, 0x67, 0x1c, 0xbe, 0xc6, 0x55, 0x64, 0xf6, 0x2e, 0x2b, 0xf7, 0x3f, 0x91, 0x89, 0x87, 0xd1, 0x57, 0x09, 0xd5, 0xb9, 0x66, 0xc5, 0x24, 0x7e, 0x3a, 0x1a, 0xee, 0x05, 0x38, 0xac, 0xd7, 0xb2, 0x3f, 0xaa, 0xdf, 0xd0, 0x81, 0x54, 0xdb, 0x33, 0x91, 0xba, 0x26, 0x1b, 0xbc, 0xc6, 0x94, 0x5c, 0x9d, 0x7c, 0xa7, 0xbc, 0xec, 0x81, 0x06, 0x9d, 0x97, 0xda, 0x2a, 0xdc, 0x14, 0xf7, 0x5b, 0xf8, 0xf5, 0xf0, 0xdb, 0x77, 0xbd, 0x0e, 0x61, 0x85, 0xf2, 0x8d, 0xc8, 0xdf, 0x73, 0xa0, 0x09, 0xef, 0x0c, 0xb6, 0x67, 0x38, 0x48, 0xfc ],
-const [ 0xc4, 0xc4, 0x5c, 0xc2, 0x35, 0x59, 0x23, 0x17, 0x74, 0x1f, 0x8e, 0xe2, 0x32, 0xcf, 0xfc, 0x52, 0xe9, 0xcd, 0xd8, 0x7d, 0x6f, 0x66, 0xc9, 0xba, 0xcc, 0x56, 0x28, 0x4b, 0x49, 0x8e, 0xb7, 0x40, 0xc9, 0x34, 0x90, 0x97, 0x5c, 0xea, 0x5b, 0xa8, 0x12, 0x53, 0xc4, 0xc1, 0x0d, 0xd3, 0x2d, 0x0d, 0xda, 0x97, 0x9f, 0xba, 0x02, 0xd6, 0x07, 0x5a, 0xdb, 0x56, 0x9f, 0x8a, 0xa4, 0x31, 0xaa, 0xd2, 0xd1, 0xd9, 0x64, 0xcd, 0xa4, 0x5a, 0x39, 0x8a, 0xfd, 0xdf, 0x35, 0x31, 0x73, 0x78, 0xbc, 0xea, 0xa3, 0x1a, 0x7b, 0xfa, 0xc8, 0xe8, 0x9e, 0x2f, 0x8d, 0xb0, 0x43, 0x7f, 0x1f, 0xb9, 0x2f, 0xec, 0x85, 0xbc, 0xc0, 0xab, 0x34, 0x30, 0x23, 0x84, 0xde, 0xca, 0xc7, 0x7c, 0x8c, 0x45, 0x12, 0xb2, 0xec, 0x5f, 0x52, 0x87, 0xec, 0x24, 0xf6, 0x01, 0x87, 0x6e, 0xfe, 0x72, 0xdf, 0xad, 0xb0, 0x54 ],
-const [ 0x2c, 0x86, 0x98, 0x31, 0x69, 0x63, 0x81, 0x34, 0x68, 0x90, 0xbd, 0x7b, 0xe4, 0x6d, 0x79, 0x8e, 0x15, 0xdd, 0x5c, 0x88, 0x79, 0xfa, 0x6b, 0x6d, 0xd4, 0x07, 0x2a, 0xbe, 0x76, 0xa5, 0x04, 0x4b, 0xbc, 0x4a, 0xed, 0x49, 0xd9, 0xf0, 0x46, 0xa4, 0xd6, 0x0a, 0x01, 0x97, 0xd8, 0xbc, 0x05, 0x79, 0xa2, 0x4b, 0xd4, 0xda, 0x5a, 0xd3, 0x6b, 0xce, 0x90, 0x38, 0x6a, 0x89, 0x7c, 0x5e, 0x74, 0x2c, 0x87, 0x9d, 0xd9, 0xdf, 0x0e, 0x6f, 0x72, 0x20, 0x62, 0x6c, 0xcd, 0x5a, 0x13, 0x79, 0x8a, 0xba, 0x6e, 0x3c, 0x05, 0x3e, 0x44, 0xd3, 0x36, 0x0f, 0xed, 0xc5, 0xd5, 0x10, 0x8d, 0x38, 0xc1, 0xb7, 0x96, 0x65, 0xa2, 0x1c, 0x8e, 0x4a, 0xcd, 0x4f, 0x13, 0x9e, 0x69, 0xef, 0x1c, 0x0a, 0xd0, 0xf8, 0x81, 0x96, 0x38, 0xdd, 0xbe, 0x62, 0x93, 0xd7, 0xf4, 0x96, 0xb4, 0x7c, 0x30, 0x9b, 0xb2, 0x93 ],
-const [ 0x00, 0x8c, 0xfd, 0x9f, 0x49, 0x4b, 0x35, 0xd9, 0x37, 0xef, 0x3e, 0x1d, 0x8d, 0xbf, 0x95, 0x01, 0x5f, 0x12, 0x84, 0xbd, 0xd2, 0x06, 0xff, 0x82, 0x23, 0x75, 0xcd, 0x0d, 0xeb, 0x25, 0xe8, 0x7b, 0xa1, 0x3f, 0x25, 0x5f, 0x60, 0x03, 0x17, 0x12, 0xea, 0xb9, 0x31, 0x4a, 0xee, 0xeb, 0x2c, 0xee, 0x86, 0xd1, 0xa8, 0x29, 0x04, 0x0d, 0x16, 0xbe, 0xee, 0x99, 0xd5, 0x9b, 0x47, 0xfd, 0x9b, 0xb0, 0x10, 0xc5, 0x17, 0x01, 0x0f, 0x32, 0xd5, 0xfa, 0xcf, 0x30, 0x61, 0x03, 0xe8, 0x88, 0xaf, 0x55, 0x80, 0x57, 0xba, 0x0c, 0x12, 0xbf, 0x6c, 0x7d, 0x6f, 0xdc, 0xbe, 0xc9, 0x02, 0xf9, 0x20, 0xb3, 0x57, 0x04, 0x1b, 0xae, 0xdf, 0x40, 0x35, 0x3a, 0xed, 0x3a, 0x15, 0x71, 0x05, 0xfe, 0xe7, 0xdd, 0x56, 0x8a, 0x02, 0x8d, 0x85, 0x83, 0xc8, 0x68, 0xac, 0x27, 0xce, 0xc1, 0xa3, 0x83, 0x3e, 0x2b ],
-const [ 0x07, 0x12, 0x8b, 0xc2, 0xe3, 0x1d, 0xcb, 0x22, 0xaa, 0x5b, 0x9f, 0x3e, 0xd1, 0xb8, 0x52, 0x04, 0x1d, 0x36, 0xf0, 0x22, 0x16, 0x8f, 0x59, 0xca, 0xb9, 0x1c, 0x95, 0xb2, 0x6d, 0xf5, 0x67, 0x60, 0x38, 0x5a, 0x25, 0xa4, 0x33, 0x51, 0xc6, 0x66, 0x3b, 0x91, 0x3d, 0xa1, 0xea, 0x9f, 0x06, 0xb0, 0xc5, 0x37, 0xfe, 0xc9, 0xb7, 0xed, 0x77, 0xc7, 0xbf, 0x14, 0x8c, 0x2c, 0xe5, 0xdf, 0xb2, 0x66, 0x72, 0xc6, 0x90, 0x51, 0x60, 0x2b, 0x11, 0xfe, 0x10, 0x3e, 0xb7, 0xb3, 0x3b, 0x1e, 0x32, 0x32, 0x2b, 0x41, 0x31, 0x3e, 0x2b, 0x15, 0x78, 0x5c, 0x3c, 0xe7, 0x32, 0xd7, 0x09, 0x05, 0x89, 0x06, 0x1d, 0x1f, 0x75, 0xd1, 0x54, 0xf3, 0xd1, 0x72, 0x8f, 0x2a, 0xb4, 0x79, 0xac, 0x7c, 0xfe, 0x13, 0xb6, 0x1b, 0x31, 0x8b, 0x58, 0x4f, 0x83, 0x11, 0x98, 0x5d, 0x31, 0xbb, 0xc2, 0xae, 0x15, 0xc9 ],
-const [ 0x58, 0xdb, 0xed, 0x97, 0xe8, 0x35, 0xff, 0x41, 0x8e, 0x9b, 0x06, 0xc0, 0x94, 0x3d, 0x43, 0xe2, 0xe3, 0x72, 0x7e, 0xdf, 0x23, 0x50, 0x4b, 0x8b, 0x24, 0x79, 0x8c, 0xd0, 0x7d, 0x37, 0x37, 0x5c, 0x73, 0xcc, 0x59, 0x97, 0x1c, 0x03, 0x5b, 0xd8, 0xc4, 0x0b, 0x84, 0xd8, 0x8f, 0x85, 0xc0, 0x67, 0x60, 0xdc, 0xa0, 0x5d, 0xfa, 0xd5, 0xa1, 0xd4, 0x65, 0x67, 0xb1, 0x94, 0x94, 0xcc, 0xef, 0xcf, 0x44, 0xd8, 0xb3, 0x0f, 0x27, 0x8a, 0xce, 0x6c, 0x42, 0xe1, 0x13, 0x02, 0x93, 0xf0, 0x16, 0xa2, 0xf8, 0x35, 0x33, 0xc8, 0x4c, 0x27, 0xd2, 0xcd, 0xd3, 0x0e, 0xea, 0x5e, 0xd8, 0x17, 0xc4, 0x2d, 0x94, 0xa8, 0x02, 0xe6, 0x52, 0xf1, 0xdf, 0x65, 0xd1, 0xc4, 0xb8, 0x26, 0xea, 0xa6, 0xcc, 0xfd, 0x72, 0x26, 0x40, 0x07, 0x62, 0x6d, 0x66, 0xe0, 0x35, 0x17, 0x3e, 0x16, 0x92, 0x41, 0x3d, 0xde ],
-const [ 0x10, 0xae, 0x29, 0xe7, 0x8a, 0xbb, 0xd1, 0xc4, 0xba, 0x1a, 0x24, 0xbc, 0x41, 0x7b, 0x61, 0x22, 0xf5, 0xe9, 0xb8, 0x76, 0x28, 0xfd, 0xb0, 0x38, 0x2e, 0x51, 0xc6, 0xfa, 0x19, 0x38, 0x56, 0xb9, 0xc7, 0xac, 0xbf, 0x6d, 0x1f, 0x88, 0xc3, 0xdf, 0x97, 0xf8, 0x2c, 0xbb, 0xf9, 0x2d, 0xb5, 0xe6, 0x68, 0x55, 0x27, 0x11, 0x9e, 0xca, 0xc3, 0x8f, 0x77, 0x89, 0xe0, 0x63, 0xb3, 0xe7, 0xd5, 0x9e, 0xf7, 0x7f, 0x19, 0xe8, 0x16, 0x6f, 0xa9, 0x5c, 0x8f, 0xc4, 0xaa, 0x99, 0x57, 0x32, 0x50, 0x15, 0xd8, 0x09, 0xfe, 0xb5, 0x39, 0x64, 0xaf, 0x9b, 0xe0, 0xa3, 0x94, 0x40, 0x35, 0x1c, 0xfe, 0xc2, 0xa9, 0x0e, 0x7f, 0x7f, 0xf8, 0xd6, 0x4c, 0xe2, 0xaa, 0x66, 0xe6, 0x7d, 0xe0, 0xf2, 0xfa, 0x58, 0x4d, 0xec, 0x85, 0x89, 0x83, 0x33, 0x3b, 0x05, 0x70, 0x88, 0x2a, 0xb6, 0x28, 0x41, 0x9b, 0xce ],
-const [ 0x33, 0xfc, 0xb8, 0xef, 0xf4, 0x17, 0x86, 0x63, 0x44, 0x63, 0x2d, 0x0f, 0x9e, 0x81, 0x98, 0xc4, 0xdb, 0xee, 0x1c, 0x13, 0x9e, 0xda, 0xfe, 0xbd, 0xef, 0x37, 0x35, 0x6b, 0x26, 0x10, 0x72, 0x9f, 0x0b, 0x1c, 0x5e, 0xeb, 0x3b, 0x93, 0x22, 0x61, 0xce, 0x40, 0x2d, 0x4a, 0x36, 0xd8, 0x31, 0x1b, 0x6a, 0x8a, 0x6f, 0xa4, 0x45, 0xd7, 0x35, 0x8b, 0x28, 0xa4, 0xa5, 0xf9, 0xe7, 0x8d, 0xb7, 0x93, 0xe3, 0x7d, 0x82, 0xac, 0x73, 0x7b, 0xb7, 0xb8, 0x89, 0xc7, 0x6e, 0x04, 0x92, 0x26, 0x25, 0xa5, 0x9d, 0x7a, 0x05, 0xaf, 0xc0, 0x95, 0x68, 0xa7, 0xb7, 0x4f, 0x99, 0x3a, 0xcf, 0xd6, 0xda, 0x2e, 0x03, 0x46, 0xac, 0x9a, 0x64, 0x7a, 0x4a, 0x52, 0xbe, 0x21, 0x77, 0xa6, 0x78, 0x14, 0x79, 0x4c, 0xbc, 0xe7, 0x66, 0x9a, 0xd8, 0xbd, 0x9e, 0xf8, 0xe4, 0x61, 0x99, 0x96, 0xa5, 0x93, 0xe3, 0x5a ],
-const [ 0x90, 0xa0, 0x2b, 0xc5, 0xf2, 0x6d, 0x2c, 0xcc, 0x03, 0x0b, 0x15, 0x03, 0xc6, 0xc7, 0x12, 0xb8, 0xe6, 0xef, 0x4b, 0x41, 0xec, 0x33, 0xb8, 0x87, 0xb4, 0x51, 0x37, 0xc1, 0x22, 0xf2, 0xdc, 0x82, 0x11, 0xce, 0x88, 0xf6, 0x8c, 0x17, 0xbd, 0x68, 0x41, 0x15, 0xb0, 0x08, 0x32, 0x0e, 0xa0, 0xec, 0xae, 0x68, 0x67, 0x54, 0x80, 0x11, 0x4f, 0x32, 0x66, 0x1f, 0x26, 0xea, 0xc5, 0xb4, 0x95, 0x56, 0x9a, 0x25, 0xad, 0x0d, 0xb4, 0x5b, 0xc3, 0xe5, 0x21, 0x79, 0x7e, 0xb6, 0xe6, 0xbe, 0x2e, 0x61, 0xf3, 0xae, 0x5f, 0x11, 0x55, 0x6c, 0xaf, 0xc1, 0xae, 0x6b, 0xdc, 0xff, 0xe2, 0x45, 0x21, 0xef, 0x14, 0xeb, 0xc3, 0x92, 0xd1, 0xff, 0xe7, 0x48, 0x8a, 0x7e, 0xa6, 0x94, 0x48, 0xa2, 0x63, 0x20, 0x9b, 0x07, 0x5c, 0x01, 0xd3, 0x0c, 0x80, 0x3b, 0x73, 0x7c, 0x81, 0x88, 0xe3, 0x6e, 0x29, 0x55 ],
-const [ 0xae, 0x38, 0x97, 0xb9, 0x02, 0xc4, 0x99, 0xfa, 0xa6, 0xe5, 0x4f, 0xcf, 0x88, 0x64, 0xae, 0x65, 0xef, 0xf6, 0xe2, 0x49, 0x03, 0xb5, 0xef, 0x7e, 0x8f, 0xd1, 0x98, 0xcd, 0x06, 0x83, 0x80, 0x5c, 0xc4, 0x43, 0x8f, 0x82, 0x97, 0x3b, 0x97, 0xda, 0x7e, 0xfb, 0x37, 0x96, 0xb0, 0x6e, 0x00, 0x16, 0xe0, 0x0d, 0xd7, 0xba, 0xc0, 0x52, 0x9a, 0xf4, 0xc4, 0x70, 0x07, 0xa1, 0x28, 0x41, 0xd9, 0x99, 0x34, 0x80, 0x33, 0x84, 0xbf, 0x38, 0x42, 0xf0, 0xf2, 0x7c, 0x1f, 0xa1, 0x4e, 0x59, 0xf2, 0x28, 0xf0, 0x09, 0x5d, 0xb8, 0x14, 0x69, 0x18, 0x34, 0xd9, 0xae, 0xd8, 0x8c, 0x44, 0x53, 0x76, 0x4a, 0x86, 0x55, 0x4d, 0x68, 0x82, 0xa3, 0xe4, 0x65, 0x8a, 0xd0, 0xcd, 0x98, 0x69, 0x0c, 0xcc, 0xc3, 0xa7, 0x52, 0x3c, 0xeb, 0x08, 0xe3, 0xaf, 0x67, 0x56, 0xf2, 0xd5, 0x38, 0x60, 0xa1, 0x9f, 0x98 ],
-const [ 0x7a, 0xc3, 0x3a, 0xce, 0x5b, 0x4a, 0x6a, 0x32, 0x92, 0xb7, 0x2d, 0x0d, 0xd4, 0xbd, 0xf8, 0x53, 0x50, 0x9d, 0x9b, 0xdf, 0x87, 0xa5, 0xbc, 0x15, 0x5e, 0xf6, 0x84, 0xc6, 0x71, 0x8b, 0x98, 0x53, 0xab, 0x77, 0x4b, 0x16, 0x14, 0x6e, 0x12, 0xfd, 0xe9, 0x87, 0x38, 0x78, 0xf2, 0x40, 0xd2, 0x96, 0x10, 0xc3, 0xf6, 0x6b, 0x16, 0x68, 0x28, 0xb4, 0xd9, 0x7a, 0x15, 0xbe, 0x8b, 0x3e, 0x84, 0x83, 0x44, 0x31, 0x89, 0x16, 0xe2, 0x92, 0xfb, 0x42, 0x13, 0x20, 0x29, 0x6e, 0xb0, 0x25, 0xc9, 0xc4, 0x4d, 0xb3, 0x31, 0x93, 0x0e, 0x2e, 0xca, 0xf1, 0xbc, 0x0a, 0xc1, 0xa4, 0x17, 0xd6, 0xff, 0x43, 0x6e, 0x7a, 0x5c, 0x98, 0x6e, 0xbd, 0x0f, 0x49, 0x38, 0x0a, 0x69, 0xb7, 0xb6, 0x73, 0xc4, 0x27, 0x2e, 0xf6, 0xb6, 0x20, 0x17, 0xff, 0x8a, 0x13, 0x2c, 0x2f, 0xf0, 0x42, 0xc0, 0x5c, 0xf3, 0xda ],
-const [ 0x82, 0x00, 0x37, 0xb2, 0x51, 0xf2, 0x83, 0xa5, 0x2f, 0x6c, 0x19, 0x17, 0x7d, 0xda, 0x02, 0xfe, 0x24, 0x16, 0x06, 0x0f, 0xd5, 0x93, 0x15, 0x8e, 0x96, 0xdb, 0xe6, 0x64, 0x7a, 0x3b, 0xde, 0x72, 0xaf, 0xbc, 0x33, 0x25, 0xbe, 0x56, 0x51, 0x4a, 0x0f, 0x61, 0x7d, 0x24, 0xac, 0x4c, 0xb8, 0xbc, 0x46, 0x91, 0xe6, 0x79, 0x7d, 0xe8, 0x2f, 0xf0, 0x5c, 0xbc, 0xa6, 0xfd, 0x23, 0xdb, 0x28, 0x13, 0x4a, 0x71, 0x87, 0xd0, 0xc2, 0x37, 0xe8, 0xd5, 0x7e, 0xe8, 0x6a, 0xd4, 0x32, 0xf5, 0x09, 0xea, 0x5b, 0x79, 0xc1, 0x30, 0x7f, 0x6f, 0xf6, 0x8d, 0xb6, 0x23, 0x13, 0xce, 0x69, 0xe6, 0x72, 0xf8, 0x5a, 0x06, 0x7c, 0xdc, 0xe4, 0xfd, 0x11, 0xed, 0x85, 0xe9, 0x2a, 0x4f, 0x99, 0x3c, 0xbc, 0x30, 0x68, 0xb5, 0xe0, 0x5b, 0x63, 0x8f, 0x32, 0x0a, 0xab, 0xf8, 0x76, 0xfc, 0xd3, 0xc4, 0x82, 0xc8 ],
-const [ 0x09, 0x7a, 0xbb, 0xed, 0x69, 0xeb, 0xf2, 0xe5, 0xe8, 0x7e, 0x4e, 0xd5, 0x4f, 0xe3, 0x8d, 0x10, 0xf3, 0x2f, 0x40, 0x73, 0x96, 0x2e, 0xd2, 0x50, 0x88, 0xfa, 0xc6, 0xab, 0x11, 0xcc, 0x40, 0xa9, 0x14, 0x13, 0xc7, 0x45, 0xec, 0xc3, 0x49, 0x45, 0x9a, 0xf0, 0x5f, 0x6c, 0x22, 0x9b, 0xd3, 0xf2, 0x32, 0xcc, 0x60, 0x31, 0x05, 0xe1, 0xb8, 0xa1, 0x87, 0x25, 0xcc, 0x06, 0xba, 0xa4, 0x47, 0xe8, 0x58, 0x3e, 0x5b, 0x44, 0xba, 0xfb, 0xc1, 0x81, 0xf8, 0x9e, 0xfb, 0xa5, 0x52, 0x7d, 0xdd, 0xc9, 0xce, 0x8f, 0x4b, 0xcb, 0x23, 0xc7, 0x44, 0x42, 0xd6, 0xa0, 0x20, 0xb7, 0xa3, 0xfa, 0x15, 0x12, 0x1e, 0x24, 0x00, 0x52, 0x9a, 0x3a, 0x62, 0x81, 0x4a, 0xb1, 0xa9, 0xe7, 0xa6, 0x30, 0xb2, 0x7f, 0x10, 0xa1, 0x8b, 0xa7, 0xb8, 0x89, 0x7d, 0x1b, 0xbd, 0x94, 0x4a, 0x24, 0x95, 0x75, 0xb3, 0x0d ],
-const [ 0x3f, 0x61, 0xd4, 0xe1, 0xb7, 0xb2, 0x01, 0x45, 0x10, 0x54, 0x4a, 0x12, 0xed, 0x36, 0x7d, 0x37, 0x8f, 0x62, 0x04, 0xbc, 0xeb, 0xc8, 0xa4, 0xa8, 0x00, 0x3d, 0x6b, 0x23, 0x67, 0xc3, 0xe3, 0xd8, 0x2c, 0x0b, 0x8c, 0x9d, 0xdc, 0x38, 0x89, 0x56, 0xdf, 0xe6, 0x9a, 0x16, 0x08, 0x6b, 0x4a, 0x88, 0x6b, 0x5c, 0x6a, 0x8e, 0x6f, 0x54, 0xbd, 0x27, 0x24, 0xf0, 0xf5, 0x96, 0xd6, 0x1e, 0xde, 0xc1, 0xe2, 0x98, 0xda, 0xd7, 0xc8, 0xab, 0x8d, 0x35, 0x82, 0x3d, 0xd9, 0x8b, 0x14, 0x0e, 0x0d, 0x3a, 0x65, 0x3e, 0x59, 0x01, 0x4d, 0x10, 0x86, 0xd9, 0xef, 0xed, 0xe3, 0x1d, 0x49, 0xac, 0x83, 0xee, 0x09, 0x10, 0xa5, 0xd6, 0xa2, 0x92, 0x74, 0xab, 0xa0, 0x61, 0xf1, 0xb7, 0x38, 0xa8, 0x2d, 0x15, 0x24, 0x0f, 0xbb, 0x5e, 0xae, 0x84, 0x65, 0x86, 0x0a, 0x3b, 0x1e, 0x00, 0xe8, 0xf3, 0x38, 0x29 ],
-const [ 0x0f, 0x31, 0x99, 0x28, 0x94, 0xb4, 0x1d, 0xb6, 0xdd, 0x3e, 0x8c, 0x80, 0x7c, 0xac, 0xa2, 0x60, 0xb2, 0xca, 0x46, 0xb5, 0x32, 0x0e, 0x6b, 0xb5, 0x28, 0x87, 0x34, 0x05, 0x7a, 0x10, 0x5b, 0x87, 0x4e, 0xc9, 0xd3, 0x73, 0xcc, 0xc8, 0xac, 0xa9, 0x25, 0x0b, 0x38, 0x45, 0xd4, 0xb1, 0x6c, 0x74, 0x24, 0x6a, 0x88, 0x87, 0xf2, 0x2d, 0xfb, 0x46, 0xb4, 0x29, 0x80, 0x87, 0xba, 0xfd, 0x8e, 0xff, 0xb4, 0x2b, 0xef, 0x57, 0x75, 0xca, 0xae, 0x82, 0xf6, 0x7c, 0x37, 0x4f, 0x9e, 0xa0, 0xba, 0x3a, 0xc0, 0xc9, 0xd0, 0x88, 0x66, 0x6e, 0x61, 0x93, 0x4d, 0xe3, 0xc5, 0x62, 0x30, 0x87, 0x29, 0x7c, 0x49, 0x40, 0x35, 0xfe, 0x16, 0x24, 0xec, 0xec, 0x59, 0x79, 0xd3, 0xc5, 0x62, 0xe0, 0x55, 0x5a, 0x90, 0xcd, 0x66, 0xdf, 0x16, 0x3a, 0x67, 0x43, 0xfb, 0x9d, 0x49, 0xbd, 0x65, 0x17, 0xf6, 0xa8 ],
-const [ 0x8e, 0xea, 0xbc, 0xff, 0xbb, 0xe9, 0x68, 0x42, 0x5f, 0xf7, 0x95, 0xfa, 0xba, 0xa1, 0xa9, 0xc7, 0x7a, 0x2c, 0xe9, 0xa9, 0x31, 0x33, 0x8f, 0xc2, 0x05, 0x92, 0x1c, 0x5e, 0xaa, 0x83, 0xef, 0x30, 0x8d, 0x07, 0x17, 0xde, 0x52, 0x88, 0x66, 0xc1, 0x81, 0xbc, 0xc6, 0xe6, 0x7c, 0xcc, 0xd0, 0x58, 0xb5, 0xb6, 0x9b, 0xa1, 0x1d, 0xf0, 0xd2, 0x8e, 0xe0, 0x4e, 0x0a, 0x33, 0x4f, 0x25, 0x52, 0x2f, 0x1d, 0xb1, 0x0b, 0x31, 0xcf, 0xb4, 0xfa, 0xbb, 0x6e, 0x60, 0x9b, 0x26, 0x7f, 0x77, 0xb8, 0xe7, 0x35, 0xb1, 0x3b, 0x10, 0xe4, 0x5e, 0x41, 0x1a, 0xb9, 0x4c, 0x6f, 0xe1, 0xa9, 0xeb, 0x89, 0xf0, 0xa7, 0xaf, 0x40, 0xff, 0x1a, 0xb6, 0x4c, 0xba, 0x8e, 0xab, 0xbb, 0xc4, 0xa9, 0xea, 0x89, 0xfc, 0x61, 0xe4, 0x70, 0xff, 0x6d, 0xc5, 0x01, 0xee, 0xf9, 0x55, 0xf4, 0x71, 0x9e, 0x1c, 0xbd, 0xfb ],
-const [ 0x07, 0xe2, 0x3b, 0xa5, 0x79, 0x79, 0xf5, 0x3a, 0xad, 0x3b, 0xcd, 0x93, 0x41, 0xe6, 0xde, 0x6f, 0xc6, 0x4f, 0xf3, 0x77, 0x0c, 0x9c, 0xf0, 0x19, 0xa0, 0xb3, 0x6e, 0x93, 0x94, 0xf3, 0xa6, 0x4e, 0x7e, 0x21, 0x90, 0x6e, 0xc3, 0xa5, 0x4c, 0xa7, 0x16, 0xf6, 0xc0, 0x52, 0x3b, 0x53, 0x83, 0xc0, 0x11, 0xb4, 0xf9, 0xce, 0xcf, 0x00, 0xc0, 0xb9, 0x8e, 0x80, 0x4b, 0x34, 0x08, 0x94, 0xcd, 0xb8, 0x9f, 0xa4, 0x59, 0x1c, 0xa1, 0x5a, 0x47, 0x65, 0xca, 0x0e, 0xd9, 0xdf, 0x0a, 0x82, 0x1f, 0x6d, 0x89, 0xd0, 0x17, 0x1d, 0xe9, 0xa0, 0x19, 0xff, 0xcb, 0x9e, 0x72, 0x38, 0x94, 0x2c, 0x50, 0x52, 0x71, 0x53, 0xde, 0xd6, 0x98, 0x00, 0xaf, 0x1d, 0xd1, 0x6d, 0x60, 0x63, 0x35, 0xdd, 0x79, 0x1d, 0x36, 0x8c, 0x95, 0x8c, 0xe0, 0xe6, 0xc3, 0x93, 0x5f, 0xf7, 0x2b, 0xc6, 0xc0, 0x23, 0xf5, 0xc3 ],
-const [ 0x8c, 0x79, 0xf9, 0x11, 0xb3, 0x01, 0xa8, 0x71, 0x8c, 0xc4, 0xb1, 0x9a, 0x81, 0xd5, 0xf0, 0xcb, 0x63, 0x12, 0xd8, 0x7c, 0x5b, 0x4b, 0x07, 0x9e, 0x23, 0xa6, 0x1d, 0x24, 0x75, 0x41, 0xcf, 0xc2, 0xc4, 0x1a, 0x37, 0xf5, 0x2b, 0x2c, 0x6e, 0x43, 0xa3, 0xdb, 0x5d, 0xc4, 0x78, 0x92, 0xd0, 0xe1, 0xfe, 0xab, 0xcc, 0x5c, 0x80, 0x8f, 0x23, 0x91, 0x79, 0x1e, 0x45, 0xfb, 0x06, 0x51, 0x59, 0xf9, 0x9c, 0x1d, 0x8d, 0xd2, 0xf6, 0x9b, 0xaa, 0xf7, 0x52, 0x67, 0xeb, 0x89, 0xdd, 0x46, 0x0f, 0x1b, 0x6c, 0x0b, 0xad, 0xb9, 0x6c, 0xbb, 0xc8, 0x29, 0x1c, 0xef, 0xa3, 0x70, 0xfa, 0x7a, 0xd6, 0x99, 0x7a, 0x4c, 0xa2, 0xb1, 0xfe, 0x96, 0x82, 0x16, 0x03, 0x2f, 0x02, 0xf2, 0x98, 0x37, 0xd4, 0x02, 0x15, 0xfa, 0x21, 0x9c, 0x09, 0x16, 0x1d, 0xf0, 0x74, 0xe1, 0xde, 0x8e, 0x37, 0x05, 0x6e, 0x28 ],
-const [ 0x08, 0xdd, 0x4f, 0x5c, 0x7a, 0xfb, 0xdb, 0x43, 0x63, 0xa7, 0xdf, 0x60, 0xd2, 0x47, 0x77, 0x6d, 0x6c, 0x7c, 0x12, 0x2e, 0xb1, 0x55, 0xd4, 0x49, 0x81, 0xc2, 0x38, 0x58, 0xde, 0x4b, 0xfa, 0x3d, 0xf3, 0x01, 0x34, 0xb5, 0x55, 0xb5, 0xc7, 0x31, 0x8a, 0x69, 0xfc, 0xe1, 0xc8, 0x04, 0x6b, 0x11, 0xfe, 0x4a, 0x1c, 0xb8, 0x19, 0x0a, 0xed, 0x4e, 0x80, 0x99, 0x33, 0xdf, 0xe0, 0x80, 0xa4, 0x5e, 0x2f, 0x72, 0x75, 0x3b, 0xeb, 0x81, 0xbf, 0x37, 0xa3, 0x91, 0x27, 0x78, 0xb9, 0x0c, 0xbe, 0xd8, 0x66, 0xd7, 0x26, 0x83, 0xfe, 0x85, 0xf7, 0xc1, 0x76, 0xcb, 0x60, 0x10, 0x23, 0x34, 0x12, 0x76, 0xc4, 0x16, 0x59, 0x15, 0xc3, 0xc5, 0x8c, 0x00, 0xb8, 0x06, 0xa8, 0x4d, 0x2f, 0xc7, 0x38, 0x6c, 0xab, 0x0d, 0x78, 0xb7, 0xeb, 0x2d, 0xb9, 0x49, 0x6b, 0x3f, 0x07, 0x14, 0x2e, 0xd0, 0x0a, 0x2e ],
-const [ 0x72, 0x61, 0x81, 0x8a, 0xa2, 0x6a, 0xd3, 0x86, 0x14, 0x26, 0xaf, 0x03, 0xae, 0x6d, 0xdc, 0xba, 0x10, 0xf1, 0x92, 0x13, 0xd4, 0x73, 0xde, 0xf6, 0x14, 0x37, 0x47, 0xde, 0x2d, 0xb5, 0xb2, 0x30, 0xc3, 0x91, 0x83, 0xcc, 0x06, 0xcd, 0x05, 0xe1, 0x33, 0x3e, 0x0c, 0x05, 0x5d, 0x3c, 0xd9, 0x85, 0x6d, 0x9e, 0x3d, 0xf9, 0x68, 0xe6, 0x02, 0x1c, 0xf0, 0xb8, 0x86, 0xdb, 0x0e, 0x91, 0xa9, 0xac, 0x2e, 0xb5, 0xe9, 0x21, 0x6b, 0x69, 0xcc, 0xbd, 0x0d, 0x63, 0x7f, 0x06, 0x50, 0x7f, 0xbc, 0xdb, 0x68, 0xb3, 0xf0, 0x08, 0xc1, 0x45, 0x9e, 0x18, 0x8b, 0x3b, 0xfe, 0x6b, 0x76, 0x14, 0xeb, 0x88, 0xba, 0xb5, 0xfc, 0xb3, 0x5b, 0xa6, 0xf0, 0xc3, 0xab, 0x7e, 0x4f, 0x2e, 0x10, 0x9c, 0x4e, 0x66, 0x07, 0x18, 0xf3, 0x68, 0x69, 0xf9, 0x7b, 0x91, 0xee, 0xa9, 0xf9, 0xb4, 0xef, 0xa6, 0x3f, 0x6b ],
-const [ 0x72, 0x54, 0x00, 0x78, 0x46, 0x25, 0xdf, 0x22, 0xbb, 0xb8, 0x97, 0xe7, 0xdf, 0x2b, 0xdc, 0x80, 0x1f, 0x8e, 0x8c, 0x1f, 0x72, 0x47, 0x88, 0xf5, 0xd4, 0xb5, 0xc3, 0xf7, 0xf6, 0x14, 0x98, 0xe2, 0x34, 0xa1, 0x61, 0x7c, 0xc7, 0xfe, 0x45, 0x1d, 0x3c, 0xd7, 0x51, 0x6f, 0x24, 0xc6, 0xca, 0x72, 0x0e, 0x74, 0xc2, 0xc3, 0xb2, 0x02, 0xea, 0x1d, 0x6f, 0xa7, 0xa7, 0x20, 0xf8, 0x9a, 0x68, 0x51, 0x4a, 0x32, 0x36, 0x63, 0xe1, 0x4b, 0x8d, 0xb5, 0x2b, 0xed, 0x6a, 0x1b, 0x3d, 0x28, 0xa5, 0xe1, 0xc5, 0x42, 0x81, 0x0d, 0x3f, 0x15, 0x82, 0xe5, 0x6c, 0xb2, 0x7e, 0xb1, 0x00, 0x4a, 0xf7, 0xc2, 0x9b, 0x4f, 0xa8, 0xb3, 0xfb, 0xd6, 0x5e, 0xef, 0x70, 0x40, 0x09, 0x73, 0x90, 0x19, 0x13, 0xd6, 0x2b, 0x40, 0xf0, 0x86, 0x82, 0x48, 0xf7, 0x54, 0xb3, 0x1f, 0x70, 0x33, 0x78, 0xed, 0xee, 0x3c ],
-const [ 0xab, 0xc9, 0xcc, 0xdf, 0xbd, 0x92, 0xb6, 0x91, 0x9a, 0x5d, 0x6c, 0x6b, 0x5a, 0x76, 0x5a, 0x39, 0x66, 0x2e, 0xd9, 0x00, 0x80, 0xd3, 0x54, 0x92, 0x04, 0xdf, 0xaa, 0x5f, 0x6d, 0x70, 0xd4, 0x8e, 0x1a, 0xf8, 0xc8, 0x4d, 0x53, 0x36, 0x9d, 0x65, 0x87, 0x65, 0xef, 0x11, 0xd7, 0xb3, 0x85, 0x10, 0xd9, 0xf4, 0x31, 0xf9, 0x95, 0x98, 0xf8, 0xcf, 0xd4, 0xda, 0x73, 0xd5, 0x9b, 0x3b, 0x75, 0xa3, 0xf2, 0x2f, 0xef, 0x7a, 0xe9, 0x16, 0x10, 0xd5, 0xdd, 0x6d, 0xb0, 0x40, 0xf8, 0x46, 0xee, 0x6d, 0xf7, 0xf5, 0x18, 0x85, 0x30, 0x0d, 0xcc, 0xbc, 0xd3, 0x8b, 0x5d, 0x28, 0x70, 0x50, 0x78, 0xd3, 0xb9, 0xd5, 0x08, 0x0f, 0x8a, 0x1a, 0x56, 0x09, 0x26, 0xdf, 0x75, 0xa1, 0xc4, 0x17, 0xdd, 0x79, 0x4a, 0x9a, 0x56, 0x4c, 0x58, 0x1a, 0x18, 0x82, 0x88, 0x58, 0x30, 0x01, 0xf4, 0x97, 0x25, 0x45 ],
-const [ 0x72, 0x72, 0xef, 0xf0, 0xb2, 0x89, 0x64, 0xa1, 0xaa, 0xbf, 0xa0, 0x8f, 0x37, 0x52, 0x7a, 0x86, 0x07, 0x04, 0x3f, 0xed, 0xf3, 0x1b, 0xa6, 0xee, 0x8f, 0xad, 0x05, 0xd8, 0xff, 0x1a, 0xc4, 0xc1, 0x0c, 0xda, 0x12, 0x6f, 0x77, 0x79, 0xd8, 0x79, 0x8c, 0xdf, 0xeb, 0xa9, 0xfb, 0xd5, 0x86, 0xa5, 0xe4, 0xc5, 0xf7, 0xce, 0x31, 0xc1, 0x98, 0x69, 0x28, 0xc7, 0x01, 0xfd, 0x40, 0x44, 0x7c, 0xfb, 0x34, 0xd6, 0xba, 0xa4, 0x57, 0x56, 0xc4, 0x28, 0x27, 0x16, 0x33, 0x0b, 0x24, 0x67, 0xa4, 0xcd, 0xe3, 0x5f, 0x67, 0xca, 0x5e, 0xd9, 0x77, 0x5f, 0x8e, 0xbc, 0xaf, 0x4e, 0x3c, 0x81, 0x3a, 0x64, 0x14, 0xef, 0x4c, 0x59, 0xfb, 0x29, 0x0f, 0xf7, 0xa2, 0xeb, 0xe1, 0x7e, 0x5b, 0x11, 0xbc, 0x48, 0x2c, 0x59, 0xf5, 0xa9, 0x22, 0x69, 0x2a, 0x19, 0xe8, 0x14, 0x76, 0x95, 0x98, 0xd9, 0xe6, 0x42 ],
-const [ 0xc2, 0xc1, 0xad, 0x60, 0x4e, 0x21, 0xc2, 0xc8, 0x69, 0x19, 0x3d, 0x67, 0x97, 0xae, 0x65, 0x7e, 0xe7, 0x40, 0x64, 0x9c, 0x78, 0x05, 0xee, 0xb8, 0x3c, 0xb6, 0x23, 0x7d, 0xfc, 0x88, 0xb7, 0xe5, 0x9d, 0x5e, 0x50, 0x09, 0xa1, 0x3d, 0x2f, 0x38, 0xf1, 0x00, 0x13, 0x46, 0xd9, 0x4d, 0x5a, 0x26, 0x54, 0xc7, 0x6a, 0xbb, 0x8a, 0x85, 0x4f, 0xec, 0x97, 0xc4, 0xa5, 0xf7, 0x8e, 0xd8, 0xb9, 0x07, 0xbd, 0x69, 0xeb, 0x08, 0x33, 0xdb, 0x57, 0xba, 0x80, 0x0e, 0xb4, 0x04, 0xbc, 0x48, 0x7b, 0x8c, 0xcb, 0x6f, 0x4c, 0x84, 0xde, 0x7c, 0x8f, 0xc7, 0x3d, 0x2c, 0x57, 0x24, 0x45, 0xf8, 0x8b, 0xf9, 0xac, 0x48, 0x47, 0x04, 0x0d, 0xe4, 0x80, 0x77, 0xa0, 0xab, 0xe7, 0x4a, 0x48, 0x87, 0x10, 0xd5, 0xd4, 0xa0, 0xd4, 0x9e, 0x7e, 0xd0, 0xf4, 0x70, 0xb8, 0x58, 0xfe, 0xad, 0x29, 0xd1, 0x75, 0xe4 ],
-const [ 0xa2, 0x0f, 0x4c, 0xfd, 0xe1, 0xc1, 0x2a, 0xc3, 0xaa, 0x4d, 0x11, 0xb1, 0x3d, 0xc4, 0x59, 0x0a, 0xd9, 0x39, 0x5f, 0x0e, 0xd2, 0x80, 0x32, 0xd8, 0xe4, 0x36, 0x8f, 0x87, 0xc7, 0x01, 0x10, 0x9c, 0x03, 0x19, 0xa0, 0xa3, 0x06, 0x08, 0x32, 0x16, 0x74, 0xae, 0xb3, 0x7e, 0xbe, 0x87, 0x3c, 0xdb, 0xf6, 0x31, 0x8d, 0x46, 0xe2, 0x28, 0xb7, 0xd5, 0x4f, 0xd5, 0x18, 0xbf, 0xa7, 0xc7, 0x8c, 0xc0, 0xc6, 0x40, 0xe2, 0xbf, 0x0a, 0xf3, 0x8d, 0xaf, 0xa9, 0x0c, 0x9c, 0xb3, 0x48, 0x71, 0xed, 0x85, 0xc9, 0x47, 0x9d, 0x18, 0x64, 0xb9, 0xc2, 0x7c, 0xf9, 0xf4, 0x5d, 0x03, 0xa4, 0x76, 0x8a, 0xa2, 0x93, 0x89, 0xfa, 0x99, 0x14, 0x0a, 0xa3, 0x56, 0xf2, 0x6f, 0xb6, 0x97, 0x02, 0x09, 0xd2, 0xd0, 0xf9, 0x85, 0x77, 0xcc, 0x80, 0xb9, 0xbd, 0x96, 0x8b, 0x9e, 0x46, 0x9a, 0xe6, 0x98, 0x71, 0x08 ],
-const [ 0x3b, 0x8b, 0xcf, 0x1c, 0xdc, 0xd4, 0xb5, 0x67, 0x3d, 0x29, 0x8f, 0x8d, 0xf1, 0xe2, 0x26, 0xc1, 0xa7, 0xff, 0x4a, 0x25, 0x52, 0xbd, 0x15, 0xf5, 0x88, 0x67, 0x74, 0x02, 0x28, 0x6f, 0xe2, 0x63, 0x40, 0xbd, 0x77, 0x67, 0x2e, 0x47, 0x22, 0xce, 0x05, 0xe2, 0x33, 0x38, 0x32, 0x57, 0x1c, 0xdd, 0x5f, 0xba, 0x78, 0x7f, 0x97, 0xf7, 0x4c, 0x9d, 0xab, 0xae, 0x8d, 0xea, 0xd5, 0x41, 0xe3, 0xfd, 0x9c, 0x2b, 0xad, 0x4a, 0xf7, 0x93, 0x45, 0x51, 0xb5, 0x20, 0x85, 0x15, 0x1c, 0x10, 0x8a, 0xd0, 0xd1, 0x84, 0xb7, 0xe5, 0xf8, 0x1e, 0xfd, 0x16, 0x9b, 0xce, 0x5a, 0xf7, 0x50, 0xe9, 0xa0, 0xa2, 0x16, 0x7c, 0x78, 0xad, 0x81, 0xdf, 0xa6, 0x59, 0x17, 0x8d, 0x8f, 0x0c, 0xf9, 0x32, 0xf8, 0x02, 0xc6, 0x06, 0x10, 0x3f, 0xbc, 0x5a, 0xb1, 0xc8, 0x20, 0x70, 0xe3, 0x12, 0xe0, 0x90, 0xa2, 0xbb ],
-const [ 0x5a, 0x84, 0xd4, 0x65, 0x60, 0xd7, 0xec, 0x2d, 0x1a, 0xb6, 0x63, 0xc9, 0x84, 0x02, 0x2c, 0xb2, 0x43, 0x93, 0x46, 0x35, 0x81, 0xc5, 0x36, 0x1a, 0xf7, 0x33, 0xb4, 0x84, 0x4b, 0xc2, 0xa5, 0x18, 0x9d, 0xe2, 0x49, 0x61, 0x5d, 0x10, 0xb6, 0x73, 0x5f, 0x9f, 0x85, 0xcf, 0x31, 0xb9, 0xcb, 0x87, 0xac, 0xa1, 0x4b, 0xa3, 0xc9, 0x3a, 0xe9, 0xc2, 0xb6, 0xcd, 0x62, 0x05, 0x29, 0x07, 0x3b, 0x28, 0xf5, 0x41, 0xf7, 0xf2, 0xdb, 0x05, 0x8d, 0xd0, 0xa2, 0xcd, 0x19, 0xbd, 0x69, 0x0d, 0xd2, 0x64, 0x3d, 0x74, 0x3c, 0x89, 0xe7, 0x6f, 0x9f, 0xa5, 0x07, 0xf0, 0xb7, 0xd0, 0x67, 0x6d, 0xad, 0xe4, 0x89, 0x2b, 0x46, 0xe0, 0x82, 0xbc, 0x5b, 0x8a, 0x0b, 0xc7, 0x89, 0x59, 0xd6, 0x07, 0x29, 0x91, 0x1e, 0x96, 0x82, 0xb0, 0x82, 0x6c, 0x3e, 0x09, 0x13, 0x22, 0x1b, 0xaf, 0xac, 0xfc, 0xe3, 0x94 ],
-const [ 0x9e, 0xad, 0x42, 0x2c, 0x9e, 0x22, 0xb8, 0x85, 0xa4, 0x22, 0xc3, 0x7e, 0xa4, 0x9c, 0x27, 0x1f, 0x9d, 0x65, 0xf2, 0x8d, 0x29, 0x7f, 0xae, 0x76, 0x51, 0x9b, 0xdb, 0xaf, 0xa5, 0xdc, 0x9d, 0x1c, 0x8d, 0xde, 0xb1, 0xd1, 0xda, 0xf7, 0xa5, 0x76, 0xa0, 0xbd, 0x49, 0xf0, 0x48, 0xc8, 0x61, 0x3e, 0xe1, 0xb9, 0x9c, 0xa0, 0xb7, 0x7a, 0xca, 0xff, 0x27, 0xc8, 0x49, 0x89, 0xb1, 0xef, 0xc0, 0x9c, 0x4f, 0xd5, 0x10, 0xe5, 0x05, 0x3a, 0x88, 0xc9, 0xba, 0x3e, 0x59, 0x03, 0x46, 0x24, 0x49, 0x8f, 0xcc, 0x55, 0xab, 0xc7, 0x4a, 0xa8, 0x8e, 0xcd, 0x6e, 0xe0, 0x35, 0x28, 0xac, 0x77, 0xc7, 0xb2, 0x8d, 0x9a, 0x48, 0xb1, 0x4a, 0x74, 0xc8, 0x44, 0x99, 0xaf, 0xda, 0x01, 0xc7, 0x38, 0x48, 0xdc, 0x07, 0x43, 0x05, 0x4a, 0x0a, 0x90, 0x63, 0xa7, 0xcf, 0xec, 0x86, 0xd5, 0xbd, 0xfa, 0x19, 0x27 ],
-const [ 0x0f, 0x72, 0x51, 0xcc, 0x86, 0x87, 0xe3, 0xe0, 0x2c, 0x36, 0x3a, 0xf2, 0xed, 0x45, 0x51, 0x23, 0x3c, 0xf2, 0xbf, 0xbb, 0x10, 0xe5, 0xdd, 0xbe, 0x2c, 0x62, 0x2b, 0xc0, 0xa4, 0xc3, 0xf0, 0xf9, 0x9d, 0x26, 0x21, 0x9c, 0x54, 0x63, 0x84, 0x65, 0x62, 0x41, 0x15, 0x71, 0x3e, 0xe9, 0xa9, 0x53, 0x03, 0x9a, 0xd1, 0x64, 0x73, 0x9f, 0x01, 0x5a, 0x3c, 0x7e, 0xf2, 0x1d, 0x7b, 0x73, 0x44, 0xd6, 0x7f, 0x1c, 0x68, 0x48, 0xcf, 0x76, 0xbd, 0x63, 0x6e, 0x08, 0xf9, 0x16, 0x5d, 0x5e, 0xcb, 0x66, 0x62, 0xb9, 0xbf, 0xbd, 0x08, 0x05, 0x61, 0x84, 0xe7, 0x0b, 0xa5, 0xf3, 0x25, 0xe8, 0x86, 0x28, 0x3d, 0xbe, 0xee, 0x77, 0xff, 0xa9, 0xd6, 0x02, 0xd9, 0xf5, 0xae, 0x89, 0x54, 0x8e, 0xff, 0x83, 0xe1, 0xb7, 0x4f, 0x6d, 0xd6, 0xff, 0x45, 0x62, 0xb4, 0x71, 0x0d, 0xec, 0xab, 0x0c, 0xfe, 0x1a ],
-const [ 0xe4, 0x37, 0xf8, 0xb6, 0xec, 0xad, 0x31, 0x82, 0x67, 0xdd, 0xf8, 0x5d, 0x7e, 0xe0, 0x5b, 0x35, 0x38, 0x2e, 0x3d, 0x6b, 0x40, 0x56, 0x41, 0x29, 0xe9, 0xf3, 0xea, 0xf6, 0x6f, 0xdb, 0x00, 0x87, 0x80, 0x99, 0x35, 0xd8, 0xfa, 0x1e, 0x08, 0x7c, 0xf7, 0xb3, 0xea, 0x32, 0x07, 0x32, 0x9f, 0xb8, 0xbc, 0x76, 0xe8, 0xe4, 0x6c, 0x10, 0x5f, 0xf0, 0x32, 0x3b, 0xa2, 0x16, 0x36, 0x13, 0xb3, 0x5c, 0x2e, 0x01, 0x9f, 0xb2, 0x25, 0x7a, 0x5e, 0x3a, 0x7b, 0xe9, 0xfb, 0xe7, 0x2e, 0xe9, 0xf5, 0x49, 0x57, 0xb8, 0xe4, 0xa7, 0xf8, 0xe8, 0x5f, 0x4f, 0xf4, 0x58, 0x1e, 0x2a, 0x5f, 0x63, 0x5c, 0x93, 0xf8, 0x57, 0x7f, 0x69, 0xf4, 0x29, 0xfb, 0x63, 0xfe, 0x67, 0x74, 0xa4, 0x7b, 0x6d, 0x23, 0x90, 0x12, 0xdc, 0x7a, 0xdd, 0x6c, 0x48, 0x0b, 0xed, 0x38, 0x31, 0xa6, 0x5b, 0x73, 0x35, 0xc1, 0xd4 ],
-const [ 0x5a, 0xd2, 0x14, 0x01, 0x11, 0x8c, 0x89, 0xf3, 0x81, 0xa8, 0x34, 0x3b, 0x12, 0xfd, 0x5a, 0x96, 0xd9, 0x5d, 0x58, 0x7d, 0xbc, 0x26, 0xe7, 0x58, 0xd7, 0x14, 0x9e, 0xef, 0x1f, 0x59, 0xb9, 0x21, 0x45, 0xf0, 0x18, 0xd8, 0xde, 0x2e, 0x8b, 0x3c, 0xc0, 0x9a, 0x4c, 0x27, 0xaf, 0xfe, 0xcd, 0xd9, 0x39, 0xbe, 0xb4, 0xee, 0xde, 0x69, 0x24, 0x8d, 0x74, 0x8e, 0x3f, 0xe1, 0xca, 0xd1, 0xe9, 0xcd, 0x8c, 0x3d, 0xce, 0xdb, 0x66, 0xdc, 0xa6, 0x76, 0x6c, 0x85, 0xb8, 0x5a, 0xba, 0xf6, 0x9c, 0x48, 0x57, 0x23, 0x46, 0xfe, 0x60, 0xcd, 0x40, 0x66, 0x62, 0x55, 0x37, 0x0e, 0x07, 0xd3, 0xb9, 0xd8, 0xf5, 0x63, 0x3d, 0xf3, 0xf3, 0xbf, 0x64, 0x09, 0x4d, 0x13, 0x7e, 0xba, 0x7a, 0x0c, 0x50, 0x4a, 0xfd, 0x32, 0x15, 0x96, 0x89, 0x79, 0xc2, 0x4d, 0x68, 0x12, 0x8e, 0x5c, 0x1e, 0x87, 0xb2, 0xaa ],
-const [ 0xe3, 0xa9, 0x06, 0x51, 0xf7, 0x65, 0x2c, 0x0c, 0x7d, 0xea, 0x98, 0x1f, 0x81, 0x67, 0xc7, 0xe3, 0x87, 0x9f, 0x81, 0xcd, 0xc2, 0x49, 0xb1, 0xef, 0x86, 0xb7, 0x73, 0xc2, 0x00, 0xb7, 0x6f, 0x22, 0x25, 0xb7, 0x66, 0x9a, 0xe8, 0x2c, 0x0a, 0xe2, 0xb0, 0x34, 0x13, 0xa6, 0x09, 0x79, 0x8f, 0x89, 0x99, 0x59, 0x79, 0x6a, 0x57, 0x45, 0x8e, 0xe6, 0xf7, 0x67, 0x5c, 0x1e, 0xa8, 0x88, 0x9c, 0xba, 0x02, 0x30, 0xc1, 0x2e, 0x3a, 0x0f, 0xd1, 0x3b, 0x99, 0x9b, 0x74, 0xb9, 0x2c, 0xfb, 0x4b, 0x95, 0xbc, 0x24, 0x82, 0x16, 0x00, 0x42, 0xa9, 0x64, 0x12, 0x59, 0xbf, 0x4a, 0x20, 0x2c, 0x90, 0x3b, 0x64, 0x5e, 0x42, 0x93, 0x56, 0xd7, 0x2a, 0x20, 0x20, 0x69, 0xe4, 0xe1, 0x52, 0xb3, 0xa2, 0x0d, 0xd7, 0x46, 0xc4, 0x57, 0x28, 0x07, 0xa9, 0x71, 0xbf, 0xd5, 0xc5, 0xcf, 0xcf, 0x6b, 0xf4, 0xad ],
-const [ 0xb9, 0xb8, 0xf4, 0xc8, 0x24, 0x37, 0x7a, 0x6c, 0xd1, 0xa3, 0x1b, 0x1f, 0x3a, 0x21, 0xb5, 0x51, 0xdf, 0xc1, 0x6b, 0xaf, 0x8b, 0xb0, 0x02, 0xf4, 0xd8, 0xb0, 0x8b, 0x02, 0xf5, 0xc6, 0x43, 0x31, 0xa7, 0x32, 0xb7, 0xe7, 0x8e, 0xa4, 0x2c, 0x69, 0xaa, 0xad, 0x3d, 0xf0, 0x1e, 0x74, 0xc6, 0x00, 0x33, 0xaa, 0x01, 0xf5, 0x9f, 0xc0, 0xef, 0xdf, 0x08, 0x57, 0xfa, 0x8f, 0xc4, 0xf8, 0xd8, 0xf2, 0xe3, 0x05, 0xb2, 0x9e, 0x6f, 0xef, 0x86, 0xab, 0xf2, 0xaa, 0xca, 0xc4, 0x39, 0x5e, 0x52, 0x7d, 0x58, 0x60, 0x73, 0xe7, 0xee, 0x60, 0x69, 0x63, 0xaa, 0xe4, 0xf6, 0xb3, 0x0e, 0xf5, 0x4c, 0x57, 0x73, 0x17, 0x2d, 0x16, 0x4e, 0x7f, 0x51, 0xdb, 0xb1, 0x81, 0x08, 0xc2, 0x15, 0x48, 0x20, 0x73, 0x56, 0xc9, 0x09, 0xaf, 0xff, 0xf9, 0x37, 0x28, 0xc8, 0x3e, 0xc8, 0x96, 0x5d, 0x24, 0x67, 0x07 ],
-const [ 0x84, 0xc5, 0x14, 0xe4, 0x71, 0x41, 0x19, 0xa9, 0xe4, 0xe4, 0x7f, 0xcc, 0xb9, 0xe8, 0x24, 0x04, 0xdd, 0x5a, 0x78, 0x50, 0x60, 0xd6, 0x31, 0xde, 0xcc, 0x92, 0x40, 0x2c, 0xb6, 0x9d, 0x03, 0x6d, 0x92, 0x69, 0xbc, 0x2e, 0xcc, 0x88, 0x42, 0x39, 0x14, 0xb3, 0xf6, 0xb9, 0xf9, 0x10, 0xf9, 0xa0, 0xb9, 0xb5, 0x9c, 0x46, 0x57, 0x68, 0x18, 0x52, 0xef, 0xa8, 0x80, 0xde, 0x47, 0xf2, 0xf3, 0xd6, 0xa6, 0x3d, 0x16, 0xa1, 0xe9, 0xc7, 0xc1, 0x04, 0xd3, 0x13, 0xf9, 0x43, 0xa5, 0x32, 0x1f, 0x89, 0xee, 0x43, 0x66, 0x89, 0xa5, 0x36, 0x8b, 0x66, 0x75, 0xd5, 0xc0, 0xd0, 0x58, 0x04, 0xe9, 0x71, 0x67, 0x47, 0x0a, 0x87, 0xf1, 0x86, 0x00, 0xd2, 0xca, 0x0d, 0x70, 0xb0, 0xe5, 0xd7, 0xfe, 0x87, 0x25, 0x0c, 0xbf, 0x63, 0x71, 0xc8, 0xf0, 0xe0, 0x07, 0x1e, 0xe8, 0x4b, 0x12, 0x5d, 0x4b, 0x04 ],
-const [ 0x3d, 0x31, 0xcf, 0x76, 0x28, 0x8b, 0xa7, 0x77, 0xd0, 0xda, 0x29, 0xe9, 0xce, 0x21, 0xd6, 0x9d, 0xc6, 0x41, 0x9c, 0x15, 0x3e, 0x7a, 0x4d, 0x2e, 0xb0, 0x2f, 0x50, 0x01, 0xdd, 0xe9, 0x97, 0x0c, 0x65, 0x9f, 0xd0, 0x8d, 0x95, 0x35, 0xe0, 0x2f, 0x80, 0x42, 0x8d, 0xe8, 0x51, 0x16, 0x7a, 0x22, 0xdf, 0xfc, 0x59, 0x19, 0x82, 0xbc, 0x5c, 0x84, 0x26, 0x64, 0xec, 0x77, 0x9d, 0x48, 0x9e, 0x88, 0x3a, 0x48, 0x63, 0x31, 0x9b, 0x51, 0xff, 0x75, 0xc6, 0x27, 0xbc, 0xc6, 0x78, 0x61, 0x5f, 0x27, 0xb9, 0xb5, 0x5b, 0x8e, 0xb4, 0x75, 0x45, 0x8c, 0xc6, 0x5a, 0x88, 0x2f, 0xd5, 0x81, 0x5a, 0x28, 0xe3, 0xb3, 0xee, 0x29, 0xe2, 0xe9, 0xeb, 0x91, 0xca, 0x0f, 0x1e, 0x4b, 0xea, 0x09, 0x6b, 0xf3, 0x7b, 0xf4, 0x0a, 0x3b, 0x7b, 0xae, 0xf0, 0x8e, 0xb9, 0x98, 0x8a, 0xf3, 0x2c, 0x9a, 0xb1, 0x33 ],
-const [ 0x4b, 0xbb, 0x75, 0x96, 0xf1, 0x9a, 0xa5, 0xde, 0xd4, 0x01, 0x7a, 0x81, 0xca, 0xc2, 0x8e, 0x7d, 0x6a, 0x68, 0x52, 0x53, 0xc0, 0x1a, 0x5e, 0x0c, 0x45, 0xc2, 0x05, 0x7a, 0x0d, 0x6e, 0x2d, 0xc0, 0x43, 0xf6, 0x5d, 0x15, 0xd3, 0xdf, 0x18, 0xc4, 0x66, 0x7f, 0x6a, 0x77, 0x93, 0x62, 0xc0, 0xb6, 0x53, 0xed, 0xfd, 0xab, 0xb6, 0x41, 0xc9, 0x28, 0xd5, 0x62, 0x2c, 0xeb, 0x08, 0x99, 0x5d, 0x20, 0x59, 0x16, 0xd4, 0x27, 0x38, 0xda, 0xa6, 0x98, 0x70, 0xd4, 0x12, 0x84, 0x59, 0x4a, 0x57, 0xfe, 0x4f, 0x7b, 0xc9, 0xda, 0x64, 0x83, 0x24, 0xb5, 0x52, 0x7e, 0x20, 0x36, 0xb4, 0xf0, 0x46, 0x92, 0x75, 0x65, 0x01, 0x56, 0x88, 0x54, 0xf8, 0x61, 0xd9, 0x49, 0x9b, 0x2f, 0x84, 0x43, 0xfc, 0x5e, 0x46, 0x5b, 0xe1, 0x6a, 0x30, 0xa7, 0x17, 0xbc, 0xa3, 0x5e, 0x09, 0xe3, 0x78, 0x3d, 0x91, 0x21 ],
-const [ 0xf4, 0xa6, 0x5e, 0xbf, 0x30, 0x90, 0x0a, 0xb9, 0x86, 0x04, 0x90, 0xc7, 0xbd, 0x7c, 0x0c, 0xe4, 0xf4, 0x6c, 0xb5, 0xbb, 0x38, 0x83, 0x0f, 0x10, 0x52, 0x2e, 0x62, 0x5c, 0xe2, 0x5f, 0x6a, 0xb7, 0xb2, 0x8c, 0x50, 0xfb, 0x44, 0xfa, 0xd9, 0x27, 0xad, 0x3b, 0xde, 0x01, 0xa6, 0xf6, 0xfc, 0x00, 0xe1, 0xe6, 0x8c, 0x68, 0x99, 0x25, 0xd5, 0xb7, 0x6d, 0xab, 0x81, 0x40, 0x6e, 0x11, 0x4e, 0x16, 0x77, 0x9b, 0x06, 0x2b, 0xbd, 0x76, 0xb1, 0xb9, 0xa6, 0x3e, 0x09, 0xe1, 0xdf, 0xc4, 0x2e, 0x93, 0xa9, 0x0d, 0x9b, 0xad, 0x73, 0x9e, 0x59, 0x67, 0xae, 0xf6, 0x72, 0xee, 0xdd, 0x5d, 0xa9, 0x4f, 0xeb, 0xdc, 0x68, 0x97, 0xc2, 0x8d, 0xfa, 0x38, 0x19, 0x15, 0xfa, 0xaf, 0x8d, 0x6e, 0x0c, 0x64, 0xf4, 0xea, 0xcb, 0xd2, 0xee, 0x74, 0x02, 0xe7, 0xbc, 0x19, 0x1e, 0xae, 0x56, 0xc8, 0xe3, 0x2b ],
-const [ 0x61, 0xcb, 0x9e, 0x1f, 0x1e, 0x4b, 0x3a, 0x3b, 0x3b, 0xdf, 0xf8, 0xcd, 0x5f, 0x24, 0x56, 0x6b, 0x98, 0x7f, 0x75, 0xc8, 0xa0, 0x53, 0x77, 0x85, 0x5f, 0x77, 0x2b, 0x49, 0xb0, 0xe7, 0xec, 0x13, 0x68, 0xb9, 0xc6, 0xcf, 0x95, 0x53, 0xdb, 0x28, 0x03, 0xdc, 0x05, 0x9e, 0x05, 0xf0, 0xbd, 0xd8, 0x71, 0x98, 0x3c, 0x3b, 0xed, 0x79, 0xdf, 0xbb, 0x69, 0x4b, 0xd0, 0xf1, 0xed, 0x8d, 0xe3, 0x6e, 0x95, 0x77, 0xbe, 0x50, 0xda, 0x31, 0x3d, 0x13, 0x12, 0x42, 0x15, 0xa9, 0x3a, 0x4b, 0xb7, 0xcc, 0xf4, 0xf5, 0x77, 0x93, 0xcc, 0x28, 0xed, 0x43, 0xbf, 0x7e, 0x9b, 0x68, 0xfe, 0xf7, 0xd1, 0x25, 0xef, 0xee, 0xce, 0xc9, 0x75, 0x4b, 0x28, 0xa2, 0x71, 0xfb, 0x6e, 0x16, 0x89, 0x9d, 0x0b, 0xef, 0x28, 0x7e, 0x6d, 0xf7, 0xc5, 0xc8, 0x67, 0xc5, 0x69, 0xf6, 0xd4, 0xd6, 0x6b, 0x8b, 0x7e, 0xe0 ],
-const [ 0x9a, 0xb4, 0x66, 0x7b, 0x2d, 0xf7, 0xeb, 0x4b, 0xe8, 0x86, 0x3a, 0xa5, 0x3e, 0x9b, 0xf9, 0xaf, 0x8b, 0xae, 0x0f, 0xc0, 0x9d, 0xe9, 0x4f, 0x73, 0x73, 0xdc, 0x56, 0xfa, 0x44, 0x72, 0xb6, 0xb5, 0xc4, 0x23, 0x54, 0x03, 0xa2, 0x6c, 0x0e, 0x59, 0x55, 0x7c, 0xa1, 0x91, 0x18, 0x31, 0xca, 0x84, 0x33, 0x42, 0xac, 0xda, 0x7d, 0xbe, 0x72, 0x21, 0x1f, 0xb5, 0x35, 0x1d, 0x9a, 0x34, 0x20, 0x5f, 0x0c, 0x77, 0xd2, 0x19, 0xaf, 0x5b, 0x03, 0x31, 0xa2, 0x12, 0x6b, 0x94, 0xec, 0x1a, 0xdf, 0xcd, 0xbe, 0x70, 0xbe, 0xd6, 0xf8, 0x01, 0x8b, 0x2e, 0xef, 0x61, 0xdb, 0x2b, 0x6d, 0xbf, 0x72, 0x92, 0xfa, 0x19, 0xa9, 0x65, 0x5a, 0xac, 0x13, 0xfc, 0x57, 0xaf, 0x5f, 0x57, 0xc1, 0x40, 0x80, 0xb3, 0xb2, 0x9f, 0x0c, 0x5b, 0x16, 0x9a, 0xe2, 0xc1, 0x6b, 0x48, 0x10, 0xcd, 0xc6, 0xfa, 0xf4, 0x75 ],
-const [ 0xa1, 0xc7, 0xf3, 0xc9, 0xa7, 0x9b, 0x07, 0x1b, 0x49, 0x30, 0x1a, 0xac, 0x75, 0x4a, 0x2e, 0x89, 0xd9, 0x71, 0xfd, 0x90, 0xa7, 0xa2, 0xdf, 0xc9, 0x95, 0x44, 0xef, 0xfa, 0x29, 0x5d, 0x69, 0x75, 0x33, 0x06, 0x57, 0x35, 0x9b, 0x1d, 0x6d, 0x29, 0x5c, 0x39, 0x31, 0xd0, 0xd1, 0xe3, 0x5f, 0x06, 0x30, 0x03, 0x8b, 0x1e, 0x54, 0x98, 0x08, 0x30, 0xbf, 0xac, 0x09, 0xb4, 0xdf, 0x88, 0x06, 0x50, 0x90, 0x24, 0x61, 0xef, 0xe3, 0xe1, 0x4a, 0x13, 0x1d, 0x7a, 0xe0, 0x6c, 0x03, 0x38, 0x98, 0xa9, 0x55, 0x66, 0xe3, 0x8e, 0x99, 0x05, 0x0b, 0x47, 0x19, 0xc1, 0x5e, 0xfc, 0x2f, 0x23, 0x8f, 0xa5, 0xc0, 0x07, 0x59, 0x20, 0x07, 0x51, 0x65, 0x80, 0x94, 0xdc, 0x6e, 0xa9, 0x94, 0xb3, 0xa3, 0x1a, 0x52, 0x84, 0x4d, 0x09, 0xfe, 0x51, 0xb1, 0xb5, 0xae, 0x69, 0x38, 0xf8, 0xa2, 0x97, 0xcd, 0x1b ],
-const [ 0x8c, 0x53, 0x37, 0xd7, 0x43, 0x88, 0xcb, 0xbf, 0xe0, 0xf4, 0x00, 0xf4, 0x03, 0x87, 0x96, 0x87, 0x88, 0x7b, 0x6b, 0x2f, 0x5c, 0xdd, 0xef, 0xeb, 0x8f, 0x49, 0xd8, 0xe9, 0xab, 0xf5, 0x17, 0xa7, 0x45, 0xf0, 0x0a, 0x58, 0xd1, 0xac, 0xf3, 0x89, 0xbb, 0xbb, 0xa9, 0x04, 0xb3, 0xd6, 0x8d, 0xf4, 0x48, 0x23, 0xc0, 0x4b, 0xb8, 0xb8, 0x93, 0x61, 0x06, 0x5b, 0x3f, 0xdd, 0x4e, 0x8b, 0xd7, 0xd9, 0x56, 0xc5, 0x7a, 0x41, 0x65, 0x00, 0xcd, 0x7c, 0x58, 0x7a, 0xa8, 0x4f, 0xf2, 0xb6, 0x10, 0xfe, 0x74, 0xc5, 0x66, 0xb4, 0x6d, 0xc6, 0xdd, 0x24, 0xd4, 0xa9, 0x32, 0x71, 0x54, 0x38, 0x97, 0x4b, 0xe7, 0x57, 0xf0, 0x5c, 0xa6, 0x8a, 0x41, 0xe2, 0xe0, 0xb9, 0x67, 0x9d, 0x69, 0x30, 0x07, 0xeb, 0x34, 0xea, 0xc5, 0x32, 0x24, 0x0f, 0xb6, 0x7e, 0x20, 0xbb, 0x17, 0x6b, 0x66, 0x01, 0x3f, 0x46 ],
-const [ 0xb9, 0xb5, 0x07, 0x74, 0x71, 0x5e, 0xde, 0xb6, 0x94, 0x78, 0x42, 0xae, 0x80, 0x7d, 0x18, 0xbe, 0xd9, 0x11, 0xc4, 0xc9, 0xce, 0x34, 0x91, 0xfd, 0x9e, 0xbb, 0x53, 0xf0, 0x5b, 0x01, 0x4b, 0xef, 0xef, 0xda, 0x4a, 0x93, 0x5c, 0xc8, 0x19, 0x94, 0x48, 0x72, 0x19, 0xe2, 0xb8, 0x51, 0x27, 0xf2, 0x1c, 0xad, 0xc2, 0x56, 0x8c, 0xc8, 0x70, 0x91, 0x51, 0x59, 0x5d, 0x29, 0xa7, 0x3b, 0x46, 0xfe, 0xc1, 0x67, 0x95, 0xd9, 0x0e, 0x20, 0xce, 0x48, 0xbb, 0x6d, 0x29, 0xaa, 0x79, 0xcc, 0x81, 0x86, 0x80, 0x25, 0x6c, 0x21, 0xd3, 0xfd, 0xac, 0x4f, 0xc6, 0xec, 0xc6, 0x89, 0xbe, 0x51, 0xf0, 0x40, 0x39, 0x44, 0x30, 0x71, 0x0e, 0xcc, 0xc3, 0x7a, 0xf5, 0x52, 0xbc, 0x2c, 0x49, 0x56, 0xed, 0x21, 0x0d, 0x61, 0x0a, 0x4f, 0x2e, 0x3b, 0x0c, 0xde, 0x07, 0x5d, 0xd4, 0x37, 0x2a, 0xa9, 0x11, 0x5e ],
-const [ 0x15, 0xb1, 0x86, 0xbc, 0xe7, 0x34, 0x56, 0x81, 0x3d, 0x85, 0xa5, 0x0e, 0x68, 0xc4, 0xe2, 0xa5, 0xfa, 0x4e, 0xc9, 0xa3, 0x28, 0x8f, 0xe5, 0xf7, 0x73, 0x17, 0x53, 0xd8, 0x88, 0xef, 0xca, 0xb8, 0x64, 0x2d, 0xd8, 0x73, 0xbb, 0xc6, 0x6e, 0xcd, 0x9b, 0xa4, 0x9f, 0x1b, 0x4d, 0xf8, 0xa5, 0x40, 0x7c, 0xd2, 0x25, 0xdb, 0x98, 0xef, 0xb4, 0xbf, 0x7d, 0xd1, 0x99, 0xa4, 0x50, 0x15, 0xd4, 0x1c, 0xaa, 0x02, 0x60, 0xc8, 0xf9, 0x5e, 0xb6, 0xcb, 0x23, 0x85, 0x92, 0x7f, 0x6c, 0xbc, 0xf9, 0x67, 0x99, 0xc2, 0x7b, 0x65, 0x55, 0xa8, 0xb6, 0x2d, 0xd5, 0xe3, 0x1b, 0xfa, 0xb8, 0xa0, 0xf5, 0x80, 0x31, 0x57, 0xa6, 0x21, 0x67, 0xa3, 0x34, 0x63, 0x1c, 0x51, 0x05, 0xa2, 0x8d, 0xb6, 0xe7, 0x02, 0x9a, 0x46, 0x54, 0xa8, 0x27, 0x63, 0xf3, 0x2a, 0xc2, 0x73, 0x61, 0x43, 0x86, 0x35, 0x32, 0xcc ],
-const [ 0x59, 0x67, 0xeb, 0xc2, 0xc8, 0x07, 0x85, 0xc8, 0x7c, 0xda, 0x84, 0xa8, 0x88, 0xf4, 0xba, 0xb9, 0x73, 0x12, 0xff, 0x49, 0xe9, 0x81, 0x81, 0x9a, 0xb1, 0x3b, 0x5c, 0x2a, 0xdf, 0x54, 0x6b, 0x37, 0x4b, 0x94, 0x5d, 0x83, 0x41, 0x66, 0x0b, 0x55, 0x7a, 0xf0, 0x08, 0xc0, 0x4b, 0x84, 0x7a, 0x27, 0x1d, 0x37, 0x29, 0x01, 0x1d, 0xcf, 0xd6, 0xda, 0x35, 0xe3, 0xce, 0x9a, 0x3a, 0x3d, 0xbf, 0x0a, 0x67, 0x83, 0xc9, 0x94, 0x0a, 0x17, 0xd8, 0x4b, 0x7d, 0x3b, 0x32, 0x2b, 0x58, 0x79, 0x4c, 0xa1, 0xe5, 0x42, 0xe2, 0x4e, 0xd4, 0xd5, 0x46, 0x08, 0x30, 0x62, 0xf9, 0x21, 0x92, 0x6f, 0x78, 0xec, 0x95, 0x7c, 0x58, 0x7e, 0x89, 0xe2, 0x95, 0xb2, 0x6c, 0x01, 0x28, 0x70, 0x16, 0x9a, 0xd7, 0x2e, 0xb3, 0x7a, 0x51, 0xb6, 0x76, 0x59, 0x7a, 0x2a, 0x8c, 0x01, 0x04, 0x46, 0x4f, 0xb3, 0x3f, 0xe6 ],
-const [ 0xec, 0xc7, 0x14, 0xbd, 0x81, 0xaa, 0xc0, 0x00, 0x2a, 0x98, 0x7a, 0x81, 0xd3, 0x5d, 0x32, 0x88, 0x72, 0xa2, 0x3a, 0x2e, 0x8f, 0x63, 0xec, 0x6e, 0x03, 0xa4, 0x93, 0x7f, 0x00, 0x60, 0x89, 0x61, 0x51, 0xc3, 0x9c, 0xb7, 0xe3, 0x99, 0xb6, 0xd4, 0x85, 0x05, 0xbe, 0x18, 0xec, 0x76, 0xb9, 0x7d, 0xfa, 0xd7, 0x35, 0x6d, 0x40, 0x06, 0xe7, 0xd7, 0xc1, 0x88, 0x93, 0x81, 0xf8, 0x7b, 0x2c, 0xa0, 0x1d, 0xcb, 0x3d, 0xa6, 0xa5, 0xa9, 0x87, 0x5b, 0x08, 0x39, 0xeb, 0x2f, 0xc6, 0x8b, 0x8b, 0xce, 0xac, 0xcd, 0x2d, 0xf6, 0x53, 0xbf, 0xe0, 0x85, 0xeb, 0x67, 0xe1, 0xd7, 0x36, 0x05, 0xbf, 0x4e, 0xd7, 0x49, 0xbe, 0x32, 0xcd, 0xc4, 0x79, 0xbc, 0x3b, 0x9d, 0xcc, 0x6d, 0x6a, 0x85, 0xf1, 0xa4, 0x10, 0xec, 0xe9, 0x70, 0xd3, 0x75, 0x1e, 0xa3, 0x09, 0xa8, 0x46, 0x28, 0xc2, 0xe8, 0x8a, 0x96 ],
-const [ 0xf7, 0x53, 0xf3, 0xe9, 0xb4, 0xbd, 0x18, 0x95, 0xa2, 0x59, 0x49, 0x2b, 0xa1, 0x60, 0x71, 0x3f, 0x00, 0xac, 0x8e, 0x24, 0xdb, 0xbf, 0xab, 0x0d, 0xa7, 0x07, 0x0e, 0x72, 0x0b, 0x61, 0xb2, 0xb6, 0xf1, 0xdb, 0xf8, 0x06, 0xde, 0xbe, 0x99, 0x84, 0x7e, 0xcc, 0xdf, 0xa5, 0x84, 0xc6, 0x15, 0xd7, 0xb1, 0x31, 0x3c, 0x68, 0x31, 0x5a, 0xff, 0xa3, 0x2e, 0x98, 0xe9, 0x3c, 0xa0, 0xd1, 0xd6, 0xee, 0x62, 0x3f, 0xa7, 0x62, 0x8b, 0x74, 0x3a, 0x53, 0xfb, 0x9c, 0x9a, 0xf0, 0x34, 0x03, 0x72, 0x81, 0x6c, 0xd7, 0xc8, 0x4e, 0xe0, 0x2e, 0xe7, 0xbc, 0x6a, 0x4a, 0x9d, 0xba, 0x56, 0x1c, 0xa7, 0x5b, 0x72, 0x08, 0x6a, 0xc4, 0x64, 0xe8, 0xe4, 0x49, 0x40, 0x53, 0xe1, 0xd3, 0x5a, 0x1f, 0x72, 0x85, 0x59, 0x24, 0x9b, 0x9f, 0x8d, 0x43, 0x4c, 0xa2, 0x83, 0xa8, 0x92, 0xb5, 0xd6, 0x4b, 0x0f, 0x47 ],
-const [ 0x4e, 0x7c, 0x66, 0x7a, 0x38, 0xbe, 0xe0, 0x8a, 0xc5, 0x1a, 0xfd, 0xe3, 0xf2, 0x2f, 0x2e, 0x38, 0x73, 0x6a, 0x7f, 0x7d, 0x3f, 0x7b, 0x32, 0xf9, 0x4e, 0x05, 0xa7, 0x9b, 0xa1, 0x9a, 0x80, 0x91, 0x84, 0xe6, 0x02, 0x17, 0x10, 0x2a, 0xbd, 0x8d, 0xf3, 0xed, 0x6f, 0xcd, 0x74, 0xee, 0x26, 0xbb, 0xb1, 0x5c, 0xa5, 0x1e, 0x2b, 0x49, 0x09, 0xae, 0x85, 0x5d, 0xac, 0x6d, 0x89, 0xc7, 0x4a, 0x3b, 0x6c, 0x79, 0x62, 0xa5, 0x53, 0x95, 0xdf, 0xff, 0x15, 0x22, 0xf8, 0xb2, 0x43, 0x04, 0x55, 0xd6, 0x66, 0x2b, 0x73, 0x04, 0x87, 0x0a, 0x49, 0x65, 0xf5, 0x4b, 0x2c, 0x0f, 0x42, 0xc1, 0xf0, 0x92, 0x8f, 0x9e, 0x50, 0xcd, 0x09, 0xe6, 0x8f, 0x07, 0xb4, 0x23, 0x60, 0x3b, 0x68, 0x5b, 0x04, 0xb2, 0x19, 0x3f, 0xb2, 0xd7, 0x5b, 0xa5, 0x3b, 0x48, 0x24, 0x38, 0xee, 0x29, 0xd4, 0x6e, 0xb9, 0xbd ],
-const [ 0x7a, 0x00, 0x0b, 0x03, 0xfc, 0xe1, 0x76, 0xde, 0x62, 0x0f, 0x0d, 0xf2, 0xd9, 0xd3, 0x88, 0x6b, 0xee, 0x54, 0x01, 0x4d, 0xa4, 0x5e, 0xa6, 0x5b, 0xc3, 0x61, 0xb1, 0x38, 0x74, 0xbd, 0x9a, 0xcc, 0x0b, 0x3c, 0x8a, 0xe9, 0x24, 0xe0, 0x14, 0x2e, 0xf1, 0xe0, 0x20, 0x2c, 0xd2, 0xed, 0x27, 0xc8, 0x26, 0xb9, 0xa6, 0xe0, 0x62, 0xba, 0xcc, 0x32, 0x60, 0x2c, 0x76, 0x79, 0xf9, 0x55, 0x5e, 0xd8, 0xd5, 0x0c, 0x8f, 0x7c, 0x82, 0x7c, 0x1d, 0x7e, 0xc4, 0x26, 0x12, 0x06, 0x2c, 0x25, 0xab, 0xb6, 0xec, 0xb6, 0xc5, 0x46, 0xea, 0xf7, 0x92, 0x6b, 0x13, 0xef, 0x90, 0xfe, 0xf2, 0xcf, 0xbc, 0x5a, 0x81, 0x77, 0x03, 0x06, 0x3f, 0x3c, 0xf9, 0x94, 0x82, 0xe9, 0xcd, 0xc8, 0x0f, 0x03, 0x7d, 0xfd, 0xe8, 0x52, 0x46, 0xc5, 0x65, 0x9c, 0x5f, 0xd0, 0x86, 0xb4, 0xe6, 0x0f, 0x88, 0xb4, 0x1b, 0x18 ],
-const [ 0x9e, 0xeb, 0x07, 0x9c, 0x55, 0x2e, 0x42, 0x1f, 0x70, 0x30, 0x85, 0xb9, 0xb2, 0x75, 0xd5, 0xb0, 0x5c, 0x0c, 0x92, 0x2e, 0xfe, 0x14, 0xf2, 0xe7, 0x8c, 0x7f, 0xae, 0xfb, 0xb4, 0x16, 0xfb, 0x1e, 0x6f, 0xbd, 0xbc, 0xf6, 0xd7, 0xf9, 0xf6, 0xc4, 0x38, 0xaf, 0x84, 0x47, 0x69, 0x2f, 0x0c, 0xde, 0x5d, 0x70, 0x31, 0xec, 0xf5, 0x9d, 0x0a, 0x80, 0x18, 0xd1, 0xd3, 0x36, 0x06, 0x20, 0xe3, 0x58, 0xe9, 0xd6, 0xde, 0x49, 0xae, 0x03, 0x2c, 0x24, 0x12, 0x37, 0xaa, 0xa0, 0x00, 0x8a, 0x9f, 0x37, 0x1a, 0xdf, 0xf1, 0x87, 0x96, 0x6a, 0x99, 0xf8, 0x4b, 0x70, 0x54, 0x9f, 0x0b, 0x4e, 0x9b, 0x62, 0x34, 0xbd, 0xd6, 0x5d, 0x82, 0x54, 0xcd, 0x85, 0x27, 0x4f, 0x5f, 0x8b, 0x1e, 0x8e, 0x76, 0x04, 0xbc, 0xe1, 0x3a, 0xc6, 0x88, 0x82, 0x85, 0x95, 0x4c, 0xe3, 0x97, 0xff, 0x6c, 0xaa, 0x0c, 0x84 ],
-const [ 0x3a, 0xf3, 0x49, 0xf3, 0x64, 0x72, 0x18, 0xe4, 0xbe, 0x26, 0xfa, 0x86, 0x3a, 0xc7, 0x13, 0x81, 0xb6, 0x4f, 0xcc, 0xaa, 0x7e, 0x66, 0x76, 0x1e, 0x12, 0x1e, 0x30, 0x8e, 0x2a, 0xe0, 0x0a, 0xd9, 0xf8, 0xa7, 0x6a, 0xe0, 0xad, 0x6b, 0xaf, 0x96, 0x3e, 0xe1, 0x15, 0x56, 0x68, 0x61, 0xd8, 0x7a, 0xf2, 0x27, 0x9d, 0x29, 0x32, 0xbf, 0x0d, 0x70, 0xd2, 0xbb, 0xc3, 0x94, 0xd4, 0xa7, 0x68, 0xa7, 0xd4, 0x3f, 0x1c, 0x5a, 0x8d, 0xdf, 0x18, 0x12, 0x9f, 0x3a, 0x92, 0x3e, 0x90, 0x4f, 0xe1, 0xe7, 0x10, 0x99, 0xe2, 0x88, 0x81, 0x86, 0x9a, 0x21, 0xb6, 0x2b, 0x1d, 0x87, 0xfb, 0x36, 0xae, 0xfe, 0x56, 0x24, 0x27, 0x09, 0x0d, 0xb4, 0x9c, 0x81, 0x68, 0x9b, 0x3b, 0xe5, 0xb8, 0x79, 0x76, 0xf1, 0x98, 0x0c, 0x65, 0x72, 0x73, 0xa3, 0x65, 0x58, 0x47, 0xd6, 0x06, 0x0d, 0xa8, 0x75, 0x24, 0x05 ],
-const [ 0x13, 0xaa, 0xeb, 0x07, 0x4c, 0x23, 0x59, 0x7b, 0xf5, 0x55, 0x7b, 0x22, 0x13, 0x00, 0xad, 0x3d, 0xf2, 0x11, 0xae, 0xdc, 0x75, 0xb1, 0x98, 0xfe, 0xaa, 0x81, 0x16, 0xf8, 0xa1, 0x24, 0xd1, 0x1b, 0x7f, 0xff, 0x2b, 0x91, 0xce, 0x3c, 0x30, 0x88, 0x17, 0x15, 0xc9, 0x93, 0xb3, 0x4f, 0x33, 0x4c, 0xde, 0x04, 0xb0, 0x3f, 0x0d, 0xa6, 0x7d, 0x03, 0x82, 0x41, 0x03, 0xaa, 0x1d, 0x00, 0x51, 0x5c, 0x75, 0xf3, 0xca, 0x3e, 0x27, 0x0f, 0x1b, 0x98, 0x6e, 0x77, 0x71, 0x38, 0xf4, 0xfa, 0xe8, 0x11, 0xe8, 0xdc, 0x46, 0x28, 0x51, 0xd9, 0xe9, 0xb1, 0xa2, 0x67, 0xfe, 0x74, 0x8e, 0x3c, 0xf4, 0x76, 0x1d, 0x10, 0x30, 0xd6, 0x00, 0xa4, 0x03, 0xf5, 0x22, 0x03, 0xd9, 0xd9, 0x7f, 0x07, 0xb3, 0xd4, 0x39, 0x20, 0xd7, 0x60, 0xe8, 0x51, 0xc5, 0x4e, 0x32, 0x7b, 0x6e, 0x20, 0x9d, 0xde, 0xa1, 0xb3 ],
-const [ 0x01, 0x36, 0xea, 0x47, 0x6e, 0x2e, 0x82, 0x3f, 0x8e, 0x00, 0xbb, 0xcc, 0x7f, 0x9f, 0xc7, 0x27, 0x2e, 0x95, 0x1b, 0xc4, 0xca, 0xa6, 0x7e, 0x1d, 0x78, 0xb0, 0x60, 0xb2, 0x48, 0xd6, 0x6e, 0x4e, 0x67, 0xdd, 0x63, 0x8b, 0x97, 0xd6, 0x21, 0x98, 0xdd, 0xfe, 0x00, 0x3a, 0x79, 0xe2, 0x66, 0x11, 0x1b, 0xc7, 0x98, 0x1d, 0x54, 0x48, 0xcf, 0x81, 0x4b, 0x41, 0x8f, 0x86, 0xb1, 0xec, 0x34, 0xe2, 0xf7, 0x4a, 0xce, 0x3b, 0xbe, 0xc5, 0x2e, 0xe7, 0x8f, 0x13, 0x41, 0xf6, 0xcc, 0x5d, 0x9d, 0x72, 0xe6, 0xa1, 0x5a, 0xe5, 0xd1, 0x55, 0x23, 0x1c, 0xb5, 0x4d, 0x8c, 0x2b, 0xe7, 0xde, 0xa6, 0xb1, 0x17, 0x44, 0xd2, 0x5d, 0xcb, 0x41, 0xd2, 0xb1, 0x0c, 0x07, 0x26, 0x06, 0x5e, 0x58, 0x95, 0xd1, 0xf6, 0xec, 0x0a, 0x24, 0x28, 0x13, 0xa1, 0x78, 0x1f, 0x9b, 0x02, 0xa9, 0xd0, 0xf4, 0xee, 0x42 ],
-const [ 0x0c, 0x36, 0xca, 0x43, 0xe7, 0xc1, 0x13, 0xed, 0x9f, 0xb7, 0x16, 0x70, 0xb3, 0xea, 0x73, 0xbf, 0xd6, 0x92, 0x8c, 0x83, 0x9f, 0x36, 0xdb, 0x1a, 0x82, 0xd0, 0x8a, 0xe0, 0xff, 0x2c, 0x3d, 0xae, 0x19, 0x91, 0x33, 0xa1, 0x0a, 0xa3, 0x8d, 0x1d, 0x35, 0x88, 0xed, 0x11, 0x5c, 0x4a, 0x43, 0x7c, 0x13, 0x7c, 0xe4, 0x30, 0x74, 0x21, 0xdd, 0xd6, 0x15, 0xc9, 0x86, 0x32, 0x37, 0xfd, 0x5a, 0xa8, 0x40, 0xdd, 0x05, 0xff, 0x6c, 0x08, 0xbf, 0x66, 0xbf, 0xbc, 0xd9, 0xb4, 0x3e, 0x3f, 0x95, 0xf4, 0x5e, 0x7d, 0x3b, 0x21, 0xbd, 0xf2, 0x69, 0x2e, 0x10, 0xca, 0xab, 0x49, 0x5c, 0x47, 0x4b, 0x61, 0x6a, 0x64, 0x6b, 0xe6, 0x75, 0xb8, 0x50, 0xd0, 0x25, 0x9c, 0x01, 0xe2, 0xc1, 0x90, 0x11, 0x30, 0xa0, 0xdb, 0xb9, 0xdf, 0xe0, 0x72, 0x2a, 0x2c, 0x5b, 0x1b, 0x20, 0xaf, 0xd7, 0xd2, 0xbb, 0xe1 ],
-const [ 0xab, 0x5d, 0xa4, 0xa6, 0x4f, 0xbb, 0xf3, 0xc6, 0x0f, 0x5a, 0xb1, 0xf7, 0x77, 0x6e, 0xd6, 0xa5, 0x57, 0x51, 0xe3, 0x9a, 0x5e, 0xc8, 0x19, 0x67, 0xea, 0x88, 0xe9, 0x06, 0x1f, 0xf9, 0xad, 0xbd, 0x37, 0x39, 0x95, 0x45, 0x18, 0x64, 0xe4, 0x2c, 0x2c, 0x13, 0x5c, 0x78, 0x6d, 0x22, 0xf6, 0x8d, 0xbf, 0xb7, 0xd7, 0x51, 0x83, 0x7f, 0x80, 0x8d, 0x69, 0x3b, 0x45, 0x97, 0x85, 0x7c, 0x00, 0x2e, 0xa6, 0xaa, 0x06, 0xa5, 0xe3, 0x4b, 0x5a, 0x44, 0x76, 0x82, 0x21, 0xeb, 0xce, 0xd6, 0x56, 0xf8, 0xdf, 0x35, 0xbf, 0x6b, 0xbd, 0x39, 0x20, 0x48, 0x69, 0xaa, 0xae, 0x3d, 0xea, 0x43, 0xc6, 0x85, 0xa0, 0xb9, 0xdf, 0x0c, 0xd6, 0xf9, 0xbe, 0xd4, 0x96, 0xb1, 0xe9, 0x97, 0xc1, 0x13, 0x5d, 0xae, 0x5f, 0xd6, 0x83, 0x31, 0x33, 0x7d, 0x61, 0x60, 0x92, 0xdb, 0x0d, 0x41, 0x76, 0xd7, 0x68, 0x8b ],
-const [ 0xb7, 0xb3, 0x58, 0x0d, 0xaf, 0x78, 0x3c, 0x07, 0x0f, 0xa8, 0xfd, 0x14, 0x3f, 0x5a, 0x65, 0xa1, 0x81, 0x15, 0xed, 0x1a, 0x26, 0x38, 0x8c, 0x67, 0x02, 0x99, 0xcd, 0xb7, 0x1d, 0x6d, 0x24, 0x7c, 0xab, 0x68, 0x82, 0xb6, 0x3f, 0x25, 0x27, 0x75, 0x3b, 0xc7, 0xb8, 0x99, 0x8b, 0xe1, 0x91, 0xdd, 0x93, 0x93, 0x5c, 0x14, 0x65, 0xf6, 0xe2, 0xb2, 0x38, 0xba, 0x22, 0x8d, 0x16, 0x0e, 0xa0, 0xe5, 0xd4, 0xc0, 0x00, 0xa2, 0x47, 0xa6, 0xd3, 0xde, 0xb5, 0x3c, 0xb1, 0xa3, 0x8a, 0x8e, 0x88, 0xf6, 0x4c, 0x59, 0x33, 0x14, 0xd1, 0x6d, 0x4f, 0xfb, 0xb0, 0x55, 0x4a, 0x2c, 0xf5, 0x3a, 0xbc, 0xb0, 0x19, 0x05, 0xfb, 0x59, 0x31, 0xc4, 0xea, 0x4a, 0x65, 0x4f, 0x11, 0xb9, 0xa4, 0x2b, 0xf3, 0xf4, 0x96, 0xae, 0x9b, 0xa2, 0xd2, 0x64, 0x79, 0x4c, 0x52, 0xb2, 0x6c, 0x1c, 0x23, 0xb9, 0x20, 0xe4 ],
-const [ 0x2a, 0xb5, 0x33, 0x07, 0x8b, 0x33, 0x14, 0x94, 0x9c, 0x1f, 0x34, 0xc6, 0x8b, 0xfd, 0xd7, 0x67, 0x50, 0xf7, 0x51, 0x05, 0x90, 0x2c, 0x11, 0xe8, 0xc1, 0x4a, 0xde, 0x47, 0x90, 0x5f, 0x61, 0xbb, 0x7f, 0xec, 0xe4, 0xf3, 0xd3, 0x3c, 0x59, 0xaa, 0xad, 0xf3, 0x9e, 0xd6, 0x77, 0xea, 0xff, 0x22, 0x81, 0x3a, 0xfd, 0x9f, 0xec, 0x97, 0x4d, 0xb6, 0xc8, 0xe0, 0x24, 0x62, 0x79, 0xf3, 0xb2, 0x9c, 0x5f, 0xc6, 0xec, 0x16, 0xb6, 0xb4, 0x8f, 0x2b, 0xba, 0x14, 0x62, 0x16, 0x0f, 0x10, 0xbb, 0x63, 0x61, 0xb5, 0x44, 0xa4, 0x48, 0x46, 0xff, 0x65, 0x6e, 0xd6, 0x88, 0x62, 0xf3, 0x15, 0x9b, 0xf7, 0x10, 0x6b, 0xd5, 0xd7, 0xfb, 0x43, 0xbf, 0x01, 0x0b, 0xaa, 0x08, 0xf0, 0x1d, 0x18, 0x12, 0x12, 0x36, 0x8d, 0xb1, 0x7c, 0x6a, 0xe0, 0x2f, 0xdc, 0xfc, 0x54, 0x93, 0xaf, 0xc6, 0x6d, 0x22, 0xb4 ],
-const [ 0xd1, 0xa3, 0x1b, 0x1f, 0x3a, 0x21, 0xb5, 0x51, 0xdf, 0xc1, 0x6b, 0xaf, 0x8b, 0xb0, 0x02, 0xf4, 0xd8, 0xb0, 0x8b, 0x02, 0xf5, 0xc6, 0x43, 0x31, 0xa7, 0x32, 0xb7, 0xe7, 0x8e, 0xa4, 0x2c, 0x69, 0xaa, 0xad, 0x3d, 0xf0, 0x1e, 0x74, 0xc6, 0x00, 0x33, 0xaa, 0x01, 0xf5, 0x9f, 0xc0, 0xef, 0xdf, 0x08, 0x57, 0xfa, 0x8f, 0xc4, 0xf8, 0xd8, 0xf2, 0xe3, 0x05, 0xb2, 0x9e, 0x6f, 0xef, 0x86, 0xab, 0xf2, 0xaa, 0xca, 0xc4, 0x39, 0x5e, 0x52, 0x7d, 0x58, 0x60, 0x73, 0xe7, 0xee, 0x60, 0x69, 0x63, 0xaa, 0xe4, 0xf6, 0xb3, 0x0e, 0xf5, 0x4c, 0x57, 0x73, 0x17, 0x2d, 0x16, 0x4e, 0x7f, 0x51, 0xdb, 0xb1, 0x81, 0x08, 0xc2, 0x15, 0x48, 0x20, 0x73, 0x56, 0xc9, 0x09, 0xaf, 0xff, 0xf9, 0x37, 0x28, 0xc8, 0x3e, 0xc8, 0x96, 0x5d, 0x24, 0x67, 0x07, 0x61, 0x52, 0x70, 0x76, 0xb3, 0xbc, 0x54, 0xa0 ],
-const [ 0x4c, 0x76, 0xc4, 0xe4, 0x16, 0xbe, 0x43, 0xac, 0x38, 0x2a, 0xbf, 0x32, 0xf4, 0x4d, 0x96, 0x32, 0xa7, 0x5c, 0x33, 0x37, 0x40, 0xd8, 0x28, 0x5f, 0xf6, 0x6d, 0x7d, 0x5e, 0x3b, 0x1b, 0x48, 0xc5, 0xeb, 0x93, 0x7e, 0x85, 0xca, 0xe4, 0x09, 0xae, 0x2d, 0x56, 0x1b, 0x7d, 0xf7, 0x96, 0xc1, 0x96, 0xc7, 0x14, 0xbb, 0x8e, 0x70, 0xaa, 0x8b, 0xac, 0xaa, 0x7e, 0xcc, 0xf1, 0x07, 0x29, 0xc5, 0x55, 0x28, 0x19, 0x3e, 0x54, 0x30, 0x33, 0x92, 0xa9, 0x79, 0xbd, 0x06, 0x5a, 0x86, 0x7c, 0x59, 0xf4, 0x39, 0x19, 0x9d, 0x18, 0x46, 0xca, 0x45, 0x36, 0xe8, 0x2e, 0x7e, 0x99, 0xd3, 0x78, 0xc3, 0xa4, 0x69, 0xcf, 0xab, 0x5b, 0x30, 0xf5, 0x06, 0x25, 0x84, 0x27, 0x29, 0xcf, 0x89, 0x45, 0x86, 0xd5, 0x64, 0x33, 0x80, 0xdd, 0xab, 0x7f, 0x7d, 0x85, 0x19, 0x44, 0x3c, 0x5e, 0x87, 0x4e, 0x69, 0x38 ],
-const [ 0x34, 0xf6, 0xd2, 0x87, 0x7d, 0x88, 0x0c, 0x45, 0x40, 0x8f, 0x53, 0xa1, 0xd8, 0xff, 0x95, 0x61, 0x46, 0xec, 0x6b, 0x48, 0x8e, 0x57, 0x9f, 0x8e, 0x5e, 0x48, 0xec, 0x8d, 0xf1, 0x1d, 0x04, 0xbd, 0x33, 0x21, 0xd8, 0xe2, 0x26, 0x60, 0x13, 0x84, 0x84, 0xba, 0xe7, 0xa0, 0xa6, 0x37, 0x0d, 0x9d, 0xa4, 0x9a, 0x07, 0x81, 0xbe, 0x39, 0xa9, 0x65, 0xfa, 0x0b, 0xd7, 0x27, 0x0f, 0x03, 0x90, 0x5e, 0x82, 0x9c, 0x2c, 0x93, 0x0f, 0xb6, 0xe1, 0xae, 0x4a, 0xa0, 0x8c, 0xae, 0x86, 0x76, 0xae, 0x9d, 0xf6, 0xad, 0xb5, 0xc3, 0x12, 0xec, 0x7e, 0x1b, 0x3c, 0x1d, 0x17, 0x03, 0xa4, 0xc5, 0xc9, 0x37, 0x69, 0x90, 0x56, 0x00, 0x01, 0x31, 0x7f, 0xa9, 0xda, 0x68, 0xc9, 0x33, 0x41, 0x64, 0x81, 0x4a, 0x84, 0x4c, 0xfe, 0x77, 0x53, 0x19, 0x26, 0x96, 0x6c, 0xa6, 0x34, 0x8b, 0x78, 0x0a, 0xb8, 0x31 ],
-const [ 0xcf, 0x3f, 0xd2, 0x62, 0x06, 0x8f, 0x49, 0x0c, 0x20, 0x3d, 0x8b, 0xa5, 0x78, 0x09, 0xe6, 0x93, 0xee, 0x28, 0x4f, 0x4a, 0x37, 0x44, 0x53, 0x6e, 0x77, 0xc5, 0x51, 0x37, 0x11, 0x4f, 0xe7, 0x1a, 0xbd, 0x8b, 0xaa, 0xa6, 0xdc, 0x2b, 0x1a, 0xac, 0x09, 0x28, 0xd5, 0xa2, 0xf1, 0x4e, 0x0a, 0x49, 0x64, 0xfb, 0x31, 0x8e, 0xac, 0x24, 0xf9, 0xae, 0x1d, 0x98, 0x82, 0x9e, 0xed, 0x89, 0xcd, 0xaa, 0x46, 0x48, 0x71, 0x5c, 0x9a, 0x50, 0x8f, 0x9f, 0x37, 0x86, 0x07, 0x24, 0x1b, 0xbf, 0xec, 0x05, 0x09, 0x83, 0x36, 0xa9, 0xdc, 0x11, 0xb7, 0xe7, 0x1c, 0xa2, 0x51, 0x6e, 0xcf, 0xf2, 0x65, 0x64, 0x91, 0xfd, 0x8e, 0x4d, 0xe7, 0x06, 0x90, 0x2f, 0xd1, 0xde, 0x8b, 0xf3, 0x9e, 0x63, 0x75, 0x0f, 0x04, 0x47, 0xc6, 0x62, 0x70, 0x13, 0x75, 0x5f, 0x9b, 0x6b, 0x24, 0x6e, 0x5e, 0x93, 0x98, 0x8f ],
-const [ 0xf5, 0x70, 0x27, 0x3a, 0x4e, 0x5d, 0xba, 0xb3, 0x84, 0x10, 0xe4, 0xaf, 0x67, 0x29, 0x95, 0xeb, 0x08, 0x84, 0x08, 0x46, 0x1e, 0x0e, 0x47, 0x30, 0xa8, 0xd7, 0xf1, 0x5f, 0xd4, 0x69, 0x3b, 0xc3, 0x20, 0x59, 0x35, 0xbd, 0xbf, 0x1b, 0x4f, 0x8c, 0x3e, 0x1a, 0x1b, 0x08, 0x67, 0x08, 0x54, 0x92, 0x66, 0x73, 0x20, 0x4b, 0x2a, 0x9a, 0x92, 0x84, 0x0e, 0x7e, 0x73, 0x76, 0xb9, 0x3c, 0x42, 0x33, 0x42, 0x99, 0x79, 0xdd, 0x98, 0xdf, 0x12, 0x16, 0x22, 0xe8, 0x4a, 0xb7, 0xa2, 0x78, 0xa5, 0xc5, 0x5f, 0xd0, 0x32, 0xa1, 0x83, 0x7f, 0x10, 0x7e, 0xc2, 0x7c, 0x31, 0x18, 0x3c, 0x72, 0x5e, 0xa4, 0xa5, 0x5b, 0x7b, 0x02, 0xa3, 0x50, 0x0d, 0x3a, 0x77, 0x9f, 0xf9, 0x26, 0xe0, 0x1f, 0x8e, 0x6c, 0x3c, 0xc0, 0xc6, 0xb0, 0xf1, 0x66, 0xc9, 0x07, 0x0b, 0xf8, 0xb3, 0xae, 0x27, 0xb3, 0x97, 0xfc ],
-const [ 0x25, 0x12, 0x71, 0x8e, 0x7c, 0x13, 0x9a, 0xcd, 0xcd, 0x32, 0x43, 0x03, 0xdb, 0x3a, 0xdb, 0x70, 0x34, 0x8d, 0x09, 0xb0, 0x58, 0xba, 0xf0, 0xe9, 0x1d, 0x52, 0xb2, 0x49, 0x52, 0xf8, 0x32, 0xb0, 0xa3, 0xb8, 0x1f, 0xa9, 0xbc, 0x9a, 0x2e, 0x9f, 0xb2, 0x76, 0xa6, 0x4e, 0x9e, 0x09, 0x22, 0x77, 0x8b, 0x49, 0x92, 0xd8, 0x92, 0xf6, 0x84, 0x5b, 0x43, 0x72, 0xa2, 0x8e, 0x47, 0xd2, 0x7b, 0x53, 0x44, 0x35, 0x86, 0xd9, 0x01, 0x54, 0x63, 0xca, 0xcb, 0x5b, 0x65, 0xc6, 0x17, 0xf8, 0x4e, 0x11, 0x68, 0xb1, 0x59, 0x88, 0x73, 0x7a, 0x7e, 0xda, 0x81, 0x87, 0xf1, 0xf4, 0x16, 0x5f, 0xec, 0xbd, 0xd0, 0x32, 0xae, 0x04, 0x91, 0x6c, 0xc4, 0xb6, 0xe1, 0x8a, 0x87, 0x55, 0x8d, 0x2c, 0xe6, 0xa5, 0x94, 0x6c, 0x65, 0xa9, 0x44, 0x6f, 0x66, 0xcd, 0xa1, 0x39, 0xa7, 0x65, 0x06, 0xc6, 0x0d, 0x56 ],
-const [ 0xb3, 0xfa, 0x42, 0xc5, 0x1a, 0xab, 0xb7, 0x08, 0xa6, 0x4e, 0x40, 0x56, 0x40, 0x2f, 0xc9, 0x7b, 0xd8, 0x96, 0x48, 0x20, 0xc0, 0x9c, 0x45, 0x41, 0x52, 0x3c, 0x99, 0xe2, 0xd9, 0xad, 0x76, 0xfe, 0xaf, 0xef, 0xa7, 0xc1, 0xa2, 0xa5, 0x19, 0xf7, 0x9c, 0x22, 0x9b, 0xc3, 0x84, 0xc6, 0xe2, 0x94, 0x5f, 0x8b, 0xd0, 0x55, 0xbb, 0xdb, 0xf6, 0xe4, 0x4d, 0xa5, 0x57, 0xc6, 0xd9, 0xaf, 0x6e, 0x19, 0x52, 0x2e, 0x73, 0xc9, 0x43, 0x94, 0xdb, 0x07, 0x6d, 0xa9, 0x1e, 0xf7, 0xb1, 0xdd, 0xbc, 0xa9, 0x31, 0xdc, 0x82, 0x4b, 0xb3, 0x64, 0x09, 0x9d, 0x46, 0x53, 0x81, 0xa5, 0x27, 0x05, 0xac, 0xa3, 0xe5, 0xdc, 0x2d, 0x47, 0xc4, 0x20, 0x03, 0x22, 0x5f, 0x0a, 0x51, 0x5b, 0x92, 0x1b, 0x60, 0xa3, 0x97, 0xb2, 0xe6, 0x6a, 0x6f, 0xde, 0x89, 0x53, 0x84, 0x71, 0x9f, 0xe6, 0x8c, 0x56, 0x38, 0x86 ],
-const [ 0x64, 0x97, 0x1c, 0xe1, 0x86, 0xec, 0x2d, 0xbe, 0x03, 0x7c, 0xa7, 0x14, 0xf2, 0x12, 0xf6, 0x2f, 0xc8, 0x63, 0xd0, 0x80, 0x79, 0x9e, 0x72, 0xdb, 0xe0, 0x44, 0x2d, 0xe3, 0x61, 0x3a, 0x22, 0xc2, 0xcd, 0x1d, 0x4a, 0x1d, 0x85, 0xd5, 0xb9, 0x46, 0xe3, 0x6d, 0x23, 0xb4, 0xd5, 0x21, 0x9f, 0xb1, 0xcb, 0xb9, 0xab, 0x53, 0xd4, 0x16, 0x70, 0xad, 0x03, 0x0b, 0x48, 0x46, 0x18, 0x6e, 0x7e, 0xcb, 0x5c, 0x6e, 0x55, 0x00, 0xcd, 0x26, 0x4b, 0xfc, 0x7b, 0x73, 0x9e, 0x96, 0x32, 0x03, 0x10, 0x1b, 0x59, 0xaf, 0xe7, 0x42, 0x1a, 0x0b, 0x39, 0x61, 0xc4, 0x3b, 0x66, 0xe0, 0x6d, 0x08, 0xe6, 0xee, 0xdb, 0x33, 0x45, 0x74, 0xa5, 0x08, 0x6b, 0x47, 0x95, 0x37, 0x21, 0xa2, 0x51, 0xe0, 0xd1, 0xd3, 0x3a, 0xed, 0x8d, 0x34, 0x95, 0xa4, 0x53, 0x5d, 0xe9, 0x7c, 0x90, 0x98, 0xa7, 0x30, 0xe2, 0x96 ],
-const [ 0x33, 0xd8, 0xe9, 0xe9, 0xc0, 0x66, 0xe5, 0x3f, 0x1b, 0x7d, 0x68, 0x9f, 0x82, 0xf3, 0x3f, 0xb1, 0xcc, 0xd9, 0x87, 0x2a, 0xa7, 0xad, 0x15, 0xa1, 0x25, 0xd1, 0x15, 0x9f, 0x77, 0x3c, 0xf0, 0xf5, 0xf8, 0x70, 0x74, 0x52, 0x6d, 0xac, 0x2f, 0x14, 0x8a, 0x62, 0x1b, 0x5f, 0xb9, 0xeb, 0x81, 0x6c, 0x18, 0x7a, 0x17, 0x24, 0xc0, 0x4f, 0x6b, 0xee, 0x4d, 0x2d, 0x85, 0xc5, 0x9b, 0x0d, 0xc8, 0x8d, 0xcd, 0x14, 0x1a, 0xa7, 0x94, 0xc3, 0x45, 0xc3, 0xae, 0x6e, 0x9c, 0xf5, 0xac, 0xef, 0xe1, 0x0c, 0xf9, 0x9b, 0x66, 0x1f, 0x18, 0x75, 0x73, 0x68, 0x2d, 0xa2, 0xe8, 0x55, 0xbf, 0x1d, 0x23, 0xdd, 0xbc, 0xac, 0x24, 0x11, 0xbd, 0x13, 0xef, 0xf3, 0x8c, 0x87, 0x32, 0x8a, 0xe4, 0x65, 0x28, 0x36, 0x77, 0x24, 0xbd, 0x42, 0x35, 0x89, 0xf3, 0xb8, 0xcc, 0x19, 0x84, 0x79, 0x6b, 0xd4, 0xc9, 0x8c ],
-const [ 0x6a, 0xf0, 0x47, 0x3b, 0x68, 0xf3, 0x89, 0xd5, 0xb6, 0xf2, 0x0e, 0xfc, 0x60, 0xdd, 0xdc, 0x2f, 0x35, 0x51, 0xe6, 0x21, 0x70, 0xb0, 0xd5, 0x69, 0x98, 0x77, 0x07, 0x7b, 0xa4, 0xcc, 0xd8, 0xd7, 0x63, 0x57, 0x21, 0x80, 0x1b, 0x53, 0xff, 0xb0, 0x71, 0xe5, 0xd6, 0xca, 0x88, 0xac, 0x95, 0x90, 0x6d, 0x99, 0x3b, 0x96, 0xb3, 0x01, 0x9a, 0xf6, 0x5a, 0xf0, 0x5a, 0x46, 0xf6, 0xc1, 0x42, 0xc7, 0x0c, 0xeb, 0xb3, 0xdf, 0xc0, 0x1e, 0x75, 0xca, 0xad, 0x8f, 0xb7, 0x8c, 0x15, 0x90, 0x50, 0x2a, 0x3a, 0x63, 0x4b, 0x19, 0x0b, 0x50, 0xa3, 0xf7, 0x03, 0xf5, 0x4b, 0x79, 0x4f, 0xde, 0x71, 0xa5, 0x2f, 0x55, 0x04, 0x41, 0x9e, 0x7b, 0x74, 0x8b, 0x35, 0x98, 0xb9, 0x2a, 0x4d, 0xb0, 0x96, 0x65, 0x64, 0x57, 0x1f, 0x93, 0xc2, 0xc5, 0x79, 0xd2, 0x5b, 0x2d, 0xe1, 0xfc, 0xf8, 0x4b, 0xef, 0xd7 ],
-const [ 0x8e, 0x7a, 0xae, 0x5e, 0xd6, 0x83, 0x2b, 0x58, 0xcf, 0x20, 0x00, 0x19, 0x10, 0x18, 0x22, 0xd0, 0xd5, 0x4c, 0x42, 0x78, 0xfe, 0xa6, 0xf5, 0x68, 0x5b, 0x4c, 0x11, 0x26, 0x26, 0x19, 0x5a, 0x7d, 0xd1, 0x4d, 0x5e, 0xcf, 0x03, 0x83, 0x9d, 0xac, 0xdd, 0xe4, 0xed, 0xa2, 0x81, 0x9b, 0x1d, 0x57, 0xd5, 0x88, 0xd9, 0xd6, 0x84, 0x39, 0xcd, 0x27, 0x46, 0x16, 0x0e, 0x22, 0x62, 0xdb, 0xb5, 0x84, 0x71, 0x4c, 0xcd, 0x43, 0x64, 0x24, 0x6f, 0x1f, 0xc8, 0x4e, 0x2b, 0x7a, 0x49, 0x57, 0xaa, 0x69, 0x75, 0x24, 0x92, 0x0b, 0xc3, 0xe0, 0xaa, 0x1a, 0xd4, 0x39, 0x3f, 0xbf, 0xf8, 0xcc, 0xc6, 0xab, 0xf4, 0xdd, 0xc2, 0x63, 0x03, 0x4c, 0xe8, 0xdb, 0x1a, 0xc4, 0x81, 0x47, 0x70, 0x36, 0x11, 0x2e, 0x3e, 0x86, 0x36, 0xc0, 0xc3, 0x84, 0xd2, 0x69, 0x8c, 0x1d, 0x6c, 0xa6, 0xf2, 0xd3, 0xd4, 0x18 ],
-const [ 0xc0, 0xb1, 0x84, 0xc7, 0xb9, 0xe4, 0xcb, 0x8d, 0xd1, 0x9a, 0xf3, 0x77, 0x30, 0x65, 0x16, 0xc5, 0x63, 0xb3, 0xb8, 0x78, 0xba, 0xa2, 0x50, 0xc1, 0xee, 0x16, 0x05, 0xb9, 0x07, 0x08, 0xb5, 0x52, 0x7d, 0x21, 0x3b, 0x8e, 0x9e, 0x87, 0xf2, 0xef, 0x2f, 0xf7, 0x75, 0x2e, 0x56, 0x14, 0xa9, 0x30, 0xb8, 0xfe, 0xfe, 0x35, 0xde, 0x27, 0xf1, 0x53, 0xdd, 0x62, 0xd6, 0x23, 0x36, 0x3d, 0xd4, 0xba, 0xfb, 0x91, 0x31, 0xda, 0x33, 0x57, 0xcf, 0x6a, 0x80, 0xbd, 0xf7, 0x24, 0xff, 0x7a, 0x56, 0x8e, 0x70, 0x5e, 0x45, 0x2b, 0x97, 0x2d, 0x4e, 0xf2, 0xe1, 0xad, 0xeb, 0xff, 0x4b, 0xfe, 0x90, 0x89, 0x80, 0x2a, 0xec, 0x14, 0x41, 0xfd, 0x6d, 0xe7, 0x0a, 0x17, 0x02, 0xc1, 0xf3, 0x3f, 0x24, 0xc8, 0xd4, 0xfa, 0x17, 0xc2, 0xac, 0x5c, 0x6d, 0x87, 0x44, 0x1f, 0xcd, 0xb6, 0x0f, 0xf2, 0xf2, 0xa8 ],
-const [ 0x28, 0xaa, 0xb2, 0xe4, 0xa0, 0xe5, 0x5c, 0x11, 0xd5, 0x50, 0x3c, 0x4d, 0xca, 0xb5, 0x84, 0x54, 0x5c, 0x49, 0x23, 0xa6, 0x1b, 0x31, 0x3c, 0x2c, 0x5a, 0x44, 0xd6, 0x1d, 0x82, 0x13, 0xd5, 0x23, 0xac, 0x26, 0x29, 0xba, 0x6e, 0x89, 0x45, 0xd9, 0xf4, 0x88, 0xd2, 0xd5, 0x53, 0xb6, 0xa5, 0x82, 0x1b, 0x34, 0xef, 0x9b, 0x2b, 0x2f, 0xb4, 0x64, 0xca, 0xab, 0x7f, 0x8d, 0xf3, 0x7f, 0x53, 0x5a, 0xef, 0xa1, 0xe4, 0x01, 0x2a, 0xa4, 0x07, 0x54, 0x3f, 0x7f, 0x68, 0x9f, 0x55, 0x90, 0x7b, 0xd4, 0xae, 0xe1, 0xb5, 0xe5, 0x7d, 0xa9, 0xfb, 0x72, 0xf8, 0x16, 0x5b, 0xa4, 0xaf, 0x49, 0xfa, 0x59, 0x1c, 0xa3, 0x4d, 0x81, 0x7b, 0x3f, 0x8c, 0xc7, 0xdc, 0xbf, 0x64, 0x75, 0x76, 0x4c, 0xed, 0x91, 0x3e, 0xd8, 0xdb, 0x4c, 0xb8, 0xa6, 0xf8, 0x9e, 0x0d, 0x0d, 0xd2, 0x2a, 0x5f, 0x79, 0xb0, 0x67 ],
-const [ 0xfb, 0xdb, 0xc0, 0xf3, 0x66, 0xd4, 0x67, 0x86, 0x54, 0x54, 0x48, 0x04, 0xb8, 0xd6, 0xfd, 0x6f, 0x17, 0x16, 0x68, 0xf2, 0x83, 0x2e, 0x46, 0x23, 0xcd, 0xff, 0x07, 0x85, 0xf7, 0xd2, 0xde, 0x51, 0xe8, 0x3f, 0x14, 0x76, 0x63, 0x4f, 0xa1, 0xde, 0x3a, 0xdd, 0xfd, 0xf3, 0xbf, 0x42, 0x34, 0x62, 0x7c, 0x31, 0x39, 0x1e, 0x24, 0xdf, 0x7c, 0xa9, 0xc9, 0x67, 0xbe, 0x8f, 0x4e, 0x6e, 0x24, 0x33, 0x20, 0x02, 0x8b, 0xcd, 0x21, 0xc8, 0x1c, 0xb4, 0xe5, 0x57, 0x20, 0xd9, 0x21, 0xdf, 0x15, 0x94, 0x60, 0x0e, 0x01, 0xa4, 0xf8, 0x34, 0x06, 0x71, 0x3d, 0xa5, 0x37, 0x93, 0xf4, 0x5f, 0xaa, 0x98, 0x0b, 0xec, 0xce, 0x02, 0x87, 0x8a, 0xff, 0x90, 0xbd, 0x8a, 0x58, 0xbf, 0xc5, 0xf6, 0xc9, 0x8f, 0x2c, 0x76, 0x69, 0x8a, 0xe9, 0x74, 0x0d, 0x03, 0x92, 0x7f, 0x19, 0x9c, 0xd0, 0xed, 0x96, 0x0b ],
-const [ 0x39, 0xb9, 0x71, 0xd2, 0x86, 0x92, 0xe9, 0xa0, 0xb5, 0x78, 0x1c, 0x9d, 0x40, 0x90, 0xe8, 0x39, 0xa7, 0xea, 0x70, 0x21, 0xb5, 0xb4, 0x79, 0x10, 0x04, 0xad, 0x14, 0xe8, 0xc3, 0xdd, 0x7e, 0x01, 0xb7, 0x84, 0x44, 0xc1, 0x80, 0x50, 0xaa, 0x6d, 0x1e, 0xd2, 0x4e, 0x3e, 0xb3, 0x33, 0x09, 0xb8, 0x8a, 0x23, 0x16, 0x37, 0x59, 0x13, 0x76, 0xcb, 0xc3, 0xa4, 0x92, 0x45, 0x21, 0x5f, 0x23, 0x92, 0x82, 0xa6, 0x4f, 0x48, 0xf0, 0xea, 0x14, 0x7f, 0xf6, 0x1f, 0xea, 0xe2, 0x5f, 0x6d, 0xa4, 0x06, 0x3f, 0x29, 0x98, 0xfa, 0x38, 0x03, 0xff, 0x1f, 0xf6, 0x81, 0x9f, 0x39, 0xfc, 0xac, 0xa7, 0xc7, 0xa3, 0x09, 0xda, 0x90, 0x5f, 0xca, 0xef, 0x7f, 0x45, 0x46, 0x38, 0xb0, 0xca, 0xa7, 0x83, 0xcb, 0xce, 0xe2, 0x3e, 0x91, 0xd9, 0xed, 0xde, 0xb4, 0xa4, 0x2c, 0x81, 0xec, 0xdb, 0x2c, 0xd1, 0x47 ],
-const [ 0x22, 0x4e, 0x8d, 0x76, 0xf9, 0x28, 0x22, 0x91, 0x5a, 0x2f, 0xd3, 0x6a, 0x51, 0x0c, 0x39, 0x84, 0x60, 0x09, 0x04, 0x21, 0xd1, 0x18, 0xec, 0x65, 0x4b, 0x17, 0xeb, 0xb9, 0xa4, 0x52, 0xa9, 0x6e, 0xf6, 0x4a, 0x38, 0xa2, 0xf5, 0xb5, 0x01, 0x68, 0x7f, 0xc5, 0xfe, 0x23, 0x75, 0xad, 0x2a, 0x33, 0xca, 0x62, 0x36, 0xd4, 0xd9, 0x9e, 0x7e, 0x42, 0xfc, 0x2b, 0x3b, 0x22, 0x5a, 0x5e, 0xfa, 0x1d, 0x00, 0xe2, 0x4d, 0xce, 0x34, 0xb6, 0xc0, 0xde, 0x05, 0x79, 0x0e, 0x6d, 0x27, 0xe6, 0x95, 0xb4, 0xfe, 0x9b, 0x08, 0xe9, 0xf9, 0x1e, 0x64, 0x63, 0x21, 0x21, 0x25, 0xff, 0xf2, 0x05, 0xb9, 0xc2, 0x69, 0x9e, 0x35, 0xc0, 0x5e, 0x36, 0x47, 0x3c, 0x14, 0xd4, 0x6b, 0x10, 0x0f, 0xbe, 0x62, 0x50, 0x25, 0x3c, 0xe1, 0x2a, 0xd8, 0x9f, 0x86, 0x10, 0xe3, 0x82, 0x0f, 0x1a, 0x13, 0x50, 0xce, 0xa5 ],
-const [ 0xf5, 0xc0, 0x5a, 0x09, 0x3a, 0xd9, 0x94, 0x09, 0x6d, 0xeb, 0xa2, 0x58, 0x58, 0xe5, 0xc5, 0x01, 0x68, 0xcf, 0xf2, 0xf3, 0x61, 0xb0, 0x28, 0x06, 0x51, 0xb0, 0x00, 0x39, 0xc3, 0x7a, 0x86, 0x3d, 0x34, 0xe4, 0x47, 0x38, 0xcb, 0xd2, 0xab, 0xc3, 0x44, 0x57, 0x85, 0x34, 0x2e, 0x1e, 0xe9, 0x23, 0x56, 0x09, 0x3e, 0x27, 0x83, 0x17, 0x93, 0xe1, 0x63, 0x8b, 0x37, 0x3c, 0xc6, 0x4b, 0x83, 0xf2, 0x0a, 0x86, 0xfb, 0x53, 0xd6, 0x99, 0x96, 0x42, 0x0c, 0x34, 0x59, 0x80, 0xf8, 0xb8, 0x2a, 0x2d, 0xce, 0xe4, 0xe4, 0x8b, 0x53, 0xb1, 0xa7, 0x06, 0xda, 0x7a, 0x72, 0x71, 0x72, 0x60, 0xf3, 0x93, 0x5e, 0xed, 0x9d, 0xe2, 0xc5, 0xf8, 0xfc, 0x8e, 0xab, 0xc8, 0x45, 0xc1, 0x20, 0x7c, 0x32, 0x26, 0xb7, 0xa9, 0x0c, 0xa8, 0x3a, 0x46, 0x09, 0x7c, 0x9c, 0xc5, 0xd9, 0x61, 0x2f, 0x83, 0x7c, 0x26 ],
-const [ 0x23, 0x1b, 0x4a, 0x2a, 0x2e, 0x6a, 0x51, 0x7a, 0x55, 0xf1, 0x0a, 0xa8, 0x04, 0x7c, 0xdf, 0x05, 0x94, 0x10, 0x91, 0xdf, 0x70, 0x7f, 0x7e, 0xb0, 0x77, 0x39, 0x20, 0x96, 0xa2, 0x65, 0xd7, 0x03, 0xe7, 0x30, 0xe8, 0xb6, 0x5d, 0x65, 0xc5, 0xea, 0xa0, 0x3f, 0x8f, 0xcd, 0x77, 0x7b, 0xd9, 0x33, 0xb4, 0xb0, 0xaf, 0x8c, 0x5c, 0xe3, 0xd6, 0x13, 0x08, 0x56, 0x56, 0x49, 0x8b, 0xa2, 0x36, 0xa2, 0xd5, 0x05, 0x87, 0x7e, 0x18, 0xfd, 0xa4, 0x5a, 0x29, 0x16, 0xb7, 0x48, 0x28, 0x00, 0x7f, 0x9c, 0x63, 0xe4, 0x51, 0xe9, 0x78, 0xf8, 0x5d, 0x2c, 0xba, 0x52, 0x33, 0x46, 0xd6, 0xfa, 0x86, 0xb0, 0xb7, 0x42, 0x2f, 0x6a, 0xa6, 0x5a, 0x74, 0x34, 0xb6, 0x1f, 0x8b, 0x01, 0x5f, 0x34, 0x5a, 0xa9, 0x69, 0x54, 0x81, 0xde, 0x0b, 0xe6, 0x9a, 0x61, 0x55, 0xd2, 0xbf, 0x75, 0xcb, 0x94, 0x4d, 0x95 ],
-const [ 0xee, 0x59, 0xb4, 0x7d, 0x83, 0x7c, 0xe4, 0x66, 0xa5, 0xc6, 0x36, 0x1a, 0xc4, 0xf6, 0x43, 0x65, 0xce, 0x50, 0x07, 0xde, 0x53, 0x37, 0x2d, 0x17, 0xe8, 0xfe, 0x8d, 0x16, 0xc9, 0xfc, 0xf4, 0x09, 0xc2, 0xde, 0x23, 0x35, 0x4f, 0x41, 0x1a, 0x30, 0x02, 0x81, 0x96, 0x50, 0x25, 0xcb, 0xd8, 0x63, 0xa1, 0x7a, 0xa8, 0xa0, 0x1e, 0xa0, 0x9a, 0xde, 0x6c, 0xe2, 0x90, 0x04, 0x21, 0x8a, 0x80, 0xc1, 0x84, 0xd7, 0x77, 0x7d, 0xaa, 0x97, 0xde, 0x8f, 0xdf, 0xf8, 0xfd, 0xb0, 0x48, 0x9c, 0xbd, 0xaf, 0xc6, 0xeb, 0xb2, 0x67, 0x1c, 0xad, 0x58, 0xef, 0x55, 0xd8, 0x9d, 0x10, 0x60, 0xa6, 0xa0, 0xfc, 0xfe, 0xeb, 0xb9, 0x3c, 0xde, 0xa6, 0xb9, 0xeb, 0x05, 0xd6, 0x73, 0x22, 0x74, 0x8f, 0x7b, 0xb3, 0x05, 0x4c, 0x2d, 0x1a, 0x97, 0x87, 0xf1, 0xb0, 0x6a, 0x87, 0xbe, 0x22, 0xcc, 0x7a, 0xdd, 0x22 ],
-const [ 0x1d, 0xc0, 0x26, 0xb6, 0xad, 0xff, 0xd6, 0x9b, 0x60, 0x05, 0xab, 0xa5, 0xe5, 0xd1, 0x79, 0xec, 0x42, 0x62, 0x0f, 0x8c, 0x75, 0xcc, 0x04, 0x56, 0x5b, 0x8a, 0xb4, 0xc6, 0xd2, 0x16, 0x85, 0x35, 0x1a, 0xb7, 0x6f, 0x50, 0x82, 0x9a, 0xbb, 0xc9, 0x40, 0x25, 0x0a, 0x4d, 0xa0, 0x88, 0x9a, 0xb5, 0x61, 0x95, 0xc5, 0x80, 0x5b, 0xd1, 0xca, 0x81, 0x66, 0xcb, 0xd0, 0xd5, 0x78, 0xac, 0x28, 0x18, 0x0d, 0x10, 0xd3, 0xd8, 0xcc, 0x14, 0x44, 0x4a, 0x67, 0xb0, 0x66, 0x3c, 0xc3, 0x48, 0xe1, 0x4b, 0x59, 0x7d, 0x9a, 0x56, 0xdc, 0x49, 0x78, 0x33, 0x1b, 0x4b, 0x6e, 0xa0, 0x2a, 0x5f, 0xb6, 0x7c, 0xbc, 0x72, 0x5a, 0x37, 0xd4, 0x95, 0xf9, 0x87, 0x9d, 0x4f, 0xc8, 0x5c, 0x95, 0x38, 0xd7, 0x17, 0xf1, 0xc3, 0x96, 0xf6, 0x3e, 0x5c, 0x97, 0xd3, 0x44, 0xb3, 0x95, 0x0f, 0x2f, 0x57, 0xb6, 0xc9 ],
-const [ 0x8a, 0x7f, 0xdf, 0x73, 0x4f, 0xe3, 0xe0, 0x30, 0x17, 0xce, 0x96, 0xe9, 0xa1, 0x54, 0xd7, 0xe6, 0xa2, 0xa5, 0x25, 0x78, 0xba, 0x33, 0x3b, 0x3a, 0xa7, 0x13, 0xe6, 0x97, 0xb9, 0xa6, 0x16, 0x8c, 0x85, 0x78, 0x35, 0xaf, 0xde, 0x68, 0xb7, 0x71, 0x01, 0x0a, 0xf3, 0xa0, 0x10, 0x49, 0x31, 0x30, 0xc2, 0x51, 0x04, 0x3a, 0x58, 0xac, 0xda, 0x45, 0xd3, 0xaa, 0xd1, 0xc5, 0x64, 0x07, 0xcc, 0xe1, 0x24, 0xc8, 0xc7, 0x79, 0x05, 0x66, 0x67, 0x68, 0x08, 0x2e, 0xd5, 0x06, 0xb1, 0xe8, 0xcd, 0xf1, 0xb9, 0xb7, 0xf2, 0x0e, 0x02, 0x40, 0x65, 0xca, 0xd0, 0x0e, 0x95, 0xa6, 0x35, 0x35, 0x59, 0xf2, 0xcd, 0x36, 0x3c, 0xd8, 0xac, 0x23, 0x17, 0x9d, 0x95, 0x04, 0xe6, 0x24, 0x6c, 0x78, 0xd4, 0xb4, 0xee, 0xa0, 0x98, 0xfa, 0xa0, 0x38, 0x04, 0x52, 0x05, 0x07, 0xdb, 0x42, 0x14, 0x7a, 0xe4, 0x47 ],
-const [ 0x0e, 0x0e, 0x09, 0x15, 0x2c, 0xa3, 0xb8, 0xf9, 0xe7, 0x7d, 0x4f, 0x07, 0x81, 0xa0, 0x50, 0x0b, 0xa7, 0xd8, 0xe5, 0xd2, 0x02, 0xfd, 0x18, 0x8e, 0x09, 0x76, 0x46, 0x7b, 0x19, 0xfc, 0xd1, 0xc3, 0xc7, 0xa0, 0x16, 0xa0, 0x75, 0x10, 0x9f, 0xc0, 0x23, 0x16, 0x99, 0xed, 0x88, 0x61, 0x88, 0xed, 0x61, 0x88, 0x39, 0xa7, 0x0a, 0x4c, 0xf8, 0x88, 0x4b, 0x1e, 0x04, 0x25, 0x74, 0xe1, 0x40, 0x22, 0xac, 0xf0, 0x2b, 0x52, 0x86, 0x63, 0x12, 0x1f, 0xd5, 0x8e, 0x85, 0x2d, 0xc2, 0xcb, 0x07, 0x3a, 0x1b, 0x7a, 0x09, 0x49, 0xee, 0x45, 0x1a, 0xff, 0x57, 0xa9, 0x58, 0x4d, 0x96, 0xb1, 0x2a, 0x4f, 0x64, 0x05, 0x31, 0x74, 0x88, 0x24, 0x7b, 0xe0, 0xa5, 0xee, 0xfa, 0x0e, 0x56, 0x65, 0x35, 0xba, 0x7c, 0xb4, 0x3e, 0xfe, 0xd7, 0x71, 0xe4, 0xbb, 0xd4, 0x1f, 0x29, 0x3a, 0xa6, 0xf7, 0xf7, 0x13 ],
-const [ 0x35, 0xa2, 0xb3, 0x69, 0xb9, 0xe1, 0xd7, 0x99, 0x93, 0x54, 0xb2, 0xa6, 0xd3, 0xa2, 0xe3, 0x01, 0x35, 0x5f, 0x3d, 0x83, 0x3e, 0xd2, 0x77, 0x55, 0x88, 0xfc, 0x25, 0x0d, 0x5b, 0xd5, 0xe7, 0x19, 0x7c, 0xd9, 0xe1, 0x61, 0x4a, 0xc3, 0x6b, 0x28, 0x06, 0x99, 0x09, 0x33, 0x73, 0xe8, 0x9d, 0x2e, 0x9f, 0x51, 0xdb, 0x4b, 0x00, 0x44, 0xfe, 0x2c, 0xc2, 0x0c, 0xb9, 0x03, 0x60, 0x0c, 0x71, 0xf8, 0x72, 0x48, 0xa9, 0xcb, 0xc6, 0x27, 0xbe, 0xba, 0xb1, 0x77, 0xd4, 0xa5, 0xa7, 0xb1, 0x10, 0x70, 0x0a, 0x7e, 0x08, 0xa9, 0x40, 0x7b, 0x77, 0x6a, 0x08, 0x39, 0x36, 0x81, 0x0e, 0x89, 0x67, 0xcf, 0xbd, 0xf6, 0xf3, 0xee, 0x54, 0x92, 0x38, 0x17, 0x3c, 0xf6, 0xfb, 0x42, 0x99, 0x84, 0xa4, 0x8e, 0x1f, 0xef, 0xaa, 0xe4, 0x26, 0xfe, 0x4c, 0xd7, 0x01, 0x8c, 0x82, 0xcf, 0x8c, 0xd4, 0x33, 0x67 ],
-const [ 0x18, 0x9a, 0xed, 0x1c, 0x0c, 0xf7, 0x70, 0x08, 0x29, 0x33, 0x3e, 0x57, 0x51, 0xbf, 0xd7, 0x18, 0xa4, 0x45, 0x08, 0x79, 0xe8, 0x83, 0x6a, 0x3a, 0x2e, 0x5a, 0x2d, 0x61, 0xb2, 0x22, 0x13, 0x2e, 0x04, 0x41, 0xbf, 0x51, 0x65, 0xfc, 0x30, 0x5b, 0x74, 0x8d, 0x89, 0x73, 0x0a, 0x75, 0x13, 0x4a, 0x62, 0x13, 0x84, 0x51, 0x7d, 0x76, 0x82, 0x29, 0xc4, 0x70, 0x63, 0x5a, 0xf0, 0xeb, 0x37, 0x49, 0x27, 0x80, 0x08, 0x64, 0x67, 0x46, 0x60, 0xa0, 0x28, 0xe8, 0x0c, 0x25, 0x3d, 0xfb, 0x20, 0x47, 0xfc, 0x8e, 0x3b, 0xb9, 0x9e, 0x02, 0x0c, 0xfd, 0xe9, 0x1c, 0x15, 0x1f, 0x0c, 0x58, 0xaf, 0xa3, 0xca, 0x80, 0x4f, 0xbc, 0xda, 0x7e, 0x07, 0xbf, 0x8e, 0x6f, 0x50, 0xd6, 0xb4, 0xf8, 0x06, 0xf9, 0xba, 0xdd, 0xb4, 0x1a, 0x15, 0xcf, 0x12, 0xa0, 0xe2, 0x86, 0xcc, 0x17, 0xce, 0x10, 0x85, 0x26 ],
-const [ 0xf0, 0x8d, 0xac, 0x1d, 0x4d, 0x6a, 0x7a, 0xc4, 0x67, 0x2b, 0x44, 0x7a, 0x46, 0xcb, 0xeb, 0x31, 0x62, 0xf2, 0x47, 0xea, 0x09, 0xc6, 0xb4, 0x29, 0x00, 0x04, 0xcd, 0xa6, 0x6d, 0x4f, 0x77, 0x46, 0xf4, 0xc8, 0x22, 0x49, 0x21, 0xde, 0x4b, 0xc5, 0x06, 0x68, 0x45, 0x53, 0x25, 0xf1, 0x3a, 0x08, 0x90, 0x52, 0x6d, 0xa7, 0x4e, 0x87, 0xc1, 0x14, 0x01, 0xbb, 0x7f, 0x0c, 0xc6, 0xa5, 0x54, 0x14, 0x5d, 0x17, 0x99, 0xaf, 0x8a, 0xd4, 0xd7, 0xd4, 0xba, 0xa3, 0x8b, 0x9f, 0xea, 0xa1, 0x26, 0x47, 0xc5, 0xdb, 0x58, 0x50, 0x0c, 0x1c, 0x8e, 0x02, 0x3b, 0x04, 0xba, 0x19, 0x6a, 0x5a, 0x52, 0xbe, 0x71, 0xa3, 0x9b, 0xb6, 0x4f, 0xf4, 0x27, 0xda, 0xcd, 0x04, 0x9c, 0xc7, 0x5e, 0x85, 0xb8, 0xd6, 0x4a, 0xb5, 0x92, 0x4f, 0x0b, 0x30, 0x23, 0xd9, 0xf7, 0x08, 0x04, 0x35, 0x20, 0x17, 0x79, 0x2c ],
-const [ 0x8c, 0x84, 0x81, 0x0e, 0x4c, 0x90, 0xbf, 0x6e, 0x1e, 0x88, 0xc8, 0xb9, 0x44, 0x39, 0x8b, 0x35, 0xc4, 0x22, 0xd4, 0x8c, 0x6a, 0x70, 0x70, 0x68, 0x0c, 0x2d, 0x91, 0x3f, 0x11, 0xb4, 0x74, 0x71, 0x34, 0x68, 0x40, 0x90, 0x86, 0xa5, 0x32, 0xfe, 0xb2, 0xf7, 0xf7, 0xbe, 0x85, 0x8a, 0x59, 0x84, 0xae, 0xe2, 0x1e, 0x0e, 0xc2, 0xcc, 0x2d, 0xb7, 0x83, 0x95, 0xf3, 0x4a, 0x61, 0x79, 0x05, 0x14, 0x41, 0x5e, 0x07, 0x3d, 0x7e, 0xc3, 0xcc, 0x58, 0x2d, 0xf3, 0xbe, 0x38, 0xa6, 0x7e, 0x81, 0x05, 0x40, 0xe9, 0xd3, 0x90, 0x5b, 0xa5, 0xb7, 0xe4, 0xa4, 0x3e, 0xd2, 0x1e, 0x94, 0xd5, 0x15, 0x7e, 0x3a, 0xd0, 0x9c, 0xbd, 0x3b, 0xd0, 0xd6, 0xa1, 0x17, 0xe3, 0xe7, 0xd0, 0xad, 0xfc, 0x4a, 0xe2, 0x02, 0xa0, 0xbb, 0xb9, 0x3e, 0xe1, 0x54, 0x15, 0xf7, 0x90, 0xf6, 0x63, 0xb2, 0xaf, 0xea, 0xd6 ],
-const [ 0x8e, 0xcd, 0xcd, 0x81, 0x76, 0xd8, 0xa1, 0x64, 0xf6, 0x25, 0x97, 0x33, 0xbc, 0x77, 0xef, 0x78, 0x3b, 0x48, 0xd4, 0x0c, 0xff, 0xc5, 0x47, 0x35, 0x3d, 0x19, 0x59, 0x12, 0xaf, 0xee, 0x9d, 0x39, 0x9e, 0x31, 0xdd, 0x9e, 0x41, 0x16, 0x0c, 0xb7, 0x45, 0x5d, 0x7c, 0xdd, 0xad, 0xd3, 0x51, 0xf6, 0xdc, 0x1b, 0x36, 0x51, 0xf0, 0xae, 0x4e, 0xd1, 0x52, 0x21, 0x6d, 0x4e, 0x8b, 0xa7, 0x89, 0x38, 0x5a, 0xd6, 0x6b, 0x7d, 0x03, 0xae, 0xaa, 0xad, 0xe9, 0xd7, 0xda, 0x5d, 0x5f, 0x2a, 0x01, 0xc9, 0xbc, 0x73, 0x4a, 0xbd, 0xad, 0x75, 0xfe, 0xb5, 0xd0, 0x2f, 0xaf, 0x43, 0x7e, 0x5e, 0xb7, 0xb1, 0xe8, 0x43, 0xe1, 0xe7, 0x65, 0xa6, 0x65, 0x90, 0x0a, 0x1b, 0x1a, 0x79, 0x7c, 0x84, 0xe7, 0x39, 0x02, 0xd7, 0x7a, 0x17, 0xde, 0x22, 0x3d, 0x28, 0xde, 0xcc, 0x86, 0xb8, 0x2e, 0x1d, 0x0f, 0xeb ],
-const [ 0x1c, 0x43, 0x96, 0xf7, 0xb7, 0xf9, 0x22, 0x8e, 0x83, 0x2a, 0x13, 0x69, 0x20, 0x02, 0xba, 0x2a, 0xff, 0x43, 0x9d, 0xcb, 0x7f, 0xdd, 0xbf, 0xd4, 0x56, 0xc0, 0x22, 0xd1, 0x33, 0xee, 0x89, 0x03, 0xa2, 0xd4, 0x82, 0x56, 0x2f, 0xda, 0xa4, 0x93, 0xce, 0x39, 0x16, 0xd7, 0x7a, 0x0c, 0x51, 0x44, 0x1d, 0xab, 0x26, 0xf6, 0xb0, 0x34, 0x02, 0x38, 0xa3, 0x6a, 0x71, 0xf8, 0x7f, 0xc3, 0xe1, 0x79, 0xca, 0xbc, 0xa9, 0x48, 0x2b, 0x70, 0x49, 0x71, 0xce, 0x69, 0xf3, 0xf2, 0x0a, 0xb6, 0x4b, 0x70, 0x41, 0x3d, 0x6c, 0x29, 0x08, 0x53, 0x2b, 0x2a, 0x88, 0x8a, 0x9f, 0xc2, 0x24, 0xca, 0xe1, 0x36, 0x5d, 0xa4, 0x10, 0xb6, 0xf2, 0xe2, 0x98, 0x90, 0x4b, 0x63, 0xb4, 0xa4, 0x17, 0x26, 0x32, 0x18, 0x35, 0xa4, 0x77, 0x4d, 0xd0, 0x63, 0xc2, 0x11, 0xcf, 0xc8, 0xb5, 0x16, 0x6c, 0x2d, 0x11, 0xa2 ],
-const [ 0x7c, 0x28, 0x7c, 0xa5, 0x2d, 0x40, 0xf5, 0x3f, 0x92, 0xb0, 0x04, 0x32, 0x98, 0x45, 0x95, 0xcd, 0x20, 0xe6, 0x44, 0x49, 0x4a, 0xc7, 0xc3, 0xa4, 0xf3, 0xe0, 0x7c, 0xad, 0x7c, 0x9e, 0x78, 0x5b, 0xcd, 0xd8, 0x80, 0x62, 0x9a, 0x04, 0x82, 0x08, 0xe5, 0xab, 0x36, 0x35, 0xc5, 0x1a, 0x00, 0xca, 0x65, 0x5b, 0x19, 0x34, 0x4f, 0x63, 0xea, 0x41, 0xeb, 0x8d, 0xb8, 0x32, 0x42, 0x47, 0x86, 0x11, 0x08, 0x0b, 0x37, 0x45, 0xda, 0x92, 0xf4, 0x63, 0xc4, 0x44, 0xcd, 0x47, 0x06, 0xf2, 0xa3, 0x64, 0x18, 0xc7, 0x45, 0x58, 0xeb, 0x7c, 0xd9, 0xc3, 0x72, 0xcc, 0x7e, 0x5a, 0x61, 0x28, 0x2f, 0x37, 0x35, 0xab, 0xea, 0x73, 0x74, 0x50, 0x12, 0xf7, 0x36, 0x63, 0x13, 0x8f, 0xe4, 0x35, 0x44, 0x41, 0x40, 0x14, 0x11, 0xdc, 0xa5, 0x7a, 0x59, 0xd3, 0x90, 0x85, 0x15, 0x4c, 0x60, 0xa7, 0x3b, 0x75 ],
-const [ 0xdd, 0x3e, 0x68, 0xb7, 0x57, 0xff, 0xe0, 0x60, 0x68, 0xe5, 0x20, 0x05, 0x88, 0x9b, 0xfb, 0xc1, 0xb4, 0x3b, 0xf0, 0xa1, 0x11, 0x64, 0xf3, 0x5c, 0xd3, 0x8d, 0x71, 0x3e, 0x5d, 0x99, 0x8e, 0x66, 0xa9, 0xab, 0xb1, 0x31, 0xeb, 0x3b, 0x42, 0xf6, 0x71, 0x6a, 0xb2, 0xf4, 0xce, 0x92, 0xbc, 0x88, 0x37, 0x22, 0xeb, 0xa4, 0x2d, 0xa9, 0x5d, 0x7c, 0x5d, 0x30, 0xc6, 0x82, 0xc4, 0xcd, 0xb7, 0x95, 0x16, 0x75, 0x21, 0x75, 0x61, 0x12, 0x15, 0x7b, 0xed, 0xd5, 0xcd, 0x87, 0x68, 0xce, 0xf0, 0x39, 0x3f, 0xba, 0x12, 0x64, 0x4f, 0x1c, 0x7a, 0xbf, 0xbd, 0x8f, 0x29, 0xde, 0x22, 0x5a, 0x18, 0x61, 0xec, 0x45, 0xc0, 0x6c, 0x01, 0xab, 0xdf, 0x57, 0xa5, 0xd1, 0x7a, 0xa6, 0x9d, 0x76, 0x1e, 0x3b, 0x94, 0xab, 0x6c, 0xca, 0xbf, 0xe5, 0xd5, 0x8e, 0xbd, 0x51, 0xa1, 0x3a, 0xc1, 0x67, 0x36, 0x33 ],
-const [ 0x0a, 0x20, 0xbb, 0x48, 0xb5, 0xa3, 0xe4, 0xf4, 0x7b, 0x2f, 0xe7, 0x31, 0x2c, 0x22, 0x3c, 0xec, 0x12, 0x71, 0x93, 0x62, 0x81, 0xeb, 0x0a, 0x88, 0xaf, 0xc2, 0xa2, 0xaa, 0xc6, 0x47, 0xf4, 0x52, 0x38, 0xf5, 0x20, 0x6b, 0x53, 0xb1, 0x07, 0xa6, 0x15, 0x50, 0xba, 0x1d, 0x41, 0x5a, 0x31, 0x37, 0xb2, 0x0d, 0x41, 0xcb, 0xf0, 0xa5, 0xc8, 0x88, 0x01, 0xdb, 0x2b, 0x94, 0x82, 0xac, 0x02, 0x73, 0xf6, 0x5b, 0x11, 0x2b, 0x5d, 0xb9, 0x7b, 0xa5, 0x09, 0xa4, 0x32, 0x57, 0xad, 0xce, 0xb2, 0x20, 0xb7, 0xc0, 0xef, 0x73, 0xdf, 0x1e, 0x8b, 0xb8, 0x00, 0x2c, 0x4d, 0xef, 0x27, 0x91, 0xcf, 0x97, 0xea, 0x5b, 0x76, 0xce, 0xfc, 0x44, 0xa7, 0xb9, 0xfe, 0x33, 0x38, 0x26, 0x97, 0x06, 0x25, 0x70, 0xc6, 0x8f, 0x85, 0xa3, 0x77, 0xdc, 0xbc, 0xe1, 0x55, 0xbc, 0xf1, 0x05, 0xe0, 0x7e, 0xc3, 0x85 ],
-const [ 0x16, 0x6c, 0xdb, 0xea, 0x93, 0x46, 0x94, 0x28, 0xe6, 0x6e, 0xfe, 0x85, 0x3b, 0x6c, 0x4d, 0xf9, 0xfb, 0x13, 0xdb, 0x05, 0xf4, 0x12, 0x6d, 0xea, 0xb4, 0xc5, 0xb8, 0x1a, 0x35, 0x51, 0x24, 0xec, 0xc0, 0xef, 0xcf, 0x93, 0x0b, 0x88, 0xd5, 0x51, 0xa5, 0x83, 0xcf, 0xe8, 0x93, 0xdb, 0x99, 0x52, 0x3c, 0x74, 0x59, 0xb1, 0x82, 0xaf, 0xbc, 0x89, 0x32, 0x3c, 0x83, 0x2d, 0x9e, 0x2f, 0x3f, 0x77, 0x88, 0x56, 0x58, 0xbc, 0x42, 0xca, 0x54, 0xff, 0x14, 0xc5, 0x56, 0x65, 0xde, 0xb3, 0xe5, 0xe9, 0xfe, 0x8c, 0xef, 0x51, 0x74, 0x60, 0x0e, 0x61, 0x44, 0x34, 0x09, 0x4e, 0x1c, 0x0c, 0x9e, 0x76, 0x37, 0x49, 0x7f, 0x4d, 0x81, 0x35, 0x9a, 0x9b, 0xfc, 0xdd, 0x9d, 0xe5, 0x62, 0x1f, 0xba, 0x28, 0x0c, 0x03, 0xa8, 0xce, 0x12, 0x4f, 0xea, 0xda, 0xb4, 0x55, 0x53, 0x66, 0xf9, 0x10, 0xca, 0x4f ],
-const [ 0xc2, 0x41, 0x2a, 0x6d, 0x1d, 0x52, 0xd1, 0x2c, 0x0a, 0x54, 0xb8, 0xf5, 0x70, 0x1e, 0xa5, 0x8a, 0xda, 0xa1, 0x1a, 0x76, 0x7a, 0xd5, 0x7a, 0x9e, 0x6f, 0xf4, 0x6c, 0x19, 0x43, 0xe7, 0x84, 0x41, 0xb8, 0xfd, 0x21, 0x0a, 0xc4, 0xe3, 0x91, 0x93, 0xda, 0xd1, 0x7c, 0xfb, 0x6b, 0x01, 0x7f, 0x76, 0xad, 0x65, 0x17, 0xa0, 0x9b, 0x99, 0xc1, 0x11, 0x3d, 0x17, 0x5f, 0x31, 0x29, 0xaa, 0xde, 0x4d, 0x4a, 0x25, 0x16, 0xeb, 0xe0, 0x54, 0xf1, 0x5b, 0xc8, 0x33, 0xd0, 0x8f, 0xfe, 0x5e, 0x2a, 0x2d, 0x60, 0xc9, 0x76, 0xe1, 0xb4, 0xb1, 0x4c, 0xf8, 0xed, 0xd2, 0xc7, 0x2b, 0xaa, 0xdb, 0x2d, 0xb8, 0x00, 0x1f, 0xd2, 0xb8, 0x79, 0x8d, 0x39, 0xac, 0x5c, 0xe2, 0x7d, 0x59, 0x2f, 0x1d, 0xef, 0xd6, 0x7b, 0x33, 0x01, 0xe3, 0xcf, 0x05, 0x63, 0x7c, 0x07, 0x8f, 0x6b, 0xae, 0xce, 0x62, 0xba, 0xaa ],
-const [ 0x77, 0x51, 0x7d, 0xbf, 0xda, 0x50, 0x49, 0x3a, 0x04, 0x44, 0x5d, 0x72, 0x43, 0x0e, 0xa3, 0xf6, 0xfd, 0x54, 0xbb, 0x31, 0xfc, 0x81, 0xf2, 0x92, 0x0a, 0x0d, 0x72, 0xea, 0xbe, 0xfe, 0xb6, 0x15, 0x95, 0xaf, 0x41, 0xdc, 0x44, 0xd0, 0x90, 0x1a, 0x4d, 0xae, 0x4d, 0x1e, 0xd1, 0xb4, 0xc5, 0x51, 0xa5, 0x32, 0x9c, 0x18, 0xa8, 0x5e, 0xbf, 0xfc, 0x53, 0x99, 0x9b, 0x09, 0x91, 0xf3, 0x8d, 0x73, 0xd1, 0xf0, 0x99, 0x80, 0x5a, 0x8d, 0x5e, 0xa1, 0xdf, 0x7e, 0x49, 0xe2, 0x54, 0xba, 0x0a, 0x85, 0x00, 0x39, 0x44, 0xea, 0xd2, 0xfc, 0x89, 0xb3, 0xf8, 0x4f, 0x85, 0x25, 0xae, 0x4b, 0x79, 0xd0, 0x54, 0x9e, 0xec, 0x72, 0xc4, 0x8f, 0x9d, 0x19, 0xe2, 0x3c, 0xbb, 0x88, 0x75, 0x26, 0x58, 0xdc, 0x35, 0xf0, 0x1c, 0x6f, 0x24, 0x64, 0x36, 0xfd, 0x22, 0xb7, 0x98, 0x05, 0xbc, 0x0e, 0x64, 0x72 ],
-const [ 0xe8, 0x8b, 0x88, 0x54, 0x5a, 0xf5, 0x4f, 0x35, 0x59, 0x59, 0x42, 0x39, 0xf0, 0xe4, 0xf0, 0x85, 0x47, 0x70, 0xd5, 0x76, 0xd3, 0xf0, 0x2c, 0x2a, 0xca, 0x0f, 0x05, 0x43, 0xda, 0x14, 0x97, 0xe7, 0x1a, 0x09, 0xd7, 0x0b, 0x41, 0x1c, 0x4a, 0xf2, 0x16, 0x45, 0x17, 0xf0, 0x27, 0x29, 0x60, 0x74, 0xbe, 0x3f, 0xd2, 0x46, 0x11, 0x31, 0x7b, 0x0c, 0xb9, 0x85, 0xdc, 0x13, 0x65, 0x7c, 0x40, 0x4c, 0xd0, 0x3a, 0x4c, 0x95, 0xf0, 0x28, 0xd6, 0x3a, 0x71, 0x97, 0xfb, 0xbc, 0x61, 0xa6, 0x6b, 0xd1, 0x2d, 0x65, 0x08, 0xab, 0xcc, 0x3a, 0xb0, 0x7d, 0x3a, 0x84, 0x56, 0x3c, 0x28, 0x7f, 0x58, 0xa3, 0xf2, 0x68, 0x0c, 0x79, 0xd1, 0xe1, 0x9c, 0x16, 0x52, 0x96, 0x15, 0x24, 0x06, 0x21, 0xba, 0xa3, 0x7b, 0x2b, 0x9e, 0x2f, 0x6c, 0xd4, 0x72, 0x86, 0x35, 0x55, 0x9b, 0x45, 0x89, 0xe4, 0x88, 0xf2 ],
-const [ 0x02, 0x14, 0x0f, 0x7b, 0x50, 0xf2, 0x60, 0x09, 0x61, 0xce, 0xd8, 0xb3, 0x6d, 0xd4, 0x8b, 0x8e, 0x3f, 0x70, 0xc2, 0x10, 0x8c, 0x55, 0xef, 0x2d, 0x83, 0xc4, 0xe6, 0xc0, 0xa5, 0x0b, 0x49, 0x2d, 0xd7, 0x4c, 0x44, 0x44, 0xb5, 0x7f, 0x7b, 0x69, 0x2a, 0xba, 0x41, 0xf2, 0x3d, 0xb0, 0x0b, 0xd1, 0x2e, 0x79, 0x24, 0x73, 0xc2, 0x91, 0xa2, 0xe8, 0xdb, 0x22, 0x98, 0x43, 0x4b, 0x86, 0x8d, 0x44, 0xea, 0x07, 0x2d, 0x34, 0xe7, 0xea, 0x3f, 0x11, 0x5b, 0xad, 0xd7, 0xeb, 0x24, 0x8c, 0xcd, 0x8e, 0xf0, 0x4a, 0x6d, 0x61, 0x98, 0x2d, 0x70, 0x8e, 0xb0, 0x4b, 0x2c, 0x63, 0x5c, 0x04, 0x07, 0xf9, 0x64, 0xd0, 0x31, 0x13, 0x8b, 0x3b, 0x93, 0x48, 0x1d, 0x2d, 0x02, 0x65, 0xc8, 0x6f, 0xb9, 0x0d, 0xac, 0x6b, 0x06, 0xa2, 0xb5, 0x33, 0x43, 0x69, 0x29, 0xc5, 0x08, 0xe8, 0x7d, 0x8e, 0x9f, 0x93 ],
-const [ 0x7b, 0x7b, 0xa2, 0xa8, 0x54, 0x84, 0x0b, 0x24, 0xfd, 0x75, 0xae, 0x12, 0xeb, 0xc2, 0xc6, 0x14, 0x4b, 0xb2, 0x06, 0x5c, 0x95, 0xab, 0xd3, 0x11, 0x64, 0xb0, 0xb0, 0xf5, 0x85, 0x28, 0xfa, 0x46, 0x4e, 0xe1, 0xd5, 0xe2, 0x31, 0x54, 0x66, 0xae, 0x91, 0x2b, 0x43, 0x37, 0xd3, 0x00, 0x27, 0x9a, 0xb9, 0x68, 0xeb, 0xa2, 0xeb, 0x30, 0xb1, 0x31, 0xd7, 0xe6, 0x63, 0xe1, 0xbb, 0x9b, 0x5c, 0xea, 0x00, 0xe8, 0x64, 0x47, 0xca, 0x2f, 0xe2, 0x14, 0xcd, 0x23, 0x4d, 0x3b, 0x62, 0x8b, 0xe4, 0x4f, 0xda, 0x43, 0x9f, 0xb8, 0x12, 0x83, 0x65, 0x11, 0x47, 0x63, 0x7f, 0xce, 0x2c, 0x9f, 0x4d, 0x22, 0x3a, 0x98, 0x37, 0x20, 0x48, 0x9c, 0xe7, 0x20, 0x5b, 0x67, 0xb5, 0x64, 0xbf, 0xea, 0x63, 0xfb, 0x57, 0x4b, 0x0b, 0xe6, 0x31, 0x2c, 0x55, 0x7a, 0x5d, 0x30, 0xed, 0x05, 0x00, 0xbb, 0x35, 0xb4 ],
-const [ 0xc1, 0xe9, 0x69, 0xae, 0x81, 0x50, 0x7c, 0xe3, 0xdd, 0x94, 0xef, 0x0a, 0x21, 0xda, 0x24, 0x93, 0x51, 0x29, 0xda, 0xce, 0xca, 0x79, 0xf3, 0xa4, 0x27, 0x0d, 0x7a, 0x85, 0x62, 0x03, 0xe4, 0xa1, 0x3b, 0x2a, 0x96, 0x5b, 0xde, 0x13, 0xa8, 0xfa, 0xc0, 0x6b, 0xe9, 0xa2, 0xca, 0x87, 0x23, 0x84, 0xb9, 0x41, 0xa0, 0x51, 0xc5, 0x03, 0xec, 0xf4, 0x80, 0x21, 0xdd, 0x80, 0x02, 0x6c, 0xd1, 0x67, 0x43, 0x04, 0x37, 0xee, 0xc8, 0x6d, 0x51, 0xdd, 0x82, 0xe5, 0x37, 0x7b, 0xf3, 0xf5, 0x20, 0xb9, 0x92, 0x47, 0xdd, 0xae, 0x71, 0xb7, 0xa6, 0x43, 0x1d, 0xac, 0x19, 0x30, 0xc5, 0xa9, 0x80, 0x27, 0x9f, 0x1f, 0x53, 0x4e, 0x88, 0x86, 0xfe, 0xf3, 0xeb, 0xab, 0xe3, 0x7c, 0xe3, 0x4c, 0xa3, 0x9c, 0xa4, 0xe2, 0x99, 0xcd, 0x17, 0xbe, 0xa8, 0xfa, 0xc4, 0x57, 0x37, 0x7b, 0xf5, 0xe3, 0x79, 0x47 ],
-const [ 0x09, 0xca, 0xed, 0xbd, 0x55, 0x68, 0xcc, 0x3a, 0xd0, 0x59, 0x0b, 0x7d, 0x40, 0x9f, 0xbc, 0x26, 0x54, 0x7a, 0x2a, 0x20, 0xd9, 0xd0, 0xb2, 0x26, 0x30, 0xd2, 0xd5, 0x85, 0x00, 0xdd, 0x8b, 0x23, 0x28, 0x9e, 0xd9, 0xc0, 0xf8, 0x7a, 0xa5, 0x7c, 0xa0, 0x2d, 0xca, 0x99, 0xe8, 0xb1, 0x68, 0x83, 0x22, 0x61, 0x7d, 0x0d, 0x5d, 0x5e, 0xba, 0xfe, 0xdc, 0x32, 0x8f, 0xcc, 0xc7, 0xb3, 0x89, 0xa7, 0x1f, 0x2a, 0xdd, 0xb9, 0xf7, 0xb5, 0x45, 0xad, 0xe2, 0xea, 0x0a, 0x6e, 0xa8, 0xbd, 0x62, 0x31, 0x3d, 0xa4, 0xfd, 0xb5, 0xf3, 0xf9, 0xdb, 0xc9, 0xee, 0x9f, 0x60, 0x10, 0xd8, 0xe8, 0xaa, 0x01, 0xd7, 0xb6, 0x22, 0x31, 0xbc, 0xe1, 0x51, 0xd5, 0x7e, 0xd9, 0xf6, 0x82, 0xe6, 0x8d, 0x55, 0x38, 0x8b, 0x8b, 0xd1, 0x9f, 0x01, 0x68, 0xbd, 0x90, 0x4e, 0x62, 0x70, 0xd7, 0x9d, 0x44, 0x97, 0x38 ],
-const [ 0x08, 0xdf, 0x48, 0x71, 0x3d, 0xb1, 0xb8, 0xab, 0x2b, 0x51, 0xe0, 0x5c, 0xde, 0x25, 0xdc, 0x3d, 0xfb, 0xce, 0x1b, 0x12, 0x04, 0x5b, 0xc1, 0x81, 0xd8, 0xbc, 0x49, 0x24, 0x79, 0x79, 0x6f, 0xdd, 0x12, 0xa4, 0x4d, 0x6a, 0x39, 0x0c, 0xc4, 0x39, 0x71, 0xb3, 0x1d, 0x7d, 0xf3, 0x82, 0xf0, 0x81, 0xae, 0x3c, 0x45, 0x3c, 0x8c, 0xb1, 0xfa, 0x27, 0xf7, 0x34, 0x65, 0x4b, 0x9c, 0x4e, 0x39, 0x9e, 0x6e, 0xb4, 0xae, 0x8f, 0xee, 0x77, 0xdc, 0xe0, 0xaa, 0x7b, 0x68, 0xb4, 0x04, 0x2a, 0x63, 0xe9, 0x35, 0x69, 0x6f, 0xa7, 0x92, 0xcb, 0x24, 0x39, 0x0d, 0x05, 0xb2, 0x1c, 0xfe, 0xa3, 0xc7, 0x56, 0x24, 0xf9, 0xb3, 0x09, 0xe6, 0x5b, 0xca, 0x48, 0xdf, 0x91, 0x09, 0x29, 0x9a, 0x85, 0xfd, 0x1c, 0x9a, 0x3f, 0xe1, 0x7b, 0x9e, 0x13, 0x07, 0x62, 0x23, 0x19, 0x79, 0xc0, 0x29, 0xde, 0xdf, 0xae ],
-const [ 0xa2, 0x04, 0xbe, 0x1f, 0xc0, 0x43, 0x72, 0xee, 0xd3, 0xc9, 0xe5, 0xcc, 0xd1, 0x43, 0x5a, 0x02, 0xb3, 0x57, 0x31, 0x7e, 0x78, 0x96, 0x0b, 0x6e, 0x6c, 0xac, 0x2f, 0x0e, 0xaa, 0xda, 0x2d, 0xbe, 0xe0, 0xa7, 0xc1, 0x58, 0x52, 0xd2, 0xf9, 0xc0, 0x22, 0x8a, 0x9a, 0xbd, 0xce, 0xe1, 0xc1, 0x07, 0xfa, 0x7f, 0xc6, 0xa1, 0x70, 0x93, 0x65, 0x68, 0x65, 0x10, 0x20, 0xed, 0xfe, 0x15, 0xdf, 0x80, 0x12, 0xac, 0xda, 0x8d, 0x32, 0xb8, 0xb8, 0x2c, 0xe6, 0x29, 0xf8, 0xf3, 0x3a, 0x72, 0x91, 0x0e, 0x79, 0x3d, 0xd5, 0x92, 0x39, 0x5d, 0x9b, 0x0f, 0x97, 0x04, 0x9d, 0x65, 0xc4, 0x36, 0x1f, 0xd8, 0xc1, 0x7d, 0xd2, 0x66, 0x66, 0xdf, 0xf7, 0x57, 0xa9, 0x0d, 0xc7, 0x17, 0x1d, 0xdd, 0x13, 0x41, 0xb9, 0xfa, 0x28, 0xfc, 0xdb, 0xda, 0xf5, 0x8a, 0x8c, 0xf1, 0x70, 0x1e, 0x06, 0x25, 0x35, 0xee ],
-const [ 0x28, 0xbe, 0x0d, 0x9e, 0x62, 0xdc, 0x89, 0xe2, 0xa9, 0x13, 0x06, 0x4c, 0x0d, 0x3d, 0xbf, 0xb3, 0x5a, 0x0c, 0x77, 0x66, 0xf7, 0x56, 0x74, 0x1b, 0x0e, 0xaf, 0xcc, 0x28, 0xed, 0x3d, 0xdf, 0xf6, 0xad, 0xc8, 0x25, 0xb2, 0x11, 0x11, 0x2a, 0x45, 0xb0, 0x65, 0xd6, 0x87, 0x57, 0x71, 0xf2, 0xaf, 0xa9, 0x58, 0xe8, 0x0f, 0x08, 0x03, 0xca, 0xfe, 0xb9, 0xb9, 0x96, 0x15, 0x42, 0xef, 0xb9, 0x9e, 0x17, 0x61, 0xd1, 0x49, 0x76, 0x61, 0xb7, 0x21, 0x90, 0x6f, 0xbd, 0xbf, 0xe9, 0x0b, 0x34, 0xbd, 0x01, 0xc7, 0x32, 0x6e, 0x34, 0xa0, 0x92, 0xcc, 0xdf, 0x8e, 0x3b, 0xb2, 0xc4, 0x5a, 0xa6, 0x4c, 0xb0, 0xb0, 0x9a, 0xcb, 0x5b, 0x75, 0x3a, 0x5d, 0x8f, 0x5a, 0x42, 0x5c, 0x8c, 0xb2, 0x8e, 0xc5, 0xac, 0x81, 0xdc, 0xed, 0x43, 0xd5, 0xd2, 0x6f, 0xc9, 0x59, 0x43, 0x69, 0x3b, 0x27, 0xae, 0xe8 ],
-const [ 0xfb, 0x09, 0x1d, 0xdd, 0x95, 0xb1, 0x00, 0xdf, 0xcf, 0x89, 0x2d, 0x78, 0xe5, 0xe7, 0x70, 0xd3, 0xa3, 0x7b, 0x8c, 0x38, 0x85, 0xdf, 0x80, 0x3c, 0x1d, 0x6f, 0x09, 0x35, 0xb5, 0x5b, 0x68, 0xf1, 0x36, 0xfb, 0x65, 0xa8, 0x48, 0x62, 0x94, 0x2e, 0xbb, 0x35, 0xd7, 0x6d, 0x26, 0xbe, 0x24, 0x13, 0xcd, 0x3c, 0x89, 0x88, 0xc8, 0x7d, 0x6d, 0x23, 0x62, 0xaf, 0x18, 0x9d, 0xc0, 0x74, 0x76, 0xc6, 0xc3, 0x34, 0x17, 0x76, 0x2e, 0xb7, 0x7b, 0xc7, 0x0c, 0xf3, 0x8d, 0x81, 0x4c, 0x22, 0x6d, 0xd6, 0xaf, 0x18, 0x72, 0x50, 0xe4, 0xd4, 0x70, 0x07, 0xf1, 0x55, 0x36, 0x17, 0xd4, 0xaf, 0x5b, 0x51, 0x6a, 0x5d, 0x3b, 0x31, 0x91, 0xd9, 0x3c, 0x10, 0x89, 0x6a, 0x56, 0x9b, 0xa1, 0x3d, 0xd2, 0x84, 0x0f, 0xb8, 0x51, 0x78, 0x1f, 0x0b, 0x11, 0x50, 0x90, 0x08, 0x6c, 0x8b, 0x3a, 0x34, 0xa1, 0xfc ],
-const [ 0x9f, 0x63, 0xb0, 0xed, 0xfa, 0xf8, 0x3b, 0xaf, 0xce, 0x6c, 0x4e, 0x68, 0x0b, 0xc0, 0x75, 0xc7, 0xb3, 0xba, 0xf1, 0x57, 0x33, 0xe5, 0xae, 0xa7, 0xf3, 0xd9, 0x75, 0xa8, 0x2c, 0xbc, 0x63, 0x56, 0xfa, 0x09, 0x9a, 0x9a, 0xb2, 0x90, 0x36, 0x6f, 0x75, 0xbf, 0x83, 0x45, 0x05, 0x1f, 0x6d, 0xa2, 0xd8, 0x21, 0x37, 0x0f, 0x6b, 0x1b, 0x70, 0x32, 0xd9, 0x8e, 0x23, 0x38, 0xac, 0xaa, 0x4f, 0x76, 0xf3, 0x14, 0x96, 0x4f, 0x95, 0xe6, 0x39, 0x58, 0xe4, 0xf8, 0x44, 0xba, 0x75, 0x5e, 0x06, 0xd8, 0x30, 0x31, 0xc4, 0x32, 0xa3, 0x93, 0xaf, 0x89, 0x9b, 0xed, 0x12, 0x45, 0xf6, 0x7b, 0xd0, 0x13, 0xb3, 0x0b, 0x0e, 0xd2, 0x4b, 0x01, 0x2d, 0xb0, 0x44, 0x9f, 0xfb, 0x90, 0x03, 0x83, 0x2a, 0xb0, 0xe2, 0x71, 0x01, 0x88, 0x82, 0x53, 0x51, 0xf5, 0x63, 0x7e, 0xab, 0x96, 0xb1, 0x37, 0xd0, 0x76 ],
-const [ 0xb0, 0x2d, 0xca, 0xe9, 0x15, 0xa6, 0xa6, 0xbe, 0x9d, 0x3c, 0x9b, 0xf3, 0xfc, 0x61, 0xa9, 0x9e, 0xc3, 0xf1, 0x81, 0xb4, 0xe3, 0xb0, 0x32, 0x1f, 0x6c, 0xf3, 0x04, 0x11, 0x9b, 0x9d, 0xa4, 0x97, 0x14, 0x4d, 0x82, 0x71, 0x6c, 0xd6, 0x78, 0x21, 0xea, 0xf0, 0xac, 0x42, 0x8f, 0x2d, 0xb7, 0x1b, 0x53, 0x2e, 0x07, 0x74, 0xb2, 0x16, 0x81, 0xa8, 0x67, 0x3f, 0x6b, 0xfc, 0x78, 0x2c, 0x8a, 0x2f, 0x72, 0xbf, 0x87, 0x53, 0xf6, 0xac, 0x98, 0xdb, 0x74, 0x2e, 0x5c, 0xf4, 0x37, 0xf9, 0x06, 0x19, 0xa2, 0x6f, 0xbd, 0xe1, 0xb9, 0x16, 0x43, 0x1c, 0xe3, 0x4a, 0xd5, 0x1f, 0xed, 0x2f, 0x53, 0x5c, 0x53, 0xea, 0xa1, 0x36, 0xbb, 0x11, 0x4d, 0x13, 0xc3, 0x5f, 0x72, 0xb2, 0xfc, 0xad, 0xdc, 0xbf, 0x36, 0x1d, 0x6c, 0xa4, 0xff, 0x99, 0xbe, 0xa3, 0x66, 0x7c, 0x0a, 0x21, 0x05, 0x8e, 0x48, 0x45 ],
-const [ 0xee, 0x88, 0x0b, 0x81, 0x50, 0xbc, 0x9b, 0x86, 0x60, 0x70, 0x12, 0xa9, 0xa3, 0xe7, 0x37, 0xe2, 0x40, 0x75, 0x98, 0xd6, 0x59, 0x89, 0x7f, 0xfc, 0x9b, 0xeb, 0x22, 0xfe, 0x14, 0x41, 0x1a, 0x62, 0x45, 0xd8, 0x16, 0x69, 0x79, 0xa1, 0xd1, 0x37, 0x55, 0x7a, 0x41, 0x35, 0xaf, 0xaf, 0x12, 0xb4, 0xa4, 0xc1, 0x52, 0xd3, 0xe4, 0x66, 0x6e, 0xa2, 0x51, 0xd0, 0x5d, 0x87, 0xc9, 0x32, 0x1b, 0xe1, 0x3f, 0x81, 0x59, 0xec, 0x11, 0x78, 0x73, 0xe5, 0x95, 0xde, 0xa2, 0x6e, 0xf5, 0x0b, 0x73, 0x33, 0x3e, 0xa9, 0x77, 0xce, 0xb3, 0xb8, 0x3c, 0xe8, 0x67, 0xd4, 0x7d, 0xa1, 0x0b, 0xbb, 0x96, 0x32, 0x04, 0x0a, 0x3a, 0xd1, 0xc1, 0x47, 0x68, 0xd6, 0x4b, 0x24, 0x9b, 0x1b, 0x1d, 0x02, 0x42, 0xa8, 0x37, 0xb5, 0x6f, 0x90, 0x6e, 0x87, 0xd3, 0x16, 0x06, 0x7f, 0xea, 0x14, 0x82, 0xe3, 0x73, 0x9e ],
-const [ 0xc2, 0x80, 0xf5, 0xb7, 0x82, 0xa0, 0xba, 0x40, 0xa1, 0x56, 0x99, 0xd6, 0x80, 0x12, 0x9b, 0x72, 0x07, 0xaa, 0x89, 0xc8, 0xea, 0x94, 0x51, 0x1c, 0x2b, 0x59, 0xaa, 0x57, 0xe1, 0x46, 0xfb, 0x5a, 0x37, 0x65, 0x79, 0x92, 0xb7, 0xac, 0x90, 0xcc, 0xc9, 0x73, 0x85, 0x4b, 0x76, 0x2c, 0x59, 0x18, 0x72, 0x4e, 0xf0, 0x9a, 0x5a, 0x92, 0x73, 0x66, 0x3a, 0x62, 0xf2, 0x58, 0x52, 0x8e, 0x4e, 0xe3, 0x1a, 0x42, 0x56, 0xa5, 0x83, 0x35, 0x30, 0x3f, 0x80, 0x22, 0xfb, 0x63, 0xc5, 0x7c, 0xb2, 0x2f, 0xce, 0x5e, 0x53, 0xb9, 0x24, 0xc1, 0x41, 0xeb, 0xdc, 0xf1, 0xe7, 0x91, 0x60, 0x42, 0x9f, 0xb0, 0x72, 0xfe, 0xd2, 0x19, 0x6d, 0xa3, 0x60, 0x3f, 0xce, 0x4b, 0x42, 0x46, 0xf4, 0x6c, 0x6e, 0x5c, 0x24, 0xc1, 0xfa, 0x4c, 0xd0, 0x88, 0x85, 0x50, 0x19, 0xee, 0xd3, 0x27, 0x92, 0xc8, 0xb7, 0x68 ],
-const [ 0xb9, 0x49, 0xdf, 0x3b, 0x02, 0x87, 0x1b, 0xea, 0x09, 0x76, 0x87, 0x3a, 0x9c, 0x76, 0x94, 0x2a, 0xc9, 0x34, 0xce, 0x63, 0xac, 0x29, 0x56, 0xd2, 0x85, 0x64, 0x92, 0x97, 0x0d, 0x8a, 0x23, 0x1e, 0x0b, 0x1b, 0x17, 0x8b, 0x22, 0xf6, 0x60, 0x5c, 0xed, 0x20, 0x85, 0x49, 0x4e, 0xc1, 0x98, 0x6f, 0x02, 0x6f, 0x68, 0xae, 0x79, 0xaf, 0xf7, 0x50, 0xe5, 0xb9, 0x2f, 0xeb, 0x92, 0x7c, 0xd0, 0x88, 0x75, 0xe2, 0xad, 0x04, 0x07, 0x55, 0x18, 0xb7, 0x54, 0x82, 0x9b, 0x54, 0x4e, 0x5d, 0xe9, 0x10, 0x68, 0x65, 0x13, 0x07, 0x60, 0x29, 0xff, 0xdb, 0x5c, 0x0b, 0x17, 0x9e, 0x39, 0x44, 0x3e, 0xf2, 0x20, 0x28, 0x08, 0x6e, 0x5a, 0xab, 0x2a, 0x44, 0x65, 0x25, 0x2f, 0x21, 0x47, 0x52, 0x6d, 0x55, 0x22, 0x9d, 0x38, 0x34, 0x09, 0x9e, 0x55, 0xbc, 0x12, 0xe1, 0xb1, 0x78, 0xac, 0xe9, 0x53, 0xa3 ],
-const [ 0xd1, 0xd9, 0x4b, 0xc5, 0x94, 0x65, 0x65, 0x7e, 0x9c, 0xf4, 0x02, 0x02, 0x39, 0xe6, 0x16, 0x4e, 0x00, 0xc7, 0x07, 0xf8, 0xc4, 0x76, 0x4d, 0x70, 0xc2, 0x87, 0x3b, 0x87, 0x1c, 0xe5, 0x1c, 0x2d, 0x89, 0xbc, 0x82, 0x7f, 0x4a, 0x96, 0xdb, 0x01, 0x60, 0xc4, 0x45, 0x27, 0xfc, 0xff, 0xa4, 0x1b, 0x37, 0x4f, 0xf1, 0xba, 0x03, 0x2c, 0xd5, 0xdf, 0x61, 0xe3, 0x76, 0xe5, 0xd5, 0x3c, 0x91, 0x67, 0x17, 0x5a, 0xc9, 0x4a, 0x0c, 0xe2, 0x3e, 0xfe, 0xf4, 0x60, 0x62, 0x00, 0xe5, 0xe6, 0x08, 0xa4, 0x78, 0xf6, 0xbe, 0x11, 0xc2, 0xa1, 0x5d, 0x8d, 0x86, 0xf1, 0xde, 0xfb, 0xa8, 0x85, 0x6f, 0xa1, 0xe5, 0x7b, 0xc6, 0x2f, 0xc2, 0x93, 0xb6, 0xfd, 0xc2, 0x90, 0x00, 0x95, 0xdc, 0xe2, 0x6b, 0x71, 0x2c, 0x83, 0x17, 0x06, 0xe9, 0x1f, 0x0e, 0x01, 0x97, 0x77, 0x1c, 0xd0, 0x7e, 0x07, 0xe1, 0x64 ],
-const [ 0xa6, 0x0c, 0x0e, 0x1c, 0xa3, 0x29, 0xb2, 0x7b, 0xe5, 0x89, 0x68, 0x17, 0x10, 0x49, 0xa6, 0x25, 0xd7, 0x61, 0x54, 0x73, 0x1e, 0x34, 0x1b, 0x9e, 0x60, 0x66, 0xdf, 0x85, 0x4f, 0xee, 0x8a, 0xfd, 0xbb, 0x6c, 0x0c, 0xc7, 0xb5, 0xbc, 0xa0, 0xbf, 0xf4, 0xcb, 0x50, 0x55, 0x78, 0xa9, 0xbb, 0x41, 0x6c, 0xe0, 0x16, 0x73, 0x51, 0x05, 0x71, 0x49, 0x59, 0x8c, 0x3b, 0x05, 0x11, 0xe0, 0x09, 0x7e, 0x43, 0xb4, 0x93, 0x16, 0x1b, 0x93, 0xff, 0xeb, 0x88, 0xbf, 0x63, 0x52, 0xe5, 0x38, 0x85, 0x81, 0xd9, 0x1b, 0xe5, 0x8b, 0x7c, 0x2d, 0xfd, 0x92, 0xbb, 0xb8, 0xc7, 0x37, 0xfd, 0x96, 0x80, 0x56, 0x07, 0x8b, 0xac, 0xf1, 0x1c, 0xd8, 0x5a, 0x69, 0x69, 0x0c, 0xa9, 0xf4, 0xa1, 0x1e, 0x8b, 0x4b, 0xe5, 0xb9, 0xc9, 0xa3, 0xe6, 0xd7, 0x47, 0xdf, 0x4d, 0x91, 0x8a, 0x04, 0x5b, 0x35, 0x77, 0xed ],
-const [ 0x49, 0x96, 0xec, 0x69, 0xeb, 0x25, 0x22, 0x59, 0x9c, 0xcb, 0x47, 0xed, 0x1d, 0xd6, 0xbb, 0x0f, 0x79, 0xb5, 0x85, 0xbe, 0x8b, 0x68, 0xf4, 0x19, 0xc0, 0x35, 0x85, 0xb9, 0x1f, 0x9d, 0x08, 0x44, 0x86, 0x8e, 0xff, 0x3f, 0x36, 0xda, 0x47, 0x24, 0x91, 0xe8, 0xfa, 0xb5, 0x23, 0xaa, 0x93, 0x8f, 0xe0, 0xce, 0x53, 0x02, 0xac, 0x39, 0xe4, 0x20, 0x21, 0xb1, 0x3d, 0x14, 0x8c, 0xd9, 0xc5, 0xb6, 0x38, 0x63, 0xbb, 0x5c, 0xf0, 0x81, 0xd5, 0xf2, 0xbf, 0x9c, 0x27, 0x4d, 0xfa, 0x49, 0x47, 0xbc, 0x80, 0x79, 0xaf, 0xe0, 0x41, 0xef, 0x62, 0xbe, 0xfd, 0xf8, 0xd3, 0x13, 0x4e, 0x56, 0x02, 0xe7, 0xe9, 0x7d, 0xe8, 0x65, 0x21, 0x02, 0x15, 0xea, 0xad, 0x50, 0x98, 0x5c, 0xaa, 0x9d, 0x1f, 0xbd, 0xe4, 0x1c, 0x5f, 0x00, 0x51, 0x74, 0xb6, 0x1b, 0xde, 0x72, 0x0f, 0x5d, 0x6e, 0xfa, 0x07, 0x02 ],
-const [ 0x01, 0x06, 0x9a, 0x2a, 0x04, 0x8a, 0xac, 0x57, 0x91, 0xe0, 0xe9, 0x22, 0xef, 0xcd, 0x52, 0x92, 0xd7, 0xaf, 0x1e, 0x19, 0xc0, 0xb3, 0x15, 0x6d, 0x60, 0x48, 0x3a, 0x93, 0x6f, 0xd4, 0xac, 0x3c, 0xae, 0xa5, 0xce, 0x55, 0x28, 0x2a, 0xa6, 0xda, 0xb7, 0x63, 0x83, 0xeb, 0xcb, 0x96, 0xe3, 0x21, 0x67, 0x44, 0x93, 0x22, 0x6c, 0x5b, 0x18, 0x73, 0x1a, 0xad, 0x4e, 0x8e, 0xd4, 0xa1, 0x4f, 0x35, 0x23, 0x28, 0x96, 0x05, 0xfe, 0xf3, 0x65, 0x4e, 0x49, 0xe4, 0x63, 0x22, 0x9b, 0xc2, 0x8a, 0xac, 0x44, 0x30, 0x40, 0xc3, 0x8f, 0xe0, 0xc4, 0xbf, 0x44, 0x04, 0xcc, 0x8c, 0x71, 0x05, 0x6d, 0xfd, 0x6a, 0x78, 0x3a, 0x62, 0x0f, 0x4e, 0xb0, 0x5c, 0x4d, 0x4a, 0xd2, 0xf0, 0xe8, 0xb9, 0x10, 0xdb, 0x77, 0x5d, 0x6d, 0x25, 0xb0, 0xaa, 0xe1, 0xf9, 0xe5, 0x35, 0xfc, 0xb4, 0xcf, 0x69, 0xcd, 0x3c ],
-const [ 0x6e, 0xf9, 0x90, 0x52, 0xe9, 0x3d, 0xe7, 0x2a, 0x09, 0x28, 0x88, 0x63, 0x50, 0xc3, 0xa8, 0x6b, 0x3e, 0x1b, 0x75, 0xc8, 0x1b, 0xef, 0xfc, 0x65, 0xf0, 0xad, 0x4a, 0x29, 0xd7, 0x9d, 0xd1, 0xce, 0x74, 0x5b, 0x0e, 0xf1, 0xc4, 0x8a, 0x69, 0x65, 0x15, 0xc7, 0x5d, 0xcd, 0x56, 0xdc, 0xd8, 0x6a, 0x91, 0x36, 0xe5, 0x31, 0xb6, 0x9a, 0x88, 0x21, 0x9a, 0x13, 0xe9, 0xd3, 0x3f, 0x2f, 0xb5, 0x53, 0x56, 0x6a, 0xc2, 0x2e, 0x02, 0xeb, 0xf2, 0xcc, 0xdf, 0x6e, 0x59, 0x00, 0x43, 0x82, 0xa2, 0xde, 0xc4, 0xf4, 0xae, 0xcd, 0xfa, 0x8b, 0x7f, 0xdd, 0x86, 0xf5, 0x55, 0x5a, 0x52, 0x02, 0x16, 0xa1, 0x1b, 0x10, 0xf3, 0x32, 0x2d, 0xc7, 0x49, 0x07, 0x6e, 0x06, 0xc5, 0x24, 0x9e, 0x1c, 0xcc, 0x70, 0xdd, 0x3c, 0x1a, 0xc3, 0x6e, 0x2b, 0xa9, 0x40, 0xba, 0x3c, 0xd4, 0xe5, 0x98, 0x7e, 0xbc, 0x60 ],
-const [ 0xe3, 0x6b, 0x3b, 0x02, 0xb8, 0x6b, 0x02, 0x99, 0x6c, 0x1c, 0xc2, 0x1f, 0xcb, 0x70, 0xb5, 0xb3, 0x03, 0x27, 0xaf, 0xad, 0xa1, 0xf0, 0xaf, 0xde, 0xbc, 0xd1, 0xb4, 0x19, 0x70, 0xc8, 0xd2, 0xf1, 0x8f, 0xb3, 0x84, 0xc5, 0x92, 0x6d, 0x44, 0xfa, 0xd6, 0x3a, 0x59, 0x88, 0x05, 0x65, 0xf1, 0xb8, 0xd1, 0x27, 0x6f, 0x2c, 0xe9, 0xcb, 0x06, 0x1f, 0x25, 0x10, 0x87, 0xee, 0x04, 0xcf, 0x77, 0xd7, 0x59, 0xdd, 0x65, 0x01, 0x41, 0x33, 0x7a, 0xbd, 0x58, 0x4c, 0x52, 0x0c, 0x2d, 0xcf, 0x0a, 0x61, 0xf3, 0x6e, 0x9b, 0xa8, 0x79, 0x0e, 0x66, 0x86, 0x5c, 0x28, 0x10, 0xe3, 0x7b, 0x6f, 0x8f, 0xa6, 0xab, 0xb3, 0x85, 0xbf, 0xac, 0x05, 0xcd, 0x6b, 0x5c, 0x1c, 0x54, 0xb3, 0x2b, 0xf7, 0x2b, 0x36, 0xcf, 0xc4, 0xda, 0x29, 0x39, 0x01, 0xf6, 0x9c, 0xc7, 0xe1, 0xf6, 0xff, 0xbb, 0xf1, 0x42, 0xe4 ],
-const [ 0xdd, 0xe1, 0xc0, 0x90, 0x44, 0x6d, 0x11, 0xf9, 0x36, 0x51, 0x7e, 0xac, 0x73, 0xd6, 0x77, 0x66, 0x95, 0xc1, 0xff, 0x30, 0x51, 0x85, 0x0e, 0x32, 0xfa, 0xb7, 0x34, 0xcc, 0x46, 0xc2, 0x80, 0xe3, 0x55, 0xdc, 0xa0, 0x79, 0xef, 0x39, 0x49, 0x81, 0x0e, 0x7e, 0xda, 0xf1, 0x9c, 0x78, 0x3c, 0x18, 0x7d, 0x0e, 0x0c, 0x32, 0xd0, 0x74, 0xfc, 0x3a, 0x72, 0xa2, 0x76, 0xff, 0xc4, 0x05, 0x83, 0x7a, 0xaf, 0x74, 0xec, 0x5f, 0xe5, 0x65, 0x9f, 0xf2, 0x69, 0x61, 0x53, 0x1c, 0x51, 0xb5, 0x6f, 0xbe, 0xcb, 0x6b, 0x28, 0x45, 0x5e, 0x78, 0xea, 0x7f, 0x72, 0x37, 0xfa, 0xad, 0x13, 0x16, 0x59, 0xd9, 0xf2, 0x90, 0xeb, 0x69, 0xac, 0x5b, 0xd8, 0xf5, 0x4f, 0xe2, 0x33, 0x56, 0x1b, 0xf5, 0xda, 0xff, 0x85, 0xbf, 0x9d, 0x91, 0x82, 0xf9, 0xa2, 0xa9, 0x01, 0x5e, 0x07, 0xfc, 0xb9, 0x5f, 0xca, 0xa7 ],
-const [ 0x99, 0x95, 0x8a, 0xa4, 0x59, 0x60, 0x46, 0x57, 0xc7, 0xbf, 0x6e, 0x4c, 0xdf, 0xcc, 0x87, 0x85, 0xf0, 0xab, 0xf0, 0x6f, 0xfe, 0x63, 0x6b, 0x5b, 0x64, 0xec, 0xd9, 0x31, 0xbd, 0x8a, 0x45, 0x63, 0x05, 0x59, 0x24, 0x21, 0xfc, 0x28, 0xdb, 0xcc, 0xcb, 0x8a, 0x82, 0xac, 0xea, 0x2b, 0xe8, 0xe5, 0x41, 0x61, 0xd7, 0xa7, 0x8e, 0x03, 0x99, 0xa6, 0x06, 0x7e, 0xba, 0xca, 0x3f, 0x25, 0x10, 0x27, 0x4d, 0xc9, 0xf9, 0x2f, 0x2c, 0x8a, 0xe4, 0x26, 0x5e, 0xec, 0x13, 0xd7, 0xd4, 0x2e, 0x9f, 0x86, 0x12, 0xd7, 0xbc, 0x25, 0x8f, 0x91, 0x3e, 0xcb, 0x5a, 0x3a, 0x5c, 0x61, 0x03, 0x39, 0xb4, 0x9f, 0xb9, 0x0e, 0x90, 0x37, 0xb0, 0x2d, 0x68, 0x4f, 0xc6, 0x0d, 0xa8, 0x35, 0x65, 0x7c, 0xb2, 0x4e, 0xab, 0x35, 0x27, 0x50, 0xc8, 0xb4, 0x63, 0xb1, 0xa8, 0x49, 0x46, 0x60, 0xd3, 0x6c, 0x3a, 0xb2 ],
-];
-
-const hmac_sha1_keys = const [
-const [ 0x82, 0xf3, 0xb6, 0x9a, 0x1b, 0xff, 0x4d, 0xe1, 0x5c, 0x33 ],
-const [ 0x47, 0x66, 0xe6, 0xfe, 0x5d, 0xff, 0xc9, 0x8a, 0x5c, 0x50 ],
-const [ 0x0f, 0x94, 0x2d, 0x98, 0xa5, 0xc4, 0x06, 0x15, 0x59, 0x67 ],
-const [ 0x78, 0xcb, 0x19, 0x4a, 0x95, 0x8f, 0xc1, 0xb9, 0x5e, 0x35 ],
-const [ 0x2b, 0xaa, 0x67, 0x31, 0xc3, 0x67, 0xe0, 0xf8, 0x18, 0xab ],
-const [ 0xc1, 0xf4, 0xf1, 0xac, 0x1a, 0xdf, 0x93, 0xdf, 0x6e, 0x58 ],
-const [ 0x5d, 0xe2, 0x37, 0xba, 0x1e, 0xda, 0xdf, 0x54, 0xd5, 0x66 ],
-const [ 0xed, 0x00, 0xf3, 0xc4, 0xc2, 0x27, 0xd0, 0x7c, 0xf2, 0xd1 ],
-const [ 0x3b, 0x6a, 0xf3, 0x4a, 0xe3, 0xea, 0x52, 0xd3, 0x96, 0x2d ],
-const [ 0x64, 0x45, 0xf6, 0xd8, 0x84, 0xfb, 0xd5, 0x7a, 0x1e, 0xec ],
-const [ 0xb9, 0xec, 0x31, 0x34, 0x68, 0x06, 0xac, 0xaa, 0x92, 0x21 ],
-const [ 0x51, 0x8a, 0x96, 0xff, 0x0a, 0x44, 0xf9, 0x5d, 0x97, 0xee ],
-const [ 0xa7, 0x90, 0x32, 0xa4, 0xf7, 0xf7, 0x40, 0xf6, 0xd1, 0x3e ],
-const [ 0xab, 0x6b, 0x1f, 0xd8, 0x23, 0x11, 0x47, 0x51, 0x23, 0x09 ],
-const [ 0xd7, 0xf2, 0xbe, 0x75, 0xaa, 0xeb, 0xb9, 0x0d, 0x87, 0xa8 ],
-const [ 0x13, 0x79, 0xa7, 0xaf, 0xcc, 0x09, 0x05, 0xa5, 0xfc, 0x81 ],
-const [ 0x80, 0xa0, 0xdb, 0x49, 0xd0, 0x39, 0xb3, 0x16, 0xae, 0x12 ],
-const [ 0x26, 0x18, 0x12, 0x24, 0x9e, 0x13, 0x38, 0xac, 0x5a, 0x22 ],
-const [ 0x07, 0xa2, 0x7c, 0x1b, 0x24, 0x09, 0x4d, 0xd9, 0xa0, 0xb9 ],
-const [ 0xae, 0xb5, 0x26, 0x73, 0x1e, 0x1d, 0x0c, 0xa8, 0x09, 0xf6 ],
-const [ 0xbc, 0xe4, 0x13, 0xc5, 0x61, 0x20, 0x19, 0xbe, 0x93, 0x7e ],
-const [ 0x10, 0xfd, 0x56, 0xdd, 0xc8, 0xf6, 0x4b, 0x9f, 0xd8, 0x00 ],
-const [ 0x8b, 0x09, 0xea, 0x6a, 0xf3, 0xed, 0x29, 0x28, 0x82, 0x22 ],
-const [ 0x71, 0xab, 0x12, 0xca, 0x47, 0x95, 0x50, 0x5d, 0xea, 0xdd ],
-const [ 0x5f, 0x24, 0xaa, 0x8b, 0xbc, 0x1e, 0xca, 0x3e, 0xab, 0x79 ],
-const [ 0xbe, 0x88, 0x1a, 0x06, 0x10, 0x74, 0xed, 0x05, 0xe5, 0xba ],
-const [ 0x67, 0xf3, 0x85, 0x22, 0x80, 0x39, 0x42, 0x7d, 0xf6, 0x81 ],
-const [ 0xed, 0x01, 0xed, 0xde, 0x5f, 0x8b, 0xee, 0x44, 0x33, 0x46 ],
-const [ 0xab, 0x69, 0x2b, 0x9e, 0x0d, 0x9c, 0xc9, 0x63, 0x27, 0x54 ],
-const [ 0x25, 0x41, 0xc8, 0x92, 0x49, 0x54, 0x52, 0xed, 0x89, 0xdc ],
-const [ 0xf5, 0x73, 0x1a, 0x6e, 0x89, 0x25, 0xf7, 0x43, 0x06, 0xfa ],
-const [ 0x29, 0x05, 0x66, 0xd7, 0x77, 0xb0, 0xee, 0xe9, 0x84, 0xfa ],
-const [ 0xa7, 0xe5, 0x4c, 0xe2, 0x34, 0xb0, 0xd5, 0xc8, 0x39, 0xb8 ],
-const [ 0x29, 0x18, 0xc7, 0x77, 0x9c, 0x43, 0xfd, 0xf2, 0x17, 0x48 ],
-const [ 0x9e, 0x8c, 0x66, 0x5b, 0xa5, 0x38, 0x54, 0xf0, 0xfd, 0x27 ],
-const [ 0x41, 0x16, 0x49, 0x88, 0x75, 0x24, 0x65, 0xa8, 0xf9, 0x29 ],
-const [ 0xea, 0x66, 0xbf, 0x3a, 0x62, 0x8d, 0xd1, 0xa9, 0x68, 0xc9 ],
-const [ 0x14, 0xf4, 0x3e, 0x54, 0x24, 0xac, 0x9a, 0xeb, 0x97, 0xe7 ],
-const [ 0x62, 0x51, 0xc2, 0xa2, 0x97, 0x6b, 0x87, 0x57, 0xad, 0xca ],
-const [ 0x03, 0x6f, 0xc9, 0x4f, 0xaf, 0xab, 0x92, 0xba, 0x55, 0x39 ],
-const [ 0xc0, 0x7d, 0x47, 0x55, 0x9b, 0x67, 0x59, 0xf0, 0x96, 0x51 ],
-const [ 0xa3, 0x2e, 0x28, 0xd4, 0xb4, 0x58, 0xce, 0xb7, 0xcb, 0x13 ],
-const [ 0x9f, 0xc0, 0x5e, 0xf4, 0x95, 0x79, 0xaa, 0xef, 0x45, 0xc0 ],
-const [ 0xfe, 0x5d, 0xf1, 0x4e, 0x58, 0x88, 0xfa, 0xd1, 0x38, 0xea ],
-const [ 0x6c, 0x56, 0x89, 0x0c, 0x60, 0x3b, 0xd3, 0x83, 0x3d, 0x21 ],
-const [ 0x59, 0x78, 0x59, 0x28, 0xd7, 0x25, 0x16, 0xe3, 0x12, 0x72 ],
-const [ 0xc5, 0x21, 0x09, 0xc9, 0xd0, 0xda, 0x92, 0x58, 0xeb, 0x73 ],
-const [ 0xaa, 0x61, 0x97, 0xd4, 0xaf, 0xd5, 0xee, 0xf5, 0x18, 0x7a ],
-const [ 0x9e, 0x0b, 0xe9, 0x4e, 0xd7, 0x07, 0x45, 0x8d, 0x5c, 0xec ],
-const [ 0x65, 0xe0, 0x69, 0x54, 0xb0, 0x35, 0x0f, 0xb3, 0xdb, 0x19 ],
-const [ 0xe8, 0x9d, 0xef, 0xd4, 0x07, 0x77, 0xfe, 0x17, 0x31, 0x67 ],
-const [ 0x15, 0x01, 0xb9, 0x8c, 0xd2, 0xb0, 0x30, 0xd6, 0x26, 0x60 ],
-const [ 0xbc, 0x28, 0xbe, 0x9d, 0x8f, 0xbb, 0x1d, 0x76, 0x63, 0x60 ],
-const [ 0xaf, 0xf7, 0xd8, 0x36, 0x88, 0x02, 0x32, 0xf8, 0x13, 0x2d ],
-const [ 0xef, 0xe1, 0xc6, 0x5a, 0x8a, 0x23, 0x0e, 0x96, 0xcf, 0xa6 ],
-const [ 0x4f, 0xb2, 0x51, 0x4d, 0x3d, 0x73, 0xb4, 0x77, 0x0a, 0x69 ],
-const [ 0x1b, 0x6c, 0x51, 0x46, 0xea, 0x28, 0xdc, 0xa9, 0xf6, 0xa4 ],
-const [ 0x2d, 0x54, 0x4e, 0x00, 0x3b, 0x09, 0xcd, 0xe4, 0xa4, 0xc7 ],
-const [ 0x1b, 0x5c, 0xdd, 0xff, 0x53, 0x1b, 0xab, 0xb5, 0x1b, 0x4c ],
-const [ 0x8d, 0x8d, 0x15, 0xd8, 0xa9, 0x57, 0x9a, 0xdb, 0x2d, 0x62 ],
-const [ 0x19, 0x1a, 0x70, 0x0f, 0x3d, 0xc5, 0x60, 0xa5, 0x89, 0xf9, 0xc2, 0xca, 0x78, 0x4e, 0x97, 0x0c, 0xb1, 0xe5, 0x52, 0xa0, 0xe6, 0xb3, 0xdf, 0x54, 0xfc, 0x1c, 0xe3, 0xc5, 0x6c, 0xc4, 0x46, 0xd2 ],
-const [ 0xdc, 0xb4, 0x63, 0xa1, 0x3a, 0xe3, 0x37, 0x41, 0x41, 0x51, 0xa3, 0x1a, 0xa0, 0xc3, 0xe8, 0xba, 0xb3, 0xee, 0x78, 0x1b, 0x9f, 0x3a, 0xaa, 0x86, 0x9d, 0xc5, 0xb1, 0xb1, 0x96, 0xab, 0xcf, 0x2b ],
-const [ 0x93, 0xe7, 0x40, 0x2c, 0xb2, 0xb1, 0xb5, 0x94, 0x67, 0x0e, 0x65, 0x6a, 0x6c, 0xa4, 0xef, 0x24, 0x72, 0x31, 0xac, 0x09, 0xb7, 0xcc, 0xe1, 0x94, 0xd7, 0x6e, 0x39, 0x19, 0xe4, 0xb0, 0x72, 0xaa ],
-const [ 0xac, 0x28, 0x6e, 0x20, 0x6d, 0x88, 0xa3, 0xc0, 0x0e, 0x67, 0x05, 0xdf, 0x21, 0x1b, 0x5e, 0xad, 0x6a, 0x69, 0x36, 0x25, 0x44, 0x53, 0x51, 0x87, 0x41, 0x31, 0x79, 0x09, 0x11, 0x03, 0x7e, 0xc9 ],
-const [ 0xd5, 0x0f, 0xf2, 0xc5, 0x44, 0x8b, 0x5c, 0x2b, 0x69, 0x5f, 0x61, 0xdc, 0x55, 0xde, 0x55, 0xee, 0x96, 0xf7, 0xbb, 0xe5, 0x70, 0x67, 0xae, 0x85, 0x6a, 0x2d, 0x80, 0xe5, 0x0d, 0x3e, 0xa0, 0xc5 ],
-const [ 0x60, 0x7e, 0x64, 0x5e, 0x1b, 0xd7, 0xfc, 0xef, 0xa0, 0xe3, 0x46, 0x02, 0xd3, 0x44, 0x71, 0xdd, 0x71, 0x17, 0x31, 0x30, 0xff, 0x1c, 0x59, 0x53, 0x00, 0x17, 0xac, 0xd0, 0x6b, 0x76, 0xf0, 0x21 ],
-const [ 0xba, 0x60, 0xee, 0x37, 0x34, 0xa5, 0x4a, 0xe4, 0x2c, 0xfe, 0xb6, 0x78, 0x23, 0x3e, 0xca, 0xfd, 0x8d, 0x55, 0xc7, 0x83, 0xca, 0x74, 0x28, 0x65, 0x57, 0x72, 0x79, 0xcd, 0x46, 0x6f, 0x6c, 0x7a ],
-const [ 0x86, 0x1a, 0xe8, 0x4f, 0x59, 0x6b, 0xd2, 0x3c, 0xd3, 0x79, 0x70, 0x45, 0x4e, 0x89, 0x08, 0x68, 0x60, 0x22, 0x11, 0x11, 0x54, 0xb5, 0x46, 0xe1, 0xda, 0x84, 0xfa, 0xae, 0xfd, 0xbc, 0xab, 0xcb ],
-const [ 0x30, 0x4e, 0x23, 0xc5, 0x70, 0xeb, 0x78, 0x87, 0x27, 0x0d, 0x73, 0xab, 0xba, 0x9c, 0x32, 0x68, 0xd0, 0xae, 0x42, 0xaa, 0xfb, 0x9e, 0x62, 0xc0, 0x9a, 0x5e, 0x89, 0x54, 0xfe, 0x0e, 0x2a, 0xa1 ],
-const [ 0xcb, 0x3c, 0x6f, 0xb3, 0xfc, 0xd4, 0x64, 0xd5, 0xd2, 0xdc, 0xeb, 0xac, 0x4f, 0xa4, 0x1c, 0xba, 0x7a, 0x60, 0x70, 0x6d, 0x9c, 0x88, 0x8b, 0xa1, 0xaf, 0x7e, 0x58, 0x67, 0x14, 0x72, 0x5b, 0x05 ],
-const [ 0xd5, 0x0d, 0xf8, 0xab, 0xa7, 0x27, 0x3e, 0x64, 0x27, 0xea, 0x6b, 0xc0, 0xa4, 0xfd, 0xd4, 0xd5, 0xb0, 0x36, 0x4f, 0x33, 0x6c, 0xc6, 0x96, 0xb9, 0x06, 0xb1, 0xed, 0xae, 0x7f, 0x82, 0x05, 0x0d ],
-const [ 0x1d, 0xae, 0xbe, 0x36, 0x00, 0x7d, 0x26, 0xb9, 0x88, 0xf8, 0xc4, 0xfc, 0xaa, 0x0b, 0x5a, 0x07, 0x65, 0x8e, 0xf6, 0xff, 0x52, 0x83, 0x25, 0x92, 0x7d, 0x98, 0x64, 0x96, 0x73, 0xf4, 0xd7, 0xec ],
-const [ 0xfd, 0xef, 0xd6, 0xdb, 0xd4, 0x3c, 0xb8, 0x17, 0xb1, 0x32, 0x75, 0x46, 0x33, 0xc0, 0xce, 0x72, 0x4b, 0xe5, 0x57, 0x2e, 0x4e, 0x73, 0x2b, 0x7d, 0x48, 0x13, 0xdd, 0xef, 0x94, 0x89, 0xb2, 0x0d ],
-const [ 0xe3, 0x2e, 0x6a, 0xcc, 0x16, 0xd4, 0xf6, 0xed, 0x9c, 0xc3, 0xe2, 0x3a, 0xc6, 0x5a, 0x25, 0x9c, 0x65, 0x70, 0x4a, 0x3f, 0x84, 0x37, 0xc5, 0x98, 0x57, 0x66, 0x87, 0xa7, 0x6e, 0x97, 0xd0, 0x79 ],
-const [ 0x12, 0x8f, 0xfb, 0x7d, 0x52, 0xb7, 0x10, 0xde, 0x97, 0xee, 0x92, 0x1c, 0xc9, 0xd2, 0xbc, 0x5e, 0x07, 0x50, 0xd3, 0xa2, 0xe1, 0x0d, 0xfc, 0x49, 0xc8, 0x05, 0x50, 0xd6, 0xc2, 0x73, 0x32, 0xf3 ],
-const [ 0xa1, 0x27, 0x94, 0x05, 0x7d, 0xe3, 0xb3, 0xea, 0x42, 0x6f, 0xbe, 0x01, 0x95, 0xee, 0x17, 0xb4, 0x87, 0x3e, 0xf7, 0xe6, 0xba, 0x87, 0xb2, 0x2b, 0xc6, 0x14, 0x3c, 0x38, 0xda, 0x62, 0xec, 0x98 ],
-const [ 0x2a, 0x43, 0x2b, 0x46, 0x2e, 0xbb, 0x78, 0x83, 0x50, 0x08, 0xb4, 0xaa, 0x8a, 0x92, 0xb4, 0x0f, 0x6f, 0xe9, 0xdc, 0x53, 0xa9, 0x63, 0x35, 0x2e, 0xa5, 0x07, 0xc0, 0x6c, 0x8d, 0xa9, 0x0a, 0x36 ],
-const [ 0x23, 0x2e, 0xab, 0xc4, 0x78, 0x50, 0x1f, 0x24, 0x6e, 0x73, 0xe7, 0x6b, 0xf0, 0x22, 0x7e, 0x03, 0x56, 0xa4, 0x16, 0x1f, 0x97, 0x68, 0x75, 0x40, 0xba, 0xa7, 0x02, 0xfe, 0x8e, 0x44, 0x20, 0x05 ],
-const [ 0xaa, 0xe2, 0x0e, 0x01, 0xf6, 0x18, 0x5d, 0x80, 0x73, 0xf4, 0x0f, 0xd7, 0x64, 0x80, 0x98, 0xfc, 0xfa, 0xf3, 0xdd, 0x8b, 0x6c, 0x7b, 0xec, 0xb1, 0x4a, 0x39, 0xea, 0x48, 0x0e, 0x8d, 0x4c, 0x43 ],
-const [ 0x58, 0xd2, 0x59, 0xd3, 0x65, 0x1b, 0x65, 0x33, 0xf9, 0x8c, 0xd0, 0xf7, 0xda, 0x9c, 0xc4, 0xf3, 0xa2, 0x51, 0xbc, 0x02, 0xcd, 0x06, 0x3b, 0xed, 0x11, 0x6b, 0xbe, 0x8f, 0xee, 0xcd, 0xef, 0x37 ],
-const [ 0xe0, 0x42, 0x10, 0x39, 0xb6, 0x49, 0xa0, 0xd7, 0x2d, 0x2b, 0x5d, 0xba, 0x7a, 0xa0, 0x2e, 0xf7, 0xf1, 0xf8, 0x33, 0x03, 0xbd, 0x01, 0x10, 0xbd, 0xd3, 0x2b, 0x89, 0xaf, 0x29, 0xea, 0x50, 0x91 ],
-const [ 0x59, 0xb8, 0x18, 0xb1, 0x2c, 0x95, 0xbe, 0x44, 0x1f, 0xf5, 0x2d, 0x8b, 0xd1, 0x92, 0x86, 0x30, 0x0f, 0x8c, 0xb8, 0x77, 0xe2, 0x5e, 0xa4, 0xcf, 0xcb, 0x11, 0x7f, 0xa7, 0x4d, 0xb0, 0x77, 0x82 ],
-const [ 0x4d, 0xef, 0x68, 0x55, 0x32, 0x99, 0x9b, 0x63, 0x52, 0xa6, 0x74, 0x1b, 0xa4, 0x7b, 0xd2, 0xaa, 0x39, 0x39, 0x61, 0xe1, 0x2a, 0xe4, 0x26, 0x7e, 0xcf, 0xc5, 0x58, 0xad, 0x31, 0x0c, 0x72, 0xce ],
-const [ 0xa3, 0xe9, 0x83, 0xe3, 0xe9, 0x59, 0xad, 0x38, 0xb9, 0xbc, 0x4b, 0x45, 0x16, 0x58, 0x9b, 0x26, 0x3a, 0xd2, 0xc1, 0x41, 0x88, 0x4e, 0x5c, 0x84, 0xc2, 0xd6, 0x5d, 0xee, 0x7c, 0x00, 0x19, 0x51 ],
-const [ 0xb1, 0xb6, 0xd5, 0xe0, 0xb9, 0xb1, 0xef, 0xb6, 0x08, 0x91, 0x2d, 0xa4, 0x8d, 0x56, 0x1f, 0x44, 0x89, 0x10, 0x2a, 0xba, 0xa0, 0x9f, 0x39, 0x96, 0x31, 0xbe, 0xb0, 0xfc, 0xe3, 0x40, 0xa2, 0x02 ],
-const [ 0xc9, 0x13, 0xfe, 0x12, 0xcb, 0x76, 0xe5, 0x74, 0xa2, 0x3b, 0xf4, 0x6c, 0x90, 0x32, 0x10, 0x58, 0x48, 0xce, 0x2c, 0x71, 0xf6, 0x1e, 0x6d, 0x58, 0x80, 0xff, 0x8c, 0xf2, 0x0b, 0x91, 0x7d, 0x76 ],
-const [ 0xd3, 0xdd, 0xed, 0x60, 0x91, 0x13, 0x43, 0xbc, 0xa3, 0xaf, 0x35, 0xd2, 0xdc, 0xcb, 0xca, 0x9d, 0x23, 0x44, 0xb6, 0x0c, 0x74, 0xb4, 0x81, 0x9e, 0x27, 0xa0, 0xe6, 0x2f, 0x75, 0xf3, 0x7a, 0x12 ],
-const [ 0x04, 0xd3, 0x11, 0x06, 0x09, 0x8f, 0xbd, 0xa1, 0x9a, 0xf2, 0x8e, 0x84, 0x33, 0x9c, 0x73, 0x6e, 0xec, 0x54, 0xe5, 0x85, 0x9d, 0x9f, 0x28, 0x8f, 0x45, 0x91, 0xce, 0x64, 0xad, 0xe4, 0x7e, 0xa3 ],
-const [ 0xad, 0xdd, 0xe2, 0xc6, 0x2b, 0xfa, 0x07, 0x22, 0xf7, 0x3b, 0x99, 0xad, 0xd6, 0x5f, 0x2b, 0x3c, 0x9b, 0xfd, 0xc9, 0x3c, 0x4b, 0x18, 0x39, 0xec, 0x7f, 0xf3, 0x80, 0xca, 0x0a, 0x26, 0xa9, 0x4a ],
-const [ 0xab, 0x40, 0xbb, 0x08, 0x91, 0x99, 0xcc, 0xc0, 0xea, 0x49, 0xc6, 0xf5, 0x21, 0x62, 0x80, 0xf5, 0xdd, 0x3e, 0xff, 0x7c, 0x77, 0x1f, 0x8f, 0x7b, 0xb1, 0x12, 0x12, 0x17, 0xa5, 0x19, 0x99, 0xf5 ],
-const [ 0x58, 0x10, 0x24, 0x23, 0xa4, 0x16, 0x8f, 0xa6, 0x0a, 0x5a, 0xa7, 0xf7, 0x90, 0x92, 0xd5, 0x23, 0x26, 0xc9, 0x8e, 0x22, 0xee, 0x5f, 0x3d, 0xff, 0xdb, 0x52, 0x7d, 0x39, 0x7d, 0xbb, 0x8c, 0x68 ],
-const [ 0x81, 0x6a, 0xa4, 0xc3, 0xee, 0x06, 0x63, 0x10, 0xac, 0x1e, 0x66, 0x66, 0xcf, 0x83, 0x0c, 0x37, 0x53, 0x55, 0xc3, 0xc8, 0xba, 0x18, 0xcf, 0xe1, 0xf5, 0x0a, 0x48, 0xc9, 0x88, 0xb4, 0x62, 0x72 ],
-const [ 0xed, 0xbc, 0x48, 0xed, 0x94, 0x8c, 0xcc, 0xc4, 0x21, 0xef, 0xc7, 0xa6, 0x47, 0x5a, 0x2d, 0xc2, 0x47, 0x9d, 0xd9, 0x99, 0x6f, 0x5e, 0x2f, 0x10, 0xe0, 0xc6, 0x00, 0xc3, 0x95, 0x7a, 0xad, 0x9d ],
-const [ 0x42, 0x0e, 0x70, 0xec, 0xc3, 0xcd, 0xaf, 0xfb, 0x72, 0x6a, 0x18, 0x3c, 0x79, 0x38, 0x45, 0x31, 0x5f, 0x73, 0x0f, 0xa4, 0xda, 0xc9, 0xfe, 0x46, 0xe4, 0x18, 0x03, 0x97, 0x10, 0x7a, 0x6a, 0x05 ],
-const [ 0x78, 0xb8, 0xb8, 0xaa, 0x70, 0xfc, 0xb2, 0xb0, 0xcb, 0xe8, 0x35, 0x94, 0x12, 0x75, 0xa5, 0x40, 0x5c, 0xef, 0x6d, 0x80, 0x13, 0xaa, 0xe7, 0x59, 0xf6, 0xf1, 0x7c, 0x9d, 0x64, 0x3f, 0x0c, 0xbc ],
-const [ 0xaa, 0x01, 0xf6, 0x99, 0xda, 0x8d, 0x42, 0x26, 0x1e, 0x3b, 0x04, 0xba, 0x13, 0x89, 0xd2, 0x63, 0x1e, 0x98, 0x5f, 0xdb, 0xa2, 0x8a, 0x4c, 0x0a, 0x76, 0x2e, 0x40, 0xcb, 0x96, 0xdf, 0x3a, 0xf3 ],
-const [ 0x67, 0x33, 0x49, 0x85, 0x82, 0xe9, 0x4a, 0x58, 0xce, 0xf9, 0x83, 0xb1, 0xf5, 0x2f, 0x21, 0x5d, 0xa1, 0x61, 0x2e, 0x8e, 0x48, 0xf6, 0x05, 0x81, 0x4a, 0xa9, 0x09, 0x5d, 0x39, 0x8b, 0x96, 0x5f ],
-const [ 0x3a, 0x23, 0x9f, 0xf1, 0x56, 0x05, 0x8e, 0xa4, 0xff, 0x05, 0xe0, 0xf6, 0x72, 0xb7, 0xec, 0xb5, 0xd1, 0x06, 0xfa, 0xd5, 0xd3, 0x1e, 0x9d, 0x6f, 0xb9, 0x89, 0x43, 0x0a, 0x84, 0x97, 0x0a, 0x1a ],
-const [ 0xa3, 0xab, 0xb8, 0x93, 0xaa, 0x5f, 0x82, 0xc4, 0xa8, 0xef, 0x75, 0x44, 0x60, 0x62, 0x8a, 0xf6, 0xb7, 0x5a, 0xf0, 0x21, 0x68, 0xf4, 0x5b, 0x72, 0xf8, 0xf0, 0x9e, 0x45, 0xed, 0x12, 0x7c, 0x20 ],
-const [ 0xc3, 0x07, 0x0d, 0x79, 0xeb, 0xe3, 0xc6, 0xa9, 0x8a, 0xc1, 0x3e, 0x50, 0xae, 0x47, 0x10, 0xe6, 0x02, 0x48, 0x5a, 0x68, 0xa0, 0x43, 0x29, 0xfb, 0x27, 0x2c, 0x31, 0xd3, 0x0d, 0x6f, 0xc2, 0x53 ],
-const [ 0xa9, 0xd5, 0x99, 0xa9, 0xd0, 0x03, 0x68, 0x6e, 0x2a, 0x3b, 0x2a, 0x27, 0x40, 0x76, 0x44, 0xb7, 0x3b, 0xc4, 0xd7, 0xc7, 0xef, 0x3e, 0xe7, 0x5d, 0x19, 0x3c, 0xbd, 0xb0, 0xe5, 0xc8, 0x89, 0x3b ],
-const [ 0x8e, 0xf7, 0x3e, 0x17, 0xf2, 0xdc, 0x9e, 0x06, 0x32, 0x30, 0xa3, 0x35, 0x2f, 0xe5, 0xc5, 0x49, 0xc1, 0xfd, 0x52, 0x6c, 0x43, 0xf9, 0x0f, 0x57, 0x53, 0x95, 0x22, 0xb0, 0xd3, 0xb2, 0x2f, 0x97 ],
-const [ 0xa5, 0x35, 0xc3, 0x8a, 0x4f, 0x69, 0xcc, 0xbc, 0x13, 0x43, 0x06, 0xf5, 0xf1, 0x58, 0x01, 0x9b, 0x7c, 0x79, 0x99, 0x26, 0x25, 0xe4, 0x62, 0xe9, 0xbc, 0xba, 0x4a, 0x2f, 0x34, 0xb4, 0x79, 0x8a ],
-const [ 0x2b, 0x3a, 0x58, 0x90, 0xde, 0x01, 0xa3, 0x0f, 0x88, 0xd4, 0xf7, 0xea, 0xaf, 0x70, 0x2f, 0x61, 0x29, 0xa5, 0xe7, 0x71, 0x8d, 0xfe, 0x8f, 0x9c, 0xe7, 0xa4, 0xbf, 0xe8, 0xb0, 0x80, 0xca, 0x2a ],
-const [ 0xc0, 0x5d, 0x6b, 0x83, 0xa2, 0x7e, 0xf6, 0x5c, 0xef, 0x55, 0x71, 0x22, 0x2d, 0x24, 0xad, 0xbc, 0xc1, 0x89, 0x58, 0x64, 0x05, 0x48, 0xbc, 0x95, 0x9a, 0x4b, 0xaa, 0x2b, 0x00, 0xe7, 0xb0, 0xc6 ],
-const [ 0x89, 0x58, 0x68, 0xf1, 0x96, 0x95, 0xc1, 0xf5, 0xa2, 0x6d, 0x8a, 0xe3, 0x39, 0xc5, 0x67, 0xe5, 0xab, 0x43, 0xb0, 0xfc, 0xc8, 0x05, 0x60, 0x50, 0xe9, 0x92, 0x2e, 0xc5, 0x30, 0x10, 0xf9, 0xce ],
-const [ 0x95, 0x0f, 0xb0, 0xcd, 0xe3, 0x0f, 0x34, 0xf5, 0x97, 0xaf, 0x5c, 0xaa, 0x2b, 0x16, 0xfc, 0x86, 0xa5, 0xc3, 0xef, 0x06, 0x5d, 0x36, 0xff, 0xdd, 0x06, 0xec, 0x04, 0x8e, 0xec, 0x91, 0x50, 0x39 ],
-const [ 0xa3, 0x1a, 0xcd, 0x1a, 0xf2, 0x61, 0xa1, 0xe7, 0xf7, 0x51, 0x14, 0x0a, 0x58, 0x0b, 0x91, 0xd4, 0x76, 0x79, 0x2a, 0x9f, 0x96, 0xe1, 0xdd, 0x01, 0x3f, 0xba, 0x16, 0x45, 0xe2, 0xbf, 0x76, 0x1b ],
-const [ 0x8d, 0xdf, 0x3b, 0xe2, 0xab, 0x49, 0xf1, 0x1f, 0x12, 0xf3, 0x92, 0xa0, 0x9f, 0x5b, 0x72, 0xfc, 0xdd, 0xec, 0x1e, 0x18, 0x6d, 0xd3, 0xe4, 0x9a, 0xab, 0x0e, 0x95, 0xa0, 0x8e, 0xc5, 0x89, 0xb1 ],
-const [ 0x90, 0xae, 0xa6, 0xf7, 0xc6, 0xc3, 0x81, 0x57, 0x18, 0xba, 0x19, 0x59, 0xec, 0xec, 0xaf, 0x53, 0x12, 0x80, 0x20, 0xb7, 0x03, 0x9a, 0x51, 0xe7, 0x66, 0xd0, 0xcf, 0x4b, 0xd9, 0xde, 0xb7, 0xa2 ],
-const [ 0x5e, 0x6a, 0x48, 0x97, 0x25, 0x81, 0x0a, 0x85, 0xfe, 0x45, 0x05, 0xfa, 0xb0, 0x3d, 0x3b, 0x3c, 0x78, 0x77, 0x10, 0x75, 0xe9, 0x13, 0xb7, 0x59, 0xf7, 0x01, 0xea, 0x08, 0x4e, 0x0a, 0xde, 0x36 ],
-const [ 0x61, 0x84, 0x06, 0xf4, 0x3d, 0xd7, 0x9a, 0xcd, 0x2c, 0xd3, 0x84, 0xb3, 0xd1, 0x27, 0x09, 0xe4, 0x3d, 0x26, 0x7d, 0x76, 0xfe, 0xbf, 0x63, 0xed, 0x58, 0xaf, 0xd6, 0x0d, 0xd2, 0xf5, 0x28, 0xed ],
-const [ 0xad, 0x44, 0x5d, 0xa4, 0x8d, 0x46, 0xab, 0xfe, 0xf1, 0x03, 0xf9, 0xc6, 0xc5, 0x47, 0x34, 0x44, 0xff, 0xbb, 0xae, 0x90, 0x27, 0x5c, 0xc4, 0xa8, 0x16, 0x2b, 0xbe, 0xc0, 0xfe, 0x26, 0xf6, 0xd9 ],
-const [ 0x05, 0x90, 0x5a, 0x6e, 0xcb, 0x16, 0x79, 0x36, 0x40, 0x90, 0xc9, 0x51, 0x0f, 0x06, 0xfb, 0x3c, 0x0e, 0x09, 0x32, 0x1b, 0x21, 0xfe, 0x0a, 0xad, 0x5c, 0xb9, 0xd9, 0x80, 0x67, 0x4e, 0x35, 0x61 ],
-const [ 0x3e, 0x9e, 0xeb, 0xe9, 0xad, 0xd8, 0xe8, 0x31, 0x58, 0x92, 0xc6, 0xb3, 0xbb, 0xeb, 0x77, 0xab, 0xf6, 0x0d, 0xcd, 0xae, 0x19, 0x61, 0xe2, 0x83, 0x9f, 0xff, 0xb7, 0x35, 0x38, 0x69, 0x1b, 0x66 ],
-const [ 0xc1, 0x16, 0xc6, 0x98, 0xb1, 0x2c, 0x15, 0x3b, 0x57, 0xc9, 0xd5, 0x7d, 0x4e, 0xeb, 0x97, 0xf7, 0xdd, 0x8e, 0xff, 0x14, 0xcc, 0x2a, 0x2d, 0xbd, 0x76, 0x7e, 0x7c, 0x35, 0x20, 0x8c, 0x6f, 0x41 ],
-const [ 0xff, 0x73, 0x00, 0x4a, 0x8a, 0xa6, 0x29, 0xca, 0x5c, 0x72, 0x41, 0x4e, 0xa6, 0x52, 0xa6, 0x53, 0x3f, 0xd2, 0x82, 0xe8, 0x47, 0xa4, 0x92, 0x65, 0x0a, 0xf1, 0x2c, 0x59, 0x26, 0xed, 0x80, 0xc4 ],
-const [ 0xbe, 0xdb, 0x39, 0x2f, 0x8a, 0x77, 0xa4, 0x70, 0x85, 0x8a, 0x9c, 0x36, 0x6b, 0x72, 0x55, 0xf3, 0xb2, 0x5c, 0x9a, 0x5d, 0x10, 0xb7, 0x6d, 0x79, 0x3d, 0xe9, 0xee, 0xf8, 0xfa, 0x40, 0x7e, 0xc7 ],
-const [ 0x86, 0x3b, 0xbe, 0x40, 0xcb, 0x66, 0x94, 0xf7, 0x36, 0xb5, 0x32, 0xb9, 0x5e, 0x38, 0xfb, 0xab, 0xe0, 0xe4, 0x9c, 0x15, 0xf7, 0xdc, 0x42, 0xc5, 0x4d, 0xef, 0x09, 0xae, 0x11, 0x61, 0xb7, 0xd5 ],
-const [ 0xb4, 0x76, 0xd2, 0x8a, 0xeb, 0x5f, 0xac, 0x74, 0xfc, 0xf4, 0xcd, 0xb1, 0xab, 0x00, 0xa3, 0x85, 0x71, 0x23, 0x1d, 0xb0, 0x66, 0x24, 0xb4, 0x58, 0x65, 0x88, 0xac, 0x43, 0x6a, 0x64, 0x97, 0x49 ],
-const [ 0x26, 0x8b, 0x0e, 0x1f, 0x11, 0x00, 0x52, 0xaa, 0xa2, 0xee, 0xe3, 0x27, 0xe3, 0x4a, 0xb3, 0x49, 0x02, 0x98, 0x06, 0xda, 0xf7, 0x02, 0x30, 0x68, 0x67, 0xa7, 0xa0, 0x3b, 0xc8, 0x35, 0x1d, 0x8a, 0xc7, 0xba, 0x50, 0xee, 0xe6, 0xb7, 0x83, 0x16, 0x6a, 0x77, 0xa8, 0xbd, 0x74, 0x9e, 0x9d, 0xd9, 0x6e, 0x05, 0xae, 0x15, 0xa8, 0xc5, 0x5c, 0x82, 0x43, 0x92, 0x5c, 0x89, 0x4f, 0x4b, 0xe3, 0x25 ],
-const [ 0x77, 0xc1, 0x92, 0x47, 0x22, 0x53, 0x68, 0x5d, 0x52, 0xa6, 0xfc, 0x39, 0x3b, 0xb7, 0xa9, 0xd5, 0xbd, 0x73, 0xf5, 0xaf, 0x2b, 0x6e, 0x74, 0x20, 0x50, 0xd7, 0xea, 0xe9, 0xb4, 0xac, 0xb0, 0x0f, 0x1b, 0x2a, 0x59, 0xea, 0x4f, 0x88, 0x94, 0x78, 0x1f, 0xe4, 0x54, 0xf7, 0xa8, 0x7e, 0x2f, 0xb2, 0xd3, 0x24, 0x04, 0x1b, 0x1f, 0xed, 0xe1, 0x1a, 0xa1, 0x2a, 0x24, 0xa5, 0x49, 0x9a, 0xe0, 0x91 ],
-const [ 0x79, 0xa5, 0x57, 0x10, 0x25, 0x17, 0xe4, 0x06, 0xb2, 0x65, 0x57, 0xd0, 0x26, 0xcf, 0x06, 0x42, 0x9a, 0x5b, 0xe8, 0x40, 0xec, 0xc0, 0xf0, 0xc9, 0xb3, 0x83, 0x99, 0x35, 0x78, 0x60, 0xc3, 0xba, 0x23, 0xeb, 0xbd, 0x35, 0xb3, 0x77, 0xa3, 0x27, 0x32, 0x37, 0xea, 0xfe, 0xe8, 0xa3, 0x39, 0x97, 0xd0, 0x1d, 0x7a, 0x00, 0x48, 0xd5, 0x32, 0x82, 0x0c, 0xea, 0x0d, 0xdf, 0x65, 0xd2, 0xbe, 0xd8 ],
-const [ 0x3a, 0x41, 0x82, 0xaf, 0x8c, 0x39, 0x14, 0xd1, 0xdf, 0x57, 0xb6, 0x32, 0x1f, 0xa5, 0xde, 0xc6, 0x87, 0x48, 0xad, 0x74, 0x6e, 0x03, 0x69, 0xbb, 0x64, 0xfc, 0x2d, 0x9b, 0x7d, 0xc3, 0xdf, 0xb3, 0xed, 0x90, 0x63, 0xa7, 0xd5, 0xcc, 0x0e, 0xc4, 0x5d, 0xd3, 0x5e, 0xe7, 0x03, 0xf9, 0xe8, 0x9a, 0x33, 0xcb, 0x91, 0x81, 0x17, 0x97, 0x01, 0xf5, 0xb0, 0x2e, 0x55, 0xee, 0x26, 0xe8, 0x14, 0x26 ],
-const [ 0x35, 0x10, 0xc8, 0xf6, 0xda, 0x91, 0x37, 0x1b, 0x5c, 0x81, 0x46, 0x8b, 0x71, 0x4d, 0x05, 0x28, 0x4b, 0xec, 0xda, 0xd0, 0x1d, 0x5a, 0x24, 0x76, 0xdc, 0x48, 0x1f, 0x78, 0x43, 0x12, 0x08, 0x2c, 0x19, 0xf1, 0x81, 0xbc, 0xb6, 0x72, 0x36, 0x35, 0xc4, 0x26, 0xc1, 0xda, 0x43, 0x9b, 0xcb, 0xbe, 0xcf, 0x8c, 0x74, 0x92, 0x26, 0x55, 0xf5, 0xbb, 0xe5, 0xa9, 0x84, 0xa8, 0x92, 0x87, 0x79, 0x62 ],
-const [ 0x23, 0x90, 0x40, 0x39, 0x64, 0x0d, 0x48, 0xe1, 0x63, 0x67, 0x6d, 0x16, 0x19, 0x88, 0x84, 0xa8, 0x25, 0x60, 0x4b, 0xa8, 0x63, 0x29, 0xa1, 0xcd, 0xc0, 0xf0, 0xf6, 0x16, 0x4d, 0x51, 0x00, 0xb1, 0x92, 0x82, 0xaf, 0x1c, 0x24, 0x93, 0x64, 0x8a, 0x7a, 0xf3, 0x5e, 0x88, 0xfc, 0x37, 0x74, 0xe0, 0x5d, 0x17, 0x0a, 0xbe, 0x2b, 0xb9, 0x3e, 0x11, 0xa4, 0x33, 0x62, 0x34, 0xcc, 0x4b, 0xaf, 0xce ],
-const [ 0xd4, 0x47, 0x1c, 0x7f, 0x61, 0x86, 0xe8, 0xc0, 0xed, 0x3d, 0xfa, 0x2b, 0x0e, 0xf2, 0xcd, 0x18, 0x4d, 0x60, 0x41, 0xc0, 0x92, 0x1e, 0xa5, 0xfd, 0xdc, 0x7c, 0x15, 0x51, 0x35, 0xae, 0x06, 0x2a, 0xe6, 0x2c, 0x1f, 0x64, 0xe7, 0x58, 0x4b, 0x10, 0x99, 0x61, 0x0c, 0x74, 0xb7, 0x68, 0x12, 0x52, 0x8a, 0xe2, 0x0c, 0x6e, 0x5d, 0x3e, 0xbe, 0x4a, 0x31, 0xc7, 0x53, 0x34, 0xb2, 0xcb, 0xf5, 0x82 ],
-const [ 0xde, 0x6c, 0xc5, 0xa1, 0x86, 0xdc, 0x79, 0xb9, 0xe2, 0x1b, 0x05, 0x78, 0xb5, 0xac, 0x6e, 0x24, 0x40, 0xa1, 0x15, 0xe7, 0x13, 0x16, 0x2d, 0x75, 0x22, 0xfe, 0x72, 0xee, 0x1b, 0x22, 0x18, 0x06, 0xf7, 0x66, 0x02, 0x63, 0xd0, 0x4e, 0x35, 0x47, 0xf2, 0xc2, 0x8c, 0x6e, 0x34, 0x0e, 0xad, 0x3a, 0x89, 0x2d, 0x3b, 0x0d, 0xd2, 0x47, 0x4e, 0xf6, 0xf6, 0x78, 0x20, 0x91, 0x35, 0xd3, 0x09, 0x28 ],
-const [ 0x89, 0x89, 0xb2, 0x29, 0x9f, 0x9d, 0xb5, 0xa5, 0xdf, 0x02, 0x53, 0xa9, 0x7b, 0x77, 0x5c, 0x94, 0xe8, 0xe9, 0x19, 0x5a, 0xd6, 0x98, 0xe1, 0xcd, 0x65, 0x76, 0xe7, 0x1b, 0x96, 0xcf, 0x56, 0x98, 0xff, 0x2f, 0xa0, 0xbe, 0xc4, 0x81, 0x12, 0x72, 0xc2, 0x74, 0xad, 0x89, 0x0d, 0x23, 0x31, 0x8b, 0x9d, 0xf4, 0x7a, 0xb7, 0x44, 0xc0, 0x0f, 0x47, 0xe3, 0x35, 0xf9, 0xf5, 0xde, 0x79, 0xd1, 0xbd ],
-const [ 0x8f, 0x55, 0xe5, 0x3e, 0x04, 0x6e, 0x6d, 0x6d, 0x64, 0xc4, 0x46, 0x8d, 0x44, 0xaa, 0x49, 0xa4, 0xe0, 0x77, 0x42, 0xdd, 0x04, 0xd8, 0xf4, 0x81, 0x2c, 0x6b, 0x5e, 0x22, 0xea, 0x89, 0x3d, 0x1a, 0x88, 0x63, 0xd2, 0x34, 0xee, 0x50, 0xe5, 0xa8, 0xc7, 0x65, 0x0a, 0x4d, 0xe0, 0x47, 0x23, 0x0a, 0xd0, 0x3d, 0x26, 0x8d, 0xde, 0x89, 0x21, 0x40, 0x1f, 0xf9, 0x7b, 0x79, 0xdf, 0xb9, 0x7c, 0xf2 ],
-const [ 0xd5, 0xbb, 0xd2, 0xa2, 0xa5, 0x36, 0xe6, 0x20, 0x42, 0x59, 0xcb, 0xc2, 0xaa, 0x7e, 0x88, 0x45, 0x2f, 0xfc, 0x2a, 0x52, 0x70, 0x48, 0x5c, 0xb8, 0x87, 0x60, 0x38, 0xfa, 0x84, 0x69, 0x5d, 0x09, 0x1b, 0x96, 0x42, 0x52, 0x99, 0x4d, 0xca, 0xfb, 0x1c, 0x85, 0x18, 0x6a, 0x04, 0x73, 0xa4, 0x08, 0xa5, 0x65, 0x8e, 0x44, 0x3e, 0xee, 0x33, 0xda, 0x2f, 0x43, 0xff, 0x55, 0x66, 0xe5, 0x82, 0xd2 ],
-const [ 0x4c, 0x34, 0x13, 0x27, 0x86, 0x86, 0x5e, 0xbb, 0xa9, 0xbd, 0x1a, 0xa5, 0xd2, 0xd3, 0x67, 0x56, 0x37, 0x74, 0x4f, 0x7e, 0x5e, 0x61, 0x9e, 0x8a, 0x8e, 0x16, 0xf3, 0x6b, 0x84, 0xab, 0x18, 0x9a, 0x66, 0xf8, 0x8f, 0x59, 0xfd, 0xfc, 0x6d, 0x3b, 0x1e, 0x80, 0x6c, 0xe6, 0x69, 0xf7, 0x3b, 0x18, 0x37, 0xa9, 0x18, 0xe8, 0xcd, 0x10, 0xa1, 0x4f, 0xd6, 0x82, 0xe7, 0xe6, 0x10, 0x11, 0xc5, 0xf1 ],
-const [ 0xd7, 0x93, 0x11, 0x74, 0xea, 0x18, 0x8b, 0x2c, 0x8a, 0x1f, 0x04, 0x59, 0x78, 0x34, 0x65, 0x92, 0x01, 0x42, 0x83, 0xa1, 0xd2, 0x0f, 0x99, 0x2c, 0x0e, 0x06, 0xf5, 0x95, 0x9e, 0x39, 0xf1, 0x1e, 0xc9, 0xa6, 0x25, 0x51, 0x04, 0xb9, 0xdb, 0x9f, 0x0b, 0x13, 0xc3, 0x47, 0x30, 0x8a, 0xe9, 0x79, 0xf3, 0x71, 0xe3, 0xbb, 0xd4, 0x19, 0x4f, 0x8d, 0x65, 0x97, 0x7d, 0x48, 0xa3, 0xc8, 0x68, 0x4c ],
-const [ 0x45, 0x42, 0x62, 0xab, 0x05, 0xcc, 0xa5, 0x7f, 0xf0, 0x0f, 0x12, 0xd6, 0x53, 0xf0, 0x8a, 0x5e, 0x2e, 0x44, 0x1e, 0x32, 0x44, 0x93, 0xc6, 0xb8, 0x6e, 0x1b, 0x56, 0xc9, 0x34, 0x18, 0xaf, 0x13, 0x9e, 0x43, 0x32, 0xbc, 0x48, 0x99, 0x7b, 0x48, 0xb5, 0x5d, 0x4b, 0xbd, 0xe5, 0x60, 0xc5, 0x05, 0x2a, 0x80, 0xde, 0x93, 0x37, 0x6f, 0x0f, 0x4a, 0x7a, 0xb6, 0x4c, 0x9a, 0xac, 0xf9, 0x3a, 0xec ],
-const [ 0x66, 0xec, 0xea, 0x6c, 0xe6, 0x27, 0x45, 0x78, 0xae, 0x52, 0x83, 0xc8, 0xde, 0x95, 0x76, 0xf5, 0x86, 0x5a, 0x38, 0xc3, 0x21, 0xb9, 0xca, 0x3d, 0x5f, 0x33, 0xfb, 0x08, 0x28, 0xa4, 0x8b, 0xf1, 0xdd, 0x73, 0x91, 0xc8, 0xe1, 0x0c, 0x1a, 0x71, 0x58, 0x90, 0x13, 0x38, 0x2e, 0xca, 0x69, 0x65, 0x5b, 0x66, 0x6e, 0x10, 0x66, 0x5d, 0x7f, 0x37, 0x28, 0xb4, 0xe4, 0x0e, 0xd3, 0x66, 0xf7, 0x96 ],
-const [ 0xb2, 0x44, 0xd3, 0x05, 0xbf, 0xd5, 0x34, 0xde, 0x7b, 0x05, 0xb6, 0x6c, 0xda, 0x0b, 0x7b, 0xd3, 0xc2, 0x41, 0x49, 0x56, 0xb5, 0x36, 0x46, 0x11, 0xb0, 0xfe, 0xff, 0xea, 0x53, 0xcd, 0xaf, 0xc5, 0x41, 0xc5, 0xbf, 0xf7, 0xca, 0x0b, 0x89, 0xfd, 0xc8, 0x20, 0x61, 0x6f, 0xc6, 0x6f, 0xd6, 0x2f, 0x68, 0x22, 0x35, 0xe6, 0x07, 0x3a, 0x4f, 0xb1, 0x9b, 0xdf, 0x7c, 0x17, 0xde, 0xf4, 0xe0, 0x3f ],
-const [ 0xf3, 0xcb, 0x2c, 0xba, 0xaf, 0xe6, 0x28, 0x1e, 0xbb, 0x54, 0x6a, 0xf8, 0x8c, 0x05, 0x2e, 0x66, 0x58, 0xa5, 0x84, 0x07, 0xcd, 0x7b, 0xa3, 0x05, 0x02, 0x91, 0x80, 0x52, 0xae, 0x15, 0x9f, 0x31, 0x98, 0xff, 0x29, 0xf9, 0x4e, 0xf4, 0x40, 0x15, 0x1a, 0x6a, 0x8f, 0x50, 0x32, 0x0e, 0x25, 0x50, 0x2f, 0x62, 0x83, 0x5f, 0xc0, 0xab, 0xf3, 0x72, 0xa0, 0x0a, 0x1c, 0x63, 0xc5, 0xe9, 0xd4, 0x82 ],
-const [ 0x5e, 0xd9, 0x64, 0x04, 0xce, 0x1f, 0x0a, 0xe0, 0x0c, 0x32, 0xad, 0xa5, 0xf6, 0x05, 0xc1, 0x02, 0x53, 0xd5, 0xde, 0x41, 0x13, 0x5f, 0x21, 0x1b, 0xd8, 0x4f, 0xd0, 0xd1, 0xb6, 0xfb, 0x3c, 0x78, 0x37, 0x51, 0xec, 0x94, 0xa3, 0x0e, 0xf7, 0xe9, 0x7e, 0x32, 0xb2, 0x8e, 0x51, 0xb0, 0x8b, 0x43, 0xae, 0x69, 0x35, 0x04, 0x6e, 0x5b, 0x06, 0xdf, 0x3d, 0x16, 0x9d, 0x02, 0x59, 0x70, 0xc7, 0x18 ],
-const [ 0xc9, 0x26, 0x60, 0xb2, 0xf0, 0x09, 0xf4, 0x7d, 0x35, 0x89, 0xc7, 0x4e, 0x22, 0xda, 0xca, 0x9f, 0x60, 0xd0, 0x14, 0x7f, 0xce, 0xa2, 0x8e, 0x7c, 0xd0, 0xef, 0xf0, 0xc5, 0xea, 0xfe, 0xec, 0x90, 0x8d, 0x4a, 0xa8, 0xba, 0x30, 0x3e, 0x72, 0xad, 0xa3, 0x3d, 0xb0, 0x87, 0xa0, 0xe5, 0x15, 0x79, 0xa4, 0x95, 0x1b, 0x6c, 0xfc, 0x2c, 0xad, 0xeb, 0x23, 0x14, 0x23, 0x3d, 0x4b, 0x80, 0x74, 0xd1 ],
-const [ 0x2a, 0xb0, 0x4d, 0x9a, 0x3a, 0xf6, 0x59, 0x17, 0x1d, 0x80, 0x65, 0x3a, 0x1f, 0x7a, 0xb9, 0xbc, 0x64, 0x86, 0x3e, 0x6c, 0xcf, 0x0f, 0x88, 0x25, 0x23, 0xd9, 0x13, 0xfd, 0x68, 0xdd, 0xcd, 0xc0, 0x91, 0x55, 0xd5, 0x9d, 0x5b, 0x13, 0x83, 0x1e, 0x78, 0x16, 0xa8, 0x5e, 0xed, 0x5f, 0x17, 0x76, 0xb9, 0x01, 0x64, 0x38, 0xb7, 0x78, 0xeb, 0x20, 0xc5, 0x3b, 0x14, 0x87, 0x26, 0x95, 0xd6, 0x1a ],
-const [ 0x2c, 0x66, 0xbc, 0x60, 0x70, 0x7a, 0x1d, 0xa0, 0xc1, 0x94, 0xe5, 0x42, 0x2b, 0xa0, 0x22, 0xac, 0xd0, 0x49, 0xa0, 0x05, 0x8a, 0x0f, 0xb2, 0xe9, 0xd2, 0x99, 0x2e, 0x61, 0xe1, 0x4c, 0xba, 0x12, 0x14, 0x1c, 0x46, 0xb4, 0x95, 0xa2, 0xda, 0xc6, 0x38, 0x6f, 0x92, 0x80, 0xa3, 0xa1, 0xe7, 0x0a, 0xb2, 0xb4, 0x2f, 0xeb, 0x1a, 0x9a, 0x67, 0xc4, 0x4c, 0x0d, 0x31, 0x3e, 0x9c, 0x24, 0x19, 0x41 ],
-const [ 0x67, 0x85, 0x6f, 0x8f, 0x84, 0xdb, 0xa1, 0x9c, 0xb3, 0x8a, 0x23, 0xb0, 0xef, 0xad, 0x6e, 0xed, 0x22, 0x9c, 0x53, 0x6f, 0x45, 0x75, 0x3f, 0x81, 0xc8, 0xfb, 0xbe, 0x11, 0x34, 0xa4, 0x3e, 0x62, 0x0f, 0xed, 0x16, 0x01, 0x00, 0xf1, 0xc6, 0xfa, 0x33, 0x3a, 0x80, 0x4b, 0xff, 0xd7, 0xe8, 0x99, 0xc6, 0xae, 0x19, 0x22, 0x1d, 0x14, 0xe8, 0xf3, 0x2d, 0x9b, 0x6c, 0x5b, 0x59, 0x2b, 0xbe, 0x9f ],
-const [ 0xcd, 0xe3, 0x63, 0x48, 0x5e, 0x01, 0xd4, 0xd3, 0x62, 0x42, 0x66, 0x5f, 0x35, 0xa6, 0xe9, 0x10, 0xb9, 0x91, 0xfd, 0x90, 0x41, 0x21, 0x1c, 0x05, 0xad, 0xbf, 0xdb, 0x40, 0xd6, 0xf4, 0x6c, 0x37, 0x2c, 0x7e, 0x68, 0xb6, 0x9d, 0xa4, 0xcb, 0x51, 0xb9, 0xc6, 0x41, 0x9d, 0x14, 0x38, 0xa0, 0xa0, 0xec, 0x51, 0xb5, 0x85, 0x0c, 0xbe, 0x43, 0x94, 0xf0, 0x1c, 0x49, 0x62, 0x2a, 0xc7, 0x84, 0x45 ],
-const [ 0x74, 0xc6, 0xbd, 0x81, 0xed, 0x71, 0xbe, 0xba, 0xcf, 0x5f, 0x72, 0x63, 0xca, 0xd7, 0x15, 0x95, 0x1c, 0x69, 0x0a, 0xfe, 0x4c, 0xd1, 0x27, 0xe4, 0x1b, 0x1e, 0x54, 0x68, 0xb8, 0x13, 0x54, 0x08, 0x33, 0xcd, 0xe2, 0x68, 0x34, 0xa6, 0x00, 0x52, 0xed, 0x5a, 0x8c, 0xfb, 0x4d, 0x68, 0x14, 0x88, 0x76, 0xbb, 0xeb, 0xd0, 0x72, 0x8a, 0x7c, 0x64, 0x21, 0x7d, 0xdf, 0xcd, 0x76, 0x11, 0xaa, 0x14 ],
-const [ 0x18, 0xf1, 0x00, 0x73, 0xe7, 0x14, 0x22, 0xa3, 0xd2, 0x23, 0xc1, 0xa9, 0x5f, 0xdf, 0xa6, 0xf3, 0xd5, 0xc2, 0x71, 0x72, 0xf0, 0xe4, 0xec, 0x9e, 0xd9, 0x1f, 0x99, 0xbb, 0x55, 0x71, 0x8d, 0x5b, 0x3d, 0xa3, 0x81, 0x25, 0x2e, 0x28, 0x27, 0xd4, 0x81, 0x48, 0xba, 0x83, 0x7e, 0x7e, 0xd9, 0x27, 0xcc, 0x1e, 0x95, 0x5d, 0x2c, 0x3a, 0xc9, 0x66, 0x68, 0xc7, 0xaa, 0x6f, 0x85, 0xfc, 0x9e, 0x16 ],
-const [ 0xfd, 0x4e, 0x7d, 0xfc, 0x0c, 0x21, 0x46, 0x1f, 0x69, 0xfb, 0x23, 0x7f, 0xa2, 0x83, 0x37, 0x84, 0x13, 0xf1, 0xe5, 0xd2, 0x5d, 0xb7, 0xe6, 0x13, 0x14, 0x67, 0x98, 0xf6, 0xb8, 0xd1, 0x99, 0x77, 0xe7, 0x6b, 0x95, 0x62, 0xd0, 0xf7, 0x5c, 0x12, 0xeb, 0x5f, 0x38, 0x7f, 0xe8, 0xe4, 0x7d, 0x78, 0xe5, 0x77, 0x61, 0x2c, 0xe3, 0x67, 0x0e, 0xef, 0x7b, 0x3d, 0xf6, 0x3b, 0xcd, 0xe5, 0x67, 0xf5 ],
-const [ 0x02, 0x93, 0x92, 0x6e, 0x81, 0xc0, 0x51, 0xa6, 0xc0, 0x94, 0x5d, 0x25, 0x94, 0x64, 0x4b, 0x82, 0x4c, 0x10, 0x0c, 0x36, 0x8a, 0x85, 0x63, 0x47, 0x51, 0x86, 0x9c, 0x24, 0x5e, 0xad, 0x7c, 0xd0, 0xbc, 0xac, 0x74, 0x43, 0x93, 0xd9, 0x19, 0x0e, 0x41, 0xea, 0xd9, 0x3d, 0xab, 0xfc, 0xe6, 0x81, 0xd5, 0xdb, 0x77, 0x8f, 0xb1, 0x7d, 0x30, 0xc3, 0x35, 0xcf, 0xde, 0x09, 0xb0, 0xb5, 0x68, 0xfd ],
-const [ 0x75, 0xdf, 0xc0, 0xb7, 0x34, 0x04, 0x6a, 0xa2, 0xef, 0x9d, 0x82, 0xf7, 0x59, 0x62, 0x69, 0xe1, 0x00, 0x79, 0x3e, 0x52, 0x23, 0xf8, 0x53, 0xa2, 0xc3, 0xa5, 0xe1, 0x79, 0xfc, 0x00, 0xfa, 0xee, 0x96, 0x83, 0xc0, 0xf0, 0xd8, 0x28, 0xd5, 0xe5, 0x9c, 0x2c, 0x12, 0x92, 0xa9, 0x12, 0x7c, 0x3b, 0x3c, 0xec, 0x73, 0x0b, 0xe8, 0xd6, 0x2d, 0xb6, 0xa0, 0xc3, 0x63, 0x5c, 0x13, 0x7c, 0x4a, 0xb1 ],
-const [ 0x8a, 0xf2, 0xe7, 0x2e, 0xd2, 0xad, 0x3b, 0xe1, 0xe8, 0x1a, 0x21, 0xe6, 0xfc, 0xbd, 0xdf, 0xf6, 0x2d, 0x45, 0x38, 0x5b, 0xf0, 0x61, 0xed, 0x60, 0xb6, 0xd5, 0x83, 0x06, 0xc9, 0xcd, 0x47, 0xf8, 0x77, 0x71, 0x90, 0xc1, 0x73, 0xb9, 0x44, 0x3d, 0x78, 0x83, 0x9d, 0x4d, 0x2f, 0xe3, 0x2d, 0xcf, 0x53, 0xba, 0x20, 0xce, 0x13, 0x8a, 0xc2, 0xf5, 0xb8, 0x88, 0x41, 0x4a, 0x87, 0xf3, 0xb3, 0x19 ],
-const [ 0x81, 0xb7, 0xe4, 0x64, 0x79, 0x68, 0x41, 0x36, 0x8c, 0xda, 0x2c, 0xf7, 0x04, 0x80, 0x55, 0x64, 0x3e, 0x8d, 0x38, 0xde, 0xa6, 0x14, 0xab, 0xb3, 0xe3, 0x6d, 0xb3, 0x9f, 0x4e, 0xda, 0x9c, 0x93, 0xa9, 0x6a, 0x49, 0xb4, 0x0e, 0x1e, 0xc8, 0xa7, 0x25, 0x4b, 0x29, 0x0c, 0x9a, 0x3f, 0x91, 0x48, 0xce, 0x27, 0x8a, 0x88, 0xcd, 0x31, 0x9d, 0x03, 0x81, 0xed, 0x23, 0x7f, 0x25, 0xf9, 0x58, 0x16 ],
-const [ 0x8e, 0xcc, 0xd4, 0x67, 0xd8, 0x75, 0x83, 0x9c, 0xb4, 0xb0, 0xa0, 0x17, 0x0a, 0x97, 0x6f, 0x60, 0x56, 0x87, 0x68, 0x59, 0xfb, 0x24, 0x2f, 0x69, 0xd9, 0x9d, 0xc6, 0xda, 0x21, 0x32, 0x02, 0x80, 0x68, 0xf3, 0x3b, 0x9c, 0xfb, 0xca, 0x48, 0xff, 0x73, 0xbb, 0xaa, 0x73, 0x89, 0x6b, 0x08, 0x56, 0x2b, 0xdf, 0xdc, 0x88, 0xcf, 0x87, 0x6b, 0x88, 0x07, 0x7b, 0xfa, 0xd9, 0x55, 0x04, 0x3f, 0xab ],
-const [ 0xb4, 0x88, 0x33, 0x2a, 0x10, 0xf2, 0xbc, 0x7d, 0x90, 0x42, 0xa1, 0x93, 0x3d, 0xa8, 0x5d, 0xcc, 0x89, 0x25, 0x04, 0xbe, 0x3e, 0xa8, 0xd5, 0x7b, 0xb5, 0x78, 0x0f, 0x16, 0x48, 0xd1, 0x07, 0x63, 0x09, 0xd2, 0x76, 0xff, 0xb5, 0x97, 0x17, 0x90, 0xe3, 0xa2, 0x72, 0x4e, 0x81, 0x7f, 0xf2, 0xc3, 0x81, 0xa7, 0x3e, 0xce, 0xd0, 0xa6, 0xc6, 0xee, 0x88, 0x79, 0x9c, 0xbd, 0x66, 0x3a, 0x86, 0xbb ],
-const [ 0x9d, 0xcb, 0x2a, 0xc4, 0x82, 0x97, 0x9d, 0x2b, 0x4f, 0x69, 0xb8, 0x61, 0x54, 0xa6, 0x62, 0x86, 0xc1, 0x0a, 0x73, 0xdd, 0x5e, 0x8f, 0x0e, 0xcf, 0x7d, 0x90, 0x31, 0x33, 0x2e, 0x2e, 0x8a, 0xcc, 0xb1, 0xf3, 0x8d, 0x13, 0x31, 0xb5, 0xc3, 0x37, 0xaf, 0xbd, 0x65, 0x63, 0x3c, 0x29, 0x29, 0x3f, 0x6b, 0x8f, 0x5c, 0xb9, 0x06, 0xe3, 0x31, 0x05, 0x00, 0x9b, 0x59, 0xe2, 0xab, 0x10, 0xd3, 0x20 ],
-const [ 0x5f, 0x36, 0x0b, 0x2b, 0xe1, 0xb1, 0xd9, 0x47, 0x3e, 0xc7, 0x4f, 0xfe, 0x0b, 0xca, 0x45, 0x5c, 0x71, 0x50, 0xcf, 0xb2, 0xd3, 0x3e, 0x06, 0x45, 0xb1, 0x25, 0x0c, 0x43, 0xcd, 0xd2, 0x4a, 0xfb, 0x8c, 0x20, 0xfc, 0x4c, 0x9e, 0x11, 0xf0, 0x5e, 0xe1, 0x1d, 0x8a, 0x91, 0x83, 0xca, 0x0c, 0xb3, 0x68, 0x7d, 0x14, 0x76, 0xcb, 0x90, 0x67, 0x21, 0x27, 0xa4, 0xec, 0x85, 0x58, 0x39, 0xfc, 0x33 ],
-const [ 0xc0, 0x5d, 0x6b, 0x83, 0xa2, 0x7e, 0xf6, 0x5c, 0xef, 0x55, 0x71, 0x22, 0x2d, 0x24, 0xad, 0xbc, 0xc1, 0x89, 0x58, 0x64, 0x05, 0x48, 0xbc, 0x95, 0x9a, 0x4b, 0xaa, 0x2b, 0x00, 0xe7, 0xb0, 0xc6, 0x63, 0x61, 0x92, 0x6f, 0xb8, 0xb1, 0xf8, 0x7e, 0x09, 0x85, 0x65, 0xba, 0x0d, 0x89, 0x68, 0xc3, 0xfc, 0xe6, 0x16, 0xad, 0xa1, 0x08, 0xb7, 0xee, 0xb1, 0xa5, 0xc0, 0x7a, 0x5b, 0xfb, 0x02, 0x2c ],
-const [ 0x2a, 0xf1, 0x05, 0x3d, 0x2c, 0xca, 0x20, 0x40, 0x6b, 0x78, 0x14, 0xab, 0x90, 0x13, 0x67, 0x7f, 0xee, 0xae, 0xb7, 0x73, 0xad, 0xe5, 0xfb, 0x2d, 0x27, 0xb5, 0x0b, 0xb8, 0x92, 0x91, 0x63, 0x33, 0xe0, 0xb1, 0x23, 0xc6, 0xe3, 0xae, 0x5b, 0xdb, 0xb5, 0x4c, 0x86, 0x8a, 0x57, 0x96, 0x54, 0x54, 0x98, 0x31, 0xad, 0x15, 0x38, 0xea, 0xf2, 0x34, 0x4e, 0x91, 0x86, 0x1d, 0xe7, 0x0a, 0x8d, 0xf1 ],
-const [ 0x9c, 0x94, 0x45, 0xd7, 0xdf, 0x7e, 0xab, 0x77, 0xc9, 0xa5, 0xc7, 0xaf, 0xbd, 0x2f, 0x38, 0x70, 0x7d, 0x26, 0xef, 0xb8, 0x9d, 0x1d, 0x41, 0x59, 0x38, 0x17, 0x3a, 0xfc, 0xe1, 0xa4, 0x35, 0x65, 0xdc, 0x4d, 0xa9, 0xf9, 0x8f, 0x32, 0x46, 0x7d, 0x33, 0xf2, 0x41, 0x20, 0xcf, 0xcb, 0xec, 0xbc, 0x67, 0x03, 0x89, 0x59, 0x70, 0x86, 0x60, 0xf3, 0x88, 0xd0, 0x0f, 0x7d, 0x64, 0x0d, 0x22, 0x25 ],
-const [ 0x64, 0x16, 0x9f, 0xd4, 0xb7, 0xba, 0x1e, 0x5a, 0x62, 0x41, 0x2b, 0x87, 0x19, 0xa2, 0xb6, 0x22, 0xd5, 0x03, 0x1a, 0xa7, 0x77, 0xce, 0xe7, 0xf5, 0xae, 0x06, 0xe4, 0x47, 0x1a, 0xdc, 0x54, 0x65, 0xb2, 0x7d, 0x79, 0x1c, 0x63, 0x2f, 0x57, 0xeb, 0xf9, 0x9c, 0xba, 0xff, 0x43, 0x6d, 0x7a, 0x62, 0x72, 0x1b, 0xfe, 0x6f, 0xc3, 0x02, 0xff, 0x89, 0x5e, 0xb8, 0x8e, 0x0c, 0x7d, 0x9c, 0x59, 0x84 ],
-const [ 0xc4, 0x95, 0x05, 0xbe, 0x68, 0x19, 0x6b, 0xf7, 0xb8, 0x74, 0xb2, 0x53, 0x53, 0xde, 0x09, 0xd6, 0x77, 0xa8, 0x47, 0x85, 0x6a, 0x14, 0x77, 0xd5, 0x18, 0x6a, 0x94, 0x64, 0xfd, 0x48, 0x91, 0xe7, 0x45, 0x3a, 0x9c, 0x63, 0x32, 0x8a, 0xa4, 0xa1, 0xbf, 0x5a, 0x19, 0xdc, 0x83, 0xef, 0xf3, 0xbc, 0xd7, 0x50, 0xf5, 0x88, 0x3b, 0x10, 0x33, 0x97, 0xf6, 0x68, 0xd2, 0x07, 0xfd, 0x89, 0x0f, 0xb2 ],
-const [ 0x5a, 0x90, 0x5c, 0x63, 0xf9, 0x66, 0x04, 0x29, 0xac, 0x7b, 0x7b, 0xe8, 0x47, 0x66, 0xc7, 0x1b, 0xa5, 0xa4, 0x43, 0x45, 0x8f, 0xea, 0x9f, 0xe3, 0xe0, 0xba, 0x28, 0x9f, 0xe7, 0x35, 0x49, 0xc6, 0x0d, 0x30, 0x52, 0xfc, 0xb8, 0x89, 0x79, 0x2f, 0x6f, 0xbb, 0x1f, 0xc9, 0x3e, 0xb1, 0x54, 0x2a, 0x5c, 0xd8, 0x9c, 0x55, 0x0b, 0x78, 0xf3, 0xe9, 0xc0, 0x44, 0x10, 0x54, 0x84, 0x30, 0xe7, 0x43 ],
-const [ 0xc9, 0xb7, 0x4b, 0x2b, 0xa8, 0x07, 0xd6, 0x5a, 0xe6, 0x27, 0x28, 0x88, 0x2a, 0x32, 0xc4, 0xc0, 0xa0, 0xb2, 0xd9, 0x01, 0x9f, 0xb5, 0x0c, 0xed, 0x8a, 0x24, 0x77, 0xc5, 0xf4, 0x51, 0xf2, 0x95, 0x07, 0xcf, 0x91, 0xac, 0x26, 0x86, 0x6e, 0x4f, 0xd1, 0x06, 0xa8, 0xaf, 0xc9, 0x1c, 0xab, 0x18, 0x75, 0xa3, 0xb2, 0x6a, 0x85, 0x9d, 0x8b, 0xcd, 0xd5, 0x83, 0x9a, 0xa1, 0x94, 0xd9, 0x21, 0xb4 ],
-const [ 0x3a, 0xf3, 0x49, 0xf3, 0x64, 0x72, 0x18, 0xe4, 0xbe, 0x26, 0xfa, 0x86, 0x3a, 0xc7, 0x13, 0x81, 0xb6, 0x4f, 0xcc, 0xaa, 0x7e, 0x66, 0x76, 0x1e, 0x12, 0x1e, 0x30, 0x8e, 0x2a, 0xe0, 0x0a, 0xd9, 0xf8, 0xa7, 0x6a, 0xe0, 0xad, 0x6b, 0xaf, 0x96, 0x3e, 0xe1, 0x15, 0x56, 0x68, 0x61, 0xd8, 0x7a, 0xf2, 0x27, 0x9d, 0x29, 0x32, 0xbf, 0x0d, 0x70, 0xd2, 0xbb, 0xc3, 0x94, 0xd4, 0xa7, 0x68, 0xa7 ],
-const [ 0x23, 0xd9, 0x92, 0x87, 0x3b, 0x96, 0x8a, 0x51, 0x06, 0xf9, 0x5b, 0x36, 0x93, 0xe2, 0x30, 0x42, 0x0a, 0xe8, 0x19, 0xd9, 0x93, 0xa8, 0x0b, 0xa8, 0x73, 0x5d, 0x29, 0xdb, 0x78, 0xb2, 0x41, 0x90, 0x98, 0xd4, 0x9a, 0x8c, 0xd5, 0xca, 0xed, 0x2d, 0x64, 0x09, 0xb1, 0xa0, 0x0d, 0x43, 0x9b, 0x54, 0xd5, 0x81, 0x66, 0xaf, 0xdb, 0x71, 0xd0, 0xff, 0x80, 0x01, 0xe5, 0xb3, 0xca, 0x2c, 0x7f, 0xcb ],
-const [ 0x2e, 0x4a, 0x7b, 0x49, 0xeb, 0x4f, 0xf9, 0x70, 0xdc, 0x93, 0x2c, 0x15, 0x6e, 0x9a, 0x1a, 0x7b, 0xe9, 0x61, 0x62, 0x17, 0x00, 0x9c, 0x6f, 0xf2, 0xa7, 0x42, 0xf1, 0x4f, 0x24, 0x4b, 0x8e, 0x8e, 0x69, 0xb9, 0xd4, 0x50, 0xa1, 0xd5, 0x73, 0xdc, 0x09, 0xbb, 0xa9, 0xc1, 0x01, 0x18, 0xfd, 0xbd, 0x63, 0x33, 0x30, 0xde, 0x13, 0x2a, 0x71, 0xe7, 0xd7, 0x7e, 0xd0, 0xf5, 0x69, 0xd2, 0xf5, 0x62 ],
-const [ 0xbb, 0xfc, 0x60, 0xad, 0x85, 0x31, 0x42, 0xbe, 0x6f, 0x60, 0x2f, 0xd1, 0xee, 0xf9, 0x5f, 0x88, 0x2f, 0x47, 0x89, 0x15, 0xaa, 0xad, 0x0e, 0xa0, 0xfa, 0x2f, 0x75, 0xe8, 0xec, 0x33, 0x17, 0x2e, 0xd6, 0x89, 0x1b, 0x4f, 0x2a, 0xaa, 0xa5, 0x30, 0x4a, 0x3d, 0x4b, 0x5e, 0x9e, 0xe0, 0xc9, 0xf6, 0xe5, 0x24, 0xf5, 0xc3, 0xc8, 0xd9, 0xf5, 0xa7, 0xb5, 0x8d, 0xaf, 0x3c, 0xea, 0x4f, 0x81, 0xba ],
-const [ 0xb9, 0x57, 0x5f, 0x4d, 0x5e, 0xcc, 0x0f, 0x4f, 0x62, 0xe4, 0xa0, 0x55, 0x6b, 0xb8, 0x94, 0x64, 0xba, 0x97, 0xd4, 0x57, 0x0e, 0x55, 0xac, 0xd4, 0xc5, 0xe5, 0x17, 0x7e, 0x45, 0x2a, 0x3d, 0x6c, 0x9a, 0x0b, 0x3a, 0xdb, 0x60, 0xc6, 0x21, 0x1f, 0xe4, 0x86, 0x40, 0xe0, 0x86, 0x37, 0xa6, 0x82, 0x62, 0x99, 0xe3, 0xe5, 0x2f, 0x93, 0x0f, 0x4f, 0x66, 0xcb, 0x0e, 0xa6, 0xa7, 0x73, 0x11, 0xe3 ],
-const [ 0xd2, 0x91, 0xad, 0xbf, 0x05, 0xb0, 0x65, 0x96, 0xc2, 0xf3, 0x6f, 0x41, 0xa8, 0xcd, 0x80, 0x70, 0x37, 0x0c, 0x42, 0xf6, 0x87, 0xb8, 0xa6, 0xcc, 0x3a, 0x3e, 0x7b, 0x59, 0xaf, 0xcd, 0x40, 0xf0, 0x78, 0x01, 0x36, 0x9b, 0x0f, 0xbf, 0xba, 0x17, 0xc4, 0x60, 0xd2, 0x1f, 0xfa, 0x11, 0x06, 0xee, 0x93, 0x79, 0x71, 0xff, 0xa9, 0x9d, 0x17, 0x17, 0x7f, 0x01, 0x79, 0x85, 0xb7, 0x10, 0x67, 0xa8 ],
-const [ 0x90, 0x2c, 0x2a, 0xf0, 0xd1, 0x3f, 0xb3, 0x53, 0xf1, 0x4a, 0x93, 0xea, 0xba, 0x7e, 0x8a, 0x8f, 0x76, 0x8e, 0xcc, 0xac, 0xb2, 0x64, 0xef, 0x95, 0x41, 0x14, 0x07, 0x1b, 0x84, 0x0e, 0x10, 0x5e, 0xe9, 0x97, 0x8c, 0xe2, 0xb2, 0x7a, 0x6c, 0xe5, 0xf8, 0xfa, 0x34, 0xf0, 0xef, 0x0c, 0x5b, 0xad, 0x6b, 0xc3, 0xf0, 0xf8, 0xa3, 0x0c, 0x84, 0x38, 0x35, 0x9b, 0x43, 0xf0, 0x6b, 0x25, 0x64, 0x91 ],
-const [ 0xb9, 0xf4, 0xcc, 0xde, 0x4d, 0xbc, 0x27, 0xf1, 0xe6, 0xbb, 0x0f, 0xc9, 0xe8, 0x54, 0xaa, 0x08, 0x42, 0x49, 0x02, 0x9c, 0xf3, 0x2e, 0xaa, 0xda, 0xcd, 0x1e, 0xa5, 0xd1, 0x78, 0xac, 0x83, 0xd8, 0xbb, 0x1c, 0xcd, 0x6a, 0xf7, 0xd4, 0xa3, 0x34, 0xf4, 0x0d, 0xa4, 0x6b, 0xe0, 0xce, 0x0e, 0x63, 0x95, 0x1b, 0x26, 0x5e, 0x1b, 0x6a, 0xdb, 0xa2, 0x6e, 0x56, 0xa6, 0xce, 0x81, 0x97, 0xb4, 0x6d ],
-const [ 0xa1, 0xaa, 0x03, 0x46, 0x87, 0xdd, 0xff, 0xdd, 0x65, 0x93, 0x26, 0xc6, 0xd1, 0x1f, 0x58, 0xf1, 0x45, 0x1f, 0x85, 0x24, 0xc4, 0x99, 0x6d, 0xa8, 0xc0, 0x4a, 0xaa, 0x43, 0x3c, 0x3a, 0xf1, 0x66, 0x2e, 0x94, 0x95, 0xa6, 0x27, 0xb5, 0x4c, 0x70, 0x35, 0x83, 0x36, 0xf9, 0x09, 0x00, 0x1b, 0x75, 0x55, 0x1f, 0xf5, 0x89, 0x78, 0xd6, 0xae, 0x02, 0x5d, 0x74, 0x2a, 0xc7, 0xa0, 0x35, 0x88, 0x0c ],
-const [ 0x8f, 0xc7, 0xe7, 0x19, 0xff, 0x49, 0x28, 0x46, 0xf1, 0x51, 0xbd, 0xc5, 0xf6, 0xf6, 0xed, 0x15, 0xa6, 0x45, 0x24, 0x42, 0xef, 0x42, 0xe8, 0x06, 0xac, 0x2a, 0x0f, 0x34, 0x79, 0xfb, 0x2f, 0x56, 0xc6, 0x36, 0x57, 0x95, 0x2b, 0xe4, 0xfc, 0xda, 0xfb, 0xd7, 0x36, 0x33, 0x1c, 0x32, 0x2d, 0x78, 0x16, 0x2c, 0xcd, 0x2e, 0x69, 0x10, 0xc2, 0xab, 0x24, 0x88, 0xa0, 0x7b, 0xb3, 0x1c, 0x61, 0x03 ],
-const [ 0xcd, 0x7f, 0xd6, 0xbe, 0xaf, 0x8e, 0xcd, 0xad, 0xa5, 0xa4, 0xdf, 0xb8, 0x00, 0x61, 0x7e, 0x9b, 0x5b, 0x83, 0xbf, 0x23, 0x21, 0x5a, 0x03, 0x40, 0x50, 0x7c, 0xd6, 0x5c, 0x7c, 0xb9, 0x17, 0xeb, 0x16, 0x51, 0x5a, 0x43, 0xee, 0x65, 0x8a, 0xae, 0xf7, 0xac, 0xd3, 0xbe, 0x4a, 0x67, 0xbe, 0xe1, 0x6e, 0x97, 0x9e, 0x35, 0xd7, 0x6d, 0x2c, 0x9e, 0xac, 0x02, 0x6e, 0x15, 0xce, 0x48, 0xdd, 0x43 ],
-const [ 0x56, 0x57, 0xc2, 0x29, 0x33, 0xcb, 0x8f, 0x8e, 0xe3, 0x5b, 0x3a, 0xb8, 0x21, 0xab, 0x6b, 0x01, 0xef, 0x85, 0x54, 0x25, 0x2b, 0x1e, 0xe4, 0xa3, 0x63, 0x9b, 0x3d, 0x66, 0xea, 0xd3, 0x69, 0xa5, 0x2b, 0x57, 0x48, 0x08, 0x3e, 0xb0, 0xcd, 0x0c, 0xb9, 0xe7, 0x6a, 0xa8, 0xc9, 0x4b, 0xc9, 0x31, 0x81, 0x6e, 0xbd, 0x7b, 0x71, 0x71, 0x78, 0x41, 0x7b, 0x81, 0xfe, 0xc6, 0xe2, 0xa2, 0xda, 0xbd ],
-const [ 0x58, 0x9e, 0x1c, 0x67, 0x21, 0x4c, 0x34, 0xf4, 0x38, 0x0e, 0x1b, 0xfa, 0x36, 0x29, 0xce, 0x13, 0x9b, 0x29, 0x7b, 0x3f, 0xb8, 0x31, 0x8b, 0xd9, 0xcc, 0x90, 0xe0, 0xca, 0x6d, 0x94, 0x5b, 0xfc, 0x29, 0xa3, 0xa2, 0x12, 0x6e, 0x87, 0x20, 0x56, 0xa7, 0x0a, 0x4d, 0xf2, 0xa8, 0xc3, 0x2f, 0x64, 0x4c, 0x2f, 0x21, 0x2c, 0x5c, 0x04, 0xd3, 0xc7, 0xb3, 0xc1, 0x92, 0xe1, 0xa0, 0x8a, 0xc9, 0xc7 ],
-const [ 0x95, 0xec, 0xe1, 0xc8, 0xae, 0x5e, 0x94, 0xd1, 0x6e, 0xc9, 0x98, 0x3b, 0x10, 0x89, 0xa3, 0x73, 0x95, 0xad, 0x5b, 0x1d, 0x66, 0x09, 0x16, 0xc1, 0x3c, 0x87, 0xe4, 0xc1, 0x3d, 0xbe, 0xcf, 0x8f, 0x68, 0xc6, 0x61, 0x1c, 0x32, 0x4a, 0x67, 0x94, 0x71, 0xde, 0xf5, 0x48, 0x7a, 0x93, 0xaa, 0xec, 0x86, 0xc9, 0x35, 0x02, 0x5b, 0x45, 0x18, 0x96, 0x28, 0x84, 0xac, 0x2c, 0xb0, 0x4e, 0x66, 0xf7 ],
-const [ 0x91, 0x65, 0x0e, 0xd8, 0x9a, 0xaa, 0x63, 0xa8, 0xfd, 0x43, 0x90, 0x7d, 0xaa, 0xf3, 0x98, 0x5c, 0x64, 0x04, 0xee, 0x02, 0xc2, 0x3b, 0x92, 0x77, 0x7a, 0x0b, 0x7d, 0xe6, 0xde, 0x09, 0x3f, 0xac, 0xa7, 0xa0, 0xe7, 0xaf, 0xf2, 0x06, 0x23, 0xf1, 0x88, 0x6e, 0xa8, 0x65, 0x62, 0x80, 0xd4, 0x01, 0x6d, 0x06, 0x92, 0x14, 0x8a, 0xe8, 0x7f, 0xda, 0xd9, 0x5a, 0x4b, 0x4d, 0x37, 0x54, 0x61, 0x3f ],
-const [ 0xca, 0xa2, 0xf0, 0x77, 0xc0, 0xbd, 0xe9, 0xe9, 0x8c, 0x2f, 0x54, 0xa9, 0x8c, 0xab, 0xa4, 0xa9, 0xf9, 0x5d, 0xe8, 0x0e, 0x74, 0x2b, 0xfe, 0x92, 0xe2, 0x3b, 0x03, 0x26, 0x7a, 0xb5, 0x0d, 0xdb, 0x1c, 0xca, 0x1d, 0x02, 0xe5, 0xf5, 0x4f, 0x92, 0x00, 0x80, 0x54, 0xcb, 0xbf, 0x4b, 0x22, 0x19, 0xea, 0xc9, 0xea, 0x3b, 0x57, 0x4b, 0x4b, 0xa4, 0xba, 0x81, 0xc5, 0x22, 0xbf, 0x3d, 0x70, 0xbd ],
-const [ 0xac, 0x04, 0x9e, 0x1a, 0x39, 0xd6, 0x03, 0x9c, 0xe4, 0x80, 0x41, 0x6f, 0x05, 0x8e, 0x06, 0x99, 0x5b, 0x54, 0xa2, 0x3c, 0x4d, 0x26, 0x69, 0x6b, 0x76, 0xcc, 0x58, 0x3c, 0x61, 0x30, 0xfc, 0x1f, 0x91, 0x5a, 0x90, 0x6e, 0xc5, 0x9e, 0x66, 0x45, 0x7a, 0x14, 0x88, 0x93, 0xb0, 0x49, 0x9e, 0x71, 0xf1, 0x34, 0x12, 0xb3, 0x90, 0x6c, 0x73, 0xbd, 0x2f, 0x98, 0x17, 0x99, 0x83, 0x26, 0x05, 0x46 ],
-const [ 0x82, 0xc1, 0x6c, 0x68, 0xec, 0xa5, 0x9a, 0x92, 0x98, 0x69, 0x38, 0x36, 0x6d, 0xe6, 0x0c, 0x16, 0xf6, 0x0c, 0x98, 0xbd, 0x66, 0xd4, 0x3e, 0x10, 0xd9, 0x75, 0xa8, 0x26, 0xdc, 0xdb, 0x67, 0x59, 0x30, 0x55, 0xda, 0x9d, 0xcb, 0x8e, 0x52, 0x11, 0x20, 0xbe, 0x73, 0xd4, 0xa0, 0x21, 0xde, 0x1a, 0x81, 0xa9, 0x0d, 0x7f, 0xbe, 0xf0, 0x7d, 0x9b, 0x5f, 0x70, 0x13, 0xd6, 0xfa, 0xf6, 0xb9, 0x7d ],
-const [ 0xe2, 0x62, 0xa7, 0x38, 0x5a, 0xa3, 0x28, 0x2c, 0x5d, 0x42, 0x98, 0x37, 0x6a, 0xcd, 0x1b, 0x7b, 0x6c, 0x97, 0x8b, 0x02, 0x9a, 0x0c, 0x75, 0xac, 0x9c, 0x41, 0x65, 0x6c, 0xef, 0xd0, 0x64, 0xb4, 0x8a, 0xe2, 0xbe, 0x2e, 0xc2, 0x8d, 0x09, 0xad, 0x6b, 0x61, 0x62, 0x63, 0x40, 0x3d, 0xfa, 0x54, 0x85, 0x67, 0xd2, 0x0a, 0xea, 0xdc, 0xc2, 0x8b, 0xb3, 0xe5, 0xc0, 0x88, 0x16, 0xeb, 0x5f, 0xd7 ],
-const [ 0x15, 0x0d, 0x3a, 0xa3, 0x09, 0xa3, 0x66, 0x9a, 0xf9, 0x9a, 0x70, 0xf2, 0xce, 0xc5, 0x2d, 0x3d, 0xa1, 0x6b, 0x1c, 0x13, 0x7f, 0xf7, 0x46, 0x62, 0x69, 0xf2, 0x68, 0x05, 0x9f, 0x2f, 0x54, 0x98, 0x1f, 0x45, 0x95, 0x8b, 0x68, 0x42, 0x52, 0x76, 0x83, 0x9e, 0x75, 0xac, 0x44, 0x6e, 0x0b, 0x13, 0xce, 0xda, 0xee, 0x33, 0x55, 0xd1, 0xa2, 0x8c, 0x28, 0xfc, 0x7e, 0x2d, 0xee, 0xf0, 0x0c, 0x82, 0x2f, 0xa7, 0xb2, 0x6e, 0x17, 0x31 ],
-const [ 0xc9, 0xc8, 0xb8, 0x91, 0xb8, 0x25, 0x67, 0x75, 0x7d, 0xbf, 0x1a, 0x15, 0xb3, 0x17, 0x62, 0x8d, 0x98, 0xc4, 0x86, 0xdb, 0xbe, 0x5e, 0xd4, 0xe6, 0x04, 0x9a, 0x35, 0xbf, 0xc5, 0xb6, 0x04, 0x26, 0x4f, 0x18, 0x20, 0x50, 0x97, 0x32, 0x40, 0xe7, 0x2b, 0xa8, 0x87, 0x53, 0x67, 0xb5, 0x59, 0x38, 0xec, 0xcb, 0x6c, 0x3f, 0x4e, 0x79, 0x22, 0x1a, 0x0d, 0x92, 0x16, 0xc2, 0xc7, 0x8c, 0xf4, 0x03, 0xab, 0x26, 0x8f, 0x3b, 0x31, 0x4d ],
-const [ 0xf3, 0xca, 0x2d, 0xbf, 0x8a, 0x94, 0x69, 0x7d, 0x35, 0x1f, 0x5f, 0x18, 0x32, 0x07, 0x49, 0xae, 0xae, 0x13, 0xe6, 0xd5, 0x7e, 0x15, 0xcd, 0x98, 0x0f, 0x12, 0x01, 0xbd, 0xa0, 0xa3, 0xc5, 0x4a, 0xae, 0x9b, 0xb2, 0x47, 0xb0, 0xea, 0x06, 0xc4, 0x05, 0xc2, 0x3f, 0x1e, 0x2b, 0xf8, 0xe9, 0x7f, 0x31, 0xac, 0xb4, 0xa4, 0x6f, 0x2c, 0xc9, 0xe3, 0x74, 0x16, 0x5e, 0x6c, 0x40, 0xbd, 0x88, 0xcf, 0xb4, 0xce, 0x51, 0xbe, 0x46, 0x34 ],
-const [ 0xe5, 0x52, 0xf4, 0xff, 0xf6, 0xf6, 0xbb, 0xd1, 0x4e, 0xc5, 0x0a, 0xee, 0x19, 0x49, 0x14, 0x52, 0xac, 0x91, 0x7a, 0xa3, 0x6a, 0x83, 0x5a, 0x1f, 0xe8, 0x74, 0x88, 0xd3, 0x4f, 0xf6, 0x1b, 0x0d, 0x02, 0xf1, 0x2c, 0x15, 0x81, 0xf6, 0xda, 0x18, 0x8e, 0xcf, 0x91, 0x65, 0x8e, 0x5b, 0x8d, 0xdc, 0x31, 0x99, 0x99, 0xa2, 0x55, 0x02, 0x1d, 0x1a, 0x28, 0x1c, 0x57, 0x11, 0x8d, 0x4c, 0xe9, 0x39, 0xc2, 0xeb, 0x94, 0xd9, 0x3f, 0x9d ],
-const [ 0x9d, 0x42, 0x19, 0xed, 0x56, 0x9e, 0xb3, 0x5a, 0x9f, 0x55, 0x13, 0xeb, 0x1b, 0x93, 0x88, 0x42, 0x37, 0x1a, 0x99, 0x58, 0x56, 0xda, 0x49, 0xb8, 0x2b, 0xc2, 0x99, 0xeb, 0x65, 0xd7, 0x4f, 0x33, 0x92, 0x83, 0xf6, 0x7c, 0x3d, 0x2f, 0x26, 0x8f, 0x5a, 0x14, 0x05, 0x89, 0xe5, 0x4d, 0x0e, 0x8b, 0xc5, 0x31, 0x11, 0xb4, 0xf6, 0xe1, 0x7b, 0x4c, 0xe7, 0x1d, 0xd8, 0x42, 0x21, 0x5c, 0x96, 0xd9, 0x2a, 0x1b, 0x0c, 0x9e, 0xa9, 0x75 ],
-const [ 0x4e, 0x1a, 0xcb, 0x25, 0xc4, 0x12, 0x16, 0xf4, 0x8b, 0x66, 0x62, 0x73, 0x20, 0xab, 0xc5, 0xf5, 0xe0, 0xdd, 0x1a, 0x74, 0x27, 0xf5, 0x48, 0xcb, 0xba, 0xb9, 0xc8, 0x25, 0x62, 0xd8, 0x61, 0xb6, 0xda, 0x36, 0x36, 0xa9, 0xeb, 0x85, 0x03, 0x59, 0xd6, 0x15, 0xa4, 0xc3, 0xf2, 0xed, 0xd7, 0x3c, 0x96, 0x1a, 0x42, 0x5f, 0x39, 0x47, 0xb8, 0x4a, 0xd8, 0x8e, 0xb8, 0x0a, 0x99, 0x8e, 0x36, 0x53, 0xad, 0xbe, 0x9e, 0x74, 0x7a, 0x00 ],
-const [ 0x4f, 0x04, 0x7d, 0x37, 0xc6, 0x53, 0xac, 0x94, 0x34, 0xb9, 0xac, 0x3e, 0x79, 0x62, 0x88, 0x64, 0x17, 0x9a, 0xee, 0x4f, 0x44, 0x8e, 0xe0, 0x44, 0x3d, 0x57, 0xad, 0xac, 0xdc, 0x34, 0x20, 0x72, 0x6d, 0x17, 0xf7, 0xad, 0xbe, 0x64, 0x96, 0x7f, 0x75, 0xf5, 0xfd, 0x3c, 0xa6, 0x61, 0xf8, 0xcf, 0xa5, 0x7e, 0x95, 0x5a, 0x19, 0x24, 0xdb, 0x1d, 0x52, 0x34, 0xb9, 0x99, 0xdd, 0xd9, 0x3d, 0xf5, 0x55, 0x0e, 0x07, 0xa0, 0x7b, 0x61 ],
-const [ 0x22, 0x32, 0x98, 0x12, 0x51, 0x7b, 0x7a, 0x7a, 0x31, 0xd3, 0xcb, 0xbe, 0x04, 0xc3, 0x00, 0x4e, 0x07, 0xe6, 0x5a, 0x36, 0xa3, 0x4a, 0xbc, 0xa4, 0xe7, 0x1a, 0xba, 0xa4, 0x36, 0x7a, 0xf2, 0x2f, 0x3d, 0xb3, 0x9f, 0x64, 0x28, 0x90, 0x6b, 0x15, 0x16, 0x08, 0x85, 0x85, 0xca, 0x1c, 0xf4, 0x70, 0xa3, 0x03, 0x2b, 0x4c, 0xce, 0x85, 0xdd, 0xcf, 0xba, 0xa5, 0x12, 0xb1, 0xcc, 0x82, 0x7b, 0xb3, 0x55, 0x7f, 0x02, 0xe0, 0xc1, 0xa2 ],
-const [ 0x09, 0xe5, 0xe3, 0x26, 0xd7, 0xc2, 0xb5, 0xb1, 0x73, 0x81, 0x09, 0x49, 0x33, 0xea, 0x11, 0xa5, 0x03, 0x0c, 0x36, 0xd9, 0xb8, 0x39, 0x0d, 0x7b, 0xa1, 0x51, 0x87, 0x04, 0x5f, 0x44, 0x68, 0x7a, 0xf7, 0xd2, 0xfa, 0x4c, 0x26, 0x95, 0x02, 0x7e, 0xf5, 0x42, 0xf3, 0x05, 0x8c, 0x2c, 0x62, 0x75, 0x4b, 0x09, 0xba, 0xd9, 0x17, 0xf9, 0x31, 0xe2, 0xf2, 0xc4, 0xfa, 0x45, 0xcf, 0x63, 0xbc, 0x5e, 0xa4, 0xc3, 0x44, 0x19, 0xc0, 0xc5 ],
-const [ 0x25, 0xff, 0x10, 0xf4, 0x31, 0x2e, 0xcc, 0x23, 0xb4, 0xaf, 0x65, 0x3f, 0xef, 0x94, 0x3c, 0x72, 0x72, 0xf9, 0x84, 0x70, 0x31, 0xd1, 0xf9, 0x59, 0xda, 0xe5, 0xcf, 0xe1, 0x66, 0x19, 0xe9, 0xae, 0xef, 0xf1, 0x4c, 0x02, 0xc1, 0x55, 0xd3, 0x99, 0xb3, 0x91, 0x24, 0xd5, 0xb8, 0xa0, 0xe2, 0x18, 0xb1, 0xaa, 0x25, 0x71, 0x85, 0xcb, 0x27, 0x7c, 0x74, 0x16, 0x40, 0x83, 0xa8, 0xda, 0x14, 0xe9, 0x0d, 0x23, 0x0b, 0xc9, 0x63, 0x84 ],
-const [ 0x81, 0x16, 0x8b, 0x80, 0xd7, 0x9f, 0x8d, 0xde, 0xcb, 0xd9, 0xe4, 0x11, 0xcc, 0x41, 0xa2, 0x2e, 0xb0, 0x2b, 0x63, 0xb3, 0x04, 0xbe, 0x3b, 0xb5, 0xa1, 0x40, 0xed, 0x3b, 0x80, 0x94, 0x5e, 0xe5, 0xd0, 0x00, 0x49, 0xd1, 0x45, 0x34, 0x33, 0xbe, 0xb2, 0x88, 0xa2, 0x72, 0xda, 0x86, 0x8a, 0x5a, 0x84, 0xa8, 0x08, 0x71, 0xcd, 0x62, 0x52, 0x62, 0xc2, 0x63, 0xef, 0xf1, 0x2e, 0x19, 0x23, 0x97, 0xb1, 0x73, 0xae, 0x6c, 0x12, 0xea ],
-const [ 0xc6, 0xc9, 0xfd, 0x57, 0x57, 0x59, 0xc0, 0xf6, 0x01, 0x0e, 0xcb, 0x93, 0x2f, 0xb2, 0x95, 0x59, 0xb5, 0xdc, 0x24, 0xc3, 0x6e, 0x09, 0xd3, 0x54, 0x23, 0xee, 0x52, 0x89, 0xaf, 0x0d, 0xee, 0x0c, 0x61, 0x87, 0x13, 0x2a, 0xa2, 0x31, 0x0f, 0x87, 0xd8, 0xe9, 0x18, 0x10, 0x8a, 0x2b, 0x91, 0x32, 0xc4, 0xdf, 0x89, 0x49, 0xbd, 0x75, 0x85, 0x5c, 0xb7, 0x34, 0x7f, 0x07, 0x27, 0xcf, 0x2e, 0xb8, 0x16, 0x3a, 0x88, 0x1f, 0xc7, 0xbb ],
-const [ 0x56, 0x0d, 0x76, 0xc1, 0xbd, 0xde, 0x2e, 0x56, 0xff, 0x54, 0x56, 0x7d, 0xf6, 0x71, 0x3e, 0x4e, 0x24, 0x3c, 0x1a, 0x42, 0xf7, 0xfe, 0x62, 0xfd, 0x4b, 0xb1, 0x78, 0x6a, 0x31, 0xb6, 0x8c, 0x0d, 0xef, 0xc6, 0xbd, 0x95, 0x48, 0x2b, 0x80, 0xb1, 0xfd, 0x30, 0x46, 0x25, 0x93, 0xd6, 0x59, 0x1d, 0x57, 0xc8, 0x07, 0xc1, 0xa0, 0x91, 0x03, 0x09, 0x54, 0x0d, 0x08, 0xd3, 0xad, 0x1d, 0xbf, 0x33, 0x3d, 0x9f, 0xe3, 0x0a, 0x30, 0x9e ],
-const [ 0xa1, 0x93, 0xb5, 0x58, 0x89, 0x1e, 0x94, 0x7e, 0x0e, 0xe7, 0x6f, 0x91, 0x2a, 0xd5, 0x1c, 0x60, 0x7c, 0xdb, 0x59, 0xff, 0xe0, 0x33, 0x05, 0x21, 0x43, 0xe7, 0x90, 0xc9, 0xb6, 0x96, 0xb0, 0x22, 0xc0, 0x75, 0x55, 0xaa, 0xf9, 0x94, 0xe0, 0x96, 0xd4, 0x63, 0x8f, 0x73, 0xbd, 0x74, 0x3c, 0x09, 0x64, 0x82, 0x48, 0x84, 0x58, 0xb3, 0xd2, 0xd6, 0xd7, 0x1a, 0x2c, 0x57, 0xe5, 0x80, 0x8f, 0xae, 0x9b, 0x64, 0x0d, 0xf5, 0xc2, 0x40 ],
-const [ 0xdc, 0x98, 0x6d, 0x3d, 0x92, 0x36, 0x8e, 0x2a, 0x19, 0xf4, 0x9b, 0x6e, 0x53, 0x7a, 0xaf, 0x84, 0x5a, 0xcb, 0xce, 0x31, 0x71, 0x6c, 0x79, 0xc4, 0x3a, 0xc8, 0x80, 0x9d, 0x29, 0xd3, 0x18, 0xec, 0x38, 0xee, 0x2d, 0xbb, 0xdc, 0x0b, 0xfa, 0x2f, 0x38, 0x11, 0xd6, 0x0a, 0x91, 0x82, 0x51, 0x75, 0x03, 0x5b, 0x7f, 0xfd, 0x72, 0x3b, 0x94, 0xdb, 0xc3, 0xc8, 0xb1, 0x78, 0x4b, 0x4e, 0xfe, 0x30, 0x87, 0xaa, 0xf9, 0x56, 0x0e, 0x67 ],
-const [ 0x08, 0x6d, 0x40, 0xb5, 0xbb, 0xe7, 0x5d, 0xfa, 0x59, 0x05, 0x54, 0x5f, 0x83, 0xbc, 0xd5, 0x2d, 0x71, 0x2f, 0x09, 0x2f, 0xce, 0x2c, 0x0f, 0x5c, 0xc9, 0xfa, 0xac, 0xb5, 0x69, 0x52, 0x3e, 0x71, 0x20, 0xab, 0xf2, 0x58, 0xa4, 0xbb, 0x37, 0x6d, 0xfa, 0x3a, 0x73, 0xcf, 0xd3, 0xe9, 0xf4, 0xe1, 0x1c, 0xd3, 0x29, 0xa9, 0xd1, 0xd2, 0x12, 0x76, 0x12, 0x56, 0xf5, 0xc6, 0x78, 0x62, 0x53, 0x66, 0xa9, 0xd7, 0x1a, 0xdb, 0x2a, 0xf5 ],
-const [ 0x57, 0x44, 0x61, 0x8f, 0xe8, 0xe5, 0xc1, 0xe4, 0xca, 0xd9, 0x5c, 0xf4, 0x35, 0x05, 0xcc, 0x03, 0x2d, 0xf1, 0xcf, 0xe5, 0x04, 0x34, 0xed, 0x13, 0x20, 0x2d, 0x5b, 0xfe, 0xfe, 0xf4, 0x20, 0xa3, 0x77, 0x90, 0x76, 0x60, 0x42, 0x6b, 0x73, 0x06, 0xbb, 0x03, 0xe8, 0x2f, 0xe2, 0xe1, 0x8a, 0xd2, 0xa7, 0xcf, 0x4f, 0x14, 0x65, 0x46, 0x1b, 0x61, 0xac, 0x26, 0x9c, 0xbc, 0x43, 0xa9, 0x72, 0x53, 0x6d, 0x9a, 0x94, 0x57, 0x6c, 0xc2 ],
-const [ 0x61, 0x54, 0xb5, 0xd6, 0xd2, 0x33, 0xc4, 0xe6, 0x30, 0xb4, 0xb2, 0x09, 0x41, 0x55, 0x95, 0x4e, 0xe6, 0x3f, 0x80, 0xcb, 0xf4, 0xcc, 0xfa, 0x3d, 0x40, 0x47, 0xaf, 0xee, 0xf9, 0xf3, 0x66, 0xdc, 0x3b, 0x4e, 0x33, 0x17, 0xe0, 0x96, 0xee, 0x6b, 0x9a, 0x8d, 0xe3, 0x3f, 0x3f, 0x7a, 0xcb, 0xbd, 0x63, 0x70, 0xfc, 0x33, 0x2c, 0xd2, 0xdc, 0xb9, 0x62, 0x17, 0x9b, 0x15, 0xc6, 0xcb, 0x22, 0xdb, 0xa5, 0xd6, 0x46, 0xd9, 0xac, 0x01 ],
-const [ 0x1e, 0x86, 0x02, 0xe3, 0xf3, 0xa1, 0x2b, 0x3f, 0x9a, 0xb2, 0x1c, 0x3a, 0x7a, 0xdd, 0x7f, 0xa9, 0xa5, 0x38, 0x1e, 0xff, 0x4f, 0x74, 0xf5, 0x13, 0x85, 0xc0, 0x8c, 0x23, 0x1c, 0xea, 0x84, 0x18, 0xe7, 0xc7, 0x6f, 0x0b, 0x2d, 0xd6, 0xe5, 0x09, 0x59, 0x20, 0xd4, 0x13, 0xf4, 0x62, 0x17, 0x69, 0xd1, 0x6e, 0x4a, 0x09, 0x87, 0xcf, 0xdd, 0x72, 0x24, 0xac, 0x68, 0xad, 0x20, 0xef, 0x3e, 0x8e, 0x90, 0xa5, 0x45, 0x38, 0x9c, 0xa8 ],
-const [ 0xca, 0xa2, 0xf0, 0x77, 0xc0, 0xbd, 0xe9, 0xe9, 0x8c, 0x2f, 0x54, 0xa9, 0x8c, 0xab, 0xa4, 0xa9, 0xf9, 0x5d, 0xe8, 0x0e, 0x74, 0x2b, 0xfe, 0x92, 0xe2, 0x3b, 0x03, 0x26, 0x7a, 0xb5, 0x0d, 0xdb, 0x1c, 0xca, 0x1d, 0x02, 0xe5, 0xf5, 0x4f, 0x92, 0x00, 0x80, 0x54, 0xcb, 0xbf, 0x4b, 0x22, 0x19, 0xea, 0xc9, 0xea, 0x3b, 0x57, 0x4b, 0x4b, 0xa4, 0xba, 0x81, 0xc5, 0x22, 0xbf, 0x3d, 0x70, 0xbd, 0x56, 0x7b, 0xee, 0xe2, 0x4e, 0x9f ],
-const [ 0x12, 0x14, 0x5f, 0xf8, 0x72, 0x25, 0xda, 0xbf, 0xb7, 0xc8, 0xdc, 0x37, 0x0e, 0xc6, 0x1b, 0x16, 0xe6, 0x21, 0x9c, 0x14, 0xa4, 0xfb, 0x10, 0xf2, 0x98, 0xb4, 0x64, 0xbb, 0x30, 0x53, 0x94, 0x4a, 0x6c, 0x27, 0xc0, 0x0c, 0x92, 0xae, 0x81, 0x07, 0x23, 0xb5, 0x7d, 0x1b, 0x0d, 0xc1, 0x39, 0x88, 0x22, 0xae, 0x2f, 0xb1, 0xc9, 0x96, 0x21, 0x20, 0xf4, 0xf4, 0xac, 0xc9, 0x52, 0x09, 0x20, 0x93, 0xc5, 0x7f, 0x8f, 0x14, 0x16, 0x4d ],
-const [ 0x49, 0x55, 0x39, 0xa6, 0x81, 0x41, 0xfc, 0x09, 0x93, 0x93, 0xad, 0x40, 0x55, 0x5a, 0x70, 0xeb, 0xb4, 0x5e, 0x3d, 0x37, 0xf9, 0x57, 0x3f, 0xb1, 0x4b, 0x5c, 0x7a, 0x5c, 0x75, 0x9e, 0xb1, 0x00, 0xea, 0x56, 0x87, 0xc6, 0x06, 0xfc, 0xe4, 0x02, 0x97, 0xba, 0x9a, 0x50, 0x9c, 0x20, 0x49, 0xe2, 0x4d, 0x19, 0x80, 0x18, 0x5b, 0x1e, 0x24, 0x51, 0x78, 0xa9, 0x16, 0x02, 0x1a, 0xed, 0x10, 0x05, 0x7c, 0xc4, 0xd0, 0x33, 0xe6, 0xe9 ],
-const [ 0x38, 0x7c, 0xa5, 0x7d, 0x6c, 0xea, 0x7e, 0xce, 0x2a, 0xdf, 0x50, 0x7e, 0xe4, 0x97, 0xbb, 0xc1, 0xcd, 0x04, 0x3b, 0x32, 0xe3, 0xc0, 0x4d, 0x6b, 0x2d, 0x45, 0xd4, 0xd3, 0x41, 0x60, 0xba, 0xb8, 0x0a, 0xe3, 0xda, 0x9e, 0xc8, 0x9b, 0x1e, 0xd6, 0x58, 0x81, 0xe4, 0x52, 0xb6, 0x34, 0xa7, 0xb7, 0xc0, 0xa7, 0xdb, 0xb4, 0x3d, 0x17, 0x18, 0x93, 0x1d, 0x41, 0x7b, 0x0d, 0x02, 0xd1, 0x4a, 0x63, 0x00, 0x1d, 0xd6, 0xaa, 0xa1, 0x13 ],
-const [ 0xbf, 0x15, 0x12, 0x50, 0x68, 0x58, 0xd2, 0xb3, 0x8e, 0x38, 0x7a, 0x1e, 0x65, 0xaa, 0x81, 0x3b, 0xc1, 0xc1, 0xf6, 0xe6, 0xd9, 0x6a, 0x6a, 0x86, 0x4b, 0x59, 0x09, 0x9e, 0x61, 0x43, 0x0a, 0x9f, 0x93, 0x4e, 0x4a, 0x01, 0x4d, 0xc6, 0x33, 0x91, 0xf2, 0x11, 0xe3, 0x0d, 0x20, 0xe5, 0x8a, 0xee, 0x36, 0xb8, 0x14, 0x85, 0x13, 0x78, 0x09, 0x49, 0x21, 0x7d, 0xb1, 0x70, 0x93, 0xbc, 0x7b, 0xbc, 0xea, 0x3d, 0x9f, 0x98, 0xbe, 0xcf ],
-const [ 0x33, 0x2c, 0x02, 0x2c, 0xd7, 0xcd, 0xbb, 0x71, 0xfc, 0xc3, 0xea, 0xf4, 0x86, 0x35, 0xa8, 0xbb, 0x6e, 0x03, 0xe7, 0x3f, 0x5c, 0x08, 0xa9, 0xcd, 0x79, 0x9c, 0x70, 0x2d, 0x7e, 0x5d, 0xf5, 0x82, 0x12, 0x30, 0x1c, 0x71, 0x52, 0x82, 0x28, 0x85, 0xb1, 0xd4, 0x2b, 0xd2, 0x02, 0x76, 0xc1, 0xd9, 0xd3, 0x92, 0xfe, 0xac, 0xfd, 0x6d, 0xa5, 0x53, 0x79, 0xea, 0x9b, 0x6d, 0x75, 0x50, 0x9b, 0x1a, 0xa7, 0x4c, 0x2a, 0x19, 0xe2, 0x3a ],
-const [ 0xae, 0x1b, 0xa7, 0x36, 0xe2, 0x06, 0x91, 0xbc, 0xc3, 0x49, 0x5b, 0xe8, 0xe4, 0x38, 0xd9, 0xcd, 0x5a, 0xa4, 0x69, 0xde, 0x20, 0xac, 0x7c, 0x5d, 0xba, 0xd7, 0x53, 0x16, 0x19, 0x60, 0x07, 0x4c, 0xbf, 0xd1, 0xcc, 0xf4, 0x23, 0xd3, 0x76, 0x21, 0x57, 0x45, 0x3d, 0xc0, 0xe8, 0x8b, 0xbd, 0x85, 0x06, 0x29, 0x41, 0x25, 0xe4, 0x90, 0x40, 0xc6, 0x62, 0x37, 0x28, 0xb3, 0xea, 0xee, 0x5b, 0x55, 0x97, 0x70, 0x77, 0x5f, 0x9d, 0x37 ],
-const [ 0x25, 0x11, 0x77, 0x74, 0xde, 0xaf, 0x7c, 0x06, 0x8c, 0xbd, 0x4c, 0xe8, 0x2a, 0x59, 0x5a, 0x58, 0x4e, 0xcc, 0x9d, 0xfd, 0x54, 0x1a, 0xd8, 0x1e, 0xb9, 0xd7, 0x1f, 0x12, 0xc5, 0x3b, 0x97, 0xf7, 0x6d, 0x79, 0x7d, 0xa7, 0x77, 0x4d, 0x6a, 0xe8, 0xdf, 0xd4, 0xd5, 0xe3, 0x7a, 0xa1, 0xd9, 0xd8, 0xd9, 0x0d, 0x38, 0x0f, 0x70, 0xce, 0xa1, 0x12, 0xf7, 0xcc, 0x2e, 0x19, 0x11, 0x30, 0x31, 0xc6, 0x2c, 0xbd, 0x30, 0x12, 0xa8, 0x63 ],
-const [ 0xaa, 0xc2, 0x32, 0x2f, 0xfd, 0x2e, 0xfa, 0xeb, 0xcc, 0xf8, 0x38, 0x9e, 0xab, 0xb3, 0x41, 0x1a, 0xb5, 0x5f, 0x21, 0x08, 0x7d, 0x90, 0x32, 0x2c, 0x48, 0xcc, 0xee, 0xeb, 0x79, 0x34, 0x02, 0x0a, 0x4c, 0x66, 0xa3, 0xb8, 0xc7, 0xa3, 0x25, 0xcf, 0xee, 0x2d, 0xca, 0x57, 0x37, 0xf3, 0xd8, 0x4c, 0x3d, 0x70, 0xee, 0xa0, 0xb8, 0xd1, 0x97, 0x84, 0xad, 0x56, 0x20, 0xe4, 0xe2, 0xfa, 0xa7, 0x30, 0x95, 0x56, 0x75, 0x62, 0x6d, 0xc3 ],
-const [ 0x10, 0x0b, 0xd0, 0x0e, 0x9c, 0x4c, 0x9f, 0x2b, 0xec, 0xae, 0xc6, 0x14, 0x56, 0x40, 0xe5, 0x7d, 0x13, 0x63, 0xa9, 0xe8, 0xe8, 0xdc, 0x95, 0x61, 0x06, 0x27, 0x02, 0x6c, 0x30, 0x0e, 0x64, 0x3c, 0x1b, 0x7b, 0xd0, 0x25, 0x1a, 0x8b, 0xbb, 0x54, 0xfb, 0xe3, 0x05, 0xbe, 0x2b, 0x47, 0x36, 0x56, 0x21, 0x69, 0x07, 0x83, 0xfa, 0xfe, 0x24, 0xd1, 0x61, 0x17, 0x30, 0xe7, 0xb2, 0xaf, 0x09, 0xb9, 0x5f, 0x80, 0x4e, 0xfe, 0x92, 0x1c ],
-const [ 0xe0, 0x1b, 0x54, 0xdf, 0xce, 0xbf, 0x64, 0xfd, 0xc6, 0x1b, 0xc0, 0xd9, 0xa4, 0x6f, 0x38, 0x50, 0xdb, 0x32, 0xf7, 0x35, 0x09, 0x58, 0xb6, 0xab, 0xcf, 0xd1, 0x30, 0xd1, 0xdf, 0x52, 0xd6, 0xa5, 0x56, 0x57, 0xc3, 0x22, 0x4d, 0x69, 0xf2, 0xac, 0xaa, 0x9c, 0xaf, 0xae, 0x3c, 0x5d, 0x4b, 0x82, 0x08, 0x6a, 0x14, 0x91, 0xdd, 0x22, 0x84, 0xbb, 0x2f, 0xff, 0xb9, 0xf9, 0x22, 0x61, 0x25, 0x40, 0xe4, 0x8d, 0x87, 0xa9, 0x40, 0xf5 ],
-const [ 0x4a, 0x25, 0xe3, 0xa8, 0x8e, 0xae, 0x86, 0x48, 0x51, 0xb4, 0xc6, 0xd0, 0x1c, 0x6b, 0x98, 0xb7, 0x99, 0xa7, 0x0f, 0x0c, 0xa4, 0x9f, 0x18, 0x60, 0xa4, 0xf1, 0x67, 0xdf, 0x1c, 0xe7, 0xb1, 0xc0, 0x7d, 0xf9, 0x1c, 0xe0, 0x3f, 0x93, 0xf4, 0xa9, 0x2f, 0x18, 0x9f, 0x39, 0x0b, 0x26, 0xd3, 0xc0, 0x4c, 0x1c, 0x06, 0x2a, 0x43, 0xd9, 0x26, 0xff, 0x67, 0xc7, 0x8b, 0x87, 0xee, 0x19, 0x2a, 0x31, 0x9a, 0x50, 0x0b, 0x35, 0xd6, 0x04 ],
-const [ 0x13, 0xe8, 0xb6, 0x56, 0x8b, 0x1d, 0x83, 0xee, 0x06, 0x23, 0x52, 0x23, 0xca, 0xf6, 0xbe, 0x6e, 0x76, 0x89, 0x7f, 0xfc, 0x95, 0x0a, 0x9a, 0x0f, 0x74, 0x68, 0xd5, 0xa2, 0x31, 0x13, 0x6e, 0x4c, 0x15, 0x03, 0x0c, 0x66, 0x23, 0xfb, 0xf6, 0x70, 0xf1, 0x0f, 0x83, 0xb1, 0xb7, 0x64, 0xd2, 0x1e, 0xa6, 0x37, 0xba, 0x7d, 0x7b, 0x20, 0x04, 0xca, 0x53, 0x98, 0xd8, 0xda, 0xc1, 0xba, 0x76, 0x3e, 0x1e, 0x46, 0x27, 0x6a, 0x20, 0xeb ],
-const [ 0x58, 0x3e, 0x7b, 0x26, 0x71, 0x56, 0x47, 0xc6, 0xc5, 0x04, 0x82, 0x86, 0x6f, 0x84, 0xc9, 0xa0, 0x97, 0xef, 0x1f, 0x1b, 0xf4, 0xb1, 0x8e, 0xe4, 0x8e, 0x3e, 0x11, 0x20, 0xc9, 0x01, 0xb2, 0xc1, 0x9f, 0x95, 0xf0, 0x57, 0x2d, 0x38, 0x63, 0x29, 0x71, 0x7d, 0xa3, 0x85, 0x52, 0x41, 0x65, 0x54, 0xe0, 0xdf, 0xe7, 0xf1, 0xde, 0xa8, 0x8f, 0x3c, 0x7e, 0x8d, 0xcf, 0xea, 0x6b, 0x1f, 0x4b, 0x1f, 0x0c, 0xba, 0x3e, 0x3e, 0x08, 0xfc ],
-const [ 0x38, 0x1d, 0xfe, 0x5c, 0x34, 0x05, 0xf0, 0xc6, 0x72, 0x16, 0xa3, 0x44, 0x75, 0xd4, 0x53, 0xaf, 0x05, 0xf8, 0xae, 0x8f, 0xd4, 0x7b, 0x92, 0xd5, 0x61, 0xf1, 0x19, 0xcd, 0x1d, 0x18, 0xd3, 0x4e, 0xcd, 0xb1, 0x52, 0x34, 0x2f, 0x8e, 0xec, 0x0f, 0xe0, 0xed, 0xbc, 0x1d, 0x7d, 0x04, 0xea, 0x76, 0x08, 0xdd, 0x2c, 0x87, 0x8e, 0x64, 0x8d, 0xc1, 0x07, 0xbf, 0x6e, 0x92, 0x7e, 0xdd, 0xca, 0x95, 0x72, 0x52, 0xbe, 0x06, 0x7b, 0x62 ],
-const [ 0x77, 0x26, 0x19, 0xf0, 0x48, 0xd8, 0xcf, 0xa9, 0xcb, 0x84, 0x6e, 0x1a, 0xc8, 0xde, 0xb0, 0xab, 0x56, 0xb0, 0x02, 0x9e, 0xff, 0x70, 0xd0, 0x44, 0x1f, 0x18, 0x02, 0x71, 0x8d, 0x32, 0xc7, 0x2d, 0x7d, 0x32, 0x91, 0xac, 0xa5, 0x09, 0x61, 0x81, 0x9f, 0xf7, 0x44, 0x0e, 0x8f, 0xa1, 0x1d, 0x3f, 0x05, 0x63, 0xa6, 0x78, 0x25, 0xe7, 0xb2, 0xcb, 0x05, 0xf7, 0xb5, 0x6f, 0x56, 0x8f, 0x85, 0x6d, 0x47, 0x37, 0x62, 0x9d, 0xa6, 0x8f ],
-const [ 0xf3, 0x9a, 0xdc, 0xa2, 0x1f, 0xf0, 0x93, 0x96, 0x39, 0xff, 0x8d, 0x6d, 0xa2, 0x36, 0xd5, 0x19, 0x57, 0x2d, 0xe9, 0x2a, 0x74, 0x23, 0x64, 0xe7, 0xf7, 0xaa, 0xda, 0x9e, 0xc7, 0xa1, 0x04, 0x38, 0xf5, 0x63, 0x1d, 0x10, 0x41, 0x3e, 0x8b, 0x06, 0xe0, 0x27, 0xc2, 0xcf, 0x7c, 0xab, 0x66, 0x8f, 0x7d, 0x29, 0xaf, 0xa9, 0x87, 0x3f, 0x12, 0xd5, 0x43, 0x82, 0x1e, 0x74, 0x63, 0x72, 0xa4, 0x21, 0xe0, 0xad, 0x1a, 0x89, 0x86, 0x62 ],
-const [ 0xcf, 0x20, 0xea, 0xca, 0x22, 0x1a, 0x64, 0x66, 0x75, 0xf6, 0x96, 0xc2, 0xc9, 0xff, 0xab, 0x2c, 0xca, 0x83, 0xcd, 0xfa, 0x01, 0x35, 0xf4, 0x15, 0x4a, 0xd0, 0xfb, 0xb4, 0x89, 0xfd, 0xf9, 0x6a, 0x99, 0x77, 0xce, 0x63, 0x85, 0x6d, 0xfc, 0xeb, 0xfb, 0x28, 0xb9, 0x2f, 0xfd, 0xed, 0x42, 0x48, 0xda, 0x25, 0x71, 0x75, 0x5d, 0xbb, 0x92, 0xa8, 0x44, 0xc6, 0x73, 0x45, 0xf3, 0x68, 0xba, 0x26, 0x6a, 0xf5, 0x7b, 0xe2, 0x75, 0x58 ],
-const [ 0x8c, 0x26, 0xd9, 0xe7, 0x39, 0xfe, 0xf0, 0x07, 0xec, 0xf4, 0x26, 0x61, 0x2f, 0x74, 0x08, 0xda, 0xa6, 0xa8, 0xe4, 0x1a, 0xaa, 0x91, 0x8b, 0x3e, 0x33, 0x57, 0x55, 0xcd, 0xfb, 0xdd, 0x66, 0xee, 0xe0, 0x99, 0x30, 0xd8, 0x8a, 0xa3, 0x39, 0x89, 0x4f, 0x0b, 0x1e, 0xbb, 0x53, 0x70, 0xd9, 0x14, 0xf4, 0xce, 0x3f, 0x9d, 0x65, 0x98, 0xcc, 0x75, 0x98, 0x07, 0xa3, 0xc7, 0x62, 0xb1, 0xd1, 0xf9, 0xda, 0x5d, 0xd2, 0x26, 0x02, 0x16 ],
-const [ 0xf1, 0xe9, 0x5a, 0x2a, 0xc2, 0x98, 0x2a, 0x63, 0x58, 0x4a, 0xf1, 0xb7, 0xaa, 0xb0, 0xee, 0x73, 0x9b, 0xac, 0xcc, 0xaa, 0xc5, 0x05, 0x81, 0x87, 0x75, 0x5e, 0x77, 0xe1, 0xf6, 0x69, 0xe9, 0x10, 0x13, 0x58, 0x91, 0xff, 0xd7, 0x94, 0x80, 0x83, 0x97, 0xb2, 0x4d, 0xeb, 0x33, 0xa3, 0x71, 0xd9, 0x98, 0x2a, 0xf2, 0x50, 0x89, 0x93, 0x3f, 0x0d, 0xa0, 0xa3, 0x5b, 0x1b, 0x8f, 0xcb, 0x3e, 0xa2, 0xac, 0xa0, 0x79, 0x00, 0xad, 0x90 ],
-const [ 0x4c, 0x16, 0x24, 0xa9, 0x40, 0x76, 0x97, 0xdd, 0x3f, 0xeb, 0x1b, 0xdd, 0xd4, 0xa9, 0xad, 0x07, 0xf9, 0x90, 0x39, 0xe1, 0x2d, 0xf3, 0x56, 0xfd, 0xc6, 0x9d, 0x30, 0x20, 0x89, 0x16, 0xc5, 0xa2, 0x78, 0x22, 0x55, 0x18, 0xeb, 0x8b, 0x13, 0x31, 0xe2, 0x20, 0x21, 0xde, 0x9a, 0xfe, 0xbb, 0xb6, 0x5e, 0x0e, 0xb3, 0x98, 0xa0, 0xcf, 0x1d, 0x92, 0x48, 0x56, 0x4b, 0x01, 0x4c, 0x93, 0xfc, 0xfa, 0x81, 0xd5, 0xd0, 0xe9, 0xb1, 0x90 ],
-const [ 0x05, 0x31, 0xb9, 0x2d, 0x1b, 0x21, 0x8c, 0x08, 0xcd, 0x86, 0x30, 0xdd, 0x48, 0x61, 0xf7, 0xc8, 0x0a, 0xce, 0xd6, 0xf7, 0x5d, 0x7e, 0x0d, 0xb8, 0x1e, 0x67, 0x0a, 0xd6, 0xc3, 0xba, 0x8b, 0x26, 0x9d, 0x16, 0x04, 0x5d, 0x59, 0xfb, 0x40, 0x24, 0xcd, 0x81, 0x4a, 0x6f, 0xf2, 0x4a, 0x8e, 0x0a, 0x2c, 0xb5, 0x3c, 0x74, 0xd2, 0x54, 0xed, 0xf1, 0xea, 0xa1, 0x89, 0xdb, 0x34, 0xec, 0x68, 0x39, 0x6b, 0x98, 0xb7, 0x93, 0xc7, 0x87 ],
-const [ 0xec, 0xd2, 0x9c, 0xbb, 0x1a, 0x39, 0xd7, 0xfd, 0xbc, 0x5c, 0x92, 0xa0, 0x96, 0xc0, 0xce, 0xf1, 0xd4, 0xb2, 0x36, 0x3e, 0x9e, 0x89, 0x55, 0x37, 0xec, 0x2b, 0x07, 0x9a, 0x9c, 0xd3, 0x2d, 0x10, 0xc2, 0x11, 0xa5, 0x52, 0x3f, 0x12, 0x7a, 0x8f, 0x95, 0x21, 0x57, 0x12, 0xf9, 0x6e, 0x42, 0x20, 0xaa, 0x0e, 0x86, 0x1f, 0x82, 0x44, 0xf1, 0xfe, 0xca, 0xff, 0x40, 0xd0, 0x53, 0xa3, 0xd8, 0xba, 0xc2, 0x0c, 0xb7, 0x10, 0x2c, 0xd1 ],
-const [ 0xf5, 0x4e, 0x51, 0x4e, 0xb7, 0x0f, 0x39, 0x57, 0x9c, 0x9f, 0x17, 0x5a, 0xfd, 0x7c, 0xbd, 0xf1, 0xde, 0x2f, 0xdf, 0x10, 0x2b, 0x82, 0x76, 0xe0, 0x42, 0xee, 0x63, 0xca, 0xb2, 0x53, 0x55, 0xd1, 0x42, 0xec, 0xec, 0x26, 0x36, 0x81, 0x1f, 0xf6, 0xcd, 0xde, 0xdb, 0x87, 0x0e, 0x85, 0xec, 0x83, 0xc4, 0xa0, 0x21, 0x94, 0xc8, 0x39, 0xab, 0x30, 0x7e, 0xad, 0xc7, 0xb7, 0xa2, 0x5e, 0x9d, 0xbb, 0x45, 0xa9, 0x67, 0x9e, 0x12, 0x18 ],
-const [ 0xe8, 0x80, 0x06, 0x36, 0x49, 0x55, 0xd8, 0x11, 0x0c, 0x55, 0x3f, 0xdf, 0xd5, 0x9d, 0xb9, 0xba, 0xaa, 0x31, 0x0a, 0xe5, 0x0f, 0x90, 0x81, 0x02, 0x6f, 0x8b, 0x7e, 0x85, 0xbe, 0x56, 0x31, 0x68, 0x5d, 0xe0, 0xa4, 0x21, 0x3e, 0x60, 0xfc, 0xd1, 0x48, 0x30, 0xfc, 0xbe, 0xfd, 0xdf, 0xca, 0x03, 0x5a, 0x82, 0xf6, 0x86, 0xfe, 0x4a, 0xb8, 0x2b, 0x8f, 0x5c, 0x79, 0x47, 0x5a, 0xdc, 0x95, 0x58, 0x39, 0x4b, 0x60, 0xf3, 0xba, 0x14 ],
-const [ 0xde, 0xca, 0x6c, 0xc2, 0xbe, 0xc0, 0x06, 0xc1, 0x9a, 0xe4, 0xb3, 0xb2, 0x24, 0x6f, 0xd6, 0x36, 0x08, 0xac, 0xa2, 0x8b, 0x22, 0x5a, 0xe8, 0x0b, 0xee, 0x52, 0x2d, 0xf5, 0x40, 0x6a, 0x00, 0x70, 0x35, 0x98, 0x8b, 0xcd, 0x69, 0x5b, 0x67, 0x0d, 0x6a, 0x56, 0xb5, 0xa3, 0x6d, 0x3e, 0x6a, 0x7b, 0x40, 0xf7, 0xea, 0x3a, 0x80, 0xfa, 0xd9, 0xc8, 0x0c, 0xfa, 0x2d, 0x0c, 0xb9, 0xc7, 0x88, 0xf6, 0x48, 0x72, 0xc6, 0xc3, 0x95, 0xb2 ],
-const [ 0xf0, 0xda, 0xe6, 0xd8, 0x75, 0x30, 0x76, 0xb1, 0x89, 0x5c, 0x01, 0x26, 0x2c, 0xa9, 0xb5, 0x76, 0x33, 0xeb, 0x28, 0xb3, 0xf9, 0x63, 0xa7, 0xc7, 0x52, 0xe2, 0xcb, 0xb4, 0xc0, 0x31, 0x4c, 0x20, 0xea, 0xb1, 0x1a, 0x10, 0x49, 0x3f, 0xaa, 0xf4, 0x25, 0x5a, 0x8e, 0xe4, 0xc0, 0x88, 0x49, 0x29, 0xd1, 0xf5, 0x61, 0xff, 0x33, 0x5e, 0xb6, 0x99, 0xdf, 0x2d, 0x11, 0x66, 0x18, 0xe6, 0x00, 0x93, 0xe5, 0xc1, 0xe2, 0xd1, 0xc4, 0x99 ],
-const [ 0x65, 0xaf, 0x1f, 0x17, 0xcd, 0x7f, 0xda, 0xa5, 0x23, 0xb9, 0xb7, 0xa9, 0x82, 0x9d, 0x49, 0x7c, 0xac, 0x73, 0x03, 0xd4, 0x50, 0xc5, 0x9e, 0x98, 0x88, 0xcb, 0xba, 0xf3, 0xa6, 0x27, 0xc8, 0xa8, 0x30, 0xd3, 0x27, 0xa5, 0x29, 0x57, 0x8d, 0xda, 0x92, 0x3f, 0xa9, 0x4b, 0x31, 0xcc, 0x07, 0x64, 0x91, 0xea, 0x33, 0x8d, 0x4a, 0x62, 0x21, 0xff, 0x82, 0x51, 0xcc, 0xd6, 0xb4, 0xd9, 0x1e, 0x67, 0xb1, 0x16, 0x10, 0xd3, 0xe4, 0x53 ],
-const [ 0x53, 0x8b, 0x4a, 0x47, 0x53, 0x18, 0x3c, 0xe5, 0x60, 0x7f, 0xa0, 0x36, 0x36, 0xdb, 0x2f, 0xdc, 0x84, 0x72, 0x2a, 0xeb, 0x9d, 0x98, 0xa6, 0xed, 0x70, 0xd0, 0x28, 0x2a, 0xba, 0x35, 0x71, 0x26, 0x7a, 0x18, 0x9b, 0x6a, 0xa6, 0xeb, 0x65, 0x87, 0x1c, 0x5d, 0xcc, 0x59, 0xdb, 0xc7, 0xdb, 0x89, 0x73, 0xc7, 0xc3, 0x55, 0xba, 0x2a, 0x2e, 0x94, 0xc1, 0x10, 0xd1, 0xf4, 0x06, 0x4a, 0x40, 0x87, 0xeb, 0x07, 0x07, 0x7e, 0x67, 0xb0 ],
-const [ 0x1e, 0x79, 0x82, 0xd0, 0x97, 0x5b, 0x36, 0xda, 0x41, 0x44, 0x04, 0x1f, 0xac, 0x9a, 0x7f, 0x70, 0xb4, 0xd5, 0x18, 0x0b, 0xed, 0x48, 0x9f, 0x11, 0x45, 0x3e, 0x07, 0x3b, 0xe4, 0x49, 0x6a, 0xc9, 0x57, 0xd7, 0x4c, 0xbc, 0xee, 0x06, 0x24, 0x45, 0x62, 0xba, 0x19, 0x7d, 0xbb, 0xec, 0x09, 0x56, 0x71, 0x45, 0xcf, 0xd2, 0xd2, 0xeb, 0xc6, 0x73, 0xa3, 0x9b, 0x89, 0xf2, 0x0a, 0xf8, 0xfd, 0x34, 0xac, 0x22, 0x92, 0x79, 0x12, 0x8b ],
-const [ 0xff, 0x5f, 0x9f, 0xb0, 0x3f, 0xc1, 0x5b, 0x21, 0x43, 0xef, 0x63, 0x8b, 0xba, 0xac, 0x07, 0x55, 0x7d, 0x3e, 0xfd, 0xa9, 0x20, 0xbb, 0x9b, 0xd5, 0xc6, 0x83, 0x49, 0xf1, 0x3a, 0x0e, 0x37, 0xc2, 0x3c, 0xe8, 0x4b, 0xdf, 0x19, 0xf9, 0x5e, 0x12, 0x7f, 0x0a, 0xa7, 0x01, 0x8e, 0x85, 0x77, 0x0e, 0x32, 0x7c, 0x27, 0x7b, 0xb1, 0xed, 0x4f, 0xd2, 0x80, 0x45, 0x39, 0x84, 0x5b, 0x22, 0x96, 0xd0, 0x94, 0x5d, 0x6f, 0xe6, 0xac, 0x48 ],
-const [ 0x06, 0xec, 0x0e, 0x5b, 0xc8, 0x33, 0xca, 0xaf, 0x76, 0x6f, 0x8a, 0x53, 0x1b, 0x09, 0x62, 0x1c, 0x0c, 0x93, 0xe8, 0x59, 0x28, 0x01, 0x96, 0xac, 0x5f, 0x16, 0x6f, 0x18, 0x71, 0x1c, 0xe5, 0x5a, 0xf8, 0xd8, 0xfb, 0x7d, 0xa9, 0xbd, 0xa7, 0xa9, 0xd7, 0x60, 0x7a, 0x3c, 0x38, 0x2c, 0x82, 0x1b, 0xec, 0x57, 0x70, 0x4b, 0xbb, 0x14, 0xf6, 0xbb, 0x9f, 0x0b, 0x73, 0x64, 0x82, 0x06, 0xd2, 0x94, 0x48, 0xed, 0xaf, 0x87, 0x10, 0xf4 ],
-const [ 0xa5, 0x20, 0x69, 0xd0, 0x8c, 0x72, 0x9e, 0xec, 0x3f, 0x80, 0x3d, 0xf6, 0xad, 0xcf, 0xc5, 0x3c, 0x7e, 0xb6, 0x45, 0x65, 0x49, 0xbf, 0x29, 0xfa, 0x08, 0x4f, 0x54, 0x25, 0xc9, 0x8a, 0x6f, 0xb8, 0xa6, 0x71, 0x80, 0x70, 0xf6, 0x4d, 0xbe, 0x7c, 0xc5, 0x51, 0xa4, 0x39, 0x82, 0x7b, 0x44, 0x40, 0xf8, 0xbb, 0xde, 0xa2, 0x80, 0x57, 0xb1, 0x72, 0x74, 0x8e, 0x11, 0x84, 0xe6, 0x7c, 0xba, 0x75, 0x92, 0x3d, 0x64, 0xeb, 0x12, 0x55 ],
-const [ 0x5a, 0x04, 0x58, 0x58, 0x91, 0xa5, 0xdd, 0xc9, 0x7a, 0x7c, 0xe8, 0x3b, 0xab, 0x92, 0xeb, 0xa5, 0x51, 0x33, 0x90, 0x5c, 0x7f, 0xf4, 0xaa, 0x34, 0xc5, 0xf5, 0x6b, 0xe8, 0x05, 0x64, 0xd7, 0xbc, 0x82, 0x42, 0x78, 0x60, 0x3a, 0x6a, 0x54, 0x18, 0x76, 0xcf, 0x1c, 0x1a, 0x9f, 0x05, 0xa6, 0x37, 0x53, 0x03, 0x9d, 0xbe, 0xb8, 0x27, 0x78, 0x9e, 0x10, 0x7a, 0xa8, 0xca, 0x8e, 0x36, 0x16, 0xe2, 0x68, 0x85, 0xcc, 0x0f, 0x2e, 0x8c ],
-const [ 0xd5, 0xed, 0x1c, 0xda, 0xae, 0x3e, 0xda, 0xcf, 0x80, 0xee, 0x94, 0x87, 0xeb, 0x31, 0x7d, 0xf4, 0x6b, 0xa2, 0x93, 0xb0, 0x7d, 0xdb, 0xdd, 0x35, 0x04, 0x43, 0xf1, 0x50, 0xea, 0x28, 0xba, 0xd3, 0x0a, 0x0e, 0x78, 0x8b, 0x4e, 0x46, 0x08, 0x71, 0x14, 0xc2, 0x66, 0x24, 0xd7, 0x27, 0x70, 0x97, 0x0b, 0x24, 0xed, 0x07, 0x48, 0x03, 0xcd, 0x31, 0xab, 0x7d, 0xb2, 0xc1, 0x7a, 0xd3, 0xb0, 0x0d, 0x06, 0x1a, 0x51, 0x03, 0xd6, 0xd6 ],
-const [ 0x9f, 0xc0, 0x5e, 0xf4, 0x95, 0x79, 0xaa, 0xef, 0x45, 0xc0, 0x05, 0x86, 0xc8, 0xa3, 0x5d, 0xc0, 0x96, 0x05, 0x13, 0x48, 0x3e, 0x89, 0x51, 0x71, 0x5b, 0xb2, 0x9e, 0x77, 0xc3, 0x48, 0xaf, 0x08, 0x01, 0xfd, 0x80, 0x02, 0x06, 0x50, 0xa4, 0x7f, 0x1b, 0xb2, 0xda, 0x0f, 0x1a, 0xe7, 0xe0, 0x44, 0xde, 0xb0, 0x8c, 0x74, 0xf8, 0xa7, 0x18, 0xba, 0xa3, 0x6a, 0xbe, 0x3e, 0xfb, 0xfb, 0x84, 0xb6, 0x69, 0x67, 0x5a, 0x2d, 0x62, 0xa6 ],
-const [ 0x3e, 0x3b, 0x57, 0x7a, 0x9c, 0xc8, 0x00, 0xd2, 0xdc, 0x69, 0x36, 0x28, 0x37, 0x87, 0x8d, 0x4f, 0x7e, 0xc0, 0xfb, 0xf3, 0xfe, 0x3a, 0xe0, 0x8a, 0xa6, 0x37, 0x45, 0x88, 0x6c, 0xea, 0x61, 0xd2, 0xec, 0x8a, 0x62, 0x76, 0x52, 0xa4, 0x6a, 0x99, 0x7b, 0xb5, 0xd7, 0xb1, 0x57, 0xf8, 0xc7, 0xf4, 0x92, 0x7d, 0xdb, 0x0f, 0x73, 0x7b, 0x3c, 0x1c, 0x04, 0xe7, 0xdc, 0xce, 0x73, 0x45, 0xff, 0xef, 0xb8, 0xbf, 0xf9, 0x0d, 0x78, 0x74 ],
-const [ 0x98, 0xfd, 0xfe, 0x9b, 0x59, 0x10, 0x08, 0xfa, 0x03, 0xfc, 0xc4, 0x80, 0x80, 0x94, 0x10, 0xa5, 0x3a, 0x2a, 0x41, 0x75, 0xde, 0x48, 0x0d, 0xe3, 0x60, 0xa1, 0xa9, 0x5f, 0x3f, 0x46, 0x2e, 0xab, 0x0a, 0x1d, 0x41, 0xea, 0x23, 0x90, 0xf3, 0xfa, 0xc3, 0x82, 0xe6, 0x03, 0x3e, 0x87, 0xb2, 0x50, 0x88, 0x54, 0x86, 0x5e, 0xf8, 0x74, 0x13, 0x33, 0x4d, 0x3d, 0xa5, 0xf1, 0xef, 0x03, 0x93, 0xab, 0x77, 0x8b, 0xda, 0x77, 0x70, 0xc2 ],
-const [ 0x74, 0xc6, 0xbd, 0x81, 0xed, 0x71, 0xbe, 0xba, 0xcf, 0x5f, 0x72, 0x63, 0xca, 0xd7, 0x15, 0x95, 0x1c, 0x69, 0x0a, 0xfe, 0x4c, 0xd1, 0x27, 0xe4, 0x1b, 0x1e, 0x54, 0x68, 0xb8, 0x13, 0x54, 0x08, 0x33, 0xcd, 0xe2, 0x68, 0x34, 0xa6, 0x00, 0x52, 0xed, 0x5a, 0x8c, 0xfb, 0x4d, 0x68, 0x14, 0x88, 0x76, 0xbb, 0xeb, 0xd0, 0x72, 0x8a, 0x7c, 0x64, 0x21, 0x7d, 0xdf, 0xcd, 0x76, 0x11, 0xaa, 0x14, 0xe3, 0x3d, 0x0a, 0x88, 0x12, 0x56 ],
-const [ 0xce, 0xa6, 0x53, 0x20, 0xf0, 0xca, 0x8d, 0xc1, 0x60, 0xc5, 0xff, 0x83, 0x10, 0x0e, 0x52, 0x3a, 0x16, 0xb7, 0x65, 0x1d, 0x5e, 0x4d, 0x9c, 0xca, 0x9c, 0x00, 0x7b, 0x8b, 0x85, 0x03, 0x73, 0xd8, 0x3f, 0x36, 0xfb, 0x1d, 0x16, 0x03, 0xe3, 0xbd, 0x70, 0x85, 0xe5, 0x56, 0x03, 0xf0, 0x7e, 0x47, 0x45, 0x2d, 0xfc, 0x6f, 0x24, 0xc4, 0xd7, 0x38, 0xf8, 0xff, 0x44, 0xd4, 0xb6, 0x4d, 0x08, 0xc7, 0x66, 0xe4, 0x8a, 0xa6, 0xd7, 0xaa ],
-const [ 0x31, 0x47, 0x43, 0x43, 0x5c, 0xf8, 0xe0, 0xa1, 0xe1, 0xc4, 0xa3, 0x21, 0x43, 0x3b, 0xaf, 0xec, 0x55, 0xec, 0x26, 0x2d, 0xe7, 0x7a, 0xeb, 0xc5, 0xa4, 0xf3, 0xad, 0x3f, 0x3b, 0x5e, 0x21, 0x06, 0xbd, 0x93, 0x8e, 0xd5, 0x46, 0x50, 0x8f, 0x70, 0xe0, 0x88, 0x15, 0x92, 0xa4, 0xfe, 0xab, 0x26, 0x23, 0x13, 0xfe, 0xb9, 0x04, 0xdc, 0x9c, 0x30, 0xee, 0x78, 0xfc, 0xb6, 0xa8, 0xa1, 0xbf, 0xf9, 0x7e, 0x80, 0x35, 0x96, 0xe7, 0xc6 ],
-const [ 0x13, 0xfb, 0x1e, 0xd6, 0x38, 0x9f, 0x32, 0xd1, 0xde, 0x31, 0x39, 0xcb, 0x04, 0xbc, 0xdd, 0x53, 0x52, 0x5c, 0x98, 0x89, 0xb8, 0x53, 0x79, 0xd3, 0x53, 0x5a, 0x25, 0xd2, 0x90, 0x35, 0x1c, 0x95, 0x93, 0x8a, 0x3d, 0x0c, 0xda, 0xf3, 0x8d, 0xbf, 0x1d, 0x52, 0x34, 0xbf, 0x79, 0x65, 0xc8, 0xdd, 0xce, 0x9a, 0xce, 0x1b, 0x66, 0x24, 0x7e, 0x60, 0xd7, 0x4e, 0xc7, 0x70, 0x2a, 0x0f, 0x93, 0x1a, 0x3c, 0xdf, 0x4c, 0xb4, 0x65, 0xca, 0x9f, 0xc4, 0x58, 0xc3, 0x80, 0x00, 0x4a, 0x3a, 0x6e, 0x79 ],
-const [ 0x5c, 0xf5, 0x9e, 0x34, 0xf1, 0xae, 0x4e, 0xd7, 0x32, 0xa9, 0x5c, 0xee, 0x65, 0xeb, 0x49, 0x4c, 0x1f, 0x7e, 0x89, 0xe1, 0xa2, 0x72, 0x7c, 0xde, 0x68, 0x22, 0x9f, 0x1a, 0x00, 0xb9, 0x04, 0xb5, 0x19, 0xf4, 0xff, 0xfb, 0xdd, 0x29, 0x23, 0x8b, 0x80, 0x88, 0x6c, 0xb8, 0x18, 0xa1, 0xbe, 0x2f, 0xaf, 0x26, 0x8e, 0xda, 0x96, 0xf2, 0xdf, 0x05, 0xfd, 0x4b, 0x71, 0xc0, 0xc1, 0x64, 0x35, 0x84, 0x85, 0x26, 0x03, 0x19, 0x04, 0x30, 0x8f, 0xb6, 0xa5, 0x1d, 0x9a, 0x6b, 0x51, 0x05, 0x65, 0xbc ],
-const [ 0x90, 0x9d, 0x38, 0x91, 0xb6, 0xa5, 0xef, 0x3c, 0x81, 0x21, 0x28, 0xcc, 0x63, 0x07, 0x11, 0x86, 0x1b, 0x6e, 0x73, 0xdc, 0xe4, 0xf2, 0x89, 0xef, 0xec, 0x5a, 0x12, 0x52, 0x07, 0x78, 0xa5, 0x11, 0xa5, 0x51, 0x45, 0xf2, 0x02, 0x7e, 0x35, 0xfa, 0x9c, 0xd2, 0x0d, 0x33, 0xea, 0x3d, 0x0e, 0xad, 0x4b, 0xf0, 0xb3, 0xc3, 0x3d, 0xc2, 0x88, 0x9f, 0xcf, 0xd3, 0x3f, 0x01, 0x59, 0x6f, 0x01, 0x3b, 0x6a, 0x35, 0x02, 0x81, 0x02, 0x78, 0x58, 0x5f, 0x01, 0xe5, 0x0d, 0x8b, 0xe0, 0x66, 0x73, 0xdd ],
-const [ 0xb5, 0x1e, 0xc0, 0x38, 0xea, 0xf0, 0x3b, 0x3a, 0xce, 0xcf, 0x40, 0x7f, 0x43, 0xe2, 0xf0, 0xf4, 0x96, 0x15, 0x16, 0x85, 0x0f, 0x5e, 0x5d, 0x87, 0xc6, 0x45, 0xc1, 0x53, 0xb9, 0xa3, 0x44, 0x34, 0x1c, 0xaa, 0xe2, 0x84, 0xf0, 0x25, 0xc6, 0x11, 0xd7, 0x01, 0xbe, 0xc6, 0x27, 0x0d, 0xed, 0x87, 0x3d, 0xfe, 0xc0, 0x5c, 0x14, 0xb6, 0x23, 0xd2, 0x16, 0xc6, 0xf4, 0x9e, 0x31, 0x31, 0xb7, 0x84, 0x2e, 0x73, 0x8c, 0x77, 0x3e, 0xc1, 0x5f, 0x02, 0xd6, 0x93, 0x5f, 0xe6, 0xbd, 0x60, 0xb1, 0x05 ],
-const [ 0xd4, 0xc8, 0x92, 0xac, 0xa8, 0xc9, 0x57, 0x4a, 0x48, 0xb7, 0x61, 0xf3, 0x3f, 0x44, 0xaa, 0x86, 0x7b, 0xf0, 0xc6, 0x1a, 0x49, 0x29, 0x73, 0x42, 0x80, 0xb7, 0x72, 0x90, 0xfb, 0x57, 0x95, 0x57, 0x4d, 0xa6, 0x1a, 0xb5, 0xb1, 0x41, 0x37, 0xd1, 0x40, 0x2b, 0xf6, 0x62, 0x67, 0x6f, 0x43, 0x71, 0x97, 0x06, 0x43, 0x5f, 0x3e, 0xfa, 0xe8, 0x29, 0xf7, 0xcc, 0xc3, 0xeb, 0xfd, 0x14, 0x19, 0xa3, 0xe6, 0x67, 0x38, 0x38, 0x8e, 0x7d, 0x0b, 0xbb, 0x51, 0x93, 0xed, 0xec, 0x7d, 0x0f, 0xbb, 0x00 ],
-const [ 0xb6, 0x29, 0x4d, 0x16, 0x0b, 0x6d, 0xf3, 0x0f, 0xa4, 0x54, 0x6b, 0x63, 0xae, 0x64, 0xef, 0xfc, 0xbc, 0xf7, 0x44, 0x15, 0x69, 0x49, 0x84, 0xf1, 0x3e, 0xcf, 0x21, 0xcc, 0xd6, 0xca, 0x27, 0x12, 0x3f, 0x1d, 0xc1, 0xcf, 0xa4, 0x5b, 0xff, 0x66, 0x29, 0x25, 0xd6, 0x87, 0x17, 0xb3, 0x69, 0x5b, 0x39, 0xb0, 0x86, 0x01, 0x86, 0x4b, 0x74, 0x3e, 0xff, 0x8b, 0xec, 0x70, 0xdb, 0xe2, 0x65, 0xc4, 0xe2, 0x06, 0x95, 0xa9, 0x17, 0xfc, 0x34, 0x85, 0x99, 0x75, 0x03, 0xa6, 0xcb, 0x5e, 0x0d, 0x7b ],
-const [ 0x3b, 0x1c, 0xbf, 0x6f, 0x42, 0x12, 0xf6, 0xbf, 0xb9, 0xbc, 0x10, 0x6d, 0xfb, 0x55, 0x68, 0x39, 0x56, 0x43, 0xde, 0x58, 0xbf, 0xfa, 0x27, 0x74, 0xc3, 0x1e, 0x67, 0xf5, 0xc1, 0xe7, 0x01, 0x7f, 0x57, 0xca, 0xad, 0xbb, 0x1a, 0x56, 0xcc, 0x5b, 0x8a, 0x5c, 0xf9, 0x58, 0x45, 0x52, 0xe1, 0x7e, 0x7a, 0xf9, 0x54, 0x2b, 0xa1, 0x3e, 0x9c, 0x54, 0x69, 0x5e, 0x0d, 0xc8, 0xf2, 0x4e, 0xdd, 0xb9, 0x3d, 0x5a, 0x36, 0x78, 0xe1, 0x0c, 0x8a, 0x80, 0xff, 0x4f, 0x27, 0xb6, 0x77, 0xd4, 0x0b, 0xef ],
-const [ 0x09, 0xc8, 0xf4, 0xa8, 0x92, 0xb2, 0xef, 0xd2, 0x09, 0xaf, 0x0a, 0x81, 0x35, 0xc1, 0x57, 0x56, 0xc5, 0x28, 0x21, 0x3c, 0x86, 0xca, 0xc5, 0xed, 0xd9, 0xd8, 0xc3, 0xb9, 0x65, 0xaf, 0x15, 0x83, 0x09, 0xfc, 0xc0, 0x0c, 0x14, 0x24, 0xa8, 0x74, 0xb9, 0xe3, 0xa8, 0xfd, 0xbd, 0x33, 0xe2, 0x13, 0x73, 0x6f, 0x54, 0x89, 0xea, 0xb8, 0xad, 0x26, 0x65, 0x98, 0x5e, 0x60, 0x0b, 0xe5, 0xf3, 0x67, 0xe0, 0xe8, 0xa4, 0x65, 0xf4, 0xbf, 0x27, 0x04, 0xdb, 0x00, 0xc9, 0x32, 0x5c, 0x9f, 0xbd, 0x21 ],
-const [ 0xae, 0x69, 0xe1, 0xf1, 0x0b, 0xcc, 0x8e, 0xa9, 0xe4, 0x7a, 0x17, 0x95, 0xc9, 0x16, 0xa3, 0x13, 0x2b, 0x9d, 0x4b, 0xa7, 0x10, 0x49, 0x70, 0xfa, 0x0b, 0xb5, 0x51, 0x23, 0x6c, 0x43, 0xdc, 0x26, 0xb4, 0xbb, 0xc5, 0xba, 0x4c, 0x34, 0xd6, 0x50, 0x76, 0x38, 0x86, 0x50, 0x83, 0x23, 0xcc, 0xa6, 0x47, 0xcc, 0x35, 0x7d, 0xca, 0x67, 0x35, 0x4a, 0x40, 0xaa, 0xba, 0x0d, 0x3b, 0x2f, 0x07, 0xd4, 0x20, 0x1a, 0xc0, 0x80, 0xd7, 0xfb, 0x41, 0xcb, 0xc7, 0xf6, 0x34, 0x8a, 0x02, 0x21, 0x63, 0x30 ],
-const [ 0x7f, 0x05, 0x68, 0xcc, 0xa4, 0xff, 0x79, 0xdc, 0xf1, 0xe5, 0xa3, 0x06, 0xb4, 0x19, 0xd2, 0x5d, 0x47, 0xdd, 0x4c, 0xdd, 0x42, 0xbb, 0x86, 0xf3, 0xef, 0x24, 0x3c, 0x40, 0xfe, 0x57, 0xc0, 0x9a, 0x7a, 0x84, 0x93, 0x53, 0xfc, 0x31, 0x32, 0xbe, 0x1f, 0xde, 0x32, 0xf0, 0x33, 0xe4, 0x8f, 0xc4, 0x36, 0xa3, 0x42, 0x22, 0x00, 0xdc, 0x11, 0x80, 0xbd, 0x5c, 0xab, 0xa8, 0xa0, 0xdb, 0xf4, 0xbc, 0xd6, 0x23, 0x9e, 0x78, 0xb9, 0x75, 0xf9, 0xb8, 0x47, 0x28, 0x0c, 0x3a, 0xd2, 0x93, 0xe4, 0xa4 ],
-const [ 0x0d, 0xaf, 0x68, 0xd4, 0x7c, 0xae, 0xcb, 0xcb, 0x73, 0x73, 0xb6, 0x93, 0xbb, 0xfa, 0x4b, 0x98, 0xa3, 0x9d, 0x88, 0xad, 0x3e, 0x7e, 0x1b, 0x99, 0xcb, 0x24, 0x78, 0xd2, 0x75, 0x69, 0x28, 0x88, 0x3d, 0x93, 0x64, 0xe5, 0x34, 0xc1, 0xe2, 0x94, 0xed, 0x89, 0xef, 0x80, 0x32, 0xdf, 0xbe, 0xde, 0xf6, 0x38, 0x00, 0x6d, 0x8b, 0xf0, 0xb4, 0xfc, 0x15, 0xe9, 0x41, 0x2e, 0x3f, 0x76, 0xc2, 0x7a, 0x2c, 0x77, 0xa1, 0x75, 0xb1, 0xc5, 0x67, 0x54, 0xc1, 0xd0, 0xd2, 0xac, 0x28, 0x86, 0x29, 0x7d ],
-const [ 0x01, 0x66, 0x3b, 0x65, 0xd9, 0xd2, 0x58, 0x26, 0x8b, 0x1f, 0x8c, 0x77, 0x0f, 0x71, 0x3c, 0xbc, 0x85, 0x7c, 0x18, 0x70, 0xd3, 0x99, 0xe7, 0xce, 0x90, 0x18, 0x87, 0xd1, 0x21, 0xd8, 0x2f, 0x5f, 0x21, 0x16, 0xf8, 0xc1, 0x07, 0x83, 0x9c, 0x57, 0x02, 0x99, 0x7d, 0x8a, 0x28, 0x2e, 0xe9, 0x01, 0xd0, 0x4a, 0x9c, 0x18, 0x3c, 0x36, 0x86, 0x8e, 0x7c, 0xd5, 0xcf, 0x7d, 0x8e, 0x37, 0x19, 0x90, 0xca, 0x6c, 0x05, 0x70, 0x7e, 0x96, 0xf8, 0x7f, 0xd5, 0x42, 0x1f, 0xc9, 0xfd, 0xf9, 0xb0, 0x38 ],
-const [ 0xab, 0x68, 0x32, 0x84, 0x6f, 0x39, 0xaa, 0x9b, 0xe6, 0xde, 0xdc, 0xdc, 0xe2, 0xf0, 0xd5, 0xad, 0x7d, 0x33, 0x11, 0x29, 0xb8, 0xb3, 0x40, 0xd1, 0x62, 0x12, 0x49, 0x7e, 0x3c, 0x20, 0x90, 0x9b, 0x5a, 0xac, 0x75, 0x90, 0xcc, 0x9a, 0x1d, 0x81, 0x7e, 0x36, 0x74, 0x39, 0x5d, 0xc8, 0x72, 0x61, 0xbb, 0x69, 0x9e, 0xf6, 0xf5, 0x14, 0xd1, 0xfa, 0x53, 0x00, 0x3d, 0x69, 0x2f, 0x2d, 0xad, 0x6e, 0x5a, 0x3d, 0x0e, 0xd7, 0xbb, 0x86, 0x2f, 0xc7, 0x39, 0x65, 0xc5, 0xaa, 0xdc, 0xd5, 0xb2, 0x6e ],
-const [ 0xd1, 0x44, 0x74, 0xfe, 0x02, 0x3c, 0x28, 0x4a, 0x27, 0xf7, 0xbe, 0x75, 0x1c, 0xed, 0x9a, 0xe2, 0x10, 0xa4, 0xfe, 0x5e, 0xe6, 0x81, 0x88, 0x9b, 0xdb, 0xde, 0xfc, 0xe0, 0x6a, 0x5d, 0x44, 0xfe, 0x6d, 0x7b, 0xb5, 0x86, 0x84, 0x68, 0x94, 0x39, 0xba, 0x16, 0xd9, 0xc0, 0x66, 0x8f, 0x32, 0x9e, 0x50, 0x8d, 0x4b, 0x62, 0x15, 0x44, 0x4d, 0x21, 0xcd, 0x83, 0xa5, 0x23, 0xea, 0xfb, 0x06, 0xdd, 0x63, 0xde, 0xb1, 0x1f, 0x13, 0xad, 0xf4, 0x8f, 0x5c, 0x4b, 0xf0, 0x56, 0x0f, 0x55, 0xa0, 0x19 ],
-const [ 0x1f, 0x92, 0x84, 0x00, 0x03, 0x41, 0xa2, 0x62, 0xe7, 0xb6, 0x1f, 0x94, 0x95, 0x23, 0xb7, 0x74, 0x42, 0x77, 0xe9, 0x90, 0x13, 0xd5, 0xa0, 0x3b, 0xe0, 0x44, 0x13, 0xe1, 0x37, 0xa8, 0xea, 0x97, 0xa4, 0xf1, 0xa2, 0xf6, 0x2f, 0x92, 0x32, 0x2a, 0x27, 0x34, 0xef, 0x46, 0x1e, 0xac, 0xad, 0xda, 0x35, 0x2b, 0x27, 0xc8, 0x9a, 0xb5, 0xa1, 0x53, 0x4e, 0xd5, 0xcb, 0x79, 0x2c, 0x8e, 0xe9, 0x83, 0x27, 0x94, 0x31, 0xda, 0xd3, 0xbd, 0x74, 0x1c, 0x27, 0xb2, 0x01, 0x6f, 0x81, 0xea, 0xc7, 0x16 ],
-const [ 0x24, 0xd8, 0x93, 0x8c, 0x16, 0x44, 0xcb, 0xb0, 0x80, 0xc4, 0x50, 0x55, 0x39, 0xe4, 0x4c, 0x8a, 0x61, 0x56, 0x7c, 0xa7, 0x44, 0x43, 0x36, 0x3b, 0x80, 0xdf, 0xaa, 0x46, 0x6b, 0x40, 0x68, 0xa9, 0xaf, 0x70, 0x22, 0xda, 0x37, 0xc1, 0xb3, 0xdc, 0x4f, 0x60, 0x61, 0x6f, 0x06, 0x2d, 0x5f, 0x84, 0xd7, 0xca, 0x96, 0xf3, 0x89, 0xf2, 0xa6, 0x70, 0x54, 0x0d, 0x27, 0xbc, 0x45, 0x01, 0x34, 0x18, 0xe4, 0x4a, 0x2a, 0xff, 0x13, 0x4d, 0xad, 0x14, 0x39, 0xe9, 0xec, 0x5a, 0xa0, 0x50, 0x26, 0xa3 ],
-const [ 0x4b, 0xdc, 0x4b, 0x88, 0x62, 0x95, 0x68, 0x99, 0x37, 0x3d, 0x3d, 0xf4, 0xda, 0x72, 0x81, 0xc0, 0xea, 0x2b, 0xdd, 0x57, 0x63, 0x40, 0x59, 0xef, 0xb8, 0x2d, 0x15, 0x7a, 0x22, 0x13, 0x39, 0xcb, 0x37, 0xff, 0x2e, 0xf9, 0xbe, 0x6f, 0x0f, 0x08, 0xc2, 0x12, 0x5a, 0xc6, 0xe5, 0xd0, 0xec, 0xf4, 0xf7, 0x0a, 0x2c, 0xa6, 0xc7, 0x23, 0x86, 0xed, 0x39, 0x3f, 0x1b, 0xb2, 0x99, 0x4a, 0xb6, 0xe5, 0x2f, 0x3d, 0x02, 0xd8, 0x14, 0x9c, 0xfb, 0xe5, 0x44, 0x43, 0xa3, 0x57, 0xf3, 0x63, 0xf6, 0x88 ],
-const [ 0x73, 0x29, 0x57, 0xd1, 0x86, 0x70, 0x47, 0xf2, 0x90, 0x48, 0x17, 0xb4, 0xf5, 0x59, 0x64, 0x90, 0x59, 0x87, 0x0d, 0x38, 0xb2, 0xbc, 0xe7, 0x7e, 0xa2, 0xe8, 0xb2, 0x72, 0x05, 0x46, 0x4c, 0xcb, 0xc6, 0xe0, 0x25, 0x89, 0xf6, 0x55, 0xf3, 0xd8, 0x1f, 0xda, 0xa7, 0x36, 0xd5, 0x7f, 0x9f, 0xd8, 0x8f, 0xb4, 0x1d, 0x4a, 0xb5, 0x0b, 0xf8, 0x57, 0xfa, 0x3f, 0x91, 0x28, 0xec, 0x76, 0x09, 0xb0, 0xc9, 0xc3, 0xb1, 0x47, 0x95, 0xef, 0xc2, 0x94, 0x69, 0x79, 0x4f, 0xb1, 0x0e, 0xdb, 0x77, 0x8a ],
-const [ 0x05, 0x41, 0x27, 0x98, 0x05, 0xec, 0x5e, 0x82, 0xdd, 0xea, 0x16, 0x89, 0x78, 0x48, 0xb0, 0xdd, 0x58, 0x4f, 0xe5, 0x9f, 0x2d, 0xc1, 0xff, 0x44, 0xa6, 0x5f, 0x49, 0x3b, 0x87, 0xae, 0xc4, 0xcf, 0xfc, 0xfb, 0x1b, 0x4e, 0x2c, 0x9d, 0xd9, 0x6b, 0x12, 0x7a, 0xda, 0xe1, 0x88, 0xcd, 0xff, 0x59, 0xa5, 0x26, 0x26, 0x8e, 0x49, 0xb2, 0x5a, 0xaf, 0xf6, 0xbc, 0x46, 0x05, 0xe2, 0x74, 0xf0, 0xd5, 0x4a, 0xef, 0xa4, 0x88, 0x08, 0x70, 0x2d, 0x09, 0x68, 0xe6, 0x4c, 0x6f, 0x38, 0xb5, 0x62, 0xdc ],
-const [ 0x68, 0xed, 0x9f, 0xb9, 0x0a, 0xa9, 0xc9, 0x5f, 0xf1, 0xad, 0xd2, 0x47, 0x6e, 0xd9, 0xa8, 0xf9, 0xf8, 0x94, 0xa3, 0xbf, 0xc5, 0x14, 0xb7, 0x07, 0x97, 0xda, 0xef, 0x0a, 0xd9, 0x7b, 0x16, 0xab, 0xea, 0xa6, 0xb7, 0xa2, 0xb9, 0x63, 0x49, 0xd9, 0x92, 0x99, 0xa3, 0x16, 0x37, 0xd3, 0xb6, 0xdb, 0x33, 0x43, 0x7a, 0x8b, 0x6b, 0x08, 0x29, 0xcd, 0xf6, 0xac, 0xac, 0x35, 0x2e, 0xf1, 0x52, 0x22, 0x07, 0xcd, 0xc8, 0xe2, 0xa0, 0xb3, 0x46, 0x1d, 0x18, 0x14, 0x06, 0x70, 0xa3, 0x26, 0xfa, 0x58 ],
-const [ 0x77, 0x23, 0x26, 0xbc, 0x0d, 0x10, 0x92, 0x1a, 0x48, 0x9a, 0x82, 0xe3, 0x65, 0x1d, 0xaf, 0x79, 0x8b, 0x2e, 0x2a, 0x39, 0xf7, 0x2f, 0xa1, 0xad, 0x56, 0x20, 0xde, 0x02, 0x72, 0xb8, 0x90, 0xbc, 0x11, 0xb5, 0x4e, 0xa8, 0x1a, 0x70, 0xd9, 0x12, 0xfa, 0xb4, 0xa1, 0x39, 0x46, 0xd0, 0x8b, 0x00, 0xa2, 0xeb, 0xf2, 0xe6, 0xe1, 0x98, 0xec, 0x38, 0x6e, 0xab, 0xce, 0x86, 0xea, 0x4a, 0xf2, 0x53, 0x16, 0x47, 0xb7, 0x10, 0xf4, 0xad, 0xca, 0x4c, 0x29, 0x98, 0xa4, 0x25, 0xa6, 0x4a, 0x54, 0x02 ],
-const [ 0xab, 0x7b, 0x93, 0x24, 0x94, 0xcc, 0xb9, 0xa4, 0x79, 0x2c, 0xaf, 0xbf, 0x75, 0x98, 0x8f, 0xf4, 0x95, 0x35, 0xf8, 0x37, 0x90, 0x37, 0x61, 0xf5, 0xb2, 0x01, 0xad, 0x52, 0x1a, 0x8d, 0xff, 0xb5, 0x25, 0x0f, 0xcf, 0x86, 0x2a, 0xd5, 0x3e, 0x36, 0x68, 0x72, 0xa6, 0x80, 0x3c, 0x1b, 0x76, 0xef, 0x98, 0x51, 0x3d, 0xa1, 0xb0, 0xc1, 0x04, 0x4a, 0xf6, 0x68, 0xe1, 0x7b, 0x49, 0xfa, 0xc9, 0x25, 0x69, 0x85, 0xa6, 0x59, 0xaf, 0x51, 0xa9, 0x51, 0xfb, 0x0c, 0xe2, 0xb4, 0xed, 0x23, 0x0e, 0x16 ],
-const [ 0x1f, 0x85, 0x09, 0xc8, 0x55, 0x3d, 0x0d, 0x77, 0x59, 0x3d, 0x26, 0x1f, 0xc9, 0xfc, 0xff, 0x90, 0xbf, 0x77, 0xb2, 0x4c, 0x4b, 0xd3, 0xde, 0x47, 0x21, 0x44, 0xfa, 0xeb, 0x8e, 0x2d, 0xe8, 0x5f, 0xb1, 0x89, 0xcd, 0x09, 0xe7, 0x89, 0x21, 0x52, 0x87, 0x7e, 0x02, 0xa9, 0xd0, 0xfa, 0xce, 0xca, 0x1f, 0x32, 0xf0, 0x40, 0x65, 0xa7, 0xfa, 0x28, 0xd9, 0x06, 0xf5, 0x39, 0xea, 0x4c, 0xf4, 0x01, 0x78, 0x2d, 0xf0, 0x71, 0x43, 0xb7, 0xcf, 0x9c, 0xa4, 0x33, 0xc6, 0xbc, 0x7b, 0x4c, 0xe1, 0x76 ],
-const [ 0x24, 0xb2, 0xd6, 0x33, 0x2e, 0xba, 0x8f, 0xd7, 0x19, 0xb4, 0xb3, 0x74, 0x63, 0xb4, 0x56, 0xe4, 0x4b, 0x91, 0x40, 0xd9, 0x90, 0x9a, 0xdc, 0x28, 0x7c, 0x85, 0x51, 0x68, 0x21, 0xa8, 0xee, 0xbc, 0xe3, 0x6c, 0xcb, 0xed, 0x36, 0xfe, 0xad, 0xbc, 0xa9, 0x47, 0x2b, 0x76, 0x24, 0x1f, 0x0f, 0xc8, 0x6d, 0xbd, 0xff, 0xd5, 0xf1, 0x72, 0x5d, 0x86, 0xc2, 0x98, 0x6b, 0x21, 0xdc, 0xc5, 0xb3, 0x1e, 0xac, 0x44, 0xa6, 0x36, 0xd3, 0xc5, 0x83, 0xbc, 0x27, 0x53, 0x7a, 0x30, 0xfa, 0x87, 0x12, 0x12 ],
-const [ 0xb7, 0x12, 0xf9, 0x4e, 0x60, 0x6e, 0x29, 0x36, 0x83, 0xb2, 0x96, 0x88, 0x06, 0xff, 0x6a, 0x14, 0x85, 0x50, 0x4a, 0x3e, 0xeb, 0xb8, 0x89, 0x5c, 0x3f, 0xeb, 0x9b, 0x60, 0xc1, 0x00, 0xcd, 0xb7, 0x36, 0x75, 0x34, 0x71, 0x80, 0x74, 0xe3, 0xa1, 0x71, 0x54, 0x61, 0x07, 0xe1, 0x63, 0x5b, 0xec, 0xfe, 0xe3, 0x95, 0x4e, 0xe4, 0x52, 0x26, 0x3d, 0x6e, 0xef, 0xe5, 0x85, 0x4b, 0x79, 0x1f, 0x8d, 0x54, 0x3a, 0x8b, 0x7f, 0x1c, 0x44, 0x7f, 0xa9, 0xc9, 0xfb, 0x63, 0x24, 0x23, 0xd3, 0x67, 0xb3 ],
-const [ 0xe1, 0x99, 0xdd, 0xb8, 0x61, 0x29, 0x36, 0xd2, 0xe4, 0x6b, 0x4e, 0x30, 0x1a, 0x1e, 0x77, 0x2b, 0x03, 0x12, 0xd5, 0xa9, 0x03, 0xe7, 0x13, 0xf9, 0x38, 0x17, 0x54, 0xfe, 0x0b, 0x37, 0x6d, 0x90, 0x05, 0x79, 0x51, 0x1f, 0xe5, 0x76, 0xcc, 0x99, 0xef, 0x2a, 0x75, 0x8e, 0x86, 0x40, 0xde, 0x93, 0xfd, 0x90, 0x0d, 0xe4, 0xab, 0xe7, 0x30, 0x4d, 0x3d, 0x06, 0x8c, 0x4a, 0x50, 0xed, 0xb7, 0x6d, 0x40, 0x59, 0x07, 0x00, 0x3a, 0x8b, 0x4a, 0xec, 0x99, 0x4b, 0xb7, 0xd9, 0x6f, 0x2d, 0x25, 0x97 ],
-const [ 0x48, 0x3d, 0x31, 0x90, 0xb2, 0xbf, 0xaf, 0x49, 0x2e, 0x96, 0x88, 0xe6, 0x1d, 0xb2, 0xb9, 0xff, 0x0b, 0x7d, 0xd8, 0x64, 0xd7, 0x6b, 0x55, 0x53, 0x14, 0xd2, 0x01, 0xee, 0xb0, 0xfd, 0xcc, 0xeb, 0xd3, 0x7c, 0xd3, 0x8e, 0x0a, 0xbd, 0x9a, 0xd4, 0xa5, 0xe1, 0x95, 0xf2, 0x5e, 0xc8, 0xee, 0xfd, 0x3b, 0x6e, 0x82, 0xeb, 0xb5, 0x7b, 0x2d, 0xba, 0x19, 0x15, 0x47, 0xef, 0x2f, 0xf9, 0x6e, 0x42, 0x1a, 0xca, 0x86, 0x98, 0x7f, 0xa8, 0xff, 0x31, 0xe9, 0x05, 0x56, 0x23, 0x6c, 0xb4, 0xdf, 0x07 ],
-const [ 0x2a, 0xa3, 0xcc, 0x87, 0xde, 0xb1, 0x65, 0xb2, 0xc4, 0x11, 0x4d, 0x1e, 0x50, 0x38, 0xb8, 0x82, 0x73, 0x23, 0x38, 0x78, 0x6d, 0xe3, 0x32, 0x23, 0xe3, 0x58, 0x8f, 0x16, 0x31, 0x3d, 0xb3, 0x71, 0x01, 0x64, 0xb3, 0x4d, 0x1d, 0x43, 0xc2, 0x5b, 0x81, 0xb0, 0xed, 0xc7, 0xb5, 0xe9, 0x09, 0x63, 0x59, 0xd7, 0xe9, 0x01, 0x01, 0x94, 0xd4, 0x20, 0x44, 0x2a, 0x35, 0xcc, 0x10, 0x9e, 0x95, 0xbf, 0x40, 0x2d, 0xc7, 0xcc, 0x71, 0xd5, 0x62, 0x7e, 0x11, 0x17, 0x75, 0xfc, 0xb8, 0xfc, 0x75, 0x2f ],
-const [ 0x4d, 0xe1, 0xed, 0x23, 0x5e, 0x42, 0x47, 0xd7, 0x3d, 0xf8, 0x6f, 0xc5, 0x7e, 0x56, 0x36, 0x0f, 0x0c, 0xa7, 0x8c, 0x6c, 0x13, 0x7d, 0x8e, 0x1d, 0x1d, 0x46, 0xc0, 0x23, 0x7b, 0x20, 0x96, 0xaf, 0xe6, 0xef, 0x3a, 0xda, 0x66, 0xac, 0x89, 0x96, 0x73, 0x00, 0x5e, 0xe4, 0x5a, 0x11, 0x14, 0x48, 0xe3, 0x9c, 0x46, 0x7a, 0x31, 0x44, 0xd9, 0x5f, 0xe9, 0x29, 0x3d, 0x37, 0x97, 0xbd, 0xef, 0x18, 0x4d, 0xd3, 0x43, 0x9b, 0x8d, 0xf9, 0x60, 0xd5, 0x68, 0x08, 0x8c, 0x89, 0xe8, 0xf9, 0xaa, 0x9b ],
-const [ 0xe4, 0x88, 0x25, 0xa5, 0x50, 0x3a, 0x6a, 0xfe, 0x0b, 0xf9, 0xa2, 0x40, 0xc6, 0x7f, 0x27, 0xac, 0xd4, 0xa8, 0xf6, 0x99, 0x38, 0x34, 0x64, 0x5e, 0x03, 0xc8, 0x0c, 0x72, 0xdd, 0x37, 0x0c, 0xd2, 0xe1, 0x00, 0x71, 0xa3, 0xae, 0x18, 0xef, 0x19, 0xba, 0xe9, 0xd6, 0x97, 0xea, 0x9a, 0x41, 0x18, 0x60, 0x91, 0x90, 0xcd, 0x95, 0x36, 0x19, 0x07, 0xa7, 0xfa, 0x1b, 0x58, 0xf4, 0x99, 0xf3, 0xf5, 0xe7, 0x9b, 0x93, 0x5f, 0x12, 0x21, 0x2f, 0x43, 0x7d, 0xde, 0x39, 0x9e, 0x3e, 0x64, 0x90, 0x24 ],
-const [ 0xb5, 0x43, 0x8e, 0x38, 0x45, 0xf3, 0x9a, 0xfe, 0x7d, 0xeb, 0x0f, 0xcf, 0xb8, 0x6e, 0x2d, 0xbe, 0x4f, 0xbc, 0x48, 0x9f, 0x55, 0xf0, 0x1c, 0x0f, 0x84, 0x29, 0x61, 0xb5, 0x76, 0xe8, 0x9f, 0xc7, 0x19, 0xb9, 0x44, 0xcf, 0x5d, 0x16, 0xf4, 0xaf, 0x2f, 0x88, 0x20, 0xe2, 0xab, 0x0f, 0xda, 0x06, 0x8d, 0xc4, 0xe7, 0x97, 0xe9, 0xbd, 0x16, 0xfe, 0x1d, 0x31, 0xd1, 0xca, 0x03, 0xdc, 0xf2, 0x3d, 0x6b, 0xa5, 0xd8, 0x0a, 0xc8, 0x7f, 0xb9, 0x5d, 0x29, 0x8d, 0x39, 0x1c, 0x6b, 0x89, 0x3c, 0x6c ],
-const [ 0x95, 0xf2, 0xc1, 0x50, 0x9d, 0xff, 0x6d, 0x16, 0x2e, 0xdd, 0x5d, 0xe3, 0x2d, 0xed, 0x42, 0x38, 0x66, 0xdf, 0xda, 0x68, 0x2b, 0xc7, 0xb7, 0x50, 0x3e, 0x73, 0x41, 0x42, 0xf2, 0xfc, 0xfe, 0x42, 0x8c, 0x9c, 0x11, 0x75, 0xef, 0xbf, 0x01, 0xd6, 0x79, 0x5d, 0xbc, 0x2b, 0x28, 0x86, 0xdc, 0x38, 0x01, 0x3f, 0x28, 0x32, 0xb2, 0x8c, 0x5e, 0x76, 0x76, 0xce, 0x30, 0x7b, 0x39, 0x4f, 0x8c, 0x05, 0xfd, 0x1c, 0x20, 0x9c, 0x7c, 0x13, 0x1e, 0x3d, 0x0e, 0x3c, 0x3c, 0x4f, 0xce, 0x5d, 0x00, 0xd8 ],
-const [ 0x9d, 0xa0, 0xc1, 0x14, 0x68, 0x2f, 0x82, 0xc1, 0xd1, 0xe9, 0xb5, 0x44, 0x30, 0x58, 0x0b, 0x9c, 0x56, 0x94, 0x89, 0xca, 0x16, 0xb9, 0x2e, 0xe1, 0x04, 0x98, 0xd5, 0x5d, 0x7c, 0xad, 0x5d, 0xb5, 0xe6, 0x52, 0x06, 0x34, 0x39, 0x31, 0x1e, 0x04, 0xbe, 0xff, 0xde, 0x8c, 0x17, 0x68, 0x8f, 0xfc, 0x7f, 0x45, 0xf0, 0x25, 0x53, 0x15, 0xdc, 0x8f, 0xd2, 0xab, 0x28, 0xc5, 0x21, 0x24, 0xcb, 0xf4, 0x91, 0x1c, 0x41, 0xb4, 0x25, 0x22, 0x31, 0x26, 0x4f, 0x68, 0x4d, 0x3f, 0xfb, 0xbf, 0x79, 0x63 ],
-const [ 0xac, 0xc3, 0xe6, 0x77, 0x46, 0x03, 0x3c, 0x73, 0x95, 0x89, 0x92, 0xfd, 0x94, 0xf4, 0x57, 0xd6, 0xd1, 0x2c, 0x29, 0x36, 0x70, 0x50, 0xf6, 0x63, 0x72, 0xf0, 0x61, 0x81, 0x38, 0x7d, 0x67, 0xac, 0x42, 0xfd, 0x42, 0x44, 0x3d, 0x03, 0x8d, 0x88, 0x3d, 0xdf, 0xaa, 0x67, 0x47, 0x12, 0x61, 0x92, 0x12, 0x05, 0xc9, 0xd6, 0x0e, 0xfa, 0x6c, 0xa9, 0xa6, 0x42, 0xa6, 0x03, 0xc2, 0xb0, 0x4e, 0x6f, 0x91, 0x4f, 0x98, 0x61, 0x85, 0x50, 0x3a, 0xca, 0x9f, 0x46, 0xce, 0xea, 0xec, 0x96, 0x78, 0x65 ],
-const [ 0x54, 0x55, 0x14, 0xc7, 0x4c, 0x93, 0x2e, 0x3e, 0xd8, 0x56, 0xe9, 0x3d, 0x87, 0x8a, 0xd4, 0x2c, 0xed, 0xf8, 0xe0, 0x44, 0x34, 0xbd, 0x09, 0xa1, 0xd4, 0xfa, 0x38, 0x98, 0x9e, 0xce, 0x68, 0x4a, 0xff, 0x81, 0x08, 0x79, 0x83, 0x02, 0xa1, 0x9b, 0x98, 0x94, 0xb9, 0x2d, 0x95, 0xc4, 0xf7, 0x4a, 0xfa, 0x9e, 0x88, 0x7c, 0xf9, 0x20, 0xc0, 0xd2, 0x36, 0xef, 0x05, 0x33, 0xcc, 0x49, 0xe9, 0xf1, 0x90, 0x3b, 0x96, 0xa1, 0x99, 0x14, 0x6f, 0x2b, 0x00, 0x19, 0xf4, 0x1d, 0xe4, 0x7a, 0xe6, 0x45 ],
-const [ 0xe7, 0x94, 0x61, 0xf0, 0x0c, 0x4c, 0x05, 0xe2, 0xe0, 0x18, 0x08, 0xde, 0x19, 0x26, 0xf4, 0x1a, 0xa8, 0xf4, 0x5e, 0xa5, 0xeb, 0xb5, 0xba, 0xf1, 0x24, 0xf6, 0x74, 0x90, 0x2a, 0x81, 0x3c, 0x3b, 0x5e, 0x81, 0xa1, 0x18, 0xe1, 0xe8, 0xe1, 0x3d, 0x04, 0x0e, 0xff, 0x70, 0x00, 0x9a, 0x17, 0x30, 0xe8, 0xa6, 0xef, 0xfa, 0xdb, 0x1e, 0xce, 0xc5, 0x7e, 0x69, 0x91, 0xcf, 0xa9, 0x4c, 0xfb, 0x9b, 0x61, 0x0b, 0x4d, 0x3a, 0x07, 0xd1, 0x16, 0xcb, 0xce, 0x51, 0x4d, 0x3e, 0x73, 0xae, 0x9d, 0x5d ],
-const [ 0x48, 0xef, 0xf7, 0xd4, 0x89, 0xf9, 0xb2, 0x5c, 0x0c, 0x65, 0xcb, 0x3a, 0x37, 0xd4, 0xef, 0xba, 0x3a, 0x84, 0xf7, 0x9b, 0xe7, 0xcf, 0x62, 0xb5, 0xc3, 0xf4, 0x03, 0xe0, 0x5d, 0x1a, 0xf7, 0x12, 0xde, 0x92, 0xda, 0xc7, 0xe2, 0x5d, 0x3a, 0xa6, 0x86, 0xee, 0x4c, 0x61, 0xc2, 0x30, 0xde, 0xdd, 0xfa, 0xcb, 0x8d, 0x93, 0xcf, 0xa4, 0x38, 0x36, 0x3b, 0xa2, 0xb5, 0x95, 0xdd, 0xb8, 0xc2, 0xc4, 0x91, 0x20, 0x3e, 0x76, 0x44, 0xe4, 0x99, 0xae, 0x07, 0xa3, 0x89, 0x97, 0x61, 0x92, 0xfe, 0xaf ],
-const [ 0x6a, 0xd2, 0x5e, 0x9d, 0xab, 0xd1, 0x63, 0xd0, 0x92, 0xe1, 0x24, 0xfa, 0x0a, 0xd1, 0x86, 0x7f, 0xbb, 0x3e, 0x02, 0x03, 0x89, 0x07, 0x4a, 0x7c, 0x5e, 0x01, 0x30, 0x8c, 0x2a, 0xec, 0xc4, 0x0f, 0x28, 0xa6, 0xbd, 0xf0, 0x62, 0x9f, 0x1b, 0x40, 0x77, 0x8d, 0x0a, 0x89, 0x9c, 0x61, 0x08, 0x5f, 0xe1, 0x79, 0x4a, 0x39, 0xb6, 0x17, 0x5c, 0x7f, 0xad, 0x12, 0x09, 0xe4, 0x81, 0xcb, 0x7a, 0xf6, 0x58, 0x63, 0xa2, 0xf3, 0x45, 0x2b, 0xd9, 0xdf, 0x11, 0x5c, 0xc6, 0xd3, 0x3b, 0x09, 0x83, 0x98 ],
-const [ 0x58, 0x81, 0x2c, 0xe4, 0x01, 0x8d, 0x2c, 0xb6, 0x55, 0x71, 0x27, 0x14, 0x92, 0xfe, 0xf8, 0x7c, 0x06, 0xd7, 0x03, 0xd4, 0xd5, 0x28, 0x19, 0xb8, 0xf7, 0x95, 0x9c, 0x13, 0x80, 0x71, 0xe3, 0xec, 0x24, 0x31, 0xdf, 0x83, 0xfa, 0x20, 0xff, 0x9d, 0x80, 0x54, 0x52, 0x1c, 0xe0, 0xe0, 0xec, 0xd2, 0x71, 0x4b, 0x8a, 0x97, 0x81, 0x41, 0x79, 0x99, 0x52, 0x89, 0xb3, 0xf4, 0x62, 0x37, 0x4c, 0x83, 0xef, 0x23, 0x0c, 0xf5, 0xbb, 0x99, 0x5e, 0x23, 0x0d, 0x52, 0x68, 0xa0, 0xf8, 0xa3, 0x7c, 0x92 ],
-const [ 0x20, 0xc0, 0xdb, 0x0a, 0xab, 0x2f, 0x9b, 0xe2, 0x1d, 0x2b, 0xf0, 0x42, 0x1a, 0x16, 0xc6, 0x39, 0x0a, 0x0b, 0xdd, 0x57, 0xc9, 0xc1, 0x1c, 0xb4, 0xa0, 0xb2, 0x29, 0x33, 0x75, 0x7c, 0x36, 0x08, 0x3e, 0x87, 0x1e, 0x78, 0xbc, 0xe8, 0xb0, 0xe0, 0x65, 0x85, 0x4a, 0xf9, 0xa2, 0x7a, 0xab, 0x5a, 0x3a, 0xbc, 0x02, 0x3f, 0x0e, 0xfc, 0x4a, 0x88, 0x08, 0xcf, 0xda, 0x05, 0x4e, 0x0b, 0x38, 0xf0, 0xbb, 0x74, 0x2f, 0xbb, 0x8f, 0x98, 0x21, 0x0d, 0x65, 0xf7, 0x9e, 0x07, 0x66, 0x67, 0x34, 0xcb ],
-const [ 0x28, 0x2d, 0x22, 0x2b, 0x84, 0x8c, 0xe9, 0x63, 0x72, 0x40, 0x99, 0x31, 0xab, 0xe8, 0xe1, 0xdb, 0x70, 0x99, 0x14, 0xb2, 0xd6, 0xdd, 0x21, 0x3d, 0x62, 0xfb, 0xc5, 0x93, 0xd5, 0x79, 0xff, 0x09, 0x49, 0xe0, 0xc5, 0x0d, 0x7d, 0xbf, 0xf5, 0x52, 0x6e, 0xf2, 0x8e, 0x2e, 0x27, 0x24, 0x20, 0x40, 0xd9, 0x93, 0x81, 0x55, 0x2e, 0x13, 0xc2, 0x8c, 0xdb, 0x56, 0x61, 0xb9, 0x75, 0x6a, 0xc0, 0x08, 0x85, 0x83, 0xd6, 0xe3, 0xde, 0xfb, 0x25, 0x15, 0x2e, 0x97, 0xec, 0x2f, 0xd4, 0x0c, 0x9d, 0x2a ],
-const [ 0x82, 0xa1, 0x90, 0x90, 0x19, 0x0e, 0xf5, 0x9e, 0x77, 0xa2, 0x6c, 0xde, 0x0e, 0x17, 0x99, 0xec, 0x5b, 0x0a, 0x79, 0x6b, 0xc6, 0x4e, 0x5a, 0xf8, 0xca, 0x86, 0x2b, 0x5d, 0x55, 0xf3, 0xf6, 0x07, 0x72, 0x8a, 0xab, 0xbb, 0x25, 0x4a, 0x1f, 0x84, 0x96, 0xcc, 0x54, 0xf0, 0x72, 0x1c, 0xfb, 0x7b, 0x8f, 0xc7, 0x37, 0x4c, 0xcf, 0x35, 0xa4, 0x1f, 0x46, 0x39, 0x98, 0x83, 0x9f, 0xe7, 0xa9, 0x45, 0xbb, 0xa6, 0x6f, 0x2c, 0x9c, 0x86, 0x8b, 0xe6, 0x82, 0xd3, 0xe7, 0x43, 0x53, 0xea, 0x40, 0xa1 ],
-const [ 0x76, 0x28, 0x0c, 0x24, 0x84, 0x9f, 0x0c, 0x38, 0x4d, 0x6e, 0x5b, 0x51, 0x2a, 0x9f, 0xb1, 0xdd, 0x21, 0x31, 0xda, 0x03, 0x07, 0xb2, 0xff, 0xdc, 0xe7, 0x10, 0x27, 0xe0, 0xa8, 0xac, 0xfd, 0x9e, 0xe9, 0xb0, 0xd4, 0xb1, 0x30, 0xa3, 0xe8, 0xef, 0x44, 0x3a, 0xe7, 0xe3, 0xd7, 0x71, 0xb0, 0x7e, 0x68, 0xdb, 0x5a, 0x09, 0x68, 0x36, 0x78, 0x5e, 0x9c, 0x43, 0x9b, 0x58, 0xc2, 0xd5, 0x19, 0x88, 0x77, 0x27, 0x0d, 0x29, 0x58, 0x72, 0x9f, 0x56, 0x68, 0xbf, 0x86, 0x7b, 0xb2, 0xfa, 0xcb, 0x0a ],
-const [ 0x72, 0xce, 0x9c, 0xfd, 0x27, 0xb7, 0x14, 0x41, 0x9b, 0xde, 0x4d, 0xcd, 0x9b, 0x37, 0x7d, 0xc8, 0x40, 0xbd, 0xc3, 0xad, 0xaf, 0x5a, 0x73, 0x4c, 0x03, 0x07, 0xaf, 0x12, 0x88, 0x34, 0x37, 0x8b, 0x2a, 0x6a, 0x81, 0x25, 0x2d, 0x2f, 0x0d, 0x37, 0x1e, 0x2a, 0xf3, 0x41, 0x09, 0x87, 0xbe, 0x76, 0xec, 0x9d, 0x7c, 0x77, 0x6c, 0xce, 0x16, 0x62, 0xc7, 0xaf, 0xde, 0x0b, 0x0a, 0x69, 0x67, 0x89, 0x84, 0x60, 0x99, 0xf5, 0x7a, 0x12, 0x04, 0x6e, 0x1c, 0x41, 0x75, 0x60, 0xb8, 0x54, 0xc7, 0x06 ],
-const [ 0x34, 0x99, 0x1e, 0x9f, 0x5b, 0x19, 0xfc, 0x2b, 0x84, 0x7a, 0x87, 0xbe, 0x72, 0xff, 0x49, 0xc9, 0x9e, 0xcf, 0x19, 0xd8, 0x37, 0xee, 0x3e, 0x23, 0x68, 0x6c, 0xd7, 0x60, 0xd9, 0xdd, 0x7a, 0xdc, 0x78, 0x09, 0x1b, 0xca, 0x79, 0xe4, 0x2f, 0xdb, 0x9b, 0xc0, 0x12, 0x0f, 0xae, 0xc1, 0xa6, 0xca, 0x52, 0x91, 0x3e, 0x2a, 0x01, 0x56, 0xba, 0x98, 0x50, 0xe1, 0xf3, 0x9d, 0x71, 0x28, 0x59, 0xf7, 0xfd, 0xf7, 0xda, 0xed, 0xf0, 0xe2, 0x06, 0xdf, 0xf6, 0x7e, 0x71, 0x21, 0xe5, 0xd1, 0x59, 0x0a ],
-const [ 0x4d, 0xdd, 0x00, 0xd0, 0xab, 0x6a, 0xab, 0x21, 0x00, 0xce, 0x97, 0x54, 0xc3, 0xb3, 0x98, 0x7c, 0x06, 0xf7, 0xe5, 0x86, 0x56, 0x01, 0x1d, 0x26, 0xe3, 0x51, 0x87, 0x11, 0xe1, 0x5b, 0x9e, 0x6d, 0x2d, 0x96, 0xcd, 0x85, 0x34, 0xd0, 0x77, 0xc2, 0x11, 0xc4, 0x3a, 0xd7, 0xf5, 0xee, 0x75, 0x3b, 0xcc, 0x9e, 0x07, 0xdc, 0x1d, 0x4c, 0x5a, 0x12, 0x32, 0x2b, 0xa1, 0xd1, 0x7a, 0x00, 0x5d, 0x24, 0x2b, 0x35, 0x26, 0xd6, 0x2b, 0x29, 0xa8, 0x72, 0x31, 0xcb, 0xec, 0x6f, 0x28, 0x67, 0xd9, 0xa4 ],
-const [ 0x7a, 0x31, 0x55, 0x3b, 0x05, 0xe9, 0x6a, 0x8d, 0xa0, 0xa4, 0xd5, 0xb8, 0x1a, 0x85, 0x7d, 0x19, 0x2a, 0xfb, 0x6a, 0xab, 0xb1, 0xf1, 0x27, 0xd7, 0x40, 0x45, 0x6a, 0x8e, 0xda, 0x7c, 0xf6, 0x96, 0xfb, 0xb4, 0xc1, 0x21, 0xd8, 0xd9, 0x52, 0xa4, 0xe9, 0x1c, 0x6e, 0xe6, 0xa5, 0xa1, 0xf3, 0x58, 0x8d, 0x78, 0x04, 0xa4, 0x6b, 0xcf, 0x66, 0x88, 0xdc, 0x66, 0x2a, 0xe5, 0x0c, 0x43, 0x8d, 0x13, 0xc1, 0xa6, 0x1c, 0x78, 0x9b, 0x3f, 0x1c, 0x59, 0x9a, 0x9f, 0x28, 0xef, 0xe0, 0xed, 0x1c, 0xbe ],
-const [ 0x64, 0x45, 0xf6, 0xd8, 0x84, 0xfb, 0xd5, 0x7a, 0x1e, 0xec, 0x07, 0x16, 0xf8, 0x93, 0xaa, 0x9f, 0x47, 0x28, 0xaa, 0xa0, 0x7d, 0x20, 0x38, 0xda, 0x62, 0xf3, 0x78, 0x2e, 0x66, 0x21, 0x7a, 0xbe, 0x35, 0x77, 0x6c, 0x50, 0x8d, 0x8e, 0x0e, 0xf3, 0x4c, 0x96, 0x66, 0xe4, 0xce, 0x51, 0xb4, 0xb2, 0x75, 0x62, 0xa8, 0xa1, 0x89, 0xc8, 0xd3, 0x4c, 0x43, 0xa6, 0x5c, 0x8f, 0x24, 0x45, 0xf4, 0xa4, 0x8b, 0x5b, 0x0b, 0x8c, 0x87, 0x8e, 0x44, 0xb1, 0xea, 0x34, 0x27, 0xc9, 0x9f, 0x5d, 0x17, 0xfd ],
-const [ 0x29, 0x67, 0xfa, 0x4c, 0x62, 0x6d, 0x18, 0xa7, 0x7a, 0xee, 0x78, 0x1a, 0xa5, 0x20, 0x0c, 0x22, 0x7f, 0xfe, 0x70, 0x3c, 0xa0, 0x90, 0x1e, 0x4a, 0x70, 0x6c, 0xe1, 0x39, 0x3c, 0x7d, 0x8c, 0xe1, 0x8a, 0x03, 0xeb, 0x2c, 0xaa, 0xdb, 0xfa, 0x7b, 0x8e, 0x01, 0x55, 0x45, 0xdc, 0x53, 0xf0, 0x01, 0x40, 0x97, 0x08, 0x47, 0x07, 0xc0, 0x59, 0x32, 0xea, 0x6d, 0x92, 0x08, 0x27, 0xb3, 0x06, 0x1d, 0xd7, 0x1c, 0xa4, 0xf4, 0x7b, 0xef, 0x29, 0xa8, 0xd8, 0xb2, 0x94, 0x8a, 0x05, 0xee, 0xda, 0x0c ],
-const [ 0x58, 0xfc, 0xc3, 0x89, 0x59, 0x30, 0xc2, 0xfc, 0xf0, 0xd7, 0xc9, 0x34, 0xa4, 0xec, 0x36, 0x25, 0x63, 0x35, 0x09, 0xe3, 0xc7, 0x76, 0x46, 0x6f, 0x98, 0xe4, 0x9b, 0xd0, 0x91, 0xdc, 0x43, 0x66, 0x67, 0xd5, 0x2a, 0x7c, 0x07, 0x94, 0x52, 0x1c, 0x1f, 0x9f, 0x75, 0x27, 0xe1, 0xf3, 0xec, 0xa5, 0x04, 0xf9, 0xcf, 0x59, 0x0b, 0xb7, 0x5e, 0x98, 0xc9, 0x43, 0x9f, 0x5c, 0x25, 0x7e, 0x49, 0x95, 0x1b, 0xfe, 0xe1, 0xbf, 0x03, 0x4c, 0x23, 0xb9, 0x16, 0x50, 0xa3, 0xd5, 0x2e, 0x09, 0xb4, 0x2c ],
-const [ 0xf6, 0xfb, 0x32, 0x2a, 0x18, 0xba, 0xc3, 0x4c, 0x75, 0x99, 0x80, 0x40, 0x51, 0x1c, 0xf0, 0x48, 0x77, 0x34, 0x4e, 0x7d, 0x2b, 0x63, 0x24, 0x13, 0x5f, 0x20, 0x1c, 0xde, 0x2a, 0x7d, 0x12, 0x15, 0x75, 0x07, 0x6d, 0x57, 0xf8, 0xee, 0xb0, 0xeb, 0x65, 0x66, 0x4c, 0x4c, 0xe2, 0x4c, 0xb9, 0xe5, 0xbd, 0x0d, 0xc4, 0x19, 0x5b, 0xc4, 0x2b, 0x86, 0x72, 0xa2, 0x67, 0x8b, 0x78, 0x93, 0xc9, 0x07, 0x5c, 0x1e, 0xc8, 0x64, 0x73, 0x8d, 0x9a, 0xd5, 0xb5, 0x4f, 0x01, 0xdb, 0x29, 0x9a, 0x68, 0x0e ],
-const [ 0xe0, 0x3e, 0x23, 0xe5, 0x02, 0x70, 0x04, 0x21, 0xf0, 0x01, 0x84, 0x49, 0xc0, 0xfc, 0x91, 0x64, 0xea, 0x48, 0x8c, 0x1d, 0x00, 0x84, 0x9f, 0xc6, 0x99, 0x36, 0x51, 0x9e, 0x8f, 0x25, 0x57, 0x4f, 0x6a, 0x03, 0xad, 0xbb, 0x1b, 0x4f, 0xe6, 0xf8, 0xee, 0x7a, 0xc1, 0x99, 0xba, 0x49, 0xfc, 0x30, 0x5a, 0x7a, 0x6d, 0x11, 0x61, 0xaa, 0x4e, 0x58, 0x0a, 0x76, 0xd9, 0x2d, 0x6e, 0xe1, 0x15, 0x46, 0xfa, 0xf5, 0xef, 0xae, 0x1f, 0xae, 0x8c, 0xc5, 0x4b, 0x13, 0xde, 0x89, 0x19, 0xa6, 0x75, 0x13 ],
-const [ 0x9e, 0x8c, 0x66, 0x5b, 0xa5, 0x38, 0x54, 0xf0, 0xfd, 0x27, 0xec, 0x45, 0xec, 0xcf, 0xd0, 0x3d, 0x58, 0xd1, 0x36, 0x0a, 0x3a, 0x94, 0xf5, 0xf2, 0x4f, 0x2d, 0xdf, 0x52, 0x11, 0x83, 0x52, 0xe3, 0xe5, 0xb0, 0x0a, 0x3c, 0x96, 0xaa, 0x39, 0x98, 0x02, 0x22, 0xda, 0xda, 0x13, 0xac, 0x42, 0xce, 0xf1, 0x21, 0xf8, 0xb2, 0x76, 0x41, 0xc6, 0xf5, 0xe3, 0x9d, 0x10, 0x3e, 0xd1, 0xb5, 0x65, 0xb0, 0x6a, 0x5d, 0x54, 0x6d, 0xd8, 0x65, 0x81, 0x58, 0xfe, 0x78, 0xf8, 0x20, 0x66, 0x45, 0xc0, 0x7a ],
-const [ 0x05, 0xb0, 0x36, 0x3f, 0xc5, 0x00, 0xdc, 0xcb, 0xe7, 0x8c, 0xa1, 0x8a, 0xc7, 0xd3, 0x52, 0x1d, 0x53, 0x9d, 0xee, 0x9e, 0x10, 0xe9, 0xc4, 0x32, 0x5e, 0x27, 0xd5, 0xdd, 0xfc, 0xa7, 0x7f, 0x9b, 0xce, 0x52, 0x5d, 0xac, 0xde, 0x98, 0x69, 0x2f, 0xa2, 0xa9, 0x63, 0xf2, 0x7d, 0xe8, 0x77, 0x89, 0x87, 0x9c, 0x1a, 0x9d, 0x91, 0xe9, 0x35, 0x87, 0x64, 0x00, 0x85, 0x1d, 0x4a, 0x92, 0x41, 0xcc, 0xd0, 0x8a, 0xfe, 0xe8, 0xc9, 0xfb, 0xd1, 0x3f, 0x96, 0x57, 0xb3, 0xf4, 0xa5, 0xe3, 0x29, 0x8b ],
-const [ 0x5e, 0xfb, 0x39, 0xea, 0x8b, 0xbf, 0x4b, 0xdc, 0x7b, 0xd9, 0x85, 0xda, 0xba, 0xb0, 0x7d, 0xb4, 0x27, 0xbc, 0xa4, 0xa8, 0x55, 0x50, 0xc8, 0xd8, 0x32, 0xb7, 0xdd, 0xfb, 0xe6, 0x83, 0xfc, 0x52, 0xfe, 0x22, 0xac, 0xdd, 0xca, 0xb2, 0x61, 0xd0, 0x03, 0x16, 0x42, 0x41, 0xb1, 0x4a, 0x2f, 0x23, 0x4c, 0xf3, 0x03, 0x77, 0x22, 0x3b, 0x16, 0xc1, 0xf8, 0xdb, 0x07, 0xb9, 0xf4, 0x79, 0xb8, 0x44, 0xbb, 0x35, 0x99, 0xa2, 0xd6, 0x7f, 0x2a, 0xe9, 0x5a, 0x2b, 0xbb, 0xb2, 0xc8, 0xc7, 0x76, 0x12 ],
-const [ 0x37, 0x24, 0xe4, 0xbe, 0xd1, 0xe7, 0x29, 0x85, 0xfd, 0x1f, 0x87, 0x93, 0x94, 0x54, 0x3a, 0xc9, 0x44, 0x8c, 0xfb, 0x8b, 0x33, 0x63, 0xc7, 0x71, 0xe5, 0x5e, 0xe1, 0x3f, 0x60, 0x7d, 0x1a, 0x18, 0x8e, 0x0f, 0x50, 0xee, 0xe2, 0xca, 0x35, 0x3d, 0x3e, 0x1b, 0x51, 0xf9, 0x15, 0xbb, 0x4b, 0xc5, 0xcd, 0x83, 0x64, 0x65, 0x67, 0x81, 0x44, 0x76, 0x61, 0x4b, 0xf9, 0x5c, 0xdb, 0x93, 0x3d, 0x7d, 0xfa, 0xfc, 0xf7, 0xad, 0x8a, 0x2c, 0x05, 0xe8, 0xe7, 0x23, 0x39, 0x47, 0x1d, 0xcb, 0xa1, 0x2d ],
-const [ 0x47, 0x18, 0xad, 0x42, 0x34, 0x39, 0xcc, 0x9d, 0x3b, 0x1f, 0x69, 0x17, 0x18, 0xe3, 0x4a, 0x30, 0xdf, 0x9b, 0x3c, 0x4d, 0xee, 0x7e, 0xa9, 0x01, 0x1f, 0x49, 0x6d, 0x8a, 0x42, 0xe1, 0xe6, 0x9f, 0xca, 0x39, 0x4a, 0x69, 0xc6, 0x76, 0x3e, 0xcf, 0x13, 0x51, 0xa4, 0xf6, 0xd0, 0xbd, 0xb4, 0x08, 0x13, 0xca, 0x4e, 0x35, 0xda, 0xca, 0x8e, 0xf8, 0x45, 0xb2, 0xa2, 0x9c, 0x02, 0xc3, 0xd8, 0xfe, 0x08, 0x69, 0xfb, 0x94, 0x88, 0x63, 0xe0, 0xae, 0x20, 0x24, 0x3c, 0xfc, 0x53, 0x79, 0xb8, 0x51 ],
-const [ 0x7f, 0xc4, 0xaa, 0x49, 0x2a, 0x3d, 0x12, 0xda, 0x5d, 0x2d, 0xe0, 0xcf, 0x9a, 0x61, 0xc0, 0xfb, 0xf9, 0xe4, 0xa2, 0x57, 0x19, 0x20, 0x55, 0x4a, 0x5c, 0x45, 0x58, 0x27, 0x54, 0xef, 0xed, 0xf8, 0x78, 0x03, 0x6e, 0x7a, 0x1c, 0xd9, 0xe4, 0x68, 0xa0, 0xa1, 0xd6, 0xfc, 0xe7, 0xff, 0x5f, 0xb4, 0x0a, 0xf9, 0x83, 0x52, 0x4e, 0x13, 0xc3, 0x26, 0x54, 0xb8, 0xef, 0x8f, 0x90, 0xdc, 0x3c, 0xc0, 0xfc, 0xe0, 0x97, 0xc0, 0x0e, 0xb6, 0x38, 0xb4, 0xe7, 0x45, 0x79, 0x61, 0xcd, 0x0f, 0xe9, 0xed ],
-const [ 0xb6, 0xec, 0x7c, 0xe6, 0x44, 0x84, 0x28, 0xc3, 0x4f, 0xc6, 0x81, 0x9d, 0x50, 0x50, 0x7a, 0x2d, 0x74, 0xae, 0x41, 0x75, 0xfd, 0x2a, 0xc5, 0x3e, 0xe5, 0xe5, 0x76, 0xc5, 0xc5, 0x27, 0x4b, 0xb2, 0xf6, 0xf4, 0x0a, 0x49, 0xf6, 0xe0, 0xc4, 0xe4, 0x0d, 0x24, 0x9e, 0xa1, 0x30, 0xf0, 0xd8, 0x58, 0x25, 0x03, 0x07, 0xd0, 0xe8, 0x7a, 0xa5, 0x32, 0x4e, 0xe5, 0xcc, 0xbd, 0xe8, 0xa0, 0x3f, 0xbc, 0x2a, 0x61, 0xaa, 0xb5, 0xcc, 0x0d, 0x2b, 0xe4, 0x71, 0xd0, 0x10, 0xe7, 0x87, 0x6c, 0xe3, 0xbb ],
-const [ 0xce, 0xb9, 0xae, 0xdf, 0x8d, 0x6e, 0xfc, 0xf0, 0xae, 0x52, 0xbe, 0xa0, 0xfa, 0x99, 0xa9, 0xe2, 0x6a, 0xe8, 0x1b, 0xac, 0xea, 0x0c, 0xff, 0x4d, 0x5e, 0xec, 0xf2, 0x01, 0xe3, 0xbc, 0xa3, 0xc3, 0x57, 0x74, 0x80, 0x62, 0x1b, 0x81, 0x8f, 0xd7, 0x17, 0xba, 0x99, 0xd6, 0xff, 0x95, 0x8e, 0xa3, 0xd5, 0x9b, 0x25, 0x27, 0xb0, 0x19, 0xc3, 0x43, 0xbb, 0x19, 0x9e, 0x64, 0x80, 0x90, 0x22, 0x58, 0x67, 0xd9, 0x94, 0x60, 0x79, 0x62, 0xf5, 0x86, 0x6a, 0xa6, 0x29, 0x30, 0xd7, 0x5b, 0x58, 0xf6 ],
-];
-
-const hmac_sha1_macs = const [
-'1ba0e66cf72efc349207',
-'007e4504041a12f9e345',
-'c19d05a808054b8039f9',
-'539d5cbb60739e152196',
-'2ddc8c4803e5a4c7871c',
-'c1ebf896bd26a30cf668',
-'8a3e105bffc04ba113cd',
-'4104ef3c144bcfaf8dd3',
-'838ba0117e413095d056',
-'cdcff19dc81026983e6c',
-'f069430eb49866d7d39b',
-'0f4fae1d2b5960a54b82',
-'7d809c2533c47f832046',
-'0c7799c513f4a3308de3',
-'00e416c156dc85d4d47d',
-'42537b22520a085577587616',
-'ecae138322d2d4086aa2bec6',
-'2fe2bd1355a64e4661a6567a',
-'144d3a67685bf4ac70bb7fe6',
-'c3b94fdb9a6bc9b8e0b7ecb4',
-'2eca333903bf60931eb08ba7',
-'04614d9e215e11546ef411dd',
-'f5ec42b8e5e3ef658223c8a1',
-'a055bb1256afef8fac818a39',
-'449a3eaf1aaeedc860a7c522',
-'d991f360f28b18086fc552f6',
-'3f99eb6518dcdcfb45eda5e8',
-'e4183c3f9245e63ac093e070',
-'6a31ddbafa486d1a847e0b1a',
-'e2cfa49f38958405705dc320',
-'73b083d8be0d19ee7a697f9e5d76362f',
-'d72b370a1d8290105173c83aeedb8358',
-'657db872e6e9aefcc3d69110c7591057',
-'7bc8883375527df5ac60fe47357e105e',
-'805a8f3cbb5ce17139cf8bb03db6b9b4',
-'b9b6e8e09db8509ac5a6609ad5e6390b',
-'571b3401f273a16d9d6011993c78bcfc',
-'6c82c5f72dba335ff85181131dbeb990',
-'9502475fa252e5bf4318e451c7f5fe41',
-'736c3332227a1b48acce71465f5726cb',
-'66af7ccfa98bcb8d01ead88d046f1038',
-'2993b746cb98445019cb1ed31ed34070',
-'287a4765a91fe81c21c4593f985a1253',
-'a8483672c40305d7630f3e86b80fa4b0',
-'a7df6225fc8a9bc8b91e4c39eef870eb',
-'3c8162589aafaee024fc9a5ca50dd2336fe3eb28',
-'2fecb466bc920f610e3eae9949e00f454a714ab5',
-'3745829991354a1eb42277bb9aff04ab2abcaa47',
-'e7c051682dfbbdecc828606868a8fe2eb85919ba',
-'60d775c440e378a5b3df018edb08c33c063bd8a5',
-'3fdaec4c28dd5758d937efb8cd4ada0cd40a5d13',
-'c3b30827b4e2bba31b6fc0985fa597eb4896c7a2',
-'d7264b214307520629ee5e76aa4a8dda4b556b3a',
-'42ddd9b92c2a45420a770b9727bf53dcffc84d20',
-'b099c135065fb0c4c71a4fcb37a95b13cff95437',
-'d8fdc66e0c97c0738f236f3dde60af8ac6c3d29a',
-'be13212ac81902215c85a7697a2d1870ef74f9ac',
-'c87995813b3156fd712c511c328bace2d05cab41',
-'57e9692b230b55a8a206ca48838d8d1f920202b6',
-'0c662e4793938cc37f3d51d2b40548ec55914f0d',
-'402493fac26c2454d0cb',
-'b96de3a219d76614aaa4',
-'2eb0b56949f78f796b9b',
-'5cee7667d0a29278aea8',
-'476d8d8db76e87df0a3f',
-'3bddf9f7384c84b3a66d',
-'c4b0bc18c2784c858754',
-'e42a3482a658c651f55c',
-'d623d5ce7f0e22c269af',
-'6cc56c226b22110fb13d',
-'51ae4aaf0de1921b08cb',
-'a03712aad2fc0e59732d',
-'af6a6235395d057c6d2a',
-'190e04e5dfa9eab70cce',
-'2394aef32f606989812a',
-'445aa92b032c6b65b28a6541',
-'2f8e18b75cb37402d6e87355',
-'9dc9ffa7894d69c67295c994',
-'a246956f07f6af8830fcd392',
-'cbdb6ff2298283b4ddec7526',
-'d7fa45de6ac34e2d3ddeeb97',
-'7fed72bdb85fbd6fd73f9656',
-'1dd37b69db9cf4a7494697f1',
-'24a2f45f719e993e63adcf23',
-'cd4057acd7ab2b1909ade91e',
-'0695b866fc28c2a3390e8449',
-'1b0dd1dec270305c1a669ca8',
-'8e2916ef6b7bb91c15901210',
-'1930cb1a51265b09b0aaba99',
-'e1c43cb277d8c07146fbc6e1',
-'4c41bea823ee6791e83636bf752c1240',
-'17cb2e9e98b748b5ae0f7078ea5519e5',
-'9005e6ded766f31ca4277bb116c483cc',
-'9a148fc9f2372f9c07c328e832b96430',
-'85543d27b8a34ed9e222172ce308c672',
-'d9f1dbeb901ac73bab9b5d40065c21e6',
-'adbffa3c88f82e0991fe2128ba2798a6',
-'9411d3cf30e359f33328f80a07b7ba6d',
-'79fffaa6767b3bacde8078aabcfbda9b',
-'8aef0e90bd29fd1ad4d80c37e070dbf7',
-'11ddc4d89e463be1338373f0a1cb22f8',
-'7a5efb96b080064a05fd021e31f1dbc1',
-'c070e020d56f7e294f10fd586bc3e063',
-'3d866bc71d43209d97bb596fa59460c4',
-'15eec3c6d6f4e7f2b1426d01259ae8b6',
-'374c88f4480f5e8aaa9f448b777557c50065e9ac',
-'8c90480ea6414553df17e53cf96dcb166b94be35',
-'1b6a55344a48f62f8b351c69acb3a33b4c57c024',
-'7652e4b24051283af4caf67079955373f6604c9a',
-'8a536922cc905ed4c321180ebbf4f000e2a809fc',
-'9e35e4bc678997c18bfb39568e1f77cc49ad153e',
-'46d9d7c519e520029320b48451faed81f9112f44',
-'91bc355fb0221825307af876d11404b473222d5a',
-'f76d200078fb5b3d3aacc3d90efd4edc5612a777',
-'99fbfd85069f25da97f9621fff93ea599f61d0c2',
-'8da25f1b52990f59dad1405161c54eb148f002fb',
-'ed84ee8c4d99c5dbe7a253be436ac0c4e4b5e0bc',
-'7ab9416ae1d32bbbd13277aeda805d66b006461e',
-'ccf2155306cf89a73f55a0560d32337e266432af',
-'65437f28501640304b1ff95db6a6437cac37d10a',
-'e06c086d3434d79595d3',
-'2d0f6c935a06d9d48e10',
-'6cdbed1cff27b79ac20b',
-'bb7654e63c2ef4313c63',
-'df4a9f32c2b911138a7d',
-'9238de28fd468cc27d76',
-'65d6db01f95625fcb481',
-'c4953ddadc2acf38e677',
-'616a0dfee4c59643e047',
-'145ce9119643c0c9c23a',
-'0f6585d0203aedecad76',
-'fd4032c4adf2a19e69e5',
-'8e99a60f575dff478d99',
-'d52b5f1b01dc36d76d8e',
-'6ece755234adba6cd01a',
-'e685c26a4ef766a1ac244bf7',
-'3bf0f6f4ac757afb9deafdb3',
-'a8028cb31b89d1e668eb4196',
-'515a7febe556a317919eb3dc',
-'a3bc85d2694d7868120934ce',
-'03368545751957bda8ff9db3',
-'e2ac4a0e354277a62cc82573',
-'31a0920da97a3e94b151bfc8',
-'ea5be261fbfdf4e083358099',
-'96f596dc5ce8952cb2b0f914',
-'ab8810c9a05afb0169fd36df',
-'078437f1a1089c5724eebf2e',
-'a1147bb0ba909865a46b4720',
-'6eb55c6365a8957cf579ca2f',
-'9609b20113e61797397a428f',
-'f35a4323cab7ade7168c8b9f7276744e',
-'59a116a249eacaffc54498957787f8f4',
-'86d4b3a747285f26530e364b659a3c15',
-'924243335c2eebd348ea23efcb442cc3',
-'c05fea12c1594631fa9a5b7e35cc74e0',
-'34515b41c4af316223ae43e6869a38c1',
-'8bbe93e9a0e39128595251c7a0504f10',
-'b3d266e44d21fea613913002229b7994',
-'45d9e3d8155dd1d7aac1faa36827402d',
-'f5d0c72599bd5f8323a599ca7d2d54f1',
-'2c77d71152e343414dab1c83fc5f6429',
-'ddc60e14dc64399f48c2629cd9ef9551',
-'2c47a1dfc80df9195ccac2b006904088',
-'f253721edace08cccce596b231bdef4b',
-'32e3a37e8ca379cd7b604840059480d6',
-'15af23331648171499b58042dbe7b2d5df72d152',
-'5f7a57d42e3ebbcb85b08565304dab941d6234f3',
-'5921643e2713d10428843447df91f482f3922aeb',
-'3f74a3b2a77c173b8b6e20c2ededffd43103e4f6',
-'3b0ce0fd9eed9287527edb23c0ceaaee4026b570',
-'c6c30cc650546dee441ad83d2c01b0bb50319da0',
-'3e87e626a2014346f4d3b545f0c47043a657c82f',
-'46251e1b289f217c0b1f0f7dfd988aa62425efc6',
-'79cd6dd6ad3d3aaf11617b0a9303ed3645ab71b2',
-'cdae582296f2c18e05c47a2c3885b24e4976fd00',
-'d985cf29d85533af9b58113d7153732678830390',
-'790315ef7d9441b0ea3382471dd217dde2143788',
-'2258ded89a07b87e3397aa8a033f151e3c1a23a3',
-'43673696e3003a2a06ab0f4bf07870fca1b51415',
-'449121a13d619ca26cfd574204fc9643df12cc8b',
-'c73d3cf2bd6c5c9dcb91',
-'3b89bc8d9f3fbedb86a8',
-'d6d0b96cfd9fcbacd20a',
-'4fa9b60a5cde90c2c0a5',
-'b621d1fa15d9345096b2',
-'5686971a145ca79e0b63',
-'8ca1bbe34502616b975d',
-'970c9b7981a9b706806d',
-'fb8e0cd4a7656f1aa4da',
-'dc82b94bb291d36a94a6',
-'e61320faa6b1a7b6796d',
-'490d70fc32e3c5f6c17b',
-'e271addca04e8f983680',
-'e2280710a35f000d2ca5',
-'2a7d988c3a8ed31c16e5',
-'14ad915c8190567f889160f9',
-'43bf1001ad1f5c5adf0f59c2',
-'72ad19cc01c8933dc6a37cc5',
-'639410b3e778003a9d66c317',
-'ac6f7955adb9610c7a30a046',
-'abee151bbe2d515b07c63a23',
-'21b96662150e4f742128dfa3',
-'aaf4e6bc966753260f912e95',
-'6ea8c31c4035c2084be1743a',
-'07c6d34628e28c8ba39a619a',
-'ff39e0b4fd5cd0c40be32024',
-'a52411b649601f629bb75f5c',
-'2785abca097ad771fcaeed6e',
-'86d5e21fca7caf63426a9a4f',
-'0aa1a8368477289bdcd2bb2f',
-'76122c5582fea3b4f59181cb1d83a5ee',
-'87ae0952132a3b0583317997e5907ae4',
-'702a4317f0e27c16ad95ec8217917285',
-'dfc632da93cb1a878ae38c0cdf5db11a',
-'490c969829f9413c70287001488b0f18',
-'a7549bb8be315b3a8fd3e62c8d960758',
-'9d0b8ca2dfa14e8aea28a65698796da2',
-'0d5aed6fd871560f8123439d476e19bd',
-'f137933e9b264f559dfd0fc262a69c0f',
-'b4276d71392026f683012521bda55952',
-'6369914b2350ed960f0e8128c02f04c9',
-'d598d7af92d2d65d418a116484cdad9a',
-'0dfdb14b000d0420880f83192888bdea',
-'dba4d87dc72e6187afd8381a490b0d0d',
-'97f6e4631174e11964193a37a916f257',
-'62ac956ada19f04be50c23f2328a32477cd58fb9',
-'a279d055e2d73306a8187344fc32cb0b5b80cd35',
-'05598da96093f17687d9cca772ef61ea2af8ee40',
-'f174bb064880c9b111d71be221ceedd9add971ee',
-'2f5e0b070c0e268578ac6e868b364b144abf84ad',
-'4bbcf1bf06f47a720078e2a886d70c8e90ced8da',
-'2835d14142e4b662578b4c0879c1831bb7245a5c',
-'b8ffe657b108b8367502a28c0fa1d595ffa853b6',
-'7056292af9371cf9ad3e1b9c2743cbc1f52b4e16',
-'4dcd504d883e2b9d5d1e1ee15c0ff396f4d1c42b',
-'49d70fcedd5029673d8027f34a4282968237cfef',
-'e887df3367b67f8c9e7386d13d1a07a08de9ec68',
-'97284bd4e44b2e7a034a2f2795d70250ed5c84da',
-'0819f3d43c19965373a3fc72c446508c969d154e',
-'ad4892f36828b64ff5c3fc2dfd780dee39ea30d6',
-'7653dc1ca2b70f058614',
-'8db94baaaf03a51acc87',
-'670c4e2d2661928b8262',
-'e7007d2f4a194a8b8144',
-'b58e9dfdb9d88df4c71a',
-'97eb7dab4c4d89026158',
-'d56a5de69805f8a9906c',
-'583bc1ca3c68ecebd811',
-'d4225a4949faca02f3ef',
-'85a83e94fd8b941124e7',
-'9d835f06dd733eeca888',
-'be05ae222904afc2c266',
-'a5095b5f7a26ab55a37d',
-'51d76d949452cbf42262',
-'7832413077e6bc1ee994',
-'1d1d12f4ff4e0debb715b9cb',
-'b3ebb567bef1fea5d4f954bb',
-'243785864b714d4132b916a3',
-'3528e08689fac23da65b7024',
-'3f172df211dc9da262936060',
-'46a5b300d160deae52b0dc0a',
-'d012486da17a6c96d6ec6a85',
-'f5eddca9a528054bc587c7a0',
-'109f370cfa011ede8627fe4a',
-'3072ddb57d76181c164e08b8',
-'5b3a0278b3e71a3a93951b84',
-'994e9838eaa0bb1d6515c12a',
-'5a745e9ceda09b0332cb4cfe',
-'7f25062caa0a514034f793a6',
-'cf0b256cb91aeb1bf3877d4c',
-'a95cf7bb2f67983469d4fc489e3192d3',
-'0a060735b4799eeb204c5203e617a776',
-'d2f6e9f1ea2cbb0519df68fde357979c',
-'104ac1da3bc023eb3a94c45f7c42be51',
-'f72b19e31efa84db9775dcdab258b91a',
-'04d599b40b7623ca25c8ea694aec3afd',
-'7bf44b98d95c3a57d83f8e8bf82a1cb3',
-'69211fd5573b030e379f7661ae6e6d57',
-'85c9afe1502539c3140777de9b5afe35',
-'66aacb93fac3b3ab7f9a61ea907f863b',
-'5e671f68bee18089e4fb7fb8ce85e66d',
-'b1fbf176cb48f5a90db4af7a555a0c65',
-'d65dfc5a7d8477da3f29a4ea7809f265',
-'cb314cbfe1f935b03adb10e5a8b88c96',
-'548cba2de5c3944be4d48ec1a2a34d9e',
-'393238d3afdb7d970b966d374fe097ec8797a870',
-'0fdd3f836dd7e5c506ab21adde9ae5dc09cb359d',
-'090cedb3f2833a3f260b0937baae56267a6cd935',
-'ccbecd82cf4b29b535a9d57137b853076de78ddd',
-'d8013127f8491c97f1d5d275cabeb1ba3b71a2a4',
-'75cb23746c04f583b8ac78998537d98022ef2440',
-'d78807f2a69d8e348cbd2c2d745f342397e20a41',
-'9602a3a1fd2dc3c55df5815ac0517001f8c6593b',
-'b95df20e4e63936b74af4ceb7ad94d4e4b56ea8d',
-'5f009c918e2f8d7c9f9087b78af44f54518e1c5a',
-'f92f9c4b8d423b14ac7ad924f183a1cc27de6afd',
-'f476bd42bae22e645cedf601511b1ab8f2852b2c',
-'48d48ceb4c1f3e6b1e9c0fb8515f1121b846c19b',
-'9e51be58cf2d5c8e85556b8f3d484109fb49553a',
-'4ac41ab89f625c60125ed65ffa958c6b490ea670',
-];
diff --git a/pkg/crypto/test/hmac_sha256_test.dart b/pkg/crypto/test/hmac_sha256_test.dart
deleted file mode 100644
index fa31420..0000000
--- a/pkg/crypto/test/hmac_sha256_test.dart
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Library tag to allow the test to run on Dartium.
-library hmac_sha256_test;
-
-import "package:unittest/unittest.dart";
-import "package:crypto/crypto.dart";
-
-part 'hmac_sha256_test_vectors.dart';
-
-void main() {
- test('standard vectors', () {
- _testStandardVectors(hmac_sha256_inputs, hmac_sha256_keys,
- hmac_sha256_macs);
- });
-}
-
-void _testStandardVectors(inputs, keys, macs) {
- for (var i = 0; i < inputs.length; i++) {
- var hmac = new HMAC(new SHA256(), keys[i]);
- hmac.add(inputs[i]);
- var d = hmac.close();
- expect(CryptoUtils.bytesToHex(d).startsWith(macs[i]), isTrue);
- }
-}
diff --git a/pkg/crypto/test/hmac_sha256_test_vectors.dart b/pkg/crypto/test/hmac_sha256_test_vectors.dart
deleted file mode 100644
index 6cb65b1..0000000
--- a/pkg/crypto/test/hmac_sha256_test_vectors.dart
+++ /dev/null
@@ -1,692 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Standard test vectors from:
-// http://csrc.nist.gov/groups/STM/cavp/documents/mac/hmactestvectors.zip
-
-part of hmac_sha256_test;
-
-const hmac_sha256_inputs = const [
-const [ 0x75, 0x2c, 0xff, 0x52, 0xe4, 0xb9, 0x07, 0x68, 0x55, 0x8e, 0x53, 0x69, 0xe7, 0x5d, 0x97, 0xc6, 0x96, 0x43, 0x50, 0x9a, 0x5e, 0x59, 0x04, 0xe0, 0xa3, 0x86, 0xcb, 0xe4, 0xd0, 0x97, 0x0e, 0xf7, 0x3f, 0x91, 0x8f, 0x67, 0x59, 0x45, 0xa9, 0xae, 0xfe, 0x26, 0xda, 0xea, 0x27, 0x58, 0x7e, 0x8d, 0xc9, 0x09, 0xdd, 0x56, 0xfd, 0x04, 0x68, 0x80, 0x5f, 0x83, 0x40, 0x39, 0xb3, 0x45, 0xf8, 0x55, 0xcf, 0xe1, 0x9c, 0x44, 0xb5, 0x5a, 0xf2, 0x41, 0xff, 0xf3, 0xff, 0xcd, 0x80, 0x45, 0xcd, 0x5c, 0x28, 0x8e, 0x6c, 0x4e, 0x28, 0x4c, 0x37, 0x20, 0x57, 0x0b, 0x58, 0xe4, 0xd4, 0x7b, 0x8f, 0xee, 0xed, 0xc5, 0x2f, 0xd1, 0x40, 0x1f, 0x69, 0x8a, 0x20, 0x9f, 0xcc, 0xfa, 0x3b, 0x4c, 0x0d, 0x9a, 0x79, 0x7b, 0x04, 0x6a, 0x27, 0x59, 0xf8, 0x2a, 0x54, 0xc4, 0x1c, 0xcd, 0x7b, 0x5f, 0x59, 0x2b ],
-const [ 0xe0, 0xef, 0xf0, 0x0f, 0x3c, 0x46, 0xe9, 0x6c, 0x8d, 0x5b, 0xd1, 0x81, 0x28, 0x3e, 0x46, 0x05, 0x34, 0x8e, 0x3f, 0xa1, 0x0b, 0x47, 0x94, 0x5d, 0xe3, 0xdc, 0xc1, 0x59, 0xae, 0x86, 0xe7, 0xbd, 0x3f, 0xdb, 0x13, 0xf2, 0xad, 0xa2, 0xc3, 0x13, 0xfc, 0xe6, 0xa6, 0x9e, 0xfa, 0x49, 0xa4, 0x70, 0x68, 0x9b, 0x1e, 0xf0, 0x5a, 0xab, 0x77, 0x8a, 0xe1, 0x5d, 0xd3, 0x5f, 0xe6, 0xfd, 0x1e, 0x3a, 0x59, 0xd3, 0x51, 0xc6, 0x8c, 0xf8, 0xf0, 0xff, 0xd9, 0x68, 0xd7, 0xe7, 0x8b, 0x57, 0x37, 0x7a, 0xfc, 0xc9, 0xdc, 0xe3, 0xfa, 0x5d, 0xb1, 0xf0, 0x6f, 0x69, 0x85, 0xc4, 0x41, 0x4c, 0x0f, 0xcc, 0x78, 0x00, 0x30, 0xf4, 0x9f, 0xef, 0x79, 0x1a, 0x6c, 0x08, 0xed, 0xc2, 0xa3, 0x11, 0x08, 0x0c, 0x37, 0x3f, 0x00, 0xe4, 0xb2, 0x04, 0x4a, 0x79, 0xd8, 0x28, 0x60, 0xf0, 0x87, 0x1b, 0xc2, 0x59 ],
-const [ 0xbf, 0xd1, 0x66, 0x79, 0x3a, 0xbd, 0xcf, 0xfb, 0xbd, 0x56, 0xdf, 0x76, 0x91, 0x50, 0xd1, 0x46, 0x6c, 0x18, 0xa6, 0x7a, 0xf4, 0x52, 0xc7, 0xe6, 0x7f, 0x86, 0xed, 0x74, 0x1d, 0x16, 0x3e, 0xbb, 0xd8, 0x74, 0xb9, 0xd3, 0x3a, 0x91, 0xd3, 0x67, 0x10, 0x99, 0x62, 0x0b, 0x6e, 0xdd, 0xbb, 0xd0, 0xf3, 0x11, 0x17, 0x16, 0x4e, 0xb7, 0x3c, 0xa2, 0x01, 0xdb, 0x59, 0xf1, 0x65, 0x01, 0x31, 0xcb, 0xef, 0x5c, 0x7b, 0x1b, 0xb1, 0x40, 0x89, 0xfd, 0x24, 0xda, 0x29, 0x19, 0x24, 0x1f, 0xc9, 0x30, 0x3c, 0x02, 0xde, 0xf4, 0x24, 0xea, 0x86, 0x1d, 0x88, 0x63, 0x6b, 0xb9, 0x0b, 0x13, 0xeb, 0xc3, 0x8c, 0xf1, 0x77, 0xf8, 0xa8, 0xb1, 0x39, 0xe6, 0x80, 0x82, 0xfa, 0x46, 0xbc, 0xfc, 0x42, 0x8b, 0xd0, 0x54, 0xc1, 0xbb, 0x7d, 0xd3, 0xed, 0x7e, 0x9b, 0x86, 0xed, 0x75, 0x17, 0x36, 0xb6, 0xcc ],
-const [ 0xf6, 0x98, 0x9e, 0xbb, 0x07, 0xaa, 0xda, 0xee, 0xf9, 0x70, 0xf0, 0xb5, 0xce, 0xb8, 0x06, 0xec, 0xff, 0xe7, 0x7c, 0xc2, 0x0f, 0x3c, 0x22, 0x1a, 0x66, 0x59, 0xa9, 0x31, 0x5d, 0xff, 0x58, 0x81, 0x96, 0x19, 0x00, 0xe6, 0x8e, 0xfc, 0x32, 0x00, 0x75, 0xed, 0xaf, 0xd8, 0x3d, 0xe3, 0x20, 0xc6, 0xf1, 0x8f, 0x08, 0x92, 0x48, 0x9a, 0xf6, 0xd9, 0x7a, 0x2e, 0xff, 0xb2, 0x52, 0xb7, 0x6b, 0x92, 0x84, 0xeb, 0xaf, 0x6d, 0x42, 0x08, 0x9c, 0x1e, 0x0a, 0x5c, 0xd5, 0x09, 0xc2, 0x0b, 0x86, 0xff, 0x06, 0x0d, 0x53, 0x62, 0xc1, 0x76, 0x8f, 0x89, 0xfa, 0xfa, 0xaf, 0x65, 0xf1, 0xb0, 0xfe, 0x65, 0x6b, 0x16, 0x92, 0x98, 0x4a, 0x56, 0x7e, 0x12, 0x60, 0xc7, 0x49, 0x90, 0x85, 0xb7, 0x9f, 0x5f, 0xe7, 0x68, 0x47, 0x79, 0xa2, 0x58, 0x55, 0xf2, 0x91, 0xc5, 0xa1, 0x92, 0x63, 0x71, 0x77, 0xc4 ],
-const [ 0x71, 0x29, 0x9c, 0xa3, 0xda, 0xff, 0x23, 0x31, 0x08, 0x2d, 0xb3, 0x70, 0xbd, 0xf8, 0xce, 0xec, 0x22, 0x7b, 0x71, 0xbd, 0xc4, 0x9c, 0x3b, 0x14, 0xdc, 0x3f, 0xd2, 0x13, 0xd3, 0xba, 0x83, 0xe2, 0x05, 0x88, 0x28, 0xff, 0xc6, 0x41, 0x4f, 0xd5, 0xa2, 0xc9, 0x98, 0x91, 0xe9, 0xc8, 0x5f, 0x31, 0x6c, 0x5b, 0x9b, 0xdd, 0x81, 0x0a, 0x06, 0x7b, 0x4d, 0xf9, 0x7f, 0x7e, 0x42, 0x62, 0xac, 0xfe, 0xe6, 0x42, 0xe3, 0x0e, 0xd6, 0x53, 0x4b, 0x4a, 0x0b, 0x3b, 0x3e, 0xaf, 0x5d, 0x03, 0xf2, 0xb0, 0x45, 0xca, 0x59, 0x85, 0xe7, 0xbb, 0x45, 0xc7, 0x50, 0x3c, 0xd0, 0x3a, 0xfc, 0x68, 0xfb, 0xea, 0x9b, 0xc0, 0x95, 0x79, 0x14, 0x1d, 0x5f, 0xb7, 0xcb, 0xea, 0x6d, 0x73, 0x20, 0x8f, 0xcf, 0x91, 0x38, 0x30, 0x71, 0x5d, 0xff, 0x98, 0x40, 0x1f, 0x6d, 0x70, 0x8e, 0xf0, 0x09, 0xb5, 0xb8, 0xcb ],
-const [ 0x8b, 0x4a, 0xa2, 0x0d, 0xe6, 0xc1, 0xf0, 0x51, 0xd1, 0x1a, 0xd5, 0x0b, 0xa2, 0xe4, 0xfc, 0x4f, 0xf1, 0xec, 0x47, 0x84, 0x55, 0xf9, 0xb5, 0xb9, 0x6f, 0xb9, 0x89, 0x3d, 0x2a, 0xfc, 0xa9, 0x69, 0x40, 0x20, 0x44, 0xc1, 0x01, 0xcc, 0xb7, 0x3c, 0x50, 0xe2, 0xb2, 0xdf, 0xee, 0xae, 0x96, 0x90, 0xfb, 0x64, 0x22, 0x2a, 0xb9, 0xc9, 0x4f, 0xcd, 0x94, 0x30, 0x78, 0x78, 0x5f, 0xa8, 0xbe, 0xd9, 0xe1, 0x74, 0xab, 0x63, 0x90, 0xbb, 0x16, 0xa2, 0x9c, 0x81, 0x46, 0xcb, 0x2f, 0xd6, 0x5a, 0x98, 0xf4, 0x4d, 0xe7, 0x52, 0xd6, 0xb0, 0xe4, 0x2f, 0x0a, 0xf2, 0xc3, 0xdf, 0x4f, 0x65, 0xe1, 0x62, 0x74, 0x2d, 0x20, 0x1c, 0x1b, 0xf5, 0xd2, 0x2b, 0xbe, 0xe1, 0xda, 0xf8, 0xef, 0xc3, 0x0d, 0x0c, 0xe4, 0x91, 0xdf, 0x26, 0x32, 0x17, 0x3b, 0x8a, 0xd9, 0xe9, 0xb2, 0x9b, 0x81, 0x9c, 0xd8, 0xac ],
-const [ 0x32, 0x74, 0xa0, 0x32, 0x66, 0x82, 0xba, 0x59, 0xd6, 0xc4, 0x7d, 0xb4, 0x16, 0x4e, 0x3e, 0x99, 0x37, 0xbf, 0xad, 0x41, 0x99, 0xc6, 0x50, 0x71, 0x01, 0xe5, 0x30, 0x5a, 0xeb, 0x75, 0xd2, 0xbf, 0x22, 0xeb, 0x68, 0x55, 0x8d, 0x59, 0x49, 0x6f, 0x4c, 0x38, 0x9f, 0xda, 0x04, 0x64, 0x5f, 0x06, 0x76, 0x68, 0x7f, 0x67, 0x57, 0xfc, 0x63, 0x1b, 0x5b, 0xcc, 0x98, 0xcd, 0x94, 0x7b, 0xc4, 0xd9, 0xfa, 0xe8, 0xdd, 0xb1, 0x4b, 0xb0, 0x9a, 0x7f, 0x15, 0xf4, 0x27, 0x0c, 0x10, 0x5c, 0x1d, 0xe0, 0xb2, 0x5b, 0xb1, 0xab, 0xfe, 0xb5, 0x2c, 0xe3, 0x9d, 0x3f, 0x9b, 0xaf, 0x2f, 0xe6, 0xc7, 0x04, 0xe3, 0xf3, 0x67, 0x0d, 0x45, 0x8e, 0x95, 0xd1, 0x58, 0x80, 0x7f, 0x10, 0xe5, 0x3d, 0x5f, 0x6d, 0x12, 0x21, 0xad, 0xd3, 0x36, 0xfa, 0x92, 0x11, 0xec, 0xc7, 0xa1, 0xc7, 0x67, 0xbf, 0xc2, 0x86 ],
-const [ 0x04, 0x86, 0xd2, 0x64, 0x7e, 0x2c, 0xdf, 0x7b, 0xba, 0x36, 0xc8, 0xf3, 0xff, 0x9e, 0x29, 0x41, 0x00, 0x1c, 0x70, 0x6e, 0xb1, 0xa4, 0x4c, 0xbd, 0x58, 0x2f, 0x63, 0x8e, 0xe7, 0xbe, 0x44, 0x82, 0x89, 0x9c, 0x9c, 0xe0, 0x7b, 0xe4, 0xac, 0x38, 0x1d, 0x44, 0xfa, 0x46, 0x49, 0x00, 0x47, 0x18, 0xe3, 0x3a, 0xc2, 0x73, 0xb1, 0x70, 0x7b, 0x74, 0x6d, 0x46, 0x1a, 0x73, 0x19, 0x86, 0xd1, 0x2c, 0x93, 0x65, 0x8f, 0x21, 0x69, 0x08, 0x77, 0x3a, 0xee, 0x46, 0x90, 0xaf, 0x8e, 0xb0, 0xbe, 0x27, 0x5e, 0xce, 0xf1, 0x22, 0xf7, 0xac, 0x9c, 0x94, 0x85, 0x95, 0x69, 0xd2, 0x1b, 0x1f, 0x2b, 0xb2, 0x4a, 0x68, 0x13, 0xee, 0xf1, 0x9e, 0x28, 0xca, 0x56, 0xc5, 0xf1, 0xf7, 0x76, 0xb4, 0x74, 0xb6, 0x9a, 0x61, 0x65, 0x41, 0x2b, 0x5f, 0x97, 0x66, 0xc7, 0xa5, 0xb6, 0x75, 0x94, 0x91, 0x38, 0x5c ],
-const [ 0xfd, 0x5c, 0xf7, 0x2e, 0xe0, 0x77, 0x9a, 0xab, 0x7d, 0xaa, 0x27, 0xd5, 0xc8, 0xa8, 0xd3, 0x1f, 0x40, 0x82, 0xba, 0x47, 0x74, 0x1e, 0x7e, 0x73, 0xc6, 0xe6, 0x31, 0x80, 0x6f, 0xbd, 0x75, 0x97, 0xc3, 0x37, 0xe1, 0x01, 0xb6, 0x09, 0xa7, 0x3c, 0xa0, 0xbe, 0x74, 0x4e, 0x3d, 0xac, 0x98, 0x59, 0xf8, 0x27, 0x67, 0x70, 0x69, 0xf4, 0xdf, 0xa9, 0x1c, 0x00, 0x8b, 0x73, 0x94, 0x52, 0xa6, 0x2a, 0x8f, 0x3f, 0x84, 0xe9, 0x8c, 0xdd, 0x2e, 0xa0, 0x8b, 0xba, 0x4d, 0x66, 0x14, 0xcd, 0x49, 0x10, 0x7a, 0xac, 0xb1, 0x02, 0x61, 0x00, 0xde, 0x45, 0x7e, 0x36, 0xd3, 0xda, 0x9e, 0x78, 0x68, 0x4e, 0xea, 0xdc, 0xa8, 0x8f, 0x69, 0xdb, 0x77, 0xfe, 0xc6, 0x04, 0x78, 0xc5, 0x54, 0xf1, 0x2d, 0x6b, 0x4f, 0x7b, 0x60, 0xa6, 0x65, 0x2a, 0xc2, 0x70, 0x74, 0xef, 0xd3, 0x5c, 0x96, 0x16, 0x01, 0x2b ],
-const [ 0x31, 0xf5, 0x1d, 0x39, 0x5a, 0x06, 0x88, 0x5e, 0xfc, 0x34, 0x03, 0x23, 0x49, 0xbc, 0x63, 0x5c, 0xd4, 0xb1, 0x00, 0x4c, 0xea, 0xfc, 0xb1, 0xc4, 0x26, 0xa2, 0xf8, 0x8b, 0x40, 0x45, 0x79, 0x02, 0x26, 0xee, 0xb1, 0x08, 0x4e, 0x09, 0xe4, 0x1c, 0x4a, 0xb1, 0x57, 0xc1, 0x9d, 0x2e, 0xc0, 0x27, 0xcd, 0xbc, 0xfb, 0x07, 0xb9, 0x8e, 0xfe, 0xcf, 0x2d, 0x13, 0x0f, 0xff, 0xb4, 0x78, 0x35, 0xd3, 0xad, 0x6e, 0xec, 0x22, 0xa1, 0x2d, 0x1c, 0x86, 0xd4, 0xb9, 0x4c, 0xbd, 0x1a, 0x64, 0x13, 0x4f, 0xec, 0x94, 0xd0, 0x71, 0xbb, 0xc6, 0x9b, 0x2a, 0x84, 0xd3, 0x7c, 0xb4, 0xa5, 0x72, 0xda, 0x25, 0xef, 0xff, 0x36, 0x4f, 0xfc, 0x7b, 0x19, 0xe4, 0xc3, 0xd3, 0x4a, 0xde, 0x69, 0x65, 0x45, 0x1d, 0x5b, 0xc0, 0xe9, 0x52, 0x99, 0xab, 0x71, 0x1d, 0x55, 0x6a, 0xa5, 0x72, 0xbc, 0x3c, 0x51, 0x41 ],
-const [ 0x48, 0xbd, 0xae, 0x9d, 0x81, 0xf1, 0xbe, 0xac, 0xcf, 0xd0, 0x03, 0x74, 0xf5, 0x22, 0xf9, 0x0c, 0xfe, 0xdd, 0x8e, 0x3d, 0xd9, 0x3b, 0xe1, 0x39, 0x47, 0x10, 0x4a, 0x89, 0xf7, 0x5b, 0x9a, 0x48, 0xee, 0x1b, 0xa4, 0x8f, 0x2d, 0x64, 0xfc, 0x30, 0x8e, 0xb1, 0xfe, 0xa7, 0xf0, 0x7c, 0x12, 0x4d, 0x93, 0x0c, 0x2f, 0xcf, 0xc5, 0x8f, 0x9e, 0xdf, 0xbf, 0x68, 0x01, 0x29, 0xca, 0xca, 0x93, 0x89, 0xa6, 0x86, 0xb1, 0x7b, 0x2b, 0x21, 0x9a, 0xd3, 0x31, 0x2a, 0x73, 0xae, 0xae, 0xca, 0x8e, 0xa8, 0x1e, 0x9d, 0xeb, 0x4f, 0x28, 0xc0, 0xff, 0xd8, 0x7e, 0x2c, 0xb5, 0x11, 0x05, 0x42, 0xb3, 0x97, 0x36, 0xa6, 0xde, 0x49, 0xc4, 0x51, 0x20, 0xfc, 0x7e, 0xe2, 0x69, 0x71, 0x78, 0x35, 0xf3, 0x84, 0x65, 0x37, 0xcb, 0xa5, 0x48, 0xf9, 0x8d, 0x8c, 0x4c, 0x03, 0x6e, 0x29, 0xef, 0xea, 0x80, 0xda ],
-const [ 0x1e, 0x1b, 0xda, 0xa9, 0x84, 0xca, 0x68, 0x73, 0x0f, 0xaf, 0x61, 0xc6, 0x97, 0xd5, 0xfb, 0x15, 0x95, 0x5b, 0x28, 0x99, 0x2d, 0x69, 0xba, 0xe8, 0x6c, 0x68, 0xcb, 0xc9, 0xce, 0x73, 0x5c, 0x47, 0x03, 0x08, 0x3c, 0x04, 0xf2, 0x04, 0x2c, 0xd0, 0xff, 0xce, 0x40, 0x7a, 0x89, 0xd2, 0x88, 0xe6, 0xb7, 0x31, 0xf0, 0x60, 0x75, 0xb6, 0x65, 0x30, 0xb9, 0x0d, 0x39, 0x6f, 0x0b, 0x2f, 0xc9, 0x19, 0x44, 0x21, 0x5d, 0x63, 0x96, 0xde, 0x4f, 0x4e, 0xcc, 0x92, 0x70, 0x7c, 0xd3, 0x08, 0xa7, 0x42, 0x7a, 0x66, 0xdb, 0x00, 0x76, 0x18, 0x13, 0xad, 0xa9, 0x0a, 0xdc, 0xb6, 0xa4, 0x1a, 0xec, 0x09, 0x6a, 0xcd, 0x04, 0x6c, 0x76, 0x40, 0x1b, 0x14, 0x00, 0x62, 0xb8, 0x73, 0x7d, 0x61, 0xa0, 0x51, 0x65, 0x62, 0xb1, 0x1e, 0x38, 0x75, 0x0e, 0x87, 0xc3, 0xc8, 0x7c, 0x47, 0xa0, 0x1b, 0x0c, 0x40 ],
-const [ 0x49, 0x07, 0x00, 0xea, 0x58, 0x7a, 0x00, 0x1c, 0x71, 0x62, 0xf0, 0x94, 0x6f, 0x7c, 0xa6, 0xa5, 0xe3, 0x65, 0x5c, 0x6e, 0x09, 0xba, 0x4c, 0x13, 0xfa, 0x7e, 0x7d, 0x4e, 0x22, 0xbc, 0xdc, 0x27, 0xf5, 0x6d, 0x8e, 0xff, 0xde, 0x9b, 0x85, 0xd3, 0x78, 0xc7, 0x51, 0xbf, 0x01, 0x89, 0x39, 0xc1, 0x0c, 0x76, 0x8b, 0xc0, 0x75, 0x46, 0x30, 0xcd, 0x9a, 0x37, 0x83, 0xa8, 0xc8, 0xac, 0x64, 0x86, 0xf4, 0x1a, 0x87, 0x11, 0xac, 0x24, 0x12, 0xb1, 0x4d, 0x05, 0x68, 0x0a, 0x75, 0x2f, 0x3f, 0xc6, 0xbb, 0x31, 0xf9, 0x94, 0x9e, 0xde, 0x31, 0x70, 0xbc, 0xac, 0x94, 0x26, 0x45, 0x5a, 0xf2, 0x11, 0xae, 0xd6, 0x94, 0x29, 0xaa, 0x5d, 0xd1, 0x3d, 0x56, 0xe4, 0xdc, 0x7c, 0xb3, 0xb7, 0xe0, 0x3a, 0x5a, 0x60, 0x4f, 0xf1, 0x6b, 0xca, 0x77, 0x86, 0xc7, 0xa6, 0x56, 0xce, 0x7f, 0x0e, 0xaf, 0x51 ],
-const [ 0x5b, 0xc9, 0x3a, 0x65, 0x5f, 0x35, 0xd3, 0x46, 0xf9, 0xe9, 0x6e, 0x96, 0xe9, 0xbb, 0x56, 0x01, 0x78, 0xda, 0xd0, 0x4e, 0xa4, 0x62, 0x59, 0x91, 0x7d, 0x2d, 0x30, 0xa2, 0xcf, 0xed, 0x14, 0xcd, 0x01, 0x77, 0x4f, 0xcb, 0x3d, 0x62, 0xf3, 0xf1, 0xd2, 0xd1, 0x64, 0xa8, 0xd6, 0x8d, 0x16, 0x1d, 0x0f, 0x57, 0x98, 0x3a, 0x14, 0x7c, 0xd2, 0xd4, 0xaf, 0xa9, 0x8b, 0x26, 0x86, 0x01, 0x2e, 0x7e, 0xfa, 0x6d, 0xcd, 0x36, 0x50, 0x33, 0x66, 0xe6, 0x0e, 0xcb, 0x65, 0xd8, 0xa8, 0xee, 0x6b, 0xbc, 0x5c, 0xef, 0x4e, 0x9d, 0x5b, 0x4e, 0x61, 0x14, 0x29, 0x8b, 0xf5, 0xbc, 0x46, 0x38, 0x1f, 0xe5, 0x0e, 0x52, 0xbc, 0x8d, 0xde, 0xd1, 0xb3, 0x8c, 0x78, 0x7e, 0x7a, 0x0e, 0xa9, 0x05, 0xdc, 0x46, 0x29, 0x4b, 0xf9, 0x61, 0xc2, 0x01, 0x8e, 0xb9, 0xb4, 0x7a, 0x76, 0x4c, 0x59, 0xb9, 0x71, 0x6c ],
-const [ 0xb7, 0x33, 0xd5, 0x1a, 0x7e, 0xaa, 0x4b, 0x6b, 0xb0, 0xe3, 0x78, 0xa2, 0x18, 0xca, 0xa6, 0xae, 0x74, 0x75, 0xa3, 0xf3, 0x29, 0x09, 0x18, 0x4d, 0x34, 0xd7, 0x16, 0x52, 0x64, 0xcb, 0xf2, 0xd8, 0xc6, 0x07, 0x53, 0xb8, 0x61, 0xcb, 0x89, 0xd1, 0x24, 0x98, 0x20, 0x4f, 0x1d, 0x95, 0xb5, 0x2d, 0xec, 0x31, 0x09, 0xf8, 0x76, 0x0a, 0x54, 0xd6, 0xde, 0x0e, 0xdc, 0xc8, 0xb1, 0xdf, 0xc5, 0x2c, 0x60, 0x7c, 0x2b, 0x86, 0xf4, 0x1f, 0x6e, 0x7f, 0xfd, 0x61, 0xcd, 0x2e, 0xcb, 0xa4, 0x37, 0x97, 0xe1, 0xb2, 0x5d, 0x71, 0xa7, 0xa2, 0x0c, 0x2d, 0x5f, 0xfc, 0xba, 0x33, 0x5a, 0x1d, 0x5f, 0x6f, 0x6c, 0xdc, 0x86, 0x0c, 0x9d, 0x6d, 0xa3, 0x7f, 0x21, 0x86, 0xa7, 0xc8, 0x8b, 0xc1, 0xd2, 0xf4, 0x3d, 0x42, 0xc8, 0xe7, 0x23, 0x99, 0xe8, 0x58, 0xa1, 0xe9, 0xd9, 0x1d, 0xc9, 0x4a, 0x65, 0xa9 ],
-const [ 0x0c, 0x29, 0x4a, 0x31, 0x8b, 0x7c, 0x1e, 0x88, 0x46, 0x49, 0xfe, 0x54, 0xe4, 0xa8, 0x72, 0x85, 0xe4, 0x2f, 0x86, 0x8e, 0x3d, 0x0a, 0x85, 0x19, 0x41, 0x4e, 0x05, 0xf9, 0xc7, 0x8b, 0x23, 0x60, 0x89, 0xa1, 0x10, 0x52, 0xcb, 0xd4, 0xcd, 0x59, 0x3e, 0x22, 0x32, 0x7b, 0x23, 0xd3, 0x35, 0x69, 0xb3, 0x53, 0x69, 0xf9, 0xbf, 0x3d, 0xc5, 0xd6, 0x94, 0xb8, 0xa7, 0x76, 0x21, 0x06, 0x18, 0x4d, 0x5c, 0x5a, 0x52, 0x41, 0xe1, 0xea, 0x80, 0x5d, 0xdc, 0x46, 0xc4, 0xc9, 0x2a, 0xe8, 0x7e, 0xfa, 0xbb, 0x0c, 0xcc, 0x26, 0x3b, 0xc2, 0x4d, 0xfb, 0xf1, 0x41, 0x2b, 0x90, 0xe7, 0x7e, 0x58, 0x9c, 0x4b, 0xfd, 0x17, 0xe6, 0x15, 0xe7, 0xbf, 0xfc, 0xea, 0x5e, 0xbb, 0x28, 0x40, 0x0d, 0xd6, 0xa0, 0xc4, 0x03, 0xb6, 0xfd, 0xf8, 0xc1, 0xa5, 0xee, 0x21, 0x91, 0x98, 0x2e, 0x60, 0x1a, 0x69, 0xb3 ],
-const [ 0xd6, 0x08, 0x12, 0x43, 0x30, 0x98, 0xc4, 0x46, 0x23, 0x15, 0x91, 0x53, 0xde, 0x7c, 0xd2, 0x72, 0x1b, 0x34, 0x9f, 0x68, 0x5c, 0x43, 0x38, 0x8a, 0x74, 0xc2, 0xa3, 0xd0, 0x4a, 0x8e, 0x97, 0x2a, 0xda, 0x41, 0x99, 0x17, 0x7c, 0x61, 0x65, 0x73, 0x69, 0xd7, 0x8f, 0x90, 0x7b, 0xa2, 0x6a, 0x89, 0x34, 0xcc, 0x29, 0xd3, 0x02, 0x9d, 0x44, 0x15, 0xc1, 0x10, 0x1e, 0x3a, 0x82, 0x83, 0xe4, 0xc4, 0x8b, 0xb2, 0xb8, 0x63, 0x9f, 0xe6, 0x0f, 0xc6, 0x7f, 0x6a, 0x57, 0xb1, 0xb0, 0x3f, 0xde, 0x50, 0x7f, 0x10, 0xef, 0xcb, 0x43, 0x68, 0x3e, 0x1a, 0xe2, 0x23, 0x85, 0x1b, 0x96, 0x23, 0x70, 0xe1, 0xf1, 0x44, 0xb7, 0x4f, 0x1f, 0x91, 0x89, 0xe6, 0x6c, 0xb8, 0x31, 0xdc, 0x05, 0xbb, 0xf4, 0x6e, 0x03, 0xe9, 0x38, 0x77, 0xa5, 0x0d, 0xec, 0x40, 0xdd, 0xe5, 0x23, 0x9a, 0x0f, 0xd5, 0x02, 0x2a ],
-const [ 0x3d, 0xb0, 0x52, 0x69, 0x5a, 0x59, 0x98, 0x13, 0x30, 0x9f, 0xae, 0x5c, 0xf5, 0xb1, 0x96, 0x90, 0xd3, 0xe1, 0xe6, 0x3b, 0x3c, 0xaa, 0xc1, 0x48, 0x7e, 0xf1, 0x07, 0x66, 0x97, 0x8b, 0xc9, 0xb0, 0x4a, 0x00, 0x00, 0x8c, 0x72, 0x8e, 0x7e, 0xd3, 0x97, 0x71, 0x24, 0x33, 0xbf, 0x62, 0x56, 0xd2, 0x86, 0x5e, 0xac, 0x34, 0x71, 0xa8, 0xea, 0x5f, 0x80, 0x11, 0x33, 0x3d, 0x02, 0x77, 0x79, 0x41, 0xad, 0x8c, 0x38, 0x4d, 0xee, 0xd8, 0x64, 0xd4, 0x7e, 0x02, 0xa0, 0x3c, 0x36, 0x4b, 0xb0, 0x86, 0x24, 0x5b, 0x31, 0x30, 0xde, 0x40, 0x87, 0x5a, 0x16, 0xb4, 0x18, 0x29, 0x6f, 0x9e, 0xb8, 0x69, 0x8f, 0xdc, 0x63, 0x76, 0x76, 0x40, 0x32, 0x5c, 0x0e, 0xd8, 0x88, 0x3d, 0x03, 0x73, 0x8c, 0xf3, 0xd4, 0x60, 0xdd, 0xf7, 0x2b, 0x79, 0x81, 0x81, 0x6a, 0x61, 0x1e, 0xf1, 0x86, 0x09, 0x6c, 0x6e ],
-const [ 0x9a, 0xe4, 0xb7, 0x99, 0x98, 0x9b, 0xc1, 0x32, 0xe5, 0xa5, 0x0c, 0x4f, 0xce, 0x6d, 0x6e, 0x44, 0xe2, 0x94, 0x0c, 0x6b, 0xa7, 0xdb, 0xb8, 0x24, 0x8b, 0x44, 0x7d, 0x19, 0x1d, 0x74, 0x77, 0xc7, 0x7d, 0x5c, 0xe8, 0x3a, 0x11, 0x18, 0x89, 0x17, 0x7a, 0x17, 0x1e, 0xe0, 0xc7, 0x7d, 0x4d, 0x74, 0xe8, 0xc5, 0xb0, 0xd5, 0x65, 0xab, 0x29, 0x2e, 0x50, 0x49, 0x76, 0x15, 0x78, 0x80, 0x05, 0x0d, 0xdf, 0x99, 0x09, 0x4f, 0x6e, 0x2c, 0xcd, 0xca, 0xe8, 0x41, 0x48, 0x68, 0x1d, 0xb6, 0xf3, 0x93, 0x60, 0xe1, 0xd7, 0xf8, 0x3a, 0x75, 0xea, 0x8a, 0x60, 0xaa, 0x9b, 0xca, 0xe3, 0x98, 0xac, 0x46, 0xa7, 0xe4, 0x40, 0x60, 0x16, 0x9f, 0x35, 0x51, 0x15, 0x6b, 0xb3, 0x6e, 0x37, 0xe0, 0x05, 0xa9, 0x31, 0x2e, 0xa8, 0x5a, 0x8f, 0x03, 0xa2, 0x40, 0xa5, 0xaf, 0x15, 0xc2, 0xc7, 0x86, 0x14, 0x7b ],
-const [ 0x00, 0x9f, 0x5e, 0x39, 0x94, 0x30, 0x03, 0x82, 0x50, 0x72, 0x1b, 0xe1, 0x79, 0x65, 0x35, 0xff, 0x21, 0xa6, 0x09, 0xfd, 0xf9, 0xf0, 0xf6, 0x12, 0x66, 0xe3, 0xaf, 0x75, 0xd7, 0x04, 0x31, 0x7d, 0x55, 0x06, 0xf8, 0x06, 0x5c, 0x48, 0x72, 0x18, 0xe9, 0x9e, 0xb4, 0xc3, 0xd4, 0x54, 0x6c, 0x4d, 0x60, 0x70, 0x16, 0x90, 0x11, 0x38, 0x73, 0x9d, 0xbd, 0xf4, 0x37, 0xa5, 0xe6, 0xf5, 0x02, 0x1a, 0x47, 0xd6, 0x92, 0x11, 0xad, 0x02, 0x37, 0xeb, 0x08, 0x76, 0x87, 0x34, 0xc2, 0xc9, 0x52, 0xcb, 0x4f, 0x69, 0xd9, 0x43, 0x06, 0x27, 0x3a, 0x8a, 0x2f, 0xf6, 0x2f, 0xc8, 0x5d, 0xef, 0xf8, 0x8a, 0xfe, 0x99, 0x96, 0x20, 0x30, 0x68, 0x3a, 0x43, 0xd6, 0x83, 0xfd, 0xfc, 0xeb, 0xca, 0xd1, 0xc1, 0x17, 0x18, 0xb8, 0xe0, 0x80, 0xc5, 0x34, 0x21, 0xe3, 0x70, 0xfe, 0xa6, 0xe3, 0xfb, 0xfa, 0x17 ],
-const [ 0x1d, 0xd2, 0x87, 0x56, 0xd2, 0x92, 0xe5, 0xa4, 0xf3, 0x53, 0x7e, 0x88, 0x77, 0x79, 0x33, 0x33, 0x5a, 0x64, 0xf7, 0x9a, 0x4d, 0x50, 0x25, 0x7a, 0xac, 0x79, 0x17, 0x99, 0xb0, 0x83, 0xf4, 0x50, 0xe6, 0x1a, 0xc9, 0x46, 0xdf, 0xd6, 0xdc, 0x7e, 0x29, 0x61, 0x3d, 0x94, 0x7f, 0xdb, 0x9d, 0x43, 0x3d, 0x7d, 0x63, 0x2b, 0x17, 0x7d, 0xfd, 0xd1, 0x09, 0x32, 0x74, 0xe8, 0x91, 0x79, 0x44, 0xcf, 0x1d, 0x57, 0x6a, 0x5a, 0xbf, 0xe0, 0xbe, 0xd5, 0x28, 0x57, 0x83, 0x46, 0xd4, 0x96, 0x3d, 0xf3, 0x82, 0xb0, 0xc2, 0x24, 0xe7, 0xd6, 0x94, 0x2a, 0xa3, 0x77, 0x6e, 0xa0, 0x74, 0xab, 0x1d, 0xf1, 0xaa, 0xd2, 0x91, 0x1b, 0xdb, 0x78, 0x34, 0xb2, 0xd7, 0x7d, 0x7b, 0x27, 0xde, 0x72, 0xba, 0x4a, 0x11, 0x45, 0x3c, 0x0e, 0x27, 0x21, 0x93, 0x8c, 0x61, 0x90, 0x2d, 0x4b, 0xc0, 0xe3, 0x28, 0xbf ],
-const [ 0x0c, 0x24, 0x5d, 0xe3, 0xb2, 0x50, 0xc3, 0x32, 0x82, 0xea, 0x1a, 0x02, 0xd0, 0x07, 0xf0, 0x3b, 0x34, 0xed, 0x42, 0x76, 0x31, 0x28, 0x3e, 0xb6, 0x14, 0xdb, 0x4d, 0x52, 0x1f, 0x55, 0x51, 0x36, 0xe7, 0xe4, 0x2b, 0x4c, 0xfb, 0xee, 0x81, 0x34, 0xc6, 0x3d, 0xbe, 0x3b, 0xb7, 0x9b, 0x5a, 0x8b, 0x9f, 0x9f, 0x5b, 0x9f, 0x5a, 0xc6, 0x1c, 0xfa, 0xb1, 0xc5, 0x4d, 0x19, 0x7f, 0x1e, 0x3b, 0xa6, 0x13, 0xf2, 0x51, 0xee, 0xd6, 0x16, 0xdf, 0x95, 0x2d, 0x69, 0x1b, 0x88, 0xa1, 0x64, 0x66, 0x34, 0x3e, 0xf2, 0xd0, 0xf6, 0x38, 0x82, 0xdd, 0xd2, 0xd5, 0x5b, 0x8a, 0x67, 0x86, 0x30, 0x8b, 0x22, 0x57, 0xf5, 0xd7, 0xb3, 0x8a, 0xf1, 0x66, 0xbd, 0x7f, 0x13, 0x39, 0xd2, 0xd8, 0x89, 0x9c, 0x9e, 0xda, 0x8f, 0xa8, 0x62, 0x15, 0x85, 0x0b, 0xa5, 0x47, 0x45, 0x0c, 0x26, 0x7e, 0xb3, 0xc9, 0x14 ],
-const [ 0xd1, 0x06, 0xa9, 0xae, 0xc4, 0x42, 0xfe, 0xd6, 0x16, 0x29, 0xe7, 0x75, 0x66, 0xf7, 0x89, 0xb2, 0x8c, 0x2c, 0x2c, 0x3e, 0xc6, 0x28, 0x87, 0x8a, 0x12, 0xf7, 0x3d, 0x37, 0xda, 0x6e, 0xa7, 0xce, 0xd6, 0x77, 0xd4, 0xb1, 0x2f, 0xa9, 0xce, 0x51, 0xe0, 0x1c, 0x1f, 0xa2, 0x62, 0x7b, 0x94, 0xcc, 0x88, 0x5a, 0x41, 0x24, 0xa8, 0xca, 0xc5, 0x5a, 0xfb, 0x2b, 0xd0, 0xf3, 0x46, 0x42, 0xe2, 0xfa, 0xba, 0x8c, 0x55, 0xf3, 0x19, 0xd1, 0x9d, 0x11, 0x1b, 0xfb, 0xcf, 0xa9, 0x10, 0x29, 0x60, 0xe5, 0xc6, 0x00, 0x2f, 0xbd, 0xad, 0x41, 0xc6, 0x23, 0x39, 0xa1, 0xdd, 0x7e, 0x88, 0xd5, 0x20, 0x5a, 0x45, 0xec, 0x33, 0x5e, 0xcc, 0xe1, 0xf2, 0x7e, 0x8f, 0x71, 0xfd, 0x72, 0xb8, 0x2a, 0x74, 0x66, 0x10, 0xc5, 0xff, 0xf3, 0x1f, 0xb5, 0x12, 0x4e, 0x95, 0x00, 0x6f, 0xbf, 0xe8, 0x4e, 0xec, 0x55 ],
-const [ 0x96, 0x56, 0x0a, 0x07, 0xf7, 0xe3, 0x98, 0xfc, 0x73, 0x96, 0x48, 0xce, 0x9a, 0x92, 0x43, 0x50, 0xfb, 0xf9, 0xb4, 0x52, 0x39, 0xae, 0x7c, 0x7f, 0x62, 0x60, 0x26, 0x86, 0x7d, 0xc4, 0x1d, 0x78, 0x62, 0x21, 0x1c, 0x71, 0xcf, 0x12, 0xe7, 0x7b, 0xb7, 0x88, 0x39, 0xaf, 0xdd, 0x0e, 0xfd, 0x9e, 0xa2, 0x51, 0xc0, 0xef, 0x1b, 0xdf, 0x67, 0x49, 0x67, 0x2f, 0x1d, 0x73, 0x40, 0xe2, 0x90, 0xb9, 0xcf, 0x48, 0x5d, 0x92, 0xc5, 0x26, 0xc8, 0x81, 0xa7, 0xb6, 0xb1, 0x39, 0x69, 0xf0, 0xc4, 0x04, 0x3f, 0x08, 0xef, 0x65, 0xb0, 0x38, 0x19, 0xfc, 0xec, 0xbf, 0x11, 0xab, 0x5f, 0x2a, 0xc4, 0xf7, 0x86, 0xd2, 0xb4, 0xb1, 0x02, 0xa6, 0xa5, 0xd5, 0xeb, 0x2a, 0x99, 0xb2, 0x66, 0xc0, 0xff, 0x4b, 0x7a, 0x27, 0x28, 0xfe, 0x1f, 0x41, 0xfa, 0x63, 0x98, 0x19, 0xe8, 0x77, 0x03, 0x24, 0x22, 0xfa ],
-const [ 0x81, 0xb8, 0xde, 0x7e, 0x17, 0xcc, 0x5f, 0xfd, 0xce, 0x4f, 0x22, 0x13, 0xb5, 0x61, 0xd6, 0x7d, 0x24, 0x4e, 0xa5, 0x91, 0xaa, 0xb5, 0xc3, 0x7f, 0x47, 0xe9, 0x46, 0xd7, 0xdb, 0x97, 0x38, 0x4b, 0xdf, 0xa9, 0xea, 0xb7, 0x53, 0x6b, 0x8c, 0x5e, 0xf7, 0xec, 0xfb, 0x76, 0xbe, 0xa8, 0xda, 0xe8, 0x80, 0x63, 0xe4, 0x51, 0xef, 0x58, 0x80, 0x4c, 0xcc, 0x93, 0x96, 0xf3, 0x5b, 0x9c, 0xa2, 0xa3, 0x14, 0x55, 0x07, 0x00, 0x9b, 0x25, 0xa5, 0x39, 0xf2, 0x56, 0xad, 0x8e, 0xee, 0xbc, 0xb4, 0x0f, 0xe7, 0x98, 0x07, 0xa6, 0xb4, 0xbb, 0x3f, 0x57, 0xd6, 0xef, 0x15, 0xc7, 0xf4, 0x92, 0x77, 0xfb, 0x88, 0x84, 0xdb, 0x63, 0xd7, 0x44, 0xd3, 0x17, 0x26, 0x55, 0xe1, 0x60, 0x2b, 0xe7, 0x8d, 0x7a, 0xc2, 0xb3, 0xb6, 0x98, 0xe1, 0x27, 0x26, 0x29, 0xce, 0xc3, 0x69, 0x5a, 0x8f, 0xc3, 0xde, 0xdc ],
-const [ 0xf4, 0xd6, 0xae, 0xdd, 0x9a, 0x34, 0xe0, 0xa1, 0x82, 0x23, 0x62, 0x71, 0x4d, 0x4e, 0x81, 0x79, 0x4b, 0x53, 0xb2, 0x66, 0x41, 0x76, 0x78, 0xc1, 0x6a, 0x97, 0x88, 0x7b, 0xbb, 0x61, 0x2c, 0xc9, 0x6b, 0xc5, 0xe5, 0x32, 0xb3, 0xa6, 0x54, 0xe5, 0xd3, 0xd6, 0x5a, 0x51, 0x55, 0x42, 0x7f, 0xf0, 0x95, 0x69, 0x90, 0x63, 0x81, 0x13, 0x8c, 0xc4, 0x9e, 0x3f, 0xc2, 0x38, 0x4c, 0x5d, 0x33, 0xc3, 0x4a, 0xbd, 0x3d, 0x61, 0x7c, 0x48, 0x7b, 0x52, 0xec, 0x6e, 0xe7, 0xb5, 0x10, 0x5f, 0x41, 0x58, 0x4b, 0x7e, 0xb5, 0xcf, 0xb5, 0x12, 0xb8, 0xc3, 0x1f, 0x3f, 0x33, 0x8d, 0x52, 0x36, 0xe3, 0x03, 0x98, 0xa8, 0xff, 0x92, 0x7e, 0x80, 0x1c, 0x8e, 0xd7, 0xd1, 0x4f, 0xc5, 0x04, 0x0d, 0x91, 0x5a, 0x73, 0x79, 0x67, 0xd1, 0x66, 0xdd, 0xc2, 0x66, 0xf6, 0x80, 0x23, 0xa3, 0x57, 0x53, 0x04, 0x31 ],
-const [ 0xbb, 0xf9, 0x6d, 0x79, 0x4a, 0x6a, 0x06, 0x2f, 0xed, 0x76, 0x42, 0x9a, 0x8b, 0x39, 0x5e, 0x56, 0x64, 0xc6, 0xb1, 0xb0, 0xa2, 0x6b, 0xdf, 0x08, 0x31, 0x37, 0x50, 0x7a, 0xd1, 0xba, 0xe0, 0xbd, 0x6a, 0x0c, 0xd8, 0x4a, 0x9f, 0x11, 0x1e, 0xc1, 0xa5, 0xfa, 0xa8, 0x89, 0x56, 0x0f, 0x36, 0xb7, 0x81, 0xac, 0x41, 0x32, 0x85, 0x8a, 0x2e, 0x14, 0x1e, 0x40, 0xc8, 0x53, 0x7e, 0x0a, 0xed, 0xa0, 0xa0, 0xc8, 0x87, 0x8f, 0xd9, 0x4a, 0xbf, 0xf9, 0xb0, 0xca, 0x6d, 0x9f, 0xef, 0xba, 0xd2, 0x0f, 0xfa, 0xc1, 0x89, 0xcc, 0x60, 0x00, 0xbb, 0xa9, 0xb0, 0x99, 0x93, 0x76, 0x8e, 0x72, 0xf1, 0xde, 0x05, 0x36, 0x63, 0x90, 0x1f, 0x9d, 0x51, 0x9d, 0xb3, 0xee, 0x77, 0x21, 0x7f, 0xc2, 0x98, 0x26, 0x76, 0x0a, 0x71, 0xc5, 0x5b, 0x53, 0xed, 0x8e, 0x8f, 0x49, 0x97, 0x2b, 0x28, 0x7a, 0x54, 0x3f ],
-const [ 0x99, 0x14, 0x0d, 0x97, 0x8b, 0x2e, 0x37, 0xf3, 0x26, 0x84, 0xf3, 0xbf, 0x07, 0x5c, 0x46, 0x78, 0xfe, 0x4b, 0x3a, 0x95, 0xfc, 0x93, 0xdf, 0x75, 0x32, 0xaf, 0x90, 0x96, 0x77, 0x2b, 0x77, 0x07, 0xea, 0xb9, 0x54, 0x20, 0xd9, 0x82, 0x79, 0x70, 0xe2, 0xba, 0x19, 0xf7, 0x58, 0x77, 0xc3, 0x95, 0xe9, 0xc3, 0x2a, 0xc3, 0x7d, 0xef, 0x27, 0x81, 0x60, 0x2b, 0x01, 0x8f, 0xa4, 0x54, 0xeb, 0xe0, 0xc1, 0x0d, 0xce, 0x4c, 0x7f, 0x11, 0x49, 0x85, 0x16, 0xc8, 0xf7, 0x4c, 0x93, 0x18, 0xf0, 0xe5, 0x7d, 0x7d, 0x92, 0xc8, 0xb9, 0x5c, 0x81, 0x99, 0xab, 0x94, 0xec, 0x5a, 0x9e, 0x57, 0x12, 0xe0, 0x66, 0x38, 0x05, 0x83, 0x43, 0x84, 0xae, 0x1a, 0x09, 0xd6, 0x12, 0x27, 0x7e, 0xe6, 0xd3, 0x4e, 0x04, 0xa2, 0xfa, 0x0c, 0x78, 0x80, 0xf3, 0xa5, 0x59, 0x12, 0xd9, 0x5e, 0x2d, 0xdb, 0xf5, 0xed ],
-const [ 0x41, 0x67, 0x76, 0x77, 0xd9, 0xb1, 0x9e, 0x24, 0x9d, 0x44, 0x88, 0xc3, 0xeb, 0x18, 0x15, 0x3d, 0x5b, 0x70, 0x50, 0x02, 0xea, 0x6a, 0xae, 0x42, 0x58, 0xd5, 0x95, 0x60, 0xce, 0x42, 0x1a, 0xa4, 0xc4, 0x5e, 0x0f, 0x30, 0x22, 0x7f, 0x3d, 0x35, 0xa5, 0x7c, 0xee, 0x66, 0x85, 0xc2, 0xaf, 0xad, 0x55, 0xa4, 0x53, 0x1d, 0x2a, 0xf3, 0x3b, 0x29, 0xff, 0xcf, 0xd5, 0x13, 0x58, 0xbc, 0x63, 0xa7, 0x26, 0xf9, 0xfe, 0x28, 0xeb, 0x0d, 0xda, 0x8b, 0x1e, 0xa2, 0xcb, 0xe3, 0xd1, 0x96, 0x08, 0x1d, 0x91, 0x50, 0x30, 0xed, 0x8e, 0x50, 0x8a, 0x08, 0xfc, 0x0a, 0x91, 0x94, 0xb8, 0xf5, 0xb0, 0xdc, 0x2f, 0xdf, 0x4a, 0x49, 0x7c, 0x83, 0xfd, 0x8e, 0xd0, 0x5d, 0x28, 0x22, 0x17, 0xbd, 0xaa, 0xf3, 0xd8, 0x1b, 0xed, 0x59, 0x5d, 0xaa, 0x24, 0x48, 0x15, 0x2f, 0xd0, 0xcb, 0x36, 0x14, 0x89, 0xad ],
-const [ 0x50, 0xee, 0x23, 0x89, 0xb8, 0xb7, 0x01, 0x82, 0x54, 0x8c, 0xcd, 0x7e, 0x82, 0xde, 0x84, 0x96, 0xc6, 0xb3, 0x60, 0x2b, 0xc9, 0x9e, 0xfc, 0x7c, 0xa2, 0xef, 0xba, 0x77, 0x55, 0x27, 0x62, 0xd0, 0x99, 0xaf, 0x0b, 0x51, 0xdf, 0xc9, 0x3f, 0x71, 0x8f, 0xc6, 0x5a, 0x27, 0x95, 0x7a, 0x33, 0x00, 0x1c, 0xed, 0xfe, 0x70, 0x99, 0x53, 0x71, 0x65, 0x0c, 0x3e, 0x26, 0x22, 0x83, 0x13, 0x41, 0x4b, 0xdf, 0xba, 0x52, 0x3c, 0xda, 0x9a, 0x7d, 0x9f, 0x49, 0xc5, 0xd8, 0x3e, 0x9f, 0x6f, 0x14, 0x15, 0xb3, 0xa5, 0x60, 0xac, 0xc3, 0x3c, 0x8a, 0xa4, 0xb8, 0x07, 0x67, 0x8f, 0xab, 0x4d, 0x76, 0x05, 0xa9, 0x79, 0xc0, 0xf4, 0xb3, 0x14, 0x02, 0x37, 0x09, 0xf1, 0x0e, 0x6a, 0xa9, 0xa7, 0x6f, 0xfd, 0x12, 0x44, 0x4c, 0x88, 0x4d, 0x40, 0x8f, 0x5e, 0x2e, 0xb0, 0x45, 0x65, 0xd8, 0xbc, 0x48, 0x25 ],
-const [ 0xb1, 0x68, 0x9c, 0x25, 0x91, 0xea, 0xf3, 0xc9, 0xe6, 0x60, 0x70, 0xf8, 0xa7, 0x79, 0x54, 0xff, 0xb8, 0x17, 0x49, 0xf1, 0xb0, 0x03, 0x46, 0xf9, 0xdf, 0xe0, 0xb2, 0xee, 0x90, 0x5d, 0xcc, 0x28, 0x8b, 0xaf, 0x4a, 0x92, 0xde, 0x3f, 0x40, 0x01, 0xdd, 0x9f, 0x44, 0xc4, 0x68, 0xc3, 0xd0, 0x7d, 0x6c, 0x6e, 0xe8, 0x2f, 0xac, 0xea, 0xfc, 0x97, 0xc2, 0xfc, 0x0f, 0xc0, 0x60, 0x17, 0x19, 0xd2, 0xdc, 0xd0, 0xaa, 0x2a, 0xec, 0x92, 0xd1, 0xb0, 0xae, 0x93, 0x3c, 0x65, 0xeb, 0x06, 0xa0, 0x3c, 0x9c, 0x93, 0x5c, 0x2b, 0xad, 0x04, 0x59, 0x81, 0x02, 0x41, 0x34, 0x7a, 0xb8, 0x7e, 0x9f, 0x11, 0xad, 0xb3, 0x04, 0x15, 0x42, 0x4c, 0x6c, 0x7f, 0x5f, 0x22, 0xa0, 0x03, 0xb8, 0xab, 0x8d, 0xe5, 0x4f, 0x6d, 0xed, 0x0e, 0x3a, 0xb9, 0x24, 0x5f, 0xa7, 0x95, 0x68, 0x45, 0x1d, 0xfa, 0x25, 0x8e ],
-const [ 0x0c, 0xf2, 0x19, 0x8c, 0x31, 0x37, 0x6f, 0x5c, 0x89, 0x15, 0x66, 0x01, 0x37, 0x72, 0x5f, 0x2b, 0xbc, 0x18, 0x0a, 0x98, 0x6e, 0x5a, 0x7b, 0xda, 0x27, 0xfa, 0x81, 0x59, 0x3a, 0x4a, 0x33, 0x9b, 0xab, 0x92, 0xcb, 0xc3, 0x9f, 0xb2, 0xb8, 0x58, 0x11, 0x08, 0xee, 0x48, 0xc7, 0x94, 0x81, 0x2d, 0x84, 0x5a, 0x72, 0xce, 0x80, 0x08, 0xc9, 0xe9, 0x15, 0xd9, 0xe3, 0x30, 0xbb, 0xb9, 0x0e, 0x91, 0x36, 0xaa, 0x53, 0xba, 0x0e, 0x66, 0x93, 0xdd, 0x40, 0x46, 0xd6, 0xb0, 0x33, 0x62, 0xdf, 0xb9, 0xed, 0xfa, 0x04, 0xc8, 0x87, 0x15, 0x3c, 0xc5, 0xde, 0x67, 0x7a, 0xab, 0x8c, 0x78, 0x39, 0xd5, 0x17, 0x03, 0x58, 0x79, 0x67, 0x9c, 0x29, 0x72, 0x7e, 0x96, 0xc5, 0x42, 0x63, 0x24, 0xa2, 0x57, 0x5f, 0xbe, 0x67, 0x8d, 0x6c, 0xc7, 0xfe, 0xf5, 0xeb, 0x6c, 0xeb, 0xd5, 0x95, 0xcf, 0xdd, 0xef ],
-const [ 0x3f, 0xb3, 0x01, 0xcb, 0x40, 0x92, 0xf9, 0x62, 0x3a, 0xa5, 0xff, 0xd6, 0x90, 0xd2, 0x2d, 0x65, 0xd5, 0x6e, 0x5a, 0x1c, 0x33, 0x0b, 0x9c, 0x4a, 0x0d, 0x91, 0x0c, 0x34, 0xe3, 0x91, 0xc9, 0x0a, 0x76, 0xd5, 0x40, 0x1a, 0x2d, 0x3c, 0xaa, 0x44, 0xb8, 0xc5, 0xd5, 0xae, 0xf3, 0xe9, 0x28, 0xb9, 0x0d, 0x2e, 0xe2, 0x33, 0xe9, 0xf9, 0xa2, 0xce, 0xc4, 0xa3, 0x2c, 0xd0, 0x19, 0xd0, 0x6a, 0x0d, 0xc1, 0xfc, 0xb1, 0x12, 0x5f, 0x57, 0x46, 0xa4, 0xfb, 0xd3, 0x21, 0x69, 0xed, 0x7b, 0xf0, 0xe4, 0xfd, 0x06, 0x5f, 0xa7, 0xc8, 0xac, 0x97, 0xc3, 0x66, 0x38, 0x04, 0x84, 0x49, 0x5f, 0x5c, 0x5b, 0x68, 0x50, 0xdd, 0x1c, 0x9d, 0x8c, 0xd6, 0x69, 0x4c, 0xf8, 0x68, 0x6e, 0x46, 0x30, 0x8e, 0xd0, 0xed, 0x1f, 0x5b, 0xdf, 0x98, 0xcd, 0x83, 0x13, 0x39, 0x77, 0x1d, 0xb6, 0x3d, 0xe5, 0xa7, 0xde ],
-const [ 0x1c, 0x43, 0x96, 0xf7, 0xb7, 0xf9, 0x22, 0x8e, 0x83, 0x2a, 0x13, 0x69, 0x20, 0x02, 0xba, 0x2a, 0xff, 0x43, 0x9d, 0xcb, 0x7f, 0xdd, 0xbf, 0xd4, 0x56, 0xc0, 0x22, 0xd1, 0x33, 0xee, 0x89, 0x03, 0xa2, 0xd4, 0x82, 0x56, 0x2f, 0xda, 0xa4, 0x93, 0xce, 0x39, 0x16, 0xd7, 0x7a, 0x0c, 0x51, 0x44, 0x1d, 0xab, 0x26, 0xf6, 0xb0, 0x34, 0x02, 0x38, 0xa3, 0x6a, 0x71, 0xf8, 0x7f, 0xc3, 0xe1, 0x79, 0xca, 0xbc, 0xa9, 0x48, 0x2b, 0x70, 0x49, 0x71, 0xce, 0x69, 0xf3, 0xf2, 0x0a, 0xb6, 0x4b, 0x70, 0x41, 0x3d, 0x6c, 0x29, 0x08, 0x53, 0x2b, 0x2a, 0x88, 0x8a, 0x9f, 0xc2, 0x24, 0xca, 0xe1, 0x36, 0x5d, 0xa4, 0x10, 0xb6, 0xf2, 0xe2, 0x98, 0x90, 0x4b, 0x63, 0xb4, 0xa4, 0x17, 0x26, 0x32, 0x18, 0x35, 0xa4, 0x77, 0x4d, 0xd0, 0x63, 0xc2, 0x11, 0xcf, 0xc8, 0xb5, 0x16, 0x6c, 0x2d, 0x11, 0xa2 ],
-const [ 0x49, 0x53, 0x40, 0x8b, 0xe3, 0xdd, 0xde, 0x42, 0x52, 0x1e, 0xb6, 0x25, 0xa3, 0x7a, 0xf0, 0xd2, 0xcf, 0x9e, 0xd1, 0x84, 0xf5, 0xb6, 0x27, 0xe5, 0xe7, 0xe0, 0xe8, 0x24, 0xe8, 0xe1, 0x16, 0x48, 0xb4, 0x18, 0xe5, 0xc4, 0xc1, 0xb0, 0x20, 0x4b, 0xc5, 0x19, 0xc9, 0xe5, 0x78, 0xb8, 0x00, 0x43, 0x9b, 0xdd, 0x25, 0x4f, 0x39, 0xf6, 0x41, 0x08, 0x2d, 0x03, 0xa2, 0x8d, 0xe4, 0x4a, 0xc6, 0x77, 0x64, 0x4c, 0x7b, 0x6c, 0x8d, 0xf7, 0x43, 0xf2, 0x9f, 0x1d, 0xfd, 0x80, 0xfd, 0x25, 0xc2, 0xdb, 0x31, 0x01, 0x0e, 0xa0, 0x2f, 0x60, 0x20, 0x1c, 0xde, 0x24, 0xa3, 0x64, 0xd4, 0x16, 0x8d, 0xa2, 0x61, 0xd8, 0x48, 0xae, 0xd0, 0x1c, 0x10, 0xde, 0xe9, 0x14, 0x9c, 0x1e, 0xbb, 0x29, 0x00, 0x43, 0x98, 0xf0, 0xd2, 0x9c, 0x60, 0x5a, 0x8b, 0xca, 0x03, 0x2b, 0x31, 0xd2, 0x41, 0xad, 0x33, 0x71 ],
-const [ 0x44, 0x13, 0x11, 0x87, 0xc0, 0x7a, 0x8e, 0x39, 0x79, 0x25, 0x4b, 0x0c, 0x1d, 0x1c, 0xfa, 0x80, 0x81, 0xf0, 0xbe, 0xb8, 0x89, 0x06, 0x33, 0x74, 0x49, 0x32, 0xaf, 0x3f, 0x69, 0x87, 0xc7, 0xea, 0xce, 0x6e, 0x15, 0x38, 0x76, 0xf6, 0x39, 0xdb, 0xa4, 0x6b, 0x1e, 0x9f, 0x3e, 0x2a, 0x7f, 0xe6, 0x73, 0xb3, 0xa9, 0x54, 0xa0, 0x00, 0x82, 0xcb, 0x75, 0x16, 0xca, 0x9a, 0x54, 0xd9, 0xa1, 0xf1, 0xf9, 0x24, 0x49, 0x99, 0x60, 0x19, 0x2e, 0xe1, 0xe3, 0xb6, 0x23, 0xdc, 0xa4, 0xa9, 0xef, 0xc9, 0x2a, 0x66, 0x08, 0xd3, 0x4f, 0x76, 0x9e, 0xfb, 0x59, 0x12, 0xdb, 0x52, 0x67, 0xf0, 0x6a, 0x6b, 0x0f, 0x5d, 0x36, 0x10, 0x45, 0x8c, 0x74, 0x34, 0x7e, 0x2e, 0xe3, 0x29, 0x16, 0x42, 0x52, 0x13, 0xef, 0x2f, 0x64, 0x9d, 0x5c, 0x10, 0x90, 0xea, 0x3d, 0x4f, 0x6b, 0xcf, 0x6b, 0x75, 0x2a, 0x3f ],
-const [ 0x32, 0xb4, 0x5f, 0xbc, 0xba, 0xf2, 0x62, 0xbb, 0xe3, 0x47, 0x36, 0x0b, 0xd6, 0x07, 0x6c, 0x43, 0xdc, 0x26, 0xba, 0x95, 0x73, 0xfc, 0xab, 0xae, 0xa1, 0x45, 0x95, 0xde, 0x88, 0x6c, 0xcc, 0x79, 0x3b, 0x09, 0x15, 0x7d, 0xd0, 0xa8, 0x5d, 0x74, 0xb6, 0xcc, 0xab, 0x9c, 0x49, 0x33, 0x54, 0x46, 0xa4, 0x5c, 0x6e, 0x7c, 0xb6, 0x47, 0x86, 0xe6, 0x99, 0x7c, 0x96, 0xef, 0x1e, 0x4e, 0x31, 0x23, 0xad, 0x61, 0x01, 0xdb, 0x4c, 0x6a, 0x73, 0x1d, 0xfd, 0x36, 0xb1, 0xbe, 0x4d, 0xee, 0xd1, 0xc9, 0x2a, 0x99, 0x4b, 0x25, 0xf5, 0xe2, 0xb1, 0x71, 0xd8, 0x1b, 0x9a, 0x33, 0x5a, 0x83, 0xe0, 0x32, 0x30, 0xc4, 0x0b, 0x20, 0x56, 0xc0, 0x0c, 0x7c, 0x5f, 0x8d, 0x2f, 0xb7, 0x0a, 0xbe, 0x4b, 0x96, 0x15, 0xe5, 0x3b, 0xd7, 0x56, 0x56, 0x92, 0x17, 0x07, 0x2d, 0x8b, 0xf3, 0x62, 0x92, 0x3f, 0x6e ],
-const [ 0x14, 0x89, 0x0f, 0x3b, 0x2e, 0xe6, 0x37, 0x46, 0xc8, 0x24, 0x99, 0x09, 0x01, 0x35, 0x71, 0xa4, 0x03, 0xeb, 0x54, 0x27, 0x37, 0x60, 0x09, 0x0d, 0xb5, 0x95, 0x9b, 0x06, 0xff, 0x59, 0xac, 0xfa, 0xee, 0x6d, 0x0c, 0x4a, 0xec, 0xe5, 0x8b, 0x59, 0x64, 0xd1, 0x0b, 0x4b, 0x77, 0x1d, 0xd9, 0x0c, 0xf1, 0xb6, 0x3d, 0x94, 0x7b, 0xee, 0x4f, 0x6a, 0x12, 0x22, 0x0d, 0x67, 0xb7, 0x9a, 0xab, 0xbd, 0x68, 0xb0, 0x2a, 0x38, 0x50, 0x35, 0x2c, 0xc3, 0x3b, 0x10, 0x07, 0x2d, 0x4c, 0x28, 0x18, 0x2d, 0xf2, 0x85, 0x5a, 0xa4, 0x18, 0xb2, 0x36, 0x23, 0x9c, 0x65, 0x9d, 0xad, 0x03, 0x61, 0x55, 0xbe, 0x6b, 0x9c, 0x90, 0x8b, 0xc0, 0x9d, 0xc3, 0x8c, 0x33, 0x29, 0xb5, 0x38, 0xe8, 0x1e, 0xd7, 0x10, 0xef, 0x9f, 0xd3, 0xde, 0x76, 0x71, 0x67, 0x3f, 0x3d, 0xa5, 0x74, 0x5f, 0x4a, 0x78, 0x52, 0x04 ],
-const [ 0x3e, 0x8a, 0x90, 0x30, 0xea, 0xe1, 0xbb, 0x60, 0x84, 0xcf, 0xfd, 0xb5, 0x77, 0x62, 0x3c, 0x4c, 0xf9, 0x4b, 0x7a, 0xee, 0x3d, 0x3c, 0xa9, 0x94, 0xea, 0x94, 0xc1, 0x2a, 0xcd, 0x3e, 0x11, 0x94, 0xca, 0xd6, 0xd2, 0xef, 0x19, 0x0e, 0x02, 0x19, 0xaf, 0x51, 0x70, 0x73, 0xf9, 0xa6, 0x13, 0xe5, 0xd0, 0xd6, 0x9f, 0x23, 0xaa, 0xd1, 0x5a, 0x2f, 0x0d, 0x4e, 0x2c, 0x20, 0x4a, 0xb2, 0xf6, 0x21, 0x67, 0x33, 0x25, 0xbc, 0x5d, 0x3d, 0x87, 0x59, 0x84, 0x14, 0x5d, 0x01, 0x4b, 0xbc, 0xb1, 0x68, 0x2c, 0x16, 0xea, 0x2b, 0xdf, 0x4b, 0x9d, 0x56, 0xce, 0x6d, 0xa6, 0x29, 0xca, 0x5c, 0x78, 0x1c, 0xfc, 0xe7, 0xb1, 0x20, 0x1e, 0x34, 0xf2, 0x28, 0xeb, 0x62, 0xed, 0xe8, 0xd3, 0x6c, 0xbf, 0xdc, 0xf4, 0x51, 0x81, 0x8d, 0x46, 0x72, 0x19, 0x10, 0x15, 0x3b, 0x56, 0xcf, 0xb5, 0x05, 0x3d, 0x8c ],
-const [ 0x97, 0xd2, 0x9a, 0xc5, 0xed, 0xe9, 0x4c, 0x0a, 0x50, 0x71, 0xe0, 0x09, 0x5e, 0x61, 0x02, 0x12, 0x3d, 0x17, 0x26, 0x13, 0x2f, 0x9d, 0xc1, 0x02, 0x67, 0x2a, 0xb8, 0x7b, 0x1c, 0xec, 0x18, 0xab, 0xdb, 0x04, 0x09, 0x6c, 0x21, 0xd3, 0xfd, 0xb1, 0x29, 0x74, 0x2d, 0x25, 0x03, 0x89, 0x46, 0x0f, 0xe6, 0x3b, 0x5f, 0x79, 0xc7, 0x7c, 0x2f, 0x91, 0x2a, 0x8f, 0x7d, 0x4f, 0x39, 0xcb, 0xd7, 0x58, 0x13, 0x9c, 0x87, 0x23, 0x66, 0xca, 0xc3, 0x5a, 0x40, 0xfe, 0x24, 0x83, 0x22, 0x82, 0x5a, 0xdf, 0x57, 0x48, 0x1d, 0x92, 0x83, 0x2e, 0x66, 0x05, 0x7f, 0x80, 0xe0, 0x89, 0x64, 0xbe, 0x99, 0x3d, 0xe6, 0xa0, 0xfe, 0x31, 0xe4, 0x58, 0x06, 0xcb, 0x3c, 0x17, 0xad, 0x6a, 0xe4, 0xd2, 0xa4, 0x4a, 0x37, 0x46, 0x47, 0xa8, 0x8c, 0x3a, 0xcf, 0x26, 0x0d, 0x04, 0xc9, 0x70, 0xc7, 0x4e, 0xc7, 0x20 ],
-const [ 0x87, 0x34, 0xe4, 0x9e, 0x3e, 0x62, 0x9d, 0xeb, 0x35, 0x2c, 0x77, 0xf5, 0x8f, 0xf4, 0xdc, 0xce, 0x2a, 0xf3, 0xb1, 0x18, 0x2e, 0x7d, 0x89, 0x6a, 0xe6, 0x86, 0x19, 0xf6, 0xcf, 0x66, 0xed, 0x69, 0xef, 0xd9, 0x59, 0x13, 0x68, 0x4a, 0xb1, 0x48, 0x4d, 0x51, 0xbc, 0x06, 0xb4, 0x7a, 0x67, 0xd7, 0x0d, 0x48, 0xb7, 0xf9, 0xb2, 0x79, 0x01, 0xbd, 0xbf, 0x8c, 0x5d, 0x2d, 0x23, 0x81, 0x58, 0xf1, 0xf7, 0xe0, 0xe9, 0x74, 0x0f, 0xfc, 0xa7, 0x42, 0xcf, 0x79, 0x38, 0xb5, 0x40, 0x0c, 0x0d, 0xd0, 0x63, 0x82, 0x4c, 0x6b, 0xc6, 0x04, 0x0e, 0x90, 0x54, 0x99, 0xcb, 0x26, 0x71, 0xec, 0x12, 0xcc, 0x47, 0x50, 0x7e, 0x08, 0x5a, 0x01, 0xe5, 0xa1, 0x63, 0xac, 0xd2, 0x49, 0x5b, 0x32, 0x36, 0x7f, 0xd6, 0xaa, 0x5a, 0xb4, 0x92, 0xa5, 0x18, 0xad, 0x50, 0xb5, 0x4b, 0x28, 0xe2, 0x30, 0x84, 0xc2 ],
-const [ 0x61, 0xc5, 0xbe, 0x97, 0x2f, 0xaa, 0x61, 0xf6, 0x7b, 0xcb, 0x33, 0x25, 0x42, 0xc0, 0xb8, 0xa7, 0xc7, 0x4e, 0xf6, 0x7c, 0xdb, 0x95, 0xd6, 0xf6, 0x5c, 0x8a, 0xce, 0xc8, 0xfc, 0xa8, 0xbd, 0x60, 0x43, 0xe3, 0x16, 0x77, 0xd8, 0xde, 0x41, 0xe6, 0xfc, 0x5d, 0x3e, 0xbb, 0x57, 0xfd, 0x8c, 0x8c, 0xf7, 0x23, 0x49, 0x0b, 0x96, 0x32, 0x9a, 0xdb, 0x1b, 0x01, 0x4d, 0xa2, 0x64, 0x8c, 0xbd, 0x60, 0x43, 0xe9, 0xf6, 0xff, 0xc6, 0x7e, 0x1a, 0x2b, 0xbc, 0x72, 0x04, 0x63, 0x74, 0x61, 0x2a, 0x50, 0xc8, 0x54, 0xc8, 0x56, 0x5a, 0xf0, 0x3b, 0x6a, 0x1e, 0xed, 0xaa, 0x23, 0x19, 0xca, 0xec, 0x13, 0x68, 0xbf, 0xa6, 0x57, 0x83, 0xf4, 0xb4, 0x6d, 0xc3, 0xf0, 0xcb, 0x46, 0x22, 0x54, 0x5c, 0x9c, 0x43, 0xc9, 0xbb, 0x86, 0xb2, 0x37, 0x80, 0x4a, 0x6c, 0x38, 0x2e, 0x72, 0xa2, 0xcc, 0x12, 0x22 ],
-const [ 0xb3, 0x1d, 0x11, 0xcb, 0x4f, 0x5c, 0x57, 0x2c, 0xcf, 0x34, 0x05, 0xc6, 0x5c, 0xbd, 0x21, 0x8e, 0xe8, 0xab, 0xdc, 0x08, 0xb6, 0xc8, 0x2e, 0x5d, 0x1d, 0xa2, 0xba, 0xaf, 0x89, 0x80, 0xf7, 0xa9, 0xc2, 0x9b, 0x91, 0x5a, 0x71, 0x8b, 0x0d, 0x43, 0xe0, 0x00, 0xad, 0xae, 0x01, 0xb2, 0x93, 0x42, 0xb2, 0x9b, 0x28, 0xd5, 0x3f, 0x63, 0xbf, 0x81, 0x28, 0x1c, 0x76, 0xfa, 0x25, 0x2f, 0x5d, 0x1e, 0x68, 0x96, 0xdb, 0xce, 0x22, 0x4c, 0x4d, 0xfd, 0x48, 0x02, 0xef, 0x06, 0x97, 0x14, 0x00, 0x43, 0xd6, 0xbb, 0x21, 0xdb, 0x5b, 0x84, 0xff, 0xdb, 0xd0, 0x01, 0x31, 0x89, 0x37, 0xbe, 0x64, 0xf5, 0x2c, 0x76, 0xb5, 0xd0, 0x6a, 0x87, 0x5e, 0x81, 0x91, 0xa4, 0x95, 0x76, 0x27, 0xca, 0xb1, 0xb8, 0xdc, 0x75, 0x8f, 0xc3, 0x12, 0x13, 0x34, 0x94, 0x9c, 0xb9, 0xb3, 0x03, 0xc6, 0x15, 0x51, 0x53 ],
-const [ 0x3a, 0xd1, 0x73, 0x08, 0xcd, 0x25, 0x96, 0x88, 0xd5, 0xb5, 0x2c, 0x32, 0xd0, 0x1a, 0x3b, 0x86, 0x8b, 0xfa, 0xa4, 0x75, 0x8b, 0xda, 0xa5, 0xce, 0xac, 0x34, 0xa1, 0xf9, 0x08, 0xca, 0x24, 0xe7, 0x1a, 0x39, 0x22, 0x49, 0x24, 0xd1, 0x7f, 0x00, 0xcd, 0xa4, 0xd4, 0xd5, 0x0f, 0xdd, 0x71, 0x6b, 0x50, 0x54, 0x9e, 0x71, 0xcf, 0x5f, 0x27, 0x1c, 0x42, 0xea, 0x17, 0xd5, 0xbe, 0xca, 0xc3, 0x2f, 0xd6, 0x4e, 0x0a, 0x1b, 0x07, 0x17, 0xdc, 0x5f, 0x54, 0x2a, 0xf9, 0x44, 0x2d, 0x44, 0xfb, 0x8f, 0x95, 0x6e, 0x97, 0xb3, 0x84, 0xd0, 0x20, 0x45, 0x8a, 0xca, 0x4c, 0xb0, 0xb6, 0x41, 0x3b, 0x2a, 0xb6, 0x37, 0xb5, 0xe7, 0x3f, 0x9f, 0xb4, 0x8c, 0xb0, 0x6f, 0x22, 0xe6, 0xf2, 0xf6, 0xe3, 0xdc, 0xa2, 0x70, 0x16, 0xa2, 0x72, 0xd8, 0x98, 0x30, 0xcc, 0xfd, 0xca, 0xf3, 0xb9, 0xd8, 0x95, 0xc2 ],
-const [ 0x46, 0xeb, 0x50, 0x59, 0x05, 0x5d, 0x33, 0x45, 0xc1, 0xea, 0x84, 0xa4, 0xeb, 0xd2, 0xd7, 0xcc, 0x53, 0x36, 0x17, 0x07, 0xec, 0xcd, 0x70, 0xe7, 0xcf, 0xd8, 0x6b, 0xda, 0x83, 0x58, 0x5b, 0xfe, 0x7c, 0x7e, 0xf9, 0x37, 0xe1, 0x63, 0x4b, 0x7e, 0x93, 0xf9, 0xca, 0x7c, 0x6a, 0x42, 0xc3, 0x57, 0xc2, 0xbf, 0xfe, 0xcc, 0x36, 0x2c, 0x9e, 0x7e, 0xab, 0x6a, 0x48, 0x8d, 0x91, 0xbd, 0x87, 0x6b, 0x65, 0x37, 0x6f, 0xeb, 0x7a, 0x74, 0x81, 0x9b, 0xfa, 0x88, 0xcf, 0x54, 0x27, 0x36, 0x61, 0x0f, 0xe7, 0x63, 0xd6, 0xfa, 0x80, 0xc9, 0x4e, 0xcc, 0xa0, 0xf0, 0x88, 0x55, 0xa0, 0x5a, 0x48, 0x59, 0x09, 0xfe, 0xfc, 0x9e, 0x58, 0xf9, 0x9e, 0x44, 0xfe, 0x7f, 0xdc, 0x55, 0xab, 0x17, 0x77, 0x9d, 0xcc, 0x08, 0xe9, 0xbc, 0x53, 0x0e, 0x4a, 0x79, 0xb6, 0x52, 0x74, 0x59, 0x3a, 0x99, 0x66, 0x71 ],
-const [ 0x39, 0x0a, 0x9d, 0xc2, 0xea, 0x20, 0x22, 0x1c, 0x59, 0x93, 0xc5, 0x81, 0x89, 0x2e, 0xb4, 0xb0, 0x43, 0x64, 0x29, 0x4f, 0xad, 0x91, 0x9c, 0x45, 0x1e, 0x83, 0x37, 0x65, 0x31, 0x39, 0x8a, 0x4c, 0x18, 0xea, 0x80, 0x8c, 0x33, 0x4a, 0x91, 0x0a, 0xe1, 0x08, 0x3a, 0xa4, 0x97, 0x9b, 0xaa, 0x17, 0x2f, 0x3e, 0xbf, 0x20, 0x82, 0x39, 0x30, 0xe2, 0x38, 0x63, 0x0c, 0x88, 0xdf, 0xe5, 0x63, 0x2b, 0x3b, 0x40, 0x42, 0xf6, 0xdd, 0x92, 0xe5, 0x88, 0xf7, 0x15, 0x29, 0x99, 0x6f, 0xe8, 0x40, 0xe1, 0x32, 0x12, 0xa8, 0x35, 0xcb, 0xc4, 0x5e, 0xf4, 0x34, 0xde, 0x4f, 0xa1, 0xec, 0xb5, 0x0f, 0xd1, 0x49, 0x13, 0xcd, 0x48, 0x10, 0x80, 0x87, 0x5f, 0x43, 0xc0, 0x7a, 0xa9, 0x3a, 0x9d, 0xdd, 0xd5, 0xf5, 0xe7, 0xce, 0xd6, 0xb1, 0xb8, 0x8d, 0x42, 0xb9, 0xfc, 0xe8, 0xf8, 0x7f, 0x31, 0xf6, 0x06 ],
-const [ 0xf9, 0x07, 0x68, 0x95, 0x4c, 0xdc, 0xbd, 0x57, 0x05, 0xf9, 0xd3, 0x18, 0xfc, 0xa6, 0x59, 0x17, 0x87, 0xaf, 0x84, 0x0a, 0x92, 0x1f, 0xbd, 0x06, 0xf2, 0x4b, 0x97, 0x9e, 0xf6, 0x12, 0x03, 0x4f, 0x3f, 0x64, 0xc7, 0x1c, 0xd2, 0x01, 0x2c, 0x75, 0x6c, 0x83, 0xf7, 0x5d, 0x16, 0x9f, 0x9b, 0xcc, 0xf8, 0xa8, 0xad, 0x52, 0x72, 0x54, 0x98, 0xfe, 0x69, 0xc3, 0x92, 0x7e, 0xdf, 0xbd, 0xcf, 0x87, 0xc7, 0x3c, 0xf4, 0x78, 0x17, 0x2a, 0xce, 0x3a, 0x1e, 0x6b, 0x44, 0x6a, 0x18, 0x1e, 0x8a, 0xba, 0x00, 0x20, 0x98, 0x94, 0xa5, 0xd2, 0xdb, 0x01, 0x00, 0x1d, 0x2a, 0xca, 0xc5, 0xb3, 0xfb, 0xdd, 0x38, 0x97, 0xd7, 0xf1, 0x42, 0xdf, 0x0b, 0x6d, 0xc4, 0xb9, 0xa1, 0x86, 0x2b, 0xac, 0x8e, 0xa8, 0x45, 0x20, 0x2d, 0x18, 0x53, 0x21, 0xec, 0xd7, 0x5f, 0x60, 0x46, 0xc9, 0xcf, 0x7a, 0xf1, 0x16 ],
-const [ 0xc1, 0xd8, 0x01, 0x28, 0xfa, 0x20, 0x8b, 0xa1, 0x8b, 0xbb, 0x13, 0x42, 0x40, 0x12, 0xea, 0x65, 0x1e, 0xe7, 0x5e, 0x73, 0xf7, 0x96, 0xe9, 0x4c, 0x3b, 0x9a, 0xa9, 0xe9, 0x11, 0x52, 0x10, 0x40, 0xa6, 0x05, 0xdd, 0x67, 0xc5, 0x25, 0x4b, 0xfd, 0xa9, 0xd0, 0x88, 0xc6, 0x0f, 0x9c, 0x68, 0x95, 0x8f, 0x94, 0x5b, 0x6f, 0x2b, 0x7e, 0x9d, 0xed, 0x29, 0x60, 0xac, 0xe2, 0x1e, 0x42, 0xff, 0x3e, 0x4c, 0x34, 0xf5, 0x32, 0x2d, 0x93, 0x0c, 0x95, 0x50, 0x89, 0x53, 0x87, 0x64, 0xd3, 0x22, 0x54, 0x93, 0xc7, 0x08, 0x9b, 0x11, 0x95, 0x05, 0xaf, 0xf4, 0xcd, 0xf9, 0x3d, 0x46, 0x21, 0x5d, 0x2f, 0x58, 0x6d, 0x31, 0xd1, 0x5a, 0xf4, 0x35, 0x32, 0x29, 0xec, 0x5c, 0xce, 0x68, 0x3e, 0x7e, 0x69, 0xd2, 0x87, 0x4d, 0x3e, 0xce, 0x62, 0x8a, 0x59, 0x44, 0xe9, 0x79, 0x42, 0xb0, 0x79, 0x92, 0xdb ],
-const [ 0xf5, 0x7e, 0xa8, 0x4c, 0xaa, 0xa2, 0xaf, 0x18, 0xdd, 0x7e, 0xfd, 0xca, 0x35, 0x6b, 0x96, 0x25, 0xf9, 0xe7, 0x0d, 0x3a, 0x80, 0x3a, 0x9d, 0x31, 0xe9, 0x59, 0x76, 0x46, 0x0c, 0x0a, 0x55, 0x12, 0xaf, 0x49, 0x57, 0x0c, 0xfe, 0xea, 0x0f, 0x4f, 0x35, 0x81, 0xd6, 0x9e, 0xa0, 0x7f, 0x62, 0xa5, 0xc5, 0x9d, 0x9b, 0x81, 0xe0, 0x7e, 0xa9, 0x83, 0x8f, 0x8f, 0x52, 0x31, 0xcf, 0x33, 0x83, 0x8e, 0x27, 0x1d, 0x2c, 0x9c, 0x23, 0xfc, 0x51, 0x1e, 0x04, 0x5e, 0x5f, 0xa2, 0xb6, 0xce, 0xbc, 0xbf, 0x02, 0x40, 0xa1, 0x9c, 0x05, 0xb0, 0x2c, 0xb1, 0xe1, 0x05, 0xb1, 0xd2, 0xb2, 0x3b, 0x52, 0x69, 0xc4, 0xc1, 0xcf, 0x03, 0x03, 0x20, 0x9f, 0x0e, 0xb2, 0xde, 0x3f, 0xe0, 0x60, 0xa2, 0xca, 0xfc, 0x18, 0x98, 0xca, 0x91, 0xd9, 0x17, 0x4d, 0x44, 0x45, 0x82, 0x3c, 0x2f, 0x9d, 0x6c, 0xe9, 0x2a ],
-const [ 0x33, 0xca, 0x6e, 0xb7, 0xec, 0x10, 0x91, 0xb4, 0x06, 0xcf, 0x64, 0x49, 0x5c, 0xcf, 0xa2, 0x16, 0x9f, 0x47, 0xb3, 0xb5, 0x90, 0x47, 0x7d, 0x40, 0x73, 0x53, 0x7c, 0x14, 0xc0, 0x50, 0x15, 0xd5, 0x1b, 0xa5, 0x27, 0xb3, 0x86, 0x9a, 0xe4, 0xeb, 0xd6, 0x03, 0xdf, 0x90, 0x63, 0x23, 0x65, 0x8b, 0x04, 0xcb, 0x11, 0xe1, 0x3b, 0xc2, 0x9b, 0x34, 0xac, 0x69, 0xf1, 0x8d, 0xd4, 0x9f, 0x89, 0x58, 0xf7, 0xe3, 0xf5, 0xb0, 0x5a, 0xb8, 0xb8, 0xdd, 0xb3, 0x4e, 0x58, 0x1b, 0xde, 0x5e, 0xb4, 0x9d, 0xd1, 0x56, 0x98, 0xd2, 0xd2, 0xb6, 0x8f, 0xe7, 0xe8, 0xba, 0xf8, 0x8d, 0x8f, 0x39, 0x5c, 0xfc, 0xaf, 0xcd, 0xff, 0x38, 0xcf, 0x34, 0xb5, 0x93, 0x86, 0xf6, 0xf7, 0x73, 0x33, 0x48, 0x36, 0x55, 0xee, 0x31, 0x6f, 0x12, 0xbf, 0xeb, 0x00, 0x61, 0x0d, 0x8c, 0xba, 0x9e, 0x59, 0xe6, 0x37, 0xca ],
-const [ 0x74, 0xc4, 0xca, 0x4d, 0xb1, 0xaa, 0x81, 0x2b, 0x4d, 0x75, 0x85, 0x2c, 0x67, 0x17, 0x14, 0x63, 0x51, 0xe8, 0x32, 0x99, 0x44, 0x8f, 0xf8, 0x4d, 0x52, 0x26, 0x2f, 0xf9, 0x9d, 0x99, 0x1d, 0x97, 0xc7, 0x4f, 0x9f, 0x64, 0xa9, 0x0d, 0x78, 0xe4, 0x48, 0x17, 0xe9, 0x26, 0x04, 0x98, 0x82, 0x49, 0x13, 0x43, 0x37, 0x3f, 0x2e, 0x3b, 0xb6, 0xd1, 0x8a, 0x30, 0xf8, 0xe3, 0x0a, 0xcb, 0x16, 0xfa, 0xb3, 0x4d, 0x5f, 0xfb, 0x60, 0x73, 0xa7, 0x36, 0xb7, 0x9c, 0xe1, 0xa2, 0x5b, 0x2d, 0xf1, 0x6a, 0x63, 0x35, 0xbb, 0xa9, 0x0c, 0x4d, 0x80, 0x72, 0xaa, 0xc3, 0x6a, 0x14, 0xe5, 0xf7, 0x65, 0x9c, 0x21, 0x04, 0x31, 0x9b, 0x3e, 0xa3, 0xb5, 0x29, 0x82, 0x4d, 0x97, 0x29, 0xd3, 0xa0, 0x09, 0xcf, 0x2a, 0x04, 0xe6, 0x60, 0x44, 0x8e, 0xfd, 0x39, 0x9b, 0x25, 0xad, 0x13, 0x94, 0xe3, 0xb2, 0x85 ],
-const [ 0x68, 0xbb, 0x5b, 0x62, 0x89, 0x90, 0x75, 0x89, 0xf8, 0xd9, 0x1e, 0x46, 0xd4, 0x44, 0x17, 0xea, 0x80, 0xbf, 0x6b, 0xe1, 0x02, 0x45, 0xf5, 0x2b, 0xa9, 0xf8, 0x22, 0x11, 0xf3, 0x71, 0xf8, 0x10, 0xad, 0x54, 0x57, 0x1a, 0x5c, 0x27, 0x7f, 0xfe, 0xdc, 0x64, 0xd3, 0x24, 0x47, 0xcc, 0xdd, 0x7d, 0x19, 0xff, 0x91, 0xba, 0x91, 0x4a, 0xd6, 0xbc, 0x5a, 0xc0, 0x42, 0x4c, 0x6a, 0x8c, 0x25, 0x0d, 0x2b, 0x85, 0xca, 0xae, 0xd8, 0x03, 0xf9, 0x64, 0x2a, 0xf1, 0xc0, 0x98, 0x35, 0x24, 0x74, 0xdd, 0x8c, 0xeb, 0xf2, 0x24, 0xac, 0xe8, 0x2a, 0x33, 0x98, 0x1e, 0xdf, 0x53, 0xc0, 0x4a, 0xa8, 0x49, 0x27, 0x77, 0x3b, 0x88, 0xc5, 0xcd, 0xea, 0xa5, 0x2b, 0xaa, 0x6e, 0x0b, 0x65, 0xf4, 0xe4, 0xf0, 0x24, 0xad, 0x15, 0x88, 0x1d, 0xc7, 0xfa, 0x78, 0xac, 0x3a, 0x80, 0x8d, 0xbd, 0x55, 0x88, 0xae ],
-const [ 0x90, 0x0e, 0x41, 0x52, 0x13, 0x1d, 0x8c, 0x4d, 0xcc, 0x38, 0xa9, 0xe8, 0x64, 0x72, 0x34, 0xdf, 0xfc, 0x7c, 0xe8, 0x8e, 0xcb, 0xbb, 0x65, 0xa8, 0x08, 0x9d, 0x30, 0x2c, 0x0a, 0x2e, 0xfc, 0x95, 0xae, 0xe6, 0x28, 0x52, 0xf9, 0xc5, 0x88, 0x75, 0xfe, 0xa3, 0x68, 0xaf, 0x02, 0xc1, 0xce, 0x7c, 0xdf, 0xa3, 0x00, 0x9b, 0xa6, 0x22, 0x46, 0xc1, 0x88, 0xbd, 0xf1, 0x8e, 0xf7, 0x30, 0x9c, 0xc0, 0x08, 0x48, 0xb2, 0xa7, 0x1c, 0xf5, 0x31, 0xd9, 0xbf, 0xa1, 0xad, 0x26, 0xd0, 0xc0, 0x97, 0xce, 0xe3, 0xa8, 0xbf, 0xf2, 0xe3, 0xa3, 0x18, 0x49, 0xfc, 0x43, 0xbb, 0x14, 0xb7, 0xf6, 0x2f, 0x54, 0x67, 0xda, 0xe8, 0x3a, 0xc5, 0xd3, 0x0d, 0xdf, 0xd7, 0xda, 0x7f, 0x35, 0x16, 0x98, 0x16, 0x3e, 0xcf, 0x33, 0x2e, 0x7b, 0xca, 0x68, 0x62, 0xa8, 0x2a, 0xda, 0x97, 0xa6, 0x94, 0xa9, 0x3d, 0xb9 ],
-const [ 0x71, 0x59, 0xec, 0xc1, 0x45, 0xa3, 0xf9, 0x19, 0x04, 0x4c, 0x85, 0x1a, 0x4e, 0xca, 0x42, 0x82, 0x79, 0x62, 0x6e, 0x68, 0xcd, 0x8f, 0xa4, 0xc5, 0xf4, 0xa7, 0xf9, 0x32, 0xac, 0xbc, 0x44, 0xf3, 0xbf, 0xc0, 0xbd, 0x35, 0x35, 0xed, 0xca, 0x94, 0xc8, 0x64, 0x15, 0xe0, 0x98, 0x15, 0xe2, 0x21, 0x20, 0xde, 0xa0, 0xd8, 0x69, 0xf7, 0xbd, 0x88, 0x7d, 0x8d, 0xbf, 0x75, 0x1f, 0xad, 0x91, 0xac, 0xb9, 0x64, 0x1a, 0x43, 0x96, 0x25, 0x14, 0xe2, 0x51, 0x6a, 0x1c, 0x83, 0x8e, 0x9e, 0x05, 0x75, 0xe7, 0x3b, 0x72, 0xa7, 0x2a, 0x30, 0xa4, 0x23, 0xc1, 0x85, 0x90, 0xd9, 0x71, 0x41, 0x35, 0x9e, 0x48, 0x8c, 0x2c, 0x74, 0xd0, 0x11, 0x81, 0x0c, 0x89, 0xa6, 0xc1, 0x89, 0x96, 0x2f, 0x54, 0x87, 0xb7, 0xbf, 0x0d, 0x5c, 0x77, 0x01, 0x00, 0x9d, 0xa7, 0xd7, 0x94, 0xe5, 0x0a, 0x40, 0xd9, 0xd1 ],
-const [ 0x93, 0x9b, 0xfa, 0xab, 0x9f, 0x60, 0x36, 0x95, 0x42, 0x92, 0x8b, 0x14, 0x90, 0x89, 0x42, 0x59, 0xc2, 0x27, 0x06, 0x74, 0x7f, 0x0c, 0x48, 0x21, 0x5b, 0x08, 0xe1, 0xe5, 0x9e, 0xd6, 0xf9, 0x5a, 0x46, 0x07, 0x28, 0xc7, 0x4f, 0x3c, 0xdc, 0xf4, 0x31, 0x98, 0xfb, 0x3d, 0xab, 0x75, 0xc9, 0xe4, 0xbf, 0x56, 0x0b, 0xac, 0xfe, 0x1d, 0x6d, 0xa3, 0x05, 0x7f, 0x21, 0x3f, 0x48, 0xb4, 0xc9, 0xac, 0x0e, 0x73, 0x97, 0x65, 0xbd, 0x1d, 0xb2, 0x02, 0x58, 0x39, 0xdc, 0x50, 0x46, 0x20, 0x53, 0xa7, 0x55, 0xf9, 0xf4, 0x78, 0xfe, 0xe8, 0xa6, 0x26, 0xeb, 0x83, 0xf6, 0x17, 0xb6, 0x86, 0xff, 0x0a, 0xf4, 0xc7, 0x8d, 0xab, 0x72, 0x6c, 0x82, 0x64, 0xbe, 0x5b, 0x78, 0x77, 0xe9, 0xf2, 0xa7, 0x4a, 0x8c, 0xf9, 0x09, 0x01, 0x09, 0xd4, 0xbd, 0x52, 0x13, 0xfd, 0xaa, 0x95, 0x71, 0xb2, 0x64, 0x1b ],
-const [ 0x29, 0xba, 0x20, 0x50, 0x89, 0xb1, 0x2e, 0x8b, 0xe5, 0xb4, 0x22, 0xfa, 0xf9, 0x9c, 0x3d, 0x69, 0xaa, 0xca, 0x32, 0x4e, 0xeb, 0x73, 0x2d, 0xb8, 0xe1, 0x3c, 0x14, 0x82, 0x45, 0x07, 0x0d, 0xcc, 0x0b, 0x0c, 0x40, 0xab, 0x41, 0x2b, 0xde, 0x20, 0x39, 0x80, 0x62, 0x47, 0xea, 0x39, 0x17, 0xd1, 0x94, 0xa4, 0xda, 0xb4, 0xa3, 0x8c, 0x21, 0x21, 0xd6, 0xc6, 0x3c, 0xb7, 0xa0, 0x07, 0xdb, 0xf6, 0xcf, 0xf9, 0xd1, 0xf6, 0x6b, 0x8d, 0x17, 0x59, 0xe1, 0x92, 0x14, 0x7e, 0x60, 0x87, 0x1b, 0xf7, 0x84, 0xad, 0x36, 0x3e, 0x32, 0x61, 0x22, 0xa3, 0xc3, 0xa9, 0x9a, 0x89, 0x64, 0x0d, 0xd9, 0xd2, 0xbc, 0xa8, 0x5a, 0x98, 0xd0, 0x7e, 0xe2, 0x1e, 0x24, 0x10, 0xc0, 0x06, 0x23, 0x2e, 0x53, 0xc4, 0xc1, 0x0d, 0xce, 0x52, 0x5f, 0x99, 0x38, 0x25, 0xef, 0x0c, 0xb7, 0x61, 0x58, 0xc0, 0x0d, 0x49 ],
-const [ 0xf7, 0x32, 0x17, 0x18, 0xbb, 0xd3, 0xb4, 0x01, 0xfb, 0x5d, 0x72, 0xf2, 0xe8, 0x93, 0x1a, 0x5e, 0xbb, 0x18, 0xd2, 0xa1, 0xec, 0xd4, 0xf1, 0x89, 0xa5, 0x99, 0x12, 0x15, 0x76, 0x07, 0x68, 0x7c, 0x4a, 0xad, 0x51, 0x71, 0x9a, 0x70, 0x2d, 0xa6, 0xe0, 0x31, 0x70, 0x8f, 0x4f, 0xaa, 0xf6, 0x68, 0xc1, 0x99, 0x97, 0x79, 0xf1, 0x21, 0xfc, 0x99, 0xea, 0x6d, 0xb0, 0xf1, 0xbf, 0x96, 0x7a, 0x02, 0x7d, 0xc7, 0xeb, 0xea, 0x5e, 0x9f, 0x33, 0xe2, 0x3f, 0xd6, 0x39, 0x0c, 0x54, 0x24, 0xea, 0x6c, 0x1b, 0x5e, 0xd0, 0x33, 0x8e, 0xe3, 0xe7, 0x44, 0x9d, 0x36, 0xad, 0xf1, 0xdb, 0xec, 0x79, 0x05, 0x78, 0xc9, 0x0d, 0x08, 0x6f, 0x26, 0x6e, 0xbe, 0x00, 0x95, 0xf4, 0xf1, 0x61, 0xc8, 0x9d, 0x70, 0xb1, 0xaf, 0xa6, 0x58, 0x2d, 0xe1, 0x5d, 0x92, 0xa6, 0x3d, 0x31, 0x9d, 0x33, 0xd1, 0x0b, 0x8e ],
-const [ 0xcf, 0x25, 0xd6, 0x19, 0xfb, 0x46, 0xbf, 0xbc, 0x39, 0x55, 0x79, 0x14, 0xdd, 0xa0, 0x2d, 0x76, 0x7a, 0xc5, 0x11, 0x12, 0x0d, 0x17, 0x3b, 0x78, 0x77, 0x43, 0xb3, 0x5b, 0x31, 0x34, 0xcb, 0x94, 0x3b, 0x33, 0xb3, 0x69, 0x55, 0x53, 0x48, 0x10, 0x72, 0x0c, 0x2d, 0x6f, 0x6a, 0x26, 0x1d, 0x26, 0xef, 0xd8, 0x7f, 0xcf, 0xc2, 0x32, 0x3b, 0x84, 0x26, 0xb8, 0xcd, 0xa2, 0x96, 0x50, 0x98, 0xcd, 0xb3, 0x5e, 0x7c, 0x35, 0x80, 0x2d, 0xaa, 0x17, 0xd1, 0x91, 0xb7, 0x86, 0x01, 0xca, 0xf0, 0x6b, 0xe4, 0xac, 0xee, 0xcb, 0xfc, 0xfd, 0x6a, 0x48, 0xf0, 0x1f, 0x52, 0xeb, 0x39, 0xee, 0x1b, 0x20, 0x1f, 0xec, 0x5a, 0x02, 0xe4, 0x9c, 0x8e, 0xd9, 0x3f, 0x2b, 0x40, 0xe1, 0x0c, 0x55, 0x4f, 0x4e, 0x41, 0x87, 0x85, 0x8c, 0x24, 0x41, 0x6d, 0xcb, 0xbb, 0xbf, 0x69, 0xbb, 0x84, 0xd8, 0xff, 0x94 ],
-const [ 0xe2, 0xa2, 0x6c, 0xa1, 0x37, 0x02, 0x70, 0x66, 0xaf, 0x85, 0x64, 0x53, 0xd2, 0xa4, 0xad, 0xc4, 0xd5, 0xd0, 0xc9, 0xd5, 0xbf, 0x06, 0x8f, 0x8a, 0xca, 0xa4, 0xb7, 0x4d, 0x0c, 0x7b, 0x9c, 0x9e, 0x56, 0x25, 0x41, 0x06, 0x5d, 0x98, 0x92, 0x4c, 0x17, 0xfc, 0xed, 0xec, 0x68, 0xba, 0xe1, 0xc5, 0xfe, 0xd6, 0x36, 0x12, 0x7a, 0x7e, 0x2d, 0x9b, 0xd0, 0xe3, 0x08, 0x2d, 0xf0, 0x47, 0xcd, 0x47, 0xa6, 0x57, 0x48, 0x16, 0xbe, 0xbc, 0x4f, 0xa3, 0x6d, 0xed, 0x4a, 0x4c, 0xec, 0x47, 0xf2, 0x71, 0x66, 0x5f, 0x58, 0x6f, 0x14, 0x97, 0x29, 0xd2, 0xa7, 0xef, 0x31, 0xc6, 0xe6, 0x1e, 0x1f, 0xcf, 0x98, 0xe2, 0x88, 0xba, 0xa4, 0x94, 0x2e, 0xd4, 0x77, 0xff, 0x81, 0x59, 0xa6, 0x72, 0x66, 0x2f, 0xd4, 0x14, 0x38, 0xd4, 0xd7, 0x78, 0x0c, 0x96, 0x16, 0x71, 0x3a, 0x02, 0x35, 0x28, 0x19, 0x9e ],
-const [ 0x3b, 0x9a, 0x49, 0x48, 0xd6, 0x7d, 0xc8, 0x94, 0xd7, 0x0c, 0x9e, 0xc3, 0x71, 0x04, 0xa7, 0x14, 0x7e, 0x22, 0xbc, 0xcc, 0xb9, 0x89, 0x83, 0xc2, 0x2d, 0x64, 0x8b, 0x21, 0xed, 0xcc, 0x98, 0x6a, 0x06, 0xec, 0x3b, 0xb8, 0xb2, 0x63, 0xa6, 0x48, 0xce, 0xe9, 0xbf, 0x38, 0x8e, 0x36, 0x73, 0x8f, 0x70, 0x20, 0x4d, 0x7e, 0x6e, 0x03, 0x47, 0xe6, 0x78, 0x65, 0xe0, 0x19, 0x21, 0xda, 0x6e, 0xe5, 0x99, 0x26, 0xb6, 0xcf, 0xdb, 0xa2, 0xba, 0x9c, 0x27, 0xe1, 0xd2, 0x16, 0xb3, 0x92, 0xfe, 0x0c, 0x9e, 0xa8, 0x7b, 0x9b, 0x25, 0xb9, 0x94, 0xac, 0x19, 0xa4, 0xbb, 0xbe, 0x90, 0x77, 0xd8, 0xe6, 0xdc, 0x90, 0xe1, 0x13, 0xb9, 0x02, 0xab, 0x97, 0xca, 0x3a, 0x00, 0xe3, 0x47, 0xe2, 0xf1, 0x92, 0xf0, 0x05, 0x6d, 0xaa, 0x45, 0x74, 0x13, 0x1e, 0xf8, 0x69, 0x45, 0x97, 0xa3, 0x6b, 0x7e, 0x73 ],
-const [ 0x93, 0x5a, 0x3c, 0x27, 0x24, 0x9d, 0xcf, 0x92, 0xae, 0xda, 0xc8, 0xdc, 0x76, 0xd2, 0x2f, 0xf7, 0x74, 0x2e, 0x5c, 0xee, 0x57, 0x71, 0x17, 0x78, 0xc9, 0x2a, 0xfd, 0xcd, 0xf3, 0x6e, 0x26, 0xb8, 0x44, 0x85, 0x04, 0xee, 0x6e, 0xe4, 0x8e, 0x9e, 0xb2, 0x5b, 0x9e, 0x49, 0x5e, 0x90, 0x98, 0xd4, 0x94, 0xac, 0x4d, 0xdc, 0x4c, 0x54, 0x1f, 0x49, 0x9c, 0xdb, 0x65, 0x26, 0x38, 0xb6, 0x11, 0xb0, 0x35, 0x30, 0x90, 0xac, 0x12, 0x5f, 0xf1, 0xfe, 0xf8, 0x56, 0x4a, 0x78, 0x41, 0x9c, 0x57, 0xf0, 0x38, 0xdd, 0x65, 0x95, 0x1f, 0xe0, 0x6e, 0x83, 0x77, 0xb9, 0x86, 0x94, 0x7b, 0x40, 0x75, 0x79, 0xee, 0xc1, 0xa6, 0x0a, 0x16, 0xf5, 0x40, 0xdb, 0x09, 0x31, 0x92, 0x10, 0x27, 0xde, 0xb4, 0x72, 0xe8, 0x29, 0x6b, 0xc2, 0xd8, 0xfb, 0x4e, 0x4d, 0xdf, 0x2c, 0x27, 0xc0, 0xc6, 0xf4, 0x9c, 0x3e ],
-const [ 0x54, 0x85, 0x64, 0xe5, 0xb7, 0x37, 0x04, 0x26, 0xd5, 0x75, 0xbb, 0xe8, 0x17, 0x5b, 0x48, 0xc2, 0x44, 0xde, 0xdc, 0xef, 0x3d, 0xaf, 0x72, 0x52, 0xec, 0x62, 0x5f, 0xb7, 0x77, 0xd0, 0x2a, 0x5c, 0xb9, 0xba, 0x9d, 0xb0, 0xf2, 0xaf, 0x1c, 0x5a, 0xbd, 0x2f, 0x36, 0x7d, 0x43, 0x10, 0x7a, 0x3a, 0xaf, 0x21, 0x8c, 0x77, 0xe2, 0x0e, 0x78, 0xdf, 0x67, 0x83, 0x45, 0x2a, 0xa9, 0x94, 0xce, 0x9f, 0x63, 0x5d, 0xcd, 0xd7, 0x59, 0xe5, 0x39, 0xc3, 0x46, 0x49, 0xd2, 0xf1, 0x15, 0x16, 0xfa, 0x0a, 0x53, 0xf6, 0xc6, 0xa0, 0xe5, 0x8f, 0x55, 0x26, 0xf6, 0xa8, 0x60, 0x40, 0x34, 0x8d, 0x13, 0x3e, 0x3c, 0xb5, 0x1b, 0xe2, 0x52, 0xa3, 0x01, 0x6a, 0x56, 0x0a, 0xb6, 0xca, 0xf3, 0x34, 0x6f, 0x3a, 0x1a, 0xa4, 0xb2, 0xf0, 0xaf, 0xfb, 0xb1, 0x2f, 0x82, 0x18, 0xd8, 0x80, 0x80, 0x83, 0xa2, 0x40 ],
-const [ 0xdd, 0x80, 0x26, 0x35, 0xf7, 0x14, 0x06, 0x03, 0x81, 0xd2, 0xee, 0x1d, 0xfb, 0x50, 0xf2, 0xda, 0xac, 0xc6, 0x37, 0x59, 0x89, 0x65, 0xfa, 0x71, 0x58, 0xea, 0xd3, 0xeb, 0x15, 0x72, 0x3b, 0xef, 0x95, 0x90, 0x4d, 0xbd, 0x69, 0x9d, 0xc9, 0x9e, 0x05, 0x4f, 0x5e, 0x19, 0x22, 0x8d, 0x29, 0x69, 0x60, 0x82, 0x79, 0x2f, 0x30, 0xf1, 0xd5, 0x65, 0xf1, 0xc8, 0x40, 0x93, 0x59, 0xf7, 0xbb, 0x45, 0x17, 0x82, 0x0c, 0xbc, 0xb6, 0xd5, 0xbe, 0xe4, 0xc5, 0x59, 0x69, 0x86, 0x35, 0x44, 0x33, 0xbf, 0x02, 0xb5, 0x97, 0xb1, 0x16, 0x00, 0x65, 0x78, 0x6a, 0x46, 0x0a, 0x5f, 0x6e, 0x4a, 0x12, 0x54, 0xab, 0x7f, 0xeb, 0x9a, 0xa6, 0x66, 0xec, 0xbe, 0x08, 0x16, 0x95, 0xcc, 0xfd, 0x1c, 0x19, 0xc2, 0xda, 0x86, 0x19, 0x45, 0x02, 0x3b, 0xb3, 0x93, 0x0a, 0x8e, 0xbb, 0xb9, 0x1b, 0x12, 0x48, 0x06 ],
-const [ 0xe8, 0x0a, 0x11, 0x27, 0x13, 0xb2, 0xe0, 0xaa, 0xfd, 0xdf, 0xdb, 0x71, 0xc0, 0x91, 0x14, 0x17, 0x19, 0xe1, 0x50, 0x1c, 0x1c, 0xe5, 0x5e, 0xe5, 0x26, 0xd4, 0xa8, 0x04, 0x14, 0x6a, 0x08, 0xba, 0xb2, 0x8e, 0xdd, 0xba, 0x76, 0x33, 0x5d, 0x30, 0x6f, 0x7c, 0x2d, 0x02, 0x78, 0x23, 0x2f, 0x56, 0xb1, 0x1b, 0x9b, 0x54, 0x30, 0x74, 0x51, 0x2d, 0xf3, 0x80, 0x6d, 0x5c, 0x19, 0x34, 0x1c, 0x2c, 0x52, 0xd0, 0xaf, 0x7a, 0x95, 0xc3, 0xee, 0xbc, 0x11, 0xc8, 0xaf, 0x42, 0x65, 0x56, 0xa7, 0xbc, 0x13, 0x37, 0x7f, 0xfd, 0x32, 0x76, 0x2a, 0xfe, 0x64, 0x7f, 0x77, 0x26, 0x08, 0x82, 0xe2, 0xc8, 0xb1, 0x18, 0xb0, 0xee, 0xd6, 0x29, 0x3b, 0x55, 0xcb, 0x0d, 0x8a, 0xb8, 0xef, 0xf1, 0x24, 0x51, 0x28, 0x7d, 0x26, 0x9e, 0x8c, 0xb4, 0x94, 0x61, 0x61, 0x1b, 0xed, 0xea, 0x48, 0x1d, 0x02, 0x98 ],
-const [ 0x7e, 0x5d, 0x6e, 0x5e, 0x94, 0x91, 0xa9, 0x65, 0x96, 0x8a, 0x08, 0xad, 0xcb, 0xfb, 0xbd, 0xb1, 0x99, 0x49, 0xf0, 0x09, 0x03, 0xf7, 0x61, 0x82, 0x70, 0x62, 0x4e, 0x74, 0xae, 0xae, 0x97, 0x50, 0x36, 0x00, 0x20, 0x79, 0xb2, 0xed, 0x77, 0x55, 0xbc, 0x33, 0xb7, 0xa3, 0xe9, 0xa7, 0xac, 0x0f, 0x06, 0x6f, 0x37, 0x03, 0xa1, 0x71, 0xf4, 0xc1, 0xcc, 0x0b, 0x1b, 0xaf, 0x1d, 0x05, 0xa4, 0xf1, 0xf9, 0xc4, 0xaf, 0x3d, 0x12, 0xc0, 0x22, 0xeb, 0x2f, 0x38, 0x94, 0x4c, 0x2c, 0x24, 0x6a, 0x3d, 0x41, 0x6b, 0x3f, 0xfc, 0x87, 0x56, 0x8a, 0x3a, 0xb7, 0x44, 0x7a, 0x71, 0x35, 0xa0, 0x25, 0x77, 0x4e, 0x11, 0xe2, 0x54, 0xbe, 0xf0, 0xf3, 0x51, 0x76, 0xff, 0x68, 0x51, 0x9c, 0x58, 0x3f, 0x64, 0xd2, 0xa3, 0xd0, 0x9a, 0xbb, 0x8c, 0x69, 0x15, 0xbb, 0x75, 0x35, 0x62, 0xff, 0x67, 0x62, 0x0a ],
-const [ 0xfc, 0x06, 0x24, 0xc9, 0xd2, 0xfb, 0x23, 0x77, 0x07, 0xdf, 0x2c, 0x7b, 0xd9, 0x09, 0x0b, 0x03, 0x13, 0x29, 0x83, 0x54, 0x32, 0xd9, 0x93, 0x04, 0xc5, 0x75, 0xf8, 0x69, 0x1a, 0x2d, 0xf3, 0x51, 0x16, 0x58, 0x4c, 0xf3, 0x65, 0x0b, 0x97, 0x26, 0xd4, 0xeb, 0xb6, 0xd1, 0xfa, 0x3f, 0x9f, 0xa3, 0x1e, 0x4a, 0x60, 0x04, 0x55, 0xd7, 0x60, 0x4b, 0xeb, 0x15, 0xe7, 0x31, 0x04, 0xa5, 0xe0, 0x85, 0x83, 0xf2, 0xde, 0x22, 0x2b, 0xc1, 0x5e, 0x1f, 0x04, 0x09, 0x4c, 0x45, 0x01, 0x04, 0xc8, 0xc6, 0xdf, 0x86, 0x29, 0x2b, 0x50, 0x8e, 0x42, 0x8f, 0x59, 0x1a, 0xe5, 0x0b, 0xf9, 0x40, 0xa6, 0x71, 0x0b, 0x7b, 0xe1, 0x3d, 0x6d, 0x43, 0xff, 0xc8, 0x62, 0xe0, 0xf4, 0xbf, 0x35, 0x7f, 0x0c, 0xd4, 0x20, 0x86, 0xe8, 0xb3, 0x6b, 0x25, 0xc3, 0x38, 0xd8, 0x2d, 0xfb, 0xdf, 0x3f, 0x26, 0xcc, 0x7c ],
-const [ 0xe3, 0x5d, 0xc1, 0xd0, 0xe4, 0x14, 0xae, 0x0e, 0x58, 0x6e, 0xbe, 0xc9, 0xa4, 0x4c, 0x19, 0x18, 0xd7, 0x95, 0xdb, 0x37, 0x8a, 0x89, 0x17, 0x7d, 0x0b, 0x52, 0x1c, 0x8e, 0xba, 0xdc, 0xf6, 0xd2, 0xb2, 0xe7, 0x38, 0x26, 0xac, 0x5b, 0xf9, 0xd1, 0x21, 0xdb, 0x1d, 0xb9, 0xaf, 0x9c, 0xd6, 0xd7, 0xbe, 0x78, 0x69, 0xe8, 0x63, 0x3e, 0x36, 0x65, 0x85, 0x4d, 0xf3, 0xb6, 0x3e, 0x61, 0x38, 0xa3, 0x83, 0xac, 0x40, 0x0b, 0x08, 0x29, 0xee, 0xd8, 0x5e, 0x2d, 0x0e, 0x32, 0x5e, 0x3f, 0xde, 0xf3, 0xcb, 0x29, 0xcc, 0x5b, 0x33, 0x4f, 0x82, 0x06, 0x16, 0x40, 0x20, 0x1a, 0x4b, 0x8b, 0xc8, 0xc5, 0x9e, 0xd4, 0x60, 0xe7, 0xbe, 0x26, 0x93, 0x0b, 0x57, 0x8b, 0x19, 0x9c, 0x7b, 0xda, 0x39, 0x56, 0x46, 0xd1, 0x8c, 0xfa, 0xc2, 0x63, 0x03, 0x46, 0x08, 0x53, 0x2b, 0x24, 0xa8, 0x02, 0xb0, 0x22 ],
-const [ 0xdc, 0x43, 0x54, 0xff, 0x55, 0x7d, 0xfa, 0x58, 0xb1, 0x7a, 0x0e, 0x38, 0xf6, 0x3a, 0x61, 0xc2, 0x0e, 0x0f, 0xd1, 0xeb, 0x6c, 0xac, 0x10, 0x2c, 0xf3, 0x7f, 0xa7, 0x79, 0x13, 0x41, 0x3a, 0x77, 0x35, 0xcb, 0x0d, 0xea, 0x59, 0x2b, 0xc7, 0x6c, 0xfd, 0xf7, 0x76, 0x65, 0x41, 0xe1, 0xd4, 0x37, 0x4a, 0x8c, 0xc9, 0xb9, 0xe4, 0x9e, 0x30, 0xe7, 0x6b, 0x17, 0xde, 0xd8, 0xeb, 0xe1, 0xe0, 0xf0, 0x86, 0xa7, 0x05, 0x56, 0x16, 0xeb, 0x9d, 0xa8, 0x14, 0x53, 0x7f, 0xee, 0xb9, 0x44, 0x51, 0xcd, 0x62, 0xb2, 0x03, 0xfe, 0x39, 0x37, 0x9d, 0xfe, 0x12, 0x62, 0x3b, 0x06, 0x93, 0x51, 0x55, 0x3d, 0x98, 0x82, 0x44, 0x2d, 0xd5, 0xe6, 0x02, 0x73, 0xbe, 0x37, 0x32, 0xbb, 0xa3, 0x8c, 0x60, 0xec, 0x20, 0x2b, 0x89, 0xa0, 0xb4, 0x9e, 0xde, 0xd7, 0xb0, 0x09, 0xc5, 0xec, 0x53, 0xba, 0x21, 0xc8 ],
-const [ 0x36, 0x58, 0x1b, 0x49, 0x8c, 0xc8, 0xb9, 0xea, 0x79, 0xde, 0x28, 0xca, 0x91, 0xa9, 0xcd, 0x0a, 0x87, 0xe3, 0x0b, 0xce, 0xfe, 0x73, 0xb9, 0xe5, 0x9c, 0x37, 0xd3, 0xa8, 0x60, 0x01, 0x6f, 0x24, 0x36, 0xdf, 0xf3, 0x7b, 0xc9, 0xa0, 0x86, 0x87, 0x99, 0x93, 0xc4, 0xc1, 0x4d, 0x92, 0xb6, 0x61, 0x4a, 0x3f, 0x01, 0xc7, 0x84, 0x8e, 0x5d, 0x1a, 0x94, 0x84, 0x49, 0x2f, 0x0c, 0x3e, 0xfe, 0xac, 0x07, 0x34, 0xa1, 0x6d, 0x04, 0xbf, 0xbc, 0x26, 0xf4, 0xd9, 0xef, 0x4a, 0x91, 0x24, 0xe3, 0x2c, 0xf2, 0x2f, 0x80, 0x65, 0x5c, 0xf4, 0x60, 0x75, 0x5c, 0xa5, 0x83, 0xad, 0x12, 0xa8, 0x44, 0x4c, 0xd0, 0xe0, 0x8b, 0xe8, 0xe4, 0x2e, 0x45, 0x0f, 0xb1, 0x37, 0x11, 0x2f, 0x05, 0x68, 0x3c, 0xb3, 0xa6, 0x38, 0xf0, 0x6f, 0x2e, 0xad, 0xa8, 0x3e, 0x19, 0x22, 0xe7, 0xe9, 0x1d, 0x47, 0x2a, 0x4b ],
-const [ 0x45, 0xae, 0x84, 0xfe, 0x11, 0x07, 0x87, 0x13, 0xbc, 0x87, 0xc4, 0x65, 0xe8, 0xd8, 0x8f, 0x0b, 0x23, 0xe2, 0x80, 0x4a, 0x6a, 0x3e, 0x19, 0xaf, 0xeb, 0xee, 0xaa, 0x5a, 0x0f, 0x4c, 0x72, 0x9d, 0xb8, 0x41, 0x07, 0xc6, 0xc8, 0xb7, 0xf8, 0x38, 0xe2, 0x51, 0xb0, 0xc1, 0x74, 0x59, 0x9d, 0x27, 0xf5, 0xfa, 0x92, 0x04, 0x6b, 0xaf, 0x6a, 0xd4, 0x31, 0xfb, 0xef, 0x4d, 0xf7, 0x5b, 0xfa, 0xef, 0x0a, 0x79, 0xdb, 0xdb, 0xd6, 0xa2, 0xfa, 0xe8, 0xa9, 0x7a, 0xbf, 0xf4, 0xb9, 0xee, 0xb0, 0x78, 0x69, 0x6b, 0xd9, 0x5f, 0xc8, 0x4d, 0x71, 0x19, 0x5a, 0x9b, 0xba, 0xeb, 0x1c, 0xf1, 0x29, 0x89, 0xc2, 0xbd, 0xc7, 0xe6, 0x43, 0xae, 0xd7, 0x4b, 0x97, 0x6a, 0xb9, 0xa7, 0xbf, 0x80, 0x0e, 0x26, 0x07, 0x9d, 0x1d, 0x04, 0x88, 0x02, 0x76, 0xa4, 0xf0, 0x35, 0xd4, 0xdc, 0x86, 0xf7, 0x48, 0x93 ],
-const [ 0xf6, 0xf8, 0x3f, 0xf6, 0xdd, 0xf3, 0x86, 0xbd, 0xf3, 0xaf, 0x94, 0x09, 0xef, 0x5c, 0xef, 0x16, 0xac, 0xb3, 0x76, 0x18, 0x23, 0x22, 0xf5, 0x7b, 0x97, 0x29, 0xf7, 0x6f, 0x0f, 0x04, 0xdb, 0xa4, 0x09, 0x8a, 0x2a, 0x52, 0x6d, 0x55, 0x28, 0x7d, 0xc0, 0x23, 0xa9, 0x77, 0x9a, 0x7c, 0x26, 0xa6, 0x5a, 0x95, 0x10, 0x87, 0x18, 0x75, 0x64, 0xf3, 0xdb, 0x56, 0x80, 0xa2, 0x0c, 0x4e, 0x35, 0xed, 0x2b, 0x2e, 0x1d, 0xd8, 0xc1, 0xab, 0x2f, 0x4f, 0x96, 0xbb, 0x90, 0xb0, 0x23, 0x42, 0xac, 0x8a, 0x4a, 0xee, 0x86, 0xa5, 0x45, 0x5f, 0x4c, 0x42, 0xdd, 0x8c, 0x2f, 0xa3, 0xdc, 0x62, 0x72, 0xce, 0xc4, 0xae, 0xc0, 0x8f, 0xc1, 0x3c, 0xc2, 0xbc, 0xdd, 0x40, 0xf1, 0xbc, 0x73, 0xf6, 0xa9, 0x4a, 0xe6, 0x86, 0x7f, 0x77, 0x92, 0x2a, 0xd5, 0xee, 0x03, 0x92, 0xac, 0x7c, 0x65, 0x88, 0xb9, 0xd0 ],
-const [ 0x25, 0xc0, 0x4b, 0x85, 0x7a, 0x22, 0x43, 0x89, 0xe8, 0xa2, 0xa3, 0x04, 0xe1, 0xbb, 0x8e, 0xe1, 0xb3, 0x52, 0xe4, 0xcf, 0x5c, 0x3c, 0xb6, 0xe9, 0x9f, 0x01, 0xfd, 0x95, 0x57, 0xdf, 0x8b, 0xac, 0x0c, 0x12, 0x41, 0xdc, 0xc4, 0x53, 0x83, 0x4b, 0x1b, 0x9f, 0xe9, 0x7d, 0x96, 0x39, 0x37, 0x78, 0x35, 0xf2, 0x90, 0x26, 0x47, 0xa8, 0xe6, 0xfa, 0x82, 0x0d, 0xb5, 0xd6, 0x53, 0xa9, 0xf1, 0x2d, 0x73, 0x23, 0x3d, 0x65, 0xbb, 0xbc, 0x5d, 0x7f, 0x39, 0x1c, 0xee, 0xf9, 0x83, 0x51, 0x54, 0xf3, 0x4b, 0x15, 0xf5, 0x92, 0x34, 0x4f, 0xa5, 0xa2, 0xe4, 0xdd, 0x60, 0x7f, 0x5b, 0x91, 0x3f, 0x35, 0x83, 0x79, 0xa5, 0xe6, 0x08, 0x64, 0xb9, 0x6c, 0x69, 0xa1, 0x1a, 0x40, 0x50, 0x0a, 0xce, 0x9a, 0x1f, 0x42, 0x7b, 0xda, 0xcb, 0x3a, 0xd9, 0x27, 0xed, 0xfa, 0x67, 0x56, 0x16, 0x9e, 0x5d, 0x0d ],
-const [ 0x6c, 0x15, 0xd1, 0x68, 0x6e, 0x68, 0x0c, 0x5a, 0xee, 0x29, 0x41, 0x90, 0x0d, 0xc9, 0xaf, 0x9d, 0x25, 0x03, 0xb3, 0xb6, 0xa5, 0x62, 0x3f, 0x5c, 0x1c, 0x04, 0x87, 0x3c, 0x93, 0x9d, 0xfd, 0x53, 0x20, 0xbe, 0x80, 0x55, 0xb8, 0x58, 0xd0, 0x50, 0x45, 0x7c, 0x46, 0x8c, 0xf8, 0x64, 0xc2, 0xb7, 0xe1, 0xb7, 0xe4, 0x3e, 0xbd, 0x09, 0x7f, 0xfe, 0x0f, 0xa1, 0x4a, 0x1c, 0x72, 0x80, 0xd9, 0x31, 0x2d, 0x9f, 0xcc, 0xab, 0x08, 0x77, 0x47, 0x70, 0x5e, 0xc6, 0xa2, 0xc4, 0x74, 0x91, 0x61, 0x6c, 0x09, 0x65, 0x66, 0x13, 0x2e, 0xe3, 0x65, 0xee, 0x58, 0x7c, 0x99, 0x9c, 0xb4, 0x78, 0xb5, 0x50, 0xba, 0x3d, 0x1e, 0x31, 0x05, 0xce, 0x57, 0x01, 0x62, 0x92, 0xbc, 0xfd, 0x27, 0x57, 0x74, 0x05, 0xc6, 0x96, 0xa1, 0xfd, 0xa1, 0xf8, 0xd9, 0x73, 0x20, 0x1a, 0xda, 0x82, 0x01, 0x8d, 0x79, 0xf6 ],
-const [ 0xb9, 0x9a, 0x11, 0x0b, 0xee, 0x03, 0xf4, 0x40, 0xf1, 0x51, 0x45, 0xe2, 0x8d, 0x32, 0xc3, 0x40, 0x29, 0x7f, 0xb8, 0x10, 0xef, 0xcc, 0x36, 0xa8, 0x2e, 0x3d, 0xa1, 0x71, 0xfc, 0x9b, 0x6d, 0x98, 0x1f, 0xa6, 0x29, 0x06, 0x2e, 0xad, 0xbd, 0x93, 0xf3, 0x5d, 0xf0, 0x76, 0x14, 0xd7, 0x2d, 0x00, 0xf2, 0x05, 0x86, 0x8b, 0xd2, 0x2d, 0xf9, 0xad, 0x3b, 0xc6, 0xf2, 0xb1, 0x9e, 0x8b, 0x12, 0x47, 0x3d, 0xcf, 0x2f, 0x7a, 0x45, 0x10, 0x9c, 0xe3, 0x3d, 0xce, 0xaa, 0x1c, 0xa4, 0x9d, 0x6e, 0x78, 0xd6, 0x7a, 0xc5, 0xf1, 0x30, 0x5b, 0x96, 0x62, 0x74, 0x0a, 0x57, 0xf7, 0x6f, 0x32, 0xd3, 0xe1, 0xd9, 0xba, 0x2a, 0x4e, 0x7c, 0x53, 0x19, 0x98, 0x99, 0x4d, 0x7b, 0xbc, 0x87, 0xaf, 0x10, 0x0f, 0x9d, 0x86, 0x7e, 0x2c, 0x52, 0x7d, 0x95, 0x31, 0xa3, 0xae, 0xd7, 0x2b, 0xb5, 0xb8, 0x38, 0xce ],
-const [ 0xc8, 0x21, 0xbe, 0x1c, 0xce, 0x09, 0x57, 0x9e, 0xa8, 0x99, 0x89, 0x9d, 0x24, 0xf8, 0x32, 0x99, 0x94, 0xc2, 0xc8, 0x39, 0xcf, 0x00, 0x84, 0xe2, 0x78, 0x57, 0xc6, 0x88, 0x83, 0x7f, 0xb5, 0xc4, 0xf4, 0xf7, 0x25, 0x27, 0xea, 0xf7, 0xbf, 0xcf, 0xdd, 0xa7, 0x5b, 0x37, 0x24, 0x8e, 0xb1, 0x53, 0xba, 0x4d, 0x31, 0xdd, 0x41, 0x8d, 0x2f, 0xea, 0x47, 0x36, 0x43, 0xc0, 0xc9, 0xe1, 0xf0, 0xeb, 0xf5, 0x91, 0x83, 0x8e, 0x34, 0x9d, 0x3e, 0xf8, 0x68, 0xf1, 0xb6, 0x77, 0x72, 0x77, 0x7a, 0x71, 0xf8, 0xcf, 0xf5, 0xb0, 0x65, 0x46, 0x96, 0xfe, 0x31, 0x06, 0x2e, 0xf2, 0x62, 0x8a, 0x99, 0x09, 0x53, 0x55, 0xa0, 0xf8, 0xb4, 0xe4, 0x1e, 0x41, 0xd2, 0xe1, 0x62, 0x05, 0x18, 0x99, 0xd5, 0x19, 0xd6, 0xb0, 0xdc, 0x5c, 0x42, 0x13, 0x00, 0x47, 0xbd, 0x2f, 0x4d, 0xc5, 0x57, 0x61, 0xf7, 0x45 ],
-const [ 0x53, 0xcb, 0x09, 0xd0, 0xa7, 0x88, 0xe4, 0x46, 0x6d, 0x01, 0x58, 0x8d, 0xf6, 0x94, 0x5d, 0x87, 0x28, 0xd9, 0x36, 0x3f, 0x76, 0xcd, 0x01, 0x2a, 0x10, 0x30, 0x8d, 0xad, 0x56, 0x2b, 0x6b, 0xe0, 0x93, 0x36, 0x48, 0x92, 0xe8, 0x39, 0x7a, 0x8d, 0x86, 0xf1, 0xd8, 0x1a, 0x20, 0x96, 0xcf, 0xc8, 0xa1, 0xbb, 0xb2, 0x6a, 0x1a, 0x75, 0x52, 0x5f, 0xfe, 0xbf, 0xcf, 0x16, 0x91, 0x1d, 0xad, 0xd0, 0x9e, 0x80, 0x2a, 0xa8, 0x68, 0x6a, 0xcf, 0xd1, 0xe4, 0x52, 0x46, 0x20, 0x25, 0x4a, 0x6b, 0xca, 0x18, 0xdf, 0xa5, 0x6e, 0x71, 0x41, 0x77, 0x56, 0xe5, 0xa4, 0x52, 0xfa, 0x9a, 0xe5, 0xae, 0xc5, 0xdc, 0x71, 0x59, 0x1c, 0x11, 0x63, 0x0e, 0x9d, 0xef, 0xec, 0x49, 0xa4, 0xec, 0xf8, 0x5a, 0x14, 0xf6, 0x0e, 0xb8, 0x54, 0x65, 0x78, 0x99, 0x97, 0x2e, 0xa5, 0xbf, 0x61, 0x59, 0xcb, 0x95, 0x47 ],
-const [ 0xf9, 0x66, 0x0f, 0xb7, 0x84, 0xc1, 0x4b, 0x5f, 0xbe, 0xc2, 0x80, 0x52, 0x6a, 0x69, 0xc2, 0x29, 0x4f, 0xba, 0x12, 0xae, 0xa1, 0x63, 0x78, 0x9b, 0xbe, 0x9f, 0x52, 0xa5, 0x1b, 0x5a, 0xeb, 0xb9, 0x7d, 0x96, 0x4f, 0x86, 0x6c, 0x0d, 0x5e, 0x3b, 0xe4, 0x18, 0x20, 0x92, 0x4f, 0xcf, 0x58, 0x0d, 0xb0, 0x72, 0x5c, 0x7f, 0x21, 0x08, 0x23, 0xcf, 0x7f, 0x45, 0xa0, 0xf9, 0x64, 0xb1, 0x4e, 0x55, 0x55, 0x07, 0x0d, 0x1c, 0x3d, 0xdb, 0x2c, 0x28, 0x1a, 0x80, 0xc7, 0xfb, 0xf7, 0x29, 0x53, 0x03, 0x1a, 0x4e, 0x77, 0x1d, 0x7e, 0x52, 0x1d, 0x57, 0x84, 0x62, 0xca, 0xfa, 0xe5, 0xa0, 0x2a, 0xc8, 0xeb, 0x81, 0xf0, 0x82, 0xe1, 0x73, 0xdd, 0xad, 0xc8, 0xc4, 0x1d, 0x96, 0x4b, 0xbf, 0xda, 0x94, 0xf5, 0x18, 0x0c, 0x8d, 0xa2, 0x8a, 0x8e, 0xbb, 0x33, 0xbe, 0x77, 0xb0, 0x86, 0x6f, 0xa7, 0x98 ],
-const [ 0x64, 0xa7, 0x8a, 0x4d, 0x6f, 0xb8, 0xff, 0x38, 0x13, 0xdf, 0x8d, 0xc0, 0x22, 0xfa, 0xaf, 0x44, 0x15, 0xe4, 0xdf, 0x29, 0x49, 0xe1, 0x64, 0x67, 0x68, 0x3c, 0x6c, 0x47, 0x24, 0x2e, 0x5a, 0x6b, 0x2c, 0x02, 0x61, 0x0e, 0x58, 0x77, 0x52, 0x8d, 0x27, 0x66, 0xb2, 0x26, 0x6c, 0xa4, 0x10, 0x00, 0x44, 0x2a, 0x95, 0x6c, 0x4b, 0x73, 0xdd, 0x6b, 0x10, 0x26, 0x05, 0x70, 0xc6, 0xf5, 0x06, 0x67, 0x3c, 0xc5, 0x41, 0xf5, 0x0f, 0x0f, 0x5b, 0x02, 0x1e, 0x86, 0x4a, 0x75, 0x3e, 0xfa, 0xb0, 0x3e, 0x2f, 0x7c, 0x68, 0x9a, 0xcf, 0xc3, 0x5f, 0x92, 0x8e, 0xce, 0xa6, 0xc5, 0x22, 0xcb, 0xc5, 0x68, 0x7c, 0x38, 0x51, 0x8b, 0xfa, 0x48, 0xc1, 0x9e, 0xde, 0x88, 0x7d, 0x33, 0xff, 0xc2, 0x38, 0x06, 0xbe, 0x21, 0x80, 0x3a, 0x3c, 0x97, 0x93, 0xe5, 0xca, 0x7c, 0x75, 0xcf, 0xa1, 0x78, 0x3f, 0x77 ],
-const [ 0xa7, 0x73, 0x4a, 0x07, 0x39, 0xd5, 0x1a, 0xf0, 0xac, 0x2c, 0x40, 0x39, 0xdf, 0xaf, 0xa8, 0x6f, 0x36, 0xfc, 0x06, 0xc2, 0x35, 0x5d, 0x0f, 0x65, 0x4d, 0x4a, 0xe9, 0x38, 0xf5, 0x2f, 0xe0, 0xa5, 0xfd, 0x6f, 0x5a, 0xc7, 0x1f, 0xa8, 0x0d, 0xd2, 0xd8, 0x39, 0x6f, 0xaf, 0x76, 0x01, 0x6e, 0xe6, 0x71, 0x6a, 0x62, 0xc1, 0xfe, 0xa6, 0x40, 0xaf, 0xe2, 0x39, 0x10, 0xe6, 0x84, 0xb8, 0xa1, 0x4c, 0x47, 0xd0, 0x7b, 0x98, 0x16, 0x89, 0x15, 0xb4, 0x41, 0xcc, 0x48, 0x66, 0x87, 0x24, 0x04, 0x30, 0x74, 0xc1, 0x42, 0x75, 0xed, 0xc2, 0x39, 0xdc, 0x09, 0xb4, 0xd5, 0xfa, 0x22, 0x55, 0x65, 0x2b, 0x2c, 0x9e, 0x94, 0xc0, 0x46, 0x01, 0x9a, 0x60, 0x8f, 0xf0, 0xb3, 0xa8, 0x3b, 0x9e, 0xd0, 0x15, 0xe6, 0x09, 0x8d, 0x24, 0x27, 0x38, 0x64, 0xb7, 0x69, 0xc1, 0x20, 0xbb, 0xf6, 0x8f, 0x94, 0x08 ],
-const [ 0x0b, 0x9a, 0x58, 0xcd, 0x96, 0x35, 0x1a, 0x13, 0x5c, 0x55, 0x9d, 0x17, 0xe8, 0x2e, 0xde, 0x34, 0x34, 0xa0, 0xca, 0xf0, 0xbe, 0xfe, 0xf5, 0xdf, 0xdf, 0x13, 0x8e, 0xc5, 0x58, 0x67, 0x93, 0xfb, 0x2e, 0xbe, 0x41, 0x14, 0xb9, 0xe2, 0xcf, 0xbf, 0xf7, 0xa2, 0x5b, 0xef, 0x26, 0x1b, 0x25, 0x3a, 0x91, 0x36, 0xfb, 0x7f, 0xaa, 0x72, 0xf4, 0xcc, 0x59, 0xe4, 0x61, 0x7f, 0x94, 0x7c, 0x01, 0xab, 0x30, 0x89, 0x74, 0xbd, 0xf6, 0x7f, 0xf2, 0x5f, 0xfa, 0xf8, 0x3d, 0x9c, 0x28, 0xfa, 0xd4, 0x45, 0x20, 0x78, 0x6a, 0x94, 0x44, 0x1b, 0x96, 0x10, 0x0e, 0x42, 0xcc, 0xb0, 0xa8, 0x47, 0x8c, 0x43, 0xb6, 0x04, 0xd9, 0x0f, 0x76, 0x95, 0xed, 0xb9, 0x0c, 0x60, 0x2b, 0x65, 0x17, 0x53, 0x55, 0x1d, 0x88, 0x6d, 0xff, 0x77, 0xb4, 0x80, 0x44, 0x72, 0xa8, 0x35, 0xb7, 0xa2, 0xbc, 0x50, 0x9c, 0x8d ],
-const [ 0xe5, 0x80, 0x4b, 0x09, 0x9e, 0xe4, 0xb3, 0x51, 0x84, 0x3a, 0xdb, 0x9c, 0x9e, 0x3c, 0x23, 0x17, 0x73, 0x25, 0x6e, 0x6a, 0x20, 0x70, 0xd6, 0x97, 0xa9, 0xe2, 0x9e, 0x25, 0x8d, 0xca, 0x67, 0x7f, 0x9d, 0x88, 0xa7, 0x97, 0x0d, 0x4c, 0x58, 0xce, 0xcc, 0x20, 0xed, 0x18, 0x11, 0x29, 0x8a, 0x5b, 0x37, 0x29, 0x74, 0x19, 0xca, 0x49, 0xc7, 0x4f, 0xe2, 0x16, 0x67, 0x9d, 0xaf, 0xc9, 0x38, 0xa6, 0x56, 0xcb, 0x92, 0xba, 0xfb, 0x78, 0xef, 0xb3, 0x1f, 0x24, 0xe7, 0x1c, 0x2d, 0x5b, 0x5f, 0x99, 0x4f, 0x6d, 0xfd, 0x82, 0x86, 0x2a, 0xdf, 0xd2, 0xfa, 0xeb, 0x8c, 0x40, 0x8f, 0xd2, 0x2a, 0xab, 0xb8, 0x52, 0xf2, 0xbb, 0x90, 0xf1, 0xe2, 0xc6, 0x27, 0x4c, 0xb1, 0xf0, 0x19, 0x5c, 0x08, 0x97, 0x66, 0xf9, 0xef, 0xee, 0x7d, 0x9c, 0x86, 0xe7, 0x9a, 0x69, 0xf5, 0x57, 0x52, 0x6d, 0xa5, 0x55 ],
-const [ 0x8b, 0x1d, 0x45, 0x23, 0xb6, 0xe4, 0x57, 0xf8, 0x56, 0xe5, 0xf0, 0x98, 0x75, 0xd3, 0x89, 0xeb, 0x65, 0x87, 0x22, 0x3e, 0x53, 0x47, 0x7b, 0xa0, 0x1f, 0x49, 0x87, 0x8c, 0x6c, 0x73, 0x1e, 0xc9, 0xf3, 0x65, 0xf2, 0x8f, 0x1c, 0xb9, 0xc4, 0xeb, 0xcf, 0x89, 0xd8, 0x64, 0x87, 0x32, 0xa6, 0xdf, 0xa9, 0x58, 0xd2, 0xc0, 0x15, 0x2b, 0x5e, 0x52, 0xfa, 0xe8, 0x1f, 0x69, 0xee, 0xa2, 0x6d, 0x46, 0x3e, 0x42, 0x1f, 0xba, 0x82, 0xcd, 0xb7, 0x8f, 0x75, 0xe5, 0xd9, 0x23, 0x04, 0x93, 0x02, 0x56, 0xa5, 0x43, 0x76, 0xa6, 0xea, 0x10, 0x7a, 0x99, 0x56, 0x42, 0xc4, 0x5c, 0x6f, 0x15, 0x30, 0xa9, 0x14, 0xbd, 0xb4, 0xed, 0x11, 0xa6, 0x96, 0xab, 0xf1, 0x00, 0xdc, 0x1b, 0x14, 0x7b, 0x05, 0x18, 0x01, 0x4f, 0xf6, 0x39, 0xfc, 0x80, 0x37, 0x3d, 0xdc, 0x60, 0x5f, 0xac, 0x17, 0x55, 0xcd, 0xbb ],
-const [ 0xff, 0x86, 0x62, 0xe9, 0xaf, 0x3a, 0x38, 0xd3, 0xef, 0xc0, 0x14, 0x31, 0x38, 0xfa, 0x61, 0x9a, 0x57, 0xd5, 0x69, 0xf6, 0x1e, 0x29, 0xb3, 0x89, 0x5a, 0xe0, 0x8f, 0x2d, 0x05, 0x5b, 0xef, 0xde, 0xbc, 0x11, 0x78, 0x7c, 0x73, 0x79, 0xd9, 0xcd, 0x67, 0x2b, 0x5c, 0xc2, 0x54, 0x42, 0xba, 0xfb, 0xe8, 0x04, 0x34, 0x8c, 0x78, 0xc5, 0xdf, 0x02, 0xf3, 0x08, 0x40, 0xa1, 0x14, 0xe8, 0x18, 0xf0, 0xdb, 0xb6, 0x81, 0x78, 0x3d, 0xe4, 0x3a, 0xc8, 0x1b, 0x21, 0x40, 0xbc, 0x71, 0xc6, 0x9e, 0xff, 0xd0, 0x71, 0x85, 0xcf, 0x0e, 0xef, 0x9f, 0x00, 0x3c, 0x60, 0xa1, 0x44, 0xd8, 0x95, 0x20, 0xa9, 0x44, 0xbd, 0xa5, 0x63, 0x77, 0x41, 0x03, 0xcc, 0xf3, 0xec, 0xe8, 0xa9, 0xf6, 0x4f, 0xb3, 0xaf, 0xf5, 0x64, 0x85, 0x46, 0x46, 0x71, 0x9b, 0x8c, 0x1d, 0x2f, 0xdb, 0x9d, 0xb9, 0x2c, 0xac, 0x12 ],
-const [ 0x33, 0xab, 0x86, 0x1f, 0x08, 0x9b, 0xac, 0x0e, 0x5c, 0x88, 0x6f, 0x66, 0xad, 0xc5, 0x68, 0xae, 0x7b, 0xa3, 0x31, 0x65, 0x5a, 0x37, 0x1d, 0xe7, 0x47, 0x5e, 0x26, 0x91, 0x38, 0xff, 0x27, 0x25, 0xf7, 0x90, 0x4c, 0x70, 0x2f, 0xdc, 0xc6, 0x2a, 0xc7, 0x03, 0xc3, 0x1d, 0x70, 0xc2, 0x9d, 0x8a, 0x7a, 0xf4, 0x51, 0xc8, 0xec, 0x59, 0x34, 0x2e, 0xd3, 0x97, 0xe1, 0x33, 0xda, 0x7e, 0x76, 0xd4, 0x1b, 0x90, 0x00, 0x36, 0x35, 0xc1, 0x33, 0x8d, 0x9f, 0x7b, 0x5f, 0x3c, 0x3c, 0xe5, 0x9f, 0x3e, 0x2f, 0x65, 0x54, 0xc4, 0xf0, 0x64, 0xd1, 0x1f, 0x9f, 0x51, 0x58, 0xe1, 0x99, 0xe8, 0x46, 0x3f, 0x4a, 0xb4, 0x8a, 0xba, 0x42, 0xd2, 0x5b, 0xff, 0x8a, 0xf9, 0x2b, 0x0b, 0x38, 0xb7, 0xd6, 0x92, 0x41, 0xfd, 0x20, 0xa2, 0x8f, 0xde, 0x5e, 0x84, 0x53, 0x94, 0x73, 0xe3, 0x9d, 0xc4, 0xfe, 0x2f ],
-const [ 0x5a, 0x22, 0x40, 0xf6, 0x4f, 0xc7, 0x04, 0xce, 0x9f, 0x8e, 0xd3, 0x3d, 0x01, 0x9e, 0x41, 0x55, 0xcb, 0x46, 0x74, 0x7a, 0x65, 0x9e, 0x34, 0x21, 0xfe, 0x6b, 0x42, 0xd6, 0x7f, 0x44, 0xeb, 0x84, 0xbd, 0xf3, 0xdc, 0xf1, 0xf3, 0x1e, 0x38, 0x88, 0x6f, 0x27, 0xe8, 0x5b, 0x8b, 0x50, 0x33, 0x68, 0xdf, 0x23, 0x8e, 0x1b, 0xb5, 0x11, 0xb5, 0x15, 0xbd, 0x59, 0xfa, 0x2c, 0x03, 0x2b, 0xdd, 0xb3, 0x1d, 0x0d, 0xde, 0xfb, 0xa9, 0x7f, 0x8f, 0x19, 0xf7, 0xda, 0xed, 0xea, 0x02, 0x7e, 0xf0, 0x55, 0xa5, 0x2c, 0x61, 0xd0, 0x0b, 0xb1, 0xec, 0x26, 0x68, 0xc5, 0x76, 0x77, 0xe6, 0x32, 0xb1, 0x80, 0xe3, 0x39, 0xed, 0x1c, 0x59, 0x31, 0x31, 0x0b, 0x9d, 0x71, 0x8a, 0xf3, 0x4d, 0x70, 0xa3, 0xa4, 0x83, 0x2b, 0x96, 0xa0, 0x4f, 0xc7, 0x02, 0xdb, 0x65, 0x78, 0x5e, 0xbf, 0x12, 0xa1, 0x8c, 0x73 ],
-const [ 0xf4, 0x07, 0xf8, 0x15, 0xa3, 0x3c, 0xd4, 0x50, 0xc0, 0xb7, 0x2a, 0x37, 0x8f, 0x00, 0x76, 0x27, 0x88, 0xf9, 0x1b, 0xc4, 0x4f, 0x09, 0xf9, 0x3d, 0xe6, 0x7a, 0x41, 0xd2, 0x22, 0x20, 0x88, 0x93, 0x5b, 0x3c, 0x1b, 0x6a, 0x68, 0x9f, 0x93, 0x5b, 0xca, 0x13, 0xa9, 0x0b, 0x28, 0xf6, 0x4b, 0x7f, 0xfc, 0x28, 0xef, 0x27, 0x8b, 0x28, 0x27, 0x1b, 0x1a, 0x79, 0x75, 0xa4, 0x5f, 0x4b, 0x61, 0xfe, 0x36, 0x57, 0xca, 0x5c, 0x95, 0x0b, 0x7a, 0x2d, 0xc2, 0xe7, 0xfd, 0x9e, 0xc3, 0x27, 0xb2, 0x60, 0x17, 0xa2, 0x22, 0xab, 0xa3, 0xf2, 0x91, 0x83, 0xef, 0xd5, 0xd3, 0x3a, 0x92, 0xd3, 0x61, 0x36, 0xeb, 0x21, 0xac, 0xf4, 0x12, 0xc6, 0xb1, 0x4d, 0x0e, 0xfc, 0xce, 0xf8, 0x49, 0xd9, 0xd4, 0x51, 0x41, 0x2e, 0x5d, 0x58, 0x7f, 0xb0, 0x60, 0xfd, 0xcd, 0x55, 0x02, 0x9b, 0xa4, 0x01, 0xaf, 0xc2 ],
-const [ 0xdb, 0xb8, 0x4f, 0xef, 0x13, 0x0f, 0x92, 0x98, 0x05, 0xb0, 0x87, 0x6c, 0xb4, 0x64, 0x6a, 0x04, 0x63, 0x30, 0xbc, 0x33, 0xab, 0x1c, 0xf1, 0xe9, 0xca, 0x38, 0x69, 0x57, 0x3e, 0xe1, 0xa1, 0x54, 0x93, 0x41, 0xab, 0x00, 0x79, 0x15, 0xdb, 0xa7, 0x19, 0xb3, 0xc4, 0xe8, 0xa9, 0x4b, 0x62, 0x16, 0x3e, 0x6d, 0x99, 0xde, 0xe2, 0xcb, 0xde, 0x2a, 0xe7, 0x41, 0x35, 0x46, 0x7b, 0x12, 0x5b, 0x41, 0x7c, 0x75, 0x44, 0x97, 0x8d, 0x50, 0xc8, 0x0c, 0x69, 0x43, 0x99, 0xdb, 0x77, 0xe8, 0x78, 0x10, 0x9f, 0x59, 0xa8, 0x33, 0x5d, 0xf3, 0xa3, 0x26, 0x13, 0x5a, 0x0d, 0x50, 0xa4, 0xbd, 0xe6, 0xfc, 0x3e, 0x5c, 0x03, 0xfb, 0x77, 0x47, 0xbf, 0x91, 0x9c, 0x68, 0xee, 0x8f, 0x45, 0xc3, 0x12, 0xbc, 0x2d, 0xfd, 0xd2, 0x79, 0x41, 0x1b, 0xa7, 0xa5, 0xf7, 0x8d, 0xd9, 0xbf, 0xe1, 0x6b, 0xaa, 0x4a ],
-const [ 0x1d, 0xe0, 0x02, 0x88, 0xa6, 0xe9, 0x39, 0x30, 0x07, 0x01, 0x83, 0xde, 0x9d, 0x9e, 0xd0, 0xce, 0x86, 0xf6, 0xcc, 0x0f, 0x64, 0xb7, 0xbe, 0xdb, 0x5d, 0xf8, 0xaf, 0x24, 0x67, 0x6f, 0xd0, 0x6f, 0xc2, 0xe5, 0x16, 0xe5, 0xc5, 0xe8, 0x27, 0xa7, 0xde, 0xc0, 0x79, 0x63, 0xd5, 0xa4, 0xb8, 0x25, 0x50, 0x2d, 0x69, 0x6f, 0x9c, 0x0a, 0xce, 0x8b, 0xaa, 0xf6, 0x09, 0x20, 0x58, 0xe7, 0x83, 0x04, 0xf2, 0x88, 0x8f, 0x51, 0xf9, 0xea, 0x4b, 0xbb, 0x23, 0x76, 0xc7, 0x20, 0xa2, 0x27, 0x6a, 0x61, 0xa9, 0xf6, 0x91, 0x71, 0x2d, 0x95, 0x78, 0xab, 0xe9, 0x5f, 0x5e, 0x69, 0xa4, 0x90, 0xe4, 0xd2, 0xb6, 0xb1, 0xb7, 0xf3, 0xc9, 0x57, 0x6e, 0x12, 0xdd, 0x0d, 0xb6, 0x3e, 0x8f, 0x8f, 0xac, 0x2b, 0x9a, 0x39, 0x8a, 0x3d, 0x9e, 0xbe, 0x86, 0xe3, 0x20, 0x1d, 0xf7, 0x26, 0xd2, 0xd1, 0xba, 0x82 ],
-const [ 0x29, 0x37, 0xaa, 0x2f, 0xf7, 0xc9, 0x42, 0xbf, 0x7d, 0xcf, 0xa6, 0x70, 0x15, 0x4e, 0x98, 0x8c, 0x28, 0x17, 0x73, 0x91, 0x96, 0x9d, 0xb4, 0x99, 0x58, 0x04, 0xba, 0x1a, 0x64, 0x7a, 0xca, 0xcf, 0xd0, 0xca, 0x56, 0xf6, 0x3b, 0x2e, 0x7f, 0xbc, 0x69, 0x65, 0xd8, 0xf6, 0x2d, 0x06, 0x6d, 0x11, 0x8c, 0x14, 0x04, 0x4c, 0x1f, 0xd2, 0xa2, 0x24, 0xb9, 0xd9, 0x51, 0x10, 0x4a, 0x67, 0x21, 0x6f, 0x03, 0xfa, 0x6d, 0xbf, 0xbb, 0x1e, 0x5f, 0x0f, 0x92, 0x83, 0xb6, 0xb7, 0xd4, 0x52, 0xc7, 0x46, 0x20, 0xc1, 0xc2, 0xbc, 0xc9, 0xe6, 0x37, 0xfa, 0x7c, 0xc8, 0xd9, 0x76, 0x23, 0xbc, 0x81, 0x33, 0x0a, 0xef, 0x76, 0xf1, 0x40, 0x3f, 0xeb, 0xa1, 0x41, 0x4f, 0xc9, 0x1b, 0xd1, 0xda, 0xaf, 0x13, 0x2b, 0x47, 0x37, 0x49, 0x5b, 0x7e, 0x7c, 0x01, 0xe9, 0xfb, 0xd9, 0xb3, 0xb7, 0x20, 0xf3, 0x03 ],
-const [ 0xdf, 0xa3, 0xb0, 0x6e, 0xb1, 0xe3, 0x0b, 0x47, 0xad, 0x9f, 0x0b, 0xf0, 0xf4, 0x41, 0xfc, 0xd9, 0x48, 0x56, 0xca, 0x8b, 0x1f, 0x4c, 0xb8, 0x8c, 0xf6, 0x79, 0x55, 0x82, 0xe8, 0x60, 0xad, 0x9c, 0x7f, 0x30, 0xbc, 0x2e, 0xca, 0x8e, 0x28, 0x9b, 0xb0, 0x94, 0x2f, 0x78, 0x83, 0x1a, 0xdd, 0xee, 0xd9, 0x34, 0x83, 0x60, 0x97, 0xfb, 0x66, 0x4e, 0x4e, 0x91, 0xb4, 0x7a, 0xcb, 0x5f, 0xbc, 0x49, 0xe9, 0xa1, 0x5d, 0x6b, 0xaa, 0x25, 0xbf, 0xbe, 0x86, 0x4f, 0x42, 0x70, 0x03, 0x61, 0xb4, 0x65, 0x86, 0xf9, 0xc7, 0xd8, 0x69, 0xdc, 0xc2, 0x44, 0x4d, 0xf1, 0x76, 0x85, 0xb2, 0x91, 0x74, 0x3a, 0xc5, 0xfe, 0x7d, 0x6f, 0x78, 0x30, 0x3a, 0x79, 0xd8, 0xd8, 0x2d, 0x20, 0x9c, 0x9f, 0xe8, 0x04, 0xf9, 0xae, 0x7d, 0x39, 0xbe, 0x74, 0x35, 0x35, 0x9c, 0xa3, 0x85, 0xec, 0xc5, 0x7c, 0x3d, 0x39 ],
-const [ 0x50, 0x9a, 0x0a, 0x45, 0xa1, 0x51, 0x2b, 0x50, 0x72, 0x47, 0x4b, 0x29, 0x7f, 0x9c, 0x1a, 0x8c, 0x24, 0x89, 0x00, 0x16, 0x14, 0x44, 0x68, 0x50, 0x4e, 0x24, 0x5f, 0xe9, 0x4d, 0x06, 0x5d, 0x43, 0x7f, 0xef, 0x62, 0x32, 0xf9, 0xf3, 0x45, 0x00, 0x69, 0x55, 0x49, 0xb4, 0x4c, 0xef, 0xf2, 0x93, 0x61, 0xd4, 0x17, 0xe8, 0x5d, 0x35, 0x37, 0x01, 0xe0, 0x81, 0x11, 0x7a, 0xa8, 0xd0, 0x6e, 0xbe, 0x05, 0x82, 0x42, 0xca, 0x8c, 0x23, 0xf3, 0x34, 0x10, 0x92, 0xf9, 0x6c, 0xce, 0x63, 0xa7, 0x43, 0xe8, 0x81, 0x48, 0xa9, 0x15, 0x18, 0x6e, 0xbb, 0x96, 0xb2, 0x87, 0xfd, 0x6c, 0xa0, 0xb1, 0xe3, 0xc8, 0x9b, 0xd0, 0x97, 0xc3, 0xab, 0xdd, 0xf6, 0x4f, 0x48, 0x81, 0xdb, 0x6d, 0xbf, 0xe2, 0xa1, 0xa1, 0xd8, 0xbd, 0xe3, 0xa3, 0xb6, 0xb5, 0x86, 0x58, 0xfe, 0xea, 0xfa, 0x00, 0x3c, 0xce, 0xbc ],
-const [ 0xc2, 0x8f, 0x6a, 0x09, 0xce, 0x07, 0x6e, 0xf2, 0x70, 0x45, 0x89, 0x67, 0xfe, 0x19, 0xd4, 0x6e, 0x6f, 0x6b, 0x2c, 0xbe, 0xb6, 0x36, 0x2b, 0xdc, 0x4f, 0xd5, 0x56, 0x84, 0x17, 0x7e, 0x98, 0x4a, 0x60, 0x0c, 0xf0, 0x81, 0x45, 0x01, 0x66, 0x5c, 0x3b, 0xcb, 0x43, 0x53, 0xe9, 0x46, 0x81, 0xc8, 0x3a, 0x83, 0x81, 0xeb, 0xb0, 0xc8, 0xfc, 0xdb, 0xfb, 0xd7, 0x3c, 0x0e, 0xca, 0x73, 0x8c, 0xf2, 0xe1, 0x21, 0xed, 0xd4, 0x6b, 0x2c, 0x0a, 0x02, 0x92, 0xeb, 0x6e, 0x2c, 0x4e, 0x46, 0xf5, 0x10, 0x7a, 0x77, 0x80, 0x57, 0x2d, 0x0e, 0xed, 0xb9, 0x47, 0x38, 0x47, 0x68, 0x4a, 0x40, 0x39, 0xac, 0x6c, 0x56, 0xc9, 0xca, 0xea, 0x90, 0x43, 0x2b, 0x9e, 0x2e, 0x72, 0xba, 0xd4, 0x22, 0x16, 0x8e, 0x5a, 0xd0, 0x93, 0xc9, 0xd6, 0x12, 0xe7, 0xc0, 0x5c, 0x7f, 0xde, 0x5c, 0x40, 0xed, 0x89, 0xc0 ],
-const [ 0x5a, 0x60, 0x0c, 0x46, 0x8e, 0xc2, 0x2e, 0x42, 0xaf, 0x5b, 0xa9, 0x3e, 0xb7, 0x94, 0x52, 0x86, 0x4e, 0xbe, 0x46, 0x9a, 0x86, 0xf8, 0x36, 0x32, 0xc8, 0x52, 0x01, 0x80, 0x0f, 0x32, 0x88, 0xb5, 0x53, 0xf7, 0xbe, 0xc6, 0x49, 0xdd, 0xfe, 0x70, 0x49, 0x20, 0xa2, 0x7a, 0x8f, 0x65, 0xd1, 0x3a, 0xa7, 0x55, 0x98, 0x5a, 0x23, 0x8b, 0x3c, 0xdc, 0x8f, 0xb0, 0xcf, 0x5c, 0xa7, 0xe4, 0x02, 0x95, 0xc7, 0x60, 0x3a, 0x27, 0xa2, 0x5a, 0xe6, 0x98, 0x37, 0x29, 0x0f, 0x98, 0x01, 0xaa, 0x30, 0x89, 0x6e, 0xe2, 0x49, 0x3e, 0x93, 0xe5, 0x2f, 0x03, 0x1e, 0xf6, 0x26, 0xde, 0x8c, 0xef, 0xb1, 0x15, 0x9c, 0xe4, 0xa9, 0xf0, 0x03, 0x03, 0x8d, 0xc0, 0x61, 0xbe, 0x19, 0x20, 0x74, 0x2d, 0x1a, 0x7b, 0x8b, 0xad, 0x80, 0xcf, 0x3e, 0xce, 0xb5, 0xb0, 0x5d, 0x6c, 0x2d, 0x8f, 0x26, 0x1b, 0x3f, 0x3c ],
-const [ 0x04, 0x36, 0x9f, 0x95, 0x92, 0xb0, 0x06, 0x26, 0xd1, 0x5b, 0x0a, 0x4b, 0x0e, 0xe2, 0xf9, 0x2b, 0xa0, 0xd0, 0x86, 0xc1, 0x6d, 0x01, 0x6c, 0xe7, 0xb0, 0x56, 0x54, 0xb4, 0xf9, 0xad, 0xf9, 0x08, 0x75, 0x11, 0x8a, 0x65, 0x6f, 0x2d, 0x50, 0x01, 0x17, 0x07, 0x90, 0x19, 0x82, 0xeb, 0xb3, 0x87, 0xf3, 0xa4, 0xa4, 0x97, 0x59, 0xf3, 0x7a, 0x17, 0x18, 0x39, 0x57, 0xad, 0x0c, 0x77, 0x8f, 0x6e, 0xcb, 0x78, 0x0d, 0xab, 0x2b, 0x4d, 0xf3, 0x0e, 0x05, 0xfa, 0x81, 0xe6, 0x38, 0x6f, 0x38, 0xc0, 0xf0, 0xba, 0x3f, 0x37, 0x28, 0x7a, 0x05, 0x0d, 0x6d, 0x97, 0x28, 0x7a, 0xe5, 0x30, 0x96, 0xc3, 0x91, 0xd5, 0xf2, 0x0f, 0xcf, 0xf7, 0x39, 0x77, 0x23, 0x9c, 0xa5, 0x5c, 0x36, 0x57, 0xd1, 0xfd, 0x1f, 0x78, 0x1f, 0x48, 0xe2, 0x80, 0x57, 0xf1, 0x36, 0xd8, 0x90, 0xc2, 0x8c, 0xc2, 0x54, 0x32 ],
-const [ 0x59, 0xa6, 0xb0, 0x31, 0x7f, 0x13, 0x0f, 0x62, 0x48, 0xe7, 0x46, 0xe3, 0x96, 0xcc, 0x68, 0x4b, 0x32, 0xb9, 0xa0, 0xea, 0xbf, 0x15, 0xc5, 0x0b, 0xec, 0x1f, 0x2f, 0x76, 0xee, 0x8d, 0xc9, 0x39, 0x2e, 0x73, 0x68, 0xa8, 0x3e, 0x67, 0x5b, 0xa3, 0x12, 0xe3, 0x44, 0x17, 0x6d, 0xeb, 0x26, 0xc7, 0x99, 0xef, 0xbe, 0x4d, 0x5b, 0xf2, 0x17, 0x5b, 0x26, 0xec, 0x59, 0x47, 0x8f, 0x6d, 0xe1, 0xc7, 0x01, 0x84, 0x97, 0xf9, 0xb2, 0xdf, 0x7c, 0xa6, 0xd5, 0x33, 0x83, 0xc7, 0x12, 0xdf, 0xa2, 0x48, 0x33, 0xcc, 0x28, 0x0d, 0x20, 0x97, 0x51, 0x33, 0x0d, 0xf2, 0x18, 0x98, 0xf2, 0x47, 0x4c, 0x9d, 0x3b, 0x9f, 0xe6, 0x2a, 0xc1, 0xc3, 0x9a, 0xf3, 0xfa, 0xa0, 0xac, 0xfa, 0x6c, 0xf0, 0x05, 0x55, 0x68, 0x17, 0x86, 0x32, 0xf4, 0x4b, 0x9c, 0x18, 0x09, 0xf8, 0x15, 0x70, 0xff, 0x63, 0x32, 0x43 ],
-const [ 0x95, 0x2e, 0x93, 0x85, 0x3e, 0x95, 0x79, 0xc2, 0xfe, 0x35, 0x3d, 0xc8, 0x32, 0x03, 0xd3, 0x4f, 0x04, 0x96, 0x3f, 0xd6, 0x48, 0x80, 0xa0, 0x95, 0xa4, 0xde, 0x6e, 0xb4, 0xf4, 0x2e, 0x00, 0xba, 0xec, 0x61, 0x51, 0x48, 0xff, 0x31, 0x03, 0x07, 0x80, 0xb5, 0xa4, 0xdf, 0x08, 0x33, 0x31, 0x6a, 0x17, 0x35, 0xd8, 0xa8, 0xfe, 0xdf, 0x02, 0xf4, 0xfc, 0x7f, 0x91, 0x36, 0xa7, 0x66, 0x66, 0x5b, 0x8d, 0xf7, 0x27, 0x02, 0x1c, 0xfd, 0x3f, 0x78, 0xbf, 0x42, 0x26, 0xe7, 0x4a, 0x5d, 0xe2, 0xca, 0x98, 0xcb, 0xce, 0xa4, 0x72, 0x41, 0x9a, 0xf2, 0xb3, 0x41, 0x93, 0x5e, 0xaa, 0xec, 0x24, 0x35, 0xc0, 0x17, 0x9d, 0x1b, 0x5b, 0xa0, 0x34, 0xfe, 0x02, 0x02, 0x4a, 0x48, 0xc1, 0x28, 0xef, 0x59, 0xcf, 0x7f, 0xa7, 0x34, 0x6e, 0x4f, 0x6e, 0x78, 0x13, 0x4b, 0xfb, 0x93, 0xc7, 0x67, 0x42, 0x32 ],
-const [ 0x7d, 0x3d, 0x92, 0x86, 0xc1, 0xfa, 0x05, 0x71, 0x75, 0xc3, 0x3c, 0x55, 0x6d, 0x2c, 0x4b, 0x87, 0xfe, 0x46, 0xd1, 0xb7, 0x64, 0x72, 0x7d, 0x6b, 0x61, 0x72, 0xd1, 0xac, 0x27, 0xc6, 0x26, 0xfe, 0x78, 0x35, 0xf1, 0x96, 0x0c, 0xaa, 0x44, 0xc8, 0x33, 0x41, 0x98, 0xbf, 0xbb, 0xa2, 0xc9, 0x70, 0x14, 0x8e, 0x62, 0xd0, 0xb2, 0xb7, 0x1b, 0x45, 0xb3, 0xd5, 0xa0, 0x5b, 0xc2, 0xf6, 0x94, 0xb9, 0x3b, 0x15, 0xd6, 0x53, 0x8f, 0xef, 0x03, 0xe1, 0xeb, 0x12, 0x3c, 0x8f, 0x14, 0x37, 0x29, 0xf6, 0x96, 0xd1, 0x3d, 0x4b, 0x1d, 0xe6, 0x3c, 0xd6, 0x23, 0x1e, 0xfb, 0xa6, 0xcb, 0x1a, 0x68, 0x84, 0x0d, 0x06, 0xc9, 0x25, 0x14, 0x72, 0x49, 0xa4, 0xe4, 0x5d, 0xb0, 0x2f, 0x40, 0x93, 0x72, 0x00, 0xcb, 0x3a, 0xeb, 0x8e, 0x6d, 0xa7, 0xe9, 0x05, 0xf8, 0x76, 0x6b, 0xf4, 0x0c, 0xd9, 0xa8, 0x46 ],
-const [ 0x18, 0x8a, 0x7f, 0xb0, 0x22, 0x2c, 0x9d, 0x8e, 0x19, 0xd0, 0x57, 0xab, 0x22, 0xd7, 0x1e, 0x03, 0x56, 0xc4, 0xf8, 0xd1, 0x18, 0x41, 0x79, 0xae, 0xa6, 0x63, 0xee, 0xfc, 0xef, 0x2e, 0xdb, 0x85, 0xa5, 0x5c, 0xa8, 0x60, 0x92, 0x5a, 0x97, 0x15, 0x2f, 0x94, 0xf9, 0x00, 0x73, 0xf2, 0xa2, 0xfb, 0xe9, 0xa2, 0x9a, 0x37, 0x05, 0x19, 0x15, 0x6b, 0xb8, 0x54, 0xa5, 0x31, 0x42, 0x64, 0xaf, 0xac, 0x48, 0x29, 0x1c, 0x6f, 0x26, 0x5e, 0x50, 0x9a, 0x86, 0xd5, 0x60, 0x46, 0x32, 0x04, 0x7f, 0x24, 0x26, 0xc1, 0xba, 0x60, 0xea, 0x4a, 0xe6, 0xcc, 0x1e, 0x88, 0xd6, 0x3a, 0x56, 0x95, 0xd1, 0x29, 0x29, 0x7b, 0x42, 0xa5, 0x85, 0x3f, 0xb2, 0x68, 0x45, 0x1e, 0xf4, 0x45, 0x06, 0x16, 0x9f, 0xc7, 0x36, 0xa8, 0xc2, 0x15, 0x6d, 0xdd, 0xd2, 0x18, 0x01, 0x87, 0xe7, 0xe0, 0xd5, 0xc9, 0x28, 0x44 ],
-const [ 0xe1, 0x05, 0xff, 0x11, 0x48, 0x11, 0x59, 0xc5, 0x2b, 0xae, 0xf5, 0xde, 0x55, 0x08, 0x98, 0x21, 0x4e, 0x1d, 0x9a, 0x90, 0xda, 0x2d, 0x90, 0x83, 0xc3, 0x6b, 0x29, 0xfa, 0xd8, 0xf9, 0x56, 0x32, 0x36, 0x13, 0xae, 0x76, 0xc6, 0x8b, 0x10, 0x38, 0x07, 0x75, 0x8a, 0x60, 0x0e, 0x23, 0x79, 0xe4, 0xcb, 0x54, 0xf2, 0x99, 0x8d, 0xa8, 0x61, 0x49, 0xc8, 0x57, 0x70, 0x05, 0x17, 0x23, 0x2b, 0xbc, 0x7d, 0x8b, 0x61, 0x0d, 0xf0, 0x42, 0x4d, 0x5a, 0x18, 0xdf, 0x75, 0x1e, 0x54, 0xd6, 0xd3, 0x80, 0xfe, 0xa7, 0x33, 0x28, 0xf0, 0x55, 0xdc, 0x51, 0x46, 0x1a, 0x72, 0x1f, 0x66, 0x59, 0x1b, 0x33, 0x3e, 0xd4, 0xe1, 0x7e, 0xcd, 0x1f, 0x58, 0x52, 0xe5, 0x55, 0x80, 0xbf, 0x2f, 0x09, 0xec, 0x1c, 0x6f, 0x7f, 0x24, 0xe4, 0x09, 0x1c, 0x49, 0xc4, 0xc5, 0x1c, 0xf7, 0xf1, 0xcf, 0x83, 0x6f, 0xbf ],
-const [ 0xba, 0x52, 0x73, 0x05, 0x60, 0x4e, 0xf5, 0x58, 0x18, 0x50, 0xb2, 0x22, 0xfd, 0x19, 0x2e, 0x62, 0x60, 0xc3, 0xf2, 0x0e, 0xb3, 0x0d, 0x8f, 0x04, 0xa5, 0xf4, 0xe1, 0x43, 0x8f, 0x83, 0x91, 0x5b, 0x0f, 0xeb, 0xdd, 0x22, 0xf2, 0xd6, 0x9c, 0xa9, 0x58, 0xf9, 0x7c, 0x6e, 0x12, 0xe8, 0x8f, 0xd3, 0x4f, 0x2f, 0x06, 0xcf, 0x78, 0x9e, 0x3c, 0xe4, 0x58, 0xe4, 0xf6, 0x51, 0x80, 0x60, 0xe9, 0x88, 0xea, 0x33, 0x7c, 0xe2, 0xdc, 0x9a, 0xd0, 0x92, 0x0f, 0x7b, 0xfd, 0xd8, 0x11, 0x3d, 0x9f, 0x77, 0xe8, 0xdd, 0x92, 0x68, 0xf8, 0x3e, 0xf9, 0xd0, 0x27, 0xc1, 0x85, 0x30, 0x3e, 0x16, 0xf4, 0xdb, 0x92, 0x52, 0xd7, 0xae, 0xe5, 0x41, 0x99, 0xfb, 0x87, 0xfd, 0xbd, 0xc6, 0xc0, 0xbf, 0x67, 0x34, 0x73, 0xf6, 0x1e, 0x40, 0xfb, 0x96, 0xd0, 0xb0, 0x59, 0xb3, 0x16, 0x47, 0x91, 0x4e, 0xba, 0x3d ],
-const [ 0x19, 0x8b, 0x79, 0xd0, 0x9a, 0x3d, 0xfd, 0xb5, 0xd4, 0x10, 0x43, 0xe6, 0x79, 0xba, 0xba, 0x65, 0x92, 0xf3, 0xc7, 0x51, 0xcd, 0x7c, 0xbb, 0x0d, 0x18, 0x60, 0x02, 0x9f, 0x6e, 0x7a, 0x9c, 0x56, 0xf1, 0x37, 0xd2, 0xb0, 0x3a, 0x9d, 0x21, 0x7a, 0xed, 0x8c, 0x7b, 0x39, 0x90, 0x44, 0xaf, 0xc9, 0x9d, 0x28, 0x25, 0x44, 0xd5, 0xc2, 0xce, 0x26, 0xd8, 0x06, 0x5b, 0xae, 0xf3, 0xdb, 0xad, 0x87, 0x39, 0xd7, 0x8d, 0xa7, 0xd5, 0x4a, 0x9e, 0x78, 0x9e, 0x7f, 0x8f, 0x35, 0xec, 0x3e, 0x95, 0x97, 0xaa, 0x95, 0x19, 0xb2, 0xad, 0xd9, 0xae, 0x19, 0x44, 0xe7, 0x45, 0x49, 0x11, 0xaf, 0xa4, 0x45, 0x17, 0xf4, 0x14, 0x7d, 0x13, 0x4d, 0x5a, 0xf4, 0x10, 0x70, 0xe9, 0xa2, 0x36, 0xaf, 0x56, 0x18, 0xe3, 0xc3, 0x0c, 0x62, 0xfd, 0xc9, 0x41, 0x31, 0x86, 0x8a, 0x29, 0x3a, 0x70, 0xff, 0x69, 0xd9 ],
-const [ 0xba, 0xc0, 0x88, 0x92, 0x81, 0xfe, 0x55, 0xda, 0xe1, 0x7c, 0x45, 0x07, 0x9b, 0xc4, 0x4f, 0x89, 0x76, 0x50, 0x8f, 0x5a, 0x92, 0x95, 0x3c, 0x26, 0xf9, 0x40, 0xda, 0xae, 0x77, 0xbf, 0xb1, 0x6e, 0xac, 0x03, 0x7d, 0x7d, 0x5f, 0x84, 0x67, 0xb6, 0x15, 0x86, 0x34, 0x15, 0xe2, 0x9b, 0xbd, 0x63, 0x80, 0x6a, 0x9f, 0x16, 0x9e, 0xae, 0x33, 0x73, 0x7a, 0x82, 0xc1, 0xf5, 0xb2, 0xdb, 0xf0, 0xf2, 0x58, 0x56, 0x81, 0x7c, 0x44, 0x34, 0x3d, 0x86, 0xae, 0xa2, 0x2c, 0x47, 0xfc, 0x3e, 0x08, 0xe4, 0xd8, 0xd8, 0xf1, 0x49, 0x86, 0x75, 0x62, 0x57, 0x74, 0x9a, 0x64, 0x45, 0x13, 0xc7, 0x02, 0x40, 0xe6, 0x41, 0xfc, 0x55, 0xd9, 0x14, 0xc0, 0x91, 0xd3, 0x59, 0x95, 0x67, 0x8e, 0xb5, 0x1a, 0x51, 0xa7, 0x22, 0xef, 0xba, 0xf1, 0xf2, 0xb2, 0x1c, 0x0f, 0x11, 0x2d, 0x66, 0x42, 0x8a, 0xcd, 0xa0 ],
-const [ 0xda, 0x32, 0x31, 0x4c, 0x22, 0xdd, 0xe5, 0x56, 0xd8, 0x86, 0xce, 0x2d, 0xde, 0x12, 0x91, 0xf1, 0xa4, 0xc1, 0xba, 0x14, 0xaa, 0xa9, 0x5b, 0x69, 0x40, 0x63, 0xf5, 0x7e, 0x91, 0x04, 0x9c, 0x2c, 0xdf, 0x4e, 0x57, 0x6c, 0x10, 0x28, 0xc6, 0x6c, 0x6a, 0x4c, 0x07, 0xe3, 0x9b, 0x40, 0xd9, 0xa1, 0xfc, 0x87, 0x02, 0x6a, 0x16, 0x18, 0xef, 0x04, 0x66, 0x0f, 0x9b, 0x8f, 0x5d, 0xa3, 0xb2, 0x15, 0xab, 0x58, 0xf5, 0x62, 0xbd, 0x75, 0xe0, 0x16, 0x84, 0xb9, 0x8a, 0xf8, 0x79, 0x4a, 0xce, 0x8d, 0xde, 0xee, 0xa8, 0xea, 0x46, 0x7d, 0xe1, 0xc6, 0x57, 0x97, 0xef, 0xd3, 0xcf, 0x92, 0x17, 0x4f, 0xc5, 0xb6, 0xd4, 0xd5, 0x32, 0xad, 0x7c, 0x7a, 0xaf, 0x35, 0x21, 0x15, 0x80, 0x18, 0xb5, 0xde, 0xd2, 0x5e, 0x72, 0x3b, 0x41, 0xc1, 0x79, 0xd6, 0x9d, 0x61, 0xba, 0xf3, 0xee, 0xb9, 0x13, 0x01 ],
-const [ 0x55, 0x7f, 0x84, 0x5d, 0xc8, 0x96, 0x2a, 0xe1, 0x15, 0x61, 0xf6, 0x3f, 0xf9, 0xf7, 0xa9, 0xfd, 0x73, 0xad, 0x5d, 0xa4, 0x79, 0xf1, 0xd1, 0xc3, 0xe9, 0x76, 0x02, 0x36, 0xc2, 0x92, 0xfb, 0xa8, 0x94, 0xe4, 0xed, 0x57, 0x35, 0x39, 0x82, 0x17, 0xb6, 0xb0, 0x6f, 0x9a, 0x95, 0x1d, 0x49, 0xee, 0x34, 0xac, 0x99, 0x47, 0x8a, 0xc7, 0x32, 0xff, 0x19, 0x39, 0xc2, 0xdb, 0x20, 0x93, 0xa8, 0x90, 0x11, 0xce, 0x05, 0x86, 0x45, 0x33, 0x16, 0xdb, 0xef, 0x78, 0xc1, 0xab, 0x4f, 0x2c, 0x6d, 0x8f, 0x28, 0x55, 0x17, 0x63, 0x73, 0x57, 0xa2, 0x4d, 0x55, 0x17, 0x6f, 0xfa, 0x4f, 0x61, 0x2e, 0x2b, 0xb5, 0x87, 0xf4, 0x71, 0x61, 0x4b, 0x8d, 0x34, 0xa8, 0xff, 0x13, 0xfa, 0x8d, 0xeb, 0xbf, 0xe6, 0x35, 0xef, 0x00, 0x7f, 0x9b, 0x6a, 0xca, 0xb4, 0x85, 0x5a, 0x31, 0x1c, 0xb7, 0xc4, 0x36, 0x82 ],
-const [ 0xda, 0xc4, 0x16, 0xdf, 0x79, 0x3e, 0xe5, 0xfb, 0xca, 0x99, 0x26, 0x82, 0x97, 0x4a, 0x0c, 0x2c, 0xca, 0x63, 0xeb, 0x49, 0x80, 0x5d, 0xf0, 0xa7, 0x5e, 0x14, 0x10, 0xb6, 0x28, 0x13, 0x3e, 0xea, 0x8f, 0x12, 0xe1, 0x61, 0x4b, 0xbd, 0x85, 0xc6, 0x6a, 0xb7, 0xd0, 0x75, 0xe8, 0xdf, 0xb8, 0xdf, 0x7f, 0xd2, 0xf4, 0x30, 0xc0, 0xb1, 0xb0, 0x30, 0x63, 0x24, 0x85, 0x67, 0xdc, 0x9e, 0xa8, 0x85, 0x2f, 0xe3, 0x62, 0x01, 0x04, 0xc8, 0xc0, 0xff, 0xfe, 0x3a, 0x8b, 0x77, 0x49, 0x82, 0x7a, 0x94, 0x72, 0xc7, 0xa7, 0x5a, 0x7c, 0xd5, 0x40, 0x8c, 0x30, 0x1d, 0x7f, 0xcd, 0xb4, 0xfc, 0xdc, 0x05, 0x5f, 0x40, 0x81, 0x06, 0xcc, 0xe8, 0xfe, 0x70, 0x2d, 0x2b, 0x3e, 0xd1, 0xe2, 0xbc, 0xb9, 0x11, 0x4b, 0x4d, 0xec, 0x0e, 0xda, 0x52, 0x06, 0x83, 0x6c, 0x07, 0xe5, 0x2e, 0xd9, 0xb4, 0x40, 0x32 ],
-const [ 0x5c, 0xf3, 0xa5, 0x20, 0x2d, 0xf8, 0x70, 0x6f, 0x6b, 0xff, 0x5b, 0xf2, 0x59, 0x0d, 0xe3, 0x7c, 0x90, 0x2c, 0x7f, 0xfd, 0x4e, 0x6c, 0x8e, 0xa6, 0x11, 0x28, 0x8e, 0x4e, 0x65, 0x8a, 0x8e, 0x15, 0xfa, 0x51, 0xe6, 0x47, 0xf9, 0xd2, 0x25, 0x83, 0x98, 0x3d, 0x4b, 0x1c, 0xed, 0x22, 0x39, 0xbf, 0xff, 0x34, 0x65, 0x56, 0x23, 0x4c, 0xd2, 0x2d, 0x86, 0xb1, 0x40, 0x53, 0x06, 0x96, 0xa0, 0x44, 0x46, 0xe4, 0xca, 0xc4, 0x01, 0x3a, 0x72, 0x0e, 0x9e, 0x32, 0x58, 0x2e, 0x05, 0xe7, 0xc0, 0xac, 0xb2, 0xb4, 0x22, 0x6a, 0x07, 0x3e, 0x22, 0xcf, 0xe7, 0xb4, 0xc2, 0x25, 0x80, 0x55, 0xd7, 0x40, 0x68, 0x33, 0xba, 0x61, 0xec, 0x37, 0x3f, 0x5a, 0xa5, 0x66, 0xeb, 0xf2, 0x4c, 0x62, 0x61, 0x8a, 0xce, 0x34, 0x1e, 0x01, 0xa3, 0x48, 0x66, 0xd6, 0x5c, 0xb9, 0x7e, 0x8c, 0x7c, 0xd0, 0x1c, 0x53 ],
-const [ 0xc1, 0x26, 0x3b, 0xe4, 0x23, 0xe7, 0x88, 0x8e, 0xac, 0xec, 0xcf, 0xef, 0x26, 0xf0, 0xb5, 0xaa, 0xef, 0xe0, 0x3f, 0x3c, 0xe7, 0x32, 0xdd, 0xe9, 0x8c, 0x78, 0xa7, 0xf6, 0x64, 0x35, 0xe6, 0x19, 0x9c, 0xef, 0xd6, 0x2e, 0xee, 0x85, 0xaa, 0x2b, 0xc8, 0xc3, 0xd1, 0x56, 0xaa, 0x34, 0x78, 0xb6, 0xcf, 0x37, 0x50, 0xc7, 0x11, 0x55, 0x91, 0x72, 0x07, 0xd2, 0x3f, 0x3b, 0x70, 0x82, 0xac, 0xbd, 0xd4, 0xde, 0x3e, 0x53, 0x68, 0x57, 0x72, 0x19, 0x33, 0xeb, 0x21, 0x13, 0x6f, 0xf5, 0x02, 0xab, 0x32, 0x49, 0x71, 0x61, 0x4d, 0x80, 0x6e, 0xbe, 0x74, 0x91, 0xe9, 0x89, 0xa0, 0xa2, 0x3d, 0x3e, 0xb2, 0x1d, 0xfa, 0xbc, 0x59, 0x05, 0xe7, 0x3e, 0x35, 0x8b, 0x47, 0x8c, 0x3d, 0xdc, 0x5c, 0x73, 0x5e, 0x3e, 0x2a, 0x72, 0x64, 0x5b, 0x7d, 0xb6, 0x1e, 0xdc, 0x2d, 0x49, 0xbd, 0x3a, 0xa1, 0x86 ],
-const [ 0xa5, 0xde, 0xb7, 0x12, 0xfc, 0x3b, 0xb9, 0xfb, 0xaf, 0x13, 0x98, 0x69, 0x8b, 0x56, 0x96, 0x60, 0x0f, 0xcd, 0x61, 0xac, 0x68, 0x48, 0x9f, 0x26, 0xa0, 0xf8, 0xca, 0x32, 0x12, 0x1a, 0x3e, 0x8c, 0x21, 0xd5, 0x90, 0x45, 0x29, 0x66, 0x22, 0x08, 0xb6, 0x7a, 0xf4, 0xa2, 0xf4, 0xdb, 0xbd, 0xc1, 0x67, 0x4f, 0x3b, 0xfc, 0xdc, 0xbe, 0xc7, 0x14, 0xa0, 0x92, 0x2c, 0x7a, 0xef, 0x63, 0xb9, 0x11, 0xaf, 0xd4, 0x95, 0x34, 0x5f, 0xb8, 0x53, 0xfb, 0x4a, 0x7a, 0xc6, 0xba, 0x00, 0xbb, 0x17, 0xcb, 0x06, 0x3c, 0x14, 0x8e, 0xcd, 0xff, 0xcb, 0xad, 0xe1, 0xa9, 0x58, 0xa5, 0x63, 0x2b, 0xfb, 0x82, 0xb9, 0xa1, 0x6e, 0xe9, 0x84, 0x7a, 0x75, 0x5c, 0xd2, 0xda, 0xb6, 0xba, 0x96, 0x3c, 0xcb, 0x05, 0x55, 0x5c, 0x96, 0x68, 0x21, 0x54, 0xd4, 0x79, 0xcb, 0x05, 0xf5, 0xbb, 0x55, 0xb8, 0x2c, 0x67 ],
-const [ 0x2d, 0xac, 0x15, 0x99, 0x84, 0x4d, 0x82, 0xa7, 0x9c, 0x7c, 0xd1, 0x66, 0x9a, 0x1c, 0x69, 0x76, 0x26, 0x7f, 0x65, 0x51, 0x67, 0x87, 0x2f, 0x8b, 0x2e, 0x0c, 0x50, 0x59, 0x71, 0x7e, 0x86, 0x51, 0xfc, 0xcc, 0x17, 0x70, 0x63, 0x84, 0x66, 0x61, 0x3b, 0x3b, 0xc4, 0xfc, 0x89, 0x2f, 0x88, 0x0e, 0x7b, 0x2b, 0x62, 0x58, 0x56, 0xab, 0xec, 0xda, 0xb0, 0x41, 0x82, 0x51, 0xdf, 0x37, 0x54, 0xfe, 0xb1, 0x76, 0xb9, 0xa9, 0x5e, 0xa6, 0xc7, 0xe6, 0xba, 0x97, 0x20, 0x97, 0xaf, 0xe0, 0x0e, 0xb2, 0xeb, 0xc6, 0xd3, 0x44, 0xd6, 0x5f, 0x3a, 0xb6, 0xc7, 0xf7, 0x72, 0x4f, 0x77, 0xb2, 0x1c, 0xfb, 0xb6, 0x73, 0xa3, 0x4b, 0x5c, 0xfd, 0xcc, 0xbc, 0x83, 0x58, 0x8e, 0x3c, 0xf3, 0x77, 0x23, 0xea, 0xde, 0x17, 0x5f, 0x1e, 0xce, 0xea, 0x41, 0xa9, 0xdb, 0xf5, 0xc8, 0x5e, 0x21, 0x36, 0x07, 0xd1 ],
-const [ 0x06, 0x7e, 0xf2, 0xee, 0x1e, 0x95, 0xca, 0x54, 0x68, 0x82, 0xe2, 0xa9, 0xd4, 0x41, 0xdc, 0x56, 0x32, 0x35, 0x19, 0x8e, 0xfe, 0xb5, 0x2b, 0xe9, 0x7d, 0xc7, 0x89, 0x4f, 0x09, 0x2b, 0x87, 0x18, 0xa8, 0x9c, 0x85, 0x71, 0xe4, 0x52, 0x66, 0x02, 0xd7, 0xcb, 0x44, 0xce, 0x86, 0xcb, 0x61, 0x5a, 0x70, 0xa2, 0x61, 0x11, 0x66, 0xad, 0xb7, 0xe7, 0x9c, 0x1f, 0x5e, 0x3d, 0x01, 0x01, 0xc9, 0x04, 0xcc, 0x78, 0x1c, 0x26, 0x57, 0x47, 0x9c, 0x21, 0x31, 0x94, 0x64, 0xf5, 0x6f, 0xef, 0x5b, 0x41, 0x42, 0x90, 0x62, 0xa9, 0xcf, 0xe0, 0xd2, 0x7a, 0x3a, 0x3c, 0x25, 0x91, 0x04, 0xf5, 0xf3, 0x79, 0x98, 0x9b, 0x21, 0xd3, 0x20, 0x7b, 0x55, 0xfb, 0x9d, 0x66, 0xac, 0xe8, 0x37, 0xb4, 0xb0, 0x54, 0xd1, 0x89, 0x84, 0x1d, 0xe1, 0x57, 0x62, 0xec, 0x7f, 0xa4, 0x48, 0x14, 0xbc, 0x0e, 0xed, 0xbd ],
-const [ 0xd6, 0xfc, 0x8b, 0x4b, 0x72, 0xb7, 0xee, 0xa8, 0x0b, 0x1c, 0x6f, 0x53, 0xc1, 0x1a, 0x52, 0x51, 0x0f, 0x92, 0x05, 0x27, 0xfe, 0xb8, 0xf9, 0x55, 0x98, 0xbd, 0xb1, 0x20, 0xa0, 0xab, 0x19, 0x94, 0x80, 0x90, 0x18, 0xca, 0x83, 0xde, 0x68, 0x67, 0x44, 0x12, 0xa6, 0x65, 0x67, 0x94, 0xa5, 0x16, 0x86, 0xde, 0x08, 0x65, 0x6e, 0xe1, 0x10, 0x60, 0x8c, 0xa4, 0xb2, 0xf3, 0xa2, 0x2f, 0xed, 0xf6, 0xbe, 0xa7, 0x5a, 0x6b, 0x6d, 0xba, 0x05, 0x00, 0x2c, 0x3e, 0x7b, 0xdc, 0x1f, 0x14, 0x24, 0x97, 0x06, 0x53, 0xd3, 0x8a, 0x6c, 0xa2, 0x9c, 0x4a, 0x21, 0xe6, 0xe6, 0x6f, 0xeb, 0x1e, 0xc0, 0x9a, 0x79, 0x8a, 0x79, 0xb6, 0x98, 0x13, 0x6a, 0x7d, 0xaa, 0xe7, 0x17, 0x3e, 0x53, 0x64, 0x77, 0xde, 0x75, 0x37, 0x8f, 0x1e, 0x5f, 0xc5, 0x46, 0x1b, 0x41, 0xca, 0x74, 0x1b, 0xe3, 0x3f, 0x3c, 0x86 ],
-const [ 0x5e, 0x87, 0x3d, 0xf5, 0xf2, 0x80, 0x72, 0x3d, 0xad, 0xd7, 0x18, 0x87, 0x56, 0x84, 0x59, 0x2a, 0x7b, 0x2c, 0x56, 0x91, 0x66, 0x46, 0xbd, 0x87, 0x4d, 0x7c, 0x99, 0xb1, 0xc9, 0x54, 0x6f, 0x5c, 0x89, 0x0f, 0x86, 0x7a, 0x48, 0xd2, 0x86, 0xe6, 0xfc, 0x03, 0x45, 0xf0, 0x51, 0xf6, 0xdd, 0x15, 0x55, 0xc9, 0x02, 0x0e, 0x75, 0x8c, 0x92, 0x0d, 0xa8, 0xa5, 0x6e, 0x43, 0xea, 0x73, 0x89, 0xa5, 0xec, 0x32, 0x3e, 0xf0, 0x0a, 0x1f, 0xe7, 0xea, 0x7d, 0xdc, 0xab, 0xeb, 0xd2, 0x15, 0x97, 0x9d, 0x9a, 0x64, 0xf0, 0x00, 0x64, 0x72, 0xc8, 0xb1, 0xe8, 0x60, 0xd0, 0x6b, 0x85, 0x65, 0x6d, 0xce, 0xee, 0xb8, 0x0e, 0x5f, 0x20, 0xb0, 0xbc, 0xd1, 0x97, 0x29, 0xf3, 0x83, 0xc1, 0x2b, 0xb0, 0x49, 0xb3, 0xc6, 0xcb, 0x6f, 0x1b, 0x40, 0x87, 0xfb, 0x75, 0x73, 0x68, 0x33, 0x82, 0x70, 0x44, 0x5f ],
-const [ 0xc2, 0x92, 0x5d, 0x3d, 0x09, 0xcf, 0xab, 0x81, 0xf3, 0x2f, 0x76, 0x9d, 0x61, 0xda, 0xd5, 0xa0, 0x3a, 0xec, 0x04, 0x23, 0xbe, 0x78, 0x5a, 0x74, 0x17, 0xcd, 0x7b, 0xf3, 0x31, 0xf7, 0xcf, 0xbb, 0xcc, 0x89, 0x33, 0x85, 0xd0, 0x9a, 0xee, 0xca, 0xe0, 0x0e, 0xe6, 0x28, 0x31, 0x17, 0x14, 0x07, 0x9d, 0xfa, 0x35, 0x7c, 0xf3, 0x17, 0xc2, 0x6e, 0x92, 0x24, 0x23, 0xf7, 0x36, 0xb9, 0x20, 0x0c, 0x11, 0x11, 0x98, 0x61, 0x1e, 0x0f, 0x75, 0x87, 0xb2, 0x7f, 0xdf, 0x57, 0x54, 0x9f, 0xb0, 0x94, 0xce, 0xdd, 0x28, 0xcc, 0x84, 0xe3, 0xe3, 0x7f, 0x05, 0xd1, 0x07, 0x84, 0xe0, 0xc9, 0xc2, 0xa7, 0xb9, 0xb1, 0xf4, 0x97, 0x9b, 0x34, 0x28, 0x00, 0x90, 0x0a, 0xc9, 0xf4, 0x6f, 0x7a, 0x93, 0x8f, 0xf6, 0x1d, 0x47, 0xdb, 0x18, 0xe4, 0xa3, 0xf1, 0x98, 0x5c, 0x91, 0x61, 0xd7, 0x31, 0x9f, 0xd4 ],
-const [ 0x5c, 0x32, 0x69, 0x8a, 0x0a, 0x56, 0xb9, 0xaa, 0xbd, 0x41, 0x27, 0x0e, 0xc1, 0xe4, 0x75, 0xc5, 0xf9, 0x65, 0xbd, 0xd0, 0x73, 0x66, 0xa7, 0x84, 0x3f, 0x8a, 0xdf, 0x2f, 0x82, 0x35, 0xc7, 0xfe, 0xc6, 0x94, 0x69, 0x1e, 0x94, 0xde, 0xaf, 0x22, 0x45, 0xd9, 0xd6, 0xa5, 0x15, 0x9f, 0x20, 0x30, 0x79, 0xa2, 0xc9, 0x5e, 0xb3, 0xee, 0x3d, 0x3d, 0xa3, 0xae, 0x88, 0xf8, 0xe0, 0xf2, 0x0e, 0xb3, 0x07, 0xaf, 0x7c, 0xb7, 0x53, 0x07, 0xfe, 0xcf, 0x6e, 0xcb, 0xb3, 0xf1, 0x87, 0x3f, 0x5e, 0x21, 0xa5, 0x1d, 0x5e, 0x93, 0x3b, 0xdc, 0xe0, 0x10, 0xfc, 0x31, 0x53, 0x9a, 0xf0, 0xd7, 0x1c, 0x53, 0xc8, 0x8c, 0x8b, 0x9b, 0x6f, 0x5c, 0x0e, 0x79, 0xe1, 0x21, 0xa5, 0x3c, 0x40, 0x4b, 0x96, 0x62, 0x25, 0xdd, 0x62, 0xb8, 0x34, 0xb8, 0xf7, 0xc3, 0xf3, 0x1c, 0x27, 0x5f, 0xdc, 0x6c, 0x59, 0xa6 ],
-const [ 0x70, 0x90, 0x1c, 0x61, 0xc4, 0x3a, 0x67, 0xe6, 0x47, 0xb5, 0x27, 0x4e, 0x55, 0xfd, 0x3a, 0x93, 0x4b, 0x0b, 0x87, 0x90, 0xeb, 0xa5, 0x84, 0x70, 0x02, 0x7a, 0xfc, 0x67, 0x47, 0x6e, 0x0f, 0xa0, 0x87, 0x33, 0x7a, 0x76, 0xff, 0x19, 0x18, 0xe6, 0x0a, 0x27, 0xa9, 0x44, 0xfc, 0x6a, 0xd3, 0x2e, 0x4d, 0x8d, 0x66, 0xbf, 0xfa, 0xaa, 0xe4, 0x04, 0x28, 0x60, 0x41, 0xb4, 0x0a, 0x26, 0xe7, 0x1b, 0x06, 0xde, 0xfd, 0x58, 0x13, 0xae, 0xe9, 0xc8, 0x66, 0x0b, 0x13, 0xc2, 0x4d, 0x16, 0xec, 0x85, 0x5b, 0x2c, 0x30, 0x6e, 0xc5, 0xb8, 0x68, 0x6f, 0x0c, 0x4c, 0xb2, 0xbc, 0xdc, 0xf1, 0xc4, 0xc7, 0x35, 0xbb, 0x2f, 0x6f, 0xc8, 0xa0, 0xe1, 0x74, 0xa4, 0x89, 0xee, 0x2f, 0x11, 0xaa, 0x90, 0x80, 0xbc, 0x0f, 0x6c, 0x07, 0x15, 0x78, 0x16, 0x97, 0xf6, 0x67, 0xd8, 0xe7, 0x85, 0x77, 0xaf, 0x8b ],
-const [ 0xa8, 0x5e, 0xe9, 0x73, 0xc9, 0x9d, 0x8d, 0xa6, 0x0d, 0x74, 0x58, 0x94, 0x99, 0x0b, 0x24, 0xb9, 0xca, 0xd7, 0xe4, 0x50, 0xbe, 0x0e, 0x43, 0x69, 0x17, 0x5e, 0x88, 0x3b, 0xfb, 0xde, 0xbd, 0xbb, 0x5f, 0x45, 0x10, 0x6e, 0x86, 0x5a, 0x79, 0x7b, 0xc4, 0xab, 0x9d, 0x04, 0x88, 0x82, 0xf3, 0xb6, 0x9a, 0x15, 0x25, 0x9f, 0xa0, 0xfd, 0xb9, 0x40, 0xe7, 0xe9, 0xf0, 0xe4, 0x60, 0x94, 0xee, 0x30, 0xe9, 0xf4, 0x1c, 0xfa, 0xce, 0xb5, 0xcb, 0x5f, 0x90, 0xe5, 0x1a, 0x0f, 0xe5, 0xf1, 0x19, 0xec, 0xff, 0xd0, 0x2e, 0xd4, 0x11, 0x7e, 0xb8, 0xba, 0x10, 0xac, 0xf3, 0xfc, 0xb7, 0xb6, 0x1c, 0xf0, 0xcd, 0xd5, 0xd5, 0xc0, 0xaa, 0x96, 0xca, 0x79, 0xf8, 0x8a, 0x95, 0x5e, 0xb7, 0x3f, 0xdf, 0x82, 0x83, 0x70, 0xc8, 0x96, 0x1a, 0x79, 0x89, 0xff, 0x19, 0x0d, 0x58, 0x2c, 0x06, 0x2b, 0x8d, 0x26 ],
-const [ 0x7b, 0xa8, 0xff, 0x92, 0x84, 0x60, 0xa4, 0x7c, 0x78, 0xaa, 0x93, 0x85, 0x19, 0xd3, 0x39, 0x78, 0xd7, 0x17, 0x2b, 0xa2, 0x97, 0x5c, 0x0d, 0x2b, 0xb4, 0x21, 0xb2, 0xa6, 0x43, 0xb1, 0x84, 0xe6, 0x9c, 0x9c, 0x27, 0x13, 0x16, 0x67, 0x59, 0xfe, 0x11, 0x83, 0x1d, 0xb2, 0x3a, 0x7c, 0x18, 0x4c, 0x0a, 0x73, 0x3b, 0x0c, 0x90, 0xce, 0xa2, 0xab, 0x71, 0x2e, 0xbc, 0xef, 0x2d, 0xa1, 0xad, 0x7e, 0xa3, 0x1a, 0xf0, 0xf0, 0xd8, 0x1e, 0x41, 0x27, 0xf4, 0xbf, 0xba, 0xe3, 0x8d, 0xce, 0x3c, 0x91, 0x28, 0x4d, 0x10, 0x64, 0xfd, 0x23, 0xce, 0xa7, 0xfb, 0x13, 0x7e, 0x52, 0x0c, 0xef, 0xfe, 0xdb, 0x9a, 0x09, 0xa4, 0x4e, 0x52, 0xeb, 0x23, 0xa0, 0x28, 0x48, 0xb3, 0x41, 0x9b, 0x32, 0x6c, 0xf0, 0x3a, 0x8c, 0xf3, 0xd3, 0x67, 0xc3, 0x59, 0xc7, 0x5b, 0xb9, 0x40, 0xf5, 0x6a, 0x02, 0x40, 0xa6 ],
-const [ 0x20, 0xdf, 0xbd, 0xc1, 0x07, 0xb5, 0xe0, 0xaf, 0x83, 0xb2, 0xd1, 0x60, 0x21, 0x03, 0x9d, 0x02, 0x69, 0xde, 0x2d, 0x27, 0xb4, 0x0b, 0xbe, 0x6c, 0x3e, 0xa4, 0x92, 0x59, 0x7c, 0x19, 0xe5, 0x89, 0xb0, 0x76, 0x23, 0x0b, 0xba, 0xe9, 0x58, 0x07, 0x31, 0x7f, 0xe8, 0xa5, 0xb2, 0x2e, 0x80, 0x2a, 0x78, 0x18, 0x4c, 0x65, 0x2d, 0x0e, 0x6b, 0x49, 0x00, 0x53, 0xa0, 0xdb, 0xf8, 0xa3, 0x4a, 0x4f, 0x88, 0x74, 0x96, 0x6d, 0x63, 0x7c, 0xf3, 0x3a, 0x91, 0x73, 0xc6, 0xd5, 0xc3, 0x1a, 0x5f, 0x9f, 0xe4, 0x7c, 0x2c, 0x9e, 0xf0, 0x74, 0x2d, 0x24, 0x09, 0x6f, 0xa8, 0xab, 0xc8, 0x73, 0x1e, 0x04, 0xd1, 0x61, 0x7d, 0xb1, 0xaa, 0x77, 0x97, 0x8f, 0xcd, 0x18, 0xd3, 0xb8, 0xfb, 0xd0, 0x23, 0xa7, 0xd4, 0x93, 0x36, 0x9d, 0xa5, 0x45, 0xee, 0x44, 0x81, 0x80, 0x14, 0x92, 0x93, 0x91, 0x4b, 0xf1 ],
-const [ 0x62, 0xd4, 0x32, 0xe9, 0x7b, 0x12, 0x14, 0xa9, 0x4a, 0xb9, 0x22, 0xb6, 0xbf, 0xc7, 0xf0, 0xa3, 0x2f, 0x0e, 0x99, 0x73, 0xa7, 0x37, 0xb0, 0xb6, 0x7f, 0x06, 0x7a, 0xf5, 0x32, 0xe0, 0x5a, 0x50, 0x6d, 0x8a, 0x8c, 0x66, 0x65, 0x33, 0x16, 0x75, 0x6e, 0xb5, 0xfc, 0xc2, 0xca, 0x18, 0xb4, 0x3c, 0xbe, 0x57, 0xd9, 0x5c, 0xeb, 0x67, 0x24, 0x4f, 0xdc, 0x76, 0x97, 0x57, 0xdc, 0x71, 0xfb, 0x6f, 0x0a, 0xc8, 0x8d, 0x2e, 0xaf, 0x75, 0xf5, 0xed, 0xce, 0x3b, 0x77, 0x2c, 0xfd, 0x2b, 0x6d, 0x32, 0x74, 0x6d, 0xf5, 0xf4, 0x64, 0x3d, 0xe7, 0x38, 0x8a, 0x34, 0x0a, 0xfa, 0x03, 0xc9, 0x87, 0x0f, 0x62, 0x17, 0x9d, 0x08, 0x00, 0xe1, 0x97, 0x59, 0x93, 0xd3, 0xfb, 0xbb, 0x02, 0x0a, 0x05, 0xce, 0x78, 0xd7, 0x53, 0x03, 0xb8, 0xc0, 0xe2, 0xb9, 0xb0, 0xc8, 0x39, 0xa6, 0x50, 0xf1, 0xe4, 0x79 ],
-const [ 0xb0, 0x8f, 0x5e, 0x59, 0x26, 0xb6, 0x8f, 0x1c, 0x18, 0x65, 0x2c, 0x7f, 0x7f, 0xc5, 0x93, 0xfb, 0x3c, 0x3f, 0x53, 0x70, 0xfe, 0xd6, 0x33, 0x19, 0x65, 0xbb, 0x77, 0xbe, 0x68, 0x1b, 0x5e, 0x2b, 0xf4, 0x3c, 0xef, 0xe2, 0xd5, 0xc8, 0xf5, 0x0d, 0xda, 0x69, 0x49, 0xb6, 0x34, 0x95, 0x4f, 0x3a, 0x20, 0xac, 0xc3, 0xfb, 0xc6, 0x40, 0xb6, 0x56, 0x60, 0xb3, 0xd3, 0xd5, 0x9e, 0x08, 0xe7, 0xa5, 0x49, 0xf3, 0xa1, 0x4a, 0x28, 0x32, 0x96, 0x91, 0x20, 0x20, 0x87, 0xc6, 0x9e, 0x88, 0xe7, 0x28, 0x3a, 0xb7, 0x98, 0x9a, 0x94, 0xd5, 0xf6, 0x9b, 0x82, 0x75, 0x16, 0x78, 0x6e, 0x6a, 0x4f, 0xc0, 0xf9, 0xdc, 0xfa, 0xf9, 0xe4, 0x9c, 0x77, 0x91, 0x31, 0xb5, 0x71, 0x18, 0x85, 0x44, 0x62, 0xac, 0xd1, 0x89, 0x59, 0xb4, 0x31, 0x3d, 0xfb, 0xd1, 0x15, 0x26, 0xc7, 0x11, 0x9e, 0xea, 0x9f, 0x66 ],
-const [ 0xed, 0x4f, 0x26, 0x9a, 0x88, 0x51, 0xeb, 0x31, 0x54, 0x77, 0x15, 0x16, 0xb2, 0x72, 0x28, 0x15, 0x52, 0x00, 0x77, 0x80, 0x49, 0xb2, 0xdc, 0x19, 0x63, 0xf3, 0xac, 0x32, 0xba, 0x46, 0xea, 0x13, 0x87, 0xcf, 0xbb, 0x9c, 0x39, 0x15, 0x1a, 0x2c, 0xc4, 0x06, 0xcd, 0xc1, 0x3c, 0x3c, 0x98, 0x60, 0xa2, 0x7e, 0xb0, 0xb7, 0xfe, 0x8a, 0x72, 0x01, 0xad, 0x11, 0x55, 0x2a, 0xfd, 0x04, 0x1e, 0x33, 0xf7, 0x0e, 0x53, 0xd9, 0x7c, 0x62, 0xf1, 0x71, 0x94, 0xb6, 0x61, 0x17, 0x02, 0x8f, 0xa9, 0x07, 0x1c, 0xc0, 0xe0, 0x4b, 0xd9, 0x2d, 0xe4, 0x97, 0x2c, 0xd5, 0x4f, 0x71, 0x90, 0x10, 0xa6, 0x94, 0xe4, 0x14, 0xd4, 0x97, 0x7a, 0xbe, 0xd7, 0xca, 0x6b, 0x90, 0xba, 0x61, 0x2d, 0xf6, 0xc3, 0xd4, 0x67, 0xcd, 0xed, 0x85, 0x03, 0x25, 0x98, 0xa4, 0x85, 0x46, 0x80, 0x4f, 0x9c, 0xf2, 0xec, 0xfe ],
-const [ 0x6d, 0xde, 0x9a, 0xe8, 0x67, 0xe2, 0xfe, 0xb3, 0x67, 0x00, 0x8a, 0x97, 0x5d, 0x78, 0x53, 0xed, 0x8f, 0x89, 0x69, 0x0f, 0x3c, 0x87, 0xa1, 0x10, 0x7f, 0x2e, 0x98, 0xaa, 0x77, 0x36, 0xf4, 0x77, 0xa5, 0x27, 0xed, 0x64, 0x95, 0x6f, 0x0d, 0x64, 0xc1, 0xb2, 0x33, 0x61, 0xb2, 0x61, 0xde, 0x78, 0x68, 0x8e, 0xa8, 0x65, 0xfc, 0xff, 0x11, 0x3c, 0x84, 0x81, 0x7e, 0x5b, 0x37, 0x7e, 0x82, 0x9c, 0xd2, 0xd2, 0x5b, 0xcf, 0x3a, 0xdb, 0xc0, 0x67, 0x62, 0xcf, 0xda, 0x73, 0x6f, 0x53, 0x90, 0xd0, 0x1a, 0x49, 0x07, 0x9d, 0x56, 0xe9, 0x69, 0xf0, 0x33, 0x13, 0xe6, 0xc7, 0x03, 0xe3, 0xf9, 0x42, 0xbb, 0x87, 0xed, 0x0f, 0x9c, 0x4d, 0x9f, 0x25, 0x12, 0x00, 0x85, 0xb5, 0xdc, 0x75, 0xef, 0x5d, 0x6d, 0x61, 0x8d, 0xa0, 0x92, 0x6d, 0x32, 0x93, 0x56, 0x8d, 0xd7, 0xd8, 0x23, 0x8d, 0xe3, 0xd0 ],
-const [ 0x10, 0x7b, 0xdf, 0xb5, 0x5c, 0x60, 0x1e, 0x74, 0xf6, 0x50, 0x50, 0x15, 0xa5, 0xcb, 0x87, 0xbc, 0x0e, 0xb0, 0xb2, 0xe7, 0xcb, 0x04, 0x59, 0x4f, 0xbe, 0xef, 0x8e, 0x0f, 0xa5, 0x07, 0x20, 0x07, 0xee, 0xd2, 0x11, 0x83, 0xcc, 0x85, 0x4a, 0x18, 0x8a, 0x12, 0x8e, 0xcf, 0x20, 0x62, 0xad, 0x86, 0x04, 0xdf, 0xfa, 0x92, 0x42, 0x36, 0xfe, 0xa9, 0xcf, 0x5b, 0x6e, 0x00, 0x1a, 0xcd, 0x5b, 0xb0, 0xe5, 0x1b, 0xa9, 0x5e, 0x53, 0xa7, 0xc2, 0x1b, 0x42, 0xaa, 0x8b, 0x89, 0xda, 0x78, 0x98, 0x3f, 0x66, 0x06, 0x9c, 0x6f, 0x63, 0xa9, 0x23, 0xc6, 0xd7, 0x20, 0x83, 0x94, 0xe5, 0xd5, 0x0f, 0x2d, 0x9d, 0x60, 0x8f, 0x8f, 0x19, 0x4d, 0xed, 0x45, 0xc5, 0x1f, 0x31, 0x8b, 0xfe, 0x94, 0xaf, 0xb2, 0xdf, 0x2b, 0x7f, 0xc6, 0x57, 0xe4, 0x2e, 0x6f, 0x7f, 0x47, 0xb3, 0x15, 0x2b, 0xa7, 0xa5, 0x47 ],
-const [ 0xf6, 0x27, 0x96, 0xfa, 0xaa, 0x33, 0x3d, 0xdd, 0xae, 0x59, 0x6f, 0x98, 0xcd, 0x4d, 0xe3, 0x93, 0x1e, 0xd9, 0x07, 0x10, 0x28, 0x74, 0x46, 0x60, 0x4a, 0x15, 0x8b, 0x57, 0x5b, 0x49, 0x01, 0xfd, 0x8d, 0x84, 0x1e, 0x86, 0x97, 0xb4, 0xdf, 0x85, 0x13, 0x1c, 0x55, 0x5c, 0x24, 0x60, 0x60, 0xf7, 0x5d, 0xdc, 0xbb, 0xba, 0xde, 0x3a, 0x38, 0xb7, 0xc0, 0x44, 0x4d, 0x25, 0xb4, 0xf6, 0xd0, 0x0d, 0xe6, 0xd8, 0xff, 0x47, 0x28, 0x8b, 0xc3, 0xa5, 0x4c, 0xa1, 0x36, 0x6e, 0xd1, 0xb2, 0x62, 0x0e, 0xc3, 0xab, 0x4c, 0x0b, 0xdc, 0x6a, 0x31, 0x3b, 0xef, 0x88, 0x0f, 0x35, 0x87, 0x76, 0x67, 0x05, 0xcb, 0xcc, 0x41, 0x24, 0xa4, 0xdd, 0x72, 0xa7, 0x22, 0x8f, 0x1a, 0xb6, 0x1c, 0x6a, 0x70, 0x40, 0x17, 0xee, 0xc2, 0xed, 0x69, 0x2a, 0xb7, 0x54, 0x9f, 0x8a, 0xd8, 0x6f, 0x1b, 0xf1, 0x4e, 0x4b ],
-const [ 0x44, 0xe9, 0xa1, 0xf1, 0x43, 0x77, 0x91, 0x96, 0x3c, 0x1a, 0x3e, 0x0a, 0xaa, 0xae, 0x24, 0xaf, 0xfc, 0x3b, 0x40, 0x58, 0x44, 0xd1, 0x6a, 0x52, 0x33, 0xb6, 0xe5, 0xa1, 0x45, 0xc4, 0x35, 0x8b, 0x39, 0x0c, 0x30, 0x5b, 0xc4, 0xbf, 0x58, 0x5f, 0x86, 0x4f, 0x68, 0x33, 0x3d, 0xd1, 0x2d, 0x41, 0x39, 0xa6, 0x97, 0x89, 0x10, 0x5a, 0x10, 0x9e, 0x92, 0xcc, 0x0c, 0xf1, 0xff, 0x8f, 0xe2, 0x52, 0x78, 0x91, 0xda, 0xb4, 0xb4, 0xfa, 0x87, 0x31, 0xf4, 0x57, 0x57, 0x4e, 0x39, 0xf8, 0x68, 0x7f, 0xb4, 0x96, 0x9d, 0xee, 0x7e, 0x3a, 0xf2, 0x78, 0x89, 0x59, 0x0c, 0xf8, 0xd7, 0x44, 0x15, 0xc9, 0xe9, 0xc0, 0xc6, 0x86, 0x7b, 0xf0, 0xc5, 0x14, 0x6e, 0x7c, 0x32, 0xe3, 0x06, 0xec, 0x7c, 0x70, 0x55, 0x55, 0x7a, 0x0f, 0xf7, 0x38, 0xb7, 0xe7, 0x00, 0xa7, 0x0d, 0x3e, 0x33, 0xa9, 0x75, 0xf7 ],
-const [ 0x0e, 0xba, 0xef, 0xd2, 0x15, 0x3d, 0xe2, 0xc7, 0x05, 0x37, 0xce, 0xb2, 0x7e, 0x5e, 0xe7, 0x01, 0x05, 0xae, 0x85, 0xbd, 0x4d, 0xa3, 0x84, 0x62, 0xb4, 0xab, 0xeb, 0xed, 0x11, 0xdb, 0xcd, 0x36, 0xad, 0xe1, 0x6d, 0x80, 0x8f, 0x3a, 0xa5, 0x4f, 0xfd, 0xa5, 0x89, 0x7a, 0x3f, 0xd7, 0x47, 0x80, 0xa6, 0x70, 0x52, 0x1f, 0xcd, 0x2e, 0xbf, 0x23, 0x1f, 0x60, 0xef, 0x7d, 0x99, 0x9e, 0x6e, 0x94, 0xd1, 0xb8, 0x1b, 0xe0, 0x38, 0xec, 0x89, 0xb4, 0x9c, 0x5c, 0xa6, 0x5b, 0xf1, 0xbf, 0x9a, 0x67, 0x50, 0x56, 0xf2, 0x46, 0x40, 0x21, 0xfe, 0x16, 0x35, 0x54, 0x77, 0xba, 0x56, 0x05, 0x65, 0x2e, 0x83, 0x27, 0x40, 0x17, 0x97, 0xbb, 0x56, 0x9f, 0xea, 0x45, 0x6c, 0x7f, 0x1b, 0x7d, 0xa8, 0x5d, 0x0c, 0x48, 0xaf, 0x59, 0x2d, 0xe6, 0x0a, 0xe3, 0xfe, 0x6d, 0xce, 0xcf, 0xcf, 0x76, 0x7c, 0xab ],
-const [ 0xd9, 0x85, 0x57, 0x50, 0x4a, 0x21, 0xfc, 0x3a, 0x43, 0x4c, 0x78, 0x0c, 0x32, 0x8e, 0xc2, 0x39, 0xcf, 0x8d, 0x7c, 0x26, 0xf5, 0x8d, 0x6a, 0xd7, 0xb2, 0x33, 0x29, 0xc7, 0x9a, 0x8e, 0x1e, 0x17, 0x60, 0x58, 0xac, 0xeb, 0xa7, 0x78, 0xaa, 0x12, 0x15, 0xcc, 0x14, 0xe5, 0xa9, 0x26, 0x00, 0x71, 0x4f, 0x94, 0xd4, 0xd8, 0xb2, 0xe5, 0xb7, 0xf4, 0x52, 0x68, 0x45, 0x3e, 0xd6, 0xf7, 0x87, 0xee, 0xa3, 0x34, 0x22, 0x64, 0xad, 0x13, 0xce, 0xc7, 0x8d, 0x99, 0x0a, 0xec, 0xd5, 0xe3, 0x0f, 0x79, 0xa0, 0x69, 0x02, 0x4a, 0x6d, 0x84, 0x6d, 0x13, 0x2d, 0x2e, 0xf0, 0x47, 0x9a, 0x09, 0x34, 0x39, 0xcb, 0xa4, 0x21, 0x82, 0x05, 0xf9, 0x51, 0xa2, 0xd5, 0x3a, 0xc4, 0xea, 0x5b, 0xcd, 0xd5, 0x99, 0xe9, 0x95, 0x6c, 0x45, 0xcd, 0x73, 0x76, 0x7c, 0x6a, 0x0c, 0x92, 0xac, 0x8e, 0xcd, 0x0d, 0x40 ],
-const [ 0x6e, 0x09, 0xfe, 0xbe, 0xd3, 0x08, 0xba, 0xa4, 0x1a, 0x8b, 0x6e, 0x0f, 0x7f, 0xab, 0x61, 0x80, 0x8c, 0x9c, 0x84, 0x71, 0xea, 0x32, 0xee, 0xf1, 0x78, 0xa4, 0x88, 0x8e, 0x9a, 0x91, 0x0a, 0x77, 0xd4, 0x40, 0x26, 0xe2, 0x97, 0x2c, 0x02, 0xac, 0x5a, 0xc0, 0xec, 0x3f, 0xed, 0x5f, 0x4a, 0xb9, 0x0a, 0xa7, 0xcf, 0x4b, 0x2e, 0xf7, 0xf5, 0xde, 0xa6, 0x2e, 0xa7, 0xfd, 0xed, 0xb6, 0x3d, 0xef, 0x35, 0xc2, 0xae, 0x23, 0x44, 0xd3, 0x01, 0xd2, 0x81, 0x81, 0x05, 0xdf, 0x4f, 0x78, 0x42, 0x02, 0x99, 0xc1, 0x2f, 0x25, 0xae, 0x43, 0xa6, 0x0e, 0x50, 0x89, 0x94, 0x3f, 0x07, 0xc5, 0xf5, 0x1a, 0xbc, 0x15, 0x00, 0x49, 0x82, 0x06, 0x9e, 0x5d, 0xb7, 0x57, 0x21, 0xb5, 0x4c, 0xff, 0x33, 0xa2, 0x61, 0x70, 0x0c, 0xc8, 0x15, 0x1e, 0xe9, 0xc8, 0x9c, 0x3b, 0xb9, 0x1c, 0x92, 0xc5, 0x19, 0x42 ],
-const [ 0x7a, 0xf3, 0x90, 0xcc, 0x4e, 0xdd, 0xe0, 0xf3, 0xd4, 0x96, 0x13, 0x7d, 0x0c, 0xac, 0xd0, 0x87, 0x6b, 0x54, 0xc9, 0x09, 0xdc, 0x5c, 0xe3, 0x67, 0x05, 0x61, 0x97, 0x42, 0xcb, 0x42, 0x98, 0x94, 0x18, 0xd4, 0xb6, 0xfc, 0xdb, 0xd8, 0x02, 0x56, 0x51, 0x2a, 0x33, 0x8f, 0x84, 0x3b, 0x48, 0xb7, 0x11, 0xc0, 0x6f, 0x58, 0x2d, 0xac, 0x26, 0x07, 0xea, 0x5c, 0xa0, 0x38, 0xb7, 0x12, 0x6a, 0x57, 0x26, 0xa5, 0x4e, 0x14, 0xf3, 0x77, 0x78, 0xfe, 0x41, 0xa6, 0xd7, 0x53, 0x26, 0x87, 0xc6, 0x16, 0x6a, 0x50, 0xec, 0x63, 0x8c, 0x14, 0x60, 0x00, 0x06, 0xf5, 0x11, 0x34, 0xd2, 0x95, 0x66, 0xdc, 0x2d, 0xcd, 0x21, 0xbb, 0x9b, 0xa2, 0x89, 0x12, 0x2b, 0x74, 0xc8, 0x70, 0xfc, 0x79, 0x92, 0xcc, 0x00, 0x6a, 0x07, 0xd1, 0x00, 0x7c, 0xdb, 0x79, 0xe1, 0x92, 0xb4, 0xdd, 0x25, 0xb1, 0xd3, 0x4c ],
-const [ 0x75, 0xed, 0x3a, 0xe9, 0x08, 0x5b, 0xbf, 0x2d, 0x03, 0x4b, 0x86, 0x4d, 0x7f, 0x87, 0x05, 0x7c, 0x2d, 0x0b, 0x12, 0xc7, 0x39, 0x5f, 0xeb, 0x03, 0x75, 0x23, 0x79, 0x03, 0xb3, 0xeb, 0xd6, 0x0e, 0x72, 0x4e, 0x0c, 0x8f, 0xbe, 0x3a, 0x20, 0x0f, 0x51, 0x8a, 0x4f, 0x61, 0xfe, 0xdb, 0x97, 0x1c, 0x50, 0x9b, 0x79, 0x4f, 0x6e, 0x62, 0xfe, 0x6f, 0x41, 0x86, 0xf8, 0x94, 0xd9, 0xea, 0x8a, 0xe5, 0x0d, 0x16, 0xea, 0x51, 0x62, 0x8d, 0x66, 0x81, 0x2f, 0x5a, 0xa5, 0x0a, 0xfe, 0xed, 0x30, 0xe6, 0x34, 0x25, 0x30, 0x25, 0xf5, 0xae, 0x7a, 0xe0, 0x42, 0x8d, 0xc8, 0x6f, 0x64, 0xf9, 0x49, 0xdb, 0x8e, 0x6d, 0x5d, 0x96, 0xbe, 0xfb, 0x99, 0x6a, 0xe4, 0xe3, 0x12, 0xb0, 0x46, 0x64, 0xd8, 0xc2, 0x23, 0xd2, 0xc0, 0xb3, 0x96, 0xe9, 0x67, 0x3d, 0xbe, 0x61, 0x73, 0xfa, 0x1c, 0xc2, 0x1c, 0xd7 ],
-const [ 0x78, 0x09, 0xe5, 0x9a, 0xd4, 0x8a, 0xeb, 0x2c, 0x6f, 0x03, 0xde, 0x77, 0x5b, 0x13, 0x71, 0xb7, 0xf8, 0x69, 0x26, 0xae, 0x0b, 0x87, 0x09, 0x8e, 0x10, 0xc6, 0x9e, 0x19, 0xd2, 0x9b, 0x18, 0x07, 0x38, 0x18, 0xcb, 0xa8, 0x62, 0xb6, 0xe4, 0xca, 0xf4, 0x51, 0x58, 0xdd, 0xb2, 0x74, 0x1a, 0x55, 0x4e, 0xd7, 0x91, 0x50, 0x7d, 0x26, 0x49, 0x79, 0x50, 0x04, 0xe9, 0x2c, 0xc2, 0x50, 0x65, 0xdb, 0x8e, 0xa7, 0x74, 0xb0, 0x43, 0x2a, 0x45, 0x73, 0x99, 0x81, 0x6d, 0xaf, 0x06, 0x20, 0x25, 0x10, 0x8d, 0xc8, 0xb2, 0x10, 0xd7, 0x51, 0x24, 0xd2, 0x84, 0xa8, 0x43, 0x4e, 0xc3, 0x14, 0xc7, 0xaf, 0x20, 0xbd, 0xc7, 0xf9, 0x9e, 0x6e, 0x74, 0xef, 0x06, 0x9a, 0x07, 0x34, 0x7e, 0x9d, 0xf8, 0xb0, 0x5d, 0x45, 0x71, 0x35, 0x3e, 0x91, 0x02, 0x63, 0x54, 0xb8, 0x96, 0xc9, 0xfd, 0x6d, 0xa6, 0x4c ],
-const [ 0x47, 0x45, 0x10, 0x0c, 0xec, 0x04, 0x06, 0xcf, 0xfa, 0x14, 0x63, 0x50, 0xee, 0x12, 0x21, 0x33, 0x30, 0xd1, 0x92, 0x12, 0x3a, 0xf4, 0xa1, 0xba, 0xfd, 0xbc, 0x5c, 0x98, 0x80, 0x1e, 0xaf, 0x6e, 0xcb, 0x19, 0x72, 0x4a, 0x03, 0x46, 0xa7, 0xb9, 0xd6, 0xb1, 0xfc, 0x38, 0x1a, 0xe7, 0x98, 0xeb, 0xb0, 0x50, 0x13, 0x92, 0xaf, 0xbf, 0xc6, 0xb8, 0xbe, 0x48, 0x46, 0x2d, 0xc2, 0x52, 0x2b, 0xb7, 0xba, 0xec, 0x16, 0x05, 0xe6, 0x65, 0xf2, 0xe4, 0x2f, 0x16, 0x79, 0xb6, 0xc3, 0x83, 0xfa, 0x1f, 0x00, 0xa3, 0x5a, 0x01, 0x93, 0x7b, 0x5a, 0xab, 0xe1, 0xf2, 0x17, 0x4d, 0xa6, 0xe0, 0xd7, 0xaf, 0xdb, 0x68, 0x02, 0x23, 0xde, 0x88, 0x6f, 0xb9, 0xcd, 0xee, 0xe1, 0xb1, 0x32, 0x0d, 0xd2, 0x36, 0xe6, 0x71, 0x6f, 0x49, 0x2f, 0x4f, 0xe3, 0xfb, 0x2c, 0x61, 0xd8, 0xdf, 0x73, 0xf0, 0x3b, 0xbf ],
-const [ 0x91, 0xea, 0x78, 0x33, 0x41, 0x08, 0xce, 0x62, 0x61, 0xdd, 0xee, 0x5d, 0x98, 0x04, 0x5b, 0xb3, 0x07, 0xa6, 0xe8, 0xf3, 0xd0, 0xee, 0x65, 0xc1, 0xd9, 0xbc, 0x7d, 0x28, 0xcd, 0x9e, 0xdf, 0x32, 0x64, 0xfc, 0x9c, 0xb6, 0xe5, 0x92, 0xd0, 0x72, 0xe9, 0x23, 0x85, 0x59, 0x61, 0x6c, 0xd4, 0x2e, 0xda, 0x58, 0x4d, 0x52, 0x00, 0x72, 0x9a, 0xdb, 0x61, 0x9f, 0x5e, 0xe5, 0x74, 0x0d, 0x63, 0x2d, 0xda, 0x67, 0xf5, 0xdc, 0xe3, 0x4b, 0x89, 0xa0, 0x54, 0xfd, 0xa3, 0x01, 0x68, 0x5d, 0xf6, 0xf3, 0x14, 0x16, 0xcc, 0xa7, 0x8f, 0x19, 0xa8, 0xa7, 0x12, 0x4a, 0x2a, 0x22, 0xdd, 0x78, 0x34, 0x84, 0x7a, 0x93, 0x4b, 0x4a, 0x45, 0x19, 0x40, 0x15, 0x2c, 0xd2, 0x0f, 0xfd, 0xb4, 0xbd, 0x07, 0x27, 0x3c, 0x4a, 0x2b, 0x9a, 0x86, 0xc9, 0xd9, 0x4e, 0x73, 0x23, 0xa9, 0x86, 0x0e, 0xc8, 0x98, 0x60 ],
-const [ 0xec, 0x63, 0x87, 0x34, 0xd3, 0x36, 0xb8, 0xda, 0x6d, 0xfa, 0xf3, 0xda, 0x9e, 0x18, 0xc7, 0x13, 0x14, 0x94, 0xfc, 0xc0, 0x70, 0x9c, 0xd3, 0xa9, 0xa6, 0x61, 0x8e, 0x9b, 0xa6, 0x25, 0x33, 0x15, 0x3c, 0x95, 0x8e, 0x44, 0x34, 0x5a, 0x75, 0x31, 0xc3, 0xeb, 0x50, 0x3a, 0x22, 0xa5, 0xd8, 0xbf, 0x7c, 0x1d, 0x1e, 0x1d, 0x0a, 0xb5, 0xcf, 0xe0, 0x7d, 0x6d, 0xb7, 0x34, 0x9c, 0xfc, 0x85, 0x9d, 0x2e, 0x20, 0xce, 0xe8, 0x1a, 0x32, 0x54, 0x62, 0xcd, 0xfd, 0x87, 0x47, 0xdc, 0xd0, 0x4c, 0x7d, 0xea, 0xd2, 0xfe, 0x82, 0xcd, 0x96, 0xb2, 0xa4, 0xec, 0xef, 0xc0, 0x70, 0xeb, 0x06, 0x7f, 0x6c, 0x8b, 0xa9, 0x4f, 0x09, 0xcb, 0xe6, 0xdd, 0xd3, 0x54, 0xd9, 0xa2, 0xeb, 0x13, 0xc2, 0xad, 0xb7, 0x28, 0x5a, 0xa3, 0xd8, 0xff, 0x68, 0x04, 0x5c, 0xbc, 0x8f, 0xaf, 0x35, 0xdd, 0x6a, 0xa9, 0xea ],
-const [ 0xac, 0x47, 0x56, 0xb8, 0x51, 0xfc, 0x88, 0x66, 0xb9, 0xad, 0xfa, 0xc2, 0xd0, 0x25, 0x99, 0x14, 0x8e, 0x0d, 0xb7, 0x75, 0x7a, 0x62, 0xb1, 0xe0, 0x6d, 0x26, 0xcf, 0x8c, 0x99, 0x55, 0x6b, 0x79, 0xc9, 0x1a, 0x56, 0x49, 0xea, 0x43, 0x77, 0x52, 0xcb, 0xf3, 0xb5, 0xf1, 0x21, 0x96, 0x18, 0x21, 0xce, 0x1a, 0x2a, 0x4c, 0x63, 0x5d, 0xa4, 0x61, 0xe3, 0xe1, 0x46, 0x26, 0xca, 0xc7, 0x07, 0xd0, 0x4d, 0xfb, 0x6e, 0xd1, 0xe4, 0xac, 0x40, 0xf1, 0x06, 0xff, 0x5b, 0xa0, 0x33, 0x04, 0xe2, 0x8a, 0x38, 0xe9, 0x9a, 0x6d, 0xaf, 0x6d, 0x94, 0x27, 0xc5, 0x98, 0x0d, 0x14, 0x40, 0xa9, 0x92, 0x96, 0xc0, 0x51, 0x68, 0xf5, 0x44, 0x1e, 0x2a, 0x6a, 0xf1, 0x3a, 0xb4, 0x76, 0x0f, 0x55, 0x40, 0x78, 0x55, 0xe0, 0xcf, 0x7f, 0x66, 0x7c, 0xcb, 0x5d, 0x9b, 0xb2, 0xea, 0xfd, 0x03, 0xe4, 0x55, 0xf6 ],
-const [ 0x2a, 0xa1, 0xd9, 0x4e, 0xc8, 0x3c, 0xe7, 0xc3, 0xc7, 0x5c, 0x6b, 0xc8, 0x47, 0x75, 0x9b, 0x08, 0x52, 0x34, 0xfd, 0x44, 0xb4, 0x07, 0xd8, 0xf8, 0x0d, 0xdf, 0xe9, 0x3c, 0x24, 0x35, 0x56, 0xe8, 0x7e, 0x4b, 0xe8, 0xfb, 0x30, 0xb4, 0x74, 0x3e, 0xf1, 0x16, 0x9a, 0x24, 0x73, 0x2f, 0xb2, 0xf5, 0xf4, 0x16, 0x04, 0x2b, 0x10, 0xc3, 0x37, 0x1d, 0xd9, 0xd2, 0x0d, 0xda, 0x29, 0x84, 0x4d, 0x58, 0x37, 0x07, 0x00, 0xce, 0x69, 0xf7, 0xdf, 0x5e, 0x69, 0x24, 0x0d, 0xf7, 0x7b, 0x96, 0x02, 0x7a, 0x0e, 0xce, 0xc7, 0x1b, 0x90, 0x4f, 0x69, 0x0b, 0x87, 0x5d, 0xa8, 0x54, 0xde, 0x05, 0xef, 0x04, 0x7c, 0x5d, 0x89, 0x8d, 0x1c, 0x0d, 0x11, 0x6c, 0x58, 0x0e, 0x2a, 0x09, 0x06, 0xb2, 0x71, 0xde, 0xc8, 0xe5, 0xb0, 0xdc, 0xdf, 0xb2, 0x55, 0x0a, 0x40, 0x09, 0x22, 0x70, 0xea, 0xbf, 0x25, 0x33 ],
-const [ 0xd1, 0xa7, 0x08, 0x6d, 0x13, 0x4c, 0x11, 0xa8, 0xa3, 0x20, 0x4e, 0x01, 0x9f, 0x52, 0x84, 0x3e, 0x89, 0xf2, 0xd0, 0x1a, 0x02, 0xa8, 0x8a, 0x94, 0xd4, 0xa6, 0x6e, 0x8d, 0x36, 0xdb, 0xfe, 0x92, 0x4c, 0x69, 0x22, 0xf7, 0xee, 0x5a, 0x12, 0x25, 0xaa, 0x8e, 0x75, 0x34, 0x0c, 0xf8, 0xcb, 0xbd, 0x1c, 0x0b, 0x08, 0xe9, 0x29, 0x6e, 0x81, 0xce, 0xc5, 0xf7, 0x0c, 0xfc, 0x11, 0xd7, 0x63, 0x52, 0x3b, 0x12, 0xca, 0x17, 0x44, 0x33, 0xf2, 0x46, 0x07, 0x3d, 0x1c, 0x28, 0x77, 0xe4, 0x81, 0x28, 0x28, 0xfd, 0xf2, 0xe4, 0x11, 0x34, 0xbc, 0x80, 0x90, 0xfd, 0xce, 0x3f, 0xae, 0xcd, 0x1e, 0x54, 0xa5, 0x89, 0x48, 0xf5, 0x9f, 0x3f, 0x78, 0xb2, 0xc1, 0x14, 0x8b, 0x05, 0x68, 0x7d, 0x71, 0x2a, 0xb2, 0xb2, 0xd6, 0x30, 0x41, 0x60, 0x01, 0x51, 0x3b, 0x9e, 0xfc, 0x7f, 0x95, 0x23, 0xf5, 0x3f ],
-const [ 0xee, 0xfa, 0x0d, 0x62, 0x25, 0x45, 0x97, 0xbd, 0x67, 0xc8, 0x7e, 0x00, 0xfb, 0x35, 0xf6, 0x9c, 0x5c, 0xb2, 0xdc, 0x09, 0xf5, 0x8d, 0x9d, 0x14, 0x29, 0x2b, 0x54, 0x7b, 0x96, 0x42, 0x32, 0xb7, 0x9b, 0x48, 0x23, 0x19, 0x17, 0x2c, 0xae, 0x18, 0x74, 0x43, 0x1d, 0xea, 0xe5, 0x85, 0xdf, 0x51, 0xeb, 0xf9, 0x2a, 0xb8, 0x1e, 0x6e, 0xe5, 0x7e, 0x2a, 0x6c, 0xc4, 0x92, 0x18, 0x6a, 0xb5, 0x40, 0xcf, 0x41, 0x7b, 0x4a, 0xda, 0xe1, 0x98, 0x3b, 0x6b, 0x43, 0x71, 0xf8, 0xa0, 0x9f, 0xad, 0x98, 0x06, 0xde, 0xde, 0x75, 0x5c, 0x52, 0x63, 0x83, 0x99, 0xa5, 0x8d, 0xe1, 0x30, 0x0f, 0x00, 0xae, 0x92, 0xcc, 0x5c, 0x1e, 0xf4, 0xce, 0x1d, 0xcd, 0x53, 0xaf, 0xc0, 0x53, 0xb6, 0xe9, 0x28, 0x18, 0xb4, 0x49, 0x3f, 0x6a, 0x35, 0xa1, 0xe0, 0xcc, 0x7d, 0xbe, 0xf5, 0x91, 0x66, 0x99, 0xdc, 0xaa ],
-const [ 0x56, 0xdc, 0x2b, 0x84, 0xda, 0x28, 0xf9, 0x48, 0x47, 0xf5, 0x98, 0x98, 0x0e, 0xbc, 0x2d, 0x58, 0x92, 0x27, 0x4e, 0x16, 0x39, 0xd0, 0xb7, 0xec, 0xc2, 0x4c, 0x3e, 0xa8, 0xd9, 0x68, 0x09, 0x2b, 0xe8, 0xb2, 0xfe, 0x0f, 0x31, 0x3c, 0x7b, 0x8d, 0x1a, 0x9c, 0x47, 0x9d, 0xc7, 0x37, 0xc9, 0x5e, 0xee, 0xc0, 0x78, 0xb9, 0xe7, 0xfb, 0x93, 0x41, 0x03, 0xc7, 0x12, 0x5e, 0x1f, 0x5b, 0xdc, 0xab, 0x79, 0xd0, 0x3a, 0x9c, 0xc2, 0xe0, 0x8c, 0x64, 0x74, 0xed, 0x3b, 0x16, 0x65, 0x44, 0xee, 0x0a, 0x9d, 0xa4, 0x01, 0x82, 0x64, 0xfa, 0x33, 0x8d, 0xa0, 0x6f, 0x9e, 0x2c, 0x5e, 0xa4, 0xed, 0xb4, 0xaf, 0x3c, 0xc9, 0x73, 0xb5, 0x9c, 0x94, 0x96, 0xfd, 0xee, 0x5a, 0x4a, 0x0f, 0x6c, 0x04, 0x22, 0x44, 0xdb, 0xcf, 0xb9, 0xd8, 0x55, 0xfd, 0x98, 0x40, 0x4c, 0xcb, 0x5a, 0xbe, 0xcc, 0xa2, 0x0e ],
-const [ 0x3a, 0x51, 0xf6, 0xfb, 0xfe, 0xf3, 0x87, 0x24, 0x34, 0x7a, 0xb1, 0xa4, 0xf7, 0xaa, 0xfb, 0x7a, 0x99, 0x9a, 0xee, 0x9b, 0x89, 0x0a, 0x19, 0xe8, 0x7a, 0xf6, 0x58, 0x5d, 0xc1, 0x6c, 0x56, 0x8b, 0xff, 0x9a, 0x51, 0x48, 0x01, 0x2b, 0x1d, 0xa5, 0xe4, 0xd4, 0x6c, 0x20, 0x7d, 0x29, 0x4c, 0x1b, 0xf8, 0xb6, 0xf1, 0x8d, 0xbe, 0x4b, 0xb5, 0xf8, 0x9d, 0x97, 0x5d, 0x9b, 0x23, 0xf8, 0x9e, 0xe8, 0x4a, 0x92, 0xe0, 0x38, 0x5b, 0x9f, 0x41, 0xbe, 0x0c, 0x05, 0xdd, 0xb9, 0xeb, 0x2e, 0x4d, 0xee, 0x00, 0x14, 0x6d, 0x56, 0xae, 0x9b, 0x62, 0x14, 0xdb, 0x24, 0xdc, 0xa9, 0x51, 0x5f, 0x99, 0x6b, 0x63, 0x60, 0x2b, 0x34, 0xd3, 0xf6, 0xfa, 0x57, 0xf3, 0x38, 0x8c, 0xd8, 0x0b, 0x60, 0x04, 0xdc, 0xfb, 0xdd, 0xe9, 0x5e, 0x21, 0xa3, 0x29, 0x24, 0x7d, 0xc6, 0x5e, 0xf1, 0x13, 0x47, 0x4f, 0xfd ],
-const [ 0xaa, 0x02, 0xf0, 0xb3, 0x77, 0xf1, 0x61, 0xee, 0x60, 0xb0, 0xfb, 0xd6, 0xc5, 0x6a, 0x53, 0x7c, 0x03, 0x58, 0xcb, 0x8d, 0xa6, 0x2b, 0x63, 0xd5, 0xda, 0xaa, 0xd2, 0x03, 0x23, 0x9c, 0xd6, 0xac, 0x4e, 0xe8, 0xc8, 0x92, 0xa8, 0xfb, 0x73, 0x25, 0x6d, 0x6a, 0x26, 0x4a, 0x83, 0xd8, 0x08, 0x5c, 0x68, 0x1b, 0xac, 0x70, 0x6a, 0x9a, 0xe5, 0xde, 0x16, 0xf9, 0xdc, 0xfd, 0xf2, 0xf9, 0x5f, 0x2d, 0x6f, 0x99, 0x7c, 0x1b, 0x19, 0x82, 0x4f, 0x40, 0x11, 0xa1, 0x18, 0xab, 0xbd, 0x16, 0x90, 0x01, 0xbe, 0x4d, 0x7e, 0xc2, 0x22, 0x6a, 0x85, 0xcd, 0xdb, 0xeb, 0x40, 0x27, 0x70, 0x88, 0x91, 0xf8, 0xf3, 0x5e, 0x35, 0xd6, 0x33, 0x4d, 0x9c, 0x46, 0x32, 0x9f, 0xf8, 0x80, 0xda, 0xea, 0x95, 0x73, 0xeb, 0x37, 0x68, 0x09, 0x38, 0x63, 0xea, 0xac, 0x13, 0xc6, 0x27, 0x09, 0x06, 0x13, 0x11, 0x14 ],
-const [ 0x72, 0xd1, 0x89, 0x51, 0xda, 0x90, 0xb1, 0xf6, 0xd9, 0x08, 0x25, 0x3e, 0x55, 0xda, 0x1b, 0x5b, 0x47, 0x6d, 0x6a, 0x93, 0x6c, 0xd6, 0xe4, 0x43, 0x3e, 0xfc, 0xe7, 0x24, 0x22, 0xf9, 0x2f, 0xcd, 0xe3, 0xc3, 0xee, 0x79, 0x5f, 0x0b, 0x1f, 0x0b, 0x80, 0x65, 0x17, 0x4f, 0x6e, 0xaa, 0x5d, 0x83, 0x03, 0x9a, 0xbb, 0x16, 0x80, 0xc6, 0x95, 0xaf, 0x7e, 0xae, 0x7a, 0x71, 0x27, 0x26, 0xf9, 0x7e, 0xa5, 0xfe, 0xb6, 0xb9, 0xdb, 0xe1, 0xbd, 0xd1, 0x53, 0x7e, 0x15, 0x7b, 0x78, 0xe6, 0x99, 0xfe, 0x06, 0x35, 0x03, 0xf5, 0xbe, 0x75, 0x4a, 0x50, 0x5e, 0xbf, 0x2e, 0x9d, 0xd0, 0xa3, 0x10, 0x86, 0xa2, 0xcb, 0x08, 0x9a, 0xb6, 0xda, 0x32, 0x50, 0x3b, 0x9a, 0x48, 0x48, 0xdb, 0x57, 0x76, 0xd5, 0x36, 0x86, 0x69, 0xb9, 0x90, 0xab, 0xaa, 0x2f, 0xc6, 0x79, 0x2a, 0x2f, 0x87, 0x3a, 0x1e, 0xed ],
-const [ 0xeb, 0x6b, 0x60, 0xd0, 0x85, 0x8d, 0x6f, 0x87, 0xf5, 0xb9, 0xba, 0x7f, 0xc7, 0x5a, 0xcb, 0xa8, 0x75, 0x17, 0x84, 0xef, 0x88, 0x60, 0x61, 0x70, 0x00, 0x47, 0xfd, 0xe7, 0xf6, 0x92, 0xd8, 0x68, 0x80, 0x0e, 0x57, 0x51, 0xd5, 0x26, 0x0c, 0x7c, 0xb1, 0xb3, 0x38, 0xb9, 0xfb, 0x16, 0x8e, 0x7b, 0xa6, 0x85, 0x3a, 0xd1, 0xd5, 0xa2, 0x22, 0x98, 0x42, 0x52, 0x6c, 0xf0, 0xe0, 0xcc, 0x40, 0xec, 0xbf, 0xf0, 0xcf, 0x8e, 0x30, 0xdb, 0x94, 0xf2, 0x2b, 0xb8, 0xd9, 0xc9, 0xed, 0xd8, 0x7e, 0x09, 0xe5, 0x06, 0xf6, 0xe3, 0xd1, 0x14, 0x92, 0xf6, 0x25, 0xba, 0x02, 0xc2, 0xac, 0xa1, 0x19, 0x5f, 0x71, 0xba, 0xd0, 0x6e, 0xe0, 0xd4, 0x8e, 0x51, 0x29, 0x6e, 0xa6, 0x97, 0xe5, 0xc9, 0x21, 0xba, 0xfc, 0x42, 0xbf, 0x0d, 0xc6, 0xdf, 0x38, 0xf0, 0x70, 0x28, 0xc7, 0x46, 0xa2, 0x38, 0xe9, 0x29 ],
-const [ 0x36, 0xb5, 0xcf, 0x31, 0xaf, 0x37, 0xc9, 0x03, 0x34, 0xf2, 0xf4, 0xad, 0xf6, 0xa9, 0x18, 0xa2, 0x2e, 0xff, 0x5e, 0x3e, 0x54, 0xdc, 0x1a, 0x4f, 0x92, 0x12, 0xe8, 0xd4, 0x78, 0x41, 0xfa, 0x05, 0xf1, 0xf8, 0xb0, 0x93, 0x76, 0x1c, 0x69, 0x30, 0x81, 0x8e, 0x9a, 0x52, 0x45, 0x08, 0x1d, 0x34, 0x9c, 0x48, 0xcb, 0x1e, 0x41, 0x71, 0x4c, 0xe7, 0x3f, 0xae, 0x2e, 0xb8, 0xa9, 0x18, 0x35, 0x12, 0x8c, 0xda, 0xf2, 0x13, 0x22, 0x92, 0x97, 0xf5, 0x48, 0xfb, 0x0a, 0xd7, 0x32, 0xca, 0x38, 0xc0, 0x5e, 0xd5, 0xac, 0xe1, 0xc6, 0x7a, 0x60, 0x1a, 0x5a, 0x3f, 0xd3, 0xc0, 0xad, 0xb6, 0x5b, 0x9e, 0xef, 0xa4, 0xbd, 0x39, 0x1b, 0x61, 0xfb, 0x59, 0x71, 0x82, 0x6d, 0xc4, 0x27, 0xb6, 0x13, 0x4d, 0x5c, 0xee, 0x2a, 0x0d, 0x4d, 0xc1, 0xfd, 0xf1, 0xcb, 0x0e, 0xfe, 0x75, 0xed, 0xe3, 0x15, 0xae ],
-const [ 0xf1, 0xab, 0x8f, 0xda, 0x83, 0x9d, 0x00, 0xf0, 0x47, 0x7d, 0x1a, 0xb6, 0xf3, 0xba, 0xdd, 0x42, 0x18, 0x34, 0xfa, 0x89, 0xa4, 0xab, 0x80, 0x75, 0xab, 0x77, 0xb7, 0x38, 0x67, 0x7a, 0x4c, 0xdf, 0x7d, 0x54, 0xaf, 0x2a, 0x81, 0xd5, 0xba, 0x9b, 0xbd, 0xb8, 0x93, 0xcd, 0x2e, 0x8e, 0xd3, 0x07, 0xd0, 0xf8, 0xe8, 0x11, 0x1c, 0x19, 0xb8, 0x46, 0xce, 0x4b, 0x86, 0xeb, 0xeb, 0x11, 0x1a, 0xbf, 0x03, 0x4e, 0x1c, 0xd3, 0xb3, 0xb4, 0xc2, 0x9c, 0x6f, 0x7e, 0xab, 0x47, 0x7e, 0x62, 0x0a, 0x4c, 0x46, 0xc1, 0x06, 0x46, 0xca, 0x22, 0x61, 0x02, 0x71, 0xde, 0x58, 0xd6, 0x09, 0x1c, 0xcb, 0x34, 0x0b, 0x00, 0x9e, 0x7e, 0x21, 0x20, 0x5f, 0x1c, 0xe5, 0x38, 0x29, 0xcd, 0xec, 0x1e, 0xc8, 0x3a, 0x03, 0xf8, 0x1d, 0xd1, 0xb8, 0xac, 0xc4, 0xd0, 0x1d, 0x98, 0xf5, 0xa0, 0xc8, 0x84, 0xa8, 0x65 ],
-const [ 0x6b, 0xfd, 0xc8, 0x53, 0x9f, 0xe6, 0xbf, 0x99, 0x89, 0x2c, 0x1c, 0x36, 0xd5, 0x21, 0xf7, 0xb1, 0x7c, 0x22, 0x4e, 0xe3, 0x83, 0x77, 0x55, 0xfe, 0xe5, 0x7a, 0x0d, 0xce, 0xce, 0xfb, 0x18, 0x3e, 0x09, 0xe4, 0xcc, 0x1d, 0xbc, 0x19, 0x86, 0x22, 0x53, 0xa2, 0x41, 0x2e, 0xba, 0x0c, 0x67, 0xd2, 0xcf, 0x0c, 0xe6, 0x11, 0x17, 0x66, 0x87, 0x67, 0xaf, 0x0d, 0x7c, 0x0a, 0x86, 0x8c, 0x37, 0x6f, 0xca, 0xa4, 0x83, 0x10, 0xa0, 0x37, 0xcd, 0x6d, 0x18, 0x65, 0xc2, 0x50, 0x60, 0xf4, 0x20, 0x56, 0x38, 0xf5, 0xc5, 0xab, 0xa5, 0xa4, 0x0d, 0x15, 0xea, 0x91, 0x5a, 0x34, 0xb4, 0xfd, 0xf4, 0x08, 0x95, 0x87, 0x14, 0xb3, 0xb3, 0x08, 0x3b, 0x80, 0xc2, 0xbb, 0xc8, 0x25, 0x2f, 0xa1, 0xca, 0x45, 0x9e, 0x23, 0x13, 0x39, 0x97, 0xfa, 0x8e, 0x10, 0x7c, 0x4c, 0xd2, 0xd4, 0xbf, 0x17, 0xf6, 0x0f ],
-const [ 0xb5, 0x51, 0x09, 0x6a, 0x19, 0x4a, 0xee, 0x89, 0x92, 0x99, 0x13, 0x25, 0xde, 0x92, 0xc9, 0x59, 0x7c, 0x4d, 0x1c, 0x15, 0x6c, 0x57, 0xb4, 0x70, 0x36, 0xa7, 0xf9, 0x3f, 0x2d, 0xd4, 0x7b, 0xe6, 0xf5, 0x85, 0x90, 0x6e, 0x43, 0x28, 0x3f, 0xd8, 0xe4, 0xe7, 0x5c, 0xb1, 0x01, 0xd7, 0xf5, 0xe7, 0xa1, 0x73, 0xed, 0xdb, 0x6f, 0x4a, 0xe7, 0xb7, 0xbe, 0xf4, 0x65, 0x02, 0xca, 0x4a, 0x31, 0x72, 0x40, 0xd7, 0xfd, 0x01, 0x01, 0x89, 0x46, 0x42, 0x23, 0xac, 0x7e, 0xf6, 0x39, 0x19, 0x69, 0xdb, 0xd5, 0xab, 0xc8, 0xc4, 0x4b, 0xf3, 0x35, 0xee, 0xb7, 0x2d, 0x4e, 0x92, 0x41, 0x72, 0x15, 0xb7, 0x9f, 0x2f, 0x97, 0x4a, 0xdc, 0xd5, 0xcc, 0x70, 0x58, 0xd2, 0xbf, 0x1b, 0x11, 0xc1, 0xee, 0xdc, 0x20, 0xdd, 0xf4, 0xf8, 0x87, 0xbc, 0x65, 0xbd, 0x29, 0x3a, 0xfa, 0x16, 0x1a, 0xb3, 0xee, 0x5e ],
-const [ 0x86, 0x8b, 0xf0, 0x10, 0xb6, 0xe2, 0x6e, 0x4c, 0x1f, 0x91, 0xf0, 0x61, 0x4f, 0xf4, 0x2b, 0xc1, 0x40, 0x30, 0x87, 0xc3, 0x3b, 0x7e, 0x22, 0x9a, 0xf6, 0xc7, 0x18, 0x88, 0x00, 0x72, 0x02, 0x4f, 0x5e, 0x7a, 0xbc, 0xe9, 0x77, 0xc3, 0x6c, 0x78, 0x2d, 0xae, 0xbf, 0x80, 0x4d, 0xeb, 0x76, 0x54, 0x29, 0x8e, 0x22, 0xce, 0x83, 0x65, 0x2b, 0x43, 0xad, 0x89, 0x17, 0xb6, 0xef, 0x34, 0x09, 0x4c, 0x29, 0xd2, 0x88, 0x00, 0xb9, 0x5b, 0x82, 0x98, 0x9f, 0xdf, 0x91, 0xd8, 0xdf, 0x63, 0x7c, 0xf5, 0x27, 0xeb, 0x01, 0x4d, 0xb2, 0xd8, 0xd2, 0x54, 0x6c, 0x74, 0xdd, 0xd2, 0x57, 0xcc, 0xd0, 0x4c, 0x2d, 0xbe, 0xdd, 0xbf, 0x47, 0x52, 0xbb, 0x95, 0xbd, 0x4e, 0xed, 0xd1, 0xcf, 0x04, 0x46, 0x8d, 0x84, 0x6f, 0xad, 0xa6, 0x90, 0x7e, 0x1e, 0xb6, 0x7b, 0xb0, 0xf1, 0x42, 0x00, 0xe1, 0x5f, 0x35 ],
-const [ 0x85, 0x2f, 0x42, 0x03, 0x42, 0xb4, 0xbe, 0xad, 0x2e, 0x71, 0x44, 0x24, 0xeb, 0x0f, 0x28, 0x7f, 0x07, 0x76, 0x02, 0x04, 0x7f, 0x40, 0x55, 0x3d, 0x81, 0x6d, 0x6e, 0x4e, 0x76, 0x58, 0x8f, 0x85, 0x40, 0xe9, 0x4d, 0x33, 0xc0, 0x0d, 0x37, 0xba, 0x9c, 0x63, 0xb8, 0xe8, 0x3f, 0x39, 0x3f, 0x83, 0x21, 0xb6, 0x9c, 0x25, 0x48, 0x58, 0xae, 0x4a, 0x0f, 0xa2, 0x3b, 0xa8, 0x26, 0x0e, 0x1f, 0xbf, 0xda, 0x49, 0xa9, 0xb0, 0x96, 0x9f, 0x42, 0x52, 0xaa, 0xb4, 0x4f, 0x83, 0x4c, 0x76, 0x59, 0xbc, 0xdc, 0x4f, 0x6b, 0xe9, 0x6d, 0x9f, 0xbc, 0x77, 0x80, 0x69, 0x8e, 0xae, 0x12, 0x4d, 0x56, 0x41, 0xda, 0xb6, 0x1d, 0x23, 0xcc, 0x54, 0x26, 0x9d, 0xe1, 0xcd, 0xd1, 0x9e, 0x1a, 0xaf, 0xbf, 0x52, 0xc3, 0xaa, 0x37, 0xf5, 0xf5, 0xfc, 0xc9, 0xea, 0x5e, 0x2c, 0x31, 0x07, 0x44, 0xfb, 0x7e, 0x34 ],
-const [ 0x01, 0xc6, 0xd5, 0xc0, 0x27, 0x2b, 0x63, 0x1c, 0x3f, 0x9d, 0x1c, 0x06, 0x87, 0xf7, 0xc1, 0x49, 0x6e, 0x77, 0xe1, 0x47, 0x9b, 0xb9, 0xfc, 0x8f, 0x31, 0xe6, 0xe8, 0xb2, 0x52, 0x29, 0x74, 0x53, 0xe2, 0x62, 0x4c, 0x7e, 0x8d, 0x1f, 0x1c, 0x3b, 0x0b, 0xc8, 0xf8, 0x62, 0xa2, 0x19, 0xfc, 0xb0, 0xed, 0xd5, 0x2f, 0x1b, 0xdd, 0xb9, 0xad, 0x63, 0xfd, 0xaf, 0x06, 0xea, 0xfa, 0x45, 0xe1, 0xc5, 0x62, 0x5d, 0xe5, 0x13, 0xac, 0x26, 0xd9, 0x8d, 0x79, 0x4b, 0x09, 0x5f, 0x19, 0x6a, 0xec, 0x37, 0x51, 0xc7, 0x05, 0x9b, 0x5b, 0x42, 0x07, 0x7f, 0x2f, 0x86, 0x3c, 0x17, 0x01, 0x84, 0x27, 0xea, 0x0b, 0x20, 0x69, 0x28, 0x8c, 0x29, 0xe1, 0x3d, 0x11, 0x8f, 0x17, 0xa6, 0xf3, 0xd0, 0xdb, 0x03, 0x21, 0xb4, 0x29, 0x6e, 0x1f, 0x3a, 0x50, 0x0c, 0x4f, 0xd2, 0x53, 0xe1, 0x70, 0xcc, 0x90, 0xe9 ],
-const [ 0xa7, 0x41, 0x00, 0xcf, 0x30, 0xcd, 0x26, 0x41, 0x6e, 0x98, 0x78, 0x73, 0x9d, 0xfd, 0xb3, 0xc1, 0xfa, 0x56, 0x9d, 0x64, 0x27, 0xca, 0x8e, 0xe9, 0xd0, 0x66, 0x30, 0xe1, 0x8f, 0x6f, 0x83, 0xdb, 0x0d, 0xf7, 0x24, 0x8f, 0x6b, 0xaf, 0xce, 0x5c, 0xe0, 0xfc, 0x21, 0xf5, 0xa3, 0x4d, 0xa2, 0x57, 0x0b, 0xab, 0x04, 0xfe, 0xf4, 0x92, 0xa6, 0x58, 0x66, 0xff, 0x5c, 0x7a, 0x71, 0xca, 0x72, 0x12, 0x5b, 0x36, 0xee, 0x9c, 0xfe, 0xc7, 0x16, 0xd9, 0x6b, 0x53, 0x32, 0x7d, 0xd3, 0x5c, 0x93, 0x28, 0xa8, 0x9d, 0xd4, 0x98, 0xff, 0xe3, 0x60, 0x1d, 0x39, 0x1e, 0x34, 0x4d, 0xe2, 0xb8, 0xe7, 0xf8, 0xd9, 0x25, 0xe7, 0x5f, 0xb1, 0xbc, 0x05, 0xa0, 0x58, 0xc5, 0x34, 0x75, 0xf6, 0xd3, 0x8d, 0x1e, 0x18, 0x54, 0x97, 0x9c, 0x0e, 0x66, 0xc6, 0x20, 0x91, 0xec, 0x41, 0xc3, 0xaa, 0xe1, 0xe8, 0x77 ],
-const [ 0x72, 0xc2, 0x1b, 0xe6, 0xf0, 0xc4, 0xdf, 0x7c, 0xc8, 0xa5, 0x3f, 0x92, 0x26, 0xf3, 0x61, 0x46, 0xf9, 0xec, 0x5b, 0xea, 0x9c, 0x94, 0xf3, 0xb7, 0xb6, 0x04, 0xa8, 0xbf, 0x5f, 0x05, 0xf7, 0x24, 0x84, 0xdd, 0xd7, 0x88, 0x8c, 0x69, 0x86, 0xc4, 0x3b, 0x6c, 0x87, 0xdd, 0xd7, 0x27, 0xec, 0x34, 0x8a, 0x2a, 0xd1, 0xfc, 0x08, 0x69, 0x29, 0xf1, 0x71, 0x92, 0xbd, 0x47, 0x79, 0x9e, 0x71, 0xe1, 0xc6, 0xa7, 0xc9, 0xc4, 0x9a, 0xf9, 0xad, 0xcb, 0xb1, 0x6b, 0x69, 0x9c, 0x6d, 0xf0, 0xf8, 0xda, 0x30, 0x69, 0x82, 0x9d, 0x09, 0xbd, 0x23, 0x1f, 0x94, 0x2c, 0xee, 0xb8, 0x1b, 0xe0, 0x32, 0x0c, 0x01, 0xc5, 0xfb, 0x83, 0x61, 0x9b, 0xdc, 0xf9, 0xf2, 0x4a, 0xec, 0xb7, 0x2e, 0x75, 0x0f, 0xa2, 0xb3, 0x51, 0x77, 0xb3, 0xe9, 0xb8, 0x6a, 0xa7, 0xe5, 0x79, 0x45, 0xf8, 0x8d, 0xf3, 0xc1, 0x0b ],
-const [ 0xc7, 0x62, 0x7c, 0x9a, 0x6d, 0x1e, 0x7c, 0x41, 0xc1, 0x86, 0x57, 0xb5, 0x98, 0xac, 0x29, 0xb2, 0x8c, 0x4d, 0x0e, 0xf0, 0x47, 0x00, 0x8a, 0xf7, 0xfe, 0xb3, 0x29, 0x35, 0x3b, 0x58, 0x62, 0x4e, 0xe0, 0xdc, 0xc1, 0xb3, 0x69, 0x59, 0x46, 0x76, 0x71, 0x8c, 0x08, 0x5d, 0x77, 0x89, 0x1d, 0x35, 0xe3, 0xad, 0xbe, 0x68, 0x44, 0xd5, 0xa7, 0xd2, 0xdc, 0xcd, 0xbd, 0xd1, 0x5e, 0x0c, 0xf3, 0x9b, 0xf6, 0x9e, 0x6e, 0xd5, 0x8a, 0x61, 0xe8, 0x61, 0x40, 0x74, 0x52, 0x77, 0x40, 0xed, 0xbd, 0xf7, 0xbb, 0xca, 0x7a, 0xfd, 0x2c, 0x2b, 0x80, 0xb6, 0xdd, 0xbe, 0x0f, 0x73, 0xad, 0x7a, 0x93, 0xfc, 0x12, 0x90, 0xcb, 0x27, 0x5a, 0x9e, 0x2a, 0xa9, 0x36, 0x26, 0x7e, 0x2b, 0x78, 0x40, 0xcf, 0xa1, 0x1c, 0x8b, 0x8a, 0xd7, 0x85, 0x69, 0xdf, 0x4c, 0x0a, 0x6c, 0x67, 0x44, 0xb1, 0x0b, 0x0a, 0x19 ],
-const [ 0x84, 0x19, 0x33, 0x07, 0x10, 0x96, 0x8f, 0xb4, 0x0a, 0xe9, 0x15, 0xe6, 0x65, 0x48, 0xf1, 0xac, 0x44, 0x55, 0x09, 0xe3, 0x61, 0xf5, 0x83, 0xab, 0xaf, 0x5f, 0x87, 0x17, 0x3e, 0x73, 0x46, 0x29, 0x5f, 0x4e, 0x3b, 0xfd, 0x0a, 0x1b, 0xb0, 0x44, 0x7c, 0x2b, 0x85, 0xf4, 0x24, 0x49, 0x2d, 0x3e, 0xc0, 0x47, 0xf9, 0xc1, 0xc4, 0xdd, 0x99, 0xfd, 0xfb, 0xb4, 0xe0, 0x0a, 0x70, 0xbd, 0xc7, 0x89, 0x8f, 0xc7, 0xb5, 0xdc, 0x88, 0x51, 0xfd, 0x92, 0xf4, 0x9c, 0xa8, 0x25, 0xbb, 0x05, 0x76, 0xe8, 0x35, 0x92, 0x1f, 0x3b, 0x8f, 0xcb, 0xde, 0x01, 0x71, 0xcb, 0x30, 0x54, 0xdd, 0x96, 0xda, 0x77, 0x5b, 0xad, 0x29, 0x0b, 0x53, 0xe0, 0x7d, 0x86, 0xba, 0x64, 0x09, 0xe2, 0xf0, 0x25, 0xd4, 0x92, 0xe9, 0x5d, 0x03, 0xba, 0x8c, 0x66, 0x5b, 0x9f, 0x58, 0xcd, 0x02, 0x5d, 0x4d, 0xa7, 0x85, 0xd8 ],
-const [ 0x57, 0xd7, 0x3f, 0x3b, 0xdc, 0xaa, 0xdf, 0x51, 0xfd, 0x61, 0xaa, 0x65, 0xa0, 0x1d, 0xc7, 0x56, 0x38, 0x54, 0x6d, 0xcc, 0xdd, 0x89, 0x9a, 0x1d, 0xa2, 0x5a, 0x08, 0x6d, 0x23, 0xc0, 0x5d, 0x1a, 0x5d, 0x93, 0xa1, 0x57, 0xc3, 0x4c, 0xf6, 0x16, 0x8e, 0x0f, 0x83, 0x2c, 0x54, 0xe9, 0xb2, 0xaf, 0xdc, 0x56, 0x9b, 0xa3, 0x31, 0x06, 0xc0, 0xd6, 0xf5, 0xe0, 0xfa, 0x09, 0xf8, 0x48, 0xb3, 0x50, 0x09, 0x9d, 0x56, 0xbc, 0x0c, 0x06, 0x04, 0x36, 0x4d, 0x6f, 0x89, 0xae, 0x14, 0xce, 0x8e, 0x76, 0x7a, 0xab, 0x0f, 0xe8, 0x7a, 0xdf, 0x10, 0x4f, 0x4b, 0x9c, 0x8c, 0x05, 0xed, 0xad, 0xaf, 0xd8, 0x03, 0xff, 0x45, 0xb2, 0xe0, 0x61, 0x71, 0x7a, 0xe4, 0x88, 0xa2, 0x35, 0x09, 0x56, 0xc3, 0x71, 0xb9, 0x5c, 0xb2, 0xe3, 0xe3, 0x9d, 0xf4, 0x4f, 0x4d, 0x94, 0xa7, 0xa8, 0x2c, 0x79, 0xb7, 0x79 ],
-const [ 0x0c, 0x84, 0x04, 0xfe, 0x10, 0x87, 0x0f, 0xda, 0xc0, 0xe8, 0xd2, 0x1c, 0x99, 0xc7, 0x3d, 0x04, 0xa7, 0x8b, 0x6d, 0x4c, 0x8f, 0xd3, 0xcf, 0xb8, 0xd3, 0xae, 0x87, 0xee, 0x52, 0x0e, 0x13, 0x88, 0x0e, 0x7a, 0x2b, 0x68, 0x32, 0x04, 0xec, 0x4b, 0x54, 0x7b, 0x36, 0xa1, 0xf7, 0xe1, 0x53, 0x9d, 0x54, 0x1f, 0xd9, 0x88, 0x5a, 0xf8, 0xd1, 0x5a, 0xf3, 0x3c, 0x18, 0x8b, 0x89, 0x3e, 0x06, 0x27, 0xc9, 0x87, 0x4e, 0x21, 0xa6, 0xcc, 0x25, 0xe9, 0xa1, 0x1e, 0xa7, 0x40, 0x48, 0x61, 0x76, 0x4c, 0xfd, 0xff, 0xa4, 0xe7, 0xf9, 0xde, 0xd3, 0x3d, 0x91, 0x8f, 0x9a, 0x96, 0xb7, 0xc8, 0x2b, 0x70, 0xc3, 0x14, 0x33, 0xd1, 0x74, 0xc9, 0x02, 0xdb, 0x31, 0x3a, 0xec, 0xa1, 0x95, 0x2f, 0xef, 0x39, 0x2b, 0x92, 0x96, 0x13, 0x76, 0x6b, 0x1c, 0x88, 0x35, 0x0f, 0xd5, 0xb6, 0xe4, 0x93, 0xca, 0x8c ],
-const [ 0xfe, 0x1c, 0x33, 0xca, 0xde, 0xc6, 0x93, 0xcf, 0xa5, 0x32, 0x50, 0xd9, 0x06, 0xd3, 0x5d, 0x1e, 0x2d, 0xb8, 0xdf, 0x43, 0x00, 0xbe, 0x8f, 0x2a, 0xa5, 0x05, 0x60, 0x0b, 0x44, 0xa0, 0x63, 0xc6, 0x0e, 0x91, 0xe7, 0x77, 0x7e, 0xf4, 0xe4, 0x4b, 0xde, 0x7a, 0x9a, 0x93, 0x0e, 0x19, 0x75, 0x17, 0x81, 0x02, 0x34, 0xad, 0x88, 0xd4, 0x4a, 0x0a, 0xd3, 0x0f, 0x84, 0xd7, 0x34, 0xcb, 0xed, 0x08, 0xa7, 0xaa, 0xef, 0x69, 0x90, 0x0b, 0xba, 0x79, 0x43, 0x80, 0xea, 0x7c, 0xc9, 0x83, 0x63, 0xcc, 0xe2, 0x64, 0x80, 0x70, 0x46, 0x86, 0x6e, 0xef, 0x30, 0xcb, 0xd2, 0x66, 0x1d, 0x4d, 0xb2, 0xd9, 0xd1, 0x4f, 0x92, 0xc7, 0x9c, 0x73, 0xdd, 0x01, 0xdb, 0x2d, 0x87, 0xbc, 0xc1, 0x77, 0xf1, 0xe4, 0x58, 0xc6, 0x0d, 0xb3, 0xc2, 0x3d, 0xc2, 0x83, 0xc5, 0x21, 0x92, 0xe0, 0x87, 0x8e, 0x7a, 0xe2 ],
-const [ 0x02, 0x30, 0x04, 0xdf, 0xf8, 0x9f, 0x08, 0x20, 0x89, 0x2b, 0xe1, 0x5f, 0xb9, 0x1d, 0xc4, 0xc4, 0x98, 0x93, 0x6b, 0xfa, 0xb9, 0x23, 0x20, 0xee, 0xe6, 0xc1, 0x17, 0xd4, 0x12, 0xe3, 0x00, 0x6c, 0x8f, 0xe3, 0xdd, 0x83, 0x82, 0xa4, 0x11, 0xbc, 0x93, 0x78, 0xba, 0x90, 0xe9, 0x41, 0x41, 0x94, 0x55, 0xd7, 0x30, 0xfa, 0xcd, 0xaa, 0x43, 0x5b, 0x1d, 0xa9, 0xc1, 0xb4, 0xd9, 0x62, 0x0c, 0xae, 0x96, 0x6a, 0x77, 0x22, 0x59, 0xff, 0x59, 0xdc, 0x50, 0xec, 0x60, 0x9f, 0xc0, 0xad, 0x27, 0x6a, 0x3f, 0xd4, 0x0a, 0xfa, 0x23, 0xab, 0x39, 0x90, 0x3a, 0x1b, 0x0b, 0xf4, 0xbc, 0xcc, 0x95, 0xba, 0x7d, 0x8e, 0x7c, 0xc4, 0x67, 0xf8, 0x07, 0x08, 0x28, 0x4e, 0x78, 0x93, 0x28, 0xa8, 0x9d, 0xce, 0xbe, 0x51, 0xa2, 0x01, 0xa3, 0x6e, 0x29, 0x15, 0xa7, 0xe0, 0x9c, 0x9e, 0xa2, 0x6b, 0xc2, 0x19 ],
-const [ 0x0d, 0x61, 0x2e, 0x19, 0x53, 0xe7, 0xcf, 0xde, 0x52, 0x42, 0xfa, 0xe7, 0xd5, 0x1c, 0x81, 0x52, 0xd2, 0xa4, 0xa7, 0xe4, 0x4d, 0xe1, 0x28, 0xfb, 0x7a, 0x46, 0x7a, 0xc4, 0x22, 0x86, 0x53, 0xae, 0x47, 0xaa, 0x6b, 0x1f, 0x0b, 0x60, 0x83, 0x65, 0xce, 0x96, 0xa6, 0xef, 0x97, 0x47, 0xaf, 0xbd, 0xb5, 0x95, 0x0b, 0x15, 0xa6, 0x19, 0xc0, 0x78, 0x37, 0x77, 0xae, 0xd4, 0xed, 0x35, 0x15, 0xfb, 0xa4, 0xcd, 0x58, 0x54, 0x76, 0x00, 0x01, 0xd0, 0xde, 0x6e, 0x04, 0x20, 0x1d, 0x64, 0x48, 0x26, 0xdd, 0xf5, 0x63, 0xa9, 0x15, 0x4c, 0xa6, 0x4c, 0x2c, 0x40, 0x59, 0xc1, 0x61, 0x29, 0x47, 0x3a, 0x6a, 0xf2, 0x7e, 0x20, 0x5b, 0x70, 0x50, 0x08, 0xca, 0xf2, 0x9d, 0xe3, 0x31, 0x1a, 0x55, 0x74, 0x93, 0xeb, 0x38, 0x08, 0x63, 0x22, 0xe0, 0x61, 0xa1, 0xca, 0x02, 0xf3, 0x46, 0x0b, 0xf1, 0x53 ],
-const [ 0x62, 0x90, 0x81, 0x31, 0xc6, 0x88, 0x71, 0x18, 0x35, 0x17, 0x73, 0x48, 0x43, 0x4f, 0xdd, 0x10, 0x16, 0x94, 0x17, 0x88, 0x76, 0x5b, 0x50, 0x75, 0x24, 0x30, 0x71, 0x6e, 0x6d, 0xfe, 0x4f, 0x3d, 0xfe, 0x8b, 0x25, 0x88, 0xfa, 0x42, 0x41, 0xb1, 0x4a, 0x35, 0xfd, 0xfa, 0x35, 0x62, 0xf1, 0xed, 0x30, 0x35, 0x67, 0xfb, 0xf7, 0x4f, 0x0f, 0x63, 0xdc, 0x86, 0xf5, 0x55, 0x5f, 0x2d, 0xaf, 0x57, 0x00, 0x95, 0xdb, 0xe9, 0x51, 0xd3, 0xc9, 0x64, 0x4f, 0xc4, 0x74, 0x28, 0xf2, 0x4f, 0xb7, 0xf6, 0x03, 0xea, 0xbd, 0x9b, 0x2e, 0x60, 0xba, 0xcf, 0x58, 0xd1, 0xd8, 0x5c, 0x33, 0xfa, 0x75, 0x83, 0x0f, 0xb6, 0x8b, 0x9b, 0xf3, 0xc5, 0x6f, 0xfb, 0xec, 0xcd, 0xbf, 0x1a, 0xa5, 0x9e, 0x95, 0xf5, 0x38, 0xba, 0x01, 0xb1, 0x44, 0x15, 0xb7, 0x82, 0x40, 0x19, 0x04, 0xcb, 0x0e, 0xed, 0x07, 0x87 ],
-const [ 0x47, 0x45, 0x10, 0x0c, 0xec, 0x04, 0x06, 0xcf, 0xfa, 0x14, 0x63, 0x50, 0xee, 0x12, 0x21, 0x33, 0x30, 0xd1, 0x92, 0x12, 0x3a, 0xf4, 0xa1, 0xba, 0xfd, 0xbc, 0x5c, 0x98, 0x80, 0x1e, 0xaf, 0x6e, 0xcb, 0x19, 0x72, 0x4a, 0x03, 0x46, 0xa7, 0xb9, 0xd6, 0xb1, 0xfc, 0x38, 0x1a, 0xe7, 0x98, 0xeb, 0xb0, 0x50, 0x13, 0x92, 0xaf, 0xbf, 0xc6, 0xb8, 0xbe, 0x48, 0x46, 0x2d, 0xc2, 0x52, 0x2b, 0xb7, 0xba, 0xec, 0x16, 0x05, 0xe6, 0x65, 0xf2, 0xe4, 0x2f, 0x16, 0x79, 0xb6, 0xc3, 0x83, 0xfa, 0x1f, 0x00, 0xa3, 0x5a, 0x01, 0x93, 0x7b, 0x5a, 0xab, 0xe1, 0xf2, 0x17, 0x4d, 0xa6, 0xe0, 0xd7, 0xaf, 0xdb, 0x68, 0x02, 0x23, 0xde, 0x88, 0x6f, 0xb9, 0xcd, 0xee, 0xe1, 0xb1, 0x32, 0x0d, 0xd2, 0x36, 0xe6, 0x71, 0x6f, 0x49, 0x2f, 0x4f, 0xe3, 0xfb, 0x2c, 0x61, 0xd8, 0xdf, 0x73, 0xf0, 0x3b, 0xbf ],
-const [ 0xfc, 0x07, 0x23, 0xc3, 0xf8, 0x4d, 0xe1, 0x17, 0x8d, 0x14, 0x37, 0x5c, 0x33, 0x07, 0xf0, 0xba, 0xbd, 0xbb, 0x20, 0x86, 0x81, 0x3f, 0x69, 0x70, 0xb8, 0xf4, 0x77, 0xfe, 0x28, 0x9e, 0xcd, 0x39, 0x00, 0xbc, 0xc4, 0xa6, 0x03, 0x15, 0xd0, 0x77, 0xe8, 0x94, 0x06, 0x03, 0x01, 0x55, 0xdb, 0x74, 0x1c, 0x00, 0x2f, 0xbf, 0xa7, 0x56, 0x8a, 0xda, 0x17, 0x09, 0xa5, 0x29, 0x8a, 0xd1, 0x2c, 0x39, 0xaa, 0xbc, 0xc2, 0xb0, 0xd5, 0xc6, 0x46, 0x84, 0x7c, 0xa9, 0x54, 0x6c, 0xc9, 0xf6, 0x0f, 0x94, 0x85, 0x65, 0x1e, 0x95, 0x38, 0x69, 0xf5, 0xa4, 0x92, 0x08, 0x56, 0x09, 0x09, 0xea, 0x17, 0xd4, 0xc4, 0xb0, 0x25, 0xcb, 0xb8, 0x87, 0xc9, 0xa6, 0x11, 0xfc, 0x2a, 0x7f, 0xd3, 0x12, 0x14, 0x84, 0xc1, 0x91, 0xf7, 0xef, 0x7e, 0xa2, 0x33, 0x38, 0xf2, 0x99, 0x92, 0x88, 0xef, 0x12, 0x16, 0x72 ],
-const [ 0x5a, 0x40, 0x29, 0x8e, 0x32, 0x3c, 0xe9, 0x75, 0x49, 0xd4, 0xc8, 0x20, 0xb0, 0xa7, 0x7c, 0xbd, 0xef, 0xea, 0xf6, 0xca, 0x9b, 0xad, 0x94, 0x7a, 0x2b, 0x60, 0x98, 0x5a, 0x07, 0x95, 0xd9, 0x34, 0xe2, 0x08, 0xb8, 0x33, 0x4a, 0xdc, 0x56, 0x49, 0x7d, 0x27, 0x04, 0xce, 0x7f, 0xb1, 0xfb, 0x6a, 0x69, 0xf9, 0x4e, 0x34, 0x04, 0x79, 0x1c, 0x1b, 0x96, 0x2b, 0x0a, 0x86, 0xfc, 0x4c, 0xf0, 0x37, 0xf9, 0x60, 0xd3, 0x75, 0xce, 0x76, 0x14, 0x6a, 0x0b, 0xad, 0xe6, 0xca, 0xa4, 0xf7, 0x05, 0xb5, 0x47, 0x1d, 0xa6, 0xdf, 0xed, 0x04, 0xa9, 0xee, 0xb0, 0x2e, 0x16, 0x23, 0xdc, 0x83, 0xc7, 0x3d, 0x48, 0x52, 0x62, 0x9a, 0xe7, 0x93, 0x8b, 0xa0, 0x9a, 0x6f, 0x57, 0x5b, 0x48, 0x02, 0x03, 0x67, 0x31, 0x5f, 0xe6, 0x11, 0x7f, 0xd4, 0xa4, 0xb9, 0x1e, 0x70, 0xa5, 0x7b, 0xce, 0xc3, 0xc5, 0x0e ],
-const [ 0x99, 0x95, 0x8a, 0xa4, 0x59, 0x60, 0x46, 0x57, 0xc7, 0xbf, 0x6e, 0x4c, 0xdf, 0xcc, 0x87, 0x85, 0xf0, 0xab, 0xf0, 0x6f, 0xfe, 0x63, 0x6b, 0x5b, 0x64, 0xec, 0xd9, 0x31, 0xbd, 0x8a, 0x45, 0x63, 0x05, 0x59, 0x24, 0x21, 0xfc, 0x28, 0xdb, 0xcc, 0xcb, 0x8a, 0x82, 0xac, 0xea, 0x2b, 0xe8, 0xe5, 0x41, 0x61, 0xd7, 0xa7, 0x8e, 0x03, 0x99, 0xa6, 0x06, 0x7e, 0xba, 0xca, 0x3f, 0x25, 0x10, 0x27, 0x4d, 0xc9, 0xf9, 0x2f, 0x2c, 0x8a, 0xe4, 0x26, 0x5e, 0xec, 0x13, 0xd7, 0xd4, 0x2e, 0x9f, 0x86, 0x12, 0xd7, 0xbc, 0x25, 0x8f, 0x91, 0x3e, 0xcb, 0x5a, 0x3a, 0x5c, 0x61, 0x03, 0x39, 0xb4, 0x9f, 0xb9, 0x0e, 0x90, 0x37, 0xb0, 0x2d, 0x68, 0x4f, 0xc6, 0x0d, 0xa8, 0x35, 0x65, 0x7c, 0xb2, 0x4e, 0xab, 0x35, 0x27, 0x50, 0xc8, 0xb4, 0x63, 0xb1, 0xa8, 0x49, 0x46, 0x60, 0xd3, 0x6c, 0x3a, 0xb2 ],
-const [ 0xaa, 0xc4, 0x25, 0x63, 0x39, 0xf6, 0x37, 0x7a, 0x4f, 0xe2, 0x25, 0xd5, 0x0e, 0x74, 0x42, 0x4c, 0x80, 0xe0, 0xf9, 0x6d, 0x85, 0xd1, 0x62, 0xc4, 0x10, 0xc3, 0x13, 0x5a, 0x93, 0xad, 0x39, 0x7b, 0xb8, 0xe4, 0xe7, 0xbc, 0x52, 0x3c, 0xad, 0x3d, 0x93, 0x70, 0x6d, 0x2c, 0x7f, 0xc4, 0x6a, 0x8a, 0xa0, 0xe8, 0xa2, 0x32, 0xfc, 0x20, 0x5e, 0x17, 0x44, 0xa2, 0x07, 0xcd, 0x4e, 0x3f, 0x3b, 0x4b, 0xc5, 0x46, 0x20, 0xef, 0x20, 0xa6, 0xf8, 0xc2, 0xd0, 0x52, 0xf6, 0xfe, 0xbe, 0xea, 0x50, 0xcd, 0xf4, 0x97, 0x96, 0x54, 0x9a, 0x37, 0x42, 0xf0, 0x25, 0xba, 0x90, 0xbf, 0xcb, 0xcb, 0x90, 0x63, 0x3a, 0xb3, 0x79, 0x02, 0x89, 0x7b, 0x40, 0x91, 0x6f, 0x51, 0x69, 0x53, 0xb3, 0x2e, 0x1e, 0x9c, 0xe3, 0xb5, 0x7e, 0xdb, 0x49, 0x5d, 0x37, 0xd7, 0x1b, 0xd2, 0x57, 0x39, 0xf2, 0x99, 0x5f, 0x4b ],
-const [ 0xea, 0x72, 0x40, 0x52, 0x99, 0x80, 0x07, 0x6d, 0x3b, 0x02, 0x8a, 0x08, 0x3e, 0xbc, 0x4e, 0x24, 0xef, 0xda, 0xa0, 0x6c, 0x9c, 0x84, 0xd7, 0x6b, 0xf5, 0xb2, 0xd9, 0xfd, 0xb8, 0x42, 0xe1, 0x03, 0x8e, 0x48, 0x7f, 0x5b, 0x30, 0xa5, 0xe0, 0x10, 0xcd, 0xdb, 0x4f, 0xcd, 0xb0, 0x1f, 0xfc, 0x98, 0x1e, 0xb0, 0xfc, 0xbc, 0x7d, 0x68, 0x92, 0x07, 0xbc, 0x90, 0xad, 0x36, 0xee, 0xf9, 0xb1, 0xae, 0x38, 0x48, 0x7a, 0x6d, 0xee, 0x92, 0x9f, 0x3f, 0xf9, 0x29, 0xf3, 0x35, 0x7c, 0xb5, 0x52, 0x53, 0xb7, 0x86, 0x9a, 0x89, 0x2b, 0x28, 0xf7, 0xe5, 0xfe, 0x38, 0x64, 0x06, 0xa2, 0x77, 0x6e, 0xd4, 0xb2, 0x1d, 0x3b, 0x6e, 0x1c, 0x70, 0xcc, 0x64, 0x85, 0x94, 0x7f, 0x27, 0xe9, 0xa5, 0xd8, 0xbd, 0x82, 0x03, 0x80, 0xb9, 0xec, 0xed, 0x8e, 0x6b, 0x86, 0x52, 0x06, 0x54, 0x1b, 0xe3, 0x9f, 0xdc ],
-const [ 0x93, 0xb7, 0xef, 0x0e, 0x47, 0x0d, 0xdf, 0xac, 0x6a, 0xef, 0x93, 0xc0, 0xdc, 0xd3, 0x7b, 0x8f, 0x1c, 0x4b, 0xaf, 0x5e, 0xad, 0xd9, 0x78, 0xe3, 0xbf, 0x05, 0x12, 0xfa, 0x0b, 0xae, 0xb0, 0x99, 0xff, 0x9e, 0xc1, 0x06, 0x1b, 0x61, 0x72, 0x47, 0x9b, 0x56, 0x74, 0xdb, 0x56, 0x06, 0xff, 0xa7, 0xe6, 0xb5, 0x17, 0x33, 0x09, 0x37, 0x0e, 0x16, 0x47, 0x05, 0x4a, 0xaf, 0xd5, 0x90, 0x48, 0x16, 0xba, 0xd5, 0xe1, 0x52, 0x30, 0x32, 0xcc, 0xcd, 0x4d, 0x78, 0x65, 0x05, 0xe2, 0x41, 0xac, 0x83, 0xa4, 0x84, 0x91, 0x11, 0x89, 0x66, 0x6f, 0x28, 0x75, 0x53, 0xd6, 0xa8, 0x16, 0x4e, 0x8d, 0xcb, 0x0c, 0x85, 0xd7, 0x5c, 0x4e, 0x29, 0xf6, 0x24, 0xc9, 0x7c, 0xee, 0xa6, 0x4a, 0x2c, 0x8b, 0x0c, 0x9d, 0xdf, 0xa5, 0x60, 0xf7, 0x0f, 0xa3, 0xff, 0x91, 0x18, 0x3e, 0x4b, 0x96, 0x8f, 0x88, 0xa1 ],
-const [ 0x21, 0x06, 0x34, 0x43, 0xbf, 0x02, 0xff, 0xe9, 0xf8, 0x13, 0xdc, 0x66, 0x88, 0x92, 0x0d, 0x03, 0x60, 0x41, 0xa2, 0xa3, 0xa6, 0x3a, 0x99, 0x56, 0xfc, 0x25, 0x4a, 0x2c, 0x05, 0xae, 0x03, 0x47, 0x25, 0x37, 0xef, 0x34, 0x89, 0xc9, 0x3c, 0x7c, 0x68, 0x51, 0x7c, 0x75, 0x88, 0x09, 0x4c, 0x5e, 0x03, 0x34, 0x34, 0xab, 0x4b, 0x0e, 0xcf, 0x9e, 0x6c, 0x03, 0x2c, 0x17, 0x91, 0x1f, 0x73, 0xad, 0xca, 0xc6, 0xcc, 0xfd, 0x0c, 0xa5, 0x7c, 0x42, 0x7a, 0xe8, 0x51, 0x27, 0xe2, 0xad, 0x41, 0xd9, 0x8b, 0xb9, 0x4e, 0x5f, 0x2e, 0x6a, 0xad, 0x2e, 0x42, 0xed, 0x26, 0xf8, 0x7c, 0xb1, 0xbe, 0xc6, 0x97, 0x1c, 0x94, 0x46, 0x51, 0x7c, 0x09, 0x66, 0xb6, 0x40, 0x23, 0x21, 0xa0, 0x68, 0x34, 0x99, 0x7f, 0x3a, 0xb6, 0x67, 0x56, 0x37, 0x7a, 0x2f, 0x06, 0x4d, 0x02, 0x77, 0xcf, 0x4e, 0x2b, 0xb9 ],
-const [ 0x97, 0x24, 0xc0, 0xd5, 0xc9, 0x89, 0xe5, 0xad, 0xaf, 0xcd, 0x75, 0x27, 0xfe, 0xe2, 0x69, 0xea, 0x14, 0xc0, 0xae, 0xc3, 0xdd, 0xb6, 0x25, 0x96, 0xf3, 0xfd, 0xee, 0x9b, 0x09, 0x93, 0xe6, 0xc6, 0x89, 0x46, 0x6e, 0x87, 0x7c, 0x0f, 0x6f, 0xb4, 0xab, 0xa2, 0x9b, 0xc4, 0x03, 0x43, 0xf5, 0x3d, 0x3e, 0xdb, 0x93, 0x6f, 0xc0, 0x4b, 0xa2, 0x63, 0xbf, 0x00, 0xac, 0x0f, 0xa7, 0xc8, 0x16, 0xcb, 0xbd, 0xe4, 0xed, 0x09, 0x02, 0x5e, 0xe2, 0x40, 0x5a, 0x9d, 0x92, 0x29, 0xed, 0x36, 0x0b, 0x2e, 0xce, 0x05, 0x8c, 0x20, 0xdb, 0x7d, 0x8d, 0x28, 0xe4, 0x3c, 0xff, 0x00, 0x0f, 0xe2, 0xd5, 0x62, 0x7a, 0x24, 0xc3, 0xc1, 0x23, 0x1c, 0x46, 0x38, 0x05, 0xe3, 0xe4, 0xc0, 0x84, 0x62, 0xb5, 0xa5, 0x0b, 0x65, 0x22, 0x3b, 0xf4, 0xf1, 0xed, 0xcd, 0xa8, 0xd8, 0x72, 0xd6, 0x07, 0x8a, 0x2c, 0x73 ],
-const [ 0x12, 0x35, 0x3b, 0xca, 0x6b, 0x0f, 0x3d, 0x54, 0x5e, 0xc4, 0xb4, 0x70, 0xc6, 0x92, 0x72, 0xf7, 0x2b, 0xb5, 0x58, 0x97, 0x93, 0xe6, 0xca, 0x76, 0x9a, 0x22, 0x60, 0x18, 0xc5, 0xac, 0xde, 0x83, 0x14, 0x55, 0x67, 0xa1, 0xd6, 0xfb, 0xed, 0xe5, 0xc1, 0x50, 0xec, 0x31, 0x42, 0xdc, 0x58, 0xf8, 0x12, 0x46, 0xd4, 0xa0, 0x0a, 0xcf, 0x24, 0x2a, 0x38, 0x1f, 0xe5, 0x14, 0x32, 0x44, 0x7b, 0x7e, 0xaa, 0xf8, 0x4c, 0x8d, 0x43, 0x22, 0x2c, 0x0d, 0xa3, 0xa0, 0x17, 0x5a, 0xca, 0x44, 0x26, 0x80, 0xa2, 0x1c, 0xbc, 0xa1, 0xd7, 0xf7, 0x00, 0x97, 0xe8, 0x24, 0x91, 0xdb, 0x7f, 0x7d, 0x75, 0xa5, 0xfe, 0xa5, 0x52, 0x55, 0x5a, 0x8d, 0xe0, 0x12, 0x2c, 0x3d, 0x9e, 0xb1, 0x05, 0xd1, 0xc4, 0xd8, 0x02, 0xc1, 0x79, 0x63, 0xa1, 0x66, 0x47, 0x06, 0xd3, 0xba, 0xcc, 0x34, 0x53, 0x60, 0xb2, 0x40 ],
-const [ 0xdf, 0x07, 0x38, 0x17, 0xd8, 0x68, 0x72, 0x93, 0x25, 0x7d, 0x7e, 0xd1, 0x81, 0x68, 0x03, 0xaf, 0xe2, 0x92, 0xd7, 0x79, 0xf3, 0x4e, 0x14, 0xb0, 0xc5, 0xba, 0x6e, 0x0a, 0xc1, 0xe6, 0xc3, 0xb9, 0xe2, 0x39, 0xf4, 0xf0, 0x21, 0x10, 0xf4, 0xa4, 0x30, 0xa7, 0x1e, 0x90, 0x6a, 0x3d, 0xcc, 0x7b, 0x0b, 0x73, 0x25, 0xbd, 0x9c, 0xf6, 0x36, 0x00, 0xb2, 0x5d, 0x45, 0x44, 0xd8, 0x55, 0x61, 0x26, 0xca, 0xfb, 0x3e, 0x61, 0xe4, 0x89, 0x40, 0x95, 0xd9, 0x35, 0xd6, 0x47, 0xa8, 0x56, 0x09, 0x29, 0xcc, 0xc9, 0x55, 0x9c, 0xb3, 0x93, 0xb7, 0x74, 0x72, 0xc7, 0x07, 0xfb, 0xb7, 0xab, 0x88, 0x38, 0xff, 0x16, 0xbe, 0x71, 0x09, 0x1c, 0x7f, 0xee, 0x8a, 0xed, 0x4d, 0x00, 0x22, 0xfb, 0xe3, 0x42, 0x8f, 0x5b, 0x0e, 0x1f, 0x21, 0x6e, 0xbe, 0x94, 0x6d, 0xc0, 0x5d, 0x37, 0x46, 0x30, 0x5f, 0x79 ],
-const [ 0xcd, 0x3f, 0x17, 0x35, 0x5a, 0x1e, 0x25, 0x4b, 0x98, 0x21, 0x27, 0x61, 0x41, 0xa8, 0x50, 0xf0, 0xb7, 0x1c, 0xb3, 0xcf, 0x48, 0x24, 0xa8, 0x03, 0xb0, 0x1c, 0x71, 0xd8, 0xdf, 0xc3, 0x1d, 0x31, 0xfd, 0x33, 0xad, 0x1c, 0xac, 0x17, 0x76, 0xa9, 0x8d, 0x18, 0xc6, 0xfd, 0x05, 0x98, 0xca, 0xa2, 0x41, 0xa3, 0xaf, 0x21, 0x77, 0x22, 0x08, 0xd3, 0x6f, 0x52, 0x70, 0xf4, 0x43, 0x75, 0x70, 0xf9, 0x63, 0xc8, 0xa3, 0x23, 0xdb, 0xb4, 0x17, 0x55, 0xd9, 0x48, 0xf7, 0x23, 0x69, 0xe7, 0x67, 0x2b, 0x84, 0x3e, 0xb0, 0xa8, 0x49, 0x79, 0x9d, 0x44, 0x8a, 0xb7, 0x25, 0x2e, 0x8a, 0xbb, 0x49, 0x6d, 0x05, 0xe4, 0x40, 0x74, 0x71, 0x5f, 0xd2, 0xf6, 0x84, 0x9b, 0x02, 0xfb, 0xf6, 0xfd, 0xef, 0x34, 0x88, 0xd6, 0xfc, 0x8b, 0x45, 0x92, 0x2f, 0xff, 0x08, 0x32, 0xd7, 0xaf, 0x3e, 0xfc, 0x72, 0x34 ],
-const [ 0x93, 0x4d, 0xc1, 0xef, 0x76, 0x99, 0x3a, 0xa8, 0x20, 0x61, 0xcf, 0x67, 0xaa, 0xac, 0x77, 0x14, 0xf1, 0x2e, 0x25, 0xaa, 0x8f, 0x6f, 0x54, 0x84, 0x0a, 0x2a, 0xe3, 0xd8, 0x4a, 0xf3, 0x24, 0x81, 0x51, 0x1d, 0x30, 0x01, 0x26, 0xdb, 0x7d, 0xc6, 0x12, 0xa5, 0xb2, 0xac, 0x0f, 0xde, 0xb9, 0xc4, 0x7e, 0xb3, 0x16, 0x54, 0x18, 0x46, 0x78, 0x1e, 0x27, 0x0c, 0x8e, 0xe5, 0xf6, 0x73, 0x1c, 0x2e, 0x86, 0xc9, 0x4e, 0x44, 0x82, 0x59, 0x4c, 0x7e, 0x75, 0xd7, 0x0e, 0xc4, 0x3b, 0xfe, 0x72, 0x50, 0xb6, 0x77, 0x8c, 0xb2, 0xc2, 0xfd, 0x3d, 0x17, 0x6a, 0xbf, 0x07, 0xca, 0x5c, 0x05, 0x1f, 0xfb, 0x9a, 0x17, 0xc4, 0xc0, 0x73, 0x5b, 0xd0, 0x59, 0xb2, 0xbd, 0x8d, 0xb8, 0x15, 0x53, 0xc9, 0x41, 0x00, 0x41, 0x2d, 0xce, 0x73, 0xdb, 0xca, 0xf6, 0x3a, 0x0a, 0xf5, 0x8f, 0x63, 0xf1, 0x55, 0x71 ],
-const [ 0xc8, 0x43, 0x94, 0x08, 0x64, 0x57, 0xd8, 0xfa, 0x90, 0x0a, 0x57, 0xf1, 0x8e, 0xa5, 0x0a, 0x93, 0xbe, 0x16, 0xf0, 0x6f, 0xc2, 0x8b, 0x55, 0x32, 0xde, 0x40, 0x54, 0x1d, 0xa5, 0x95, 0x9b, 0xb6, 0xd2, 0x64, 0x6e, 0xbe, 0x74, 0x91, 0xef, 0x64, 0x4e, 0xe3, 0x9c, 0xb8, 0x7d, 0x12, 0x19, 0x62, 0x5b, 0x21, 0x30, 0x94, 0xa4, 0xed, 0x16, 0x3d, 0xd7, 0x07, 0xef, 0x80, 0xdf, 0xbf, 0x95, 0x64, 0xf3, 0x81, 0x95, 0xcd, 0xbb, 0x65, 0x7b, 0xab, 0xb4, 0x01, 0x50, 0x71, 0xd5, 0x82, 0x60, 0xc9, 0x73, 0xfb, 0x41, 0x85, 0x62, 0xfc, 0x10, 0xd9, 0x5d, 0x67, 0xfe, 0xc8, 0xa7, 0x7f, 0x0b, 0xdd, 0xf3, 0x42, 0x12, 0x1b, 0x82, 0xf9, 0x06, 0x36, 0x8b, 0x0d, 0x7b, 0x04, 0xdf, 0x1c, 0x68, 0x2e, 0xcd, 0x4c, 0x2b, 0x2b, 0x43, 0xdf, 0xcd, 0x6f, 0x37, 0x08, 0x88, 0xdf, 0x45, 0xfd, 0x86, 0x89 ],
-const [ 0x36, 0xbd, 0xa8, 0xd3, 0x3b, 0x3b, 0xc1, 0x0f, 0x36, 0x7c, 0xaf, 0x71, 0xc5, 0xed, 0x38, 0x7f, 0xe5, 0xf1, 0x49, 0x3c, 0x1d, 0x3b, 0xd2, 0xaa, 0xf9, 0x7a, 0xd7, 0x8c, 0xba, 0x3c, 0xc5, 0x70, 0x4c, 0x0c, 0x02, 0xed, 0x78, 0xde, 0xc7, 0x2a, 0x5b, 0xae, 0x32, 0x9f, 0x17, 0x63, 0x97, 0x20, 0xc8, 0xf9, 0x18, 0x17, 0xba, 0xdf, 0x75, 0x11, 0xd9, 0x9e, 0x25, 0x7c, 0x68, 0xbc, 0xa5, 0xae, 0xf6, 0xe0, 0x10, 0x2a, 0x8e, 0x36, 0xf0, 0x1f, 0x2f, 0x15, 0x53, 0x32, 0x7b, 0xe0, 0x22, 0x7d, 0xb3, 0x2a, 0xaf, 0xd8, 0xe3, 0x1d, 0x8d, 0x57, 0x5a, 0x1c, 0xa4, 0x14, 0x5d, 0xa7, 0x84, 0x2e, 0x1d, 0x7f, 0xfa, 0x11, 0xe6, 0x0b, 0xe1, 0xf8, 0x98, 0xfb, 0x3b, 0xb1, 0x5b, 0x2b, 0x81, 0xa0, 0x8f, 0xca, 0x37, 0x07, 0x02, 0xbb, 0xc2, 0x85, 0x66, 0x3b, 0x7e, 0xdc, 0x02, 0xc5, 0x0c, 0xf7 ],
-const [ 0x37, 0x22, 0xea, 0xa4, 0x33, 0x83, 0x0a, 0xbd, 0xbc, 0xaa, 0x91, 0x77, 0xe3, 0x73, 0xba, 0xb0, 0x5f, 0xcb, 0x8f, 0xd8, 0x2f, 0xc3, 0xaf, 0xa5, 0x81, 0xe3, 0x4f, 0x08, 0xd3, 0xc0, 0x7f, 0x5f, 0x58, 0xd0, 0xae, 0xec, 0x9d, 0x7e, 0x71, 0x86, 0x6c, 0x7a, 0x80, 0x8e, 0xf1, 0x53, 0x01, 0x25, 0x1b, 0x47, 0x0a, 0x9c, 0x45, 0x5a, 0x61, 0x2c, 0x16, 0xa5, 0x86, 0xe8, 0xa5, 0xf1, 0xf3, 0xef, 0xe1, 0x84, 0xa2, 0xe6, 0x31, 0x3b, 0xd0, 0xa6, 0x57, 0xd9, 0x01, 0x31, 0x9a, 0x9f, 0x44, 0xeb, 0x24, 0x1d, 0xb8, 0x07, 0xa9, 0x47, 0x4f, 0x3f, 0x49, 0xcb, 0xd2, 0xc8, 0xb8, 0xa2, 0x25, 0x85, 0x9c, 0xe5, 0xcd, 0x7b, 0x36, 0xe3, 0xaf, 0x85, 0x45, 0x70, 0x1a, 0x48, 0x27, 0x80, 0x08, 0x6a, 0x42, 0xf4, 0xa1, 0xff, 0xa2, 0xb3, 0x01, 0x44, 0xe3, 0xfd, 0x3b, 0x90, 0x52, 0xfc, 0x9e, 0x87 ],
-const [ 0x03, 0x07, 0x4e, 0x71, 0x4d, 0x5e, 0xef, 0xdf, 0x5b, 0x71, 0x43, 0x81, 0xd8, 0x0e, 0x69, 0x4e, 0xf3, 0x7c, 0x26, 0x47, 0xb3, 0x74, 0xd8, 0xa3, 0x8a, 0x6d, 0xac, 0x2a, 0x2e, 0x1d, 0x11, 0xdf, 0xa4, 0x3c, 0x6d, 0xe1, 0x9d, 0x8b, 0x0e, 0x93, 0x06, 0x15, 0x63, 0xfb, 0xdb, 0xb4, 0x6c, 0x68, 0x3c, 0xd8, 0x6f, 0x58, 0xc2, 0x84, 0xed, 0x98, 0x13, 0x99, 0xd4, 0xad, 0xb4, 0x57, 0xf6, 0x73, 0x1f, 0x21, 0xba, 0x04, 0x16, 0x80, 0x11, 0xdb, 0x36, 0x6b, 0xac, 0x3a, 0xcf, 0xc6, 0x6d, 0xc8, 0xf3, 0x28, 0x1b, 0x7f, 0xcd, 0xe1, 0x59, 0xc5, 0x34, 0x3c, 0xd9, 0xd9, 0x80, 0x01, 0xcd, 0x71, 0x9d, 0x3e, 0x9e, 0xa2, 0x5e, 0x47, 0xe1, 0xff, 0x13, 0xfc, 0x87, 0x05, 0x5d, 0x4a, 0x53, 0xb7, 0x41, 0xf5, 0x92, 0x85, 0x7c, 0x94, 0x06, 0x72, 0x16, 0xdd, 0x23, 0x76, 0x3a, 0x22, 0x7e, 0x21 ],
-const [ 0x73, 0x9f, 0x46, 0x00, 0x34, 0x24, 0x9e, 0x80, 0x5a, 0xff, 0x66, 0x5d, 0x62, 0x48, 0xa5, 0x94, 0x25, 0x06, 0x95, 0x83, 0x5a, 0xa2, 0x4c, 0xfa, 0x5d, 0x9c, 0x9b, 0x96, 0x2f, 0x7d, 0x37, 0x4a, 0xbd, 0x0d, 0x16, 0x3f, 0x65, 0xc5, 0x1c, 0xde, 0xb6, 0x87, 0xf7, 0x2b, 0x77, 0x8d, 0x48, 0x54, 0xeb, 0xa0, 0x03, 0x89, 0x54, 0x8a, 0x18, 0x0f, 0xb6, 0xcd, 0x53, 0x90, 0xdd, 0x95, 0x80, 0xb6, 0xa1, 0xec, 0xd4, 0xf8, 0x69, 0x2d, 0x88, 0xb3, 0xee, 0xbb, 0xc7, 0x7c, 0x42, 0xf2, 0xca, 0xb5, 0x10, 0x5e, 0x42, 0x5e, 0x25, 0x2b, 0xf6, 0x2e, 0x2f, 0xdd, 0xad, 0xe2, 0xc5, 0x42, 0x4e, 0xd6, 0xa8, 0xa4, 0x46, 0xd2, 0x49, 0x42, 0x2a, 0x26, 0x8b, 0x02, 0x9d, 0xf9, 0xc9, 0x60, 0x75, 0xde, 0x1b, 0xaa, 0x19, 0xa8, 0xd5, 0x6f, 0x2d, 0x80, 0x51, 0x35, 0x72, 0x34, 0xef, 0x6a, 0xe7, 0xd2 ],
-const [ 0x08, 0x2e, 0x7b, 0x4c, 0xde, 0x89, 0x14, 0xbf, 0x07, 0xc2, 0x88, 0x44, 0x1b, 0xe6, 0x43, 0xe4, 0x08, 0xf6, 0xcb, 0x5c, 0xa9, 0x32, 0xf6, 0x7e, 0x9b, 0x97, 0x5b, 0xd5, 0x4c, 0xa7, 0x06, 0x88, 0x54, 0x68, 0x70, 0x80, 0x09, 0xaf, 0xae, 0xcd, 0x4d, 0x9e, 0xe8, 0x46, 0xab, 0x6c, 0x0d, 0x70, 0xa3, 0x64, 0xc5, 0xa2, 0x41, 0x31, 0xa7, 0x66, 0xf5, 0x58, 0xad, 0x21, 0x9e, 0x06, 0xe4, 0xf7, 0xe8, 0x0c, 0x68, 0xe9, 0xd8, 0x28, 0x90, 0x40, 0xa5, 0x86, 0x66, 0x2f, 0xca, 0x86, 0x5a, 0xb4, 0x59, 0xc0, 0x37, 0xbf, 0x92, 0x46, 0x55, 0x96, 0xb4, 0x28, 0x11, 0x78, 0x13, 0x3e, 0x7a, 0x80, 0x6b, 0x21, 0x4d, 0xcd, 0x74, 0x7b, 0x24, 0xe0, 0xb6, 0x81, 0xea, 0x45, 0x9f, 0xbd, 0x92, 0x76, 0xd3, 0x11, 0x08, 0xfc, 0xc3, 0xf9, 0x68, 0xd7, 0x81, 0x10, 0x6f, 0x20, 0xd3, 0xd6, 0x2f, 0xed ],
-const [ 0x89, 0x25, 0x25, 0xa0, 0xf0, 0x2a, 0xae, 0x7f, 0x22, 0x64, 0xcb, 0x02, 0x46, 0x32, 0xf1, 0x1e, 0x8a, 0xdb, 0xdb, 0xec, 0xb7, 0xd0, 0xc7, 0x08, 0x08, 0x32, 0xe2, 0x37, 0x3c, 0x94, 0x01, 0x4c, 0xea, 0x02, 0x91, 0x4c, 0x15, 0x42, 0xd1, 0xd0, 0x00, 0x59, 0x3f, 0xab, 0x43, 0x52, 0x4f, 0xcd, 0x1f, 0x3a, 0x63, 0x67, 0x0f, 0x6f, 0xf8, 0x50, 0x9f, 0x1b, 0x1d, 0xa8, 0x81, 0xfb, 0x2a, 0xbb, 0xde, 0x65, 0xae, 0x27, 0xea, 0x89, 0xa9, 0x42, 0xbb, 0xf7, 0xfc, 0xb6, 0x5b, 0x61, 0x1d, 0x6e, 0x1c, 0xa2, 0x0f, 0xb6, 0x2b, 0x00, 0x92, 0x9d, 0x68, 0xae, 0x97, 0x9e, 0x75, 0x95, 0xf6, 0x80, 0x0d, 0x55, 0x63, 0x7b, 0x98, 0x86, 0x9f, 0x9c, 0xfc, 0x43, 0xeb, 0x6b, 0xb5, 0xe9, 0xc2, 0xca, 0x28, 0x1c, 0xc7, 0x20, 0x34, 0x0b, 0xfd, 0xb7, 0x0b, 0xf5, 0x36, 0x63, 0x40, 0xed, 0xce, 0x65 ],
-const [ 0x8b, 0x7f, 0xdf, 0x79, 0x2a, 0x90, 0x21, 0x8f, 0x91, 0x99, 0x8b, 0x08, 0x47, 0x56, 0xf3, 0x2f, 0xf8, 0x14, 0x88, 0x46, 0x6b, 0xcd, 0x66, 0xce, 0xb4, 0x95, 0x67, 0x02, 0xab, 0x34, 0x3c, 0xa5, 0x9c, 0x15, 0xbd, 0xfd, 0x40, 0x5f, 0x7e, 0x20, 0xec, 0x61, 0xa3, 0x6e, 0x09, 0x33, 0xf5, 0x5f, 0xc4, 0x9a, 0x35, 0x7f, 0x06, 0x2d, 0xb0, 0xb6, 0xa7, 0xb6, 0x13, 0xcd, 0xdf, 0xdb, 0x81, 0x2e, 0xfd, 0xfe, 0xe3, 0xeb, 0x5b, 0x61, 0x7f, 0x02, 0x91, 0x8e, 0xcd, 0xe0, 0xe9, 0xf6, 0x85, 0x23, 0x13, 0xd8, 0xfd, 0xa4, 0x1a, 0x64, 0xb2, 0xb5, 0x97, 0x21, 0x24, 0xa7, 0x25, 0x8c, 0xe8, 0x90, 0x14, 0x02, 0xf8, 0x4a, 0x62, 0xdf, 0x4d, 0xbf, 0xe6, 0xe8, 0xb0, 0x64, 0xcf, 0xe6, 0xcd, 0x04, 0x4d, 0x94, 0x89, 0xbf, 0x8e, 0xbb, 0x95, 0x52, 0xec, 0x9c, 0x43, 0x99, 0x65, 0x8e, 0x99, 0x52 ],
-const [ 0x6e, 0x4a, 0xbd, 0x41, 0x4d, 0xca, 0x21, 0xa6, 0xad, 0x43, 0x31, 0x46, 0x98, 0x62, 0x73, 0xe2, 0xda, 0x95, 0x2e, 0xf6, 0x13, 0xcd, 0x1f, 0x9a, 0x0a, 0x83, 0x6c, 0xa6, 0x44, 0xf9, 0xde, 0x19, 0xd6, 0xc2, 0x4a, 0xbc, 0x77, 0x84, 0x50, 0x02, 0xd9, 0xfd, 0x48, 0x33, 0x3a, 0x44, 0x7a, 0xc9, 0x36, 0x51, 0x8d, 0x1b, 0xdf, 0xc0, 0x43, 0x38, 0x0f, 0xd2, 0x63, 0x16, 0xfd, 0xb5, 0xf6, 0xec, 0x0f, 0x05, 0xb5, 0xdc, 0xef, 0x92, 0xc3, 0xd5, 0xe1, 0x64, 0x98, 0xb8, 0x54, 0xfc, 0x3d, 0xb9, 0xb6, 0xdd, 0xbf, 0x09, 0x8d, 0x4b, 0xde, 0xb2, 0xc4, 0x53, 0x05, 0xc2, 0x42, 0x0b, 0x7f, 0xab, 0xc2, 0x1b, 0xe7, 0xea, 0xde, 0x7c, 0xe0, 0xe7, 0x6c, 0x80, 0x07, 0x1c, 0x0e, 0x13, 0x26, 0x7a, 0x05, 0x40, 0xab, 0x08, 0x46, 0xf7, 0x58, 0xce, 0xd0, 0x0d, 0x3b, 0xf1, 0x3c, 0x84, 0xe1, 0x1f ],
-const [ 0xb6, 0xac, 0xbe, 0x5d, 0xf0, 0x14, 0x80, 0x61, 0x41, 0x43, 0xc9, 0x47, 0x90, 0x97, 0x4c, 0x82, 0xd0, 0x46, 0x35, 0x21, 0x24, 0xf5, 0x6a, 0x02, 0x46, 0x86, 0x10, 0x42, 0x29, 0x31, 0x52, 0xf7, 0xdd, 0xd6, 0x5d, 0x22, 0xb4, 0x91, 0xaf, 0xdf, 0xa3, 0x90, 0x92, 0xdf, 0xea, 0x21, 0xe3, 0x18, 0xf7, 0x0f, 0x18, 0xbb, 0x88, 0x2f, 0x82, 0x67, 0x11, 0x36, 0xce, 0x9c, 0x5d, 0xcd, 0xd2, 0x72, 0x77, 0xe8, 0x87, 0x8b, 0xcb, 0x53, 0x51, 0x46, 0x89, 0x8d, 0x87, 0x35, 0x4a, 0xda, 0x2f, 0xd2, 0xf6, 0x94, 0x09, 0x6d, 0xe5, 0xc2, 0xd0, 0x69, 0x44, 0xec, 0xbc, 0xa8, 0xbb, 0x2d, 0x4b, 0x44, 0x4c, 0x89, 0x41, 0x80, 0x7f, 0x81, 0xed, 0xfe, 0xbc, 0xe5, 0xaf, 0x32, 0xf8, 0xea, 0xb7, 0x16, 0x94, 0x7c, 0x0f, 0x1f, 0x81, 0xd5, 0xdc, 0x70, 0xa9, 0x4f, 0xe1, 0x4f, 0x8a, 0x76, 0x44, 0xd5 ],
-const [ 0xdc, 0x05, 0x8f, 0x90, 0x9e, 0x71, 0x70, 0xbe, 0xe5, 0x6c, 0x4d, 0xfd, 0xe8, 0x62, 0xb4, 0x31, 0x4f, 0x68, 0x31, 0x4a, 0x97, 0x17, 0xcc, 0xbb, 0xb7, 0x9b, 0xd4, 0x2d, 0x04, 0x07, 0xdb, 0x75, 0x52, 0xeb, 0x02, 0xc4, 0x5c, 0x29, 0x77, 0x1e, 0x66, 0x04, 0x3b, 0x0e, 0x20, 0x7a, 0x29, 0x97, 0xce, 0xd4, 0x34, 0x6d, 0xa6, 0x7b, 0xf0, 0x66, 0x79, 0x0d, 0x54, 0x2b, 0x96, 0xb0, 0xbe, 0x33, 0xec, 0xa7, 0x37, 0xf2, 0x6e, 0x23, 0xf8, 0x4d, 0xbc, 0x5b, 0x2e, 0x52, 0xff, 0xde, 0xfb, 0x26, 0x14, 0x28, 0xbd, 0x3e, 0xee, 0x74, 0x92, 0xd2, 0x35, 0xd2, 0x1c, 0x8f, 0x33, 0x79, 0x81, 0x8d, 0xf1, 0x5e, 0xb6, 0x80, 0x9d, 0x06, 0xfe, 0x32, 0x2f, 0x98, 0xad, 0x31, 0x4d, 0x36, 0x32, 0xc4, 0x6b, 0x8d, 0x54, 0x24, 0x36, 0xab, 0xbc, 0xe9, 0x33, 0x11, 0xb4, 0xc3, 0xa3, 0x0a, 0x2e, 0x6a ],
-const [ 0x48, 0xca, 0x2f, 0xb5, 0xb7, 0xe4, 0xf4, 0x71, 0xa2, 0x09, 0x11, 0xaf, 0x6a, 0x66, 0x15, 0x8e, 0x45, 0xae, 0xf7, 0x00, 0xec, 0x02, 0x62, 0xce, 0x94, 0x13, 0x50, 0xdc, 0x20, 0x8a, 0xda, 0xaf, 0x95, 0xa8, 0x4e, 0x2c, 0xce, 0x29, 0x83, 0xa2, 0x71, 0x6f, 0x69, 0x0b, 0x21, 0xdc, 0xe4, 0x8f, 0xf5, 0x80, 0xdb, 0x4a, 0x29, 0xf4, 0x8c, 0x4f, 0x14, 0x85, 0x22, 0xed, 0x5a, 0x95, 0x89, 0x31, 0x63, 0x3f, 0x81, 0xab, 0x0c, 0x3a, 0xf1, 0x75, 0x9c, 0x00, 0x7e, 0x72, 0xf9, 0x2f, 0x5d, 0xd4, 0x1c, 0x2f, 0x65, 0xe1, 0xc2, 0x15, 0x69, 0xf6, 0x64, 0xc7, 0xc4, 0xcc, 0x6a, 0x61, 0x35, 0xfa, 0x9c, 0xd8, 0xee, 0xbb, 0xd9, 0xde, 0xe7, 0xf2, 0x0b, 0x05, 0x78, 0x6b, 0x5a, 0x26, 0x27, 0x64, 0xa0, 0x04, 0xbf, 0x4c, 0x1d, 0x2d, 0xa2, 0xca, 0x6d, 0x21, 0x5f, 0x01, 0xb6, 0xb6, 0x87, 0x13 ],
-const [ 0x7e, 0x8b, 0xcb, 0x42, 0xe9, 0xc0, 0x01, 0x5e, 0x96, 0xf4, 0xf8, 0x02, 0x52, 0x0a, 0x15, 0xcc, 0xcf, 0x3f, 0xb2, 0x80, 0x54, 0x0e, 0x71, 0x08, 0xb2, 0x51, 0xcf, 0xb9, 0x7a, 0xa8, 0xfc, 0xd8, 0x6d, 0x1e, 0xea, 0x5d, 0x34, 0x0a, 0xa3, 0xf6, 0x52, 0x34, 0xe1, 0x4f, 0x56, 0x39, 0xd8, 0x91, 0x55, 0x31, 0x57, 0x29, 0x97, 0x8e, 0x0f, 0xca, 0x91, 0x47, 0x32, 0xb5, 0x13, 0x37, 0x41, 0x38, 0xc3, 0xc0, 0x1f, 0x74, 0xca, 0xb3, 0x69, 0x64, 0xcd, 0x74, 0x0a, 0x1b, 0x1f, 0x59, 0x09, 0x4d, 0x35, 0x54, 0xa6, 0x11, 0x5a, 0xd2, 0xa6, 0xe5, 0xa3, 0xe2, 0xeb, 0xf3, 0x26, 0x9a, 0x47, 0x93, 0x67, 0xb6, 0x92, 0x10, 0x13, 0x83, 0xfa, 0xaf, 0xf1, 0xfc, 0x9b, 0xed, 0x15, 0x32, 0x50, 0x09, 0x57, 0xf1, 0xc8, 0xc2, 0x03, 0xa0, 0xdc, 0x62, 0xd2, 0x69, 0x1f, 0xfb, 0x19, 0x9a, 0xb7, 0xf1 ],
-const [ 0x7d, 0x70, 0xd5, 0xd8, 0x67, 0x65, 0x18, 0xe8, 0xf4, 0xcc, 0xfb, 0x36, 0x60, 0xbf, 0xc1, 0x4e, 0x20, 0xae, 0xa6, 0xc7, 0x75, 0xa6, 0x16, 0xb3, 0x42, 0xd2, 0x1d, 0x3a, 0x1b, 0x42, 0x1f, 0x81, 0x9e, 0xeb, 0xc9, 0xd1, 0x06, 0xef, 0x47, 0xf5, 0xfd, 0x1f, 0xb7, 0xe3, 0xb2, 0xbe, 0xde, 0x9f, 0x2c, 0x88, 0x1a, 0x5d, 0xde, 0xf3, 0x98, 0xe6, 0x7b, 0xb5, 0xc7, 0x3c, 0x0b, 0x86, 0x0d, 0x81, 0x3f, 0x27, 0xb8, 0x15, 0x01, 0xa3, 0x37, 0xff, 0x50, 0xd5, 0x8a, 0x8e, 0x4b, 0x2a, 0xf7, 0x3f, 0x8b, 0xa9, 0xff, 0xe2, 0xb6, 0x30, 0x90, 0xf9, 0x51, 0x00, 0x7c, 0x61, 0xd6, 0x7b, 0x2a, 0x34, 0x07, 0x2d, 0x8c, 0xed, 0x81, 0x0a, 0x50, 0xcd, 0x94, 0xf6, 0x5b, 0x7e, 0x52, 0x8b, 0x73, 0xf7, 0xe6, 0x16, 0x3b, 0x9f, 0x28, 0xe2, 0x65, 0xb5, 0x6e, 0xba, 0x23, 0xef, 0xa4, 0xa9, 0xde, 0x61 ],
-const [ 0x20, 0xa0, 0xf8, 0x52, 0x50, 0xa9, 0x56, 0x15, 0xb7, 0xa4, 0x0f, 0x25, 0x13, 0x2a, 0xf0, 0x70, 0xaa, 0x38, 0x8d, 0x86, 0xdf, 0x77, 0x7b, 0xfb, 0x03, 0xc0, 0xbf, 0x0d, 0x6d, 0xdf, 0x87, 0x87, 0xcd, 0x97, 0x18, 0xe6, 0xbd, 0xe7, 0x08, 0xb9, 0x99, 0x8c, 0xad, 0x4e, 0x91, 0xc7, 0xd5, 0x8a, 0xfc, 0x60, 0xb7, 0x19, 0xef, 0xeb, 0x2a, 0xc8, 0x0f, 0x4a, 0x15, 0x2e, 0xa3, 0x73, 0x27, 0x92, 0xee, 0x74, 0xc8, 0x09, 0xbb, 0xb4, 0x4f, 0xdf, 0x39, 0x7b, 0x75, 0x38, 0x09, 0xb4, 0x09, 0xf7, 0x96, 0xf2, 0xe6, 0xdf, 0xa5, 0xb2, 0x23, 0xf8, 0x2d, 0xe0, 0x89, 0x35, 0x68, 0x9c, 0x4a, 0x53, 0x2a, 0x3d, 0xef, 0x04, 0x72, 0x96, 0x93, 0x4d, 0x3e, 0x79, 0x4f, 0x2d, 0xa4, 0x7a, 0xf5, 0x7f, 0x1f, 0xf5, 0x01, 0x21, 0x27, 0x53, 0xcc, 0x56, 0x04, 0x88, 0x03, 0x69, 0xe3, 0xe0, 0x58, 0x94 ],
-const [ 0xe3, 0x7e, 0x9d, 0xa1, 0xdd, 0xfe, 0x11, 0xa2, 0xff, 0x6a, 0x95, 0x02, 0x5d, 0x19, 0x70, 0xfa, 0x1c, 0x29, 0x97, 0xbb, 0x79, 0x74, 0xd0, 0x01, 0x0c, 0xc0, 0x17, 0xec, 0x4e, 0x36, 0x41, 0x0c, 0x5a, 0x16, 0xdf, 0xba, 0xf0, 0xa8, 0x65, 0xaf, 0xbf, 0x76, 0x8c, 0xcf, 0xe4, 0xb8, 0xf4, 0x46, 0xae, 0x10, 0x0e, 0xd6, 0xa4, 0x77, 0x39, 0x6f, 0xc9, 0x77, 0x2b, 0x01, 0x1e, 0x9c, 0x93, 0x8e, 0x69, 0x25, 0xfc, 0x83, 0x35, 0xfe, 0xf5, 0x48, 0x1a, 0xf3, 0x6f, 0x16, 0x3e, 0x1e, 0x66, 0x09, 0x1c, 0xa1, 0xc4, 0x76, 0x84, 0x9b, 0x82, 0x7e, 0xe3, 0x54, 0x10, 0xe3, 0xc5, 0xbb, 0xf7, 0x1b, 0x98, 0x13, 0xbd, 0xa3, 0xb3, 0xe9, 0x08, 0x96, 0x97, 0x49, 0x07, 0x7e, 0x74, 0x31, 0x0e, 0x6a, 0xef, 0x46, 0x80, 0x41, 0x22, 0xc6, 0xf2, 0x55, 0xe4, 0xbe, 0x8d, 0x3b, 0x4b, 0x7d, 0xb4, 0xdb ],
-const [ 0x4b, 0x7a, 0xb7, 0x13, 0x76, 0xd8, 0x3e, 0xdc, 0x41, 0x49, 0xb7, 0x4a, 0xb1, 0x0b, 0x7c, 0x1b, 0x1b, 0x6f, 0xa9, 0xce, 0x97, 0x7f, 0x2d, 0x63, 0xb2, 0xe3, 0x21, 0x62, 0x63, 0x06, 0x59, 0x1e, 0x41, 0x74, 0x39, 0x3b, 0xf2, 0x87, 0xca, 0x6e, 0xe7, 0x42, 0x0d, 0x84, 0x46, 0x7d, 0x90, 0xa6, 0x28, 0x42, 0x3e, 0xdb, 0x05, 0x78, 0x7b, 0xce, 0x6c, 0xbe, 0x71, 0xd2, 0xf8, 0x9a, 0xa4, 0x23, 0x7f, 0xd3, 0xcd, 0x6e, 0x8c, 0x1b, 0xe5, 0x94, 0x10, 0xf1, 0x80, 0xac, 0x54, 0xc6, 0x5c, 0x47, 0x32, 0x5f, 0x3a, 0xf7, 0x85, 0x7a, 0xec, 0x12, 0xde, 0xb4, 0xb0, 0xb3, 0x79, 0xaa, 0xbc, 0x02, 0x6f, 0x5f, 0x1a, 0xb5, 0x2c, 0xde, 0xb6, 0xd7, 0x24, 0x20, 0xb6, 0xc8, 0xc2, 0x2f, 0x09, 0x86, 0xa1, 0x8c, 0x43, 0x2a, 0xff, 0xce, 0xa8, 0xb6, 0x6f, 0x8d, 0x86, 0x0d, 0xcd, 0x7e, 0xc9, 0x43 ],
-const [ 0x80, 0x6e, 0x91, 0x11, 0xc7, 0x31, 0xbe, 0x67, 0x70, 0x7d, 0x49, 0xb9, 0xe4, 0x24, 0x8e, 0x82, 0x03, 0x96, 0x08, 0xdf, 0xc6, 0xfa, 0x16, 0x45, 0x22, 0x7e, 0xff, 0x6f, 0x30, 0xeb, 0x34, 0x9b, 0x8c, 0x7c, 0xd6, 0xf6, 0xfb, 0xf0, 0x78, 0x55, 0x50, 0xde, 0x26, 0x25, 0x90, 0x49, 0xa6, 0xa5, 0x54, 0x74, 0xfd, 0x53, 0x6f, 0xf7, 0x36, 0xa3, 0xd1, 0x13, 0x5e, 0xf7, 0xab, 0x43, 0xd3, 0xcc, 0xd4, 0x13, 0xbf, 0x31, 0x6c, 0x35, 0xdf, 0x7e, 0xbf, 0xd2, 0x89, 0x42, 0x6b, 0x1e, 0xed, 0x7d, 0xc6, 0x2f, 0x9b, 0x10, 0x7a, 0x0f, 0x45, 0x71, 0x72, 0x10, 0xc6, 0xa3, 0xfa, 0x5f, 0x64, 0x66, 0x21, 0xdc, 0x52, 0xab, 0x62, 0x29, 0x79, 0x4a, 0x84, 0x01, 0x79, 0xf7, 0xbf, 0xcc, 0xea, 0x73, 0x20, 0x70, 0xe7, 0xff, 0x2f, 0x69, 0xcd, 0x16, 0xce, 0x1c, 0x40, 0x5b, 0x64, 0x68, 0x6f, 0xd1 ],
-const [ 0x85, 0xa4, 0x38, 0x18, 0x52, 0x05, 0xf7, 0x73, 0xb7, 0xb3, 0x9d, 0xb2, 0xa7, 0x1e, 0xe8, 0x6a, 0xee, 0x34, 0x1f, 0x9b, 0x22, 0x85, 0xa2, 0xed, 0xd7, 0xa5, 0xc5, 0x39, 0x13, 0xd2, 0xde, 0x4b, 0x02, 0xd7, 0x9d, 0xe7, 0xea, 0x30, 0x9c, 0x09, 0x60, 0x6f, 0x37, 0x71, 0xbd, 0xdf, 0x9e, 0x5f, 0xcc, 0x66, 0x28, 0x9c, 0xc5, 0xb0, 0xeb, 0xb9, 0x7f, 0x89, 0x89, 0x9b, 0xe1, 0x8b, 0x4c, 0x38, 0x9a, 0xfa, 0x76, 0x9b, 0x11, 0xec, 0xd2, 0x2e, 0x9f, 0xad, 0x8f, 0x38, 0xfd, 0x61, 0x4e, 0xa5, 0xf8, 0xeb, 0x7a, 0x06, 0x6c, 0x0e, 0xd8, 0xd8, 0x6f, 0xd2, 0x5f, 0x09, 0xcd, 0x2a, 0x49, 0xb8, 0xb5, 0xd3, 0x6a, 0x3d, 0xb1, 0x7f, 0xc1, 0x69, 0xdb, 0x33, 0x4d, 0x0e, 0x4f, 0xee, 0x21, 0xc2, 0xdc, 0x8b, 0xbb, 0xe1, 0xff, 0xe8, 0x92, 0xd1, 0x11, 0x48, 0xee, 0x8a, 0xbf, 0xf6, 0xfc, 0x55 ],
-const [ 0x18, 0x91, 0x5f, 0x38, 0x11, 0xcc, 0x77, 0xd3, 0xd9, 0xe4, 0x1d, 0x54, 0x3f, 0x3b, 0xbd, 0xc8, 0x27, 0xf5, 0x78, 0x1c, 0xdd, 0xff, 0x19, 0x3d, 0xa9, 0x4f, 0x4b, 0x7d, 0xa4, 0x6d, 0x0a, 0x39, 0xc9, 0x32, 0x58, 0xb8, 0x4f, 0xcf, 0x31, 0x57, 0x37, 0x12, 0xc0, 0xe3, 0x21, 0xe5, 0xd3, 0x47, 0x63, 0x18, 0x8d, 0x67, 0x5c, 0x60, 0x5a, 0x4b, 0x06, 0x9f, 0x28, 0x80, 0xcb, 0x65, 0xd5, 0xbb, 0x9a, 0xb7, 0xe3, 0xc0, 0x39, 0x10, 0x73, 0x82, 0xdd, 0xa6, 0x71, 0x8c, 0xf8, 0xee, 0x0c, 0x9f, 0x52, 0x62, 0x69, 0x9d, 0x5b, 0x82, 0x98, 0xa5, 0xc0, 0x19, 0xc7, 0x80, 0x3c, 0xc1, 0xb5, 0x3c, 0xb1, 0xa9, 0x6a, 0x16, 0x77, 0x96, 0x26, 0x9e, 0xf3, 0x28, 0x97, 0x15, 0x6c, 0x5f, 0x4e, 0x1a, 0x1b, 0x5d, 0x74, 0x86, 0x81, 0x6e, 0xb9, 0x94, 0xfe, 0x45, 0x8e, 0x45, 0x9e, 0x89, 0x94, 0x02 ],
-const [ 0x48, 0xdd, 0x90, 0x54, 0xdc, 0x77, 0x03, 0x79, 0x35, 0x57, 0xe4, 0x92, 0xfc, 0x0f, 0xd0, 0xd4, 0x5d, 0xb0, 0xde, 0x0e, 0xc4, 0x86, 0x83, 0xf1, 0xe4, 0x02, 0xb3, 0xaf, 0xfe, 0xf8, 0x49, 0xc9, 0x60, 0x0b, 0xa9, 0x21, 0x2c, 0x65, 0xa4, 0x57, 0x5a, 0xab, 0x9c, 0x52, 0x00, 0x2f, 0xe8, 0x1d, 0xd1, 0x68, 0x79, 0xf5, 0xe4, 0xa0, 0xbe, 0xa0, 0xb8, 0xed, 0xc6, 0x00, 0x74, 0x62, 0xa5, 0xe7, 0x73, 0x86, 0x18, 0x2d, 0xff, 0x05, 0x6c, 0x00, 0x5d, 0xa6, 0x9b, 0x7c, 0x0b, 0x7d, 0xb9, 0x7b, 0x45, 0x62, 0x8e, 0xaf, 0xcd, 0xa2, 0x85, 0xee, 0xec, 0xf4, 0xc5, 0xcc, 0xb4, 0xae, 0x9d, 0x6f, 0x89, 0x38, 0x25, 0x9f, 0xe0, 0xc1, 0x22, 0x1d, 0x45, 0x32, 0x2b, 0x36, 0xa3, 0x60, 0x0a, 0x97, 0xc0, 0x86, 0x65, 0x63, 0x07, 0xf2, 0x9e, 0x83, 0x8a, 0xfe, 0xf7, 0x3e, 0x47, 0x42, 0xfa, 0x09 ],
-const [ 0x39, 0x78, 0xb2, 0x4f, 0x0b, 0xd0, 0x82, 0x9e, 0x22, 0xc0, 0x59, 0x66, 0x27, 0xd9, 0xd6, 0xd8, 0x58, 0xf1, 0xc6, 0x9b, 0x8c, 0x19, 0x48, 0x67, 0x71, 0xcf, 0x30, 0xd0, 0x19, 0x75, 0xaa, 0x5f, 0xb5, 0x02, 0x20, 0xe7, 0xa0, 0xf8, 0x5d, 0x16, 0x9f, 0x96, 0xf2, 0x4b, 0x67, 0x4e, 0xd8, 0xa7, 0x5f, 0x79, 0x58, 0x67, 0xa8, 0x4a, 0x28, 0x71, 0x5b, 0x00, 0xd7, 0x2c, 0x11, 0x60, 0x6a, 0x95, 0xa9, 0x63, 0x48, 0x90, 0x45, 0x2c, 0x53, 0x7b, 0x96, 0x3c, 0x58, 0x09, 0x5a, 0xe9, 0xa9, 0x4e, 0x22, 0x0c, 0x08, 0x16, 0x59, 0xfb, 0xc7, 0x7b, 0x82, 0xb7, 0x2e, 0xb7, 0xc1, 0x66, 0x1d, 0x36, 0x9d, 0x03, 0xf2, 0xf0, 0x04, 0x54, 0xad, 0xf5, 0x8f, 0x1c, 0x53, 0x49, 0x08, 0x93, 0x90, 0xf3, 0x2a, 0x13, 0x9f, 0x51, 0xa7, 0x14, 0x6f, 0xae, 0x70, 0x5a, 0xfe, 0x16, 0x30, 0x6d, 0x09, 0x69 ],
-const [ 0x67, 0x54, 0x1f, 0x77, 0xf4, 0xe4, 0x0d, 0x14, 0x30, 0x35, 0x46, 0x25, 0x05, 0xde, 0x14, 0xa0, 0x21, 0x24, 0xb9, 0x92, 0xec, 0x1d, 0x00, 0x64, 0xbd, 0x15, 0x18, 0x5d, 0x4d, 0x30, 0xa2, 0x69, 0x6c, 0x51, 0x09, 0x19, 0xf2, 0x3b, 0x12, 0xea, 0xf9, 0xf6, 0xb4, 0xca, 0x49, 0x75, 0x29, 0xd8, 0x14, 0x75, 0x45, 0x6c, 0xe4, 0xa8, 0x07, 0x57, 0xd1, 0x13, 0x6e, 0x6c, 0xf7, 0xb4, 0x8d, 0x3f, 0x27, 0x69, 0xe2, 0x2c, 0xdd, 0x0d, 0xe4, 0x9b, 0x72, 0xe4, 0xdb, 0x83, 0x93, 0x39, 0xf4, 0x2d, 0xf2, 0x45, 0x95, 0x3b, 0x3b, 0x53, 0xee, 0xe8, 0x4a, 0x22, 0xd1, 0x91, 0x9b, 0x8b, 0xc3, 0x75, 0x02, 0x63, 0x53, 0xb9, 0x9c, 0xa3, 0xaa, 0xaf, 0x05, 0xc6, 0x64, 0x57, 0xcb, 0x73, 0x9e, 0x26, 0x23, 0x5c, 0x50, 0x07, 0xdb, 0x66, 0xde, 0xa0, 0x90, 0x0a, 0xe9, 0xd6, 0x21, 0xfb, 0x6b, 0x93 ],
-const [ 0x78, 0x2a, 0xc1, 0x6b, 0xcd, 0x74, 0x4e, 0xc0, 0x16, 0xff, 0xb6, 0xb0, 0x14, 0xe0, 0xc8, 0x98, 0x3d, 0xfd, 0xe2, 0x31, 0xfa, 0x72, 0xc3, 0x12, 0x12, 0x34, 0x9a, 0x77, 0x66, 0xf4, 0x62, 0x40, 0xe0, 0x47, 0x72, 0x3d, 0xa6, 0x03, 0x50, 0xa8, 0x93, 0xec, 0xc7, 0xf3, 0xe7, 0x90, 0x39, 0xc5, 0x3d, 0x6f, 0x36, 0x3f, 0xbe, 0x5f, 0x4c, 0x83, 0x95, 0x2f, 0x21, 0x77, 0xa2, 0x8b, 0xc0, 0xc6, 0x73, 0x1f, 0x31, 0x28, 0x70, 0x00, 0x4c, 0xe4, 0x55, 0x47, 0xce, 0x93, 0xe6, 0xff, 0xad, 0x26, 0xde, 0x41, 0xa9, 0x2a, 0x28, 0x9d, 0x24, 0x4b, 0x51, 0xbc, 0x33, 0x17, 0x3e, 0x44, 0xf5, 0x05, 0x1a, 0xfc, 0x24, 0xb6, 0x93, 0x31, 0xe9, 0x7a, 0x46, 0x58, 0xf5, 0x16, 0x77, 0xf4, 0xcd, 0xc5, 0x06, 0xba, 0x65, 0x7c, 0x9e, 0xf3, 0xf1, 0x72, 0x30, 0x23, 0xf8, 0xe0, 0xa0, 0xe8, 0xaa, 0x05 ],
-const [ 0x7b, 0x2f, 0x5c, 0x27, 0x41, 0x33, 0x8d, 0x25, 0xd8, 0xf9, 0xd4, 0xbb, 0x0f, 0xa7, 0x18, 0x49, 0x9b, 0xa9, 0x60, 0xc6, 0x5e, 0xeb, 0x39, 0x9f, 0xe9, 0x4b, 0x59, 0xc2, 0x3f, 0x4e, 0x81, 0xf5, 0xdb, 0x11, 0xa8, 0x6d, 0xf5, 0x83, 0x55, 0x9c, 0x02, 0xd2, 0x4d, 0x4a, 0x7a, 0x23, 0x6e, 0xe7, 0xdd, 0x86, 0xdb, 0x20, 0xf8, 0x29, 0x59, 0xb0, 0x65, 0xcc, 0xf9, 0x79, 0x51, 0x74, 0xf8, 0xd3, 0x81, 0x64, 0xe3, 0x24, 0x97, 0x49, 0xfe, 0xb1, 0x92, 0xb5, 0xe7, 0xb3, 0x95, 0xce, 0x77, 0xae, 0xe9, 0x48, 0xe9, 0xfe, 0x44, 0x90, 0x3e, 0xb2, 0x4c, 0x4a, 0xdf, 0x9e, 0x57, 0xfe, 0x85, 0xac, 0x75, 0x0e, 0x56, 0x73, 0xb0, 0xec, 0x51, 0x0b, 0x92, 0x89, 0xeb, 0x1f, 0xe8, 0x11, 0xfa, 0x43, 0xc6, 0xd5, 0xd3, 0x88, 0xcb, 0x89, 0xaf, 0x4e, 0xa6, 0xaf, 0x54, 0x5a, 0xd9, 0x53, 0xf1, 0x29 ],
-const [ 0x89, 0x17, 0xaa, 0x6e, 0x1c, 0xd3, 0x5a, 0xf3, 0x0e, 0xb5, 0xc7, 0xac, 0x20, 0x0e, 0x54, 0x83, 0x5d, 0x4a, 0x07, 0x77, 0xa0, 0x6a, 0x2f, 0xa7, 0x56, 0xb4, 0x4a, 0xac, 0x85, 0xa8, 0x25, 0x2c, 0x0e, 0x37, 0x45, 0xac, 0x2f, 0x30, 0x86, 0xa6, 0x4b, 0xfb, 0x02, 0xdc, 0xee, 0x89, 0x34, 0xeb, 0x0c, 0x8b, 0x5e, 0x23, 0x89, 0xe2, 0x27, 0x96, 0xfe, 0x57, 0x89, 0x6f, 0xbb, 0x8d, 0xea, 0x86, 0x08, 0x33, 0x89, 0x31, 0xb1, 0x7e, 0x1c, 0x5c, 0xc1, 0xd7, 0xb8, 0xdc, 0x8d, 0xd1, 0xf0, 0x00, 0xf4, 0x5d, 0x41, 0x69, 0xe6, 0x41, 0xae, 0x1c, 0x23, 0xc6, 0xa7, 0xd6, 0x45, 0xb1, 0x2f, 0xa0, 0x01, 0x75, 0x3e, 0xa2, 0xaa, 0xa7, 0x64, 0x3c, 0xf6, 0xb2, 0xb0, 0x53, 0x05, 0xcc, 0xd0, 0xe9, 0x9f, 0x29, 0x79, 0xf1, 0xbe, 0x6e, 0x0a, 0x61, 0x4c, 0x68, 0x6c, 0x88, 0x2d, 0xfe, 0x3c, 0xa2 ],
-const [ 0x1c, 0x68, 0x5e, 0x17, 0x89, 0x0e, 0xe0, 0x79, 0xee, 0x85, 0xce, 0xf5, 0xed, 0x70, 0x93, 0x56, 0xf4, 0x19, 0x9e, 0x65, 0x7a, 0xaa, 0xc0, 0xbc, 0x85, 0xa1, 0xd5, 0xd5, 0x70, 0x7e, 0xa6, 0x66, 0xeb, 0xbe, 0x0e, 0xf1, 0x43, 0x0d, 0x5c, 0x96, 0xe4, 0xb8, 0xf9, 0x2d, 0x1c, 0x61, 0x4b, 0x91, 0x21, 0xf6, 0xd8, 0x3e, 0x56, 0xe4, 0xaf, 0x1f, 0xca, 0x87, 0x04, 0xa1, 0x01, 0xe5, 0x1a, 0x0c, 0xf8, 0x9d, 0x66, 0x13, 0x63, 0x1a, 0xf1, 0xaa, 0x39, 0x0c, 0xfe, 0x17, 0x72, 0x19, 0xed, 0x4c, 0x10, 0xcf, 0x5f, 0x74, 0x5c, 0xde, 0x9b, 0xcc, 0x72, 0x84, 0x30, 0xb4, 0xff, 0x48, 0xdc, 0x06, 0x4a, 0xeb, 0xad, 0xa6, 0x71, 0x9c, 0x66, 0x5a, 0xf5, 0x6b, 0x24, 0xdc, 0x79, 0x00, 0x41, 0x2e, 0xc7, 0x8d, 0x79, 0x2e, 0x14, 0x01, 0x4b, 0x6a, 0x85, 0x7f, 0xa2, 0x35, 0xf2, 0x0e, 0xb5, 0xfb ],
-const [ 0x97, 0x06, 0xd7, 0x37, 0x0b, 0x66, 0xbf, 0xa7, 0x8a, 0xbb, 0x8b, 0x25, 0xa9, 0xd6, 0x14, 0x3a, 0x9a, 0xad, 0xca, 0xa4, 0xf6, 0x0c, 0x9b, 0xaa, 0xb9, 0x87, 0x17, 0xac, 0x8f, 0xb3, 0xd2, 0xfe, 0x4e, 0x96, 0x0a, 0xf7, 0xc3, 0x5b, 0x8a, 0x44, 0xb1, 0x4a, 0xce, 0x82, 0x17, 0xf8, 0x68, 0x0d, 0xb2, 0xbb, 0xa3, 0x12, 0xc3, 0x61, 0x65, 0xec, 0x12, 0x22, 0x5a, 0xad, 0x33, 0xd2, 0x4e, 0xfa, 0x08, 0x5c, 0xdb, 0x1d, 0x87, 0x6b, 0x45, 0x55, 0xbd, 0x6a, 0xa2, 0x70, 0x13, 0xaf, 0x3e, 0x9c, 0xd1, 0xf3, 0x3d, 0x7b, 0xe0, 0x06, 0x82, 0x75, 0xd4, 0xc0, 0xd0, 0x52, 0x2a, 0x3b, 0x2f, 0x08, 0xcd, 0x3f, 0x92, 0xd1, 0xdf, 0xfe, 0xb6, 0x81, 0xb7, 0x02, 0x4d, 0x17, 0x26, 0x63, 0x5c, 0x92, 0xff, 0x3d, 0xe2, 0x06, 0xd6, 0x61, 0xba, 0xee, 0x07, 0x4b, 0xc2, 0xc4, 0xfb, 0x55, 0x3d, 0xcf ],
-const [ 0xff, 0x84, 0x68, 0xcf, 0x11, 0xd6, 0x19, 0x0c, 0xae, 0x4a, 0x1e, 0x16, 0x87, 0x1a, 0xe0, 0x81, 0x72, 0x14, 0xfd, 0x44, 0x1a, 0x88, 0x9b, 0xbd, 0xf5, 0x64, 0xfd, 0xf5, 0x77, 0x9e, 0x54, 0x26, 0x86, 0xd2, 0xd7, 0x7a, 0x2d, 0x2d, 0x15, 0x16, 0x94, 0x89, 0x8a, 0x57, 0x30, 0xd9, 0x71, 0x5b, 0x37, 0xc8, 0xda, 0xc4, 0x57, 0x9d, 0xfc, 0xb8, 0xa7, 0x62, 0xcc, 0x2c, 0xde, 0x45, 0xcf, 0x63, 0xc3, 0x3e, 0x2c, 0xb1, 0xe4, 0xf2, 0x05, 0x85, 0x8b, 0xd8, 0x07, 0xa7, 0xee, 0x9a, 0x40, 0xbd, 0xa6, 0xbe, 0x31, 0x14, 0x62, 0x85, 0x25, 0x9d, 0xdd, 0x13, 0xc1, 0x36, 0x0d, 0xd1, 0xdb, 0x2b, 0x9e, 0x10, 0x90, 0xfd, 0x9e, 0xef, 0x90, 0x62, 0x7a, 0x7e, 0xbd, 0x8c, 0x29, 0x23, 0xf5, 0xae, 0xa7, 0x3d, 0x2b, 0xbd, 0xa5, 0x08, 0xbd, 0x74, 0x7f, 0xc1, 0x01, 0x9a, 0x6e, 0x0a, 0x21, 0x87 ],
-const [ 0x32, 0xe5, 0xa9, 0xf3, 0xc3, 0xf9, 0x57, 0x6a, 0x21, 0xdb, 0xfe, 0xd0, 0x17, 0xb9, 0x61, 0xf1, 0x18, 0xcd, 0x23, 0xf3, 0x80, 0x8f, 0x2c, 0x2b, 0x1d, 0x29, 0x4e, 0x35, 0xee, 0x2b, 0x28, 0x43, 0x2a, 0x80, 0x4b, 0xb5, 0x84, 0xa1, 0x9c, 0xea, 0xae, 0x08, 0xfa, 0x56, 0x1c, 0xe8, 0x20, 0xd5, 0x0a, 0x1b, 0xcc, 0x3f, 0xc0, 0x5b, 0x21, 0x3d, 0x15, 0xb6, 0x49, 0x5b, 0x32, 0x3c, 0x60, 0x5e, 0x98, 0xfb, 0x8d, 0xd7, 0x65, 0x2d, 0x72, 0xf8, 0xd2, 0xaf, 0xc7, 0xa7, 0x01, 0xb5, 0x41, 0xd1, 0xf6, 0xbd, 0xb9, 0x01, 0xe3, 0xc1, 0x8a, 0x31, 0xa8, 0xb1, 0x3b, 0xe0, 0x9a, 0x20, 0x5e, 0x64, 0x83, 0x3e, 0xb7, 0x82, 0xeb, 0x06, 0xa1, 0x3c, 0x96, 0xb8, 0xae, 0xea, 0x4e, 0x8a, 0x8e, 0x8c, 0xe3, 0x9a, 0x32, 0x5f, 0x6f, 0x28, 0x30, 0xae, 0xde, 0x02, 0x6a, 0xeb, 0xae, 0x3f, 0xeb, 0xfe ],
-const [ 0x4b, 0xf8, 0x41, 0xec, 0x0a, 0x42, 0x11, 0xb0, 0x5f, 0x9a, 0x45, 0xa1, 0x27, 0xbb, 0xbb, 0xf6, 0x43, 0x4e, 0x86, 0x42, 0x91, 0x0e, 0x8a, 0xb1, 0x1b, 0x2a, 0x46, 0x8e, 0x8f, 0xea, 0xf0, 0x09, 0xf0, 0x96, 0xc7, 0x38, 0x8a, 0x94, 0xa5, 0x5b, 0x2b, 0xd0, 0xd3, 0x64, 0x90, 0x61, 0x22, 0xb7, 0x1e, 0x69, 0x37, 0x2e, 0xd3, 0x3c, 0x27, 0x60, 0x7b, 0xc5, 0x44, 0x23, 0x27, 0x26, 0x36, 0x4f, 0xdb, 0x9f, 0x4d, 0xc5, 0x87, 0xb1, 0x15, 0xb0, 0x38, 0x83, 0x2b, 0x0b, 0x90, 0x84, 0x50, 0x64, 0x74, 0x52, 0xbc, 0xdf, 0x04, 0xdb, 0xb4, 0x7d, 0xd0, 0xc2, 0x5f, 0x9e, 0x48, 0x04, 0xd6, 0xc5, 0x75, 0xdb, 0x7a, 0x9c, 0xe7, 0xe2, 0x8a, 0x38, 0xef, 0x7a, 0xf5, 0x9d, 0x0e, 0x6d, 0x6c, 0x85, 0xac, 0xd2, 0xbc, 0x5d, 0x0d, 0x31, 0x5b, 0x91, 0x82, 0xe7, 0x40, 0x09, 0xdc, 0xcb, 0xf8, 0xf4 ],
-const [ 0x63, 0x39, 0x74, 0xba, 0x73, 0x5a, 0x5e, 0x57, 0xd1, 0xe8, 0x04, 0xbc, 0xdd, 0x4d, 0x72, 0xd4, 0xa9, 0xe9, 0xdf, 0x0f, 0xb9, 0xbf, 0x8d, 0xb2, 0x07, 0x6e, 0xf1, 0x71, 0x4a, 0x64, 0x14, 0x3f, 0x78, 0x4e, 0x39, 0x65, 0x8a, 0xd2, 0xc0, 0xd1, 0x7f, 0x81, 0x4a, 0xb1, 0xa3, 0x07, 0x1e, 0x41, 0x11, 0xa5, 0xcc, 0xe1, 0x77, 0xe2, 0x10, 0x6b, 0x19, 0x7d, 0xf8, 0xc3, 0x19, 0xa5, 0x49, 0xb0, 0xf5, 0x6c, 0x20, 0xea, 0x51, 0x7a, 0xd5, 0x74, 0xf7, 0xfe, 0x24, 0x2b, 0x1c, 0xeb, 0x8f, 0xa0, 0xe5, 0x60, 0xfe, 0x23, 0x29, 0x67, 0xa9, 0x20, 0x79, 0xe3, 0x37, 0xaf, 0x5d, 0xc4, 0x27, 0x66, 0xe1, 0x7d, 0x70, 0x71, 0x50, 0xb8, 0x64, 0xe5, 0x40, 0x48, 0xda, 0x52, 0xce, 0x5f, 0x8c, 0x98, 0x2b, 0x01, 0xbe, 0xfb, 0x58, 0xb8, 0x21, 0x79, 0x2d, 0x8a, 0xf6, 0x5a, 0xa0, 0x28, 0x76, 0x0a ],
-const [ 0xea, 0x52, 0x64, 0x80, 0xa0, 0x96, 0xa4, 0xd8, 0x93, 0x06, 0xb3, 0xcf, 0x86, 0xef, 0xf7, 0x42, 0xab, 0x46, 0xe4, 0xe9, 0xad, 0x99, 0x1e, 0xe7, 0xf3, 0x44, 0xdd, 0x9f, 0x24, 0xe8, 0x96, 0xca, 0xe6, 0x19, 0xd8, 0xc6, 0xec, 0x57, 0x74, 0x31, 0x2f, 0x40, 0xe0, 0xb7, 0x7b, 0x03, 0xdd, 0x28, 0x2e, 0x18, 0x58, 0xce, 0x3d, 0x2f, 0x8e, 0xfd, 0x77, 0x66, 0x74, 0xeb, 0x0e, 0xbe, 0x56, 0xc2, 0x53, 0xd0, 0xbe, 0xf4, 0xc1, 0xbc, 0x97, 0xcf, 0x3d, 0x63, 0x92, 0x51, 0x9c, 0xd6, 0xc9, 0x3d, 0x66, 0x0d, 0xa3, 0x6e, 0xd9, 0xdd, 0xf7, 0x6c, 0x31, 0x24, 0x74, 0x3d, 0x27, 0x47, 0x40, 0x7e, 0xb8, 0xde, 0xdf, 0xb2, 0x27, 0xad, 0x57, 0xd9, 0x45, 0xd7, 0x91, 0x45, 0xf0, 0x4e, 0x03, 0xa9, 0xda, 0x8e, 0x8c, 0x73, 0x8c, 0x8b, 0x9f, 0x5b, 0xaa, 0xe7, 0xa4, 0x3c, 0x78, 0x69, 0x9b, 0x23 ],
-const [ 0xf6, 0xea, 0xc4, 0xc4, 0x09, 0x9c, 0x32, 0x32, 0xdf, 0x01, 0x8f, 0xb3, 0xc8, 0x37, 0x52, 0x7b, 0x80, 0x21, 0xa1, 0xa2, 0x0c, 0xbb, 0x5d, 0x1b, 0xe5, 0xaa, 0x5e, 0xe5, 0x58, 0x18, 0x00, 0x85, 0x2d, 0xbe, 0xde, 0xb3, 0x87, 0x42, 0xdd, 0x54, 0x0b, 0xc4, 0x6d, 0xa8, 0x44, 0xb4, 0x0b, 0xc5, 0x46, 0xe6, 0x0a, 0x44, 0x92, 0xe8, 0x94, 0x3a, 0x3a, 0x93, 0xec, 0x6a, 0x46, 0xe0, 0xf5, 0xb8, 0x55, 0xfd, 0xf8, 0xe1, 0x88, 0xa0, 0xa2, 0x6a, 0x9b, 0x9c, 0x4c, 0xd6, 0x55, 0xb2, 0x80, 0x1c, 0x23, 0xa9, 0xb8, 0x58, 0x00, 0xa0, 0x68, 0xc1, 0x97, 0xa4, 0x3f, 0xdb, 0xac, 0x7e, 0xaa, 0xee, 0xb8, 0xce, 0x9b, 0xb6, 0xd3, 0x5e, 0x88, 0x5c, 0xd7, 0xb0, 0xb6, 0xa5, 0xc3, 0xd9, 0xb7, 0x6a, 0x5d, 0x92, 0x32, 0x48, 0x1c, 0x8d, 0xe2, 0x98, 0x44, 0x05, 0xe1, 0xa1, 0x53, 0x99, 0x27, 0x0d ],
-const [ 0xc9, 0xf9, 0x02, 0xc8, 0xc0, 0x2c, 0x5b, 0x24, 0xbb, 0x54, 0xe2, 0xdb, 0xf5, 0xc9, 0x57, 0x3b, 0xd4, 0x6b, 0xef, 0x39, 0xcc, 0xf1, 0x54, 0x62, 0x81, 0x7e, 0xee, 0x15, 0x2b, 0x75, 0x61, 0xf0, 0x3f, 0x8f, 0x57, 0x88, 0x4c, 0x2b, 0x7f, 0x5d, 0x22, 0xe5, 0xd6, 0x0d, 0x3a, 0x69, 0x25, 0xc7, 0x52, 0x8a, 0xca, 0x03, 0x58, 0x8e, 0xbc, 0x70, 0x89, 0xcc, 0xca, 0x2e, 0xda, 0x7a, 0x23, 0x3e, 0x97, 0xc0, 0x1b, 0x37, 0x4a, 0x10, 0x2c, 0x3a, 0xde, 0xba, 0x3b, 0x27, 0x04, 0xbb, 0x1d, 0x11, 0xd6, 0xd6, 0x5a, 0xf0, 0xba, 0xe7, 0x31, 0x96, 0x8a, 0x73, 0xdc, 0xe5, 0xf2, 0x83, 0x15, 0x3e, 0x19, 0xb3, 0xd8, 0x3c, 0x83, 0x86, 0x6b, 0xa3, 0x36, 0xfc, 0x9c, 0x93, 0x1b, 0x67, 0x4a, 0x02, 0xa8, 0x7a, 0x26, 0x69, 0xbc, 0xa3, 0xbb, 0xbc, 0xca, 0x9b, 0xac, 0xa0, 0x3a, 0x3b, 0x3d, 0xd9 ],
-const [ 0xc1, 0x49, 0x0a, 0xe9, 0x57, 0x98, 0x28, 0xb2, 0xd6, 0xd2, 0x93, 0x5f, 0x41, 0x7e, 0x0d, 0xbd, 0xff, 0xf5, 0xd4, 0x24, 0xde, 0x5e, 0xc5, 0x05, 0x57, 0xdd, 0xc7, 0xc3, 0x14, 0x08, 0x67, 0xc4, 0xaf, 0x9b, 0xc0, 0xc7, 0xbd, 0x6c, 0x9e, 0x78, 0x0b, 0xa1, 0xe3, 0x41, 0x27, 0x20, 0x29, 0x64, 0x22, 0x47, 0xa8, 0x47, 0x95, 0xde, 0x5a, 0x0e, 0xe2, 0x49, 0x5e, 0x6f, 0xbc, 0x02, 0x9b, 0xc2, 0xea, 0x47, 0xa5, 0x58, 0x47, 0x10, 0xe4, 0x0e, 0x0e, 0x44, 0xf3, 0x22, 0x54, 0x2c, 0x46, 0x45, 0xd6, 0x28, 0x10, 0xf1, 0xf5, 0xa1, 0x63, 0xfc, 0xff, 0x3e, 0x99, 0x6e, 0xb0, 0x5b, 0xf4, 0x90, 0xf9, 0xb7, 0x81, 0x45, 0xff, 0x6c, 0x42, 0x9d, 0x67, 0x25, 0x8b, 0xa8, 0xd1, 0x8b, 0xad, 0x88, 0xa2, 0x00, 0xd2, 0xca, 0x07, 0x90, 0x28, 0xf7, 0x37, 0x24, 0x42, 0x65, 0xf8, 0xf9, 0xbb, 0x53 ],
-const [ 0x45, 0xfc, 0xbd, 0xb9, 0x3a, 0xcd, 0x83, 0x00, 0xdd, 0xb8, 0x80, 0x12, 0xce, 0xb5, 0x59, 0x50, 0xf4, 0xda, 0x61, 0x14, 0x5a, 0xdb, 0x0d, 0x4c, 0x3d, 0xcd, 0xa8, 0x68, 0x63, 0x2f, 0x47, 0x77, 0xae, 0x2a, 0x00, 0x8c, 0xf0, 0x18, 0x57, 0x67, 0x01, 0x44, 0xf9, 0x51, 0x0f, 0xf0, 0xad, 0x48, 0x36, 0x9d, 0x87, 0x5c, 0x50, 0x86, 0x5e, 0x59, 0x0f, 0x6e, 0x81, 0xa6, 0x49, 0x9b, 0xa6, 0x6d, 0x92, 0x23, 0x23, 0xfc, 0x10, 0x66, 0x61, 0x6c, 0x8b, 0xdc, 0x8d, 0x80, 0xc4, 0x11, 0x90, 0xcf, 0x08, 0xed, 0x42, 0x26, 0x04, 0x39, 0xda, 0x28, 0xdb, 0x5f, 0xaa, 0x37, 0x76, 0x71, 0x09, 0x98, 0x1c, 0x6d, 0x90, 0xd1, 0x42, 0xc0, 0x89, 0x56, 0xa4, 0x08, 0xa4, 0x65, 0x94, 0x1e, 0xec, 0x2f, 0x92, 0x54, 0xfa, 0x38, 0x1e, 0xfb, 0x68, 0x00, 0xca, 0x29, 0x89, 0xe3, 0x93, 0xb9, 0x57, 0x3e ],
-const [ 0xb9, 0xe9, 0x44, 0xe0, 0xb4, 0x2d, 0x0f, 0xf4, 0x54, 0xf7, 0xf8, 0xaa, 0x24, 0xf0, 0x0e, 0x9e, 0xe0, 0x39, 0x05, 0x8c, 0xe4, 0x09, 0x41, 0x11, 0xe3, 0x97, 0x31, 0xb6, 0xdc, 0x3a, 0xde, 0x2a, 0x4a, 0xce, 0xc4, 0xcf, 0x9c, 0x5b, 0xe0, 0x78, 0xe4, 0xf1, 0x0a, 0x72, 0xd3, 0xd6, 0x85, 0xc1, 0xe5, 0xe4, 0xd5, 0xab, 0xd9, 0x2c, 0xd0, 0x7b, 0x64, 0xdf, 0xf8, 0x7f, 0x26, 0x6f, 0x08, 0x53, 0xdd, 0xf1, 0xcd, 0x61, 0xd9, 0xc6, 0x37, 0xa9, 0xb0, 0x7a, 0xb0, 0xbe, 0x32, 0xec, 0xac, 0x11, 0x9f, 0xaf, 0x82, 0x72, 0x18, 0xb1, 0x7a, 0xd4, 0x54, 0x1a, 0x27, 0x51, 0x94, 0x77, 0xf7, 0x6e, 0xd9, 0x18, 0x08, 0x9f, 0x54, 0xb6, 0x3d, 0x0e, 0x1e, 0x5a, 0x92, 0x98, 0x29, 0x79, 0xac, 0x18, 0x77, 0x64, 0xb5, 0xe9, 0x89, 0xe0, 0x66, 0xa6, 0x1b, 0x10, 0x65, 0x34, 0x0e, 0x9c, 0xd2, 0x03 ],
-const [ 0x2a, 0xc0, 0xbb, 0x05, 0x24, 0xc2, 0x2b, 0x90, 0x2d, 0xe3, 0x4c, 0xe6, 0x4e, 0x61, 0x72, 0xd1, 0xb2, 0x07, 0x4e, 0x15, 0x9f, 0x51, 0x7a, 0xb1, 0xab, 0xd1, 0x52, 0x62, 0x2c, 0xd1, 0x06, 0x69, 0xf0, 0x3a, 0xed, 0x8e, 0x2e, 0xb5, 0x1c, 0x65, 0xbd, 0x0f, 0x38, 0xd0, 0x84, 0xe2, 0x88, 0xc5, 0x32, 0x72, 0x4e, 0x51, 0x2f, 0xd5, 0x58, 0xdd, 0xd2, 0x57, 0xd2, 0xb1, 0xd4, 0x1c, 0x5e, 0xb6, 0x04, 0x07, 0x67, 0x80, 0x3d, 0xdb, 0xb1, 0x8b, 0x95, 0xa0, 0x35, 0xc5, 0xd8, 0x49, 0x2d, 0x4d, 0x35, 0x93, 0x6b, 0x7b, 0x36, 0x30, 0xee, 0x20, 0xf6, 0x25, 0xb7, 0x0f, 0x8e, 0x71, 0xd9, 0xdc, 0xd0, 0xef, 0xd0, 0xe3, 0x38, 0x7d, 0x13, 0x8c, 0x1f, 0x5e, 0xed, 0xce, 0x32, 0xdd, 0x88, 0xf2, 0x23, 0x33, 0x4b, 0x9a, 0x9e, 0xab, 0x65, 0x01, 0x7f, 0x04, 0xaa, 0x84, 0x42, 0x17, 0x9f, 0x62 ],
-const [ 0xf5, 0xaf, 0xf2, 0x83, 0xb3, 0xaa, 0xa4, 0xc7, 0x1b, 0x13, 0xc5, 0x90, 0x77, 0x1d, 0x8b, 0xd3, 0x35, 0x8d, 0x76, 0x98, 0x8e, 0xcd, 0x1e, 0xae, 0x65, 0x3c, 0x2f, 0x9d, 0x72, 0xc9, 0xb2, 0xdc, 0x9f, 0xc0, 0x8e, 0x44, 0xb2, 0xe3, 0x4e, 0xc5, 0x2d, 0xbd, 0x24, 0x58, 0x72, 0x33, 0x2e, 0x34, 0x2b, 0x5c, 0xf9, 0x45, 0xe9, 0x93, 0x44, 0xda, 0x0b, 0xca, 0x06, 0x9e, 0xe2, 0x21, 0xb2, 0xc9, 0x13, 0xb7, 0xb9, 0x97, 0x3c, 0xbf, 0x50, 0xfa, 0xda, 0xd7, 0x75, 0x8b, 0x6a, 0x96, 0x2c, 0xc7, 0xce, 0x64, 0x0f, 0x78, 0xf3, 0x8f, 0x05, 0x71, 0xb1, 0x9b, 0x52, 0x7e, 0xf2, 0xd9, 0xd0, 0x9b, 0x17, 0x3b, 0x7b, 0x64, 0x97, 0x66, 0x33, 0xcd, 0xe9, 0x09, 0xbe, 0x13, 0xa5, 0x6d, 0x0d, 0xf3, 0xe6, 0x4e, 0xc0, 0x19, 0xf2, 0xea, 0xec, 0xdb, 0x1d, 0x57, 0x1b, 0x27, 0xea, 0x19, 0x94, 0xba ],
-const [ 0xc0, 0xbb, 0x12, 0xa5, 0xda, 0x62, 0x83, 0x63, 0xa7, 0x1f, 0x1f, 0x5c, 0x9c, 0xe7, 0x15, 0xce, 0x89, 0x95, 0xe6, 0x07, 0x14, 0x8d, 0x77, 0x2b, 0x66, 0x9f, 0x65, 0x32, 0x24, 0x2f, 0x98, 0x30, 0xa1, 0x93, 0x1b, 0xd9, 0x52, 0xbd, 0x2a, 0x44, 0x82, 0x1a, 0x8d, 0xef, 0x46, 0xb9, 0x25, 0x04, 0xb4, 0xb0, 0xc5, 0xda, 0x50, 0xbc, 0x43, 0xbf, 0xc7, 0x27, 0xce, 0xf5, 0xe0, 0xef, 0x81, 0xfa, 0xaf, 0x24, 0x39, 0x0c, 0x0c, 0x92, 0xa4, 0xed, 0x43, 0xa0, 0x9b, 0xe4, 0x0d, 0x78, 0xb2, 0x04, 0xbf, 0x68, 0x0d, 0xb0, 0xc2, 0x88, 0x75, 0x5f, 0x43, 0x9e, 0xaa, 0x9d, 0x2b, 0x3e, 0xfb, 0x53, 0x52, 0x36, 0x15, 0x47, 0xef, 0x29, 0x19, 0xe6, 0x54, 0x79, 0xf1, 0x42, 0xd8, 0x6a, 0xe3, 0x57, 0x14, 0x85, 0x66, 0x92, 0x52, 0x3b, 0x35, 0x94, 0x42, 0xcb, 0xa3, 0x33, 0xef, 0x66, 0x2e, 0xc1 ],
-const [ 0x85, 0x4b, 0x32, 0x86, 0x62, 0x73, 0xc6, 0xeb, 0x11, 0x0e, 0x38, 0x0b, 0x8f, 0x3b, 0xfd, 0x16, 0x9c, 0xc8, 0x7a, 0x6f, 0x61, 0x49, 0xc7, 0x5e, 0x56, 0x67, 0xb3, 0x05, 0x63, 0x7b, 0x08, 0x95, 0x46, 0x5c, 0x10, 0xc1, 0x34, 0x74, 0x57, 0x73, 0xc3, 0x1a, 0xb3, 0xbe, 0x07, 0x1c, 0x82, 0x15, 0xfb, 0x9a, 0x33, 0xba, 0x23, 0x1b, 0x08, 0x78, 0x70, 0xda, 0x19, 0x95, 0x64, 0x61, 0x9d, 0x03, 0x76, 0x59, 0x65, 0xd6, 0xb8, 0xa1, 0xa9, 0xfb, 0xb7, 0x9d, 0x07, 0x26, 0xa3, 0xd1, 0xc9, 0x0c, 0xb0, 0xae, 0x67, 0xd3, 0xbb, 0xab, 0x4c, 0xc6, 0x31, 0x98, 0xdd, 0x4e, 0x2d, 0x2f, 0xb8, 0x1d, 0xe0, 0xed, 0x39, 0xad, 0x36, 0x20, 0x43, 0xe9, 0xb6, 0x40, 0x3d, 0x2a, 0xab, 0x82, 0x5a, 0x64, 0x81, 0xab, 0x1e, 0xa2, 0x71, 0x22, 0x1e, 0xaf, 0x61, 0x4a, 0x07, 0x16, 0x05, 0x0e, 0xe1, 0x4d ],
-const [ 0x99, 0x49, 0x44, 0x22, 0x46, 0x0e, 0xc8, 0x58, 0xa2, 0x43, 0x94, 0xf6, 0x03, 0xb1, 0xd9, 0xb9, 0x40, 0xa2, 0x4a, 0xd9, 0xc6, 0xa3, 0xd1, 0xe9, 0xe8, 0x87, 0x81, 0xfe, 0x77, 0xaf, 0xcd, 0x13, 0x93, 0x89, 0xf7, 0xac, 0xc0, 0x57, 0xcb, 0xba, 0x3d, 0x32, 0x8c, 0xbf, 0x91, 0x4e, 0x2f, 0x32, 0x66, 0x7f, 0xc7, 0x25, 0x9a, 0xfc, 0x41, 0x25, 0x94, 0x64, 0x51, 0x62, 0xd4, 0xfe, 0xac, 0x10, 0xce, 0x45, 0x78, 0x0c, 0xf9, 0xa4, 0x00, 0xc3, 0x23, 0x7e, 0xad, 0x50, 0x07, 0x71, 0x32, 0xe4, 0x21, 0xdc, 0x06, 0x6b, 0xc1, 0x9e, 0x17, 0x6c, 0x5f, 0x21, 0xbd, 0x31, 0x2e, 0x98, 0xec, 0x29, 0xf3, 0x84, 0xaf, 0x8a, 0x18, 0x7d, 0xd1, 0x3a, 0xfc, 0x2f, 0xdd, 0xf0, 0x8e, 0xa3, 0x4a, 0x97, 0x1a, 0xc0, 0xef, 0xf3, 0x63, 0x11, 0xbd, 0x86, 0xf1, 0xc8, 0xac, 0xb5, 0xac, 0x03, 0xf6, 0x27 ],
-const [ 0xd8, 0xef, 0xcb, 0x41, 0x6f, 0x23, 0x7c, 0x7e, 0x05, 0xbe, 0xd9, 0x21, 0x2c, 0x54, 0x30, 0x11, 0xc3, 0x9e, 0x6a, 0x5f, 0x25, 0xd7, 0xe2, 0xcb, 0xa0, 0x65, 0x78, 0x8a, 0x29, 0xbc, 0xe1, 0x46, 0x4d, 0x80, 0x41, 0x67, 0x6b, 0xe9, 0xfb, 0x91, 0x21, 0x6c, 0xc7, 0x6d, 0x04, 0x98, 0x06, 0xad, 0x94, 0x3e, 0x53, 0x4a, 0x6f, 0xd4, 0x5b, 0x10, 0xc4, 0x1b, 0xee, 0x5d, 0x0b, 0x00, 0x56, 0x26, 0xf3, 0xc0, 0xe7, 0x3a, 0x9c, 0x50, 0xd7, 0xcb, 0x07, 0xfc, 0x50, 0x2a, 0xcb, 0x4e, 0xc4, 0xd2, 0x09, 0x31, 0x81, 0xa8, 0xa1, 0x56, 0x85, 0x81, 0xa6, 0xd7, 0x93, 0xe5, 0x10, 0x1b, 0x86, 0x13, 0xb1, 0xf9, 0xe6, 0x44, 0x6b, 0x20, 0xb9, 0x34, 0x9f, 0xb6, 0x9b, 0xdf, 0xe8, 0x3f, 0x11, 0x88, 0x0a, 0xc1, 0x1b, 0x00, 0x25, 0x25, 0x08, 0x25, 0x2f, 0xe1, 0x8e, 0xa9, 0xa0, 0xd4, 0x1a, 0x15 ],
-const [ 0x1a, 0x02, 0x23, 0x26, 0x1a, 0xb4, 0x37, 0xa4, 0xac, 0x17, 0x01, 0xb4, 0x78, 0x07, 0x76, 0xc4, 0x3f, 0x0f, 0x89, 0x49, 0xb3, 0xe7, 0xa1, 0x61, 0x8c, 0x3b, 0x4a, 0xb6, 0xd8, 0xae, 0x2a, 0xa6, 0x92, 0x1f, 0x38, 0xa2, 0x77, 0x2b, 0x28, 0xd4, 0x15, 0xf3, 0x29, 0x05, 0x25, 0x1f, 0xd3, 0xbd, 0x1a, 0x23, 0x5b, 0xac, 0xfa, 0xc0, 0x0a, 0x48, 0x6d, 0xce, 0xed, 0xb8, 0x14, 0x3a, 0xcd, 0xf1, 0x1b, 0x4b, 0x61, 0x1f, 0x12, 0x29, 0xc3, 0x46, 0xf8, 0x9f, 0x21, 0x29, 0x99, 0x20, 0xb5, 0x6b, 0x1b, 0x08, 0xf7, 0xf4, 0xd3, 0x25, 0x11, 0x96, 0x5d, 0x76, 0x93, 0xf0, 0xeb, 0x32, 0x68, 0x93, 0xdd, 0x0c, 0x09, 0x64, 0x92, 0xb6, 0xf0, 0x42, 0x7e, 0xa4, 0x50, 0xe8, 0x7d, 0x12, 0x03, 0x14, 0x67, 0x48, 0xc3, 0xe9, 0xe5, 0x1d, 0x9e, 0x91, 0x83, 0xba, 0xa4, 0x28, 0x06, 0xa0, 0xe3, 0xd5 ],
-const [ 0xfa, 0xa6, 0xce, 0x40, 0xd9, 0x31, 0xf3, 0xc0, 0xcb, 0x45, 0x38, 0xa8, 0x2a, 0x22, 0xf0, 0xd4, 0xf3, 0x22, 0x1f, 0x02, 0x7b, 0x99, 0xd3, 0xd8, 0x5d, 0xff, 0xb7, 0x29, 0xb7, 0x51, 0xe5, 0x74, 0x96, 0xb4, 0xfc, 0xad, 0xae, 0x5c, 0x72, 0x40, 0x4f, 0xac, 0x2c, 0x54, 0x94, 0x9e, 0x4c, 0x4c, 0xde, 0x66, 0x4b, 0x94, 0x80, 0x52, 0x47, 0x9a, 0xbc, 0xf5, 0x9e, 0x1a, 0xef, 0x84, 0xbb, 0x9f, 0x08, 0x80, 0x30, 0x47, 0x3e, 0x95, 0x05, 0xc6, 0x03, 0xc3, 0x50, 0xad, 0x33, 0xbb, 0x06, 0xed, 0x92, 0x8c, 0x11, 0x96, 0x75, 0x7e, 0xa3, 0xe5, 0xbf, 0x3e, 0xc9, 0x7e, 0x0f, 0x3c, 0x43, 0xf6, 0x38, 0x52, 0x93, 0x94, 0xf2, 0xa6, 0x54, 0x59, 0xcf, 0xd1, 0xcd, 0x3d, 0x70, 0x41, 0xc6, 0xbc, 0xf8, 0xdb, 0x9a, 0x91, 0xc1, 0xe5, 0x8e, 0xc2, 0x4e, 0x24, 0x61, 0xdc, 0x81, 0x41, 0x25, 0x80 ],
-const [ 0x28, 0xb1, 0x8b, 0x86, 0x2c, 0xe9, 0x54, 0x1e, 0xd6, 0xda, 0xf8, 0x11, 0x99, 0xf9, 0xa3, 0x31, 0x13, 0x3b, 0x0e, 0xa3, 0xe4, 0x8f, 0xf4, 0x86, 0xc1, 0xac, 0xc6, 0xd5, 0xc4, 0x0e, 0x9f, 0x8f, 0x06, 0x3b, 0x7a, 0x15, 0x70, 0x4b, 0xa3, 0xd3, 0xce, 0xa7, 0x6b, 0x22, 0x25, 0x11, 0x20, 0x6d, 0x47, 0xe5, 0x3c, 0x93, 0xa4, 0x9e, 0xdd, 0x8d, 0x63, 0x9b, 0x75, 0x51, 0xb2, 0x24, 0xc3, 0xf6, 0x5a, 0xa8, 0x02, 0x18, 0x96, 0x48, 0x60, 0x7e, 0x25, 0x9a, 0xb1, 0xfa, 0x9e, 0xa6, 0x65, 0x91, 0x04, 0x35, 0xb7, 0xdc, 0x9a, 0x4c, 0x28, 0xae, 0xf8, 0xf3, 0x2c, 0xf8, 0x5f, 0x3a, 0x23, 0xe9, 0x4a, 0x7e, 0x8a, 0x59, 0x45, 0xe9, 0x73, 0x67, 0x02, 0x38, 0x32, 0x61, 0xaa, 0xc1, 0x5a, 0xe5, 0x71, 0xb4, 0xe8, 0x46, 0x6d, 0xa1, 0xbd, 0x31, 0xa8, 0x3a, 0x52, 0x91, 0x74, 0x5b, 0xa7, 0xaf ],
-const [ 0x80, 0xf2, 0x01, 0x52, 0xd1, 0x2b, 0x0a, 0x59, 0x93, 0xa2, 0xb1, 0x7d, 0x1f, 0x55, 0xcf, 0xc0, 0xc0, 0x78, 0x96, 0x1e, 0xd0, 0x0c, 0xd1, 0xc2, 0x1d, 0xb3, 0x6d, 0x7a, 0x92, 0xc3, 0x39, 0x69, 0x13, 0x99, 0xea, 0xfc, 0xa8, 0x30, 0x62, 0x1f, 0xde, 0xf2, 0x32, 0xb0, 0x6a, 0xcd, 0x5d, 0x33, 0x10, 0x8a, 0x5f, 0xc8, 0xc3, 0x5a, 0x6d, 0x5b, 0x0e, 0xb2, 0xff, 0x1b, 0xb2, 0x59, 0x8c, 0x2d, 0x91, 0xc0, 0x94, 0xa1, 0xca, 0x91, 0xe4, 0xa5, 0x26, 0x8a, 0x16, 0xf8, 0xb3, 0x8c, 0x57, 0xa2, 0xae, 0xef, 0x6d, 0xe3, 0xa6, 0x19, 0xf8, 0x69, 0xdf, 0x4f, 0xf7, 0xc5, 0xf5, 0xca, 0x8f, 0x20, 0xc1, 0x0e, 0x08, 0x2a, 0x80, 0x77, 0x19, 0x54, 0x32, 0x15, 0x65, 0x3f, 0x41, 0xba, 0x45, 0x74, 0x63, 0x50, 0xc8, 0x55, 0xc1, 0x70, 0xf8, 0x54, 0x59, 0x31, 0x5f, 0x62, 0xa1, 0x3e, 0xca, 0xaa ],
-const [ 0xb1, 0x13, 0x89, 0xc7, 0xdc, 0x20, 0xff, 0xd0, 0xc4, 0xa5, 0xf8, 0x87, 0xf2, 0x57, 0x6b, 0xdc, 0x30, 0x2c, 0x7d, 0x2a, 0xf7, 0x08, 0x9a, 0x01, 0x27, 0x99, 0xc5, 0x28, 0xfa, 0x7f, 0x2c, 0xe2, 0x3b, 0xb1, 0x00, 0x71, 0xb3, 0x1c, 0x83, 0xd9, 0xe5, 0x8d, 0x63, 0xe6, 0xfb, 0xd0, 0x46, 0x70, 0xff, 0x1a, 0xa6, 0xde, 0x4e, 0xa4, 0xdf, 0xe9, 0x4a, 0x99, 0x86, 0xa3, 0x50, 0x32, 0xfd, 0xb7, 0xea, 0x1f, 0x44, 0xf2, 0x45, 0x2a, 0x12, 0x02, 0xe5, 0x17, 0x25, 0x7e, 0x97, 0xce, 0xd6, 0x27, 0xa7, 0xbc, 0xf0, 0x6e, 0x54, 0x76, 0xc2, 0x36, 0x81, 0x9f, 0x73, 0xda, 0xad, 0x0d, 0x96, 0x72, 0x25, 0x27, 0xfe, 0x52, 0x78, 0x91, 0xd4, 0xd4, 0x2c, 0x0c, 0xe6, 0x58, 0xaf, 0x97, 0x42, 0x88, 0x90, 0xda, 0x04, 0xe1, 0xef, 0xc5, 0x6c, 0x6f, 0x33, 0x75, 0x34, 0xd7, 0xfb, 0x57, 0x20, 0x9b ],
-const [ 0x57, 0xe1, 0xd3, 0xff, 0x5f, 0xc4, 0x78, 0x5f, 0x93, 0x70, 0xdf, 0x2e, 0x5a, 0xbf, 0x45, 0x45, 0x79, 0x75, 0x2e, 0xa9, 0x34, 0xd2, 0xa9, 0xba, 0xb5, 0x68, 0xd5, 0xae, 0xb2, 0x2b, 0xa4, 0x3e, 0x4b, 0xc7, 0xdf, 0x9f, 0x31, 0x36, 0x6b, 0xb4, 0x0d, 0x91, 0xca, 0x82, 0x20, 0x26, 0xe4, 0xe4, 0x26, 0xcc, 0x08, 0x80, 0x81, 0x73, 0x2e, 0xf9, 0x93, 0xff, 0x7f, 0x67, 0x6c, 0x57, 0x17, 0x04, 0xa5, 0xb8, 0x09, 0x27, 0x8b, 0x50, 0xa3, 0x77, 0x81, 0x08, 0xf4, 0x58, 0x9f, 0xa1, 0x8c, 0xaa, 0x9f, 0x02, 0x83, 0xb3, 0xfa, 0xd0, 0xbd, 0x59, 0x4e, 0x40, 0x6b, 0x95, 0x03, 0x29, 0xd5, 0x24, 0x2e, 0x5e, 0x58, 0x80, 0xb5, 0x3a, 0xaa, 0x0e, 0xb5, 0x7c, 0x66, 0x99, 0x20, 0x55, 0xc4, 0xff, 0xab, 0xc0, 0xa7, 0x2a, 0xe7, 0x12, 0xde, 0x42, 0xad, 0xd2, 0xa3, 0x21, 0xc0, 0xca, 0x68, 0x08 ],
-const [ 0x6b, 0x8d, 0xb9, 0xac, 0xdf, 0xd2, 0x41, 0x50, 0x80, 0x8a, 0x92, 0x36, 0x85, 0x96, 0x55, 0x71, 0x81, 0xd4, 0x45, 0xe5, 0xa0, 0x4e, 0x91, 0x11, 0x2d, 0xb2, 0x81, 0x2b, 0x58, 0x03, 0x5d, 0x72, 0x37, 0x8d, 0x8b, 0xc0, 0x0a, 0x1e, 0xf7, 0x5e, 0xc3, 0x73, 0xb8, 0x1d, 0xc6, 0xf1, 0xf0, 0xa2, 0xed, 0x96, 0xf3, 0x02, 0xcf, 0x2e, 0xac, 0x8f, 0x42, 0xca, 0x3d, 0xf1, 0x1e, 0x6e, 0xe6, 0x78, 0x44, 0x0a, 0x28, 0xb0, 0xdf, 0xab, 0x2a, 0x36, 0xea, 0xf3, 0x5b, 0xcb, 0xf3, 0xc7, 0x59, 0xa7, 0x1e, 0x47, 0x12, 0x0f, 0x6c, 0x03, 0x29, 0x2a, 0x3d, 0x6b, 0x9b, 0x11, 0x14, 0x88, 0xa2, 0x25, 0x9b, 0xea, 0xd9, 0xa5, 0xe7, 0xe2, 0xa1, 0x80, 0xfc, 0xf1, 0xc4, 0x67, 0x94, 0x7f, 0x59, 0x27, 0x1c, 0xd0, 0xe8, 0x36, 0x00, 0x35, 0xce, 0x8b, 0x28, 0x7f, 0xe2, 0xb3, 0xc3, 0xb9, 0x58, 0x22 ],
-const [ 0x13, 0x8e, 0xfc, 0x83, 0x2c, 0x64, 0x51, 0x3d, 0x11, 0xb9, 0x87, 0x3c, 0x6f, 0xd4, 0xd8, 0xa6, 0x5d, 0xbf, 0x36, 0x70, 0x92, 0xa8, 0x26, 0xdd, 0xd5, 0x87, 0xd1, 0x41, 0xb4, 0x01, 0x58, 0x0b, 0x79, 0x8c, 0x69, 0x02, 0x5a, 0xd5, 0x10, 0xcf, 0xf0, 0x5f, 0xcf, 0xbc, 0xeb, 0x6c, 0xf0, 0xbb, 0x03, 0x20, 0x1a, 0xaa, 0x32, 0xe4, 0x23, 0xd5, 0x20, 0x09, 0x25, 0xbd, 0xdf, 0xad, 0xd4, 0x18, 0xd8, 0xe3, 0x0e, 0x18, 0x05, 0x0e, 0xb4, 0xf0, 0x61, 0x8e, 0xb9, 0x95, 0x9d, 0x9f, 0x78, 0xc1, 0x15, 0x7d, 0x4b, 0x3e, 0x02, 0xcd, 0x59, 0x61, 0xf1, 0x38, 0xaf, 0xd5, 0x74, 0x59, 0x93, 0x99, 0x17, 0xd9, 0x14, 0x4c, 0x95, 0xd8, 0xe6, 0xa9, 0x4c, 0x8f, 0x6d, 0x4e, 0xef, 0x34, 0x18, 0xc1, 0x7b, 0x1e, 0xf0, 0xb4, 0x6c, 0x2a, 0x71, 0x88, 0x30, 0x5d, 0x98, 0x11, 0xdc, 0xcb, 0x3d, 0x99 ],
-];
-
-const hmac_sha256_keys = const [
-const [ 0x6f, 0x35, 0x62, 0x8d, 0x65, 0x81, 0x34, 0x35, 0x53, 0x4b, 0x5d, 0x67, 0xfb, 0xdb, 0x54, 0xcb, 0x33, 0x40, 0x3d, 0x04, 0xe8, 0x43, 0x10, 0x3e, 0x63, 0x99, 0xf8, 0x06, 0xcb, 0x5d, 0xf9, 0x5f, 0xeb, 0xbd, 0xd6, 0x12, 0x36, 0xf3, 0x32, 0x45 ],
-const [ 0x17, 0xb5, 0x28, 0x58, 0xe3, 0xe1, 0x35, 0xbe, 0x44, 0x40, 0xd7, 0xdf, 0x0c, 0xa9, 0x96, 0xf4, 0x1c, 0xcb, 0x78, 0xb7, 0xd8, 0xcc, 0x19, 0x24, 0xd8, 0x30, 0xfe, 0x81, 0xe0, 0xfd, 0x27, 0x9c, 0x13, 0x1c, 0xe3, 0x54, 0x63, 0x03, 0xe9, 0x5a ],
-const [ 0x7c, 0x67, 0x41, 0x0e, 0x0a, 0x9e, 0x3d, 0x7a, 0xe4, 0xf3, 0xd0, 0x4e, 0xff, 0x1c, 0x27, 0x16, 0x89, 0x1e, 0x82, 0x1c, 0x6e, 0xc1, 0xdc, 0x82, 0x21, 0x42, 0xce, 0x8d, 0x99, 0x49, 0xb1, 0x44, 0x9a, 0x1a, 0x03, 0x3a, 0x35, 0x0f, 0x0b, 0xa8 ],
-const [ 0xb2, 0xc4, 0x50, 0x12, 0x8d, 0x07, 0x44, 0x42, 0x1c, 0x3f, 0x31, 0xfa, 0xb3, 0x7b, 0xbc, 0xdf, 0xb5, 0xa2, 0xff, 0x2f, 0xb7, 0x06, 0xd1, 0xf7, 0xe2, 0x3c, 0x48, 0x86, 0x99, 0x2c, 0x7d, 0x21, 0x5c, 0x64, 0x8f, 0xf8, 0xed, 0xb2, 0xeb, 0x59 ],
-const [ 0xa7, 0x74, 0x43, 0x21, 0xd7, 0x39, 0x38, 0xb8, 0xee, 0xa1, 0x37, 0x54, 0x90, 0x90, 0x29, 0x88, 0x1b, 0xbd, 0x72, 0x74, 0x39, 0xfe, 0x27, 0x31, 0xb1, 0xc6, 0x7b, 0x70, 0x83, 0xeb, 0x7b, 0x5d, 0x33, 0xad, 0xfc, 0xca, 0x65, 0xf5, 0xd1, 0x89 ],
-const [ 0x79, 0x5a, 0x0b, 0xa9, 0xb0, 0x29, 0x84, 0xcf, 0xce, 0x5e, 0x73, 0x95, 0xfb, 0x94, 0xd9, 0x8f, 0xcf, 0x12, 0xae, 0x5d, 0xb8, 0xa0, 0x6e, 0x23, 0x9c, 0x9a, 0xd4, 0x39, 0xbf, 0x42, 0xe5, 0x23, 0xe6, 0x5a, 0x31, 0xc3, 0xbd, 0xf3, 0x56, 0xcd ],
-const [ 0xaa, 0x41, 0xb5, 0x22, 0x2e, 0xfd, 0xea, 0x88, 0x2c, 0xbe, 0xbd, 0x11, 0xd3, 0x43, 0x00, 0x0e, 0xc2, 0xff, 0x6b, 0x2f, 0x7b, 0xbf, 0xa7, 0x46, 0x15, 0x8e, 0xa5, 0x4f, 0x32, 0xd5, 0x34, 0xae, 0x31, 0xc7, 0xd3, 0xb7, 0xa5, 0xfc, 0xc3, 0x73 ],
-const [ 0xaa, 0xa4, 0x49, 0x92, 0x3f, 0x0c, 0xd3, 0xe6, 0xa7, 0xe7, 0x4d, 0x9c, 0x56, 0xa7, 0xeb, 0x6a, 0x3b, 0x4c, 0x3d, 0xea, 0x97, 0xe6, 0xa8, 0x40, 0x0e, 0x55, 0x17, 0xfc, 0xff, 0x54, 0xee, 0x42, 0x11, 0xb6, 0x40, 0x28, 0x0e, 0xee, 0x41, 0x5f ],
-const [ 0x6c, 0x13, 0xd7, 0x4e, 0xd0, 0x04, 0xee, 0x92, 0xad, 0xb4, 0x4b, 0x75, 0x5b, 0xe9, 0x2e, 0x84, 0x40, 0x43, 0x47, 0x04, 0xa1, 0xc2, 0x27, 0x90, 0xb7, 0x88, 0xf5, 0x04, 0x06, 0xe0, 0x62, 0x9a, 0xea, 0x80, 0xde, 0x53, 0x73, 0x0b, 0x0d, 0x99 ],
-const [ 0x12, 0x54, 0x1d, 0x81, 0xc6, 0x95, 0x82, 0x21, 0xc4, 0x4a, 0x95, 0x8e, 0xcd, 0x7f, 0x48, 0xc0, 0x8a, 0x89, 0xa8, 0x68, 0x7d, 0x30, 0x6c, 0x2f, 0x38, 0x14, 0xc9, 0x3e, 0xcd, 0x49, 0x8e, 0x04, 0x85, 0x45, 0x6c, 0x33, 0xd5, 0xfc, 0x95, 0x0c ],
-const [ 0xa1, 0xe8, 0xcf, 0x95, 0xc6, 0xd7, 0x29, 0x50, 0x76, 0x61, 0xfc, 0xc6, 0x87, 0x15, 0x69, 0x22, 0xc8, 0x97, 0x56, 0x45, 0xe5, 0xf3, 0x6e, 0xba, 0x8a, 0x30, 0x69, 0xec, 0xcb, 0x29, 0x8e, 0x96, 0xc4, 0x98, 0x76, 0x7c, 0x7c, 0x74, 0x12, 0x59 ],
-const [ 0xc7, 0xe5, 0xed, 0xe1, 0x52, 0xc5, 0x0a, 0x93, 0x5e, 0x76, 0xb5, 0x99, 0x79, 0xe0, 0x86, 0x38, 0xa0, 0x9c, 0xff, 0xfd, 0x01, 0xac, 0x70, 0x08, 0x05, 0x6a, 0x18, 0xab, 0x8e, 0xbf, 0x8d, 0x34, 0x7e, 0x95, 0x5e, 0x06, 0x78, 0x8f, 0xf6, 0xef ],
-const [ 0x6a, 0xb3, 0x7b, 0xe6, 0x4f, 0x4b, 0x1e, 0x03, 0x2c, 0x5a, 0x43, 0xdc, 0x03, 0xe4, 0xaf, 0xb6, 0x5c, 0x6a, 0xb1, 0x32, 0x9f, 0xbc, 0xa9, 0xc4, 0xc1, 0x0f, 0xc7, 0x66, 0x22, 0x4f, 0x15, 0x8e, 0xb6, 0xb7, 0xb8, 0x5d, 0x64, 0x9e, 0x73, 0x19 ],
-const [ 0x78, 0x5a, 0x11, 0x89, 0x38, 0x18, 0x24, 0xa8, 0x13, 0x1e, 0x88, 0x5b, 0xa4, 0xb2, 0x3c, 0x2e, 0x94, 0xe3, 0xdf, 0xdc, 0x03, 0x65, 0x2c, 0xc3, 0x2a, 0x9c, 0xc1, 0x96, 0x3f, 0xf7, 0x24, 0x52, 0x99, 0x7f, 0x07, 0x73, 0x15, 0xb0, 0xcb, 0x67 ],
-const [ 0x39, 0x45, 0x75, 0xdd, 0xed, 0x53, 0x10, 0x00, 0xe7, 0x76, 0xae, 0x4a, 0xdc, 0x64, 0xc4, 0xaf, 0xfb, 0x5b, 0x22, 0x0a, 0xc5, 0xa9, 0x6e, 0xbf, 0x1f, 0x72, 0xd1, 0x9f, 0xa6, 0xae, 0xf0, 0x0c, 0x42, 0x71, 0x1e, 0x5d, 0xfe, 0x6f, 0xcf, 0x84 ],
-const [ 0x14, 0xd4, 0x5c, 0xa2, 0xa3, 0xd4, 0x97, 0x7d, 0xab, 0x2b, 0x7d, 0x44, 0x2c, 0x6f, 0x9e, 0x57, 0xce, 0x34, 0x8e, 0x0a, 0x6a, 0x80, 0x8b, 0xb3, 0xcc, 0x7f, 0x60, 0x02, 0xb8, 0x77, 0x89, 0x91, 0x2a, 0xfd, 0x98, 0xbc, 0xe2, 0x6a, 0xd8, 0xb3 ],
-const [ 0x2a, 0x04, 0x66, 0xdd, 0x51, 0x5d, 0x2f, 0x48, 0xfe, 0xc5, 0xe7, 0x8e, 0x22, 0xbb, 0x22, 0xc6, 0x06, 0xb0, 0x9e, 0x81, 0x84, 0x69, 0x1c, 0x51, 0x77, 0xa4, 0x6e, 0x8c, 0x70, 0xfe, 0xd2, 0x4d, 0xab, 0x14, 0x7e, 0xbc, 0x41, 0xe9, 0x7c, 0x8f ],
-const [ 0x3a, 0x41, 0x82, 0xaf, 0x8c, 0x39, 0x14, 0xd1, 0xdf, 0x57, 0xb6, 0x32, 0x1f, 0xa5, 0xde, 0xc6, 0x87, 0x48, 0xad, 0x74, 0x6e, 0x03, 0x69, 0xbb, 0x64, 0xfc, 0x2d, 0x9b, 0x7d, 0xc3, 0xdf, 0xb3, 0xed, 0x90, 0x63, 0xa7, 0xd5, 0xcc, 0x0e, 0xc4 ],
-const [ 0x56, 0xe8, 0xad, 0xa1, 0xeb, 0xc8, 0x70, 0x6b, 0x94, 0xf9, 0x9b, 0xf2, 0x29, 0x03, 0x65, 0x22, 0x2f, 0x66, 0x19, 0xa7, 0xfc, 0x31, 0x61, 0x15, 0x1c, 0xd0, 0xc5, 0x66, 0xf4, 0x26, 0x6f, 0xaa, 0xa5, 0xdc, 0x31, 0xfa, 0x34, 0xf8, 0xc9, 0xae ],
-const [ 0x1e, 0x6d, 0x00, 0xb3, 0x86, 0xbb, 0xbf, 0xb7, 0xf4, 0x40, 0x01, 0xc5, 0x91, 0x54, 0x48, 0xa5, 0x16, 0x95, 0x4d, 0x7a, 0x2a, 0xe8, 0xf4, 0xe9, 0xea, 0xba, 0x80, 0x7d, 0xc9, 0x8c, 0x03, 0x4a, 0x9a, 0xae, 0x19, 0xd1, 0xeb, 0x4a, 0xd6, 0x24 ],
-const [ 0xe2, 0x12, 0x7a, 0x48, 0xf6, 0x15, 0xee, 0xaf, 0xb9, 0x27, 0xee, 0x53, 0x22, 0x2f, 0x50, 0x04, 0xd1, 0x1d, 0xd2, 0xd3, 0xa2, 0x2e, 0x53, 0x77, 0x82, 0x6b, 0x43, 0xf0, 0x81, 0x74, 0x58, 0x6a, 0x29, 0x7b, 0x82, 0x63, 0x0e, 0x93, 0x22, 0x10 ],
-const [ 0xee, 0x0a, 0x81, 0xa8, 0xbd, 0x52, 0xc9, 0xb1, 0x42, 0x20, 0x83, 0x52, 0x2d, 0x37, 0xf8, 0x07, 0x18, 0x96, 0xba, 0x62, 0x5f, 0xfa, 0x22, 0xad, 0x32, 0xa4, 0xfd, 0xd1, 0xe8, 0x5c, 0x83, 0x77, 0x96, 0xb6, 0x89, 0x6c, 0xe1, 0x94, 0xf7, 0x4a ],
-const [ 0xd4, 0x25, 0x46, 0x94, 0xca, 0x38, 0x67, 0x64, 0x04, 0xcc, 0x2c, 0xd6, 0xa4, 0x44, 0xf6, 0x1e, 0x23, 0x0c, 0x18, 0x8a, 0x9f, 0x92, 0xd4, 0xad, 0x76, 0x92, 0x87, 0xbc, 0x13, 0x97, 0x20, 0x38, 0x08, 0xbf, 0xd6, 0xcd, 0x5d, 0xbe, 0x1b, 0x7b ],
-const [ 0x61, 0xb8, 0x3d, 0x7f, 0xf9, 0xb8, 0x2b, 0x32, 0xa8, 0x92, 0x25, 0xea, 0xcd, 0x7c, 0x9c, 0x25, 0x80, 0x7c, 0x8d, 0xba, 0xc8, 0xcf, 0x56, 0x61, 0x0e, 0x88, 0xc8, 0x75, 0xd2, 0x79, 0x7d, 0xf9, 0x9d, 0x56, 0x6b, 0xda, 0x37, 0x18, 0xba, 0x73 ],
-const [ 0xad, 0xf1, 0x3d, 0x80, 0xee, 0xf1, 0x35, 0xf3, 0xcb, 0xfe, 0x63, 0xac, 0x19, 0xe8, 0x67, 0x9b, 0x98, 0xc0, 0x1d, 0xfd, 0x26, 0x3d, 0x72, 0xdb, 0x33, 0x5e, 0x76, 0xd4, 0x75, 0x51, 0xb3, 0x1d, 0xdd, 0x94, 0xbe, 0xc6, 0xc9, 0x5a, 0x0b, 0x3f ],
-const [ 0xf8, 0x70, 0xe2, 0x6d, 0xd4, 0x7b, 0x20, 0xd3, 0x86, 0xf6, 0x3d, 0x12, 0x45, 0x8c, 0x46, 0xd7, 0x95, 0xfe, 0x07, 0x90, 0xbd, 0xc8, 0x1d, 0x2e, 0x7c, 0x02, 0x53, 0x29, 0xf8, 0x84, 0x2b, 0xc5, 0xf7, 0x4d, 0xba, 0x95, 0x51, 0x26, 0xb9, 0x3d ],
-const [ 0xcd, 0x4f, 0x85, 0xa0, 0x44, 0xea, 0xf7, 0xc5, 0xa9, 0x85, 0x0d, 0x0d, 0x70, 0x8f, 0x09, 0x05, 0x04, 0x9d, 0xc2, 0x77, 0x18, 0x67, 0x9a, 0x8f, 0x37, 0x13, 0xaf, 0x3c, 0xa3, 0xb7, 0x56, 0xd9, 0x5c, 0x19, 0xc5, 0x0d, 0x7f, 0xb9, 0x0f, 0xf0 ],
-const [ 0xe6, 0xe9, 0x7a, 0x28, 0x6f, 0x57, 0x58, 0x55, 0xce, 0xc8, 0xa0, 0xf4, 0xd0, 0x63, 0x27, 0x92, 0x9d, 0x41, 0xf8, 0x1d, 0x3f, 0xda, 0xf9, 0xf6, 0x5e, 0xbd, 0xcc, 0x47, 0x4d, 0x85, 0xf4, 0x97, 0x4b, 0x08, 0x39, 0x9c, 0x02, 0xd1, 0x4d, 0x50 ],
-const [ 0xd7, 0x63, 0xc6, 0x36, 0x07, 0x63, 0x56, 0x1e, 0xd2, 0xbf, 0x47, 0x74, 0x90, 0x80, 0x54, 0x9b, 0x6e, 0x2d, 0xb8, 0x75, 0x14, 0xe1, 0xee, 0x1c, 0x85, 0xa0, 0xbb, 0xd3, 0x46, 0xeb, 0x6e, 0x3c, 0xc2, 0x92, 0x67, 0xcb, 0xed, 0xca, 0xd6, 0x7a ],
-const [ 0xa4, 0xb5, 0x40, 0x97, 0x1d, 0x9b, 0xdb, 0x20, 0xb4, 0x7e, 0x82, 0x82, 0xca, 0xc8, 0x41, 0xa8, 0x6f, 0xd9, 0x4f, 0xff, 0x27, 0xb4, 0xee, 0xcf, 0xee, 0xf8, 0x93, 0xcb, 0x7b, 0x13, 0x47, 0xe7, 0xc2, 0xb2, 0x4d, 0x69, 0xbc, 0x7b, 0x05, 0x43 ],
-const [ 0x97, 0x79, 0xd9, 0x12, 0x06, 0x42, 0x79, 0x7f, 0x17, 0x47, 0x02, 0x5d, 0x5b, 0x22, 0xb7, 0xac, 0x60, 0x7c, 0xab, 0x08, 0xe1, 0x75, 0x8f, 0x2f, 0x3a, 0x46, 0xc8, 0xbe, 0x1e, 0x25, 0xc5, 0x3b, 0x8c, 0x6a, 0x8f, 0x58, 0xff, 0xef, 0xa1, 0x76 ],
-const [ 0x09, 0x67, 0x5f, 0x2d, 0xcc, 0x47, 0x83, 0xb5, 0x99, 0xf1, 0x8f, 0xb7, 0x65, 0x58, 0x36, 0x68, 0xa0, 0xfd, 0x8a, 0xe4, 0x09, 0x6f, 0x6f, 0xcd, 0xc6, 0x0d, 0x4f, 0x35, 0xb4, 0x13, 0x0f, 0xbe, 0xfc, 0xd5, 0x42, 0xff, 0xe7, 0x45, 0x9d, 0x2a ],
-const [ 0xcf, 0xd4, 0xa4, 0x49, 0x10, 0xc9, 0xe5, 0x67, 0x50, 0x7a, 0xbb, 0x6c, 0xed, 0xe4, 0xfe, 0x60, 0x1a, 0x7a, 0x27, 0x65, 0xc9, 0x75, 0x5a, 0xa2, 0xcf, 0x6b, 0xa4, 0x81, 0x42, 0x23, 0x81, 0x1a, 0x26, 0xa8, 0xa1, 0xef, 0x49, 0x9c, 0xeb, 0xd9 ],
-const [ 0x54, 0x48, 0x99, 0x8f, 0x9d, 0x8f, 0x98, 0x53, 0x4a, 0xdd, 0xf0, 0xc8, 0xba, 0x63, 0x1c, 0x49, 0x6b, 0xf8, 0xa8, 0x00, 0x6c, 0xbb, 0x46, 0xad, 0x15, 0xfa, 0x1f, 0xa2, 0xf5, 0x53, 0x67, 0x12, 0x0c, 0x19, 0x34, 0x8c, 0x3a, 0xfa, 0x90, 0xc3 ],
-const [ 0x9d, 0xa0, 0xc1, 0x14, 0x68, 0x2f, 0x82, 0xc1, 0xd1, 0xe9, 0xb5, 0x44, 0x30, 0x58, 0x0b, 0x9c, 0x56, 0x94, 0x89, 0xca, 0x16, 0xb9, 0x2e, 0xe1, 0x04, 0x98, 0xd5, 0x5d, 0x7c, 0xad, 0x5d, 0xb5, 0xe6, 0x52, 0x06, 0x34, 0x39, 0x31, 0x1e, 0x04 ],
-const [ 0xaa, 0xaf, 0xd0, 0x8f, 0xd8, 0x9b, 0xeb, 0xe2, 0x39, 0xab, 0x65, 0xbb, 0x19, 0x0b, 0x86, 0xd4, 0x9c, 0x5d, 0x39, 0xfa, 0xa5, 0x0b, 0x11, 0x09, 0xf7, 0xdc, 0x8b, 0x17, 0x9b, 0xc6, 0x93, 0xf0, 0x81, 0x04, 0x49, 0xc3, 0x6a, 0x68, 0x04, 0x1a ],
-const [ 0xb0, 0x6f, 0x7c, 0xa7, 0xa5, 0xdd, 0x8b, 0xaf, 0x2c, 0xa9, 0x40, 0x81, 0x1e, 0xda, 0xd8, 0x7a, 0x33, 0xda, 0x66, 0x6d, 0xc4, 0x27, 0xbc, 0xf4, 0xd5, 0x4a, 0x8e, 0x03, 0x52, 0x0d, 0xd5, 0xc3, 0x99, 0xe9, 0x72, 0x9d, 0x39, 0xbe, 0x14, 0x94 ],
-const [ 0x2d, 0xff, 0x35, 0xc2, 0xfe, 0x50, 0x39, 0x12, 0x3d, 0x4c, 0x5d, 0x9f, 0xeb, 0x7d, 0x51, 0x67, 0xe3, 0xe9, 0x59, 0xb3, 0x18, 0x41, 0xab, 0xec, 0x1e, 0x5b, 0x18, 0xb0, 0xec, 0xe2, 0xef, 0x25, 0xe0, 0x4d, 0x1f, 0x8d, 0x03, 0x0d, 0x9b, 0x1b ],
-const [ 0x97, 0x94, 0xcf, 0x76, 0xae, 0xef, 0x22, 0x96, 0x3f, 0xa4, 0x0a, 0x09, 0xa8, 0x6b, 0xf0, 0xe2, 0xba, 0x9f, 0x54, 0xf3, 0x0f, 0x43, 0xbf, 0xf0, 0x9d, 0x44, 0xf9, 0xd2, 0x8c, 0xfd, 0x7b, 0x7a, 0x45, 0x00, 0x27, 0x97, 0xcc, 0x14, 0x37, 0xc9 ],
-const [ 0xc1, 0xd6, 0x08, 0x14, 0x37, 0x6a, 0xae, 0x39, 0xc4, 0x11, 0x12, 0x46, 0x35, 0x34, 0x85, 0x95, 0x8f, 0x95, 0x55, 0x8f, 0xa3, 0x8f, 0xfc, 0x14, 0xe4, 0xa0, 0x98, 0x1d, 0x76, 0x24, 0x9b, 0x9f, 0x87, 0x63, 0xc4, 0xb3, 0xe2, 0xce, 0x4e, 0xf5 ],
-const [ 0xca, 0x5f, 0x3e, 0xb9, 0x30, 0x86, 0x04, 0xf9, 0xfc, 0xc2, 0xaf, 0x1c, 0x6a, 0x31, 0x75, 0xcd, 0x8a, 0x75, 0x04, 0x55, 0x93, 0xb4, 0x73, 0xbd, 0x7a, 0xe3, 0x79, 0x33, 0xc3, 0x45, 0xdd, 0xb0, 0x98, 0x2e, 0x2d, 0xd7, 0x18, 0x0d, 0xb3, 0x1f ],
-const [ 0x80, 0x8d, 0x7a, 0xa9, 0xab, 0xa6, 0xa4, 0x0d, 0x1b, 0xc4, 0x3e, 0x9b, 0x93, 0x2e, 0xc8, 0xe9, 0x27, 0x3b, 0x89, 0x2f, 0xfc, 0x0a, 0x76, 0x9e, 0x4f, 0x72, 0x55, 0xf3, 0xb8, 0x3c, 0x22, 0x4b, 0xb0, 0x90, 0xb2, 0x39, 0x52, 0xae, 0x96, 0x16 ],
-const [ 0xd8, 0xb9, 0x94, 0xbb, 0x8d, 0xf0, 0x2d, 0x78, 0x03, 0xca, 0x2e, 0x09, 0xd6, 0x01, 0xb9, 0x18, 0xd6, 0xb5, 0xbd, 0xe9, 0x0b, 0x61, 0x1b, 0xeb, 0xf7, 0x0e, 0x07, 0x8d, 0x1a, 0xc7, 0xb1, 0x52, 0xbc, 0x4c, 0x25, 0x28, 0xe6, 0x0b, 0x70, 0xf6 ],
-const [ 0xa8, 0x9b, 0xba, 0xa8, 0x6a, 0x33, 0x99, 0x51, 0xdd, 0xcd, 0x37, 0x79, 0x9e, 0x21, 0xb5, 0xd1, 0x68, 0x8e, 0x4a, 0xbe, 0xdb, 0xc7, 0x2d, 0xaf, 0x7c, 0xc9, 0xb5, 0xad, 0xfe, 0x10, 0xbe, 0x34, 0xc0, 0x0a, 0x50, 0x41, 0x96, 0xcc, 0x7b, 0xac ],
-const [ 0xa9, 0x56, 0x0f, 0xd6, 0x17, 0x46, 0xd7, 0xf9, 0x86, 0xb6, 0x91, 0xf0, 0x70, 0xc9, 0x20, 0x25, 0x6a, 0x53, 0x5c, 0x21, 0xa6, 0x4a, 0xb5, 0xa2, 0xbd, 0x77, 0x1a, 0xee, 0xab, 0x71, 0x19, 0x68, 0x1b, 0xcc, 0x47, 0x61, 0xe6, 0x8e, 0xe2, 0x30 ],
-const [ 0xf9, 0x87, 0xeb, 0x83, 0xa3, 0xfd, 0x6d, 0x94, 0xeb, 0xf3, 0x62, 0x6b, 0x7d, 0x34, 0xfe, 0xc2, 0x3e, 0xe0, 0x6c, 0x63, 0xdf, 0xb4, 0x07, 0x8c, 0xb3, 0x8b, 0xcc, 0x97, 0xbd, 0x25, 0x0f, 0xda, 0x0e, 0x28, 0x6e, 0xcd, 0x4e, 0x64, 0x04, 0x6a, 0x98, 0x5b, 0xdf, 0xda, 0x8b ],
-const [ 0xef, 0x25, 0x71, 0x32, 0xb7, 0xbe, 0x12, 0x4e, 0xa0, 0x88, 0x6d, 0x58, 0x77, 0x65, 0xe8, 0xe7, 0x03, 0x57, 0x95, 0x9c, 0xf3, 0x9e, 0xbf, 0x62, 0x14, 0x20, 0xc3, 0xf3, 0xc7, 0x0e, 0x21, 0x9f, 0xb3, 0xc5, 0xd3, 0x49, 0xb7, 0xf2, 0xde, 0xb2, 0x22, 0xfa, 0x26, 0xfa, 0x27 ],
-const [ 0x2c, 0xb8, 0xe2, 0x69, 0x72, 0x6b, 0x75, 0xe3, 0xa6, 0x25, 0x85, 0x41, 0x25, 0x1f, 0x6e, 0x3c, 0x51, 0x84, 0xc5, 0xe6, 0x87, 0x8d, 0xec, 0xea, 0x51, 0xea, 0xe3, 0x15, 0xdc, 0x65, 0x61, 0x15, 0xac, 0xc2, 0x24, 0x81, 0x8e, 0xe9, 0x85, 0x1a, 0xce, 0x47, 0x4f, 0x51, 0xab ],
-const [ 0x1e, 0xea, 0x90, 0x6c, 0xa1, 0x14, 0x32, 0x65, 0x57, 0x50, 0xa4, 0xe1, 0xaf, 0x21, 0xeb, 0x1e, 0x03, 0x46, 0x5c, 0x6d, 0x6f, 0x3b, 0x0f, 0xd8, 0xe2, 0x03, 0x91, 0x07, 0x75, 0x25, 0xd9, 0x65, 0xfc, 0xf5, 0x7d, 0x7e, 0xdb, 0x14, 0x26, 0xab, 0x1c, 0x3a, 0x42, 0xf2, 0xbe ],
-const [ 0xb2, 0xf1, 0xad, 0xfb, 0xbd, 0xe4, 0xdd, 0x9a, 0x96, 0x74, 0x16, 0x6e, 0xe0, 0x8c, 0x2f, 0x43, 0x41, 0x07, 0x24, 0x75, 0xb9, 0xb8, 0x0b, 0x10, 0x32, 0xad, 0x4a, 0x36, 0x58, 0xb4, 0x08, 0xc1, 0xaa, 0x1f, 0xe1, 0x2a, 0xd1, 0xc5, 0xde, 0xaa, 0x31, 0x49, 0xa4, 0x9e, 0xbf ],
-const [ 0xa2, 0x61, 0x72, 0x06, 0xe2, 0xb3, 0x82, 0x07, 0x8f, 0xdd, 0xb0, 0xaf, 0x37, 0x43, 0xa6, 0x9a, 0x5a, 0x74, 0x84, 0xee, 0xcf, 0xff, 0x6c, 0xd9, 0x62, 0x88, 0x44, 0x3b, 0xc2, 0x1a, 0xb7, 0x9f, 0x9b, 0xbf, 0x7d, 0x70, 0xff, 0x4e, 0xdd, 0x6a, 0x0a, 0x85, 0x70, 0x4e, 0xc6 ],
-const [ 0x7a, 0xf1, 0x97, 0xb7, 0x8a, 0x27, 0x03, 0x8b, 0x0c, 0xec, 0x12, 0x80, 0x01, 0xce, 0x6b, 0xb7, 0xdc, 0x02, 0xc0, 0x25, 0x89, 0x56, 0xf6, 0x2e, 0xad, 0x67, 0x86, 0x76, 0x30, 0x14, 0x23, 0xf4, 0xf9, 0x32, 0x9d, 0x48, 0xf8, 0x81, 0x05, 0x4e, 0x6a, 0xdf, 0x12, 0xf3, 0x58 ],
-const [ 0x96, 0xab, 0x1d, 0x64, 0xac, 0xad, 0x8c, 0xf6, 0x96, 0x51, 0xc1, 0x3e, 0x4e, 0xb4, 0x2d, 0x73, 0x82, 0xe3, 0x80, 0x19, 0xf3, 0xa9, 0x27, 0x77, 0x1b, 0xa6, 0x13, 0x4c, 0x12, 0xa1, 0xbd, 0xbe, 0xb2, 0x20, 0x67, 0x93, 0xfa, 0x35, 0xa4, 0xa3, 0xb0, 0x9a, 0x1a, 0x8d, 0x4a ],
-const [ 0x58, 0x2c, 0x13, 0xa6, 0xc4, 0xd4, 0x97, 0xe4, 0xed, 0xf6, 0x9b, 0xde, 0x35, 0xbe, 0xaa, 0xba, 0xba, 0x1b, 0x06, 0x8e, 0xd1, 0x68, 0xaf, 0x20, 0xb0, 0x4c, 0xc2, 0xf0, 0x6a, 0xdf, 0x04, 0x78, 0x21, 0x0e, 0xbf, 0xb2, 0x76, 0x40, 0xcd, 0xdb, 0x45, 0x3a, 0xf2, 0x77, 0x90 ],
-const [ 0xba, 0xf1, 0xd8, 0xaa, 0x12, 0xf5, 0xea, 0x62, 0x64, 0xd1, 0x22, 0x93, 0x85, 0x93, 0xa8, 0xd6, 0x77, 0xc8, 0x2a, 0x37, 0xeb, 0xed, 0x7b, 0x43, 0x04, 0x26, 0x80, 0x62, 0x5e, 0x33, 0x4c, 0x67, 0x4f, 0x9f, 0x8a, 0x66, 0x6c, 0x3a, 0x1b, 0xc5, 0x4f, 0xca, 0x01, 0x96, 0x98 ],
-const [ 0x73, 0x5d, 0x94, 0x3c, 0xc9, 0x3f, 0x78, 0x30, 0x50, 0xc7, 0xcc, 0xb0, 0x9a, 0xcc, 0x5a, 0x6f, 0x60, 0xaf, 0x4e, 0xfb, 0xc8, 0x91, 0x97, 0x93, 0xe7, 0xc3, 0x90, 0x38, 0x85, 0x7e, 0xe0, 0x06, 0x21, 0xd5, 0x9f, 0xc5, 0x35, 0xe7, 0xba, 0xbc, 0xbc, 0x59, 0x98, 0xc5, 0xf0 ],
-const [ 0xc7, 0x82, 0x59, 0x71, 0x41, 0xb5, 0x21, 0x35, 0xe3, 0x4d, 0x24, 0x0d, 0xf6, 0x7b, 0x9b, 0xdc, 0x27, 0x4f, 0x2d, 0x41, 0xe6, 0x86, 0x6e, 0x0f, 0x0d, 0xa3, 0xa6, 0xfe, 0xc2, 0x41, 0xd3, 0xa0, 0x9e, 0xa7, 0xf1, 0x96, 0x0f, 0x9d, 0x78, 0x03, 0xfa, 0x7e, 0x27, 0x41, 0xa5 ],
-const [ 0x49, 0x85, 0x84, 0xe3, 0x64, 0xf6, 0x32, 0x18, 0x4b, 0xf2, 0x6a, 0x25, 0x3d, 0x0e, 0x81, 0xe1, 0x46, 0x73, 0x09, 0x63, 0xb7, 0x85, 0xea, 0xc1, 0xd5, 0xc2, 0xb5, 0x1d, 0xce, 0xec, 0x34, 0xe3, 0xf1, 0x6a, 0x46, 0x4c, 0x1d, 0xec, 0xe9, 0x27, 0x7a, 0x4e, 0x99, 0xd8, 0x68 ],
-const [ 0xe4, 0x29, 0x84, 0x64, 0xa0, 0x45, 0x7d, 0xcf, 0x98, 0xef, 0x09, 0xcc, 0x00, 0xd9, 0x22, 0x38, 0xd0, 0x6d, 0x9a, 0x75, 0x74, 0xb4, 0x67, 0x69, 0xc5, 0x77, 0x3e, 0xc9, 0x39, 0xa4, 0x63, 0x97, 0x56, 0xf2, 0xbf, 0xe9, 0x6d, 0xc8, 0x33, 0xed, 0x84, 0x5c, 0x2c, 0x2a, 0x94 ],
-const [ 0x28, 0xae, 0x9e, 0x32, 0x79, 0x11, 0xb7, 0x68, 0x98, 0xaf, 0x1f, 0xa0, 0xde, 0x56, 0x06, 0x9e, 0x0d, 0x8b, 0x67, 0xbd, 0x28, 0x13, 0x82, 0x8f, 0x87, 0xb8, 0x8d, 0xc4, 0x2a, 0x49, 0xa7, 0x4d, 0x4e, 0xe3, 0x0d, 0xc1, 0x3e, 0x6f, 0x90, 0xff, 0x6c, 0x6c, 0x47, 0x15, 0xc0 ],
-const [ 0x91, 0x17, 0xcf, 0x3c, 0xe9, 0xf5, 0xc6, 0xe1, 0x97, 0x52, 0xbf, 0x0b, 0x1c, 0xf8, 0x6a, 0x78, 0xce, 0x3a, 0xdb, 0xba, 0x87, 0xda, 0xe1, 0x39, 0x9a, 0x2a, 0x93, 0x7b, 0x0b, 0x72, 0x2b, 0xa3, 0xff, 0x92, 0x18, 0x38, 0x71, 0xe8, 0x4e, 0x28, 0x27, 0x74, 0xe1, 0x0d, 0xe4 ],
-const [ 0x36, 0x3b, 0x32, 0xac, 0xcf, 0xa5, 0x93, 0xe4, 0x54, 0xcc, 0x3e, 0xc8, 0x3b, 0x9d, 0x77, 0x5a, 0x0d, 0xd0, 0x27, 0xb0, 0x17, 0xca, 0x2f, 0xf8, 0x63, 0xc1, 0xfc, 0xb9, 0xe6, 0x21, 0x5b, 0x5c, 0xfb, 0x2e, 0x8f, 0xea, 0x10, 0xeb, 0xa2, 0x17, 0x9f, 0x3b, 0xf8, 0x80, 0x61 ],
-const [ 0x13, 0x4a, 0x50, 0xab, 0xff, 0xc9, 0x4d, 0x85, 0x40, 0xd7, 0xec, 0x93, 0x9b, 0x7a, 0x28, 0xb1, 0x09, 0x16, 0xe5, 0x05, 0xad, 0x90, 0x84, 0x3d, 0x08, 0xb4, 0xb5, 0x17, 0x70, 0xd4, 0x8c, 0x27, 0xbe, 0xb2, 0xd8, 0xd5, 0x48, 0xa1, 0xb0, 0xa5, 0x0f, 0xe6, 0x4e, 0xbb, 0x39 ],
-const [ 0xc8, 0x3e, 0xad, 0x9a, 0x13, 0x1a, 0x1d, 0x7d, 0x12, 0x6b, 0x88, 0x64, 0x22, 0x21, 0xec, 0xe7, 0xd3, 0xa6, 0xdd, 0xd6, 0x01, 0x6e, 0xcc, 0x6f, 0x40, 0xd0, 0x89, 0xd4, 0x7e, 0x14, 0x07, 0xbc, 0xe3, 0xcd, 0x60, 0x68, 0xfc, 0x69, 0x18, 0xd9, 0x19, 0x06, 0xa6, 0x40, 0xf3 ],
-const [ 0x43, 0x0a, 0x7d, 0xbd, 0x62, 0xb3, 0xb3, 0xcb, 0x6a, 0x4b, 0x20, 0x24, 0xbd, 0x79, 0x60, 0x48, 0xea, 0x60, 0x99, 0x0d, 0x82, 0x22, 0xf9, 0x42, 0x28, 0xa2, 0x60, 0x93, 0xe8, 0x8f, 0x59, 0xac, 0xca, 0x9e, 0x4f, 0xa2, 0xa6, 0x16, 0xfe, 0x8e, 0x39, 0x92, 0x27, 0x7b, 0x79 ],
-const [ 0x49, 0x53, 0x40, 0x8b, 0xe3, 0xdd, 0xde, 0x42, 0x52, 0x1e, 0xb6, 0x25, 0xa3, 0x7a, 0xf0, 0xd2, 0xcf, 0x9e, 0xd1, 0x84, 0xf5, 0xb6, 0x27, 0xe5, 0xe7, 0xe0, 0xe8, 0x24, 0xe8, 0xe1, 0x16, 0x48, 0xb4, 0x18, 0xe5, 0xc4, 0xc1, 0xb0, 0x20, 0x4b, 0xc5, 0x19, 0xc9, 0xe5, 0x78 ],
-const [ 0xda, 0x6d, 0x09, 0x68, 0x26, 0x10, 0xd2, 0x3a, 0x66, 0x6a, 0xb7, 0xf6, 0x31, 0x47, 0xa1, 0xf0, 0x5d, 0xb8, 0xb3, 0xcf, 0xc2, 0xc1, 0x2d, 0xe3, 0x41, 0x52, 0x90, 0xb9, 0x06, 0x78, 0x03, 0xec, 0x09, 0xd5, 0xf5, 0x3d, 0xdb, 0x4e, 0x04, 0xe6, 0x9f, 0x03, 0x1d, 0x2c, 0x56 ],
-const [ 0x22, 0xf6, 0xc7, 0xdd, 0xb0, 0xe4, 0x6e, 0xcf, 0x62, 0x7a, 0xeb, 0xd9, 0xff, 0xad, 0x6f, 0x36, 0x68, 0x2e, 0xf5, 0xc9, 0x87, 0x91, 0xd2, 0x5e, 0x82, 0xaf, 0x8d, 0x33, 0x34, 0x49, 0xf0, 0xb7, 0xdd, 0xee, 0x5f, 0x91, 0x18, 0x1e, 0x69, 0xe4, 0x0e, 0xaf, 0x9d, 0xd1, 0xea ],
-const [ 0x2e, 0x2b, 0x99, 0x92, 0x90, 0xc9, 0xb4, 0xa3, 0x76, 0x0c, 0x4b, 0xf7, 0x67, 0xae, 0x44, 0xb2, 0x8a, 0x8d, 0x12, 0x46, 0x15, 0x52, 0xcd, 0x39, 0x09, 0x50, 0x88, 0x29, 0x1d, 0xaf, 0xdf, 0x0d, 0xf7, 0xc9, 0xcf, 0xbd, 0xa2, 0xd4, 0xcb, 0xb5, 0x3d, 0xc2, 0x0b, 0x15, 0xf0 ],
-const [ 0x08, 0x9a, 0xa3, 0x7f, 0x72, 0xb2, 0x96, 0x2c, 0x18, 0xfa, 0x4e, 0x98, 0x58, 0xeb, 0xac, 0x2f, 0xc1, 0x65, 0x5f, 0xf4, 0x1b, 0xa3, 0x07, 0x15, 0xa7, 0x6d, 0x9a, 0xc3, 0xa8, 0x8f, 0x07, 0x40, 0x21, 0x8b, 0x1a, 0x3a, 0xe1, 0x8b, 0xa0, 0x57, 0xbd, 0x99, 0xcb, 0x11, 0x1d ],
-const [ 0x4e, 0x1a, 0xd1, 0x05, 0x4c, 0x00, 0xb6, 0xcd, 0xd0, 0x26, 0x77, 0x39, 0xc8, 0xc9, 0x29, 0x94, 0xa4, 0xaf, 0x4b, 0xf3, 0x73, 0xba, 0x06, 0x6c, 0x48, 0xbc, 0xb4, 0x83, 0xe3, 0x8d, 0xa0, 0xe5, 0x8d, 0x5b, 0x0c, 0x59, 0x44, 0x42, 0x79, 0xf3, 0x18, 0x1c, 0x22, 0x8a, 0xd5 ],
-const [ 0x36, 0xe8, 0x12, 0x83, 0x55, 0xa3, 0xdc, 0x7a, 0xb3, 0xfc, 0xb2, 0x8f, 0xe9, 0x3c, 0x8e, 0x69, 0x50, 0x66, 0x33, 0x4f, 0x66, 0x10, 0xb3, 0x98, 0x73, 0x72, 0x33, 0x62, 0x6c, 0xbd, 0xf2, 0x87, 0x17, 0xae, 0x88, 0xcd, 0x70, 0x62, 0x6c, 0x5d, 0x4c, 0x6c, 0xb9, 0x77, 0x3c ],
-const [ 0xff, 0x46, 0x9d, 0x80, 0xd2, 0xdb, 0xef, 0x99, 0x9d, 0x7d, 0x48, 0x15, 0xd1, 0x23, 0xcf, 0x50, 0xee, 0x9c, 0x2c, 0x23, 0xfa, 0x2e, 0x9a, 0xab, 0x2c, 0x7e, 0x3d, 0x4c, 0xe8, 0xaf, 0xb7, 0xf5, 0xf0, 0xce, 0xf6, 0xa5, 0xd8, 0x6e, 0x4f, 0x2e, 0xba, 0x8f, 0xd1, 0x39, 0x2c ],
-const [ 0x93, 0xfd, 0x8e, 0x20, 0x8a, 0x1d, 0x60, 0x52, 0x38, 0x86, 0x11, 0xbe, 0xb9, 0xf0, 0x47, 0xfe, 0x91, 0xe3, 0x3a, 0xfd, 0x4b, 0xcd, 0x74, 0xae, 0x61, 0x52, 0xd5, 0xfe, 0x5c, 0xe3, 0xd9, 0x07, 0x3c, 0x92, 0x1e, 0x86, 0x1a, 0x24, 0x20, 0x8f, 0x0c, 0x68, 0x47, 0x7f, 0x49 ],
-const [ 0xf1, 0x89, 0xba, 0xee, 0xec, 0x50, 0x7e, 0x94, 0x5f, 0x0c, 0x4d, 0x62, 0x8a, 0x0d, 0x05, 0x48, 0xee, 0xdf, 0xd2, 0x54, 0xb1, 0x1f, 0xaf, 0x25, 0x45, 0x8e, 0x29, 0xa3, 0x45, 0x64, 0x66, 0xed, 0x9f, 0xe7, 0x67, 0x93, 0xf8, 0x3b, 0x8a, 0x06, 0x4c, 0x7c, 0x53, 0x4c, 0xd5 ],
-const [ 0xb7, 0x63, 0x26, 0x3d, 0xc4, 0xfc, 0x62, 0xb2, 0x27, 0xcd, 0x3f, 0x6b, 0x4e, 0x9e, 0x35, 0x8c, 0x21, 0xca, 0x03, 0x6c, 0xe3, 0x96, 0xab, 0x92, 0x59, 0xc1, 0xbe, 0xdd, 0x2f, 0x5c, 0xd9, 0x02, 0x97, 0xdc, 0x70, 0x3c, 0x33, 0x6e, 0xca, 0x3e, 0x35, 0x8a, 0x4d, 0x6d, 0xc5 ],
-const [ 0x9f, 0xe4, 0x2d, 0xfa, 0xc9, 0x2a, 0x4a, 0x13, 0x6f, 0xa7, 0xc9, 0xf6, 0xe3, 0x31, 0xb5, 0xd3, 0xa6, 0x1a, 0xa7, 0x30, 0x35, 0xb5, 0x3a, 0x8d, 0x25, 0x17, 0xbe, 0x43, 0x72, 0x1b, 0x31, 0xb2, 0x15, 0xa9, 0x6b, 0x9b, 0xd4, 0x37, 0x98, 0xcb, 0x5e, 0x8f, 0xeb, 0xfa, 0x97 ],
-const [ 0x98, 0xff, 0xf7, 0xb5, 0xf7, 0x73, 0x26, 0xc2, 0x44, 0x71, 0xbb, 0x9c, 0x31, 0x74, 0x90, 0xbe, 0x1f, 0xeb, 0xad, 0x28, 0xe2, 0xe8, 0x25, 0xaf, 0xc4, 0x1c, 0x3b, 0x97, 0xcc, 0x03, 0xc9, 0x63, 0x40, 0x5c, 0xe3, 0xec, 0x68, 0xdc, 0xb7, 0xb1, 0x95, 0x23, 0xb7, 0x6e, 0x62 ],
-const [ 0x8d, 0x64, 0x9e, 0x5c, 0xcb, 0xb8, 0xbb, 0x00, 0x32, 0xcd, 0xdd, 0xbb, 0xe4, 0x4e, 0xd0, 0xb5, 0xbb, 0xbd, 0xe7, 0x8a, 0x30, 0xc0, 0xf8, 0x43, 0x7b, 0xbc, 0xa9, 0x85, 0xfc, 0xa5, 0xea, 0x08, 0xda, 0x15, 0xc3, 0x4b, 0xea, 0x9b, 0x50, 0x86, 0xd2, 0x55, 0x0a, 0xe1, 0x6e ],
-const [ 0x57, 0x95, 0x8d, 0x7e, 0x4c, 0x73, 0xfa, 0x60, 0x6e, 0xf4, 0x05, 0xd7, 0x7e, 0xa4, 0x97, 0x7a, 0xc9, 0x6b, 0x88, 0x13, 0xfc, 0x12, 0x10, 0x48, 0x3a, 0x03, 0x7e, 0x7b, 0x6c, 0x50, 0x2c, 0xee, 0xd8, 0xf7, 0xb2, 0x2b, 0xf6, 0x65, 0x5a, 0xa3, 0x7e, 0x38, 0xd4, 0x95, 0xc6 ],
-const [ 0x6d, 0x32, 0xba, 0x0c, 0x06, 0x37, 0x74, 0xbf, 0x8d, 0x06, 0x21, 0xb2, 0x08, 0xd7, 0x20, 0x95, 0xf6, 0x84, 0xfa, 0xa3, 0x3c, 0xa6, 0xf3, 0xdc, 0x62, 0xfb, 0xdf, 0x95, 0xff, 0x0c, 0x37, 0x33, 0x72, 0x0c, 0x6c, 0x34, 0xd3, 0x02, 0x7b, 0x6f, 0x2a, 0x2b, 0xc2, 0x9c, 0xde ],
-const [ 0x6b, 0x97, 0x47, 0x8f, 0xda, 0xfd, 0x3a, 0x85, 0xd0, 0xd9, 0xb3, 0x39, 0x97, 0x1a, 0x70, 0xc2, 0xfd, 0x24, 0xd5, 0x42, 0xab, 0xd3, 0xe2, 0x0e, 0xb2, 0xbd, 0x63, 0x0f, 0x67, 0xb8, 0x66, 0x68, 0x71, 0x9d, 0xf2, 0x58, 0x20, 0x4b, 0xf6, 0x62, 0x01, 0xee, 0x80, 0xac, 0xaf ],
-const [ 0x89, 0xc7, 0x7d, 0x79, 0xde, 0x98, 0xdf, 0x18, 0xf0, 0xcf, 0x29, 0xa9, 0x31, 0x6d, 0x6d, 0xc4, 0x6b, 0x61, 0xeb, 0x7a, 0xf7, 0xf1, 0xe2, 0xde, 0x2f, 0x5c, 0xa6, 0xc5, 0x25, 0xbe, 0xf3, 0xc9, 0x96, 0x33, 0x81, 0x94, 0x19, 0x3f, 0xd8, 0x5b, 0x9c, 0x6e, 0x66, 0xa8, 0x11 ],
-const [ 0x08, 0xcc, 0xe7, 0xd7, 0xf3, 0xcc, 0xea, 0x02, 0x12, 0xcf, 0x02, 0x99, 0xf2, 0x7f, 0x3d, 0x3f, 0x39, 0x3a, 0x97, 0xd3, 0xdd, 0x71, 0xca, 0xf1, 0x95, 0x4e, 0x67, 0xbc, 0x8d, 0x9a, 0x26, 0xdb, 0x5e, 0xdd, 0x7a, 0xc2, 0x3d, 0xc7, 0x69, 0x33, 0x72, 0xce, 0x9b, 0x04, 0x0d ],
-const [ 0x1a, 0x2e, 0x86, 0xf6, 0xab, 0x2d, 0xb2, 0x35, 0xe5, 0xd7, 0xf0, 0x0c, 0xf4, 0x38, 0x68, 0x0f, 0xe5, 0xb4, 0x42, 0xdc, 0xb1, 0xf8, 0xc3, 0xae, 0x77, 0x30, 0xb9, 0x2f, 0x09, 0x7a, 0x1a, 0x8e, 0xaa, 0x9b, 0xe8, 0xd2, 0x16, 0xf2, 0x57, 0x6e, 0xc3, 0xaa, 0x32, 0x15, 0x67 ],
-const [ 0x32, 0x70, 0xb4, 0xe4, 0x8d, 0x57, 0x5f, 0x03, 0x12, 0x65, 0x9a, 0x62, 0x02, 0xad, 0xbc, 0x4e, 0x87, 0x7d, 0x69, 0x29, 0x8d, 0xe4, 0x09, 0x0e, 0xd4, 0x72, 0x78, 0xb4, 0x43, 0x3f, 0xff, 0x95, 0x80, 0x2e, 0x84, 0x4f, 0xbd, 0x73, 0xfd, 0x4a, 0xd5, 0x53, 0x2b, 0x9b, 0x97 ],
-const [ 0xc7, 0x04, 0xd5, 0x79, 0x35, 0x39, 0xef, 0x39, 0x09, 0xbd, 0xaa, 0x7c, 0x29, 0xe9, 0xc0, 0xa0, 0xc4, 0x41, 0x81, 0x4c, 0x37, 0xbc, 0xd0, 0x62, 0x32, 0x5f, 0x6e, 0x2e, 0x16, 0x10, 0x7b, 0xe4, 0xa2, 0xaa, 0x39, 0x49, 0xcf, 0x4d, 0x14, 0xb0, 0xf8, 0xf8, 0xdf, 0x28, 0x3e ],
-const [ 0x5b, 0x2c, 0xce, 0xd4, 0x70, 0x45, 0xbc, 0xa4, 0x75, 0x12, 0xfe, 0x22, 0x6c, 0x1f, 0x41, 0x5e, 0xf1, 0x27, 0xa2, 0x09, 0xbf, 0x88, 0x5b, 0x8a, 0x76, 0xf5, 0xa2, 0x4f, 0x9c, 0x6b, 0xce, 0x61, 0xe1, 0x66, 0xbc, 0x3c, 0xa7, 0x54, 0x71, 0xdd, 0xc1, 0x4a, 0x00, 0x1c, 0x7b ],
-const [ 0x0d, 0x4d, 0xd3, 0x5f, 0x90, 0xf0, 0xa1, 0x0d, 0x7d, 0x80, 0x30, 0xe9, 0x91, 0x94, 0x46, 0xf3, 0xd5, 0xe2, 0x53, 0x24, 0x72, 0xbc, 0xef, 0x0c, 0xc5, 0xdb, 0x84, 0xba, 0xb6, 0x5c, 0x48, 0xdc, 0x46, 0x08, 0x6f, 0x27, 0x68, 0xd8, 0x9e, 0xf9, 0x12, 0xb8, 0xa2, 0x3d, 0x93 ],
-const [ 0x5e, 0xf9, 0x46, 0xb6, 0x4f, 0xf8, 0x0e, 0x4d, 0xf8, 0xee, 0x98, 0xa3, 0x57, 0xf0, 0x7c, 0x82, 0x5c, 0x3a, 0xcc, 0x43, 0x4d, 0x0f, 0x99, 0x40, 0x69, 0xc0, 0xb8, 0x8c, 0xcc, 0x0a, 0xc5, 0xe1, 0x92, 0xa4, 0x69, 0xd9, 0x3f, 0x19, 0xd9, 0x61, 0x5f, 0xd4, 0x9f, 0x6b, 0x69 ],
-const [ 0x79, 0xf8, 0x77, 0x34, 0xc4, 0x6c, 0x5a, 0x11, 0xd8, 0x6a, 0xed, 0xea, 0xd2, 0x2e, 0xd3, 0xea, 0x01, 0x57, 0x7a, 0xd4, 0xec, 0xdf, 0x42, 0x96, 0x96, 0x50, 0xe1, 0x20, 0x00, 0x35, 0x06, 0x76, 0xf0, 0xcf, 0x3c, 0x04, 0xf1, 0x0a, 0x11, 0x33, 0x9b, 0xaf, 0x78, 0x39, 0x14, 0xdb, 0x6d, 0x35, 0xd7, 0xb0, 0xd7, 0x7b, 0xb4, 0x4a, 0xb2, 0x2c, 0x18, 0xf5, 0x6d, 0x0b, 0x8f, 0x9d, 0x91, 0x8b ],
-const [ 0xea, 0xe2, 0x55, 0xd9, 0xe0, 0x83, 0x26, 0x8f, 0x89, 0x64, 0x29, 0xce, 0x36, 0x64, 0x55, 0x02, 0xaf, 0xf9, 0xdb, 0xea, 0xca, 0x71, 0x59, 0xf9, 0x3c, 0x7d, 0x51, 0xfd, 0xae, 0xef, 0xdb, 0xfe, 0x14, 0xc3, 0x96, 0x69, 0x3a, 0x5c, 0xe4, 0x6e, 0x9f, 0x11, 0x57, 0xa6, 0x87, 0xe8, 0x66, 0xf9, 0x4c, 0xa1, 0x65, 0xbf, 0xf5, 0xf7, 0xb4, 0x25, 0x09, 0x22, 0x36, 0xd2, 0xa6, 0xa0, 0x04, 0xcb ],
-const [ 0x42, 0x52, 0x1b, 0xc3, 0xf1, 0x68, 0xb2, 0xb3, 0x43, 0x4c, 0xb4, 0xe4, 0x4d, 0x92, 0xf5, 0x26, 0xb4, 0x1c, 0x5f, 0x10, 0xbf, 0xe0, 0xa0, 0xe6, 0xb0, 0xeb, 0x20, 0xc0, 0x55, 0xa6, 0x36, 0xe9, 0xda, 0x59, 0x9b, 0x86, 0xe1, 0xed, 0x1f, 0x78, 0xd4, 0xf6, 0x9a, 0x83, 0x7a, 0xf1, 0x26, 0xaf, 0xc9, 0xc9, 0x8b, 0xee, 0xfc, 0xa1, 0xfb, 0x00, 0xe5, 0xcd, 0x00, 0x94, 0x83, 0x21, 0xb2, 0xb0 ],
-const [ 0x81, 0xb5, 0xf1, 0x2a, 0x64, 0xf3, 0xc3, 0x47, 0x90, 0x25, 0x49, 0xa1, 0xfa, 0xbd, 0x39, 0xea, 0x1d, 0x9e, 0xfe, 0xab, 0xed, 0x38, 0x51, 0x88, 0x0d, 0xf4, 0x0d, 0xc5, 0x41, 0xd2, 0x3f, 0x09, 0x26, 0x50, 0x7d, 0x62, 0x21, 0x8f, 0x7a, 0x8a, 0x95, 0xb1, 0xd7, 0x69, 0x59, 0x85, 0x3b, 0xda, 0x69, 0x66, 0xa5, 0xb2, 0xdb, 0x60, 0x01, 0xff, 0x15, 0x95, 0xfa, 0x8d, 0x3e, 0xdf, 0x10, 0xaf ],
-const [ 0x34, 0xf5, 0xd2, 0x8d, 0x58, 0x36, 0x4d, 0xa4, 0xb9, 0x5a, 0x48, 0xc0, 0x7e, 0x01, 0xb0, 0xa9, 0x9c, 0x5a, 0xce, 0x17, 0x3f, 0xf2, 0xc9, 0x21, 0x6b, 0xc9, 0x6d, 0xf8, 0xe3, 0xab, 0x2a, 0xd5, 0x4a, 0xbd, 0x60, 0x30, 0x88, 0x57, 0xda, 0x33, 0x6f, 0x11, 0x98, 0x6e, 0x9f, 0x21, 0xd1, 0xcc, 0xa6, 0xe4, 0x38, 0xc6, 0x6c, 0xba, 0x7f, 0xd6, 0xcf, 0x17, 0x19, 0x2f, 0x8a, 0xd7, 0x45, 0xab ],
-const [ 0xce, 0xc8, 0x28, 0x0c, 0x87, 0x17, 0x0f, 0x1d, 0x48, 0x36, 0xcd, 0xd7, 0x7a, 0xbb, 0x2a, 0x34, 0x41, 0x0b, 0x8d, 0x53, 0x51, 0xd9, 0x6d, 0x1a, 0x03, 0xe9, 0x09, 0x20, 0xa7, 0x1a, 0x59, 0xca, 0x1c, 0xa3, 0x44, 0xb4, 0x9f, 0x9d, 0x13, 0x52, 0xe1, 0xc2, 0x26, 0xd7, 0x5c, 0x74, 0xe5, 0x55, 0xe6, 0x01, 0xfa, 0x26, 0x87, 0x25, 0xbe, 0x8c, 0x88, 0xd0, 0xf0, 0x94, 0xcc, 0x2a, 0xad, 0x40 ],
-const [ 0x9f, 0x65, 0xa4, 0x26, 0x10, 0x6d, 0xb9, 0x9d, 0xcb, 0x21, 0x30, 0xbe, 0x14, 0x83, 0x92, 0x41, 0xd4, 0xa9, 0x2c, 0x8b, 0xec, 0xc1, 0x08, 0xd2, 0xc9, 0x52, 0x1b, 0x82, 0x38, 0xc5, 0xc0, 0xdf, 0x7c, 0x23, 0x65, 0xec, 0x9f, 0x20, 0x84, 0x8c, 0x05, 0x59, 0xd6, 0xe8, 0x47, 0xda, 0xc3, 0x10, 0x3e, 0xe3, 0x1c, 0xe5, 0x5d, 0xec, 0x0c, 0x36, 0x44, 0xe6, 0x4c, 0x29, 0x93, 0xc4, 0x97, 0xdd ],
-const [ 0x2e, 0xdc, 0x66, 0xbc, 0xca, 0x9f, 0x99, 0xee, 0x13, 0x66, 0x99, 0x2f, 0xd0, 0xf0, 0xf9, 0x54, 0xd3, 0xd4, 0xc5, 0xca, 0x21, 0x15, 0xc2, 0xd0, 0x53, 0xf6, 0xf8, 0xe3, 0x3c, 0x0f, 0x6e, 0x7a, 0xcc, 0xa1, 0x35, 0xf4, 0x34, 0x27, 0xa7, 0xcf, 0x4b, 0x2d, 0xf1, 0x1a, 0x31, 0x65, 0xcf, 0x2d, 0x32, 0xf8, 0x97, 0x97, 0xed, 0x1a, 0x79, 0x58, 0xb5, 0xe1, 0x05, 0x51, 0x37, 0x57, 0xed, 0xf8 ],
-const [ 0xf9, 0x87, 0xeb, 0x83, 0xa3, 0xfd, 0x6d, 0x94, 0xeb, 0xf3, 0x62, 0x6b, 0x7d, 0x34, 0xfe, 0xc2, 0x3e, 0xe0, 0x6c, 0x63, 0xdf, 0xb4, 0x07, 0x8c, 0xb3, 0x8b, 0xcc, 0x97, 0xbd, 0x25, 0x0f, 0xda, 0x0e, 0x28, 0x6e, 0xcd, 0x4e, 0x64, 0x04, 0x6a, 0x98, 0x5b, 0xdf, 0xda, 0x8b, 0x01, 0xb3, 0x4d, 0x9d, 0xc0, 0xcf, 0x2a, 0xb3, 0xbf, 0x51, 0x68, 0xef, 0x64, 0x96, 0x3b, 0xc9, 0x18, 0xf5, 0xf4 ],
-const [ 0x5a, 0x35, 0xa2, 0x90, 0x9a, 0xad, 0xd2, 0x78, 0xb8, 0x10, 0xb1, 0x01, 0xed, 0x44, 0xe1, 0x54, 0x8d, 0xda, 0xf9, 0xba, 0x8c, 0x88, 0x2b, 0xb1, 0x42, 0xd9, 0x24, 0x3f, 0x6b, 0x23, 0x34, 0x86, 0x72, 0xba, 0xaf, 0x99, 0xef, 0x63, 0x93, 0x8e, 0x6e, 0x0b, 0x6a, 0xd4, 0x72, 0xb9, 0x72, 0xc7, 0xb9, 0xc2, 0xfc, 0x82, 0xc2, 0x3c, 0x12, 0xf4, 0x8d, 0xb4, 0x5c, 0x37, 0xa2, 0x24, 0x45, 0x1c ],
-const [ 0x96, 0xda, 0x74, 0x67, 0x79, 0xee, 0x44, 0x16, 0x51, 0xfb, 0x9c, 0xcd, 0x2d, 0xa6, 0x21, 0xef, 0xf4, 0x09, 0x11, 0x11, 0xf8, 0xfb, 0x79, 0x5c, 0xce, 0x92, 0xa8, 0x33, 0x5e, 0xe7, 0xe3, 0x16, 0x36, 0x19, 0x5a, 0xc7, 0x24, 0x95, 0x5b, 0xab, 0x03, 0x94, 0xc6, 0x72, 0xd5, 0xe5, 0xc1, 0xfb, 0x12, 0xec, 0xac, 0x71, 0x40, 0xeb, 0x58, 0xbb, 0xc4, 0x80, 0x73, 0x13, 0xf8, 0x6f, 0x47, 0xf4 ],
-const [ 0x43, 0xaa, 0xe2, 0x62, 0x14, 0x59, 0xa8, 0xd5, 0xb5, 0xcc, 0x91, 0x94, 0x45, 0xf3, 0xda, 0xbc, 0x01, 0x65, 0xd1, 0x36, 0xba, 0x01, 0xe5, 0x81, 0x87, 0xd5, 0xff, 0xb2, 0xb7, 0x3f, 0x15, 0xb9, 0x09, 0x51, 0xfc, 0xe5, 0x20, 0x7a, 0x7d, 0xab, 0x31, 0x63, 0xac, 0xa3, 0xff, 0x18, 0x75, 0xd3, 0x09, 0x68, 0x78, 0x30, 0x01, 0x8e, 0x17, 0x62, 0x81, 0x11, 0xcc, 0xc8, 0xfa, 0xe8, 0xc0, 0xbc ],
-const [ 0xfa, 0x23, 0x5e, 0xf9, 0xf4, 0x8a, 0x66, 0x6e, 0x2e, 0x55, 0xdb, 0xc4, 0x48, 0xef, 0x93, 0x4d, 0xe0, 0xd2, 0x2e, 0xf5, 0xc0, 0xec, 0xed, 0xc7, 0x55, 0x48, 0xc8, 0xb3, 0x64, 0xea, 0xba, 0x8e, 0xf8, 0xfb, 0x60, 0x5a, 0x9f, 0x26, 0xc2, 0xc8, 0xd5, 0x41, 0x71, 0xfb, 0xc1, 0x30, 0xd2, 0x8f, 0x1f, 0x06, 0xb9, 0xda, 0x7e, 0x6e, 0x39, 0x71, 0xab, 0x4a, 0xbb, 0xee, 0x6d, 0x99, 0x4e, 0xf1 ],
-const [ 0xbf, 0x24, 0x8c, 0x7c, 0x61, 0x01, 0xe6, 0xe0, 0x28, 0x1c, 0x89, 0x55, 0xe5, 0xcc, 0x02, 0x8d, 0x98, 0xe5, 0x68, 0x8d, 0x3f, 0x36, 0xd7, 0x54, 0xf0, 0x56, 0x20, 0xbd, 0x26, 0xa1, 0xbf, 0xa6, 0x59, 0x7d, 0x0e, 0x52, 0xd1, 0xe2, 0xb8, 0x0c, 0xbb, 0x19, 0x6f, 0x0d, 0x7d, 0xc3, 0xe2, 0xa0, 0x47, 0x1e, 0xe9, 0x84, 0xea, 0x84, 0x03, 0x92, 0xee, 0x34, 0x03, 0x9f, 0xde, 0x55, 0x06, 0xa4 ],
-const [ 0x8b, 0x4c, 0x9c, 0x27, 0x83, 0x24, 0x0e, 0x19, 0x12, 0x8f, 0xcc, 0x27, 0x54, 0xc4, 0x7d, 0x68, 0xd6, 0xac, 0xb3, 0x36, 0x59, 0x99, 0xcd, 0x85, 0xd3, 0x35, 0x1c, 0x74, 0xb7, 0xb9, 0x44, 0x22, 0x76, 0x5f, 0xe5, 0xc3, 0x46, 0x19, 0x7b, 0xf3, 0x22, 0x83, 0x83, 0x49, 0x12, 0x16, 0xe0, 0x30, 0xac, 0x9f, 0x7c, 0xf2, 0xdb, 0xf0, 0x32, 0x16, 0xdf, 0xd6, 0xec, 0xec, 0x95, 0x4b, 0x08, 0x66 ],
-const [ 0xa5, 0xfd, 0x99, 0xca, 0x57, 0xc1, 0xfe, 0xc8, 0x15, 0x9a, 0x79, 0x87, 0x92, 0x42, 0x6d, 0x29, 0x6f, 0xa1, 0xb1, 0x7d, 0x53, 0x92, 0x41, 0xde, 0x3d, 0xea, 0x33, 0x58, 0x19, 0xb7, 0xed, 0x0d, 0x92, 0xc5, 0x96, 0xd7, 0x28, 0x67, 0xca, 0x2f, 0x82, 0x73, 0x92, 0x4e, 0x05, 0x8f, 0x93, 0x91, 0xa5, 0xab, 0x85, 0x22, 0xfb, 0xcf, 0xe7, 0xd5, 0x98, 0x17, 0xf1, 0x50, 0x9a, 0xfc, 0xcb, 0x6f ],
-const [ 0x30, 0xbc, 0x3e, 0x32, 0x1a, 0x89, 0x78, 0xe2, 0x35, 0xfa, 0x1b, 0x55, 0x00, 0x64, 0xb8, 0x2e, 0xaa, 0x0c, 0x10, 0x75, 0x25, 0xea, 0xcc, 0x82, 0x7c, 0xad, 0x6f, 0x1d, 0x66, 0xff, 0x88, 0xe3, 0x1b, 0x09, 0x2c, 0xec, 0x66, 0x3a, 0xa3, 0xaa, 0xfc, 0x44, 0x62, 0x14, 0x0c, 0x68, 0x39, 0x04, 0x17, 0xf4, 0xce, 0xde, 0x02, 0x0a, 0x4a, 0x73, 0x6a, 0xa2, 0x52, 0x25, 0x37, 0xd2, 0x39, 0x4b ],
-const [ 0xc1, 0x89, 0xce, 0x53, 0x34, 0xf6, 0x70, 0xed, 0x28, 0x15, 0x60, 0x7b, 0xa9, 0x54, 0x9f, 0x07, 0x68, 0x2e, 0x11, 0xf7, 0x02, 0x59, 0xde, 0xe3, 0x85, 0x40, 0x19, 0xa4, 0x31, 0xb3, 0xa0, 0xad, 0x7b, 0xdd, 0x43, 0x9f, 0x58, 0x77, 0x28, 0x17, 0xb7, 0x3c, 0x6d, 0xca, 0x4f, 0x9d, 0x10, 0xd5, 0x9c, 0xb5, 0x0c, 0x4e, 0x24, 0x7f, 0xc5, 0x1f, 0xff, 0x47, 0xa6, 0x14, 0x96, 0x5e, 0x09, 0x32 ],
-const [ 0x08, 0x5e, 0xcb, 0x69, 0x49, 0x2d, 0xea, 0xa7, 0x04, 0xe2, 0x5a, 0xee, 0xab, 0xb7, 0xb7, 0x79, 0x5f, 0xdc, 0xc8, 0x07, 0xb3, 0x25, 0x5f, 0x2f, 0xb3, 0x00, 0x81, 0xf4, 0x25, 0xa9, 0xc7, 0x99, 0x0e, 0xa1, 0x04, 0xb7, 0x78, 0x5c, 0x28, 0x8c, 0x73, 0x39, 0x65, 0x96, 0x5a, 0xb8, 0x90, 0x60, 0x57, 0xe8, 0xc9, 0x9d, 0x29, 0x1e, 0x5e, 0x73, 0x25, 0xec, 0xed, 0x19, 0x7b, 0x51, 0xc9, 0xa4 ],
-const [ 0xf5, 0xa0, 0x7e, 0x37, 0x41, 0xf0, 0x31, 0x74, 0xc6, 0xef, 0xcb, 0x1f, 0x9f, 0x18, 0x6d, 0x1f, 0x23, 0x3b, 0x36, 0x70, 0x73, 0xc5, 0x6e, 0x81, 0x4f, 0x42, 0x04, 0xdb, 0x2e, 0x20, 0x3b, 0x04, 0x8d, 0xb6, 0xa0, 0xa3, 0x87, 0x85, 0x3f, 0xe4, 0xa6, 0xbd, 0x16, 0x1e, 0xf9, 0x03, 0xca, 0xb4, 0x66, 0x71, 0x99, 0x39, 0x42, 0xde, 0x90, 0xd7, 0x1f, 0x60, 0xfe, 0xf1, 0xe5, 0x10, 0x28, 0x07 ],
-const [ 0x88, 0x7c, 0x37, 0xf1, 0xf0, 0x99, 0x20, 0xba, 0x51, 0x88, 0x59, 0x34, 0xaf, 0x50, 0xa4, 0xb0, 0x65, 0xe9, 0xe2, 0x16, 0x0e, 0x97, 0x1e, 0xd8, 0xa6, 0x76, 0xcd, 0x26, 0xed, 0x55, 0x54, 0x61, 0x0c, 0xc7, 0xcb, 0xd1, 0x7b, 0x78, 0x01, 0x9a, 0x22, 0xbe, 0xc0, 0xec, 0xbf, 0x70, 0x52, 0x7b, 0x87, 0xfb, 0x43, 0x2f, 0x10, 0xb2, 0x69, 0x1c, 0x6e, 0x66, 0x22, 0xb4, 0x9d, 0x37, 0xdd, 0x3b ],
-const [ 0xe9, 0x06, 0x1e, 0xf9, 0xb2, 0x98, 0xe4, 0x7a, 0xf4, 0xbf, 0xe3, 0x59, 0x03, 0xd2, 0x2e, 0x2e, 0xa4, 0xce, 0xdb, 0x85, 0xc5, 0x3e, 0x5a, 0xe1, 0x6b, 0x5e, 0x05, 0x01, 0xeb, 0x7f, 0xf7, 0x61, 0x5d, 0xad, 0x22, 0x04, 0x4e, 0x90, 0x9c, 0x71, 0xb5, 0x90, 0x3a, 0xfc, 0x28, 0x3c, 0x60, 0x46, 0x50, 0xed, 0x17, 0x07, 0x9b, 0xa6, 0x60, 0x0b, 0x30, 0x3f, 0xc9, 0x7b, 0x28, 0xc3, 0x3d, 0x5e ],
-const [ 0x78, 0xba, 0xb2, 0xc4, 0x0d, 0x60, 0xd0, 0x77, 0x0c, 0x5d, 0x2b, 0xaf, 0xc4, 0x55, 0x26, 0x59, 0x42, 0xb0, 0xd9, 0x32, 0x17, 0x4a, 0xfe, 0x25, 0x5b, 0x6c, 0x0e, 0xd4, 0xf1, 0xfc, 0xa7, 0x75, 0x0d, 0xf0, 0x31, 0xdf, 0xf4, 0x08, 0xc1, 0xe4, 0x03, 0xbd, 0x3d, 0xe2, 0xf3, 0x75, 0xc2, 0x95, 0x5b, 0xf8, 0x42, 0x2f, 0x76, 0x27, 0x72, 0xab, 0x27, 0xec, 0xe3, 0x5e, 0x3a, 0x6d, 0x6e, 0xcf ],
-const [ 0xa2, 0xf1, 0x63, 0x5f, 0x23, 0x9f, 0x03, 0xbe, 0x85, 0x3b, 0x26, 0xae, 0xe7, 0xb8, 0x03, 0x5a, 0x5f, 0x26, 0x7b, 0xf0, 0xeb, 0xd7, 0xa8, 0xeb, 0xab, 0xc0, 0xb8, 0x98, 0x4d, 0x21, 0xfc, 0xd3, 0xc8, 0x69, 0x3c, 0x12, 0x4d, 0x54, 0x4e, 0xa6, 0x7a, 0x56, 0xe6, 0x3d, 0xd2, 0x3c, 0xb0, 0xaa, 0x6a, 0x11, 0x9c, 0xe9, 0xe4, 0x3e, 0x7a, 0x5d, 0xa1, 0xf6, 0xc6, 0x5d, 0x33, 0xd1, 0xc5, 0xef ],
-const [ 0x69, 0xf5, 0x33, 0x83, 0x67, 0x71, 0xa3, 0xcc, 0x00, 0x87, 0xfc, 0x2f, 0xce, 0x7c, 0x42, 0x31, 0x8f, 0x24, 0xc7, 0x6a, 0xcb, 0xf8, 0xf1, 0x39, 0xb8, 0x69, 0x3d, 0xb6, 0x5a, 0x74, 0x84, 0xe8, 0xee, 0x77, 0x7e, 0x39, 0x89, 0x43, 0x84, 0x26, 0xfd, 0x72, 0x9a, 0x3b, 0xfc, 0xfb, 0xac, 0x3f, 0x80, 0x03, 0x18, 0xac, 0x69, 0xf6, 0x6d, 0x62, 0x68, 0xd7, 0x72, 0x9b, 0x1d, 0xd4, 0x6b, 0x22 ],
-const [ 0x2d, 0xaf, 0x08, 0xcd, 0xc0, 0x15, 0xbf, 0x36, 0x1f, 0x66, 0xbe, 0x9c, 0xfc, 0xdd, 0x6a, 0xa7, 0xf1, 0x00, 0x3d, 0xb6, 0x6f, 0xc9, 0x5e, 0x23, 0xf7, 0x04, 0x75, 0xc8, 0x8c, 0xf8, 0xbd, 0xc2, 0x68, 0x49, 0x5b, 0x74, 0xee, 0x1d, 0xee, 0xcf, 0xe0, 0x7e, 0x67, 0xd1, 0xd2, 0x00, 0x1b, 0x4c, 0xde, 0xa3, 0x16, 0xe9, 0x9a, 0xfa, 0xb2, 0x6c, 0x47, 0x8d, 0x69, 0x3a, 0x4b, 0x7d, 0xe8, 0x18 ],
-const [ 0x65, 0xe3, 0x5c, 0x88, 0xeb, 0xfc, 0x4c, 0x42, 0x5d, 0x03, 0x62, 0xc5, 0xcd, 0x12, 0x5b, 0xa4, 0x0a, 0x0a, 0xa7, 0x65, 0x16, 0x34, 0x78, 0x40, 0xda, 0x28, 0x1a, 0x24, 0x19, 0xee, 0x82, 0xfb, 0xa3, 0x64, 0x29, 0x2f, 0xcb, 0xdf, 0x1b, 0x6d, 0x1a, 0x15, 0x4a, 0xa9, 0x45, 0x3b, 0x29, 0x62, 0x5d, 0x6a, 0x76, 0x27, 0x46, 0x47, 0x57, 0x5a, 0x6a, 0xe3, 0xa9, 0x34, 0xae, 0xe0, 0x95, 0x09 ],
-const [ 0x84, 0xd5, 0x82, 0x4f, 0x5b, 0x0d, 0xeb, 0x22, 0xf4, 0x47, 0x65, 0x78, 0xe8, 0xd0, 0xdd, 0x19, 0x2b, 0xdb, 0x87, 0xf9, 0x30, 0x19, 0x23, 0x6a, 0x54, 0x89, 0x7e, 0x90, 0x79, 0x92, 0x3b, 0x15, 0xf1, 0x4f, 0xd3, 0x1f, 0x9f, 0x2a, 0xdb, 0x7f, 0x58, 0xac, 0x86, 0x2c, 0x8f, 0x93, 0x6a, 0xef, 0x32, 0x25, 0x87, 0x5f, 0xcf, 0xc5, 0x85, 0x10, 0xfb, 0xc4, 0x3d, 0x08, 0xf4, 0x79, 0x7b, 0x72 ],
-const [ 0x83, 0x3b, 0x09, 0xf3, 0xa7, 0xe4, 0x11, 0x10, 0xf3, 0x5a, 0xe3, 0x3a, 0xce, 0xf5, 0xc9, 0xa7, 0x6e, 0xa9, 0x31, 0x19, 0x54, 0x81, 0x54, 0xfb, 0x15, 0x48, 0x15, 0xac, 0x60, 0x89, 0x2c, 0x1b, 0x3d, 0xbb, 0x83, 0x94, 0x93, 0xb5, 0xe0, 0xd9, 0xed, 0x68, 0xc5, 0x75, 0x7d, 0xcc, 0x95, 0x4d, 0x62, 0x1b, 0xf7, 0x78, 0x26, 0x3e, 0x7f, 0x50, 0x8b, 0x84, 0x8c, 0xc9, 0x87, 0x9a, 0x6c, 0x02 ],
-const [ 0x5e, 0xfd, 0x2d, 0x24, 0xa0, 0x34, 0xc9, 0xcb, 0x77, 0x8e, 0x67, 0x30, 0xc3, 0x73, 0x9a, 0x2e, 0x48, 0xab, 0xdf, 0xdb, 0x0e, 0x2c, 0x22, 0x03, 0x07, 0x30, 0x83, 0xd5, 0xf3, 0x8b, 0x59, 0xdb, 0x81, 0x3c, 0x77, 0x30, 0xb7, 0x42, 0xaf, 0xed, 0x93, 0xb1, 0x95, 0xe4, 0xf3, 0x04, 0x85, 0x91, 0xb2, 0xb5, 0xe8, 0x4d, 0x14, 0x0b, 0xb2, 0xc5, 0x64, 0x34, 0x2f, 0xab, 0xdb, 0x93, 0x00, 0xab ],
-const [ 0x99, 0x28, 0x68, 0x50, 0x4d, 0x25, 0x64, 0xc4, 0xfb, 0x47, 0xbc, 0xbd, 0x4a, 0xe4, 0x82, 0xd8, 0xfb, 0x0e, 0x8e, 0x56, 0xd7, 0xb8, 0x18, 0x64, 0xe6, 0x19, 0x86, 0xa0, 0xe2, 0x56, 0x82, 0xda, 0xeb, 0x5b, 0x50, 0x17, 0x7c, 0x09, 0x5e, 0xdc, 0x9e, 0x97, 0x1d, 0xa9, 0x5c, 0x32, 0x10, 0xc3, 0x76, 0xe7, 0x23, 0x36, 0x5a, 0xc3, 0x3d, 0x1b, 0x4f, 0x39, 0x18, 0x17, 0xf4, 0xc3, 0x51, 0x24 ],
-const [ 0xce, 0xab, 0x39, 0x8e, 0x41, 0x07, 0x48, 0x3e, 0xde, 0x64, 0xce, 0x10, 0x7c, 0x92, 0x70, 0xe6, 0x02, 0x27, 0x78, 0xb6, 0x1f, 0x6a, 0x25, 0x8d, 0x3b, 0x70, 0x45, 0xd4, 0xad, 0x85, 0x06, 0xd3, 0x2e, 0xce, 0x0a, 0x73, 0x8d, 0x2c, 0xb9, 0x48, 0xa5, 0x62, 0xdb, 0xce, 0x8d, 0x7b, 0x66, 0xf3, 0x0e, 0x66, 0x94, 0xd6, 0x5a, 0xe4, 0x39, 0xcf, 0xfa, 0xa4, 0x54, 0xaf, 0x09, 0xab, 0xe4, 0x49 ],
-const [ 0x6a, 0x61, 0x55, 0xdc, 0x4d, 0x59, 0xc6, 0xbf, 0x46, 0xca, 0xa3, 0xde, 0x09, 0x66, 0x63, 0x26, 0xda, 0x30, 0x8c, 0x51, 0xa2, 0x3e, 0x6e, 0xc3, 0x42, 0xbd, 0x12, 0xb2, 0x27, 0x37, 0x6e, 0x8a, 0x1f, 0x11, 0xda, 0x90, 0x6b, 0x58, 0xc8, 0xc5, 0x15, 0xbd, 0xaf, 0x0d, 0x84, 0xdd, 0x48, 0x90, 0x4d, 0xc6, 0xfd, 0x61, 0x4c, 0xb7, 0x9f, 0x5e, 0xf4, 0x28, 0x57, 0x57, 0xe3, 0x0a, 0xdf, 0x72 ],
-const [ 0xce, 0x97, 0xde, 0xd4, 0x7e, 0x10, 0x1a, 0x6d, 0x0a, 0xa1, 0x04, 0x11, 0x38, 0x09, 0x35, 0x86, 0x04, 0x65, 0x24, 0xf5, 0x43, 0x45, 0xec, 0x9e, 0x86, 0x05, 0x50, 0xc9, 0x41, 0x5b, 0xfc, 0x00, 0x2d, 0x2c, 0x0d, 0x7b, 0xea, 0xa4, 0xd4, 0xdc, 0xe9, 0x85, 0xd7, 0x1d, 0x89, 0xbf, 0x19, 0xc6, 0x80, 0x42, 0x9c, 0x63, 0x7d, 0x10, 0x23, 0x35, 0x0c, 0x96, 0x3c, 0x28, 0xb9, 0x3c, 0x7e, 0x05 ],
-const [ 0x55, 0x4e, 0x34, 0x45, 0x37, 0xa0, 0x96, 0x59, 0x92, 0x0c, 0x19, 0xb4, 0x0f, 0x28, 0x50, 0xb0, 0x72, 0x35, 0xc3, 0xc7, 0x20, 0x99, 0x93, 0xa6, 0xde, 0x90, 0x5c, 0x82, 0xdb, 0x1e, 0x5f, 0xaf, 0xf1, 0x48, 0xe1, 0x6f, 0x28, 0x83, 0xce, 0x08, 0x7c, 0x6d, 0xa2, 0x19, 0xe0, 0xbb, 0x89, 0x2d, 0x82, 0x72, 0xc5, 0x91, 0x51, 0x5b, 0x51, 0x63, 0xbd, 0xb0, 0xc4, 0xec, 0xbd, 0x1c, 0x77, 0x30 ],
-const [ 0x76, 0xd8, 0xe0, 0x34, 0x20, 0x11, 0xd2, 0xbc, 0xa9, 0x53, 0xb2, 0x6e, 0xe2, 0x00, 0xe5, 0x66, 0x85, 0xb7, 0x21, 0xd5, 0x0e, 0xd4, 0xdd, 0xa7, 0xcd, 0x3a, 0x05, 0x63, 0x3a, 0x50, 0xf1, 0x53, 0x88, 0x49, 0x98, 0xe6, 0x7d, 0xa9, 0x01, 0x52, 0x80, 0x04, 0xfb, 0x7d, 0xf4, 0x09, 0x0e, 0x1e, 0xc4, 0xc0, 0xb1, 0x1f, 0x3f, 0x10, 0xbd, 0x47, 0x27, 0x84, 0x22, 0x15, 0x04, 0x4f, 0xd9, 0xef ],
-const [ 0x73, 0x1e, 0xc9, 0xf3, 0x65, 0xf2, 0x8f, 0x1c, 0xb9, 0xc4, 0xeb, 0xcf, 0x89, 0xd8, 0x64, 0x87, 0x32, 0xa6, 0xdf, 0xa9, 0x58, 0xd2, 0xc0, 0x15, 0x2b, 0x5e, 0x52, 0xfa, 0xe8, 0x1f, 0x69, 0xee, 0xa2, 0x6d, 0x46, 0x3e, 0x42, 0x1f, 0xba, 0x82, 0xcd, 0xb7, 0x8f, 0x75, 0xe5, 0xd9, 0x23, 0x04, 0x93, 0x02, 0x56, 0xa5, 0x43, 0x76, 0xa6, 0xea, 0x10, 0x7a, 0x99, 0x56, 0x42, 0xc4, 0x5c, 0x6f ],
-const [ 0xcc, 0x38, 0x82, 0x65, 0x23, 0xa9, 0x09, 0x7e, 0x0f, 0x7d, 0x07, 0x5a, 0x3a, 0x03, 0x9a, 0x70, 0xca, 0x1e, 0x2b, 0x55, 0x90, 0xa6, 0x44, 0x3e, 0x82, 0x0b, 0xa1, 0xc1, 0x6c, 0x3b, 0x89, 0xdb, 0xe2, 0xc6, 0x5f, 0x37, 0x79, 0x40, 0x74, 0xad, 0x37, 0xe8, 0x1f, 0x0a, 0x47, 0x86, 0x10, 0x0f, 0xf1, 0x9a, 0xe1, 0xbc, 0xca, 0xb2, 0xee, 0xce, 0x28, 0x1c, 0x67, 0x86, 0xd9, 0xbd, 0xa3, 0xac ],
-const [ 0x62, 0xc1, 0xd1, 0x49, 0x56, 0x7f, 0x05, 0xa0, 0xb7, 0x6c, 0x4f, 0xd3, 0x2d, 0x1f, 0x36, 0x5d, 0x17, 0x0c, 0xb1, 0x65, 0xcf, 0xb3, 0x8f, 0x92, 0x2f, 0x17, 0x16, 0x22, 0x54, 0x72, 0xeb, 0x36, 0xa1, 0x27, 0x32, 0x70, 0x07, 0xf8, 0xf5, 0xc0, 0x84, 0x79, 0xca, 0x7b, 0xea, 0xc4, 0xb0, 0xae, 0xe2, 0x6f, 0x3b, 0xb1, 0x30, 0xbb, 0xf1, 0xff, 0x39, 0x0e, 0xf3, 0x44, 0xc2, 0xa4, 0xe0, 0xb8 ],
-const [ 0xaf, 0x81, 0xe3, 0x27, 0x52, 0x5f, 0x3a, 0x91, 0x04, 0xb7, 0x28, 0x29, 0x59, 0xa0, 0xf6, 0x60, 0x0f, 0xad, 0x7e, 0xfa, 0xe7, 0x70, 0x9b, 0xb8, 0xb3, 0x3c, 0xde, 0x34, 0xb1, 0x2f, 0x83, 0x0c, 0x17, 0x70, 0xa3, 0x42, 0xef, 0xb6, 0xab, 0xe3, 0x25, 0x0a, 0x0c, 0xe7, 0xdf, 0xcd, 0x34, 0x59, 0x0c, 0xfc, 0xbe, 0xb8, 0x40, 0xb3, 0xe5, 0x9c, 0xbf, 0xf0, 0x3f, 0x9c, 0xd8, 0x9a, 0xa8, 0x70 ],
-const [ 0x17, 0xa5, 0xba, 0xec, 0xf9, 0x16, 0x63, 0x44, 0x33, 0xdc, 0xf1, 0x33, 0xdd, 0xc2, 0xdc, 0xdf, 0xcf, 0x4a, 0x68, 0x0e, 0x08, 0x89, 0x28, 0x98, 0x51, 0x38, 0xc0, 0x1d, 0x1d, 0x09, 0xee, 0xf3, 0xb4, 0x37, 0xcc, 0x62, 0x90, 0x61, 0x4f, 0x14, 0x07, 0x98, 0x14, 0xc7, 0x2b, 0xb7, 0x5c, 0x45, 0xef, 0xf2, 0x55, 0x96, 0x8b, 0xb2, 0x9b, 0x74, 0x21, 0xa1, 0xfe, 0xff, 0xa0, 0x00, 0x86, 0xb2 ],
-const [ 0xe0, 0x9a, 0xd7, 0xd2, 0xff, 0x8d, 0x55, 0x9a, 0x26, 0xe0, 0x45, 0x4b, 0xcb, 0xff, 0xf8, 0x44, 0xe8, 0xd2, 0x41, 0x5b, 0x07, 0x87, 0x2b, 0xc5, 0x9c, 0x93, 0xe7, 0x36, 0x98, 0xf3, 0x08, 0x48, 0x3b, 0xb8, 0xf3, 0x21, 0x2a, 0xc2, 0x90, 0x50, 0xc1, 0xcc, 0x46, 0xf9, 0xaa, 0xa9, 0x27, 0x32, 0xaf, 0xcc, 0x67, 0xac, 0xcc, 0x0e, 0x13, 0x96, 0x89, 0xac, 0xff, 0xbe, 0x87, 0x8f, 0x01, 0xfa ],
-const [ 0xfd, 0x01, 0x3d, 0x61, 0x5c, 0x6c, 0xa9, 0x59, 0x03, 0x0a, 0x52, 0x0e, 0x14, 0x88, 0x08, 0xa0, 0x7e, 0x27, 0xd3, 0x8a, 0x21, 0x56, 0x34, 0xd5, 0x34, 0x86, 0xae, 0x8b, 0xe4, 0x3a, 0x85, 0x6f, 0x3e, 0x5d, 0xc6, 0xeb, 0x4f, 0xd9, 0x87, 0x4a, 0x8a, 0x65, 0x70, 0x27, 0x6a, 0x9e, 0x7b, 0x25, 0x58, 0x5a, 0xf7, 0xe1, 0xce, 0x39, 0xd3, 0x25, 0xbd, 0x7d, 0x19, 0x5f, 0x2c, 0x1b, 0xb9, 0x51 ],
-const [ 0x62, 0xe3, 0xa7, 0x35, 0xed, 0xcd, 0x87, 0xfc, 0xa0, 0xdd, 0x1d, 0x27, 0x97, 0xcc, 0x0e, 0x57, 0x41, 0x60, 0xda, 0x9a, 0xc2, 0x3f, 0x60, 0xe3, 0x95, 0x01, 0xa5, 0xb7, 0x76, 0x88, 0xd1, 0x28, 0x7f, 0x94, 0x7a, 0x07, 0x91, 0x92, 0x25, 0x56, 0xf5, 0xb5, 0x0a, 0xfc, 0x43, 0x48, 0x18, 0xbc, 0x83, 0x43, 0x39, 0x68, 0x93, 0x1c, 0xd7, 0x52, 0xc9, 0xdf, 0x9f, 0x04, 0xd8, 0x81, 0x85, 0x31 ],
-const [ 0xab, 0xc9, 0xcc, 0xdf, 0xbd, 0x92, 0xb6, 0x91, 0x9a, 0x5d, 0x6c, 0x6b, 0x5a, 0x76, 0x5a, 0x39, 0x66, 0x2e, 0xd9, 0x00, 0x80, 0xd3, 0x54, 0x92, 0x04, 0xdf, 0xaa, 0x5f, 0x6d, 0x70, 0xd4, 0x8e, 0x1a, 0xf8, 0xc8, 0x4d, 0x53, 0x36, 0x9d, 0x65, 0x87, 0x65, 0xef, 0x11, 0xd7, 0xb3, 0x85, 0x10, 0xd9, 0xf4, 0x31, 0xf9, 0x95, 0x98, 0xf8, 0xcf, 0xd4, 0xda, 0x73, 0xd5, 0x9b, 0x3b, 0x75, 0xa3 ],
-const [ 0x07, 0xc3, 0x58, 0xed, 0x1d, 0xf3, 0xb0, 0x6d, 0x47, 0xb5, 0xec, 0x76, 0x3a, 0xfa, 0x07, 0xa6, 0x67, 0x7c, 0xa3, 0xa7, 0x22, 0x52, 0x4e, 0x61, 0x03, 0xc1, 0x05, 0x6d, 0x8c, 0x56, 0xf6, 0xcd, 0x0d, 0x31, 0x8a, 0xdb, 0xc5, 0xa4, 0xa3, 0x80, 0x4a, 0xfd, 0x23, 0xa6, 0x2b, 0x9f, 0xad, 0xf0, 0xd3, 0x58, 0xaf, 0xa8, 0xb0, 0xee, 0xa0, 0xf9, 0x95, 0xfb, 0x86, 0x5e, 0x5d, 0xfb, 0xbc, 0x5a, 0xd2, 0xa4, 0xf2, 0x6a, 0xcd, 0x76 ],
-const [ 0xab, 0x8d, 0xfb, 0xa4, 0x41, 0x4e, 0x69, 0x86, 0x51, 0x3a, 0x97, 0x67, 0xaf, 0x5e, 0xae, 0xd9, 0x72, 0x08, 0x11, 0xc4, 0xb3, 0x80, 0x40, 0xb9, 0x91, 0xf3, 0xfd, 0x82, 0x78, 0xb0, 0xad, 0xfe, 0xa4, 0x97, 0x00, 0x2c, 0xe0, 0xcd, 0xd4, 0x85, 0x94, 0xb5, 0x57, 0x8f, 0xfe, 0x1c, 0x6c, 0xaf, 0xc0, 0xb4, 0x51, 0x3e, 0x9b, 0xc4, 0x7e, 0xe0, 0x7a, 0x1d, 0xd0, 0x11, 0xb2, 0x50, 0xe6, 0x01, 0x88, 0x1e, 0xcc, 0xa2, 0xf4, 0x30 ],
-const [ 0xfc, 0x68, 0xbe, 0x1e, 0x46, 0xa7, 0xed, 0x0d, 0x42, 0x93, 0xc6, 0xeb, 0xab, 0x8d, 0x75, 0x46, 0xa7, 0xb6, 0xe9, 0x5d, 0x49, 0x5f, 0x7d, 0x31, 0x5a, 0xc1, 0xd8, 0xdf, 0x59, 0xee, 0x11, 0x2c, 0xc0, 0x08, 0x17, 0x62, 0x89, 0xb1, 0x51, 0x5b, 0xf1, 0xc2, 0x81, 0xdb, 0x7c, 0x40, 0xee, 0x23, 0x39, 0x8c, 0xc2, 0xc2, 0x47, 0xd9, 0xb1, 0xaf, 0x98, 0xe3, 0xdb, 0x95, 0xf5, 0xdf, 0xf4, 0x6e, 0x42, 0xad, 0xa2, 0x53, 0x04, 0x55 ],
-const [ 0x6e, 0x9c, 0xe3, 0x4b, 0x4f, 0xbc, 0x78, 0xea, 0x92, 0xd3, 0xd1, 0x45, 0x92, 0xe1, 0xc0, 0x72, 0x5b, 0xd0, 0x53, 0xd7, 0x0f, 0x4c, 0x59, 0x9b, 0x89, 0xd4, 0x21, 0x5a, 0x3f, 0x11, 0x85, 0x1d, 0x6d, 0x67, 0x27, 0x89, 0x70, 0xcb, 0xfb, 0x56, 0x6f, 0xd4, 0x06, 0x03, 0x41, 0x14, 0x65, 0xc8, 0x8b, 0xa8, 0x90, 0xcd, 0x29, 0x0e, 0xe0, 0x99, 0xd0, 0x37, 0x4f, 0xcd, 0xf1, 0xdd, 0x80, 0x12, 0xe0, 0x17, 0xff, 0x50, 0x35, 0x2b ],
-const [ 0x91, 0xe8, 0x7e, 0x19, 0xa4, 0xa4, 0xaf, 0x9b, 0x20, 0x68, 0xf8, 0x42, 0xe6, 0x24, 0xda, 0x9a, 0x21, 0xe5, 0x7c, 0x40, 0xcc, 0x4d, 0x4d, 0xf5, 0x75, 0x41, 0xeb, 0xf1, 0x40, 0xe1, 0x44, 0x79, 0x2e, 0xbd, 0xfb, 0xb4, 0x9f, 0x45, 0x0d, 0xbb, 0x16, 0x82, 0xb4, 0xef, 0x3d, 0x04, 0x8b, 0x8f, 0x29, 0x1c, 0xf3, 0x8a, 0xde, 0x4b, 0xb6, 0x91, 0x16, 0xf9, 0xeb, 0x71, 0x3e, 0x6a, 0x1a, 0xa0, 0xc2, 0xef, 0xa0, 0x15, 0x8a, 0x59 ],
-const [ 0x1a, 0xbf, 0x71, 0x69, 0x8a, 0x7d, 0x52, 0xb4, 0x1c, 0xaa, 0x5c, 0x26, 0x55, 0x8d, 0x46, 0xe8, 0xcf, 0x27, 0xa4, 0x90, 0xd2, 0x70, 0x16, 0x8c, 0x23, 0xe4, 0xc0, 0xc4, 0x21, 0x3e, 0xfa, 0x7b, 0x0d, 0x84, 0x48, 0x76, 0xaa, 0x43, 0x8c, 0x61, 0x06, 0x1c, 0x7a, 0x6e, 0x97, 0x7f, 0x4d, 0x3f, 0x89, 0xb7, 0xb8, 0x06, 0x57, 0x27, 0x20, 0xeb, 0x99, 0xd3, 0x08, 0xae, 0x1d, 0x22, 0xcd, 0x8d, 0x38, 0xe2, 0x93, 0x68, 0x5e, 0x8c ],
-const [ 0xf8, 0xdf, 0xf7, 0xf4, 0x1b, 0x7e, 0x3e, 0xf6, 0xd5, 0x58, 0xdc, 0xd8, 0x3d, 0x34, 0x4d, 0xb5, 0x55, 0x1d, 0x41, 0x0e, 0xec, 0xb5, 0xa0, 0xbc, 0xc2, 0xcc, 0xcb, 0x29, 0xee, 0x31, 0x25, 0xc0, 0x7d, 0xc8, 0xd2, 0xa2, 0x5c, 0xdd, 0xbe, 0x9b, 0x78, 0xb8, 0xe1, 0x54, 0x23, 0x72, 0xc2, 0xca, 0xba, 0x07, 0x3a, 0xfe, 0x84, 0xab, 0x7b, 0xef, 0xde, 0x62, 0x50, 0xc5, 0x95, 0xcb, 0xa7, 0x4f, 0x94, 0x3c, 0x4c, 0xaf, 0xbf, 0x14 ],
-const [ 0x9f, 0xb4, 0xd6, 0xfc, 0xd6, 0x97, 0xd4, 0x52, 0x2d, 0xc7, 0xe3, 0x86, 0xab, 0x41, 0xdd, 0x9f, 0x8a, 0x63, 0x79, 0x06, 0xe0, 0xfe, 0x12, 0x3b, 0x7f, 0xac, 0xab, 0xc7, 0x19, 0x64, 0x31, 0x72, 0xa8, 0x4b, 0xff, 0xb5, 0x0c, 0xcd, 0xa8, 0x72, 0xf6, 0xed, 0xf0, 0xe3, 0x06, 0xd9, 0x1b, 0xd1, 0x30, 0xc2, 0x6b, 0x06, 0x64, 0xea, 0xe4, 0x04, 0x6e, 0xff, 0x52, 0xf7, 0x1b, 0xa7, 0x8d, 0xe9, 0x9d, 0x5c, 0xfc, 0x35, 0x30, 0x7a ],
-const [ 0xce, 0x3a, 0x2b, 0xec, 0x5c, 0xa0, 0x0b, 0x54, 0x4e, 0x8d, 0x39, 0x2e, 0xd3, 0x09, 0xe9, 0xee, 0x5d, 0x48, 0xd1, 0x85, 0xed, 0xdd, 0x8b, 0x33, 0x90, 0x2a, 0x3b, 0x9d, 0x29, 0x1b, 0x71, 0x1f, 0x72, 0x14, 0x51, 0x63, 0x3e, 0x27, 0xf1, 0x33, 0x01, 0x8b, 0x02, 0x8b, 0x91, 0x49, 0xb3, 0xf3, 0x2e, 0x39, 0xd2, 0x0b, 0xc1, 0x2d, 0x34, 0x68, 0x61, 0x6c, 0x58, 0x9e, 0x1b, 0x62, 0x47, 0x9e, 0xf3, 0x95, 0xbe, 0x43, 0x26, 0xdb ],
-const [ 0xb1, 0x27, 0xe4, 0x81, 0x9e, 0x17, 0x2c, 0xa0, 0x98, 0x68, 0xc2, 0x86, 0x36, 0xdf, 0xa6, 0x3b, 0x2e, 0xef, 0xd1, 0xea, 0xd2, 0x2d, 0xd3, 0xf0, 0xdb, 0x04, 0xbb, 0x33, 0x66, 0xaa, 0x37, 0xb5, 0x3c, 0x52, 0xfc, 0x69, 0x56, 0xa4, 0x68, 0x45, 0xa1, 0x6a, 0x66, 0x98, 0xfe, 0x8c, 0x93, 0x9e, 0x8d, 0x3e, 0x9f, 0x51, 0x2b, 0x78, 0xf5, 0x83, 0x39, 0xa6, 0x9e, 0x2a, 0xa0, 0xa2, 0x62, 0xfb, 0x11, 0xdf, 0x31, 0x3a, 0x92, 0xe7 ],
-const [ 0xa0, 0x4b, 0x62, 0x05, 0xd7, 0xe7, 0x12, 0xaf, 0xf2, 0x8a, 0x8d, 0x52, 0x0a, 0x79, 0x54, 0x7e, 0x41, 0xe4, 0x28, 0x00, 0x00, 0x19, 0x70, 0xb3, 0x83, 0xf8, 0xdc, 0x99, 0x98, 0xa7, 0x48, 0x2a, 0xa3, 0x87, 0xe3, 0xec, 0xe6, 0x66, 0x90, 0x44, 0xff, 0xf6, 0x8c, 0x8c, 0xb2, 0x7d, 0x51, 0x65, 0xe9, 0xcf, 0xbb, 0x4f, 0xf9, 0x7a, 0x6a, 0x77, 0x27, 0x40, 0x67, 0xcf, 0x6b, 0xca, 0x0a, 0x64, 0x74, 0x9a, 0x1b, 0xed, 0xeb, 0x42 ],
-const [ 0xbe, 0xeb, 0xa7, 0x95, 0x99, 0x95, 0x35, 0x8a, 0x1c, 0x23, 0x8d, 0xc2, 0xf4, 0x57, 0xf3, 0xc0, 0xaa, 0x6f, 0x47, 0x37, 0x2f, 0x5f, 0x34, 0x71, 0xb8, 0x5f, 0xab, 0xf1, 0xcb, 0xa5, 0x90, 0x58, 0x9a, 0x74, 0xb3, 0x85, 0x91, 0x55, 0x01, 0x00, 0x2b, 0xa5, 0xfc, 0x99, 0x09, 0x4f, 0x68, 0x4c, 0x45, 0xdb, 0x47, 0x68, 0x04, 0xa8, 0x08, 0xf1, 0x4a, 0x75, 0xfc, 0x42, 0x13, 0x26, 0x09, 0xf6, 0x9f, 0xc5, 0xa2, 0x09, 0x0d, 0xc8 ],
-const [ 0xe7, 0x74, 0x7f, 0x39, 0xb1, 0xc6, 0xc0, 0x15, 0x7a, 0x91, 0x28, 0xc0, 0x12, 0x39, 0x1e, 0x51, 0x48, 0x20, 0x0e, 0xd5, 0x00, 0x6a, 0x19, 0x39, 0x86, 0x04, 0x0a, 0x6a, 0x22, 0xe4, 0x8c, 0xba, 0xed, 0x92, 0x9b, 0x86, 0xe2, 0xe7, 0x39, 0x15, 0x38, 0x14, 0x62, 0xc4, 0xf0, 0xe7, 0x41, 0x60, 0xaa, 0x4a, 0xa4, 0xd4, 0xbc, 0x0d, 0xae, 0x04, 0x85, 0xe5, 0xcb, 0xf8, 0xff, 0xb4, 0xe9, 0x3d, 0x94, 0x0a, 0xe6, 0x88, 0x33, 0xec ],
-const [ 0x2f, 0x95, 0xc1, 0xd1, 0xd9, 0x4d, 0xb8, 0xce, 0x7b, 0xda, 0xfc, 0x8a, 0xf1, 0xb7, 0xe4, 0x8f, 0xef, 0xd9, 0x6b, 0x7a, 0xe8, 0xf7, 0x33, 0xf7, 0x2f, 0x29, 0xca, 0xed, 0x5d, 0xb4, 0x2d, 0xf6, 0xf2, 0x24, 0x8a, 0x12, 0x3f, 0x9c, 0x4a, 0x9c, 0x83, 0x6b, 0x4f, 0x7d, 0x54, 0xdf, 0x7a, 0x9f, 0x40, 0x5e, 0x71, 0xa5, 0xb5, 0xb2, 0x9f, 0xd9, 0x1e, 0xa5, 0x7c, 0x65, 0x4f, 0xce, 0x0e, 0xc7, 0x23, 0xaa, 0xb0, 0x7f, 0x63, 0xef ],
-const [ 0xad, 0xdf, 0xd6, 0x00, 0x41, 0x6f, 0x85, 0x11, 0xf3, 0xf0, 0x7b, 0x03, 0xdf, 0x22, 0x48, 0xb6, 0xbc, 0xec, 0x04, 0x70, 0x03, 0xf4, 0x93, 0x17, 0x54, 0x6c, 0x26, 0xa4, 0x17, 0x2f, 0x05, 0xd4, 0x5f, 0x0c, 0x8d, 0x20, 0x13, 0x61, 0x74, 0xf0, 0x4f, 0xec, 0x55, 0x0c, 0x08, 0xdf, 0x68, 0x53, 0xef, 0x32, 0x90, 0xaf, 0x98, 0x3d, 0x9c, 0x48, 0xdc, 0x86, 0xc6, 0xf8, 0x7c, 0xd8, 0x80, 0x00, 0x06, 0x95, 0x71, 0xf9, 0xfd, 0x4c ],
-const [ 0x05, 0x8f, 0x60, 0x4e, 0x53, 0x05, 0x1a, 0x0f, 0x85, 0x50, 0xde, 0x16, 0xb7, 0x24, 0x5f, 0xda, 0xd3, 0xda, 0x63, 0x9a, 0x6c, 0xc3, 0xc8, 0x4e, 0xea, 0xbc, 0xc5, 0xdd, 0xe8, 0x02, 0x73, 0x90, 0xda, 0x48, 0x8c, 0xc7, 0xf3, 0x07, 0x72, 0xeb, 0x46, 0x16, 0x73, 0xa3, 0x2b, 0x7a, 0x4b, 0x4b, 0xe4, 0x7f, 0xea, 0xa2, 0x80, 0x08, 0x78, 0xc2, 0x00, 0x23, 0x97, 0x56, 0xb9, 0xe0, 0xe8, 0x07, 0xf9, 0x64, 0xd0, 0x37, 0xed, 0x39 ],
-const [ 0x98, 0x6e, 0x0d, 0x3c, 0x3e, 0x76, 0x45, 0xe4, 0x93, 0xd3, 0x59, 0x62, 0x29, 0x1d, 0x97, 0x9d, 0xdf, 0x09, 0xe8, 0xa6, 0x10, 0xd5, 0xa7, 0x3d, 0x0a, 0xe7, 0xb3, 0x97, 0xc2, 0xb1, 0xc3, 0x5e, 0xc6, 0xd7, 0xfa, 0xfa, 0x72, 0x94, 0xbc, 0x0f, 0x67, 0x5a, 0xbf, 0x46, 0x39, 0xb8, 0x65, 0x51, 0x68, 0x81, 0x49, 0x29, 0x92, 0x2b, 0x17, 0x9a, 0xe6, 0x75, 0xa2, 0x02, 0xdc, 0x4c, 0x30, 0x56, 0x23, 0xf0, 0x18, 0x65, 0xdb, 0x53 ],
-const [ 0x7a, 0x41, 0xca, 0x87, 0x76, 0xa3, 0xdd, 0xe0, 0xf5, 0xc7, 0xd0, 0x29, 0xf2, 0x8a, 0x9b, 0xcd, 0x3c, 0x4d, 0xaa, 0xd2, 0xcc, 0xf9, 0xd6, 0x04, 0x56, 0x3f, 0x95, 0x50, 0x1e, 0x25, 0x6d, 0x6e, 0x0d, 0xbe, 0xaf, 0xc3, 0x04, 0x38, 0x61, 0x85, 0x70, 0x1d, 0x7c, 0x20, 0x1f, 0xd2, 0x58, 0xd8, 0x52, 0x64, 0x64, 0xb0, 0x13, 0x83, 0x1a, 0x8b, 0xc8, 0xcf, 0x32, 0x92, 0x09, 0x53, 0x16, 0xd5, 0xaf, 0x4f, 0x97, 0x35, 0x2d, 0x3b ],
-const [ 0xee, 0x36, 0xe5, 0x78, 0x4f, 0xcb, 0x43, 0x42, 0x7b, 0xe0, 0x72, 0xaa, 0xa9, 0x68, 0xea, 0x52, 0xbf, 0x3b, 0x73, 0xf5, 0x5d, 0x0b, 0x45, 0xfb, 0x1d, 0x99, 0x6d, 0x4a, 0x19, 0x28, 0x72, 0x5e, 0xae, 0x32, 0x39, 0x9c, 0x80, 0x5b, 0x26, 0xe3, 0xbe, 0xa3, 0x84, 0x65, 0xa8, 0xdf, 0x27, 0xb5, 0x4e, 0x6a, 0x4f, 0x20, 0x9a, 0x18, 0xd0, 0x41, 0x90, 0x6b, 0x70, 0xd0, 0xd5, 0x0a, 0x91, 0xbb, 0x6e, 0x6e, 0x10, 0x78, 0xcb, 0xdf ],
-const [ 0x27, 0xe1, 0xdc, 0xa4, 0x97, 0x8d, 0x2a, 0x05, 0xd3, 0xf9, 0xca, 0xbc, 0x29, 0xcb, 0x18, 0xc7, 0x6a, 0x21, 0x0b, 0x4e, 0xee, 0x82, 0x5d, 0x37, 0xd9, 0x15, 0xec, 0xf5, 0x9d, 0x10, 0x61, 0xa0, 0xc0, 0x74, 0x0f, 0x4b, 0xe0, 0xf8, 0x1e, 0x92, 0xf4, 0x42, 0xe8, 0x72, 0xd4, 0x5d, 0xa3, 0x5e, 0xfc, 0x68, 0x41, 0x8e, 0x8c, 0x8b, 0x94, 0x9b, 0x94, 0x30, 0xb6, 0x49, 0x8f, 0x6f, 0xa8, 0xa3, 0x2d, 0xc9, 0x39, 0x4e, 0x56, 0x1a ],
-const [ 0xb4, 0x15, 0x31, 0x4e, 0x15, 0x17, 0x01, 0xa5, 0x03, 0xb6, 0x2a, 0x5c, 0x8b, 0x5d, 0xba, 0x5a, 0xc3, 0x57, 0x23, 0x5a, 0x53, 0x3f, 0xe2, 0xf6, 0x34, 0xb8, 0x5f, 0x04, 0xb8, 0x5f, 0x14, 0x26, 0xcb, 0xfe, 0xf2, 0x9d, 0x78, 0x03, 0x00, 0x5e, 0xaf, 0x30, 0x46, 0x68, 0x45, 0x93, 0xe9, 0x54, 0x3c, 0xb9, 0x97, 0x2e, 0x45, 0x1f, 0x25, 0x83, 0x83, 0xe9, 0x77, 0xbb, 0x92, 0xd6, 0xa1, 0xa9, 0xc8, 0x74, 0x4b, 0x61, 0xba, 0x90 ],
-const [ 0xe0, 0x4e, 0x97, 0x31, 0x74, 0x2a, 0x76, 0x74, 0x45, 0x24, 0x7f, 0xba, 0x97, 0x01, 0xae, 0x17, 0xfc, 0x9a, 0xcc, 0x45, 0x1b, 0x8c, 0x4f, 0xf3, 0xaf, 0x30, 0x7c, 0x5f, 0xd3, 0xce, 0xce, 0x27, 0x7c, 0x0d, 0x9b, 0x5d, 0x47, 0xae, 0xf5, 0xd9, 0x75, 0x7a, 0xcf, 0xd3, 0x33, 0x79, 0x60, 0xb1, 0x1f, 0x65, 0xcd, 0x1d, 0x09, 0x5e, 0x02, 0x5b, 0xf6, 0xdf, 0xe0, 0xd9, 0x6b, 0xf1, 0x9e, 0x08, 0xe8, 0x9f, 0x69, 0x6b, 0xb2, 0xa9 ],
-const [ 0xbc, 0x37, 0x32, 0xe9, 0x01, 0x76, 0x8f, 0xc9, 0xb9, 0x83, 0x03, 0xd5, 0x99, 0x11, 0x0b, 0xe8, 0x23, 0x6c, 0x51, 0x51, 0x78, 0x00, 0x22, 0x79, 0x6d, 0x1b, 0x22, 0xc6, 0xe0, 0xf4, 0x3f, 0xbe, 0x4d, 0xeb, 0xe3, 0x70, 0x9c, 0x12, 0x6e, 0x0f, 0x3d, 0xed, 0xe3, 0xe1, 0x77, 0x76, 0xe1, 0x57, 0xfd, 0x64, 0xd6, 0x7e, 0xc3, 0xad, 0x6f, 0x96, 0x0f, 0x4a, 0x53, 0xff, 0xd3, 0x3a, 0x10, 0x5d, 0x3a, 0xc9, 0x55, 0xf4, 0x81, 0x12 ],
-const [ 0xd2, 0x22, 0x98, 0x32, 0xe4, 0x00, 0x06, 0x14, 0xfa, 0xc6, 0xdb, 0x5c, 0x0a, 0x23, 0x5e, 0x49, 0x21, 0x7f, 0xa4, 0xa9, 0xa8, 0x31, 0xf9, 0xaa, 0xe7, 0xf2, 0x82, 0xee, 0xc7, 0x91, 0x20, 0xdd, 0xdc, 0xe9, 0x96, 0x3f, 0xa2, 0x11, 0xef, 0x0a, 0x07, 0xd2, 0x1a, 0x78, 0x2a, 0x5e, 0xd8, 0x5d, 0x63, 0x3e, 0xd8, 0xb8, 0x83, 0x8d, 0x1f, 0x88, 0x5d, 0x64, 0xae, 0xe1, 0x85, 0x95, 0x5f, 0x3e, 0x57, 0x9c, 0x11, 0x19, 0x3b, 0xd2 ],
-const [ 0x04, 0x38, 0x99, 0xaf, 0x30, 0x14, 0x24, 0xed, 0x13, 0xd0, 0x00, 0x66, 0xc0, 0xc3, 0x7a, 0x44, 0x85, 0x91, 0xf2, 0x73, 0x71, 0xa2, 0x84, 0xb3, 0x14, 0xd2, 0xe7, 0xec, 0x86, 0x6a, 0x94, 0xc1, 0xab, 0x50, 0x2b, 0x67, 0xb4, 0x7a, 0x13, 0xb8, 0xe9, 0xa8, 0x61, 0x83, 0xa6, 0x53, 0xfc, 0x27, 0xa4, 0xe0, 0xfe, 0x60, 0x7a, 0x1a, 0x5d, 0x60, 0x64, 0xdf, 0xca, 0x22, 0x42, 0x19, 0xd9, 0xfb, 0xe4, 0xf1, 0x63, 0x72, 0x84, 0x3f ],
-const [ 0xb5, 0xfe, 0xe4, 0x66, 0xf1, 0x06, 0xd7, 0xa5, 0x26, 0xd4, 0x68, 0x46, 0x8a, 0x16, 0x98, 0x12, 0x51, 0x81, 0x5a, 0x02, 0x20, 0x73, 0xa4, 0x02, 0xc4, 0xd7, 0xc5, 0xf6, 0x24, 0x4a, 0xf9, 0xfb, 0x74, 0x7b, 0x3b, 0xef, 0xac, 0xd8, 0x5a, 0x33, 0x39, 0x67, 0x4f, 0xaf, 0xf2, 0xf1, 0xce, 0x17, 0x4d, 0x66, 0x1b, 0x6d, 0xd3, 0x7d, 0x1f, 0xc8, 0xd1, 0x9b, 0xbb, 0x53, 0x51, 0xf6, 0x5c, 0x98, 0x48, 0xfa, 0xd0, 0xff, 0x11, 0xec ],
-const [ 0xfd, 0x01, 0x3d, 0x61, 0x5c, 0x6c, 0xa9, 0x59, 0x03, 0x0a, 0x52, 0x0e, 0x14, 0x88, 0x08, 0xa0, 0x7e, 0x27, 0xd3, 0x8a, 0x21, 0x56, 0x34, 0xd5, 0x34, 0x86, 0xae, 0x8b, 0xe4, 0x3a, 0x85, 0x6f, 0x3e, 0x5d, 0xc6, 0xeb, 0x4f, 0xd9, 0x87, 0x4a, 0x8a, 0x65, 0x70, 0x27, 0x6a, 0x9e, 0x7b, 0x25, 0x58, 0x5a, 0xf7, 0xe1, 0xce, 0x39, 0xd3, 0x25, 0xbd, 0x7d, 0x19, 0x5f, 0x2c, 0x1b, 0xb9, 0x51, 0x22, 0x11, 0x88, 0x09, 0xc7, 0xfb ],
-const [ 0x05, 0x91, 0x5a, 0x68, 0xf1, 0x69, 0x38, 0xd7, 0xc6, 0xc5, 0xd4, 0x32, 0x69, 0x04, 0xe0, 0xf3, 0xb8, 0x9a, 0xcf, 0x4d, 0x70, 0x63, 0xe0, 0x1a, 0x4e, 0x38, 0x58, 0x15, 0x75, 0xbf, 0x0e, 0x49, 0x10, 0x87, 0x2d, 0xc9, 0x38, 0x54, 0x36, 0xa2, 0x18, 0xb7, 0x44, 0x0e, 0x4f, 0xe2, 0x94, 0xea, 0x95, 0xbb, 0x44, 0x6a, 0xa2, 0x2f, 0x5b, 0x0c, 0x4c, 0xc9, 0x0a, 0xca, 0xef, 0x83, 0x32, 0x94, 0x11, 0xdc, 0x25, 0xfd, 0x46, 0x2a ],
-const [ 0xb0, 0x5f, 0x0e, 0x3b, 0xbb, 0x12, 0xb9, 0x35, 0x1c, 0x46, 0x5a, 0xd5, 0xef, 0xf3, 0x1e, 0x65, 0xe5, 0x59, 0x56, 0xc5, 0xf4, 0xe4, 0xca, 0x68, 0x4d, 0x53, 0x50, 0x9f, 0x8f, 0x19, 0x9d, 0x1a, 0x3a, 0x03, 0x5a, 0xab, 0x66, 0x1c, 0x7b, 0x4e, 0xb5, 0xce, 0xcc, 0x67, 0x86, 0x49, 0xcc, 0x4a, 0x6b, 0x29, 0xbf, 0x00, 0xde, 0x52, 0xff, 0x49, 0x2f, 0x1f, 0x93, 0xdd, 0xc1, 0xbd, 0x02, 0xf7, 0x76, 0xd1, 0x69, 0x14, 0x68, 0x61 ],
-const [ 0x37, 0x14, 0x70, 0x78, 0x39, 0xda, 0xf7, 0x91, 0x22, 0xc7, 0x82, 0x41, 0x63, 0x51, 0x38, 0x5e, 0x88, 0xa8, 0x1d, 0x31, 0xc9, 0xf6, 0x41, 0xd8, 0xdc, 0xe5, 0x38, 0xe9, 0x0e, 0x63, 0xc9, 0x58, 0x92, 0xa2, 0xea, 0x9b, 0x19, 0x62, 0xed, 0x0b, 0xa3, 0x72, 0xf4, 0x8e, 0x94, 0x74, 0xaa, 0x73, 0x0a, 0xe2, 0x35, 0x9d, 0x6e, 0x4e, 0x66, 0xe4, 0x49, 0xee, 0x33, 0xb8, 0x59, 0x57, 0x68, 0x07, 0xe5, 0x89, 0x99, 0x61, 0x4d, 0x2c ],
-const [ 0xc0, 0x9e, 0x29, 0x07, 0x1c, 0x40, 0x5d, 0x5e, 0x82, 0x0d, 0x34, 0x5a, 0x46, 0xdb, 0xbf, 0x1e, 0x0f, 0x82, 0x02, 0xe9, 0x2d, 0xe3, 0xed, 0x3e, 0x2d, 0x29, 0x8e, 0x43, 0xaa, 0x4f, 0x84, 0x68, 0x66, 0xe3, 0xb7, 0x48, 0x99, 0x09, 0x46, 0xd4, 0x88, 0xc2, 0xc1, 0xae, 0x5a, 0x6e, 0x99, 0xd3, 0x27, 0x90, 0xd4, 0x7d, 0x53, 0xd2, 0x05, 0x48, 0x1a, 0x49, 0x7c, 0x93, 0x6b, 0xf9, 0xba, 0x29, 0xfa, 0x9c, 0x28, 0x21, 0x91, 0x9f ],
-const [ 0xbc, 0xe5, 0x0c, 0xdf, 0xff, 0x84, 0x38, 0x85, 0xd4, 0xf3, 0x64, 0xd6, 0x9f, 0x93, 0xbf, 0x58, 0xa2, 0x32, 0x2c, 0x70, 0x7b, 0x82, 0xe8, 0x78, 0xee, 0xc9, 0x6d, 0x11, 0xe5, 0xdb, 0x97, 0xbb, 0xb5, 0x46, 0x06, 0xa3, 0xa3, 0xcc, 0xc3, 0xbb, 0xa7, 0x16, 0x26, 0x10, 0x70, 0xa6, 0xf7, 0x59, 0xa7, 0x0e, 0xd3, 0xcb, 0x78, 0x5f, 0xd1, 0x35, 0x4f, 0xe5, 0x66, 0x48, 0xdf, 0x11, 0x86, 0x36, 0x69, 0xb7, 0x0c, 0x80, 0x3b, 0x7a ],
-const [ 0x0c, 0xb3, 0x5a, 0x02, 0xdd, 0xc8, 0xc7, 0xfb, 0x7c, 0x93, 0xae, 0xab, 0x77, 0xb9, 0x31, 0x81, 0x18, 0xb0, 0xfd, 0x44, 0x95, 0x24, 0x20, 0x9d, 0x87, 0x9a, 0x1c, 0xd6, 0x9d, 0x54, 0x39, 0xe1, 0x92, 0x74, 0x1f, 0x9c, 0x5c, 0x64, 0xa3, 0x53, 0xa7, 0x74, 0xe2, 0x86, 0x81, 0xc5, 0x8c, 0xed, 0x57, 0x67, 0x83, 0xba, 0x20, 0xbe, 0xa5, 0x1e, 0xd8, 0x2a, 0xe5, 0x0e, 0x30, 0xe6, 0xa1, 0x47, 0x84, 0x31, 0x30, 0x90, 0x0d, 0xac ],
-const [ 0xcd, 0xdf, 0x76, 0xf9, 0x85, 0xd6, 0x79, 0x7c, 0x9f, 0xe3, 0x83, 0x0c, 0x21, 0x05, 0x67, 0xc5, 0x09, 0x4f, 0xb9, 0x79, 0x34, 0x3f, 0xd5, 0xa1, 0x80, 0x4c, 0x23, 0x9a, 0x2e, 0xbe, 0x9a, 0x0e, 0x8a, 0xc2, 0x83, 0xb0, 0xcd, 0xbe, 0x80, 0x2c, 0x42, 0xe2, 0xcc, 0x5d, 0xa8, 0x00, 0xc4, 0xc1, 0xd8, 0x9d, 0xa7, 0x2b, 0xa7, 0x48, 0x9a, 0xb8, 0x0e, 0x2a, 0xef, 0x04, 0x88, 0xdf, 0xa6, 0x9e, 0xbc, 0x84, 0x34, 0xb9, 0x5c, 0x11 ],
-const [ 0x73, 0x1b, 0xdc, 0x9f, 0xb2, 0x19, 0xf3, 0x66, 0x7c, 0x9a, 0x13, 0x5e, 0xcf, 0x34, 0xc7, 0xf5, 0x2c, 0xf6, 0x38, 0xc3, 0x9c, 0x55, 0x4f, 0x1e, 0xf1, 0x69, 0x1a, 0xe8, 0x4e, 0x5a, 0x71, 0xac, 0xe9, 0x15, 0xd9, 0xe9, 0x10, 0x43, 0xa8, 0xae, 0x6a, 0x7b, 0x6a, 0x67, 0x80, 0xb6, 0x84, 0xf7, 0x7b, 0x04, 0x17, 0x07, 0x2f, 0x7e, 0x27, 0x9d, 0x59, 0x7c, 0xfd, 0xf0, 0x25, 0x08, 0xc9, 0x7b, 0xf4, 0x92, 0x8c, 0x50, 0x5b, 0xe5 ],
-const [ 0x85, 0x80, 0x6f, 0xf2, 0xa6, 0x42, 0xf7, 0x29, 0xd2, 0x8d, 0xed, 0x07, 0x34, 0xae, 0xf4, 0xf6, 0xa3, 0xf0, 0xbb, 0x32, 0x77, 0x1e, 0x77, 0x72, 0x9b, 0x43, 0x91, 0xca, 0xe4, 0xb4, 0x9b, 0xd0, 0xa1, 0x50, 0x89, 0xfe, 0x74, 0x07, 0x1e, 0x57, 0x60, 0x99, 0xa4, 0x4d, 0x22, 0xa0, 0xe0, 0xe3, 0xc5, 0xd1, 0x45, 0x0f, 0x71, 0x7f, 0x68, 0x62, 0x84, 0x60, 0xb4, 0xea, 0xe3, 0x94, 0x5f, 0x58, 0x93, 0xe3, 0x9c, 0x5e, 0x83, 0x47 ],
-const [ 0xf1, 0x37, 0x94, 0xe5, 0xea, 0x5e, 0x27, 0x50, 0x7a, 0x7b, 0xad, 0x63, 0x8f, 0x8e, 0xb8, 0xb8, 0x6c, 0xa5, 0xad, 0x73, 0xb5, 0xa1, 0x74, 0x24, 0xc6, 0x3c, 0x74, 0xef, 0x49, 0x4b, 0xbf, 0xea, 0x08, 0x41, 0x89, 0xc6, 0xff, 0xf5, 0xdf, 0xb2, 0xb6, 0xa5, 0x96, 0x7c, 0xce, 0x3a, 0x81, 0xf9, 0xd9, 0xcd, 0xe7, 0xa8, 0x6f, 0x6b, 0x33, 0x92, 0x7e, 0x15, 0xee, 0x74, 0xe1, 0x0b, 0xeb, 0x20, 0x34, 0x4b, 0xc1, 0x21, 0xe7, 0x54 ],
-const [ 0xe3, 0xd0, 0xc3, 0xab, 0xde, 0xf0, 0x69, 0xe6, 0xe4, 0xfa, 0x35, 0x01, 0x57, 0x97, 0xbd, 0x8a, 0x9d, 0x64, 0xbc, 0x9b, 0x75, 0xf2, 0x0b, 0x02, 0x8b, 0x12, 0xcc, 0xa0, 0x4a, 0x4f, 0xe8, 0x0f, 0xf1, 0xbb, 0xbd, 0x88, 0xe9, 0xef, 0x10, 0x03, 0x56, 0x4d, 0x49, 0x9f, 0xec, 0x88, 0xdf, 0x45, 0x03, 0x67, 0x11, 0x88, 0xee, 0xc5, 0xd7, 0xd0, 0x89, 0xdd, 0x18, 0xb8, 0x12, 0xc4, 0x1d, 0xb4, 0x3a, 0x37, 0x46, 0xf7, 0x7b, 0x97 ],
-const [ 0x51, 0xbb, 0xdf, 0x37, 0x12, 0x4c, 0xee, 0x0c, 0xd5, 0x83, 0x0e, 0x9d, 0x8f, 0x4b, 0x0e, 0xcf, 0xa4, 0x4c, 0x8b, 0x1b, 0xb8, 0x6a, 0x64, 0x33, 0xc1, 0x8f, 0x6e, 0xe9, 0x61, 0xab, 0x69, 0x4d, 0x74, 0xf9, 0x33, 0x16, 0xe5, 0x83, 0x3c, 0x44, 0xc5, 0xe8, 0x3a, 0x03, 0x9e, 0x5d, 0x1e, 0xd1, 0x04, 0xf2, 0x46, 0xe3, 0x6e, 0x17, 0xf4, 0xc5, 0x44, 0x5e, 0xff, 0x42, 0x39, 0x82, 0xc8, 0x83, 0xdb, 0xa9, 0x70, 0x7b, 0x68, 0xe6 ],
-const [ 0xe9, 0x57, 0x51, 0xc9, 0x9e, 0x14, 0xbe, 0xd0, 0xdd, 0x9b, 0xa1, 0x02, 0xf4, 0x8e, 0x5e, 0x44, 0x05, 0x19, 0xc5, 0x32, 0x08, 0xe0, 0x3a, 0xb7, 0x13, 0x36, 0x13, 0xda, 0xd9, 0x90, 0x42, 0xdb, 0x72, 0x39, 0x34, 0x7f, 0x5a, 0x47, 0xf9, 0xa8, 0xbb, 0xcd, 0xa4, 0x28, 0xef, 0x52, 0xf5, 0xd7, 0x40, 0x82, 0x35, 0xe4, 0xf3, 0x24, 0x62, 0x68, 0x86, 0x4c, 0x8c, 0x41, 0x35, 0xd2, 0x7f, 0x1d, 0xc3, 0x02, 0xa2, 0xd5, 0x76, 0x95 ],
-const [ 0x9d, 0xd1, 0x0a, 0x4c, 0x71, 0x37, 0x76, 0x70, 0x0f, 0x7e, 0x7e, 0x0a, 0x71, 0x0a, 0x01, 0x4b, 0x92, 0x3b, 0xf2, 0x28, 0x23, 0x4d, 0xaf, 0x5e, 0x80, 0x7c, 0x8e, 0xb3, 0xe2, 0x6c, 0xb9, 0x7f, 0xd6, 0xc9, 0x3d, 0x6c, 0xee, 0x2a, 0x5d, 0x7a, 0xb6, 0x3c, 0x2c, 0x46, 0xe9, 0x1c, 0x5b, 0x8b, 0xe5, 0x04, 0x4f, 0xe9, 0x5d, 0x2a, 0x76, 0xe5, 0x4e, 0xe5, 0xdc, 0x32, 0x34, 0x12, 0xf9, 0x2f, 0x7d, 0xb6, 0xce, 0xb0, 0x3e, 0xe5 ],
-const [ 0x36, 0xbb, 0xb5, 0x99, 0x25, 0xc6, 0x43, 0x21, 0x39, 0xc7, 0xcd, 0x1b, 0xbc, 0x2b, 0x1b, 0x05, 0xc4, 0x01, 0x0e, 0x09, 0x64, 0x5f, 0x79, 0x7e, 0x23, 0x01, 0x31, 0xb2, 0xad, 0x34, 0x68, 0xe7, 0xc9, 0xf2, 0x36, 0x9b, 0x8b, 0x4f, 0x79, 0x0d, 0xcb, 0x14, 0xdf, 0xfc, 0xd6, 0xa9, 0x41, 0xb2, 0x62, 0x38, 0x33, 0x41, 0xc8, 0x0f, 0xd9, 0x0d, 0x6d, 0x46, 0xfc, 0x8a, 0x81, 0xa2, 0x5c, 0x47, 0xed, 0xba, 0x48, 0x2c, 0x86, 0x58 ],
-const [ 0xff, 0xa6, 0x3e, 0xbb, 0xa8, 0x23, 0x9b, 0x68, 0x96, 0xbb, 0xec, 0x6a, 0xf1, 0xc7, 0xb8, 0x7b, 0x9c, 0x69, 0x25, 0x7a, 0x0d, 0x14, 0x6c, 0x0d, 0x5c, 0x4e, 0x8b, 0x8a, 0x99, 0xb4, 0x3a, 0x18, 0x63, 0x3f, 0x1f, 0x11, 0xb6, 0xc7, 0x45, 0xab, 0x05, 0xc5, 0xcb, 0xd8, 0x89, 0x5d, 0xd9, 0x6a, 0xd8, 0x9c, 0xd8, 0x7b, 0xb9, 0xfe, 0xe3, 0x0c, 0x37, 0x33, 0x78, 0xec, 0xf4, 0x22, 0x74, 0xdc, 0xc0, 0x2f, 0x3e, 0xf0, 0x6a, 0xb9 ],
-const [ 0x30, 0xbe, 0x32, 0x6c, 0x2f, 0xff, 0xf6, 0xd0, 0x31, 0xaf, 0xfd, 0xab, 0x0a, 0x27, 0xd5, 0xa8, 0xcb, 0xfc, 0x4b, 0xa9, 0xde, 0xc6, 0x26, 0xad, 0x52, 0x26, 0x15, 0xf7, 0x73, 0x07, 0xe5, 0x6d, 0x9e, 0x23, 0xf7, 0x3e, 0x53, 0xc9, 0xf2, 0xc7, 0x8c, 0xde, 0xb5, 0xb8, 0x4d, 0x23, 0x90, 0x72, 0x7d, 0xb5, 0xb3, 0xb4, 0xf4, 0xda, 0xe6, 0x77, 0xd5, 0xfa, 0x7b, 0x16, 0x1e, 0xec, 0x81, 0xb2, 0x7d, 0x74, 0x3b, 0xd5, 0x66, 0x09 ],
-const [ 0x19, 0xfb, 0x88, 0x77, 0x5a, 0x51, 0x7b, 0xfe, 0xde, 0xb2, 0xcd, 0xe7, 0xc9, 0x45, 0x5c, 0xa5, 0x8d, 0x40, 0xd1, 0x50, 0xb0, 0xa4, 0x7f, 0xfb, 0xd0, 0x28, 0x8e, 0x42, 0xe4, 0x72, 0x58, 0x22, 0xc4, 0x8d, 0x13, 0x0e, 0xec, 0x98, 0xb1, 0x3e, 0x7c, 0xbb, 0x04, 0x4b, 0x84, 0x60, 0x26, 0xf9, 0x7f, 0x9f, 0x18, 0x53, 0x1d, 0xf9, 0xa9, 0xfe, 0x46, 0x4a, 0x99, 0xc7, 0x5b, 0xf9, 0xff, 0x7e, 0xbf, 0x72, 0xe8, 0x07, 0x96, 0xd6 ],
-const [ 0x81, 0x5c, 0x2a, 0x91, 0x1a, 0xaf, 0x0f, 0x84, 0x98, 0x70, 0x61, 0x10, 0xa9, 0x5e, 0x6f, 0x9c, 0x26, 0xc3, 0xef, 0x52, 0xa3, 0xb1, 0x37, 0x81, 0x44, 0x8c, 0xb0, 0x3f, 0xd2, 0xc8, 0x87, 0x52, 0x0d, 0xf4, 0xa5, 0x51, 0x44, 0xf8, 0xe2, 0x06, 0x24, 0x9b, 0x75, 0x17, 0xce, 0x48, 0xaf, 0xe5, 0x2c, 0x11, 0xea, 0xb5, 0x84, 0xf4, 0xbc, 0x0e, 0x4d, 0x5d, 0x70, 0x61, 0x42, 0xed, 0xb6, 0xf0, 0xb6, 0x7a, 0x99, 0xe8, 0x27, 0x57, 0xb2, 0xd0, 0x15, 0xd5 ],
-const [ 0x48, 0x09, 0xf3, 0x1e, 0x93, 0x42, 0x3c, 0xab, 0xf4, 0x4c, 0xdd, 0xca, 0xd2, 0x3d, 0xa7, 0xd7, 0xae, 0xe7, 0x34, 0xd3, 0x11, 0xfc, 0x7b, 0xab, 0xc2, 0x76, 0xa1, 0xbd, 0x3d, 0x35, 0x13, 0x98, 0x61, 0xea, 0xd1, 0x03, 0x69, 0x35, 0x0d, 0x42, 0x1d, 0x0a, 0xf4, 0x94, 0x49, 0x59, 0xcc, 0x00, 0x6f, 0xee, 0x3f, 0x51, 0xb9, 0x96, 0xf6, 0x60, 0x31, 0x83, 0x6a, 0x91, 0x34, 0xf1, 0xf7, 0xa0, 0x24, 0x0a, 0x33, 0x9e, 0x5e, 0x07, 0x7d, 0x36, 0x6c, 0x99 ],
-const [ 0x1c, 0xe3, 0xf5, 0xbc, 0xe2, 0xb1, 0x76, 0xbf, 0x89, 0xeb, 0x70, 0x15, 0x00, 0x5e, 0xd1, 0xff, 0x51, 0x77, 0xa4, 0x74, 0x6c, 0xf8, 0xed, 0x72, 0x26, 0xef, 0xd4, 0x93, 0x81, 0xe9, 0x06, 0xe0, 0x2e, 0x63, 0x59, 0xe9, 0x50, 0x81, 0xaf, 0x16, 0x83, 0x03, 0x1c, 0x38, 0x1d, 0x74, 0x4b, 0x63, 0xb4, 0xa4, 0x1d, 0x00, 0xe0, 0x59, 0x94, 0x1e, 0x41, 0x42, 0xf0, 0x09, 0xc4, 0x2c, 0x17, 0x1e, 0x23, 0x78, 0x3a, 0xdd, 0xab, 0xcd, 0xb6, 0x40, 0x42, 0x0a ],
-const [ 0xc8, 0xfc, 0xf6, 0xfc, 0xfb, 0xf4, 0x98, 0xb3, 0x3d, 0x3e, 0xcf, 0x12, 0x58, 0x8a, 0x59, 0x6d, 0x9f, 0xec, 0xc7, 0x9e, 0xd4, 0x33, 0x84, 0xfa, 0x49, 0x76, 0x13, 0x84, 0x46, 0xef, 0x98, 0x61, 0xab, 0x0c, 0x9a, 0x8c, 0xd6, 0xc4, 0x07, 0xcb, 0xc7, 0x28, 0x78, 0xe2, 0x82, 0x3a, 0xb7, 0x06, 0xb5, 0x01, 0x7f, 0x94, 0x9b, 0xdd, 0x82, 0x03, 0x20, 0x19, 0xb0, 0x18, 0x46, 0xbf, 0xb7, 0x58, 0xc7, 0xb0, 0xc6, 0xc3, 0xfc, 0xf3, 0x97, 0xbf, 0xfd, 0x4e ],
-const [ 0x89, 0x85, 0xc5, 0xdb, 0xc6, 0x72, 0x5a, 0x4e, 0x1c, 0xa2, 0x6f, 0x56, 0x67, 0xd6, 0xda, 0x49, 0x38, 0xa8, 0xd5, 0x42, 0xca, 0xb6, 0x9a, 0x69, 0x38, 0x02, 0x30, 0x75, 0xee, 0x99, 0x84, 0x6f, 0x5d, 0x73, 0xbb, 0xb8, 0xf4, 0x9b, 0xc7, 0x4d, 0x4b, 0x8f, 0x38, 0x4a, 0xa1, 0xea, 0x55, 0xad, 0x88, 0x40, 0x6c, 0x5d, 0xdf, 0x4a, 0x66, 0x6b, 0x01, 0x43, 0x9e, 0x97, 0x3c, 0x91, 0xf4, 0x16, 0x85, 0xa8, 0x1d, 0x92, 0x69, 0x2c, 0x3d, 0x73, 0x47, 0x55 ],
-const [ 0xe2, 0x43, 0xc4, 0x80, 0xff, 0x1d, 0xe3, 0x5f, 0xf7, 0xbb, 0xb7, 0x19, 0x63, 0xe1, 0x45, 0xb2, 0x0d, 0xc4, 0x3b, 0x31, 0xaf, 0xc1, 0xd4, 0xf4, 0xfe, 0x4f, 0xfc, 0x46, 0xe7, 0x33, 0xb5, 0x34, 0x19, 0xf3, 0xb9, 0x9c, 0xc3, 0x8c, 0x60, 0x86, 0x9f, 0x67, 0xc5, 0xb7, 0x2f, 0x8a, 0x24, 0x84, 0x47, 0x0c, 0x87, 0xe5, 0xcb, 0xcb, 0xa2, 0xca, 0xba, 0x61, 0xfb, 0xb2, 0x6b, 0x53, 0x4e, 0x79, 0x17, 0x8c, 0x2f, 0x71, 0x98, 0x0a, 0xf1, 0xb5, 0x70, 0xd8 ],
-const [ 0x22, 0x93, 0x33, 0x6d, 0x9f, 0xd4, 0x85, 0x70, 0xe6, 0x51, 0x5a, 0x4d, 0x7c, 0x49, 0x85, 0xda, 0xf0, 0xe1, 0x23, 0x0d, 0x6b, 0x6b, 0xd0, 0x65, 0x89, 0xe7, 0x1b, 0x85, 0x67, 0xca, 0x37, 0x23, 0xfe, 0xff, 0xf3, 0x20, 0xaf, 0x2c, 0xeb, 0xf8, 0x1e, 0x36, 0x00, 0x5d, 0x44, 0x07, 0x07, 0x1f, 0xc0, 0x8f, 0xbe, 0x4f, 0x6e, 0x08, 0x04, 0xa4, 0x3b, 0x7f, 0x49, 0x1d, 0x38, 0x90, 0x43, 0xe8, 0xed, 0x71, 0xe2, 0x83, 0xef, 0x32, 0x87, 0x21, 0xb5, 0x42 ],
-const [ 0xd3, 0x0c, 0x4a, 0x44, 0xe6, 0x42, 0x9b, 0xb5, 0xa3, 0x19, 0x25, 0x27, 0x63, 0xda, 0x22, 0xb8, 0x59, 0x3b, 0x78, 0x84, 0xc4, 0xca, 0x91, 0x24, 0x69, 0x8f, 0x67, 0x74, 0x41, 0xed, 0xde, 0x99, 0x6f, 0xca, 0x57, 0x43, 0x74, 0xf0, 0x82, 0x30, 0xa6, 0xb2, 0x73, 0xf2, 0xdf, 0xd2, 0xf9, 0xf1, 0x72, 0xa2, 0x2b, 0xb3, 0x63, 0x6a, 0x43, 0x5b, 0xd7, 0x0a, 0xb0, 0x70, 0xc9, 0xe0, 0x66, 0xe0, 0xff, 0xec, 0x79, 0x45, 0x3c, 0x32, 0xea, 0x66, 0xb8, 0x60 ],
-const [ 0xcf, 0xf5, 0x86, 0xfb, 0x91, 0xa1, 0xe9, 0xd4, 0x3c, 0x36, 0xa7, 0x6a, 0x4d, 0xce, 0xb9, 0xe1, 0x23, 0xdf, 0x15, 0x67, 0x03, 0x24, 0xd1, 0xc7, 0x5f, 0xdb, 0x8c, 0x3b, 0x58, 0x31, 0x0a, 0x82, 0x81, 0xfb, 0x1e, 0x33, 0xe6, 0xa6, 0xcd, 0x51, 0x4d, 0x71, 0xb0, 0x1f, 0xbb, 0xd9, 0x9a, 0x36, 0x3a, 0x55, 0x7b, 0xd4, 0xda, 0x44, 0x84, 0x77, 0xf6, 0x24, 0x8c, 0xab, 0xb8, 0x04, 0xb3, 0x20, 0xdf, 0x3c, 0x45, 0xff, 0xc0, 0x5b, 0xe1, 0x7e, 0x8b, 0x61 ],
-const [ 0xec, 0xe4, 0x04, 0x41, 0xa1, 0x68, 0xc8, 0x3e, 0x0e, 0x35, 0x6e, 0x68, 0x77, 0x88, 0x08, 0x1f, 0x07, 0xf4, 0xb2, 0x99, 0x72, 0x6c, 0x5f, 0x8f, 0xd8, 0x9f, 0xd8, 0x36, 0xed, 0x84, 0x01, 0x71, 0x57, 0x35, 0x5e, 0x45, 0x57, 0x00, 0xd7, 0x8d, 0xac, 0xbb, 0xb8, 0xef, 0xb4, 0x59, 0xfc, 0x0e, 0xd5, 0xbb, 0xcb, 0x01, 0x1b, 0xc8, 0x41, 0x05, 0x22, 0xc0, 0x71, 0x6e, 0x37, 0xcd, 0xaa, 0xe4, 0xba, 0xdc, 0xf9, 0xcb, 0xc6, 0xaa, 0xee, 0x03, 0x15, 0x22 ],
-const [ 0xa3, 0xa9, 0xc5, 0x59, 0x95, 0xea, 0x04, 0xd6, 0xac, 0x3a, 0x93, 0xee, 0x57, 0x9f, 0x6e, 0x7c, 0x96, 0x6a, 0xb5, 0xed, 0xaf, 0x18, 0x01, 0x47, 0x23, 0x77, 0xf8, 0x6a, 0xe0, 0x0a, 0x1f, 0x97, 0xb8, 0xad, 0xf0, 0x2e, 0x12, 0x7c, 0x2d, 0xbc, 0xdf, 0xf2, 0x73, 0x34, 0xd0, 0x4e, 0x12, 0x7d, 0xc6, 0x3b, 0x1c, 0x2d, 0x8b, 0xaf, 0xbc, 0x95, 0xbf, 0x14, 0xc9, 0xfd, 0x15, 0xa6, 0x9b, 0x30, 0xbf, 0x1c, 0x1e, 0x3c, 0x26, 0x8a, 0x24, 0x73, 0xdf, 0x86 ],
-const [ 0xcc, 0xf7, 0xc4, 0xe2, 0xa8, 0xe7, 0xa2, 0x7c, 0x7b, 0xc5, 0x44, 0x22, 0x21, 0x4c, 0x88, 0x0e, 0x7c, 0x25, 0x82, 0xd0, 0x68, 0x0b, 0x13, 0x95, 0xf0, 0x2d, 0xbd, 0xa8, 0xc2, 0xd3, 0xb5, 0x39, 0xe0, 0x45, 0x3a, 0x5e, 0x99, 0xe9, 0x26, 0x57, 0xb8, 0xab, 0xc3, 0x16, 0xfb, 0xa1, 0xdf, 0xff, 0xc6, 0xef, 0x23, 0xec, 0x19, 0xe9, 0xa0, 0x74, 0xc0, 0x78, 0xab, 0x6d, 0xc9, 0xbf, 0xeb, 0xaf, 0x3b, 0xfe, 0xb0, 0x1b, 0x05, 0xb6, 0x86, 0xdc, 0x35, 0x0e ],
-const [ 0x8a, 0x81, 0xd2, 0xad, 0x65, 0x58, 0x5e, 0x1e, 0x13, 0x83, 0x78, 0x3f, 0xaa, 0x17, 0xf4, 0x60, 0xc3, 0x95, 0x60, 0xab, 0x73, 0x0f, 0x95, 0x65, 0x7d, 0x8c, 0x8c, 0x71, 0xc5, 0xae, 0x73, 0x16, 0x08, 0x92, 0x00, 0x02, 0xcb, 0xf8, 0x06, 0x8e, 0x91, 0xa4, 0x46, 0x43, 0x51, 0x04, 0x87, 0x9d, 0x27, 0x12, 0xe9, 0x10, 0x4a, 0x7c, 0x76, 0x49, 0x3e, 0x02, 0xfa, 0xb6, 0x4b, 0x20, 0x14, 0x48, 0x2d, 0xee, 0x8e, 0x78, 0x0d, 0x44, 0xea, 0x88, 0xb0, 0x21 ],
-const [ 0x82, 0x81, 0xad, 0xdf, 0x98, 0x35, 0xf1, 0x30, 0x8b, 0xe6, 0x80, 0xdf, 0xae, 0x2d, 0xde, 0x6c, 0x52, 0xa5, 0x8b, 0x69, 0x8c, 0x9e, 0xe3, 0xd3, 0x39, 0x16, 0x43, 0xa2, 0x40, 0xe5, 0x6d, 0x9f, 0x17, 0x37, 0x2e, 0x76, 0x89, 0x3f, 0x3e, 0x0c, 0xb6, 0x2a, 0x67, 0x12, 0x5b, 0x52, 0xe9, 0xdb, 0x53, 0xb5, 0x1e, 0x6a, 0x5e, 0xa5, 0x5a, 0xd0, 0x22, 0xc1, 0x15, 0xb5, 0x6f, 0x23, 0x4c, 0x34, 0xc7, 0xdb, 0x24, 0xec, 0x1e, 0x9c, 0xd1, 0x53, 0xde, 0xb6 ],
-const [ 0x18, 0x3b, 0x4c, 0xda, 0x5c, 0x02, 0x82, 0xda, 0xb6, 0x2a, 0xa4, 0xe4, 0x8a, 0x19, 0xd3, 0xa5, 0xa0, 0x0a, 0xab, 0x55, 0x24, 0x04, 0x6e, 0x45, 0xf1, 0x08, 0x5e, 0xb7, 0x0f, 0x8f, 0x6a, 0xf3, 0x79, 0x34, 0x0d, 0x97, 0x24, 0xad, 0x74, 0x2f, 0x3e, 0xff, 0xdf, 0x05, 0xb3, 0xf2, 0x49, 0x3b, 0xf6, 0xc3, 0x4b, 0x16, 0xfe, 0x1a, 0x3e, 0x9d, 0x8f, 0x3b, 0xa0, 0x63, 0xba, 0x80, 0xb8, 0xa1, 0xa7, 0x07, 0x7d, 0x87, 0x92, 0xa8, 0xb5, 0xd4, 0x14, 0x2a ],
-const [ 0xfe, 0xe6, 0x03, 0x25, 0x85, 0x82, 0xe3, 0xa3, 0xe8, 0xfe, 0xb8, 0x86, 0x59, 0x9d, 0x4a, 0xc4, 0x05, 0xa1, 0x63, 0x4c, 0x32, 0x0e, 0x85, 0xea, 0x8a, 0xb0, 0xdc, 0x6b, 0xb6, 0x5f, 0x72, 0x01, 0x2f, 0x82, 0xa2, 0xe9, 0x51, 0xd2, 0xcf, 0x4a, 0xb2, 0x61, 0x56, 0x61, 0xb1, 0xda, 0xc0, 0xdb, 0x52, 0x0a, 0x3d, 0x82, 0x49, 0x9f, 0x4e, 0x1c, 0x54, 0x30, 0xc1, 0x90, 0xce, 0x7e, 0xe2, 0x4b, 0x82, 0xfa, 0xf0, 0xe2, 0xbd, 0x87, 0xce, 0xf9, 0xa7, 0x80 ],
-const [ 0x83, 0x2f, 0x87, 0xd5, 0x96, 0x44, 0x9a, 0xec, 0xa6, 0x56, 0xe0, 0xe0, 0xb4, 0xae, 0x92, 0xdc, 0xd1, 0x6a, 0x66, 0x88, 0x90, 0x20, 0xa9, 0xd2, 0xbb, 0xc4, 0x8e, 0xee, 0x45, 0xcc, 0xc6, 0x9b, 0x80, 0x91, 0x50, 0xa9, 0x90, 0xf9, 0x93, 0xb8, 0x20, 0x53, 0xaa, 0x42, 0x53, 0x82, 0xff, 0xdc, 0xfd, 0x5e, 0x1b, 0xb8, 0x14, 0x57, 0xbc, 0x6f, 0x61, 0x5c, 0x28, 0xfd, 0x7b, 0xfb, 0xc2, 0x0d, 0xf6, 0xc9, 0xdb, 0x78, 0xd8, 0x04, 0xca, 0x08, 0x4c, 0x77 ],
-const [ 0x92, 0xa0, 0xe0, 0x13, 0x15, 0xef, 0xb0, 0xb3, 0x47, 0x66, 0x65, 0x81, 0x56, 0x0b, 0x44, 0xbc, 0x58, 0x2a, 0xb6, 0x3e, 0x8f, 0x8e, 0xa6, 0x51, 0xec, 0xf7, 0x2b, 0xc3, 0xd3, 0xc9, 0x67, 0x3d, 0x1e, 0x02, 0xaf, 0xd0, 0x64, 0x6e, 0xeb, 0xd1, 0x7b, 0x1e, 0x40, 0xe7, 0x3b, 0x16, 0xed, 0x62, 0x85, 0x46, 0x73, 0xce, 0x84, 0xbc, 0xf9, 0xc8, 0x33, 0x17, 0xee, 0x11, 0x20, 0x3f, 0xf0, 0xe1, 0x6f, 0x53, 0xed, 0x7e, 0x21, 0xe3, 0x88, 0x0c, 0x97, 0x60 ],
-const [ 0xce, 0x4c, 0x92, 0x6c, 0x09, 0x22, 0xba, 0x36, 0x26, 0x9a, 0x20, 0xd6, 0x0d, 0xcf, 0x08, 0xd4, 0x3a, 0x1c, 0xea, 0x12, 0x0f, 0x26, 0x6a, 0xf7, 0x6f, 0x1c, 0x8a, 0xcd, 0x88, 0x3d, 0x1f, 0x68, 0xf0, 0x9b, 0x82, 0x09, 0xf4, 0x1f, 0x87, 0x82, 0x2d, 0xce, 0xb3, 0x9a, 0x54, 0x4a, 0xa9, 0xb2, 0x56, 0x9c, 0xe6, 0xa9, 0xab, 0x30, 0xae, 0xfe, 0xe4, 0x21, 0x46, 0x34, 0x84, 0xb8, 0x64, 0x7b, 0x11, 0x2f, 0xe4, 0x8c, 0x6b, 0xba, 0xbc, 0xd5, 0x5c, 0xc8 ],
-const [ 0x06, 0x49, 0xb5, 0x82, 0xdb, 0xc5, 0x98, 0x16, 0xa8, 0x04, 0x2c, 0xac, 0x30, 0xce, 0xe6, 0x77, 0x2a, 0x0e, 0xd8, 0xcb, 0xe8, 0xe0, 0x7b, 0xd5, 0x38, 0xec, 0xab, 0x8a, 0x88, 0xf3, 0xf3, 0xdd, 0x4d, 0xa7, 0x0b, 0x35, 0xa5, 0xc0, 0x9f, 0x1e, 0x3a, 0x4c, 0x52, 0x3e, 0x6a, 0x46, 0x03, 0x8c, 0xa6, 0x6b, 0x4f, 0xbc, 0x18, 0x49, 0x57, 0xfd, 0x89, 0x99, 0xc3, 0xe7, 0x81, 0xce, 0x07, 0xaf, 0xb0, 0xee, 0xe4, 0x9e, 0x8c, 0xa1, 0x32, 0xc1, 0x3c, 0x88 ],
-const [ 0x3d, 0x70, 0x94, 0xe0, 0x05, 0xea, 0xf0, 0xb1, 0x23, 0x1c, 0xf6, 0x05, 0x36, 0xf7, 0x68, 0xe6, 0x2f, 0x79, 0xda, 0xe8, 0x63, 0x74, 0x66, 0x0b, 0xde, 0x91, 0xa2, 0xe2, 0xfa, 0x94, 0xcf, 0xf5, 0x31, 0xe2, 0x53, 0x65, 0x30, 0x40, 0x6a, 0xce, 0x2c, 0xdd, 0x18, 0x71, 0x79, 0x93, 0x62, 0x93, 0x59, 0x6a, 0xbd, 0x20, 0x12, 0x5e, 0xc7, 0x94, 0x43, 0x62, 0x35, 0x1b, 0x77, 0xa4, 0x0c, 0xf7, 0xfb, 0x13, 0x15, 0x23, 0xed, 0x1f, 0x8a, 0x36, 0x96, 0xbf ],
-const [ 0x74, 0xd7, 0x2b, 0xe7, 0xfc, 0x8f, 0x4f, 0xd5, 0x66, 0xf8, 0x63, 0xef, 0x53, 0xbd, 0xb3, 0x61, 0x13, 0x7c, 0xb6, 0xd9, 0x6b, 0x79, 0xef, 0xdd, 0x95, 0x94, 0x11, 0x61, 0x89, 0x78, 0x66, 0x99, 0x7b, 0x16, 0x71, 0x0c, 0xa5, 0x52, 0xd3, 0xea, 0x46, 0xfb, 0x6b, 0x9f, 0xeb, 0x01, 0xc1, 0xa8, 0xed, 0xe2, 0xa5, 0xa5, 0x3b, 0x66, 0x13, 0xb0, 0x59, 0x8c, 0x5a, 0xee, 0xa9, 0xc4, 0x7d, 0x63, 0xea, 0x5e, 0xda, 0x0b, 0xfe, 0x43, 0x09, 0x26, 0xf0, 0xe3 ],
-const [ 0x94, 0x86, 0x9f, 0xf7, 0xb6, 0x16, 0x4a, 0x24, 0xe8, 0x9a, 0xb7, 0x34, 0xf2, 0x03, 0x22, 0x42, 0x1b, 0xd3, 0x15, 0x81, 0x54, 0x81, 0x39, 0xc6, 0xb4, 0x1f, 0x6d, 0x46, 0x24, 0x3a, 0x15, 0xa0, 0x5c, 0x02, 0xb4, 0x1e, 0x0e, 0xaa, 0xbe, 0x37, 0x60, 0x12, 0xa7, 0x59, 0xa0, 0xa4, 0x40, 0xe6, 0x33, 0x7c, 0x43, 0x7d, 0xcf, 0xcb, 0x2c, 0x7a, 0xeb, 0x7d, 0x4b, 0xc0, 0x73, 0x19, 0x18, 0xb6, 0xbf, 0xe9, 0xc6, 0x8f, 0xc6, 0x5c, 0x1b, 0xcf, 0x8f, 0xa8 ],
-const [ 0xfb, 0xca, 0x58, 0x6e, 0xdf, 0xa5, 0x76, 0x45, 0x03, 0x7b, 0x6b, 0x3c, 0xd7, 0x0f, 0xc3, 0x41, 0xe4, 0xd4, 0xec, 0x97, 0xaf, 0x4b, 0x3d, 0xcb, 0xe1, 0x8b, 0x36, 0xe9, 0xa6, 0x21, 0x0a, 0xef, 0x53, 0x1b, 0x5a, 0x82, 0x4b, 0x60, 0x44, 0xe0, 0x23, 0x43, 0x9c, 0x16, 0x04, 0x57, 0x79, 0x73, 0x51, 0x84, 0xf4, 0x3c, 0x8a, 0x5a, 0x2c, 0xa1, 0x71, 0xa6, 0x8e, 0xf0, 0x6b, 0x43, 0x53, 0x09, 0x28, 0x33, 0x49, 0x12, 0x86, 0xee, 0xd7, 0x6c, 0xb3, 0xfa ],
-const [ 0x62, 0x42, 0x48, 0x76, 0x9d, 0xc2, 0x74, 0x2a, 0x13, 0xe6, 0xb6, 0x9b, 0x5e, 0x72, 0x12, 0xca, 0x45, 0x9b, 0x36, 0xbf, 0x86, 0xbe, 0x5d, 0xd8, 0xd3, 0x52, 0x73, 0x60, 0x1a, 0x1c, 0x7a, 0x63, 0x09, 0xa1, 0x2c, 0xc1, 0xd2, 0xe1, 0xe2, 0x82, 0x2b, 0x42, 0xb4, 0x69, 0x99, 0xcb, 0xe2, 0xcc, 0xef, 0x92, 0x73, 0xa3, 0x11, 0x78, 0x1b, 0xde, 0xfe, 0x13, 0x62, 0xfc, 0x0e, 0xec, 0x03, 0xd9, 0x78, 0xeb, 0x92, 0xc7, 0x16, 0x0f, 0x62, 0xe1, 0x6d, 0x62 ],
-const [ 0x25, 0xcd, 0xcc, 0x9c, 0xb0, 0x14, 0x78, 0x4d, 0xbb, 0xdb, 0xb1, 0x3f, 0x56, 0xff, 0xaa, 0x63, 0xfa, 0x23, 0x4c, 0x91, 0x6f, 0x02, 0x36, 0x7d, 0xec, 0x03, 0x03, 0xe8, 0x81, 0x0f, 0xcb, 0x13, 0xb2, 0x9f, 0xec, 0x79, 0x65, 0x19, 0x0a, 0xbd, 0xfe, 0x5c, 0x54, 0xe2, 0xc8, 0x99, 0x09, 0xba, 0x97, 0x66, 0x3b, 0xa1, 0xab, 0x0d, 0xd4, 0x6b, 0xd8, 0x2a, 0xd6, 0x9a, 0xe4, 0x75, 0xe7, 0xd4, 0x31, 0xdc, 0x0c, 0x95, 0x9b, 0xd5, 0xb5, 0x22, 0xa4, 0xf2 ],
-const [ 0x3a, 0xc1, 0x05, 0xa2, 0xbd, 0x07, 0x05, 0x6d, 0x3e, 0x1c, 0x3b, 0xa5, 0x47, 0x35, 0x9d, 0xba, 0x94, 0xe8, 0xf7, 0x9a, 0x6c, 0x32, 0xdd, 0xd5, 0x32, 0xbe, 0xe4, 0xff, 0x37, 0x64, 0x12, 0x57, 0xd2, 0xf1, 0x92, 0xa5, 0xb3, 0x26, 0xac, 0x69, 0x74, 0x03, 0xf5, 0x31, 0x71, 0x45, 0xc3, 0x4b, 0xda, 0x2d, 0xe4, 0x9c, 0x06, 0x83, 0x90, 0xd0, 0x0a, 0xdb, 0x9b, 0xb4, 0x8b, 0x17, 0xef, 0xdf, 0xd0, 0x2d, 0x3a, 0x98, 0x1b, 0x2a, 0xe4, 0xf4, 0x3a, 0x77 ],
-const [ 0xb8, 0xd9, 0xd6, 0x74, 0xcb, 0x62, 0x3d, 0x7a, 0x44, 0x94, 0x11, 0xfe, 0xf5, 0x09, 0x55, 0x89, 0x92, 0xb7, 0xf6, 0xe3, 0x14, 0xc6, 0x4f, 0x85, 0x5c, 0x9f, 0xf2, 0x51, 0x19, 0x46, 0xa6, 0x81, 0xeb, 0xe9, 0xac, 0xde, 0xc9, 0xb9, 0x47, 0x32, 0xa0, 0xf8, 0x7b, 0xff, 0x3c, 0x53, 0x14, 0x71, 0x6c, 0x73, 0xea, 0x92, 0x61, 0xcf, 0x64, 0xbd, 0x58, 0xc4, 0x3b, 0x55, 0x79, 0xe7, 0x80, 0xb6, 0xfe, 0x9a, 0xe1, 0x6c, 0x97, 0xdd, 0x28, 0xa4, 0x0d, 0x67 ],
-const [ 0xc3, 0x9c, 0xe5, 0x40, 0x7c, 0x0c, 0x03, 0xdd, 0xfe, 0xbe, 0x82, 0xdc, 0xca, 0x40, 0x8c, 0x52, 0xf2, 0x6b, 0x64, 0x02, 0x7e, 0x38, 0xed, 0xd0, 0x0d, 0xd5, 0x70, 0x79, 0xc0, 0xf8, 0x9a, 0x82, 0x53, 0x74, 0xc4, 0x6e, 0x8d, 0x0a, 0x78, 0x34, 0xdb, 0x81, 0x30, 0xf0, 0x38, 0xf8, 0x60, 0xd9, 0x4f, 0x7c, 0xb7, 0x73, 0xe4, 0xd6, 0xa2, 0x06, 0x70, 0xa6, 0x13, 0x4e, 0x0b, 0xb6, 0x80, 0x74, 0x8f, 0x88, 0x2e, 0x3d, 0xfb, 0x31, 0xaf, 0x82, 0x15, 0x6a ],
-const [ 0x31, 0x86, 0x08, 0xb2, 0x13, 0x04, 0x6a, 0x3b, 0xad, 0xd1, 0x65, 0x5c, 0x51, 0x13, 0x5c, 0x7e, 0x14, 0x92, 0xc6, 0xce, 0xbc, 0x0f, 0x2f, 0x36, 0xe0, 0xd7, 0x7f, 0x8b, 0x4a, 0x98, 0x7f, 0x08, 0xa0, 0x72, 0x99, 0xfb, 0x44, 0x51, 0xe0, 0xbe, 0x78, 0x7b, 0x50, 0xe9, 0xc6, 0x65, 0x56, 0xc6, 0x9f, 0xcb, 0x93, 0x05, 0x42, 0xff, 0xdd, 0xb1, 0xdf, 0x82, 0x86, 0x63, 0xfc, 0xd1, 0xe1, 0xb6, 0x19, 0x81, 0x03, 0xfa, 0x8f, 0x8e, 0xc7, 0x2d, 0xbe, 0xf1 ],
-const [ 0x81, 0x57, 0x43, 0x23, 0xc9, 0x73, 0x54, 0x07, 0x19, 0xd1, 0x92, 0x83, 0x3d, 0xdb, 0x51, 0xf1, 0x3a, 0x52, 0xdc, 0xba, 0xe2, 0x94, 0xae, 0xbe, 0xa5, 0x1b, 0xe5, 0xf6, 0xaa, 0x47, 0xf3, 0x57, 0x1f, 0x5d, 0x97, 0xfa, 0xcd, 0xcf, 0x0c, 0x7b, 0xef, 0xbe, 0x80, 0x9f, 0x44, 0xbd, 0xc7, 0x39, 0x63, 0xd8, 0x51, 0x4e, 0x4f, 0xd5, 0x59, 0x77, 0x4b, 0xb9, 0x60, 0x87, 0xef, 0x8e, 0xda, 0x6e, 0x7c, 0x64, 0x27, 0x5d, 0x6d, 0x96, 0xc4, 0x2b, 0x4e, 0x4e ],
-const [ 0x44, 0xf7, 0x1c, 0x23, 0x17, 0xcd, 0xe5, 0x21, 0x51, 0xc8, 0x42, 0x60, 0xd1, 0xd3, 0xc0, 0x4a, 0x28, 0xcc, 0x15, 0xce, 0x5b, 0x38, 0x02, 0xb2, 0xe5, 0x35, 0x7e, 0x2b, 0xfc, 0xaf, 0x10, 0xab, 0x15, 0xd7, 0x7d, 0xfa, 0xaa, 0xd1, 0xa3, 0x88, 0x3b, 0xad, 0xa5, 0x02, 0x93, 0x99, 0x48, 0x23, 0x4c, 0x55, 0x9d, 0xcd, 0x95, 0xe7, 0xe1, 0x58, 0x33, 0x8f, 0xa1, 0x2a, 0xc6, 0xfd, 0x21, 0x87, 0x4e, 0xc2, 0xff, 0xab, 0xed, 0x05, 0x14, 0x16, 0xef, 0x77 ],
-const [ 0x7e, 0xde, 0xeb, 0x6b, 0x63, 0xc3, 0xb9, 0xc8, 0x36, 0xc4, 0x84, 0x3b, 0xa4, 0x6b, 0xfe, 0xbd, 0x8c, 0xa9, 0xa6, 0xe2, 0x05, 0xc7, 0xed, 0x68, 0xa2, 0x9f, 0x97, 0x10, 0xf5, 0x0c, 0x65, 0xac, 0x51, 0x9f, 0xf1, 0x7a, 0xd4, 0x94, 0xd9, 0xb0, 0xa5, 0x04, 0x1f, 0x58, 0x7b, 0x5c, 0xd0, 0x5e, 0x5f, 0x0d, 0xe4, 0xe8, 0xb2, 0x85, 0x66, 0xe5, 0x71, 0x5f, 0xd5, 0xe9, 0xb8, 0xd6, 0xc9, 0x38, 0x85, 0x80, 0xd9, 0x21, 0xbf, 0x39, 0xbd, 0x8d, 0x77, 0x5c ],
-const [ 0x6e, 0x1b, 0x66, 0x3e, 0x80, 0x8a, 0x69, 0x86, 0xf2, 0x99, 0x56, 0xb7, 0xb9, 0x70, 0x80, 0x66, 0x69, 0x6f, 0x9d, 0xfe, 0x0d, 0x7b, 0xcd, 0xb5, 0x56, 0x96, 0xd8, 0xbe, 0xf9, 0xb3, 0xb7, 0xc0, 0x52, 0xc8, 0x57, 0x88, 0x4d, 0x24, 0x99, 0xfb, 0x86, 0x03, 0x9d, 0x4e, 0xaf, 0x60, 0x40, 0x79, 0x33, 0x0a, 0xe3, 0xe8, 0x18, 0xfa, 0x6f, 0x74, 0x2a, 0xe4, 0x95, 0x93, 0x56, 0x0c, 0x5b, 0xcb, 0x54, 0x5b, 0xd4, 0x6d, 0x89, 0xb2, 0x2e, 0x7f, 0x2b, 0x7e ],
-const [ 0x20, 0x8f, 0x91, 0xcc, 0xc8, 0x79, 0x65, 0xd3, 0x65, 0xcc, 0x32, 0x5d, 0x32, 0x62, 0xb6, 0x42, 0x77, 0xf6, 0x11, 0x2b, 0x0b, 0x93, 0x71, 0xa4, 0x17, 0x4c, 0xee, 0x72, 0x1c, 0x2e, 0xb3, 0x26, 0x38, 0x73, 0x5f, 0xf2, 0xa5, 0xf8, 0xab, 0xbc, 0x82, 0xf2, 0x4c, 0x71, 0xd6, 0xdc, 0x1b, 0x9c, 0xd2, 0xb4, 0x73, 0x37, 0x56, 0x66, 0xda, 0xc0, 0xb7, 0x89, 0xe4, 0x90, 0xc0, 0x49, 0x55, 0x69, 0xf6, 0xa4, 0x86, 0x4e, 0x20, 0xda, 0x0a, 0x97, 0x07, 0x1e ],
-const [ 0x91, 0x57, 0x94, 0xa6, 0xc6, 0x54, 0x0f, 0x1c, 0xe9, 0x95, 0x8c, 0x27, 0x84, 0xce, 0xfc, 0xc1, 0x37, 0x72, 0x19, 0x8c, 0xab, 0xd4, 0xfa, 0x17, 0xc8, 0x8d, 0xe4, 0x5c, 0x28, 0x1d, 0x64, 0x8d, 0xcb, 0xd5, 0x9a, 0x10, 0x0c, 0xf4, 0xd8, 0xc8, 0xd3, 0x10, 0x6c, 0x96, 0x0d, 0xb7, 0xb9, 0x1f, 0x59, 0x57, 0x8d, 0xd0, 0x04, 0x5b, 0xae, 0x20, 0x38, 0x97, 0xb6, 0x15, 0x70, 0xe6, 0x21, 0x0a, 0x2f, 0x11, 0xa5, 0xaf, 0xf2, 0xf3, 0xc2, 0x51, 0x63, 0xdb ],
-const [ 0xb1, 0xa9, 0x5a, 0xa8, 0x0b, 0xac, 0x5a, 0xcb, 0x7a, 0x18, 0x33, 0x2f, 0xc0, 0x30, 0x67, 0x60, 0x06, 0x10, 0xf3, 0x76, 0xd9, 0x9e, 0x77, 0xa2, 0x72, 0xbe, 0x96, 0x06, 0x3a, 0xc5, 0xa0, 0xca, 0x8d, 0x31, 0x6e, 0x6c, 0xbe, 0x97, 0x8e, 0x57, 0x5c, 0xdc, 0xa1, 0xb8, 0xb4, 0xa8, 0x00, 0x8d, 0x97, 0x18, 0xa6, 0xfe, 0x5e, 0xb3, 0x4a, 0xf1, 0x2a, 0xa0, 0xcb, 0xd9, 0x71, 0x16, 0xd1, 0xce, 0xb6, 0x13, 0xb2, 0xe3, 0x97, 0x51, 0x92, 0xb4, 0x0d, 0x76 ],
-const [ 0x9e, 0x4b, 0xa7, 0xd7, 0x2b, 0x76, 0xed, 0xee, 0x6a, 0x6f, 0x29, 0x0e, 0xd3, 0x18, 0xbe, 0xdb, 0x0a, 0xd8, 0x8c, 0x84, 0x11, 0xf9, 0xc4, 0x49, 0xbd, 0x4f, 0xfb, 0x3a, 0x66, 0x1b, 0x7e, 0x41, 0xe3, 0x2e, 0xe6, 0x62, 0xb5, 0x52, 0xec, 0x42, 0x83, 0xe5, 0x7e, 0xe6, 0xc7, 0xc7, 0x12, 0xbe, 0xc6, 0x77, 0x3a, 0xe2, 0xc5, 0x78, 0x78, 0x9b, 0x7a, 0xfa, 0x54, 0x25, 0xc1, 0xb6, 0xad, 0xb3, 0x90, 0x1a, 0x4d, 0xb4, 0x2d, 0xa6, 0xc0, 0x55, 0x9e, 0x96 ],
-const [ 0x8f, 0xa1, 0x2b, 0xc0, 0x17, 0xbf, 0xeb, 0x6c, 0x89, 0x40, 0x20, 0xe4, 0x20, 0xc5, 0xf7, 0x6f, 0x90, 0x80, 0xe8, 0x73, 0x3b, 0x99, 0x8e, 0xf3, 0xa7, 0xd0, 0xb6, 0x56, 0x30, 0x63, 0xb6, 0x6a, 0xfa, 0x32, 0x00, 0xa8, 0x2a, 0x21, 0xf6, 0xba, 0x56, 0xbe, 0x00, 0x3a, 0x39, 0x24, 0xdc, 0xbd, 0xac, 0x1f, 0x36, 0x10, 0xd2, 0x90, 0x79, 0xc1, 0x92, 0x13, 0xe4, 0xe1, 0x4a, 0xe0, 0xe0, 0x09, 0xc1, 0xef, 0x91, 0x9b, 0x5e, 0x60, 0xab, 0x4a, 0x98, 0x19 ],
-const [ 0xc1, 0x8b, 0xc2, 0x8d, 0x49, 0x6b, 0xee, 0xdb, 0x25, 0xca, 0x42, 0xd1, 0xb2, 0x17, 0xbc, 0x81, 0x89, 0x1d, 0x4c, 0x2b, 0xbb, 0x35, 0x38, 0x0e, 0x5b, 0xb9, 0xbf, 0x7e, 0x3d, 0xbb, 0xfd, 0x37, 0xfe, 0xf7, 0x0e, 0xf1, 0x44, 0x07, 0x76, 0x34, 0x47, 0xd6, 0xc0, 0x6e, 0x91, 0x57, 0x66, 0x43, 0x02, 0x77, 0xf1, 0x24, 0x16, 0x50, 0x61, 0x23, 0x6b, 0x9f, 0xcf, 0x05, 0x7d, 0x78, 0x51, 0x99, 0xb4, 0x38, 0x1e, 0x49, 0xa2, 0xbc, 0xf3, 0xef, 0x85, 0xd0 ],
-const [ 0xdf, 0xd4, 0xfa, 0xa6, 0xb9, 0xeb, 0xff, 0xf6, 0xeb, 0x33, 0xd4, 0xb5, 0x36, 0xf3, 0xf1, 0x87, 0x85, 0xfc, 0x33, 0xe8, 0x2d, 0xdf, 0x39, 0x08, 0x73, 0x5d, 0x0f, 0xd9, 0x4f, 0x1f, 0x09, 0x66, 0x6f, 0xa8, 0xf2, 0x66, 0x7f, 0x87, 0x66, 0x11, 0xa8, 0xd1, 0x7d, 0x32, 0x56, 0xce, 0xaa, 0x7e, 0x3f, 0xf3, 0xe2, 0x24, 0xa1, 0x10, 0x00, 0xa5, 0xca, 0xcb, 0x68, 0xe6, 0xde, 0x4d, 0xea, 0x84, 0xd5, 0x3b, 0xea, 0x67, 0xc3, 0xe8, 0xbe, 0x9a, 0x5c, 0xc9 ],
-const [ 0xc9, 0x6c, 0x04, 0xa3, 0xbb, 0x08, 0x16, 0xfc, 0x47, 0xe0, 0x59, 0x13, 0xa7, 0x15, 0xfb, 0xac, 0x9a, 0x3a, 0xd0, 0x9d, 0xb7, 0x5b, 0x48, 0xe8, 0x01, 0x3d, 0x9f, 0x27, 0xbb, 0xe8, 0x53, 0x2d, 0x7e, 0x63, 0xdb, 0xea, 0x88, 0xbf, 0x96, 0x8f, 0x57, 0x56, 0x02, 0xf3, 0x77, 0x55, 0x2e, 0x35, 0x98, 0x78, 0x72, 0xa4, 0xe3, 0x15, 0x5d, 0xdb, 0x8e, 0x5c, 0xef, 0x30, 0xae, 0xdd, 0x08, 0x50, 0x4d, 0x4b, 0x21, 0x23, 0xbd, 0x7f, 0x3a, 0xf6, 0x2b, 0xbf ],
-const [ 0x93, 0x19, 0x83, 0x84, 0x32, 0xca, 0x09, 0x69, 0x60, 0xe2, 0x19, 0x6a, 0x06, 0x39, 0x81, 0x34, 0xea, 0x06, 0xe4, 0xe8, 0x79, 0x9b, 0xa4, 0x70, 0xc5, 0x4f, 0x05, 0x12, 0xca, 0xbb, 0x90, 0x45, 0xf5, 0x29, 0xb6, 0xc4, 0xe7, 0x49, 0xb6, 0xe2, 0x76, 0x26, 0xc1, 0x1d, 0xf4, 0x59, 0x5b, 0xf5, 0xb4, 0x7c, 0x04, 0xff, 0xcb, 0xe2, 0x18, 0x35, 0x14, 0x85, 0xf4, 0x90, 0x77, 0x40, 0x5a, 0xd9, 0x6a, 0x3f, 0x17, 0xbc, 0xb7, 0xb3, 0xe2, 0x1e, 0x80, 0xca ],
-const [ 0x29, 0x14, 0xda, 0x23, 0xe8, 0x6a, 0x60, 0x3c, 0xda, 0x1e, 0xed, 0xe1, 0x53, 0xbe, 0x24, 0x31, 0xc2, 0x94, 0x7c, 0xda, 0xee, 0xd6, 0xa1, 0xea, 0x80, 0x1d, 0x18, 0xe2, 0xc2, 0x18, 0x22, 0x0c, 0xa6, 0x82, 0xe4, 0x0f, 0x0a, 0x51, 0xc4, 0xc1, 0x3a, 0x31, 0x16, 0x3c, 0xb7, 0x30, 0xf8, 0x34, 0x37, 0xbb, 0x7a, 0x88, 0xec, 0xc9, 0x03, 0x16, 0x09, 0x56, 0xf0, 0xd4, 0x83, 0x13, 0x7d, 0x1d, 0x14, 0x5c, 0xe9, 0x48, 0x86, 0x6a, 0xd5, 0x7f, 0x2e, 0xca ],
-const [ 0x4b, 0x7a, 0xb1, 0x33, 0xef, 0xe9, 0x9e, 0x02, 0xfc, 0x89, 0xa2, 0x84, 0x09, 0xee, 0x18, 0x7d, 0x57, 0x9e, 0x77, 0x4f, 0x4c, 0xba, 0x6f, 0xc2, 0x23, 0xe1, 0x35, 0x04, 0xe3, 0x51, 0x1b, 0xef, 0x8d, 0x4f, 0x63, 0x8b, 0x9a, 0xca, 0x55, 0xd4, 0xa4, 0x3b, 0x8f, 0xbd, 0x64, 0xcf, 0x9d, 0x74, 0xdc, 0xc8, 0xc9, 0xe8, 0xd5, 0x20, 0x34, 0x89, 0x8c, 0x70, 0x26, 0x4e, 0xa9, 0x11, 0xa3, 0xfd, 0x70, 0x81, 0x3f, 0xa7, 0x3b, 0x08, 0x33, 0x71, 0x28, 0x9b ],
-];
-
-const hmac_sha256_macs = const [
-'05d1243e6465ed9620c9aec1c351a186',
-'c4061427764f979468ac422891dea9ca',
-'1a0d427e79a7bdca7b11579339d0ff77',
-'f0d7c63677033ada0b502a4e95b20e43',
-'f6302c5fd7c8495e233b5d6129f361da',
-'fbecae19c2ce766d286c8ce70133b669',
-'cec1ed7aa0f1cbd6b7f667a079a88577',
-'ae73b3740a7a8a07223635faaef0ba71',
-'4304f9864598f801c6aa1a692aabb8be',
-'edad94e7c30813be7c5ac58df418d8a8',
-'d78d7d266cf83add4355e7395b63adfd',
-'b7de3be2fae6ab41aa6386b8460223c6',
-'380eaf65a9be83322508498748504b50',
-'b452d180b9cacc10cb012f48dd19e4cd',
-'3f6417a99d7186bc36e6d0d61467360d',
-'28f1b663213043c4d4fb312bd36d85fbe62c8008ce82aabc',
-'7c2e5f1fdbda3c153536ec7136091eba0ba525b950bfc84f',
-'dd3334fabe8d0d51084c1e99a2a7fa8548c4cbbeec854fb4',
-'bddd77019ee3e2a16e65713089b23f0ef13e5f3ae6da5052',
-'7794f8fe7ace77512eb98a5459aaebe28ae1e8c62832b5d2',
-'d0119cf3ad1dd9e917ab325c0b85927819ed606084542944',
-'335ee9a4c96bfcfc38c76f7ace6c84adfd0a57a94efc23b2',
-'5adf1391c94a60602cefe1bcc610060de90a4b7b8822db1b',
-'312cd3f6c27e3ece5ed08f1020c815277f7e98bc3bcd0248',
-'a80b1a06ed13f5579a785f7965ab180908a07f152ea81e2e',
-'68934f2d0de64c4e4eede0b1d867630da790c111371458d5',
-'de9a7e21d30725d253fc4d09a3fd21530d788795d672c057',
-'61a0693f740c3b121238cc904e98c671563d506780960a00',
-'014d599f9490a22b69824f8cce92f30c0542cea92b621a10',
-'431d287099550ba9e523dd1308b0514cdc5faddb04ebc4c1',
-'769f00d3e6a6cc1fb426a14a4f76c6462e6149726e0dee0ec0cf97a16605ac8b',
-'6b142d4dfe217f1881aa0e6483b271dd5d43f70b85605953a0fef272ddde46ca',
-'20153bf8ea2953c48251ebcc4161f8b6e28499e5c76c24014cff4a9e2f62d25c',
-'7e8cba9dd9f06ebdd7f92e0f1a67c7f4df52693c212bdd84f67370b351533c6c',
-'cdeacfcebf46cc9d7e4d4175e5d8d267c23a64cde83e867e5001ecf26fbd30d2',
-'0c19ab5d4ee7b64396eff7b2ca9efa5ca7369c1a1ed14952445d2fb5ece9473a',
-'a9c9d3993fe7ec4c2033ccf3b73b3407cd999d67455b43a75d6ba97efda3be63',
-'468d8498d46afe74a0ffb541b847bac724faeabd48c41322bf534b284c4e9fe0',
-'29973999c4ec891154b83ebe5b0201cf29205d68e7be2c1d59bbc81658d6668e',
-'50db0ecb5b31524a6914264930abccae0da07f01a2bbb9408207156f8e8a340c',
-'a5772a3da86365b46638f1e97037fc0d8351d2e19ed929f85448ebf4e8379a8e',
-'5f1b8de0e3b07da6f9ce1a494be5712e54ac16080bb4f6d5373620d86d5ea5c7',
-'8e44d685fa79395b4761cab89688e37509e69ad007a2794c8c0b4152b67036ea',
-'905d55da5d290d023f6940fcb904c50e70181c95000eb1e6a33aa01077692736',
-'9045dd3fa6e8f2ef7c57b03932d244186caa1bc1d4b694c47e1f2901d9eba193',
-'0b3b220ee7a4fdcb0d17a5c8b595b981',
-'a17d0e0f021184a3937222de81be627c',
-'da4571749322008e73dd436a13c5f11d',
-'20cccc1ea0a8a89b3bc5fe3d5a9c2b24',
-'5eeec5bd9583ce715d613d4c04a702f9',
-'64d5ad7697a29529ca3ca4ff65e7d735',
-'c4fdcba979357f639cc6d89e7970943a',
-'ea411f749902bb0d2fa36e07e694da8c',
-'7a699c1ce4e323fe1b9ff6dea2038aa8',
-'e2a380effe8de7d29948c5d9d7bb39a9',
-'54e871ae687626fee5669ce20cc48041',
-'eb5b96d2f51d56464b95da4927ec5a64',
-'020d5aca34d8c7066ef5d8c9b3429669',
-'0d700ca9ffc418b29fc8e316acbc1abb',
-'6696e3812da4807f05b84a29ad9143ae',
-'4cd095ce641f217f8b5f355152eed00b1d9fd721a08dc5a0',
-'646abbd426255d2e369b7ac9eb3c3af19c7185ecd28bd82c',
-'3d731839c004ecef8ab60fafd811d0bbe6e306f7cc802bdd',
-'0a4f17a280f9017f1435cb8a11738fda4f14e3f222f06b86',
-'5007afb09312d144091f2b35618c26714bab8784d8be35b8',
-'08c4699d15dcaef9e99556ece73793e006c86d25c8be3fc7',
-'66a57a169d8d0ba263dd954b342919f4622592eed20c1981',
-'7959e5367720f3af55ae91843397134032ee73de6a8db8ac',
-'d39eefe024ce0b545d77ce327f0731c5581095ca734c21fb',
-'3accf0eec5b26ea6c936323b42636e5899f4bfe7e7cbdf3a',
-'55adbc7d757e6904448ebdbae5a8773a1781f952f5bdeec0',
-'22950977bf0f3fb8f4fc53ad2ea2c91d936aa98d06ce067e',
-'646031963fc8bf827a30924763dca11b589358e7029daf1b',
-'00aafb9109999ccf61f6689b7405ad2fa54129c3bc4e67b8',
-'1c8b29577349cf99f80ca11477f401f61e0b1a4d6974fc61',
-'737301dea93db6bcbadd7bf796693961317ca680b380416f12f466f06526b36b',
-'7786c155d10c741b63ec650b7b1aa3bfd71ac71881ad06ae98fb082f17e0caa0',
-'c02c6022ee0de099e3027850be95a29ce800118ed3a97757dd8ab9e60f69a005',
-'13e0834e4dd72a2ef7872249bf895da4432329c6e8ade8665d702ba33bb677b0',
-'cd251e66c421bad1b37cfebfa3c04ef30b8be4e5526b10fc48fd5bc5d6f04bb4',
-'9d283d8e8e473a16162d186e96355b1885370e83954dbd08622dbe64f0aac695',
-'6ab8f69868b4c87fdec9a031045b34b66660212f687a83d561bc4f9caad59fff',
-'4746e6f151caf29b3534b2f493f7cc1308fa119116d251481572a1b53a8a1b3a',
-'2c723282159ceabc5b367b95cd807f249f1dff7f9ebf5ba179a43081454e1b05',
-'22de07c3055a8935b52bb2c85a9a6b7ffd4038b5db4069c07e9e86ee1b171d25',
-'dd1a8105ab753d83d90ab39adbc748940fefda05bedea7eeebdbdf54b02d9ae1',
-'441c7fdaa40e50bf1eba073509769b1c0942f3a16e1e183435819d3b5f8538cd',
-'15c62ce7a3bfd5b3b3856d6f47cb19bb7030dc469e35a27807511f81ea83091c',
-'d5596bcc39af2782df1cd9fc8c37a8f96789275422f511280971d8429a8cb661',
-'223dfaf583140a769c805c33f1f30bfb2f0926b088f55439dfeb4f5a9ceeedf1',
-'b5b0c43028e81628dce82517fa36aa29',
-'b84003c417a472fd2935341962744330',
-'e1c3c6d90820511c8d685c73bb757ee2',
-'5f840796e0d35c807b3d715727432e68',
-'5a33b8f7cdba999ed61fab3869b8f1e9',
-'aedb7ea80734d1a65723da4f3ba18f86',
-'9f19ab5e517e884cc1b1d3124ec9ca50',
-'03243d10c48609e8f4182638c23516a2',
-'03364863690c439b306a2967daa2418c',
-'d360c381d230d21cf828782ae5e389f1',
-'3df86c710d782309023d65fccdb91db4',
-'83467cdf51f59916b492c5aba554c606',
-'0d88a7f3a8369888b4c3223499412256',
-'84ac389ad6e42798a97784941bb76fa4',
-'fc38c3bddbc320bf7373834f3c83ac67',
-'2c2bc8c87017f204c958abd9aab2beb6ac67781d8d9d804c',
-'d722b57c48128b37ba38770cbf4660697757bab95c00c484',
-'3d6305ad9dcb3a50105b92f331009a3cb03ca7ec36882fcc',
-'35fa859b3e4a793b2329652cc61f9f68816fed67fa402e1b',
-'aaed7dbe184423f0b4c9ff72dcf4557ec123b49682fc24c3',
-'51ac4d2b5923a5df8ec48c14ec514a0629f8e385a9ea4985',
-'20dc2be5c7f0b2fa8eaf026c152a09cadbdb82e52538b393',
-'da713e318a9e5b4b4f1dfe0a2af0837d70fde54442f264ff',
-'5ebf7b7d25b0ff498322e4264bda56f7512e9d4ce3c9d51e',
-'4f0a78dbbe767218eaeac0400656c4b4b23f908a9e7f4708',
-'e6e7baded94fd4042c2d3ccb586d8ca983e8033e4ccffc68',
-'d9eafa06a75b5b671be1b1f1e6296f17f71ff467417b7837',
-'e7928a55a3e4274394d81988a08196e07d5a5df047140690',
-'b4c5612cb1c1dc4333450daae500cdbcfe3ee1e3ef7a0d61',
-'3d0a38dfe4a8801ab9f9dc1446c535d792393ea8d763db4d',
-'2f8321f416b9bb249f113b13fc12d70e1668dc332839c10daa5717896cb70ddf',
-'2d3a760595f3fb19293cc6d23651222a9f5a4f02284457a9c1ed4c43ac993ca5',
-'6dc2b05619ad5458ee3de70b0c1649b3788e1a5312e8924b5486905506970881',
-'837ecd647e03fe8df9a92c32dcbc87d0734851ffbc17376e03218cce9cbe974f',
-'9cd24a0efa26c107738f5335526b57d8c93e54fef8c1babbbbb2d42f3a1d03c6',
-'1cbd4f923d683ca38aca6cd0ad81151062fd642b155b2a950eb551ca8216b0ca',
-'4f2501d2a88cb13046a6549f90e4ea924773408bb684025b5126a8fc21f48670',
-'83b1403389173568588e5b6b8cf9da180408c79f91d054ac5cd99de0b728ff66',
-'2f1a4c2bde7c8bdd7d8a9b6315b19ac654266120c652fc24ab19e00ac11c5461',
-'579d35cef5b6f8468c8285829861e93587c8dee5791208406a7f4bfafb70abfd',
-'810d7bda3421589a7dd60597447edf2b987f1e7283f3c65890248712c80969c1',
-'055ee0ade716231bcaa0a7d18161004127a37e7aa12773433a376073474d3d58',
-'eb5aaa4ee702ff7b5324bc72c98fe87df6d9cc342b053ebce6cbf27fdea0eabf',
-'26db47a48a10b9b0b697b793f5c0231aa35fe192c9d063d7b03a55e3c302850a',
-'0e445d77789a6947da70848dc4da5dc9c125869bb6945b04304bde93829a75d9',
-'b3a189a17e8d9e986cd31bbe01b49fb3',
-'7aea0e2d93e9a6a3004117ad4a4a72a3',
-'04c8f6ebcbf13fdd2ab1e5c5c25bc7ec',
-'c7e82b7b2478c319194fed944fb7c772',
-'589afd7086a58d77f046c59a419504a1',
-'8cbd8f921c55d36e5b7db27f7891def1',
-'1c649a21afe336c72c4593cb3d3c9462',
-'9ca6f24c476e59b5b068c37b0383ff4b',
-'48fc1d0123e5c7f686d74f5903323f9b',
-'41fe6d923bfb13fcec839d3c272383a6',
-'b6aa4e0beccfdd37588699435e2d40de',
-'98323e25ea0635d6abe384e8960f373c',
-'591d11b2bd18f982bccb6b3a44f760a3',
-'3d4a25554afa0abd26f72377c7180e19',
-'2d2ac1291e545de46a42ce6c435518f8',
-'08e3a1718c6d1cdef2c0c67660f7c1e8a45963e5ffed54a7',
-'b579eaf7706976152b1622c17fc47c5db3802aa3f46f6a3e',
-'53f3436a128fd497c5cd1a534558d6a6bdb5f086efabc6fc',
-'5a841e55fb2250c431fa397f1d0ec858b2c4a08e40dc897c',
-'dbeefbe2f550671d7fcd3d5bd66d19ce9faf5e6b29308ef8',
-'95beb7fcb2b8d049adef7e0f33a7792c8d71e10b71ad3efa',
-'2f8d11fe7f6c07bdd0d33dfcb3fc7dec51fe2048d1e8db44',
-'f51032cef423d7846270d8bb43f7d8426e392fd92b753a57',
-'a87d01c705415dea8cb9f0e2b6663b629f88a5ce793ea8a3',
-'97f3b4e61b5885dc4c7f69f79a07d7a40c2d1d2e3936b91b',
-'1fc68ed1bad0898d691970b530b54cef7c2733a7f1ffd276',
-'10ab06d732cdf46a1711dfab98e136c4e6ed856ea0678efd',
-'aaf4fc8d00177a99d1c895d72b3a63e7ce15f1bc3946f338',
-'edfc7a2815d6779681590f3855e668f2c2d44e64c773e711',
-'ac38d22527983468cc48efbf64cbe1307022327207fb7f94',
-'49ae1c4a7a570fde47f7517ab18898b1b991d03cfcf8c45bb3615b5f755da682',
-'37f9f32918308210849dfebf8dd456804babd6845af07218f9d9be9df9743d55',
-'5c258ba6241f65c2ee5356bb47332236baea227857e29506165861a4c7379c51',
-'3c5a9ac2a0fa2f58825233ff676bedf93d8845a409a42a05a9ae5218cea14680',
-'f15a210fca2cefc4d92bf14ff572d021463bcc28f60d034e87222dc6076eaffe',
-'6c63bed6c6082bfb085cf2426ef3d0dea97acd717a57ff0aa624d0b803f2ea14',
-'d08563dad7c32c02b305b87fad504918fd566c433e98a1367a3dbbadb26e9b64',
-'5717fc337916d66b4e292e69d507b1c81663d8140536670f3e70e33b04c83ac3',
-'3e0212e7982f43fc303d5e8457d2ab630aa257302ac489c74976cc5678823931',
-'d965907e6d0f926a7ea719464b1034a5879c865a00d4df0342b2d4f4bde0976c',
-'9c22961d48d0651bd592fd369129e44822ee22d35c142dcb6b60a725bf177c85',
-'a6109ba372c4564f4ed8c875619ff5bb64d503225197ee9259dd50264eb1f4ea',
-'c580c8e0f6a1f36403322f7b0ae3d06dd2dfd16ebc6dddd205704e97dc2998e2',
-'a51f5988a8f0f3992f549ea7f8c370a06d5ae8d65880067997536385d632b206',
-'974752b18d0dcbf29cc6104295e041259622cb7733cff63dbcf6808b15a5ad45',
-'7966440df79b13e95c41346eb792f3ec',
-'d7baa0117d008af786c2bacb38b9d386',
-'7588b290c3adf86198354e3eee4fc06f',
-'99066156163139a8735711534c022937',
-'0bfa572019e6d0f987f79b03ad67ad09',
-'ec8356beca9d87dce7d010de113b9fd5',
-'b7a1d83414cbbde7a7738c7e77cbfe3b',
-'495f4ccb0530c7b1f03f3285faaae818',
-'836034775fc41e033c56ecf21d1874aa',
-'43385c80a077720fbb417848e4fa0138',
-'9014a5bb17057eb39ab9fe59436e6c9f',
-'e4c09bb7f5ee13351baf8f4fe7386711',
-'a43a35e87ddb24ac3420c60c99090ba8',
-'d02c59ac11fc434a37eded33245701bb',
-'c6d5ed018b85568d03fce635a1332e1b',
-'f914c842b78c3b91fe6626272c04f6bfa39c586d4823ce0e',
-'c68f215b059881c9f97117b3c6d9d6deea2e0945e3e1972d',
-'3d516a213a6b8c7e3434138238ca5e339fc21038fb7bfd21',
-'94c47b509bd0c9b7aa95289a00a8a54efd425481307e9ebc',
-'9bd70f0386405c04d1bfcaa538b4099abea343c5c4379482',
-'59526ab645c2c0f464a48e411d111abe9aea19edced55383',
-'8ce0b5dde0328c9de6d4acf84ff61b3f7d01f9e9e8e36b91',
-'549afd1666a491b7ee9ccf6db2a33b2e3c2a21cfa69a1b17',
-'0cbfe6e817d297b69d5bd7740bb0e5172d86cf870a9c4da4',
-'ed1fb08b8473af53d2fe4c607e5ab9639cdd11f728462294',
-'4cb070e34b3a2ecb460670ffdd457f23c9a1174bccd35f25',
-'e5d5cd2e163ec1c883388f5f01980d3bbee914586ddd5b0e',
-'64ae3ccfaa118acc556ac50e53cd9fdf7d7e3f4b785b2e20',
-'0d2e37440adeb6836d7f47d9c516124ebbd64abd435d4c98',
-'95b0a9f0ed9fc80581407664300488f5223720148618b1b9',
-'514bd18495f6de0e237054b8e3ba1a74c3fada4279ad6b8550f3a14712c528df',
-'ca0053d51f6cf6f9998ff1e0db00b90e82c7b18cb5377acc8ebe9afe20da1c3d',
-'5131ce486de164491b4bbc84e7e461a874a2cfdd769355584a063e306960acac',
-'665344e5618e0c1fb8758d049409a484fa69b89b009746067ea036bfa0ee8a37',
-'42680195f431e71b592899686af630e15996dc718cc29030163d677688a33021',
-'2ca1bb808448eb29085286594de21e254fb3416f9ab01e99ea33ca83c1d14dc3',
-'988d4a6fa87f8138d754c5de9d176c45eaccf8eb8ca1799d87c8f04a966b6f4c',
-'ee6492a669e22bcf19bbdfc45495cd0efa9c2f2ef5d42831e3f13a545cbcd6a1',
-'9611e838fb1d816a0ff9cd269217d93258c34df9e26b74476fe4da0f7dee2335',
-'0bb4127d89d9073ea425c303adc3f9db39e40adac23ea61fba8b6e251d79390f',
-'109ebb4cb2ad746762b6652fc63b99019857ae89acfe9807648c3cfa151fed42',
-'b53db6bf0c8317586ae6c1a1e2857f241bf55dddd1b423578c6949d4bf014611',
-'4a34bd4dfeef7fa1dc739280f16a3fe1281a51311c10a920ab43d406d4ae3370',
-'4de7bab7fe9a0a9bf7b51a7cdf7d929f2b1c6ff4575fd527baba1efdf4254890',
-'4f1ee7cb36c58803a8721d4ac8c4cf8cae5d8832392eed2a96dc59694252801b',
-];
diff --git a/pkg/crypto/test/sha1_long_test_vectors.dart b/pkg/crypto/test/sha1_long_test_vectors.dart
deleted file mode 100644
index cc0d9e6..0000000
--- a/pkg/crypto/test/sha1_long_test_vectors.dart
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of sha1_test;
-
-// Standard test vectors from:
-// http://csrc.nist.gov/groups/STM/cavp/documents/shs/shabytetestvectors.zip
-
-const sha1_long_inputs = const [
-const [ 0x7c, 0x9c, 0x67, 0x32, 0x3a, 0x1d, 0xf1, 0xad, 0xbf, 0xe5, 0xce, 0xb4, 0x15, 0xea, 0xef, 0x01, 0x55, 0xec, 0xe2, 0x82, 0x0f, 0x4d, 0x50, 0xc1, 0xec, 0x22, 0xcb, 0xa4, 0x92, 0x8a, 0xc6, 0x56, 0xc8, 0x3f, 0xe5, 0x85, 0xdb, 0x6a, 0x78, 0xce, 0x40, 0xbc, 0x42, 0x75, 0x7a, 0xba, 0x7e, 0x5a, 0x3f, 0x58, 0x24, 0x28, 0xd6, 0xca, 0x68, 0xd0, 0xc3, 0x97, 0x83, 0x36, 0xa6, 0xef, 0xb7, 0x29, 0x61, 0x3e, 0x8d, 0x99, 0x79, 0x01, 0x62, 0x04, 0xbf, 0xd9, 0x21, 0x32, 0x2f, 0xdd, 0x52, 0x22, 0x18, 0x35, 0x54, 0x44, 0x7d, 0xe5, 0xe6, 0xe9, 0xbb, 0xe6, 0xed, 0xf7, 0x6d, 0x7b, 0x71, 0xe1, 0x8d, 0xc2, 0xe8, 0xd6, 0xdc, 0x89, 0xb7, 0x39, 0x83, 0x64, 0xf6, 0x52, 0xfa, 0xfc, 0x73, 0x43, 0x29, 0xaa, 0xfa, 0x3d, 0xcd, 0x45, 0xd4, 0xf3, 0x1e, 0x38, 0x8e, 0x4f, 0xaf, 0xd7, 0xfc, 0x64, 0x95, 0xf3, 0x7c, 0xa5, 0xcb, 0xab, 0x7f, 0x54, 0xd5, 0x86, 0x46, 0x3d, 0xa4, 0xbf, 0xea, 0xa3, 0xba, 0xe0, 0x9f, 0x7b, 0x8e, 0x92, 0x39, 0xd8, 0x32, 0xb4, 0xf0, 0xa7, 0x33, 0xaa, 0x60, 0x9c, 0xc1, 0xf8, 0xd4 ],
-const [ 0x6c, 0xb7, 0x0d, 0x19, 0xc0, 0x96, 0x20, 0x0f, 0x92, 0x49, 0xd2, 0xdb, 0xc0, 0x42, 0x99, 0xb0, 0x08, 0x5e, 0xb0, 0x68, 0x25, 0x75, 0x60, 0xbe, 0x3a, 0x30, 0x7d, 0xbd, 0x74, 0x1a, 0x33, 0x78, 0xeb, 0xfa, 0x03, 0xfc, 0xca, 0x61, 0x08, 0x83, 0xb0, 0x7f, 0x7f, 0xea, 0x56, 0x3a, 0x86, 0x65, 0x71, 0x82, 0x24, 0x72, 0xda, 0xde, 0x8a, 0x0b, 0xec, 0x4b, 0x98, 0x20, 0x2d, 0x47, 0xa3, 0x44, 0x31, 0x29, 0x76, 0xa7, 0xbc, 0xb3, 0x96, 0x44, 0x27, 0xea, 0xcb, 0x5b, 0x05, 0x25, 0xdb, 0x22, 0x06, 0x65, 0x99, 0xb8, 0x1b, 0xe4, 0x1e, 0x5a, 0xda, 0xf1, 0x57, 0xd9, 0x25, 0xfa, 0xc0, 0x4b, 0x06, 0xeb, 0x6e, 0x01, 0xde, 0xb7, 0x53, 0xba, 0xbf, 0x33, 0xbe, 0x16, 0x16, 0x2b, 0x21, 0x4e, 0x8d, 0xb0, 0x17, 0x21, 0x2f, 0xaf, 0xa5, 0x12, 0xcd, 0xc8, 0xc0, 0xd0, 0xa1, 0x5c, 0x10, 0xf6, 0x32, 0xe8, 0xf4, 0xf4, 0x77, 0x92, 0xc6, 0x4d, 0x3f, 0x02, 0x60, 0x04, 0xd1, 0x73, 0xdf, 0x50, 0xcf, 0x0a, 0xa7, 0x97, 0x60, 0x66, 0xa7, 0x9a, 0x8d, 0x78, 0xde, 0xee, 0xec, 0x95, 0x1d, 0xab, 0x7c, 0xc9, 0x0f, 0x68, 0xd1, 0x6f, 0x78, 0x66, 0x71, 0xfe, 0xba, 0x0b, 0x7d, 0x26, 0x9d, 0x92, 0x94, 0x1c, 0x4f, 0x02, 0xf4, 0x32, 0xaa, 0x5c, 0xe2, 0xaa, 0xb6, 0x19, 0x4d, 0xcc, 0x6f, 0xd3, 0xae, 0x36, 0xc8, 0x43, 0x32, 0x74, 0xef, 0x6b, 0x1b, 0xd0, 0xd3, 0x14, 0x63, 0x6b, 0xe4, 0x7b, 0xa3, 0x8d, 0x19, 0x48, 0x34, 0x3a, 0x38, 0xbf, 0x94, 0x06, 0x52, 0x3a, 0x0b, 0x2a, 0x8c, 0xd7, 0x8e, 0xd6, 0x26, 0x6e, 0xe3, 0xc9, 0xb5, 0xc6, 0x06, 0x20, 0xb3, 0x08, 0xcc, 0x6b, 0x3a, 0x73, 0xc6, 0x06, 0x0d, 0x52, 0x68, 0xa7, 0xd8, 0x2b, 0x6a, 0x33, 0xb9, 0x3a, 0x6f, 0xd6, 0xfe, 0x1d, 0xe5, 0x52, 0x31, 0xd1, 0x2c, 0x97 ],
-const [ 0x64, 0x87, 0x97, 0x2d, 0x88, 0xd0, 0xdd, 0x39, 0x0d, 0x8d, 0x09, 0xd1, 0x34, 0x86, 0x0f, 0x26, 0x3f, 0x88, 0xdf, 0x7a, 0x34, 0x12, 0x45, 0x7a, 0xdf, 0x51, 0x0d, 0xcf, 0x16, 0x4e, 0x6c, 0xf0, 0x41, 0x67, 0x9b, 0x3a, 0x19, 0xfc, 0xc5, 0x42, 0xaf, 0x6a, 0x23, 0x6a, 0xb0, 0x3d, 0x66, 0xb2, 0xe8, 0xa1, 0x55, 0xd1, 0x06, 0x1a, 0xb7, 0x85, 0x9f, 0x75, 0x73, 0x27, 0x75, 0xff, 0xf6, 0x82, 0xf8, 0xf4, 0xd5, 0xe5, 0x0d, 0x3a, 0xb3, 0x77, 0x0f, 0x4f, 0x66, 0xcb, 0x13, 0x81, 0x55, 0xb4, 0x71, 0x5d, 0x24, 0x5b, 0x80, 0x69, 0x94, 0x8e, 0xa0, 0x16, 0xa4, 0x5b, 0x7e, 0xf0, 0xfd, 0xde, 0x93, 0x18, 0x8c, 0x57, 0xee, 0xf4, 0x71, 0x7f, 0x34, 0x25, 0x18, 0x1d, 0xe5, 0xb9, 0xa5, 0xd4, 0xe0, 0xa2, 0x96, 0x3f, 0x2a, 0x67, 0xa3, 0x40, 0xeb, 0x1a, 0xe9, 0x94, 0xb9, 0x8a, 0x48, 0xab, 0x19, 0xb9, 0x0a, 0xb7, 0x43, 0x91, 0xc5, 0x04, 0x26, 0xd2, 0x82, 0x87, 0xac, 0x4f, 0x1e, 0xb9, 0x3f, 0x5a, 0xf1, 0xa6, 0x8c, 0x7d, 0xae, 0x40, 0x87, 0x6b, 0x8a, 0xfa, 0xaf, 0x35, 0xa1, 0x92, 0x93, 0xc1, 0x95, 0x2e, 0x95, 0x79, 0x78, 0xab, 0xee, 0x40, 0xec, 0x32, 0xf2, 0xaa, 0x88, 0x0c, 0x95, 0x6c, 0x7e, 0xb7, 0x2f, 0x11, 0x7b, 0x39, 0x7c, 0xef, 0xcf, 0xb4, 0xe7, 0x5a, 0xce, 0x3b, 0x08, 0x17, 0x76, 0xe4, 0x6b, 0x13, 0x52, 0x1e, 0x93, 0x55, 0x9d, 0x45, 0x3e, 0x32, 0xab, 0x74, 0xeb, 0xc0, 0x85, 0x9b, 0x9a, 0x8d, 0xd4, 0xd1, 0xd3, 0x90, 0x00, 0xeb, 0xe9, 0x5f, 0x98, 0x4d, 0x80, 0xa3, 0xf5, 0x00, 0x4d, 0xc9, 0x1a, 0x05, 0x1d, 0xfb, 0xdf, 0xe9, 0x19, 0x4f, 0x4f, 0x9a, 0x48, 0x3e, 0x4e, 0x79, 0x55, 0x57, 0x7f, 0xb0, 0x93, 0x34, 0x64, 0xc6, 0x3e, 0xae, 0xc7, 0x71, 0x04, 0x4d, 0x59, 0xab, 0xc3, 0x02, 0x9a, 0x07, 0x95, 0x19, 0xf8, 0x46, 0x0a, 0x69, 0x3b, 0x25, 0xb4, 0xce, 0x20, 0x7a, 0xe9, 0xd9, 0x44, 0x7f, 0xc4, 0xc5, 0x44, 0x6e, 0x6d, 0xad, 0x23, 0x4e, 0x9a, 0xfd, 0xec, 0x0c, 0x56, 0x27, 0x98, 0xcd, 0x02, 0x97, 0x31, 0x83, 0x99, 0xe8, 0x38, 0xbe, 0x38, 0x58, 0x45, 0xc6, 0xdd, 0x79, 0xed, 0xe6, 0x6e, 0x2a, 0xe8, 0x0a, 0xfe, 0xc6, 0x73, 0x8d, 0x4d, 0x9b, 0xf4, 0x4c, 0x8d, 0x9e, 0xdd, 0xff, 0x6c, 0x5c, 0xd2, 0xc9, 0x4e, 0x34, 0x0e, 0x0d, 0xda, 0xc4, 0x03, 0x84, 0xb9, 0xa1, 0x40, 0x8c, 0x9a, 0x4b, 0x98, 0xc3, 0x7a, 0x60, 0x81, 0xd5, 0x22, 0x0f, 0xba, 0x92, 0xf1, 0xd0, 0x31, 0x44, 0xdb ],
-const [ 0xbd, 0x74, 0xe7, 0xf6, 0x07, 0xcd, 0x7d, 0x90, 0x5e, 0x90, 0x17, 0x5d, 0x67, 0x65, 0x0a, 0x6d, 0xc2, 0xf8, 0xa4, 0xe2, 0xd4, 0xab, 0x12, 0x49, 0xca, 0x88, 0x81, 0x2b, 0xda, 0x79, 0x84, 0xde, 0xcc, 0xbb, 0xb6, 0xa1, 0xba, 0x90, 0xa0, 0xe9, 0x14, 0x34, 0xdd, 0xf5, 0xe6, 0x13, 0x7b, 0xa8, 0x5e, 0x39, 0xa5, 0x98, 0x89, 0x0a, 0x7f, 0x63, 0x5d, 0x33, 0x52, 0x42, 0xfc, 0xe0, 0xe9, 0xe0, 0x37, 0x30, 0x3b, 0x6c, 0x51, 0xe5, 0x4a, 0xec, 0x06, 0x61, 0x4a, 0xd5, 0xcc, 0xce, 0x06, 0xd9, 0x59, 0x9c, 0x80, 0x01, 0x65, 0x30, 0xd7, 0xfb, 0xb1, 0xda, 0x6e, 0xb5, 0x48, 0x08, 0x4b, 0x2b, 0x05, 0xba, 0xbd, 0x7d, 0x55, 0x36, 0x42, 0x44, 0x3e, 0xfd, 0xa7, 0x26, 0xa1, 0xfd, 0x71, 0xa8, 0xbc, 0x08, 0x7c, 0x44, 0xf2, 0x85, 0xe2, 0xbc, 0xcf, 0x66, 0x1e, 0xad, 0x47, 0x5a, 0x72, 0x67, 0x3e, 0x43, 0x86, 0xfc, 0x4e, 0xea, 0x51, 0x97, 0xc4, 0xf1, 0x3c, 0x0f, 0xeb, 0x0a, 0x85, 0xbc, 0x8e, 0x67, 0xe2, 0x8a, 0xb8, 0x72, 0x68, 0x4b, 0xbe, 0xbd, 0xaa, 0x52, 0x7f, 0x3c, 0x25, 0x3d, 0xeb, 0xb2, 0xdc, 0x12, 0xc2, 0x69, 0x3f, 0x8e, 0x9e, 0x26, 0x51, 0xb9, 0x34, 0x5c, 0x0a, 0xbe, 0xd7, 0xa0, 0xfa, 0xfa, 0x3e, 0x5d, 0x30, 0x53, 0x86, 0xc9, 0x5a, 0xcb, 0x7a, 0x17, 0x2e, 0x54, 0x13, 0xef, 0x08, 0xe7, 0x3b, 0x1b, 0xd4, 0xd0, 0xd6, 0x83, 0x2e, 0x4c, 0x03, 0x5b, 0xc8, 0x55, 0x9f, 0x9b, 0x0c, 0xbd, 0x0c, 0xaf, 0x03, 0x7a, 0x30, 0x70, 0x76, 0x41, 0xc0, 0x54, 0x53, 0x56, 0xbe, 0xe1, 0x51, 0xa2, 0x40, 0x68, 0xd7, 0x06, 0x74, 0xef, 0x1b, 0xef, 0xe1, 0x6f, 0x87, 0x2a, 0xef, 0x40, 0x60, 0xfa, 0xaa, 0xd1, 0xa9, 0x68, 0xc3, 0x9c, 0x45, 0xdb, 0xd7, 0x59, 0x5d, 0xe8, 0xf4, 0x72, 0x01, 0x6b, 0x5a, 0xb8, 0x12, 0xd7, 0x7e, 0x54, 0x5f, 0xca, 0x55, 0x00, 0x0e, 0xe5, 0xce, 0x77, 0x3e, 0xda, 0xa1, 0x29, 0xea, 0xc6, 0x47, 0x34, 0x10, 0xc2, 0x49, 0x90, 0x13, 0xb4, 0xbe, 0x89, 0x5f, 0x6c, 0x0f, 0x73, 0x4b, 0xec, 0xfe, 0x99, 0x43, 0x06, 0xe7, 0x76, 0x26, 0x2d, 0x45, 0x28, 0xed, 0x85, 0x77, 0x21, 0x8e, 0x3c, 0xc5, 0x20, 0x1f, 0x1d, 0x9e, 0x5f, 0x3f, 0x62, 0x23, 0x0e, 0xb2, 0xca, 0xea, 0x01, 0x4b, 0xec, 0xfb, 0xa6, 0x0f, 0xcb, 0x1f, 0x39, 0x97, 0xaa, 0x5b, 0x3b, 0xb6, 0x22, 0xb7, 0x20, 0x5c, 0x71, 0x43, 0x48, 0xba, 0x15, 0x5c, 0x30, 0xa7, 0x9a, 0x2c, 0xea, 0x43, 0xb0, 0x70, 0xca, 0xda, 0x80, 0x7e, 0x63, 0x0b, 0x40, 0x86, 0xb1, 0x29, 0x05, 0x18, 0x98, 0xe1, 0xd9, 0xe6, 0x8d, 0x1d, 0x0e, 0xcc, 0x94, 0x29, 0xd2, 0x0d, 0x6a, 0x14, 0x03, 0xe0, 0x03, 0x5a, 0x44, 0x2b, 0x37, 0xbf, 0x50, 0x8e, 0xb8, 0x7e, 0x8e, 0xa3, 0x47, 0xa3, 0xe6, 0x84, 0x27, 0xb6, 0xd4, 0x8e, 0xd2, 0x99, 0xba, 0x65, 0xec, 0xb3, 0x7b, 0x38, 0x75, 0x4f, 0x45, 0x47, 0x42, 0x3e, 0xae, 0xa2, 0xae, 0xc4, 0x03, 0x33, 0x8d, 0xb2, 0xdc, 0xfe, 0x61, 0xcf, 0xf4, 0xa8, 0xd1, 0x7c, 0x38, 0x36, 0x56, 0x98, 0x1e, 0x18, 0x38, 0xa2, 0x38, 0x66, 0xb9, 0x1d, 0x09, 0x69, 0x8f, 0x39, 0x17, 0x5d, 0x98, 0xaf, 0x41, 0x75, 0xca, 0xed, 0x53 ],
-const [ 0xa5, 0x26, 0x38, 0xf0, 0xef, 0xb1, 0x9b, 0xff, 0x5e, 0xc9, 0x5f, 0xcd, 0xe4, 0xac, 0x9a, 0xab, 0xd9, 0x5e, 0x14, 0xd2, 0xe5, 0xf8, 0x4c, 0x55, 0x1f, 0x43, 0xbc, 0x53, 0x76, 0x85, 0x5e, 0x71, 0x51, 0x9b, 0x6f, 0x87, 0x72, 0x48, 0x73, 0x9a, 0x20, 0xcd, 0x79, 0x0b, 0x85, 0xba, 0xa0, 0x0d, 0x55, 0x03, 0xda, 0x5c, 0xb0, 0x56, 0xf0, 0x2d, 0x4a, 0xac, 0xc7, 0x60, 0xc9, 0x1f, 0xe1, 0xfd, 0x6e, 0xfb, 0x26, 0xde, 0xf8, 0x17, 0xe5, 0xa9, 0xc5, 0x66, 0x16, 0x02, 0x3b, 0xc9, 0xe2, 0xfe, 0x66, 0x27, 0x65, 0xda, 0xe2, 0xc0, 0xb2, 0xed, 0xfc, 0xbe, 0x17, 0xdb, 0x14, 0x0d, 0xa3, 0x0c, 0x46, 0x6d, 0xe6, 0x5c, 0x49, 0xc6, 0xf8, 0x14, 0x96, 0xbb, 0xbd, 0x1a, 0xcd, 0x81, 0x66, 0x64, 0x55, 0xf2, 0x3b, 0xb2, 0x43, 0xdd, 0x98, 0x7d, 0x7e, 0xa1, 0x36, 0x2a, 0x20, 0xfa, 0xac, 0x84, 0x1f, 0x1a, 0x36, 0x69, 0x2c, 0xfc, 0xb4, 0xc3, 0xdb, 0xf5, 0xf6, 0xbb, 0x05, 0x8c, 0x36, 0x29, 0x6b, 0x8b, 0xe6, 0x4e, 0x9b, 0x56, 0xad, 0xc5, 0x18, 0x7c, 0xac, 0xb7, 0xb5, 0x8c, 0x05, 0x4f, 0x42, 0x2a, 0x9e, 0x6d, 0x6a, 0x61, 0x22, 0x9f, 0xdc, 0x3b, 0x49, 0x4d, 0xa9, 0x8f, 0x5a, 0x33, 0xed, 0x1b, 0xee, 0x14, 0xb2, 0xd2, 0xf6, 0xad, 0x11, 0x77, 0xff, 0xe9, 0x9a, 0x6b, 0xb5, 0x53, 0xf7, 0xc4, 0xa6, 0xd0, 0xcb, 0x9e, 0x49, 0x8e, 0xe0, 0xb6, 0x3f, 0x38, 0x82, 0x35, 0xd8, 0x6c, 0x26, 0xc9, 0xd9, 0x6e, 0x50, 0xfa, 0x7d, 0x1e, 0xb3, 0xbc, 0xb9, 0x27, 0x99, 0x40, 0xc4, 0x7a, 0x85, 0x10, 0xd7, 0xfb, 0x17, 0x5b, 0x32, 0x79, 0x31, 0x8d, 0x5f, 0xe4, 0x58, 0x23, 0xba, 0xba, 0x5d, 0xbe, 0x31, 0xc3, 0x3c, 0x76, 0x49, 0xfe, 0x44, 0x70, 0x61, 0xdb, 0x78, 0xb3, 0x3b, 0xaa, 0x36, 0x37, 0xb8, 0x54, 0x16, 0x3f, 0xe3, 0x49, 0x15, 0xe9, 0x31, 0xb9, 0xf3, 0x04, 0x08, 0x07, 0xd9, 0x21, 0x7d, 0x7b, 0x3f, 0xed, 0x62, 0x37, 0x0d, 0xbe, 0x80, 0x6c, 0x00, 0x6b, 0x21, 0xcd, 0x50, 0x61, 0xd2, 0x44, 0x90, 0xf3, 0x66, 0xe4, 0xd5, 0xf2, 0x3e, 0x20, 0x1a, 0x7e, 0xc8, 0x3a, 0xe3, 0x1b, 0x46, 0xfe, 0x21, 0x08, 0xd1, 0xaf, 0x56, 0xcc, 0x9d, 0x42, 0xf9, 0x11, 0x7e, 0xca, 0x1c, 0xb5, 0xab, 0x34, 0x4c, 0x1f, 0xc3, 0x34, 0xb9, 0xcf, 0x0d, 0x7f, 0x97, 0x39, 0x04, 0x3b, 0xc3, 0xd4, 0x13, 0xb3, 0xaa, 0x6e, 0x9d, 0x50, 0x67, 0xc2, 0x40, 0xc5, 0x2b, 0x4c, 0x5b, 0x89, 0xe2, 0x5c, 0xcd, 0x8a, 0x13, 0x6a, 0x00, 0x20, 0x08, 0xa9, 0x27, 0x3f, 0x30, 0xde, 0xc3, 0xf2, 0xc1, 0x73, 0x6c, 0x04, 0xa1, 0xc7, 0xce, 0x00, 0x87, 0xc9, 0xf2, 0x5d, 0x5e, 0xc5, 0xbf, 0xf2, 0xea, 0x7e, 0xc0, 0xb0, 0xad, 0x7c, 0x27, 0x8f, 0x0c, 0xa7, 0x12, 0xc9, 0xae, 0x15, 0x0e, 0x47, 0x25, 0x21, 0xd9, 0x58, 0xd0, 0xbd, 0x6d, 0xa9, 0xff, 0x09, 0x39, 0x72, 0x59, 0x24, 0xb2, 0xed, 0x7b, 0x41, 0x0a, 0x0c, 0xe2, 0xfe, 0x3f, 0x6b, 0x0b, 0xf2, 0x58, 0x84, 0xd8, 0x85, 0xec, 0x22, 0x36, 0x05, 0xe3, 0x18, 0xfd, 0xf6, 0x80, 0x32, 0x18, 0xa9, 0xa0, 0x6c, 0xe5, 0x10, 0x3c, 0x62, 0xde, 0xd0, 0x35, 0x08, 0x7a, 0x98, 0x51, 0x9b, 0x4e, 0xb1, 0x80, 0xd7, 0x78, 0xd7, 0x65, 0x6b, 0x3d, 0x48, 0x11, 0xaa, 0xf1, 0x1a, 0x12, 0x83, 0x17, 0xd1, 0xac, 0xb3, 0xca, 0x31, 0x66, 0x39, 0x5c, 0x51, 0xc9, 0x0a, 0x3c, 0xf1, 0x64, 0x07, 0x1d, 0x0d, 0x13, 0x2c, 0x54, 0xb3, 0x81, 0x0a, 0x82, 0x11, 0xec, 0x77, 0x74, 0xd2, 0x28, 0x84, 0x47, 0xab, 0xe7, 0xaf, 0xd0, 0x30, 0x37, 0x5a, 0x3b, 0xed, 0x4c, 0x7c, 0xf1, 0xb2, 0x80, 0x97, 0xc0, 0x2e, 0x98, 0xea, 0x36, 0xbf, 0x49, 0xe7, 0x4d, 0x89, 0xfb, 0xe7, 0x4e, 0xc6, 0xcc, 0x1d, 0xef, 0x5c, 0xd8, 0xc8, 0xbe, 0xb5, 0xb8, 0xad, 0xc3, 0xcb, 0x48, 0xc5, 0x61, 0x82, 0xad, 0x33, 0x7e, 0x3b, 0x97, 0x78, 0xe4, 0xa6, 0xc4 ],
-const [ 0x89, 0x2a, 0xf4, 0xc0, 0x53, 0x68, 0xaa, 0x92, 0x42, 0xac, 0xed, 0xd8, 0x7d, 0x0f, 0xc6, 0x8d, 0xe4, 0x83, 0xab, 0x59, 0x52, 0x0a, 0xea, 0x62, 0x1f, 0x26, 0x4b, 0x65, 0xea, 0x90, 0xf0, 0x05, 0x95, 0x2c, 0x81, 0x63, 0x90, 0x3d, 0x86, 0xee, 0x5b, 0xd6, 0x14, 0x7d, 0x46, 0x91, 0xac, 0x9b, 0x7c, 0x82, 0x60, 0x21, 0x3f, 0x6e, 0x37, 0x0b, 0x75, 0x39, 0xd3, 0x84, 0x64, 0x9e, 0x51, 0x43, 0xba, 0x23, 0x71, 0x1a, 0xd0, 0x4b, 0xf7, 0xcc, 0x2f, 0x0d, 0x51, 0x20, 0x54, 0x85, 0x79, 0x33, 0xb0, 0xea, 0x1d, 0x12, 0xf3, 0xc0, 0xfe, 0x88, 0x8a, 0x4e, 0x96, 0x35, 0x66, 0x53, 0xfd, 0xe0, 0x00, 0xf5, 0x0d, 0x0f, 0x9a, 0xfa, 0xc5, 0xd4, 0xc7, 0x3a, 0xeb, 0xe9, 0x2d, 0x54, 0xf5, 0xff, 0x8a, 0xa1, 0x2a, 0x54, 0xf5, 0x66, 0x05, 0x84, 0x67, 0x4e, 0xda, 0xa1, 0x79, 0x17, 0xbb, 0x85, 0x6f, 0x8b, 0x9d, 0x67, 0x76, 0xb2, 0xb7, 0xad, 0x2a, 0x46, 0x2b, 0x01, 0x5b, 0x67, 0xe8, 0xa7, 0x11, 0x90, 0xcf, 0x0e, 0xcd, 0xca, 0x15, 0xa5, 0x12, 0x1f, 0xe8, 0xef, 0x24, 0x52, 0x55, 0xda, 0x10, 0xcd, 0x69, 0x4d, 0xec, 0xdb, 0x96, 0x00, 0x60, 0x17, 0x59, 0x90, 0x66, 0x25, 0x1a, 0xd3, 0x4d, 0x9f, 0x54, 0x69, 0x04, 0x52, 0xf5, 0x93, 0x95, 0xab, 0x08, 0x48, 0xf0, 0x6c, 0x91, 0x86, 0xea, 0xa3, 0xb8, 0xe7, 0x85, 0xdd, 0x2a, 0x74, 0x72, 0x97, 0xbd, 0xbd, 0xd4, 0xf5, 0x53, 0x2a, 0x47, 0xb7, 0x00, 0x8c, 0x21, 0x68, 0x6f, 0xf7, 0xf8, 0xd8, 0x81, 0xd4, 0x64, 0xcd, 0x38, 0x32, 0x05, 0xf6, 0xd4, 0x5d, 0xc8, 0x20, 0x3b, 0xb2, 0x67, 0xac, 0x9e, 0xb1, 0x2f, 0x41, 0x5a, 0x54, 0x06, 0xbe, 0x1c, 0x9f, 0xac, 0x73, 0x49, 0x79, 0x41, 0x90, 0x9d, 0xba, 0x08, 0xdd, 0x12, 0x85, 0x6a, 0xac, 0x03, 0xd8, 0x3e, 0x0d, 0x91, 0x61, 0x47, 0x40, 0x46, 0x94, 0xfe, 0x70, 0xf8, 0xfa, 0x92, 0x9e, 0xf0, 0xcc, 0x2e, 0xdb, 0x4c, 0xc0, 0x7a, 0xba, 0xa2, 0x23, 0x64, 0x05, 0xe6, 0x28, 0x20, 0xaf, 0x8e, 0x80, 0x6d, 0x0a, 0xf3, 0x2a, 0x1b, 0x3a, 0xfb, 0x8d, 0xca, 0xea, 0xf5, 0xc4, 0xf4, 0x3d, 0xc4, 0x39, 0x2e, 0x07, 0x40, 0x75, 0xaa, 0x3e, 0xd9, 0x36, 0x01, 0xab, 0x7e, 0xc2, 0x2f, 0xe5, 0xbd, 0x7c, 0xdf, 0x80, 0x2b, 0xb5, 0xea, 0x82, 0x06, 0xc4, 0x1a, 0x16, 0x19, 0x59, 0x33, 0x85, 0xe0, 0x0e, 0x34, 0x61, 0xed, 0x3f, 0xda, 0x04, 0x8a, 0x1c, 0x66, 0x39, 0xa0, 0xfc, 0xa0, 0x38, 0xd7, 0xf5, 0x1c, 0xd8, 0xff, 0xa9, 0xbc, 0x00, 0xaf, 0x62, 0x76, 0x5e, 0x2b, 0x62, 0x57, 0x5c, 0x8b, 0x74, 0xc8, 0x50, 0x1a, 0xc7, 0x11, 0xf3, 0xfd, 0xfc, 0x1b, 0x15, 0x15, 0x7e, 0x7a, 0x8f, 0x26, 0x12, 0xaa, 0x78, 0x38, 0xaf, 0x99, 0x9c, 0x3d, 0x8f, 0x66, 0x29, 0xf5, 0x86, 0x69, 0xac, 0x0f, 0x93, 0x73, 0x3c, 0x91, 0xb5, 0x57, 0xf5, 0x79, 0xff, 0xa9, 0xa9, 0xa4, 0xef, 0xc5, 0xd1, 0xf0, 0xfc, 0x13, 0xca, 0x9e, 0x6e, 0x8a, 0x3e, 0xfa, 0x72, 0x73, 0xe0, 0x3d, 0x6e, 0x70, 0x5c, 0xb2, 0x92, 0xbc, 0x8d, 0x18, 0xb0, 0xb4, 0xf1, 0x48, 0x4d, 0x97, 0x5b, 0x17, 0xf8, 0x8a, 0xe8, 0x7e, 0xda, 0xdf, 0x34, 0xf8, 0x8f, 0x96, 0xce, 0x2c, 0x34, 0x24, 0xe9, 0xcc, 0xc1, 0x74, 0x54, 0xbd, 0x99, 0x2c, 0xac, 0x78, 0x60, 0x31, 0xd0, 0xb0, 0x0d, 0x6d, 0x95, 0x35, 0x40, 0xd0, 0xbb, 0x18, 0xd5, 0x94, 0x20, 0x10, 0xb9, 0xc6, 0x34, 0x1c, 0xfc, 0x02, 0xad, 0x6a, 0x28, 0x7e, 0x7c, 0x78, 0xd2, 0x49, 0xff, 0x79, 0x6e, 0xd5, 0x78, 0xfa, 0x68, 0xb4, 0xbe, 0xc5, 0x70, 0x9f, 0x32, 0x05, 0x15, 0xbc, 0xf5, 0xac, 0x95, 0x21, 0x58, 0x12, 0xf3, 0x94, 0x94, 0xde, 0x4b, 0x94, 0xbc, 0x2a, 0x63, 0x9e, 0xef, 0xe2, 0x82, 0xa9, 0xd2, 0x6d, 0x85, 0xf3, 0x3d, 0x90, 0x2f, 0xff, 0x35, 0x8f, 0xc1, 0xde, 0x1b, 0x95, 0xca, 0xaf, 0x22, 0x55, 0x41, 0x62, 0x07, 0xf2, 0xd1, 0xc1, 0xfc, 0x1c, 0x74, 0xb0, 0xe5, 0x7d, 0x43, 0xb3, 0xc6, 0x53, 0x8d, 0xb2, 0x7c, 0x5e, 0x26, 0xf9, 0xac, 0xfc, 0x01, 0x83, 0xfa, 0x93, 0x01, 0x78, 0x7b, 0x2f, 0x0d, 0xf4, 0x6c, 0x6c, 0x63, 0x0a, 0x24, 0x97, 0x2e, 0x09, 0x47, 0x10, 0x5a, 0xfd, 0x3d, 0xf2, 0xa7, 0x79, 0xe2, 0xf6, 0xfc, 0x94, 0x7f, 0x95, 0xff, 0x32, 0xfa, 0x6d, 0xe2, 0x85, 0x49, 0xe6, 0x7f, 0xd3, 0x2c, 0x15, 0xa8, 0x79, 0x1c, 0xe1, 0xb8, 0x30, 0x7e, 0x64, 0x6e, 0x8f, 0x1d, 0x94, 0xfc, 0xd1, 0xd7, 0x22, 0x5a, 0xd9, 0x97, 0xa2, 0xe0, 0x73, 0x83, 0xed, 0x14, 0xdd, 0x76, 0xc3, 0xc1, 0x86, 0xb0, 0xb5, 0x49, 0x15, 0xcc ],
-const [ 0xa5, 0x04, 0x5d, 0x24, 0xd0, 0x75, 0x78, 0xca, 0x31, 0x98, 0x7d, 0xb3, 0xd2, 0xe2, 0x5e, 0x12, 0xea, 0x38, 0xbb, 0x1d, 0xa7, 0xa8, 0xbd, 0x64, 0x2a, 0x57, 0x42, 0x61, 0xd4, 0xba, 0x3a, 0x50, 0xc0, 0x09, 0x50, 0x41, 0x90, 0xf1, 0xce, 0x6b, 0x6d, 0x8a, 0xba, 0xc3, 0x49, 0x88, 0x45, 0xcd, 0x67, 0xb5, 0x67, 0xb2, 0x1e, 0x9f, 0xc3, 0x94, 0xda, 0x8d, 0xd0, 0x1e, 0x63, 0xb8, 0x3a, 0x5f, 0x62, 0xb8, 0x86, 0xd8, 0x21, 0x3d, 0xf6, 0xd3, 0x92, 0xff, 0xac, 0xf7, 0x93, 0xf8, 0x11, 0x1a, 0x70, 0xd0, 0x78, 0x56, 0xa9, 0x99, 0xff, 0x5f, 0xf6, 0xbc, 0xb6, 0x13, 0x89, 0x33, 0x04, 0x53, 0x93, 0xf9, 0x46, 0x12, 0x09, 0xbf, 0xb8, 0xab, 0xa8, 0xe1, 0x99, 0x78, 0x37, 0x98, 0x8a, 0xa0, 0x0c, 0x71, 0x38, 0x30, 0xd1, 0xfe, 0x3a, 0x6e, 0x88, 0xcb, 0x3d, 0x6a, 0xcd, 0x93, 0x5e, 0xd5, 0x5b, 0xb4, 0xd7, 0x16, 0xd2, 0xe1, 0xde, 0x9b, 0xb8, 0x17, 0xca, 0x6d, 0xbd, 0xd2, 0x78, 0x08, 0x43, 0x80, 0xed, 0x69, 0x1d, 0x36, 0x3c, 0x68, 0x97, 0xa2, 0xaa, 0x48, 0xb7, 0x41, 0x11, 0x8d, 0xc3, 0xd1, 0x82, 0x0d, 0x03, 0x0a, 0x2e, 0x4a, 0xc8, 0x89, 0x87, 0xff, 0xae, 0x0d, 0xa2, 0xf9, 0x1d, 0xe5, 0xe0, 0x28, 0x16, 0xa9, 0xcd, 0xf6, 0x2c, 0x29, 0x48, 0xd7, 0xd0, 0xa3, 0xe5, 0x22, 0xd2, 0x39, 0x8f, 0x1f, 0x25, 0xa1, 0x72, 0x61, 0xe3, 0x1f, 0x18, 0x56, 0x90, 0xb0, 0xd1, 0x1c, 0xa3, 0x88, 0x59, 0x96, 0x42, 0xbf, 0xb5, 0xc0, 0x4e, 0x48, 0x5e, 0x3f, 0x9f, 0x22, 0xa1, 0x3d, 0x91, 0xd2, 0x46, 0x73, 0xbf, 0x10, 0x70, 0x87, 0x0e, 0xc1, 0xc4, 0x99, 0xee, 0x25, 0xcd, 0x19, 0xdc, 0x52, 0x9f, 0xdb, 0x2b, 0xe1, 0xbb, 0x6d, 0x05, 0xe7, 0x33, 0xa8, 0xad, 0x27, 0x0f, 0x85, 0x06, 0x85, 0xee, 0x32, 0x59, 0xbe, 0xf1, 0x65, 0x53, 0x57, 0xd4, 0xf1, 0x4d, 0xd3, 0x5e, 0x97, 0xd1, 0x29, 0xfc, 0x1e, 0x59, 0x75, 0xa9, 0xa5, 0x59, 0xee, 0x10, 0x39, 0x80, 0x18, 0xf5, 0xa3, 0x3b, 0x3b, 0xd1, 0x83, 0x7c, 0x13, 0xbc, 0xa3, 0xb9, 0xc9, 0x90, 0x85, 0x37, 0x22, 0x4c, 0x3e, 0x88, 0xf7, 0xb6, 0x87, 0x53, 0xe5, 0x45, 0x12, 0x53, 0x45, 0x3d, 0x1a, 0xa2, 0x5e, 0x1c, 0x3e, 0x38, 0xda, 0x35, 0x8f, 0xae, 0x77, 0x9b, 0xe8, 0x48, 0xff, 0x40, 0x7e, 0x33, 0x7a, 0x5e, 0xb7, 0x0b, 0xa2, 0x16, 0x40, 0xa1, 0x97, 0x58, 0x5a, 0xfa, 0xd4, 0x02, 0x74, 0x9b, 0x62, 0x4c, 0xff, 0x03, 0x4b, 0x63, 0x7e, 0x7a, 0x52, 0x54, 0xdc, 0x09, 0xe1, 0x2c, 0x03, 0xca, 0x43, 0x5d, 0xaa, 0x62, 0x13, 0x64, 0x6e, 0xcb, 0xf5, 0xa9, 0x25, 0x57, 0x84, 0xa7, 0x6f, 0xf1, 0x8b, 0x4c, 0x8d, 0xa6, 0x77, 0xa3, 0x77, 0x65, 0x0c, 0xb0, 0x28, 0x03, 0x58, 0x9c, 0x3d, 0x82, 0xe5, 0x12, 0xbe, 0x93, 0x33, 0xe8, 0x3c, 0x59, 0x65, 0x02, 0x1c, 0x70, 0x3b, 0x73, 0x32, 0x2e, 0x40, 0xe6, 0x92, 0x29, 0x45, 0x3d, 0xa2, 0xf9, 0x0d, 0x77, 0x74, 0x3f, 0x4a, 0xd7, 0x53, 0xe6, 0xc8, 0x42, 0x9c, 0xa8, 0xe9, 0xea, 0xd0, 0xd4, 0x51, 0x29, 0xe6, 0x4f, 0xe2, 0xaf, 0xe6, 0xd9, 0xeb, 0xe0, 0xb3, 0x92, 0x9c, 0x78, 0x28, 0xbd, 0xbe, 0x71, 0x67, 0xc3, 0xa1, 0x26, 0x6e, 0x7b, 0x55, 0xb8, 0xec, 0xa8, 0x1c, 0xb1, 0x52, 0xc4, 0x20, 0xe7, 0x2c, 0xfc, 0x62, 0xa4, 0xb2, 0x7b, 0xf3, 0x03, 0x9a, 0xeb, 0x66, 0x9d, 0x31, 0x39, 0x85, 0x65, 0xaa, 0x99, 0x43, 0xd1, 0xb6, 0xcb, 0xf2, 0x3b, 0x55, 0x9c, 0xb6, 0x86, 0xeb, 0xaf, 0x3a, 0x04, 0x96, 0x7d, 0xa1, 0x97, 0xbf, 0x9b, 0xc0, 0x17, 0xef, 0x3c, 0x8a, 0xf4, 0xe4, 0xf6, 0xcb, 0x1d, 0xe5, 0xc9, 0x1a, 0x20, 0x52, 0x5d, 0x08, 0x92, 0x7f, 0x8b, 0x9e, 0xb1, 0xc2, 0x1f, 0x07, 0x48, 0xcb, 0xdc, 0x89, 0xd3, 0x34, 0xc1, 0xba, 0xe4, 0x59, 0x8b, 0xf0, 0xc5, 0x6a, 0x7b, 0xf9, 0x5f, 0xbf, 0x59, 0x0c, 0x5a, 0x6b, 0xb9, 0x00, 0x86, 0x13, 0x7d, 0xbc, 0x7a, 0x01, 0x9b, 0xef, 0x7b, 0x74, 0x21, 0x01, 0x9f, 0x3a, 0x76, 0x49, 0x31, 0x81, 0xe2, 0x80, 0x58, 0xeb, 0x50, 0x75, 0xf4, 0xe0, 0x53, 0x03, 0xc9, 0x28, 0x68, 0x40, 0xdf, 0xb9, 0x7b, 0xf8, 0x28, 0xcd, 0xac, 0x5a, 0x64, 0x38, 0x52, 0xf0, 0x42, 0xf9, 0x40, 0xd5, 0xc8, 0x0f, 0x48, 0x22, 0xf4, 0x8e, 0xfe, 0xa9, 0xa4, 0xf1, 0xbe, 0xe6, 0xb3, 0xb2, 0xf1, 0x32, 0x65, 0x18, 0x8b, 0x3a, 0x05, 0x51, 0xd8, 0xb0, 0xcc, 0xc0, 0x79, 0x40, 0x05, 0x98, 0xaa, 0xc6, 0x6f, 0xaa, 0xc6, 0xbe, 0xe3, 0x7b, 0x0c, 0xfb, 0x36, 0x9a, 0xa3, 0x9d, 0x61, 0x30, 0xdc, 0x3d, 0xdf, 0xd9, 0xb8, 0x6a, 0x57, 0xb2, 0xaa, 0x59, 0x7b, 0xb4, 0x9d, 0xd8, 0x30, 0x40, 0x39, 0x84, 0xef, 0xfa, 0x62, 0x3c, 0x6b, 0xdb, 0x02, 0xd5, 0x74, 0x82, 0x09, 0x0f, 0x1b, 0xcb, 0xb2, 0xc8, 0x17, 0xa3, 0x07, 0x70, 0x67, 0x1b, 0xa7, 0xbd, 0x39, 0xbb, 0xc7, 0xa0, 0x0b, 0x18, 0x77, 0x77, 0x10, 0xa8, 0x26, 0x84, 0xd5, 0xd6, 0x69, 0x9e, 0x24, 0x52, 0xf8, 0x26, 0x29, 0xab, 0xf9, 0x3d, 0xd3, 0x1f, 0x82, 0x34, 0x7d, 0xb2, 0x59, 0x44, 0xce, 0x7d, 0xfe, 0x80, 0xdd, 0x49, 0xeb, 0x07, 0x99, 0x5c, 0x1a, 0x7e, 0x69, 0x93, 0xc8, 0xbe, 0x0f, 0xb1, 0x79, 0xc9, 0xd2, 0xf7, 0x3c, 0x03, 0xdc, 0xf5, 0x30, 0x9f, 0xe1, 0x9f, 0x47 ],
-const [ 0x91, 0x2e, 0x0d, 0xc2, 0x5b, 0x52, 0x54, 0x0f, 0x4d, 0x33, 0xd2, 0x6f, 0xdc, 0xba, 0xdd, 0xb4, 0x20, 0xf5, 0x57, 0x01, 0x41, 0xbc, 0xcb, 0x8c, 0x2c, 0x94, 0xb8, 0xa3, 0x8a, 0xd3, 0x2d, 0xed, 0xf2, 0x05, 0x96, 0xf3, 0x5d, 0x8f, 0xd6, 0xde, 0xdb, 0x92, 0x96, 0x82, 0x85, 0x12, 0xdc, 0x9c, 0xb3, 0x58, 0xdf, 0x58, 0x6f, 0x94, 0x1a, 0x17, 0x29, 0xc7, 0x9f, 0x6e, 0xac, 0xe0, 0xae, 0x72, 0x50, 0x25, 0x86, 0x33, 0x71, 0xd5, 0x7b, 0x86, 0x21, 0x0c, 0x49, 0x08, 0x1a, 0xe6, 0xa8, 0x5f, 0xf6, 0xe7, 0x20, 0xc3, 0xa3, 0x9b, 0x1f, 0xbe, 0x11, 0x79, 0x49, 0x2f, 0x2d, 0x0d, 0x0f, 0x95, 0x13, 0x57, 0x83, 0x8a, 0x7f, 0x6e, 0x6a, 0x8e, 0x85, 0x68, 0x93, 0x06, 0x83, 0x7e, 0x68, 0x84, 0x53, 0x6c, 0xc3, 0x49, 0xc5, 0x17, 0x03, 0x09, 0x4c, 0x72, 0x5e, 0xee, 0xf7, 0xa2, 0x79, 0xdf, 0xa3, 0x61, 0x35, 0x01, 0x70, 0xa0, 0xcc, 0x7e, 0x71, 0x70, 0x1e, 0x86, 0xa8, 0x22, 0x45, 0x94, 0x31, 0xad, 0x6f, 0xf3, 0xbd, 0x51, 0xed, 0x80, 0x42, 0x7a, 0x87, 0xb1, 0xf1, 0xe7, 0x13, 0xd6, 0x69, 0x0b, 0x46, 0x9f, 0x2a, 0xb4, 0xc9, 0xdf, 0x4c, 0xea, 0x8f, 0x8f, 0x71, 0x1a, 0x67, 0x16, 0xf8, 0x74, 0xcd, 0xc8, 0x73, 0x91, 0x06, 0xac, 0x5b, 0x59, 0x6c, 0x82, 0x03, 0x24, 0x06, 0x04, 0xcb, 0x1f, 0x5b, 0x6d, 0x96, 0xf2, 0x88, 0x38, 0x7e, 0x9f, 0x91, 0x2a, 0xc6, 0xad, 0xf5, 0x92, 0x0f, 0x87, 0x85, 0xd0, 0xcf, 0x1f, 0x75, 0x14, 0x00, 0xd6, 0xb4, 0x68, 0x15, 0xa0, 0x79, 0xf1, 0x32, 0x63, 0x1f, 0x71, 0x9c, 0xa1, 0x32, 0x11, 0x6f, 0x57, 0xca, 0x5e, 0x8f, 0x25, 0x17, 0x91, 0xe0, 0xae, 0x3e, 0x13, 0xba, 0x42, 0x63, 0x40, 0x97, 0xbb, 0x07, 0x6c, 0x0f, 0xa4, 0x95, 0x23, 0x07, 0xa1, 0x37, 0xb5, 0x25, 0x0a, 0xee, 0xf2, 0x87, 0xda, 0xe2, 0x33, 0xb4, 0xc8, 0xf7, 0x9a, 0xd2, 0xb3, 0xa0, 0x9a, 0x1a, 0x43, 0xf8, 0xb9, 0x8a, 0xce, 0x0f, 0x94, 0xd9, 0x78, 0x81, 0x24, 0xb0, 0x9f, 0x4e, 0x41, 0x17, 0x76, 0xe5, 0x64, 0x2e, 0xef, 0x82, 0xb1, 0x1d, 0xdf, 0xba, 0x35, 0x4d, 0x5d, 0x55, 0x6c, 0xd9, 0x6a, 0x5b, 0x06, 0x3f, 0xd8, 0x71, 0xea, 0x5c, 0x64, 0x66, 0x7c, 0x97, 0x26, 0x0a, 0x1b, 0x5c, 0x2b, 0x3f, 0xee, 0xcc, 0x60, 0x52, 0xe1, 0xb2, 0xb1, 0x8b, 0xea, 0xb9, 0x73, 0x02, 0x91, 0xdd, 0xff, 0xb5, 0xaf, 0x20, 0xa0, 0xd8, 0x76, 0x7e, 0xb0, 0x6c, 0xb1, 0x22, 0xfd, 0x13, 0x4d, 0xda, 0x72, 0x23, 0x19, 0xc9, 0xf3, 0xf9, 0xca, 0x5c, 0x88, 0x90, 0x42, 0x7f, 0xbe, 0x52, 0x12, 0x10, 0x4a, 0x2d, 0x3d, 0x93, 0xf0, 0xea, 0x3f, 0x28, 0xa3, 0xba, 0x4d, 0xbb, 0xee, 0x12, 0xdf, 0x7b, 0x92, 0xb9, 0x6c, 0x8d, 0x71, 0x20, 0x74, 0x01, 0xaa, 0xf1, 0xc4, 0x05, 0x06, 0xea, 0xf6, 0x58, 0x93, 0xec, 0x37, 0x02, 0x8e, 0x4f, 0x4d, 0x43, 0x86, 0x79, 0xd8, 0xc9, 0xbf, 0xaf, 0xd7, 0x25, 0xd5, 0x2a, 0x6f, 0x80, 0xa1, 0x6e, 0xe8, 0x8a, 0x60, 0xd7, 0xf9, 0xb4, 0x12, 0x75, 0x45, 0x9f, 0x21, 0x1a, 0x25, 0xd4, 0x43, 0xb0, 0xa8, 0xb5, 0xa1, 0xd0, 0xd8, 0xb4, 0x39, 0x91, 0x3f, 0xc2, 0x81, 0x9e, 0xaa, 0x0a, 0x4d, 0x8c, 0x2d, 0xe0, 0xf2, 0x6a, 0x67, 0xf4, 0xac, 0x99, 0x07, 0xcc, 0x3d, 0xde, 0x8f, 0x71, 0xd7, 0xb5, 0x59, 0x68, 0x3c, 0xe8, 0xd7, 0xe3, 0x24, 0x61, 0x1e, 0x39, 0xdf, 0x3c, 0xa6, 0x94, 0x3b, 0x21, 0x4b, 0xe9, 0xa8, 0xd1, 0x98, 0x2e, 0x9a, 0xfe, 0x45, 0xc7, 0x2f, 0x60, 0xfe, 0x41, 0x12, 0x05, 0x67, 0x42, 0x9f, 0xe9, 0x5c, 0xc0, 0x48, 0xc6, 0x7d, 0x72, 0x37, 0x2d, 0xea, 0x84, 0x34, 0xd6, 0x4b, 0x8f, 0xca, 0x35, 0x14, 0xc8, 0xa5, 0x4d, 0x07, 0x78, 0x3f, 0xc9, 0xfa, 0xac, 0xbc, 0x49, 0xda, 0x2d, 0x12, 0xfa, 0xf0, 0xb2, 0x6c, 0x69, 0x63, 0x55, 0xd1, 0x99, 0xfe, 0x44, 0x00, 0x53, 0x34, 0xb9, 0x9f, 0xbd, 0x61, 0x2c, 0x95, 0x2e, 0x53, 0xc7, 0xb5, 0x41, 0x09, 0x1a, 0x9c, 0x28, 0xba, 0x10, 0xdc, 0x43, 0x1a, 0x21, 0x5a, 0xf1, 0xd8, 0xca, 0xf4, 0xa7, 0x6b, 0x3a, 0x67, 0x3f, 0x0e, 0x4f, 0x70, 0x92, 0x09, 0xc0, 0x32, 0x48, 0x33, 0x9c, 0xd8, 0xef, 0xb5, 0xf3, 0x7b, 0x4b, 0x10, 0xd2, 0x46, 0xed, 0x62, 0x75, 0xd8, 0x07, 0xe5, 0xb9, 0xe9, 0x7f, 0xb8, 0xd0, 0x31, 0x42, 0xe2, 0x38, 0x85, 0xdb, 0x94, 0xee, 0x44, 0x44, 0xae, 0xdf, 0xf1, 0xfc, 0x85, 0x9f, 0x21, 0x59, 0xe3, 0x5d, 0x98, 0x20, 0x50, 0x17, 0xaf, 0x53, 0x90, 0x0a, 0xf9, 0x4a, 0x6d, 0x6d, 0x25, 0x05, 0xb7, 0x5e, 0x26, 0xc1, 0x88, 0x1d, 0x92, 0xc9, 0xcc, 0x78, 0x48, 0x8f, 0x01, 0x86, 0x56, 0xfb, 0x3c, 0x98, 0x1a, 0x03, 0x6d, 0x6d, 0xa7, 0x7c, 0xe3, 0xa5, 0x69, 0x30, 0x13, 0x78, 0x0d, 0x30, 0x95, 0xa8, 0x9b, 0x6c, 0x6f, 0xb4, 0xe5, 0x80, 0x96, 0x4f, 0x25, 0xd1, 0xb2, 0x10, 0xe2, 0xd9, 0x22, 0x6b, 0x13, 0xbf, 0x40, 0xe0, 0x87, 0x2b, 0xe6, 0x72, 0x84, 0x58, 0x31, 0x5b, 0xaf, 0x6b, 0x84, 0xfe, 0x2b, 0x03, 0xd0, 0x1d, 0x05, 0x11, 0x13, 0x4c, 0xd0, 0xea, 0x1f, 0xa6, 0x8c, 0x9a, 0x9d, 0xbe, 0xcd, 0x7b, 0x51, 0xd9, 0x19, 0x07, 0xa0, 0x5a, 0x91, 0xeb, 0x4f, 0x7d, 0xd3, 0x5c, 0x8d, 0x48, 0x20, 0xae, 0x34, 0xbf, 0xba, 0x23, 0x4c, 0x58, 0x90, 0x01, 0xd1, 0xae, 0x1d, 0xe7, 0xb5, 0x79, 0x8e, 0x60, 0x29, 0xbe, 0x23, 0xb9, 0x19, 0x43, 0xd7, 0x10, 0xf5, 0x46, 0x43, 0xae, 0xb7, 0x6e, 0xc0, 0x97, 0x22, 0x02, 0xcc, 0x5e, 0x47, 0x59, 0xaf, 0x3e, 0x4e, 0x92, 0x5e, 0x67, 0x73, 0x85, 0x9f, 0x96, 0x4f, 0xf8, 0x6e, 0xe8, 0x59, 0x17, 0x9f, 0xf0, 0xac, 0x1e, 0xc6, 0x07, 0x0b, 0x59, 0x54, 0xe3, 0x22, 0x4e, 0x02, 0x6c, 0x0e, 0x39, 0x73, 0xca, 0x20, 0xb8, 0x14, 0xc3, 0xde, 0xc8, 0x48, 0x44, 0x4b, 0xf0, 0xc2, 0x3d, 0x69, 0xbc, 0x31, 0xb2, 0xfb, 0x6d, 0x23, 0x10, 0x8f, 0xef, 0x23, 0xbd, 0xbc, 0x0b, 0x25, 0xf2, 0xa9, 0xde, 0x25, 0xcd, 0xce ],
-const [ 0x22, 0x98, 0x09, 0x6d, 0x8a, 0x02, 0x22, 0x5d, 0x4a, 0x5a, 0x91, 0xe9, 0x5b, 0x43, 0xbe, 0xe7, 0x0f, 0x5a, 0x23, 0xf9, 0x52, 0x69, 0xb1, 0x60, 0x2f, 0xde, 0x6f, 0x11, 0x96, 0x7b, 0x65, 0x0b, 0x5c, 0x4e, 0xb8, 0xe7, 0x83, 0xe4, 0x16, 0xb1, 0xbc, 0xba, 0x54, 0xf6, 0x2a, 0xf4, 0x56, 0x1e, 0x69, 0x51, 0x30, 0xfc, 0xcf, 0x5f, 0x8a, 0xa4, 0xf1, 0xeb, 0x49, 0x7d, 0x69, 0xbc, 0x6c, 0x97, 0xd7, 0x81, 0x33, 0x3e, 0x26, 0x07, 0x87, 0xcf, 0x11, 0xaf, 0x96, 0xca, 0xe5, 0x20, 0xbe, 0x29, 0x88, 0x39, 0xac, 0xf0, 0xba, 0x49, 0xc5, 0x06, 0x9b, 0x83, 0xc4, 0x43, 0x6d, 0xac, 0xa5, 0xca, 0x9c, 0x17, 0xc3, 0x99, 0xfb, 0xd3, 0x3d, 0x5e, 0x51, 0x23, 0x9d, 0x8c, 0x14, 0x2e, 0xbc, 0xaf, 0x74, 0xf8, 0xe0, 0xfd, 0x9c, 0x91, 0x28, 0x2d, 0x34, 0x8d, 0x2a, 0x8c, 0x2a, 0xb3, 0xda, 0x4d, 0xb2, 0xfa, 0xae, 0x20, 0x8b, 0xb1, 0xff, 0x07, 0x84, 0xfd, 0xb3, 0x65, 0x40, 0x88, 0x19, 0x58, 0x36, 0x78, 0x14, 0x49, 0xfb, 0x9e, 0x7c, 0xc2, 0xc4, 0xf0, 0xc1, 0x7f, 0x27, 0x3a, 0xd1, 0xc7, 0x21, 0x10, 0x3c, 0xfd, 0x5d, 0x07, 0x96, 0x72, 0xb3, 0x25, 0x1e, 0x7d, 0xf0, 0x95, 0x9c, 0xce, 0xd5, 0x9f, 0x90, 0xff, 0x62, 0xd8, 0x88, 0x6c, 0x54, 0x96, 0xd2, 0x45, 0xec, 0xa7, 0x53, 0xe1, 0xf2, 0x43, 0xb7, 0x55, 0xfa, 0x3e, 0xcb, 0x46, 0xe6, 0x82, 0x26, 0xfb, 0xac, 0xbd, 0x0f, 0xb6, 0x59, 0x57, 0x9b, 0x45, 0x56, 0xa7, 0x16, 0xd4, 0xea, 0x66, 0xa4, 0x05, 0x01, 0x64, 0x28, 0x43, 0x2c, 0x79, 0x65, 0x53, 0xe8, 0xbf, 0x64, 0x2b, 0x23, 0xfe, 0x15, 0x08, 0xfc, 0x68, 0x38, 0xbb, 0xcb, 0x87, 0x7e, 0x43, 0x61, 0x73, 0xec, 0xa1, 0x91, 0x48, 0x81, 0xe8, 0xef, 0xd7, 0x18, 0x94, 0xd7, 0x9c, 0x90, 0x1c, 0xb1, 0xf1, 0x29, 0xcb, 0x74, 0x80, 0x31, 0xcb, 0x69, 0xfe, 0xe1, 0x83, 0x32, 0x17, 0x82, 0x23, 0x0a, 0xa4, 0xd3, 0x7c, 0x4e, 0x24, 0xaf, 0x16, 0x3d, 0x6a, 0xeb, 0x7c, 0xfc, 0x93, 0x7e, 0xdb, 0xdc, 0x3b, 0xe4, 0xcb, 0xe0, 0xf1, 0xc4, 0x6d, 0x7a, 0xe7, 0xd0, 0xb6, 0x96, 0xee, 0xec, 0x0a, 0xd9, 0xa2, 0x93, 0x0d, 0x2b, 0xe2, 0x77, 0xb6, 0x73, 0x84, 0x68, 0xa5, 0xa1, 0x46, 0x77, 0xb6, 0xf2, 0x07, 0x5b, 0xd6, 0x6f, 0x37, 0x14, 0x15, 0xb8, 0x8c, 0xce, 0xfd, 0xff, 0xf6, 0x07, 0x22, 0x57, 0xd6, 0xf4, 0xfb, 0x2f, 0x6b, 0x21, 0xf0, 0x19, 0x8c, 0x59, 0xb4, 0xd1, 0x9d, 0xc5, 0xd5, 0x7a, 0xbc, 0x57, 0x92, 0x2a, 0x3b, 0x6a, 0xec, 0xa9, 0x53, 0xa2, 0x00, 0x76, 0x16, 0x1a, 0x93, 0x0b, 0xa6, 0xbe, 0xef, 0x62, 0xa5, 0xf5, 0xee, 0xb8, 0xec, 0x84, 0x54, 0x91, 0x80, 0xaf, 0x61, 0xfc, 0xc1, 0xa0, 0xa7, 0x18, 0xe5, 0x0d, 0x1a, 0xd7, 0xa5, 0x16, 0x66, 0x02, 0x36, 0x6c, 0x85, 0x7e, 0x7b, 0xb8, 0x90, 0xcd, 0x79, 0x3b, 0xd5, 0xd7, 0x0b, 0xb1, 0x2b, 0xeb, 0xd7, 0x7c, 0x82, 0x01, 0x80, 0xfe, 0xbe, 0x42, 0x1e, 0x47, 0xc6, 0xca, 0xeb, 0xf0, 0xd7, 0xac, 0x3e, 0x46, 0x1f, 0x36, 0xbe, 0xac, 0x87, 0x77, 0xcf, 0x3a, 0xd0, 0xff, 0x51, 0xaa, 0xe1, 0xe6, 0x8a, 0x75, 0x5f, 0x10, 0x60, 0x39, 0x7f, 0xae, 0xcc, 0x5e, 0x18, 0x08, 0x8b, 0xf9, 0xfd, 0x7b, 0x17, 0xf0, 0x89, 0xbd, 0xd5, 0x60, 0x7b, 0x69, 0x90, 0x3b, 0x04, 0xb7, 0x26, 0x36, 0x1f, 0x8a, 0x81, 0xe2, 0x21, 0xb1, 0xc9, 0x18, 0x91, 0x66, 0xd8, 0x9b, 0x39, 0x1b, 0xef, 0xf9, 0x7d, 0x77, 0xa7, 0xb2, 0xec, 0x9b, 0x2a, 0x9c, 0x15, 0xa9, 0xa2, 0x86, 0x9c, 0x87, 0xf2, 0x1c, 0x8d, 0xe0, 0xa5, 0x0b, 0xef, 0x6c, 0x23, 0x65, 0x9d, 0x72, 0x2b, 0x46, 0x51, 0x8b, 0x7d, 0xb8, 0x02, 0xa8, 0xd7, 0xd4, 0x70, 0x56, 0x23, 0x2a, 0xfd, 0x41, 0xef, 0x63, 0xbe, 0xf7, 0x1d, 0x25, 0xd2, 0xef, 0xdc, 0x37, 0xf2, 0xca, 0xd7, 0xe6, 0x4a, 0xd8, 0xac, 0xa7, 0x87, 0xde, 0x9f, 0xfd, 0x32, 0x17, 0x90, 0x9d, 0x3c, 0x78, 0x2a, 0xd1, 0xda, 0x38, 0x5e, 0x1a, 0x93, 0x90, 0x0f, 0x19, 0x96, 0xc0, 0x0f, 0xaf, 0x52, 0x52, 0x4b, 0x64, 0x41, 0xa2, 0x42, 0x05, 0x04, 0x9e, 0xbc, 0x91, 0xb5, 0xcb, 0xb8, 0x57, 0x79, 0x89, 0xa6, 0x58, 0x54, 0x97, 0xd6, 0xf2, 0x42, 0xd9, 0x31, 0xc0, 0x83, 0x59, 0x27, 0xbc, 0x36, 0x8d, 0xe8, 0xa6, 0x29, 0xd8, 0xd7, 0xaa, 0xf0, 0x52, 0x3b, 0x3d, 0x34, 0xcc, 0x38, 0x48, 0x4e, 0x0f, 0xff, 0x88, 0x14, 0x65, 0x41, 0x34, 0xf3, 0x5b, 0xe9, 0xe1, 0x3f, 0xc4, 0x0a, 0xa4, 0xc6, 0x01, 0x16, 0x76, 0xab, 0x80, 0x52, 0xdc, 0x72, 0x83, 0x86, 0xc7, 0x57, 0x23, 0xf9, 0xb8, 0xe4, 0x94, 0x9c, 0x29, 0xc2, 0xaa, 0x86, 0x29, 0xd0, 0x9c, 0xa0, 0x46, 0x72, 0x09, 0xa2, 0xaf, 0x2c, 0x38, 0x3e, 0x9a, 0x6f, 0xa4, 0x9a, 0xe4, 0xb2, 0xb8, 0x04, 0xf7, 0xc5, 0xd7, 0xe2, 0xf1, 0x62, 0x9f, 0xe7, 0x03, 0x06, 0x6f, 0x8d, 0x16, 0xfe, 0x26, 0xbf, 0xb5, 0xc5, 0x2e, 0xd5, 0x27, 0x8d, 0xba, 0xc6, 0xdb, 0x1c, 0x4b, 0x99, 0x0a, 0xd9, 0x79, 0x1d, 0x97, 0x27, 0xf0, 0xda, 0x3a, 0xf1, 0xb9, 0x47, 0xdd, 0x86, 0xbb, 0x3e, 0x46, 0xa8, 0x81, 0xac, 0xf7, 0xdf, 0x3d, 0x8d, 0x52, 0x14, 0x0d, 0x18, 0x01, 0x5a, 0x7e, 0x36, 0x95, 0x0f, 0x4f, 0x39, 0x6d, 0x24, 0x77, 0xcb, 0xda, 0xb9, 0x68, 0x24, 0x80, 0xed, 0x96, 0x81, 0x00, 0xf4, 0x33, 0xd1, 0xd4, 0x6a, 0x3d, 0xb1, 0x7a, 0xe6, 0xbb, 0x9a, 0xd4, 0xd3, 0x44, 0x59, 0xcf, 0x7b, 0xc0, 0xc0, 0x43, 0x65, 0x73, 0x9c, 0x1a, 0xe1, 0x37, 0xe7, 0xb5, 0xe1, 0x08, 0x3e, 0x8b, 0x0a, 0xc6, 0x95, 0x13, 0x0b, 0x37, 0x29, 0xe5, 0x2e, 0x4c, 0xb6, 0x1c, 0x2c, 0xa5, 0xea, 0xfe, 0x46, 0x56, 0x1a, 0xdf, 0x91, 0xec, 0x35, 0x42, 0x92, 0xab, 0xf6, 0x42, 0x0a, 0x1a, 0x5d, 0x30, 0x13, 0xc2, 0x5f, 0x7e, 0x6c, 0x32, 0xdd, 0xdb, 0x12, 0x46, 0xd3, 0xa0, 0x10, 0xa9, 0xd2, 0x6b, 0x97, 0x99, 0xb0, 0x09, 0x51, 0xea, 0x7e, 0x9a, 0xf3, 0x4e, 0xba, 0xef, 0x12, 0xd3, 0xc6, 0x37, 0x37, 0xad, 0x99, 0xdb, 0x35, 0x36, 0xb5, 0xa6, 0xba, 0x33, 0x58, 0x29, 0x25, 0x59, 0xf7, 0x5e, 0x97, 0x10, 0xe8, 0x8b, 0x4d, 0x76, 0x5f, 0x69, 0x2d, 0xa7, 0x9b, 0x86, 0x9e, 0x3c, 0x61, 0xe8, 0x9d, 0x11, 0xaa, 0xf3, 0x0e, 0x4c, 0x99, 0x8d, 0x4f, 0x9a, 0xaf, 0x7f, 0x13, 0xbc, 0x42, 0x1e, 0x6e, 0x43, 0x2b, 0x2c, 0x2c, 0x97, 0xc0, 0xf9, 0x67, 0x3e, 0x02, 0xcd, 0x59, 0x5b, 0x17, 0x8a, 0x6e, 0x75, 0xfa, 0x8e, 0x9d, 0x7a, 0x71, 0xd7, 0xf9, 0x04, 0x3f, 0x6a, 0x83, 0xda, 0x9b, 0xf5, 0x43, 0xba, 0xe2, 0xb3, 0x97, 0x56, 0x89, 0x90, 0xca, 0x9c, 0x55, 0x8e, 0xe8, 0x3a, 0xce, 0x67 ],
-const [ 0xfa, 0x15, 0xcc, 0x7f, 0x0d, 0xe2, 0x94, 0xd7, 0x34, 0x1b, 0x1f, 0xd7, 0x93, 0x26, 0xc8, 0xbe, 0x78, 0xe6, 0x78, 0x22, 0x34, 0x3c, 0x19, 0x92, 0x2a, 0xce, 0x4e, 0x79, 0x25, 0x07, 0x61, 0x45, 0xef, 0x5f, 0x7d, 0xc9, 0x1f, 0xdc, 0x1d, 0xe0, 0x32, 0xd8, 0xc4, 0x54, 0xdd, 0x06, 0xef, 0xfe, 0xa2, 0xb0, 0x47, 0x2e, 0xa2, 0x42, 0x1c, 0x4d, 0xb2, 0x0c, 0x0f, 0xc0, 0xb0, 0x44, 0x0e, 0x10, 0x18, 0x4a, 0x86, 0x48, 0xd2, 0x30, 0xd3, 0x9f, 0x4e, 0x7a, 0xfc, 0x57, 0xd3, 0x22, 0x9d, 0xe5, 0x14, 0xe0, 0x24, 0x52, 0x05, 0xa8, 0x40, 0xe1, 0xec, 0x73, 0x97, 0xf2, 0xbb, 0x42, 0xb8, 0x26, 0x9d, 0x60, 0x50, 0xc4, 0xcf, 0xe8, 0xa0, 0x5c, 0xb1, 0x88, 0x2e, 0xaa, 0x1d, 0x84, 0xbb, 0xbc, 0xf7, 0xfe, 0x76, 0x57, 0x05, 0x74, 0x6f, 0x98, 0x01, 0x8a, 0x4e, 0xd7, 0xed, 0x0a, 0x45, 0xd0, 0xa7, 0x29, 0x43, 0x05, 0xbd, 0x0c, 0x6b, 0x5e, 0x82, 0x8a, 0xc4, 0x13, 0x62, 0x34, 0x32, 0xcb, 0x72, 0x92, 0xa5, 0x06, 0x4b, 0xb0, 0x90, 0xb8, 0x19, 0xd9, 0x9d, 0x36, 0xef, 0xa3, 0x9f, 0x56, 0x5e, 0x2c, 0xc7, 0xd2, 0x45, 0xa2, 0x1c, 0xee, 0xea, 0x09, 0x25, 0x5b, 0x4a, 0x38, 0xe8, 0x5a, 0xae, 0x25, 0x19, 0x25, 0x7f, 0x63, 0x8b, 0x8a, 0x5b, 0xe9, 0xea, 0xd9, 0x68, 0x15, 0xac, 0x00, 0xe9, 0xf1, 0x45, 0xf5, 0x0f, 0xb4, 0x9a, 0x54, 0x11, 0x8c, 0xb9, 0x4a, 0x7f, 0x9a, 0xc7, 0xb1, 0xd3, 0x3e, 0x39, 0x7c, 0x49, 0x96, 0x48, 0x56, 0xf0, 0x41, 0x9e, 0x86, 0x01, 0x69, 0x56, 0x16, 0x70, 0x00, 0x23, 0x34, 0xc2, 0x49, 0xcf, 0xd8, 0x1e, 0x9b, 0xe8, 0xa7, 0xa6, 0x62, 0xb6, 0x18, 0x08, 0x66, 0x6f, 0xd5, 0x4f, 0x50, 0xae, 0x64, 0x00, 0x6a, 0x22, 0x06, 0x62, 0xa6, 0x83, 0xdf, 0x1d, 0xe2, 0xcb, 0x58, 0x06, 0x6a, 0xa2, 0xc2, 0x3a, 0xbe, 0x1a, 0x3c, 0x6a, 0x96, 0x9c, 0xd6, 0x75, 0x24, 0x23, 0xf6, 0x3c, 0x99, 0xa7, 0xfb, 0xb2, 0xea, 0xdd, 0x21, 0x32, 0xd4, 0x1d, 0xa4, 0x16, 0x1e, 0xa3, 0x29, 0x85, 0x1e, 0xfb, 0x59, 0x8c, 0x7e, 0xb7, 0xcf, 0x70, 0x40, 0x63, 0x34, 0x43, 0x00, 0xbb, 0xa8, 0xb6, 0x79, 0x1b, 0x64, 0x2e, 0x4b, 0x36, 0x9e, 0x1a, 0xfc, 0x0b, 0xad, 0x83, 0x3c, 0x15, 0x6e, 0xe4, 0x6d, 0xc2, 0xe6, 0x3d, 0x62, 0x27, 0x29, 0x63, 0x67, 0xf2, 0x7a, 0x9a, 0x82, 0xa0, 0xb3, 0x65, 0xf9, 0xf0, 0xe8, 0x9d, 0x14, 0x97, 0x47, 0xc1, 0x24, 0x35, 0x42, 0x8d, 0xc4, 0x88, 0xf1, 0xce, 0x5f, 0xdf, 0xb1, 0x74, 0xf3, 0xd2, 0x12, 0xe9, 0x14, 0x31, 0xf0, 0xa1, 0x33, 0x3a, 0xdf, 0xf3, 0x20, 0x0f, 0xcd, 0x27, 0xce, 0x67, 0xe2, 0xd0, 0x57, 0x83, 0xab, 0x5c, 0x3f, 0x64, 0x78, 0xe9, 0xfd, 0x3b, 0x02, 0x5a, 0xb7, 0x21, 0x51, 0xaa, 0x4e, 0x08, 0xdd, 0x81, 0x9a, 0xf1, 0xf4, 0x05, 0xf7, 0x60, 0x5b, 0xf3, 0x00, 0x0d, 0x38, 0xee, 0x9a, 0xdd, 0x2f, 0x17, 0x35, 0x10, 0xcc, 0xdd, 0x4e, 0xbc, 0x21, 0x17, 0x38, 0x7a, 0xb0, 0x50, 0x1d, 0x5f, 0x8b, 0x61, 0x40, 0x2e, 0xb9, 0x46, 0x84, 0xcb, 0xdc, 0x2a, 0x32, 0xf3, 0x11, 0xc4, 0xf7, 0x2b, 0x18, 0xe6, 0x2c, 0xf6, 0xb5, 0x53, 0x5a, 0x4b, 0x55, 0xd2, 0xfe, 0x46, 0xf5, 0x80, 0x89, 0x1e, 0x40, 0x6a, 0xab, 0x57, 0xf7, 0x5b, 0xd1, 0x39, 0x96, 0xf3, 0xed, 0x80, 0x35, 0xf9, 0x75, 0x55, 0xac, 0xf2, 0xae, 0x7d, 0xfa, 0xf3, 0x2a, 0xd1, 0xe8, 0xb3, 0x8f, 0xee, 0xe9, 0xe4, 0x9b, 0x2d, 0x45, 0xc4, 0x65, 0xd6, 0x76, 0xef, 0xe6, 0x90, 0xd2, 0x77, 0xb7, 0x1c, 0x6b, 0x36, 0x1c, 0x43, 0x34, 0x63, 0x42, 0x0d, 0x65, 0x64, 0xc5, 0x34, 0x20, 0xe3, 0x75, 0xd8, 0x54, 0x24, 0x5a, 0x74, 0xe2, 0x96, 0xf6, 0x11, 0xfe, 0xa8, 0xc9, 0xba, 0xd8, 0xdd, 0x1b, 0x2f, 0x7c, 0x23, 0xf5, 0xde, 0xf7, 0x61, 0x71, 0x0e, 0xbc, 0x4f, 0x33, 0x5e, 0x46, 0x8a, 0x38, 0x6e, 0xfe, 0xe8, 0xcf, 0xdc, 0x5e, 0x08, 0xe4, 0x72, 0x57, 0x2e, 0x84, 0x9d, 0xf0, 0x4e, 0x9e, 0x21, 0x31, 0x67, 0x07, 0x0c, 0x3f, 0x13, 0xc1, 0xe8, 0xc8, 0x5b, 0x7d, 0x35, 0xa1, 0xcf, 0x5e, 0x17, 0xae, 0xd7, 0x00, 0x4b, 0x03, 0x44, 0xb9, 0x5f, 0x48, 0x2a, 0x1f, 0x23, 0x62, 0xf2, 0xca, 0x5b, 0x50, 0xab, 0x5b, 0xb6, 0x52, 0xa1, 0xbc, 0x04, 0x51, 0x31, 0xaa, 0xa3, 0x7b, 0xdb, 0x71, 0x3a, 0x2e, 0x99, 0xf7, 0xaa, 0x17, 0x6f, 0xfc, 0x42, 0x9b, 0x44, 0xa0, 0x33, 0x75, 0xf0, 0x26, 0x43, 0xa1, 0x96, 0xf7, 0xc5, 0x79, 0x34, 0xea, 0xc8, 0x1f, 0x78, 0xc2, 0x8f, 0x1a, 0xd6, 0xf9, 0x41, 0x44, 0xd7, 0xbc, 0xe2, 0xe3, 0xb4, 0x36, 0x82, 0x16, 0x23, 0x11, 0xb4, 0x73, 0x71, 0x3a, 0x42, 0xee, 0xd1, 0xe5, 0x1f, 0xfc, 0xf4, 0xd2, 0x9d, 0xf9, 0xd9, 0xce, 0xe0, 0xc7, 0xe7, 0x7c, 0x93, 0xb9, 0x39, 0x55, 0xd9, 0xaf, 0x39, 0xee, 0x87, 0x82, 0x70, 0x79, 0x90, 0xa2, 0x9c, 0x8f, 0xc1, 0xfd, 0x03, 0x2d, 0xae, 0x23, 0x08, 0xfc, 0xec, 0xa8, 0xfc, 0xd5, 0x80, 0xca, 0x36, 0x84, 0x98, 0x54, 0x66, 0xcc, 0x79, 0xc3, 0x26, 0xac, 0xb9, 0xa6, 0xd2, 0xe1, 0xae, 0x4b, 0x9a, 0xac, 0x26, 0x97, 0xd5, 0xd5, 0x58, 0x36, 0x98, 0xf0, 0x1b, 0xf5, 0x88, 0xdf, 0x56, 0x6b, 0xec, 0x98, 0xb8, 0xdf, 0x07, 0x29, 0xa9, 0x66, 0xa4, 0xf9, 0x80, 0x4c, 0xf2, 0x50, 0xf6, 0xb5, 0x92, 0x19, 0xda, 0x84, 0xef, 0xe7, 0x07, 0x7c, 0xce, 0x37, 0x94, 0xa5, 0x26, 0xf5, 0x4a, 0xf2, 0x31, 0x41, 0x5b, 0x20, 0xc3, 0x72, 0x50, 0xe1, 0xdb, 0x5b, 0x44, 0x3a, 0x77, 0xce, 0x50, 0x2a, 0xad, 0x5f, 0x46, 0x8c, 0xf8, 0x6a, 0xa2, 0x3e, 0xd0, 0x58, 0xbd, 0x83, 0x7d, 0x1d, 0x44, 0xa6, 0x2c, 0x05, 0xe9, 0xe1, 0x43, 0xb1, 0x58, 0x7c, 0xf2, 0x5c, 0x6d, 0x39, 0x0a, 0x64, 0xa4, 0xf0, 0x13, 0x05, 0xd1, 0x77, 0x99, 0x67, 0x11, 0xc4, 0xc6, 0xdb, 0x00, 0x56, 0x36, 0x61, 0x2c, 0xd1, 0x06, 0x6f, 0xca, 0xe8, 0x2e, 0xed, 0xa8, 0x7f, 0x11, 0x84, 0x63, 0x11, 0x53, 0x18, 0xda, 0x50, 0xeb, 0x93, 0xe2, 0x0c, 0x79, 0xe5, 0x3c, 0x56, 0xd9, 0x49, 0xc4, 0xe5, 0xf8, 0xc9, 0xea, 0xb9, 0xe6, 0x04, 0x66, 0xfd, 0x2d, 0x2f, 0x28, 0x32, 0x62, 0x5a, 0x8e, 0x8a, 0xf9, 0xf4, 0xda, 0x92, 0x5d, 0x92, 0xe3, 0x14, 0x41, 0xec, 0x0b, 0x3c, 0x30, 0x28, 0x70, 0xf9, 0x6c, 0x5c, 0x67, 0xa6, 0xf5, 0x4e, 0x26, 0xea, 0xe8, 0x7e, 0xc0, 0xdd, 0x0a, 0x66, 0x57, 0x6c, 0xa5, 0x00, 0x8c, 0xfe, 0x93, 0x89, 0x3b, 0x58, 0x98, 0x85, 0x66, 0xbd, 0xf5, 0x03, 0x6e, 0x5a, 0x39, 0x22, 0x89, 0xe2, 0x5b, 0xd4, 0x70, 0x76, 0x06, 0xe2, 0x58, 0xc7, 0x34, 0x30, 0x24, 0x7e, 0xfe, 0x43, 0xd9, 0xdc, 0xb2, 0x00, 0x52, 0x9d, 0x27, 0xb6, 0x35, 0x23, 0x4d, 0x5f, 0x25, 0xd0, 0x08, 0x23, 0x39, 0xb4, 0x3f, 0x1e, 0xad, 0x68, 0x30, 0x63, 0xd8, 0x39, 0x06, 0x41, 0x5e, 0x89, 0xad, 0xc5, 0xa7, 0x73, 0xe5, 0x7f, 0x90, 0xae, 0x95, 0x89, 0x60, 0xb4, 0x62, 0xc6, 0xfd, 0x23, 0x81, 0x68, 0x60, 0x63, 0xc9, 0xb5, 0x46, 0x89, 0x0d, 0x0a, 0x28, 0x7b, 0xa8, 0x20, 0x6e, 0x55, 0x59, 0x8e, 0xe0, 0x0c, 0x52, 0x8f, 0x5d, 0x52, 0x8b, 0x06, 0xcf, 0xb9, 0x5c, 0xbf, 0x5e, 0x1a, 0x4b, 0xf8, 0xe4, 0x38, 0x23, 0x20, 0xa1, 0xa1, 0x46, 0xde, 0x31, 0xd5, 0x43, 0x55, 0xba, 0xaa, 0xab, 0xa7, 0x6a, 0xef, 0x21, 0xb7, 0x21, 0x50, 0xb1, 0x34 ],
-const [ 0xb7, 0x18, 0xc9, 0x68, 0xe8, 0xff, 0xe4, 0xea, 0x28, 0x2f, 0xc3, 0x3f, 0x96, 0xda, 0x23, 0x3b, 0x8a, 0x8a, 0xb6, 0xdd, 0xd5, 0x57, 0x81, 0x24, 0x4a, 0x5d, 0x82, 0x23, 0x7d, 0x6d, 0x97, 0x58, 0xca, 0x03, 0x9b, 0x3a, 0x99, 0x78, 0xd2, 0x11, 0xe1, 0x79, 0x87, 0x0a, 0xeb, 0xb8, 0xf3, 0x8b, 0x59, 0xe1, 0x61, 0xc4, 0x66, 0xd0, 0x90, 0x87, 0x6f, 0x01, 0x59, 0x59, 0xb3, 0x48, 0x91, 0xc9, 0x57, 0xc2, 0x31, 0x00, 0xad, 0x0b, 0xb4, 0x9a, 0xb5, 0xb1, 0xc1, 0xb4, 0xe4, 0xe9, 0x0a, 0x46, 0x25, 0x81, 0x74, 0xb4, 0x1e, 0x16, 0x78, 0x9f, 0xb4, 0x87, 0xc9, 0x01, 0xd1, 0xa9, 0x37, 0x79, 0x64, 0x3d, 0xd3, 0xe3, 0xaa, 0x1f, 0x54, 0x2c, 0xad, 0xc0, 0xb9, 0x64, 0x0a, 0xd5, 0x30, 0x15, 0xf6, 0x51, 0x37, 0xd4, 0x83, 0x91, 0x01, 0x15, 0x20, 0xd7, 0x1b, 0x44, 0x5f, 0xfa, 0x4f, 0x11, 0xfc, 0x5c, 0xc9, 0x0b, 0x1a, 0x1b, 0x78, 0x70, 0xcf, 0x8c, 0xb7, 0x43, 0xe3, 0xe5, 0x2d, 0xa0, 0xd5, 0x39, 0xf1, 0x4d, 0x1f, 0xaa, 0xf2, 0x91, 0xbb, 0xda, 0x97, 0x49, 0xe6, 0xa2, 0xa2, 0x38, 0x24, 0x07, 0x5a, 0x9f, 0x84, 0x69, 0xe9, 0x0d, 0x25, 0xfe, 0x03, 0x79, 0xf9, 0x7f, 0xc8, 0x8e, 0xc9, 0x21, 0xec, 0x46, 0x7a, 0xc7, 0x15, 0xba, 0x8e, 0x76, 0x84, 0x39, 0xee, 0x09, 0xf8, 0x97, 0xe6, 0x26, 0xcf, 0xc7, 0x71, 0x70, 0x6f, 0xac, 0xb7, 0xfe, 0xe4, 0x2d, 0xd4, 0x0d, 0xca, 0x88, 0xdb, 0xf1, 0x6e, 0xe8, 0x1a, 0x52, 0x30, 0x39, 0xa0, 0x94, 0x2c, 0x3b, 0xfd, 0x97, 0x19, 0xd5, 0x49, 0xa1, 0x70, 0xad, 0x68, 0x98, 0xd1, 0xf5, 0x8b, 0x75, 0xa4, 0x88, 0xfa, 0xf5, 0xfc, 0x35, 0x12, 0x91, 0xc0, 0x5a, 0x89, 0xb1, 0x0c, 0xb5, 0xfa, 0x1d, 0xd5, 0x78, 0x9d, 0xb4, 0xcc, 0x9b, 0x55, 0x60, 0x85, 0x76, 0xf1, 0x49, 0xd9, 0x8f, 0xab, 0x49, 0x89, 0xb1, 0xf5, 0xa1, 0x23, 0x3e, 0x76, 0xea, 0x2a, 0xc5, 0x4f, 0x4e, 0x71, 0xd7, 0xa2, 0xf7, 0xc8, 0x17, 0x55, 0xc8, 0xda, 0x91, 0x13, 0x4b, 0x56, 0x4d, 0x94, 0xeb, 0x4d, 0x23, 0x1f, 0x64, 0xdc, 0xd0, 0x4d, 0x77, 0x0a, 0x4a, 0x0f, 0xe2, 0xf3, 0x51, 0xf2, 0x8f, 0x27, 0x47, 0xa2, 0x0c, 0x4d, 0x41, 0xad, 0x3b, 0x0c, 0x5e, 0x8a, 0x4b, 0x2b, 0x58, 0xda, 0xe6, 0xf6, 0x58, 0xed, 0xac, 0xe4, 0x0f, 0x88, 0xe1, 0x78, 0x02, 0xe6, 0x62, 0x65, 0x25, 0xfc, 0xde, 0xf5, 0xac, 0x02, 0x42, 0xab, 0x1e, 0x2e, 0x75, 0x28, 0xab, 0xc3, 0x46, 0x4b, 0xbf, 0x4a, 0xa3, 0x9c, 0xd7, 0x1f, 0x0b, 0xeb, 0x94, 0x30, 0x45, 0x34, 0x0d, 0x02, 0x53, 0xc6, 0x6a, 0xf5, 0xa2, 0xa4, 0xaf, 0xc8, 0x83, 0x2c, 0xd5, 0x5f, 0xdf, 0xf6, 0x1f, 0xc4, 0x25, 0xff, 0xab, 0x6d, 0x88, 0x07, 0x48, 0xbd, 0x68, 0x37, 0x87, 0xcc, 0x0d, 0x07, 0x15, 0x6b, 0x9b, 0x5f, 0x47, 0x63, 0x42, 0xfc, 0xf7, 0xfe, 0xb6, 0x16, 0x8f, 0xc9, 0xdf, 0x40, 0x63, 0x97, 0xd1, 0x8f, 0x44, 0xc9, 0xfe, 0xfe, 0x51, 0xcd, 0xaa, 0x11, 0x11, 0xe5, 0xa0, 0xb9, 0xbf, 0x2a, 0x24, 0x78, 0xe5, 0xd0, 0x28, 0xc5, 0x2d, 0xab, 0xc3, 0xb2, 0x73, 0xf2, 0xde, 0xcc, 0x1e, 0x44, 0x31, 0x43, 0xb1, 0xe8, 0x6e, 0x4b, 0x9d, 0x59, 0xbb, 0xc1, 0x5a, 0x02, 0x66, 0x12, 0xb5, 0x46, 0xd4, 0x59, 0x6c, 0xc3, 0xbb, 0xc7, 0xf8, 0xd8, 0x91, 0x48, 0xaa, 0x64, 0x45, 0x63, 0xf9, 0xd1, 0x2c, 0x62, 0x1b, 0x52, 0x3e, 0xb4, 0xd2, 0x68, 0x82, 0x8f, 0x89, 0xab, 0xc7, 0xda, 0x9f, 0xc7, 0x95, 0x49, 0x03, 0xc5, 0x63, 0xca, 0x01, 0x8c, 0x0a, 0x20, 0x5b, 0xa7, 0x7a, 0xcd, 0x9c, 0x48, 0xac, 0x36, 0xa9, 0x8d, 0xd8, 0x02, 0x99, 0x03, 0xe7, 0xc3, 0xc6, 0x69, 0x2b, 0xd8, 0x24, 0xb6, 0x4e, 0x92, 0xd2, 0x5d, 0x88, 0x95, 0xef, 0xcf, 0x15, 0x81, 0xaf, 0x41, 0xe7, 0xd2, 0xae, 0xb0, 0x98, 0x05, 0x84, 0x23, 0xa2, 0xfd, 0x99, 0x31, 0xd2, 0xa4, 0x3b, 0xc2, 0xfa, 0xd5, 0xed, 0x1a, 0xe7, 0x7a, 0x02, 0x13, 0x92, 0xf1, 0x6b, 0xa9, 0x9a, 0xb5, 0xce, 0xbc, 0xf2, 0x3a, 0xd8, 0x12, 0xd7, 0x18, 0xd3, 0x9c, 0x06, 0x6c, 0x7b, 0xfa, 0x2b, 0x7b, 0x0d, 0x40, 0x9c, 0x99, 0xa2, 0xfb, 0x47, 0x4a, 0xbb, 0x6f, 0xea, 0xa6, 0x1d, 0x23, 0x82, 0x02, 0xdf, 0xa0, 0x05, 0xcc, 0xc1, 0x75, 0x53, 0xb7, 0xbf, 0x7e, 0x6a, 0x18, 0xe6, 0x66, 0xda, 0x90, 0x67, 0x6b, 0x7a, 0xec, 0xea, 0x61, 0x58, 0x49, 0x24, 0xfa, 0xf6, 0x7c, 0xac, 0x44, 0xb3, 0xb1, 0x0a, 0x73, 0x87, 0x51, 0x11, 0xe1, 0xf3, 0x2a, 0x70, 0x53, 0x38, 0xca, 0x83, 0x7e, 0xc8, 0x2b, 0x6f, 0xca, 0xfa, 0x96, 0x6d, 0x55, 0x01, 0xc1, 0x66, 0x3b, 0x1f, 0x3b, 0xc1, 0x15, 0x16, 0x09, 0x79, 0xbf, 0xe0, 0x92, 0x72, 0x5f, 0x9f, 0xb8, 0x0d, 0xa2, 0xd7, 0x48, 0xfa, 0x49, 0xdb, 0x94, 0x4d, 0xe5, 0x85, 0x5e, 0xd4, 0xde, 0x2a, 0xf8, 0xa8, 0xba, 0xcd, 0xaa, 0x03, 0x9c, 0x93, 0x54, 0x51, 0x0b, 0x77, 0x54, 0x8a, 0xf5, 0x3f, 0xaa, 0xbe, 0xf4, 0xaf, 0x5a, 0xf2, 0xcf, 0xfc, 0x12, 0x2a, 0x44, 0x84, 0x0d, 0xc7, 0x05, 0xbb, 0x37, 0x13, 0x00, 0x69, 0x92, 0x1b, 0xe3, 0x13, 0xd8, 0xbd, 0xe0, 0xb6, 0x62, 0x01, 0xae, 0xbc, 0x48, 0xad, 0xd0, 0x28, 0xca, 0x13, 0x19, 0x14, 0xef, 0x2e, 0x70, 0x5d, 0x6b, 0xed, 0xd1, 0x9d, 0xc6, 0xcf, 0x94, 0x59, 0xbb, 0xb0, 0xf2, 0x7c, 0xdf, 0xe3, 0xc5, 0x04, 0x83, 0x80, 0x8f, 0xfc, 0xda, 0xff, 0xbe, 0xaa, 0x5f, 0x06, 0x2e, 0x09, 0x71, 0x80, 0xf0, 0x7a, 0x40, 0xef, 0x4a, 0xb6, 0xed, 0x03, 0xfe, 0x07, 0xed, 0x6b, 0xcf, 0xb8, 0xaf, 0xeb, 0x42, 0xc9, 0x7e, 0xaf, 0xa2, 0xe8, 0xa8, 0xdf, 0x46, 0x9d, 0xe0, 0x73, 0x17, 0xc5, 0xe1, 0x49, 0x4c, 0x41, 0x54, 0x74, 0x78, 0xef, 0xf4, 0xd8, 0xc7, 0xd9, 0xf0, 0xf4, 0x84, 0xad, 0x90, 0xfe, 0xdf, 0x6e, 0x1c, 0x35, 0xee, 0x68, 0xfa, 0x73, 0xf1, 0x69, 0x16, 0x01, 0xda, 0x2e, 0x87, 0xb0, 0x0d, 0x1c, 0x6f, 0x25, 0x64, 0x31, 0x22, 0x75, 0x76, 0x39, 0x8b, 0xf2, 0x19, 0x45, 0xcc, 0x44, 0x25, 0x59, 0x25, 0xbb, 0x7b, 0x65, 0x17, 0xe3, 0x46, 0x76, 0xc9, 0x59, 0x81, 0x2e, 0xaa, 0xde, 0xba, 0x72, 0x58, 0xaa, 0x15, 0x62, 0xc1, 0x02, 0x93, 0x8e, 0x88, 0x0d, 0x94, 0x66, 0xaa, 0xe4, 0x9b, 0xf3, 0x61, 0xe8, 0x52, 0xc5, 0x48, 0x58, 0xce, 0x2d, 0xc0, 0x23, 0x13, 0xac, 0x93, 0xfa, 0xdb, 0xaa, 0xd8, 0xaa, 0x93, 0x6b, 0x17, 0xa9, 0xa7, 0x40, 0xad, 0xee, 0xff, 0xfa, 0x71, 0x06, 0xca, 0xa4, 0x97, 0x65, 0x7a, 0x72, 0xd5, 0xfa, 0x0f, 0xf4, 0xc5, 0x06, 0x99, 0x8f, 0x8b, 0x2d, 0xf8, 0x2e, 0xb7, 0xce, 0xe7, 0x35, 0x6d, 0x90, 0x39, 0xb7, 0xc3, 0x3d, 0x61, 0xe8, 0x6a, 0xd4, 0x38, 0xd5, 0x91, 0xd9, 0xfb, 0x52, 0x06, 0xf0, 0x93, 0x34, 0x9e, 0xaa, 0x1a, 0xc1, 0xd8, 0x9f, 0x9a, 0x65, 0xbd, 0xbd, 0x18, 0xa7, 0x0a, 0xdf, 0xd1, 0x5a, 0x91, 0xa1, 0xc3, 0x18, 0xdd, 0x73, 0x6f, 0xec, 0x15, 0xed, 0xde, 0x4f, 0x22, 0x63, 0xe2, 0x56, 0x14, 0xb8, 0x9e, 0x29, 0xc2, 0x77, 0x48, 0xb7, 0xb1, 0x1f, 0x2e, 0xa8, 0x38, 0xbf, 0xf7, 0x93, 0xe1, 0xc3, 0x2c, 0x72, 0x11, 0x0e, 0xf7, 0x53, 0xec, 0x49, 0x2a, 0x50, 0x73, 0x7a, 0x82, 0xc0, 0xef, 0xd8, 0x2e, 0xaf, 0x93, 0xde, 0x8b, 0x8c, 0x5d, 0x9e, 0x32, 0x22, 0x3d, 0x58, 0x34, 0xca, 0x79, 0x4b, 0xa4, 0xde, 0x50, 0xcb, 0x56, 0x70, 0xde, 0x94, 0xe7, 0x3c, 0x3f, 0x5e, 0xfd, 0xdc, 0xf7, 0xb1, 0xd0, 0x3b, 0x91, 0xfb, 0xea, 0x4c, 0x87, 0xe0, 0x2b, 0xfc, 0x62, 0xd1, 0x0f, 0x65, 0x22, 0xe0, 0x34, 0x44, 0xe0, 0xd2, 0x16, 0xad, 0xb2, 0x76, 0x1d, 0xfd, 0xcf, 0x36, 0xdb, 0x11, 0xf4, 0xec, 0x8e, 0xb5, 0x06, 0xf7, 0xed, 0x5f, 0xf8, 0x8d, 0x21, 0x1e, 0xef, 0x52, 0x11, 0xcd, 0xa4, 0x2a, 0xe2, 0x8c, 0x0a, 0x4c, 0xbe, 0x71, 0x32, 0x99, 0xd5, 0x7a, 0x6b, 0x2b, 0xa2, 0xc6, 0xad, 0x30, 0x70, 0x05, 0x38, 0xf9, 0x1c, 0x2e, 0x78, 0x4e, 0x1c, 0x70, 0x2c, 0x05, 0xc0, 0x6a, 0xc7, 0xd3, 0xb8, 0x9e, 0x16, 0x61, 0xd7, 0x23, 0x24, 0xa2, 0x17 ],
-const [ 0x32, 0x24, 0x5d, 0xf5, 0x14, 0xf6, 0xc2, 0x73, 0xd2, 0x52, 0x27, 0x1a, 0x98, 0x09, 0x29, 0xe5, 0x0a, 0x7c, 0xb0, 0xe7, 0x7b, 0x05, 0xc7, 0xd4, 0x60, 0x92, 0xab, 0xc3, 0x04, 0x93, 0x21, 0x32, 0x7d, 0x17, 0x0d, 0x4b, 0xde, 0x31, 0x41, 0x66, 0xae, 0xa1, 0x93, 0xce, 0x99, 0xb0, 0x32, 0xc8, 0x66, 0x5c, 0x3a, 0xd1, 0x29, 0xb5, 0x85, 0x28, 0xba, 0x87, 0xc5, 0x8c, 0x65, 0x39, 0xcf, 0x47, 0xe3, 0xf5, 0x3a, 0x6b, 0x89, 0x0a, 0x29, 0x5c, 0xc0, 0x8e, 0x65, 0x8e, 0xb5, 0x47, 0xaf, 0x90, 0x52, 0xcc, 0x54, 0x4a, 0x6c, 0xe7, 0x01, 0x83, 0x3e, 0x3e, 0xd9, 0xa6, 0x16, 0x32, 0xc5, 0xc5, 0x4e, 0x08, 0x0b, 0xde, 0x7e, 0x46, 0x23, 0x5d, 0xf0, 0x60, 0xc6, 0xe3, 0x54, 0x94, 0x47, 0x46, 0xb5, 0x13, 0x26, 0xd9, 0xac, 0x61, 0xe3, 0xed, 0xd4, 0xfe, 0x10, 0x97, 0x7d, 0x46, 0xaa, 0xb4, 0xa5, 0x96, 0xa9, 0x2b, 0x24, 0xb0, 0xd6, 0x72, 0x26, 0x61, 0xdd, 0x54, 0xde, 0x61, 0xa3, 0xf1, 0x79, 0x7a, 0xd9, 0x06, 0x51, 0xec, 0xd2, 0x6e, 0x64, 0x11, 0x91, 0xe9, 0x04, 0x3d, 0x27, 0x1d, 0xd0, 0xe8, 0x3c, 0xda, 0xe2, 0x0f, 0xeb, 0xa2, 0x4a, 0xd7, 0xd3, 0x69, 0xbb, 0x74, 0x6a, 0x99, 0x85, 0x49, 0x95, 0x59, 0xc3, 0x50, 0x76, 0x0f, 0xd6, 0xbd, 0x85, 0x23, 0x12, 0xde, 0xe3, 0x07, 0xb6, 0x46, 0xeb, 0x74, 0x22, 0x2a, 0x09, 0xf6, 0x44, 0x0b, 0xcf, 0xaa, 0x54, 0x95, 0x45, 0x46, 0xc1, 0xc8, 0x81, 0x5b, 0x6b, 0x55, 0x78, 0xd7, 0x12, 0x4b, 0x14, 0xce, 0x0e, 0xf2, 0x87, 0x7a, 0x41, 0xf7, 0xde, 0x80, 0x4b, 0xca, 0xd9, 0x74, 0xfc, 0x45, 0xfa, 0xa0, 0x0f, 0x8e, 0xdc, 0x01, 0x15, 0x3e, 0xc6, 0x93, 0xaf, 0xc3, 0x80, 0xcf, 0x00, 0x03, 0x65, 0x71, 0x62, 0x41, 0xba, 0x7e, 0x58, 0x45, 0x3e, 0x86, 0xc5, 0xb7, 0x02, 0x26, 0x5b, 0xcd, 0x7b, 0xd2, 0x55, 0x26, 0xd6, 0xd1, 0x69, 0xf5, 0x8b, 0x89, 0xf8, 0x61, 0x35, 0xfd, 0x89, 0x2c, 0xa1, 0x94, 0x75, 0x93, 0x25, 0x1c, 0xe3, 0x76, 0x33, 0x0e, 0xf7, 0xb9, 0x2d, 0x14, 0x47, 0xea, 0x7b, 0xc8, 0x8f, 0x24, 0xdc, 0xbf, 0xa5, 0x33, 0xf9, 0xc6, 0xaf, 0xf8, 0x40, 0x6b, 0x93, 0x0f, 0xef, 0xc0, 0xaf, 0xb0, 0x6f, 0x5b, 0xcb, 0xd3, 0xe4, 0xa1, 0x4b, 0x98, 0x02, 0x45, 0xa9, 0xe5, 0x22, 0x0b, 0x23, 0x51, 0x95, 0xd2, 0xb1, 0x41, 0x38, 0xd1, 0x3a, 0x50, 0x48, 0x21, 0x07, 0xf5, 0x78, 0x7b, 0x78, 0x60, 0x41, 0x44, 0xf6, 0xa4, 0x7a, 0xc6, 0x28, 0x1b, 0x28, 0xc1, 0x6a, 0x06, 0x97, 0x22, 0x7b, 0x75, 0xaa, 0x12, 0x75, 0x67, 0x6f, 0x32, 0x03, 0x31, 0xf6, 0x25, 0xce, 0x24, 0x64, 0x50, 0x38, 0x6a, 0x43, 0xdd, 0x4d, 0x31, 0x1c, 0x06, 0xf6, 0x0c, 0x48, 0x90, 0x70, 0x95, 0x03, 0x95, 0xfd, 0x58, 0xc2, 0x87, 0xda, 0xec, 0xc7, 0x72, 0x70, 0x63, 0xf2, 0x81, 0xce, 0xe5, 0xda, 0xc4, 0x57, 0x97, 0x1c, 0x30, 0xb8, 0xc1, 0xf3, 0xe8, 0x1e, 0x31, 0x09, 0xbb, 0xa5, 0xda, 0x8d, 0xed, 0x13, 0xc1, 0x86, 0x3a, 0xc6, 0x1a, 0x67, 0x18, 0xeb, 0xad, 0xe3, 0x3d, 0xf1, 0x7f, 0x02, 0x61, 0x3d, 0xaf, 0x75, 0x45, 0x20, 0x9e, 0x27, 0xf4, 0x06, 0x52, 0x14, 0x48, 0xf0, 0x1d, 0x5e, 0xb1, 0x24, 0x79, 0x9d, 0x32, 0x22, 0x37, 0x77, 0xac, 0xdb, 0xd9, 0x72, 0x5f, 0x1e, 0x3c, 0x05, 0xae, 0x53, 0x7a, 0xf5, 0x22, 0x6b, 0x0e, 0xdf, 0xb2, 0x17, 0x39, 0x10, 0x42, 0x38, 0xa5, 0x9d, 0x69, 0x97, 0x49, 0xb1, 0x77, 0xd7, 0x8c, 0x21, 0xb7, 0xa8, 0xad, 0x46, 0xf1, 0x3d, 0x62, 0x0b, 0x33, 0xff, 0xbf, 0x45, 0xd1, 0x83, 0x5a, 0x43, 0xab, 0xb9, 0xad, 0xa6, 0xae, 0x67, 0xbb, 0x73, 0x9e, 0xd6, 0xf7, 0x67, 0x12, 0xcc, 0x61, 0x8b, 0xc0, 0xb9, 0xf2, 0x08, 0xfa, 0x35, 0x3a, 0x3b, 0x79, 0xaa, 0x48, 0x0c, 0x5a, 0x4e, 0xca, 0x7c, 0x66, 0x55, 0x75, 0x7e, 0x96, 0x64, 0xa7, 0x08, 0xd6, 0x48, 0x4b, 0x69, 0x0a, 0xe8, 0xfe, 0xdd, 0x4f, 0x78, 0x6f, 0x5f, 0x83, 0xf0, 0x0c, 0xbe, 0x07, 0xbd, 0xdb, 0xf3, 0xc3, 0xb6, 0xa5, 0xb2, 0x6b, 0x51, 0x5a, 0x3f, 0x01, 0x17, 0xb1, 0x83, 0x9c, 0x55, 0x0f, 0x5f, 0x67, 0x15, 0xaa, 0x40, 0xec, 0x4c, 0xee, 0xf4, 0x93, 0x55, 0x20, 0xbc, 0x65, 0x9e, 0x41, 0xa2, 0x16, 0xa2, 0x35, 0x0c, 0x43, 0x17, 0x24, 0x92, 0xf8, 0x68, 0x21, 0x0d, 0x75, 0x65, 0x09, 0xf0, 0x32, 0x3a, 0xae, 0xdc, 0x20, 0x9d, 0x35, 0x6e, 0x32, 0x4c, 0xbd, 0x5c, 0x1c, 0xb7, 0x42, 0xc0, 0x5b, 0xf9, 0xc0, 0xb3, 0x75, 0x0d, 0x9b, 0x1e, 0x82, 0x3f, 0x3e, 0xcd, 0xeb, 0xe0, 0x02, 0xc5, 0x72, 0x3e, 0x52, 0xd8, 0x72, 0xd4, 0x0e, 0x76, 0x68, 0xbd, 0x2c, 0xc6, 0xb3, 0x6f, 0xa5, 0xf5, 0x98, 0xa5, 0x8f, 0xcf, 0x89, 0x9d, 0x86, 0x8c, 0xa7, 0x84, 0x51, 0xec, 0x85, 0x2f, 0xc3, 0x86, 0x2f, 0x0b, 0xde, 0x5c, 0x6b, 0x57, 0x3f, 0xb4, 0x3e, 0x90, 0xb6, 0x23, 0xb2, 0x2d, 0x34, 0xeb, 0xd7, 0x8d, 0xea, 0x87, 0x08, 0x2e, 0xaf, 0x83, 0x6f, 0x1f, 0xa2, 0x91, 0xcc, 0xb8, 0x11, 0xda, 0x71, 0x88, 0x9a, 0x92, 0x91, 0x8f, 0x90, 0xcf, 0xbb, 0xad, 0xa1, 0x9b, 0xa2, 0x5b, 0xb5, 0x47, 0x1f, 0x99, 0x18, 0x03, 0x79, 0x27, 0xdc, 0xac, 0xe3, 0xf8, 0x79, 0xe5, 0x46, 0xe4, 0xb7, 0x69, 0x41, 0x9d, 0xce, 0xa0, 0x6f, 0xe4, 0xcb, 0x70, 0xe8, 0xfd, 0x35, 0x55, 0x0a, 0x60, 0xf1, 0xb4, 0x79, 0xb1, 0x63, 0x6c, 0x64, 0xf2, 0xd6, 0xaf, 0x0a, 0xf8, 0x1e, 0x10, 0x7d, 0x1b, 0x7b, 0xdc, 0xa6, 0x32, 0xc1, 0xae, 0x8a, 0xbf, 0xb6, 0x3e, 0xcb, 0x66, 0xbc, 0x7a, 0x72, 0xa4, 0xb0, 0xd8, 0xeb, 0xbd, 0x11, 0xea, 0x51, 0xf6, 0x65, 0x33, 0xed, 0x05, 0xd8, 0x39, 0xf9, 0xc6, 0x27, 0xdb, 0xa9, 0x2f, 0xbc, 0xe5, 0x6c, 0x86, 0x1b, 0xe2, 0x6f, 0xd1, 0x7c, 0x31, 0x62, 0x8f, 0xb9, 0x5b, 0x80, 0xa5, 0x6b, 0xa4, 0xc9, 0x9b, 0x50, 0xe0, 0x92, 0x08, 0xf1, 0x88, 0x40, 0x4b, 0x81, 0x0d, 0x51, 0x7c, 0x07, 0x6c, 0x9c, 0xa3, 0xc0, 0x03, 0xd9, 0x27, 0xbe, 0xa3, 0x63, 0x89, 0xd6, 0xe6, 0x3d, 0x51, 0xb9, 0xc3, 0x53, 0x49, 0x61, 0x5f, 0x03, 0xea, 0xaf, 0x26, 0xdc, 0x14, 0x52, 0x1b, 0xa6, 0x02, 0xea, 0x6c, 0xa2, 0x7c, 0x6d, 0x4a, 0x13, 0x4e, 0xca, 0xf7, 0xfc, 0xfa, 0xcd, 0x21, 0x2c, 0xaa, 0x43, 0x6e, 0x78, 0x68, 0x5e, 0x58, 0x48, 0x91, 0x5b, 0x3b, 0x55, 0x87, 0x61, 0xac, 0xb0, 0xa7, 0xad, 0x0d, 0x07, 0x7b, 0xec, 0x5e, 0x24, 0x30, 0xe8, 0x56, 0xb6, 0x4a, 0x67, 0xb3, 0x54, 0x96, 0x50, 0xce, 0xbf, 0x60, 0x10, 0x72, 0x67, 0xe7, 0x3c, 0xee, 0x31, 0x0e, 0x78, 0x69, 0x78, 0x54, 0x97, 0x76, 0x52, 0x06, 0x04, 0xe9, 0x14, 0xb4, 0x60, 0xe8, 0x18, 0xe1, 0x6c, 0x45, 0xbd, 0xfe, 0x2a, 0x0b, 0xb0, 0x9a, 0x3f, 0x56, 0x6a, 0xd3, 0x9c, 0x68, 0xfa, 0x10, 0x5d, 0xfa, 0x05, 0xf2, 0xf1, 0xd0, 0x0b, 0x87, 0x7c, 0x90, 0xeb, 0xc1, 0x79, 0xd4, 0xaa, 0x27, 0xa4, 0x7e, 0x70, 0xcb, 0x17, 0x4c, 0xd3, 0x7c, 0xb3, 0xac, 0x58, 0x3c, 0xc1, 0xd1, 0x37, 0xf5, 0xd9, 0x06, 0x5f, 0x67, 0x03, 0x42, 0xba, 0x65, 0x1d, 0xfd, 0xb2, 0x41, 0x7d, 0x43, 0xf4, 0x85, 0xd7, 0x07, 0x74, 0xe3, 0x60, 0xb9, 0xb1, 0x6f, 0x33, 0x1b, 0x3a, 0x0c, 0xf4, 0x50, 0x71, 0x24, 0xb4, 0x35, 0x8f, 0x9d, 0x15, 0xf5, 0xe8, 0x08, 0xaf, 0xd8, 0x71, 0x1b, 0xb2, 0x5c, 0x7f, 0x61, 0xcc, 0x87, 0xd1, 0x30, 0x4d, 0x7b, 0xd1, 0xdc, 0x89, 0x4b, 0x17, 0x2a, 0x7d, 0x0d, 0x2f, 0x07, 0xb6, 0x31, 0x9c, 0x7a, 0x6f, 0x11, 0x1c, 0xd8, 0xfa, 0xc8, 0x2e, 0x37, 0x61, 0x48, 0xd2, 0x24, 0x4c, 0xa7, 0x90, 0x99, 0x25, 0xba, 0xbb, 0x29, 0x7b, 0xe5, 0xf7, 0x7e, 0xa4, 0x31, 0xf9, 0x05, 0xa7, 0x9f, 0x8e, 0xe8, 0x59, 0xbd, 0xdf, 0x3d, 0xc5, 0x76, 0xf3, 0x7d, 0xd1, 0x2e, 0x75, 0x37, 0x1f, 0x0f, 0xb8, 0x05, 0x32, 0x9d, 0xf8, 0xc0, 0xd2, 0x91, 0xe3, 0xf0, 0xb1, 0xe4, 0x57, 0x86, 0x4e, 0x2a, 0x6e, 0xce, 0x1a, 0x21, 0xb8, 0x9f, 0xda, 0x8a, 0xc7, 0xd5, 0x4c, 0x37, 0xf1, 0x00, 0x0d, 0x66, 0x51, 0x5e, 0xba, 0x4d, 0x0f, 0x07, 0x55, 0xf6, 0xe1, 0x68, 0xeb, 0x4d, 0xd2, 0xf2, 0x74, 0x78, 0x43, 0x13, 0xfb, 0x66, 0x2f, 0x66, 0xff, 0xab, 0xb3, 0x27, 0x18, 0x8b, 0xcd, 0xe9, 0xde, 0x54, 0x64, 0x8b, 0x06, 0xf2, 0x88, 0x68, 0xce, 0xbd, 0xfc, 0xce, 0x9c, 0x95, 0xf1, 0xb2, 0xe1, 0x31, 0x15, 0xa1, 0x44, 0xb4, 0xcc, 0xfa, 0xfd, 0x81, 0xbd, 0x5b, 0x7e, 0x51, 0x91, 0x59, 0x59, 0x83, 0xf7, 0x74, 0x5e, 0xb3, 0xec, 0x49, 0x03, 0x8d, 0x39, 0x0a, 0x0a, 0xe3, 0x3d, 0x2c, 0x5d, 0xfe, 0xec, 0x5f, 0x3d, 0x32, 0x18, 0xc3, 0x9b, 0xb5, 0xf0, 0x59, 0xc6, 0xb2, 0xc6, 0xb8, 0x47, 0x98, 0x15, 0x01, 0x09, 0xb8, 0xc2 ],
-const [ 0x9f, 0x07, 0xe6, 0xb7, 0xea, 0x8b, 0x6d, 0x2b, 0xb3, 0x01, 0xd6, 0xce, 0x70, 0x19, 0xe0, 0xf2, 0x7a, 0xd5, 0x5a, 0xbb, 0xb7, 0x99, 0xe6, 0xd4, 0x76, 0x81, 0xfe, 0x60, 0x9a, 0xf6, 0x34, 0x34, 0xfb, 0x84, 0xbe, 0x43, 0x09, 0xe6, 0x31, 0x59, 0xb3, 0x63, 0x8d, 0x0d, 0x87, 0x5e, 0x7a, 0xf1, 0x1a, 0x28, 0xd1, 0x0b, 0xaa, 0x18, 0x5e, 0x89, 0x02, 0xde, 0xe5, 0xb0, 0x9e, 0x14, 0x62, 0x16, 0x10, 0x16, 0x95, 0x11, 0xa2, 0x14, 0xbe, 0x6f, 0x3d, 0x65, 0xa6, 0x67, 0x89, 0x1e, 0xde, 0xd0, 0x56, 0xe4, 0x4b, 0x91, 0x3b, 0xfe, 0xe3, 0x59, 0x7c, 0xae, 0xb1, 0x90, 0x31, 0xc2, 0x1f, 0x8d, 0xa5, 0x66, 0x74, 0x09, 0xfd, 0x3c, 0x9c, 0xd3, 0x1a, 0xaf, 0x28, 0xc6, 0xc0, 0x84, 0x95, 0xf9, 0xf7, 0xb1, 0xd1, 0x35, 0xb1, 0x73, 0xfb, 0xac, 0xae, 0x9b, 0x6a, 0xe7, 0x9d, 0x28, 0xf2, 0x01, 0x84, 0x1b, 0x62, 0x13, 0x61, 0x87, 0x51, 0xef, 0x12, 0xe8, 0x1b, 0x11, 0x72, 0xb5, 0x26, 0xd2, 0xc5, 0x39, 0x6a, 0xdf, 0x56, 0x9e, 0x30, 0xea, 0x5e, 0x4b, 0x19, 0x9f, 0x28, 0x70, 0x63, 0xda, 0x73, 0xde, 0x68, 0x17, 0x18, 0x1d, 0x67, 0x2a, 0xec, 0xb8, 0x87, 0x30, 0xe8, 0xdc, 0x19, 0xc5, 0x87, 0x21, 0x1e, 0x77, 0x70, 0xa8, 0x09, 0x7b, 0x55, 0x66, 0xc6, 0x9f, 0x1b, 0xbf, 0xfa, 0x80, 0x3b, 0x57, 0x8d, 0xfd, 0x68, 0x25, 0x66, 0xeb, 0x72, 0xc9, 0x75, 0x0a, 0x6a, 0x1f, 0xf7, 0x38, 0x07, 0x14, 0xf5, 0xe5, 0x48, 0xb8, 0x0e, 0xc7, 0x5b, 0x95, 0x77, 0xcf, 0xbe, 0x40, 0x40, 0x5b, 0xa4, 0x2d, 0xd9, 0xad, 0x9a, 0xc7, 0xd4, 0x9c, 0x6a, 0xc0, 0xec, 0x89, 0x3f, 0xa6, 0x47, 0x95, 0x0b, 0xb8, 0xf8, 0x11, 0x26, 0xf7, 0xc8, 0x37, 0x38, 0x80, 0x36, 0x17, 0x58, 0x18, 0xbc, 0xd3, 0x75, 0x09, 0x54, 0x0f, 0xf5, 0x2d, 0x3b, 0xa4, 0x9d, 0x48, 0xf5, 0x94, 0xb1, 0x9a, 0x91, 0x43, 0x5c, 0xb5, 0x2e, 0xe4, 0x51, 0x8d, 0xbe, 0x31, 0xb3, 0xce, 0x0a, 0x5f, 0x33, 0x72, 0xf7, 0x51, 0x78, 0x92, 0x07, 0x0c, 0xc3, 0x7c, 0x22, 0x6b, 0xd3, 0x07, 0x97, 0x13, 0x06, 0x23, 0x5e, 0xaa, 0xc2, 0xb4, 0xa0, 0x44, 0x13, 0xa1, 0x78, 0x1e, 0x95, 0x27, 0xfc, 0x8f, 0x95, 0x74, 0x77, 0x3b, 0x73, 0x71, 0xf9, 0x8a, 0x4a, 0xdf, 0x12, 0x59, 0xd3, 0xa5, 0xda, 0xef, 0x87, 0x68, 0x34, 0x32, 0x04, 0x5d, 0x54, 0x1a, 0xb2, 0x5b, 0x7f, 0x67, 0xa6, 0x35, 0x12, 0x8f, 0xc7, 0x46, 0xc6, 0xfb, 0x2f, 0x4d, 0x32, 0x72, 0xd4, 0x7c, 0x92, 0xd6, 0x67, 0xcb, 0xc6, 0x0e, 0x7c, 0x92, 0x9e, 0x43, 0xec, 0x57, 0x54, 0x4f, 0x77, 0xe4, 0x5a, 0x72, 0xae, 0x9d, 0x56, 0x47, 0x11, 0x11, 0x6c, 0xf7, 0x74, 0xcf, 0xbb, 0xad, 0xa7, 0x7b, 0x2a, 0x4a, 0x55, 0x21, 0x64, 0x59, 0x2d, 0xc8, 0x21, 0x45, 0x40, 0x4b, 0xa8, 0xc9, 0xaa, 0x64, 0x91, 0xa9, 0x75, 0x0a, 0xd0, 0xa0, 0xba, 0xfd, 0xef, 0x99, 0x09, 0x9f, 0x9b, 0x22, 0x0b, 0x05, 0x62, 0x1d, 0x66, 0x4e, 0xbb, 0xb8, 0xe1, 0x33, 0x47, 0xa0, 0xc9, 0xe0, 0x56, 0x72, 0x93, 0x02, 0xad, 0x73, 0xc2, 0x22, 0x87, 0x80, 0x0c, 0x31, 0xd9, 0x48, 0xb8, 0x64, 0xda, 0xb8, 0x4a, 0x42, 0xc3, 0xb7, 0x62, 0xfb, 0xd3, 0x14, 0xe2, 0xfb, 0x97, 0xbc, 0x4f, 0xbf, 0x68, 0x31, 0x7a, 0xe7, 0x35, 0x37, 0x5f, 0x8d, 0x83, 0xd1, 0x4d, 0xd6, 0xb1, 0x6b, 0x47, 0xc6, 0x81, 0x59, 0xab, 0x59, 0xd4, 0x80, 0x11, 0xcf, 0xb5, 0x53, 0x76, 0x47, 0x99, 0x02, 0x9a, 0x8f, 0xe5, 0xed, 0xa6, 0x3b, 0xb1, 0x5f, 0x12, 0xf4, 0xcc, 0x79, 0xc6, 0x13, 0x00, 0x6c, 0x7f, 0x6f, 0x97, 0xec, 0x75, 0x72, 0x1d, 0xe1, 0x3b, 0x73, 0x68, 0x5f, 0xe6, 0x3f, 0xd6, 0xd8, 0x71, 0xf9, 0xd6, 0x90, 0x60, 0x25, 0xaa, 0x52, 0xa4, 0xff, 0x6b, 0x62, 0xbf, 0x11, 0x4d, 0xb2, 0x28, 0x04, 0x24, 0x58, 0xf1, 0xb7, 0x27, 0x40, 0xa7, 0x8e, 0xf4, 0x1e, 0x7a, 0x0d, 0xd5, 0xa7, 0x9d, 0xa5, 0x42, 0x01, 0xf0, 0xcd, 0xa7, 0x78, 0xdd, 0x55, 0x67, 0x72, 0x7f, 0xf7, 0x20, 0xa5, 0x0a, 0x30, 0x31, 0x87, 0x67, 0x4e, 0x79, 0x06, 0x1e, 0xc9, 0x62, 0x7a, 0x79, 0xd6, 0x1e, 0xd8, 0xe7, 0x3a, 0x31, 0x28, 0x9e, 0x5c, 0x30, 0x39, 0x84, 0x9f, 0xc8, 0x93, 0x50, 0xee, 0x01, 0xad, 0xec, 0x99, 0xc4, 0x60, 0x1e, 0x5f, 0x9c, 0x9c, 0x68, 0xcc, 0xb9, 0x5a, 0x2d, 0xc5, 0x3a, 0xd1, 0x14, 0x61, 0xac, 0xed, 0xb2, 0xfa, 0xcd, 0xfd, 0x63, 0x84, 0x96, 0xac, 0x78, 0x1e, 0x79, 0x32, 0x98, 0xe7, 0xe8, 0xcb, 0x60, 0x13, 0x16, 0x68, 0x4d, 0x3e, 0x01, 0xa5, 0xdc, 0xff, 0xb0, 0xfc, 0xef, 0xc1, 0xb9, 0x38, 0x73, 0xce, 0x07, 0x2c, 0x40, 0xad, 0xda, 0xa4, 0x40, 0xae, 0x0f, 0x9c, 0xd4, 0xc3, 0xa2, 0xb0, 0x73, 0x91, 0x71, 0xd4, 0x95, 0xc7, 0x43, 0x45, 0xcf, 0xaf, 0x08, 0xc0, 0x3f, 0x03, 0x63, 0xf1, 0x2a, 0x01, 0x65, 0x2e, 0xe4, 0xc1, 0x9c, 0x65, 0xf0, 0xc7, 0x4c, 0x53, 0x69, 0xd5, 0xfc, 0xf7, 0xa0, 0x02, 0x34, 0x47, 0x07, 0x10, 0x86, 0x21, 0x4e, 0xfb, 0xcb, 0x84, 0xcb, 0xce, 0xaf, 0x00, 0x1f, 0xba, 0x70, 0x6b, 0x17, 0x69, 0xe2, 0xd6, 0xd0, 0x90, 0xb7, 0xbf, 0x1f, 0xc4, 0xfd, 0x89, 0x2f, 0x8e, 0xe8, 0x29, 0x6c, 0xc1, 0xd2, 0x21, 0xa0, 0x0b, 0x80, 0xb2, 0x5c, 0xcb, 0xa7, 0x4d, 0x9a, 0x22, 0xae, 0x4c, 0xa0, 0x4d, 0xb6, 0xdf, 0x28, 0x32, 0xd8, 0x49, 0xbd, 0x38, 0xad, 0x4c, 0x68, 0x5c, 0x14, 0xe1, 0x8c, 0x82, 0x2f, 0x2d, 0x0f, 0x08, 0xaf, 0xb1, 0xba, 0xa1, 0x52, 0xc1, 0xe3, 0x61, 0xa9, 0x37, 0x49, 0x14, 0x1f, 0x68, 0x3f, 0xd4, 0x37, 0x57, 0x0d, 0xdb, 0x15, 0x29, 0x93, 0x95, 0x40, 0xd9, 0x2f, 0xf9, 0xa6, 0x2d, 0xe1, 0x1a, 0xe1, 0xe9, 0xad, 0xf9, 0xb8, 0x42, 0x41, 0x9e, 0xe9, 0x95, 0xd8, 0x67, 0x26, 0x59, 0x5e, 0x9f, 0x5d, 0x53, 0xd5, 0x52, 0x3c, 0x08, 0xf7, 0x60, 0xf5, 0x78, 0x1d, 0xd1, 0x3e, 0x09, 0x5f, 0x68, 0x9c, 0xc2, 0xfd, 0x7b, 0xe2, 0xb9, 0xfe, 0x02, 0xf4, 0xcf, 0x16, 0xed, 0xd1, 0x9a, 0xcd, 0xbb, 0xd1, 0xa3, 0xde, 0x48, 0x2b, 0xd2, 0xdd, 0xe6, 0xb9, 0x26, 0x1d, 0xb0, 0x00, 0xa9, 0xd1, 0x1b, 0x6b, 0xa4, 0x71, 0xce, 0xd7, 0x0f, 0x60, 0xb4, 0x54, 0x4b, 0xcb, 0x4f, 0x2a, 0x14, 0xd4, 0x4f, 0x1b, 0xb1, 0xf0, 0x63, 0xe8, 0x6d, 0x8d, 0x4f, 0x17, 0x4b, 0xf9, 0x3f, 0xf2, 0xf6, 0x7f, 0x5a, 0xd3, 0xf7, 0xd3, 0x9b, 0x9f, 0x2a, 0xb0, 0xdc, 0x91, 0x73, 0xbf, 0x34, 0x39, 0xad, 0xbb, 0x83, 0xc4, 0xe3, 0xd3, 0x4b, 0x7d, 0xc3, 0x4f, 0xc2, 0x94, 0x4f, 0x77, 0x25, 0x1e, 0xd6, 0xb0, 0x4e, 0x5e, 0x23, 0xe9, 0x89, 0x43, 0xf4, 0x35, 0xa4, 0x31, 0xae, 0xb9, 0x45, 0x05, 0x4e, 0xc9, 0x80, 0x53, 0xa3, 0x4e, 0xa9, 0xf1, 0xbb, 0x6b, 0x67, 0xba, 0x9b, 0x60, 0x0a, 0x8c, 0x32, 0xae, 0x1f, 0x93, 0x90, 0x7c, 0x41, 0xca, 0x54, 0x39, 0x32, 0xbe, 0x63, 0x83, 0x2a, 0x96, 0xe0, 0x47, 0x6e, 0x50, 0x58, 0x2a, 0x25, 0x4d, 0x3c, 0x28, 0x67, 0x10, 0x95, 0x7b, 0x98, 0x43, 0xf3, 0xbf, 0xf4, 0xfa, 0xa6, 0x53, 0x6a, 0x3c, 0x31, 0x02, 0xae, 0xc0, 0xfc, 0xe3, 0x8a, 0xf4, 0x49, 0x7d, 0x75, 0x43, 0x69, 0x2f, 0x66, 0x98, 0x30, 0xd0, 0xea, 0x1e, 0xa6, 0x92, 0x75, 0x4b, 0xff, 0x2c, 0xf5, 0x1c, 0xce, 0x38, 0xad, 0xa2, 0x75, 0xd9, 0x41, 0xbd, 0xe0, 0xa2, 0x0d, 0x28, 0x73, 0xb3, 0xbb, 0xb5, 0x40, 0x25, 0x15, 0xda, 0x7e, 0xa9, 0x17, 0x6d, 0x36, 0x6b, 0x49, 0xac, 0x40, 0x3d, 0x4c, 0x80, 0x6e, 0xf1, 0xb2, 0x03, 0x07, 0x06, 0x13, 0x3f, 0x77, 0x88, 0x5c, 0x39, 0x44, 0x31, 0x6b, 0x2e, 0x44, 0xd4, 0xd9, 0x1c, 0x0e, 0xfc, 0x17, 0x84, 0xae, 0xd0, 0xbd, 0x6e, 0x9d, 0x39, 0x1e, 0xaf, 0xf0, 0x47, 0x20, 0x67, 0xcf, 0xd1, 0x4b, 0xcd, 0x29, 0x5c, 0x1f, 0x2f, 0xa6, 0x3e, 0xab, 0x34, 0xdd, 0x04, 0x5b, 0x65, 0xc8, 0x10, 0x12, 0xeb, 0x74, 0x87, 0x78, 0x9a, 0xfd, 0x6a, 0x96, 0x2f, 0xba, 0x02, 0xa0, 0xd6, 0xb5, 0x82, 0x11, 0xf0, 0x5e, 0xe8, 0xfd, 0x12, 0x80, 0x24, 0xa3, 0x51, 0x73, 0x7c, 0x43, 0xbd, 0x94, 0x2f, 0x2f, 0x2b, 0xf2, 0x58, 0x23, 0x38, 0x4a, 0x16, 0xd9, 0x8a, 0x36, 0xea, 0xd9, 0x59, 0xa1, 0x60, 0x8f, 0x2e, 0x7e, 0xf2, 0x9f, 0xeb, 0xb9, 0x29, 0x7d, 0x0c, 0x6e, 0x05, 0x38, 0x2c, 0x5a, 0x9f, 0x96, 0xcb, 0x8f, 0x0d, 0x66, 0x4e, 0x6b, 0x86, 0x12, 0x47, 0xca, 0xc6, 0x74, 0xf7, 0x7b, 0xb4, 0xea, 0x12, 0xf1, 0x43, 0xad, 0xc1, 0x3b, 0x96, 0x5e, 0xed, 0x37, 0x67, 0xe2, 0xbb, 0x02, 0xa9, 0x70, 0x53, 0xb2, 0x6c, 0xe8, 0xe6, 0x48, 0x02, 0x67, 0xef, 0xe0, 0x60, 0x18, 0xb9, 0x2b, 0xc6, 0x4d, 0x21, 0x1f, 0xa3, 0xce, 0x9d, 0xed, 0xb3, 0x70, 0x7d, 0x34, 0x6a, 0xea, 0x71, 0x74, 0x95, 0xe5, 0x4c, 0xc5, 0x3f, 0x52, 0x07, 0xc9, 0xd1, 0x00, 0x09, 0xdf, 0x7e, 0x6e, 0xa5, 0x99, 0xde, 0xde, 0xe5, 0x71, 0xd9, 0xaa, 0x86, 0xb7, 0xc7, 0xdb, 0x43, 0xce, 0xd5, 0xf8, 0x57, 0x98, 0xab, 0x1c, 0x3d, 0x2f, 0x4c, 0x4b, 0xba, 0xd6, 0x3d, 0x06, 0x1d, 0x2f, 0xe9, 0x1d, 0xc6, 0xae, 0x44, 0xc5, 0xe5, 0x4d, 0xaf, 0xea, 0x84, 0x81, 0x1c, 0xc7, 0xc8, 0x6d, 0x72, 0xb3, 0x73, 0x56, 0x33, 0x3e, 0xae, 0x58, 0x5c, 0x7c, 0x06, 0x57, 0x8c, 0xa1, 0xb4, 0x38, 0x69, 0xce, 0x21, 0x50, 0x3f, 0x2b, 0xa9, 0x1c, 0xeb, 0x36, 0x9f, 0x33, 0xf8, 0x5b, 0x92, 0x7a, 0x07, 0xc4, 0xcf, 0x97, 0x74, 0x72, 0x27 ],
-const [ 0x25, 0xa4, 0x3f, 0xd8, 0xbf, 0x24, 0x1d, 0x67, 0xda, 0xb9, 0xe3, 0xc1, 0x06, 0xcd, 0x27, 0xb7, 0x1f, 0xd4, 0x5a, 0x87, 0xb9, 0x25, 0x4a, 0x53, 0xc1, 0x08, 0xea, 0xd1, 0x62, 0x10, 0x56, 0x45, 0x26, 0xab, 0x12, 0xac, 0x5e, 0xf7, 0x92, 0x3a, 0xc3, 0xd7, 0x00, 0x07, 0x5d, 0x47, 0x39, 0x06, 0xa4, 0xec, 0x19, 0x36, 0xe6, 0xef, 0xf8, 0x1c, 0xe8, 0x0c, 0x74, 0x70, 0xd0, 0xe6, 0x71, 0x17, 0x42, 0x9e, 0x5f, 0x51, 0xca, 0xa3, 0xbc, 0x34, 0x7a, 0xcc, 0xd9, 0x59, 0xd4, 0xa4, 0xe0, 0xd5, 0xea, 0x05, 0x16, 0x6a, 0xc3, 0xe8, 0x5e, 0xff, 0x01, 0x7b, 0xff, 0x4e, 0xc1, 0x74, 0xa6, 0xdd, 0xc3, 0xa5, 0xaf, 0x2f, 0xcb, 0xd1, 0xa0, 0x3b, 0x46, 0xbf, 0xf6, 0x1d, 0x31, 0x8c, 0x25, 0x0c, 0x37, 0x45, 0xda, 0x8c, 0x19, 0xb6, 0x83, 0xe4, 0x53, 0x7c, 0x11, 0xd3, 0xfd, 0x62, 0xfc, 0x7f, 0xef, 0xea, 0x88, 0xae, 0x28, 0x29, 0x48, 0x38, 0x71, 0xd8, 0xe0, 0xbd, 0x3d, 0xa9, 0x0e, 0x93, 0xd4, 0xd7, 0xec, 0x02, 0xb0, 0x01, 0x6f, 0xb4, 0x27, 0x38, 0x34, 0x67, 0x4b, 0x57, 0x7c, 0xe5, 0x0f, 0x92, 0x75, 0x36, 0xab, 0x52, 0xbb, 0x14, 0x41, 0x41, 0x1e, 0x9f, 0xc0, 0xa0, 0xa6, 0x52, 0x09, 0xe1, 0xd4, 0x36, 0x50, 0x72, 0x2b, 0x55, 0xc5, 0xd7, 0xef, 0x72, 0x74, 0xfb, 0x2d, 0xf7, 0x6a, 0xc8, 0xfb, 0x2f, 0x1a, 0xf5, 0x01, 0xb5, 0xff, 0x1f, 0x38, 0x2d, 0x82, 0x1c, 0xf2, 0x31, 0x1d, 0x8c, 0x1b, 0x8e, 0xc1, 0xb0, 0xbe, 0xb1, 0x75, 0x80, 0xca, 0x5c, 0x41, 0xf7, 0x17, 0x9e, 0x4a, 0xb2, 0xa4, 0x01, 0x3e, 0xb9, 0x23, 0x05, 0xf2, 0x9d, 0xb7, 0xcd, 0x4a, 0xc3, 0xfc, 0x19, 0x5a, 0xff, 0x48, 0x74, 0xca, 0x64, 0x30, 0xaf, 0x7f, 0x5b, 0x4e, 0x8d, 0x77, 0xf3, 0x42, 0xc0, 0xf5, 0x78, 0xf7, 0x14, 0xdf, 0x47, 0x28, 0xeb, 0x64, 0xe0, 0x22, 0xe9, 0xe1, 0x3d, 0xcb, 0xf0, 0x06, 0x63, 0xe3, 0x4f, 0x35, 0x36, 0x8a, 0x36, 0x2a, 0x91, 0x02, 0x6e, 0xe1, 0x96, 0xb7, 0x46, 0xb4, 0x43, 0x7c, 0xd1, 0xc5, 0x46, 0x18, 0x4e, 0x9b, 0x13, 0x01, 0xe8, 0x10, 0x33, 0x67, 0xa0, 0x6a, 0xdf, 0x74, 0x87, 0xc8, 0xcd, 0xd3, 0x30, 0xc0, 0x4a, 0x6f, 0x65, 0x46, 0x89, 0x7d, 0x19, 0xcf, 0x3b, 0xbc, 0x9e, 0xb7, 0x5f, 0xfb, 0x18, 0xe0, 0x5c, 0xdd, 0x32, 0x9d, 0x4d, 0xd9, 0x0f, 0xce, 0x9c, 0x84, 0x84, 0x4c, 0xd2, 0x13, 0x84, 0x87, 0xad, 0x1b, 0xdb, 0x6d, 0x74, 0x9c, 0x1f, 0x8e, 0x87, 0x3e, 0xe4, 0x7e, 0x3a, 0xda, 0x30, 0x7b, 0xe3, 0x3c, 0x2f, 0x50, 0x32, 0x28, 0x27, 0x79, 0xc1, 0x9a, 0xad, 0x88, 0xec, 0x52, 0x1a, 0xc8, 0xe3, 0x90, 0x39, 0x1f, 0xfd, 0x1d, 0x42, 0x39, 0x50, 0x8a, 0x0c, 0xe2, 0x7e, 0xbc, 0x7e, 0xb4, 0xd1, 0xa9, 0x47, 0xf3, 0x8b, 0x5c, 0xce, 0xb5, 0x77, 0x3f, 0x6c, 0x46, 0xc4, 0x99, 0xda, 0xca, 0x13, 0x56, 0xe5, 0x24, 0xcf, 0x07, 0x69, 0x17, 0xbd, 0x29, 0x7c, 0xab, 0xd4, 0xaa, 0xea, 0xd3, 0x4e, 0xa9, 0xe2, 0x4c, 0xff, 0x7e, 0xee, 0xc8, 0xe6, 0xfa, 0x28, 0x4c, 0x02, 0xef, 0xac, 0xd7, 0x66, 0xf3, 0x49, 0x44, 0x90, 0x62, 0x7c, 0x71, 0xf7, 0xa2, 0x9e, 0xa1, 0xe3, 0xab, 0x5c, 0x1f, 0x81, 0xc6, 0x68, 0x25, 0x37, 0x94, 0x6e, 0xfb, 0x35, 0x53, 0x4a, 0x63, 0x4d, 0x5d, 0x78, 0x35, 0x04, 0xf1, 0xcb, 0x47, 0xe9, 0x36, 0x62, 0x8f, 0x25, 0x7d, 0xd9, 0x8c, 0x54, 0xc7, 0xbc, 0xe1, 0x93, 0x87, 0x41, 0x44, 0xda, 0xa9, 0x36, 0x96, 0x8d, 0xd2, 0x38, 0x53, 0x4d, 0xea, 0x26, 0x2d, 0x14, 0xd8, 0xd5, 0xf4, 0x81, 0x8c, 0x05, 0xb9, 0x70, 0x43, 0x94, 0x33, 0xce, 0x06, 0xf2, 0x62, 0xac, 0x74, 0xd5, 0x71, 0x91, 0xc2, 0x2e, 0xe1, 0x15, 0x00, 0x5b, 0xe4, 0xab, 0x9e, 0x9e, 0x07, 0xbf, 0x2e, 0xce, 0x14, 0x01, 0x6b, 0x4c, 0x37, 0x00, 0x7b, 0x39, 0x5f, 0xfa, 0x71, 0xe6, 0xe7, 0xf2, 0x16, 0x8c, 0x76, 0x04, 0xe9, 0x3e, 0x24, 0xf6, 0x64, 0x1b, 0xde, 0x0f, 0x81, 0xc8, 0x0b, 0x2c, 0x7d, 0x1e, 0x6f, 0x10, 0xdc, 0x1f, 0x50, 0xfc, 0xad, 0x2f, 0xd8, 0x7f, 0x0f, 0x81, 0xbb, 0x90, 0xf4, 0xcf, 0x1a, 0xda, 0x25, 0x4e, 0xa6, 0x57, 0x87, 0xe1, 0x08, 0x20, 0x9c, 0x8c, 0x81, 0x84, 0x4c, 0x2c, 0xcd, 0x57, 0xe6, 0x66, 0x4e, 0x8c, 0x62, 0xde, 0x66, 0x07, 0xe9, 0xa9, 0x25, 0xac, 0x97, 0x04, 0x24, 0xbc, 0x7f, 0x46, 0xb0, 0x61, 0xef, 0x13, 0x2b, 0x87, 0xf6, 0xd3, 0xb0, 0xee, 0x24, 0x62, 0xf6, 0x7d, 0x91, 0x09, 0x77, 0xda, 0x20, 0xae, 0xd1, 0x37, 0x05, 0x47, 0x6c, 0x6f, 0x85, 0x95, 0x5d, 0x51, 0xfd, 0x0e, 0x8a, 0x3b, 0x26, 0x1b, 0x0f, 0xec, 0x97, 0x83, 0xe1, 0x93, 0x8c, 0x27, 0xb1, 0x2b, 0xe5, 0xf1, 0x14, 0x0b, 0x72, 0x07, 0xe0, 0xb9, 0x6d, 0x44, 0xd9, 0x00, 0x48, 0xe8, 0x8d, 0x42, 0xaa, 0x8e, 0x7c, 0x0f, 0xb4, 0x5f, 0x7c, 0xf5, 0x88, 0x86, 0x5c, 0x9a, 0x0c, 0xe3, 0xc8, 0x09, 0xeb, 0x04, 0x6c, 0x4a, 0xdd, 0x51, 0x5d, 0x35, 0x29, 0x86, 0xb4, 0x87, 0x68, 0x67, 0x7c, 0x36, 0x8b, 0xaf, 0xce, 0x02, 0x1f, 0x49, 0x3a, 0x4d, 0xd0, 0xc2, 0x69, 0x2c, 0x2c, 0xff, 0x01, 0xbe, 0xaa, 0x2b, 0xc9, 0xbd, 0xeb, 0xf4, 0x0e, 0x52, 0x3f, 0xf7, 0x45, 0x2e, 0x6b, 0x78, 0xf1, 0xd6, 0xaa, 0x57, 0xc7, 0x3e, 0xf1, 0x3f, 0x10, 0x9a, 0x77, 0x21, 0x50, 0x71, 0x75, 0xe1, 0x25, 0xf3, 0x2a, 0x4f, 0x71, 0x8c, 0x23, 0x58, 0xbb, 0xb9, 0xb9, 0x7e, 0xd3, 0x1b, 0xdb, 0x85, 0xb5, 0xca, 0x0e, 0x6f, 0xb0, 0xeb, 0xb1, 0xab, 0xc8, 0x85, 0x86, 0x8a, 0x58, 0x90, 0x6e, 0xf2, 0xfc, 0x4f, 0x74, 0x56, 0xad, 0xe0, 0x0d, 0xe5, 0x2e, 0x12, 0x9e, 0x02, 0xa8, 0x76, 0x3f, 0xf5, 0x91, 0xb9, 0xbf, 0xe0, 0xd1, 0x30, 0xe8, 0xf4, 0x28, 0xb5, 0x04, 0xe4, 0xca, 0xb2, 0xa0, 0x9a, 0x4d, 0x7b, 0x8f, 0x2a, 0xc5, 0xe1, 0x32, 0x04, 0x2e, 0x04, 0xf7, 0x6d, 0x0a, 0x68, 0x20, 0x30, 0x4a, 0x4b, 0xc6, 0x90, 0x72, 0x36, 0x1d, 0x82, 0xf9, 0xd3, 0xf9, 0x19, 0xee, 0xfe, 0x91, 0x42, 0xe2, 0x1e, 0x83, 0xb1, 0x01, 0xb6, 0x19, 0x1b, 0x82, 0x37, 0xcb, 0xa6, 0x42, 0x19, 0x05, 0x9e, 0xab, 0x29, 0x2a, 0x69, 0xdb, 0x25, 0xd8, 0xbd, 0x02, 0x86, 0x6e, 0x10, 0x0c, 0x9d, 0xcb, 0x50, 0x81, 0xe1, 0x59, 0xd5, 0xa9, 0x88, 0x4b, 0x94, 0xf3, 0x54, 0x22, 0x95, 0x97, 0xb0, 0x76, 0xa7, 0x7b, 0xfb, 0xf3, 0x52, 0x54, 0x24, 0xa2, 0x0d, 0x0d, 0x77, 0x69, 0xb1, 0x6c, 0xb6, 0xd6, 0x2e, 0xf3, 0x6c, 0x18, 0x7c, 0x04, 0x7e, 0x4e, 0xd5, 0x49, 0x03, 0x05, 0x22, 0x53, 0x55, 0xfb, 0xb3, 0x81, 0x68, 0x29, 0x32, 0x24, 0x5b, 0x01, 0xda, 0xe0, 0x4d, 0xf5, 0xe4, 0x56, 0x72, 0x38, 0x42, 0xff, 0x66, 0xc8, 0x90, 0x5b, 0xc1, 0xac, 0x48, 0x4c, 0xeb, 0x7a, 0x35, 0xbc, 0x32, 0x1d, 0x2a, 0x86, 0x19, 0xd5, 0xf3, 0x94, 0xf3, 0x7f, 0x8c, 0x45, 0xb1, 0x17, 0x91, 0x11, 0xf9, 0x7b, 0xf6, 0x6f, 0x78, 0x72, 0xf8, 0xf6, 0x78, 0xec, 0x53, 0xc3, 0xb5, 0x8c, 0xb6, 0x1c, 0x6c, 0x63, 0x74, 0x52, 0xb6, 0xff, 0x7c, 0xec, 0x14, 0xa4, 0x8b, 0x01, 0x4b, 0xd9, 0xa0, 0xe6, 0x72, 0x26, 0xb1, 0x0a, 0x49, 0x1d, 0x9c, 0x1d, 0xcc, 0x97, 0x60, 0x78, 0x08, 0x40, 0x8d, 0xb9, 0x2e, 0x56, 0xf9, 0xad, 0xe6, 0xad, 0xb5, 0x74, 0xe5, 0xf7, 0x3f, 0xdf, 0xc2, 0x42, 0xf9, 0x1d, 0x05, 0xc2, 0xda, 0x97, 0x82, 0xd1, 0x64, 0x18, 0xe5, 0x34, 0xd6, 0x31, 0x8d, 0xa0, 0xa2, 0xdc, 0x9e, 0x7c, 0x21, 0x5f, 0x51, 0xe9, 0x86, 0x73, 0x8f, 0x00, 0x11, 0xa6, 0xbf, 0x5a, 0x85, 0xfe, 0xdc, 0xd6, 0xdb, 0xdf, 0xca, 0x96, 0x38, 0x2e, 0xea, 0x4b, 0x1d, 0xb7, 0xec, 0xb3, 0xdd, 0xcc, 0xe4, 0x60, 0x55, 0x2f, 0xa0, 0xba, 0xd7, 0x33, 0x39, 0x47, 0x67, 0x1d, 0xe9, 0x2a, 0x2a, 0xd0, 0x1c, 0xea, 0x1b, 0xaa, 0xca, 0x75, 0x00, 0xa9, 0x03, 0x65, 0x9d, 0xd2, 0xcc, 0x81, 0x27, 0xd3, 0x29, 0x87, 0xfb, 0xe7, 0x7b, 0x29, 0x90, 0xfa, 0x0c, 0x55, 0xaa, 0x0e, 0xe9, 0xb9, 0xd1, 0xdd, 0xf0, 0x87, 0x02, 0xbf, 0x29, 0x75, 0xa4, 0xcf, 0x5a, 0x09, 0xbd, 0x49, 0xd5, 0x13, 0x66, 0x37, 0x95, 0x7b, 0x7d, 0x4d, 0x89, 0x3c, 0x99, 0x11, 0x30, 0xb1, 0x43, 0x3f, 0x66, 0x10, 0x63, 0x6b, 0x7e, 0x34, 0xf8, 0xe8, 0x90, 0x9f, 0x0c, 0xe9, 0x14, 0xbf, 0xe8, 0xe6, 0xb0, 0x70, 0x84, 0x41, 0x4f, 0xc3, 0x41, 0x2a, 0x73, 0xfd, 0xda, 0xc0, 0xcc, 0xe3, 0x98, 0x78, 0x09, 0x35, 0xc6, 0xc3, 0xee, 0x79, 0x65, 0xeb, 0xa7, 0xf9, 0x21, 0x3e, 0x5c, 0x0f, 0x83, 0x6f, 0x05, 0xa0, 0x67, 0x39, 0x80, 0xe7, 0xb1, 0x45, 0xe0, 0x74, 0x3c, 0x4e, 0x09, 0x74, 0x13, 0x83, 0x7a, 0x32, 0xe4, 0x2d, 0x69, 0xde, 0xb1, 0x91, 0x15, 0x8e, 0xc9, 0x18, 0x58, 0x82, 0xf7, 0xad, 0x7b, 0xac, 0xf9, 0x67, 0x4f, 0x6f, 0x33, 0x68, 0x79, 0xa8, 0xa5, 0x05, 0x0e, 0xeb, 0x1b, 0x27, 0x60, 0x0f, 0xa3, 0xf0, 0x17, 0xec, 0x44, 0xa2, 0x83, 0x63, 0xed, 0xbd, 0x30, 0x9f, 0xac, 0x68, 0xbb, 0x9b, 0x20, 0x12, 0xe5, 0xe4, 0x31, 0x59, 0xe6, 0xa1, 0xfe, 0x2b, 0x04, 0xd0, 0x17, 0x2b, 0x63, 0xd2, 0xed, 0x56, 0x1f, 0x2a, 0x87, 0xe6, 0x98, 0x82, 0x76, 0x76, 0x0d, 0xee, 0x0a, 0x68, 0x6d, 0x75, 0xc6, 0x84, 0x69, 0xce, 0x12, 0xe1, 0xce, 0x67, 0x30, 0x09, 0x12, 0xac, 0x71, 0x58, 0x2c, 0x85, 0xa9, 0xa5, 0xa9, 0x20, 0xe0, 0x25, 0xfd, 0xf2, 0x4a, 0x8b, 0x17, 0xf8, 0x7a, 0x74, 0x38, 0x43, 0xd2, 0x03, 0x04, 0xb3, 0x3e, 0xc8, 0xda, 0x03, 0x22, 0xe7, 0x61, 0x05, 0x90, 0x76, 0x63, 0x2f, 0xbf, 0x26, 0xdf, 0x57, 0xb8, 0x26, 0x59, 0xbb, 0x53, 0x44, 0x75, 0x44, 0x62, 0x56, 0xc4, 0x0c, 0x2c, 0xd8, 0xde, 0x1d, 0x1d, 0xd6, 0xb1, 0x7c, 0xbb, 0x0d, 0x18, 0x66, 0xdc, 0x4d, 0xb0, 0xd9, 0x16, 0x21, 0xe7, 0x56, 0x78, 0xb2, 0x55, 0xe6, 0x77, 0xe9, 0x50, 0x5b, 0x2b, 0xd4, 0xba, 0xd8, 0xbc, 0x4b, 0x1e, 0x93, 0x17, 0xd3, 0xfb, 0xda, 0xe5, 0xc2, 0x60, 0x54, 0xbd, 0xa4, 0xb9, 0x8a, 0x98, 0xde, 0xe9, 0xa5, 0x86, 0x91, 0x99, 0x79, 0xa0, 0xc1, 0xcf, 0xc3, 0x3e, 0xb7, 0xc2, 0xaf, 0x6a, 0xa3, 0xed ],
-const [ 0xc2, 0x9a, 0x1a, 0xb0, 0x20, 0xe6, 0x43, 0x4a, 0x50, 0xa2, 0x71, 0xe5, 0x52, 0x5a, 0x47, 0xa2, 0x9b, 0x44, 0x7a, 0x76, 0x16, 0x2e, 0xee, 0xc5, 0x69, 0xb5, 0x1c, 0x33, 0x79, 0xb8, 0xb7, 0xb7, 0x30, 0x0c, 0x8f, 0xf1, 0x7e, 0x71, 0xb5, 0xbd, 0x9d, 0xc5, 0xe0, 0x08, 0x9a, 0x78, 0x0f, 0xe2, 0x11, 0x40, 0x70, 0xd5, 0x38, 0x0e, 0x81, 0x75, 0x1e, 0x40, 0x75, 0x39, 0x35, 0x18, 0xd9, 0x89, 0x0f, 0x6d, 0x77, 0x18, 0x65, 0xa0, 0x7b, 0x74, 0x5d, 0xd2, 0xd4, 0xdc, 0x0c, 0x54, 0xdd, 0x51, 0x3a, 0x5f, 0x3d, 0xef, 0x66, 0x06, 0x0c, 0x7e, 0x0a, 0x68, 0x37, 0x45, 0x21, 0x2a, 0x25, 0x1e, 0xe5, 0x25, 0x9a, 0xd0, 0xdd, 0x5b, 0xdc, 0x98, 0x17, 0x30, 0x15, 0x09, 0xb3, 0xd7, 0xf9, 0x17, 0xa1, 0x0a, 0xa8, 0x6e, 0xaa, 0xfe, 0xd6, 0x08, 0xb5, 0x96, 0x29, 0xfe, 0x43, 0xd7, 0xe2, 0x9e, 0x3d, 0x9c, 0xc0, 0xbf, 0xef, 0x8a, 0x21, 0x51, 0x54, 0x47, 0x6b, 0x38, 0x94, 0xe7, 0xaa, 0x5b, 0xcb, 0xa7, 0x7b, 0xf7, 0x0c, 0xde, 0x28, 0x3a, 0xa6, 0x30, 0x14, 0x0d, 0xa5, 0x05, 0x5a, 0x31, 0x9c, 0x39, 0xb1, 0x8d, 0xa2, 0x16, 0x93, 0xc6, 0x9b, 0x7f, 0x9e, 0x11, 0xb9, 0x6d, 0x3a, 0x45, 0x42, 0xa0, 0x7c, 0x35, 0x93, 0x8e, 0x4a, 0x3c, 0x65, 0xa0, 0xc0, 0x19, 0x4f, 0x9d, 0xd3, 0xfd, 0x8c, 0x66, 0x34, 0xe3, 0xff, 0xe5, 0x77, 0x20, 0x74, 0x40, 0x75, 0x3b, 0x29, 0x52, 0xef, 0xfe, 0x8d, 0x5b, 0x74, 0xcd, 0x47, 0xf6, 0x84, 0x37, 0x7a, 0x4c, 0xf5, 0xcb, 0x47, 0x88, 0x96, 0x2d, 0x94, 0x8b, 0x13, 0x69, 0x0c, 0xe0, 0x18, 0x86, 0x67, 0xf2, 0xb9, 0x5f, 0xec, 0x7c, 0x12, 0xae, 0x34, 0x42, 0x2a, 0x6a, 0x30, 0xff, 0x1e, 0x53, 0x6e, 0x9e, 0x7b, 0xcb, 0x97, 0xac, 0xeb, 0xe7, 0x3d, 0x0e, 0x14, 0xc6, 0xd3, 0xef, 0xbd, 0x21, 0xfd, 0xfd, 0x32, 0x24, 0x0b, 0xd5, 0xea, 0x7c, 0xbf, 0xbb, 0x68, 0xb2, 0x57, 0x8f, 0x5f, 0xb7, 0xc7, 0xfc, 0x19, 0xc0, 0x47, 0xf3, 0x19, 0x53, 0x0d, 0x58, 0x00, 0xa2, 0x5c, 0xfb, 0xad, 0x19, 0xbd, 0xc9, 0xa8, 0x33, 0x8d, 0x44, 0xc1, 0x91, 0xb7, 0x30, 0xf4, 0x4d, 0xc3, 0x8f, 0x90, 0x8c, 0x10, 0xd0, 0x99, 0x52, 0x5d, 0x44, 0x6a, 0x9b, 0x8e, 0xd1, 0x9e, 0xa7, 0xad, 0xea, 0x31, 0x95, 0x30, 0xbe, 0xe3, 0x33, 0x7a, 0xb0, 0xdd, 0x15, 0xa4, 0x08, 0x97, 0xe4, 0x7c, 0xe8, 0xf9, 0xf9, 0xce, 0x81, 0xc1, 0x2a, 0xe3, 0x86, 0x24, 0xe4, 0x48, 0xe1, 0xb8, 0x7b, 0xd0, 0xa6, 0x91, 0xbd, 0xdc, 0x45, 0xaa, 0xcd, 0xda, 0x03, 0x87, 0x2f, 0x0c, 0xab, 0x19, 0x1f, 0x8b, 0x80, 0xe2, 0x27, 0x8b, 0x77, 0x5a, 0xf0, 0xe0, 0xa3, 0x90, 0x59, 0xc2, 0xf1, 0x14, 0xc6, 0xcd, 0x15, 0x15, 0xba, 0x4b, 0xc4, 0xc7, 0xa9, 0xb6, 0x24, 0x07, 0x07, 0x79, 0x81, 0x42, 0xa5, 0xf7, 0x41, 0x93, 0x3d, 0xce, 0x1a, 0x2b, 0x4c, 0x5d, 0x82, 0xf6, 0x1f, 0x84, 0x67, 0x7c, 0x31, 0xaa, 0x21, 0x05, 0xb4, 0x05, 0xa5, 0x00, 0x6e, 0x15, 0xfb, 0xa5, 0xc6, 0x72, 0xf2, 0xda, 0x1f, 0xc8, 0x12, 0x53, 0x64, 0x20, 0xd2, 0xfe, 0xe4, 0x61, 0x0b, 0x9e, 0x61, 0x16, 0xad, 0xb5, 0x63, 0x71, 0xb1, 0xa8, 0xd2, 0x90, 0x4e, 0x1e, 0xc4, 0x00, 0x70, 0xa9, 0x94, 0x80, 0x66, 0xa8, 0x34, 0x07, 0xda, 0x6c, 0xc4, 0x08, 0x07, 0x99, 0x63, 0xf4, 0x26, 0xcf, 0x45, 0x01, 0x29, 0x8a, 0x05, 0x2a, 0xac, 0x47, 0x3d, 0x76, 0x29, 0xe9, 0x55, 0x7e, 0x6b, 0x5a, 0x98, 0x29, 0x45, 0x75, 0x8d, 0xbb, 0x83, 0x24, 0x84, 0x0e, 0x21, 0xc5, 0x6f, 0x1e, 0xbb, 0xd3, 0xf3, 0xcc, 0x45, 0xc2, 0xbf, 0xdb, 0xfc, 0x2a, 0x1d, 0x3f, 0x9c, 0x28, 0xc6, 0x97, 0xd4, 0x02, 0xfb, 0xf8, 0xf7, 0x09, 0xd1, 0xec, 0xf4, 0xc4, 0xcd, 0xba, 0x88, 0x4a, 0xb0, 0xe8, 0xb2, 0xf0, 0x94, 0xff, 0x68, 0x24, 0x38, 0x8e, 0x88, 0x99, 0x99, 0x71, 0x11, 0xa5, 0xc2, 0x53, 0x93, 0xe7, 0xe4, 0x72, 0xe4, 0x2c, 0xa9, 0xa2, 0x15, 0x93, 0xc6, 0x95, 0xa4, 0xf0, 0xd0, 0x59, 0xf3, 0x6f, 0x50, 0x22, 0xf9, 0x7a, 0x19, 0x4a, 0x38, 0xdc, 0xd9, 0x96, 0xef, 0x26, 0xef, 0xbb, 0x90, 0x51, 0x7c, 0x21, 0x74, 0xa6, 0xbd, 0xe6, 0xce, 0xdb, 0x98, 0x26, 0xde, 0x7f, 0x74, 0x7a, 0x67, 0x98, 0x4e, 0xbe, 0x62, 0x8a, 0x09, 0x18, 0xf4, 0x3a, 0x06, 0x35, 0x9e, 0x74, 0xf5, 0xd6, 0xb4, 0x8a, 0xeb, 0x8c, 0x10, 0x3e, 0xb4, 0xbf, 0x07, 0xe2, 0x6a, 0xf5, 0x9c, 0xbe, 0x46, 0x51, 0xf4, 0xb2, 0xb7, 0x5a, 0x0a, 0x1d, 0xb1, 0xff, 0xa4, 0xfd, 0x48, 0xd7, 0x86, 0x57, 0x7d, 0xad, 0xe5, 0xd9, 0x58, 0x3b, 0x1e, 0xbe, 0x37, 0x36, 0xa8, 0xf2, 0x65, 0x8b, 0x47, 0x76, 0xee, 0xe9, 0x83, 0x07, 0xb2, 0x7f, 0x59, 0xfa, 0xb9, 0x07, 0x30, 0x6b, 0xc6, 0x03, 0x0f, 0x96, 0x2f, 0x46, 0x0c, 0x85, 0xeb, 0xb7, 0x08, 0xec, 0xed, 0x52, 0x99, 0x51, 0xb0, 0x6f, 0x48, 0x6f, 0x14, 0x47, 0xfd, 0xdd, 0x68, 0xb4, 0xb7, 0xeb, 0xc8, 0x38, 0x80, 0xcd, 0xa9, 0x41, 0xa1, 0xfb, 0xb2, 0xab, 0x12, 0xd7, 0xce, 0x87, 0x34, 0x90, 0x7f, 0x1b, 0xc2, 0x47, 0x75, 0x29, 0x05, 0x71, 0x5f, 0x75, 0x48, 0x7d, 0x01, 0x81, 0x8c, 0xb6, 0x86, 0x9b, 0x7d, 0x6a, 0x18, 0x19, 0xa4, 0x4c, 0xaf, 0xe4, 0xdd, 0x17, 0x26, 0x33, 0x0c, 0x74, 0x94, 0x99, 0x0c, 0x1e, 0xd9, 0x42, 0xe8, 0x44, 0x77, 0x7a, 0x4e, 0x2f, 0xa4, 0x6e, 0x40, 0x24, 0x9d, 0x37, 0x0d, 0x8c, 0x3c, 0x14, 0x80, 0x52, 0xcd, 0xf7, 0x57, 0x8d, 0x1e, 0x44, 0xf6, 0x5f, 0xd5, 0xd5, 0x5d, 0x1c, 0x06, 0x41, 0x58, 0xaf, 0x05, 0x5e, 0xf5, 0x3a, 0x79, 0x04, 0x3b, 0xfd, 0xb2, 0x14, 0x19, 0x79, 0x3d, 0xb9, 0x9d, 0xd5, 0xb5, 0xee, 0x67, 0x80, 0xdb, 0x41, 0x5c, 0x18, 0xe9, 0xd6, 0x9f, 0x8b, 0x24, 0xae, 0xbd, 0x7c, 0xb1, 0x29, 0x27, 0xe8, 0xa9, 0xca, 0xe6, 0x09, 0x70, 0x3b, 0x8a, 0x7a, 0x42, 0x91, 0x63, 0x9d, 0x0e, 0xd0, 0xf4, 0x3a, 0x88, 0xb2, 0xa5, 0x68, 0x7a, 0xa4, 0xb8, 0xb1, 0x5a, 0x12, 0x7e, 0x71, 0x22, 0xe4, 0xcb, 0x7f, 0x5c, 0x49, 0xa7, 0x0f, 0x7c, 0xb3, 0x46, 0xd7, 0x73, 0x23, 0x3b, 0x71, 0x81, 0xa6, 0xe8, 0x01, 0x4b, 0x1f, 0x39, 0x17, 0x2d, 0x48, 0x92, 0xd7, 0xd1, 0xf4, 0x05, 0x57, 0x01, 0x97, 0xc9, 0x48, 0xb9, 0x07, 0xe7, 0xd9, 0x81, 0x84, 0x37, 0xd8, 0xf9, 0xf7, 0x8b, 0x1a, 0xb6, 0x77, 0x2a, 0x1e, 0x4c, 0x11, 0x80, 0xed, 0xac, 0xc9, 0x13, 0x44, 0xb1, 0xdc, 0xb9, 0xf5, 0xf5, 0x48, 0x09, 0x8b, 0xe9, 0x8e, 0x0f, 0x2d, 0x25, 0xb7, 0x44, 0xc5, 0xfc, 0x95, 0xbc, 0x61, 0x54, 0x4b, 0xa2, 0xd9, 0xb4, 0x10, 0xe2, 0xb2, 0x9f, 0x2f, 0x25, 0x42, 0x21, 0x52, 0x02, 0x15, 0xa7, 0x01, 0x72, 0x90, 0x14, 0x66, 0x85, 0xd4, 0x10, 0x53, 0x54, 0xe5, 0xa3, 0x86, 0x37, 0x0c, 0x04, 0x2b, 0x38, 0x79, 0xab, 0xa2, 0xc7, 0x2d, 0xad, 0x83, 0xaf, 0x17, 0x49, 0xdf, 0x48, 0x7d, 0xbe, 0xc9, 0xee, 0x9e, 0x60, 0x15, 0xb3, 0x96, 0xeb, 0x60, 0x51, 0x81, 0x17, 0x51, 0x63, 0xe3, 0x6d, 0x1d, 0xd4, 0x48, 0x58, 0x51, 0x97, 0x27, 0x7f, 0xcc, 0x98, 0x0c, 0x52, 0x0a, 0xf3, 0xf6, 0xe3, 0xa9, 0x65, 0xfe, 0xf8, 0x25, 0xff, 0x3a, 0x5e, 0xe7, 0x22, 0xe1, 0x80, 0x7e, 0xa7, 0xb0, 0x38, 0x2c, 0x5e, 0x8c, 0xe4, 0xa4, 0xba, 0x68, 0xbd, 0x12, 0xca, 0x69, 0x64, 0x5c, 0x6b, 0x48, 0xbe, 0xa7, 0xbd, 0xf9, 0x02, 0x1e, 0xd3, 0x8a, 0x10, 0xee, 0xaf, 0x4d, 0x05, 0x95, 0x6d, 0x39, 0x0c, 0x5d, 0xbe, 0x8e, 0x77, 0x23, 0x98, 0xb8, 0x0e, 0x5d, 0x2c, 0x76, 0xa6, 0x5c, 0x19, 0x3b, 0xf6, 0xce, 0xdf, 0xd5, 0xa7, 0x86, 0x96, 0x4c, 0xaa, 0x80, 0xe0, 0x0d, 0xce, 0x1f, 0x1c, 0x47, 0x92, 0xba, 0xdc, 0x96, 0x37, 0x57, 0x99, 0xdf, 0x1a, 0xb6, 0xa6, 0x7b, 0x41, 0x92, 0x63, 0x97, 0x34, 0x23, 0xb3, 0xda, 0x0e, 0xe7, 0xb0, 0x49, 0xd3, 0xa2, 0x9d, 0x68, 0x04, 0xa4, 0x1b, 0xa2, 0x71, 0x4a, 0xa0, 0xeb, 0x4f, 0xc7, 0x26, 0xa4, 0x8a, 0x24, 0x20, 0xbf, 0x5d, 0x86, 0xb2, 0x23, 0x1f, 0xb0, 0x21, 0x52, 0x60, 0xc8, 0x89, 0x49, 0x34, 0x5e, 0xce, 0xa8, 0xcf, 0xaa, 0xd4, 0x12, 0x52, 0x15, 0xf3, 0xd7, 0xe5, 0xfc, 0xa5, 0xd0, 0x06, 0xb0, 0x82, 0x8b, 0x20, 0xc1, 0x6f, 0xa8, 0x60, 0x7c, 0x12, 0x83, 0xc4, 0xb2, 0x89, 0x14, 0x75, 0xbb, 0x5b, 0x13, 0x56, 0xbb, 0xae, 0x5f, 0xdd, 0x24, 0xbb, 0xa0, 0x22, 0x7c, 0x80, 0x2b, 0x35, 0x61, 0xb4, 0x27, 0xb5, 0xca, 0x00, 0xee, 0x9e, 0x8f, 0x6c, 0xb6, 0x63, 0x2c, 0x18, 0x71, 0x3d, 0xc2, 0x2c, 0xf2, 0xc2, 0x5e, 0x11, 0x50, 0xb9, 0x7e, 0xe2, 0x8f, 0x2d, 0xd1, 0x1d, 0x7d, 0xc0, 0x3f, 0x9f, 0xdb, 0x42, 0x29, 0xcf, 0xbd, 0x82, 0xf2, 0x19, 0x34, 0x64, 0xbe, 0x9e, 0x29, 0x34, 0x79, 0x29, 0x8c, 0x3a, 0x1c, 0x65, 0xaf, 0x8f, 0x2b, 0x4e, 0xec, 0x2f, 0x82, 0xe6, 0x8e, 0x4e, 0x52, 0x29, 0xef, 0xf0, 0x67, 0x42, 0xdd, 0xb4, 0xac, 0xff, 0x42, 0xf0, 0xf0, 0x83, 0x04, 0x03, 0xea, 0x3b, 0x2b, 0xe7, 0x7b, 0x13, 0x42, 0x06, 0x34, 0xe9, 0xff, 0x4f, 0x18, 0x41, 0x26, 0x88, 0xa3, 0x3b, 0xaa, 0xe6, 0x0b, 0xc3, 0x15, 0xdb, 0xc5, 0x08, 0x2b, 0x2f, 0x4b, 0x2f, 0xca, 0x52, 0x1d, 0x48, 0x15, 0xf1, 0x05, 0x81, 0xd2, 0xc7, 0xa0, 0x99, 0x0f, 0xb6, 0x1a, 0x98, 0x0c, 0x16, 0x39, 0xbe, 0x55, 0x4d, 0x9d, 0xb9, 0x2f, 0x9f, 0x46, 0x1b, 0x35, 0x48, 0x56, 0x0a, 0x43, 0xc8, 0x18, 0x39, 0x93, 0x7f, 0x42, 0x18, 0x26, 0x79, 0x77, 0x48, 0x66, 0x8b, 0x10, 0x52, 0x09, 0x9f, 0x1c, 0x98, 0x38, 0x4c, 0xa5, 0x8c, 0xf1, 0xaa, 0x36, 0x1f, 0xaa, 0x64, 0x99, 0x7d, 0x37, 0x0e, 0xe5, 0xf7, 0xed, 0xb9, 0xb9, 0x40, 0x08, 0xc5, 0xc2, 0xdd, 0x4a, 0xf7, 0x83, 0xd7, 0xe5, 0xcb, 0x55, 0xb3, 0x9b, 0x0c, 0xac, 0xa3, 0x24, 0xa1, 0x9d, 0xfe, 0xd0, 0xaa, 0x9d, 0xee, 0x6d, 0xcc, 0x8c, 0x69, 0x6b, 0xc8, 0xf2, 0x62, 0x3e, 0x53, 0x88, 0x40, 0x04, 0x22, 0xfa, 0x8f, 0x68, 0x44, 0xeb, 0xf5, 0xc6, 0xb4, 0x39, 0x68, 0x90, 0x2f, 0x83, 0x9f, 0xf0, 0x43, 0xe9, 0xc6, 0xae, 0xa9, 0x13, 0x76, 0x55, 0xd4, 0x75, 0xe4, 0x91, 0xca, 0xd1, 0x59, 0xdc, 0x33, 0xfd, 0xe2, 0x59, 0xaf, 0xe6, 0x48, 0x00, 0x6d, 0xd5, 0x42, 0xfc, 0xfa, 0xf1, 0xea, 0x51, 0x56, 0x06, 0x6e, 0xc2, 0x4d, 0x84, 0x08, 0xf2, 0x04, 0xcb, 0x30, 0xc9, 0xd3, 0xa5, 0x10, 0x19, 0x52, 0x14, 0x38, 0x82, 0xb7, 0x4f, 0x93, 0x93, 0x5f, 0x07, 0x99, 0x31, 0xaa, 0xee, 0xc7, 0x3d, 0x0c, 0x7a, 0x4c, 0x71, 0x61, 0xe6, 0x06, 0x8b, 0x81, 0x7b, 0xac, 0xae, 0x15, 0x0d, 0x4d, 0x05, 0xa9, 0xc8, 0xf9, 0xa9, 0x02, 0x2d, 0xbe, 0xc5, 0xb1, 0x57, 0xd6, 0xf8, 0xe8, 0x83, 0x1e, 0xfa, 0x8d, 0xcf, 0xca, 0x83, 0x8d, 0x42, 0x57, 0x68, 0x73, 0x0d, 0xc2, 0x07, 0x39, 0x10 ],
-const [ 0xc3, 0xec, 0x01, 0xc7, 0x55, 0x38, 0x5f, 0x27, 0x02, 0x0d, 0x88, 0xed, 0x2c, 0x57, 0x8e, 0x73, 0x18, 0x5c, 0x6d, 0x51, 0x4c, 0x91, 0x92, 0xd1, 0x3c, 0xb2, 0x9e, 0xa4, 0x26, 0x11, 0x67, 0xd3, 0x3b, 0x2f, 0x3f, 0xf8, 0xff, 0x89, 0x7a, 0xad, 0xf2, 0xb4, 0x2a, 0x45, 0x70, 0xac, 0x2d, 0xba, 0xd6, 0x6a, 0x6a, 0xe7, 0xe6, 0xb4, 0x57, 0xf7, 0x6d, 0x39, 0xbf, 0x1e, 0x22, 0xdd, 0xc2, 0x87, 0xd2, 0x52, 0x1d, 0x8d, 0xba, 0xe8, 0xab, 0x2d, 0x35, 0xa6, 0x2c, 0xbb, 0x97, 0x99, 0x46, 0xd5, 0x58, 0x6c, 0xc9, 0x96, 0x75, 0x39, 0x37, 0x0b, 0x13, 0x9f, 0x84, 0xeb, 0x65, 0x15, 0x1a, 0x82, 0xd1, 0x7d, 0x20, 0xef, 0x4e, 0xfd, 0xfc, 0x8f, 0x11, 0x0a, 0x16, 0xb9, 0x68, 0xc5, 0xdf, 0xac, 0xe6, 0x8b, 0x13, 0xc5, 0xc0, 0xc7, 0x3b, 0xf6, 0x77, 0x0b, 0x75, 0x73, 0xb7, 0x60, 0x77, 0xae, 0x80, 0xda, 0xd2, 0x86, 0x83, 0x6f, 0x74, 0xbb, 0xcf, 0x08, 0x71, 0xa6, 0xac, 0xd9, 0x03, 0x27, 0xc7, 0xee, 0xcf, 0xde, 0x90, 0x07, 0x69, 0x9e, 0xe1, 0xa6, 0x1b, 0x1e, 0xe0, 0x66, 0xe2, 0xf2, 0x26, 0x8e, 0xba, 0xba, 0x21, 0xe6, 0x1b, 0x9a, 0xb6, 0xca, 0xc4, 0xea, 0x2b, 0x7c, 0xb7, 0x2e, 0x45, 0xbf, 0x85, 0x48, 0xad, 0xa1, 0xcb, 0xec, 0x98, 0x98, 0xfd, 0x55, 0xa7, 0xd0, 0x62, 0x36, 0x0c, 0xc4, 0x60, 0xf4, 0xef, 0x0c, 0xfa, 0x12, 0x10, 0x75, 0x97, 0xed, 0xad, 0x57, 0x05, 0xa9, 0xa6, 0x23, 0xbd, 0x6b, 0xdf, 0x3c, 0x69, 0xc8, 0xe6, 0x08, 0xa3, 0x7e, 0xd6, 0x46, 0x00, 0x62, 0x7b, 0xa2, 0x4d, 0x9a, 0xb6, 0x86, 0x18, 0x0c, 0x23, 0x34, 0x73, 0x16, 0xfa, 0x12, 0xf4, 0x80, 0x33, 0x44, 0x00, 0xaf, 0xee, 0x80, 0x49, 0x1b, 0x11, 0x1e, 0x96, 0x03, 0x33, 0x6f, 0xc3, 0x5f, 0xb9, 0x50, 0x08, 0x16, 0x3e, 0xff, 0x7e, 0x71, 0x39, 0x2d, 0xde, 0xcf, 0xd9, 0x54, 0x8c, 0x9b, 0x34, 0x4a, 0xd5, 0x7c, 0xa1, 0x17, 0x75, 0xcb, 0x62, 0x04, 0x5d, 0x4a, 0x87, 0xf4, 0xb3, 0x13, 0x0e, 0xf7, 0x19, 0xce, 0x4f, 0x1d, 0x32, 0x27, 0x98, 0x88, 0x62, 0x80, 0x14, 0xc5, 0xd6, 0xe2, 0xf1, 0x5d, 0xc5, 0x3a, 0xc1, 0xa6, 0xf5, 0xc2, 0x21, 0xdf, 0x80, 0xbd, 0x99, 0x7c, 0xd8, 0x67, 0xc4, 0xbf, 0x09, 0x2c, 0xb1, 0x88, 0x3e, 0x18, 0x88, 0x6e, 0x87, 0x8f, 0x71, 0x0e, 0xd9, 0x3e, 0xb1, 0xa3, 0x57, 0x51, 0x16, 0xd8, 0xcf, 0xe6, 0x96, 0xda, 0x88, 0xc2, 0x33, 0xb0, 0x3b, 0x43, 0x22, 0xcf, 0x5f, 0x96, 0x2b, 0xe9, 0xa9, 0x2a, 0x53, 0x07, 0xd4, 0x65, 0xb9, 0xd7, 0x9e, 0x95, 0xbe, 0x47, 0x13, 0x29, 0x68, 0x52, 0x0d, 0x21, 0x09, 0x1a, 0xfc, 0xc3, 0x1b, 0x38, 0xe3, 0x90, 0x6f, 0x50, 0xa3, 0x76, 0x87, 0xe8, 0x7c, 0x47, 0x40, 0x7a, 0xd1, 0x6a, 0xb3, 0xc7, 0x2b, 0xd1, 0x5e, 0x6f, 0x81, 0x2a, 0x7f, 0xbf, 0xb7, 0x5a, 0xc1, 0xca, 0x64, 0x27, 0x1a, 0xbb, 0xd8, 0x34, 0xf4, 0x69, 0x5e, 0x33, 0x8b, 0x2c, 0xbe, 0x56, 0x96, 0xf0, 0x06, 0x06, 0x29, 0x87, 0x8a, 0xd8, 0xda, 0x44, 0x2a, 0xbd, 0x23, 0xc5, 0xd3, 0x79, 0x07, 0x10, 0x49, 0x56, 0xf8, 0xe2, 0x23, 0x19, 0xf9, 0x43, 0x17, 0x35, 0x00, 0x5e, 0x77, 0x3f, 0x9e, 0x90, 0xfc, 0xa2, 0xe1, 0xbf, 0xc3, 0x94, 0x7a, 0xed, 0x95, 0x48, 0x1b, 0x0c, 0x6b, 0x65, 0x23, 0x14, 0x31, 0xb8, 0x7d, 0x54, 0xcb, 0x25, 0xc5, 0x05, 0x56, 0xe4, 0xad, 0x25, 0xb0, 0xea, 0xa0, 0x83, 0x3a, 0xa4, 0xa5, 0x16, 0xdc, 0xeb, 0x85, 0x92, 0x4a, 0x35, 0x30, 0x3d, 0x86, 0x08, 0x5d, 0xff, 0xa7, 0xb5, 0x71, 0xb9, 0xd8, 0x42, 0xa2, 0xd8, 0xa3, 0xa8, 0x5c, 0x2a, 0x70, 0x3f, 0xe3, 0xf0, 0x48, 0x76, 0x3b, 0x34, 0xdf, 0xc7, 0x45, 0x5d, 0xd2, 0xea, 0x2a, 0x00, 0x2d, 0x49, 0xfc, 0xf9, 0x30, 0xb5, 0x9b, 0xbb, 0x53, 0x57, 0xd6, 0xe4, 0x87, 0xe9, 0xd3, 0x15, 0xbf, 0x26, 0xb1, 0x00, 0xaf, 0x7e, 0x6b, 0xc2, 0xd3, 0x0f, 0x00, 0x74, 0xb4, 0xd1, 0xd1, 0xfc, 0x67, 0x10, 0x4a, 0x29, 0x56, 0x20, 0xc4, 0x00, 0x43, 0x4c, 0xaa, 0x50, 0x89, 0x0f, 0xdb, 0x8d, 0xa5, 0x87, 0x50, 0xda, 0xf6, 0x26, 0xff, 0x68, 0xc1, 0xab, 0xff, 0xff, 0x78, 0x50, 0xec, 0xda, 0x3c, 0x45, 0x8d, 0xb8, 0xa0, 0x5e, 0xb4, 0x30, 0xb0, 0x09, 0x66, 0x45, 0x32, 0x82, 0x3c, 0x3a, 0x2b, 0x4a, 0x09, 0xa8, 0xa5, 0xd5, 0xbd, 0xcd, 0xb0, 0x82, 0x8a, 0x27, 0xa7, 0xd1, 0x45, 0x41, 0xb4, 0xd1, 0x0e, 0xce, 0x96, 0xd7, 0x33, 0xf4, 0xa2, 0x75, 0x52, 0xea, 0x08, 0xaa, 0xbe, 0xc5, 0x58, 0x57, 0x24, 0x8f, 0x45, 0xf2, 0x6f, 0x9a, 0xa8, 0x7e, 0xe8, 0x13, 0xc8, 0xbb, 0xa2, 0xda, 0xd8, 0x9a, 0x15, 0x91, 0xc1, 0xf3, 0x09, 0xf4, 0x22, 0x7a, 0xb6, 0x68, 0x95, 0xf0, 0x29, 0xd6, 0x35, 0x96, 0xe9, 0xb9, 0x5d, 0xe7, 0xdb, 0x76, 0xb2, 0x86, 0x63, 0xed, 0x63, 0x76, 0xcc, 0x4d, 0xaf, 0x89, 0xea, 0x2c, 0xa8, 0x1b, 0xfd, 0xd7, 0x37, 0xff, 0xd9, 0xe6, 0x61, 0xba, 0x44, 0x14, 0xc8, 0xef, 0xa0, 0x4e, 0x75, 0x1b, 0xca, 0x0a, 0xd4, 0x83, 0x41, 0xda, 0x00, 0x6a, 0x8b, 0x41, 0x41, 0x86, 0xd4, 0xc5, 0xd4, 0xb5, 0xd9, 0x45, 0xea, 0xed, 0x04, 0x8d, 0xf2, 0x71, 0xd8, 0x28, 0x1b, 0x4b, 0x90, 0x75, 0x15, 0xf6, 0x03, 0xfe, 0x18, 0x5b, 0xcb, 0x04, 0x28, 0xff, 0xa6, 0x5f, 0x97, 0x7a, 0x1c, 0x85, 0xcb, 0x2b, 0x63, 0xe8, 0x42, 0x2a, 0x7f, 0x85, 0xd2, 0x7e, 0xad, 0xb9, 0x36, 0x90, 0x02, 0x57, 0xc6, 0xe0, 0x50, 0xf9, 0x86, 0xf7, 0x49, 0x93, 0x62, 0x9d, 0xe7, 0x4e, 0xb8, 0x4b, 0x0b, 0x93, 0x17, 0xe3, 0x64, 0x65, 0x47, 0x9f, 0x92, 0xf5, 0x89, 0x47, 0x8b, 0x70, 0x1f, 0xa8, 0x3e, 0x1c, 0x0f, 0x41, 0x77, 0xa3, 0x25, 0x3f, 0x03, 0xaf, 0x37, 0xac, 0x14, 0xb6, 0xac, 0xe3, 0xe7, 0x18, 0x3f, 0x47, 0xa3, 0x67, 0x01, 0x34, 0x85, 0x05, 0x9d, 0x36, 0x3a, 0xf5, 0xe0, 0x79, 0x8c, 0xeb, 0x79, 0x81, 0x41, 0xa5, 0xfd, 0x1b, 0x40, 0x7e, 0x2e, 0x94, 0xf6, 0x41, 0x7c, 0x28, 0xf8, 0x3b, 0xcc, 0xbd, 0xea, 0x94, 0x79, 0xd2, 0x9f, 0xdf, 0x98, 0xb2, 0x81, 0xef, 0x81, 0xed, 0x34, 0xec, 0x8b, 0x08, 0x76, 0xa7, 0x16, 0x74, 0x4a, 0x2b, 0xcf, 0xbd, 0x55, 0x95, 0x2f, 0x04, 0x88, 0x25, 0x45, 0xaf, 0xff, 0x94, 0xb6, 0x5f, 0x29, 0xa8, 0x02, 0x22, 0x2a, 0x07, 0x08, 0xeb, 0x7d, 0x49, 0xcd, 0x3f, 0xde, 0x50, 0x79, 0x30, 0x67, 0xdc, 0xa2, 0x8f, 0xf9, 0x5a, 0xcd, 0x5e, 0xdd, 0xfd, 0x32, 0x84, 0xab, 0x10, 0xc0, 0xc4, 0x6b, 0x8b, 0x61, 0xf0, 0xfb, 0xe4, 0x7f, 0x5a, 0xb1, 0x27, 0xc7, 0x8c, 0x40, 0x49, 0x2d, 0x39, 0xe0, 0xba, 0x30, 0x73, 0xa9, 0x39, 0x5f, 0x1d, 0x40, 0xec, 0x1c, 0xa4, 0xb6, 0xb0, 0xa0, 0xea, 0xad, 0xae, 0x3f, 0x83, 0xbd, 0x2f, 0xed, 0x24, 0x16, 0xb1, 0x02, 0x58, 0x66, 0x39, 0x3a, 0x75, 0xfd, 0xec, 0x00, 0xcf, 0x2f, 0xd9, 0xec, 0x2b, 0xf9, 0x1a, 0x8a, 0x77, 0xe8, 0x1b, 0x5d, 0xb8, 0x37, 0x39, 0x23, 0x43, 0x37, 0x8f, 0x5b, 0x30, 0xf4, 0x0c, 0x05, 0x0c, 0x16, 0xc9, 0xa9, 0xce, 0x05, 0x9a, 0x9a, 0x0c, 0x51, 0xe4, 0x7c, 0x6f, 0x50, 0xae, 0x04, 0x65, 0x09, 0xfa, 0xff, 0x15, 0x50, 0x55, 0x96, 0x98, 0x33, 0xad, 0xd0, 0x66, 0x95, 0x63, 0x58, 0x0e, 0x19, 0xa1, 0x81, 0x2b, 0x42, 0xee, 0x87, 0x93, 0xd8, 0xff, 0x18, 0xd1, 0x8d, 0xd0, 0x12, 0xd6, 0xe0, 0xf4, 0x8f, 0xeb, 0x42, 0x2a, 0x1f, 0xea, 0x77, 0x30, 0x54, 0xae, 0x40, 0xdc, 0x84, 0xc8, 0x37, 0x68, 0xca, 0x73, 0xfa, 0x0e, 0x4e, 0xcb, 0x8b, 0xd4, 0xc6, 0x39, 0xf7, 0xaa, 0x3d, 0x32, 0x36, 0xb2, 0x13, 0x21, 0x53, 0xdf, 0x46, 0xa1, 0xcd, 0xc1, 0xef, 0xf0, 0x3c, 0x9f, 0x10, 0xa0, 0x37, 0xc7, 0x8c, 0x90, 0x76, 0x22, 0x77, 0x1b, 0x34, 0x0b, 0x90, 0x8f, 0xd7, 0x61, 0x0c, 0xe1, 0xd3, 0xdb, 0x96, 0x9f, 0xcc, 0x9c, 0x93, 0x25, 0xfb, 0x08, 0xaa, 0x14, 0xd2, 0xd5, 0x84, 0x00, 0xe3, 0x65, 0xd0, 0x69, 0xfe, 0x53, 0x8b, 0xed, 0x99, 0x4c, 0x7e, 0xbb, 0x75, 0x20, 0x08, 0x4b, 0x7f, 0x18, 0x1d, 0x4d, 0xf5, 0x8b, 0x8f, 0xdf, 0xc9, 0xac, 0x8c, 0x02, 0x4a, 0xa6, 0x69, 0x4f, 0x01, 0xeb, 0x9d, 0xe6, 0xd9, 0xc8, 0x11, 0xa8, 0x84, 0x3e, 0x97, 0xa6, 0x19, 0x0d, 0xb7, 0xd8, 0x02, 0x11, 0xb2, 0x13, 0x15, 0xd1, 0xc1, 0x35, 0x01, 0x56, 0x9e, 0xa3, 0xec, 0x39, 0x45, 0xf5, 0x5a, 0x00, 0xfc, 0xef, 0x51, 0xab, 0x91, 0xb3, 0xbb, 0x89, 0xe3, 0x36, 0x0b, 0x50, 0xa3, 0xf1, 0x23, 0x6d, 0x5c, 0xd9, 0x75, 0x99, 0xb1, 0x90, 0x69, 0xad, 0xe7, 0xdd, 0xff, 0xb7, 0xa3, 0x5a, 0xb6, 0x4d, 0xf4, 0x6c, 0xac, 0x21, 0x93, 0x78, 0x06, 0xd6, 0x6a, 0x54, 0x92, 0x12, 0x54, 0xfc, 0xab, 0xd5, 0x24, 0x87, 0x5e, 0x09, 0xe8, 0x59, 0xcb, 0x5a, 0x6f, 0x99, 0xcd, 0x47, 0x08, 0xe6, 0xdd, 0x79, 0x8d, 0x45, 0x33, 0x54, 0xa0, 0x5e, 0x2f, 0xcd, 0x35, 0xe9, 0xf8, 0x7b, 0x51, 0x63, 0x63, 0xf0, 0x10, 0x05, 0x16, 0x49, 0xed, 0xf6, 0xed, 0x04, 0x3e, 0xc0, 0x9c, 0x12, 0xfe, 0x01, 0x96, 0x2d, 0xcf, 0x63, 0x2e, 0x6c, 0x3f, 0xcd, 0xfc, 0x15, 0x4b, 0xdb, 0x83, 0xb2, 0x22, 0x8c, 0x10, 0x67, 0x2b, 0x3b, 0xe5, 0x82, 0x48, 0xd1, 0x97, 0x54, 0x5d, 0x38, 0xb5, 0x40, 0x0c, 0x13, 0xaa, 0x11, 0xc3, 0xac, 0xe5, 0x90, 0xf9, 0x2d, 0x37, 0x57, 0xb4, 0x14, 0x7c, 0xe0, 0x4f, 0xe1, 0x7d, 0xe1, 0x7a, 0x11, 0x15, 0xdc, 0x82, 0x50, 0x93, 0xf1, 0xd3, 0xeb, 0x60, 0xf8, 0xbb, 0x84, 0xe2, 0xcc, 0x70, 0x09, 0x9f, 0xe9, 0x55, 0xe7, 0xa6, 0x3a, 0x79, 0x7a, 0x2b, 0x2c, 0x60, 0xc8, 0x71, 0x07, 0x07, 0x70, 0xed, 0x7e, 0x22, 0xdd, 0xa8, 0x85, 0xa8, 0xbf, 0xe5, 0x62, 0x91, 0xbc, 0x04, 0x07, 0xdf, 0x62, 0xa6, 0x9f, 0xdb, 0x61, 0x12, 0x67, 0xa1, 0xf7, 0xd7, 0xbf, 0xde, 0xab, 0xb3, 0x81, 0xd9, 0x3e, 0xb4, 0x91, 0xb0, 0xdf, 0x9d, 0xb5, 0xe4, 0x9e, 0x8b, 0xa7, 0x18, 0x23, 0xd8, 0x69, 0x16, 0xa0, 0x40, 0xd9, 0x13, 0x04, 0x42, 0x85, 0x34, 0x72, 0xc9, 0xc0, 0x51, 0xf1, 0x0c, 0xf6, 0xf8, 0x65, 0xb3, 0x3c, 0xb5, 0xbe, 0x3b, 0x2b, 0x90, 0x6f, 0x9b, 0xef, 0xd8, 0x21, 0x28, 0x9b, 0x1f, 0xa9, 0xb6, 0xbf, 0x86, 0x38, 0x00, 0x3d, 0x3b, 0xd2, 0x4a, 0x58, 0x3f, 0x02, 0x44, 0x0e, 0x6d, 0xcb, 0x32, 0xa8, 0xb8, 0xe1, 0x4a, 0x8f, 0xb4, 0x1a, 0x5d, 0x61, 0x58, 0x1f, 0xba, 0x44, 0x02, 0x67, 0x50, 0x7b, 0xbb, 0x66, 0x12, 0x37, 0xbc, 0x01, 0xa0, 0xaf, 0x32, 0x46, 0x23, 0x72, 0x3f, 0x5a, 0x78, 0xfc, 0x41, 0xb2, 0x92, 0x88, 0x56, 0x86, 0x19, 0x26, 0x20, 0x83, 0x57, 0x0d, 0xc5, 0xc1, 0x55, 0x32, 0x3a, 0xf4, 0x41, 0x1a, 0xc2, 0xe6, 0x13, 0xec, 0xb1, 0x25, 0x71, 0xca, 0x76, 0xf8, 0xcf, 0x61, 0xd8, 0x98, 0xda, 0xbf, 0x80, 0x9d, 0x17, 0x65, 0xb8, 0xb7, 0xc7, 0x9e, 0x72, 0x9e, 0x0f, 0x0f, 0x8c, 0x4c, 0x55, 0x8e, 0x52, 0x69, 0xed, 0x38, 0x45, 0x07, 0xf5, 0xbd, 0x1b, 0x8f, 0x7d, 0xff, 0x06, 0xfb, 0xec, 0xdc, 0x39, 0x46, 0x9e, 0x47, 0xa9, 0x21, 0xd2, 0x9e, 0x10, 0xe8, 0xc4, 0x37, 0x38, 0xd4, 0x16, 0x3d, 0x76, 0x72, 0x74, 0xba, 0x74, 0x54, 0x78, 0xf4, 0x34, 0x06, 0xcb, 0xfd, 0x52, 0x43, 0x8e, 0x86, 0x8a, 0x69, 0xf8, 0xf4, 0x79, 0x2b, 0x40, 0xb6, 0xa8, 0x86, 0xbd, 0xd5, 0xc6, 0xf6, 0x4c, 0xcc, 0x35, 0xe9, 0xf2, 0x9b, 0xc9, 0x74, 0xc2, 0x17, 0xcc, 0x45, 0x01, 0x84, 0x45, 0xd9, 0x89, 0x65, 0x79, 0xef, 0x6b, 0x93, 0xb3, 0x3c, 0xd8, 0x8d, 0x41, 0x60 ],
-const [ 0x78, 0x10, 0xae, 0xd4, 0xd4, 0x2c, 0x06, 0x06, 0xd0, 0xc1, 0xf7, 0x69, 0x43, 0xd0, 0xc6, 0x3f, 0x38, 0xd2, 0x61, 0xcd, 0xaa, 0x62, 0x44, 0xb5, 0x8c, 0x36, 0x99, 0x7f, 0x0d, 0x53, 0xa3, 0x79, 0x19, 0x81, 0x5c, 0xc1, 0x23, 0xfd, 0x5d, 0xa0, 0x22, 0x6f, 0xff, 0x19, 0xd9, 0x1b, 0xc0, 0xc2, 0x5c, 0x5b, 0xe8, 0xd3, 0xd0, 0x4d, 0x6c, 0x7d, 0x72, 0xc9, 0x12, 0x7d, 0xdb, 0x96, 0xd6, 0xf0, 0x82, 0xdd, 0x8c, 0x69, 0x82, 0xdd, 0xc8, 0x41, 0x9d, 0xe1, 0xfb, 0x2e, 0x81, 0x6f, 0xde, 0x17, 0x4b, 0xc3, 0x14, 0x27, 0x4a, 0x7c, 0x0b, 0x21, 0x05, 0x94, 0x23, 0xf3, 0x7f, 0x95, 0x12, 0x8d, 0xb9, 0x0a, 0x87, 0xf3, 0x79, 0x34, 0x0d, 0x91, 0x4a, 0xff, 0x32, 0xd0, 0xc4, 0x34, 0xe9, 0xe6, 0x0d, 0xf0, 0x2e, 0xf2, 0xa0, 0x55, 0xe8, 0x48, 0x4d, 0x7f, 0x13, 0x09, 0x81, 0xba, 0x1e, 0xf8, 0xc8, 0xf2, 0x92, 0x88, 0x90, 0x6b, 0xf5, 0x3a, 0x30, 0xb2, 0xee, 0x25, 0x29, 0xd3, 0xaa, 0xd6, 0xab, 0xcc, 0x7d, 0x5b, 0x5b, 0x42, 0xcd, 0x9b, 0x53, 0x73, 0x2c, 0xe9, 0x6a, 0x6c, 0xc4, 0xd8, 0xb6, 0x7b, 0xf8, 0x50, 0x50, 0xe8, 0x48, 0xe1, 0x57, 0xe0, 0x75, 0x58, 0x38, 0xb2, 0xe6, 0x90, 0x2c, 0x3e, 0x4b, 0x8b, 0x02, 0xa9, 0x80, 0xc1, 0x1e, 0x56, 0xb4, 0xb8, 0xc2, 0x12, 0xca, 0xd5, 0x8c, 0x8f, 0xff, 0x72, 0x40, 0x14, 0xce, 0x31, 0xc8, 0x72, 0x11, 0x8f, 0x79, 0x3a, 0x68, 0xbc, 0x98, 0x2d, 0xde, 0xaa, 0x1d, 0xf4, 0xca, 0x63, 0xb6, 0x12, 0xf4, 0xa1, 0x0f, 0x16, 0xf9, 0x98, 0x51, 0x15, 0xf1, 0x17, 0xe9, 0x57, 0x4e, 0xcf, 0x8a, 0x51, 0x07, 0xf2, 0x75, 0xd3, 0xf7, 0x01, 0xf8, 0x83, 0x80, 0xdf, 0x34, 0x8a, 0x73, 0x29, 0x24, 0x8d, 0x34, 0xca, 0xdb, 0xdf, 0x19, 0xc9, 0x0d, 0xf5, 0x14, 0x66, 0xd1, 0x1a, 0x92, 0x66, 0xa5, 0x63, 0xa2, 0xab, 0xb3, 0xe6, 0x5a, 0x07, 0x53, 0x27, 0x76, 0x52, 0xd0, 0xd3, 0x43, 0xba, 0x6f, 0xb1, 0xbc, 0x5b, 0xad, 0xd5, 0xf2, 0x10, 0xc9, 0x17, 0xb1, 0x88, 0x82, 0xc3, 0x60, 0x9c, 0x22, 0x92, 0x29, 0xdf, 0xbb, 0xd9, 0x5a, 0x77, 0xb1, 0x01, 0x0b, 0x2c, 0x78, 0x37, 0x02, 0xbf, 0x9f, 0x64, 0xd3, 0x7d, 0x0e, 0x60, 0x4b, 0x13, 0x8c, 0x63, 0x0f, 0xa4, 0x84, 0xbc, 0x81, 0x19, 0x08, 0xc5, 0xe3, 0xb9, 0x16, 0x16, 0xbf, 0xf9, 0x1a, 0xf9, 0x86, 0x95, 0xb5, 0x1e, 0x77, 0xdf, 0xbd, 0x90, 0xc2, 0x57, 0x85, 0xe8, 0xee, 0x7d, 0x5e, 0xc1, 0x78, 0xe3, 0x5d, 0x6b, 0xbd, 0x86, 0x5f, 0xe4, 0x19, 0x5e, 0x4b, 0x03, 0x51, 0x34, 0x97, 0xf7, 0x2e, 0xb4, 0x0e, 0xf0, 0x6b, 0xc3, 0xd0, 0x1c, 0xd2, 0x13, 0x9a, 0xd5, 0xa1, 0xf4, 0x47, 0x19, 0x32, 0x6d, 0x97, 0x3a, 0xdb, 0x8b, 0x30, 0xd6, 0x14, 0xf9, 0xe2, 0x0a, 0xd7, 0xd1, 0x2f, 0xe3, 0x4d, 0xb2, 0x0b, 0x15, 0xa6, 0x13, 0xe0, 0xf0, 0x48, 0xd6, 0xd5, 0x8f, 0x2d, 0x20, 0x50, 0x53, 0x86, 0x69, 0xb9, 0x90, 0xa5, 0xcf, 0x82, 0x85, 0x19, 0xb0, 0x64, 0x92, 0x1b, 0x77, 0xeb, 0xa5, 0x29, 0xb6, 0x34, 0xf6, 0xf0, 0x76, 0xf6, 0xf4, 0x6f, 0xcb, 0xbf, 0x7e, 0x5a, 0xab, 0x80, 0x57, 0xbc, 0xff, 0x4c, 0xd4, 0xe1, 0xfb, 0x5d, 0xd8, 0x73, 0xab, 0x58, 0x02, 0xe3, 0xcf, 0xd1, 0x25, 0x0a, 0xe9, 0x12, 0xf9, 0x11, 0x94, 0x18, 0x10, 0x8e, 0x17, 0xdf, 0x0b, 0xef, 0x3a, 0xe0, 0x0d, 0x1c, 0x59, 0xd7, 0x70, 0x58, 0xb6, 0xc9, 0xb7, 0x68, 0x13, 0x46, 0xc4, 0xf8, 0x81, 0xec, 0x4c, 0x3a, 0x73, 0x2c, 0x87, 0xd0, 0x16, 0x51, 0x2c, 0xec, 0xe5, 0xbd, 0x9c, 0xb6, 0x78, 0x76, 0x5d, 0xee, 0x9c, 0xe2, 0xcb, 0xd2, 0xa9, 0xcf, 0x0a, 0x42, 0x10, 0xb6, 0x3f, 0x22, 0x34, 0x41, 0x00, 0x00, 0x7b, 0x0a, 0x09, 0xf6, 0xa4, 0xa6, 0x30, 0xd2, 0x5b, 0xe2, 0x9b, 0x75, 0x0a, 0x4c, 0x30, 0x79, 0xf3, 0xf6, 0x4d, 0x17, 0x7c, 0x76, 0xb9, 0x47, 0xc9, 0x31, 0xdb, 0x28, 0x90, 0xda, 0x2a, 0xa3, 0x29, 0x35, 0xe5, 0x4b, 0xe5, 0x21, 0x04, 0x88, 0xa1, 0xd5, 0x6e, 0xf5, 0x9b, 0x6a, 0x6c, 0x06, 0x84, 0x9a, 0x5e, 0xee, 0xd6, 0xc7, 0xad, 0xc0, 0x67, 0x3e, 0x00, 0xd4, 0x3f, 0xbe, 0xb3, 0x6c, 0xa6, 0x34, 0x85, 0x97, 0x82, 0xc9, 0x90, 0x56, 0xe0, 0x1e, 0x7f, 0xfe, 0xd1, 0xd6, 0xfb, 0xdd, 0x77, 0x56, 0x66, 0x20, 0x5f, 0xc8, 0xcc, 0xf4, 0x11, 0x66, 0x16, 0xec, 0xe6, 0xf5, 0x81, 0xa3, 0x1a, 0x8f, 0x4f, 0xa2, 0x22, 0xa6, 0xbd, 0x84, 0x40, 0x46, 0x34, 0x58, 0x54, 0x9a, 0xc3, 0x46, 0xf5, 0xb2, 0xcd, 0x76, 0xc0, 0x83, 0xff, 0x2d, 0xf0, 0x30, 0x85, 0x39, 0x30, 0x88, 0x7e, 0x90, 0xad, 0xcf, 0xad, 0x34, 0x6e, 0xc1, 0x71, 0x59, 0xe8, 0xd4, 0xf7, 0xca, 0xcd, 0xbe, 0xae, 0x89, 0x26, 0x37, 0xfb, 0xb5, 0xa1, 0x00, 0x2f, 0xb1, 0x2c, 0x24, 0xb6, 0x83, 0xc2, 0x7e, 0x90, 0x7a, 0x85, 0x7b, 0x06, 0x14, 0x0e, 0x21, 0x95, 0x1e, 0x01, 0x50, 0x2f, 0x1d, 0xe4, 0x48, 0xa3, 0xed, 0x31, 0x6c, 0x59, 0xa8, 0xa9, 0x46, 0x42, 0xca, 0xec, 0xca, 0x0f, 0x92, 0x47, 0xdf, 0xa1, 0xab, 0xcd, 0x1b, 0xc1, 0x0b, 0xa9, 0xce, 0x12, 0x1c, 0xb2, 0x43, 0x43, 0x19, 0x40, 0x42, 0x89, 0xbb, 0x3e, 0xd9, 0x4d, 0x16, 0x81, 0x5d, 0x22, 0xbd, 0x58, 0xab, 0xf9, 0x2d, 0x65, 0xb3, 0x98, 0x69, 0xab, 0x38, 0x48, 0xe1, 0xe7, 0xd1, 0xce, 0x98, 0x24, 0x34, 0x9d, 0x86, 0x8a, 0xb3, 0x4a, 0x3c, 0x77, 0x07, 0x40, 0xc6, 0xd1, 0x4d, 0xb5, 0xd5, 0x9a, 0x4e, 0xdd, 0x1e, 0xc4, 0x03, 0x5d, 0xfd, 0x47, 0x59, 0x02, 0x5e, 0x72, 0x31, 0xb3, 0xdd, 0x7e, 0xab, 0xa4, 0x2c, 0x69, 0xa4, 0xcd, 0xb5, 0x02, 0x7d, 0x9b, 0x81, 0x40, 0x1e, 0xe5, 0x59, 0xd7, 0x3b, 0x21, 0x2b, 0x0d, 0xd6, 0xd8, 0xaf, 0xca, 0x06, 0x57, 0x49, 0xef, 0xf6, 0xa8, 0x32, 0xe9, 0x30, 0xc0, 0xd3, 0x86, 0x1c, 0xfa, 0x71, 0x07, 0xc3, 0xc4, 0x0f, 0x76, 0xd9, 0x98, 0x90, 0x3a, 0xfb, 0x2f, 0x1d, 0xe8, 0x35, 0xf1, 0xc6, 0x5c, 0xc7, 0xaf, 0x6c, 0x09, 0x29, 0x94, 0xde, 0x8d, 0x4c, 0x59, 0x42, 0x88, 0x23, 0xb9, 0xb7, 0xaf, 0x62, 0x25, 0x38, 0x1c, 0x86, 0xb8, 0xc3, 0xe8, 0x15, 0x6d, 0xbb, 0xfc, 0x27, 0x90, 0x8c, 0x24, 0x25, 0x72, 0x8d, 0x66, 0xd1, 0x61, 0x2a, 0x91, 0x86, 0xd7, 0x42, 0x18, 0xc1, 0xf2, 0xce, 0x21, 0xe1, 0x24, 0xc4, 0xda, 0x2b, 0x2c, 0x3b, 0x0c, 0x11, 0x45, 0xcf, 0xf2, 0xb4, 0x9d, 0x47, 0x4b, 0xa7, 0x08, 0x75, 0xae, 0xf6, 0xf6, 0x5e, 0x1e, 0x67, 0xa3, 0x9b, 0xde, 0xff, 0x8d, 0xff, 0x86, 0xc8, 0x2b, 0x7a, 0x57, 0xd2, 0xdc, 0x3d, 0xcc, 0x78, 0x1e, 0x1f, 0x71, 0xe4, 0x00, 0x40, 0xf8, 0xd6, 0xda, 0xec, 0x8a, 0xa0, 0x3b, 0xc2, 0x5b, 0x76, 0x23, 0x15, 0x81, 0xe4, 0x72, 0x92, 0x06, 0xa0, 0xa1, 0x23, 0x3c, 0x82, 0xb0, 0x14, 0x50, 0xd1, 0x5f, 0x75, 0x22, 0xc0, 0xa1, 0xbf, 0x54, 0x38, 0x4e, 0xba, 0xa2, 0xd8, 0x18, 0x9d, 0x71, 0x3b, 0xc0, 0x77, 0xaa, 0x79, 0x8a, 0xcf, 0xc8, 0xf0, 0xee, 0x87, 0x30, 0x44, 0x90, 0x07, 0xc1, 0xa4, 0x72, 0x97, 0xad, 0x4f, 0x68, 0x0b, 0x87, 0x57, 0xcd, 0xa6, 0x9d, 0xa5, 0x75, 0x39, 0x87, 0x3e, 0xe2, 0x8b, 0x00, 0xc5, 0xbb, 0xfd, 0xf5, 0x40, 0x79, 0x6e, 0xdc, 0x1f, 0x64, 0x5d, 0x47, 0x7a, 0xbe, 0x4d, 0xb9, 0x9a, 0x3e, 0x6e, 0xb8, 0xbb, 0xc0, 0x79, 0x23, 0x10, 0x3a, 0xdc, 0xc6, 0x08, 0xf2, 0x17, 0x2c, 0xd0, 0xee, 0x66, 0xb4, 0x19, 0xac, 0xa0, 0xe7, 0x1b, 0x14, 0x5f, 0x09, 0xd9, 0xab, 0x61, 0xee, 0xa7, 0x09, 0x2e, 0x10, 0xea, 0x8d, 0xfb, 0xde, 0x20, 0x4f, 0xcf, 0x56, 0x20, 0x56, 0xe4, 0xd5, 0xa2, 0x0c, 0x50, 0x2e, 0x01, 0xee, 0xe4, 0xfa, 0x40, 0x88, 0x55, 0x30, 0x4c, 0xa1, 0x99, 0xf6, 0x80, 0xb3, 0x94, 0xb6, 0x6e, 0x9e, 0xf4, 0x73, 0xdd, 0x9c, 0x5a, 0x5e, 0x0e, 0x78, 0xba, 0xa4, 0x44, 0xfb, 0x04, 0x8b, 0x82, 0xa8, 0x04, 0xbd, 0x97, 0xa9, 0x87, 0xe3, 0x58, 0x08, 0xbf, 0x76, 0x2d, 0x22, 0xe8, 0xd2, 0xcf, 0x59, 0x2c, 0x8d, 0x4f, 0x0a, 0xc4, 0x06, 0x5b, 0xbf, 0x61, 0x41, 0xbd, 0xa5, 0xca, 0xf2, 0x24, 0x40, 0xc6, 0xd7, 0x27, 0x5d, 0x3c, 0x4b, 0x87, 0x48, 0x99, 0x19, 0xb4, 0x40, 0x72, 0x8e, 0x93, 0x28, 0x6b, 0xd2, 0x7f, 0x7f, 0x57, 0x78, 0x8e, 0x92, 0xa0, 0x53, 0x15, 0xf0, 0xe9, 0x8b, 0x6e, 0x1f, 0xf3, 0xf1, 0xf8, 0x8d, 0xbd, 0x90, 0x60, 0xc9, 0xf0, 0x84, 0x1f, 0xf3, 0x79, 0x10, 0x44, 0x72, 0x78, 0xea, 0x74, 0xe4, 0x59, 0xd9, 0x2f, 0x5b, 0x40, 0x82, 0x54, 0xc6, 0xab, 0x7f, 0xe8, 0xad, 0x53, 0xb2, 0x13, 0x22, 0x53, 0xd9, 0x6b, 0xf4, 0x8b, 0x62, 0x76, 0x25, 0x47, 0x80, 0x69, 0x9e, 0x1c, 0x7e, 0x36, 0x22, 0x13, 0x54, 0xc6, 0x81, 0x0a, 0x78, 0x83, 0x0e, 0x56, 0xf6, 0x1a, 0x52, 0xad, 0xc3, 0x7f, 0x02, 0x44, 0x4e, 0x31, 0x2f, 0x34, 0x59, 0xbf, 0xbd, 0x22, 0x07, 0x8b, 0x16, 0x1f, 0x36, 0xce, 0x1f, 0xcd, 0x0e, 0xdc, 0x6c, 0xc3, 0xda, 0xaa, 0xb0, 0x33, 0x17, 0x8d, 0x77, 0xca, 0xcb, 0x44, 0x17, 0xd8, 0x19, 0x39, 0xe3, 0xb1, 0x11, 0x04, 0xa3, 0x53, 0xcd, 0x31, 0x41, 0x49, 0xb9, 0x43, 0xc5, 0xcf, 0x32, 0xf8, 0x83, 0x36, 0x53, 0xcf, 0x93, 0x8a, 0x0b, 0xc8, 0x82, 0x73, 0x73, 0x6b, 0x47, 0x59, 0x5f, 0x0b, 0x79, 0xcb, 0x34, 0x4c, 0xbf, 0x22, 0xf9, 0xe3, 0x87, 0x61, 0xb0, 0x9d, 0xfb, 0x60, 0xe6, 0xa3, 0x30, 0x2a, 0x89, 0xfc, 0xa1, 0xa3, 0xfa, 0x53, 0xdd, 0x6e, 0x63, 0xfb, 0x7c, 0x0d, 0x4b, 0x30, 0x57, 0x4a, 0x67, 0xa0, 0xf9, 0xd6, 0xb3, 0x2a, 0x50, 0x31, 0xc2, 0xe5, 0xa8, 0xc9, 0x52, 0x64, 0xdb, 0x66, 0x24, 0x38, 0xc1, 0xc5, 0x0b, 0xb7, 0xee, 0x83, 0x42, 0xfc, 0x9d, 0x3e, 0x02, 0x2f, 0xe7, 0xf6, 0x54, 0x07, 0x39, 0xb9, 0x25, 0x8c, 0x04, 0x7f, 0x98, 0x22, 0xb6, 0x53, 0xa0, 0xc3, 0xea, 0xb3, 0xcd, 0x8c, 0xdb, 0x3a, 0x66, 0x7b, 0x1f, 0x7c, 0xb9, 0x77, 0x92, 0x32, 0xaf, 0x90, 0x90, 0x97, 0xa3, 0x89, 0x67, 0x11, 0x74, 0x93, 0x0b, 0x14, 0xd9, 0x5c, 0x0c, 0x43, 0xf5, 0x48, 0xc6, 0xd9, 0x2c, 0xfe, 0xd8, 0x48, 0x34, 0x27, 0xd7, 0x20, 0x6f, 0x72, 0x43, 0x31, 0x78, 0xdc, 0xb9, 0xf4, 0xfc, 0x2e, 0x6b, 0x27, 0xcb, 0xc7, 0xce, 0xb8, 0x2e, 0x9b, 0x92, 0xe4, 0x7c, 0x7c, 0xd7, 0xa0, 0xe8, 0x99, 0x9e, 0x38, 0x9d, 0x44, 0x7d, 0x36, 0x0d, 0xf8, 0x98, 0x85, 0x85, 0x9a, 0xcc, 0xd6, 0x05, 0xff, 0x2d, 0x43, 0x50, 0xaf, 0xb3, 0x32, 0x3f, 0xe8, 0x30, 0x7d, 0x5a, 0xe6, 0x85, 0xd0, 0xa9, 0x62, 0x16, 0x52, 0xc8, 0x59, 0x7b, 0x87, 0x3a, 0x0e, 0x79, 0x75, 0xff, 0x52, 0x30, 0x05, 0x69, 0x03, 0x95, 0xad, 0x2b, 0xd3, 0x23, 0x4c, 0xb3, 0x4a, 0xce, 0x55, 0xba, 0x0f, 0x39, 0x30, 0x19, 0x63, 0x28, 0xdd, 0xde, 0xee, 0x38, 0xdb, 0x9f, 0xbe, 0xce, 0x48, 0x0e, 0x8d, 0x4d, 0x49, 0xce, 0x42, 0x8c, 0xac, 0x85, 0xbb, 0x87, 0xcc, 0x33, 0xca, 0x54, 0xb5, 0xc2, 0x7d, 0x59, 0x89, 0xde, 0xa3, 0xbd, 0x23, 0x06, 0x8b, 0x1c, 0xf9, 0xe3, 0x0f, 0x7f, 0x47, 0xd9, 0xd1, 0x8b, 0x6a, 0xdd, 0xc5, 0xf8, 0x89, 0x86, 0xf0, 0x45, 0x7b, 0x66, 0x6f, 0xaa, 0xe5, 0x9a, 0xba, 0x4f, 0xa3, 0xa0, 0x2a, 0xbb, 0x6a, 0x69, 0xb9, 0x8f, 0xab, 0xaf, 0x0a, 0x74, 0xba, 0x89, 0xa9, 0x52, 0x2f, 0x3d, 0x93, 0xc3, 0x8d, 0x55, 0xf9, 0xc7, 0x21, 0xf5, 0x41, 0xb9, 0x2d, 0x6b, 0x4e, 0x81, 0x46, 0x08, 0x01, 0x0c, 0xfb, 0x2e, 0xff, 0xf9, 0xb7, 0xab, 0xb5, 0x95, 0xe9, 0x45, 0x9a, 0x0a, 0x61, 0x96, 0xb4, 0xd3, 0xfd, 0x1b, 0x5e, 0x73, 0x86, 0x87, 0x48, 0x67, 0xd5, 0x5d, 0xbf, 0x59, 0x3a, 0xbd, 0x2f, 0x96, 0x1e, 0x7e, 0xe6, 0xc2, 0xe6, 0x7e, 0x1a, 0xcb, 0x1b, 0x36, 0x2e, 0x1b, 0xc8, 0x92, 0x31, 0x12, 0x24, 0xff, 0xa8, 0xb3, 0x71, 0xc5, 0x8d, 0x9d, 0x24, 0x97, 0x97, 0x3d, 0x46, 0x68, 0xbc, 0x43, 0x1a, 0x81, 0xf5, 0x52, 0x00, 0xd1, 0x41, 0xfc, 0x99, 0x84, 0xec, 0xed, 0x2c, 0xd7, 0x11, 0x66, 0x49, 0x2a, 0x5e, 0xee, 0xac, 0x56, 0x17, 0x44, 0x63, 0x42, 0x5d, 0x97, 0x34, 0xb1, 0xb1, 0xf9, 0x39, 0x5e, 0xb4, 0x12, 0xcd, 0x4b, 0x30, 0x11, 0xac, 0x56, 0x5c, 0xe8, 0x55, 0x0d, 0x5c, 0xb9, 0xb3 ],
-const [ 0x6b, 0x50, 0xd7, 0x0e, 0xb3, 0xd9, 0x58, 0x73, 0x0f, 0x65, 0x0f, 0x7f, 0x99, 0xf9, 0xfb, 0x04, 0x6d, 0x94, 0x2f, 0x98, 0x5a, 0x11, 0x29, 0x97, 0xdd, 0x4e, 0x60, 0x67, 0x4f, 0x8e, 0x1c, 0x00, 0x5d, 0x1c, 0x8a, 0xab, 0xb9, 0x32, 0x10, 0x09, 0x0f, 0x18, 0xde, 0x58, 0x3b, 0x90, 0xc6, 0xf2, 0xb9, 0x72, 0x4d, 0x16, 0x5c, 0x94, 0x02, 0xeb, 0x43, 0xec, 0x0e, 0xc2, 0x0a, 0xf9, 0x0d, 0x9c, 0x3d, 0x5e, 0x1c, 0xec, 0x12, 0xd1, 0x33, 0x9e, 0x57, 0x33, 0xb6, 0x57, 0xa9, 0x00, 0x46, 0xff, 0xe7, 0xea, 0xdd, 0x7d, 0xe6, 0xc1, 0x1a, 0xc1, 0x66, 0x96, 0xd9, 0x08, 0x45, 0x20, 0x07, 0x5b, 0xf3, 0x5f, 0xb5, 0x59, 0x26, 0x7e, 0x6a, 0x37, 0xcf, 0xfe, 0xbe, 0x05, 0x4c, 0x11, 0x24, 0x33, 0xdf, 0x44, 0x08, 0x53, 0x5f, 0x61, 0x1a, 0x20, 0x2d, 0x94, 0xe9, 0xc0, 0x6a, 0xcc, 0xb3, 0x46, 0x67, 0x64, 0x7b, 0x7b, 0x5d, 0x03, 0x5d, 0xde, 0x5f, 0xc1, 0x1f, 0xe9, 0x8c, 0x8b, 0x08, 0x96, 0x89, 0xc8, 0xf5, 0x22, 0x2f, 0x3c, 0xa9, 0x11, 0x80, 0x2d, 0x65, 0x72, 0xe0, 0xc5, 0xb8, 0x64, 0x82, 0xb8, 0x99, 0xd9, 0x20, 0x27, 0xb3, 0x9a, 0xef, 0xc3, 0x00, 0x8c, 0xd2, 0x35, 0x99, 0x31, 0xcd, 0xbe, 0xcd, 0x71, 0xbd, 0x1a, 0x70, 0x9b, 0x47, 0xab, 0x75, 0xa7, 0x0f, 0xd3, 0xc0, 0xbe, 0x2a, 0xa2, 0x35, 0xfc, 0xd5, 0xb1, 0x15, 0x74, 0x67, 0x4d, 0x8a, 0x74, 0x84, 0xd8, 0x80, 0x0b, 0x94, 0x6d, 0xb7, 0xc9, 0x73, 0xc3, 0x16, 0xc6, 0x6a, 0x54, 0x43, 0xe5, 0x5f, 0xbe, 0x70, 0x5a, 0x48, 0x69, 0x78, 0x6a, 0xe6, 0x6a, 0x2a, 0x72, 0xaf, 0xa7, 0xe4, 0x2b, 0x0c, 0x3c, 0x65, 0x2c, 0xc4, 0x1e, 0xdc, 0xb1, 0xb8, 0xfe, 0x44, 0x9a, 0xd2, 0x71, 0xf4, 0xb7, 0x38, 0x4d, 0x72, 0x42, 0xc5, 0x56, 0x89, 0xad, 0xb9, 0x1a, 0x9b, 0x9f, 0xaf, 0x19, 0x38, 0x39, 0xd0, 0x29, 0xee, 0x9d, 0x47, 0x19, 0x63, 0xb1, 0xf4, 0x95, 0xa2, 0x20, 0x65, 0x49, 0xb3, 0xa2, 0x02, 0x4a, 0x6e, 0x7e, 0x87, 0xb1, 0x90, 0x4d, 0xb8, 0x89, 0x0f, 0x00, 0x50, 0xeb, 0xab, 0x24, 0x3a, 0x67, 0xc6, 0x65, 0x03, 0xa6, 0x75, 0x51, 0x90, 0x4e, 0xd7, 0x5f, 0x0c, 0x26, 0xa6, 0x30, 0x25, 0x7b, 0x0b, 0x14, 0x78, 0xc2, 0xb7, 0xd0, 0x49, 0x7e, 0x2f, 0x9f, 0x78, 0x64, 0x67, 0x76, 0xb0, 0xbd, 0x93, 0x8c, 0xe2, 0x0d, 0x3a, 0x1a, 0xf2, 0xf2, 0x8c, 0x5f, 0xb0, 0x4e, 0xf5, 0xe8, 0x09, 0xa8, 0xf2, 0x0e, 0x7f, 0xd0, 0x24, 0xc0, 0xd6, 0xc2, 0xa3, 0x83, 0x10, 0xcd, 0x94, 0xb6, 0x9c, 0xf5, 0xfe, 0x1b, 0xcb, 0x95, 0xd9, 0x93, 0x83, 0x49, 0x68, 0x29, 0x37, 0x0a, 0xc9, 0x52, 0x16, 0x9b, 0xcb, 0x73, 0x83, 0x25, 0xff, 0xa4, 0xc6, 0x1e, 0x12, 0xb4, 0x01, 0x6e, 0x59, 0x6d, 0x65, 0xd5, 0xae, 0x19, 0xa5, 0x87, 0x7b, 0x45, 0xab, 0x1a, 0x14, 0xc4, 0x8b, 0xa2, 0x4a, 0xf7, 0xb5, 0x1b, 0x3d, 0x4c, 0x6e, 0x07, 0x71, 0x05, 0x81, 0x57, 0x24, 0x3b, 0x31, 0x8f, 0xdf, 0x22, 0x73, 0x26, 0x4c, 0x8e, 0x5a, 0x2b, 0x47, 0xb6, 0xd3, 0x2f, 0x37, 0x38, 0x92, 0x5e, 0x9f, 0x5e, 0x4c, 0xef, 0xf0, 0xa0, 0x27, 0xbf, 0xa2, 0x6a, 0x6f, 0x38, 0x82, 0x1f, 0x8a, 0x78, 0x4e, 0x5d, 0x2e, 0xaf, 0x7f, 0x83, 0xd1, 0xc9, 0x66, 0x70, 0x61, 0x4e, 0x7a, 0x8e, 0x36, 0x86, 0xf1, 0x10, 0x45, 0xe0, 0x8d, 0x77, 0x96, 0x94, 0xb9, 0x5b, 0xf8, 0x88, 0xd4, 0x68, 0xf3, 0x71, 0xcd, 0xa7, 0xfe, 0x3a, 0xf0, 0xfe, 0xf2, 0xa9, 0xff, 0xfb, 0xbf, 0x40, 0x85, 0xcd, 0x5d, 0x61, 0x67, 0x93, 0x06, 0xb6, 0xbc, 0xda, 0xa3, 0xd0, 0xde, 0x60, 0x84, 0x0e, 0xc1, 0x1e, 0x53, 0xc1, 0x84, 0x86, 0x4b, 0x8d, 0x46, 0x0a, 0xa5, 0x13, 0x3b, 0xdd, 0x53, 0xcc, 0xff, 0xfd, 0xf1, 0x38, 0x2a, 0x71, 0xf9, 0x39, 0x24, 0xcf, 0x36, 0xb9, 0x3b, 0x02, 0x7b, 0x93, 0xf2, 0x4a, 0x94, 0xb1, 0x9c, 0x84, 0x7d, 0x72, 0x2a, 0xac, 0xd2, 0x4e, 0x42, 0xa0, 0x87, 0xbc, 0x91, 0x27, 0xd9, 0x53, 0x61, 0x31, 0x84, 0x30, 0x6e, 0x61, 0x37, 0x99, 0xf5, 0xc8, 0x45, 0xdf, 0x0f, 0xf4, 0x9d, 0x89, 0x3d, 0x29, 0xfc, 0xae, 0x44, 0xee, 0x61, 0xa3, 0x3b, 0xcb, 0xc2, 0xd7, 0xe2, 0x52, 0xfd, 0xfa, 0x35, 0x5c, 0x11, 0x65, 0x41, 0x95, 0x8e, 0xb6, 0x37, 0x3b, 0x4a, 0xba, 0xbf, 0x22, 0x56, 0x91, 0x8e, 0xfc, 0x30, 0x0c, 0x3b, 0xd7, 0x3a, 0x5a, 0x4e, 0xe7, 0x6b, 0xe4, 0x9b, 0x86, 0x45, 0x75, 0xce, 0x79, 0x07, 0x9e, 0x46, 0x75, 0x23, 0x59, 0x27, 0xe1, 0xf2, 0xec, 0xaa, 0xde, 0xa7, 0x10, 0xb8, 0x85, 0x82, 0x53, 0xb8, 0x6f, 0x46, 0xbb, 0xa5, 0x7b, 0xec, 0xac, 0x63, 0xcb, 0x99, 0x0b, 0x53, 0x10, 0xce, 0xa4, 0x25, 0x08, 0xde, 0xc9, 0xed, 0x45, 0xa6, 0x3c, 0x79, 0x2f, 0x78, 0x50, 0xe2, 0x4c, 0x58, 0x4a, 0x62, 0xbf, 0x6b, 0x0d, 0x65, 0x0f, 0xac, 0xf7, 0xe3, 0x2a, 0xe1, 0x06, 0xec, 0xaa, 0xce, 0x3f, 0x85, 0x56, 0xa8, 0x50, 0xb2, 0xec, 0xcc, 0x74, 0xd4, 0x1e, 0xb1, 0x97, 0x35, 0xda, 0x1b, 0xbb, 0xe2, 0xce, 0x92, 0x9a, 0xb9, 0x2c, 0x13, 0x8c, 0xc2, 0xaa, 0x05, 0xac, 0xc3, 0xce, 0x6e, 0x36, 0x0e, 0x68, 0x67, 0x34, 0x9e, 0x60, 0xce, 0x5a, 0x62, 0xb1, 0x3a, 0x2e, 0xd9, 0xb6, 0x34, 0x6c, 0xdf, 0xa5, 0xa4, 0xa8, 0xc7, 0x59, 0x89, 0x35, 0xa9, 0x54, 0xed, 0x46, 0xfd, 0x04, 0x19, 0x53, 0x69, 0x45, 0x05, 0xbe, 0xd8, 0x28, 0x12, 0xb7, 0xcc, 0xf2, 0xfb, 0x5d, 0xf5, 0x68, 0x09, 0x25, 0x02, 0x4a, 0x87, 0x80, 0xb7, 0x1e, 0x76, 0xb8, 0x40, 0x2e, 0x82, 0x1b, 0xc5, 0xd4, 0x34, 0x5c, 0x3e, 0xf5, 0x68, 0x36, 0x89, 0xcc, 0x02, 0x52, 0xb9, 0xe9, 0xdd, 0x6b, 0xb2, 0x79, 0x04, 0xb0, 0xf3, 0xc7, 0x25, 0x6a, 0xb2, 0x03, 0x42, 0xde, 0x2e, 0x43, 0xaa, 0x75, 0x41, 0xc7, 0x28, 0x1a, 0x34, 0x81, 0x7a, 0xe4, 0xd8, 0xd4, 0x04, 0xf5, 0xd2, 0x9d, 0xc6, 0xa2, 0x37, 0x70, 0x8c, 0xd4, 0x59, 0x24, 0x64, 0xad, 0xe0, 0x91, 0x55, 0x6f, 0x1c, 0x98, 0x4e, 0x9a, 0x99, 0x64, 0x5d, 0x55, 0xf4, 0xf0, 0x21, 0x0f, 0xee, 0xc9, 0x82, 0x66, 0xbf, 0x16, 0x9f, 0x48, 0xad, 0xd5, 0x08, 0x58, 0xdc, 0x67, 0x2e, 0x93, 0x68, 0x4f, 0x18, 0x33, 0xb1, 0x37, 0x57, 0xd3, 0xf6, 0x33, 0x3b, 0xd5, 0x26, 0x4a, 0x47, 0x01, 0xf2, 0x33, 0xe3, 0x6e, 0x27, 0x5c, 0x51, 0xa6, 0x3b, 0x31, 0xe2, 0x05, 0x25, 0x9a, 0x6a, 0x62, 0x72, 0xc5, 0xf1, 0xf2, 0x96, 0x27, 0xab, 0x68, 0x80, 0xbd, 0x2b, 0x61, 0x71, 0x98, 0xd3, 0x00, 0x0d, 0x98, 0x8f, 0xd5, 0xb3, 0x78, 0xc3, 0x04, 0x0a, 0x0a, 0x81, 0xa3, 0xdc, 0xc4, 0x00, 0x63, 0x28, 0x7c, 0x49, 0x73, 0x72, 0x70, 0x34, 0xa1, 0x5e, 0x89, 0x93, 0xc3, 0x7d, 0xe1, 0xad, 0x55, 0x67, 0x82, 0xee, 0x63, 0x0a, 0x71, 0xdc, 0xaa, 0x41, 0xeb, 0x4d, 0xfa, 0xa9, 0xee, 0xd7, 0xde, 0xb0, 0xfb, 0x89, 0x7f, 0xee, 0x1b, 0xd8, 0xc6, 0xb9, 0x20, 0xdc, 0xc1, 0xf3, 0x2d, 0xbd, 0x48, 0x27, 0x78, 0x68, 0xe0, 0xd4, 0x4f, 0x86, 0xdf, 0x09, 0x59, 0xae, 0xd1, 0x32, 0x1f, 0xd9, 0x1b, 0x32, 0xca, 0x17, 0xde, 0xb2, 0x2e, 0x81, 0x1e, 0xb8, 0x08, 0x6f, 0x24, 0x7b, 0x84, 0xeb, 0x20, 0x76, 0x03, 0x65, 0x13, 0xbb, 0x1a, 0xa8, 0xec, 0x8a, 0xde, 0x0c, 0xf1, 0x22, 0x5f, 0xed, 0x61, 0xd7, 0x72, 0x5d, 0x58, 0x65, 0xb4, 0x16, 0xf2, 0x84, 0xcb, 0xb2, 0xb3, 0xbc, 0xef, 0x1f, 0x27, 0x7b, 0xaa, 0x4d, 0xc5, 0x65, 0xdb, 0x29, 0x19, 0xeb, 0x01, 0xcf, 0x23, 0x1f, 0xb6, 0xfb, 0xfa, 0xc6, 0x7a, 0xc1, 0xb4, 0xaf, 0xb2, 0x7f, 0x8a, 0x44, 0xf0, 0x0f, 0x38, 0x5f, 0x75, 0x41, 0xa3, 0x5f, 0xf5, 0x88, 0xbe, 0x7a, 0x9a, 0xf3, 0xae, 0x55, 0x4b, 0x5f, 0x2d, 0xd1, 0x2d, 0xec, 0x2c, 0x28, 0x6a, 0xad, 0xbc, 0x3a, 0x32, 0xa4, 0x2e, 0x21, 0x00, 0xed, 0x79, 0x0b, 0x1f, 0x39, 0xdd, 0x49, 0x6c, 0x7e, 0xc6, 0xa3, 0x5d, 0xed, 0xf3, 0xef, 0x42, 0x25, 0xd7, 0xe2, 0xcb, 0xa6, 0x40, 0x25, 0xcb, 0x88, 0x36, 0xab, 0x3b, 0x6d, 0x26, 0x43, 0x82, 0xb4, 0x40, 0x69, 0xf4, 0xef, 0x1d, 0x62, 0x98, 0x97, 0xa5, 0x88, 0x2e, 0xff, 0x30, 0xe2, 0x70, 0x87, 0xeb, 0xf7, 0x99, 0x12, 0x7e, 0xe4, 0x24, 0xba, 0xeb, 0xad, 0xd6, 0xc2, 0xb9, 0xd1, 0xfe, 0xcb, 0x53, 0x21, 0xfc, 0x4b, 0xab, 0xd1, 0x00, 0x3c, 0x22, 0xd0, 0x14, 0x11, 0xac, 0x55, 0x5d, 0xee, 0x2f, 0xbb, 0x9d, 0x18, 0x2d, 0x8e, 0xfd, 0xab, 0xa3, 0xe6, 0x0a, 0x8b, 0x31, 0xf3, 0xfd, 0x9c, 0x7a, 0xda, 0x3f, 0x36, 0xce, 0xbf, 0x2c, 0xd3, 0x07, 0x23, 0x18, 0x0b, 0xb0, 0x71, 0x8f, 0xc3, 0x6d, 0xd3, 0xe1, 0xa1, 0x96, 0x4a, 0xde, 0xc3, 0x26, 0xfe, 0xdf, 0xb0, 0xd4, 0xd3, 0x06, 0x8e, 0x7f, 0x3c, 0xc6, 0x96, 0xcf, 0x54, 0xa5, 0xc6, 0x1a, 0x2b, 0x40, 0xd5, 0x84, 0x5d, 0x90, 0x6c, 0x6b, 0xea, 0x6d, 0x93, 0x02, 0x41, 0x50, 0x6a, 0x3b, 0x9e, 0x5d, 0x19, 0xeb, 0x96, 0xa1, 0x09, 0x29, 0xf1, 0x98, 0x55, 0xf6, 0xb7, 0xf2, 0x7b, 0x24, 0x8d, 0x96, 0x58, 0x70, 0x42, 0xe8, 0x53, 0xf2, 0xa6, 0x47, 0xd8, 0xb7, 0x9b, 0xda, 0x08, 0xac, 0x6e, 0x8d, 0xae, 0xbd, 0x67, 0x56, 0x75, 0x3f, 0x9e, 0xbd, 0x59, 0x8b, 0x11, 0x9b, 0x5c, 0xec, 0xf4, 0x22, 0x7a, 0xbc, 0x48, 0x1d, 0xde, 0xc9, 0xaf, 0x79, 0x56, 0xfe, 0x7f, 0x05, 0x05, 0x3f, 0x15, 0x76, 0x58, 0x94, 0x6c, 0xae, 0x3b, 0x8a, 0xee, 0x3e, 0x8c, 0xd6, 0x89, 0x29, 0xcf, 0x3c, 0x06, 0xeb, 0x24, 0xaf, 0x96, 0xb9, 0x77, 0xba, 0xae, 0x0b, 0xf7, 0x1e, 0x15, 0x58, 0xc9, 0xbd, 0x3c, 0x20, 0xfd, 0xb6, 0xcd, 0x30, 0xc1, 0xd2, 0x86, 0x22, 0xd4, 0x1f, 0x48, 0x23, 0x3e, 0xda, 0x6b, 0xf9, 0x3f, 0x92, 0x55, 0x44, 0x85, 0x8b, 0x4b, 0x03, 0xa1, 0x61, 0x86, 0x5b, 0xbc, 0xed, 0x8a, 0x94, 0x86, 0x6c, 0xb3, 0x65, 0x70, 0xde, 0x11, 0x71, 0x1b, 0xad, 0x76, 0x11, 0x10, 0x8f, 0xcc, 0x54, 0xb1, 0xad, 0xac, 0x44, 0x70, 0x05, 0x2d, 0x6b, 0x3e, 0x0d, 0xfa, 0x96, 0x46, 0x99, 0xa8, 0xd9, 0xdc, 0xfe, 0x46, 0xd3, 0xb0, 0x78, 0x35, 0x33, 0x48, 0xc9, 0x3a, 0x7b, 0xad, 0x23, 0xd1, 0x05, 0x64, 0x48, 0xc4, 0x43, 0x9f, 0xf0, 0xfd, 0x4a, 0xb5, 0x6b, 0x98, 0x92, 0xd0, 0x87, 0x3d, 0xf7, 0xe5, 0xb4, 0xad, 0x04, 0xea, 0x66, 0x9a, 0x71, 0x43, 0xbb, 0xbc, 0xea, 0x7d, 0x5e, 0x21, 0x13, 0x3e, 0xab, 0xc5, 0xc8, 0x7c, 0x14, 0x62, 0xa9, 0xee, 0xc3, 0x89, 0xd6, 0xc0, 0x80, 0xf2, 0xf7, 0x8b, 0xd6, 0x11, 0x80, 0x84, 0x71, 0xe9, 0x33, 0xf4, 0xcb, 0x25, 0xe6, 0xe8, 0x08, 0x65, 0x86, 0x29, 0x1e, 0xd6, 0x5c, 0x6e, 0x38, 0x05, 0x8f, 0xd1, 0x5d, 0xf5, 0xea, 0x80, 0x4c, 0x6f, 0xe0, 0xb5, 0xab, 0x99, 0xcd, 0xe8, 0x61, 0xca, 0x7f, 0x43, 0x41, 0x9d, 0xf5, 0x56, 0xe8, 0x44, 0x66, 0x0c, 0xe8, 0x1f, 0x86, 0xdd, 0x26, 0x8d, 0x04, 0x46, 0x80, 0x03, 0x57, 0x76, 0xb3, 0x5b, 0xba, 0x4b, 0x7c, 0x6e, 0x75, 0x7c, 0xfe, 0xe4, 0x5f, 0x18, 0x64, 0x4b, 0xa1, 0x2f, 0xc7, 0x67, 0xbc, 0xce, 0x52, 0xc9, 0xce, 0x31, 0xa4, 0xa3, 0x11, 0x35, 0x75, 0xdb, 0xa4, 0x0c, 0x7d, 0x5e, 0x8e, 0x34, 0x91, 0xb7, 0x00, 0xaa, 0x10, 0xe0, 0xda, 0x5b, 0x7d, 0x58, 0x71, 0xdb, 0x6d, 0x75, 0x8f, 0x59, 0xa4, 0xfc, 0xbc, 0xd3, 0x7b, 0xef, 0xbc, 0x86, 0x85, 0xa6, 0x59, 0xa9, 0x71, 0x21, 0x63, 0x5a, 0x32, 0x9d, 0xf4, 0xd9, 0x5e, 0x65, 0xf8, 0xf4, 0xd4, 0xeb, 0xed, 0xc2, 0xa2, 0x17, 0xe8, 0x94, 0x26, 0xdf, 0xd9, 0x29, 0x73, 0x18, 0x0f, 0x21, 0xf5, 0x8c, 0xff, 0xb4, 0x59, 0x4c, 0x41, 0xa4, 0xa7, 0x48, 0xdb, 0x70, 0xb1, 0x1c, 0xc2, 0xcb, 0xb1, 0x2d, 0x9e, 0x4c, 0x2e, 0xf5, 0xce, 0x67, 0x1f, 0x9b, 0xac, 0x9c, 0x53, 0xc7, 0x12, 0xee, 0x10, 0xb4, 0x1d, 0x97, 0xfb, 0x87, 0x30, 0xfa, 0x37, 0xdf, 0x3c, 0xd9, 0xd1, 0xad, 0x3f, 0xc8, 0x5c, 0x46, 0x0b, 0xe2, 0xd8, 0xb6, 0x49, 0xba, 0xd9, 0x57, 0xbd, 0x95, 0xe5, 0xa3, 0xcc, 0xd6, 0x1d, 0x47, 0x3b, 0xb9, 0x1f, 0x78, 0x39, 0x44, 0x2c, 0x8a, 0xa0, 0x7b, 0x86, 0xbf, 0x78, 0xd4, 0x1c, 0x5d, 0xbd, 0xea, 0x69, 0x03, 0x61, 0x75, 0x9a, 0x3c, 0x95, 0x7a, 0xef, 0x55, 0x45, 0xbf, 0x63, 0x6c, 0xe1, 0x82, 0x8f, 0xca, 0x63, 0x6a, 0xcc, 0x73, 0x8e, 0xbe, 0x98, 0xfa, 0x73, 0xd5, 0x3b, 0x9a, 0x3a, 0xce, 0xaa, 0x83, 0x1f, 0x81, 0xab, 0x72, 0xbb, 0xb4, 0x3a, 0x84, 0x85, 0x93, 0x2b, 0x4c, 0x98, 0x5a, 0x12, 0x23, 0xb7, 0x55, 0x60, 0xbf, 0x8e, 0x0a, 0xce, 0x08, 0x3a, 0xb5, 0xff, 0x26, 0x0c, 0xf4, 0x60, 0xdf, 0x8a, 0xc4, 0x54, 0x20, 0xb7, 0xac, 0x8e, 0xd9, 0x95, 0x38, 0xbd, 0x0e, 0xe7, 0xa9, 0x6f, 0x2c, 0x3b, 0xeb, 0x2f, 0x99, 0x28, 0xc7, 0xf1, 0x8e, 0xd5, 0x5a, 0xb1, 0x29, 0xba, 0xc6, 0x56, 0xbe, 0xab, 0x27, 0xdc, 0x6f, 0x12, 0xc9, 0xb2, 0xfc, 0x7c, 0x98, 0x61, 0xdc, 0x57, 0xd7, 0x6f ],
-const [ 0x43, 0xb1, 0xac, 0x9c, 0x15, 0xfc, 0xc2, 0xb0, 0x16, 0x8a, 0xa9, 0x86, 0x2d, 0xb0, 0x30, 0x44, 0x41, 0xce, 0x0c, 0x56, 0x59, 0xdb, 0x1f, 0xa8, 0x02, 0x44, 0xfa, 0x18, 0xf2, 0xf7, 0xa0, 0x2b, 0xea, 0xba, 0x8c, 0xfe, 0xe1, 0xc2, 0xf6, 0x80, 0x5e, 0x81, 0x53, 0xdf, 0x26, 0xbf, 0x1b, 0x40, 0x17, 0xec, 0xce, 0xb3, 0x54, 0xb5, 0x39, 0x66, 0xa2, 0xd5, 0xf6, 0x19, 0x12, 0x2e, 0x32, 0xd1, 0xe1, 0x18, 0xb2, 0xd1, 0x9c, 0xf9, 0x18, 0xc6, 0x87, 0x16, 0x63, 0x42, 0x40, 0xa8, 0xb6, 0x6b, 0xa0, 0x33, 0x5a, 0xf5, 0xe2, 0x13, 0x05, 0x4d, 0x07, 0x57, 0x5d, 0x17, 0x78, 0xd3, 0xb8, 0xdb, 0xee, 0x71, 0x26, 0xfb, 0x8f, 0xc8, 0xb1, 0xe9, 0x5a, 0xf0, 0xe3, 0x96, 0xc4, 0x94, 0x89, 0x2e, 0xa3, 0x48, 0xb7, 0x02, 0x4c, 0x1d, 0x0c, 0xc6, 0xf8, 0x73, 0x37, 0xfc, 0x6d, 0x0f, 0xba, 0xb0, 0xda, 0x6e, 0xee, 0x66, 0x02, 0x58, 0x48, 0x51, 0x9c, 0xb8, 0xda, 0xc5, 0xfa, 0xaa, 0x1d, 0xef, 0xea, 0xd6, 0xed, 0xc4, 0xda, 0xfd, 0xd5, 0x37, 0x3f, 0xd1, 0x8d, 0xaf, 0x37, 0x0a, 0xc1, 0xb8, 0x6c, 0xb6, 0x14, 0xf8, 0x3c, 0xd0, 0x65, 0x66, 0x18, 0x15, 0x51, 0xb6, 0x2a, 0x13, 0xf9, 0x17, 0x3b, 0x83, 0x05, 0x21, 0xd3, 0xd8, 0xe9, 0x09, 0xa2, 0x18, 0x66, 0x18, 0x1e, 0xeb, 0x54, 0x5b, 0x6e, 0xf2, 0xa0, 0x9b, 0x87, 0x59, 0x91, 0x8f, 0x95, 0xb0, 0x4f, 0x51, 0x9c, 0xf6, 0xa5, 0x0f, 0x5f, 0xf7, 0x06, 0x03, 0x81, 0xd9, 0xce, 0xa5, 0xea, 0xf1, 0xcb, 0x1f, 0x6c, 0xdb, 0xfc, 0x01, 0xa6, 0xc9, 0x98, 0x36, 0x29, 0x1b, 0x52, 0x37, 0xda, 0x30, 0xdc, 0x7e, 0x98, 0x7c, 0xaa, 0x3e, 0x1e, 0xdb, 0xf8, 0x51, 0x2a, 0x25, 0x0e, 0x71, 0xdf, 0x03, 0xc3, 0xac, 0x67, 0x01, 0x40, 0x12, 0xde, 0xe4, 0x06, 0xb1, 0x6b, 0x3d, 0x33, 0xc3, 0xb0, 0x3e, 0x00, 0x25, 0x65, 0xcd, 0x8f, 0x0b, 0x3f, 0xd7, 0xe4, 0xf3, 0x17, 0xe7, 0x31, 0xd7, 0x48, 0xf7, 0x56, 0xa7, 0x59, 0x86, 0xa8, 0xf6, 0xdc, 0xea, 0xf1, 0xf4, 0x95, 0xe8, 0xb9, 0x9c, 0xdf, 0x82, 0xc4, 0x2e, 0x4c, 0x10, 0xdc, 0xe0, 0x8c, 0x92, 0xd1, 0xd0, 0x90, 0x45, 0xbd, 0x3e, 0xee, 0x74, 0x8c, 0xf8, 0x88, 0x91, 0xbc, 0x15, 0x69, 0x84, 0x62, 0xe6, 0xef, 0x43, 0x6e, 0x2a, 0x2f, 0xa3, 0x2f, 0x81, 0x95, 0x6e, 0x1a, 0x24, 0xcb, 0xb5, 0xc7, 0xd2, 0xdc, 0x67, 0x3c, 0x0e, 0x9a, 0x23, 0x6e, 0x87, 0x3d, 0x4b, 0x05, 0xd8, 0x4c, 0x5a, 0x60, 0x71, 0xc1, 0x77, 0xd9, 0xd5, 0x68, 0x4a, 0x4a, 0x07, 0x88, 0x0e, 0xd0, 0x3e, 0xc5, 0xe7, 0xce, 0xe0, 0x45, 0x76, 0x35, 0xae, 0x12, 0xab, 0x03, 0x3c, 0xbf, 0xdb, 0x0a, 0xa5, 0x4f, 0x13, 0xf3, 0x7c, 0x52, 0xab, 0x82, 0x06, 0x51, 0x1e, 0x1c, 0xa6, 0x6c, 0x19, 0x86, 0x98, 0x42, 0xd1, 0xef, 0xe2, 0x11, 0x9a, 0x31, 0x88, 0x1e, 0xb6, 0x54, 0x00, 0x58, 0x6a, 0x53, 0xe5, 0x38, 0x57, 0x23, 0xf0, 0xeb, 0x08, 0xf2, 0x23, 0xb3, 0xc8, 0xad, 0x47, 0x8b, 0xb6, 0xc4, 0x99, 0x0a, 0x1b, 0x31, 0xc1, 0x89, 0xfa, 0xb7, 0x03, 0x88, 0xe9, 0x67, 0xb9, 0x4e, 0x20, 0x69, 0x01, 0xd0, 0xd0, 0xf9, 0xb3, 0xd4, 0xb6, 0xb0, 0x96, 0x56, 0xef, 0x05, 0xd3, 0x2b, 0x0e, 0x13, 0xa9, 0xe4, 0x6c, 0x9d, 0x63, 0xf5, 0xbf, 0x4f, 0x87, 0x17, 0xee, 0x46, 0x51, 0xea, 0x24, 0xd3, 0x5f, 0xdf, 0x24, 0x7c, 0xae, 0x55, 0xdc, 0x44, 0xc5, 0x02, 0x3c, 0x2d, 0x30, 0x95, 0x48, 0xfa, 0x30, 0x99, 0x6c, 0x39, 0xb1, 0x9d, 0x10, 0x81, 0x7c, 0x92, 0x6d, 0xf9, 0xae, 0x74, 0x9f, 0x19, 0x69, 0x2d, 0xfb, 0xb5, 0xc9, 0xb6, 0xa2, 0x37, 0x1a, 0x7f, 0x56, 0x2c, 0x48, 0x11, 0x8d, 0x02, 0x96, 0xf2, 0xc4, 0x0f, 0x93, 0xc8, 0x16, 0xd6, 0x4b, 0xc2, 0x0d, 0x86, 0xba, 0x34, 0xb8, 0xc4, 0x86, 0x81, 0xfe, 0xaa, 0xed, 0x3e, 0x31, 0x10, 0xfb, 0x94, 0xe7, 0x0a, 0x01, 0xe6, 0x05, 0xb1, 0x44, 0xb4, 0x1c, 0x27, 0xf2, 0xc0, 0xf9, 0xd5, 0x5a, 0x6f, 0x77, 0xf7, 0x5b, 0x71, 0x98, 0x5b, 0x1d, 0xa4, 0xd4, 0x65, 0x00, 0x36, 0xb1, 0x57, 0xd2, 0x0b, 0x94, 0xcf, 0x45, 0x5e, 0xd7, 0x92, 0xa0, 0xaa, 0x1b, 0x87, 0xb4, 0xcb, 0xe0, 0x07, 0x12, 0x60, 0x53, 0x54, 0x7b, 0x75, 0x66, 0x66, 0x98, 0x5f, 0x26, 0xee, 0xeb, 0xe6, 0x4a, 0x95, 0x06, 0xaa, 0x07, 0x84, 0xfb, 0xbf, 0x2c, 0x2a, 0x13, 0x9b, 0x6a, 0x39, 0xc3, 0x32, 0xf3, 0xf2, 0xdb, 0x5f, 0x48, 0xa3, 0x01, 0x86, 0x4b, 0x6e, 0x5e, 0x78, 0x9c, 0x4b, 0x97, 0x96, 0x22, 0x50, 0xff, 0x3a, 0xe8, 0x31, 0x0b, 0x52, 0x2b, 0x03, 0x06, 0x4e, 0xb1, 0x45, 0x05, 0x3d, 0x5c, 0x20, 0x1e, 0x32, 0xfe, 0xee, 0xd5, 0xed, 0x6f, 0xfa, 0xd7, 0xb7, 0xdd, 0x86, 0xeb, 0x8e, 0x64, 0x13, 0x25, 0x82, 0xde, 0xdc, 0x5c, 0x5f, 0xfd, 0xa4, 0xdf, 0x8c, 0x97, 0xb1, 0x64, 0x33, 0x40, 0x19, 0x41, 0xa2, 0x1e, 0x3c, 0xdf, 0xf2, 0xf9, 0x92, 0x6b, 0xe6, 0x92, 0xa7, 0xce, 0x15, 0x36, 0x63, 0xe0, 0x4c, 0x92, 0x8f, 0xd8, 0x2e, 0xc9, 0x95, 0x08, 0x1d, 0xc4, 0x87, 0xc7, 0x5e, 0xca, 0x63, 0xae, 0x77, 0x50, 0x96, 0x07, 0xdc, 0x12, 0xbe, 0x82, 0xcb, 0x62, 0xb4, 0x2a, 0x75, 0xc0, 0xca, 0x98, 0x5e, 0xac, 0x51, 0x66, 0x06, 0xb8, 0x5f, 0xe7, 0xc9, 0xe1, 0xcf, 0x15, 0x04, 0x1f, 0x88, 0xcb, 0x79, 0x3b, 0x03, 0x35, 0xf5, 0xe1, 0x07, 0x84, 0x30, 0xf6, 0xb7, 0xe6, 0xf4, 0x2b, 0xcf, 0xb5, 0x81, 0xd3, 0x2b, 0xee, 0x31, 0xf2, 0x89, 0xe6, 0x58, 0x96, 0x8f, 0x38, 0x6e, 0x6a, 0x10, 0x02, 0x70, 0x88, 0x8b, 0x51, 0x83, 0x8f, 0xf4, 0xd9, 0xdb, 0xf5, 0xb7, 0xea, 0xdb, 0x9f, 0xfb, 0x9f, 0x7d, 0xaf, 0x23, 0x59, 0xf5, 0x9e, 0x9b, 0x6b, 0x91, 0x8a, 0xd1, 0x17, 0xe4, 0xd1, 0x81, 0xba, 0x23, 0xde, 0x36, 0x43, 0xcf, 0x43, 0x0e, 0xe9, 0x94, 0x08, 0xbd, 0x1e, 0x72, 0x43, 0xd4, 0xbe, 0x1a, 0xe9, 0x44, 0x8d, 0x9b, 0xe4, 0x1d, 0xe0, 0x3d, 0x66, 0x9c, 0x9a, 0xad, 0x7c, 0x65, 0x5a, 0x5b, 0xe6, 0x0d, 0xf3, 0x21, 0x26, 0xdb, 0x1d, 0x25, 0xd7, 0xd0, 0x6a, 0x00, 0x40, 0xe4, 0x7b, 0x20, 0x29, 0x93, 0x73, 0x6a, 0xed, 0x98, 0xac, 0x24, 0xd1, 0xf9, 0xa9, 0x13, 0x94, 0x43, 0x4c, 0xe0, 0x48, 0x17, 0x49, 0xc1, 0x60, 0xe5, 0xdb, 0x55, 0x09, 0xf8, 0xb6, 0xcf, 0xbe, 0xb3, 0x3c, 0x56, 0x16, 0x1a, 0xf3, 0xac, 0xe1, 0x94, 0x37, 0x0e, 0x74, 0xee, 0x2c, 0x5c, 0x41, 0xa4, 0xf7, 0x7a, 0xab, 0x5c, 0x2e, 0xf6, 0x18, 0xb4, 0x8c, 0xeb, 0x47, 0x3d, 0xea, 0x25, 0xe4, 0xc7, 0x6a, 0x85, 0x59, 0xe0, 0xf6, 0xa7, 0xe8, 0x97, 0xe9, 0xc3, 0xf6, 0x86, 0x0b, 0xd1, 0xaa, 0x0f, 0xc3, 0xf1, 0xb7, 0xe5, 0x88, 0x09, 0x76, 0xce, 0x99, 0xb0, 0x38, 0xa8, 0xee, 0x4b, 0xda, 0xaa, 0x6e, 0x75, 0x9a, 0xed, 0x62, 0xa5, 0x28, 0x2b, 0x2a, 0x0a, 0x01, 0xc6, 0x2e, 0xba, 0xf8, 0x0c, 0x18, 0x0c, 0x15, 0xb9, 0x41, 0x42, 0xa3, 0xbd, 0x68, 0x6c, 0x85, 0x40, 0xaa, 0x89, 0xc9, 0xe4, 0xae, 0xee, 0x80, 0x4a, 0x21, 0xec, 0xcc, 0xd7, 0x62, 0xad, 0x3a, 0xb8, 0x7e, 0x5f, 0x52, 0x23, 0x5e, 0x94, 0x6d, 0xe0, 0x3f, 0xe9, 0xc7, 0x09, 0x63, 0xe6, 0xd5, 0x0e, 0x06, 0x26, 0xd9, 0xfb, 0x94, 0xb8, 0xb3, 0xfe, 0x19, 0xc4, 0xfa, 0x24, 0xf9, 0x72, 0x4b, 0x63, 0xe1, 0x07, 0xe1, 0xdd, 0xfd, 0x52, 0x66, 0x63, 0x6c, 0x46, 0x09, 0x38, 0xf1, 0xe8, 0xd1, 0x18, 0xeb, 0x6c, 0x31, 0x79, 0x87, 0x9a, 0xdc, 0x11, 0x34, 0x77, 0xda, 0x98, 0x57, 0x22, 0xdc, 0xcf, 0x40, 0xfc, 0xcd, 0xc1, 0x5d, 0x0b, 0xa9, 0x49, 0xae, 0xa1, 0x92, 0xd4, 0x79, 0x38, 0x21, 0x68, 0x3f, 0xa1, 0xfa, 0xe6, 0xee, 0x5e, 0xa3, 0x8c, 0x58, 0x4c, 0x96, 0xbd, 0xe4, 0x85, 0x94, 0x05, 0x84, 0x84, 0x3d, 0x58, 0xe7, 0x8a, 0xde, 0x9a, 0xef, 0x41, 0x8a, 0x65, 0x65, 0x9f, 0x6c, 0x06, 0xec, 0x0e, 0x5b, 0xc8, 0x33, 0xca, 0xaf, 0x76, 0x6f, 0x8a, 0x53, 0x1b, 0x09, 0x62, 0x1c, 0x0c, 0x93, 0xe8, 0x59, 0x28, 0x01, 0x96, 0xac, 0x5f, 0x16, 0x6f, 0x18, 0x71, 0x1c, 0xe5, 0x5a, 0xf8, 0xd8, 0xfb, 0x7d, 0xa9, 0xbd, 0xa7, 0xa9, 0xd7, 0x60, 0x7a, 0x3c, 0x38, 0x2c, 0x82, 0x1b, 0xec, 0x57, 0x70, 0x4b, 0xbb, 0x14, 0xf6, 0xbb, 0x9f, 0x0b, 0x73, 0x64, 0x82, 0x06, 0xd2, 0x94, 0x48, 0xed, 0xaf, 0x87, 0x10, 0xf4, 0xbc, 0x38, 0xb7, 0x13, 0x64, 0x76, 0x9e, 0xb7, 0xae, 0x3a, 0xae, 0xb7, 0x63, 0x38, 0x99, 0x89, 0x73, 0xb4, 0x62, 0xb6, 0x95, 0x97, 0x1f, 0x8b, 0x2e, 0xc2, 0xfe, 0x11, 0x74, 0xa2, 0x86, 0x40, 0xd3, 0x05, 0x1f, 0x70, 0x90, 0x2c, 0xd5, 0x10, 0xac, 0x21, 0x59, 0x9a, 0x0b, 0x4b, 0x48, 0xc6, 0xd5, 0x3f, 0xb0, 0xff, 0x1d, 0xd9, 0xd1, 0x13, 0xc0, 0x8c, 0x20, 0x2e, 0x90, 0xf6, 0x92, 0x09, 0xb2, 0xb7, 0x16, 0x5f, 0x45, 0x84, 0x63, 0xa1, 0x44, 0x77, 0xf5, 0xea, 0xae, 0xa9, 0x52, 0x35, 0xe4, 0x03, 0x92, 0xce, 0x52, 0x51, 0x1e, 0x06, 0x51, 0x98, 0xb8, 0x2b, 0x4c, 0xaa, 0xbc, 0xb7, 0x22, 0xf7, 0xa5, 0xc8, 0xcc, 0xa6, 0xd2, 0xd0, 0x40, 0xe5, 0x8b, 0x8e, 0x95, 0x7d, 0x3f, 0x3d, 0x67, 0xa9, 0x0f, 0x0b, 0x7d, 0x28, 0x91, 0xcc, 0xa9, 0x91, 0xcd, 0xf0, 0xf0, 0xe7, 0x8c, 0xb2, 0xeb, 0x6d, 0xd3, 0x93, 0x6d, 0xbb, 0xaa, 0x07, 0x67, 0x12, 0x21, 0x6e, 0x08, 0xed, 0x95, 0x45, 0x28, 0xd8, 0x30, 0x9e, 0xe6, 0x85, 0xaf, 0xcd, 0x90, 0x1d, 0x68, 0x65, 0xc4, 0xd4, 0x8b, 0x63, 0xd5, 0xc0, 0xa8, 0xa8, 0x70, 0xeb, 0x71, 0xad, 0x80, 0xa7, 0xc2, 0x72, 0x4e, 0x21, 0xde, 0xb7, 0xed, 0x39, 0xfc, 0x6f, 0xd5, 0x91, 0x02, 0x72, 0xce, 0xe4, 0x90, 0x72, 0x10, 0x9a, 0x40, 0x30, 0xa8, 0x99, 0x2c, 0xef, 0x1d, 0x5d, 0xb1, 0x29, 0x54, 0x4b, 0x73, 0x82, 0xb1, 0x42, 0xa1, 0xfa, 0x7f, 0x74, 0x7b, 0x66, 0x92, 0x74, 0x11, 0x21, 0x2a, 0x8f, 0x4d, 0xff, 0x1b, 0x60, 0x33, 0x82, 0x2b, 0x9f, 0x68, 0x51, 0xbc, 0x3a, 0xf1, 0xe5, 0xab, 0xa7, 0x3e, 0x86, 0x77, 0x78, 0x67, 0x76, 0xa6, 0x30, 0xb5, 0x6c, 0x64, 0x55, 0x64, 0x43, 0x6e, 0xc6, 0xa7, 0xf4, 0x2e, 0x4f, 0xed, 0xc2, 0x27, 0x7b, 0x63, 0xb4, 0x94, 0xa9, 0xba, 0x48, 0x4c, 0x62, 0x2a, 0x66, 0xe9, 0xea, 0xb7, 0x93, 0x29, 0x15, 0xb3, 0x67, 0x95, 0x5c, 0x84, 0x41, 0x60, 0x30, 0xa7, 0x39, 0x91, 0x8f, 0xf5, 0x56, 0x65, 0xd4, 0x25, 0x02, 0xee, 0xd3, 0x93, 0xba, 0x01, 0x25, 0x3f, 0x0a, 0x4f, 0xc1, 0x19, 0xb9, 0xd2, 0xcc, 0x7c, 0x41, 0x6b, 0xb3, 0xf8, 0x81, 0xc9, 0x76, 0x54, 0xb6, 0x8c, 0x47, 0xd3, 0xa8, 0xaa, 0x53, 0xb7, 0x21, 0x12, 0xe0, 0x04, 0xa3, 0x90, 0x98, 0x86, 0x5a, 0xf1, 0x24, 0x15, 0x50, 0x67, 0xfd, 0x18, 0xe0, 0x2f, 0x7f, 0x48, 0x6d, 0x70, 0x40, 0xb7, 0x54, 0x67, 0x9f, 0x10, 0x1e, 0xc1, 0xa0, 0x20, 0xfb, 0x48, 0xf7, 0x95, 0x6c, 0xc2, 0x62, 0x06, 0x3f, 0x16, 0x3c, 0x34, 0xc0, 0xb1, 0x50, 0x90, 0x2e, 0x28, 0xeb, 0xfd, 0x6c, 0x1f, 0x35, 0xd6, 0xf9, 0x69, 0xc0, 0x33, 0x22, 0x71, 0x62, 0x68, 0x76, 0xd8, 0x40, 0xcf, 0x7b, 0x5f, 0x2c, 0xc8, 0x9f, 0x08, 0x31, 0xfd, 0x71, 0x78, 0x6b, 0xeb, 0x11, 0xa0, 0x1c, 0x9e, 0xe5, 0x9c, 0xfd, 0xbb, 0x8e, 0xdb, 0xd2, 0xc4, 0x1b, 0x81, 0x41, 0x98, 0x7c, 0x09, 0xe4, 0x39, 0x39, 0x2f, 0x9d, 0xd2, 0x64, 0x0d, 0x2a, 0xf9, 0xcc, 0x84, 0xf9, 0x31, 0x73, 0xdd, 0x3d, 0xb3, 0x42, 0xb0, 0x41, 0x6e, 0xfc, 0x05, 0xfc, 0x4c, 0x71, 0xba, 0xe7, 0xb7, 0xf4, 0x25, 0x0b, 0x5c, 0x0e, 0xf9, 0x5e, 0x2e, 0x74, 0x6e, 0x4f, 0xae, 0x37, 0x9c, 0xa0, 0x6a, 0x3b, 0x28, 0x74, 0xc4, 0xea, 0x23, 0xa9, 0xf5, 0x29, 0x2f, 0x67, 0x52, 0x8b, 0xe4, 0xf9, 0xcd, 0xc5, 0x72, 0xdc, 0xbe, 0x63, 0x87, 0x16, 0xe4, 0xb9, 0x73, 0xc9, 0xa6, 0x1b, 0x8a, 0x08, 0x9f, 0x51, 0xc9, 0xe9, 0x5a, 0x45, 0xbd, 0xdc, 0x5a, 0xff, 0xa1, 0x3b, 0x5e, 0xd3, 0xc7, 0x22, 0xe3, 0xd9, 0x39, 0x80, 0xe9, 0x9e, 0x9f, 0x6e, 0xfa, 0x19, 0x63, 0xc0, 0x69, 0xe1, 0x14, 0xda, 0xd8, 0x9d, 0x08, 0xc6, 0xfc, 0xbb, 0x46, 0x83, 0xa5, 0x65, 0xa2, 0x9f, 0xf8, 0xb0, 0x2a, 0x08, 0xff, 0x17, 0xc1, 0x1f, 0x65, 0x29, 0x0a, 0x0e, 0x7a, 0x7e, 0x88, 0x5b, 0x7d, 0xef, 0x03, 0xbe, 0x1b, 0x06, 0x2d, 0x30, 0x33, 0xb4, 0x85, 0x45, 0xdc, 0x42, 0x7c, 0xbb, 0xa9, 0x8a, 0xd6, 0x53, 0x2c, 0x67, 0x54, 0xdf, 0xb8, 0x6a, 0x90, 0x9d, 0x6b, 0xcf, 0x28, 0xc3, 0x6c, 0xaf, 0x1e, 0x5b, 0x72, 0x77, 0x7f, 0x51, 0x86, 0x98, 0x43, 0xcb, 0x09, 0x80, 0x75, 0xb8, 0xf8, 0xca, 0x94, 0xac, 0x6f, 0xb1, 0x38, 0xeb, 0x6c, 0xcb, 0xf8, 0xc4, 0xd6, 0xf4, 0x8c, 0x20, 0xbe, 0x87, 0x2f, 0x5a, 0xe4, 0xd5, 0x47, 0x51, 0x7d, 0xcf, 0x48, 0xbc, 0x33, 0x06, 0xd6, 0xbe, 0x6e, 0xd6, 0x2a, 0xbb, 0xd2, 0xdd, 0xb6, 0x69, 0x09, 0xb2, 0x0c, 0x2a, 0xc2, 0xd4, 0xfc, 0x99, 0xf9, 0xe1, 0xfc, 0x62, 0x79, 0x09, 0xce, 0x58, 0xa0, 0xc1, 0x5c, 0xc1, 0x63, 0xbc, 0xe7, 0xf4, 0x91, 0x17, 0x60, 0x27, 0x5c, 0xd4, 0x16, 0x82, 0x15, 0x89, 0x92, 0x78, 0x37, 0x59, 0xbf, 0x56, 0xa7, 0x24, 0x4f, 0x1c, 0x3a, 0xfb, 0x59, 0x8d, 0x78, 0xd7, 0x47, 0x82, 0xa0, 0x8a, 0xef, 0x83, 0xec, 0xf5, 0x00, 0x98, 0x15, 0x7c, 0xa0, 0x5d, 0x1a, 0xb7, 0x53, 0x55, 0x3e, 0x6a, 0x1f, 0x80, 0x4f, 0xb8, 0xee, 0x30, 0x2e, 0x93, 0x33, 0x18, 0x8c, 0x77, 0xd0, 0xa6, 0xf2, 0x58, 0x38, 0x93, 0x04, 0xd9, 0xd0, 0xb8, 0x06, 0xbe, 0x9c, 0x23, 0x9f, 0xa4, 0x17, 0x6a, 0xdd, 0xef, 0x62, 0x3f, 0x7a, 0x05, 0xa1 ],
-const [ 0x0a, 0x72, 0xca, 0x03, 0xc9, 0x97, 0x7d, 0xcd, 0x01, 0x69, 0xda, 0x7a, 0xf1, 0xfa, 0x3f, 0x3f, 0x02, 0xe3, 0x74, 0x17, 0x58, 0x86, 0xde, 0x21, 0xa7, 0x96, 0xf5, 0x43, 0x48, 0xda, 0xf8, 0x14, 0x8c, 0x2d, 0xdf, 0xf9, 0x50, 0xca, 0x91, 0x8e, 0xd1, 0xc6, 0x57, 0x47, 0xc2, 0xde, 0x90, 0x57, 0x9c, 0x73, 0xa7, 0xd0, 0x36, 0xd3, 0x43, 0x0c, 0x95, 0xba, 0xbd, 0x4d, 0x05, 0x19, 0xd7, 0xa0, 0x68, 0x15, 0xab, 0x07, 0xcf, 0x53, 0xe1, 0xd6, 0x47, 0x73, 0x25, 0x5e, 0xf6, 0xda, 0xd8, 0xc9, 0x66, 0xb5, 0x06, 0x45, 0x20, 0x3a, 0x99, 0x65, 0x7d, 0x31, 0xcc, 0xc3, 0xb9, 0xb4, 0xe2, 0xeb, 0x49, 0x33, 0x17, 0x74, 0x6e, 0xbb, 0xd7, 0x70, 0x0b, 0x77, 0x2e, 0x07, 0xb4, 0x77, 0x80, 0x5e, 0x07, 0xb0, 0x7a, 0xbe, 0x3f, 0x44, 0x48, 0xf2, 0x06, 0x04, 0x08, 0xf0, 0x8b, 0x33, 0x7f, 0xbc, 0xd5, 0x8d, 0x0b, 0x8a, 0x57, 0x88, 0xd9, 0x23, 0xc4, 0xda, 0x58, 0x89, 0x24, 0x3b, 0xee, 0xde, 0x28, 0x6c, 0xe9, 0x82, 0xba, 0x78, 0xb8, 0x7c, 0xd9, 0x3a, 0x5b, 0x1b, 0xa4, 0x1f, 0x18, 0xdc, 0xb4, 0x2e, 0x70, 0x8f, 0xaf, 0x45, 0x51, 0xb6, 0x1a, 0xa5, 0x8d, 0x2e, 0x6f, 0xb0, 0x8b, 0x11, 0x70, 0xf2, 0x3d, 0xda, 0xba, 0x5f, 0x51, 0xca, 0x9d, 0xdb, 0xac, 0x8b, 0x2b, 0x00, 0x14, 0x14, 0x8f, 0x1b, 0x2c, 0xcc, 0xa1, 0x77, 0xa6, 0xf2, 0xb7, 0xdf, 0xb4, 0x3c, 0xbd, 0x5e, 0xbf, 0xbe, 0x88, 0x49, 0x5c, 0x0e, 0x67, 0x7f, 0x7c, 0xa6, 0xfb, 0xf0, 0xe2, 0x89, 0x49, 0x5c, 0xdb, 0x2a, 0x0e, 0x5d, 0x29, 0x89, 0x52, 0xa8, 0x40, 0x9f, 0x40, 0x90, 0xb5, 0xfc, 0x35, 0xcc, 0xf3, 0xaf, 0x17, 0x79, 0x30, 0x66, 0xe8, 0x63, 0x9f, 0xd6, 0x9b, 0x80, 0xe7, 0x5d, 0x26, 0xbd, 0xd5, 0xe6, 0xd8, 0xfd, 0x4d, 0x0e, 0xed, 0x5f, 0x87, 0x85, 0x60, 0xc0, 0x78, 0xb6, 0x00, 0x82, 0x8d, 0xaa, 0xc6, 0x8b, 0x9f, 0x29, 0x66, 0x90, 0x24, 0x23, 0x24, 0x93, 0xa2, 0x4f, 0xe9, 0xaa, 0x6a, 0x12, 0x96, 0x03, 0x82, 0xa2, 0x98, 0x25, 0xe3, 0x6b, 0xbd, 0x78, 0xe4, 0xb2, 0x45, 0x08, 0xf7, 0x78, 0x3d, 0x86, 0x93, 0xa1, 0x08, 0x90, 0x71, 0x55, 0x3f, 0x31, 0xfb, 0xa7, 0xbb, 0xac, 0x02, 0x74, 0xef, 0x75, 0xaf, 0x8e, 0x7b, 0x81, 0xbc, 0x1a, 0xff, 0xbf, 0xe3, 0x37, 0x2d, 0xe7, 0x97, 0xe1, 0x23, 0x72, 0xf3, 0x14, 0xf7, 0xe9, 0xf0, 0x34, 0x93, 0x63, 0xda, 0xac, 0xc3, 0x4a, 0x05, 0xd6, 0x8c, 0x5d, 0xbc, 0x1b, 0xc0, 0xfb, 0x7a, 0x5b, 0xcf, 0x9e, 0x5d, 0x8e, 0xe0, 0xa6, 0xd7, 0xac, 0x20, 0x58, 0xa7, 0xcb, 0x5a, 0x26, 0x07, 0x87, 0xc9, 0x30, 0x27, 0xa7, 0x2a, 0x0c, 0xdb, 0xfe, 0x14, 0xc2, 0x90, 0x8e, 0x8c, 0x1b, 0x85, 0xf4, 0xd5, 0x1c, 0x38, 0x00, 0x85, 0xcd, 0x1e, 0xa3, 0xde, 0x3f, 0x96, 0x0e, 0x5a, 0xcc, 0x20, 0x18, 0x88, 0xa1, 0xca, 0xe0, 0x17, 0x7a, 0xec, 0xb4, 0x30, 0xad, 0x15, 0x32, 0x0a, 0x6a, 0x45, 0xad, 0xb8, 0x41, 0x5d, 0xd3, 0x45, 0xe4, 0xd3, 0x8c, 0x02, 0x2f, 0xaa, 0x25, 0x1f, 0x65, 0xa2, 0xad, 0x79, 0xbd, 0xac, 0x9f, 0xb3, 0x1d, 0xa0, 0xc2, 0x88, 0x25, 0x32, 0x4e, 0x5f, 0x6f, 0x23, 0x50, 0x20, 0x15, 0xb4, 0x4f, 0x47, 0x74, 0x60, 0x30, 0x37, 0x30, 0xca, 0x57, 0xd0, 0x79, 0xf5, 0x0f, 0x43, 0x8c, 0xb3, 0x2c, 0x25, 0x7c, 0x60, 0xef, 0xc3, 0x32, 0xcf, 0x29, 0xb6, 0xb2, 0x85, 0xa3, 0xb7, 0xa1, 0x25, 0xbe, 0xb4, 0x04, 0x2c, 0x57, 0x23, 0x4b, 0xde, 0xed, 0x96, 0x8e, 0x81, 0x06, 0x8f, 0x16, 0xc8, 0xce, 0x96, 0x1f, 0x92, 0x02, 0x8a, 0xdc, 0xd5, 0x0c, 0x35, 0xbc, 0xd4, 0x70, 0x22, 0xec, 0x99, 0x66, 0xb3, 0x1d, 0x9f, 0xc8, 0x6e, 0x87, 0xcf, 0x2f, 0x98, 0x2e, 0xad, 0x5a, 0x05, 0x64, 0xd4, 0xcf, 0x2e, 0x8f, 0xa0, 0xc4, 0x84, 0x2c, 0x2a, 0x3f, 0x04, 0x14, 0x79, 0x7d, 0x0c, 0xfe, 0xf6, 0x91, 0x6d, 0x46, 0x21, 0x4d, 0xc1, 0xed, 0x83, 0x65, 0xff, 0xe0, 0xe3, 0xd2, 0x4c, 0x7d, 0xbd, 0x75, 0x14, 0x53, 0xf0, 0xfd, 0x5a, 0x29, 0xb7, 0x0a, 0x4c, 0x42, 0xda, 0x92, 0x1b, 0xe0, 0x26, 0x85, 0x09, 0x07, 0x1a, 0xac, 0xc4, 0x83, 0xe3, 0xd7, 0xf2, 0x2d, 0x8b, 0x37, 0x0d, 0x69, 0x6d, 0x09, 0x71, 0xf3, 0xec, 0x74, 0xb3, 0xdc, 0x64, 0xb5, 0x35, 0xcf, 0x61, 0x79, 0xf7, 0x99, 0x0f, 0x8a, 0xb0, 0xe8, 0xf2, 0xae, 0x1e, 0x53, 0xd7, 0xcd, 0x9a, 0x9b, 0x0b, 0x51, 0xef, 0x31, 0xca, 0xd2, 0x6c, 0xf8, 0xfa, 0xf3, 0x38, 0x4b, 0x1a, 0x87, 0xe6, 0x42, 0x75, 0xf9, 0x49, 0x31, 0x9b, 0xea, 0x8a, 0x72, 0x11, 0x1b, 0x77, 0x65, 0x48, 0x8e, 0x1e, 0xb4, 0xcc, 0xe8, 0x9b, 0xdc, 0xbe, 0x1a, 0x2e, 0xe9, 0x84, 0x40, 0x91, 0x80, 0xbf, 0xc9, 0x88, 0x23, 0x7d, 0xd9, 0xb9, 0xb1, 0xb1, 0xeb, 0xbe, 0x2c, 0xe0, 0xbb, 0x79, 0xbf, 0x1c, 0x63, 0xa7, 0x00, 0x36, 0xc4, 0xb8, 0x72, 0x30, 0x27, 0xdf, 0x4e, 0xf1, 0x24, 0x65, 0x83, 0x3c, 0xc4, 0x42, 0xfb, 0xe3, 0xe2, 0xee, 0x20, 0x38, 0xd7, 0x75, 0x9f, 0xc5, 0x56, 0xca, 0x6b, 0x3d, 0x94, 0x5d, 0x06, 0xb2, 0xac, 0xef, 0xfc, 0x07, 0x43, 0xa5, 0xb0, 0xa9, 0x67, 0x5c, 0x5a, 0x7a, 0xbd, 0x3d, 0x51, 0x0e, 0xdc, 0x91, 0x86, 0x1a, 0xf4, 0xd6, 0x51, 0x29, 0xb3, 0x12, 0x71, 0x91, 0x69, 0x67, 0x4e, 0xa6, 0x6a, 0xe8, 0x80, 0x2d, 0xb4, 0xab, 0x95, 0x14, 0xd1, 0x1f, 0x0f, 0x60, 0xff, 0xa0, 0xad, 0x66, 0x8f, 0x49, 0xec, 0x3e, 0x8b, 0x0a, 0xcc, 0x75, 0x9b, 0xfa, 0xd7, 0x02, 0x29, 0xee, 0x60, 0x7b, 0xc4, 0x4a, 0x09, 0x89, 0xc2, 0x17, 0x88, 0x9a, 0x2a, 0x56, 0xaa, 0xd5, 0xd1, 0x94, 0x97, 0x53, 0xc2, 0xbf, 0x59, 0x8c, 0xe3, 0x38, 0x98, 0x0f, 0xd6, 0x29, 0xa7, 0x77, 0x1e, 0x19, 0xc5, 0x9a, 0x83, 0xbe, 0x9c, 0x03, 0xb7, 0x12, 0x0e, 0xa3, 0x39, 0xa9, 0x31, 0xc3, 0x7a, 0x41, 0x98, 0x3d, 0x3f, 0x9b, 0xd5, 0xec, 0x46, 0x89, 0x3b, 0x61, 0x2c, 0x49, 0xe9, 0xd7, 0x8e, 0x11, 0x04, 0x69, 0x6f, 0xeb, 0x43, 0x83, 0xd9, 0xc3, 0xb1, 0x97, 0xc7, 0xbe, 0xae, 0x11, 0x43, 0xce, 0x37, 0x8c, 0xcc, 0x84, 0x68, 0x46, 0xfa, 0x25, 0x3f, 0xd1, 0x65, 0xff, 0xa3, 0x0c, 0xc2, 0xfd, 0xa5, 0x52, 0x4f, 0x7a, 0x05, 0xf1, 0x72, 0x53, 0xf8, 0xde, 0x9c, 0x40, 0x28, 0xa7, 0x74, 0x64, 0xfd, 0xa8, 0x32, 0x22, 0x1b, 0x82, 0x48, 0x33, 0x2c, 0xc9, 0x48, 0xf5, 0xdf, 0xfd, 0x02, 0x06, 0x30, 0xbc, 0xec, 0x12, 0xeb, 0x35, 0xc8, 0xe9, 0x6b, 0xe0, 0x80, 0xd5, 0xa8, 0x6d, 0x55, 0x2a, 0x71, 0xfa, 0x38, 0x1e, 0xf5, 0x88, 0x78, 0xdb, 0x88, 0xb0, 0x9e, 0xd3, 0xa4, 0x92, 0x96, 0x54, 0x2e, 0x0f, 0x0f, 0x5c, 0xfb, 0x38, 0x23, 0xae, 0x93, 0x05, 0x3b, 0x25, 0x35, 0x4b, 0x2d, 0x49, 0x1b, 0xe8, 0xa8, 0x20, 0xfe, 0x40, 0xd2, 0x47, 0xdd, 0xee, 0x2f, 0x40, 0xfb, 0xb3, 0xc5, 0x0e, 0x27, 0xb2, 0x7e, 0xff, 0x3f, 0xe0, 0xcd, 0xca, 0xf7, 0xb6, 0x94, 0xd9, 0xd7, 0x29, 0x46, 0xe8, 0x83, 0xdb, 0x49, 0xcf, 0x3f, 0x93, 0x9e, 0x9c, 0xb2, 0xeb, 0xc3, 0xe5, 0xea, 0x48, 0xd8, 0x5d, 0xa1, 0x0f, 0x02, 0xa4, 0xbf, 0x16, 0x0d, 0x64, 0x20, 0x59, 0x55, 0x99, 0x96, 0xef, 0xe6, 0x30, 0x32, 0x3c, 0xe2, 0xd4, 0xbf, 0x67, 0x23, 0x05, 0x90, 0x0e, 0x22, 0x6a, 0x7c, 0x39, 0x17, 0x68, 0x26, 0x8d, 0x62, 0xf3, 0x82, 0xc3, 0x2a, 0xa4, 0x94, 0x58, 0x44, 0x0c, 0x7b, 0x85, 0x56, 0x49, 0xaf, 0x71, 0x3c, 0xd6, 0x87, 0xa6, 0xaa, 0xa8, 0xfe, 0xc1, 0x13, 0x76, 0xb6, 0x6e, 0xca, 0x58, 0x3d, 0x94, 0x68, 0x93, 0x90, 0xcd, 0x6d, 0xb3, 0xdd, 0x19, 0x2a, 0xdb, 0x8d, 0xd3, 0xde, 0x5a, 0x82, 0xe4, 0x1f, 0x7e, 0x9d, 0x36, 0x7b, 0xad, 0x84, 0x6c, 0x60, 0xb1, 0xa2, 0xd0, 0x39, 0x54, 0x6f, 0x8c, 0xda, 0x2d, 0xf1, 0x1e, 0x1e, 0xb9, 0x83, 0x06, 0xce, 0xae, 0xd5, 0xc1, 0xc5, 0x8b, 0x34, 0xfb, 0x52, 0x74, 0x0b, 0x01, 0xde, 0x3d, 0xaa, 0x75, 0xcf, 0xc5, 0x47, 0x45, 0xac, 0x85, 0x42, 0xdd, 0x81, 0x68, 0xae, 0x9c, 0x85, 0xdd, 0x0c, 0x85, 0xfa, 0x2b, 0x59, 0x38, 0x55, 0x06, 0x4c, 0x20, 0x9f, 0x5f, 0xd9, 0xed, 0x1b, 0x80, 0xf9, 0x45, 0x29, 0x57, 0xad, 0xb6, 0x6a, 0x12, 0x40, 0xf0, 0x25, 0xed, 0xcd, 0x31, 0xe9, 0x48, 0x02, 0x00, 0x74, 0xfd, 0x23, 0x1e, 0xd4, 0xf0, 0x52, 0xba, 0xcc, 0xe8, 0x0d, 0xe4, 0x79, 0x9d, 0xf8, 0x44, 0x35, 0x12, 0xdd, 0x0c, 0xbc, 0x24, 0xf1, 0x2b, 0x8e, 0x63, 0x59, 0xc4, 0x94, 0x22, 0xec, 0xde, 0x05, 0xca, 0x3b, 0x5d, 0x8b, 0x74, 0xce, 0x31, 0xa2, 0xb6, 0xb1, 0xcd, 0x41, 0xbc, 0x30, 0xda, 0xbd, 0x9b, 0xde, 0x2d, 0xea, 0xe3, 0xdc, 0xf7, 0x83, 0x73, 0x57, 0x3c, 0xcc, 0x92, 0x53, 0x87, 0x75, 0x3b, 0xa7, 0xdb, 0xc2, 0xb7, 0x49, 0xec, 0xe9, 0x72, 0xcc, 0x8f, 0xbc, 0x07, 0x27, 0x70, 0x87, 0x9d, 0xb8, 0x03, 0x3c, 0x76, 0x89, 0xbd, 0xcd, 0xc5, 0xd1, 0x83, 0xda, 0xc0, 0xbe, 0x63, 0x8c, 0xf7, 0x71, 0x82, 0xc1, 0xe4, 0x4b, 0x55, 0x69, 0xc3, 0x67, 0x14, 0x2f, 0xa4, 0x67, 0x6c, 0x5d, 0xbe, 0x74, 0x75, 0xf9, 0x06, 0x80, 0xe3, 0x34, 0x00, 0xce, 0x80, 0x06, 0xd5, 0xb5, 0xda, 0x12, 0xa7, 0xa1, 0x38, 0xcf, 0x21, 0x5a, 0xd3, 0xe9, 0x52, 0x89, 0x43, 0xe5, 0xbb, 0x78, 0x38, 0x05, 0xa6, 0x19, 0x6a, 0x6b, 0xba, 0x4a, 0xd3, 0x80, 0xcd, 0x57, 0x1b, 0x97, 0xf9, 0xc0, 0x54, 0xce, 0xf2, 0x3d, 0xe7, 0x35, 0x96, 0x00, 0xce, 0x33, 0xc6, 0x3a, 0x04, 0x25, 0x75, 0xe0, 0x3a, 0x47, 0xfe, 0xaf, 0xcc, 0xd8, 0xbb, 0x6e, 0xf3, 0x79, 0xd3, 0x73, 0x3c, 0xd7, 0x53, 0x68, 0x39, 0x89, 0x81, 0x4f, 0x76, 0x3c, 0x6d, 0xc4, 0xae, 0x0d, 0xc8, 0x82, 0x3f, 0x36, 0xf9, 0x29, 0xdc, 0xed, 0x6e, 0x3f, 0x82, 0x89, 0x30, 0x74, 0xad, 0xe7, 0xbb, 0x2a, 0xcb, 0x0c, 0x0c, 0x34, 0xf1, 0x0b, 0xfb, 0xde, 0xcd, 0x29, 0xcb, 0x2e, 0xdc, 0x40, 0x00, 0x6a, 0xdc, 0x61, 0x70, 0xda, 0x85, 0xbd, 0x9d, 0xcf, 0x74, 0xc6, 0x42, 0xe5, 0x68, 0x91, 0x2c, 0x84, 0xb0, 0x7f, 0x4b, 0xad, 0xe4, 0x1c, 0x09, 0xf3, 0xd4, 0x47, 0xda, 0xc7, 0xbe, 0x94, 0x15, 0xf9, 0xc4, 0xee, 0x02, 0x7c, 0x9c, 0x81, 0x34, 0x6a, 0x8a, 0xd7, 0x19, 0x47, 0x8b, 0x40, 0xcf, 0x8a, 0xd3, 0x78, 0x39, 0x59, 0x7a, 0x84, 0x53, 0x95, 0x73, 0xdd, 0xc2, 0x16, 0xbd, 0xd0, 0xb0, 0x38, 0xdd, 0x25, 0xd6, 0x96, 0x8b, 0xff, 0xda, 0x15, 0xac, 0x03, 0xdc, 0x25, 0x80, 0xbc, 0x4c, 0x43, 0x1d, 0x3e, 0xfe, 0xc2, 0x1c, 0x0a, 0x80, 0xcc, 0x92, 0x32, 0xab, 0xa4, 0x42, 0xbe, 0x78, 0x2d, 0x10, 0x4d, 0x15, 0xb0, 0xb9, 0x00, 0x38, 0xda, 0xc2, 0x93, 0xb4, 0x04, 0xae, 0xcd, 0x4a, 0xb8, 0x74, 0x1b, 0xc1, 0x70, 0x30, 0x78, 0x38, 0xa0, 0x19, 0x8f, 0xbc, 0xf7, 0xb3, 0x24, 0x16, 0xe2, 0x46, 0xb0, 0xe6, 0x53, 0x8e, 0x4b, 0xf6, 0xc0, 0xb4, 0xcf, 0xc8, 0x6e, 0x7d, 0x3b, 0x71, 0xef, 0xc2, 0x55, 0xaa, 0xea, 0x20, 0x94, 0x25, 0x1a, 0xf0, 0x3c, 0x1d, 0x99, 0x79, 0xcb, 0x31, 0x5f, 0x65, 0x94, 0x72, 0x05, 0x72, 0xaa, 0xbb, 0xcf, 0x6a, 0xff, 0x41, 0xea, 0x55, 0xcd, 0x6a, 0xf2, 0xed, 0x35, 0xe3, 0xb8, 0x52, 0x27, 0xed, 0x41, 0xff, 0x81, 0xf7, 0x12, 0xfd, 0x7b, 0x72, 0xaa, 0x56, 0x42, 0xe1, 0x51, 0xcd, 0xe3, 0x2f, 0x10, 0xcc, 0x6b, 0x46, 0x01, 0x9e, 0x4c, 0xdd, 0xc9, 0xde, 0x03, 0x91, 0x62, 0x30, 0xf8, 0x38, 0x1e, 0x2f, 0xa6, 0x72, 0xe8, 0xa6, 0xfb, 0x80, 0xcd, 0x02, 0x02, 0x5a, 0xbc, 0x07, 0xbf, 0xfb, 0x8a, 0xc3, 0x5b, 0x00, 0x39, 0xc0, 0x81, 0x71, 0x7a, 0x7e, 0x07, 0xdf, 0x70, 0x20, 0xd1, 0xaf, 0xb7, 0x66, 0xf2, 0xb5, 0xa5, 0xdb, 0x15, 0x05, 0xd0, 0x50, 0x1c, 0x05, 0xd0, 0x88, 0x06, 0xc7, 0x46, 0x35, 0x16, 0x96, 0x1d, 0x23, 0x31, 0xcf, 0x0f, 0xb4, 0x89, 0xf3, 0x6b, 0x8c, 0x78, 0xf9, 0x16, 0x8d, 0xae, 0xe9, 0xd0, 0x06, 0x8f, 0xa6, 0xb9, 0x27, 0xd7, 0x0b, 0x14, 0xb9, 0x80, 0x3a, 0x4a, 0x0c, 0xe5, 0x31, 0x32, 0x30, 0x27, 0x9f, 0x8f, 0x67, 0xd0, 0xf5, 0xdb, 0xdb, 0xb6, 0xbf, 0x43, 0x8d, 0x23, 0x35, 0xf2, 0x8e, 0x32, 0x0d, 0x92, 0x71, 0x7c, 0x94, 0x10, 0x00, 0xf4, 0xfd, 0xa0, 0x2e, 0x10, 0xf9, 0x02, 0x4d, 0x2a, 0x88, 0x03, 0x81, 0x25, 0x0e, 0x46, 0x75, 0x53, 0xa9, 0x44, 0x4c, 0x96, 0xc2, 0x92, 0xdb, 0xc6, 0xe2, 0x63, 0x15, 0x53, 0xc7, 0x4d, 0xc6, 0x2c, 0xb8, 0x50, 0x85, 0xdf, 0x15, 0x14, 0xe3, 0x01, 0x32, 0x72, 0xe9, 0xd0, 0x65, 0x36, 0xc2, 0x17, 0x5e, 0x23, 0xb4, 0x52, 0xb7, 0x38, 0x55, 0x13, 0xcc, 0x32, 0xfb, 0xa4, 0xcd, 0x52, 0x74, 0xee, 0x12, 0x60, 0xf7, 0x99, 0xae, 0xf0, 0x5b, 0x75, 0x46, 0xe4, 0x87, 0x19, 0x24, 0x32, 0x2a, 0xca, 0x87, 0xe8, 0xac, 0x9e, 0x3d, 0x6d, 0x64, 0xe0, 0x74, 0x09, 0x0b, 0xb7, 0xce, 0xa7, 0x70, 0x03, 0xb3, 0xda, 0x6e, 0x88, 0xeb, 0x1f, 0x1b, 0x4e, 0x6c, 0x62, 0x43, 0x47, 0x70, 0xc3, 0x15, 0x33, 0xcb, 0x99, 0x1b, 0xc1, 0x7c, 0xb7, 0x70, 0xf7, 0x82, 0xef, 0x2d, 0xd3, 0xf1, 0xd5, 0x24, 0x33, 0x44, 0xc5, 0xd1, 0xf2, 0xf5, 0x28, 0x8d, 0x54, 0x4b, 0xf2, 0x05, 0xa4, 0x74, 0x6f, 0xeb, 0x1b, 0xd3, 0x40, 0xeb, 0x04, 0x9b, 0xa1, 0xe1, 0x1e, 0x9d, 0xed, 0x49, 0x42, 0x5e, 0x63, 0xf6, 0x45, 0x6d, 0x2a, 0x08, 0x20, 0xf3, 0x93, 0x18, 0x4e, 0x8c, 0x9f, 0xb5, 0x76, 0x55, 0xc1, 0x14, 0x4a, 0x47, 0xe4, 0x03, 0xaf, 0xc3, 0xb0, 0x1f, 0x1e, 0x6d, 0x09, 0x47, 0x4a, 0x3e, 0xd9, 0x50, 0x03, 0xd5, 0x10, 0xfa, 0x5a, 0x0e, 0xe9, 0x23, 0x06, 0xd6, 0x6e, 0x3b, 0x06, 0x3e, 0x3e, 0xf8, 0x88, 0xce, 0x8e, 0x4b, 0x0a, 0x1b, 0x6e, 0x92, 0xbf, 0x9b, 0x4d, 0x0f, 0x34, 0xb9, 0xc0, 0x99, 0x33, 0x25, 0x7f, 0x91, 0xe8, 0x6e, 0xb0, 0x18, 0x42, 0xd2, 0x69, 0x7f, 0x9c, 0x55, 0x70, 0xff, 0x9d, 0x10, 0x45, 0xab, 0x5c, 0xcc, 0x62, 0xa2, 0xc8, 0xcf, 0xc1, 0x89, 0x48, 0xf6, 0x9f, 0x39, 0x9e, 0x04, 0x80, 0xb4, 0x11, 0x3a, 0x73, 0x5e, 0xcb, 0x28, 0x97, 0x6a, 0x80, 0xc2, 0xde, 0x92, 0x50, 0xb6, 0x11, 0x0b, 0xef, 0xfd, 0x14, 0xb8, 0x03, 0xb0, 0x6c, 0x9e, 0xcd, 0x1e, 0xfe, 0x98, 0x0c, 0x1b, 0x19, 0x4b, 0x1e, 0x9b, 0xb7, 0x5d, 0x69, 0x7f, 0x00, 0xe2, 0xf9 ],
-const [ 0x09, 0xeb, 0xb3, 0x46, 0x3b, 0x01, 0xb2, 0xc4, 0x92, 0xca, 0x2b, 0x1f, 0x6a, 0xc7, 0xe6, 0x14, 0x5e, 0xb4, 0x06, 0x46, 0x53, 0x72, 0x30, 0xd5, 0xb9, 0x45, 0xef, 0x33, 0x0d, 0x3f, 0x57, 0x33, 0xa2, 0xfc, 0xe9, 0x63, 0xa2, 0x90, 0xb7, 0x9c, 0x4f, 0xbe, 0xc9, 0xd7, 0x8f, 0x6b, 0xbe, 0x42, 0xa8, 0x51, 0xb6, 0x94, 0x48, 0xf8, 0x70, 0x9d, 0xc8, 0xe2, 0xb0, 0x21, 0xb1, 0x06, 0xe4, 0xe6, 0x80, 0x81, 0x06, 0x0c, 0xa6, 0x87, 0xc4, 0x9d, 0xd3, 0x9f, 0xdf, 0x65, 0x74, 0x10, 0xd1, 0x04, 0x7b, 0x96, 0xb2, 0x41, 0x5e, 0x5a, 0x5c, 0xa1, 0x62, 0x21, 0xce, 0x39, 0x19, 0xc4, 0xce, 0xc0, 0x29, 0xe0, 0xd3, 0xe8, 0x50, 0xce, 0x21, 0xee, 0xa5, 0xd6, 0x36, 0x70, 0x21, 0x9f, 0x65, 0x80, 0x5d, 0xea, 0xc1, 0xf6, 0x9d, 0x80, 0x3c, 0x0a, 0x0e, 0x69, 0x10, 0x22, 0x4c, 0x5f, 0x5e, 0xe8, 0x27, 0x83, 0x15, 0xa0, 0xa7, 0x4e, 0x16, 0xb9, 0x4e, 0xc9, 0x96, 0xa1, 0x9c, 0x01, 0xc3, 0xde, 0xd9, 0xb5, 0xaa, 0x5b, 0x0e, 0x53, 0x58, 0xff, 0x55, 0x23, 0x3f, 0x84, 0x52, 0xc1, 0xdc, 0x87, 0x02, 0xd0, 0x97, 0xdb, 0xb3, 0xed, 0xeb, 0x23, 0x54, 0xe2, 0xc6, 0xa0, 0xef, 0x1c, 0x33, 0x47, 0x74, 0x60, 0x36, 0x17, 0xb8, 0xb9, 0xf7, 0xa9, 0xbd, 0xb5, 0x23, 0x09, 0x34, 0xd0, 0x90, 0xc4, 0x40, 0x31, 0x20, 0x42, 0x7d, 0x94, 0xe7, 0x56, 0x41, 0x88, 0x90, 0x14, 0x22, 0xda, 0xfc, 0xe3, 0xb8, 0x51, 0x2d, 0xd3, 0xa4, 0x9b, 0x63, 0x30, 0xd0, 0x88, 0x84, 0x57, 0xf9, 0x76, 0xc1, 0xc8, 0x6b, 0x0d, 0x77, 0x7d, 0x0c, 0x2c, 0x53, 0x7a, 0x9c, 0x22, 0xba, 0xa6, 0x3b, 0x22, 0x68, 0xd9, 0x2c, 0xf1, 0x57, 0x36, 0xd8, 0xe2, 0xe2, 0xbb, 0x16, 0x04, 0x2a, 0x16, 0xa9, 0x9a, 0xb9, 0xba, 0x0a, 0xcb, 0x65, 0x33, 0x69, 0x9b, 0x77, 0xb6, 0xee, 0x1a, 0x0d, 0xfd, 0x44, 0xdb, 0xbd, 0x52, 0x58, 0xa8, 0x7b, 0xe9, 0x5e, 0x74, 0xbd, 0x72, 0x16, 0x91, 0xdd, 0xef, 0x4d, 0x24, 0xbe, 0xc3, 0xa6, 0xd5, 0xb2, 0x0c, 0x9a, 0xcb, 0x9b, 0x33, 0xbe, 0xd7, 0x51, 0xc2, 0x44, 0xef, 0x44, 0x75, 0xc5, 0xdf, 0x63, 0x93, 0x3e, 0x3b, 0x3c, 0x7e, 0x58, 0x98, 0x64, 0x89, 0xec, 0xfb, 0x19, 0x0b, 0xc6, 0x92, 0x26, 0xb2, 0xa9, 0xa2, 0x07, 0x19, 0x94, 0xc1, 0x4e, 0x9c, 0x44, 0x45, 0x45, 0x6b, 0xfa, 0xfc, 0xd5, 0xdd, 0x7e, 0x1e, 0xa6, 0x07, 0x64, 0x7f, 0x88, 0x8e, 0x8e, 0x09, 0x12, 0xb9, 0xf2, 0x6a, 0x88, 0xca, 0x9d, 0x0a, 0x02, 0x8f, 0xf8, 0x40, 0xcb, 0x34, 0x4b, 0xc5, 0x08, 0x5b, 0x7f, 0x69, 0x9a, 0x6e, 0x28, 0x04, 0x45, 0x34, 0xc3, 0xb0, 0x11, 0xa3, 0x3b, 0x35, 0xf0, 0xf6, 0xb3, 0xc5, 0xa2, 0xff, 0x7f, 0xea, 0xd6, 0xbd, 0x73, 0xbc, 0x92, 0x31, 0x61, 0x57, 0xd4, 0x6e, 0xdd, 0x8c, 0x7a, 0xf0, 0x43, 0xd7, 0x5f, 0x2e, 0xfc, 0x91, 0xc7, 0x72, 0xfc, 0x67, 0xfd, 0xe9, 0x8f, 0x0b, 0x3a, 0xf6, 0x56, 0x29, 0xc9, 0xcc, 0x8c, 0x9d, 0x69, 0x3c, 0x8e, 0xe3, 0xf3, 0xcb, 0x9b, 0xcf, 0x3c, 0x08, 0xd8, 0x7e, 0x3d, 0x1d, 0x97, 0x8c, 0x71, 0xa3, 0xd8, 0x87, 0x7f, 0xbb, 0x10, 0xa4, 0x19, 0x5a, 0x2a, 0xb1, 0x24, 0xe4, 0xcc, 0x4b, 0x19, 0xfd, 0xdb, 0x51, 0xab, 0x9c, 0x41, 0x99, 0xaa, 0x60, 0xee, 0xe1, 0x27, 0x28, 0x1c, 0x08, 0xd9, 0xde, 0xd8, 0x7e, 0xbf, 0x93, 0xbe, 0xf9, 0x07, 0xd1, 0x04, 0x69, 0x2f, 0x2c, 0xba, 0x2f, 0x6a, 0x1b, 0x4f, 0x89, 0x45, 0x06, 0x58, 0x51, 0x8a, 0xa0, 0x8d, 0xe8, 0x64, 0x77, 0x14, 0x6d, 0xc5, 0xca, 0x03, 0x32, 0x05, 0x9a, 0x20, 0x70, 0xcc, 0x03, 0xeb, 0x39, 0x31, 0xcd, 0xde, 0xaf, 0x23, 0x3f, 0xf3, 0x74, 0x08, 0x33, 0x67, 0x61, 0xa5, 0x70, 0xbd, 0x7b, 0x3e, 0x33, 0x07, 0x22, 0xfe, 0x0f, 0x61, 0x8c, 0x99, 0xf7, 0xbe, 0x72, 0x2f, 0x9a, 0xe7, 0x09, 0x74, 0xef, 0xc0, 0x34, 0x0e, 0x10, 0xcd, 0xf8, 0x3e, 0x4b, 0xf6, 0x30, 0xc3, 0x76, 0x87, 0x82, 0xfb, 0x84, 0x7b, 0x91, 0x4c, 0x56, 0xfa, 0x74, 0xc2, 0xd3, 0x20, 0x68, 0xf9, 0x3b, 0x00, 0xc1, 0x3e, 0xb8, 0xe9, 0x27, 0xf1, 0x37, 0xe8, 0xfe, 0x2d, 0x75, 0x8d, 0x26, 0xac, 0x5d, 0xf2, 0xe5, 0xe4, 0x91, 0xfa, 0x21, 0x76, 0x47, 0xd7, 0xd3, 0xc9, 0x56, 0xcf, 0xb8, 0xf2, 0x90, 0x3f, 0x4a, 0xd8, 0x53, 0xe0, 0xee, 0x95, 0x5b, 0x49, 0x6f, 0x1f, 0xda, 0xb5, 0xab, 0x27, 0xcb, 0x07, 0x8c, 0x41, 0x83, 0x0b, 0x3a, 0x46, 0x89, 0xff, 0x8f, 0xf6, 0xa7, 0x52, 0xcc, 0xe2, 0x41, 0xab, 0x8a, 0x8a, 0xe6, 0x2d, 0xf3, 0xc2, 0x25, 0xfa, 0x31, 0x5a, 0xa2, 0xf5, 0x27, 0xfd, 0x69, 0xcd, 0x5f, 0x5a, 0x81, 0x37, 0x44, 0x82, 0xc5, 0x7a, 0x92, 0x91, 0xef, 0x31, 0x0a, 0x91, 0xf6, 0x4c, 0x6a, 0x9b, 0x9a, 0x59, 0x9c, 0x3f, 0x3c, 0x02, 0x2e, 0x27, 0xf4, 0xd6, 0x02, 0xf6, 0xde, 0x4c, 0x47, 0x76, 0xb4, 0x04, 0xa7, 0xf3, 0xa2, 0x51, 0xc2, 0xe2, 0x55, 0xf5, 0xdc, 0xc7, 0x56, 0x2b, 0xd2, 0x55, 0x96, 0xeb, 0x53, 0xd6, 0x4a, 0x69, 0x4c, 0xcd, 0xf8, 0xdf, 0xa4, 0xda, 0xd2, 0x8c, 0x2a, 0xdf, 0x44, 0xfc, 0xcc, 0x61, 0xc9, 0x8b, 0x09, 0x31, 0x02, 0x25, 0xa9, 0x4b, 0x09, 0x4f, 0xab, 0xfe, 0x03, 0x6b, 0x7f, 0x4d, 0xf4, 0x37, 0x75, 0x96, 0xd8, 0x98, 0x76, 0x71, 0xef, 0x96, 0xf2, 0xdb, 0x58, 0xa7, 0x19, 0x94, 0xe1, 0x30, 0x4e, 0xc5, 0x1e, 0x49, 0xd8, 0xe6, 0xb8, 0xc1, 0xdb, 0xdf, 0x08, 0x61, 0x87, 0x6d, 0xe4, 0x75, 0x90, 0xc8, 0xb9, 0x89, 0xde, 0x83, 0xda, 0x71, 0x85, 0xb3, 0x18, 0x8c, 0xf7, 0x53, 0x93, 0x49, 0x79, 0xe7, 0xd0, 0xe9, 0xd3, 0x60, 0x0b, 0x87, 0x4c, 0x40, 0xce, 0x56, 0xd5, 0xfe, 0xc2, 0x2b, 0x85, 0xac, 0xc6, 0x3b, 0x45, 0xd7, 0x3e, 0x25, 0xcd, 0xaf, 0xad, 0x33, 0xcf, 0x67, 0x87, 0xdc, 0x71, 0xdf, 0x40, 0x8e, 0x01, 0x81, 0xa9, 0xab, 0xe4, 0x69, 0x7c, 0xd2, 0xd0, 0xc8, 0x35, 0x5f, 0x3c, 0x8a, 0x24, 0x35, 0x14, 0x36, 0xc1, 0xbb, 0xb0, 0x16, 0x3f, 0x24, 0x07, 0x99, 0x64, 0xf4, 0x20, 0xf5, 0x97, 0xbf, 0xca, 0x10, 0x3b, 0x34, 0x8d, 0xa1, 0x3b, 0x5b, 0xe0, 0x92, 0xe6, 0x1b, 0x9c, 0xaa, 0xfe, 0xff, 0xb1, 0x68, 0x0b, 0x3a, 0x18, 0x32, 0xf5, 0xe8, 0x09, 0xaf, 0xd2, 0x96, 0x6d, 0x71, 0xfd, 0x05, 0x96, 0xd7, 0x68, 0x2b, 0x2e, 0x31, 0x33, 0x7b, 0x6d, 0x26, 0x7d, 0x66, 0x8f, 0x53, 0x7a, 0x22, 0x86, 0x35, 0xc5, 0xaa, 0xec, 0x49, 0xf8, 0x06, 0x3b, 0x71, 0x7b, 0xcc, 0x40, 0x9a, 0x99, 0xe7, 0xcd, 0x9c, 0xd9, 0x97, 0xaf, 0x61, 0x8b, 0xb9, 0xdf, 0x4a, 0xa1, 0x49, 0xfd, 0xce, 0xc0, 0x25, 0xf9, 0x65, 0x97, 0x13, 0x14, 0xa4, 0x70, 0x06, 0x07, 0xa9, 0x04, 0x9d, 0x81, 0xb9, 0x94, 0xed, 0xd7, 0x28, 0x35, 0x80, 0xf7, 0x79, 0x6c, 0x9d, 0x9f, 0xc7, 0xfa, 0xca, 0xcc, 0x64, 0xf9, 0x90, 0x74, 0xbf, 0x28, 0x7e, 0x77, 0x8b, 0x84, 0x71, 0xd4, 0x1d, 0x18, 0x12, 0x18, 0x16, 0x15, 0x9f, 0x1d, 0x43, 0x25, 0xef, 0xf0, 0xc1, 0xfd, 0xb0, 0x13, 0x65, 0x31, 0xf4, 0xe5, 0x5a, 0x4d, 0xec, 0x5e, 0x0c, 0x21, 0xf2, 0xff, 0x45, 0x5c, 0xcd, 0x09, 0x96, 0x5d, 0x31, 0xee, 0xf9, 0x45, 0x86, 0x05, 0xb4, 0x51, 0xea, 0x81, 0x81, 0x67, 0x79, 0xa4, 0xeb, 0xee, 0xcc, 0x30, 0xfb, 0xe3, 0xbf, 0x1f, 0x14, 0x29, 0x78, 0x93, 0x1c, 0x21, 0xa5, 0x10, 0xdc, 0x7b, 0x04, 0xe9, 0xaa, 0x4c, 0x29, 0xf8, 0x45, 0x60, 0x7c, 0x92, 0x00, 0xd1, 0x81, 0xba, 0x23, 0xd8, 0x5c, 0x95, 0x8e, 0xe4, 0x94, 0x1f, 0x9f, 0xe9, 0x17, 0x1b, 0x56, 0xfb, 0x7e, 0x50, 0xb7, 0x1b, 0x93, 0xf2, 0x70, 0x51, 0x10, 0x5f, 0xbc, 0xfb, 0xaa, 0x0c, 0x87, 0x64, 0x4e, 0xbe, 0xd3, 0x98, 0xab, 0xfd, 0x5a, 0x77, 0xf0, 0xc5, 0x75, 0x09, 0xd7, 0x80, 0x3c, 0x11, 0xe2, 0x31, 0xef, 0xe5, 0xe4, 0xf2, 0x95, 0x7c, 0xc4, 0xa0, 0xe2, 0xc9, 0x7e, 0xd5, 0x5e, 0x47, 0x6a, 0x16, 0xc4, 0xd6, 0xc1, 0x4e, 0xa8, 0xc5, 0x5d, 0x7b, 0x5d, 0x30, 0xc0, 0xa8, 0x16, 0x8c, 0x58, 0x1b, 0x4b, 0x80, 0x02, 0xcf, 0x5f, 0xf6, 0xcc, 0x25, 0x7f, 0x73, 0xff, 0xd6, 0xcd, 0xa3, 0x5d, 0x2c, 0xbe, 0x39, 0xa7, 0x72, 0xc0, 0xf6, 0x62, 0xa9, 0x21, 0x06, 0xdb, 0x7c, 0x2c, 0x93, 0x69, 0x76, 0x95, 0x95, 0xf2, 0x73, 0x17, 0xe7, 0xb0, 0x54, 0x5b, 0xa0, 0x35, 0xf7, 0x1c, 0xa0, 0xad, 0x67, 0x89, 0x69, 0x64, 0x4f, 0xea, 0x31, 0x88, 0xb5, 0x87, 0x35, 0x2f, 0xe4, 0xc5, 0x4f, 0x9b, 0xaa, 0x93, 0xcb, 0xbd, 0xc4, 0x04, 0x77, 0xf9, 0x97, 0x3d, 0xf9, 0x29, 0x21, 0x92, 0x65, 0xe4, 0x2e, 0xec, 0x0f, 0x00, 0xcf, 0x6e, 0x9e, 0x55, 0x08, 0x58, 0x62, 0xc4, 0xc9, 0x2b, 0xe8, 0x79, 0x1f, 0x0e, 0xcb, 0x6c, 0xac, 0x70, 0xcc, 0x2e, 0x55, 0xef, 0x25, 0xe2, 0x3a, 0x78, 0x1b, 0x89, 0xeb, 0xb0, 0xd3, 0x84, 0xd9, 0x93, 0x66, 0x53, 0x0a, 0x5b, 0x37, 0xa3, 0x11, 0xa4, 0x85, 0x88, 0x3e, 0xcd, 0x3c, 0x07, 0x12, 0xa1, 0x11, 0xd7, 0xf5, 0x37, 0xcd, 0x68, 0x2b, 0x16, 0xe9, 0x25, 0x05, 0x9d, 0x5c, 0xf7, 0x54, 0xa3, 0xb1, 0x0a, 0x23, 0x5a, 0x5c, 0xd3, 0xa6, 0x79, 0x4e, 0x52, 0x6d, 0x9a, 0xc7, 0x94, 0xdd, 0xe0, 0x6c, 0x7d, 0xe1, 0xde, 0x99, 0xc4, 0xdd, 0xb4, 0xf8, 0x3f, 0xe4, 0x7b, 0x53, 0x61, 0x2a, 0xe4, 0xa6, 0x01, 0xbc, 0x1b, 0x79, 0x5c, 0x6e, 0xf2, 0x6c, 0x5e, 0x15, 0x3b, 0x14, 0x1d, 0xf7, 0x75, 0x05, 0xa7, 0x80, 0xac, 0x30, 0xfd, 0x37, 0x9a, 0x70, 0x5f, 0xf0, 0x12, 0x5f, 0xca, 0x42, 0x9f, 0x6e, 0xc0, 0x3b, 0x68, 0x35, 0x47, 0x53, 0x56, 0x07, 0x34, 0x9f, 0x79, 0xca, 0xa9, 0x47, 0xa8, 0x05, 0xdd, 0x3a, 0x68, 0x3b, 0x1b, 0x20, 0x10, 0x78, 0x0e, 0x91, 0x2a, 0x29, 0x3b, 0x84, 0x1b, 0x30, 0xcf, 0x0a, 0x07, 0x38, 0x9b, 0x3c, 0xef, 0x46, 0x5d, 0x71, 0x1c, 0x91, 0x41, 0xb5, 0xc1, 0x94, 0xa7, 0x77, 0xdc, 0x61, 0x27, 0x82, 0x5d, 0x38, 0xd2, 0x2f, 0x8a, 0x58, 0xbb, 0xd8, 0xa2, 0x15, 0xb7, 0x8f, 0xc0, 0x2b, 0x60, 0x10, 0x03, 0x52, 0x60, 0xf5, 0xec, 0x13, 0xec, 0x29, 0x07, 0xd9, 0x8e, 0x9f, 0xce, 0x4b, 0x28, 0x44, 0xca, 0xd9, 0x36, 0x32, 0xfb, 0x95, 0x53, 0x26, 0x7a, 0x45, 0xff, 0x34, 0x5d, 0xb6, 0x9f, 0xb9, 0xdb, 0x53, 0xc5, 0x92, 0xb1, 0xf5, 0xb2, 0x8b, 0xc3, 0xfd, 0x19, 0x1a, 0x07, 0xa1, 0x26, 0x4e, 0x9f, 0x83, 0xbf, 0x02, 0x45, 0x88, 0x0a, 0x56, 0xec, 0xe7, 0x2f, 0x60, 0xa4, 0x80, 0x5f, 0x1e, 0xbf, 0x70, 0x15, 0xaf, 0x32, 0xe2, 0x9b, 0xc3, 0x3e, 0x27, 0xd1, 0x51, 0x4f, 0x0a, 0x2a, 0x88, 0x24, 0x5d, 0xf7, 0x07, 0x30, 0xd8, 0xe8, 0x50, 0x40, 0x24, 0xcf, 0x7a, 0x5f, 0x32, 0xa8, 0x27, 0xf6, 0xd1, 0xd7, 0xb6, 0x38, 0x80, 0xb0, 0xba, 0xbd, 0x80, 0x3c, 0xaa, 0x6d, 0x2e, 0x3a, 0xda, 0xa0, 0x90, 0x65, 0xa9, 0x84, 0x2e, 0xf5, 0xfc, 0xbe, 0x23, 0x68, 0xec, 0x54, 0x73, 0x82, 0xbc, 0xca, 0x9f, 0x93, 0x0e, 0x8b, 0x77, 0xf8, 0x56, 0x8b, 0x30, 0xe4, 0x8e, 0x2b, 0xb6, 0x61, 0x2c, 0x5d, 0x43, 0x91, 0x51, 0x08, 0x31, 0x3a, 0x43, 0xae, 0x0d, 0x81, 0x1d, 0x4c, 0xec, 0xf6, 0xc5, 0x81, 0x02, 0xd1, 0x1f, 0xf3, 0x70, 0x7b, 0x80, 0xef, 0x5e, 0x51, 0x66, 0x4f, 0x4a, 0xa4, 0x66, 0xa1, 0x9f, 0x04, 0x65, 0x85, 0x8a, 0xbe, 0x0b, 0x57, 0x09, 0xa3, 0x75, 0x0e, 0x45, 0x0b, 0x2a, 0x64, 0x21, 0x1a, 0x51, 0x38, 0x13, 0x42, 0x21, 0x30, 0x33, 0x09, 0x98, 0xa2, 0x91, 0x0d, 0x70, 0xb5, 0xcc, 0x45, 0x4f, 0xc3, 0xe0, 0x89, 0x3e, 0x02, 0x40, 0x55, 0x5c, 0x64, 0x25, 0xca, 0xd3, 0xbb, 0x25, 0xf5, 0x0c, 0x21, 0x07, 0x54, 0x1f, 0x97, 0xd6, 0x96, 0x8e, 0xec, 0x34, 0xa3, 0x32, 0xe1, 0xf1, 0xdc, 0x75, 0x8a, 0xdc, 0xa4, 0xc2, 0xf7, 0xd9, 0x1f, 0x3a, 0x14, 0x34, 0x39, 0xa9, 0xce, 0x35, 0xeb, 0xb8, 0x77, 0xf5, 0xba, 0x64, 0x6c, 0x6f, 0x80, 0xae, 0xf5, 0xda, 0x6e, 0x94, 0x6c, 0x37, 0x52, 0x41, 0xa2, 0x26, 0x16, 0x81, 0x7e, 0xfd, 0x89, 0x77, 0xe7, 0x1b, 0x63, 0x92, 0xe4, 0x7a, 0x83, 0xbd, 0x02, 0x84, 0x7a, 0xd6, 0xf7, 0x28, 0x4d, 0x62, 0x84, 0x2c, 0x77, 0x7f, 0xa0, 0xc5, 0x2e, 0x19, 0xd2, 0x65, 0xe7, 0x61, 0xdf, 0xd4, 0x1c, 0x7b, 0xa5, 0x82, 0x4d, 0x77, 0x47, 0x1c, 0x45, 0x83, 0x8a, 0x5d, 0x9e, 0x5f, 0x7f, 0x27, 0x87, 0x11, 0x63, 0xd2, 0xc5, 0xd9, 0xc3, 0xc4, 0xf8, 0x67, 0xe3, 0x41, 0x20, 0x4c, 0x61, 0x85, 0x5f, 0xaf, 0x16, 0x10, 0x01, 0x41, 0x3d, 0x42, 0xb9, 0x73, 0xd7, 0x27, 0x2d, 0xe6, 0x4e, 0x94, 0xb5, 0x22, 0x58, 0x73, 0x60, 0x8c, 0x1e, 0x5b, 0x39, 0x92, 0x9e, 0x64, 0xc8, 0x29, 0x4d, 0x39, 0xdb, 0x79, 0x01, 0x6e, 0x86, 0xd6, 0x0f, 0x14, 0x68, 0xf3, 0xb0, 0x8b, 0x30, 0x52, 0xaa, 0x98, 0x60, 0xff, 0x2c, 0xb7, 0x51, 0x7e, 0xf9, 0xb3, 0x77, 0x02, 0xc8, 0x73, 0xe7, 0xe0, 0xeb, 0x17, 0x16, 0x42, 0x30, 0x44, 0xe4, 0x20, 0x05, 0xbb, 0xd9, 0x6c, 0xdf, 0x31, 0xae, 0x8d, 0xdc, 0x5b, 0x0f, 0x0f, 0xa7, 0x48, 0x9f, 0x99, 0x9c, 0xf3, 0x3d, 0x1f, 0x2c, 0x19, 0x86, 0x58, 0x83, 0x48, 0x9a, 0x73, 0x69, 0x39, 0x23, 0x06, 0x66, 0x5f, 0x94, 0x47, 0x2a, 0xc0, 0xaf, 0x7e, 0x2b, 0x04, 0x4a, 0xba, 0x90, 0xcb, 0x52, 0xc3, 0x4e, 0x44, 0x10, 0x51, 0x91, 0xfc, 0xab, 0x7b, 0x5d, 0xf3, 0xef, 0x72, 0x75, 0xf5, 0x4c, 0x6f, 0x7c, 0x27, 0x22, 0xea, 0x5a, 0xe1, 0x3c, 0x0d, 0xe1, 0xbb, 0x9a, 0x68, 0xb1, 0xeb, 0x73, 0xe6, 0x58, 0xce, 0x7a, 0x00, 0xbe, 0xc4, 0x61, 0x30, 0xc1, 0x41, 0x9b, 0xa9, 0x1c, 0x21, 0x67, 0x45, 0x8d, 0x3c, 0x0a, 0xbf, 0x37, 0x3b, 0x5b, 0x22, 0x45, 0xaa, 0x85, 0x81, 0xd0, 0x4e, 0x09, 0xe9, 0x02, 0xb8, 0x02, 0x94, 0x7c, 0x1a, 0xad, 0x5f, 0xf6, 0x5a, 0x28, 0x7e, 0x25, 0x65, 0x7a, 0x6f, 0xe2, 0xc6, 0xd4, 0x2c, 0x88, 0x77, 0x17, 0xa5, 0x9e, 0xf6, 0x95, 0x6d, 0xb6, 0x9c, 0x1c, 0xb4, 0x94, 0x2b, 0x31, 0x75, 0x93, 0xa6, 0x99, 0xf0, 0x45, 0x65, 0x1e, 0x5b, 0x5a, 0x68, 0x8f, 0xd5, 0xc3, 0xec, 0x09, 0x9b, 0x17, 0x3c, 0x75, 0x7e, 0x35, 0xca, 0x52, 0x95, 0x2b, 0x7e, 0xb5, 0x2f, 0x56, 0x4e, 0x8d, 0x0b, 0xcb, 0x0f, 0x2c, 0xcc, 0xf6, 0x8a, 0x03, 0xa7, 0x81, 0xd3, 0xad, 0x5f, 0x77, 0xd6, 0x30, 0x73, 0xaa, 0x33, 0x7f, 0x96, 0x52, 0x4c, 0x43, 0x5f, 0xf6, 0x9b, 0xda, 0x42, 0x90, 0x4a, 0xa0, 0xbf, 0xec, 0xfd, 0x6e, 0xd9, 0x51, 0xf3, 0x61, 0xca, 0x63, 0x4d, 0xdd, 0xf5, 0x48, 0xad, 0xd1, 0x1c, 0x0a, 0x03, 0x3c, 0xd3, 0x3c, 0xa4, 0xf0, 0x34, 0xe1, 0x9d, 0x96, 0xd5, 0x89, 0x46, 0xf2, 0xf7, 0xbd, 0x1a, 0x68, 0x00, 0x9d, 0xc5, 0xbf, 0x2c, 0xc8, 0x7f, 0x26, 0x7f, 0x7c, 0x99, 0x74, 0xfe, 0xff, 0x55, 0xb4, 0x1e, 0x3d, 0xfb, 0xe1, 0x7d, 0xb2, 0x29, 0xee, 0xd0, 0x8a, 0x6b, 0x09, 0x1c, 0x07, 0x0b, 0x21, 0x2a, 0x24, 0x2b, 0xa6, 0x35, 0x78, 0x10, 0x90, 0xe5, 0x5c, 0xc1, 0xa2, 0x81, 0x50, 0xd1, 0xf0, 0x60, 0x9b ],
-const [ 0x46, 0xcb, 0x5d, 0x39, 0x1e, 0x75, 0x11, 0x46, 0xba, 0x97, 0x00, 0xb4, 0xfd, 0x5f, 0x36, 0xae, 0x7d, 0xda, 0x17, 0x58, 0xd8, 0xfe, 0x50, 0xfb, 0x47, 0xed, 0x0d, 0x62, 0x75, 0x78, 0x6d, 0x84, 0x91, 0xe2, 0x32, 0x63, 0xa1, 0xe7, 0xbe, 0x33, 0x1a, 0xfd, 0x3b, 0xbf, 0xae, 0xda, 0x19, 0x09, 0x66, 0x36, 0xbd, 0x30, 0xf0, 0xd2, 0x77, 0x97, 0x3a, 0xb9, 0xb5, 0x44, 0x40, 0xc6, 0x77, 0x86, 0x22, 0x66, 0x03, 0xdb, 0x79, 0x9f, 0xda, 0x10, 0xeb, 0x52, 0xea, 0xaa, 0xfd, 0xbd, 0x05, 0x85, 0x29, 0x43, 0x92, 0xbb, 0x31, 0x70, 0x83, 0xc7, 0xb2, 0x38, 0x87, 0xeb, 0xfc, 0x7f, 0x80, 0xcf, 0x21, 0xdf, 0x37, 0x6a, 0x4c, 0xa5, 0x4e, 0x25, 0x54, 0x1c, 0x77, 0x3e, 0x91, 0x0f, 0xe4, 0x6b, 0xef, 0x89, 0xff, 0xc1, 0x40, 0xdf, 0x5a, 0xd3, 0xd7, 0xf0, 0xe9, 0x1e, 0x52, 0xac, 0x6f, 0xa5, 0xb7, 0xd3, 0x36, 0xd8, 0xc3, 0xff, 0x03, 0xba, 0x7e, 0xe5, 0x49, 0x43, 0x13, 0xd8, 0x9d, 0x03, 0xdf, 0x8f, 0x6a, 0x09, 0xc8, 0x27, 0xe6, 0x03, 0xd0, 0x6b, 0x44, 0xa7, 0xe9, 0x54, 0x2c, 0x51, 0x0c, 0xcc, 0x68, 0xed, 0x85, 0xb7, 0xe0, 0x17, 0x91, 0x34, 0xc8, 0x81, 0x2a, 0x20, 0x18, 0x95, 0x22, 0xdd, 0x3c, 0x5c, 0x6f, 0x51, 0x0d, 0x9f, 0xc6, 0x31, 0x01, 0x4c, 0x6b, 0x7f, 0x9e, 0x1a, 0x47, 0x51, 0x35, 0x70, 0x3b, 0xd5, 0xcc, 0x84, 0xb4, 0x92, 0x5c, 0xc0, 0x7f, 0xf0, 0x3d, 0x69, 0xdf, 0xfb, 0xde, 0x82, 0xdd, 0x64, 0xb9, 0xee, 0xe0, 0xc8, 0x86, 0xd6, 0x7d, 0x35, 0xaf, 0x4a, 0x90, 0xeb, 0x05, 0x2b, 0x8c, 0x5f, 0xb1, 0x48, 0x0f, 0x86, 0x6d, 0xc7, 0xba, 0x4f, 0xf4, 0xc7, 0x3f, 0x72, 0xb6, 0x43, 0xbb, 0x68, 0xd1, 0x39, 0x47, 0xba, 0x3d, 0x0c, 0xc9, 0x7f, 0x46, 0x28, 0x11, 0x20, 0x40, 0xe4, 0x21, 0x5f, 0x76, 0xac, 0xcb, 0x98, 0x63, 0x5f, 0x82, 0x46, 0x25, 0xf6, 0x6a, 0xc8, 0x2e, 0x67, 0xb1, 0x66, 0x3d, 0xc8, 0x22, 0x8f, 0x8c, 0xb8, 0xf7, 0x64, 0x4b, 0xfb, 0xef, 0x7b, 0x4e, 0x64, 0xa1, 0xdc, 0x03, 0xf8, 0x10, 0x50, 0xa6, 0x50, 0x7f, 0xdc, 0xb8, 0x3f, 0x87, 0x88, 0xad, 0xb5, 0x66, 0x64, 0xe5, 0xe3, 0x9a, 0xcd, 0xdd, 0xa0, 0xaf, 0xed, 0xa7, 0x0c, 0x55, 0x81, 0x97, 0x73, 0xb5, 0xdf, 0x40, 0x74, 0x05, 0x37, 0x9e, 0x62, 0x5a, 0x19, 0x95, 0xea, 0xbe, 0x37, 0x9a, 0xf6, 0x83, 0x6d, 0xb1, 0xd2, 0xd7, 0xfe, 0x97, 0x8d, 0x98, 0x21, 0x40, 0xa3, 0x69, 0xbc, 0x84, 0xd8, 0x05, 0x6f, 0x15, 0x67, 0xd3, 0xd4, 0xb4, 0x5c, 0xbb, 0x05, 0xa4, 0x3f, 0x39, 0x5f, 0x5f, 0xf2, 0xaf, 0x86, 0x89, 0xdc, 0x00, 0xa9, 0x22, 0x48, 0x5a, 0x08, 0xff, 0x07, 0x53, 0xb3, 0x7b, 0x5d, 0x38, 0x94, 0x6a, 0x1b, 0xa1, 0xaf, 0x4e, 0x08, 0x49, 0xa9, 0xce, 0x85, 0x1d, 0x87, 0x63, 0x71, 0x93, 0xb9, 0x55, 0x4b, 0x3d, 0x57, 0xe6, 0x96, 0x9e, 0xaa, 0xcc, 0x82, 0x3c, 0xee, 0xe5, 0xc8, 0xf6, 0x56, 0x27, 0xd6, 0x98, 0x51, 0xd6, 0x2c, 0xad, 0x0c, 0xf9, 0x06, 0x95, 0x38, 0x0e, 0x3b, 0xd7, 0x0d, 0xfd, 0x65, 0xb8, 0x8f, 0x4b, 0x42, 0x0c, 0x10, 0x90, 0x5a, 0x4c, 0xf6, 0x2b, 0xe2, 0xe9, 0xbe, 0x34, 0xe1, 0xe0, 0x41, 0xb2, 0x91, 0x8f, 0x36, 0x0e, 0x08, 0xc6, 0xf9, 0xc8, 0x17, 0x22, 0x8b, 0x69, 0x73, 0x96, 0xd9, 0xb9, 0x12, 0x4b, 0x41, 0x31, 0xd8, 0xaa, 0x52, 0xb3, 0x73, 0xb7, 0xd3, 0x79, 0x84, 0xa0, 0x07, 0x4c, 0xff, 0x95, 0x30, 0xf6, 0xd4, 0xdb, 0x52, 0xf9, 0xcf, 0x1c, 0x39, 0x81, 0xbc, 0x02, 0xbd, 0x98, 0xd0, 0x04, 0x45, 0x99, 0x44, 0x7f, 0x8a, 0xe7, 0x43, 0x08, 0x9e, 0xde, 0x06, 0x01, 0x2c, 0x0a, 0x3e, 0x6a, 0x01, 0x97, 0xb2, 0xfa, 0xcb, 0x09, 0x29, 0x6e, 0x21, 0x2e, 0x8a, 0x22, 0xc4, 0x50, 0x42, 0xde, 0x25, 0xae, 0xe6, 0xf2, 0x27, 0x2e, 0x19, 0x85, 0x25, 0x4c, 0xb1, 0x2a, 0x37, 0x56, 0x15, 0xb4, 0xb1, 0xdb, 0xe9, 0x4c, 0xed, 0x61, 0xee, 0xc0, 0x4b, 0x56, 0x23, 0x1e, 0x75, 0x49, 0x31, 0x82, 0xe8, 0x5a, 0x05, 0x2c, 0xb0, 0xef, 0xbf, 0xd5, 0x72, 0xa9, 0xcb, 0x43, 0xb0, 0x97, 0x4d, 0x1c, 0x49, 0xa9, 0xc3, 0xf8, 0x3f, 0x67, 0xe6, 0xb9, 0xbd, 0xe2, 0xd0, 0x1f, 0x59, 0xeb, 0x64, 0x97, 0x96, 0x84, 0xeb, 0x54, 0xad, 0x94, 0xfb, 0xa1, 0x8d, 0xdf, 0x9d, 0x76, 0x20, 0x34, 0xae, 0x49, 0xd0, 0xe8, 0x86, 0x26, 0x4a, 0x84, 0xd8, 0x02, 0x81, 0xbb, 0xd9, 0x4d, 0xf6, 0x9f, 0xa5, 0xc6, 0x38, 0x14, 0xde, 0x93, 0xa6, 0x84, 0x96, 0x91, 0x7c, 0xd4, 0x6f, 0xe9, 0x0e, 0x97, 0x00, 0xe4, 0x4e, 0x82, 0x7b, 0x00, 0x94, 0x20, 0x8d, 0x43, 0x9f, 0xc7, 0x86, 0xcf, 0xd7, 0xcb, 0xba, 0xb7, 0xd4, 0xf1, 0x27, 0x11, 0x24, 0x27, 0x58, 0x4c, 0x49, 0x72, 0x89, 0xc4, 0x02, 0x27, 0x0b, 0x94, 0xcc, 0x5e, 0xea, 0xab, 0xa7, 0xa4, 0xce, 0x23, 0x1d, 0xf0, 0x1f, 0xce, 0x81, 0xd9, 0x6c, 0x11, 0x75, 0x05, 0x0e, 0xf5, 0xae, 0xe5, 0x08, 0x7b, 0xfc, 0x9f, 0x32, 0x30, 0x84, 0x4c, 0x97, 0x02, 0x50, 0x64, 0x1b, 0x52, 0x0b, 0x76, 0x61, 0x4a, 0x05, 0x1d, 0xeb, 0x71, 0x7e, 0x2f, 0x83, 0x7c, 0x20, 0x37, 0xda, 0x68, 0xcd, 0x26, 0x70, 0xc5, 0x9b, 0x45, 0xb3, 0x55, 0x1d, 0x6e, 0x6b, 0xd5, 0xe5, 0x7c, 0x55, 0x1b, 0x46, 0x00, 0x0e, 0x61, 0x5f, 0x36, 0x33, 0xe1, 0x54, 0x37, 0xc7, 0xa2, 0xdf, 0x6f, 0xd5, 0x91, 0x08, 0x52, 0x56, 0xd3, 0x30, 0x4b, 0x54, 0x5a, 0x54, 0xf5, 0x50, 0xb6, 0x90, 0x8e, 0xe2, 0x2e, 0xe2, 0xa9, 0x9f, 0x10, 0x31, 0x22, 0x3f, 0x45, 0x8e, 0x57, 0x00, 0x28, 0xb9, 0x95, 0x45, 0x99, 0xe7, 0xd1, 0x83, 0x4c, 0xc2, 0x99, 0x5d, 0x67, 0xb2, 0x4a, 0x0e, 0x4d, 0x5b, 0x82, 0x08, 0xb4, 0x67, 0xd8, 0xda, 0xfe, 0x85, 0xcb, 0x57, 0xc6, 0xb1, 0xf9, 0xf5, 0xb9, 0xb7, 0x92, 0x73, 0xa7, 0xf2, 0x0b, 0xbf, 0xd9, 0x5a, 0x17, 0x16, 0xa6, 0xbe, 0xd3, 0x6d, 0x41, 0x4d, 0x40, 0x10, 0xd5, 0x5b, 0xf7, 0x89, 0xd4, 0x62, 0x18, 0xc3, 0x8c, 0x47, 0x84, 0x6f, 0xfb, 0xdf, 0x4c, 0xa7, 0xe4, 0xb2, 0x69, 0xd1, 0x22, 0xff, 0xad, 0xc7, 0x3d, 0x00, 0xf9, 0x35, 0x3b, 0x6e, 0xb1, 0x42, 0xb8, 0x48, 0x6d, 0x72, 0x39, 0xd1, 0xf1, 0xca, 0xbe, 0xd8, 0x60, 0x36, 0x96, 0x3b, 0xac, 0x29, 0x77, 0xae, 0x51, 0x83, 0xce, 0xb9, 0x43, 0xb7, 0x54, 0x00, 0x24, 0x2d, 0xe2, 0xc7, 0xbb, 0xe5, 0x86, 0xb5, 0xa2, 0x5e, 0xd6, 0xd8, 0x3e, 0xb6, 0x84, 0xea, 0xf4, 0x12, 0x33, 0xd3, 0x9a, 0x40, 0x89, 0x6e, 0x2c, 0x9b, 0x86, 0x90, 0xc1, 0x2f, 0x14, 0x47, 0xbd, 0x1e, 0xdf, 0x5f, 0x47, 0x43, 0x66, 0x2b, 0xfe, 0x14, 0x53, 0x82, 0xe7, 0xcd, 0x07, 0x07, 0xaa, 0xcb, 0x7a, 0xad, 0xff, 0x35, 0x42, 0x7b, 0x63, 0xe2, 0xf1, 0x8d, 0x0f, 0x77, 0xa4, 0x5c, 0x2a, 0xd0, 0xd9, 0x3f, 0x3e, 0xa2, 0x81, 0x31, 0xe9, 0x5e, 0x57, 0xd4, 0xd5, 0x58, 0x6f, 0xb6, 0xe9, 0x28, 0x12, 0xd3, 0xc1, 0x50, 0xc9, 0x5c, 0x5c, 0x20, 0xb8, 0xb7, 0x15, 0xd7, 0x2d, 0xc7, 0xd5, 0x0b, 0x79, 0x6d, 0x86, 0x4b, 0xff, 0x4f, 0xcb, 0x02, 0x8a, 0xd8, 0xee, 0x9e, 0xe4, 0x80, 0x1a, 0xf2, 0xa4, 0x4d, 0xca, 0xd9, 0x47, 0x99, 0x81, 0x1d, 0x82, 0x17, 0xbc, 0x97, 0xd7, 0x11, 0x24, 0x97, 0x67, 0xf3, 0x09, 0x86, 0x07, 0x0d, 0x0c, 0xc9, 0x95, 0x95, 0x1b, 0xe9, 0x8d, 0xeb, 0xa3, 0xf1, 0xd7, 0x21, 0x00, 0x18, 0xe3, 0xbb, 0x39, 0xa0, 0xf8, 0xb3, 0xea, 0xfe, 0xc9, 0xc1, 0x81, 0x3b, 0x4a, 0xd9, 0xad, 0x9a, 0xc1, 0xf4, 0x14, 0x7b, 0x20, 0x13, 0x45, 0x7f, 0x92, 0x81, 0xed, 0xed, 0x54, 0x59, 0x4d, 0x55, 0xc6, 0x49, 0xeb, 0x73, 0xc2, 0x95, 0x88, 0x55, 0x2c, 0x5f, 0x53, 0xc0, 0xca, 0x25, 0x5c, 0xd1, 0x56, 0x8b, 0x4b, 0xe0, 0xd2, 0x5b, 0x52, 0xa9, 0x1c, 0xca, 0x60, 0xae, 0xc2, 0xfd, 0x98, 0xd7, 0x17, 0xcb, 0x01, 0x5c, 0x87, 0xc5, 0x7f, 0xe4, 0x27, 0x73, 0x02, 0xef, 0x90, 0xe1, 0xfd, 0x71, 0xee, 0x5a, 0x1a, 0xbf, 0x54, 0x74, 0x2c, 0xaf, 0x53, 0x4d, 0x64, 0xfb, 0xca, 0x13, 0xc9, 0xe7, 0xff, 0xca, 0xe2, 0x24, 0xef, 0x49, 0xb5, 0xf3, 0xe3, 0x86, 0xf6, 0x8e, 0x44, 0x14, 0x78, 0xc3, 0xb0, 0xea, 0xe7, 0xe2, 0x4d, 0x66, 0xb9, 0xd9, 0x5e, 0x92, 0x62, 0x9e, 0x14, 0xa5, 0xc7, 0xcd, 0xa6, 0xcd, 0xf6, 0x93, 0xa4, 0x2b, 0x14, 0xca, 0x88, 0x1f, 0x96, 0x65, 0x8e, 0xc7, 0xb5, 0x0f, 0xc5, 0xc2, 0x1b, 0x0f, 0x66, 0x3a, 0xe3, 0x6f, 0x65, 0x21, 0xc0, 0x5d, 0x47, 0xba, 0x7c, 0xd1, 0x33, 0x5c, 0xa5, 0x70, 0x4b, 0x73, 0x83, 0xb1, 0x3d, 0xc7, 0x4c, 0x3e, 0x14, 0x01, 0x9b, 0x9d, 0x55, 0x6b, 0x1f, 0x0f, 0x47, 0xf7, 0x90, 0xb8, 0x92, 0x83, 0xe8, 0x01, 0x0b, 0x5b, 0xcf, 0x3b, 0xcf, 0xff, 0x57, 0x85, 0x8f, 0x27, 0xe9, 0xef, 0x2a, 0x05, 0x80, 0xdf, 0x81, 0xca, 0x14, 0xb4, 0x87, 0x6b, 0x5a, 0xaa, 0x97, 0xa5, 0xaa, 0xfd, 0x0b, 0x3f, 0x40, 0x52, 0x0a, 0x8f, 0xa8, 0x52, 0xa1, 0x3f, 0x74, 0x98, 0x15, 0x51, 0x30, 0xcd, 0x78, 0x61, 0x98, 0x11, 0x7b, 0x2a, 0x08, 0x9d, 0x83, 0x4c, 0x33, 0xa7, 0xff, 0x4d, 0x18, 0x86, 0xf8, 0xdd, 0x32, 0x17, 0xe9, 0x5e, 0xef, 0x5f, 0xd2, 0xa3, 0x64, 0x72, 0x88, 0xf8, 0x3f, 0x93, 0x4f, 0x63, 0xfd, 0x9c, 0xaa, 0x2a, 0x5d, 0xa1, 0x72, 0x95, 0x14, 0xd0, 0x26, 0xf5, 0xc2, 0x9b, 0x82, 0xe5, 0x25, 0x1a, 0x53, 0xd0, 0x8c, 0xaa, 0x89, 0xb4, 0x8f, 0xdb, 0x8e, 0x25, 0xfe, 0x89, 0xd6, 0x94, 0x17, 0x48, 0xb8, 0xd1, 0xfc, 0x06, 0x7c, 0xcf, 0x64, 0xeb, 0xb5, 0xa8, 0x90, 0x84, 0xd1, 0xe0, 0x81, 0x21, 0xee, 0xee, 0x68, 0x7b, 0xef, 0xf8, 0x5e, 0x9a, 0xcf, 0xdf, 0x55, 0xf6, 0x36, 0x7b, 0x4e, 0xdd, 0x4a, 0x28, 0xcd, 0x14, 0xc8, 0x81, 0x8a, 0xc1, 0x53, 0x6b, 0x6a, 0x88, 0x0c, 0x56, 0xad, 0xf5, 0x62, 0xbf, 0x69, 0x1a, 0x2c, 0xf9, 0x37, 0x79, 0xf5, 0x2e, 0x2c, 0x24, 0x96, 0xa1, 0x0b, 0x22, 0x0b, 0x35, 0xb8, 0x15, 0x7f, 0x33, 0xf0, 0x1a, 0xa9, 0x48, 0x38, 0xf1, 0x5b, 0xcd, 0x13, 0x5e, 0x58, 0x4b, 0x78, 0xce, 0x67, 0x3f, 0x83, 0x3e, 0xa5, 0x1a, 0x6b, 0x59, 0x1f, 0x8c, 0xb4, 0xe0, 0xa0, 0x02, 0xa6, 0x4f, 0xc8, 0x6e, 0xfd, 0xbe, 0x5e, 0x46, 0xe2, 0x05, 0xe7, 0xcf, 0x1a, 0x23, 0x78, 0x9b, 0x7e, 0xe1, 0xc8, 0x50, 0xab, 0xb2, 0x89, 0xac, 0xfa, 0xde, 0xf9, 0xc6, 0xb3, 0xdf, 0xb4, 0x97, 0x7d, 0x0b, 0xcc, 0xb8, 0x19, 0x74, 0x1b, 0x6d, 0x50, 0x0d, 0xd8, 0xe3, 0x2a, 0x0e, 0x69, 0xb6, 0x61, 0x99, 0x78, 0xb6, 0x15, 0x9d, 0x49, 0xeb, 0xc1, 0xfb, 0x4b, 0xd7, 0x6e, 0xe7, 0xed, 0xfa, 0x27, 0x91, 0xb2, 0x9c, 0xac, 0x05, 0x88, 0xc6, 0x6b, 0x50, 0x56, 0x92, 0xab, 0xe5, 0xd4, 0xa4, 0x0b, 0x3f, 0x9f, 0xf9, 0x2b, 0xc7, 0x8d, 0xe0, 0xa9, 0xf7, 0x3d, 0x45, 0x4f, 0xc0, 0xf3, 0x35, 0x8a, 0x29, 0xa3, 0x9f, 0x1e, 0x3a, 0x4c, 0x58, 0x19, 0x18, 0x88, 0x62, 0x05, 0x71, 0x60, 0x6e, 0x62, 0x1a, 0x64, 0x9f, 0x54, 0xf7, 0xfc, 0x91, 0x98, 0x1c, 0xf9, 0x9a, 0xbc, 0x31, 0x6f, 0x50, 0x90, 0x1b, 0xc7, 0x4b, 0xd8, 0xd9, 0x10, 0x2c, 0x43, 0xab, 0x96, 0xdd, 0xa1, 0x7a, 0xb6, 0x1b, 0x50, 0x74, 0xf0, 0x32, 0xf7, 0xf7, 0x3e, 0x08, 0x77, 0xb0, 0xa4, 0x5d, 0x1f, 0x04, 0x09, 0x51, 0x20, 0xae, 0x45, 0x27, 0x40, 0xaa, 0x7b, 0x48, 0xd2, 0x52, 0xa9, 0x8b, 0xe5, 0xc8, 0x7d, 0xb3, 0xbc, 0x93, 0x6b, 0x3a, 0x7e, 0x8d, 0xfc, 0x4d, 0x2f, 0xfc, 0x69, 0x17, 0xdf, 0xff, 0x68, 0x42, 0x21, 0x2c, 0x46, 0xbb, 0xbf, 0x77, 0x36, 0xb6, 0xac, 0x55, 0xe9, 0xf3, 0x3a, 0x22, 0x5e, 0x3f, 0x8d, 0xc0, 0xfc, 0x3d, 0x50, 0x82, 0xde, 0x66, 0xa6, 0x48, 0x6e, 0x4f, 0x64, 0xeb, 0x35, 0x2a, 0x7d, 0xdb, 0xf1, 0x90, 0xbe, 0x06, 0xe8, 0x7e, 0xbb, 0xfc, 0x7d, 0x9d, 0x09, 0x51, 0x01, 0xc6, 0xad, 0x43, 0xcb, 0xc5, 0xd5, 0x9d, 0x8b, 0x5d, 0xc6, 0xdc, 0xdb, 0x8d, 0x16, 0x8f, 0x17, 0x12, 0x1b, 0x04, 0x6f, 0x2d, 0xa3, 0x20, 0x3a, 0xa6, 0xe5, 0x8f, 0x8d, 0x11, 0xb8, 0x1e, 0x0d, 0x50, 0x03, 0x64, 0x01, 0x59, 0x75, 0xa8, 0xac, 0x3a, 0x76, 0xff, 0xd9, 0x5a, 0x5d, 0xb5, 0xb7, 0x01, 0xe3, 0xee, 0xe7, 0x1a, 0xd7, 0x8d, 0xd4, 0x38, 0x14, 0x55, 0x43, 0xd8, 0xb1, 0x4e, 0x2b, 0xe6, 0x77, 0x6b, 0xc6, 0x82, 0x98, 0x69, 0xe8, 0x03, 0x9d, 0xfa, 0x90, 0x3c, 0xa1, 0x23, 0xbc, 0xff, 0xbd, 0xe3, 0x82, 0xe0, 0xc3, 0x15, 0x5d, 0x3b, 0x2f, 0x97, 0xc5, 0x79, 0x5a, 0xac, 0x02, 0x8e, 0xf1, 0x9f, 0x41, 0xc6, 0xa6, 0xaa, 0xe8, 0xc2, 0x25, 0x15, 0x27, 0xbd, 0x4a, 0xa2, 0xcf, 0x15, 0x91, 0x29, 0x68, 0x06, 0xce, 0x80, 0x7e, 0xb8, 0x1e, 0x9d, 0x3b, 0x7c, 0x1d, 0xff, 0x3b, 0x52, 0x59, 0x4a, 0x9b, 0xb0, 0x07, 0x31, 0x53, 0x7e, 0xf5, 0x98, 0xc6, 0x65, 0xc0, 0xfa, 0x98, 0x49, 0x47, 0x09, 0xc0, 0x14, 0x5f, 0x95, 0xde, 0xb6, 0xc9, 0xaf, 0xce, 0x6a, 0x61, 0x0e, 0x7d, 0x3a, 0x97, 0xb2, 0xfb, 0xc5, 0x23, 0xc6, 0xd2, 0x40, 0xf5, 0xcb, 0x97, 0xbb, 0x6b, 0xf3, 0xbe, 0xa5, 0xc7, 0xcb, 0xb2, 0x93, 0xe0, 0x1d, 0x26, 0x3d, 0x18, 0x15, 0xa5, 0xc9, 0x8d, 0xa2, 0x71, 0x4d, 0x94, 0x1f, 0x8a, 0x8f, 0x63, 0x33, 0x0d, 0x0f, 0x0d, 0xf6, 0xbf, 0x47, 0xb4, 0x55, 0xea, 0x31, 0xf9, 0xb7, 0x68, 0x0a, 0xb8, 0xe1, 0xfd, 0x56, 0xf3, 0x16, 0xea, 0x24, 0x0b, 0x83, 0xbe, 0x93, 0x36, 0xdb, 0x70, 0x95, 0x2d, 0x3f, 0xab, 0xf3, 0x25, 0x60, 0x69, 0x91, 0x01, 0xe7, 0xc3, 0xf4, 0xc6, 0x15, 0x07, 0x01, 0x4f, 0xa6, 0x0c, 0x07, 0x42, 0xfc, 0xc2, 0x00, 0x42, 0x79, 0x0d, 0x14, 0x66, 0x2d, 0xd4, 0x5f, 0xea, 0xb1, 0x55, 0xf4, 0x25, 0x52, 0xbb, 0x22, 0xbb, 0x72, 0xf2, 0xf6, 0x14, 0x2c, 0xba, 0x00, 0x0d, 0x37, 0xfa, 0x5a, 0xed, 0x0d, 0x57, 0xe7, 0x9a, 0x4c, 0x06, 0xd9, 0x0d, 0x5c, 0xde, 0x76, 0x03, 0x52, 0xb2, 0x1b, 0xf5, 0x14, 0xdd, 0x81, 0x4b, 0xbe, 0x1e, 0x3f, 0xcd, 0x45, 0xa7, 0x90, 0x5a, 0x5b, 0x70, 0x57, 0xdc, 0x92, 0xd1, 0x60, 0x7b, 0xc3, 0x50, 0xe9, 0x11, 0xb1, 0xb8, 0x61, 0xde, 0xea, 0x6b, 0x6f, 0x7e, 0xee, 0xf8, 0x36, 0x17, 0x93, 0xf0, 0xd8, 0xd7, 0xa8, 0xf6, 0x38, 0x9e, 0xd9, 0x16, 0x05, 0xf7, 0xd2, 0x58, 0xf4, 0x4d, 0xa8, 0x94, 0x4c, 0x5c, 0x74, 0x87, 0xa8, 0xe5, 0x41, 0x27, 0xf8, 0xa6, 0x28, 0x34, 0xca, 0x89, 0xb9, 0x10, 0xc8, 0x1c, 0x9d, 0xd0, 0x81, 0x41, 0x7a, 0x93, 0x6c, 0x27, 0x17, 0x12, 0x29, 0x78, 0xc1, 0x79, 0x0b, 0xd4, 0xed, 0x76, 0xd4, 0x7f, 0x1e, 0x8f, 0xbf, 0x56, 0x09, 0xb8, 0xc4, 0x08, 0xf7, 0x25, 0x17, 0x82, 0x6c, 0x5d, 0xf2, 0xab, 0x06, 0x90, 0x94, 0x52, 0xa7, 0x2a, 0x8a, 0x64, 0xd7, 0xa8, 0x2d, 0x63, 0x63, 0xaa, 0x6c, 0x13, 0x4a, 0x4a, 0xcb, 0x77, 0xda, 0xad, 0xac, 0xfb, 0x17, 0xd7, 0xcd, 0xf3, 0x5c, 0xc4, 0x13, 0x44, 0x45, 0xb4, 0x86, 0x61, 0xcb, 0xc6, 0x9c, 0x7a, 0xb1, 0xc8, 0xba, 0xf0, 0x20, 0x4e, 0xf8, 0x0b, 0x8e, 0x01, 0x25, 0xef, 0xe4, 0x3a, 0x0b, 0xcc, 0xdf, 0xd0, 0xf3, 0x56, 0xb6, 0x2e, 0x6c, 0x75, 0xfe, 0xa8, 0x49, 0x3d, 0xcb, 0x0f, 0xe9, 0x20, 0x19, 0x82, 0xbb, 0x62, 0x6a, 0x88, 0x00, 0xce, 0xb0, 0x5c, 0xd3, 0xa8, 0x6c, 0x88, 0x67, 0xe2, 0x18, 0xb5, 0x91, 0x92, 0xc3, 0xc2, 0x86, 0xa4, 0xfb, 0x13, 0xe5, 0xcc, 0xef, 0x2c, 0xf8, 0xbf, 0xd5, 0x7e, 0x37, 0xa3, 0x8a, 0x80, 0x0d, 0xc4, 0x78, 0x02, 0xdf, 0x88, 0xbd, 0xbf, 0x4b, 0xa5, 0x8a, 0x31, 0xad, 0x91, 0xc8, 0xa9, 0xe8, 0x3b, 0x02, 0x9e, 0x63, 0xf8, 0x7f, 0x45, 0x51, 0xc0, 0xae, 0x63, 0x36, 0x9a, 0xc8, 0x60, 0xa6 ],
-const [ 0xec, 0x2f, 0x78, 0x52, 0xd0, 0xa6, 0xe6, 0xd1, 0x3f, 0xd4, 0x22, 0x02, 0x33, 0xa0, 0x0d, 0x9c, 0x9c, 0x06, 0x3d, 0x24, 0xf6, 0x5e, 0x3b, 0x56, 0x20, 0xe1, 0xef, 0xc6, 0x6c, 0x69, 0x58, 0xc7, 0xf3, 0x78, 0x81, 0x8c, 0x2b, 0x7c, 0xb0, 0x8d, 0xbb, 0x51, 0xe0, 0x2c, 0x8d, 0x08, 0x71, 0x99, 0x25, 0xe7, 0x1f, 0xf3, 0x32, 0xb0, 0x31, 0xb0, 0x63, 0x27, 0xf2, 0x3e, 0x7c, 0xce, 0x65, 0xea, 0xa9, 0xf3, 0x35, 0x02, 0x12, 0xec, 0xeb, 0x36, 0xaf, 0xa2, 0x63, 0x44, 0x5e, 0x4c, 0x81, 0xd5, 0x33, 0x7d, 0x20, 0xa1, 0x0f, 0x61, 0x4b, 0xda, 0x74, 0x43, 0xb0, 0xc8, 0x97, 0x53, 0x51, 0xb1, 0xb7, 0xa7, 0x7d, 0xfb, 0xae, 0x7f, 0xff, 0x94, 0xc6, 0xcd, 0x95, 0x92, 0xcd, 0xf5, 0xa4, 0x17, 0x6c, 0xd1, 0x29, 0x78, 0xb4, 0xf8, 0xf3, 0x9e, 0xfa, 0x40, 0x10, 0xac, 0xe5, 0x81, 0x85, 0xe1, 0xc5, 0x9c, 0x42, 0xc1, 0x26, 0xbc, 0x54, 0x6f, 0xa6, 0xdc, 0x5d, 0x5e, 0x03, 0x8a, 0x41, 0x28, 0x78, 0xea, 0x23, 0xbe, 0x4a, 0xfd, 0x90, 0xc2, 0x9e, 0x23, 0xf9, 0x31, 0x8d, 0xdf, 0x67, 0x45, 0x7a, 0xdb, 0x6a, 0x9a, 0xa3, 0x2c, 0x52, 0x8f, 0xf7, 0xd6, 0xa2, 0xef, 0x28, 0x93, 0xc2, 0xd1, 0x00, 0xd0, 0xf4, 0xbc, 0xf8, 0xf9, 0x89, 0x0f, 0x07, 0xf6, 0x55, 0xa0, 0xb8, 0xf6, 0x60, 0xa4, 0x7f, 0x6b, 0xde, 0xcf, 0x4d, 0x55, 0x62, 0xbc, 0x62, 0xc4, 0x4e, 0x8e, 0x63, 0x98, 0x8e, 0xd8, 0xac, 0x8c, 0x86, 0xba, 0xe7, 0x73, 0x48, 0x4d, 0xdd, 0xc1, 0x0b, 0x41, 0x8d, 0x4c, 0xd9, 0xc5, 0x7b, 0x54, 0x87, 0xa7, 0x4b, 0xc1, 0xea, 0xbd, 0x8e, 0xad, 0x48, 0x83, 0xdc, 0x22, 0x0d, 0x05, 0x23, 0x25, 0xbf, 0x00, 0x3e, 0xf3, 0x34, 0x44, 0xca, 0x8a, 0x03, 0x5c, 0x35, 0x6b, 0x38, 0x71, 0x17, 0x9f, 0x4c, 0x6c, 0xc6, 0xf8, 0x54, 0x5b, 0x25, 0x99, 0x78, 0x16, 0xbc, 0xb8, 0xa7, 0x22, 0x0e, 0xa3, 0x89, 0xd5, 0x26, 0x01, 0xb5, 0xbb, 0x74, 0x5b, 0x25, 0x39, 0xd7, 0xdb, 0xe6, 0x70, 0xfb, 0x53, 0x14, 0x64, 0xe5, 0x80, 0x06, 0x5e, 0xcc, 0x91, 0xc6, 0x8f, 0x2b, 0xe3, 0xc4, 0xf5, 0x14, 0x0f, 0xcb, 0x83, 0xc7, 0x26, 0x33, 0x7c, 0x83, 0x3b, 0x59, 0x20, 0x9c, 0x22, 0x4c, 0x8a, 0xce, 0x78, 0xc9, 0xd9, 0xd1, 0xe3, 0x6a, 0x8e, 0x2d, 0x9b, 0x1a, 0x35, 0x50, 0x2a, 0xcc, 0x48, 0xde, 0x70, 0x6d, 0x50, 0x48, 0xe9, 0x16, 0x4d, 0xa0, 0x33, 0x87, 0x58, 0xac, 0xca, 0xd1, 0x87, 0x39, 0x17, 0x52, 0x11, 0xb1, 0xa9, 0xe6, 0xb2, 0xf0, 0xc2, 0x5c, 0x51, 0x54, 0x15, 0x27, 0xe1, 0x13, 0xce, 0x56, 0x85, 0xd2, 0xd3, 0xc7, 0xf7, 0x73, 0x49, 0x97, 0x2a, 0x2e, 0x5b, 0xdc, 0x2e, 0xe3, 0x36, 0x97, 0x55, 0xae, 0x58, 0xe4, 0x94, 0xbd, 0x0b, 0x74, 0x2b, 0x5e, 0x2c, 0x3d, 0x88, 0x5c, 0x31, 0x70, 0x69, 0x8c, 0x6b, 0xac, 0x42, 0xa3, 0x87, 0x71, 0xde, 0x4a, 0x5b, 0xd7, 0x48, 0x75, 0xe0, 0x80, 0xec, 0xf0, 0x7a, 0xcb, 0xfa, 0x3a, 0x80, 0x4a, 0x0b, 0x97, 0xf8, 0x77, 0x07, 0x61, 0xa2, 0xa2, 0x46, 0x9f, 0x39, 0x2e, 0xf5, 0xd9, 0xf5, 0xfd, 0xbc, 0x2a, 0x54, 0x29, 0x9d, 0x96, 0x1a, 0xf5, 0x20, 0x9e, 0x96, 0x03, 0xad, 0x12, 0x28, 0xc7, 0x39, 0x27, 0x00, 0x3b, 0x25, 0xc9, 0x28, 0xd4, 0x62, 0x32, 0xc5, 0xb5, 0xda, 0xbc, 0x9a, 0x24, 0x0b, 0xf3, 0xcd, 0x3a, 0xf5, 0xef, 0xee, 0xde, 0x37, 0xe1, 0x35, 0xf4, 0x75, 0xeb, 0x0b, 0xd1, 0xfc, 0x35, 0xcc, 0xf2, 0xa9, 0x3d, 0xcc, 0xee, 0x07, 0x6e, 0x98, 0xaa, 0xb7, 0xf5, 0x7e, 0xcc, 0x15, 0xd0, 0x4f, 0x72, 0x18, 0x27, 0x63, 0x23, 0x7a, 0xe0, 0xde, 0x06, 0x19, 0x6e, 0x32, 0x51, 0x9e, 0xe9, 0xe5, 0x05, 0x5c, 0x64, 0x95, 0xd9, 0x7b, 0x7b, 0x39, 0x73, 0x55, 0x2b, 0xa9, 0xde, 0x20, 0xe7, 0x61, 0x39, 0xce, 0xe7, 0x81, 0xac, 0x31, 0xc4, 0x19, 0xa1, 0x63, 0x42, 0xa4, 0x30, 0x65, 0x6c, 0xd2, 0xda, 0x06, 0xe7, 0x8b, 0x7b, 0x06, 0x80, 0x30, 0x7a, 0x7c, 0x07, 0x24, 0x43, 0x75, 0x60, 0x8b, 0xf7, 0xde, 0xd7, 0x51, 0x61, 0xa4, 0xb4, 0x6e, 0x2d, 0x19, 0x0f, 0x69, 0x54, 0x9a, 0xe6, 0x1b, 0xdb, 0x6f, 0x6d, 0xb6, 0xbd, 0xf2, 0xa5, 0x06, 0x26, 0xf3, 0x30, 0xf6, 0xe1, 0x5c, 0x64, 0x55, 0x14, 0x11, 0x9e, 0xda, 0x2b, 0x1a, 0xd9, 0x66, 0x12, 0x04, 0x7f, 0x8a, 0xa7, 0x84, 0x7e, 0x49, 0x6f, 0x5e, 0x9f, 0x1f, 0x87, 0x85, 0x14, 0x42, 0xde, 0x84, 0x4f, 0x27, 0xa2, 0x1c, 0x1b, 0x48, 0xf8, 0x2f, 0xe5, 0x25, 0xf0, 0xdd, 0x5a, 0x88, 0xb8, 0xec, 0x38, 0x0e, 0x10, 0x6d, 0x5d, 0xe3, 0xfd, 0x9c, 0x25, 0xcd, 0xc2, 0x09, 0xf2, 0x6c, 0x0c, 0xf5, 0x0c, 0xc0, 0x6d, 0xff, 0xac, 0xeb, 0x0b, 0x00, 0x53, 0x38, 0x9a, 0x33, 0x60, 0x5d, 0x87, 0x99, 0xe2, 0xfd, 0x76, 0x9b, 0xab, 0x71, 0xef, 0xf2, 0xa6, 0xc8, 0x54, 0xc4, 0x6a, 0x0c, 0x17, 0x0f, 0x0e, 0xc7, 0x29, 0x4b, 0x3f, 0xc6, 0xb6, 0x4b, 0x91, 0x1d, 0x0f, 0x65, 0x13, 0x6c, 0xe8, 0xd2, 0x26, 0x60, 0xc3, 0x57, 0x8f, 0x7c, 0xac, 0x25, 0xca, 0x19, 0x27, 0xff, 0xa1, 0xab, 0x67, 0x9a, 0xfe, 0x47, 0xc0, 0x49, 0xfe, 0x62, 0x5f, 0xda, 0x46, 0xdc, 0x39, 0xba, 0x9a, 0x3d, 0x41, 0x60, 0xac, 0x3e, 0xde, 0xe9, 0x31, 0x8b, 0x9c, 0x00, 0x3a, 0xc7, 0x22, 0x01, 0xc2, 0xd0, 0x64, 0x5e, 0x83, 0x45, 0x19, 0x41, 0x0f, 0x46, 0x70, 0x73, 0x1b, 0x7b, 0xfe, 0x7c, 0x1e, 0x58, 0xfb, 0x0c, 0x1b, 0x9f, 0xaf, 0x99, 0xba, 0x26, 0x27, 0x4a, 0x9e, 0xda, 0x2c, 0x14, 0xf3, 0x04, 0x76, 0x23, 0x46, 0xcb, 0x1c, 0x7b, 0x9a, 0xfa, 0x4f, 0xdf, 0xb8, 0x04, 0x48, 0xf1, 0xc6, 0x46, 0x7f, 0x9c, 0x1b, 0x8b, 0x1e, 0xaf, 0x52, 0xd5, 0xb5, 0xca, 0x9d, 0x5b, 0x2f, 0x7e, 0x5c, 0xce, 0x05, 0xb0, 0xef, 0xe0, 0xb1, 0x3e, 0xc8, 0x07, 0x66, 0xe6, 0xc4, 0x7e, 0xfe, 0x63, 0xbb, 0x8e, 0x34, 0xd8, 0x56, 0x0b, 0x13, 0x72, 0x20, 0x21, 0xae, 0x49, 0xe0, 0x51, 0x12, 0x88, 0x27, 0xb6, 0x79, 0xce, 0x25, 0x8d, 0xc0, 0xd4, 0xc0, 0xf4, 0x1b, 0x4f, 0xe8, 0xf2, 0x08, 0x18, 0x24, 0xb8, 0x81, 0x8a, 0x71, 0x26, 0x76, 0x2b, 0x4d, 0x91, 0x7a, 0x8f, 0x0f, 0xc4, 0xbd, 0x7a, 0x79, 0x44, 0x3a, 0x45, 0x90, 0xd9, 0x31, 0x83, 0xab, 0x49, 0xd8, 0xe4, 0xcb, 0x67, 0x4e, 0x59, 0x2a, 0x4c, 0xd0, 0x78, 0x17, 0xe5, 0x2f, 0x23, 0x00, 0xae, 0x81, 0x64, 0xd1, 0xbc, 0x17, 0x9c, 0x7d, 0x01, 0xb0, 0xdd, 0xd9, 0xcc, 0xec, 0x94, 0xb1, 0x8f, 0x04, 0x6b, 0x16, 0xe5, 0xb7, 0x6d, 0xf5, 0xd3, 0x88, 0x6b, 0xee, 0x4e, 0x26, 0x9f, 0x62, 0xfe, 0x2c, 0x90, 0xce, 0x42, 0x0a, 0x35, 0x58, 0x74, 0x43, 0x5d, 0xa8, 0x6e, 0xda, 0x4f, 0xf9, 0x4d, 0x06, 0xad, 0x70, 0x75, 0x2d, 0x9e, 0xac, 0xd5, 0x10, 0x2b, 0x9e, 0x6c, 0x44, 0xea, 0x9b, 0x0b, 0xe1, 0xda, 0xaf, 0x5d, 0x7e, 0x8f, 0x35, 0x26, 0x5c, 0x8f, 0xa4, 0xc8, 0xe1, 0xfb, 0xac, 0x0b, 0x48, 0x72, 0x82, 0x1d, 0x98, 0x32, 0x78, 0xd8, 0xd2, 0x80, 0xd0, 0x44, 0x6f, 0x4b, 0xd2, 0x5d, 0x09, 0x0c, 0x1c, 0x16, 0x59, 0xf0, 0x3a, 0x9d, 0x61, 0x39, 0x76, 0xe1, 0xea, 0xe1, 0xf1, 0x52, 0x31, 0x81, 0xf3, 0xe7, 0xde, 0x72, 0x80, 0x66, 0x35, 0x32, 0x2c, 0xe0, 0x90, 0x09, 0x30, 0x7a, 0x0d, 0xec, 0xbc, 0x74, 0x84, 0xa1, 0x8f, 0x63, 0xbc, 0x24, 0xc6, 0xc1, 0xde, 0x4a, 0xf1, 0xa8, 0x29, 0xa4, 0x6c, 0xdb, 0xe8, 0xa6, 0xed, 0x06, 0xa1, 0x08, 0x59, 0x47, 0x90, 0x6d, 0xdc, 0xec, 0x53, 0x43, 0x38, 0x7f, 0xe7, 0xea, 0x5d, 0x00, 0xd3, 0x18, 0x3b, 0x71, 0xa3, 0x7c, 0xd4, 0x98, 0x98, 0xa1, 0x95, 0x00, 0x9e, 0x16, 0xe6, 0x41, 0x7e, 0xcc, 0x00, 0x81, 0x55, 0xbf, 0xfe, 0x3b, 0x45, 0xd8, 0x37, 0x3f, 0x6a, 0x12, 0xcc, 0xfa, 0x10, 0xdd, 0x7d, 0xf8, 0x23, 0xc0, 0xc1, 0xa7, 0xe6, 0x41, 0x15, 0x5e, 0xe8, 0x09, 0x94, 0x9d, 0x35, 0x44, 0xc8, 0x97, 0xc9, 0x47, 0xc0, 0xed, 0x4a, 0x75, 0x62, 0xbd, 0xf6, 0x63, 0x03, 0xdb, 0xda, 0x3a, 0x35, 0x5e, 0x44, 0x5d, 0xe0, 0x5f, 0x7c, 0x4c, 0x95, 0xfd, 0xaf, 0xc9, 0x1e, 0xa4, 0x2c, 0x39, 0x5a, 0x90, 0xd3, 0x4c, 0x48, 0x8c, 0xc9, 0xe0, 0x61, 0x00, 0x71, 0x23, 0x2b, 0x2a, 0x98, 0xf8, 0x0b, 0xac, 0xf0, 0x9d, 0x5a, 0x47, 0xc0, 0x8a, 0xbc, 0xe6, 0xd9, 0x9c, 0xad, 0xde, 0xcc, 0x72, 0x5d, 0x74, 0x5a, 0x18, 0xbe, 0xa0, 0x2c, 0xe2, 0xdb, 0x10, 0xc5, 0x9b, 0x6b, 0x70, 0xb4, 0xdf, 0xa6, 0xe9, 0x0e, 0xc6, 0x57, 0xe7, 0x1b, 0xc3, 0x33, 0x20, 0x50, 0xcb, 0x69, 0xd2, 0x7d, 0xb9, 0x7a, 0x4b, 0x48, 0xf1, 0x4b, 0xaf, 0xda, 0x43, 0x79, 0xf6, 0xd8, 0x13, 0xec, 0x34, 0x95, 0xb7, 0xaf, 0x1d, 0x86, 0x21, 0xfe, 0xc8, 0xf6, 0xbe, 0xa1, 0xb3, 0xfa, 0x9d, 0x79, 0x08, 0xa8, 0xd4, 0x59, 0x1e, 0x84, 0x20, 0x17, 0x43, 0x3b, 0xcb, 0xe2, 0xb9, 0x94, 0xd3, 0xd5, 0xfe, 0xa3, 0x48, 0xcd, 0x50, 0x40, 0xf6, 0x78, 0x71, 0xb7, 0x44, 0xaf, 0xa8, 0xc1, 0x5c, 0x06, 0x08, 0xb3, 0x8c, 0xa1, 0xf4, 0xf6, 0xec, 0x49, 0xe3, 0xb7, 0x42, 0xbe, 0x61, 0xdf, 0x22, 0x4f, 0x57, 0x46, 0x5a, 0xa9, 0x8b, 0x23, 0x8d, 0xed, 0x6a, 0xc8, 0x1d, 0x05, 0x06, 0x8c, 0x4e, 0x37, 0x5b, 0x08, 0xa9, 0xfa, 0xd6, 0x86, 0x9f, 0x09, 0x18, 0xb6, 0x6f, 0xb7, 0xf7, 0xa3, 0x4a, 0x82, 0xc5, 0xe6, 0xb4, 0xea, 0xd5, 0x19, 0x2d, 0x84, 0x3c, 0x8f, 0x11, 0x4a, 0xd5, 0x42, 0xbd, 0x35, 0x88, 0x0d, 0xf3, 0x0e, 0xcb, 0x1c, 0x80, 0x81, 0x68, 0xa0, 0x1b, 0x73, 0x81, 0xc7, 0x91, 0x95, 0xd2, 0xeb, 0x1f, 0x39, 0x37, 0x0a, 0x1f, 0x65, 0x6e, 0x76, 0xe8, 0x26, 0x1d, 0xcd, 0xef, 0x27, 0x17, 0x2c, 0x32, 0x82, 0xdb, 0xa0, 0xd6, 0xd6, 0x5e, 0xdd, 0x0e, 0x9a, 0x0a, 0x33, 0x40, 0xb1, 0x06, 0xbd, 0x63, 0x3e, 0xb8, 0xdc, 0xac, 0xb9, 0x88, 0xe3, 0x69, 0x43, 0xe7, 0x14, 0x2d, 0x36, 0x90, 0xcc, 0x2d, 0x01, 0x0e, 0xfa, 0xea, 0x33, 0x7f, 0xd5, 0x10, 0xd5, 0x97, 0xcf, 0x9e, 0xfd, 0xe8, 0xc4, 0x48, 0xa0, 0x60, 0x78, 0x1a, 0xa8, 0x13, 0x40, 0x5d, 0x46, 0x3a, 0xff, 0xbe, 0x8a, 0x7c, 0x54, 0xad, 0x31, 0x6d, 0x12, 0x04, 0xbe, 0x55, 0xf1, 0xe9, 0xcc, 0x32, 0x83, 0xf5, 0xa2, 0x00, 0x69, 0x96, 0x08, 0x37, 0xc6, 0xb1, 0x59, 0x96, 0xf4, 0x8c, 0xda, 0x1f, 0x76, 0xec, 0x4a, 0x63, 0x2e, 0x7a, 0xba, 0xff, 0xd0, 0x6b, 0x9f, 0x67, 0x97, 0x60, 0x26, 0xe2, 0x37, 0x8b, 0xc7, 0xd6, 0x12, 0x14, 0x1d, 0x46, 0xae, 0xbb, 0xf5, 0x99, 0x67, 0xbe, 0xa5, 0x9d, 0x61, 0xfd, 0x9f, 0xcb, 0xc1, 0x5c, 0x45, 0xcd, 0x1d, 0x69, 0xff, 0x3d, 0x30, 0x3f, 0x8b, 0xb0, 0xd3, 0xaa, 0x95, 0xf3, 0x29, 0x8b, 0x88, 0x94, 0x19, 0x7e, 0xa3, 0xa4, 0x01, 0xbb, 0x4f, 0xbc, 0xa8, 0x3a, 0xb0, 0x3e, 0x75, 0x1b, 0x7a, 0xdd, 0xdf, 0x44, 0x06, 0x60, 0x25, 0x4c, 0xa5, 0xa2, 0x3f, 0x98, 0x34, 0xde, 0x14, 0xc3, 0xf0, 0x29, 0xed, 0x43, 0x8c, 0x40, 0x2a, 0x4a, 0x81, 0x84, 0x34, 0xeb, 0xa6, 0x43, 0xb2, 0x7e, 0x00, 0x39, 0x00, 0x45, 0xdb, 0x57, 0xdc, 0x50, 0x19, 0xc3, 0x63, 0x9d, 0xcb, 0x1f, 0x3d, 0x84, 0xfe, 0x0e, 0x14, 0x52, 0xd7, 0xf4, 0x4a, 0x35, 0xe3, 0xfe, 0xeb, 0x58, 0xa8, 0x63, 0xe0, 0x4e, 0x80, 0xe9, 0x66, 0xb4, 0xa7, 0xaa, 0xbf, 0x12, 0x92, 0x18, 0x27, 0x03, 0x82, 0x3f, 0x0a, 0x96, 0x5a, 0x4a, 0x74, 0xf3, 0xad, 0x49, 0xc9, 0x42, 0x1c, 0x31, 0xb6, 0xc8, 0xdf, 0x24, 0x67, 0x53, 0xa1, 0xf3, 0xfb, 0xd9, 0x91, 0xe2, 0x35, 0x5c, 0xb6, 0xab, 0x74, 0x10, 0x82, 0xc5, 0xe5, 0xc0, 0xab, 0xe5, 0xf7, 0x6e, 0x36, 0xc6, 0x0f, 0x3a, 0xd5, 0x26, 0x7e, 0x85, 0x72, 0x11, 0xb0, 0x55, 0x0c, 0x61, 0xa5, 0xfb, 0xc2, 0x86, 0xa5, 0xf4, 0x2d, 0x83, 0x30, 0x0e, 0xf3, 0x39, 0x35, 0xcb, 0x99, 0xe8, 0x84, 0x0a, 0x99, 0xf3, 0x84, 0xe4, 0xb5, 0xe3, 0x29, 0xd5, 0x8a, 0xaf, 0x21, 0x1c, 0x68, 0x3b, 0x4e, 0x64, 0x61, 0x1e, 0x79, 0xa3, 0xa0, 0xa8, 0x45, 0x43, 0xfd, 0x24, 0x61, 0x80, 0xce, 0x5a, 0x02, 0x11, 0xff, 0x58, 0x91, 0x0a, 0x65, 0x72, 0xa0, 0x01, 0x4f, 0x88, 0x23, 0x6f, 0x5e, 0x87, 0xdd, 0x5a, 0x97, 0x32, 0x18, 0x31, 0xb7, 0x23, 0x99, 0xf8, 0xc6, 0x0c, 0xd3, 0xa4, 0xef, 0x43, 0x5b, 0xc9, 0x8f, 0x7e, 0x9c, 0x72, 0x8c, 0xdb, 0xcc, 0x50, 0xe8, 0x23, 0x1f, 0x18, 0x96, 0x4f, 0x3a, 0x26, 0x8c, 0x4b, 0xea, 0x66, 0x19, 0xfb, 0x16, 0x74, 0x79, 0x7c, 0xf2, 0x02, 0xa7, 0xac, 0x76, 0x7b, 0x72, 0xec, 0x0f, 0xe5, 0xd3, 0x24, 0x94, 0x0c, 0x7e, 0x08, 0x7b, 0xdd, 0xb7, 0x9a, 0x4d, 0x10, 0x67, 0xf0, 0x57, 0x0a, 0x6f, 0x38, 0xa3, 0x01, 0x3c, 0xf9, 0x26, 0x61, 0x9b, 0x9c, 0x3b, 0x6e, 0xcf, 0x2a, 0x50, 0x2b, 0xe2, 0x57, 0xdf, 0x7b, 0x38, 0xc0, 0xa1, 0x87, 0x6a, 0x71, 0xfe, 0x5f, 0x51, 0xaa, 0xc7, 0xe4, 0x60, 0xe3, 0x27, 0xe5, 0x37, 0x0d, 0xd7, 0x88, 0x76, 0x1b, 0x92, 0xec, 0xcf, 0xc1, 0xc9, 0x0c, 0x60, 0x7b, 0x97, 0xe7, 0x3f, 0xd2, 0xf7, 0xde, 0x56, 0xdb, 0x35, 0x5d, 0x71, 0x00, 0xa2, 0xbd, 0x95, 0x02, 0x8c, 0x69, 0x94, 0x3f, 0x6d, 0x40, 0xde, 0x31, 0x63, 0x3b, 0x9a, 0x38, 0xe0, 0x50, 0xf5, 0x99, 0xa3, 0x96, 0xba, 0xc6, 0xe7, 0xa9, 0x24, 0xe0, 0xda, 0x50, 0xf0, 0x7a, 0x50, 0x5d, 0xb5, 0xa0, 0xb9, 0xd5, 0x78, 0x17, 0x50, 0x51, 0x7b, 0xe7, 0x96, 0xa4, 0x57, 0x17, 0xff, 0xbe, 0x4a, 0xb8, 0xeb, 0xd1, 0xd2, 0x25, 0xd7, 0xb2, 0x7b, 0x88, 0xd5, 0x81, 0xf5, 0xa0, 0x39, 0x8c, 0x69, 0xc2, 0x96, 0x71, 0x0d, 0x1e, 0xe9, 0x83, 0xf7, 0x44, 0x13, 0x6f, 0x2f, 0xe7, 0x8d, 0x20, 0x07, 0xe0, 0x57, 0xdf, 0xaf, 0x75, 0x31, 0xbf, 0x04, 0xdc, 0x0e, 0x38, 0xa9, 0xfb, 0xc6, 0x12, 0x59, 0x72, 0x0b, 0x84, 0x7b, 0xdb, 0x9e, 0x9e, 0xf7, 0x50, 0xc2, 0xe4, 0x49, 0x2e, 0xf2, 0x3c, 0xd4, 0x19, 0xcf, 0x0a, 0x78, 0x41, 0x5c, 0x99, 0x66, 0xe3, 0x6d, 0xbd, 0x33, 0x12, 0x5d, 0xb6, 0x2c, 0xb7, 0x00, 0x58, 0xea, 0xd7, 0xd8, 0x69, 0x26, 0x14, 0x8c, 0x4b, 0xce, 0x77, 0x95, 0xda, 0x57, 0x6c, 0x3b, 0x98, 0x56, 0x0e, 0xc0, 0x08, 0x4a, 0xa5, 0xdb, 0x57, 0xbc, 0x6d, 0x68, 0x41, 0x8b, 0x9a, 0x5d, 0x33, 0x81, 0x98, 0x00, 0xad, 0x29, 0x97, 0x57, 0xeb, 0xe5, 0x47, 0xe0, 0xc4, 0x3b, 0xe0, 0x83, 0xd2, 0x70, 0x66, 0xc5, 0xd3, 0x58, 0x2b, 0x3e, 0x4f, 0x6c, 0x95, 0x4d, 0x7c, 0x1d, 0x21, 0x0a, 0x5e, 0x68, 0xa8, 0x7c, 0x32, 0xab, 0xe2, 0x0d, 0x0d, 0xb7, 0x28, 0x3a, 0xc1, 0x26, 0x7e, 0x8f, 0x00, 0xef, 0xd0, 0xd3, 0xc4, 0x37, 0x7c, 0x80, 0xed, 0x6a, 0x11, 0x76, 0x2c, 0x8b, 0x56, 0xef, 0x21, 0xc8, 0x8f, 0xb6, 0xc0, 0x52, 0xfb, 0x94, 0xf9, 0x6b, 0xa1, 0x0b, 0x98, 0xc1, 0x4d, 0x47, 0x6a, 0xfa, 0xd5, 0x52, 0xa1, 0x90, 0xa0, 0x87, 0x79, 0xdf, 0x69, 0x49, 0x1c, 0x7c, 0x41, 0xf5, 0xc3, 0xc9, 0xd3, 0x14, 0x1f, 0xc6, 0xec, 0xd6, 0xf7, 0x2a, 0x3b, 0xbc, 0x12, 0xb3, 0x55, 0x94, 0x57, 0xba, 0xfb, 0xaa, 0x33, 0x0a, 0xa0, 0x3d, 0x3b, 0xf2, 0x26, 0x30, 0x13, 0x99, 0xe9, 0x02, 0x8e, 0x92, 0xfe, 0x00, 0x16, 0xb0, 0xbd, 0xb9, 0x4f, 0x1c, 0x7c, 0xb3, 0xf7, 0xa4, 0x9e, 0x5c, 0x11, 0x56, 0xcd, 0x43, 0x42, 0x4e, 0x83, 0x88, 0x7b, 0xcc, 0xcf, 0x92, 0xd8, 0x8a, 0x56, 0xff, 0xc8, 0x4c, 0x98, 0xe1, 0x6f, 0xb8, 0x74, 0x27, 0x48, 0x68, 0xee, 0x59, 0x0f, 0x3e, 0x31, 0x89, 0xde, 0xf7, 0xd0, 0x86, 0x96, 0x03, 0x51, 0x52, 0x80, 0x94, 0xec, 0xd6, 0x34, 0xf6, 0x90, 0xd5, 0xba, 0x1e, 0x27, 0x1f, 0xf0, 0x85, 0x1b, 0x07, 0x2b, 0x37, 0x19, 0x16, 0x21, 0x26, 0x15, 0x01, 0x07, 0xc5, 0x8e, 0xd9, 0xf6, 0xd2, 0x13, 0x82, 0x93, 0x73, 0x06, 0x66, 0xef, 0x85, 0xa0, 0x6a, 0xac, 0x31, 0x35, 0x22, 0x62, 0xc0, 0xb9, 0x40, 0x40, 0xb0, 0x84, 0x53, 0xf7, 0x07, 0x52, 0xae, 0xd3, 0xe7, 0x8e, 0xa5, 0x2b, 0x63, 0xd0, 0x00, 0xfc, 0x91, 0xa4, 0xa9, 0xd1, 0xe0, 0x8d, 0xa8, 0xe6, 0xac, 0x49, 0x51, 0x8c, 0x10, 0x57, 0xbc, 0xcf, 0xfc, 0xb7, 0x76, 0x57, 0x87, 0xf1, 0x76, 0x8c, 0x86, 0x58, 0x53, 0xfe, 0x5d, 0x90, 0xb4, 0x03, 0x15, 0x4e, 0x07, 0xa2, 0xaf, 0x5f, 0x76, 0xaf, 0xb8, 0xec, 0x16, 0x38, 0x1e, 0xfc, 0x62, 0x20, 0x42, 0x3a, 0xe9, 0x0a, 0x4e, 0xf9, 0x43, 0x78, 0xc9 ],
-const [ 0x0b, 0x6e, 0xde, 0xb5, 0xf0, 0x6b, 0x22, 0x77, 0x3d, 0x0a, 0xf7, 0x27, 0xdd, 0x59, 0xbd, 0xf5, 0x52, 0xa1, 0x30, 0x00, 0x4c, 0xa4, 0x97, 0xbd, 0x7a, 0x23, 0x3d, 0x9d, 0xa0, 0xa3, 0x25, 0xea, 0xea, 0x71, 0xfa, 0xf2, 0x80, 0xe4, 0x45, 0x68, 0x5a, 0xe2, 0xe3, 0x07, 0x56, 0xa5, 0xb5, 0x78, 0x87, 0xbf, 0x99, 0x76, 0xd0, 0x5c, 0x99, 0x30, 0xb2, 0xc8, 0x63, 0xef, 0x63, 0x31, 0xf9, 0xf8, 0x20, 0xad, 0xaa, 0xb4, 0xc3, 0x7f, 0x41, 0x0e, 0x98, 0x96, 0x7c, 0x1d, 0x6d, 0x56, 0xc0, 0x03, 0xe8, 0x9b, 0x0a, 0x15, 0x1e, 0xfb, 0x29, 0x3c, 0x60, 0x4c, 0x2b, 0x9a, 0x58, 0x66, 0x15, 0x71, 0x56, 0x2a, 0xd7, 0x41, 0xe4, 0xc4, 0x7e, 0x31, 0xa0, 0x2c, 0xac, 0xb0, 0x4b, 0xf3, 0x45, 0x5c, 0x1d, 0x3c, 0x6c, 0x23, 0x5b, 0x09, 0xae, 0xa8, 0x2c, 0xb8, 0x7c, 0xe8, 0xa9, 0xcd, 0xdf, 0x1d, 0x33, 0xf1, 0x67, 0xe3, 0x09, 0x3b, 0x65, 0x99, 0x19, 0xaf, 0x59, 0x0a, 0x17, 0x04, 0xae, 0x4c, 0xcd, 0xab, 0xa5, 0xe9, 0xb2, 0x0c, 0x90, 0x3d, 0xbd, 0x13, 0x40, 0x1f, 0x7b, 0xeb, 0xc0, 0xc4, 0x60, 0x09, 0x44, 0xdf, 0x5b, 0x6d, 0x5c, 0x0d, 0xac, 0x24, 0x6d, 0x71, 0xfa, 0x12, 0x62, 0x9b, 0xa0, 0xee, 0x9f, 0xaf, 0x49, 0x8e, 0x36, 0xc3, 0xbc, 0x65, 0x5e, 0x88, 0xf9, 0x4a, 0x21, 0x2d, 0x84, 0x7a, 0x54, 0x80, 0x01, 0xe1, 0xcc, 0x57, 0x01, 0x95, 0xcf, 0x2e, 0x1c, 0xa4, 0xc9, 0x11, 0x40, 0x0f, 0x40, 0xbd, 0x48, 0x16, 0x0a, 0x02, 0xd0, 0xb6, 0xbe, 0x6b, 0x48, 0x71, 0x68, 0x21, 0x48, 0x4d, 0x81, 0x0d, 0x23, 0x1f, 0x1e, 0x3d, 0xbf, 0x09, 0x67, 0x89, 0xa4, 0x42, 0x4b, 0x76, 0x52, 0x15, 0x72, 0x5a, 0xd8, 0x2d, 0x73, 0xc1, 0xa2, 0x0f, 0x48, 0x10, 0x93, 0xe8, 0xff, 0x68, 0x54, 0x89, 0xb1, 0xcd, 0xeb, 0xb0, 0xb8, 0x88, 0x8f, 0x89, 0x1d, 0xc9, 0xba, 0x74, 0x50, 0x91, 0x81, 0x09, 0x1c, 0xcf, 0x21, 0x59, 0xd9, 0xca, 0xda, 0x77, 0xe4, 0xbe, 0x00, 0x38, 0x4c, 0xca, 0x4f, 0x36, 0xce, 0x09, 0x7f, 0x1b, 0x04, 0x00, 0x18, 0x1c, 0xd9, 0x38, 0x88, 0xc3, 0x40, 0x2b, 0x72, 0xf2, 0x26, 0x65, 0x4a, 0x25, 0xa4, 0xe3, 0x1f, 0xf7, 0x7a, 0xbf, 0xb7, 0xe8, 0xb9, 0x0f, 0xe1, 0x5d, 0xbf, 0x0a, 0x07, 0xe8, 0x68, 0x6c, 0x03, 0xca, 0x83, 0x1c, 0x33, 0xb6, 0x83, 0x0c, 0xd0, 0xd8, 0x77, 0x61, 0x7b, 0x16, 0x3d, 0xd5, 0x19, 0x96, 0xf2, 0x59, 0xe1, 0x80, 0xac, 0xfe, 0xb3, 0x05, 0x6c, 0x15, 0xac, 0xa0, 0x4e, 0x95, 0xf7, 0x9b, 0x03, 0xbe, 0xe6, 0xd6, 0x81, 0xfc, 0x41, 0xc4, 0xf9, 0x0e, 0xde, 0xb6, 0x0a, 0x67, 0x71, 0x5c, 0x34, 0xd5, 0xa6, 0x88, 0x8f, 0x60, 0x6d, 0x36, 0xbd, 0x75, 0x95, 0xca, 0x1d, 0x44, 0x9d, 0x98, 0x41, 0x66, 0xc7, 0xa9, 0xa3, 0xc3, 0x6d, 0xbc, 0x93, 0xb3, 0x98, 0x8c, 0x74, 0x63, 0xcf, 0x51, 0x28, 0x7b, 0x2d, 0x89, 0xc9, 0xfd, 0xb7, 0xf8, 0x9a, 0x70, 0xec, 0xee, 0x3d, 0x3f, 0x9d, 0xc8, 0x26, 0x5c, 0xfe, 0xb9, 0x4f, 0x28, 0xfe, 0xcb, 0x2d, 0x97, 0xd4, 0x20, 0xe4, 0x8f, 0xda, 0x7e, 0xb7, 0x92, 0x9f, 0x0b, 0xc2, 0x9d, 0x37, 0x54, 0xeb, 0x50, 0xd6, 0x94, 0x16, 0x4e, 0x9e, 0x34, 0x98, 0xe7, 0xb4, 0x8e, 0xee, 0xf5, 0x99, 0xf6, 0xb0, 0x03, 0xb8, 0xfb, 0xc0, 0xb5, 0x3b, 0xea, 0xc7, 0x64, 0x23, 0x94, 0xe2, 0x08, 0x98, 0x51, 0x98, 0x5b, 0x7d, 0x45, 0x10, 0x3b, 0x48, 0xe2, 0x80, 0x50, 0x11, 0xae, 0xe9, 0xf0, 0xe8, 0x47, 0x02, 0x3f, 0x6c, 0xa4, 0x71, 0x9b, 0x9a, 0x9d, 0x41, 0x37, 0xe2, 0xae, 0x91, 0x05, 0x80, 0xf8, 0x89, 0xda, 0x09, 0x88, 0x93, 0xcd, 0x44, 0xdc, 0xc7, 0xe0, 0x3c, 0xa3, 0xa6, 0xe2, 0x93, 0xc5, 0x0c, 0x93, 0x19, 0xa3, 0x60, 0x0a, 0x9d, 0xa0, 0x0e, 0x54, 0x04, 0xe0, 0x37, 0x5e, 0x98, 0x50, 0xa7, 0x14, 0xa2, 0xe6, 0x07, 0xcb, 0x3a, 0x2a, 0x53, 0xdc, 0x5e, 0xf5, 0x8f, 0x92, 0x42, 0x78, 0xb6, 0x47, 0xe7, 0x81, 0xf4, 0xc9, 0xef, 0xfa, 0x14, 0x03, 0xb0, 0xb2, 0x3c, 0xd9, 0x87, 0x61, 0xd8, 0x53, 0x6e, 0xe6, 0xd4, 0xfe, 0xd1, 0xd2, 0x0e, 0x8f, 0x9e, 0x2a, 0x0b, 0xca, 0x9c, 0x69, 0xe9, 0xa2, 0xfd, 0xc5, 0x94, 0xa2, 0x36, 0xb3, 0x3d, 0x8b, 0x0e, 0xad, 0x08, 0x3f, 0xf5, 0x33, 0x05, 0xdd, 0x98, 0x10, 0x62, 0x2e, 0xb2, 0xde, 0xdf, 0x40, 0x25, 0xcc, 0x81, 0x50, 0x49, 0x9f, 0x8b, 0xed, 0x84, 0xf7, 0xaa, 0x5b, 0x1b, 0xd4, 0x70, 0x36, 0x47, 0x58, 0x03, 0x57, 0x8c, 0xcf, 0x17, 0xfc, 0x46, 0xec, 0x19, 0x22, 0x85, 0x55, 0xad, 0x36, 0x1a, 0x63, 0x5b, 0xed, 0xf2, 0x22, 0x85, 0x71, 0xa3, 0xa0, 0x9d, 0xbd, 0x45, 0x64, 0x95, 0x4a, 0x83, 0x3c, 0x96, 0xeb, 0xf1, 0x3c, 0xf4, 0xf5, 0xa1, 0x03, 0x62, 0xa4, 0xf1, 0x40, 0x62, 0xba, 0xa6, 0x75, 0x00, 0x69, 0x3f, 0xfb, 0xc0, 0x73, 0x83, 0x47, 0xd5, 0x90, 0x5d, 0x6b, 0x93, 0x10, 0xe9, 0xdf, 0x27, 0xc1, 0xcf, 0x82, 0x86, 0x13, 0xd0, 0xdc, 0xa3, 0x7a, 0x9e, 0xa6, 0xe5, 0x14, 0xf1, 0x8c, 0xd8, 0x8c, 0xd7, 0x31, 0x23, 0x3e, 0x4b, 0x74, 0xba, 0x9c, 0x0a, 0xf2, 0x54, 0xd0, 0xa2, 0xcb, 0x20, 0xa3, 0xcc, 0xaa, 0xb3, 0x9d, 0xfb, 0xff, 0x45, 0x6d, 0x35, 0x8f, 0x1e, 0x8c, 0x22, 0x2f, 0x4b, 0x1e, 0x63, 0xcc, 0x95, 0x19, 0x24, 0xaf, 0xb4, 0xa8, 0xf5, 0xff, 0xbf, 0xd2, 0xd5, 0x88, 0xe7, 0x57, 0x90, 0xba, 0x65, 0xda, 0x4c, 0xf5, 0xb1, 0x45, 0x5e, 0x04, 0xf5, 0x6a, 0x62, 0xe7, 0xc1, 0xe6, 0x8a, 0xd5, 0x00, 0x4b, 0x36, 0x81, 0x2b, 0x7e, 0xc5, 0x9d, 0xbc, 0x5d, 0xab, 0x9c, 0xe6, 0xa5, 0xc4, 0xbd, 0x83, 0x13, 0xe9, 0x45, 0x4e, 0xca, 0xc0, 0x0b, 0x52, 0xf5, 0xd8, 0x3a, 0xa2, 0xad, 0xf5, 0x53, 0x4b, 0x1d, 0xa8, 0x71, 0x87, 0xe4, 0x23, 0xd1, 0x33, 0xba, 0x4c, 0x91, 0x83, 0x57, 0x10, 0xb8, 0xf5, 0x91, 0xfa, 0x77, 0x83, 0xc4, 0x04, 0xaf, 0x1d, 0x76, 0xad, 0xb2, 0x56, 0x3b, 0x4b, 0x4e, 0x5e, 0xd7, 0xa3, 0x08, 0x30, 0xa3, 0xb7, 0xa5, 0x0c, 0x32, 0xdf, 0xef, 0x28, 0x33, 0x1b, 0xb5, 0xa3, 0x99, 0xa8, 0x14, 0xba, 0xfa, 0xd1, 0xf5, 0x3e, 0x35, 0x08, 0xd7, 0x45, 0x58, 0x35, 0xcf, 0x21, 0xc1, 0x4e, 0xcc, 0x8e, 0x83, 0x28, 0x20, 0x2f, 0x0b, 0x8d, 0x3c, 0x3c, 0x03, 0x8e, 0xbb, 0x75, 0x76, 0x1a, 0xa3, 0x5a, 0x35, 0xd0, 0xe7, 0x9d, 0x7a, 0x12, 0x30, 0xd8, 0xcc, 0x5b, 0xdc, 0x7c, 0x22, 0xd2, 0x47, 0x09, 0x4b, 0x1f, 0x4a, 0x85, 0x8d, 0x7d, 0x02, 0x27, 0x8d, 0x10, 0xd3, 0x53, 0x6e, 0x7a, 0xac, 0xcb, 0x3d, 0xa9, 0x8c, 0x23, 0x8d, 0xf2, 0x45, 0x75, 0x5e, 0x64, 0x80, 0x57, 0x44, 0x56, 0x01, 0x0a, 0xc5, 0x43, 0x2c, 0xf4, 0x02, 0xd8, 0xc8, 0x50, 0x9a, 0x4a, 0x04, 0x25, 0xcb, 0xed, 0xb7, 0x74, 0xda, 0x03, 0xec, 0xb6, 0xb5, 0xd1, 0x9e, 0x86, 0xd8, 0xf9, 0xc0, 0x9a, 0x6d, 0x03, 0x81, 0xf7, 0xb7, 0x3d, 0xcd, 0x65, 0xb0, 0xc5, 0x17, 0x21, 0xf1, 0xe4, 0x56, 0xd3, 0xd3, 0x9d, 0x4d, 0xbf, 0xd4, 0x86, 0x10, 0x3f, 0x3c, 0xd7, 0xc4, 0x71, 0x00, 0xc1, 0xa6, 0x2d, 0xe6, 0x01, 0x4f, 0x3a, 0xea, 0xb4, 0x36, 0xc1, 0xe0, 0x6d, 0x76, 0x01, 0x5c, 0x85, 0xd1, 0x45, 0xcf, 0xb2, 0xf5, 0x13, 0xf2, 0xdb, 0xff, 0xa7, 0x68, 0x2b, 0x3e, 0xa0, 0x9f, 0x65, 0x39, 0xf8, 0xf7, 0x77, 0xf3, 0x39, 0x26, 0x51, 0x6d, 0xee, 0xdb, 0xf7, 0x6d, 0x58, 0xa1, 0xd5, 0x7e, 0x63, 0x06, 0x54, 0x38, 0xd8, 0xfd, 0xaa, 0xc1, 0xd4, 0x82, 0xf6, 0x94, 0x79, 0x7c, 0x8c, 0x81, 0xe3, 0xe7, 0x8d, 0xf5, 0x5e, 0x32, 0xbc, 0x7c, 0xd6, 0xe6, 0x8c, 0x84, 0x8f, 0x89, 0x7e, 0x64, 0x16, 0xc2, 0xa9, 0x9d, 0x77, 0xbe, 0x9a, 0x5f, 0xb0, 0xd1, 0x5f, 0x4f, 0x66, 0x61, 0xdf, 0x87, 0xd7, 0x00, 0x6d, 0xde, 0x10, 0xd8, 0x9c, 0x6a, 0x5f, 0x4c, 0x54, 0x44, 0x0c, 0xdc, 0x25, 0x8b, 0x44, 0x49, 0xdc, 0xac, 0x56, 0xfa, 0x54, 0xe0, 0x22, 0x9f, 0x8f, 0xf6, 0xcd, 0x14, 0x05, 0x52, 0xba, 0x88, 0x3c, 0x36, 0xb6, 0xde, 0x99, 0x40, 0x73, 0x53, 0x76, 0x34, 0x38, 0x62, 0x75, 0xfc, 0xd6, 0xe5, 0x13, 0xed, 0xde, 0x7c, 0x80, 0x4c, 0x11, 0x32, 0xae, 0x11, 0x18, 0x5e, 0xa7, 0xea, 0x76, 0xc8, 0x25, 0x83, 0xba, 0x0d, 0x5c, 0x05, 0xf9, 0x45, 0x1b, 0xdd, 0x7b, 0xe2, 0x13, 0xbe, 0xb5, 0xdb, 0x76, 0xe9, 0x77, 0x0b, 0xc5, 0xac, 0x67, 0xd4, 0xe3, 0x28, 0xae, 0x07, 0x6d, 0x58, 0xf1, 0x08, 0x4e, 0x4f, 0x83, 0x2d, 0x8d, 0xc1, 0xd9, 0x68, 0x6a, 0xc5, 0x3e, 0x26, 0xaa, 0xd9, 0xc7, 0x76, 0x2f, 0x27, 0x8a, 0x6e, 0xcb, 0x07, 0x0b, 0xca, 0x56, 0xc4, 0xf7, 0xd7, 0xfe, 0xa3, 0x15, 0x90, 0xdf, 0x21, 0x79, 0x06, 0xd4, 0x7d, 0xfb, 0x05, 0x8c, 0x76, 0xe7, 0xf4, 0xe0, 0x56, 0xf6, 0xfd, 0x63, 0x2f, 0x7d, 0x6e, 0x3b, 0x65, 0xe5, 0x5f, 0x30, 0x6c, 0x5b, 0x96, 0x03, 0xd3, 0xc8, 0xa7, 0x01, 0x82, 0x04, 0x5f, 0xd7, 0x40, 0x47, 0x63, 0xa8, 0x78, 0xe0, 0x15, 0x5d, 0x3c, 0x29, 0xb7, 0x3d, 0x8a, 0xba, 0xd3, 0xbd, 0xce, 0xdd, 0xda, 0x99, 0xa9, 0x42, 0x0b, 0x23, 0xf1, 0xf4, 0x96, 0xdb, 0xf9, 0x8c, 0x02, 0x41, 0x12, 0xa5, 0xcc, 0xe7, 0x51, 0x8f, 0x51, 0xca, 0x93, 0x48, 0xed, 0xe2, 0xbf, 0xa7, 0x65, 0xf8, 0x4b, 0xdb, 0x82, 0xb8, 0x02, 0x14, 0xff, 0x07, 0x04, 0x80, 0xa6, 0x97, 0x0e, 0x79, 0xb5, 0xb8, 0xfb, 0xfd, 0x86, 0x71, 0x8b, 0x5e, 0x6f, 0xcf, 0x64, 0x3a, 0xe8, 0x7d, 0x56, 0xae, 0xeb, 0x95, 0xe3, 0xc7, 0xa1, 0xb6, 0xff, 0x39, 0x3a, 0x57, 0x14, 0x54, 0x1c, 0x5a, 0x49, 0x33, 0x41, 0xe4, 0x04, 0x37, 0xda, 0x6d, 0xad, 0xb4, 0x39, 0x13, 0xb6, 0xe9, 0xed, 0x34, 0xd8, 0x36, 0x2f, 0x3b, 0x9f, 0x89, 0x7d, 0xba, 0x28, 0x1a, 0x84, 0xba, 0x2a, 0x58, 0x43, 0x4f, 0x33, 0x22, 0x6e, 0x6f, 0x34, 0x3b, 0x10, 0x03, 0x40, 0xf8, 0x75, 0x3f, 0x91, 0x3c, 0x47, 0x2f, 0xcc, 0xa6, 0xf7, 0x93, 0x85, 0x09, 0x5e, 0xed, 0x06, 0x1d, 0xa5, 0xd8, 0x4c, 0x74, 0x62, 0x9b, 0x53, 0xaf, 0x03, 0xfe, 0x94, 0xf1, 0x70, 0x5d, 0xcb, 0x94, 0xec, 0xfa, 0xfd, 0x1b, 0x3c, 0x97, 0xba, 0x68, 0x0c, 0x45, 0xa0, 0x30, 0x8e, 0x77, 0x20, 0xab, 0x64, 0x5a, 0x85, 0x90, 0xc0, 0x69, 0x31, 0x40, 0xca, 0x3c, 0x2a, 0x41, 0x42, 0xa0, 0xd6, 0xef, 0x66, 0xed, 0x03, 0x6e, 0x16, 0x94, 0x2a, 0xe3, 0x36, 0xf8, 0xf5, 0xe4, 0x54, 0x7f, 0xfe, 0x2d, 0x8a, 0xe8, 0xda, 0x94, 0xa6, 0xdf, 0x56, 0x3f, 0x89, 0xce, 0x00, 0x14, 0xcd, 0xf7, 0xea, 0x71, 0xab, 0xc0, 0xaa, 0x1d, 0x1b, 0x4d, 0xa5, 0x7f, 0x3c, 0x54, 0x8e, 0x0e, 0xf7, 0x2d, 0x29, 0x09, 0xdf, 0x29, 0x55, 0x68, 0x5c, 0x25, 0x49, 0x12, 0x09, 0x5f, 0x1e, 0x50, 0x5a, 0x88, 0x8e, 0x82, 0x82, 0x1a, 0xfb, 0x11, 0x94, 0xeb, 0xb2, 0xa4, 0xe8, 0x03, 0x72, 0x97, 0xc0, 0xaa, 0x28, 0xa9, 0x2b, 0xc6, 0xfd, 0xf4, 0x2a, 0x64, 0x92, 0x23, 0x12, 0x95, 0x8a, 0xdf, 0x31, 0x7b, 0x4a, 0x8a, 0xb4, 0xa3, 0xfc, 0x30, 0xc8, 0x95, 0xda, 0xba, 0x00, 0xaa, 0xa9, 0x65, 0xf7, 0x1e, 0x83, 0x73, 0x36, 0x66, 0xda, 0x21, 0x58, 0xc4, 0xba, 0xd8, 0x6c, 0x18, 0x4e, 0xa7, 0x9a, 0xf9, 0xa6, 0xf1, 0x0a, 0x04, 0xb7, 0x63, 0x01, 0x74, 0xa4, 0x29, 0x4d, 0xf4, 0x3c, 0x62, 0xe4, 0xb1, 0xc3, 0xd1, 0xc8, 0xb2, 0xf5, 0xd5, 0x2d, 0x6c, 0x48, 0x9b, 0xde, 0x91, 0x72, 0x92, 0xdd, 0x2a, 0x2b, 0x1f, 0x49, 0xe5, 0x34, 0x93, 0x85, 0xb0, 0x98, 0x5a, 0x97, 0x86, 0x32, 0x74, 0xce, 0x89, 0x6f, 0x2a, 0xa8, 0x52, 0x55, 0xf9, 0xf2, 0x85, 0xc4, 0xd3, 0x31, 0xa8, 0xfc, 0x87, 0x41, 0x35, 0x60, 0x7d, 0x3c, 0xed, 0x7a, 0xa6, 0x9e, 0x70, 0x3e, 0xb3, 0xa6, 0x0b, 0x93, 0x85, 0xff, 0xd1, 0x0f, 0xe5, 0x9f, 0xed, 0x02, 0x76, 0xf0, 0x36, 0xb7, 0xe7, 0x2d, 0x04, 0xf6, 0x6d, 0x0f, 0x42, 0xcd, 0x71, 0xaa, 0xc5, 0x91, 0x86, 0x91, 0xdc, 0x1f, 0x9d, 0x41, 0x29, 0x67, 0x7c, 0xbd, 0xaf, 0x2c, 0x6c, 0x75, 0x2b, 0x05, 0x32, 0x6c, 0xa8, 0xa8, 0x41, 0x9a, 0x4e, 0x67, 0x2e, 0x90, 0x7b, 0xfb, 0x64, 0x5a, 0x15, 0x81, 0x19, 0xa9, 0x1e, 0xc2, 0x81, 0x32, 0x88, 0xb7, 0x41, 0x51, 0x4b, 0x4d, 0x26, 0xf2, 0xb6, 0x65, 0x17, 0xb1, 0x02, 0x1f, 0x48, 0x40, 0x2d, 0x58, 0xb1, 0x09, 0x06, 0x71, 0xbf, 0x15, 0x84, 0x52, 0x49, 0x2d, 0x5b, 0xaf, 0xc5, 0x3f, 0xd1, 0x8a, 0xbc, 0x03, 0xce, 0xfa, 0x7b, 0xdd, 0x33, 0x2a, 0x0c, 0x06, 0x6d, 0xa4, 0x64, 0xe7, 0x4a, 0xd0, 0xde, 0xc5, 0x0b, 0xb7, 0xe8, 0xa3, 0xba, 0x0d, 0xfc, 0x64, 0xbe, 0x6f, 0xd3, 0x31, 0xac, 0xe9, 0xd5, 0x1a, 0x60, 0xbb, 0xd3, 0x00, 0x4d, 0x5d, 0xf8, 0xb2, 0x11, 0xc0, 0xfd, 0x56, 0x4c, 0xd7, 0x9d, 0x0b, 0xb3, 0x56, 0x49, 0xcc, 0x60, 0xba, 0x1c, 0x97, 0x6c, 0x89, 0x11, 0xcf, 0xc0, 0xdb, 0x74, 0xe0, 0x28, 0x19, 0x96, 0x21, 0xaa, 0x05, 0xc5, 0xfe, 0x15, 0xfa, 0x7b, 0x56, 0xdc, 0x75, 0xd6, 0x22, 0x25, 0xd5, 0x48, 0x58, 0x1e, 0x5f, 0x90, 0x0f, 0x90, 0x85, 0xe9, 0xe3, 0xb6, 0x68, 0x81, 0x9b, 0x4f, 0x9b, 0x2c, 0x09, 0xf2, 0x2a, 0x5a, 0x32, 0xa2, 0xdb, 0x47, 0xaf, 0xa2, 0xb3, 0x71, 0x53, 0x8a, 0xbc, 0x4f, 0x0e, 0x9b, 0x06, 0x40, 0x11, 0x50, 0xec, 0xc2, 0x33, 0x35, 0x98, 0xe4, 0x94, 0xfc, 0xca, 0xfe, 0x80, 0xce, 0xd4, 0x9f, 0x96, 0xdf, 0xea, 0xc7, 0x29, 0x45, 0x98, 0x56, 0xe6, 0x0a, 0x94, 0xc5, 0xb7, 0x80, 0xb6, 0x14, 0xe8, 0xd4, 0x45, 0x03, 0x89, 0xe6, 0x74, 0x85, 0x13, 0x58, 0x2c, 0x72, 0x4e, 0xe6, 0x0c, 0x7c, 0x71, 0xf5, 0xaf, 0x64, 0x8b, 0x6e, 0x2d, 0x6e, 0x23, 0xcc, 0xe4, 0x12, 0x1b, 0x74, 0x78, 0xf4, 0xdb, 0x45, 0x18, 0x16, 0xab, 0x71, 0x03, 0x4c, 0x5f, 0x8b, 0x4b, 0xf1, 0x3a, 0xe1, 0xd9, 0xd9, 0x0d, 0x0b, 0xb2, 0x86, 0x9f, 0xc4, 0x79, 0x9f, 0x51, 0xf9, 0x34, 0x9d, 0x02, 0x20, 0x53, 0xc8, 0x31, 0xcb, 0xee, 0x62, 0x61, 0x7d, 0x4e, 0x22, 0xc2, 0xbc, 0xaf, 0xe4, 0x0d, 0x67, 0x44, 0x9e, 0xb0, 0x4a, 0x7c, 0x96, 0x2b, 0xf0, 0x84, 0xd2, 0xba, 0xb8, 0x0d, 0xd0, 0x34, 0x2b, 0x4f, 0x78, 0x33, 0x8d, 0x4d, 0x4f, 0x75, 0xb2, 0x5b, 0xed, 0x82, 0x14, 0xde, 0xb1, 0x8f, 0x22, 0x54, 0xb3, 0xa3, 0xda, 0x94, 0xfa, 0xf8, 0x99, 0x56, 0xf0, 0xa4, 0x32, 0xf5, 0x12, 0x78, 0x3e, 0x74, 0xec, 0x29, 0xb4, 0xc0, 0x45, 0xad, 0xba, 0x34, 0x97, 0xe8, 0xba, 0x62, 0xc2, 0x88, 0xb7, 0x11, 0x00, 0x2e, 0xe2, 0x82, 0x1c, 0xce, 0x68, 0xf8, 0xdf, 0x58, 0x8f, 0x76, 0xcc, 0x98, 0x01, 0xcb, 0x0d, 0x5b, 0x67, 0xcc, 0xac, 0xd3, 0x3a, 0xe1, 0x06, 0x3c, 0xd6, 0xc3, 0x7d, 0xc0, 0xd1, 0x83, 0x6e, 0x98, 0x8a, 0xcf, 0x63, 0x75, 0x05, 0x71, 0x89, 0x1e, 0xf6, 0x18, 0x64, 0x5a, 0x1b, 0x5b, 0xc1, 0x10, 0xcf, 0xfb, 0xec, 0xad, 0xdd, 0x68, 0x24, 0xc6, 0x92, 0x87, 0x4c, 0xff, 0x16, 0xb3, 0xe3, 0x2b, 0xfc, 0x02, 0x36, 0xb4, 0x17, 0xc9, 0xd4, 0x3d, 0x8f, 0x62, 0x43, 0x87, 0x35, 0x2c, 0xf1, 0x91, 0x14, 0xd4, 0x6d, 0x04, 0x48, 0xd3, 0xd7, 0xcd, 0x14, 0x38, 0x96, 0x0c, 0x2e, 0xa8, 0x48, 0x2d, 0x5d, 0xa3, 0xff, 0x54, 0x46, 0x08, 0xaa, 0xff, 0x83, 0xdc, 0xd1, 0xe7, 0xf6, 0x47, 0x86, 0x27, 0x5d, 0xdf, 0x98, 0x9f, 0x26, 0x2a, 0x09, 0x9b, 0x84, 0x5d, 0xc2, 0xb0, 0xc2, 0x6a, 0x86, 0xe7, 0xd8, 0x3a, 0x25, 0x1e, 0x3c, 0x37, 0xf2, 0xaa, 0xfa, 0x0e, 0x76, 0x41, 0x07, 0xb3, 0x66, 0x18, 0xd2, 0xa5, 0xd3, 0x48, 0x1d, 0x73, 0xa1, 0x76, 0x0b, 0x7f, 0x3a, 0xb3, 0x7a, 0x02, 0x83, 0xa1, 0x92, 0x50, 0x10, 0xd7, 0x9e, 0x5e, 0x94, 0x87, 0x1b, 0x81, 0x9b, 0x5e, 0x0f, 0x78, 0x7b, 0xac, 0x9d, 0xad, 0x87, 0xc5, 0xd5, 0xb8, 0x87, 0xa7, 0xd1, 0x25, 0x65, 0xdd, 0xfd, 0x77, 0x29, 0xa3, 0xb6, 0x6c, 0x27, 0x4a, 0x17, 0x83, 0x77, 0xde, 0x0f, 0xbc, 0xa6, 0x07, 0xb7, 0x9f, 0xab, 0x2d, 0xe3, 0x7f, 0x1d, 0xdf, 0xf8, 0x00, 0xa3, 0x76, 0xfd, 0xd7, 0xab, 0xf5, 0xf4, 0xd1, 0x5f, 0x34, 0x6a, 0x17, 0xd4, 0x3e, 0x4d, 0xb0, 0x85, 0xf7, 0xfe, 0x47, 0x01, 0x02, 0xa7, 0x2f, 0xe0, 0xe1, 0xcf, 0xa4, 0xfb, 0x5e, 0x2b, 0x54, 0xdd, 0x2a, 0xb7, 0x1e, 0x74, 0xc5, 0x06, 0x19, 0x0c, 0x9d, 0xd6, 0xd8, 0x7f, 0x7a, 0xe8, 0xec, 0xa5, 0x19, 0x0f, 0xab, 0x12, 0x17, 0x86, 0x30, 0x01, 0x12, 0x86, 0xa3, 0x8b, 0x0a, 0x18, 0xbb, 0x1d, 0x0d, 0x29, 0x80, 0x28, 0x13, 0xdc, 0x56, 0x1a, 0x27, 0x24, 0x37, 0x8e, 0xc7, 0x91, 0x40, 0xbf, 0x8e, 0x6a, 0x6f, 0x43, 0x10, 0xfd, 0xab, 0xf6, 0x06, 0x33, 0x04, 0x34, 0xab, 0x67, 0x3d, 0x4b, 0x65, 0x78, 0x87, 0x2f, 0xa8, 0x1d, 0x90, 0x70, 0x17, 0x79, 0xbc, 0x6a, 0xed, 0xf0, 0xb2, 0xbc, 0x9c, 0x38, 0x1b, 0xfb, 0xb4, 0xb3, 0xa6, 0xa7, 0x05, 0xfc, 0x50, 0x5d, 0x08, 0xc0, 0xe2, 0x4f, 0x7b, 0xcf, 0xbb, 0xf2, 0x4c, 0x72, 0xcf, 0xf6, 0xb8, 0x00, 0xf0, 0x7b, 0xb4, 0xac, 0x4d, 0x82, 0x8c, 0xa1, 0x38, 0xa1, 0xca, 0x51, 0x2c, 0xfc, 0x59, 0x09, 0x0e, 0x70, 0xea ],
-const [ 0xb0, 0x51, 0x7c, 0xc1, 0xd4, 0x6a, 0xe7, 0x9e, 0x22, 0x0c, 0x9e, 0xe7, 0x3a, 0x2a, 0x54, 0xd6, 0x7e, 0x6d, 0xa0, 0xf2, 0x68, 0x34, 0xf6, 0x32, 0x22, 0xd9, 0xd6, 0x65, 0x50, 0x36, 0x43, 0xd1, 0x30, 0x67, 0x77, 0x1b, 0xe6, 0xd2, 0xd5, 0x67, 0x11, 0x65, 0x1f, 0xbf, 0xa2, 0x1f, 0xe9, 0xb9, 0xee, 0xd2, 0x4e, 0x54, 0x02, 0x27, 0xe1, 0x24, 0x36, 0xe2, 0xe6, 0xaf, 0x05, 0x67, 0xc3, 0x16, 0x1b, 0x7d, 0xb1, 0xf8, 0xb0, 0x53, 0xb7, 0x93, 0x15, 0xc1, 0xd9, 0x2c, 0x8c, 0xcf, 0x8d, 0xb1, 0x5d, 0x7b, 0x6e, 0x9e, 0x26, 0xb7, 0x34, 0x1d, 0x73, 0xb2, 0xe4, 0x71, 0x8e, 0x58, 0x44, 0x94, 0x99, 0x1c, 0x92, 0x1f, 0xd9, 0xf5, 0x75, 0x6b, 0x55, 0xa6, 0x34, 0xf6, 0xa0, 0x43, 0x26, 0x08, 0xf3, 0xf1, 0x6a, 0x96, 0x7e, 0xed, 0xd7, 0x66, 0x00, 0xd0, 0x36, 0x74, 0x96, 0x11, 0xaf, 0x95, 0xd0, 0xcb, 0x82, 0x5a, 0x0a, 0xc0, 0xf8, 0x37, 0xfa, 0x9f, 0x98, 0xe4, 0x85, 0x82, 0x9d, 0x04, 0xd7, 0xbb, 0xa8, 0x05, 0xb2, 0xd0, 0xb3, 0x47, 0x06, 0xc4, 0x46, 0x80, 0xc3, 0x98, 0xed, 0x5f, 0xeb, 0x12, 0xe9, 0x6f, 0xeb, 0xbd, 0x26, 0x3f, 0x2b, 0x31, 0x6d, 0xc0, 0xe4, 0x94, 0xdb, 0xee, 0x32, 0x61, 0x92, 0xb2, 0x6a, 0x68, 0xae, 0x07, 0xad, 0x17, 0x7b, 0x5d, 0xbd, 0xf7, 0xe5, 0x3a, 0x10, 0x79, 0x2f, 0x27, 0x23, 0xf3, 0xe8, 0xca, 0x11, 0xe6, 0x1b, 0x50, 0x64, 0x82, 0xc7, 0x0e, 0x2b, 0x6c, 0x8e, 0x67, 0x4d, 0xbe, 0xb1, 0xf0, 0x1c, 0x50, 0x3c, 0xd2, 0x2d, 0x36, 0x7e, 0x70, 0x68, 0x89, 0xbc, 0x4a, 0x5b, 0x6b, 0x27, 0x21, 0xd3, 0x45, 0x0a, 0x5d, 0xae, 0x53, 0x48, 0xab, 0xeb, 0x63, 0x06, 0xea, 0x03, 0xd9, 0xa5, 0x48, 0x7c, 0xf7, 0xf3, 0xa8, 0xbb, 0x5b, 0xa2, 0x48, 0x1a, 0xc9, 0xf9, 0xa0, 0x3a, 0x2b, 0xc9, 0x8d, 0x9b, 0xd6, 0xa3, 0xae, 0x69, 0x0f, 0x48, 0x0e, 0x99, 0xce, 0x61, 0x04, 0x35, 0xc2, 0x70, 0x58, 0xf4, 0x94, 0x07, 0xa7, 0x0e, 0x70, 0x38, 0x09, 0x4e, 0xc2, 0x4c, 0xf0, 0x69, 0x3d, 0xb7, 0x54, 0x8e, 0x22, 0x4c, 0x0d, 0x3e, 0xbf, 0xae, 0x80, 0x5e, 0x36, 0x07, 0x7d, 0x8b, 0x7f, 0xfc, 0x68, 0xad, 0xb0, 0xe0, 0x97, 0xcf, 0x7c, 0x27, 0xfc, 0x2e, 0xfa, 0x1e, 0x04, 0x8f, 0xa8, 0xda, 0xbe, 0xd6, 0xb0, 0x6e, 0x40, 0xd5, 0x6a, 0x62, 0x47, 0x62, 0x21, 0x60, 0x1d, 0xac, 0x1a, 0x2f, 0xc0, 0xcf, 0xd2, 0xe6, 0x40, 0xa5, 0x88, 0x59, 0x69, 0xdf, 0xfb, 0xd8, 0xa2, 0x55, 0x75, 0x19, 0x15, 0x9b, 0x08, 0x72, 0x10, 0xd5, 0x18, 0x4b, 0xab, 0xcc, 0x1a, 0xd4, 0xac, 0x41, 0x9a, 0xf3, 0xa7, 0x81, 0x83, 0x81, 0x6a, 0x39, 0x9b, 0xb5, 0x98, 0x8c, 0x4d, 0xe0, 0x93, 0x63, 0xab, 0x5b, 0x9f, 0x04, 0xb3, 0xbe, 0x45, 0xe7, 0xd1, 0x53, 0xf6, 0xc4, 0xa6, 0xcb, 0xf1, 0xf1, 0x08, 0x2f, 0x67, 0xeb, 0x4a, 0x19, 0xdc, 0x33, 0xbd, 0x23, 0xd0, 0x5b, 0x76, 0xa0, 0x9f, 0x60, 0x52, 0x8a, 0xa6, 0x3a, 0x38, 0xbc, 0xa7, 0xb2, 0x9e, 0x61, 0x6e, 0x74, 0x4f, 0xad, 0xb5, 0x65, 0x6b, 0xcb, 0x46, 0x36, 0xaf, 0x16, 0x5f, 0x3a, 0xf6, 0x8b, 0x5a, 0x74, 0x00, 0x7e, 0x8d, 0xf5, 0x73, 0x8d, 0x70, 0x65, 0x1f, 0xd3, 0xfd, 0xdf, 0x86, 0x5e, 0x5d, 0x02, 0x9c, 0xe2, 0xc0, 0x44, 0xcb, 0xae, 0x8d, 0x8a, 0x3a, 0xe0, 0xbb, 0xf6, 0x4f, 0xd5, 0x7e, 0x00, 0x73, 0xe4, 0x27, 0xc9, 0x15, 0x4c, 0x45, 0xab, 0xf1, 0x6a, 0x11, 0x15, 0x92, 0x30, 0x09, 0x96, 0x15, 0xd2, 0xda, 0x37, 0x31, 0xc2, 0x83, 0x0e, 0x74, 0xdf, 0xb8, 0x10, 0xcf, 0xea, 0x84, 0x27, 0x55, 0x39, 0x33, 0x85, 0x40, 0xaf, 0x6f, 0x37, 0x35, 0xeb, 0xa9, 0xfd, 0xc9, 0xc0, 0xbb, 0x59, 0x43, 0xe5, 0xcb, 0xe6, 0xa3, 0xee, 0x72, 0xeb, 0xe4, 0x7b, 0x1d, 0x30, 0x7f, 0xb0, 0xb4, 0x10, 0x30, 0xe5, 0x7a, 0xd0, 0xfc, 0x9e, 0x35, 0x2f, 0x73, 0xbd, 0x8e, 0x3e, 0x33, 0xf6, 0xba, 0x72, 0xad, 0x84, 0x5a, 0xf8, 0x2c, 0x1a, 0xa0, 0x48, 0x13, 0x1d, 0xb4, 0xfd, 0x65, 0x10, 0x56, 0xe4, 0x8b, 0x50, 0xc4, 0x53, 0x52, 0x01, 0xde, 0xbc, 0x34, 0x48, 0x88, 0x81, 0xd8, 0xba, 0x50, 0x0a, 0xdc, 0x15, 0x51, 0x16, 0xd1, 0x2e, 0x56, 0x4e, 0x87, 0x2b, 0x43, 0x20, 0x8b, 0xf2, 0xb1, 0xca, 0xef, 0xe2, 0xd9, 0xb5, 0x49, 0xc0, 0xb3, 0x05, 0xfe, 0xf4, 0x5f, 0x6e, 0xc1, 0xf5, 0xc3, 0x49, 0x56, 0x02, 0x76, 0xe7, 0x9c, 0x13, 0xdc, 0x25, 0xca, 0x0f, 0x93, 0x40, 0xf9, 0x3f, 0x0e, 0xeb, 0xe3, 0x03, 0x80, 0x9f, 0xea, 0xc3, 0xfc, 0x33, 0x5c, 0x29, 0xda, 0xac, 0xf5, 0x8d, 0x5c, 0x56, 0xa5, 0xb1, 0x92, 0x14, 0x94, 0xaf, 0x7a, 0xf4, 0x64, 0x2f, 0x6c, 0x06, 0xb6, 0xdd, 0xb5, 0x6f, 0xef, 0x1b, 0x83, 0xb9, 0x3c, 0xf2, 0x01, 0x6d, 0xd3, 0x4f, 0xc2, 0xe4, 0x7c, 0x6c, 0x63, 0x5a, 0x50, 0x8c, 0x6c, 0x44, 0xc1, 0xeb, 0x78, 0xe3, 0xdb, 0xf5, 0x96, 0x1a, 0xca, 0xb6, 0xee, 0x7d, 0x9b, 0x92, 0xa8, 0xaa, 0x47, 0x36, 0x09, 0xdc, 0xed, 0xce, 0xdf, 0xbd, 0x5f, 0x78, 0x20, 0x7c, 0xe0, 0xf9, 0xce, 0x20, 0x2c, 0xb0, 0x1d, 0x1c, 0xb9, 0xc8, 0xd8, 0x23, 0x3d, 0xb1, 0x01, 0x3d, 0x70, 0xd0, 0xb8, 0x1b, 0x13, 0x75, 0x5d, 0xa7, 0x31, 0x0e, 0xf9, 0xe0, 0xa5, 0x9b, 0xda, 0xe5, 0xdc, 0x62, 0x7e, 0x4f, 0xdc, 0xe4, 0xb3, 0xc4, 0x85, 0x0f, 0xfb, 0xca, 0x17, 0xb5, 0x35, 0xd8, 0xf5, 0x3d, 0x7a, 0xb3, 0xa9, 0x99, 0x46, 0xf8, 0x27, 0x78, 0xd8, 0xf4, 0x56, 0xbc, 0xdb, 0xbc, 0xcc, 0x2e, 0x45, 0x7a, 0xd9, 0x70, 0x80, 0x06, 0xc8, 0x34, 0xc8, 0xb6, 0x61, 0xac, 0xd4, 0x76, 0xb3, 0x41, 0xb8, 0x1b, 0x10, 0x88, 0x0a, 0xf4, 0x58, 0x72, 0x43, 0xa2, 0x7b, 0xc3, 0x69, 0x2a, 0x39, 0xc5, 0xeb, 0x49, 0x2c, 0x3d, 0xcd, 0x08, 0x09, 0x9e, 0x04, 0x8f, 0x23, 0x7d, 0x24, 0x3e, 0x30, 0x45, 0x38, 0xfa, 0x50, 0x2c, 0xf1, 0xc5, 0x4b, 0x65, 0x04, 0x92, 0x1a, 0x97, 0xcd, 0x57, 0xaa, 0x8f, 0x38, 0x63, 0xdc, 0x32, 0xe1, 0xf2, 0xd0, 0xb5, 0x7a, 0xff, 0x63, 0x10, 0x6e, 0x59, 0xf6, 0xaf, 0xc3, 0xf9, 0x72, 0x6b, 0x45, 0x93, 0x88, 0xba, 0xe1, 0x6b, 0x3e, 0x22, 0x4f, 0x6a, 0xa7, 0xf4, 0xf4, 0x71, 0xf1, 0x36, 0x06, 0xed, 0xa6, 0xe1, 0xf1, 0xac, 0x2b, 0x4d, 0xf9, 0xef, 0x8d, 0xe9, 0x21, 0xc0, 0x7c, 0x2f, 0x4c, 0x85, 0x98, 0xd7, 0xa3, 0xd6, 0xec, 0x4b, 0x36, 0x8c, 0xb8, 0x5c, 0xe6, 0x1a, 0x74, 0x33, 0x82, 0x21, 0x11, 0x8a, 0x30, 0x3e, 0x82, 0x1c, 0x0f, 0x27, 0x7b, 0x59, 0x1a, 0xf6, 0x79, 0x5f, 0x50, 0xc4, 0x02, 0x26, 0x12, 0x7a, 0x2e, 0xfa, 0xcc, 0xe4, 0x66, 0x2f, 0xd7, 0x07, 0x6c, 0x10, 0x9e, 0xb5, 0x9b, 0x18, 0x00, 0x5e, 0x71, 0x65, 0xf6, 0x29, 0x4a, 0x69, 0x76, 0x43, 0x6e, 0xe3, 0x97, 0x77, 0x4e, 0x0d, 0xf5, 0x00, 0x0b, 0x17, 0x57, 0x9b, 0x38, 0xd5, 0x8f, 0xe0, 0xe1, 0xb5, 0xa2, 0xd1, 0xcc, 0xf3, 0x29, 0xb4, 0xfe, 0x10, 0xf7, 0x1e, 0x81, 0x80, 0xfc, 0x51, 0x65, 0xa3, 0x69, 0xc7, 0x05, 0xf6, 0x15, 0x0f, 0x8c, 0x8b, 0x20, 0xd8, 0xb7, 0xb6, 0xd6, 0x4c, 0xdc, 0x0a, 0xd6, 0x9f, 0x2b, 0x83, 0x73, 0xe7, 0x34, 0x05, 0x5a, 0x2e, 0xa9, 0x05, 0x75, 0xc5, 0x65, 0x86, 0x10, 0xdc, 0xae, 0x48, 0x3b, 0x50, 0xb7, 0x3c, 0x6f, 0xc4, 0x69, 0x3a, 0x74, 0xf3, 0x63, 0xf6, 0x81, 0x44, 0x40, 0x31, 0xa6, 0xa0, 0x18, 0x2c, 0x67, 0x80, 0x49, 0x62, 0xaa, 0x4a, 0x77, 0x76, 0xd3, 0xdd, 0xd1, 0x6b, 0x2d, 0x6a, 0x96, 0x13, 0x8c, 0x87, 0xd8, 0xca, 0x30, 0x7e, 0x81, 0x64, 0xed, 0xeb, 0x93, 0x63, 0x89, 0x86, 0xb4, 0x6d, 0x66, 0x3d, 0xe9, 0xfe, 0x60, 0x86, 0xa2, 0x5b, 0xf9, 0xf3, 0xf7, 0xc7, 0xb4, 0x06, 0x31, 0xf8, 0xbe, 0x48, 0x8c, 0xcc, 0xd3, 0x95, 0x3b, 0x39, 0x60, 0xba, 0xad, 0x82, 0xe5, 0x42, 0x0f, 0xb1, 0x9e, 0x8c, 0x12, 0x41, 0x62, 0x21, 0xee, 0x1b, 0xcb, 0x45, 0xa7, 0xc4, 0x97, 0xcc, 0x8e, 0xd4, 0x4e, 0x2f, 0x0c, 0xaa, 0x25, 0xdf, 0x9b, 0x5e, 0x23, 0xd9, 0x15, 0xf7, 0x82, 0x7b, 0x31, 0xde, 0x58, 0x96, 0x4a, 0x93, 0x77, 0xc4, 0x63, 0x9f, 0x91, 0xfc, 0x69, 0xca, 0xa0, 0x63, 0xb7, 0x8d, 0x84, 0x65, 0xe0, 0xca, 0xee, 0x05, 0xa8, 0xbb, 0x7e, 0x71, 0x53, 0x29, 0x28, 0xda, 0x23, 0xde, 0xdc, 0x82, 0x1c, 0x5c, 0x66, 0x17, 0x0a, 0xcf, 0x93, 0x3f, 0xc5, 0x41, 0x95, 0x74, 0xb4, 0x0d, 0xa8, 0x12, 0x90, 0x96, 0xf6, 0xae, 0x6a, 0x38, 0xb8, 0xaa, 0xf0, 0x7f, 0x9f, 0x06, 0xec, 0x97, 0x72, 0x79, 0x0d, 0x04, 0xf8, 0xc1, 0xea, 0x93, 0x18, 0x37, 0x44, 0x91, 0x3f, 0xa6, 0x8b, 0x3a, 0x02, 0x5d, 0xa4, 0x74, 0x05, 0x83, 0xea, 0xbe, 0x1b, 0xab, 0x73, 0x63, 0xae, 0xa8, 0x94, 0xf3, 0x62, 0xa3, 0xa7, 0xf3, 0xf5, 0x6b, 0x0b, 0xd4, 0x6a, 0x0b, 0x6d, 0x22, 0x66, 0xa2, 0x46, 0xfe, 0xda, 0x6f, 0xa5, 0xce, 0xe2, 0x2c, 0x2f, 0x33, 0xed, 0x9d, 0x64, 0x3c, 0x1f, 0x68, 0x24, 0xd9, 0xf3, 0x27, 0x71, 0x92, 0x25, 0xbc, 0x76, 0x78, 0xcf, 0xe4, 0xc8, 0x5c, 0xd2, 0x10, 0xed, 0x40, 0x77, 0x70, 0x1b, 0x0b, 0x56, 0x50, 0x41, 0x81, 0x77, 0xa7, 0x4c, 0x71, 0xb8, 0xed, 0xa3, 0x30, 0x6e, 0x2e, 0xf3, 0x47, 0x4f, 0x5d, 0x32, 0x69, 0x90, 0xea, 0xde, 0xa8, 0x4a, 0x96, 0x86, 0xe8, 0x22, 0x87, 0x8c, 0x93, 0x29, 0x97, 0x29, 0x8e, 0x01, 0xf2, 0xb1, 0x6c, 0x42, 0xe0, 0x19, 0xe2, 0x1b, 0xdf, 0xb6, 0x7b, 0x3d, 0xf5, 0x47, 0x8d, 0xf4, 0x44, 0x36, 0x6c, 0x97, 0xdf, 0x1b, 0xdd, 0x23, 0xdc, 0x82, 0xce, 0x23, 0xab, 0xee, 0x44, 0xd3, 0xa6, 0x1e, 0x94, 0x84, 0xe8, 0x8e, 0xd6, 0x42, 0x63, 0x41, 0x97, 0xb5, 0x2d, 0xbe, 0xce, 0x45, 0x1b, 0x59, 0x11, 0x81, 0x91, 0xb3, 0x09, 0xc2, 0x98, 0x84, 0x24, 0x0b, 0x31, 0x98, 0x89, 0x34, 0xea, 0x18, 0x51, 0x48, 0xae, 0x0b, 0xf4, 0x2b, 0xe1, 0x1c, 0x01, 0x80, 0xad, 0x9e, 0x13, 0xc9, 0x96, 0xcd, 0x00, 0xd0, 0x55, 0x57, 0x53, 0x47, 0xe3, 0x1b, 0xfd, 0xab, 0xd4, 0x30, 0x47, 0x6e, 0xe6, 0x29, 0x0b, 0x54, 0xda, 0x97, 0x24, 0x1e, 0x82, 0xd0, 0x23, 0x66, 0x1c, 0xef, 0x43, 0xca, 0xde, 0x1c, 0xa0, 0x4c, 0xd2, 0x0e, 0xa3, 0xf9, 0xe4, 0xcd, 0xc1, 0xc9, 0x3a, 0xbd, 0x65, 0xc7, 0xc3, 0xd8, 0x2a, 0x71, 0x13, 0x3b, 0x4e, 0x62, 0x6e, 0xe4, 0x64, 0x2e, 0x22, 0xba, 0x48, 0x8e, 0x1a, 0xcd, 0x58, 0xbd, 0xb1, 0xe0, 0xe1, 0x21, 0xc4, 0x25, 0xd8, 0x2e, 0x0b, 0x47, 0xcb, 0x88, 0xa9, 0xad, 0x16, 0x67, 0x01, 0xfe, 0x5a, 0x40, 0xcc, 0xe0, 0x2b, 0xa2, 0x68, 0x06, 0x09, 0x5e, 0x73, 0x69, 0x92, 0xea, 0x99, 0xd5, 0xf5, 0x07, 0xaa, 0xa8, 0xaa, 0xa2, 0xf0, 0xd7, 0x61, 0xf8, 0xbf, 0x31, 0x38, 0xfe, 0x4d, 0xe8, 0x30, 0x00, 0xc4, 0x4d, 0xe2, 0x88, 0x96, 0xdb, 0x6e, 0x81, 0x11, 0x77, 0xb5, 0x9c, 0x33, 0xf6, 0xc8, 0xf3, 0xbf, 0xe0, 0x9f, 0xed, 0x90, 0x73, 0x0f, 0x61, 0x2e, 0xeb, 0xf6, 0xfe, 0x9f, 0x01, 0xb9, 0xea, 0x80, 0xb2, 0xf0, 0xa9, 0x54, 0x41, 0x5f, 0x41, 0x1b, 0x7f, 0x29, 0x9b, 0x27, 0x4a, 0x40, 0x2d, 0x2b, 0x54, 0x20, 0xd6, 0x95, 0x26, 0xbd, 0x09, 0x1d, 0x64, 0xb9, 0x2e, 0x9e, 0x52, 0xdb, 0x45, 0x25, 0x97, 0xbd, 0xcd, 0x48, 0x41, 0xc4, 0xe4, 0xba, 0x0a, 0x55, 0xaf, 0x1c, 0xd9, 0x46, 0xfc, 0x15, 0x8c, 0x93, 0x26, 0xa4, 0xf5, 0x53, 0x39, 0xb5, 0x22, 0xea, 0x57, 0xf3, 0xe2, 0x7f, 0x5b, 0xde, 0x84, 0xb1, 0xbb, 0x1d, 0xe2, 0x85, 0xb3, 0x15, 0x9f, 0xa3, 0xa0, 0xba, 0xac, 0xc3, 0xaa, 0xa5, 0x11, 0x62, 0xa5, 0x68, 0xea, 0xb9, 0x39, 0x1e, 0xaf, 0xef, 0x41, 0x46, 0xb9, 0x8e, 0x72, 0xd1, 0x02, 0x34, 0x3d, 0x79, 0x2d, 0x8b, 0xf6, 0x55, 0xc6, 0x7a, 0x35, 0xaa, 0xca, 0x9d, 0x7d, 0x05, 0x6a, 0xf3, 0x1b, 0x86, 0x0c, 0xd7, 0x51, 0x7f, 0x93, 0x32, 0xb4, 0x3e, 0xe0, 0xee, 0xd3, 0x26, 0x98, 0xae, 0x19, 0x05, 0x28, 0xbc, 0xf5, 0xa1, 0x07, 0x42, 0x37, 0x94, 0x3b, 0xbe, 0xbe, 0x5a, 0x1f, 0xb0, 0x50, 0xa9, 0x63, 0x95, 0xc9, 0x00, 0x54, 0x19, 0x78, 0x83, 0x5e, 0x89, 0xc6, 0x06, 0xcf, 0x87, 0x18, 0x68, 0xdd, 0x01, 0xf7, 0x22, 0xeb, 0x64, 0x6f, 0x1f, 0x08, 0x0c, 0xb4, 0xcf, 0xb9, 0x00, 0x0c, 0x77, 0xf8, 0xdc, 0xe8, 0xcb, 0x7c, 0x0e, 0x54, 0xbe, 0x3b, 0x45, 0x92, 0x99, 0x2e, 0x27, 0x02, 0x4a, 0x54, 0x43, 0x46, 0xff, 0xf9, 0x46, 0xa2, 0xf4, 0x38, 0x71, 0xa9, 0x89, 0xbf, 0x4a, 0x16, 0x98, 0xd2, 0x92, 0xf8, 0x05, 0x93, 0x78, 0x12, 0x97, 0x80, 0x0c, 0x81, 0x06, 0x3d, 0xf6, 0x9f, 0x55, 0x94, 0x68, 0x28, 0x61, 0xba, 0x51, 0x9b, 0xbb, 0xd3, 0xd4, 0xe3, 0xb3, 0xb9, 0xf8, 0x37, 0xb5, 0xf9, 0xa1, 0x3f, 0xd9, 0x1f, 0xbf, 0x78, 0xb5, 0x34, 0xc5, 0xd9, 0x76, 0x84, 0x5d, 0xb7, 0x2f, 0xa5, 0x59, 0xe6, 0x70, 0xb4, 0xed, 0x21, 0x1b, 0xe2, 0x1c, 0xab, 0x73, 0x2f, 0x71, 0x37, 0x76, 0x76, 0xef, 0x06, 0x6d, 0xaa, 0x4a, 0x4f, 0xc1, 0x5f, 0x58, 0xe3, 0x10, 0x8c, 0xc2, 0x11, 0x80, 0x8f, 0xff, 0xc7, 0x53, 0x71, 0x83, 0xfb, 0xbc, 0x6c, 0x33, 0x49, 0xf1, 0xaa, 0x1d, 0xde, 0x82, 0x50, 0x66, 0x94, 0xe9, 0xbb, 0x83, 0x5e, 0x62, 0x09, 0xac, 0xe7, 0xfd, 0xdc, 0x8e, 0x76, 0xf1, 0x5a, 0x41, 0x15, 0x33, 0x79, 0x79, 0xf2, 0x47, 0x79, 0x00, 0x05, 0x57, 0xb2, 0x64, 0xf3, 0x82, 0x8f, 0xed, 0x33, 0x76, 0xdb, 0xd1, 0x6f, 0x41, 0x3b, 0xab, 0x2d, 0x64, 0xfc, 0x2a, 0xae, 0x29, 0x0f, 0x06, 0x16, 0x37, 0x52, 0x39, 0xce, 0x64, 0x12, 0x6b, 0x27, 0xca, 0xcd, 0xae, 0x40, 0x1d, 0x3c, 0x6b, 0x29, 0x3c, 0x90, 0x9c, 0x48, 0x05, 0xfd, 0x3c, 0xfc, 0x6e, 0x75, 0xfc, 0x81, 0xd1, 0xb6, 0x38, 0x14, 0x88, 0x86, 0x29, 0x57, 0xba, 0x3d, 0x5c, 0xf6, 0x74, 0x85, 0x63, 0x8b, 0xfc, 0x5e, 0xca, 0xbf, 0x62, 0x65, 0x4d, 0xb2, 0x57, 0x55, 0x47, 0x9e, 0x42, 0xce, 0x6e, 0xb7, 0x91, 0x55, 0xbe, 0x55, 0x4d, 0x9d, 0xb3, 0x54, 0xf2, 0x04, 0xbb, 0xbb, 0x7d, 0x61, 0xeb, 0x9d, 0xc6, 0xfd, 0xf1, 0x3d, 0x10, 0xdf, 0x4a, 0x75, 0xdf, 0x4d, 0xb5, 0x59, 0x0a, 0x8f, 0xe7, 0x17, 0x10, 0xf6, 0x80, 0x22, 0xaf, 0x1d, 0x3e, 0x8f, 0xb3, 0x6f, 0x70, 0xbf, 0x0d, 0xe9, 0xae, 0x3e, 0x24, 0x21, 0xc8, 0xeb, 0x70, 0x88, 0xfc, 0x59, 0x44, 0xec, 0x6c, 0x76, 0xeb, 0x41, 0xcf, 0x6a, 0xf7, 0xa0, 0x66, 0xc2, 0xd6, 0x90, 0x31, 0xce, 0xa6, 0x85, 0x64, 0x47, 0x4a, 0xa6, 0x15, 0x35, 0xbe, 0xd3, 0x37, 0x10, 0xa7, 0xe7, 0xcb, 0x26, 0x2f, 0x3a, 0x55, 0x3c, 0x0f, 0x6b, 0x8d, 0x78, 0xed, 0x5c, 0x58, 0x7f, 0xe9, 0x7d, 0xf6, 0xda, 0x73, 0x4e, 0x7d, 0x9e, 0x5f, 0x1f, 0x86, 0x4c, 0x3b, 0x1a, 0x26, 0xf6, 0xe0, 0x84, 0x20, 0xa3, 0x47, 0x40, 0x58, 0xf5, 0x9e, 0x95, 0x8b, 0x09, 0x9b, 0x31, 0x3e, 0x9f, 0x11, 0x6d, 0xf4, 0x7b, 0xc1, 0xd2, 0xa4, 0x0b, 0x72, 0xdc, 0x6a, 0x49, 0x44, 0xff, 0x7d, 0xe3, 0x41, 0xe8, 0x61, 0x99, 0x35, 0x05, 0x5e, 0xe7, 0xbf, 0x47, 0x30, 0xe5, 0xa9, 0x27, 0x00, 0x6b, 0x75, 0xe7, 0x93, 0x78, 0x38, 0x1a, 0xc2, 0xd5, 0xac, 0x66, 0x2a, 0xf5, 0x80, 0x89, 0x24, 0x20, 0xf2, 0x9a, 0xf8, 0xd1, 0xa0, 0x91, 0x4d, 0x5c, 0x9b, 0x0a, 0xe4, 0xd3, 0xbe, 0x46, 0x86, 0x2b, 0x3e, 0x73, 0x3b, 0x9b, 0x81, 0x2d, 0xbd, 0x45, 0x34, 0x44, 0x2c, 0x18, 0x98, 0xc0, 0x03, 0xf5, 0x1c, 0x22, 0x4b, 0x10, 0x31, 0xed, 0x0f, 0x9a, 0x5a, 0x65, 0x0f, 0x9d, 0x82, 0x97, 0xb8, 0x27, 0x93, 0x99, 0x54, 0xaa, 0x44, 0x13, 0x7f, 0xa3, 0x33, 0xfe, 0xda, 0x7a, 0x33, 0xac, 0x03, 0xa9, 0xe7, 0x09, 0xc4, 0x21, 0x90, 0x20, 0x8a, 0xe9, 0x23, 0xe1, 0x19, 0x09, 0x9f, 0x21, 0x7f, 0xa6, 0x9d, 0xe2, 0x46, 0x6e, 0x28, 0xd5, 0xee, 0x37, 0xd0, 0x1d, 0x9b, 0xe2, 0xfa, 0x56, 0x0a, 0x86, 0x7a, 0xd6, 0xc9, 0xcb, 0x64, 0x32, 0xa8, 0x93, 0x1e, 0x04, 0x6b, 0xe0, 0xba, 0xec, 0xc1, 0xf2, 0x83, 0xd5, 0x7a, 0xaf, 0xd6, 0x7a, 0xf4, 0x48, 0x34, 0x28, 0xd6, 0x1a, 0x94, 0xc5, 0x01, 0xd2, 0xfe, 0x11, 0xc4, 0xd5, 0x55, 0x2c, 0x4f, 0xdf, 0x75, 0x59, 0x6b, 0xe9, 0x7e, 0x01, 0x68, 0x51, 0x6e, 0xfb, 0x56, 0x35, 0xf6, 0x0a, 0x78, 0x1f, 0x86, 0xa7, 0xf5, 0xe8, 0xab, 0x01, 0xd1, 0xd6, 0x9a, 0x43, 0x1c, 0x08, 0x0d, 0x15, 0x69, 0x14, 0x4d, 0x65, 0x82, 0xee, 0x90, 0x67, 0x5a, 0x0c, 0x86, 0xda, 0x43, 0xc7, 0x2f, 0x8e, 0x61, 0x05, 0xef, 0x23, 0x5f, 0x15, 0xe4, 0x13, 0x60, 0xda, 0x77, 0xf3, 0x39, 0x2c, 0x31, 0xf5, 0xdd, 0x7b, 0xd1, 0xb2, 0x18, 0xb5, 0x9b, 0x26, 0x81, 0x6a, 0xf2, 0xfc, 0xaa, 0x2f, 0x29, 0x0c, 0x99, 0x40, 0x97, 0x23, 0x7c, 0x69, 0xe9, 0x02, 0x98, 0x26, 0xbc, 0xa9, 0x83, 0x09, 0x6c, 0xd5, 0x93, 0x5c, 0x26, 0xc7, 0x96, 0x08, 0x45, 0x47, 0xc3, 0xb5, 0xdb, 0xe9, 0xf1, 0x33, 0x8d, 0x8f, 0x07, 0x18, 0xa5, 0x2f, 0xb4, 0xab, 0x62, 0xd6, 0x60, 0x01, 0x92, 0xed, 0x62, 0x66, 0x63, 0xbc, 0x73, 0xff, 0x77, 0x2c, 0x62, 0xad, 0x36, 0xd1, 0x0a, 0x33, 0x68, 0x27, 0x82, 0x9c, 0x03, 0x1c, 0x93, 0xd7, 0x41, 0xcf, 0x6f, 0xa5, 0xf6, 0x98, 0x9f, 0xb5, 0x21, 0x48, 0x3e, 0x0c, 0xc1, 0xb2, 0x65, 0xab, 0xea, 0x6a, 0xe6, 0x6c, 0x17, 0xcc, 0x3d, 0x2e, 0xc2, 0x40, 0xc3, 0x31, 0x32, 0xbd, 0x25, 0xc3, 0x95, 0x8c, 0x15, 0x1d, 0x4e, 0x4f, 0x3f, 0x88, 0x90, 0x41, 0x7f, 0xc4, 0x2c, 0xbf, 0x51, 0xa9, 0xa7, 0x08, 0x89, 0x0f, 0x90, 0x41, 0x44, 0xec, 0x10, 0xbc, 0x1e, 0xbc, 0xc3, 0x79, 0xa5, 0x26, 0xc6, 0xed, 0x0e, 0xdc, 0x12, 0x03, 0x27, 0xc3, 0x08, 0x61, 0x8d, 0x54, 0x4c, 0xec, 0x1f, 0x42, 0xd7, 0x8e, 0xb2, 0x5c, 0x48, 0x37, 0x07, 0xb6, 0x7b, 0x21, 0xfa ],
-const [ 0x5e, 0x9d, 0x7b, 0x80, 0x3f, 0x8a, 0x40, 0xca, 0xdd, 0x83, 0x20, 0x0a, 0xbc, 0x49, 0xe7, 0xae, 0x24, 0x56, 0x35, 0xa7, 0xd1, 0xc2, 0xd1, 0x6d, 0xec, 0x67, 0x40, 0x44, 0x3a, 0x44, 0x97, 0xbf, 0x94, 0x1f, 0x8d, 0x82, 0x97, 0x6e, 0xd4, 0x4b, 0x9c, 0x78, 0xaa, 0x34, 0xea, 0xb8, 0xab, 0x32, 0x2b, 0x82, 0xe9, 0xe2, 0x1d, 0xe9, 0x3e, 0x85, 0x8a, 0xdf, 0xe1, 0x48, 0x7a, 0x9e, 0x38, 0xca, 0xa7, 0x47, 0xed, 0xd8, 0x31, 0xc9, 0x44, 0x7b, 0x93, 0x05, 0xac, 0x34, 0xd6, 0x30, 0x94, 0x86, 0x05, 0x78, 0x7f, 0xb5, 0xe0, 0xea, 0x5b, 0xce, 0xd4, 0x93, 0x0e, 0xe7, 0x2b, 0xe5, 0x53, 0xa8, 0x81, 0x5d, 0xc4, 0x0a, 0x77, 0x63, 0x37, 0x5f, 0xab, 0x72, 0x4e, 0x93, 0xe7, 0x78, 0x4a, 0xb1, 0x98, 0x80, 0x20, 0xa8, 0x82, 0x8e, 0xcf, 0x50, 0xb3, 0xca, 0xf0, 0xa8, 0xb5, 0xe1, 0x8f, 0x62, 0x08, 0xa9, 0x39, 0xa1, 0xcf, 0x04, 0x56, 0x01, 0xca, 0x06, 0xba, 0xd8, 0x84, 0x5a, 0x76, 0xbb, 0xce, 0xe1, 0xf4, 0x44, 0x6b, 0x9d, 0x43, 0x13, 0x0d, 0xce, 0xaf, 0x13, 0x81, 0x5a, 0x95, 0xfe, 0x26, 0x72, 0x75, 0x24, 0xa3, 0x73, 0x49, 0x68, 0xd9, 0x0a, 0x15, 0x8b, 0x17, 0x9c, 0xc0, 0xad, 0x8d, 0xe5, 0x22, 0x10, 0x04, 0xdf, 0x5e, 0x20, 0xcc, 0xe5, 0x72, 0xb0, 0xf5, 0x18, 0x0c, 0x87, 0xc2, 0x02, 0xa0, 0x1b, 0x5a, 0x79, 0xb7, 0x9c, 0xc1, 0xc6, 0x8a, 0x34, 0x07, 0x07, 0xcf, 0x8e, 0xbf, 0xd2, 0xd3, 0x95, 0xb3, 0x1b, 0xc9, 0x7e, 0xd6, 0x58, 0x61, 0x08, 0x7a, 0xe2, 0x9d, 0x02, 0xc3, 0x9f, 0xe1, 0x0e, 0x5c, 0xde, 0x49, 0xa6, 0x68, 0x82, 0x3e, 0x5c, 0xbc, 0x63, 0x4c, 0x66, 0x4b, 0xf1, 0x2e, 0x59, 0xe1, 0x1b, 0x2b, 0x35, 0x15, 0x6f, 0xa6, 0xa2, 0x79, 0x82, 0xf0, 0x79, 0x13, 0x92, 0x60, 0x86, 0x11, 0x6a, 0xa6, 0x8d, 0xb8, 0x86, 0x5c, 0x8a, 0x9e, 0x78, 0xde, 0x3d, 0x19, 0x8a, 0x5c, 0xe6, 0xf7, 0xa5, 0x2d, 0x4e, 0x6f, 0x71, 0x66, 0x06, 0x58, 0xbe, 0xac, 0xf3, 0x99, 0x23, 0x46, 0x0b, 0xe1, 0xe4, 0x76, 0x59, 0x98, 0x19, 0x0a, 0x47, 0x15, 0x0d, 0x2e, 0x1c, 0x11, 0xe5, 0x84, 0xc4, 0x5b, 0x82, 0x77, 0xd0, 0xce, 0xa8, 0xcc, 0xbd, 0x81, 0x5f, 0x79, 0x79, 0x3d, 0x99, 0xbb, 0x23, 0x34, 0x16, 0x63, 0x12, 0xef, 0x85, 0x70, 0x1a, 0x89, 0xec, 0xe3, 0x0a, 0x1b, 0x49, 0xcf, 0x79, 0x77, 0x7a, 0xb0, 0xc3, 0x19, 0x5a, 0xfd, 0x4e, 0x5a, 0x2d, 0x01, 0x12, 0xe7, 0x3e, 0xe6, 0x58, 0x72, 0xc6, 0x13, 0xc1, 0xa7, 0x10, 0xb8, 0x8b, 0x62, 0xdb, 0xa6, 0x10, 0x1f, 0x00, 0x65, 0x8f, 0xb2, 0x54, 0x80, 0x2f, 0x38, 0xd0, 0x24, 0x41, 0x4d, 0xef, 0xe9, 0xc6, 0x7f, 0x58, 0xf0, 0x31, 0x03, 0xbd, 0x2e, 0x6e, 0xa7, 0x03, 0x07, 0x22, 0x08, 0xa3, 0x1f, 0x35, 0x05, 0x50, 0x6d, 0x8e, 0x73, 0xda, 0x91, 0x1d, 0x12, 0x52, 0x67, 0x1f, 0xc0, 0x6f, 0xdc, 0x9d, 0xed, 0x30, 0x00, 0x36, 0x4f, 0xc3, 0x5d, 0x1f, 0xd7, 0xa6, 0x88, 0x68, 0xe3, 0x0c, 0xf5, 0x81, 0xb5, 0x82, 0x0f, 0xfc, 0x24, 0xd2, 0x88, 0x94, 0x91, 0x27, 0xee, 0x6f, 0x1d, 0x73, 0x80, 0xa0, 0x19, 0x0e, 0x3f, 0xf0, 0xbf, 0xa0, 0x48, 0xde, 0x1f, 0x40, 0x60, 0xe4, 0x5b, 0xdd, 0xd1, 0xfc, 0x17, 0xdd, 0x75, 0x63, 0x2c, 0x05, 0x10, 0x9d, 0x9c, 0x99, 0xe2, 0xb9, 0xcb, 0xc4, 0x7d, 0xd6, 0xec, 0x39, 0xd5, 0xe6, 0xb9, 0x1b, 0x96, 0xb2, 0x67, 0x1b, 0xba, 0x1f, 0xd9, 0xe0, 0x5a, 0xaf, 0x14, 0xab, 0xc4, 0x4a, 0xf3, 0x3b, 0xcf, 0x3f, 0x1b, 0xee, 0x6b, 0x86, 0x32, 0x2a, 0x7c, 0x48, 0x4c, 0xfb, 0xe9, 0xa0, 0xa6, 0xfd, 0xef, 0xa4, 0x97, 0x7d, 0xbc, 0x9f, 0xc3, 0xdb, 0x39, 0xa1, 0x92, 0x32, 0x27, 0x3a, 0xe1, 0x3b, 0x6d, 0x82, 0xf7, 0x6f, 0xb0, 0x5c, 0xba, 0x6c, 0x25, 0xfc, 0x22, 0x9a, 0xa3, 0xa7, 0xef, 0x0e, 0xfd, 0xba, 0x97, 0xaf, 0x8e, 0xee, 0x83, 0x97, 0x15, 0xda, 0x7a, 0xbc, 0xc4, 0xba, 0x5e, 0xcf, 0x93, 0x6e, 0x16, 0x64, 0xda, 0xc6, 0xcb, 0x54, 0x1f, 0xfc, 0x57, 0x5f, 0x2c, 0x82, 0xfa, 0x16, 0x65, 0xfe, 0x4f, 0xf9, 0x59, 0x94, 0x7f, 0xdc, 0x97, 0x63, 0xb5, 0x8f, 0xc3, 0x52, 0xd2, 0xbd, 0xe9, 0x0c, 0x61, 0x15, 0x10, 0x49, 0xcd, 0xa8, 0x13, 0x50, 0xd1, 0x92, 0xac, 0xb9, 0x31, 0xdd, 0xd2, 0x78, 0xa8, 0xa2, 0x45, 0x17, 0x21, 0x71, 0x67, 0x43, 0x2a, 0xf3, 0x4d, 0x8a, 0xa5, 0xce, 0x16, 0x63, 0xc0, 0xc9, 0x7b, 0x6f, 0x28, 0x31, 0xa8, 0xfe, 0x7a, 0x7b, 0x4a, 0xd5, 0xfb, 0x2a, 0xea, 0x2f, 0x88, 0xf4, 0x79, 0x01, 0xd0, 0x20, 0x2c, 0x82, 0xc0, 0x32, 0x8a, 0xeb, 0x3f, 0xca, 0xc3, 0x7b, 0x1c, 0xca, 0x43, 0xbf, 0x44, 0xb7, 0x87, 0x10, 0x39, 0x62, 0x2f, 0x5d, 0xbf, 0xc7, 0x55, 0x2b, 0xd9, 0x35, 0x1e, 0xd9, 0xf3, 0xaf, 0x8e, 0x29, 0x61, 0x93, 0xa1, 0xfc, 0x08, 0x79, 0x97, 0x5d, 0x5b, 0x5e, 0x8f, 0xc1, 0x8a, 0x02, 0x57, 0x8d, 0xf5, 0x8e, 0x83, 0xd9, 0xe7, 0x7a, 0xbc, 0x74, 0x81, 0xae, 0x5b, 0x28, 0xf4, 0xe7, 0x37, 0x3f, 0xf4, 0x5d, 0xba, 0x45, 0x69, 0xa3, 0x3b, 0x10, 0x67, 0xce, 0x87, 0xfe, 0x60, 0xd9, 0xc1, 0x7e, 0x98, 0x48, 0x6d, 0xd2, 0xda, 0x0c, 0xc7, 0x13, 0x6a, 0xa7, 0x59, 0x75, 0x3a, 0x90, 0xcc, 0xcc, 0x60, 0xd9, 0xff, 0x4f, 0xc8, 0x0f, 0x56, 0x9c, 0x26, 0x62, 0x55, 0xfd, 0x2f, 0x05, 0x6d, 0xea, 0x09, 0xd8, 0x15, 0xcf, 0x00, 0x45, 0x1d, 0x0f, 0x7a, 0x67, 0x3f, 0x48, 0x2d, 0x72, 0xf8, 0xd9, 0x8f, 0x4f, 0x96, 0xa1, 0x8e, 0x86, 0x91, 0x0a, 0x82, 0x61, 0x1e, 0x46, 0x60, 0x4f, 0x02, 0xd9, 0x30, 0x86, 0xa4, 0x58, 0xc1, 0xec, 0x67, 0x70, 0x9b, 0x38, 0x36, 0x29, 0x35, 0x54, 0x61, 0x6c, 0x68, 0x06, 0xa7, 0xc4, 0x24, 0xd0, 0x94, 0x61, 0x62, 0x15, 0x0d, 0x62, 0x59, 0x7c, 0x29, 0x54, 0xf5, 0x9a, 0x42, 0xf5, 0x85, 0xcb, 0x4c, 0x3e, 0xb4, 0x60, 0x66, 0xa1, 0xba, 0x00, 0xaf, 0x90, 0xd3, 0x48, 0x5b, 0x3e, 0xf0, 0xb5, 0x06, 0xa9, 0xad, 0xc4, 0x47, 0xd8, 0x84, 0x57, 0x89, 0x61, 0x40, 0x5b, 0x16, 0x2f, 0xb4, 0xa8, 0x75, 0x82, 0xac, 0x28, 0xf6, 0x37, 0x24, 0x3c, 0x8b, 0x4a, 0xb8, 0x5b, 0xd9, 0x99, 0x5c, 0xfd, 0x8f, 0xeb, 0x4d, 0xb7, 0xf7, 0x30, 0x48, 0xa7, 0xcb, 0x0b, 0xf9, 0x12, 0x49, 0x8d, 0xb6, 0x4c, 0x89, 0x44, 0x6d, 0xd8, 0x0f, 0x74, 0xdb, 0xd1, 0x9d, 0xa4, 0xff, 0x88, 0x4a, 0x5c, 0xcf, 0x6f, 0xd8, 0x2e, 0x29, 0x36, 0x43, 0xf3, 0x0c, 0x33, 0x96, 0x57, 0x08, 0x07, 0x02, 0x98, 0xf3, 0x7f, 0x31, 0x8a, 0xde, 0xb8, 0xd8, 0xdf, 0x47, 0x87, 0x8c, 0xa5, 0x91, 0x17, 0xd6, 0x10, 0xb1, 0xd4, 0x89, 0x7a, 0x29, 0x88, 0x53, 0xa8, 0x3a, 0xc4, 0x93, 0x4f, 0x55, 0x82, 0x6a, 0xd6, 0xd4, 0x08, 0x15, 0x5e, 0xe7, 0x10, 0x7a, 0x00, 0xd1, 0x25, 0x00, 0x55, 0x54, 0x50, 0xa4, 0x3c, 0x69, 0xf4, 0x4a, 0xd7, 0x35, 0xf7, 0x50, 0xd7, 0x39, 0x22, 0x69, 0xfa, 0xc9, 0xcb, 0xa9, 0xd1, 0xbf, 0xb1, 0xdc, 0xc7, 0x70, 0x27, 0x1c, 0x5f, 0xdf, 0x75, 0xa3, 0xbd, 0x31, 0x7b, 0xdd, 0x68, 0x61, 0x97, 0xc1, 0x4e, 0x35, 0xc9, 0x62, 0x09, 0x71, 0x15, 0xc1, 0x60, 0x4a, 0x29, 0xe6, 0x11, 0x1d, 0x40, 0x2f, 0xce, 0x61, 0x46, 0xe7, 0x85, 0xdb, 0x3d, 0x1a, 0xe4, 0x10, 0xdf, 0xa8, 0x1d, 0x00, 0x85, 0x99, 0xe6, 0x11, 0x47, 0xb0, 0xc4, 0x4a, 0x65, 0x43, 0x8a, 0xc1, 0xe6, 0x4a, 0x1c, 0x57, 0x7e, 0xb5, 0x79, 0xa2, 0xb5, 0x03, 0xf9, 0x2b, 0x46, 0x10, 0xd3, 0xda, 0xc5, 0x2e, 0xe1, 0xae, 0x85, 0x78, 0xa8, 0xb1, 0xb9, 0x63, 0x93, 0x2c, 0xd9, 0x96, 0x7f, 0x17, 0x48, 0xfc, 0x7c, 0xd3, 0x33, 0x17, 0xd2, 0x1c, 0xbc, 0x97, 0x43, 0x39, 0x58, 0x2b, 0x90, 0x75, 0x75, 0x97, 0x3f, 0xd3, 0x61, 0x07, 0x9a, 0xfe, 0x67, 0xa2, 0xfb, 0x7f, 0x3b, 0x63, 0x47, 0x32, 0x98, 0x24, 0xb9, 0xfb, 0x27, 0xfc, 0xe1, 0xb5, 0xa3, 0xcb, 0xec, 0x6b, 0x3b, 0x13, 0x25, 0xcb, 0x37, 0x0a, 0xbc, 0xd7, 0xdf, 0xed, 0xc6, 0xde, 0x98, 0x96, 0x86, 0xab, 0x51, 0x51, 0xeb, 0xfc, 0x1d, 0xec, 0x59, 0x36, 0x21, 0x0d, 0xad, 0x56, 0xb1, 0xc8, 0x7b, 0x2b, 0xb6, 0x71, 0x99, 0xc3, 0x53, 0xaf, 0xe2, 0x23, 0xc8, 0xd2, 0x34, 0x3a, 0x96, 0x67, 0xbb, 0x18, 0xe4, 0x09, 0x72, 0x5c, 0x21, 0x7a, 0xe6, 0xeb, 0xeb, 0xf2, 0x3e, 0xe8, 0x2f, 0xb6, 0x78, 0xe0, 0x92, 0xed, 0xf5, 0x44, 0x10, 0xaf, 0x38, 0x1d, 0xe3, 0x60, 0xeb, 0xfb, 0xa7, 0x3c, 0x22, 0x2e, 0xbb, 0x32, 0xe4, 0x39, 0xea, 0xf6, 0xe8, 0x84, 0x4b, 0x52, 0x9c, 0x51, 0x65, 0xbd, 0x6b, 0xf1, 0x97, 0x2e, 0x40, 0x38, 0xb8, 0x32, 0x46, 0x2e, 0xfa, 0x3d, 0xf3, 0x07, 0x14, 0x3d, 0x44, 0x56, 0xa0, 0x75, 0x4a, 0x7d, 0xc1, 0x89, 0xe5, 0x68, 0x0a, 0xd5, 0xd0, 0x7b, 0x9b, 0x03, 0xdd, 0xc8, 0x8d, 0xdd, 0x82, 0x86, 0x91, 0x5f, 0x95, 0xbe, 0xd3, 0x11, 0x54, 0x48, 0x25, 0x94, 0xa8, 0xf6, 0x59, 0x7a, 0xab, 0x0f, 0xee, 0x5b, 0x67, 0xff, 0xf0, 0x24, 0xe1, 0x4c, 0x19, 0xb3, 0x56, 0xcc, 0x3c, 0xa1, 0xc4, 0x16, 0xe4, 0x5f, 0xac, 0x36, 0x38, 0x85, 0x16, 0xa5, 0x21, 0x66, 0xd7, 0x78, 0xaf, 0xe8, 0x0f, 0xd7, 0xb9, 0x93, 0xf5, 0xb1, 0xc4, 0xe7, 0xd7, 0xae, 0x26, 0xf3, 0x5c, 0x65, 0x6c, 0x23, 0x0d, 0xd0, 0xf8, 0x5a, 0x13, 0xfc, 0xef, 0x40, 0x42, 0x05, 0x52, 0xde, 0x57, 0x42, 0x6a, 0x68, 0x7e, 0xbd, 0x6a, 0x59, 0x18, 0xe6, 0x50, 0xc5, 0xba, 0x88, 0x0c, 0xeb, 0x79, 0xfb, 0xe4, 0x0b, 0x65, 0x9c, 0x17, 0x77, 0x53, 0x7a, 0xc0, 0xeb, 0xe0, 0x52, 0xfe, 0x21, 0xb2, 0xbe, 0x52, 0xa1, 0x01, 0xa9, 0x48, 0xd7, 0x56, 0x06, 0x5a, 0x67, 0x93, 0xc1, 0x11, 0xc5, 0x34, 0xf6, 0x6d, 0x00, 0xd4, 0x62, 0x87, 0xde, 0xf3, 0x17, 0x75, 0x2e, 0xf6, 0x73, 0x6e, 0x5a, 0x6f, 0x52, 0x2e, 0x3c, 0x9f, 0x83, 0x9c, 0x32, 0x3a, 0x79, 0xab, 0x75, 0x69, 0x43, 0x7e, 0xa6, 0x15, 0xbf, 0xcf, 0xaa, 0x63, 0x0a, 0x91, 0xb8, 0x7b, 0x3a, 0xd4, 0xb0, 0x8e, 0x50, 0xea, 0xaf, 0x17, 0x68, 0xc8, 0xe0, 0x61, 0x33, 0xae, 0x95, 0x49, 0xa7, 0x0b, 0x96, 0x45, 0xf5, 0x9b, 0xb8, 0xa5, 0xbc, 0xd2, 0xb2, 0x19, 0x7c, 0x7d, 0x2d, 0x74, 0x4d, 0xa7, 0x1a, 0xaf, 0xd1, 0xb9, 0x48, 0x31, 0x67, 0xe6, 0x36, 0x4d, 0xa1, 0xc6, 0x26, 0x0d, 0xf9, 0x41, 0x72, 0x2e, 0xbf, 0xaf, 0x23, 0x6b, 0x56, 0x3d, 0xc0, 0xff, 0xa0, 0x93, 0x64, 0x65, 0xb7, 0xb4, 0x13, 0x62, 0xde, 0x25, 0x4e, 0x45, 0xb7, 0x51, 0xe5, 0x6e, 0xb6, 0x2c, 0x0d, 0x0d, 0xd5, 0x17, 0xb2, 0x2c, 0x89, 0x04, 0x0f, 0xf0, 0xf5, 0xda, 0x7b, 0x1b, 0x5e, 0x1b, 0x86, 0xd6, 0xe0, 0xc4, 0x44, 0xae, 0x5f, 0x74, 0xe9, 0xdc, 0xc0, 0xd1, 0x96, 0xc9, 0x58, 0x27, 0x73, 0xd1, 0xa4, 0x53, 0xfe, 0x47, 0x3b, 0xe0, 0xa3, 0xba, 0x02, 0x6f, 0x8c, 0x77, 0x9f, 0x5c, 0xba, 0x4f, 0x30, 0x9e, 0x55, 0x9b, 0x3c, 0xef, 0x40, 0x7d, 0xe9, 0x2e, 0xf1, 0x68, 0x70, 0x01, 0x80, 0xe2, 0xcf, 0xbe, 0xfd, 0x88, 0xbe, 0x8c, 0x07, 0x53, 0xe3, 0xc5, 0x9a, 0x1b, 0x49, 0x9f, 0x29, 0x59, 0x0f, 0x0c, 0xed, 0x31, 0x5d, 0xde, 0x7c, 0xb0, 0x9c, 0x2f, 0x9d, 0x52, 0xe7, 0x00, 0x5b, 0xc7, 0xbc, 0x20, 0x58, 0xf6, 0xf8, 0x50, 0x64, 0x43, 0x02, 0xa4, 0x4e, 0x0d, 0x46, 0x2c, 0xfa, 0x7b, 0xe5, 0xd4, 0xb4, 0x79, 0xaa, 0x89, 0xc4, 0xfd, 0x41, 0x9d, 0x43, 0x8f, 0xa3, 0x6d, 0x2d, 0x08, 0xd5, 0x41, 0xb7, 0x9a, 0xd2, 0x73, 0xe2, 0x10, 0xc6, 0xd4, 0x50, 0x57, 0x7c, 0x4b, 0x56, 0x3e, 0x1a, 0xbf, 0x54, 0x7a, 0x0c, 0x37, 0x41, 0xed, 0x3e, 0x40, 0x8a, 0x28, 0x8e, 0x90, 0x1d, 0x2e, 0x81, 0xe8, 0xc0, 0x7a, 0x34, 0x3f, 0xa8, 0x44, 0x96, 0x1c, 0x47, 0x01, 0xd5, 0x44, 0x65, 0x29, 0x16, 0x95, 0x72, 0x3c, 0x69, 0x32, 0x1b, 0x07, 0xfc, 0xe0, 0x1b, 0x24, 0x8f, 0xb0, 0x54, 0xc0, 0x27, 0xdf, 0x1e, 0xa0, 0x07, 0xfa, 0xdf, 0x66, 0xdc, 0x45, 0xdc, 0x11, 0x38, 0x5e, 0x4e, 0xc4, 0x41, 0x1e, 0xb9, 0xc8, 0xab, 0xc0, 0x79, 0xd3, 0xe3, 0x45, 0x9d, 0x8b, 0x8d, 0x16, 0xf9, 0x46, 0x31, 0xec, 0x77, 0x14, 0x31, 0xed, 0xae, 0xff, 0xff, 0x18, 0xb6, 0x91, 0x8c, 0xe2, 0x3a, 0x97, 0x04, 0x21, 0xce, 0x25, 0xb8, 0x2a, 0x83, 0xda, 0x5c, 0x36, 0xb9, 0x65, 0x72, 0x0b, 0x35, 0x48, 0x06, 0xd8, 0x74, 0xdc, 0x9c, 0x60, 0x3e, 0x96, 0x67, 0x5a, 0x7e, 0x88, 0xbb, 0x18, 0x50, 0x2b, 0xc5, 0x68, 0x5c, 0x5b, 0x7a, 0xb8, 0x63, 0xa3, 0xcd, 0x7d, 0x17, 0xbb, 0x25, 0xd5, 0x30, 0x4f, 0x0e, 0x6a, 0xbc, 0x02, 0x2e, 0x9a, 0xb6, 0xb3, 0x7c, 0xd6, 0xdb, 0xff, 0xac, 0x48, 0xb9, 0x07, 0xed, 0xb9, 0x09, 0x73, 0xd7, 0xb1, 0x3e, 0xb7, 0x9f, 0xe0, 0x5e, 0x94, 0x8e, 0xbc, 0x11, 0xe2, 0xb1, 0x6c, 0xf8, 0x8e, 0xd1, 0xe5, 0x3f, 0xdf, 0xa5, 0x53, 0x76, 0xfd, 0x47, 0xba, 0x9c, 0xb3, 0xe5, 0xdd, 0x7d, 0x74, 0xb9, 0x5f, 0x3f, 0x9c, 0x3b, 0x28, 0x37, 0xf9, 0x95, 0x0a, 0x01, 0x8a, 0x57, 0xa4, 0xcf, 0x86, 0x6c, 0x87, 0x01, 0xa0, 0x4d, 0x98, 0xf6, 0x8a, 0x74, 0xb6, 0x22, 0xb8, 0x14, 0x9c, 0x61, 0x66, 0x07, 0x08, 0x8b, 0xdc, 0x07, 0x1d, 0x49, 0xf1, 0x22, 0x05, 0x27, 0xce, 0x68, 0xdc, 0xea, 0xf4, 0xe7, 0xc9, 0x23, 0x81, 0xd9, 0x6e, 0x04, 0xae, 0x1b, 0x83, 0x73, 0x9d, 0xe1, 0xbd, 0x5d, 0x52, 0xa9, 0xf5, 0x4d, 0xff, 0x6d, 0x86, 0x3d, 0x84, 0x1d, 0xf7, 0xac, 0x36, 0x4c, 0xda, 0xf0, 0xdf, 0x2a, 0xf3, 0xce, 0x07, 0xb2, 0x9d, 0x48, 0x72, 0x24, 0x6a, 0xb6, 0xea, 0xb6, 0x0a, 0x18, 0x3f, 0x86, 0x6e, 0xab, 0x8b, 0xd4, 0x2c, 0xba, 0xba, 0x6e, 0x26, 0xb7, 0x4a, 0x6b, 0x67, 0x8a, 0x50, 0x1c, 0x4d, 0x29, 0xbc, 0x40, 0xed, 0x69, 0xdd, 0x77, 0xb3, 0x14, 0x28, 0xfa, 0x49, 0x3b, 0x35, 0x88, 0xba, 0xcd, 0x0a, 0xa4, 0xd8, 0x69, 0x9c, 0xfd, 0xdb, 0x71, 0x93, 0x2e, 0x4a, 0x60, 0x4e, 0xa7, 0x1f, 0x5d, 0x27, 0xeb, 0x26, 0x10, 0xf8, 0xfd, 0xa6, 0xb4, 0xde, 0x14, 0x43, 0x6d, 0x3c, 0x96, 0x23, 0xdc, 0x03, 0x44, 0x50, 0xf1, 0x31, 0xb2, 0x5d, 0x01, 0x98, 0xfb, 0x4d, 0x19, 0xe1, 0xb2, 0xb0, 0x91, 0xd0, 0x1c, 0x0f, 0xe4, 0xca, 0x9c, 0x8a, 0xbf, 0x94, 0x6e, 0xc0, 0x57, 0x5d, 0x98, 0xef, 0x00, 0xff, 0x1e, 0x5c, 0xfc, 0x82, 0x76, 0xf6, 0x90, 0xe1, 0x3b, 0x36, 0x5d, 0x11, 0x26, 0x49, 0xee, 0x40, 0x39, 0x71, 0x8e, 0x5b, 0x3d, 0xa9, 0x5c, 0xd2, 0x6f, 0x88, 0xa1, 0x9f, 0x77, 0x67, 0x60, 0x85, 0x99, 0xc6, 0x2f, 0x95, 0x2f, 0xec, 0x46, 0xf7, 0x57, 0xce, 0xd6, 0xe7, 0xe9, 0x32, 0x9c, 0xfe, 0xac, 0x14, 0xb5, 0xb3, 0xc9, 0x49, 0xb4, 0x21, 0x7f, 0x62, 0xf2, 0x0b, 0x19, 0xd3, 0x25, 0x1d, 0x1d, 0x55, 0x34, 0x74, 0xc7, 0x88, 0x4a, 0x61, 0xb5, 0xdd, 0x2a, 0x6a, 0xe4, 0xb3, 0xc2, 0x92, 0xdb, 0xc0, 0x02, 0xdb, 0x26, 0xb3, 0xee, 0x08, 0x06, 0x17, 0xf2, 0xa7, 0x67, 0x7b, 0x76, 0x4f, 0x12, 0xd0, 0xb3, 0x27, 0x24, 0x12, 0xc5, 0xa7, 0xbf, 0x2b, 0x01, 0xa3, 0xff, 0x14, 0x88, 0x85, 0x30, 0x3d, 0x1c, 0xda, 0x3e, 0x2f, 0x33, 0x10, 0x6c, 0x70, 0x4a, 0x7d, 0x49, 0xa6, 0x7c, 0xa4, 0xe1, 0x00, 0x53, 0xb4, 0x30, 0xd2, 0xde, 0x52, 0xdc, 0x7f, 0x04, 0x98, 0x23, 0x9c, 0x17, 0x5e, 0x11, 0x52, 0xad, 0xb8, 0xf7, 0x04, 0xab, 0xbf, 0x1a, 0x32, 0xa2, 0x95, 0xa8, 0x9e, 0x5f, 0xa3, 0xf0, 0xad, 0xbd, 0x25, 0xd1, 0x0f, 0xbe, 0xe9, 0x73, 0xa2, 0xda, 0x53, 0x36, 0x94, 0x97, 0xa5, 0xe8, 0xc9, 0x5a, 0x7d, 0x3b, 0x7c, 0x7d, 0xa0, 0x76, 0x28, 0xa1, 0xf5, 0x6a, 0xa9, 0x46, 0xd5, 0xa8, 0x9e, 0x99, 0x82, 0xf1, 0x13, 0x8c, 0xf4, 0xee, 0x5d, 0x2c, 0xdc, 0x21, 0x44, 0x30, 0xe3, 0x1c, 0x68, 0xcd, 0x32, 0xf1, 0xdd, 0xd2, 0x38, 0xe9, 0x19, 0xf0, 0xa7, 0x79, 0x10, 0x59, 0xc0, 0x71, 0x9d, 0x8e, 0xd1, 0x77, 0x24, 0x71, 0xfc, 0xb4, 0x76, 0xa2, 0x39, 0xcd, 0xf4, 0x08, 0x9e, 0x15, 0xf8, 0xae, 0xdf, 0x01, 0x70, 0xd1, 0x11, 0xdc, 0xcc, 0x37, 0xb3, 0xbb, 0x1b, 0xc2, 0xee, 0xb4, 0x70, 0x44, 0x1c, 0x4b, 0x8b, 0x95, 0x88, 0x2d, 0xb5, 0xe3, 0x74, 0x21, 0xec, 0x4a, 0x61, 0x3b, 0x40, 0xa4, 0x8a, 0x52, 0x7d, 0xa3, 0xb2, 0xb5, 0x0a, 0x1d, 0x1f, 0x1a, 0x11, 0xa6, 0xe7, 0xd7, 0xe0, 0x64, 0x6a, 0x55, 0x90, 0x1f, 0x20, 0xc1, 0xe4, 0x98, 0x95, 0x04, 0x73, 0x1c, 0xb1, 0xf6, 0x0a, 0x58, 0x3d, 0xce, 0x4c, 0x6f, 0xa3, 0xde, 0x9b, 0x4a, 0xf5, 0x7d, 0x3c, 0x30, 0x31, 0x44, 0xb5, 0x96, 0xc4, 0x7d, 0x7a, 0x38, 0x4c, 0xd8, 0xc9, 0x68, 0xa2, 0x60, 0xd3, 0xa6, 0x18, 0xae, 0x1c, 0x72, 0xff, 0x5c, 0x24, 0x5e, 0x6d, 0xbd, 0x47, 0x67, 0x3d, 0xcb, 0xe2, 0x85, 0x56, 0x61, 0xb7, 0x81, 0x31, 0xab, 0x93, 0x07, 0x95, 0xda, 0x2e, 0xfc, 0xa5, 0x1c, 0x52, 0x11, 0x1d, 0xcb, 0x3f, 0x99, 0xd9, 0xe4, 0x4f, 0x98, 0x97, 0xbc, 0xd6, 0x1c, 0xfd, 0xee, 0x4c, 0xd0, 0xde, 0x98, 0xae, 0xce, 0xb9, 0xc7, 0x21, 0xb5, 0x82, 0x2f, 0xd9, 0xfb, 0xa5, 0x20, 0x39, 0x85, 0x49, 0xb5, 0x3b, 0x75, 0xd1, 0x4f, 0x13, 0x44, 0xa9, 0x41, 0x0f, 0x10, 0x3f, 0xcd, 0xc2, 0x37, 0x4f, 0x50, 0x61, 0x24, 0x64, 0xb9, 0x6d, 0x69, 0x9c, 0x3f, 0x92, 0x0e, 0xab, 0x54, 0xd0, 0x29, 0x22, 0xd4, 0xd8, 0xaf, 0xf2, 0x83, 0xb9, 0x8a, 0x2b, 0xb6, 0xbb, 0xec, 0x0a, 0x50, 0x8b, 0xe2, 0x33, 0xf0, 0x99, 0x2c, 0x3b, 0x69, 0xbf, 0x4c, 0x69, 0x73, 0x23, 0xdd, 0xbe, 0xa0, 0x5e, 0x26, 0x32, 0x91, 0xde, 0xef, 0x41, 0x69, 0x88, 0x93, 0xa6, 0x82, 0xa2, 0x57, 0x67, 0x5f, 0xf1, 0xfa, 0x11, 0xe2, 0x1e, 0x8e, 0x45, 0xbf, 0x5f, 0x86, 0x73, 0x31, 0x53, 0x0f, 0xe6, 0xec, 0x2d, 0xa4, 0x01, 0x52, 0x14, 0xdc, 0xc8, 0xe9, 0xca, 0x87, 0xa2, 0x0d, 0x8c, 0xfa, 0x5c, 0xe2, 0x3a, 0xa7, 0x72, 0x8d, 0xb8, 0xf1, 0x8a, 0xa4, 0x94, 0x3e, 0x42, 0xe2, 0xe9, 0x4d, 0x2b, 0x20, 0x83, 0xca, 0x15, 0x80, 0x43, 0x1f, 0x8e, 0xec, 0xc5, 0x8e, 0xa5, 0xbf, 0x41, 0x7c, 0xf4, 0xc1, 0xaf, 0x10, 0xdd, 0x59, 0x2f, 0xfd, 0x13, 0xfe, 0xa7, 0x9c, 0x5c, 0xef, 0xae, 0x3e, 0x96, 0x24, 0xa9, 0xc0, 0xf8, 0x84, 0x33, 0x60, 0x9b, 0x58, 0xc3, 0xce, 0x39, 0x00, 0x88, 0x87, 0x34, 0xe4, 0x98, 0x5e, 0xda, 0xae, 0x4a, 0x5b, 0xe7, 0xb7, 0xe0, 0xc9, 0x4b, 0xbe, 0x6a, 0x8b, 0x2e, 0xe0, 0xe7, 0xaf, 0x32, 0xc4, 0xac ],
-const [ 0x54, 0xad, 0x09, 0xea, 0xd6, 0x15, 0x40, 0x36, 0x63, 0x64, 0xb6, 0xf3, 0x11, 0xe3, 0xd9, 0xe3, 0x73, 0x6c, 0x71, 0xc3, 0x1b, 0xda, 0x3b, 0x69, 0x5c, 0xbe, 0xd4, 0x0f, 0x55, 0x54, 0xd9, 0xef, 0x2a, 0xb5, 0x4d, 0x10, 0x95, 0x4d, 0x3b, 0x5f, 0x9e, 0x90, 0x9c, 0x01, 0xa6, 0xe9, 0x7a, 0xe8, 0xaa, 0xf3, 0x56, 0xa4, 0xc6, 0xec, 0xc8, 0x7c, 0xf8, 0x67, 0x65, 0xbe, 0x27, 0x40, 0xe5, 0x53, 0x64, 0xd5, 0x86, 0x96, 0x6f, 0x73, 0xab, 0x67, 0x7d, 0x0f, 0xc9, 0x7a, 0x38, 0x37, 0x83, 0xf5, 0x08, 0x48, 0x14, 0x3b, 0x91, 0xe0, 0xee, 0x02, 0x7d, 0x96, 0xa0, 0xac, 0x7b, 0xe9, 0xfd, 0xd4, 0x87, 0x77, 0x7b, 0x27, 0x6d, 0x70, 0xd9, 0x75, 0x88, 0x49, 0x05, 0x07, 0xd0, 0xb5, 0x3c, 0x34, 0x14, 0xd1, 0x73, 0x2f, 0x83, 0x9e, 0xf6, 0x23, 0x71, 0xb5, 0x4f, 0x82, 0x58, 0x36, 0x69, 0x9a, 0x1d, 0x02, 0xf5, 0x69, 0x95, 0x2a, 0x0d, 0xb2, 0x48, 0xa7, 0x17, 0x50, 0x75, 0x4b, 0xed, 0xcb, 0x56, 0xf7, 0x3b, 0x29, 0xa4, 0x0f, 0x28, 0x06, 0x5e, 0x2b, 0x38, 0xe7, 0xc7, 0x0f, 0x70, 0xcc, 0xae, 0xde, 0xbc, 0x04, 0xf1, 0x8a, 0x8f, 0x45, 0x44, 0x8f, 0xc9, 0xfc, 0x2f, 0xe1, 0xdd, 0xe2, 0x56, 0x22, 0x33, 0xd0, 0xfd, 0x19, 0xcb, 0xd4, 0xcb, 0x60, 0x24, 0x84, 0xce, 0x5c, 0x5c, 0x92, 0xc0, 0x72, 0x98, 0xa1, 0x89, 0x78, 0xa6, 0x57, 0x04, 0x6a, 0xe1, 0xb4, 0x06, 0x5f, 0x55, 0xa2, 0x9d, 0xbb, 0x24, 0xcd, 0x95, 0xa5, 0x29, 0xb4, 0x41, 0xbc, 0xda, 0x01, 0x78, 0x05, 0x73, 0x15, 0xdd, 0x28, 0x51, 0xe8, 0x63, 0xdd, 0x9b, 0x10, 0x11, 0xa1, 0x28, 0x1f, 0x03, 0xad, 0x9d, 0x32, 0xb2, 0x28, 0xd6, 0xc7, 0x75, 0x9c, 0x88, 0xcf, 0x47, 0xa7, 0x24, 0x05, 0xca, 0xf3, 0xfe, 0x7d, 0x8c, 0x67, 0xae, 0x80, 0x89, 0x9f, 0xb6, 0x97, 0xf2, 0x9a, 0x66, 0xe6, 0x2d, 0xb3, 0xfd, 0xbb, 0x1d, 0xd3, 0x11, 0x67, 0xa3, 0xe4, 0x31, 0x4d, 0x65, 0x89, 0xc8, 0x38, 0xce, 0x0c, 0x44, 0xf2, 0x56, 0x98, 0x78, 0x12, 0x03, 0xa8, 0x3f, 0x15, 0x2f, 0xbf, 0x63, 0xb0, 0x8d, 0x5a, 0xbd, 0x65, 0x67, 0x22, 0x9d, 0x55, 0x29, 0x67, 0x6c, 0x55, 0x23, 0xca, 0x8f, 0x43, 0x8b, 0x39, 0x8f, 0x9b, 0xc1, 0x21, 0x77, 0x45, 0xd7, 0xde, 0x7e, 0xb1, 0x51, 0x77, 0xe6, 0x26, 0x29, 0x88, 0x24, 0x57, 0x17, 0x7f, 0x41, 0x38, 0x0f, 0x0b, 0x80, 0x0f, 0x0a, 0xd2, 0x41, 0xce, 0x09, 0x63, 0x25, 0xa0, 0x57, 0x6b, 0x73, 0xc2, 0x0f, 0x2b, 0xbb, 0x94, 0xdf, 0x29, 0xb9, 0xf0, 0x0b, 0x26, 0x7b, 0xba, 0xb5, 0x51, 0xc6, 0xb8, 0x5b, 0xba, 0xb7, 0xa4, 0xa1, 0x09, 0xa6, 0x80, 0x51, 0x70, 0x4f, 0x2a, 0xa0, 0xde, 0x34, 0x30, 0xb3, 0x76, 0x3d, 0xe5, 0x61, 0x3f, 0xa2, 0xb5, 0x3b, 0x1d, 0x0a, 0xb5, 0xc9, 0x00, 0xf5, 0x7e, 0x17, 0x5b, 0x57, 0x3c, 0x70, 0xd8, 0x85, 0x02, 0x6a, 0x4a, 0x55, 0x61, 0x23, 0xe2, 0x81, 0x38, 0xc9, 0xa7, 0x4d, 0xcd, 0x60, 0x20, 0x6a, 0x1d, 0xbf, 0x53, 0x19, 0x71, 0xdc, 0xf4, 0x94, 0x32, 0x4a, 0xd6, 0xa9, 0xfe, 0x00, 0xa5, 0xa8, 0xfb, 0x5c, 0xd7, 0x7f, 0x6c, 0x68, 0xe0, 0x24, 0x82, 0x5b, 0xa5, 0x33, 0x74, 0x63, 0x34, 0xd9, 0xd2, 0xa1, 0xb2, 0xf0, 0x16, 0x75, 0x94, 0x6b, 0x7c, 0xfd, 0x13, 0xf5, 0x13, 0xd8, 0xd9, 0xd5, 0x14, 0x30, 0x01, 0x15, 0x73, 0xf7, 0x3e, 0xe3, 0xb5, 0x70, 0x5a, 0x37, 0x01, 0xf2, 0xe3, 0xb6, 0x79, 0xe9, 0x21, 0xd7, 0xcb, 0x1d, 0x4a, 0x44, 0x02, 0x37, 0xf9, 0x83, 0xa3, 0x81, 0xdd, 0xd5, 0xf5, 0xed, 0xae, 0x5e, 0xa0, 0x59, 0x66, 0x87, 0x79, 0x11, 0xad, 0xa1, 0x9d, 0x95, 0x95, 0xcb, 0xbd, 0x9d, 0x87, 0x15, 0xb8, 0x5b, 0x7e, 0xe5, 0x6f, 0x00, 0x72, 0x9a, 0xd5, 0x81, 0x18, 0x70, 0x45, 0x9b, 0xc8, 0xa3, 0x19, 0x15, 0xbe, 0xd8, 0x78, 0x45, 0x86, 0xb8, 0x6f, 0xd5, 0xb2, 0xde, 0x43, 0xc7, 0xce, 0xf3, 0x06, 0xb7, 0x96, 0x17, 0x69, 0x60, 0x66, 0x83, 0xd1, 0x62, 0xf1, 0x6d, 0xad, 0x43, 0x36, 0x2c, 0x06, 0xb3, 0xb0, 0x9d, 0x57, 0x14, 0xcd, 0xc5, 0xa0, 0x39, 0xa2, 0xb8, 0xb6, 0x6e, 0xdd, 0xb9, 0xdd, 0xb9, 0xfb, 0xa2, 0x98, 0x60, 0xbb, 0x87, 0xc0, 0xab, 0xd2, 0x96, 0xd4, 0xeb, 0xe0, 0x41, 0x90, 0xbb, 0xa3, 0xa0, 0xc1, 0x86, 0x6a, 0x10, 0x57, 0x4a, 0xcd, 0x21, 0xbc, 0x9b, 0x9c, 0xaf, 0x64, 0xea, 0x15, 0x4e, 0xa6, 0x07, 0x5a, 0xec, 0xca, 0xe5, 0x22, 0xb1, 0x63, 0x9e, 0xae, 0x2a, 0xdf, 0xb6, 0xff, 0xa7, 0x5c, 0xa4, 0x46, 0xe1, 0xbd, 0x8e, 0x9c, 0xe0, 0xfd, 0x55, 0xf3, 0x1c, 0xc4, 0xd1, 0x4c, 0xe3, 0x38, 0x5e, 0x2b, 0xfa, 0x16, 0x97, 0x48, 0x87, 0x01, 0x61, 0x88, 0x2e, 0x1a, 0x2c, 0x2b, 0x7b, 0xd0, 0x75, 0x47, 0x80, 0xfa, 0x8f, 0x75, 0xbf, 0x23, 0xa4, 0xca, 0x4a, 0x24, 0xf7, 0x09, 0x28, 0xf9, 0x6b, 0x16, 0xfb, 0xcd, 0x49, 0xae, 0xe0, 0x57, 0x3e, 0x56, 0x97, 0x69, 0xa3, 0x91, 0xe4, 0xc6, 0x01, 0x56, 0x34, 0x35, 0xd5, 0xc1, 0x84, 0xd3, 0x90, 0x09, 0x7f, 0xad, 0xe2, 0xb2, 0xe6, 0x8e, 0x38, 0x04, 0x35, 0x16, 0x84, 0xbb, 0x84, 0x0c, 0x3c, 0x00, 0xab, 0xf5, 0xa5, 0x98, 0xa9, 0xe6, 0x51, 0x5c, 0x47, 0x96, 0xe6, 0xe9, 0xf8, 0xb7, 0x22, 0x98, 0x04, 0x87, 0x1c, 0xb1, 0xe5, 0xa2, 0xcd, 0xdb, 0xf1, 0x1a, 0xce, 0xd7, 0x3a, 0xc9, 0x63, 0x6e, 0xb3, 0xe6, 0xb9, 0xa8, 0x94, 0xd7, 0x6c, 0x3f, 0xff, 0x46, 0x4c, 0x53, 0xe3, 0x77, 0x61, 0x5f, 0x21, 0xd9, 0x2d, 0x6c, 0xed, 0xdb, 0x30, 0x85, 0x77, 0x00, 0xb2, 0x6a, 0xcb, 0x36, 0xbc, 0x89, 0xf6, 0x64, 0x68, 0x29, 0x6b, 0x42, 0x5a, 0xe9, 0xa5, 0x6d, 0x8f, 0x69, 0x0d, 0xbb, 0x56, 0x47, 0x1d, 0xcb, 0x9b, 0x4d, 0xc6, 0xe1, 0x6b, 0xe8, 0x0f, 0xf1, 0xb5, 0xdc, 0x00, 0xfa, 0x4e, 0x37, 0xbe, 0x96, 0x38, 0x83, 0xf7, 0xce, 0x24, 0x40, 0x80, 0x32, 0x35, 0x92, 0x3d, 0x2a, 0x07, 0x36, 0x42, 0x87, 0xf0, 0xba, 0x37, 0x5d, 0x86, 0xee, 0x01, 0x15, 0x61, 0x96, 0x9f, 0xbe, 0x22, 0x61, 0x51, 0xa4, 0xb3, 0x1f, 0x00, 0x24, 0xd1, 0x2e, 0xda, 0xbe, 0xc8, 0x35, 0x3d, 0x6c, 0x7e, 0x15, 0xd6, 0x32, 0xb3, 0x1d, 0x0a, 0xf7, 0x87, 0x7e, 0x94, 0x93, 0x3d, 0xfe, 0x70, 0x29, 0x3e, 0xf0, 0xf8, 0xb7, 0x61, 0x63, 0x4e, 0xeb, 0x69, 0x9a, 0xf9, 0x39, 0xd0, 0xbc, 0xd3, 0x2a, 0xc3, 0xcd, 0x22, 0xf7, 0x6d, 0xdd, 0x05, 0x56, 0x78, 0x7f, 0x12, 0x94, 0xd1, 0x7d, 0x3d, 0xe4, 0xac, 0xca, 0xfb, 0xf7, 0xc9, 0xb8, 0xa8, 0xcc, 0xf5, 0x6b, 0x26, 0xca, 0xd3, 0x8e, 0xc8, 0x0c, 0xdc, 0x44, 0x6e, 0xfc, 0xa5, 0x62, 0xf1, 0x23, 0x60, 0xdb, 0xc1, 0x3f, 0xa6, 0x7c, 0xcc, 0x96, 0x74, 0xd9, 0xa2, 0x8b, 0x73, 0x87, 0xd7, 0x6f, 0x7c, 0x8b, 0xa9, 0x99, 0x5b, 0x13, 0xe3, 0xb9, 0xd3, 0x64, 0x02, 0x69, 0xe3, 0x14, 0x95, 0x05, 0x48, 0x79, 0xea, 0xbd, 0x43, 0x61, 0xe6, 0xe8, 0x9c, 0x03, 0x35, 0x9b, 0xe7, 0x36, 0xa4, 0x7b, 0x06, 0xe1, 0xca, 0xcf, 0xef, 0xb3, 0xee, 0xda, 0xb0, 0x14, 0x25, 0x67, 0xb0, 0x5b, 0xbb, 0xa5, 0x37, 0x41, 0xd4, 0x35, 0x30, 0x95, 0x53, 0x82, 0x2e, 0x32, 0xfb, 0x51, 0xae, 0x2f, 0xd4, 0x99, 0x9c, 0x55, 0xd1, 0x94, 0x18, 0xd6, 0xaf, 0x16, 0x79, 0x3b, 0x20, 0x1e, 0x92, 0x9f, 0x29, 0xaa, 0x35, 0x1b, 0xc9, 0xd0, 0xf6, 0x81, 0xdb, 0x0b, 0x31, 0x4d, 0x3d, 0xd3, 0x4f, 0xd8, 0x32, 0x70, 0x44, 0xcf, 0x05, 0x0f, 0x5c, 0xe4, 0xf0, 0x16, 0x38, 0xc3, 0x3b, 0xb5, 0x13, 0x48, 0xa8, 0xbd, 0x4b, 0xef, 0x0f, 0xb6, 0x1c, 0x8c, 0x46, 0x2c, 0xae, 0x3c, 0x43, 0x49, 0x52, 0x9b, 0x85, 0xa9, 0x08, 0x37, 0xb0, 0x69, 0x46, 0x45, 0x77, 0x81, 0xf4, 0x93, 0xbe, 0x54, 0xbb, 0xbe, 0x00, 0x86, 0x7f, 0xa5, 0xef, 0x0e, 0x2a, 0x1d, 0x5b, 0x8c, 0xac, 0xe7, 0x55, 0xdc, 0x40, 0xdf, 0x94, 0xeb, 0xf0, 0x75, 0x18, 0xc9, 0x5b, 0x61, 0x0c, 0x00, 0xb6, 0x93, 0xf1, 0x25, 0x11, 0x69, 0xf9, 0xac, 0xdb, 0x25, 0xb1, 0x00, 0xa9, 0x9e, 0xe3, 0xd4, 0x33, 0x36, 0xbb, 0xb3, 0x9f, 0x0b, 0x28, 0xdf, 0x03, 0x72, 0x85, 0x58, 0x25, 0xa1, 0x79, 0x3b, 0x85, 0xab, 0x1c, 0x4d, 0x9d, 0xb2, 0x5b, 0xd8, 0x67, 0x57, 0x9d, 0xb6, 0x20, 0x76, 0xa7, 0xab, 0x4c, 0x11, 0xbc, 0xf8, 0xfa, 0x89, 0x09, 0x2c, 0x49, 0x14, 0x41, 0x3e, 0x2b, 0x6b, 0x85, 0xd9, 0x69, 0xc3, 0x86, 0xf7, 0xe7, 0xff, 0xed, 0xb1, 0x2a, 0x24, 0xfb, 0x55, 0x17, 0x0d, 0x6c, 0xba, 0xfd, 0x60, 0xa2, 0xd0, 0xd6, 0xc0, 0xff, 0x7b, 0xca, 0x44, 0x93, 0xa2, 0xf5, 0x28, 0xf7, 0x83, 0x6a, 0xc3, 0x78, 0x49, 0x78, 0xb9, 0x78, 0xe0, 0x2c, 0x72, 0x12, 0x08, 0x16, 0xcb, 0xfd, 0xa8, 0x50, 0x0b, 0xb3, 0x65, 0xbd, 0x18, 0xd2, 0x74, 0x8f, 0xeb, 0xc2, 0xac, 0x0c, 0x41, 0x98, 0xe0, 0x91, 0x93, 0x3a, 0x6b, 0xd7, 0x49, 0xc4, 0x0c, 0x75, 0x2b, 0x2b, 0xf5, 0xa6, 0x18, 0x21, 0x1e, 0x4d, 0xfa, 0x38, 0xdf, 0x36, 0xf9, 0x49, 0xbe, 0x9f, 0xef, 0x17, 0x86, 0xf7, 0x1c, 0x30, 0x99, 0xe5, 0x1c, 0x14, 0x86, 0x8c, 0x15, 0x99, 0xde, 0x0e, 0x35, 0x8e, 0x44, 0x4e, 0x5c, 0x9f, 0xc4, 0xfb, 0x15, 0x78, 0x66, 0xca, 0xcb, 0x2e, 0x02, 0x02, 0x3a, 0xda, 0x55, 0x3e, 0x23, 0x87, 0x55, 0x6e, 0x44, 0x4e, 0xc2, 0x20, 0x87, 0xbf, 0xfe, 0xfe, 0x7a, 0x83, 0x1e, 0x97, 0xff, 0x40, 0x41, 0x62, 0x45, 0xbd, 0x20, 0xff, 0xf6, 0x47, 0xe7, 0xc1, 0xb2, 0x53, 0x44, 0x6a, 0xbd, 0x64, 0xbd, 0x35, 0xf4, 0x2f, 0x46, 0x1a, 0x06, 0xfd, 0x13, 0x4d, 0xe0, 0x52, 0xab, 0x08, 0x69, 0xcc, 0x3e, 0x8a, 0x70, 0x4d, 0x38, 0x60, 0xe2, 0x5d, 0x16, 0xe3, 0x41, 0xc9, 0x78, 0x02, 0x51, 0x90, 0x78, 0x41, 0x15, 0x00, 0x3b, 0x02, 0xf9, 0x1d, 0xc5, 0x03, 0x51, 0x42, 0x12, 0x29, 0x02, 0x0b, 0x62, 0x7c, 0x7f, 0x71, 0xd4, 0x72, 0xf8, 0x37, 0x36, 0x70, 0xce, 0x86, 0x1c, 0x8e, 0x49, 0xd4, 0x2f, 0x9b, 0x8d, 0x0a, 0xc8, 0x61, 0xca, 0xe5, 0xbe, 0x29, 0xb4, 0x9c, 0x7c, 0x82, 0x33, 0xc4, 0x56, 0x3f, 0x5b, 0x71, 0x1d, 0xbf, 0x9e, 0x9f, 0xf0, 0x71, 0x40, 0xd0, 0x56, 0x96, 0x0c, 0xf6, 0x8a, 0x49, 0x46, 0x92, 0x16, 0xbd, 0xe0, 0x1e, 0xa3, 0xc7, 0xf0, 0xa9, 0x10, 0x9c, 0x62, 0xc1, 0xc1, 0xdb, 0xea, 0x95, 0x3a, 0xce, 0x3d, 0x5b, 0xec, 0xed, 0x81, 0xf0, 0x4e, 0xa3, 0x02, 0xbe, 0x30, 0x55, 0x26, 0xe3, 0x4d, 0xa1, 0xa3, 0x90, 0x1f, 0xe3, 0xef, 0xae, 0xf7, 0xfe, 0xf9, 0xc8, 0x4c, 0x59, 0x16, 0x25, 0x53, 0x27, 0x3e, 0x34, 0xd1, 0xec, 0x78, 0x2e, 0x2e, 0x3c, 0x93, 0xf6, 0xca, 0xc6, 0x17, 0x44, 0x94, 0x92, 0x7b, 0x02, 0xd8, 0x87, 0x98, 0xf6, 0x58, 0x30, 0x5e, 0xa2, 0x9f, 0xc0, 0xc6, 0x68, 0x92, 0x53, 0x07, 0xf2, 0x48, 0x76, 0x0d, 0xd1, 0x1b, 0xea, 0x27, 0x64, 0xff, 0xa5, 0x00, 0xfc, 0x13, 0x1a, 0xd0, 0x3d, 0x76, 0xba, 0xd3, 0xc8, 0x5c, 0xbb, 0xfb, 0x17, 0x61, 0x18, 0xe2, 0xa7, 0x1d, 0xd9, 0x02, 0x5d, 0xf8, 0x94, 0x28, 0x23, 0x3f, 0x34, 0x26, 0xd2, 0x78, 0xf9, 0xc8, 0x54, 0xf3, 0xc0, 0x0a, 0x0a, 0xa2, 0x85, 0x88, 0x6b, 0x2a, 0x26, 0x36, 0xee, 0x3a, 0x69, 0x51, 0x2a, 0x1c, 0x41, 0x96, 0x3c, 0x8a, 0x4d, 0xb1, 0x6a, 0xc2, 0xa2, 0xf8, 0x06, 0xdd, 0xca, 0x59, 0x94, 0x5c, 0x0c, 0x91, 0x2f, 0x04, 0xee, 0x9f, 0x28, 0xec, 0xf9, 0x79, 0xf1, 0xd4, 0xbc, 0xfd, 0x39, 0xb8, 0x14, 0x2a, 0x59, 0xa5, 0xaa, 0x90, 0xef, 0xcc, 0xbc, 0x05, 0xc8, 0xd5, 0x21, 0x9a, 0x04, 0x75, 0x87, 0xce, 0x74, 0x43, 0x00, 0x01, 0x47, 0xc7, 0xbd, 0x2b, 0xe6, 0xd4, 0x18, 0xcd, 0x1c, 0x18, 0xd8, 0x28, 0x7a, 0xf2, 0xb1, 0xae, 0xfa, 0x83, 0x0b, 0xb6, 0xe2, 0x08, 0x05, 0x73, 0xeb, 0x67, 0xb8, 0x27, 0xa3, 0x07, 0xc0, 0x94, 0x10, 0xe5, 0xf9, 0xb3, 0x96, 0xe5, 0x86, 0xa9, 0x1a, 0x66, 0x18, 0xf7, 0x68, 0x18, 0x6c, 0xf1, 0xd2, 0x12, 0x16, 0x71, 0x1a, 0x1f, 0x7e, 0xcc, 0x93, 0x59, 0x28, 0x05, 0x82, 0xfa, 0x38, 0x41, 0xca, 0x6e, 0x35, 0x7b, 0xc9, 0xad, 0x0d, 0x79, 0x7d, 0xc7, 0x59, 0xff, 0xeb, 0xc0, 0xe3, 0x42, 0xc1, 0x9f, 0x65, 0x9f, 0x3a, 0xc2, 0x94, 0x8d, 0x42, 0x74, 0x5d, 0xd1, 0xdb, 0xc2, 0x6f, 0xf1, 0xbf, 0x8a, 0xf9, 0xea, 0x46, 0xd4, 0xb5, 0x25, 0x8b, 0x65, 0x25, 0xa8, 0xca, 0x92, 0x1d, 0x8a, 0x0d, 0x53, 0x81, 0xa9, 0x08, 0x98, 0x50, 0x9f, 0x41, 0xe0, 0xe1, 0xf1, 0x74, 0x07, 0x6d, 0x8a, 0x35, 0x5f, 0xce, 0x68, 0xd7, 0x03, 0x86, 0x96, 0x8d, 0x68, 0x03, 0x5a, 0xcf, 0x35, 0x22, 0xaf, 0xff, 0x55, 0xf1, 0xf5, 0x4d, 0x4a, 0xb9, 0xe8, 0xd8, 0xc4, 0x3c, 0xcf, 0x15, 0x72, 0x3b, 0xf5, 0x75, 0x18, 0x3b, 0x5d, 0x42, 0xe2, 0x89, 0xb2, 0xca, 0xf8, 0x7c, 0x7d, 0xc0, 0x52, 0xfa, 0x9b, 0xdf, 0xce, 0x3d, 0xed, 0xd0, 0x7f, 0xd7, 0x51, 0x4e, 0x48, 0xf4, 0xd1, 0x88, 0xaa, 0xe0, 0x1b, 0xc7, 0xdb, 0xc9, 0x31, 0x50, 0x18, 0xc5, 0x62, 0x8c, 0x3b, 0x17, 0x79, 0x66, 0x90, 0xae, 0x34, 0xf5, 0xe5, 0xee, 0xf8, 0x5b, 0xe0, 0xb3, 0xc2, 0xed, 0x96, 0x93, 0x61, 0x94, 0x58, 0x64, 0xe3, 0x72, 0xd0, 0xfe, 0x4d, 0xc9, 0x4e, 0x42, 0x8f, 0x19, 0x5c, 0x5c, 0xb6, 0x89, 0x98, 0x44, 0x64, 0x88, 0xc3, 0x8b, 0x7d, 0xb4, 0x15, 0x54, 0x24, 0xfb, 0xd3, 0xa1, 0xe6, 0x00, 0x24, 0xd0, 0x34, 0xc0, 0x21, 0x65, 0x17, 0x75, 0x2b, 0x09, 0x1f, 0xbb, 0x81, 0xd3, 0x9d, 0xf1, 0x11, 0xc7, 0x11, 0xe2, 0x8f, 0x9c, 0xe6, 0xa4, 0xc5, 0xc3, 0x5d, 0xc1, 0x2a, 0xa4, 0xc8, 0x95, 0xb5, 0x2b, 0xf8, 0xf7, 0xf3, 0x83, 0xf8, 0x1c, 0x58, 0x21, 0xfc, 0xb7, 0xd3, 0x05, 0x94, 0x65, 0xa4, 0x3c, 0x25, 0x49, 0x72, 0xaa, 0x9a, 0xf3, 0x98, 0x06, 0x57, 0x87, 0xc1, 0x26, 0x6e, 0x1b, 0xb4, 0x7d, 0x16, 0x60, 0x71, 0xe2, 0x59, 0x85, 0x7c, 0x92, 0x0c, 0x58, 0x79, 0x79, 0x04, 0xaf, 0xf9, 0xad, 0x87, 0x06, 0x94, 0x3c, 0x01, 0x69, 0x38, 0x27, 0xf8, 0x95, 0xc0, 0xae, 0x42, 0x5a, 0xc8, 0xce, 0x76, 0x43, 0xc0, 0x09, 0xa0, 0x79, 0x40, 0x65, 0x39, 0xe5, 0x9b, 0xb7, 0x56, 0x95, 0xb7, 0x21, 0x1f, 0x61, 0x1c, 0xda, 0x83, 0xce, 0x4a, 0x2d, 0x2a, 0x32, 0x50, 0xc5, 0xab, 0x19, 0x9a, 0x27, 0x00, 0xe8, 0x0b, 0x80, 0x37, 0xc0, 0x4c, 0xa1, 0x69, 0xa5, 0x63, 0x48, 0xf0, 0xe0, 0x87, 0xa1, 0xd5, 0xa1, 0x32, 0x0c, 0x88, 0xe9, 0x79, 0x21, 0xd4, 0xa7, 0x99, 0xf1, 0x11, 0x22, 0xd2, 0x8f, 0x9c, 0x96, 0x78, 0xd0, 0x84, 0x22, 0x47, 0x4e, 0x86, 0xe1, 0xf7, 0xb3, 0x3c, 0x58, 0x10, 0x34, 0x91, 0x10, 0x00, 0x5b, 0x78, 0x83, 0x6a, 0x0a, 0xde, 0x3d, 0xc2, 0xbd, 0xdc, 0x3b, 0x17, 0x0f, 0x32, 0x97, 0x2f, 0x80, 0xf1, 0x67, 0xd9, 0x75, 0x77, 0xe2, 0x7f, 0x80, 0xa0, 0xc4, 0xfb, 0xe2, 0x3b, 0xf4, 0xab, 0x4e, 0xbb, 0x64, 0xc8, 0xf0, 0x2f, 0x39, 0xf3, 0xae, 0x75, 0x2d, 0x11, 0xae, 0xaa, 0x31, 0x59, 0x18, 0xe4, 0x56, 0xab, 0x1d, 0x24, 0xed, 0x24, 0x38, 0x86, 0xed, 0xef, 0xb3, 0xbb, 0x96, 0x5e, 0x6e, 0xb9, 0x54, 0x39, 0xdc, 0xb1, 0xe6, 0x56, 0x4e, 0x42, 0xbf, 0x69, 0x74, 0xec, 0xad, 0x1e, 0x20, 0xc7, 0xb8, 0x65, 0x4e, 0x75, 0x4d, 0x0d, 0x62, 0x55, 0x9c, 0x95, 0xb0, 0xf9, 0x3e, 0x3f, 0x41, 0xdb, 0x1b, 0x65, 0xd4, 0x4b, 0x8b, 0x10, 0x24, 0xac, 0xbb, 0xc7, 0x69, 0xe0, 0x53, 0xa5, 0x21, 0x01, 0x55, 0xaf, 0x10, 0x52, 0x48, 0x64, 0x86, 0x75, 0x97, 0x95, 0xe0, 0xde, 0x34, 0x76, 0x51, 0x87, 0x80, 0xf6, 0xe3, 0xe5, 0x6f, 0x4c, 0xb8, 0x1c, 0xe7, 0xd2, 0x96, 0x6f, 0x6a, 0x17, 0xa3, 0xfa, 0xf5, 0x2f, 0x6c, 0xa3, 0x28, 0x4e, 0x2c, 0x4e, 0xa6, 0x96, 0x4c, 0x50, 0xbf, 0x2c, 0x26, 0x26, 0x4d, 0x91, 0x0e, 0x68, 0xdb, 0x30, 0x93, 0xf8, 0x0d, 0x33, 0x02, 0x7f, 0x3c, 0x9b, 0x2c, 0x1a, 0x60, 0x90, 0x69, 0x50, 0x33, 0xf5, 0xdd, 0x48, 0x93, 0x40, 0xfa, 0x38, 0x28, 0x89, 0x46, 0x21, 0x48, 0xe0, 0x5f, 0xba, 0x17, 0xe4, 0x3c, 0xa9, 0xf3, 0x92, 0xb5, 0xf9, 0x0f, 0x5a, 0x46, 0xc9, 0x5d, 0x78, 0x10, 0x41, 0xb2, 0x81, 0x20, 0xcb, 0x25, 0x3c, 0xf4, 0x7f, 0xb8, 0xb4, 0x3b, 0xde, 0x3a, 0x8b, 0xdd, 0xc4, 0x6b, 0x91, 0x3b, 0x98, 0x62, 0x95, 0xb8, 0xc6, 0x2c, 0x7c, 0x78, 0x6f, 0xb6, 0x90, 0x68, 0x5f, 0xec, 0x1a, 0x7e, 0x3f, 0x23, 0x32, 0x42, 0x0b, 0xb4, 0xd6, 0x8d, 0xc7, 0xea, 0x3a, 0x90, 0x6e, 0x1f, 0x5f, 0x19, 0x2c, 0x21, 0xe7, 0x12, 0xcc, 0xdb, 0x28, 0x4a, 0x74, 0x31, 0x7f, 0x79, 0x90, 0x2b, 0xe6, 0x7e, 0x0c, 0x56, 0xc9, 0xea, 0xc6, 0x67, 0x16, 0xc2, 0x43, 0x22, 0x94, 0x81, 0xa1, 0x7a, 0x75, 0x5d, 0xcc, 0xfa, 0x2e, 0xcb, 0xf5, 0x63, 0x86, 0x45, 0x40, 0x97, 0xed, 0x4b, 0xbd, 0xb5, 0x10, 0xa8, 0x9a, 0x86, 0xaa, 0xf6, 0x97, 0x18, 0x9d, 0x64, 0xb9, 0xa8, 0x41, 0xb7, 0x43, 0xc5, 0xfc, 0x8f, 0xe2, 0xb3, 0x13, 0xec, 0x28, 0x0e, 0xbf, 0xf0, 0x3b, 0xaf, 0x84, 0xe7, 0xcf, 0xd4, 0xbe, 0x84, 0x51, 0x7a, 0x7d, 0x6d, 0x65, 0x0e, 0x92, 0xfb, 0x93, 0x45, 0xea, 0x3a, 0x3d, 0x49, 0x1b, 0x38, 0xd5, 0x15, 0x3d, 0x7c, 0x4d, 0x22, 0xfb, 0xd4, 0xce, 0x43, 0xe9, 0x54, 0xac, 0xcd, 0x19, 0x9b, 0x9a, 0xfc, 0xe9, 0x58, 0x1a, 0x92, 0x1e, 0x0d, 0x38, 0xc1, 0x37, 0x13, 0x78, 0x4b, 0xfb, 0xdf, 0x0d, 0xe8, 0x55, 0x83, 0x4b, 0xe8, 0x61, 0x77, 0x5f, 0x19, 0xc7, 0x9a, 0x3e, 0xeb, 0x48, 0x74, 0xdb, 0xd2, 0x96, 0xbe, 0x9d, 0xec, 0x69, 0x24, 0x10, 0xe4, 0xcf, 0x49, 0xdb, 0x16, 0xc3, 0x0c, 0xf2, 0xf4, 0x02, 0x0a, 0x0c, 0xa8, 0x1a, 0x63, 0x58, 0xfb, 0xc4, 0xc2, 0x6b, 0x75, 0x73, 0x97, 0x7d, 0xc5, 0x2d, 0xa7, 0xd6, 0x64, 0x9a, 0xc7, 0x83, 0x76, 0x5b, 0xe4, 0x4d, 0xf1, 0x9c, 0x47, 0xec, 0x00, 0xed, 0x17, 0x77, 0xaa, 0x4d, 0x20, 0x1f, 0xaf, 0x88, 0xd2, 0x1d, 0xb2, 0xc4, 0x8d, 0xe9, 0x9d, 0x56, 0x1c, 0xad, 0x42, 0xda, 0x7f, 0xf9, 0x3e, 0x82, 0xed, 0xb8, 0x23, 0xae, 0x19, 0x63, 0xd6, 0xbd, 0xb5, 0x74, 0x35, 0x23, 0x34, 0x1e, 0xfd, 0xbc, 0xd5, 0x3b, 0xeb, 0x61, 0xdd, 0x86, 0x22, 0xb8, 0x23, 0x0a, 0xcd, 0x50, 0xd2, 0xda, 0x05, 0xed, 0x6b, 0x03, 0xf5, 0x20, 0x09, 0xbf, 0x3c, 0x1b, 0xe9, 0xeb, 0x92, 0xc4, 0x29, 0xbb, 0xaf, 0x08, 0xd0, 0xad, 0x69, 0x72, 0x0f, 0xbb, 0x1c, 0xfc, 0xc7, 0xd5, 0x4e, 0x25, 0x4a, 0x8e, 0x93, 0x43, 0x66, 0x16, 0xaf, 0x1b, 0xa0, 0x68, 0xfb, 0xaf, 0xbd, 0xc4, 0x0a, 0x57, 0x87, 0x60, 0x8b, 0x13, 0xcd, 0x5b, 0x71, 0x20, 0xac, 0xf2, 0x52, 0xc9, 0x0d, 0xf6, 0x0d, 0x80, 0x6f, 0x7d, 0xb0, 0x2d, 0xe7, 0xd9, 0x99, 0xc6, 0x64, 0xc6, 0xdb, 0x20, 0x38, 0xe7, 0xe3, 0x05, 0xd4, 0x74, 0x5b, 0x86, 0xd3, 0x2d, 0x4e, 0x92, 0x3b, 0x92, 0x8d, 0xc8, 0xff, 0x55, 0x52, 0x8a, 0xc8, 0x10, 0x24, 0x53, 0xf4, 0x34, 0xfa, 0x4a, 0xdf, 0x41, 0xa3, 0x17, 0x62, 0x3d, 0x65, 0xf5, 0x9a, 0x5f, 0xe5, 0x08, 0xeb, 0x0b, 0x46, 0xf2, 0x44, 0x03, 0x95, 0xa1, 0xa4, 0xdb, 0x65, 0x6a, 0xdd, 0xad, 0xb6, 0x5c, 0x98, 0x0f, 0x1c, 0xce, 0x99 ],
-const [ 0x04, 0xc8, 0x73, 0xc0, 0x5d, 0xaf, 0x29, 0x99, 0x23, 0xa2, 0xbf, 0xce, 0xe1, 0x93, 0xaa, 0x10, 0x4f, 0xe9, 0x07, 0x17, 0x19, 0x30, 0x83, 0xf1, 0xe2, 0x0f, 0x79, 0x9a, 0x89, 0x7a, 0x5b, 0xcc, 0xab, 0x28, 0x53, 0x18, 0x69, 0x48, 0x2a, 0x36, 0x6b, 0x70, 0x68, 0x9a, 0x24, 0xd6, 0xbd, 0x47, 0x58, 0xc2, 0x9f, 0xe8, 0xdc, 0x43, 0x35, 0x1d, 0x9e, 0x22, 0x74, 0x13, 0xe5, 0x14, 0x88, 0x57, 0xd9, 0x33, 0x75, 0xec, 0x45, 0xaf, 0xfe, 0x9b, 0x9c, 0xc1, 0xc6, 0x8a, 0x3a, 0xe1, 0xb5, 0x10, 0xed, 0x39, 0x9d, 0xc8, 0xb4, 0x59, 0x1d, 0xe4, 0xc6, 0x2c, 0xc6, 0xc4, 0xd6, 0x2b, 0x7d, 0xc8, 0x96, 0xd0, 0x20, 0x62, 0x7a, 0x4e, 0x6d, 0x6f, 0xbe, 0x7f, 0x1f, 0xc7, 0xaa, 0x1e, 0x59, 0x12, 0x15, 0x36, 0x48, 0xde, 0x28, 0xda, 0x05, 0xef, 0x64, 0x17, 0xb8, 0xd6, 0xe6, 0x27, 0x03, 0xc6, 0xea, 0xe7, 0x9e, 0xa2, 0x8f, 0x8c, 0x3e, 0x5a, 0xda, 0x91, 0xbc, 0x78, 0xfc, 0xf3, 0x73, 0xf6, 0xd8, 0xa1, 0xea, 0x53, 0xc0, 0x2e, 0xb3, 0xe6, 0x7f, 0xca, 0x92, 0x71, 0x9d, 0x70, 0xe2, 0xf9, 0xde, 0x61, 0x35, 0xd5, 0x0c, 0xd0, 0x3b, 0x06, 0xf6, 0xdf, 0xe5, 0xc6, 0xb9, 0xca, 0xc9, 0x63, 0x3e, 0x62, 0xc9, 0x4e, 0x04, 0xbe, 0xef, 0x6f, 0x20, 0x2d, 0x9c, 0xbc, 0x82, 0x6e, 0xe2, 0x0a, 0x79, 0x24, 0x2e, 0x23, 0x7a, 0x84, 0x2a, 0x18, 0x1d, 0x51, 0xe1, 0xd9, 0x68, 0x0a, 0x25, 0x02, 0x50, 0x62, 0x2d, 0xf8, 0x7d, 0xf0, 0x83, 0x35, 0x4e, 0x28, 0x1e, 0xe0, 0x1d, 0x8a, 0xca, 0xa1, 0xc4, 0x19, 0xd1, 0xb3, 0x5f, 0x0f, 0xd4, 0x3b, 0x54, 0xcf, 0xfa, 0xd8, 0x91, 0x1b, 0x4d, 0x7b, 0x15, 0x87, 0x60, 0x79, 0xb2, 0x2d, 0x35, 0xde, 0x11, 0xa3, 0x5f, 0x05, 0xf6, 0x2a, 0x64, 0x65, 0xc5, 0x28, 0x65, 0xae, 0x46, 0xd9, 0x01, 0x15, 0xa5, 0x41, 0x76, 0xeb, 0xbd, 0x65, 0x09, 0x75, 0x95, 0xba, 0xa9, 0xf8, 0x2b, 0xde, 0xcf, 0x13, 0x71, 0x86, 0xa8, 0x51, 0x96, 0xb8, 0x76, 0xff, 0x86, 0x3a, 0x34, 0x3b, 0xb4, 0x4a, 0x78, 0x4e, 0x17, 0x8f, 0x9e, 0x3c, 0x72, 0x50, 0x23, 0x99, 0xd9, 0xe4, 0x4f, 0x9d, 0x71, 0x69, 0x17, 0x7b, 0x77, 0xb9, 0x41, 0xef, 0x84, 0x9a, 0xc9, 0x16, 0x0f, 0x35, 0x84, 0x83, 0x33, 0xca, 0x03, 0x8f, 0xb2, 0xa1, 0xba, 0xf0, 0x3b, 0x44, 0x61, 0x8e, 0xe8, 0xeb, 0x9b, 0x92, 0x0b, 0x38, 0xd6, 0xbf, 0x2a, 0x24, 0x72, 0x05, 0x48, 0x3a, 0x25, 0x53, 0x66, 0x03, 0x9e, 0xae, 0x4a, 0xc1, 0x68, 0x80, 0x7f, 0x5f, 0x12, 0x32, 0x9d, 0xa9, 0x8d, 0xfc, 0xcb, 0xb9, 0xd5, 0xfc, 0x81, 0xb1, 0xd3, 0x86, 0x93, 0xb0, 0x83, 0xbc, 0x6b, 0xfe, 0x52, 0x5e, 0x95, 0x8a, 0xca, 0xe3, 0x82, 0x97, 0x70, 0xc8, 0x85, 0xb2, 0xed, 0x28, 0x22, 0xe7, 0x6d, 0x8d, 0x88, 0x34, 0x45, 0x06, 0x5c, 0x3e, 0xd8, 0x79, 0xb8, 0x43, 0xbb, 0x3b, 0x74, 0x50, 0x17, 0xde, 0xa4, 0xb4, 0x4f, 0x4a, 0x61, 0xb4, 0xe3, 0x0f, 0xcd, 0x80, 0x95, 0xfa, 0x51, 0x66, 0xca, 0xe7, 0x29, 0x46, 0x32, 0xd5, 0x23, 0x46, 0xab, 0x40, 0xa3, 0xc6, 0x63, 0xab, 0xeb, 0x97, 0x3d, 0x7c, 0x99, 0x67, 0x77, 0x0c, 0x71, 0x80, 0x89, 0xff, 0x5d, 0xb3, 0x50, 0xd1, 0xb2, 0x8e, 0x6b, 0xb2, 0xb5, 0xd6, 0xe6, 0x94, 0x5e, 0x31, 0x15, 0x82, 0x5c, 0x22, 0xc3, 0x33, 0x58, 0x3a, 0x8d, 0xdf, 0x7e, 0x8d, 0x88, 0x51, 0x3a, 0x64, 0x2a, 0x3e, 0x3f, 0x31, 0x67, 0xd5, 0xce, 0xc8, 0x1a, 0x97, 0x35, 0xcb, 0xa7, 0x69, 0x96, 0x66, 0xde, 0xe7, 0xe9, 0x3d, 0x23, 0xfc, 0x44, 0xa3, 0xcc, 0xaf, 0x5a, 0x0d, 0xcb, 0x40, 0x43, 0xc6, 0x8d, 0x74, 0x7b, 0xe4, 0x22, 0x2d, 0x2c, 0x7a, 0x9d, 0x3d, 0xb0, 0x0f, 0xbe, 0x7c, 0x51, 0x4f, 0xce, 0x19, 0x54, 0x01, 0xcb, 0x2d, 0x37, 0x39, 0xc5, 0x96, 0x36, 0xcf, 0x88, 0x02, 0x14, 0x0f, 0x7b, 0x4a, 0x17, 0xb2, 0xc8, 0x02, 0x55, 0x0e, 0xbd, 0x4e, 0x2e, 0x89, 0x73, 0xf6, 0x1a, 0x53, 0xad, 0xbd, 0xa5, 0x55, 0x02, 0xef, 0xb7, 0x64, 0x3f, 0x3a, 0x19, 0xbb, 0x07, 0xbe, 0x35, 0xa8, 0xbc, 0x67, 0x1d, 0x85, 0xa3, 0x7b, 0xcf, 0xea, 0x42, 0x6f, 0xb8, 0x21, 0x0d, 0xff, 0x76, 0xda, 0x42, 0x7e, 0xe2, 0x20, 0x12, 0x6a, 0x4e, 0x8c, 0x01, 0x43, 0x0b, 0xb9, 0x8f, 0x9d, 0x2f, 0xf7, 0x18, 0x75, 0x94, 0x44, 0xf9, 0xc1, 0x24, 0x78, 0xf4, 0x4a, 0x54, 0xbf, 0xd6, 0xbe, 0xef, 0x4c, 0x56, 0x01, 0x15, 0x4c, 0x41, 0xc5, 0x83, 0x19, 0xd4, 0x5a, 0x15, 0xb1, 0x69, 0xc7, 0x88, 0x66, 0x57, 0x19, 0x85, 0xd7, 0x13, 0xfb, 0xdb, 0x1e, 0x9b, 0x87, 0x0d, 0x4b, 0x14, 0x5c, 0x0c, 0x12, 0xb1, 0xf1, 0x45, 0xc0, 0xd8, 0x29, 0xde, 0x73, 0x80, 0x27, 0x3d, 0x8b, 0xde, 0x63, 0xcb, 0x5c, 0x40, 0xfd, 0xf7, 0x25, 0x39, 0x52, 0x7d, 0x46, 0xfe, 0xce, 0xe8, 0xad, 0x10, 0x01, 0x55, 0x92, 0x1b, 0xf4, 0x7b, 0x64, 0x1e, 0xbd, 0xe8, 0x03, 0xcd, 0x51, 0x8d, 0x2f, 0x34, 0x9a, 0x7d, 0x41, 0x9c, 0xc9, 0xf2, 0x18, 0xb2, 0xee, 0x91, 0x57, 0xe6, 0xc5, 0xef, 0xce, 0x12, 0xd3, 0x53, 0x35, 0x5c, 0xb2, 0xbe, 0x20, 0x5d, 0xaa, 0x28, 0x2f, 0x83, 0x81, 0x0d, 0x85, 0xb3, 0x93, 0x28, 0x7c, 0x33, 0x25, 0x7f, 0x97, 0xc8, 0xf6, 0x9f, 0xb9, 0x1b, 0x17, 0x29, 0x94, 0x61, 0xfd, 0x8d, 0x63, 0x3b, 0xd5, 0x16, 0xdc, 0xdb, 0x17, 0x27, 0x60, 0x69, 0x5e, 0xc4, 0x76, 0xa5, 0x77, 0x53, 0x77, 0xcd, 0xb7, 0xa4, 0x8b, 0xc1, 0x92, 0x30, 0xd3, 0x65, 0x6a, 0x9e, 0xe8, 0x47, 0xa5, 0x8c, 0x85, 0x82, 0x02, 0x8b, 0x80, 0xe2, 0x2d, 0x6b, 0xff, 0x48, 0x91, 0xba, 0xe8, 0x50, 0x6d, 0x87, 0x99, 0x32, 0x2a, 0x6b, 0xda, 0xe6, 0xec, 0xcb, 0x0f, 0x8c, 0x67, 0x57, 0xb3, 0x0a, 0xf4, 0xd6, 0x01, 0xf7, 0xe3, 0x26, 0xf4, 0xb8, 0x13, 0x7e, 0x72, 0xe8, 0xc1, 0xf7, 0xc4, 0xfe, 0x9e, 0x4b, 0x4a, 0x29, 0x24, 0xdc, 0x6d, 0x7f, 0x29, 0xf8, 0xd4, 0x57, 0xb5, 0x5b, 0xdb, 0xf3, 0x11, 0xf5, 0x41, 0x63, 0x20, 0xee, 0x20, 0xa5, 0xf2, 0xe8, 0x23, 0x11, 0x97, 0x84, 0xf3, 0xf5, 0x31, 0x27, 0xf2, 0x7c, 0x4d, 0xfe, 0x2c, 0xd4, 0x74, 0x3f, 0x8b, 0x8f, 0xfc, 0xb2, 0x4a, 0x4a, 0x24, 0x71, 0xab, 0x8d, 0x61, 0xec, 0xed, 0xf3, 0xf2, 0x2f, 0x78, 0x8b, 0xba, 0x68, 0x5c, 0x7d, 0x4f, 0xa3, 0xf9, 0xf1, 0x4f, 0xd9, 0xff, 0x2c, 0xf3, 0x29, 0x9a, 0xfc, 0xe6, 0x65, 0xe6, 0x57, 0x57, 0xd0, 0xa9, 0x3f, 0x4d, 0x26, 0x41, 0xe8, 0x3a, 0xdd, 0xdb, 0x1d, 0xd4, 0xab, 0xe6, 0xe0, 0x20, 0x48, 0xc8, 0x51, 0xcf, 0x75, 0xcf, 0xd1, 0xce, 0x3d, 0x6a, 0x66, 0x19, 0x7b, 0x99, 0x61, 0xd0, 0x9c, 0xa2, 0x3f, 0x8c, 0xa6, 0x06, 0xce, 0xf3, 0x79, 0xb3, 0x91, 0x8a, 0x56, 0x7b, 0x64, 0xcb, 0x9d, 0xc5, 0x63, 0x78, 0xdb, 0x82, 0x09, 0x2e, 0x03, 0x63, 0x95, 0x3d, 0xfc, 0x49, 0xb2, 0xb7, 0x5c, 0xfe, 0x56, 0xc7, 0x74, 0x22, 0xeb, 0x44, 0x8c, 0x68, 0xad, 0x86, 0x6f, 0x02, 0x53, 0x79, 0x2b, 0x59, 0xf1, 0xef, 0x12, 0x02, 0x1d, 0x3b, 0x04, 0xed, 0x51, 0xfb, 0xf1, 0xe0, 0x90, 0x35, 0x99, 0x24, 0x4c, 0xa6, 0x96, 0x7f, 0x88, 0x56, 0x9d, 0x62, 0x3a, 0x70, 0x01, 0x62, 0xf3, 0x51, 0x78, 0xec, 0xc1, 0xdf, 0x22, 0x35, 0x55, 0x1c, 0xc7, 0x71, 0x61, 0xfb, 0x61, 0x45, 0x44, 0x72, 0xda, 0x7e, 0xe9, 0xd0, 0x16, 0x03, 0xec, 0x51, 0x34, 0x08, 0xff, 0xef, 0x11, 0x85, 0x8d, 0x7c, 0x0e, 0xe7, 0x9d, 0xee, 0x14, 0x05, 0xf8, 0xfa, 0xd5, 0x55, 0x8e, 0xe4, 0x54, 0x60, 0x16, 0x95, 0xa7, 0x73, 0xf5, 0xee, 0xfb, 0x98, 0x61, 0x5c, 0xda, 0xc4, 0xc6, 0xac, 0xa9, 0x52, 0x68, 0x21, 0x75, 0xb0, 0x4b, 0xc4, 0xef, 0x59, 0x50, 0xfc, 0xb4, 0x03, 0xa0, 0x5e, 0xd2, 0x19, 0x4d, 0xc6, 0x88, 0x6b, 0x37, 0xa7, 0x4e, 0x25, 0x2d, 0x9f, 0x15, 0xfd, 0x55, 0x4f, 0xd0, 0xb1, 0xce, 0x69, 0x33, 0xb1, 0x93, 0x0a, 0xbb, 0x18, 0xa3, 0x4b, 0xee, 0xe1, 0x5f, 0x13, 0xe4, 0x58, 0x33, 0x2f, 0x06, 0xce, 0x78, 0xa4, 0x16, 0x91, 0x99, 0x43, 0x70, 0x1c, 0x75, 0x7f, 0x8f, 0x8a, 0x05, 0x7c, 0xd2, 0x51, 0x3f, 0x68, 0x80, 0x2c, 0x3a, 0x0e, 0x0b, 0x59, 0x92, 0xa8, 0x91, 0x05, 0x0e, 0xf5, 0xa8, 0x05, 0x80, 0x8c, 0x5b, 0xc6, 0xed, 0x70, 0x70, 0x87, 0xee, 0xe4, 0xed, 0xc5, 0x56, 0x81, 0xda, 0xf7, 0x15, 0x85, 0x47, 0x7c, 0x5d, 0x6e, 0x91, 0xd2, 0x03, 0xc8, 0xe2, 0x08, 0x27, 0x43, 0xf7, 0x76, 0x17, 0x08, 0x26, 0xab, 0x71, 0x4d, 0x9f, 0xa7, 0x88, 0x27, 0xf2, 0x4b, 0x09, 0xa0, 0xd1, 0x0d, 0xdf, 0x0a, 0x17, 0xf0, 0x53, 0x93, 0x0a, 0xb4, 0x78, 0x19, 0xdd, 0x49, 0xc6, 0x3f, 0x7a, 0x8a, 0x05, 0xc0, 0x7e, 0x28, 0x6d, 0x03, 0x84, 0xe4, 0x0b, 0xf0, 0xa6, 0x02, 0x66, 0x03, 0x41, 0xfa, 0x63, 0x9e, 0xf9, 0x70, 0x66, 0xa4, 0xfd, 0x66, 0xba, 0x43, 0x8c, 0xb1, 0x33, 0x11, 0xb9, 0xa9, 0x11, 0x5b, 0x6b, 0x25, 0x28, 0xb9, 0xa7, 0xa7, 0x3e, 0xe6, 0x12, 0xd3, 0xb5, 0xcf, 0xb1, 0x26, 0x6a, 0xea, 0xf4, 0xe4, 0xdc, 0xc9, 0xf3, 0x52, 0x91, 0xef, 0xf7, 0x26, 0xb5, 0xe2, 0x3c, 0x3c, 0x05, 0x82, 0xf5, 0x8a, 0xeb, 0x98, 0x91, 0x56, 0xea, 0xb2, 0x3d, 0xa6, 0x3d, 0x2f, 0xaa, 0xf9, 0xbb, 0x96, 0x10, 0x34, 0xfe, 0x2c, 0x73, 0xdf, 0xc4, 0xc5, 0x25, 0x91, 0x95, 0xda, 0x8c, 0xa9, 0xa7, 0xdc, 0x25, 0x3f, 0xfe, 0xc8, 0xc9, 0x5b, 0xd7, 0xfc, 0x2f, 0x64, 0x47, 0x49, 0xb3, 0xdb, 0x20, 0x49, 0x55, 0x49, 0x14, 0xf2, 0x05, 0x75, 0x1d, 0x6c, 0x1e, 0xdb, 0x1c, 0x20, 0x30, 0x5a, 0xc0, 0x12, 0x02, 0x2d, 0xa9, 0x70, 0xd7, 0x1c, 0xcd, 0x6b, 0xf1, 0xf3, 0x1b, 0x45, 0x54, 0x34, 0x5f, 0xab, 0xcc, 0x09, 0x66, 0x46, 0x31, 0x7c, 0x62, 0x8d, 0xea, 0xea, 0x8f, 0xdd, 0xb0, 0xb5, 0x17, 0xcb, 0x94, 0x3a, 0x34, 0xb9, 0x44, 0x03, 0x94, 0xa7, 0x8a, 0x3d, 0x01, 0x4c, 0x15, 0x6c, 0x41, 0x65, 0x7c, 0x5d, 0x3b, 0x4e, 0x80, 0x5c, 0x5c, 0xcf, 0x92, 0xa8, 0x39, 0x38, 0x95, 0x24, 0x76, 0xb0, 0xe4, 0x4f, 0xe6, 0xca, 0x97, 0x76, 0xf3, 0x59, 0x02, 0x29, 0x41, 0x86, 0x7f, 0xeb, 0x8e, 0x1f, 0x6e, 0x2d, 0xdd, 0x32, 0x79, 0x7e, 0xd3, 0xdb, 0x1d, 0xfc, 0x61, 0x5a, 0x65, 0x0e, 0xa3, 0x68, 0xf9, 0x55, 0x08, 0xcc, 0x58, 0xdf, 0xb4, 0x29, 0x62, 0x9e, 0x22, 0x1a, 0x19, 0x19, 0x0e, 0x80, 0xa8, 0x62, 0x92, 0x1b, 0xa5, 0x48, 0x8f, 0x58, 0x93, 0xcd, 0x4e, 0x6a, 0xab, 0xdb, 0x67, 0x9c, 0xdc, 0x32, 0xe2, 0xe6, 0x10, 0xa5, 0x9d, 0xbe, 0xb1, 0x86, 0xed, 0x30, 0x6b, 0x5f, 0x88, 0x31, 0x34, 0xe2, 0xa3, 0x31, 0x8a, 0x23, 0x57, 0xef, 0xfc, 0x05, 0x49, 0x91, 0xec, 0xf2, 0x8a, 0xf4, 0x93, 0xd0, 0xbc, 0x41, 0x46, 0x30, 0x77, 0xc1, 0xf7, 0xc8, 0xeb, 0xf2, 0xfe, 0x23, 0xc6, 0xda, 0x1a, 0x97, 0x58, 0x9b, 0xb2, 0x78, 0xf4, 0x48, 0x61, 0x8b, 0x9a, 0xf7, 0xb2, 0xbd, 0xd4, 0x17, 0x28, 0x15, 0xde, 0x04, 0x82, 0xe8, 0x09, 0xd9, 0x3c, 0x4c, 0x61, 0x86, 0x59, 0xce, 0x8e, 0x22, 0x60, 0x68, 0xf8, 0x82, 0xa5, 0xad, 0x2f, 0x0a, 0xc9, 0x47, 0x89, 0xc3, 0x84, 0xa3, 0x0d, 0xae, 0xa2, 0xeb, 0x8f, 0x58, 0x4c, 0x35, 0x1d, 0xaf, 0x89, 0xfa, 0x9a, 0x14, 0x05, 0xc9, 0xa9, 0xb1, 0x10, 0x3c, 0xcd, 0x0d, 0xe9, 0x2c, 0xce, 0xdd, 0x3d, 0x21, 0x5e, 0x1e, 0xeb, 0x0c, 0xfc, 0x60, 0x0a, 0x39, 0x19, 0x65, 0x2d, 0x7f, 0x79, 0xea, 0xe5, 0xba, 0xdd, 0xc5, 0x88, 0x7b, 0xdf, 0x30, 0x31, 0xfd, 0x1d, 0x65, 0x08, 0x5b, 0x99, 0x6b, 0xc4, 0x01, 0x60, 0x2f, 0x6e, 0x60, 0x6a, 0xd6, 0x67, 0xe7, 0xc2, 0x52, 0xac, 0x2e, 0xe6, 0x33, 0x59, 0x74, 0x71, 0xc0, 0x6c, 0x4b, 0xf7, 0x47, 0xcc, 0x92, 0x31, 0xb1, 0x8a, 0xa4, 0x5a, 0x59, 0x66, 0xcf, 0xd8, 0x1f, 0x95, 0x08, 0x1f, 0xb8, 0xc1, 0xdc, 0xd3, 0x48, 0x52, 0xaa, 0x2c, 0x32, 0xec, 0x10, 0x9f, 0x2e, 0x38, 0xa3, 0xbb, 0x9d, 0xe8, 0xe3, 0x51, 0x1a, 0xf5, 0x6e, 0xd7, 0x52, 0x2b, 0x73, 0x0e, 0x15, 0xe8, 0x6a, 0xe3, 0xad, 0x21, 0x02, 0x93, 0x6e, 0xa5, 0x5b, 0x13, 0x8e, 0xa6, 0x76, 0xaf, 0x37, 0x75, 0xea, 0xf1, 0xdb, 0x8d, 0xd8, 0xc4, 0xc8, 0xd3, 0x20, 0xd9, 0xfc, 0x1c, 0xd5, 0x4a, 0x3a, 0xf0, 0xef, 0x7e, 0x5d, 0x8e, 0x40, 0x4c, 0xed, 0x2f, 0xaa, 0x63, 0xf0, 0x8f, 0x8e, 0xe9, 0x02, 0xaa, 0x87, 0x62, 0xa8, 0xc3, 0x59, 0xd4, 0xe2, 0xab, 0x24, 0x28, 0xff, 0x40, 0xde, 0xd4, 0xb5, 0x34, 0xff, 0xb7, 0x71, 0x10, 0x7e, 0x44, 0xec, 0x78, 0xfd, 0xe3, 0xff, 0xb0, 0x41, 0x94, 0xb8, 0x5f, 0xe4, 0xd6, 0xad, 0x93, 0x4e, 0xc7, 0x90, 0x06, 0xe1, 0x8c, 0x04, 0xa0, 0x74, 0xf3, 0xaf, 0x3c, 0x03, 0x57, 0x91, 0xaf, 0xa4, 0xc5, 0x94, 0x06, 0xbd, 0x5c, 0x64, 0x10, 0x75, 0xfa, 0x80, 0x1d, 0x68, 0x15, 0x92, 0x04, 0x9f, 0xe6, 0xfc, 0x6b, 0xbf, 0xcd, 0xb3, 0x42, 0x80, 0xf1, 0x50, 0x91, 0x61, 0x27, 0x64, 0x74, 0x9b, 0x15, 0x0c, 0x63, 0x53, 0x97, 0xc6, 0xb7, 0x13, 0x61, 0x83, 0x6a, 0x7b, 0xe6, 0xfe, 0x1f, 0x34, 0x79, 0x4b, 0x62, 0x26, 0xb2, 0xb3, 0x30, 0xeb, 0x14, 0xbf, 0xba, 0x83, 0xec, 0x93, 0x66, 0x49, 0x7c, 0x7d, 0x17, 0x25, 0x59, 0xce, 0xae, 0x04, 0x12, 0xe9, 0xd1, 0x85, 0x12, 0x99, 0xeb, 0xf5, 0xc8, 0xa8, 0x73, 0x7e, 0x05, 0xad, 0x72, 0x9b, 0xa5, 0x25, 0x3f, 0xcf, 0x71, 0xc5, 0x8d, 0x97, 0x44, 0x0f, 0xa8, 0x9d, 0x6d, 0x24, 0xfc, 0x2e, 0x55, 0xd9, 0xd7, 0xee, 0x62, 0x0c, 0x70, 0xcb, 0x1a, 0x39, 0x27, 0x2f, 0x8c, 0x48, 0x0e, 0x7a, 0xeb, 0xa9, 0xa9, 0xaf, 0x7d, 0xa3, 0xf2, 0x6d, 0xb3, 0xe9, 0xa0, 0x22, 0x9a, 0x6f, 0xa9, 0x7b, 0x72, 0x7b, 0x06, 0x1f, 0x9b, 0xff, 0xb6, 0x9c, 0xb9, 0x26, 0x05, 0xa1, 0x10, 0x2d, 0x0e, 0x6f, 0x30, 0x74, 0x7f, 0x8a, 0xd7, 0xd5, 0x9c, 0xb4, 0x13, 0x34, 0x87, 0x1b, 0xa7, 0x57, 0xbe, 0xd2, 0xb0, 0xf8, 0xe5, 0x7e, 0x88, 0x19, 0xc6, 0x52, 0xeb, 0x98, 0x96, 0x3d, 0x58, 0x03, 0x79, 0x61, 0xba, 0xad, 0x49, 0xc8, 0x48, 0x02, 0x93, 0x52, 0xaa, 0x17, 0xe3, 0xf2, 0x5d, 0x86, 0x42, 0x1a, 0x58, 0x78, 0xfc, 0x74, 0xf0, 0x03, 0xa7, 0xd3, 0xf9, 0xb7, 0x60, 0x69, 0x2e, 0x73, 0x58, 0x3a, 0xd3, 0x7d, 0x90, 0xd0, 0x98, 0xd2, 0xe0, 0x31, 0xc1, 0xbb, 0x3e, 0x0e, 0x84, 0xa1, 0x3d, 0x3d, 0xb2, 0x22, 0xd4, 0x6a, 0x9a, 0x65, 0x61, 0x09, 0x2b, 0xaa, 0xed, 0x8e, 0x58, 0x25, 0xb2, 0xe1, 0xc1, 0x0c, 0xda, 0x0c, 0x8f, 0xef, 0x8a, 0x37, 0x9f, 0x48, 0x1f, 0xd7, 0xe4, 0x53, 0xb8, 0x22, 0x06, 0x1f, 0xf4, 0xc6, 0x4f, 0xe5, 0xfd, 0xda, 0xc8, 0x9a, 0xc5, 0x15, 0x9f, 0xc0, 0x8f, 0x3e, 0xcc, 0x81, 0xb2, 0xe3, 0xf4, 0xfe, 0x99, 0x4e, 0x8e, 0xe5, 0x0f, 0xb5, 0x44, 0x41, 0xb9, 0xb1, 0x9c, 0x97, 0xe4, 0xf1, 0xd7, 0x2e, 0x82, 0x30, 0x1a, 0xae, 0x6e, 0x64, 0xcb, 0xed, 0xf8, 0x39, 0x3e, 0x05, 0x9d, 0xbd, 0x91, 0xaa, 0x16, 0x5d, 0xd4, 0xba, 0x95, 0x10, 0x6d, 0x16, 0x4b, 0xd2, 0xbb, 0xb1, 0x2d, 0x54, 0xfa, 0xe6, 0xf8, 0xf2, 0x67, 0x0f, 0x72, 0xe5, 0xa4, 0x53, 0xf3, 0xba, 0x5d, 0xbf, 0x25, 0x02, 0x2c, 0x98, 0x08, 0x4c, 0xba, 0xf0, 0x39, 0x50, 0x28, 0x78, 0x73, 0x6d, 0xad, 0x95, 0x56, 0x56, 0x80, 0xb6, 0x67, 0x08, 0xf8, 0xe4, 0x59, 0xff, 0xf1, 0x9b, 0x8b, 0xa9, 0x73, 0xd8, 0xd1, 0x1b, 0x8e, 0x73, 0x77, 0x03, 0x88, 0xaf, 0x83, 0xdd, 0x3b, 0x10, 0x3b, 0x6a, 0xb8, 0x6c, 0xe7, 0x5e, 0x30, 0x45, 0xd8, 0x59, 0x15, 0x56, 0xa9, 0x19, 0x7c, 0x6c, 0xc5, 0xee, 0xc6, 0x77, 0x29, 0x6e, 0x7f, 0xe1, 0x6c, 0x69, 0x86, 0x1e, 0xfc, 0x20, 0x6e, 0x85, 0xaa, 0xb1, 0x25, 0x5e, 0x69, 0xd6, 0xd3, 0x3c, 0x52, 0xcf, 0x05, 0x8d, 0xec, 0x9d, 0x0b, 0x6f, 0xab, 0x71, 0x9e, 0xc5, 0xb6, 0x64, 0xc7, 0x8a, 0xed, 0x68, 0xfc, 0x66, 0x2b, 0x7f, 0x8b, 0x7f, 0xc8, 0x2b, 0x3c, 0x92, 0x63, 0x25, 0x31, 0x42, 0xde, 0x51, 0x12, 0xb0, 0xa9, 0xf2, 0x67, 0x4b, 0x44, 0x1b, 0x45, 0xea, 0xff, 0x66, 0x2d, 0x18, 0x05, 0xe7, 0x31, 0xae, 0x98, 0x63, 0x58, 0xa8, 0x9e, 0xbe, 0x44, 0x31, 0x5d, 0xb3, 0x12, 0x00, 0x83, 0xc8, 0x82, 0xe7, 0x69, 0x80, 0x58, 0xa9, 0x98, 0xd2, 0x02, 0x0d, 0x8d, 0xda, 0x7a, 0x30, 0xb9, 0xcf, 0x6e, 0x1f, 0xcc, 0x35, 0x9f, 0xa5, 0x33, 0x53, 0x87, 0x62, 0xdf, 0xe8, 0x3e, 0x1d, 0x49, 0x1a, 0x9e, 0x5c, 0xb3, 0xaf, 0xa6, 0x31, 0xb0, 0x7f, 0x1c, 0x56, 0xe6, 0x29, 0x76, 0x7c, 0x13, 0x06, 0xfb, 0xe1, 0x4e, 0x5b, 0x26, 0x21, 0x90, 0xd3, 0x4b, 0x4e, 0x72, 0x2c, 0x7c, 0x42, 0x38, 0x30, 0xae, 0x34, 0x0f, 0xe7, 0x18, 0x8a, 0x93, 0x0b, 0xdc, 0xee, 0x94, 0xbc, 0xe9, 0xa4, 0x1a, 0x75, 0x20, 0x1b, 0xa6, 0x3f, 0xb6, 0xc2, 0xbb, 0x24, 0xd9, 0x1c, 0x9d, 0xe7, 0x96, 0x17, 0x59, 0xf2, 0xfa, 0x9a, 0x05, 0x90, 0x77, 0x5d, 0x49, 0x5c, 0x8a, 0xfd, 0x1f, 0xfa, 0x9b, 0x50, 0xd6, 0x04, 0x25, 0xf6, 0x5d, 0x47, 0x16, 0x30, 0xbe, 0x30, 0x79, 0xf5, 0xe9, 0x81, 0x52, 0x43, 0xb3, 0x48, 0xc9, 0xb4, 0x1e, 0x12, 0x8b, 0x51, 0xdb, 0x5c, 0x6e, 0xaa, 0x0d, 0x4a, 0x54, 0x27, 0x50, 0x9c, 0x51, 0x99, 0xfa, 0xdd, 0x10, 0x14, 0xa1, 0xdd, 0x72, 0x01, 0xdd, 0x62, 0x79, 0x6f, 0x4e, 0x1b, 0x65, 0xaa, 0xe1, 0xd5, 0x1c, 0x0f, 0x50, 0xf1, 0xcf, 0x1e, 0xe8, 0x16, 0xdb, 0xd1, 0x8f, 0x23, 0xed, 0x2c, 0x05, 0x68, 0x6a, 0x16, 0x6a, 0x15, 0x0e, 0x67, 0x01, 0xf2, 0xd3, 0x42, 0x33, 0x51, 0x14, 0xa5, 0xd7, 0x42, 0xf2, 0x3e, 0xb0, 0x05, 0xf7, 0x81, 0x37, 0xc5, 0xf9, 0xf7, 0x9b, 0x83, 0x41, 0xd9, 0x07, 0x50, 0xed, 0xdd, 0x23, 0xbf, 0x93, 0x50, 0xdd, 0x9a, 0x27, 0x65, 0x69, 0xd4, 0x1f, 0xcd, 0x86, 0xbf, 0xd4, 0x87, 0x04, 0x7f, 0x2c, 0xfa, 0x83, 0xbf, 0x76, 0x41, 0x7d, 0xa2, 0x95, 0xc6, 0x87, 0xfc, 0x61, 0x12, 0xd3, 0xc3, 0x4a, 0xe3, 0xfa, 0xc0, 0x3f, 0x7f, 0xf8, 0x8a, 0xce, 0x49, 0x78, 0xb5, 0x8c, 0x92, 0x53, 0x47, 0xb7, 0xb1, 0x53, 0x6b, 0x1a, 0x56, 0x3c, 0x6a, 0x31, 0x1b, 0x0d, 0xd6, 0x8e, 0x5c, 0x83, 0x09, 0x7b, 0x49, 0xdf, 0xce, 0xe1, 0x39, 0xe9, 0x5d, 0x68, 0x42, 0x35, 0x8d, 0xe0, 0x06, 0xa5, 0x45, 0xe0, 0xcf, 0x2f, 0x33, 0xac, 0xdf, 0xe0, 0xc1, 0x5c, 0x01, 0x21, 0x45, 0x3b, 0x64, 0x3a, 0x78, 0x6e, 0xa9, 0x14, 0x2a, 0xd6, 0x3b, 0x43, 0x34, 0x37, 0xdf, 0x43, 0xad, 0x99, 0x8c, 0x02, 0x61, 0xee, 0x7c, 0x9f, 0x7e, 0xf6, 0x83, 0x72, 0x91, 0x60, 0xa0, 0x4c, 0xb1, 0x32, 0xd2, 0x00, 0xfa, 0x6a, 0x2c, 0x22, 0x3e, 0xe5, 0x2c, 0x0e, 0xf6, 0x81, 0x49, 0x2c, 0x7f, 0x7f, 0xcb, 0x73, 0x83, 0x2b, 0xdf, 0x2c, 0xb5, 0xbe, 0xeb, 0xf9, 0xc1, 0x83, 0x1f, 0x15, 0x82, 0x39, 0x4d, 0xdd, 0x76, 0xb9, 0xfa, 0x90, 0x70, 0xd8, 0xb5, 0x53, 0x8d, 0x8f, 0xa7, 0x78, 0x69, 0x59, 0x6c, 0xff, 0x93, 0xdd, 0x21, 0x5d, 0x3e, 0xcd, 0xbe, 0x7d, 0x39, 0x0e, 0xa6, 0x05, 0x21, 0x19, 0x7d, 0xda, 0xd5, 0xa1, 0x3a, 0xe6, 0x2a, 0x76, 0x7d, 0x19, 0xe0, 0xa9, 0x22, 0xad, 0xd5, 0xf1, 0x16, 0xaf, 0x79, 0x4d, 0x69, 0xbb, 0x82, 0xeb, 0xa5, 0x07, 0xe1, 0x49, 0x5f, 0xa2, 0xf4, 0x9a, 0x0b, 0xfe, 0xfd, 0x6b, 0x15, 0xad, 0xd3, 0x86, 0x2d, 0x68, 0xd7, 0x16, 0xe2, 0x55, 0x2a, 0x0d, 0x72, 0x8a, 0x1d, 0xc3, 0xe0, 0xcd, 0xe9, 0xdf, 0x48, 0x9d, 0xa1, 0x7b, 0x70, 0x77, 0x64, 0x83, 0x9f, 0x52, 0xd7, 0x5e, 0xb2, 0x6c, 0xd2, 0xd1, 0x6c, 0x48, 0x5a, 0x20, 0x0e, 0xf7, 0xd0, 0x76, 0x27, 0x98, 0x67, 0x86, 0xae, 0x1b, 0xdc, 0x73, 0x4e, 0x4a, 0x61, 0xed, 0x01, 0x09, 0xda, 0x9e, 0xe0, 0xdc, 0x4b, 0xc4, 0x3a, 0xab, 0x91, 0x1f, 0xe3, 0xc2, 0x51, 0x0d, 0xce, 0x1c, 0x2f, 0xf4, 0xde, 0xe1, 0x40, 0xe0, 0xfa ],
-const [ 0x13, 0xc1, 0x23, 0xac, 0x37, 0x91, 0x46, 0xd0, 0x66, 0x76, 0x7a, 0xc0, 0x2b, 0xa4, 0xbc, 0xda, 0x80, 0xfb, 0xf8, 0xa4, 0xe4, 0xce, 0xc5, 0xb0, 0xad, 0xe8, 0x4f, 0xc3, 0xa0, 0xd1, 0x94, 0x35, 0xbf, 0x4d, 0xd4, 0x9b, 0x62, 0x26, 0x42, 0xa4, 0x89, 0x2b, 0x00, 0x41, 0x71, 0x79, 0x4a, 0x09, 0x65, 0xf9, 0xf2, 0xdb, 0xd7, 0x2a, 0x0c, 0xc5, 0xaf, 0x21, 0xea, 0x24, 0xe3, 0xce, 0x4b, 0x0d, 0x48, 0x80, 0xcf, 0xec, 0xa8, 0xab, 0xae, 0x6b, 0x14, 0xea, 0xaa, 0x96, 0x7b, 0x40, 0x42, 0x3c, 0x7c, 0xa3, 0x29, 0x98, 0x79, 0xbb, 0xf6, 0x30, 0xed, 0xe7, 0x1d, 0xfe, 0xff, 0x81, 0x1e, 0xce, 0x57, 0x63, 0xfc, 0xe7, 0x30, 0xa9, 0xf1, 0xed, 0xae, 0xb9, 0x60, 0x06, 0x72, 0x81, 0x0b, 0x3c, 0x6d, 0x00, 0x86, 0x23, 0xf1, 0x08, 0xec, 0xbb, 0x0e, 0x42, 0xd0, 0x97, 0x1b, 0x72, 0x76, 0x3f, 0x93, 0xfc, 0x43, 0xd4, 0x23, 0xa8, 0x73, 0xf2, 0x00, 0xa2, 0x0a, 0xda, 0x7e, 0xc5, 0x0d, 0xd1, 0xdf, 0x18, 0xf1, 0xc3, 0x68, 0x99, 0x54, 0x2c, 0xbb, 0x3a, 0xeb, 0x39, 0x60, 0x2a, 0xbc, 0x2a, 0xa5, 0x55, 0x8d, 0xfa, 0xa8, 0x2e, 0x9c, 0x42, 0xb2, 0xac, 0x90, 0x5b, 0xc6, 0x92, 0xb0, 0xc2, 0x7a, 0xf4, 0x53, 0xc1, 0x06, 0xf7, 0x97, 0x4c, 0x9b, 0xd8, 0x56, 0x2a, 0xf6, 0x30, 0x56, 0x55, 0x34, 0x76, 0xc0, 0xa2, 0xe8, 0xc5, 0xd4, 0xa4, 0x6b, 0xdf, 0xda, 0xce, 0x73, 0x73, 0x5c, 0xd9, 0xe7, 0x9b, 0x92, 0x65, 0xf2, 0xa9, 0x1e, 0xe3, 0x57, 0x23, 0xfa, 0xb2, 0x04, 0x0c, 0xae, 0x88, 0xe9, 0x65, 0xc6, 0x14, 0x0a, 0xf4, 0x83, 0xe2, 0xd3, 0x44, 0xd1, 0x7e, 0xac, 0xed, 0x79, 0xdc, 0xce, 0x15, 0x98, 0xf7, 0x55, 0x37, 0x50, 0xb9, 0x96, 0x24, 0xbd, 0x1b, 0xb2, 0x47, 0x2a, 0x8d, 0x6c, 0x2c, 0x85, 0x98, 0x37, 0x44, 0x11, 0xc2, 0x93, 0xe2, 0x5b, 0xb2, 0x9a, 0x8a, 0x6f, 0x94, 0xd6, 0x6b, 0x4b, 0xbf, 0x56, 0x2a, 0x94, 0x95, 0x01, 0xe1, 0x88, 0xab, 0x2a, 0x68, 0x34, 0x2b, 0x64, 0xd3, 0xe7, 0x76, 0x97, 0x3b, 0xe6, 0x0d, 0x53, 0xc2, 0x61, 0xb1, 0x65, 0xd1, 0xa6, 0xc9, 0xa8, 0xa4, 0x95, 0x05, 0x1e, 0x09, 0x54, 0x41, 0x3f, 0x64, 0x44, 0xac, 0x91, 0xf7, 0x33, 0x29, 0x79, 0x60, 0xd3, 0xf5, 0x51, 0x63, 0x6a, 0x8a, 0xba, 0xea, 0xcc, 0xc4, 0x34, 0x4a, 0x87, 0x43, 0xec, 0xc8, 0x5d, 0x10, 0xd4, 0x5c, 0xf7, 0x83, 0xf9, 0xb5, 0xd7, 0x64, 0x12, 0x7c, 0x8f, 0x50, 0x54, 0xdd, 0x30, 0x5e, 0x8e, 0x44, 0x06, 0x03, 0x71, 0x64, 0x82, 0x33, 0x2f, 0x7e, 0x78, 0xc9, 0x49, 0xe0, 0x8b, 0x29, 0xa1, 0xac, 0xe5, 0x24, 0xd7, 0xda, 0x2b, 0x1c, 0xd2, 0x80, 0xaf, 0x68, 0x9d, 0x51, 0xe8, 0xf9, 0x75, 0x64, 0x20, 0x3e, 0x20, 0x38, 0x6d, 0x46, 0x80, 0xf4, 0xe2, 0x25, 0x67, 0xf3, 0x06, 0x98, 0xad, 0x7f, 0x85, 0xec, 0x80, 0xdd, 0x26, 0x1b, 0xfc, 0x8b, 0xfd, 0x39, 0xfb, 0xc5, 0xe2, 0x0e, 0x2f, 0x4d, 0x22, 0x05, 0x6e, 0x6c, 0x74, 0x45, 0x4c, 0x34, 0x2e, 0x1d, 0xef, 0x09, 0xb8, 0xa5, 0x1f, 0x60, 0x41, 0xa2, 0x9d, 0xc5, 0xb2, 0xab, 0xb6, 0x23, 0xe0, 0x8a, 0x17, 0x40, 0x06, 0xe5, 0xe3, 0x87, 0x72, 0x1e, 0x03, 0x0a, 0x7e, 0x77, 0xbe, 0xc7, 0xc2, 0x7a, 0x89, 0x2a, 0x88, 0x98, 0x20, 0xd4, 0x80, 0x10, 0xd5, 0x9b, 0xb6, 0x12, 0x28, 0xd2, 0xc0, 0x24, 0x99, 0xca, 0x3c, 0xc6, 0xba, 0x98, 0x7a, 0x51, 0x88, 0x19, 0x75, 0x25, 0xfb, 0x34, 0x08, 0x03, 0xdc, 0x5f, 0x5e, 0xb8, 0xd7, 0x65, 0xab, 0xfc, 0xd1, 0x66, 0x19, 0x99, 0x7c, 0x1f, 0x06, 0xd0, 0x28, 0x6b, 0x6c, 0xf8, 0xdc, 0x0a, 0xa0, 0x68, 0xa5, 0xa2, 0x40, 0x97, 0x2e, 0x03, 0x66, 0x82, 0x91, 0xaf, 0x22, 0x4e, 0x6d, 0x9a, 0x28, 0x2f, 0x39, 0x2e, 0xc5, 0x88, 0xd7, 0x92, 0x18, 0x54, 0x6c, 0x2c, 0x7e, 0xc4, 0x70, 0x65, 0x4e, 0x29, 0x01, 0xac, 0xc7, 0x15, 0x7d, 0xbd, 0x46, 0xbd, 0x4f, 0x23, 0xbc, 0xa2, 0x09, 0xfb, 0x60, 0x71, 0xb4, 0xfc, 0xa1, 0x27, 0x63, 0xb4, 0x5f, 0x78, 0x0f, 0x14, 0x5a, 0x72, 0x9e, 0x2f, 0xeb, 0x5e, 0x45, 0x3f, 0xf2, 0xe7, 0x10, 0xe9, 0x0f, 0x7e, 0xbf, 0xc2, 0x15, 0xfc, 0xd4, 0x11, 0xbb, 0x89, 0xea, 0xd7, 0x95, 0xbd, 0x48, 0x0c, 0x43, 0x06, 0xb6, 0x2c, 0xe9, 0x4a, 0x90, 0xf2, 0xdf, 0xcd, 0x18, 0x63, 0xa9, 0x54, 0x10, 0x0f, 0x29, 0x8b, 0x89, 0x94, 0x13, 0xa4, 0xf6, 0x63, 0xa2, 0x41, 0x84, 0xc7, 0x89, 0x94, 0xae, 0x23, 0x2d, 0xc4, 0x0b, 0x7b, 0x11, 0x93, 0x6b, 0x35, 0x91, 0x3f, 0x23, 0x21, 0xd4, 0xa5, 0xa5, 0xb8, 0xfc, 0xac, 0x54, 0xa1, 0x9f, 0xe1, 0x96, 0x7a, 0x7b, 0x5f, 0x2a, 0xd4, 0x65, 0xf2, 0xbc, 0x7f, 0x83, 0x7c, 0xb6, 0x09, 0xbb, 0x97, 0x5a, 0x81, 0x6b, 0x7b, 0x0e, 0x80, 0x5b, 0x23, 0xf6, 0x6b, 0xf0, 0xab, 0xc8, 0xf2, 0xa2, 0xfd, 0xdc, 0xdc, 0xaf, 0xac, 0x83, 0x07, 0x11, 0x20, 0x9a, 0xaa, 0xae, 0xf4, 0x5f, 0xde, 0xd0, 0x9c, 0x83, 0x5d, 0xd4, 0x4b, 0x80, 0x89, 0x26, 0x13, 0x2c, 0xb0, 0x6d, 0x4f, 0x8e, 0x8e, 0x02, 0x3e, 0xf1, 0x13, 0xa7, 0xf0, 0x38, 0x67, 0x76, 0x66, 0x71, 0x2c, 0x17, 0xf5, 0xad, 0x03, 0x36, 0xeb, 0x0e, 0x51, 0x34, 0x75, 0x21, 0x43, 0x1d, 0xc0, 0x6e, 0x0f, 0xdb, 0x5f, 0x4e, 0x7d, 0xa9, 0xed, 0xfd, 0xa7, 0xca, 0xf3, 0xf0, 0xfc, 0x7a, 0x0b, 0x69, 0x8b, 0x25, 0x46, 0x48, 0x7f, 0xd7, 0xcc, 0x24, 0xe5, 0xf4, 0xc2, 0x9a, 0xb6, 0x29, 0x71, 0xe5, 0x11, 0xa2, 0xa4, 0xaf, 0xc8, 0x7d, 0x51, 0x27, 0x1e, 0x7f, 0x7c, 0x54, 0xcf, 0x06, 0x59, 0xa9, 0x51, 0x3f, 0xb1, 0xd9, 0x5a, 0x99, 0x86, 0xed, 0xa2, 0x7a, 0xfa, 0x93, 0xea, 0x30, 0x6d, 0xb9, 0x3d, 0x2a, 0xe6, 0x5a, 0x76, 0x68, 0xb4, 0x98, 0x02, 0x30, 0x55, 0x0c, 0xe7, 0x03, 0x96, 0x5a, 0x05, 0xcf, 0xfc, 0x08, 0x9c, 0x66, 0x63, 0x90, 0x0f, 0x2f, 0xe5, 0xb3, 0xe8, 0x1b, 0xfd, 0x11, 0x1b, 0xdb, 0xec, 0xf7, 0x8f, 0x51, 0x5c, 0x78, 0xda, 0x44, 0x44, 0xbf, 0x4d, 0x57, 0x0b, 0xa3, 0x30, 0x3c, 0xf0, 0x7c, 0x4e, 0x25, 0xa9, 0x35, 0xb5, 0x7b, 0x4a, 0xa3, 0xb7, 0xd3, 0x69, 0x15, 0x34, 0x1e, 0x80, 0x2d, 0x1c, 0x1f, 0x92, 0xee, 0x2f, 0x23, 0x12, 0x15, 0x07, 0xec, 0x00, 0xad, 0x59, 0xee, 0x55, 0xde, 0x78, 0xbe, 0xa1, 0x06, 0x1a, 0xc7, 0xf3, 0x0b, 0x5f, 0x3f, 0xf9, 0xef, 0x0f, 0x59, 0x68, 0xa4, 0x23, 0xbc, 0x9e, 0x22, 0x88, 0x35, 0x87, 0xb8, 0x1f, 0xa8, 0xbd, 0x9f, 0x08, 0x4d, 0xf3, 0xd5, 0x20, 0x18, 0x93, 0x28, 0xc8, 0x79, 0xa6, 0x91, 0xe9, 0x46, 0xf5, 0xc4, 0x35, 0xf6, 0x6d, 0x05, 0xaf, 0x0f, 0xc8, 0x3d, 0x6d, 0xe1, 0x6a, 0x4d, 0x9c, 0x75, 0x89, 0xa2, 0xc6, 0xc1, 0x91, 0x0a, 0x50, 0x1d, 0xc7, 0xc6, 0x47, 0xfb, 0x2c, 0xe0, 0x5c, 0xd2, 0xa4, 0xbf, 0x2c, 0x5b, 0x57, 0xf8, 0xc5, 0x00, 0x58, 0x67, 0x66, 0x92, 0x85, 0x7f, 0x87, 0x3a, 0xae, 0xde, 0x19, 0xb2, 0xf9, 0x24, 0x0f, 0xb4, 0x84, 0x06, 0x1d, 0xb3, 0x4d, 0x9e, 0xc0, 0xca, 0x4f, 0x05, 0x7e, 0xf2, 0xee, 0x24, 0x6f, 0x77, 0x95, 0xc7, 0xfc, 0xad, 0x9e, 0xf3, 0xe7, 0xdf, 0x72, 0x7a, 0x8c, 0x88, 0xf1, 0xcc, 0x66, 0xc5, 0x14, 0x10, 0xd4, 0x0b, 0xd0, 0x74, 0x1d, 0x15, 0x3e, 0xc1, 0xb2, 0x21, 0xfa, 0x32, 0xb4, 0x5c, 0xc9, 0x86, 0xb6, 0x9b, 0x7e, 0x54, 0xc4, 0x4b, 0x1e, 0x9f, 0xa4, 0xab, 0x42, 0xaa, 0x5b, 0x39, 0xbd, 0x0d, 0xf4, 0x69, 0x7f, 0x09, 0x7c, 0x9d, 0xb9, 0x19, 0x51, 0x52, 0x42, 0xc9, 0x9d, 0x97, 0x3a, 0xcb, 0x1d, 0xc4, 0xed, 0x48, 0x27, 0x68, 0xf9, 0x74, 0xeb, 0x83, 0xb4, 0x65, 0xf9, 0xf6, 0xc8, 0x25, 0x03, 0x37, 0x20, 0x06, 0xe4, 0x49, 0x08, 0x35, 0xe2, 0xec, 0x8f, 0x92, 0x30, 0x11, 0x30, 0xbf, 0xb7, 0x90, 0xb2, 0x77, 0x17, 0x1d, 0x4d, 0x22, 0xe8, 0x79, 0x0e, 0xa6, 0x45, 0xe5, 0x7d, 0x7f, 0x8b, 0xdc, 0x7c, 0x12, 0x5e, 0x01, 0x72, 0x3e, 0xed, 0x57, 0xa9, 0x35, 0x77, 0xb0, 0xf5, 0x8a, 0x0f, 0x68, 0x97, 0x8b, 0x9c, 0x52, 0x60, 0xd0, 0x23, 0xf3, 0x1a, 0x14, 0x49, 0xee, 0x23, 0x44, 0x13, 0xc0, 0x5b, 0xd6, 0xf1, 0xad, 0x40, 0x5c, 0xfb, 0xfa, 0x58, 0x59, 0x7a, 0x5d, 0xd0, 0x53, 0xaa, 0xb2, 0x62, 0x29, 0xbe, 0xef, 0x7c, 0xa7, 0x25, 0x5a, 0x9e, 0x58, 0x0c, 0xfa, 0x03, 0x9b, 0x24, 0x4b, 0x85, 0xf9, 0xa5, 0x36, 0xbb, 0xb6, 0x93, 0x3f, 0x64, 0xa6, 0x40, 0x01, 0x08, 0x42, 0x12, 0xd7, 0xdc, 0xfb, 0x86, 0xdd, 0xe7, 0xcf, 0x75, 0x17, 0x63, 0x19, 0x96, 0xef, 0x66, 0xad, 0x45, 0xe5, 0xc1, 0x24, 0x82, 0x82, 0x28, 0x75, 0x3d, 0x8d, 0x94, 0xc6, 0xd1, 0x82, 0xe6, 0x81, 0xce, 0x40, 0xcd, 0xa9, 0xfb, 0x02, 0xe9, 0x6f, 0x9b, 0x90, 0x31, 0x00, 0xf0, 0xb7, 0x92, 0xa2, 0xfe, 0xf6, 0xd8, 0xff, 0x91, 0x7a, 0xd2, 0xc0, 0x81, 0x4d, 0xb1, 0x5e, 0x35, 0xca, 0xb2, 0x35, 0x66, 0x54, 0xfd, 0xdb, 0x25, 0x47, 0xcc, 0xaf, 0x20, 0x2f, 0xcf, 0xb5, 0x21, 0x38, 0xd0, 0xa1, 0xd7, 0xe6, 0x93, 0x31, 0xd9, 0x06, 0x00, 0xc0, 0xe8, 0xe5, 0x83, 0x19, 0x74, 0xbf, 0xb4, 0x89, 0x62, 0x7a, 0x33, 0x38, 0x0d, 0x94, 0xd6, 0xb8, 0x8b, 0x5b, 0x07, 0xdf, 0x31, 0x5c, 0x67, 0xd2, 0x59, 0x1d, 0xb8, 0x63, 0x62, 0x0f, 0xf9, 0x9d, 0xf9, 0xbe, 0xd2, 0x9c, 0x97, 0x4b, 0x33, 0xa3, 0x4b, 0x1c, 0x39, 0x68, 0xba, 0xd2, 0x51, 0xb2, 0x64, 0x7b, 0x9f, 0x26, 0x29, 0x09, 0xa1, 0x5e, 0x0b, 0x04, 0x0f, 0x3c, 0x35, 0x7b, 0x06, 0x7e, 0x3d, 0x40, 0x66, 0x92, 0xa6, 0x55, 0x79, 0xab, 0xa9, 0xa1, 0xd5, 0x14, 0x34, 0xe7, 0x83, 0xc5, 0x34, 0xf9, 0x60, 0x34, 0x10, 0x29, 0xc4, 0x6d, 0x75, 0x01, 0x62, 0x65, 0x59, 0x34, 0x6f, 0x8b, 0x3a, 0xd3, 0x07, 0xa1, 0xa7, 0xc4, 0xcc, 0xca, 0x02, 0x71, 0xd0, 0xe4, 0x84, 0xbd, 0xb5, 0x17, 0x81, 0x3c, 0x12, 0xae, 0xee, 0xa3, 0x19, 0x26, 0x20, 0x7d, 0x77, 0x85, 0xd6, 0x20, 0x7c, 0xee, 0x7a, 0xe0, 0x7c, 0x71, 0xa4, 0x82, 0x75, 0x27, 0xe0, 0xf4, 0xf1, 0x7f, 0xb1, 0x3b, 0x2e, 0xd3, 0xd6, 0xac, 0x7d, 0x3f, 0xcb, 0x5f, 0xe8, 0xb2, 0x93, 0xe1, 0x17, 0x45, 0xb5, 0x29, 0x75, 0xcc, 0x85, 0xcd, 0x8e, 0xab, 0xa4, 0x76, 0xbb, 0xec, 0xca, 0x92, 0x02, 0x8e, 0xc3, 0x48, 0x38, 0x1f, 0xb8, 0xb1, 0x68, 0x8d, 0xb0, 0x45, 0x79, 0x39, 0x56, 0x93, 0x0a, 0x4d, 0xfd, 0x36, 0xa1, 0x50, 0xe1, 0x04, 0x05, 0xf7, 0xb0, 0x88, 0xe8, 0x3e, 0x49, 0xb3, 0xc9, 0xb8, 0xc3, 0xce, 0x19, 0x23, 0xb1, 0xb3, 0x9d, 0x40, 0xa4, 0x3d, 0x13, 0xe2, 0xf2, 0xfd, 0x18, 0x44, 0xb6, 0x2e, 0x49, 0x9f, 0x18, 0xeb, 0xa9, 0xfc, 0xcf, 0xa0, 0x43, 0x47, 0xe4, 0xbf, 0x10, 0xa6, 0xb8, 0xb4, 0x1a, 0x09, 0x48, 0x1a, 0xe2, 0x01, 0xb0, 0x2f, 0xff, 0xd5, 0xee, 0x85, 0x09, 0xd3, 0xe9, 0xfb, 0xb5, 0xe4, 0xb2, 0xec, 0x41, 0x63, 0x09, 0xa6, 0x13, 0x2f, 0x23, 0x1e, 0x9d, 0xff, 0xaa, 0xe2, 0x83, 0xf6, 0x06, 0x4e, 0x00, 0x78, 0xdb, 0x03, 0x86, 0x3b, 0xd2, 0x95, 0xa4, 0xa1, 0x9d, 0x84, 0x2d, 0x45, 0x35, 0x6e, 0x97, 0xd3, 0x66, 0x82, 0xa1, 0x1e, 0x8e, 0x38, 0x38, 0x6c, 0xa2, 0x3f, 0x9c, 0x14, 0x71, 0xb7, 0xbf, 0x4c, 0x2d, 0xa1, 0xee, 0x3c, 0x27, 0x94, 0xb2, 0x57, 0xda, 0xb1, 0xf9, 0xea, 0x2b, 0xd9, 0x71, 0xf5, 0xef, 0x1d, 0x35, 0x3b, 0xae, 0x75, 0xab, 0x95, 0xa6, 0xb5, 0xac, 0x8b, 0x13, 0xbe, 0xe6, 0x25, 0xae, 0xf1, 0x7f, 0xff, 0x74, 0xea, 0xfb, 0x9c, 0xa8, 0x6a, 0x60, 0xfc, 0x1b, 0x94, 0x98, 0x71, 0xab, 0x5d, 0x16, 0xae, 0x0a, 0x3e, 0xbd, 0x21, 0xc1, 0x2b, 0xfd, 0x83, 0x74, 0xc9, 0x3f, 0xad, 0x67, 0xdc, 0x83, 0xad, 0x41, 0xfe, 0x47, 0x19, 0x10, 0x97, 0xab, 0xa3, 0x8e, 0x09, 0xd4, 0xee, 0xa3, 0x2b, 0x8e, 0xa0, 0x2a, 0xf9, 0x35, 0xb9, 0xf8, 0x8a, 0xd5, 0x23, 0x1a, 0x42, 0x90, 0x89, 0x5f, 0x48, 0x40, 0x6d, 0x17, 0x3a, 0x5e, 0x75, 0x19, 0x20, 0x23, 0x06, 0x0b, 0x9f, 0xec, 0x14, 0xdd, 0x70, 0xe3, 0x39, 0x97, 0x10, 0xdc, 0x04, 0x55, 0xb8, 0x7d, 0x93, 0x8f, 0x8f, 0xa2, 0x64, 0x9e, 0x1f, 0xff, 0x68, 0x7c, 0x05, 0x08, 0x59, 0xcc, 0xed, 0x0d, 0x4e, 0x1a, 0xbe, 0xaa, 0x8d, 0x63, 0x12, 0x5e, 0xa0, 0xd8, 0xe9, 0x7a, 0xab, 0xdf, 0x9e, 0x3d, 0xfc, 0x5b, 0x1a, 0x3d, 0xe4, 0x2d, 0x47, 0x08, 0xc5, 0xfb, 0xc7, 0x0c, 0x6d, 0x2f, 0xe7, 0xb4, 0xa2, 0x43, 0xce, 0xd4, 0xfe, 0x3d, 0xfb, 0x47, 0xfe, 0x75, 0xee, 0xd7, 0x55, 0x9e, 0x24, 0x5c, 0x86, 0x04, 0x49, 0x28, 0xb1, 0x13, 0xaa, 0xa3, 0xad, 0x19, 0xe9, 0x33, 0x58, 0x4d, 0xf4, 0x5f, 0x2b, 0x0f, 0x37, 0x33, 0x12, 0x71, 0x11, 0xe6, 0x7a, 0xf7, 0x85, 0xba, 0xab, 0x9b, 0x33, 0x24, 0x58, 0x14, 0x86, 0x2d, 0x74, 0x58, 0x2e, 0x18, 0x48, 0x60, 0xd1, 0x45, 0xc3, 0x2b, 0xfd, 0x55, 0x11, 0x05, 0x62, 0x8f, 0x6f, 0x09, 0x3e, 0x82, 0x3d, 0xe5, 0x18, 0xec, 0x54, 0xdd, 0xb1, 0xdb, 0x9b, 0x13, 0x38, 0x12, 0xd5, 0x05, 0xbd, 0xae, 0xbd, 0x57, 0xe8, 0x0a, 0x55, 0xd3, 0xeb, 0xdf, 0x7b, 0xae, 0xb5, 0xb0, 0xbd, 0x0c, 0x68, 0x65, 0x6e, 0xc7, 0x0e, 0x36, 0xf9, 0x6c, 0x88, 0xca, 0x76, 0x87, 0xc6, 0xa0, 0x7b, 0x21, 0x3e, 0xaf, 0x35, 0x86, 0x96, 0x49, 0xb7, 0x4c, 0xa4, 0x45, 0x91, 0x90, 0x99, 0x5d, 0xa5, 0x83, 0x79, 0xd5, 0x36, 0x26, 0xcf, 0x5e, 0x42, 0x51, 0x9e, 0x39, 0x12, 0xfa, 0x9a, 0x9f, 0x0f, 0xb4, 0x98, 0x61, 0xd7, 0x76, 0x44, 0xcc, 0x90, 0x9e, 0x12, 0xcf, 0x7d, 0x35, 0x77, 0x60, 0xce, 0x75, 0x58, 0x1b, 0xbd, 0x88, 0xc3, 0x2c, 0xd6, 0x93, 0xdd, 0x70, 0x96, 0xf3, 0x1b, 0xd7, 0x38, 0xc7, 0xb5, 0x0d, 0xcc, 0xae, 0x58, 0x59, 0x89, 0xd2, 0x1c, 0xc5, 0x64, 0x25, 0xb5, 0x7f, 0xe2, 0xea, 0xed, 0x7f, 0x2a, 0x78, 0x52, 0x6a, 0x5e, 0x3a, 0x2b, 0xb6, 0x2b, 0xfb, 0xb1, 0x10, 0x9f, 0x60, 0x7c, 0xfa, 0x3b, 0xb6, 0x3c, 0xb9, 0x4a, 0xee, 0xa9, 0x6e, 0x71, 0xe6, 0xbd, 0x83, 0x86, 0xeb, 0x20, 0x48, 0xa5, 0x7b, 0xe4, 0xde, 0x81, 0x4f, 0x72, 0x55, 0xf9, 0x99, 0xc4, 0x11, 0xec, 0x8a, 0xd5, 0x72, 0x4d, 0x17, 0x56, 0xb4, 0x7a, 0xfd, 0xa3, 0x13, 0xc9, 0x02, 0xf5, 0x33, 0x64, 0x7e, 0xd9, 0xc0, 0x58, 0x1b, 0xe1, 0x51, 0xe8, 0xd9, 0x99, 0x93, 0x27, 0x55, 0xbc, 0xa3, 0xc6, 0x4a, 0xa8, 0xbb, 0x2a, 0x58, 0x10, 0x11, 0xc1, 0x04, 0xf1, 0xfc, 0x97, 0x01, 0xc7, 0x59, 0x24, 0xae, 0x00, 0x2d, 0x69, 0xdf, 0xb1, 0x8c, 0x3b, 0xe0, 0x88, 0xb9, 0xde, 0xb7, 0x02, 0x8e, 0xd5, 0xaa, 0xdd, 0x1e, 0xf9, 0x01, 0xd1, 0x9a, 0xc9, 0x0d, 0x7b, 0x71, 0x01, 0x69, 0x9a, 0xbb, 0x6e, 0x80, 0x7d, 0xd8, 0x00, 0x4f, 0xbc, 0x54, 0x21, 0x6d, 0x27, 0x0e, 0x45, 0x48, 0xfc, 0x9a, 0xc2, 0xb1, 0x5d, 0xe3, 0xe3, 0x9b, 0x00, 0x15, 0x37, 0x1f, 0x29, 0xba, 0x2f, 0xc4, 0xd5, 0x23, 0xe8, 0xfe, 0x38, 0x09, 0x46, 0xf4, 0x6a, 0x74, 0x42, 0x86, 0x5e, 0xdc, 0x85, 0x8f, 0x13, 0x8e, 0x35, 0x67, 0x0e, 0x52, 0x0f, 0xad, 0x07, 0x4b, 0xb6, 0x43, 0xe3, 0x1e, 0x4a, 0x99, 0xe2, 0x57, 0x3d, 0x2f, 0x1a, 0x08, 0x62, 0x55, 0x24, 0xb2, 0x47, 0x36, 0x15, 0x69, 0xc5, 0x14, 0xaf, 0x34, 0xd5, 0xd5, 0xd9, 0xb3, 0xa5, 0xbf, 0x4d, 0x04, 0xec, 0x80, 0x91, 0xe6, 0x7a, 0x71, 0x28, 0x1f, 0x13, 0x1b, 0x09, 0x1c, 0x7d, 0xfb, 0x50, 0xd8, 0xd8, 0x82, 0x34, 0xff, 0x2e, 0x60, 0x39, 0x52, 0x4b, 0x02, 0xa6, 0x4d, 0xcf, 0x59, 0x3a, 0x07, 0x81, 0xde, 0x1b, 0x5b, 0xe6, 0xd3, 0x0f, 0x45, 0x13, 0xcb, 0xee, 0x8e, 0xbf, 0x6c, 0x58, 0xac, 0x9c, 0x74, 0xa3, 0xe4, 0xe8, 0xfa, 0x17, 0xb1, 0x3e, 0xf7, 0x5e, 0x69, 0xb3, 0x04, 0x36, 0x1e, 0x1e, 0x65, 0x69, 0xc2, 0xb7, 0x47, 0xff, 0x8f, 0xe4, 0x46, 0xb2, 0xa6, 0x4f, 0x32, 0xa2, 0xf7, 0x3c, 0x13, 0x4a, 0x60, 0x1a, 0x6a, 0xb3, 0x19, 0x57, 0xba, 0xe7, 0x4f, 0x79, 0x47, 0xa9, 0x0f, 0x6b, 0x1e, 0x63, 0x66, 0x14, 0x55, 0x60, 0xc7, 0x2e, 0x94, 0x3b, 0xac, 0x56, 0xd5, 0x98, 0x80, 0x5f, 0x67, 0x11, 0xbd, 0xec, 0x39, 0x74, 0x52, 0x3e, 0x55, 0x2b, 0x47, 0x4a, 0xab, 0xfb, 0xa3, 0x0f, 0x10, 0xf2, 0x8e, 0x26, 0x86, 0x9a, 0xb3, 0x9b, 0xbe, 0x73, 0xe8, 0xfb, 0xdb, 0xa0, 0x11, 0xae, 0x79, 0xe1, 0x41, 0x87, 0xee, 0xc1, 0x23, 0x9a, 0xcf, 0x11, 0x99, 0x4e, 0xb7, 0x94, 0xa2, 0xb3, 0x43, 0xfc, 0x81, 0x15, 0x61, 0x15, 0x1c, 0xd1, 0xcb, 0x41, 0xa2, 0x67, 0xce, 0x24, 0x70, 0xd1, 0x50, 0xa0, 0x36, 0x13, 0x11, 0x04, 0x55, 0x14, 0x31, 0x80, 0x8c, 0xac, 0xf3, 0xdd, 0xd4, 0xfe, 0xc0, 0x6a, 0x88, 0x08, 0x6f, 0x3a, 0xc9, 0x78, 0xc3, 0x8c, 0x21, 0xc1, 0x35, 0x8b, 0x66, 0x6f, 0xf4, 0x38, 0xe2, 0xb7, 0x2b, 0xa4, 0xb0, 0x53, 0x82, 0x62, 0x69, 0x8d, 0xe7, 0x3c, 0x01, 0x99, 0x8e, 0x25, 0xeb, 0x27, 0x36, 0x6f, 0x84, 0x39, 0xaf, 0x3e, 0xae, 0x32, 0x99, 0x3d, 0xbb, 0x30, 0x6e, 0x8f, 0x8e, 0x9c, 0xc3, 0x09, 0xfc, 0x00, 0xca, 0x9e, 0x78, 0x18, 0x1c, 0x1a, 0xf0, 0x2b, 0xb5, 0x14, 0xf2, 0x9b, 0x40, 0x1d, 0x13, 0xbc, 0x96, 0x3e, 0x91, 0xe2, 0x81, 0xa2, 0x37, 0xbe, 0xc5, 0x8f, 0x81, 0xea, 0x61, 0x9b, 0x01, 0xc2, 0x12, 0x1c, 0x01, 0x76, 0x19, 0xe0, 0x6a, 0x5d, 0x3e, 0x1e, 0xe5, 0x8c, 0x15, 0xad, 0x3f, 0xa8, 0x80, 0x74, 0x12, 0xf8, 0x75, 0x22, 0xa2, 0xbe, 0x01, 0x1f, 0x05, 0xc8, 0x8d, 0xc2, 0x87, 0x42, 0x61, 0xc4, 0x4c, 0xce, 0x66, 0xf4, 0x37, 0xd7, 0x30, 0x2d, 0x0b, 0x21, 0x3b, 0x85, 0xd0, 0xa5, 0x75, 0xc8, 0x79, 0x9d, 0xfd, 0x25, 0xc3, 0xdb, 0x2b, 0x26, 0x60, 0x5e, 0xd0, 0xe6, 0x55, 0x27, 0xbf, 0x7e, 0xa1, 0x49, 0x8c, 0xc0, 0x1f, 0x40, 0x93, 0x28, 0xad, 0x83, 0x3c, 0x0f, 0x8e, 0x5d, 0x7e, 0x22, 0x0d, 0xf8, 0xa2, 0x13, 0x63, 0xbb, 0x4a, 0x8e, 0xdb, 0xd5, 0xb1, 0x6f, 0x34, 0x1a, 0x34, 0x32, 0x47, 0x0f, 0x12, 0xaa, 0xea, 0x40, 0x70, 0xf6, 0x13, 0xda, 0xa0, 0xb2, 0x41, 0x75, 0xa2, 0x6a, 0x17, 0x32, 0xeb, 0x54, 0x4a, 0x06, 0x66, 0x3e, 0xbe, 0x55, 0xb9, 0xc5, 0xec, 0xc3, 0xc9, 0xc8, 0x87, 0x47, 0x80, 0x1c, 0x5f, 0x81, 0xce, 0x81, 0x85, 0x4d, 0xed, 0xd5, 0xb0, 0x98, 0xea, 0x88, 0xdf, 0x72, 0x61, 0x50, 0x40, 0x65, 0x88, 0x1e, 0x51, 0x05, 0x6e, 0x50, 0x45, 0xc9, 0x85, 0x28, 0xa9, 0x19, 0x5f, 0x7d, 0x47, 0xa8, 0xb5, 0xb0, 0x4b, 0x04, 0xad, 0xe2, 0xa4, 0x6c, 0x5c, 0x64, 0xad, 0xe1, 0x8a, 0x6f, 0x0d, 0x7f, 0xb6, 0x16, 0xdc, 0x0e, 0x5a, 0x78, 0x07, 0xd5, 0x71, 0x3a, 0xf5, 0xae, 0x35, 0x35, 0x6a, 0x60, 0x2d, 0x6b, 0xac, 0x28, 0x67, 0x40, 0xe5, 0x99, 0x03, 0xe7, 0xc9, 0xa7, 0xf1, 0x1a, 0x78, 0xfe, 0xfa, 0x0e, 0xa6, 0x98, 0x05, 0xa6, 0xf9, 0x8e, 0x93, 0xe7, 0xb2, 0x2e, 0x8d, 0xac, 0x90, 0x4f, 0x3f, 0x9a, 0xf1, 0xe1, 0xa4, 0x57, 0x3b, 0xc8, 0xe4, 0xf7, 0x7a, 0xeb, 0x1b, 0xb7, 0x4b, 0x87, 0x5c, 0xee, 0xf8, 0xca, 0xf6, 0x40, 0xe4, 0x9d, 0xf5, 0x15, 0x2a, 0xc1, 0xec, 0x49, 0x81, 0x1d, 0xf2, 0x26, 0x63, 0x56, 0xeb, 0x8f, 0x6e, 0xa1, 0x09, 0x7d, 0x0a, 0xd5, 0x92, 0xb0, 0x4c, 0xc5, 0xe3, 0x9e, 0x1a, 0xcc, 0xb5, 0xb0, 0x90, 0xa9, 0x9f, 0xad, 0xa3, 0x8d, 0xdc, 0x76, 0x04, 0x73, 0x4f, 0xf5, 0x47, 0xb0, 0xc4, 0x50, 0x45, 0xcb, 0x79, 0x62, 0xbf, 0x8e, 0xdd, 0x6b, 0x44, 0x5d, 0x97, 0x06, 0x54, 0xc7, 0xca, 0x5c, 0xc5, 0x5b, 0x97, 0x98, 0x66, 0xbd, 0xe4, 0x9b, 0xe3, 0xf9, 0x5c, 0xf0, 0xe8, 0x16, 0xb7, 0x02, 0x89, 0xef, 0x3c, 0x8c, 0xe2, 0x3e, 0x84, 0x52, 0xfa, 0xfa, 0x80, 0x0f, 0xee, 0xe3, 0xbe, 0xae, 0x4b, 0x5b, 0xe7, 0xbc, 0xbb, 0x77, 0x8d, 0x1e, 0xe4, 0x56, 0x23, 0xff, 0x8d, 0xb1, 0x4d, 0x0d, 0x02, 0xb4, 0x5b, 0xe5, 0xba, 0x0c, 0x0f, 0xcb, 0x38, 0x42, 0xa7, 0x9f, 0x2f, 0x47, 0x17, 0x0c, 0xe9, 0x50, 0x97, 0x03, 0xe9, 0xe3, 0x5d, 0x68, 0xd0, 0x32, 0xac, 0x0b, 0x7d, 0xa9, 0x0d, 0xd9, 0x78, 0xc3, 0xdd, 0x54, 0x91, 0x21, 0x07, 0x40, 0xc4, 0xdd, 0x13, 0x9f, 0x60, 0x1c, 0x60, 0xe0, 0x69, 0xe2, 0xad, 0x54, 0x3a, 0x2b, 0xde, 0xe1, 0x6e, 0x37, 0xfd, 0xfa, 0x01, 0x25, 0x80, 0xce, 0xb3, 0xc3, 0xca, 0xc0, 0xad, 0xa5, 0xf4, 0x18, 0x67, 0x74, 0xcc, 0xf8, 0xc9, 0x89, 0x1e, 0x91, 0x91, 0xba, 0x33, 0x96, 0xf4, 0x74, 0x98, 0xf1, 0x88, 0x0b, 0x20, 0xb6, 0x61, 0x4d, 0x2c, 0x55, 0x7a, 0x5d, 0x2a, 0x13, 0x57, 0xbf, 0x5c, 0xbb ],
-const [ 0x59, 0x5f, 0x40, 0xb0, 0x57, 0xef, 0x2d, 0x4f, 0x87, 0x74, 0xa2, 0x28, 0x99, 0xac, 0xf2, 0x8d, 0xa1, 0x29, 0xfa, 0x40, 0x6d, 0x53, 0x0c, 0x94, 0x16, 0xb0, 0x2c, 0xce, 0xd6, 0x63, 0x7f, 0xd1, 0x19, 0xf3, 0x00, 0xfb, 0xd7, 0x4e, 0x75, 0x4a, 0x20, 0x0e, 0xa2, 0xc3, 0xf9, 0xfa, 0xbc, 0x14, 0x66, 0xd0, 0x20, 0x78, 0xc8, 0x42, 0x45, 0xdb, 0x69, 0x3e, 0xef, 0x3f, 0x56, 0x72, 0xa6, 0x5e, 0x6d, 0x10, 0x67, 0x90, 0xb6, 0xce, 0x99, 0xf0, 0xf7, 0x32, 0x42, 0xba, 0x82, 0x0c, 0x7b, 0xf8, 0x52, 0x44, 0x22, 0x5e, 0x56, 0xd5, 0xce, 0x72, 0x0d, 0x1a, 0x08, 0xf0, 0x53, 0x49, 0xb8, 0x6c, 0x7b, 0x3d, 0xdd, 0x39, 0x9d, 0x78, 0x81, 0x8a, 0x31, 0x68, 0xed, 0xd7, 0xdd, 0xe9, 0x19, 0x82, 0x8c, 0x0c, 0x66, 0xbb, 0xc0, 0x16, 0x8f, 0xa1, 0x29, 0xcc, 0xdd, 0xa9, 0x76, 0xee, 0x9b, 0x44, 0x6b, 0x02, 0xca, 0xbc, 0x34, 0x52, 0x16, 0x5f, 0xf9, 0x38, 0x08, 0xe0, 0xb2, 0x99, 0x7c, 0xfa, 0x3d, 0xb0, 0x56, 0x56, 0xad, 0x0d, 0x71, 0xaf, 0xe6, 0xdd, 0xd8, 0x34, 0x67, 0x6b, 0x39, 0x2e, 0x66, 0xe7, 0x96, 0xe2, 0x22, 0x67, 0x3e, 0xb9, 0x75, 0x2b, 0xfc, 0x9e, 0xa8, 0x25, 0x8e, 0xa8, 0x8c, 0xb8, 0x58, 0xf9, 0xc6, 0xc1, 0x5a, 0xe6, 0x6b, 0xd4, 0x60, 0x58, 0xcd, 0xc8, 0x78, 0x71, 0x94, 0x75, 0xa9, 0x73, 0x10, 0xbc, 0xe2, 0xde, 0xcd, 0xc8, 0x31, 0xd9, 0x68, 0x94, 0x35, 0xd3, 0xa2, 0xad, 0xd6, 0x6a, 0xb3, 0x3a, 0x33, 0x8c, 0xe1, 0x39, 0xdc, 0xdc, 0x50, 0x0b, 0x42, 0x57, 0x1c, 0x33, 0x6c, 0x37, 0xa5, 0x5b, 0xeb, 0x17, 0x2a, 0x97, 0x0f, 0x59, 0x9a, 0xee, 0x5b, 0xc5, 0xa6, 0x17, 0x37, 0x72, 0x1b, 0x80, 0xe5, 0xea, 0x6f, 0x95, 0xb6, 0x89, 0x99, 0x3e, 0x7e, 0x26, 0x26, 0xa9, 0x45, 0xf6, 0x8a, 0x4b, 0x3f, 0xac, 0xb4, 0x21, 0xff, 0xe5, 0xe5, 0x3c, 0xe7, 0xc4, 0xc1, 0x7c, 0xe3, 0xd9, 0xa7, 0x9c, 0x57, 0x48, 0x3e, 0x6e, 0x55, 0x27, 0x50, 0x68, 0x14, 0x27, 0xdc, 0x60, 0x9d, 0x77, 0x66, 0x94, 0xc8, 0xe5, 0x92, 0xed, 0x67, 0x47, 0xf1, 0x85, 0xc1, 0x19, 0x1b, 0x66, 0x42, 0x67, 0xfe, 0x95, 0x70, 0xee, 0x75, 0x4f, 0x21, 0x7e, 0x1d, 0x92, 0xeb, 0xa2, 0x64, 0xdf, 0xdd, 0x83, 0xe2, 0x3f, 0x6c, 0x0a, 0xed, 0x84, 0xb0, 0x45, 0x67, 0xd1, 0xd1, 0x0c, 0xdb, 0x5c, 0xbc, 0xe4, 0xc8, 0x73, 0x1a, 0x23, 0x3d, 0xbd, 0x82, 0x55, 0xa6, 0xc3, 0xed, 0xdf, 0xe6, 0xae, 0x6b, 0xe2, 0xa6, 0x52, 0x15, 0x62, 0xec, 0x6c, 0x43, 0xa8, 0xef, 0x28, 0xff, 0xe4, 0x2a, 0xe7, 0xb9, 0x17, 0xaf, 0x3e, 0x3c, 0x30, 0xbe, 0x42, 0xe0, 0x75, 0x96, 0x03, 0x01, 0x25, 0x8b, 0x56, 0xb1, 0x5c, 0x59, 0xd8, 0xaa, 0x36, 0xb8, 0x2f, 0x86, 0x37, 0x30, 0x93, 0x33, 0xeb, 0x2f, 0x8e, 0xa1, 0xc9, 0x59, 0xff, 0xbd, 0x5d, 0x1f, 0x65, 0xa3, 0xa7, 0x93, 0x5a, 0x0f, 0xbe, 0x7a, 0x5e, 0x15, 0xb8, 0xa3, 0xd6, 0x13, 0xce, 0x78, 0x54, 0xe3, 0xbc, 0xd3, 0x19, 0x55, 0x67, 0x13, 0xd9, 0xdc, 0xc2, 0x6e, 0xbe, 0x87, 0xf2, 0x89, 0xaf, 0x33, 0xb1, 0x45, 0xd1, 0x00, 0xf0, 0xdc, 0x4e, 0x01, 0xc0, 0x2e, 0x56, 0x38, 0x72, 0x55, 0x64, 0xc1, 0xfd, 0x7f, 0xc3, 0x4d, 0xa1, 0xfd, 0x50, 0xd2, 0xca, 0x97, 0x81, 0x81, 0x37, 0x23, 0xa6, 0xf9, 0x5b, 0x56, 0x6f, 0xba, 0x04, 0xd9, 0xaf, 0xdc, 0x3a, 0x9f, 0x5f, 0x01, 0x6a, 0x77, 0xe6, 0x88, 0xc4, 0xdd, 0x98, 0x03, 0xe1, 0x16, 0x7c, 0xeb, 0xa9, 0x7c, 0x52, 0x93, 0x74, 0x16, 0xd4, 0x5b, 0x6f, 0x6b, 0x3d, 0x26, 0x42, 0x98, 0x08, 0x0e, 0xef, 0xa1, 0xfa, 0x56, 0xfd, 0x05, 0x62, 0x9f, 0xd7, 0x95, 0xa0, 0x5f, 0x6f, 0x85, 0xe4, 0x90, 0x26, 0xc4, 0x38, 0xa5, 0xf0, 0x89, 0xc1, 0xc2, 0xb3, 0x2f, 0x41, 0x2c, 0xf1, 0x42, 0xe1, 0xff, 0xa7, 0xda, 0x2e, 0x1f, 0x75, 0x27, 0x61, 0x70, 0xfe, 0x4e, 0xe3, 0x4a, 0x92, 0x73, 0x10, 0x27, 0x0b, 0x17, 0x3c, 0x9f, 0xf4, 0xa5, 0xf3, 0x97, 0xf1, 0x47, 0x85, 0xb5, 0x5a, 0xfe, 0xc2, 0x17, 0x2a, 0xf2, 0x03, 0x44, 0x18, 0x07, 0x6a, 0x62, 0x03, 0xb0, 0x6a, 0xaa, 0x93, 0x08, 0x89, 0x1a, 0x1e, 0x1f, 0x64, 0x69, 0xc8, 0x91, 0xf4, 0x40, 0xef, 0x5e, 0x11, 0xa7, 0xc6, 0xf5, 0x34, 0xbe, 0x3f, 0x92, 0x81, 0xad, 0x2f, 0xca, 0x05, 0xdd, 0xad, 0x65, 0x3c, 0x69, 0xba, 0x6b, 0xd6, 0xcf, 0x28, 0x81, 0xba, 0xec, 0xb4, 0x76, 0x4c, 0x27, 0x76, 0x1a, 0xeb, 0xec, 0x7b, 0x4f, 0xbe, 0x5c, 0xb0, 0x62, 0xb1, 0x42, 0x01, 0x9b, 0xba, 0x49, 0xc3, 0x12, 0x61, 0x6d, 0x4f, 0xc5, 0x7f, 0xb0, 0xf0, 0xe8, 0x46, 0x0e, 0x00, 0x7c, 0x81, 0xb2, 0x4d, 0x23, 0x1d, 0x6a, 0xc2, 0x33, 0xe9, 0x59, 0x43, 0x09, 0x9a, 0xec, 0xd8, 0xa0, 0x12, 0x0f, 0x0e, 0x62, 0xe2, 0xa0, 0x9a, 0x3d, 0x0d, 0x23, 0x40, 0xfa, 0x0f, 0xb8, 0xf3, 0xca, 0x1d, 0x4b, 0x3e, 0x22, 0xaf, 0x0b, 0xe2, 0xc9, 0x3c, 0x1d, 0xc1, 0x30, 0x44, 0x91, 0xfa, 0x01, 0x94, 0x95, 0x56, 0xfa, 0xc6, 0xe8, 0xe3, 0xfc, 0x07, 0x92, 0xde, 0x5f, 0x1d, 0xd3, 0xd6, 0x89, 0xa8, 0x59, 0x0f, 0xbf, 0xa7, 0xb5, 0x25, 0x3a, 0x3f, 0x10, 0xf1, 0x7e, 0xb8, 0x1a, 0xb0, 0xe7, 0xc9, 0x44, 0x62, 0x85, 0x15, 0x2f, 0x71, 0x2a, 0xf5, 0x64, 0x93, 0xc0, 0x78, 0x45, 0xf1, 0xe0, 0xa8, 0x44, 0x89, 0xa1, 0x0f, 0x52, 0xd1, 0xae, 0x7a, 0x9a, 0x9d, 0x9c, 0xfd, 0x70, 0x42, 0x7a, 0x37, 0x84, 0xfc, 0xa9, 0xd7, 0x5c, 0x8d, 0xee, 0x5f, 0x01, 0x27, 0xc5, 0x29, 0xf8, 0x8c, 0xf8, 0xa7, 0x73, 0x74, 0x71, 0xee, 0xc9, 0x2f, 0x4c, 0x76, 0x24, 0x8b, 0x31, 0x1b, 0x79, 0xf8, 0xe1, 0x68, 0xbe, 0xea, 0x0e, 0x15, 0x57, 0x7f, 0x70, 0xce, 0xd1, 0x62, 0x15, 0x37, 0xd2, 0xef, 0xf9, 0x2c, 0x50, 0x98, 0xd6, 0x4d, 0x02, 0x87, 0x3d, 0xba, 0x14, 0x84, 0xe6, 0x1b, 0x1f, 0x1a, 0x45, 0xe4, 0x58, 0xf5, 0x5d, 0xd7, 0x08, 0x8f, 0xd9, 0xca, 0x3c, 0x0c, 0x59, 0xaa, 0xbd, 0x62, 0x0a, 0xc0, 0x42, 0xbc, 0x79, 0x33, 0xe5, 0x21, 0xa9, 0xce, 0xd4, 0x50, 0x63, 0x04, 0x49, 0xef, 0xcd, 0x31, 0xbc, 0xe5, 0x3e, 0x23, 0x57, 0x05, 0x51, 0xd9, 0xaa, 0xec, 0x38, 0x8a, 0xa0, 0x2c, 0x53, 0xea, 0xb1, 0xaa, 0x01, 0xa8, 0x5a, 0x44, 0xb7, 0x3b, 0xca, 0xb7, 0x4f, 0xde, 0xdf, 0xc0, 0xa2, 0xd9, 0x50, 0x82, 0x58, 0x03, 0x2c, 0x28, 0xff, 0x85, 0x83, 0xcb, 0x5b, 0xe0, 0x62, 0x96, 0xfd, 0x32, 0x05, 0x28, 0x17, 0xb5, 0x49, 0x39, 0x8f, 0x88, 0x60, 0x81, 0x52, 0xb2, 0xc8, 0xd5, 0xeb, 0x64, 0x7e, 0x94, 0x54, 0x7e, 0x6f, 0x41, 0x0c, 0x55, 0x2f, 0x71, 0x69, 0xb3, 0xed, 0xe8, 0x30, 0x20, 0xa7, 0xff, 0x63, 0x60, 0x9a, 0x49, 0x5a, 0x3d, 0xfd, 0x75, 0x15, 0x87, 0xee, 0x76, 0xd1, 0x58, 0xad, 0xe2, 0xd9, 0x9c, 0x08, 0x98, 0x9f, 0xd1, 0x16, 0xa6, 0x0b, 0x0c, 0x28, 0x6a, 0x13, 0x3d, 0xfd, 0xf7, 0x8c, 0xb3, 0x35, 0xb9, 0x40, 0xe3, 0x08, 0x5d, 0x40, 0x65, 0x38, 0xeb, 0x7c, 0x3f, 0x44, 0x35, 0x90, 0x66, 0xdf, 0x75, 0xe1, 0x82, 0xa0, 0x32, 0xe9, 0xf2, 0xfb, 0x63, 0xcf, 0x10, 0x70, 0xd7, 0x3b, 0xb6, 0x02, 0xd4, 0x68, 0x01, 0xeb, 0xff, 0x7b, 0x54, 0x8e, 0x7b, 0x13, 0xa0, 0xad, 0x55, 0x21, 0xe3, 0xdc, 0x20, 0xfa, 0xef, 0x36, 0xdc, 0xaa, 0x6d, 0x4e, 0x1d, 0x8b, 0x21, 0x69, 0x69, 0x17, 0x70, 0xea, 0xe1, 0xfb, 0x1f, 0x0d, 0x23, 0x6c, 0x5d, 0xd8, 0x70, 0xbe, 0x04, 0x4f, 0x0a, 0x33, 0x1c, 0xe8, 0xe0, 0x11, 0xa1, 0x3e, 0x6d, 0xf7, 0x85, 0x09, 0xde, 0x70, 0xf9, 0x4e, 0x73, 0xc9, 0xe9, 0xd3, 0x27, 0x20, 0xc5, 0xd6, 0x93, 0xbe, 0x87, 0xfe, 0x10, 0xa7, 0xf2, 0x92, 0x1c, 0x6e, 0x17, 0xe9, 0xff, 0x4e, 0x1e, 0x22, 0xae, 0x77, 0x43, 0x15, 0xef, 0xa6, 0x1f, 0x88, 0xbe, 0xf8, 0x29, 0xa7, 0xef, 0x00, 0x7c, 0xae, 0x16, 0x17, 0xdb, 0xe9, 0xa4, 0xf3, 0xf2, 0xde, 0x52, 0x7c, 0xde, 0xc9, 0xc3, 0xda, 0xf0, 0x48, 0x64, 0xd3, 0xae, 0x58, 0x98, 0x54, 0x1b, 0x80, 0x12, 0x4d, 0x39, 0x4c, 0x81, 0xc2, 0xcb, 0xfd, 0x73, 0x20, 0x5f, 0x7f, 0x73, 0xcd, 0x8c, 0x9b, 0x75, 0x02, 0x79, 0x6e, 0x75, 0xdd, 0x9e, 0x1a, 0x5a, 0xb2, 0xcf, 0xbb, 0x20, 0xa3, 0x76, 0x9d, 0x36, 0x70, 0x20, 0xac, 0x25, 0x90, 0x3b, 0x2b, 0x73, 0x80, 0x1d, 0xa9, 0xc7, 0x5b, 0x49, 0x31, 0x4d, 0xab, 0xee, 0xc2, 0x5c, 0x7e, 0xb1, 0xfe, 0x57, 0xbd, 0xac, 0x26, 0xd1, 0xba, 0xb7, 0x46, 0xf4, 0x08, 0xe6, 0xad, 0x23, 0x8f, 0x53, 0xa0, 0xde, 0xdf, 0x1d, 0x50, 0xe6, 0xc5, 0xb0, 0x09, 0xa2, 0x1c, 0x47, 0xab, 0xc2, 0xe6, 0xb0, 0x5e, 0x22, 0x9c, 0x4f, 0x82, 0xf1, 0xc2, 0x66, 0xe5, 0x12, 0xbd, 0x94, 0x39, 0xc2, 0xe9, 0x9b, 0xc5, 0x7c, 0xe7, 0x66, 0x5a, 0x19, 0x34, 0x4a, 0x89, 0x3c, 0x00, 0x8c, 0x13, 0xed, 0x3d, 0x23, 0xa1, 0x84, 0xf6, 0xc0, 0xb5, 0xc9, 0xe2, 0x0c, 0xe1, 0x59, 0x39, 0x30, 0x37, 0x4c, 0xc6, 0x9b, 0x00, 0x14, 0x3e, 0xff, 0xb1, 0xa8, 0xd0, 0x9d, 0x1a, 0xe3, 0xfd, 0xc3, 0xe1, 0x26, 0xaa, 0x93, 0x2f, 0x45, 0x73, 0x05, 0xa9, 0xa1, 0x43, 0x30, 0xa2, 0x91, 0x21, 0xc5, 0x8e, 0x07, 0x4d, 0xdc, 0xba, 0x70, 0x8c, 0xf3, 0x3b, 0xdb, 0xc0, 0x33, 0x25, 0x5e, 0xbb, 0xf6, 0xfd, 0xb5, 0x55, 0x87, 0x70, 0x2d, 0xbc, 0x28, 0x44, 0xc1, 0x0c, 0x5a, 0x90, 0x82, 0x20, 0x58, 0x28, 0x3c, 0xa7, 0xe5, 0x5c, 0x56, 0x7a, 0x47, 0xe2, 0xfa, 0x2d, 0x94, 0x10, 0x76, 0xe3, 0x2c, 0x4e, 0xe2, 0x67, 0x87, 0xcc, 0x03, 0x79, 0x31, 0x70, 0x70, 0x66, 0x12, 0x13, 0xf3, 0xdc, 0xf3, 0xec, 0x32, 0xfb, 0x3e, 0x4c, 0x8f, 0xaf, 0x05, 0x8c, 0x4c, 0x3e, 0x46, 0x44, 0xf3, 0x1d, 0x6e, 0xbe, 0xf5, 0x08, 0x1b, 0xab, 0x91, 0x51, 0x26, 0x14, 0xf7, 0x79, 0xe1, 0x93, 0xae, 0xfd, 0x9d, 0xc2, 0x33, 0x72, 0x70, 0xf4, 0xe3, 0xd4, 0x35, 0x23, 0x1a, 0x1c, 0xd3, 0x2a, 0x9d, 0x10, 0xc3, 0x34, 0x35, 0x5f, 0xcc, 0x75, 0x9d, 0xed, 0x11, 0x18, 0x9e, 0x6c, 0x4e, 0x78, 0x79, 0x2c, 0x5f, 0x92, 0x85, 0x34, 0x02, 0xbb, 0x19, 0x91, 0xdd, 0x8e, 0xac, 0xee, 0xc3, 0x29, 0x3b, 0x65, 0x33, 0x99, 0xec, 0x95, 0x21, 0x92, 0xf0, 0xf5, 0xf9, 0x63, 0xad, 0x67, 0xe2, 0x2a, 0x1d, 0x11, 0x40, 0x44, 0x71, 0x68, 0x7c, 0x08, 0xfb, 0x8d, 0x07, 0xb5, 0x4a, 0xdd, 0x9c, 0xa8, 0x97, 0xc4, 0xc6, 0xd3, 0x60, 0xd1, 0xa3, 0x6a, 0x52, 0x10, 0xe7, 0xdf, 0x6c, 0x94, 0x23, 0x11, 0x62, 0x53, 0x48, 0xc1, 0x3f, 0x37, 0x67, 0x45, 0x4f, 0x71, 0xba, 0x80, 0x3c, 0x11, 0xe8, 0x11, 0x77, 0xd3, 0x85, 0xcb, 0xd9, 0x3c, 0xd8, 0x65, 0x8b, 0xe6, 0xe2, 0x73, 0x23, 0x19, 0x9b, 0x95, 0x0f, 0x9a, 0x7f, 0xef, 0x37, 0xc8, 0x49, 0xd9, 0xde, 0xe4, 0xff, 0xd7, 0xc9, 0xb1, 0x2e, 0xcb, 0xa4, 0x3d, 0x77, 0x69, 0xa1, 0xfe, 0x4a, 0xec, 0x62, 0x20, 0xf2, 0x07, 0x19, 0x1e, 0xd2, 0x1f, 0xee, 0x90, 0xee, 0xb7, 0xa1, 0x44, 0xad, 0x2c, 0x70, 0x8f, 0xdd, 0xa2, 0x3b, 0xe5, 0xf7, 0x3e, 0xe6, 0xa8, 0xa4, 0x96, 0xff, 0x3e, 0x81, 0x65, 0xa0, 0x66, 0x1f, 0x84, 0x97, 0xcc, 0x4f, 0x15, 0xc5, 0xdb, 0x9c, 0x01, 0xc4, 0xd2, 0x18, 0xa6, 0xcd, 0x1a, 0x5c, 0xc9, 0xd8, 0xd7, 0xca, 0xd2, 0x04, 0xbd, 0x15, 0x38, 0x3a, 0x24, 0x04, 0x3a, 0x0d, 0x5f, 0x72, 0xd0, 0xe5, 0x4a, 0x9a, 0xe1, 0x5d, 0x23, 0x91, 0xb6, 0xe9, 0x9b, 0x14, 0xaf, 0xbc, 0x2c, 0x84, 0x34, 0xe9, 0xac, 0x2f, 0xef, 0xc8, 0x23, 0xd1, 0x38, 0x9b, 0xda, 0x5b, 0xd1, 0x71, 0xb4, 0xf2, 0xd4, 0x4b, 0xc1, 0x3b, 0xe9, 0x7e, 0x11, 0xd6, 0xbc, 0x58, 0xc6, 0x28, 0xaf, 0x06, 0x6d, 0x5e, 0xcc, 0xb5, 0x8f, 0xae, 0xfd, 0xf8, 0x82, 0xe0, 0x7f, 0x6a, 0x85, 0x0e, 0x94, 0x94, 0x0d, 0xa8, 0x78, 0x11, 0x59, 0xba, 0x97, 0xef, 0x4c, 0x72, 0xfd, 0x59, 0x7c, 0xdd, 0x0e, 0x73, 0x87, 0xf1, 0x77, 0x86, 0xa6, 0xd0, 0x64, 0x5d, 0x84, 0x4b, 0xf4, 0xef, 0x50, 0xa5, 0xe9, 0x3e, 0x10, 0x9a, 0xa5, 0x7e, 0x39, 0xa0, 0x52, 0x7a, 0x7d, 0x6d, 0x60, 0x34, 0xe5, 0xb9, 0x34, 0xcb, 0x1f, 0x45, 0x1e, 0xa2, 0x19, 0x1c, 0x8c, 0xbf, 0xcf, 0x19, 0x7e, 0x71, 0x61, 0xa9, 0x3a, 0x36, 0x68, 0xd2, 0x41, 0xdb, 0x8a, 0x75, 0x81, 0xe5, 0x4c, 0xd0, 0xcc, 0x30, 0x28, 0x46, 0x89, 0xd6, 0xe0, 0x63, 0xaa, 0x52, 0x11, 0x1b, 0xde, 0xe6, 0x0b, 0x52, 0x07, 0x3a, 0xe0, 0xa2, 0xee, 0x45, 0xbb, 0x58, 0x35, 0x70, 0x73, 0xbf, 0x8e, 0xf9, 0x60, 0xa2, 0x2b, 0x96, 0x6e, 0x0c, 0x76, 0x5c, 0x6f, 0x52, 0x01, 0xde, 0xb6, 0x53, 0xc0, 0x99, 0xe1, 0xff, 0x76, 0x90, 0xf6, 0x16, 0x6d, 0x33, 0xb2, 0x32, 0x6a, 0x85, 0x1d, 0x08, 0xe0, 0x7e, 0x62, 0xeb, 0x64, 0xae, 0xde, 0x92, 0x61, 0x24, 0x77, 0x1a, 0x0d, 0x8e, 0x2f, 0x4e, 0x9b, 0xa2, 0xf8, 0x27, 0xb3, 0xbc, 0xcb, 0x8f, 0x1f, 0xc8, 0xf4, 0x6a, 0xc7, 0x62, 0xb0, 0xd7, 0xdf, 0x3c, 0xf9, 0xb3, 0x5f, 0xc0, 0xa1, 0x60, 0xb3, 0xf7, 0x9e, 0xc4, 0xb4, 0xaa, 0xa5, 0x94, 0xd8, 0xc7, 0xfa, 0xd2, 0xa5, 0x05, 0x86, 0x94, 0x6c, 0xcb, 0x2a, 0x08, 0x33, 0x4f, 0x53, 0xb5, 0xf3, 0xfb, 0xce, 0x03, 0x04, 0x14, 0xde, 0xfe, 0xd5, 0x9d, 0x8c, 0x57, 0xe0, 0x79, 0x3f, 0xab, 0xdd, 0xd1, 0x8c, 0x08, 0x36, 0xb5, 0x4f, 0xae, 0xbc, 0x06, 0xfb, 0x12, 0x98, 0x93, 0x2e, 0x29, 0x84, 0x82, 0x89, 0xe2, 0x3b, 0xf2, 0xbe, 0xf5, 0x2d, 0xde, 0xea, 0xdb, 0x78, 0x44, 0x26, 0x1d, 0x14, 0x87, 0x58, 0xd2, 0x4d, 0x13, 0x50, 0x63, 0x77, 0x3f, 0x10, 0x92, 0xdd, 0x77, 0x6a, 0xbb, 0xfa, 0x9a, 0xd1, 0x59, 0xec, 0xa1, 0x69, 0xcb, 0x25, 0x82, 0x60, 0x59, 0x64, 0x53, 0x81, 0x72, 0xe3, 0xb3, 0x06, 0x37, 0xd2, 0x66, 0xae, 0x3e, 0x05, 0x3f, 0x10, 0x8f, 0xea, 0x43, 0x2f, 0xf3, 0xbd, 0x0b, 0x4e, 0x6f, 0xff, 0x6a, 0x06, 0x0b, 0x24, 0x50, 0x95, 0xd7, 0x8c, 0xee, 0x79, 0x30, 0xb4, 0x1b, 0x3e, 0x40, 0xae, 0xf7, 0x94, 0xc4, 0xce, 0xce, 0xa4, 0x12, 0xa7, 0x3f, 0xa4, 0x5a, 0x35, 0x9d, 0xa9, 0x2c, 0x5c, 0x95, 0xbd, 0x3a, 0x91, 0x11, 0x32, 0x60, 0xd8, 0x5d, 0x36, 0xe1, 0xee, 0x88, 0xa7, 0xf4, 0xc7, 0x0e, 0x28, 0x7f, 0x3b, 0xb3, 0x74, 0x22, 0xfc, 0xb2, 0xf2, 0x77, 0xcb, 0x17, 0x8a, 0x98, 0xeb, 0x6a, 0xb8, 0xe2, 0xd6, 0x8d, 0xde, 0xf9, 0x30, 0xe7, 0xdf, 0x0c, 0xf9, 0xc3, 0xe9, 0x5b, 0x06, 0xf2, 0x92, 0xf6, 0xb2, 0xb8, 0x27, 0xc7, 0xd1, 0xe6, 0x40, 0xd2, 0xe5, 0x43, 0x98, 0xbc, 0x95, 0x30, 0x1c, 0x8a, 0x5a, 0x8c, 0x42, 0xac, 0x7c, 0xd6, 0x9c, 0x3a, 0x3d, 0x91, 0xad, 0x7d, 0x53, 0xed, 0xfb, 0xb1, 0x9c, 0xa3, 0x65, 0x09, 0x0e, 0x21, 0xb7, 0xf4, 0xed, 0xe7, 0x7c, 0x9f, 0x40, 0x31, 0x14, 0xbb, 0x85, 0xd6, 0x06, 0x80, 0xa4, 0x70, 0x97, 0xf2, 0x22, 0xbd, 0x9b, 0x63, 0x97, 0x45, 0x8b, 0x39, 0x62, 0x3d, 0xd8, 0xf1, 0x9b, 0xac, 0x7f, 0x64, 0x49, 0xcc, 0xde, 0x49, 0xd5, 0xb3, 0xc5, 0xfc, 0xbf, 0x32, 0xd1, 0x7e, 0x90, 0xfe, 0xf5, 0xbc, 0x10, 0x0d, 0x5a, 0x14, 0xb8, 0x43, 0x69, 0x15, 0x6a, 0x4e, 0x26, 0x86, 0x60, 0xcf, 0xbf, 0xaa, 0x63, 0xba, 0x64, 0xc3, 0x3d, 0xff, 0x5a, 0xd5, 0x70, 0x6a, 0x4b, 0xac, 0x28, 0xc7, 0xe1, 0x20, 0x6f, 0x4b, 0x93, 0x98, 0xa0, 0x2f, 0xbe, 0xcd, 0x1e, 0x9e, 0xf7, 0xd1, 0x45, 0xd1, 0xa0, 0x4f, 0xa1, 0x79, 0xb9, 0x14, 0x5e, 0x5d, 0xf9, 0xce, 0x00, 0x44, 0x1d, 0x14, 0x55, 0x15, 0x81, 0xa7, 0xa7, 0x3d, 0xed, 0xf8, 0x35, 0x51, 0xb1, 0xea, 0xe5, 0xf4, 0xf4, 0xd8, 0x33, 0xfc, 0x49, 0xda, 0x6d, 0xd0, 0x83, 0x44, 0x22, 0x14, 0xcb, 0x70, 0xd8, 0x89, 0xef, 0xbe, 0xfd, 0x2e, 0xfd, 0xd8, 0x20, 0xac, 0x11, 0x3b, 0x61, 0xf0, 0x6b, 0xf3, 0x26, 0x1a, 0xc4, 0xa5, 0x10, 0x96, 0xe2, 0xd3, 0x2e, 0x88, 0x6b, 0x5c, 0x70, 0x6e, 0xf7, 0x42, 0x5e, 0x01, 0x68, 0xb0, 0x09, 0x5b, 0x7e, 0x3c, 0x42, 0x5f, 0xa6, 0x69, 0x0b, 0x56, 0x13, 0x70, 0x4b, 0xd6, 0x10, 0x40, 0xc6, 0xe8, 0x95, 0xc3, 0x4b, 0x69, 0x18, 0x63, 0x2f, 0xb1, 0xa5, 0xcd, 0xfb, 0x73, 0x31, 0xf4, 0x62, 0xe4, 0x2c, 0x59, 0x76, 0x20, 0x55, 0x8b, 0x1b, 0xc9, 0xd2, 0xe9, 0xbb, 0xf1, 0x80, 0xaf, 0x3b, 0x3a, 0x88, 0x31, 0x2e, 0x3b, 0x33, 0x61, 0x49, 0x26, 0xff, 0x97, 0x17, 0xa8, 0xf2, 0x92, 0xee, 0x11, 0x2e, 0xba, 0x22, 0xb5, 0xc6, 0xa7, 0x78, 0x92, 0xd0, 0xe7, 0xde, 0x33, 0xbb, 0xfc, 0x59, 0xd4, 0xe3, 0xa5, 0x3e, 0xc6, 0x63, 0x5f, 0xa5, 0x15, 0x2a, 0x2a, 0x1b, 0x69, 0x52, 0x90, 0x97, 0x2a, 0xad, 0xe4, 0xb0, 0xe7, 0xa0, 0xc8, 0x0c, 0xf9, 0x34, 0xf1, 0x1c, 0x63, 0x6a, 0x2f, 0x06, 0xfd, 0xcf, 0xa7, 0xe3, 0xd2, 0x51, 0x63, 0x2b, 0xc6, 0x51, 0x0e, 0x6d, 0x7c, 0xf9, 0xf8, 0x44, 0x76, 0xd0, 0x61, 0x86, 0x7e, 0x8b, 0xf3, 0xbe, 0x45, 0x27, 0x90, 0xdd, 0x4b, 0x34, 0x4e, 0x2c, 0xfe, 0x74, 0xc0, 0x85, 0x26, 0xa4, 0x78, 0xc3, 0x80, 0x9a, 0xc9, 0x77, 0xa9, 0x90, 0xd2, 0xdd, 0x3e, 0xc0, 0xb7, 0x0e, 0x42, 0x31, 0x32, 0x76, 0xc0, 0xd0, 0x4b, 0x89, 0xb1, 0xc2, 0x63, 0xb2, 0x1f, 0xf9, 0x77, 0x8c, 0x8b, 0x05, 0xa3, 0x55, 0x8d, 0x2d, 0xe5, 0xa0, 0xba, 0xbf, 0x24, 0x49, 0xca, 0xa4, 0x71, 0xae, 0xfb, 0x37, 0x8c, 0x1c, 0xb0, 0x58, 0xaa, 0x88, 0x5e, 0xbb, 0x75, 0x80, 0xa8, 0x86, 0x55, 0x61, 0xc9, 0x1c, 0xee, 0xc9, 0x33, 0x33, 0xea, 0x4f, 0x75, 0x2d, 0xf8, 0x72, 0x62, 0xa5, 0x14, 0xd0, 0x70, 0x48, 0x0a, 0x99, 0x5e, 0xe6, 0x35, 0x42, 0x1a, 0xc8, 0x8d, 0x7e, 0xe1, 0x45, 0xe1, 0x6a, 0xa8, 0x90, 0x60, 0x07, 0xbb, 0xd4, 0x5e, 0xee, 0xa4, 0x83, 0x55, 0x3f, 0x4e, 0xeb, 0x2a, 0xdb, 0x6a, 0x0a, 0xb2, 0xd3, 0x12, 0xa3, 0x75, 0x20, 0xac, 0x91, 0xb2, 0x94, 0x12, 0x5c, 0xa3, 0x10, 0xf0, 0x0a, 0x01, 0xf8, 0x6d, 0x37, 0xcb, 0xe4, 0x0d, 0x68, 0x44, 0x98, 0xd5, 0x9d, 0x3b, 0x37, 0xb1, 0x25, 0x8e, 0xb3, 0x14, 0xb6, 0xf1, 0x88, 0xde, 0xbd, 0xec, 0xaa, 0x82, 0xf3, 0x23, 0xbb, 0x68, 0x31, 0xda, 0x82, 0x90, 0x85, 0xb8, 0x99, 0x79, 0x85, 0xcb, 0x65, 0x41, 0xe3, 0xcd, 0x4b, 0x0d, 0x42, 0xa6, 0x21, 0xab, 0x48, 0x31, 0xe3, 0x76, 0xf5, 0x43, 0xa8, 0x7a, 0x33, 0xea, 0xd4, 0xd9, 0xae, 0xf2, 0x8e, 0x6e, 0xe5, 0xae, 0x75, 0xaf, 0x82, 0xf5, 0x8e, 0xd8, 0xe6, 0x6a, 0x81, 0x46, 0x09, 0x00, 0x06, 0x20, 0x81, 0xbe, 0x9a, 0x3d, 0xe0, 0xc0, 0x76, 0x42, 0x43, 0x7f, 0xc1, 0x0b, 0x28, 0x52, 0x05, 0x4d, 0x80, 0x34, 0xe0, 0x79, 0x06, 0xc7, 0xfc, 0xe3, 0xce, 0x99, 0x40, 0x23, 0x21, 0xa6, 0x48, 0xbb, 0x88, 0x1f, 0x13, 0xfb, 0x27, 0x6a, 0xfc, 0x22, 0x4c, 0x6a, 0xec, 0xc6, 0x48, 0x00, 0xcd, 0x76, 0x7e, 0xd2, 0x42, 0x9d, 0xb9, 0x4b, 0x95, 0xa9, 0xc3, 0xe3, 0xf1, 0x6d, 0x33, 0xa0, 0xd1, 0xc4, 0x86, 0xdc, 0xb8, 0x78, 0x71, 0x4a, 0x23, 0x62, 0x76, 0x34, 0xbb, 0xd2, 0xb6, 0x06, 0xd0, 0x31, 0x06, 0x10, 0x03, 0xe4, 0x44, 0x88, 0x42, 0x74, 0xec, 0xce, 0xfa, 0xec, 0xe6, 0xf4, 0x87, 0x83, 0xa2, 0x7e, 0xf0, 0x7b, 0x67, 0x66, 0xd1, 0x49, 0xe8, 0x64, 0x98, 0xf6, 0x19, 0x6c, 0xf4, 0xc5, 0x40, 0x77, 0x8b, 0x16, 0x4f, 0x86, 0xec, 0x8a, 0x71, 0xe4, 0xc4, 0x68, 0xe3, 0xac, 0x54, 0x40, 0x05, 0x8c, 0x22, 0xce, 0xb1, 0xc8, 0xef, 0x20, 0xcb, 0x82, 0xea, 0xfb, 0x19, 0x38, 0x23, 0x7c, 0x55, 0x8e, 0x42, 0xfb, 0x81, 0x4e, 0x79, 0x34, 0x7b, 0xad, 0xb7, 0xa9, 0xd1, 0xd0, 0x1f, 0x42, 0xd6, 0x8e, 0xb8, 0x37, 0xf6, 0x78, 0x66, 0x2f, 0x46, 0x16, 0x19, 0xaa, 0x5f, 0x74, 0x44, 0x9c, 0x6d, 0xdd, 0x91, 0x5a, 0x83, 0xe7, 0xd3, 0xba, 0x32, 0xb0, 0x3b, 0x76, 0x59, 0x66, 0xd0, 0xd2, 0x3e, 0x0d, 0x19, 0x7f, 0xde, 0x7c, 0x1c, 0xbe, 0x82, 0xa9, 0x8d, 0xc9, 0x93, 0x27, 0x3f, 0x6e, 0xaf, 0xed, 0xde, 0xfd, 0xfc, 0x59, 0xe0, 0x64, 0xbd, 0x75, 0xb9, 0x99, 0x23, 0x78, 0x4e, 0x38, 0x65, 0x90, 0xad, 0x6e, 0x13, 0xde, 0xfb, 0x15, 0xa7, 0xc2, 0xad, 0x20, 0x5d, 0x5a, 0xfc, 0x3a, 0x44, 0x45, 0x92, 0xaa, 0x95, 0xad, 0x8a, 0x7a, 0x44, 0x84, 0x97, 0xd8, 0xd6, 0x0d, 0x83, 0xbc, 0x72, 0x9f, 0xdc, 0xcb, 0x3a, 0xa6, 0xea, 0x7c, 0xdc, 0xea, 0xe3, 0x79, 0x63, 0x14, 0x62, 0x48, 0x54, 0x6e, 0x16, 0x2a, 0xf6, 0xea, 0xb7, 0x43, 0xf1, 0x66, 0x3f, 0xfc, 0x1a, 0x2e, 0x56, 0xa6, 0x8e, 0xc2, 0x0e, 0x60, 0xfe, 0xda, 0xd0, 0x3a, 0x49, 0xa8, 0x97, 0x9a, 0x50, 0x5d, 0x5b, 0xdf, 0x06, 0xee, 0xd1, 0x45, 0xc6, 0x18, 0x51, 0x08, 0xea, 0xa2, 0x17, 0xcd, 0x99, 0xe2, 0xaf, 0x3d, 0xe0, 0x82, 0xab, 0xf3, 0x04, 0x84, 0x97, 0x98, 0x17, 0x84, 0x2f, 0x4c, 0xca, 0x3d, 0xcf, 0x48, 0x82, 0x4f, 0x2a, 0xc2, 0xae, 0x40, 0x3f, 0x11, 0x57, 0xc0, 0x89, 0x12, 0xf8, 0x31, 0x76, 0xca, 0x91, 0x66, 0x1b, 0x4d, 0xf7, 0xab, 0x26, 0xde, 0x6e, 0x06, 0x14, 0x57, 0x79, 0xbd, 0xa4, 0xcc, 0xf1, 0x18, 0x8b, 0x6b, 0x55, 0x68, 0x69, 0xa6, 0x61, 0x48, 0xfc, 0x95, 0xe2, 0x23, 0x93, 0x95, 0xc8, 0xf7, 0xc6, 0x36, 0x7d, 0x58, 0x65, 0x54, 0x75, 0xb7 ],
-const [ 0x21, 0x5c, 0x37, 0x32, 0x0f, 0xbd, 0xd5, 0x52, 0x00, 0x37, 0xbc, 0xe5, 0xb0, 0x2b, 0x12, 0x87, 0x1b, 0x34, 0x5b, 0xbd, 0x84, 0x16, 0x9d, 0x87, 0xbc, 0xf1, 0xc1, 0x34, 0xa1, 0xbb, 0x3d, 0x7a, 0xe5, 0xec, 0xf0, 0xc6, 0x11, 0x7b, 0x4d, 0xd1, 0xc9, 0x0a, 0xbc, 0x74, 0x51, 0x5e, 0x3d, 0xbd, 0x50, 0x11, 0x4f, 0x42, 0xd4, 0x8b, 0x10, 0xb5, 0x97, 0x2e, 0xa5, 0xb9, 0x81, 0xd1, 0xdc, 0xf4, 0x6d, 0x70, 0x10, 0x66, 0x30, 0x21, 0x4e, 0xf9, 0xd7, 0x4a, 0xb5, 0x59, 0x31, 0x12, 0x23, 0x05, 0x8e, 0x15, 0x0e, 0xa7, 0xc5, 0x5c, 0xaf, 0xa1, 0x7c, 0x8c, 0x66, 0xe8, 0xa3, 0x5d, 0x5a, 0x15, 0x42, 0x4e, 0x60, 0xb9, 0x75, 0x98, 0x1e, 0xf1, 0xb4, 0x60, 0x70, 0x3b, 0x58, 0x30, 0x0a, 0x88, 0x5b, 0xa8, 0x5f, 0x93, 0x60, 0x71, 0xc2, 0x70, 0xf3, 0x73, 0xcb, 0x68, 0x11, 0x48, 0xfd, 0x04, 0xeb, 0xf0, 0xa5, 0x68, 0xe7, 0xc6, 0x05, 0xe2, 0xe8, 0xb2, 0xb2, 0xc3, 0xcf, 0xa1, 0x3b, 0x6e, 0x42, 0x32, 0x0b, 0xae, 0xac, 0xb2, 0x91, 0x4d, 0x84, 0x4b, 0x9e, 0xe2, 0xd3, 0x78, 0x0e, 0xea, 0xf0, 0xbc, 0xaa, 0x1a, 0x8e, 0x94, 0x4d, 0xf4, 0xf9, 0xaa, 0x46, 0x99, 0x9d, 0x4b, 0xfe, 0xde, 0xc8, 0x1b, 0xdb, 0xa1, 0xb1, 0x08, 0x63, 0x5e, 0xb8, 0x7c, 0xa5, 0xfd, 0xef, 0xd7, 0xd4, 0xee, 0xda, 0x1c, 0x36, 0x78, 0x73, 0xea, 0x3c, 0x4e, 0x71, 0xaf, 0xf3, 0x64, 0xca, 0x18, 0x9b, 0x00, 0x77, 0xcc, 0x94, 0x14, 0x77, 0x59, 0x82, 0xcb, 0x16, 0x6e, 0xa9, 0x62, 0x6f, 0x4c, 0x99, 0x39, 0x30, 0x77, 0x10, 0x2a, 0x9d, 0xb1, 0x1c, 0x19, 0xd8, 0x28, 0x80, 0xcc, 0x5f, 0xef, 0x59, 0xfd, 0xd6, 0xab, 0x01, 0xae, 0x07, 0x8f, 0x34, 0xbd, 0x27, 0x8a, 0x71, 0xb8, 0x5a, 0xbe, 0xa3, 0xf2, 0x7a, 0x35, 0x01, 0xd7, 0x14, 0xcf, 0x33, 0x7c, 0xb4, 0x7f, 0xb6, 0x7b, 0x63, 0xb7, 0x81, 0xfd, 0x6d, 0x21, 0xe9, 0x18, 0x68, 0x90, 0xc2, 0x5c, 0x71, 0x36, 0xc7, 0xa8, 0xb9, 0x17, 0x3c, 0x42, 0x41, 0xbd, 0xd1, 0x27, 0xe1, 0x2e, 0xca, 0xa0, 0x8f, 0x1b, 0x5d, 0x16, 0xde, 0x5a, 0x5b, 0x27, 0xc5, 0x97, 0x13, 0xfa, 0xa2, 0x46, 0x74, 0xcf, 0x7e, 0xdb, 0x71, 0xda, 0x93, 0x3e, 0xaa, 0x51, 0x0b, 0x79, 0x48, 0xc4, 0x0b, 0xb4, 0x28, 0xad, 0xf0, 0x64, 0x3d, 0x48, 0xd9, 0xbf, 0x2f, 0xa4, 0x65, 0x73, 0x48, 0xfa, 0xbe, 0x97, 0x91, 0x3f, 0xd6, 0xe2, 0x38, 0xf5, 0xf0, 0x1b, 0x35, 0x46, 0x63, 0xd0, 0x2d, 0x53, 0x9a, 0x4b, 0x97, 0xca, 0x60, 0xc2, 0x1d, 0xb6, 0x5a, 0xce, 0x45, 0x9c, 0xd5, 0x1e, 0x50, 0xc3, 0xc3, 0x6d, 0x63, 0xd3, 0xff, 0xb1, 0xe4, 0xa2, 0xd9, 0x96, 0x27, 0x4a, 0xce, 0x2a, 0x4a, 0x7f, 0x97, 0xda, 0x5d, 0x1f, 0x66, 0x9d, 0xc6, 0x0b, 0x6c, 0x6f, 0xe4, 0x36, 0x9e, 0x01, 0xf3, 0xfb, 0xb9, 0xaf, 0x30, 0xb4, 0x83, 0xb2, 0x3d, 0x88, 0x54, 0x97, 0xc6, 0x84, 0xd6, 0xef, 0x65, 0xed, 0x09, 0x49, 0xc3, 0xd5, 0x8a, 0x5d, 0x01, 0xed, 0x14, 0x8a, 0x56, 0x9a, 0x47, 0x83, 0xf9, 0x4b, 0xa8, 0x45, 0x41, 0x09, 0xea, 0x4c, 0x0a, 0x50, 0x6c, 0x06, 0x5c, 0x1d, 0x02, 0x88, 0x47, 0x48, 0xf8, 0x80, 0x11, 0x14, 0x54, 0x6a, 0x94, 0x05, 0x5c, 0x07, 0xe1, 0xf1, 0x58, 0x0b, 0x29, 0x5a, 0x99, 0x16, 0xde, 0xfb, 0xba, 0xe6, 0x15, 0xa1, 0x26, 0xcb, 0x2f, 0x3c, 0xda, 0x5b, 0xb8, 0x36, 0x6d, 0x66, 0x8f, 0x03, 0x4d, 0x2d, 0x47, 0xfa, 0x4b, 0xce, 0xce, 0x63, 0x5a, 0x03, 0x4c, 0xd1, 0x93, 0x0c, 0x4e, 0xb2, 0x7d, 0xea, 0x24, 0x24, 0x8c, 0xce, 0x87, 0x0a, 0xe7, 0xd1, 0x80, 0x5f, 0x6e, 0xe5, 0x85, 0xcb, 0xfc, 0x0c, 0xe4, 0x74, 0xe9, 0xc8, 0x65, 0x17, 0xd4, 0xd2, 0x2a, 0x57, 0x9f, 0x0e, 0xdb, 0x55, 0xba, 0xbf, 0x00, 0x80, 0xa5, 0xf8, 0xae, 0xaf, 0xb0, 0x53, 0x66, 0x6d, 0x06, 0xe4, 0x3a, 0x93, 0xe9, 0x70, 0x31, 0x1d, 0x3f, 0xdb, 0xed, 0x36, 0x4e, 0xe0, 0x8b, 0x95, 0xc4, 0x05, 0xcb, 0x0c, 0xfa, 0xcd, 0x71, 0x5e, 0x79, 0x2f, 0xeb, 0x52, 0xbe, 0x47, 0x33, 0x05, 0x3a, 0x4c, 0xf7, 0x84, 0x9d, 0xc2, 0xf8, 0x9a, 0x54, 0xf0, 0xb0, 0xe7, 0x50, 0x95, 0x37, 0x32, 0x0a, 0xd7, 0x67, 0x01, 0xc4, 0x7c, 0x3f, 0x66, 0x11, 0x5c, 0x85, 0x1b, 0x97, 0x16, 0xaf, 0xd1, 0x14, 0x03, 0x04, 0xc6, 0x9f, 0x68, 0xff, 0x96, 0x31, 0xf0, 0xf4, 0x53, 0x63, 0x59, 0xf5, 0xd7, 0x79, 0x6d, 0xf7, 0x59, 0xa0, 0x34, 0x31, 0x3f, 0x74, 0x68, 0xc5, 0x33, 0xc5, 0x29, 0xa2, 0x79, 0x9b, 0xf2, 0xa9, 0x80, 0x77, 0xcc, 0x0f, 0xb7, 0xdc, 0xc1, 0x02, 0xa1, 0x0e, 0x94, 0x8f, 0x2c, 0x1a, 0xaf, 0xc3, 0x3f, 0x16, 0x5d, 0x10, 0x92, 0xaa, 0x39, 0xf3, 0xc2, 0xd0, 0xe7, 0xd4, 0xa5, 0xd7, 0x01, 0x2e, 0xdb, 0xae, 0x54, 0xef, 0xa5, 0x5f, 0x4d, 0x22, 0xfa, 0xda, 0xae, 0xcb, 0xd8, 0xf4, 0x85, 0x12, 0xd9, 0xaf, 0x5f, 0xa4, 0x06, 0xbc, 0xb9, 0x57, 0xef, 0x3e, 0xb7, 0x0d, 0xfc, 0xd1, 0x19, 0xda, 0xfe, 0xcb, 0x6a, 0x69, 0x09, 0xc2, 0x7a, 0x9b, 0x86, 0x4e, 0x0f, 0x72, 0x84, 0x0f, 0xd8, 0x2e, 0x4f, 0xf2, 0xa2, 0xb5, 0x44, 0xb1, 0xce, 0x38, 0xe3, 0x99, 0x03, 0x14, 0x26, 0x90, 0x20, 0xf6, 0x11, 0x56, 0x75, 0x43, 0x8b, 0x0b, 0x32, 0xb7, 0x6c, 0xf2, 0x1f, 0x4c, 0xd7, 0x74, 0x8e, 0x5d, 0xca, 0x68, 0x8f, 0x0b, 0xf3, 0x91, 0x62, 0xe0, 0xc6, 0x68, 0x32, 0xb2, 0xcc, 0x1c, 0x00, 0xca, 0x3e, 0xd8, 0xdd, 0x46, 0xd2, 0x44, 0x5c, 0xbc, 0xd5, 0x4e, 0x47, 0x20, 0x7a, 0x2a, 0x91, 0xe8, 0x72, 0x97, 0x8c, 0x6d, 0xbc, 0x65, 0x5c, 0x95, 0xbf, 0x34, 0xac, 0xaf, 0x96, 0x7e, 0x9f, 0x9e, 0xab, 0xd8, 0x09, 0x3a, 0x87, 0x74, 0xe0, 0xf3, 0xe8, 0xeb, 0xed, 0xb8, 0x14, 0x39, 0xc7, 0x17, 0x6e, 0x09, 0x02, 0xa5, 0x47, 0x34, 0xa4, 0xa0, 0xf6, 0x84, 0xd8, 0xd3, 0x2b, 0xbd, 0xe7, 0xba, 0x80, 0xde, 0x63, 0xe7, 0x51, 0xa4, 0xa6, 0xa4, 0xce, 0x50, 0x7b, 0xda, 0x4e, 0xaa, 0x1a, 0x31, 0xe7, 0x46, 0x5a, 0x79, 0x3b, 0x06, 0x22, 0x49, 0x94, 0xe0, 0x20, 0xe5, 0x34, 0xe1, 0xbe, 0x65, 0xe6, 0x72, 0x52, 0x14, 0xd9, 0xdb, 0x95, 0x17, 0xae, 0x05, 0x57, 0x4f, 0xd0, 0x84, 0x71, 0x80, 0x04, 0xd4, 0xfa, 0xb2, 0x41, 0xe3, 0xbe, 0xd7, 0xc1, 0xd0, 0xeb, 0xaf, 0x58, 0xf3, 0x0e, 0xe9, 0x05, 0x1d, 0x3e, 0x8b, 0xc7, 0x21, 0x97, 0x93, 0xb1, 0x93, 0xeb, 0xde, 0x41, 0xcf, 0xb3, 0x4a, 0xee, 0x3d, 0x4c, 0x18, 0x00, 0xd4, 0x60, 0x94, 0xa4, 0xdd, 0xa2, 0xf7, 0x40, 0xfa, 0xbe, 0x8c, 0x04, 0x66, 0x8f, 0x12, 0xc2, 0x7e, 0x93, 0x62, 0xff, 0x81, 0x9d, 0x51, 0x4a, 0x94, 0xca, 0xd8, 0xcc, 0x09, 0xb6, 0x72, 0x21, 0xe0, 0xf0, 0xc6, 0x66, 0x8e, 0xab, 0x86, 0x93, 0xfe, 0xb6, 0x97, 0x0b, 0xd6, 0xae, 0x72, 0x72, 0xfb, 0x72, 0xca, 0xbf, 0x57, 0xd7, 0x6f, 0x92, 0xda, 0x9d, 0x72, 0xc7, 0xbe, 0xa2, 0x8a, 0x4b, 0x10, 0x56, 0xb6, 0x2e, 0x6c, 0x6f, 0x24, 0xfa, 0x08, 0xde, 0x52, 0x44, 0xf3, 0x01, 0x73, 0x80, 0x9f, 0x1a, 0x14, 0x1a, 0x9e, 0x00, 0xff, 0xc2, 0xa9, 0x14, 0x5f, 0x07, 0xe6, 0x77, 0x26, 0x27, 0x6b, 0x7a, 0xac, 0x25, 0xfe, 0x56, 0x98, 0x1d, 0x1e, 0x1e, 0x04, 0xd5, 0x48, 0xf1, 0xdc, 0x94, 0x73, 0x74, 0x87, 0x37, 0xdd, 0x7f, 0xca, 0x81, 0x09, 0x17, 0xe9, 0xb3, 0x08, 0x9d, 0x0f, 0x5c, 0xf9, 0x44, 0xef, 0x73, 0xcc, 0xc9, 0xac, 0xa3, 0x4b, 0x5e, 0xf6, 0xe6, 0x5a, 0xe7, 0x77, 0x55, 0x7d, 0x68, 0x6d, 0x3f, 0x9c, 0xbe, 0x98, 0x78, 0x03, 0x8e, 0x56, 0xf3, 0xad, 0x7c, 0x0d, 0x93, 0xc2, 0x9d, 0xc9, 0x3f, 0x5e, 0x2e, 0x26, 0x35, 0x94, 0x86, 0x71, 0xa0, 0xb3, 0x49, 0x0a, 0x6c, 0xc7, 0xdf, 0x0c, 0x59, 0x63, 0x24, 0x30, 0x4e, 0x9e, 0x61, 0xef, 0xf1, 0x5c, 0x7c, 0xe7, 0x74, 0xcf, 0x6b, 0x80, 0xb1, 0x3d, 0xee, 0xcf, 0x7a, 0x03, 0x7e, 0xbb, 0x2a, 0xda, 0x80, 0x5e, 0x80, 0x59, 0xbf, 0xae, 0xae, 0xbb, 0x19, 0x5c, 0xac, 0xe3, 0x79, 0xfc, 0xd2, 0x9d, 0x05, 0x67, 0xa6, 0x27, 0x98, 0x5d, 0xf3, 0xf0, 0x72, 0x6f, 0x1b, 0x9f, 0x2e, 0x1c, 0xad, 0x57, 0xf5, 0x3b, 0x3a, 0x39, 0xf2, 0x99, 0x65, 0x2b, 0x05, 0xe2, 0x3a, 0xd8, 0xbc, 0xc5, 0xc1, 0xf8, 0x7f, 0x53, 0xd2, 0xd2, 0x0a, 0xa8, 0x2a, 0xff, 0x21, 0xce, 0xbf, 0x70, 0x7e, 0xde, 0x51, 0xb3, 0x0f, 0x68, 0x42, 0x71, 0x5e, 0x15, 0xa7, 0x3c, 0x51, 0x8b, 0x9f, 0x87, 0x13, 0x91, 0xe4, 0xf6, 0x52, 0x74, 0x9f, 0xd9, 0xab, 0xa9, 0x81, 0xf3, 0x62, 0xb3, 0x0f, 0x7f, 0x57, 0x48, 0x3d, 0x75, 0x35, 0xaf, 0x3f, 0x09, 0xed, 0x6c, 0x9c, 0x74, 0x63, 0x1f, 0x84, 0xf8, 0x66, 0xaa, 0x63, 0x1e, 0xe6, 0x92, 0xb6, 0x43, 0x61, 0xa8, 0x1e, 0x52, 0x9f, 0xe8, 0xb2, 0xd3, 0x9f, 0xa1, 0x9a, 0x25, 0xd1, 0xd6, 0xda, 0x07, 0x86, 0xe4, 0x6b, 0x5e, 0xa4, 0x66, 0x90, 0x32, 0x9e, 0x56, 0x67, 0xf9, 0xa3, 0x75, 0xbe, 0x18, 0x16, 0xec, 0x29, 0xa7, 0x3f, 0x33, 0x51, 0x74, 0x40, 0x32, 0x8f, 0x4b, 0x4a, 0xa6, 0xba, 0x75, 0x10, 0xc7, 0x3d, 0x7f, 0x7c, 0x28, 0x6c, 0x3d, 0xa1, 0xde, 0x18, 0x0d, 0xf2, 0xe4, 0x60, 0x60, 0xb1, 0xbe, 0xcb, 0x77, 0xaa, 0x5d, 0x94, 0x6b, 0x20, 0x43, 0x45, 0x70, 0x08, 0xe7, 0x87, 0x5a, 0x75, 0x5b, 0x39, 0x61, 0x54, 0x2c, 0xbf, 0x21, 0x59, 0x8a, 0x9d, 0xe5, 0x39, 0xa8, 0x44, 0x24, 0x1a, 0x66, 0x2b, 0x4c, 0x47, 0x2e, 0x22, 0xbf, 0x29, 0x1b, 0xe4, 0x1b, 0x73, 0x61, 0xeb, 0xbf, 0x9c, 0xe9, 0x88, 0x8b, 0x92, 0x3b, 0x32, 0xe6, 0xad, 0xa1, 0x1f, 0x06, 0xe1, 0x89, 0x11, 0x6c, 0x39, 0x2c, 0x73, 0xad, 0x80, 0x6d, 0xa4, 0x78, 0x41, 0x04, 0x93, 0xd5, 0xf3, 0xdb, 0x8c, 0xab, 0x6d, 0xb8, 0x51, 0x85, 0xa0, 0x1d, 0x6d, 0x95, 0x84, 0x6d, 0xc5, 0xfa, 0x53, 0x4f, 0x70, 0x3e, 0xf6, 0x57, 0xc8, 0x23, 0xbc, 0xe4, 0xc1, 0x9f, 0x52, 0x44, 0x7a, 0x25, 0xf0, 0x1f, 0x12, 0x26, 0xd0, 0x12, 0xbd, 0xd8, 0xe4, 0x9a, 0x17, 0x36, 0xc8, 0x34, 0xb8, 0x48, 0xf6, 0xc2, 0x08, 0xa4, 0x39, 0x31, 0x54, 0x35, 0x64, 0x59, 0x22, 0x3b, 0x43, 0x24, 0xc2, 0x93, 0xd2, 0xf3, 0x26, 0x39, 0xad, 0x3d, 0xf4, 0x0b, 0xc8, 0x79, 0xd8, 0xcf, 0x60, 0x3f, 0x1f, 0x78, 0x31, 0xaa, 0x82, 0xa5, 0xea, 0x00, 0x3f, 0x6b, 0xde, 0x95, 0x6f, 0x54, 0xfc, 0xec, 0x93, 0xa7, 0x01, 0x20, 0x70, 0xea, 0xec, 0x82, 0x1d, 0xa6, 0xb2, 0x84, 0x5a, 0x6a, 0x34, 0xd6, 0x23, 0x12, 0x6e, 0xce, 0x85, 0x49, 0xf1, 0x0d, 0xb1, 0x4d, 0x93, 0x60, 0x4f, 0xf3, 0x65, 0xe4, 0x14, 0xea, 0xe5, 0x6e, 0x97, 0x43, 0x75, 0x29, 0x60, 0x31, 0x0c, 0x81, 0x42, 0x0e, 0x2c, 0x40, 0xec, 0x9f, 0x14, 0xf7, 0xba, 0x99, 0x36, 0xa0, 0xd1, 0x64, 0xeb, 0x81, 0x6a, 0x1e, 0x66, 0x54, 0x6e, 0xe3, 0xe6, 0xa4, 0x44, 0x4c, 0x30, 0x7a, 0xe6, 0x35, 0x3d, 0x39, 0x3b, 0xc4, 0x30, 0xc7, 0xa1, 0xa7, 0x8b, 0xed, 0xc8, 0x9c, 0xa1, 0x01, 0xc7, 0x37, 0x4f, 0xc2, 0x69, 0xe0, 0xe7, 0x83, 0xc8, 0x1b, 0x6d, 0x8c, 0x1e, 0x0c, 0x06, 0xbd, 0xd7, 0x3a, 0xad, 0x74, 0xeb, 0x93, 0x28, 0xb1, 0x6a, 0xb0, 0x3a, 0x78, 0x59, 0x5b, 0x1b, 0x77, 0xbc, 0x4e, 0x25, 0xe9, 0xf4, 0x3e, 0xd0, 0xba, 0x4b, 0x18, 0xe0, 0xec, 0xce, 0x8b, 0xdd, 0x39, 0x5b, 0xc6, 0xc4, 0xfa, 0xfa, 0x83, 0xfc, 0x47, 0x70, 0x44, 0x8b, 0x60, 0x12, 0xdc, 0x8a, 0x4b, 0xd8, 0x32, 0xd6, 0xbf, 0xb2, 0x42, 0x09, 0x41, 0x1f, 0x64, 0xa9, 0x8d, 0xfb, 0xd1, 0x9f, 0x37, 0x98, 0x63, 0xea, 0x92, 0x11, 0x9c, 0x94, 0xd1, 0xdb, 0xea, 0xe5, 0x6c, 0x9d, 0x29, 0xd8, 0xc6, 0x42, 0x6a, 0xcb, 0x0c, 0x4c, 0xf3, 0x7a, 0x60, 0x6b, 0x87, 0x2e, 0x37, 0x4e, 0xe7, 0x32, 0xff, 0xb9, 0x98, 0x87, 0x06, 0xd8, 0xe7, 0xd8, 0x97, 0xd3, 0x2b, 0xb0, 0x66, 0xa2, 0x4a, 0xeb, 0x2d, 0x23, 0x7e, 0x6b, 0x98, 0x69, 0x59, 0x0c, 0x5f, 0x57, 0x07, 0xd9, 0xb1, 0x6e, 0xd4, 0x80, 0xd9, 0xe4, 0xed, 0x03, 0x1c, 0xf6, 0x6b, 0xb1, 0xe0, 0x7f, 0x8d, 0x55, 0x14, 0xc8, 0x45, 0xad, 0xcb, 0xa2, 0xf7, 0x1d, 0x2a, 0xb2, 0x7d, 0xa5, 0x85, 0x0d, 0x6e, 0x11, 0xc5, 0x05, 0xa0, 0x6f, 0x0d, 0x42, 0xeb, 0xc6, 0x9d, 0x14, 0x30, 0x05, 0xf6, 0x07, 0x9a, 0x3a, 0x3e, 0xb8, 0x24, 0x04, 0xe7, 0xe8, 0x5c, 0x4b, 0x8c, 0xcf, 0x66, 0x2e, 0x1b, 0xb2, 0x43, 0x3d, 0x39, 0xb8, 0x54, 0xe9, 0xe2, 0xfa, 0x19, 0x38, 0x50, 0xd9, 0x3f, 0xbe, 0x1f, 0x94, 0xda, 0xc8, 0xae, 0x1a, 0xef, 0xda, 0xc8, 0x1c, 0x35, 0x5c, 0x84, 0x67, 0x1c, 0x90, 0x69, 0x71, 0x0f, 0xc7, 0xd6, 0x31, 0xf6, 0xd5, 0xa1, 0x34, 0x00, 0xc2, 0xff, 0xee, 0x9f, 0xc2, 0xa4, 0x4e, 0xd4, 0x67, 0x2b, 0x95, 0xac, 0x16, 0xb7, 0x67, 0x0b, 0xb8, 0xdb, 0x22, 0xa8, 0xb1, 0xb7, 0x70, 0x59, 0x16, 0x64, 0x18, 0x91, 0x1a, 0x93, 0x1a, 0x26, 0xca, 0x70, 0xfa, 0x58, 0xfb, 0xcd, 0x5c, 0x10, 0x80, 0x7c, 0xd1, 0x65, 0xa0, 0xfc, 0xf1, 0x64, 0xc7, 0x59, 0xaa, 0x11, 0x7b, 0x4d, 0xd7, 0xa9, 0x92, 0xab, 0x14, 0x2a, 0xa2, 0xfd, 0xd1, 0x15, 0xba, 0x6c, 0xa6, 0x73, 0x4f, 0xe1, 0xe6, 0x16, 0x79, 0x6a, 0x77, 0x21, 0x60, 0xdf, 0xe1, 0xcb, 0xf0, 0xc5, 0xa4, 0x5f, 0xd5, 0x72, 0xcf, 0x87, 0xa3, 0x72, 0xce, 0xcb, 0x54, 0x2a, 0x84, 0x55, 0xf8, 0xbb, 0x9a, 0xf7, 0xa8, 0x2a, 0x16, 0x6f, 0xbc, 0xbd, 0x2f, 0xe9, 0x3e, 0xa8, 0x5f, 0xc5, 0x9e, 0xe8, 0xbb, 0x9b, 0xa6, 0x70, 0x80, 0x7c, 0xb1, 0x83, 0xee, 0x7b, 0x18, 0x61, 0x59, 0x6c, 0xee, 0x25, 0x7d, 0xec, 0xed, 0xee, 0x12, 0xa2, 0xaf, 0x3d, 0xa0, 0xc4, 0x22, 0x9e, 0x95, 0xdc, 0x36, 0x8b, 0x95, 0xcc, 0xd8, 0x8d, 0x11, 0x0f, 0x24, 0xa4, 0x1b, 0x43, 0xd6, 0xe9, 0x78, 0xe4, 0x02, 0x72, 0xf7, 0x5b, 0x06, 0x76, 0x02, 0x37, 0xbc, 0xb1, 0x73, 0xba, 0xf4, 0x0a, 0xa9, 0x97, 0x21, 0x74, 0xda, 0xfa, 0x52, 0x12, 0xaa, 0xc9, 0x64, 0x9e, 0xfd, 0x29, 0x76, 0x0b, 0x0a, 0x45, 0x9e, 0x69, 0xb2, 0x4b, 0xda, 0x0a, 0x0f, 0xb6, 0x4a, 0xe3, 0x4f, 0xd3, 0x9c, 0x34, 0xc3, 0x7e, 0xc7, 0x6c, 0x33, 0x2d, 0xfc, 0x47, 0x75, 0x31, 0xd9, 0x39, 0x3d, 0x38, 0xe1, 0x0f, 0x37, 0x15, 0x29, 0xd4, 0x53, 0xc4, 0x53, 0xf1, 0x61, 0xa8, 0xc0, 0x99, 0xdd, 0x18, 0x02, 0x64, 0x0c, 0x1a, 0x90, 0x3a, 0x48, 0x6e, 0xbe, 0x73, 0x97, 0xcf, 0xec, 0x3c, 0x83, 0x75, 0xfd, 0x3d, 0x26, 0xde, 0x0b, 0x79, 0x85, 0xce, 0x58, 0x75, 0x1f, 0x95, 0x88, 0x9c, 0xc5, 0x90, 0x0e, 0xe2, 0xab, 0xf2, 0xe5, 0xa8, 0xc0, 0xc4, 0x80, 0xdf, 0x3b, 0x2b, 0x03, 0x71, 0x76, 0xea, 0xb3, 0xdc, 0x00, 0x27, 0xab, 0x20, 0xee, 0x72, 0xd2, 0xdc, 0x71, 0x03, 0x09, 0xb4, 0xae, 0x43, 0xa9, 0xf5, 0xc9, 0x8f, 0x2c, 0x7c, 0x43, 0x38, 0x2a, 0xd4, 0x87, 0xce, 0x88, 0x9e, 0xbf, 0x9e, 0xec, 0x36, 0xec, 0x79, 0x73, 0x93, 0x36, 0xb7, 0xa7, 0x6f, 0x80, 0x7c, 0xab, 0xa8, 0x40, 0x3a, 0xb9, 0xe7, 0x8e, 0x77, 0xcf, 0x7f, 0x7b, 0xd1, 0xa4, 0x98, 0xa3, 0x3f, 0xe1, 0x8c, 0x06, 0x99, 0x8e, 0x91, 0x13, 0x5b, 0xca, 0x99, 0x06, 0xa6, 0xc0, 0x76, 0x74, 0x87, 0xd6, 0x42, 0x24, 0x7c, 0x27, 0xfe, 0x21, 0x34, 0x34, 0x79, 0x0d, 0x97, 0xd6, 0x73, 0xb8, 0x06, 0x78, 0x03, 0xf2, 0xe4, 0x82, 0x36, 0x9d, 0x55, 0x18, 0xf9, 0x06, 0x45, 0x05, 0x39, 0x75, 0xad, 0xf2, 0x48, 0x02, 0x11, 0xdc, 0x83, 0xab, 0x4e, 0xc5, 0x32, 0xa4, 0x92, 0xa9, 0xaf, 0xee, 0xac, 0xb3, 0xcb, 0x2b, 0x86, 0xb1, 0x6d, 0xb1, 0xef, 0xc6, 0x7c, 0xdd, 0x9e, 0x5e, 0xff, 0xa9, 0x74, 0x67, 0x83, 0x81, 0x02, 0xbf, 0xbd, 0x53, 0x4b, 0xe8, 0x71, 0xe6, 0xcb, 0x03, 0x93, 0x6c, 0xb8, 0xfc, 0xab, 0x5a, 0x87, 0x02, 0x7e, 0x77, 0xb2, 0x3a, 0xea, 0x33, 0xb9, 0xb4, 0x12, 0x3b, 0x67, 0x9e, 0xbb, 0x4a, 0x56, 0xb7, 0xf6, 0x42, 0xb5, 0x07, 0x00, 0x7b, 0x49, 0xce, 0x66, 0x5b, 0xb2, 0xba, 0x6c, 0x27, 0xf0, 0x5c, 0xb0, 0x18, 0x25, 0xdd, 0x0b, 0xb2, 0x9c, 0xed, 0xb8, 0x51, 0x0b, 0xfd, 0xb8, 0x05, 0x15, 0xae, 0x74, 0x9f, 0x13, 0x89, 0xa5, 0x0c, 0x14, 0xf0, 0x71, 0xe2, 0x22, 0x54, 0xd6, 0x39, 0xc8, 0xa9, 0x4c, 0xbc, 0xd1, 0x17, 0xa6, 0x00, 0x51, 0xf3, 0x3a, 0x14, 0xea, 0xed, 0x41, 0x59, 0x48, 0x8b, 0x81, 0x93, 0xee, 0xd6, 0x29, 0x41, 0x35, 0x53, 0xfc, 0x2a, 0x91, 0x34, 0xb1, 0x39, 0x17, 0xd0, 0x9a, 0x8a, 0x3c, 0x51, 0x85, 0xc5, 0xe0, 0xac, 0xe0, 0xab, 0x8b, 0xd7, 0x20, 0xee, 0xf6, 0x36, 0x63, 0x46, 0xcd, 0x56, 0x53, 0xc1, 0xb3, 0xdd, 0x4e, 0x5b, 0x87, 0xc1, 0xc5, 0xce, 0xe5, 0xb9, 0xe2, 0xab, 0xf0, 0xf1, 0x6e, 0xaa, 0x4f, 0x02, 0xf1, 0x3e, 0x76, 0x21, 0x1b, 0x6d, 0x27, 0x96, 0x62, 0xdf, 0x38, 0x71, 0xed, 0x35, 0x96, 0x78, 0xb1, 0x9c, 0x8a, 0x63, 0xda, 0xa1, 0x3b, 0x4c, 0x6c, 0x47, 0x75, 0x61, 0x2a, 0x56, 0xa8, 0xdc, 0xb7, 0xf7, 0x34, 0x35, 0xfb, 0x7e, 0xe3, 0x95, 0xc8, 0x87, 0xb7, 0x8f, 0xbd, 0x44, 0xe7, 0x0b, 0x6b, 0x15, 0x24, 0x82, 0xb7, 0x59, 0x20, 0x71, 0x7f, 0x85, 0x51, 0x07, 0x81, 0x73, 0xf3, 0x21, 0x78, 0xfc, 0x4c, 0x79, 0x87, 0xc8, 0x33, 0x1a, 0xdb, 0x65, 0xd3, 0x18, 0x8d, 0x97, 0xad, 0x7d, 0xc5, 0xef, 0xdc, 0x86, 0x25, 0x9f, 0x9d, 0x10, 0x65, 0x8d, 0x0e, 0x4d, 0x3a, 0xa6, 0x36, 0xbb, 0x7d, 0x75, 0x46, 0x57, 0x89, 0xf4, 0x1e, 0x0e, 0xe5, 0xa2, 0x13, 0x74, 0x23, 0xd5, 0xf0, 0xb8, 0x07, 0x52, 0x3a, 0xd8, 0xec, 0x1b, 0xb9, 0x11, 0x64, 0x88, 0x33, 0x9a, 0x1f, 0x99, 0x7b, 0x91, 0x0e, 0x8b, 0xab, 0x36, 0xc7, 0xa9, 0xad, 0x57, 0x2c, 0x65, 0x00, 0x0b, 0x47, 0xa7, 0xb8, 0xa3, 0x79, 0x65, 0xc7, 0xde, 0xd4, 0x74, 0x7c, 0x5c, 0xc5, 0x9e, 0x49, 0x55, 0xf6, 0xf4, 0xc9, 0x8b, 0x72, 0x65, 0x01, 0x7d, 0x0b, 0x90, 0xe7, 0xde, 0xf9, 0xd7, 0x20, 0x45, 0xc3, 0xb5, 0x0e, 0x26, 0x63, 0x51, 0x0a, 0x01, 0xa5, 0x53, 0xee, 0xd9, 0xd0, 0xf6, 0xd7, 0xe8, 0x88, 0x5e, 0x29, 0x91, 0xf3, 0x2d, 0xd3, 0x96, 0x1b, 0x51, 0xd4, 0x8b, 0x93, 0x1f, 0xfe, 0x8b, 0x5e, 0xa6, 0xf9, 0x29, 0x0c, 0x3d, 0x8c, 0xa9, 0x26, 0x5f, 0x18, 0x71, 0xcc, 0xb9, 0x65, 0xba, 0x9d, 0x80, 0xa1, 0x8b, 0xd7, 0x08, 0xa6, 0xe8, 0xbf, 0x93, 0x7c, 0x47, 0x44, 0x67, 0x1f, 0x43, 0xdf, 0x23, 0x82, 0x94, 0xbd, 0x52, 0xd3, 0x3f, 0x20, 0x41, 0x01, 0x0a, 0x03, 0x0e, 0x7c, 0x33, 0xfd, 0x02, 0x3c, 0x61, 0x67, 0x20, 0x04, 0xdb, 0xc1, 0xfe, 0xe8, 0xf8, 0x52, 0xd4, 0x0d, 0xd7, 0x0f, 0xd3, 0xb0, 0x4f, 0xbe, 0xb8, 0x69, 0x29, 0x5b, 0xa0, 0xb1, 0x8d, 0xbb, 0x1e, 0xa3, 0xbb, 0x6f, 0x8b, 0xff, 0xfc, 0xeb, 0x9d, 0x74, 0xd7, 0xe8, 0x3b, 0x1f, 0x87, 0x06, 0x90, 0x4f, 0xad, 0xb6, 0x5f, 0x8b, 0x43, 0x57, 0x96, 0xd6, 0xd1, 0x9f, 0x25, 0x31, 0xe3, 0x3d, 0x10, 0x62, 0xba, 0xbc, 0xc3, 0xf4, 0x42, 0xab, 0xa7, 0x7f, 0x44, 0xfb, 0xf2, 0x29, 0xdd, 0xa8, 0xc3, 0x6d, 0x2f, 0x9c, 0x6e, 0x1b, 0x56, 0xd0, 0x14, 0xa0, 0x9d, 0xb4, 0x78, 0x88, 0xf2, 0xd1, 0x0d, 0x41, 0x98, 0xac, 0x54, 0x22, 0x1c, 0xee, 0x64, 0xab, 0x8a, 0xc3, 0xca, 0x0f, 0xe0, 0x80, 0x94, 0xef, 0xc3, 0x88, 0xa9, 0x69, 0x71, 0x70, 0x5c, 0x51, 0xf7, 0x61, 0x40, 0xbe, 0xa4, 0xbe, 0x3d, 0xc9, 0xbd, 0x07, 0xe3, 0x91, 0x72, 0xfe, 0xff, 0x83, 0x11, 0x08, 0x6c, 0xd8, 0x7a, 0xd5, 0x2c, 0x5e, 0xd3, 0x43, 0xb7, 0x7c, 0x7d, 0x80, 0x93, 0x70, 0x46, 0x6f, 0x25, 0xdc, 0xe0, 0x4e, 0xc7, 0x81, 0x92, 0x95, 0x1b, 0x4a, 0x2d, 0x21, 0x9e, 0x8c, 0x42, 0x91, 0x80, 0x8c, 0x92, 0xf1, 0xb3, 0x42, 0xc6, 0x96, 0x42, 0x5c, 0x60, 0x48, 0xe4, 0x86, 0xf2, 0xa7, 0xd1, 0xe9, 0x8d, 0xc7, 0xd4, 0xf1, 0x7d, 0x1e, 0xa1, 0x54, 0x33, 0xa0, 0x6a, 0x50, 0x83, 0x28, 0xad, 0x34, 0x10, 0x1a, 0x50, 0x21, 0x04, 0x46, 0xef, 0x12, 0x04, 0x10, 0x75, 0x1a, 0x63, 0xce, 0xe9, 0xed, 0x95, 0x72, 0x8b, 0xa2, 0xe7, 0x69, 0x20, 0xb7, 0x6e, 0xc3, 0x8a, 0x56, 0x3d, 0x93, 0x9b, 0xd6, 0xdb, 0x99, 0x2b, 0x85, 0xf5, 0x1e, 0x68, 0xa5, 0x4f, 0x20, 0x6e, 0xb4, 0x00, 0xaf, 0x18, 0xf1, 0xdf, 0x97, 0x15, 0x1b, 0x39, 0x3f, 0x3e, 0x7c, 0xc5, 0xd1, 0x26, 0x26, 0xd9, 0x9b, 0xf3, 0x7d, 0xdd, 0xb6, 0x6d, 0xf5, 0x01, 0xe5, 0x55, 0x1d, 0x2b, 0xbf, 0xf8, 0xdd, 0x33, 0x11, 0x04, 0xfb, 0x53, 0x7e, 0x99, 0xe4, 0xd9, 0x68, 0xa3, 0xaa, 0x1f, 0x14, 0x68, 0x49, 0xbd, 0x08, 0x5d, 0x2e, 0xfd, 0xb8, 0x3e, 0xfa, 0x90, 0x62, 0x5d, 0x83, 0x7f, 0x37, 0x3b, 0x1b, 0x64, 0xbb, 0x55, 0x16, 0xd9, 0x6e, 0x40, 0x86, 0x31, 0xac, 0xf8, 0x49, 0x66, 0xd2, 0x76, 0x46, 0x53, 0xa2, 0x80, 0xf3, 0x23, 0xe9, 0xc5, 0x1b, 0x0a, 0x5e, 0x29, 0xde, 0x33, 0xce, 0x5e, 0xf9, 0xf9, 0x76, 0xb4, 0x47, 0x59, 0xb1, 0x32, 0x88, 0xa7, 0xd3, 0xe5, 0x62, 0x81, 0x54, 0x78, 0xa5, 0x02, 0x31, 0x05, 0xd3, 0x37, 0x8f, 0x2b, 0xe0, 0xd7, 0xa1, 0x61, 0x36, 0x2e, 0xcd, 0x89, 0xfc, 0x5b, 0x0a, 0xc9, 0x98, 0xbb, 0x8d, 0x96, 0x72, 0xa5, 0xa4, 0x11, 0xfb, 0x58, 0xe2, 0x97, 0xef, 0x31, 0x7c, 0x93, 0xd7, 0x22, 0xf3, 0x97, 0xd1, 0x5f, 0xf3, 0xac, 0x93, 0x5a, 0x7c, 0xe6, 0xae, 0xf2, 0x3f, 0x3b, 0x10, 0xe7, 0x4b, 0x94, 0xcd, 0x92, 0xe8, 0x25, 0x1f, 0xd3, 0xc3, 0xfa, 0xab, 0x4a, 0x4c, 0xd3, 0x05, 0xca, 0x5d, 0x32, 0x77, 0x0a, 0x1c, 0xb2, 0xfe, 0x9e, 0x22, 0x9a, 0x96, 0x26, 0xdd, 0xb2, 0xb7, 0xc6, 0x32, 0x56, 0x20, 0xd6, 0x67, 0xc8, 0xd3, 0xda, 0x41, 0xcb, 0x61, 0xb4, 0x69, 0x6d, 0x67, 0x18, 0x14, 0x24, 0x59, 0x41, 0xe3, 0x1c, 0x7e, 0xe2, 0x08, 0xd0, 0x3c, 0x60, 0xab, 0xd8, 0x96, 0x3e, 0x8c, 0x01, 0xf3, 0xd9, 0xe9, 0xa3, 0x21, 0x55, 0xa2, 0x2f, 0x99, 0xd7, 0x9b, 0x08, 0x05 ],
-const [ 0xf9, 0xee, 0x55, 0xf8, 0x7a, 0xe8, 0x34, 0x3e, 0x45, 0xf0, 0x1f, 0xb2, 0x85, 0x95, 0x3c, 0x75, 0x2c, 0x15, 0xa1, 0xd8, 0x92, 0x73, 0x14, 0x14, 0x5e, 0xcb, 0x14, 0x3c, 0xaa, 0xe3, 0x1e, 0x6f, 0x62, 0x02, 0x29, 0x52, 0xed, 0x05, 0x73, 0xbd, 0x10, 0xaf, 0x7f, 0xb5, 0x0f, 0x41, 0x5e, 0x9b, 0x15, 0x4a, 0x2f, 0xa2, 0xd5, 0xc1, 0xe2, 0x87, 0x72, 0x51, 0x41, 0x7c, 0x9c, 0xf4, 0x30, 0x65, 0xfd, 0xc3, 0x33, 0x46, 0xd3, 0x0d, 0x32, 0xfc, 0xde, 0xa6, 0x79, 0x2c, 0x7c, 0x81, 0x03, 0x7a, 0x13, 0x81, 0xf8, 0xfb, 0xaf, 0x8d, 0x74, 0xec, 0xec, 0xe3, 0x8a, 0xa4, 0x17, 0xae, 0x89, 0xc7, 0x90, 0xda, 0x7d, 0xbd, 0x72, 0x27, 0xf9, 0x62, 0x76, 0x7c, 0x14, 0xff, 0x15, 0x7f, 0xb2, 0x7a, 0xed, 0x62, 0x05, 0xc9, 0x66, 0xff, 0x53, 0xac, 0x95, 0x28, 0xf9, 0x9c, 0x61, 0x38, 0xb0, 0xfe, 0xe4, 0xee, 0x0f, 0x9d, 0x14, 0x7c, 0x51, 0x57, 0xa2, 0xda, 0x59, 0x17, 0x22, 0x60, 0xf3, 0x03, 0x6d, 0x94, 0x5d, 0xf6, 0x43, 0x41, 0x06, 0x30, 0x35, 0xc9, 0x95, 0x4c, 0xc2, 0xbb, 0x2d, 0x73, 0xc1, 0xa8, 0xef, 0xd0, 0xff, 0x33, 0xc1, 0x43, 0x28, 0x68, 0x4e, 0x5a, 0xeb, 0x4f, 0x4e, 0x7d, 0x59, 0xc0, 0x08, 0x68, 0x8e, 0x78, 0x15, 0xdf, 0x94, 0x6d, 0x66, 0x9c, 0x84, 0x5f, 0x89, 0x8d, 0xee, 0xb0, 0x27, 0x3c, 0x7b, 0x75, 0xd2, 0x8f, 0xd1, 0xcd, 0xfd, 0xb1, 0xb7, 0x72, 0x4c, 0x50, 0x7a, 0x8d, 0x0f, 0x09, 0x8f, 0xcf, 0x09, 0x20, 0x79, 0xbd, 0x75, 0x75, 0xee, 0x4b, 0x4b, 0xb3, 0x35, 0xad, 0xbf, 0xcb, 0xd2, 0x6a, 0x0a, 0xa1, 0x65, 0xb2, 0x6e, 0x04, 0xd0, 0xf1, 0x74, 0xe4, 0x98, 0xa4, 0x79, 0xbf, 0x8e, 0x6c, 0x68, 0x5d, 0xae, 0x60, 0xc9, 0xbd, 0x47, 0xa8, 0xfb, 0x4f, 0x5c, 0x48, 0xbd, 0x64, 0x4a, 0x39, 0xf4, 0xe2, 0xac, 0xbe, 0xa8, 0x3c, 0x7c, 0xf5, 0x4f, 0xa1, 0x7b, 0xac, 0x4e, 0x74, 0xd2, 0x77, 0xbd, 0xfd, 0xf9, 0xff, 0x6a, 0x5e, 0xd8, 0x9d, 0x21, 0xc8, 0x2c, 0x28, 0x2b, 0xee, 0x2d, 0x0b, 0x15, 0xba, 0x6e, 0x9a, 0xb3, 0x3f, 0x04, 0xa6, 0x63, 0xf0, 0xea, 0x4e, 0x96, 0x0f, 0xa4, 0x19, 0x8d, 0x68, 0x23, 0x42, 0x61, 0x3e, 0xe9, 0x53, 0x46, 0x86, 0x6d, 0xf5, 0x10, 0x53, 0xc1, 0x07, 0xf7, 0x92, 0x72, 0xed, 0x97, 0xf7, 0xb0, 0x2b, 0x3b, 0x37, 0xae, 0x32, 0x5a, 0x78, 0x4c, 0x79, 0x62, 0x05, 0xf4, 0xd0, 0xb5, 0x47, 0xc1, 0xf2, 0xf1, 0xf1, 0xe7, 0x59, 0x75, 0x7a, 0x4f, 0x56, 0x21, 0xd0, 0x81, 0x60, 0x5c, 0x4b, 0xc7, 0xad, 0x5c, 0xdf, 0x8f, 0xff, 0xa2, 0x97, 0x12, 0xc1, 0xc3, 0x3e, 0x33, 0x52, 0x6e, 0x5f, 0xaa, 0xa1, 0xab, 0x71, 0x61, 0xfa, 0x61, 0x4b, 0x1e, 0x1f, 0x1b, 0xde, 0x63, 0x9b, 0x0b, 0x22, 0x93, 0x53, 0x50, 0x51, 0x55, 0x5e, 0x74, 0x54, 0x3d, 0x16, 0x39, 0x7a, 0xaa, 0x6f, 0x95, 0x70, 0xea, 0x88, 0xfb, 0x6e, 0xa5, 0x80, 0xdc, 0xae, 0x78, 0x8b, 0x6e, 0x22, 0xe0, 0x45, 0xac, 0x66, 0x5a, 0x46, 0x9e, 0xf4, 0xc8, 0xf6, 0xda, 0x97, 0x17, 0xa2, 0x4b, 0x22, 0x1f, 0xd0, 0x31, 0x61, 0xca, 0xd0, 0x69, 0x50, 0x79, 0x94, 0xef, 0x8b, 0xa3, 0xc2, 0xa1, 0x06, 0xbf, 0x06, 0x45, 0xfe, 0x65, 0xad, 0xce, 0x2f, 0xb0, 0x70, 0xdb, 0x48, 0xe6, 0x8d, 0x81, 0x9c, 0x5b, 0x1d, 0x4a, 0x1a, 0x92, 0xa1, 0x7d, 0x7f, 0xa6, 0xde, 0xa0, 0xca, 0xe8, 0xeb, 0x3c, 0xf0, 0xca, 0x88, 0xe0, 0xd2, 0xfc, 0xb1, 0x68, 0x6c, 0xd4, 0x73, 0x7f, 0x4f, 0xf3, 0xff, 0x63, 0x51, 0x26, 0xfd, 0xe9, 0x83, 0x8a, 0x22, 0xc0, 0x63, 0xf4, 0x05, 0xf9, 0x53, 0x8f, 0x2e, 0xc7, 0x4a, 0xc7, 0x70, 0x84, 0xca, 0x66, 0x7a, 0xf5, 0x12, 0xfd, 0xa8, 0xcf, 0x94, 0x86, 0x1f, 0x7a, 0xa9, 0x47, 0x18, 0x14, 0x84, 0xfa, 0x7c, 0xb9, 0x64, 0x2a, 0xb2, 0x02, 0x0e, 0xe0, 0xb4, 0xcb, 0x7b, 0x7f, 0x69, 0x3a, 0xce, 0xed, 0x2f, 0xfd, 0x89, 0xf3, 0xb6, 0xd2, 0xff, 0xe7, 0x15, 0x4d, 0x0d, 0x88, 0x17, 0xd6, 0x05, 0x29, 0xd6, 0xf1, 0xeb, 0x12, 0x8c, 0xc2, 0xe4, 0x23, 0xa5, 0xd0, 0xeb, 0xba, 0x19, 0x09, 0xc6, 0xd7, 0xf8, 0x06, 0x38, 0x7e, 0x47, 0x91, 0x79, 0x5d, 0x0a, 0x64, 0xe3, 0xaf, 0xa2, 0x34, 0xee, 0x60, 0x59, 0xee, 0x5e, 0x72, 0x3c, 0x41, 0xbb, 0x9f, 0x29, 0x5c, 0x02, 0x40, 0x28, 0xf9, 0x9a, 0x6d, 0xfe, 0x9a, 0x89, 0x66, 0x00, 0x12, 0xe8, 0x31, 0x26, 0x48, 0x94, 0x85, 0x60, 0x38, 0x27, 0xe7, 0x2d, 0x3a, 0x27, 0x13, 0x69, 0x87, 0x7d, 0x9d, 0x66, 0xf9, 0x28, 0xd8, 0x3f, 0x12, 0x32, 0xf7, 0x69, 0x40, 0xe3, 0x72, 0x8b, 0x5f, 0x36, 0xac, 0x90, 0x80, 0x89, 0xd2, 0xfa, 0xe9, 0x98, 0x06, 0x79, 0x5d, 0xac, 0xbd, 0xbc, 0x9d, 0x10, 0x65, 0x87, 0x2e, 0xc5, 0x4c, 0x06, 0x5d, 0x76, 0xbd, 0x61, 0x81, 0xae, 0x6c, 0x90, 0x80, 0x49, 0x13, 0x71, 0x94, 0x29, 0x5e, 0x17, 0x4f, 0x2a, 0x05, 0x65, 0xdd, 0x57, 0x37, 0xdc, 0x8a, 0x5e, 0x3f, 0xb2, 0x83, 0x41, 0x62, 0x24, 0xe1, 0x4f, 0x06, 0x0d, 0xe3, 0x53, 0x1a, 0xb6, 0x7b, 0x0b, 0xb1, 0xf0, 0x0d, 0xdb, 0xf0, 0x60, 0x73, 0xc3, 0x2b, 0x1b, 0x44, 0x8f, 0x4b, 0x73, 0x56, 0x4d, 0x73, 0x10, 0x81, 0x04, 0xe3, 0x42, 0xa6, 0xa3, 0x1c, 0x95, 0xf0, 0x38, 0x44, 0xa6, 0x5a, 0x62, 0xcd, 0x36, 0x72, 0x09, 0x52, 0x7d, 0x5c, 0x4c, 0xc1, 0xc0, 0x19, 0xbb, 0xbf, 0x26, 0x0a, 0xc7, 0x48, 0xc8, 0xaf, 0x76, 0x96, 0x07, 0xb5, 0x5c, 0x45, 0x22, 0x30, 0xc6, 0xb4, 0x08, 0x25, 0x38, 0xae, 0x6a, 0x4b, 0x1a, 0x4a, 0x15, 0x12, 0xae, 0x0f, 0x7f, 0xe5, 0x45, 0x5c, 0x9f, 0xac, 0xb3, 0x07, 0x02, 0x96, 0x00, 0x45, 0x1c, 0x15, 0x60, 0xca, 0xdc, 0x2a, 0x65, 0x31, 0x83, 0xe2, 0x74, 0x9d, 0xb5, 0x21, 0x76, 0xa1, 0xd0, 0x9e, 0xcf, 0x5d, 0x7e, 0x2f, 0x94, 0xea, 0x86, 0x47, 0xf8, 0xf9, 0xe8, 0xbc, 0x08, 0xb6, 0x28, 0xce, 0x99, 0xf3, 0xea, 0x66, 0x7e, 0x82, 0xbf, 0x9b, 0xfe, 0xe2, 0x3f, 0x7a, 0x85, 0x1f, 0x58, 0x07, 0x99, 0xf3, 0xe5, 0x7f, 0x10, 0x31, 0x82, 0xe0, 0x80, 0x63, 0x9f, 0xab, 0xf8, 0xb2, 0xd4, 0xe9, 0xed, 0x07, 0x74, 0x6c, 0x77, 0x70, 0x65, 0x57, 0xbe, 0xc5, 0x2f, 0xe1, 0xae, 0x8b, 0x52, 0x55, 0xf3, 0x18, 0xdd, 0x5d, 0x21, 0xf8, 0x3c, 0x81, 0x32, 0x90, 0x52, 0xeb, 0x36, 0x01, 0xc8, 0x6d, 0x46, 0x50, 0xa4, 0xc5, 0xba, 0xc3, 0x1d, 0x1f, 0x9c, 0x8e, 0xad, 0xdb, 0x5c, 0xae, 0x69, 0x91, 0xc4, 0x16, 0x8e, 0x52, 0x2f, 0x09, 0x5c, 0x31, 0xf6, 0xc7, 0x27, 0x02, 0x2c, 0x6b, 0xab, 0x62, 0x8b, 0x14, 0xa0, 0xf8, 0xad, 0x43, 0x8e, 0xfa, 0x80, 0x84, 0xe3, 0xf2, 0xf4, 0x51, 0x43, 0xc2, 0xf6, 0x33, 0x1f, 0xe5, 0xa2, 0x2a, 0x89, 0xf9, 0xb4, 0x4f, 0x46, 0x7a, 0x40, 0xb8, 0x25, 0xd1, 0xa4, 0x9c, 0x90, 0x8d, 0xba, 0xb7, 0x61, 0xf0, 0x52, 0xf0, 0xf7, 0xad, 0xdf, 0x3a, 0x88, 0xf0, 0x70, 0xb8, 0xb8, 0x9f, 0xe2, 0x24, 0x6b, 0xdf, 0x54, 0x71, 0xd8, 0xdb, 0xdc, 0xaf, 0xe0, 0xc1, 0x78, 0x30, 0x9d, 0x0c, 0x48, 0xe9, 0x3d, 0x09, 0xfa, 0x1a, 0x11, 0x94, 0x85, 0x32, 0xe1, 0x23, 0x1a, 0xed, 0x83, 0x07, 0x57, 0xbf, 0xab, 0xee, 0xbf, 0x75, 0x05, 0xab, 0x67, 0x1a, 0x81, 0x3a, 0xf1, 0x17, 0xef, 0xfe, 0xbe, 0x9f, 0xcb, 0x4e, 0x60, 0x4a, 0x5a, 0x30, 0x4e, 0x00, 0xf6, 0x64, 0xdc, 0x19, 0xa5, 0xa5, 0x6a, 0xc2, 0xf1, 0x2b, 0xdb, 0xa3, 0xf4, 0x74, 0x49, 0xbf, 0xb3, 0x44, 0xf6, 0x9b, 0xad, 0xeb, 0x86, 0xa2, 0xb3, 0xc6, 0x6c, 0xc8, 0xf9, 0x08, 0xa3, 0x6e, 0x6e, 0xba, 0x9e, 0x85, 0x49, 0x01, 0x81, 0xf7, 0xe4, 0xa0, 0x91, 0x42, 0xce, 0xbd, 0xe9, 0x66, 0x1c, 0xe8, 0x70, 0x02, 0xff, 0x59, 0x07, 0xba, 0x9c, 0x79, 0x07, 0xdb, 0x17, 0xa5, 0xea, 0x42, 0xf1, 0x2e, 0x48, 0x7a, 0x95, 0xa4, 0x06, 0x24, 0x2d, 0x54, 0xca, 0x9c, 0xba, 0x0f, 0xb1, 0xd9, 0x64, 0x2d, 0x45, 0x95, 0x0e, 0xd2, 0xa9, 0xae, 0x2e, 0x70, 0x17, 0xcd, 0xdc, 0x8d, 0x8d, 0x45, 0x29, 0xc7, 0xc2, 0x3e, 0xb1, 0x15, 0x5f, 0x12, 0x74, 0x4f, 0x6c, 0xf7, 0xe1, 0xf1, 0x08, 0xdf, 0x34, 0x1c, 0x5e, 0x9c, 0x02, 0xdd, 0xd4, 0x48, 0x12, 0xb2, 0x85, 0xe4, 0x6f, 0x4a, 0xf2, 0x3f, 0xbb, 0x8d, 0xf4, 0x19, 0xc6, 0xdc, 0xf6, 0x89, 0x60, 0x9a, 0x60, 0x9c, 0x6b, 0xeb, 0x56, 0x3f, 0x34, 0xbb, 0xa3, 0x5f, 0x03, 0x03, 0xf0, 0x4e, 0xf0, 0x47, 0x3a, 0x69, 0xf9, 0x64, 0x83, 0xf8, 0x52, 0x88, 0xc7, 0x55, 0xfc, 0x82, 0x31, 0x51, 0x99, 0x3c, 0x8f, 0xd3, 0x7f, 0x85, 0x04, 0xc2, 0x0b, 0x14, 0xfc, 0x25, 0x37, 0xca, 0x65, 0x89, 0x6f, 0x38, 0x1d, 0xa3, 0xa1, 0x61, 0xa6, 0x37, 0x94, 0xc1, 0x21, 0x39, 0x7a, 0x8e, 0x7a, 0x31, 0xc8, 0x3d, 0xe0, 0xe4, 0x45, 0x48, 0x78, 0x30, 0x61, 0x2f, 0x52, 0x38, 0xc9, 0xbd, 0x9c, 0xc1, 0x38, 0x8c, 0x15, 0xdc, 0x90, 0xcb, 0xc5, 0xc6, 0x29, 0x3f, 0xec, 0x0c, 0x69, 0x88, 0x38, 0xf2, 0x95, 0xa6, 0x3a, 0x16, 0xe6, 0xbb, 0x1b, 0x51, 0xe0, 0x12, 0x8b, 0xde, 0xdf, 0x61, 0xfb, 0xbe, 0xf3, 0x4b, 0x0c, 0x5a, 0xed, 0x29, 0x47, 0x6b, 0xba, 0x0a, 0x0e, 0x17, 0xf0, 0xf8, 0xd2, 0x5c, 0xa7, 0x7e, 0x87, 0xb2, 0x8a, 0x67, 0x55, 0xec, 0x2e, 0xc7, 0x91, 0x60, 0xa2, 0x40, 0xeb, 0x47, 0x47, 0x7e, 0xe9, 0x67, 0xe1, 0x04, 0x94, 0xef, 0xef, 0x2b, 0x71, 0xa2, 0x38, 0x67, 0xb2, 0x37, 0xa7, 0xcd, 0xae, 0x00, 0x58, 0xd2, 0x8f, 0xcb, 0xf3, 0x56, 0x4a, 0x06, 0x39, 0xe1, 0xd5, 0x26, 0xdc, 0x2c, 0x94, 0x49, 0x94, 0xe3, 0x14, 0x19, 0x6f, 0xa9, 0xfb, 0xf4, 0x69, 0x5d, 0x3f, 0x4b, 0x3c, 0x9b, 0x97, 0x48, 0x79, 0x86, 0x2f, 0xb4, 0xd8, 0xc5, 0xa0, 0x17, 0xcc, 0xcc, 0x1f, 0x21, 0x5b, 0x5d, 0xf4, 0x48, 0x2d, 0x4e, 0x2f, 0xb3, 0xe3, 0x8c, 0x96, 0x57, 0xaa, 0x60, 0xe1, 0x60, 0x0f, 0xf1, 0x2a, 0xd2, 0x15, 0x0b, 0x9f, 0x70, 0x84, 0x1e, 0x7a, 0xdd, 0x85, 0x8a, 0x33, 0x01, 0x6c, 0x19, 0xf3, 0xae, 0xd5, 0xcd, 0x4d, 0x83, 0xf2, 0xdd, 0x29, 0x11, 0x23, 0xfa, 0x00, 0x3d, 0xc7, 0xd6, 0x4f, 0xe5, 0x53, 0xe7, 0x45, 0xc7, 0xa1, 0x69, 0xbf, 0x9e, 0x8a, 0xa2, 0x77, 0x8d, 0xb6, 0x69, 0x78, 0xc1, 0xb3, 0xe9, 0xd6, 0x53, 0x45, 0xa3, 0x9b, 0x6b, 0xfd, 0xb2, 0x04, 0xab, 0x0d, 0x53, 0xee, 0xcb, 0x5b, 0xa4, 0x8b, 0x80, 0xd4, 0xac, 0x59, 0xa3, 0x03, 0x9c, 0x55, 0x8f, 0xe2, 0x54, 0x6c, 0xcb, 0xf0, 0x29, 0x32, 0xe9, 0x83, 0xe6, 0xd6, 0xad, 0x60, 0x10, 0x56, 0x72, 0x89, 0x6f, 0xef, 0xca, 0x56, 0xc9, 0xd8, 0x65, 0xc7, 0xf1, 0x2f, 0x34, 0x19, 0x01, 0x34, 0xcd, 0x97, 0xe3, 0xb5, 0x12, 0xb3, 0x16, 0xc9, 0x0d, 0x55, 0xae, 0xc1, 0x1f, 0x73, 0x9d, 0x5c, 0x5a, 0xe2, 0x32, 0x3a, 0x2b, 0x6c, 0xdf, 0x93, 0x3c, 0x22, 0x3f, 0x29, 0x98, 0xf3, 0x57, 0x7b, 0x11, 0x7e, 0x1d, 0x3c, 0xdf, 0x25, 0x36, 0x03, 0x89, 0x63, 0x04, 0x44, 0x09, 0x5f, 0xe0, 0x7f, 0x2b, 0xc1, 0xa4, 0xb7, 0x36, 0xc4, 0x6d, 0x26, 0xce, 0x8c, 0x9f, 0x2f, 0x19, 0xbb, 0x29, 0x94, 0x21, 0x3f, 0x0a, 0xe9, 0x79, 0x6d, 0x14, 0x49, 0x24, 0x54, 0xef, 0x47, 0xb2, 0x4b, 0x62, 0x27, 0xac, 0xcd, 0xce, 0x4f, 0x32, 0x87, 0xfb, 0xf8, 0xe3, 0xae, 0x17, 0x29, 0xfd, 0x96, 0xfc, 0xe6, 0xc5, 0x81, 0xb2, 0xa5, 0x2a, 0xb5, 0x35, 0x01, 0xa5, 0xd1, 0x78, 0xb2, 0x63, 0x60, 0xa9, 0xbd, 0xa6, 0xaf, 0xb7, 0xe8, 0x69, 0xdc, 0x12, 0x71, 0x43, 0x30, 0xb2, 0xff, 0x8d, 0xae, 0x5a, 0xd9, 0xc7, 0xec, 0x1e, 0x56, 0x38, 0x22, 0x23, 0x95, 0xd5, 0x81, 0xa6, 0x6d, 0x64, 0xc6, 0x3f, 0xa7, 0xe1, 0x0e, 0x67, 0x6b, 0x21, 0xec, 0x39, 0xf9, 0xb5, 0xb9, 0x75, 0x9a, 0x11, 0x2b, 0xca, 0xd5, 0xee, 0x29, 0x55, 0xe5, 0xec, 0xde, 0x65, 0x6b, 0x7c, 0x0d, 0x81, 0x61, 0xfd, 0xa4, 0xac, 0x4f, 0x25, 0x93, 0xe7, 0xc1, 0xa3, 0xde, 0xf8, 0xf8, 0x02, 0xf1, 0x6a, 0xe0, 0xd1, 0x35, 0xd5, 0x42, 0x01, 0xe0, 0x5f, 0x3b, 0x8e, 0x11, 0x83, 0xed, 0x62, 0x1c, 0x11, 0x74, 0x76, 0x22, 0x76, 0x1b, 0x3a, 0xe6, 0x3e, 0xd0, 0x37, 0xdb, 0xd7, 0xd6, 0xf2, 0x82, 0x98, 0xba, 0x14, 0xf2, 0x01, 0x88, 0xc9, 0xb8, 0x45, 0x3e, 0x66, 0xe2, 0x05, 0x81, 0x4e, 0x57, 0x5f, 0x8f, 0x16, 0x6a, 0x27, 0x75, 0xe7, 0xae, 0x74, 0x82, 0x24, 0x0b, 0x5f, 0xfb, 0x4d, 0x11, 0x07, 0x10, 0x24, 0x8d, 0xd9, 0x0f, 0x0e, 0x5a, 0x0e, 0xd8, 0xbb, 0x7a, 0x74, 0x91, 0x09, 0x65, 0x72, 0x9b, 0x26, 0xa1, 0x46, 0xc4, 0xf5, 0x93, 0x92, 0xbe, 0xb4, 0x95, 0x17, 0xd0, 0xdb, 0x49, 0xc0, 0xcb, 0x47, 0x2c, 0xe2, 0x40, 0x97, 0x6e, 0xc2, 0xf0, 0xd7, 0x01, 0x58, 0x84, 0x5c, 0xf0, 0x52, 0x7e, 0xee, 0xf2, 0x5c, 0x70, 0x2d, 0x3f, 0x9f, 0x6b, 0x2d, 0xa2, 0x87, 0xbb, 0x64, 0xcf, 0xca, 0xd1, 0xc6, 0xf8, 0xa6, 0x81, 0x2e, 0x9b, 0x6a, 0x6e, 0x00, 0x9e, 0x37, 0xc2, 0x0c, 0x9d, 0x08, 0x22, 0xb6, 0x83, 0xf0, 0xe1, 0x54, 0x57, 0xa3, 0x73, 0xd8, 0x59, 0x38, 0x25, 0xaf, 0x4e, 0x2d, 0x0c, 0xe9, 0x18, 0xac, 0x3b, 0x99, 0x89, 0x0c, 0x39, 0x7f, 0x79, 0x9b, 0xb3, 0xe4, 0x16, 0x9b, 0x6d, 0xc6, 0x7c, 0x8a, 0x7e, 0x35, 0x86, 0xa7, 0xbd, 0xfd, 0xe3, 0xb1, 0x77, 0x85, 0x6c, 0xf2, 0x63, 0xf7, 0xb4, 0x7c, 0xd7, 0xa1, 0xe1, 0xb3, 0x3b, 0x9c, 0xbb, 0x0b, 0xbf, 0xab, 0x03, 0x13, 0x49, 0x65, 0x06, 0xb3, 0xb1, 0x97, 0x72, 0xb1, 0x31, 0xe4, 0x67, 0x7a, 0x17, 0xae, 0xd1, 0x20, 0xbd, 0x3a, 0xf6, 0x9f, 0xbb, 0x0e, 0x4b, 0x64, 0x5b, 0x9e, 0x8c, 0x10, 0x4e, 0x28, 0x0b, 0x79, 0x9d, 0xdd, 0x49, 0xf1, 0xe2, 0x41, 0xc3, 0xcc, 0xb7, 0xd4, 0x0e, 0x1c, 0x6f, 0xf2, 0x26, 0xbf, 0x04, 0xf8, 0x04, 0x9c, 0x51, 0xa8, 0x6e, 0x29, 0x81, 0xcf, 0x13, 0x31, 0xc8, 0x24, 0xd7, 0xd4, 0x51, 0x74, 0x6c, 0xcf, 0x77, 0xfc, 0x22, 0xfd, 0x37, 0x17, 0x00, 0x1e, 0xe5, 0x19, 0x13, 0xd8, 0x1f, 0x7a, 0x06, 0xfb, 0x00, 0x37, 0xf3, 0x09, 0x95, 0x75, 0x79, 0xf6, 0x95, 0x67, 0x0f, 0x2c, 0x4c, 0x73, 0x97, 0xd2, 0xd9, 0x90, 0x37, 0x4e, 0x99, 0xf3, 0x64, 0x08, 0xe3, 0xea, 0x3f, 0x71, 0xf6, 0x08, 0x25, 0x45, 0x2f, 0x82, 0x81, 0x0d, 0x80, 0xd9, 0xe5, 0xe7, 0x1d, 0xb9, 0x5a, 0x89, 0x78, 0x22, 0xf4, 0x84, 0x70, 0xc5, 0xa9, 0xc6, 0xc5, 0xb1, 0x62, 0x63, 0xd0, 0x2e, 0x53, 0x95, 0x71, 0xe9, 0x88, 0x01, 0x48, 0x52, 0xc1, 0x3b, 0x28, 0x43, 0x80, 0x8d, 0xc8, 0xe2, 0x60, 0xf4, 0xbc, 0xc8, 0xa8, 0x6c, 0xa4, 0x63, 0x20, 0x6d, 0xa4, 0x98, 0x24, 0xb6, 0x14, 0xad, 0xf6, 0x49, 0x78, 0x67, 0x59, 0xb7, 0xb2, 0x6f, 0x5b, 0x9d, 0x76, 0xfa, 0x72, 0x6f, 0xff, 0xa9, 0xca, 0x74, 0x00, 0xae, 0xde, 0x12, 0xde, 0x31, 0x46, 0x4c, 0x1c, 0xf2, 0xcf, 0x89, 0x17, 0x2f, 0xd1, 0x97, 0xf3, 0xc8, 0xbd, 0xef, 0xd5, 0xa1, 0xf6, 0x3b, 0x52, 0x48, 0xe2, 0x15, 0x28, 0xd8, 0x40, 0x12, 0x2c, 0x1d, 0xbc, 0xff, 0x84, 0xf8, 0xc0, 0x6a, 0x16, 0x05, 0x8e, 0x65, 0x40, 0x7c, 0x8c, 0x86, 0xca, 0x55, 0xde, 0x32, 0x19, 0xb0, 0x3a, 0x1b, 0xa5, 0x73, 0xf8, 0x08, 0xad, 0x35, 0x69, 0xd5, 0x29, 0x5b, 0x6a, 0xba, 0x00, 0x80, 0x39, 0xd0, 0x7b, 0x1b, 0x87, 0xd0, 0xf9, 0x5b, 0xce, 0x1e, 0xe5, 0x56, 0xe4, 0x07, 0xe6, 0x63, 0xd1, 0x47, 0x55, 0xc4, 0xde, 0xcf, 0xf4, 0x89, 0xee, 0xc5, 0xdd, 0xb0, 0x11, 0xcb, 0xb8, 0x91, 0x57, 0x84, 0x31, 0x7a, 0xe2, 0x54, 0xaa, 0x96, 0x3f, 0x68, 0x2c, 0x13, 0xf7, 0xf7, 0xa4, 0x83, 0x60, 0xc7, 0x4c, 0x83, 0xb9, 0xf2, 0x67, 0x9b, 0x76, 0xea, 0x31, 0x66, 0xd9, 0xbb, 0x16, 0xf3, 0xc2, 0x90, 0x22, 0x6a, 0xc8, 0x79, 0xb9, 0xf3, 0x88, 0x6b, 0x88, 0xd3, 0x3d, 0x89, 0xbb, 0xd8, 0x92, 0xa1, 0x70, 0xf8, 0xb4, 0xfa, 0x6c, 0x35, 0xaa, 0x4d, 0x0d, 0xc4, 0xe9, 0x11, 0x80, 0x6d, 0x23, 0xfb, 0x34, 0x35, 0x61, 0xc6, 0x8f, 0x3b, 0x51, 0x30, 0xdf, 0xe0, 0xe1, 0x45, 0x93, 0x2a, 0x0c, 0xdf, 0xab, 0x6b, 0xf4, 0x6e, 0x6d, 0x1d, 0x32, 0xf5, 0x5a, 0x11, 0x6a, 0x55, 0x60, 0xc9, 0x22, 0xce, 0x51, 0x22, 0xd4, 0xc3, 0x94, 0x35, 0x41, 0xbd, 0x1b, 0x80, 0x09, 0xb3, 0x94, 0x41, 0x79, 0x89, 0xe4, 0x23, 0xa4, 0xd6, 0xd1, 0x1c, 0xb5, 0xea, 0xfe, 0x96, 0x83, 0x10, 0x1d, 0xcd, 0x66, 0x10, 0x60, 0x78, 0x4a, 0xf8, 0x30, 0xab, 0x01, 0x1c, 0x22, 0xfc, 0xde, 0x5c, 0x27, 0xe5, 0x7f, 0xa5, 0x03, 0x69, 0xea, 0xbb, 0x00, 0xfa, 0xdc, 0x35, 0xe3, 0x9b, 0x5d, 0xc9, 0x1f, 0x42, 0x98, 0xc9, 0x49, 0x80, 0xea, 0xee, 0xcc, 0x63, 0x39, 0x55, 0xde, 0x9c, 0x87, 0xc7, 0xb2, 0xdd, 0xc6, 0x3d, 0xef, 0x85, 0xee, 0xa3, 0x62, 0x7f, 0x4e, 0xdd, 0xef, 0x67, 0x1f, 0x08, 0xce, 0xef, 0x5f, 0x02, 0xf4, 0x82, 0xdd, 0x2c, 0xce, 0x27, 0x90, 0x6e, 0x35, 0xa7, 0x2c, 0x7c, 0x9f, 0xf2, 0xf7, 0x58, 0x92, 0xbf, 0xd9, 0x19, 0x5f, 0x73, 0xb3, 0xea, 0x0c, 0x44, 0xf2, 0x55, 0x92, 0x9e, 0x64, 0xc2, 0x49, 0xc5, 0x4a, 0x3a, 0xa0, 0xbd, 0xae, 0x71, 0x11, 0x67, 0xf7, 0x04, 0x54, 0xec, 0xba, 0xff, 0xd3, 0x5e, 0xd3, 0xa2, 0x5f, 0x9d, 0xb5, 0x65, 0x21, 0x78, 0xfe, 0x39, 0xd3, 0x15, 0x4f, 0x11, 0x30, 0x93, 0x5a, 0xa1, 0xa8, 0xed, 0x3c, 0x65, 0x59, 0x22, 0x0e, 0xe6, 0x3b, 0x93, 0xb6, 0x39, 0x9a, 0xac, 0x03, 0xc8, 0xca, 0xc6, 0xfa, 0x55, 0x16, 0x4c, 0x6a, 0x3b, 0xf9, 0x1d, 0xc7, 0xf7, 0x91, 0x32, 0x34, 0xe8, 0x50, 0x81, 0xe2, 0x53, 0xf5, 0x21, 0x99, 0xaa, 0xba, 0xae, 0x94, 0x0e, 0xcf, 0xef, 0x92, 0x12, 0x08, 0xb6, 0x2a, 0xc2, 0xd3, 0x08, 0x5f, 0xe4, 0x6c, 0x7e, 0x74, 0x7d, 0x54, 0xeb, 0x02, 0x97, 0xff, 0x3f, 0x47, 0x42, 0xcc, 0xac, 0xc1, 0xd9, 0x3b, 0x07, 0xfb, 0x86, 0x5b, 0x70, 0xa8, 0x08, 0x81, 0x35, 0xee, 0xb4, 0x3f, 0xf4, 0x04, 0xba, 0x94, 0x00, 0xff, 0xaa, 0x61, 0x06, 0xe9, 0x37, 0x1c, 0xf1, 0x14, 0x3a, 0xc8, 0x0a, 0xad, 0xfa, 0x25, 0x64, 0x94, 0xaa, 0x24, 0x77, 0x6b, 0x33, 0x9d, 0x0b, 0xee, 0x34, 0x44, 0x58, 0x82, 0x47, 0xda, 0x6b, 0x10, 0x87, 0xa0, 0xcb, 0x13, 0x4f, 0x11, 0x5d, 0xf0, 0x44, 0xd0, 0x85, 0x87, 0x95, 0xe0, 0x8e, 0x07, 0x81, 0x13, 0x4c, 0x06, 0x1a, 0xc5, 0xff, 0xd1, 0x49, 0xc9, 0x7b, 0x00, 0x13, 0xa4, 0x86, 0x4e, 0x1a, 0xf9, 0x82, 0xa8, 0x67, 0x45, 0x4c, 0x84, 0x66, 0xcd, 0x63, 0x74, 0x32, 0xd4, 0x4d, 0xfb, 0x13, 0x10, 0x36, 0x9f, 0x46, 0x5f, 0xdb, 0x3f, 0xfc, 0xb7, 0xa6, 0xa7, 0xa4, 0x5b, 0x1a, 0x62, 0x6d, 0x55, 0x72, 0xcf, 0x07, 0x20, 0x85, 0x78, 0xaa, 0xa5, 0xed, 0x9e, 0x5a, 0x69, 0x68, 0x19, 0x69, 0x04, 0x7e, 0x5f, 0x3d, 0xd5, 0x65, 0xe2, 0x54, 0xf4, 0x21, 0x9f, 0x84, 0x68, 0xef, 0xf3, 0x88, 0x9a, 0xe4, 0xb1, 0xb8, 0x0a, 0xd2, 0x73, 0x18, 0x41, 0x6b, 0x2d, 0x94, 0x07, 0xa9, 0x08, 0x8a, 0xd5, 0x6d, 0x6d, 0x89, 0x8d, 0x66, 0x5f, 0x59, 0x69, 0x34, 0x0f, 0x3b, 0x31, 0xcd, 0xaa, 0x71, 0xb2, 0x20, 0x76, 0x01, 0x6b, 0xf9, 0x1d, 0xb7, 0x89, 0x25, 0x49, 0x69, 0x16, 0xd6, 0x70, 0x7e, 0x6d, 0x49, 0xf2, 0xb1, 0xf1, 0xa5, 0x61, 0x13, 0xfe, 0x27, 0x1f, 0x4f, 0x20, 0x7c, 0x2f, 0x32, 0x83, 0x6e, 0x45, 0x6b, 0xab, 0xc3, 0x1f, 0x8f, 0x65, 0x62, 0x18, 0x60, 0xfe, 0xb8, 0xfb, 0x4e, 0xb2, 0x5a, 0x15, 0x3e, 0x67, 0xec, 0x8e, 0x8b, 0x9c, 0x41, 0xf9, 0x4a, 0x9c, 0xc3, 0x29, 0xd3, 0xf7, 0x16, 0x46, 0x7d, 0x32, 0xf8, 0x21, 0xa8, 0xbe, 0x6c, 0xc5, 0x01, 0x27, 0x17, 0x4f, 0x01, 0x8e, 0xea, 0xff, 0xb7, 0x59, 0x01, 0x8e, 0xc8, 0x29, 0xcb, 0xc2, 0xb4, 0x0c, 0x6c, 0x41, 0x5a, 0xf5, 0x5f, 0xa3, 0xbf, 0x69, 0x60, 0xca, 0x0b, 0x7a, 0x89, 0x76, 0xd4, 0xf9, 0xbb, 0x14, 0x9f, 0xe8, 0x3f, 0xd7, 0xa4, 0x2e, 0xad, 0x0a, 0xd2, 0x8e, 0x0d, 0xa5, 0x13, 0xda, 0x3d, 0x1e, 0xd1, 0x64, 0x93, 0x81, 0xb9, 0xb6, 0xc2, 0xc3, 0xbf, 0x83, 0x02, 0x54, 0x62, 0xdd, 0x6b, 0xf3, 0x31, 0xa7, 0xa2, 0xc6, 0x8e, 0x4e, 0xb8, 0xaa, 0xb2, 0xb4, 0x4f, 0xc8, 0xf1, 0x6d, 0xff, 0x69, 0x3f, 0x2e, 0xf8, 0x0b, 0xf4, 0x82, 0xe8, 0xb3, 0xcc, 0xbf, 0x1f, 0x86, 0x32, 0x39, 0xf1, 0x93, 0xbe, 0xb5, 0x5b, 0xf4, 0xfc, 0x21, 0xea, 0x15, 0x6f, 0x82, 0xd9, 0x53, 0xd5, 0x2d, 0x79, 0xc9, 0xad, 0x3a, 0xd6, 0x66, 0xf7, 0x36, 0x98, 0x43, 0x3b, 0x18, 0x27, 0x34, 0xcc, 0x76, 0x13, 0x9e, 0x4e, 0xf9, 0xb2, 0x88, 0x76, 0x0f, 0x0b, 0xf4, 0x11, 0xdf, 0xf2, 0x6f, 0x48, 0x82, 0x75, 0xe7, 0x22, 0x70, 0x77, 0xbd, 0x4a, 0x38, 0x9b, 0x1b, 0x13, 0x75, 0x64, 0x88, 0xb9, 0xfd, 0x9a, 0xb9, 0xea, 0x5b, 0xef, 0xaa, 0x84, 0x80, 0xe2, 0xee, 0xa1, 0xb5, 0xe4, 0x44, 0xd1, 0xd4, 0xb9, 0x6a, 0xa6, 0xb8, 0x22, 0x36, 0x76, 0xf2, 0xb9, 0xe2, 0x5c, 0xbd, 0x1c, 0xa8, 0x80, 0x35, 0x4d, 0x8e, 0x98, 0xc3, 0x59, 0x84, 0xaf, 0xdc, 0x38, 0xac, 0x25, 0xeb, 0xf5, 0xf9, 0xf8, 0x8b, 0x0f, 0xfb, 0x41, 0xfa, 0x1e, 0xf9, 0x02, 0xca, 0xb9, 0x41, 0x1e, 0xda, 0x98, 0xbc, 0xa9, 0x85, 0xf6, 0xc5, 0x62, 0x19, 0x39, 0x3b, 0x7e, 0x8b, 0xd5, 0xd5, 0xa8, 0x69, 0x6e, 0xb6, 0x45, 0x0f, 0x3d, 0x42, 0xfc, 0x1e, 0xb4, 0x2f, 0x76, 0x2a, 0x65, 0xdf, 0x62, 0xb3, 0x20, 0xed, 0xbd, 0x57, 0x5b, 0x06, 0x50, 0x45, 0xd7, 0xfa, 0x7a, 0xf5, 0x81, 0x12, 0x2f, 0x17, 0x97, 0xa5, 0x41, 0xc9, 0x0b, 0xe6, 0xde, 0x0c, 0x2c, 0x00, 0x5b, 0x79, 0x83, 0x65, 0x2f, 0x30, 0xfb, 0x62, 0x43, 0x12, 0x46, 0xf8, 0x69, 0x30, 0x7b, 0xe7, 0x29, 0x82, 0x04, 0x0b, 0xc4, 0xdd, 0xb7, 0xeb, 0x73, 0x1f, 0x43, 0x90, 0xf0, 0xad, 0xce, 0x93, 0x37, 0x1f, 0xdc, 0x7a, 0x8e, 0x39, 0x73, 0x45, 0xc3, 0x1d, 0x7d, 0x43, 0xb5, 0xc0, 0x6d, 0x2a, 0x15, 0x9b, 0x25, 0x67, 0x6e, 0xa3, 0x17, 0xb3, 0x63, 0x7a, 0xab, 0xe7, 0x39, 0xe7, 0xe1, 0x11, 0x95, 0x84, 0x38, 0xc7, 0x86, 0xb6, 0xce, 0xbb, 0xc5, 0xe2, 0xc8, 0x90, 0x3c, 0xde, 0xf4, 0xec, 0xc6, 0xa6, 0xad, 0xcf, 0x36, 0x51, 0x00, 0x23, 0x9a, 0x43, 0x0d, 0x94, 0xc1, 0xa3, 0xaf, 0xa1, 0xfa, 0x10, 0x5f, 0xf3, 0x1f, 0x8f, 0x55, 0xee, 0xd2, 0xc8, 0xf1, 0x87, 0x07, 0x73, 0x5a, 0x55, 0xc3, 0x0d, 0x65, 0xea, 0x22, 0xcf, 0xb8, 0x63, 0x9f, 0xe0, 0x2f, 0x3e, 0x90, 0xca, 0x7e, 0x6c, 0xf0, 0x2b, 0x18, 0xa7, 0x61, 0xad, 0x50, 0x06, 0x71, 0x37, 0xbe, 0xcf, 0x1d, 0x65, 0xe5, 0x8c, 0x94, 0x36, 0x12, 0x61, 0x3d, 0x05, 0x87, 0x9c, 0xfa, 0xbb ],
-const [ 0xc8, 0xc1, 0x07, 0x93, 0x0a, 0xc3, 0xec, 0x65, 0x4f, 0x04, 0x39, 0x92, 0xcf, 0xae, 0xff, 0x31, 0x55, 0x2d, 0x8a, 0xb7, 0x96, 0x37, 0x4b, 0x18, 0xc1, 0x09, 0x16, 0x2f, 0x57, 0xf4, 0x8e, 0x60, 0x3d, 0x19, 0xdd, 0x7c, 0x10, 0x71, 0xa8, 0xe4, 0xb8, 0x10, 0x41, 0xf2, 0x40, 0xaa, 0x1f, 0x94, 0xe4, 0x56, 0x8c, 0x3a, 0x6c, 0x92, 0x9e, 0xf3, 0xb9, 0x87, 0x68, 0xd2, 0x9e, 0x8f, 0x71, 0x97, 0xf1, 0xf5, 0x66, 0x8b, 0xe1, 0xfc, 0x0b, 0xac, 0x89, 0x22, 0x77, 0x0a, 0xc6, 0xa5, 0x81, 0x71, 0x46, 0x47, 0x76, 0x48, 0xe2, 0x4e, 0x0d, 0xb9, 0x2e, 0xd0, 0x9c, 0x13, 0x4e, 0x2d, 0x8b, 0x6c, 0x0b, 0xdd, 0x09, 0x8a, 0x26, 0x6c, 0xff, 0x04, 0xeb, 0xc2, 0x42, 0xa4, 0x0a, 0xa8, 0x0d, 0x10, 0xa3, 0x88, 0xae, 0xa9, 0xa0, 0x74, 0x7f, 0xb4, 0x47, 0x6a, 0x18, 0xb8, 0x0f, 0xd7, 0xc3, 0x26, 0xb3, 0x59, 0x31, 0x3f, 0x86, 0xc9, 0x6b, 0x33, 0x06, 0x79, 0x0a, 0x86, 0xb3, 0xba, 0xab, 0xb8, 0x22, 0xa2, 0x9e, 0x25, 0x4d, 0x0c, 0xde, 0x2a, 0x2d, 0xdf, 0x46, 0x89, 0x8b, 0x94, 0x01, 0x0f, 0x13, 0xf2, 0x43, 0x74, 0xaa, 0x1c, 0x36, 0x82, 0x01, 0xce, 0x38, 0x79, 0x6a, 0xe4, 0x43, 0xb3, 0xeb, 0x1c, 0xac, 0x84, 0x91, 0x1c, 0x11, 0x64, 0x07, 0xb7, 0x8d, 0x50, 0x67, 0x6c, 0x2d, 0x6d, 0x50, 0x2f, 0xa8, 0xef, 0x39, 0x6d, 0x4a, 0x39, 0x05, 0x4a, 0x32, 0x45, 0xd7, 0x2d, 0xbd, 0x47, 0x27, 0x7e, 0x42, 0x8d, 0x16, 0xae, 0x00, 0xaa, 0xfe, 0x78, 0x54, 0xd3, 0x4e, 0x67, 0x30, 0x89, 0x95, 0x99, 0xc8, 0x79, 0xdc, 0xc2, 0x8e, 0xa0, 0x39, 0x73, 0x61, 0xb2, 0xa1, 0x9d, 0x01, 0xbd, 0xfe, 0x51, 0xc7, 0x09, 0x81, 0xc9, 0x93, 0x44, 0x3a, 0xac, 0x05, 0xdb, 0xe6, 0x8e, 0xf0, 0xab, 0x08, 0xb6, 0x0b, 0xd9, 0x3b, 0x25, 0xea, 0xfe, 0xc6, 0xd4, 0x2d, 0x88, 0x71, 0x3c, 0xf8, 0x5d, 0x97, 0x1b, 0xa3, 0xc1, 0x7d, 0x76, 0xb2, 0x79, 0xe2, 0xda, 0x07, 0x30, 0xd7, 0xe8, 0x56, 0x1b, 0xd1, 0x11, 0xda, 0xd9, 0xfd, 0x9d, 0x46, 0x9d, 0xd3, 0xf2, 0xff, 0x8e, 0xee, 0x13, 0x88, 0x6e, 0x1b, 0x67, 0x3d, 0x7a, 0xb0, 0xbc, 0x45, 0x92, 0x1f, 0x8b, 0xc2, 0x9a, 0xca, 0x7d, 0x4a, 0x20, 0x19, 0x2f, 0x9b, 0x3f, 0xca, 0x32, 0x8a, 0xc3, 0x89, 0x57, 0x3d, 0x8d, 0xc1, 0x29, 0x9a, 0x3a, 0xb1, 0xba, 0xff, 0xff, 0xc2, 0xa3, 0x34, 0xd7, 0x18, 0x46, 0x9e, 0xe1, 0x67, 0x56, 0xb5, 0x03, 0x08, 0x9a, 0xb8, 0xd4, 0x4c, 0xed, 0x9f, 0xb9, 0x10, 0x8a, 0x51, 0x4e, 0x91, 0x86, 0x17, 0x07, 0x82, 0x9e, 0x50, 0x17, 0x5c, 0x33, 0x67, 0x90, 0xf6, 0x93, 0x03, 0xcc, 0x55, 0x7a, 0x7d, 0x0d, 0xc5, 0xd9, 0x97, 0x60, 0x28, 0xd5, 0x6b, 0xc7, 0x8f, 0x13, 0xa1, 0x96, 0x07, 0x33, 0xe5, 0x1e, 0xb6, 0x9a, 0x98, 0x89, 0x26, 0x75, 0xc6, 0x05, 0xe0, 0xfa, 0x59, 0x25, 0x3d, 0xf1, 0x8c, 0x83, 0x79, 0x74, 0xa2, 0xab, 0x09, 0xf3, 0xd7, 0x34, 0x2e, 0x7b, 0x97, 0x30, 0xcb, 0x37, 0xee, 0xc7, 0x74, 0x37, 0x40, 0x1e, 0xc7, 0x70, 0x3a, 0x7e, 0xff, 0x04, 0x08, 0xb2, 0xc6, 0xc4, 0xc8, 0xb0, 0x4b, 0xf3, 0x3f, 0x7c, 0x95, 0x4d, 0xcb, 0x4a, 0x17, 0x48, 0x99, 0xe3, 0x84, 0x9a, 0x18, 0x49, 0xe4, 0xfb, 0xae, 0x9e, 0xe8, 0x2c, 0xa9, 0x42, 0x7a, 0x38, 0x78, 0x3c, 0x99, 0xfa, 0x1b, 0xdb, 0x64, 0xdf, 0xd8, 0x9c, 0x74, 0xee, 0x30, 0x4f, 0x6f, 0x05, 0x11, 0x76, 0xda, 0x65, 0x4d, 0xee, 0x2f, 0x70, 0x4b, 0xd1, 0x30, 0xb2, 0xfd, 0x9a, 0x7a, 0x1f, 0x11, 0x8a, 0x5d, 0x9b, 0x6c, 0x4b, 0xeb, 0xc0, 0xd4, 0xd4, 0x4f, 0xdb, 0xec, 0x8c, 0x61, 0x37, 0x66, 0xb2, 0x77, 0x9f, 0x74, 0xfc, 0x7d, 0x1e, 0x7f, 0x7e, 0x48, 0x09, 0x1c, 0xce, 0x27, 0x3f, 0x3c, 0x66, 0xbb, 0xb0, 0xa2, 0x49, 0x09, 0x1c, 0x9b, 0xea, 0xce, 0x1d, 0xe9, 0x49, 0x12, 0x68, 0x00, 0x5f, 0x00, 0x50, 0x75, 0xbc, 0xf5, 0x8c, 0xb3, 0x6f, 0xd7, 0x39, 0xf0, 0x26, 0xa8, 0x23, 0x5f, 0x96, 0x5b, 0x40, 0xa7, 0x1d, 0xe6, 0x7d, 0x95, 0xa6, 0x98, 0xbd, 0x0d, 0xce, 0xad, 0x1f, 0x47, 0x45, 0x20, 0x80, 0x38, 0x76, 0xc0, 0x42, 0x4d, 0x6a, 0x86, 0x4b, 0x5f, 0xe9, 0x26, 0x50, 0xe4, 0xe3, 0xe4, 0x53, 0x62, 0x0f, 0xa9, 0x6a, 0x2a, 0xd2, 0x56, 0xc3, 0x42, 0x62, 0x58, 0xe5, 0xa3, 0x2b, 0x7d, 0x38, 0xa4, 0x72, 0x05, 0xc8, 0xb7, 0x38, 0xfd, 0x46, 0x53, 0x61, 0xc8, 0x50, 0x31, 0x15, 0xff, 0xf1, 0xbb, 0x67, 0x7b, 0x6c, 0xc2, 0x34, 0xaf, 0x35, 0x6f, 0x4e, 0x3b, 0x41, 0x7c, 0xda, 0xbf, 0x7f, 0xa3, 0xf7, 0xed, 0xa7, 0x57, 0xa1, 0xe3, 0x32, 0xb3, 0xd4, 0xb7, 0xa9, 0xb0, 0xf4, 0x53, 0x23, 0x9a, 0x6c, 0x83, 0x0a, 0xc5, 0x96, 0x4c, 0x1d, 0x7c, 0xdb, 0x80, 0xbb, 0x3a, 0x1b, 0x8f, 0x5e, 0x1d, 0x4e, 0xa0, 0x66, 0x97, 0x6c, 0xe0, 0x18, 0x67, 0x8b, 0x1a, 0xe6, 0xc7, 0x47, 0x89, 0xf0, 0xe7, 0x67, 0xea, 0xcc, 0x9b, 0xbe, 0xd4, 0x82, 0x50, 0x4e, 0x4c, 0xdb, 0x45, 0xb4, 0x95, 0xdc, 0xf8, 0xc0, 0x45, 0x8d, 0xde, 0x63, 0x9e, 0xff, 0x56, 0xce, 0x1a, 0x8c, 0xe0, 0xd8, 0x48, 0x61, 0x8a, 0xa0, 0xd7, 0x3a, 0xac, 0x74, 0xf0, 0x6d, 0xd5, 0xf2, 0xca, 0x2a, 0x05, 0x6d, 0x78, 0x01, 0x1d, 0x93, 0x05, 0xa4, 0x93, 0x4c, 0xc2, 0xef, 0x6a, 0xe5, 0xdf, 0x25, 0x62, 0x6d, 0x39, 0x7d, 0x6c, 0x5f, 0x73, 0xdd, 0x60, 0x82, 0x48, 0xe5, 0xf2, 0x0e, 0x1f, 0x2f, 0xe3, 0x10, 0xe0, 0xd5, 0x74, 0x0f, 0x07, 0x34, 0x20, 0xf0, 0xf7, 0xf0, 0x8a, 0x17, 0x90, 0x39, 0xb5, 0xcf, 0x03, 0x4c, 0x73, 0xec, 0xe5, 0x3c, 0x20, 0xaf, 0x83, 0xf2, 0x8f, 0xe9, 0x76, 0x72, 0x45, 0x63, 0x77, 0x61, 0xe5, 0x7e, 0x74, 0xc4, 0xec, 0x17, 0xe3, 0x0b, 0x9e, 0xad, 0x56, 0x4e, 0x41, 0xc6, 0x4f, 0xd6, 0x88, 0x8e, 0x56, 0xdf, 0x52, 0xc2, 0x4a, 0x9c, 0x95, 0xcc, 0xf5, 0x7c, 0x94, 0x30, 0xe2, 0xac, 0x59, 0x26, 0x73, 0xdd, 0x5f, 0x88, 0x2e, 0x47, 0x8f, 0xef, 0x58, 0xee, 0x6d, 0x1a, 0xc5, 0x24, 0x94, 0x8f, 0xee, 0x4f, 0x60, 0x84, 0x44, 0xec, 0xea, 0xff, 0xc4, 0xd4, 0x39, 0x3d, 0xcc, 0xbe, 0xb6, 0x51, 0x2d, 0x06, 0xe1, 0x0d, 0x81, 0xad, 0x43, 0x25, 0xbf, 0xa0, 0xa3, 0x92, 0x0c, 0x3d, 0x7d, 0x35, 0xd4, 0x13, 0xb0, 0xbd, 0x1a, 0xe9, 0x77, 0xca, 0x0c, 0x02, 0x9a, 0x52, 0xdb, 0xa0, 0xe6, 0x45, 0xc9, 0xc7, 0xda, 0x6c, 0x84, 0x43, 0xa3, 0x97, 0xb2, 0xed, 0x4b, 0xf7, 0xcd, 0x29, 0x2d, 0xc9, 0x31, 0xb3, 0xac, 0x34, 0x73, 0x9c, 0x24, 0x75, 0xf5, 0x8f, 0x21, 0x39, 0xb7, 0x59, 0xcf, 0x4a, 0x70, 0xa8, 0xb2, 0x6e, 0xde, 0x13, 0x97, 0x8d, 0x5a, 0x5b, 0xcb, 0x11, 0xaf, 0xf1, 0x8a, 0x92, 0x2c, 0xb8, 0xba, 0xb3, 0xf8, 0x0b, 0xda, 0x47, 0xa6, 0x02, 0x35, 0xb9, 0x09, 0xf1, 0x5b, 0xaa, 0x4a, 0x32, 0xd1, 0xdb, 0x37, 0x25, 0x08, 0x4e, 0xde, 0x74, 0x8c, 0xa8, 0x5b, 0x9c, 0x7e, 0xda, 0xee, 0xa9, 0x44, 0x00, 0x51, 0x40, 0x7f, 0x89, 0x48, 0xe3, 0x3d, 0x99, 0x79, 0x71, 0x71, 0xab, 0x7e, 0xec, 0xa0, 0x7b, 0x39, 0x7f, 0xdc, 0x23, 0x67, 0xc0, 0xf6, 0x84, 0x78, 0x32, 0xf0, 0xe7, 0x9f, 0x0e, 0xb1, 0xe4, 0x25, 0x43, 0xfc, 0x84, 0x02, 0xbb, 0xa3, 0xa2, 0xae, 0xe0, 0xf8, 0x97, 0x35, 0x5f, 0x85, 0x16, 0x8a, 0x2b, 0xfd, 0x54, 0x1d, 0xc6, 0x72, 0x6c, 0xaf, 0xbc, 0xc7, 0x03, 0x65, 0x70, 0x69, 0x27, 0x1c, 0x1a, 0x3a, 0x7d, 0xfd, 0x11, 0xce, 0x9c, 0x51, 0x46, 0xda, 0xb4, 0x96, 0x11, 0xe9, 0x73, 0xd2, 0x31, 0x51, 0x29, 0x27, 0x0e, 0x66, 0x2a, 0xa8, 0x40, 0xed, 0x74, 0x6b, 0x55, 0xd4, 0x91, 0xdf, 0xcf, 0x20, 0xbf, 0x60, 0x6d, 0x26, 0x4f, 0x09, 0xac, 0xfe, 0x4b, 0xca, 0x8c, 0x35, 0x5b, 0xba, 0x97, 0xc2, 0xe9, 0xae, 0x20, 0x3b, 0x84, 0x0a, 0xc9, 0x49, 0x82, 0xd7, 0x48, 0x5a, 0xea, 0x16, 0x6a, 0x95, 0x91, 0x54, 0x57, 0x13, 0x82, 0x7f, 0x19, 0x4c, 0xa3, 0xf8, 0x58, 0xcf, 0x96, 0xe9, 0x67, 0x37, 0xde, 0xd9, 0x85, 0x5a, 0x43, 0x7e, 0x5c, 0xc3, 0x77, 0xd2, 0xce, 0x63, 0xf9, 0x69, 0xf1, 0x83, 0x3a, 0x01, 0x58, 0xfd, 0xff, 0x5b, 0x95, 0xac, 0x06, 0x49, 0xfb, 0x21, 0xec, 0x09, 0xa9, 0x97, 0x4e, 0xd1, 0xc4, 0x29, 0x2f, 0xab, 0x03, 0x43, 0x99, 0x83, 0x71, 0x57, 0x87, 0x7e, 0x6e, 0xd1, 0x03, 0x8e, 0xf7, 0x4c, 0x8c, 0x44, 0x28, 0x06, 0xba, 0xe5, 0xff, 0x91, 0x25, 0xbf, 0x63, 0xcc, 0x82, 0xbd, 0x65, 0x12, 0x0f, 0x3a, 0xc5, 0xb1, 0x32, 0x13, 0xb8, 0x9e, 0x5c, 0x00, 0xe8, 0x67, 0x34, 0x24, 0xbd, 0x68, 0xf2, 0xe2, 0xdb, 0x42, 0x08, 0xf3, 0xec, 0x89, 0x08, 0xb5, 0x9f, 0xbd, 0xc2, 0xc6, 0xf0, 0x7c, 0xac, 0xd2, 0xab, 0xf5, 0x88, 0xa9, 0x2b, 0xa0, 0x40, 0x95, 0x68, 0x2d, 0x15, 0xea, 0x31, 0xba, 0xf8, 0xde, 0xb5, 0x48, 0x38, 0x9b, 0x48, 0x70, 0x5e, 0x93, 0x64, 0x52, 0x56, 0x14, 0xee, 0xcf, 0xcf, 0x1c, 0xbb, 0xf8, 0xe3, 0x6e, 0x53, 0xc5, 0xfb, 0xe5, 0xf5, 0x0b, 0xed, 0x09, 0xdb, 0xa8, 0x68, 0xe0, 0xbe, 0x00, 0x92, 0x07, 0x9d, 0xae, 0xef, 0x00, 0xbb, 0x73, 0x85, 0xce, 0xe7, 0x72, 0x3e, 0xbf, 0xff, 0xa0, 0x8d, 0x8a, 0xb7, 0x76, 0x54, 0x99, 0x97, 0xe9, 0x06, 0xa8, 0x43, 0x9b, 0x09, 0x8f, 0xff, 0x53, 0x5e, 0x5c, 0x72, 0xab, 0x83, 0xa5, 0xaa, 0x08, 0x98, 0x1d, 0x61, 0xcf, 0xc2, 0x64, 0x7f, 0xd6, 0xcd, 0x24, 0xe0, 0x19, 0x15, 0x59, 0x56, 0xaf, 0xa6, 0xf0, 0xf2, 0xfc, 0xa2, 0x94, 0x7f, 0x27, 0xe3, 0xc5, 0x50, 0xce, 0xe2, 0x2a, 0x3c, 0xf9, 0xd7, 0x28, 0xe6, 0x4d, 0x22, 0xb3, 0x42, 0x83, 0xea, 0x64, 0x54, 0x18, 0x04, 0xcc, 0x3b, 0x45, 0x16, 0x09, 0x6f, 0x31, 0xfc, 0x96, 0x47, 0x66, 0x6a, 0x68, 0xbe, 0x81, 0xd3, 0x36, 0x76, 0x2e, 0x8a, 0x18, 0xfd, 0x54, 0x28, 0x53, 0x50, 0x8d, 0x2d, 0x73, 0x9d, 0xd9, 0xea, 0x9b, 0x4d, 0x93, 0x9e, 0x1a, 0x42, 0xa4, 0xdf, 0x3e, 0x5d, 0xf6, 0x3b, 0x6d, 0x44, 0x2c, 0x20, 0x71, 0x62, 0x90, 0xf9, 0x14, 0x2f, 0x4c, 0x9a, 0xed, 0xb1, 0xde, 0xde, 0x79, 0x43, 0xc6, 0x8e, 0x6e, 0x95, 0x81, 0x85, 0x4b, 0xf4, 0xbb, 0x12, 0x34, 0xcb, 0xc1, 0x9e, 0xfd, 0x6a, 0x35, 0x8f, 0x85, 0x07, 0x05, 0x6c, 0x45, 0x02, 0x9d, 0x41, 0x28, 0x6e, 0x5c, 0x45, 0x9d, 0xcc, 0x45, 0xba, 0xeb, 0x19, 0xf8, 0x15, 0xc6, 0x0c, 0xe0, 0x5f, 0x1f, 0x99, 0xad, 0xdb, 0x40, 0xb9, 0x05, 0xe9, 0x17, 0x6d, 0x76, 0x2a, 0xd2, 0x00, 0xb0, 0xe5, 0xad, 0x8d, 0xf1, 0xa9, 0x08, 0xc2, 0xc0, 0x34, 0xbd, 0xe3, 0xde, 0x94, 0xb0, 0x12, 0x7a, 0x8c, 0xa8, 0xcd, 0xa4, 0x39, 0x5d, 0xb8, 0x04, 0xf5, 0xd2, 0x9d, 0xcc, 0x7c, 0xe4, 0xb1, 0xeb, 0x4e, 0x23, 0x19, 0x84, 0x54, 0xe2, 0xac, 0x9e, 0xc5, 0x8a, 0xfb, 0x1d, 0x4b, 0x34, 0x8e, 0xf1, 0x62, 0x76, 0x71, 0x8d, 0x01, 0x7c, 0xf0, 0x9a, 0x7d, 0x5b, 0x9e, 0xed, 0xaa, 0xa3, 0x9c, 0xb7, 0x43, 0x33, 0x17, 0xfc, 0x8c, 0x52, 0x13, 0x47, 0x35, 0xfb, 0x67, 0x9b, 0x82, 0x77, 0x09, 0xac, 0xa9, 0x32, 0x8c, 0x4f, 0x7c, 0xc7, 0xe7, 0x30, 0x47, 0x5d, 0x78, 0xc3, 0xfc, 0x36, 0x49, 0x7d, 0x8d, 0x85, 0x91, 0x43, 0x9a, 0x80, 0x7e, 0x23, 0x4c, 0xb7, 0x31, 0x42, 0x81, 0xa4, 0x0b, 0x15, 0x29, 0x83, 0x27, 0xd4, 0xef, 0x64, 0x27, 0x2c, 0x1d, 0x7e, 0x34, 0x35, 0xb9, 0xc6, 0x40, 0xa3, 0xf4, 0xc0, 0x8e, 0x40, 0xc6, 0x95, 0x75, 0x9a, 0xd2, 0x67, 0x61, 0xf8, 0x8f, 0xe1, 0x1a, 0x93, 0xa9, 0x12, 0x49, 0x03, 0xa5, 0x7b, 0x38, 0xf8, 0xc5, 0x66, 0xd9, 0x2a, 0x2b, 0x7a, 0x0a, 0x93, 0x40, 0x8d, 0x17, 0xdb, 0x57, 0xb9, 0x80, 0x14, 0x8e, 0xb2, 0xfd, 0xa7, 0xf5, 0x56, 0xc0, 0x8e, 0xf3, 0x86, 0xfa, 0xc4, 0xe5, 0x35, 0xa0, 0xfa, 0x07, 0xbe, 0x6f, 0x8c, 0x98, 0x7b, 0x2e, 0xb3, 0x39, 0x93, 0x33, 0xfc, 0x97, 0x13, 0x28, 0xf9, 0x49, 0x41, 0x0f, 0x36, 0xfc, 0x2d, 0x84, 0x6e, 0xcd, 0x88, 0x42, 0xff, 0xf6, 0xb9, 0xe9, 0x9c, 0xad, 0x2e, 0xff, 0x42, 0x49, 0xf0, 0x34, 0x6d, 0xa7, 0x7b, 0xea, 0x8b, 0xcc, 0xcc, 0xf4, 0xb1, 0xcb, 0xbb, 0x9e, 0x8d, 0xe9, 0x8b, 0xee, 0x9c, 0x00, 0xc0, 0x2a, 0x9c, 0x21, 0x30, 0x9a, 0x45, 0x7d, 0x5d, 0x8f, 0x34, 0x86, 0x02, 0xa5, 0x28, 0x51, 0xec, 0x44, 0x70, 0x3f, 0x0b, 0x6d, 0xa4, 0xdc, 0xc9, 0xb3, 0x94, 0x07, 0x9a, 0x87, 0x7e, 0x54, 0xd5, 0xb9, 0x84, 0xae, 0xc2, 0x3c, 0x5c, 0x41, 0xf4, 0x2a, 0x4a, 0x97, 0xd9, 0x07, 0x4b, 0x00, 0x8f, 0x4a, 0x93, 0x38, 0xf9, 0x19, 0x3a, 0x44, 0x13, 0x55, 0x33, 0x9d, 0x82, 0xd6, 0x7d, 0x90, 0x70, 0xf8, 0x9d, 0xe5, 0x96, 0x56, 0x4b, 0xbf, 0x9a, 0xd5, 0x6c, 0xc3, 0x9c, 0xe5, 0x40, 0x7c, 0x0c, 0x03, 0xdd, 0xfe, 0xbe, 0x82, 0xdc, 0xca, 0x40, 0x8c, 0x52, 0xf2, 0x6b, 0x64, 0x02, 0x7e, 0x38, 0xed, 0xd0, 0x0d, 0xd5, 0x70, 0x79, 0xc0, 0xf8, 0x9a, 0x82, 0x53, 0x74, 0xc4, 0x6e, 0x8d, 0x0a, 0x78, 0x34, 0xdb, 0x81, 0x30, 0xf0, 0x38, 0xf8, 0x60, 0xd9, 0x4f, 0x7c, 0xb7, 0x73, 0xe4, 0xd6, 0xa2, 0x06, 0x70, 0xa6, 0x13, 0x4e, 0x0b, 0xb6, 0x80, 0x74, 0x8f, 0x88, 0x2e, 0x3d, 0xfb, 0x31, 0xaf, 0x82, 0x15, 0x6a, 0xaa, 0xe0, 0x54, 0xe5, 0xda, 0xb0, 0xfc, 0xdd, 0x59, 0x39, 0x8b, 0xf1, 0x1f, 0x25, 0x54, 0x32, 0xc5, 0x32, 0x6a, 0x7b, 0x8f, 0x2a, 0xbf, 0x01, 0xaa, 0x15, 0x8d, 0x2a, 0xb2, 0xad, 0xf5, 0xa3, 0x78, 0x12, 0xe7, 0xad, 0x01, 0xbf, 0x41, 0xb7, 0xd2, 0xbd, 0x3b, 0x32, 0x6a, 0x16, 0x02, 0xa1, 0x11, 0x8d, 0xa3, 0xef, 0xd0, 0x8c, 0x2b, 0x06, 0xc1, 0x5e, 0x0c, 0x9d, 0x89, 0x9e, 0xc3, 0x51, 0x22, 0xf0, 0xb8, 0xf8, 0xde, 0xef, 0x66, 0x32, 0xa8, 0x66, 0xbb, 0x40, 0x8d, 0xc2, 0xc2, 0x1a, 0x7c, 0xc7, 0x7f, 0xbb, 0x4a, 0x83, 0x1b, 0xc0, 0xf9, 0x80, 0x41, 0x31, 0x3a, 0x3e, 0xc7, 0x9f, 0x30, 0xe0, 0x91, 0x6f, 0x77, 0x26, 0xb2, 0x75, 0x65, 0x9b, 0xd5, 0xc5, 0x90, 0x10, 0xdc, 0xc5, 0x90, 0x48, 0xc6, 0x87, 0x06, 0xf5, 0xd6, 0x56, 0xdd, 0xe3, 0xf1, 0x8f, 0xcf, 0x74, 0x49, 0xb3, 0x2b, 0x4c, 0x38, 0xb9, 0xd6, 0x4d, 0x6e, 0xa9, 0x90, 0xc6, 0x4f, 0x66, 0x79, 0xe7, 0x97, 0xcb, 0xd4, 0x79, 0x40, 0xfa, 0x0a, 0xcc, 0xa5, 0xf1, 0xf2, 0xf0, 0xe7, 0x5f, 0x4f, 0x27, 0x90, 0xb5, 0x9b, 0x9b, 0x76, 0x7f, 0x03, 0x4d, 0xe3, 0xf5, 0xb2, 0x4e, 0xf2, 0xcd, 0x52, 0x31, 0x3c, 0x54, 0xd0, 0xc0, 0xb4, 0xbd, 0x60, 0xee, 0xd0, 0xb9, 0xc2, 0x0d, 0xea, 0x48, 0xc3, 0x41, 0xe5, 0xce, 0x06, 0x35, 0x13, 0x69, 0x04, 0x0c, 0x56, 0x82, 0x52, 0x9b, 0x86, 0xa2, 0x23, 0xd5, 0x13, 0x87, 0x0d, 0x86, 0xec, 0x78, 0x10, 0x45, 0x9f, 0xd5, 0xd4, 0xa3, 0xc1, 0xf2, 0x32, 0xa9, 0x90, 0x25, 0xf6, 0x82, 0xd7, 0x1e, 0xe3, 0x74, 0x12, 0x77, 0xf8, 0x15, 0xd3, 0x8c, 0xf2, 0xbb, 0x64, 0x8d, 0x12, 0x34, 0xae, 0xd2, 0x20, 0xb7, 0x59, 0x6e, 0xb0, 0x1b, 0x35, 0x06, 0xa4, 0x47, 0xd9, 0xe4, 0xf2, 0xea, 0x8a, 0x47, 0xa8, 0x6c, 0x5e, 0xfd, 0x2d, 0x24, 0xa0, 0x34, 0xc9, 0xcb, 0x77, 0x8e, 0x67, 0x30, 0xc3, 0x73, 0x9a, 0x2e, 0x48, 0xab, 0xdf, 0xdb, 0x0e, 0x2c, 0x22, 0x03, 0x07, 0x30, 0x83, 0xd5, 0xf3, 0x8b, 0x59, 0xdb, 0x81, 0x3c, 0x77, 0x30, 0xb7, 0x42, 0xaf, 0xed, 0x93, 0xb1, 0x95, 0xe4, 0xf3, 0x04, 0x85, 0x91, 0xb2, 0xb5, 0xe8, 0x4d, 0x14, 0x0b, 0xb2, 0xc5, 0x64, 0x34, 0x2f, 0xab, 0xdb, 0x93, 0x00, 0xab, 0xc4, 0x5b, 0x61, 0xa1, 0xde, 0x5d, 0xad, 0x09, 0x02, 0x1e, 0x23, 0xb6, 0x05, 0x2d, 0xea, 0xc8, 0xe0, 0xb3, 0x53, 0xd8, 0x0e, 0x4c, 0x5f, 0x75, 0x36, 0x15, 0x81, 0xd4, 0x0a, 0x07, 0xa4, 0xc3, 0x6f, 0x83, 0x70, 0xdf, 0xde, 0x2d, 0xc9, 0x07, 0x0a, 0xfe, 0x99, 0x10, 0xc3, 0x95, 0xd0, 0xba, 0x1a, 0xce, 0xa9, 0xe3, 0xc6, 0x96, 0x2e, 0xfb, 0xc6, 0xfe, 0xfe, 0xb8, 0x48, 0x8e, 0x4e, 0x0b, 0xca, 0xdb, 0x2e, 0x52, 0x7f, 0x5b, 0x0d, 0xcf, 0xf4, 0x79, 0x80, 0x59, 0xf3, 0xe5, 0x3f, 0x51, 0xa8, 0x2e, 0x70, 0xd8, 0x02, 0x92, 0x29, 0x3f, 0x5c, 0x15, 0x30, 0xbf, 0x5d, 0xd0, 0x05, 0x6b, 0x1c, 0x8c, 0x22, 0x62, 0x88, 0x8f, 0x81, 0x49, 0x08, 0xb6, 0x5f, 0xf9, 0x5e, 0xc4, 0x40, 0x74, 0xd1, 0xfa, 0x33, 0x1e, 0x8b, 0xe8, 0x57, 0x2a, 0x40, 0x82, 0x9e, 0x52, 0x10, 0x76, 0xd1, 0xcb, 0xaf, 0xbd, 0xd4, 0x78, 0xc3, 0x70, 0x2c, 0x5e, 0x8d, 0xde, 0xbe, 0x58, 0xcc, 0xdb, 0xd9, 0x0b, 0xde, 0x5b, 0x77, 0x1d, 0x29, 0x3f, 0xc0, 0xa2, 0xb9, 0x6e, 0xd0, 0xd7, 0x2a, 0x28, 0xba, 0x13, 0xc9, 0x97, 0xcd, 0xfa, 0xf6, 0xa7, 0x16, 0xf4, 0xcd, 0x18, 0x25, 0xde, 0x05, 0xd2, 0x14, 0xff, 0x17, 0x78, 0xc6, 0x3d, 0xa3, 0x3f, 0x6d, 0x90, 0x10, 0x01, 0x4f, 0xb8, 0x74, 0x8d, 0xc9, 0x2b, 0xb3, 0x42, 0x94, 0x52, 0xea, 0xdc, 0x47, 0xf4, 0x0e, 0x8d, 0x1d, 0xf3, 0xd0, 0x50, 0xf9, 0x36, 0xc4, 0x7a, 0xa7, 0xe6, 0xc3, 0x91, 0x65, 0xdd, 0x8e, 0x62, 0xa2, 0x5b, 0xb3, 0x4e, 0x05, 0xfb, 0xb5, 0xe5, 0xb1, 0xe6, 0x67, 0xb6, 0xc8, 0x47, 0x99, 0x64, 0x2d, 0xff, 0xf6, 0xfd, 0x8f, 0x99, 0x2d, 0x88, 0xa3, 0x80, 0x4f, 0xdd, 0xb0, 0x6f, 0x78, 0xba, 0x51, 0x2a, 0xb2, 0x12, 0x77, 0x6c, 0x16, 0xa8, 0xad, 0x20, 0x35, 0xdd, 0xa0, 0xd3, 0xb6, 0xc6, 0xde, 0x6a, 0x40, 0x82, 0xde, 0x10, 0x9a, 0xcb, 0x41, 0x73, 0x10, 0xca, 0x57, 0x30, 0x19, 0x30, 0xe5, 0x8b, 0x38, 0x82, 0x25, 0x64, 0x20, 0xb4, 0x0f, 0x67, 0x1b, 0xfa, 0xd7, 0x82, 0xac, 0xdb, 0xb7, 0x9c, 0x73, 0x87, 0xee, 0x84, 0x52, 0x6a, 0x09, 0x27, 0xce, 0x01, 0x61, 0x07, 0xb8, 0xed, 0xe5, 0xe8, 0x0c, 0x46, 0x19, 0xcc, 0x19, 0x31, 0x5f, 0x22, 0xe2, 0xb5, 0x76, 0x3b, 0xc5, 0xca, 0x40, 0xfd, 0x5a, 0xb3, 0xc8, 0xdb, 0x9e, 0x8e, 0x83, 0x05, 0x51, 0x2a, 0xd6, 0xdb, 0x9c, 0x18, 0xd9, 0xa8, 0xf7, 0x05, 0x5b, 0x8d, 0x4a, 0x47, 0x26, 0xbb, 0x52, 0xb5, 0x83, 0xe5, 0x47, 0xbc, 0x01, 0xf6, 0xbc, 0xaf, 0x73, 0xff, 0xc6, 0x5f, 0x38, 0x73, 0x60, 0xec, 0xbf, 0x96, 0x0e, 0xda, 0x49, 0x33, 0xc1, 0x67, 0xf1, 0x8d, 0xfb, 0x1c, 0xea, 0x99, 0x33, 0xa3, 0x09, 0x6a, 0x7b, 0xd8, 0x83, 0xed, 0x60, 0x22, 0xf7, 0xd6, 0x12, 0x04, 0xaf, 0xda, 0xc5, 0xef, 0x23, 0x1f, 0x56, 0x5b, 0xbe, 0xf1, 0x32, 0x16, 0xe5, 0xb6, 0x74, 0xdb, 0x36, 0x24, 0x4d, 0x26, 0x0d, 0xb1, 0xa9, 0x47, 0x4d, 0x4b, 0x0f, 0xb5, 0x5d, 0x4a, 0xc9, 0xa6, 0x70, 0xa3, 0x46, 0xdc, 0x0a, 0x5e, 0xbc, 0xc2, 0xc0, 0x4a, 0x11, 0xb7, 0x3f, 0xef, 0xfc, 0xaa, 0x8f, 0xc4, 0x68, 0xe7, 0x99, 0xa2, 0x19, 0x30, 0xe7, 0x79, 0x91, 0x10, 0xac, 0x42, 0x35, 0x6c, 0x04, 0x34, 0xac, 0x5b, 0x7c, 0x3b, 0x88, 0x38, 0xd5, 0xa6, 0x28, 0xf5, 0x05, 0x1f, 0xdc, 0xb1, 0x7f, 0xe1, 0x4b, 0x8d, 0xb4, 0x25, 0x12, 0xbc, 0xda, 0xdd, 0xae, 0xda, 0xec, 0xa5, 0x9c, 0x7f, 0xf2, 0xf7, 0xbe, 0x13, 0x82, 0x9e, 0x01, 0xe4, 0x87, 0x6d, 0x3d, 0x75, 0x41, 0x30, 0x5d, 0x1a, 0x8d, 0xe3, 0xbf, 0xc1, 0x67, 0x22, 0xde, 0x13, 0xad, 0xe1, 0x2e, 0xbc, 0x25, 0x5d, 0x47, 0x06, 0xc2, 0x52, 0x46, 0xad, 0x23, 0x6f, 0x70, 0xef, 0x5d, 0x07, 0x19, 0xe2, 0xfa, 0x09, 0xc5, 0x0a, 0x42, 0x32, 0x8c, 0x2b, 0xb9, 0x81, 0xc3, 0x5c, 0xe8, 0xec, 0xd8, 0x5d, 0x60, 0x51, 0x7e, 0x2a, 0xfd, 0xaf, 0x0a, 0xd0, 0x68, 0x96, 0x1d, 0x80, 0xdf, 0xdc, 0x84, 0xe2, 0x39, 0x92, 0x5c, 0xab, 0x24, 0x36, 0x7a, 0x72, 0xb2, 0x2a, 0x0a, 0xc0, 0x14, 0x65, 0x75, 0x66, 0xa5, 0x69, 0x89, 0x13, 0x2a, 0x75, 0xd4, 0x25, 0x57, 0xfb, 0x50, 0xc0, 0x96, 0x54, 0x46, 0x1d, 0x05, 0xb3, 0x6c, 0x25, 0xbd, 0x58, 0x50, 0x3f, 0x5a, 0x06, 0xfa, 0x66, 0xb8, 0xb6, 0xcd, 0x7e, 0xfa, 0x8d, 0xaf, 0xe8, 0xd1, 0x0c, 0x6a, 0x54, 0xfb, 0x87, 0x51, 0xd6, 0x09, 0xd8, 0x26, 0x3d, 0x66, 0x54, 0x3b, 0xa0, 0x95, 0xfe, 0xd8, 0x39, 0xba, 0xfb, 0xdd, 0x76, 0x5c, 0x46, 0xa8, 0x4e, 0x69, 0xa5, 0x39, 0xd2, 0x7a, 0xdc, 0x94, 0x04, 0x59, 0x20, 0x67, 0xeb, 0xc1, 0xce, 0xed, 0xe7, 0x64, 0x5d, 0x12, 0x43, 0x32, 0x92, 0xd8, 0x09, 0xd9, 0xf2, 0xf9, 0x1a, 0x88, 0x7d, 0xce, 0x7d, 0xf9, 0x99, 0x6f, 0xf8, 0xae, 0x4d, 0x1c, 0xdd, 0x7b, 0xaf, 0xdc, 0x27, 0x44, 0xa0, 0x63, 0xc5, 0x08, 0xb6, 0x39, 0x36, 0x1e, 0x7a, 0x19, 0x56, 0xbf, 0xd4, 0x98, 0x78, 0xc5, 0xc3, 0x07, 0xb4, 0xb2, 0x51, 0x99, 0x83, 0xf4, 0xc7, 0xc9, 0x89, 0x68, 0x1d, 0xf6, 0xb1, 0x1c, 0xb4, 0x50, 0x7f, 0x59, 0x48, 0xf8, 0xa2, 0xe1, 0x20, 0x63, 0xc9, 0x75, 0x87, 0x00, 0xb8, 0x9a, 0x80, 0x1a, 0x9b, 0x9d, 0xb6, 0xff, 0x9a, 0xd5, 0xb2, 0x62, 0xad, 0x28, 0x50, 0xfe, 0xb2, 0xd0, 0x74, 0x7c, 0xbd, 0x5f, 0xf9, 0x97, 0xaf, 0x01, 0xea, 0x7e, 0x0a, 0x02, 0xf5, 0x79, 0x03, 0x90, 0x1c, 0xd0, 0xd9, 0xc1, 0xae, 0xe9, 0x66, 0xd8, 0x76, 0xb0, 0xf4, 0xc4, 0x32, 0x3b, 0x51, 0xe9, 0x47, 0xaf, 0x26, 0x23, 0xb2, 0x5d, 0x84, 0x08, 0x42, 0x31, 0xc0, 0x6e, 0x04, 0x4d, 0x81, 0x2e, 0xff, 0xf1, 0x17, 0x27, 0x22, 0x9e, 0x0e, 0x85, 0x7b, 0x7b, 0x03, 0x43, 0xaa, 0xf7, 0xb7, 0xee, 0x94, 0xb0, 0x62, 0xac, 0x5c, 0x94, 0x4a, 0x7e, 0x8f, 0x45, 0x93, 0xc2, 0x9e, 0xc2, 0x59, 0xfc, 0x92, 0x45, 0xfc, 0xd5, 0xfb, 0x67, 0xbb, 0x64, 0x29, 0x8a, 0x85, 0xad, 0x9f, 0x78, 0x0b, 0x67, 0xc5, 0x48, 0x1a, 0x03, 0xdd, 0x82, 0x28, 0xe9, 0x38, 0x83, 0x2d, 0x05, 0xaa, 0x22, 0xb4, 0x82, 0x3b, 0x93, 0x31, 0xd5, 0x1f, 0x8c, 0x95, 0xfe, 0xe9, 0xa7, 0x20, 0x0a, 0xfb, 0x08, 0x76, 0xdd, 0x41, 0x3f, 0xf6, 0x2e, 0x1f, 0x6f, 0x47, 0xd3, 0xa7, 0xb0, 0x33, 0x3f, 0x10, 0xb3, 0xb9, 0x49, 0x63, 0xa5, 0x5d, 0x2f, 0x78, 0x55, 0xc3, 0xda, 0x21, 0x98, 0x7c, 0x63, 0xa5, 0xed, 0x20, 0xd7, 0x70, 0x5d, 0x9d, 0x37, 0x08, 0xa5, 0xce, 0xc3, 0x43, 0x97, 0x50, 0x78, 0xb8, 0xbe, 0x91, 0xd8, 0x73, 0x41, 0x29, 0xe9, 0xed, 0x09, 0x6e, 0x80, 0x3b, 0x26, 0x42, 0xbf, 0x85, 0x6f, 0x30, 0xdd, 0xba, 0x69, 0xb8, 0x25, 0x82, 0x6b, 0xe6, 0x42, 0x74, 0xff, 0x2a, 0xb9, 0x8a, 0x8a, 0x63, 0xb7, 0xd1, 0x30, 0x3d, 0x0d, 0x65, 0xf2, 0xbd, 0x79, 0x9d, 0x19, 0x1a, 0x27, 0x83, 0xd8, 0xcf, 0x77, 0x87, 0x2d, 0xee, 0x01, 0x74, 0x08, 0xb7, 0xd7, 0xa2, 0xaf, 0x69, 0x09, 0x6e, 0x61, 0x58, 0x6f, 0xe7, 0x39, 0x40, 0xa2, 0xca, 0x56, 0xd9, 0x4c, 0xb1, 0x39, 0xab, 0xa2, 0x87, 0x6e, 0x24, 0x2e, 0x3f, 0x6f, 0xe8, 0xd2, 0xc5, 0xc5, 0x68, 0x0a, 0x35, 0x70, 0xb6, 0x71, 0x4c, 0x89, 0x98, 0x87, 0x1c, 0x26, 0xdb, 0xb1, 0x03, 0x7e, 0xe9, 0x81, 0xdd, 0x4e, 0x9e, 0x38, 0x79, 0x7b, 0x58, 0x89, 0x4a, 0xf8, 0x4d, 0xa0, 0x5f, 0xea, 0x22, 0x63, 0x95, 0x0a, 0xb9, 0xf8, 0x0c, 0x4b, 0x4a, 0x87, 0xd7, 0xbe, 0xb5, 0x41, 0xf8, 0xb2, 0x16, 0xa1, 0x8b, 0x1f, 0x9a, 0xf1, 0x41, 0x45, 0x92, 0x11, 0x10, 0x90, 0xc6, 0x74, 0x29, 0xbf, 0x0c, 0x6b, 0x2b, 0x45, 0x19, 0xa6, 0x96, 0xef, 0x96, 0xf7, 0x82, 0xc8, 0x77, 0x5a, 0x91, 0x3a, 0x88, 0x33, 0x22, 0x75, 0x48, 0xd6, 0xc7, 0x15, 0xfb, 0x4c, 0xfa ],
-const [ 0xb0, 0x02, 0x50, 0xcc, 0x95, 0x2f, 0x6d, 0xc3, 0x04, 0x26, 0x00, 0xe5, 0x4b, 0x89, 0x6d, 0x17, 0x8c, 0x84, 0x84, 0xf5, 0xbf, 0xbb, 0xa9, 0x6a, 0xfa, 0x81, 0x32, 0x7d, 0xf0, 0x4b, 0x11, 0x6e, 0xb9, 0x64, 0xb3, 0x02, 0xd1, 0xe2, 0x28, 0x1b, 0x62, 0xd8, 0x83, 0x8b, 0xc6, 0xcd, 0x84, 0x2a, 0x47, 0x6d, 0x74, 0x27, 0x2a, 0x7f, 0x51, 0x9b, 0xed, 0x17, 0x2b, 0x64, 0xcc, 0x0d, 0xce, 0x30, 0x8a, 0xad, 0xa1, 0xd8, 0x6d, 0xb0, 0xce, 0xf0, 0x8b, 0x6c, 0xa3, 0x9c, 0x44, 0x47, 0x39, 0xa4, 0x10, 0x71, 0x53, 0xcb, 0x7b, 0xd3, 0x88, 0x5d, 0x6d, 0x42, 0xa5, 0x08, 0xaf, 0xf9, 0x4d, 0xec, 0xab, 0x46, 0xe2, 0xf5, 0x73, 0x83, 0xa9, 0x69, 0x05, 0x48, 0x28, 0xbd, 0xce, 0xdf, 0xd3, 0xad, 0x6c, 0xf8, 0xe8, 0x8c, 0xb8, 0x9e, 0x98, 0xd8, 0x04, 0x6a, 0x67, 0x11, 0xa1, 0xf7, 0xd5, 0xcb, 0xa5, 0x95, 0x3e, 0x03, 0xea, 0x42, 0xff, 0xaf, 0x5a, 0xd6, 0xda, 0x98, 0x6a, 0x7d, 0x9c, 0x6c, 0xe5, 0x6a, 0xfc, 0x0f, 0xeb, 0xca, 0xc7, 0x33, 0x39, 0xf7, 0x3a, 0x28, 0xab, 0xef, 0xaf, 0xf5, 0xfe, 0x04, 0x7d, 0xa7, 0xdb, 0xd5, 0x19, 0xe9, 0x11, 0x7c, 0x81, 0xd5, 0x23, 0x09, 0xda, 0x0a, 0x02, 0x30, 0x57, 0xff, 0x1b, 0x3e, 0x5e, 0x97, 0x94, 0x51, 0xe6, 0xf5, 0xd3, 0xc9, 0x24, 0x91, 0x41, 0xfa, 0x66, 0x8b, 0x4d, 0x23, 0x3f, 0x40, 0xb3, 0xa4, 0xe4, 0x1c, 0xfe, 0x6b, 0xd6, 0xaf, 0x4b, 0xb0, 0xc1, 0x02, 0x51, 0xe2, 0xa4, 0x2b, 0x9e, 0xe1, 0x33, 0x1f, 0x23, 0x6d, 0x7a, 0xc8, 0xf3, 0xdf, 0xc2, 0x57, 0x48, 0x16, 0xb8, 0xdc, 0xc7, 0xb5, 0xcc, 0x13, 0x05, 0x8c, 0xd8, 0x81, 0x49, 0x53, 0x02, 0xc0, 0x94, 0x9e, 0xe3, 0x18, 0xde, 0x0d, 0xe9, 0x4f, 0xa3, 0xc3, 0xf9, 0xc1, 0x9e, 0x1a, 0x59, 0xb3, 0xd5, 0x95, 0xce, 0xe4, 0xd5, 0x17, 0x01, 0x65, 0x3f, 0x52, 0x27, 0xab, 0x83, 0x81, 0xe1, 0xe3, 0xec, 0x5a, 0x61, 0x85, 0xdd, 0x3e, 0xcf, 0x2c, 0x5a, 0xb4, 0xeb, 0xa5, 0xc9, 0x15, 0xf3, 0x45, 0xfa, 0x89, 0xc7, 0x80, 0x66, 0x31, 0x4b, 0xb8, 0xb4, 0xa6, 0x0d, 0x53, 0x82, 0xa3, 0x28, 0x10, 0x61, 0xfe, 0x68, 0x9b, 0x21, 0xdd, 0xae, 0x5f, 0x50, 0x26, 0x96, 0x9b, 0xfd, 0x37, 0x58, 0xb8, 0xc1, 0xd8, 0xec, 0xda, 0x01, 0x6d, 0x72, 0xb5, 0x6d, 0x71, 0xd0, 0xa2, 0xcc, 0x1f, 0x9d, 0xf1, 0xfc, 0x72, 0x3e, 0x81, 0x34, 0x50, 0x4e, 0x8f, 0x8d, 0x02, 0x44, 0xcc, 0xc1, 0xe8, 0x4f, 0xb2, 0x32, 0x6b, 0x85, 0x17, 0x2e, 0x32, 0x3d, 0x03, 0x71, 0x99, 0xb9, 0xbf, 0xeb, 0x5f, 0x09, 0x2e, 0xc4, 0x9e, 0x2b, 0x60, 0x9e, 0x01, 0x77, 0x65, 0x1a, 0x31, 0x3b, 0x5f, 0x9d, 0x90, 0xa2, 0xdb, 0x54, 0x2a, 0xda, 0x62, 0x75, 0xe9, 0x75, 0x4a, 0xc8, 0x08, 0x10, 0xd2, 0x67, 0xc9, 0x33, 0x6f, 0xc2, 0x6b, 0x79, 0x60, 0xe5, 0x56, 0xf1, 0x88, 0xfe, 0x9a, 0xc3, 0x7d, 0x19, 0x97, 0x17, 0xdd, 0x2f, 0xfd, 0x32, 0xe1, 0x5f, 0xf8, 0xe2, 0x34, 0x7b, 0xa4, 0x1d, 0x05, 0xc6, 0xc7, 0xe5, 0x5b, 0xfc, 0xbf, 0x6e, 0xa8, 0x93, 0xb9, 0x83, 0xa2, 0x41, 0x24, 0x26, 0x4e, 0xbe, 0x66, 0x77, 0x5d, 0xcb, 0xcd, 0xd7, 0xbc, 0x73, 0xc8, 0x4c, 0x67, 0x91, 0x57, 0x27, 0x7e, 0x92, 0xc0, 0xe5, 0x9a, 0x7c, 0x84, 0x54, 0x61, 0x2f, 0x91, 0xf7, 0x58, 0xec, 0xb9, 0xaa, 0xf9, 0x13, 0x63, 0x89, 0x06, 0x31, 0x80, 0x0f, 0x1c, 0x39, 0xc1, 0x7b, 0x8b, 0x12, 0x07, 0x78, 0x65, 0x52, 0x1c, 0xfc, 0xd5, 0x4a, 0xa0, 0x71, 0xb2, 0x42, 0x46, 0x13, 0x54, 0x05, 0x40, 0x99, 0xa7, 0xa1, 0xf7, 0x17, 0x7d, 0x68, 0x00, 0x23, 0x29, 0x3a, 0x4b, 0x37, 0x49, 0x07, 0x9e, 0x56, 0xe3, 0x8f, 0x42, 0xf2, 0xb4, 0x6c, 0xfd, 0x0e, 0xc4, 0x53, 0x40, 0xa0, 0x3e, 0x97, 0xa0, 0x39, 0x7f, 0xee, 0x8a, 0xe7, 0x6d, 0x78, 0x33, 0x5b, 0x0a, 0xfd, 0xcf, 0x47, 0x49, 0x77, 0x03, 0x0a, 0x20, 0xd0, 0x9c, 0x8f, 0xde, 0xec, 0x81, 0x72, 0xbf, 0xea, 0xe6, 0x65, 0xbd, 0xa7, 0xc3, 0xd3, 0xaa, 0x84, 0x85, 0xc3, 0x7c, 0x6a, 0x03, 0xfe, 0xe8, 0x0b, 0xb3, 0x74, 0x32, 0x6a, 0x1e, 0xdc, 0x43, 0x9d, 0x91, 0x9b, 0xfc, 0xd1, 0x16, 0xe7, 0xca, 0x90, 0xa2, 0x2c, 0x7a, 0x3f, 0x90, 0xae, 0x4f, 0xeb, 0x4e, 0x71, 0x52, 0x45, 0x57, 0x56, 0xea, 0xea, 0x61, 0x86, 0xac, 0xe8, 0xd7, 0x13, 0x74, 0x7e, 0x89, 0xdd, 0xb5, 0x24, 0xa3, 0xb3, 0x0d, 0xcb, 0xdb, 0xbb, 0x1d, 0x66, 0xef, 0x14, 0x97, 0xa9, 0x4f, 0xb9, 0x98, 0x11, 0x16, 0xa9, 0x39, 0x24, 0x3f, 0x45, 0x61, 0xfa, 0x16, 0xf9, 0xdd, 0xfc, 0xec, 0x1e, 0xb2, 0xec, 0x0f, 0x1f, 0xb1, 0x26, 0xfa, 0xdb, 0x4d, 0x25, 0xc8, 0x4b, 0xaa, 0x48, 0xef, 0x65, 0xf6, 0xd6, 0x2a, 0x40, 0xfc, 0x41, 0xb7, 0x78, 0xf6, 0xa7, 0xc3, 0xd4, 0xa3, 0x9e, 0x23, 0x26, 0x9a, 0x31, 0x44, 0x73, 0xde, 0x26, 0x65, 0x54, 0xb2, 0x83, 0x03, 0x9c, 0xaf, 0x50, 0x95, 0x3b, 0x13, 0x9d, 0x7a, 0x63, 0x5c, 0xc7, 0x30, 0xe9, 0x16, 0xf8, 0xc6, 0xed, 0xf1, 0xed, 0x94, 0xbd, 0x16, 0xfc, 0x29, 0xf7, 0xbb, 0x55, 0x85, 0xee, 0xf5, 0x88, 0x89, 0x4f, 0xce, 0x47, 0xab, 0x05, 0x98, 0x6d, 0xee, 0x59, 0x81, 0x40, 0x12, 0x5e, 0x67, 0xf3, 0x07, 0x8c, 0xed, 0x70, 0xa8, 0xab, 0xce, 0x54, 0xa6, 0xf3, 0x71, 0x3a, 0xc2, 0x71, 0xbe, 0x3c, 0x40, 0xac, 0x31, 0xb7, 0x98, 0x89, 0x2c, 0x4f, 0x6e, 0x6c, 0x92, 0x33, 0xc4, 0xa0, 0x91, 0xa2, 0x6f, 0xf9, 0xbf, 0xaf, 0xc7, 0xb7, 0x69, 0x41, 0xa3, 0xae, 0x27, 0x5d, 0x85, 0xa4, 0xb4, 0xa8, 0x11, 0xfb, 0xfd, 0x27, 0xc4, 0x90, 0x78, 0x4a, 0xe2, 0xe2, 0xb7, 0x29, 0xb0, 0x77, 0x3d, 0x0d, 0xe4, 0x7b, 0x90, 0x32, 0x5a, 0xab, 0x90, 0xcb, 0x08, 0x71, 0x06, 0x47, 0x34, 0x50, 0x80, 0xd3, 0xe4, 0x83, 0x5d, 0x20, 0x97, 0xe1, 0x24, 0x66, 0x32, 0x04, 0x1a, 0xa9, 0x3d, 0xaa, 0x13, 0x3b, 0x4f, 0x5b, 0x88, 0x82, 0xc7, 0x4d, 0xea, 0xfb, 0xbd, 0x84, 0x36, 0x7f, 0x39, 0x3d, 0xca, 0xc5, 0xa2, 0x8d, 0x77, 0x29, 0x79, 0x46, 0xd7, 0xab, 0x47, 0x1a, 0xe0, 0x3b, 0xd3, 0x03, 0xba, 0x34, 0x99, 0xe2, 0xce, 0x26, 0x78, 0x66, 0x20, 0xd8, 0xab, 0x2f, 0xde, 0x8d, 0xfa, 0x33, 0x39, 0x87, 0x31, 0x61, 0x73, 0xca, 0xd2, 0x85, 0x39, 0x22, 0x07, 0x6c, 0x34, 0x67, 0xda, 0x48, 0xdb, 0x00, 0xa8, 0x55, 0x8b, 0xa6, 0xd3, 0xbd, 0xd9, 0x6a, 0xb8, 0xba, 0x27, 0xfa, 0xe1, 0xfa, 0x75, 0x20, 0x7b, 0x47, 0x7a, 0x8b, 0x0a, 0x67, 0xf3, 0xd2, 0x5b, 0x41, 0x3c, 0xb6, 0xba, 0x42, 0x1d, 0xa8, 0x66, 0xff, 0xe6, 0x8b, 0x42, 0x1c, 0xbe, 0xba, 0xcd, 0x6c, 0x38, 0x4d, 0x54, 0x59, 0x27, 0x98, 0x67, 0x87, 0xb4, 0xf5, 0x89, 0xb4, 0xad, 0xc4, 0x2b, 0xe3, 0x20, 0xaf, 0xdc, 0xb9, 0x29, 0x33, 0xba, 0x27, 0x08, 0x5b, 0x2c, 0x49, 0x76, 0xcf, 0xd3, 0x8e, 0x3a, 0x0e, 0xbd, 0x1a, 0xf7, 0xf8, 0xdc, 0x68, 0x48, 0x8f, 0xb7, 0x34, 0x0e, 0xfe, 0x60, 0x98, 0x09, 0xdb, 0xa6, 0x75, 0xa6, 0xa9, 0x8b, 0x14, 0x18, 0xa1, 0xf9, 0x0d, 0xaa, 0xb2, 0xb0, 0x68, 0x54, 0xc6, 0x83, 0x03, 0x8c, 0x47, 0xc4, 0x33, 0x5e, 0xe1, 0xfd, 0xae, 0xbf, 0x8a, 0xe0, 0xa9, 0x1f, 0xc0, 0x81, 0x3d, 0x3d, 0x12, 0xc3, 0x0f, 0x3f, 0xe2, 0x10, 0x30, 0x02, 0x69, 0x4e, 0x42, 0xaf, 0xfc, 0x0e, 0xdd, 0x8f, 0x8d, 0x06, 0x31, 0x20, 0x74, 0xc1, 0xec, 0x68, 0x70, 0x95, 0x5e, 0x89, 0xe8, 0xd6, 0xda, 0x96, 0x77, 0x49, 0x60, 0xa5, 0xa8, 0xdb, 0x7a, 0x25, 0xfe, 0x93, 0x64, 0x72, 0x38, 0xc6, 0x6f, 0xa7, 0xd2, 0x8a, 0xa7, 0xb4, 0xcf, 0x6c, 0xb4, 0xb0, 0xb6, 0x66, 0xfe, 0x70, 0xdb, 0x0b, 0x15, 0x58, 0xdf, 0x05, 0x4f, 0x71, 0x7a, 0xc1, 0xb3, 0xbc, 0x78, 0x69, 0x15, 0xc6, 0x02, 0x13, 0x83, 0x7d, 0x1f, 0x38, 0xe0, 0x42, 0x7b, 0x67, 0xcf, 0x3f, 0x66, 0x3a, 0xd3, 0xfb, 0x1f, 0x8a, 0xb4, 0x2b, 0x53, 0xdf, 0x24, 0xcc, 0xe1, 0x2a, 0xa2, 0x6e, 0xe0, 0xb7, 0x9f, 0xd3, 0xe3, 0x5d, 0xdf, 0xb8, 0x7b, 0xf8, 0x23, 0xf3, 0xfe, 0x19, 0x05, 0xbe, 0x87, 0xfb, 0x23, 0x53, 0x3e, 0xb9, 0x7f, 0xb9, 0xda, 0xbf, 0x26, 0xdd, 0x64, 0x7e, 0x10, 0xe4, 0x3d, 0x65, 0x48, 0xc0, 0x62, 0x0c, 0x4c, 0x01, 0xef, 0xb2, 0xb7, 0xee, 0xe2, 0xe9, 0x1d, 0xd5, 0x22, 0x90, 0x37, 0x9f, 0xc0, 0x02, 0x40, 0xa7, 0x7c, 0x8d, 0x9e, 0xcd, 0x8b, 0x26, 0xc5, 0xc6, 0x97, 0x5a, 0x59, 0xb6, 0x08, 0x88, 0x92, 0x00, 0x82, 0x4e, 0xe5, 0x5c, 0xae, 0x41, 0xe1, 0x2b, 0x3e, 0xe1, 0x57, 0x08, 0x2b, 0xcc, 0xbd, 0xa0, 0x41, 0x31, 0xd4, 0xc3, 0xde, 0x88, 0x89, 0xbb, 0xf7, 0x80, 0x19, 0xdc, 0x5b, 0x39, 0x79, 0x5c, 0x3c, 0xb4, 0xf5, 0x65, 0xeb, 0x88, 0x17, 0x69, 0xe3, 0xd6, 0xca, 0xb6, 0x09, 0x7e, 0xbf, 0x4a, 0x32, 0x93, 0x10, 0xe8, 0xe6, 0x0d, 0x24, 0x6b, 0x64, 0xbe, 0xd2, 0x5b, 0xe5, 0x88, 0xc9, 0xbe, 0x25, 0xcc, 0x2f, 0x30, 0x20, 0x25, 0x88, 0x36, 0x19, 0x57, 0xda, 0xd0, 0xe1, 0x82, 0x0e, 0x4d, 0x56, 0x9c, 0x9a, 0x63, 0x2a, 0x1d, 0x5d, 0x7f, 0xe6, 0xfc, 0xca, 0x5a, 0x2e, 0xdb, 0x49, 0xcd, 0x46, 0x7f, 0xda, 0xe6, 0xd5, 0x82, 0xfc, 0x3b, 0xe9, 0x4c, 0xcd, 0x7e, 0x3c, 0x3f, 0x72, 0x52, 0xb6, 0x32, 0xb9, 0x5d, 0x32, 0x21, 0xfd, 0x9f, 0x85, 0x22, 0x4b, 0x02, 0xbc, 0x9b, 0xc2, 0x32, 0xa6, 0xb3, 0x40, 0xae, 0x93, 0x06, 0x3b, 0x20, 0x5a, 0x9d, 0xec, 0xea, 0xa1, 0x1d, 0xb3, 0x01, 0x58, 0x3e, 0xb7, 0xfe, 0x87, 0x7f, 0xcd, 0x72, 0x4a, 0x19, 0x9b, 0x7a, 0x19, 0x31, 0xfd, 0x94, 0x4d, 0x51, 0xa7, 0xb1, 0xe0, 0x19, 0x0c, 0x8c, 0x75, 0x32, 0x7f, 0x39, 0x98, 0x84, 0x98, 0x01, 0x46, 0xa9, 0xda, 0x6d, 0xb0, 0xa1, 0x92, 0xa1, 0x3c, 0xc7, 0x02, 0xeb, 0xcd, 0x03, 0xbf, 0x9c, 0x44, 0x42, 0x58, 0x17, 0x47, 0x23, 0x38, 0x27, 0x41, 0xf3, 0xce, 0x96, 0xa9, 0xdc, 0xeb, 0xfb, 0x88, 0x59, 0x6b, 0xd3, 0x35, 0xed, 0x17, 0xd3, 0x63, 0x15, 0xca, 0x7d, 0x5e, 0x7b, 0xd3, 0xf2, 0x92, 0x6c, 0x9b, 0x07, 0x4d, 0x8c, 0x88, 0x9a, 0xc6, 0xc9, 0x20, 0x27, 0x5d, 0x8d, 0x72, 0x96, 0x24, 0x38, 0xb1, 0x57, 0x9f, 0xcd, 0x23, 0xb1, 0xc8, 0xeb, 0x39, 0x57, 0x56, 0x00, 0x00, 0x3d, 0x3f, 0xb9, 0xb8, 0xa9, 0x7c, 0xbd, 0xc1, 0x8d, 0x0c, 0x9a, 0xbf, 0x14, 0x3b, 0xff, 0xf6, 0x7b, 0x24, 0x2d, 0xf6, 0x22, 0x75, 0xa8, 0x7d, 0xe3, 0x72, 0x32, 0x99, 0xa2, 0x3d, 0xf9, 0x0d, 0x25, 0x54, 0x10, 0xf6, 0x26, 0x5b, 0x1c, 0xae, 0xa7, 0x1c, 0x50, 0xf1, 0x86, 0xcc, 0x9b, 0x3e, 0x51, 0x8f, 0x1f, 0x80, 0x5b, 0x3f, 0xe6, 0xee, 0x10, 0x69, 0xd0, 0x30, 0x85, 0x99, 0xd0, 0xc3, 0x54, 0xd8, 0x58, 0x9e, 0xa6, 0x72, 0x12, 0x16, 0x91, 0xfd, 0xd1, 0xff, 0xa5, 0x96, 0xc7, 0x14, 0xc1, 0x6e, 0xf8, 0x99, 0x2b, 0x86, 0xee, 0x3e, 0xe0, 0xb6, 0xaf, 0x47, 0x29, 0xf4, 0xec, 0xea, 0x6f, 0xd3, 0x7b, 0xf8, 0x50, 0x4a, 0x08, 0xc0, 0xf3, 0xb7, 0x07, 0x31, 0x98, 0x23, 0xec, 0x3e, 0x73, 0xc8, 0x9f, 0x87, 0xba, 0xd0, 0x2a, 0x35, 0xfd, 0x60, 0xb5, 0x25, 0xb6, 0xd5, 0xb5, 0x4a, 0x21, 0x4e, 0x60, 0x4c, 0x4d, 0x6a, 0x64, 0x75, 0x73, 0x53, 0xd8, 0xce, 0x88, 0xfb, 0x73, 0x85, 0x0e, 0xa5, 0xfc, 0x92, 0x2f, 0xa8, 0x01, 0x9a, 0x0c, 0x6f, 0xcc, 0x14, 0x53, 0xc5, 0x93, 0xaa, 0x0f, 0x4f, 0xef, 0xe2, 0xc5, 0x5a, 0x8f, 0xfd, 0xbc, 0xd8, 0x2e, 0x20, 0x9c, 0xa4, 0xc2, 0xb1, 0x3b, 0x0e, 0xf7, 0x04, 0xb3, 0x93, 0xdb, 0x37, 0xb8, 0xec, 0xdb, 0x5a, 0x28, 0x4b, 0xee, 0xd3, 0xe4, 0xe1, 0x10, 0x01, 0xdf, 0xa3, 0xf2, 0x20, 0x74, 0x4e, 0xf0, 0x6d, 0xfd, 0xa8, 0x43, 0x8a, 0xa1, 0x09, 0x78, 0x23, 0x6d, 0x1b, 0x20, 0xd2, 0xa6, 0xde, 0xca, 0x40, 0x5e, 0xef, 0x2e, 0x8e, 0x46, 0x09, 0xab, 0xf3, 0xc3, 0xcc, 0xf4, 0xa6, 0x44, 0xbd, 0x06, 0xfe, 0xd2, 0x8f, 0x5d, 0xd7, 0xe9, 0xa1, 0x67, 0x39, 0x86, 0xc7, 0x39, 0x34, 0x81, 0x4d, 0x81, 0x0e, 0x1d, 0x39, 0xbb, 0xa1, 0xde, 0xd1, 0xa8, 0xfe, 0x9a, 0x5d, 0xfc, 0x56, 0xd3, 0x2e, 0x57, 0x1b, 0x44, 0xdf, 0x77, 0x62, 0xba, 0xdb, 0xac, 0x8c, 0x25, 0x1f, 0x8c, 0x25, 0xef, 0x42, 0xe7, 0x0c, 0x8c, 0xb2, 0xfe, 0xd4, 0x53, 0x40, 0xef, 0x6b, 0x8c, 0xdf, 0x74, 0xf9, 0xca, 0xa8, 0xcd, 0x0b, 0x7b, 0x22, 0xfb, 0xf1, 0xbd, 0xc1, 0x2f, 0x64, 0x73, 0xac, 0x82, 0x6d, 0x98, 0xc3, 0xe6, 0x82, 0xd4, 0xe1, 0x5d, 0xf1, 0x4d, 0x5e, 0x69, 0x82, 0xc0, 0xd9, 0xc3, 0x57, 0xd0, 0x34, 0x4f, 0x18, 0x9e, 0xdf, 0x50, 0x4d, 0x99, 0x5a, 0xd9, 0x0b, 0x98, 0xf5, 0x84, 0xd3, 0x26, 0xdb, 0x65, 0xb7, 0x1c, 0x4e, 0x41, 0xbe, 0x76, 0x34, 0xfc, 0x8a, 0x5f, 0xd3, 0x51, 0x38, 0x8e, 0xd9, 0xc6, 0x88, 0xd5, 0x9f, 0xde, 0x3e, 0xf7, 0xae, 0x90, 0xc8, 0xbb, 0x83, 0xf8, 0x20, 0x3e, 0x8f, 0x4d, 0xf4, 0x8d, 0x82, 0x13, 0x05, 0x73, 0xc9, 0x91, 0xcd, 0x90, 0x55, 0x86, 0x64, 0xab, 0x9f, 0x18, 0xa4, 0x4a, 0xe9, 0x0d, 0x8c, 0x7f, 0xc6, 0x3d, 0xe2, 0x04, 0xdc, 0x47, 0x1c, 0x8a, 0xe9, 0x84, 0x81, 0x4f, 0x04, 0x39, 0x8c, 0xef, 0x26, 0x11, 0x91, 0x7c, 0xe8, 0xca, 0xa2, 0xd0, 0x8e, 0x2e, 0xb4, 0x22, 0x45, 0x45, 0xfe, 0xd8, 0xa9, 0xc9, 0xa2, 0x9c, 0x8a, 0xda, 0x8f, 0xb2, 0xf0, 0xf3, 0xa6, 0x89, 0x5c, 0x1d, 0x1c, 0x90, 0x51, 0x62, 0x1f, 0x4a, 0x13, 0x85, 0xbc, 0xa5, 0xaf, 0xf0, 0x00, 0x88, 0x3b, 0xee, 0x5d, 0xab, 0x5f, 0x1a, 0x50, 0xab, 0x15, 0x18, 0x41, 0x5e, 0xac, 0x82, 0xab, 0x64, 0x13, 0x25, 0x7c, 0xfe, 0x54, 0x6e, 0xbf, 0x23, 0x5f, 0x1f, 0x78, 0xd1, 0x09, 0x46, 0xcf, 0xa2, 0x54, 0x70, 0x71, 0x9f, 0xf1, 0x1a, 0x34, 0x58, 0x03, 0x68, 0xfa, 0x35, 0x26, 0x1a, 0xd7, 0x07, 0xb0, 0xbb, 0x76, 0xe2, 0x37, 0x1b, 0xb8, 0x2f, 0x53, 0x00, 0x9f, 0xfd, 0xa4, 0x19, 0x6b, 0x98, 0x17, 0x33, 0x02, 0x5d, 0x66, 0xaf, 0x95, 0xcc, 0xde, 0x34, 0x81, 0xdf, 0x65, 0xa1, 0x73, 0x9a, 0xbb, 0x46, 0xd0, 0xe4, 0x00, 0x53, 0x54, 0x95, 0x77, 0x90, 0xf9, 0xd0, 0x89, 0x4f, 0x1a, 0x93, 0x0d, 0xa0, 0xd8, 0x8c, 0xc6, 0xc3, 0xbd, 0x2f, 0x2d, 0xe3, 0x9f, 0x05, 0x71, 0x01, 0xc7, 0x47, 0xbd, 0x2e, 0x53, 0xab, 0xb9, 0xfd, 0xd9, 0x7e, 0x53, 0x38, 0x4d, 0xf3, 0xbf, 0xd2, 0x25, 0xbb, 0xbc, 0x1d, 0xba, 0xd5, 0x1a, 0x3d, 0xf2, 0xa8, 0x79, 0xdd, 0x1c, 0x4f, 0x53, 0x20, 0x1b, 0x34, 0x3d, 0xda, 0xc7, 0xe0, 0x69, 0x01, 0x90, 0x11, 0x70, 0x5e, 0x65, 0x0d, 0x4e, 0x88, 0xd4, 0x37, 0xae, 0x13, 0x72, 0xe0, 0x69, 0x05, 0x7d, 0x5f, 0x49, 0x89, 0xc0, 0x64, 0x12, 0xe8, 0xb7, 0x89, 0xc3, 0xb4, 0xf4, 0x2a, 0x19, 0x47, 0xc1, 0x77, 0x55, 0x6c, 0x07, 0xc7, 0x3f, 0x5b, 0x6e, 0x30, 0x6b, 0xeb, 0xc6, 0x54, 0xbb, 0x03, 0xa6, 0x7d, 0x25, 0x51, 0x52, 0xed, 0xb6, 0x3f, 0xe2, 0x6f, 0xd7, 0x23, 0xa1, 0x32, 0xd0, 0xb6, 0xb4, 0xd7, 0x8a, 0xc8, 0xfc, 0xc9, 0x99, 0x32, 0x3d, 0xcd, 0x79, 0x0b, 0x7f, 0xda, 0x18, 0x1f, 0xb4, 0x2a, 0x95, 0x9c, 0x9c, 0x91, 0x48, 0x0f, 0xe6, 0x0e, 0x02, 0x8f, 0x98, 0xa0, 0x96, 0x38, 0xb0, 0x5a, 0x98, 0xdc, 0x0b, 0xba, 0x64, 0xf4, 0x87, 0x37, 0x62, 0xdd, 0x65, 0x19, 0x89, 0x41, 0xf1, 0x8d, 0x22, 0xd3, 0x64, 0xf9, 0xcf, 0x3f, 0x09, 0x8d, 0xcb, 0x60, 0x9f, 0x1b, 0x73, 0xb4, 0xff, 0x28, 0x06, 0x0e, 0xfe, 0x43, 0xa9, 0x8b, 0x95, 0x95, 0xae, 0xc7, 0x3f, 0xba, 0x15, 0x51, 0xa3, 0xcf, 0x53, 0x5c, 0x73, 0xcc, 0x53, 0xb7, 0x94, 0x14, 0xbb, 0xff, 0x7f, 0x4b, 0x70, 0x13, 0xe7, 0x68, 0x5c, 0xc8, 0x9c, 0x0b, 0x6f, 0xde, 0xaf, 0x10, 0xe3, 0x33, 0xd7, 0x64, 0xc5, 0x37, 0x13, 0x17, 0xb1, 0xa0, 0x91, 0xb3, 0xdd, 0x5f, 0xcf, 0xcd, 0x58, 0xd2, 0x00, 0xd9, 0x94, 0x3b, 0xb1, 0x43, 0x23, 0x71, 0xac, 0xbb, 0xbe, 0xd5, 0x1c, 0xd0, 0x8b, 0x88, 0xf3, 0xc0, 0xa0, 0xdb, 0x89, 0x8e, 0xc3, 0x07, 0x85, 0x56, 0x73, 0x1f, 0x01, 0xde, 0x2d, 0x42, 0xe9, 0x6d, 0xe8, 0x15, 0xa4, 0xe0, 0xe2, 0x70, 0xf7, 0xfa, 0x9e, 0x58, 0x26, 0xfc, 0x2d, 0x2e, 0x5c, 0x75, 0xae, 0x25, 0x4c, 0x5c, 0x11, 0xfa, 0x19, 0x5c, 0x20, 0xdf, 0x73, 0x6f, 0xbf, 0xb8, 0x04, 0xae, 0x72, 0x89, 0x0a, 0x68, 0x21, 0x2f, 0x45, 0x71, 0x18, 0x4f, 0x13, 0xbc, 0x52, 0x8d, 0xda, 0x2c, 0xf7, 0xfe, 0xa6, 0xa8, 0x23, 0xdf, 0x13, 0x6e, 0xe9, 0x87, 0x6e, 0xa9, 0x98, 0x9a, 0x17, 0x45, 0x3c, 0x80, 0x29, 0x02, 0x68, 0x15, 0x5d, 0xc7, 0x33, 0xa2, 0x2c, 0x3a, 0x81, 0x0d, 0x34, 0x8d, 0x84, 0x4c, 0xdd, 0x9a, 0x82, 0x1f, 0x3c, 0x33, 0xd8, 0xff, 0x38, 0xb3, 0x3f, 0x51, 0xeb, 0xd9, 0x4e, 0xe0, 0x4b, 0xd7, 0x40, 0x8a, 0x09, 0xa5, 0xf8, 0x3a, 0xb9, 0x9b, 0x42, 0x16, 0x34, 0x3f, 0x5c, 0xf9, 0x3a, 0x5c, 0xb5, 0x23, 0x5c, 0x54, 0xf4, 0x2f, 0x19, 0xb6, 0x3c, 0x46, 0x48, 0x13, 0xae, 0x93, 0xb6, 0x0e, 0x30, 0xf6, 0x0f, 0xb3, 0x6d, 0xfd, 0x02, 0x0a, 0x1d, 0x10, 0xa0, 0xeb, 0x87, 0xeb, 0x05, 0x13, 0x44, 0x52, 0x3b, 0x78, 0x45, 0xff, 0x5b, 0xda, 0x18, 0xe0, 0xf5, 0x9b, 0x66, 0x7f, 0xb2, 0xd0, 0xc1, 0xc2, 0x38, 0x98, 0x9c, 0xd4, 0x4e, 0xad, 0x9b, 0x63, 0x41, 0x38, 0x0e, 0x0c, 0x86, 0xea, 0xb8, 0x13, 0xa0, 0x48, 0xd4, 0x58, 0x45, 0x46, 0x5a, 0x86, 0xbc, 0x18, 0x7e, 0x8e, 0x89, 0x45, 0x79, 0x54, 0x4c, 0xfd, 0x8d, 0xa7, 0xe7, 0xac, 0x43, 0x77, 0xdf, 0xcf, 0xf8, 0x42, 0x05, 0x07, 0x97, 0xd0, 0x55, 0x6b, 0xa8, 0x20, 0x1e, 0x23, 0x8a, 0xa2, 0x63, 0x33, 0xfc, 0xa7, 0x81, 0x94, 0xe3, 0x15, 0x13, 0x89, 0x47, 0x5f, 0x13, 0x30, 0x9e, 0xb4, 0x42, 0x57, 0x4d, 0x77, 0xc9, 0x92, 0x6c, 0xf0, 0x20, 0x8a, 0xc9, 0x41, 0x2f, 0x98, 0x30, 0x9b, 0xb3, 0x93, 0xea, 0xb1, 0xe4, 0xe6, 0x84, 0x6d, 0x55, 0xe5, 0xd2, 0xe2, 0x1b, 0x61, 0x32, 0x83, 0x31, 0x79, 0x15, 0x92, 0x1b, 0xb4, 0xbc, 0xdb, 0xca, 0x4d, 0x40, 0xa1, 0xc0, 0xce, 0xd5, 0xd9, 0x74, 0xe0, 0x4f, 0x96, 0xf8, 0x62, 0xe6, 0xc5, 0xd9, 0xb8, 0x36, 0x1a, 0x47, 0x66, 0x8a, 0x4a, 0x75, 0xdd, 0x59, 0x7b, 0x43, 0x94, 0x11, 0xf8, 0x1b, 0x5b, 0x14, 0x2a, 0x18, 0xed, 0x00, 0xc4, 0x6e, 0xc4, 0x34, 0x3d, 0x06, 0x31, 0x90, 0x83, 0x68, 0xab, 0x7b, 0xee, 0xde, 0x68, 0x2b, 0x72, 0xd6, 0x2a, 0x21, 0x1a, 0x89, 0x5c, 0xf2, 0xb1, 0xda, 0x5d, 0x4d, 0xc2, 0x81, 0x1c, 0x3a, 0xc4, 0x68, 0xe5, 0xa0, 0x8e, 0x55, 0x7a, 0x0a, 0x11, 0xca, 0x66, 0xaa, 0x45, 0x2a, 0x8e, 0x9f, 0x64, 0x1c, 0x09, 0x73, 0x57, 0x34, 0x31, 0xe8, 0x6d, 0xd1, 0xfa, 0xf4, 0x53, 0x41, 0x83, 0x0a, 0x41, 0x2c, 0xeb, 0x9b, 0x71, 0x2f, 0x66, 0xdd, 0xd5, 0xc7, 0x90, 0xcb, 0x09, 0x71, 0x01, 0x6d, 0x87, 0x0f, 0x21, 0x59, 0x1a, 0x8e, 0x3d, 0x7a, 0x95, 0xc6, 0xdb, 0x10, 0xc4, 0xa1, 0x4b, 0xf8, 0xa3, 0x80, 0x7f, 0x2e, 0xce, 0xda, 0x1d, 0x90, 0x39, 0x26, 0xd1, 0xe4, 0x21, 0xfc, 0xe8, 0x1d, 0x42, 0x77, 0x1b, 0xda, 0x4b, 0xdd, 0xa8, 0x30, 0x8f, 0x82, 0xa8, 0xa9, 0xfd, 0xe9, 0x9c, 0x8c, 0x52, 0x2d, 0x49, 0x5f, 0x8d, 0x9f, 0xc6, 0xab, 0xa3, 0xb1, 0xd3, 0xff, 0x75, 0x13, 0x6c, 0x37, 0xff, 0x1b, 0x9e, 0xfe, 0xd2, 0x6a, 0x9a, 0x92, 0xc4, 0xcd, 0x08, 0xc8, 0xe6, 0x61, 0x9d, 0x4f, 0xb6, 0xfb, 0xf0, 0x38, 0x96, 0xc6, 0x89, 0xb6, 0x7d, 0x2e, 0x3b, 0x23, 0xed, 0xfd, 0xb5, 0x44, 0x25, 0xc4, 0x53, 0xce, 0x97, 0x7d, 0x3a, 0x29, 0x9c, 0x6e, 0xa3, 0x73, 0x67, 0x51, 0x77, 0xc8, 0x37, 0xb1, 0x1d, 0xc1, 0xd1, 0x97, 0x8f, 0x3a, 0x2e, 0x66, 0xb4, 0x59, 0x71, 0x04, 0xea, 0xcc, 0x1c, 0x3a, 0xe1, 0x51, 0x82, 0x5e, 0xb0, 0x7c, 0x80, 0x2f, 0x22, 0xb5, 0x68, 0x00, 0x51, 0x80, 0x3e, 0x19, 0x77, 0x01, 0x27, 0x5a, 0x00, 0xbf, 0x1e, 0x21, 0xe4, 0xa8, 0xe9, 0x6e, 0x33, 0x55, 0x4b, 0x45, 0xf2, 0x90, 0x7c, 0x54, 0x25, 0x13, 0xd6, 0xd6, 0x2d, 0x93, 0xd1, 0xb7, 0x54, 0xfd, 0x31, 0xf9, 0xa7, 0x00, 0x7e, 0x56, 0x04, 0xcb, 0xb5, 0x27, 0x73, 0x18, 0x3d, 0x84, 0xb9, 0x69, 0x1c, 0xad, 0x2b, 0x91, 0x6b, 0xa8, 0xc1, 0x77, 0x07, 0x2c, 0x6b, 0x17, 0x8a, 0xbe, 0xa8, 0xc9, 0x7a, 0x1a, 0x54, 0xc6, 0xc0, 0xd4, 0xc1, 0xe8, 0x5b, 0x3f, 0x0a, 0xb1, 0x55, 0x8e, 0xa4, 0x8f, 0xf6, 0x39, 0x36, 0x5e, 0x39, 0xa3, 0xab, 0x2f, 0x7c, 0xf9, 0x85, 0x48, 0x7b, 0x5d, 0x74, 0x6c, 0x7f, 0x44, 0x27, 0x5c, 0xd3, 0x1c, 0x62, 0x9d, 0x78, 0x33, 0x51, 0x7c, 0x19, 0xd4, 0x1c, 0x50, 0x41, 0xb3, 0xbb, 0xff, 0xcc, 0x8a, 0x0c, 0xc3, 0x9c, 0x05, 0x22, 0x2e, 0x8d, 0xdc, 0xe0, 0x6c, 0xaa, 0x3e, 0xc7, 0xc9, 0xa1, 0x76, 0x0d, 0x72, 0x74, 0xc9, 0xef, 0x80, 0x72, 0x9d, 0x48, 0x32, 0x66, 0xe1, 0x61, 0x7a, 0x0e, 0xa8, 0x0b, 0xbc, 0xce, 0x17, 0xeb, 0xd2, 0xa6, 0x82, 0x16, 0x53, 0x62, 0xd2, 0xde, 0x15, 0x10, 0x2a, 0xeb, 0xf0, 0xb7, 0xca, 0x8d, 0xc5, 0x46, 0x33, 0x50, 0xbf, 0xcb, 0x8b, 0xd1, 0xd9, 0xe5, 0x44, 0xd1, 0xa1, 0x7c, 0xf9, 0x88, 0x3b, 0xaf, 0x98, 0x3b, 0xa8, 0x0e, 0xc6, 0x11, 0x49, 0x0a, 0x7f, 0x23, 0x9e, 0xa9, 0xfd, 0xd2, 0x54, 0x7f, 0xdc, 0x5d, 0x7f, 0xd9, 0x7b, 0xb3, 0x24, 0x3b, 0xa5, 0x85, 0xfa, 0x0d, 0x71, 0xa0, 0x71, 0x91, 0x66, 0x7a, 0xf4, 0x18, 0xe3, 0x0a, 0x6b, 0x76, 0xbe, 0xdd, 0x05, 0xb3, 0x2c, 0x67, 0x34, 0x03, 0xe1, 0x97, 0xf9, 0xf8, 0x78, 0xae, 0x61, 0xf7, 0x14, 0x50, 0x50, 0xe9, 0x48, 0xdb, 0x7d, 0x32, 0x34, 0xf9, 0xbe, 0xe7, 0xf1, 0x71, 0x86, 0x3b, 0x30, 0x43, 0xab, 0x3b, 0x1d, 0xf3, 0x6d, 0xbc, 0x8a, 0x25, 0xb5, 0x91, 0x49, 0x6a, 0x9a, 0x01, 0xd9, 0x5a, 0x29, 0x78, 0x46, 0xe3, 0x66, 0x7c, 0x4a, 0xe0, 0x8e, 0xe3, 0xb8, 0xed, 0x9f, 0x43, 0x1a, 0x7a, 0x1a, 0xab, 0x99, 0x1f, 0x08, 0x90, 0x1e, 0x2f, 0x3b, 0x0a, 0xb7, 0x90, 0xd6, 0x41, 0x3c, 0xca, 0x10, 0x21, 0x32, 0x5d, 0x34, 0x56, 0xef, 0x58, 0xec, 0x74, 0xff, 0x27, 0xc0, 0x75, 0xc7, 0xad, 0xda, 0x69, 0x68, 0x93, 0x0c, 0x69, 0xe7, 0xdf, 0x14, 0xcd, 0x8a, 0xc8, 0x1e, 0x9f, 0x85, 0xc8, 0x8a, 0x4f, 0xd5, 0xf4, 0xf0, 0xa7, 0x6d, 0x89, 0x61, 0x02, 0x90, 0xc7, 0xf0, 0xb9, 0x7e, 0x02, 0x71, 0xdf, 0x52, 0xf6, 0x81, 0x2e, 0x2b, 0x5b, 0xc7, 0x40, 0x8a, 0xb9, 0x79, 0x03, 0xfb, 0x7e, 0x21, 0x67, 0xf8, 0x4e, 0xa1, 0x59, 0x0a, 0x9a, 0x74, 0xf5, 0x31, 0x74, 0x38, 0xf7, 0x86, 0xa1, 0x69, 0x73, 0x1f, 0xf0, 0x70, 0xc7, 0x33, 0xcb, 0xdc, 0xcd, 0x7e, 0x0c, 0xef, 0x55, 0xe7, 0x12, 0x5c, 0xd2, 0x61, 0x13, 0x4f, 0x53, 0x0f, 0xb3, 0xae, 0xb5, 0xab, 0xd6, 0x9e, 0x17, 0x28, 0xb3, 0x4a, 0x8f, 0x96, 0x2b, 0xe0, 0x1b, 0x47, 0x58, 0xdb, 0xdb, 0x30, 0x68, 0x88, 0x7d, 0x91, 0xac, 0xc3, 0xf8, 0xd9, 0xec, 0x02, 0x7d, 0xc4, 0xfe, 0x96, 0xaa, 0xc6, 0x96, 0x2d, 0x02, 0xac, 0x60, 0x9a, 0x9a, 0x81, 0x4c, 0xd9, 0x14, 0xae, 0x2a, 0x4d, 0xd1, 0x66, 0x76, 0x4d, 0x63, 0x41, 0x75, 0xdf, 0x41, 0x27, 0x81, 0xc3, 0xbf, 0x70, 0xa0, 0xb4, 0x3d, 0x49, 0x5c, 0xea, 0x9e, 0x5a, 0xcf, 0xe3, 0xfc, 0xa6, 0xfe, 0x63, 0x99, 0xb2, 0x68, 0xba, 0x19, 0xe9, 0xde, 0x45, 0xef, 0x3f, 0x94, 0x37, 0x16, 0x15, 0x79, 0x99, 0x01, 0x5c, 0xc4, 0x90, 0xd4, 0xfe, 0xcf, 0xdf, 0xd4, 0x79, 0x29, 0xac, 0x1c, 0xcd, 0xe7, 0x87, 0x93, 0x99, 0x3a, 0xa8, 0x1a, 0x81, 0x47, 0x78, 0x0a, 0xd2, 0x32, 0x54, 0xdd, 0x69, 0x7c, 0x8d, 0x2b, 0xd1, 0x90, 0xb3, 0xd9, 0xab, 0x98, 0x13, 0x8d, 0x53, 0x95, 0x7e, 0x64, 0xc0, 0xaf, 0x4c, 0xe8, 0xac, 0xc9, 0xa1, 0x3c, 0xf5, 0x59, 0xef, 0x9a, 0x44, 0x77, 0xbc, 0x00, 0xec, 0x34, 0xa6, 0x25, 0x15, 0x2c, 0xa4, 0xb2, 0x19, 0x5f, 0x8e, 0xaf, 0x2e, 0x3c, 0xe0, 0x3b, 0x46, 0xff, 0xbb, 0x81 ],
-const [ 0xfc, 0xee, 0x0a, 0x4b, 0x78, 0x17, 0xf8, 0x84, 0x02, 0x16, 0x63, 0x50, 0xbb, 0xda, 0x8a, 0xc2, 0xf4, 0xbe, 0x6e, 0xa3, 0xe6, 0x69, 0x2c, 0x72, 0xa3, 0xf2, 0x89, 0xa9, 0x4d, 0x48, 0xcf, 0x42, 0x86, 0xd2, 0xd8, 0x7a, 0x27, 0x52, 0x68, 0xd5, 0x35, 0x0f, 0xc0, 0x62, 0x11, 0x33, 0x6f, 0x40, 0xee, 0x72, 0x6c, 0x61, 0x88, 0xec, 0x62, 0x8e, 0x14, 0x55, 0x4b, 0xab, 0x72, 0x53, 0x40, 0x3d, 0xaa, 0x27, 0x8f, 0x29, 0x96, 0x90, 0x0f, 0xbe, 0xdc, 0xec, 0xb0, 0xf6, 0x20, 0xa1, 0x56, 0xf9, 0x77, 0xbb, 0xe8, 0xe3, 0x1e, 0xd7, 0xa3, 0xc7, 0x6c, 0x3f, 0xb5, 0xf4, 0x05, 0x56, 0x07, 0x77, 0x51, 0x37, 0x5a, 0xe1, 0x2c, 0x99, 0x95, 0x4a, 0xdf, 0xf6, 0x5d, 0x95, 0x4f, 0xec, 0xe7, 0xf6, 0x75, 0xe3, 0x0a, 0xb2, 0x0e, 0xf0, 0x99, 0x26, 0x94, 0xf9, 0xef, 0x0b, 0x6c, 0x1a, 0xcb, 0xf8, 0x61, 0x48, 0x5f, 0x28, 0x51, 0x34, 0xa3, 0x7e, 0x26, 0x72, 0xef, 0xc6, 0x08, 0xdb, 0xc9, 0x3e, 0xd2, 0x30, 0xfc, 0x55, 0xc2, 0x00, 0xea, 0xb2, 0x74, 0xcb, 0x22, 0x78, 0x11, 0x67, 0x35, 0xc9, 0xc4, 0xa3, 0xc6, 0x89, 0x6d, 0x2b, 0xe1, 0x64, 0x9a, 0xab, 0x8e, 0x12, 0xb3, 0x37, 0xa5, 0xd9, 0x74, 0xeb, 0xe3, 0x54, 0xa0, 0xce, 0x3e, 0x74, 0xf4, 0xfc, 0x76, 0xc4, 0x5a, 0x05, 0xed, 0xf1, 0x60, 0x90, 0xb8, 0x89, 0xe8, 0x44, 0xf6, 0x03, 0x21, 0xe8, 0x60, 0x00, 0xb6, 0xc8, 0x22, 0xd0, 0x45, 0x5b, 0xea, 0x38, 0x12, 0x24, 0x3e, 0x72, 0xfd, 0xd6, 0x12, 0x76, 0xb1, 0xbb, 0x9a, 0x78, 0x1f, 0x56, 0x5d, 0xb2, 0x2b, 0x48, 0x8b, 0x63, 0xa4, 0x70, 0x90, 0x18, 0x7a, 0x56, 0xe9, 0x2a, 0x2b, 0xca, 0x36, 0x88, 0x7f, 0xc8, 0x91, 0xb6, 0x75, 0x9f, 0x1f, 0x16, 0x7d, 0x52, 0xe4, 0x67, 0xe7, 0x3f, 0xdc, 0x8b, 0x9c, 0xfe, 0x47, 0x8d, 0x0c, 0x8c, 0x44, 0xe2, 0x67, 0xa9, 0xa1, 0xef, 0x10, 0x7e, 0xf2, 0xcc, 0x4f, 0x83, 0xe0, 0x48, 0x46, 0xa0, 0xc4, 0x2d, 0x26, 0x93, 0x75, 0xc5, 0xa2, 0x91, 0x5d, 0x9c, 0xa4, 0x30, 0xd3, 0x88, 0x3f, 0x84, 0xa5, 0xe7, 0xe6, 0x88, 0xf3, 0x28, 0xdb, 0xc0, 0x44, 0x8d, 0xe9, 0x1d, 0xd3, 0x2e, 0x56, 0x21, 0x2a, 0x42, 0x14, 0x43, 0xf2, 0x9a, 0x37, 0x95, 0x0a, 0x6e, 0xac, 0xa4, 0xd6, 0x5c, 0x27, 0xa0, 0xda, 0xae, 0x5d, 0xbd, 0x87, 0xdc, 0x74, 0xd8, 0x54, 0x51, 0xb7, 0x5e, 0x11, 0x72, 0x8f, 0x6a, 0x78, 0xdd, 0xae, 0x2d, 0x06, 0xee, 0x8e, 0x93, 0x09, 0x88, 0x1a, 0x23, 0xf9, 0x12, 0xab, 0x28, 0x0b, 0xbf, 0x35, 0x0e, 0x04, 0x13, 0xc3, 0x0e, 0x4b, 0xa3, 0x20, 0x0e, 0x43, 0x1c, 0xd7, 0xc2, 0xd7, 0x86, 0x5e, 0x18, 0x57, 0xca, 0x8f, 0xd3, 0x82, 0x72, 0x57, 0x75, 0xe4, 0xb1, 0xb2, 0x63, 0x62, 0xa3, 0xd7, 0x44, 0x13, 0xd5, 0xaf, 0xaa, 0x51, 0x08, 0x8c, 0xf4, 0x10, 0x32, 0x18, 0x73, 0x6f, 0xc6, 0x8c, 0xcb, 0x8d, 0x35, 0x22, 0x9c, 0x9e, 0xb5, 0xcc, 0x62, 0x3e, 0x41, 0x26, 0x9a, 0x04, 0xe1, 0xa9, 0x27, 0x5b, 0x2b, 0x22, 0xf3, 0x8d, 0x0a, 0x63, 0xd9, 0x21, 0xbe, 0x39, 0xc3, 0x67, 0x24, 0x9e, 0x0f, 0x51, 0x38, 0x2f, 0x38, 0x84, 0xd8, 0xe0, 0xb2, 0xaf, 0xcb, 0xee, 0x15, 0x1c, 0x01, 0x15, 0x7e, 0x85, 0x1c, 0x04, 0x32, 0x28, 0x30, 0x0e, 0x85, 0x1d, 0xc7, 0x22, 0xfb, 0xe8, 0x29, 0xfd, 0xac, 0x4b, 0xda, 0x9e, 0xed, 0x5e, 0x63, 0xfa, 0x2c, 0xe1, 0x55, 0xf2, 0x1c, 0xd0, 0x8c, 0x82, 0x13, 0x38, 0xb1, 0x3b, 0xb0, 0x4a, 0x02, 0xf3, 0xc0, 0xad, 0x56, 0xbb, 0x62, 0x19, 0x5b, 0x11, 0x6a, 0x22, 0x23, 0x57, 0x04, 0x51, 0xdf, 0x84, 0x9a, 0x79, 0xea, 0x1a, 0xf7, 0x48, 0x09, 0x58, 0xac, 0x1d, 0xf1, 0xb0, 0xb2, 0x19, 0x09, 0x7b, 0x52, 0x79, 0x72, 0xec, 0x42, 0x23, 0x45, 0x42, 0x11, 0x7e, 0x1b, 0x42, 0xc4, 0x87, 0xd3, 0xe5, 0xc2, 0x22, 0x8f, 0x4e, 0xed, 0xad, 0x00, 0xfe, 0x12, 0xdb, 0xe4, 0x4b, 0x83, 0xc0, 0xcc, 0x0e, 0x02, 0x28, 0x23, 0x9d, 0xe1, 0x2d, 0x6c, 0xf9, 0x68, 0x09, 0xcb, 0x48, 0x77, 0x28, 0xc7, 0x85, 0x6c, 0x82, 0x4e, 0x76, 0x47, 0x27, 0xf9, 0xde, 0x0d, 0x1b, 0x92, 0xf5, 0x6a, 0x65, 0xd4, 0x15, 0x99, 0x63, 0x71, 0xb6, 0x89, 0x60, 0x5a, 0x9c, 0x38, 0x68, 0x3a, 0x4f, 0x63, 0x5b, 0x43, 0xcc, 0x62, 0x41, 0x2e, 0x7a, 0x4e, 0xdd, 0x7d, 0x5f, 0x64, 0x85, 0x04, 0x94, 0xae, 0x31, 0xa7, 0xf6, 0xe0, 0xd1, 0x65, 0x1f, 0x80, 0xe4, 0x96, 0x95, 0x49, 0x46, 0x70, 0x40, 0xd2, 0x49, 0xd0, 0x22, 0x6b, 0x08, 0x38, 0x42, 0x47, 0xf8, 0x13, 0xe9, 0xe1, 0xc0, 0x41, 0x11, 0x98, 0x4b, 0xcf, 0x1b, 0x9c, 0x1b, 0x06, 0xc0, 0x0e, 0xe0, 0xa8, 0x4a, 0x63, 0x49, 0x76, 0x04, 0x0a, 0x1a, 0xf5, 0xef, 0x4e, 0x7f, 0x72, 0xb6, 0x7d, 0x9f, 0x44, 0xe4, 0x4a, 0x75, 0x51, 0x55, 0x70, 0xdb, 0xd4, 0xea, 0x98, 0xe8, 0x5d, 0x81, 0x7d, 0x7c, 0x19, 0x25, 0x4e, 0x19, 0x53, 0x81, 0x54, 0xf5, 0x3b, 0x9b, 0xd4, 0x4d, 0xe6, 0xbf, 0x37, 0xfb, 0x97, 0xb8, 0x68, 0x4b, 0x3d, 0x47, 0x7e, 0x0b, 0x3c, 0xcd, 0x9b, 0xe1, 0x70, 0x4b, 0x13, 0xe2, 0x6f, 0x8c, 0xd1, 0x5f, 0x0f, 0xa1, 0xf7, 0x02, 0x29, 0x8e, 0xc5, 0x1a, 0x9c, 0x43, 0xbc, 0x34, 0x94, 0xce, 0x03, 0xeb, 0x0c, 0xce, 0x09, 0x01, 0x91, 0x2b, 0x6c, 0xae, 0x49, 0x04, 0x1a, 0x37, 0x35, 0xe9, 0xb6, 0xc3, 0xb3, 0x4b, 0x3d, 0x6b, 0x47, 0x30, 0xe9, 0x90, 0x9a, 0x2b, 0x55, 0x71, 0xc3, 0x8c, 0xe3, 0xfc, 0xc6, 0xd4, 0x5b, 0xe5, 0x5a, 0x6c, 0xd4, 0xf6, 0xf0, 0x96, 0xd8, 0xa6, 0xf0, 0xa3, 0xc3, 0xec, 0x46, 0x67, 0x6c, 0x55, 0x1d, 0xea, 0x07, 0x55, 0xea, 0x60, 0x4a, 0xda, 0xad, 0x5b, 0xcf, 0x27, 0x74, 0x40, 0xba, 0xe0, 0x20, 0xf7, 0x9b, 0x61, 0x6b, 0xe7, 0x96, 0x54, 0x2a, 0x22, 0xc1, 0x83, 0xd0, 0xdc, 0xcd, 0xea, 0x34, 0x22, 0xe9, 0x11, 0x94, 0xc9, 0xe3, 0x99, 0xd9, 0xa4, 0x90, 0x14, 0x1c, 0xfa, 0x6f, 0x1a, 0x6a, 0x36, 0x89, 0x99, 0xc4, 0xe1, 0x9b, 0x6c, 0x6a, 0xce, 0x77, 0x2f, 0x5a, 0x94, 0xa8, 0x52, 0x13, 0x41, 0x55, 0x6d, 0x9e, 0x4d, 0x68, 0xd3, 0xcf, 0xcd, 0xee, 0x6a, 0xc9, 0xe9, 0xc1, 0xba, 0xc0, 0x90, 0x65, 0x43, 0x03, 0x6b, 0x31, 0x14, 0x39, 0x0f, 0xaf, 0x99, 0xea, 0x76, 0x45, 0xb5, 0x42, 0xb0, 0x14, 0x10, 0x12, 0xd6, 0x20, 0xb3, 0x18, 0x40, 0xb1, 0xd2, 0x80, 0xf7, 0xfa, 0xe8, 0xaa, 0x6d, 0xf9, 0x0a, 0x2e, 0x6c, 0x9e, 0x74, 0x1e, 0x4d, 0x2f, 0x69, 0x8b, 0x6a, 0xeb, 0x3a, 0x4a, 0xd6, 0xee, 0xa4, 0xf7, 0x4b, 0x54, 0x5e, 0x3b, 0x63, 0xa1, 0xf3, 0x4b, 0x0b, 0x61, 0xce, 0xb1, 0x35, 0x0b, 0x93, 0x4f, 0xce, 0x2b, 0xb6, 0xa1, 0xf0, 0xc0, 0x46, 0x42, 0x58, 0xe3, 0x09, 0xb2, 0x1a, 0xaa, 0xce, 0x56, 0x93, 0x4c, 0xff, 0xc0, 0xa0, 0x86, 0x76, 0x31, 0x0d, 0x3d, 0x91, 0x5c, 0x51, 0x64, 0x89, 0x6d, 0x78, 0x20, 0xff, 0x4a, 0x60, 0x2a, 0xd8, 0x19, 0x28, 0x76, 0x4b, 0x02, 0xe6, 0x12, 0x38, 0x36, 0x98, 0x50, 0xbc, 0x30, 0x5e, 0x27, 0x02, 0x3b, 0xe6, 0xd7, 0x5c, 0x34, 0x27, 0xcc, 0x92, 0x91, 0x52, 0xc5, 0x7a, 0xa2, 0x05, 0x35, 0xc8, 0x17, 0xc2, 0xe9, 0x28, 0xc3, 0xa1, 0xec, 0x8a, 0x9f, 0x41, 0xa8, 0xbd, 0x12, 0x04, 0x4d, 0x40, 0x6f, 0x7c, 0x77, 0x55, 0xc0, 0x20, 0x0b, 0x56, 0xc2, 0x44, 0x61, 0x4c, 0x30, 0x48, 0xa9, 0xbe, 0x44, 0x0f, 0x87, 0xc7, 0x7c, 0xb2, 0x01, 0x6b, 0x9a, 0x76, 0x9b, 0x2b, 0xee, 0xfc, 0xc0, 0xd7, 0xd7, 0xb8, 0x64, 0xa4, 0x88, 0xa4, 0xe8, 0x7f, 0x08, 0x36, 0x3e, 0xa0, 0x7c, 0x8f, 0x4d, 0x61, 0xa9, 0xf5, 0x97, 0x51, 0xb5, 0x83, 0x19, 0x84, 0x2d, 0x1f, 0x72, 0x2e, 0x4d, 0xad, 0x48, 0x70, 0x7b, 0x82, 0xe8, 0x72, 0x14, 0x1c, 0x2c, 0xb2, 0x6b, 0x10, 0xa2, 0x9c, 0x0f, 0x43, 0xea, 0x5a, 0x4d, 0x5d, 0x60, 0xed, 0xf6, 0x7b, 0xfc, 0x7d, 0x63, 0x25, 0x76, 0xed, 0xb5, 0x7f, 0xad, 0xb3, 0x61, 0xc3, 0x49, 0xe7, 0xed, 0xee, 0x9f, 0x99, 0xf4, 0xba, 0xd6, 0x68, 0x70, 0xcd, 0x48, 0x50, 0x39, 0x30, 0x2b, 0xc4, 0xc8, 0x02, 0x71, 0xfd, 0x41, 0x6e, 0xec, 0x91, 0xb1, 0xda, 0xb6, 0x47, 0x93, 0x61, 0xd0, 0x2a, 0x9a, 0x84, 0x09, 0xdc, 0xaa, 0x1c, 0x22, 0x2d, 0x27, 0x93, 0x2f, 0xec, 0x73, 0x54, 0x40, 0xfe, 0xb2, 0x80, 0x41, 0xac, 0xd1, 0xe3, 0x1f, 0x41, 0xc6, 0x26, 0x2d, 0xd5, 0x19, 0x46, 0xc5, 0x64, 0xa3, 0x45, 0x32, 0x23, 0x96, 0x1f, 0xcd, 0x13, 0xbd, 0xff, 0x67, 0xd6, 0x05, 0xb3, 0xe7, 0xc2, 0x3d, 0x5d, 0x34, 0x34, 0x1a, 0x6c, 0x56, 0x26, 0x7e, 0xcb, 0xd8, 0x04, 0xf9, 0x58, 0x70, 0xbc, 0x91, 0x98, 0xe2, 0x15, 0xbe, 0xa9, 0x21, 0x41, 0xb9, 0x78, 0xb7, 0xb5, 0xf6, 0x34, 0x68, 0x38, 0xef, 0x02, 0x12, 0x3a, 0x24, 0xf2, 0xd8, 0x68, 0x60, 0x31, 0x7f, 0x7d, 0x3d, 0x81, 0x18, 0x5b, 0xea, 0xe7, 0xe0, 0x5a, 0x2c, 0xa3, 0x64, 0xe0, 0xa3, 0x65, 0xe9, 0x32, 0x4f, 0xbe, 0x0a, 0x89, 0x53, 0xd5, 0xa3, 0x69, 0xf8, 0x5b, 0xee, 0x2e, 0xf4, 0xc1, 0xec, 0xe8, 0xed, 0xa8, 0x07, 0x68, 0x39, 0x99, 0xf5, 0x9b, 0xe8, 0xf6, 0xdf, 0x17, 0x04, 0x30, 0xc3, 0xf4, 0x17, 0x3b, 0x17, 0xdd, 0xee, 0x3f, 0xaf, 0x66, 0x9d, 0x91, 0xe0, 0xa0, 0xc3, 0xe1, 0xe6, 0xec, 0x0f, 0xb5, 0x83, 0x0c, 0x03, 0x16, 0xe9, 0x80, 0xf8, 0x88, 0xda, 0x0f, 0x63, 0x40, 0x0e, 0xa4, 0x56, 0x92, 0xd5, 0x5b, 0x4a, 0xa9, 0xfd, 0xdc, 0x1b, 0x7a, 0xf6, 0xe8, 0x54, 0xfa, 0x34, 0x31, 0xad, 0x8f, 0xd5, 0x6f, 0xd2, 0xc5, 0x84, 0xb0, 0x66, 0x43, 0x9d, 0xef, 0x48, 0xfd, 0x91, 0xe9, 0x15, 0xab, 0x8d, 0x2c, 0xee, 0x79, 0x56, 0x71, 0x7b, 0x00, 0x78, 0x2b, 0x2f, 0x75, 0x9f, 0x60, 0xce, 0x20, 0x45, 0xb8, 0x2d, 0x10, 0x8d, 0xd4, 0x3a, 0x0e, 0x6f, 0xe0, 0x3b, 0xcf, 0x16, 0x6c, 0x5b, 0x6e, 0x86, 0x77, 0x62, 0x19, 0x82, 0xcd, 0xc4, 0x0a, 0xad, 0x94, 0xdd, 0xb8, 0xef, 0x21, 0x7b, 0x4f, 0x1a, 0x10, 0x9d, 0x5e, 0xce, 0x93, 0x7a, 0xd0, 0x9a, 0x0a, 0xc5, 0x1e, 0x63, 0xd4, 0x30, 0xc3, 0x0a, 0x65, 0x2f, 0xef, 0x49, 0x99, 0xfe, 0x7f, 0xde, 0x48, 0xe5, 0x2d, 0xec, 0x1b, 0xbb, 0x04, 0x9e, 0x9e, 0xa9, 0x18, 0x0d, 0x96, 0x30, 0x73, 0x64, 0x94, 0x6d, 0x52, 0x42, 0xca, 0x9c, 0x92, 0x5f, 0x1e, 0xdc, 0x65, 0x73, 0x7d, 0x31, 0x49, 0x53, 0x72, 0xcf, 0x3b, 0x5d, 0xf7, 0x96, 0x27, 0x17, 0x8b, 0xd9, 0xa4, 0x13, 0x84, 0x63, 0xde, 0x16, 0xa7, 0xbc, 0xd3, 0x78, 0xf6, 0xa8, 0xc3, 0xce, 0xc9, 0xf1, 0xe1, 0xc7, 0x20, 0x66, 0x4f, 0x54, 0x38, 0x24, 0x49, 0x0c, 0x5c, 0x14, 0xa1, 0xce, 0xfe, 0xb5, 0x6b, 0xa8, 0x06, 0x1c, 0xf9, 0xf7, 0x6a, 0x39, 0x0a, 0xd0, 0xff, 0x5b, 0x3e, 0x9f, 0x8f, 0xf6, 0xcd, 0x0e, 0x2b, 0xa5, 0x79, 0x29, 0xc2, 0x6b, 0xc1, 0xbf, 0xf3, 0x3e, 0x58, 0x0b, 0x20, 0xc6, 0xd5, 0x93, 0xc4, 0x62, 0xac, 0x51, 0x06, 0x6c, 0x5d, 0x11, 0x8e, 0xbe, 0xeb, 0x1a, 0x97, 0x74, 0x90, 0x10, 0x45, 0xf4, 0xaf, 0x19, 0x39, 0x2c, 0x0a, 0x3f, 0x64, 0x1b, 0x35, 0x16, 0x18, 0x93, 0x4b, 0x9e, 0x65, 0x3d, 0xdf, 0x6a, 0xa2, 0xdd, 0x35, 0x02, 0x4a, 0xd7, 0xb2, 0x87, 0x0a, 0xf3, 0x92, 0x95, 0x17, 0x5d, 0xd9, 0x6d, 0xc5, 0xf0, 0x8c, 0x54, 0x56, 0xb3, 0x20, 0x36, 0x0f, 0xa4, 0x33, 0x8f, 0x92, 0xb5, 0x7a, 0x8c, 0x67, 0x15, 0xfb, 0x6d, 0xdc, 0xb0, 0x7c, 0x2d, 0x0f, 0xf9, 0x3b, 0x65, 0x49, 0xe7, 0xdf, 0x6e, 0x8d, 0x3d, 0xaf, 0xc5, 0x71, 0x0f, 0x02, 0xb4, 0x2d, 0x82, 0xf6, 0x2f, 0xf2, 0xd3, 0x65, 0xfd, 0x7d, 0x9b, 0x15, 0x18, 0xeb, 0x51, 0x2f, 0x55, 0xcf, 0x10, 0xf3, 0x47, 0x82, 0x9a, 0xa9, 0x61, 0xba, 0x9e, 0xdb, 0x5c, 0x5e, 0x36, 0xc1, 0xd8, 0x99, 0xb4, 0xfd, 0x46, 0x2e, 0x9e, 0x89, 0x05, 0x0b, 0xf7, 0xed, 0xcb, 0x20, 0xc0, 0xb5, 0x47, 0x71, 0xbf, 0x22, 0x05, 0x6a, 0x7f, 0x20, 0x91, 0x73, 0x98, 0x78, 0xdf, 0xc5, 0x30, 0x47, 0xea, 0x7c, 0xc2, 0xaf, 0x9c, 0xed, 0x1f, 0xcc, 0xee, 0x39, 0xb2, 0xe9, 0x50, 0x23, 0x07, 0xf4, 0x4b, 0x1e, 0x8f, 0x30, 0x65, 0xaa, 0x9d, 0x2a, 0x45, 0xe1, 0xb5, 0xee, 0x17, 0x4d, 0x06, 0x7a, 0x32, 0xfd, 0x35, 0x73, 0xf8, 0xd8, 0x5c, 0x17, 0xfe, 0x31, 0x53, 0x73, 0x6e, 0x9b, 0x2e, 0xd6, 0xa9, 0xfe, 0x06, 0x85, 0x30, 0xea, 0xfd, 0xb0, 0xc4, 0x2c, 0x7c, 0xa5, 0xcc, 0x9f, 0xbf, 0x44, 0xf8, 0x45, 0x94, 0xb3, 0x24, 0x96, 0x5f, 0x53, 0x7f, 0x18, 0x62, 0xf2, 0xec, 0x30, 0x3b, 0x42, 0xa8, 0x38, 0xae, 0x89, 0x2d, 0xd1, 0xa5, 0x9b, 0x57, 0x7b, 0x75, 0x06, 0xc6, 0x63, 0x63, 0x8c, 0x83, 0x7b, 0x67, 0xd6, 0xe6, 0xd0, 0x30, 0x66, 0xb7, 0x19, 0x67, 0xce, 0x93, 0x8b, 0x38, 0x1f, 0x91, 0xf5, 0x0f, 0xa5, 0x26, 0x08, 0x9f, 0xd1, 0x46, 0xf6, 0x29, 0x77, 0xcc, 0x40, 0xfb, 0x3a, 0x1c, 0xc8, 0x37, 0x44, 0x07, 0x2e, 0xd5, 0x3a, 0xef, 0x59, 0xeb, 0x6e, 0x2b, 0x54, 0x2c, 0x57, 0xac, 0x5c, 0xaf, 0x3f, 0xe1, 0x37, 0xf3, 0x3c, 0xd9, 0xc7, 0x1f, 0x61, 0xa8, 0xde, 0x8e, 0x35, 0x0b, 0x54, 0x8a, 0x64, 0x4f, 0x57, 0x58, 0xb5, 0x6e, 0x03, 0x76, 0x3c, 0x7c, 0x32, 0x20, 0xd1, 0x41, 0x96, 0x18, 0xc1, 0x28, 0x05, 0xa7, 0xc3, 0x58, 0x13, 0xdf, 0x2d, 0x20, 0xe6, 0x24, 0x67, 0x98, 0x46, 0xeb, 0xa0, 0x85, 0xf4, 0xc0, 0xc1, 0x7e, 0x3d, 0x8e, 0x9f, 0x4d, 0xce, 0x1b, 0x75, 0x98, 0xca, 0xd2, 0x91, 0xc1, 0x1a, 0xc5, 0x4d, 0x0a, 0x05, 0xf2, 0x41, 0xfd, 0x00, 0xc5, 0xb7, 0x0b, 0xc7, 0xdf, 0x5f, 0x73, 0xac, 0x16, 0x45, 0x65, 0x2f, 0xbd, 0xff, 0x67, 0xd0, 0x25, 0x2b, 0xf9, 0x21, 0x63, 0x19, 0x74, 0x1f, 0x54, 0xc4, 0x38, 0xc2, 0xdf, 0x07, 0x06, 0xd3, 0x7a, 0x0d, 0xab, 0xfe, 0xf0, 0x0a, 0xdf, 0x28, 0x61, 0x28, 0x6c, 0x03, 0x8a, 0xc5, 0x93, 0xdf, 0x46, 0xdb, 0xab, 0xc3, 0x55, 0xbf, 0x0b, 0xbc, 0x5d, 0x0f, 0x2a, 0x75, 0x2e, 0xe5, 0x05, 0x08, 0x4a, 0x51, 0xc1, 0x14, 0xa5, 0x07, 0x92, 0x10, 0xa9, 0x54, 0xdb, 0xde, 0x7d, 0x57, 0x97, 0xa3, 0x87, 0x6d, 0xf7, 0xd7, 0x30, 0xed, 0x4c, 0x98, 0xe7, 0x16, 0x28, 0x44, 0x68, 0x45, 0xc0, 0x46, 0x3e, 0x6b, 0x95, 0x30, 0x86, 0xbf, 0x54, 0x0b, 0xf7, 0xb0, 0xfa, 0xea, 0x1f, 0x1e, 0x3b, 0xc6, 0xef, 0xc9, 0x25, 0x85, 0x7a, 0x0a, 0x01, 0x5c, 0xfa, 0xc1, 0x7a, 0x57, 0x14, 0x8e, 0x01, 0x36, 0x5d, 0x44, 0x6f, 0x7b, 0x1c, 0x9a, 0xec, 0xc1, 0x52, 0x24, 0x10, 0x4f, 0xf7, 0x82, 0x49, 0xed, 0x87, 0xd8, 0x7d, 0xf7, 0xbd, 0x7e, 0xf0, 0xaf, 0x9e, 0xf8, 0x67, 0xd7, 0xba, 0x28, 0x8e, 0x80, 0xaf, 0xc2, 0x97, 0x1d, 0xee, 0x01, 0x24, 0xdb, 0xc2, 0x98, 0x67, 0x35, 0x8e, 0xec, 0x87, 0xc2, 0x56, 0x80, 0x46, 0x52, 0x80, 0xb0, 0xe2, 0x3a, 0xdc, 0xa3, 0x38, 0xec, 0xe3, 0x7b, 0x2f, 0xcb, 0x3c, 0xce, 0x54, 0x3d, 0x85, 0x5a, 0xc2, 0x01, 0x4f, 0xf4, 0x45, 0xc3, 0x6a, 0xc2, 0xbf, 0xed, 0x64, 0xaa, 0xca, 0xc1, 0x4c, 0x0a, 0x9e, 0xa5, 0xbb, 0xaa, 0x36, 0xbd, 0x16, 0xef, 0xae, 0xbf, 0x0d, 0x51, 0xf0, 0x03, 0x67, 0x0e, 0x8f, 0xda, 0x02, 0x20, 0xf3, 0x21, 0x15, 0x6d, 0xb7, 0x16, 0xb9, 0x3f, 0x4f, 0x6a, 0xa8, 0xf3, 0xee, 0x97, 0x44, 0xf5, 0xa6, 0x73, 0xdb, 0xec, 0xd2, 0x05, 0x29, 0x31, 0xb1, 0x98, 0x1e, 0x86, 0x53, 0x0f, 0xe2, 0x05, 0xb9, 0x78, 0x17, 0x56, 0x38, 0xe4, 0x5e, 0x25, 0x1e, 0x75, 0x1c, 0xd3, 0x98, 0xb8, 0x7e, 0x6c, 0xd3, 0x35, 0xba, 0xda, 0x62, 0x45, 0x98, 0x58, 0xe0, 0x24, 0x32, 0x29, 0xd6, 0x47, 0xf7, 0x89, 0xde, 0xf0, 0xf6, 0xe4, 0x09, 0xff, 0x5a, 0x46, 0x7f, 0x0b, 0x30, 0x13, 0x65, 0xb1, 0x71, 0xf8, 0x04, 0x2c, 0x3c, 0x21, 0x27, 0x26, 0x63, 0xac, 0xc4, 0xce, 0x29, 0x5e, 0xdf, 0x2b, 0x4a, 0x95, 0xac, 0xb0, 0x3c, 0x7e, 0xf4, 0x10, 0xb5, 0x88, 0xb9, 0x54, 0x6d, 0x19, 0x1d, 0x2a, 0x25, 0x7f, 0x80, 0x80, 0xe8, 0x29, 0xe9, 0x51, 0x91, 0x17, 0xa7, 0xbf, 0x8d, 0x8f, 0x38, 0x63, 0xe2, 0x12, 0x69, 0xe1, 0x70, 0x8e, 0xbf, 0xbf, 0x77, 0xd5, 0x16, 0x77, 0x5a, 0x4e, 0x88, 0xca, 0xa3, 0xea, 0x90, 0x58, 0x46, 0x5a, 0x6f, 0x6e, 0x2a, 0x80, 0xcf, 0x1f, 0xe5, 0x23, 0xa7, 0x96, 0xc8, 0xe6, 0x5e, 0xaa, 0x1b, 0x7b, 0x33, 0xb3, 0xa9, 0x14, 0xdc, 0x9c, 0x80, 0x1a, 0x6d, 0x3a, 0xf2, 0x22, 0x7c, 0xdc, 0xdf, 0x1d, 0x83, 0x24, 0x37, 0xce, 0x85, 0x15, 0xba, 0x82, 0xf5, 0x6c, 0x02, 0xfb, 0xd3, 0x34, 0xc4, 0xad, 0x18, 0x95, 0x53, 0x2d, 0x54, 0xed, 0x65, 0xe6, 0x96, 0x22, 0x1a, 0x0e, 0x8c, 0x36, 0x3a, 0xd8, 0xeb, 0x1b, 0xbe, 0xeb, 0x11, 0xc9, 0x93, 0x14, 0xea, 0x8f, 0x9a, 0x37, 0x10, 0xa6, 0xf3, 0x8c, 0x36, 0x0c, 0x7b, 0x07, 0xc6, 0x8f, 0x93, 0x18, 0xc9, 0x28, 0x24, 0x95, 0x08, 0x8b, 0xe0, 0xf5, 0x70, 0xfc, 0xca, 0xbe, 0xbb, 0x64, 0xf8, 0x40, 0x4d, 0xa4, 0x97, 0x84, 0x5c, 0x29, 0x31, 0x80, 0x54, 0xc1, 0x2b, 0x8c, 0x7a, 0xad, 0x92, 0x1a, 0xcf, 0xf7, 0x17, 0xa1, 0x37, 0x06, 0x57, 0xda, 0xda, 0x6f, 0x60, 0x2f, 0xcb, 0x0e, 0x71, 0x71, 0xe8, 0x56, 0x02, 0xc9, 0x01, 0xe5, 0x04, 0xf1, 0x3c, 0x5b, 0x6a, 0xa3, 0xb7, 0x6d, 0xe8, 0x52, 0x70, 0x35, 0xfb, 0x19, 0x62, 0xcc, 0x29, 0xf1, 0xf1, 0x1b, 0x8a, 0x26, 0x88, 0xee, 0x87, 0x0c, 0x81, 0x4a, 0xe2, 0xee, 0x45, 0x01, 0xf7, 0x47, 0xb4, 0x83, 0x41, 0x34, 0xc7, 0xf7, 0x1f, 0x2a, 0x73, 0x8b, 0xd8, 0xe4, 0xd1, 0x08, 0xdd, 0xa0, 0x7d, 0xa9, 0x4f, 0x8b, 0x3c, 0x2d, 0xc1, 0x7a, 0xe1, 0x2b, 0x3f, 0xda, 0x71, 0xa6, 0x8f, 0xea, 0x85, 0xe1, 0xb6, 0x28, 0xf0, 0x74, 0xbf, 0x08, 0xa2, 0xa0, 0xb7, 0xec, 0xcc, 0xe0, 0xfc, 0x51, 0x45, 0xc0, 0xb8, 0x46, 0x2d, 0xf2, 0xa8, 0x23, 0xd0, 0x9f, 0x22, 0x77, 0xcc, 0xfb, 0x56, 0x42, 0x77, 0x1c, 0xd4, 0x65, 0x7b, 0x0c, 0x4e, 0x56, 0xc3, 0x1d, 0x9f, 0x18, 0x9b, 0x7c, 0x0d, 0x6b, 0x12, 0x09, 0xcb, 0x40, 0xa3, 0x66, 0xc2, 0x6f, 0x15, 0x4e, 0x92, 0xac, 0xa0, 0x29, 0xd3, 0xb8, 0x51, 0xdd, 0xa0, 0xd4, 0xb0, 0xe6, 0x56, 0x7b, 0x9f, 0xa9, 0x99, 0x50, 0x85, 0x05, 0x98, 0x56, 0xac, 0x2c, 0x92, 0x5f, 0xe8, 0xb1, 0x9a, 0xc7, 0x7a, 0xe2, 0x97, 0x61, 0x33, 0x57, 0x8e, 0xb2, 0xdd, 0xcb, 0x24, 0x5d, 0xd6, 0x2b, 0x5e, 0xdf, 0xfe, 0xed, 0xac, 0x7c, 0xd3, 0xa3, 0x26, 0x79, 0xdb, 0xd0, 0x15, 0x8c, 0x43, 0xfa, 0xb5, 0x91, 0xc5, 0x00, 0x39, 0x7e, 0xcf, 0xae, 0x10, 0x99, 0xe1, 0x8f, 0x67, 0xe9, 0x36, 0x02, 0xef, 0xea, 0xa8, 0x90, 0xe0, 0x85, 0xce, 0x7d, 0x3e, 0x3e, 0x67, 0x9d, 0x5b, 0xb0, 0xfb, 0x69, 0x9d, 0x36, 0xbf, 0x52, 0x81, 0xec, 0xba, 0x56, 0xe0, 0xd6, 0x26, 0xd0, 0x71, 0x5e, 0x19, 0x94, 0x90, 0x04, 0x64, 0x3b, 0x3d, 0x51, 0xbb, 0xbc, 0x68, 0x0c, 0x17, 0x3d, 0x6c, 0xb1, 0x59, 0x28, 0xd9, 0x1f, 0x30, 0x80, 0x76, 0x91, 0x3c, 0x76, 0x86, 0xcf, 0x74, 0x37, 0x4b, 0xa6, 0xc5, 0x09, 0xc9, 0x95, 0xfb, 0x96, 0xcc, 0xc9, 0xe5, 0x87, 0x2c, 0x4c, 0xb4, 0x55, 0x50, 0x79, 0xa5, 0x5c, 0xf1, 0xb3, 0xe0, 0x32, 0x20, 0x56, 0x9f, 0x36, 0x8b, 0xee, 0x92, 0x6c, 0xfc, 0xa7, 0x83, 0x88, 0x22, 0x05, 0x36, 0x48, 0x94, 0xd5, 0x93, 0x07, 0x13, 0x64, 0x06, 0x90, 0x0f, 0xee, 0x27, 0x30, 0x6d, 0x59, 0x96, 0x0f, 0x88, 0x23, 0x29, 0xbf, 0x76, 0x9a, 0x4a, 0x16, 0x8c, 0x4b, 0x9a, 0x39, 0x24, 0xbc, 0xdb, 0xfa, 0x9d, 0x5e, 0x0c, 0x64, 0xa4, 0xbd, 0xd5, 0x93, 0xb2, 0xfa, 0x26, 0xca, 0xd6, 0x7b, 0x1c, 0xbf, 0xb5, 0xe1, 0x24, 0x39, 0xcf, 0x3a, 0x62, 0xdd, 0x04, 0x78, 0x54, 0x45, 0x56, 0x23, 0xb2, 0x53, 0xf0, 0x4a, 0x99, 0xc5, 0x68, 0xbf, 0xe9, 0x09, 0x41, 0x84, 0xec, 0x52, 0xb4, 0x80, 0x38, 0xeb, 0xaf, 0x76, 0xd6, 0xcc, 0x1f, 0x38, 0xa3, 0x6b, 0x6b, 0x18, 0xf7, 0xd4, 0x40, 0xa0, 0x85, 0xfc, 0x94, 0x83, 0x82, 0x52, 0xe5, 0xd2, 0x0a, 0x98, 0xc2, 0x73, 0xbf, 0xf1, 0x8d, 0xd0, 0xb3, 0x3b, 0x7f, 0xcc, 0x88, 0x9e, 0xec, 0xfb, 0xd5, 0x65, 0xc9, 0x12, 0xcc, 0x0d, 0x6b, 0x9c, 0x1a, 0x9c, 0x91, 0xef, 0x0f, 0x35, 0xa5, 0x5f, 0xff, 0xe8, 0x3f, 0xb1, 0xe8, 0xce, 0xeb, 0xd3, 0x54, 0x56, 0x2c, 0xca, 0x81, 0xda, 0xc1, 0xeb, 0xc0, 0x76, 0x26, 0x4e, 0x1b, 0x19, 0x5e, 0x80, 0x3a, 0xdc, 0xf0, 0x78, 0x88, 0x93, 0x30, 0xcc, 0x91, 0xa2, 0xbf, 0x25, 0xae, 0x13, 0x55, 0xf1, 0xe5, 0xe5, 0xbe, 0x57, 0x0b, 0xa6, 0x23, 0x70, 0x2b, 0x44, 0x8b, 0xb4, 0x2c, 0x20, 0xa1, 0xb2, 0xad, 0x64, 0xb8, 0x05, 0x34, 0x97, 0x0c, 0x83, 0x88, 0x6e, 0x4b, 0xb7, 0x5b, 0xe5, 0x54, 0x92, 0x2c, 0x8f, 0x3e, 0x5d, 0x6c, 0x2a, 0x9c, 0xf2, 0xe0, 0x77, 0xff, 0x2c, 0x46, 0x49, 0xbd, 0x9c, 0x3b, 0xdb, 0xf1, 0x7d, 0x5c, 0x66, 0xc3, 0xea, 0xac, 0xf3, 0xea, 0x4f, 0x36, 0x6e, 0x6f, 0x1e, 0xf3, 0xfd, 0xb3, 0xc3, 0xed, 0x90, 0xb3, 0xd9, 0xa5, 0xb8, 0x8b, 0x9e, 0xb2, 0xbc, 0x39, 0xa4, 0xac, 0xea, 0xa4, 0xca, 0x48, 0x2b, 0xdd, 0x6b, 0xc4, 0xda, 0xa4, 0xd5, 0x86, 0xd6, 0x2e, 0xfd, 0x00, 0xd6, 0x25, 0x71, 0xd6, 0xfd, 0xf1, 0x8d, 0x43, 0xaf, 0x36, 0xf2, 0xb9, 0xa2, 0x9d, 0x34, 0xc7, 0x38, 0xd8, 0xd3, 0x40, 0x0c, 0xe0, 0x6d, 0x9a, 0xca, 0x81, 0x31, 0x94, 0x45, 0x19, 0x97, 0x1b, 0xc3, 0x9d, 0x4e, 0x6f, 0x9b, 0xdc, 0x76, 0x82, 0x03, 0x08, 0x10, 0xa1, 0x23, 0x72, 0xb3, 0x55, 0x6e, 0x95, 0x80, 0x8c, 0x31, 0x56, 0x58, 0xf4, 0x6c, 0x8a, 0x4c, 0xa8, 0xe2, 0xb9, 0x54, 0x0e, 0x6c, 0x21, 0x44, 0xff, 0x92, 0xfe, 0xfd, 0x29, 0x5c, 0x09, 0xe0, 0xb2, 0x66, 0x3f, 0x89, 0x1e, 0x33, 0xe3, 0xb9, 0x73, 0xc3, 0xc6, 0x93, 0x9b, 0x68, 0xc6, 0x0c, 0x09, 0xd5, 0x95, 0x9d, 0xa0, 0x78, 0xbc, 0x3a, 0xd0, 0x0a, 0xdf, 0x88, 0x02, 0x64, 0x42, 0x4b, 0x36, 0x94, 0x8c, 0x1d, 0xea, 0x30, 0xcb, 0x66, 0x3e, 0xea, 0xb9, 0x88, 0x57, 0x65, 0x3e, 0x5a, 0x01, 0x47, 0x35, 0xd8, 0x98, 0x90, 0x73, 0x19, 0x28, 0x2a, 0x05, 0x81, 0xd3, 0xc0, 0xba, 0x37, 0x73, 0xd4, 0xe2, 0xd9, 0x81, 0x0c, 0x54, 0x6f, 0x36, 0xcd, 0xb6, 0x9e, 0xef, 0x0b, 0xf8, 0x1f, 0xd6, 0x60, 0x22, 0x6f, 0xbf, 0x5b, 0x50, 0xc7, 0x50, 0x1a, 0xfa, 0x4e, 0x65, 0x1b, 0x79, 0x8e, 0xb2, 0x4f, 0xc7, 0x24, 0xab, 0x70, 0x87, 0xbc, 0xa0, 0x95, 0x45, 0x3d, 0x2d, 0x04, 0xfe, 0x41, 0xd1, 0x47, 0xe3, 0xc8, 0xdd, 0x82, 0x5a, 0x2d, 0x90, 0x03, 0x46, 0x59, 0x80, 0x1b, 0x88, 0x36, 0x3b, 0x2c, 0xc6, 0x66, 0x2f, 0x04, 0x6a, 0x36, 0xc7, 0x69, 0xee, 0xcd, 0xd7, 0xf5, 0x58, 0xaa, 0x3a, 0x25, 0x00, 0x4d, 0xba, 0xac, 0x99, 0x33, 0x2f, 0x0d, 0x6f, 0x08, 0xeb, 0x68, 0xee, 0x19, 0x56, 0x94, 0x64, 0x08, 0xd6, 0x6f, 0x08, 0xc3, 0xf2, 0x72, 0x3a, 0xb6, 0xb6, 0x89, 0x0c, 0x40, 0x59, 0x21, 0x02, 0x64, 0x1d, 0x82, 0x16, 0xc2, 0x77, 0x5f, 0xff, 0xc5, 0x70, 0xab, 0xb3, 0x1d, 0x4b, 0xaf, 0x2b, 0x70, 0x68, 0x5a, 0x66, 0x4c, 0x68, 0xd8, 0xb0, 0x61, 0x92, 0x66, 0x24, 0xed, 0x75, 0x64, 0x70, 0x77, 0xcf, 0xab, 0xd8, 0xc0, 0xae, 0x22, 0x7e, 0xf7, 0xd5, 0x8c, 0xe0, 0x2c, 0x61, 0xa4, 0xa2, 0x07, 0xad, 0x6c, 0x8e, 0xba, 0x72, 0xc2, 0xd9, 0x34, 0x33, 0x34, 0xa7, 0x97, 0xd8, 0x15, 0xd2, 0xed, 0x99, 0xd0, 0xe7, 0x17, 0x1d, 0x7d, 0x72, 0x05, 0xe3, 0xb2, 0x7c, 0x2d, 0xe2, 0x9c, 0x51, 0x35, 0x6c, 0x4e, 0x87, 0xf3, 0x58, 0x58, 0x3b, 0x98, 0x60, 0x9c, 0x9e, 0x28, 0xc8, 0x5d, 0xb1, 0x2e, 0x41, 0x99, 0x4c, 0xad, 0x0c, 0x99, 0x65, 0x59, 0x62, 0xc6, 0x8f, 0x07, 0x14, 0xbe, 0xc1, 0x63, 0x6f, 0xa7, 0x59, 0xe1, 0x62, 0xc4, 0x60, 0xf6, 0xe3, 0x45, 0x10, 0x87, 0x8e, 0x64, 0x93, 0xa2, 0x8f, 0xad, 0x0e, 0x6c, 0xc3, 0x9d, 0xde, 0x5a, 0x1a, 0x6f, 0x22, 0xa4, 0x40, 0x33, 0x79, 0xf7, 0x7c, 0x20, 0x0d, 0x6b, 0xd8, 0x2b, 0xd0, 0xb4, 0x82, 0xd9, 0x05, 0x9c, 0x72, 0x51, 0x03, 0xb1, 0x4d, 0xb5, 0x35, 0x3a, 0x89, 0xb2, 0x66, 0x70, 0xd3, 0x56, 0x3b, 0xeb, 0xad, 0x22, 0x01, 0x5b, 0x5c, 0x61, 0xa9, 0x78, 0x01, 0xb8, 0x11, 0x3c, 0x06, 0xfd, 0x86, 0x4f, 0xbb, 0x4c, 0x86, 0xc3, 0x41, 0x58, 0xca, 0x01, 0xa8, 0x00, 0x84, 0x03, 0x54, 0x23, 0xe5, 0xc4, 0xa5, 0xb4, 0xe2, 0xf5, 0xd7, 0x11, 0x38, 0xf2, 0x26, 0x90, 0xad, 0xf4, 0x36, 0x5b, 0x99, 0x88, 0xb3, 0x7f, 0xa6, 0x40, 0x34, 0x3f, 0xd4, 0xa8, 0x66, 0xae, 0xc0, 0x7b, 0x66, 0x7d, 0x25, 0x17, 0x6e, 0x11, 0xa3, 0x2f, 0xb4, 0xd8, 0xbf, 0xc0 ],
-const [ 0xa2, 0x49, 0x53, 0xa8, 0x00, 0xe0, 0xb7, 0x3b, 0x45, 0x54, 0xd4, 0xbe, 0x70, 0xf6, 0xc1, 0xba, 0x76, 0x38, 0x3e, 0xbe, 0x38, 0xca, 0x47, 0xa6, 0xb2, 0x02, 0xe9, 0x1d, 0x75, 0x81, 0x55, 0x61, 0x57, 0x14, 0x33, 0x47, 0x69, 0xd8, 0x38, 0x7e, 0x29, 0xa2, 0xfb, 0x17, 0xf9, 0x9d, 0x04, 0x45, 0xd0, 0x35, 0x26, 0x62, 0x30, 0x34, 0x10, 0x33, 0x58, 0x2b, 0x1e, 0x6d, 0xba, 0x14, 0x75, 0x78, 0xaf, 0x35, 0x4e, 0x72, 0x6a, 0x48, 0x92, 0x77, 0x2a, 0xd8, 0xa8, 0x20, 0xb4, 0xee, 0x8a, 0x49, 0x01, 0xed, 0x1f, 0x18, 0x34, 0xbb, 0xc5, 0x3b, 0xcf, 0x21, 0x2c, 0x70, 0x25, 0x75, 0x6b, 0x4b, 0x13, 0x76, 0x4d, 0x34, 0xeb, 0x77, 0xec, 0xaf, 0xb1, 0xc0, 0x82, 0xe0, 0x8a, 0x31, 0x7b, 0x4e, 0x71, 0x28, 0xcf, 0xe7, 0x2c, 0xa5, 0x8e, 0x44, 0x7e, 0xac, 0xbd, 0x2f, 0x9f, 0xeb, 0x60, 0x62, 0xe9, 0x9d, 0xd8, 0x92, 0xd4, 0xae, 0x6f, 0xac, 0x24, 0x20, 0x32, 0x5f, 0x61, 0xad, 0xff, 0xda, 0x88, 0xae, 0xde, 0xd7, 0x00, 0x3b, 0x94, 0xd8, 0xcf, 0x94, 0x76, 0xb0, 0x0e, 0xbf, 0x7c, 0x46, 0x9a, 0x73, 0x96, 0x96, 0x0d, 0x35, 0x43, 0xf8, 0xed, 0xc1, 0x5f, 0xa5, 0x23, 0xab, 0x3c, 0x77, 0xae, 0x46, 0xf5, 0xf0, 0x98, 0xc5, 0xff, 0x7e, 0x29, 0xa0, 0x01, 0xfd, 0x5c, 0x3a, 0xe6, 0x7e, 0x8f, 0xc0, 0x30, 0x47, 0x7e, 0x54, 0x8f, 0x1b, 0x72, 0x6b, 0xb2, 0xbb, 0xb6, 0x73, 0x5d, 0xac, 0x4b, 0xba, 0xbc, 0x3b, 0xdc, 0x8b, 0xf7, 0xbf, 0xf4, 0x9a, 0x06, 0x1e, 0x6f, 0xa1, 0xc7, 0x92, 0x2f, 0x4c, 0x4d, 0xad, 0x10, 0x53, 0x7b, 0x9b, 0x1d, 0xe5, 0xd2, 0xa8, 0x04, 0x4d, 0x88, 0x01, 0xc7, 0xd0, 0xda, 0xbf, 0xb5, 0xd4, 0xa3, 0x21, 0x99, 0x48, 0x2c, 0x19, 0x31, 0x3f, 0x46, 0x0b, 0xe1, 0xde, 0x96, 0xd1, 0xa9, 0x79, 0x31, 0x02, 0x55, 0xf9, 0x69, 0x74, 0xf3, 0x81, 0xe6, 0xff, 0x8a, 0x51, 0xf8, 0x84, 0x09, 0xea, 0x2b, 0x2e, 0x7e, 0x72, 0x1c, 0xf8, 0x88, 0x5b, 0x8c, 0x70, 0x0f, 0x40, 0xb3, 0xba, 0x32, 0x0f, 0xd6, 0xd7, 0x81, 0x6d, 0x1c, 0x28, 0x6d, 0x56, 0x9e, 0x2d, 0xfc, 0x04, 0xbd, 0x93, 0xc2, 0x13, 0xb8, 0x6e, 0x0c, 0xe2, 0x7e, 0xc3, 0x5e, 0x3c, 0xc0, 0x49, 0x20, 0x38, 0x4b, 0x70, 0x94, 0x5d, 0x95, 0xa3, 0x0b, 0x0a, 0x95, 0xca, 0x59, 0x15, 0xd8, 0x14, 0x86, 0xb3, 0xd2, 0xf3, 0xc6, 0x98, 0x72, 0x68, 0xab, 0x5f, 0xf9, 0x80, 0x9a, 0x2b, 0x0b, 0x1f, 0x7c, 0x8f, 0x06, 0xfc, 0xb5, 0xab, 0x94, 0xed, 0x5a, 0x98, 0x7c, 0x65, 0x9e, 0x07, 0xbe, 0x3a, 0x8e, 0x24, 0xde, 0xac, 0xff, 0xc1, 0x80, 0xa4, 0xc4, 0xb0, 0x35, 0x39, 0x24, 0x70, 0x95, 0x78, 0x8b, 0x0d, 0x8e, 0x65, 0x7f, 0x41, 0xfb, 0x3d, 0xd6, 0xdf, 0x78, 0xfe, 0x26, 0x71, 0x75, 0x29, 0x7e, 0x20, 0x8a, 0xc7, 0x53, 0xd5, 0x0a, 0xaa, 0xbd, 0x9e, 0xdb, 0xf5, 0xe4, 0x53, 0x85, 0xdf, 0xb4, 0x79, 0x88, 0xb3, 0xd9, 0x66, 0xf3, 0x1b, 0xe7, 0xa6, 0x32, 0x9f, 0xd8, 0x9e, 0x28, 0x69, 0xbc, 0x6f, 0x7e, 0x4b, 0xac, 0x1e, 0x3a, 0x03, 0x00, 0xf1, 0x93, 0xbd, 0xc2, 0x1c, 0x03, 0xd9, 0x62, 0x9c, 0x9f, 0xef, 0xaa, 0x64, 0xa4, 0x10, 0xf5, 0xb7, 0x52, 0x4f, 0x9c, 0xd5, 0xfd, 0x80, 0xb2, 0xd9, 0x61, 0x40, 0xf1, 0xe2, 0x36, 0x36, 0xf3, 0x71, 0x04, 0x98, 0xa6, 0x12, 0x39, 0xf0, 0xfa, 0x3f, 0x79, 0x20, 0xdc, 0x81, 0x35, 0xa3, 0x68, 0xd8, 0x7f, 0x17, 0x5a, 0x5d, 0x1c, 0xf8, 0xc6, 0x26, 0xdb, 0xaf, 0x0a, 0x6a, 0x26, 0xcb, 0x00, 0xe5, 0xd7, 0x8e, 0x78, 0x7e, 0x4d, 0xab, 0xe5, 0x28, 0xbe, 0x4e, 0x56, 0x06, 0xce, 0x5d, 0xa8, 0xd2, 0x61, 0xfd, 0xfa, 0x7f, 0xae, 0x59, 0x62, 0x1d, 0x96, 0x9f, 0xde, 0xfe, 0x33, 0x4a, 0x8e, 0x17, 0xb3, 0xa7, 0x20, 0xa8, 0x67, 0x92, 0x8b, 0x20, 0x17, 0x81, 0x00, 0x3b, 0x99, 0xc5, 0x1d, 0x6d, 0xa1, 0x0c, 0x65, 0x83, 0xdb, 0x29, 0xed, 0x88, 0x37, 0x18, 0x57, 0xe5, 0x85, 0x3c, 0x04, 0xcd, 0x41, 0xec, 0x86, 0xd8, 0xb0, 0x2e, 0x54, 0xee, 0x2c, 0xc2, 0xc2, 0x67, 0xbb, 0x63, 0x30, 0x70, 0xe7, 0x49, 0x81, 0xb1, 0xca, 0xf2, 0xcf, 0x2d, 0x69, 0x22, 0x5c, 0x69, 0x43, 0x29, 0xcc, 0xd0, 0x29, 0x64, 0x92, 0x56, 0x4f, 0x06, 0xa9, 0x5c, 0xa4, 0x18, 0x84, 0xd3, 0x5f, 0xbf, 0x47, 0xa5, 0xda, 0xbe, 0x37, 0x50, 0xa4, 0x3b, 0x6f, 0xd4, 0xd2, 0xc6, 0xd6, 0xd0, 0x95, 0x97, 0x4d, 0xe8, 0x12, 0x17, 0x2d, 0x69, 0x6d, 0xa3, 0xf0, 0x30, 0x27, 0x8c, 0x2e, 0xc8, 0xab, 0x62, 0xcc, 0xd2, 0x23, 0x72, 0x70, 0xaa, 0x90, 0x8d, 0x37, 0x47, 0x1a, 0x0b, 0xab, 0x63, 0xa4, 0x10, 0xef, 0xdc, 0xa4, 0x0e, 0x3d, 0x5b, 0x32, 0x8b, 0x93, 0x33, 0x5f, 0x25, 0xa8, 0x8c, 0xc7, 0xd3, 0x25, 0xc0, 0x6a, 0x6d, 0x12, 0x05, 0xb7, 0x6f, 0x8e, 0x4d, 0xea, 0xfa, 0xc4, 0x6a, 0x98, 0x1b, 0x1a, 0x76, 0x88, 0x50, 0xab, 0x72, 0xc5, 0x48, 0xf8, 0x2d, 0xf1, 0xeb, 0xda, 0x67, 0xdc, 0x9a, 0xbc, 0x37, 0x56, 0xb8, 0x06, 0xaa, 0x41, 0x69, 0xdc, 0xad, 0xea, 0x99, 0x09, 0x2d, 0x99, 0x41, 0x36, 0x7c, 0x66, 0xe5, 0x60, 0xf7, 0x4f, 0x62, 0x89, 0xe6, 0x88, 0xe6, 0xad, 0xa3, 0x12, 0x40, 0xf7, 0xff, 0x8f, 0x5a, 0x35, 0xe1, 0x55, 0x03, 0x8a, 0x30, 0xc1, 0xf2, 0x62, 0xf3, 0xcd, 0x08, 0xab, 0xb7, 0xe5, 0xd6, 0x43, 0x31, 0xf7, 0x5f, 0xac, 0x25, 0xca, 0x1f, 0x07, 0x87, 0x90, 0x4c, 0x40, 0xdf, 0xbe, 0x5b, 0x86, 0xf2, 0x1b, 0xc6, 0xfe, 0x9e, 0x17, 0x0d, 0xb8, 0x06, 0x5f, 0xfb, 0xe2, 0xef, 0xae, 0x2a, 0x3b, 0x6a, 0xe6, 0xc9, 0xcb, 0xb4, 0x5f, 0x9d, 0xd2, 0x5a, 0x7f, 0x46, 0xfe, 0xa0, 0x8b, 0xc4, 0xe0, 0x24, 0xbc, 0x39, 0xa1, 0xbf, 0x96, 0xf0, 0xf1, 0xac, 0x75, 0x9f, 0x41, 0xec, 0x69, 0xe9, 0x32, 0xe8, 0x43, 0x27, 0x4d, 0x59, 0xf0, 0x68, 0xf4, 0x65, 0x06, 0xb6, 0x98, 0x0a, 0x9d, 0x9c, 0x2d, 0xc0, 0x60, 0xe5, 0xdb, 0x5a, 0xe4, 0xa5, 0xf7, 0x2e, 0x38, 0x7e, 0x31, 0x75, 0xbd, 0x1c, 0x0f, 0xf5, 0x37, 0x02, 0x9a, 0xdd, 0x25, 0x89, 0x57, 0xf0, 0x4e, 0x25, 0x78, 0xe5, 0x9d, 0xeb, 0x54, 0x0e, 0x2e, 0x50, 0x15, 0x39, 0xa9, 0x34, 0xb0, 0xd4, 0xcf, 0x1f, 0x1b, 0x54, 0x52, 0xca, 0xba, 0xd7, 0xea, 0xe1, 0x1a, 0x07, 0xa5, 0x07, 0xe1, 0x42, 0x7f, 0x1b, 0x05, 0xf9, 0x32, 0xb9, 0x3d, 0x56, 0x4f, 0x04, 0xb5, 0x22, 0x8e, 0xa3, 0x06, 0xe5, 0x62, 0x0a, 0x65, 0x4f, 0xd1, 0xfb, 0x1a, 0xd6, 0x83, 0x4c, 0x35, 0xa1, 0x19, 0xea, 0x7c, 0xa5, 0xc0, 0x1e, 0xa7, 0x0e, 0x05, 0x0f, 0xd0, 0xe0, 0xeb, 0x89, 0x25, 0xde, 0x3a, 0xfc, 0xe0, 0xab, 0x1b, 0xc8, 0x79, 0x2f, 0xe2, 0xb7, 0x19, 0x3c, 0x2b, 0xcb, 0x53, 0x71, 0x28, 0x3b, 0x0f, 0x5f, 0x39, 0xb8, 0xc6, 0xeb, 0xbd, 0xf4, 0xf5, 0xf3, 0x29, 0x65, 0xcb, 0x35, 0x57, 0x47, 0x25, 0x6c, 0x20, 0xe0, 0xbd, 0xbb, 0x2c, 0x07, 0x9e, 0x4f, 0x09, 0xe7, 0xdc, 0x41, 0x7b, 0x01, 0x81, 0xb9, 0x13, 0x70, 0xca, 0x59, 0x03, 0x71, 0x94, 0xd9, 0x31, 0x22, 0x11, 0xee, 0x8a, 0x8a, 0xbf, 0x71, 0x99, 0xda, 0x9b, 0xbd, 0x58, 0xf2, 0x92, 0x59, 0x46, 0x27, 0x38, 0xd7, 0xb9, 0x44, 0xbc, 0xfb, 0x76, 0xce, 0x1c, 0x20, 0x7f, 0x8d, 0x95, 0xd8, 0x2c, 0x47, 0x5e, 0xd3, 0x7d, 0xcf, 0x95, 0x02, 0xaf, 0x3f, 0x7a, 0xfb, 0x0d, 0x81, 0xdb, 0xa0, 0x09, 0x14, 0xcf, 0xfb, 0x8b, 0x0c, 0xa7, 0x6d, 0x89, 0x5b, 0x22, 0x08, 0xd8, 0x50, 0xe0, 0x39, 0x42, 0x5d, 0x19, 0xaa, 0xd8, 0x1d, 0x8f, 0x66, 0x89, 0x95, 0xc1, 0x3f, 0xf4, 0xbb, 0x62, 0x6d, 0x7b, 0x34, 0x09, 0x77, 0x99, 0x62, 0x2a, 0x57, 0x75, 0x9e, 0x45, 0xd9, 0xb7, 0xc2, 0x5d, 0x44, 0x9a, 0xeb, 0xac, 0x3c, 0x42, 0x7d, 0x95, 0xe7, 0x51, 0x67, 0xda, 0x4f, 0xb5, 0xa8, 0x0f, 0x07, 0xc3, 0x12, 0x4f, 0x12, 0x8a, 0x4d, 0x2d, 0x00, 0x61, 0x20, 0xed, 0x5a, 0xc3, 0xec, 0xf5, 0x40, 0x5d, 0x79, 0x7e, 0x51, 0x64, 0xf5, 0x8f, 0xcb, 0x2c, 0x3a, 0x2c, 0xf3, 0xf7, 0x50, 0xcb, 0xb8, 0x0b, 0x33, 0x07, 0x93, 0x07, 0xd6, 0x98, 0xb1, 0x76, 0x67, 0x83, 0x54, 0xa5, 0xd5, 0x8e, 0x77, 0xb2, 0x90, 0xf7, 0xb1, 0xe6, 0x90, 0x65, 0x5b, 0x44, 0x98, 0x1f, 0xf5, 0x62, 0xbc, 0x7c, 0xc6, 0x78, 0x21, 0x9b, 0xc3, 0xb7, 0x04, 0x53, 0xb2, 0xdc, 0xfd, 0x6d, 0x8f, 0x04, 0x85, 0x11, 0x2f, 0xc2, 0xb7, 0x7f, 0x23, 0x6f, 0x53, 0x00, 0xdf, 0xc1, 0x08, 0x1b, 0x1c, 0x9f, 0xf3, 0x0b, 0x7a, 0x34, 0x63, 0x71, 0x6a, 0x43, 0xdf, 0x47, 0x4b, 0xba, 0x6a, 0x15, 0xd3, 0x89, 0x05, 0x67, 0xb1, 0xb4, 0x76, 0x7e, 0x70, 0xa7, 0x48, 0x46, 0x9f, 0xcb, 0x13, 0x88, 0x2f, 0x56, 0xfd, 0x61, 0x1c, 0x67, 0x81, 0xf3, 0x50, 0x52, 0x6f, 0x5a, 0xc4, 0x38, 0x34, 0xe1, 0xe8, 0xdc, 0x5c, 0x76, 0x45, 0xb1, 0x55, 0x5c, 0x60, 0x38, 0x76, 0x20, 0xe2, 0x88, 0x3f, 0xce, 0xf7, 0x2e, 0xe3, 0x64, 0xf4, 0x38, 0x03, 0x87, 0x3c, 0x8d, 0xbd, 0x75, 0x64, 0x80, 0xe5, 0x3b, 0x95, 0xa4, 0x92, 0x28, 0x32, 0xe1, 0xdd, 0x81, 0xbb, 0xc7, 0xe5, 0x76, 0xf2, 0x23, 0x17, 0x55, 0x3c, 0xd0, 0xac, 0xfe, 0x49, 0xd0, 0x72, 0x97, 0xf7, 0x9b, 0xd0, 0x81, 0x74, 0xb7, 0x04, 0x8a, 0xa3, 0x89, 0xb0, 0x64, 0xc2, 0x6b, 0x95, 0x56, 0x49, 0xff, 0x9e, 0x31, 0x15, 0xc2, 0x20, 0x86, 0xc5, 0xe4, 0x60, 0x16, 0x65, 0x57, 0x56, 0x8a, 0x4a, 0x26, 0xb0, 0x64, 0x3c, 0x08, 0x1a, 0x36, 0xdb, 0x35, 0xbd, 0x11, 0x3b, 0x78, 0x05, 0x41, 0xd2, 0x85, 0xa8, 0x37, 0x94, 0x8e, 0xe4, 0xc7, 0x5c, 0x11, 0x08, 0x94, 0x8e, 0xf4, 0x35, 0xc8, 0xfa, 0xd3, 0x66, 0x08, 0x04, 0x99, 0xae, 0xa7, 0x02, 0x4d, 0xc1, 0x19, 0xe6, 0x2f, 0xb6, 0xab, 0x1d, 0x04, 0x0b, 0x72, 0xb7, 0xae, 0xea, 0x81, 0xc7, 0xff, 0xaa, 0x5f, 0x0d, 0xcf, 0x99, 0xb9, 0xd2, 0x4c, 0xf9, 0x53, 0x14, 0x92, 0x48, 0x44, 0xe3, 0x7c, 0xc5, 0x63, 0x0b, 0xb9, 0x2f, 0xfd, 0xf3, 0x22, 0xd0, 0xc9, 0xc5, 0x4a, 0xba, 0x1d, 0xcf, 0x57, 0x51, 0x61, 0x2a, 0x11, 0x09, 0xc5, 0x99, 0x39, 0x71, 0x2f, 0xb3, 0x1c, 0x71, 0x77, 0x45, 0x68, 0xcf, 0xd7, 0xf2, 0x3d, 0xf8, 0x9d, 0x1c, 0x87, 0xfe, 0x23, 0x08, 0x8c, 0xdd, 0x01, 0x3c, 0xc1, 0x02, 0x81, 0x2c, 0xe2, 0x0e, 0x54, 0x16, 0x41, 0xd7, 0x83, 0x2b, 0x5f, 0xaf, 0xa8, 0xef, 0xb9, 0xea, 0x5d, 0xe2, 0xe4, 0x9a, 0xf5, 0x60, 0xdc, 0x9d, 0x6a, 0xc6, 0x9a, 0xda, 0x97, 0xd6, 0xe4, 0xc7, 0xa7, 0x5d, 0x69, 0x2f, 0xce, 0x12, 0x0d, 0x32, 0x37, 0xc2, 0x82, 0x8d, 0x3d, 0xaa, 0x18, 0x1b, 0xdd, 0x25, 0xd6, 0x9c, 0x6b, 0x87, 0xc9, 0xb6, 0x85, 0x48, 0x9c, 0x39, 0x46, 0x65, 0x69, 0xa7, 0xbb, 0x03, 0xcf, 0xf4, 0x9b, 0x55, 0x45, 0x8a, 0x32, 0xc1, 0xad, 0x90, 0x9f, 0x3e, 0x2d, 0x6c, 0x3f, 0x01, 0x3a, 0x86, 0x69, 0x58, 0xf5, 0x4f, 0x5c, 0xd6, 0xbb, 0x83, 0x75, 0xb0, 0xf7, 0xab, 0xa6, 0x67, 0x3b, 0xe5, 0x23, 0xa7, 0x90, 0xe7, 0x5e, 0x70, 0x0a, 0x42, 0x36, 0x73, 0x9f, 0xe4, 0x6b, 0xbf, 0x38, 0xe1, 0x56, 0x9c, 0x09, 0x73, 0xd7, 0xb7, 0x1e, 0x3f, 0x8e, 0x80, 0x37, 0xd9, 0x4e, 0xd1, 0xd6, 0x8b, 0xce, 0xd0, 0x96, 0x52, 0xa2, 0x16, 0xbe, 0x2a, 0x6a, 0x11, 0x16, 0x8b, 0x4a, 0xa6, 0xfa, 0x34, 0x9a, 0x1b, 0xac, 0x27, 0xde, 0x35, 0xef, 0xf5, 0xf8, 0x9d, 0xd1, 0x3b, 0x9c, 0x88, 0xc8, 0x6d, 0x05, 0x97, 0x00, 0xd2, 0xe6, 0xfc, 0xf4, 0xd0, 0xa4, 0xdf, 0x3c, 0x6a, 0xc2, 0x00, 0xa5, 0x07, 0x9d, 0x9d, 0x87, 0x75, 0x59, 0x96, 0x53, 0x2d, 0x1b, 0xcf, 0x6c, 0xd9, 0x78, 0xd6, 0x38, 0x13, 0x2e, 0xc6, 0x76, 0x70, 0x12, 0x6b, 0xd2, 0xbd, 0x4a, 0xa6, 0xb6, 0x88, 0xbc, 0x13, 0x64, 0xe3, 0xc6, 0xea, 0x42, 0x64, 0x30, 0x23, 0x74, 0x70, 0x5f, 0xde, 0xb0, 0xb9, 0xcb, 0x01, 0x4e, 0x06, 0xb3, 0x23, 0x9f, 0x33, 0x0f, 0xa9, 0x80, 0x78, 0xc6, 0x2e, 0x2f, 0xee, 0x21, 0x29, 0x5d, 0x4e, 0x7f, 0xc9, 0x84, 0xfc, 0x4b, 0x24, 0x7a, 0x45, 0x2c, 0x91, 0x47, 0xe5, 0x7b, 0x52, 0x34, 0xcd, 0xfa, 0x77, 0x24, 0x23, 0xc3, 0xfe, 0x27, 0x89, 0x7e, 0x3f, 0x4d, 0xa2, 0xd7, 0x88, 0xb8, 0xd2, 0x30, 0x04, 0xf5, 0x46, 0x92, 0xe1, 0x8d, 0x35, 0xea, 0xb1, 0xd6, 0x65, 0x72, 0x11, 0x0f, 0xf0, 0x6d, 0x89, 0xac, 0x48, 0x17, 0xb4, 0xef, 0x79, 0xdc, 0xa1, 0xb8, 0xae, 0xc8, 0x78, 0x9e, 0xf7, 0x3f, 0x61, 0x3e, 0x49, 0xee, 0xa1, 0xd3, 0xc7, 0x01, 0x06, 0x08, 0x3f, 0x96, 0x86, 0x0a, 0xf8, 0x72, 0x23, 0xe0, 0xab, 0xf3, 0x12, 0xff, 0xcf, 0x46, 0x1b, 0x19, 0x19, 0xda, 0x43, 0x37, 0x44, 0x15, 0xa9, 0x07, 0x0e, 0x45, 0xae, 0x77, 0x83, 0xd9, 0x58, 0x82, 0x7d, 0xd1, 0xf9, 0x4a, 0x6c, 0x73, 0x0b, 0x68, 0x53, 0x40, 0x5f, 0x80, 0x13, 0x26, 0x77, 0x18, 0xec, 0xf7, 0x30, 0xaa, 0x41, 0x1a, 0xa3, 0xf7, 0x9b, 0x81, 0x4e, 0x9f, 0xf1, 0xda, 0x6f, 0xef, 0x27, 0x0a, 0xb1, 0xfa, 0xd4, 0xd7, 0x0a, 0xeb, 0x48, 0xe4, 0xe4, 0x99, 0xce, 0xe3, 0x7b, 0x5c, 0x2e, 0x06, 0x86, 0x20, 0x76, 0xb6, 0x19, 0xb7, 0xfa, 0x88, 0xca, 0x74, 0x9a, 0x6d, 0x13, 0xf5, 0x43, 0x29, 0xf7, 0x40, 0xb9, 0x06, 0xe8, 0x12, 0x93, 0xc9, 0xe9, 0x73, 0x87, 0xe5, 0xf0, 0x8e, 0xe7, 0xef, 0x8e, 0xc0, 0x6c, 0x52, 0xd1, 0xef, 0x33, 0x44, 0x6a, 0x1d, 0x05, 0xf8, 0x0b, 0x3c, 0xdb, 0x15, 0x13, 0x44, 0xa1, 0x68, 0x6d, 0x84, 0x3b, 0xd5, 0xb5, 0x35, 0xc6, 0x94, 0x9d, 0x55, 0x20, 0x9a, 0x90, 0xb3, 0xaa, 0x54, 0x95, 0x46, 0x4c, 0x9b, 0x75, 0xc2, 0xba, 0xe5, 0x20, 0x6d, 0xf6, 0xb8, 0x4d, 0x2f, 0x17, 0x65, 0x61, 0xe9, 0x48, 0xf2, 0x92, 0x08, 0x13, 0x58, 0x4c, 0x5a, 0xe0, 0xef, 0xd3, 0x20, 0xb8, 0x26, 0x2b, 0x64, 0x4f, 0x77, 0x35, 0x8d, 0x42, 0x9a, 0x1a, 0x30, 0x9d, 0xf9, 0xec, 0x29, 0xa0, 0x65, 0x8b, 0xeb, 0xc3, 0x07, 0xc6, 0x14, 0xf7, 0x99, 0xc3, 0x45, 0x2f, 0xd6, 0xa1, 0x30, 0x1f, 0x2e, 0x5b, 0xf2, 0x43, 0xbf, 0xf0, 0xa4, 0x24, 0x81, 0xc1, 0x2c, 0xd7, 0xc0, 0x3a, 0x59, 0xc6, 0xd0, 0xb4, 0x30, 0xb3, 0xfc, 0x9a, 0x80, 0xf9, 0xbf, 0xcb, 0xbd, 0x15, 0x37, 0x40, 0x0a, 0x66, 0xd6, 0xef, 0x98, 0x31, 0x5b, 0xef, 0x2f, 0xe8, 0x00, 0xdc, 0x0a, 0xac, 0xf5, 0x7d, 0xe8, 0x10, 0x0e, 0xa4, 0x60, 0x20, 0xb9, 0x56, 0x75, 0xa2, 0x32, 0x2c, 0x6a, 0x9b, 0xfa, 0xf9, 0xd8, 0x15, 0x85, 0xad, 0xfd, 0x20, 0x32, 0x7a, 0x57, 0x17, 0x81, 0x35, 0x71, 0x24, 0x81, 0xfe, 0xfe, 0x06, 0x87, 0x23, 0x24, 0x12, 0x25, 0x42, 0x1a, 0x78, 0x5a, 0xae, 0xf5, 0xc8, 0x07, 0x14, 0xbf, 0xb5, 0xa2, 0x5f, 0xca, 0x18, 0x2e, 0xd8, 0x43, 0x38, 0x6b, 0x92, 0x0a, 0x48, 0x4a, 0x05, 0xc1, 0x31, 0xa3, 0xf9, 0x24, 0x92, 0x2a, 0xa6, 0x98, 0x05, 0xa0, 0x19, 0x06, 0xa5, 0x46, 0xd9, 0xe9, 0xcd, 0x97, 0xcb, 0xa6, 0x22, 0x36, 0x53, 0x1d, 0xd3, 0x26, 0xbc, 0x7d, 0x1f, 0x39, 0xda, 0x5c, 0x18, 0xcb, 0xed, 0x07, 0xa7, 0xaf, 0xc9, 0x16, 0xd1, 0x6a, 0x34, 0x44, 0x38, 0x9f, 0x90, 0x7e, 0xe5, 0xcb, 0xba, 0x3a, 0x44, 0x33, 0x31, 0x0a, 0x70, 0x1a, 0x7b, 0x71, 0xb1, 0x36, 0xc4, 0xf5, 0x44, 0x65, 0xc9, 0x75, 0x5a, 0x9d, 0xf4, 0xbd, 0x62, 0x21, 0xc8, 0x58, 0x8b, 0xfb, 0x80, 0xa5, 0x85, 0xa6, 0xf3, 0x2e, 0x88, 0x0b, 0xbb, 0x34, 0x98, 0xaf, 0x96, 0x8f, 0x07, 0x2a, 0x0c, 0xb5, 0x3b, 0xdb, 0x53, 0x18, 0xb2, 0xda, 0x6f, 0xb5, 0x42, 0x2e, 0x9d, 0xe9, 0xa6, 0x40, 0xf2, 0x87, 0x36, 0x90, 0x40, 0x29, 0xf6, 0xa7, 0x39, 0xc3, 0xd2, 0x4d, 0xd7, 0x7e, 0x28, 0xfb, 0xfb, 0xc3, 0x87, 0x93, 0x54, 0x95, 0xb7, 0x4f, 0x82, 0x25, 0xf9, 0xf7, 0x7b, 0xa0, 0x8f, 0x58, 0x2e, 0x4c, 0x7f, 0xf1, 0x67, 0xd3, 0x95, 0xef, 0xf3, 0xdf, 0xa7, 0x5c, 0x04, 0xe6, 0x1c, 0x93, 0xd7, 0x48, 0xaf, 0xf7, 0x93, 0x97, 0x71, 0xe4, 0x75, 0x35, 0x0d, 0xe6, 0x2a, 0x25, 0x50, 0x29, 0x7c, 0x1b, 0xe9, 0x31, 0x31, 0xd5, 0x6d, 0xcb, 0x30, 0xae, 0x9e, 0x44, 0xe6, 0x71, 0xec, 0xd8, 0xe8, 0x6b, 0x3c, 0x6d, 0xda, 0xc4, 0xe9, 0x82, 0x8f, 0x0f, 0x08, 0x62, 0x71, 0x1f, 0xf1, 0x9d, 0x24, 0x1c, 0xfb, 0xb8, 0x66, 0xd7, 0x86, 0x24, 0x3a, 0x5b, 0x3f, 0x6d, 0x45, 0xc5, 0x9f, 0xb4, 0x78, 0x55, 0xb5, 0x5f, 0xef, 0xc4, 0x26, 0x0f, 0x19, 0xd8, 0x72, 0xd2, 0x1a, 0x37, 0x78, 0x9b, 0x6d, 0x79, 0x3d, 0xef, 0xce, 0x80, 0xe9, 0xe0, 0x57, 0x0c, 0x12, 0x3f, 0xe9, 0x8a, 0x3d, 0x0e, 0xcd, 0x2d, 0xa2, 0x34, 0x9b, 0x40, 0x30, 0x74, 0x5b, 0xbb, 0xd1, 0xa0, 0xeb, 0x14, 0xef, 0x0a, 0xa1, 0x57, 0x37, 0x3c, 0x30, 0x79, 0x9d, 0xe9, 0xd0, 0xea, 0xa0, 0x23, 0x99, 0x69, 0xcf, 0xcd, 0x30, 0x1c, 0x8c, 0x54, 0xa6, 0xe0, 0x10, 0x9a, 0x9d, 0xde, 0xaf, 0x33, 0xad, 0x5f, 0x5d, 0xd4, 0x06, 0xe1, 0x72, 0x08, 0x56, 0x69, 0xaa, 0x25, 0xed, 0x1c, 0x70, 0x7f, 0x1f, 0x09, 0x5c, 0xdb, 0xe9, 0x4a, 0xfa, 0x27, 0xd8, 0x4b, 0xcd, 0x68, 0x27, 0x69, 0x93, 0xf3, 0x27, 0xbf, 0xcb, 0xe0, 0xe4, 0x3c, 0x75, 0xbc, 0x06, 0xf9, 0x19, 0x7e, 0xf5, 0xca, 0x0a, 0xbc, 0x41, 0x14, 0xec, 0x1f, 0x40, 0xde, 0x74, 0x15, 0xf9, 0x2a, 0x6f, 0xc5, 0x40, 0x85, 0x06, 0x48, 0x23, 0xdd, 0x40, 0x16, 0x85, 0x93, 0xc8, 0xbe, 0x09, 0xd1, 0xf1, 0xdb, 0x32, 0x1e, 0xf7, 0x43, 0xc8, 0x2f, 0x88, 0x81, 0x7d, 0x00, 0x82, 0x86, 0xd0, 0x24, 0xff, 0x9b, 0x32, 0x5a, 0x8f, 0x9a, 0x67, 0x60, 0xc4, 0x5e, 0x30, 0x0c, 0xf4, 0x78, 0x27, 0x98, 0x3a, 0x23, 0xea, 0x3e, 0xbe, 0x7b, 0x7b, 0x04, 0x36, 0xe9, 0xe7, 0xda, 0xad, 0xe2, 0x26, 0xe2, 0x83, 0xd1, 0x43, 0x0f, 0xb6, 0x51, 0xbd, 0xf1, 0x5f, 0xa0, 0x2c, 0xcf, 0x80, 0x50, 0x27, 0xf7, 0xfc, 0x40, 0x66, 0x52, 0xe7, 0xcb, 0x24, 0x3b, 0x00, 0x3f, 0xc7, 0x91, 0x7c, 0x91, 0xc3, 0x0b, 0x06, 0x4f, 0xbc, 0xcc, 0x03, 0xd5, 0xeb, 0x38, 0x1a, 0xc4, 0xc2, 0x05, 0xf4, 0xb0, 0xd3, 0x95, 0x40, 0x19, 0xee, 0x83, 0xfb, 0x9d, 0x89, 0x7c, 0xee, 0x6b, 0x65, 0x50, 0x78, 0xfb, 0x6f, 0x48, 0x8d, 0xfd, 0xe5, 0xbb, 0xff, 0x8f, 0xb9, 0xdc, 0xfc, 0xb2, 0x3a, 0xd6, 0xd9, 0xff, 0xf1, 0x1b, 0x0d, 0x96, 0xc9, 0xf8, 0x81, 0x58, 0x74, 0x6e, 0x07, 0x56, 0x09, 0x3d, 0x27, 0x88, 0xf2, 0x41, 0x22, 0xc3, 0x05, 0x01, 0x31, 0xe5, 0xf1, 0x86, 0x0e, 0x53, 0xdc, 0x69, 0xb5, 0xa5, 0x4a, 0x30, 0x6c, 0x9f, 0x41, 0xdb, 0x01, 0x63, 0xab, 0xb9, 0x53, 0xe6, 0xfb, 0x80, 0x13, 0xa1, 0x13, 0x9d, 0xcc, 0x89, 0x65, 0xc9, 0x21, 0x40, 0x59, 0xdd, 0x57, 0x8d, 0xef, 0xe7, 0x13, 0x0a, 0xa6, 0x7d, 0x64, 0x1c, 0x9c, 0x51, 0x03, 0x28, 0xf6, 0x06, 0xda, 0x04, 0x82, 0x42, 0xc4, 0xac, 0x9b, 0x05, 0x94, 0x37, 0x4e, 0x39, 0x58, 0x09, 0xbb, 0x8a, 0xdf, 0x49, 0xbd, 0x77, 0x78, 0x96, 0xcd, 0xa9, 0xfd, 0xf5, 0x23, 0x84, 0x10, 0x0e, 0x1f, 0xfd, 0xa5, 0x99, 0xe8, 0xab, 0xc1, 0x13, 0x53, 0x20, 0x80, 0xb5, 0x06, 0x79, 0x5d, 0xa6, 0xdd, 0x34, 0xae, 0x70, 0x8c, 0x42, 0x6e, 0xb1, 0x86, 0x5d, 0x3f, 0x13, 0x1e, 0x9c, 0xaf, 0x7d, 0xec, 0x45, 0xbb, 0x8b, 0x73, 0xe2, 0x92, 0x3c, 0x00, 0x97, 0x9b, 0xeb, 0xd5, 0xb2, 0xb8, 0x81, 0x87, 0x84, 0xcd, 0xe8, 0xa5, 0x70, 0x7c, 0xc3, 0x9a, 0x41, 0x33, 0x5c, 0xd5, 0xc0, 0x69, 0xdd, 0x27, 0x87, 0x24, 0xc4, 0x6c, 0x10, 0xbf, 0x91, 0x6d, 0x11, 0xea, 0xc1, 0x05, 0x0c, 0xf2, 0x00, 0x83, 0x21, 0x43, 0x9b, 0x50, 0x28, 0x2b, 0x34, 0xd2, 0xfc, 0xe0, 0xb9, 0x8f, 0x19, 0xc5, 0x97, 0x96, 0x6a, 0xe9, 0x2a, 0x1b, 0x5c, 0xd0, 0x78, 0x61, 0x37, 0x77, 0x20, 0xdd, 0xae, 0x92, 0x8d, 0x98, 0xb5, 0x18, 0x6f, 0xd5, 0x92, 0x01, 0x6c, 0xf4, 0x37, 0x4f, 0x12, 0x96, 0xcf, 0x4b, 0x11, 0x02, 0x97, 0x11, 0xa7, 0xc7, 0xef, 0x4e, 0x5b, 0xa3, 0xb1, 0x49, 0xee, 0xa4, 0xc1, 0x20, 0x8f, 0x8d, 0xe5, 0x54, 0x4e, 0x7b, 0xd7, 0x88, 0xd3, 0xc8, 0x99, 0x86, 0x50, 0x30, 0x09, 0x83, 0xb4, 0x32, 0xb5, 0xa4, 0x22, 0xb9, 0xf0, 0xc1, 0xa1, 0xfc, 0x26, 0x68, 0x15, 0xa3, 0x6c, 0x25, 0x6e, 0x2b, 0x5b, 0x00, 0x1f, 0x8b, 0x1f, 0x48, 0xd1, 0x18, 0xcb, 0x8f, 0x59, 0xa6, 0xef, 0xf6, 0xe8, 0xf0, 0x6d, 0xab, 0x82, 0x3a, 0x88, 0xaf, 0xb2, 0x34, 0x3e, 0xdd, 0x7b, 0x22, 0xd8, 0x28, 0x91, 0x3a, 0xbf, 0x24, 0xca, 0x4d, 0x91, 0xc8, 0xcf, 0xaa, 0x74, 0x72, 0x17, 0x40, 0xab, 0x2b, 0x16, 0x02, 0x67, 0x2c, 0xb1, 0x90, 0xdf, 0xa2, 0xf6, 0x13, 0xa2, 0xaf, 0x0a, 0x68, 0x2c, 0xb1, 0x62, 0x82, 0xb8, 0xc6, 0x36, 0x09, 0x56, 0x90, 0x33, 0x47, 0x3d, 0x35, 0x71, 0x45, 0x62, 0xaa, 0xa4, 0x31, 0x4a, 0x32, 0x96, 0x03, 0x1c, 0x21, 0xd5, 0x61, 0xfa, 0xe6, 0xa8, 0xbf, 0x91, 0x48, 0x48, 0xca, 0xef, 0xf0, 0x4d, 0x07, 0x95, 0x28, 0x67, 0xb7, 0xce, 0xe2, 0x4e, 0xff, 0x3f, 0xfc, 0xfc, 0x45, 0xbe, 0xc2, 0x19, 0xdd, 0x68, 0xb5, 0xb7, 0xe5, 0xed, 0x8b, 0x3f, 0x6d, 0x2f, 0x76, 0xab, 0xdc, 0x0c, 0xa9, 0xf6, 0x8e, 0x77, 0x19, 0xd1, 0xc2, 0xce, 0x80, 0x98, 0xb4, 0x67, 0xa8, 0x84, 0x06, 0x6d, 0xe6, 0x22, 0x64, 0xea, 0xe4, 0x04, 0x68, 0x24, 0xa4, 0xb6, 0xbb, 0x2d, 0xc2, 0xf3, 0x7e, 0xb6, 0xfa, 0x19, 0xe8, 0x24, 0xe9, 0xdb, 0x30, 0xe6, 0x18, 0x36, 0xad, 0x05, 0x36, 0xa6, 0x3c, 0xfc, 0xa5, 0x99, 0xe2, 0xcb, 0x39, 0x24, 0xb2, 0x47, 0x3c, 0xf5, 0xf1, 0xb4, 0xb5, 0x89, 0x79, 0x95, 0xe9, 0x9f, 0x5b, 0xc3, 0x23, 0xec, 0xc8, 0xbd, 0xb1, 0x10, 0x32, 0x3f, 0x2f, 0xc9, 0xae, 0x16, 0x08, 0x66, 0x9d, 0x32, 0x39, 0x7f, 0x8b, 0xfd, 0x58, 0xe4, 0x57, 0xeb, 0xd5, 0xd3, 0x94, 0x52, 0x81, 0x6e, 0x30, 0x7d, 0x4c, 0x6b, 0x53, 0xfc, 0x53, 0x0e, 0x8a, 0x3d, 0x1a, 0x54, 0x25, 0x61, 0x15, 0x72, 0xde, 0x48, 0x6e, 0x7d, 0xbb, 0xee, 0x02, 0x6b, 0x35, 0xfb, 0xad, 0x3a, 0x99, 0x95, 0xc7, 0x6f, 0xaf, 0x79, 0xee, 0xc2, 0x9a, 0x4a, 0x06, 0x18, 0xff, 0x28, 0x7f, 0xb1, 0x69, 0x85, 0xd6, 0xa3, 0xec, 0x34, 0x5f, 0x87, 0x09, 0xc3, 0x41, 0x72, 0xd2, 0x0b, 0xc2, 0x27, 0x4e, 0x05, 0xc5, 0x8a, 0x1f, 0xe0, 0x90, 0x58, 0x62, 0x50, 0xd3, 0x16, 0xd7, 0x28, 0xe6, 0x47, 0x42, 0x2b, 0x53, 0xe2, 0x11, 0x1f, 0x94, 0x03, 0x3e, 0x24, 0x1e, 0xe1, 0x77, 0x44, 0x9e, 0x00, 0x7d, 0x4b, 0x82, 0xa8, 0xca, 0xd9, 0xbb, 0x95, 0x76, 0xb5, 0xc1, 0xf0, 0x5b, 0x64, 0xd8, 0x7e, 0x78, 0xfb, 0x93, 0x18, 0x93, 0x31, 0x96, 0x5b, 0x22, 0xb8, 0x9f, 0xa0, 0x6c, 0xce, 0xc8, 0x2e, 0xec, 0x0f, 0x06, 0xaf, 0xf6, 0x8d, 0xf6, 0xe1, 0x9d, 0x22, 0xd9, 0x8e, 0xd3, 0x05, 0xdc, 0xbe, 0xd2, 0x9c, 0x9e, 0x2b, 0xbb, 0x91, 0xec, 0xf5, 0x7d, 0x28, 0xcf, 0x97, 0xf9, 0xd0, 0xc8, 0x1a, 0x64, 0xf8, 0x5a, 0x89, 0xec, 0x23, 0xc9, 0xa4, 0x9e, 0x3f, 0x22, 0xd8, 0x87, 0x32, 0x7b, 0x6f, 0x19, 0xb7, 0x7c, 0x05, 0xd1, 0x68, 0x1e, 0x3b, 0x17, 0x1b, 0xb3, 0xaf, 0x66, 0x72, 0x27, 0x2b, 0xac, 0xae, 0x85, 0x1c, 0xf4, 0xc4, 0xbc, 0x46, 0x42, 0xb3, 0xa4, 0xb7, 0xbe, 0x14, 0x3c, 0xf9, 0x15, 0xf3, 0x36, 0x8c, 0x1d, 0xdd, 0xb5, 0x93, 0xb8, 0x3a, 0x55, 0xce, 0xfa, 0xde, 0x6c, 0xc8, 0x8e, 0xda, 0x8f, 0x52, 0x55, 0x98, 0x58, 0x2f, 0x51, 0x27, 0x67, 0x11, 0xc2, 0xd3, 0xa7, 0xc5, 0x8e, 0xf9, 0xd2, 0xaa, 0xe6, 0x19, 0x38, 0x67, 0x27, 0x2d, 0xbc, 0xdd, 0xfe, 0x39, 0x1f, 0x5b, 0xd0, 0x24, 0x81, 0x11, 0x59, 0xc6, 0x24, 0xc8, 0x93, 0x42, 0x74, 0xd0, 0xd9, 0x96, 0x44, 0x39, 0x4c, 0x70, 0x5b, 0x46, 0x76, 0x44, 0x2f, 0x1e, 0x2d, 0x9b, 0xf0, 0xc5, 0xba, 0xae, 0xc8, 0x4b, 0x3b, 0x33, 0x62, 0x43, 0x46, 0x77, 0xa9, 0x77, 0xcf, 0xad, 0xd2, 0xda, 0x4c, 0x85, 0x9c, 0xbe, 0x16, 0x01, 0xd6, 0x47, 0x13, 0x85, 0x22, 0x20, 0x92, 0x2d, 0xfa, 0x6c, 0x76, 0x62, 0xf0, 0x00, 0x97, 0xb0, 0x3a, 0xcf, 0x65, 0xd2, 0x6d, 0xa5, 0xcf, 0x0f, 0x89, 0x19, 0x63, 0xca, 0x36, 0xbd, 0xb6, 0x54, 0x4d, 0x97, 0x06, 0x04, 0x9a, 0xd5, 0x1e, 0x8a, 0xe1, 0xbc, 0x7a, 0x80, 0x1e, 0xe2, 0xac, 0x42, 0x11, 0x9d, 0xfe, 0x00, 0xfa, 0xbb, 0x59, 0x11, 0xa2, 0x73, 0x65, 0x8a, 0x9a, 0x9c, 0xf2, 0x10, 0xc7, 0x1d, 0x97, 0xea, 0x1f, 0xa5, 0x98, 0x5a, 0xad, 0x9c, 0x0d, 0x2e, 0xdb, 0x59, 0x41, 0x92, 0xf0, 0x95, 0x59, 0x28, 0xd8, 0x1f, 0x36, 0x5b, 0x24, 0xd2, 0x9c, 0xf0, 0x51, 0xc5, 0x93, 0xdd, 0x4d, 0xc1, 0x0d, 0x5f, 0x37, 0xf8, 0xca, 0x47, 0x66, 0xf3, 0x79, 0x94, 0xae, 0xcd, 0x20, 0x47, 0xde, 0x9f, 0xbd, 0x73, 0x8d, 0x3b, 0x2e, 0x94, 0x17, 0x1d, 0x4e, 0x21, 0xe2, 0x9e, 0x61, 0x65, 0xe6, 0x6b, 0xb2, 0x8a, 0x6c, 0x36, 0x7a, 0xf7, 0x15, 0xab, 0x04, 0xdc, 0x1f, 0xa6, 0x0f, 0x0a, 0xe4, 0xa3, 0x74, 0x09, 0xa3, 0x76, 0x08, 0x64, 0x83, 0x3c, 0xc4, 0x48, 0xd5, 0x91, 0x23, 0x4d, 0x9a, 0x03, 0xcc, 0x94, 0x45, 0xc7, 0x71, 0x12, 0xc2, 0xab, 0xf7, 0x2b, 0xb6, 0x4c, 0xd7, 0x83, 0x09, 0x89, 0xc4, 0x11, 0xa2, 0x37, 0x8e, 0x75, 0x71, 0x16, 0x46, 0x8b, 0xb3, 0x04, 0xa3, 0x40, 0x71, 0x71, 0xa4, 0xa4, 0x4a, 0x13, 0x77, 0x41, 0x73, 0xdb, 0x9a, 0xac, 0xfc, 0x27, 0x40, 0x59, 0x55 ],
-const [ 0xf7, 0xa5, 0x09, 0x8b, 0x2a, 0x4d, 0x92, 0xa7, 0xe7, 0x1e, 0x46, 0x58, 0xb4, 0x58, 0xf4, 0x7a, 0x0b, 0x5e, 0x04, 0x27, 0xad, 0xb9, 0x67, 0xda, 0x3a, 0x60, 0xce, 0xd4, 0xff, 0x36, 0x1a, 0xbf, 0x0f, 0xd5, 0x14, 0x92, 0x95, 0x8a, 0x5f, 0xb4, 0x68, 0xa0, 0xab, 0x64, 0xe0, 0xe2, 0x2a, 0x58, 0xe9, 0x5b, 0x48, 0xa4, 0x55, 0x60, 0x97, 0xde, 0x77, 0xd1, 0x08, 0x80, 0xed, 0x9b, 0x61, 0x8d, 0xbd, 0x81, 0xeb, 0x78, 0xa4, 0x1d, 0x6b, 0x41, 0xaa, 0x21, 0x54, 0xe1, 0xfa, 0xe3, 0x3b, 0xe8, 0xf1, 0x19, 0x8b, 0x65, 0x75, 0xe0, 0x7a, 0x06, 0x88, 0x04, 0x3c, 0x80, 0x1c, 0x7b, 0x76, 0x31, 0x29, 0x32, 0xf5, 0x04, 0xfe, 0x0d, 0xa0, 0x96, 0xd5, 0x29, 0xab, 0x97, 0xa9, 0x64, 0x0e, 0x72, 0x4c, 0x1f, 0x36, 0x30, 0xb4, 0x42, 0xfa, 0x99, 0x95, 0x81, 0xd0, 0x9d, 0x36, 0xde, 0x41, 0xf3, 0x7d, 0x6f, 0x9a, 0x00, 0x4b, 0x62, 0xe5, 0xfa, 0x10, 0x3e, 0x17, 0x4d, 0x96, 0x6b, 0x8b, 0x3e, 0x21, 0xf5, 0xaf, 0xce, 0xba, 0x8d, 0xfe, 0xe1, 0xc8, 0xd1, 0x2e, 0x9f, 0xe0, 0xcd, 0xaa, 0x1b, 0xde, 0xc1, 0x42, 0x32, 0x35, 0x24, 0x21, 0xb7, 0x83, 0xea, 0x00, 0xcd, 0x69, 0x03, 0x9a, 0x93, 0x99, 0x24, 0x60, 0x07, 0x30, 0xc9, 0x6d, 0x24, 0x47, 0x7b, 0xbc, 0x4e, 0xc4, 0x4e, 0x99, 0xf0, 0x76, 0xaf, 0x55, 0x64, 0x62, 0x5c, 0x3e, 0x13, 0x57, 0xb4, 0xce, 0xdd, 0xc9, 0x31, 0x23, 0xbb, 0xdc, 0x33, 0xaf, 0xa2, 0xbe, 0xff, 0x31, 0xab, 0x3a, 0x07, 0xe4, 0x72, 0x8a, 0x6c, 0xf6, 0xbb, 0x6d, 0xc1, 0x3b, 0x5c, 0x7a, 0x12, 0x23, 0x57, 0xb4, 0x24, 0xea, 0x46, 0x5e, 0xff, 0x0e, 0xfc, 0x11, 0xaa, 0x06, 0x69, 0x0b, 0x36, 0x31, 0xbe, 0xca, 0xfd, 0x0d, 0xd2, 0xda, 0x2c, 0xa9, 0xc4, 0xeb, 0x7f, 0x5d, 0xe3, 0x26, 0x4c, 0xb8, 0xca, 0xc1, 0xc3, 0xba, 0xcf, 0xd1, 0x74, 0x43, 0x9f, 0x60, 0x12, 0xcc, 0x22, 0xc0, 0x76, 0x55, 0xa5, 0x1e, 0xe6, 0x9e, 0x37, 0x5a, 0x98, 0x9a, 0x53, 0x17, 0x72, 0x21, 0xc0, 0x0e, 0x14, 0xe5, 0xb6, 0xa7, 0x18, 0xa7, 0x42, 0xca, 0x98, 0xab, 0xeb, 0xf2, 0xf1, 0x69, 0x96, 0x84, 0xc7, 0x85, 0xa7, 0x60, 0x4a, 0x01, 0x69, 0xb5, 0xb7, 0xb2, 0xb0, 0x19, 0x21, 0xf0, 0xbd, 0xd9, 0x71, 0x92, 0x61, 0x8d, 0xac, 0x1a, 0x66, 0xf0, 0x74, 0x2c, 0x2a, 0xef, 0xd2, 0x45, 0x8d, 0x00, 0x32, 0xa9, 0x0d, 0xb5, 0xaf, 0x9d, 0x30, 0x91, 0x91, 0xd7, 0x23, 0x1a, 0x14, 0x33, 0xa0, 0x2f, 0x6c, 0xa7, 0x14, 0x9c, 0x05, 0x79, 0x02, 0xec, 0x0f, 0xaf, 0xa2, 0x7f, 0x3a, 0xc8, 0xcf, 0xdc, 0xbe, 0xa9, 0x20, 0x47, 0x9f, 0xda, 0x54, 0x97, 0x2f, 0xf2, 0xf3, 0x42, 0xd4, 0x50, 0x32, 0xba, 0x0b, 0x0c, 0x17, 0xfc, 0xad, 0x2d, 0xdf, 0x65, 0x72, 0x1d, 0x9d, 0xc8, 0xb3, 0x5a, 0x23, 0xbf, 0x74, 0x6d, 0x25, 0x3e, 0xa1, 0x20, 0x9c, 0x6e, 0x98, 0xec, 0x69, 0xb8, 0xe8, 0xb1, 0x3b, 0x1f, 0x58, 0xaa, 0xb2, 0xd4, 0x2c, 0x9f, 0xc5, 0x04, 0xa3, 0x5c, 0x61, 0xf5, 0xc4, 0x63, 0x52, 0x51, 0x5a, 0xde, 0x67, 0xc2, 0x3e, 0xd7, 0xd1, 0xbe, 0xd4, 0xab, 0xcd, 0xa5, 0xd8, 0xbc, 0x83, 0x09, 0x5b, 0x67, 0x2d, 0x4c, 0x08, 0x36, 0x7b, 0x71, 0xac, 0x56, 0x36, 0x2c, 0xf6, 0x4b, 0x25, 0x3b, 0x7b, 0xe2, 0x2d, 0xf9, 0xfc, 0x67, 0xbb, 0x31, 0xec, 0x19, 0x67, 0x30, 0x2d, 0xdb, 0xd1, 0x1e, 0x1b, 0x2c, 0xcf, 0x8e, 0xcb, 0x59, 0xcb, 0x53, 0x94, 0xf1, 0x66, 0x95, 0xcf, 0x7a, 0x61, 0x25, 0xdc, 0x62, 0xbe, 0x0e, 0x66, 0x39, 0x22, 0x6d, 0xe7, 0x1d, 0x7e, 0x82, 0x6e, 0x75, 0xee, 0x06, 0xa0, 0xe2, 0xe2, 0xbf, 0xfc, 0x72, 0x7b, 0x53, 0x64, 0x17, 0x38, 0x5a, 0xd9, 0x58, 0xd1, 0xb6, 0x87, 0x47, 0x63, 0x27, 0x01, 0xb3, 0xce, 0x1a, 0xcd, 0x9e, 0x5b, 0xc2, 0x23, 0xf1, 0xa3, 0x6a, 0xf2, 0x6f, 0xac, 0x0a, 0x24, 0xe8, 0x54, 0x18, 0x23, 0xaf, 0xf3, 0xa0, 0x9c, 0x4e, 0x3c, 0x97, 0x83, 0x77, 0x64, 0x6d, 0x57, 0x3e, 0x87, 0xe1, 0xa7, 0x86, 0x47, 0x19, 0xd5, 0xb9, 0xb6, 0xf2, 0x1a, 0xbd, 0x76, 0x95, 0xca, 0x23, 0x1e, 0x4b, 0xd9, 0xa1, 0xe0, 0x92, 0x9f, 0xc2, 0x69, 0x70, 0xd8, 0xdc, 0x09, 0x07, 0xef, 0x43, 0x14, 0x6a, 0x7c, 0xbc, 0x88, 0xaf, 0x0b, 0x34, 0xef, 0x45, 0x1f, 0xb2, 0x87, 0x88, 0x76, 0x8b, 0xa1, 0x93, 0x8f, 0xd5, 0x47, 0x55, 0x6a, 0x1d, 0x21, 0xe8, 0x8f, 0x5d, 0x9a, 0x1d, 0x51, 0x28, 0x3e, 0x5c, 0x54, 0x28, 0x66, 0xab, 0x4d, 0xca, 0x18, 0x0c, 0x09, 0x38, 0x29, 0x0c, 0xb1, 0x88, 0xa4, 0x99, 0x4c, 0x32, 0x70, 0x14, 0x85, 0xc8, 0x2c, 0xa7, 0xae, 0xe1, 0x5e, 0xd9, 0x06, 0x57, 0xcd, 0x5f, 0x37, 0xb2, 0x2b, 0x35, 0x23, 0xe3, 0xf7, 0xee, 0xe0, 0x36, 0xa2, 0x49, 0x01, 0x82, 0xf1, 0x04, 0x18, 0xa2, 0xa2, 0xf5, 0x79, 0x29, 0x52, 0x56, 0x40, 0x52, 0x9e, 0x61, 0x95, 0x36, 0x89, 0x1d, 0x2e, 0x42, 0x1d, 0x77, 0x16, 0xe7, 0x56, 0x94, 0xad, 0x93, 0x3b, 0x66, 0xf1, 0xe1, 0x4e, 0x7d, 0xfb, 0x0d, 0x26, 0x20, 0xcc, 0xaa, 0x5b, 0x9d, 0x4a, 0x97, 0xa2, 0xdd, 0x86, 0x2f, 0x39, 0x3b, 0x40, 0xc0, 0x86, 0x96, 0xad, 0x3e, 0xfb, 0xa5, 0x78, 0x39, 0x3c, 0x8b, 0x06, 0x0d, 0x84, 0xac, 0xfe, 0x59, 0x45, 0xbe, 0x09, 0xb2, 0x0e, 0x23, 0xd6, 0x98, 0xb2, 0x76, 0x62, 0xa8, 0xa7, 0x64, 0x76, 0x14, 0xac, 0xbd, 0x71, 0x51, 0xae, 0xca, 0x47, 0x0f, 0xed, 0xe2, 0xca, 0x6e, 0x5b, 0x38, 0x28, 0x6f, 0x44, 0xf7, 0xb5, 0xa8, 0x34, 0x91, 0xeb, 0x3d, 0x16, 0x53, 0xaf, 0x0b, 0x99, 0x3e, 0xd6, 0x26, 0xd8, 0x12, 0xe8, 0x86, 0x39, 0xab, 0x24, 0xfd, 0x95, 0x90, 0xc4, 0x6c, 0x9a, 0xca, 0x82, 0x37, 0x6e, 0xf2, 0x5a, 0xf6, 0x95, 0x8e, 0x92, 0x6e, 0x15, 0x9e, 0xf8, 0xbf, 0xd8, 0x71, 0x6b, 0xde, 0x51, 0xbd, 0x9c, 0x46, 0x63, 0xef, 0x16, 0xeb, 0x7e, 0xc0, 0x7c, 0x70, 0x0b, 0x09, 0x12, 0x99, 0x0a, 0xd8, 0x7f, 0x03, 0xf9, 0xc3, 0xd2, 0x13, 0xf8, 0x7c, 0xc2, 0x2c, 0x2c, 0xa6, 0x3a, 0x25, 0x61, 0xe7, 0x15, 0xfa, 0xf3, 0x3f, 0x26, 0xc1, 0xee, 0x98, 0x7b, 0xe0, 0x74, 0x9e, 0xe2, 0x7e, 0x5f, 0xd0, 0xad, 0x37, 0x28, 0xd7, 0xb3, 0x14, 0x08, 0x17, 0x97, 0xba, 0x5c, 0x85, 0x4d, 0xe1, 0x4e, 0xb8, 0xd9, 0x08, 0xb2, 0x42, 0x5a, 0x67, 0x2e, 0x40, 0x48, 0x26, 0x9e, 0x30, 0xfa, 0xcc, 0xb6, 0x03, 0x6b, 0xfa, 0xe9, 0x73, 0x3d, 0x59, 0x8a, 0x97, 0xfe, 0xd1, 0x32, 0xb5, 0xab, 0xfc, 0x61, 0x57, 0x72, 0xda, 0x68, 0xa1, 0xbc, 0xc6, 0x86, 0xe1, 0x6b, 0xa8, 0x51, 0x68, 0x60, 0x6d, 0x57, 0x99, 0x41, 0xb4, 0x06, 0x3f, 0x79, 0xca, 0xc9, 0x24, 0x80, 0xd9, 0x74, 0xdf, 0x5c, 0x5c, 0xe2, 0xed, 0x68, 0xd6, 0xdc, 0x03, 0x54, 0xc4, 0x3d, 0xa3, 0x6d, 0xd0, 0x54, 0xee, 0x1e, 0x47, 0x8a, 0xb9, 0xb7, 0xcd, 0x45, 0xe2, 0x6e, 0x50, 0x0c, 0xe4, 0xa4, 0x3a, 0xeb, 0xaa, 0x69, 0xeb, 0x19, 0xa1, 0x41, 0x66, 0xd8, 0x11, 0x28, 0x4a, 0x9d, 0xad, 0xd5, 0x05, 0x71, 0x69, 0x3c, 0x44, 0x97, 0x8b, 0x56, 0xad, 0x6f, 0x05, 0x24, 0xd1, 0x9a, 0x02, 0xf2, 0x5c, 0x5f, 0xbf, 0xd9, 0x8f, 0x4d, 0x9c, 0x87, 0xf1, 0x22, 0x73, 0x43, 0x41, 0xec, 0x28, 0x2b, 0xae, 0x6e, 0x81, 0xc0, 0x4b, 0xc5, 0x38, 0xa5, 0xbd, 0x4c, 0x4f, 0xa4, 0x36, 0xbc, 0xa4, 0xf2, 0xa8, 0x98, 0xc5, 0xb4, 0x32, 0xc8, 0x05, 0xc1, 0xdf, 0x83, 0xd0, 0xaa, 0x8f, 0x73, 0x3b, 0xf8, 0x35, 0x14, 0xdf, 0xb4, 0x43, 0x5e, 0xe8, 0x2d, 0x63, 0xa3, 0x69, 0xf5, 0x68, 0xba, 0xf3, 0x2d, 0x84, 0x5d, 0x65, 0x02, 0xbb, 0xd0, 0x05, 0x78, 0x97, 0xc3, 0xd0, 0x67, 0x1e, 0x7a, 0x0f, 0xc2, 0x01, 0x2b, 0x2b, 0x1f, 0x16, 0xa8, 0xc2, 0x74, 0x08, 0x3d, 0xfa, 0x1f, 0x4e, 0xdc, 0x16, 0x2a, 0x59, 0x77, 0x47, 0xcc, 0x12, 0xae, 0xc4, 0x33, 0x83, 0xaa, 0x1c, 0x80, 0xd4, 0x49, 0xcb, 0x14, 0x7a, 0x7b, 0x0c, 0x0a, 0xab, 0xec, 0xef, 0x04, 0x15, 0xe3, 0xab, 0x2b, 0xcf, 0x6a, 0x35, 0x71, 0x90, 0xaf, 0x12, 0x1a, 0x1f, 0xaa, 0x69, 0x7a, 0x0a, 0x00, 0x5c, 0x00, 0x9b, 0x27, 0x98, 0x73, 0x08, 0xcb, 0x2b, 0x7c, 0xea, 0x71, 0x97, 0x65, 0xf0, 0x5b, 0x24, 0x20, 0xd5, 0xab, 0x7a, 0x8b, 0x8f, 0xcb, 0x6e, 0xf2, 0xca, 0x0b, 0x1d, 0xd5, 0x94, 0x8c, 0x37, 0xec, 0x5a, 0x5e, 0x9e, 0x69, 0x13, 0xe5, 0x30, 0x7d, 0xbb, 0x81, 0xe0, 0x1d, 0x03, 0x6d, 0x0c, 0x06, 0x47, 0xe8, 0x0b, 0xff, 0xc0, 0x93, 0x05, 0x5e, 0xfb, 0x1b, 0x07, 0xcd, 0x89, 0x17, 0x56, 0x4e, 0xf9, 0x34, 0x04, 0x7d, 0x03, 0x8f, 0xc2, 0x15, 0x06, 0x62, 0xf5, 0xb6, 0xb5, 0xe3, 0x0c, 0xe6, 0x0c, 0x69, 0x10, 0x55, 0x8a, 0xd1, 0x7c, 0x65, 0x9a, 0x20, 0x50, 0xe9, 0x52, 0x69, 0x61, 0x2d, 0x5f, 0xf2, 0xf3, 0x38, 0x40, 0x92, 0x89, 0x4d, 0xb3, 0x5d, 0xfc, 0xb8, 0x6d, 0x84, 0xcb, 0xc7, 0x0e, 0x76, 0xb2, 0x16, 0x54, 0x4b, 0x7e, 0x0f, 0x8f, 0x63, 0x1f, 0xb2, 0x55, 0x4a, 0xff, 0x92, 0x76, 0xdf, 0x92, 0x20, 0x32, 0xb6, 0x2f, 0x2c, 0xaa, 0xba, 0x1e, 0xa9, 0x95, 0x17, 0xf2, 0xb1, 0x34, 0x57, 0x18, 0xc9, 0x88, 0xca, 0xb1, 0x65, 0xc2, 0x2c, 0x9d, 0xaf, 0xfb, 0x82, 0xd8, 0x84, 0x25, 0x45, 0x0a, 0xbf, 0x42, 0xc2, 0x59, 0xbb, 0xd4, 0xc1, 0x82, 0x13, 0x94, 0x65, 0x28, 0xac, 0x66, 0x53, 0x6c, 0xf6, 0x8d, 0x16, 0xbd, 0x6e, 0x1b, 0xc3, 0xf1, 0x68, 0xac, 0xd8, 0x95, 0x0b, 0x54, 0x6a, 0x82, 0x9d, 0xd6, 0x80, 0xb1, 0x01, 0x17, 0xba, 0x51, 0x7d, 0xd2, 0x36, 0x16, 0xc1, 0x8c, 0xb3, 0xd3, 0x25, 0xcb, 0xf7, 0x4b, 0x33, 0x83, 0x6f, 0x45, 0x65, 0xd1, 0x16, 0xde, 0x2f, 0xeb, 0x97, 0x23, 0x40, 0x58, 0xb6, 0xdf, 0x06, 0x5c, 0xec, 0xb2, 0x70, 0xb7, 0x51, 0x63, 0xf7, 0x8f, 0xc0, 0x77, 0xdf, 0xaa, 0x35, 0x03, 0xba, 0xe0, 0x79, 0xbe, 0x2f, 0xd0, 0x02, 0x5a, 0xf9, 0xd3, 0x14, 0x15, 0x32, 0x2e, 0x2d, 0x8b, 0xd2, 0x8c, 0xa0, 0xce, 0x73, 0xab, 0x80, 0xb8, 0x57, 0x55, 0xbf, 0x80, 0xab, 0x92, 0x97, 0x8c, 0x0d, 0x1c, 0x29, 0x86, 0x4d, 0x13, 0x65, 0xb2, 0x70, 0xf2, 0x29, 0x7f, 0xfb, 0xc2, 0xad, 0x5c, 0x6e, 0x8d, 0x1e, 0xcc, 0x0e, 0x16, 0x89, 0xbd, 0xe7, 0xc7, 0xfb, 0x16, 0x12, 0xeb, 0xe7, 0x8f, 0x34, 0x1d, 0xc7, 0xc5, 0x47, 0x00, 0x06, 0x8e, 0x9d, 0x31, 0x1e, 0x89, 0x21, 0x7a, 0xfe, 0xfa, 0xe1, 0x49, 0xae, 0xd5, 0xc9, 0x60, 0x35, 0x19, 0xb1, 0xcd, 0xbb, 0x5f, 0x9b, 0x1d, 0xeb, 0xb3, 0x35, 0xcd, 0x9b, 0xa2, 0xa6, 0x01, 0xaf, 0x94, 0x86, 0x78, 0x3a, 0x5d, 0x2e, 0xc0, 0xe7, 0x0e, 0x33, 0xa6, 0x98, 0x11, 0x2d, 0xf1, 0x4c, 0x75, 0xbd, 0x50, 0x46, 0x86, 0xce, 0x90, 0x6c, 0xa1, 0x1a, 0x12, 0xed, 0x46, 0xf0, 0x7d, 0x26, 0x6f, 0x35, 0xb0, 0xc7, 0x20, 0xaa, 0xfb, 0x31, 0x40, 0x6c, 0x8e, 0x23, 0xa7, 0xc1, 0x31, 0x96, 0x78, 0x11, 0x36, 0xe5, 0xb1, 0x33, 0xac, 0x31, 0x00, 0xeb, 0xd6, 0x04, 0xd9, 0xb0, 0xdc, 0x34, 0xc5, 0xb2, 0xbf, 0x0b, 0xfd, 0x1b, 0x92, 0xa4, 0x37, 0x95, 0xe8, 0x98, 0xc0, 0x0d, 0x89, 0xdb, 0xcb, 0xb7, 0x69, 0xe0, 0x09, 0x53, 0xda, 0x04, 0x79, 0xae, 0x00, 0x29, 0x82, 0x6b, 0x85, 0xa1, 0x3f, 0x03, 0x8f, 0x4f, 0x1a, 0x0b, 0xef, 0x08, 0x9c, 0xb6, 0x9c, 0x3f, 0x83, 0x9a, 0x5f, 0xe2, 0x15, 0xb7, 0xcf, 0x7f, 0xb5, 0xb5, 0x80, 0xab, 0xb4, 0x6d, 0x78, 0xa4, 0x69, 0xab, 0xe2, 0x35, 0x84, 0x32, 0x07, 0xda, 0x9f, 0x01, 0x79, 0x25, 0x16, 0xd5, 0x91, 0x60, 0x19, 0xef, 0x1c, 0x74, 0xff, 0x17, 0x52, 0x0a, 0xdd, 0xe1, 0x08, 0xef, 0x58, 0x2f, 0x26, 0xbd, 0xb7, 0xf7, 0x5a, 0xb8, 0x3d, 0x47, 0x0e, 0xf6, 0xb5, 0x86, 0x98, 0xc3, 0x4e, 0xfc, 0xb1, 0x43, 0xa9, 0x95, 0x29, 0x59, 0x31, 0xe1, 0xd9, 0xc8, 0xab, 0x60, 0xd8, 0x98, 0x0d, 0xfd, 0xf2, 0xbc, 0x94, 0xd8, 0x55, 0xf1, 0x11, 0x48, 0x8e, 0xe9, 0x84, 0x21, 0xb4, 0xa9, 0xeb, 0x32, 0xe3, 0x30, 0x5c, 0x12, 0xec, 0x59, 0x52, 0x1d, 0x4b, 0x02, 0x45, 0xb9, 0x5a, 0x6e, 0x7d, 0xde, 0xc4, 0xe8, 0x27, 0xd5, 0x3b, 0xa9, 0xa9, 0x3f, 0x6e, 0xfc, 0x33, 0x5a, 0x35, 0xa0, 0x96, 0x80, 0x0f, 0x6e, 0x5a, 0xf0, 0xcf, 0x3b, 0x0a, 0xd1, 0x92, 0x00, 0xd3, 0x74, 0xf4, 0x39, 0x4e, 0xda, 0x84, 0x8a, 0x99, 0x76, 0x75, 0xa8, 0xac, 0x33, 0x96, 0x77, 0xea, 0xb9, 0x84, 0x70, 0xf7, 0xec, 0x1d, 0x46, 0xca, 0xb6, 0x39, 0xc9, 0x03, 0x07, 0x95, 0x0a, 0x7e, 0x1a, 0x10, 0xc0, 0x28, 0xf9, 0x1a, 0xea, 0x11, 0x43, 0x69, 0xb6, 0xc3, 0x2d, 0xed, 0xa2, 0xd3, 0xc7, 0x07, 0xe1, 0xb5, 0x81, 0xf6, 0x00, 0xd4, 0xed, 0x92, 0xc9, 0xe2, 0xc6, 0x3c, 0x68, 0x6d, 0x32, 0x15, 0xcc, 0xb4, 0x44, 0x6e, 0x50, 0xb8, 0xc5, 0x80, 0x9b, 0x96, 0x34, 0x5d, 0xc4, 0x13, 0x0b, 0x27, 0xba, 0x79, 0x44, 0x80, 0xe4, 0xa2, 0x1c, 0x41, 0x04, 0x52, 0x17, 0x6f, 0x61, 0xca, 0x44, 0x6b, 0x25, 0x99, 0xc2, 0x68, 0x04, 0xb6, 0x83, 0x22, 0x1e, 0xcc, 0x50, 0xce, 0x27, 0xd5, 0x0d, 0x4c, 0xc5, 0xea, 0x3f, 0xa4, 0x39, 0x59, 0xcb, 0xb0, 0x42, 0xf9, 0x00, 0x16, 0x3e, 0xba, 0xd8, 0x7a, 0x93, 0x80, 0x7b, 0xf1, 0x4d, 0x32, 0x05, 0xb8, 0x09, 0x0d, 0x89, 0x26, 0x11, 0x3f, 0x56, 0xdf, 0xc8, 0xb1, 0x79, 0x4b, 0x49, 0x24, 0x83, 0x46, 0x4b, 0x7f, 0x8c, 0x19, 0x48, 0x67, 0x77, 0xa9, 0xde, 0x11, 0x78, 0xef, 0x75, 0x54, 0xd4, 0xa8, 0x22, 0x03, 0xe8, 0x4e, 0xcb, 0x79, 0x6d, 0x46, 0x8c, 0x75, 0xfa, 0x5b, 0x5a, 0x29, 0xca, 0x6b, 0xe6, 0x8d, 0xc0, 0x60, 0xc4, 0xf9, 0xa8, 0x62, 0xcd, 0xf3, 0xc0, 0x4c, 0xc2, 0x46, 0x77, 0x5c, 0x32, 0x54, 0x74, 0x2e, 0x9d, 0xac, 0xda, 0xeb, 0xd9, 0xdf, 0xcb, 0xbe, 0xb5, 0x90, 0x2b, 0x87, 0xdd, 0xcb, 0xa6, 0xd4, 0xfd, 0x98, 0xf4, 0x0d, 0x29, 0xcf, 0x5b, 0xee, 0x7d, 0x2d, 0x76, 0x3a, 0x00, 0xa8, 0x36, 0xae, 0xce, 0x00, 0x26, 0x34, 0x77, 0x97, 0xf3, 0x5a, 0xa2, 0x82, 0x2b, 0x02, 0xf6, 0xe0, 0x45, 0x5b, 0x3a, 0x6a, 0xe2, 0x10, 0xba, 0x4c, 0x52, 0xbf, 0xed, 0x34, 0x5a, 0xac, 0x56, 0xa8, 0x34, 0xb7, 0xa8, 0x9c, 0xd8, 0x8b, 0x2d, 0x44, 0x7a, 0x19, 0x68, 0x27, 0x54, 0x45, 0xfa, 0x75, 0xa5, 0xde, 0xc2, 0x9a, 0xfa, 0xd4, 0x48, 0x13, 0xac, 0xa5, 0x5c, 0x80, 0xaa, 0x19, 0xfa, 0xfb, 0x78, 0x2f, 0x71, 0xa9, 0x78, 0x57, 0xc4, 0x8e, 0x69, 0xe1, 0x51, 0xa6, 0x2d, 0xb6, 0xb0, 0x31, 0xcf, 0x46, 0xde, 0x4e, 0xc4, 0xc1, 0x9b, 0xcb, 0x71, 0x8a, 0x10, 0x3c, 0xee, 0xe9, 0xb5, 0x4a, 0x0a, 0x00, 0x72, 0x4e, 0x8f, 0x00, 0x05, 0x1f, 0xc7, 0x9c, 0xa3, 0x27, 0x3e, 0xbe, 0xe2, 0xbd, 0xca, 0x79, 0xd6, 0xaf, 0xc9, 0x40, 0x7a, 0x1d, 0xaa, 0x55, 0x52, 0x8e, 0xaf, 0x83, 0x4f, 0x3d, 0xf0, 0x10, 0xf3, 0xb4, 0xa4, 0xee, 0xb5, 0x9c, 0x9c, 0x31, 0xa7, 0xd4, 0x10, 0xc6, 0x56, 0xc0, 0x9e, 0x61, 0xf2, 0xe4, 0x90, 0xb7, 0xaf, 0xb1, 0x5e, 0xee, 0x6a, 0x9e, 0x73, 0x51, 0x90, 0x7b, 0x34, 0x49, 0x3c, 0x02, 0x3f, 0x88, 0x9f, 0xb0, 0xf0, 0x88, 0xa5, 0xd3, 0x2a, 0x34, 0xd5, 0xe3, 0x54, 0xe5, 0x7a, 0x15, 0xa1, 0x8f, 0x00, 0x2e, 0x95, 0x3d, 0xa0, 0x95, 0xc5, 0xba, 0x40, 0xad, 0xde, 0x91, 0x94, 0x61, 0xe8, 0x38, 0x8a, 0x01, 0xcc, 0x89, 0xe5, 0x4c, 0x14, 0x71, 0x27, 0xce, 0xf3, 0xec, 0xb5, 0x6c, 0x85, 0x31, 0x36, 0x3d, 0x57, 0x29, 0x3c, 0x9b, 0x2a, 0x26, 0x26, 0x7a, 0xf4, 0xd2, 0x45, 0xf9, 0x28, 0x66, 0x3d, 0x37, 0x37, 0x1c, 0xae, 0x68, 0x57, 0xe6, 0x14, 0x28, 0x83, 0x60, 0xec, 0x0e, 0xc3, 0x03, 0x19, 0x85, 0xad, 0x9c, 0x85, 0xd7, 0x2c, 0xfd, 0x0b, 0x8b, 0x80, 0xf3, 0x95, 0xf1, 0x86, 0x78, 0x81, 0xfb, 0x3a, 0x29, 0x4a, 0x4e, 0x7a, 0xfa, 0x64, 0x99, 0x0d, 0x28, 0x67, 0x26, 0xe3, 0x6f, 0x70, 0xaf, 0x9e, 0x7e, 0xc4, 0x72, 0x52, 0xa8, 0xb7, 0x87, 0x89, 0xdc, 0xcd, 0x72, 0x8b, 0xd7, 0x1e, 0xf5, 0xdc, 0x98, 0xff, 0x28, 0x05, 0x14, 0xde, 0xcb, 0x97, 0x2c, 0x6e, 0xda, 0x6e, 0xdc, 0x05, 0x62, 0x33, 0xb5, 0x42, 0x94, 0x24, 0x8d, 0xf2, 0x17, 0x18, 0x75, 0x34, 0xa3, 0xbd, 0xeb, 0xdc, 0xcc, 0x25, 0x51, 0x16, 0x1b, 0x81, 0x9e, 0x4c, 0x63, 0x2c, 0x54, 0x49, 0x52, 0xeb, 0xb2, 0x9e, 0x47, 0x73, 0x2a, 0x44, 0x63, 0x2b, 0x15, 0x84, 0xe3, 0x34, 0xa6, 0x14, 0xad, 0xa7, 0x1c, 0x83, 0x28, 0x1d, 0x3c, 0xd6, 0x51, 0x75, 0xff, 0x74, 0x0c, 0xd1, 0x88, 0x3f, 0xb7, 0xe2, 0x58, 0x04, 0x05, 0x66, 0xc5, 0x15, 0x0a, 0xee, 0xa8, 0x34, 0x92, 0xe5, 0x57, 0xb3, 0xb7, 0xce, 0xd3, 0xda, 0xb3, 0xcd, 0x42, 0x89, 0xf2, 0x69, 0x9f, 0x1e, 0x6c, 0x90, 0xb0, 0x99, 0x31, 0xdb, 0x38, 0xff, 0x45, 0x14, 0x6f, 0xfc, 0xaf, 0xf6, 0xaf, 0xcb, 0xcd, 0x33, 0x70, 0x5b, 0xea, 0xbc, 0x76, 0xaa, 0x12, 0x3c, 0x49, 0x75, 0x25, 0xe5, 0xe6, 0x14, 0x2b, 0x70, 0xb4, 0xa0, 0xe7, 0x5f, 0xb9, 0x56, 0xaf, 0x86, 0x0e, 0x40, 0x7b, 0xc9, 0x90, 0x12, 0x3b, 0x27, 0xd9, 0x52, 0x6e, 0xf8, 0x6f, 0xbb, 0xf0, 0x72, 0x3a, 0xe4, 0x13, 0x72, 0x3c, 0x1d, 0xf2, 0x7a, 0x7c, 0x99, 0x02, 0xf5, 0x43, 0xd3, 0xea, 0xc3, 0x8b, 0x2a, 0x95, 0xf1, 0xb5, 0xce, 0x85, 0xc8, 0x7a, 0xe0, 0x6a, 0x0a, 0x24, 0xd5, 0xf3, 0x78, 0xfe, 0x1c, 0xe4, 0x97, 0x09, 0x00, 0x69, 0xb4, 0xf0, 0xcf, 0xa9, 0x26, 0x3e, 0x3c, 0x9f, 0xd3, 0xcf, 0x02, 0x25, 0xf6, 0x84, 0xca, 0x52, 0x1f, 0x3b, 0x4f, 0x06, 0x7b, 0xff, 0xc0, 0xc3, 0x55, 0x7b, 0x66, 0xbf, 0xdd, 0xb5, 0x86, 0x37, 0x28, 0xf9, 0x89, 0x05, 0x79, 0x12, 0x5a, 0x75, 0xbf, 0xc1, 0x10, 0x55, 0x5e, 0x67, 0xcd, 0x4b, 0x32, 0x05, 0xe5, 0x6c, 0xd1, 0x66, 0x43, 0x09, 0x11, 0x9b, 0x09, 0xcc, 0xcb, 0xa8, 0x77, 0x04, 0xde, 0x7d, 0x0e, 0x3e, 0x76, 0x28, 0xf5, 0x15, 0x8e, 0x48, 0x9b, 0x4b, 0xb3, 0xc5, 0x9e, 0x18, 0x0b, 0xbe, 0xec, 0xc1, 0x97, 0xc3, 0x28, 0x6d, 0xb5, 0x45, 0x4f, 0x35, 0xe9, 0x4a, 0x9b, 0x7a, 0xdc, 0x65, 0xa7, 0x7b, 0xa5, 0xe6, 0xd5, 0x26, 0x48, 0x4e, 0xed, 0x2f, 0x7c, 0x06, 0x06, 0x60, 0xb2, 0x50, 0xaa, 0x30, 0x52, 0x7d, 0x35, 0x96, 0x48, 0x61, 0x7e, 0x1f, 0xbf, 0x04, 0xb9, 0x3f, 0x2c, 0x9a, 0x9c, 0xe4, 0x8f, 0xb5, 0xc1, 0x51, 0xf6, 0xba, 0x4c, 0x2a, 0x42, 0x91, 0xcd, 0xcb, 0x2d, 0xa1, 0x68, 0xde, 0x8c, 0xfc, 0x33, 0x2d, 0xd2, 0xd6, 0xdf, 0xb4, 0xd6, 0x3c, 0x9b, 0xfb, 0xd6, 0x03, 0x35, 0xa3, 0xbb, 0xfe, 0x82, 0x3e, 0x9e, 0x74, 0x01, 0x64, 0x8c, 0xd0, 0xbb, 0x03, 0x86, 0x9b, 0x6d, 0xf6, 0xcc, 0xa8, 0xe9, 0xd9, 0x5c, 0x8e, 0xba, 0x1c, 0xb5, 0x5b, 0x07, 0x57, 0xe0, 0x87, 0xba, 0xdd, 0xb1, 0x27, 0xe0, 0x94, 0x4b, 0x63, 0x53, 0x04, 0xe2, 0x2a, 0x97, 0xad, 0xc5, 0x25, 0x03, 0x9e, 0x9b, 0xe9, 0x21, 0x43, 0xec, 0x70, 0x57, 0x7f, 0xe4, 0xca, 0xc6, 0xfa, 0x54, 0x10, 0x72, 0xbd, 0xfa, 0x9a, 0xa3, 0xfc, 0x02, 0x71, 0x8c, 0x32, 0xcc, 0x07, 0x2b, 0x74, 0xf0, 0x26, 0x70, 0xfe, 0x80, 0x27, 0xa1, 0x13, 0x8d, 0x64, 0xfd, 0x04, 0xec, 0xf0, 0xa0, 0x8e, 0x39, 0x85, 0xa6, 0x68, 0x1d, 0xbd, 0x93, 0x1d, 0xcd, 0x85, 0xf3, 0x18, 0xd3, 0xcf, 0x3d, 0xfd, 0x11, 0x88, 0xfd, 0x40, 0x03, 0xca, 0x32, 0xf0, 0x44, 0x52, 0xf5, 0xd3, 0x54, 0x34, 0x5c, 0xb8, 0x98, 0xcd, 0x9e, 0x09, 0xa2, 0xfa, 0x78, 0xa0, 0xb3, 0x87, 0xcf, 0xdb, 0x7e, 0xeb, 0x96, 0xf3, 0x2f, 0x32, 0xf2, 0x89, 0xac, 0x3a, 0x9c, 0x82, 0x1b, 0x22, 0x88, 0x15, 0xa4, 0x00, 0xc4, 0x22, 0x78, 0xd2, 0xa2, 0xc6, 0x12, 0xb8, 0x19, 0x2c, 0xbd, 0x60, 0x69, 0xa6, 0x56, 0xc1, 0xfe, 0xfc, 0x53, 0x0c, 0x97, 0x04, 0x04, 0xdf, 0xa7, 0x72, 0x19, 0xbc, 0xfb, 0xf2, 0x65, 0xbb, 0x9e, 0x74, 0xe1, 0x7b, 0xfa, 0xc7, 0xf4, 0x5e, 0x3f, 0x6a, 0xf1, 0xf6, 0x09, 0x9f, 0xe2, 0xba, 0x3d, 0xc0, 0x84, 0xfe, 0x33, 0xd6, 0x92, 0x22, 0x1b, 0x68, 0x46, 0x09, 0x99, 0x91, 0x1e, 0xcc, 0xb3, 0x55, 0xdc, 0xb0, 0xed, 0x35, 0xd0, 0x56, 0xb2, 0x01, 0x59, 0x32, 0xf6, 0xee, 0xaa, 0x3e, 0x1a, 0xe9, 0xca, 0xf0, 0x10, 0x2a, 0xde, 0x69, 0xbf, 0x0b, 0xab, 0xef, 0xa9, 0x1b, 0x57, 0x9d, 0xcb, 0x6e, 0x6f, 0x59, 0xc4, 0x38, 0x2f, 0x07, 0x3a, 0x9a, 0xfd, 0xfc, 0x7a, 0xbc, 0x36, 0xb6, 0x5e, 0x1c, 0x2d, 0xca, 0x74, 0x26, 0x71, 0x1d, 0x5c, 0x04, 0x4f, 0x57, 0x72, 0xb7, 0x98, 0x95, 0xae, 0x67, 0xa5, 0x5f, 0xc8, 0xf7, 0x97, 0xd9, 0x9f, 0xdd, 0xe3, 0x3d, 0xdb, 0x31, 0x0f, 0x88, 0xd1, 0x03, 0xb6, 0x74, 0xa8, 0xf2, 0xd2, 0xa7, 0xba, 0xfa, 0x3b, 0x2a, 0x3d, 0x8e, 0x6a, 0x1c, 0x23, 0xe7, 0x83, 0xa8, 0x3e, 0x9b, 0x93, 0x34, 0xa8, 0x71, 0x15, 0xdb, 0x62, 0x74, 0xbc, 0x1e, 0x3b, 0x46, 0x6c, 0xd6, 0xf4, 0xb7, 0x89, 0x6d, 0xa1, 0x96, 0x75, 0x4e, 0x52, 0xc8, 0x54, 0x9a, 0xf3, 0x96, 0x13, 0x1d, 0x71, 0x4b, 0xa8, 0x80, 0x1f, 0xff, 0x9b, 0xc0, 0x57, 0xae, 0xc5, 0xdf, 0x64, 0x8d, 0x58, 0xd9, 0x9f, 0x9d, 0x1f, 0xd9, 0xd9, 0x80, 0x07, 0xad, 0xf9, 0x8c, 0xdf, 0x77, 0xe6, 0x1e, 0x5c, 0xa6, 0xa8, 0x30, 0x60, 0x25, 0xca, 0x2e, 0x7b, 0xd2, 0x02, 0x06, 0xb3, 0x32, 0x14, 0x7f, 0x80, 0x63, 0xf3, 0xcb, 0x1b, 0x52, 0x29, 0x5f, 0xf8, 0x2e, 0x7a, 0x02, 0x91, 0x1c, 0xc4, 0x24, 0x66, 0x2c, 0x2a, 0x72, 0x42, 0x8b, 0x71, 0xa7, 0xbf, 0xfb, 0xaa, 0xa5, 0x0c, 0x81, 0x12, 0xc4, 0xee, 0x5d, 0x36, 0x6a, 0x05, 0x3f, 0x5b, 0xdc, 0x51, 0xb8, 0x1c, 0x53, 0xf5, 0xef, 0x55, 0x53, 0x3a, 0x95, 0x40, 0x38, 0xd6, 0x1b, 0xde, 0x12, 0x6f, 0x22, 0x99, 0xb2, 0x5b, 0x33, 0x27, 0x05, 0xaa, 0xb0, 0xb1, 0xa1, 0x66, 0x0a, 0x35, 0x9e, 0x19, 0x35, 0x29, 0xa7, 0x90, 0x59, 0x61, 0x50, 0xdf, 0xcb, 0x32, 0xaa, 0xa5, 0x3b, 0xd8, 0x16, 0x91, 0x2f, 0x15, 0x56, 0x25, 0xb0, 0x1b, 0xea, 0xba, 0x42, 0xac, 0x99, 0xc5, 0x1a, 0x80, 0x4e, 0x58, 0x8c, 0xe7, 0x25, 0xec, 0xc3, 0xaf, 0xc6, 0x5d, 0xb4, 0x48, 0xf2, 0x36, 0x54, 0x26, 0x5b, 0x2f, 0x09, 0x67, 0xb9, 0xf4, 0x5f, 0xb6, 0x1a, 0x28, 0xfd, 0x6f, 0x79, 0xaa, 0xd7, 0x03, 0x93, 0x17, 0xa5, 0x9f, 0xf6, 0x90, 0x93, 0x08, 0x5b, 0xbd, 0x3a, 0xca, 0x35, 0x11, 0xcf, 0x91, 0x8a, 0x50, 0x9a, 0xd7, 0x02, 0x4f, 0xaa, 0xbf, 0x3e, 0xfc, 0xc8, 0x41, 0x6a, 0x9d, 0xa9, 0x88, 0x16, 0x5d, 0x68, 0x98, 0x41, 0x04, 0x33, 0x34, 0xb7, 0x06, 0x44, 0xff, 0x9e, 0xbf, 0x12, 0xe1, 0x4b, 0xfd, 0xc9, 0xac, 0x5a, 0xbf, 0xf8, 0x00, 0xfd, 0x3c, 0x8a, 0x6c, 0x94, 0x27, 0xf8, 0xd5, 0x7e, 0x32, 0xbd, 0x1c, 0x2f, 0xd1, 0x09, 0xfb, 0x83, 0x40, 0xb9, 0x30, 0x52, 0xc7, 0x87, 0xde, 0x45, 0x3d, 0x7e, 0x30, 0xe8, 0xcb, 0xb2, 0x3f, 0x00, 0xf2, 0x2d, 0x36, 0x1e, 0xcf, 0x2c, 0xb4, 0x74, 0x9e, 0x8c, 0x71, 0xe8, 0x7e, 0x7f, 0x25, 0x67, 0x73, 0x83, 0xa5, 0x7c, 0xb1, 0x95, 0x4f, 0x21, 0x18, 0xa1, 0xa9, 0xd5, 0xfb, 0x3e, 0x45, 0xee, 0x25, 0x98, 0xe8, 0x31, 0x1e, 0xad, 0xea, 0xa0, 0xaa, 0xbd, 0xe0, 0x93, 0x93, 0xfb, 0x79, 0x0a, 0xa8, 0x89, 0xa6, 0x42, 0x06, 0xa3, 0xfe, 0x86, 0x96, 0x1b, 0x60, 0x48, 0xd7, 0x05, 0xda, 0x70, 0xde, 0xb3, 0xc9, 0xf4, 0x9b, 0xe4, 0x42, 0xa9, 0x5d, 0x38, 0xb1, 0x59, 0x98, 0xe7, 0xc0, 0x15, 0xe7, 0xb3, 0x7b, 0xcc, 0x4d, 0x1b, 0xb1, 0x1d, 0xc0, 0xd2, 0x9d, 0x6a, 0xe8, 0x6f, 0xc5, 0x2e, 0x24, 0x66, 0x23, 0x90, 0xce, 0x37, 0x83, 0x38, 0xc0, 0xe5, 0x2c, 0x61, 0x16, 0xaa, 0xc2, 0x2f, 0x36, 0xe9, 0x6b, 0x43, 0x0e, 0x64, 0x31, 0x8e, 0x9d, 0xaf, 0xa8, 0x62, 0xb5, 0xe5, 0xd0, 0xcf, 0xff, 0x99, 0x3c, 0x2c, 0x3f, 0x0f, 0x74, 0xf4, 0xd9, 0xac, 0x99, 0xd4, 0x95, 0xac, 0x47, 0x01, 0x9f, 0x13, 0xbf, 0xcf, 0xd2, 0xe6, 0x46, 0x80, 0x35, 0x9a, 0xc8, 0x59, 0xc6, 0xcd, 0xc1, 0xfc, 0x77, 0x34, 0x5e, 0xf1, 0x77, 0xd5, 0xdf, 0x86, 0xb2, 0x76, 0x3f, 0xd9, 0x9b, 0x55, 0x17, 0x33, 0x29, 0x19, 0xc0, 0x97, 0x1f, 0x09, 0xb7, 0x9b, 0x91, 0x7c, 0x46, 0x77, 0xa4, 0x90, 0x61, 0x5c, 0x95, 0x1f, 0xcf, 0x07, 0xfd, 0xef, 0x8a, 0x95, 0x53, 0x29, 0x67, 0x99, 0xb2, 0x0d, 0xf9, 0x6c, 0xdc, 0xe3, 0xb3, 0xc4, 0x80, 0x35, 0x4e, 0x88, 0xb8, 0x3b, 0x6a, 0xe3, 0xd6, 0x97, 0x78, 0x98, 0x60, 0x43, 0xd7, 0x95, 0x59, 0xc7, 0x3d, 0xca, 0xc2, 0xaf, 0x59, 0x3b, 0x61, 0x3c, 0xb7, 0x54, 0xc1, 0x5a, 0xe3, 0x7d, 0x7a, 0xd2, 0xd1, 0xef, 0xb2, 0xc1, 0x7c, 0xc6, 0xe4, 0x49, 0xce, 0x57, 0xe1, 0x86, 0xc0, 0xc3, 0x14, 0xc3, 0xc2, 0xcd, 0x09, 0xee, 0x5d, 0xe8, 0x31, 0x4a, 0x17, 0x94, 0xdf, 0x64, 0x97, 0xeb, 0x97, 0x48, 0x09, 0x77, 0x88, 0xf4, 0xc4, 0x47, 0x57, 0x0d, 0x2a, 0x42, 0x1e, 0xd1, 0xd0, 0xbb, 0xb5, 0x4d, 0xe0, 0x45, 0x30, 0xd0, 0xbb, 0xc8, 0xa8, 0x9f, 0xe2, 0xd4, 0x3f, 0xea, 0x16, 0x36, 0x5e, 0xff, 0xbe, 0xc9, 0x41, 0xbe, 0x8a, 0x8f, 0xb6, 0x4d, 0x56, 0x00, 0x21, 0x0d, 0x51, 0xa2, 0xc4, 0xcc, 0x5e, 0xda, 0x3d, 0x3c, 0xba, 0x02, 0x50, 0xa3, 0xdf, 0xbb, 0xe7, 0xd5, 0xa9, 0x85, 0x57, 0x60, 0xb8, 0x8d, 0xe5, 0x06, 0x15, 0xc5, 0x89, 0x70, 0x18, 0x3a, 0xf2, 0x20, 0x89, 0xa3, 0xc9, 0xa8, 0x05, 0x35, 0x3a, 0x19, 0xa3, 0xbf, 0xb1, 0xbf, 0xd8, 0xf2, 0xe1, 0x0b, 0x98, 0x00, 0x0b, 0xd1, 0xbe, 0x6a, 0x7d, 0xb4, 0xae, 0x12, 0x59, 0xde, 0x39, 0x98, 0x97, 0xf4, 0xc1, 0xe3, 0x4d, 0x48, 0x9d, 0xfe, 0x2e, 0x51, 0xbe, 0x26, 0x51, 0x59, 0x93, 0x21, 0x35, 0x76, 0x2b, 0xd1, 0x01, 0xbb, 0x9a, 0x08, 0x10, 0xaf, 0x9d, 0x9e, 0xac, 0xfe, 0x81, 0xc1, 0x1a, 0x6f, 0x40, 0x8d, 0xd8, 0x16, 0xee, 0xdc, 0x22, 0xcb, 0x53, 0x60, 0xba, 0xdb, 0xda, 0xef, 0xe9, 0xfd, 0xaa, 0x1d, 0xc1, 0x87, 0x12, 0x10, 0xa6, 0xe1, 0x2a, 0x90, 0x0d, 0x3a, 0xb7, 0x5e, 0x82, 0x7b, 0x50, 0xc7, 0xf0, 0x79, 0xbf, 0x78, 0x1d, 0x6f ],
-const [ 0xca, 0xa5, 0xcc, 0x5d, 0x0d, 0x87, 0x68, 0x0e, 0xaf, 0xc2, 0x94, 0x29, 0xba, 0xc5, 0x5c, 0x9e, 0x33, 0x16, 0x7d, 0x48, 0x57, 0x89, 0xc7, 0xc1, 0x24, 0xb5, 0xc5, 0x7a, 0x1b, 0xa8, 0xa0, 0x0b, 0x45, 0xda, 0x41, 0xc7, 0x74, 0x60, 0xb6, 0x94, 0xcb, 0x62, 0xd7, 0xfa, 0x80, 0xcf, 0x29, 0x79, 0xe1, 0x4f, 0x02, 0x20, 0x95, 0x7a, 0xee, 0x5b, 0x25, 0x47, 0x52, 0x0d, 0xbb, 0xc7, 0x4f, 0xde, 0x29, 0x13, 0xe9, 0xd7, 0x2c, 0x83, 0x69, 0x2c, 0xf2, 0x20, 0xff, 0x58, 0xdb, 0x5c, 0xac, 0x6f, 0x7d, 0x01, 0x5f, 0xb0, 0xea, 0x68, 0x5f, 0x5a, 0x35, 0xeb, 0xe8, 0xc2, 0x32, 0x9c, 0x19, 0xa1, 0x7e, 0x38, 0x0e, 0xb2, 0xbf, 0x56, 0x49, 0x7d, 0x2d, 0xe4, 0x56, 0x6d, 0x52, 0xd4, 0xae, 0x29, 0x0d, 0x13, 0xdd, 0x21, 0xdd, 0xbb, 0xe0, 0x67, 0x5c, 0x89, 0xd1, 0xc1, 0x0a, 0x91, 0xc6, 0xfc, 0x4c, 0x30, 0xf6, 0x83, 0xb5, 0x43, 0x1d, 0x30, 0x83, 0x96, 0x22, 0x61, 0x6d, 0xa0, 0xf7, 0x4f, 0x9c, 0x6d, 0xc2, 0x9b, 0xf7, 0xdb, 0x3a, 0x2a, 0xa3, 0x09, 0x53, 0x33, 0xca, 0x0d, 0x1d, 0x96, 0x9c, 0xe5, 0xe9, 0x70, 0x94, 0xb0, 0xaf, 0xec, 0xfd, 0x1f, 0xac, 0x5c, 0xb4, 0x26, 0x4f, 0x88, 0x2f, 0xf7, 0x56, 0x45, 0xbe, 0x30, 0x35, 0x4a, 0x11, 0x53, 0xb7, 0x40, 0xfb, 0x78, 0xe7, 0x18, 0x75, 0x3e, 0x31, 0xa1, 0xe6, 0x07, 0xc5, 0x5a, 0xa2, 0x65, 0x3c, 0x85, 0xb0, 0xcf, 0x7e, 0x7c, 0xd0, 0x99, 0xe3, 0x48, 0xbc, 0x23, 0x98, 0x70, 0xaf, 0x50, 0x45, 0x0f, 0x24, 0x39, 0xec, 0x29, 0xe0, 0x23, 0x15, 0x3f, 0x32, 0xaf, 0x28, 0x21, 0x7a, 0x51, 0x1a, 0x04, 0xe8, 0x03, 0x4b, 0xd4, 0x86, 0x3b, 0xaf, 0xcc, 0x79, 0x1a, 0x2d, 0x43, 0x84, 0xe6, 0x44, 0xc9, 0xcd, 0xba, 0xf4, 0x72, 0xe4, 0x7c, 0xdc, 0x72, 0x01, 0x10, 0xa0, 0xea, 0x8d, 0xcb, 0x8d, 0x02, 0xe4, 0x2b, 0x80, 0x38, 0x5a, 0xc5, 0x03, 0xf8, 0x7c, 0x7e, 0xba, 0x6c, 0x98, 0xfe, 0xfe, 0x95, 0x7f, 0x62, 0xc7, 0x9b, 0x89, 0x31, 0xcf, 0x61, 0xda, 0x92, 0xf4, 0x5d, 0xe4, 0xbc, 0xde, 0xa7, 0x2d, 0xad, 0xe3, 0x4f, 0x52, 0x1f, 0x27, 0xf4, 0x4d, 0xb8, 0x08, 0x92, 0xf3, 0x81, 0xb9, 0x9c, 0xc0, 0x99, 0x2c, 0x4b, 0xd7, 0x2b, 0x36, 0x35, 0x45, 0x9d, 0xee, 0x21, 0x86, 0x0a, 0x56, 0x1a, 0x4a, 0xf3, 0x3d, 0xc2, 0x79, 0x31, 0x63, 0xe9, 0x74, 0x2e, 0xdf, 0x5e, 0x9e, 0x55, 0xbe, 0x05, 0x1b, 0xc7, 0xed, 0x2a, 0xd7, 0x50, 0x59, 0x15, 0xca, 0x99, 0x54, 0xdf, 0x7b, 0x9f, 0x3b, 0x84, 0xc3, 0x63, 0x55, 0x38, 0xd4, 0xe4, 0xff, 0xff, 0x79, 0x4a, 0x06, 0x78, 0xa0, 0x64, 0x55, 0xf9, 0x15, 0x54, 0xd0, 0xe1, 0x90, 0x89, 0x7f, 0x2a, 0xf2, 0xee, 0xef, 0x3e, 0xcc, 0x61, 0xd5, 0x0c, 0x21, 0x67, 0xf5, 0x5a, 0x6d, 0x1e, 0x42, 0x5d, 0xe5, 0x73, 0x47, 0x87, 0x01, 0x94, 0xc5, 0xa0, 0x38, 0xa9, 0x9e, 0x18, 0x0a, 0xbf, 0xf1, 0x9c, 0x44, 0x04, 0x87, 0xe7, 0x80, 0x3a, 0x6e, 0xdb, 0xeb, 0x66, 0xe3, 0xd0, 0x4b, 0xc8, 0x76, 0x2c, 0x40, 0x10, 0x68, 0x33, 0xc9, 0xcf, 0x58, 0x21, 0x0b, 0x2c, 0x1e, 0x76, 0x4e, 0xd8, 0xf8, 0x92, 0x49, 0x44, 0xe4, 0x81, 0x9f, 0x11, 0x4c, 0x18, 0xa9, 0xc8, 0xe8, 0x41, 0x76, 0xcb, 0xe1, 0x93, 0x10, 0x8b, 0x32, 0x26, 0x01, 0xfc, 0x54, 0xa5, 0x16, 0x46, 0x1a, 0xa4, 0x63, 0xbe, 0xda, 0x34, 0x87, 0x14, 0xcd, 0xb5, 0x32, 0xcd, 0xb8, 0xec, 0xe4, 0xf4, 0xcc, 0x56, 0xf7, 0x0d, 0xcb, 0xbb, 0xdf, 0x4b, 0x6d, 0x05, 0xb1, 0x03, 0x02, 0x53, 0xe2, 0x5f, 0x58, 0x4a, 0x51, 0x57, 0xdf, 0xab, 0x88, 0xdd, 0x0b, 0x2b, 0x3f, 0x58, 0xfa, 0x7f, 0x22, 0x54, 0x57, 0xb6, 0xd5, 0x78, 0x7e, 0xcb, 0x34, 0xb8, 0xe1, 0x7b, 0xdf, 0xcc, 0xaa, 0x54, 0xf6, 0xe0, 0xa2, 0x0f, 0x21, 0x8d, 0x51, 0x1f, 0xd4, 0x08, 0x67, 0x8a, 0xd1, 0x99, 0x5a, 0xf8, 0xee, 0x4f, 0x51, 0x09, 0x18, 0xf3, 0x41, 0xec, 0x98, 0x3a, 0x55, 0x2e, 0x95, 0x3e, 0x94, 0xcf, 0xda, 0x2f, 0xbe, 0x9b, 0xda, 0x46, 0x76, 0xb7, 0xf1, 0xfb, 0xa6, 0x7b, 0xed, 0x78, 0x20, 0x7f, 0xcd, 0x4d, 0x81, 0xf9, 0xc9, 0x65, 0x5b, 0x46, 0x92, 0x39, 0x93, 0xc6, 0xda, 0x43, 0x07, 0xed, 0x17, 0xb6, 0x74, 0x97, 0x84, 0x6c, 0x98, 0x9c, 0x69, 0x20, 0x93, 0xa5, 0x9d, 0xdd, 0x93, 0x3e, 0x49, 0xb6, 0xb0, 0x2c, 0xee, 0xb8, 0x15, 0x00, 0xaa, 0x1d, 0x61, 0xec, 0xb7, 0xc2, 0x4d, 0xd6, 0x34, 0xdc, 0x8e, 0xab, 0x28, 0xe6, 0xfd, 0xf6, 0xc4, 0xde, 0xf5, 0xb1, 0xe8, 0xb0, 0xfc, 0x5a, 0xe9, 0xf3, 0xa6, 0x4a, 0x92, 0xd3, 0xb7, 0x43, 0x68, 0x4e, 0x88, 0x48, 0x32, 0xa4, 0xac, 0xb1, 0xb9, 0x08, 0xd2, 0x7e, 0xcd, 0x9c, 0xed, 0xec, 0x88, 0x9c, 0x93, 0x46, 0xd7, 0xd9, 0xa3, 0xfe, 0x35, 0x6a, 0x2b, 0xfc, 0xba, 0x9e, 0x89, 0x36, 0x55, 0x35, 0xd0, 0x81, 0x56, 0xcf, 0x6d, 0xa6, 0x2f, 0xa4, 0x0a, 0xb9, 0x7b, 0x76, 0xb2, 0xa6, 0x3f, 0xc4, 0x36, 0x0d, 0x70, 0x41, 0xd0, 0x50, 0xb6, 0x84, 0x07, 0xea, 0x70, 0x01, 0xd2, 0x02, 0xf8, 0x38, 0x00, 0x3f, 0x28, 0x2c, 0xd7, 0xdf, 0x1d, 0x17, 0xfc, 0x03, 0x3a, 0x5c, 0x93, 0x4d, 0x70, 0xbd, 0xa6, 0xad, 0xbd, 0xce, 0xcb, 0x78, 0xf3, 0xa9, 0x01, 0xbb, 0xbb, 0xe4, 0xdc, 0xce, 0xd9, 0xc0, 0xe2, 0x2c, 0xb2, 0xa3, 0x34, 0x81, 0x0b, 0xc9, 0x71, 0x05, 0x13, 0x36, 0xd7, 0x09, 0xa4, 0xef, 0xab, 0xcf, 0xc6, 0x69, 0xdb, 0x9f, 0x75, 0x42, 0xe3, 0x17, 0xa4, 0x2f, 0xed, 0xc3, 0x81, 0x36, 0x3c, 0xee, 0xfb, 0x1d, 0xca, 0xb7, 0x81, 0x22, 0x30, 0x67, 0x0d, 0xec, 0xc7, 0x01, 0x62, 0xc2, 0x0d, 0x1b, 0x92, 0xfb, 0x4a, 0xed, 0xc2, 0xb5, 0x73, 0xa8, 0x31, 0xca, 0x4e, 0x09, 0x77, 0x00, 0xd7, 0x2d, 0x0b, 0x80, 0xe3, 0xa7, 0x08, 0x8a, 0x03, 0xd0, 0x31, 0x66, 0xab, 0x5e, 0x32, 0x9e, 0x93, 0x38, 0x29, 0x6a, 0x5e, 0x89, 0x64, 0x6c, 0x7a, 0x13, 0x6c, 0x9d, 0x47, 0xc7, 0x43, 0x88, 0x7b, 0x92, 0xeb, 0xb6, 0xc5, 0x79, 0x27, 0x69, 0xb0, 0xe8, 0x86, 0x8d, 0xcb, 0x47, 0x9c, 0xeb, 0x07, 0xcf, 0x93, 0xa0, 0x60, 0x9c, 0xe3, 0xcd, 0xbf, 0x03, 0x5d, 0x91, 0x1f, 0x25, 0x6e, 0x34, 0xef, 0xc4, 0xa2, 0xa5, 0xb8, 0x56, 0x67, 0x27, 0x00, 0x58, 0x14, 0x47, 0x6e, 0xe5, 0x29, 0x11, 0x2f, 0x87, 0xd8, 0x83, 0x97, 0x4d, 0xc5, 0x42, 0x0c, 0x1e, 0x0b, 0x8c, 0x20, 0x4c, 0x7f, 0x6e, 0xfd, 0x6c, 0x38, 0x37, 0x06, 0x66, 0x4f, 0x2c, 0xbb, 0xc8, 0xe3, 0x7d, 0xdd, 0x60, 0x60, 0x78, 0xd3, 0x09, 0x01, 0xfd, 0x4d, 0xc5, 0x94, 0x32, 0x27, 0x0c, 0x7e, 0x77, 0x90, 0x64, 0xfe, 0x9d, 0x6b, 0x32, 0xb6, 0x52, 0xf5, 0xd0, 0x67, 0xe0, 0xa9, 0xdf, 0xfc, 0x18, 0x61, 0xdf, 0xca, 0x88, 0xbd, 0xfd, 0x16, 0xf5, 0xc8, 0x2b, 0xd7, 0x05, 0xd9, 0x76, 0xbe, 0x3b, 0xb8, 0x94, 0x74, 0x28, 0x02, 0xbd, 0x23, 0xe0, 0xcf, 0xbd, 0x37, 0xac, 0x91, 0x46, 0x66, 0xfe, 0x40, 0x8a, 0xed, 0xaa, 0xb4, 0x09, 0x1d, 0x52, 0x52, 0xa8, 0x17, 0x22, 0xea, 0x04, 0xd4, 0xbe, 0xe0, 0x05, 0x68, 0x79, 0x8a, 0xb6, 0x87, 0xc8, 0xda, 0x54, 0x48, 0xf6, 0x3d, 0xa5, 0x29, 0x19, 0xc2, 0x8a, 0x53, 0x44, 0x7f, 0xd8, 0x20, 0xfe, 0x31, 0x64, 0xdb, 0xf3, 0x22, 0x5d, 0xc7, 0xea, 0x50, 0xdf, 0x62, 0xf7, 0xcb, 0xc4, 0xea, 0xf2, 0x5f, 0xbe, 0x21, 0x27, 0x73, 0xa3, 0x4e, 0x4f, 0x31, 0x07, 0x84, 0xc0, 0xe7, 0x10, 0x26, 0xe0, 0xad, 0x86, 0xab, 0xdf, 0x49, 0x2a, 0x9f, 0xa6, 0x4f, 0x49, 0xea, 0x0a, 0x8d, 0x90, 0x55, 0x46, 0xa5, 0x22, 0x4a, 0xa8, 0xfc, 0xe8, 0xdb, 0x8a, 0xd3, 0x28, 0x07, 0x84, 0xb4, 0x5a, 0x38, 0xe0, 0x10, 0x37, 0x0f, 0x4e, 0x26, 0x12, 0x64, 0xd9, 0x26, 0x6b, 0x89, 0x1a, 0x97, 0xc2, 0xcf, 0xac, 0xf6, 0xa9, 0x4c, 0xe0, 0xa0, 0x1d, 0xdb, 0xb1, 0xf2, 0x16, 0x63, 0xfa, 0xae, 0x5d, 0x5d, 0xe6, 0xa0, 0x9e, 0x90, 0xa8, 0x82, 0xbe, 0x1f, 0x6d, 0x1e, 0x6e, 0xc6, 0x8f, 0xb2, 0x01, 0x61, 0x0c, 0x98, 0x7a, 0xae, 0x36, 0x26, 0xea, 0x53, 0xac, 0xd4, 0xf9, 0x23, 0x88, 0x9c, 0xc2, 0x9d, 0xda, 0xa7, 0xe4, 0xb5, 0x56, 0x25, 0xd5, 0xd8, 0x49, 0x7d, 0x7a, 0x2a, 0xd2, 0xa6, 0xf5, 0x12, 0x4e, 0xd4, 0xbf, 0xf8, 0x14, 0x58, 0xf6, 0x4d, 0x63, 0xc1, 0xf8, 0xcc, 0x98, 0x48, 0x30, 0x00, 0xa4, 0x6b, 0x30, 0x07, 0xbe, 0xd7, 0x00, 0x95, 0x55, 0x8b, 0xb6, 0x3c, 0x49, 0x3b, 0x47, 0xea, 0x5a, 0xf2, 0x9d, 0xb3, 0xe1, 0xfc, 0xea, 0xd0, 0xbe, 0x03, 0x3b, 0xe8, 0x91, 0x78, 0x50, 0x8f, 0x2d, 0x35, 0xab, 0x0d, 0x49, 0x60, 0xe7, 0x60, 0x79, 0x92, 0x4b, 0x84, 0x5d, 0x38, 0x9f, 0xf1, 0x18, 0x3a, 0x3e, 0x66, 0x04, 0xdb, 0x6d, 0xe5, 0xa5, 0xe1, 0xeb, 0xfe, 0xdb, 0xf5, 0xca, 0x51, 0x5b, 0x4c, 0x7c, 0x4f, 0x5f, 0x87, 0x31, 0x40, 0x9d, 0xd8, 0x61, 0x8a, 0x76, 0x67, 0xa4, 0x30, 0x71, 0xf4, 0xca, 0x99, 0xe7, 0xbd, 0x28, 0x93, 0x00, 0xa2, 0x30, 0x97, 0xde, 0x87, 0x45, 0x4f, 0x17, 0xfa, 0xcd, 0x55, 0x69, 0x15, 0x87, 0x3e, 0xa9, 0xa6, 0x1e, 0xd7, 0xfd, 0x8e, 0xff, 0xae, 0x4b, 0x67, 0x68, 0xd4, 0xf1, 0x6a, 0xc2, 0xe2, 0xb7, 0x8f, 0x31, 0x3a, 0x01, 0xf5, 0x69, 0x8f, 0x4a, 0x85, 0xc3, 0xa8, 0xcd, 0xd3, 0x90, 0x60, 0x85, 0x44, 0xad, 0xf2, 0x58, 0x76, 0x58, 0x73, 0x90, 0xdc, 0x41, 0xa0, 0x8a, 0xa9, 0xe4, 0xda, 0xb2, 0xf0, 0x17, 0x6f, 0xaf, 0x09, 0xdf, 0x1b, 0xda, 0x36, 0x88, 0xcf, 0xf5, 0x86, 0xf5, 0xb0, 0x1a, 0xfa, 0x34, 0x63, 0xf1, 0xe7, 0x55, 0x88, 0x26, 0x9b, 0x7d, 0x84, 0x1a, 0x43, 0x36, 0x84, 0xd9, 0x0d, 0x09, 0xbf, 0x4d, 0x89, 0x4f, 0xfb, 0xb1, 0x55, 0x44, 0x52, 0x47, 0xf9, 0x5d, 0x36, 0x4e, 0x10, 0xdc, 0xb3, 0x2f, 0xa9, 0xa1, 0xf4, 0xf7, 0xec, 0x43, 0x09, 0x09, 0x01, 0x5f, 0xe7, 0x15, 0x2d, 0x30, 0xb0, 0x44, 0x3e, 0x60, 0x35, 0xb5, 0x2a, 0x1e, 0xba, 0x2d, 0xf3, 0x71, 0xf9, 0x0a, 0xcd, 0xcc, 0x69, 0x79, 0x83, 0xe2, 0xbf, 0xe9, 0x17, 0xbb, 0xb5, 0xc0, 0xa9, 0x08, 0x0b, 0x4c, 0x99, 0xb4, 0xcc, 0xfc, 0xf0, 0xbb, 0xd3, 0xd0, 0xfc, 0x3f, 0x8d, 0x0e, 0x3b, 0xd9, 0x01, 0x37, 0x7b, 0x2d, 0x0d, 0x39, 0x3e, 0xc1, 0xf2, 0xe6, 0x63, 0x0f, 0x13, 0xa5, 0x03, 0xd8, 0xf9, 0x67, 0x9a, 0xbc, 0x9b, 0xdd, 0x67, 0x08, 0xdc, 0xe9, 0x15, 0xcf, 0x56, 0x52, 0x9a, 0x3c, 0x56, 0xbb, 0x60, 0x26, 0x27, 0xd6, 0xa2, 0xe5, 0x94, 0xd5, 0x1a, 0x64, 0xa8, 0x21, 0xd9, 0x78, 0xb8, 0x4f, 0x76, 0x70, 0xa4, 0x50, 0x6a, 0xee, 0x59, 0xe7, 0xbb, 0xf5, 0x9a, 0x60, 0xd8, 0x42, 0x01, 0x80, 0xc4, 0xe0, 0x40, 0xb8, 0x77, 0xf7, 0xad, 0x9d, 0x82, 0xe5, 0xfe, 0x9d, 0xf1, 0x8f, 0x50, 0xea, 0x75, 0xf9, 0x6f, 0xbb, 0xc3, 0x15, 0x51, 0xb4, 0x37, 0xd9, 0xe3, 0xa2, 0xbd, 0x94, 0x09, 0x6c, 0xf1, 0x82, 0xdf, 0x47, 0x85, 0x9e, 0x46, 0x28, 0xe3, 0xb7, 0x9c, 0x7f, 0x14, 0xc6, 0xca, 0x22, 0xe1, 0x7f, 0x84, 0x87, 0x38, 0x26, 0xcc, 0x37, 0xd1, 0xa4, 0xb8, 0x7f, 0x10, 0xda, 0x76, 0x69, 0x2e, 0x35, 0x8d, 0xeb, 0x94, 0x83, 0x65, 0x5d, 0x87, 0x05, 0x0a, 0x30, 0x0a, 0xc5, 0x2d, 0xde, 0x00, 0x29, 0x6c, 0x1d, 0x92, 0xc9, 0xd3, 0x58, 0xd0, 0x7e, 0xa2, 0x5f, 0x9b, 0xbb, 0x50, 0x5e, 0xc2, 0x21, 0xd1, 0x0c, 0x6b, 0x4d, 0x15, 0x24, 0xb5, 0xf5, 0xd1, 0x19, 0x9b, 0x33, 0x81, 0x06, 0x1c, 0x20, 0xae, 0xe3, 0x98, 0xa5, 0x6c, 0xff, 0x7e, 0x8e, 0x28, 0xaa, 0x24, 0xe0, 0xa0, 0x32, 0xf6, 0x6d, 0x33, 0x12, 0xd3, 0xa5, 0x5b, 0x65, 0xb4, 0xaf, 0x78, 0xa1, 0x8f, 0xb9, 0xcf, 0x81, 0x7b, 0x8c, 0xd2, 0x43, 0x14, 0x63, 0xa2, 0x14, 0x21, 0xfd, 0xd2, 0xc9, 0x74, 0xf1, 0x6e, 0xcf, 0x12, 0x42, 0x3b, 0x65, 0x94, 0x33, 0x41, 0x08, 0xcd, 0x5c, 0x87, 0x2f, 0xad, 0xfe, 0x1e, 0x39, 0x65, 0x94, 0x60, 0xa4, 0xcc, 0xaa, 0x7a, 0x7f, 0x02, 0xf2, 0x28, 0x22, 0x53, 0x95, 0xc0, 0x1c, 0x5e, 0xc7, 0x72, 0x6d, 0x76, 0x9e, 0xce, 0xf6, 0x48, 0x24, 0x86, 0x2d, 0xbe, 0xab, 0x76, 0x15, 0x24, 0x60, 0xe1, 0x6e, 0x8a, 0x23, 0xfe, 0x28, 0x69, 0x96, 0xb3, 0x1e, 0x89, 0x74, 0xa0, 0x01, 0x21, 0x25, 0x5f, 0x92, 0x41, 0x8f, 0x0a, 0x15, 0x6d, 0x2e, 0xfe, 0x02, 0x8a, 0x67, 0xdf, 0xfd, 0xff, 0x19, 0xdd, 0x08, 0x14, 0x76, 0x35, 0xf8, 0x9d, 0x11, 0xfa, 0x25, 0xdd, 0x37, 0x15, 0x66, 0xa5, 0x83, 0x8b, 0x3d, 0xbc, 0xad, 0xfe, 0x4e, 0x83, 0xa3, 0x77, 0x16, 0xd9, 0xdb, 0x62, 0xd9, 0x3d, 0xe7, 0xda, 0xdc, 0x32, 0x4a, 0x27, 0xd5, 0xe8, 0x8a, 0x85, 0xa0, 0x18, 0x86, 0x27, 0x33, 0x30, 0x0a, 0x7c, 0xd4, 0xb0, 0xa1, 0xb1, 0x8a, 0xd4, 0xaa, 0x77, 0xd1, 0x73, 0xae, 0x06, 0x91, 0x27, 0xf1, 0x62, 0x51, 0xae, 0x47, 0xdd, 0xa8, 0x90, 0x29, 0xdd, 0xf5, 0x02, 0x08, 0xdf, 0x50, 0x0b, 0xe1, 0xbc, 0xc1, 0xe5, 0x12, 0x2b, 0xaf, 0xa6, 0x6c, 0x88, 0x9b, 0x20, 0x89, 0xd4, 0x0e, 0x05, 0x60, 0xfc, 0xcf, 0x4f, 0x16, 0x5e, 0x5a, 0xde, 0x18, 0x89, 0x8e, 0x63, 0x66, 0x44, 0xa6, 0x7e, 0x32, 0xd3, 0x6a, 0x23, 0xa9, 0x75, 0xa6, 0x42, 0x11, 0x31, 0xdc, 0xa7, 0x14, 0xd2, 0x36, 0x1f, 0x5b, 0x31, 0xbe, 0xdc, 0x5f, 0xb2, 0xd1, 0x1a, 0x7c, 0x11, 0xd1, 0x03, 0x48, 0x5f, 0x1b, 0xd0, 0x22, 0x47, 0x39, 0x32, 0x0e, 0x96, 0x58, 0xf0, 0xc0, 0xfb, 0xfc, 0xd1, 0xf6, 0x0a, 0xf2, 0xbc, 0x0b, 0x87, 0x87, 0x1e, 0xc9, 0xe2, 0xf7, 0x8c, 0x80, 0xfe, 0x28, 0xaa, 0x54, 0x36, 0x98, 0x4b, 0xdb, 0xa2, 0x94, 0xd9, 0xe8, 0x96, 0xac, 0xf8, 0xa1, 0x6c, 0x63, 0x66, 0xd8, 0x84, 0x2b, 0x25, 0x98, 0x88, 0x90, 0xdd, 0xfd, 0xf5, 0xb3, 0x7c, 0x49, 0xd7, 0xfa, 0x1f, 0x35, 0xd4, 0x06, 0x35, 0x85, 0x6b, 0xe5, 0xe1, 0xdf, 0x7e, 0x89, 0xa1, 0xdd, 0x0e, 0x79, 0x2e, 0x61, 0x47, 0xc7, 0xa3, 0x29, 0xbc, 0x42, 0xe0, 0xa3, 0xf3, 0xec, 0x31, 0x02, 0x24, 0xaf, 0x2b, 0x91, 0x3e, 0x4b, 0xd7, 0x47, 0x2b, 0x93, 0x13, 0x9c, 0x55, 0xd9, 0x34, 0x9c, 0x69, 0xa7, 0xf0, 0x3a, 0x5b, 0xb0, 0x7c, 0xe6, 0xaa, 0x05, 0xf1, 0x62, 0xe5, 0x8c, 0xf4, 0xd1, 0x6e, 0xaf, 0x96, 0x11, 0x7e, 0x51, 0x79, 0x4a, 0x69, 0x06, 0x35, 0xc7, 0x23, 0x83, 0xf9, 0x05, 0x03, 0x53, 0x76, 0x0a, 0xc8, 0xcc, 0xf8, 0xf8, 0xda, 0x42, 0xd6, 0xe2, 0xd2, 0x7a, 0x0d, 0xde, 0x3b, 0x61, 0x28, 0x5c, 0x9a, 0xfe, 0x63, 0xb6, 0xad, 0xa6, 0x0f, 0x08, 0xf1, 0x6f, 0x38, 0x41, 0x66, 0xe7, 0x86, 0x7a, 0x96, 0x05, 0x61, 0x87, 0xd4, 0x5f, 0x58, 0xcc, 0xc2, 0x9e, 0xc4, 0x52, 0x16, 0x2f, 0xa8, 0x1b, 0x9d, 0x3c, 0xdc, 0xb2, 0x80, 0xdb, 0x6b, 0x05, 0xc6, 0x85, 0x39, 0x77, 0x1a, 0xc9, 0xe9, 0x32, 0xce, 0x41, 0xfd, 0xba, 0x21, 0xc6, 0x3f, 0xc8, 0xbd, 0xe0, 0x60, 0x55, 0x84, 0x80, 0xe0, 0xf5, 0x8c, 0xf2, 0x2d, 0x66, 0x68, 0x0d, 0x0f, 0x69, 0xaa, 0xad, 0x43, 0xd0, 0xa5, 0x63, 0x67, 0xd9, 0x78, 0x6a, 0x16, 0xba, 0x48, 0xdd, 0x53, 0x7d, 0xcc, 0x28, 0x2b, 0x0e, 0x0f, 0xbd, 0x96, 0x93, 0x71, 0x08, 0x9f, 0xfb, 0xef, 0xa4, 0xc4, 0xda, 0xa5, 0xcf, 0xa0, 0x74, 0x91, 0x1b, 0xc7, 0x17, 0x9a, 0x67, 0xf2, 0xaf, 0xd1, 0x0e, 0x5c, 0x94, 0xf6, 0x5e, 0x6b, 0xa6, 0x3e, 0x4c, 0x93, 0x9c, 0x53, 0x65, 0x78, 0x99, 0x9d, 0x08, 0x52, 0x00, 0xc0, 0xd3, 0x96, 0x8a, 0x66, 0x5b, 0xd3, 0x96, 0x3e, 0x20, 0xd9, 0xc0, 0x45, 0xc0, 0x21, 0xb4, 0x44, 0x6a, 0x69, 0x45, 0x99, 0x96, 0x9f, 0xb9, 0x3b, 0xf3, 0x00, 0x67, 0xf9, 0xa1, 0x81, 0x85, 0x02, 0xa1, 0x6e, 0x3b, 0xaa, 0x8a, 0x51, 0xfb, 0x6b, 0x7d, 0x15, 0x15, 0x2a, 0x5a, 0x6b, 0x86, 0xbc, 0x34, 0x6d, 0x11, 0xa9, 0x03, 0x81, 0x92, 0x30, 0x99, 0x81, 0x8e, 0x8b, 0xd8, 0x19, 0x0e, 0x74, 0x21, 0x70, 0xae, 0xe7, 0x0f, 0x0a, 0xf1, 0x2a, 0x66, 0xed, 0xd7, 0x0b, 0x46, 0x02, 0xb2, 0x69, 0xa5, 0xbf, 0x35, 0xf5, 0xfc, 0x03, 0xce, 0x3a, 0x3f, 0x41, 0x36, 0xdb, 0x13, 0xe1, 0x46, 0x1c, 0x3c, 0xe3, 0x0c, 0xa4, 0x54, 0xc6, 0x1e, 0x82, 0xc3, 0xa8, 0x2e, 0x6d, 0xeb, 0xae, 0xdf, 0x50, 0xa3, 0xa6, 0xd7, 0x06, 0xe7, 0xeb, 0x15, 0x61, 0xcd, 0x89, 0x85, 0x72, 0xbb, 0xa2, 0xd2, 0x04, 0xd8, 0x11, 0x7c, 0x6a, 0xc0, 0x4c, 0x2a, 0x7b, 0x7c, 0x8f, 0x41, 0xda, 0xb1, 0x37, 0xb5, 0x7b, 0x17, 0x6c, 0x20, 0x62, 0x2d, 0x02, 0x11, 0xae, 0x2c, 0xa1, 0xa6, 0xd7, 0x39, 0x24, 0x5d, 0x34, 0xde, 0x40, 0x27, 0xc0, 0xbb, 0x66, 0xbe, 0x1d, 0x79, 0xea, 0x39, 0xd9, 0x00, 0x64, 0xde, 0xf1, 0xea, 0x57, 0x37, 0x93, 0x37, 0x10, 0x68, 0x28, 0x42, 0xd1, 0xbf, 0x92, 0xf3, 0x2f, 0x8d, 0xb2, 0x37, 0xb9, 0x34, 0x2e, 0xad, 0xda, 0x82, 0x71, 0xa3, 0x01, 0x3d, 0xf3, 0x40, 0xfe, 0xff, 0xba, 0x02, 0xb0, 0x44, 0x21, 0x6c, 0xdd, 0xc2, 0xd8, 0xf8, 0x61, 0xf9, 0x2c, 0x53, 0x8b, 0x0a, 0x88, 0xc9, 0xc4, 0xcc, 0x3c, 0xfe, 0x71, 0x1d, 0x7e, 0xe0, 0x1b, 0x76, 0xae, 0xd9, 0xcd, 0xc3, 0xdf, 0x49, 0xbe, 0x71, 0x92, 0x33, 0x30, 0xc8, 0xc4, 0x37, 0x98, 0x7b, 0x2c, 0xc0, 0xff, 0x7d, 0xbe, 0x7e, 0xa8, 0x17, 0x73, 0x17, 0xf3, 0x38, 0x4c, 0x19, 0x81, 0x0c, 0x95, 0x34, 0x99, 0xcf, 0x67, 0xa6, 0xcb, 0xe4, 0x70, 0xf6, 0xd3, 0x21, 0xf6, 0xe5, 0xc0, 0x6e, 0x1a, 0xa2, 0x55, 0x8e, 0x5a, 0x3d, 0xaf, 0x3c, 0x5a, 0x5e, 0x28, 0x7a, 0xe4, 0x37, 0x7c, 0x26, 0x2d, 0xb7, 0x2a, 0xce, 0x5a, 0x00, 0x1d, 0xc5, 0x42, 0x1c, 0x8c, 0x76, 0x76, 0xeb, 0x1f, 0xf9, 0x7f, 0x60, 0x53, 0xe4, 0x66, 0xed, 0x1f, 0x64, 0x7a, 0x3c, 0xd8, 0x8c, 0x4d, 0x20, 0x52, 0xec, 0x00, 0xcb, 0x48, 0x66, 0xc0, 0x41, 0xfd, 0x3d, 0x91, 0x0d, 0x24, 0x6f, 0x4a, 0x32, 0xfd, 0x45, 0xe1, 0x64, 0xc2, 0x28, 0xe9, 0x78, 0x41, 0xb6, 0x59, 0x1a, 0xca, 0x15, 0x8f, 0xbe, 0x4b, 0x87, 0x95, 0xd9, 0xba, 0x3f, 0xa2, 0x50, 0xb3, 0x74, 0xe4, 0x30, 0x63, 0xb3, 0x7c, 0xa1, 0xa4, 0x79, 0xcb, 0x15, 0x69, 0x01, 0xec, 0xc5, 0x5d, 0x5b, 0x81, 0x5e, 0xc7, 0xbe, 0xb3, 0xf7, 0xb1, 0x1f, 0x74, 0x47, 0x49, 0x02, 0x07, 0x15, 0x87, 0x91, 0xc3, 0xef, 0x10, 0xeb, 0x14, 0x1f, 0x5b, 0xbe, 0xc2, 0xdb, 0x12, 0x18, 0x76, 0xbc, 0xbb, 0x7a, 0x7a, 0x72, 0x97, 0x2f, 0xc0, 0xb5, 0xca, 0xdb, 0x26, 0x7e, 0xbd, 0x57, 0xf8, 0x78, 0xc1, 0xbc, 0xb6, 0xb1, 0xf5, 0xbe, 0x18, 0x96, 0x69, 0x3c, 0x50, 0x1e, 0x83, 0x14, 0x8f, 0x45, 0xa2, 0x3c, 0xca, 0xbc, 0x02, 0x0f, 0xbe, 0xdf, 0xe0, 0xe4, 0x32, 0xe7, 0xde, 0xe5, 0x7c, 0x61, 0xa8, 0x1f, 0x46, 0xdf, 0xd8, 0xd5, 0x92, 0xed, 0x17, 0x1a, 0xfc, 0x46, 0x85, 0x9f, 0x3f, 0x48, 0x5c, 0xc9, 0xfb, 0xa6, 0xd0, 0x06, 0xb6, 0x5d, 0x39, 0x62, 0x20, 0xe9, 0x73, 0x55, 0x9b, 0xb8, 0x85, 0xdf, 0xfa, 0xdf, 0x82, 0xd7, 0x89, 0x0c, 0xad, 0x81, 0x4e, 0xbb, 0xe0, 0x5e, 0x8f, 0xad, 0x2f, 0x48, 0x95, 0x96, 0xc8, 0xbe, 0xaf, 0x17, 0x1d, 0x7c, 0x79, 0xeb, 0x46, 0x4e, 0x5d, 0x65, 0xa0, 0x27, 0x5b, 0x1a, 0xbb, 0x6d, 0x06, 0xdb, 0x73, 0x98, 0xcf, 0xe6, 0x5c, 0xfb, 0x86, 0x5c, 0x64, 0xe1, 0x1e, 0xf6, 0xb3, 0xdc, 0xb1, 0xf4, 0xd6, 0x5a, 0xc3, 0x57, 0x1d, 0x79, 0xcb, 0x50, 0x41, 0x1d, 0xf0, 0xf8, 0x4a, 0x3f, 0x10, 0x41, 0xb0, 0x88, 0x06, 0x2d, 0xc1, 0x1e, 0x2d, 0x3e, 0x42, 0xbe, 0x20, 0x2d, 0x59, 0x0b, 0xc4, 0xdf, 0xab, 0x25, 0x89, 0x94, 0xc1, 0x7e, 0xec, 0x62, 0xb0, 0xe9, 0x41, 0xe2, 0xf9, 0xf4, 0xaf, 0x29, 0xae, 0x78, 0x7c, 0xf9, 0xd6, 0x6e, 0x8a, 0x39, 0x13, 0x04, 0x22, 0xa3, 0x82, 0xf1, 0xf1, 0xbd, 0xe3, 0x05, 0x50, 0x0a, 0xfa, 0x04, 0xc9, 0x81, 0x34, 0xb4, 0xd6, 0x3e, 0x8e, 0x35, 0xeb, 0x78, 0xb3, 0x91, 0xb7, 0xb3, 0x64, 0x94, 0xa8, 0x36, 0x1d, 0xde, 0xad, 0xc0, 0xf6, 0x36, 0x3f, 0x77, 0xc7, 0x21, 0xa2, 0x21, 0x8f, 0xb3, 0x68, 0x96, 0x17, 0xa6, 0x38, 0x75, 0xd2, 0xa9, 0xcd, 0x17, 0x08, 0xfa, 0x41, 0xc1, 0x33, 0x37, 0x8c, 0x1e, 0xaa, 0x72, 0x48, 0xec, 0x7c, 0x83, 0xb7, 0xf5, 0x9f, 0xa2, 0x06, 0x41, 0x4a, 0x35, 0xd3, 0x8a, 0x9f, 0xe6, 0xee, 0xf0, 0x8d, 0xf9, 0x5c, 0xee, 0xf5, 0xdc, 0xa2, 0x8d, 0x0b, 0x00, 0x40, 0xd7, 0x00, 0xe8, 0x7b, 0x8f, 0xde, 0x80, 0x5f, 0x1f, 0xb3, 0xaf, 0x05, 0xd2, 0xf1, 0x2f, 0x12, 0x43, 0x15, 0x9d, 0x80, 0x16, 0x87, 0xcc, 0xa1, 0xe5, 0xc1, 0x5f, 0x60, 0x7d, 0xb4, 0x97, 0xcb, 0x4b, 0x67, 0x69, 0xce, 0x11, 0xe2, 0xd4, 0x41, 0xdd, 0x4a, 0x71, 0x26, 0x3c, 0x4d, 0x4c, 0x2b, 0xab, 0xc1, 0xf2, 0x77, 0x4e, 0x87, 0xcb, 0xa2, 0xe5, 0xb6, 0xaa, 0x05, 0xfb, 0xf5, 0xa3, 0x35, 0x60, 0x29, 0x1d, 0xca, 0xda, 0x51, 0x27, 0x65, 0x18, 0xad, 0x10, 0xf1, 0xe7, 0x26, 0x31, 0x28, 0xa9, 0xea, 0x0e, 0x59, 0x02, 0x57, 0x9e, 0x69, 0xd4, 0x1a, 0xe6, 0x19, 0x6e, 0x98, 0xcd, 0x86, 0x00, 0x8d, 0x2b, 0xf6, 0x52, 0xf2, 0x23, 0xd1, 0xb6, 0x25, 0xb3, 0xee, 0x3c, 0x44, 0x89, 0x10, 0x24, 0xd9, 0x18, 0xb1, 0x99, 0xbd, 0xec, 0xfe, 0x9c, 0x36, 0x3a, 0x22, 0x3e, 0x63, 0xbc, 0xc7, 0x12, 0xda, 0xbb, 0xda, 0xe2, 0x8f, 0x6e, 0x8f, 0xa1, 0xf8, 0x82, 0xa6, 0xa1, 0x6e, 0xfa, 0xec, 0x06, 0xd7, 0x39, 0x04, 0x7b, 0x82, 0x5d, 0x67, 0x23, 0x52, 0xcf, 0xaa, 0xd2, 0x1f, 0x18, 0x00, 0x7e, 0x59, 0xf7, 0xff, 0xf0, 0xee, 0xb0, 0xa7, 0xbf, 0x6e, 0xa6, 0xa0, 0x7f, 0x6e, 0x2c, 0xc3, 0x36, 0x2a, 0x99, 0xdc, 0x0f, 0x6e, 0x9a, 0xae, 0x53, 0xb6, 0xcd, 0x38, 0x94, 0x94, 0x8b, 0x37, 0x2c, 0x52, 0x05, 0xec, 0xe6, 0xd8, 0x92, 0x1f, 0xfa, 0xd1, 0x47, 0x64, 0x3f, 0x0a, 0xc9, 0x9d, 0x9c, 0x1a, 0x5f, 0xc0, 0xbf, 0x48, 0x4b, 0xdb, 0x12, 0xa9, 0x5b, 0x55, 0xeb, 0x89, 0xbb, 0x76, 0x04, 0x0c, 0x0d, 0x29, 0x2a, 0x15, 0xbb, 0x01, 0x39, 0x67, 0x8c, 0x7b, 0x47, 0x0b, 0x76, 0x83, 0x20, 0xf1, 0xb4, 0x39, 0xf3, 0xda, 0x18, 0xf4, 0x4a, 0x74, 0xa1, 0x87, 0x3f, 0xc7, 0x50, 0xc4, 0xed, 0xd1, 0x38, 0x3f, 0x26, 0x6d, 0xd5, 0x55, 0x64, 0x7a, 0x9e, 0x6c, 0x01, 0x38, 0xdd, 0x7b, 0xaa, 0xf5, 0xbf, 0xce, 0x11, 0xea, 0xa7, 0x03, 0xe2, 0x60, 0xc8, 0x59, 0xf9, 0x17, 0xf3, 0x2a, 0xd2, 0xe7, 0xad, 0xb5, 0x40, 0xa8, 0x85, 0x21, 0x62, 0x50, 0xa5, 0xbf, 0xd3, 0x5b, 0xa6, 0x90, 0x22, 0x70, 0xa9, 0x07, 0x82, 0x41, 0xa3, 0x0f, 0xc2, 0xb3, 0xf8, 0x50, 0x7f, 0x3f, 0x4c, 0xae, 0x98, 0x97, 0x95, 0x13, 0xe2, 0x8d, 0x75, 0x6f, 0x1d, 0x31, 0xc8, 0xfd, 0x27, 0x3a, 0x79, 0xc7, 0x70, 0xa8, 0x99, 0x6c, 0xae, 0xa7, 0xb2, 0x21, 0xd2, 0xb5, 0x58, 0xf6, 0x3a, 0x07, 0x02, 0x5b, 0x28, 0x29, 0x18, 0xe2, 0x73, 0xe6, 0x4d, 0x46, 0x7c, 0x67, 0x2f, 0xad, 0x64, 0x9f, 0xfc, 0x2a, 0x7c, 0xe6, 0xb8, 0x86, 0xfd, 0xe3, 0x7c, 0x40, 0xfa, 0xb0, 0x11, 0xd2, 0x92, 0x39, 0xbe, 0x36, 0x6a, 0xe5, 0x5d, 0xa9, 0x5b, 0x79, 0xb4, 0xaf, 0x67, 0x39, 0x03, 0x57, 0xf2, 0x50, 0xda, 0xc0, 0x2e, 0x71, 0x2d, 0xdc, 0xd8, 0xbf, 0xaa, 0x74, 0x22, 0xea, 0x4a, 0x6c, 0xf0, 0x9b, 0x27, 0x49, 0x46, 0x13, 0x8d, 0xf0, 0x01, 0x0f, 0x53, 0xb0, 0xc6, 0xee, 0x6c, 0x83, 0x39, 0x15, 0xb9, 0x91, 0x6f, 0x93, 0x21, 0xf6, 0xa5, 0x01, 0xe4, 0xc5, 0x32, 0xac, 0x2c, 0x4d, 0xba, 0xf7, 0xe6, 0x9b, 0xa5, 0xfa, 0xcf, 0x40, 0xcf, 0x6f, 0xd2, 0x54, 0x81, 0xcf, 0x91, 0xba, 0xa1, 0xb8, 0x42, 0xa6, 0x25, 0x92, 0xbc, 0x5d, 0xcd, 0x72, 0xd1, 0x3c, 0x12, 0x3e, 0xdf, 0xfc, 0x5a, 0x13, 0xa2, 0x34, 0x6d, 0xe3, 0x4c, 0x1f, 0x2c, 0x63, 0xd8, 0xa0, 0x81, 0x24, 0x9b, 0x83, 0x92, 0xff, 0x1c, 0x06, 0x3a, 0xb7, 0x25, 0x98, 0xb9, 0xda, 0x1a, 0xe0, 0xaa, 0xe8, 0x8a, 0x01, 0x36, 0xb7, 0x04, 0x1d, 0x88, 0x16, 0x2c, 0x18, 0x80, 0xb1, 0x0d, 0x9e, 0xac, 0x35, 0xb1, 0x67, 0x74, 0xb4, 0xef, 0xb9, 0x94, 0x4a, 0x85, 0x2f, 0xd0, 0x01, 0x67, 0xba, 0xe2, 0xf2, 0x56, 0xe5, 0xb8, 0xad, 0xb3, 0x5d, 0xdc, 0xdb, 0x96, 0xb0, 0x34, 0x22, 0x1b, 0x55, 0xeb, 0x49, 0xfc, 0xed, 0xaf, 0x9d, 0x65, 0xc8, 0x1d, 0x93, 0x03, 0xab, 0x79, 0xae, 0x5f, 0xd0, 0xa3, 0xa3, 0x6a, 0x2f, 0x46, 0xbc, 0x58, 0xfc, 0x53, 0x7a, 0xb2, 0x71, 0xae, 0x7e, 0xa7, 0xcd, 0x27, 0xa9, 0xa4, 0x9d, 0xab, 0x83, 0x24, 0x3a, 0xbb, 0xd9, 0xc8, 0x93, 0x1e, 0xab, 0xaa, 0x2c, 0xd3, 0x45, 0xef, 0x67, 0x4a, 0xab, 0x9b, 0x03, 0xd4, 0x3a, 0xa9, 0xe2, 0x57, 0x8d, 0x5c, 0x0f, 0x46, 0x9e, 0xd0, 0xff, 0xd0, 0x2d, 0xd4, 0x17, 0x58, 0x66, 0xfc, 0x6f, 0x26, 0xbe, 0xf1, 0xd6, 0x5c, 0x1e, 0x0c, 0x16, 0x2b, 0x43, 0x23, 0x79, 0x46, 0x65, 0xa3, 0x8b, 0x97, 0x16, 0xdf, 0x22, 0x32, 0x6e, 0xa8, 0x9c, 0x87, 0x65, 0x1e, 0x68, 0xdb, 0x80, 0xc5, 0xc8, 0xf9, 0xb0, 0xdc, 0xd4, 0x24, 0x77, 0xea, 0xc3, 0x51, 0x4c, 0x99, 0x66, 0x93, 0x41, 0xc7, 0xf5, 0xd7, 0xe3, 0xdb, 0x0e, 0xd1, 0x61, 0x55, 0xfb, 0x36, 0xf1, 0xaa, 0x34, 0x2c, 0x70, 0x4e, 0x24, 0xff, 0x48, 0x12, 0x30, 0x15, 0x97, 0xb0, 0xf6, 0x24, 0x8e, 0xa4, 0xd2, 0xa2, 0x17, 0x3e, 0xa7, 0x7d, 0xba, 0xf6, 0xdc, 0x0d, 0xc1, 0xff, 0xa4, 0x47, 0x9a, 0x1f, 0x83, 0x33, 0x7e, 0xbd, 0x0e, 0xa0, 0x50, 0x3c, 0xf2, 0x16, 0xc8, 0x87, 0x37, 0x0c, 0xd0, 0xed, 0xc6, 0x5b, 0x2e, 0x30, 0x29, 0xf3, 0x64, 0xd8, 0x93, 0xcc, 0xd4, 0xcd, 0x20, 0x20, 0x28, 0x25, 0x5d, 0xd8, 0xf1, 0x3b, 0x0b, 0x44, 0x8e, 0x01, 0x20, 0x0e, 0x50, 0x97, 0x0f, 0x71, 0xdc, 0x1c, 0x49, 0xa6, 0xd0, 0xc4, 0x04, 0x9f, 0xa9, 0x2a, 0x3b, 0xf8, 0xe4, 0xe8, 0xf6, 0x2b, 0x63, 0x66, 0xcb, 0x03, 0x13, 0xef, 0xa5, 0x53, 0xcc, 0x0a, 0xc4, 0xe7, 0x78, 0x07, 0x05, 0xbb, 0x78, 0xd8, 0x64, 0x6b, 0x43, 0x22, 0xbf, 0xeb, 0x50, 0x94, 0xdd, 0x78, 0x37, 0x78, 0xae, 0xce, 0x13, 0x87, 0xd4, 0x9c, 0x2a, 0x02, 0x63, 0x35, 0xd0, 0xfe, 0xe5, 0x88, 0x88, 0x00, 0xa2, 0x52, 0x6d, 0xc9, 0x1e, 0x92, 0xd0, 0x73, 0xe2, 0x3e, 0x23, 0xbd, 0x7f, 0x34, 0x15, 0xa4, 0xd1, 0x73, 0xff, 0x33, 0x81, 0x8b, 0x7f, 0x9b, 0xcd, 0x52, 0x62, 0x86, 0x8c, 0xd9, 0xc8, 0xa9, 0x6c, 0x9e, 0x82, 0x98, 0x7f, 0x03, 0xbf, 0xdf, 0xf6, 0xff, 0xe8, 0x4e, 0x2c, 0x14, 0xc8, 0x94, 0xe6, 0x81, 0xf0, 0x10, 0xd9, 0xb8, 0x5a, 0xe3, 0x6c, 0x12, 0x4c, 0x4a, 0xc0, 0xc2, 0x7f, 0x2b, 0xed, 0x08, 0x81, 0xed, 0x8f, 0xa7, 0x58, 0x8d, 0x82, 0x98, 0x68, 0xee, 0xe9, 0x00, 0x97, 0x71, 0x75, 0x60, 0xae, 0xc6, 0xe4, 0x0b, 0x02, 0x02, 0xc7, 0xde, 0x55, 0xf1, 0x89, 0x2b ],
-const [ 0x14, 0x1f, 0xd0, 0xb3, 0xd1, 0x11, 0xb5, 0x10, 0xdd, 0xcb, 0x31, 0xde, 0xe8, 0x87, 0xa3, 0xd4, 0x63, 0x46, 0x1a, 0x95, 0xef, 0x72, 0x68, 0x7a, 0x15, 0xc1, 0x78, 0x92, 0x37, 0x5c, 0xe1, 0xe7, 0xc6, 0x41, 0xba, 0x03, 0xb6, 0xe5, 0xb1, 0xb3, 0x2f, 0x1e, 0x57, 0x0b, 0x86, 0x41, 0xbe, 0xaa, 0x6b, 0x87, 0x46, 0x40, 0x64, 0xb6, 0xb4, 0x4d, 0x7a, 0xfd, 0x84, 0x2b, 0x31, 0x1f, 0x81, 0x4e, 0xbe, 0xd4, 0x92, 0xcb, 0x75, 0x6c, 0xd7, 0x17, 0x81, 0xb5, 0xf4, 0x11, 0xd7, 0x1f, 0xad, 0x43, 0x6d, 0x1e, 0xb4, 0x65, 0xa6, 0xd0, 0xbe, 0x23, 0x11, 0xe0, 0xdc, 0x21, 0x54, 0xaa, 0x09, 0x3b, 0x63, 0x9f, 0xff, 0x11, 0xf6, 0xeb, 0x50, 0xc3, 0x39, 0x56, 0xb1, 0xf9, 0xc5, 0x68, 0x99, 0x27, 0xcf, 0xd1, 0x0b, 0x0f, 0x9f, 0x08, 0xaf, 0x87, 0x44, 0x31, 0x28, 0x7c, 0x87, 0x44, 0xa2, 0x37, 0x1d, 0x6c, 0xaa, 0xdf, 0x21, 0xad, 0x43, 0x3f, 0xc1, 0xca, 0x36, 0xca, 0x37, 0x66, 0xa9, 0xdc, 0xfb, 0x69, 0xf3, 0x43, 0x36, 0xa5, 0xaf, 0xfe, 0x7a, 0xba, 0x0f, 0x44, 0xb1, 0x36, 0x74, 0xc9, 0x54, 0x01, 0x3b, 0x3c, 0xde, 0xf9, 0xd9, 0x14, 0x7f, 0xd9, 0x2a, 0x8c, 0x14, 0x5f, 0x06, 0xec, 0x57, 0xae, 0x16, 0x0b, 0x53, 0xf1, 0xe5, 0x12, 0x1c, 0x41, 0x3a, 0x82, 0xbc, 0xc9, 0xa6, 0x79, 0x70, 0x27, 0x59, 0x31, 0x15, 0x16, 0x39, 0xc9, 0xdd, 0x4a, 0x36, 0x48, 0x46, 0x9c, 0xd7, 0xdf, 0x4d, 0x67, 0x19, 0x6e, 0xde, 0x32, 0x7a, 0x4a, 0x90, 0x8f, 0x51, 0x3e, 0x8f, 0x42, 0x60, 0xcf, 0xd9, 0xa6, 0xac, 0xc4, 0xae, 0x4d, 0x8d, 0xe6, 0x41, 0xe7, 0x01, 0x05, 0xb4, 0x65, 0x45, 0x3b, 0x43, 0x5e, 0xa7, 0x75, 0xc0, 0xb1, 0x96, 0x2e, 0x3f, 0x6c, 0xfb, 0x7e, 0x12, 0xec, 0xcc, 0x54, 0xf8, 0x46, 0xdd, 0xff, 0x91, 0xe6, 0xfa, 0xf4, 0x15, 0x76, 0x34, 0xcb, 0x46, 0x02, 0x78, 0x8a, 0xa3, 0x59, 0x66, 0x26, 0xdf, 0xb6, 0x5f, 0x47, 0x91, 0x9f, 0xe0, 0x4c, 0x2d, 0x0e, 0x0f, 0x8f, 0x33, 0xcf, 0x94, 0xea, 0xa6, 0x29, 0xaa, 0x7a, 0xc0, 0xc0, 0x76, 0xa2, 0xe4, 0xba, 0x97, 0x53, 0xd4, 0x21, 0xfe, 0x8b, 0x24, 0x88, 0x00, 0x1c, 0xef, 0xf2, 0xa9, 0xaf, 0xc8, 0xef, 0x54, 0x08, 0xf3, 0x08, 0x78, 0x8c, 0xd6, 0x5d, 0xc5, 0x00, 0xaa, 0x8d, 0x70, 0x93, 0x76, 0xd6, 0xcb, 0x1f, 0x3e, 0x7e, 0x18, 0xac, 0x77, 0x71, 0x9f, 0x36, 0xbf, 0x2b, 0xfe, 0xb0, 0xcb, 0xd8, 0xc1, 0x48, 0xa1, 0xba, 0x32, 0xed, 0x07, 0xcc, 0x72, 0x0e, 0x3b, 0xa5, 0xc9, 0xa5, 0xe4, 0x9e, 0x3b, 0x75, 0x49, 0x37, 0x5c, 0x8f, 0xc1, 0xb7, 0x65, 0x1b, 0x6a, 0x13, 0x86, 0x55, 0x1e, 0x11, 0x7e, 0xd6, 0xa3, 0xad, 0x6a, 0x15, 0x22, 0xbc, 0xda, 0x2d, 0xdb, 0xcf, 0x2a, 0xe1, 0x16, 0x5a, 0x10, 0xdd, 0x5d, 0x16, 0x71, 0x3e, 0xe8, 0xa3, 0x79, 0x55, 0x59, 0x72, 0xea, 0xa8, 0xaa, 0xe2, 0xb4, 0x3a, 0x63, 0xa9, 0xc7, 0x0d, 0x10, 0x76, 0x25, 0xe4, 0xf2, 0xd5, 0x3b, 0x4d, 0xf5, 0x52, 0x71, 0xdf, 0xe2, 0xe1, 0x00, 0xc1, 0xd6, 0x7d, 0x03, 0x6c, 0xf3, 0x10, 0xd2, 0xb1, 0x55, 0x93, 0x8b, 0xfd, 0x47, 0x76, 0xf1, 0xdc, 0xb7, 0x42, 0x7a, 0xbc, 0xe8, 0x7d, 0xa3, 0xf4, 0x67, 0xce, 0x87, 0x04, 0x40, 0x61, 0xb0, 0x1e, 0x71, 0x8d, 0x2d, 0xe6, 0x9f, 0xb4, 0xe4, 0x77, 0x08, 0x6b, 0x2a, 0xa6, 0xb9, 0xdb, 0x91, 0x8a, 0x01, 0x67, 0x01, 0x3c, 0x25, 0x90, 0x0b, 0xdb, 0x55, 0x15, 0x79, 0xd3, 0xdf, 0x5e, 0x2a, 0x5f, 0xa3, 0x1a, 0x1d, 0x4d, 0xc7, 0x28, 0xcb, 0x02, 0xac, 0xb3, 0xba, 0xbd, 0x20, 0xa2, 0x4f, 0x20, 0xd5, 0x2f, 0xe4, 0xec, 0x11, 0xd5, 0x1a, 0x0c, 0xa8, 0x70, 0x70, 0xd5, 0x28, 0xa0, 0x15, 0x8c, 0x53, 0x6e, 0xfb, 0x28, 0xd2, 0x32, 0x2d, 0x5a, 0x27, 0xb4, 0x62, 0xcb, 0xe4, 0x91, 0xd2, 0xa5, 0x1a, 0xe0, 0x48, 0x54, 0x15, 0x16, 0x79, 0x8e, 0x46, 0x27, 0x94, 0x90, 0x81, 0xee, 0x1a, 0xab, 0x69, 0xcf, 0xf0, 0x00, 0x28, 0x9b, 0xb3, 0x88, 0x63, 0xb3, 0x4b, 0x57, 0x6c, 0x71, 0xc3, 0x21, 0xba, 0xc3, 0x57, 0xfd, 0x97, 0x19, 0xcf, 0x69, 0x19, 0x82, 0x0c, 0x8e, 0x53, 0x11, 0xe1, 0xc6, 0xcc, 0x86, 0x24, 0x5c, 0x31, 0x2a, 0x04, 0x93, 0x46, 0xfb, 0x9c, 0xe9, 0x22, 0x09, 0xc9, 0x9c, 0x9c, 0x20, 0x39, 0x6e, 0x01, 0xa7, 0xc5, 0xa5, 0x08, 0xc8, 0x01, 0x57, 0x07, 0xd2, 0x11, 0xe4, 0x66, 0xdb, 0xbe, 0xc4, 0x54, 0xa9, 0xc9, 0x83, 0xba, 0xd3, 0x7e, 0x09, 0x6d, 0x23, 0x8d, 0x1f, 0xa8, 0x3f, 0x16, 0x2f, 0xb9, 0x88, 0x03, 0x4b, 0xfa, 0x43, 0x9a, 0x71, 0x03, 0xf7, 0x52, 0x0e, 0x1e, 0x15, 0xe6, 0xc0, 0xfc, 0xde, 0xa9, 0x60, 0xa6, 0x82, 0x19, 0x40, 0xb5, 0x85, 0xb6, 0xb1, 0xc6, 0x67, 0x15, 0xc9, 0x29, 0x84, 0x30, 0x63, 0xd9, 0x39, 0x00, 0x66, 0xb1, 0x48, 0x4e, 0x4b, 0xdc, 0x7e, 0xc6, 0xd9, 0x8e, 0x93, 0x4d, 0x33, 0xf1, 0x51, 0x94, 0x15, 0x63, 0xf8, 0xed, 0x5b, 0xde, 0xe2, 0x5e, 0xc3, 0xb7, 0x63, 0xf4, 0xf3, 0x8c, 0xf3, 0x5a, 0xbe, 0x78, 0x8f, 0xaa, 0xa3, 0x88, 0x5c, 0x83, 0x96, 0x73, 0x8e, 0x5c, 0x04, 0x85, 0x88, 0x18, 0x11, 0xdd, 0x44, 0xda, 0x24, 0xd8, 0xf6, 0x1a, 0xa5, 0xcd, 0xec, 0xf9, 0x05, 0xfb, 0xb9, 0xd1, 0xff, 0xbf, 0x92, 0x11, 0x1e, 0x0b, 0xf8, 0x48, 0x80, 0x13, 0x98, 0x7f, 0xd9, 0x49, 0x6f, 0xcc, 0xba, 0x8c, 0x31, 0x24, 0x14, 0x9c, 0xec, 0x71, 0xf8, 0xd2, 0xe8, 0xe4, 0xa0, 0x0e, 0xd3, 0x8d, 0xb3, 0xf0, 0x1a, 0x29, 0xc5, 0x4b, 0x9a, 0x3b, 0x1d, 0xd6, 0x78, 0x5e, 0xbc, 0x25, 0x4d, 0xd9, 0x9b, 0xd8, 0x87, 0x74, 0x33, 0x13, 0x0c, 0x8a, 0x42, 0x2e, 0x20, 0x60, 0xcd, 0xad, 0x88, 0xb5, 0x61, 0x72, 0xef, 0x9a, 0x9f, 0x31, 0x8a, 0x84, 0xf8, 0x25, 0xf8, 0xa0, 0xb4, 0x01, 0x6c, 0x66, 0x39, 0x2a, 0x0d, 0x71, 0x8a, 0x23, 0x9d, 0x8e, 0x0e, 0x48, 0x59, 0x13, 0x93, 0xc0, 0x21, 0x72, 0x92, 0xad, 0xd9, 0x0d, 0xb4, 0xa5, 0x0f, 0x4c, 0x96, 0x66, 0xde, 0xed, 0xc9, 0xc5, 0x12, 0x9c, 0x1e, 0xe8, 0x8c, 0xc4, 0x20, 0xb5, 0xe9, 0xa4, 0xe1, 0x8a, 0x5e, 0xa5, 0xfa, 0x2f, 0xe6, 0xeb, 0xcd, 0x09, 0xa0, 0x2a, 0x0d, 0x90, 0x72, 0xbb, 0x81, 0x03, 0xf3, 0xef, 0x04, 0x5a, 0x88, 0xa3, 0xd1, 0x7c, 0xcd, 0x14, 0xfd, 0xb2, 0x36, 0xf5, 0x45, 0x5b, 0xf6, 0xbf, 0x0a, 0xe2, 0x1f, 0x49, 0x9a, 0xee, 0x0b, 0x98, 0xb1, 0xd8, 0xfc, 0xf8, 0x40, 0x62, 0xff, 0x4b, 0x6c, 0xa6, 0x16, 0xa2, 0xda, 0x4c, 0x95, 0x0a, 0x2a, 0x00, 0xcd, 0xa9, 0xc1, 0x23, 0xe8, 0x09, 0xcc, 0xc1, 0x14, 0xb3, 0x81, 0xc4, 0xe4, 0x00, 0xa8, 0x67, 0xf2, 0x2c, 0x5b, 0xed, 0xca, 0xac, 0x0a, 0x92, 0x03, 0xc1, 0xc2, 0xc2, 0xaf, 0x4e, 0xae, 0x89, 0xf6, 0xe7, 0xde, 0x4b, 0xfd, 0x2a, 0x47, 0xb5, 0x0d, 0x52, 0x0b, 0xf3, 0xf1, 0x09, 0xfb, 0x23, 0x9f, 0x7e, 0x5a, 0x0a, 0x1b, 0xb8, 0xe4, 0x06, 0x99, 0x2a, 0x0f, 0x44, 0xe2, 0x87, 0x91, 0x33, 0xf8, 0xd7, 0x22, 0x39, 0xfd, 0xcb, 0x83, 0xa4, 0x51, 0x4d, 0xbf, 0xe3, 0xfb, 0x5c, 0xb1, 0xf6, 0x4a, 0x17, 0xc6, 0x23, 0xbb, 0x17, 0x05, 0xeb, 0x1e, 0x02, 0x4c, 0x3c, 0xf5, 0x5d, 0xdc, 0xe8, 0x1d, 0xa2, 0x17, 0x56, 0xb0, 0x93, 0x89, 0x78, 0x29, 0xcd, 0x26, 0xfc, 0xc9, 0xa0, 0xd2, 0xc7, 0x3a, 0x1e, 0x27, 0x9f, 0x73, 0x72, 0x72, 0x27, 0xdb, 0x74, 0xfe, 0x11, 0xb1, 0x7a, 0x96, 0x8f, 0xab, 0x70, 0x45, 0x0a, 0xdd, 0x2b, 0x60, 0x17, 0xdd, 0xfa, 0xc6, 0xa7, 0x25, 0x7e, 0x67, 0x7d, 0xb8, 0xbc, 0x03, 0xe6, 0x09, 0x71, 0x34, 0xa4, 0x18, 0xa5, 0xaf, 0x2b, 0xde, 0x83, 0xc7, 0x10, 0xeb, 0x68, 0x33, 0xbe, 0x4e, 0x3a, 0x10, 0x6b, 0xb5, 0xfb, 0x2a, 0x4a, 0xd5, 0x9e, 0x77, 0x02, 0x0c, 0x19, 0xe4, 0x60, 0x45, 0xbb, 0x54, 0x48, 0x1d, 0xc0, 0xe6, 0xf2, 0x44, 0x23, 0x77, 0x53, 0x25, 0xb3, 0x69, 0xd8, 0xc9, 0x69, 0xa2, 0x5a, 0xf8, 0xf9, 0xd7, 0x4f, 0xa2, 0xa7, 0x0a, 0x3d, 0x7e, 0x5c, 0x51, 0x75, 0xf1, 0xf9, 0xda, 0xfd, 0x31, 0xeb, 0x2c, 0xce, 0xaa, 0x00, 0xaf, 0x3f, 0xa1, 0x78, 0x6f, 0xc2, 0x17, 0x60, 0x1d, 0xce, 0xf0, 0x1b, 0x57, 0x1c, 0x54, 0x42, 0x28, 0x16, 0x56, 0xae, 0xd3, 0x8d, 0xd3, 0xd2, 0xcc, 0xaa, 0x9d, 0x4e, 0x08, 0x27, 0xd9, 0xc2, 0x76, 0xbe, 0xa6, 0xe0, 0xce, 0xe2, 0x00, 0xc6, 0x89, 0xae, 0xe3, 0x8a, 0x30, 0x1b, 0xb3, 0x16, 0xda, 0x75, 0xdb, 0x36, 0xf1, 0x10, 0xb5, 0xef, 0x34, 0x37, 0xaa, 0x13, 0x02, 0x65, 0x9a, 0x12, 0xd5, 0xb8, 0x7d, 0x13, 0x0d, 0xa2, 0x4b, 0x43, 0xef, 0xe2, 0x1a, 0x6d, 0xed, 0xb2, 0x86, 0xcc, 0x27, 0x42, 0x56, 0x1d, 0x33, 0x66, 0x5d, 0xf7, 0x19, 0x8b, 0x9d, 0x5f, 0xa2, 0xf0, 0xb3, 0x98, 0xd3, 0x13, 0x6f, 0x38, 0xb4, 0x69, 0xc2, 0x81, 0x56, 0x51, 0xdd, 0xed, 0x13, 0x4b, 0x97, 0x0b, 0x18, 0x65, 0x0f, 0x8a, 0x21, 0xf7, 0x93, 0x93, 0x84, 0x90, 0xc1, 0x5d, 0x71, 0x30, 0xec, 0xfb, 0x78, 0xb8, 0xc2, 0x78, 0x4b, 0x9e, 0x2b, 0x25, 0xc6, 0xe5, 0x74, 0x32, 0x2c, 0x4d, 0xac, 0x7c, 0xb4, 0xc7, 0x4e, 0xa6, 0x44, 0x2b, 0x21, 0x6b, 0x7c, 0x2d, 0x5d, 0x32, 0xf6, 0x8e, 0x0f, 0xe3, 0xcc, 0x8f, 0xbe, 0xfa, 0x5b, 0xab, 0x4f, 0xda, 0x47, 0x85, 0x26, 0x63, 0xc0, 0x20, 0x8e, 0xc6, 0x03, 0x4e, 0x5b, 0x98, 0x23, 0x6b, 0xce, 0x26, 0x09, 0x4a, 0xb8, 0x09, 0xb9, 0x70, 0xe2, 0xfa, 0xd8, 0x80, 0xad, 0xe7, 0x6b, 0xf7, 0xf6, 0x46, 0xe2, 0x19, 0x3c, 0xa9, 0x55, 0x2c, 0x05, 0x92, 0x0d, 0xe3, 0x7d, 0x89, 0x46, 0x1d, 0x61, 0x6d, 0x33, 0xd0, 0x1b, 0x08, 0x43, 0x3f, 0x2f, 0xe5, 0xa3, 0x74, 0xd5, 0x66, 0x04, 0xea, 0xe7, 0x11, 0x9e, 0x8a, 0xfe, 0x2b, 0x75, 0xd8, 0xd9, 0x88, 0xdb, 0x6f, 0xfe, 0xa1, 0x36, 0xab, 0xa3, 0xe7, 0x03, 0xa5, 0xce, 0x57, 0x1b, 0x64, 0xbc, 0x4f, 0x35, 0x51, 0x80, 0xa0, 0xad, 0xec, 0xec, 0xe4, 0x84, 0xbe, 0xb4, 0x12, 0xa7, 0x8e, 0xd1, 0x4f, 0x74, 0xd8, 0x24, 0x07, 0x7a, 0x7b, 0x5c, 0x3d, 0x80, 0xb2, 0x19, 0x1f, 0xc9, 0x45, 0x51, 0xde, 0x97, 0x01, 0xf4, 0xbc, 0xee, 0x65, 0xcb, 0x67, 0x9a, 0x9e, 0xa6, 0x85, 0x74, 0xb6, 0xb6, 0x90, 0xe0, 0x08, 0x38, 0xe4, 0x9a, 0xf7, 0x53, 0x16, 0xb3, 0xdf, 0x44, 0x88, 0xd6, 0x4c, 0xb8, 0x3a, 0xd0, 0x6a, 0x79, 0xe3, 0x4f, 0xbd, 0x4d, 0x41, 0xea, 0x12, 0x1c, 0xad, 0x62, 0xb6, 0x50, 0xf2, 0x28, 0xe5, 0x81, 0x5f, 0x1f, 0x85, 0x52, 0x1b, 0xa2, 0x15, 0x96, 0xb9, 0xc9, 0xe0, 0xb8, 0x0c, 0xe8, 0x76, 0x59, 0x3d, 0x59, 0x5c, 0x3a, 0x1a, 0x7c, 0x03, 0x5d, 0xb1, 0xfb, 0xf7, 0x67, 0x1e, 0x53, 0x59, 0x49, 0xa1, 0x90, 0x8f, 0x1f, 0xf4, 0x57, 0x3a, 0x58, 0xdb, 0x2a, 0x68, 0x18, 0xfc, 0xe8, 0x0c, 0xda, 0xf1, 0x93, 0xab, 0x5a, 0x9c, 0x56, 0x57, 0xb2, 0xba, 0xc7, 0xe1, 0xc3, 0xbb, 0x69, 0x4b, 0xd6, 0xd2, 0x75, 0x7c, 0x83, 0x48, 0xda, 0x37, 0xd3, 0x15, 0x82, 0x4e, 0xa1, 0xb1, 0xd7, 0x13, 0x46, 0x28, 0x86, 0x10, 0x75, 0x6d, 0x82, 0xf8, 0x63, 0xf0, 0x4d, 0xdd, 0x2b, 0x72, 0x73, 0xa2, 0x72, 0x18, 0x57, 0xb4, 0x46, 0xbf, 0x31, 0xf5, 0x4c, 0x90, 0x58, 0xf9, 0x1b, 0xd4, 0xbd, 0x75, 0xe3, 0x09, 0xb8, 0xf4, 0x52, 0x35, 0x08, 0xcc, 0xb8, 0x7a, 0x15, 0x51, 0x69, 0xeb, 0x77, 0x48, 0x63, 0x9e, 0xbc, 0x9f, 0x30, 0x02, 0x66, 0x5b, 0x0e, 0x73, 0x34, 0xd1, 0x4e, 0x0c, 0xa3, 0x19, 0xfa, 0xbd, 0xb3, 0xc0, 0xba, 0x9d, 0xee, 0xbd, 0xf8, 0x81, 0xa7, 0xa6, 0x43, 0xcd, 0x80, 0x24, 0xf1, 0x8a, 0x2f, 0xa5, 0x09, 0xb9, 0x81, 0x50, 0x60, 0xe7, 0x9e, 0x3e, 0x01, 0x02, 0x90, 0xe7, 0xd2, 0x6b, 0xff, 0xda, 0x75, 0x4c, 0x3e, 0xb2, 0x6d, 0x2c, 0x8c, 0x45, 0x82, 0xc1, 0x93, 0x1e, 0x66, 0x05, 0x35, 0x2e, 0x98, 0x8c, 0x88, 0xbe, 0x89, 0x14, 0x1f, 0xa8, 0xfe, 0x5e, 0x8c, 0xc7, 0xb5, 0x3c, 0x22, 0xac, 0x4b, 0xec, 0x00, 0x92, 0x5d, 0xa4, 0x4b, 0x94, 0xee, 0x6e, 0xba, 0x1e, 0x08, 0x36, 0x58, 0xa2, 0xa6, 0x21, 0x85, 0x8c, 0xd2, 0x21, 0x3e, 0x77, 0x0b, 0xc7, 0x9f, 0xa1, 0xe9, 0x58, 0xa6, 0x9c, 0x04, 0x22, 0x3a, 0x47, 0x11, 0x10, 0x6c, 0xfd, 0x4e, 0x7d, 0xfc, 0x0c, 0x21, 0x46, 0x1f, 0x69, 0xfb, 0x23, 0x7f, 0xa2, 0x83, 0x37, 0x84, 0x13, 0xf1, 0xe5, 0xd2, 0x5d, 0xb7, 0xe6, 0x13, 0x14, 0x67, 0x98, 0xf6, 0xb8, 0xd1, 0x99, 0x77, 0xe7, 0x6b, 0x95, 0x62, 0xd0, 0xf7, 0x5c, 0x12, 0xeb, 0x5f, 0x38, 0x7f, 0xe8, 0xe4, 0x7d, 0x78, 0xe5, 0x77, 0x61, 0x2c, 0xe3, 0x67, 0x0e, 0xef, 0x7b, 0x3d, 0xf6, 0x3b, 0xcd, 0xe5, 0x67, 0xf5, 0xba, 0x0e, 0x5f, 0xf2, 0x53, 0xd2, 0xa1, 0xba, 0x90, 0x9a, 0x08, 0x8c, 0x46, 0x3c, 0x1c, 0xa2, 0x53, 0x67, 0xe3, 0xb5, 0x1b, 0x41, 0xfa, 0xc4, 0x39, 0x4e, 0xe3, 0x12, 0x6e, 0x94, 0xa1, 0x6e, 0xdd, 0xfd, 0x82, 0xb6, 0x7b, 0xfc, 0x3d, 0x9e, 0xc1, 0x73, 0x3c, 0xae, 0xa4, 0xd5, 0x3b, 0x8a, 0xc6, 0x88, 0x12, 0x76, 0xee, 0x8d, 0xcf, 0x19, 0xb6, 0x62, 0x08, 0x81, 0x83, 0x27, 0x70, 0x68, 0xba, 0x01, 0xa7, 0xb6, 0x31, 0xbc, 0x57, 0x47, 0xe4, 0xb4, 0x7c, 0xed, 0xea, 0xf5, 0x03, 0xb9, 0xa7, 0xa1, 0x97, 0x76, 0x42, 0x92, 0xb8, 0x77, 0x59, 0x41, 0x0d, 0x93, 0xf4, 0xe6, 0xfb, 0x6d, 0xb8, 0xe1, 0x76, 0xf9, 0x5e, 0x59, 0x17, 0x3b, 0x63, 0x23, 0x6f, 0x52, 0x00, 0xe5, 0x9c, 0xb6, 0x5c, 0x7b, 0x19, 0xbe, 0x01, 0x99, 0xdb, 0x65, 0x8c, 0xb2, 0x99, 0x4d, 0xa9, 0x19, 0x6b, 0x04, 0x3f, 0x67, 0x96, 0x87, 0xe8, 0x1c, 0xa6, 0x04, 0xa4, 0x89, 0xbe, 0xe4, 0xce, 0xed, 0x2d, 0x09, 0x4f, 0xde, 0x41, 0x54, 0x11, 0xea, 0x60, 0x6b, 0xb7, 0x7f, 0x54, 0xb9, 0x8b, 0x08, 0xe7, 0xb6, 0xb7, 0x59, 0xb0, 0x68, 0xb9, 0x4d, 0x2c, 0x2a, 0x11, 0xad, 0x11, 0xac, 0x3c, 0x54, 0xde, 0x3b, 0xe6, 0x91, 0xb7, 0x42, 0x5c, 0xcd, 0x70, 0x11, 0x40, 0x6e, 0xe8, 0xde, 0x80, 0xfb, 0x98, 0x09, 0x88, 0x80, 0x6b, 0xa5, 0xb7, 0x34, 0xd0, 0x33, 0x10, 0x59, 0x0e, 0xb0, 0x33, 0x64, 0xd9, 0xd3, 0x8b, 0x5e, 0x22, 0x90, 0xc8, 0x8a, 0x33, 0xe0, 0x90, 0x48, 0xfa, 0xc4, 0x71, 0x39, 0xa5, 0x87, 0x1b, 0xa4, 0x70, 0x44, 0xcc, 0x18, 0xbb, 0xa9, 0x0b, 0x53, 0x60, 0xfa, 0x99, 0x63, 0x43, 0x59, 0xa5, 0x0b, 0x2b, 0x44, 0x3f, 0x68, 0xd0, 0x5f, 0x0f, 0xd4, 0x35, 0x74, 0x47, 0x0b, 0x37, 0xb8, 0xd6, 0x8d, 0x66, 0x50, 0xdf, 0x43, 0x15, 0x13, 0x69, 0x64, 0xad, 0x92, 0x58, 0x9a, 0x47, 0x55, 0x9c, 0x61, 0x79, 0x68, 0xa8, 0xb0, 0x6f, 0x17, 0x25, 0xdc, 0x3e, 0xf5, 0xe8, 0xb9, 0x76, 0x23, 0x22, 0x02, 0xf6, 0xce, 0xd7, 0xfb, 0x05, 0xfa, 0x92, 0x54, 0x9e, 0x7e, 0x56, 0x51, 0x0a, 0x50, 0xd7, 0x28, 0xb5, 0x03, 0xea, 0xab, 0x3a, 0x8e, 0x3b, 0x26, 0xc0, 0x4f, 0x3e, 0x8b, 0x89, 0x50, 0x68, 0xcc, 0xc8, 0xc8, 0x9e, 0x89, 0xb3, 0xe5, 0xee, 0xeb, 0xda, 0xc8, 0x7d, 0xd0, 0xb7, 0xd2, 0xc0, 0x28, 0x86, 0x1e, 0xef, 0x9e, 0x57, 0x4e, 0xb7, 0x7c, 0x61, 0x8b, 0x30, 0xc8, 0x99, 0xc7, 0x0e, 0xb3, 0x83, 0x45, 0x1b, 0x35, 0x48, 0x5c, 0xe5, 0xf1, 0x0a, 0x78, 0xb3, 0x5e, 0x74, 0x61, 0xbe, 0x28, 0x95, 0xc0, 0x9e, 0xd4, 0xee, 0xdf, 0x03, 0xa4, 0xc9, 0xb0, 0xa5, 0xba, 0xcd, 0x11, 0x7e, 0x7f, 0xd0, 0x4e, 0x36, 0x46, 0xec, 0xe7, 0xdf, 0x2d, 0xd5, 0x94, 0xe2, 0x44, 0x69, 0x87, 0x39, 0xf2, 0x89, 0xf1, 0xdf, 0x94, 0x28, 0xc7, 0x85, 0x66, 0xa1, 0xc6, 0x87, 0xa7, 0x4e, 0xb5, 0x1e, 0xf8, 0x56, 0xea, 0xd7, 0x06, 0xc6, 0x0f, 0x44, 0x68, 0xe4, 0x26, 0xf1, 0xcb, 0xc0, 0xcb, 0x99, 0x4c, 0x0b, 0xb9, 0x9a, 0x25, 0x2c, 0x90, 0xa7, 0x8c, 0x91, 0xd6, 0xbd, 0xd8, 0x43, 0x3b, 0x58, 0xe6, 0xbe, 0x21, 0xe6, 0xbb, 0xff, 0x5b, 0x7c, 0x6a, 0xde, 0x35, 0xc8, 0x38, 0x9e, 0xb5, 0x47, 0xff, 0xc3, 0x21, 0xb7, 0xd0, 0x23, 0xc1, 0xd0, 0xdc, 0x40, 0xe6, 0x2f, 0x95, 0xd5, 0x2c, 0x93, 0x10, 0xaf, 0xfb, 0x4b, 0xae, 0xbe, 0x54, 0xef, 0xfb, 0x6c, 0xca, 0x4f, 0xd6, 0x2d, 0xce, 0xa9, 0xd3, 0x58, 0x30, 0x1f, 0xdd, 0x35, 0xe3, 0x67, 0x20, 0x57, 0x01, 0xc5, 0x26, 0x2c, 0x0e, 0x36, 0x3f, 0xd2, 0x81, 0xee, 0x27, 0x2c, 0x80, 0x05, 0xe3, 0x36, 0xec, 0x6e, 0xec, 0x95, 0x9d, 0x28, 0x8f, 0x73, 0xef, 0xb8, 0x94, 0x89, 0x7d, 0xd6, 0x1e, 0x7d, 0x2c, 0x67, 0xd2, 0x6f, 0x6c, 0xab, 0x3b, 0xcf, 0xba, 0xb8, 0x6d, 0x71, 0x69, 0x27, 0xe9, 0xe3, 0xa3, 0x0d, 0xc1, 0xfe, 0xab, 0x2d, 0xfd, 0xbb, 0x64, 0x6b, 0x3c, 0x48, 0x17, 0x84, 0x9f, 0x5b, 0x71, 0xfd, 0xe2, 0xc7, 0xcb, 0x59, 0xcc, 0x4d, 0xaf, 0x8f, 0xca, 0xb4, 0x97, 0xbb, 0xd7, 0x1b, 0xf7, 0x14, 0x9e, 0x8f, 0x7e, 0x1e, 0xe3, 0xd9, 0x99, 0x21, 0x1f, 0x99, 0x3a, 0xd9, 0x6a, 0x99, 0xd7, 0x6f, 0x9e, 0x5b, 0xb5, 0xa8, 0xba, 0xf4, 0x66, 0x5d, 0x84, 0x1d, 0x91, 0x2b, 0x73, 0x88, 0xf1, 0x6b, 0xcb, 0x70, 0xa0, 0x64, 0x0a, 0x74, 0x96, 0xc0, 0x83, 0xa5, 0x6c, 0x3d, 0x49, 0xde, 0x66, 0xa5, 0x4e, 0x54, 0xb1, 0x00, 0xcc, 0x6d, 0xe9, 0x08, 0xe4, 0xd6, 0xdf, 0xdd, 0x86, 0xd0, 0x98, 0xfa, 0x90, 0xca, 0x99, 0x68, 0x3a, 0x35, 0x61, 0x31, 0xb1, 0x94, 0x38, 0x18, 0x02, 0xd2, 0x27, 0x87, 0x3a, 0xd9, 0x48, 0xc9, 0xcb, 0x60, 0x40, 0x79, 0x32, 0x04, 0x09, 0x3b, 0xd7, 0x9b, 0xf5, 0xaa, 0x35, 0xc5, 0xef, 0x91, 0x3a, 0xc3, 0x04, 0x5d, 0xf1, 0x8d, 0x23, 0xd2, 0x5e, 0x1e, 0x21, 0xfe, 0xaa, 0x13, 0x00, 0x6b, 0x80, 0x74, 0x71, 0x99, 0xb6, 0xd2, 0x97, 0xab, 0x30, 0x92, 0x0e, 0x61, 0x01, 0x88, 0x2c, 0x46, 0xd4, 0xc8, 0x87, 0x2b, 0x8b, 0xb8, 0xb7, 0xd3, 0x25, 0x6a, 0x5d, 0xf0, 0xe5, 0x29, 0x64, 0x4e, 0xb0, 0x52, 0x86, 0x4f, 0xb8, 0x66, 0x12, 0x97, 0x57, 0x5c, 0xed, 0x08, 0x3d, 0x3c, 0xd7, 0xf1, 0xce, 0xe9, 0xf0, 0x82, 0xc6, 0x3e, 0x7b, 0x84, 0x1f, 0x5d, 0xe1, 0x47, 0x34, 0x44, 0xf9, 0xdb, 0x26, 0xa2, 0x86, 0x82, 0x7f, 0xe8, 0x02, 0x66, 0x15, 0xa2, 0x9a, 0x88, 0x32, 0x08, 0x79, 0xf9, 0xf1, 0xd0, 0x49, 0x4c, 0xeb, 0x47, 0xf7, 0x4b, 0x13, 0xa0, 0xb7, 0xe9, 0xdf, 0x8c, 0x49, 0x78, 0xa9, 0x0b, 0x7a, 0x1c, 0x54, 0x81, 0xed, 0x80, 0x32, 0x0c, 0x1b, 0xc7, 0x25, 0x15, 0x99, 0xc6, 0x05, 0x25, 0x9a, 0x70, 0x42, 0xfa, 0xb4, 0x91, 0xcb, 0xdb, 0xe7, 0xc0, 0x2e, 0x28, 0xdb, 0x8e, 0x00, 0x35, 0x69, 0x04, 0x7f, 0x58, 0x5d, 0x4d, 0x76, 0x41, 0x7a, 0xaf, 0x61, 0x8a, 0xbf, 0xc0, 0xd2, 0x8f, 0xe9, 0xd6, 0x13, 0x80, 0x39, 0xbf, 0x0d, 0xb5, 0x77, 0xb2, 0x68, 0x41, 0x37, 0x86, 0xf4, 0xc9, 0x5b, 0x22, 0x48, 0x97, 0xd9, 0x35, 0xa9, 0xea, 0xbf, 0x27, 0x2d, 0x90, 0x74, 0x4f, 0x1f, 0xb7, 0x40, 0x66, 0xa6, 0x01, 0x0e, 0x3b, 0xa2, 0xd6, 0x71, 0xa9, 0xd7, 0xfe, 0xe6, 0xc6, 0x4d, 0x6f, 0x59, 0x5e, 0xf6, 0x63, 0xea, 0xa0, 0x92, 0xae, 0xf0, 0x16, 0xd0, 0x4f, 0x3e, 0xdb, 0xb6, 0x45, 0xa6, 0x08, 0x42, 0xa4, 0xbc, 0x6f, 0x52, 0xe7, 0xdc, 0x8c, 0xc1, 0x88, 0x6f, 0xb8, 0xd3, 0xce, 0x69, 0xa0, 0xd3, 0xe7, 0x16, 0xf6, 0xfa, 0x36, 0x17, 0x66, 0x93, 0xee, 0xa8, 0xcc, 0x5d, 0xe0, 0x24, 0xa4, 0x31, 0x91, 0xca, 0xc1, 0xe4, 0x90, 0xc1, 0x43, 0x6f, 0x06, 0x5a, 0xc3, 0x4d, 0x8f, 0x96, 0xd0, 0x25, 0x48, 0xe8, 0x9f, 0xa9, 0x2a, 0x3b, 0xfe, 0xbe, 0x96, 0x37, 0x8a, 0xdd, 0x30, 0xc0, 0x22, 0xb9, 0xf1, 0xc0, 0x9b, 0x22, 0x78, 0x27, 0xb5, 0x29, 0xa1, 0x30, 0x4e, 0x85, 0x59, 0xe5, 0xd6, 0x35, 0xb1, 0xe5, 0x03, 0x67, 0x31, 0x65, 0xc6, 0x99, 0x6e, 0x75, 0x7d, 0xfe, 0xde, 0x84, 0x6a, 0x23, 0xec, 0x27, 0x64, 0xd2, 0x48, 0x16, 0xcc, 0x37, 0x81, 0x77, 0xc3, 0x41, 0xd5, 0x60, 0x9a, 0x4b, 0x48, 0x97, 0x8a, 0xfc, 0xf3, 0x9c, 0xa6, 0x6b, 0x9f, 0xe9, 0x0d, 0x87, 0x92, 0x78, 0x64, 0xb7, 0xa9, 0x86, 0x84, 0xbd, 0xa7, 0x97, 0x6f, 0xe0, 0xcd, 0xba, 0x89, 0x4a, 0xab, 0x0e, 0x05, 0xaf, 0x35, 0x85, 0x9d, 0x2f, 0x19, 0xe8, 0x86, 0x7e, 0x50, 0x1b, 0xa3, 0x42, 0xf3, 0xa3, 0xf9, 0xbc, 0x51, 0x65, 0x63, 0xab, 0x3e, 0xb0, 0x86, 0x6d, 0xae, 0x7e, 0x08, 0x68, 0x82, 0xf7, 0xfd, 0xa8, 0xa1, 0x37, 0xa2, 0xc9, 0x4b, 0x51, 0x4e, 0x18, 0xaa, 0x94, 0xa5, 0xf5, 0xaa, 0x0d, 0x0f, 0x7c, 0x0b, 0x4c, 0x69, 0x64, 0xb5, 0x6b, 0xfa, 0x26, 0x4b, 0x4d, 0xa8, 0x62, 0x02, 0x24, 0x6b, 0x7f, 0xb4, 0x36, 0x03, 0x93, 0x30, 0xe0, 0xe6, 0x82, 0xd5, 0xdb, 0x7d, 0x69, 0x5f, 0xbe, 0x8f, 0x3d, 0x00, 0xc4, 0xfe, 0xaf, 0xb3, 0xd0, 0xb1, 0x53, 0xcd, 0xae, 0xd1, 0x02, 0xd4, 0x9c, 0x38, 0x7d, 0x95, 0x09, 0x26, 0x52, 0x71, 0x9c, 0x36, 0x04, 0xf8, 0x78, 0x91, 0x66, 0xb9, 0xbf, 0x62, 0x48, 0x57, 0x54, 0x8a, 0x55, 0xe0, 0xe6, 0x94, 0x3c, 0x5b, 0x2a, 0xeb, 0x0e, 0xa0, 0x67, 0x4a, 0xe7, 0x6d, 0x38, 0x75, 0xd1, 0xb5, 0x8e, 0x27, 0xe5, 0x3b, 0xf4, 0x4b, 0xb4, 0x60, 0x17, 0x6e, 0xe5, 0x39, 0x85, 0x75, 0x1f, 0xe5, 0xb5, 0x8b, 0x29, 0x1e, 0x48, 0x5e, 0x4f, 0x0d, 0x8e, 0x8b, 0x08, 0x63, 0x4c, 0x56, 0xd7, 0xa5, 0xbc, 0x9f, 0x6f, 0xc7, 0xd6, 0x12, 0x1a, 0xfd, 0xce, 0x9d, 0x5b, 0xce, 0xde, 0x27, 0xd2, 0x6a, 0x45, 0x7f, 0x61, 0x3d, 0x90, 0x92, 0x8d, 0xc4, 0x18, 0xe2, 0x27, 0xa0, 0xcc, 0x33, 0x2b, 0xe9, 0x30, 0x87, 0xe8, 0xc4, 0xa6, 0x4d, 0x61, 0x38, 0xed, 0xd6, 0xf4, 0x3d, 0xe7, 0x08, 0x39, 0x16, 0x9f, 0x56, 0x2d, 0xe1, 0x8a, 0xf0, 0x90, 0x6d, 0x0d, 0x36, 0x8b, 0x4b, 0x40, 0x73, 0x96, 0x28, 0xf2, 0xc8, 0x99, 0x5a, 0xed, 0x66, 0x51, 0xb8, 0x7a, 0x00, 0xf6, 0xaf, 0x28, 0x81, 0x1b, 0x92, 0xca, 0xfa, 0xd5, 0x32, 0xbf, 0xde, 0x1f, 0xaf, 0x76, 0x71, 0x7d, 0x8d, 0x30, 0x7e, 0xe0, 0x0a, 0x08, 0x48, 0xca, 0xaf, 0x31, 0xc4, 0xb2, 0x26, 0x80, 0x05, 0xaa, 0x4b, 0x2a, 0xf8, 0x3f, 0x85, 0xce, 0x51, 0xa1, 0x57, 0xb6, 0xc5, 0x04, 0x32, 0x5a, 0x7a, 0x45, 0x8e, 0x25, 0xbc, 0xd1, 0x39, 0x7c, 0xf1, 0xc3, 0xee, 0xfd, 0xcf, 0x4c, 0x29, 0x04, 0xcc, 0x58, 0x3a, 0x74, 0xd6, 0x6e, 0x98, 0xb4, 0x45, 0xd8, 0x79, 0xf7, 0x0e, 0x05, 0x9f, 0xc1, 0x39, 0x2b, 0x75, 0xa7, 0x95, 0x30, 0x5a, 0x56, 0xaa, 0xcb, 0x3d, 0xd6, 0xef, 0xe7, 0x6a, 0x10, 0x3d, 0x48, 0xa3, 0x8e, 0x84, 0x70, 0x73, 0x83, 0xbd, 0xc4, 0xbf, 0x0b, 0x1f, 0xeb, 0x9e, 0xb3, 0x96, 0x77, 0x6b, 0x3c, 0x71, 0xc7, 0x18, 0x9c, 0x5a, 0x2b, 0xc4, 0x46, 0x8c, 0x4a, 0x90, 0xab, 0x40, 0xc1, 0xaf, 0x01, 0x68, 0x0d, 0xbd, 0x43, 0xa0, 0xab, 0x52, 0x79, 0x62, 0x7d, 0xd6, 0x39, 0x79, 0x70, 0x97, 0x6e, 0xb8, 0x5c, 0x18, 0x58, 0xeb, 0x2c, 0xad, 0xd4, 0x0e, 0x3e, 0x44, 0xde, 0xbd, 0x0d, 0x86, 0x54, 0xec, 0x0d, 0x1f, 0xfc, 0xd8, 0xd6, 0x59, 0xc9, 0x3d, 0x85, 0xf0, 0x5a, 0xca, 0x5f, 0x22, 0xc4, 0xd2, 0xb8, 0x05, 0x91, 0x44, 0x14, 0x1d, 0x09, 0xdd, 0x8b, 0x2e, 0xb0, 0x9c, 0x72, 0x4f, 0x0f, 0x77, 0x37, 0x40, 0xb7, 0x4c, 0x8d, 0xfd, 0x84, 0x1a, 0xc9, 0x93, 0x1f, 0x71, 0x8c, 0x33, 0xc6, 0x27, 0xa3, 0x85, 0x50, 0x4d, 0x2b, 0x3e, 0x6b, 0x61, 0xf9, 0xf5, 0x29, 0xc5, 0x39, 0x33, 0xbb, 0x70, 0x54, 0xc9, 0x7c, 0xe4, 0x18, 0x66, 0x31, 0x60, 0x13, 0x68, 0x8e, 0x56, 0x3f, 0xf3, 0xfd, 0x1f, 0xe5, 0x40, 0x9c, 0xee, 0xbb, 0x38, 0x84, 0x03, 0x4f, 0x42, 0x51, 0x21, 0xa9, 0x59, 0xdf, 0x41, 0x2c, 0x61, 0x51, 0x88, 0xbe, 0xbb, 0x58, 0x77, 0x29, 0x17, 0xb2, 0x62, 0xc0, 0x89, 0xf0, 0x23, 0x45, 0xe0, 0x7d, 0x0f, 0x0a, 0x33, 0xdc, 0x29, 0x57, 0xbc, 0x31, 0x96, 0x0c, 0xe9, 0x03, 0x51, 0x87, 0xb1, 0x40, 0x20, 0xc8, 0x25, 0x81, 0xc7, 0xd3, 0x47, 0x90, 0x7b, 0x56, 0x1e, 0x28, 0x99, 0x8c, 0x0a, 0xfb, 0x98, 0x61, 0x56, 0xf9, 0x3d, 0xd7, 0x0c, 0xd0, 0x0d, 0xa8, 0x0d, 0xaf, 0x08, 0x2d, 0x60, 0x50, 0x94, 0x7e, 0xcb, 0x35, 0xb8, 0xdb, 0xa0, 0x32, 0x8a, 0x4b, 0xda, 0x2b, 0xeb, 0x82, 0x68, 0x1f, 0x71, 0x08, 0xc9, 0x65, 0xa5, 0x98, 0xd9, 0x36, 0x6f, 0xc7, 0xeb, 0x6c, 0xce, 0xe6, 0x17, 0x89, 0xcc, 0x28, 0xd6, 0xfb, 0xb2, 0x08, 0xcc, 0x9f, 0x78, 0xe5, 0xe4, 0x83, 0x7f, 0xef, 0xa2, 0xf0, 0x83, 0x47, 0xb5, 0xa8, 0xcb, 0x62, 0xcc, 0x6c, 0xa2, 0xaf, 0xab, 0xc1, 0x0b, 0x79, 0x7e, 0xf4, 0xb1, 0x0e, 0x6d, 0x5c, 0x1d, 0x21, 0x70, 0xdf, 0x2b, 0x6d, 0x65, 0xb7, 0xbf, 0x9b, 0x60, 0x76, 0xb4, 0x66, 0x42, 0x48, 0x15, 0xfd, 0x8d, 0x79, 0x90, 0xa8, 0x76, 0x37, 0x27, 0xaf, 0x3c, 0x98, 0x29, 0x78, 0xb9, 0xdf, 0x61, 0xef, 0x37, 0xfb, 0x8d, 0x2a, 0x84, 0x50, 0x12, 0x4e, 0x49, 0xba, 0xed, 0xac, 0x97, 0xcf, 0xed, 0x30, 0xc3, 0x65, 0x1f, 0xfc, 0x74, 0x55, 0x8a, 0x50, 0xfa, 0x7e, 0x1d, 0xad, 0xe1, 0x0c, 0xe6, 0x3a, 0xc6, 0xfa, 0x85, 0x66, 0x6a, 0xd5, 0xdf, 0xcf, 0x05, 0xc3, 0x17, 0x63, 0xdd, 0xc5, 0xba, 0xc4, 0x16, 0x39, 0x39, 0xf1, 0xcc, 0xa3, 0x9d, 0x24, 0x5f, 0xac, 0x76, 0xf6, 0x0e, 0x6b, 0x14, 0xc9, 0xc8, 0xe4, 0xfa, 0x67, 0x3e, 0xce, 0x90, 0xe7, 0x3d, 0x9a, 0x18, 0xd1, 0x3b, 0xb0, 0xe3, 0x82, 0x30, 0xfc, 0xc5, 0xd1, 0xa7, 0xa9, 0xc6, 0xf2, 0x14, 0x2c, 0x1a, 0x9b, 0x68, 0x85, 0x54, 0x66, 0xe3, 0xc1, 0xd6, 0x77, 0x29, 0xc4, 0x8c, 0x5e, 0x99, 0x45, 0xda, 0x3e, 0xda, 0x1a, 0xd2, 0x2f, 0xb6, 0xb6, 0xab, 0xe2, 0x2c, 0xf0, 0x6e, 0x84, 0xc0, 0x06, 0xf3, 0xe4, 0x16, 0xe1, 0x0c, 0xd7, 0xbf, 0x9a, 0x00, 0xdc, 0x53, 0x3e, 0x3b, 0xfc, 0xc0, 0xce, 0x43, 0xf4, 0xe1, 0x8a, 0xee, 0x96, 0x53, 0x6f, 0xd3, 0x6d, 0x84, 0xff, 0xfe, 0xa0, 0x0c, 0x40, 0xe8, 0x18, 0x41, 0x07, 0xa6, 0xe5, 0x05, 0x76, 0x60, 0xde, 0xe3, 0xc4, 0x05, 0x88, 0x5b, 0x3c, 0x3d, 0x3a, 0x79, 0x89, 0x9f, 0x7e, 0xad, 0x30, 0x25, 0xb9, 0xd6, 0x5e, 0xdc, 0x0f, 0xa0, 0xe4, 0xe0, 0x81, 0x10, 0x80, 0x88, 0x58, 0x5d, 0x5e, 0xde, 0xc7, 0x02, 0xde, 0x52, 0xcc, 0x11, 0x98, 0xaf, 0x57, 0xca, 0x9e, 0x4d, 0xae, 0x6c, 0x00, 0x89, 0x10, 0x4b, 0x96, 0x72, 0x98, 0x23, 0xf9, 0xc5, 0x65, 0xac, 0xd3, 0x1c, 0xf8, 0x6e, 0x59, 0x62, 0xdd, 0xd7, 0x15, 0x8a, 0x8e, 0x8b, 0xe9, 0x80, 0x94, 0xfb, 0x51, 0x60, 0xef, 0x39, 0xe8, 0xe7, 0xb8, 0x0b, 0x2e, 0x27, 0x05, 0x3e, 0x88, 0x7e, 0x0d, 0x3c, 0x88, 0xc8, 0x8d, 0xe1, 0x6f, 0xd4, 0x6a, 0x8b, 0xf0, 0x15, 0x97, 0x70, 0x37, 0x9a, 0x39, 0x35, 0x2a, 0x40, 0x09, 0xbc, 0xef, 0x27, 0xfa, 0x3d, 0xae, 0x62, 0x1d, 0x98, 0x98, 0xf3, 0xc1, 0xe9, 0x28, 0xf6, 0xde, 0x5d, 0xa8, 0x1c, 0xb4, 0x45, 0xf8, 0x5b, 0xaf, 0x69, 0x8b, 0xe4, 0x8e, 0x9f, 0xb2, 0x56, 0xc4, 0x9c, 0x1d, 0x31, 0x1e, 0x09, 0x9e, 0x8d, 0xa7, 0xda, 0x31, 0x0c, 0xc9, 0xdb, 0x3a, 0x0d, 0xb4, 0x8b, 0x0d, 0x22, 0x04, 0x2e, 0xb3, 0xc5, 0x9d, 0x1e, 0xec, 0x46, 0xda, 0x62, 0x70, 0x08, 0xe8, 0x81, 0x7a, 0xed, 0x6c, 0x98, 0x87, 0x0f, 0x6c, 0xab, 0x5b, 0xb1, 0x6c, 0x39, 0x46, 0x75, 0xd7, 0x13, 0xa5, 0xcf, 0xa1, 0x6e, 0xab, 0xb9, 0x2b, 0x36, 0x62, 0xa8, 0x67, 0xa5, 0xec, 0xbf, 0x3c, 0x15, 0x0f, 0x43, 0x2c, 0x12, 0xf1, 0x50, 0x34, 0xb4, 0x1f, 0xca, 0xf3, 0x2b, 0xd4, 0x95, 0x0f, 0x9c, 0x79, 0x09 ],
-const [ 0xb8, 0x5e, 0x29, 0x87, 0x5f, 0x6e, 0x2a, 0x2a, 0xc2, 0xa2, 0xb8, 0x47, 0x53, 0x76, 0xea, 0xec, 0xfa, 0xff, 0x0f, 0x76, 0xad, 0x2f, 0xe6, 0xfa, 0x41, 0x55, 0x12, 0xe4, 0x80, 0xe3, 0xc8, 0xde, 0x7b, 0x74, 0xcb, 0xf4, 0x22, 0x0d, 0x9a, 0xf5, 0x11, 0xa3, 0xe7, 0x1c, 0xad, 0xde, 0x4c, 0xef, 0x70, 0x1d, 0x3a, 0x68, 0x81, 0xba, 0x32, 0x53, 0x88, 0x8f, 0x37, 0xf7, 0xc0, 0xb9, 0x83, 0xf8, 0x4e, 0x9b, 0x79, 0x7c, 0xd1, 0x26, 0xdb, 0x8d, 0x3a, 0x58, 0x3d, 0xbf, 0xde, 0x03, 0xb9, 0x12, 0xc9, 0xd0, 0xe5, 0x19, 0x55, 0x83, 0x02, 0x5c, 0xfc, 0x81, 0x76, 0xfc, 0x6b, 0x8f, 0x7d, 0x95, 0xd7, 0xdc, 0x1b, 0x68, 0x94, 0x42, 0x55, 0xba, 0xe4, 0xc9, 0xa0, 0x77, 0x0d, 0x6d, 0x9a, 0x1b, 0xae, 0x21, 0xf8, 0xd2, 0x52, 0x13, 0xbf, 0xde, 0x46, 0x32, 0xb8, 0x3a, 0xa8, 0xee, 0x1d, 0x7d, 0xc1, 0x3e, 0x99, 0x00, 0x95, 0xe8, 0x70, 0x43, 0xb7, 0xfd, 0xf9, 0x8d, 0x62, 0xa2, 0x55, 0xd3, 0xc6, 0x16, 0x5b, 0xdb, 0xa0, 0xf1, 0xd2, 0xa2, 0x0d, 0xaa, 0xe3, 0xfa, 0xa0, 0x5c, 0xcd, 0x77, 0xb2, 0xca, 0xdb, 0x8c, 0xf9, 0xa0, 0x94, 0xf2, 0x5d, 0xfc, 0x31, 0x49, 0x06, 0x2c, 0x54, 0x02, 0xba, 0xba, 0xf6, 0x7c, 0x66, 0xa5, 0xa1, 0x6d, 0xfa, 0xf2, 0xe0, 0x84, 0x7a, 0x63, 0xf5, 0x4d, 0x52, 0x87, 0xc9, 0x54, 0xeb, 0xf3, 0x29, 0x8d, 0x7b, 0xce, 0x2e, 0xf3, 0x21, 0x93, 0xfd, 0x70, 0x31, 0x12, 0xb1, 0xfd, 0xcd, 0xb8, 0x96, 0x0a, 0xb5, 0x11, 0x98, 0x20, 0x5f, 0x8b, 0xfb, 0xc5, 0x4b, 0x7d, 0x4c, 0xa0, 0x91, 0x67, 0x97, 0xdd, 0xbc, 0x7c, 0xda, 0xd3, 0xda, 0x5d, 0xba, 0xe4, 0xd4, 0x28, 0x75, 0xa5, 0xfc, 0xb1, 0x18, 0x3f, 0xe5, 0x0f, 0xf2, 0x16, 0x77, 0x5b, 0x48, 0xa8, 0x42, 0xb4, 0x4a, 0xb7, 0x13, 0x86, 0x46, 0xaa, 0xc5, 0x0c, 0x1c, 0x31, 0x5a, 0x14, 0xf2, 0x28, 0x4b, 0x03, 0x28, 0xbe, 0x1b, 0x18, 0x8e, 0xd6, 0x32, 0xf5, 0xd5, 0xad, 0xe9, 0x5b, 0x44, 0xbd, 0xe2, 0x35, 0xac, 0xe2, 0x9a, 0xd8, 0x9e, 0xbc, 0x41, 0x89, 0xdb, 0x54, 0xc9, 0x3f, 0x0c, 0x02, 0x3d, 0xab, 0xb4, 0x8e, 0x54, 0x76, 0x62, 0x95, 0x46, 0xca, 0x2b, 0x2e, 0xde, 0x13, 0x57, 0xce, 0xd0, 0x07, 0x5b, 0x69, 0x4e, 0xe4, 0x08, 0xda, 0xd6, 0xf8, 0x01, 0x85, 0x4e, 0x67, 0x72, 0x3b, 0x52, 0x29, 0xff, 0x5e, 0xcd, 0x52, 0xfb, 0x45, 0xc6, 0x96, 0xdb, 0xe1, 0x7d, 0x0c, 0xea, 0xa1, 0xb7, 0x32, 0x3e, 0x94, 0x56, 0x32, 0xea, 0xce, 0x2c, 0x63, 0x75, 0x0c, 0x11, 0x13, 0x8b, 0x9b, 0x33, 0x84, 0xf3, 0x75, 0xae, 0x34, 0xc1, 0xae, 0x5d, 0x61, 0xcd, 0x0e, 0xef, 0xcd, 0x63, 0x00, 0x3d, 0xbf, 0x3c, 0xaa, 0xda, 0x4a, 0xad, 0x5e, 0xec, 0xd1, 0x1f, 0x31, 0x3b, 0xcb, 0xbf, 0xe9, 0x88, 0xc4, 0x77, 0x1d, 0x20, 0xa4, 0x1c, 0x97, 0xb1, 0x34, 0xe9, 0xfd, 0x5b, 0xde, 0x2c, 0xb1, 0x0a, 0xb5, 0x3f, 0xf5, 0x04, 0xb5, 0xba, 0x53, 0xbe, 0x4b, 0xe7, 0x3c, 0xf4, 0x18, 0x76, 0xef, 0xf8, 0xf2, 0x72, 0x9c, 0x4b, 0x2b, 0x74, 0xc9, 0x6a, 0x16, 0x17, 0xf6, 0xea, 0xc8, 0xab, 0x7c, 0xc7, 0x1c, 0x2e, 0xbb, 0xfa, 0xfa, 0x78, 0x74, 0x49, 0xd8, 0xb5, 0x74, 0x63, 0x80, 0x18, 0x73, 0x2c, 0x14, 0xce, 0x3b, 0x56, 0x50, 0x31, 0x0d, 0x31, 0x10, 0x3f, 0x40, 0xc4, 0x12, 0x4a, 0x2b, 0x1c, 0xfc, 0xf0, 0x45, 0xe4, 0xa1, 0x4e, 0x8b, 0x36, 0x80, 0x71, 0x22, 0xb1, 0x8d, 0x0d, 0x3e, 0xcc, 0x35, 0x72, 0x42, 0x69, 0x9c, 0xbb, 0x29, 0xae, 0x29, 0x49, 0x24, 0x10, 0x44, 0x70, 0x84, 0xb0, 0x5e, 0x6f, 0xdb, 0xeb, 0x32, 0xa6, 0x5e, 0x2c, 0x4b, 0x03, 0x8e, 0x05, 0xc7, 0xbe, 0x18, 0x7f, 0x5a, 0x46, 0xf9, 0xae, 0x96, 0x7b, 0xe5, 0x88, 0x69, 0x1d, 0xea, 0xf7, 0xe7, 0x84, 0x51, 0x2c, 0x49, 0x92, 0xc5, 0x37, 0x36, 0xe7, 0xb7, 0xd4, 0x42, 0x53, 0x00, 0x88, 0xb5, 0x91, 0xc8, 0xed, 0x8d, 0x32, 0xa7, 0x4a, 0xc6, 0xd7, 0x0b, 0x67, 0xd8, 0xa3, 0xda, 0xa0, 0x82, 0xf0, 0x58, 0x37, 0xc6, 0x41, 0x4a, 0xef, 0x35, 0x78, 0x5c, 0xd6, 0x6c, 0x4a, 0xc0, 0x62, 0xdf, 0xef, 0x18, 0xbf, 0xd5, 0x1e, 0x96, 0x68, 0xb4, 0x38, 0x61, 0xf5, 0x7f, 0xc4, 0x3b, 0x33, 0x9d, 0x1b, 0x62, 0x7a, 0xdc, 0x64, 0xb3, 0x3b, 0xb5, 0xc3, 0x15, 0xd9, 0xd2, 0xce, 0x15, 0xba, 0xcd, 0x41, 0xce, 0x9d, 0x3b, 0xf2, 0x0c, 0x2e, 0xe9, 0x07, 0xb1, 0xd7, 0x65, 0x66, 0x57, 0xda, 0xc0, 0x6d, 0x36, 0x9d, 0x93, 0xe4, 0x48, 0x44, 0x40, 0x2f, 0xac, 0x85, 0x7a, 0xc8, 0x49, 0xb8, 0x08, 0xed, 0xb3, 0x2e, 0xc5, 0x96, 0x52, 0xc4, 0xec, 0xaa, 0xc1, 0xb8, 0x92, 0x72, 0x74, 0xbb, 0x74, 0x4e, 0x9e, 0x47, 0xf3, 0xa7, 0x51, 0x32, 0x5d, 0x24, 0xe7, 0x84, 0x6e, 0x21, 0xa2, 0x86, 0x17, 0x5d, 0x8f, 0x1b, 0x7d, 0xf2, 0xb0, 0x53, 0x45, 0x8b, 0x59, 0x3e, 0x0f, 0xd1, 0xdb, 0xfe, 0x40, 0x26, 0x60, 0x20, 0x05, 0x96, 0x16, 0x2d, 0x95, 0x0a, 0x90, 0x7b, 0xb6, 0xbf, 0x69, 0x49, 0x82, 0xf7, 0x2a, 0x0b, 0x6b, 0xef, 0x6d, 0x03, 0x7d, 0x10, 0x43, 0x11, 0xe3, 0x69, 0xd4, 0xcc, 0xad, 0x5d, 0x45, 0xd1, 0xd0, 0x99, 0xdf, 0x5c, 0x6e, 0x4a, 0x6d, 0x15, 0x58, 0x8c, 0xe5, 0x2c, 0xd2, 0x25, 0x4b, 0xa7, 0x96, 0x73, 0xd3, 0xfb, 0x1b, 0xa3, 0x46, 0xda, 0x16, 0x24, 0xa6, 0x4d, 0x42, 0x5b, 0x15, 0x02, 0x5c, 0x99, 0xf3, 0xe7, 0x72, 0x4a, 0x47, 0xf8, 0x5e, 0x6f, 0x60, 0x54, 0x8e, 0x4e, 0xbc, 0x97, 0x06, 0x67, 0x28, 0x64, 0xa7, 0xab, 0x29, 0x41, 0xb1, 0xe9, 0x9b, 0xa8, 0x87, 0x89, 0x98, 0x5a, 0xb2, 0x7c, 0x9b, 0xf7, 0x29, 0x73, 0xe5, 0xcc, 0xcf, 0x4f, 0x20, 0xec, 0x3e, 0xd9, 0x43, 0x82, 0xc3, 0xb4, 0xb5, 0x65, 0xa9, 0x90, 0xb5, 0xed, 0xbb, 0x9f, 0xf9, 0x06, 0x04, 0x4d, 0x95, 0x82, 0xd9, 0x2c, 0x1f, 0xb4, 0x1a, 0x2d, 0x11, 0x3a, 0xb4, 0x16, 0x6e, 0x1a, 0x6a, 0x30, 0xa9, 0x11, 0xd6, 0x40, 0xc2, 0x27, 0xaa, 0xb9, 0xb2, 0x87, 0x3c, 0x30, 0x09, 0x8e, 0x42, 0x10, 0xd6, 0x22, 0xd9, 0x8f, 0xc7, 0x45, 0xcd, 0xe1, 0x91, 0xe9, 0x14, 0xab, 0x92, 0x06, 0x9b, 0xba, 0xb5, 0xeb, 0x46, 0xf5, 0x97, 0xd2, 0x32, 0x90, 0xe8, 0xb6, 0x3d, 0x83, 0x13, 0x69, 0xc8, 0x3b, 0x21, 0xe1, 0xbb, 0x8f, 0xda, 0xd2, 0xca, 0xf5, 0x2e, 0x83, 0xf7, 0xf6, 0xd4, 0xda, 0x58, 0xdf, 0x31, 0xb8, 0x1b, 0xba, 0x7b, 0x8d, 0xc7, 0x7c, 0x1e, 0x23, 0xc4, 0x80, 0x5f, 0xbe, 0x1e, 0x34, 0x3f, 0x67, 0x86, 0x13, 0xa2, 0x85, 0x9a, 0xd3, 0xb0, 0xad, 0x66, 0xdf, 0x7c, 0xbb, 0x2a, 0x07, 0xe3, 0x22, 0x5d, 0x76, 0xb8, 0x80, 0xf3, 0xe5, 0x1e, 0x76, 0xdc, 0x0f, 0x34, 0xb6, 0xcd, 0x65, 0xf8, 0x5d, 0x42, 0x02, 0x65, 0x84, 0xc4, 0xe1, 0xdf, 0x11, 0x67, 0x4e, 0xd1, 0xd3, 0x98, 0x9a, 0x95, 0xcf, 0x15, 0x13, 0x94, 0xd4, 0x3d, 0x33, 0xae, 0x56, 0x8a, 0x18, 0xdc, 0x79, 0x5c, 0x34, 0x13, 0x6b, 0xf8, 0x46, 0x6c, 0xf7, 0xd0, 0x89, 0x83, 0x57, 0x05, 0x2b, 0x1c, 0x4a, 0x2a, 0x00, 0x0d, 0x67, 0x4b, 0x78, 0x58, 0xb1, 0x2d, 0xcf, 0x97, 0x6b, 0xd8, 0x83, 0x9d, 0x2e, 0x53, 0x0b, 0x5a, 0x38, 0xaf, 0xc6, 0xff, 0x07, 0x46, 0x32, 0x63, 0x27, 0x45, 0x5e, 0xa5, 0x48, 0x68, 0xa2, 0x14, 0x93, 0x05, 0x8d, 0x4b, 0x3e, 0x4c, 0x1f, 0xa0, 0x5e, 0xcd, 0x38, 0xc0, 0xfd, 0x3b, 0x51, 0x93, 0x6d, 0x6f, 0x6a, 0x66, 0xdb, 0xaf, 0x43, 0x48, 0x27, 0x31, 0xcf, 0xb4, 0xf4, 0xdb, 0xe6, 0x71, 0xfb, 0x4d, 0x3a, 0xb7, 0xa4, 0x21, 0x8c, 0x93, 0xd7, 0x71, 0x20, 0x8c, 0x0f, 0x9a, 0x6e, 0x87, 0xb1, 0x40, 0x1a, 0xe8, 0x9d, 0x93, 0x26, 0xfa, 0x02, 0xd0, 0x67, 0x91, 0x76, 0x0a, 0x35, 0xee, 0x46, 0x2a, 0x67, 0xe2, 0x0a, 0x35, 0x7f, 0x37, 0x7d, 0xcd, 0x21, 0x4b, 0x8c, 0xfb, 0xca, 0xfe, 0xad, 0x2b, 0xbe, 0xce, 0x72, 0x78, 0x42, 0x41, 0x5e, 0x2a, 0x0c, 0x84, 0xf7, 0x7d, 0xf8, 0x51, 0x1c, 0xa5, 0xfc, 0x15, 0x99, 0x0e, 0x5e, 0x53, 0xf9, 0xe8, 0x24, 0x43, 0x9c, 0xe3, 0xcd, 0xc0, 0x09, 0x37, 0x3e, 0x61, 0x84, 0xe8, 0xff, 0xe5, 0xe4, 0x48, 0xa7, 0xd4, 0x9f, 0xbd, 0x95, 0x63, 0x27, 0xc4, 0xe1, 0x98, 0x79, 0x36, 0x92, 0xb0, 0xf2, 0xcb, 0x12, 0xbe, 0x65, 0xdc, 0xdf, 0x94, 0x6c, 0x6d, 0x82, 0xe6, 0xfb, 0x6a, 0xc5, 0xad, 0x3b, 0x31, 0x21, 0xca, 0x95, 0x51, 0x76, 0xec, 0x0c, 0x91, 0xff, 0xb3, 0xd1, 0x35, 0x84, 0x16, 0x11, 0x7c, 0xd1, 0x02, 0x12, 0x6d, 0x68, 0x43, 0x7e, 0xd3, 0x73, 0xa8, 0xff, 0x87, 0xfc, 0x62, 0x0b, 0xed, 0x60, 0xae, 0x02, 0xc1, 0x01, 0xb4, 0x76, 0x14, 0x3c, 0xae, 0xc9, 0x91, 0x9b, 0x4c, 0xfe, 0x05, 0x4b, 0x57, 0xc9, 0x1f, 0xd0, 0x96, 0xe8, 0x74, 0xf7, 0xee, 0xb6, 0xc5, 0x0c, 0xcc, 0xfe, 0x85, 0x4e, 0xc8, 0x0d, 0x96, 0xa0, 0x82, 0x0b, 0x54, 0x81, 0xd0, 0x8b, 0xd4, 0x3e, 0x1c, 0x60, 0x6d, 0x66, 0x07, 0xb2, 0x78, 0x7f, 0x52, 0x52, 0x55, 0xf7, 0xff, 0x4b, 0xaf, 0x5e, 0xb3, 0xba, 0x00, 0xd2, 0x5f, 0xdf, 0x57, 0xba, 0x1f, 0x73, 0x59, 0xb7, 0x63, 0x3c, 0x85, 0xd7, 0x4c, 0xe0, 0xbd, 0x0c, 0x59, 0xf7, 0x02, 0xdd, 0x42, 0x63, 0x80, 0x5c, 0x24, 0xe4, 0xca, 0x58, 0xdf, 0xe7, 0x66, 0xd3, 0xbc, 0x9f, 0x8c, 0xb6, 0x54, 0x57, 0x2b, 0xc4, 0xad, 0x07, 0x2d, 0xcd, 0xa5, 0x25, 0xfc, 0x24, 0x94, 0xbd, 0x45, 0x53, 0x2d, 0xc4, 0xfc, 0x0c, 0xa5, 0xaa, 0xa0, 0x63, 0x18, 0x2e, 0xc0, 0x3b, 0x28, 0x76, 0xbe, 0xfe, 0xe7, 0x5f, 0xd3, 0x92, 0xf7, 0x12, 0x53, 0x88, 0xef, 0xd8, 0x32, 0x96, 0x01, 0x2f, 0xc8, 0x47, 0xda, 0x1d, 0xd1, 0xf1, 0xca, 0xc4, 0xb8, 0xe8, 0x25, 0x37, 0x15, 0xf1, 0xe9, 0x8c, 0x74, 0xf9, 0xa0, 0x32, 0x58, 0x07, 0x88, 0x85, 0x7f, 0x70, 0xf2, 0xa0, 0x68, 0x4a, 0xe8, 0x72, 0x13, 0x22, 0x12, 0x15, 0x08, 0xf2, 0xdb, 0x5a, 0x9a, 0x4d, 0xcf, 0xa9, 0x6d, 0xdd, 0x47, 0x08, 0x36, 0x0f, 0x49, 0x79, 0xc2, 0x0d, 0xaa, 0x89, 0x3a, 0xed, 0x75, 0x26, 0xa5, 0x27, 0x91, 0xb1, 0xae, 0x4d, 0x9d, 0x54, 0xa7, 0xf6, 0x1f, 0x96, 0xcf, 0xfc, 0xde, 0x2c, 0xd0, 0xe7, 0x8c, 0x12, 0x8c, 0xa8, 0xa8, 0xdb, 0x19, 0x8b, 0xa3, 0x46, 0x0a, 0x67, 0x42, 0x11, 0xf1, 0x17, 0x43, 0x12, 0x22, 0x2e, 0x43, 0x83, 0xb9, 0xe7, 0xdf, 0x9e, 0xde, 0x5b, 0x1a, 0x6a, 0x47, 0xf7, 0xfe, 0xd4, 0xff, 0x2c, 0x87, 0x01, 0x66, 0x68, 0xbc, 0xe3, 0x7a, 0x46, 0x1f, 0x0a, 0x54, 0x02, 0x47, 0xbd, 0xf5, 0x2f, 0xcc, 0x4a, 0x43, 0xac, 0x63, 0x9a, 0x4f, 0xd4, 0x4a, 0x08, 0xd9, 0xf5, 0xe7, 0x73, 0x16, 0x03, 0xac, 0x92, 0xb1, 0x8e, 0x3d, 0x88, 0x0f, 0xf2, 0xd5, 0xb9, 0xd7, 0xce, 0xe6, 0xdb, 0xb2, 0xb7, 0xff, 0x50, 0x4f, 0x2d, 0xf3, 0xb3, 0xab, 0xcd, 0x38, 0xb1, 0x8f, 0xc9, 0x8d, 0x1a, 0x5a, 0x96, 0xdf, 0x37, 0x00, 0xe4, 0x6e, 0x5f, 0x53, 0xd3, 0x2c, 0xc5, 0x81, 0x64, 0x65, 0x94, 0xde, 0x2d, 0xa5, 0x3e, 0xe4, 0x52, 0xd7, 0x10, 0x78, 0xb0, 0xaa, 0x0b, 0x6f, 0x5b, 0x39, 0xef, 0x51, 0x4b, 0xea, 0x98, 0x5d, 0x52, 0x96, 0x8d, 0xcd, 0x51, 0xeb, 0xd7, 0x5b, 0xac, 0x0f, 0x0f, 0x03, 0xfb, 0x86, 0xbb, 0x0b, 0x03, 0x56, 0xdb, 0x41, 0xe4, 0x69, 0xbe, 0x84, 0x93, 0x32, 0x1a, 0x85, 0x8b, 0x94, 0x5c, 0xcf, 0xc0, 0xff, 0x3d, 0x05, 0xd5, 0xdc, 0x96, 0x6b, 0x8e, 0x2b, 0x75, 0xa8, 0x88, 0x6a, 0x70, 0xcb, 0x28, 0xb9, 0x39, 0x8b, 0xd1, 0x3d, 0x73, 0xd3, 0x5a, 0xc2, 0xc4, 0x7e, 0xbf, 0xa4, 0x2c, 0x5f, 0x16, 0xef, 0x95, 0x84, 0xc5, 0xc5, 0xab, 0xbb, 0xf3, 0x00, 0xed, 0x56, 0x3c, 0x19, 0x04, 0x2c, 0xa9, 0x49, 0x54, 0xe0, 0xdf, 0xed, 0xd2, 0x66, 0x96, 0x2f, 0x15, 0xc2, 0x4d, 0xe3, 0xaf, 0x13, 0x3c, 0xaf, 0xbd, 0xd1, 0x8b, 0x6f, 0xbd, 0x53, 0xc1, 0xd7, 0xa0, 0x94, 0x7f, 0x5a, 0x20, 0x36, 0x6e, 0x4b, 0x54, 0xc7, 0x76, 0x43, 0x82, 0x44, 0x31, 0xc2, 0x34, 0xdb, 0x9f, 0x19, 0x8e, 0xf5, 0x1b, 0x87, 0xde, 0x74, 0x8d, 0xa2, 0x75, 0x39, 0xe2, 0xf8, 0xb6, 0xea, 0xb9, 0xf7, 0x6c, 0xf2, 0x5f, 0x0a, 0x61, 0xc9, 0xfe, 0x05, 0x2c, 0x75, 0x11, 0xc3, 0x4a, 0x51, 0x1b, 0x0d, 0x70, 0x0d, 0x99, 0xbe, 0x20, 0xf6, 0x35, 0x25, 0x7b, 0x77, 0x3c, 0xab, 0x56, 0xe0, 0x52, 0xb6, 0x8f, 0x67, 0x65, 0xcd, 0xa1, 0x6d, 0xdf, 0xfc, 0x77, 0x02, 0x20, 0x7a, 0x7e, 0xaa, 0x2b, 0x89, 0xfe, 0x61, 0x9f, 0x9e, 0xaa, 0xde, 0xea, 0xc2, 0x76, 0x15, 0xb9, 0x38, 0xa8, 0xff, 0xb2, 0x60, 0x32, 0x9d, 0x66, 0xdb, 0x3f, 0x3b, 0x81, 0xf0, 0x0c, 0xf2, 0x44, 0x2e, 0xf9, 0x70, 0x36, 0x53, 0xe0, 0xfc, 0x16, 0x6d, 0xa5, 0xb4, 0x13, 0x3f, 0x0e, 0x19, 0x40, 0xe6, 0xd5, 0xce, 0x42, 0xbd, 0xfc, 0x9d, 0x4b, 0x7d, 0x61, 0xbb, 0x4d, 0xa9, 0x92, 0x4d, 0x67, 0x29, 0xe2, 0x2a, 0xa4, 0x34, 0xbd, 0xe3, 0xe4, 0x74, 0x38, 0x01, 0x1a, 0x65, 0xec, 0x8d, 0xb8, 0xff, 0x05, 0xd6, 0x68, 0x94, 0x96, 0x6e, 0xfd, 0xfb, 0x30, 0x76, 0xa9, 0xee, 0xb2, 0x1b, 0x70, 0xb1, 0x62, 0x61, 0xdc, 0xf4, 0x3d, 0x20, 0xf3, 0xfb, 0x8c, 0x4b, 0x66, 0xfc, 0xb8, 0x78, 0x0b, 0xc9, 0x5f, 0x9d, 0x8d, 0xae, 0xa7, 0x18, 0x63, 0x9d, 0xd3, 0xf3, 0xfe, 0x88, 0x14, 0x65, 0x47, 0x0f, 0xa1, 0x9c, 0x48, 0x5b, 0x09, 0xb9, 0x29, 0x4a, 0xc8, 0x1d, 0x5f, 0xcc, 0x19, 0xe3, 0x20, 0x8d, 0x0c, 0xad, 0x1a, 0xd4, 0xd8, 0xa4, 0x64, 0xab, 0x72, 0xba, 0xb5, 0x40, 0x5f, 0x33, 0xd4, 0x8b, 0xc6, 0x63, 0x4f, 0x31, 0xc9, 0xb9, 0x70, 0xa8, 0x15, 0xfc, 0x6d, 0x9c, 0xb8, 0xd5, 0xdf, 0x92, 0x34, 0x8e, 0x75, 0xcc, 0xd1, 0x19, 0xea, 0x6c, 0x37, 0x54, 0x34, 0xdc, 0x3b, 0x8b, 0xff, 0x6c, 0xfa, 0x3e, 0x59, 0x3d, 0x24, 0x25, 0xaf, 0x5f, 0x9b, 0x72, 0xf8, 0x36, 0x3d, 0x56, 0x30, 0x22, 0xfd, 0xc6, 0x08, 0x5e, 0x39, 0x7f, 0xdc, 0x29, 0x48, 0x48, 0xe5, 0x24, 0x52, 0x77, 0xb0, 0xfc, 0x64, 0xb6, 0xce, 0x48, 0xc3, 0x07, 0xce, 0xb5, 0x81, 0x06, 0x68, 0x60, 0x4f, 0x6e, 0xfb, 0x83, 0x92, 0xdf, 0x3a, 0x54, 0xb9, 0xdf, 0x21, 0x2a, 0xcd, 0x1e, 0x2f, 0xe2, 0x49, 0xfe, 0xcf, 0x81, 0x2d, 0x52, 0x17, 0x1a, 0x4e, 0x66, 0xb4, 0xf3, 0xf0, 0x41, 0x25, 0xe3, 0x96, 0x26, 0x28, 0xfe, 0x19, 0x61, 0x72, 0x75, 0xf8, 0x40, 0xa3, 0xb7, 0xef, 0x5f, 0x79, 0xdc, 0xcb, 0x28, 0x44, 0x44, 0x7c, 0x9b, 0x9a, 0x7b, 0x6c, 0x4b, 0x4b, 0x60, 0x0f, 0xa9, 0x97, 0x87, 0xbc, 0x85, 0x9f, 0xdb, 0xbb, 0xd2, 0x1a, 0x88, 0x9f, 0xaa, 0x49, 0x18, 0xd5, 0x92, 0x2d, 0xdb, 0x7e, 0xfe, 0xf7, 0x8d, 0x7a, 0x18, 0xc0, 0x33, 0xc5, 0xbd, 0x7a, 0x46, 0x07, 0xc8, 0x27, 0x13, 0x66, 0x94, 0x49, 0x62, 0x9f, 0xbc, 0x99, 0x56, 0x55, 0x25, 0xfb, 0x94, 0xa9, 0x3f, 0xb2, 0xa7, 0x0a, 0x87, 0xd0, 0xa4, 0x4e, 0x51, 0xf1, 0x09, 0x02, 0xc4, 0x29, 0xeb, 0xff, 0x26, 0x3b, 0x51, 0x3e, 0x5a, 0x0c, 0xdb, 0xee, 0xa6, 0x57, 0xa7, 0xc3, 0xba, 0xa1, 0x74, 0x90, 0xee, 0x70, 0x08, 0x18, 0xcc, 0xb8, 0xd0, 0x22, 0xce, 0x96, 0xc7, 0xcb, 0x68, 0x40, 0x98, 0x20, 0x49, 0x3d, 0x07, 0xec, 0xdf, 0xd1, 0x8d, 0xcf, 0x19, 0xbc, 0x42, 0x90, 0x70, 0x24, 0x01, 0xb4, 0x28, 0xcf, 0xc6, 0x50, 0xd3, 0x95, 0x5a, 0x1b, 0x18, 0x15, 0x33, 0xc7, 0xb2, 0xa8, 0x95, 0x92, 0xbb, 0x93, 0xfe, 0x18, 0x2b, 0x81, 0xc1, 0x6b, 0x9c, 0x30, 0xf1, 0x65, 0x50, 0x6a, 0x80, 0x3d, 0x74, 0x37, 0xa8, 0x59, 0xa6, 0x51, 0x8a, 0x63, 0xb6, 0xd8, 0x16, 0x9f, 0xa9, 0x47, 0x2a, 0x7c, 0x04, 0xa7, 0xfe, 0x69, 0x47, 0x02, 0xbf, 0xe9, 0xb7, 0x1b, 0x7a, 0xea, 0x60, 0x5c, 0x3c, 0x53, 0x5b, 0x10, 0x78, 0xdc, 0x4d, 0xd2, 0xa8, 0x22, 0x30, 0x45, 0x37, 0xfb, 0x56, 0x06, 0x9f, 0x06, 0xaa, 0xdf, 0xcf, 0x87, 0x3a, 0x3e, 0xcf, 0x72, 0xf2, 0xe5, 0xa6, 0xc6, 0xaa, 0xe2, 0x7c, 0x1c, 0x64, 0xc2, 0xfc, 0x80, 0xce, 0x02, 0xfc, 0x7f, 0x0f, 0xc6, 0x60, 0x81, 0xbf, 0xcd, 0x3b, 0x5a, 0x37, 0xa5, 0x38, 0x1b, 0x0c, 0x1b, 0x39, 0x2e, 0xd6, 0xf6, 0x3d, 0xa2, 0x36, 0xe5, 0x87, 0xc3, 0x17, 0xb5, 0xfd, 0xee, 0x33, 0xc7, 0xce, 0xa3, 0xd9, 0xc2, 0x57, 0xdc, 0xee, 0x85, 0x48, 0x9d, 0x33, 0x60, 0x02, 0xcd, 0xc5, 0x83, 0x44, 0x44, 0xea, 0xb6, 0x07, 0x25, 0x0a, 0x4b, 0xa6, 0x6e, 0xfc, 0x51, 0x42, 0xcd, 0x84, 0x0b, 0x65, 0xb6, 0x19, 0xa1, 0xe5, 0xb2, 0xeb, 0x14, 0x0c, 0xfa, 0x24, 0x77, 0xf5, 0x44, 0x6e, 0x5d, 0x39, 0xdd, 0xb6, 0x8e, 0xcc, 0xf8, 0x30, 0xfe, 0x21, 0x46, 0x9c, 0xff, 0x95, 0xc6, 0xc7, 0xb5, 0x0a, 0xdf, 0x54, 0xca, 0xd2, 0xac, 0xbc, 0x64, 0xd0, 0x97, 0x94, 0x54, 0xd9, 0x29, 0x0f, 0x91, 0x60, 0x20, 0xc3, 0xe4, 0x53, 0xc2, 0xb0, 0xe4, 0x40, 0x72, 0x7e, 0x25, 0xbc, 0x81, 0x06, 0xad, 0x05, 0x46, 0x14, 0xa7, 0xe6, 0x71, 0x6b, 0x5c, 0xdb, 0x9c, 0x0a, 0x5e, 0x76, 0x23, 0xae, 0x06, 0x01, 0x36, 0x98, 0x21, 0x65, 0x2c, 0x90, 0xe7, 0x4b, 0x1a, 0x2a, 0x2d, 0x80, 0xa5, 0x48, 0xdb, 0x9e, 0x14, 0xe0, 0x9f, 0xe9, 0xaa, 0x00, 0xe3, 0x77, 0x32, 0x0f, 0xfd, 0x94, 0xdb, 0x55, 0xa6, 0x64, 0x46, 0xbe, 0xae, 0xca, 0xde, 0xda, 0xee, 0x89, 0x68, 0x29, 0x7d, 0xa9, 0xda, 0x96, 0x27, 0x1d, 0x71, 0x41, 0x1a, 0xa2, 0xfe, 0x81, 0xe3, 0xea, 0x81, 0x2a, 0x99, 0xfa, 0xf8, 0x0b, 0x58, 0xd1, 0x79, 0xbb, 0xf1, 0x4a, 0x7f, 0x96, 0xe0, 0x43, 0x82, 0x02, 0x7f, 0xff, 0xca, 0xf7, 0x79, 0xc9, 0x84, 0xbe, 0x80, 0xda, 0x16, 0xf8, 0x43, 0x7d, 0xb0, 0xe3, 0x9a, 0x71, 0x23, 0xd9, 0x04, 0x8f, 0xf7, 0x19, 0x54, 0xac, 0xb7, 0xca, 0xa7, 0xc1, 0x90, 0x3d, 0x99, 0x4a, 0x1b, 0x73, 0xb9, 0xeb, 0x76, 0xdf, 0x3a, 0x59, 0x99, 0x6c, 0xeb, 0x78, 0xe7, 0xc2, 0x69, 0xc1, 0x04, 0xc5, 0x92, 0xe7, 0xe7, 0x5f, 0x3e, 0xba, 0x30, 0x80, 0x2a, 0x4b, 0xbb, 0x63, 0x35, 0x51, 0x75, 0x12, 0xcf, 0xcb, 0x6e, 0x2c, 0xae, 0xe7, 0x30, 0xe6, 0xc2, 0x23, 0x50, 0x50, 0x6c, 0xb2, 0x42, 0xda, 0xeb, 0x21, 0x71, 0x16, 0x17, 0x3a, 0x8f, 0xbf, 0x51, 0x29, 0x2a, 0xfb, 0xba, 0xdd, 0x81, 0xdd, 0xa3, 0xb1, 0x95, 0x2e, 0x45, 0x4c, 0x83, 0x6d, 0xb2, 0xc5, 0x10, 0x14, 0x0c, 0x0b, 0x86, 0x1d, 0xf5, 0x85, 0xbf, 0xc5, 0x46, 0xf5, 0x7f, 0x90, 0x04, 0xa2, 0x07, 0x8d, 0x90, 0xb6, 0xe6, 0xdb, 0x1d, 0xe5, 0x13, 0x6c, 0x67, 0x4f, 0x39, 0x09, 0xa3, 0xa8, 0x52, 0x96, 0xb1, 0x96, 0x77, 0x98, 0x99, 0x5a, 0xf6, 0xf4, 0x35, 0xb3, 0xa6, 0xf9, 0x2b, 0xff, 0x77, 0xa1, 0x1f, 0xa4, 0x4d, 0x14, 0x26, 0xae, 0x0f, 0x6e, 0x7d, 0xba, 0xfa, 0xc2, 0x7b, 0x12, 0x3c, 0x5f, 0xc4, 0x19, 0xbe, 0x52, 0xc0, 0xea, 0x41, 0x2c, 0x4b, 0x3c, 0xac, 0x05, 0xae, 0x89, 0xa4, 0xc0, 0xce, 0x6f, 0x5e, 0x91, 0xa4, 0x56, 0xb1, 0xbd, 0xed, 0x53, 0x70, 0xa1, 0x23, 0x4c, 0xf6, 0xf6, 0xab, 0x5d, 0x02, 0x53, 0x50, 0x7b, 0xc6, 0xf3, 0xf0, 0x57, 0x3a, 0xb9, 0x75, 0x85, 0xb6, 0x71, 0x07, 0xde, 0xc0, 0x59, 0x81, 0x23, 0x23, 0xe0, 0x21, 0xe3, 0x41, 0xad, 0x83, 0x9e, 0xa9, 0xe3, 0xd0, 0x2a, 0xec, 0xa4, 0x33, 0x56, 0xad, 0xd4, 0x8c, 0xce, 0xf8, 0x1f, 0x69, 0x3e, 0xd5, 0x3d, 0x32, 0xba, 0x1c, 0x74, 0xa3, 0x5e, 0x8a, 0x5f, 0x7f, 0x31, 0x15, 0xef, 0x83, 0x4f, 0x7d, 0xaf, 0x99, 0x48, 0x24, 0x4c, 0x4f, 0xc3, 0x1f, 0x54, 0x87, 0x67, 0x8d, 0x3e, 0x70, 0xfb, 0x27, 0xab, 0xb5, 0xcb, 0x19, 0xeb, 0xf4, 0x4e, 0x11, 0xc3, 0x71, 0x07, 0x95, 0x6d, 0x0c, 0xa9, 0x99, 0xe1, 0x70, 0x7e, 0x51, 0x53, 0x8e, 0x09, 0x44, 0xfd, 0x4a, 0xeb, 0xa2, 0x1e, 0x73, 0x03, 0xd7, 0x43, 0xf9, 0xd9, 0x60, 0xc5, 0x5a, 0x3d, 0xdd, 0x93, 0x5e, 0x2b, 0x68, 0x31, 0x04, 0xf2, 0x26, 0x01, 0xbc, 0x95, 0x1b, 0xc2, 0xd6, 0x72, 0x43, 0x56, 0x3b, 0x21, 0xde, 0xc8, 0x5b, 0x9f, 0x0b, 0x8d, 0x66, 0xac, 0x98, 0x0a, 0xbf, 0x71, 0x19, 0x57, 0xae, 0x66, 0x37, 0x43, 0x55, 0x73, 0x4b, 0x98, 0xe5, 0x56, 0x2c, 0xa0, 0x11, 0x44, 0x44, 0xe7, 0xc3, 0xd3, 0xea, 0x43, 0x0e, 0x17, 0xec, 0x12, 0x65, 0x0b, 0x6a, 0xc3, 0x0a, 0x33, 0xeb, 0x98, 0xc8, 0x80, 0xaa, 0xa9, 0xe5, 0x74, 0x31, 0x2d, 0x53, 0x86, 0x29, 0xf5, 0x26, 0xc8, 0x71, 0x39, 0x4b, 0xc7, 0x6d, 0x97, 0x76, 0xb3, 0xa1, 0x59, 0x5c, 0xc0, 0x7e, 0xf7, 0x23, 0xcb, 0x7b, 0xdc, 0x16, 0x41, 0x68, 0x6d, 0x9e, 0x3d, 0xff, 0x48, 0x6d, 0xf0, 0xbd, 0xc9, 0xfd, 0x46, 0xf0, 0xd3, 0x39, 0xc6, 0x10, 0xcd, 0x7a, 0xbb, 0x52, 0xea, 0xb4, 0x91, 0x7b, 0xae, 0xf2, 0x81, 0xf2, 0xae, 0xff, 0x71, 0x1a, 0x97, 0x66, 0x15, 0xde, 0x71, 0x9d, 0x5b, 0x8e, 0x25, 0x7e, 0x06, 0xe9, 0x3d, 0xf6, 0x98, 0x7b, 0xec, 0x01, 0x76, 0x29, 0x4e, 0xd6, 0x47, 0x0a, 0xf0, 0x5e, 0x9d, 0x78, 0x93, 0xeb, 0xd7, 0x67, 0x2d, 0x27, 0x46, 0xf6, 0x31, 0x4b, 0x8e, 0x44, 0x10, 0x91, 0x4f, 0x85, 0x00, 0xeb, 0x05, 0x55, 0xfc, 0xf5, 0x2d, 0x4b, 0x0c, 0x28, 0xaa, 0xd2, 0xc6, 0x51, 0x66, 0x34, 0x15, 0x42, 0x3c, 0xf8, 0x39, 0xc8, 0x16, 0x6e, 0x0f, 0xdd, 0x52, 0x88, 0x93, 0x1e, 0x6b, 0xeb, 0xa3, 0x7f, 0xd5, 0x46, 0x06, 0x3d, 0x28, 0xe3, 0xac, 0x14, 0x81, 0x7c, 0x37, 0xb3, 0x25, 0x4f, 0xbb, 0x6d, 0x68, 0x74, 0xc2, 0x31, 0xce, 0x6f, 0x94, 0xbc, 0x6f, 0x02, 0xb5, 0x0d, 0xa0, 0x45, 0xae, 0x19, 0xcf, 0xf8, 0x10, 0xc1, 0xaf, 0x17, 0xb7, 0x01, 0x96, 0xaf, 0x4c, 0x6a, 0x23, 0xf1, 0x0d, 0xd2, 0x23, 0x84, 0xd1, 0x4a, 0xb5, 0x20, 0x46, 0x50, 0xad, 0x59, 0x7e, 0x46, 0x37, 0xb8, 0xaa, 0x23, 0xbd, 0x10, 0x25, 0x69, 0x0a, 0x0f, 0xb4, 0x57, 0xaf, 0x14, 0x0c, 0x5f, 0xa5, 0x40, 0x94, 0xda, 0x35, 0xd0, 0x6d, 0xfb, 0x15, 0xaa, 0xb0, 0x01, 0xd4, 0x35, 0xf6, 0xb1, 0x77, 0x6e, 0x1e, 0x04, 0x65, 0x39, 0x4a, 0x1d, 0x80, 0xf4, 0x2b, 0x7d, 0x95, 0x52, 0x7f, 0x7a, 0xf6, 0x67, 0xd7, 0xed, 0x65, 0xff, 0x9e, 0x2c, 0x34, 0x34, 0x57, 0x38, 0xab, 0x40, 0x26, 0x37, 0xaa, 0x8f, 0x92, 0x24, 0x8f, 0x19, 0x89, 0xc5, 0x5a, 0xee, 0xa4, 0xdd, 0x10, 0x12, 0xad, 0xa4, 0x5d, 0x8c, 0x5f, 0x74, 0x7c, 0xba, 0x6c, 0xc5, 0x5c, 0xe7, 0xc5, 0x5b, 0xfb, 0x1f, 0x15, 0xbe, 0x16, 0x42, 0x8e, 0xeb, 0x05, 0x58, 0xe9, 0x49, 0xe1, 0x24, 0xa8, 0xde, 0xe7, 0xfc, 0x9f, 0xc3, 0x21, 0xd8, 0xb2, 0xd5, 0x43, 0xa8, 0xe0, 0xae, 0xd3, 0xeb, 0x81, 0xd4, 0x8c, 0x7d, 0xcb, 0x2f, 0x05, 0xb0, 0x9b, 0xc1, 0x8e, 0x9f, 0x73, 0x91, 0x5a, 0xbf, 0xbe, 0xe8, 0xe4, 0xb7, 0x5c, 0xc0, 0x8b, 0x72, 0x5a, 0x7a, 0x7f, 0x72, 0x01, 0xcf, 0xe1, 0x67, 0x13, 0x09, 0x26, 0x00, 0x51, 0x73, 0xbd, 0x01, 0x40, 0x0e, 0xf1, 0x96, 0x2d, 0x85, 0x10, 0xe6, 0x6f, 0x63, 0xcd, 0xec, 0xec, 0x84, 0xe3, 0x82, 0xdf, 0xc9, 0xfb, 0xbf, 0xd8, 0x10, 0xd0, 0x83, 0x04, 0x64, 0x91, 0x50, 0xae, 0x70, 0x87, 0x5c, 0x06, 0x3a, 0xf7, 0xe4, 0x21, 0x0e, 0x4a, 0xc2, 0x42, 0xb7, 0x6b, 0x42, 0x58, 0xf6, 0x71, 0x32, 0xc7, 0x2c, 0x7e, 0x38, 0x6b, 0x5a, 0xe6, 0x69, 0xda, 0x4b, 0x94, 0x16, 0xea, 0x10, 0xaa, 0xe9, 0x74, 0xad, 0x68, 0x31, 0x57, 0x12, 0x4f, 0x7b, 0xbf, 0x4d, 0x86, 0x62, 0xa7, 0xfd, 0x7c, 0xa8, 0x9c, 0x0a, 0xcf, 0x85, 0xc4, 0x93, 0x6d, 0x3e, 0x20, 0x28, 0xf9, 0xfa, 0x0e, 0x3a, 0x70, 0xd2, 0x12, 0xcf, 0x0c, 0x27, 0xd5, 0x7a, 0x68, 0x38, 0x6e, 0x8b, 0xe6, 0xf3, 0xe1, 0x83, 0x4e, 0x0c, 0xe5, 0xcb, 0xb7, 0x4d, 0xeb, 0xa5, 0xab, 0x2d, 0x5b, 0x62, 0x86, 0xa3, 0x21, 0xd6, 0x1f, 0x3c, 0x68, 0x09, 0xaa, 0x6c, 0xa5, 0x2f, 0xdd, 0x21, 0xd8, 0xda, 0x52, 0x9e, 0x0f, 0x6f, 0x2d, 0x87, 0x2b, 0xd6, 0xfe, 0x38, 0xe6, 0x76, 0xe9, 0x5b, 0x15, 0x61, 0x04, 0xba, 0x2b, 0xcb, 0x00, 0x51, 0xff, 0xc1, 0x0c, 0xa8, 0xcf, 0x18, 0xf6, 0x60, 0x84, 0xa3, 0x93, 0x0b, 0x37, 0xa9, 0x62, 0x41, 0xf5, 0x95, 0x6c, 0xf0, 0xbf, 0xf0, 0x6e, 0xf3, 0xd5, 0x8d, 0x3a, 0xe6, 0x35, 0x03, 0x5b, 0x39, 0x5e, 0x60, 0xf8, 0x84, 0x59, 0x1c, 0xfb, 0x1a, 0xfa, 0x4c, 0x71, 0xe1, 0x64, 0x18, 0x34, 0x61, 0xcb, 0x6f, 0xc8, 0x1a, 0x7e, 0xfa, 0x84, 0x1b, 0x24, 0x4e, 0xf2, 0xd0, 0x45, 0x65, 0x78, 0x1c, 0x0d, 0x4f, 0x37, 0xa7, 0x4d, 0x25, 0x33, 0x7a, 0xc3, 0x3f, 0xb4, 0xc9, 0x9b, 0xa6, 0xed, 0x0f, 0x35, 0xcc, 0xdc, 0x61, 0x29, 0x7b, 0x71, 0xfb, 0x89, 0x0c, 0xf2, 0x20, 0x66, 0xd9, 0x9e, 0x21, 0x95, 0xf5, 0x91, 0xbb, 0xb2, 0x1a, 0xe7, 0xa5, 0x66, 0xe2, 0x24, 0x6a, 0xe6, 0x3a, 0xd4, 0x75, 0xbc, 0x14, 0x6e, 0x6a, 0xca, 0x5d, 0x7e, 0xbd, 0x8c, 0x2f, 0x03, 0x7d, 0x9d, 0x47, 0x16, 0x70, 0x7d, 0xb9, 0xcd, 0x65, 0x91, 0xe2, 0x5f, 0xc6, 0x6b, 0x9f, 0x89, 0x6d, 0x4c, 0xbc, 0x30, 0xb8, 0xe7, 0xb0, 0x47, 0xe0, 0x68, 0x87, 0xf3, 0x86, 0xb5, 0x1f, 0xed, 0x8f, 0xf4, 0x97, 0x29, 0x32, 0x4d, 0x05, 0xb5, 0x4f, 0xf1, 0x67, 0xe3, 0x03, 0x5b, 0xdd, 0xaa, 0x79, 0xd6, 0x15, 0x4a, 0x03, 0x3f, 0x06, 0x2f, 0x69, 0x0c, 0xe1, 0x18, 0x81, 0x8d, 0x44, 0x78, 0xff, 0x72, 0xb1, 0x1c, 0x8f, 0x8e, 0x40, 0x0f, 0x21, 0xda, 0x90, 0xbb, 0x84, 0xbd, 0x03, 0x50, 0x37, 0x8a, 0x2b, 0x6a, 0x7c, 0x4b, 0x7f, 0xee, 0xad, 0xbd, 0x53, 0x34, 0xd3, 0x9b, 0x07, 0x6c, 0x75, 0x1f, 0x7e, 0x3a, 0xae, 0xc7, 0xd1, 0xa4, 0x82, 0x55, 0x45, 0x2e, 0x72, 0x19, 0x7b, 0x43, 0x4e, 0x72, 0xe7, 0xd7, 0x4b, 0x93, 0x83, 0x4b, 0x56, 0x83, 0xc5, 0x91, 0xa7, 0x67, 0xce, 0x90, 0x98, 0x04, 0xe4, 0xca, 0xb8, 0x80, 0x22, 0x3c, 0x1b, 0x68, 0x6e, 0x85, 0xf5, 0xf8, 0xac, 0x4b, 0x67, 0x96, 0x31, 0xdb, 0x99, 0x9f, 0x7b, 0x0f, 0x09, 0x66, 0x1f, 0x75, 0x23, 0x7a, 0x02, 0xad, 0x11, 0x28, 0xcc, 0x13, 0xd4, 0x41, 0x9a, 0x9f, 0x94, 0x1e, 0xf4, 0x09, 0x34, 0xe0, 0xfe, 0x30, 0x2a, 0xfc, 0xf2, 0xbc, 0x8e, 0xf8, 0xcd, 0x02, 0x70, 0x6f, 0x49, 0x29, 0x6f, 0x5b, 0x0c, 0x8b, 0x87, 0x94, 0x1f, 0x5e, 0x2b, 0x93, 0xa1, 0x94, 0x94, 0x7c, 0xbd, 0xff, 0x58, 0x5c, 0xd9, 0xb9, 0x3e, 0xae, 0x10, 0xc3, 0x51, 0x25, 0xe3, 0xec, 0x33, 0xa5, 0x2b, 0xf5, 0xb4, 0x92, 0x52, 0xf2, 0xa3, 0x4e, 0xc3, 0xf3, 0xe5, 0xfd, 0x9f, 0xe4, 0xc3, 0x8c, 0xb2, 0xb2, 0x88, 0xf1, 0xa5, 0xb0, 0x4c, 0xb4, 0x75, 0x38, 0x0b, 0xae, 0x24, 0x95, 0xfa, 0x11, 0xae, 0x20, 0x1a, 0xa8, 0x3e, 0xaa, 0x0d, 0x60, 0xa2, 0x1a, 0x29, 0x08, 0xfc, 0x57, 0xcb, 0x55, 0xbb, 0x69, 0xed, 0x29, 0xca, 0xdb, 0xfb, 0x14, 0x07, 0x63, 0xe3, 0x1c, 0xf7, 0xc5, 0x6c, 0xb9, 0xb8, 0xf4, 0xc8, 0x24, 0x37, 0x7a, 0x6c, 0xd1, 0xa3, 0x1b, 0x1f, 0x3a, 0x21, 0xb5, 0x51, 0xdf, 0xc1, 0x6b, 0xaf, 0x8b, 0xb0, 0x02, 0xf4, 0xd8, 0xb0, 0x8b, 0x02, 0xf5, 0xc6, 0x43, 0x31, 0xa7, 0x32, 0xb7, 0xe7, 0x8e, 0xa4, 0x2c, 0x69, 0xaa, 0xad, 0x3d, 0xf0, 0x1e, 0x74, 0xc6, 0x00, 0x33, 0xaa, 0x01, 0xf5, 0x9f, 0xc0, 0xef, 0xdf, 0x08, 0x57, 0xfa, 0x8f, 0xc4, 0xf8, 0xd8, 0xf2, 0xe3, 0x05, 0xb2, 0x9e, 0x6f, 0xef, 0x86, 0xab, 0xf2, 0xaa, 0xca, 0xc4, 0x39, 0x5e, 0x52, 0x7d, 0x58, 0x60, 0x73, 0xe7, 0xee, 0x60, 0x69, 0x63, 0xaa, 0xe4, 0xf6, 0xb3, 0x0e, 0xf5, 0x4c, 0x57, 0x73, 0x17, 0x2d, 0x16, 0x4e, 0x7f, 0x51, 0xdb, 0xb1, 0x81, 0x08, 0xc2, 0x15, 0x48, 0x20, 0x73, 0x56, 0xc9, 0x09, 0xaf, 0xff, 0xf9, 0x37, 0x28, 0xc8, 0x3e, 0xc8, 0x96, 0x5d, 0x24, 0x67, 0x07, 0x61, 0x52, 0x70, 0x76, 0xb3, 0xbc, 0x54, 0xa0, 0xf0, 0x1a, 0x40, 0x13, 0x39, 0x98, 0xf9, 0x88, 0x36, 0xcf, 0x0b, 0x72, 0x5a, 0xf4, 0x22, 0xd7, 0x69, 0x4f, 0xb8, 0x5f, 0x38, 0xef, 0xf0, 0xab, 0xb5, 0x9d, 0xc2, 0xe7, 0x26, 0x0e, 0x59, 0xa3, 0xb6, 0x5d, 0xb9, 0xde, 0x2d, 0xb8, 0xa5, 0x64, 0xff, 0x59, 0xc0, 0x5b, 0x88, 0xb7, 0xf2, 0x18, 0x96, 0xfe, 0x0d, 0x37, 0x28, 0xbd, 0xb1, 0xea, 0x75, 0xdf, 0x6d, 0x91, 0x30, 0xdd, 0x26 ],
-const [ 0xff, 0x5b, 0xe1, 0xec, 0xa7, 0xd4, 0x5e, 0xff, 0x12, 0xe9, 0x64, 0x5d, 0xdf, 0x05, 0xc1, 0x73, 0x5b, 0x97, 0x3b, 0xb8, 0xb0, 0x6f, 0x6c, 0x32, 0x59, 0x6b, 0xd1, 0x3c, 0xd9, 0x54, 0x1d, 0x86, 0xad, 0x03, 0xd3, 0x5d, 0x7f, 0xc8, 0x13, 0x2d, 0x9c, 0x0c, 0xb4, 0x44, 0xa8, 0x34, 0x94, 0xd8, 0x91, 0xc9, 0x2c, 0x4c, 0xc1, 0xd6, 0x68, 0xaf, 0x98, 0x92, 0xb5, 0x86, 0x19, 0x3f, 0x5b, 0xcb, 0xe3, 0x52, 0x0d, 0x35, 0x63, 0xd4, 0xbe, 0xba, 0x49, 0x08, 0xb7, 0x53, 0x38, 0x4e, 0xe7, 0xff, 0xc2, 0x47, 0x7a, 0x0a, 0x93, 0x3a, 0xad, 0x8f, 0xec, 0xb7, 0xe0, 0x3c, 0x54, 0x7a, 0xec, 0x55, 0x8a, 0x91, 0xb8, 0xfb, 0xbd, 0xc2, 0x07, 0xaf, 0xff, 0x27, 0x94, 0x12, 0xf8, 0x1b, 0x61, 0xee, 0xd7, 0x5a, 0x4c, 0x7a, 0x8e, 0x63, 0xe3, 0xda, 0x3f, 0x21, 0x79, 0xe6, 0xf1, 0xcb, 0x7a, 0x2c, 0x88, 0x09, 0xfb, 0x38, 0xf4, 0x58, 0x95, 0x13, 0xa8, 0xaf, 0x74, 0x09, 0x4e, 0x63, 0xab, 0xaf, 0xb9, 0x48, 0xca, 0x25, 0x1b, 0x19, 0xb3, 0x99, 0x78, 0x19, 0xa9, 0x0c, 0x5a, 0xfb, 0xaa, 0x59, 0xc7, 0xff, 0xff, 0x73, 0x70, 0x5f, 0x11, 0xee, 0x2b, 0xe9, 0x7e, 0xc1, 0xa3, 0xed, 0x6c, 0x4a, 0x4e, 0x59, 0x1e, 0x92, 0xa0, 0x23, 0xc5, 0xd3, 0x7f, 0xe7, 0x98, 0x37, 0xf6, 0xd2, 0x26, 0xe3, 0x2d, 0xbe, 0xeb, 0x34, 0x99, 0x9e, 0x22, 0x48, 0x70, 0x1d, 0xdb, 0xc1, 0x60, 0x82, 0x4d, 0xc5, 0x80, 0xd7, 0x6d, 0x49, 0x87, 0x4a, 0xc0, 0x90, 0x3c, 0xd3, 0x6d, 0xee, 0x2d, 0x17, 0x96, 0xd2, 0xa4, 0x8d, 0xe8, 0x04, 0xd7, 0xdf, 0x71, 0x2a, 0x5f, 0x93, 0xb2, 0x91, 0xeb, 0xea, 0xf6, 0x2a, 0x36, 0x08, 0xe2, 0xd3, 0x36, 0x56, 0x4c, 0xd8, 0x97, 0x25, 0x51, 0xba, 0x67, 0x94, 0xa1, 0x2f, 0x13, 0xb3, 0x1e, 0x69, 0x92, 0xe8, 0xa6, 0x9b, 0xe0, 0x92, 0x2c, 0xba, 0xae, 0xed, 0x0e, 0x81, 0x58, 0x36, 0xa2, 0xb7, 0x17, 0x0f, 0x12, 0xb4, 0x78, 0x24, 0x6b, 0x22, 0x0c, 0x0f, 0xf0, 0x01, 0x61, 0x79, 0xb4, 0xed, 0x32, 0x82, 0x68, 0xa4, 0xdb, 0x63, 0x71, 0xc3, 0x0f, 0x52, 0x3e, 0xd0, 0xcd, 0xa7, 0xd8, 0x7d, 0x90, 0x3c, 0xba, 0x2b, 0xc7, 0x19, 0xe4, 0xae, 0x84, 0x51, 0x2b, 0x50, 0x78, 0x27, 0xd3, 0x18, 0x1f, 0x75, 0x5f, 0x4c, 0x38, 0x4f, 0xa8, 0x34, 0x78, 0xe3, 0x2d, 0x21, 0x7f, 0xa3, 0xaa, 0xae, 0x0b, 0xa7, 0xec, 0x46, 0x6c, 0x4c, 0xe3, 0xe6, 0x38, 0x22, 0xf9, 0x24, 0x3f, 0x05, 0xa2, 0x71, 0xc1, 0x89, 0x34, 0x9b, 0xdf, 0x9c, 0xfa, 0x96, 0x50, 0x66, 0x83, 0x7b, 0x55, 0x74, 0x40, 0xd1, 0xef, 0x16, 0x4f, 0x0c, 0x4f, 0x05, 0x91, 0x53, 0x8e, 0x49, 0x02, 0x86, 0x9e, 0x5a, 0x4a, 0x80, 0x81, 0x86, 0x8f, 0x99, 0xb8, 0x92, 0x8e, 0x6f, 0xff, 0xa4, 0xea, 0xe7, 0x37, 0x61, 0xc3, 0x6e, 0xa4, 0x52, 0x8b, 0x85, 0x58, 0x8c, 0x15, 0x7c, 0xef, 0x90, 0xef, 0x7d, 0x7d, 0x70, 0xf2, 0xcd, 0xc5, 0x33, 0x17, 0x4f, 0xac, 0x7b, 0x8d, 0x4a, 0xed, 0x65, 0x08, 0x6b, 0x0d, 0xb1, 0x5b, 0x0e, 0x92, 0x23, 0x49, 0xb9, 0x70, 0x28, 0x98, 0xe9, 0xc4, 0xbd, 0x68, 0x12, 0xc4, 0x8d, 0xc3, 0xe1, 0xf6, 0x59, 0x75, 0xc4, 0xa1, 0x9d, 0x1e, 0xac, 0x82, 0x71, 0x85, 0x12, 0xbf, 0xad, 0x2f, 0x38, 0x21, 0x50, 0x31, 0xb1, 0x7d, 0x23, 0x42, 0x23, 0x73, 0x99, 0x14, 0x4c, 0x5b, 0xfa, 0xe5, 0x43, 0x7d, 0xc0, 0x51, 0x00, 0x80, 0x42, 0x6a, 0x1f, 0x26, 0x8f, 0x0a, 0xe1, 0x36, 0x9d, 0x68, 0x74, 0xb9, 0xa3, 0xea, 0x74, 0x68, 0xc3, 0x3a, 0xb1, 0x66, 0xec, 0x9c, 0x33, 0x2b, 0xff, 0x7f, 0x7b, 0xc0, 0x30, 0x51, 0x0c, 0x32, 0xb0, 0x98, 0x2a, 0x41, 0x89, 0x3f, 0xe2, 0x58, 0xc9, 0x2d, 0x4a, 0xc2, 0xe2, 0x1d, 0x0a, 0x1a, 0x51, 0xa9, 0x1b, 0x03, 0x7e, 0xa7, 0xcf, 0x1a, 0xe3, 0xb9, 0x12, 0x29, 0x71, 0x20, 0xef, 0x9e, 0x2f, 0xd1, 0x56, 0x3b, 0x25, 0xcb, 0x1c, 0x0e, 0x78, 0xa7, 0x43, 0xa4, 0xd6, 0x71, 0x7c, 0x7a, 0x14, 0xb6, 0xea, 0xb4, 0x16, 0xde, 0x29, 0x11, 0xf0, 0xbc, 0x8f, 0x1f, 0x4a, 0x64, 0xb1, 0xab, 0x09, 0x3d, 0x29, 0x7c, 0x2c, 0x57, 0x97, 0x41, 0xf3, 0xfe, 0xe6, 0xc7, 0x47, 0x8f, 0xd1, 0x6f, 0x56, 0x8a, 0xa5, 0xe0, 0x7e, 0xe9, 0x48, 0xf9, 0x6c, 0xb0, 0x7a, 0x09, 0x85, 0xc6, 0x5b, 0x43, 0x84, 0x03, 0x2d, 0x6c, 0x65, 0x8a, 0x5c, 0xd7, 0x83, 0x59, 0xbb, 0x93, 0xfd, 0x1e, 0x11, 0xe3, 0x5d, 0x4c, 0xd4, 0xee, 0x7c, 0x6f, 0x34, 0xb8, 0xa0, 0xbd, 0x5c, 0x51, 0xe8, 0xed, 0xf4, 0x4d, 0xea, 0x4c, 0xea, 0x73, 0x9a, 0x0d, 0x72, 0xba, 0x6e, 0xe0, 0x4b, 0x71, 0xbf, 0xc7, 0x44, 0xbd, 0x73, 0x25, 0x00, 0x48, 0xd9, 0x18, 0xf6, 0x38, 0xd4, 0x09, 0xbb, 0x5e, 0x3c, 0x82, 0x84, 0xb0, 0x81, 0x3f, 0xe7, 0xfa, 0x91, 0x87, 0xe1, 0xd0, 0xfc, 0xbd, 0x1d, 0xc7, 0x56, 0x32, 0x73, 0xe5, 0xde, 0x3d, 0xb0, 0x55, 0x5c, 0x8e, 0x95, 0x5f, 0x50, 0xbf, 0x22, 0x98, 0x48, 0x2c, 0x14, 0x56, 0x92, 0x05, 0xac, 0x67, 0x13, 0xa1, 0xb2, 0x03, 0x77, 0x15, 0xba, 0xfe, 0x8b, 0x06, 0xa6, 0x42, 0xe6, 0xbb, 0x6c, 0x7d, 0xcf, 0x76, 0x19, 0x17, 0x5b, 0x05, 0x16, 0x67, 0xd6, 0x94, 0xaa, 0x26, 0x64, 0xc5, 0xc1, 0x24, 0xe8, 0x03, 0xec, 0x39, 0x25, 0x13, 0xa8, 0x7f, 0x24, 0xeb, 0xe3, 0xbe, 0xd5, 0xc8, 0xbc, 0x28, 0xf8, 0x7b, 0x8b, 0x47, 0x3e, 0x03, 0x21, 0x33, 0xac, 0x61, 0x51, 0x08, 0x41, 0xa8, 0xaf, 0x97, 0xd8, 0x54, 0x97, 0x5c, 0x50, 0xdc, 0x71, 0xb1, 0xe9, 0x8b, 0x34, 0x40, 0xf1, 0x8b, 0x29, 0xbe, 0xa1, 0x43, 0xf2, 0xd7, 0x42, 0xe3, 0xca, 0x64, 0x93, 0x3c, 0x0e, 0xe4, 0x6f, 0xd6, 0xfd, 0x2a, 0xab, 0x3c, 0xbc, 0x53, 0x3e, 0x9b, 0x9c, 0xfb, 0xa4, 0x8b, 0xa0, 0xb1, 0x84, 0x2d, 0x3a, 0xa7, 0x90, 0x76, 0x56, 0xae, 0xac, 0xca, 0x99, 0x62, 0x53, 0xcd, 0xeb, 0xa2, 0x37, 0x76, 0x33, 0x44, 0x28, 0x65, 0x61, 0x06, 0x37, 0x76, 0xb2, 0xc7, 0x1b, 0x96, 0x2f, 0xf7, 0xd4, 0xd5, 0x78, 0x4c, 0x8e, 0xbd, 0xbf, 0xb6, 0xc7, 0xe2, 0x17, 0x96, 0xb4, 0xbb, 0xef, 0x2b, 0xe1, 0xb0, 0xd9, 0x4c, 0x19, 0x74, 0x91, 0x5d, 0x85, 0x95, 0x3a, 0x7c, 0x17, 0x52, 0xea, 0xfb, 0x2a, 0xac, 0x69, 0x13, 0x62, 0xc0, 0x36, 0xd6, 0xda, 0x53, 0xcb, 0x66, 0x7e, 0xaf, 0x22, 0x65, 0xb5, 0xae, 0x78, 0xac, 0x44, 0x14, 0x51, 0x40, 0x6f, 0x21, 0xbc, 0x81, 0x60, 0x67, 0xd8, 0xa5, 0xcd, 0xda, 0x97, 0x65, 0xd6, 0x26, 0xc2, 0xf6, 0x2c, 0x45, 0x3e, 0x3b, 0x78, 0x50, 0x8d, 0x39, 0xfb, 0x95, 0x97, 0xcb, 0x71, 0xeb, 0xab, 0x97, 0x3c, 0x42, 0xc1, 0x40, 0xbe, 0x7e, 0x02, 0xde, 0x07, 0x86, 0x8a, 0xab, 0xb0, 0x97, 0x6c, 0xfe, 0x06, 0xdf, 0xf6, 0x7e, 0x6c, 0x47, 0x37, 0x8f, 0xfa, 0x90, 0xbf, 0x11, 0x6a, 0xa1, 0xa6, 0x4a, 0x35, 0x1f, 0xd0, 0x20, 0xf9, 0x3f, 0x6e, 0x8c, 0x1e, 0xd8, 0xc8, 0x4b, 0xb9, 0xbd, 0x3b, 0xd7, 0xb0, 0x49, 0x7d, 0x95, 0x20, 0x3b, 0x29, 0x50, 0xfb, 0xc4, 0x77, 0xe6, 0xf6, 0xdf, 0x4a, 0x41, 0xa2, 0xe1, 0x71, 0x89, 0xd8, 0x51, 0x26, 0x98, 0x5b, 0xf9, 0xdb, 0xaf, 0xb9, 0x3d, 0x37, 0x67, 0x72, 0xac, 0x5b, 0xea, 0x5c, 0xd5, 0x69, 0x62, 0x46, 0x5c, 0x47, 0xb2, 0xdc, 0x4d, 0xa0, 0x65, 0xcb, 0xaf, 0x2c, 0xe3, 0x25, 0x5d, 0x32, 0xeb, 0x06, 0x11, 0x4b, 0x3d, 0x78, 0xc2, 0x68, 0x97, 0x94, 0x30, 0x16, 0xe3, 0xea, 0xbd, 0x01, 0xaf, 0x23, 0x7e, 0xb7, 0xdd, 0xe5, 0x92, 0xaf, 0x9c, 0xf7, 0xb2, 0x8a, 0x97, 0xa6, 0x0a, 0x98, 0x6c, 0x67, 0x47, 0x9e, 0x5f, 0xbd, 0xf2, 0xd7, 0x50, 0x5d, 0xfc, 0x38, 0xea, 0x91, 0x9a, 0xf8, 0x1e, 0xda, 0x53, 0x50, 0xcf, 0xd9, 0x56, 0x80, 0xcf, 0x6f, 0x12, 0x12, 0x0b, 0x24, 0x01, 0x62, 0x02, 0xc5, 0xc4, 0x5e, 0x7c, 0x51, 0x75, 0x8b, 0x78, 0x17, 0x39, 0x49, 0x66, 0x18, 0x14, 0x57, 0x96, 0xb2, 0x02, 0x99, 0xf1, 0x80, 0x43, 0x19, 0xe7, 0x7c, 0xf6, 0x4d, 0xa8, 0x66, 0xe9, 0x98, 0x97, 0x6a, 0xb0, 0x12, 0xfb, 0xfd, 0xf4, 0x8c, 0xf8, 0x08, 0x0e, 0xcf, 0xbf, 0x48, 0xd4, 0x25, 0x01, 0xf4, 0xb3, 0x1b, 0xa9, 0xa1, 0xff, 0x84, 0xca, 0x64, 0x86, 0xc1, 0xd6, 0x36, 0x6b, 0x40, 0x12, 0x9c, 0x32, 0x43, 0x46, 0x87, 0x17, 0xe3, 0xb9, 0x78, 0xa4, 0x54, 0x5c, 0xe9, 0x82, 0x6a, 0x46, 0xe9, 0x90, 0x5c, 0x60, 0x06, 0x32, 0xc9, 0x62, 0x6f, 0xec, 0xf8, 0xfe, 0x5a, 0x2f, 0x64, 0x5a, 0xa4, 0x72, 0x78, 0xc4, 0xb7, 0x85, 0x97, 0xa2, 0xb1, 0x22, 0x5f, 0xa7, 0xc3, 0xc6, 0x2f, 0x4d, 0xd6, 0xbe, 0xe6, 0x7f, 0x75, 0x85, 0xee, 0x95, 0xe7, 0x4d, 0x7a, 0x86, 0x9b, 0xdc, 0x0b, 0x59, 0xca, 0x99, 0x39, 0xdd, 0x57, 0xe7, 0xb0, 0x9a, 0xfa, 0xb1, 0x79, 0x07, 0x9d, 0x46, 0x7b, 0xfe, 0x06, 0x68, 0x41, 0x6c, 0xb7, 0x9f, 0xfd, 0x4d, 0x12, 0xd4, 0xcd, 0xd8, 0xc1, 0x1a, 0x3e, 0xf6, 0x55, 0xcf, 0x0f, 0xf9, 0x2d, 0xe4, 0x37, 0x8b, 0x9a, 0x79, 0x28, 0xe4, 0x40, 0xad, 0x56, 0x41, 0xc0, 0xb4, 0xf3, 0x91, 0x94, 0x2a, 0xfd, 0x71, 0x3a, 0xa6, 0x7b, 0x5a, 0x94, 0x93, 0x04, 0x19, 0x8f, 0x3b, 0x80, 0x80, 0x03, 0x25, 0x33, 0x5c, 0xda, 0xa1, 0xf7, 0xa7, 0x75, 0xa1, 0xc8, 0xfe, 0x4b, 0xca, 0x86, 0x55, 0xd3, 0xcb, 0xf7, 0xe9, 0xa5, 0xee, 0x0c, 0x76, 0xdc, 0xec, 0x65, 0xaa, 0xbe, 0x06, 0x16, 0xda, 0x9f, 0x51, 0xac, 0xf5, 0x02, 0x52, 0x6b, 0xb6, 0x02, 0xca, 0xda, 0x1d, 0xf0, 0xd3, 0x82, 0x1f, 0x3e, 0x2c, 0xf2, 0x9d, 0x9b, 0xd2, 0x06, 0x93, 0x60, 0xd0, 0x69, 0x92, 0x2b, 0x57, 0x59, 0x70, 0xc9, 0x11, 0xaa, 0x3e, 0x5a, 0xb3, 0x0e, 0x7a, 0xaf, 0xd2, 0x93, 0x86, 0xf7, 0xf7, 0x6d, 0x59, 0x9b, 0xf5, 0xf6, 0x75, 0x66, 0x7a, 0xf3, 0x18, 0xe9, 0xe5, 0x19, 0xb7, 0x1e, 0x57, 0xd0, 0xa8, 0x4b, 0x0d, 0x36, 0x1f, 0x29, 0xed, 0x67, 0x5b, 0x46, 0x5e, 0xfc, 0x21, 0xa8, 0x5d, 0xd1, 0x6a, 0xb3, 0xce, 0x0c, 0x59, 0x4d, 0x0f, 0x5a, 0x6f, 0x3f, 0xd3, 0x7c, 0x02, 0xde, 0x2e, 0x03, 0xeb, 0xec, 0xec, 0x57, 0x80, 0xb9, 0x27, 0xfe, 0xc2, 0x8d, 0x19, 0x1b, 0xd7, 0x4a, 0x2e, 0x35, 0xba, 0x4e, 0x5d, 0x3a, 0x31, 0x97, 0xb9, 0xc4, 0xff, 0x2a, 0x43, 0x9a, 0x5b, 0xb5, 0x03, 0x7a, 0xa2, 0x73, 0x57, 0x16, 0x49, 0x50, 0x8a, 0x5c, 0x15, 0x4e, 0xa8, 0xfa, 0x8e, 0x27, 0x91, 0x22, 0xb1, 0x34, 0x4d, 0x8a, 0xe5, 0x8d, 0x9f, 0xb8, 0x30, 0x72, 0xdd, 0x7c, 0xab, 0xe9, 0xfe, 0xbe, 0x33, 0xa9, 0xf5, 0x79, 0x62, 0x37, 0x3e, 0x08, 0xbd, 0x4f, 0xb6, 0xa1, 0x2f, 0x85, 0xaf, 0x1f, 0xb7, 0x2c, 0x44, 0x04, 0x5d, 0x77, 0xea, 0xbe, 0x6a, 0xde, 0x48, 0x29, 0xd8, 0xc3, 0x49, 0x56, 0x08, 0x56, 0x6f, 0x8b, 0xb3, 0xb6, 0x6a, 0x8a, 0x23, 0x59, 0xe9, 0x16, 0xa3, 0xad, 0xb0, 0xb4, 0x34, 0xff, 0xea, 0xaf, 0x81, 0x9d, 0xc1, 0x5e, 0x15, 0x37, 0x2d, 0xa9, 0xcc, 0x8b, 0x09, 0xca, 0x87, 0x42, 0x6c, 0x51, 0x24, 0x14, 0x36, 0x6b, 0xae, 0x33, 0xe9, 0x63, 0xd0, 0xe7, 0xbb, 0x69, 0x90, 0x75, 0xe9, 0x93, 0x3a, 0x46, 0x4d, 0x21, 0x99, 0x45, 0x33, 0x05, 0x6d, 0x89, 0x69, 0xa3, 0x1a, 0x34, 0x95, 0xd5, 0x9e, 0x9b, 0xcb, 0x32, 0xc5, 0xa7, 0x5f, 0x90, 0xa0, 0x7b, 0xf8, 0xc7, 0x33, 0x56, 0xe6, 0xb8, 0x6e, 0xbb, 0xb6, 0x8e, 0x5f, 0xd0, 0x03, 0x44, 0xa5, 0x05, 0x8f, 0x68, 0x28, 0xf5, 0x92, 0x1e, 0x07, 0x91, 0x51, 0x67, 0xd2, 0x7b, 0xf3, 0xa3, 0xfa, 0xb0, 0x90, 0x55, 0x85, 0x6a, 0x8c, 0x27, 0x06, 0x45, 0x23, 0x2e, 0xcd, 0xa0, 0x44, 0x6e, 0x5b, 0x46, 0xa3, 0xa1, 0x19, 0x4e, 0x0a, 0x34, 0x49, 0x3f, 0xef, 0x93, 0x3c, 0x78, 0x4c, 0xa6, 0xc5, 0xcf, 0xab, 0x9b, 0xef, 0x79, 0x80, 0xe7, 0xeb, 0x2a, 0xbc, 0x87, 0x4c, 0x7c, 0x9f, 0x8c, 0x77, 0x95, 0xce, 0xd6, 0x54, 0x04, 0xa5, 0x20, 0x4a, 0xed, 0xce, 0x3d, 0x6b, 0x66, 0x13, 0xa0, 0xeb, 0x20, 0x70, 0x22, 0xd7, 0x4a, 0x6d, 0x00, 0x03, 0xb2, 0xab, 0x23, 0x45, 0x2e, 0xbc, 0xa5, 0xe0, 0x3a, 0x37, 0x90, 0x43, 0xe2, 0x0c, 0xe9, 0xf4, 0xe3, 0x16, 0xed, 0xc7, 0x0d, 0xef, 0x9a, 0x53, 0xeb, 0x08, 0x71, 0xa6, 0xa6, 0xf9, 0x7b, 0x38, 0x27, 0x15, 0x8a, 0x1e, 0x7c, 0x42, 0xc1, 0x80, 0x7d, 0x08, 0x56, 0x4d, 0xaf, 0xe7, 0x97, 0x2d, 0x68, 0xee, 0x2b, 0xb8, 0x34, 0x89, 0x9b, 0xe5, 0x78, 0x9b, 0x11, 0xc5, 0x55, 0xcc, 0x5f, 0x71, 0xcf, 0x25, 0x42, 0x41, 0x2f, 0xda, 0xe8, 0x3e, 0xa5, 0x66, 0xb1, 0xda, 0x32, 0xdd, 0x33, 0xdf, 0xc5, 0x7e, 0x80, 0xa6, 0xa5, 0x88, 0xab, 0x89, 0x0e, 0x50, 0x88, 0x9a, 0x1f, 0x8f, 0xb4, 0x96, 0xf4, 0x00, 0xd5, 0x14, 0x0f, 0x2b, 0x23, 0x02, 0xfc, 0x7b, 0x28, 0x52, 0x34, 0x97, 0xc3, 0xf1, 0x43, 0xef, 0x73, 0xf9, 0x26, 0x95, 0xd2, 0x27, 0xf7, 0x4f, 0x60, 0x8f, 0xcc, 0xea, 0x82, 0x8e, 0xdc, 0xd1, 0xcb, 0x01, 0xe3, 0xde, 0x79, 0xb4, 0xc8, 0x6f, 0x43, 0x1e, 0x7d, 0xbd, 0x52, 0x4b, 0x28, 0x69, 0x8d, 0x19, 0x80, 0x58, 0x19, 0xa7, 0x79, 0xc1, 0x20, 0x0b, 0x23, 0x84, 0xd2, 0x43, 0xcf, 0xbe, 0xaa, 0x6e, 0x75, 0x9a, 0xf3, 0x3d, 0x52, 0x6a, 0x8a, 0xa4, 0xd5, 0xf6, 0xe5, 0xd5, 0xbc, 0x13, 0x54, 0x6e, 0x7b, 0x78, 0x87, 0xf1, 0xdd, 0xce, 0x51, 0x76, 0xed, 0x06, 0xab, 0x9c, 0x17, 0xef, 0xfc, 0xc5, 0x8b, 0x08, 0x98, 0x83, 0xe2, 0x93, 0x86, 0x4d, 0x04, 0xea, 0x86, 0x77, 0x49, 0x16, 0x52, 0x61, 0xde, 0x9e, 0x25, 0xee, 0x6b, 0x9d, 0x7a, 0x37, 0xf2, 0x17, 0x16, 0x81, 0xfb, 0x8d, 0x48, 0x6d, 0xee, 0xcf, 0x70, 0x6f, 0xc0, 0x12, 0xbe, 0x81, 0xd1, 0x42, 0x3c, 0x19, 0x15, 0x9a, 0x0f, 0x58, 0x73, 0x71, 0xfa, 0x84, 0x6a, 0x57, 0x23, 0xb8, 0xfa, 0x60, 0x1a, 0xda, 0xc2, 0xc0, 0x17, 0xce, 0x66, 0x98, 0x83, 0xe9, 0x33, 0x10, 0xba, 0xa9, 0x06, 0xa6, 0x10, 0xa3, 0x69, 0xc6, 0x12, 0xbc, 0x00, 0x9a, 0x0e, 0x9c, 0x24, 0x23, 0xd5, 0x60, 0xcd, 0x89, 0xbf, 0x8f, 0xb5, 0xaf, 0xf0, 0x50, 0xba, 0x0b, 0xda, 0xda, 0x84, 0xb5, 0x03, 0x2b, 0x69, 0xbd, 0x08, 0xfd, 0x8d, 0xc2, 0xe3, 0xf6, 0x4e, 0xc0, 0x69, 0x1f, 0xdf, 0x2a, 0x16, 0x97, 0x32, 0x39, 0x0d, 0x89, 0x1c, 0x83, 0x5b, 0x5b, 0xb4, 0xcf, 0x7c, 0x28, 0xfc, 0x28, 0x20, 0x71, 0xc3, 0x30, 0x2f, 0x0f, 0xc9, 0xb7, 0x0a, 0x6c, 0x25, 0x8c, 0x14, 0xf3, 0xe4, 0x93, 0x71, 0xc5, 0xf3, 0x18, 0x0d, 0xae, 0x3f, 0x63, 0xe0, 0x57, 0x1a, 0x8d, 0x71, 0xbd, 0xe1, 0x92, 0x99, 0xe1, 0xdb, 0xa6, 0x8a, 0xc2, 0x65, 0xcd, 0x0f, 0x88, 0x4c, 0xa6, 0x16, 0x02, 0x7b, 0x87, 0x6b, 0x52, 0xd6, 0xcf, 0xc6, 0xe7, 0x65, 0x78, 0x08, 0xac, 0xb5, 0xec, 0xc2, 0x7f, 0x7b, 0x1a, 0xf7, 0xe5, 0x7b, 0xc8, 0x23, 0xfc, 0xa8, 0x2b, 0x7b, 0xb1, 0x8d, 0xb5, 0x77, 0x32, 0xeb, 0x2e, 0x8e, 0xa7, 0xa4, 0x06, 0x40, 0x1d, 0xd7, 0xea, 0x5a, 0xc2, 0x4d, 0x95, 0x76, 0x58, 0x14, 0xe9, 0xc1, 0xe4, 0x69, 0x3e, 0x01, 0xa6, 0xdc, 0xfa, 0xd6, 0x4e, 0xae, 0x61, 0x3f, 0x6d, 0x7e, 0xaf, 0x61, 0x2a, 0x24, 0x64, 0x84, 0x36, 0xde, 0xe0, 0x5f, 0x02, 0xaa, 0x2f, 0x95, 0x2f, 0xf2, 0x26, 0x7f, 0x46, 0x6e, 0xaf, 0x2c, 0xa9, 0x47, 0x61, 0xa6, 0xc9, 0x78, 0x54, 0x77, 0x9a, 0x7a, 0x33, 0x6c, 0x44, 0x20, 0x92, 0x99, 0x1c, 0xc0, 0x82, 0x9d, 0xd2, 0x93, 0x63, 0x28, 0xeb, 0x5e, 0xfa, 0xba, 0x72, 0x52, 0xc4, 0xad, 0xeb, 0x31, 0x89, 0x75, 0x89, 0xb3, 0x33, 0x27, 0xa1, 0x28, 0xe1, 0x38, 0x5d, 0x5e, 0x38, 0x87, 0xb5, 0xc5, 0xf9, 0x9e, 0x9b, 0xd1, 0xd9, 0x35, 0x76, 0xa0, 0x8d, 0xf8, 0xd2, 0xdd, 0x24, 0x8b, 0x56, 0xe4, 0x99, 0xca, 0xf6, 0x27, 0xa9, 0x55, 0x6a, 0xd0, 0xe2, 0x4c, 0xde, 0xa8, 0xfd, 0x57, 0xeb, 0x37, 0x6d, 0xea, 0xc6, 0x2d, 0x38, 0xc7, 0xb7, 0x00, 0x06, 0xc4, 0xcd, 0xd7, 0x77, 0xce, 0xd1, 0xa7, 0xba, 0x2e, 0x78, 0x9b, 0x5c, 0x0b, 0xdc, 0xba, 0x5d, 0x30, 0x2d, 0xc4, 0x89, 0x10, 0xa4, 0x5c, 0x05, 0x07, 0xb9, 0x6c, 0x29, 0xe3, 0x96, 0xc6, 0x8d, 0xa3, 0xcb, 0x07, 0x67, 0x7f, 0x43, 0xc1, 0x14, 0x28, 0x77, 0xd9, 0xf4, 0x50, 0xe1, 0x2d, 0x7b, 0x6d, 0xb4, 0x7a, 0x85, 0xba, 0xca, 0x7e, 0xea, 0x7f, 0xde, 0x59, 0x53, 0x93, 0xfb, 0x39, 0x4c, 0x1f, 0x34, 0x36, 0x9a, 0xa4, 0x96, 0x7b, 0xce, 0x40, 0x5b, 0xa7, 0x1a, 0x2d, 0x60, 0x73, 0x64, 0x8a, 0xda, 0x94, 0x99, 0x5e, 0x44, 0xe3, 0x44, 0xda, 0x9c, 0xbb, 0x5f, 0xde, 0xce, 0xa2, 0x68, 0xbf, 0x71, 0x2c, 0xb8, 0x48, 0xb1, 0x1d, 0x11, 0xfe, 0x8c, 0xce, 0x76, 0xa8, 0x42, 0xd2, 0x3f, 0x0f, 0x06, 0xd8, 0x6c, 0x03, 0xfa, 0xd3, 0x3a, 0x9e, 0x5a, 0x59, 0xf4, 0xcd, 0xf7, 0x49, 0x0c, 0x0b, 0xe8, 0xb1, 0x6a, 0x70, 0x7c, 0xef, 0x04, 0xeb, 0x73, 0x16, 0xaf, 0xcc, 0x6d, 0x93, 0x34, 0x85, 0xa2, 0x10, 0xa7, 0xb1, 0xd4, 0x98, 0xf4, 0x55, 0x82, 0xfc, 0xbb, 0x66, 0x5f, 0x76, 0x5e, 0x8c, 0x02, 0x8d, 0x58, 0x26, 0xdf, 0x38, 0xd0, 0x8e, 0x76, 0x46, 0x6d, 0x9e, 0xca, 0xfd, 0x6d, 0x73, 0x15, 0x02, 0xf1, 0x70, 0xba, 0x79, 0x9b, 0x86, 0x7b, 0x6c, 0x5b, 0xb3, 0xec, 0x71, 0x86, 0xc9, 0x27, 0x87, 0x29, 0x71, 0xc2, 0x42, 0x9c, 0x6f, 0xfe, 0x28, 0x5a, 0x28, 0x41, 0x5a, 0x0f, 0x61, 0xc7, 0x77, 0xf3, 0x49, 0x94, 0xbd, 0x57, 0xba, 0xad, 0x71, 0x7d, 0xbc, 0x87, 0x81, 0xad, 0x4b, 0xc0, 0x69, 0x85, 0x5a, 0x0d, 0x53, 0x91, 0x17, 0x74, 0x82, 0x1c, 0x71, 0xbb, 0xf0, 0x45, 0xd7, 0x20, 0x36, 0x55, 0x43, 0x4a, 0xad, 0x4f, 0x78, 0x80, 0xd3, 0xc9, 0x88, 0x19, 0xf0, 0xfb, 0x98, 0x33, 0xf9, 0x16, 0xe7, 0xa8, 0xb4, 0xd7, 0x0d, 0x3e, 0x1d, 0x5b, 0x81, 0x1e, 0x09, 0x35, 0x5e, 0x88, 0x09, 0xbe, 0x67, 0xc4, 0x91, 0xac, 0x48, 0x5c, 0x59, 0xe6, 0x1f, 0x88, 0x04, 0x97, 0x3a, 0xea, 0x00, 0x81, 0x22, 0x7b, 0xad, 0x95, 0xd9, 0xc6, 0xc1, 0xc0, 0x61, 0x54, 0xeb, 0x07, 0x7d, 0x67, 0xb6, 0xd6, 0xbc, 0xeb, 0xb1, 0x95, 0xb2, 0xa9, 0xcd, 0x7d, 0x89, 0xbe, 0x06, 0xaa, 0xb9, 0x4b, 0x45, 0x71, 0x13, 0x6f, 0x85, 0xf3, 0x04, 0x72, 0x35, 0xf2, 0x18, 0x43, 0xde, 0xe4, 0xbd, 0x25, 0x06, 0x46, 0x4a, 0xa5, 0x54, 0x33, 0x3f, 0xcf, 0xf5, 0x35, 0xce, 0xa1, 0x3d, 0x5b, 0x9b, 0xc0, 0x92, 0x8c, 0xc1, 0x6a, 0x86, 0x1a, 0x15, 0xac, 0x43, 0x9a, 0xae, 0xd5, 0x2c, 0xf4, 0xa5, 0x2a, 0xc1, 0xb6, 0x19, 0xdb, 0xc3, 0xae, 0x76, 0x36, 0x99, 0xb7, 0xf7, 0x1b, 0xf3, 0xd3, 0x6a, 0xb0, 0xad, 0x7a, 0x34, 0x55, 0xf6, 0x32, 0x94, 0xdb, 0xb1, 0x60, 0x2c, 0xf0, 0x1b, 0x5e, 0xbd, 0xde, 0xaf, 0xcd, 0x32, 0x76, 0x47, 0x2d, 0xe0, 0x46, 0x83, 0xab, 0x0c, 0x13, 0x6e, 0x39, 0xad, 0x83, 0x5f, 0xe4, 0x74, 0x19, 0x1e, 0x62, 0x0a, 0x66, 0x48, 0xeb, 0x99, 0x7e, 0xf5, 0x4b, 0x8d, 0xaa, 0x97, 0x34, 0x9c, 0x5c, 0x26, 0xd8, 0x03, 0x68, 0x7a, 0xb7, 0x13, 0x70, 0xf8, 0xb6, 0xed, 0xa0, 0x70, 0x72, 0x8a, 0x9c, 0x46, 0xd3, 0xfe, 0xb7, 0xd0, 0xe4, 0xfd, 0x66, 0x00, 0xe2, 0x9e, 0xf4, 0x43, 0x93, 0x5f, 0x77, 0xa8, 0xd8, 0x69, 0x02, 0x45, 0x86, 0x16, 0x1c, 0xd7, 0x72, 0xb1, 0x71, 0xa8, 0xcb, 0x7d, 0xc8, 0xb6, 0xad, 0xf8, 0x35, 0x11, 0xf2, 0x60, 0x90, 0x85, 0x4c, 0x77, 0x25, 0x79, 0x91, 0x84, 0xad, 0x17, 0x55, 0x9a, 0x7e, 0xad, 0xbe, 0x1c, 0xfe, 0x53, 0x94, 0x81, 0x5d, 0xcf, 0x98, 0x55, 0x84, 0xb5, 0x17, 0x80, 0x48, 0xd3, 0xbe, 0xcb, 0xe4, 0xcb, 0xb0, 0xa0, 0xa6, 0x02, 0xd6, 0x11, 0xe8, 0xb9, 0x76, 0x1d, 0x42, 0x7a, 0x08, 0x2e, 0xfe, 0xb6, 0x45, 0xe5, 0xcc, 0xac, 0x80, 0x1a, 0xb7, 0x8c, 0x39, 0x1f, 0x58, 0xdd, 0xf0, 0x45, 0x4a, 0x1c, 0x37, 0xa2, 0xde, 0xa6, 0x0b, 0x11, 0x0f, 0xd8, 0x64, 0x79, 0xb8, 0x74, 0x0b, 0x53, 0x04, 0x46, 0xac, 0x66, 0x26, 0x08, 0x2c, 0xd5, 0x4b, 0x84, 0x3c, 0x5c, 0xcd, 0xf8, 0x2f, 0xd7, 0xaa, 0xbe, 0x08, 0x04, 0x34, 0x2c, 0xd8, 0x89, 0x0a, 0xba, 0x47, 0x39, 0x46, 0x62, 0x70, 0x93, 0xf8, 0x4d, 0xf2, 0x8b, 0xd4, 0xab, 0x43, 0x8e, 0x27, 0xe3, 0x48, 0xc0, 0x10, 0xec, 0x23, 0x88, 0xec, 0xfa, 0x4d, 0x4e, 0x12, 0x5e, 0xe4, 0x83, 0xc1, 0xa7, 0x46, 0xe2, 0x56, 0x0e, 0xde, 0xf6, 0xc2, 0x11, 0x3e, 0xdd, 0x3c, 0x5d, 0x6e, 0x4b, 0x33, 0xf1, 0x84, 0xd2, 0x87, 0x81, 0x75, 0x60, 0xf8, 0x18, 0x2b, 0x09, 0xdf, 0x02, 0xd8, 0x06, 0x1c, 0xe9, 0x89, 0xfe, 0x4f, 0x3e, 0xfe, 0x85, 0x4b, 0xdb, 0xb9, 0xe3, 0xc7, 0xe6, 0x55, 0x16, 0x57, 0xf8, 0x19, 0x1a, 0x9b, 0x7e, 0xcd, 0x67, 0xb6, 0x60, 0xcc, 0xbc, 0x02, 0xe1, 0x5b, 0x1b, 0x03, 0xc7, 0x39, 0x14, 0x99, 0xbb, 0x78, 0x47, 0x79, 0xf2, 0x8a, 0x25, 0xdd, 0x0d, 0x9f, 0xf6, 0x7b, 0x3e, 0x2f, 0x20, 0xb4, 0xad, 0xd2, 0xa6, 0x0f, 0x1a, 0x58, 0xef, 0xe5, 0xc3, 0x16, 0xc9, 0x5e, 0x88, 0x7e, 0xad, 0x9c, 0x4d, 0xf3, 0x45, 0x35, 0xa0, 0xdb, 0x2b, 0xe7, 0x9b, 0xf5, 0xf4, 0x87, 0x0c, 0xec, 0x6d, 0x3b, 0xd4, 0x2d, 0x24, 0xe9, 0x8d, 0xf6, 0x2a, 0xef, 0x70, 0xb0, 0x18, 0x15, 0x75, 0x7f, 0x50, 0xbf, 0xbb, 0x17, 0x85, 0x68, 0x2b, 0xd1, 0x7e, 0x4b, 0x59, 0xfe, 0x16, 0x63, 0xaa, 0x7b, 0x88, 0x96, 0xbc, 0x86, 0xe9, 0x2e, 0x02, 0xcf, 0xf6, 0x88, 0xaf, 0xd2, 0x10, 0x10, 0xd6, 0x65, 0x85, 0x6d, 0xcf, 0x8d, 0x11, 0xf8, 0xdc, 0x96, 0xa5, 0x73, 0x0c, 0x63, 0x66, 0xf8, 0x60, 0x02, 0xf9, 0x2f, 0x2d, 0x83, 0xfe, 0xc4, 0xc1, 0x0b, 0xda, 0x18, 0x49, 0x24, 0xba, 0x37, 0xf3, 0x57, 0xd5, 0x0b, 0x4f, 0xfd, 0xf1, 0xcf, 0xfb, 0x52, 0x28, 0xc5, 0x7f, 0xcb, 0xec, 0x2c, 0x76, 0xaa, 0x49, 0x6d, 0xef, 0xcf, 0x6a, 0x95, 0x12, 0xd1, 0x5f, 0x07, 0x07, 0x4d, 0x1d, 0x73, 0x13, 0x7e, 0xc6, 0x02, 0x04, 0x0e, 0x2b, 0xd3, 0xd0, 0x2c, 0x90, 0xab, 0x79, 0xdf, 0xaf, 0xe8, 0x33, 0x9a, 0xff, 0xb7, 0xc9, 0x10, 0x35, 0x87, 0x3d, 0x49, 0x0b, 0xbe, 0xaf, 0xf6, 0x41, 0xaa, 0x7f, 0x02, 0xe2, 0xba, 0xb6, 0x69, 0xc9, 0xee, 0xa2, 0x4d, 0x63, 0x8c, 0xc1, 0x47, 0xb7, 0x15, 0xe1, 0xfb, 0xa3, 0x77, 0x84, 0xef, 0x68, 0x84, 0x89, 0x9d, 0x69, 0xa3, 0x09, 0xc6, 0x2f, 0xc5, 0x80, 0x0a, 0xb1, 0x9b, 0x2d, 0xb6, 0xd2, 0x07, 0xbb, 0xdd, 0x2c, 0xd0, 0x20, 0xaa, 0x0c, 0x99, 0xc6, 0xf4, 0xbd, 0x14, 0xe8, 0x13, 0x0a, 0x73, 0x40, 0xf2, 0xfe, 0x1f, 0xdf, 0x66, 0xee, 0xad, 0x5c, 0xbe, 0xba, 0x0e, 0x30, 0x9c, 0x4f, 0x05, 0x61, 0x03, 0x70, 0xde, 0x5e, 0xb0, 0xb7, 0x5e, 0x2a, 0xae, 0xd6, 0xf6, 0xbd, 0x25, 0x23, 0x3b, 0xa8, 0x73, 0x54, 0x9b, 0xf7, 0x7d, 0x86, 0x48, 0x5b, 0x47, 0x85, 0x79, 0x89, 0xc3, 0x47, 0xd2, 0xdd, 0xe7, 0xb9, 0x20, 0x43, 0x02, 0xbf, 0x4a, 0x57, 0x50, 0x75, 0x85, 0xcb, 0xcc, 0xbc, 0xc6, 0x09, 0x45, 0xf2, 0x7d, 0x1a, 0xb4, 0x00, 0x80, 0xc7, 0xcd, 0x9a, 0x45, 0xfe, 0xd4, 0xc2, 0x55, 0x77, 0xb2, 0x8e, 0xfd, 0x96, 0x48, 0x2c, 0x47, 0x94, 0x03, 0x23, 0x29, 0xda, 0xb1, 0xdb, 0xfb, 0xad, 0x93, 0x60, 0x2e, 0x10, 0xb3, 0x63, 0x3c, 0xe6, 0x77, 0x82, 0xdb, 0x58, 0x77, 0xc9, 0x76, 0x76, 0x8c, 0x78, 0xdd, 0x21, 0x29, 0x06, 0x3c, 0x28, 0xef, 0x67, 0x4a, 0xb1, 0x7b, 0x8b, 0xc2, 0xdb, 0x83, 0x27, 0x17, 0xa1, 0x21, 0xb7, 0x64, 0x02, 0x6e, 0xc4, 0xa1, 0x5e, 0x53, 0x62, 0x1d, 0x24, 0x9c, 0xfe, 0x28, 0xaa, 0x4e, 0x56, 0x10, 0x5c, 0x3b, 0xc9, 0x50, 0x19, 0xd3, 0xd1, 0x03, 0xda, 0x3d, 0xce, 0x9f, 0x95, 0xa7, 0x05, 0xdf, 0x61, 0xda, 0xe8, 0x01, 0xda, 0x11, 0x98, 0x32, 0xc7, 0x0b, 0xa8, 0x47, 0xfa, 0x5f, 0x24, 0xad, 0x78, 0x10, 0xd1, 0xa3, 0xda, 0x61, 0xb7, 0xa6, 0xf3, 0xea, 0xdd, 0x2d, 0xb3, 0xec, 0x54, 0x97, 0x4b, 0xe2, 0x76, 0x62, 0x92, 0x58, 0x70, 0x9d, 0xa8, 0x00, 0xfe, 0xa0, 0xd9, 0x03, 0x76, 0xfa, 0xc4, 0x95, 0x08, 0xab, 0xbc, 0xcc, 0x44, 0x94, 0x6e, 0xb2, 0xdc, 0x2b, 0xc4, 0x99, 0xac, 0x73, 0x0a, 0xae, 0xf7, 0x2c, 0x50, 0xd1, 0xf4, 0x46, 0x0f, 0xa4, 0x89, 0x9c, 0x0f, 0xe2, 0x56, 0xdf, 0x87, 0xf3, 0xf5, 0xd0, 0x87, 0xbd, 0x80, 0xb3, 0x93, 0xbc, 0x54, 0x00, 0x90, 0x55, 0x15, 0x5b, 0xe5, 0x67, 0xf3, 0xc6, 0xda, 0x24, 0x2b, 0x16, 0x43, 0x1f, 0xd0, 0xa3, 0x63, 0xa5, 0xcb, 0x44, 0x0b, 0x51, 0x21, 0x7b, 0x02, 0xdb, 0x74, 0xec, 0xa9, 0x31, 0xcd, 0x14, 0xdf, 0xc9, 0x98, 0x37, 0x23, 0x35, 0xf0, 0x9a, 0xf8, 0xf8, 0x1d, 0xf3, 0x8e, 0x98, 0x5b, 0x1e, 0x9e, 0xf4, 0xdd, 0x11, 0x96, 0xd8, 0x12, 0x12, 0xf6, 0xcf, 0x27, 0x28, 0xfa, 0x38, 0xcd, 0xcf, 0x79, 0x9c, 0x3c, 0xef, 0x0d, 0x3f, 0x78, 0x0f, 0x74, 0xf5, 0xd3, 0xc6, 0x36, 0x37, 0xb3, 0x73, 0x88, 0x76, 0x95, 0x2e, 0x71, 0xaf, 0x52, 0xff, 0x2b, 0x40, 0xa1, 0x4d, 0xcc, 0xfa, 0xde, 0x99, 0x26, 0x77, 0x0a, 0x6c, 0xeb, 0xae, 0x12, 0x8d, 0x15, 0xc4, 0x54, 0x78, 0x84, 0x26, 0x5f, 0x0c, 0xe9, 0xd4, 0xfa, 0x84, 0xe4, 0x00, 0x69, 0xa8, 0x69, 0xd7, 0xeb, 0x44, 0x68, 0x9f, 0x87, 0xda, 0xad, 0x02, 0x08, 0x94, 0x05, 0xa9, 0x47, 0x7c, 0xa2, 0x0d, 0xa8, 0xef, 0xc0, 0x8a, 0xe7, 0x4f, 0x89, 0xb6, 0x15, 0xf9, 0x36, 0xf0, 0xdd, 0x77, 0x78, 0x3c, 0x0c, 0xf6, 0x16, 0x4e, 0x51, 0xfa, 0xd7, 0xe4, 0x40, 0x50, 0xa2, 0x59, 0x9d, 0x45, 0xe4, 0x77, 0xd8, 0x15, 0x32, 0x8e, 0xd4, 0xa6, 0x30, 0xc2, 0xec, 0x76, 0xb1, 0xa9, 0x38, 0xd2, 0x1f, 0x16, 0x0c, 0x4a, 0x1e, 0x2f, 0xc2, 0x61, 0x6c, 0xc6, 0xba, 0x89, 0x0b, 0xe6, 0x9e, 0x4e, 0xa3, 0xab, 0xeb, 0xd1, 0x22, 0x57, 0xad, 0x78, 0xa5, 0xa3, 0x8a, 0xe4, 0x9b, 0x53, 0x01, 0x23, 0x27, 0x0d, 0xf4, 0x27, 0xc7, 0x6b, 0x64, 0x77, 0x34, 0x4f, 0x7d, 0x25, 0x89, 0x77, 0xd2, 0x00, 0xa6, 0x51, 0xe9, 0x0a, 0xd7, 0x10, 0xfa, 0x2d, 0xb1, 0xff, 0xf4, 0x29, 0x3d, 0x15, 0xc1, 0xd1, 0x59, 0xca, 0xcb, 0x77, 0x5a, 0x2a, 0xbf, 0xa5, 0xf6, 0x28, 0x91, 0x0e, 0x62, 0x34, 0xc0, 0xc3, 0xb7, 0x10, 0xdb, 0xaa, 0x9a, 0xdf, 0x44, 0x2d, 0x1c, 0x7f, 0x34, 0x2f, 0xdf, 0x18, 0xff, 0x44, 0x7b, 0xf5, 0x99, 0x21, 0x1f, 0x93, 0x59, 0x51, 0x7c, 0xf8, 0xfe, 0x2a, 0xde, 0x46, 0xf0, 0x00, 0x9c, 0x90, 0xc8, 0x98, 0xb3, 0xec, 0x11, 0xdf, 0xae, 0xca, 0x50, 0xdc, 0xc9, 0x84, 0x43, 0xe4, 0x55, 0x36, 0x67, 0x0d, 0x5e, 0xcf, 0xbc, 0xe5, 0x8c, 0x68, 0xcc, 0x63, 0x47, 0xd5, 0xea, 0x1d, 0x1e, 0x7a, 0xb8, 0xbc, 0x6a, 0x60, 0xec, 0xad, 0x2e, 0x89, 0x53, 0x1a, 0x42, 0x80, 0x16, 0x19, 0xb1, 0x33, 0x3c, 0x23, 0x5f, 0x05, 0x70, 0xc7, 0xef, 0x20, 0x04, 0x9f, 0xe3, 0x08, 0x37, 0x84, 0x05, 0x76, 0xb3, 0xfe, 0x06, 0x63, 0x5a, 0xfe, 0x66, 0x63, 0x42, 0xd0, 0x93, 0x34, 0xfe, 0x4b, 0x55, 0x97, 0x20, 0x4b, 0x69, 0x5e, 0xfb, 0x61, 0x6d, 0xc7, 0xae, 0xc8, 0xfc, 0x08, 0x5e, 0x9b, 0x19, 0x2b, 0xc2, 0x46, 0xd1, 0x1c, 0xe5, 0x3b, 0x1c, 0x01, 0x27, 0xe6, 0x05, 0xc9, 0x85, 0xe2, 0x0a, 0x08, 0x1b, 0x6d, 0xc6, 0x02, 0xe7, 0x19, 0xcd, 0x05, 0xd0, 0xc5, 0xd8, 0xfd, 0xe7, 0xcc, 0x22, 0x42, 0xec, 0x7c, 0x11, 0xb4, 0x14, 0xca, 0x19, 0x0a, 0x09, 0x43, 0xde, 0x67, 0x33, 0x46, 0x98, 0x2e, 0x36, 0x71, 0xbc, 0x18, 0xbc, 0x59, 0xd9, 0x84, 0x74, 0x7e, 0xbf, 0x0e, 0x5b, 0x7e, 0xe7, 0x62, 0x3a, 0x88, 0x0f, 0x53, 0x6f, 0x14, 0x25, 0x27, 0xf1, 0xd1, 0x66, 0x35, 0x8f, 0xdf, 0xc7, 0xb3, 0x78, 0x3f, 0x94, 0xc9, 0x00, 0x88, 0x57, 0xe9, 0xa1, 0xdb, 0xfb, 0x63, 0x40, 0x18, 0x31, 0x34, 0xb2, 0x52, 0x13, 0x1f, 0x7f, 0x81, 0x07, 0x00, 0xe6, 0x77, 0xe7, 0x5c, 0x21, 0x16, 0x5f, 0x3c, 0xea, 0xbf, 0x96, 0x3c, 0x3d, 0x0d, 0x10, 0xdf, 0x60, 0xc4, 0xd3, 0x25, 0x21, 0x04, 0xc8, 0x60, 0x5f, 0xc3, 0x65, 0x43, 0xcb, 0x7a, 0x89, 0x3c, 0xf0, 0x1d, 0xa7, 0x04, 0x71, 0x51, 0x27, 0x74, 0x92, 0xda, 0x09, 0x9a, 0xfa, 0x52, 0xcc, 0x0c, 0xb8, 0x21, 0x8e, 0x7c, 0x83, 0xa9, 0x74, 0x8d, 0x46, 0xc1, 0x4c, 0xe5, 0xdc, 0x65, 0x71, 0x83, 0x17, 0xab, 0xef, 0x53, 0x08, 0xf9, 0xe8, 0x00, 0x7a, 0x76, 0x37, 0x0a, 0xc0, 0xbe, 0x52, 0x18, 0xb1, 0xda, 0x75, 0x8f, 0xf0, 0x6f, 0xfd, 0x63, 0x71, 0x35, 0x12, 0x2e, 0x38, 0xab, 0x88, 0x7f, 0x64, 0x0a, 0x07, 0x74, 0x6d, 0x77, 0x6a, 0x8b, 0xaa, 0x7c, 0x66, 0xb5, 0x16, 0xb9, 0x6c, 0xac, 0x53, 0xd7, 0xd0, 0x87, 0xef, 0xbe, 0x2a, 0x8c, 0xe7, 0x08, 0xfd, 0x45, 0x69, 0xb5, 0x96, 0xd6, 0xde, 0x20, 0x37, 0x8d, 0x28, 0x31, 0x75, 0xbb, 0x28, 0xd5, 0xdf, 0xc2, 0x84, 0xab, 0xe0, 0x70, 0xa7, 0x01, 0xe7, 0x8b, 0x09, 0xfe, 0xc4, 0xad, 0xb0, 0x20, 0x56, 0x52 ],
-const [ 0x9c, 0xef, 0x28, 0x54, 0xf7, 0x87, 0x9c, 0x83, 0x0b, 0xa8, 0x61, 0xf6, 0xa9, 0x2e, 0xf7, 0x02, 0x5f, 0xb9, 0x8a, 0xec, 0xf1, 0x52, 0x0f, 0xac, 0x07, 0x51, 0x90, 0xf0, 0x24, 0x7d, 0xc4, 0x64, 0xd7, 0x76, 0xe3, 0x31, 0x35, 0x50, 0xb8, 0xc3, 0x86, 0x81, 0xf8, 0xd0, 0x3f, 0xfd, 0xd2, 0x96, 0x31, 0x9f, 0xc7, 0x64, 0xff, 0xcb, 0xbc, 0x5b, 0xd5, 0x52, 0x4e, 0x76, 0x57, 0x95, 0x65, 0xc8, 0xd8, 0xee, 0x0c, 0x05, 0xcd, 0x4b, 0x80, 0x44, 0x81, 0x1c, 0x86, 0x03, 0x0a, 0x70, 0x02, 0x6c, 0x7b, 0x5a, 0xc6, 0xd7, 0x5b, 0x9a, 0xa8, 0x8f, 0x56, 0x79, 0xd7, 0xd9, 0x33, 0xf5, 0x6f, 0x32, 0x06, 0x1e, 0x4a, 0xd9, 0xa7, 0xc0, 0x1a, 0x8d, 0x62, 0x42, 0xb4, 0x98, 0xf0, 0xce, 0xaf, 0x0c, 0xa6, 0xb3, 0x2e, 0x4d, 0xed, 0x07, 0xfa, 0xcf, 0xf2, 0x90, 0xd4, 0x21, 0x9f, 0xe5, 0x09, 0x2b, 0xc9, 0xd0, 0x46, 0xb4, 0xab, 0xf7, 0xae, 0x27, 0x93, 0xbb, 0x2a, 0x96, 0xdb, 0x61, 0x00, 0xff, 0x1b, 0x6f, 0xa8, 0xce, 0x9d, 0x59, 0xdb, 0xa4, 0x11, 0x5d, 0xec, 0x57, 0x82, 0xac, 0x5b, 0x3a, 0x89, 0xca, 0xa8, 0x9e, 0xc1, 0x37, 0x65, 0x98, 0x7a, 0x4f, 0x8f, 0x05, 0xb2, 0x6f, 0x1e, 0xcc, 0x41, 0x59, 0xdb, 0x63, 0x53, 0xda, 0x72, 0x95, 0x1b, 0xaa, 0xc8, 0x82, 0xc6, 0x93, 0x8e, 0xe7, 0xae, 0xd5, 0x17, 0x9f, 0xd1, 0xca, 0x66, 0x6a, 0x81, 0xc6, 0x8c, 0xee, 0x5d, 0x41, 0x31, 0xfb, 0x7f, 0x38, 0x70, 0x13, 0xf7, 0xd0, 0xe8, 0x2a, 0x78, 0x3d, 0x0f, 0xaa, 0x52, 0xe2, 0xca, 0xba, 0xa0, 0xb9, 0x3b, 0xc0, 0xc3, 0xf6, 0xda, 0x24, 0x0f, 0xe7, 0xc8, 0x58, 0xc3, 0x1f, 0x60, 0x15, 0x3f, 0xd3, 0x0e, 0xe7, 0x71, 0x84, 0x64, 0xeb, 0x91, 0xde, 0x6a, 0xd7, 0x0e, 0xe1, 0x36, 0x3c, 0xc8, 0x3e, 0xbd, 0x08, 0x7f, 0x04, 0xe9, 0x4f, 0x8b, 0x7b, 0xec, 0x4b, 0xce, 0x50, 0xd3, 0xa1, 0xe8, 0xf3, 0x5e, 0xe5, 0xa9, 0x3e, 0x0f, 0x61, 0xcc, 0x57, 0x81, 0x12, 0xe2, 0xd7, 0xfb, 0xf4, 0x8c, 0x2c, 0x45, 0x80, 0xed, 0x3c, 0xba, 0x72, 0x5f, 0x4a, 0x9f, 0xcf, 0x65, 0x1e, 0xb3, 0x27, 0xe2, 0x60, 0x07, 0x17, 0x88, 0x46, 0x10, 0x13, 0x92, 0x6f, 0xfb, 0x62, 0xb6, 0x0e, 0x40, 0x6a, 0x55, 0x4a, 0x7a, 0x2e, 0xf6, 0xe5, 0x76, 0x15, 0xf2, 0x1c, 0x8a, 0xed, 0x70, 0xcf, 0x28, 0x2f, 0x94, 0xe2, 0xb2, 0x85, 0xf4, 0xe3, 0x90, 0x89, 0x4c, 0xed, 0x81, 0xd0, 0x72, 0xcc, 0x2e, 0x27, 0x8c, 0x61, 0x05, 0x1c, 0x80, 0x48, 0x44, 0xc1, 0xac, 0xb9, 0x54, 0xac, 0xd8, 0xac, 0x59, 0x42, 0x68, 0x41, 0x07, 0x36, 0xd6, 0x5e, 0xb7, 0x4c, 0x60, 0x9a, 0xba, 0x63, 0xfe, 0x5a, 0xed, 0xb2, 0x97, 0x39, 0x8d, 0x52, 0x74, 0xae, 0x4d, 0xfc, 0xf5, 0xe9, 0xa6, 0x15, 0x83, 0xfd, 0x6f, 0xe7, 0xc5, 0x44, 0xad, 0x32, 0x17, 0xff, 0xac, 0xe3, 0x38, 0x3e, 0x4f, 0x23, 0x42, 0x00, 0xa4, 0x93, 0xe0, 0x9a, 0xbb, 0xd6, 0xbb, 0x5d, 0xb9, 0x51, 0x35, 0x73, 0x28, 0x2e, 0x5a, 0x0a, 0x91, 0xa7, 0x13, 0xb5, 0x4d, 0x81, 0x9d, 0x0e, 0x98, 0xd6, 0x3a, 0xa1, 0xe7, 0x18, 0x27, 0x05, 0x7c, 0x53, 0xcd, 0x4c, 0x37, 0xb2, 0x3b, 0x9e, 0xaf, 0x45, 0xd4, 0x20, 0x81, 0x01, 0x45, 0x1a, 0xe8, 0x09, 0xbb, 0x5a, 0x8e, 0x2c, 0x52, 0xd3, 0xa2, 0xae, 0xd0, 0x8a, 0x2b, 0x4b, 0x93, 0xb3, 0x9c, 0x79, 0xc8, 0x16, 0xa8, 0xee, 0xde, 0xb8, 0x57, 0x62, 0x3a, 0xb8, 0x5a, 0x96, 0x2d, 0x77, 0x9c, 0x95, 0x23, 0xfb, 0x19, 0x39, 0x1d, 0x96, 0xf3, 0xf2, 0x61, 0xc2, 0xc2, 0xc3, 0x6f, 0x50, 0x2c, 0x8d, 0x38, 0xc2, 0xb7, 0x90, 0x8b, 0xf5, 0xda, 0x2f, 0xd0, 0x03, 0x5a, 0xf3, 0xf8, 0x67, 0xd4, 0xd3, 0xb4, 0x62, 0x95, 0xb3, 0xe5, 0x9e, 0xb2, 0x2a, 0x54, 0x12, 0x56, 0x88, 0xa4, 0x25, 0x56, 0x18, 0x85, 0x16, 0x0b, 0xa2, 0x2a, 0x9b, 0x60, 0x34, 0xfc, 0xc8, 0x2a, 0x22, 0x90, 0x33, 0xb8, 0x4c, 0xd6, 0x56, 0xab, 0x9f, 0x94, 0x34, 0x08, 0xdf, 0x13, 0x40, 0x8c, 0xa3, 0x19, 0x7a, 0x40, 0xa1, 0x16, 0xdb, 0x4d, 0x2b, 0xa2, 0xf3, 0x10, 0xfa, 0x27, 0xd1, 0x71, 0x2b, 0xdb, 0x23, 0x71, 0x87, 0xf2, 0x9e, 0x03, 0x07, 0x11, 0xa0, 0x1d, 0x97, 0x05, 0x14, 0x0e, 0x1b, 0xb5, 0x97, 0x12, 0xb0, 0x55, 0xd8, 0x24, 0x34, 0xdd, 0x45, 0x13, 0x08, 0xba, 0xe4, 0xd8, 0x14, 0xc3, 0x7e, 0x27, 0x0c, 0x6e, 0x03, 0x44, 0xf2, 0x44, 0x2a, 0x18, 0xdd, 0x92, 0x58, 0x84, 0xf8, 0x62, 0xc3, 0xf5, 0xcd, 0xa9, 0xd7, 0x39, 0xc4, 0xc2, 0xd9, 0x91, 0xe6, 0x1b, 0xca, 0x07, 0xe7, 0x2f, 0x8e, 0x01, 0x64, 0xb4, 0x4d, 0x17, 0x69, 0x15, 0x1a, 0x22, 0x36, 0x22, 0xd2, 0x95, 0x43, 0x07, 0x47, 0x11, 0x81, 0x7a, 0x9e, 0x33, 0xe3, 0x39, 0xf6, 0xb1, 0x1d, 0xb4, 0x4b, 0xa5, 0xac, 0x06, 0x99, 0x28, 0x16, 0x2a, 0x44, 0x23, 0x73, 0x6c, 0xb7, 0x62, 0x2c, 0x1d, 0x4b, 0xea, 0x03, 0x8b, 0x6b, 0x8d, 0x53, 0x31, 0xf7, 0xbb, 0x99, 0x2a, 0xe5, 0x9b, 0x34, 0xec, 0x2e, 0x5a, 0x69, 0x32, 0xe8, 0xc4, 0xaa, 0x3a, 0xaf, 0x11, 0x18, 0x31, 0x4a, 0x01, 0x46, 0xec, 0x8c, 0x2b, 0x40, 0xd8, 0x77, 0x91, 0xcc, 0x34, 0xa8, 0x79, 0xef, 0x7d, 0xef, 0x78, 0xb3, 0x2a, 0x3d, 0xd0, 0x28, 0x9a, 0xc3, 0xfc, 0xa9, 0x4b, 0x58, 0x88, 0x60, 0x4c, 0x1b, 0x26, 0x0d, 0xf5, 0x5a, 0xff, 0x02, 0xd5, 0xb3, 0x47, 0x72, 0xec, 0x79, 0x14, 0xec, 0x1a, 0x5a, 0x70, 0x23, 0xd8, 0x3e, 0xac, 0xf0, 0x26, 0x71, 0xf8, 0x9a, 0xc4, 0x05, 0x31, 0x54, 0xa5, 0x72, 0xfa, 0x07, 0xa1, 0x80, 0x0e, 0x52, 0x6a, 0x67, 0xd5, 0xd0, 0xc1, 0x34, 0x35, 0x99, 0xea, 0x6e, 0xaa, 0x0b, 0x5d, 0xfa, 0x99, 0xca, 0xbe, 0x3c, 0xe1, 0x05, 0x0f, 0x7f, 0xb4, 0xfb, 0x25, 0x97, 0xa5, 0xbe, 0x58, 0xc4, 0x01, 0x37, 0x7f, 0xda, 0x63, 0x6b, 0x1c, 0x9f, 0x83, 0xfc, 0xd3, 0x75, 0x4f, 0xf3, 0x21, 0x39, 0x3d, 0xbc, 0x4a, 0x6a, 0xdf, 0x72, 0x93, 0x8e, 0xb8, 0x5e, 0xb2, 0xd1, 0x4e, 0xba, 0x83, 0xf0, 0x80, 0xba, 0xfc, 0x55, 0x1a, 0xcd, 0x63, 0x84, 0xa7, 0x20, 0xbe, 0xb5, 0x86, 0x63, 0x8c, 0xc2, 0x40, 0xd1, 0xb2, 0x44, 0x19, 0x6a, 0xb8, 0xf9, 0xe5, 0x83, 0x35, 0x6a, 0x1d, 0x81, 0x88, 0xca, 0x32, 0xe2, 0xc9, 0x20, 0x21, 0x7d, 0x00, 0xa9, 0x48, 0x0a, 0x94, 0x77, 0x78, 0xe4, 0x06, 0x5f, 0x4b, 0x0e, 0xde, 0x12, 0xb8, 0x74, 0xe6, 0x8a, 0xe4, 0x74, 0x97, 0xa8, 0x3b, 0x9d, 0xd1, 0x1b, 0xc0, 0xb7, 0xcf, 0x83, 0xa1, 0x03, 0x59, 0xd6, 0x0f, 0xc4, 0x3b, 0x03, 0x4c, 0xfd, 0xf7, 0xd6, 0x06, 0x7d, 0xb7, 0x1c, 0xe3, 0x19, 0x85, 0x07, 0x5d, 0x39, 0xbe, 0xd4, 0xd0, 0x96, 0xc4, 0xaa, 0xd1, 0x41, 0xf4, 0xc6, 0xc2, 0xe8, 0xd8, 0xd5, 0xa3, 0x55, 0x9d, 0xa1, 0x2b, 0x37, 0xc7, 0xf0, 0x18, 0x25, 0x23, 0xa9, 0xc3, 0xe0, 0xfd, 0x39, 0xf7, 0xd8, 0x94, 0x35, 0x03, 0xf2, 0xcb, 0x41, 0x0e, 0x89, 0x21, 0x30, 0xab, 0xb3, 0xe3, 0x6d, 0xae, 0xc5, 0xa1, 0x99, 0x3d, 0x19, 0xde, 0x75, 0x2a, 0x0e, 0x0b, 0x03, 0x80, 0x51, 0xb7, 0xe8, 0x5b, 0x5b, 0x00, 0x15, 0xfd, 0x3b, 0x4d, 0xa6, 0x1f, 0x96, 0x3f, 0x0a, 0x85, 0xec, 0xe4, 0x65, 0xd5, 0x1c, 0x2e, 0x32, 0xa9, 0x2b, 0xa4, 0x2d, 0xe3, 0x41, 0x58, 0x70, 0x41, 0xf4, 0x19, 0xdc, 0x31, 0xc9, 0xe9, 0xba, 0xe6, 0xf8, 0xb2, 0xa2, 0xab, 0x70, 0x34, 0x9c, 0x77, 0x1b, 0x42, 0x86, 0xc2, 0x63, 0x2e, 0xb6, 0x98, 0xf5, 0x82, 0xe0, 0xec, 0xc5, 0xf0, 0x39, 0x2e, 0x52, 0x8c, 0xdc, 0x20, 0x2b, 0x39, 0x6d, 0xe5, 0xb2, 0x61, 0xfd, 0x5a, 0x20, 0xea, 0x2e, 0xaa, 0xc9, 0x65, 0x98, 0x1d, 0xa2, 0x88, 0x6b, 0x31, 0x00, 0xde, 0x55, 0xec, 0xa2, 0xbd, 0xa6, 0x70, 0xf2, 0x79, 0xb2, 0xd0, 0x88, 0xd7, 0x76, 0x22, 0xf0, 0xc4, 0x7f, 0xd6, 0xad, 0x47, 0x08, 0x46, 0x7d, 0xb5, 0x63, 0x8d, 0xdf, 0x24, 0x9a, 0x9d, 0xd3, 0x21, 0x55, 0x8c, 0xe1, 0xa6, 0xfe, 0x2f, 0x5c, 0x46, 0x24, 0xea, 0xe8, 0xab, 0x1d, 0xc6, 0x3a, 0x42, 0xf0, 0xc4, 0x1f, 0x35, 0x72, 0x72, 0xc0, 0x9a, 0xae, 0xbb, 0x24, 0xea, 0x8a, 0x03, 0xf6, 0xb4, 0xa8, 0x74, 0x89, 0x92, 0x8b, 0x92, 0x19, 0x5d, 0xfb, 0x16, 0x54, 0x9d, 0xaa, 0xf9, 0x18, 0x43, 0x17, 0xcf, 0x7f, 0x9b, 0xb3, 0x56, 0x19, 0x7c, 0x43, 0x4f, 0x78, 0xc2, 0x85, 0x8c, 0xf2, 0xfd, 0x16, 0x4b, 0xa2, 0x6b, 0x93, 0xc2, 0xb0, 0x24, 0xfe, 0xfb, 0xd2, 0x95, 0x64, 0xe2, 0x13, 0x2f, 0xbd, 0x9d, 0xd4, 0x60, 0x14, 0x1b, 0x10, 0xc3, 0xe8, 0xf0, 0xe4, 0x94, 0xd1, 0x60, 0x4e, 0x66, 0x67, 0xb9, 0x35, 0x18, 0x5f, 0xe7, 0xa9, 0x05, 0xf7, 0x42, 0x6d, 0x7b, 0x95, 0xaa, 0xb2, 0x6f, 0xaa, 0xd6, 0x26, 0x6e, 0xdd, 0xe9, 0x2d, 0xd7, 0x66, 0x46, 0x6e, 0x48, 0xb7, 0xa6, 0x92, 0x56, 0x62, 0x68, 0x48, 0x81, 0x37, 0x28, 0x8d, 0x66, 0xac, 0x92, 0x2a, 0x37, 0x83, 0x78, 0x7e, 0x69, 0xa6, 0x23, 0x7d, 0xac, 0x56, 0xe7, 0xf9, 0x20, 0x84, 0xfa, 0x21, 0xc6, 0x7f, 0x87, 0x47, 0x35, 0xd0, 0xfd, 0xe6, 0x8e, 0x62, 0xad, 0xe3, 0xb1, 0xe7, 0x94, 0x13, 0xb1, 0x76, 0x75, 0xfe, 0x86, 0x79, 0x2c, 0xe2, 0x02, 0xc6, 0x3e, 0xfb, 0x07, 0x0c, 0xb4, 0x02, 0xf6, 0x71, 0x2a, 0xf4, 0x6a, 0x79, 0x23, 0x14, 0x27, 0x2a, 0x9f, 0x33, 0x4d, 0x6e, 0xf0, 0x2f, 0xd2, 0xb8, 0xc9, 0xba, 0x2e, 0xea, 0x98, 0x5c, 0x58, 0x77, 0x15, 0xbb, 0xf2, 0xc4, 0x1b, 0x1b, 0xc0, 0xd5, 0xb8, 0x21, 0x5f, 0x25, 0x80, 0xdc, 0x34, 0xd5, 0x26, 0x06, 0xa2, 0x09, 0x4d, 0x86, 0x80, 0x90, 0x9b, 0x3a, 0xca, 0xc3, 0x0f, 0xf4, 0x96, 0xaf, 0x95, 0xc2, 0x4a, 0x76, 0xd8, 0x73, 0x0d, 0xf2, 0x58, 0x56, 0x7b, 0x9c, 0xbc, 0x45, 0x9d, 0xac, 0x69, 0xe2, 0x18, 0x82, 0x53, 0x21, 0xa4, 0x45, 0x13, 0x07, 0xc0, 0xca, 0x3b, 0xb1, 0xa5, 0xb7, 0xe6, 0x97, 0x78, 0xe8, 0x93, 0x12, 0xc3, 0x11, 0x33, 0x1c, 0x26, 0xa5, 0x80, 0x57, 0x4a, 0xf7, 0x91, 0x52, 0x17, 0xa0, 0xab, 0x07, 0x27, 0x20, 0x5b, 0xa8, 0x7a, 0xc8, 0xc1, 0x9b, 0x6b, 0xd7, 0x2f, 0xc3, 0xe2, 0xe3, 0xf3, 0x01, 0xcc, 0x7a, 0x70, 0xfa, 0xc8, 0x0a, 0x74, 0x1b, 0x23, 0xfe, 0xc5, 0xdb, 0x07, 0x2a, 0xfd, 0x40, 0xef, 0x69, 0x98, 0xa5, 0x5e, 0x84, 0x4c, 0xba, 0xd1, 0x56, 0x99, 0xcc, 0xf2, 0x2e, 0xa0, 0x47, 0x0e, 0x75, 0x38, 0x79, 0xc9, 0x91, 0x3f, 0x98, 0x11, 0x08, 0x2e, 0x07, 0x50, 0xe9, 0xf0, 0xd5, 0xe6, 0x68, 0xf5, 0x87, 0xd6, 0xc8, 0x82, 0x17, 0xbf, 0x7e, 0x4b, 0x3c, 0x0f, 0x93, 0x43, 0xec, 0x73, 0x4a, 0xb3, 0x1f, 0x92, 0x03, 0x89, 0xd7, 0xfa, 0x5f, 0xf3, 0x5d, 0x5a, 0xa5, 0x2d, 0xcd, 0xf3, 0x64, 0x98, 0xd4, 0x49, 0x5a, 0x0b, 0xb9, 0x1e, 0x95, 0x6d, 0x9a, 0xa0, 0xd8, 0x84, 0xf9, 0xe2, 0x40, 0x08, 0x77, 0x89, 0x27, 0xfc, 0xde, 0xc8, 0x49, 0x3e, 0x65, 0x8e, 0x25, 0x5c, 0x30, 0xfd, 0xa7, 0xa9, 0x17, 0x1f, 0x03, 0x90, 0xa8, 0xd4, 0xe4, 0x29, 0x6f, 0x0f, 0xc6, 0x0a, 0x75, 0x42, 0xa0, 0x60, 0x06, 0x17, 0xc7, 0x3e, 0xb7, 0x61, 0x0f, 0x34, 0xa8, 0x52, 0x33, 0x24, 0x07, 0xee, 0x77, 0x51, 0xd5, 0xbf, 0x8b, 0xb9, 0xed, 0xcb, 0xb3, 0xa5, 0x42, 0xc3, 0x25, 0x7e, 0x68, 0x7d, 0xb2, 0xe2, 0x56, 0xa4, 0xa9, 0xf7, 0x6a, 0xaf, 0xf9, 0xff, 0xad, 0x0f, 0x95, 0x2d, 0x59, 0xad, 0x1d, 0xb7, 0x98, 0x93, 0xba, 0x2d, 0x8f, 0xe9, 0x4a, 0x09, 0x9b, 0x24, 0xbd, 0x87, 0xda, 0x7a, 0xbe, 0xb7, 0xee, 0x99, 0x96, 0xd0, 0xfd, 0x98, 0x4e, 0xc7, 0xfc, 0x2e, 0x14, 0x20, 0x2e, 0x22, 0xe1, 0x05, 0xe7, 0x02, 0x58, 0x95, 0x96, 0x18, 0xf0, 0x7e, 0x02, 0x9a, 0x55, 0xce, 0xd4, 0x21, 0x0c, 0x06, 0x56, 0x5c, 0x56, 0x70, 0x7a, 0x06, 0x58, 0xb3, 0x1e, 0x15, 0x78, 0xa5, 0x8e, 0x35, 0x0a, 0x60, 0x4b, 0x74, 0x2c, 0x98, 0x0b, 0x3f, 0xee, 0x2c, 0x00, 0x8d, 0xb7, 0xfa, 0x5d, 0x5a, 0xe4, 0xf8, 0x17, 0x57, 0xb1, 0x81, 0xe8, 0xe0, 0x5d, 0xec, 0x9a, 0x2e, 0x89, 0x63, 0x82, 0xce, 0xe2, 0xf2, 0x4b, 0x51, 0xff, 0xdf, 0xf5, 0x46, 0x8c, 0x3a, 0x1c, 0x65, 0xa9, 0xb4, 0x7e, 0x0d, 0x8d, 0xb5, 0xb8, 0xf1, 0x6f, 0xa8, 0x50, 0x0e, 0xa6, 0x9a, 0xf8, 0xe0, 0x0f, 0x03, 0x11, 0xd5, 0xaf, 0xe3, 0x6f, 0x02, 0x99, 0x11, 0x5c, 0x14, 0x12, 0xd0, 0xdf, 0x8a, 0xf4, 0xa4, 0x3e, 0x22, 0x50, 0x64, 0xc1, 0x91, 0x57, 0x8f, 0xb9, 0x77, 0x7b, 0xe3, 0xc1, 0x92, 0xd1, 0x2c, 0x44, 0x32, 0xba, 0x5b, 0x3f, 0xed, 0xc2, 0xd7, 0x48, 0x93, 0xc8, 0x18, 0xd0, 0x65, 0x60, 0x71, 0xa5, 0x81, 0x75, 0x2d, 0xba, 0xa1, 0x33, 0xde, 0x2b, 0x05, 0x23, 0xf2, 0x7c, 0xae, 0x98, 0x87, 0x22, 0xcd, 0x4b, 0x81, 0x44, 0x7b, 0x42, 0xd9, 0xc2, 0xaa, 0xf6, 0x37, 0x77, 0x5c, 0xb4, 0xc4, 0xbb, 0x13, 0x44, 0x39, 0x2c, 0x88, 0xc9, 0x3d, 0xaf, 0x9f, 0xe8, 0xed, 0xb1, 0x9b, 0x2c, 0xbc, 0xb3, 0x8e, 0xa9, 0x7d, 0x05, 0x14, 0xe0, 0xbe, 0xd1, 0x41, 0xe3, 0x58, 0x5c, 0xd8, 0xba, 0x44, 0x89, 0xbe, 0x04, 0xb0, 0x9f, 0xae, 0xe1, 0x52, 0x4b, 0x2d, 0x10, 0xfd, 0xe9, 0xc1, 0x55, 0x72, 0xff, 0x5e, 0x1e, 0x78, 0x0a, 0x21, 0x65, 0x2f, 0x7e, 0x41, 0xd8, 0xa1, 0x08, 0x42, 0x38, 0x9a, 0x16, 0x6b, 0xff, 0xba, 0x99, 0x7b, 0x45, 0xc8, 0x09, 0x98, 0xe4, 0x49, 0xaa, 0x88, 0xdb, 0x51, 0x0f, 0x23, 0xf0, 0x9a, 0xdc, 0x08, 0x9a, 0xd3, 0xd0, 0x90, 0x1d, 0x3a, 0x02, 0x00, 0xf7, 0x6d, 0x6a, 0x03, 0x7b, 0x7d, 0xa4, 0x57, 0xbc, 0x45, 0xf1, 0xc6, 0xac, 0xfa, 0x7f, 0x58, 0x85, 0x03, 0xea, 0xc7, 0x68, 0x0a, 0x02, 0x33, 0x44, 0x53, 0xcf, 0x17, 0xfa, 0x4c, 0xd2, 0x7c, 0xbf, 0x66, 0x8e, 0x6c, 0xc1, 0x24, 0x47, 0xaa, 0x0d, 0x71, 0x0a, 0xa0, 0xb0, 0x37, 0xed, 0x99, 0x1c, 0x2d, 0x98, 0x30, 0xce, 0xf1, 0x04, 0x08, 0x2e, 0x56, 0x83, 0xbe, 0xb7, 0xff, 0x01, 0x1c, 0x57, 0x2d, 0x89, 0x90, 0x19, 0xd5, 0x0b, 0xdc, 0x01, 0xf6, 0x5c, 0x0e, 0x37, 0x29, 0x7e, 0xb3, 0x69, 0x7a, 0x22, 0x48, 0x6a, 0x76, 0x6b, 0xf1, 0x1f, 0x85, 0xf5, 0x6e, 0x9b, 0x7a, 0x16, 0x4a, 0x89, 0x69, 0x63, 0x55, 0xca, 0xb8, 0x76, 0x55, 0x60, 0x79, 0xef, 0xf9, 0x8b, 0xf7, 0xb9, 0x0e, 0x31, 0x8f, 0x8f, 0xf5, 0x83, 0xc2, 0xbe, 0x55, 0xde, 0x88, 0x2c, 0x0d, 0xef, 0xe6, 0x99, 0x6d, 0x1b, 0xc2, 0x25, 0xa5, 0x1e, 0xf7, 0x12, 0x7d, 0xf2, 0xa5, 0xcc, 0x47, 0xf2, 0xca, 0x26, 0x12, 0x3f, 0x17, 0xe7, 0x21, 0x63, 0xfc, 0x85, 0x9c, 0x34, 0x06, 0x30, 0x84, 0xfb, 0x6a, 0x12, 0xec, 0xd6, 0xe2, 0xd6, 0x67, 0x5b, 0xb7, 0x67, 0xbd, 0x7e, 0x1f, 0xfa, 0xe2, 0xb5, 0xca, 0x4e, 0x28, 0x5a, 0xb8, 0x32, 0xb3, 0x50, 0x4d, 0x49, 0x2d, 0xe9, 0xa7, 0x0a, 0xbc, 0x07, 0x2f, 0x0a, 0x31, 0x82, 0x6e, 0x7e, 0x83, 0xca, 0x23, 0xfb, 0x7b, 0xce, 0x92, 0x81, 0xb0, 0x1c, 0x1e, 0xb8, 0xb6, 0x49, 0x1a, 0x79, 0x93, 0x93, 0xdd, 0x90, 0x72, 0xc5, 0x14, 0xc1, 0x9c, 0x5b, 0x5d, 0x09, 0xa3, 0xe7, 0x11, 0x25, 0xe0, 0xb3, 0x60, 0x59, 0x20, 0xa8, 0xa4, 0x6a, 0x9b, 0x6e, 0xef, 0xec, 0x26, 0xd5, 0xe6, 0xc4, 0xa9, 0x74, 0xd3, 0xe5, 0xd2, 0x90, 0xf5, 0x5d, 0x0b, 0x3f, 0x1b, 0x95, 0xaa, 0xcc, 0x71, 0xd4, 0x68, 0x5e, 0x99, 0x06, 0x15, 0xd5, 0xfd, 0xbc, 0x8a, 0xf5, 0x64, 0x73, 0xde, 0xc6, 0xc4, 0x19, 0xdd, 0x3a, 0x57, 0xcd, 0xb5, 0x11, 0xf1, 0xe7, 0xf3, 0xfa, 0x91, 0x38, 0xae, 0xfb, 0x36, 0x93, 0x02, 0x12, 0xf4, 0x8b, 0xc1, 0x1d, 0x46, 0x7f, 0x64, 0xf7, 0xa6, 0xd4, 0x48, 0xe4, 0x5b, 0x82, 0x17, 0x2f, 0x93, 0xd2, 0x83, 0x11, 0xb1, 0x66, 0x3b, 0xd5, 0xe8, 0x79, 0x17, 0x3a, 0x09, 0x68, 0x96, 0x19, 0x99, 0x71, 0x8b, 0x47, 0x27, 0xbb, 0x13, 0xbd, 0xdc, 0x97, 0xca, 0xf6, 0x54, 0x06, 0x3f, 0x99, 0xac, 0x7b, 0xa5, 0x58, 0xdd, 0xe2, 0xcb, 0x18, 0x48, 0xe0, 0x4e, 0x52, 0x92, 0x5d, 0x0d, 0xb9, 0xb1, 0x40, 0xdd, 0x1d, 0x47, 0x79, 0x7e, 0x8f, 0x2f, 0x45, 0xce, 0xc6, 0x56, 0xad, 0x3d, 0xc1, 0xcd, 0x50, 0x81, 0xae, 0x1c, 0x63, 0x8b, 0x0b, 0xd8, 0xf6, 0xb9, 0x0b, 0x78, 0x79, 0x4d, 0x3b, 0x64, 0x7e, 0x1e, 0x65, 0x4f, 0xc1, 0x8d, 0xb4, 0xc7, 0x65, 0xbb, 0x1a, 0x0a, 0x80, 0xf9, 0xef, 0x1c, 0xda, 0x80, 0xdb, 0x16, 0xf2, 0x63, 0xf5, 0xc1, 0x42, 0xc1, 0x2c, 0x63, 0xc4, 0x3f, 0xe7, 0xd9, 0xb5, 0xb5, 0xe8, 0xe6, 0x99, 0x28, 0x76, 0xcb, 0x7f, 0xf9, 0xbb, 0x18, 0x86, 0x5b, 0x6b, 0xc1, 0xa0, 0x0a, 0xa6, 0x74, 0x96, 0x3b, 0x20, 0x2a, 0x4d, 0xce, 0x7f, 0xfd, 0x47, 0xcb, 0x04, 0x39, 0x6c, 0x0c, 0x6e, 0xb5, 0x0b, 0x37, 0x1b, 0x64, 0x1c, 0xf0, 0x71, 0x27, 0xc8, 0x4c, 0x7c, 0xe5, 0x2b, 0x88, 0xd8, 0xde, 0x58, 0xfb, 0xd2, 0x3c, 0x9d, 0x49, 0xca, 0xeb, 0x09, 0xda, 0xdc, 0xab, 0x2c, 0x8a, 0xbf, 0x64, 0x1e, 0xa2, 0xec, 0xb9, 0xc3, 0x08, 0x03, 0xdf, 0x4c, 0xb2, 0x6b, 0xb0, 0x01, 0x60, 0x39, 0xfb, 0x3e, 0x8b, 0x54, 0x1f, 0xbc, 0x98, 0xd6, 0xd8, 0x12, 0x52, 0xb5, 0x58, 0x7c, 0x97, 0xa2, 0x9a, 0xda, 0x51, 0x31, 0xf3, 0xfc, 0xa9, 0x3b, 0xea, 0x1c, 0x77, 0x81, 0x49, 0xac, 0xfc, 0x91, 0x74, 0x53, 0xd3, 0xee, 0xfa, 0x32, 0x25, 0x6b, 0x6a, 0x6b, 0x1d, 0xd8, 0x68, 0xe4, 0x9b, 0xe0, 0xff, 0x48, 0x2d, 0x32, 0x39, 0x4f, 0x3b, 0xdf, 0xed, 0x40, 0x81, 0x03, 0xd9, 0xb4, 0xc2, 0xa8, 0xf0, 0x9c, 0xbb, 0xe7, 0xf5, 0x85, 0x57, 0x50, 0x49, 0x1b, 0x21, 0x8d, 0x02, 0xec, 0xfe, 0x41, 0x3c, 0x6f, 0x1c, 0x36, 0xb4, 0x45, 0x26, 0xb8, 0x93, 0xbe, 0xba, 0x3c, 0x87, 0x9f, 0x1c, 0x46, 0x18, 0x23, 0x2c, 0x89, 0x3a, 0x3f, 0x95, 0x4f, 0x1e, 0x2a, 0x48, 0x1b, 0x4e, 0x1d, 0x29, 0x8d, 0xf9, 0x58, 0x07, 0x87, 0x8b, 0x65, 0xd2, 0x8e, 0x81, 0xa0, 0x08, 0x73, 0x7c, 0xf7, 0x71, 0x32, 0x94, 0xef, 0x0c, 0x1a, 0xee, 0xe7, 0x49, 0x2e, 0x91, 0xa1, 0x78, 0xcc, 0x75, 0xfe, 0x82, 0x8c, 0xdd, 0x09, 0xd7, 0x6b, 0xe7, 0x37, 0xa7, 0x29, 0x62, 0xee, 0x55, 0xef, 0xdf, 0x43, 0x29, 0x35, 0x0b, 0x08, 0x45, 0xe3, 0x3c, 0x06, 0xda, 0xb6, 0x49, 0x87, 0x9b, 0xe6, 0x9f, 0x18, 0x72, 0x06, 0x91, 0x8c, 0x72, 0x2b, 0xf0, 0x44, 0x0e, 0x50, 0xdc, 0xae, 0x88, 0xf9, 0xd9, 0x0c, 0xac, 0x17, 0x26, 0x77, 0xbd, 0x2c, 0x4a, 0x23, 0xb0, 0xaf, 0xef, 0xe4, 0x98, 0xb2, 0xf3, 0xf1, 0x62, 0xc2, 0xbd, 0xe9, 0xc2, 0x0f, 0xcd, 0x13, 0x6d, 0xcd, 0x97, 0xea, 0x89, 0xd9, 0x92, 0xd9, 0x61, 0xa0, 0x8c, 0x43, 0x5e, 0x3d, 0x40, 0xc6, 0x33, 0xe1, 0x2a, 0xc1, 0x57, 0x78, 0x9a, 0x13, 0xb8, 0x89, 0x08, 0x26, 0xae, 0x5e, 0xa7, 0x2d, 0x2d, 0x66, 0x3c, 0xa9, 0x40, 0xd7, 0x31, 0x32, 0xb2, 0x97, 0xe5, 0x74, 0x0e, 0x5d, 0x47, 0x78, 0xcb, 0x14, 0xa3, 0x25, 0xc0, 0x80, 0xbc, 0x06, 0xde, 0x23, 0x1a, 0x4d, 0x1d, 0x62, 0xa5, 0x18, 0xb7, 0xe4, 0x73, 0xf4, 0x95, 0x3b, 0xdf, 0x9f, 0x06, 0xc6, 0xdb, 0x13, 0xb7, 0xd5, 0x87, 0xbf, 0xe0, 0x0f, 0x02, 0x18, 0xbb, 0x11, 0x7f, 0x50, 0x3a, 0x58, 0x9c, 0x65, 0xf9, 0x61, 0xf0, 0x5e, 0x72, 0x0e, 0xe3, 0xd2, 0x70, 0x4c, 0xc3, 0xa9, 0xc6, 0xf3, 0x14, 0x26, 0x40, 0xee, 0x27, 0x26, 0xda, 0x9b, 0xee, 0xa2, 0x30, 0x74, 0x0e, 0x7b, 0x36, 0xf0, 0x36, 0x77, 0x29, 0xa4, 0xaf, 0x86, 0xc5, 0xae, 0x35, 0x4b, 0xb9, 0x53, 0x06, 0xd7, 0x58, 0xe7, 0x38, 0xb8, 0x91, 0xed, 0x4f, 0x32, 0x21, 0x80, 0x0f, 0xcc, 0x07, 0xf2, 0x8f, 0x0f, 0x38, 0xb2, 0x8f, 0x8a, 0x95, 0x73, 0x0b, 0x19, 0x1a, 0x8a, 0x11, 0x67, 0x58, 0x98, 0xcf, 0xb2, 0x25, 0x6a, 0xf0, 0xce, 0x92, 0x1d, 0x29, 0x6d, 0x1d, 0x86, 0x0e, 0x9d, 0x28, 0xd1, 0x2b, 0x92, 0xaa, 0x67, 0x50, 0xa6, 0x25, 0x16, 0x2c, 0x9e, 0xd8, 0x6c, 0x1d, 0x2f, 0x35, 0x63, 0x47, 0xc1, 0x95, 0x44, 0xe4, 0x72, 0x2b, 0xc5, 0xda, 0x5e, 0x36, 0x74, 0x93, 0x1e, 0x7b, 0x59, 0x09, 0x8e, 0xf3, 0xd7, 0x20, 0xd3, 0xc1, 0xd4, 0x39, 0x9d, 0x66, 0x1a, 0x04, 0xaa, 0x38, 0xfc, 0x95, 0x8c, 0x11, 0x3c, 0xbb, 0xab, 0x44, 0x2c, 0x8d, 0x8d, 0xd5, 0x14, 0x45, 0x55, 0xe9, 0xd4, 0x52, 0x8a, 0x7b, 0xca, 0xa8, 0x1a, 0x51, 0xf6, 0x5b, 0x9f, 0x2e, 0x5c, 0x6c, 0xe0, 0x4a, 0xaa, 0xe3, 0x9b, 0xff, 0x1b, 0x1d, 0x82, 0xc5, 0x9b, 0x68, 0x83, 0x60, 0x2c, 0xcd, 0x4c, 0x58, 0x88, 0x2d, 0x0f, 0xaa, 0x08, 0x90, 0x82, 0xbd, 0xc4, 0xb9, 0x2b, 0x97, 0xfc, 0xfe, 0xda, 0x51, 0xb7, 0x56, 0x77, 0xc8, 0xa9, 0xb4, 0xfd, 0x96, 0x5a, 0x93, 0xc7, 0x41, 0x85, 0xd2, 0x0b, 0xb1, 0xbe, 0xc3, 0xa4, 0xe8, 0x58, 0x7f, 0x14, 0xed, 0x86, 0x7c, 0xc9, 0x09, 0xc0, 0x61, 0x9f, 0x36, 0x69, 0x18, 0xa7, 0xd5, 0xae, 0x25, 0x27, 0x9f, 0xb1, 0x37, 0xe1, 0xde, 0xe7, 0xfd, 0x98, 0xdd, 0xbe, 0x3b, 0xd1, 0x9d, 0x84, 0x1d, 0xd7, 0xc9, 0x84, 0xcb, 0x01, 0xec, 0x72, 0x3d, 0x37, 0xe2, 0x09, 0x51, 0xb3, 0x8d, 0xf2, 0x1b, 0x05, 0xc9, 0xe8, 0x7c, 0x5a, 0xa1, 0x1a, 0xf6, 0xfd, 0xc3, 0xd0, 0xbe, 0x1e, 0x31, 0x52, 0x13, 0xd3, 0x3a, 0x06, 0xcf, 0x5c, 0xa9, 0xd8, 0x3c, 0xab, 0x3c, 0xde, 0x28, 0x24, 0x57, 0x3c, 0x3c, 0xa1, 0xfa, 0x46, 0x89, 0xb9, 0xf1, 0xe5, 0x64, 0x42, 0x4a, 0x3c, 0x74, 0x14, 0x0c, 0x8b, 0x09, 0x10, 0x26, 0x53, 0xaf, 0x61, 0xa6, 0xbb, 0x04, 0x02, 0x2b, 0x32, 0xc6, 0x80, 0x9d, 0x56, 0x30, 0x02, 0x1b, 0x14, 0x87, 0x86, 0x35, 0x11, 0xf0, 0x6d, 0x5c, 0x49, 0x84, 0x3a, 0x96, 0xf7, 0xa6, 0x97, 0x77, 0xb4, 0x94, 0x99, 0x4c, 0xe2, 0x3d, 0x44, 0x99, 0x4b, 0x53, 0x52, 0xc6, 0x06, 0xa0, 0x30, 0x15, 0x9b, 0x9d, 0x4a, 0xd7, 0x66, 0x41, 0x88, 0xe0, 0x41, 0x17, 0x18, 0x38, 0x5d, 0x93, 0x6f, 0x13, 0x71, 0xa6, 0x8a, 0x03, 0x17, 0x90, 0x7a, 0x6d, 0x72, 0xf6, 0x1f, 0x3a, 0x15, 0x34, 0x34, 0xce, 0x20, 0xf4, 0x8b, 0x3e, 0xac, 0x00, 0x9a, 0xbd, 0x6a, 0x54, 0x37, 0x58, 0x86, 0x78, 0xa0, 0xe4, 0xd2, 0x0c, 0xbe, 0x34, 0x20, 0xa4, 0xab, 0x8f, 0xef, 0xd7, 0x71, 0x60, 0x4b, 0x93, 0x15, 0x30, 0xee, 0xb3, 0xd4, 0xd2, 0xab, 0xd4, 0xac, 0xdd, 0x0d, 0x64, 0x1e, 0x60, 0x3b, 0xfb, 0x33, 0xd0, 0x1e, 0xef, 0xbd, 0x45, 0xc6, 0x23, 0xdf, 0xe6, 0x0a, 0x1f, 0xcf, 0xa2, 0x6f, 0x66, 0xdb, 0x22, 0x4c, 0x03, 0xaa, 0xfb, 0x2b, 0x66, 0xc5, 0x27, 0x71, 0x6e, 0x55, 0xb6, 0x42, 0xc7, 0x2f, 0xc1, 0x9f, 0x76, 0x0d, 0xa0, 0xd1, 0xb2, 0x1e, 0x5c, 0x0b, 0xf6, 0xc2, 0x67, 0x4b, 0x54, 0x8e, 0x8b, 0x81, 0x0c, 0x97, 0x21, 0xf3, 0x5d, 0xed, 0x83, 0xe0, 0x9b, 0x65, 0xc4, 0x63, 0x82, 0x9c, 0x9e, 0x9b, 0xca, 0x38, 0xab, 0x09, 0xfb, 0x71, 0xd8, 0x39, 0x83, 0xd1, 0x18, 0xa5, 0x06, 0x37, 0x55, 0xd6, 0xf5, 0x22, 0xac, 0xcc, 0x62, 0x2c, 0xd9, 0xa0, 0x13, 0xd5, 0xf0, 0x68, 0xd5, 0x82, 0x4f, 0x5b, 0x12, 0xc6, 0xd0, 0x36, 0xa6, 0xdf, 0x43, 0xde, 0xef, 0x84, 0x1b, 0x46, 0x23, 0xde, 0x67, 0x93, 0xe7, 0xd4, 0x04, 0x7e, 0x1d, 0x8b, 0x11, 0xfa, 0xfd, 0x2d, 0xa4, 0x17, 0x67, 0xea, 0xbb, 0x27, 0x77, 0x3d, 0x76, 0x1f, 0x5b, 0x71, 0x83, 0x40, 0x61, 0x63, 0xd9, 0xf6, 0x54, 0x89, 0xa9, 0x00, 0x09, 0x33, 0x91, 0xd1, 0x35, 0x11, 0x14, 0x36, 0x81, 0xf6, 0x47, 0x3a, 0xe1, 0xdb, 0xcc, 0x47, 0x21, 0x27, 0x04, 0x8d, 0xc1, 0x2e, 0x81, 0xa7, 0x02, 0xf7, 0xba, 0x7c, 0x41, 0x42, 0x03, 0x64, 0x84, 0xc9, 0xbc, 0x8d, 0x53, 0xc7, 0xc8, 0x9c, 0xc9, 0xb7, 0x41, 0x97, 0xea, 0x5e, 0x69, 0x02, 0x37, 0x0b, 0xe4, 0x48, 0x80, 0x1e, 0x25, 0x5d, 0xfa, 0xc7, 0x27, 0xa2, 0x91, 0x10, 0x5d, 0x09, 0x7f, 0x1e, 0xeb, 0x79, 0x1e, 0xb3, 0x16, 0x74, 0xfa, 0xf8, 0xf9, 0xf7, 0x2b, 0x7a, 0x7a, 0xa1, 0xe2, 0x72, 0x7d, 0x18, 0x41, 0x49, 0x58, 0xa9, 0x70, 0x5b, 0x86, 0x2e, 0xed, 0xfc, 0x9f, 0x35, 0x23, 0xb8, 0x87, 0x5e, 0x3f, 0xdf, 0xe6, 0x05, 0x3f, 0x42, 0xd9, 0x21, 0x4b, 0x37, 0xe8, 0x6c, 0x49, 0xe3, 0x37, 0xc5, 0xac, 0xb8, 0x00, 0xd2, 0x8c, 0x3c, 0x40, 0xe9, 0xfc, 0x0c, 0xb1, 0x31, 0x98, 0x21, 0xf9, 0x04, 0x5d, 0x53, 0x21, 0x98, 0xbe, 0x1b, 0x48, 0xdf, 0xf3, 0x9d, 0x99, 0xab, 0x95, 0xe6, 0x7a, 0x16, 0x68, 0x72, 0x06, 0x21, 0x78, 0xf1, 0xbe, 0x9b, 0x67, 0x4a, 0x7b, 0x45, 0x05, 0xe1, 0xa8, 0x33, 0x21, 0x16, 0xad, 0x75, 0x9f, 0x0e, 0xae, 0xf7, 0xcb, 0xb5, 0x76, 0xa6, 0xed, 0x03, 0xae, 0xd4, 0x1e, 0x7f, 0x53, 0xde, 0x59, 0x02, 0x67, 0x0c, 0xd5, 0xbe, 0xe6, 0xb8, 0x92, 0x7e, 0xfb, 0xb3, 0x32, 0x2f, 0x74, 0xe4, 0x0b, 0xa0, 0x74, 0x32, 0x7a, 0x86, 0x67, 0xa5, 0x7a, 0xc3, 0x3b, 0xc7, 0x75, 0xe8, 0xce, 0x51, 0x5a, 0xf8, 0xa2, 0x03, 0xef, 0x6f, 0xd8, 0xd4, 0x69, 0x82, 0x5c, 0x4b, 0x3a, 0xa9, 0x5d, 0x2d, 0x2a, 0x5b, 0x00, 0x58, 0xa9, 0x18, 0x55, 0xef, 0x63, 0xad, 0x8a, 0xb7, 0x16, 0xb4, 0x5e, 0xc1, 0xa0, 0x5a, 0xd9, 0x4a, 0x5d, 0x65, 0x3a, 0xdf, 0xaf, 0x75, 0x32, 0xc5, 0xde, 0x89, 0x4f, 0x97, 0x23, 0xc6, 0xbb, 0x31, 0xff, 0x74, 0x26, 0xcd, 0xd1, 0x4a, 0x01, 0x6c, 0xa8, 0xeb, 0xed, 0x78, 0x56, 0xb0, 0x73, 0xa7, 0xc6, 0xa8, 0xf5, 0x22, 0x8f, 0xdd, 0xe4, 0xe7, 0xc8, 0xd9, 0x34, 0x6b, 0x1f, 0x69, 0x0d, 0x84, 0x25, 0xa1, 0xc4, 0x87, 0xec, 0x20, 0x09, 0xad, 0xd4, 0x96, 0x62, 0xbc, 0xa2, 0x83, 0xd8, 0xe3, 0xd2, 0x41, 0xef, 0xe5, 0x2f, 0x44, 0xdc, 0x7a, 0xa0, 0xa1, 0xf3, 0xf2, 0x45, 0xcd, 0x5f, 0x1b, 0xc2, 0xa7, 0x15, 0x65, 0xdb, 0xb9, 0x0b, 0x44, 0x42, 0xbb, 0xa4, 0xd6, 0xac, 0x59, 0x6f, 0xc6, 0x2a, 0x37, 0x12, 0x70, 0xb7, 0x31, 0x81, 0x45, 0x0d, 0xe7, 0x74, 0x71, 0xbe, 0x79, 0x17, 0xbc, 0x7f, 0x8f, 0x03, 0xae, 0xc7, 0x9d, 0x6d, 0xf7, 0x99, 0x65, 0x9d, 0x0e, 0x9d, 0xbd, 0xa2, 0x17, 0x76, 0x92, 0x45, 0x0a, 0x50, 0x2d, 0x3b, 0x12, 0xb8, 0xb5, 0x9f, 0x33, 0xb1, 0xf5, 0x9f, 0x30, 0x04, 0x60, 0x75, 0xac, 0xd7, 0x52, 0x99, 0x8f, 0x81, 0x99, 0x34, 0xab, 0x9d, 0x34, 0xd8, 0xa0, 0x5d, 0x5a, 0x6f, 0xfc, 0x22, 0xbf, 0x72, 0xa7, 0x49, 0x12, 0x5c, 0x7f, 0x47, 0xca, 0x5d, 0x3f, 0xf8, 0x22, 0x52, 0xa5, 0x34, 0x62, 0xf5, 0xd4, 0xa4, 0x61, 0x51, 0xf7, 0xd3, 0x48, 0x7a, 0x27, 0x88, 0x98, 0x7a, 0x8f, 0x54, 0x6f, 0x8e, 0xcd, 0x67, 0x07, 0x93, 0x9c, 0xa7, 0x7f, 0xbb, 0xb0, 0x04, 0xde, 0x84, 0xe2, 0x05, 0x55, 0xeb, 0x8d, 0xa7, 0xc4, 0xdc, 0x38, 0x68, 0x80, 0xee, 0x75, 0x9f, 0x54, 0x4d, 0x08, 0x0e, 0xc5, 0xf7, 0x4c, 0xba, 0x9a, 0x2c, 0xd3, 0xfb, 0x9c, 0x1f, 0x4d, 0xcf, 0x9b, 0xf2, 0xab, 0x73, 0xb1, 0xe1, 0x84, 0x35, 0xcb, 0xbe, 0xb7, 0x84, 0x64, 0x9d, 0x52, 0x49, 0x94, 0xd0, 0xb2, 0x7a, 0x4a, 0x16, 0xec, 0xeb, 0xd5, 0x0f, 0x6c, 0x68, 0xaa, 0xf3, 0xdc, 0x02, 0x61, 0x84, 0x48, 0xa6, 0x00, 0x41, 0x7f, 0xf4, 0x7c, 0xdd, 0xbc, 0x4d, 0x7d, 0xef, 0x85, 0x2e, 0x62, 0xeb, 0xd4, 0xbd, 0x85, 0x51, 0x75, 0xa2, 0xc0, 0x24, 0xaf, 0x18, 0x30, 0x9e, 0x26, 0x44, 0x38, 0x22, 0x00, 0xc5, 0xc9, 0x72, 0x47, 0x8c, 0xe1, 0x22, 0x8e, 0xee, 0x52, 0x4d, 0xd8, 0xf7, 0xc5, 0x86, 0xb5, 0x02, 0xfe, 0x11, 0xae, 0x86, 0x62, 0x54, 0xe3, 0x33, 0xb6, 0x88, 0xf3, 0x3e, 0x29, 0xb4, 0x1c, 0xf9, 0x95, 0xdc, 0xa4, 0xa6, 0x02, 0x75, 0x77, 0x8d, 0x6c, 0x1d, 0x11, 0x4c, 0xc6, 0x89, 0x9e, 0x6f, 0x3e, 0xbf, 0x60, 0x40, 0xc3, 0x85, 0x52, 0xe0, 0xc4, 0x19, 0x0b, 0x97, 0x3b, 0x22, 0xe4, 0x69, 0xeb, 0xe7, 0x5d, 0xea, 0xe5, 0xbf, 0xbd, 0x53, 0x51, 0xc8, 0xf9, 0xd4, 0x6b, 0xdc, 0xd7, 0x2c, 0xcc, 0xc1, 0x53, 0x78, 0xeb, 0xa0, 0x42, 0x48, 0xe3, 0xb9, 0x35, 0xf8, 0x77, 0x54, 0xa0, 0x3e, 0x53, 0xfb, 0x3c, 0xff, 0x94, 0xe6, 0xa9, 0x67, 0x8b, 0xb7, 0x58, 0x38, 0xbe, 0x68, 0xa8, 0x62, 0x30, 0x81, 0x4f, 0xd5, 0xe3, 0x8e, 0xfc, 0x93, 0x9a, 0xd0, 0x3b, 0x09, 0xe3, 0x33, 0x98, 0x9f, 0x55, 0x80, 0x07, 0x8e, 0x17, 0xd4, 0x83, 0xf1, 0xa2, 0x51, 0xf6, 0x20, 0xc7, 0x13, 0x59, 0x39, 0xf3, 0x65, 0x1c, 0xff, 0xb2, 0x35, 0xc8, 0xe8, 0x72, 0xc6, 0xe3, 0x71, 0x8a, 0xa5, 0x14, 0xb5, 0x7a, 0xde, 0x87, 0x3e, 0x74, 0x6f, 0x93, 0x1b, 0x1c, 0xfd, 0x9a, 0x32, 0x8d, 0xc6, 0x31, 0xd8, 0x9c, 0xd7, 0x81, 0x9f, 0x60, 0x7f, 0xed, 0x6f, 0xf2, 0x03, 0xf6, 0xd9, 0x71, 0x93, 0x5b, 0xa7, 0x49, 0x7d, 0x84, 0xb8, 0xb5, 0xa1, 0x20, 0x0b, 0x83, 0x25, 0x0e, 0x19, 0x18, 0x6a, 0x79, 0x68, 0xb3, 0x3e, 0x48, 0x5d, 0xf6, 0x53, 0xb5, 0x52, 0xa2, 0xef, 0x3b, 0xe8, 0xa2, 0xe6, 0xb6, 0x9e, 0x4b, 0xc6, 0xc6, 0xa3, 0xe2, 0x51, 0x74, 0xe9, 0x5e, 0x30, 0x18, 0x7b, 0x70, 0xe5, 0x7a, 0x10, 0xc1, 0x02, 0x37, 0xe0, 0x7b, 0x98, 0x66, 0xb6, 0x0a, 0xf3, 0x7c, 0x47, 0x24, 0x84, 0x6d, 0xc2, 0x06, 0x1f, 0x14, 0xa8, 0x01, 0x67, 0xd5, 0xde, 0x36, 0x86, 0x81, 0x01, 0x9e, 0x21, 0x79, 0xf9, 0x4d, 0x8a, 0x17, 0xd1, 0xf7, 0x38, 0x49, 0xc5, 0xb3, 0x75, 0x7f, 0x9d, 0xff, 0x57, 0xc8, 0x3a, 0x04, 0xf1, 0x37, 0x6f, 0x1c, 0xca, 0x8c, 0x12, 0x92, 0x8f, 0x10, 0x52, 0xa9, 0x04, 0xc1, 0x4a, 0xdf, 0x40, 0xaf, 0xd7, 0x72, 0x1a, 0xa6, 0xa7, 0x24, 0xdf, 0x0d, 0x93, 0x3b, 0x46, 0x0e, 0x2f, 0xcd, 0xa5, 0xf8, 0x9f, 0x3a, 0x64, 0xe1, 0xac, 0xfa, 0xb2, 0x8f, 0x17, 0x99, 0x78, 0x99 ],
-const [ 0x1d, 0x91, 0xb8, 0x6a, 0xcc, 0x6e, 0xa1, 0x70, 0xbf, 0xcf, 0x18, 0x7f, 0x77, 0x3b, 0x57, 0x7b, 0x95, 0xe2, 0x9d, 0x36, 0xfb, 0x30, 0x77, 0x9d, 0x2e, 0xa2, 0x3e, 0x2f, 0xfe, 0xd9, 0xe1, 0xb4, 0x6a, 0xed, 0xe4, 0x2b, 0xbe, 0x03, 0xa9, 0x04, 0xfe, 0x22, 0xef, 0x8f, 0x87, 0x42, 0x98, 0xb5, 0xf4, 0xa6, 0xaf, 0xe6, 0x3f, 0x6c, 0xa9, 0x52, 0x28, 0x63, 0xeb, 0x5c, 0xdb, 0x1c, 0x8d, 0x4b, 0xcd, 0x44, 0x5e, 0x43, 0xe7, 0x30, 0x28, 0x75, 0xe6, 0xba, 0x35, 0x92, 0x02, 0x4c, 0x11, 0x85, 0xcd, 0x3a, 0x92, 0x61, 0x5f, 0x55, 0x16, 0x98, 0xb0, 0xbd, 0x0c, 0x6f, 0x45, 0xf6, 0xb6, 0xae, 0x0f, 0x3e, 0x2c, 0x9c, 0x90, 0x1e, 0xa5, 0x2a, 0x3f, 0x40, 0xf2, 0x6f, 0x2e, 0x80, 0x4b, 0x54, 0xea, 0x45, 0x4e, 0x91, 0xa2, 0x12, 0x45, 0xd8, 0x8c, 0x58, 0xa8, 0x4f, 0x85, 0x8f, 0xe3, 0x44, 0xf8, 0x84, 0x58, 0x1d, 0x00, 0xf5, 0xa8, 0x8d, 0xd1, 0x5b, 0x2e, 0x0e, 0x54, 0x07, 0xcd, 0x8b, 0x11, 0x70, 0xec, 0x5c, 0x52, 0xcc, 0xbe, 0x78, 0x85, 0xdd, 0xc7, 0xe6, 0xe3, 0x0e, 0x9c, 0x75, 0x4f, 0xbe, 0xea, 0xad, 0x81, 0xdc, 0xb9, 0x05, 0x63, 0xb4, 0xf2, 0x57, 0xbb, 0x08, 0x1f, 0x90, 0x0b, 0x63, 0x73, 0xac, 0xb5, 0xaa, 0x0a, 0xe2, 0x63, 0xf4, 0x71, 0x1b, 0xa6, 0x9b, 0x69, 0xa9, 0xde, 0x94, 0xe8, 0x36, 0x59, 0xfb, 0x61, 0xfa, 0xbf, 0xf2, 0x45, 0x32, 0xad, 0xac, 0xca, 0xcd, 0xa0, 0xc5, 0xeb, 0x68, 0x15, 0xd5, 0xb0, 0x7c, 0xee, 0x44, 0xaf, 0xd6, 0x18, 0x60, 0xd3, 0x48, 0x6b, 0xac, 0x5c, 0x9f, 0xd1, 0x7b, 0x27, 0xd4, 0xab, 0xbe, 0x30, 0x87, 0x70, 0x1b, 0x55, 0xa8, 0x97, 0x3f, 0x5d, 0x78, 0xb8, 0x74, 0x38, 0xb0, 0xee, 0x76, 0x88, 0xff, 0x7f, 0x82, 0x61, 0xba, 0xbf, 0xb1, 0x4d, 0xd0, 0x31, 0x84, 0x94, 0xfc, 0xf0, 0xc0, 0xba, 0x3e, 0x4d, 0x7c, 0x48, 0x8b, 0xba, 0x78, 0xd0, 0xc4, 0xe7, 0xb0, 0x2b, 0xe5, 0x2a, 0x31, 0x05, 0x7f, 0x24, 0x2c, 0x9c, 0x68, 0xa2, 0x49, 0xc4, 0xb0, 0xc1, 0x3d, 0x2f, 0xd8, 0x56, 0x9f, 0xeb, 0x3f, 0x8c, 0xf7, 0x2c, 0xdd, 0xcf, 0x19, 0x4c, 0x33, 0xe9, 0xb1, 0x10, 0x82, 0x6b, 0x1e, 0x2d, 0x3c, 0x4f, 0x84, 0x0a, 0xb8, 0xdb, 0x1c, 0xc8, 0x29, 0xc9, 0xcf, 0x80, 0xd1, 0xa4, 0x04, 0xcb, 0x72, 0x75, 0xb6, 0x88, 0x06, 0x9f, 0xc9, 0xd9, 0xaf, 0x08, 0x9e, 0x6f, 0xf1, 0x79, 0xe5, 0x08, 0x1f, 0x48, 0xb2, 0x35, 0x13, 0x34, 0xd3, 0x61, 0x22, 0x90, 0x62, 0x0f, 0x50, 0xa4, 0x96, 0x63, 0xbf, 0x50, 0xde, 0xe4, 0x6e, 0xf2, 0x31, 0x80, 0x20, 0x8a, 0x9f, 0xd1, 0x99, 0x1c, 0x2d, 0x9e, 0x10, 0x56, 0xdf, 0xa5, 0xe2, 0x73, 0x16, 0x97, 0x84, 0x5f, 0x1c, 0x65, 0xbb, 0x1c, 0xfe, 0xba, 0x0f, 0x64, 0x9a, 0xc8, 0x7d, 0x90, 0xf8, 0x48, 0x6c, 0xb8, 0xde, 0xbc, 0xe2, 0x1c, 0x9e, 0xf8, 0xf8, 0xc2, 0x33, 0xe0, 0x8b, 0x61, 0x8c, 0x73, 0x35, 0x7e, 0x28, 0x09, 0x7b, 0xd5, 0xe3, 0xd8, 0x48, 0xfa, 0x10, 0xbd, 0x9b, 0x40, 0xc7, 0x3a, 0x7c, 0xda, 0x80, 0xbb, 0x34, 0x40, 0xe1, 0x1d, 0xbd, 0xd5, 0xd5, 0x70, 0x78, 0xc6, 0xde, 0xfc, 0x1e, 0x35, 0xac, 0x83, 0xf9, 0x97, 0xee, 0xc6, 0x54, 0x5a, 0x68, 0x4a, 0x30, 0xcb, 0x46, 0x5c, 0x38, 0x38, 0xb0, 0x53, 0xf7, 0x51, 0x9e, 0x15, 0x49, 0xd4, 0xee, 0xdd, 0x0f, 0x6a, 0xb4, 0x3b, 0x27, 0xcc, 0xd1, 0x5c, 0x9c, 0x29, 0xc7, 0x8b, 0x19, 0xcc, 0xcb, 0xf8, 0xa4, 0xfa, 0x1c, 0xb8, 0x88, 0x19, 0x94, 0x0e, 0x93, 0x18, 0x7c, 0xe9, 0x82, 0x0a, 0xa5, 0xad, 0xba, 0x14, 0xb4, 0x36, 0x39, 0x8a, 0xbe, 0x1b, 0xcb, 0x55, 0x15, 0x2f, 0x81, 0x98, 0x61, 0x4e, 0x5f, 0x93, 0xf2, 0x56, 0x55, 0xc7, 0x54, 0x73, 0x71, 0x5a, 0x24, 0xa0, 0x52, 0xbe, 0x23, 0x6a, 0xe0, 0x8e, 0x89, 0xf7, 0x3a, 0xb8, 0x9c, 0x48, 0xf0, 0xe1, 0x80, 0xbb, 0x73, 0x05, 0x51, 0xd4, 0xc9, 0x5e, 0x6f, 0x3c, 0x85, 0x88, 0x19, 0x0a, 0xf7, 0xe2, 0x3e, 0x42, 0xa0, 0x37, 0x8f, 0x9b, 0xe8, 0x9e, 0xd9, 0x86, 0x14, 0x9e, 0x92, 0x6b, 0x72, 0x96, 0xb2, 0x36, 0xd6, 0x5c, 0xc4, 0x12, 0x4a, 0x25, 0x3c, 0x74, 0x02, 0xa5, 0x0b, 0x5c, 0x8e, 0x77, 0x71, 0xd8, 0x53, 0xbe, 0x12, 0xc9, 0x3c, 0x0d, 0x4d, 0xe9, 0xad, 0x84, 0xc9, 0x0d, 0xb9, 0x3c, 0x50, 0xa8, 0x94, 0xe6, 0xe1, 0x91, 0x4b, 0xae, 0x00, 0x06, 0xb2, 0x66, 0x51, 0xf0, 0x9e, 0xe0, 0x65, 0x68, 0x55, 0x9b, 0xd4, 0x7b, 0x43, 0xa2, 0x8c, 0x2a, 0xef, 0xb2, 0x68, 0xb5, 0x2d, 0x9b, 0x05, 0x1a, 0x94, 0xe8, 0xd1, 0xd8, 0x32, 0xc2, 0x64, 0xf8, 0x7f, 0x12, 0x14, 0x4e, 0x90, 0xe6, 0xc3, 0xfd, 0x8d, 0x16, 0xfc, 0x39, 0x65, 0x27, 0x3f, 0x51, 0xc0, 0x6f, 0x98, 0xec, 0x36, 0x7a, 0x76, 0x92, 0xbe, 0xad, 0xbb, 0x6f, 0x69, 0x29, 0x10, 0x54, 0x50, 0xf3, 0x7b, 0xff, 0xca, 0x51, 0x33, 0x9c, 0xe3, 0x77, 0xb3, 0x8c, 0x0a, 0x62, 0x0d, 0x64, 0x0a, 0x05, 0x81, 0x39, 0x3c, 0xa3, 0x4e, 0x1b, 0xfa, 0x7c, 0xc8, 0xdf, 0x56, 0xab, 0xab, 0x22, 0x0c, 0x4f, 0xaf, 0x8a, 0xb6, 0xe9, 0x5c, 0x4f, 0x3f, 0x05, 0x20, 0xfa, 0x9a, 0x1d, 0x9f, 0x6d, 0xb4, 0xba, 0x4a, 0x24, 0xa7, 0xdc, 0x33, 0xba, 0x30, 0x9c, 0x1f, 0xaf, 0x63, 0x10, 0xdd, 0x68, 0x9d, 0x6f, 0xd7, 0x77, 0xbb, 0x75, 0xe7, 0x1d, 0x89, 0x09, 0x6c, 0x0d, 0x7d, 0x1e, 0x9c, 0x73, 0xa6, 0xd7, 0x1c, 0x35, 0xdf, 0xee, 0xce, 0x79, 0x48, 0x56, 0xea, 0x67, 0xf7, 0x1f, 0x50, 0x30, 0xea, 0x9b, 0x1c, 0x4f, 0x40, 0xbf, 0x7b, 0x0f, 0xa9, 0xcb, 0xbe, 0x4d, 0x1c, 0x2e, 0xad, 0x7f, 0xc8, 0xa3, 0x1e, 0xf5, 0x4c, 0xa1, 0xc6, 0x5f, 0x2a, 0xf2, 0x4e, 0x90, 0x79, 0xa1, 0xa9, 0x81, 0xdb, 0x1a, 0xa6, 0x99, 0xaf, 0x8d, 0xc1, 0x2b, 0x88, 0x93, 0x3f, 0x41, 0xdd, 0x14, 0x7a, 0x98, 0x02, 0x68, 0x79, 0xeb, 0x56, 0xbc, 0xc3, 0x74, 0xbf, 0xb8, 0x75, 0xb1, 0x53, 0x5f, 0x93, 0x64, 0x58, 0x36, 0x9c, 0xdd, 0x6f, 0xa8, 0x61, 0x7b, 0x0c, 0xa9, 0x16, 0x71, 0x29, 0x9a, 0xaa, 0xc6, 0x3c, 0x6c, 0x54, 0xa0, 0x66, 0x09, 0x6f, 0xc1, 0xed, 0xef, 0x87, 0x52, 0xec, 0x1e, 0xb4, 0xdf, 0x49, 0x35, 0x26, 0xa4, 0xe8, 0xd8, 0x02, 0x07, 0x1e, 0x54, 0x6d, 0x65, 0x69, 0x86, 0xe5, 0x11, 0x5e, 0xf9, 0xd8, 0x9a, 0xe2, 0x4e, 0x6f, 0x4d, 0x9d, 0xe1, 0xab, 0xfb, 0xac, 0xa9, 0xb4, 0xfd, 0x96, 0x60, 0x6e, 0x74, 0x82, 0xe4, 0x4c, 0xd5, 0xa7, 0xde, 0x69, 0xa6, 0x03, 0xa1, 0xd5, 0x82, 0x50, 0x55, 0x2c, 0x63, 0x34, 0x54, 0x6e, 0x21, 0xb8, 0xd4, 0x0a, 0x35, 0xfb, 0xc7, 0x3c, 0xc3, 0x28, 0xff, 0x99, 0xd8, 0xa5, 0x96, 0xe9, 0xf0, 0x8d, 0x8d, 0x34, 0xbb, 0x61, 0xb3, 0x20, 0x20, 0xfa, 0xc8, 0x7a, 0x83, 0xc2, 0xe3, 0x12, 0x43, 0x24, 0x11, 0xcc, 0x87, 0x41, 0x3f, 0xf4, 0x3b, 0xe5, 0x5a, 0xd2, 0x55, 0xb9, 0xb4, 0x7e, 0x5d, 0xba, 0xaa, 0xf6, 0x2c, 0xe9, 0x84, 0x6e, 0xf4, 0x44, 0x9c, 0xe7, 0x80, 0xf6, 0xc3, 0x03, 0xbd, 0xcb, 0xe0, 0x18, 0x7a, 0xe6, 0xda, 0x83, 0x6c, 0xb6, 0xb8, 0x3f, 0x75, 0x26, 0x07, 0xb6, 0x25, 0x14, 0x7c, 0xd6, 0x82, 0x05, 0xdb, 0x68, 0x04, 0x17, 0x17, 0x9d, 0xe4, 0x37, 0xbb, 0xea, 0x97, 0x93, 0x88, 0x16, 0x95, 0x52, 0x60, 0x92, 0x5e, 0x83, 0x63, 0x08, 0xbf, 0x54, 0x57, 0x36, 0x51, 0x85, 0x4d, 0xfd, 0x44, 0x1c, 0x81, 0xb5, 0x5a, 0x59, 0x83, 0xc4, 0x36, 0xec, 0x94, 0x6f, 0xd7, 0x66, 0x53, 0xf0, 0x60, 0xee, 0x99, 0xc8, 0x1a, 0x35, 0xa1, 0x56, 0xbb, 0xac, 0x6c, 0xa9, 0xe9, 0xf4, 0x63, 0x93, 0xfa, 0x95, 0x3f, 0xfe, 0xfe, 0xf4, 0x26, 0x83, 0xff, 0x7f, 0x16, 0x39, 0x87, 0x2b, 0x87, 0xcb, 0x63, 0x20, 0x4c, 0xce, 0xa7, 0xb2, 0xbb, 0x51, 0xf2, 0x94, 0x0d, 0xb5, 0xf3, 0x48, 0x08, 0xbf, 0x2c, 0xda, 0xdb, 0xeb, 0xf6, 0xce, 0x49, 0x03, 0xc6, 0x57, 0x09, 0xf1, 0xae, 0xca, 0x6d, 0xd2, 0x27, 0x51, 0x43, 0x4b, 0x0d, 0xe4, 0xf9, 0x20, 0xeb, 0x75, 0x04, 0x02, 0x79, 0x6b, 0x81, 0xa9, 0x63, 0x52, 0x1d, 0x23, 0x4c, 0xd1, 0x33, 0x6c, 0x13, 0xdc, 0x35, 0x3e, 0x55, 0x2a, 0x4d, 0x2a, 0x33, 0xea, 0x44, 0xe8, 0x55, 0xb2, 0xa2, 0xec, 0x2e, 0xb8, 0x17, 0x39, 0x82, 0x44, 0x19, 0x7a, 0x26, 0x65, 0xcf, 0x4f, 0x08, 0xe4, 0x2e, 0xe5, 0x6f, 0x76, 0x62, 0xc9, 0x83, 0x35, 0x6f, 0xfe, 0x0f, 0x51, 0x18, 0x4d, 0x86, 0x03, 0x00, 0xdc, 0x44, 0xc3, 0x0f, 0x02, 0x17, 0xbb, 0x17, 0x5a, 0xfe, 0x7b, 0xb7, 0x16, 0x30, 0xee, 0x80, 0x96, 0x60, 0x8d, 0x57, 0x3a, 0x40, 0xd2, 0x1a, 0x74, 0x44, 0xf0, 0x87, 0x21, 0xa8, 0xc1, 0x59, 0x19, 0xb4, 0x00, 0xb3, 0x04, 0x3f, 0xb8, 0xc2, 0x70, 0x72, 0xfc, 0x9f, 0x21, 0xce, 0xd9, 0x72, 0xa8, 0x70, 0x89, 0xdd, 0x38, 0x94, 0xe9, 0x98, 0xb4, 0x59, 0x2e, 0x58, 0x0c, 0xc4, 0xd3, 0xf6, 0xca, 0x06, 0xd5, 0xcd, 0xe8, 0x02, 0x23, 0x64, 0xe5, 0x0a, 0x50, 0x4d, 0x18, 0xe9, 0x8c, 0x4c, 0x43, 0x27, 0xd2, 0xbc, 0x6b, 0x88, 0x63, 0x2f, 0xe7, 0xd6, 0x72, 0x55, 0xb8, 0xe0, 0x21, 0x1f, 0x18, 0xc3, 0xac, 0x23, 0x55, 0x68, 0xe4, 0x43, 0xe0, 0x4e, 0xe0, 0x89, 0xa1, 0x8a, 0xef, 0x56, 0x8e, 0x0c, 0xd0, 0xbc, 0x7c, 0x23, 0x26, 0x28, 0x35, 0x44, 0x26, 0x44, 0xca, 0x07, 0x93, 0x1b, 0x2b, 0x72, 0xec, 0x7f, 0xf4, 0x7a, 0xe4, 0xa7, 0x8a, 0xc7, 0x12, 0x1d, 0x67, 0xb8, 0xea, 0xd8, 0xb2, 0xa7, 0xec, 0xa4, 0x13, 0x6e, 0x1b, 0xcb, 0xc5, 0x29, 0xb1, 0xee, 0xed, 0x3e, 0x11, 0x34, 0x2a, 0x9b, 0xfd, 0xa7, 0x6d, 0x3f, 0x09, 0xda, 0x0b, 0xfc, 0x4f, 0xcf, 0x10, 0x7b, 0x65, 0x19, 0xd7, 0x80, 0x8c, 0x3e, 0xd7, 0x6f, 0x2a, 0x5f, 0xc0, 0x10, 0x7b, 0x1b, 0xc7, 0x8f, 0x83, 0xb0, 0x3d, 0xc7, 0x47, 0x63, 0x67, 0xbf, 0x3c, 0x23, 0x8a, 0x75, 0x00, 0x69, 0x45, 0xdb, 0x48, 0x62, 0x23, 0x20, 0x1a, 0x50, 0x71, 0x30, 0x3c, 0x2e, 0x4d, 0x7e, 0xec, 0x92, 0x00, 0x01, 0xd1, 0xd8, 0x8e, 0x7c, 0x32, 0x7d, 0x8b, 0x03, 0x66, 0xc9, 0x2f, 0xbb, 0x8b, 0xb1, 0xad, 0xe1, 0x7b, 0xfb, 0xc1, 0x0e, 0xfc, 0xa3, 0x88, 0xb9, 0x37, 0x7e, 0x95, 0xfd, 0x6c, 0x1d, 0x41, 0x9c, 0xe3, 0xf4, 0x42, 0x45, 0x26, 0xbb, 0x80, 0x12, 0x6d, 0x15, 0x24, 0x55, 0x5a, 0x70, 0xf1, 0x94, 0xe6, 0x2c, 0xd7, 0xd2, 0x9c, 0xff, 0xc5, 0x10, 0x05, 0x98, 0xc0, 0x14, 0x63, 0x82, 0x32, 0x69, 0xa1, 0x4c, 0x84, 0xa7, 0x8b, 0xe7, 0xee, 0xf5, 0x3b, 0x4f, 0x8e, 0xcb, 0xd3, 0x6d, 0xb8, 0xfd, 0x72, 0x3d, 0x8e, 0xf5, 0x60, 0x2c, 0xd0, 0x3f, 0x8c, 0xc4, 0xf5, 0x4c, 0x39, 0x8a, 0x7a, 0x6f, 0xf4, 0x27, 0x7a, 0x2c, 0xc9, 0xc7, 0x7f, 0xb2, 0xb6, 0xbf, 0x98, 0xa6, 0x60, 0x72, 0xab, 0x22, 0x05, 0x75, 0x0d, 0xfe, 0xb2, 0xf1, 0x50, 0x4e, 0xb6, 0x49, 0x5c, 0x2b, 0x56, 0xfd, 0xc1, 0xb7, 0xc2, 0xcf, 0x4c, 0x5b, 0x48, 0x24, 0xd9, 0x53, 0xc8, 0xac, 0x67, 0x6d, 0x68, 0x45, 0x72, 0x0d, 0x88, 0x1d, 0x7d, 0x75, 0xf9, 0x17, 0xee, 0x43, 0x69, 0x71, 0x1e, 0x3b, 0x22, 0xa3, 0xb1, 0x47, 0xf5, 0x8a, 0x23, 0xbc, 0x70, 0xc5, 0xa4, 0xdf, 0x58, 0x60, 0x26, 0xa8, 0x53, 0xaf, 0xb4, 0xc6, 0xe4, 0x7d, 0x05, 0xe2, 0x9c, 0x67, 0x51, 0x28, 0x8f, 0x82, 0x63, 0x04, 0x06, 0x44, 0xf0, 0x29, 0x73, 0xa1, 0x27, 0xd8, 0xaa, 0x74, 0x89, 0x5f, 0x4d, 0x21, 0xfb, 0xe0, 0x88, 0x78, 0x19, 0x53, 0xff, 0xdd, 0xce, 0xce, 0x05, 0xa6, 0x21, 0x04, 0x0f, 0xc5, 0x52, 0x0d, 0x68, 0xa7, 0x26, 0x65, 0x26, 0x5c, 0x7f, 0x36, 0x5c, 0xf7, 0x2f, 0xda, 0x91, 0x38, 0x0e, 0x9b, 0x71, 0x68, 0x4b, 0xbe, 0xc3, 0x85, 0xff, 0xc1, 0x9b, 0x9f, 0x08, 0xe0, 0xd1, 0x82, 0x14, 0xde, 0xb1, 0x95, 0xfc, 0x01, 0xf4, 0x02, 0x54, 0x5f, 0xf0, 0x17, 0x40, 0x58, 0x0b, 0xed, 0x88, 0x64, 0x75, 0x47, 0xef, 0x0f, 0x17, 0xbc, 0xc1, 0x41, 0xc6, 0x19, 0xac, 0xc3, 0xbd, 0x01, 0xd0, 0xff, 0x4a, 0xd6, 0x19, 0x07, 0xc7, 0xdd, 0xcd, 0xd9, 0xcc, 0x9c, 0x61, 0xe2, 0xa3, 0x87, 0x91, 0xc0, 0xfc, 0xdc, 0xb0, 0x4c, 0xe2, 0xcc, 0x3c, 0xd8, 0xee, 0xdb, 0xb5, 0xb5, 0xbb, 0x89, 0xaf, 0xf9, 0x99, 0x32, 0x27, 0x7e, 0x86, 0x33, 0x13, 0x2e, 0x5a, 0x4e, 0x3c, 0x7e, 0x41, 0x50, 0x50, 0x39, 0x6e, 0xf0, 0x33, 0x7f, 0x0e, 0xfb, 0x97, 0x0d, 0x7b, 0xae, 0xcc, 0xbf, 0xb3, 0x63, 0xd9, 0x52, 0x08, 0x71, 0xcb, 0x6f, 0x19, 0x4d, 0x4d, 0xe5, 0x00, 0xf5, 0x79, 0x37, 0xcd, 0x8e, 0xee, 0x56, 0x34, 0x4b, 0x23, 0xaf, 0x82, 0x92, 0xfb, 0x68, 0xd5, 0x5a, 0x99, 0xe7, 0x8d, 0xd8, 0x75, 0x95, 0xfe, 0x5a, 0xaf, 0xe1, 0x67, 0x73, 0xa4, 0x87, 0x28, 0x58, 0xc0, 0x12, 0x2f, 0x8a, 0x93, 0x9f, 0xb4, 0xb5, 0x26, 0xe5, 0x26, 0xd8, 0x8f, 0x72, 0x65, 0xa7, 0xc3, 0x37, 0x31, 0x2e, 0xac, 0x47, 0xe3, 0xb6, 0x7b, 0xdc, 0x5a, 0xec, 0x40, 0x9b, 0x39, 0x40, 0xb7, 0x19, 0x50, 0x8c, 0x65, 0x9d, 0x57, 0xf6, 0xe4, 0x28, 0xe2, 0x17, 0x7c, 0xb2, 0x91, 0x5d, 0xf3, 0xb7, 0x87, 0xad, 0xa5, 0xf2, 0x1e, 0x4d, 0xd7, 0x69, 0xd9, 0x02, 0x48, 0xa9, 0x9b, 0x75, 0x09, 0x53, 0x16, 0xdb, 0x8f, 0xd7, 0x85, 0xd5, 0x07, 0x80, 0x9e, 0x95, 0xe9, 0xb1, 0xc2, 0x43, 0xd0, 0x6e, 0x78, 0x9f, 0x89, 0x1d, 0x19, 0xe7, 0x69, 0x8e, 0xcd, 0xfb, 0xe4, 0x3a, 0xb5, 0xbf, 0x5c, 0xc8, 0x6a, 0xc1, 0x37, 0xd6, 0xa7, 0x1c, 0x34, 0xf5, 0x42, 0x9c, 0xff, 0xf5, 0x61, 0x22, 0x03, 0x64, 0xea, 0x4a, 0x7f, 0x51, 0x3b, 0x4c, 0xdc, 0x55, 0x1c, 0x20, 0x3e, 0xd5, 0xf1, 0xe6, 0x59, 0x81, 0x35, 0x84, 0x86, 0x20, 0x23, 0x91, 0x15, 0x90, 0xb6, 0x72, 0xe5, 0x08, 0xd4, 0xc2, 0x33, 0xa1, 0xc6, 0xf8, 0xb0, 0x15, 0xec, 0x43, 0xd6, 0xc6, 0xaf, 0xb9, 0x7b, 0x02, 0xb6, 0xb1, 0xa7, 0x85, 0x5d, 0x6d, 0xa3, 0x3f, 0x63, 0xfd, 0x52, 0x58, 0xe2, 0x5f, 0xc4, 0x72, 0x85, 0xeb, 0x09, 0x2e, 0xf5, 0xef, 0x43, 0xf1, 0x94, 0x96, 0xff, 0xe8, 0x6e, 0x0e, 0xc6, 0x49, 0x6d, 0xe9, 0xee, 0xdc, 0xcc, 0xc4, 0xb6, 0xbb, 0xcd, 0x27, 0x93, 0x56, 0xaf, 0xad, 0xc4, 0xb9, 0xda, 0x65, 0x2c, 0x12, 0x5e, 0x77, 0x61, 0x6d, 0x9b, 0x0b, 0x01, 0xc3, 0x41, 0x66, 0x45, 0x33, 0x7c, 0x56, 0xd8, 0x8f, 0x68, 0xd1, 0xe9, 0x1a, 0xcb, 0xd9, 0x7f, 0x90, 0x03, 0xa2, 0x0c, 0x67, 0x3d, 0xf7, 0x46, 0x55, 0xe8, 0xda, 0x32, 0x12, 0x6a, 0x6b, 0x81, 0x5f, 0x11, 0x0b, 0x20, 0x47, 0x4c, 0xc0, 0x0b, 0xa5, 0x1b, 0xdb, 0x62, 0xe6, 0xc4, 0xd9, 0xbe, 0x10, 0xc8, 0x88, 0xc5, 0x03, 0x15, 0x6b, 0xfc, 0x00, 0x7d, 0x5e, 0xdd, 0x67, 0x67, 0x7d, 0x2a, 0xc5, 0xc4, 0x43, 0x80, 0x0d, 0x45, 0xef, 0x2f, 0x26, 0xcb, 0x2c, 0x49, 0xa6, 0x20, 0xf0, 0xf9, 0xde, 0xe4, 0xa5, 0x16, 0x16, 0xca, 0x87, 0xf8, 0x19, 0x04, 0x4d, 0x8b, 0xf5, 0xfb, 0x0b, 0xa1, 0xfc, 0x44, 0x57, 0x8d, 0x0e, 0xcf, 0xab, 0xed, 0x1b, 0x62, 0x0a, 0xc7, 0xe3, 0x46, 0xe6, 0xd8, 0x00, 0x41, 0x42, 0x28, 0x27, 0xc4, 0x14, 0xe2, 0xab, 0x64, 0xed, 0x63, 0x42, 0x8e, 0xdb, 0x91, 0x0c, 0x77, 0x8f, 0x6e, 0xd1, 0x53, 0xbb, 0xed, 0x8b, 0xc7, 0xbe, 0x04, 0x24, 0xa0, 0x83, 0x02, 0x80, 0xc5, 0xa6, 0x23, 0xbe, 0x6a, 0xd9, 0x61, 0xbb, 0x87, 0x87, 0x8e, 0xd8, 0x89, 0xb7, 0xa0, 0xfe, 0x47, 0x32, 0x4c, 0xdf, 0x37, 0xe8, 0xd6, 0x7e, 0xe2, 0x90, 0x27, 0xf1, 0x95, 0x8f, 0x20, 0x65, 0x5a, 0x1b, 0x2e, 0x64, 0x26, 0xa0, 0x1e, 0x53, 0x54, 0x62, 0x33, 0x3f, 0x52, 0x65, 0x76, 0xd9, 0x9b, 0x8a, 0x4e, 0xbe, 0xe5, 0xfa, 0x50, 0xfc, 0x9b, 0xc7, 0x58, 0xd2, 0x8d, 0xd1, 0xd9, 0xb8, 0xe7, 0xe7, 0x71, 0x9f, 0x5f, 0x2f, 0xc1, 0x7a, 0xb3, 0xc8, 0x7b, 0xfd, 0x53, 0xad, 0xbc, 0xa5, 0x5a, 0xdd, 0x9d, 0xf8, 0xc3, 0xb9, 0x05, 0x0e, 0xda, 0xad, 0xc1, 0x50, 0xf0, 0x12, 0xd6, 0x80, 0x53, 0x53, 0x15, 0xfa, 0x7e, 0x4f, 0xf1, 0x39, 0x8c, 0xff, 0x8e, 0x9c, 0xf3, 0x59, 0x1a, 0x6a, 0x6e, 0x74, 0x60, 0x15, 0x3b, 0xec, 0x9a, 0xbb, 0x87, 0x88, 0x87, 0xf2, 0x27, 0x1a, 0xbe, 0xc5, 0x88, 0xa7, 0x42, 0xfa, 0xe9, 0xc8, 0x56, 0x97, 0xc7, 0x50, 0x93, 0xa4, 0x99, 0x2f, 0x37, 0x31, 0xbe, 0x97, 0xc0, 0x9b, 0xb4, 0x5d, 0xba, 0x0c, 0x8a, 0xa1, 0xd5, 0x41, 0x98, 0xb1, 0x3a, 0x90, 0x6d, 0x2b, 0x1f, 0x29, 0x09, 0x62, 0x99, 0x9c, 0x4d, 0x03, 0xb2, 0x9b, 0xaf, 0xf9, 0xbc, 0x01, 0x32, 0x8d, 0xe5, 0x14, 0x96, 0xd2, 0x0b, 0x07, 0xcb, 0x40, 0xd1, 0xc4, 0xac, 0x9f, 0xf2, 0xe8, 0xea, 0x27, 0xd5, 0x0e, 0x46, 0xe5, 0x62, 0x50, 0x04, 0x60, 0x15, 0x0b, 0x9c, 0x7d, 0x50, 0xe3, 0xb2, 0xa0, 0xf6, 0x07, 0x48, 0x14, 0x35, 0xb6, 0x33, 0xad, 0xa3, 0x03, 0xcb, 0xab, 0x8d, 0xd5, 0xe7, 0xe2, 0x8b, 0x31, 0x09, 0x18, 0x58, 0xbc, 0xd5, 0xaf, 0xe1, 0x7b, 0xc8, 0x84, 0x9c, 0xde, 0x26, 0x16, 0x1b, 0xfd, 0x34, 0xeb, 0xe1, 0x21, 0xa8, 0x2f, 0x74, 0x86, 0x5e, 0x9f, 0xb4, 0x5f, 0x4c, 0xa5, 0x6a, 0x1b, 0xb8, 0xc4, 0x24, 0xe7, 0xa8, 0x37, 0x41, 0x74, 0x9b, 0xd5, 0x48, 0xfa, 0x76, 0x38, 0x7e, 0x7d, 0xc1, 0x1e, 0xb7, 0x4f, 0x13, 0x0f, 0x6c, 0xd6, 0xcb, 0x41, 0x0e, 0x8f, 0x01, 0xb8, 0x9a, 0x53, 0xbd, 0xb1, 0x6e, 0xd9, 0x66, 0x41, 0x5b, 0x7d, 0x7d, 0x3a, 0xfb, 0x3f, 0x8b, 0x4e, 0x44, 0x0f, 0x57, 0x77, 0x5e, 0x48, 0x5d, 0x96, 0xb2, 0x7a, 0x7c, 0x5a, 0x44, 0x6c, 0xef, 0x63, 0x42, 0x61, 0x7e, 0xa7, 0xdd, 0x9b, 0xf5, 0x15, 0x57, 0x1e, 0xd6, 0x79, 0x5d, 0xb6, 0x4b, 0xa0, 0x98, 0x3b, 0x5e, 0xbc, 0x7f, 0x14, 0x6c, 0x09, 0x6f, 0xfa, 0xd7, 0xb1, 0xfd, 0xfe, 0xfc, 0xee, 0x8b, 0xce, 0x65, 0x6e, 0x19, 0x34, 0x3f, 0xfb, 0x5e, 0xdf, 0x0e, 0x5b, 0x17, 0x66, 0x9f, 0x75, 0xa0, 0x8a, 0x3e, 0xb6, 0xc1, 0xbc, 0x2a, 0xb3, 0xca, 0xdf, 0x46, 0x10, 0xe2, 0x4e, 0x11, 0xa0, 0x9c, 0x21, 0xd8, 0xcd, 0xcb, 0xac, 0x2b, 0x3b, 0x98, 0x49, 0x8d, 0xa8, 0xd1, 0x58, 0x6f, 0x17, 0x84, 0x83, 0x60, 0x2d, 0xcd, 0x47, 0x7e, 0xdb, 0xec, 0xaf, 0x30, 0x3d, 0x9a, 0x63, 0x17, 0xc2, 0x9e, 0xe2, 0x41, 0x8e, 0x9b, 0x0c, 0xa0, 0x1c, 0x2c, 0xe3, 0xbb, 0x28, 0x32, 0x92, 0xa4, 0xcc, 0x6d, 0xaf, 0x2a, 0xe9, 0x4a, 0xbd, 0x4f, 0xc8, 0xfc, 0xf5, 0xfd, 0x01, 0xce, 0x46, 0xf4, 0x9c, 0xb8, 0x9a, 0x07, 0x77, 0x30, 0x5b, 0x88, 0xe7, 0x42, 0x35, 0x01, 0xa2, 0xe3, 0x1e, 0x24, 0xdd, 0x83, 0x94, 0x05, 0xb1, 0xe1, 0x26, 0x87, 0xc3, 0x23, 0x36, 0x14, 0x24, 0x26, 0xfd, 0x92, 0x76, 0x13, 0xd0, 0x92, 0x51, 0x33, 0xa1, 0xca, 0xe5, 0x04, 0xc8, 0xc5, 0xe0, 0x8c, 0x04, 0xd9, 0x92, 0xed, 0xbc, 0x5a, 0x4e, 0x3a, 0x8b, 0x0d, 0x14, 0x89, 0xfc, 0xdf, 0x6e, 0x49, 0x92, 0xd7, 0x98, 0xd6, 0x0c, 0x4a, 0xe3, 0x4b, 0xe6, 0x4e, 0x5b, 0x98, 0x23, 0x70, 0xa8, 0xd4, 0x4a, 0xaa, 0x32, 0xd4, 0xaf, 0x8f, 0x89, 0xfc, 0xf3, 0xc9, 0x03, 0x55, 0xce, 0xc5, 0xa7, 0xe0, 0x0c, 0xad, 0x49, 0x2a, 0xd6, 0x97, 0xf7, 0x21, 0x33, 0xfc, 0x94, 0x26, 0xcf, 0x6b, 0xc3, 0x63, 0xfa, 0x7e, 0x07, 0x5f, 0xf3, 0x0e, 0x28, 0xcf, 0x67, 0xa3, 0xd8, 0xb0, 0x35, 0x2e, 0x96, 0x92, 0x74, 0xfb, 0xd3, 0x37, 0xb7, 0xe1, 0x53, 0x5c, 0x8f, 0xbc, 0xd7, 0xd7, 0x52, 0x1d, 0xf9, 0xe2, 0x1b, 0x3f, 0x57, 0xb7, 0x12, 0x3d, 0xf3, 0x5d, 0xee, 0x83, 0xda, 0xc1, 0xb8, 0x82, 0x04, 0x08, 0xd1, 0xa9, 0x7c, 0x24, 0x36, 0x90, 0xc0, 0xa5, 0x03, 0x76, 0x6b, 0xd2, 0x36, 0xed, 0x11, 0xf9, 0xb6, 0xd4, 0x6b, 0x03, 0x94, 0x86, 0xb4, 0x4b, 0x90, 0x51, 0x52, 0xb1, 0xdf, 0x2a, 0xb9, 0xea, 0x2b, 0x9e, 0x8d, 0x1a, 0xdc, 0x0c, 0x06, 0xa4, 0x96, 0x12, 0x99, 0x40, 0x02, 0x45, 0xd5, 0x4f, 0xd2, 0x25, 0x8b, 0x6c, 0xff, 0x50, 0x31, 0x44, 0x55, 0xf5, 0x88, 0xa7, 0x32, 0x8c, 0x7d, 0xdf, 0x8b, 0xc4, 0x4d, 0x40, 0x2f, 0xbd, 0xed, 0x00, 0x50, 0x78, 0xa9, 0x49, 0x3f, 0x8c, 0x0b, 0x8d, 0x77, 0x1a, 0xfe, 0x1a, 0xdd, 0x02, 0x33, 0xee, 0x46, 0x57, 0xc4, 0xcc, 0x3a, 0x11, 0x18, 0x8f, 0xf8, 0x02, 0x06, 0xbf, 0xb9, 0x0c, 0x3d, 0x62, 0x39, 0x90, 0xe3, 0x14, 0x74, 0x29, 0x7c, 0x5a, 0xad, 0x9b, 0x0e, 0x34, 0xb5, 0x06, 0x82, 0xf1, 0x6a, 0x60, 0x4e, 0x47, 0x7e, 0x21, 0x51, 0xa3, 0x7a, 0x40, 0xfe, 0xbe, 0x02, 0x5f, 0xbd, 0x71, 0x5a, 0x43, 0x8e, 0xca, 0x29, 0x86, 0xf0, 0x5f, 0x7d, 0x90, 0x01, 0xe2, 0x10, 0xc3, 0xe6, 0xf6, 0xca, 0xf6, 0x6d, 0x41, 0x86, 0x25, 0xf1, 0xc3, 0x19, 0x66, 0x7f, 0x66, 0x90, 0x1f, 0x36, 0xd6, 0xba, 0x77, 0xf4, 0x92, 0xe7, 0x0a, 0x2f, 0x44, 0xee, 0xe1, 0x20, 0x4e, 0x75, 0xa1, 0x27, 0xa5, 0x6c, 0x02, 0x6b, 0xe2, 0xdb, 0x83, 0xc1, 0x96, 0xde, 0x5d, 0xcf, 0xde, 0xed, 0xb5, 0x71, 0x38, 0x61, 0x15, 0x5b, 0x95, 0x34, 0x1d, 0x00, 0xb0, 0x09, 0x76, 0xb3, 0x9d, 0x6c, 0x08, 0x0c, 0xa5, 0x5a, 0x6d, 0x8e, 0x51, 0x04, 0xa5, 0x86, 0xc5, 0xd0, 0x0b, 0x36, 0x4f, 0xa1, 0x87, 0x33, 0x40, 0x58, 0x06, 0x0c, 0xfb, 0x9b, 0x27, 0x2c, 0x4b, 0xd5, 0x37, 0x02, 0xfa, 0x7d, 0x60, 0x5f, 0x9f, 0x9c, 0x1d, 0x1f, 0xb7, 0x89, 0xf1, 0x0b, 0xf7, 0xf7, 0x59, 0xfe, 0xe1, 0x32, 0xff, 0x47, 0x96, 0xa6, 0x30, 0x4f, 0xeb, 0xa1, 0x90, 0x7c, 0xbe, 0x5a, 0x0d, 0x54, 0x8b, 0x31, 0x11, 0xe6, 0x3a, 0x38, 0xfc, 0x65, 0x3b, 0xf3, 0xd1, 0x17, 0xd5, 0x5c, 0x2f, 0x6d, 0xbb, 0x2a, 0x84, 0x74, 0xe1, 0x53, 0x7d, 0x6c, 0x8d, 0xd0, 0xc1, 0xb5, 0xb1, 0xa0, 0xde, 0xf3, 0x78, 0x0f, 0x83, 0x6a, 0x1f, 0x38, 0xf1, 0xaa, 0x06, 0xc9, 0xac, 0x71, 0x07, 0x06, 0x76, 0xcd, 0x06, 0x11, 0x7d, 0x81, 0xc9, 0x68, 0xd4, 0xaa, 0x0a, 0xaf, 0x20, 0xa2, 0xcb, 0xb0, 0x94, 0x25, 0xea, 0xa0, 0x1f, 0xb2, 0xf5, 0xa3, 0xe3, 0x34, 0x3f, 0x93, 0xea, 0xe2, 0x34, 0xfd, 0x14, 0x64, 0xe9, 0x6d, 0x54, 0x37, 0xf8, 0xec, 0x1c, 0x52, 0x8a, 0xc6, 0x16, 0x0a, 0xb5, 0x91, 0x15, 0x33, 0x09, 0x6a, 0x4b, 0x88, 0x65, 0x82, 0xbc, 0x4d, 0x0f, 0xda, 0xf2, 0x32, 0x04, 0x4a, 0xf3, 0x7b, 0x8d, 0xc8, 0x70, 0x5e, 0x13, 0xe7, 0x3f, 0xac, 0x34, 0x9e, 0x0c, 0xb4, 0x17, 0x4b, 0x4b, 0x65, 0xfc, 0xf7, 0x70, 0xb2, 0x17, 0xdc, 0x63, 0x3b, 0x9e, 0x24, 0x2e, 0x29, 0x21, 0xf4, 0xf9, 0x59, 0x1a, 0xa9, 0x39, 0xbe, 0xc5, 0x62, 0x24, 0x00, 0x31, 0xbe, 0x68, 0x69, 0x97, 0xe7, 0x1c, 0x02, 0xec, 0xcf, 0xf7, 0xf9, 0xb2, 0xb9, 0xc0, 0x46, 0x13, 0xfc, 0x05, 0x8e, 0x30, 0x03, 0x10, 0x48, 0xb7, 0x99, 0x17, 0x1e, 0xb3, 0x63, 0xb3, 0x96, 0xa9, 0xae, 0x93, 0xf1, 0xe0, 0x6c, 0x72, 0x54, 0x00, 0x78, 0x46, 0x25, 0xdf, 0x22, 0xbb, 0xb8, 0x97, 0xe7, 0xdf, 0x2b, 0xdc, 0x80, 0x1f, 0x8e, 0x8c, 0x1f, 0x72, 0x47, 0x88, 0xf5, 0xd4, 0xb5, 0xc3, 0xf7, 0xf6, 0x14, 0x98, 0xe2, 0x34, 0xa1, 0x61, 0x7c, 0xc7, 0xfe, 0x45, 0x1d, 0x3c, 0xd7, 0x51, 0x6f, 0x24, 0xc6, 0xca, 0x72, 0x0e, 0x74, 0xc2, 0xc3, 0xb2, 0x02, 0xea, 0x1d, 0x6f, 0xa7, 0xa7, 0x20, 0xf8, 0x9a, 0x68, 0x51, 0x4a, 0x32, 0x36, 0x63, 0xe1, 0x4b, 0x8d, 0xb5, 0x2b, 0xed, 0x6a, 0x1b, 0x3d, 0x28, 0xa5, 0xe1, 0xc5, 0x42, 0x81, 0x0d, 0x3f, 0x15, 0x82, 0xe5, 0x6c, 0xb2, 0x7e, 0xb1, 0x00, 0x4a, 0xf7, 0xc2, 0x9b, 0x4f, 0xa8, 0xb3, 0xfb, 0xd6, 0x5e, 0xef, 0x70, 0x40, 0x09, 0x73, 0x90, 0x19, 0x13, 0xd6, 0x2b, 0x40, 0xf0, 0x86, 0x82, 0x48, 0xf7, 0x54, 0xb3, 0x1f, 0x70, 0x33, 0x78, 0xed, 0xee, 0x3c, 0x11, 0x3f, 0xdf, 0xf6, 0x7f, 0x65, 0x61, 0xd5, 0xf3, 0x18, 0x57, 0x00, 0x86, 0x61, 0xbc, 0x57, 0x2a, 0xb6, 0x38, 0xb5, 0xe1, 0x65, 0xf1, 0x72, 0x2d, 0x36, 0xa4, 0x2d, 0xc7, 0x4b, 0xf4, 0xc8, 0x93, 0x4c, 0x02, 0xb3, 0xd4, 0xc1, 0x3d, 0x6e, 0x9d, 0xbf, 0x7c, 0x49, 0x88, 0xc7, 0x4a, 0x6f, 0xa9, 0xeb, 0x80, 0x22, 0xc5, 0x32, 0x1a, 0x48, 0xc0, 0x3e, 0x43, 0x27, 0x55, 0x2c, 0xb2, 0x6d, 0x0a, 0xbc, 0x39, 0x73, 0x62, 0xb2, 0x9b, 0xc2, 0x54, 0x7c, 0x9f, 0xd7, 0xfc, 0x14, 0x62, 0x23, 0x91, 0x28, 0xf1, 0x56, 0x97, 0x79, 0x17, 0xdd, 0x55, 0x81, 0x74, 0xa9, 0x8a, 0x58, 0xcf, 0x33, 0x5c, 0xd8, 0xae, 0xbd, 0x91, 0x00, 0x23, 0xda, 0x01, 0x96, 0xe8, 0x30, 0x4b, 0x10, 0xae, 0x7d, 0xc8, 0xb5, 0xb3, 0xd8, 0xbd, 0x00, 0x93, 0x3a, 0xd5, 0x45, 0x60, 0x3c, 0xce, 0x96, 0xf4, 0x22, 0x72, 0xe8, 0x86, 0x19, 0xc9, 0x72, 0x7c, 0xbd, 0x8d, 0x56, 0x80, 0xde, 0xde, 0x83, 0xd6, 0x84, 0x37, 0xda, 0xed, 0x30, 0xa1, 0x90, 0x34, 0x65, 0x26, 0xd3, 0x2e, 0x67, 0x89, 0xb0, 0xc9, 0x43, 0x34, 0x34, 0xec, 0x0f, 0x72, 0xd1, 0x4f, 0x73, 0xde, 0x04, 0x8f, 0x69, 0x1c, 0x35, 0x82, 0x40, 0xc6, 0xdf, 0xc8, 0xe7, 0xa9, 0xf0, 0xa2, 0x68, 0x32, 0x73, 0x07, 0xb3, 0x23, 0x6c, 0xf5, 0x9d, 0x8a, 0x03, 0x06, 0x28, 0xf4, 0xe5, 0x43, 0x05, 0xde, 0xe8, 0x3c, 0x57, 0x6c, 0xee, 0x59, 0xba, 0x5e, 0x0b, 0x6b, 0x84, 0x3f, 0xea, 0x86, 0x4b, 0xdf, 0x6c, 0x13, 0xa7, 0x04, 0x93, 0x21, 0x38, 0x5d, 0x9f, 0xfc, 0xeb, 0xb7, 0x76, 0x01, 0x7a, 0x73, 0x49, 0xb0, 0x32, 0x38, 0x75, 0x03, 0xf9, 0xe5, 0xa7, 0xfe, 0x8f, 0xca, 0x44, 0x88, 0x14, 0x17, 0x08, 0x79, 0xcb, 0x94, 0xed, 0xf4, 0x1d, 0x93, 0x4e, 0xf7, 0xe1, 0x24, 0x4c, 0x30, 0xda, 0x87, 0x71, 0x13, 0x81, 0xe7, 0x93, 0x29, 0x05, 0x45, 0xfb, 0xab, 0x91, 0xb2, 0xc7, 0x4f, 0xcd, 0xc1, 0x8d, 0x62, 0xa7, 0x3c, 0x41, 0x17, 0x53, 0x16, 0x59, 0x1f, 0x90, 0xa1, 0x2e, 0x79, 0x2e, 0x01, 0xa6, 0x8c, 0xcd, 0xe1, 0x10, 0x73, 0xe7, 0x64, 0x4f, 0x98, 0x11, 0x5e, 0x3b, 0x84, 0x7d, 0xc5, 0x44, 0xf5, 0xc4, 0x62, 0x59, 0x31, 0xe2, 0xcc, 0x08, 0x9b, 0x82, 0x97, 0xe6, 0x84, 0x7d, 0xc9, 0x31, 0x43, 0x9d, 0x8d, 0xb4, 0x88, 0xa6, 0x2c, 0xeb, 0xed, 0x97, 0x38, 0x68, 0xce, 0x2d, 0x0b, 0x75, 0x5b, 0xa9, 0x70, 0xfb, 0xeb, 0xd3, 0x9f, 0xa2, 0x94, 0x3f, 0x6f, 0x3a, 0xf8, 0xcf, 0xc7, 0x5a, 0x61, 0x79, 0x55, 0x46, 0x11, 0x4a, 0x83, 0x16, 0xd3, 0xab, 0xa7, 0x15, 0xd6, 0xe4, 0x7a, 0x68, 0xbb, 0xde, 0xcc, 0xf0, 0xed, 0x2d, 0x76, 0x71, 0x31, 0x4d, 0x8f, 0xf3, 0x7e, 0x2c, 0xe3, 0x68, 0x0e, 0xe9, 0xa0, 0x90, 0xb5, 0xdc, 0x53, 0x1a, 0x72, 0xd6, 0x13, 0x0c, 0x44, 0xaa, 0xfc, 0x64, 0x3e, 0xec, 0xe0, 0xff, 0xde, 0xf8, 0x38, 0xbb, 0x9b, 0x36, 0x61, 0xd9, 0xbd, 0x9d, 0x05, 0xa5, 0x71, 0x76, 0xd7, 0x58, 0x1d, 0x63, 0x83, 0x3d, 0xf1, 0x9f, 0xe4, 0x13, 0xbf, 0x87, 0x78, 0xb3, 0x0c, 0x5a, 0x12, 0xf2, 0x67, 0x3d, 0xcf, 0xc9, 0xf9, 0x82, 0x4b, 0xb3, 0x5e, 0x29, 0x15, 0x57, 0xb3, 0xa7, 0x60, 0x67, 0xf0, 0xe7, 0xfb, 0xc8, 0x78, 0x8f, 0x83, 0xf3, 0xef, 0x84, 0xd7, 0x9b, 0x4c, 0xb0, 0xcc, 0x90, 0x2f, 0x03, 0x22, 0xe3, 0x74, 0xb7, 0xb7, 0x4b, 0x08, 0xd9, 0xfb, 0xc7, 0xfb, 0x05, 0xa4, 0x85, 0xd7, 0x71, 0xa3, 0x03, 0x31, 0x2c, 0x56, 0x74, 0x7d, 0xa8, 0xff, 0x65, 0x27, 0x77, 0x75, 0xa0, 0xdf, 0x52, 0x19, 0x50, 0x34, 0x5f, 0x0c, 0x67, 0x64, 0xb4, 0x9f, 0x3d, 0x72, 0x17, 0x0b, 0x79, 0x7a, 0x07, 0x63, 0x35, 0x42, 0x01, 0xc6, 0x5d, 0x11, 0xfc, 0xd9, 0x58, 0xc4, 0x36, 0x74, 0xeb, 0x1e, 0x32, 0x9c, 0x5a, 0x60, 0x01, 0xb2, 0xd0, 0x19, 0xc2, 0xe9, 0x00, 0x40, 0x65, 0xfe, 0x0d, 0x80, 0xb4, 0x23, 0xa7, 0xd3, 0x93, 0x3c, 0x78, 0x52, 0x86, 0x4d, 0xbe, 0x4c, 0x75, 0x33, 0x39, 0x95, 0xac, 0x93, 0x47, 0x20, 0x26, 0x11, 0x4e, 0xd0, 0x0b, 0xc2, 0x5a, 0x8c, 0x77, 0xe3, 0x07, 0x92, 0x7d, 0xcb, 0xa2, 0x0d, 0x6c, 0x1e, 0x8b, 0xe9, 0x50, 0x44, 0xdd, 0xe6, 0xbc, 0x19, 0x51, 0xeb, 0xc7, 0xe6, 0x60, 0x9e, 0x55, 0x91, 0xa8, 0x31, 0x98, 0x10, 0x91, 0x7e, 0xd6, 0x23, 0x30, 0x57, 0x6c, 0x43, 0x6c, 0x17, 0x13, 0xd5, 0x5f, 0x7d, 0x62, 0xa4, 0xff, 0xbb, 0x94, 0x8e, 0xfd, 0xc9, 0x8c, 0x7e, 0xed, 0xff, 0x16, 0x9a, 0xa8, 0xe3, 0x70, 0xbd, 0xee, 0x40, 0x09, 0x27, 0x50, 0x78, 0x88, 0x73, 0x4d, 0x1a, 0x10, 0xca, 0xbc, 0xb7, 0xc2, 0x57, 0x6a, 0xf2, 0x84, 0xfa, 0x03, 0xd7, 0x01, 0x41, 0x36, 0x6e, 0xf1, 0x94, 0x14, 0x8f, 0x9b, 0xaf, 0xb9, 0xf7, 0x98, 0x56, 0x2f, 0x9c, 0xd9, 0x43, 0x8f, 0x3e, 0xec, 0x64, 0x69, 0x3f, 0x7a, 0x43, 0x66, 0xb4, 0x15, 0xc6, 0x2c, 0xbc, 0x30, 0x18, 0x82, 0x11, 0x6f, 0xe7, 0xb5, 0xdc, 0x22, 0xd0, 0x3a, 0xce, 0x0c, 0x17, 0x94, 0x6c, 0x68, 0x9c, 0x79, 0xaa, 0x2e, 0x0a, 0x30, 0xbc, 0x92, 0x52, 0x3d, 0x29, 0xcd, 0x58, 0x40, 0x21, 0x21, 0xeb, 0x1b, 0x10, 0x17, 0xfb, 0x53, 0x73, 0x0c, 0x06, 0xb9, 0xeb, 0xeb, 0xd4, 0x49, 0x8f, 0x3c, 0x64, 0x52, 0x87, 0x5e, 0x26, 0xd7, 0xd7, 0x10, 0x6b, 0x35, 0x78, 0x37, 0x19, 0x07, 0xad, 0xdb, 0xa3, 0x47, 0x94, 0x72, 0x38, 0xb6, 0xfb, 0x61, 0x3b, 0x7d, 0x76, 0xc0, 0xf4, 0x14, 0xae, 0x5d, 0x85, 0x63, 0xfc, 0x04, 0x1f, 0x27, 0x37, 0xfe, 0x75, 0x98, 0xca, 0xd8, 0x71, 0x49, 0x09, 0x66, 0x26, 0x4f, 0xc5, 0x06, 0x07, 0xa5, 0x1d, 0x29, 0x56, 0xcf, 0x98, 0x10, 0xdf, 0xbe, 0x71, 0xd4, 0xe5, 0xf4, 0x32, 0xa9, 0x5d, 0xe8, 0x84, 0x63, 0x5a, 0xac, 0x46, 0x3a, 0xc9, 0xcd, 0xdc, 0xca, 0x5e, 0x7b, 0xca, 0x5e, 0xce, 0xe9, 0x81, 0x6d, 0x3f, 0xf7, 0x78, 0x65, 0xfc, 0x0f, 0x7f, 0xa8, 0x6e, 0x4c, 0x51, 0xd4, 0x48, 0xe2, 0x68, 0x48, 0x01, 0xba, 0x15, 0xe4, 0x87, 0x5c, 0xcf, 0x0f, 0x32, 0x12, 0xcc, 0xff, 0xf6, 0x4a, 0xce, 0x35, 0xde, 0x3d, 0x40, 0x46, 0xb5, 0xce, 0x81, 0xe1, 0x06, 0xb5, 0x80, 0x0e, 0x48, 0xdc, 0x89, 0xb4, 0x52, 0x09, 0x5e, 0x5e, 0x15, 0xbe, 0x8a, 0x3e, 0x89, 0x5e, 0xf2, 0x73, 0xe8, 0x90, 0xad, 0x87, 0x1b, 0xe8, 0x15, 0x3c, 0x71, 0xc5, 0x1e, 0x88, 0x97, 0x75, 0xe7, 0xde, 0xc5, 0xa0, 0x8f, 0xaf, 0x35, 0xe3, 0x4a, 0x31, 0xd9, 0xbb, 0xb4, 0x5f, 0x4d, 0xa5, 0x65, 0x41, 0x0b, 0x83, 0xc5, 0x6d, 0xde, 0x42, 0x21, 0xce, 0x99, 0xba ],
-const [ 0xa2, 0x4a, 0x4c, 0xc2, 0x9e, 0x44, 0xd5, 0x03, 0x86, 0xc9, 0xca, 0xda, 0x21, 0xd7, 0x41, 0xd3, 0x5c, 0xf8, 0xaa, 0x71, 0x3c, 0x6a, 0x5f, 0x72, 0x16, 0x7e, 0x7c, 0x55, 0x02, 0x3e, 0xf0, 0x1a, 0x8d, 0x52, 0xd4, 0x49, 0xae, 0x25, 0xfc, 0x35, 0xfc, 0x43, 0xcc, 0x82, 0x1d, 0x06, 0x4d, 0xe5, 0x82, 0x71, 0x80, 0x2b, 0x51, 0x5c, 0xf3, 0x7d, 0xa3, 0xd1, 0x91, 0xe2, 0xf0, 0xb7, 0xbe, 0x05, 0xc7, 0xad, 0xa4, 0x39, 0xc3, 0x39, 0xc7, 0xba, 0xba, 0x22, 0xe0, 0x35, 0x37, 0x1a, 0xe8, 0x8b, 0x2b, 0xa0, 0x73, 0xd3, 0xdf, 0x25, 0x3f, 0x9e, 0x2d, 0x6e, 0x0d, 0x7e, 0xf0, 0x39, 0xaf, 0xc9, 0xb9, 0x23, 0x63, 0x9a, 0xc4, 0xc9, 0x5f, 0x19, 0x2a, 0x2e, 0xad, 0xfc, 0x57, 0x5d, 0x39, 0x4e, 0xbf, 0x4f, 0x29, 0x6f, 0xcd, 0x0e, 0x6c, 0x5d, 0x1c, 0x1b, 0x96, 0x31, 0xea, 0x0d, 0xeb, 0xed, 0xca, 0x7c, 0xb9, 0x74, 0x98, 0x1d, 0xec, 0xda, 0xb2, 0x2e, 0xdc, 0xde, 0x65, 0x15, 0x69, 0xb5, 0xa6, 0x44, 0x4a, 0x0a, 0x03, 0x5f, 0xa2, 0x42, 0xd9, 0xa1, 0xd4, 0x04, 0xc6, 0x7c, 0x99, 0xf9, 0x61, 0x7f, 0x50, 0xd0, 0x29, 0x7d, 0x95, 0x86, 0xbc, 0xec, 0x14, 0xe4, 0x4a, 0x8b, 0x9f, 0x49, 0x48, 0x48, 0x7f, 0xa9, 0x69, 0x60, 0x08, 0xd6, 0xca, 0xc8, 0x71, 0xfe, 0x6c, 0xcc, 0xe2, 0x75, 0xe8, 0xf6, 0xcd, 0xb5, 0x5e, 0x31, 0x82, 0xa4, 0xaf, 0x2e, 0xfe, 0x15, 0xec, 0x07, 0x04, 0x90, 0x0e, 0x22, 0x70, 0x56, 0xe7, 0x59, 0xc7, 0xa0, 0x58, 0x57, 0x12, 0x28, 0xc5, 0x45, 0xed, 0xea, 0xc6, 0xa7, 0xdb, 0x2c, 0x1f, 0x80, 0xdc, 0xbc, 0xf3, 0xbd, 0x42, 0x79, 0x34, 0xd0, 0xc0, 0x14, 0x5e, 0x9c, 0xc4, 0x18, 0x65, 0x91, 0x06, 0x28, 0xeb, 0x18, 0x61, 0x88, 0xb7, 0x31, 0xe3, 0xe0, 0x63, 0x5a, 0x20, 0x3c, 0x54, 0xb4, 0xcb, 0x56, 0xf0, 0x61, 0x87, 0x18, 0x0a, 0x30, 0xfa, 0x5d, 0xa1, 0x7c, 0x23, 0xf8, 0xcb, 0x51, 0xee, 0xf7, 0xec, 0xd1, 0x06, 0x29, 0x2b, 0xd6, 0xeb, 0xdd, 0x27, 0xd9, 0x44, 0xed, 0xe5, 0x13, 0x76, 0xfb, 0x0e, 0xe1, 0x75, 0xfb, 0x57, 0x6d, 0xdb, 0xf1, 0x40, 0x8b, 0x37, 0xfc, 0x01, 0xe1, 0xa7, 0x94, 0xc1, 0x4b, 0xa9, 0x10, 0x0a, 0x7e, 0x2e, 0x6b, 0x7a, 0xeb, 0xf0, 0x47, 0xbb, 0xe6, 0x06, 0x32, 0xb5, 0x07, 0xb5, 0x29, 0x01, 0xd0, 0x8a, 0x5a, 0xa1, 0x91, 0xa5, 0x2e, 0xef, 0x89, 0x58, 0x87, 0xd4, 0x4e, 0xf1, 0x47, 0x3a, 0x6f, 0xd3, 0x11, 0xc4, 0x57, 0xcc, 0x53, 0xbc, 0x74, 0xa2, 0x84, 0x4d, 0x99, 0xef, 0xaa, 0xf2, 0xa1, 0x2f, 0x20, 0x2e, 0x56, 0x18, 0x96, 0x7e, 0x91, 0x2a, 0x59, 0x8c, 0xa2, 0x86, 0xd5, 0xa5, 0xf1, 0x03, 0x58, 0x6d, 0xe6, 0x7f, 0x18, 0xd1, 0x07, 0x73, 0x78, 0x3e, 0x60, 0xca, 0x87, 0x10, 0x28, 0xf4, 0xc9, 0x4e, 0xa1, 0x36, 0x3b, 0x94, 0x40, 0x44, 0x91, 0x50, 0x0e, 0x11, 0xc2, 0x31, 0x4e, 0xe6, 0xc6, 0xdd, 0x60, 0xb2, 0x9e, 0xe3, 0xe5, 0xa1, 0x96, 0xf0, 0x24, 0xef, 0xc7, 0x45, 0xad, 0xff, 0xdf, 0x68, 0x3b, 0xa7, 0x25, 0x1a, 0xdf, 0xce, 0xb7, 0x8a, 0x5b, 0x3a, 0x16, 0xc8, 0xcc, 0xa3, 0xe5, 0x7c, 0x8d, 0x0c, 0xee, 0xd8, 0x57, 0x53, 0x66, 0xcb, 0xad, 0x06, 0x72, 0x78, 0x77, 0x78, 0xea, 0xe6, 0xed, 0x14, 0x5c, 0xf9, 0xb6, 0xf2, 0x54, 0xa1, 0x51, 0xa8, 0xda, 0x51, 0xb5, 0x63, 0x3d, 0xb3, 0x34, 0x36, 0x0f, 0x9a, 0xa5, 0xb1, 0x71, 0x38, 0xc2, 0xb6, 0x91, 0x91, 0xcf, 0x88, 0x70, 0x2f, 0x7d, 0x25, 0xe9, 0x17, 0x0d, 0xd6, 0xef, 0xfd, 0xb8, 0x04, 0x16, 0xb4, 0x4f, 0x4d, 0x54, 0xe8, 0x1f, 0xd7, 0x09, 0x0f, 0x17, 0xe4, 0x3e, 0x9d, 0x2d, 0xa7, 0x2a, 0x77, 0xfd, 0x57, 0xfb, 0xab, 0xb3, 0x81, 0xd3, 0x5e, 0x2c, 0xa2, 0x10, 0x06, 0x58, 0xf5, 0xd0, 0xd9, 0xe3, 0x8a, 0xb4, 0x84, 0x14, 0x98, 0xe5, 0x21, 0xf5, 0x14, 0x55, 0x63, 0xb4, 0x82, 0x48, 0x14, 0x49, 0x0c, 0x12, 0xc2, 0x59, 0xd1, 0x22, 0xb5, 0x5a, 0x7f, 0x3f, 0x24, 0xf9, 0x24, 0x12, 0xa8, 0xb8, 0x41, 0xe5, 0xf0, 0xdc, 0x21, 0xaa, 0xb7, 0x86, 0x68, 0x3f, 0xf3, 0x20, 0xef, 0xf0, 0x4f, 0xfa, 0xcf, 0x3e, 0xdc, 0x35, 0xbc, 0xde, 0x03, 0xe1, 0x95, 0x05, 0xbf, 0x62, 0x38, 0xe3, 0x09, 0x18, 0x9b, 0x6d, 0x93, 0x3f, 0x19, 0x60, 0xb8, 0x13, 0x09, 0x83, 0xb3, 0x38, 0x95, 0x2c, 0x10, 0x5a, 0xca, 0x05, 0x61, 0x11, 0xeb, 0x10, 0x32, 0x07, 0x0b, 0xe9, 0x3f, 0x5c, 0xda, 0x4c, 0xe4, 0x49, 0xc0, 0xd6, 0xd4, 0x04, 0x28, 0x10, 0x0e, 0xe4, 0x1f, 0xa9, 0x0d, 0xc6, 0x1d, 0x03, 0x3f, 0xaf, 0x22, 0xf2, 0xb9, 0xb3, 0x05, 0xc0, 0x29, 0x15, 0x09, 0x74, 0x0c, 0xaf, 0xb2, 0x53, 0x21, 0x94, 0xd7, 0xa8, 0x1d, 0xf5, 0xf7, 0xc1, 0xa0, 0x41, 0xd1, 0x3a, 0x68, 0x90, 0x2e, 0x7e, 0xc5, 0x42, 0x02, 0x8a, 0x4c, 0xe3, 0xb3, 0xf4, 0xd0, 0x52, 0xb9, 0x2c, 0x8e, 0x23, 0x67, 0x03, 0xa8, 0x41, 0x08, 0x69, 0xd5, 0xd8, 0x2e, 0x7b, 0x56, 0x72, 0x47, 0xbd, 0x2c, 0x60, 0x71, 0xa3, 0x88, 0x5b, 0x90, 0x57, 0x83, 0x6b, 0x9d, 0xb6, 0x0f, 0x08, 0x41, 0x9b, 0x2d, 0x7f, 0xa2, 0x61, 0x61, 0x98, 0x7d, 0xa3, 0x63, 0x76, 0x75, 0x46, 0x18, 0xbe, 0xaa, 0xba, 0xc0, 0xfc, 0x8e, 0x7c, 0x71, 0x42, 0xf4, 0xe0, 0xc4, 0x12, 0x6a, 0x0d, 0xce, 0x7d, 0xc9, 0x49, 0x52, 0x8d, 0x0a, 0x77, 0x34, 0xe1, 0x5b, 0xdd, 0x31, 0x97, 0x72, 0x2b, 0xce, 0x6f, 0x22, 0xb9, 0x8e, 0x2c, 0x2c, 0x11, 0x68, 0x3e, 0x57, 0xad, 0x78, 0x9f, 0xc3, 0x02, 0xf5, 0xfb, 0x7a, 0xbd, 0x63, 0x13, 0x48, 0x4c, 0x0a, 0x63, 0xcd, 0xa0, 0xa6, 0x02, 0xd0, 0x31, 0x60, 0xcb, 0xd6, 0x43, 0xfd, 0xba, 0xf3, 0x68, 0x56, 0x98, 0xe1, 0x47, 0x08, 0xdb, 0x4f, 0x9b, 0x6c, 0xc8, 0x7b, 0x7f, 0xca, 0xda, 0x03, 0xe8, 0xc9, 0x67, 0xf9, 0x73, 0x2a, 0x81, 0x35, 0x61, 0xb6, 0x1b, 0xef, 0xdf, 0x75, 0x6c, 0x8d, 0x8b, 0x21, 0x99, 0xb9, 0x35, 0xda, 0x8e, 0xb7, 0xe2, 0x1b, 0x2c, 0xf5, 0x17, 0xed, 0xaa, 0xe4, 0x54, 0x5b, 0x35, 0x07, 0xde, 0x25, 0xda, 0x4a, 0xc1, 0xb9, 0xa6, 0x94, 0x16, 0x5e, 0x0c, 0x9f, 0x82, 0xb3, 0x86, 0x08, 0xff, 0x58, 0x7f, 0xa2, 0xdf, 0xeb, 0x71, 0x10, 0x0e, 0x36, 0x4b, 0x93, 0x97, 0xa6, 0x15, 0x20, 0x69, 0xff, 0xd6, 0xb6, 0x5c, 0x4f, 0xb6, 0xee, 0x6f, 0x21, 0x60, 0xd4, 0x53, 0xf2, 0xaa, 0xf5, 0x2e, 0xe9, 0x78, 0xb9, 0x99, 0xc2, 0xdd, 0xf3, 0xea, 0x0c, 0x84, 0xb7, 0xb9, 0x94, 0x4f, 0x6c, 0x9d, 0x21, 0x3d, 0x21, 0x37, 0x61, 0x91, 0x25, 0x72, 0x24, 0x31, 0xd1, 0x08, 0xc8, 0x4c, 0xa9, 0x49, 0xf4, 0x3f, 0xa4, 0x18, 0x8a, 0xba, 0xc7, 0x36, 0xd6, 0x1e, 0xf8, 0xc3, 0x0c, 0x2a, 0x12, 0x01, 0xf1, 0xd7, 0x35, 0x5c, 0xd8, 0x80, 0x60, 0xa7, 0xd0, 0x46, 0x41, 0xa9, 0x1c, 0xb3, 0x4b, 0xd8, 0xe3, 0x9e, 0x0a, 0x64, 0x29, 0x4e, 0xb3, 0x77, 0xfe, 0xe2, 0x00, 0xbc, 0xf5, 0xef, 0x3a, 0x1e, 0xd8, 0x6c, 0x97, 0xd2, 0x9a, 0xcb, 0xc7, 0x97, 0x8d, 0x69, 0xca, 0x3c, 0xd5, 0x28, 0x04, 0x63, 0x1d, 0x5a, 0x93, 0x86, 0x89, 0xe2, 0xe0, 0x37, 0xeb, 0x95, 0x74, 0xac, 0x39, 0xe7, 0x0e, 0x7a, 0x3f, 0xc3, 0xf2, 0xa1, 0x91, 0xba, 0x83, 0xc9, 0xc4, 0x60, 0x14, 0xcb, 0xdd, 0xf3, 0xfc, 0x73, 0x0a, 0x3e, 0xe8, 0x85, 0x90, 0xbd, 0x76, 0xfd, 0x05, 0x02, 0xff, 0x9b, 0xbf, 0x57, 0xb3, 0x9f, 0x8c, 0xa5, 0xec, 0xd2, 0xa3, 0x95, 0xbc, 0xc5, 0xdb, 0xf4, 0xc8, 0x5d, 0x1b, 0x5c, 0x5a, 0x8f, 0x12, 0x11, 0xb1, 0x69, 0x28, 0x29, 0x9c, 0x52, 0xb4, 0xf0, 0x47, 0x92, 0x6f, 0x8a, 0x54, 0x15, 0x29, 0xda, 0x2d, 0x6b, 0xba, 0xa3, 0x99, 0x14, 0x3c, 0xed, 0x8e, 0xfb, 0x77, 0xab, 0x47, 0x40, 0x9d, 0x9a, 0x95, 0x3a, 0x38, 0x6c, 0x7a, 0xbd, 0x60, 0x26, 0xf4, 0x98, 0x31, 0xc7, 0x17, 0x62, 0x7c, 0x2a, 0x5e, 0x77, 0xbd, 0x2d, 0x43, 0x3d, 0x4d, 0x13, 0x0d, 0xac, 0xd9, 0x27, 0xea, 0x0d, 0x13, 0xa2, 0x3d, 0x01, 0xa7, 0xcf, 0x39, 0xc6, 0x71, 0x6d, 0xaf, 0xb6, 0xed, 0x55, 0x24, 0x10, 0xef, 0x5d, 0x27, 0xfb, 0x94, 0x7b, 0xe2, 0xc8, 0x78, 0x2e, 0xee, 0x78, 0x29, 0x19, 0x6c, 0x7e, 0xdc, 0xf1, 0x51, 0xc6, 0x5f, 0x9a, 0x01, 0xf5, 0x4f, 0x8d, 0x20, 0xf3, 0x8b, 0x7d, 0xa4, 0xa7, 0xe8, 0x3a, 0x2f, 0x01, 0x27, 0xd5, 0x9d, 0x3e, 0x24, 0x05, 0xd8, 0x67, 0x4f, 0xc9, 0xf4, 0x1b, 0x60, 0x4f, 0x78, 0x8f, 0x47, 0x15, 0xf9, 0xd3, 0x62, 0x4e, 0xee, 0x57, 0xf3, 0x87, 0xbf, 0xad, 0xd1, 0x8a, 0x1f, 0x90, 0x5e, 0x83, 0x9c, 0x26, 0xb8, 0x61, 0x74, 0x82, 0x34, 0x7f, 0xab, 0x6d, 0x08, 0x84, 0x5a, 0x66, 0x47, 0x88, 0x4a, 0xe7, 0x13, 0x78, 0xc1, 0xea, 0x0e, 0xbb, 0x9c, 0xac, 0x11, 0x15, 0x9e, 0xb1, 0x21, 0xcc, 0x08, 0x08, 0x9e, 0x0a, 0x6a, 0xd0, 0xbe, 0x83, 0xb8, 0xfb, 0x3a, 0x57, 0xa0, 0x52, 0x47, 0x3a, 0x1b, 0xb9, 0xc8, 0xd2, 0x43, 0xb5, 0xc2, 0x60, 0x64, 0x2b, 0x10, 0xa3, 0x55, 0x6b, 0x58, 0xfa, 0x09, 0x6c, 0x3d, 0xc8, 0x61, 0x59, 0xd6, 0x1c, 0x44, 0x4d, 0x5f, 0x92, 0xf2, 0x5c, 0x2f, 0x74, 0x95, 0xd2, 0xea, 0x25, 0x1a, 0xbf, 0xf8, 0xc0, 0x3e, 0xb3, 0x36, 0xfc, 0xec, 0xc6, 0xeb, 0x53, 0xc6, 0xdb, 0xfd, 0x63, 0x02, 0x26, 0x65, 0x94, 0x77, 0xec, 0xe0, 0xfb, 0xf7, 0x8a, 0xe7, 0x7e, 0xe0, 0xb9, 0xe2, 0x39, 0xee, 0x10, 0x99, 0x21, 0x53, 0xcb, 0xeb, 0xe7, 0x0a, 0xca, 0xc2, 0x20, 0x68, 0xdd, 0x46, 0xa2, 0xf4, 0x3e, 0x51, 0x31, 0x78, 0x5f, 0x23, 0x5b, 0x58, 0xe6, 0x58, 0xa0, 0x23, 0xf6, 0x17, 0xd6, 0x68, 0xb1, 0x8b, 0xcc, 0xcb, 0xfb, 0x97, 0x2e, 0x57, 0x80, 0xc5, 0xa8, 0x16, 0xf8, 0x80, 0x4e, 0xdf, 0xaa, 0x84, 0x3c, 0x70, 0x2e, 0x92, 0x79, 0xbd, 0x78, 0x68, 0x22, 0x87, 0x12, 0xf0, 0xc4, 0x2f, 0xa9, 0xb8, 0x09, 0xcd, 0xcb, 0xa2, 0x97, 0x7d, 0xef, 0xdd, 0x35, 0xf9, 0xb6, 0x13, 0x2f, 0x6d, 0x70, 0xe4, 0xfc, 0x86, 0xe2, 0x94, 0x1f, 0xcc, 0x47, 0x00, 0x4b, 0x33, 0x94, 0xd7, 0xca, 0xec, 0x00, 0x06, 0x20, 0x81, 0xc4, 0x74, 0xeb, 0x21, 0x1f, 0xf0, 0x0d, 0x39, 0x9e, 0x68, 0x0d, 0x44, 0x9a, 0x5b, 0xbb, 0xe3, 0x02, 0x90, 0x13, 0x30, 0x5b, 0x09, 0x64, 0x4f, 0x04, 0x33, 0xb2, 0x47, 0xbf, 0x5f, 0x58, 0x10, 0x6d, 0x75, 0xf1, 0xee, 0x19, 0xe7, 0x79, 0xfd, 0x38, 0xe5, 0xb0, 0x0c, 0x2f, 0xd0, 0xbf, 0xae, 0x16, 0xf0, 0x1e, 0x8f, 0xbc, 0x69, 0xb5, 0x05, 0xeb, 0x6b, 0x42, 0xe7, 0xed, 0xaa, 0xfa, 0xa2, 0x4e, 0x0e, 0x73, 0x89, 0xe4, 0xab, 0xc1, 0x6d, 0x0d, 0xf3, 0xe0, 0x6e, 0x38, 0x2a, 0x52, 0x10, 0xa7, 0x1b, 0x08, 0x92, 0x73, 0x0a, 0x86, 0x7b, 0xd0, 0xe9, 0x43, 0x75, 0x92, 0xcf, 0x4e, 0x5e, 0xf0, 0xa5, 0x37, 0x9d, 0x88, 0x23, 0x2d, 0xb2, 0xa4, 0xfb, 0x64, 0x11, 0xbc, 0x53, 0xba, 0x31, 0x3c, 0x79, 0x99, 0xe0, 0x86, 0xd2, 0x1f, 0xd9, 0x3b, 0x14, 0x7c, 0x98, 0xb7, 0xb5, 0x9c, 0x6d, 0xda, 0xa4, 0x07, 0xd0, 0x0e, 0x36, 0x05, 0xf4, 0x85, 0x63, 0x05, 0x9f, 0xc3, 0x32, 0x3f, 0x38, 0x5d, 0x72, 0x99, 0x22, 0x00, 0xab, 0xc7, 0x48, 0xb4, 0x54, 0xb7, 0xf9, 0x62, 0x46, 0x2c, 0xf7, 0x94, 0x71, 0xa9, 0xca, 0x7d, 0xce, 0x90, 0x5a, 0x39, 0x94, 0x8b, 0xbd, 0x56, 0xaf, 0x2b, 0x4e, 0x92, 0x6e, 0xcf, 0xff, 0xe6, 0x7c, 0xc8, 0xf0, 0xc4, 0x11, 0xba, 0x40, 0x9e, 0x69, 0x45, 0x23, 0xa7, 0x76, 0xe5, 0x34, 0xdd, 0xd2, 0x17, 0x0d, 0x47, 0xf7, 0xbe, 0x15, 0x7b, 0xb2, 0xc4, 0x9a, 0x64, 0xd5, 0x04, 0x20, 0x42, 0x2d, 0x68, 0xf8, 0xf2, 0xb3, 0x4e, 0x14, 0x70, 0x06, 0x31, 0x19, 0x9a, 0x19, 0x85, 0xb6, 0x37, 0x29, 0xe2, 0x35, 0x37, 0xf3, 0x65, 0x4f, 0x3c, 0x23, 0x54, 0x45, 0x5a, 0x0f, 0x00, 0x2c, 0x1b, 0xa5, 0xf0, 0x88, 0xc7, 0xa2, 0x3b, 0x1d, 0xe2, 0x06, 0x36, 0x02, 0xf5, 0xc4, 0x4f, 0xf7, 0x92, 0xbd, 0x39, 0xf8, 0x92, 0xef, 0x4a, 0x13, 0xa1, 0xea, 0x21, 0x76, 0xfd, 0x84, 0x8b, 0xcc, 0x7a, 0xce, 0xa8, 0xca, 0xca, 0x47, 0x49, 0x04, 0xfb, 0x4f, 0x9d, 0x06, 0x41, 0xde, 0x0d, 0xa0, 0xf6, 0x75, 0x64, 0x81, 0xdf, 0x55, 0x33, 0x07, 0xb1, 0xf0, 0x74, 0x56, 0xd3, 0x9d, 0x6d, 0xa8, 0x66, 0x8f, 0xd7, 0xe4, 0x83, 0x08, 0x40, 0x71, 0xc3, 0xca, 0xae, 0x4c, 0x05, 0xcf, 0x85, 0x58, 0x6b, 0x39, 0xaa, 0xf6, 0xa6, 0x8c, 0xe9, 0xd6, 0x74, 0x1b, 0x94, 0x0d, 0x66, 0xc0, 0x6d, 0x67, 0xe7, 0xd0, 0xc6, 0xfe, 0x7a, 0x4e, 0xe7, 0x0b, 0x43, 0x5f, 0xb0, 0xfd, 0xc9, 0xfe, 0x80, 0xc8, 0xfa, 0xf1, 0x55, 0x80, 0x70, 0xfc, 0x34, 0x26, 0xf2, 0x54, 0xcb, 0xc2, 0x3e, 0x56, 0x55, 0xb1, 0x05, 0x79, 0xbe, 0x41, 0x38, 0x82, 0x07, 0x7b, 0x82, 0xf7, 0xed, 0x40, 0x16, 0xd5, 0xc5, 0x98, 0xaa, 0x85, 0xab, 0x46, 0xc3, 0x0d, 0xdb, 0xa0, 0x34, 0x84, 0x5f, 0x9d, 0xe1, 0xc8, 0xeb, 0x30, 0xc9, 0x73, 0x05, 0xd4, 0x44, 0x0a, 0x68, 0x68, 0x88, 0x78, 0xab, 0x3e, 0x72, 0xbb, 0x1e, 0x6f, 0x84, 0xde, 0xf5, 0x71, 0x2a, 0x27, 0xa8, 0xeb, 0x41, 0x91, 0x99, 0xc7, 0xd9, 0x7c, 0xf8, 0x89, 0x3a, 0xa4, 0xe3, 0xe0, 0x26, 0x50, 0xd2, 0x7b, 0x5e, 0xcc, 0x33, 0x1e, 0x68, 0x18, 0x51, 0xf5, 0x8e, 0xe2, 0x7a, 0x28, 0x2a, 0xb2, 0x61, 0xaf, 0x21, 0x65, 0xc1, 0x68, 0xae, 0xdc, 0x43, 0x67, 0x61, 0xf5, 0xa2, 0x8d, 0x67, 0xba, 0x0d, 0x5c, 0x0b, 0xd9, 0xcd, 0x09, 0x7d, 0x55, 0x27, 0xd3, 0xd2, 0x7a, 0x84, 0x94, 0x4d, 0x16, 0xcf, 0x96, 0xdd, 0xe6, 0x1f, 0xa7, 0xe6, 0x4f, 0x96, 0x70, 0x44, 0x4e, 0x89, 0x02, 0x8e, 0xb2, 0xe0, 0xb2, 0x97, 0x89, 0xc0, 0x27, 0x3b, 0xd8, 0x68, 0xb1, 0x58, 0x8f, 0x59, 0xdc, 0x1a, 0xbb, 0xba, 0x46, 0x7c, 0xfe, 0xfa, 0xad, 0x0b, 0x3c, 0xb7, 0x4c, 0xed, 0x98, 0xdf, 0x68, 0x23, 0x9f, 0x15, 0x26, 0x0b, 0xc2, 0x56, 0x9f, 0x29, 0x0a, 0xdc, 0x36, 0x26, 0x07, 0x42, 0x2a, 0x19, 0x0a, 0xea, 0x67, 0x06, 0x94, 0x9c, 0xa2, 0xa4, 0x0d, 0x6f, 0xa4, 0x64, 0xb9, 0xed, 0xe6, 0xae, 0xe9, 0x72, 0x5f, 0x6e, 0x6e, 0xd5, 0x9a, 0xcf, 0x53, 0x4a, 0x0b, 0x46, 0xcc, 0x87, 0xa3, 0xd3, 0x69, 0x26, 0xa2, 0x84, 0x8f, 0x4b, 0xad, 0x3a, 0x29, 0x86, 0x20, 0xaf, 0x9b, 0xfb, 0xa5, 0xb8, 0xf7, 0xc0, 0x06, 0xc8, 0x74, 0x86, 0x3f, 0xb6, 0x1c, 0x7c, 0xd8, 0xc0, 0xc4, 0x70, 0x71, 0xcf, 0x41, 0x37, 0x9f, 0xfd, 0xd9, 0x50, 0xf6, 0x54, 0xf8, 0xc4, 0x67, 0xd8, 0x24, 0x50, 0xcd, 0xc8, 0x33, 0xc6, 0xc2, 0x22, 0xbc, 0xb1, 0xb7, 0x65, 0xcb, 0x38, 0x44, 0x9a, 0xd9, 0x45, 0xbc, 0x95, 0xfb, 0xe6, 0x05, 0x79, 0x59, 0xf3, 0xa6, 0x7a, 0xe2, 0xf1, 0x22, 0xe7, 0x3e, 0x36, 0x85, 0x67, 0x04, 0x4e, 0x3c, 0x83, 0x2e, 0x9e, 0x29, 0x64, 0xca, 0x47, 0xf7, 0xde, 0xf2, 0x4d, 0xab, 0xae, 0xfd, 0xf9, 0x7c, 0x00, 0xf7, 0x7b, 0xe5, 0x35, 0x4f, 0xd4, 0xf8, 0xe2, 0xd0, 0xf3, 0xf5, 0x1c, 0xd2, 0x1e, 0x1b, 0xf3, 0xb2, 0x94, 0xbe, 0x3c, 0x7f, 0x71, 0x9a, 0x94, 0xf6, 0xd1, 0x67, 0xa1, 0xb1, 0x38, 0xae, 0x9b, 0x9b, 0x32, 0xda, 0x0b, 0xa7, 0x36, 0x92, 0xd3, 0xc2, 0xd0, 0x46, 0x6f, 0x06, 0x00, 0x08, 0x7a, 0x30, 0xdd, 0x9e, 0x74, 0x54, 0x7d, 0xd5, 0xc2, 0xcf, 0x19, 0x18, 0xf6, 0x7e, 0x6d, 0x40, 0x51, 0x2d, 0x5e, 0xae, 0x86, 0x52, 0xdf, 0x97, 0xc1, 0xfc, 0x15, 0xa0, 0xe8, 0x06, 0xb9, 0xab, 0x21, 0x90, 0xbf, 0xf0, 0x94, 0xaf, 0x35, 0x4f, 0x72, 0x64, 0x6d, 0xe4, 0x36, 0xcb, 0x5e, 0xdd, 0x2b, 0x95, 0x48, 0x88, 0x2e, 0xb8, 0x97, 0xb0, 0xb5, 0x65, 0x0a, 0x2a, 0x10, 0x3b, 0x14, 0xab, 0xef, 0xba, 0x83, 0xdd, 0x25, 0xfa, 0x5f, 0xb1, 0xab, 0x9d, 0x15, 0xf6, 0xe8, 0x02, 0xd4, 0x2b, 0x2f, 0xbb, 0x38, 0x91, 0x8a, 0x42, 0x26, 0x85, 0xb6, 0xe7, 0xf7, 0x0d, 0x6e, 0x0d, 0xd8, 0xb1, 0xed, 0x96, 0x70, 0x8c, 0xae, 0x9c, 0xc4, 0xa2, 0x76, 0x62, 0x58, 0x74, 0x94, 0x8a, 0x97, 0xd2, 0x67, 0x88, 0x75, 0xf1, 0x22, 0x56, 0x53, 0xbd, 0xcc, 0x69, 0x23, 0x70, 0x8b, 0xe5, 0xcc, 0x64, 0x21, 0x0d, 0xd0, 0x25, 0xb7, 0xfd, 0x2c, 0xcb, 0xda, 0x9b, 0x80, 0x87, 0xc3, 0xcb, 0x6f, 0x7b, 0xdb, 0xe2, 0x49, 0xcf, 0x7e, 0x5e, 0xe7, 0x01, 0xff, 0xd4, 0xd7, 0x7c, 0xed, 0x29, 0xba, 0x6d, 0x95, 0x05, 0xe9, 0xd2, 0xc8, 0x85, 0x5f, 0xd3, 0xdf, 0x30, 0xd3, 0x56, 0xfb, 0x2d, 0x24, 0xce, 0x92, 0xb3, 0xfa, 0x53, 0x27, 0xc0, 0xab, 0xf8, 0x58, 0x0e, 0x5b, 0x59, 0x1e, 0x43, 0x68, 0x73, 0x51, 0x67, 0x05, 0xb9, 0x6a, 0x9c, 0x24, 0x64, 0x8d, 0x09, 0x9a, 0x0a, 0xc7, 0x18, 0x7d, 0x72, 0x94, 0xe1, 0xd1, 0xa7, 0xa4, 0xe6, 0x64, 0x4b, 0xde, 0x00, 0xf7, 0x2e, 0xa6, 0x99, 0x9e, 0x1f, 0x5b, 0x1c, 0x6a, 0x02, 0x24, 0xaa, 0x44, 0x23, 0xed, 0x0f, 0x1c, 0xca, 0xac, 0xf4, 0x44, 0x10, 0xe9, 0x55, 0x16, 0xf0, 0x7d, 0x36, 0xdd, 0xa1, 0x9a, 0x92, 0xf3, 0x23, 0x0b, 0x95, 0x26, 0x19, 0xbd, 0x0b, 0x60, 0xd6, 0x7f, 0x17, 0x88, 0xba, 0x06, 0x28, 0xa3, 0xbf, 0x34, 0x29, 0x3f, 0x4f, 0x9a, 0xf8, 0x11, 0x59, 0x3b, 0x1a, 0xdd, 0xa3, 0x92, 0xad, 0x96, 0x62, 0xd7, 0x9d, 0xc7, 0x08, 0x7f, 0x1b, 0x31, 0x5d, 0x02, 0x4b, 0xb5, 0xd1, 0xe0, 0x3d, 0x75, 0x10, 0xe6, 0x1f, 0x37, 0xd8, 0xad, 0xb1, 0x0a, 0x07, 0x65, 0xf9, 0x2b, 0xf9, 0xd0, 0x37, 0x29, 0x10, 0x91, 0x1b, 0x48, 0x94, 0xa7, 0x36, 0x23, 0xbe, 0x35, 0xaf, 0x96, 0x0f, 0x84, 0x37, 0xdb, 0xe6, 0x4a, 0x3e, 0xf3, 0x52, 0x2d, 0x67, 0x48, 0x25, 0x83, 0x3a, 0x90, 0x4a, 0x5c, 0x1a, 0xf4, 0x58, 0xc2, 0x76, 0x72, 0x66, 0x3f, 0x43, 0x80, 0x22, 0xa0, 0xa9, 0xf2, 0x1d, 0xf9, 0xfc, 0x1d, 0x69, 0xe9, 0xef, 0x3d, 0x66, 0x1f, 0x04, 0x14, 0xd9, 0x1d, 0x47, 0xd4, 0x3e, 0x3c, 0x3c, 0x3f, 0x60, 0xf1, 0x16, 0x0d, 0x26, 0x4e, 0x29, 0x8e, 0xb0, 0xcc, 0xa2, 0x90, 0xa2, 0x47, 0x76, 0x83, 0xc0, 0x4a, 0x98, 0xdb, 0xbc, 0x8d, 0x6f, 0xb6, 0x4b, 0xbc, 0x87, 0xbf, 0x7e, 0x7a, 0x87, 0x52, 0x50, 0xa6, 0x63, 0xe1, 0x7c, 0xdd, 0xd2, 0x96, 0x91, 0x40, 0x03, 0x39, 0x47, 0x77, 0x8b, 0x55, 0x14, 0xf6, 0xa3, 0x96, 0xfb, 0x7e, 0x90, 0x76, 0xa5, 0xe7, 0x62, 0x18, 0xb2, 0x1e, 0xe1, 0x74, 0x51, 0x6a, 0xc5, 0xb5, 0x0e, 0xf3, 0x25, 0xdf, 0xec, 0x84, 0x32, 0xb5, 0xb4, 0x90, 0x25, 0xda, 0x8c, 0x73, 0x76, 0x36, 0xcb, 0xfb, 0x4f, 0x9b, 0x0c, 0x27, 0x40, 0xa9, 0x82, 0x2e, 0x34, 0xef, 0x8b, 0xc3, 0xa4, 0x52, 0x87, 0x98, 0x0a, 0xb3, 0xea, 0x21, 0x99, 0xcc, 0x90, 0x9a, 0x2b, 0x5b, 0x51, 0x4b, 0x7b, 0x83, 0xd6, 0x0b, 0x94, 0x6f, 0xaa, 0x03, 0x89, 0x38, 0x94, 0xb4, 0x67, 0x09, 0x25, 0x3c, 0x68, 0x81, 0x8d, 0xd4, 0x69, 0x58, 0xb3, 0x9e, 0x9e, 0x46, 0x84, 0x9e, 0x85, 0x20, 0x8a, 0x05, 0x18, 0x45, 0xc1, 0xb6, 0x47, 0x38, 0xa7, 0x03, 0xa5, 0x8e, 0x93, 0xb7, 0x62, 0x0b, 0x47, 0x5a, 0x79, 0x08, 0xc8, 0xb0, 0x2a, 0x17, 0x6e, 0x83, 0xab, 0xea, 0x37, 0xa2, 0x1b, 0x71, 0x60, 0x2a, 0xb7, 0x43, 0x37, 0x04, 0x50, 0x3f, 0x2b, 0xaf, 0xfd, 0x73, 0x25, 0x40, 0x0d, 0x3d, 0x1b, 0xa7, 0x3f, 0xaf, 0xe2, 0x33, 0x36, 0x38, 0x43, 0x59, 0x27, 0x81, 0x52, 0xb1, 0xd5, 0x96, 0xfb, 0x41, 0xbf, 0x46, 0xde, 0xfe, 0x97, 0xcc, 0x5d, 0x90, 0xf7, 0xaf, 0xf2, 0x56, 0x50, 0xe6, 0xc6, 0xaa, 0x23, 0x40, 0x80, 0x66, 0x73, 0x03, 0x5b, 0xa6, 0x7a, 0xd3, 0x7c, 0xd0, 0x9b, 0xd6, 0x82, 0xd2, 0x98, 0x16, 0x5e, 0xab, 0x05, 0x27, 0x65, 0x2d, 0xfc, 0x09, 0xa3, 0x01, 0x13, 0x4f, 0x73, 0xeb, 0x8b, 0x81, 0x4d, 0x4f, 0xca, 0xc0, 0xde, 0xf5, 0x0b, 0xa8, 0x5e, 0x09, 0x55, 0x7b, 0x1e, 0x66, 0xa9, 0x7b, 0x60, 0x14, 0x80, 0x97, 0x6c, 0x0e, 0x75, 0x4a, 0xe0, 0x49, 0x3e, 0xc1, 0x48, 0xf3, 0xe0, 0x3c, 0xee, 0xf8, 0x23, 0xb6, 0xf4, 0xcb, 0x44, 0xc8, 0x9f, 0x63, 0xeb, 0xcb, 0xf6, 0x84, 0x5c, 0x3d, 0x8c, 0x3f, 0xf1, 0x65, 0x9a, 0xbc, 0xc8, 0x3a, 0x50, 0x37, 0xb9, 0x82, 0x6d, 0x49, 0x8b, 0x37, 0x0e, 0x69, 0x67, 0x2e, 0xc3, 0xb2, 0x8c, 0xfb, 0xe8, 0xe7, 0x45, 0x0f, 0x33, 0xb4, 0x18, 0x23, 0x89, 0x36, 0x41, 0xda, 0x16, 0xbe, 0x5f, 0xa1, 0x9c, 0xd2, 0x6c, 0xda, 0x0b, 0x75, 0xf2, 0x3b, 0x53, 0xa9, 0x7c, 0x70, 0x76, 0x31, 0x4b, 0x08, 0xe1, 0x9b, 0x4b, 0x8e, 0xfc, 0x7e, 0x46, 0xf6, 0x00, 0x01, 0x56, 0x3c, 0x09, 0x9c, 0xa0, 0x47, 0x6c, 0x23, 0x3f, 0x13, 0x4a, 0x00, 0x7f, 0x0f, 0x65, 0xbf, 0x4c, 0xc4, 0x33, 0xd1, 0xea, 0xb8, 0x31, 0x89, 0xe6, 0x92, 0x7a, 0x6b, 0x4c, 0x7e, 0x98, 0xa6, 0x1a, 0xd3, 0x9a, 0xdf, 0xf5, 0xf4, 0x66, 0x30, 0x1b, 0x74, 0x51, 0x71, 0x99, 0x7d, 0xed, 0xb6, 0xbe, 0x72, 0x22, 0x18, 0xcf, 0xd3, 0x81, 0xb9, 0xfc, 0x61, 0xd4, 0x02, 0x93, 0x83, 0xfa, 0x2f, 0x74, 0xe9, 0xf2, 0x0e, 0xc5, 0x6f, 0x35, 0x03, 0xe6, 0x44, 0x49, 0x50, 0xa7, 0x4b, 0x93, 0x93, 0xb9, 0xc1, 0x6d, 0x90, 0x63, 0x21, 0x78, 0x31, 0x76, 0x44, 0x33, 0xcb, 0x83, 0xcd, 0xcd, 0xa3, 0x4b, 0xc4, 0x38, 0xb1, 0x77, 0x81, 0x7f, 0xa4, 0x8a, 0xcc, 0x59, 0x26, 0x13, 0x42, 0xfe, 0x60, 0x27, 0xfb, 0x39, 0xc1, 0x0e, 0x69, 0xbf, 0xfb, 0x3d, 0x83, 0xbf, 0x4f, 0x84, 0x23, 0xba, 0x0b, 0x89, 0xad, 0x95, 0x51, 0x75, 0xf2, 0xed, 0x19, 0xed, 0x54, 0xaa, 0x79, 0x44, 0x2a, 0xd7, 0x25, 0xef, 0x66, 0xb1, 0x32, 0x39, 0x75, 0xfd, 0x1f, 0x38, 0x66, 0x9f, 0x15, 0xff, 0x4f, 0x69, 0x6e, 0x15, 0xec, 0x31, 0x75, 0x26, 0x8a, 0x26, 0x6c, 0xf9, 0x23, 0x64, 0xd4, 0xa2, 0xcb, 0xc5, 0xe8, 0xf9, 0x4a, 0xfa, 0x6b, 0x4a, 0x0b, 0xdb, 0xa3, 0x4e, 0x35, 0xfc, 0xa6, 0x5a, 0x17, 0x81, 0xd4, 0xd7, 0xc9, 0x33, 0xa5, 0xf2, 0x10, 0xd3, 0xa5, 0x94, 0x83, 0xae, 0xbc, 0x95, 0xec, 0x71, 0xb3, 0x2d, 0xf1, 0x3f, 0xf4, 0xab, 0xf4, 0x01, 0x91, 0x69, 0x37, 0xfd, 0x88, 0xff, 0x44, 0xab, 0x46, 0xb7, 0x8c, 0xc3, 0x69, 0x41, 0x4e, 0x9b, 0xca, 0xa8, 0xba, 0xb0, 0xbb, 0x85, 0x57, 0x82, 0x8d, 0x73, 0xa2, 0xa6, 0x56, 0xc2, 0xf8, 0x16, 0xf0, 0x70, 0xb5, 0xcb, 0x45, 0x54, 0x9e, 0x8e, 0xca, 0x9d, 0x7c, 0x0b, 0x4a, 0x7b, 0x0a, 0x27, 0xe5, 0x1c, 0x11, 0x93, 0x58, 0xda, 0xd2, 0xa1, 0x7f, 0xb3, 0xa4, 0x57, 0x18, 0xf9, 0xde, 0xc3, 0xc9, 0x4a, 0xf7, 0x8d, 0x65, 0xc3, 0xec, 0xd3, 0x6b, 0x71, 0xe2, 0x30, 0xcf, 0x08, 0x0d, 0x1e, 0xfd, 0xd8, 0xd0, 0x7f, 0x1c, 0xfc, 0x26, 0x76, 0x8f, 0xd5, 0x40, 0x7b, 0xc2, 0xb7, 0x70, 0xaf, 0x23, 0xe1, 0x45, 0x6c, 0x6e, 0xb3, 0xf8, 0x21, 0x2e, 0x1b, 0x06, 0x5d, 0x81, 0x51, 0x1f, 0x29, 0x1b, 0xc4, 0x3f, 0x9b, 0x8d, 0x54, 0x1b, 0xa8, 0xc7, 0xc1, 0xbe, 0x3a, 0xdc, 0x63, 0x74, 0x82, 0x06, 0x1c, 0xe7, 0x90, 0xea, 0x8c, 0x88, 0x21, 0x1d, 0x83, 0x30, 0xb8, 0xe6, 0xbc, 0x07, 0xf0, 0x46, 0xc8, 0xa6, 0x10, 0x35, 0x48, 0x78, 0xe0, 0x2f, 0x5f, 0x66, 0xbb, 0xef, 0x67, 0xb3, 0xe6, 0x7b, 0xe3, 0x24, 0x20, 0x60, 0xb5, 0x65, 0x7a, 0x3f, 0x92, 0xa8, 0x69, 0x88, 0xb2, 0x8f, 0x1a, 0x86, 0xcc, 0x4c, 0x05, 0x9c, 0x41, 0x07, 0xc5, 0xce, 0x98, 0x7f, 0x27, 0x82, 0x2a, 0xf5, 0x81, 0x88, 0x1e, 0x46, 0x45, 0x59, 0x98, 0x57, 0xd5, 0x9c, 0x2e, 0xb5, 0x99, 0xef, 0x9c, 0x7d, 0x50, 0xe3, 0xb8, 0x7a, 0xa3, 0x48, 0xa8, 0x8e, 0x00, 0xac, 0x52, 0x53, 0xa5, 0x1e, 0x14, 0x01, 0xfb, 0x38, 0xb5, 0x93, 0x26, 0x5c, 0x9c, 0x25, 0xda, 0x3d, 0x40, 0xa1, 0x70, 0xa1, 0xe0, 0x9a, 0x39, 0x66, 0x74, 0x78, 0x12, 0xc3, 0xe3, 0xd6, 0x38, 0xd1, 0x76, 0x28, 0x5e, 0x4a, 0x8d, 0xa1, 0xfd, 0x90, 0x91, 0x54, 0xec, 0xf1, 0x29, 0x99, 0x30, 0x29, 0xb1, 0xb2, 0x15, 0x28, 0xe8, 0xae, 0x7e, 0x16, 0xe8, 0x8e, 0x79, 0x95, 0x5c, 0xa7, 0x16, 0x46, 0xed, 0x47, 0x7a, 0x8e, 0xfd, 0x9b, 0x2f, 0x9a, 0x98, 0xd0, 0xbe, 0xa0, 0xa7, 0x79, 0x80, 0x68, 0x67, 0x31, 0xb1, 0x0c, 0x1a, 0x81, 0xc6, 0xfc, 0xfd, 0x04, 0x00, 0x44, 0x79, 0xc8, 0x42, 0x12, 0x9d, 0xf8, 0x20, 0x72, 0xcc, 0xb8, 0x38, 0x5d, 0xb3, 0x51, 0xc5, 0xf2, 0x7e, 0x8e, 0x71, 0x03, 0x4c, 0x66, 0x6b, 0xd3, 0xe0, 0xda, 0xba, 0x1e, 0x99, 0x21, 0xd1, 0x5a, 0xa4, 0x03, 0x63, 0x3d, 0x70, 0x83, 0x78, 0x7f, 0x62, 0xc0, 0xc1, 0xe1, 0xcb, 0x1d, 0x28, 0x6e, 0x17, 0xa0, 0xac, 0x01, 0x47, 0x98, 0x6c, 0x07, 0xa1, 0x83, 0x01, 0x86, 0xa5, 0x2e, 0x11, 0x5f, 0x44, 0x1e, 0x21, 0xd0, 0x4d, 0x2f, 0xab, 0x3c, 0x28, 0x7b, 0x71, 0x2f, 0xc6, 0x7d, 0x10, 0x9d, 0xd8, 0x77, 0xd8, 0x6a, 0x3f, 0x10, 0xdb, 0x2f, 0xc4, 0x42, 0x44, 0x3c, 0x0a, 0x73, 0xeb, 0xd9, 0xc0, 0xe2, 0x26, 0xd2, 0x1b, 0x45, 0xe1, 0x32, 0x84, 0xb1, 0xf1, 0x4e, 0x8e, 0xb9, 0xa5, 0x05, 0x2a, 0xda, 0x9e, 0x47, 0x1e, 0x17, 0xe1, 0xd4, 0xb3, 0xe0, 0x2b, 0x46, 0xae, 0x38, 0x85, 0x52, 0x82, 0x17, 0x17, 0x4b, 0xc4, 0x0d, 0x41, 0xe7, 0xdf, 0x29, 0xe8, 0x46, 0x09, 0x19, 0x0e, 0x30, 0x76, 0x92, 0xa6, 0x9f, 0xcb, 0xf3, 0xa6, 0x7d, 0xd5, 0x25, 0x5d, 0xae, 0x7b, 0xc5, 0x07, 0x51, 0xf1, 0x85, 0x9f, 0x43, 0x2f, 0xcf, 0xf4, 0xe5, 0xa2, 0xac, 0xff, 0x20, 0x21, 0xe5, 0x74, 0xa6, 0x22, 0x68, 0x97, 0x7a, 0x2e, 0xec, 0x51, 0xb2, 0x92, 0xd8, 0x83, 0x7c, 0x58, 0x61, 0x9a, 0x5f, 0x75, 0xf3, 0x64, 0xc3, 0x44, 0xd3, 0x22, 0xb4, 0x33, 0x02, 0xde, 0xe3, 0xbd, 0x64, 0xfe, 0xed, 0x98, 0x21, 0x1a, 0xe0, 0x2f, 0x4c, 0x0b, 0xfc, 0x52, 0xc3, 0x44, 0xb6, 0x2c, 0x56, 0x66, 0x03, 0x76, 0x2b, 0x0e, 0xd2, 0xeb, 0x60, 0xf1, 0xda, 0xfc, 0xf3, 0x2c, 0x97, 0xc4, 0xdf, 0xd5, 0x8f, 0x3e, 0x88, 0xd6, 0xda, 0xb6, 0x59, 0xfb, 0xe1, 0x7d, 0xac, 0x49, 0x66, 0xe1, 0xea, 0x92, 0xc5, 0x5c, 0xf3, 0x46, 0x79, 0x0c, 0xc0, 0x8c, 0xe1, 0x63, 0x47, 0x91, 0x44, 0x20, 0x9e, 0x20, 0x14, 0x7e, 0x64, 0x74, 0x6f, 0xab, 0x5d, 0x4a, 0xeb, 0x7b, 0x5c, 0x3a, 0x93, 0x5e, 0x66, 0x46, 0x2d, 0x90, 0x14, 0xb4, 0xbf, 0x8f, 0x39, 0x19, 0x51, 0xd2, 0xc5, 0xb7, 0xf3, 0xb8, 0xe9, 0x08, 0x02, 0xbf, 0x7c, 0x9b, 0xa8, 0xf6, 0x9e, 0x1f, 0xa2, 0xb5, 0x9b, 0xbe, 0x46, 0x8b, 0x12, 0xac, 0xc4, 0x78, 0x56, 0xff, 0xac, 0x5c, 0x14, 0xc1, 0xb0, 0xb0, 0x36, 0x43, 0xac, 0x74, 0x08, 0xb5, 0xe3, 0x68, 0x99, 0xf4, 0x8b, 0x7f, 0x65, 0xa3, 0x8d, 0x91, 0x30, 0x7d, 0x86, 0x50, 0x35, 0xe9, 0x11, 0x7d, 0x80, 0xcf, 0x48, 0x5c, 0x99, 0xab, 0x88, 0x65, 0x62, 0xe0, 0x75, 0x3c, 0x42, 0x4e, 0x3e, 0xe3, 0x83, 0x26, 0x23, 0x2f, 0xf9, 0xfd, 0x34, 0x78, 0xe5, 0x20, 0x5b, 0x95, 0x18, 0x28, 0x9c, 0x07, 0x5c, 0xce, 0x9c, 0x75, 0x0f, 0x00, 0x60, 0x59, 0x11, 0x34, 0x58, 0xf8, 0xe1, 0xfc, 0x9c, 0x97, 0x02, 0xda, 0x75, 0xec, 0xa4, 0x56, 0x1f, 0xd3, 0x80, 0x4f, 0xcd, 0x42, 0x04, 0x8f, 0xee, 0x7f, 0xb0, 0xa2, 0xaf, 0x90, 0xc0, 0xe7, 0xc1, 0xf4, 0x0b, 0xe7, 0x5c, 0x90, 0x2b, 0xe6, 0x84, 0xec, 0xde, 0xb8, 0x8b, 0x9f, 0xac, 0xd6, 0xd7, 0x08, 0xca, 0xb1, 0xe5, 0x3f, 0x3f, 0x46, 0x8e, 0x4b, 0x45, 0xf3, 0x89, 0x96, 0xf2, 0x89, 0x32, 0x9e, 0x17, 0xa2, 0x89, 0xec, 0x69, 0x35, 0x7e, 0x4a, 0xde, 0x67, 0x6c, 0x31, 0x5a, 0xa4, 0xe3, 0x81, 0x8b, 0xef, 0xaa, 0x74, 0x11, 0x76, 0x04, 0xd5, 0xe3, 0x6a, 0x33, 0x6d, 0xee, 0x0d, 0x3b, 0xbf, 0xff, 0x0d, 0xe8, 0xf5, 0xe2, 0x10, 0x12, 0x19, 0xcc, 0x90, 0x20, 0x88, 0xf6, 0xe9, 0xcb, 0xa4, 0x8b, 0xb0, 0x25, 0xca, 0xc4, 0x47, 0xd9, 0x84, 0x51, 0xae, 0xb4, 0xff, 0xfc, 0x9c, 0x64, 0xbf, 0x89, 0xcf, 0x80, 0x91, 0xe0, 0xa0, 0xc9, 0xc1, 0x6e, 0xda, 0xb0, 0x8e, 0xc8, 0xcc, 0x18, 0xdb, 0x91, 0x9d, 0x5c, 0x27, 0x9f, 0xe0, 0x94, 0xbf, 0x59, 0x68, 0x14, 0x32, 0x63, 0x5e, 0x36, 0x06, 0x7e, 0x90, 0x5a, 0xa9, 0xa9, 0x0c, 0x2a, 0xaa, 0x8c, 0xee, 0x23, 0x29, 0x17, 0x76, 0x51, 0x8d, 0x67, 0x5e, 0x59, 0x75, 0xe9, 0x6a, 0xbd, 0xf0, 0xc1, 0x40, 0x5c, 0xf0, 0x6d, 0x7a, 0x38, 0xfc, 0xa5, 0xfa, 0x7c, 0x26, 0x86, 0x7d, 0xbe, 0x3d, 0xf0, 0x73, 0x81, 0x43, 0x2d, 0x0f, 0xfe, 0x21, 0xd3, 0x9a, 0x24, 0x9a, 0xeb, 0x0c, 0xdd, 0x7e, 0x52, 0xdd, 0x93, 0x20, 0x60, 0x19, 0xf3, 0x09, 0xc8, 0xb3, 0xf0, 0xee, 0xbf, 0x1b, 0x0b, 0xe0, 0x61, 0x12, 0xd2, 0xc3, 0x50, 0xbe, 0xa7, 0x01, 0x9e, 0xf9, 0xc3, 0x80, 0xed, 0xef, 0x7b, 0xd1, 0xd4, 0xe8, 0xc1, 0xaa, 0x85, 0x62, 0xed, 0x96, 0xad, 0x63, 0xbe, 0xeb, 0x9c, 0x0d, 0x9b, 0xfc, 0xa6, 0x73, 0x1f, 0x91, 0xc9, 0xab, 0xd5, 0x94, 0x90, 0x25, 0x40, 0x0d, 0x36, 0x3a, 0x1f, 0x51, 0x0f, 0x08, 0xee, 0x75, 0x24, 0x7e, 0xb0, 0x09, 0x1d, 0xb3, 0xec, 0x03, 0x65, 0x7c, 0xf6, 0xfa, 0x88, 0x3d, 0x6f, 0x95, 0xe0, 0xff, 0x0f, 0x42, 0x70, 0xc3, 0xa2, 0x2b, 0x10, 0x16, 0x51, 0x66, 0xcb, 0xe6, 0x23, 0x6b, 0x85, 0x94, 0xc4, 0xcc, 0xe0, 0x4a, 0x84, 0x20, 0x61, 0x8f, 0xa2, 0x40, 0xcf, 0x19, 0xcb, 0xb7, 0xdc, 0xe2, 0xde, 0x73, 0x08, 0x7e, 0xf2, 0xc1, 0xc1, 0xab, 0x9a, 0x78, 0xcf, 0x2a, 0x68, 0x73, 0xef, 0xcd, 0xaf, 0x45, 0xbe, 0xd2, 0x8d, 0x29, 0xd9, 0x6f, 0x29, 0x38, 0x43, 0xae, 0x3a, 0xdf, 0x07, 0x7b, 0xc9, 0x8f, 0x1e, 0xfb, 0x37, 0xb6, 0x92, 0x20, 0x81, 0xef, 0xe4, 0x7b, 0xc3, 0x75, 0xac, 0x51, 0xfb, 0xde, 0x7f, 0xf0, 0x10, 0x06, 0x15, 0x43, 0x13, 0x49, 0xab, 0xa5, 0xc4, 0xf5, 0xa7, 0xf3, 0x58, 0xfe, 0x7b, 0xe5, 0x79, 0xf4, 0xcb, 0x9e, 0x8f, 0x33, 0xd2, 0x81, 0x3e, 0x5a, 0x02, 0x47, 0x2f, 0xfe, 0xea, 0x4e, 0x14, 0x9f, 0x5d, 0x34, 0xe6, 0xda, 0xd1, 0xa5, 0x71, 0xe1, 0x05, 0x71, 0x13, 0x29, 0xe7, 0xe2, 0xc1, 0x62, 0xb4, 0x4c, 0x4a, 0xac, 0x61, 0xe5, 0xe0, 0x08, 0x3a, 0xd7, 0xd4, 0x0c, 0xc9, 0x94, 0xa1, 0xdc, 0xf9, 0x6a, 0x2c, 0x55, 0x7b, 0x57, 0x4a, 0x8b, 0x69, 0x1e, 0x83, 0x76, 0x29, 0x9a, 0x16, 0xe8, 0x95, 0x53, 0x3c, 0xc2, 0x58, 0x4f, 0xb1, 0x68, 0x9b, 0x2b, 0x71, 0x72, 0xe2, 0x6a, 0xbf, 0xa5, 0x30, 0x0c, 0x6c, 0x21, 0x72, 0x62, 0x56, 0xdb, 0x1a, 0x22, 0x2f, 0x4e, 0x0b, 0xb7, 0x80, 0x6e, 0xb5, 0xda, 0xed, 0xde, 0x81, 0x66, 0xba, 0x62, 0x6f, 0x68, 0x8e, 0x97, 0xfd, 0x76, 0x77, 0xe2, 0x4c, 0x43, 0x2f, 0xa6, 0x7e, 0x70, 0x9e, 0xba, 0x62, 0xa4, 0x9f, 0x1a, 0x53, 0xde, 0x07, 0xdc, 0x5d, 0x0a, 0xe4, 0x66, 0xa2, 0xd3, 0x02, 0xdf, 0xfc, 0xb9, 0xb4, 0xe3, 0xe4, 0x63, 0xd0, 0x7b, 0x93, 0x36, 0xfc, 0x4c, 0x66, 0x26, 0x28, 0x0e, 0x87, 0xcc, 0x5c, 0x40, 0xca, 0xb9, 0xb4, 0x1a, 0xd5, 0x0b, 0xa9, 0xc4, 0x84, 0x3e, 0x91, 0xc5, 0x8c, 0x44, 0x69, 0xbe, 0x5e, 0xd7, 0xd3 ],
-const [ 0x0e, 0x2f, 0xce, 0x9e, 0x12, 0x3c, 0x9e, 0x83, 0xa8, 0xed, 0x6f, 0xa9, 0xaa, 0xc8, 0x79, 0xf9, 0xb1, 0x12, 0xc0, 0xf7, 0x7c, 0x9f, 0x96, 0x3e, 0x91, 0xe8, 0x61, 0x2a, 0x26, 0x5e, 0x9e, 0xd4, 0x41, 0xfe, 0x26, 0x43, 0x1f, 0x26, 0xb0, 0xe0, 0xd3, 0xa7, 0x98, 0x2b, 0x2f, 0x1b, 0xdf, 0xad, 0xe7, 0x79, 0x72, 0x2d, 0xf4, 0xe6, 0xaf, 0x27, 0x37, 0xce, 0x25, 0x7a, 0x5f, 0x34, 0x9b, 0x61, 0x0c, 0x46, 0x54, 0xa4, 0x34, 0x35, 0x92, 0x10, 0xc7, 0x43, 0x59, 0x24, 0x8e, 0x1e, 0x75, 0x0d, 0x59, 0x6c, 0xbf, 0xd5, 0x59, 0xa7, 0x9b, 0xd7, 0xcb, 0x2b, 0xc5, 0x76, 0xd6, 0x8d, 0x4e, 0x0e, 0xb7, 0x2f, 0xe1, 0x2b, 0x1b, 0x11, 0x4b, 0xf9, 0xcc, 0xea, 0x3a, 0xfc, 0x90, 0x78, 0x45, 0x01, 0x4f, 0x14, 0x2d, 0x55, 0x73, 0x89, 0x63, 0x34, 0x94, 0x26, 0xca, 0x84, 0x55, 0x12, 0xbd, 0xc4, 0x89, 0xe0, 0x54, 0x3f, 0x9b, 0x63, 0xe3, 0x85, 0x2c, 0xc4, 0xc4, 0x1b, 0xfd, 0xd1, 0x57, 0x72, 0x10, 0x98, 0x46, 0x16, 0x0a, 0x35, 0x0e, 0x28, 0xdc, 0xe8, 0xbb, 0x0e, 0xa2, 0x6b, 0xf2, 0x69, 0xcb, 0x82, 0x35, 0x47, 0x7b, 0xd3, 0x63, 0x9b, 0x2d, 0xf8, 0x7e, 0xea, 0x9d, 0xd3, 0xb1, 0x46, 0xe5, 0x21, 0x92, 0x80, 0xe6, 0x52, 0xa4, 0x9a, 0xe9, 0x99, 0x20, 0x7b, 0x86, 0x3f, 0xf5, 0xe6, 0xc6, 0x3c, 0x0d, 0xad, 0x84, 0x08, 0xd2, 0x22, 0x19, 0xaf, 0xf1, 0xcf, 0x38, 0x24, 0x5d, 0x67, 0x16, 0xd7, 0x98, 0xfc, 0xce, 0x89, 0x2e, 0x71, 0x05, 0x5f, 0x82, 0x33, 0xc9, 0x36, 0xcc, 0x24, 0xbf, 0x37, 0x63, 0xd8, 0x7e, 0xab, 0x38, 0x04, 0x36, 0x10, 0xa3, 0x33, 0x95, 0x6c, 0x63, 0xbb, 0xeb, 0xe1, 0xe0, 0xf0, 0x8c, 0x82, 0xb2, 0x97, 0x76, 0x65, 0x67, 0x9e, 0x33, 0xf9, 0x81, 0x0a, 0x01, 0x9a, 0xbf, 0x30, 0x31, 0x63, 0x9e, 0x28, 0xcd, 0x44, 0x1e, 0x7f, 0x7d, 0x54, 0xc9, 0x2c, 0xab, 0x68, 0xf2, 0xc5, 0xe6, 0xe4, 0x3b, 0xf3, 0x84, 0xd1, 0x5a, 0x24, 0x8c, 0x30, 0x1c, 0x7f, 0xd3, 0x8e, 0xa9, 0x1d, 0x64, 0xd9, 0x0b, 0x76, 0x25, 0x72, 0xea, 0x19, 0xb8, 0x83, 0x99, 0xa1, 0xa0, 0x93, 0x57, 0xe4, 0xa5, 0x58, 0xce, 0x6d, 0x79, 0xcc, 0xe0, 0x2d, 0x9b, 0x83, 0xa3, 0x6d, 0x7c, 0x3b, 0xaa, 0x07, 0xe1, 0xb5, 0x87, 0xd6, 0x88, 0xc3, 0x8d, 0x6b, 0x0e, 0xa3, 0xdb, 0x01, 0x10, 0x8b, 0x96, 0xb3, 0x91, 0x85, 0x75, 0xed, 0x9b, 0x7d, 0x83, 0x21, 0x29, 0x98, 0x20, 0xbb, 0x45, 0xc8, 0x49, 0x56, 0x6e, 0x9e, 0x1a, 0x30, 0x3c, 0x5f, 0x91, 0xdb, 0x47, 0x59, 0x95, 0x36, 0x44, 0x77, 0x37, 0x9c, 0x71, 0x14, 0x37, 0x5b, 0x34, 0x0d, 0xca, 0x68, 0xfe, 0x1a, 0x9a, 0x51, 0x76, 0x5e, 0x0f, 0x72, 0xd4, 0x3c, 0xcd, 0x6c, 0x8a, 0x6d, 0x7e, 0xd3, 0x2a, 0x4f, 0xd1, 0x27, 0x84, 0x80, 0xc2, 0x06, 0x0e, 0xac, 0x1d, 0x9f, 0x8a, 0xa3, 0x3d, 0x6a, 0xe2, 0xaf, 0x1a, 0x17, 0x57, 0x24, 0x83, 0xc4, 0xda, 0x38, 0xa7, 0x72, 0xba, 0x15, 0xda, 0xba, 0x80, 0x2d, 0x96, 0xbc, 0x18, 0xce, 0xc0, 0x59, 0x31, 0xf6, 0x2d, 0xa2, 0xe5, 0x68, 0x65, 0x8f, 0x9d, 0xff, 0xa7, 0xf5, 0x2f, 0x43, 0x2d, 0xb2, 0x4a, 0x3a, 0xb0, 0x2a, 0x14, 0x81, 0x2f, 0xf8, 0x11, 0x9a, 0xed, 0xdd, 0x47, 0x88, 0xb9, 0xfc, 0xa0, 0x99, 0x71, 0x4a, 0x8f, 0x84, 0xc9, 0x40, 0xf6, 0xb3, 0x49, 0xd3, 0x48, 0xe2, 0x95, 0xa5, 0xeb, 0xe9, 0xf1, 0x7d, 0xe0, 0xd6, 0x04, 0xf5, 0xa5, 0x3f, 0xdc, 0x72, 0x5a, 0xd7, 0x33, 0x59, 0x24, 0x3e, 0xf1, 0x80, 0xcf, 0x1e, 0xf2, 0xe3, 0xb7, 0x73, 0x08, 0x99, 0xe8, 0x2a, 0x44, 0x06, 0x84, 0xee, 0x71, 0x51, 0x65, 0x3f, 0xe2, 0x18, 0x04, 0xc4, 0x6e, 0x63, 0x99, 0xe2, 0xb8, 0xd7, 0x84, 0x8d, 0xb4, 0x2d, 0xec, 0x5e, 0x66, 0xe2, 0xa6, 0xe6, 0xed, 0x2f, 0x58, 0x43, 0xc1, 0x3b, 0xde, 0xf0, 0x39, 0x90, 0xec, 0xe2, 0x50, 0xcb, 0xf5, 0xd0, 0xa8, 0x98, 0x4c, 0xd2, 0xcf, 0xde, 0x8a, 0x2d, 0xc2, 0x37, 0x2f, 0x6d, 0xaf, 0xa3, 0x8c, 0xb5, 0xff, 0x7d, 0xe0, 0x54, 0x94, 0xae, 0xc1, 0x98, 0x4f, 0x20, 0xbd, 0xe7, 0xd6, 0x76, 0x42, 0x0b, 0x94, 0xfa, 0xbb, 0xce, 0x01, 0xd6, 0xfc, 0xc7, 0x23, 0x88, 0xe0, 0x73, 0x55, 0x90, 0x30, 0x88, 0x47, 0x6b, 0xc7, 0x85, 0x46, 0xc5, 0xf4, 0x8e, 0xbd, 0xeb, 0x20, 0x77, 0xfc, 0x7f, 0xb1, 0x1f, 0x39, 0x6f, 0x2e, 0xff, 0xd4, 0x27, 0xa3, 0x02, 0xe0, 0x06, 0x47, 0x97, 0xde, 0x0f, 0x5c, 0x05, 0xcb, 0xe2, 0x57, 0x00, 0x5e, 0xea, 0x41, 0x79, 0x8b, 0xd7, 0x5d, 0xba, 0x4b, 0x4f, 0x0b, 0xb1, 0x9f, 0xe0, 0xec, 0x8c, 0xd2, 0x3a, 0x47, 0x87, 0xff, 0x9b, 0xab, 0x02, 0xd4, 0x8a, 0xd6, 0xd7, 0x95, 0xc8, 0xd6, 0xea, 0x64, 0x84, 0x6e, 0x02, 0xbf, 0xce, 0xbb, 0xd7, 0x4a, 0x4e, 0x17, 0x6c, 0xcf, 0x36, 0x3e, 0x9e, 0x83, 0x75, 0xb0, 0xfd, 0x8b, 0x2e, 0x56, 0xdc, 0xbe, 0x68, 0x67, 0xa4, 0xad, 0x07, 0x8d, 0x6e, 0xe0, 0xfb, 0x44, 0xd0, 0x63, 0xb7, 0x83, 0xf6, 0x82, 0xe4, 0x9f, 0xf5, 0xd0, 0x57, 0x6c, 0x5d, 0x6e, 0x41, 0xa5, 0x0d, 0x89, 0xa6, 0x8e, 0x4c, 0x25, 0x11, 0xd7, 0x15, 0x19, 0x85, 0xc4, 0xb1, 0x5b, 0xb6, 0x8b, 0x8c, 0x7e, 0x79, 0xfe, 0x41, 0x79, 0x7a, 0x69, 0xf7, 0xaa, 0x2d, 0xbe, 0xf0, 0x1b, 0x07, 0xef, 0x5f, 0x03, 0xed, 0x9c, 0x7a, 0x90, 0xed, 0xee, 0xd1, 0xe3, 0x2c, 0xc3, 0xde, 0x5d, 0x1f, 0x0b, 0xdd, 0x19, 0xfe, 0x71, 0xde, 0xb9, 0x76, 0x3f, 0x18, 0x66, 0x9f, 0x7b, 0x80, 0x12, 0x2d, 0x56, 0x9a, 0x00, 0xea, 0xc8, 0x8f, 0x87, 0x64, 0x74, 0x81, 0x13, 0xe2, 0xd1, 0x1b, 0x6c, 0x9d, 0x8b, 0x6c, 0x3b, 0x2d, 0x27, 0xf5, 0xca, 0x42, 0xe7, 0x00, 0x0b, 0x94, 0xed, 0x34, 0xdc, 0x1d, 0xa2, 0x67, 0x89, 0x85, 0x59, 0xb3, 0x92, 0xde, 0x30, 0xcc, 0xaf, 0x91, 0x37, 0x90, 0x12, 0x98, 0xd5, 0xe0, 0xec, 0xee, 0x67, 0xaf, 0x32, 0x44, 0x29, 0x58, 0xa1, 0xf6, 0x5a, 0x35, 0x00, 0x3d, 0x9b, 0x6d, 0xa5, 0xa6, 0x99, 0x0d, 0x3a, 0xc3, 0xeb, 0x5b, 0xc1, 0x20, 0x3e, 0x67, 0xd6, 0x78, 0xaf, 0xe2, 0x34, 0x29, 0x78, 0x33, 0x7b, 0xe6, 0xcf, 0xc8, 0x31, 0xac, 0x0b, 0xaa, 0x06, 0xf7, 0x09, 0x55, 0x5c, 0x35, 0xce, 0xc6, 0x06, 0x7b, 0x6d, 0xd5, 0x50, 0x77, 0x2b, 0xc5, 0x40, 0xa6, 0xe2, 0x1a, 0x1c, 0xc6, 0xa3, 0xaa, 0x2c, 0x8f, 0x9f, 0xf7, 0xc1, 0x9e, 0x48, 0xbc, 0x77, 0xb2, 0xb3, 0xc6, 0xb6, 0x1a, 0x41, 0x05, 0x7f, 0x6e, 0x7e, 0xe3, 0x65, 0x7e, 0x49, 0xd4, 0xd9, 0x88, 0x36, 0x2f, 0xab, 0xae, 0x30, 0x3c, 0xce, 0xa6, 0x63, 0x8e, 0x5c, 0xb4, 0x59, 0x93, 0xd9, 0xd5, 0x62, 0x69, 0xbc, 0x3d, 0x3a, 0xf3, 0x2b, 0x04, 0xe6, 0x2d, 0x07, 0x1d, 0xdf, 0xbc, 0x28, 0x87, 0x72, 0xca, 0xea, 0xc7, 0x67, 0x10, 0xe8, 0x95, 0xe1, 0x34, 0x07, 0xd6, 0x85, 0x56, 0xb7, 0xca, 0xde, 0xe6, 0x75, 0x87, 0x00, 0xb8, 0x94, 0xa6, 0x6c, 0x5a, 0x3e, 0x3c, 0x34, 0xa5, 0xb6, 0x0c, 0x60, 0x92, 0xdf, 0xfa, 0x8f, 0x4f, 0x02, 0xc3, 0xe2, 0x92, 0xcc, 0xec, 0x15, 0x2e, 0x96, 0xf8, 0xef, 0xe4, 0xea, 0xde, 0xdd, 0x7b, 0x42, 0xba, 0xda, 0x12, 0x12, 0xc3, 0x91, 0xb6, 0x09, 0x7d, 0xc6, 0x30, 0x94, 0x30, 0xf2, 0x20, 0xa5, 0x98, 0x2d, 0x50, 0xb2, 0xde, 0x51, 0x42, 0x00, 0xc7, 0x5d, 0x0b, 0x21, 0x2c, 0x17, 0x64, 0xbc, 0xaa, 0xf6, 0xff, 0x8c, 0x9a, 0x3e, 0x17, 0xab, 0x43, 0x6d, 0x4b, 0x11, 0x4f, 0xd6, 0xac, 0x57, 0x7c, 0x8c, 0x15, 0xc1, 0x94, 0x81, 0xbb, 0x7c, 0x9f, 0xef, 0x04, 0x24, 0x57, 0xf7, 0x9d, 0x8a, 0xdc, 0x89, 0xc7, 0xb3, 0xa9, 0x83, 0xf1, 0x24, 0xc7, 0x1d, 0x8c, 0x5c, 0x40, 0x84, 0x1b, 0xa3, 0xd7, 0xc5, 0x89, 0x02, 0xf6, 0xed, 0xc0, 0x93, 0xe8, 0x6e, 0x77, 0xfb, 0x48, 0xc5, 0x4b, 0x34, 0xba, 0x5a, 0x12, 0x90, 0xd9, 0xa8, 0x6c, 0xfa, 0x70, 0x9d, 0x9a, 0x7f, 0xec, 0x44, 0x94, 0x0e, 0x11, 0xa1, 0x55, 0x7c, 0xed, 0xdd, 0x7a, 0xcb, 0x0a, 0xa3, 0x0b, 0xac, 0xe8, 0xc9, 0x99, 0x42, 0xaa, 0x33, 0x89, 0x29, 0x10, 0xf4, 0xaf, 0xb7, 0xa5, 0xb7, 0x1f, 0x82, 0x3a, 0x5e, 0x3f, 0x22, 0x92, 0xe8, 0x21, 0x38, 0x5f, 0x98, 0x10, 0xaf, 0x6d, 0x53, 0x69, 0x41, 0x1e, 0x4b, 0xad, 0x3d, 0x16, 0xda, 0xd3, 0x88, 0x37, 0xb0, 0xe3, 0xe2, 0xd0, 0x31, 0xc0, 0x6b, 0x11, 0x19, 0x45, 0x66, 0xc3, 0x62, 0x94, 0x3c, 0x36, 0x67, 0xab, 0xc4, 0x7a, 0x49, 0x39, 0xc1, 0xd1, 0x92, 0xaf, 0xad, 0x65, 0x18, 0x99, 0xb5, 0x37, 0x25, 0x2f, 0x04, 0x58, 0xd4, 0x27, 0x44, 0x5b, 0xbe, 0xce, 0x62, 0x0a, 0xd6, 0x57, 0x92, 0x58, 0x92, 0x73, 0x94, 0x97, 0x4c, 0x22, 0x35, 0xeb, 0xe7, 0xc8, 0x18, 0xff, 0xb5, 0x83, 0xb6, 0xf6, 0x98, 0xbc, 0xa4, 0xa5, 0x68, 0xfc, 0x15, 0xff, 0x95, 0x01, 0x9f, 0xd0, 0x0e, 0x12, 0x42, 0xaf, 0x61, 0x8f, 0xa6, 0x2d, 0x23, 0xcc, 0xa4, 0x53, 0x92, 0x1f, 0x08, 0x4c, 0x79, 0x38, 0x95, 0x5e, 0x54, 0xb1, 0x4a, 0x1f, 0xb5, 0xe6, 0xe4, 0xe5, 0xe6, 0x07, 0xa4, 0x7e, 0xd0, 0x6c, 0x52, 0x21, 0x1b, 0x28, 0x82, 0xa5, 0x97, 0xe0, 0x16, 0xf1, 0xdb, 0xde, 0x04, 0xb4, 0x2c, 0x61, 0x5a, 0x56, 0xa0, 0x37, 0x7f, 0x2e, 0x82, 0x8e, 0xbb, 0xf5, 0xf9, 0x08, 0xf9, 0x7a, 0xe5, 0x0d, 0xcc, 0x98, 0x0a, 0x65, 0xb1, 0x65, 0x70, 0x06, 0x94, 0xad, 0x09, 0x2a, 0x95, 0x9f, 0x95, 0xa5, 0x0b, 0xc5, 0xc3, 0x76, 0xc9, 0x3a, 0x99, 0x9c, 0xa1, 0x17, 0x15, 0x2b, 0x27, 0x2e, 0x15, 0x9e, 0xb7, 0xfb, 0x74, 0x6f, 0xba, 0xd7, 0x76, 0xe5, 0x24, 0x6f, 0x66, 0x2e, 0x41, 0x75, 0x7d, 0xad, 0xb2, 0x95, 0x06, 0x95, 0xb3, 0xab, 0xc0, 0xb7, 0x9f, 0x33, 0x84, 0x98, 0xb5, 0x00, 0x27, 0xc7, 0x1c, 0x32, 0xa2, 0x6d, 0x25, 0x62, 0x70, 0x26, 0xd1, 0x1f, 0x38, 0x0f, 0x93, 0x9e, 0xac, 0x21, 0x56, 0xad, 0xb1, 0xbd, 0xc2, 0xe9, 0xc0, 0x87, 0xbb, 0x31, 0x8c, 0x78, 0x2b, 0x5a, 0xe5, 0x2f, 0x02, 0x24, 0xdc, 0x88, 0x7b, 0x6d, 0x28, 0x70, 0xa0, 0xa5, 0xc8, 0xf8, 0x10, 0x82, 0xea, 0xa8, 0x00, 0xf5, 0x0c, 0x15, 0x80, 0x5c, 0x61, 0xb5, 0xff, 0xf9, 0x76, 0xf3, 0x12, 0xa3, 0x15, 0x7f, 0x71, 0xbb, 0x6a, 0xe8, 0x42, 0x62, 0x64, 0x6c, 0x9b, 0xe9, 0x5e, 0x0f, 0x42, 0x89, 0xff, 0xea, 0xb7, 0x55, 0x5e, 0xc6, 0x74, 0x6c, 0x6a, 0xe9, 0x73, 0x73, 0x8a, 0x30, 0xf1, 0x43, 0x80, 0x5e, 0x72, 0xde, 0x93, 0xb4, 0x05, 0xa8, 0xed, 0xc2, 0xc9, 0xd4, 0x42, 0x7c, 0xb0, 0x1c, 0xb2, 0x90, 0x83, 0xb5, 0xf1, 0xf7, 0x26, 0x82, 0xa5, 0xca, 0x1e, 0x88, 0x0f, 0x58, 0x50, 0xa2, 0xee, 0x75, 0x0b, 0x75, 0xa0, 0x15, 0x49, 0xa7, 0x8b, 0x19, 0x32, 0x4c, 0xbb, 0x68, 0xe2, 0xa1, 0xcc, 0x42, 0x6c, 0xfd, 0x0b, 0xd1, 0x1f, 0x04, 0xd8, 0x01, 0x08, 0x1e, 0x4f, 0x92, 0xb7, 0x28, 0x27, 0x6c, 0x46, 0x69, 0xd9, 0x32, 0x98, 0xc7, 0x05, 0x19, 0xdf, 0x3a, 0x12, 0xfb, 0x61, 0x82, 0x16, 0xa7, 0x7b, 0x15, 0xf5, 0x7c, 0xe6, 0x5c, 0xcc, 0x36, 0x39, 0x1e, 0x90, 0x07, 0xaf, 0x3d, 0xf2, 0xea, 0x2b, 0xa0, 0x86, 0x34, 0x79, 0x70, 0x25, 0x6b, 0xd7, 0x87, 0x90, 0x5c, 0xb4, 0x25, 0x55, 0x68, 0xb7, 0xe5, 0xf7, 0x1f, 0x03, 0xf0, 0x49, 0x10, 0xba, 0x71, 0x1b, 0xde, 0xbf, 0x49, 0x18, 0x97, 0xc1, 0x03, 0xef, 0x42, 0x75, 0x0a, 0xb1, 0xb7, 0x22, 0x19, 0x7a, 0xb4, 0x63, 0xf4, 0x54, 0x2c, 0x29, 0x56, 0x58, 0xe2, 0xff, 0x2a, 0x17, 0x37, 0x92, 0xfd, 0x38, 0x40, 0x70, 0xb4, 0x62, 0x1c, 0x10, 0x7a, 0x5c, 0x85, 0x13, 0xfd, 0x72, 0xa4, 0xc9, 0xda, 0x1b, 0x2a, 0xf7, 0x55, 0xda, 0x9c, 0xd7, 0x4e, 0x62, 0xee, 0x61, 0x71, 0xfd, 0x54, 0xc9, 0xac, 0x2e, 0x55, 0x49, 0xe6, 0x95, 0x21, 0x20, 0xee, 0x14, 0x24, 0xdb, 0xb1, 0x30, 0xdb, 0xd3, 0xb1, 0xba, 0xe7, 0xf7, 0xb2, 0xae, 0x60, 0xcb, 0xb6, 0x5b, 0x6b, 0xb1, 0x2c, 0xc4, 0x0f, 0x68, 0x65, 0x47, 0x44, 0xd2, 0x47, 0x7c, 0x4d, 0xfa, 0x45, 0x60, 0x48, 0x55, 0x8f, 0xb3, 0x04, 0x48, 0x85, 0x9e, 0x12, 0xeb, 0x72, 0x99, 0x1f, 0x0d, 0x77, 0x8c, 0x81, 0x78, 0xc5, 0x34, 0x0f, 0x75, 0x0f, 0xc9, 0x36, 0x93, 0x40, 0xde, 0x49, 0xa5, 0x69, 0x88, 0x19, 0x0a, 0xfd, 0xc2, 0xc6, 0x31, 0x40, 0x10, 0xd4, 0x5b, 0xfd, 0x63, 0x81, 0xa3, 0x77, 0x3d, 0x56, 0x3c, 0xa3, 0x15, 0xfd, 0xfb, 0x94, 0xfd, 0x52, 0x15, 0x37, 0x82, 0xbc, 0x29, 0x40, 0xd4, 0xbe, 0x81, 0x64, 0x27, 0xc9, 0x95, 0xc9, 0x58, 0x55, 0xd0, 0xbb, 0xd4, 0x30, 0x97, 0xa0, 0xb6, 0x15, 0x88, 0x2e, 0x2f, 0x80, 0xff, 0xdb, 0x2b, 0xc1, 0xdf, 0x95, 0x31, 0x4f, 0x8f, 0xb4, 0x8b, 0x60, 0x42, 0x2d, 0xa8, 0xb6, 0x7c, 0x08, 0xbe, 0xbc, 0xd2, 0x14, 0xb3, 0xd1, 0xf1, 0xd9, 0x3e, 0xe4, 0xe1, 0xce, 0x4a, 0x41, 0x8b, 0xcc, 0x9b, 0xaa, 0x79, 0xc3, 0xb3, 0xaa, 0xde, 0xac, 0xf7, 0x26, 0xd6, 0xbe, 0x0e, 0x35, 0xee, 0xe5, 0x8a, 0x32, 0xe7, 0x70, 0xca, 0x0f, 0xb7, 0x09, 0x1e, 0xeb, 0xd1, 0xeb, 0x2d, 0xe7, 0xa6, 0x4f, 0x94, 0x36, 0x6c, 0x27, 0xd0, 0x74, 0x1e, 0x0f, 0x5e, 0x39, 0xc4, 0x81, 0x20, 0xed, 0xf4, 0x48, 0x03, 0xde, 0x99, 0x37, 0xdf, 0x8f, 0xf3, 0x1a, 0x9f, 0x54, 0xdf, 0xed, 0xa1, 0x1b, 0x59, 0x4c, 0x60, 0x8d, 0x3f, 0x2b, 0x50, 0x56, 0x57, 0xc7, 0x09, 0xc0, 0x94, 0xdc, 0xa8, 0x87, 0x95, 0x19, 0x72, 0xe9, 0x6f, 0xd1, 0xbb, 0xfc, 0xac, 0xf3, 0x07, 0x44, 0x94, 0x3c, 0x6e, 0x85, 0xab, 0xab, 0x45, 0xd6, 0x7a, 0x36, 0xfa, 0xf7, 0x92, 0xbb, 0x40, 0xe4, 0xcf, 0x39, 0x6c, 0xaa, 0xda, 0x40, 0x1f, 0x7a, 0xf1, 0xa6, 0x26, 0xfc, 0xeb, 0x7c, 0x9e, 0xe5, 0x76, 0x40, 0x5c, 0xcc, 0xa4, 0x54, 0x8c, 0x3a, 0xa6, 0xaf, 0x97, 0x00, 0xd7, 0xd3, 0x4b, 0xcd, 0xfc, 0xff, 0x36, 0xff, 0xc9, 0xa5, 0x52, 0xba, 0xa8, 0x1e, 0xe8, 0x37, 0xb7, 0x9d, 0xae, 0x5f, 0x0f, 0x62, 0x32, 0x99, 0x4c, 0x30, 0x7c, 0xe0, 0x4a, 0x00, 0xef, 0x18, 0x2c, 0xf7, 0x71, 0xa2, 0xa3, 0x96, 0xcc, 0x2e, 0x6d, 0x31, 0x53, 0xd0, 0x1b, 0xa2, 0xc8, 0x57, 0x18, 0x3e, 0x7d, 0xda, 0xe7, 0x08, 0xba, 0x93, 0xac, 0x25, 0x5f, 0xf0, 0xee, 0x90, 0xca, 0xe8, 0x9b, 0x0f, 0xfb, 0x8c, 0x4c, 0x66, 0xf6, 0xde, 0xcb, 0xca, 0x69, 0xe5, 0xd3, 0x98, 0x8f, 0x01, 0x16, 0x47, 0x54, 0x7d, 0x84, 0x9c, 0xba, 0x63, 0xcb, 0x1c, 0x7b, 0x94, 0x1a, 0xc7, 0xf0, 0x17, 0x2b, 0x03, 0x31, 0xb2, 0x80, 0xd7, 0x7e, 0xb7, 0xed, 0x59, 0xde, 0x21, 0x56, 0x6a, 0x05, 0xdf, 0xba, 0xa0, 0x7b, 0x70, 0x70, 0x84, 0xfb, 0xb0, 0xb1, 0xfe, 0x1a, 0xf2, 0x57, 0x0d, 0x29, 0x4e, 0xe4, 0xbb, 0x5b, 0x3d, 0xc6, 0x51, 0x2b, 0x63, 0xda, 0xc7, 0xf8, 0xab, 0x2e, 0x7e, 0xf2, 0x99, 0x0b, 0x32, 0x3a, 0xdc, 0x33, 0x2a, 0x45, 0x23, 0x67, 0xb1, 0x82, 0x32, 0x2c, 0xca, 0x3c, 0x35, 0xcf, 0x20, 0xc1, 0x54, 0xa7, 0x3c, 0xc4, 0x87, 0x9a, 0xfa, 0x00, 0xac, 0xe2, 0x3e, 0x1e, 0xd7, 0x11, 0xe3, 0xd9, 0xe9, 0x53, 0xf4, 0x60, 0x64, 0xf4, 0x1f, 0xfb, 0x7d, 0x22, 0x66, 0xf2, 0x73, 0xf3, 0x18, 0xab, 0x20, 0xaa, 0x00, 0x12, 0xce, 0x36, 0xdc, 0x3d, 0x4b, 0xfb, 0x11, 0x51, 0x40, 0xd5, 0x9c, 0x9f, 0xbe, 0x5a, 0x4c, 0x13, 0x1a, 0x60, 0x2e, 0xcf, 0xfb, 0xc0, 0x49, 0x13, 0xb1, 0x59, 0x8c, 0x60, 0xc8, 0x57, 0x05, 0xdd, 0xdd, 0xb5, 0x54, 0xf9, 0xb1, 0x00, 0x5e, 0x52, 0x7c, 0x5e, 0x46, 0xd6, 0x84, 0xd0, 0x99, 0x27, 0xed, 0xb4, 0xc8, 0x44, 0xd3, 0x8e, 0xdc, 0x67, 0x96, 0x07, 0x65, 0x29, 0x75, 0x36, 0xb3, 0xec, 0x5f, 0x1f, 0x49, 0x7a, 0x05, 0x79, 0x8f, 0xea, 0x34, 0xb5, 0xc7, 0xc4, 0x62, 0x3b, 0x42, 0x65, 0x87, 0xf7, 0xd4, 0xa4, 0x2e, 0x14, 0x85, 0xb5, 0xcb, 0x07, 0x89, 0x4e, 0x4f, 0xd0, 0x73, 0x09, 0xfa, 0x7c, 0xa5, 0x0a, 0x70, 0xef, 0x0b, 0xe1, 0x10, 0xe0, 0x09, 0xb1, 0x81, 0x25, 0xb1, 0x92, 0x8d, 0x31, 0x3a, 0x35, 0x33, 0xdb, 0xad, 0xc7, 0xf7, 0x61, 0xe2, 0x17, 0x7d, 0xac, 0xab, 0xfa, 0x56, 0xd5, 0x4f, 0xef, 0x1a, 0xe9, 0x3a, 0xff, 0xb7, 0xe9, 0xf2, 0xe7, 0x08, 0x15, 0x4d, 0x79, 0xaa, 0x6a, 0xe2, 0x40, 0x0b, 0x6a, 0xbd, 0x63, 0xc3, 0x1b, 0x57, 0xcb, 0x28, 0x52, 0xc5, 0x88, 0x1c, 0x31, 0x2f, 0x71, 0x2a, 0xef, 0x84, 0x0b, 0xd2, 0xd7, 0x6c, 0xad, 0x20, 0x94, 0x7e, 0xe1, 0x84, 0xab, 0xb4, 0x0c, 0xdd, 0x49, 0x1b, 0x52, 0xd7, 0x3f, 0xcf, 0xb4, 0x77, 0x4b, 0x27, 0x7b, 0xf4, 0x99, 0x2d, 0xda, 0xc9, 0x89, 0x51, 0xcf, 0x08, 0xb3, 0x5e, 0x4a, 0xf1, 0x29, 0xac, 0x91, 0xc3, 0xfb, 0x98, 0xe3, 0xd2, 0x01, 0x31, 0x5b, 0xda, 0xd4, 0x34, 0x18, 0x93, 0x1e, 0x3b, 0x9b, 0x85, 0x14, 0x31, 0x70, 0x1e, 0x40, 0x09, 0x11, 0x02, 0x84, 0xaf, 0x07, 0xa2, 0x5c, 0x3f, 0x52, 0x10, 0x63, 0x76, 0x0b, 0x12, 0x19, 0x66, 0x48, 0x75, 0xe3, 0x6d, 0x40, 0xa3, 0x53, 0x67, 0xb0, 0x78, 0xaa, 0x23, 0x7d, 0x52, 0x9b, 0x14, 0x9a, 0x67, 0x52, 0x49, 0x2c, 0x5c, 0xb5, 0x9f, 0xec, 0x13, 0xea, 0x36, 0xcd, 0xc4, 0x19, 0x21, 0xe0, 0x4f, 0x73, 0x62, 0x74, 0xd0, 0x73, 0x15, 0x81, 0x74, 0x63, 0xeb, 0x47, 0x8c, 0x23, 0xda, 0x32, 0xe0, 0x26, 0x13, 0x01, 0x46, 0xbd, 0x35, 0x27, 0x73, 0x98, 0xc0, 0x71, 0x10, 0x89, 0xcc, 0xea, 0x11, 0x8c, 0xfb, 0xfc, 0x42, 0x05, 0xac, 0xd7, 0x22, 0x48, 0x71, 0x17, 0xf5, 0x5e, 0xc4, 0xa0, 0x15, 0x07, 0xf5, 0xcd, 0x89, 0xfb, 0x67, 0xcb, 0xd8, 0x75, 0xfc, 0x3f, 0x1f, 0xf2, 0xce, 0x2f, 0x62, 0x36, 0x20, 0x1f, 0x20, 0x91, 0x94, 0x7a, 0x2a, 0x60, 0x9e, 0x34, 0xb5, 0xd6, 0x38, 0xae, 0xad, 0xfd, 0xd7, 0xda, 0x4c, 0xf7, 0x9e, 0x9f, 0xec, 0x8a, 0xd2, 0x7f, 0x19, 0xdc, 0x8f, 0x77, 0xeb, 0x7a, 0xb9, 0x26, 0x92, 0x9f, 0x34, 0x32, 0x33, 0xb4, 0x58, 0xe8, 0xf3, 0x13, 0x9f, 0x22, 0x51, 0x10, 0xa1, 0x6e, 0xb8, 0x3a, 0x43, 0x6c, 0x54, 0xde, 0x2b, 0x78, 0x26, 0xcd, 0x77, 0x89, 0x53, 0x5f, 0xae, 0x59, 0xc2, 0xb8, 0xf6, 0xc7, 0xe5, 0x4a, 0x88, 0x79, 0xd7, 0x9b, 0x62, 0xc5, 0xa8, 0x49, 0x3b, 0xd2, 0xf5, 0x4b, 0xbc, 0xfa, 0xbb, 0x79, 0xed, 0x73, 0x6c, 0x4f, 0xee, 0x2f, 0x43, 0xee, 0xe7, 0x00, 0xd5, 0x63, 0x41, 0x00, 0xea, 0x2c, 0x17, 0x30, 0x8a, 0xf8, 0xe7, 0x5f, 0x5b, 0xaf, 0x8e, 0x4e, 0x2a, 0xb2, 0x73, 0x11, 0xc7, 0x64, 0x02, 0xb8, 0x16, 0xe9, 0x5c, 0x2f, 0x63, 0x2e, 0x4c, 0x63, 0xf6, 0x29, 0x7e, 0xa6, 0xe7, 0x62, 0xeb, 0x55, 0x34, 0xb2, 0x98, 0xb8, 0x11, 0x4a, 0x80, 0x29, 0x7f, 0xf8, 0xce, 0x79, 0x20, 0xa6, 0x50, 0x8f, 0x4a, 0x24, 0x29, 0x52, 0x5a, 0x27, 0xc6, 0xca, 0x4b, 0x91, 0x13, 0x81, 0x87, 0xf2, 0xee, 0x30, 0xfc, 0x4f, 0xdc, 0x97, 0x73, 0x23, 0xfa, 0xad, 0x1d, 0xa4, 0x37, 0xf9, 0x6f, 0x47, 0xc1, 0x40, 0x30, 0x86, 0xbd, 0x60, 0xd1, 0xe1, 0x3b, 0x7c, 0xfc, 0x23, 0x69, 0x59, 0x6f, 0xe6, 0x06, 0x08, 0x0b, 0x59, 0x1a, 0xc6, 0x28, 0x41, 0xe5, 0x20, 0x2c, 0x3e, 0x15, 0x5b, 0x5c, 0x50, 0x3c, 0x12, 0xf2, 0x99, 0x80, 0x21, 0x6f, 0x65, 0x95, 0xc2, 0x32, 0x67, 0xe8, 0xf6, 0x4a, 0x45, 0x1d, 0x27, 0x89, 0x58, 0xbc, 0x0b, 0xd9, 0xad, 0x27, 0xcb, 0xd3, 0x4f, 0xd0, 0x65, 0x8e, 0xc8, 0xa8, 0x4f, 0xb5, 0xe5, 0xdb, 0x5d, 0xdd, 0xba, 0xba, 0xe4, 0x15, 0xe6, 0xf8, 0x20, 0xbe, 0x18, 0x1a, 0xd3, 0x9d, 0xd2, 0x29, 0x2f, 0x2e, 0x6d, 0xaa, 0xf6, 0x3b, 0x5e, 0xd0, 0xe0, 0xae, 0xb7, 0xef, 0x3d, 0xa4, 0xf1, 0x34, 0xdb, 0xc2, 0xe8, 0x94, 0x2a, 0xcc, 0x27, 0x02, 0x9e, 0x73, 0x66, 0xe5, 0x55, 0x6f, 0x51, 0xc9, 0xfa, 0xce, 0x8b, 0x54, 0xe9, 0x8c, 0xf3, 0x7c, 0x93, 0x63, 0x26, 0xf8, 0x24, 0xe4, 0x45, 0xf4, 0x64, 0xc7, 0xf8, 0x09, 0xdb, 0x80, 0xb2, 0x6c, 0x39, 0x13, 0x37, 0x66, 0xf5, 0x28, 0x5c, 0x04, 0x33, 0x62, 0x0e, 0x0f, 0xeb, 0xed, 0x96, 0x3e, 0x48, 0x56, 0x1b, 0xab, 0x4e, 0xa0, 0x69, 0x84, 0xc0, 0x94, 0xf1, 0x03, 0x41, 0x58, 0x10, 0xa0, 0xb9, 0x43, 0x94, 0x85, 0xfa, 0xf0, 0x7c, 0x42, 0xa4, 0x91, 0xff, 0xc2, 0x45, 0x86, 0xd0, 0x7d, 0xc5, 0x2f, 0xa1, 0xf0, 0x02, 0xfe, 0xe6, 0x4a, 0xb7, 0xd0, 0xdb, 0x69, 0xa2, 0x7d, 0xc8, 0x04, 0xe6, 0xad, 0x83, 0x2a, 0xae, 0xee, 0x37, 0xeb, 0x13, 0x04, 0x65, 0x55, 0x40, 0x80, 0x28, 0xa2, 0xd3, 0x95, 0xbd, 0xaf, 0x87, 0x26, 0x42, 0xb0, 0x10, 0x23, 0xbe, 0x23, 0x47, 0x16, 0x62, 0x02, 0x87, 0xf9, 0x0f, 0x3d, 0x57, 0x4b, 0x18, 0x67, 0x49, 0x63, 0x48, 0xaf, 0x22, 0x03, 0x27, 0x13, 0x3a, 0x30, 0x79, 0xd0, 0x26, 0x41, 0x08, 0x1d, 0x95, 0x37, 0xa3, 0x18, 0x78, 0x4c, 0x67, 0x01, 0x66, 0xcf, 0x3d, 0xa6, 0x3e, 0x2e, 0xa4, 0x1e, 0x0e, 0x55, 0xb1, 0xba, 0x33, 0x36, 0x53, 0x39, 0xc2, 0xa9, 0xdc, 0x3b, 0x27, 0x77, 0xbd, 0xf9, 0x0c, 0xb1, 0x91, 0x32, 0x7d, 0x47, 0x5e, 0x69, 0x49, 0xd5, 0x17, 0x4d, 0xab, 0xc0, 0x65, 0x79, 0x29, 0x82, 0xa6, 0x5d, 0xbd, 0x42, 0x37, 0x7c, 0x33, 0xa8, 0xee, 0xd9, 0xd2, 0xef, 0xeb, 0xab, 0x3e, 0x3c, 0x91, 0x58, 0x9d, 0x2e, 0xcf, 0xa1, 0xf9, 0xb6, 0xa4, 0x1a, 0xe5, 0x29, 0xe2, 0xde, 0x64, 0x93, 0x32, 0x80, 0x06, 0x4f, 0x58, 0x45, 0x54, 0xd4, 0xb8, 0x90, 0x6e, 0xd2, 0x19, 0x9d, 0xf3, 0x7e, 0xaa, 0x72, 0x21, 0x29, 0x42, 0x13, 0x3e, 0x18, 0xec, 0xf6, 0x36, 0x90, 0xa3, 0xb6, 0x85, 0x30, 0x5a, 0x0b, 0x57, 0x84, 0x40, 0xfa, 0xee, 0xd6, 0x41, 0x49, 0x45, 0x47, 0xd0, 0x36, 0xf3, 0x1f, 0xe4, 0x69, 0x51, 0x62, 0x40, 0x26, 0xdf, 0xa4, 0xf8, 0xc7, 0xe4, 0x1d, 0x31, 0x6a, 0x55, 0x00, 0x28, 0xe7, 0xf8, 0x09, 0x76, 0x05, 0xc9, 0x55, 0x92, 0xed, 0x9d, 0x77, 0x97, 0xde, 0x05, 0xc8, 0x47, 0x23, 0x75, 0xfe, 0x50, 0x42, 0xa6, 0x01, 0xcf, 0x77, 0x38, 0xfa, 0x13, 0x60, 0x9c, 0xac, 0xa3, 0xfa, 0x31, 0x07, 0x82, 0xcc, 0xad, 0xfa, 0xb1, 0x62, 0xbf, 0x8a, 0xf6, 0xfd, 0xf3, 0x21, 0xdc, 0x89, 0xd5, 0x28, 0xfb, 0xcf, 0x59, 0xd7, 0x79, 0xec, 0x7a, 0x4c, 0xd1, 0x02, 0x22, 0xdb, 0xd3, 0x2d, 0x4a, 0xa6, 0xed, 0xb9, 0x62, 0x6d, 0xa8, 0x92, 0xf3, 0xa7, 0x75, 0xfb, 0x83, 0xd1, 0xaa, 0x83, 0xb9, 0x06, 0xc8, 0x35, 0xc1, 0xd0, 0xff, 0x10, 0xf2, 0x3e, 0xf4, 0xb7, 0xae, 0x36, 0xc1, 0x69, 0x8a, 0x0d, 0x3d, 0x32, 0xaf, 0x55, 0x7f, 0x63, 0x81, 0xf6, 0x9d, 0x41, 0x7e, 0x81, 0xb9, 0xfa, 0x68, 0xc0, 0x3f, 0xdd, 0xa6, 0x92, 0x68, 0xc9, 0xe8, 0xf5, 0x03, 0xe6, 0x0a, 0x65, 0x74, 0x94, 0x3b, 0x65, 0xfd, 0xa1, 0x5e, 0x5b, 0x3c, 0xbf, 0xb0, 0xa0, 0xf5, 0x35, 0xab, 0xd8, 0x12, 0xd4, 0x2b, 0x7f, 0xe8, 0x2d, 0xd0, 0xc5, 0xbc, 0x01, 0xa3, 0x9c, 0x86, 0xf9, 0xfc, 0x0f, 0xf4, 0x97, 0xa3, 0xd5, 0xb2, 0x6d, 0x35, 0x26, 0xe9, 0x8d, 0xc9, 0xcd, 0x06, 0x40, 0xd4, 0x7f, 0xbc, 0xfb, 0x4a, 0x6b, 0x4c, 0x8e, 0x06, 0x12, 0x04, 0x9f, 0x6c, 0x59, 0x05, 0x57, 0x4d, 0xdc, 0x4a, 0x5b, 0x0a, 0x86, 0xe6, 0xfe, 0xfd, 0x5f, 0x8d, 0xb5, 0x14, 0xa4, 0x56, 0xcb, 0xbf, 0x1d, 0xbf, 0x55, 0x0d, 0xab, 0xf2, 0x69, 0x12, 0x21, 0x47, 0x8b, 0x8b, 0x54, 0x09, 0x68, 0xc5, 0x76, 0x7d, 0xc7, 0xba, 0x9f, 0x20, 0xbc, 0x7d, 0xad, 0x31, 0x1e, 0xd9, 0x4e, 0x6f, 0x3c, 0x35, 0x5b, 0x24, 0xcc, 0xbb, 0x68, 0x62, 0x24, 0xba, 0x99, 0x8d, 0xad, 0x48, 0xb7, 0x19, 0x94, 0x2b, 0x82, 0x95, 0xc2, 0xfa, 0x49, 0xe9, 0x0f, 0x7f, 0xb9, 0xdc, 0xb2, 0x60, 0xf3, 0xd9, 0xfc, 0xfe, 0xe1, 0xf2, 0x47, 0x9e, 0xc9, 0x25, 0x29, 0xc7, 0x22, 0xde, 0xed, 0xea, 0xa7, 0xbe, 0x43, 0x49, 0xab, 0x9b, 0x36, 0x11, 0xac, 0xc8, 0x5f, 0xc9, 0x2a, 0x96, 0x58, 0xf0, 0xb9, 0x1a, 0x74, 0xe2, 0x56, 0x31, 0xad, 0xfc, 0xf7, 0xc2, 0xde, 0x00, 0x66, 0x43, 0x33, 0xbb, 0x4e, 0x7f, 0xdd, 0xe5, 0x96, 0x96, 0x0a, 0x48, 0xef, 0x45, 0x14, 0x25, 0xa9, 0x67, 0xf8, 0xd3, 0xcb, 0xbc, 0x0b, 0xa9, 0x62, 0xea, 0xe8, 0x1e, 0x19, 0xc1, 0xad, 0x2f, 0x0a, 0xc3, 0x67, 0x01, 0xd4, 0xe4, 0xca, 0xc8, 0xee, 0x8e, 0x26, 0xe7, 0x3b, 0xe8, 0x96, 0x59, 0xde, 0x58, 0x7b, 0x4f, 0x4f, 0x47, 0x28, 0x1a, 0xae, 0x24, 0xdf, 0x4c, 0x58, 0xab, 0xfd, 0x1a, 0xb9, 0x67, 0x71, 0x05, 0x61, 0x75, 0x72, 0xba, 0x59, 0x8c, 0x72, 0x36, 0xb7, 0x3a, 0x4d, 0x2d, 0x70, 0x70, 0xc7, 0xad, 0x6e, 0x41, 0x35, 0xff, 0xe2, 0xe7, 0x7a, 0xce, 0xdc, 0x07, 0x35, 0x8a, 0x19, 0x36, 0x39, 0x0f, 0x1b, 0xbb, 0x3e, 0x82, 0x7f, 0x96, 0xd6, 0x7c, 0x8c, 0xc2, 0xa2, 0x6b, 0x08, 0xb8, 0xc5, 0x35, 0x4f, 0x34, 0x99, 0x1e, 0xa6, 0x3b, 0xa1, 0xeb, 0xcc, 0x5d, 0xbf, 0x47, 0xd2, 0x38, 0xa7, 0x67, 0x2d, 0x3d, 0x94, 0xea, 0x0a, 0xb7, 0x3a, 0x03, 0xe1, 0x08, 0xfb, 0xd9, 0x4d, 0x36, 0x5d, 0x2e, 0x1b, 0xa7, 0xbc, 0x3f, 0xa0, 0x29, 0x3c, 0xec, 0x50, 0x36, 0x02, 0x19, 0x8d, 0x75, 0xa4, 0x54, 0xbd, 0x83, 0xdd, 0xb8, 0x9f, 0xf4, 0x86, 0x11, 0xdf, 0x95, 0xc1, 0x41, 0xe8, 0xf4, 0x78, 0xe2, 0xf9, 0x23, 0x06, 0x2c, 0x7b, 0xb8, 0x33, 0x19, 0x92, 0x18, 0x66, 0xc8, 0xf2, 0xf6, 0x16, 0x1f, 0xf4, 0x16, 0x82, 0xb5, 0xe8, 0x57, 0xa2, 0xef, 0xad, 0xf0, 0x5d, 0x69, 0x80, 0xfa, 0xfc, 0x97, 0x12, 0x2f, 0xdf, 0xac, 0xdd, 0xf1, 0x6e, 0xba, 0xb7, 0x8e, 0x53, 0x1b, 0xa8, 0xc2, 0xe7, 0x11, 0xf9, 0x7d, 0xe9, 0xa9, 0x8d, 0xe7, 0x76, 0xe5, 0x75, 0xa1, 0x35, 0x19, 0xbe, 0x4e, 0xd3, 0x96, 0x8d, 0x53, 0xaf, 0x86, 0x6f, 0xda, 0xd6, 0x17, 0xea, 0x1d, 0x31, 0xdc, 0x58, 0xe1, 0xfd, 0x70, 0xf5, 0x40, 0x7c, 0x5c, 0x36, 0xac, 0xea, 0x3a, 0x5c, 0x31, 0xb3, 0x1b, 0x4a, 0xfa, 0xe3, 0x27, 0x93, 0x17, 0xde, 0x83, 0xd8, 0x7e, 0x51, 0x78, 0x51, 0x4f, 0x68, 0xd1, 0xa9, 0x5c, 0x42, 0x84, 0x0f, 0xe8, 0xa2, 0x95, 0x8a, 0xaf, 0xe7, 0x38, 0x8c, 0x27, 0x3e, 0x36, 0xcb, 0x06, 0x16, 0x91, 0x4c, 0x04, 0xd4, 0x6b, 0xc0, 0xe2, 0xc8, 0x24, 0x14, 0xab, 0x60, 0xc3, 0x44, 0x3a, 0x9c, 0x97, 0x70, 0xfc, 0xc2, 0x1e, 0x31, 0xf7, 0x53, 0x25, 0x2d, 0x0b, 0x3d, 0x31, 0xe9, 0x78, 0x52, 0x1e, 0xdf, 0xa1, 0xf9, 0x06, 0xd1, 0x10, 0x24, 0x64, 0x5c, 0xb9, 0x82, 0x79, 0xd0, 0x83, 0xf5, 0xef, 0x3f, 0x04, 0x46, 0xbd, 0xd4, 0x8c, 0x18, 0x4a, 0x66, 0x66, 0x1a, 0xd5, 0x4d, 0x5a, 0x81, 0x14, 0x75, 0x76, 0xb6, 0x1b, 0xb1, 0x0f, 0x4b, 0x80, 0x51, 0x02, 0x34, 0xbd, 0xf6, 0x3f, 0x34, 0xd5, 0xa5, 0x89, 0x95, 0x3b, 0x1b, 0x77, 0x1c, 0xef, 0x60, 0xbf, 0x3c, 0xea, 0x9f, 0xb3, 0x8a, 0xbc, 0x35, 0x0c, 0x71, 0x74, 0x08, 0xe7, 0x27, 0xc0, 0x1a, 0x0d, 0xdf, 0x55, 0x5e, 0x77, 0x41, 0x91, 0xca, 0x12, 0x17, 0x5f, 0xad, 0xbf, 0x49, 0x5c, 0x43, 0x9e, 0x0b, 0x38, 0x86, 0x8c, 0x55, 0x5e, 0x48, 0xea, 0x93, 0xd7, 0x7f, 0xa1, 0x9f, 0x6b, 0xe0, 0x62, 0xec, 0x0a, 0xaf, 0x33, 0x04, 0x6b, 0xd5, 0x27, 0x34, 0xf3, 0x33, 0x6c, 0x85, 0xd8, 0x36, 0x8b, 0xef, 0x86, 0xab, 0xec, 0xca, 0x42, 0xd5, 0x99, 0x85, 0x0d, 0xbd, 0x43, 0x9a, 0xcb, 0xca, 0x8a, 0xc1, 0xa4, 0x91, 0x79, 0x65, 0xab, 0xee, 0x50, 0x54, 0xbd, 0x54, 0x87, 0xba, 0xac, 0x61, 0x0f, 0x50, 0x9d, 0xb6, 0xdb, 0xd1, 0xaf, 0x05, 0x9f, 0xae, 0xde, 0x6b, 0xd8, 0x02, 0x26, 0x01, 0x0c, 0xc8, 0xeb, 0xae, 0x53, 0x4c, 0x98, 0x3f, 0x16, 0xdf, 0x87, 0xb9, 0x17, 0xcf, 0x21, 0xed, 0xb1, 0x96, 0x46, 0x4e, 0x62, 0x52, 0xef, 0x00, 0x86, 0x75, 0x11, 0x31, 0x65, 0xbe, 0xc5, 0xac, 0x70, 0x68, 0xa7, 0xab, 0xc8, 0xa1, 0x7b, 0xed, 0x00, 0x3d, 0x17, 0x09, 0x24, 0xac, 0x7d, 0x02, 0xfa, 0x29, 0x47, 0x1b, 0x87, 0x35, 0x48, 0xed, 0xd5, 0x44, 0x70, 0xb6, 0xf4, 0xb6, 0xf0, 0xf4, 0x3f, 0x08, 0x9f, 0x33, 0xe0, 0x4c, 0x9c, 0x23, 0x97, 0xd6, 0x35, 0xed, 0xb7, 0x39, 0x08, 0xc7, 0x71, 0x72, 0x68, 0xc7, 0x54, 0x62, 0x03, 0xf4, 0x15, 0x82, 0xc1, 0xa3, 0x8c, 0xd2, 0xef, 0x01, 0x00, 0x12, 0x9c, 0xec, 0xa4, 0x35, 0x43, 0x07, 0x61, 0x13, 0xab, 0x0d, 0xd6, 0x5e, 0x0c, 0x65, 0x9e, 0xd7, 0x73, 0xf7, 0xd1, 0xc1, 0x67, 0x3f, 0xcd, 0x96, 0xcd, 0x9f, 0x36, 0xfa, 0x09, 0xfa, 0x3b, 0xed, 0x66, 0x7e, 0x1b, 0x44, 0xb8, 0xc1, 0xe8, 0x5a, 0x40, 0x10, 0x8c, 0x03, 0xcf, 0x04, 0x09, 0xc1, 0x2e, 0x55, 0x05, 0x3b, 0xbe, 0xf3, 0x85, 0xea, 0x5c, 0x53, 0xf9, 0x16, 0x87, 0x07, 0x79, 0x01, 0xc5, 0x92, 0x4e, 0x62, 0x42, 0x7a, 0xb4, 0x14, 0xbb, 0x9f, 0xde, 0x10, 0x9a, 0xca, 0x3b, 0x99, 0x63, 0x89, 0xf8, 0xb6, 0x4e, 0x3b, 0xc6, 0xe5, 0x36, 0x67, 0xdd, 0x0e, 0xb1, 0x52, 0x40, 0xb6, 0x81, 0xd0, 0x43, 0x75, 0x2b, 0x5a, 0x4b, 0xaa, 0xe5, 0x61, 0xd6, 0x6d, 0xb5, 0xe2, 0xbb, 0xc5, 0xd8, 0x3b, 0xb2, 0x1b, 0x61, 0x3d, 0x16, 0xef, 0x22, 0x82, 0xea, 0xca, 0xcf, 0x00, 0x1b, 0x74, 0x61, 0xdf, 0x04, 0x66, 0xb9, 0x88, 0x37, 0x82, 0x86, 0xff, 0x7b, 0x02, 0x68, 0x72, 0x11, 0xaf, 0x56, 0x12, 0x3c, 0x53, 0x3d, 0x21, 0x00, 0x70, 0xe9, 0x4c, 0x29, 0x32, 0x29, 0x3c, 0x8f, 0xa3, 0x2e, 0x68, 0x99, 0x1e, 0x35, 0x2d, 0x00, 0x06, 0x66, 0x20, 0xd5, 0xb7, 0xfb, 0xa3, 0xc6, 0xbd, 0xa4, 0xb6, 0x9d, 0x45, 0x2a, 0x10, 0x09, 0xd0, 0x53, 0x6f, 0xa1, 0x2f, 0x07, 0x2c, 0x26, 0xab, 0xb0, 0x12, 0x08, 0x84, 0xe7, 0x70, 0x2c, 0x9d, 0x4c, 0x6d, 0xed, 0x75, 0xb5, 0x9c, 0x61, 0x59, 0x8c, 0xd0, 0xdd, 0xd8, 0x72, 0x32, 0xbb, 0x78, 0x28, 0x90, 0x5a, 0xa7, 0xb0, 0xf8, 0x67, 0xf4, 0xaf, 0x86, 0x5b, 0x7f, 0x16, 0x7a, 0x45, 0xae, 0x01, 0x8d, 0xca, 0x22, 0xe0, 0x86, 0x6a, 0xea, 0xd4, 0x08, 0x05, 0xf6, 0x5c, 0xae, 0x9d, 0xce, 0x30, 0x5a, 0x5d, 0x84, 0x6d, 0xc9, 0xda, 0xe6, 0xf3, 0x6b, 0x9a, 0xf9, 0x0b, 0x72, 0xd3, 0xa3, 0x4e, 0x29, 0x74, 0xa8, 0xc2, 0x88, 0x69, 0xd8, 0x45, 0x05, 0x1b, 0x86, 0x2f, 0xac, 0x37, 0x3b, 0x33, 0x72, 0xb1, 0xac, 0x86, 0xc7, 0x08, 0xea, 0x43, 0x6a, 0xcb, 0xd9, 0x0f, 0x81, 0x5c, 0xe3, 0xf9, 0xe9, 0xf4, 0xed, 0xa3, 0xcb, 0xe7, 0x8a, 0xa7, 0x70, 0x2a, 0x6f, 0x34, 0x56, 0x12, 0x28, 0xf8, 0x83, 0x5e, 0x09, 0x43, 0x19, 0x78, 0x66, 0x69, 0x2b, 0xf8, 0x07, 0x68, 0xcf, 0x6a, 0xd6, 0xca, 0x74, 0x51, 0xdb, 0xcd, 0x76, 0x6c, 0x6a, 0xc2, 0xf0, 0x37, 0x9b, 0xb3, 0xd2, 0xb5, 0xfb, 0x48, 0x33, 0x6d, 0x81, 0xeb, 0xe8, 0xb2, 0xc4, 0x2b, 0x55, 0x28, 0x6a, 0x5e, 0x83, 0x84, 0xe4, 0x8b, 0x73, 0x93, 0x59, 0x87, 0xb2, 0x7e, 0xdf, 0x5d, 0x2e, 0x4c, 0xf1, 0xf3, 0x48, 0xa8, 0x1e, 0xeb, 0x2a, 0xe5, 0xfe, 0xc8, 0x5b, 0x3f, 0x6a, 0x52, 0x90, 0x64, 0xec, 0x3b, 0xc6, 0x33, 0x75, 0x02, 0x8d, 0xc3, 0x4e, 0x18, 0xa7, 0xa7, 0x51, 0x42, 0xd1, 0x70, 0x59, 0x3e, 0xe1, 0x74, 0xf7, 0xa9, 0x11, 0xce, 0x67, 0x20, 0x9b, 0xa6, 0xc2, 0xa6, 0x86, 0xb3, 0x74, 0x45, 0xbf, 0xfd, 0xf1, 0xf8, 0x6b, 0xe8, 0xa4, 0xc9, 0x7c, 0x6e, 0x28, 0x37, 0x82, 0xac, 0xbb, 0xda, 0xc4, 0xa0, 0xf0, 0x4a, 0x90, 0x31, 0xa4, 0x3c, 0xcf, 0x6f, 0x32, 0xee, 0xdc, 0x1d, 0xeb, 0xc6, 0x97, 0x6d, 0xc0, 0x36, 0xb5, 0x0a, 0x42, 0xe2, 0x5a, 0x5b, 0xcd, 0x05, 0xe9, 0x07, 0xff, 0x10, 0x1b, 0xb4, 0x6f, 0x95, 0x4e, 0x15, 0x9c, 0x64, 0x20, 0x23, 0x24, 0xf4, 0x3d, 0xaa, 0x37, 0x04, 0x75, 0x08, 0x4a, 0x81, 0x12, 0x31, 0x10, 0xab, 0x68, 0xf7, 0xa6, 0x74, 0xad, 0x89 ],
-const [ 0xb3, 0xf1, 0x97, 0xb9, 0x84, 0x41, 0xa1, 0xef, 0x2b, 0xb3, 0x53, 0xf6, 0xf7, 0xea, 0x1c, 0x97, 0x5d, 0x1b, 0xa5, 0xe6, 0xf5, 0x09, 0xfa, 0xcf, 0xc5, 0x33, 0xea, 0xf2, 0xc2, 0x4b, 0xb0, 0xb1, 0x94, 0xeb, 0xd3, 0x86, 0x9a, 0x84, 0x4a, 0x9a, 0x2e, 0x97, 0xe4, 0x94, 0x2a, 0x27, 0xe7, 0xaf, 0xaa, 0x6e, 0xf7, 0x10, 0x14, 0xcf, 0x3a, 0x56, 0x56, 0x0c, 0xba, 0x72, 0x6f, 0xb9, 0x0b, 0xb9, 0x31, 0xf0, 0x2d, 0x37, 0x45, 0x47, 0xb3, 0x47, 0x6f, 0xff, 0x25, 0x61, 0x13, 0x7e, 0xa4, 0x32, 0xf9, 0xff, 0xcc, 0xf2, 0x4d, 0x89, 0xdf, 0xf2, 0xea, 0x1d, 0x1f, 0x74, 0xd8, 0x34, 0x7b, 0xc0, 0x12, 0x69, 0x6e, 0x74, 0x8d, 0x72, 0x25, 0x1c, 0x77, 0x54, 0xe0, 0x02, 0xbc, 0xd7, 0x9a, 0x48, 0xcf, 0x38, 0xec, 0x33, 0xa7, 0x1f, 0x2f, 0xca, 0x08, 0xd0, 0xe1, 0xa0, 0x03, 0xa5, 0x49, 0xee, 0xc0, 0xbc, 0x5e, 0xe4, 0x7b, 0xed, 0xe6, 0x41, 0xcd, 0xff, 0xdb, 0x22, 0x2d, 0x1b, 0x12, 0x17, 0xb6, 0x80, 0x1f, 0x7c, 0x2b, 0x79, 0x73, 0x07, 0x38, 0x8c, 0xc7, 0x9d, 0xfa, 0xf5, 0xbe, 0x6a, 0xc2, 0x53, 0xc5, 0x30, 0x16, 0xa0, 0x3e, 0xdf, 0xf9, 0x66, 0xdf, 0x67, 0x6d, 0x30, 0x54, 0xca, 0x35, 0x3f, 0x2c, 0x75, 0xdf, 0x7f, 0xf2, 0xd0, 0x02, 0xba, 0x9a, 0x14, 0xc5, 0x0a, 0x20, 0x5d, 0xa0, 0x94, 0x6b, 0x00, 0x67, 0x73, 0x77, 0x1e, 0x84, 0xf3, 0xb3, 0x79, 0x83, 0x00, 0xa8, 0x87, 0xd5, 0xde, 0xdc, 0xc5, 0xcd, 0x1a, 0xf6, 0x4e, 0xef, 0xc0, 0x22, 0xac, 0x6a, 0xce, 0xb7, 0xee, 0xe3, 0xe9, 0x18, 0xfa, 0x74, 0x4f, 0xd8, 0x25, 0xf5, 0x0d, 0x21, 0x01, 0x7a, 0x72, 0x56, 0x76, 0x1c, 0xc3, 0xf7, 0x15, 0xfd, 0x30, 0xc5, 0xa8, 0x86, 0x07, 0x27, 0x0e, 0xf3, 0x28, 0xcd, 0x46, 0x12, 0xb9, 0x93, 0xc9, 0x47, 0x1a, 0xa8, 0x1d, 0xd4, 0x1b, 0xef, 0xa7, 0x57, 0x6d, 0xa5, 0xc1, 0x94, 0x57, 0x45, 0x0c, 0x75, 0xaa, 0xa8, 0x07, 0x4f, 0xf7, 0x71, 0xe1, 0x67, 0xff, 0xa8, 0x8c, 0xb5, 0x6b, 0xa5, 0x13, 0xe8, 0xbe, 0x30, 0x2d, 0xaa, 0x87, 0xe6, 0x12, 0x24, 0xdb, 0xdf, 0x8d, 0xc5, 0x02, 0x8d, 0x53, 0x3f, 0x71, 0xe7, 0x93, 0xd3, 0xf8, 0xc7, 0xce, 0xcf, 0x3d, 0x91, 0xe9, 0x55, 0x69, 0x16, 0x81, 0x5d, 0x21, 0xb8, 0x7e, 0xfd, 0xb8, 0xce, 0xeb, 0xe9, 0xa3, 0x4a, 0x05, 0x36, 0x2d, 0x99, 0x91, 0x63, 0x6c, 0xca, 0x73, 0x99, 0x73, 0xf3, 0x7d, 0x32, 0xc9, 0xd0, 0x85, 0x79, 0x1a, 0xae, 0xba, 0xb0, 0x2d, 0x87, 0x38, 0x58, 0x16, 0x6f, 0xd9, 0xac, 0xad, 0x2e, 0x4e, 0x6f, 0x3e, 0x2f, 0x6f, 0xe7, 0x82, 0x99, 0xd0, 0x2a, 0xce, 0xbb, 0x95, 0x98, 0x8b, 0xad, 0x87, 0xa9, 0xe6, 0x34, 0x67, 0xe9, 0xc8, 0xe7, 0x82, 0x40, 0x09, 0x90, 0x85, 0x77, 0xe1, 0xd5, 0x93, 0xf8, 0x9f, 0x18, 0x95, 0xd5, 0x9d, 0x9b, 0xd1, 0x0c, 0x73, 0xe8, 0xbf, 0x0a, 0x6b, 0x70, 0x17, 0x6d, 0x35, 0x72, 0x2f, 0x0e, 0xdc, 0x1e, 0x84, 0x3f, 0xf9, 0xfb, 0x96, 0x51, 0x27, 0x86, 0xfa, 0x5a, 0xb6, 0x1c, 0xaa, 0x34, 0xa4, 0x19, 0x9f, 0xc9, 0xc8, 0x42, 0xa2, 0x8e, 0x51, 0x60, 0x5f, 0x4e, 0x6f, 0x2e, 0xbb, 0x29, 0x50, 0x75, 0x67, 0xdc, 0x4e, 0x76, 0xb5, 0x43, 0x67, 0x88, 0xab, 0x1c, 0xed, 0x02, 0x57, 0x0d, 0x7e, 0x5b, 0x61, 0xe9, 0x37, 0x90, 0xe7, 0x2f, 0x25, 0xc6, 0x84, 0xd3, 0xfc, 0x31, 0xb2, 0x41, 0x0c, 0x34, 0x53, 0xa0, 0x70, 0xca, 0x8a, 0x53, 0x89, 0x24, 0xcf, 0xc6, 0xab, 0x94, 0x43, 0x67, 0x15, 0xa9, 0x40, 0xf2, 0x27, 0x9c, 0x35, 0xf2, 0xcf, 0xea, 0xb1, 0x85, 0x45, 0x43, 0xbd, 0x5f, 0xf8, 0xa3, 0x6f, 0x11, 0xc8, 0xbf, 0xbc, 0x8b, 0x75, 0xa2, 0x8e, 0xe0, 0x57, 0x98, 0x16, 0x4a, 0x50, 0x4b, 0x64, 0x6e, 0x00, 0x2c, 0x35, 0xe1, 0x37, 0x14, 0x0c, 0xea, 0xb0, 0x2b, 0x84, 0x8a, 0xfc, 0x0a, 0xe4, 0xb9, 0xbc, 0x1c, 0xf4, 0xf3, 0x13, 0x4a, 0x0f, 0xf3, 0x5b, 0xd7, 0x7a, 0xbf, 0x17, 0x88, 0xf4, 0xe4, 0x29, 0x09, 0x8e, 0x03, 0x46, 0x8c, 0xbd, 0x8c, 0xa6, 0xb3, 0xae, 0xca, 0x00, 0xb0, 0xd9, 0x20, 0xb5, 0xab, 0xd9, 0x92, 0x4c, 0x63, 0x7b, 0x86, 0x1e, 0x19, 0x15, 0xcc, 0x52, 0xaa, 0x19, 0xdd, 0x0c, 0xfb, 0xe9, 0x60, 0xe2, 0x99, 0xed, 0xf3, 0x90, 0xa1, 0xe4, 0x27, 0xec, 0xde, 0x77, 0xcc, 0x1c, 0x32, 0x14, 0x70, 0x06, 0x37, 0xf9, 0x22, 0x08, 0x25, 0x8f, 0x7c, 0xe9, 0xf7, 0xfa, 0xe0, 0x10, 0xc9, 0xee, 0x01, 0xf4, 0x85, 0xc4, 0xa5, 0xd4, 0xbe, 0xcd, 0xaa, 0xa8, 0xdc, 0xe6, 0x47, 0x57, 0x7a, 0x4c, 0x95, 0x2a, 0x0c, 0xb2, 0x4e, 0x81, 0xc5, 0x91, 0xd4, 0xc5, 0xb8, 0xc0, 0x75, 0x9d, 0x3d, 0x44, 0xed, 0x65, 0x96, 0x69, 0x2c, 0xdc, 0xd2, 0x12, 0x5a, 0x1c, 0xf2, 0x4d, 0x19, 0xd0, 0x4b, 0x2a, 0x0a, 0xa1, 0x2b, 0xce, 0x92, 0xf1, 0xbf, 0xc3, 0xde, 0xcc, 0x34, 0x92, 0x24, 0x1b, 0x1d, 0x94, 0x2c, 0x1b, 0x15, 0x05, 0x10, 0x0e, 0xa5, 0x5a, 0x40, 0x31, 0x68, 0xd4, 0xc8, 0xed, 0x6c, 0x56, 0xd6, 0x51, 0xdc, 0x74, 0x76, 0xc0, 0xdc, 0xcc, 0xa1, 0xe7, 0xb5, 0x99, 0x76, 0xf2, 0x32, 0x85, 0xc7, 0x00, 0x4a, 0xbf, 0xd7, 0xd4, 0xfe, 0x4e, 0x62, 0xcd, 0x85, 0xa5, 0xde, 0x18, 0xa7, 0x77, 0x01, 0x24, 0x67, 0xcc, 0x83, 0x56, 0xe4, 0x55, 0x25, 0xff, 0x81, 0xfc, 0xf2, 0x8b, 0x44, 0xc0, 0xc5, 0xfb, 0x7c, 0xc0, 0x0b, 0x95, 0xa7, 0x95, 0xca, 0xd9, 0x92, 0xe5, 0xe3, 0xb8, 0xc2, 0x35, 0x94, 0x01, 0x13, 0xff, 0x40, 0x1c, 0x9f, 0x05, 0x73, 0xfa, 0xe1, 0xe4, 0x21, 0x4c, 0x1b, 0xec, 0x2e, 0xf3, 0xf4, 0x2f, 0x33, 0xb8, 0x66, 0xd8, 0x80, 0x3e, 0xd7, 0xbf, 0x5d, 0x34, 0x86, 0x3a, 0x96, 0xcf, 0x29, 0x35, 0x36, 0x78, 0xd5, 0x85, 0x92, 0xc2, 0x1d, 0x79, 0x89, 0x9e, 0x7e, 0xb2, 0x0b, 0xd2, 0xfb, 0x35, 0xd8, 0xa7, 0x04, 0xbf, 0x8a, 0xe2, 0x9c, 0x59, 0xd6, 0xf6, 0xbb, 0x2b, 0x0f, 0x78, 0xf1, 0x95, 0xeb, 0xd3, 0x4d, 0x7c, 0x8a, 0x3d, 0x7d, 0xe2, 0xb4, 0xea, 0x36, 0xba, 0x63, 0x7f, 0xd7, 0xfa, 0x81, 0xc9, 0x49, 0xf1, 0xf2, 0xaf, 0x29, 0xdb, 0xd5, 0x65, 0x29, 0xb3, 0x07, 0xe3, 0xb3, 0x48, 0xe9, 0x96, 0xd0, 0x93, 0x64, 0x55, 0x49, 0x48, 0x2a, 0x96, 0x0c, 0xab, 0x3e, 0xe2, 0xd0, 0xa5, 0xb6, 0x86, 0xfc, 0x17, 0xc0, 0x8c, 0xc5, 0x6e, 0xe3, 0xe9, 0x97, 0x78, 0x87, 0xf8, 0xb7, 0x76, 0xb8, 0x27, 0x26, 0x72, 0x27, 0xf1, 0xc8, 0xd2, 0x71, 0x0c, 0xc5, 0x2e, 0xa4, 0xe3, 0x30, 0x5f, 0x00, 0x46, 0xe7, 0xd8, 0xfa, 0x60, 0xba, 0x3a, 0x87, 0xea, 0xcf, 0x22, 0x96, 0x9f, 0x44, 0x45, 0xde, 0xf0, 0x17, 0xc0, 0xdb, 0xf8, 0x43, 0xa9, 0x13, 0xb2, 0x2c, 0xea, 0x9e, 0x6a, 0x3d, 0x4f, 0xe5, 0x71, 0xd0, 0xdd, 0xaa, 0x15, 0x4e, 0x66, 0x49, 0xd0, 0x97, 0x5a, 0x3d, 0xc0, 0xa4, 0xe0, 0xe5, 0x57, 0x6b, 0x25, 0x88, 0x54, 0x02, 0xf4, 0x98, 0xf2, 0x08, 0x88, 0x33, 0x5f, 0x41, 0x9e, 0xef, 0x6f, 0x80, 0xce, 0xd7, 0x92, 0xca, 0x1a, 0xb1, 0x04, 0xb8, 0xc8, 0x83, 0x43, 0x1d, 0x6d, 0x55, 0xc6, 0xe9, 0x4b, 0x37, 0xec, 0x4d, 0xdc, 0x86, 0x33, 0x20, 0xaf, 0x6c, 0xaa, 0x82, 0x73, 0xa6, 0xa9, 0xbf, 0x52, 0x8a, 0xbf, 0x76, 0x80, 0x48, 0xec, 0xfa, 0x13, 0x70, 0x10, 0xf8, 0x15, 0xb4, 0xa4, 0x5a, 0xd7, 0xf0, 0xa8, 0x6c, 0x89, 0x67, 0xdc, 0x3d, 0x08, 0x4f, 0x33, 0x49, 0xf7, 0x91, 0x85, 0x54, 0x11, 0xca, 0x84, 0x99, 0xbd, 0x95, 0xf1, 0x24, 0xe3, 0x0c, 0x10, 0x7d, 0xff, 0x8c, 0x59, 0x86, 0x74, 0xb9, 0x70, 0xa6, 0x22, 0xc2, 0x57, 0x27, 0x3a, 0xe7, 0xe3, 0xdd, 0x51, 0x38, 0x6c, 0x09, 0xb4, 0x9f, 0xc9, 0x7c, 0xfc, 0x20, 0x7b, 0x00, 0xe2, 0x60, 0x29, 0xf3, 0x54, 0x64, 0x4d, 0x35, 0xc8, 0x9c, 0x2c, 0x45, 0xd0, 0x20, 0x0b, 0xa6, 0xee, 0x39, 0xa0, 0x88, 0xaa, 0x23, 0xc7, 0xa4, 0xe3, 0x11, 0x76, 0x68, 0x63, 0x72, 0xf3, 0x54, 0xb6, 0x73, 0x44, 0xa4, 0x3b, 0xc5, 0xe8, 0x2f, 0x7b, 0xa0, 0xc4, 0x8f, 0xba, 0x08, 0x60, 0x82, 0xcc, 0x4f, 0x53, 0x90, 0x2a, 0xdb, 0xfc, 0xee, 0x45, 0x29, 0x73, 0xa3, 0x1a, 0x12, 0xbf, 0xe9, 0x07, 0x4d, 0x4a, 0xd6, 0xdd, 0x36, 0x92, 0x3b, 0x36, 0xcd, 0x20, 0xcd, 0x09, 0x02, 0xbe, 0x82, 0x7b, 0x30, 0xe5, 0x3e, 0xf8, 0xe7, 0x75, 0xaf, 0x83, 0xee, 0xa8, 0x75, 0x4a, 0x88, 0x49, 0x87, 0x7e, 0xf7, 0x21, 0xd2, 0x61, 0x3f, 0xb3, 0x23, 0xa1, 0x2c, 0x29, 0x46, 0xe4, 0x96, 0x8d, 0x70, 0xa4, 0xe4, 0x3c, 0xda, 0x3d, 0xcf, 0x98, 0xaf, 0x44, 0x69, 0xfe, 0x28, 0x1b, 0x5d, 0xf8, 0xf5, 0xc2, 0x78, 0xb3, 0xe0, 0xf0, 0x68, 0xb3, 0xad, 0x63, 0xc4, 0xc5, 0x44, 0x74, 0x4d, 0x35, 0x12, 0xee, 0x74, 0x42, 0xac, 0x20, 0x1c, 0xcf, 0xb5, 0x31, 0xa0, 0x5b, 0x03, 0xb4, 0x18, 0x33, 0xfd, 0x7c, 0xd8, 0xe6, 0x47, 0xb2, 0x3a, 0xfa, 0xa2, 0x24, 0x9e, 0xdd, 0x0d, 0xe0, 0xae, 0x1e, 0x30, 0x02, 0xe7, 0xdd, 0xfb, 0xca, 0x55, 0x81, 0x8b, 0xf2, 0x9d, 0xa9, 0x4d, 0x3e, 0x41, 0x64, 0x65, 0x54, 0x20, 0xa4, 0x51, 0xce, 0x3c, 0xf0, 0xc9, 0x8e, 0xc0, 0x5a, 0xea, 0x51, 0x42, 0xb1, 0x94, 0x87, 0x45, 0xf7, 0x11, 0x63, 0x02, 0x15, 0xf7, 0x2e, 0x68, 0xce, 0x4f, 0xe0, 0x61, 0xf2, 0xf6, 0xf1, 0x57, 0xd4, 0x44, 0x6d, 0xf7, 0xfd, 0xec, 0x47, 0x34, 0x22, 0x23, 0xef, 0x8f, 0x54, 0x05, 0x26, 0x96, 0x77, 0x34, 0x12, 0xab, 0xf5, 0xc2, 0x8d, 0x07, 0xb4, 0x51, 0xc3, 0xff, 0x45, 0x78, 0xfc, 0x85, 0x5e, 0x69, 0xb6, 0xf1, 0x8a, 0xd1, 0xf7, 0x02, 0x1f, 0x00, 0xe1, 0x1f, 0x70, 0x4a, 0x87, 0xe3, 0x45, 0xad, 0xff, 0xd9, 0x88, 0xb4, 0xb9, 0x84, 0x41, 0x9a, 0x0e, 0xa3, 0xc5, 0xb3, 0x1c, 0xb2, 0x29, 0x08, 0xd2, 0xb4, 0xfd, 0x41, 0x47, 0x30, 0x37, 0xc9, 0x50, 0x7a, 0x6e, 0x2c, 0x51, 0x33, 0x49, 0xc4, 0x53, 0x13, 0x36, 0x94, 0x57, 0xe6, 0x5f, 0x74, 0xea, 0xd5, 0xda, 0x6f, 0xfa, 0xe7, 0x1f, 0x69, 0xe8, 0xc8, 0xc0, 0x04, 0xde, 0xc8, 0x54, 0xc5, 0x63, 0x26, 0xb4, 0x73, 0x2d, 0x8f, 0x6b, 0xc0, 0x36, 0xe2, 0x67, 0x2c, 0x12, 0x36, 0xf5, 0x25, 0x7f, 0x1e, 0xec, 0x73, 0x3e, 0x2c, 0x27, 0xd3, 0x21, 0xb3, 0x39, 0xe2, 0x66, 0xd1, 0x5d, 0x3d, 0x43, 0xad, 0xac, 0xe7, 0xc2, 0xfe, 0x93, 0xeb, 0xcf, 0xcd, 0x83, 0x42, 0x8f, 0x7b, 0xea, 0xf6, 0xf4, 0x05, 0x63, 0x88, 0x8f, 0x87, 0x29, 0x90, 0xa5, 0xff, 0xd2, 0xa3, 0x84, 0x54, 0x3a, 0x79, 0x17, 0x97, 0xbd, 0x4f, 0xb9, 0x88, 0xa9, 0x8b, 0x47, 0x5c, 0xf2, 0x9f, 0x79, 0xbd, 0x28, 0x2f, 0x72, 0x13, 0xa7, 0x76, 0x95, 0x02, 0x0e, 0xe6, 0x9b, 0x33, 0xf2, 0x0e, 0xe2, 0x58, 0xd3, 0xc1, 0x08, 0x6a, 0x4e, 0x75, 0xb9, 0x35, 0x95, 0xe9, 0xc5, 0x17, 0x1d, 0x0b, 0x76, 0x05, 0x96, 0x18, 0x20, 0xce, 0x20, 0x05, 0xf9, 0xa4, 0xbc, 0x1e, 0x2b, 0xd8, 0x00, 0xed, 0x28, 0xe5, 0x10, 0x5d, 0x3e, 0xb0, 0xc9, 0x1f, 0x6b, 0x0e, 0x3f, 0x4d, 0x72, 0x87, 0x6a, 0x4d, 0x2e, 0x5a, 0x1c, 0xf9, 0x27, 0xc0, 0x36, 0xfc, 0x63, 0x75, 0x1c, 0x7f, 0x7f, 0x75, 0x66, 0x06, 0xfe, 0x03, 0xd9, 0x94, 0xe0, 0xf0, 0x95, 0x16, 0x76, 0x1a, 0x8f, 0xfe, 0x76, 0x33, 0x42, 0x2f, 0x4b, 0xc4, 0xa2, 0x19, 0xae, 0x71, 0x52, 0x25, 0x7a, 0x7e, 0x16, 0x53, 0xbc, 0x92, 0x8b, 0x21, 0x0a, 0xbb, 0x16, 0xb0, 0x17, 0xb3, 0x1a, 0x22, 0x84, 0x62, 0x6e, 0x46, 0xf8, 0xa3, 0x0e, 0x77, 0x72, 0x4b, 0x10, 0xc1, 0xde, 0x68, 0xda, 0x46, 0xe7, 0xc6, 0x93, 0xe0, 0x0d, 0xb8, 0xd7, 0x08, 0xf7, 0x14, 0xaf, 0xf7, 0x0a, 0x80, 0xc0, 0x0a, 0x3a, 0xec, 0xc2, 0x6b, 0x20, 0x60, 0x34, 0xee, 0x4d, 0xf8, 0x4e, 0x39, 0xdf, 0x2d, 0x38, 0x28, 0x52, 0x55, 0x79, 0x70, 0x98, 0x6d, 0xb2, 0x82, 0x6b, 0x17, 0x8c, 0xb2, 0xe2, 0xdf, 0xef, 0x98, 0x42, 0xc2, 0x75, 0xb6, 0x17, 0xf1, 0x1e, 0x5c, 0x84, 0xd2, 0x45, 0xc9, 0xd8, 0x48, 0xd2, 0x93, 0x61, 0x34, 0xb2, 0x49, 0x85, 0x3c, 0x84, 0x56, 0x0e, 0xcb, 0x95, 0x28, 0xc6, 0x58, 0x0f, 0x92, 0x44, 0xec, 0x6d, 0x6f, 0x05, 0xde, 0x32, 0x89, 0xbf, 0xe1, 0xdb, 0xb9, 0xf1, 0x42, 0x12, 0x4f, 0xbf, 0x6a, 0x24, 0xb3, 0xfd, 0xaa, 0xb5, 0x4d, 0x8a, 0x38, 0xb3, 0xa3, 0xdf, 0x74, 0x88, 0xc1, 0xe7, 0x70, 0x94, 0xde, 0x12, 0xb0, 0xda, 0x3c, 0xa5, 0x2e, 0xf9, 0x50, 0x54, 0xa1, 0x5f, 0x23, 0x12, 0xff, 0xb9, 0xf8, 0x28, 0x41, 0xad, 0x2f, 0x84, 0x66, 0xcc, 0x69, 0x54, 0xba, 0xc2, 0xed, 0xd4, 0x58, 0xd0, 0x4b, 0x64, 0xee, 0x7d, 0x3f, 0xde, 0xc0, 0x88, 0xd7, 0x26, 0xf0, 0x20, 0xd8, 0x03, 0xfc, 0x57, 0x5f, 0x2d, 0x88, 0xd5, 0xc4, 0xa7, 0x5e, 0xc9, 0xc3, 0x4e, 0xb3, 0x26, 0xde, 0xb3, 0xac, 0x0b, 0xfd, 0x26, 0x20, 0x82, 0x58, 0x13, 0xa0, 0x6e, 0x96, 0x92, 0xb4, 0xbf, 0x36, 0x39, 0x68, 0xe8, 0x2f, 0x34, 0x07, 0x93, 0xd3, 0x98, 0x27, 0x93, 0xf9, 0xf5, 0xe5, 0x1a, 0x5b, 0x2b, 0x72, 0x2c, 0x3d, 0x7e, 0xcf, 0x53, 0x50, 0xec, 0xd4, 0x95, 0xd5, 0xbd, 0x77, 0xa3, 0x05, 0x5d, 0x4b, 0x53, 0xb1, 0x67, 0x47, 0x50, 0x26, 0x02, 0xc9, 0x10, 0x53, 0x70, 0xda, 0x07, 0x2e, 0xe4, 0xb4, 0x1b, 0x53, 0x94, 0x82, 0x57, 0xee, 0x10, 0x66, 0xe3, 0xdc, 0xd2, 0xc0, 0x34, 0x0d, 0x16, 0xae, 0x80, 0x2d, 0xec, 0xcf, 0x75, 0x83, 0x8b, 0x4d, 0x2a, 0x19, 0xe8, 0x1a, 0x56, 0x1d, 0x87, 0x79, 0xc0, 0x87, 0x91, 0xc1, 0xf6, 0xfc, 0x28, 0x5d, 0x42, 0xf2, 0xf7, 0x18, 0xda, 0x16, 0x0d, 0x98, 0x57, 0xea, 0xeb, 0x27, 0x68, 0xb3, 0xdb, 0xba, 0xc8, 0x92, 0x84, 0x2b, 0x6d, 0xf1, 0xbc, 0xca, 0x03, 0x20, 0x9d, 0x14, 0x98, 0x40, 0xdb, 0xc2, 0x99, 0x61, 0x54, 0x06, 0xfd, 0xe7, 0xe9, 0x11, 0xc0, 0x32, 0x8d, 0xd8, 0x93, 0x7e, 0x9b, 0x18, 0xd2, 0x07, 0x6d, 0x97, 0xb6, 0x71, 0x2a, 0xae, 0xcc, 0x68, 0xdf, 0x04, 0xa5, 0x84, 0xd2, 0x9c, 0xcf, 0x6f, 0x13, 0x12, 0x05, 0x49, 0x53, 0x21, 0xa3, 0x4b, 0xf9, 0x69, 0x5d, 0xab, 0x73, 0x6f, 0x2f, 0xc0, 0xca, 0xe6, 0x97, 0x67, 0x7a, 0x2d, 0x03, 0xa5, 0x80, 0x18, 0x85, 0x8e, 0xb4, 0xf3, 0xce, 0x65, 0x59, 0xc4, 0x5a, 0x04, 0xf3, 0xd1, 0xe8, 0x7e, 0x58, 0x62, 0x2d, 0x04, 0x0a, 0xc8, 0xc9, 0x05, 0xc4, 0x9e, 0x7a, 0x99, 0x53, 0x4f, 0x90, 0x20, 0xa7, 0xd9, 0xa1, 0x26, 0x2a, 0xd0, 0x7d, 0x8b, 0x51, 0xa5, 0x64, 0xe0, 0x70, 0x28, 0x77, 0x13, 0xd2, 0x4c, 0x6d, 0x4f, 0x09, 0x2a, 0x87, 0x1e, 0x83, 0x49, 0xc6, 0xd1, 0x5e, 0x1d, 0x5b, 0x21, 0x7d, 0xcd, 0x5f, 0x16, 0xdc, 0x3a, 0xc4, 0x28, 0x20, 0x3c, 0x8c, 0xa5, 0x73, 0x2e, 0x38, 0x52, 0x8e, 0xae, 0x84, 0x55, 0x17, 0x9e, 0x51, 0x52, 0x2e, 0x6e, 0xe3, 0xd5, 0x43, 0x9e, 0x4c, 0xf0, 0x2a, 0x7e, 0x28, 0x25, 0x71, 0x39, 0x8b, 0x85, 0xf1, 0x11, 0x38, 0x1a, 0xa3, 0xec, 0x14, 0x83, 0xb5, 0x10, 0xda, 0xde, 0xdd, 0x2b, 0x0f, 0xeb, 0xee, 0x96, 0x39, 0x6d, 0xa9, 0xda, 0x4c, 0xd4, 0xd5, 0x74, 0x65, 0x1a, 0x92, 0xd5, 0xba, 0xeb, 0xea, 0xad, 0xd1, 0x08, 0xa9, 0x69, 0xf1, 0xed, 0x6e, 0xfa, 0xd7, 0xb2, 0x03, 0xd9, 0xa9, 0x2f, 0xea, 0x48, 0x30, 0x63, 0x38, 0xda, 0x41, 0x17, 0xa7, 0x35, 0x7c, 0xbe, 0xe6, 0x17, 0x3a, 0xa0, 0x33, 0x97, 0xc0, 0x37, 0x2c, 0xae, 0xb9, 0xd9, 0xe2, 0xf5, 0xe3, 0x98, 0x30, 0xb0, 0x08, 0x67, 0x4b, 0x0c, 0x30, 0x7e, 0x99, 0xa5, 0x15, 0xff, 0xc7, 0x4b, 0xd7, 0xd9, 0x16, 0x06, 0xf1, 0xec, 0xf5, 0x57, 0x6c, 0x6f, 0xd5, 0xc1, 0x52, 0x8f, 0x39, 0x88, 0x66, 0x59, 0x0c, 0xb9, 0x12, 0xda, 0x38, 0x6a, 0xa1, 0x85, 0x74, 0x43, 0xae, 0xd5, 0x5d, 0x3e, 0xdc, 0x33, 0xc9, 0xaa, 0xc8, 0x19, 0x58, 0x76, 0x3c, 0x78, 0x4c, 0xac, 0xa6, 0x57, 0x9a, 0x3c, 0xc8, 0xbd, 0x40, 0xfb, 0xb0, 0xd2, 0xda, 0xeb, 0xeb, 0x41, 0x70, 0xbd, 0xf6, 0xe0, 0x93, 0x94, 0xf5, 0x93, 0xa8, 0x0c, 0xa7, 0x6e, 0x83, 0x7b, 0x9a, 0x19, 0x38, 0x77, 0x9b, 0x79, 0x2d, 0x98, 0x71, 0x8c, 0x74, 0x7e, 0xcb, 0x95, 0x58, 0x16, 0x76, 0x7a, 0x36, 0x1a, 0xd3, 0x6a, 0x8f, 0xd7, 0x89, 0xc2, 0x5a, 0x33, 0x77, 0x32, 0x9f, 0xee, 0xed, 0x1c, 0x41, 0x28, 0x1b, 0x3c, 0x1c, 0x24, 0xc9, 0x8e, 0x4f, 0x4b, 0x49, 0x6c, 0xdb, 0x74, 0xaa, 0xf7, 0x6e, 0x62, 0x2f, 0xb9, 0x79, 0x8e, 0xff, 0x89, 0x88, 0x27, 0x1e, 0xae, 0xd3, 0x58, 0x9c, 0x47, 0x10, 0xc9, 0x0d, 0xea, 0x8c, 0x68, 0x39, 0x8b, 0x7a, 0x69, 0x14, 0x9f, 0x8b, 0x8b, 0xf0, 0x82, 0xbf, 0x9e, 0xf1, 0x16, 0x7a, 0x42, 0xc1, 0xae, 0xda, 0xf1, 0x86, 0x2a, 0x48, 0x40, 0x11, 0x63, 0x4d, 0x61, 0x58, 0xc9, 0xa7, 0xed, 0x27, 0x4a, 0x9d, 0xe0, 0x12, 0x76, 0x8f, 0xe6, 0xae, 0xe1, 0xd1, 0xd5, 0x01, 0xc9, 0xba, 0x7a, 0x36, 0xf9, 0xf7, 0x98, 0x95, 0xed, 0x25, 0x2e, 0xb3, 0x37, 0xa0, 0xf9, 0xe6, 0x22, 0x95, 0x3a, 0xfc, 0x94, 0x5f, 0xb9, 0x2d, 0x39, 0x10, 0x0a, 0x4d, 0xdd, 0x4d, 0x0f, 0x47, 0x1a, 0x60, 0xbe, 0xc6, 0x34, 0x88, 0x24, 0x35, 0x41, 0x93, 0xaa, 0xea, 0x8d, 0xaf, 0x98, 0x9e, 0x3c, 0x7e, 0xd7, 0x21, 0x31, 0x68, 0xfb, 0x4b, 0x2f, 0x35, 0x81, 0x36, 0x3e, 0xdb, 0x54, 0xaa, 0x51, 0x94, 0x96, 0xd9, 0x25, 0x34, 0x9e, 0x4d, 0x6c, 0xba, 0x3d, 0x1e, 0x2b, 0x25, 0x46, 0x68, 0x61, 0x89, 0x4d, 0xfc, 0xe9, 0x61, 0xae, 0x56, 0xa1, 0x27, 0xd2, 0xd0, 0xcc, 0x22, 0xad, 0x15, 0xb5, 0x80, 0x8b, 0xd7, 0x96, 0xa4, 0x0d, 0xc5, 0xb7, 0xc1, 0x6e, 0xb7, 0xda, 0xa8, 0x0b, 0x2c, 0xd7, 0xde, 0x23, 0xf7, 0x84, 0xf2, 0xdb, 0x35, 0xd7, 0x0d, 0x85, 0x82, 0x4f, 0xcb, 0x21, 0x6d, 0x8f, 0x49, 0x24, 0x29, 0x4d, 0x80, 0x79, 0x85, 0x6a, 0xd1, 0xc6, 0x1d, 0x62, 0xe0, 0xf0, 0xd2, 0xe7, 0xa6, 0xe1, 0x79, 0xc9, 0xc2, 0x89, 0xd0, 0x19, 0x10, 0x22, 0xb6, 0x8e, 0x7d, 0xb9, 0x9b, 0x27, 0x1a, 0xea, 0x35, 0x12, 0x6f, 0xeb, 0x74, 0xcd, 0x11, 0xcc, 0xb9, 0x8b, 0x77, 0xfc, 0x43, 0xd9, 0x09, 0x10, 0xe9, 0x81, 0x7a, 0xc0, 0x0f, 0xaf, 0x58, 0x32, 0xd3, 0x52, 0xe1, 0x7c, 0x87, 0xc5, 0x19, 0x64, 0x64, 0xaf, 0x19, 0x69, 0x7c, 0x28, 0xaa, 0x08, 0xf1, 0x1d, 0x12, 0x38, 0x65, 0xf5, 0x2e, 0x37, 0xb1, 0x74, 0xc1, 0x88, 0xda, 0xe0, 0x0c, 0x3d, 0x41, 0x63, 0x9f, 0x72, 0x19, 0xb1, 0x6e, 0x1a, 0x1e, 0xea, 0x27, 0xfe, 0x84, 0xc2, 0xc3, 0x02, 0x2e, 0xdf, 0x5c, 0xaa, 0x21, 0x83, 0x3e, 0xde, 0x38, 0x6a, 0x40, 0xea, 0x19, 0xf6, 0x55, 0xc9, 0x67, 0x89, 0x5e, 0xa3, 0x3a, 0x32, 0x42, 0x94, 0xcc, 0x8d, 0x41, 0xaf, 0x75, 0xe4, 0x85, 0x43, 0xd9, 0x9a, 0xfa, 0x5c, 0x60, 0xca, 0x60, 0x8d, 0xe6, 0x2b, 0x9f, 0xed, 0xb4, 0x37, 0x5a, 0x60, 0xaf, 0x8c, 0xc6, 0x18, 0xd0, 0x92, 0xbd, 0x5b, 0xd4, 0x5e, 0x0e, 0x86, 0x35, 0xd6, 0x18, 0x52, 0x58, 0x16, 0x97, 0x56, 0x08, 0x13, 0xbd, 0xcd, 0x23, 0x7e, 0x85, 0x9a, 0x93, 0xec, 0x44, 0x89, 0x80, 0x33, 0x80, 0xd8, 0xc4, 0x17, 0x06, 0xf6, 0xa0, 0x26, 0x37, 0x8a, 0xad, 0xe0, 0xa3, 0xb7, 0x15, 0x1b, 0xd9, 0x9e, 0x02, 0xa6, 0x7c, 0x25, 0x57, 0x2d, 0x9a, 0xf7, 0x9f, 0x5c, 0x3a, 0xcd, 0x42, 0x47, 0x34, 0xeb, 0xff, 0x0a, 0x46, 0xed, 0x96, 0xac, 0x63, 0xc3, 0xc5, 0x4a, 0x4e, 0xfb, 0x76, 0x71, 0x68, 0x3e, 0x37, 0xcb, 0xc7, 0x1e, 0xea, 0xfe, 0x87, 0x0f, 0xbe, 0xd1, 0x65, 0xb2, 0x5e, 0x91, 0x89, 0x5a, 0x68, 0xb3, 0xa4, 0xc9, 0x20, 0xba, 0x3b, 0x3a, 0x66, 0x5b, 0x43, 0xa5, 0xe5, 0xdf, 0xed, 0x3e, 0x8e, 0xca, 0xc3, 0x3e, 0x45, 0xba, 0xf4, 0xe7, 0xd9, 0x91, 0xec, 0xc2, 0x3a, 0xd6, 0x28, 0x2c, 0xe6, 0x59, 0x49, 0x10, 0xa5, 0x16, 0x67, 0xf6, 0x76, 0x5c, 0xa7, 0x3d, 0xc9, 0x2f, 0x10, 0xa4, 0xee, 0xea, 0x9a, 0x10, 0xce, 0x29, 0x88, 0x89, 0xd9, 0xe5, 0xf8, 0x85, 0x3f, 0xe1, 0xb9, 0x69, 0x63, 0x45, 0x5c, 0x4d, 0x8d, 0x89, 0x8e, 0xff, 0xde, 0x95, 0xa5, 0x4b, 0x8a, 0x27, 0x78, 0x7a, 0x41, 0x74, 0x74, 0x19, 0xee, 0x12, 0xec, 0xfc, 0xa4, 0x15, 0xb1, 0x82, 0xd5, 0x79, 0xe3, 0x19, 0xc6, 0xc0, 0x06, 0x05, 0x3f, 0xdb, 0x58, 0x5e, 0x87, 0x4e, 0x62, 0x58, 0x90, 0x90, 0xce, 0xc8, 0x6e, 0xb0, 0x78, 0xe3, 0x0d, 0x3e, 0xc8, 0x48, 0x24, 0x69, 0x3e, 0x41, 0x65, 0x65, 0x4e, 0x45, 0xf7, 0x10, 0x6f, 0xc2, 0x25, 0xd4, 0x6f, 0x1a, 0x58, 0xcf, 0x09, 0xeb, 0x42, 0x31, 0xb9, 0x94, 0x5d, 0xe6, 0xcf, 0xf5, 0x94, 0x76, 0xc3, 0x76, 0x3f, 0x29, 0xc8, 0x4a, 0x55, 0x6e, 0xa3, 0xf5, 0xdd, 0x7d, 0xbe, 0x0b, 0xa6, 0x3c, 0x78, 0x3b, 0x38, 0x5f, 0xc0, 0x8d, 0x0a, 0xd4, 0xe2, 0xe8, 0xf6, 0x5e, 0xa0, 0xd7, 0xe9, 0x80, 0x85, 0x8c, 0xdf, 0x9c, 0x76, 0x26, 0x0f, 0x5c, 0x8a, 0x2f, 0x62, 0x51, 0x1c, 0x69, 0x2a, 0xda, 0x1e, 0xca, 0x11, 0x48, 0xaf, 0xc5, 0x4f, 0x3f, 0xf0, 0xcb, 0x21, 0x5f, 0x14, 0x12, 0x76, 0x24, 0xb7, 0x95, 0xeb, 0x0b, 0x71, 0x5c, 0xf9, 0xf7, 0xaa, 0xfd, 0x6d, 0xd2, 0xb0, 0x63, 0x19, 0x77, 0x06, 0xce, 0xca, 0xd0, 0x00, 0x1b, 0x7a, 0x3b, 0x8c, 0x46, 0xc6, 0x33, 0x53, 0x2d, 0xa2, 0x2c, 0x01, 0x96, 0x4b, 0xbe, 0xe0, 0x74, 0x7d, 0x06, 0xac, 0x66, 0xe7, 0x4a, 0xa3, 0x81, 0xdc, 0xdb, 0xdb, 0x4f, 0x4b, 0x40, 0xd8, 0x17, 0xf1, 0x90, 0x5e, 0x5f, 0xcd, 0x20, 0x84, 0xb0, 0xd4, 0x5e, 0x0a, 0x99, 0xe7, 0xfd, 0xec, 0xf6, 0x02, 0x53, 0x37, 0x73, 0xb6, 0xff, 0x1c, 0x4b, 0xd9, 0xce, 0x43, 0x56, 0x7c, 0xe0, 0x62, 0x42, 0x1d, 0x06, 0x0d, 0x20, 0x1e, 0x6f, 0xd0, 0x23, 0x76, 0x84, 0x7b, 0xa5, 0xa7, 0x10, 0xbd, 0x6b, 0xf0, 0xa4, 0xf4, 0x2a, 0xc3, 0x3a, 0x44, 0x4a, 0x79, 0x18, 0xe6, 0xe9, 0x45, 0xf7, 0xc3, 0x23, 0x66, 0x65, 0x42, 0x91, 0xa1, 0x68, 0x5e, 0x0f, 0xef, 0x64, 0xfb, 0xc3, 0x73, 0x3e, 0x7a, 0x5b, 0xae, 0xc2, 0x8b, 0x95, 0xf6, 0x42, 0x42, 0x05, 0x24, 0x80, 0x6e, 0x13, 0x8e, 0xcf, 0x26, 0x43, 0x35, 0x74, 0xa4, 0xb9, 0x3f, 0x52, 0x57, 0xfc, 0xa7, 0xc7, 0x33, 0xfa, 0x33, 0xd1, 0x4c, 0x4c, 0xa6, 0x75, 0xa3, 0xbc, 0x37, 0x61, 0x3f, 0x04, 0x43, 0xd0, 0x80, 0xd9, 0x3f, 0xae, 0xb1, 0x28, 0xf0, 0xfc, 0xdc, 0xa0, 0xde, 0x77, 0xe2, 0x70, 0x06, 0x74, 0xca, 0x52, 0xcf, 0x0f, 0x5a, 0xc8, 0x3f, 0x84, 0xe4, 0xa5, 0x6f, 0xdd, 0x63, 0xd0, 0x3c, 0xce, 0xc7, 0x45, 0x40, 0xdd, 0x8c, 0x5c, 0x01, 0xc5, 0x91, 0x4e, 0x67, 0x1d, 0x28, 0xf5, 0x74, 0x35, 0x69, 0xd3, 0x2f, 0x41, 0xcd, 0x56, 0xe1, 0xb9, 0xf8, 0x5a, 0x84, 0xff, 0xd5, 0xf0, 0x79, 0x43, 0xe8, 0x5e, 0x79, 0xa4, 0xe0, 0x67, 0xce, 0x97, 0x6c, 0xcc, 0xc3, 0x8d, 0x50, 0x12, 0x59, 0xd0, 0xb8, 0x86, 0x3b, 0xae, 0xcc, 0x7f, 0xf4, 0xda, 0x84, 0xe3, 0x60, 0x0f, 0xbe, 0xec, 0x60, 0xf6, 0x8e, 0x2c, 0xd2, 0x4a, 0xd5, 0xcf, 0xc1, 0x3a, 0x15, 0x21, 0xd8, 0x0f, 0x83, 0x50, 0x1d, 0x0e, 0x5e, 0x72, 0xdc, 0xa0, 0x80, 0xc9, 0xe0, 0xb0, 0x33, 0x46, 0xe9, 0x55, 0x45, 0x4d, 0x5b, 0xb1, 0x5f, 0xb8, 0x34, 0x19, 0x92, 0x1e, 0x40, 0x75, 0x33, 0x55, 0x90, 0xea, 0xe9, 0x35, 0x28, 0xb7, 0x04, 0x9f, 0xf8, 0x5d, 0x10, 0xbe, 0x0e, 0x03, 0xaa, 0x8d, 0x09, 0x18, 0x93, 0x9a, 0xd1, 0x3a, 0x03, 0x09, 0x85, 0x57, 0x40, 0xdb, 0xb5, 0x12, 0x6e, 0x71, 0xd2, 0x68, 0xa9, 0x4b, 0xe2, 0x93, 0x51, 0x16, 0x78, 0x2e, 0xa5, 0xe6, 0xe4, 0x9b, 0x94, 0xc0, 0xa7, 0xa2, 0xcf, 0x5b, 0x2a, 0x5a, 0x23, 0x27, 0xaf, 0x4d, 0x06, 0x8f, 0x87, 0xd7, 0x70, 0x7b, 0x85, 0xcf, 0xec, 0x1a, 0xb4, 0x69, 0xee, 0xde, 0x45, 0x5b, 0x67, 0xc8, 0xcb, 0x3f, 0x97, 0xe5, 0xab, 0x39, 0x22, 0x19, 0xcd, 0xd9, 0x67, 0x1b, 0x98, 0x43, 0x0d, 0xc1, 0x1e, 0x8d, 0xde, 0x7e, 0x93, 0x68, 0xd9, 0x29, 0x04, 0x03, 0x82, 0xff, 0x45, 0x2c, 0x7d, 0xec, 0x2c, 0xb9, 0x5b, 0x06, 0xfc, 0x26, 0xb4, 0x5a, 0x24, 0x7f, 0x76, 0xec, 0x2a, 0x80, 0x7c, 0xf9, 0xe2, 0xfc, 0x63, 0x7f, 0xe3, 0x7b, 0x99, 0x00, 0x3b, 0x27, 0xb6, 0x82, 0x62, 0xe9, 0x10, 0xda, 0x6d, 0xcf, 0x89, 0x2a, 0x84, 0xb1, 0xac, 0xa9, 0x96, 0x14, 0xf9, 0xa2, 0x4b, 0x4e, 0x7c, 0xc0, 0x3b, 0xeb, 0xa5, 0x88, 0x5d, 0x50, 0x53, 0x27, 0xc2, 0x9e, 0x32, 0x6e, 0x83, 0xd9, 0x47, 0x1b, 0xf8, 0x4a, 0xc9, 0x5a, 0x2a, 0x21, 0x33, 0x8b, 0x8b, 0x5f, 0x97, 0x46, 0xe5, 0xf3, 0x35, 0x9c, 0x91, 0x23, 0x4c, 0xa0, 0xe9, 0x2e, 0x30, 0x27, 0xff, 0x30, 0x9d, 0xcb, 0x90, 0x45, 0x4b, 0x36, 0x33, 0xf1, 0xc2, 0x9d, 0xd6, 0xc0, 0x70, 0x8a, 0x6b, 0x29, 0xf9, 0xdf, 0xdf, 0xb8, 0xce, 0x18, 0x4c, 0x6d, 0x01, 0xd0, 0x6f, 0x5f, 0x58, 0x86, 0x5c, 0xa4, 0xa0, 0xa2, 0x70, 0x75, 0x43, 0xb3, 0x88, 0x8e, 0x1d, 0xfb, 0x70, 0xd4, 0x8c, 0x2d, 0x9f, 0x3a, 0xc6, 0x75, 0x21, 0xe5, 0x70, 0xb9, 0xd4, 0x8f, 0x6c, 0x1f, 0xd7, 0x29, 0xf2, 0xcf, 0x40, 0xc4, 0xe2, 0xfa, 0x0d, 0xb1, 0x58, 0x1b, 0x5e, 0xe7, 0x81, 0x7c, 0xe1, 0xa6, 0xae, 0xfc, 0x8d, 0x5a, 0xa7, 0x11, 0x93, 0xc2, 0x42, 0x09, 0x91, 0x51, 0x34, 0x95, 0x09, 0xd5, 0x26, 0x87, 0x13, 0x56, 0x0c, 0xdb, 0x4e, 0x41, 0xb2, 0xf4, 0x1c, 0xc6, 0x97, 0x29, 0x0f, 0x7e, 0xff, 0x80, 0x9e, 0x51, 0x44, 0xb9, 0x1d, 0x97, 0x6d, 0x8f, 0xec, 0x7d, 0x01, 0x3a, 0xee, 0xaa, 0x1e, 0x38, 0x3c, 0x23, 0xc5, 0x4d, 0x1b, 0x6c, 0x78, 0xc9, 0x2c, 0xf1, 0x07, 0x09, 0xe3, 0xa4, 0xa7, 0x40, 0x3a, 0xe6, 0x44, 0x78, 0xa7, 0xab, 0x18, 0xd3, 0x4b, 0xd9, 0x7d, 0x17, 0x6c, 0xf2, 0xff, 0x69, 0x25, 0xf3, 0xb6, 0x59, 0x5c, 0x7c, 0xd3, 0x1f, 0xf5, 0x30, 0x78, 0x24, 0x45, 0x5f, 0xcd, 0xc5, 0xca, 0xe3, 0x50, 0x53, 0x19, 0x47, 0x6c, 0x5e, 0x17, 0x2f, 0x4e, 0x33, 0x6c, 0xf3, 0xf4, 0xa3, 0x35, 0x8e, 0x86, 0x06, 0xf9, 0xb7, 0xea, 0x80, 0xdf, 0x4d, 0x93, 0x83, 0x1e, 0xf8, 0x99, 0x95, 0xb4, 0x0e, 0x0f, 0x54, 0x5b, 0xb3, 0x91, 0xb7, 0xb9, 0x45, 0x1c, 0x96, 0xd7, 0xf7, 0x22, 0x6d, 0xd4, 0xbb, 0xde, 0x5d, 0xdb, 0x66, 0xe6, 0x73, 0x52, 0x0e, 0xff, 0x2d, 0x54, 0xb7, 0x34, 0x3a, 0x62, 0x2f, 0x2a, 0x82, 0x55, 0x37, 0xae, 0x66, 0x97, 0xe3, 0x90, 0x49, 0x93, 0x44, 0xb4, 0x4f, 0x6a, 0x44, 0x66, 0x64, 0xe8, 0xd0, 0xee, 0x81, 0xb6, 0x3d, 0x64, 0x2a, 0xd1, 0xe4, 0xc6, 0x3c, 0x3a, 0x10, 0x48, 0xe5, 0xf0, 0x1b, 0xeb, 0xf4, 0x1b, 0xd3, 0x51, 0x53, 0x8a, 0x22, 0xd0, 0xd1, 0x5f, 0xef, 0xc5, 0x25, 0x09, 0x3f, 0x2b, 0x30, 0x73, 0xa0, 0x6c, 0x83, 0x7b, 0xc7, 0x76, 0x21, 0xa6, 0x78, 0x12, 0x86, 0x12, 0xa6, 0x71, 0xe8, 0xac, 0xdc, 0x08, 0xbc, 0xa2, 0xdb, 0x9f, 0x7c, 0x1c, 0x85, 0xa4, 0xa8, 0x27, 0xf9, 0xc4, 0x0b, 0xf1, 0x00, 0xbd, 0x3f, 0x3c, 0xa8, 0x6d, 0x73, 0x0d, 0x2e, 0x2f, 0x6c, 0xa4, 0x21, 0x68, 0xca, 0xb1, 0xc5, 0x5d, 0x8d, 0xc5, 0xb6, 0x48, 0xd7, 0x07, 0xcd, 0xaa, 0xf3, 0x28, 0x47, 0xe2, 0x97, 0x99, 0x24, 0xff, 0x66, 0xfb, 0xce, 0xd3, 0xb9, 0xd7, 0xfb, 0x48, 0x9f, 0x8f, 0xd4, 0xf8, 0x23, 0x94, 0x57, 0xf7, 0xcd, 0xda, 0xfa, 0xf3, 0x6b, 0x89, 0x91, 0x80, 0x10, 0xf6, 0x71, 0xad, 0x5e, 0xd1, 0xd6, 0xdb, 0x01, 0xa0, 0x82, 0xcf, 0x7c, 0x6b, 0xa7, 0x05, 0x28, 0xb9, 0x07, 0x47, 0x79, 0xbc, 0x5a, 0x7f, 0x84, 0xc9, 0xf0, 0xca, 0xbe, 0x0b, 0x97, 0xcd, 0x07, 0x77, 0xbf, 0x4c, 0xe7, 0x02, 0xdc, 0xf8, 0x17, 0x12, 0x0c, 0x89, 0x43, 0x33, 0xfa, 0x0d, 0x0e, 0x0c, 0x02, 0x80, 0x57, 0x91, 0x96, 0x9c, 0xba, 0x7a, 0xe0, 0xf2, 0x5a, 0xf3, 0xa8, 0x3a, 0xde, 0x95, 0x79, 0xe8, 0xba, 0x95, 0xff, 0x00, 0xb0, 0x3b, 0xb4, 0x2a, 0x96, 0x96, 0xbc, 0x09, 0x59, 0x6f, 0x0c, 0xc9, 0x42, 0x7b, 0xd2, 0xf7, 0x78, 0xd4, 0x11, 0x96, 0xc7, 0xaa, 0x8c, 0x6f, 0x9f, 0x36, 0xe6, 0xa8, 0x60, 0xf0, 0x07, 0x98, 0xd4, 0x02, 0xc2, 0xda, 0xfd, 0xfc, 0xb4, 0xa0, 0x12, 0xc9, 0x6f, 0x4a, 0xc4, 0xe2, 0xd8, 0x38, 0xc5, 0xc1, 0xcd, 0xdc, 0x8b, 0x99, 0x0b, 0x13, 0x52, 0x44, 0x4f, 0xb5, 0x60, 0x7d, 0xbc, 0x6a, 0x8c, 0x4f, 0x7d, 0xc0, 0x01, 0xcd, 0xab, 0x7b, 0x40, 0x04, 0x71, 0x2d, 0x64, 0x2e, 0x6e, 0x06, 0xaa, 0x29, 0x5a, 0xec, 0x30, 0x27, 0xed, 0xce, 0xfd, 0xa6, 0xfc, 0x36, 0x42, 0xa3, 0xe6, 0x1e, 0xdf, 0x0a, 0x2e, 0x05, 0x29, 0x72, 0x69, 0x42, 0xeb, 0x07, 0x5b, 0x97, 0xab, 0xc7, 0x5d, 0x09, 0x2e, 0xf2, 0x01, 0xef, 0x3e, 0xbb, 0xf9, 0x4a, 0xaa, 0x44, 0x35, 0x54, 0x8f, 0xc9, 0x4c, 0x5c, 0xd6, 0x1c, 0x1d, 0xd0, 0xfe, 0x51, 0xb6, 0x9c, 0x1b, 0xba, 0x75, 0xb2, 0x1f, 0x16, 0x6c, 0xea, 0x59, 0x05, 0x0a, 0x0d, 0x3b, 0xbf, 0xf8, 0x2c, 0x60, 0x06, 0x42, 0x37, 0xce, 0x59, 0xb7, 0xcb, 0x78, 0x6b, 0x92, 0x4a, 0x07, 0xd3, 0x5a, 0x31, 0xd9, 0x05, 0x06, 0xa6, 0x4a, 0x81, 0x65, 0x51, 0x33, 0x4a, 0xbd, 0x6d, 0xb1, 0x9a, 0xb3, 0x1f, 0x28, 0xd4, 0x6a, 0x06, 0x87, 0xba, 0xef, 0x13, 0xcd, 0xe0, 0xd5, 0x9b, 0xcc, 0x60, 0x1c, 0xaa, 0x2c, 0xd0, 0x58, 0x9b, 0xb4, 0x71, 0x0e, 0xe5, 0xc5, 0xa9, 0x62, 0x38, 0x27, 0xb4, 0xef, 0xc9, 0x09, 0x96, 0xf7, 0xea, 0x42, 0x54, 0xbc, 0xdd, 0xdd, 0x63, 0x2d, 0xea, 0xd5, 0x61, 0xc5, 0xaf, 0x1d, 0x03, 0xb1, 0xb8, 0xe3, 0x4f, 0x31, 0x4f, 0x16, 0x0b, 0x40, 0x95, 0x26, 0x75, 0x77, 0xd2, 0x0b, 0x34, 0x2f, 0x0a, 0x88, 0x8f, 0xe6, 0xd1, 0xb1, 0xdd, 0xe4, 0x5f, 0xab, 0x3c, 0x1d, 0xe7, 0xb3, 0x86, 0x5a, 0x25, 0x61, 0x81, 0x94, 0x37, 0x2e, 0x56, 0xa0, 0xad, 0x35, 0x45, 0x12, 0xe3, 0x36, 0x96, 0x5b, 0x8f, 0xe0, 0xd3, 0x34, 0x96, 0x50, 0x34, 0x40, 0x24, 0xd5, 0x5b, 0xec, 0xfb, 0xf6, 0x41, 0x9b, 0x0b, 0xb6, 0x71, 0x00, 0x43, 0x16, 0x74, 0xca, 0xa8, 0xdc, 0x8c, 0x87, 0xa4, 0x93, 0xa5, 0xc2, 0xa0, 0xd3, 0x88, 0x6f, 0xd5, 0xc2, 0x52, 0x8a, 0x5e, 0xdb, 0x24, 0xfa, 0x92, 0xee, 0x1d, 0xbb, 0x92, 0x68, 0x85, 0x3c, 0x1e, 0xd5, 0x4b, 0x06, 0xad, 0xa3, 0xb2, 0x9f, 0xbc, 0x29, 0x47, 0xae, 0x66, 0xe8, 0x16, 0x5f, 0x35, 0x10, 0x1d, 0x09, 0x38, 0x46, 0x01, 0x0f, 0x55, 0xa4, 0x00, 0x04, 0xe1, 0x01, 0x27, 0x12, 0x6e, 0x73, 0xc5, 0x9c, 0xe4, 0x13, 0x1f, 0x22, 0xd4, 0x00, 0x65, 0x65, 0x08, 0xa7, 0xe5, 0xcc, 0x5f, 0x41, 0x7f, 0x07, 0xd8, 0x9c, 0x59, 0xf2, 0xec, 0x1f, 0xd4, 0xbc, 0x21, 0x09, 0xbe, 0x48, 0xdc, 0xf9, 0xc9, 0xd3, 0x76, 0xb3, 0x3b, 0xd8, 0x93, 0x21, 0xe8, 0x30, 0xaf, 0x98, 0x5d, 0x7e, 0xfa, 0x5d, 0x5f, 0xca, 0x66, 0x68, 0x94, 0x6c, 0xfe, 0x67, 0x7f, 0x2c, 0x79, 0x06, 0xb2, 0xa7, 0x0f, 0x6e, 0x3e, 0xf5, 0x8b, 0x0b, 0x6f, 0x88, 0xa2, 0x93, 0xb6, 0x57, 0x83, 0x44, 0xe7, 0x3c, 0xaf, 0x6d, 0xa4, 0x9b, 0x0b, 0x2f, 0x19, 0x45, 0x33, 0x85, 0xeb, 0x9c, 0x12, 0x82, 0x6a, 0xf7, 0xb0, 0xda, 0x0e, 0x48, 0x4a, 0xa4, 0x21, 0xfc, 0xa8, 0x5e, 0xb9, 0x22, 0xab, 0x32, 0xe9, 0xd0, 0x26, 0x77, 0x38, 0xc2, 0xee, 0x7b, 0x52, 0x45, 0x35, 0x80, 0xfe, 0x53, 0x13, 0x04, 0x50, 0x00, 0x66, 0x46, 0x20, 0x15, 0xdc, 0x05, 0xbb, 0xfa, 0x4e, 0x8b, 0xd7, 0xd9, 0x50, 0xea, 0xcd, 0x00, 0x06, 0x86, 0x02, 0x87, 0x39, 0xd3, 0xa6, 0x33, 0xa9, 0x60, 0xa2, 0x9b, 0xa5, 0x15, 0xcb, 0x89, 0xda, 0xb9, 0x5c, 0xa3, 0x69, 0xb6, 0xa3, 0x4b, 0x3c, 0x21, 0xfa, 0xc3, 0x99, 0xf5, 0xf9, 0x95, 0xf7, 0x9f, 0xea, 0x32, 0x11, 0xc0, 0x7d, 0xd9, 0x3a, 0x2e, 0xbe, 0xba, 0xf0, 0x3c, 0x43, 0x5c, 0xb3, 0x3b, 0xaa, 0x3c, 0x18, 0x40, 0x43, 0xb7, 0x19, 0x28, 0x09, 0x29, 0xaf, 0xda, 0xd7, 0x57, 0xa3, 0xcc, 0xd8, 0x0a, 0xa0, 0xc9, 0x40, 0xfd, 0x8e, 0xf1, 0x39, 0xf9, 0x1b, 0x01, 0x20, 0x3f, 0x9a, 0xd4, 0xf2, 0x26, 0x11, 0x2a, 0x01, 0x05, 0x8d, 0xa9, 0xec, 0x53, 0xb9, 0x21, 0xcd, 0x0d, 0xaf, 0x14, 0xb4, 0x58, 0x0e, 0x76, 0x55, 0x68, 0x4d, 0xb1, 0xfd, 0xa0, 0x4f, 0xec, 0xcb, 0xfb, 0x37, 0x8d, 0x1c, 0xaa, 0x7d, 0xfc, 0x47, 0xff, 0x42, 0xaa, 0x8b, 0x89, 0xe0, 0x53, 0x45, 0x81, 0xc6, 0x80, 0x66, 0x64, 0x83, 0x4f, 0x25, 0xe2, 0x20, 0x76, 0xf1, 0xf7, 0xb3, 0x86, 0xaa ],
-const [ 0x16, 0x00, 0xa3, 0x49, 0x99, 0x0d, 0xf4, 0x2a, 0xba, 0x9f, 0xa0, 0x3f, 0x70, 0xde, 0xff, 0x0f, 0x75, 0xae, 0x35, 0xc1, 0xa8, 0x82, 0xb4, 0x8c, 0xaf, 0x75, 0x02, 0x6e, 0xe0, 0x97, 0xbd, 0x21, 0x62, 0x84, 0xdc, 0x4b, 0x8f, 0x3c, 0x37, 0xf5, 0x9d, 0x2e, 0x4a, 0x3e, 0x7e, 0x96, 0x35, 0x50, 0x04, 0x09, 0x08, 0x94, 0x49, 0x4e, 0x3e, 0x22, 0x4e, 0x70, 0x87, 0x7c, 0xe2, 0x11, 0xcb, 0x7b, 0xc6, 0x01, 0x6b, 0x89, 0x0e, 0x10, 0xca, 0x11, 0xca, 0x20, 0x0c, 0x34, 0xe6, 0x7e, 0x1d, 0xbe, 0x4f, 0x72, 0xf5, 0x58, 0x57, 0x14, 0x1b, 0xff, 0x5b, 0x62, 0x68, 0xb4, 0xa3, 0x90, 0x0e, 0x75, 0x89, 0x9f, 0xd9, 0x6d, 0xde, 0x31, 0xb4, 0x68, 0x89, 0x9c, 0x6e, 0x89, 0x71, 0x3d, 0xbe, 0x3f, 0x9e, 0x0f, 0x85, 0x75, 0x9b, 0x7b, 0x54, 0x09, 0x1e, 0x72, 0x2e, 0x80, 0xea, 0xba, 0x8f, 0xf8, 0xf5, 0x85, 0xac, 0x5d, 0xc6, 0x48, 0xfd, 0xe0, 0x22, 0xca, 0xf9, 0xa5, 0xe7, 0x7c, 0x21, 0xbc, 0x38, 0x08, 0x3f, 0x53, 0xda, 0x2c, 0xf0, 0x2a, 0xde, 0xc9, 0x60, 0x47, 0x81, 0x37, 0x55, 0xea, 0x50, 0xdc, 0x6f, 0xc3, 0x90, 0xfd, 0xae, 0x63, 0xdc, 0xd3, 0x34, 0xf1, 0x10, 0xe2, 0x4c, 0x1e, 0x66, 0x86, 0xac, 0x5a, 0xdf, 0xcf, 0xf7, 0x49, 0xe5, 0x8e, 0x86, 0x70, 0x2e, 0xb0, 0x68, 0x35, 0xe3, 0xcb, 0xa7, 0x06, 0x02, 0xf7, 0xcd, 0xd8, 0x01, 0xdf, 0xa7, 0xd3, 0xb4, 0x18, 0x49, 0x4b, 0x70, 0xb1, 0x52, 0xf3, 0x71, 0x0b, 0x72, 0x4d, 0x79, 0xea, 0x29, 0x65, 0xba, 0xcd, 0xd1, 0xbf, 0xf6, 0x7b, 0xde, 0x8e, 0xe5, 0xdf, 0x65, 0x26, 0xd7, 0x15, 0xdb, 0xb4, 0x9a, 0xc5, 0x20, 0x2d, 0x9e, 0xb0, 0xbb, 0x84, 0x57, 0x88, 0x68, 0x20, 0xe3, 0x05, 0xd0, 0x8d, 0xed, 0x35, 0x97, 0x72, 0xd1, 0x14, 0x9b, 0xc3, 0x00, 0x5c, 0x7b, 0x37, 0xa7, 0x9e, 0x57, 0xfd, 0x8b, 0x92, 0xd7, 0xab, 0x37, 0xac, 0x6f, 0x77, 0x5a, 0xef, 0xe1, 0xa9, 0x6b, 0x06, 0x03, 0x50, 0x8e, 0x91, 0xc2, 0x34, 0xbb, 0xbd, 0x67, 0x0d, 0x1d, 0x17, 0x19, 0xf2, 0xb8, 0xa2, 0xa3, 0x14, 0x4f, 0x26, 0x78, 0xac, 0x85, 0xcc, 0xf4, 0x32, 0x42, 0xe8, 0xe5, 0xd0, 0x58, 0x16, 0x4a, 0x16, 0x67, 0x88, 0x5b, 0xef, 0xfe, 0x9e, 0xc9, 0xd4, 0x02, 0xb7, 0x46, 0x3f, 0x54, 0x48, 0x48, 0x63, 0xae, 0x2b, 0x0a, 0x1a, 0xce, 0x39, 0xd4, 0x1f, 0xd7, 0x1a, 0x7d, 0x7d, 0xf4, 0x5c, 0x2e, 0x47, 0x3e, 0xc3, 0x68, 0x8a, 0xe0, 0xe0, 0x49, 0x80, 0x78, 0xe5, 0x0b, 0x06, 0xc1, 0xb8, 0xcd, 0x50, 0x70, 0x46, 0x96, 0xdc, 0x5b, 0x1a, 0x97, 0xa4, 0xe0, 0x2e, 0xb0, 0x98, 0x85, 0x01, 0x36, 0x4b, 0xdc, 0xe9, 0xf4, 0xed, 0xaa, 0xab, 0x6f, 0x79, 0x47, 0x49, 0x6f, 0x2f, 0x48, 0x1b, 0xba, 0x45, 0x5c, 0x21, 0x23, 0xda, 0x74, 0x98, 0xc3, 0x2b, 0x27, 0xcb, 0x87, 0x09, 0x54, 0x2c, 0xeb, 0x8b, 0x09, 0xa3, 0x04, 0x00, 0xa3, 0x26, 0xc4, 0x27, 0x37, 0x8a, 0x7a, 0xa3, 0x31, 0x99, 0x98, 0xa9, 0x3b, 0x64, 0xb9, 0xfc, 0x61, 0xdb, 0xe2, 0x1b, 0x72, 0x9a, 0x08, 0xb8, 0xa9, 0x06, 0xd3, 0x6d, 0x8c, 0x99, 0xa2, 0xab, 0x15, 0x7a, 0xcf, 0xf3, 0x10, 0x51, 0x34, 0x48, 0xc4, 0x59, 0xee, 0xe4, 0xd5, 0xb7, 0x60, 0x2a, 0x69, 0x0a, 0x7b, 0xdc, 0x8a, 0x43, 0x3d, 0x8e, 0xcc, 0xb7, 0x78, 0x5a, 0x2f, 0x72, 0xd5, 0xd6, 0x46, 0xce, 0x18, 0x43, 0x99, 0x45, 0xa6, 0x07, 0x49, 0x84, 0x44, 0x5e, 0xf2, 0xc0, 0x21, 0x4c, 0xd5, 0x4d, 0x17, 0xd6, 0x37, 0x6d, 0x2e, 0x71, 0x04, 0x66, 0x62, 0xbb, 0xb8, 0xd7, 0xa6, 0x69, 0x7f, 0x4b, 0x28, 0x80, 0x9b, 0x0f, 0xd7, 0xc9, 0x07, 0x41, 0x23, 0x7e, 0x5a, 0x2a, 0x03, 0x4a, 0xed, 0xce, 0x3d, 0x71, 0x40, 0xc0, 0xe2, 0x4a, 0x9a, 0x3b, 0x17, 0xf6, 0xf0, 0x6f, 0x1b, 0x4c, 0x08, 0x19, 0x86, 0x13, 0xdf, 0x56, 0xcf, 0x74, 0x47, 0xb9, 0x11, 0xae, 0xd4, 0x9b, 0x0f, 0x0c, 0xf9, 0xb2, 0x75, 0x15, 0x6f, 0xe6, 0x61, 0x02, 0xd6, 0x5f, 0x21, 0x75, 0x9f, 0xe3, 0x3f, 0x67, 0x29, 0x5f, 0xba, 0x62, 0x2a, 0xc3, 0x97, 0xf1, 0x51, 0x13, 0x98, 0x56, 0x2a, 0xbb, 0x4c, 0x7a, 0x41, 0x24, 0x48, 0x2a, 0x8a, 0x84, 0xb3, 0x7f, 0x00, 0xfa, 0x08, 0x9e, 0x8d, 0xda, 0x17, 0xa2, 0x2a, 0x46, 0x4d, 0xd7, 0x47, 0xfe, 0x36, 0x29, 0x6d, 0x78, 0x40, 0xdc, 0x22, 0x34, 0xc2, 0x7d, 0x0d, 0x4a, 0x3c, 0x18, 0x5a, 0x45, 0xe1, 0xab, 0x60, 0x33, 0x52, 0xdb, 0x81, 0xfd, 0xad, 0xe6, 0x52, 0xf5, 0xc6, 0xd9, 0xfc, 0xae, 0xb4, 0x03, 0xe3, 0x10, 0x90, 0xa9, 0x85, 0xab, 0x79, 0xfb, 0xa4, 0x4c, 0xdb, 0x47, 0xa7, 0xce, 0xf1, 0x6d, 0x3e, 0x33, 0x89, 0x93, 0x45, 0xf4, 0x08, 0x19, 0xeb, 0x94, 0xad, 0xcf, 0x13, 0x7b, 0x1a, 0x66, 0xfa, 0x02, 0x10, 0x25, 0x1a, 0xcb, 0x7a, 0xdd, 0x4f, 0x53, 0xad, 0x1f, 0x39, 0xca, 0xee, 0xac, 0xe1, 0x22, 0x34, 0x2d, 0x9f, 0x66, 0x30, 0x25, 0x3b, 0x4d, 0x8b, 0x23, 0x52, 0x0f, 0x6f, 0x3c, 0xfb, 0x77, 0x48, 0xb8, 0xab, 0x39, 0xcc, 0x0c, 0x56, 0x87, 0x39, 0x09, 0xd7, 0xdf, 0xdd, 0x52, 0x92, 0x27, 0xdc, 0x13, 0x58, 0xfb, 0x2e, 0xf0, 0x8b, 0x46, 0xe7, 0x3c, 0x82, 0x0f, 0xbb, 0x6c, 0x2e, 0x96, 0xc1, 0xcb, 0xfe, 0xa0, 0x77, 0x6f, 0x01, 0x0f, 0x07, 0x6b, 0x4b, 0xb5, 0xc8, 0x46, 0x99, 0x6a, 0x08, 0xac, 0x38, 0x5c, 0x09, 0x64, 0x22, 0xa7, 0x49, 0x82, 0x6b, 0x26, 0x06, 0xde, 0xdb, 0x88, 0x02, 0xc4, 0xdd, 0xa6, 0x84, 0xed, 0x97, 0x13, 0x9f, 0xae, 0x5b, 0xf5, 0xb6, 0x70, 0x3e, 0x14, 0x40, 0x60, 0x06, 0x31, 0xc9, 0x68, 0x4a, 0x99, 0x39, 0x5d, 0xd4, 0xfa, 0x59, 0x7a, 0x4a, 0x74, 0x93, 0x0d, 0x0e, 0xf3, 0xfa, 0x70, 0x62, 0xbd, 0x8a, 0x3b, 0xd0, 0x47, 0xb0, 0xb8, 0xc9, 0x4d, 0x0d, 0x97, 0x8c, 0x21, 0x77, 0xe3, 0x49, 0x44, 0x40, 0x35, 0x86, 0x33, 0xbb, 0x28, 0xc3, 0x83, 0xfd, 0x0c, 0x59, 0x30, 0xe1, 0xdf, 0xa8, 0x33, 0x4f, 0x79, 0x71, 0x52, 0xbd, 0x06, 0x81, 0x3c, 0xf5, 0xb9, 0x90, 0xd5, 0x19, 0xbf, 0x68, 0xcf, 0xe5, 0x72, 0x4a, 0x7a, 0x35, 0xd0, 0x8d, 0xdd, 0xc7, 0x2b, 0x88, 0x05, 0x41, 0x21, 0xb2, 0x9d, 0x76, 0xcf, 0x08, 0xbf, 0xe5, 0x42, 0xaf, 0x0a, 0x82, 0x2e, 0xdb, 0xf5, 0xba, 0xe3, 0xef, 0x62, 0xb1, 0x7c, 0xe6, 0x77, 0xce, 0x5a, 0xf1, 0xa9, 0x79, 0xd1, 0x61, 0x19, 0x23, 0x20, 0xc8, 0x24, 0x87, 0xa7, 0x5b, 0x35, 0x30, 0x54, 0x9b, 0xde, 0x3c, 0x5f, 0x35, 0x28, 0x5f, 0x37, 0x26, 0x27, 0x2b, 0xbc, 0x22, 0xd1, 0x8e, 0xae, 0x37, 0x10, 0x9c, 0x65, 0xae, 0x15, 0x8e, 0xc3, 0x32, 0xf0, 0x0b, 0x68, 0x34, 0x5d, 0xa7, 0x24, 0x8d, 0xe1, 0xaa, 0xb2, 0x65, 0x16, 0x12, 0xa3, 0x54, 0x43, 0xdb, 0x98, 0xc8, 0x30, 0x7d, 0xb4, 0xa7, 0x39, 0xb7, 0x51, 0x35, 0xa0, 0x8b, 0xf2, 0x37, 0x28, 0x8a, 0x79, 0x59, 0xdf, 0x51, 0x9b, 0xcd, 0x3b, 0x54, 0x90, 0x35, 0x68, 0xda, 0x0f, 0xc3, 0xe1, 0x49, 0x79, 0x9e, 0x3e, 0xa4, 0x55, 0x88, 0x4c, 0x52, 0xfc, 0xbf, 0x63, 0x21, 0x95, 0x20, 0xf4, 0x8a, 0x44, 0x92, 0x62, 0x37, 0x9f, 0xa2, 0x13, 0xc2, 0x62, 0x6b, 0xc6, 0xc0, 0x63, 0xb9, 0x27, 0xfe, 0xc8, 0x6e, 0xa0, 0x0a, 0x77, 0x24, 0x73, 0xf5, 0xce, 0x13, 0x06, 0x58, 0x95, 0x35, 0x7d, 0x95, 0x30, 0xa9, 0x8e, 0x5f, 0x19, 0x56, 0x91, 0x7d, 0x8e, 0xd0, 0xd7, 0xca, 0x87, 0x7f, 0x3d, 0x81, 0xeb, 0xfe, 0x01, 0xb7, 0x03, 0xc1, 0xd4, 0x29, 0x2f, 0xfb, 0x30, 0x38, 0xd8, 0xbe, 0xeb, 0x32, 0xa5, 0x64, 0x0d, 0xd3, 0xf2, 0x2f, 0xdf, 0x0c, 0x7e, 0x2c, 0x44, 0x02, 0x63, 0x5d, 0x4c, 0x5a, 0x4c, 0x16, 0x07, 0xb4, 0xe2, 0xa8, 0x97, 0x75, 0x87, 0x3d, 0x89, 0xca, 0x47, 0x03, 0x66, 0xea, 0x0b, 0x8d, 0x84, 0x9b, 0x10, 0x76, 0x22, 0xf7, 0x98, 0x47, 0xb4, 0x70, 0xe0, 0x9a, 0x7c, 0x12, 0x51, 0x80, 0x5a, 0x08, 0xfa, 0x21, 0xe5, 0x62, 0x3e, 0xa2, 0xba, 0x15, 0xca, 0x4c, 0x15, 0x43, 0xcb, 0xea, 0x9e, 0xbd, 0x5d, 0x72, 0x85, 0xc7, 0x46, 0xe8, 0xd0, 0x1b, 0xe4, 0x80, 0xf4, 0x30, 0x64, 0x03, 0xa3, 0xbb, 0x35, 0x73, 0xe6, 0x77, 0xbc, 0xf2, 0x6b, 0x21, 0x4a, 0xe0, 0x20, 0xc7, 0x4b, 0x44, 0x01, 0x43, 0xc0, 0x6d, 0x2d, 0x03, 0xef, 0xd9, 0x40, 0x0b, 0x58, 0x55, 0xdd, 0x3c, 0xec, 0x66, 0x8a, 0xd6, 0x7a, 0xe8, 0xc1, 0x3c, 0x6a, 0xf5, 0x43, 0xf7, 0xad, 0x08, 0xb0, 0xfe, 0xf4, 0x62, 0x55, 0x34, 0x20, 0xad, 0x45, 0x33, 0xfa, 0xe0, 0xab, 0x48, 0x25, 0x62, 0x5e, 0xbe, 0x51, 0x72, 0xb6, 0x60, 0xb0, 0xc6, 0x9f, 0x39, 0xae, 0x72, 0xeb, 0x9e, 0xdd, 0x0c, 0xed, 0x6f, 0x2e, 0x0e, 0x43, 0x99, 0x67, 0x7b, 0xf3, 0xdf, 0xd1, 0xc6, 0xba, 0xdb, 0x31, 0xef, 0xa0, 0x3f, 0xfa, 0xef, 0xd0, 0x61, 0xc1, 0x56, 0xa7, 0xf7, 0xf1, 0x33, 0x0b, 0x1e, 0xc0, 0x34, 0xfe, 0xa2, 0x62, 0x0e, 0x72, 0x79, 0x7c, 0x1f, 0x5f, 0x90, 0xdb, 0x52, 0x14, 0xcb, 0x66, 0x44, 0xcb, 0x47, 0x51, 0xa5, 0x7f, 0xe2, 0x94, 0xe0, 0x02, 0xfd, 0x9c, 0xfe, 0x4a, 0x80, 0x40, 0xc7, 0x0b, 0x1f, 0xf6, 0x2b, 0x8c, 0xdc, 0x47, 0xe1, 0xb3, 0xcd, 0x80, 0x4e, 0x61, 0x20, 0xab, 0xa8, 0x06, 0x5c, 0xbd, 0x5b, 0x6c, 0xe9, 0x11, 0xac, 0xd7, 0xd3, 0x15, 0x9c, 0x50, 0xcb, 0x44, 0x0f, 0x3e, 0x6f, 0x54, 0x2d, 0x36, 0xcb, 0xb0, 0x09, 0x14, 0x1f, 0x28, 0x80, 0x4b, 0xe2, 0xe7, 0x65, 0x79, 0x08, 0xa6, 0xdb, 0x3f, 0x81, 0x20, 0x01, 0x4f, 0x02, 0xc6, 0xd5, 0xc6, 0x07, 0xb3, 0x52, 0xbd, 0x19, 0xe2, 0xdc, 0x1a, 0x4c, 0x9f, 0xde, 0xac, 0x0d, 0x3b, 0xb2, 0x78, 0x1a, 0x04, 0xc1, 0x4d, 0xd2, 0x74, 0xeb, 0x9f, 0xaf, 0xa9, 0x29, 0x92, 0x11, 0x15, 0x70, 0x54, 0x3d, 0x77, 0xd9, 0xb0, 0xa5, 0x0a, 0x00, 0xe0, 0x6a, 0xfc, 0xa9, 0xa3, 0x1f, 0x21, 0xaa, 0x90, 0xd0, 0xe9, 0x05, 0xaa, 0x42, 0x90, 0x54, 0x34, 0x7d, 0x94, 0x6a, 0xc7, 0x88, 0x6c, 0x37, 0xa1, 0x74, 0x77, 0xec, 0x40, 0x9b, 0x33, 0x60, 0x30, 0x2a, 0xaf, 0xb2, 0x21, 0xdd, 0x43, 0x31, 0x3c, 0x0a, 0x7e, 0x78, 0xb7, 0xe1, 0x60, 0xdd, 0xa7, 0xf2, 0xc9, 0x0d, 0x16, 0xf0, 0x32, 0xf0, 0x56, 0xb4, 0x9b, 0xd3, 0x94, 0x84, 0xc4, 0xc5, 0xb0, 0x96, 0xa0, 0x41, 0x4d, 0xd0, 0x07, 0x0e, 0x24, 0xd2, 0xab, 0x64, 0x9d, 0x36, 0x4d, 0x50, 0xa0, 0x16, 0x31, 0x59, 0xa8, 0xcf, 0xcf, 0x64, 0x1a, 0x05, 0xcb, 0xd5, 0xd6, 0xe8, 0x27, 0xf7, 0x0b, 0xb5, 0xb8, 0x9e, 0x4f, 0x7f, 0xd6, 0x0b, 0xef, 0x2f, 0x58, 0x0f, 0x83, 0xca, 0xc0, 0x74, 0xc6, 0xf2, 0xb2, 0x98, 0xa5, 0xb0, 0xab, 0x5b, 0x96, 0x70, 0xef, 0x3b, 0x2b, 0x4d, 0xc3, 0xbe, 0xe7, 0x8f, 0xdd, 0x11, 0x50, 0x72, 0x19, 0xee, 0x45, 0x2a, 0x6d, 0xc2, 0x92, 0x23, 0x1f, 0x10, 0xc2, 0x8d, 0x35, 0x10, 0x35, 0x18, 0x2e, 0x9d, 0x72, 0xfc, 0xef, 0x4e, 0xbd, 0x3d, 0x00, 0xe2, 0xed, 0x2d, 0xf8, 0xe1, 0x78, 0x32, 0x36, 0x80, 0xd0, 0xc9, 0xd2, 0xc5, 0xf2, 0xcb, 0xd3, 0xed, 0x3b, 0xf0, 0xa3, 0x0b, 0x7e, 0x91, 0xc0, 0xf1, 0x55, 0xb2, 0xb3, 0x53, 0xb4, 0x3f, 0x46, 0x2a, 0xc4, 0x96, 0xf2, 0x57, 0xee, 0x46, 0x97, 0x89, 0x35, 0x16, 0x70, 0x60, 0xca, 0x4a, 0x45, 0xd3, 0xda, 0x21, 0xe2, 0xcf, 0xab, 0xa2, 0xc9, 0x20, 0xe7, 0x98, 0x24, 0x95, 0x38, 0xdc, 0xfd, 0x5f, 0x14, 0xd2, 0xb1, 0xbb, 0xdb, 0x36, 0xa2, 0xd1, 0x1f, 0x19, 0x2d, 0xdb, 0x42, 0x26, 0xdc, 0x89, 0x47, 0x2a, 0xdc, 0xa4, 0xe2, 0xd4, 0xb1, 0xf3, 0xd1, 0xb9, 0x28, 0x5b, 0x6f, 0x9a, 0x8d, 0x49, 0x87, 0xea, 0x1f, 0x55, 0x66, 0x8b, 0xc1, 0x1f, 0x34, 0xd9, 0xf2, 0x7d, 0x84, 0xe9, 0xff, 0xd9, 0x29, 0x12, 0x77, 0xd4, 0x4b, 0xad, 0xe0, 0x2f, 0xbb, 0x1a, 0xa8, 0xec, 0x84, 0x04, 0x5f, 0xb0, 0xc3, 0xe5, 0x23, 0x6c, 0xb8, 0xcc, 0x5b, 0x3c, 0x1c, 0x5e, 0xa8, 0x90, 0xb5, 0x1a, 0x18, 0x89, 0x29, 0xe2, 0x9d, 0xa6, 0x10, 0xb7, 0xbe, 0x9f, 0x4c, 0xc5, 0x8d, 0x91, 0x9d, 0x9f, 0xd9, 0x5c, 0x70, 0xcb, 0xa4, 0x49, 0xf8, 0x81, 0xd7, 0xf1, 0x80, 0xb0, 0x35, 0x5a, 0x00, 0x42, 0x8e, 0x62, 0xee, 0xa1, 0x35, 0x61, 0x56, 0x7a, 0xb4, 0x0a, 0x2d, 0xc1, 0xbd, 0x92, 0xe3, 0xf5, 0x64, 0x15, 0x37, 0xa5, 0x8c, 0x35, 0x4f, 0x33, 0x9f, 0x04, 0x08, 0xd8, 0x83, 0x24, 0x8b, 0xe8, 0xc9, 0x2c, 0x21, 0x57, 0x27, 0x4e, 0x48, 0x7d, 0x28, 0x37, 0x06, 0x16, 0x22, 0x37, 0x7d, 0x8d, 0x69, 0xa2, 0xc0, 0x7a, 0xc2, 0x76, 0xe5, 0x69, 0x1a, 0x3d, 0x5b, 0xdd, 0x78, 0x35, 0x7e, 0x94, 0x31, 0xaf, 0x69, 0x0d, 0x5b, 0xb5, 0x0b, 0x48, 0x83, 0xef, 0x7e, 0xcd, 0xa3, 0xc8, 0x93, 0xef, 0x4e, 0xcc, 0xb2, 0x52, 0x2e, 0x54, 0xe1, 0xab, 0xb0, 0x66, 0x22, 0xc7, 0xfe, 0xd7, 0x02, 0xcf, 0x2e, 0xb2, 0x6f, 0xca, 0xb8, 0xde, 0xca, 0x63, 0x2e, 0xfa, 0x3d, 0xec, 0x27, 0x8c, 0x4f, 0xa4, 0x7d, 0x5b, 0xb5, 0x35, 0xb8, 0x19, 0x6b, 0x81, 0xc9, 0x45, 0x04, 0x9e, 0xfc, 0x50, 0x3f, 0x1f, 0x28, 0xff, 0xda, 0x96, 0x28, 0x10, 0xab, 0x57, 0x8f, 0x20, 0xec, 0x7e, 0x98, 0xcc, 0xd7, 0x33, 0x5c, 0x17, 0x73, 0x2c, 0x48, 0x0b, 0xad, 0x74, 0xcd, 0xa4, 0xaa, 0x6b, 0x59, 0xe9, 0x5c, 0x0f, 0x87, 0x5c, 0x53, 0x79, 0x93, 0x94, 0xd6, 0xaa, 0x10, 0x29, 0x33, 0x88, 0xdd, 0xd0, 0x53, 0x24, 0x55, 0xc7, 0x91, 0x3e, 0xc6, 0x74, 0xcc, 0x0b, 0x24, 0x49, 0xbb, 0x36, 0xff, 0xea, 0x81, 0x24, 0xb3, 0x92, 0x82, 0x7c, 0xdf, 0xb3, 0x74, 0xe7, 0x18, 0xdc, 0xb9, 0x14, 0xde, 0xe0, 0xec, 0x00, 0xce, 0x35, 0xba, 0x74, 0x1a, 0x9a, 0xf3, 0xcf, 0x37, 0xfc, 0xe0, 0x05, 0xd5, 0x9b, 0xd8, 0xe8, 0x14, 0x69, 0x0e, 0xa6, 0xf5, 0xb2, 0xad, 0x93, 0x0e, 0x02, 0x27, 0x29, 0x83, 0x44, 0xc9, 0x4d, 0x31, 0x27, 0x94, 0xd4, 0x2c, 0xc6, 0x48, 0x46, 0x6c, 0x87, 0xc1, 0xe2, 0xc3, 0x43, 0x86, 0xe2, 0x12, 0xa8, 0xa0, 0x00, 0xbd, 0xdc, 0xa8, 0x38, 0x5c, 0x63, 0x24, 0xd0, 0xb4, 0x43, 0x14, 0x96, 0xe5, 0x66, 0xc7, 0x69, 0xe4, 0x3f, 0xf3, 0xfa, 0x2c, 0xb1, 0x05, 0xd4, 0xb1, 0x2c, 0xb6, 0x9a, 0x16, 0x19, 0xdf, 0x90, 0x1f, 0x78, 0x8e, 0x5d, 0x69, 0xc7, 0x59, 0x10, 0x59, 0x26, 0xf2, 0x60, 0x52, 0xba, 0xfc, 0x38, 0x2b, 0x4f, 0x1d, 0x73, 0xe0, 0x41, 0x55, 0xe4, 0x87, 0x9c, 0x8e, 0x99, 0x86, 0x82, 0x74, 0x60, 0x04, 0xcd, 0x86, 0x8b, 0x9d, 0xf6, 0x6d, 0xf1, 0x5a, 0x36, 0x8d, 0x35, 0xe0, 0xea, 0xdb, 0x4b, 0xe7, 0x3c, 0xee, 0x37, 0xee, 0x00, 0x58, 0x18, 0x2d, 0xdc, 0x36, 0x66, 0xcc, 0xac, 0x06, 0x78, 0x52, 0x24, 0xb9, 0x49, 0x60, 0xb7, 0x09, 0x7b, 0x9f, 0xb8, 0x0d, 0x9c, 0xf7, 0xc0, 0x0b, 0xa9, 0x02, 0x4f, 0x8d, 0xd0, 0xc0, 0xb6, 0xb7, 0x7a, 0x8c, 0x34, 0xd7, 0x89, 0x4e, 0x5f, 0x3e, 0xde, 0xf3, 0xc5, 0x4f, 0x1f, 0x1a, 0xd4, 0xd5, 0xb7, 0x10, 0xf7, 0x9a, 0x1e, 0xff, 0x02, 0x35, 0x5a, 0x62, 0xd0, 0x23, 0xc6, 0xbc, 0x2a, 0x19, 0x12, 0x8a, 0xeb, 0x99, 0x8b, 0x76, 0x62, 0xc4, 0x9c, 0xcd, 0xf8, 0x6f, 0x95, 0x33, 0x13, 0x78, 0xac, 0x96, 0x3a, 0x5a, 0x42, 0x60, 0x79, 0x00, 0x67, 0xf1, 0x07, 0xd7, 0x9f, 0x4c, 0x26, 0x27, 0xe6, 0x10, 0x4b, 0xa3, 0xf3, 0xab, 0x7f, 0x3f, 0xba, 0xca, 0x05, 0x41, 0x34, 0x13, 0x3d, 0x9b, 0x62, 0x17, 0xc8, 0x78, 0x90, 0x82, 0xed, 0x15, 0xd7, 0x95, 0x3b, 0xd2, 0xe5, 0xd7, 0x70, 0x89, 0x01, 0x07, 0x9a, 0x1e, 0x49, 0x54, 0x7c, 0x57, 0x3e, 0xd1, 0x33, 0xee, 0x83, 0x23, 0x1a, 0xe5, 0xe2, 0x7c, 0xea, 0x1a, 0x90, 0xce, 0x26, 0x1b, 0xb2, 0x38, 0xb6, 0x3b, 0x1f, 0xc5, 0xd1, 0xe6, 0x68, 0x55, 0x21, 0x31, 0x16, 0xdb, 0x22, 0xb5, 0x32, 0xc9, 0xcc, 0x9e, 0x0b, 0xc9, 0x71, 0xff, 0x33, 0xae, 0xe8, 0x69, 0xcb, 0xaa, 0xeb, 0xbb, 0x00, 0xc1, 0xbe, 0x3b, 0xd6, 0x7d, 0x11, 0xe6, 0x25, 0xe4, 0x28, 0x05, 0xe0, 0xa7, 0x39, 0x01, 0x9d, 0x9c, 0x16, 0x78, 0x52, 0x6e, 0x0b, 0x90, 0x5d, 0x94, 0x0a, 0x8c, 0xc8, 0x7f, 0x05, 0x9d, 0xca, 0x18, 0x9c, 0xfa, 0x91, 0x69, 0xf8, 0x32, 0x3e, 0x9a, 0xf7, 0xc1, 0x32, 0x20, 0x89, 0xe2, 0x88, 0x31, 0x5a, 0xa5, 0xe2, 0x7b, 0xb1, 0x41, 0x69, 0x15, 0x98, 0xab, 0x0f, 0xb6, 0x3d, 0x68, 0x18, 0x25, 0x98, 0x9f, 0xd8, 0xf0, 0x4e, 0x72, 0xbe, 0x61, 0xd5, 0x8e, 0x91, 0xae, 0xd9, 0x01, 0xfa, 0x70, 0xdf, 0x4d, 0x43, 0x56, 0x29, 0xba, 0x5e, 0x1b, 0xd9, 0xf0, 0x29, 0xb5, 0x59, 0xc4, 0xf0, 0xd0, 0xf9, 0x53, 0x33, 0x7a, 0xda, 0x4d, 0xaa, 0x20, 0x0c, 0x94, 0x87, 0xb9, 0xf3, 0x06, 0xfb, 0x41, 0xef, 0x96, 0xfb, 0x69, 0x3b, 0xa2, 0x44, 0x8d, 0x16, 0x81, 0x9d, 0xe6, 0x21, 0x5b, 0x5c, 0x01, 0x09, 0x3d, 0x2b, 0x6f, 0x65, 0x6c, 0x0c, 0xbf, 0xe2, 0xfa, 0x9b, 0xa9, 0x9d, 0x98, 0x93, 0x8c, 0xd0, 0xab, 0x94, 0x1b, 0xb1, 0xa2, 0x24, 0x52, 0x97, 0x86, 0xf3, 0xb0, 0x5f, 0xd2, 0x63, 0xa0, 0x0e, 0x86, 0x47, 0x38, 0xb7, 0x77, 0xeb, 0x25, 0xa0, 0xe9, 0x56, 0xe6, 0xa0, 0x5f, 0xcb, 0x39, 0xcb, 0xb2, 0x96, 0xd3, 0x52, 0x61, 0x05, 0x54, 0xa4, 0x28, 0xb4, 0x7a, 0xd9, 0xd4, 0x0d, 0x95, 0x51, 0x55, 0x10, 0x3b, 0x98, 0x15, 0x50, 0x3c, 0x8d, 0x88, 0x3e, 0xd8, 0xc4, 0x05, 0xaa, 0x30, 0x28, 0xd4, 0x87, 0xfb, 0xe5, 0x88, 0xef, 0x7a, 0x85, 0x8e, 0x67, 0xae, 0x58, 0x07, 0x63, 0xc8, 0x1a, 0xd3, 0x0d, 0xe1, 0xd0, 0xee, 0x42, 0xeb, 0xf3, 0x00, 0xdd, 0xe8, 0xd0, 0x2f, 0x39, 0x5a, 0x2f, 0x38, 0xf1, 0xfa, 0x33, 0xbe, 0xea, 0xac, 0x81, 0xe2, 0x94, 0xb3, 0xa4, 0x13, 0x6c, 0x21, 0xb1, 0x27, 0xc6, 0x92, 0x26, 0xab, 0xc9, 0x1a, 0x18, 0x78, 0xbb, 0x7c, 0x8e, 0x87, 0x7f, 0x9d, 0x28, 0x07, 0x5b, 0x38, 0x04, 0xac, 0xff, 0xd2, 0xe1, 0x49, 0xc3, 0xf1, 0x85, 0xa1, 0x31, 0x89, 0x5d, 0x7b, 0xc3, 0xb7, 0x64, 0xf4, 0xed, 0xb1, 0x45, 0x19, 0x5e, 0xfe, 0xc4, 0xb5, 0x84, 0xe2, 0x5a, 0x68, 0x4e, 0x1d, 0x1f, 0xf9, 0x35, 0xd5, 0xee, 0xed, 0x7d, 0xd0, 0xc3, 0x59, 0xb8, 0xe6, 0x67, 0xf4, 0x8d, 0xb6, 0x50, 0x70, 0xb7, 0x99, 0xc2, 0x0b, 0x50, 0xd4, 0x3b, 0x61, 0x50, 0x12, 0x0e, 0x84, 0x51, 0x11, 0x4e, 0x4e, 0x95, 0x9b, 0xed, 0xf6, 0x49, 0xb8, 0x25, 0xe2, 0x0b, 0x22, 0x17, 0xbc, 0xab, 0xf9, 0xb3, 0xc8, 0x2e, 0xb8, 0xd7, 0x75, 0x19, 0x68, 0xbb, 0x32, 0xec, 0x13, 0x8c, 0x82, 0xec, 0x7c, 0x57, 0x53, 0x25, 0x0d, 0x29, 0x8c, 0xb0, 0x11, 0x75, 0xe5, 0x32, 0x23, 0xb5, 0xfb, 0xa5, 0xe6, 0x54, 0xa4, 0x5b, 0xf7, 0xcc, 0x7f, 0x3f, 0x20, 0x0c, 0xd0, 0x5f, 0xcf, 0x1c, 0x8b, 0xa7, 0xc6, 0x03, 0xaf, 0xef, 0x13, 0xe9, 0xd5, 0x39, 0x43, 0x79, 0x09, 0x33, 0xd3, 0x89, 0xd8, 0x04, 0xe7, 0xfd, 0xaa, 0x44, 0x3e, 0xe8, 0x53, 0x4c, 0x66, 0xf5, 0xe4, 0xb1, 0x2c, 0x06, 0xc7, 0x0b, 0x57, 0x1a, 0x0b, 0xfb, 0x96, 0x74, 0xfc, 0x6c, 0xb6, 0xfa, 0xf7, 0x18, 0x18, 0xdb, 0x7c, 0x4e, 0x63, 0x74, 0x85, 0xf3, 0x76, 0x75, 0x16, 0xc8, 0xa1, 0x3f, 0x16, 0xea, 0x14, 0x91, 0x5d, 0x9f, 0x97, 0x64, 0x0e, 0x4f, 0x7c, 0x13, 0x27, 0xd1, 0xd2, 0xbf, 0x56, 0xe9, 0xdc, 0xf2, 0x0f, 0x0e, 0xc2, 0x82, 0xdb, 0x70, 0x85, 0xb9, 0xf3, 0x39, 0x38, 0xb2, 0x0d, 0x13, 0x6e, 0x06, 0x76, 0xeb, 0xef, 0xa9, 0x61, 0xf5, 0xaf, 0x0e, 0x7f, 0xf1, 0x00, 0x92, 0xcf, 0xac, 0x06, 0x17, 0xb8, 0xc9, 0x6b, 0xef, 0x55, 0xc1, 0x55, 0xfd, 0x10, 0x29, 0x95, 0x16, 0x72, 0x34, 0x22, 0xad, 0x39, 0x78, 0xc5, 0xb0, 0xab, 0xf5, 0x15, 0xad, 0x2b, 0x53, 0xa6, 0x39, 0x0a, 0x6b, 0x7e, 0x92, 0x9f, 0x09, 0xc8, 0x83, 0x9a, 0xf0, 0xcd, 0x88, 0x95, 0x1f, 0x1f, 0x33, 0xec, 0x53, 0x17, 0xce, 0xcf, 0xcd, 0x82, 0x42, 0x95, 0x55, 0x98, 0x38, 0x53, 0x7f, 0x2e, 0x7d, 0xae, 0x2d, 0x2c, 0xab, 0xed, 0x55, 0x40, 0x06, 0x53, 0x05, 0xd4, 0xa4, 0xab, 0xa4, 0x3e, 0xd1, 0x24, 0x7a, 0x37, 0xb1, 0x5f, 0x73, 0x8f, 0x27, 0xc7, 0x1f, 0x1f, 0xf6, 0x21, 0xfe, 0xfe, 0x26, 0x63, 0xfb, 0xf8, 0xaa, 0xca, 0x36, 0x3b, 0x3f, 0x27, 0x06, 0x54, 0x97, 0x7a, 0x3f, 0x5a, 0xb7, 0xc1, 0xb0, 0x69, 0x9e, 0x12, 0xf0, 0x52, 0x27, 0xe8, 0x5b, 0x91, 0x30, 0xbb, 0x57, 0x80, 0xfc, 0xd3, 0xdc, 0xca, 0xd6, 0x5d, 0x33, 0x21, 0xf7, 0xbf, 0xfd, 0x34, 0xaa, 0x29, 0x78, 0xdb, 0xae, 0x6c, 0xfe, 0x95, 0xdc, 0x10, 0xce, 0x35, 0x09, 0xa0, 0x0f, 0xd8, 0x2e, 0x49, 0x12, 0x1a, 0xc7, 0xa4, 0xd8, 0x8a, 0x78, 0xcf, 0xd4, 0x5b, 0xf6, 0xc2, 0xf1, 0x5c, 0x25, 0xe0, 0xd7, 0x2a, 0x7e, 0xcd, 0x6a, 0xa3, 0xb4, 0x80, 0x94, 0x9f, 0x97, 0x99, 0x45, 0xdb, 0x38, 0xf4, 0xb8, 0x36, 0x4e, 0x7e, 0xf7, 0x20, 0xd8, 0x47, 0xa1, 0x4f, 0x04, 0xd9, 0xeb, 0xb3, 0x50, 0xc9, 0xe5, 0xad, 0xef, 0x8b, 0xff, 0x7c, 0x6e, 0x8a, 0xcb, 0xf8, 0x97, 0x78, 0x04, 0x82, 0x96, 0xe3, 0xd0, 0x3b, 0x5a, 0x0a, 0x42, 0x74, 0x3e, 0xee, 0x23, 0x66, 0xe9, 0xac, 0xf2, 0x23, 0x72, 0x09, 0x29, 0xcd, 0xc8, 0x4f, 0xc2, 0x06, 0x52, 0x58, 0xfa, 0xa7, 0xd2, 0xe8, 0x55, 0xb5, 0x8f, 0x40, 0xe2, 0x91, 0xb3, 0xef, 0xc0, 0x6e, 0xf2, 0xec, 0xe1, 0x08, 0x6c, 0xe2, 0x0e, 0x94, 0xd5, 0xcb, 0x2b, 0xf2, 0xd3, 0xc0, 0xbd, 0x2a, 0xa7, 0x0f, 0xa9, 0x16, 0x10, 0x8f, 0x3e, 0x5c, 0x6c, 0x30, 0x76, 0xa0, 0x21, 0xd6, 0x79, 0xf7, 0x3b, 0x68, 0x63, 0x9e, 0x57, 0x23, 0x47, 0xec, 0xbf, 0x35, 0x74, 0x85, 0xd6, 0x87, 0xf7, 0xd1, 0xb7, 0xda, 0x61, 0xac, 0x19, 0x15, 0xca, 0x5f, 0x76, 0xdd, 0x15, 0xcf, 0x6c, 0x67, 0x76, 0xf5, 0x63, 0x8a, 0x32, 0x8e, 0x70, 0x19, 0xa6, 0x14, 0x79, 0x6f, 0x8b, 0xec, 0x9a, 0x4b, 0x78, 0xe1, 0xc8, 0xdf, 0xa8, 0xd1, 0xb4, 0x23, 0xfe, 0xa6, 0xf2, 0x6f, 0x46, 0x88, 0x5b, 0x49, 0xbe, 0x52, 0xb0, 0x7c, 0xd5, 0x42, 0x80, 0x6a, 0x32, 0xf4, 0x4b, 0xa2, 0xf8, 0x91, 0xe7, 0xb5, 0x49, 0x44, 0x23, 0x46, 0x09, 0xed, 0xab, 0x61, 0xe4, 0x1a, 0x2b, 0x0e, 0x92, 0x33, 0xb7, 0x25, 0x59, 0xf4, 0x6b, 0x63, 0xd4, 0x20, 0x4e, 0xbe, 0xf4, 0x74, 0x7c, 0xf6, 0x44, 0xda, 0x85, 0x6d, 0x71, 0xe0, 0x10, 0x38, 0x09, 0x68, 0xc4, 0x76, 0x83, 0xa1, 0x68, 0xe0, 0x80, 0x36, 0x48, 0xa2, 0x50, 0xc5, 0xdb, 0x6a, 0xb8, 0x92, 0xa4, 0xbe, 0xf2, 0x7d, 0x56, 0x92, 0xf6, 0x31, 0x3b, 0x1a, 0xf8, 0x9f, 0xd6, 0xdd, 0x32, 0xab, 0xc8, 0x0b, 0xe3, 0x24, 0xf0, 0x10, 0x98, 0xfa, 0xd6, 0x69, 0xaa, 0xab, 0x4a, 0xb6, 0x08, 0xff, 0x48, 0x11, 0x36, 0xf5, 0x1f, 0x9f, 0x96, 0xfd, 0xd2, 0x64, 0xe7, 0x67, 0xbf, 0x5c, 0x0b, 0x1c, 0x7e, 0xc7, 0x0d, 0x8c, 0x0c, 0xc4, 0x62, 0xe7, 0x29, 0x21, 0x6f, 0x90, 0xfe, 0x72, 0x4c, 0xcf, 0x03, 0x60, 0xc8, 0xc6, 0x20, 0x44, 0xad, 0xa6, 0x13, 0xf5, 0x45, 0x22, 0x11, 0xdd, 0x1c, 0x24, 0xb0, 0x53, 0x08, 0xbf, 0x04, 0x25, 0x67, 0x66, 0x08, 0x73, 0xa8, 0x5b, 0x40, 0xc4, 0x0d, 0x69, 0x9d, 0x53, 0xae, 0xd6, 0xa1, 0xaa, 0xc2, 0x94, 0xc3, 0x72, 0x1a, 0xb7, 0x15, 0x8a, 0xee, 0x2c, 0x24, 0x56, 0xdc, 0xa7, 0x20, 0x5a, 0x2e, 0xdd, 0x3d, 0x07, 0x5c, 0xf4, 0x58, 0xd4, 0xd1, 0x37, 0xde, 0x91, 0xf2, 0x0f, 0xea, 0xf8, 0x5d, 0x2e, 0xad, 0x86, 0x6e, 0x0e, 0x13, 0x89, 0x08, 0x9a, 0xa3, 0x79, 0x92, 0x2b, 0xa8, 0x8b, 0x3f, 0xb5, 0x8e, 0x84, 0x93, 0x43, 0x8e, 0xcb, 0x23, 0xa0, 0x8e, 0xc3, 0x9c, 0x57, 0x42, 0x57, 0x06, 0xde, 0x98, 0xd7, 0x4a, 0x0f, 0x53, 0x02, 0xf2, 0xd7, 0xf5, 0x64, 0x31, 0x32, 0xe3, 0xe2, 0x23, 0x57, 0xc4, 0x93, 0x55, 0x2f, 0x2a, 0xd1, 0x88, 0x0c, 0x74, 0x90, 0xb2, 0x98, 0xf3, 0xef, 0x46, 0x0c, 0x4b, 0x0d, 0xb5, 0xa2, 0x1c, 0x1e, 0x35, 0x4c, 0xe2, 0xbe, 0xc1, 0xa6, 0x1a, 0x84, 0x61, 0x29, 0xa7, 0xdb, 0xab, 0xa2, 0x73, 0x0d, 0x8a, 0xe3, 0x59, 0xa1, 0x3e, 0xb9, 0x43, 0xe7, 0xa4, 0x1e, 0x8f, 0xd1, 0xb8, 0xaf, 0xb8, 0x04, 0x58, 0x60, 0x32, 0x2f, 0x4b, 0x6e, 0x95, 0x9c, 0x81, 0x95, 0xfe, 0x05, 0x9c, 0x84, 0xb2, 0xa8, 0xb0, 0x8e, 0x05, 0x9d, 0x47, 0xa2, 0x7b, 0x68, 0xa9, 0x7d, 0x2c, 0xcb, 0x5a, 0x1e, 0x6d, 0xde, 0xe3, 0x7a, 0xac, 0x61, 0xd5, 0x72, 0x9c, 0x50, 0x0c, 0x02, 0x93, 0xb8, 0x31, 0xbb, 0x30, 0xca, 0x82, 0x73, 0x40, 0x2d, 0xd6, 0x3b, 0xe2, 0x99, 0xdb, 0x91, 0xea, 0xa2, 0xa3, 0xd7, 0x84, 0xd1, 0x5f, 0x04, 0x1a, 0xf9, 0x6a, 0x9a, 0x77, 0xc8, 0x89, 0xd8, 0x2c, 0x9d, 0x71, 0x30, 0x32, 0x99, 0x89, 0xfb, 0xd2, 0xf9, 0xf2, 0x6c, 0xc2, 0xa3, 0xc5, 0xc2, 0x91, 0xfe, 0x9b, 0xc2, 0x44, 0x07, 0x53, 0x65, 0x42, 0xa2, 0x0f, 0xce, 0x6d, 0x2d, 0x80, 0x7e, 0x92, 0x5b, 0x64, 0xcb, 0x03, 0x40, 0x4c, 0x8e, 0x82, 0xa8, 0xa3, 0x1d, 0x61, 0xad, 0xec, 0x79, 0xe8, 0x89, 0x4b, 0xc8, 0xf7, 0xa8, 0x47, 0x05, 0xec, 0x02, 0xce, 0xf6, 0xc7, 0xa7, 0x79, 0x5e, 0x8d, 0x9b, 0x12, 0x75, 0xea, 0xe5, 0x54, 0x95, 0x19, 0xe3, 0xf1, 0x36, 0x09, 0xe0, 0xda, 0x1c, 0xb8, 0xe8, 0xba, 0xcf, 0xe3, 0xdb, 0xc3, 0x4c, 0xe2, 0xc1, 0xae, 0xfa, 0xce, 0x5d, 0xfd, 0xdf, 0xe4, 0x05, 0x84, 0x14, 0x2e, 0xb1, 0x27, 0x76, 0x60, 0x51, 0xe5, 0x9f, 0x00, 0x64, 0x16, 0x15, 0xc9, 0xc6, 0xf0, 0xc0, 0x52, 0xc9, 0x50, 0xa2, 0xeb, 0x88, 0xb8, 0xc2, 0xc7, 0x78, 0x93, 0x69, 0x61, 0x40, 0xc1, 0x91, 0x18, 0xcb, 0x4f, 0x9b, 0x1c, 0x9b, 0x86, 0x40, 0x8e, 0x60, 0x28, 0xca, 0xe3, 0xc9, 0xf6, 0x84, 0x8a, 0x9a, 0x75, 0x6f, 0xce, 0xff, 0xf2, 0x36, 0xfd, 0x1f, 0xc4, 0x64, 0xca, 0xf5, 0xd1, 0xd5, 0xf0, 0x5b, 0x54, 0x6a, 0x18, 0x68, 0xdd, 0x01, 0xfd, 0xfc, 0x99, 0xa5, 0xce, 0x99, 0xd3, 0x01, 0xd4, 0x75, 0xbb, 0x1b, 0x54, 0xcd, 0x66, 0x3f, 0xb7, 0x7b, 0x17, 0x38, 0xe8, 0xcb, 0xbd, 0xc7, 0xfe, 0x8b, 0xbc, 0x4d, 0x1b, 0x61, 0xf0, 0xcb, 0x93, 0x62, 0xef, 0x0c, 0x51, 0xdf, 0x8f, 0x21, 0x77, 0x82, 0xa9, 0x0e, 0x45, 0x9a, 0x1c, 0xc3, 0x3c, 0xb4, 0x14, 0x4e, 0x83, 0x6b, 0x8c, 0x4e, 0x89, 0x81, 0x11, 0xab, 0xec, 0x2e, 0xc9, 0x84, 0x9a, 0xb7, 0xb5, 0x69, 0x36, 0x43, 0x33, 0xcb, 0xbd, 0xeb, 0xc7, 0xb0, 0x69, 0x10, 0x1a, 0xab, 0xd5, 0xf1, 0x43, 0x0c, 0x63, 0x7c, 0x46, 0x54, 0xdb, 0x65, 0xda, 0xec, 0x54, 0x76, 0x70, 0x16, 0x58, 0x26, 0x70, 0x23, 0x43, 0x6c, 0xc6, 0xe7, 0xec, 0xd5, 0x9d, 0x6a, 0x87, 0xd5, 0x6a, 0xe0, 0xca, 0x5a, 0x2d, 0xdb, 0x4f, 0xa7, 0xf4, 0xc0, 0x3a, 0x60, 0xa0, 0x77, 0x1b, 0xe1, 0xeb, 0x67, 0x16, 0xd4, 0xaa, 0xa2, 0x41, 0x03, 0x50, 0x5c, 0x4d, 0x6a, 0xb4, 0xa2, 0x69, 0x91, 0x14, 0x49, 0x63, 0x19, 0x59, 0x24, 0x10, 0x94, 0x9c, 0x7a, 0xef, 0x9a, 0xea, 0xb6, 0x09, 0x19, 0x44, 0x61, 0x1b, 0xec, 0xea, 0x4e, 0xf7, 0xaf, 0xda, 0x14, 0x28, 0xd2, 0x93, 0xc1, 0xd5, 0xed, 0x1e, 0xcd, 0xe8, 0x53, 0x4f, 0x4d, 0x6e, 0xea, 0x49, 0x69, 0x41, 0x3a, 0x40, 0x10, 0xe5, 0xc3, 0x83, 0xeb, 0xb1, 0x94, 0xb9, 0x8f, 0x2f, 0x19, 0x6a, 0xf6, 0xc5, 0x35, 0xc2, 0x30, 0x94, 0x90, 0x92, 0x56, 0xa0, 0x33, 0x98, 0xc0, 0x31, 0x52, 0x00, 0x77, 0x7a, 0x68, 0x2a, 0xed, 0x79, 0x8a, 0xae, 0xec, 0x1e, 0xf4, 0x9e, 0xcd, 0xaf, 0xe9, 0x0b, 0xea, 0x6b, 0xba, 0xca, 0x56, 0x6e, 0x24, 0x77, 0xcb, 0xd4, 0xde, 0xbb, 0xe3, 0x21, 0x73, 0xcb, 0x8b, 0xe1, 0x4e, 0x31, 0xb5, 0x8b, 0x13, 0xcf, 0x4e, 0xab, 0x36, 0x21, 0x70, 0x40, 0xc6, 0xc2, 0xd8, 0x63, 0x89, 0x32, 0x9a, 0x2a, 0x4e, 0xd6, 0x13, 0xcc, 0x7f, 0x40, 0x20, 0x06, 0xf6, 0xb1, 0x8d, 0xbd, 0x11, 0xdc, 0xd1, 0xe4, 0x09, 0xed, 0xf8, 0xa0, 0x7f, 0xca, 0xe0, 0xaa, 0x58, 0x99, 0xa8, 0xf6, 0xcb, 0x82, 0x66, 0x92, 0xb8, 0xb6, 0x18, 0xd0, 0x3c, 0xb0, 0xde, 0xa7, 0x82, 0xbb, 0x66, 0x57, 0xdc, 0xb4, 0xa7, 0x4c, 0x12, 0x11, 0xd2, 0x45, 0xfa, 0x22, 0x85, 0xb5, 0x48, 0x97, 0x42, 0x69, 0xa8, 0x43, 0x21, 0x6c, 0x0a, 0x1f, 0xc1, 0x28, 0x3d, 0x92, 0x84, 0xcd, 0xc0, 0xef, 0xfc, 0xf7, 0xd5, 0x40, 0xa0, 0x8b, 0xd6, 0x42, 0xc4, 0xe1, 0xcc, 0xb0, 0xc8, 0x29, 0x3e, 0xc4, 0x8f, 0x07, 0x47, 0xfc, 0x32, 0x81, 0xeb, 0x1a, 0xf6, 0x1b, 0xab, 0x6e, 0x7c, 0x40, 0x57, 0x57, 0x38, 0xe4, 0x24, 0x08, 0x24, 0x68, 0xff, 0x88, 0xb6, 0xbe, 0x20, 0xfc, 0x0f, 0xcd, 0xe1, 0x29, 0x75, 0x17, 0xd1, 0x35, 0x03, 0x99, 0x04, 0xad, 0x9f, 0xf2, 0xae, 0xcd, 0x2d, 0xc8, 0xf0, 0xfb, 0x02, 0x68, 0xf2, 0x94, 0x9c, 0xac, 0x32, 0xeb, 0x90, 0x22, 0x1c, 0x8f, 0xc3, 0x6a, 0xda, 0xcd, 0xdd, 0xe0, 0x6d, 0x76, 0xfb, 0x7c, 0xfd, 0xe3, 0xa5, 0xf6, 0x6d, 0x35, 0xff, 0x2d, 0x33, 0xe1, 0x43, 0xc9, 0x67, 0x6d, 0x6e, 0x1f, 0x19, 0x74, 0x3a, 0x56, 0xe8, 0xf0, 0x4d, 0xc8, 0xd0, 0xb9, 0xb0, 0xab, 0x44, 0x48, 0x82, 0xf1, 0x7d, 0xc1, 0xee, 0x6c, 0x11, 0x31, 0x5a, 0x36, 0xc7, 0x13, 0xe1, 0x50, 0xaa, 0x1a, 0x04, 0x89, 0x5c, 0x2a, 0x9c, 0xa2, 0xad, 0xa7, 0x13, 0xaf, 0x6c, 0xf3, 0xd4, 0xc0, 0x7e, 0x32, 0x00, 0xc1, 0x2c, 0x51, 0x63, 0x9f, 0xc1, 0x46, 0xa6, 0xad, 0x55, 0x99, 0xc6, 0x45, 0xe4, 0x23, 0xc5, 0xb2, 0xa3, 0x16, 0x9f, 0x4d, 0x93, 0x3d, 0x7f, 0xe7, 0x56, 0x85, 0x33, 0x67, 0x42, 0xbd, 0xdd, 0xb4, 0xb4, 0x9a, 0xec, 0xd6, 0xa6, 0xfe, 0x4b, 0x58, 0x84, 0x79, 0xd8, 0xf0, 0x3c, 0x11, 0x18, 0x62, 0x95, 0x3e, 0x29, 0xa1, 0xc1, 0x39, 0xf8, 0x37, 0x35, 0x76, 0xb4, 0xe8, 0xb8, 0x6f, 0x82, 0x92, 0xba, 0xa4, 0x72, 0x58, 0xe8, 0xe0, 0xb1, 0xff, 0xfd, 0xbd, 0x01, 0x98, 0xdb, 0x6a, 0x67, 0x60, 0xda, 0xac, 0x23, 0xe4, 0x60, 0x23, 0xe5, 0x69, 0xb2, 0xcf, 0x3e, 0x8a, 0x09, 0xd3, 0x55, 0x23, 0xe9, 0x78, 0xdb, 0x6e, 0xae, 0x74, 0x41, 0x6c, 0x68, 0x6d, 0x28, 0x87, 0xe8, 0xb9, 0x19, 0x75, 0x1b, 0x68, 0x76, 0x5f, 0x97, 0x84, 0xb0, 0x43, 0x74, 0x97, 0xbb, 0x97, 0x5d, 0x6e, 0xbf, 0x2f, 0xe6, 0x1d, 0x11, 0x60, 0x20, 0x43, 0x61, 0x66, 0x6c, 0x8f, 0x35, 0x03, 0x8c, 0x83, 0x96, 0x69, 0x00, 0x78, 0x08, 0x5a, 0x8f, 0xe3, 0xc0, 0x8e, 0x24, 0xd6, 0x12, 0x55, 0xdb, 0xca, 0x29, 0x7d, 0x5c, 0x9b, 0xfa, 0x76, 0x68, 0xd4, 0x7a, 0xb4, 0xb1, 0x2d, 0x0f, 0x55, 0xef, 0x52, 0x45, 0x04, 0x30, 0xe6, 0xc3, 0x1d, 0x6f, 0xc8, 0x7d, 0x11, 0x69, 0x95, 0x2b, 0x0d, 0xac, 0x6e, 0xf9, 0xd6, 0xf1, 0xfb, 0x80, 0xf8, 0xab, 0xaf, 0xf5, 0x1f, 0xe0, 0x4e, 0xa0, 0xc5, 0x38, 0xad, 0x90, 0x0d, 0x54, 0xba, 0x8e, 0xef, 0x60, 0xbb, 0x4f, 0x96, 0xec, 0xdb, 0xee, 0x06, 0xf7, 0xe2, 0x99, 0x02, 0x4d, 0x44, 0x8a, 0x2d, 0x14, 0x5d, 0x38, 0x6f, 0xa1, 0xfb, 0xcf, 0x9a, 0x90, 0x1d, 0xde, 0x4e, 0x13, 0xfa, 0x50, 0x1a, 0x8a, 0x45, 0x9e, 0xe3, 0x54, 0xb0, 0x43, 0x8a, 0xe5, 0xaf, 0x6f, 0xc9, 0x19, 0x7e, 0xff, 0x5e, 0xc8, 0x65, 0xad, 0x6c, 0x9b, 0x3b, 0x84, 0x1e, 0x1e, 0x29, 0x98, 0x8d, 0x16, 0xb0, 0xf3, 0xe4, 0x14, 0xed, 0xd2, 0xc2, 0x4a, 0x1c, 0x12, 0xdf, 0x9e, 0x5c, 0xe5, 0xf3, 0xfd, 0xb1, 0xc9, 0xd3, 0xf2, 0x4f, 0xbb, 0xdd, 0x77, 0x16, 0xa7, 0x97, 0x0b, 0x59, 0x24, 0x93, 0x04, 0xe3, 0x5e, 0x96, 0x27, 0x3c, 0x53, 0xf8, 0x76, 0x28, 0x43, 0x4e, 0x49, 0x71, 0x61, 0x47, 0xa0, 0xe6, 0xcf, 0xd4, 0xb8, 0xa4, 0xc9, 0x8c, 0xdc, 0x94, 0x21, 0x4e, 0x7e, 0x35, 0xeb, 0x28, 0x86, 0x9c, 0x79, 0x77, 0xea, 0xb9, 0x8a, 0x50, 0x7f, 0xdb, 0xbe, 0x1f, 0x0f, 0x76, 0x4d, 0x8e, 0xab, 0x25, 0xf9, 0xa9, 0x42, 0xeb, 0x41, 0x3f, 0x73, 0xbe, 0xd8, 0x8b, 0xa0, 0x46, 0x55, 0x13, 0x44, 0xe2, 0x2c, 0xd1, 0x86, 0xec, 0xdd, 0x91, 0x0e, 0x3e, 0x6b, 0x9a, 0x17, 0xf4, 0x10, 0x90, 0xc5, 0x74, 0x2f, 0x99, 0xb9, 0xac, 0x8a, 0xbf, 0xe4, 0x9b, 0xb5, 0x96, 0x98, 0x13, 0xcb, 0x1e, 0xe5, 0xbd, 0x5f, 0xea, 0x22, 0x5d, 0xb5, 0x82, 0xca, 0x57, 0x32, 0x07, 0x8a, 0x73, 0x12, 0x15, 0x97, 0xdd, 0x59, 0xed, 0x45, 0x70, 0x0c, 0xd4, 0xd6, 0x33, 0xa0, 0xb6, 0x8f, 0x24, 0xb3, 0x0f, 0x12, 0x35, 0xfa, 0x0c, 0xe7, 0x95, 0x7b, 0xed, 0x5c, 0x30, 0xfc, 0xad, 0x8f, 0x79, 0xbb, 0xe5, 0xc9, 0x67, 0x5f, 0xee, 0x0d, 0xbd, 0x2f, 0x45, 0xf1, 0x8f, 0x82, 0x34, 0xad, 0x02, 0x76, 0xaf, 0x72, 0x53, 0xe5, 0x7d, 0xfd, 0x1b, 0x95, 0x98, 0x6b, 0xd1, 0xaf, 0xd5, 0x4f, 0x90, 0x73, 0xc7, 0x02, 0x1a, 0x29, 0xe1, 0x3a, 0x1e, 0x5b, 0xdc, 0xde, 0xb6, 0x41, 0x58, 0x19, 0x34, 0x7d, 0xc6, 0xae, 0x1e, 0x09, 0x85, 0x8b, 0x77, 0x6d, 0x4b, 0xa0, 0x40, 0x35, 0xc7, 0xf1, 0x3f, 0xa2, 0x85, 0xea, 0xff, 0xa0, 0x11, 0xf3, 0x18, 0xf8, 0x5f, 0x45, 0xb0, 0xc7, 0x6a, 0xfc, 0x42, 0x2f, 0x1c, 0x6d, 0x9f, 0x4c, 0x6e, 0xb9, 0x32, 0x69, 0xd0, 0xa3, 0x87, 0x74, 0xcb, 0x9e, 0x0f, 0xb0, 0xe5 ],
-const [ 0xa4, 0x89, 0xcc, 0x5f, 0x00, 0xc1, 0x83, 0x5d, 0xda, 0xf2, 0xf0, 0x58, 0x67, 0x10, 0x85, 0x07, 0x52, 0xab, 0xe6, 0x8d, 0x00, 0x1f, 0x4e, 0x4e, 0x18, 0x0b, 0x2f, 0x00, 0x43, 0x04, 0x18, 0x05, 0x30, 0x8a, 0xdc, 0xf8, 0xdc, 0x3a, 0xf1, 0x86, 0x10, 0x46, 0x16, 0x7f, 0x2b, 0x23, 0x38, 0x2c, 0x21, 0x81, 0x97, 0xe4, 0xc4, 0x80, 0x25, 0xda, 0x42, 0x21, 0x2e, 0x39, 0xef, 0xfa, 0x3e, 0x73, 0x45, 0x2f, 0x40, 0xd5, 0x29, 0x9d, 0xe3, 0x60, 0x70, 0x58, 0x42, 0xd4, 0xa2, 0x58, 0xc3, 0x0d, 0xfe, 0x6f, 0x3f, 0x92, 0xbe, 0x7e, 0x64, 0x6c, 0x9c, 0xe9, 0x58, 0x34, 0x94, 0x48, 0x9f, 0x70, 0xec, 0x60, 0x3f, 0x20, 0x72, 0x51, 0x22, 0x93, 0x05, 0x10, 0xbb, 0x7f, 0x56, 0x18, 0xed, 0x51, 0xf0, 0x5d, 0x28, 0xc2, 0x76, 0x82, 0xd5, 0xab, 0x2c, 0x4b, 0xf4, 0x1a, 0xb9, 0x55, 0x03, 0xa5, 0x2c, 0x05, 0x22, 0xfe, 0x3c, 0xbe, 0x76, 0xc8, 0xd4, 0x57, 0xcb, 0xa9, 0xcf, 0xcc, 0x7d, 0xa1, 0x00, 0x33, 0x98, 0x9a, 0x75, 0xf2, 0x3e, 0x40, 0xfc, 0x30, 0x49, 0x12, 0xe7, 0x89, 0x32, 0xb9, 0x0d, 0x06, 0x32, 0x99, 0x11, 0x4c, 0xa6, 0xa7, 0xe7, 0x13, 0xb8, 0x7a, 0x93, 0xda, 0x3c, 0xa4, 0x34, 0xd9, 0xd8, 0x42, 0x42, 0x38, 0x68, 0xd2, 0x14, 0x7e, 0xa0, 0x45, 0xa5, 0x4c, 0xf3, 0x55, 0x97, 0x4b, 0xb4, 0x19, 0x78, 0x63, 0x7c, 0xd7, 0x45, 0x2e, 0xcb, 0x19, 0x2c, 0xac, 0xf2, 0x03, 0x96, 0x38, 0x30, 0xe3, 0x65, 0xba, 0x1b, 0x0a, 0x7a, 0x1f, 0x41, 0xdb, 0x7b, 0x06, 0x10, 0x21, 0xd3, 0xbc, 0xf3, 0xa6, 0xfa, 0x6b, 0xbe, 0x01, 0xf6, 0x8e, 0x4c, 0xaf, 0x22, 0xa8, 0x66, 0x65, 0x2e, 0x36, 0xe7, 0xa5, 0x67, 0xe2, 0x1e, 0x90, 0x38, 0xf9, 0x74, 0xfb, 0xf1, 0x1f, 0x4f, 0xc4, 0xc8, 0x42, 0x36, 0x66, 0x1e, 0xcc, 0x35, 0xcc, 0x03, 0x1d, 0x83, 0x63, 0xfb, 0x38, 0x62, 0x73, 0x02, 0xbc, 0x47, 0xaf, 0xcf, 0x17, 0x3b, 0x0b, 0x56, 0xf6, 0x81, 0xcd, 0x90, 0xff, 0x79, 0xe7, 0x7e, 0xc3, 0xc4, 0x84, 0x6c, 0xee, 0xa9, 0xe1, 0x73, 0xc1, 0xb7, 0x5e, 0x41, 0xc3, 0xac, 0xd5, 0x1d, 0xb3, 0x96, 0x2a, 0x25, 0xc0, 0x38, 0x23, 0xda, 0xfd, 0xaf, 0x7a, 0xdf, 0x0f, 0x56, 0x31, 0xfe, 0x28, 0xe6, 0x26, 0x6c, 0x3a, 0xe2, 0xe7, 0x4e, 0x64, 0x32, 0xc7, 0x7b, 0xb1, 0x0d, 0x32, 0x84, 0x01, 0x1d, 0x3d, 0xf2, 0x47, 0xde, 0x81, 0xce, 0xf5, 0x48, 0x2a, 0x67, 0xb5, 0xad, 0x4b, 0x4f, 0x5a, 0xe4, 0x75, 0xa7, 0x16, 0xa7, 0x87, 0x9c, 0xed, 0x3a, 0xc7, 0x32, 0x69, 0x4d, 0x32, 0x41, 0x90, 0x24, 0x11, 0xbc, 0x13, 0xf5, 0xcd, 0x39, 0xc8, 0x92, 0x04, 0xae, 0x5a, 0x47, 0xdc, 0x79, 0x40, 0x06, 0x98, 0xa4, 0xeb, 0xc1, 0x69, 0x66, 0x44, 0x18, 0x86, 0xed, 0x55, 0x34, 0x7e, 0x5a, 0x46, 0xf3, 0xcd, 0x0e, 0x8c, 0x45, 0xae, 0x24, 0x5d, 0xd6, 0x31, 0x3e, 0x67, 0xed, 0x8d, 0x85, 0xc1, 0x94, 0xb7, 0xeb, 0x22, 0xf9, 0x34, 0xb4, 0x51, 0x14, 0x2b, 0x34, 0xdc, 0x8a, 0xbe, 0xda, 0x0d, 0xd1, 0x9a, 0x6d, 0x1a, 0x95, 0xcd, 0x96, 0x9c, 0x5b, 0xd9, 0x9f, 0x42, 0x65, 0x06, 0x7a, 0xc7, 0xd5, 0xfc, 0x05, 0x21, 0x15, 0x90, 0x8c, 0xfc, 0x75, 0xdf, 0x8f, 0x66, 0x16, 0x99, 0xc6, 0xcc, 0x08, 0xa0, 0x63, 0x25, 0xaf, 0xd2, 0x97, 0x6d, 0x6b, 0x22, 0x57, 0x55, 0x77, 0xee, 0x60, 0x39, 0x12, 0x8d, 0x79, 0x52, 0xdd, 0x27, 0xf8, 0x2d, 0x85, 0xc9, 0x87, 0x5b, 0xa1, 0xb8, 0x28, 0x6b, 0xde, 0x06, 0x77, 0x15, 0x59, 0x64, 0x2f, 0xb8, 0x4c, 0x37, 0xf0, 0x07, 0xed, 0xee, 0x40, 0xfe, 0x93, 0x92, 0xcf, 0x1c, 0x1b, 0x9e, 0xff, 0xcc, 0x8a, 0x12, 0xa3, 0x24, 0xf3, 0xc3, 0x07, 0xd1, 0x9c, 0xf5, 0x32, 0x52, 0x5c, 0x2b, 0x67, 0x65, 0x47, 0x3e, 0xf2, 0xbf, 0x8e, 0xad, 0x21, 0x00, 0xa0, 0x34, 0x90, 0xe6, 0x95, 0xa0, 0xa9, 0xc1, 0xcd, 0xe1, 0x6c, 0x27, 0xd4, 0x61, 0x6c, 0xe8, 0x89, 0x94, 0x1a, 0x44, 0x80, 0xd1, 0x46, 0x5c, 0xa4, 0x60, 0xe3, 0xe7, 0x21, 0xd4, 0x0b, 0x26, 0x81, 0x9a, 0x43, 0x1a, 0x14, 0xd3, 0xff, 0xf4, 0x96, 0x5f, 0x69, 0xcd, 0x0c, 0x3a, 0x5e, 0x97, 0xef, 0x0c, 0xb9, 0x54, 0x8c, 0xfb, 0xd5, 0x86, 0xab, 0xc4, 0x4d, 0xe6, 0x6f, 0x0a, 0x06, 0x58, 0x7d, 0xee, 0x70, 0x1f, 0x60, 0xdf, 0x08, 0x4d, 0x2d, 0xb3, 0x22, 0x7e, 0x62, 0xf7, 0xe5, 0xc6, 0x14, 0x84, 0x97, 0xe8, 0x4a, 0x53, 0x1b, 0xc9, 0xa4, 0x93, 0xb7, 0x24, 0x40, 0xf8, 0x1b, 0x7e, 0xdd, 0x55, 0x9f, 0x5d, 0x41, 0x6d, 0xcd, 0xb5, 0xd9, 0x07, 0x1f, 0xa3, 0xa0, 0x40, 0x09, 0x5d, 0x41, 0x25, 0x3a, 0x6a, 0x80, 0x81, 0x20, 0x0e, 0xd6, 0xf4, 0xaa, 0x09, 0x5b, 0x45, 0x51, 0x81, 0xea, 0xf9, 0x59, 0x3c, 0x7f, 0x25, 0x54, 0x12, 0xe3, 0x80, 0xe9, 0xa2, 0x8c, 0xbc, 0xd3, 0x45, 0xbe, 0x17, 0x2c, 0x40, 0xf7, 0x2d, 0xec, 0x3e, 0x8a, 0x10, 0xad, 0xfd, 0x8a, 0x9a, 0xb1, 0x47, 0xe9, 0x02, 0x25, 0x24, 0xe1, 0xae, 0xa7, 0x4e, 0x93, 0x48, 0x07, 0xe5, 0xef, 0x14, 0x4a, 0x64, 0xd3, 0x81, 0xf5, 0xd4, 0x77, 0xfe, 0x88, 0x3f, 0x08, 0x0e, 0x48, 0x68, 0x93, 0x9f, 0x41, 0xb9, 0x25, 0x98, 0x8c, 0x7d, 0x31, 0xb1, 0xce, 0x4f, 0x31, 0x87, 0x01, 0xd2, 0x90, 0xf0, 0x77, 0xa3, 0xc8, 0x8b, 0x1b, 0x8c, 0xc8, 0x9c, 0xfb, 0xfb, 0x98, 0x17, 0x03, 0xb2, 0x3f, 0xfb, 0x0b, 0xbf, 0xe5, 0xe1, 0x15, 0xaf, 0x35, 0xd5, 0xcf, 0xff, 0x05, 0x64, 0x60, 0xd3, 0x39, 0xf6, 0x60, 0xea, 0xe4, 0x5f, 0x28, 0xd2, 0xb1, 0xb0, 0x4d, 0x58, 0x82, 0x53, 0x67, 0x43, 0x56, 0x57, 0x17, 0x42, 0x70, 0x08, 0x48, 0x22, 0xb6, 0xc3, 0xb4, 0x44, 0x57, 0x08, 0xaa, 0x4f, 0xb0, 0xd1, 0x0f, 0x22, 0x71, 0x22, 0xa4, 0x0d, 0xfb, 0xe2, 0x86, 0x40, 0x0d, 0xe9, 0xfb, 0x83, 0xa0, 0x5a, 0x6b, 0x28, 0x0f, 0x33, 0xad, 0x3e, 0x7b, 0x22, 0x85, 0x08, 0x6e, 0x9b, 0x6a, 0xae, 0xbe, 0x27, 0x8c, 0x31, 0xb5, 0xff, 0x15, 0xa4, 0x6e, 0xd9, 0xaf, 0x9a, 0x82, 0x02, 0x47, 0xdb, 0xe5, 0xad, 0x11, 0x5b, 0x0a, 0x8b, 0xcd, 0x6c, 0x4e, 0x9b, 0x48, 0x32, 0x93, 0x44, 0x25, 0x57, 0x2b, 0xa1, 0xdd, 0x01, 0xf9, 0x1c, 0x05, 0x01, 0xd2, 0x3e, 0xd0, 0x4e, 0x29, 0xc5, 0xd4, 0xb1, 0xec, 0xf7, 0x11, 0xc1, 0xa9, 0x37, 0x2f, 0x12, 0xf5, 0xd6, 0x07, 0xaa, 0x0e, 0x2b, 0x65, 0xb4, 0xbf, 0xe6, 0x0c, 0x79, 0x84, 0xa1, 0xfb, 0x8b, 0xef, 0xb8, 0xef, 0x43, 0x4a, 0x5b, 0x29, 0x6e, 0x7e, 0xe1, 0x71, 0x44, 0x34, 0x5f, 0x5b, 0x9a, 0x39, 0x7a, 0xc9, 0x58, 0x27, 0x79, 0xb1, 0x2c, 0x42, 0x9f, 0x21, 0x80, 0xa0, 0xb7, 0x80, 0xaa, 0x8d, 0xf0, 0x16, 0x63, 0x2d, 0xeb, 0xcf, 0x7b, 0x63, 0x13, 0x3b, 0xcb, 0xf2, 0x2d, 0xda, 0x6a, 0xe2, 0x2f, 0x97, 0x24, 0x26, 0x56, 0x92, 0x27, 0x7b, 0x73, 0x22, 0x00, 0x93, 0x86, 0x1b, 0xc6, 0x73, 0x8d, 0x4c, 0x95, 0x1a, 0x9e, 0x4c, 0x3e, 0x63, 0x34, 0x77, 0x3d, 0x2c, 0xc7, 0x33, 0xec, 0xb8, 0x9f, 0x78, 0xf6, 0x52, 0xe9, 0x8f, 0x0d, 0x33, 0x0b, 0x19, 0xe0, 0xa6, 0x35, 0x54, 0x47, 0x6a, 0x38, 0x9a, 0xc1, 0x58, 0x9c, 0x2a, 0x21, 0x45, 0xec, 0x2b, 0x84, 0x2a, 0x55, 0xee, 0x86, 0x83, 0x70, 0x74, 0xb6, 0xf4, 0x5b, 0x30, 0x47, 0x32, 0x0e, 0x0d, 0x08, 0x21, 0xec, 0xb3, 0x96, 0x3a, 0x99, 0x06, 0xcf, 0x30, 0x0c, 0xf0, 0x8b, 0xd3, 0xe5, 0x61, 0x87, 0x34, 0x00, 0x94, 0xa2, 0x0a, 0x4a, 0x93, 0x4c, 0x54, 0xd3, 0xfd, 0x3b, 0x40, 0x25, 0x07, 0x5f, 0x4c, 0xd5, 0xc1, 0x19, 0xab, 0x57, 0x9b, 0xa8, 0xea, 0x16, 0x27, 0xe4, 0xd3, 0xc4, 0x20, 0x2e, 0x92, 0xef, 0xac, 0xa7, 0x16, 0xd6, 0xde, 0xa0, 0xba, 0x7a, 0x7f, 0x52, 0x25, 0xf8, 0x0e, 0xcf, 0x6e, 0x15, 0x05, 0x39, 0x84, 0x1b, 0x5e, 0x32, 0xce, 0xe4, 0x56, 0x93, 0x0e, 0x34, 0x71, 0x61, 0x8b, 0x4c, 0xbe, 0xfd, 0x6f, 0xbb, 0x5c, 0x9a, 0x6e, 0x78, 0x3d, 0xf4, 0xa8, 0x2e, 0x2a, 0x40, 0xd1, 0xd7, 0x07, 0x5e, 0x8f, 0x8c, 0x59, 0x56, 0x23, 0x9b, 0x05, 0x02, 0x4c, 0xdb, 0x5a, 0x08, 0x68, 0x3c, 0x52, 0x0c, 0xdd, 0xa2, 0x15, 0x23, 0xb7, 0xf4, 0xbf, 0x8a, 0x93, 0x6f, 0x63, 0x98, 0xbb, 0x41, 0x50, 0xf1, 0x92, 0x53, 0x93, 0xfd, 0x33, 0x66, 0xbd, 0x98, 0x55, 0x61, 0xe6, 0x0b, 0x72, 0xe9, 0xf1, 0x3b, 0x28, 0x33, 0x12, 0x21, 0xdf, 0x16, 0x8e, 0x7a, 0xac, 0x65, 0xc2, 0xc0, 0x75, 0x7b, 0x67, 0x58, 0x56, 0x17, 0x14, 0x0d, 0x44, 0x6b, 0x04, 0xbd, 0xf0, 0x6f, 0x1a, 0x52, 0xee, 0x7b, 0x22, 0xf4, 0x17, 0x15, 0x5a, 0x7e, 0x2c, 0x08, 0x31, 0x2e, 0xbc, 0xb6, 0x4e, 0xa0, 0x47, 0xae, 0xd4, 0xfd, 0xa3, 0x81, 0xe5, 0x70, 0x9f, 0xd2, 0x65, 0xd9, 0xe7, 0xad, 0x00, 0xc6, 0x27, 0x1a, 0x6e, 0x9f, 0x73, 0xf1, 0xf5, 0x20, 0xe7, 0xef, 0x30, 0x0c, 0x8a, 0x0a, 0x10, 0x20, 0x78, 0x02, 0x20, 0x46, 0x41, 0x39, 0x0d, 0x0c, 0x8c, 0xc4, 0x65, 0x54, 0x00, 0xc2, 0x9f, 0x4d, 0x64, 0xec, 0x5c, 0xa2, 0x04, 0x6e, 0xec, 0xf1, 0x57, 0xf6, 0x14, 0x7e, 0xe0, 0x0a, 0x0e, 0x29, 0x52, 0x9e, 0xd2, 0x9d, 0xf7, 0xe6, 0x94, 0xcb, 0x52, 0x69, 0x8e, 0x97, 0x04, 0x57, 0xff, 0xd0, 0xec, 0x1c, 0x74, 0x66, 0x92, 0x35, 0x46, 0xd7, 0xc6, 0x42, 0x64, 0xeb, 0x84, 0x5d, 0x52, 0xa1, 0x1b, 0xab, 0x72, 0x69, 0x8e, 0x30, 0x83, 0x93, 0x3b, 0xe8, 0x67, 0x08, 0xba, 0x13, 0x29, 0x38, 0x08, 0xd0, 0x3e, 0x53, 0xe5, 0xed, 0x0b, 0xbc, 0x7a, 0xfe, 0xa8, 0xbb, 0x3f, 0xac, 0xe4, 0x72, 0x1c, 0x50, 0x89, 0x12, 0xcf, 0xc1, 0xe1, 0x4e, 0x8d, 0x69, 0x78, 0x10, 0xec, 0x9f, 0x24, 0x6b, 0x00, 0x31, 0x43, 0xd2, 0xc4, 0x3f, 0x44, 0x87, 0xbc, 0x50, 0x69, 0x55, 0xd9, 0x9f, 0xca, 0x82, 0x9d, 0xb6, 0x9e, 0x00, 0x7f, 0x3e, 0xb6, 0xe3, 0x91, 0x16, 0x4a, 0x18, 0x60, 0xa2, 0xf8, 0x53, 0x1c, 0x66, 0x0a, 0x49, 0xf9, 0xd3, 0xf8, 0x20, 0xd4, 0x60, 0x2d, 0x23, 0x1a, 0xdd, 0x0e, 0xbb, 0xe6, 0x04, 0x39, 0x9a, 0x69, 0x52, 0x0a, 0x3a, 0x8f, 0x15, 0x64, 0x86, 0xdf, 0xc5, 0xae, 0xd7, 0xa4, 0x97, 0x1b, 0x21, 0x4a, 0x50, 0x2f, 0x6f, 0x0a, 0x57, 0x7f, 0x8c, 0xca, 0x0f, 0xb8, 0x03, 0x3e, 0x63, 0xe2, 0x4a, 0x54, 0xa3, 0xe6, 0x3b, 0xcf, 0x8e, 0x4e, 0xc3, 0x31, 0xb0, 0x4d, 0xde, 0xdf, 0xee, 0xff, 0xc3, 0x80, 0x5f, 0xf1, 0x5b, 0xa6, 0x5d, 0xe4, 0xf8, 0xb0, 0xdc, 0xce, 0x44, 0xef, 0xfb, 0x22, 0x78, 0x07, 0xd9, 0x51, 0xce, 0x98, 0xaa, 0x91, 0x38, 0x1e, 0x0a, 0xdd, 0x52, 0x16, 0x90, 0x3d, 0x95, 0x63, 0xa7, 0x47, 0xce, 0xef, 0x99, 0xe6, 0xcf, 0x95, 0xed, 0x5a, 0x65, 0x3f, 0xf3, 0x80, 0x8a, 0x4b, 0x9d, 0x54, 0xdb, 0x34, 0x90, 0xb4, 0x4c, 0x6e, 0x7b, 0x67, 0x1a, 0x91, 0xa8, 0x5d, 0x01, 0xba, 0xd1, 0x38, 0xb0, 0x2e, 0x34, 0x0c, 0x7a, 0x41, 0xe9, 0x63, 0x4e, 0x77, 0x74, 0x85, 0xe9, 0xe8, 0x97, 0xf6, 0x4a, 0xe9, 0x6a, 0x3f, 0x66, 0xe8, 0xad, 0xf1, 0x1e, 0x98, 0x5c, 0xe8, 0x6e, 0x4f, 0x84, 0xcd, 0xe7, 0xac, 0x56, 0xde, 0x5f, 0x7c, 0x79, 0xf2, 0xe7, 0xde, 0xa5, 0xb7, 0xfd, 0xa6, 0x6e, 0x3f, 0x03, 0x00, 0x5d, 0xbb, 0xf0, 0x56, 0x45, 0x86, 0x46, 0x73, 0xd4, 0x65, 0x44, 0xe8, 0x69, 0x0d, 0x5c, 0xae, 0x25, 0xe5, 0xe7, 0x0e, 0x45, 0x0e, 0x18, 0xbe, 0xaf, 0xa1, 0x2e, 0x4d, 0xca, 0x37, 0xee, 0xc0, 0x93, 0xaf, 0x51, 0x7e, 0xee, 0x2b, 0x7a, 0x69, 0x39, 0x5c, 0xea, 0x4e, 0x27, 0x00, 0xf7, 0x7f, 0xcc, 0xa8, 0x7a, 0xbe, 0xf4, 0xbf, 0xc9, 0x5d, 0xb9, 0xc8, 0xe5, 0xa4, 0x55, 0xe7, 0xf4, 0x73, 0x34, 0xa3, 0xf1, 0x28, 0x4e, 0xea, 0xa2, 0xc3, 0xb3, 0x55, 0xca, 0x49, 0x67, 0xae, 0xa1, 0x66, 0x71, 0xb0, 0x81, 0x55, 0x2f, 0x0d, 0xe2, 0x05, 0xec, 0xb6, 0x88, 0x74, 0xb4, 0x56, 0xfb, 0x5f, 0x67, 0x1f, 0x38, 0x1e, 0x0d, 0xca, 0xa6, 0xca, 0x69, 0xd9, 0x4b, 0xa0, 0xd1, 0x20, 0x40, 0xaa, 0x3d, 0x83, 0x62, 0x9c, 0x9d, 0x01, 0x4b, 0xfc, 0x70, 0xf2, 0x81, 0x85, 0x92, 0x8c, 0xec, 0xce, 0x55, 0xac, 0x8e, 0x27, 0xd4, 0xd4, 0x6e, 0xc3, 0x84, 0x6f, 0xd5, 0x1d, 0x0c, 0x5d, 0xbd, 0x94, 0x57, 0xab, 0x87, 0x58, 0xe7, 0xa2, 0xec, 0x8a, 0x6c, 0x04, 0x36, 0x9f, 0x95, 0x92, 0xb0, 0x06, 0x26, 0xd1, 0x5b, 0x0a, 0x4b, 0x0e, 0xe2, 0xf9, 0x2b, 0xa0, 0xd0, 0x86, 0xc1, 0x6d, 0x01, 0x6c, 0xe7, 0xb0, 0x56, 0x54, 0xb4, 0xf9, 0xad, 0xf9, 0x08, 0x75, 0x11, 0x8a, 0x65, 0x6f, 0x2d, 0x50, 0x01, 0x17, 0x07, 0x90, 0x19, 0x82, 0xeb, 0xb3, 0x87, 0xf3, 0xa4, 0xa4, 0x97, 0x59, 0xf3, 0x7a, 0x17, 0x18, 0x39, 0x57, 0xad, 0x0c, 0x77, 0x8f, 0x6e, 0xcb, 0x78, 0x0d, 0xab, 0x2b, 0x4d, 0xf3, 0x0e, 0x05, 0xfa, 0x81, 0xe6, 0x38, 0x6f, 0x38, 0xc0, 0xf0, 0xba, 0x3f, 0x37, 0x28, 0x7a, 0x05, 0x0d, 0x6d, 0x97, 0x28, 0x7a, 0xe5, 0x30, 0x96, 0xc3, 0x91, 0xd5, 0xf2, 0x0f, 0xcf, 0xf7, 0x39, 0x77, 0x23, 0x9c, 0xa5, 0x5c, 0x36, 0x57, 0xd1, 0xfd, 0x1f, 0x78, 0x1f, 0x48, 0xe2, 0x80, 0x57, 0xf1, 0x36, 0xd8, 0x90, 0xc2, 0x8c, 0xc2, 0x54, 0x32, 0x4c, 0x8f, 0xff, 0x38, 0x62, 0x13, 0x68, 0x61, 0xf9, 0x56, 0xc3, 0x21, 0x86, 0x8c, 0xc6, 0x66, 0x09, 0x47, 0x0b, 0x73, 0x90, 0xec, 0xb6, 0xec, 0xfc, 0x63, 0x57, 0x2d, 0x07, 0x13, 0x12, 0xe0, 0x86, 0x0e, 0xfd, 0xcf, 0xec, 0x88, 0xc9, 0xf6, 0x10, 0x8e, 0xa5, 0xdd, 0x30, 0xf5, 0x5f, 0x25, 0x35, 0x90, 0xcc, 0x60, 0x38, 0xa6, 0x6b, 0x26, 0x46, 0xa2, 0x45, 0x65, 0x60, 0x0d, 0x17, 0xf8, 0xc6, 0xba, 0xb3, 0x7b, 0x76, 0x40, 0xa4, 0x5e, 0xef, 0xad, 0x11, 0x39, 0x3a, 0x79, 0xe4, 0x5f, 0x2b, 0xb9, 0x2a, 0xb6, 0xe5, 0x95, 0xbd, 0xc6, 0x9c, 0xfc, 0x21, 0x0f, 0x9f, 0x97, 0xad, 0xa0, 0x95, 0xfb, 0xeb, 0xe5, 0x06, 0x22, 0x41, 0xc1, 0x1e, 0x1c, 0xd0, 0xdc, 0xae, 0x02, 0x9c, 0x3f, 0x74, 0x2c, 0xed, 0x1e, 0x9c, 0xa3, 0xf6, 0xf4, 0x86, 0xd9, 0xb5, 0xd6, 0xca, 0x98, 0x1a, 0x00, 0x7a, 0x39, 0x6b, 0xb5, 0xa7, 0x16, 0xe7, 0x46, 0x26, 0x42, 0xaa, 0x70, 0x93, 0x77, 0xd0, 0xea, 0x97, 0x4f, 0xdd, 0x3f, 0x67, 0xb7, 0x5d, 0xda, 0x8d, 0xa1, 0xc7, 0x5f, 0xeb, 0xfa, 0xa7, 0x42, 0xfd, 0xdc, 0xfc, 0x92, 0x5e, 0x04, 0xdf, 0x15, 0x8e, 0x86, 0x66, 0x9a, 0xf2, 0xbf, 0xc8, 0x8b, 0x1c, 0x8c, 0xc2, 0xc2, 0x4d, 0xb9, 0x39, 0x9d, 0x38, 0xbd, 0x20, 0x55, 0x09, 0xa4, 0x9c, 0x8b, 0xa6, 0x4c, 0x66, 0x24, 0x35, 0xd4, 0x72, 0x57, 0xde, 0x52, 0xce, 0x04, 0xd2, 0xc4, 0xcc, 0x48, 0x8c, 0x4a, 0x63, 0x4e, 0x57, 0x92, 0xd3, 0x68, 0x10, 0x93, 0x88, 0x5e, 0x2d, 0x7e, 0x41, 0x06, 0xfe, 0xf1, 0x71, 0x14, 0x33, 0x6e, 0xe5, 0x34, 0x9f, 0x0d, 0xa8, 0x56, 0x3b, 0x6d, 0x24, 0x49, 0x6e, 0xf0, 0x89, 0x8c, 0x8b, 0x28, 0x73, 0x61, 0x9c, 0x8c, 0xc7, 0x22, 0x5e, 0x70, 0xdd, 0xd8, 0x8c, 0x34, 0xe5, 0x0a, 0x60, 0xbb, 0x83, 0xd3, 0x58, 0x1e, 0xbd, 0x37, 0x36, 0xa2, 0x17, 0xb7, 0x4a, 0xe8, 0xfc, 0x23, 0xf3, 0x64, 0x60, 0xb0, 0x64, 0x10, 0xa4, 0x4b, 0xa4, 0x62, 0xba, 0x2c, 0xd8, 0x7b, 0x89, 0xad, 0xc5, 0xa1, 0x93, 0x5d, 0x91, 0xef, 0xd5, 0x50, 0xc9, 0x4b, 0xee, 0xba, 0xa9, 0x99, 0x84, 0xbc, 0x97, 0x2e, 0xe4, 0x7e, 0xf0, 0x88, 0xe8, 0x7e, 0x07, 0x3c, 0x1e, 0x28, 0x6b, 0x2f, 0x26, 0xa6, 0x69, 0x09, 0x5c, 0xf9, 0xd2, 0xe7, 0xb8, 0x49, 0xff, 0x51, 0xf2, 0x79, 0x11, 0x6b, 0xe9, 0xff, 0x7d, 0x6f, 0x45, 0xf3, 0xc9, 0x5a, 0x5b, 0x65, 0x90, 0xe6, 0x52, 0xf4, 0xcc, 0xb9, 0x84, 0x9c, 0x55, 0xdc, 0x27, 0xd0, 0xa4, 0x6e, 0x2d, 0xc9, 0xdd, 0x9a, 0x68, 0x1d, 0x0d, 0xc6, 0xf2, 0x93, 0xaf, 0x0d, 0xcc, 0x36, 0x76, 0xf0, 0xc5, 0xa8, 0x46, 0x48, 0x9e, 0xb9, 0x83, 0x7f, 0x6b, 0x38, 0x8f, 0x00, 0x3c, 0x0a, 0x8e, 0xec, 0xfd, 0x78, 0x6d, 0x0f, 0x9b, 0xcd, 0x22, 0x12, 0x69, 0x21, 0x35, 0xf2, 0xc1, 0x70, 0x7f, 0xb1, 0xee, 0xef, 0x32, 0x4b, 0x49, 0x9f, 0x19, 0xeb, 0xa3, 0x22, 0x21, 0x5f, 0xe3, 0xce, 0x19, 0xc9, 0xf0, 0x00, 0xb6, 0x98, 0xd2, 0xb2, 0xda, 0xb7, 0x14, 0x50, 0x15, 0x04, 0x6c, 0xc8, 0x6d, 0x04, 0x9e, 0xe1, 0x5a, 0xd5, 0x9d, 0xcd, 0x15, 0x64, 0xf3, 0x01, 0x12, 0xe0, 0x64, 0x44, 0xcb, 0x6e, 0xce, 0x06, 0xc0, 0x1e, 0x54, 0xf4, 0xbc, 0x1d, 0xbb, 0xc9, 0x59, 0x2d, 0x14, 0x67, 0xc6, 0x53, 0x9c, 0x26, 0xc8, 0xcf, 0xe0, 0x6c, 0xff, 0x51, 0x25, 0x7e, 0x6b, 0x6a, 0x06, 0x95, 0x2f, 0x41, 0x5f, 0x35, 0x94, 0x87, 0x6a, 0xba, 0x50, 0xad, 0x28, 0x34, 0x09, 0x54, 0x03, 0x74, 0x15, 0x05, 0xb1, 0x67, 0x84, 0x22, 0x5b, 0xa3, 0x60, 0x1c, 0xff, 0x40, 0x33, 0xe7, 0x13, 0xe9, 0xca, 0xab, 0x6b, 0x32, 0x39, 0xbd, 0x5c, 0x2c, 0x1f, 0xcd, 0x22, 0x38, 0x2b, 0x61, 0x7f, 0x18, 0xdf, 0x82, 0xa5, 0x4c, 0x94, 0xb4, 0x56, 0x9b, 0xbf, 0x2c, 0x4a, 0xf0, 0x72, 0x3e, 0xd1, 0x67, 0x26, 0x15, 0xb9, 0xa8, 0xb7, 0xa6, 0x72, 0x74, 0xb0, 0xe6, 0x70, 0x7d, 0xc9, 0x3b, 0xd1, 0x7b, 0xae, 0x31, 0x40, 0x7c, 0x02, 0x6f, 0x19, 0x7b, 0xa4, 0xe9, 0xcd, 0x35, 0x31, 0x57, 0x89, 0x38, 0xca, 0xe5, 0x12, 0x3d, 0x17, 0x2c, 0xf4, 0xb7, 0x8b, 0x61, 0xdb, 0xac, 0xea, 0xcc, 0x41, 0xc4, 0x09, 0x7c, 0x49, 0xa0, 0xd6, 0x3a, 0xeb, 0x6c, 0x97, 0xbb, 0x52, 0xb8, 0x77, 0x1a, 0x82, 0x83, 0x3e, 0x85, 0x3e, 0x99, 0x60, 0x36, 0x29, 0x20, 0x39, 0xa4, 0x2b, 0x6d, 0x97, 0xfb, 0x16, 0x1c, 0x79, 0xca, 0x8a, 0x5f, 0x16, 0xfc, 0x16, 0x96, 0x21, 0x0a, 0x9f, 0x20, 0x4c, 0x6f, 0x06, 0x71, 0x0b, 0x5b, 0x05, 0x65, 0x9a, 0xab, 0x5a, 0xd4, 0x41, 0x19, 0x28, 0x67, 0xd7, 0xb0, 0x9a, 0xaa, 0x85, 0x84, 0xc9, 0x62, 0xcc, 0x9f, 0xe0, 0x20, 0xc9, 0x3e, 0x7e, 0x16, 0xb8, 0x3e, 0x5b, 0x2a, 0xb8, 0xd1, 0x2f, 0x49, 0xcd, 0x75, 0xcf, 0xfe, 0x2b, 0x27, 0x99, 0x43, 0xb2, 0xd3, 0x13, 0x97, 0xb5, 0x10, 0xcf, 0x50, 0xff, 0x0a, 0x92, 0x33, 0x18, 0xbf, 0xb4, 0x42, 0xc4, 0x6f, 0xca, 0xd5, 0xcd, 0x4d, 0x83, 0xec, 0x02, 0x7b, 0xd0, 0xc4, 0x80, 0x35, 0x48, 0xa8, 0x30, 0x4d, 0xca, 0x0a, 0x91, 0xd7, 0x64, 0xd2, 0xb8, 0x25, 0x73, 0xf6, 0x95, 0xf6, 0x0c, 0x4b, 0x77, 0xea, 0x9b, 0x9b, 0xd2, 0x39, 0xca, 0xf7, 0x41, 0xa5, 0xa5, 0x4e, 0xc7, 0xad, 0xfb, 0x3f, 0x5a, 0x04, 0x07, 0x2c, 0xa2, 0x41, 0x4f, 0x90, 0xfe, 0xd8, 0xcd, 0x92, 0xc8, 0x49, 0x4d, 0xda, 0xda, 0x97, 0x16, 0xa3, 0x50, 0xfc, 0xcc, 0x11, 0x90, 0xdb, 0x95, 0xc5, 0x88, 0xf6, 0x7b, 0xb0, 0x37, 0xe1, 0x12, 0x24, 0x6f, 0xb7, 0x5a, 0x31, 0xd9, 0x0b, 0xe6, 0x2e, 0x39, 0x21, 0x3e, 0x96, 0xf3, 0x5e, 0x83, 0x16, 0xcf, 0xfe, 0x51, 0xe3, 0xf9, 0x05, 0xe9, 0x51, 0x4c, 0x78, 0x90, 0xa2, 0xcf, 0xcc, 0x32, 0x1b, 0x80, 0x9f, 0x4b, 0x5e, 0x51, 0xa6, 0x08, 0xf3, 0x71, 0xe7, 0xa9, 0x28, 0xcc, 0x28, 0x29, 0x1b, 0xd5, 0xa7, 0x21, 0x15, 0x83, 0x0b, 0xea, 0x19, 0x99, 0x9b, 0x01, 0xbd, 0x2b, 0xae, 0xb0, 0x39, 0x5e, 0x62, 0xeb, 0xbe, 0x6f, 0x91, 0x79, 0x09, 0xf7, 0x01, 0x54, 0x37, 0x6d, 0xdb, 0x51, 0xdb, 0xec, 0x5f, 0x03, 0x4e, 0x36, 0xd5, 0xdd, 0x46, 0xfa, 0xc7, 0x98, 0xaa, 0x52, 0x6d, 0xd4, 0xa5, 0x90, 0x69, 0x02, 0xfa, 0x3a, 0xb5, 0x81, 0x97, 0x53, 0xd9, 0x07, 0x6c, 0xdc, 0x61, 0x43, 0x7d, 0x9b, 0x8e, 0xc1, 0x36, 0x1b, 0x4c, 0x0d, 0xff, 0xf4, 0x64, 0x1b, 0x11, 0x4c, 0xf3, 0xe6, 0x88, 0x9e, 0x1b, 0x58, 0xb9, 0xbb, 0xf8, 0x6a, 0xc5, 0x0e, 0xd5, 0x8c, 0x6f, 0x23, 0xa0, 0x47, 0x2a, 0x6b, 0x9c, 0x21, 0x76, 0x39, 0x56, 0xc1, 0x6d, 0x11, 0xda, 0x53, 0x99, 0x22, 0x26, 0x2e, 0x09, 0x11, 0xdf, 0xb4, 0xa4, 0xf8, 0x43, 0x7a, 0xbd, 0xaf, 0x5f, 0xaa, 0xe7, 0x4a, 0x82, 0xa5, 0x0a, 0xe2, 0xf1, 0xec, 0xb6, 0x99, 0xdc, 0x40, 0xb8, 0xd8, 0x91, 0x08, 0xeb, 0xdb, 0xf0, 0xf4, 0x51, 0x70, 0x1f, 0xe0, 0x62, 0xfb, 0x7f, 0xfb, 0xa4, 0xbe, 0xde, 0x28, 0x7c, 0x57, 0xee, 0xa4, 0x44, 0x8a, 0xf5, 0xe9, 0x9d, 0x41, 0xc7, 0xd3, 0x07, 0xd1, 0xf2, 0x02, 0xaf, 0x7f, 0x38, 0x7f, 0x87, 0x43, 0x42, 0xa2, 0x9c, 0xcc, 0x92, 0x33, 0xa5, 0xc3, 0xba, 0xcf, 0xd7, 0x54, 0xcb, 0x8d, 0x01, 0xeb, 0x11, 0xe2, 0xd4, 0x3b, 0xfd, 0xc2, 0x82, 0x85, 0x63, 0x08, 0x8c, 0x17, 0xe6, 0x18, 0xd4, 0x13, 0xb0, 0xc3, 0xfa, 0x71, 0x66, 0x6b, 0xe5, 0x47, 0x5a, 0x67, 0xa0, 0x48, 0x03, 0xa8, 0x68, 0x8b, 0xab, 0x9d, 0x03, 0x8f, 0x68, 0x55, 0x53, 0x7b, 0x4d, 0xe4, 0x2a, 0xaa, 0xe1, 0x07, 0x60, 0x66, 0xd0, 0x0b, 0x23, 0xf4, 0xe1, 0xea, 0x8f, 0xd2, 0x28, 0xb8, 0x7e, 0x3c, 0x7d, 0x3d, 0xa2, 0xf4, 0x2d, 0xe4, 0xd1, 0x43, 0xef, 0xd4, 0x9f, 0x3b, 0x19, 0x5c, 0x32, 0x40, 0x13, 0x94, 0x52, 0xc7, 0x0c, 0x41, 0xc0, 0x5c, 0xed, 0xfa, 0xc9, 0xea, 0x8b, 0x89, 0x1a, 0x37, 0x21, 0x94, 0xd6, 0xae, 0xfd, 0x7d, 0xe6, 0x61, 0x79, 0x86, 0x91, 0x4e, 0x2d, 0x39, 0x4c, 0xe1, 0x63, 0x07, 0xd3, 0xbb, 0xcb, 0x2f, 0x78, 0xb2, 0x71, 0xe1, 0xbb, 0x19, 0xeb, 0xa3, 0x1c, 0x41, 0xd7, 0xf5, 0x2d, 0x3f, 0x85, 0x30, 0xeb, 0xf0, 0xf0, 0xb4, 0x4e, 0x3b, 0xf3, 0x42, 0x1f, 0x96, 0xb9, 0xa7, 0x0a, 0xcc, 0x76, 0x9b, 0xf4, 0xfd, 0x54, 0xe8, 0x8f, 0xe6, 0xb1, 0xcf, 0x2b, 0x62, 0x87, 0xa7, 0xcf, 0x31, 0x2b, 0xc7, 0x88, 0xf9, 0x3b, 0xa6, 0x01, 0x8a, 0xd1, 0x41, 0x54, 0x66, 0xfd, 0xbd, 0x20, 0x81, 0x73, 0x4e, 0xdc, 0x45, 0x80, 0x57, 0x6a, 0xd9, 0x43, 0xd3, 0xef, 0xa3, 0x19, 0xf3, 0xe3, 0x0c, 0x59, 0x08, 0x64, 0x83, 0x42, 0xa4, 0xd0, 0xc4, 0x31, 0xfc, 0x92, 0x5a, 0x17, 0x91, 0x3c, 0x62, 0x2b, 0x10, 0xd7, 0x93, 0xdc, 0x76, 0x76, 0x7b, 0x0a, 0x77, 0x12, 0x0b, 0x75, 0x21, 0x91, 0x56, 0x76, 0xbd, 0x28, 0x96, 0xed, 0xf6, 0xe3, 0x70, 0x7a, 0x3d, 0x82, 0x79, 0xf0, 0x6b, 0x87, 0xf8, 0x06, 0xa8, 0x8d, 0xee, 0x50, 0x8c, 0xdb, 0x53, 0x6e, 0x85, 0x39, 0xa3, 0x84, 0x79, 0x03, 0x99, 0xea, 0xac, 0x7b, 0x3a, 0x24, 0xe3, 0x63, 0x16, 0x14, 0xca, 0xcc, 0xcb, 0x6e, 0x93, 0x29, 0xca, 0x6d, 0xe0, 0xa7, 0x5e, 0xc4, 0xe3, 0xc1, 0xea, 0xd8, 0xc3, 0x0e, 0x72, 0x2c, 0x42, 0x5e, 0x5c, 0x1c, 0x9e, 0x06, 0x78, 0xcf, 0xb4, 0x78, 0x3f, 0x67, 0x6b, 0x17, 0x58, 0x7a, 0x50, 0x49, 0x61, 0xc6, 0x7e, 0xcd, 0xeb, 0x20, 0xc1, 0x4f, 0xc6, 0xae, 0xfb, 0x39, 0x80, 0x56, 0xc6, 0xcd, 0x28, 0x76, 0x5a, 0x71, 0x57, 0xd6, 0xb2, 0x49, 0x72, 0xdb, 0xea, 0x0b, 0x29, 0xfd, 0xec, 0x0f, 0x43, 0x7a, 0x4b, 0xa6, 0x9e, 0x4c, 0x6f, 0xad, 0x71, 0x59, 0xf3, 0x62, 0xd5, 0xeb, 0x4b, 0x76, 0x84, 0x5f, 0xaa, 0x63, 0xe0, 0x21, 0x22, 0xff, 0x37, 0xd8, 0x0e, 0x51, 0x45, 0xdd, 0xad, 0xa4, 0xfa, 0xf2, 0x0f, 0xdb, 0x7e, 0x31, 0x35, 0x04, 0x73, 0x42, 0x74, 0x30, 0x7a, 0xd1, 0x1a, 0x81, 0xf8, 0x3f, 0x54, 0x84, 0x1a, 0x98, 0x4f, 0xc1, 0x16, 0xc6, 0x9e, 0x91, 0xb4, 0x04, 0xdc, 0x30, 0x0e, 0x95, 0x92, 0x13, 0x93, 0xb5, 0x5a, 0x7c, 0x52, 0xd0, 0x45, 0x4b, 0x76, 0xf2, 0x7b, 0x17, 0x0c, 0x7f, 0x21, 0x7d, 0x0d, 0x24, 0x80, 0xb8, 0x98, 0x0d, 0x63, 0x72, 0x7f, 0x58, 0xc0, 0xda, 0x05, 0xca, 0x9b, 0xf7, 0xe6, 0xc1, 0x28, 0x3c, 0x98, 0x6a, 0x30, 0x5c, 0xd1, 0x34, 0xb5, 0x60, 0x49, 0x85, 0xd9, 0xf6, 0xc1, 0xab, 0xfc, 0x0c, 0x44, 0x15, 0x25, 0x9d, 0xad, 0xc3, 0xa3, 0xcb, 0x69, 0xfb, 0xf4, 0x2f, 0x7e, 0x3e, 0xe5, 0x6d, 0xcc, 0x7a, 0xfb, 0x0b, 0x93, 0x81, 0x12, 0x83, 0x36, 0xba, 0x44, 0x96, 0x3f, 0x16, 0x0c, 0xe4, 0xa2, 0x46, 0xab, 0xba, 0x46, 0x2c, 0xcb, 0x2b, 0xc1, 0x8f, 0x63, 0x62, 0x64, 0x12, 0xda, 0x36, 0x77, 0x67, 0x6f, 0xff, 0xc5, 0xc0, 0xd8, 0xa8, 0x5c, 0x86, 0x29, 0x06, 0x8e, 0x4e, 0xf8, 0x68, 0x3b, 0x09, 0xbf, 0x70, 0x53, 0x7a, 0x81, 0x21, 0x96, 0xee, 0xb1, 0x38, 0x9e, 0x27, 0x4f, 0xc0, 0x20, 0x99, 0x54, 0xe1, 0x6f, 0xd9, 0x50, 0xf9, 0x41, 0x52, 0x52, 0xee, 0xb6, 0x3a, 0x08, 0xc2, 0x96, 0xc4, 0x27, 0x67, 0xda, 0x97, 0x0d, 0xd5, 0x6f, 0x80, 0xa6, 0x5b, 0x36, 0x63, 0x8c, 0x32, 0x4f, 0x78, 0x72, 0x58, 0x97, 0xb3, 0xc2, 0x9b, 0x6f, 0x84, 0x85, 0xf4, 0xc0, 0xc1, 0x84, 0x17, 0x3c, 0xe1, 0xac, 0x48, 0xe6, 0x6a, 0xb7, 0x70, 0xd4, 0xac, 0x09, 0x70, 0x33, 0xb0, 0xd8, 0xb5, 0x8d, 0x6c, 0x90, 0x0d, 0x47, 0x38, 0x76, 0xb9, 0x6e, 0x86, 0x8b, 0xc3, 0xb3, 0xcd, 0xb3, 0x92, 0xb3, 0xc6, 0x16, 0xbb, 0x7c, 0xdb, 0xc7, 0x1a, 0x4d, 0xdd, 0xa4, 0x22, 0x9e, 0xf5, 0x7d, 0x71, 0x60, 0xdd, 0x78, 0xa7, 0x86, 0x4f, 0xb3, 0x79, 0xc4, 0xbe, 0x2c, 0x01, 0x97, 0x45, 0xde, 0x58, 0x85, 0xdd, 0x2d, 0x67, 0xa6, 0xd2, 0x84, 0xfa, 0x63, 0x78, 0x3d, 0x16, 0x7e, 0x1a, 0xc1, 0x8d, 0x53, 0x33, 0xf0, 0xcf, 0x5d, 0xe0, 0xc3, 0x03, 0xfb, 0x96, 0x2f, 0x57, 0x74, 0x10, 0x4d, 0x94, 0x39, 0x8c, 0xb9, 0xf5, 0x6b, 0x37, 0x38, 0x39, 0x9d, 0xe6, 0x9d, 0xf7, 0xdb, 0x06, 0xed, 0x32, 0xeb, 0xd6, 0xc1, 0x2d, 0xd2, 0xd4, 0xec, 0x80, 0x9b, 0x74, 0x5e, 0x6c, 0x53, 0x18, 0x48, 0x6c, 0x58, 0x3d, 0x81, 0x0c, 0xd4, 0xf2, 0x29, 0xfe, 0x84, 0x8f, 0x8c, 0x6b, 0xbe, 0xa3, 0x48, 0x87, 0xb2, 0x2e, 0xb3, 0x68, 0xf0, 0x11, 0x77, 0x18, 0x2a, 0xc2, 0x7f, 0xe9, 0x3b, 0x44, 0x17, 0x08, 0x69, 0x57, 0x4e, 0x55, 0xe7, 0xec, 0x9f, 0x72, 0x9e, 0xdb, 0xd1, 0x1a, 0x2e, 0xd8, 0x1c, 0xb5, 0x2f, 0xa4, 0x8d, 0x29, 0xbc, 0x80, 0xac, 0xf2, 0x32, 0xe7, 0x5b, 0x75, 0x35, 0x7c, 0x01, 0x91, 0xf4, 0x42, 0xe8, 0x78, 0xae, 0x0b, 0xe4, 0xbd, 0x76, 0x33, 0x36, 0xae, 0x33, 0x8d, 0xaf, 0xe3, 0xea, 0x9e, 0x19, 0x17, 0x40, 0x09, 0xd2, 0x37, 0x3a, 0x4b, 0xba, 0xb9, 0x48, 0xa8, 0x4f, 0x2f, 0x82, 0x65, 0x17, 0x1c, 0x31, 0x38, 0x3f, 0x06, 0x91, 0xfd, 0x81, 0xcc, 0xd5, 0xaa, 0x4b, 0x3a, 0x6c, 0x85, 0x1d, 0xdb, 0x83, 0x95, 0x32, 0x0e, 0xcb, 0x56, 0x64, 0x5c, 0x7c, 0xb1, 0x4a, 0x09, 0x9a, 0x2a, 0xa3, 0xe9, 0x77, 0x5c, 0xf7, 0x75, 0x79, 0xa2, 0x7b, 0x1e, 0x1d, 0x18, 0x36, 0xe2, 0x3c, 0xc2, 0x62, 0x1c, 0x8d, 0x0a, 0x15, 0xa0, 0x6c, 0x70, 0x20, 0x07, 0xd9, 0x7d, 0x37, 0x48, 0xc4, 0xf8, 0x53, 0x89, 0x88, 0x5d, 0x55, 0x34, 0xb5, 0x8b, 0xec, 0x4c, 0x12, 0xbd, 0xb8, 0x02, 0xe2, 0xbb, 0xb0, 0x83, 0x67, 0x52, 0xc1, 0x15, 0xa5, 0x01, 0xb7, 0x62, 0x68, 0xf5, 0x61, 0x13, 0x88, 0x38, 0xf0, 0xa1, 0x6c, 0x25, 0xa1, 0x68, 0xcd, 0x1f, 0x9c, 0xfe, 0xbc, 0x82, 0x1b, 0xc2, 0xe7, 0xda, 0xce, 0xb8, 0x18, 0x53, 0x7f, 0x94, 0xfe, 0x71, 0xf2, 0x14, 0x30, 0x01, 0x0f, 0x93, 0x6f, 0x50, 0x42, 0xdc, 0x2b, 0x9a, 0x23, 0x3c, 0x49, 0xc5, 0x52, 0xdb, 0x24, 0x4f, 0xa5, 0x4b, 0xd2, 0x86, 0x86, 0x62, 0xa8, 0xf7, 0x96, 0x45, 0x00, 0x28, 0x97, 0xc6, 0x39, 0x8a, 0x88, 0xf0, 0x00, 0xa9, 0x11, 0xdf, 0xce, 0xa6, 0x22, 0xd6, 0xb2, 0xe7, 0xd8, 0x8b, 0x51, 0x0d, 0xa0, 0xc5, 0x2b, 0x26, 0x9e, 0x29, 0x20, 0x24, 0x50, 0x51, 0x32, 0x8f, 0x6e, 0x1f, 0x8c, 0x76, 0x15, 0x51, 0xc4, 0xab, 0x25, 0x55, 0x5d, 0x30, 0xe8, 0x5e, 0x90, 0xec, 0xf4, 0xb7, 0x4b, 0xa2, 0x52, 0x58, 0x7b, 0x24, 0xdf, 0xb7, 0x87, 0xc4, 0xf3, 0xe0, 0x1c, 0x0c, 0x41, 0xc8, 0x30, 0xaf, 0xfe, 0xde, 0x41, 0xbe, 0x46, 0xe4, 0xde, 0x1f, 0xbb, 0xfd, 0x69, 0x3c, 0x6f, 0x07, 0x1b, 0xf8, 0x04, 0x2a, 0x48, 0xe7, 0x11, 0xb1, 0xe5, 0xbe, 0xc8, 0x19, 0x47, 0x08, 0xd6, 0x68, 0x2d, 0x1b, 0x8b, 0xc1, 0x01, 0x4b, 0x3b, 0x34, 0x5b, 0x5d, 0xe4, 0xda, 0xc7, 0x3f, 0x10, 0x22, 0xc8, 0xf6, 0xfd, 0x66, 0x1d, 0xd7, 0xfc, 0xc2, 0x42, 0xfa, 0x17, 0x25, 0x3a, 0xec, 0xf6, 0xa8, 0x8c, 0xa4, 0x04, 0x1f, 0x8c, 0xb8, 0xcd, 0xee, 0xdb, 0xd1, 0xaa, 0x1f, 0x31, 0x5d, 0xa1, 0xb1, 0x5a, 0x83, 0x87, 0x32, 0x7f, 0x5c, 0x67, 0x90, 0xa7, 0x60, 0x28, 0x2c, 0x7d, 0x1e, 0x69, 0x30, 0x54, 0x31, 0xb0, 0x23, 0x68, 0x6f, 0xc4, 0xba, 0x67, 0x63, 0x57, 0xf1, 0x30, 0xfe, 0xe8, 0x5b, 0xda, 0x89, 0xe8, 0xb6, 0xf8, 0xde, 0x1c, 0xc3, 0x1b, 0xd8, 0x42, 0x55, 0x99, 0x08, 0xf7, 0xa7, 0x8d, 0xa9, 0xd8, 0xf2, 0x1f, 0xd6, 0xe8, 0x3f, 0x06, 0xfb, 0x32, 0x7a, 0x4b, 0x8a, 0xaf, 0xc9, 0x4f, 0xef, 0x69, 0x1c, 0x0f, 0xc5, 0xe1, 0x04, 0xa7, 0x4a, 0xae, 0xc8, 0x15, 0x10, 0x68, 0xb6, 0x40, 0xf6, 0xc4, 0xb7, 0x39, 0x57, 0x00, 0x26, 0xc0, 0x81, 0x82, 0xe2, 0x0a, 0x69, 0xbc, 0xa2, 0xc1, 0x9d, 0x52, 0x89, 0x4d, 0x79, 0x7f, 0xfb, 0x52, 0x9e, 0xb5, 0xae, 0x79, 0xa0, 0x83, 0x04, 0x74, 0xff, 0xbc, 0x98, 0x3c, 0x59, 0xd6, 0x16, 0x9d, 0xdd, 0x90, 0x51, 0xf5, 0x03, 0xd7, 0x8f, 0x39, 0x7a, 0xeb, 0x27, 0x38, 0x62, 0xbe, 0x4f, 0x24, 0xbc, 0x9d, 0x2f, 0x4e, 0x1f, 0x11, 0x3a, 0x31, 0xac, 0x08, 0xbd, 0xb2, 0x44, 0x30, 0xb8, 0xa6, 0xf8, 0xa4, 0xee, 0x95, 0xc0, 0xca, 0x38, 0xbd, 0x70, 0x7b, 0x1e, 0x5a, 0xe9, 0x65, 0xa8, 0x25, 0x8c, 0xae, 0x72, 0x1b, 0xf5, 0xda, 0xff, 0x7f, 0xe5, 0xef, 0x4f, 0x22, 0x7f, 0xd7, 0xb4, 0xe2, 0xb8, 0x05, 0xe1, 0x71, 0x09, 0x5c, 0x44, 0x58, 0x66, 0x4c, 0x96, 0x3b, 0x74, 0x3e, 0xb0, 0x5e, 0xf7, 0x32, 0xa0, 0x68, 0x89, 0xa6, 0xfc, 0x67, 0x92, 0xba, 0x76, 0x15, 0x74, 0x93, 0xb1, 0x5a, 0x06, 0xfd, 0x53, 0x11, 0x44, 0x54, 0x5c, 0x0f, 0x45, 0xa4, 0xb6, 0x61, 0x6d, 0x0f, 0x0c, 0xd6, 0xe3, 0x6f, 0xe0, 0xbe, 0x45, 0x3d, 0xd8, 0xf0, 0x9b, 0xb2, 0x59, 0x12, 0x8a, 0x2b, 0x57, 0x14, 0xcb, 0xd2, 0x6c, 0xfe, 0xdb, 0x7b, 0x27, 0xec, 0xf3, 0xcc, 0xa6, 0x56, 0x3a, 0xa1, 0x67, 0x95, 0x3a, 0xae, 0x5b, 0xa3, 0x90, 0x67, 0x3c, 0x23, 0xe8, 0x1c, 0x21, 0xa1, 0x29, 0x69, 0x50, 0x1a, 0xed, 0xcd, 0x53, 0xbf, 0x34, 0x99, 0x4e, 0xf6, 0x59, 0x0c, 0x8f, 0xa2, 0x45, 0xbc, 0x67, 0xa4, 0xe2, 0x37, 0x38, 0xa2, 0xd2, 0xeb, 0xd0, 0x06, 0x62, 0x43, 0xf5, 0x4a, 0xb9, 0x13, 0x41, 0x74, 0x56, 0x36, 0x31, 0xdc, 0xb9, 0x76, 0x78, 0x35, 0x5f, 0xab, 0x99, 0xcb, 0xf4, 0x27, 0xb4, 0x0a, 0xc5, 0x52, 0xa0, 0x40, 0x74, 0x92, 0x3b, 0xa4, 0xef, 0x6e, 0xfe, 0x96, 0xa2, 0xf2, 0xd5, 0x28, 0xec, 0x55, 0x2d, 0xde, 0xd0, 0xd9, 0x4e, 0xb2, 0xee, 0xf3, 0xeb, 0x5b, 0xb1, 0xac, 0xf7, 0xcf, 0xc9, 0x47, 0xbb, 0x07, 0xdc, 0x24, 0x26, 0x02, 0x78, 0xe4, 0x64, 0x0c, 0x4d, 0xce, 0xb2, 0x40, 0x99, 0x71, 0x70, 0x4c, 0xe3, 0x8b, 0x77, 0x74, 0xec, 0x2a, 0xae, 0xda, 0xe3, 0x11, 0xd8, 0xfc, 0xd8, 0x5d, 0xb0, 0x7e, 0x73, 0x69, 0x38, 0x2a, 0xe6, 0xee, 0x4e, 0x35, 0x20, 0x6f, 0x80, 0xc3, 0x43, 0xd4, 0x21, 0xae, 0x59, 0x55, 0x9c, 0x83, 0x43, 0x99, 0x09, 0xce, 0xf1, 0x1f, 0xfe, 0x98, 0xd9, 0xde, 0xa8, 0x2d, 0xa1, 0x28, 0x1a, 0x23, 0x1f, 0xd4, 0xe4, 0x97, 0x84, 0x9c, 0xe8, 0xba, 0xd4, 0xc4, 0x69, 0x8d, 0x9a, 0xfd, 0x65, 0xe8, 0xd9, 0x88, 0x25, 0xc1, 0x45, 0x9e, 0x12, 0xab, 0xb3, 0x10, 0xca, 0x9d, 0xcf, 0x2b, 0x73, 0xf5, 0x0d, 0xde, 0x50, 0xbc, 0xe2, 0x1f, 0x91, 0x2c, 0x33, 0x8a, 0x70, 0x6f, 0x0e, 0x4b, 0x79, 0xaa, 0x98, 0x3f, 0x29, 0x3a, 0x46, 0x56, 0xbb, 0x3e, 0x50, 0x3c, 0x3f, 0x55, 0x63, 0x38, 0xec, 0xa9, 0x97, 0x54, 0xb7, 0x2c, 0xa0, 0xbe, 0x25, 0x21, 0x48, 0x6e, 0x5d, 0xdf, 0x1d, 0x09, 0x81, 0xd1, 0x66, 0x05, 0x3e, 0xc2, 0x5c, 0x0f, 0xa2, 0x57, 0x97, 0xa9, 0x2e, 0xdd, 0xc7, 0x18, 0x2d, 0x45, 0xa4, 0x7d, 0x44, 0x6d, 0x28, 0x42, 0x49, 0xa2, 0xfb, 0xb7, 0x58, 0x62, 0x2f, 0xfd, 0x24, 0x66, 0x2d, 0x24, 0x8c, 0xe0, 0xef, 0x90, 0x6f, 0x01, 0x70, 0xa1, 0xc0, 0xbe, 0x61, 0x93, 0xdd, 0xd4, 0x1e, 0xa2, 0x1c, 0x09, 0xe0, 0x72, 0xa7, 0xb5, 0x34, 0xaf, 0x8b, 0x82, 0xac, 0xf0, 0x0b, 0x70, 0xd4, 0xe2, 0x3a, 0x1c, 0x67, 0xa2, 0xc9, 0x41, 0xc3, 0x6a, 0x1d, 0x7f, 0x9b, 0x70, 0xa4, 0x5b, 0xec, 0x0b, 0x6a, 0x88, 0x32, 0x18, 0xe7, 0x65, 0xdb, 0x9c, 0x1c, 0xc6, 0xfc, 0xab, 0xde, 0xf7, 0x43, 0x88, 0x71, 0xfe, 0x2d, 0x0d, 0x58, 0x21, 0x78, 0x4d, 0x6c, 0xa8, 0xdc, 0x79, 0x2c, 0xe4, 0xf6, 0x00, 0x54, 0x70, 0x85, 0xfa, 0xb1, 0xb7, 0xd8, 0xc7, 0x33, 0xb6, 0x87, 0xf3, 0x44, 0x04, 0x62, 0x5d, 0x58, 0x0f, 0xa7, 0x99, 0xc5, 0xa8, 0x78, 0x92, 0xd6, 0xc2, 0x8b, 0x74, 0x1a, 0x76, 0x24, 0xc9, 0x02, 0x4b, 0x40, 0xe2, 0xab, 0xb5, 0x13, 0x78, 0xf9, 0xdb, 0xb5, 0x93, 0xe5, 0x9d, 0x19, 0xab, 0x18, 0xd6, 0x3e, 0x0d, 0xb8, 0xde, 0xa9, 0x81, 0x82, 0x54, 0x12, 0x2a, 0x19, 0x1a, 0x5e, 0xad, 0x9d, 0xa0, 0xcd, 0x96, 0x80, 0x66, 0x75, 0xf7, 0x95, 0xbc, 0xef, 0x51, 0x6a, 0xcd, 0x50, 0xb8, 0xd8, 0xdb, 0x5a, 0x33, 0xd8, 0xcc, 0xf4, 0x62, 0x98, 0xe6, 0xd8, 0x63, 0xcf, 0xd7, 0x8c, 0xf5, 0x4d, 0xf8, 0x93, 0xde, 0xd6, 0xd2, 0xe4, 0x8b, 0x30, 0xe2, 0x9b, 0xf7, 0x7b, 0x99, 0xef, 0xce, 0xc1, 0xa7, 0x64, 0xd1, 0xce, 0x79, 0x41, 0x7c, 0x42, 0x00, 0x45, 0xe6, 0xe4, 0xb5, 0x96, 0xea, 0x39, 0xda, 0xfa, 0x84, 0x56, 0x02, 0x49, 0x7d, 0xf2, 0xd3, 0x23, 0x4b, 0xbf, 0x0b, 0xde, 0x33, 0xfb, 0xc1, 0xc2, 0xb0, 0x41, 0xee, 0x79, 0x18, 0xa6, 0x2b, 0xc1, 0x7d, 0x01, 0xbc, 0x64, 0xd1, 0x8a, 0xce, 0x6a, 0x4e, 0xa7, 0xfd, 0x8d, 0x15, 0x02, 0x19, 0xed, 0x16, 0xdf ],
-const [ 0xe0, 0x22, 0x1d, 0x19, 0xcf, 0x61, 0x7e, 0xd8, 0x27, 0xd8, 0xd8, 0xcb, 0x8d, 0x2c, 0x8e, 0xd8, 0x1b, 0x9b, 0x33, 0x54, 0xa8, 0x32, 0xf1, 0xd1, 0x4a, 0x40, 0x2b, 0x37, 0x1a, 0x0a, 0x61, 0x17, 0x37, 0xc0, 0x54, 0x3b, 0x0e, 0xb0, 0x6b, 0x82, 0xd8, 0xba, 0x56, 0xeb, 0x63, 0x04, 0xf1, 0xef, 0x16, 0xef, 0x6b, 0x14, 0x30, 0x49, 0xa7, 0xbf, 0x50, 0xc4, 0xe2, 0x49, 0x3a, 0xa6, 0x97, 0x56, 0xd8, 0xc3, 0x9f, 0x62, 0x7f, 0xa8, 0x9d, 0x9d, 0x74, 0x1a, 0x99, 0xf9, 0xaf, 0xbf, 0xeb, 0x81, 0xde, 0x1a, 0x5b, 0xec, 0xad, 0xbd, 0x86, 0x72, 0x45, 0xb9, 0x84, 0xde, 0x12, 0x5a, 0xc7, 0xe5, 0xca, 0x11, 0x46, 0xb6, 0xab, 0xb2, 0xdb, 0xd2, 0x04, 0xdf, 0xea, 0x1e, 0xf6, 0xc4, 0x44, 0x36, 0x7c, 0x06, 0x4b, 0x05, 0xa9, 0xf5, 0x56, 0x93, 0x31, 0x09, 0x57, 0x1d, 0x2b, 0x8c, 0xbb, 0x6b, 0x15, 0x94, 0x91, 0x5e, 0x19, 0x34, 0xef, 0xc9, 0x8e, 0xf3, 0x91, 0x81, 0xc2, 0x7d, 0xc4, 0xb8, 0xf7, 0x99, 0x82, 0x86, 0xab, 0x5b, 0xdf, 0xc9, 0x1d, 0x9b, 0xa4, 0x2f, 0x0c, 0xa6, 0x39, 0x91, 0xc2, 0x32, 0xc8, 0x83, 0x51, 0x98, 0x9f, 0x29, 0x1d, 0x3d, 0xd6, 0x4c, 0x9a, 0x51, 0x32, 0xac, 0x57, 0xbd, 0x4a, 0x98, 0x3c, 0x56, 0xe8, 0xbd, 0x10, 0x57, 0xb2, 0x3c, 0x3d, 0x0e, 0x0a, 0xff, 0xd8, 0xd5, 0x32, 0x4c, 0xdc, 0x44, 0xb4, 0x9a, 0xb6, 0xa5, 0x01, 0xa4, 0x07, 0xa8, 0x58, 0xbd, 0xa5, 0x59, 0xe9, 0x63, 0xe3, 0x4e, 0x3b, 0x16, 0x12, 0x25, 0xcb, 0x6b, 0x47, 0x2e, 0xf6, 0x5c, 0x5f, 0x64, 0x18, 0xe2, 0x41, 0xa2, 0xf6, 0xc6, 0x63, 0x13, 0x59, 0xb3, 0x90, 0xeb, 0xfc, 0x91, 0xe8, 0x54, 0xa8, 0x0e, 0x28, 0xab, 0x9e, 0x7d, 0x2b, 0xed, 0x35, 0xe4, 0xb1, 0x6c, 0xc4, 0x50, 0x60, 0xc7, 0xc2, 0x6c, 0x08, 0x18, 0x2c, 0x52, 0x2b, 0x6f, 0x27, 0xa1, 0xbd, 0x80, 0xe7, 0xd0, 0x28, 0x98, 0xcf, 0xc2, 0x93, 0xd6, 0xda, 0x9a, 0x64, 0x97, 0x39, 0xd0, 0x03, 0x32, 0x3e, 0x85, 0xe1, 0xe6, 0x78, 0x13, 0xba, 0x10, 0x20, 0xe9, 0x17, 0xa1, 0xb3, 0x96, 0x16, 0xd0, 0xe1, 0x23, 0x6d, 0x0c, 0xa6, 0xa6, 0xad, 0x35, 0xb7, 0x14, 0xc4, 0x0b, 0x1f, 0x57, 0xc6, 0xe7, 0x2a, 0xa0, 0xed, 0xa9, 0x82, 0xff, 0xde, 0xf1, 0x98, 0x31, 0x2d, 0x92, 0x45, 0xb9, 0x24, 0x43, 0xb2, 0x32, 0xc0, 0x98, 0x75, 0xe3, 0xfd, 0x31, 0xfc, 0x94, 0x53, 0x32, 0x2f, 0xa0, 0x81, 0xf2, 0x51, 0x4c, 0x89, 0xf8, 0x27, 0x57, 0xfc, 0x23, 0x5d, 0xd2, 0x77, 0x28, 0x25, 0x32, 0x6e, 0x42, 0x21, 0xa4, 0x28, 0x24, 0x83, 0xa0, 0x0b, 0x33, 0x73, 0xc1, 0x1a, 0xf2, 0xb1, 0xd4, 0xbc, 0xbd, 0x7b, 0x2f, 0xbf, 0xbb, 0xb1, 0x44, 0x9c, 0x0e, 0x37, 0x75, 0xfd, 0x4c, 0x9b, 0x2a, 0x7c, 0x33, 0xf7, 0x21, 0xae, 0x98, 0x19, 0x06, 0x60, 0xa1, 0xe2, 0x44, 0x20, 0x34, 0xec, 0x1a, 0x00, 0xaf, 0x6f, 0xf1, 0x96, 0xda, 0x66, 0xed, 0x47, 0x1a, 0xed, 0xc2, 0xc6, 0xe7, 0xee, 0xc9, 0xd7, 0x7f, 0xfc, 0x53, 0x59, 0xdc, 0x7f, 0x3d, 0x83, 0xe4, 0x12, 0xc4, 0x6e, 0xe1, 0x29, 0x9b, 0xd3, 0x30, 0xf7, 0x3b, 0x17, 0x3d, 0x8f, 0x7b, 0x84, 0xaf, 0x49, 0x60, 0xda, 0xdf, 0x67, 0x36, 0x06, 0x8f, 0xf8, 0xdf, 0x31, 0xd9, 0xfd, 0x6c, 0xfc, 0x65, 0xcb, 0xea, 0x0a, 0xdf, 0xb0, 0x7e, 0xc0, 0xa8, 0xd9, 0xb5, 0x48, 0xcc, 0x73, 0x15, 0xdc, 0x35, 0x11, 0xf8, 0x41, 0x1e, 0x4e, 0x9a, 0x91, 0xca, 0xb3, 0x70, 0x3e, 0x75, 0xdb, 0xbb, 0x54, 0x8b, 0xd4, 0x5e, 0xfe, 0x18, 0xc9, 0xec, 0x4c, 0x7f, 0xde, 0x06, 0x33, 0x70, 0x5c, 0xe4, 0xd6, 0x14, 0x0e, 0x31, 0x03, 0x8a, 0xeb, 0x1c, 0x01, 0x97, 0xf4, 0xac, 0x89, 0x99, 0x60, 0x53, 0x12, 0xbd, 0xf7, 0xc7, 0x52, 0x72, 0xbc, 0x0d, 0x01, 0x1e, 0xce, 0xd6, 0xe0, 0x0f, 0x90, 0x0f, 0xfa, 0xb4, 0x08, 0xb4, 0x29, 0x0d, 0x85, 0xe5, 0xdd, 0x60, 0x85, 0x3b, 0x19, 0x2e, 0xd5, 0x5c, 0xbe, 0x65, 0xfa, 0xcd, 0x0c, 0xd7, 0xd0, 0x08, 0x66, 0xeb, 0x71, 0xcf, 0x55, 0x92, 0x58, 0xbf, 0xd0, 0x7d, 0xc7, 0x28, 0xbb, 0x8e, 0x65, 0x1c, 0xad, 0x8c, 0x2c, 0xc6, 0xf6, 0x1a, 0x82, 0xfd, 0xe1, 0xea, 0xa6, 0x19, 0x36, 0x2e, 0x4e, 0x06, 0x03, 0x4f, 0x8f, 0x97, 0x9c, 0xe2, 0xfc, 0x1c, 0xe1, 0xd8, 0x12, 0x36, 0xbf, 0xf4, 0xd4, 0xea, 0xfa, 0x83, 0xb2, 0xf5, 0x29, 0x47, 0xaf, 0x5f, 0x02, 0xb4, 0xc3, 0x53, 0xd7, 0x5f, 0x7e, 0x2e, 0x61, 0xb3, 0xef, 0xd6, 0xbd, 0xe5, 0xc4, 0x4d, 0xb4, 0x2b, 0xb2, 0x86, 0x3f, 0x29, 0x18, 0x77, 0x4a, 0xac, 0xdf, 0x6f, 0xb9, 0x9b, 0xa4, 0xaa, 0xa9, 0x2b, 0x19, 0x23, 0xf8, 0x51, 0xa8, 0xa9, 0x07, 0x7d, 0x5a, 0x35, 0xbe, 0x85, 0xf8, 0x7b, 0xd1, 0xdf, 0x70, 0xbf, 0x42, 0x14, 0x79, 0xea, 0x28, 0x71, 0x7a, 0xdd, 0xae, 0x00, 0xa8, 0x05, 0x5e, 0xb7, 0x6f, 0x2f, 0xa0, 0xee, 0x14, 0x9e, 0x7d, 0x17, 0x98, 0x5b, 0xa9, 0xa9, 0xdf, 0xcd, 0xc1, 0x5d, 0x12, 0x89, 0xd1, 0x9d, 0x41, 0x6b, 0x19, 0x39, 0x4d, 0xe6, 0x11, 0x5d, 0x05, 0x98, 0xaa, 0xc0, 0x8f, 0x22, 0xd7, 0x1d, 0x0a, 0x36, 0x4c, 0xe7, 0x71, 0xf2, 0x85, 0x39, 0xc2, 0x6c, 0x0b, 0x0c, 0x60, 0x8e, 0xf3, 0xac, 0xb6, 0x24, 0xa7, 0x6d, 0x1e, 0x33, 0xe9, 0x99, 0x01, 0x8c, 0x14, 0xae, 0x3f, 0xa2, 0xa5, 0xc6, 0xd1, 0x99, 0xfb, 0x57, 0xad, 0x9f, 0x5b, 0x1c, 0xe9, 0x7f, 0x37, 0x53, 0x24, 0x73, 0xb0, 0x29, 0x22, 0x3a, 0x59, 0x73, 0xb6, 0x6b, 0x3e, 0x9e, 0xe5, 0x09, 0x25, 0xe9, 0x48, 0x57, 0x13, 0xd1, 0xb2, 0xee, 0x12, 0xcd, 0x13, 0x0c, 0x32, 0x3c, 0x9c, 0x2f, 0xce, 0x9c, 0x24, 0xe3, 0x10, 0xfc, 0xcb, 0xd8, 0xb7, 0xb4, 0xdd, 0x37, 0x18, 0x53, 0xf9, 0x36, 0x63, 0xd9, 0x72, 0xeb, 0x28, 0x27, 0xf5, 0x5d, 0x1a, 0xb3, 0x6c, 0xe1, 0x12, 0x80, 0x23, 0xa4, 0x57, 0x4e, 0x29, 0x84, 0x1c, 0x0e, 0xfa, 0x24, 0x4a, 0x98, 0x5a, 0x3f, 0x80, 0xa0, 0x84, 0x3c, 0x58, 0xe6, 0x84, 0x03, 0xed, 0xae, 0xe2, 0x10, 0x9a, 0x70, 0x80, 0xc5, 0x04, 0xd0, 0xc5, 0x05, 0x5a, 0xd0, 0xfb, 0xfe, 0xdb, 0x45, 0xf6, 0x46, 0x99, 0x88, 0xf7, 0x2a, 0x7d, 0x6d, 0xd0, 0x43, 0x8c, 0x79, 0x48, 0x4a, 0x68, 0x4f, 0xc0, 0x2c, 0x1a, 0x6c, 0x17, 0x61, 0x0e, 0x14, 0xcc, 0x7a, 0x5f, 0x8c, 0x62, 0xfa, 0x56, 0x8a, 0x09, 0x67, 0x2d, 0xea, 0x7a, 0xa1, 0x18, 0xa2, 0x23, 0x72, 0x86, 0xf8, 0x84, 0x65, 0xa3, 0xf3, 0xd9, 0xdc, 0x22, 0x0f, 0xf9, 0x5d, 0x3b, 0x34, 0x7e, 0x2d, 0xef, 0xe9, 0x26, 0x20, 0x93, 0xc6, 0x79, 0xaf, 0x8c, 0x27, 0xac, 0x4b, 0x58, 0x28, 0xc6, 0xf1, 0xce, 0xcd, 0x01, 0xff, 0xa6, 0x80, 0x73, 0x46, 0x3b, 0xc1, 0xed, 0x60, 0x90, 0x19, 0x24, 0x43, 0x91, 0x4f, 0x0e, 0x17, 0x9c, 0xdf, 0x8f, 0x45, 0x40, 0xa8, 0x55, 0xd1, 0x45, 0xe5, 0x01, 0xe9, 0xec, 0x5e, 0x87, 0xbe, 0x77, 0xe0, 0xd7, 0x92, 0xec, 0xea, 0xbd, 0x12, 0x17, 0xa9, 0x05, 0xe7, 0xce, 0x26, 0xe4, 0x88, 0x79, 0xbf, 0x93, 0x52, 0xd1, 0xd4, 0x3d, 0xda, 0xe7, 0xc2, 0x1b, 0x82, 0x68, 0x15, 0xde, 0x4a, 0x20, 0xf9, 0x4d, 0xe9, 0xbe, 0xf2, 0x2f, 0x1d, 0xd7, 0xcd, 0x6b, 0x3f, 0x2d, 0xd7, 0x6e, 0x1a, 0x30, 0x4c, 0xcd, 0xfd, 0xc5, 0x12, 0x2b, 0x0f, 0x47, 0xa7, 0x5e, 0xe3, 0xcb, 0x59, 0xcd, 0x4c, 0xa9, 0xb5, 0x1c, 0x73, 0x38, 0x41, 0x0c, 0x26, 0xd8, 0x6e, 0x9c, 0x73, 0x36, 0xc8, 0x75, 0x76, 0xcb, 0x70, 0x84, 0x6f, 0xa6, 0xcc, 0xe9, 0x17, 0x6c, 0x7d, 0x10, 0x35, 0x9d, 0x91, 0x1d, 0x6c, 0x18, 0xfa, 0x8e, 0x57, 0xe2, 0x3f, 0x1b, 0xd8, 0x23, 0x72, 0xe1, 0xac, 0x71, 0x62, 0xc0, 0x43, 0x51, 0x11, 0x02, 0xcf, 0xfb, 0x69, 0x3d, 0x9c, 0x5e, 0x2a, 0x7a, 0x9f, 0x64, 0x27, 0x96, 0x51, 0x77, 0xb2, 0xe9, 0xbe, 0x44, 0x55, 0x26, 0xd8, 0xbf, 0xc3, 0x82, 0x12, 0x67, 0x0d, 0x19, 0x2a, 0xcb, 0x19, 0x8d, 0x46, 0x4d, 0x51, 0xf0, 0x43, 0x26, 0x98, 0xe4, 0x4a, 0xaa, 0x82, 0x00, 0xa4, 0xcd, 0xc4, 0x76, 0xcf, 0xe7, 0xe9, 0xf3, 0xd1, 0xb4, 0x47, 0xc7, 0xcc, 0x9f, 0x32, 0x46, 0xd3, 0x40, 0x6f, 0x6e, 0xfc, 0x23, 0xeb, 0xca, 0xb6, 0xcb, 0xad, 0x95, 0x5d, 0xf6, 0x0a, 0x23, 0x0c, 0x23, 0x18, 0x7d, 0xb3, 0x52, 0x65, 0x4c, 0x69, 0x0b, 0xe8, 0xf8, 0x03, 0xa1, 0x37, 0x10, 0xe5, 0xb8, 0xfb, 0xed, 0x18, 0x05, 0xa1, 0x92, 0x9d, 0x55, 0x53, 0xd7, 0x01, 0xd1, 0x27, 0xc7, 0x32, 0x80, 0x96, 0x46, 0x91, 0x0d, 0x2f, 0xf7, 0x48, 0xcb, 0x8c, 0x5c, 0xde, 0xf6, 0x86, 0x3f, 0x09, 0x3c, 0xa5, 0x51, 0xc3, 0x7b, 0xda, 0x12, 0x9f, 0xcd, 0x71, 0xf0, 0x5e, 0xc2, 0x41, 0xb3, 0xbd, 0xec, 0x26, 0x18, 0x92, 0xa1, 0xb1, 0xbc, 0x17, 0xfc, 0x1d, 0x3c, 0x86, 0x25, 0x85, 0x9b, 0xe6, 0xd2, 0x55, 0xe4, 0x24, 0x0e, 0xff, 0x10, 0x65, 0x3a, 0xef, 0x29, 0x9b, 0x51, 0xc0, 0xb0, 0x56, 0x70, 0xb0, 0x3d, 0xde, 0x95, 0x51, 0x65, 0x7e, 0xa6, 0x82, 0xe0, 0x22, 0xb6, 0x9e, 0xeb, 0x25, 0x85, 0xf3, 0xec, 0x64, 0x45, 0x76, 0x55, 0x97, 0xa4, 0xb4, 0xca, 0xe1, 0x06, 0x0c, 0x86, 0xa5, 0x12, 0x1c, 0xfb, 0x9c, 0x71, 0x79, 0xb8, 0x24, 0xd2, 0xa3, 0x90, 0xdb, 0x32, 0x38, 0xf9, 0x6d, 0x5a, 0x67, 0xb2, 0xaa, 0xa9, 0xa8, 0xa9, 0xdc, 0x13, 0xaa, 0x1b, 0x57, 0x6a, 0x8d, 0xfd, 0x51, 0xdc, 0x52, 0x9b, 0xf4, 0xbe, 0x90, 0x7f, 0xb2, 0x88, 0x68, 0x94, 0xd9, 0x20, 0xba, 0x8b, 0x67, 0x5b, 0x99, 0x7e, 0x1f, 0xc1, 0xfd, 0xd3, 0xdc, 0x90, 0xb8, 0x64, 0x26, 0x04, 0xac, 0xdc, 0x03, 0xd6, 0x3a, 0x64, 0x0f, 0x02, 0xfe, 0x80, 0xcf, 0xce, 0xb9, 0x33, 0x43, 0x08, 0x8e, 0x6a, 0xba, 0x8f, 0x72, 0x98, 0xea, 0x15, 0xde, 0x9d, 0x40, 0x22, 0xc6, 0xec, 0x75, 0x5c, 0xcf, 0xed, 0x62, 0x07, 0xbd, 0xa0, 0x15, 0xc8, 0x2a, 0x84, 0x24, 0xae, 0x7e, 0xb7, 0x41, 0x72, 0x1b, 0x5e, 0x0f, 0xfe, 0xd8, 0x47, 0x35, 0x2d, 0xb1, 0xcd, 0xb0, 0xd2, 0xbd, 0xfc, 0x6d, 0xfb, 0x60, 0xf6, 0x17, 0x77, 0xc1, 0x95, 0x2e, 0x95, 0x7e, 0x52, 0x59, 0x2f, 0x9f, 0x66, 0xfd, 0xe7, 0xc9, 0x2f, 0x0e, 0xb1, 0xb4, 0xd4, 0x25, 0x92, 0xdf, 0x2c, 0xd3, 0xa7, 0x83, 0xdc, 0x36, 0x68, 0xc5, 0xc0, 0xc9, 0x2e, 0x2f, 0x8d, 0x80, 0xf3, 0x61, 0xb4, 0x15, 0x59, 0x04, 0x89, 0x9c, 0xee, 0x00, 0xa4, 0x5e, 0xaf, 0xef, 0x87, 0xe4, 0xcb, 0xd1, 0x82, 0x52, 0xa9, 0x01, 0xd4, 0xf7, 0x2b, 0x68, 0x13, 0x21, 0x35, 0xf0, 0xce, 0x36, 0x69, 0x3b, 0x70, 0x00, 0x35, 0x96, 0x67, 0x49, 0x10, 0x28, 0x86, 0xa8, 0x00, 0x6f, 0xa8, 0x9a, 0x60, 0xee, 0x97, 0xd4, 0xe0, 0x1f, 0x2c, 0xd8, 0xcd, 0xaf, 0xb7, 0xc7, 0x93, 0xea, 0xa0, 0x76, 0x80, 0x75, 0x4f, 0xc3, 0xca, 0x3b, 0x4a, 0x2a, 0xd4, 0xa9, 0x9d, 0x93, 0xad, 0x1e, 0x7f, 0x6e, 0xd9, 0x9d, 0x32, 0x02, 0x55, 0xc6, 0x2b, 0x02, 0xd5, 0x04, 0x73, 0x62, 0x50, 0x07, 0x4d, 0x68, 0xbe, 0x75, 0x19, 0x06, 0x21, 0xdc, 0x78, 0x67, 0xc2, 0xec, 0xb1, 0xc8, 0xbd, 0xe3, 0x54, 0x89, 0xbf, 0x48, 0x1d, 0x84, 0x0f, 0xdc, 0x1a, 0x9d, 0xcb, 0xce, 0x10, 0x9a, 0x75, 0x2e, 0x1c, 0x36, 0xae, 0xa4, 0x96, 0x70, 0x40, 0x62, 0x3a, 0x29, 0x62, 0x57, 0x8a, 0xee, 0x38, 0xa5, 0x6e, 0x13, 0x9a, 0x56, 0x1e, 0x01, 0x16, 0x4a, 0x41, 0xd0, 0x38, 0x74, 0x57, 0x19, 0x08, 0x47, 0x54, 0x05, 0xd5, 0x6a, 0x8d, 0xaa, 0x31, 0xb3, 0xd8, 0x98, 0x3d, 0x53, 0xef, 0xae, 0x27, 0x4e, 0x16, 0x33, 0xf0, 0x2f, 0xfe, 0x22, 0x73, 0xf9, 0xe8, 0xc4, 0xa3, 0x60, 0x0d, 0x84, 0x14, 0x39, 0x3e, 0x00, 0xbd, 0x30, 0xc8, 0x5c, 0xfc, 0xb9, 0x9a, 0xdb, 0xda, 0x49, 0xaa, 0xb0, 0x91, 0xc5, 0x94, 0x11, 0x4b, 0x3b, 0x84, 0x8e, 0x2d, 0xd0, 0x57, 0xa1, 0x94, 0xf9, 0xfd, 0x86, 0x9e, 0xee, 0x22, 0x4c, 0xed, 0x5c, 0x0d, 0x2d, 0xa7, 0x5a, 0xc8, 0x1b, 0xc1, 0x9f, 0x81, 0x9b, 0x7e, 0xf2, 0x30, 0xd6, 0x32, 0xe1, 0x7a, 0xed, 0x4c, 0xb6, 0xd5, 0x8e, 0x93, 0xa7, 0xee, 0xc5, 0xb0, 0x4d, 0x48, 0x14, 0xed, 0x58, 0x25, 0xc5, 0x3c, 0x80, 0xa9, 0x7f, 0x7b, 0xbf, 0x3d, 0x18, 0xf6, 0xbd, 0x32, 0xaa, 0x2e, 0x8c, 0xa6, 0xe9, 0xd9, 0x95, 0xac, 0xb3, 0x29, 0xd2, 0xa7, 0xe9, 0x51, 0x3e, 0xf7, 0x7e, 0x46, 0x8a, 0xd8, 0xcd, 0xc2, 0x12, 0x86, 0x30, 0x8f, 0x0f, 0xa6, 0xce, 0x02, 0x0e, 0xe1, 0xb4, 0xc6, 0xa1, 0xd2, 0x28, 0xda, 0x54, 0x22, 0x39, 0xdd, 0xe2, 0xf1, 0x9b, 0x8a, 0xa9, 0x78, 0xb2, 0x7f, 0x5c, 0xed, 0xed, 0x42, 0xf8, 0xa7, 0x55, 0x85, 0xf9, 0x83, 0x66, 0xa9, 0xcd, 0x86, 0x1d, 0x82, 0x89, 0xc4, 0x52, 0x5a, 0xdb, 0x80, 0x48, 0x38, 0x3f, 0x94, 0x83, 0x62, 0x76, 0x14, 0xd9, 0x20, 0x35, 0x2e, 0xcc, 0xc3, 0x1a, 0x54, 0x17, 0xe6, 0xe3, 0x9e, 0x87, 0xf4, 0xe2, 0x69, 0x0c, 0xea, 0xac, 0x45, 0x10, 0x5e, 0x12, 0x0e, 0x07, 0xc1, 0x52, 0x58, 0x48, 0xe1, 0x8e, 0x10, 0x1b, 0xb1, 0x7c, 0x61, 0x13, 0x4d, 0x60, 0xd5, 0x9e, 0x39, 0x37, 0xbd, 0xda, 0xe9, 0x35, 0xd2, 0xaa, 0x87, 0x72, 0x1c, 0x0a, 0xf0, 0xe1, 0x13, 0x9f, 0x00, 0x81, 0x05, 0x92, 0x0f, 0xd7, 0xb7, 0x9f, 0xbb, 0x9b, 0x4f, 0x69, 0xe8, 0xb2, 0x71, 0x11, 0x06, 0x5c, 0xa9, 0x06, 0x93, 0xaf, 0x09, 0x1f, 0xe0, 0x44, 0x13, 0xe7, 0x17, 0x30, 0xd9, 0x38, 0x7d, 0x35, 0x62, 0x0b, 0xf5, 0x3a, 0x50, 0x8e, 0xc6, 0xf9, 0xc0, 0x77, 0x9d, 0xf8, 0x72, 0x98, 0xd6, 0xba, 0x2a, 0xb4, 0xf7, 0x36, 0x55, 0x92, 0x7d, 0x88, 0xf0, 0x4f, 0xdc, 0xe7, 0xa6, 0xf8, 0xc1, 0xd7, 0x38, 0x59, 0x9a, 0x9f, 0x22, 0x0f, 0x58, 0xfe, 0x7c, 0xe5, 0x73, 0x1a, 0x1e, 0x5d, 0x2f, 0xb9, 0x07, 0x8c, 0x1f, 0xb3, 0x00, 0x2b, 0xe7, 0xa8, 0x7c, 0xec, 0x45, 0xee, 0xc3, 0x0a, 0x53, 0xcd, 0x4f, 0x24, 0x06, 0xef, 0x76, 0x4b, 0xfb, 0x12, 0x4a, 0x5a, 0x73, 0x00, 0xbe, 0x85, 0x9c, 0xc1, 0x0a, 0x35, 0x12, 0x0f, 0x50, 0x14, 0xa5, 0x0a, 0x7f, 0x63, 0x5d, 0x2d, 0x78, 0x94, 0xbb, 0x81, 0x6f, 0x15, 0x42, 0x10, 0x94, 0x6a, 0x36, 0x9d, 0xf3, 0x7e, 0xa4, 0x92, 0x99, 0x3b, 0xa2, 0x3a, 0xf9, 0x58, 0xd8, 0x30, 0x8e, 0x72, 0x3f, 0x18, 0xc1, 0x5f, 0x29, 0x8c, 0x0c, 0xbf, 0x82, 0x59, 0x60, 0xd3, 0x55, 0xec, 0xc4, 0x93, 0x91, 0x07, 0x40, 0xfa, 0x0e, 0xb9, 0xf9, 0xa5, 0xcb, 0x8c, 0x9d, 0x9c, 0x7a, 0x00, 0x01, 0x70, 0x3e, 0x38, 0x09, 0x86, 0xb3, 0xf4, 0xc9, 0xb2, 0x2f, 0xbf, 0xe9, 0x07, 0x47, 0x6a, 0x4e, 0xee, 0x95, 0xb8, 0xf6, 0x76, 0xb9, 0x5b, 0x24, 0xeb, 0x9e, 0x1f, 0xbe, 0xaa, 0xff, 0x66, 0xf3, 0x33, 0x29, 0xd4, 0x20, 0x80, 0x02, 0x4b, 0xf5, 0x96, 0x4a, 0x1a, 0xd4, 0x59, 0x21, 0x71, 0x79, 0xa4, 0xc9, 0x19, 0xe0, 0x99, 0xae, 0x61, 0x63, 0x36, 0xa3, 0x5c, 0x24, 0x29, 0x6f, 0x49, 0xaa, 0xe6, 0x88, 0x53, 0xcf, 0xf6, 0x1e, 0x7b, 0xd9, 0x92, 0x5b, 0xd2, 0xe7, 0x70, 0xea, 0xeb, 0x8f, 0xdd, 0xb6, 0x90, 0xc5, 0x0c, 0xf4, 0xb4, 0xfe, 0xae, 0x63, 0xa9, 0x96, 0xc2, 0xd2, 0x93, 0x6f, 0xaf, 0xe4, 0x1d, 0xdc, 0x90, 0x10, 0x6a, 0xbd, 0xcf, 0xeb, 0x4f, 0xeb, 0xf5, 0xaa, 0xbf, 0xd6, 0xc0, 0xe2, 0x86, 0x6c, 0x77, 0x93, 0x3a, 0x3d, 0x7a, 0x65, 0x6f, 0xdd, 0x1d, 0x31, 0x2b, 0x8a, 0xb6, 0xc3, 0x9a, 0x0f, 0xf5, 0xdf, 0x02, 0xe8, 0x74, 0x81, 0xf8, 0xa7, 0x8f, 0x69, 0xd5, 0x97, 0x76, 0xd7, 0x64, 0x9e, 0x80, 0x94, 0xdd, 0x68, 0xc3, 0x31, 0x17, 0xc1, 0xe1, 0x93, 0xf9, 0x43, 0x24, 0xb0, 0x32, 0x32, 0xce, 0x93, 0x29, 0xa4, 0xaa, 0xa6, 0x37, 0xe5, 0xe7, 0x30, 0x15, 0x19, 0x26, 0x1d, 0x90, 0x23, 0xd2, 0xfe, 0x84, 0xc6, 0xb0, 0x50, 0x07, 0x0a, 0xb7, 0x01, 0xe5, 0xe2, 0x21, 0x30, 0x4d, 0x0b, 0xc2, 0x35, 0xc9, 0x37, 0x99, 0xe1, 0x73, 0x6b, 0xa5, 0x06, 0x67, 0xa6, 0xf9, 0x3a, 0x74, 0xc3, 0x13, 0xd9, 0x17, 0xa0, 0x6a, 0x49, 0xa9, 0x80, 0x46, 0x82, 0xd7, 0xae, 0xd4, 0xcd, 0x53, 0x64, 0x7a, 0xcb, 0xc9, 0xea, 0x68, 0xba, 0x15, 0x02, 0x70, 0xf4, 0xb3, 0x84, 0x17, 0xb8, 0x76, 0x46, 0xec, 0x2d, 0x7d, 0x3e, 0x18, 0xa4, 0x64, 0xeb, 0x37, 0x1e, 0xb7, 0xf0, 0x66, 0x0e, 0xac, 0x03, 0x9d, 0x60, 0x11, 0x05, 0x40, 0xb9, 0x83, 0x72, 0xf0, 0x01, 0xe1, 0xfc, 0xa7, 0x1f, 0x00, 0x73, 0x04, 0x03, 0xa0, 0xe8, 0xe3, 0xea, 0x9f, 0x12, 0x31, 0xdd, 0x6d, 0xf1, 0xff, 0x7b, 0xc0, 0xb0, 0xd4, 0xf9, 0x89, 0xd0, 0x48, 0x67, 0x26, 0x83, 0xce, 0x35, 0xd9, 0x56, 0xd2, 0xf5, 0x79, 0x13, 0x04, 0x62, 0x67, 0xe6, 0xf3, 0xa2, 0xc4, 0xbe, 0xdd, 0xc8, 0xe1, 0xf6, 0xc5, 0x9d, 0xf7, 0x35, 0xc7, 0xa0, 0x19, 0x93, 0xa9, 0x4b, 0x66, 0xfd, 0xb2, 0x98, 0x83, 0xda, 0xbf, 0xc4, 0x49, 0xee, 0x93, 0x53, 0xba, 0x7f, 0x6f, 0x54, 0x3a, 0xb7, 0xe2, 0xe6, 0xfc, 0x4a, 0xe3, 0xfb, 0xba, 0x59, 0x1d, 0x5c, 0xa9, 0x95, 0x8a, 0xee, 0xac, 0xa7, 0x43, 0x33, 0xc7, 0xd0, 0x97, 0x13, 0xd7, 0xcc, 0x5a, 0xdd, 0x81, 0xfd, 0x7f, 0x89, 0x69, 0xc5, 0xea, 0x40, 0xa4, 0x34, 0x7f, 0x1e, 0x6f, 0xe3, 0x7f, 0x36, 0x21, 0x1f, 0x14, 0xd6, 0x5e, 0x4a, 0x2a, 0x0d, 0x8e, 0x7f, 0x81, 0x6b, 0x8d, 0x75, 0x00, 0x08, 0xa4, 0xa6, 0x4d, 0xc7, 0xb9, 0xb0, 0x9a, 0xdc, 0xc2, 0xfb, 0xc2, 0x8c, 0x80, 0x9c, 0x94, 0x34, 0x69, 0x79, 0x6e, 0x8d, 0xe6, 0xae, 0x0f, 0x2e, 0xbe, 0x30, 0xa6, 0x53, 0xd2, 0xb0, 0x2e, 0xdc, 0x0c, 0xc3, 0xfe, 0x99, 0x92, 0x3f, 0x9c, 0xc4, 0x3f, 0xe8, 0xd3, 0xcf, 0x53, 0x4c, 0x05, 0x61, 0x69, 0xeb, 0xc2, 0x9b, 0xaa, 0x9b, 0x98, 0x9f, 0x41, 0x2b, 0x2d, 0x53, 0x0e, 0x47, 0x8c, 0x62, 0x9f, 0x9b, 0xbd, 0x84, 0x5c, 0x3c, 0x98, 0x00, 0x01, 0x43, 0xda, 0x6f, 0x52, 0xbb, 0x79, 0xc2, 0x0a, 0xbd, 0x35, 0x86, 0x14, 0xd9, 0x70, 0x67, 0xfd, 0xb8, 0x3f, 0xf3, 0xaa, 0x00, 0xc1, 0xa1, 0x46, 0x78, 0xb0, 0x12, 0x7f, 0x6d, 0x35, 0x96, 0xf2, 0x54, 0x01, 0xf2, 0xe3, 0xb0, 0x99, 0x61, 0x32, 0x36, 0xf1, 0xd8, 0x8a, 0x2f, 0x3d, 0x8e, 0xdc, 0x1f, 0x04, 0xbc, 0x0c, 0xa4, 0x76, 0xa1, 0xea, 0xa0, 0xff, 0xca, 0x63, 0x9a, 0x1c, 0x90, 0xf9, 0x62, 0x6e, 0xe2, 0x70, 0xf4, 0x0d, 0x45, 0xca, 0x9f, 0x1e, 0x18, 0x76, 0x67, 0xa8, 0x1d, 0xc5, 0xa7, 0xa3, 0x35, 0x9d, 0xfb, 0x52, 0x6b, 0x71, 0x5c, 0xd3, 0x34, 0x70, 0x8d, 0xf5, 0xf5, 0xfd, 0xb7, 0x49, 0xc6, 0x60, 0x50, 0x7c, 0x76, 0xbb, 0x40, 0xe3, 0xcf, 0x3f, 0x47, 0x58, 0x1b, 0x9f, 0x99, 0x45, 0xe7, 0xc5, 0xcc, 0xfe, 0x06, 0xc5, 0xf4, 0x54, 0xd9, 0x0f, 0x0d, 0x67, 0xce, 0xe8, 0x99, 0xbb, 0x27, 0x1b, 0x89, 0x8e, 0xfd, 0xeb, 0x61, 0x69, 0x84, 0x4d, 0x98, 0xf6, 0x90, 0x54, 0x3d, 0x11, 0x58, 0xed, 0xe1, 0x21, 0x7a, 0xcc, 0xb0, 0xa9, 0x40, 0xa6, 0xe1, 0x1a, 0x22, 0xa1, 0x51, 0xec, 0x8c, 0x09, 0x6a, 0xec, 0xe1, 0x44, 0x4a, 0xd8, 0xbf, 0x08, 0x21, 0x29, 0x85, 0xcb, 0xdb, 0x30, 0x12, 0x7b, 0x00, 0x64, 0xd0, 0x70, 0xd8, 0xfb, 0xf2, 0x9f, 0xd2, 0xb7, 0xf9, 0x10, 0x26, 0x03, 0x7d, 0x92, 0xba, 0x3e, 0x2a, 0xad, 0x43, 0x57, 0x09, 0xd8, 0xac, 0x9a, 0x00, 0xec, 0xbb, 0xc9, 0x9d, 0xd9, 0xf2, 0x6f, 0x0f, 0x97, 0xb3, 0x71, 0x75, 0x60, 0xa8, 0xe6, 0x5c, 0x1d, 0x62, 0x28, 0x82, 0x1e, 0x40, 0x2b, 0xe0, 0x0d, 0x93, 0x0e, 0xe8, 0x25, 0xff, 0xf0, 0x0c, 0x9f, 0x25, 0x05, 0x7f, 0x6d, 0x7e, 0xe9, 0x3f, 0x2b, 0x8a, 0x34, 0x53, 0x53, 0x2b, 0x4e, 0x51, 0xb0, 0x4b, 0x85, 0x24, 0x15, 0xc5, 0x5c, 0x0c, 0x4e, 0x83, 0x26, 0xe6, 0x57, 0xe4, 0xd4, 0xae, 0xcc, 0x60, 0x0c, 0x42, 0xa1, 0x6e, 0x7b, 0x69, 0x13, 0xa5, 0x6b, 0x13, 0xde, 0x22, 0x98, 0xe3, 0xb1, 0x2b, 0x3f, 0xea, 0xdf, 0x11, 0x79, 0xb6, 0x57, 0x5b, 0xc7, 0x8b, 0xd6, 0x20, 0xee, 0xf0, 0x5b, 0xb5, 0x05, 0x6d, 0xdc, 0x89, 0xcc, 0x94, 0x37, 0x4c, 0x3f, 0x3e, 0x6b, 0x57, 0x6b, 0x17, 0x08, 0x48, 0x81, 0x5d, 0xe4, 0xec, 0x29, 0xe4, 0x10, 0x63, 0x18, 0x5e, 0x0a, 0x7e, 0xe5, 0xd9, 0x34, 0x6c, 0x18, 0x89, 0x85, 0x96, 0x85, 0xc8, 0x7f, 0xc7, 0xd8, 0x5b, 0x61, 0x90, 0x70, 0xf7, 0x9d, 0xeb, 0x71, 0x03, 0x8c, 0x1e, 0x14, 0xa0, 0x61, 0xe2, 0x42, 0xe7, 0x5c, 0xc5, 0x62, 0x71, 0x40, 0xcd, 0x6f, 0x1d, 0x06, 0x5e, 0x4d, 0x0d, 0xd3, 0x5d, 0x5d, 0xf2, 0x28, 0x96, 0x4f, 0x8a, 0x58, 0x5b, 0x37, 0x67, 0x40, 0x6e, 0xe3, 0xf1, 0x32, 0x22, 0x6c, 0xae, 0x32, 0xbc, 0x0c, 0xc1, 0x65, 0x1f, 0x2f, 0xb1, 0xc6, 0xa9, 0xcd, 0x6c, 0x1b, 0x58, 0xf6, 0x8c, 0x28, 0x31, 0xaf, 0xd8, 0x22, 0xe2, 0xfc, 0x0e, 0x66, 0xa6, 0x3e, 0xe0, 0x6b, 0x69, 0xbf, 0x3c, 0xf5, 0x2d, 0x8c, 0xd0, 0x8c, 0xac, 0x83, 0xce, 0x2d, 0x3e, 0xac, 0xec, 0x3f, 0xfe, 0xcd, 0xb0, 0xc8, 0x28, 0x38, 0xea, 0xe1, 0xc6, 0xe8, 0x82, 0x68, 0x8c, 0xcc, 0x73, 0xf4, 0x00, 0x63, 0x18, 0x0e, 0xde, 0x89, 0xa7, 0x9e, 0xba, 0x91, 0xfb, 0xa3, 0xe7, 0x93, 0x96, 0x27, 0x98, 0x07, 0xe6, 0x73, 0x45, 0x93, 0xc7, 0x7f, 0x50, 0x22, 0x4a, 0xac, 0xe9, 0x36, 0xb4, 0xb5, 0x2f, 0x7f, 0xca, 0xe3, 0x97, 0xac, 0x4c, 0x81, 0x92, 0x81, 0xc0, 0x90, 0x6a, 0x2a, 0x70, 0xbc, 0x6d, 0xcf, 0xb6, 0x8e, 0x4e, 0x68, 0x77, 0xe2, 0xc8, 0xd3, 0xee, 0x9c, 0x84, 0x23, 0xab, 0x97, 0x3d, 0x3c, 0xdb, 0xde, 0x22, 0x9d, 0xc9, 0x1f, 0x7c, 0x7c, 0xa5, 0x5c, 0x90, 0x18, 0x85, 0xe4, 0xc7, 0x4b, 0xa9, 0x82, 0x0c, 0x5e, 0x03, 0xf4, 0x76, 0x22, 0xf6, 0x9e, 0x27, 0x3c, 0x5f, 0x80, 0x74, 0xc1, 0xd2, 0x66, 0x46, 0x03, 0x26, 0x5e, 0xbf, 0xaa, 0x33, 0x6f, 0x21, 0x06, 0xda, 0x88, 0xec, 0xa3, 0x46, 0xb7, 0x47, 0x1e, 0x72, 0x9b, 0xa1, 0x38, 0xeb, 0x1c, 0x98, 0x29, 0xd8, 0x59, 0x1a, 0x37, 0x37, 0xe2, 0xca, 0x86, 0x69, 0x28, 0xa5, 0x32, 0xf1, 0x32, 0xe5, 0x9b, 0x79, 0x91, 0x25, 0x00, 0x15, 0x95, 0xc7, 0x50, 0xcc, 0xc1, 0x93, 0x3c, 0x55, 0x7d, 0xa0, 0x91, 0x1e, 0x0b, 0x78, 0xc5, 0x93, 0xbc, 0x77, 0xcf, 0x9c, 0x64, 0x74, 0x3c, 0x67, 0x0b, 0xa4, 0x80, 0x69, 0xe5, 0xba, 0x8a, 0x9f, 0x85, 0x53, 0x9b, 0x1a, 0x4d, 0x92, 0x57, 0xba, 0x29, 0x07, 0x1d, 0x3a, 0x7d, 0xd6, 0x94, 0x6c, 0x5b, 0x15, 0x86, 0xc6, 0xfa, 0x75, 0xf2, 0x1e, 0x63, 0x25, 0x5c, 0xb2, 0x6e, 0xf3, 0x68, 0x6b, 0xed, 0xb5, 0xa7, 0x63, 0x27, 0xe7, 0xb1, 0xa4, 0x88, 0x95, 0x74, 0x33, 0x96, 0x7c, 0xcb, 0x4d, 0x27, 0x6c, 0x53, 0xf0, 0xd1, 0xf0, 0x7a, 0x9d, 0xa3, 0x31, 0xd8, 0x5d, 0x12, 0x18, 0xc3, 0x02, 0x36, 0xb3, 0x1d, 0xaf, 0x37, 0xda, 0x71, 0x9a, 0x02, 0x12, 0x3e, 0x11, 0x40, 0xb1, 0x93, 0xbb, 0x88, 0x43, 0xdc, 0x21, 0xd3, 0x2d, 0xfc, 0x6c, 0x31, 0x90, 0x9c, 0x70, 0xbb, 0x70, 0xc2, 0xea, 0xc9, 0x16, 0xa5, 0x06, 0x65, 0xb2, 0xc0, 0x25, 0xff, 0x45, 0x25, 0xdc, 0x62, 0xbe, 0x14, 0x40, 0xe6, 0x63, 0xcc, 0x61, 0xe7, 0x73, 0xa1, 0x14, 0x77, 0x0a, 0x4f, 0xf6, 0x50, 0x44, 0x8e, 0xad, 0x0c, 0xa5, 0xe6, 0x71, 0x99, 0xb9, 0xc5, 0xcc, 0xe7, 0xf7, 0xcf, 0x9d, 0xe3, 0xeb, 0x75, 0x63, 0xa9, 0x95, 0xc9, 0xb8, 0xf5, 0x0c, 0x90, 0x1c, 0xdb, 0x66, 0x99, 0xf4, 0xb9, 0xdc, 0x4e, 0xd2, 0x69, 0x2a, 0x89, 0xf7, 0xbb, 0x35, 0xa9, 0x17, 0x22, 0xf0, 0xe4, 0x5c, 0xad, 0x80, 0xdf, 0xad, 0x39, 0x9f, 0x7b, 0x2f, 0xe6, 0x3e, 0xf2, 0x0c, 0xc7, 0x6e, 0x24, 0x74, 0xde, 0x80, 0x2b, 0xe2, 0x47, 0x6b, 0x35, 0xa1, 0xb3, 0x6f, 0x93, 0x8e, 0x18, 0xf8, 0x0d, 0x1f, 0xa7, 0xc5, 0x79, 0xa4, 0xff, 0x49, 0x8c, 0xcd, 0xa0, 0x52, 0xef, 0x6d, 0xa2, 0xe8, 0x95, 0x7d, 0xa7, 0x78, 0x4d, 0x64, 0x0e, 0x32, 0x93, 0x76, 0x69, 0xaf, 0xac, 0xba, 0x31, 0xd7, 0xf2, 0xf0, 0xb9, 0x02, 0x6c, 0xd2, 0x61, 0x5d, 0xa1, 0x9b, 0x0c, 0x90, 0xae, 0xc6, 0xd4, 0x9d, 0x97, 0x18, 0xfc, 0x0b, 0xdb, 0xe0, 0x25, 0x45, 0x4b, 0x7e, 0xc5, 0x3d, 0x1b, 0x22, 0xd6, 0x54, 0x3a, 0xd6, 0xcb, 0x7e, 0xdf, 0xbf, 0xc8, 0xa1, 0x65, 0x9f, 0x12, 0x3f, 0x58, 0x9f, 0xc5, 0x55, 0xd0, 0x4c, 0xc5, 0x83, 0xfd, 0xdf, 0xf6, 0x6c, 0x04, 0xc1, 0xb0, 0x60, 0x09, 0x4e, 0x6d, 0x39, 0x8d, 0xda, 0xc5, 0x82, 0xfb, 0xf1, 0x9d, 0xdf, 0x7d, 0xe3, 0x9b, 0xa8, 0x14, 0x80, 0xdd, 0xd8, 0xe8, 0x21, 0xea, 0x26, 0xdd, 0xe8, 0xe8, 0x71, 0x66, 0x48, 0x10, 0x61, 0x9e, 0xc7, 0x60, 0x4c, 0x95, 0x02, 0x8f, 0x56, 0xe7, 0xf2, 0x46, 0xdd, 0x94, 0x6f, 0x8d, 0x14, 0x0b, 0xf2, 0x84, 0xed, 0x88, 0x9f, 0x53, 0x3d, 0xa0, 0x83, 0x63, 0x1b, 0x1b, 0x1a, 0xcf, 0x88, 0x01, 0x14, 0x15, 0x56, 0xf7, 0x58, 0x12, 0x42, 0xcc, 0x4a, 0x2d, 0x64, 0x50, 0x49, 0xd2, 0xc9, 0x65, 0x7c, 0x22, 0x5e, 0x58, 0xcf, 0xe8, 0x0f, 0x71, 0x38, 0xcf, 0x31, 0xc8, 0x3f, 0xd3, 0x1d, 0x5b, 0xbd, 0xf6, 0x1e, 0x5e, 0xe4, 0x34, 0x8e, 0xd2, 0x7f, 0xb8, 0x3b, 0x59, 0x7b, 0x50, 0x10, 0x49, 0xa7, 0x1f, 0xf1, 0xff, 0xb8, 0x92, 0xe6, 0x76, 0x90, 0x95, 0x7c, 0x18, 0xc0, 0x06, 0x68, 0xd3, 0x4b, 0x69, 0x6e, 0x70, 0xad, 0xde, 0x81, 0x20, 0x1b, 0x51, 0x2c, 0x58, 0x0d, 0xf1, 0x30, 0xdf, 0xfa, 0xe3, 0x6f, 0x26, 0x62, 0x37, 0x08, 0xd7, 0x12, 0x1b, 0xc4, 0xb0, 0xa4, 0x4e, 0xb1, 0x92, 0x45, 0xd8, 0x0c, 0xd5, 0xbb, 0xf9, 0x64, 0xdf, 0xa6, 0x5f, 0xfd, 0xf5, 0x05, 0x9b, 0x73, 0x50, 0xfd, 0xd6, 0x9f, 0x74, 0xd6, 0xc0, 0xbe, 0xbd, 0x47, 0xca, 0xd0, 0x3b, 0xf3, 0x95, 0x3f, 0xc0, 0x33, 0xaa, 0xc1, 0x36, 0x16, 0x6b, 0x7f, 0x36, 0xa6, 0x4a, 0x77, 0xd7, 0x6d, 0x38, 0x1f, 0xc4, 0x38, 0x60, 0x4b, 0x92, 0x1b, 0x16, 0x50, 0x50, 0xb5, 0x0a, 0x6a, 0x5f, 0xb5, 0xc2, 0x5b, 0x84, 0x9d, 0x47, 0x55, 0x3b, 0xc7, 0x1e, 0x1a, 0x4e, 0xa5, 0x79, 0x62, 0xa7, 0x4c, 0xaf, 0x7d, 0x62, 0x34, 0xea, 0x39, 0x27, 0x39, 0x1f, 0x06, 0xb7, 0xe6, 0x44, 0x58, 0xc4, 0xf3, 0xbd, 0x4d, 0x06, 0x0c, 0x17, 0x90, 0x8b, 0xd5, 0xf8, 0x7d, 0x4f, 0x2a, 0x56, 0x86, 0x0c, 0xab, 0xe8, 0xd5, 0x53, 0x78, 0xda, 0x32, 0xdc, 0x39, 0xc5, 0x28, 0x1b, 0x62, 0xde, 0x63, 0x13, 0xb5, 0x6e, 0x5d, 0x6f, 0x08, 0x82, 0x3a, 0xcf, 0x48, 0xe3, 0xf0, 0x60, 0xbe, 0x48, 0xaa, 0xaf, 0x91, 0xcb, 0x6f, 0xbf, 0x8c, 0x9a, 0xfe, 0x59, 0x22, 0xef, 0xfd, 0xa3, 0xaf, 0x42, 0x53, 0xf4, 0x01, 0xbd, 0xd3, 0xe7, 0x17, 0xf0, 0x1a, 0xae, 0x28, 0xc6, 0xba, 0xa9, 0xe8, 0xb7, 0x98, 0x37, 0x06, 0x40, 0x92, 0xcd, 0xf9, 0x90, 0x65, 0x45, 0xfc, 0x85, 0xce, 0x78, 0x57, 0xd6, 0xf0, 0x0e, 0xe1, 0x92, 0xf6, 0x95, 0xc3, 0xc9, 0xf9, 0xd1, 0x7e, 0x88, 0x24, 0x53, 0x30, 0x0b, 0x16, 0x4d, 0x13, 0x2f, 0x87, 0xa5, 0x46, 0x26, 0x2f, 0x48, 0xd0, 0x6e, 0xe3, 0xc1, 0xe2, 0x04, 0x02, 0x0a, 0x5c, 0xd5, 0x0f, 0xa2, 0x93, 0x75, 0x9f, 0xdf, 0x51, 0x13, 0x76, 0x86, 0x1e, 0xad, 0xed, 0x99, 0xbe, 0x80, 0x97, 0x70, 0xfb, 0xc3, 0x23, 0x0b, 0xa5, 0x94, 0x84, 0xa7, 0xd6, 0x33, 0x50, 0x8f, 0x7a, 0x6e, 0x66, 0x35, 0x0f, 0x5c, 0xd4, 0x81, 0xaa, 0x4e, 0xf8, 0x69, 0x3b, 0x03, 0xe5, 0xc2, 0x11, 0x1b, 0x07, 0x56, 0xa1, 0xce, 0x0b, 0x36, 0x83, 0xde, 0xf9, 0x52, 0xbd, 0xca, 0xa3, 0x46, 0x44, 0x45, 0x43, 0x77, 0xc0, 0xe6, 0x60, 0x5f, 0x90, 0x21, 0xf1, 0x25, 0x0e, 0x76, 0xc5, 0x71, 0x14, 0xe8, 0x22, 0x7e, 0xbf, 0xb1, 0xad, 0x71, 0x72, 0x34, 0x89, 0xe9, 0x1e, 0x33, 0xc3, 0xd7, 0xc1, 0x42, 0xee, 0x90, 0x2d, 0x7c, 0x0a, 0x20, 0x0b, 0x74, 0xab, 0xe1, 0x1f, 0x6f, 0x57, 0x4d, 0xce, 0xd0, 0x2f, 0x11, 0xdd, 0xd3, 0xd1, 0x62, 0x7b, 0x7e, 0x7e, 0x94, 0x82, 0xd5, 0x78, 0xe9, 0xfa, 0x4e, 0xae, 0xa7, 0xdf, 0x84, 0x9b, 0x6d, 0x23, 0x2f, 0x6c, 0xc6, 0xf7, 0x54, 0x61, 0xff, 0x47, 0xb9, 0x75, 0x36, 0x83, 0x9c, 0x41, 0xb4, 0xa5, 0xa4, 0x1e, 0x7d, 0x70, 0x18, 0x8a, 0x24, 0xf5, 0x4f, 0xcd, 0xe4, 0x5c, 0x68, 0xdc, 0xed, 0xe1, 0x3b, 0x7d, 0xfc, 0x1d, 0x8e, 0xac, 0x2e, 0x87, 0x8d, 0x3d, 0x16, 0x3a, 0x74, 0xc4, 0x0d, 0xf9, 0x8f, 0xb2, 0xc9, 0x70, 0x64, 0xc0, 0x32, 0xbc, 0x2f, 0x91, 0x70, 0x2e, 0x8e, 0x92, 0x49, 0x4c, 0x7e, 0x26, 0xaa, 0x19, 0x86, 0x00, 0x83, 0x97, 0x32, 0xcf, 0xd8, 0x89, 0xc3, 0x21, 0x16, 0x7d, 0x25, 0x81, 0xa3, 0x0a, 0x21, 0xe3, 0xb8, 0x57, 0xd4, 0x43, 0x73, 0xdc, 0x60, 0x88, 0x28, 0x6d, 0xe1, 0xae, 0xf9, 0x74, 0xa3, 0x24, 0xa6, 0x7e, 0x92, 0x73, 0xa6, 0xf9, 0xf1, 0x21, 0x76, 0x3b, 0x4f, 0xd5, 0x31, 0xc7, 0xb7, 0xbb, 0x61, 0xcc, 0x28, 0x2a, 0x14, 0xef, 0x44, 0x85, 0x33, 0x4a, 0x4c, 0x5f, 0x10, 0xb5, 0x4c, 0xe2, 0x3e, 0x44, 0x93, 0x71, 0xa5, 0x11, 0x66, 0x8c, 0xd5, 0x3b, 0xf6, 0xf4, 0x9b, 0x2e, 0x8f, 0x10, 0xd2, 0x25, 0x11, 0x90, 0x7c, 0xee, 0xa4, 0x50, 0x12, 0xed, 0xa8, 0x7f, 0x18, 0x64, 0xeb, 0x00, 0xf3, 0xf2, 0x1f, 0x10, 0xff, 0x59, 0x8b, 0x2a, 0xdd, 0x84, 0x00, 0x27, 0x0a, 0xc8, 0x0f, 0xaa, 0xb6, 0x6a, 0x79, 0xbb, 0xd3, 0x61, 0xe7, 0xb2, 0x6c, 0x5e, 0xdb, 0x57, 0x38, 0x0a, 0xe7, 0x47, 0x6f, 0x8e, 0x1d, 0x9a, 0xdc, 0x59, 0xc6, 0xc2, 0x34, 0x1d, 0x57, 0xb6, 0xa6, 0x1b, 0xa0, 0x51, 0xb3, 0xa1, 0x47, 0xf4, 0x40, 0xd1, 0x75, 0x73, 0xe9, 0xa3, 0xcf, 0x2f, 0x99, 0x2e, 0xa8, 0x7f, 0x57, 0x23, 0x74, 0x55, 0x63, 0x9a, 0x80, 0x1e, 0x82, 0x11, 0xe1, 0xe9, 0x96, 0xb1, 0xab, 0xcc, 0x71, 0xd4, 0x63, 0x83, 0xeb, 0xc5, 0xb6, 0x5b, 0x32, 0xc6, 0x6a, 0x4f, 0x62, 0x58, 0x96, 0x70, 0x56, 0xb6, 0x0e, 0x8a, 0xbd, 0xa3, 0x22, 0x04, 0x70, 0x65, 0x88, 0x08, 0x03, 0x12, 0x96, 0xe4, 0x99, 0x0a, 0xb4, 0xb0, 0xfd, 0xc5, 0x12, 0x31, 0xef, 0xcf, 0x96, 0xfe, 0xbc, 0x10, 0x19, 0xe1, 0x12, 0x51, 0xd2, 0x80, 0x11, 0xfc, 0x12, 0x3d, 0xa5, 0x23, 0x32, 0x5a, 0x14, 0xc4, 0xca, 0x61, 0xd3, 0x4c, 0x24, 0xc3, 0x9e, 0x59, 0xf1, 0xbf, 0xc7, 0xc4, 0x3a, 0x85, 0xcf, 0xdf, 0x99, 0x9c, 0x33, 0xfb, 0xa8, 0x81, 0x88, 0x2e, 0xba, 0x91, 0xca, 0x53, 0xc9, 0x28, 0xf2, 0x51, 0xb0, 0x0b, 0xc6, 0xa1, 0x9a, 0x03, 0xf5, 0x0a, 0xbb, 0xcb, 0x63, 0xaf, 0x3e, 0x2c, 0xc2, 0x4c, 0x7e, 0x67, 0x62, 0xbd, 0x78, 0xd3, 0x4a, 0xc0, 0x81, 0xc7, 0x87, 0xfb, 0x34, 0xba, 0xc4, 0x41, 0xaf, 0xa9, 0x1b, 0x11, 0xff, 0xba, 0x2b, 0x5f, 0xd8, 0x1e, 0x6b, 0x97, 0x89, 0x3b, 0xbd, 0xe0, 0x30, 0x0b, 0x47, 0x9e, 0x2a, 0xbf, 0x7e, 0x3a, 0xce, 0xa9, 0x83, 0x25, 0x5b, 0x58, 0xb3, 0x1a, 0x2e, 0x05, 0x7a, 0xa4, 0x39, 0x2e, 0x67, 0xe1, 0xb0, 0x80, 0x86, 0x85, 0x05, 0xfa, 0xea, 0x21, 0x17, 0x50, 0x89, 0xa6, 0xa7, 0x8d, 0x4d, 0x25, 0x0b, 0xfd, 0x67, 0xd8, 0x26, 0x4a, 0xe7, 0x66, 0x97, 0xe5, 0x89, 0x63, 0x31, 0xa7, 0xd2, 0x16, 0xab, 0xb9, 0x5c, 0x80, 0x99, 0xb1, 0x6f, 0x99, 0x9b, 0xfd, 0xd0, 0xdd, 0xd5, 0x85, 0xde, 0x07, 0x9f, 0x8c, 0xda, 0x1d, 0x7d, 0xd7, 0x87, 0xac, 0x51, 0x12, 0xf3, 0x55, 0xcf, 0x6f, 0x94, 0x88, 0x32, 0x90, 0x96, 0x90, 0x2d, 0xa7, 0x74, 0xd0, 0x25, 0xdc, 0xc6, 0x4c, 0x9d, 0xef, 0x5a, 0x6b, 0xf2, 0x1e, 0x85, 0xfb, 0x48, 0x49, 0xbb, 0x75, 0xc4, 0x54, 0x5e, 0x82, 0xfc, 0xcd, 0xd4, 0xbf, 0xab, 0xce, 0xdc, 0xbd, 0xaa, 0x25, 0x22, 0x4d, 0x1b, 0xb3, 0x11, 0xfa, 0xe7, 0x12, 0xe8, 0xd6, 0x6c, 0x7b, 0x10, 0x7a, 0x6f, 0xe6, 0xad, 0x48, 0x58, 0x72, 0x73, 0xf3, 0x9e, 0x08, 0xba, 0x42, 0x80, 0x3b, 0xd5, 0x10, 0xf6, 0x73, 0xa0, 0x98, 0xe7, 0x4b, 0x59, 0xef, 0x9c, 0x37, 0xb1, 0xd2, 0x75, 0x6a, 0x22, 0xa2, 0xda, 0xf7, 0x82, 0xad, 0x75, 0x36, 0xd9, 0xaf, 0x9e, 0x69, 0x70, 0x99, 0x17, 0x9f, 0x2a, 0x90, 0xfa, 0xd9, 0x17, 0x39, 0xef, 0x6c, 0x47, 0x34, 0xa2, 0xa6, 0xdc, 0xe6, 0x75, 0xb4, 0x63, 0x7c, 0x72, 0xc3, 0x65, 0x2c, 0x83, 0x66, 0x38, 0xbe, 0xe5, 0x38, 0x1b, 0x4c, 0xda, 0xc2, 0x83, 0x46, 0x9e, 0x9f, 0xaf, 0xb8, 0x9d, 0xdd, 0x82, 0xd0, 0xe3, 0xa7, 0x92, 0x9b, 0xd4, 0x21, 0x7d, 0x0f, 0x1d, 0x94, 0x7c, 0x4e, 0xea, 0xcb, 0x3a, 0x29, 0x5a, 0xbd, 0xe6, 0xe3, 0x2f, 0x6c, 0x86, 0x38, 0xcb, 0x0c, 0x8f, 0x9e, 0x58, 0x68, 0xb3, 0xcb, 0x46, 0x82, 0xfb, 0x77, 0xfa, 0x79, 0x15, 0x63, 0xc4, 0xb0, 0xef, 0x9a, 0x12, 0x2d, 0x85, 0xf7, 0xe4, 0x3f, 0xf7, 0xe7, 0x80, 0x64, 0xde, 0x70, 0x67, 0x69, 0xe0, 0x73, 0x87, 0xd3, 0x82, 0x2e, 0xb2, 0x7e, 0x3e, 0x04, 0x4f, 0x84, 0xd6, 0x81, 0x50, 0x60, 0xe7, 0x99, 0x64, 0x54, 0xc1, 0x30, 0x6d, 0x08, 0x76, 0xe0, 0x34, 0x73, 0x31, 0xf6, 0x5b, 0xfe, 0xc9, 0xbd, 0x94, 0xe7, 0x96, 0x00, 0x11, 0xe4, 0x84, 0xca, 0x3c, 0x0a, 0x65, 0x70, 0xa7, 0xec, 0x8c, 0xd1, 0x46, 0x07, 0x97, 0xdd, 0xdc, 0x5e, 0x8c, 0x54, 0xb3, 0x61, 0x28, 0xd0, 0x90, 0x13, 0x73, 0x06, 0xe6, 0x6c, 0x98, 0x49, 0x4a, 0xfc, 0xf4, 0x50, 0x27, 0xd2, 0x6d, 0x38, 0xb3, 0x9c, 0x05, 0xcc, 0x21, 0x10, 0xae, 0x05, 0x19, 0x8a, 0x61, 0xcd, 0x65, 0xf6, 0x6a, 0x08, 0xed, 0xf0, 0x06, 0xd5, 0xe5, 0x2a, 0x2f, 0x11, 0x45, 0x0e, 0xb7, 0x1e, 0x79, 0xa5, 0x94, 0xe2, 0x5a, 0xb8, 0x7b, 0x12, 0x5e, 0x35, 0xb0, 0xb0, 0x0b, 0xd3, 0x1c, 0xd2, 0xb2, 0xf9, 0xa0, 0xa6, 0x59, 0xdd, 0xa9, 0xb3, 0xf9, 0xe9, 0x04, 0x61, 0xea, 0x62, 0xf4, 0xbc, 0x9b, 0x4b, 0x82, 0x75, 0x86, 0x87, 0x15, 0x29, 0x63, 0x3f, 0x42, 0xe6, 0x9c, 0x83, 0xe5, 0xec, 0x02, 0x34, 0x71, 0xb0, 0xbe, 0x21, 0x84, 0x27, 0x8a, 0x70, 0xbf, 0x40, 0x21, 0x40, 0xd4, 0xb3, 0xf3, 0x8c, 0xe0, 0xf9, 0x1e, 0x52, 0xfc, 0x9b, 0x9a, 0xf5, 0x0e, 0xb0, 0xb3, 0xe1, 0xe6, 0xa1, 0xbd, 0x6d, 0x86, 0x30, 0x03, 0x05, 0xc0, 0xb9, 0x00, 0x88, 0x07, 0xb7, 0xd2, 0xef, 0x7f, 0x89, 0xeb, 0x30, 0x56, 0x77, 0x0a, 0x61, 0x57, 0xf0, 0x69, 0x21, 0xbc, 0x15, 0x38, 0x34, 0x44, 0x7c, 0x4b, 0x6d, 0x86, 0x2d, 0x10, 0xd1, 0x85, 0xf1, 0xc3, 0xf9, 0x84, 0xcd, 0xe5, 0xb8, 0x1c, 0xc9, 0xea, 0xfe, 0x8b, 0xf5, 0x32, 0xfc, 0x4f, 0xae, 0x3a, 0x89, 0xf4, 0x1e, 0x14, 0xc5, 0x2a, 0x02, 0x14, 0xfc, 0x1a, 0xb0, 0xcd, 0xcd ],
-const [ 0xd2, 0x79, 0x94, 0x41, 0xab, 0xcc, 0x3b, 0xa3, 0xbd, 0x2a, 0xa7, 0x15, 0x89, 0x9e, 0xff, 0x2f, 0x18, 0xa1, 0x2c, 0x45, 0x3c, 0x48, 0x3e, 0x3a, 0x18, 0xbb, 0x0c, 0x99, 0xe2, 0xe9, 0x1b, 0xe1, 0xe8, 0x7a, 0xc2, 0x21, 0xd1, 0x05, 0x8b, 0xc5, 0x26, 0x84, 0xdb, 0xb0, 0x11, 0x05, 0xd6, 0x8b, 0x64, 0xa2, 0x7d, 0x5c, 0xdc, 0xb2, 0x19, 0x5a, 0xa8, 0x41, 0xdd, 0x00, 0x25, 0xbe, 0xc7, 0x60, 0xec, 0xf4, 0xc7, 0xba, 0x0e, 0x3c, 0x23, 0x4d, 0x9e, 0xf0, 0x1a, 0x6d, 0x70, 0x22, 0xc8, 0xd6, 0x21, 0x8e, 0x49, 0x40, 0x57, 0xce, 0x21, 0x33, 0x4a, 0xcd, 0xdb, 0x1d, 0x84, 0x7e, 0xf1, 0xa2, 0xe5, 0xce, 0xec, 0x33, 0xe9, 0xd7, 0xcc, 0xe2, 0x2e, 0x56, 0xaa, 0x74, 0x30, 0x5f, 0x9c, 0xb8, 0x57, 0x4f, 0xd9, 0x18, 0x35, 0x03, 0x1e, 0x6e, 0x08, 0x47, 0x50, 0x19, 0x87, 0x91, 0x62, 0x4f, 0xdb, 0xf0, 0x79, 0xb4, 0xeb, 0x3f, 0x4e, 0x2c, 0xdc, 0x9e, 0xd4, 0xee, 0xd8, 0x23, 0x1c, 0xdb, 0x0f, 0xcc, 0x75, 0x0d, 0xfc, 0xb8, 0xd7, 0xb2, 0xea, 0x97, 0x82, 0x1b, 0xb6, 0x60, 0xe2, 0x10, 0xd6, 0x42, 0xb6, 0x67, 0x9a, 0xdc, 0x71, 0xd5, 0xb2, 0xb0, 0xe0, 0x03, 0xf1, 0xd5, 0x0e, 0xe4, 0x51, 0xed, 0x65, 0x47, 0x36, 0x57, 0x15, 0xa8, 0xf7, 0xa6, 0xba, 0x4c, 0x9a, 0x51, 0x39, 0x8d, 0xdf, 0xab, 0xea, 0x72, 0x81, 0x16, 0xfd, 0x82, 0xb8, 0x74, 0x16, 0xda, 0x02, 0xdf, 0x3b, 0x7e, 0x23, 0x9a, 0xf0, 0xed, 0x6a, 0x47, 0xa0, 0xf8, 0x37, 0x5a, 0x3f, 0xd3, 0xba, 0xcd, 0x2e, 0x6d, 0xfd, 0x16, 0x5f, 0xfd, 0x25, 0x56, 0xb9, 0xdd, 0xf5, 0xd3, 0xbe, 0x9c, 0x93, 0xa8, 0x6b, 0x4f, 0x8f, 0xbb, 0x5f, 0x27, 0x21, 0xf0, 0x40, 0x49, 0xb2, 0x9c, 0x5b, 0xd9, 0x9e, 0x3d, 0x8a, 0x58, 0x39, 0x68, 0x5b, 0x31, 0x10, 0x02, 0x6e, 0x8e, 0x71, 0xb3, 0x1f, 0x70, 0x2d, 0x98, 0x65, 0xff, 0x9c, 0x38, 0xfa, 0x1f, 0xe2, 0xba, 0xbd, 0x43, 0x71, 0x55, 0x54, 0x86, 0xcf, 0x07, 0x15, 0xf8, 0x9a, 0x8a, 0x27, 0x35, 0xc9, 0x84, 0xe4, 0x3d, 0x34, 0xfe, 0x82, 0x7f, 0x57, 0x17, 0xf3, 0x37, 0x52, 0xf9, 0x09, 0xfa, 0x35, 0x0d, 0xde, 0x8f, 0x7b, 0x6b, 0x73, 0x01, 0xd4, 0x95, 0x97, 0xf2, 0x28, 0x64, 0x0b, 0x32, 0xd8, 0x42, 0xe3, 0x91, 0x47, 0x9a, 0x2f, 0xf1, 0x99, 0x8d, 0xdb, 0x9f, 0xba, 0xe7, 0xd4, 0xe3, 0xa2, 0x51, 0x6c, 0xd5, 0xd8, 0xc8, 0x00, 0x73, 0x35, 0x4d, 0xd8, 0xf1, 0xeb, 0xde, 0x4e, 0x50, 0xc6, 0xa6, 0x33, 0x32, 0xb1, 0x71, 0x6e, 0xed, 0x7b, 0x62, 0xe6, 0xde, 0xdb, 0xe8, 0xa3, 0x00, 0xb2, 0xee, 0x30, 0xbc, 0x91, 0x52, 0x43, 0x03, 0x7b, 0x99, 0x9f, 0x9b, 0xec, 0xe1, 0x3a, 0xb6, 0x19, 0x16, 0x9b, 0xc9, 0x7a, 0x69, 0x87, 0x9b, 0x86, 0xfe, 0xdc, 0x9d, 0xbe, 0xe5, 0xbd, 0x79, 0xec, 0x4c, 0xef, 0xed, 0xad, 0xf3, 0x83, 0xda, 0x2d, 0xe0, 0xb6, 0x98, 0x32, 0x53, 0x15, 0x8d, 0x5c, 0xfc, 0xe5, 0xfe, 0xab, 0x6c, 0xc1, 0x24, 0x41, 0xca, 0x85, 0x83, 0x69, 0xc7, 0x6b, 0x77, 0xd9, 0xd3, 0x74, 0x10, 0x34, 0x92, 0x0a, 0x1f, 0xd3, 0x89, 0xe3, 0x91, 0xc5, 0x1e, 0x28, 0xfc, 0x14, 0xbf, 0xd7, 0x78, 0x4a, 0x61, 0x66, 0xb0, 0x34, 0x2c, 0xa9, 0x39, 0xe6, 0x74, 0xf5, 0x22, 0xff, 0xec, 0x86, 0xcc, 0x2f, 0x16, 0x1e, 0xfb, 0xf6, 0xfe, 0xef, 0x2e, 0xae, 0x28, 0xbb, 0x2c, 0xcb, 0xc7, 0x3a, 0xe0, 0x62, 0x2f, 0xbc, 0x66, 0xe8, 0x8d, 0x0f, 0x66, 0x3d, 0xd6, 0xa3, 0xa1, 0xe8, 0xfd, 0xec, 0xc9, 0xa5, 0x69, 0x08, 0x96, 0x1d, 0xa6, 0xa2, 0x16, 0xf4, 0x5b, 0x16, 0x45, 0x08, 0x7c, 0xd5, 0xdd, 0xf8, 0xc0, 0x0c, 0x6f, 0xe4, 0x56, 0x80, 0xb3, 0x74, 0xd4, 0xbc, 0x1d, 0x1c, 0x70, 0x6f, 0xb0, 0x9e, 0x72, 0x10, 0x17, 0xd0, 0xe9, 0xc3, 0xf2, 0x9f, 0x9d, 0x80, 0x6e, 0x54, 0x46, 0x72, 0x18, 0x16, 0xfb, 0x9d, 0xf3, 0xb0, 0xed, 0xc4, 0xc7, 0x95, 0x55, 0x8a, 0xbd, 0x21, 0xab, 0xd7, 0x29, 0x22, 0x19, 0x7d, 0xa7, 0x97, 0x2f, 0x1c, 0x69, 0xb8, 0xd8, 0x43, 0xcf, 0x36, 0x8d, 0xd7, 0x38, 0xc3, 0xc8, 0xb9, 0x19, 0xd5, 0xbc, 0xa3, 0x4c, 0xa7, 0x43, 0x53, 0xaa, 0x81, 0x18, 0xec, 0xdb, 0x3a, 0x46, 0x99, 0x6d, 0xfb, 0xe0, 0x73, 0x24, 0x45, 0xf3, 0xa5, 0x91, 0x36, 0xb9, 0xcd, 0xe6, 0x08, 0x0f, 0xa6, 0x09, 0xda, 0x29, 0xe5, 0xe7, 0xb3, 0x85, 0x60, 0x0b, 0xc4, 0x1d, 0x75, 0x6f, 0xed, 0xe1, 0xaa, 0x92, 0x83, 0x64, 0x91, 0xca, 0x51, 0xd6, 0xef, 0xdc, 0xdc, 0x32, 0x1c, 0xca, 0xec, 0xb8, 0xad, 0xec, 0x47, 0x9e, 0x51, 0x42, 0xc0, 0x03, 0xf9, 0x09, 0x70, 0x24, 0x3c, 0x8c, 0x44, 0xd2, 0xf9, 0x3d, 0xb8, 0x24, 0x3e, 0x04, 0xe1, 0x69, 0x68, 0xd7, 0xb1, 0x60, 0x8c, 0x8b, 0x77, 0xac, 0x16, 0xea, 0xa5, 0x82, 0xb0, 0x05, 0xd6, 0xa5, 0x66, 0xcc, 0x0f, 0x94, 0x07, 0xdb, 0x45, 0x01, 0xce, 0x97, 0x20, 0x86, 0x41, 0x7a, 0xff, 0x94, 0x5a, 0xab, 0x3c, 0xac, 0xe5, 0xd2, 0xb1, 0xd1, 0x29, 0x2a, 0x7b, 0x3d, 0xca, 0xd8, 0xfd, 0x53, 0xee, 0x7b, 0x28, 0xd5, 0x9f, 0x04, 0xfa, 0x57, 0x71, 0xc8, 0x45, 0xf3, 0x64, 0xd3, 0xb2, 0x3f, 0x0b, 0x7f, 0x05, 0x7c, 0xee, 0x46, 0xa3, 0x10, 0x2e, 0xd5, 0x51, 0x37, 0x67, 0x61, 0x3e, 0xf5, 0xda, 0x3e, 0x44, 0x4f, 0xcc, 0xae, 0x6b, 0xba, 0x29, 0xf7, 0xaf, 0xd4, 0x6d, 0xb8, 0x03, 0x52, 0xc4, 0x7c, 0x95, 0x39, 0x70, 0x90, 0x54, 0x52, 0x6c, 0x12, 0xb0, 0xd7, 0x4f, 0x4b, 0xa0, 0x73, 0x72, 0x3f, 0xea, 0x6a, 0x55, 0x81, 0x9f, 0x13, 0x3f, 0x4c, 0xe4, 0x8f, 0x25, 0xd0, 0xf8, 0xb5, 0xcd, 0xca, 0x73, 0x4c, 0x34, 0x57, 0xcc, 0x7d, 0x2c, 0x0a, 0x1e, 0x87, 0x49, 0x3c, 0x2c, 0xb5, 0xfe, 0xa3, 0xa2, 0x8e, 0x04, 0x27, 0x9e, 0x4b, 0xfb, 0xf0, 0x6e, 0x8e, 0x54, 0xc4, 0x9c, 0x50, 0x6e, 0x90, 0x27, 0x1b, 0xff, 0x44, 0x14, 0x7a, 0xb6, 0xe4, 0x25, 0xaf, 0x1f, 0xdc, 0xe9, 0xa3, 0xc6, 0x95, 0xf5, 0x23, 0x9f, 0x45, 0x70, 0x48, 0xa5, 0x0b, 0xd5, 0x37, 0xc2, 0x3b, 0xf4, 0x0b, 0xef, 0xf7, 0x3a, 0x10, 0x9c, 0xff, 0x33, 0x32, 0x52, 0xc9, 0x4d, 0xb5, 0x97, 0xd5, 0xdf, 0x26, 0x12, 0x3b, 0x69, 0x91, 0xef, 0x86, 0x1e, 0xf4, 0x85, 0xc4, 0x9f, 0xf4, 0x36, 0xde, 0x0a, 0xcf, 0x97, 0x26, 0x33, 0x92, 0xd1, 0x2f, 0x31, 0x8c, 0x48, 0xe1, 0x1d, 0x02, 0x7a, 0xcc, 0x16, 0x24, 0x29, 0xbd, 0x88, 0x40, 0xbc, 0x8f, 0xae, 0x36, 0xe3, 0x44, 0x56, 0x2c, 0x7a, 0x55, 0xe5, 0x82, 0xb0, 0x45, 0x9a, 0x08, 0x68, 0x7c, 0x17, 0x6f, 0xdf, 0x53, 0x1d, 0xfe, 0x8f, 0x6c, 0x97, 0x86, 0x54, 0x44, 0xda, 0x98, 0xce, 0x0b, 0x2b, 0xf5, 0x06, 0xb3, 0x81, 0x46, 0x54, 0x47, 0x8d, 0x0e, 0x80, 0x7e, 0xf8, 0xdc, 0x27, 0x90, 0xec, 0xc5, 0x60, 0x48, 0xd5, 0x11, 0xa0, 0x5a, 0x69, 0x35, 0xdb, 0xf8, 0xe6, 0x02, 0xec, 0xa0, 0x9a, 0x1b, 0x37, 0x38, 0xa9, 0xac, 0x8d, 0x5c, 0x0b, 0x59, 0x50, 0xf7, 0xd4, 0x75, 0xd7, 0x10, 0xb8, 0x75, 0x13, 0xe7, 0xce, 0xa4, 0x73, 0x41, 0x94, 0x18, 0x06, 0x00, 0x34, 0xe4, 0xe0, 0xf6, 0x05, 0x8f, 0xbe, 0xfb, 0x55, 0xc5, 0xed, 0x3d, 0x66, 0x4d, 0x67, 0xd8, 0xb6, 0x3b, 0x40, 0xa7, 0x83, 0x67, 0x40, 0x59, 0x8f, 0x1d, 0xd2, 0xc7, 0x21, 0x16, 0x1c, 0x84, 0x4c, 0xa7, 0x70, 0xb6, 0x73, 0x39, 0xe3, 0x25, 0x0d, 0xf9, 0x3b, 0x92, 0xa6, 0xd1, 0x0f, 0x4a, 0x26, 0x96, 0x29, 0xfb, 0x56, 0x83, 0x2f, 0xc5, 0xa0, 0xe6, 0x83, 0x94, 0x17, 0x19, 0x67, 0xae, 0xb7, 0xb4, 0x65, 0x88, 0xed, 0x01, 0xee, 0xde, 0x5a, 0xb0, 0x41, 0x02, 0xd4, 0xcc, 0x8e, 0x75, 0xad, 0xee, 0x5b, 0xb4, 0x38, 0xb1, 0x28, 0x54, 0x8a, 0x65, 0x4e, 0x51, 0x7e, 0x08, 0x2d, 0xa4, 0xfc, 0x72, 0x86, 0x13, 0x7a, 0xcf, 0x26, 0x4d, 0xc2, 0x52, 0xc5, 0x36, 0xf6, 0x28, 0x2d, 0x80, 0xd2, 0xab, 0x9f, 0x7b, 0x32, 0xd9, 0x72, 0x2e, 0xd4, 0x04, 0xfd, 0xa6, 0x5e, 0xca, 0xb7, 0x8e, 0xa3, 0x48, 0x9d, 0x00, 0x22, 0x8b, 0xd4, 0x9b, 0xcf, 0x47, 0x90, 0xd6, 0x17, 0xcc, 0x34, 0x93, 0x1e, 0x35, 0xbb, 0xf8, 0x4b, 0xe3, 0x56, 0x7a, 0x06, 0x2a, 0x56, 0x3a, 0xc0, 0x49, 0x4d, 0x95, 0x34, 0xa0, 0x70, 0xf6, 0xed, 0x1d, 0x40, 0xef, 0x09, 0xf8, 0x6a, 0x89, 0x3c, 0xa0, 0xeb, 0xd8, 0x18, 0xf5, 0x77, 0xd2, 0x8b, 0xb7, 0x1c, 0x61, 0xa9, 0x3e, 0x23, 0xb6, 0xab, 0x6c, 0x37, 0xe1, 0x38, 0xe1, 0xc9, 0x9e, 0xe4, 0x6d, 0xb2, 0x72, 0xf7, 0xcb, 0x1a, 0xf7, 0x6f, 0x8c, 0x99, 0x74, 0x48, 0x51, 0x9d, 0xb1, 0xfa, 0x3d, 0x0c, 0x0a, 0x44, 0xaa, 0x2a, 0xc1, 0x28, 0x1b, 0xbc, 0x99, 0x37, 0x72, 0x6e, 0xa0, 0x0e, 0x64, 0x72, 0x4c, 0x21, 0x29, 0x6a, 0xc9, 0xb7, 0x78, 0x88, 0x92, 0x36, 0xb2, 0xf3, 0x3f, 0xa1, 0x5e, 0x6d, 0x9d, 0x5f, 0xd5, 0x34, 0x04, 0x3e, 0x3e, 0x25, 0xe5, 0xb7, 0xbd, 0x27, 0xa3, 0x74, 0xe8, 0xc7, 0xa4, 0x0f, 0x7b, 0x20, 0xa7, 0x1d, 0x4c, 0xfe, 0x58, 0x6b, 0x81, 0x43, 0x21, 0x87, 0x00, 0x89, 0x44, 0x82, 0x27, 0x08, 0x27, 0xf5, 0xbe, 0xba, 0xee, 0x42, 0x29, 0xbe, 0x4f, 0x1c, 0xe2, 0xfb, 0xa2, 0x4a, 0x27, 0x05, 0x38, 0xa7, 0xf0, 0x44, 0xee, 0x6e, 0x24, 0x53, 0x02, 0xb4, 0x0c, 0xa6, 0x25, 0x36, 0x08, 0x70, 0xd1, 0x55, 0x81, 0xc3, 0xdc, 0x5f, 0x1e, 0xf9, 0x4e, 0x10, 0x3b, 0x54, 0x70, 0x59, 0x97, 0xe1, 0x25, 0x5f, 0x4c, 0xa2, 0x7d, 0xc7, 0x05, 0xeb, 0x88, 0x31, 0x6b, 0x0d, 0x68, 0x02, 0xe0, 0x32, 0xaa, 0x67, 0x70, 0x88, 0xd7, 0x97, 0x04, 0xa2, 0x45, 0x58, 0xd9, 0x1b, 0x33, 0xc4, 0x31, 0x7c, 0x15, 0x4d, 0x49, 0x5f, 0x2d, 0xff, 0x8a, 0xd5, 0x5b, 0x05, 0x03, 0x06, 0x36, 0x6f, 0x17, 0x17, 0x5b, 0x32, 0x73, 0x51, 0x06, 0x70, 0x44, 0x7f, 0xdf, 0xfa, 0xa6, 0x97, 0x16, 0x14, 0x5f, 0x9d, 0xb1, 0x78, 0xcd, 0xc5, 0x25, 0x9d, 0x1d, 0xd8, 0x24, 0x38, 0xbe, 0xd8, 0xb7, 0x04, 0x15, 0xe7, 0x8c, 0xbe, 0x73, 0x65, 0x91, 0x74, 0x44, 0x59, 0xc2, 0x00, 0x89, 0x12, 0x3e, 0xd0, 0x88, 0x0e, 0xa1, 0xe8, 0xc1, 0x1a, 0x8e, 0x29, 0x25, 0xbb, 0x8b, 0xd3, 0x83, 0xcd, 0x12, 0x49, 0x43, 0x6a, 0xe4, 0x14, 0x56, 0x0d, 0xa1, 0x2b, 0x6d, 0xf7, 0x96, 0x71, 0x69, 0xd2, 0xd6, 0x80, 0x13, 0x95, 0x8c, 0xa5, 0x0e, 0xa7, 0x8f, 0x2b, 0x0a, 0x47, 0x37, 0xdd, 0x39, 0x2b, 0x70, 0xc6, 0x07, 0x67, 0x0c, 0x3b, 0x06, 0x91, 0x5e, 0x1c, 0x27, 0x23, 0x04, 0x56, 0x30, 0x20, 0x04, 0xac, 0x6a, 0xfb, 0x1b, 0xb8, 0x9a, 0xb4, 0x51, 0x2c, 0x33, 0x44, 0xd1, 0x5e, 0xca, 0x3b, 0xf8, 0x04, 0xca, 0xa8, 0xac, 0x3b, 0x69, 0x39, 0xef, 0xcf, 0xdb, 0xa3, 0xb3, 0xb6, 0xc5, 0x44, 0xf0, 0xdd, 0xf4, 0x07, 0xf5, 0x28, 0x4f, 0x89, 0xfc, 0xb4, 0x0a, 0x7a, 0x00, 0x5f, 0x1d, 0x45, 0xd3, 0x8a, 0xf5, 0xf3, 0x6b, 0x1d, 0x69, 0x4c, 0x7c, 0xcc, 0xef, 0x40, 0x4d, 0x99, 0x10, 0x86, 0xc4, 0x9a, 0x19, 0x83, 0xc2, 0xfd, 0x14, 0x6d, 0xb7, 0x49, 0xf6, 0xb0, 0x6d, 0xe6, 0x1a, 0x91, 0x28, 0xe0, 0xee, 0x11, 0xf1, 0xe8, 0xed, 0x14, 0x2f, 0x9c, 0xcd, 0xc2, 0x77, 0x08, 0xf9, 0x2e, 0xa5, 0x6c, 0x41, 0x35, 0x2c, 0x3f, 0xd0, 0xaa, 0xaa, 0x75, 0x5f, 0xb0, 0xc0, 0xfe, 0xa9, 0x66, 0x20, 0x8f, 0x1f, 0xca, 0xe7, 0xa4, 0xdc, 0xd7, 0x2e, 0xc6, 0xdb, 0xf1, 0xdb, 0x09, 0x68, 0x83, 0xbd, 0xda, 0xd4, 0xe7, 0xd9, 0xf7, 0x6d, 0x86, 0xfe, 0xbf, 0xad, 0x40, 0xa0, 0xac, 0xb2, 0x0e, 0xe3, 0x1e, 0xee, 0xe5, 0xf5, 0x5a, 0x20, 0xde, 0xa1, 0xd2, 0x83, 0x95, 0x21, 0xa7, 0x45, 0xce, 0x34, 0x6c, 0x3a, 0x5f, 0x71, 0x2d, 0xd2, 0x4a, 0xdb, 0xaf, 0x49, 0x29, 0xb5, 0xfa, 0x1d, 0xcf, 0x98, 0x15, 0xc5, 0x2c, 0xc2, 0x11, 0xa0, 0x71, 0xb1, 0x48, 0x2c, 0x75, 0xf1, 0xe7, 0x78, 0x57, 0x32, 0xaa, 0xdc, 0x66, 0x9d, 0xe7, 0xe7, 0x3d, 0x68, 0xce, 0x99, 0x32, 0xa8, 0xef, 0xd2, 0xf2, 0x67, 0xfd, 0x0b, 0x65, 0xf7, 0xd1, 0x44, 0xd8, 0x85, 0xb1, 0x3d, 0x5a, 0xf1, 0xd3, 0xe9, 0x66, 0xde, 0x1d, 0x20, 0xc3, 0x05, 0x2f, 0x94, 0xa9, 0xce, 0xa3, 0x06, 0x25, 0x21, 0x93, 0xba, 0xbe, 0x79, 0x5c, 0x28, 0x59, 0x3b, 0xa2, 0xf4, 0x5a, 0x47, 0x95, 0x20, 0x0c, 0xcc, 0x72, 0x81, 0x43, 0x60, 0x4c, 0x6f, 0x40, 0x50, 0x0c, 0xc1, 0xd4, 0x34, 0xb7, 0xf9, 0xc9, 0xc7, 0xef, 0xbb, 0x7d, 0xf6, 0xbd, 0x84, 0xd0, 0x37, 0x8d, 0x98, 0x40, 0x1c, 0x7a, 0x3c, 0x53, 0x28, 0xcc, 0x26, 0x36, 0xe1, 0xbf, 0x32, 0xa3, 0x26, 0x87, 0x56, 0x07, 0xc3, 0x90, 0xd8, 0xe5, 0x43, 0x0a, 0xbe, 0x75, 0x06, 0xa5, 0x87, 0x92, 0x93, 0x99, 0x18, 0xd3, 0x2e, 0xea, 0xf9, 0xf7, 0xae, 0xea, 0xc1, 0x86, 0x89, 0xff, 0xcf, 0xb5, 0x31, 0xa6, 0x3b, 0x8a, 0xa3, 0xb8, 0x0c, 0x42, 0x3c, 0xed, 0xac, 0xf0, 0xcf, 0x9e, 0x99, 0x66, 0xf6, 0xcf, 0x5c, 0x58, 0xa5, 0x6c, 0xbf, 0xbf, 0x05, 0xd3, 0x3b, 0x7c, 0x7f, 0x93, 0xb0, 0x3e, 0x16, 0x73, 0x59, 0xa5, 0xfb, 0xb7, 0xfe, 0xa8, 0x5b, 0x9e, 0x6b, 0x34, 0x7c, 0x2f, 0x22, 0x15, 0x08, 0x35, 0x4d, 0x1a, 0xa9, 0x89, 0xf6, 0x74, 0xd5, 0x8f, 0x7a, 0x60, 0xec, 0x03, 0x3b, 0x06, 0x80, 0xf6, 0x96, 0xa0, 0xf3, 0x13, 0x15, 0xde, 0x48, 0x27, 0xe5, 0x89, 0x33, 0xe1, 0x8a, 0x68, 0x72, 0xd6, 0xd1, 0x60, 0x60, 0xc7, 0x06, 0xde, 0xc8, 0x27, 0x68, 0x7a, 0xf7, 0xd8, 0xda, 0xd4, 0x15, 0x36, 0xdb, 0xc2, 0xb5, 0x56, 0xb8, 0xae, 0xaa, 0x8f, 0x00, 0x39, 0x1c, 0x3a, 0x39, 0x24, 0xdc, 0xb7, 0xd1, 0x71, 0xf5, 0xb1, 0x58, 0xc5, 0x84, 0xa2, 0xec, 0x11, 0xc9, 0x99, 0xf4, 0x71, 0x7d, 0x3b, 0x11, 0x55, 0x66, 0x07, 0x51, 0xde, 0x2a, 0xdf, 0xa6, 0x8b, 0x61, 0xc4, 0x97, 0x14, 0xed, 0xe2, 0x36, 0x96, 0x8e, 0xcc, 0x52, 0xf1, 0xb1, 0x08, 0xed, 0x6e, 0x89, 0xce, 0xf0, 0xa6, 0x61, 0x0d, 0x1e, 0x9f, 0x31, 0xaf, 0x47, 0x37, 0x6f, 0x1e, 0xbe, 0xc6, 0x27, 0x07, 0x0d, 0xff, 0x4e, 0x5e, 0xe6, 0x17, 0x54, 0xa2, 0x5d, 0x2a, 0xf8, 0x62, 0x55, 0xda, 0x60, 0x00, 0x38, 0x39, 0x69, 0xb5, 0xec, 0xe9, 0x3c, 0xd5, 0x02, 0x81, 0x22, 0x54, 0x30, 0x33, 0x99, 0x8a, 0x01, 0xac, 0xa7, 0x33, 0xcb, 0x3c, 0x6e, 0xba, 0xe2, 0x37, 0x01, 0xb7, 0x0b, 0x9b, 0x76, 0xb6, 0x33, 0xf2, 0x3c, 0x3a, 0x61, 0x7a, 0xaf, 0x01, 0xea, 0x84, 0xea, 0x8a, 0xe4, 0x1a, 0xdc, 0xd5, 0xdc, 0xe4, 0x9f, 0x6a, 0xcc, 0x4d, 0x04, 0x9c, 0x47, 0xe1, 0x73, 0x0f, 0xf7, 0xf9, 0xf2, 0x78, 0x49, 0x9b, 0x83, 0xa4, 0x67, 0x9c, 0xb3, 0xbc, 0x67, 0x07, 0x70, 0xc7, 0xc1, 0xc3, 0x1b, 0x70, 0x07, 0x6f, 0xde, 0x09, 0xd0, 0x91, 0x40, 0xd1, 0xf6, 0xf0, 0xf6, 0x72, 0x01, 0x3e, 0xfc, 0xce, 0xe2, 0xfa, 0xe5, 0xfb, 0xe5, 0x95, 0x70, 0x8c, 0xe1, 0xd4, 0x5b, 0x13, 0xb1, 0x75, 0x7c, 0xe4, 0xe8, 0x15, 0x0d, 0x1b, 0xc1, 0x51, 0x48, 0xe0, 0x55, 0x2c, 0x34, 0xe9, 0x11, 0xb0, 0xbe, 0x41, 0x66, 0xd9, 0x0b, 0x48, 0xc2, 0xae, 0x0d, 0xfc, 0xc0, 0xb1, 0x54, 0x76, 0x9c, 0x79, 0x27, 0xb7, 0xe9, 0x9e, 0xd4, 0xa5, 0x86, 0xd5, 0x44, 0x51, 0xce, 0x5c, 0xd2, 0x7b, 0x0f, 0x99, 0x5d, 0x58, 0x3d, 0xfe, 0x9c, 0x93, 0xe8, 0x2f, 0xb2, 0x91, 0x6c, 0x67, 0x03, 0xf9, 0x68, 0x18, 0x45, 0x74, 0x71, 0xd1, 0xda, 0xb1, 0x07, 0x65, 0x5d, 0xad, 0xc7, 0x4a, 0x7b, 0x31, 0xe3, 0x3f, 0x04, 0x9c, 0xd0, 0x31, 0x41, 0xe2, 0x3e, 0x60, 0x89, 0xd5, 0x4d, 0xbe, 0x0f, 0xa3, 0xfe, 0x97, 0xfe, 0xa0, 0xe7, 0x77, 0xc8, 0x46, 0x2c, 0x49, 0xba, 0x7a, 0xaa, 0xbc, 0xd5, 0x11, 0x75, 0xeb, 0xd9, 0x93, 0x85, 0x3c, 0xa2, 0x3f, 0xac, 0x88, 0xb7, 0x4f, 0xcb, 0x7d, 0x21, 0x7d, 0x46, 0x41, 0x79, 0xc5, 0xb5, 0x58, 0x45, 0x6d, 0xdd, 0xc8, 0x85, 0x43, 0xde, 0x7b, 0x88, 0x26, 0xad, 0xe4, 0x04, 0xc7, 0xc5, 0xe6, 0x66, 0xb1, 0x1a, 0xf1, 0x67, 0x87, 0x4f, 0x6e, 0xe0, 0x8d, 0x28, 0x5d, 0xdf, 0x6a, 0x42, 0x3c, 0xfa, 0x2d, 0x02, 0x2b, 0xe3, 0x8d, 0xcb, 0x4f, 0x3d, 0x75, 0x74, 0x74, 0xae, 0xc0, 0xf9, 0xf6, 0x36, 0x41, 0x70, 0xe1, 0xbf, 0x06, 0x3f, 0x57, 0xf5, 0xdd, 0x8d, 0x32, 0x57, 0x18, 0xf6, 0xeb, 0x8e, 0x8e, 0x83, 0xbb, 0xfe, 0xe2, 0xd9, 0xff, 0x9c, 0x08, 0xb0, 0xe1, 0xff, 0x04, 0x87, 0x35, 0xb9, 0xf5, 0x96, 0xa1, 0xe7, 0x53, 0x05, 0x01, 0x07, 0x75, 0x5b, 0x09, 0x0a, 0x56, 0x39, 0x2c, 0xaa, 0x98, 0x48, 0xbd, 0xfe, 0xc9, 0x70, 0x55, 0x4c, 0xe6, 0x4b, 0x74, 0x1e, 0x1d, 0xd9, 0x6b, 0x98, 0xd7, 0x75, 0x79, 0x08, 0xf6, 0x07, 0x34, 0xbf, 0x5b, 0x7c, 0x2a, 0x20, 0xac, 0x73, 0xc9, 0xf6, 0x54, 0x39, 0x7c, 0x0b, 0xcb, 0xf8, 0x17, 0xf6, 0x17, 0x2b, 0x75, 0x34, 0x93, 0x55, 0x5f, 0x7a, 0xef, 0xf3, 0xb0, 0x4a, 0x78, 0xaf, 0xb7, 0xc5, 0x99, 0xd6, 0xdd, 0xc0, 0xa2, 0x0c, 0x88, 0x19, 0xc9, 0x3f, 0x3f, 0x4b, 0x6f, 0xd9, 0x0e, 0x41, 0xa4, 0x3a, 0x2c, 0x68, 0xec, 0x65, 0xdb, 0x08, 0x43, 0xf9, 0x90, 0xd4, 0x60, 0x64, 0x54, 0xc0, 0x37, 0x53, 0x6a, 0x12, 0xc1, 0x6c, 0x32, 0xbc, 0xff, 0x40, 0x4d, 0xe9, 0x3d, 0x7b, 0x02, 0xd6, 0x94, 0x5e, 0xe0, 0xe3, 0xb2, 0x70, 0xa5, 0xea, 0xde, 0x70, 0x5f, 0xcf, 0x36, 0x8d, 0xd1, 0x58, 0x3b, 0xda, 0x18, 0x3f, 0x90, 0xfc, 0x8f, 0x86, 0xff, 0x25, 0xef, 0x0b, 0xbd, 0x47, 0xbb, 0x5c, 0xef, 0x81, 0xdb, 0xcc, 0x6c, 0xde, 0x86, 0xc7, 0xc5, 0x3e, 0x66, 0x62, 0x83, 0x94, 0xf7, 0x36, 0xaf, 0x52, 0x31, 0x6f, 0x98, 0x22, 0x66, 0x20, 0xd0, 0xd7, 0x6d, 0xda, 0x78, 0xa3, 0x00, 0x7c, 0xbd, 0x8a, 0x63, 0x4c, 0xa3, 0x16, 0x46, 0x47, 0x02, 0x4d, 0xed, 0xb6, 0xcd, 0xe0, 0x8e, 0x02, 0x9a, 0xa5, 0xfb, 0xc9, 0x5f, 0x47, 0x80, 0x31, 0x7a, 0x3d, 0x0f, 0x7d, 0xf5, 0xf8, 0x9a, 0xde, 0x07, 0x61, 0xc1, 0x8b, 0xde, 0x82, 0xad, 0x13, 0x9b, 0x83, 0x3c, 0xf2, 0x9f, 0xd9, 0x5e, 0x63, 0x05, 0xba, 0xbf, 0x76, 0x6f, 0xd4, 0xa6, 0x62, 0x06, 0x3e, 0x1d, 0x1c, 0xbc, 0xaf, 0x52, 0x29, 0xd5, 0xee, 0x3d, 0xb0, 0xa5, 0x89, 0x83, 0xd3, 0x9b, 0xca, 0x9a, 0x3f, 0x7e, 0xe7, 0x2e, 0x02, 0xf7, 0x79, 0xc4, 0x9e, 0x50, 0x2f, 0x9e, 0x5b, 0x7b, 0xc4, 0xde, 0xe1, 0x56, 0x2e, 0xee, 0x05, 0x2d, 0x19, 0x1e, 0xe4, 0x80, 0x93, 0x8f, 0x2e, 0x07, 0x09, 0x51, 0xc5, 0xf4, 0x72, 0xc8, 0x87, 0x78, 0xca, 0x54, 0x67, 0x88, 0xc2, 0x30, 0xc3, 0xe1, 0xb6, 0x9b, 0xf2, 0x4a, 0xdf, 0x36, 0x1c, 0x19, 0xca, 0xae, 0x4e, 0xf8, 0x08, 0x9a, 0xcd, 0xe9, 0x28, 0xa7, 0xab, 0x88, 0xe2, 0xf2, 0x99, 0x90, 0x95, 0xb5, 0xfc, 0xa1, 0xf4, 0x26, 0x43, 0x41, 0xfb, 0x9c, 0x77, 0x20, 0x29, 0xf4, 0x13, 0xa0, 0xe9, 0x33, 0x17, 0x94, 0x51, 0x6c, 0x58, 0x48, 0x0e, 0xe5, 0x1a, 0xc3, 0x9f, 0x75, 0xe0, 0x48, 0xc2, 0x30, 0x83, 0x23, 0x2c, 0x47, 0x82, 0xa2, 0x7d, 0x29, 0x99, 0x61, 0x73, 0xee, 0x95, 0xca, 0x5e, 0xf6, 0x66, 0xdd, 0xd4, 0xcd, 0x76, 0x2d, 0xa5, 0x52, 0x39, 0x2b, 0x11, 0x19, 0x06, 0xa7, 0x39, 0x0d, 0x25, 0x94, 0xd4, 0x5a, 0x29, 0x0c, 0x23, 0x8a, 0x7f, 0x94, 0x27, 0xed, 0x48, 0xa0, 0x11, 0x3f, 0x64, 0x5a, 0xfa, 0x85, 0xcf, 0x9f, 0xd4, 0x38, 0x31, 0x4a, 0xa1, 0xa5, 0xb0, 0xb6, 0xe3, 0x94, 0x09, 0x7e, 0x53, 0x28, 0xdf, 0x87, 0xd5, 0x06, 0x53, 0x41, 0xac, 0xb9, 0xd4, 0x29, 0xea, 0x56, 0x38, 0x93, 0x2b, 0x5b, 0x0c, 0xa6, 0x83, 0xdd, 0x29, 0xa8, 0xb5, 0xe3, 0x88, 0x7c, 0xa6, 0x0d, 0x58, 0x68, 0x11, 0x79, 0x4d, 0x1c, 0x7b, 0xe6, 0x3a, 0xf0, 0x6a, 0x1a, 0xe2, 0x6e, 0xd2, 0x82, 0x0c, 0x10, 0xd0, 0x19, 0xd5, 0x4a, 0x9a, 0x8a, 0x4a, 0xcb, 0xb7, 0x99, 0x36, 0x01, 0x6b, 0xbf, 0x39, 0xdb, 0x76, 0x14, 0x1a, 0xd2, 0xfe, 0x73, 0x5e, 0x2a, 0xc9, 0xd8, 0x1a, 0x75, 0xaf, 0x0c, 0x05, 0x5a, 0x4f, 0x85, 0xd1, 0x94, 0x02, 0x87, 0xbc, 0x3d, 0x0d, 0x90, 0x62, 0x4d, 0x1b, 0xf3, 0xd5, 0x5e, 0xea, 0xc3, 0xef, 0xb2, 0x44, 0xf2, 0xe7, 0x76, 0x31, 0xba, 0x23, 0x48, 0x6b, 0x3c, 0x4d, 0xf8, 0x12, 0x68, 0xa9, 0x8b, 0xa1, 0x1c, 0xa6, 0x86, 0x21, 0x90, 0xb3, 0x69, 0x9c, 0xf1, 0x53, 0x79, 0xd5, 0x4c, 0x74, 0xc2, 0x36, 0xae, 0xfd, 0x5d, 0x0a, 0x8a, 0xa6, 0xef, 0xec, 0x5a, 0x0c, 0x72, 0x7f, 0x89, 0x05, 0x38, 0x60, 0x91, 0x30, 0x2c, 0x59, 0x61, 0xd1, 0x5c, 0xd8, 0x01, 0xdc, 0xb4, 0x9f, 0x78, 0x50, 0x0c, 0xbc, 0xee, 0xc6, 0x66, 0xbc, 0x0e, 0x4a, 0x70, 0x1c, 0xae, 0x69, 0x51, 0x00, 0xb2, 0x8b, 0xa1, 0x27, 0x2d, 0x84, 0xb9, 0x1f, 0xca, 0x65, 0x2e, 0xb5, 0x6b, 0x98, 0x98, 0xb0, 0x0f, 0x2c, 0x98, 0xbf, 0xf9, 0x6d, 0x19, 0xaf, 0x0f, 0xb8, 0xd5, 0xe1, 0x80, 0x8d, 0x1b, 0xfc, 0xa9, 0xe6, 0xd0, 0xdf, 0x3a, 0xc7, 0xb5, 0xda, 0x94, 0x17, 0xe7, 0x1d, 0x76, 0xae, 0xac, 0x70, 0xd9, 0xaf, 0x6c, 0x25, 0x18, 0x18, 0xfe, 0x4b, 0x54, 0x97, 0x26, 0x25, 0x17, 0xa0, 0x5b, 0xdb, 0x37, 0xbc, 0xcd, 0x6e, 0xfe, 0x24, 0xa6, 0xf1, 0x87, 0x8e, 0x90, 0xf7, 0x6b, 0x47, 0x78, 0x48, 0x9e, 0x82, 0x92, 0xd8, 0x93, 0xf0, 0x9e, 0xf9, 0xa7, 0x90, 0x69, 0xcf, 0xbc, 0xc9, 0x96, 0x04, 0x24, 0xb6, 0x9e, 0xbe, 0xc2, 0xc1, 0x16, 0xce, 0x6b, 0x73, 0x31, 0x2b, 0x92, 0x8a, 0x85, 0x9e, 0x25, 0x4c, 0x12, 0xbe, 0xb2, 0x1c, 0x80, 0x1f, 0xce, 0x4b, 0xa8, 0xc7, 0xb7, 0x30, 0x56, 0xe1, 0x38, 0x7b, 0x4d, 0xb6, 0xcd, 0xc6, 0x8c, 0xd8, 0x08, 0x6d, 0xd0, 0xa0, 0x33, 0xa0, 0x5a, 0xdb, 0x37, 0xb6, 0xf2, 0xc1, 0xbd, 0xc4, 0x2c, 0x27, 0x92, 0x6f, 0xea, 0xf5, 0x50, 0xfe, 0x22, 0xd9, 0x3b, 0xb4, 0xe2, 0x3d, 0x69, 0x5c, 0x91, 0x77, 0x26, 0x25, 0x77, 0x40, 0x96, 0xb0, 0x80, 0x68, 0x9c, 0x68, 0x3c, 0xc8, 0xfb, 0x12, 0x2b, 0x77, 0xbb, 0xa4, 0x38, 0x41, 0xcf, 0x5b, 0x83, 0x54, 0xf4, 0x08, 0x63, 0x3d, 0xdc, 0xab, 0xac, 0x13, 0x8c, 0x42, 0x2d, 0xf2, 0x03, 0xe3, 0x7d, 0xab, 0x1c, 0x09, 0xf8, 0xba, 0xb5, 0x2c, 0x04, 0x79, 0x11, 0x94, 0x99, 0x93, 0x7b, 0x6e, 0x00, 0xba, 0x2c, 0x20, 0xda, 0x9d, 0x6f, 0xda, 0x65, 0x14, 0x03, 0x6d, 0xfb, 0x9e, 0xc1, 0x61, 0xdb, 0x0e, 0x7e, 0x41, 0x2c, 0x81, 0x33, 0x3a, 0x3f, 0x93, 0x5c, 0xe5, 0x15, 0xd3, 0x9d, 0x60, 0x21, 0x74, 0xab, 0xa3, 0x4e, 0x45, 0x6a, 0x11, 0x44, 0xe3, 0x53, 0x4e, 0xe7, 0x2c, 0x19, 0x51, 0x21, 0xf8, 0x8c, 0xba, 0xe2, 0x04, 0xbd, 0x65, 0x65, 0x2f, 0x63, 0x3f, 0xb4, 0xe9, 0x7d, 0x58, 0x6e, 0xe8, 0x39, 0x3a, 0xc8, 0x1c, 0x15, 0x7a, 0xd2, 0xe6, 0x44, 0x8c, 0xfc, 0x85, 0x53, 0xdb, 0xd8, 0xd1, 0x0c, 0x19, 0x21, 0x2b, 0x9b, 0xd4, 0xfd, 0xb4, 0xef, 0x4b, 0x7f, 0xbd, 0x63, 0x7f, 0x70, 0x7f, 0x9e, 0x8d, 0x4f, 0x0c, 0xb7, 0x3a, 0x96, 0x86, 0x9d, 0xd0, 0x3f, 0x8f, 0xb7, 0x29, 0x87, 0x00, 0xc7, 0x09, 0xf2, 0xde, 0x14, 0xb1, 0x8f, 0x8a, 0xc8, 0xb0, 0x7d, 0x37, 0x97, 0xfd, 0xae, 0xa1, 0xa1, 0x43, 0xeb, 0xfd, 0x9a, 0x7c, 0x18, 0x2b, 0x28, 0xc1, 0xba, 0x33, 0x8c, 0x60, 0xb6, 0xef, 0x85, 0x30, 0x5b, 0x05, 0x71, 0x21, 0xa3, 0x19, 0xb6, 0x17, 0xb6, 0x40, 0x60, 0xf9, 0xb0, 0xb7, 0x0c, 0x04, 0xa4, 0xd5, 0x04, 0x66, 0xe1, 0x3e, 0xab, 0x08, 0x74, 0x5a, 0x1c, 0xab, 0xee, 0x05, 0x0e, 0x36, 0x67, 0x88, 0xfb, 0x4e, 0xc2, 0xc8, 0x81, 0x28, 0x33, 0xbe, 0x08, 0x9b, 0xff, 0x27, 0xa5, 0x7a, 0x83, 0x7d, 0x3e, 0x20, 0x78, 0x25, 0xef, 0x4c, 0x75, 0xea, 0xad, 0x30, 0xb5, 0xaa, 0x29, 0xc4, 0x1b, 0x4f, 0xf7, 0x60, 0x73, 0x01, 0xf0, 0x8a, 0xfb, 0x9b, 0xd5, 0x0d, 0x22, 0x5b, 0x35, 0x4b, 0x8f, 0xdd, 0x90, 0xd3, 0x65, 0x4a, 0xbc, 0x36, 0xc6, 0xcd, 0x88, 0x17, 0x96, 0x46, 0xa0, 0x82, 0x81, 0x43, 0xb0, 0x7f, 0x3f, 0x2c, 0xcc, 0xe6, 0x16, 0xbd, 0x10, 0x74, 0xa1, 0xb9, 0x83, 0x1f, 0xd1, 0xdd, 0x41, 0xa7, 0x31, 0x13, 0xda, 0x6e, 0x6e, 0xe9, 0xf5, 0x89, 0x16, 0x41, 0x39, 0x17, 0xa0, 0x4a, 0x6d, 0xd1, 0xad, 0xaf, 0xdd, 0xe3, 0x8d, 0x0e, 0x00, 0xfb, 0x05, 0xab, 0x59, 0x9f, 0x4f, 0x66, 0x9b, 0xc3, 0x63, 0xea, 0x10, 0x9b, 0x75, 0x28, 0x3b, 0xae, 0xbf, 0x04, 0xbd, 0x2c, 0x80, 0x4d, 0x75, 0x81, 0x45, 0xf3, 0xeb, 0x2a, 0x67, 0x74, 0xef, 0xc7, 0xd5, 0x98, 0x7d, 0x72, 0x13, 0x5e, 0xe4, 0x50, 0x83, 0x36, 0x27, 0x65, 0xe4, 0x70, 0xa4, 0xad, 0x18, 0xf5, 0xf3, 0x68, 0x2a, 0x35, 0x11, 0xb5, 0x8f, 0x60, 0xbe, 0x62, 0xac, 0xd9, 0x23, 0x03, 0x99, 0xe8, 0xb8, 0x41, 0x25, 0xaf, 0x65, 0x75, 0x1a, 0x5f, 0xe8, 0x76, 0xc2, 0xab, 0x76, 0xae, 0xa9, 0x7d, 0xa5, 0x74, 0xa5, 0xe8, 0x89, 0x96, 0x14, 0x5f, 0x1d, 0x34, 0x65, 0x24, 0xe5, 0xd5, 0xda, 0x02, 0xd2, 0xb4, 0x8b, 0x3f, 0x66, 0x5b, 0xaf, 0xcd, 0x18, 0x73, 0x17, 0xc0, 0xfa, 0xdb, 0xfb, 0x05, 0x99, 0xf7, 0xf9, 0x50, 0x25, 0x4b, 0x5b, 0x56, 0xd2, 0x48, 0x99, 0x3d, 0x7d, 0x65, 0x1e, 0x50, 0x93, 0x72, 0x4f, 0xf8, 0x2f, 0x29, 0xca, 0xe7, 0x82, 0x07, 0xeb, 0x97, 0x78, 0x5a, 0x95, 0xf3, 0x98, 0x9a, 0x2f, 0x54, 0x2d, 0xfc, 0xec, 0xae, 0xa3, 0x45, 0x50, 0x0c, 0x33, 0xdc, 0xf0, 0x39, 0xc3, 0x24, 0x79, 0xc0, 0x07, 0x08, 0xf3, 0x17, 0xed, 0xd8, 0x47, 0x18, 0x38, 0x53, 0xff, 0xb0, 0x6a, 0x05, 0x4e, 0xdb, 0xe8, 0xd3, 0x50, 0xd0, 0x59, 0xd4, 0x92, 0x78, 0x4f, 0x62, 0xd5, 0x25, 0x29, 0x71, 0x0f, 0x81, 0x38, 0x20, 0xb3, 0xc5, 0x20, 0x8e, 0x32, 0x2b, 0x81, 0xef, 0xc2, 0xa5, 0xd7, 0xdf, 0x5e, 0xcf, 0x9f, 0xf5, 0x0e, 0x22, 0xbc, 0x9c, 0x68, 0x6b, 0x18, 0x1e, 0x57, 0x7c, 0x8e, 0x02, 0x1b, 0x22, 0x08, 0x98, 0x91, 0x57, 0xe4, 0xd2, 0xb5, 0xb8, 0x9d, 0x55, 0x65, 0x39, 0xa7, 0xd0, 0x68, 0x17, 0x9a, 0x8d, 0xae, 0x0e, 0x93, 0x46, 0xd9, 0xcd, 0xd7, 0x39, 0xfd, 0xa7, 0xba, 0x7e, 0xa4, 0x8b, 0xc0, 0x99, 0x16, 0x36, 0x01, 0x4c, 0xd7, 0xa7, 0xd2, 0xaf, 0x70, 0xd3, 0xa1, 0x82, 0x72, 0x9b, 0x21, 0xc1, 0xb9, 0xfb, 0xa8, 0x79, 0xee, 0x84, 0xd5, 0xdb, 0x4f, 0x0c, 0x75, 0x8e, 0xb3, 0xa4, 0xa7, 0x4a, 0xc8, 0xca, 0x3f, 0xa3, 0xa0, 0xe0, 0x69, 0x22, 0x6c, 0xdd, 0x8f, 0x9a, 0x87, 0x43, 0x7c, 0xb9, 0xb6, 0x51, 0xc1, 0xde, 0xae, 0x79, 0x57, 0x2a, 0xd6, 0x14, 0x87, 0xda, 0x4f, 0x55, 0x07, 0xd4, 0x32, 0x7b, 0x66, 0x7f, 0x18, 0x4b, 0xa9, 0xd8, 0xe0, 0xbe, 0x37, 0xc3, 0xac, 0xf7, 0xf2, 0x9e, 0x2d, 0x77, 0xa7, 0x1c, 0x21, 0x94, 0xa8, 0x51, 0x19, 0x27, 0xb7, 0x09, 0x80, 0x86, 0x26, 0x5e, 0xd9, 0xb2, 0x3d, 0x8a, 0x48, 0xd1, 0xdc, 0xf9, 0x54, 0xde, 0x61, 0xa3, 0xeb, 0x9f, 0xcc, 0x98, 0xa6, 0xd7, 0x22, 0xdc, 0x4f, 0xbe, 0x0f, 0x76, 0xa1, 0xae, 0xce, 0xc4, 0x4e, 0x1f, 0x4e, 0x11, 0x47, 0xd5, 0x8d, 0x69, 0x37, 0x58, 0x48, 0xac, 0x50, 0xa5, 0xd7, 0xe2, 0x4b, 0x23, 0x53, 0xce, 0xaa, 0xd8, 0xf9, 0xc6, 0x41, 0xdd, 0xd3, 0xc2, 0xf4, 0x0f, 0x95, 0xb2, 0xc2, 0x08, 0xc5, 0x15, 0x03, 0x4e, 0x1e, 0xc7, 0xed, 0xc9, 0x37, 0x1a, 0x5d, 0x7b, 0x60, 0x29, 0xd5, 0x6b, 0xcc, 0x69, 0xc0, 0xe2, 0xf6, 0x81, 0xfe, 0xda, 0x3d, 0x5c, 0x9c, 0xb4, 0xd1, 0x7c, 0xe3, 0x29, 0xd3, 0x91, 0x95, 0x83, 0xb8, 0x4a, 0x73, 0x0d, 0xef, 0x6b, 0x02, 0xc8, 0xc3, 0x20, 0x8f, 0x5f, 0x82, 0x90, 0x71, 0x5d, 0xdf, 0xb6, 0x8e, 0x9e, 0x95, 0x6c, 0x21, 0x03, 0x4d, 0xc9, 0xba, 0x6a, 0xc2, 0xad, 0x86, 0xde, 0x23, 0x9a, 0xd0, 0x0a, 0xb9, 0xc6, 0xc8, 0xf4, 0xc9, 0x6e, 0x83, 0xe8, 0xbc, 0x6c, 0x44, 0xb1, 0x7d, 0x0c, 0xfa, 0x10, 0x23, 0x1c, 0x09, 0x66, 0xd0, 0x42, 0x4d, 0xb4, 0xd8, 0x93, 0x5c, 0xc5, 0x26, 0x60, 0x0c, 0xaa, 0xdc, 0x53, 0x36, 0x67, 0x3a, 0xbb, 0xb9, 0xec, 0xc1, 0x25, 0xc1, 0x47, 0x98, 0x2c, 0x49, 0x17, 0x2e, 0x92, 0xde, 0x44, 0x21, 0x8f, 0xa6, 0xed, 0x5f, 0x68, 0xa2, 0xa2, 0x8b, 0x44, 0x30, 0xd4, 0xa2, 0x3c, 0xd4, 0x89, 0xde, 0xb1, 0x37, 0x54, 0xda, 0xe2, 0x70, 0x85, 0xf8, 0xbd, 0x83, 0x9d, 0x00, 0xf6, 0x27, 0x05, 0x09, 0x57, 0xcd, 0xff, 0x9d, 0x57, 0xdd, 0xdc, 0x18, 0xed, 0x43, 0x70, 0x51, 0xa6, 0x2a, 0xc3, 0x7c, 0xf6, 0x07, 0x09, 0x4f, 0xcb, 0xda, 0xd4, 0x64, 0x68, 0xb1, 0x89, 0xdf, 0x71, 0x6d, 0x10, 0x50, 0x42, 0xc8, 0xd0, 0xdb, 0x85, 0x97, 0xdb, 0x96, 0x04, 0x4d, 0x65, 0x32, 0xbb, 0xc1, 0x7b, 0xde, 0x32, 0x31, 0xf2, 0x68, 0x0a, 0x86, 0x9d, 0xa5, 0xd5, 0xd9, 0xc3, 0x14, 0x2b, 0x37, 0xcf, 0xbe, 0xfa, 0xa1, 0x4a, 0x60, 0x1d, 0x57, 0x07, 0xcc, 0x30, 0x57, 0x9d, 0x8d, 0xa3, 0x20, 0x1a, 0xca, 0x0e, 0xbb, 0xf6, 0x6d, 0xc4, 0xfc, 0x46, 0x83, 0xab, 0x06, 0x32, 0xe6, 0x4b, 0x0d, 0xa9, 0x1a, 0x24, 0x60, 0x54, 0x76, 0x45, 0xa6, 0xc8, 0x84, 0x1a, 0x67, 0xff, 0xaa, 0x86, 0xcf, 0x09, 0x09, 0x31, 0xaf, 0xff, 0xa5, 0x24, 0xc5, 0x39, 0xc6, 0x93, 0x3d, 0xc0, 0x9f, 0xf9, 0x77, 0x06, 0x2e, 0x6b, 0x0b, 0xd5, 0x63, 0x25, 0x0b, 0x86, 0x84, 0x6a, 0x88, 0x73, 0xd0, 0x8b, 0x57, 0xaf, 0x63, 0x45, 0x14, 0xf4, 0x59, 0x4f, 0x68, 0xdc, 0x36, 0x34, 0x88, 0x54, 0x86, 0x5f, 0xfe, 0x4e, 0xc0, 0x74, 0xac, 0xb7, 0x70, 0xe7, 0x0e, 0xa9, 0x95, 0xc7, 0xbf, 0xe1, 0x48, 0xda, 0x3f, 0x73, 0x9f, 0xef, 0xf3, 0xbc, 0xd1, 0x70, 0x6d, 0x99, 0x9b, 0x37, 0xee, 0xd6, 0xe2, 0xa2, 0x29, 0xea, 0x99, 0xea, 0x4a, 0xe1, 0xe5, 0xb0, 0x37, 0x99, 0x7f, 0xd9, 0x16, 0x31, 0x5b, 0x9c, 0x0f, 0xbf, 0x87, 0xd9, 0x53, 0x41, 0x55, 0xad, 0x5d, 0xd7, 0xbc, 0x43, 0x78, 0x2f, 0xfc, 0xed, 0x81, 0x40, 0x81, 0x73, 0xee, 0x3b, 0x0a, 0xab, 0x0f, 0xbe, 0x0a, 0x49, 0x94, 0x4b, 0x4e, 0xf9, 0x50, 0xfa, 0xe1, 0xab, 0x3c, 0x6a, 0x2d, 0x2e, 0xbf, 0xfd, 0x62, 0x01, 0x2c, 0x45, 0x1c, 0x66, 0x8d, 0xb9, 0x40, 0xb7, 0x9f, 0xad, 0x26, 0xfd, 0x1d, 0x81, 0xfe, 0xbf, 0x41, 0x18, 0x6c, 0x18, 0x89, 0x8b, 0x76, 0x0c, 0xb7, 0x1f, 0xa0, 0x1c, 0x1b, 0x75, 0x55, 0x18, 0x14, 0x01, 0x89, 0x35, 0xd5, 0xbd, 0x9d, 0x60, 0x65, 0x1f, 0x83, 0xd1, 0xe9, 0x48, 0x22, 0xe2, 0x26, 0x7e, 0xfc, 0x22, 0x42, 0xdc, 0x0e, 0xa5, 0xca, 0x48, 0xf7, 0x9f, 0xfa, 0xa6, 0x5d, 0x31, 0x38, 0x4b, 0x8d, 0x83, 0xe1, 0xb5, 0x61, 0x13, 0x48, 0x79, 0x67, 0x4d, 0xfc, 0x7c, 0x3f, 0x5b, 0x4a, 0x66, 0x45, 0x3e, 0x03, 0x54, 0x71, 0x1e, 0x80, 0xce, 0x7b, 0xde, 0xe2, 0xf8, 0x42, 0xf4, 0x9e, 0x0c, 0x6e, 0x78, 0x3a, 0x07, 0x54, 0x7a, 0x51, 0xa3, 0x1b, 0x99, 0xdd, 0x86, 0x1d, 0xd1, 0xb6, 0xb9, 0x90, 0x95, 0x55, 0x5b, 0x66, 0x1e, 0xde, 0x97, 0x71, 0x02, 0x5e, 0xd3, 0xcb, 0x08, 0x50, 0x2a, 0x75, 0x3b, 0x67, 0x1d, 0x3e, 0x3d, 0x87, 0x85, 0xe7, 0xde, 0x14, 0xcc, 0x84, 0xed, 0x70, 0x5d, 0x25, 0x4f, 0xbf, 0x59, 0xb6, 0x4d, 0xee, 0x8c, 0x24, 0x32, 0xf3, 0x9f, 0xc2, 0x16, 0x56, 0x8f, 0xea, 0xf5, 0xf0, 0x5e, 0xe7, 0x04, 0xf3, 0x08, 0x12, 0x44, 0x2a, 0xb8, 0x3c, 0x57, 0x82, 0x3c, 0x4c, 0x93, 0xca, 0xb6, 0x29, 0x55, 0xb7, 0x95, 0xdb, 0x97, 0x2b, 0xc4, 0xed, 0xc5, 0xb6, 0x21, 0x15, 0xcd, 0x5e, 0x31, 0x17, 0x76, 0x9b, 0x12, 0xe6, 0xf2, 0xa6, 0xb1, 0x0c, 0xb6, 0xf3, 0x3d, 0x4d, 0x89, 0xfc, 0xdb, 0x87, 0xdb, 0x41, 0x9b, 0xdd, 0x59, 0x8d, 0xaa, 0x14, 0xbe, 0x7a, 0xca, 0x3d, 0xec, 0x37, 0x00, 0x95, 0x3b, 0x89, 0x8c, 0xa9, 0x11, 0x10, 0x1e, 0xbe, 0xb3, 0xcc, 0x47, 0x6f, 0x5a, 0xe0, 0x2e, 0x98, 0x8a, 0x95, 0x84, 0x73, 0x9f, 0xa1, 0xba, 0x01, 0xa9, 0xaa, 0x71, 0xac, 0x79, 0x06, 0x32, 0x2a, 0xfc, 0xc5, 0x5f, 0xa4, 0xc8, 0xf1, 0x69, 0x18, 0xf5, 0x14, 0x44, 0xfc, 0x2e, 0xfb, 0x18, 0x24, 0x07, 0xba, 0x3a, 0xe5, 0x91, 0xf0, 0x5a, 0x7b, 0x2d, 0x4c, 0xfe, 0xa8, 0x9d, 0x50, 0x2f, 0x9e, 0x61, 0x55, 0x71, 0x1f, 0x40, 0xd0, 0xf9, 0xe3, 0x25, 0xd3, 0x1b, 0x3a, 0x2c, 0xd7, 0x02, 0xf2, 0xfd, 0xb8, 0xa3, 0x7b, 0x59, 0x01, 0xf3, 0x49, 0xf2, 0x6a, 0x58, 0x7a, 0x80, 0x9f, 0x5e, 0xb9, 0x11, 0x43, 0xac, 0x62, 0xa0, 0x35, 0x36, 0xe6, 0xea, 0x12, 0xb4, 0x72, 0x7d, 0xfb, 0x52, 0xcb, 0x12, 0x98, 0xa9, 0x7d, 0x1c, 0x5c, 0xee, 0x34, 0xa1, 0x0b, 0x69, 0x6a, 0x49, 0x7a, 0x29, 0x42, 0xb5, 0x97, 0xf7, 0xb4, 0x11, 0xa8, 0x88, 0xeb, 0xed, 0xd8, 0xf7, 0xeb, 0x48, 0xef, 0x72, 0x77, 0xee, 0x61, 0x33, 0x32, 0x05, 0x8a, 0xb1, 0x04, 0xe2, 0x38, 0x18, 0xbf, 0x21, 0x6a, 0xf7, 0x03, 0xf4, 0x57, 0x39, 0x5f, 0xbb, 0xb2, 0x57, 0xb8, 0xd5, 0x2d, 0xcc, 0xef, 0xb6, 0x3c, 0xc8, 0xbe, 0x3a, 0x1b, 0x28, 0xe3, 0x39, 0x12, 0xa6, 0x81, 0x5c, 0xf8, 0x4d, 0xc3, 0x2f, 0xf6, 0x31, 0xc2, 0x77, 0x8d, 0x5c, 0xa9, 0xc5, 0xda, 0x0b, 0x17, 0x4b, 0x19, 0x1b, 0xc4, 0xef, 0x69, 0xbe, 0x68, 0x9e, 0xce, 0x72, 0xd8, 0xe3, 0x7c, 0x34, 0x72, 0xb8, 0x53, 0xf0, 0xbc, 0x9c, 0xa6, 0x3d, 0x48, 0xe5, 0x40, 0x47, 0xdb, 0x58, 0xa9, 0x0c, 0xcd, 0xf7, 0xa5, 0xcc, 0xb3, 0x1a, 0xfe, 0xba, 0x3c, 0xc1, 0x83, 0xf8, 0x59, 0x29, 0x51, 0xc2, 0xa1, 0x9d, 0x51, 0xea, 0xf3, 0x8f, 0x02, 0x84, 0x5d, 0xe7, 0x79, 0xe2, 0x3c, 0x9b, 0xa6, 0xc3, 0xa5, 0x80, 0xd8, 0xc7, 0x04, 0x60, 0x83, 0x26, 0x03, 0x4c, 0x42, 0xa2, 0xae, 0x33, 0x18, 0xba, 0xd4, 0xb4, 0xfb, 0x21, 0xb0, 0x31, 0x93, 0x6e, 0xc8, 0x25, 0x3f, 0x15, 0x16, 0xb7, 0x59, 0x96, 0x66, 0x8f, 0xbb, 0xf4, 0xff, 0xe8, 0x81, 0x69, 0x85, 0xe6, 0x11, 0x58, 0x1e, 0x2a, 0x59, 0x83, 0xd4, 0xa5, 0x58, 0x7e, 0x3b, 0xa9, 0xe0, 0x64, 0x53, 0x46, 0x9a, 0xc8, 0xaf, 0xd3, 0x4a, 0xee, 0xd7, 0xcb, 0x54, 0x3b, 0xec, 0xdb, 0x80, 0xeb, 0x8a, 0x38, 0xfa, 0x02, 0xf2, 0x36, 0x9d, 0x85, 0x69, 0x17, 0x70, 0xe9, 0xdb, 0x20, 0x71, 0xcc, 0xc4, 0xf3, 0x92, 0xe3, 0x51, 0x18, 0x02, 0x34, 0xc2, 0xdd, 0xad, 0x85, 0x12, 0x60, 0x06, 0x14, 0xda, 0xea, 0x04, 0x88, 0x73, 0x7e, 0x6a, 0x28, 0x5a, 0xb2, 0x4c, 0x4b, 0xd9, 0xbe, 0xcf, 0x0f, 0xe4, 0xd3, 0x30, 0x4e, 0x42, 0xae, 0x08, 0xce, 0xed, 0x6c, 0xce, 0xb8, 0xba, 0xa0, 0x9d, 0x4c, 0x3c, 0xa3, 0x37, 0xd2, 0xe6, 0x2b, 0x4b, 0xd4, 0x71, 0x1f, 0xf3, 0x8a, 0x7d, 0xaa, 0x81, 0x96, 0x7b, 0x8f, 0x7b, 0xf2, 0xca, 0xbc, 0xe4, 0x26, 0x20, 0x21, 0xbd, 0xbe, 0x2c, 0xc2, 0xcc, 0xfb, 0x7a, 0x0b, 0x9c, 0xc9, 0x96, 0x64, 0xc5, 0xf1, 0x74, 0x06, 0x6d, 0x90, 0x0f, 0x0d, 0x0f, 0xc8, 0x51, 0xce, 0x7c, 0xb5, 0x33, 0x6a, 0x1f, 0xa2, 0x25, 0xa4, 0x84, 0x7d, 0xb0, 0xef, 0x1c, 0x89, 0x5a, 0xcb, 0x3a, 0x53, 0xca, 0x52, 0x62, 0xe7, 0x2c, 0x0e, 0xc3, 0x43, 0xd7, 0x0e, 0x02, 0x0c, 0x2d, 0x39, 0x39, 0x80, 0xc3, 0xe2, 0x40, 0xac, 0xc3, 0x9c, 0x2b, 0xdf, 0x8e, 0x4f, 0x13, 0x5e, 0xa5, 0x8b, 0x1a, 0x59, 0xc9, 0x1d, 0xa9, 0x1e ],
-const [ 0x9c, 0x4a, 0xe2, 0x21, 0x7c, 0x92, 0x8d, 0xd5, 0x86, 0x48, 0x36, 0xbe, 0x5d, 0x4e, 0xc2, 0x81, 0x21, 0x14, 0x71, 0xaa, 0x44, 0x1a, 0x59, 0x4b, 0x99, 0xb0, 0x13, 0xe5, 0xae, 0x01, 0xb4, 0x8c, 0x5c, 0x4f, 0xfe, 0x47, 0x9c, 0x80, 0xd8, 0xb6, 0x9c, 0xda, 0xfc, 0xf7, 0x13, 0x0b, 0xf0, 0xc9, 0xd1, 0x6c, 0x37, 0xf2, 0x9a, 0x86, 0xc8, 0xdf, 0x34, 0xd6, 0xbf, 0x8b, 0xbf, 0xcd, 0x53, 0xa2, 0x45, 0x1b, 0x08, 0xe5, 0x92, 0x2d, 0x25, 0xd0, 0x46, 0xf4, 0x69, 0x7a, 0x28, 0xe9, 0xfa, 0xbe, 0xbd, 0x4e, 0x9e, 0x98, 0x1a, 0xb6, 0x2d, 0xd1, 0xf6, 0xc7, 0x47, 0xdf, 0x03, 0x3f, 0x42, 0x07, 0x7f, 0x35, 0x66, 0xc4, 0x05, 0xa2, 0x5d, 0x6c, 0xaa, 0x1f, 0xe5, 0x11, 0x45, 0xf0, 0xc8, 0xa5, 0x0e, 0x42, 0x0e, 0x62, 0x6b, 0xb1, 0x71, 0x69, 0x06, 0x0d, 0x11, 0xaa, 0x23, 0x5e, 0x69, 0x03, 0x31, 0x25, 0x82, 0xac, 0x9e, 0xe5, 0x66, 0xd2, 0xf0, 0xe2, 0xd8, 0x82, 0x12, 0x29, 0x42, 0xc9, 0xeb, 0xd0, 0xef, 0x1a, 0x35, 0x7f, 0x7a, 0xef, 0x8d, 0x30, 0x87, 0xb3, 0xc6, 0x32, 0xb0, 0xe0, 0x83, 0x74, 0xc3, 0x65, 0x05, 0x00, 0x2a, 0x4a, 0x41, 0xc6, 0xaa, 0x96, 0x36, 0x9b, 0x51, 0x71, 0x7d, 0x81, 0xa9, 0x86, 0x22, 0x29, 0x32, 0xab, 0xb2, 0xb6, 0x0f, 0xc4, 0x95, 0xc4, 0x00, 0xe4, 0x9e, 0xa9, 0x90, 0xb6, 0xe1, 0xfa, 0x90, 0x1c, 0xc5, 0x52, 0xc3, 0x15, 0x5a, 0x4e, 0xdb, 0xe4, 0xec, 0xdc, 0xa4, 0x6f, 0xd8, 0xb6, 0x80, 0xe5, 0x9e, 0x29, 0x13, 0xa3, 0x38, 0x1b, 0x3f, 0x59, 0xaa, 0x4c, 0x53, 0x68, 0xdb, 0xdc, 0x7f, 0x8f, 0xa3, 0x0e, 0x8c, 0xc7, 0x25, 0x4b, 0xc9, 0x6b, 0x5f, 0x6a, 0x49, 0x9c, 0xff, 0x2e, 0x4b, 0xe4, 0x78, 0x10, 0xfa, 0x19, 0x56, 0x3f, 0x57, 0x85, 0xce, 0xe6, 0x73, 0x43, 0x9a, 0xad, 0xe1, 0xec, 0x04, 0x82, 0x6b, 0x74, 0x40, 0x99, 0x04, 0x4e, 0xfe, 0xb1, 0xfe, 0xd7, 0x40, 0x9a, 0x7d, 0xf1, 0x69, 0xf4, 0x2c, 0xee, 0x97, 0x39, 0x2e, 0xb1, 0x33, 0xfe, 0x58, 0x0f, 0xc7, 0x75, 0x9d, 0x7b, 0x0f, 0x37, 0xc9, 0xe3, 0x52, 0x40, 0x73, 0xd5, 0xf2, 0x3b, 0x2c, 0xe6, 0x43, 0x01, 0xfd, 0x54, 0x99, 0x5c, 0x11, 0xea, 0xa5, 0x10, 0xae, 0x24, 0x01, 0x1c, 0x6a, 0x94, 0x09, 0x3d, 0x9b, 0x84, 0xed, 0xb4, 0x0f, 0xdd, 0x04, 0x49, 0xfd, 0x48, 0x63, 0x90, 0x3c, 0x92, 0xaf, 0x6b, 0xb3, 0x55, 0x2f, 0xd0, 0x11, 0xd5, 0x25, 0xcc, 0xbe, 0x28, 0x5f, 0xc8, 0x11, 0x9a, 0x09, 0x0c, 0xc3, 0x4f, 0xc5, 0x81, 0xa3, 0x2a, 0xfe, 0xbb, 0x8c, 0xee, 0x78, 0x36, 0x94, 0xa3, 0x2c, 0xe0, 0x87, 0x3c, 0x54, 0xd8, 0x94, 0x76, 0xc2, 0x76, 0x45, 0x03, 0x75, 0x8b, 0xb5, 0xe8, 0x6e, 0xea, 0xfd, 0x24, 0xc0, 0x27, 0xef, 0x92, 0xe7, 0x9e, 0x07, 0x10, 0x5a, 0xb7, 0x9e, 0xe1, 0x64, 0x69, 0x61, 0x50, 0x2f, 0xfd, 0x02, 0x96, 0x22, 0x15, 0x2d, 0xfe, 0x6c, 0xec, 0xbe, 0x47, 0xe1, 0xdf, 0x31, 0x4a, 0x06, 0x2d, 0x59, 0xdd, 0x67, 0xfb, 0x55, 0xf6, 0x31, 0x9b, 0xc1, 0x14, 0xfc, 0x0d, 0x29, 0xda, 0xe9, 0xc6, 0xc3, 0xfd, 0xed, 0xb1, 0x5d, 0x61, 0x6c, 0x74, 0x94, 0x7f, 0x0a, 0xf4, 0x47, 0x0a, 0xbe, 0x1b, 0x4b, 0xd2, 0x28, 0xd9, 0x60, 0xe8, 0x24, 0x68, 0x64, 0x03, 0x9f, 0xd5, 0xc7, 0x22, 0xa9, 0xbc, 0x3f, 0x73, 0xcc, 0x53, 0xbd, 0x74, 0x9c, 0xa9, 0x9f, 0x58, 0x90, 0x30, 0x27, 0xac, 0x10, 0x7a, 0x2c, 0x3a, 0xcf, 0x40, 0x0f, 0x2e, 0x5b, 0xa8, 0xf1, 0x77, 0xf3, 0xc7, 0x23, 0x70, 0x98, 0x65, 0xde, 0xc0, 0x66, 0x01, 0x35, 0x7f, 0x25, 0x15, 0x47, 0x9a, 0x1c, 0x9c, 0xb9, 0x78, 0x25, 0xd0, 0x64, 0xdd, 0x07, 0x38, 0x4a, 0x0f, 0xff, 0xe2, 0xcf, 0x38, 0xa0, 0xee, 0x26, 0x0c, 0xde, 0x4c, 0x09, 0xab, 0x65, 0xc5, 0xad, 0xc9, 0x2f, 0x40, 0xf5, 0x0c, 0x55, 0x3e, 0xe6, 0xb5, 0x25, 0xa8, 0x5b, 0x83, 0x76, 0xca, 0xf9, 0xd4, 0x38, 0x9f, 0x66, 0x0e, 0x4f, 0x4f, 0xb6, 0x3d, 0xa2, 0xf6, 0x26, 0xfe, 0x6e, 0xa7, 0x0d, 0x9b, 0xe1, 0xb1, 0x0f, 0x77, 0xe4, 0x20, 0x94, 0xad, 0x38, 0x87, 0x78, 0xf4, 0xc4, 0xfd, 0x05, 0xc6, 0x2d, 0x66, 0x1e, 0xc1, 0xa8, 0xf4, 0xbc, 0x4d, 0x0c, 0xed, 0x9f, 0x7f, 0x2c, 0xae, 0x3d, 0x3d, 0x63, 0xf0, 0xff, 0xa3, 0x70, 0x4a, 0xac, 0xa6, 0x84, 0xf7, 0x25, 0xf7, 0x9a, 0xda, 0x54, 0x2a, 0x07, 0xbf, 0x5f, 0x18, 0x52, 0xe4, 0x21, 0x82, 0x45, 0xb8, 0xda, 0xf7, 0x44, 0xe2, 0x25, 0xf7, 0xde, 0x85, 0x2b, 0x58, 0xa2, 0xc2, 0x17, 0xe9, 0x34, 0x7f, 0xca, 0x56, 0xa0, 0x67, 0xcf, 0x4b, 0xed, 0x32, 0x91, 0xdc, 0xf6, 0x27, 0xcb, 0x25, 0x75, 0xdf, 0x41, 0x2d, 0x61, 0x4b, 0xae, 0x11, 0x7a, 0xf9, 0xfd, 0x5e, 0x22, 0x92, 0xbb, 0xbe, 0x6e, 0xa8, 0xcd, 0xd7, 0x7d, 0xae, 0x5e, 0x70, 0x08, 0x48, 0x1c, 0xd5, 0x3b, 0xc6, 0xa4, 0x7d, 0xc3, 0xea, 0x3a, 0xeb, 0x29, 0xf2, 0xbe, 0xd2, 0x5e, 0xd2, 0xdb, 0x7c, 0x97, 0xc2, 0x82, 0x6c, 0x5a, 0xf8, 0x97, 0x43, 0xd9, 0xb7, 0xea, 0xe0, 0x80, 0x88, 0x68, 0xcb, 0xca, 0xc8, 0x93, 0xd4, 0x58, 0x62, 0x2f, 0xf7, 0x44, 0xde, 0x3e, 0x83, 0xb3, 0x9b, 0x2f, 0x7c, 0xa9, 0x58, 0x53, 0x3d, 0x22, 0xf9, 0x90, 0x61, 0x5e, 0x88, 0x59, 0xe4, 0x7c, 0x7b, 0xdd, 0x86, 0x4a, 0x35, 0x7f, 0x70, 0x5c, 0xcf, 0x87, 0x1a, 0x5b, 0x17, 0x17, 0x6c, 0xa0, 0xd9, 0x60, 0x24, 0x01, 0x5e, 0x15, 0x77, 0xeb, 0x33, 0x20, 0xfb, 0xb2, 0x2b, 0x95, 0xc4, 0x24, 0xa7, 0xe4, 0xcd, 0x64, 0x15, 0x52, 0x9a, 0xf6, 0xb7, 0xaa, 0x1c, 0x16, 0xa6, 0x2f, 0xd5, 0x4e, 0x16, 0xd6, 0x3d, 0x47, 0xdb, 0xb2, 0x63, 0xe0, 0x2d, 0xb0, 0xd7, 0x7d, 0xa8, 0x84, 0xc8, 0xa1, 0x96, 0xe3, 0x6a, 0xc0, 0x71, 0xf3, 0x9a, 0x4e, 0xa4, 0x00, 0xc5, 0x1c, 0x92, 0x70, 0x06, 0xe4, 0xd9, 0xf9, 0x8e, 0x23, 0xd8, 0x11, 0x49, 0x26, 0x6f, 0xa6, 0xbf, 0x68, 0x05, 0x10, 0x38, 0x1b, 0xd0, 0x44, 0x23, 0x05, 0x50, 0x4a, 0xb8, 0x8d, 0x1d, 0xf1, 0xdd, 0x16, 0xe3, 0xc1, 0x46, 0x8b, 0xab, 0x31, 0xe1, 0x3b, 0x5c, 0x1a, 0x71, 0xe8, 0x81, 0x6c, 0x78, 0x1a, 0x4c, 0x20, 0x5b, 0xb9, 0xdb, 0x6d, 0xc1, 0xdb, 0xbb, 0x3f, 0x3c, 0xdb, 0xab, 0xe5, 0x2b, 0xab, 0xa2, 0x09, 0xdf, 0x6b, 0x13, 0xe6, 0xfc, 0x3a, 0x6f, 0xb5, 0x22, 0x4c, 0xec, 0x68, 0xcd, 0x3c, 0x85, 0x9b, 0x7a, 0xa4, 0x41, 0xc8, 0x0c, 0xec, 0xb9, 0xba, 0x6d, 0x5f, 0xd4, 0x44, 0x78, 0x84, 0xd6, 0x32, 0x17, 0xab, 0x99, 0x80, 0xa8, 0xc6, 0x19, 0xca, 0xa6, 0x7a, 0x37, 0x04, 0x85, 0x76, 0xb6, 0x6b, 0xdd, 0x04, 0x8a, 0xbb, 0xcb, 0xdd, 0x52, 0xa3, 0x95, 0x42, 0x23, 0x76, 0x8c, 0x48, 0x87, 0x23, 0x37, 0x74, 0xc5, 0x67, 0xad, 0x87, 0x63, 0x41, 0x43, 0x9b, 0xea, 0xa7, 0x67, 0x6f, 0xe9, 0x77, 0xcc, 0x00, 0x3c, 0xb0, 0xc8, 0x59, 0x8e, 0xe2, 0xfa, 0xab, 0x1d, 0xe3, 0x2f, 0xa0, 0xbd, 0xc4, 0x86, 0xed, 0x20, 0x03, 0xd3, 0x27, 0x54, 0x02, 0x42, 0xd7, 0x8d, 0xb8, 0x3d, 0xd0, 0x25, 0xa7, 0x8f, 0xc0, 0xe1, 0x0e, 0xc9, 0x06, 0x76, 0x5f, 0xe4, 0xc3, 0x4c, 0xf3, 0x29, 0x34, 0x81, 0xfd, 0x4e, 0x3f, 0x31, 0xbd, 0xe2, 0x4b, 0xf5, 0xf6, 0xeb, 0x55, 0xa9, 0xa1, 0xcd, 0x40, 0x73, 0xe3, 0x6d, 0x6d, 0x00, 0x3d, 0x97, 0x8c, 0x11, 0x03, 0x9d, 0xb2, 0x37, 0x0f, 0x41, 0xab, 0xda, 0xb6, 0xd5, 0x91, 0x80, 0xfb, 0xa1, 0x9d, 0x4c, 0x03, 0x85, 0x3e, 0xc5, 0xc9, 0xe0, 0x68, 0xda, 0x13, 0xb0, 0x2f, 0x22, 0xa5, 0xfa, 0x94, 0x68, 0xb4, 0x6c, 0x9f, 0x66, 0x9d, 0x41, 0xae, 0xd1, 0xd7, 0x65, 0x0c, 0x96, 0x26, 0xd9, 0xc5, 0x64, 0x12, 0x5a, 0xb9, 0x6a, 0x98, 0x3d, 0xf0, 0x62, 0x1f, 0x9e, 0x2d, 0xce, 0xae, 0xb9, 0xc6, 0x81, 0x5b, 0x98, 0xb2, 0x62, 0x07, 0xef, 0xe4, 0x6d, 0x48, 0x44, 0xd7, 0xfa, 0xa7, 0x52, 0x6b, 0x42, 0x0c, 0xb0, 0xef, 0x1f, 0x76, 0xae, 0x7f, 0x13, 0xef, 0x80, 0x90, 0x8c, 0xc0, 0x9e, 0xc9, 0x66, 0xe1, 0x6a, 0x15, 0xb2, 0xb3, 0x13, 0xf6, 0xb6, 0xf1, 0xba, 0x1c, 0x34, 0xe4, 0xd4, 0x36, 0xf0, 0xd7, 0xd0, 0x08, 0x6c, 0xcb, 0xf9, 0xbd, 0xf6, 0x6c, 0x9d, 0x7f, 0xe4, 0x43, 0x6f, 0x46, 0x1f, 0x2c, 0x2a, 0xed, 0xde, 0x0b, 0x77, 0x8b, 0xb4, 0xbb, 0x11, 0x00, 0xcd, 0x47, 0x27, 0xce, 0x75, 0x5d, 0x02, 0x2b, 0xd9, 0xff, 0xe7, 0x54, 0x12, 0x7c, 0x3f, 0x23, 0x5f, 0x9f, 0xf5, 0xe4, 0xb2, 0x26, 0x20, 0x65, 0x6f, 0x75, 0xe2, 0x4c, 0x70, 0x8c, 0x8f, 0xad, 0x4c, 0x37, 0x12, 0xdc, 0xd9, 0x84, 0x8d, 0x80, 0xef, 0x7a, 0x40, 0xe9, 0x6f, 0x08, 0xac, 0xa4, 0x84, 0x3c, 0xf8, 0x4c, 0x29, 0xb6, 0x93, 0xa2, 0xec, 0x5b, 0x1b, 0xe0, 0xf1, 0x4e, 0x7e, 0x4b, 0x39, 0x1c, 0x5f, 0x08, 0x24, 0x36, 0xbb, 0x30, 0x35, 0xa5, 0xcc, 0x27, 0x16, 0xf9, 0x2d, 0x29, 0xdc, 0x82, 0x40, 0x25, 0x8b, 0xc3, 0xcd, 0xcf, 0xdd, 0x24, 0xeb, 0xf1, 0x3f, 0xe7, 0x24, 0x01, 0x1d, 0x5d, 0xd4, 0xf9, 0x5f, 0x5a, 0xd2, 0x63, 0x34, 0xe6, 0x52, 0xb3, 0x0e, 0x35, 0x0a, 0xda, 0xee, 0xda, 0x94, 0x18, 0xe1, 0x37, 0x14, 0x12, 0xca, 0x38, 0x1a, 0x24, 0x63, 0x41, 0xca, 0xf8, 0x7f, 0x64, 0x3a, 0x58, 0x92, 0xd8, 0x1b, 0x40, 0x72, 0xa6, 0x9c, 0x38, 0x5f, 0xa6, 0x8b, 0xe0, 0x42, 0xaa, 0xbd, 0xcd, 0x32, 0xf9, 0xb1, 0x93, 0x3c, 0xff, 0x70, 0x23, 0x64, 0x42, 0xb7, 0x58, 0xe7, 0x98, 0x58, 0xcc, 0xc3, 0x98, 0xde, 0xf0, 0x79, 0x4e, 0x70, 0x5c, 0x12, 0x33, 0xf8, 0x63, 0x60, 0x5b, 0x84, 0xeb, 0x86, 0xf1, 0xec, 0x7b, 0xbb, 0xe1, 0xb5, 0x96, 0x4a, 0xd4, 0x35, 0x48, 0xdd, 0x61, 0xf8, 0xfe, 0xfc, 0x81, 0x63, 0x9b, 0xd1, 0x44, 0x97, 0xc7, 0x2e, 0xc3, 0x98, 0x8a, 0xd1, 0x56, 0xaf, 0x1b, 0xe6, 0x07, 0x0c, 0xf2, 0xcd, 0x46, 0xb0, 0x24, 0x1e, 0xde, 0x8a, 0xf0, 0xea, 0x27, 0xe0, 0x95, 0x44, 0x7d, 0xf1, 0x67, 0x00, 0xf2, 0xd9, 0x22, 0xbb, 0x40, 0xb4, 0x7e, 0x1c, 0x02, 0x06, 0x04, 0x58, 0x23, 0x5b, 0x1f, 0xfc, 0x96, 0x2a, 0x76, 0xe7, 0x47, 0xff, 0x79, 0x95, 0x52, 0xd9, 0x3a, 0xa4, 0x74, 0xd1, 0x7f, 0x90, 0xbe, 0xfd, 0x15, 0xc2, 0x91, 0x94, 0x67, 0xc9, 0xc6, 0x53, 0x4f, 0xe7, 0x2d, 0x1f, 0x2b, 0xcf, 0x39, 0xeb, 0x34, 0xad, 0xf9, 0xdc, 0x0b, 0x67, 0x4a, 0xab, 0x95, 0x22, 0x4c, 0x4c, 0x09, 0x09, 0x12, 0xcd, 0x47, 0x49, 0x9e, 0x80, 0x6c, 0x60, 0x0c, 0x5c, 0xa3, 0x98, 0x0d, 0xa1, 0x3e, 0xce, 0x97, 0xbb, 0x05, 0x78, 0xdb, 0x69, 0xcd, 0xe7, 0x78, 0x1e, 0x4d, 0xc9, 0xee, 0xa8, 0x2e, 0xf1, 0x55, 0x0f, 0x61, 0x5b, 0x4f, 0xc0, 0xb5, 0x6a, 0x3b, 0xea, 0xa9, 0x75, 0xab, 0x29, 0x7e, 0x82, 0x18, 0x62, 0x91, 0x51, 0xd5, 0xee, 0xe8, 0x9d, 0x42, 0xfa, 0x0b, 0x9e, 0x42, 0x2d, 0x15, 0xd2, 0xef, 0x8c, 0x0a, 0xfd, 0x8c, 0x9b, 0x6b, 0x6f, 0xba, 0xc5, 0x08, 0x85, 0xef, 0xfe, 0x16, 0x72, 0x25, 0xa7, 0x81, 0x3f, 0xcf, 0xb2, 0x84, 0x11, 0x11, 0x06, 0x76, 0xab, 0x30, 0x25, 0xe7, 0x33, 0x48, 0x0c, 0xeb, 0x39, 0x3d, 0x5b, 0xb6, 0xf5, 0xf3, 0xb5, 0x69, 0xd0, 0xc2, 0x6a, 0x2c, 0x27, 0x24, 0x53, 0x7d, 0x4b, 0xb1, 0xfe, 0xc7, 0xcc, 0x4e, 0x0b, 0x37, 0xf7, 0xa1, 0xd6, 0xcb, 0x9d, 0xc8, 0x57, 0xac, 0x16, 0x4a, 0x46, 0xbd, 0x86, 0x4d, 0x82, 0x74, 0x5f, 0x0a, 0xb3, 0xe9, 0x27, 0x7f, 0x2e, 0x2c, 0x7c, 0x63, 0x1a, 0xdc, 0x55, 0x5f, 0xd1, 0xf5, 0x8a, 0x7b, 0x89, 0xea, 0x97, 0xd7, 0x34, 0xf4, 0x9d, 0x9b, 0xa5, 0xa9, 0xa9, 0x30, 0xf3, 0xd0, 0x39, 0xb1, 0x22, 0x74, 0xfc, 0x9c, 0x00, 0x37, 0xda, 0xce, 0x4e, 0xe9, 0x34, 0xae, 0x20, 0x59, 0x6d, 0xa8, 0x87, 0x6b, 0xa9, 0xdd, 0x6c, 0x6b, 0xd4, 0x18, 0xbf, 0xa1, 0xe7, 0x04, 0xd2, 0x26, 0x66, 0x9d, 0xff, 0xf6, 0x2d, 0xe5, 0x91, 0x45, 0x6d, 0xd8, 0xe2, 0x17, 0xf2, 0xa1, 0xc0, 0x0b, 0xa7, 0x0e, 0x15, 0x77, 0x5b, 0x42, 0xc7, 0xba, 0xc5, 0xaa, 0xde, 0xce, 0xc6, 0x32, 0xe5, 0x1d, 0xef, 0xb8, 0x92, 0x96, 0x43, 0xc0, 0xa9, 0xff, 0x3e, 0x6a, 0x1d, 0x8d, 0x16, 0xa2, 0x78, 0xb2, 0x40, 0x97, 0x7e, 0x36, 0x36, 0x6e, 0x0d, 0x89, 0x78, 0x37, 0x48, 0x58, 0xd0, 0x20, 0xf5, 0x5e, 0xdb, 0xe8, 0x22, 0x7d, 0xc5, 0x97, 0x0f, 0x0d, 0x54, 0x6d, 0x48, 0x74, 0x28, 0x18, 0x12, 0xf6, 0x41, 0x2a, 0x08, 0xcf, 0xc1, 0xc9, 0x06, 0x7f, 0xf3, 0xa8, 0x46, 0x66, 0x8d, 0x37, 0xc9, 0x90, 0x32, 0x17, 0xf9, 0xd2, 0x3b, 0xd1, 0x8c, 0x16, 0xb7, 0xc7, 0xab, 0xf3, 0xb0, 0x6b, 0x54, 0x81, 0xb1, 0xae, 0xfd, 0x6b, 0x84, 0xbc, 0x7a, 0x45, 0x40, 0xe6, 0x20, 0x20, 0x84, 0xdf, 0x2b, 0x5c, 0xfd, 0x2c, 0x5d, 0xbe, 0x2e, 0xd6, 0xe8, 0xc2, 0x70, 0x62, 0x8e, 0x33, 0x37, 0x02, 0x07, 0xf8, 0x98, 0x0d, 0xa3, 0x31, 0x08, 0xad, 0x30, 0x83, 0x67, 0xd8, 0x1e, 0xaf, 0x3d, 0x81, 0xe1, 0x6a, 0x43, 0x0f, 0x97, 0x69, 0x25, 0x0e, 0xeb, 0xbb, 0x86, 0x24, 0x39, 0x5b, 0x44, 0x47, 0xf3, 0x06, 0xfe, 0x2e, 0x43, 0x4a, 0xd4, 0x05, 0xf1, 0xe0, 0x6e, 0x65, 0x88, 0x3b, 0x40, 0x83, 0xb4, 0x61, 0x0c, 0xa8, 0xef, 0xfa, 0xa8, 0xe1, 0x5c, 0xa6, 0x01, 0xf7, 0xf3, 0x94, 0x60, 0xa1, 0xdf, 0x51, 0xec, 0xf9, 0x24, 0xdd, 0x71, 0x2d, 0x85, 0x04, 0x5f, 0x77, 0xa5, 0xeb, 0x16, 0x4f, 0x6c, 0xea, 0x60, 0xdf, 0xac, 0x99, 0x3f, 0xb7, 0x05, 0x2e, 0xea, 0xc2, 0x06, 0x06, 0x12, 0x78, 0x94, 0x81, 0x69, 0x56, 0x90, 0x13, 0x65, 0x8b, 0xb4, 0x98, 0x41, 0xf5, 0xbe, 0xe8, 0x46, 0x4b, 0xd1, 0xac, 0x48, 0x9c, 0x18, 0x70, 0x73, 0xf8, 0xac, 0xf9, 0x48, 0x6d, 0xb8, 0xd8, 0xe2, 0x35, 0xdb, 0x3f, 0x7e, 0x2d, 0xcd, 0x14, 0x3a, 0x89, 0x46, 0x44, 0x1d, 0xc6, 0x1b, 0x5a, 0x58, 0xe1, 0xaa, 0x50, 0xcb, 0xc7, 0x79, 0xa4, 0xcb, 0x0c, 0x1a, 0xaf, 0x23, 0xdf, 0x52, 0x33, 0x58, 0x3e, 0x7a, 0x33, 0x32, 0x66, 0x24, 0x07, 0x77, 0x8e, 0x02, 0xaf, 0xfa, 0xd4, 0x04, 0x68, 0xd4, 0x78, 0xc1, 0x7d, 0xf2, 0x48, 0x18, 0x60, 0xd0, 0x5b, 0x17, 0xf9, 0x83, 0x02, 0x1b, 0x3e, 0xfd, 0xfc, 0x39, 0x04, 0x8d, 0xe9, 0xdd, 0x14, 0xa5, 0x01, 0xb1, 0x82, 0xe0, 0x06, 0xc1, 0x3a, 0x43, 0x77, 0xdc, 0xdc, 0xc4, 0x07, 0x3d, 0xca, 0x08, 0x4e, 0x6b, 0x7f, 0x71, 0xbd, 0x5d, 0x22, 0x58, 0xd7, 0xe2, 0x5a, 0x97, 0x9e, 0x40, 0x65, 0x4b, 0x4c, 0x1b, 0x64, 0xd8, 0x44, 0x99, 0xf9, 0x2d, 0x48, 0xc4, 0x14, 0x49, 0xec, 0x30, 0x0a, 0xfd, 0x4b, 0xdd, 0xe8, 0xf4, 0xf8, 0x5e, 0x06, 0xf2, 0x38, 0x3b, 0xdf, 0x59, 0x6e, 0x95, 0x1f, 0xf1, 0xd6, 0x08, 0xfe, 0xe8, 0x76, 0xd6, 0xcd, 0x18, 0x52, 0x41, 0xce, 0x89, 0xe0, 0x38, 0x49, 0x37, 0xbb, 0x36, 0xdc, 0x15, 0x9b, 0x68, 0x13, 0x51, 0x85, 0x0e, 0x39, 0xda, 0x3f, 0x23, 0x6d, 0x20, 0x07, 0x40, 0xf8, 0x1b, 0x84, 0xbe, 0xdd, 0x8e, 0xfd, 0x1b, 0xb2, 0x8d, 0xc9, 0x9e, 0xaf, 0x3d, 0x07, 0x3e, 0x05, 0xdb, 0x8f, 0xc1, 0x70, 0xff, 0x28, 0x21, 0x10, 0x22, 0xfb, 0x33, 0x75, 0x5e, 0x47, 0x8a, 0xf9, 0x76, 0x57, 0x9a, 0x52, 0x16, 0xb1, 0x19, 0x67, 0x5c, 0x91, 0xab, 0x63, 0x96, 0x95, 0xbd, 0x08, 0x4e, 0xba, 0xb1, 0x47, 0x84, 0x87, 0x3c, 0x0d, 0x3a, 0x88, 0x0d, 0x5f, 0x36, 0xfe, 0xb0, 0xa9, 0x03, 0xd5, 0xb1, 0x53, 0x39, 0xd6, 0x04, 0x96, 0xfe, 0x1e, 0xa4, 0x8e, 0xcd, 0xcf, 0x7b, 0x90, 0x76, 0x05, 0x82, 0xbd, 0x66, 0x0c, 0x29, 0xd7, 0x29, 0xd0, 0xf9, 0x54, 0x2d, 0x94, 0x78, 0xb1, 0xc9, 0xe7, 0x4d, 0x09, 0x7d, 0xd4, 0xa4, 0xe6, 0x7c, 0x5a, 0xd4, 0x57, 0x67, 0x1c, 0x3f, 0x43, 0x5c, 0x58, 0x7a, 0xfc, 0x2f, 0x1d, 0xaf, 0x17, 0xf7, 0xb9, 0x3f, 0x7c, 0xcd, 0x71, 0xab, 0xb9, 0xd0, 0x76, 0xb4, 0x9c, 0x6d, 0x14, 0xc1, 0x00, 0xdd, 0x2b, 0x82, 0xe7, 0xee, 0xe3, 0xd3, 0xc9, 0x07, 0x9c, 0xe3, 0x2c, 0x66, 0x24, 0x95, 0x75, 0xad, 0x2d, 0x26, 0xfe, 0x9d, 0xfe, 0x11, 0x68, 0x21, 0x68, 0x2f, 0x33, 0x8e, 0xfc, 0x23, 0x8b, 0x29, 0x7b, 0xf5, 0x65, 0xea, 0x8e, 0xfd, 0xcb, 0x7f, 0xb7, 0x03, 0x74, 0x94, 0x88, 0xa4, 0x98, 0x52, 0x13, 0xf7, 0x02, 0x25, 0xa1, 0x71, 0x67, 0xc3, 0xa7, 0x06, 0xf6, 0x6a, 0xf5, 0x91, 0x30, 0x68, 0x31, 0x76, 0xfa, 0xe1, 0x84, 0x86, 0xf1, 0xcd, 0x93, 0x23, 0xfd, 0x40, 0xb1, 0xa4, 0x29, 0xee, 0x52, 0xfb, 0xb2, 0xee, 0xc3, 0x94, 0x5d, 0xbe, 0x19, 0x81, 0x0e, 0x88, 0x68, 0xd5, 0x97, 0xa3, 0x35, 0x4d, 0xce, 0x5d, 0x2d, 0x36, 0xe2, 0xf8, 0x17, 0x8a, 0xef, 0xf2, 0x07, 0x5d, 0xcf, 0x8a, 0xd4, 0x77, 0x34, 0x7f, 0xcd, 0x43, 0xf3, 0x1b, 0xa8, 0xe8, 0xa3, 0x70, 0xbb, 0xb5, 0x67, 0xe2, 0x6f, 0xc2, 0x08, 0xe5, 0xf1, 0xd4, 0x47, 0x08, 0x2a, 0x82, 0x71, 0x33, 0xf2, 0x96, 0x33, 0x2c, 0x80, 0xb6, 0xb0, 0x60, 0x25, 0x44, 0xd1, 0xe1, 0x3b, 0x82, 0xdc, 0xab, 0x58, 0xfa, 0x49, 0x2b, 0xc7, 0x1d, 0xd1, 0x02, 0x38, 0x2a, 0xc7, 0x06, 0xb6, 0x51, 0xab, 0x89, 0xda, 0x19, 0xfd, 0xdf, 0x3e, 0xff, 0x4f, 0x1a, 0x35, 0x5f, 0x9e, 0x18, 0xb9, 0x98, 0xe2, 0xc0, 0xa5, 0x6c, 0xe4, 0x88, 0x25, 0xa5, 0x50, 0x3a, 0x6a, 0xfe, 0x0b, 0xf9, 0xa2, 0x40, 0xc6, 0x7f, 0x27, 0xac, 0xd4, 0xa8, 0xf6, 0x99, 0x38, 0x34, 0x64, 0x5e, 0x03, 0xc8, 0x0c, 0x72, 0xdd, 0x37, 0x0c, 0xd2, 0xe1, 0x00, 0x71, 0xa3, 0xae, 0x18, 0xef, 0x19, 0xba, 0xe9, 0xd6, 0x97, 0xea, 0x9a, 0x41, 0x18, 0x60, 0x91, 0x90, 0xcd, 0x95, 0x36, 0x19, 0x07, 0xa7, 0xfa, 0x1b, 0x58, 0xf4, 0x99, 0xf3, 0xf5, 0xe7, 0x9b, 0x93, 0x5f, 0x12, 0x21, 0x2f, 0x43, 0x7d, 0xde, 0x39, 0x9e, 0x3e, 0x64, 0x90, 0x24, 0x4a, 0xa1, 0xf5, 0xe3, 0x8b, 0xa9, 0xbe, 0x24, 0x33, 0xb6, 0xce, 0x92, 0x4f, 0x6c, 0xc4, 0x9e, 0x9f, 0x62, 0x73, 0x21, 0xa5, 0xdf, 0x93, 0x43, 0xfc, 0xe1, 0xb5, 0x9d, 0xeb, 0x64, 0x7d, 0x9a, 0x3a, 0xe0, 0x0b, 0x23, 0x44, 0x14, 0xba, 0x7b, 0x4e, 0x02, 0x0d, 0x67, 0x17, 0x3b, 0xe6, 0x93, 0xb0, 0x5c, 0xf9, 0x31, 0x8e, 0xd9, 0x81, 0xe3, 0xde, 0xf9, 0x31, 0xdb, 0x18, 0x22, 0x6e, 0x40, 0xd7, 0x57, 0xbb, 0xd4, 0xe8, 0xff, 0x75, 0xd5, 0xa1, 0xe8, 0xc0, 0x21, 0x74, 0x8b, 0xc1, 0x9d, 0xc4, 0x92, 0x0e, 0xd6, 0xf6, 0x97, 0x62, 0xe9, 0xcc, 0x2f, 0x96, 0xa1, 0xee, 0x27, 0xcc, 0xe0, 0xca, 0x0d, 0xee, 0x40, 0x9e, 0xf2, 0x57, 0xf9, 0xd3, 0x6f, 0xcf, 0x06, 0x8d, 0xe6, 0xbd, 0x83, 0x80, 0x0a, 0x98, 0x5a, 0x05, 0xa2, 0x9f, 0x1e, 0x6d, 0x8a, 0xca, 0x37, 0x95, 0xfa, 0x00, 0x40, 0xba, 0x0a, 0x8a, 0xad, 0x8f, 0x76, 0xc8, 0xb1, 0x8d, 0x9f, 0x22, 0x5f, 0x8b, 0xd3, 0x42, 0x0f, 0x8e, 0xce, 0x80, 0x03, 0xe2, 0x81, 0x9e, 0x4a, 0x6a, 0x12, 0xb6, 0xe5, 0x34, 0x23, 0x70, 0x29, 0x50, 0x57, 0x78, 0x64, 0xe3, 0x12, 0x30, 0xc3, 0x77, 0x81, 0xa2, 0x73, 0x95, 0xdb, 0xb8, 0x07, 0x96, 0xe6, 0xaf, 0x1a, 0xb6, 0xbc, 0xc9, 0x35, 0x6a, 0xcf, 0x42, 0xf3, 0xf4, 0x2b, 0x86, 0x62, 0x34, 0xfb, 0xa1, 0xad, 0xc1, 0x4f, 0xf7, 0xf8, 0x38, 0x1c, 0x35, 0x8c, 0xd4, 0x84, 0x87, 0x34, 0x3f, 0x58, 0x0c, 0xe6, 0xa8, 0xdc, 0x87, 0xa6, 0x16, 0xca, 0x57, 0xa8, 0xfc, 0x99, 0xa9, 0xb5, 0x0d, 0xfe, 0xec, 0xcf, 0x51, 0xb4, 0x85, 0x18, 0x79, 0x79, 0xc4, 0xf0, 0x70, 0x59, 0x17, 0x5e, 0x32, 0x2e, 0x7e, 0xb1, 0xe1, 0x68, 0x3f, 0x67, 0x16, 0x0a, 0xdb, 0x4d, 0x75, 0xf5, 0x40, 0xe8, 0x84, 0x69, 0x40, 0x14, 0xbd, 0xc9, 0x42, 0xeb, 0xe1, 0x9e, 0x38, 0xe8, 0x90, 0xdf, 0xd1, 0x4c, 0x17, 0x70, 0xef, 0xc1, 0x89, 0xe8, 0x5b, 0x3e, 0x11, 0x97, 0xb8, 0x2a, 0x86, 0xc8, 0xb5, 0xc4, 0x40, 0x43, 0x87, 0xc2, 0x2a, 0x16, 0x97, 0x38, 0x19, 0x95, 0x77, 0xbc, 0x5c, 0xa0, 0x1b, 0xc8, 0x95, 0x24, 0x46, 0x60, 0xc7, 0xe4, 0x42, 0xf4, 0xaf, 0x7a, 0xd4, 0x87, 0x58, 0x98, 0x6f, 0x11, 0xea, 0x94, 0xa8, 0x22, 0xc2, 0x24, 0xea, 0xc9, 0xc8, 0x66, 0x6b, 0xb4, 0xfd, 0x23, 0x5e, 0x98, 0x54, 0x54, 0x6b, 0xd4, 0xc3, 0xe5, 0x5c, 0x51, 0x99, 0xba, 0x19, 0xac, 0x12, 0xf0, 0xd6, 0x97, 0x29, 0x65, 0x8b, 0x7c, 0xad, 0x7a, 0xa4, 0x64, 0x97, 0x17, 0xfa, 0x18, 0x9b, 0xf0, 0x03, 0x85, 0xfd, 0x07, 0x45, 0x65, 0xa6, 0x72, 0x11, 0x1c, 0x77, 0x5f, 0x6d, 0xe0, 0xdd, 0x55, 0x52, 0x1d, 0xa6, 0xbd, 0x18, 0x18, 0x13, 0xa0, 0x2e, 0xd2, 0x2e, 0xb2, 0x0e, 0x2f, 0x5d, 0x90, 0x70, 0x57, 0x38, 0x46, 0xbe, 0x5d, 0x98, 0x14, 0xc9, 0x1f, 0xf0, 0x72, 0xba, 0x6d, 0xe1, 0x51, 0x4b, 0x6d, 0x08, 0xa4, 0x37, 0x3d, 0x1b, 0x1f, 0xee, 0xdb, 0x34, 0x3e, 0x8e, 0x42, 0x6c, 0x8a, 0x0f, 0xd6, 0xac, 0x18, 0xbd, 0x02, 0xc0, 0x52, 0xec, 0x20, 0xad, 0xf9, 0xe7, 0x99, 0x45, 0x6b, 0x29, 0x4d, 0xf8, 0x22, 0xd0, 0x35, 0xed, 0x7e, 0x4e, 0x46, 0x52, 0xc4, 0x62, 0x99, 0xf0, 0x66, 0x47, 0xca, 0x02, 0x85, 0x2b, 0x9e, 0x47, 0xb4, 0xe2, 0xe8, 0x56, 0xff, 0xdc, 0xad, 0x32, 0x2c, 0x54, 0x86, 0x1e, 0x40, 0xcb, 0x46, 0xb2, 0x45, 0xb5, 0xdd, 0x2f, 0x4b, 0x72, 0x7c, 0x10, 0xad, 0x7f, 0xfa, 0xe1, 0x95, 0xee, 0x77, 0x54, 0xc2, 0x13, 0x3f, 0x92, 0x89, 0x81, 0xf0, 0xcf, 0x1a, 0x35, 0xe0, 0x21, 0x05, 0x10, 0xb9, 0x92, 0xfd, 0x8b, 0x66, 0x74, 0xdb, 0xa6, 0x33, 0xf4, 0xe6, 0x21, 0x2f, 0xf2, 0x51, 0xef, 0xd5, 0x10, 0x05, 0xe8, 0xec, 0x09, 0xa1, 0xbe, 0xac, 0x45, 0xbf, 0x32, 0x22, 0xaa, 0x7a, 0x87, 0xd6, 0xb4, 0x2d, 0x37, 0xaa, 0xc8, 0x7c, 0xe6, 0x05, 0xc5, 0x99, 0x94, 0x31, 0xdd, 0xc0, 0x16, 0x02, 0xa3, 0x04, 0xc7, 0xb9, 0x64, 0x4e, 0x7b, 0x27, 0xbb, 0xa3, 0xb4, 0x16, 0x60, 0xa5, 0x19, 0xe4, 0x41, 0x5d, 0x23, 0x71, 0xd4, 0x37, 0x1a, 0x3c, 0xab, 0x4e, 0x40, 0xc8, 0x49, 0xea, 0x4c, 0x45, 0x34, 0x47, 0x19, 0x6c, 0x4b, 0x99, 0xa0, 0xab, 0x5a, 0x4c, 0x24, 0x82, 0xec, 0x90, 0xac, 0x2d, 0x60, 0x15, 0xb6, 0x83, 0x3f, 0x13, 0x2a, 0x1e, 0xcd, 0x8e, 0x8d, 0xbc, 0xde, 0xd8, 0x77, 0xe5, 0xeb, 0x57, 0x47, 0xce, 0x65, 0x88, 0x15, 0x7e, 0x49, 0x44, 0xe8, 0x2f, 0xf5, 0x43, 0x29, 0xf7, 0x3a, 0xde, 0x58, 0xa7, 0xb2, 0x19, 0xfe, 0xf4, 0x54, 0xe0, 0xe3, 0xd4, 0x45, 0x91, 0x80, 0x2b, 0xf1, 0xbb, 0xb7, 0xa7, 0x5b, 0x26, 0xc2, 0xe8, 0xb1, 0x13, 0x6a, 0xe5, 0x24, 0xc4, 0x79, 0x8b, 0xf7, 0x3f, 0x71, 0xa7, 0xd5, 0x50, 0x7e, 0x05, 0x67, 0xcd, 0xaa, 0xd9, 0x26, 0x1d, 0x50, 0x5f, 0x6e, 0xfb, 0xd3, 0xbf, 0xd4, 0x78, 0x8f, 0x33, 0xba, 0x3f, 0x10, 0x6b, 0x21, 0x1d, 0x82, 0x31, 0xbe, 0xc1, 0x69, 0x49, 0x4f, 0xc0, 0x93, 0x9b, 0x2f, 0xdc, 0x4a, 0x94, 0x28, 0x85, 0xce, 0xc9, 0x89, 0xa0, 0x02, 0xdd, 0x79, 0x88, 0x65, 0xa5, 0x8b, 0x52, 0x44, 0x8b, 0x93, 0x56, 0x2e, 0x30, 0xb7, 0xea, 0xa9, 0x56, 0xc9, 0x71, 0x23, 0xfc, 0xd4, 0x95, 0x2b, 0xca, 0xf4, 0xd0, 0xe1, 0xb0, 0x6b, 0x31, 0xab, 0xcb, 0xf2, 0x5d, 0x2a, 0x88, 0x4d, 0xd4, 0x6d, 0x0b, 0x22, 0x75, 0x64, 0xd2, 0x0b, 0x45, 0x97, 0x95, 0xea, 0x6c, 0x17, 0x71, 0x7d, 0x80, 0xb5, 0x46, 0x32, 0x06, 0x73, 0x5e, 0x3c, 0x36, 0x38, 0x4f, 0xe6, 0xff, 0xc8, 0x22, 0x27, 0x4b, 0xf2, 0xb4, 0x77, 0x84, 0x0c, 0x5d, 0xe2, 0x57, 0x9c, 0xd0, 0x5b, 0xb8, 0x58, 0x42, 0x52, 0x26, 0x51, 0xcf, 0x89, 0x30, 0x6b, 0x19, 0x23, 0x38, 0x10, 0x32, 0xfe, 0x77, 0x25, 0xbc, 0x42, 0x41, 0x3d, 0x4e, 0x3a, 0x8a, 0x0d, 0x1a, 0x63, 0xaa, 0x21, 0xcd, 0xc3, 0x5d, 0xcd, 0xb7, 0x7c, 0x0e, 0x65, 0x2c, 0xa1, 0x55, 0xb0, 0x2a, 0x48, 0xbe, 0x9b, 0x3b, 0xe1, 0xcc, 0x2b, 0x9d, 0xc6, 0x3d, 0xb5, 0xa1, 0x13, 0x90, 0x51, 0x51, 0xb7, 0xc5, 0x8c, 0x55, 0xcb, 0x64, 0x5d, 0x18, 0x23, 0xc0, 0x5b, 0x26, 0x23, 0x7d, 0x2c, 0xd9, 0xd4, 0x50, 0x41, 0x34, 0x37, 0x06, 0xc0, 0x0f, 0xda, 0xc8, 0xc2, 0x74, 0xa8, 0x9d, 0xbf, 0x4a, 0x05, 0x30, 0x46, 0x30, 0x1b, 0xd4, 0xf2, 0xac, 0x6e, 0xc5, 0x99, 0x85, 0xb7, 0xb0, 0xc6, 0x6d, 0xef, 0x76, 0x6a, 0xe3, 0xaa, 0x2e, 0xce, 0x58, 0xa6, 0x69, 0xcc, 0x91, 0xa4, 0xb9, 0x3f, 0x4c, 0x76, 0x74, 0xb8, 0x26, 0x5a, 0xb5, 0x73, 0xbc, 0x86, 0xa4, 0x89, 0x11, 0x04, 0xf7, 0x66, 0x30, 0xc0, 0xb9, 0x7e, 0x12, 0xe0, 0x4a, 0x3c, 0xc1, 0x53, 0xa8, 0x3b, 0xbe, 0xad, 0xec, 0xb9, 0xa0, 0x32, 0x18, 0x49, 0xff, 0x30, 0x0f, 0xc7, 0x90, 0x93, 0xe5, 0x91, 0x91, 0xb3, 0x59, 0xf4, 0x68, 0x70, 0xa0, 0xe5, 0x87, 0x81, 0x65, 0xf2, 0x92, 0x09, 0x0d, 0x78, 0xc4, 0x6b, 0x3f, 0x15, 0x8f, 0x60, 0xa4, 0x60, 0x82, 0x47, 0xeb, 0xd8, 0x70, 0xbc, 0x11, 0x1b, 0xcf, 0x6b, 0xdf, 0x59, 0x5e, 0x26, 0xb4, 0x07, 0x0b, 0x36, 0x84, 0xd8, 0x13, 0xef, 0x21, 0xe9, 0x6b, 0x88, 0xb9, 0x3b, 0x5f, 0x29, 0xa0, 0x67, 0x79, 0x44, 0x50, 0x8d, 0xa4, 0x29, 0xaf, 0x8e, 0x91, 0xd5, 0x90, 0x7b, 0x5a, 0x0b, 0x7b, 0x4d, 0x65, 0xa7, 0xb1, 0xd6, 0x8c, 0x2e, 0x6b, 0xf7, 0x7a, 0xa9, 0x63, 0x14, 0x58, 0xb4, 0x95, 0xc5, 0xaa, 0xd2, 0x47, 0xce, 0x73, 0x03, 0x47, 0x52, 0xa0, 0x99, 0x74, 0x43, 0xa3, 0x47, 0x7f, 0x1d, 0x5f, 0x7b, 0xf3, 0xd4, 0x44, 0xed, 0x73, 0x0a, 0xbb, 0x78, 0x43, 0x86, 0xc4, 0x2a, 0x0b, 0xe2, 0xdd, 0x97, 0xd7, 0x83, 0x27, 0x72, 0x61, 0xcf, 0xc4, 0x5e, 0x93, 0x99, 0x83, 0x01, 0x48, 0xe0, 0xbf, 0x5a, 0x53, 0xba, 0x84, 0x55, 0xc2, 0x8b, 0xf4, 0x9d, 0x64, 0x7a, 0xe9, 0xb2, 0x88, 0x26, 0xdc, 0x3b, 0x08, 0x94, 0x06, 0x9d, 0x86, 0x6d, 0xc4, 0xcc, 0xf6, 0x66, 0x40, 0x62, 0x5c, 0xff, 0x4e, 0xee, 0xd7, 0x70, 0x94, 0x8e, 0xdf, 0xe0, 0xee, 0xc0, 0xcb, 0xd9, 0x11, 0x75, 0x96, 0xf9, 0x6e, 0x67, 0xe2, 0xea, 0x59, 0xad, 0x3d, 0x94, 0x6a, 0x8c, 0xa4, 0x90, 0x23, 0x91, 0x45, 0xe0, 0xd4, 0xdc, 0x89, 0xde, 0xbc, 0xbf, 0x52, 0x73, 0x71, 0x88, 0x82, 0x89, 0x82, 0x9a, 0xbc, 0xc3, 0x5a, 0xc3, 0x6e, 0x6b, 0x67, 0xc9, 0x0f, 0xac, 0x7c, 0x46, 0xa5, 0x01, 0x74, 0xb6, 0x8b, 0xed, 0x19, 0xcf, 0x71, 0xed, 0x44, 0x11, 0xa4, 0xab, 0x45, 0x9d, 0x90, 0x74, 0x84, 0x4a, 0x83, 0xec, 0x69, 0xf6, 0xb3, 0x00, 0x7a, 0x1a, 0x83, 0x1d, 0xc3, 0xa1, 0x02, 0x9f, 0x7b, 0xfb, 0xb4, 0x8d, 0xe4, 0x6d, 0x96, 0x83, 0x73, 0xab, 0x5c, 0xef, 0x31, 0xa8, 0xfd, 0x80, 0x61, 0xad, 0x71, 0xdc, 0x63, 0xa9, 0xb9, 0x92, 0xd8, 0xc8, 0x21, 0x4f, 0x07, 0x46, 0xc2, 0x54, 0x80, 0x86, 0x4a, 0x27, 0xfe, 0x5e, 0x00, 0x89, 0x92, 0xb5, 0x02, 0xa9, 0xfe, 0x51, 0xd1, 0x97, 0x5f, 0xea, 0x10, 0xfb, 0x10, 0x83, 0x89, 0x07, 0xca, 0xfa, 0x71, 0xaa, 0x10, 0xdd, 0xed, 0x07, 0xca, 0x7f, 0xd5, 0x25, 0x30, 0x4b, 0xb7, 0xe8, 0xe9, 0x59, 0x1f, 0x40, 0x74, 0x3f, 0x15, 0xa0, 0xc8, 0x2a, 0xe8, 0xb2, 0x37, 0x2d, 0x2a, 0x49, 0x98, 0xd8, 0xfc, 0x97, 0xa5, 0x0d, 0x8c, 0xa0, 0xa2, 0x0f, 0xdb, 0xee, 0x40, 0xdc, 0xc4, 0x86, 0xc0, 0xbd, 0x3a, 0x1c, 0x5b, 0x1b, 0xd1, 0x83, 0xe2, 0x94, 0x7f, 0x67, 0xa2, 0x4e, 0xa4, 0x3e, 0x8a, 0x8b, 0x49, 0x7c, 0x90, 0x7e, 0xa5, 0x06, 0x50, 0x5e, 0xe6, 0xea, 0xf6, 0xb8, 0x2e, 0x4d, 0x5f, 0x09, 0xdb, 0xa5, 0x7b, 0x8c, 0x0b, 0x28, 0xf6, 0x51, 0x5f, 0x83, 0x17, 0x8f, 0x00, 0xd0, 0xe8, 0x3b, 0xe0, 0xc2, 0x97, 0xd9, 0x43, 0x23, 0x1c, 0x93, 0x7d, 0x81, 0x1c, 0x88, 0xfd, 0x24, 0x0d, 0x66, 0x8a, 0x43, 0x9c, 0x3b, 0xcd, 0x77, 0x4b, 0x88, 0x10, 0x6f, 0x5f, 0x98, 0x45, 0xe6, 0xf9, 0x0f, 0x4a, 0xd2, 0x83, 0xc6, 0x6b, 0xde, 0x4d, 0xd6, 0x29, 0x1b, 0x78, 0xf3, 0x39, 0xf2, 0x14, 0xfc, 0xd0, 0x5e, 0x85, 0xcf, 0x1e, 0x58, 0x2b, 0x62, 0x18, 0x92, 0x42, 0x10, 0x7b, 0x67, 0x06, 0x30, 0x0e, 0x12, 0x1b, 0xec, 0x27, 0x1f, 0x2d, 0x51, 0x70, 0x20, 0xd4, 0xa2, 0xeb, 0xa1, 0xba, 0xf2, 0x34, 0x5e, 0xff, 0xf1, 0x07, 0xb3, 0xdc, 0x07, 0x01, 0x53, 0x87, 0x9f, 0xab, 0x3d, 0x57, 0xc6, 0xb4, 0xec, 0x29, 0xf4, 0x7e, 0xce, 0x02, 0x29, 0xdd, 0xf8, 0xf6, 0x3c, 0x1b, 0x18, 0x48, 0x70, 0x3f, 0xab, 0xd2, 0x49, 0x8e, 0x70, 0xa7, 0x9e, 0x53, 0x1c, 0xf8, 0xee, 0xdc, 0x4f, 0x34, 0xf8, 0xc5, 0xc7, 0x73, 0x85, 0x79, 0xd4, 0x15, 0x89, 0xf5, 0x0b, 0xa6, 0x6a, 0xcf, 0x3f, 0x05, 0xa0, 0x77, 0xad, 0xc6, 0x7e, 0xbe, 0x77, 0xd4, 0x4f, 0x94, 0x54, 0x5b, 0xa5, 0x16, 0x85, 0xe5, 0xee, 0xc8, 0x0b, 0xc3, 0x48, 0x1e, 0x17, 0xae, 0x97, 0x42, 0xc2, 0xae, 0xd4, 0x11, 0xfe, 0x3b, 0xa8, 0x66, 0xcc, 0xa2, 0x39, 0x9c, 0xb0, 0xab, 0x44, 0x4e, 0x62, 0x79, 0x6c, 0x61, 0xc7, 0xb1, 0xd1, 0x45, 0x1f, 0xdf, 0xe5, 0x77, 0x80, 0x15, 0x7b, 0x4b, 0x83, 0xd5, 0x21, 0xe8, 0x3d, 0x30, 0xb0, 0x94, 0x71, 0x30, 0x21, 0x32, 0x03, 0x74, 0xa2, 0x08, 0xb0, 0x1a, 0xe9, 0xc6, 0xfd, 0xe2, 0xc9, 0xc4, 0x6d, 0x8f, 0x03, 0x8c, 0xf7, 0x91, 0x5e, 0x98, 0xb7, 0xe2, 0xfa, 0x5d, 0xe4, 0x2e, 0xe1, 0x88, 0x02, 0x36, 0xdf, 0x87, 0x59, 0x76, 0x94, 0x4b, 0xa5, 0x05, 0xc7, 0x4c, 0x0f, 0xbe, 0xfd, 0xce, 0x5c, 0x9d, 0x4a, 0x63, 0x65, 0x6b, 0x68, 0xb2, 0xc7, 0x9e, 0x06, 0x76, 0xdb, 0x7b, 0x62, 0xca, 0xe9, 0x7d, 0x1a, 0xa3, 0x98, 0xfa, 0x40, 0x9e, 0xa9, 0x04, 0xac, 0xfc, 0xe5, 0x8e, 0x96, 0xea, 0x54, 0xcf, 0x64, 0x06, 0xb0, 0xec, 0xc0, 0x20, 0x19, 0xd1, 0xee, 0x3d, 0x0a, 0x5f, 0x5c, 0xe2, 0x8c, 0xcd, 0x7b, 0x8f, 0xaa, 0x48, 0xce, 0x89, 0x24, 0xdd, 0x41, 0xdc, 0x68, 0x99, 0xbb, 0xa1, 0xbd, 0xef, 0xf6, 0x7d, 0xc2, 0x59, 0x8f, 0x6a, 0x17, 0x42, 0x59, 0xba, 0x5a, 0x24, 0xf7, 0x59, 0x55, 0xee, 0xaa, 0x52, 0x75, 0xa8, 0x67, 0x94, 0x7e, 0x59, 0x2d, 0xf7, 0x7e, 0x29, 0x95, 0x7a, 0x00, 0xc3, 0xab, 0xce, 0x81, 0xfd, 0xfc, 0x19, 0x28, 0xbb, 0xf0, 0xf4, 0xb1, 0x10, 0x5a, 0xb5, 0xab, 0xa7, 0x4e, 0xf4, 0xe3, 0x62, 0x33, 0x48, 0x20, 0x40, 0x18, 0x52, 0x10, 0x84, 0x4c, 0xfd, 0x83, 0x14, 0x28, 0x03, 0xd7, 0x1f, 0x30, 0xb4, 0xb3, 0x02, 0x5b, 0xf3, 0xf9, 0x6d, 0xae, 0x81, 0xf5, 0xc1, 0x0f, 0x7e, 0xdb, 0xbd, 0x59, 0x2c, 0x70, 0x5a, 0xac, 0xf7, 0x07, 0xf3, 0x07, 0xb2, 0xaf, 0xa9, 0x18, 0x24, 0xab, 0x06, 0x52, 0xc3, 0x22, 0xe1, 0x41, 0xbf, 0x18, 0x81, 0x1a, 0x42, 0x9d, 0x05, 0x97, 0xf7, 0x44, 0x02, 0x01, 0xc9, 0xd7, 0x6f, 0x8e, 0xed, 0x49, 0xbe, 0xee, 0x22, 0xec, 0x4c, 0x21, 0x37, 0xe4, 0xfb, 0x8b, 0xce, 0xdc, 0x1d, 0x4a, 0x61, 0xf8, 0x95, 0xc7, 0x82, 0x0a, 0x38, 0x8b, 0x67, 0x08, 0x7a, 0x55, 0xa5, 0xbe, 0x46, 0x69, 0x3c, 0xc0, 0x2d, 0x2a, 0xd4, 0xa3, 0xc3, 0xeb, 0x46, 0x6c, 0x46, 0x03, 0x5e, 0x49, 0x81, 0x1f, 0xe0, 0x7f, 0xf0, 0xdd, 0xc8, 0xa4, 0x25, 0x96, 0xd6, 0x0e, 0x6a, 0x7a, 0x4a, 0x8b, 0xa8, 0xe3, 0xed, 0x52, 0x88, 0xe3, 0x50, 0x3a, 0xd7, 0x1f, 0x58, 0x2a, 0x2f, 0xe1, 0xfa, 0xd1, 0xd4, 0x68, 0x44, 0x97, 0xdc, 0x83, 0x9d, 0xd3, 0x93, 0x5e, 0x4d, 0x3e, 0x1d, 0x9b, 0x40, 0xa8, 0x5d, 0xa4, 0x06, 0xe9, 0x16, 0x40, 0x1f, 0x1b, 0x50, 0x65, 0x76, 0x06, 0xfe, 0x4e, 0x2b, 0xdc, 0xdd, 0xcc, 0x95, 0x27, 0x9f, 0xe1, 0x88, 0xff, 0x49, 0x8b, 0xd3, 0x80, 0xda, 0xde, 0x0d, 0x7b, 0x2d, 0x55, 0x92, 0x6c, 0x20, 0x6a, 0xc8, 0xac, 0xf6, 0x64, 0xa7, 0xe8, 0xfa, 0x71, 0x78, 0xd2, 0x65, 0xf4, 0xdc, 0x16, 0x82, 0x20, 0x11, 0x90, 0x10, 0xc6, 0x71, 0xbc, 0xe8, 0x6b, 0x3b, 0x6e, 0xe0, 0x9e, 0x96, 0xc3, 0xee, 0x89, 0xd3, 0x57, 0x91, 0xc5, 0xf3, 0xb8, 0x6c, 0x73, 0x69, 0x1b, 0x34, 0x88, 0x21, 0x4e, 0xcd, 0x68, 0xc0, 0xee, 0xb0, 0xb7, 0x2e, 0xda, 0x90, 0x6b, 0x52, 0xe7, 0x3d, 0x26, 0x1c, 0xd6, 0xc8, 0xc4, 0xc9, 0x83, 0xe8, 0x2f, 0x62, 0x5e, 0x9c, 0x7b, 0x86, 0x1f, 0x12, 0x2f, 0x6a, 0xb6, 0xc8, 0xe0, 0x1e, 0x81, 0xf1, 0x05, 0x12, 0xc2, 0x1a, 0x06, 0xd8, 0x50, 0x0d, 0x96, 0x2b, 0x8d, 0xf6, 0x43, 0x31, 0x97, 0xc4, 0x4b, 0xfd, 0xc3, 0xd2, 0xb2, 0x58, 0x47, 0xc7, 0x91, 0xc1, 0x36, 0xbb, 0xb1, 0xb2, 0xb2, 0x9b, 0x58, 0x25, 0x5d, 0xce, 0x63, 0x57, 0x10, 0x18, 0x95, 0xcc, 0xd0, 0xbf, 0x2f, 0x93, 0xfd, 0xed, 0xc1, 0xcb, 0xcd, 0x56, 0x3f, 0x66, 0xf9, 0x1a, 0x57, 0x2d, 0xb6, 0xed, 0x02, 0x04, 0xe7, 0x75, 0x5a, 0x70, 0x91, 0xf3, 0xab, 0x56, 0x8f, 0x26, 0xcc, 0x06, 0x87, 0x6d, 0xb0, 0x77, 0x1c, 0x2b, 0x38, 0xd4, 0x65, 0x6f, 0x4b, 0x38, 0x9e, 0xd5, 0x29, 0xb7, 0x1e, 0xa7, 0xfc, 0x9d, 0x89, 0x48, 0xb1, 0xfa, 0x47, 0xd3, 0x05, 0x5e, 0x35, 0xff, 0xe3, 0xe1, 0x9a, 0x46, 0xed, 0x66, 0x5c, 0x46, 0x59, 0x21, 0x74, 0x67, 0xfe, 0x57, 0x9f, 0xbe, 0xae, 0x65, 0x56, 0x31, 0xc7, 0x04, 0x01, 0xdc, 0x05, 0xcb, 0x68, 0xb4, 0x9a, 0xf6, 0x6a, 0x6a, 0x81, 0x65, 0xf1, 0x93, 0x0f, 0xe8, 0x25, 0x05, 0xcb, 0xb9, 0xe0, 0x84, 0x7f, 0x4a, 0x62, 0x9e, 0x8f, 0x41, 0x47, 0xd3, 0x8a, 0xc1, 0xb6, 0xf9, 0xff, 0xec, 0xda, 0xdf, 0x92, 0xa6, 0x96, 0x31, 0x4e, 0x9b, 0x74, 0x9b, 0x3d, 0x83, 0xdf, 0x31, 0x36, 0xa5, 0x93, 0x0f, 0xf7, 0x99, 0x51, 0x3c, 0x74, 0x53, 0xd7, 0xd5, 0x6e, 0x5d, 0x0f, 0x67, 0x46, 0x64, 0x87, 0x9c, 0x14, 0xf6, 0x21, 0x1a, 0xf4, 0x8a, 0x0c, 0xa8, 0xa0, 0xc1, 0xf2, 0x92, 0x44, 0xeb, 0x73, 0x4f, 0x8d, 0xcd, 0xd3, 0x62, 0x03, 0xa2, 0xef, 0x7e, 0x9a, 0x5f, 0x76, 0xed, 0x83, 0x3b, 0x55, 0x33, 0x48, 0x6f, 0x73, 0xee, 0x18, 0x3a, 0x9f, 0x00, 0x60, 0x29, 0xc7, 0xf0, 0x9b, 0x95, 0x6a, 0x8e, 0x6a, 0x6d, 0x4f, 0xd6, 0xe7, 0x36, 0x78, 0x17, 0x36, 0x4f, 0x52, 0x55, 0x5e, 0x7a, 0x2e, 0xeb, 0x57, 0x98, 0xf4, 0x74, 0x65, 0xb4, 0x16, 0xec, 0xa4, 0x43, 0xc4, 0x13, 0xe3, 0xaa, 0x5f, 0x12, 0xb5, 0x01, 0x2f, 0x61, 0xc6, 0x17, 0x58, 0xe8, 0x6c, 0xb6, 0x0a, 0x65, 0x7e, 0x28, 0xf9, 0x0d, 0x69, 0xf9, 0x0d, 0x76, 0x80, 0xff, 0x5a, 0xb4, 0x94, 0x98, 0x52, 0xc3, 0xc5, 0x33, 0x39, 0x25, 0x97, 0x12, 0xda, 0xcb, 0x49, 0x4e, 0x79, 0x39, 0x62, 0x1b, 0x08, 0xe6, 0x8c, 0x4d, 0x9e, 0xe1, 0xa5, 0x1b, 0x24, 0xba, 0x14, 0x23, 0x52, 0xa0, 0x59, 0xaf, 0xda, 0xc7, 0xe8, 0x37, 0xe2, 0x0d, 0x38, 0x27, 0xb8, 0xdc, 0x17, 0xe1, 0xc1, 0x52, 0x40, 0x06, 0xb3, 0x9f, 0x2f, 0xf2, 0x04, 0xaf, 0x34, 0x85, 0xa3, 0x0a, 0xc7, 0x29, 0xe5, 0xf8, 0x1b, 0x10, 0xc2, 0xe8, 0xf6, 0xbe, 0x41, 0x12, 0xbf, 0xc8, 0x31, 0x5c, 0xd9, 0xdb, 0x1a, 0x7a, 0x2f, 0xff, 0x73, 0x5a, 0x10, 0x1d, 0x15, 0xbf, 0x3e, 0xbf, 0xf0, 0x2c, 0x41, 0x18, 0xfd, 0x03, 0x01, 0x44, 0x73, 0xee, 0x94, 0xd1, 0x3e, 0x7e, 0x55, 0x7d, 0xad, 0x12, 0x36, 0x41, 0x6b, 0xfb, 0x57, 0x8f, 0xb0, 0xdd, 0xd7, 0xd9, 0xb8, 0x58, 0xea, 0x52, 0x75, 0xe8, 0x2b, 0xf8, 0x81, 0x0a, 0x34, 0xd2, 0x56, 0xa1, 0x6c, 0x76, 0xc1, 0x97, 0x21, 0xcf, 0x94, 0xc7, 0xd7, 0x1d, 0x9c, 0x1b, 0xdf, 0x3d, 0xd2, 0xf1, 0x2b, 0x2b, 0xd5, 0xc4, 0x60, 0xc5, 0x98, 0x08, 0x2d, 0xd2, 0x58, 0x55, 0xdc, 0x42, 0xd2, 0xc8, 0x26, 0xb7, 0xb2, 0xa7, 0x4c, 0x45, 0x4e, 0x43, 0x63, 0x76, 0x94, 0x23, 0xef, 0x92, 0x41, 0x5e, 0xb4, 0x1d, 0x55, 0x49, 0xc9, 0xa0, 0xc3, 0x52, 0xee, 0xad, 0x6c, 0x2c, 0x1f, 0x1d, 0x4e, 0x2d, 0x6a, 0x9c, 0xf9, 0xf4, 0xfd, 0x68, 0x43, 0x4e, 0x83, 0x55, 0x3d, 0x5b, 0xb1, 0x15, 0x66, 0xec, 0x1b, 0xb6, 0x1e, 0x30, 0x4d, 0x6c, 0x5d, 0x90, 0x17, 0x91, 0xa4, 0xd7, 0x28, 0xea, 0x34, 0x96, 0xde, 0x2c, 0x7f, 0xc7, 0x5d ],
-const [ 0x19, 0x8a, 0x69, 0x6d, 0xe9, 0x89, 0x61, 0xe3, 0xad, 0x0f, 0x95, 0x33, 0x39, 0x35, 0x0b, 0x58, 0x71, 0xd8, 0x7a, 0x41, 0x54, 0x92, 0x67, 0x6d, 0x3a, 0xe8, 0x8e, 0xb8, 0x59, 0xc5, 0x83, 0x75, 0x8e, 0x28, 0x99, 0xbc, 0x5b, 0x19, 0x03, 0x05, 0x2c, 0xe1, 0x39, 0xf6, 0xde, 0x7a, 0x9e, 0x7a, 0x81, 0x45, 0x5f, 0x13, 0x5d, 0xfb, 0x9e, 0x71, 0x34, 0xe6, 0xd0, 0x43, 0xc7, 0x51, 0x63, 0x4d, 0x9b, 0x3d, 0xa4, 0xbb, 0xfd, 0x55, 0xe1, 0xb5, 0x44, 0x24, 0xca, 0x33, 0x56, 0x86, 0x1d, 0x13, 0x6e, 0x5c, 0x83, 0x69, 0x1c, 0x84, 0xb5, 0x16, 0x8d, 0x09, 0xe2, 0x9c, 0x0c, 0x96, 0x55, 0x30, 0xc9, 0x31, 0x53, 0x11, 0xd9, 0x25, 0x42, 0x19, 0x7f, 0x40, 0x11, 0x91, 0xaa, 0x3f, 0xd3, 0x4a, 0xbe, 0x87, 0xad, 0xe9, 0x97, 0x16, 0xf3, 0x83, 0xcc, 0xb8, 0x8e, 0x6a, 0x30, 0x7e, 0xa1, 0x46, 0x9f, 0x6c, 0x6c, 0x67, 0xf7, 0x72, 0x70, 0x59, 0x64, 0x9e, 0xd3, 0xb9, 0xe1, 0x8f, 0x07, 0x48, 0xfb, 0x2d, 0xa7, 0x3e, 0xd8, 0x97, 0xa1, 0xe1, 0x79, 0x5d, 0x9a, 0x55, 0x3c, 0xf0, 0x8e, 0xb6, 0xa5, 0x56, 0xb7, 0x64, 0x5d, 0x22, 0xb1, 0x9e, 0x7b, 0xa4, 0xdb, 0x53, 0x03, 0x5d, 0x00, 0x34, 0xac, 0xb5, 0x37, 0x0e, 0xe7, 0xf1, 0x07, 0x57, 0x1c, 0x5f, 0xcf, 0x07, 0x37, 0xd3, 0x65, 0xa9, 0x63, 0x57, 0xfe, 0xb1, 0x15, 0x1f, 0x4e, 0x10, 0x4d, 0xbb, 0xf0, 0x06, 0x19, 0x90, 0x07, 0x37, 0x5a, 0x89, 0x26, 0x02, 0xca, 0x0a, 0x6d, 0x0e, 0x3e, 0x26, 0xf5, 0x25, 0x29, 0x11, 0x6f, 0x46, 0x62, 0xd8, 0x07, 0xf5, 0x27, 0x4f, 0x8f, 0xd6, 0x61, 0x4b, 0xd9, 0x7a, 0x29, 0x12, 0x64, 0x79, 0x8c, 0x10, 0x3b, 0xc1, 0x8b, 0xcc, 0x1b, 0x2d, 0x66, 0x1a, 0xd4, 0x5a, 0x1b, 0x91, 0xf1, 0xb6, 0x29, 0x3f, 0x9b, 0xd9, 0x99, 0x9c, 0xbb, 0x19, 0x3f, 0xbd, 0x5f, 0x58, 0x3e, 0xca, 0x5f, 0x21, 0xca, 0xb2, 0x40, 0xf4, 0x32, 0x1d, 0x58, 0xdd, 0x1d, 0xa3, 0x33, 0x4b, 0x13, 0x3b, 0x36, 0x20, 0x40, 0xf6, 0x82, 0x05, 0x75, 0xed, 0x1c, 0x00, 0x70, 0x77, 0x4a, 0x48, 0x5d, 0xa0, 0x40, 0x58, 0x9d, 0xd7, 0xfb, 0x42, 0xc5, 0xe7, 0x6e, 0x46, 0xea, 0x29, 0xdc, 0xa3, 0x1c, 0xf7, 0x85, 0xad, 0x30, 0x63, 0x84, 0x20, 0xc3, 0x29, 0xf8, 0xb4, 0x7b, 0xe3, 0x62, 0xf1, 0x90, 0x7c, 0x4e, 0x45, 0x8b, 0xe7, 0x36, 0x54, 0x4e, 0x11, 0xa3, 0x8f, 0x55, 0x14, 0x95, 0x08, 0x3b, 0xad, 0x25, 0x84, 0x80, 0xf0, 0x69, 0xd2, 0x89, 0x3a, 0x98, 0x5c, 0xe8, 0x68, 0x6e, 0xfc, 0xde, 0x46, 0xd2, 0x11, 0x1e, 0x4a, 0xb7, 0xd1, 0xd4, 0x83, 0x40, 0xe1, 0xe6, 0xcc, 0x27, 0x23, 0x7a, 0x45, 0x5f, 0xcf, 0xb8, 0x04, 0xf8, 0xc5, 0xd1, 0x07, 0x44, 0x21, 0x40, 0x6d, 0x38, 0x10, 0x50, 0xe6, 0x14, 0xe3, 0xde, 0x69, 0x47, 0x62, 0x60, 0x25, 0x8c, 0x63, 0x26, 0xb9, 0x5a, 0x9b, 0xe0, 0xa7, 0x7b, 0xb3, 0x61, 0x06, 0xfa, 0x9e, 0xa2, 0x78, 0x43, 0x2b, 0x0a, 0x5c, 0x86, 0xd6, 0xec, 0x45, 0x5c, 0xe4, 0x52, 0xaa, 0xad, 0xaf, 0xf9, 0xdf, 0xd1, 0x3e, 0x9c, 0x43, 0xf5, 0x18, 0x75, 0xbc, 0xc1, 0x5a, 0x02, 0x60, 0x38, 0x08, 0x05, 0x75, 0xdf, 0xa1, 0xce, 0x9c, 0x21, 0xf6, 0xbc, 0x49, 0xf2, 0x3b, 0x02, 0x76, 0xb3, 0x5f, 0xa7, 0x99, 0x55, 0x99, 0xd1, 0xd3, 0xc2, 0x44, 0x42, 0x6a, 0x78, 0xec, 0x23, 0x79, 0x77, 0xa9, 0x00, 0xe6, 0x5e, 0xab, 0x15, 0x95, 0xd1, 0x17, 0xc8, 0xdb, 0x1d, 0x12, 0x76, 0x36, 0x1f, 0x1a, 0x72, 0x3b, 0x62, 0x9d, 0x4b, 0xcf, 0x87, 0xc4, 0x4e, 0x9a, 0xea, 0x90, 0x4c, 0xb9, 0x82, 0x29, 0x9e, 0xb3, 0x09, 0x73, 0x65, 0xaf, 0x5d, 0xe1, 0x16, 0xe4, 0x27, 0x8e, 0x37, 0x50, 0xba, 0x8a, 0x63, 0xad, 0x3e, 0x71, 0x94, 0xa1, 0x0d, 0x43, 0xa2, 0x35, 0x5d, 0x6f, 0x06, 0x88, 0x20, 0x31, 0xe4, 0xc5, 0x28, 0x1e, 0x49, 0x52, 0x8f, 0xfe, 0xb1, 0x4a, 0x56, 0xd9, 0xcc, 0x2e, 0x4c, 0x55, 0x81, 0xd7, 0x31, 0x3f, 0x34, 0xaf, 0x1c, 0x67, 0x44, 0x21, 0x1a, 0xb1, 0xd8, 0x4e, 0x18, 0x69, 0xdc, 0x02, 0x03, 0xd7, 0x46, 0xe6, 0x2d, 0x13, 0x9e, 0xf7, 0xf3, 0x1b, 0xbd, 0x36, 0x9d, 0x23, 0xd5, 0xa1, 0x85, 0x2c, 0xb1, 0x63, 0x7c, 0xd8, 0x3e, 0x48, 0x69, 0x7d, 0x4b, 0x73, 0x33, 0x78, 0x8d, 0x53, 0xe1, 0xc4, 0xe6, 0xd3, 0x00, 0xcb, 0xe6, 0xd1, 0x45, 0x7b, 0x93, 0xd2, 0x74, 0x9d, 0x65, 0xf4, 0x80, 0x62, 0x95, 0x24, 0xf4, 0x3f, 0x98, 0x90, 0x91, 0xfb, 0xe6, 0x5f, 0x39, 0x07, 0xff, 0xa0, 0x0c, 0x0d, 0xb0, 0x81, 0xd0, 0xcb, 0x92, 0xc2, 0x96, 0x22, 0xd5, 0x69, 0x9a, 0x6a, 0x3b, 0xb6, 0x6c, 0x09, 0x67, 0x59, 0x4d, 0x44, 0x58, 0xe3, 0xdc, 0x55, 0x31, 0x7b, 0xf2, 0xbd, 0x3b, 0xd2, 0xca, 0xdb, 0x2c, 0x59, 0x65, 0xbe, 0xaa, 0xb1, 0x2c, 0x38, 0x0b, 0x62, 0xd8, 0x33, 0x5f, 0xd1, 0x8f, 0x48, 0xb0, 0x6c, 0x4f, 0x8e, 0x88, 0x28, 0x90, 0xb0, 0xb4, 0x2d, 0x25, 0x43, 0x48, 0xcf, 0x64, 0x56, 0xe3, 0xc1, 0x86, 0x4a, 0x34, 0x85, 0x51, 0xe4, 0xbd, 0x27, 0xf4, 0xa0, 0xd7, 0x2b, 0x32, 0x48, 0xf7, 0xc4, 0xc2, 0xc6, 0x2f, 0x47, 0xf6, 0x37, 0xf8, 0xde, 0x9c, 0x40, 0x2e, 0x81, 0x22, 0xa5, 0x5c, 0x22, 0xfd, 0x17, 0x3a, 0x28, 0x4a, 0x4e, 0x74, 0x1f, 0xb6, 0x58, 0xad, 0xae, 0x9c, 0x31, 0xc4, 0xc9, 0x6e, 0x93, 0x56, 0x27, 0x56, 0x0f, 0x84, 0xf7, 0x1d, 0x5d, 0xf6, 0xcf, 0x4b, 0xf1, 0x1f, 0xe5, 0x90, 0xce, 0xc3, 0x81, 0x62, 0x9f, 0xb7, 0xb2, 0xe8, 0x04, 0xe9, 0x41, 0x17, 0x2a, 0xa0, 0xe3, 0x1b, 0x9e, 0x04, 0xb2, 0xf8, 0x63, 0xe0, 0xde, 0x71, 0x42, 0xa7, 0xa0, 0x29, 0x61, 0xb5, 0x70, 0x08, 0x17, 0xd8, 0x78, 0xe0, 0xff, 0x0f, 0x48, 0x50, 0x4b, 0x91, 0xcb, 0xe9, 0x5b, 0x11, 0x7a, 0x90, 0x8f, 0x41, 0xcf, 0x23, 0x59, 0x95, 0xfd, 0x60, 0x96, 0x49, 0xde, 0x02, 0x1e, 0xa5, 0x2d, 0x2c, 0x99, 0x80, 0xf5, 0x0b, 0x95, 0x03, 0x49, 0xb8, 0xd6, 0xaf, 0x36, 0x5b, 0xed, 0xa1, 0xf6, 0x96, 0x0d, 0x15, 0x66, 0x21, 0x19, 0x2a, 0xbb, 0xb1, 0x01, 0xe5, 0x70, 0x1f, 0x4f, 0x77, 0x82, 0xc6, 0xfd, 0xc3, 0xe0, 0x2d, 0x8a, 0x1b, 0x1d, 0xe6, 0x4d, 0x4a, 0x69, 0xb5, 0x08, 0xd8, 0xbf, 0xf5, 0xc0, 0x89, 0x60, 0x38, 0xcc, 0x27, 0x7f, 0x2e, 0x2d, 0x81, 0x3e, 0xc8, 0x1d, 0xb4, 0xd9, 0x9c, 0xea, 0xa9, 0x21, 0x8c, 0x05, 0xdf, 0x2d, 0xa2, 0x56, 0x6b, 0x4c, 0x3f, 0xd3, 0x3d, 0x3d, 0x75, 0x51, 0xa4, 0xa3, 0xb1, 0x9a, 0x15, 0xb3, 0x9d, 0xbf, 0x28, 0x30, 0x44, 0xb0, 0xe3, 0x99, 0x78, 0x09, 0x3b, 0xa1, 0x70, 0x2f, 0xd8, 0xdf, 0xb6, 0x9c, 0x19, 0xc7, 0x41, 0x77, 0x58, 0xd9, 0xdd, 0x68, 0x6f, 0x18, 0xd4, 0xaa, 0x7a, 0xbe, 0xc7, 0x62, 0xdf, 0x2e, 0xdd, 0x2f, 0x8c, 0x2a, 0x20, 0x02, 0x80, 0x46, 0x23, 0x30, 0x8d, 0x9c, 0xe8, 0xc5, 0x5c, 0xc2, 0x02, 0x1c, 0xb1, 0xf9, 0xf7, 0xac, 0xf0, 0xa7, 0xe8, 0x25, 0xe1, 0x08, 0x74, 0xbc, 0xb0, 0x20, 0xd9, 0xc2, 0x38, 0xf4, 0x5c, 0x7c, 0x80, 0xf9, 0xec, 0x2f, 0x86, 0xcd, 0x02, 0x7a, 0x3c, 0x25, 0xcb, 0xe8, 0xd1, 0x07, 0x89, 0xc6, 0x31, 0x39, 0x37, 0x32, 0xcf, 0xf9, 0x6b, 0x75, 0xa2, 0xee, 0x81, 0x93, 0x6d, 0x5f, 0xf6, 0x20, 0x44, 0xa3, 0x12, 0x54, 0x4c, 0xd8, 0xca, 0x62, 0xc2, 0xd8, 0xe4, 0x06, 0x3f, 0x69, 0x5c, 0x5d, 0x3a, 0xb4, 0x07, 0xfa, 0xce, 0xf9, 0x76, 0x36, 0xbd, 0x80, 0x1d, 0xc7, 0xb6, 0xd3, 0xb4, 0x95, 0xd3, 0x2a, 0xde, 0xc9, 0x66, 0x27, 0x09, 0x26, 0xf5, 0xc3, 0x95, 0x9c, 0x83, 0x89, 0x38, 0x1a, 0x11, 0x02, 0xa1, 0xa5, 0x65, 0x70, 0x5b, 0xa7, 0x0a, 0xbe, 0xf5, 0x89, 0x98, 0xb8, 0x60, 0x83, 0x36, 0x78, 0x98, 0xb3, 0x5c, 0x20, 0x86, 0x6d, 0xde, 0xcf, 0x26, 0xd3, 0x26, 0xcd, 0xe5, 0xa5, 0xc0, 0x09, 0x4d, 0x5a, 0x1d, 0xc6, 0xe3, 0x6f, 0x90, 0x91, 0x50, 0xff, 0x9d, 0x76, 0xc0, 0x94, 0x73, 0x73, 0x88, 0x3d, 0xb7, 0x2d, 0x0b, 0xe0, 0x83, 0xe2, 0xde, 0xd2, 0xaf, 0x9f, 0x2a, 0xa5, 0x4f, 0xb3, 0x52, 0x41, 0x7c, 0x63, 0xd6, 0x36, 0x58, 0xdf, 0x78, 0x51, 0x4c, 0x75, 0x9d, 0x6e, 0x94, 0x05, 0xf5, 0x8c, 0xfe, 0xb5, 0x5e, 0x27, 0xee, 0xe5, 0x06, 0xc2, 0xa6, 0x66, 0xd0, 0xc3, 0xc4, 0xe6, 0xfa, 0x83, 0x0c, 0xaf, 0xfc, 0xa6, 0x68, 0x92, 0xb3, 0xa8, 0x2d, 0x1d, 0xbe, 0xb9, 0xa0, 0x15, 0x29, 0xcb, 0xb9, 0x20, 0x48, 0xe9, 0x27, 0xc1, 0xe6, 0xca, 0x93, 0x89, 0xa0, 0xa6, 0x29, 0x8c, 0x8b, 0x48, 0x55, 0x13, 0x1d, 0x65, 0xca, 0x90, 0x4a, 0x2c, 0xc9, 0xd7, 0xed, 0x1e, 0xa0, 0x8a, 0x6a, 0x20, 0x71, 0xd5, 0x91, 0xce, 0x34, 0x5c, 0xc6, 0x13, 0xff, 0x72, 0x5f, 0xf6, 0x85, 0x8c, 0x4e, 0xb7, 0xde, 0xf5, 0x00, 0x1b, 0x86, 0xc3, 0x85, 0x04, 0xa7, 0x09, 0xf0, 0x44, 0x9b, 0x4e, 0x01, 0xb3, 0xac, 0x3e, 0x01, 0x80, 0x1f, 0xa0, 0xee, 0xc4, 0x72, 0x88, 0xd8, 0x5d, 0xe1, 0xce, 0x8b, 0xf9, 0x2f, 0xbe, 0x6e, 0x71, 0xa2, 0x11, 0xab, 0x59, 0x50, 0x1d, 0x90, 0xd5, 0x99, 0x48, 0x36, 0xad, 0xf5, 0xc2, 0x60, 0xa4, 0xf0, 0x74, 0xa5, 0x06, 0x72, 0x33, 0xd2, 0x81, 0x44, 0x3a, 0x8a, 0x35, 0xd0, 0xd7, 0x2f, 0x0e, 0x28, 0x64, 0x06, 0x52, 0x4a, 0x79, 0x95, 0x76, 0xa3, 0x60, 0x50, 0x36, 0xd1, 0xc9, 0x75, 0xe5, 0xad, 0xbf, 0x35, 0x01, 0x89, 0xdb, 0x14, 0x0a, 0xb6, 0xb8, 0x92, 0x94, 0x4a, 0xa6, 0x0b, 0x9c, 0x1f, 0xa3, 0xdc, 0x18, 0x1f, 0x87, 0xc7, 0xd1, 0xbf, 0x7e, 0x99, 0x75, 0xca, 0xbb, 0x09, 0xe8, 0x60, 0x6b, 0xe4, 0xdc, 0x3e, 0xe8, 0x67, 0xa1, 0x40, 0x30, 0xec, 0x3e, 0x23, 0x95, 0xca, 0xc0, 0x90, 0xb6, 0x76, 0xd2, 0x56, 0xad, 0xee, 0x8e, 0xf8, 0x8a, 0x57, 0x93, 0x67, 0x01, 0xe4, 0x58, 0x10, 0x5f, 0xfb, 0xc0, 0x19, 0xc2, 0x93, 0xee, 0xe8, 0x8a, 0xe1, 0x5a, 0xe6, 0x0b, 0x33, 0x24, 0x82, 0x84, 0x1c, 0xa9, 0x78, 0x55, 0xd1, 0x55, 0x53, 0x6c, 0xd3, 0xb8, 0x30, 0x01, 0xce, 0xdb, 0xc6, 0x83, 0xc1, 0xd4, 0xa3, 0xd2, 0x60, 0x98, 0xb8, 0xae, 0xb7, 0x11, 0x18, 0x70, 0x0f, 0x70, 0xfd, 0xf7, 0x15, 0xc5, 0x0c, 0xe6, 0x39, 0xcc, 0xda, 0x0d, 0x55, 0x0a, 0xae, 0x24, 0x8f, 0x19, 0x89, 0xbf, 0x80, 0x41, 0x63, 0x7e, 0x96, 0x48, 0xb8, 0x84, 0xb6, 0x8a, 0x43, 0x2b, 0x26, 0x4c, 0x0a, 0xf6, 0xab, 0x4d, 0x9a, 0xc8, 0xee, 0x9e, 0x94, 0x53, 0x24, 0xb4, 0x68, 0xd2, 0xee, 0xbc, 0x61, 0xfb, 0x7e, 0x2e, 0xe2, 0x2f, 0xfc, 0xa5, 0xef, 0xf5, 0x28, 0xee, 0xee, 0xa6, 0x40, 0x5e, 0xaf, 0x6a, 0x24, 0x69, 0xab, 0x62, 0xb8, 0x71, 0x89, 0x27, 0x8a, 0xdc, 0xe7, 0x74, 0xb5, 0x69, 0x56, 0x1f, 0x05, 0xc4, 0xa6, 0x4e, 0x5b, 0x58, 0x65, 0xe7, 0x53, 0x64, 0xa2, 0x48, 0x25, 0x51, 0xf6, 0x39, 0xc9, 0x43, 0xc6, 0x1e, 0x5f, 0xee, 0xc2, 0x72, 0xcd, 0xab, 0xb1, 0x70, 0xaa, 0xca, 0x71, 0x13, 0x5b, 0x2a, 0x39, 0x41, 0x7b, 0x08, 0x22, 0x43, 0x81, 0x15, 0xe6, 0x79, 0x9c, 0xcb, 0xe7, 0x4c, 0xe2, 0x00, 0x73, 0x63, 0xaa, 0xbc, 0x46, 0x1a, 0x36, 0x48, 0x50, 0x30, 0x96, 0x87, 0xb9, 0xbf, 0xc8, 0x89, 0x23, 0x72, 0x24, 0x5e, 0x2f, 0xf2, 0xf8, 0x28, 0x42, 0xa1, 0x6f, 0x74, 0x89, 0x8b, 0xb7, 0xcb, 0x3a, 0x9a, 0x62, 0x83, 0x1d, 0x09, 0x0d, 0xdb, 0x4c, 0x1a, 0x40, 0x48, 0x37, 0x0c, 0x96, 0x09, 0xea, 0x47, 0x1e, 0x01, 0x93, 0xdb, 0x00, 0xc6, 0x3e, 0x28, 0x64, 0xf6, 0xe4, 0xde, 0x8f, 0xca, 0xa4, 0x29, 0x4f, 0xed, 0x50, 0x25, 0x9a, 0x8e, 0x2b, 0x98, 0x72, 0xb4, 0xf1, 0xe0, 0x0b, 0xd1, 0x18, 0x2a, 0x30, 0x9b, 0x56, 0xe5, 0xe3, 0x17, 0x63, 0x77, 0x44, 0xf6, 0x00, 0x2e, 0xb4, 0x25, 0x38, 0x79, 0x39, 0xa0, 0xe6, 0x58, 0x24, 0x87, 0x77, 0x11, 0xf2, 0x73, 0xf1, 0x25, 0x71, 0x0a, 0x34, 0x82, 0x24, 0xd1, 0x81, 0xfa, 0xe7, 0x42, 0x38, 0xf4, 0xd6, 0x1f, 0xe6, 0x61, 0x6c, 0x05, 0x7e, 0xf2, 0xe8, 0x44, 0xe7, 0x88, 0xf5, 0xee, 0xb7, 0xed, 0x89, 0x2e, 0x3f, 0xc1, 0x0e, 0xdb, 0xc7, 0xb7, 0xc0, 0x4d, 0x1a, 0x01, 0x56, 0x70, 0x46, 0x08, 0xe4, 0x16, 0x9d, 0x61, 0x00, 0x92, 0xff, 0xfc, 0x24, 0x82, 0x5c, 0x9f, 0x53, 0xec, 0x74, 0x93, 0xff, 0x8d, 0xe1, 0x9e, 0x2b, 0x6d, 0x58, 0x31, 0xcd, 0xb7, 0x2c, 0xe1, 0x76, 0xc8, 0x13, 0x1b, 0x34, 0x86, 0x2d, 0x14, 0xb8, 0xf3, 0x42, 0x00, 0xb4, 0x02, 0x4c, 0x84, 0x87, 0xa9, 0x35, 0x6d, 0x1c, 0x37, 0xe1, 0xa2, 0x0f, 0xe8, 0x6f, 0x57, 0x12, 0xb6, 0xbc, 0x84, 0x90, 0x73, 0x29, 0x96, 0x90, 0x15, 0x9f, 0x64, 0xdb, 0x51, 0xd0, 0x64, 0x61, 0x6b, 0xbf, 0x1f, 0xd9, 0x4c, 0x82, 0xe2, 0xa8, 0xd5, 0x46, 0xb7, 0x04, 0x73, 0x95, 0x93, 0x59, 0xf3, 0xd4, 0xd1, 0xeb, 0x98, 0x10, 0xdf, 0xbe, 0x6b, 0xfa, 0x38, 0xb3, 0xd3, 0x2f, 0x92, 0xf3, 0x65, 0xbd, 0x58, 0x90, 0xfd, 0xe3, 0x5a, 0x6a, 0x0e, 0x19, 0xc4, 0x50, 0x36, 0x50, 0x4c, 0x68, 0x16, 0x7b, 0xb0, 0xd1, 0x60, 0x4e, 0x60, 0x86, 0x31, 0x46, 0x77, 0x86, 0xa2, 0xe9, 0xf0, 0x32, 0x9a, 0x4f, 0x17, 0xf6, 0xe6, 0xe1, 0x3d, 0x2b, 0x8b, 0x61, 0xb0, 0x3c, 0x5a, 0x2b, 0xeb, 0x08, 0xc6, 0xba, 0x09, 0x88, 0xf3, 0x6d, 0x80, 0xb2, 0x0f, 0x8b, 0x0b, 0x9d, 0xe5, 0x86, 0xe8, 0xe5, 0xaf, 0x7c, 0x44, 0x51, 0x2c, 0x03, 0xf4, 0xb3, 0xf3, 0x26, 0x65, 0x10, 0x07, 0xab, 0xd6, 0x01, 0xab, 0x98, 0xc4, 0x59, 0x78, 0xf5, 0xa6, 0x08, 0xac, 0xd2, 0xdb, 0x40, 0xc5, 0x8c, 0xe1, 0xd6, 0x4f, 0x4d, 0xc7, 0xea, 0xfa, 0xd2, 0xe5, 0xca, 0xef, 0x71, 0xca, 0x14, 0x64, 0x5a, 0x76, 0x1b, 0x6e, 0x1d, 0xca, 0x8c, 0x17, 0x6c, 0x3c, 0x52, 0xb1, 0x22, 0xcf, 0xb6, 0x6a, 0x85, 0x43, 0xcb, 0x20, 0xc8, 0x88, 0x09, 0x76, 0xd5, 0x79, 0x38, 0x27, 0x49, 0xc7, 0x90, 0x9a, 0xbf, 0x33, 0x1e, 0xb7, 0x51, 0x01, 0x69, 0xfa, 0x5c, 0xa9, 0x56, 0xc5, 0x84, 0xcf, 0x49, 0xfb, 0xf8, 0x75, 0x8d, 0xca, 0xf7, 0x70, 0xf6, 0xc8, 0x94, 0x18, 0xc4, 0x42, 0xb6, 0x44, 0xcb, 0xd0, 0x62, 0x76, 0xd1, 0x2d, 0x3d, 0x52, 0x38, 0x46, 0x4c, 0x55, 0xdd, 0x91, 0xff, 0xc3, 0x3f, 0xa0, 0x6e, 0xe1, 0xe4, 0xf6, 0xe2, 0x65, 0xf8, 0x19, 0x97, 0x2b, 0x38, 0xe9, 0xc0, 0x29, 0x0e, 0x2f, 0xcc, 0xa5, 0xfd, 0x79, 0xe8, 0xa5, 0x40, 0x26, 0xc5, 0xa8, 0xae, 0xbd, 0x9b, 0x93, 0xe1, 0x83, 0x6e, 0xee, 0x97, 0x4c, 0x90, 0x50, 0x58, 0x91, 0x67, 0x18, 0x5a, 0xc3, 0x70, 0x5e, 0xa1, 0xdf, 0x84, 0x2a, 0x6a, 0x43, 0x5a, 0xe3, 0xca, 0xc0, 0x4e, 0x0a, 0x93, 0xf0, 0x60, 0x28, 0x77, 0xc9, 0x80, 0x04, 0x70, 0x73, 0x09, 0x1a, 0x5f, 0x57, 0x8b, 0x49, 0xf3, 0x79, 0xcd, 0xcc, 0xcc, 0x07, 0x12, 0x6b, 0xe0, 0x32, 0x9c, 0xf2, 0x1e, 0x3c, 0x6f, 0xe3, 0x52, 0xd2, 0x57, 0x68, 0x49, 0x9d, 0x2c, 0x8b, 0x35, 0x14, 0x55, 0xa9, 0x52, 0x94, 0x8b, 0x24, 0xca, 0xb2, 0xdf, 0x59, 0xd7, 0xd0, 0xff, 0xd2, 0x27, 0xee, 0xb5, 0xbc, 0x84, 0xc3, 0xb0, 0x9b, 0xb4, 0x0c, 0x87, 0x3c, 0x9e, 0x25, 0xfb, 0xeb, 0xaf, 0xd6, 0x7d, 0xe7, 0x7c, 0x6f, 0xf0, 0x13, 0xa9, 0x17, 0xaf, 0xee, 0x09, 0x61, 0xd2, 0xc5, 0x06, 0x20, 0xad, 0x28, 0x44, 0x7d, 0x9a, 0x9a, 0x81, 0x46, 0xf9, 0x8c, 0xc0, 0x89, 0x74, 0x8d, 0xa6, 0x62, 0x88, 0xbb, 0x24, 0x11, 0x40, 0x7d, 0x56, 0x4f, 0x44, 0x74, 0xab, 0xe3, 0x13, 0xae, 0x47, 0x70, 0x8d, 0x1d, 0xa5, 0x91, 0xb4, 0x48, 0x81, 0x27, 0xb3, 0x41, 0xf5, 0xf2, 0x20, 0xd7, 0xe2, 0x5f, 0x7e, 0x0c, 0x91, 0xa1, 0x06, 0xca, 0x9a, 0x03, 0xa7, 0xd1, 0x05, 0x7d, 0x4b, 0xf4, 0xb0, 0x85, 0x5c, 0x85, 0xf0, 0x27, 0x86, 0x0e, 0x7b, 0x58, 0xbf, 0x41, 0x86, 0x88, 0x85, 0x32, 0x2a, 0x76, 0x67, 0xc4, 0x0c, 0x48, 0xc7, 0x61, 0x3d, 0xdb, 0xde, 0xef, 0x5f, 0x58, 0x01, 0xff, 0x0a, 0x08, 0x22, 0x47, 0x6e, 0x69, 0x99, 0x52, 0x39, 0x81, 0x25, 0x76, 0xbb, 0x72, 0x2d, 0x07, 0x47, 0x4f, 0x4c, 0xca, 0xdd, 0x2e, 0x0d, 0xac, 0x07, 0x7e, 0xf3, 0xb4, 0x01, 0x9b, 0xbd, 0x37, 0x1c, 0xa0, 0xe7, 0x4b, 0x64, 0x7d, 0x74, 0x7d, 0x81, 0x49, 0xeb, 0xc7, 0xdb, 0xd9, 0xa0, 0xbc, 0x02, 0x91, 0x34, 0x06, 0x4c, 0x7a, 0x5f, 0x12, 0xc0, 0x95, 0xed, 0x0a, 0x32, 0x6f, 0x07, 0x04, 0xb0, 0xf6, 0xb4, 0x79, 0x1d, 0x8b, 0xa0, 0xf8, 0x1c, 0x58, 0x1b, 0x1b, 0x30, 0xe4, 0x64, 0xbb, 0x21, 0xe4, 0x28, 0x60, 0xa1, 0x55, 0x46, 0xfb, 0x2f, 0xc7, 0xd5, 0xd8, 0x3c, 0xfc, 0x68, 0xce, 0x8c, 0xb1, 0x90, 0xb9, 0xe0, 0xbc, 0xa3, 0x2a, 0xd2, 0x57, 0xbc, 0x5c, 0x00, 0xbc, 0x03, 0x6a, 0x6c, 0xf2, 0x2f, 0xc0, 0x23, 0xe6, 0x49, 0xcf, 0x1d, 0xbd, 0xb2, 0x06, 0x65, 0x69, 0x67, 0xfd, 0x79, 0x7a, 0x84, 0xf3, 0xf4, 0x37, 0x07, 0x7a, 0x6a, 0xee, 0xd7, 0x71, 0x94, 0x88, 0x05, 0x33, 0xad, 0x60, 0x51, 0x0e, 0x1b, 0x56, 0xf0, 0xf7, 0x52, 0x1f, 0x8c, 0x7b, 0xf6, 0xdf, 0x8d, 0xf9, 0x3f, 0xf9, 0x97, 0x0f, 0xa2, 0x25, 0x53, 0x52, 0xae, 0xc4, 0x73, 0x42, 0x34, 0x71, 0xf0, 0x7d, 0xaa, 0xd9, 0x96, 0x32, 0xd1, 0xcc, 0xc3, 0xd9, 0x96, 0x94, 0x6c, 0x21, 0x36, 0x85, 0x60, 0x2a, 0xa6, 0xd5, 0xd1, 0xf5, 0x32, 0xae, 0x10, 0x19, 0x64, 0x82, 0x98, 0xb7, 0x27, 0x9f, 0x4e, 0xaf, 0x2c, 0x03, 0x07, 0x14, 0x8d, 0x71, 0x4b, 0xde, 0xb1, 0xc4, 0x59, 0xdf, 0x6f, 0x84, 0x6a, 0xf9, 0x76, 0xb7, 0x3a, 0x8d, 0xec, 0xf9, 0xc5, 0x36, 0x55, 0xcf, 0x4e, 0xb8, 0xb7, 0x39, 0xa6, 0x33, 0xfb, 0x86, 0xab, 0x9d, 0x97, 0x6c, 0x0f, 0x6e, 0x6a, 0x58, 0x5b, 0x9d, 0xe7, 0x03, 0x33, 0xcc, 0x76, 0x46, 0xdb, 0xc0, 0x17, 0x2f, 0xfa, 0x13, 0x49, 0x54, 0x9e, 0x2d, 0x2a, 0x67, 0x81, 0x70, 0xdf, 0x0b, 0x8b, 0xb3, 0x36, 0xe6, 0x97, 0xf2, 0x8a, 0xf8, 0x7a, 0x43, 0xe8, 0x2b, 0x41, 0x0c, 0x6f, 0x2b, 0xbb, 0x74, 0xfd, 0x77, 0x38, 0x17, 0x08, 0xb9, 0x8f, 0xfe, 0xc9, 0x53, 0x66, 0xce, 0xa0, 0x3a, 0xad, 0x3f, 0xb4, 0x07, 0x6c, 0xd0, 0xda, 0x4b, 0xbf, 0xba, 0xb8, 0x23, 0x1e, 0x22, 0x2a, 0x0d, 0xe2, 0x92, 0xe4, 0xfa, 0x05, 0xaa, 0x59, 0xa5, 0x2a, 0x13, 0xdc, 0x22, 0xdd, 0xb5, 0x05, 0xba, 0x1b, 0x2a, 0x57, 0xf6, 0x15, 0x72, 0x1f, 0xfa, 0x31, 0xe8, 0x9f, 0x14, 0x52, 0x74, 0x6c, 0x95, 0x59, 0x03, 0x15, 0xe0, 0xec, 0x34, 0x05, 0xc0, 0x76, 0x54, 0xab, 0xff, 0x6e, 0x8d, 0xd8, 0x34, 0xdd, 0x5a, 0x68, 0xdc, 0x1a, 0x3e, 0x24, 0xac, 0xd8, 0xb6, 0xe7, 0x26, 0x63, 0x6c, 0x00, 0x6b, 0x27, 0xad, 0xd8, 0x50, 0x72, 0x1d, 0xd5, 0xb3, 0x7b, 0xaa, 0x7d, 0x10, 0xa2, 0xbe, 0xdf, 0x4f, 0xf9, 0xb9, 0x2e, 0xe0, 0x04, 0x9e, 0xb0, 0x0a, 0xbd, 0x0c, 0xd6, 0x80, 0xdb, 0x71, 0xad, 0x36, 0x54, 0x7a, 0x75, 0x72, 0x21, 0xce, 0x8e, 0x26, 0x41, 0xfb, 0x9c, 0x7d, 0x00, 0xb0, 0xe3, 0xb4, 0x79, 0x2e, 0xf3, 0x2b, 0x5a, 0xf9, 0x8a, 0xbc, 0xe7, 0xd3, 0xb6, 0x4b, 0x42, 0xea, 0x3a, 0x9e, 0xe9, 0x51, 0x33, 0x6f, 0x80, 0xad, 0xfb, 0xc0, 0xd1, 0x31, 0x4e, 0x6f, 0x11, 0xcc, 0xab, 0x0a, 0x64, 0xa0, 0xfd, 0xe4, 0xa4, 0xb7, 0x7b, 0x69, 0x5e, 0xf1, 0xcd, 0xae, 0x1e, 0x41, 0x70, 0x4d, 0xed, 0x19, 0x5b, 0x6f, 0x17, 0x23, 0xe3, 0x2a, 0x32, 0x32, 0xdc, 0x0e, 0x5b, 0x78, 0x01, 0xfa, 0xc3, 0xf9, 0x96, 0x34, 0x6b, 0x3f, 0x4b, 0xb9, 0x2b, 0x50, 0x64, 0xd2, 0xf9, 0xdd, 0x17, 0xe8, 0x68, 0xbc, 0x35, 0x99, 0x6f, 0x99, 0x0d, 0x0c, 0x6c, 0xe8, 0x8e, 0x81, 0x68, 0x1d, 0xab, 0x2c, 0x9d, 0x20, 0x04, 0x43, 0x35, 0xfb, 0xc2, 0x56, 0x55, 0xd6, 0xc2, 0xdf, 0x5a, 0x26, 0xf7, 0x1a, 0x63, 0x21, 0x09, 0x16, 0x0f, 0x75, 0x42, 0x0c, 0x88, 0x39, 0xab, 0xf1, 0xc0, 0x24, 0x72, 0x47, 0xfa, 0xfd, 0x8f, 0x38, 0x8d, 0x52, 0xa7, 0xe5, 0xe4, 0x6d, 0x31, 0xfc, 0xca, 0x84, 0xd7, 0x88, 0xe4, 0x30, 0x1f, 0x0e, 0x7f, 0x20, 0x4a, 0xd5, 0x8d, 0x0f, 0x7d, 0x85, 0xe9, 0xf3, 0x1e, 0xf4, 0xe3, 0x78, 0x81, 0x3c, 0xf8, 0xac, 0xc4, 0x11, 0xe1, 0xfc, 0xf7, 0x51, 0xd0, 0x5f, 0x80, 0xdd, 0xf6, 0xd1, 0xbe, 0xa8, 0x48, 0x03, 0xed, 0x0d, 0x83, 0x51, 0x4a, 0x66, 0x6d, 0xf4, 0x77, 0xda, 0x5e, 0x79, 0x20, 0x76, 0x00, 0x71, 0xdf, 0x7f, 0x53, 0x6b, 0x5d, 0x07, 0xf4, 0x1f, 0xbb, 0xbf, 0x9e, 0xec, 0x30, 0x0c, 0xf1, 0x85, 0xf3, 0x5d, 0x72, 0xe7, 0x5b, 0xbb, 0xd4, 0x8e, 0x44, 0xa2, 0x76, 0xe8, 0xb6, 0x0f, 0x2c, 0x0a, 0xc1, 0xda, 0x42, 0xa2, 0xab, 0x46, 0xbe, 0x2c, 0x4e, 0xd7, 0xe6, 0x69, 0xbb, 0x63, 0x02, 0x0d, 0x23, 0x6c, 0x63, 0xb8, 0xf8, 0xad, 0xa4, 0x28, 0x4f, 0xf3, 0x30, 0xad, 0x89, 0x2e, 0x04, 0xdd, 0x32, 0xc8, 0xb7, 0x88, 0x29, 0x35, 0xb7, 0xef, 0x01, 0xcc, 0xd5, 0x30, 0xa8, 0xd5, 0x04, 0x05, 0x46, 0xe3, 0x5d, 0xae, 0x68, 0x64, 0x67, 0x2c, 0x5e, 0x76, 0x96, 0xb0, 0xe1, 0xfc, 0x11, 0x53, 0xfa, 0xf1, 0xb8, 0x07, 0x1f, 0xfd, 0x66, 0xce, 0x9e, 0x46, 0x73, 0x2a, 0x3f, 0x89, 0x7e, 0xd4, 0x24, 0x69, 0x69, 0xb0, 0xf5, 0x07, 0xa4, 0x01, 0x3a, 0xd2, 0xaf, 0xda, 0x08, 0xa1, 0xda, 0xd5, 0xe0, 0xff, 0x50, 0x06, 0xd4, 0xc5, 0x53, 0x32, 0xeb, 0xef, 0xc9, 0x3d, 0xc7, 0xa8, 0xf8, 0xe2, 0x85, 0xa7, 0x8e, 0xa7, 0xe5, 0xbe, 0xe4, 0x0f, 0xab, 0xb0, 0x83, 0x11, 0x45, 0x44, 0xe8, 0xc9, 0xad, 0x97, 0x84, 0x6e, 0x91, 0xb6, 0x07, 0x84, 0xb2, 0x6c, 0xde, 0x52, 0x8a, 0x59, 0xfa, 0x97, 0x31, 0x44, 0xd4, 0x79, 0x81, 0xb3, 0xae, 0xbe, 0x79, 0xb8, 0x1b, 0x3e, 0xdf, 0x0d, 0xc1, 0x98, 0x29, 0x63, 0x5e, 0x25, 0x9e, 0xf8, 0x09, 0x2a, 0xb9, 0x68, 0xbb, 0x52, 0xce, 0xc5, 0x0d, 0x5b, 0xef, 0xe9, 0x43, 0x0f, 0x11, 0x0b, 0x8a, 0x76, 0x6b, 0x91, 0x7e, 0x4a, 0x1f, 0x25, 0xef, 0xab, 0x1c, 0x0b, 0xe5, 0x14, 0x43, 0xb2, 0xe1, 0x8e, 0xc9, 0x89, 0x66, 0x23, 0xdc, 0x13, 0xb8, 0x96, 0x89, 0x3e, 0xe4, 0x51, 0xdd, 0xf1, 0x00, 0x9f, 0x4a, 0xe4, 0xb4, 0x1b, 0x4d, 0xb4, 0xfa, 0x69, 0x4e, 0x37, 0x21, 0x23, 0xc8, 0x0d, 0x18, 0x16, 0xa9, 0x77, 0xe9, 0xaf, 0xfc, 0x6c, 0x84, 0xb0, 0xc5, 0xea, 0xbe, 0x27, 0x2c, 0x8b, 0x99, 0xa1, 0xde, 0x58, 0xc6, 0x9b, 0xb1, 0xe1, 0x68, 0x39, 0x87, 0x8e, 0x1b, 0x3b, 0x74, 0x30, 0x35, 0x2c, 0x23, 0xdb, 0x4c, 0xdc, 0x75, 0xf8, 0xf8, 0x11, 0x6c, 0x96, 0xd9, 0x7a, 0x48, 0x01, 0xdc, 0xe4, 0xef, 0x96, 0xbb, 0xb0, 0x92, 0xd5, 0xc3, 0x85, 0x8e, 0xb8, 0xda, 0x42, 0x90, 0x43, 0xc0, 0x37, 0xfd, 0x5d, 0x95, 0x94, 0x91, 0xde, 0x9c, 0x21, 0x46, 0xe9, 0x3e, 0x30, 0x77, 0x7c, 0x52, 0xd1, 0x45, 0x45, 0x9b, 0x44, 0x3a, 0xb8, 0x92, 0xb4, 0x2c, 0x5e, 0x66, 0x22, 0x64, 0x70, 0x42, 0x9f, 0x00, 0xa4, 0xce, 0xbe, 0x96, 0x47, 0xf8, 0x49, 0x1a, 0x8c, 0xf4, 0x33, 0x02, 0x24, 0x81, 0xce, 0xa7, 0x0e, 0x6f, 0x3e, 0xef, 0xb1, 0x5e, 0x2e, 0x29, 0x28, 0xc8, 0xc1, 0x38, 0xdd, 0x42, 0xcb, 0xf4, 0x59, 0xfe, 0x42, 0xcd, 0x5a, 0x95, 0xef, 0xb2, 0x26, 0x03, 0x69, 0x31, 0x20, 0xf3, 0x44, 0xdf, 0x99, 0x3e, 0x86, 0xfa, 0xe8, 0xae, 0x5a, 0x4d, 0xbd, 0x07, 0x09, 0x54, 0xb2, 0x48, 0x25, 0xa1, 0x23, 0x2e, 0x08, 0x7e, 0x40, 0xfa, 0x7d, 0xd4, 0x60, 0x74, 0xbc, 0x4b, 0x99, 0x30, 0x9c, 0xb3, 0x8d, 0x10, 0x04, 0xa3, 0x86, 0x0a, 0xa2, 0x5f, 0xc6, 0x2b, 0xe0, 0xff, 0x18, 0xdc, 0x14, 0xce, 0xab, 0x65, 0xf7, 0xf1, 0x20, 0xaf, 0x59, 0x49, 0xe2, 0x4e, 0x13, 0x9a, 0xb6, 0xbe, 0x3c, 0xec, 0x93, 0xed, 0xa0, 0x31, 0xb3, 0xfa, 0x6d, 0x29, 0xea, 0x3d, 0x30, 0x83, 0x37, 0x87, 0x00, 0x45, 0x99, 0xab, 0xf9, 0x6d, 0x23, 0x3d, 0xed, 0xd8, 0x53, 0x99, 0x55, 0x64, 0xa0, 0x27, 0x8e, 0x52, 0x52, 0xde, 0x42, 0xee, 0x96, 0x07, 0x24, 0x71, 0xd2, 0x44, 0xe0, 0x26, 0x36, 0xd0, 0x51, 0xcc, 0x94, 0x08, 0xf5, 0x3c, 0x71, 0x2b, 0x9f, 0x4b, 0x5c, 0x5e, 0x6c, 0xf2, 0x7e, 0xf3, 0xf8, 0xac, 0x73, 0xea, 0xd2, 0x20, 0x58, 0xb8, 0x2d, 0x00, 0x25, 0x48, 0xd8, 0x31, 0x3d, 0x40, 0x70, 0x2c, 0x44, 0x85, 0xd4, 0xa4, 0x31, 0x01, 0xd9, 0x69, 0xa4, 0xa4, 0x3f, 0x8c, 0x79, 0xa8, 0xe4, 0xc4, 0x9d, 0x1a, 0x38, 0x10, 0x20, 0x96, 0xf1, 0x9e, 0x8c, 0x52, 0x00, 0xec, 0x76, 0x5d, 0xc3, 0x2d, 0x52, 0x29, 0x7c, 0xee, 0x8c, 0x48, 0x02, 0xf9, 0xd4, 0x73, 0xb6, 0x79, 0xb9, 0xd0, 0xb9, 0x60, 0x79, 0x75, 0x5c, 0x06, 0x17, 0x28, 0xd8, 0x12, 0xaf, 0x68, 0x40, 0x9e, 0x07, 0xb2, 0xb3, 0x96, 0x66, 0xfd, 0xd6, 0x61, 0xa9, 0x87, 0x81, 0xc4, 0x93, 0xd3, 0xb9, 0x03, 0x65, 0xf2, 0xdf, 0x49, 0xae, 0x03, 0x26, 0x49, 0x65, 0xf6, 0x4b, 0x26, 0x35, 0x95, 0x80, 0x90, 0x18, 0xc4, 0xa9, 0x31, 0x27, 0x07, 0xca, 0x47, 0xb1, 0x46, 0xc0, 0x92, 0x8a, 0xcd, 0x30, 0x70, 0xa5, 0x97, 0xbe, 0x47, 0xe5, 0xcc, 0x7f, 0x23, 0x31, 0x88, 0xb0, 0xa0, 0xc7, 0xde, 0xa8, 0x0b, 0xd2, 0x1d, 0x0b, 0xc4, 0x3e, 0x51, 0x41, 0xe6, 0xcb, 0x0d, 0x26, 0x2a, 0x60, 0x68, 0x03, 0x09, 0xa3, 0x46, 0xbe, 0x21, 0xc6, 0xd9, 0x4d, 0xda, 0xa3, 0x67, 0x70, 0x49, 0x0c, 0x4d, 0xa0, 0x55, 0x5c, 0x44, 0x42, 0x18, 0x52, 0xe3, 0x21, 0x88, 0x20, 0x65, 0x1b, 0x56, 0xbe, 0xad, 0x1b, 0x16, 0x84, 0x87, 0x47, 0xa1, 0xf8, 0x31, 0x7a, 0xb7, 0xe5, 0x1a, 0xf4, 0xe9, 0xad, 0xe9, 0x50, 0xb6, 0xdf, 0xc1, 0xb7, 0xf5, 0x0c, 0xc3, 0x54, 0x73, 0xd7, 0xd5, 0x07, 0xdc, 0x4c, 0xa2, 0x5e, 0xdf, 0x73, 0xe2, 0xc1, 0x8d, 0x24, 0xdc, 0xec, 0x02, 0x1c, 0x29, 0xa3, 0x48, 0x51, 0xba, 0xa0, 0x78, 0x83, 0x1d, 0xd1, 0x22, 0x14, 0xfb, 0xc0, 0xef, 0x19, 0xe6, 0x53, 0x85, 0xb1, 0x51, 0xb5, 0xab, 0x96, 0xe0, 0x94, 0xae, 0xf1, 0xe3, 0x8d, 0x03, 0x73, 0x1d, 0xe4, 0x2d, 0xa1, 0xc9, 0x79, 0xe2, 0x6f, 0xdf, 0xf7, 0x69, 0x11, 0x93, 0x4f, 0x46, 0x0e, 0x1e, 0x65, 0x19, 0x96, 0xc2, 0x08, 0xc4, 0x15, 0x08, 0x28, 0xcc, 0x08, 0x4d, 0x43, 0x02, 0x10, 0x7c, 0x21, 0x62, 0x44, 0x1d, 0xc1, 0x3b, 0xcc, 0x8f, 0x93, 0x90, 0xac, 0x91, 0xe8, 0xbe, 0xdd, 0x08, 0xa6, 0x60, 0xa2, 0xfc, 0x40, 0x70, 0x19, 0xe3, 0xe5, 0xaf, 0x10, 0x22, 0xf8, 0x46, 0x1b, 0xd1, 0xc1, 0xad, 0xe3, 0xbe, 0x62, 0xcc, 0xc1, 0xb5, 0x0c, 0x60, 0x8c, 0xff, 0x72, 0xa1, 0xaf, 0x29, 0x7e, 0x22, 0x7e, 0x07, 0x43, 0xf8, 0xca, 0xf7, 0x34, 0x1e, 0xb2, 0x6a, 0x93, 0x18, 0xbd, 0xa1, 0x2c, 0xd7, 0x26, 0xb5, 0x42, 0xdd, 0x77, 0xda, 0xca, 0xa1, 0x59, 0xe4, 0xd7, 0x35, 0xab, 0x0b, 0x56, 0x26, 0xd1, 0xeb, 0xfb, 0xa4, 0x4f, 0xcf, 0x7b, 0xe2, 0x96, 0x2e, 0xfc, 0xc0, 0x1d, 0x76, 0xc9, 0xa8, 0xb4, 0x09, 0x4b, 0xb5, 0x16, 0x85, 0x35, 0x1b, 0xbd, 0x49, 0xfe, 0xc3, 0xfa, 0x35, 0x94, 0x35, 0x44, 0xb0, 0x4f, 0xbb, 0xd1, 0xf0, 0x23, 0xc3, 0x63, 0x76, 0x1b, 0x86, 0x65, 0xd7, 0x02, 0xe7, 0x36, 0xc2, 0x63, 0x9e, 0xc5, 0x3f, 0xb5, 0x95, 0x5e, 0x35, 0xcf, 0x92, 0xc3, 0x2f, 0xa2, 0x17, 0x7f, 0x5f, 0x26, 0x87, 0x77, 0xe4, 0x95, 0x89, 0xc2, 0x48, 0xd8, 0xb1, 0xba, 0x4d, 0x3e, 0x5e, 0x53, 0xe9, 0x74, 0xde, 0xac, 0x8f, 0xb2, 0xd9, 0xe4, 0xb0, 0x32, 0xec, 0x2f, 0x82, 0xe6, 0x94, 0x29, 0x00, 0x6a, 0x4e, 0x6a, 0x32, 0x38, 0xfc, 0x5a, 0xae, 0x1b, 0x8b, 0x46, 0x5f, 0xe6, 0xd3, 0xb4, 0x85, 0x65, 0xbe, 0xf4, 0xfd, 0x94, 0xad, 0xf8, 0xc3, 0x0f, 0x17, 0x66, 0xb5, 0xca, 0x73, 0xea, 0x99, 0x02, 0x59, 0xd1, 0x62, 0x73, 0xe4, 0xd4, 0xaf, 0xcc, 0x5a, 0x31, 0x95, 0x60, 0x0f, 0x01, 0x9e, 0x1e, 0x86, 0xc5, 0x11, 0xc3, 0xda, 0x42, 0x74, 0x4e, 0x5c, 0x8f, 0x50, 0xb4, 0x7e, 0x6c, 0x34, 0xd6, 0xf0, 0xd5, 0xfc, 0xb0, 0x08, 0xd7, 0x53, 0xd3, 0x67, 0xa3, 0x77, 0x15, 0xda, 0xe1, 0x3d, 0x87, 0x7e, 0x46, 0x54, 0xa7, 0x28, 0x69, 0xcd, 0xd7, 0x03, 0xd2, 0xdb, 0x0e, 0x7b, 0x54, 0xd8, 0xce, 0x5a, 0x9e, 0x89, 0x56, 0x31, 0x0c, 0xa3, 0x18, 0xfa, 0xc3, 0x8e, 0x6d, 0xfb, 0xfc, 0x68, 0x88, 0xee, 0xa0, 0x4d, 0xa8, 0x5e, 0x16, 0xd6, 0x92, 0x54, 0x58, 0xdf, 0x3f, 0x33, 0x4d, 0x8e, 0xd2, 0xe1, 0x53, 0x91, 0xcd, 0x27, 0x1a, 0xa6, 0x83, 0x5b, 0xb9, 0x61, 0xd1, 0x3c, 0xfb, 0x2a, 0x09, 0x1d, 0xfa, 0x85, 0x2f, 0x46, 0xf0, 0x96, 0x68, 0x97, 0x49, 0xe4, 0xaf, 0x6e, 0xfd, 0x5d, 0xca, 0xcb, 0x1c, 0x9a, 0x7c, 0xb2, 0xab, 0x65, 0xfd, 0xd1, 0xae, 0x78, 0xa7, 0x63, 0x86, 0x88, 0xf2, 0x54, 0x7d, 0x82, 0xa2, 0xa6, 0xa0, 0x15, 0x3f, 0x13, 0xcd, 0x70, 0xc6, 0xf4, 0x0c, 0x4d, 0x9e, 0x61, 0x22, 0x2e, 0xcd, 0x9a, 0x64, 0xe6, 0x6c, 0xa5, 0xca, 0x5c, 0x58, 0x39, 0x44, 0x8c, 0x2b, 0xdb, 0x51, 0xce, 0x6b, 0x47, 0xcd, 0x5b, 0x01, 0x11, 0x0a, 0x0d, 0xec, 0x8c, 0x23, 0x66, 0x36, 0xeb, 0x8d, 0xd4, 0x27, 0xa6, 0xef, 0x33, 0xba, 0x20, 0x34, 0x94, 0x4d, 0x86, 0xde, 0x3d, 0x9c, 0xfa, 0x9d, 0xf1, 0xf0, 0xf1, 0x20, 0x71, 0x94, 0xd9, 0x2b, 0x42, 0x89, 0x00, 0xea, 0xb1, 0x7a, 0xb1, 0x85, 0x15, 0xf2, 0xa0, 0xf4, 0x54, 0xcd, 0x87, 0x15, 0xa8, 0xed, 0x12, 0xfb, 0xa3, 0x2e, 0xf9, 0x89, 0x71, 0x9b, 0x6b, 0x40, 0x5e, 0xe2, 0xb3, 0x56, 0x97, 0x05, 0x16, 0x08, 0x35, 0x53, 0xfa, 0x31, 0x77, 0x97, 0x4e, 0x1a, 0x4f, 0x8f, 0x25, 0x94, 0x21, 0x9f, 0xa4, 0x44, 0xc7, 0xc7, 0x1f, 0x3f, 0xd8, 0xd3, 0x7f, 0xd7, 0x2a, 0xd1, 0xe7, 0xb4, 0x95, 0xc8, 0x97, 0x26, 0xfa, 0xa7, 0x10, 0xb9, 0x84, 0x7c, 0x78, 0x0a, 0x2e, 0xe6, 0x41, 0xda, 0x86, 0xcd, 0x06, 0x61, 0xb0, 0x50, 0xb5, 0xe4, 0xad, 0xff, 0xf3, 0x8a, 0xde, 0x4b, 0xbc, 0x6c, 0xc3, 0x3a, 0x4a, 0xeb, 0x09, 0x60, 0x39, 0x46, 0xc4, 0x0a, 0xe8, 0x6c, 0xf9, 0xbc, 0x22, 0x0e, 0x5f, 0xde, 0xfe, 0xf9, 0x66, 0xb2, 0x03, 0xa3, 0x79, 0x89, 0x90, 0x03, 0x80, 0x37, 0x7b, 0xa6, 0xaa, 0xc4, 0xf9, 0x00, 0x69, 0x64, 0xbe, 0x00, 0xbe, 0xa9, 0x65, 0xe7, 0xb6, 0xf8, 0x11, 0x59, 0x35, 0x3a, 0x55, 0xb4, 0xf2, 0xd3, 0x51, 0xa2, 0xc3, 0xd8, 0x1e, 0xea, 0x1b, 0x7c, 0x6d, 0x8c, 0xd0, 0xcc, 0x6a, 0x0c, 0x22, 0x9d, 0xe7, 0x0e, 0xfa, 0xc2, 0xb6, 0x23, 0x6f, 0x82, 0x56, 0xe3, 0x8e, 0x49, 0xd3, 0x3c, 0x5b, 0x9d, 0xe7, 0x09, 0x13, 0x54, 0x65, 0xe6, 0xb4, 0x04, 0xd7, 0x43, 0xbf, 0xbc, 0x66, 0xb8, 0x3d, 0xf1, 0xfb, 0x98, 0x00, 0xbb, 0xa4, 0xc9, 0x2b, 0x42, 0x39, 0xd3, 0xf5, 0x72, 0x3f, 0x36, 0xa9, 0xf7, 0x0c, 0x01, 0xf1, 0x65, 0x2c, 0xa0, 0x55, 0xb6, 0x04, 0xf6, 0xff, 0xfa, 0xb5, 0xac, 0xc1, 0x4a, 0x44, 0xc8, 0x59, 0xfe, 0xf7, 0x81, 0xf3, 0x20, 0x02, 0x51, 0xef, 0x20, 0x62, 0x4d, 0xe5, 0xc8, 0x0a, 0xb2, 0xe6, 0x73, 0x3d, 0xc0, 0x05, 0x7a, 0x3b, 0xcb, 0x16, 0xf0, 0x1f, 0x8f, 0xb6, 0x8f, 0x08, 0xc4, 0x8c, 0xf1, 0x77, 0xf2, 0xce, 0x04, 0xf8, 0x87, 0x06, 0xb8, 0x05, 0x27, 0x16, 0xfa, 0x27, 0x43, 0x79, 0xe6, 0x5e, 0xed, 0xcd, 0x38, 0xc3, 0xea, 0x8e, 0x04, 0x6c, 0x09, 0x25, 0xa8, 0x90, 0xb4, 0x21, 0xfe, 0xeb, 0xc5, 0xc4, 0xd6, 0x64, 0x9b, 0xc1, 0xa3, 0xee, 0x6c, 0x44, 0x74, 0xac, 0xdc, 0x33, 0x26, 0x58, 0xcf, 0xb3, 0xd8, 0xe5, 0x7c, 0xef, 0xa0, 0x63, 0xc4, 0x15, 0x7c, 0x24, 0xc1, 0xa0, 0x8c, 0x1d, 0xa1, 0xdd, 0x7e, 0x8e, 0xb5, 0xa8, 0x49, 0xe6, 0xc5, 0x77, 0x1e, 0xe1, 0xa7, 0x9b, 0x9b, 0xf3, 0x0f, 0xc2, 0x43, 0xe9, 0xa9, 0xbf, 0x2b, 0xce, 0x65, 0x8e, 0xf5, 0x0b, 0x13, 0x92, 0x02, 0xd3, 0x2f, 0x22, 0xe4, 0xbe, 0xfe, 0x44, 0x12, 0xb4, 0xda, 0xb8, 0xe0, 0x0d, 0xc9, 0x39, 0xae, 0xf6, 0x55, 0xff, 0x5f, 0x17, 0x98, 0x88, 0x0d, 0x73, 0x97, 0x98, 0xfa, 0x8f, 0xd1, 0x7f, 0xca, 0xd6, 0x17, 0x9a, 0xf0, 0x3c, 0x9d, 0x1c, 0x67, 0x22, 0x52, 0x0e, 0xa2, 0x79, 0x6d, 0x95, 0xc5, 0x2b, 0x48, 0x74, 0x15, 0xb6, 0x72, 0xd1, 0xad, 0x1a, 0x00, 0x3c, 0x74, 0xf6, 0x23, 0xed, 0x4b, 0xee, 0x00, 0x4d, 0x8b, 0x4f, 0xbb, 0xb9, 0xae, 0xf6, 0xd5, 0x82, 0x4c, 0x6e, 0xb9, 0x38, 0x4a, 0x58, 0x91, 0x28, 0x4e, 0x10, 0x5e, 0x23, 0x75, 0x8d, 0x48, 0x81, 0x49, 0x89, 0x32, 0x66, 0xed, 0xe2, 0x92, 0x44, 0x9b, 0x41, 0x80, 0xa1, 0x51, 0xf9, 0x0d, 0x1b, 0xc6, 0x32, 0xd5, 0xa9, 0xa3, 0x46, 0xd8, 0x23, 0xf0, 0x6b, 0x85, 0x05, 0xcc, 0x93, 0x18, 0x70, 0x62, 0x90, 0x26, 0x71, 0x18, 0x7c, 0x76, 0x86, 0x09, 0x58, 0x13, 0x5e, 0xb6, 0xf3, 0x9f, 0xe1, 0xf8, 0x0d, 0xea, 0x70, 0x3a, 0xbd, 0xc4, 0x6e, 0xe4, 0x10, 0x0f, 0xff, 0x1a, 0xf3, 0x18, 0x0f, 0xa7, 0x53, 0x27, 0x97, 0x34, 0x82, 0x54, 0x1b, 0xbe, 0xdd, 0x9d, 0x78, 0x47, 0xac, 0x36, 0xdc, 0xcb, 0x49, 0x20, 0x16, 0x75, 0x85, 0xfd, 0x10, 0x13, 0x47, 0x23, 0x99, 0xc8, 0x76, 0xef, 0x68, 0x00, 0x19, 0x5b, 0x5e, 0xa9, 0xbd, 0xd3, 0x0c, 0xa1, 0x17, 0x45, 0x75, 0x6a, 0xeb, 0x78, 0x15, 0x25, 0x2d, 0x9e, 0x22, 0xbe, 0x65, 0x2c, 0x11, 0x64, 0x58, 0xe9, 0x5c, 0x3c, 0xe4, 0x45, 0x83, 0x56, 0x2c, 0xed, 0x51, 0xe0, 0xf5, 0x9c, 0x60, 0x99, 0x50, 0x34, 0xdf, 0x89, 0x7a, 0x0d, 0x93, 0xf0, 0x00, 0x8d, 0x1c, 0x7c, 0x26, 0xf9, 0x7a, 0xbe, 0x8a, 0x8a, 0xcf, 0xdf, 0x05, 0xc4, 0x66, 0x8f, 0xd2, 0x03, 0xf5, 0x3f, 0xf2, 0x57, 0x1f, 0x90, 0xce, 0x91, 0x3d, 0x0b, 0x1f, 0x9e, 0x5e, 0x12, 0x0b, 0x14, 0x8c, 0x16, 0x90, 0x0b, 0x52, 0x0b, 0x26, 0x2e, 0x7b, 0x19, 0xa0, 0x12, 0x1b, 0x95, 0x54, 0xc6, 0xd4, 0x2f, 0x7b, 0xab, 0x52, 0x6d, 0xdb, 0x85, 0x18, 0x58, 0xa3, 0xd3, 0x7f, 0x75, 0x96, 0x5c, 0xfb, 0xf6, 0x6b, 0x0b, 0xa1, 0x32, 0x74, 0xfc, 0xe6, 0x53, 0x7f, 0xd7, 0xaa, 0x4e, 0xfa, 0x5d, 0x75, 0x19, 0x5a, 0x40, 0x00, 0x18, 0xbd, 0x38, 0xf7, 0xd8, 0xcd, 0x53, 0xfd, 0xff, 0xe8, 0x8d, 0xf1, 0x83, 0x7f, 0xa0, 0x6f, 0x1b, 0xbc, 0x1d, 0x9a, 0xf3, 0x68, 0xbc, 0x19, 0xa4, 0x0b, 0xf0, 0x60, 0x63, 0x55, 0xbf, 0x31, 0x78, 0xbc, 0xd1, 0x62, 0xf3, 0x67, 0xc7, 0xe0, 0x9a, 0x4b, 0xce, 0xf4, 0x25, 0x94, 0x73, 0xc5, 0xae, 0x46, 0xb9, 0x1f, 0x63, 0x24, 0x68, 0x72, 0x7e, 0xd1, 0xa9, 0x1e, 0x77, 0x35, 0xd0, 0xed, 0x77, 0x22, 0x79, 0xe1, 0x11, 0x37, 0xd6, 0x31, 0x2d, 0x05, 0x47, 0x8e, 0x44, 0x71, 0x2b, 0xaa, 0xd3, 0x59, 0xf7, 0xfb, 0x09, 0x7b, 0x85, 0xbd, 0xc3, 0x92, 0xae, 0x36, 0xbb, 0xc1, 0x1a, 0x3d, 0xfc, 0x35, 0x57, 0xfd, 0x9a, 0x07, 0x29, 0xf7, 0x9f, 0x5f, 0x21, 0x46, 0x48, 0xdf, 0x71, 0x27, 0x72, 0x3f, 0xff, 0xb8, 0x4f, 0x34, 0xb8, 0x00, 0x5d, 0x97, 0x27, 0x30, 0x99, 0xc3, 0x46, 0x28, 0xf0, 0x3f, 0x94, 0x3d, 0xf6, 0x9d, 0x67, 0x3a, 0xda, 0xa1, 0x84, 0xa4, 0x9a, 0xa6, 0xed, 0x43, 0x73, 0x3e, 0xfa, 0xdd, 0x9c, 0x19, 0xab, 0x45, 0x33, 0x28, 0x3d, 0x95, 0x78, 0x01, 0xfb, 0xb7, 0x39, 0x86, 0x57, 0x2a, 0x8d, 0xc1, 0x39, 0x02, 0xc5, 0x13, 0x97, 0x31, 0xa0, 0x8e, 0x46, 0x06, 0xbe, 0x9f, 0x10, 0xf3, 0x57, 0xf0, 0x06, 0x93, 0x2d, 0x8c, 0x17, 0xeb, 0xbf, 0x45, 0xe2, 0xf1, 0xc0, 0x53, 0xc9, 0x4a, 0xc7, 0x3d, 0x47, 0x58, 0x48, 0xfd, 0x83, 0x74, 0xc3, 0x5f, 0x25, 0x78, 0x3b, 0xaa, 0x68, 0x81, 0xea, 0x82, 0x70, 0xf3, 0x33, 0x0d, 0xdf, 0xbd, 0xd8, 0x55, 0xa3, 0xde, 0x6d, 0xed, 0x11, 0x28, 0x0d, 0xd8, 0x38, 0x43, 0x4b, 0xa6, 0x6f, 0xf6, 0x6b, 0xe0, 0x31, 0xa2, 0xd3, 0xa6, 0x2b, 0x0f, 0xbc, 0x97, 0x92, 0x6b, 0x2d, 0xf1, 0xba, 0x90, 0x2a, 0xf9, 0xe5, 0x86, 0x29, 0x9e, 0x59, 0x49, 0xc5, 0x59, 0xb5, 0xcc, 0xb6, 0x57, 0x84, 0x3d, 0x01, 0xda, 0x13, 0x8b, 0x6c, 0xdd, 0x80, 0x26, 0x35, 0xf7, 0x14, 0x06, 0x03, 0x81, 0xd2, 0xee, 0x1d, 0xfb, 0x50, 0xf2, 0xda, 0xac, 0xc6, 0x37, 0x59, 0x89, 0x65, 0xfa, 0x71, 0x58, 0xea, 0xd3, 0xeb, 0x15, 0x72, 0x3b, 0xef, 0x95, 0x90, 0x4d, 0xbd, 0x69, 0x9d, 0xc9, 0x9e, 0x05, 0x4f, 0x5e, 0x19, 0x22, 0x8d, 0x29, 0x69, 0x60, 0x82, 0x79, 0x2f, 0x30, 0xf1, 0xd5, 0x65, 0xf1, 0xc8, 0x40, 0x93, 0x59, 0xf7, 0xbb, 0x45, 0x17, 0x82, 0x0c, 0xbc, 0xb6, 0xd5, 0xbe, 0xe4, 0xc5, 0x59, 0x69, 0x86, 0x35, 0x44, 0x33, 0xbf, 0x02, 0xb5, 0x97, 0xb1, 0x16, 0x00, 0x65, 0x78, 0x6a, 0x46, 0x0a, 0x5f, 0x6e, 0x4a ],
-const [ 0xd2, 0xf6, 0x1e, 0x1a, 0x3e, 0x37, 0x0e, 0x78, 0xdb, 0x7a, 0x35, 0x6c, 0xff, 0x4e, 0x3e, 0x0a, 0x40, 0x80, 0x0a, 0xb9, 0x36, 0xd7, 0x9b, 0x89, 0x82, 0x01, 0x31, 0xc6, 0x0e, 0xce, 0xb2, 0xcd, 0x97, 0x9c, 0x4f, 0x1e, 0x69, 0x13, 0x65, 0xb3, 0x6a, 0x12, 0xa1, 0x90, 0x5a, 0xe8, 0x68, 0x9c, 0x59, 0xc8, 0x76, 0xaf, 0xaa, 0x77, 0xc5, 0xec, 0xb6, 0x48, 0xb0, 0x51, 0x54, 0x4a, 0x58, 0x8c, 0x47, 0xc0, 0x47, 0x10, 0x08, 0xd1, 0x53, 0x69, 0xc7, 0x81, 0xc5, 0xcc, 0xac, 0xe0, 0xbb, 0xf3, 0x62, 0x81, 0xcb, 0x28, 0xd6, 0x2e, 0xe9, 0x9f, 0x3c, 0xda, 0x8b, 0x08, 0x54, 0xd7, 0x0b, 0x65, 0xeb, 0x4a, 0x4c, 0x19, 0xa4, 0xdb, 0xa0, 0x42, 0xf8, 0xb1, 0xe9, 0x49, 0x7c, 0x9d, 0xff, 0xb8, 0x62, 0x95, 0x52, 0x4b, 0x43, 0x65, 0xd1, 0x49, 0x1c, 0xa1, 0x0a, 0x14, 0x96, 0xde, 0x92, 0xff, 0x8a, 0x21, 0xa7, 0x61, 0xc4, 0x98, 0x14, 0xe8, 0x07, 0x88, 0x55, 0x2f, 0x52, 0x87, 0xfc, 0x92, 0x62, 0xeb, 0x53, 0x41, 0x78, 0x82, 0x43, 0x93, 0x5c, 0x84, 0x74, 0x9d, 0xa2, 0xc5, 0xb6, 0x04, 0x2c, 0x2f, 0xa0, 0x0f, 0xf0, 0x70, 0x76, 0x00, 0xfb, 0xf0, 0x50, 0xa5, 0xb6, 0x06, 0x79, 0x2a, 0x69, 0x6b, 0x16, 0x31, 0xfd, 0xef, 0x08, 0x24, 0x06, 0x6a, 0x13, 0xca, 0x01, 0xf6, 0x3f, 0x19, 0xd9, 0x5b, 0x7e, 0x4c, 0xb1, 0xcb, 0x90, 0x35, 0xdd, 0xd0, 0x24, 0xd3, 0x31, 0x82, 0x40, 0x27, 0x7f, 0xfd, 0xe2, 0x44, 0x5b, 0x12, 0xe8, 0xa6, 0x21, 0x3d, 0x2d, 0xc4, 0x3a, 0xd7, 0xf5, 0xe8, 0x9a, 0x8d, 0x8b, 0x3f, 0x8d, 0x11, 0x28, 0x2c, 0xb4, 0x0f, 0x17, 0xe2, 0x4a, 0x63, 0x17, 0x32, 0xac, 0x89, 0x01, 0xa1, 0x19, 0x55, 0xaa, 0xbe, 0xb6, 0xe4, 0x0b, 0xb3, 0xd5, 0xd2, 0x9f, 0x19, 0x76, 0xad, 0x0d, 0x11, 0x0e, 0xaa, 0x07, 0x90, 0x88, 0x97, 0x72, 0xfa, 0x8a, 0x11, 0xc7, 0xf3, 0xf9, 0xf7, 0xb9, 0x72, 0xbf, 0x1f, 0x18, 0x16, 0xcc, 0x47, 0xf5, 0xbe, 0x5a, 0x4e, 0x07, 0x54, 0x76, 0xa4, 0x4d, 0xe9, 0xbc, 0xff, 0xf5, 0x07, 0x62, 0x4f, 0x7d, 0x42, 0x78, 0xf5, 0x18, 0x11, 0x6d, 0x2f, 0x53, 0xdc, 0xd6, 0xd7, 0xf8, 0x56, 0x6b, 0x4e, 0x32, 0x0d, 0x52, 0xb3, 0xf3, 0x40, 0xa1, 0x58, 0x93, 0xf0, 0x1e, 0x76, 0xba, 0x39, 0x49, 0x1f, 0x7f, 0xe3, 0x9c, 0x75, 0xd1, 0x35, 0x11, 0x1a, 0x16, 0x09, 0xe5, 0xe7, 0x13, 0x26, 0x9b, 0xe1, 0x0c, 0xc9, 0x45, 0x68, 0x2c, 0x85, 0xff, 0xb2, 0x27, 0x4d, 0xbc, 0x78, 0x1d, 0xd0, 0x45, 0xef, 0xc2, 0x05, 0x7e, 0xfa, 0xbc, 0x06, 0xeb, 0x9e, 0x4c, 0x21, 0x74, 0xb6, 0x31, 0x2c, 0x65, 0xe8, 0xc9, 0x1a, 0xb9, 0xd7, 0x7a, 0xcc, 0x98, 0x9a, 0x50, 0x29, 0x1e, 0x6e, 0xe7, 0x71, 0x5e, 0xa7, 0x8c, 0xce, 0xa7, 0xed, 0x9f, 0x2d, 0x06, 0xa4, 0x3b, 0x4b, 0x0b, 0xac, 0x1a, 0x13, 0xd0, 0x4b, 0xb2, 0x27, 0x38, 0x67, 0xa4, 0xbd, 0x75, 0xf9, 0x57, 0xac, 0xcd, 0xbe, 0xe0, 0xc6, 0x9d, 0x30, 0x26, 0x69, 0x9e, 0xb4, 0x43, 0x51, 0x67, 0x15, 0x2d, 0xb0, 0x33, 0x31, 0x95, 0x81, 0xe5, 0xf2, 0x0f, 0x19, 0x49, 0x80, 0x74, 0xff, 0x9d, 0xb5, 0x84, 0xfd, 0x50, 0xd2, 0xd0, 0x77, 0x09, 0x70, 0xd8, 0xfc, 0xeb, 0xb9, 0x70, 0x1b, 0x18, 0xd7, 0x68, 0x78, 0x73, 0xad, 0x6b, 0x1f, 0xab, 0xc5, 0x28, 0x17, 0x75, 0x8a, 0xb0, 0x3b, 0x18, 0xb8, 0x1f, 0x45, 0x2f, 0x10, 0x7f, 0x2c, 0xaa, 0x50, 0xe9, 0xb0, 0x17, 0x62, 0xed, 0x32, 0x20, 0xd4, 0x35, 0xca, 0x54, 0x88, 0x64, 0x94, 0x2a, 0xad, 0x44, 0x4a, 0x42, 0xed, 0x21, 0x18, 0xef, 0xe8, 0x70, 0xab, 0xf3, 0xe2, 0xb5, 0x8c, 0x89, 0xb8, 0xa3, 0xac, 0xa9, 0x19, 0x84, 0x40, 0x87, 0xf2, 0xdb, 0xce, 0x5d, 0x2a, 0x48, 0x88, 0x6a, 0x90, 0xad, 0xda, 0x3a, 0x12, 0x8f, 0x3f, 0x29, 0x2f, 0xbf, 0x58, 0x23, 0xaf, 0x39, 0x3f, 0xad, 0x91, 0x4c, 0x19, 0x29, 0x45, 0xfb, 0xea, 0x55, 0x1b, 0xa4, 0xae, 0x16, 0xfc, 0xdf, 0xa5, 0x74, 0x58, 0xa9, 0xee, 0xe5, 0x5f, 0xc2, 0x57, 0xce, 0x74, 0x53, 0x74, 0x47, 0xde, 0xd4, 0xee, 0x1f, 0xc1, 0x2d, 0x1e, 0x1f, 0x4d, 0x1b, 0xda, 0x93, 0x36, 0xd6, 0x8f, 0x07, 0x64, 0xf1, 0x90, 0x4f, 0xeb, 0x81, 0xae, 0xca, 0x3d, 0x81, 0x09, 0xe7, 0x9f, 0x75, 0x26, 0xe7, 0xd9, 0x4e, 0x41, 0xe5, 0x32, 0x8e, 0xe4, 0x14, 0x9b, 0xac, 0xb8, 0x49, 0x2b, 0xba, 0x9c, 0xb9, 0xcb, 0x45, 0xf4, 0x03, 0x33, 0x7d, 0x43, 0x71, 0x15, 0x95, 0xfd, 0x7a, 0x97, 0x6d, 0x96, 0x8c, 0x07, 0x6f, 0xdf, 0x09, 0xca, 0xb7, 0x92, 0x90, 0x96, 0x76, 0x2b, 0x7d, 0xe2, 0x98, 0xfa, 0xb3, 0x9a, 0xa4, 0x77, 0x99, 0x16, 0xe4, 0xd5, 0x62, 0x4d, 0xc7, 0xda, 0x92, 0x46, 0x83, 0xed, 0xbd, 0xd0, 0xfe, 0x71, 0x92, 0x73, 0xef, 0x51, 0x19, 0xa6, 0x40, 0xdc, 0x39, 0x42, 0xb8, 0xd4, 0x7d, 0x37, 0xd6, 0xc1, 0x18, 0x7e, 0x00, 0x8b, 0x26, 0x4f, 0xdd, 0x48, 0x34, 0x93, 0xff, 0x53, 0x03, 0x9c, 0xc5, 0x9e, 0x89, 0x14, 0x7f, 0x49, 0x39, 0x33, 0xd4, 0x73, 0x84, 0x35, 0x61, 0x50, 0xa0, 0x0c, 0xa3, 0x7b, 0x88, 0x52, 0x17, 0x8e, 0x44, 0x81, 0x9f, 0xf1, 0x6a, 0x66, 0x28, 0xef, 0xe5, 0xd3, 0x8a, 0x0f, 0xf5, 0x95, 0xaf, 0xa1, 0x77, 0xa5, 0xf8, 0x97, 0x67, 0xa3, 0xdc, 0x96, 0xa3, 0x7f, 0xd3, 0x4d, 0xf1, 0x7a, 0x72, 0x06, 0x44, 0x4d, 0xd7, 0x7a, 0x3b, 0xa7, 0x47, 0xea, 0xeb, 0xdd, 0x16, 0x6b, 0xde, 0xdd, 0xc7, 0x82, 0x5b, 0x65, 0x75, 0xf0, 0xe8, 0x72, 0x72, 0xcf, 0x0e, 0xfa, 0x2d, 0xde, 0x5c, 0xdd, 0x59, 0x1a, 0xaf, 0x1a, 0x4b, 0x8e, 0xb0, 0x3e, 0xa4, 0x6b, 0x9d, 0x23, 0x31, 0x5b, 0x4d, 0xd6, 0x0f, 0x13, 0x6e, 0xd9, 0x13, 0x27, 0x12, 0x8b, 0x68, 0x23, 0x6a, 0xe4, 0x7a, 0xd7, 0xd0, 0x65, 0x13, 0xf2, 0x0b, 0x4f, 0xc4, 0xd3, 0xcf, 0x14, 0x87, 0x9b, 0x84, 0x0b, 0xa2, 0x87, 0x48, 0x67, 0xcf, 0x7d, 0x37, 0x6a, 0x99, 0xe4, 0xea, 0xd6, 0x09, 0xb9, 0x3d, 0xa5, 0x82, 0xdf, 0x56, 0xf9, 0xea, 0xb7, 0xe3, 0x56, 0x0a, 0xf1, 0xa2, 0x0f, 0x38, 0xa2, 0x27, 0xfe, 0x33, 0x96, 0xda, 0x78, 0x4e, 0xe7, 0x3f, 0x80, 0xd1, 0xce, 0x7a, 0x3b, 0x9c, 0xba, 0x12, 0xa5, 0x0d, 0x9f, 0xf5, 0x81, 0x24, 0x91, 0xbc, 0x96, 0xe5, 0x91, 0x31, 0x18, 0xfe, 0xa7, 0x0e, 0x65, 0xaa, 0x31, 0x08, 0xf2, 0xd5, 0x7a, 0x0c, 0x84, 0x81, 0x8e, 0xc9, 0xa3, 0x68, 0x4d, 0x6e, 0x4b, 0xe3, 0xbf, 0xb5, 0xe6, 0x0a, 0xa7, 0x20, 0x77, 0x1d, 0x5b, 0x82, 0x18, 0x23, 0xd2, 0xc2, 0xa6, 0xd0, 0xff, 0xdc, 0xbb, 0xac, 0x5d, 0x28, 0xdc, 0x72, 0xcc, 0xdf, 0xf4, 0xb6, 0x9b, 0xdb, 0x01, 0xcb, 0xe6, 0x9e, 0x0e, 0xe4, 0x22, 0x96, 0x61, 0x79, 0xf6, 0xa0, 0xf5, 0xed, 0x4c, 0xca, 0x2b, 0x6d, 0xa9, 0x5d, 0xbc, 0x1b, 0xb9, 0x1b, 0xf2, 0x6c, 0x2f, 0xc5, 0x18, 0xce, 0xcc, 0xe0, 0x2f, 0x8f, 0xbc, 0xb9, 0xe2, 0xfa, 0x29, 0xa7, 0xbc, 0xc3, 0x0b, 0x90, 0x99, 0xa5, 0x3d, 0xae, 0x5a, 0x49, 0xd6, 0x93, 0xdd, 0x6a, 0xb6, 0x6b, 0x2d, 0x37, 0x5f, 0x82, 0xf5, 0xf8, 0x07, 0x06, 0x3b, 0xf5, 0xeb, 0x0d, 0x4a, 0x93, 0xe5, 0xd9, 0xf0, 0xc1, 0x41, 0x5b, 0xea, 0x92, 0xcd, 0xf7, 0x9d, 0x2b, 0x2f, 0x87, 0x07, 0xe0, 0x7b, 0xa2, 0xf4, 0x9a, 0x05, 0x1e, 0x75, 0x7c, 0x74, 0xd3, 0x8e, 0xc6, 0x18, 0xa2, 0x2f, 0xf9, 0x7e, 0xb7, 0x65, 0x3c, 0x41, 0x0a, 0xd2, 0xfe, 0x22, 0x2c, 0x5b, 0xdd, 0x5b, 0x40, 0x20, 0xc6, 0x31, 0x47, 0xb1, 0x5e, 0xc9, 0xa2, 0x7f, 0xa1, 0x3c, 0xd1, 0x90, 0xc9, 0xed, 0x81, 0x77, 0x72, 0x1b, 0xc6, 0x84, 0xfb, 0xb2, 0xa5, 0x38, 0x2f, 0x67, 0xd5, 0xfb, 0x25, 0x03, 0xc6, 0x11, 0x64, 0xff, 0xe3, 0xcb, 0x4b, 0x52, 0x15, 0xfa, 0xb1, 0x87, 0x88, 0xa9, 0xc8, 0x12, 0xb1, 0x0c, 0x47, 0xe4, 0x90, 0xb3, 0xc8, 0x3d, 0x32, 0x03, 0x6e, 0xc2, 0x7b, 0xe7, 0xcc, 0xcf, 0x22, 0xc3, 0x02, 0x0e, 0xfd, 0xaa, 0x29, 0x49, 0x7f, 0xd0, 0xf2, 0x7c, 0x7f, 0x42, 0x89, 0x2f, 0x3a, 0xd4, 0xc0, 0x02, 0x9c, 0x5b, 0x69, 0x8a, 0xbb, 0x1d, 0x03, 0x5b, 0xa5, 0x86, 0x9a, 0x66, 0x5b, 0x1d, 0xe8, 0x86, 0x1d, 0xb6, 0xc0, 0x55, 0xe8, 0xe8, 0xad, 0x44, 0x3e, 0xc1, 0xd6, 0xeb, 0x25, 0xb9, 0x24, 0x9d, 0x72, 0xe5, 0xa7, 0x40, 0x47, 0x6d, 0x36, 0x5b, 0xdb, 0x40, 0x56, 0x71, 0x79, 0x06, 0x5e, 0x8e, 0xcc, 0x57, 0xd8, 0x1f, 0x59, 0x2a, 0x29, 0x06, 0x4d, 0x90, 0x75, 0xee, 0x79, 0xa2, 0xbd, 0xdc, 0x9b, 0xb7, 0x4a, 0x07, 0xdf, 0xdb, 0x4f, 0xea, 0xa5, 0x7d, 0xca, 0x97, 0x85, 0x68, 0xab, 0x4e, 0x90, 0xf5, 0x38, 0x4e, 0xd9, 0x7e, 0xb0, 0xeb, 0x35, 0x15, 0x2e, 0xe1, 0x3e, 0x76, 0xd1, 0xe8, 0x9e, 0x3b, 0x1a, 0x89, 0x8a, 0x4f, 0x95, 0x2f, 0x8c, 0xa5, 0xbc, 0x81, 0x86, 0x2a, 0x18, 0xef, 0xf4, 0xf8, 0xa9, 0x8b, 0x71, 0xcc, 0x88, 0x1b, 0x7d, 0xba, 0xcb, 0x6c, 0x7d, 0x1f, 0xa9, 0xe9, 0x03, 0xd8, 0xdf, 0x6b, 0x50, 0xb1, 0x51, 0x53, 0x17, 0x20, 0xf5, 0xd7, 0x84, 0x34, 0xed, 0x99, 0x7d, 0xc8, 0xf3, 0x7e, 0x28, 0xfc, 0xfa, 0xbd, 0xad, 0xe6, 0x12, 0x36, 0x3d, 0x84, 0x8d, 0x06, 0x53, 0xf5, 0x60, 0x58, 0x39, 0xe9, 0xcc, 0x7d, 0xcf, 0x57, 0x3d, 0x40, 0x88, 0x6e, 0x72, 0x73, 0xb5, 0xcd, 0xde, 0xce, 0x06, 0xf6, 0x4e, 0xfa, 0x4d, 0x00, 0xcd, 0xe8, 0x86, 0x8d, 0xc4, 0x67, 0x15, 0xfc, 0x66, 0xf6, 0x4e, 0xe0, 0x4b, 0xd6, 0x3a, 0xb0, 0x5b, 0x64, 0x98, 0xc0, 0xee, 0xa6, 0x23, 0x6f, 0x32, 0x24, 0x13, 0xa2, 0xcc, 0xf9, 0xe6, 0x72, 0xc2, 0x29, 0x60, 0x22, 0x98, 0x35, 0xd1, 0x54, 0xb9, 0xed, 0x96, 0x7c, 0x19, 0x86, 0xe2, 0x94, 0x19, 0xec, 0xbf, 0x12, 0xab, 0x59, 0x4f, 0x17, 0xb6, 0x27, 0x58, 0xe9, 0xbc, 0xe3, 0xff, 0xa3, 0xba, 0xa2, 0xd4, 0x2b, 0x4f, 0x98, 0x0f, 0x65, 0x21, 0xe6, 0x19, 0xa6, 0x7d, 0xb4, 0x4f, 0x6c, 0x3d, 0x80, 0x02, 0x4c, 0xef, 0xb5, 0xc2, 0x2b, 0x33, 0x80, 0xdc, 0xb1, 0x65, 0xdf, 0x21, 0xfb, 0x7c, 0xfb, 0xe9, 0x90, 0x32, 0xb7, 0x58, 0x97, 0x66, 0x89, 0xe0, 0x47, 0xbe, 0x89, 0x07, 0x9e, 0x90, 0xc7, 0x6b, 0x56, 0x03, 0xe2, 0x03, 0x15, 0x71, 0xd6, 0xa7, 0xe4, 0x10, 0x16, 0xd3, 0xe2, 0xd2, 0xdb, 0xa8, 0x39, 0x89, 0xbb, 0x33, 0x52, 0x4f, 0x7d, 0xf2, 0x45, 0x25, 0x2c, 0x94, 0x94, 0xda, 0x6a, 0x01, 0x18, 0x2f, 0x07, 0x9a, 0x3b, 0x38, 0xd2, 0xc2, 0x68, 0x05, 0xaf, 0x9d, 0xc0, 0x82, 0xea, 0x17, 0x0f, 0x9c, 0xcb, 0x29, 0xfe, 0xa5, 0x6b, 0x58, 0x8a, 0xfa, 0xc5, 0x7e, 0xb4, 0xe3, 0x10, 0xcc, 0x7a, 0xba, 0x4d, 0x10, 0x07, 0x50, 0x1c, 0x34, 0x27, 0x8c, 0xd3, 0x07, 0xfd, 0x55, 0xd1, 0x41, 0xf8, 0xb2, 0x10, 0xc1, 0x03, 0x30, 0xfa, 0x18, 0xfc, 0x85, 0x7e, 0x4b, 0x68, 0x72, 0x62, 0xd5, 0x65, 0xee, 0xdb, 0xec, 0xdf, 0x80, 0x5b, 0x05, 0x07, 0xed, 0xaa, 0x9a, 0x01, 0x13, 0x38, 0x2b, 0xdd, 0x15, 0xb2, 0x83, 0xc9, 0xb8, 0xd3, 0x3c, 0x85, 0x0d, 0x7d, 0x85, 0x17, 0x51, 0x08, 0x23, 0xbf, 0x11, 0xda, 0xb6, 0x2d, 0x91, 0x37, 0x3e, 0xf2, 0x6f, 0x5b, 0xdd, 0x35, 0x84, 0xc6, 0xdf, 0xa7, 0x0b, 0xd8, 0xf7, 0xb9, 0x05, 0x9d, 0xcb, 0x0c, 0xdc, 0xea, 0xb3, 0x28, 0x46, 0xa9, 0xbe, 0x72, 0x6c, 0x71, 0xf7, 0x58, 0x4c, 0x5a, 0xe6, 0xcf, 0x5b, 0x0f, 0x59, 0xff, 0x6f, 0x24, 0x64, 0x3c, 0xdd, 0xaa, 0xa6, 0x39, 0xde, 0x01, 0xce, 0x78, 0x38, 0xee, 0x5e, 0x05, 0x1a, 0xed, 0xaf, 0x64, 0x47, 0xc9, 0x35, 0xc8, 0x76, 0x69, 0x05, 0x86, 0xf9, 0xed, 0x94, 0xc8, 0x9e, 0xfa, 0xc2, 0x86, 0xd3, 0x51, 0x17, 0xb2, 0x0d, 0xa7, 0x4c, 0xb3, 0x6a, 0xb1, 0x0d, 0x15, 0x95, 0x7e, 0xfd, 0x7f, 0xea, 0x09, 0xfb, 0xe5, 0xda, 0x0f, 0xa4, 0xfe, 0x91, 0x1e, 0x18, 0xf9, 0xd7, 0xef, 0x01, 0x6c, 0x34, 0xf5, 0xd2, 0x8d, 0x58, 0x36, 0x4d, 0xa4, 0xb9, 0x5a, 0x48, 0xc0, 0x7e, 0x01, 0xb0, 0xa9, 0x9c, 0x5a, 0xce, 0x17, 0x3f, 0xf2, 0xc9, 0x21, 0x6b, 0xc9, 0x6d, 0xf8, 0xe3, 0xab, 0x2a, 0xd5, 0x4a, 0xbd, 0x60, 0x30, 0x88, 0x57, 0xda, 0x33, 0x6f, 0x11, 0x98, 0x6e, 0x9f, 0x21, 0xd1, 0xcc, 0xa6, 0xe4, 0x38, 0xc6, 0x6c, 0xba, 0x7f, 0xd6, 0xcf, 0x17, 0x19, 0x2f, 0x8a, 0xd7, 0x45, 0xab, 0x5b, 0xd2, 0x48, 0x05, 0x65, 0xb1, 0xf9, 0x48, 0xd3, 0x00, 0x83, 0x87, 0xbe, 0x84, 0x67, 0xcf, 0x50, 0xce, 0xc0, 0x5a, 0x2a, 0x10, 0xcb, 0x05, 0x04, 0x30, 0xa6, 0x04, 0x93, 0x1b, 0x58, 0xd5, 0xb0, 0x5c, 0x12, 0x72, 0xb6, 0xed, 0xb5, 0xcb, 0x2c, 0x4c, 0x93, 0x73, 0xa4, 0xd2, 0x7a, 0x9a, 0xe2, 0x41, 0xef, 0x3b, 0x41, 0x9c, 0xb7, 0x96, 0x53, 0x3b, 0x9c, 0xe1, 0xc8, 0x1e, 0x6d, 0x3b, 0x91, 0x82, 0x47, 0xe1, 0x45, 0xb2, 0x13, 0xa4, 0xc3, 0x20, 0x50, 0x9b, 0x19, 0xb4, 0x13, 0x15, 0xa4, 0x64, 0x4b, 0xd1, 0x79, 0x05, 0x4a, 0x72, 0x04, 0x60, 0x81, 0x2d, 0xef, 0x89, 0x8b, 0xc5, 0x45, 0x6c, 0x6e, 0xb9, 0xd8, 0xa9, 0x1d, 0xbc, 0xe0, 0xa2, 0x41, 0x65, 0xe4, 0xd1, 0x38, 0x28, 0xde, 0x60, 0x5e, 0x85, 0x9a, 0xf3, 0x8c, 0x7f, 0x5f, 0xc9, 0xdf, 0x50, 0xd1, 0x03, 0xbb, 0x5b, 0x16, 0x43, 0x0f, 0x62, 0x38, 0x79, 0xda, 0xf9, 0xca, 0xfa, 0xee, 0x3a, 0xcf, 0xd3, 0xf4, 0xbb, 0xd7, 0x5c, 0xb0, 0xbd, 0x6b, 0x10, 0x86, 0xa6, 0xab, 0x9b, 0x3d, 0xb2, 0x36, 0x35, 0x04, 0xe5, 0x4a, 0x2f, 0xb2, 0x44, 0x2d, 0xcb, 0x52, 0x44, 0xcb, 0x51, 0xdf, 0x83, 0xa0, 0x5f, 0x4c, 0xb6, 0xd8, 0x81, 0xc7, 0xe2, 0xb5, 0x01, 0x3f, 0xd0, 0x32, 0x01, 0x24, 0xbb, 0xe6, 0xc6, 0x6e, 0x4b, 0x2a, 0x57, 0xe0, 0xc7, 0x7e, 0x47, 0x8e, 0x86, 0x29, 0xcf, 0x9d, 0xa6, 0x20, 0x20, 0x4a, 0x01, 0x29, 0xf6, 0x2d, 0x5d, 0x40, 0x71, 0xbf, 0xe3, 0x3a, 0x21, 0x1b, 0xd3, 0xa8, 0x5f, 0x01, 0x75, 0xfe, 0xe4, 0x20, 0x53, 0xf5, 0x94, 0x95, 0xa5, 0x2d, 0x9b, 0xaf, 0x0d, 0x17, 0xbb, 0xf5, 0x84, 0x12, 0xe4, 0x6a, 0x94, 0xd4, 0x06, 0x0f, 0xc9, 0x0c, 0x23, 0xaa, 0x62, 0x45, 0xa8, 0xc6, 0x4b, 0x0e, 0xfd, 0xfb, 0x50, 0x58, 0x5b, 0x6f, 0x8b, 0x1f, 0xde, 0x9d, 0x1e, 0x4d, 0xdb, 0x55, 0x28, 0xdb, 0x73, 0x04, 0xf1, 0x39, 0x68, 0x36, 0x68, 0xf0, 0x30, 0x59, 0xd0, 0x86, 0x48, 0xc4, 0xb6, 0xa1, 0xcb, 0xf8, 0x26, 0x70, 0x43, 0x25, 0x1e, 0x47, 0xbf, 0xf0, 0x43, 0x89, 0x26, 0x73, 0xd3, 0xcb, 0xca, 0x85, 0xdb, 0x36, 0x40, 0x3c, 0xaa, 0x2d, 0x70, 0xb1, 0x85, 0x30, 0xe8, 0x03, 0x9c, 0x01, 0x76, 0x9f, 0x3d, 0x05, 0xf5, 0xbe, 0x48, 0xec, 0x67, 0x2f, 0xe3, 0x95, 0x44, 0x56, 0x6e, 0x2b, 0x12, 0x75, 0xba, 0x95, 0x36, 0x2a, 0x75, 0x0d, 0x0a, 0x39, 0xe9, 0x0e, 0x2f, 0x8c, 0xe7, 0x74, 0x25, 0x78, 0xfd, 0xdf, 0x18, 0x42, 0xef, 0x58, 0xfd, 0xe2, 0x65, 0x37, 0xde, 0x06, 0xe2, 0x43, 0x72, 0x5a, 0xf5, 0x1c, 0xf1, 0x07, 0xb3, 0xd6, 0x26, 0x79, 0x64, 0xe7, 0xc6, 0x66, 0x7d, 0x43, 0x00, 0x0c, 0xcf, 0xc5, 0x55, 0xba, 0xfd, 0xd1, 0xaa, 0x91, 0x33, 0x38, 0x9c, 0x8c, 0x15, 0x5b, 0x13, 0xbe, 0xf6, 0x94, 0x1a, 0xdb, 0x4b, 0xd1, 0xee, 0xfa, 0x5f, 0x82, 0x54, 0x99, 0x48, 0xb6, 0x30, 0xe2, 0x19, 0x80, 0x54, 0x2d, 0x59, 0xa0, 0x96, 0xc5, 0xb4, 0x5f, 0x25, 0xef, 0xf1, 0xbb, 0x1d, 0x28, 0x24, 0xc4, 0x58, 0xaf, 0x25, 0x46, 0x88, 0x43, 0x40, 0xa8, 0x82, 0x2e, 0x2e, 0x14, 0xdd, 0x82, 0x44, 0xd9, 0xbc, 0xa3, 0xeb, 0x0d, 0xe8, 0x05, 0x50, 0x76, 0x22, 0x37, 0x5d, 0xab, 0xb7, 0x21, 0xe7, 0x76, 0x54, 0x8a, 0x29, 0x7d, 0x1c, 0xdd, 0x71, 0x21, 0xf8, 0x2c, 0x19, 0xa7, 0x2e, 0x75, 0xb9, 0x95, 0x36, 0x24, 0x9b, 0x5f, 0xc9, 0xda, 0x6f, 0x43, 0x3a, 0x6d, 0x40, 0x72, 0x09, 0x30, 0xa7, 0x70, 0xb6, 0x74, 0x3f, 0xbd, 0xd3, 0x4e, 0x58, 0xb5, 0x5d, 0x9b, 0xf0, 0xb5, 0x4c, 0x42, 0xdf, 0x7f, 0x69, 0xb9, 0x51, 0xe0, 0x60, 0xcb, 0x79, 0x90, 0x16, 0x98, 0x84, 0x59, 0x3c, 0xdd, 0xcc, 0x7b, 0x25, 0x75, 0x4f, 0x50, 0xd4, 0x20, 0x5f, 0x2c, 0x5a, 0x84, 0x9b, 0x87, 0x5f, 0x71, 0x1d, 0x5e, 0xfe, 0x69, 0xf5, 0xd6, 0xd6, 0x60, 0xd6, 0x23, 0x5d, 0xc0, 0x10, 0xa8, 0x78, 0xb0, 0xbe, 0x5f, 0x49, 0x96, 0x41, 0x7c, 0x48, 0xda, 0xed, 0x4d, 0x96, 0xee, 0x01, 0x65, 0x8e, 0x8b, 0xdd, 0xf9, 0x9c, 0x3d, 0x6f, 0x8a, 0x52, 0x21, 0xef, 0xc4, 0xb8, 0xed, 0xcc, 0xa7, 0xe4, 0x32, 0xe6, 0xe4, 0xcb, 0xde, 0xfd, 0x8a, 0x57, 0x05, 0x69, 0xe1, 0xba, 0xe1, 0x0c, 0x96, 0x01, 0x17, 0x86, 0x19, 0xec, 0x3b, 0xa7, 0x44, 0xfd, 0x97, 0x2a, 0x3d, 0xcf, 0x28, 0xa0, 0x9d, 0xa9, 0xea, 0xaa, 0xd2, 0x53, 0x56, 0x6b, 0xc2, 0x28, 0x28, 0x3d, 0xb0, 0x6d, 0x65, 0xa3, 0x64, 0xe1, 0x9d, 0x80, 0x86, 0x95, 0x6d, 0x86, 0x4c, 0xfe, 0x49, 0xf0, 0x55, 0x49, 0x78, 0x74, 0xd4, 0xee, 0x60, 0x73, 0xf0, 0x88, 0x04, 0x74, 0x6b, 0xe4, 0xcb, 0xd0, 0x82, 0x58, 0x83, 0xae, 0x15, 0x56, 0xa5, 0x32, 0x08, 0x40, 0xdb, 0xf2, 0xe9, 0x7e, 0xbf, 0xaa, 0xd3, 0xcf, 0xe6, 0x30, 0x92, 0xdc, 0x1d, 0xaa, 0x07, 0x13, 0xf2, 0xfe, 0xce, 0xb2, 0x77, 0x8a, 0x1f, 0x22, 0x42, 0x16, 0xf2, 0x87, 0xb8, 0x06, 0x67, 0x95, 0x8c, 0xd4, 0x64, 0xa5, 0x82, 0xbe, 0x80, 0x08, 0x79, 0xbc, 0x20, 0x9b, 0xa8, 0xb5, 0xdf, 0x9b, 0x28, 0xf2, 0x34, 0xbb, 0xb2, 0xd3, 0x4f, 0x74, 0xab, 0xc1, 0x43, 0x9d, 0x5d, 0x63, 0x6a, 0x3b, 0x88, 0x15, 0x05, 0x9a, 0x19, 0x96, 0x24, 0x9d, 0x39, 0x00, 0xc6, 0x52, 0x89, 0xfe, 0x40, 0xc9, 0xac, 0x39, 0xe3, 0x27, 0x07, 0x13, 0xd9, 0xf6, 0xc4, 0x98, 0x50, 0xbf, 0x1d, 0xb1, 0xdb, 0xdb, 0xd7, 0x9b, 0x14, 0x86, 0x0c, 0x98, 0x87, 0x35, 0x2e, 0xe5, 0xcb, 0x2a, 0x49, 0xeb, 0xf2, 0x45, 0x88, 0xb9, 0x24, 0x1d, 0xfb, 0xb2, 0x86, 0x4f, 0x97, 0x83, 0x60, 0x16, 0x7f, 0x59, 0x80, 0x1c, 0x82, 0x50, 0xd9, 0x90, 0xe4, 0x2e, 0x70, 0x79, 0x61, 0x51, 0x79, 0x4a, 0x6f, 0xe6, 0xbc, 0xb6, 0xc4, 0x5c, 0x3e, 0xc5, 0x18, 0x18, 0x1e, 0x28, 0x2c, 0x6b, 0xbd, 0xca, 0x0b, 0xc1, 0x21, 0xa7, 0x8f, 0x1b, 0x9c, 0xe1, 0x28, 0xbf, 0xa8, 0x10, 0xd9, 0x2d, 0x16, 0xda, 0x83, 0x56, 0x68, 0xc5, 0x66, 0x09, 0x7b, 0x48, 0xe5, 0xae, 0x69, 0x28, 0x89, 0x36, 0xad, 0x02, 0x49, 0x52, 0x88, 0x23, 0x09, 0xe3, 0xa4, 0xa0, 0x60, 0xb2, 0xf8, 0xa4, 0x9e, 0x62, 0xeb, 0x04, 0x0e, 0xa3, 0xbc, 0x19, 0x78, 0xa8, 0x21, 0xce, 0xea, 0xda, 0x2e, 0xf8, 0xb8, 0xce, 0x79, 0xe6, 0xc2, 0x74, 0x7c, 0x39, 0xf5, 0x92, 0x3a, 0xf6, 0x15, 0x71, 0x26, 0xda, 0xb9, 0xd7, 0x40, 0xee, 0x97, 0x34, 0x81, 0x5b, 0x01, 0x20, 0x79, 0x7e, 0xb0, 0x05, 0x37, 0x3f, 0xc1, 0x19, 0x69, 0x9f, 0xfd, 0x90, 0xc4, 0x91, 0x5d, 0x0f, 0xa6, 0x0b, 0xcd, 0x63, 0xfa, 0x5c, 0x31, 0x73, 0x5d, 0xc0, 0xa6, 0x73, 0x7e, 0x32, 0x0a, 0x5b, 0xcb, 0x81, 0xbe, 0x98, 0x4a, 0xa6, 0xaa, 0x01, 0xc4, 0x55, 0x82, 0x0c, 0x29, 0xd2, 0x48, 0x42, 0x30, 0x06, 0x13, 0xf0, 0x3e, 0xd2, 0x0e, 0x20, 0x89, 0xa3, 0xc3, 0xc7, 0x7d, 0x47, 0x9a, 0x40, 0x5f, 0xff, 0x9c, 0xf9, 0x30, 0xd5, 0x7d, 0x6d, 0xd4, 0x2f, 0xda, 0x52, 0x73, 0xa5, 0xbf, 0x13, 0x20, 0x10, 0x6c, 0x80, 0xb8, 0xe3, 0x59, 0xc5, 0x0d, 0xbf, 0x77, 0x98, 0x44, 0x41, 0xb9, 0xb7, 0x7c, 0x1f, 0xd3, 0x92, 0xb1, 0x73, 0x42, 0x44, 0xdf, 0x56, 0x8c, 0xc8, 0x6a, 0xb1, 0xc9, 0x6a, 0xbd, 0x50, 0x62, 0x7b, 0x31, 0x38, 0x19, 0x49, 0x31, 0x3b, 0x49, 0x4f, 0x9d, 0xc9, 0x6f, 0xa8, 0x6b, 0x09, 0xea, 0xca, 0x94, 0x28, 0xff, 0x70, 0x2e, 0xf2, 0x20, 0xd8, 0xd5, 0x9f, 0x6e, 0x2f, 0x50, 0xef, 0x7c, 0x4a, 0x72, 0x79, 0x56, 0x96, 0x3d, 0x3f, 0xc2, 0x52, 0x4e, 0x87, 0xc5, 0xfb, 0x75, 0xe6, 0x69, 0x08, 0xa3, 0x9e, 0xbe, 0xd8, 0x09, 0x2a, 0x1f, 0xe9, 0x7e, 0x16, 0xb6, 0x4a, 0x21, 0x14, 0x43, 0x53, 0x40, 0x4d, 0x18, 0x93, 0x79, 0xf5, 0x68, 0x0a, 0x1f, 0x22, 0xc2, 0x98, 0xe0, 0xde, 0xd9, 0xb6, 0xa4, 0x7a, 0x86, 0x64, 0xb7, 0x26, 0x10, 0x62, 0x2b, 0xbf, 0xaa, 0xa3, 0x78, 0xe8, 0x3d, 0xff, 0x66, 0x5c, 0x68, 0x28, 0x2d, 0x83, 0xc6, 0xdf, 0xda, 0x43, 0x6f, 0x68, 0xf4, 0x18, 0xc1, 0x3b, 0x60, 0x67, 0x60, 0xfc, 0x82, 0x0f, 0x7b, 0xad, 0xa5, 0x42, 0x51, 0x23, 0x9d, 0x93, 0xf4, 0xb6, 0xaa, 0x4f, 0x4d, 0x3d, 0xa0, 0x11, 0x61, 0x3a, 0x45, 0x91, 0xd2, 0x51, 0xfb, 0xbd, 0xa9, 0xff, 0x9f, 0x0b, 0x52, 0x88, 0xb0, 0x0d, 0xe8, 0x31, 0xb4, 0x46, 0xb4, 0xb0, 0xd7, 0x3c, 0xf0, 0xe1, 0xd6, 0xce, 0xd0, 0xba, 0x1b, 0xc8, 0xc3, 0x81, 0x2a, 0xb5, 0xf6, 0x3c, 0x3b, 0xf4, 0x19, 0x6a, 0x28, 0x0e, 0x67, 0xf0, 0x8a, 0x47, 0xe0, 0x56, 0x1f, 0x73, 0xd9, 0x33, 0x70, 0x0b, 0xb7, 0xe6, 0xb0, 0x80, 0xf8, 0x87, 0xe6, 0xcf, 0x73, 0x1e, 0x4f, 0x56, 0xe0, 0x12, 0xfd, 0xe6, 0x9a, 0xe4, 0xc5, 0x19, 0xa4, 0x1c, 0x58, 0xe6, 0xea, 0x84, 0xb0, 0x72, 0xca, 0x95, 0xae, 0x29, 0xd3, 0x2f, 0x01, 0x0e, 0xcd, 0x8d, 0x49, 0x4f, 0xf9, 0x77, 0x7c, 0x1d, 0x9a, 0xb9, 0x89, 0xba, 0xb3, 0xd5, 0x3c, 0xd4, 0x13, 0xf5, 0x62, 0x11, 0x8f, 0x23, 0x2d, 0xeb, 0x8f, 0xbc, 0xda, 0xbe, 0xcc, 0x22, 0x90, 0x1f, 0x57, 0xb2, 0x8c, 0x70, 0xde, 0xf6, 0x7b, 0xb1, 0x2b, 0x1b, 0x27, 0x99, 0xed, 0xa5, 0x56, 0xe6, 0xbb, 0x61, 0xef, 0xf1, 0x56, 0x9b, 0x5f, 0x85, 0x2e, 0x92, 0x3b, 0xf1, 0x28, 0x29, 0x27, 0x5c, 0x9f, 0xdf, 0xf6, 0x59, 0xa9, 0x01, 0x13, 0xbc, 0x9b, 0x1f, 0x1f, 0xab, 0xcf, 0xbc, 0xdb, 0xf8, 0xa4, 0x49, 0x49, 0xae, 0xc7, 0x55, 0x0e, 0xe9, 0xb1, 0xfe, 0x1b, 0xeb, 0x71, 0xab, 0x8c, 0x6d, 0xac, 0xfd, 0xd0, 0x33, 0xe2, 0x02, 0x0b, 0xe3, 0xf2, 0xac, 0xb8, 0x17, 0xe1, 0x82, 0x93, 0xb1, 0xd7, 0x96, 0xb6, 0x6f, 0x6a, 0xb7, 0x02, 0xbf, 0x1f, 0xe7, 0xc0, 0xd4, 0x2e, 0x10, 0x88, 0xf9, 0x86, 0xf2, 0x62, 0x25, 0x11, 0x60, 0x2c, 0xd0, 0x39, 0xac, 0x3c, 0x06, 0xab, 0x60, 0x46, 0xba, 0x5b, 0x2e, 0x7f, 0x5c, 0xc8, 0x2a, 0x02, 0xae, 0x81, 0x37, 0x73, 0xd3, 0xe8, 0xbf, 0xe3, 0xa8, 0x36, 0xa8, 0xf4, 0x58, 0xbf, 0x83, 0x3e, 0x2b, 0x78, 0x06, 0xf1, 0x9f, 0xb6, 0xbc, 0xbb, 0xba, 0x38, 0xfb, 0xec, 0x9e, 0x68, 0x17, 0xd8, 0x5e, 0xde, 0xd5, 0x7c, 0x10, 0x26, 0x22, 0x65, 0x24, 0xc3, 0x05, 0xce, 0xf4, 0x73, 0xd3, 0x09, 0x9b, 0xb5, 0xa2, 0x20, 0x0b, 0x89, 0xff, 0xbb, 0x5a, 0x77, 0xe4, 0x44, 0x5d, 0xd2, 0xe4, 0x4a, 0x78, 0x3e, 0xa9, 0x23, 0xb4, 0x70, 0xa0, 0xd6, 0x12, 0x35, 0xf3, 0x38, 0x20, 0xb6, 0xb8, 0x54, 0xc9, 0xfa, 0x68, 0x10, 0x71, 0xac, 0x92, 0x0e, 0x42, 0x1f, 0xd0, 0xd1, 0xc0, 0x8f, 0xfb, 0x21, 0xa4, 0xaa, 0x9b, 0xb0, 0xe7, 0x4e, 0xa1, 0xfd, 0x1d, 0x95, 0x59, 0x79, 0x04, 0x0f, 0x9a, 0xe9, 0x5d, 0x4e, 0x40, 0x0b, 0xfa, 0xa8, 0xdb, 0x7c, 0x19, 0x38, 0xa9, 0xd9, 0xf0, 0x26, 0xc2, 0x24, 0x89, 0x28, 0x93, 0x6a, 0xd0, 0x49, 0x8d, 0xa3, 0xeb, 0xea, 0x1e, 0xda, 0xc9, 0x06, 0xe1, 0x8e, 0xfe, 0xba, 0x12, 0x57, 0xce, 0x04, 0x44, 0xcd, 0x87, 0xcb, 0x56, 0xa5, 0x15, 0x1f, 0xa3, 0x1d, 0xd0, 0xc3, 0x79, 0x9b, 0x98, 0xe8, 0xcd, 0x90, 0x24, 0x3c, 0x2c, 0xa3, 0x97, 0x23, 0xf5, 0x0c, 0x54, 0x44, 0xc6, 0x3d, 0x14, 0x48, 0x34, 0xc8, 0x36, 0xde, 0xbf, 0x7d, 0x56, 0x03, 0x04, 0xd2, 0x20, 0x80, 0x35, 0x89, 0x66, 0xb4, 0xc7, 0x8c, 0x71, 0x93, 0x6a, 0x1c, 0x95, 0xef, 0x3e, 0x2a, 0x08, 0xf7, 0x44, 0x05, 0xf5, 0xfd, 0x13, 0x36, 0xcb, 0x7c, 0xcc, 0xa8, 0xdb, 0x59, 0x4f, 0x0d, 0x22, 0x69, 0xaf, 0x7c, 0x63, 0x34, 0xe4, 0x5f, 0x7a, 0xf8, 0xc0, 0x8c, 0xec, 0xf1, 0x25, 0xb2, 0xc2, 0xd8, 0x74, 0xf7, 0x98, 0xaa, 0x48, 0xdf, 0xf1, 0xaa, 0x65, 0x70, 0xcd, 0xa9, 0xeb, 0x94, 0x7e, 0x85, 0xd0, 0xbe, 0xb7, 0xf0, 0x8c, 0xd0, 0xe6, 0x72, 0x16, 0x3d, 0xc3, 0xb1, 0x10, 0x6a, 0x29, 0xf1, 0x3e, 0x5b, 0x26, 0xd7, 0x3d, 0x8b, 0x4e, 0x72, 0x72, 0x1b, 0x54, 0x7c, 0x40, 0x2f, 0xdb, 0xdc, 0x7e, 0x96, 0x89, 0x70, 0x28, 0xa9, 0x5d, 0x0a, 0x54, 0x75, 0x43, 0xb8, 0x68, 0x1c, 0xe6, 0x49, 0x8b, 0x78, 0xc6, 0x0c, 0x59, 0x02, 0x8a, 0xdb, 0xdb, 0xf2, 0x97, 0x58, 0xb6, 0xa8, 0xe1, 0x77, 0xa2, 0x4b, 0x01, 0x3d, 0x1e, 0xb0, 0x89, 0xc7, 0x63, 0x7d, 0x94, 0x8d, 0x96, 0x8e, 0xa1, 0xe8, 0x41, 0x97, 0xa1, 0xd2, 0x04, 0x0b, 0x4e, 0xed, 0x88, 0x3d, 0xbf, 0xc8, 0xb5, 0xc6, 0x39, 0x5d, 0x25, 0x26, 0x49, 0xde, 0xd8, 0xae, 0x0f, 0xb1, 0x29, 0x9d, 0xdd, 0xb9, 0x00, 0x89, 0x01, 0xd7, 0x4a, 0x00, 0xde, 0xb0, 0xa6, 0x70, 0x42, 0xb1, 0x61, 0x44, 0xf3, 0x51, 0xa5, 0x50, 0x8b, 0x96, 0xed, 0x6f, 0x86, 0xdb, 0xbc, 0x6a, 0x9a, 0xd0, 0x8f, 0x1c, 0x47, 0xc2, 0x10, 0xd4, 0xae, 0x1d, 0x8c, 0xfb, 0xa6, 0x2f, 0xa7, 0xf7, 0x0d, 0x2e, 0x4f, 0x4e, 0x5c, 0x7d, 0xee, 0x0f, 0x7e, 0x2b, 0xe4, 0x6e, 0xe3, 0xbd, 0x34, 0xae, 0xd0, 0x2d, 0x7d, 0x44, 0xf9, 0x32, 0x2d, 0x39, 0x51, 0xc2, 0xf1, 0xd0, 0x21, 0xd5, 0x70, 0x69, 0x57, 0x6d, 0x38, 0xa5, 0x21, 0xd3, 0xf8, 0xcb, 0xbb, 0x23, 0xf1, 0x6a, 0x86, 0x0a, 0xa7, 0x40, 0x59, 0xcf, 0xdc, 0x5b, 0x1b, 0x90, 0xbe, 0x7e, 0x92, 0xcf, 0x60, 0xc6, 0x76, 0x2d, 0x67, 0x8d, 0xca, 0x74, 0x06, 0x8f, 0x6c, 0xdb, 0x2c, 0x4b, 0xea, 0x86, 0xfb, 0xad, 0x97, 0x4d, 0x7d, 0xe9, 0xde, 0xbe, 0x92, 0xaa, 0xd7, 0x65, 0x2d, 0x6c, 0x18, 0x4b, 0xc0, 0x26, 0xce, 0xbc, 0xf5, 0x2d, 0x0c, 0x4d, 0x9f, 0x55, 0x62, 0x1e, 0xf0, 0x59, 0xb2, 0x5d, 0xec, 0x7d, 0x3f, 0x0b, 0x1d, 0x71, 0x07, 0x03, 0x89, 0x79, 0x53, 0x38, 0xe1, 0xcb, 0x8c, 0x3e, 0xfb, 0x38, 0x50, 0x0c, 0x82, 0x0f, 0xc5, 0x00, 0xed, 0x3f, 0x2d, 0x23, 0xad, 0xbb, 0xbb, 0xaf, 0xab, 0x23, 0xa5, 0xce, 0xf1, 0xa0, 0x7b, 0xa5, 0xa7, 0x10, 0xb7, 0x91, 0x42, 0x63, 0x95, 0xb0, 0xf8, 0x44, 0x25, 0xa4, 0x77, 0xfc, 0x9e, 0x93, 0xd6, 0x94, 0xf5, 0x72, 0xcc, 0x3a, 0xae, 0x84, 0x20, 0xe7, 0xf3, 0x1d, 0x60, 0x3e, 0xe3, 0xac, 0xd6, 0xb6, 0x2c, 0xf8, 0xb8, 0xfb, 0xdc, 0xaa, 0x9f, 0x92, 0x74, 0x0c, 0x3a, 0xbc, 0x3e, 0x10, 0x44, 0x9e, 0xe1, 0x94, 0xb3, 0x9e, 0x33, 0xe4, 0x33, 0x10, 0x4e, 0x81, 0xd2, 0x12, 0xe6, 0x21, 0xfd, 0xb4, 0xda, 0xf6, 0xab, 0x5d, 0x08, 0x33, 0xd8, 0x6a, 0x66, 0xcd, 0x35, 0x17, 0x4f, 0x7e, 0x1e, 0xa3, 0x1a, 0x10, 0xcc, 0xaf, 0xf1, 0xd8, 0xcc, 0xe8, 0xe0, 0x81, 0xaf, 0xe5, 0x2d, 0x0b, 0x04, 0x52, 0xe8, 0x12, 0x83, 0x4f, 0xc2, 0x54, 0x8b, 0x13, 0x23, 0x6e, 0xcf, 0xd5, 0x76, 0xe6, 0x4c, 0xec, 0xc8, 0x6e, 0x7e, 0x35, 0x91, 0x67, 0xd3, 0xb5, 0xd1, 0xa5, 0x60, 0x7f, 0x5f, 0x72, 0xd2, 0xd8, 0x7e, 0xd5, 0xa8, 0x9a, 0xb2, 0x14, 0xa0, 0xd6, 0xd2, 0x77, 0x6f, 0xbd, 0x5d, 0x4f, 0xb5, 0xc1, 0x11, 0x37, 0x30, 0xf7, 0xba, 0x9a, 0x30, 0xc0, 0x49, 0x75, 0x4b, 0xa8, 0x25, 0x5e, 0x51, 0x8e, 0xc6, 0xc6, 0x83, 0x06, 0x7f, 0x7b, 0xff, 0xfb, 0x9b, 0x70, 0x7f, 0x99, 0xac, 0xc1, 0x43, 0x69, 0x20, 0xf2, 0x4c, 0xbe, 0x15, 0x78, 0xcb, 0x51, 0x6f, 0x7a, 0xd9, 0x28, 0x27, 0xd8, 0x68, 0xbc, 0xe5, 0x6d, 0x7a, 0x5a, 0xd2, 0x91, 0x91, 0xca, 0xa7, 0xe2, 0x66, 0x2f, 0x0b, 0x45, 0xdd, 0x2e, 0x1b, 0x27, 0x39, 0x52, 0x4a, 0x09, 0x8c, 0xaf, 0x6b, 0x3b, 0x72, 0xc6, 0x0c, 0xe7, 0xff, 0xa9, 0x06, 0x52, 0xf6, 0x60, 0x52, 0x5f, 0x3c, 0x8a, 0x1e, 0x55, 0x8c, 0x47, 0x20, 0xe1, 0x6b, 0x56, 0x2b, 0x5f, 0x5f, 0x7b, 0x00, 0x55, 0x5c, 0x24, 0x66, 0x40, 0x7f, 0x4b, 0x7d, 0x94, 0xff, 0x9e, 0x4f, 0xfe, 0x60, 0xde, 0xa8, 0xec, 0xe9, 0x85, 0x28, 0x4f, 0x59, 0xab, 0x96, 0x9f, 0xd6, 0x2a, 0x77, 0x20, 0x26, 0x01, 0xdf, 0x65, 0x21, 0xf6, 0x88, 0x12, 0x66, 0x80, 0x21, 0xe6, 0x4e, 0xe3, 0xe8, 0xf8, 0x1e, 0x9d, 0x7b, 0x40, 0x81, 0x01, 0xeb, 0x5a, 0x35, 0x22, 0x13, 0x87, 0x04, 0xf2, 0x28, 0xf5, 0xf6, 0xab, 0x91, 0x40, 0xc5, 0x6e, 0xf8, 0x38, 0x91, 0x2a, 0xa1, 0xe5, 0xd5, 0xc0, 0xfa, 0xc8, 0x9a, 0x65, 0x74, 0x64, 0xea, 0x47, 0x92, 0xfd, 0x88, 0x73, 0x3f, 0xa0, 0xde, 0xf6, 0x65, 0x63, 0x37, 0x42, 0xbb, 0xee, 0x2e, 0xd4, 0xdf, 0x3a, 0x66, 0x14, 0xa4, 0x99, 0x7c, 0x7d, 0xad, 0xf7, 0x3a, 0xfd, 0x3b, 0x5f, 0x0e, 0x9f, 0x43, 0xc1, 0xba, 0x67, 0xc4, 0xf2, 0x4c, 0x7d, 0x57, 0xf4, 0x51, 0x8f, 0x08, 0x78, 0x46, 0x70, 0x64, 0xa1, 0x4f, 0x05, 0xd3, 0x0b, 0x2c, 0x61, 0x28, 0x0c, 0x68, 0x2f, 0x77, 0x39, 0xd3, 0x50, 0x26, 0x2c, 0x33, 0xc6, 0x47, 0x85, 0x37, 0xd1, 0x25, 0x2f, 0xac, 0x57, 0x1d, 0xe5, 0xf3, 0x89, 0xb0, 0xf4, 0xb3, 0xc4, 0xd6, 0x42, 0xcb, 0xb5, 0x94, 0x8f, 0x8b, 0xc1, 0xd0, 0xfb, 0x23, 0xa4, 0x65, 0xc8, 0x5b, 0x58, 0x73, 0x62, 0x85, 0x38, 0xf8, 0x9c, 0xb0, 0x65, 0xa5, 0x3d, 0x1f, 0x69, 0xea, 0xbb, 0xfa, 0x1a, 0x54, 0x46, 0x42, 0xc1, 0x18, 0x08, 0x0a, 0x7c, 0xf0, 0xac, 0xe5, 0xe1, 0x25, 0x1d, 0x9b, 0xe4, 0xed, 0x90, 0x20, 0xfb, 0xf8, 0xc4, 0xc6, 0x80, 0x46, 0x88, 0xb1, 0x56, 0x3b, 0x7f, 0x8b, 0xcf, 0xf5, 0x20, 0x7a, 0xcd, 0xdd, 0x00, 0x4f, 0x28, 0x7c, 0x54, 0x01, 0x50, 0x91, 0xb1, 0x59, 0x34, 0x60, 0x17, 0xee, 0x62, 0x4c, 0x2e, 0x54, 0x6f, 0xa8, 0xcf, 0x91, 0x99, 0xcb, 0xc6, 0xd0, 0xab, 0x62, 0xd7, 0x5a, 0x21, 0x0b, 0xff, 0xc1, 0x8d, 0x1f, 0xfb, 0x5e, 0x39, 0xce, 0x0f, 0xfe, 0x0e, 0x72, 0x00, 0xd9, 0xb4, 0x1d, 0x62, 0xc4, 0xfb, 0x74, 0x1a, 0xa7, 0x7a, 0xc1, 0x1b, 0x30, 0x76, 0x43, 0x73, 0xc9, 0x05, 0xc9, 0x8b, 0xc8, 0x72, 0x7f, 0xaa, 0xe6, 0xe4, 0x07, 0xbc, 0xf3, 0x3b, 0xcb, 0x52, 0xc8, 0x3b, 0x92, 0xe9, 0x7c, 0xec, 0x52, 0x6f, 0xdb, 0x40, 0x45, 0x03, 0x13, 0xf7, 0x3f, 0xfd, 0xb1, 0xc0, 0x3f, 0x2e, 0xcc, 0xa1, 0x44, 0x69, 0x80, 0x98, 0x62, 0x41, 0x9f, 0x83, 0x14, 0x15, 0xa2, 0x3d, 0xd4, 0x4a, 0xe6, 0x0a, 0xe9, 0xd8, 0x15, 0x35, 0x81, 0x08, 0xe1, 0xf7, 0xff, 0x7c, 0xf9, 0x9b, 0x96, 0x6f, 0x35, 0xe0, 0x17, 0x3e, 0x14, 0x9f, 0x07, 0x27, 0x69, 0xad, 0xf5, 0x51, 0x51, 0x03, 0x0a, 0x0d, 0x68, 0x1c, 0xe2, 0x5c, 0x3d, 0x9f, 0x9a, 0xb1, 0x03, 0x3e, 0x2b, 0xf8, 0x89, 0xde, 0xf6, 0xd6, 0x6c, 0xf8, 0xa0, 0x33, 0x8b, 0x3f, 0x1f, 0xf6, 0xbb, 0x83, 0x15, 0x0f, 0xbc, 0xd5, 0x5d, 0xbb, 0x6c, 0xec, 0xe4, 0x03, 0x3b, 0xc7, 0xbb, 0x86, 0xdf, 0x94, 0x6a, 0x79, 0x49, 0xd1, 0x86, 0xec, 0xd7, 0xb1, 0x86, 0x4f, 0xcb, 0xc1, 0xd2, 0x34, 0xfc, 0xcb, 0x1d, 0x57, 0xcb, 0xfa, 0xf5, 0xdb, 0x59, 0x40, 0x98, 0xd6, 0xf7, 0xf5, 0x0a, 0x10, 0xde, 0xc1, 0x64, 0x08, 0x21, 0xbb, 0x6f, 0x38, 0xdf, 0xd2, 0x71, 0x9a, 0xbd, 0x6d, 0x47, 0x6b, 0x93, 0x4e, 0xb4, 0x2f, 0x66, 0xbc, 0xf9, 0xf5, 0x97, 0xe1, 0xa6, 0xdc, 0x59, 0x71, 0xaf, 0xd6, 0x68, 0x8c, 0xc2, 0xac, 0xf9, 0xe6, 0xd8, 0x43, 0xec, 0x25, 0x0b, 0x1d, 0x49, 0x8a, 0xa7, 0x22, 0xea, 0xd4, 0x83, 0xa1, 0x75, 0x61, 0x92, 0x92, 0x8e, 0x97, 0xb5, 0x1e, 0x4a, 0x82, 0xd3, 0x61, 0xe6, 0xbe, 0x2c, 0x6e, 0xb9, 0x98, 0xea, 0x93, 0x67, 0x70, 0xf9, 0xdf, 0x58, 0x62, 0x19, 0xe2, 0x68, 0x25, 0x32, 0xb4, 0xe0, 0x32, 0xe7, 0x39, 0xa6, 0x29, 0x6d, 0xa2, 0xb0, 0x71, 0x9e, 0x37, 0xbe, 0x1f, 0x49, 0x54, 0x49, 0x1a, 0xcd, 0xb2, 0xb6, 0x7c, 0xe6, 0xe8, 0xd0, 0x3b, 0xc6, 0x32, 0x75, 0x08, 0x68, 0x70, 0x8f, 0x77, 0x21, 0x72, 0x47, 0x61, 0x78, 0x72, 0x75, 0x87, 0x37, 0xe2, 0x5a, 0x77, 0xc2, 0x69, 0x91, 0xb4, 0xa8, 0x28, 0x43, 0x11, 0x78, 0x41, 0x9b, 0x5e, 0xd6, 0x9a, 0x79, 0x46, 0xcd, 0xde, 0x6b, 0x78, 0x67, 0xc5, 0xd9, 0x05, 0x7b, 0x96, 0x7f, 0x09, 0xc7, 0xea, 0x20, 0x8e, 0x3e, 0xb2, 0x79, 0xad, 0xa3, 0x7b, 0x75, 0xf6, 0x57, 0xf1, 0x9f, 0x13, 0x70, 0xa2, 0xdc, 0xa7, 0x0a, 0x05, 0x5a, 0x7c, 0xe2, 0xbb, 0xc4, 0xde, 0x21, 0x14, 0xb8, 0x42, 0x75, 0xd5, 0x7a, 0x2c, 0x66, 0x39, 0xea, 0x4f, 0xe8, 0x35, 0xb3, 0xf5, 0x2c, 0x00, 0xc6, 0xa1, 0xbc, 0xd3, 0x07, 0xf3, 0xc7, 0xee, 0x45, 0xcd, 0xb9, 0xdb, 0x70, 0xb4, 0x0f, 0xf6, 0x06, 0x79, 0x6a, 0x2d, 0xcf, 0x18, 0xe2, 0x05, 0xca, 0xe0, 0x9c, 0xdd, 0x67, 0xd4, 0x9f, 0x77, 0xf6, 0x52, 0xe3, 0xb4, 0x60, 0xf2, 0xab, 0x9f, 0x15, 0xb1, 0x15, 0xad, 0x45, 0x4f, 0xf0, 0x44, 0x53, 0xf5, 0xcd, 0x79, 0x87, 0x1b, 0x59, 0x1e, 0x03, 0xa9, 0xea, 0xfc, 0xf8, 0x5c, 0x57, 0x5d, 0x19, 0x6c, 0x0d, 0xce, 0x50, 0x6c, 0x5f, 0x22, 0xb0, 0x71, 0x1e, 0xba, 0xac, 0x76, 0x6a, 0x04, 0x86, 0xff, 0xc7, 0x42, 0x0a, 0xfd, 0x74, 0x8d, 0x7b, 0xf2, 0xf8, 0x19, 0xce, 0x55, 0xfd, 0xba, 0x16, 0x38, 0x61, 0xa7, 0x40, 0x28, 0x8b, 0x7f, 0x00, 0x55, 0xfb, 0x89, 0x0b, 0xf3, 0x25, 0x40, 0x87, 0xdf, 0x80, 0x0f, 0xbf, 0x86, 0xda, 0x59, 0x1c, 0x03, 0xee, 0xbc, 0x51, 0x87, 0x38, 0x97, 0xd5, 0xfe, 0x08, 0xc9, 0x96, 0xef, 0xd6, 0xbc, 0xec, 0xa4, 0xd5, 0xa3, 0xcb, 0x8c, 0xca, 0xff, 0x3e, 0xdd, 0x1f, 0x68, 0x10, 0x7d, 0x33, 0x8a, 0xcc, 0x23, 0xf5, 0x6e, 0xe9, 0xba, 0xb1, 0xfb, 0x3e, 0x06, 0x2a, 0xbc, 0xbc, 0x89, 0xe8, 0xe3, 0x5b, 0xa8, 0xd3, 0x8e, 0x55, 0x0a, 0x01, 0x4a, 0x93, 0x41, 0xcd, 0xd5, 0x64, 0xac, 0x29, 0x29, 0x75, 0x9b, 0x35, 0xb5, 0xfe, 0xb5, 0x10, 0xee, 0x39, 0x97, 0xed, 0x06, 0x18, 0xbe, 0x6a, 0xfb, 0x37, 0xa7, 0x1e, 0xd4, 0x10, 0x34, 0x71, 0x28, 0x6e, 0x52, 0xb1, 0xdf, 0x24, 0xd9, 0x62, 0x3c, 0xfe, 0xb4, 0xd5, 0x1c, 0xf8, 0x41, 0xfc, 0x78, 0xae, 0xfa, 0x7c, 0x31, 0x14, 0x56, 0x04, 0x0d, 0x67, 0xea, 0xdd, 0xfc, 0x63, 0xd4, 0xc3, 0xa1, 0xb7, 0x59, 0xf4, 0x0d, 0xb6, 0xcd, 0x86, 0xce, 0x4f, 0xb3, 0xfd, 0x28, 0x3f, 0x26, 0x1d, 0xa2, 0x85, 0x78, 0xfd, 0xc5, 0x16, 0x18, 0x5d, 0x20, 0xd3, 0xb9, 0x39, 0x8f, 0xb8, 0xb0, 0x9f, 0xbd, 0x56, 0x9e, 0xbd, 0xe8, 0x83, 0x50, 0x3e, 0xe4, 0x50, 0xe3, 0xd7, 0x63, 0x3b, 0x2c, 0x1c, 0x73, 0xa6, 0x57, 0x99, 0x48, 0x88, 0xcd, 0x1e, 0x3c, 0x63, 0x5c, 0x5a, 0x14, 0x76, 0x92, 0xab, 0x85, 0x33, 0x69, 0x35, 0xf7, 0xf3, 0x2a, 0x32, 0x88, 0xe9, 0x8b, 0x88, 0x54, 0x54, 0x1a, 0xa1, 0xf4, 0xf9, 0xdf, 0x77, 0x44, 0xd1, 0x3d, 0xee, 0x69, 0xff, 0x1a, 0x67, 0x13, 0x04, 0x40, 0x92, 0x00, 0x36, 0x02, 0x83, 0xc2, 0x6f, 0x22, 0x09, 0xc1, 0x02, 0xf2, 0x3b, 0x83, 0xf3, 0xba, 0x53, 0x2b, 0x67, 0x5a, 0xc0, 0x40, 0x59, 0x30, 0x76, 0xb0, 0x8f, 0x3c, 0x89, 0x15, 0xcc, 0x82, 0xfa, 0x36, 0x48, 0xb0, 0xd1, 0xd1, 0x5d, 0x01, 0x6b, 0x98, 0x83, 0x61, 0x16, 0x79, 0x7e, 0xd2, 0xdb, 0x22, 0xd6, 0x0e, 0x9b, 0xc5, 0x88, 0x6e, 0x5e, 0x18, 0xfb, 0x0a, 0xe7, 0xa1, 0x35, 0x22, 0x8c, 0x30, 0x4f, 0xbd, 0x44, 0xad, 0x26, 0x8f, 0x02, 0x13, 0x54, 0x20, 0x41, 0xbd, 0x5f, 0x2b, 0xe0, 0xe1, 0x2f, 0x44, 0x31, 0x5a, 0xc6, 0xbe, 0x4d, 0xaa, 0x2b, 0xcc, 0xaa, 0x3f, 0xa7, 0xe6, 0xef, 0xf5, 0x34, 0x6f, 0x06, 0xdd, 0x33, 0x94, 0x73, 0x3d, 0x5d, 0x77, 0xe5, 0xd7, 0xfc, 0x8d, 0x0b, 0x6e, 0x5b, 0x44, 0xa9, 0x87, 0x7b, 0xea, 0xeb, 0x6d, 0x07, 0xca, 0xf9, 0x77, 0x8a, 0x98, 0xcb, 0x8d, 0xe0, 0x0f, 0x3f, 0xe9, 0xeb, 0xd8, 0x69, 0x1b, 0x87, 0xae, 0x2a, 0x50, 0xbf, 0xc0, 0x04, 0xd3, 0x41, 0x56, 0x2c, 0xd4, 0x0f, 0xb8, 0xe1, 0x69, 0x78, 0x4c, 0xfd, 0xd2, 0x47, 0xfe, 0xca, 0x01, 0x3a, 0xe4, 0x16, 0x5a, 0xb5, 0x22, 0x8a, 0xb7, 0xb8, 0x0c, 0x37, 0xaf, 0x0f, 0x8b, 0x72, 0x18, 0xc8, 0xc2, 0xe2, 0xca, 0xea, 0xf1, 0xd7, 0xa6, 0x64, 0x99, 0xdd, 0xd7, 0x44, 0xe1, 0x92, 0x58, 0x29, 0x38, 0xb4, 0xb6, 0xfb, 0x3c, 0x7e, 0x18, 0xd9, 0xda, 0x35, 0x7c, 0x53, 0xb7, 0xfe, 0x43, 0xda, 0xcf, 0xf2, 0xf0, 0x74, 0x5d, 0x74, 0x2d, 0xb5, 0xfa, 0xc2, 0x0f, 0xea, 0x08, 0xcb, 0x9a, 0x97, 0x51, 0x41, 0x88, 0x24, 0xec, 0xee, 0x46, 0xd3, 0x61, 0x4b, 0x40, 0xf5, 0x0c, 0x4f, 0x5e, 0x5e, 0xc7, 0x85, 0xce, 0x16, 0xc3, 0x61, 0x05, 0x51, 0xb7, 0xd4, 0x00, 0xa1, 0x3d, 0x1e, 0xd0, 0x6b, 0x78, 0xe4, 0x55, 0x98, 0xfb, 0x82, 0x4a, 0x8c, 0xe6, 0xa2, 0x81, 0x5c, 0x52, 0x0e, 0x70, 0x3b, 0xf0, 0xc2, 0xed, 0x36, 0xec, 0x46, 0x36, 0x22, 0x18, 0x3a, 0x34, 0xd2, 0x46, 0x32, 0x01, 0x8d, 0xf5, 0xc5, 0xa7, 0xbe, 0x31, 0xe1, 0x2b, 0xee, 0xb4, 0x61, 0xca, 0xf0, 0x51, 0xe2, 0x82, 0x5b, 0x93, 0xd2, 0xd4, 0x3e, 0xa1, 0xc9, 0xc9, 0x0e, 0x64, 0x1d, 0x33, 0xe3, 0xec, 0xb1, 0x35, 0xe4, 0x10, 0x0d, 0x05, 0x00, 0x55, 0xb4, 0xf1, 0xe0, 0x12, 0xb1, 0xa0, 0x19, 0xd1, 0x74, 0x9b, 0xa5, 0xf7, 0xdc, 0x0b, 0x94, 0xa8, 0x95, 0xc5, 0xff, 0xe5, 0xa4, 0x83, 0x3e, 0xf7 ],
-const [ 0x9b, 0x5f, 0x37, 0xf5, 0xdc, 0xed, 0xd9, 0x6d, 0x9b, 0x7f, 0xf6, 0xd8, 0x52, 0xb7, 0x7e, 0xf9, 0x04, 0x98, 0x31, 0x1d, 0x24, 0xdf, 0xa9, 0x06, 0xb2, 0x97, 0x9b, 0x28, 0xa7, 0xe8, 0x5a, 0x18, 0x93, 0x30, 0x9c, 0x41, 0x85, 0x55, 0x81, 0xd9, 0x2b, 0x59, 0xd1, 0x13, 0x3a, 0x2e, 0x85, 0x96, 0x10, 0xcc, 0x8a, 0x2f, 0x99, 0x82, 0xc1, 0xc2, 0x6f, 0x89, 0x4a, 0x87, 0x45, 0xdf, 0x02, 0x72, 0x85, 0x52, 0x4a, 0xf3, 0x38, 0xdb, 0x0b, 0xe0, 0x27, 0x2e, 0xf7, 0xb0, 0x3f, 0x8f, 0x11, 0xe9, 0x3a, 0xe7, 0x6f, 0xdb, 0x7c, 0x17, 0x3e, 0x8f, 0x3b, 0x8c, 0x08, 0xfb, 0xe3, 0x14, 0x32, 0x77, 0xb9, 0xf0, 0xc9, 0x75, 0xbe, 0x2a, 0x7e, 0x6c, 0xd6, 0x29, 0xee, 0x15, 0x29, 0x82, 0x27, 0xda, 0xca, 0x11, 0x68, 0x8c, 0x97, 0x49, 0x29, 0x54, 0x60, 0xc8, 0x5b, 0xec, 0x4b, 0x2e, 0xf1, 0x0e, 0x76, 0x30, 0x9f, 0x2d, 0xdf, 0xe8, 0xe2, 0x64, 0x81, 0x6f, 0x40, 0xac, 0xc0, 0xae, 0xd1, 0x51, 0x07, 0x71, 0xfe, 0xa7, 0xb0, 0xbd, 0x89, 0xf9, 0x24, 0x64, 0xce, 0xc2, 0x43, 0xd6, 0x48, 0x1f, 0x06, 0x3a, 0x56, 0x85, 0x62, 0xbe, 0x3f, 0xaf, 0x70, 0x2b, 0x74, 0xdb, 0xcc, 0xbc, 0x16, 0x36, 0x3b, 0x30, 0xb8, 0x95, 0x90, 0x1e, 0x66, 0x65, 0xd0, 0x89, 0xe6, 0xe5, 0x94, 0xb4, 0x3d, 0x93, 0xaf, 0x37, 0x76, 0xe3, 0x11, 0x53, 0x9e, 0x37, 0xeb, 0x83, 0x13, 0x0c, 0x14, 0x53, 0xff, 0x71, 0xac, 0x75, 0x1f, 0xbe, 0xff, 0x12, 0xc9, 0x82, 0xab, 0x5e, 0x2d, 0xbd, 0x06, 0x6f, 0xdb, 0x50, 0xba, 0x4f, 0x85, 0xb1, 0xb2, 0x50, 0x06, 0xe3, 0x3a, 0x9f, 0xa4, 0xa6, 0x61, 0x1c, 0x92, 0xeb, 0xa2, 0x69, 0xb9, 0x8a, 0xc4, 0x41, 0xb9, 0x37, 0xff, 0x0c, 0x2a, 0xb3, 0x60, 0xb0, 0x27, 0x3f, 0x6f, 0xa9, 0x0d, 0x56, 0x0e, 0x5c, 0x80, 0x9b, 0xa4, 0xa8, 0xaf, 0x11, 0x7b, 0xbf, 0xd9, 0x8a, 0x67, 0x34, 0x11, 0x62, 0xa9, 0x55, 0x3e, 0x6c, 0x12, 0xba, 0x65, 0x2d, 0x6c, 0x1e, 0x2b, 0x48, 0x15, 0x6e, 0x95, 0x3a, 0xed, 0x20, 0x13, 0x47, 0x72, 0xc6, 0xbd, 0xb4, 0x2a, 0xe3, 0xdc, 0x37, 0x42, 0xfd, 0xac, 0xac, 0x74, 0xf3, 0x60, 0x09, 0x2e, 0x91, 0x67, 0x94, 0xf0, 0x62, 0xee, 0x54, 0xf5, 0xc5, 0xa6, 0xc5, 0x17, 0x43, 0xc7, 0xd0, 0xed, 0x20, 0x55, 0xf9, 0x36, 0x30, 0xa2, 0xdb, 0x7a, 0xec, 0x14, 0xd1, 0xee, 0xc5, 0x28, 0xf7, 0x99, 0xb9, 0xb7, 0x51, 0xb5, 0x23, 0x78, 0x49, 0x58, 0xd7, 0xc7, 0x5f, 0x53, 0x6e, 0xa4, 0x1c, 0x5a, 0xdf, 0xff, 0x47, 0x66, 0x50, 0x33, 0x5c, 0x58, 0x2b, 0xd0, 0x3a, 0xdf, 0x73, 0x9d, 0x1c, 0x9b, 0x59, 0xdd, 0xca, 0x83, 0x0a, 0xd2, 0x11, 0x84, 0xcc, 0x80, 0x70, 0x6a, 0x49, 0xb3, 0x14, 0x04, 0x2a, 0x43, 0x07, 0x83, 0xe8, 0x97, 0xa4, 0x24, 0xdf, 0x68, 0x4e, 0x0f, 0xa5, 0xc7, 0x61, 0x7e, 0x99, 0x62, 0x69, 0x21, 0xbf, 0x03, 0x92, 0xc2, 0xcb, 0x59, 0x60, 0x25, 0x7b, 0xfb, 0xa0, 0x32, 0x2a, 0xaa, 0x9f, 0x55, 0xa3, 0xd6, 0x99, 0x26, 0x33, 0x64, 0x74, 0x45, 0x02, 0xaf, 0xae, 0x88, 0xa2, 0xcd, 0x95, 0x59, 0xe9, 0x13, 0xb6, 0x59, 0xfc, 0xdb, 0x97, 0x4a, 0xad, 0x84, 0xa9, 0x2b, 0x07, 0xbb, 0x78, 0xa4, 0x26, 0xf9, 0x25, 0xa5, 0x4d, 0x4d, 0x16, 0x4b, 0x32, 0x5c, 0xec, 0x03, 0x9c, 0xa6, 0xb5, 0xf1, 0x30, 0x0b, 0x63, 0x93, 0x88, 0x8d, 0x7e, 0xa1, 0x86, 0x57, 0x15, 0x38, 0xe8, 0xff, 0xfa, 0x38, 0x1c, 0x08, 0x2f, 0xeb, 0x55, 0xab, 0x9b, 0xe7, 0xde, 0xd6, 0x01, 0x35, 0xaf, 0x76, 0x33, 0xb2, 0x3e, 0xf2, 0x83, 0xb6, 0x97, 0xf7, 0x7b, 0xf4, 0xaf, 0x7b, 0xce, 0xa1, 0xf5, 0xfc, 0x8d, 0xd9, 0x2b, 0x09, 0x9e, 0x3e, 0x74, 0x04, 0x6b, 0xe2, 0xae, 0x26, 0xd7, 0x67, 0x01, 0xc3, 0x76, 0x64, 0xb8, 0xd0, 0xfd, 0x0b, 0x50, 0xa2, 0xf7, 0x09, 0xcf, 0xf8, 0xba, 0xae, 0x58, 0x3c, 0x9a, 0x4e, 0xfb, 0x06, 0x5c, 0xe7, 0xd1, 0xe2, 0xee, 0x03, 0x49, 0x53, 0x55, 0xe0, 0xbd, 0x18, 0xe6, 0xcf, 0x49, 0xad, 0xb9, 0xda, 0xdc, 0x15, 0x5b, 0xa9, 0x8f, 0xd7, 0xc3, 0xa7, 0x36, 0x47, 0x87, 0x60, 0x35, 0x06, 0x50, 0x2d, 0x96, 0xcc, 0x8c, 0x14, 0x58, 0x65, 0x62, 0xea, 0x09, 0xfa, 0xeb, 0xba, 0x97, 0x92, 0x9f, 0x6b, 0x63, 0xd8, 0x0d, 0x9c, 0x97, 0x1f, 0xd0, 0xd3, 0xba, 0xa3, 0xbe, 0xd7, 0x81, 0x12, 0x62, 0x5a, 0xe8, 0x4b, 0xad, 0xdb, 0x82, 0x65, 0xe8, 0xcb, 0x0d, 0xf3, 0xed, 0xef, 0x4a, 0x86, 0x97, 0x05, 0x0c, 0x74, 0x77, 0xaa, 0x8e, 0xd8, 0xc8, 0x7b, 0x09, 0xda, 0xa5, 0x7b, 0x86, 0x31, 0x7a, 0xb5, 0xf1, 0xe6, 0xb9, 0x22, 0x70, 0x5a, 0xce, 0xcc, 0xf3, 0x8a, 0x54, 0x34, 0x0b, 0x92, 0x89, 0xf1, 0xff, 0x70, 0xff, 0x9b, 0x1d, 0x0b, 0x95, 0xe7, 0x4e, 0x74, 0xa6, 0x13, 0xed, 0x6b, 0x80, 0x85, 0xd9, 0x25, 0x18, 0xaf, 0xc9, 0x4c, 0xfc, 0x35, 0xe0, 0x48, 0x88, 0x52, 0x82, 0xbd, 0x5d, 0x78, 0x65, 0x54, 0x0f, 0x36, 0xeb, 0xbf, 0x1e, 0x5f, 0xaf, 0xf7, 0x28, 0x69, 0x5d, 0xc8, 0x5c, 0x13, 0xc8, 0x90, 0x32, 0x4a, 0x36, 0x44, 0x59, 0x4e, 0xfe, 0xb3, 0xf1, 0x11, 0x56, 0x0f, 0xfb, 0xe0, 0x66, 0xa9, 0x0e, 0x44, 0xa1, 0xfc, 0x4b, 0x2b, 0x54, 0xed, 0x93, 0x43, 0x7f, 0x51, 0xf7, 0xa7, 0xe5, 0xb0, 0x6f, 0xbd, 0x5f, 0x48, 0xcf, 0x5e, 0x75, 0x55, 0xf8, 0x38, 0x2f, 0x90, 0x4b, 0x71, 0x29, 0xf6, 0x64, 0x8d, 0xe6, 0xca, 0x04, 0x92, 0x66, 0xdd, 0x4e, 0x6a, 0xfb, 0x0d, 0x37, 0x88, 0x58, 0x0c, 0x38, 0xcf, 0xeb, 0x63, 0x45, 0xaf, 0x6d, 0xb6, 0x03, 0x91, 0xb7, 0x49, 0x36, 0x75, 0xd7, 0xc3, 0x78, 0xd9, 0x63, 0x32, 0x31, 0xdd, 0x0d, 0x50, 0xc3, 0xa6, 0x78, 0x05, 0x05, 0x00, 0x4a, 0x2c, 0xf3, 0x47, 0x83, 0x9a, 0xa4, 0x87, 0x0d, 0x5c, 0x7c, 0xe2, 0x93, 0x41, 0xa2, 0x32, 0x97, 0x99, 0xb4, 0xf0, 0xbf, 0x3b, 0xba, 0x55, 0x70, 0xcd, 0x59, 0xbe, 0x9e, 0x3f, 0x4a, 0x55, 0xe3, 0x99, 0x0a, 0xee, 0xce, 0xf7, 0xd2, 0x2f, 0x7d, 0xd1, 0xc9, 0xf4, 0x6e, 0x80, 0x79, 0xf1, 0x92, 0xfe, 0x7f, 0x9a, 0xa3, 0xee, 0x87, 0x3f, 0xb8, 0xdc, 0x78, 0x7c, 0x17, 0xc5, 0xec, 0xd0, 0x4a, 0xda, 0xe3, 0x8c, 0x75, 0x81, 0xb8, 0xef, 0xe6, 0x9d, 0x54, 0x8f, 0xee, 0x0f, 0xa1, 0xfa, 0xef, 0x7d, 0x41, 0x9e, 0xb7, 0x51, 0x81, 0xe6, 0x0c, 0x05, 0x88, 0xa6, 0x88, 0x9f, 0xd5, 0xb9, 0xa8, 0x77, 0xe8, 0xe9, 0x1f, 0x40, 0x3e, 0x0e, 0x70, 0x46, 0x83, 0x7a, 0xbb, 0xf5, 0x04, 0x95, 0xd7, 0x9b, 0x63, 0xc5, 0xa2, 0x6f, 0x8e, 0x91, 0x95, 0xd1, 0xf1, 0x05, 0x9c, 0xd3, 0xeb, 0x58, 0x24, 0xf9, 0x7f, 0xcc, 0x75, 0x3d, 0x4d, 0xd6, 0x42, 0x56, 0xc0, 0x7f, 0x7e, 0x3a, 0x88, 0x0a, 0x72, 0xe2, 0x4b, 0xd7, 0x0d, 0x4d, 0x97, 0x87, 0x7b, 0xc7, 0x1c, 0x61, 0xf9, 0x6b, 0x18, 0xf4, 0xe7, 0xe7, 0x12, 0xfe, 0x1e, 0x7f, 0xcb, 0x8d, 0x85, 0x55, 0x72, 0x64, 0xdf, 0xe7, 0x17, 0xa0, 0xe7, 0xd9, 0x62, 0x9c, 0x9f, 0xf5, 0x85, 0x11, 0xe5, 0x70, 0x6f, 0x82, 0x47, 0x6e, 0x42, 0xd7, 0x18, 0xc9, 0x08, 0x48, 0xc3, 0x0e, 0xa2, 0x7c, 0x60, 0xc9, 0x00, 0xf2, 0x85, 0x03, 0x98, 0xa1, 0x5f, 0x08, 0x10, 0xdb, 0x01, 0x6e, 0x3e, 0x77, 0xfb, 0x52, 0x53, 0x2f, 0x2f, 0xe5, 0x53, 0x47, 0xe0, 0x28, 0xc9, 0x70, 0x0c, 0xf3, 0xb8, 0xeb, 0xfc, 0x3c, 0xd4, 0xf1, 0x19, 0x96, 0xf2, 0x53, 0x01, 0xf8, 0xbe, 0x5e, 0xda, 0xc0, 0xac, 0x01, 0xe7, 0xf7, 0x31, 0x32, 0x58, 0xd7, 0x32, 0x8d, 0x67, 0x8a, 0xbd, 0x3e, 0xa0, 0x35, 0xf7, 0x22, 0x80, 0x35, 0x55, 0x29, 0x42, 0xa9, 0x0f, 0xff, 0xf6, 0x30, 0xd2, 0xeb, 0xd3, 0xf4, 0xb6, 0xf7, 0xce, 0xe7, 0x6f, 0x51, 0x6c, 0x4c, 0xc7, 0xf1, 0xd4, 0x7a, 0x4c, 0x7c, 0x28, 0xdc, 0x45, 0x68, 0x15, 0x3d, 0xeb, 0x62, 0xa9, 0x42, 0xd6, 0xec, 0x65, 0x38, 0xb6, 0x4b, 0x94, 0x10, 0x43, 0xa0, 0xdb, 0xa8, 0x77, 0x55, 0x10, 0x4d, 0xfa, 0xba, 0x4f, 0x7d, 0xde, 0xf0, 0x4b, 0xf1, 0x8c, 0x07, 0xe3, 0xdb, 0xfe, 0x63, 0xf6, 0x6c, 0x2f, 0x64, 0x77, 0x99, 0xd0, 0x46, 0xc4, 0x1f, 0x3d, 0x45, 0x33, 0xc4, 0xaf, 0x05, 0xee, 0xe0, 0xb3, 0x32, 0x02, 0x1d, 0xdb, 0x63, 0xb2, 0x7b, 0xb3, 0x45, 0x11, 0x97, 0xf6, 0xf5, 0xd0, 0x2c, 0x02, 0xad, 0x54, 0xda, 0x8a, 0xa3, 0x0b, 0x26, 0x8b, 0x2e, 0x01, 0xc3, 0x81, 0x2b, 0xae, 0x10, 0xda, 0x9f, 0x13, 0xe1, 0xab, 0x9e, 0x05, 0x82, 0xa2, 0x6b, 0xc8, 0xf9, 0x3c, 0xe0, 0xdf, 0x8c, 0x37, 0x10, 0x23, 0x83, 0x4b, 0x2c, 0x13, 0x2f, 0x15, 0xa3, 0x6b, 0x2b, 0x54, 0x8d, 0xf8, 0xe2, 0x57, 0x4a, 0xaa, 0x51, 0xb6, 0x66, 0xeb, 0x0f, 0x41, 0xc0, 0x2f, 0x8a, 0x36, 0xec, 0xcc, 0x93, 0xb7, 0xd5, 0x0d, 0x1d, 0x7a, 0xa7, 0x81, 0x41, 0xc3, 0xec, 0x99, 0x86, 0x8f, 0xf5, 0x72, 0x60, 0x12, 0x7b, 0xf0, 0xf6, 0x64, 0x86, 0x0c, 0x28, 0x78, 0x8e, 0x6f, 0xd1, 0x4d, 0xe0, 0x3f, 0x49, 0x68, 0x44, 0x39, 0x2f, 0x81, 0xdd, 0x00, 0x65, 0x7d, 0x50, 0xb4, 0x5b, 0x9c, 0x29, 0xc7, 0x91, 0xf4, 0x7a, 0x0c, 0x57, 0x1e, 0xc4, 0x11, 0xd8, 0x2f, 0x1b, 0xaf, 0x56, 0xe9, 0x86, 0xdf, 0xb7, 0x33, 0xa5, 0xcf, 0x41, 0xc7, 0x96, 0x36, 0xa2, 0x2b, 0x18, 0xe4, 0x33, 0xe2, 0xf1, 0x9d, 0x7d, 0xe3, 0x8e, 0x27, 0xfd, 0x4a, 0xea, 0xa2, 0x24, 0x4e, 0xb1, 0x18, 0xa2, 0x73, 0xa4, 0x55, 0xe4, 0x00, 0x3f, 0xf9, 0xdb, 0xb4, 0x99, 0xcb, 0x00, 0xb5, 0x8d, 0x50, 0x95, 0xc9, 0x17, 0x9d, 0x2d, 0xc8, 0x00, 0x69, 0x6e, 0x52, 0xbe, 0x66, 0x16, 0xbd, 0x96, 0xd2, 0x3c, 0x51, 0x03, 0x48, 0xd9, 0xb8, 0x5b, 0xdd, 0x86, 0xb0, 0xb0, 0x68, 0x87, 0x03, 0xf4, 0x21, 0x09, 0xb9, 0x61, 0x6e, 0xa8, 0x8c, 0x18, 0xf9, 0x34, 0x9c, 0x09, 0x06, 0xb5, 0x64, 0x12, 0x04, 0xac, 0xed, 0x6b, 0x61, 0x9c, 0x41, 0x41, 0xa3, 0xc9, 0x23, 0xa1, 0xb5, 0x40, 0xfd, 0x98, 0x7e, 0x17, 0x1a, 0x99, 0xb8, 0xf6, 0x15, 0x1e, 0x00, 0xd7, 0x92, 0x92, 0x29, 0x09, 0x2b, 0x6f, 0xd6, 0x7b, 0xae, 0xa4, 0x48, 0x37, 0x85, 0x39, 0x74, 0x2d, 0x75, 0x35, 0x59, 0x32, 0x8c, 0xc0, 0x90, 0x48, 0x54, 0x85, 0x25, 0x20, 0x4d, 0x5a, 0xa5, 0xdd, 0x9a, 0x23, 0x78, 0x1b, 0xfb, 0xf3, 0x71, 0x30, 0xfb, 0x75, 0xa4, 0xb1, 0x6b, 0x8b, 0x78, 0x39, 0x0e, 0x34, 0xfd, 0x65, 0x96, 0xb3, 0x7f, 0x23, 0xcf, 0xee, 0x5b, 0x2d, 0x1b, 0x14, 0x11, 0xd0, 0x1e, 0x82, 0x9b, 0xf2, 0xba, 0xe8, 0xfd, 0x53, 0x3e, 0xa7, 0x1e, 0x13, 0xda, 0x7e, 0xd6, 0x75, 0x57, 0x66, 0x48, 0xe2, 0x04, 0xba, 0x72, 0x31, 0xf4, 0x9b, 0x02, 0x25, 0x66, 0x93, 0x6b, 0x37, 0x85, 0x78, 0x39, 0x96, 0x52, 0x94, 0xa1, 0x6d, 0xde, 0x02, 0x5d, 0x64, 0xbc, 0x5b, 0xb7, 0x69, 0xb6, 0x93, 0xe3, 0xb0, 0xbf, 0x1d, 0x91, 0xf8, 0x29, 0x56, 0xc3, 0x11, 0x18, 0x20, 0xdc, 0x9b, 0x37, 0xcd, 0xfa, 0x10, 0xa9, 0x40, 0x86, 0x05, 0x43, 0x4e, 0x0a, 0xac, 0xf8, 0x6a, 0x42, 0x9e, 0x94, 0x82, 0x75, 0xd7, 0xae, 0x24, 0x05, 0x02, 0xd7, 0xe5, 0x46, 0xf8, 0x18, 0x03, 0x8c, 0x83, 0x9c, 0x49, 0x88, 0x67, 0xa9, 0x33, 0xd4, 0xa3, 0xd5, 0x53, 0xcc, 0xf4, 0x76, 0xf3, 0xa0, 0x9b, 0x5a, 0xfc, 0xa7, 0x60, 0xb8, 0x17, 0xf6, 0xd7, 0x67, 0x11, 0x32, 0xe2, 0x4e, 0x84, 0xa2, 0x77, 0x1c, 0xb4, 0x88, 0xa3, 0x39, 0xb7, 0xb2, 0xcf, 0xfc, 0xd9, 0x4c, 0x43, 0x1e, 0x3e, 0xf8, 0xe8, 0x6e, 0xc9, 0x21, 0x52, 0xc7, 0x3d, 0x8b, 0xfd, 0x3f, 0xa2, 0x2f, 0xd7, 0xa2, 0xeb, 0x47, 0xff, 0x1f, 0xd5, 0xa5, 0xcd, 0x40, 0x12, 0x48, 0x12, 0x20, 0xa7, 0x31, 0xa1, 0xd8, 0x93, 0x73, 0x0e, 0x3a, 0xb1, 0x8a, 0xb5, 0xc2, 0xdf, 0xed, 0xfe, 0xc9, 0x60, 0xe7, 0xe0, 0xfc, 0x7f, 0xa2, 0xa4, 0x0d, 0x75, 0x85, 0xec, 0xa8, 0x8d, 0xbf, 0xf3, 0xa9, 0x86, 0x24, 0x16, 0x8c, 0x39, 0x39, 0x94, 0x24, 0x7c, 0x8a, 0x92, 0x90, 0x45, 0x44, 0x62, 0x6c, 0x13, 0xff, 0x04, 0x44, 0x89, 0xdc, 0xed, 0x4e, 0x5c, 0xd0, 0x08, 0x58, 0x70, 0x3f, 0xfb, 0xff, 0x3e, 0xcd, 0xab, 0x22, 0x79, 0x71, 0x02, 0x96, 0xf1, 0xcb, 0xf0, 0x1b, 0xb7, 0xb7, 0xaf, 0x8f, 0x82, 0x22, 0x4c, 0x62, 0x51, 0x1c, 0x63, 0x4a, 0x52, 0x2f, 0x2a, 0x38, 0x03, 0xef, 0xb0, 0x8a, 0x97, 0xd3, 0x67, 0x82, 0x9b, 0x43, 0xe1, 0xf7, 0xd9, 0xf2, 0xd7, 0x4a, 0x7d, 0x6e, 0x6f, 0x9c, 0x76, 0xf6, 0xbe, 0x3e, 0x1f, 0x8b, 0x8c, 0x69, 0x1f, 0x49, 0x58, 0x30, 0x8e, 0xf8, 0x9c, 0xb2, 0x59, 0xdf, 0x53, 0x94, 0xe7, 0xd8, 0xb7, 0xaf, 0xfc, 0xaa, 0x4f, 0x05, 0xde, 0x92, 0x29, 0xfa, 0xb7, 0x23, 0x65, 0xc1, 0x3b, 0x51, 0xf3, 0x14, 0x8a, 0xc8, 0x9c, 0x28, 0x58, 0x82, 0x47, 0xe0, 0x4b, 0x98, 0x75, 0x41, 0xa4, 0x58, 0x0f, 0x26, 0x22, 0x99, 0x61, 0x34, 0x23, 0x4b, 0x66, 0x11, 0x0d, 0x52, 0x46, 0xd1, 0xec, 0x95, 0x1d, 0xb1, 0x5d, 0x51, 0xfe, 0x08, 0xaa, 0xb4, 0x38, 0x7a, 0x36, 0xa7, 0xd7, 0x6f, 0x1c, 0xeb, 0x6e, 0xc3, 0x13, 0x67, 0x14, 0xc0, 0x95, 0xc0, 0xad, 0x49, 0x40, 0x2b, 0x6b, 0x57, 0x7c, 0x7f, 0x94, 0xaa, 0x5e, 0x8f, 0x85, 0xb8, 0xcc, 0xb6, 0xf7, 0xea, 0xe2, 0xb3, 0x81, 0x07, 0x95, 0xb7, 0x5e, 0xf0, 0x96, 0xbd, 0x71, 0x8f, 0x79, 0x1a, 0x86, 0x0a, 0x17, 0x55, 0xdb, 0x3c, 0x31, 0x38, 0xdf, 0x65, 0x56, 0x27, 0x39, 0x20, 0x06, 0xb1, 0x0c, 0x96, 0x17, 0x65, 0x79, 0xf2, 0x58, 0xe7, 0x66, 0x15, 0x75, 0x43, 0x7e, 0x8a, 0x1a, 0x80, 0x79, 0xbc, 0x5b, 0x79, 0x9e, 0x66, 0x54, 0xe8, 0x86, 0x4c, 0x0c, 0xc4, 0x22, 0x29, 0xa0, 0xcd, 0x00, 0xe8, 0x9d, 0x65, 0xc9, 0x16, 0xad, 0xa1, 0x0f, 0x98, 0x76, 0xa0, 0x45, 0x99, 0xbf, 0x1b, 0x0f, 0xc7, 0xd4, 0x3e, 0xbd, 0xbf, 0x2c, 0xb6, 0x11, 0xc5, 0x4a, 0x0c, 0x49, 0xb9, 0xe1, 0x31, 0x59, 0x46, 0x3b, 0x5a, 0x79, 0x5d, 0xdb, 0x0d, 0xdf, 0xe2, 0x62, 0x7c, 0xce, 0xa5, 0xaf, 0x13, 0xcf, 0x93, 0x4a, 0x4d, 0x3f, 0x2e, 0x03, 0xcb, 0x09, 0x3a, 0xd6, 0xa7, 0xb5, 0xb9, 0x12, 0x06, 0xa2, 0x1a, 0xbb, 0xec, 0x8f, 0xae, 0x2c, 0x55, 0x60, 0x5b, 0x00, 0x81, 0x1f, 0x94, 0x33, 0x8f, 0x42, 0x88, 0x85, 0x4d, 0x2c, 0x9a, 0x1f, 0x4f, 0xf6, 0x12, 0x79, 0x3e, 0x6e, 0x12, 0x7b, 0x73, 0x60, 0xcb, 0xe3, 0xc4, 0x15, 0xf0, 0xe6, 0x9e, 0x1a, 0x6b, 0x1a, 0x55, 0x42, 0x50, 0x93, 0xb7, 0xee, 0x0f, 0x4c, 0xe7, 0x8c, 0xed, 0xc9, 0x69, 0x5e, 0xb5, 0xfb, 0x79, 0x7d, 0xaa, 0x64, 0xa1, 0x1d, 0xc1, 0x7c, 0x8a, 0x12, 0x0d, 0x52, 0x13, 0x94, 0x7b, 0x76, 0xa0, 0x3f, 0xbf, 0x17, 0xb4, 0x5d, 0x8e, 0x69, 0xc3, 0x68, 0x0e, 0x49, 0x41, 0xcb, 0x8b, 0x24, 0xff, 0xe9, 0x6b, 0x15, 0xb7, 0x60, 0x64, 0x4d, 0xe6, 0x8f, 0xec, 0xb8, 0xd9, 0x56, 0xf1, 0xde, 0x0b, 0x1c, 0xcb, 0x07, 0xae, 0x17, 0x6f, 0xa2, 0x88, 0xc7, 0xe5, 0xe7, 0x00, 0xc4, 0xfc, 0xbc, 0x79, 0xba, 0x3c, 0xd5, 0xde, 0xb2, 0x1c, 0x20, 0x7e, 0x93, 0x75, 0x60, 0x1b, 0xe8, 0x37, 0x17, 0x3d, 0xe3, 0x5b, 0xaa, 0xcc, 0xa2, 0x18, 0xc0, 0xde, 0xb2, 0x5a, 0xeb, 0xce, 0xd2, 0x70, 0x8a, 0x8e, 0xf9, 0x04, 0xee, 0x3e, 0x9a, 0x51, 0xbb, 0xfd, 0x26, 0x90, 0x91, 0xff, 0xd3, 0xb3, 0xec, 0xdf, 0x9c, 0x56, 0x49, 0x37, 0x88, 0xf3, 0x8b, 0x6f, 0x30, 0x55, 0x9c, 0xd2, 0x7b, 0x4f, 0x57, 0xe7, 0xad, 0xad, 0xa6, 0xfe, 0xa0, 0x6b, 0xe7, 0x09, 0x50, 0x25, 0x95, 0xad, 0x9e, 0xcf, 0x24, 0x99, 0x4d, 0xa6, 0x2c, 0x17, 0x51, 0x66, 0xca, 0xe0, 0x49, 0xbe, 0x44, 0x35, 0x4a, 0x01, 0xeb, 0x2b, 0xde, 0x1e, 0x46, 0x47, 0x4c, 0xd2, 0x6c, 0x4a, 0x1a, 0x1c, 0xb2, 0x4e, 0xd1, 0xf2, 0x86, 0x12, 0x00, 0x32, 0x9b, 0x93, 0x83, 0xdb, 0x47, 0xdc, 0x05, 0x7d, 0x29, 0x1e, 0xc4, 0xee, 0x0e, 0x03, 0x94, 0x3f, 0x15, 0x40, 0x27, 0xee, 0x12, 0x6a, 0x8b, 0x5d, 0x31, 0x0a, 0xf4, 0x83, 0xdc, 0xf3, 0xbc, 0xe2, 0xde, 0xd3, 0xa8, 0xb9, 0xc8, 0x09, 0x6d, 0x7a, 0x93, 0xb6, 0x73, 0x7e, 0x88, 0x17, 0xd8, 0xf8, 0x5d, 0x12, 0xb8, 0x28, 0xa1, 0x0e, 0xac, 0xd1, 0x5a, 0x08, 0x90, 0xec, 0xec, 0xe3, 0x8a, 0x9e, 0x3c, 0x00, 0x47, 0x68, 0x16, 0x0f, 0x88, 0x9e, 0xcc, 0x25, 0xde, 0x1a, 0x20, 0x0e, 0xb1, 0x31, 0x64, 0xe4, 0x87, 0xe6, 0xe0, 0xe0, 0x83, 0x5e, 0x74, 0x71, 0x2c, 0x94, 0x7f, 0x8b, 0x71, 0x4e, 0xff, 0x42, 0xe9, 0x50, 0xf9, 0x97, 0x5f, 0xcf, 0x1b, 0x92, 0x8d, 0x28, 0xa0, 0x91, 0x28, 0xd2, 0x74, 0xdf, 0x1d, 0x91, 0x98, 0x88, 0x1b, 0xed, 0xc9, 0x6c, 0x51, 0xe3, 0x5c, 0x93, 0x79, 0xda, 0x6d, 0xc0, 0x15, 0xd9, 0x38, 0x49, 0xf8, 0xf6, 0xc7, 0x25, 0x09, 0x12, 0xce, 0x47, 0x44, 0xc3, 0xd3, 0x2a, 0x01, 0x92, 0x91, 0xae, 0x79, 0x67, 0x9f, 0x22, 0x86, 0x41, 0x4d, 0xa2, 0xaa, 0x2a, 0xcf, 0xa3, 0x53, 0x6b, 0x9d, 0xcc, 0x5d, 0xfc, 0x19, 0x08, 0xd9, 0x3e, 0x72, 0xd9, 0x0d, 0xec, 0xc9, 0xef, 0xbb, 0x4f, 0x93, 0xf9, 0xa7, 0xb2, 0x3f, 0xbb, 0x53, 0x16, 0x18, 0x60, 0x0d, 0x27, 0x6c, 0x12, 0x2b, 0x6e, 0xee, 0xc9, 0x96, 0xc7, 0x59, 0x60, 0x85, 0x16, 0x56, 0xee, 0x8b, 0x36, 0xa0, 0x53, 0xd4, 0x32, 0x66, 0x11, 0xac, 0xb8, 0xf1, 0x5e, 0x40, 0xca, 0x86, 0x77, 0xa9, 0xb7, 0x8e, 0x36, 0x26, 0x4a, 0xf4, 0xe7, 0xa9, 0x41, 0xcf, 0x58, 0x96, 0x00, 0x41, 0x2f, 0xc7, 0x87, 0x9e, 0x80, 0xd3, 0xa2, 0xd1, 0x9f, 0x90, 0x5f, 0xfc, 0x33, 0xd6, 0xc5, 0x5f, 0x8c, 0x86, 0xc3, 0x7b, 0x37, 0xcb, 0x67, 0x77, 0xcf, 0xa0, 0x51, 0xc2, 0x15, 0x93, 0x66, 0xfa, 0x43, 0xc8, 0xc9, 0x0d, 0x9e, 0x40, 0x07, 0x9e, 0x4b, 0x5b, 0x91, 0xaa, 0x63, 0x9c, 0x70, 0x6b, 0x4a, 0xad, 0x34, 0x7c, 0x3c, 0xa3, 0x2d, 0x3f, 0x28, 0x82, 0xde, 0x7c, 0xc2, 0x04, 0xaf, 0x4a, 0xd4, 0x96, 0xe2, 0x33, 0xd4, 0xa4, 0xc8, 0x93, 0xbc, 0x16, 0x35, 0x41, 0x16, 0x1b, 0x31, 0x71, 0x56, 0x25, 0xf0, 0xd9, 0x6d, 0x35, 0x05, 0x13, 0x9b, 0x58, 0xd2, 0x43, 0x85, 0x71, 0x43, 0xf9, 0x87, 0x3a, 0xbc, 0x59, 0x4b, 0x86, 0x4f, 0x79, 0x9b, 0xc9, 0x33, 0x0a, 0x73, 0xd9, 0x71, 0x3b, 0x5b, 0xf6, 0xe1, 0xda, 0xf3, 0x09, 0x55, 0xbc, 0xd0, 0x29, 0x14, 0x60, 0x86, 0x63, 0x8a, 0xcf, 0x06, 0xbb, 0x3d, 0xc6, 0x2b, 0x6e, 0x03, 0x17, 0x8f, 0x7a, 0x73, 0x4d, 0xa3, 0x60, 0x99, 0x8f, 0xff, 0x29, 0xee, 0xc7, 0xf6, 0xa7, 0x86, 0x03, 0x6e, 0xfd, 0x8c, 0x1b, 0xee, 0x62, 0xec, 0x94, 0xf9, 0x21, 0x4f, 0xc4, 0x9b, 0xe4, 0x4c, 0x37, 0x41, 0x33, 0xdc, 0x52, 0xce, 0x38, 0x0f, 0x36, 0xea, 0xc5, 0xfe, 0xe7, 0x9d, 0x98, 0x01, 0xae, 0x1e, 0xdd, 0x22, 0xbb, 0xe5, 0xf4, 0xd1, 0x0f, 0x07, 0x75, 0xd9, 0x99, 0xc3, 0x71, 0x92, 0x9f, 0x58, 0xfb, 0x58, 0x60, 0x1a, 0xe7, 0x3d, 0xf8, 0xc5, 0xd2, 0xfb, 0x83, 0x11, 0x63, 0x2d, 0x85, 0x87, 0xcf, 0xbe, 0x8a, 0x92, 0xa3, 0xa1, 0x09, 0xd9, 0xbe, 0xc2, 0x8e, 0xcc, 0x9c, 0x3d, 0x18, 0x7d, 0xdb, 0xcf, 0xc0, 0xb2, 0xf7, 0x89, 0x9c, 0x38, 0x59, 0xcc, 0xe3, 0x7a, 0x90, 0x71, 0x52, 0x52, 0xde, 0x48, 0xce, 0x1e, 0xf6, 0xc4, 0x4a, 0x17, 0x04, 0xf4, 0xeb, 0xde, 0xee, 0xb5, 0x6a, 0x58, 0xd9, 0x27, 0xbb, 0xbc, 0xf0, 0x5d, 0xec, 0xea, 0x60, 0x59, 0x4f, 0xff, 0xa7, 0x37, 0xdb, 0x26, 0x0f, 0xa8, 0xd0, 0xb1, 0x75, 0xa2, 0x9a, 0x68, 0x4f, 0x56, 0xf8, 0x20, 0xee, 0x63, 0x5d, 0x90, 0x00, 0x49, 0x97, 0x61, 0x58, 0x20, 0xae, 0x84, 0xf2, 0x8a, 0x0f, 0xc8, 0x31, 0xe6, 0xe9, 0xac, 0x6c, 0xc6, 0xd8, 0x71, 0xa9, 0xa3, 0xc1, 0x74, 0xa8, 0xd0, 0xfd, 0xbb, 0x24, 0xad, 0xb9, 0xce, 0x55, 0x1d, 0x9c, 0xc8, 0xb9, 0x3a, 0xab, 0xad, 0x14, 0x47, 0x6a, 0xfe, 0xb6, 0xe5, 0x44, 0x8b, 0xfc, 0x8a, 0x2d, 0x89, 0x19, 0x30, 0x86, 0xe4, 0x16, 0x4a, 0x41, 0xd7, 0x18, 0xfc, 0x45, 0xb9, 0xe2, 0x8b, 0x14, 0x1a, 0x9a, 0x13, 0xab, 0x0e, 0xd0, 0x78, 0xaa, 0xc9, 0xbc, 0x9e, 0xb4, 0x6c, 0xc7, 0xdd, 0x19, 0x1f, 0x4e, 0xaf, 0xb2, 0x60, 0xa2, 0xac, 0x0d, 0x9a, 0x53, 0xb9, 0xca, 0xfa, 0xae, 0x7c, 0x45, 0x7e, 0x84, 0x13, 0x76, 0x4f, 0x2d, 0x05, 0x15, 0x50, 0xcd, 0x78, 0x01, 0xf7, 0xd6, 0xa5, 0xe2, 0x5c, 0xce, 0x8a, 0x0d, 0x8f, 0x53, 0xde, 0xa9, 0x2f, 0x5c, 0x4a, 0x10, 0x38, 0xc1, 0xd6, 0x78, 0x1d, 0xfe, 0xa2, 0xd3, 0x17, 0x34, 0xd6, 0xf4, 0xbc, 0x70, 0xdb, 0xf2, 0xd3, 0x30, 0xcc, 0xd1, 0x67, 0x23, 0x27, 0x5f, 0x1a, 0x31, 0xc9, 0x5d, 0xbc, 0xbb, 0x19, 0xdf, 0x1c, 0x24, 0x83, 0xf6, 0x1e, 0x90, 0x28, 0x8b, 0x0e, 0xeb, 0xd3, 0x8e, 0x34, 0x2e, 0x2f, 0x51, 0xa9, 0xdd, 0x38, 0x2e, 0x69, 0xd4, 0xf0, 0x70, 0xa8, 0x44, 0x53, 0x71, 0x6a, 0xf9, 0x8c, 0xff, 0x4e, 0xde, 0x69, 0x04, 0xaa, 0xc2, 0x0d, 0x66, 0xdd, 0x5c, 0xe5, 0x2d, 0xe1, 0x8d, 0xdd, 0xe4, 0x20, 0xe6, 0xd3, 0x41, 0x89, 0x6a, 0x4b, 0x08, 0xe2, 0x95, 0x65, 0x2c, 0x60, 0x9d, 0x0d, 0x37, 0x75, 0xf7, 0x72, 0xed, 0xe9, 0x1d, 0xb9, 0x2c, 0x2c, 0x8f, 0xf2, 0x17, 0xeb, 0x17, 0x4b, 0x74, 0xe1, 0x52, 0x83, 0x51, 0xf0, 0x6c, 0xa2, 0xee, 0x70, 0x2b, 0xe8, 0xd7, 0xc7, 0x2f, 0x03, 0x51, 0x39, 0x78, 0x85, 0xf7, 0x02, 0x28, 0x94, 0xa5, 0xa2, 0x8a, 0xe3, 0x95, 0x79, 0x54, 0xe2, 0xc8, 0x93, 0x29, 0x32, 0xa8, 0xc5, 0x62, 0x5c, 0xeb, 0xf9, 0x0e, 0xc2, 0xba, 0xc6, 0x37, 0xd6, 0x13, 0x44, 0x68, 0x89, 0x6c, 0x1e, 0x6b, 0x07, 0x99, 0xe8, 0x57, 0xa1, 0xef, 0xb3, 0xcb, 0x0a, 0xaa, 0xdf, 0x74, 0xc7, 0x8c, 0x31, 0xd5, 0xe1, 0xc7, 0x25, 0x47, 0xdd, 0x1d, 0x86, 0x3e, 0xed, 0x46, 0x3b, 0xcf, 0x68, 0x92, 0x64, 0x6f, 0x78, 0xcf, 0xa6, 0xfe, 0x13, 0x6d, 0xc2, 0x04, 0x2c, 0xe0, 0x6d, 0x3a, 0x2a, 0x46, 0x5c, 0x4c, 0x99, 0x4a, 0x9e, 0xdd, 0x1f, 0x48, 0x2e, 0xcb, 0xb2, 0xb2, 0xc9, 0xb5, 0x09, 0xb2, 0xfd, 0xbb, 0x50, 0x10, 0x83, 0x85, 0x20, 0x57, 0xce, 0x87, 0xae, 0x33, 0xe4, 0x83, 0x43, 0x1e, 0x6d, 0x4f, 0xec, 0x3b, 0x09, 0xd8, 0x72, 0x82, 0xe7, 0x67, 0x8c, 0x1e, 0x94, 0x23, 0x54, 0x13, 0x10, 0xd8, 0xf8, 0x24, 0x27, 0xf6, 0xb2, 0xf4, 0xfe, 0xdd, 0xfa, 0x6b, 0xed, 0x57, 0xfa, 0x5b, 0x8c, 0x66, 0x42, 0x64, 0x11, 0x41, 0xbd, 0x15, 0xd9, 0x99, 0xe3, 0x53, 0x44, 0x20, 0x31, 0xff, 0xc6, 0x4c, 0xd6, 0xd3, 0x3b, 0x58, 0xb0, 0x8d, 0x7b, 0x8d, 0x76, 0x50, 0x2f, 0xbf, 0x37, 0x47, 0xe3, 0x1a, 0x03, 0x8b, 0x5c, 0x1f, 0xe8, 0x47, 0x2b, 0xe9, 0x20, 0x1a, 0x82, 0xb5, 0x88, 0xbc, 0x47, 0xa1, 0x54, 0xe5, 0x67, 0xb4, 0x01, 0x6a, 0x6d, 0x1f, 0x8c, 0xa9, 0x53, 0xc2, 0xe2, 0x28, 0x97, 0xf2, 0x97, 0x79, 0x92, 0x7a, 0xda, 0x61, 0x06, 0xdf, 0xa9, 0x39, 0xf6, 0xe9, 0x41, 0x93, 0xba, 0x5e, 0xd9, 0x21, 0x52, 0x11, 0x8f, 0xd3, 0xfb, 0x1b, 0xa3, 0x40, 0x00, 0x69, 0xe3, 0x47, 0xd3, 0x77, 0x66, 0xf6, 0x5c, 0x5a, 0x7d, 0xaa, 0x91, 0x04, 0xe7, 0x78, 0x47, 0xc4, 0x44, 0xcc, 0x47, 0x0c, 0xcc, 0x50, 0xa5, 0x77, 0x41, 0x10, 0x4d, 0x0a, 0x22, 0xdb, 0xdf, 0xbb, 0x22, 0xec, 0xbd, 0x2f, 0xd9, 0xca, 0x62, 0xc8, 0xb8, 0x6c, 0xf5, 0xdf, 0x42, 0xa1, 0x1d, 0x4e, 0x79, 0xaf, 0x18, 0x32, 0x97, 0x3a, 0x07, 0xef, 0xff, 0x68, 0x8c, 0x74, 0x73, 0x43, 0x97, 0xc0, 0x87, 0x5f, 0x7d, 0xa4, 0x56, 0xbc, 0x4b, 0xcb, 0x73, 0xed, 0x59, 0xf9, 0x23, 0x7a, 0x22, 0x90, 0xc9, 0x84, 0x52, 0x58, 0xa1, 0xa7, 0x21, 0x7f, 0xb1, 0x25, 0xe0, 0xdf, 0xfd, 0x40, 0xd1, 0x80, 0xfb, 0xe7, 0x3c, 0x5e, 0x46, 0x95, 0xbf, 0x6c, 0x96, 0x77, 0xe6, 0xd8, 0xf0, 0xcd, 0xfc, 0x91, 0x1a, 0x92, 0x20, 0x07, 0x52, 0x5f, 0x9b, 0x32, 0x3f, 0x8d, 0x70, 0xd5, 0x28, 0x9a, 0x35, 0x04, 0x64, 0xcd, 0x22, 0xe4, 0x12, 0x1d, 0x68, 0xb2, 0x0a, 0x50, 0xc3, 0x06, 0x13, 0x60, 0x53, 0x59, 0x56, 0x22, 0xa8, 0xc5, 0x12, 0x29, 0x1c, 0x0d, 0x92, 0xe9, 0x65, 0xdd, 0x5c, 0x18, 0x6a, 0x53, 0xac, 0x5a, 0x56, 0xbd, 0x20, 0x1c, 0xeb, 0xa5, 0xb5, 0xc0, 0x1a, 0x0b, 0xf2, 0xfb, 0xd0, 0xf1, 0x63, 0x7c, 0x12, 0x1d, 0x49, 0xcf, 0x4c, 0x1a, 0x90, 0x80, 0xe6, 0x80, 0x01, 0x83, 0x19, 0x75, 0xb9, 0xd3, 0x01, 0x74, 0xda, 0x5a, 0xf3, 0x4d, 0x80, 0x11, 0x10, 0x6d, 0xf7, 0x68, 0x1a, 0x60, 0x2b, 0xe8, 0x87, 0x94, 0x5f, 0x17, 0xd4, 0x60, 0x22, 0x9c, 0x1c, 0x44, 0x7f, 0xa3, 0xe9, 0x73, 0x75, 0x83, 0x4a, 0x8e, 0xa7, 0x9e, 0x26, 0xb3, 0x53, 0x89, 0xcf, 0xb6, 0x88, 0x6e, 0xda, 0xae, 0x94, 0xae, 0x2f, 0xb4, 0xbc, 0xca, 0x5c, 0xe7, 0x31, 0x83, 0x2f, 0xb4, 0x3f, 0x40, 0x83, 0x54, 0xc6, 0xb1, 0x5a, 0x95, 0xee, 0xb2, 0x2c, 0xde, 0x17, 0x72, 0x7f, 0x6d, 0x0f, 0xd4, 0xb8, 0xe4, 0x88, 0x15, 0x31, 0x04, 0xc9, 0xb0, 0x8b, 0xb8, 0xa3, 0x7e, 0x46, 0x55, 0xa7, 0x22, 0x8e, 0x20, 0x96, 0xa4, 0x58, 0x11, 0x19, 0x5c, 0xae, 0xd6, 0xb2, 0x12, 0x47, 0x1b, 0xf3, 0x63, 0x5b, 0x09, 0xee, 0x66, 0xb5, 0x0c, 0xec, 0x90, 0x0a, 0xda, 0x62, 0xd5, 0x89, 0xb1, 0x20, 0x10, 0xb3, 0xdf, 0xcc, 0xa5, 0x6d, 0x88, 0x8f, 0x65, 0x54, 0xa4, 0x0e, 0xb2, 0x50, 0x47, 0x9c, 0xe3, 0x6c, 0x25, 0xad, 0xea, 0xe5, 0x55, 0x8e, 0x33, 0x80, 0x55, 0x54, 0xd0, 0x21, 0x4f, 0x13, 0xd4, 0x9a, 0x9a, 0x50, 0xfc, 0xc1, 0x84, 0xb8, 0x95, 0xc5, 0x4f, 0x12, 0x99, 0xc2, 0x79, 0x72, 0x1c, 0x92, 0x41, 0xaf, 0xe6, 0xe7, 0x66, 0x18, 0x62, 0x96, 0x32, 0x63, 0xb7, 0x36, 0xb7, 0xe6, 0x34, 0xea, 0x59, 0x0a, 0xf1, 0x7b, 0x8c, 0xfc, 0xb3, 0xaa, 0xdf, 0xa5, 0x11, 0xc4, 0x3a, 0xdd, 0xd5, 0x76, 0x63, 0xdb, 0xa5, 0xe3, 0xc7, 0xf0, 0xe3, 0xf4, 0x78, 0x76, 0xd1, 0xef, 0x72, 0x03, 0xf9, 0x4c, 0x22, 0xe2, 0xcc, 0xc4, 0x29, 0xc3, 0x89, 0xaa, 0x5d, 0xb1, 0x60, 0x7e, 0x10, 0x45, 0xd8, 0xc0, 0x96, 0x19, 0x6e, 0x02, 0x01, 0x80, 0x7e, 0x41, 0x2f, 0x74, 0x67, 0x75, 0x07, 0xd0, 0xeb, 0x67, 0xff, 0xc0, 0xd4, 0xc3, 0xe1, 0x75, 0xdd, 0x6e, 0xd0, 0x1d, 0xcf, 0x19, 0x86, 0x12, 0xeb, 0x17, 0xdf, 0x51, 0x88, 0x6b, 0x9b, 0x2f, 0xfd, 0x26, 0x5f, 0x47, 0xc1, 0xf0, 0xfe, 0xb7, 0xd1, 0xe4, 0xf7, 0x8c, 0x52, 0xa1, 0x3f, 0x7a, 0x78, 0x9d, 0x40, 0xd1, 0xa6, 0xbd, 0x21, 0xac, 0xd7, 0x23, 0x48, 0x6b, 0x3c, 0x48, 0x1d, 0x64, 0x26, 0x4a, 0x11, 0xd6, 0x27, 0x87, 0xe0, 0x1e, 0x74, 0x6a, 0x12, 0x2e, 0x8e, 0x85, 0xc8, 0x3a, 0x22, 0xe0, 0xb5, 0xb4, 0x2d, 0x91, 0x6b, 0x7b, 0x63, 0x8d, 0xd8, 0x50, 0xd2, 0xbe, 0x10, 0x89, 0xc3, 0x56, 0x4d, 0x09, 0xe1, 0x62, 0x33, 0x6f, 0x9d, 0xa2, 0x59, 0x8e, 0xd0, 0x98, 0x06, 0x1e, 0xa2, 0xdf, 0x38, 0xb0, 0xac, 0xbe, 0xeb, 0xe8, 0x59, 0xfd, 0x97, 0xe6, 0x92, 0xf7, 0xfb, 0x05, 0x9a, 0xf1, 0x19, 0xc8, 0x36, 0xaa, 0x82, 0x11, 0x12, 0x33, 0xd3, 0x94, 0x60, 0x01, 0x80, 0x8c, 0xc2, 0x41, 0xd0, 0xac, 0x6a, 0x6b, 0x29, 0x59, 0x7f, 0x1a, 0x8e, 0x16, 0xc3, 0x1b, 0x66, 0x40, 0x74, 0xc4, 0x7f, 0xfb, 0x70, 0x87, 0x52, 0x6c, 0x9c, 0xc7, 0x89, 0x29, 0x85, 0xe9, 0xbe, 0xed, 0x48, 0xaf, 0x86, 0x91, 0xb0, 0xc1, 0xae, 0x37, 0x9f, 0x8d, 0xc4, 0xc9, 0xaf, 0x51, 0xd9, 0xa2, 0x18, 0x76, 0x86, 0x8a, 0xd5, 0x20, 0x2d, 0xe8, 0x02, 0x03, 0x81, 0x33, 0x89, 0x78, 0x49, 0xaa, 0xfd, 0xd0, 0x61, 0x45, 0xc6, 0xe8, 0x01, 0xeb, 0x7f, 0xfd, 0x41, 0xe5, 0x9c, 0xc2, 0xdd, 0x93, 0x50, 0xb0, 0x36, 0x5d, 0xae, 0x9e, 0x9a, 0xed, 0x0e, 0x91, 0xc5, 0x9b, 0xb2, 0xd5, 0xa8, 0x29, 0xa9, 0x4d, 0x69, 0xb1, 0xf4, 0x07, 0xaa, 0xdb, 0xe8, 0x13, 0x0e, 0x53, 0xd3, 0x96, 0xf9, 0x7b, 0xe2, 0x1a, 0x98, 0x5d, 0x42, 0x28, 0x22, 0xe3, 0x86, 0x19, 0x5d, 0x4a, 0x49, 0x29, 0x63, 0xd4, 0x14, 0xcd, 0xa6, 0xbd, 0x82, 0x47, 0x32, 0x71, 0xa1, 0x77, 0x32, 0xfc, 0x9c, 0xf4, 0xb6, 0xc2, 0x97, 0x5b, 0xb3, 0x70, 0xdb, 0xe7, 0x4b, 0x32, 0x33, 0x42, 0x4f, 0x27, 0x95, 0x9b, 0x03, 0x12, 0x05, 0xf9, 0x21, 0x52, 0xb7, 0xcf, 0x20, 0x14, 0x74, 0xd0, 0xb5, 0xc7, 0x3e, 0x04, 0x9b, 0xd0, 0x37, 0x1c, 0x90, 0x7f, 0xbf, 0x03, 0xa0, 0x42, 0xdd, 0xb5, 0xa5, 0x19, 0xe0, 0x54, 0x0f, 0x4a, 0x46, 0x79, 0xe1, 0x56, 0xdc, 0xc8, 0xfc, 0x2b, 0x27, 0xc7, 0xa0, 0x9b, 0x03, 0xf0, 0x30, 0x0d, 0x8a, 0x04, 0x35, 0x73, 0x37, 0xa3, 0xa6, 0x7c, 0x4b, 0x1a, 0x67, 0x0a, 0x70, 0x7c, 0x0f, 0xe6, 0x9d, 0xf4, 0xee, 0xb3, 0x39, 0x59, 0x4f, 0x20, 0x83, 0x03, 0xfa, 0x62, 0x31, 0xdd, 0xfd, 0xe2, 0x57, 0xbc, 0xac, 0x32, 0x8b, 0xef, 0xe7, 0x46, 0x47, 0x18, 0x9b, 0xe1, 0x8f, 0x3a, 0x8b, 0x4d, 0xd3, 0x12, 0x51, 0x4f, 0x16, 0xab, 0x9f, 0x5a, 0x50, 0x2d, 0xcb, 0x03, 0x11, 0xf5, 0x8b, 0xb5, 0x68, 0xeb, 0xfd, 0xa6, 0x03, 0x10, 0xea, 0x09, 0x97, 0x57, 0x4b, 0x86, 0x83, 0xb6, 0x0c, 0xe7, 0xb0, 0x7c, 0x11, 0x14, 0xbb, 0xe5, 0x77, 0x41, 0x56, 0xec, 0x1c, 0x66, 0xeb, 0x60, 0x61, 0xef, 0x83, 0x3a, 0x2e, 0xb5, 0xe7, 0x2e, 0x37, 0x2e, 0x04, 0x80, 0x7e, 0xe0, 0x94, 0x19, 0x19, 0x1c, 0xfb, 0xda, 0x36, 0xe8, 0x6f, 0x30, 0x5c, 0x3d, 0x5c, 0xe9, 0xf4, 0x73, 0x07, 0x46, 0x07, 0xf9, 0x71, 0x51, 0x49, 0x49, 0x7e, 0x70, 0x57, 0x1b, 0x56, 0x3b, 0x3d, 0xd9, 0x0c, 0x8b, 0x3b, 0x54, 0x7e, 0xd3, 0xc9, 0xb5, 0x7c, 0xb4, 0xd8, 0xb6, 0x2c, 0xcb, 0x5b, 0x12, 0xac, 0xce, 0x06, 0x39, 0xfa, 0xd7, 0x55, 0x49, 0x11, 0xff, 0xd1, 0x3a, 0x55, 0x2f, 0x8f, 0x58, 0x31, 0x33, 0xf9, 0xf7, 0xff, 0x10, 0xd0, 0x62, 0x28, 0x98, 0x72, 0x14, 0x8c, 0x3b, 0x59, 0x2b, 0x24, 0x20, 0xe5, 0x19, 0xe5, 0x75, 0x5b, 0x9d, 0xe8, 0x03, 0x2d, 0xf2, 0xc9, 0x05, 0x7c, 0x46, 0x4d, 0x3a, 0xdb, 0x6d, 0x47, 0x39, 0x56, 0xd7, 0xbc, 0x05, 0xb3, 0xbf, 0x45, 0xe1, 0xf7, 0xa6, 0xb5, 0x65, 0x2c, 0x00, 0xfc, 0xd2, 0x62, 0x2d, 0x4b, 0xa3, 0xf4, 0xaa, 0x79, 0x64, 0x0c, 0x89, 0xa6, 0xc7, 0x69, 0x1e, 0x1e, 0xf5, 0x60, 0xfc, 0x7f, 0x22, 0x21, 0x20, 0x1f, 0x64, 0x3c, 0x6b, 0xa8, 0xc5, 0x64, 0x56, 0x05, 0x97, 0x72, 0xe1, 0x82, 0x07, 0xad, 0xcc, 0x2e, 0xf5, 0x48, 0x0a, 0x84, 0x03, 0x2c, 0x73, 0x4b, 0xec, 0xf8, 0xb9, 0xbb, 0x18, 0x46, 0x9d, 0xe1, 0x6d, 0x31, 0x62, 0x45, 0x67, 0x14, 0x82, 0xc9, 0x6b, 0x93, 0xa1, 0xd4, 0x58, 0xe0, 0xbf, 0xb0, 0x60, 0x37, 0xb1, 0x31, 0x16, 0xab, 0xd2, 0x98, 0xc7, 0x25, 0xf6, 0xb6, 0x0e, 0xaa, 0x9f, 0x55, 0xa3, 0xdc, 0x74, 0xd3, 0x74, 0xc4, 0xee, 0x10, 0xf7, 0xce, 0x55, 0x8b, 0xbe, 0x15, 0xeb, 0xc7, 0x4c, 0xe1, 0x67, 0xf4, 0x27, 0x6e, 0xa4, 0xcb, 0x2e, 0xf0, 0x9b, 0xba, 0x2d, 0xd3, 0x8f, 0x41, 0xaf, 0x47, 0x87, 0x9c, 0x13, 0xfc, 0x01, 0xa2, 0xe2, 0x2a, 0xe5, 0xed, 0x60, 0xd5, 0xb8, 0x3b, 0x61, 0x4f, 0x12, 0x14, 0x5e, 0xfe, 0x52, 0xad, 0xc8, 0x5f, 0x90, 0x0d, 0x9c, 0x4b, 0xd3, 0x6e, 0x38, 0x7a, 0x84, 0xe6, 0x6d, 0x45, 0x23, 0x46, 0xd5, 0xb0, 0x39, 0x43, 0x67, 0xa7, 0x8e, 0xd3, 0x48, 0x88, 0x9b, 0xda, 0xe4, 0xe2, 0x42, 0x06, 0x3e, 0x7d, 0xbd, 0xf7, 0x84, 0x9a, 0xd5, 0xa4, 0xe7, 0x7b, 0x54, 0xfa, 0xaa, 0x26, 0xbc, 0xc6, 0x78, 0x67, 0x39, 0xd4, 0xfa, 0x14, 0xd5, 0x58, 0xa9, 0x94, 0xeb, 0x8e, 0xe1, 0xa2, 0xde, 0x9e, 0x37, 0x4f, 0x0a, 0xc2, 0x0d, 0x46, 0xfb, 0xaa, 0x64, 0x54, 0xdd, 0x20, 0xf1, 0x28, 0x34, 0xe8, 0x72, 0x57, 0xce, 0xea, 0x42, 0xa3, 0xf5, 0x93, 0x2b, 0x7c, 0xe9, 0x78, 0x7c, 0xc7, 0x8d, 0x3c, 0x5c, 0xdf, 0x60, 0xb4, 0x5e, 0xd9, 0xaf, 0x4a, 0x56, 0x0d, 0x09, 0x9f, 0x6a, 0xd1, 0xf4, 0x75, 0x6c, 0x88, 0xde, 0xcb, 0x67, 0xdc, 0x56, 0x49, 0x77, 0x47, 0x7c, 0xdf, 0xde, 0xd8, 0xb6, 0xaa, 0x55, 0x34, 0xa5, 0x17, 0xa0, 0xdb, 0x58, 0x4a, 0x65, 0xac, 0xbf, 0xc1, 0x3e, 0xac, 0x62, 0x34, 0x0d, 0x03, 0x52, 0xc0, 0x90, 0x47, 0x60, 0x45, 0x35, 0xfd, 0x8e, 0x0d, 0x2f, 0x5d, 0xc3, 0xae, 0xc9, 0x56, 0xc3, 0x31, 0xfa, 0xd2, 0x5d, 0x73, 0x3a, 0x3b, 0xe7, 0xcc, 0x95, 0x3e, 0xe7, 0xef, 0xfe, 0xcf, 0x13, 0x11, 0xe5, 0x6d, 0x7c, 0x4e, 0x0c, 0xa7, 0x06, 0x48, 0x96, 0xdf, 0x1b, 0x11, 0x61, 0x4e, 0xa0, 0x4b, 0x95, 0x48, 0x28, 0x8d, 0x7d, 0xc1, 0x68, 0x09, 0x96, 0x11, 0xec, 0x6c, 0xe6, 0xf4, 0x08, 0x06, 0x8f, 0xd5, 0x10, 0x2b, 0xa4, 0x4c, 0xcb, 0xd9, 0x3b, 0xe5, 0x26, 0x9a, 0xc4, 0x23, 0x26, 0xac, 0x99, 0xc4, 0x20, 0x60, 0xd6, 0x47, 0x2c, 0xc0, 0x6a, 0xac, 0xd7, 0x74, 0x6e, 0x7b, 0x18, 0xe7, 0xb6, 0x07, 0x86, 0xa5, 0xa6, 0xf4, 0xc7, 0x08, 0x47, 0xf7, 0x4c, 0x13, 0x9a, 0xdd, 0x3b, 0x9e, 0x2d, 0xcf, 0xad, 0xb3, 0xeb, 0xd4, 0x1a, 0x39, 0x38, 0x97, 0x11, 0xcf, 0x3e, 0x6b, 0x2d, 0xfb, 0x81, 0x8c, 0x44, 0x84, 0xba, 0xa7, 0xe1, 0x1c, 0xe2, 0x9d, 0xf5, 0x42, 0x8d, 0x85, 0xc9, 0x67, 0x79, 0xf0, 0x37, 0x50, 0x67, 0x70, 0x1a, 0xbb, 0x29, 0x5b, 0x03, 0x45, 0xfd, 0xcc, 0x2e, 0x8b, 0x19, 0xeb, 0xb4, 0x90, 0x87, 0x6e, 0x01, 0x5f, 0x33, 0x60, 0x89, 0xf1, 0x43, 0x21, 0xb7, 0x50, 0xa6, 0xaf, 0x26, 0xfd, 0xf0, 0x23, 0x14, 0x8f, 0x65, 0x7f, 0x14, 0x9e, 0x53, 0xa6, 0x02, 0xdf, 0xa6, 0xac, 0x3c, 0x90, 0xb6, 0x50, 0x0f, 0x17, 0x63, 0xc7, 0x70, 0xe6, 0x64, 0xbc, 0xed, 0xa1, 0xdc, 0x94, 0xe3, 0x83, 0x2e, 0xf6, 0xf0, 0xfe, 0x13, 0x8b, 0xab, 0xa1, 0xea, 0x02, 0x93, 0x3f, 0x4f, 0x58, 0x46, 0x4e, 0xee, 0x56, 0xf4, 0x8d, 0x99, 0x5b, 0x12, 0xea, 0x99, 0x5b, 0x53, 0xa2, 0x42, 0x28, 0xd4, 0xaa, 0xcb, 0xf0, 0x96, 0x4e, 0x5c, 0x07, 0x32, 0x18, 0x67, 0xe7, 0xc8, 0xf3, 0x3c, 0x76, 0x39, 0x90, 0xd8, 0x87, 0x96, 0x09, 0xfe, 0xa2, 0xd8, 0xc4, 0x8a, 0x08, 0xd1, 0x9b, 0x01, 0xf2, 0x62, 0x39, 0x6c, 0x1a, 0xef, 0xc7, 0x67, 0x7c, 0x10, 0xc9, 0x75, 0x5e, 0x89, 0x42, 0x96, 0x8e, 0x7d, 0x1f, 0x1c, 0xeb, 0xde, 0xd2, 0xba, 0x26, 0x28, 0x3e, 0xde, 0xca, 0x4f, 0xd3, 0x40, 0x7a, 0xf5, 0xfa, 0xbb, 0x7a, 0xe1, 0xb3, 0x5d, 0x72, 0xad, 0x7c, 0xba, 0x6e, 0xbe, 0x76, 0x85, 0x28, 0x7a, 0xc3, 0x61, 0x8a, 0xb4, 0x32, 0xf4, 0x6f, 0x6b, 0x1e, 0x3d, 0xaa, 0xb5, 0x93, 0x28, 0x49, 0xf6, 0xb3, 0x60, 0x1b, 0x55, 0x58, 0x65, 0x6f, 0x71, 0xfb, 0xde, 0x1f, 0x4f, 0xd5, 0x30, 0xcd, 0x98, 0x43, 0x4f, 0x6d, 0x01, 0x6f, 0xd5, 0x03, 0x0a, 0x2d, 0x51, 0xae, 0xeb, 0x23, 0xe1, 0xe6, 0xcb, 0x2d, 0x03, 0x02, 0x34, 0x00, 0xa8, 0xfd, 0xc4, 0x0d, 0x8a, 0x79, 0x25, 0xa8, 0xc0, 0x04, 0x3f, 0x69, 0x8f, 0x9b, 0xab, 0xd2, 0x84, 0x6c, 0x6b, 0x33, 0xbf, 0xe0, 0xd9, 0xcb, 0x92, 0xd9, 0xde, 0x30, 0x4b, 0x39, 0x64, 0xf1, 0x4d, 0xa3, 0x0e, 0x79, 0x66, 0x85, 0x26, 0x36, 0x5c, 0x56, 0xd7, 0xfb, 0xc9, 0x1c, 0x9c, 0xa3, 0x29, 0x32, 0xf8, 0xf8, 0x32, 0x48, 0x68, 0xd3, 0x64, 0xab, 0x96, 0x84, 0xe0, 0xc7, 0xcf, 0x73, 0x7d, 0xea, 0xb7, 0x08, 0x19, 0x4a, 0x3b, 0xc9, 0x2d, 0x4a, 0xc8, 0xc2, 0xa4, 0xf9, 0xba, 0x2a, 0xee, 0xdb, 0x18, 0x43, 0x50, 0xed, 0x7e, 0x82, 0x7e, 0xe3, 0x5a, 0xf0, 0x6b, 0xb4, 0x5b, 0xd0, 0x60, 0x58, 0x27, 0x82, 0x4c, 0xd0, 0x4d, 0xa7, 0x5b, 0x68, 0x7a, 0x86, 0xc9, 0x39, 0xef, 0xaf, 0xf9, 0xf1, 0x32, 0xdd, 0xc1, 0xd7, 0x04, 0x21, 0x08, 0x09, 0x94, 0x3d, 0x94, 0x08, 0xf2, 0x4e, 0x1d, 0x77, 0xc6, 0xaf, 0xa6, 0x20, 0x42, 0x19, 0x0d, 0x38, 0x55, 0x0f, 0xe0, 0xe4, 0x22, 0x79, 0x72, 0xfc, 0xb0, 0x8f, 0x2e, 0x0e, 0xe3, 0xf8, 0x2c, 0xa6, 0xab, 0x33, 0x02, 0xcc, 0x7b, 0x37, 0xdd, 0xcf, 0xfd, 0x56, 0xd0, 0x41, 0x04, 0x67, 0x6b, 0x43, 0xc2, 0x24, 0x90, 0x03, 0x3b, 0xd1, 0x82, 0x82, 0xf9, 0x1f, 0x3f, 0x9b, 0x01, 0x4f, 0x10, 0x41, 0x07, 0x9a, 0x5e, 0x08, 0xde, 0xd1, 0xc7, 0xe6, 0x32, 0x41, 0x71, 0x3b, 0x79, 0xd9, 0x9e, 0x10, 0x27, 0x8f, 0x81, 0x9c, 0x21, 0xff, 0x51, 0x0d, 0x75, 0x55, 0x9b, 0x85, 0x48, 0x6e, 0xdc, 0x62, 0x10, 0x3a, 0x4f, 0xc2, 0x03, 0x65, 0x04, 0x46, 0xce, 0x36, 0x32, 0x17, 0x8b, 0xb7, 0xce, 0x27, 0xed, 0x16, 0x5c, 0xba, 0xbe, 0x4b, 0x06, 0x24, 0x8c, 0xfb, 0xeb, 0xd4, 0x9f, 0x9c, 0xb9, 0x91, 0x2e, 0xdb, 0x7e, 0x04, 0xd2, 0x3a, 0xbb, 0x77, 0x3a, 0xfe, 0xbb, 0xdc, 0x21, 0x48, 0x22, 0x11, 0x7d, 0x82, 0xc9, 0x62, 0xf9, 0xfc, 0xc9, 0x50, 0xa6, 0xd7, 0xd6, 0x90, 0xed, 0x23, 0xcf, 0x57, 0xc9, 0x44, 0x92, 0xd5, 0x33, 0x9a, 0x15, 0xff, 0xdd, 0x61, 0xb3, 0x92, 0x22, 0xd5, 0xc3, 0x55, 0x3d, 0x9a, 0x6f, 0x9e, 0xba, 0x5c, 0xc4, 0x17, 0x2b, 0xb3, 0x05, 0xc2, 0x1c, 0x49, 0x45, 0x3b, 0x49, 0x3e, 0x34, 0x3e, 0x0e, 0xcb, 0x3a, 0x68, 0x1e, 0x26, 0xc2, 0x42, 0x78, 0xa6, 0xd9, 0x7b, 0x97, 0x28, 0xf7, 0x75, 0xe9, 0xb1, 0x1c, 0x04, 0x83, 0x55, 0x1f, 0x72, 0x13, 0x57, 0x43, 0xc6, 0x16, 0x91, 0x0c, 0x45, 0x4b, 0x16, 0x51, 0x3a, 0x67, 0x17, 0x91, 0xf3, 0x0a, 0x03, 0x8b, 0x0c, 0xf2, 0xf2, 0x08, 0xf0, 0x6f, 0x44, 0xfc, 0x9c, 0x16, 0x85, 0xcd, 0xa6, 0xba, 0x94, 0xf3, 0x7e, 0x98, 0x05, 0xc1, 0xf5, 0xd2, 0xc3, 0x82, 0xfb, 0x1f, 0xfa, 0xc8, 0xad, 0xc0, 0x34, 0x01, 0x8f, 0xb6, 0xc2, 0x4b, 0x15, 0x32, 0x5d, 0x8a, 0x69, 0x4d, 0x0d, 0xb7, 0x68, 0xf9, 0x4a, 0x7b, 0xed, 0x37, 0x61, 0xfc, 0x53, 0x8b, 0x1a, 0xf7, 0x35, 0xad, 0x98, 0x0f, 0x78, 0x82, 0x80, 0x64, 0x8c, 0x4a, 0x5e, 0x68, 0xee, 0x1b, 0x44, 0xee, 0xf2, 0x8e, 0xb4, 0x84, 0xbf, 0xb8, 0xbf, 0x03, 0x9b, 0x5c, 0x6f, 0x64, 0x69, 0x5e, 0x63, 0xd5 ],
-const [ 0x5e, 0xdb, 0x47, 0xd0, 0x7e, 0x85, 0x6a, 0x3d, 0xee, 0x51, 0xf6, 0x0a, 0x72, 0x3f, 0xf8, 0xde, 0xa7, 0xcd, 0x06, 0xc7, 0xf2, 0x1c, 0xd3, 0x7f, 0xb6, 0x4e, 0x00, 0xee, 0xca, 0x32, 0x34, 0xef, 0x2a, 0x23, 0x6e, 0x57, 0xec, 0x2d, 0x9a, 0x34, 0x76, 0x72, 0x63, 0x52, 0xef, 0xcc, 0x49, 0x04, 0xf3, 0xb4, 0xf3, 0x20, 0x8b, 0x63, 0xc6, 0x4c, 0x5c, 0x36, 0xb6, 0x78, 0x1e, 0x57, 0x5c, 0xac, 0x50, 0x9a, 0x49, 0x04, 0x2a, 0xa5, 0x9b, 0xf9, 0xd4, 0x54, 0xce, 0xe1, 0xd5, 0x5c, 0xd4, 0xb9, 0xce, 0x2e, 0x67, 0x23, 0x68, 0x1e, 0x9e, 0xab, 0x8b, 0xc4, 0xbe, 0x4e, 0xd1, 0xa2, 0x53, 0x3d, 0x3a, 0x08, 0x80, 0xde, 0x21, 0x35, 0x94, 0x14, 0x6e, 0xbf, 0xdd, 0xc0, 0x0e, 0x35, 0xc1, 0x88, 0xa0, 0x02, 0x0a, 0xd7, 0x71, 0x94, 0x82, 0x24, 0xab, 0xbe, 0xc0, 0x78, 0xc9, 0x5b, 0x41, 0x2a, 0x4e, 0x35, 0xbb, 0xed, 0xb7, 0x25, 0xad, 0x0e, 0xae, 0x7b, 0x3b, 0xf6, 0x80, 0x9f, 0x39, 0xf6, 0xd1, 0xf9, 0x86, 0x44, 0x8f, 0x0f, 0x9b, 0x40, 0x24, 0xed, 0x63, 0xfc, 0xf0, 0xca, 0x4e, 0xfc, 0xf6, 0xe8, 0xa1, 0x3a, 0xd5, 0xbc, 0x10, 0x6d, 0xfb, 0x4f, 0x8e, 0x8b, 0x15, 0xe4, 0x64, 0x8d, 0xc9, 0xdb, 0x80, 0x72, 0xa8, 0xd5, 0x10, 0x86, 0x5e, 0x19, 0x50, 0xe4, 0x2c, 0x37, 0xa0, 0x3a, 0x99, 0xeb, 0xda, 0xcc, 0x64, 0x43, 0xe2, 0xbc, 0xbc, 0x04, 0x7f, 0x88, 0xb3, 0x4b, 0x69, 0xd4, 0xf1, 0x70, 0xa3, 0x6a, 0xa5, 0x2f, 0x0a, 0x7f, 0xc2, 0x0a, 0x2f, 0x38, 0x67, 0xe9, 0x62, 0x6c, 0x9e, 0x04, 0x0f, 0xac, 0x4a, 0x02, 0x4e, 0x80, 0x5b, 0x62, 0xb5, 0xf4, 0x44, 0x1b, 0x70, 0x53, 0xaf, 0x7f, 0x94, 0x33, 0x6f, 0x65, 0xb1, 0xb1, 0xb6, 0x87, 0xa7, 0xfe, 0x88, 0x29, 0xba, 0x1b, 0x6f, 0xfc, 0xe8, 0xe0, 0x71, 0x41, 0x79, 0x43, 0x3f, 0x31, 0xd9, 0xd7, 0xaf, 0x9d, 0xa3, 0x93, 0x6c, 0xd2, 0xfe, 0xd5, 0xec, 0xbf, 0x2c, 0xa6, 0xa3, 0x5a, 0x60, 0x40, 0x77, 0x3f, 0xd0, 0xce, 0x73, 0x9a, 0x0c, 0x72, 0xbf, 0x48, 0x8e, 0x8c, 0xd0, 0x39, 0x92, 0x3a, 0xdc, 0x19, 0x28, 0x1b, 0x91, 0x2f, 0x87, 0x59, 0x06, 0x85, 0xa4, 0xe6, 0xf2, 0x49, 0x03, 0x05, 0x1c, 0x73, 0xcd, 0x0d, 0x12, 0xa8, 0x24, 0x69, 0x1e, 0x5e, 0xb3, 0xe4, 0x76, 0x42, 0x89, 0x24, 0xb3, 0xd6, 0x27, 0x73, 0x84, 0x5f, 0xd7, 0xc6, 0xa4, 0xfe, 0x40, 0xf7, 0x09, 0x1d, 0x38, 0x56, 0x5f, 0x0c, 0xd9, 0x60, 0xb4, 0xec, 0xd7, 0xce, 0x75, 0xcd, 0x10, 0xd2, 0x99, 0x13, 0x65, 0x9d, 0x1c, 0x1e, 0xc9, 0x24, 0xaf, 0x2a, 0x97, 0x24, 0xae, 0x73, 0x29, 0x63, 0x52, 0x9d, 0xa6, 0x3a, 0x28, 0x54, 0x1b, 0x50, 0xc1, 0x30, 0xce, 0xa8, 0xab, 0xdb, 0xcf, 0xde, 0xa1, 0x75, 0xcf, 0xad, 0xff, 0x37, 0x35, 0xb5, 0x79, 0x57, 0x6f, 0x7b, 0x0b, 0x2c, 0x86, 0xb2, 0x33, 0x93, 0xf6, 0xb9, 0x5f, 0x91, 0xbc, 0x64, 0xa1, 0x3a, 0xb0, 0xff, 0xaa, 0xd1, 0x15, 0x90, 0xf6, 0x30, 0x6f, 0x5d, 0x44, 0x6a, 0x94, 0xae, 0x49, 0xb0, 0x06, 0xd4, 0xa5, 0x71, 0x80, 0x6a, 0x16, 0xc5, 0xcf, 0xdb, 0xec, 0x0c, 0xe3, 0x25, 0xbd, 0xd2, 0x26, 0xdc, 0x59, 0xf7, 0x0d, 0x71, 0x00, 0x0c, 0xec, 0xb4, 0xd3, 0xff, 0x0e, 0x98, 0x89, 0xfb, 0x05, 0x36, 0x63, 0x8a, 0x3f, 0x15, 0x62, 0xfd, 0xda, 0xa9, 0xb7, 0x0d, 0xb9, 0x19, 0x7b, 0xc2, 0xd8, 0x46, 0xa0, 0x94, 0xdc, 0x08, 0x28, 0xd1, 0xef, 0xba, 0x94, 0x3e, 0xca, 0xfa, 0xa0, 0x01, 0x13, 0xaa, 0x2d, 0xbe, 0xea, 0x3a, 0x7f, 0x01, 0xbf, 0x2a, 0xa8, 0xdc, 0x66, 0xca, 0x44, 0xd1, 0x6d, 0x45, 0x67, 0xf1, 0xad, 0xdd, 0xd4, 0x46, 0x1f, 0x78, 0x70, 0x6f, 0xf1, 0x5c, 0xf6, 0x8a, 0xd9, 0x37, 0xeb, 0x57, 0xaa, 0x62, 0xd5, 0x99, 0x25, 0x66, 0xa8, 0xc0, 0x11, 0xc0, 0x81, 0xc6, 0x8e, 0xe1, 0x96, 0x57, 0xa6, 0x79, 0x6d, 0x34, 0x25, 0xf5, 0x4d, 0xd9, 0xaa, 0x46, 0xf3, 0x5e, 0xff, 0xe5, 0x85, 0x9b, 0xa6, 0x14, 0xcc, 0x8f, 0xb4, 0x66, 0x9d, 0x03, 0xe3, 0x81, 0x98, 0x6a, 0xe2, 0x23, 0x16, 0x0c, 0xef, 0x63, 0x5c, 0x63, 0xa8, 0x3a, 0x15, 0xc5, 0x1e, 0x41, 0xff, 0x44, 0x2c, 0xbc, 0xe4, 0xd3, 0x07, 0xd8, 0xcc, 0xaa, 0x15, 0x31, 0x71, 0xeb, 0x03, 0x97, 0xf3, 0x85, 0x12, 0x12, 0xcd, 0x58, 0xb1, 0x23, 0x08, 0x9b, 0x51, 0x4d, 0xae, 0x7b, 0x75, 0xd4, 0x82, 0x05, 0x08, 0xc5, 0xee, 0x46, 0xf4, 0x36, 0x3d, 0xb1, 0xf0, 0xcf, 0x0a, 0xc1, 0x99, 0x8a, 0xf8, 0xdf, 0xc5, 0xb6, 0xa4, 0x85, 0x14, 0x42, 0xd8, 0xa4, 0xc8, 0x38, 0x02, 0x43, 0xd6, 0x88, 0xe4, 0x69, 0x3c, 0x07, 0x8c, 0x3e, 0x96, 0xb7, 0x87, 0x6d, 0xec, 0x49, 0x52, 0xcc, 0xcf, 0xe0, 0x11, 0x3f, 0xa4, 0x18, 0x83, 0xda, 0x3f, 0x47, 0x36, 0x45, 0xb4, 0x03, 0xf7, 0x65, 0x69, 0xe4, 0x8d, 0x38, 0x70, 0x8a, 0xa7, 0x01, 0x14, 0xe2, 0x12, 0xa6, 0xb2, 0xa6, 0x2f, 0x56, 0xcb, 0x23, 0xa5, 0x6e, 0x56, 0x3f, 0x53, 0x9e, 0x5b, 0xba, 0x89, 0x48, 0xbd, 0xb4, 0x77, 0x28, 0x58, 0x70, 0xe5, 0x3a, 0x4b, 0x57, 0x25, 0xd8, 0x97, 0x40, 0x46, 0x23, 0xea, 0xee, 0x8b, 0xa5, 0xb5, 0xda, 0x1b, 0x35, 0x84, 0x33, 0xfa, 0x1a, 0x8f, 0x24, 0x38, 0x73, 0x8c, 0x55, 0x69, 0xd6, 0xc8, 0xb4, 0x55, 0x37, 0x76, 0x75, 0xf0, 0x0b, 0x47, 0x57, 0x8c, 0xae, 0x3b, 0x2a, 0x4d, 0x02, 0xb6, 0x8e, 0xdd, 0x5a, 0xd6, 0xfd, 0x62, 0x96, 0x04, 0x0c, 0xad, 0x8f, 0xc9, 0xed, 0xb4, 0xb5, 0xe3, 0x39, 0x43, 0xf6, 0x99, 0xec, 0xee, 0xe2, 0x4b, 0xb2, 0x4a, 0x0d, 0x4d, 0x61, 0x5d, 0xb5, 0xf6, 0xc6, 0x52, 0xa5, 0xf3, 0xa4, 0x71, 0x59, 0xe1, 0xfa, 0x4f, 0x63, 0x1c, 0x85, 0x42, 0x0e, 0xd1, 0x86, 0x18, 0x40, 0x5b, 0xc5, 0x09, 0xa5, 0xcc, 0xd6, 0xe9, 0x09, 0xc9, 0x9b, 0xa3, 0x06, 0x9c, 0x0a, 0xe2, 0xe0, 0x84, 0x30, 0x11, 0xad, 0x4f, 0x76, 0x86, 0xb9, 0x2b, 0x24, 0xfa, 0x28, 0xba, 0x23, 0x3d, 0xdd, 0x64, 0x07, 0x27, 0x9b, 0xf1, 0x4d, 0xd2, 0x6a, 0x57, 0xe0, 0x06, 0x3d, 0xd0, 0xe2, 0xf5, 0xd1, 0x30, 0xaa, 0x29, 0xd8, 0x76, 0x09, 0xba, 0x57, 0xa1, 0xd2, 0xc4, 0x4d, 0xc5, 0x99, 0x18, 0x95, 0x5d, 0xba, 0x32, 0x0d, 0xe3, 0x9e, 0x6c, 0xf8, 0x9e, 0x39, 0x71, 0xa1, 0xbc, 0xd7, 0xf3, 0x42, 0xa0, 0x19, 0xa1, 0x23, 0x7d, 0x3a, 0x53, 0x06, 0x24, 0x97, 0x88, 0xc3, 0x1a, 0x6f, 0x13, 0x30, 0xee, 0xe7, 0x11, 0x43, 0xc9, 0x51, 0x1e, 0x7b, 0x47, 0xad, 0xc9, 0x7b, 0x85, 0x70, 0x45, 0xf9, 0x7c, 0x85, 0x61, 0xd6, 0x8d, 0x92, 0xb9, 0x8e, 0x5c, 0x7c, 0x2e, 0xd3, 0xe2, 0x2d, 0x95, 0x75, 0xbe, 0x95, 0xac, 0x85, 0xcc, 0xee, 0x52, 0xba, 0xf9, 0x45, 0xf7, 0x13, 0x56, 0x36, 0x51, 0xbe, 0x6b, 0xf7, 0x50, 0x39, 0xcd, 0x98, 0x55, 0xb7, 0xf3, 0x88, 0x9f, 0xc5, 0x45, 0x5c, 0x05, 0x2d, 0x76, 0xcc, 0xeb, 0x1b, 0x14, 0xfe, 0x6f, 0x7e, 0x5d, 0x08, 0xe3, 0xb1, 0x55, 0xb0, 0x80, 0x5b, 0x15, 0x75, 0x58, 0x94, 0x66, 0xd4, 0x8d, 0x49, 0x8e, 0xc4, 0xc1, 0xe1, 0x6a, 0x83, 0xcd, 0x20, 0xbd, 0x94, 0xb6, 0x4c, 0xc8, 0x09, 0xdd, 0x8f, 0x1b, 0xfe, 0x75, 0x9d, 0xaa, 0x66, 0x3a, 0x96, 0x23, 0x0a, 0x60, 0x2e, 0x7f, 0xce, 0xca, 0x0b, 0xd8, 0x36, 0x7d, 0x6f, 0x7a, 0x2a, 0x54, 0x16, 0x3c, 0xf6, 0xf5, 0x62, 0x11, 0x95, 0x03, 0xb5, 0xda, 0x2f, 0x96, 0x1e, 0x7e, 0xe0, 0xe8, 0x39, 0x3d, 0xbb, 0x51, 0x50, 0x41, 0x0f, 0x75, 0xc6, 0x76, 0xe8, 0xbc, 0xb6, 0x9c, 0xd9, 0x02, 0xd7, 0x9b, 0xf9, 0x90, 0xa3, 0x16, 0x2c, 0x4b, 0xb8, 0x42, 0xa4, 0x2c, 0x7e, 0xf9, 0xa7, 0xf0, 0x0a, 0x0a, 0x92, 0x11, 0x42, 0xd4, 0x1e, 0xf4, 0x42, 0x13, 0xe2, 0x64, 0xff, 0xf9, 0x19, 0x3f, 0x2a, 0x81, 0xa6, 0x6f, 0x58, 0x00, 0x55, 0x1c, 0x5f, 0xfc, 0x64, 0x20, 0x03, 0x42, 0x42, 0xbc, 0xd2, 0x33, 0x96, 0x89, 0x4c, 0x5f, 0x83, 0xb1, 0x47, 0x55, 0x2a, 0x5e, 0x92, 0xb8, 0x71, 0x73, 0xd9, 0x96, 0x03, 0x7b, 0xc8, 0xf6, 0x99, 0xde, 0x73, 0xb0, 0x77, 0x5b, 0xf6, 0x82, 0x39, 0xb2, 0x58, 0x5f, 0xcf, 0xa1, 0xb6, 0x0a, 0xc7, 0x12, 0x9d, 0xe4, 0xca, 0x93, 0xb7, 0x03, 0x6a, 0x06, 0xaa, 0x83, 0x1b, 0x9a, 0x3d, 0x21, 0x7e, 0xfa, 0xbd, 0x05, 0xe6, 0xc4, 0x9f, 0xe0, 0x15, 0x3c, 0x66, 0x37, 0x46, 0x42, 0xc7, 0xff, 0x71, 0x81, 0x0b, 0x69, 0xca, 0xea, 0xb6, 0xff, 0x8a, 0x61, 0x66, 0xf0, 0xf3, 0xb5, 0xfd, 0xa8, 0x8e, 0xd6, 0x02, 0xa4, 0xb8, 0x42, 0x45, 0x85, 0x5c, 0xc1, 0xc2, 0x63, 0x02, 0x52, 0xc8, 0x63, 0x09, 0x65, 0x5b, 0x8c, 0x30, 0x4a, 0xd6, 0xd6, 0x5c, 0xea, 0xd5, 0x84, 0x95, 0xb5, 0x51, 0xb4, 0x51, 0xdb, 0x0d, 0x35, 0xf5, 0xbf, 0x31, 0x98, 0x99, 0xa9, 0x35, 0x8a, 0x0b, 0xba, 0x01, 0x61, 0x17, 0x26, 0x53, 0xf4, 0x06, 0x9d, 0x60, 0xb0, 0x65, 0x0a, 0xbe, 0xe8, 0x08, 0x80, 0x81, 0x6d, 0x4e, 0x71, 0xa5, 0x5f, 0xa5, 0x22, 0xac, 0x42, 0x51, 0x5b, 0x87, 0x54, 0x6a, 0x63, 0xba, 0x1e, 0x24, 0x2c, 0xbc, 0x4a, 0x54, 0xca, 0x9c, 0xb4, 0x2f, 0x29, 0xea, 0xc4, 0x54, 0x00, 0xd5, 0xfa, 0x0d, 0x01, 0x91, 0xca, 0xd1, 0x53, 0xfc, 0xab, 0x0e, 0x41, 0x80, 0x6b, 0x26, 0x34, 0x3b, 0xc5, 0xb7, 0xde, 0x5d, 0x35, 0x20, 0xb9, 0xd2, 0x0b, 0x41, 0xb0, 0x22, 0xbf, 0x82, 0x1b, 0x95, 0x84, 0x16, 0xf1, 0x9a, 0x1f, 0x81, 0x39, 0x69, 0xfa, 0x57, 0xc2, 0xe8, 0x74, 0x47, 0x14, 0xcb, 0x7c, 0x59, 0xa6, 0x00, 0x5e, 0x74, 0x52, 0x4a, 0xdc, 0x23, 0x05, 0x2c, 0x81, 0x98, 0xbb, 0x08, 0x32, 0xf2, 0xab, 0x88, 0x06, 0xbb, 0xbe, 0x3d, 0x58, 0xb5, 0x46, 0x86, 0x1a, 0xd6, 0xed, 0xb4, 0x6b, 0x91, 0xeb, 0x6b, 0x6c, 0x57, 0x7d, 0x4b, 0x50, 0x5e, 0x92, 0xd0, 0xb3, 0xa1, 0xc7, 0x77, 0x2d, 0x28, 0x95, 0x23, 0x26, 0x89, 0xc9, 0xbe, 0xec, 0xaf, 0x35, 0x23, 0x02, 0xda, 0xa6, 0x3c, 0xbc, 0xe7, 0x16, 0x67, 0x08, 0xd2, 0x22, 0x1f, 0x8f, 0x79, 0xbe, 0xd8, 0xfd, 0xa2, 0x27, 0x2a, 0x9c, 0x40, 0x19, 0x32, 0x28, 0xf2, 0x43, 0x36, 0xdf, 0xcd, 0xf8, 0x87, 0xd7, 0x5b, 0x27, 0xac, 0x94, 0xe3, 0x8d, 0xbc, 0xda, 0xeb, 0x29, 0x0c, 0xc0, 0xfc, 0xf0, 0x0a, 0x06, 0xa5, 0xc3, 0x69, 0xa8, 0xc2, 0x9e, 0x7f, 0xb3, 0xff, 0x12, 0xeb, 0x58, 0x97, 0xf5, 0x7a, 0x3f, 0x62, 0x58, 0x4c, 0x1e, 0x0e, 0xb9, 0x32, 0x89, 0xac, 0x7a, 0x5b, 0x0c, 0x6f, 0x92, 0x30, 0x77, 0xb1, 0x83, 0x7c, 0x79, 0x37, 0x8c, 0xd0, 0x70, 0xb6, 0x1f, 0x26, 0x80, 0x96, 0x95, 0xc4, 0xe2, 0xf5, 0x21, 0x63, 0x7f, 0xef, 0x02, 0x91, 0xbe, 0x1d, 0xfd, 0x54, 0x9a, 0x5b, 0x0b, 0x10, 0xf7, 0xcf, 0x4f, 0xaa, 0x36, 0x27, 0x4a, 0xee, 0x07, 0x21, 0x52, 0x2e, 0x7e, 0x51, 0x40, 0x2c, 0x6a, 0x1f, 0x6a, 0x3b, 0xe2, 0x0f, 0xd1, 0xa0, 0x20, 0x45, 0x9b, 0x3e, 0x93, 0x48, 0xc3, 0x73, 0x2f, 0x06, 0x0f, 0x3d, 0x08, 0x18, 0x42, 0xa1, 0x1f, 0x48, 0x93, 0x4d, 0x7b, 0x50, 0x5f, 0x7c, 0x7c, 0xe5, 0x1b, 0x1a, 0x6d, 0xf4, 0x8c, 0x28, 0x58, 0x2c, 0x3a, 0x63, 0x1e, 0xbc, 0x22, 0x20, 0xc6, 0x5e, 0xab, 0x7b, 0x16, 0x94, 0xdb, 0xb0, 0x60, 0x31, 0xcb, 0xc9, 0x9f, 0x1c, 0x58, 0x7a, 0xc3, 0x51, 0x1c, 0x49, 0x48, 0x28, 0x9d, 0xf1, 0x0d, 0xda, 0xc3, 0x09, 0x64, 0x41, 0x90, 0xe1, 0x65, 0xdf, 0x0b, 0xad, 0x89, 0x22, 0x7d, 0xe5, 0x74, 0xe6, 0xe0, 0xeb, 0x11, 0x3c, 0x95, 0xef, 0xe4, 0x6a, 0x55, 0x10, 0x9c, 0x33, 0x6a, 0xc3, 0xe8, 0x58, 0x1f, 0x79, 0x8c, 0x5e, 0x75, 0x7c, 0xb4, 0x92, 0x17, 0x1a, 0x88, 0x4b, 0x90, 0x06, 0x00, 0x6f, 0xbc, 0xfb, 0xfa, 0x38, 0x7c, 0xa2, 0x8a, 0x38, 0xae, 0xb6, 0x91, 0x9b, 0x5d, 0x66, 0x91, 0xad, 0x34, 0xfb, 0xbf, 0x9c, 0x39, 0xba, 0x5a, 0x7e, 0xb8, 0x0c, 0x3c, 0x95, 0x7c, 0xdc, 0xaf, 0xd2, 0x45, 0x41, 0x81, 0x99, 0x77, 0x5d, 0x5b, 0xc4, 0x10, 0x85, 0x4e, 0xea, 0xdc, 0xa1, 0xaf, 0xe1, 0xec, 0xd6, 0x25, 0x81, 0x44, 0x63, 0x00, 0xab, 0xd4, 0xc9, 0xcc, 0x8a, 0xaa, 0x2f, 0x26, 0x19, 0x65, 0x04, 0xcf, 0xe6, 0xed, 0xe6, 0xff, 0x15, 0x61, 0xc3, 0xfc, 0xa7, 0x51, 0x3e, 0xea, 0xfd, 0x2e, 0x54, 0xe5, 0x97, 0xfe, 0x3f, 0x4d, 0x22, 0x54, 0x9a, 0x61, 0xb2, 0x80, 0xc7, 0x10, 0x4c, 0x03, 0x8e, 0x0b, 0xa7, 0x46, 0x06, 0x1f, 0x33, 0x8b, 0xb9, 0xc2, 0x5b, 0x23, 0x03, 0xec, 0x07, 0xe1, 0xbb, 0x28, 0x66, 0xd0, 0x15, 0xea, 0xea, 0x21, 0xc7, 0x23, 0x94, 0x67, 0x6b, 0x13, 0x71, 0x07, 0x25, 0x5e, 0x65, 0xe9, 0x85, 0x63, 0x27, 0x74, 0xaf, 0xc9, 0x8d, 0xba, 0xb9, 0x5a, 0x0a, 0xef, 0x54, 0x15, 0x75, 0x20, 0xaf, 0x7e, 0x0b, 0x21, 0x98, 0x39, 0xb8, 0xc8, 0xe5, 0xd7, 0x92, 0x58, 0x12, 0xf0, 0xa6, 0x40, 0x2b, 0x72, 0xf8, 0x06, 0xec, 0x38, 0xc5, 0x7e, 0x28, 0xdf, 0x0b, 0x3f, 0x67, 0xd5, 0x4c, 0x57, 0xd3, 0xb2, 0x8e, 0x3e, 0x55, 0xcc, 0xa6, 0x09, 0xfb, 0x05, 0xb6, 0xe0, 0x9d, 0xe8, 0xf5, 0xb2, 0xc0, 0xf5, 0xae, 0x27, 0xba, 0x38, 0x8c, 0xd7, 0x17, 0x21, 0x14, 0xb9, 0x3c, 0x8f, 0x73, 0xde, 0x4a, 0x2e, 0x7a, 0x5f, 0x45, 0x03, 0xe7, 0x94, 0x76, 0x45, 0xe6, 0x86, 0x0d, 0x6f, 0xd7, 0xa7, 0x0b, 0x93, 0x52, 0xc1, 0x5f, 0xf1, 0x68, 0x2d, 0x4f, 0xc8, 0x2c, 0x45, 0x1a, 0x6c, 0x73, 0x1b, 0xdc, 0x99, 0xd7, 0x6c, 0xb1, 0x07, 0x02, 0xcf, 0x1d, 0x3e, 0x29, 0x32, 0xac, 0xac, 0xd6, 0x87, 0xd5, 0xf5, 0xeb, 0xbb, 0x24, 0x8a, 0xe4, 0xe8, 0x99, 0x7d, 0x5c, 0xcb, 0x4b, 0x94, 0xd2, 0x78, 0x50, 0x9c, 0xae, 0x4c, 0xe1, 0xff, 0x7f, 0x24, 0xba, 0x99, 0x87, 0xcc, 0xc0, 0xc8, 0x79, 0xbb, 0xe6, 0xc2, 0x81, 0xfd, 0x51, 0x2c, 0x85, 0x70, 0xbb, 0xe8, 0xab, 0x33, 0x15, 0x2e, 0x1b, 0x5c, 0x70, 0xde, 0x06, 0xe9, 0x1d, 0x14, 0xe7, 0xfa, 0x13, 0xfd, 0x08, 0x3d, 0x92, 0xea, 0x48, 0xa9, 0x06, 0xa3, 0x1d, 0x6f, 0x2e, 0xfe, 0xd5, 0x2d, 0x7d, 0xb0, 0x21, 0x65, 0xc1, 0x62, 0xd3, 0x2f, 0x02, 0x08, 0xe7, 0x2a, 0xad, 0x6e, 0xc0, 0xb8, 0xf2, 0x13, 0xb5, 0x6b, 0x6a, 0x3b, 0xcc, 0xba, 0xfd, 0x40, 0xc5, 0xf9, 0x03, 0x29, 0x5b, 0x88, 0xa9, 0x7d, 0xc6, 0x4a, 0x96, 0x5a, 0x84, 0x58, 0xcf, 0xc1, 0x59, 0xf7, 0xd8, 0x34, 0x95, 0xc8, 0x1d, 0x83, 0x95, 0x3f, 0x90, 0xe3, 0x8c, 0x56, 0x92, 0x40, 0x84, 0x83, 0x17, 0xd4, 0x9f, 0xe7, 0x05, 0xf9, 0xa3, 0xc8, 0xde, 0x3b, 0xb5, 0x41, 0x9f, 0xb2, 0x65, 0x38, 0xe8, 0x8f, 0xeb, 0x91, 0x5c, 0xf4, 0xb0, 0xa1, 0x4b, 0x09, 0x11, 0xe6, 0x8f, 0x4c, 0x5f, 0xf5, 0xb3, 0x28, 0x2a, 0xb3, 0x5b, 0xca, 0xbf, 0xc8, 0xdf, 0x30, 0xef, 0x51, 0x3a, 0x82, 0x12, 0xd5, 0x23, 0xa6, 0x4c, 0x7b, 0x79, 0x0f, 0x0f, 0x7a, 0xe4, 0xd5, 0xe1, 0xd0, 0xba, 0x0b, 0x60, 0x37, 0x1f, 0x4d, 0x83, 0x55, 0x71, 0x98, 0x22, 0x33, 0xe3, 0x5e, 0xb9, 0xf0, 0x67, 0xda, 0x69, 0xb7, 0xd2, 0xa2, 0x3f, 0xee, 0x3a, 0x7b, 0xb9, 0xb0, 0xa3, 0x70, 0x86, 0x7e, 0xdb, 0x26, 0x8e, 0x31, 0xa3, 0x6a, 0x32, 0x33, 0x0f, 0x0c, 0xd5, 0xef, 0x30, 0xf0, 0x9b, 0x86, 0xf0, 0x62, 0x70, 0xc4, 0x3c, 0xaa, 0x4d, 0x52, 0x69, 0xe0, 0xb6, 0x2d, 0xd0, 0x02, 0x88, 0x56, 0xbc, 0x44, 0xf1, 0xcc, 0x87, 0xa7, 0xc0, 0xb7, 0xff, 0xcd, 0xdf, 0xe6, 0x0e, 0x0c, 0x1d, 0x7b, 0x9b, 0xc1, 0x31, 0xe5, 0xab, 0xe7, 0xfc, 0x0f, 0xcc, 0xe8, 0x0f, 0xd7, 0xb3, 0xb2, 0x6d, 0xc2, 0x24, 0x0e, 0x92, 0xee, 0x12, 0x2d, 0xb4, 0x48, 0x08, 0x84, 0x48, 0xfe, 0xc7, 0xdb, 0xc8, 0x38, 0x31, 0xa0, 0xb4, 0x03, 0x65, 0x80, 0xd7, 0x8d, 0x2c, 0x39, 0xcb, 0x98, 0x94, 0xa9, 0xbf, 0x29, 0xda, 0x2b, 0x78, 0x80, 0x8d, 0x24, 0x96, 0x4d, 0xf1, 0xd9, 0x19, 0x21, 0xa2, 0x84, 0x23, 0x23, 0x79, 0xa6, 0xff, 0x04, 0xb3, 0x9e, 0x63, 0x35, 0x50, 0x7b, 0xf2, 0x57, 0xba, 0x0f, 0x05, 0xf3, 0xa7, 0x44, 0xab, 0x6b, 0x40, 0xb4, 0xef, 0x30, 0x83, 0x73, 0x59, 0x36, 0xe6, 0x2f, 0xb7, 0xa5, 0x3d, 0x7c, 0x1c, 0xd2, 0xdd, 0x69, 0x2a, 0x6d, 0x02, 0x57, 0x8d, 0xfc, 0x6e, 0x0b, 0xc8, 0x87, 0x53, 0x01, 0x34, 0x95, 0x73, 0x03, 0x45, 0x58, 0x86, 0xfb, 0x10, 0x25, 0xdc, 0x06, 0x0a, 0x27, 0x43, 0xc9, 0x13, 0x53, 0x2b, 0x08, 0xb3, 0x9e, 0x08, 0x74, 0xa3, 0x6e, 0xf8, 0xc5, 0x8f, 0x4f, 0xa6, 0x09, 0x1a, 0xe8, 0x6e, 0x3c, 0x23, 0x2d, 0xc2, 0x18, 0x46, 0xd6, 0xcc, 0x2e, 0xa6, 0x0f, 0x54, 0x36, 0xea, 0x71, 0xe5, 0xa4, 0x86, 0x31, 0x2b, 0x7c, 0x3c, 0x97, 0xa0, 0x66, 0xe2, 0xb2, 0x68, 0x05, 0x65, 0x4b, 0x78, 0x85, 0x0e, 0x17, 0xfe, 0x73, 0x04, 0x30, 0xfd, 0xd2, 0x13, 0xc6, 0x38, 0x6b, 0xab, 0x12, 0x52, 0x64, 0x2c, 0x8c, 0x33, 0x14, 0x60, 0x5e, 0xae, 0x16, 0x49, 0x18, 0x60, 0x9c, 0x1e, 0xa5, 0xdb, 0x06, 0x90, 0x7e, 0x04, 0xb4, 0x51, 0x1d, 0xb9, 0x18, 0xd7, 0xb5, 0xb7, 0x0f, 0x5e, 0x20, 0xbb, 0x71, 0x2c, 0x19, 0xe8, 0xe6, 0x18, 0xab, 0x69, 0xfc, 0x4d, 0xe9, 0x57, 0x77, 0x4c, 0xe0, 0xdd, 0xe9, 0x30, 0xca, 0x9a, 0x82, 0x36, 0x85, 0x46, 0x28, 0x7c, 0x43, 0x99, 0xca, 0x09, 0x82, 0x68, 0xf2, 0x0e, 0x3f, 0x12, 0x9a, 0x6b, 0x66, 0x1a, 0x41, 0x75, 0x8e, 0x15, 0x3e, 0xf7, 0xe3, 0xc7, 0x53, 0x77, 0x63, 0x89, 0x85, 0xba, 0x4e, 0xed, 0x2b, 0x8a, 0xd7, 0xa5, 0x46, 0xb6, 0x20, 0xa1, 0x10, 0x5b, 0x65, 0x78, 0xd8, 0x62, 0x78, 0x09, 0x0c, 0x4a, 0x6d, 0x62, 0x98, 0x27, 0x96, 0xe1, 0x6e, 0xeb, 0xb2, 0x98, 0x66, 0xe5, 0x61, 0xf6, 0x49, 0x87, 0xdb, 0xa4, 0x28, 0x6c, 0xe2, 0xae, 0xf3, 0x9a, 0xf5, 0xe3, 0x47, 0x04, 0xc7, 0x7e, 0x86, 0x53, 0xef, 0x06, 0x2d, 0xe5, 0xe1, 0x72, 0x62, 0x16, 0x1d, 0x91, 0xcd, 0xbf, 0xa6, 0xa9, 0xa9, 0xfd, 0xb6, 0x5f, 0x1b, 0x34, 0xb0, 0xd6, 0xc2, 0x53, 0x56, 0x1b, 0x8f, 0x59, 0x3c, 0xc1, 0xd7, 0x18, 0x7c, 0xc8, 0xa6, 0x38, 0xac, 0xc4, 0x57, 0x80, 0x0d, 0x3a, 0x61, 0x51, 0x05, 0x4e, 0x74, 0x73, 0xd0, 0x9b, 0xc5, 0x15, 0x72, 0x63, 0xa6, 0x0e, 0xf0, 0xe8, 0x59, 0x69, 0xbf, 0x19, 0x26, 0x21, 0x7d, 0x71, 0xab, 0x29, 0xdf, 0x1d, 0x74, 0xaf, 0xeb, 0x5d, 0xcb, 0xa2, 0x67, 0x2c, 0xd1, 0x72, 0x91, 0x23, 0xce, 0x17, 0x10, 0x9b, 0xc6, 0x54, 0x2b, 0x12, 0x4d, 0x3d, 0x39, 0xd0, 0x9b, 0xf7, 0x58, 0xc9, 0xe3, 0xbf, 0x62, 0xc6, 0xe1, 0x2d, 0x1d, 0xc0, 0xb3, 0xba, 0xb2, 0x8c, 0xe9, 0x81, 0x61, 0xbe, 0xdf, 0x42, 0x72, 0xc7, 0x4b, 0xac, 0x6f, 0x60, 0x12, 0xdc, 0x90, 0x2c, 0x60, 0x21, 0x77, 0x98, 0xf7, 0x02, 0x1d, 0x07, 0xc7, 0x82, 0x0d, 0x2c, 0xbf, 0xa2, 0xd0, 0xb6, 0xe4, 0x28, 0xa8, 0x33, 0xa0, 0x9f, 0x81, 0x2e, 0x5c, 0x9f, 0x24, 0x9b, 0x51, 0x4e, 0xae, 0x76, 0x9a, 0x27, 0x40, 0xa6, 0x8e, 0xfa, 0xf9, 0x27, 0x4e, 0x34, 0x21, 0x68, 0x9a, 0x61, 0xa7, 0xf2, 0xe9, 0xef, 0xce, 0x4b, 0xb8, 0x35, 0x23, 0x1a, 0x22, 0xb4, 0xb2, 0x8b, 0xb1, 0x9c, 0x79, 0xf5, 0x74, 0x92, 0x1d, 0xbb, 0x51, 0xb0, 0xdc, 0x70, 0x9d, 0xcd, 0xc3, 0x3e, 0xea, 0xff, 0x21, 0x88, 0x20, 0x5f, 0x3b, 0xce, 0xd0, 0x0c, 0x41, 0xd1, 0xc4, 0x73, 0x81, 0xf8, 0xdb, 0xcd, 0xdb, 0xf3, 0x14, 0xe8, 0x75, 0x9e, 0xe8, 0x2b, 0xb0, 0x28, 0xdd, 0xd5, 0x5a, 0x74, 0x58, 0x85, 0x25, 0xbf, 0xb2, 0xff, 0x57, 0x84, 0x8f, 0x2d, 0xc4, 0x9c, 0x6b, 0x64, 0xf9, 0xaa, 0x76, 0xe9, 0xbb, 0xb6, 0xa2, 0xb4, 0xb0, 0x18, 0xfa, 0x73, 0x5b, 0x98, 0x35, 0xd2, 0x4e, 0xd3, 0x8b, 0xfa, 0x9a, 0xe1, 0xc7, 0x57, 0x8b, 0x34, 0x9e, 0x9f, 0x92, 0xc3, 0x3f, 0x10, 0x83, 0x68, 0x2b, 0xf9, 0x00, 0x87, 0x47, 0x7b, 0x35, 0xf1, 0x2f, 0x91, 0xc7, 0x08, 0xce, 0x4e, 0x06, 0x23, 0x2c, 0x66, 0x6a, 0x34, 0x86, 0xf0, 0x3d, 0xa8, 0xa4, 0x6a, 0x95, 0x8e, 0x67, 0xfe, 0x85, 0xfc, 0xa2, 0x03, 0x94, 0xae, 0x2a, 0xc7, 0x6e, 0xf1, 0x31, 0x8c, 0xda, 0xbf, 0xcf, 0xd0, 0xec, 0x2c, 0xe2, 0xd2, 0x7c, 0x01, 0x18, 0x51, 0xd7, 0xa6, 0x4a, 0x97, 0xb3, 0x45, 0x0c, 0xb6, 0x69, 0x2c, 0x82, 0x12, 0x5e, 0x73, 0x75, 0x1f, 0xc2, 0xdf, 0xa5, 0x6c, 0x7e, 0x07, 0x61, 0xe1, 0x67, 0xb5, 0x56, 0x45, 0xb8, 0x8f, 0xa5, 0x02, 0xbf, 0xf7, 0x38, 0x2d, 0xd6, 0x2f, 0x55, 0xc1, 0x95, 0xc1, 0x73, 0x2b, 0x46, 0x1e, 0x4d, 0x0c, 0x99, 0x85, 0x36, 0x3a, 0x9a, 0x26, 0xac, 0x08, 0xdf, 0x88, 0x2f, 0xc7, 0x06, 0x28, 0x54, 0x8c, 0x5f, 0x63, 0x15, 0x34, 0xe5, 0x95, 0x6b, 0xa6, 0x73, 0x83, 0x1f, 0x58, 0x34, 0xf6, 0xdc, 0x15, 0x5c, 0xa9, 0x8a, 0xfd, 0x15, 0x65, 0xd7, 0xcd, 0xbc, 0x6b, 0x16, 0x60, 0x4e, 0x12, 0x4d, 0x76, 0x1d, 0xb1, 0x89, 0xb5, 0xc8, 0xbf, 0x75, 0xed, 0x69, 0x39, 0x2b, 0xa0, 0x10, 0x44, 0x4a, 0xc2, 0x71, 0x14, 0x49, 0xbd, 0xd9, 0x0c, 0x0b, 0xb8, 0x67, 0x27, 0xb3, 0x19, 0x78, 0x96, 0xb9, 0x48, 0x63, 0xab, 0x3e, 0xb6, 0x67, 0xf5, 0x9c, 0x1f, 0xe1, 0xad, 0x42, 0x0c, 0xc2, 0x50, 0xbf, 0x9b, 0x41, 0x8e, 0x1c, 0x82, 0xcd, 0x63, 0x6f, 0x52, 0x46, 0x84, 0xad, 0xf9, 0x6c, 0xfc, 0xc0, 0x8b, 0x98, 0x17, 0xd9, 0x42, 0xaa, 0x7f, 0x08, 0xc3, 0x42, 0xa5, 0x0a, 0xa2, 0x33, 0x62, 0x62, 0x29, 0x34, 0xdf, 0xab, 0x55, 0xd9, 0xb2, 0x2c, 0x22, 0xc2, 0x49, 0xad, 0x08, 0x13, 0x8c, 0x89, 0xc6, 0x23, 0xbe, 0x05, 0x5e, 0x79, 0xa4, 0xe0, 0x61, 0xf4, 0xea, 0x2b, 0x6c, 0x49, 0xc2, 0x5b, 0xf3, 0xb3, 0xce, 0x9d, 0x3d, 0xe5, 0x40, 0x69, 0xb0, 0x44, 0x40, 0x5a, 0x4f, 0x53, 0x8e, 0x3d, 0x81, 0x6e, 0x68, 0x68, 0x14, 0xbc, 0xae, 0x4d, 0x81, 0x5f, 0x44, 0x4e, 0x72, 0xed, 0xb8, 0xd3, 0x81, 0x24, 0x24, 0x9a, 0x43, 0xd9, 0x56, 0x4f, 0x85, 0x32, 0x2f, 0x5d, 0xd5, 0x15, 0x49, 0x03, 0x45, 0xe0, 0xdc, 0xaa, 0x6b, 0x5b, 0xe3, 0x76, 0xac, 0xeb, 0x7a, 0x1b, 0xbb, 0x08, 0x8b, 0xf2, 0x5c, 0xf0, 0xa9, 0x4c, 0x6e, 0x9d, 0x3c, 0x06, 0x28, 0xf5, 0xdf, 0x5d, 0xa3, 0x42, 0x06, 0x04, 0x98, 0xe1, 0xe4, 0x74, 0x6c, 0x3e, 0x8c, 0x84, 0x69, 0x00, 0x56, 0x39, 0x4f, 0x80, 0x84, 0xdf, 0x0b, 0x80, 0x25, 0x58, 0xc6, 0x1a, 0x3a, 0xb5, 0x21, 0xf6, 0x18, 0x03, 0xbf, 0xc0, 0x0d, 0x67, 0x05, 0xd9, 0x46, 0x6e, 0x1d, 0x4d, 0xf0, 0x9e, 0x41, 0x06, 0x9e, 0x51, 0x36, 0x3f, 0xeb, 0xc3, 0x16, 0x3b, 0x60, 0x69, 0x53, 0x36, 0x98, 0x84, 0xf9, 0x9c, 0xa1, 0xf7, 0x33, 0x79, 0xa6, 0x55, 0x11, 0x30, 0xcb, 0x3f, 0x88, 0x71, 0x59, 0xed, 0xbb, 0x65, 0x1b, 0x0a, 0x78, 0x2b, 0x08, 0xc5, 0x06, 0x88, 0x21, 0x25, 0x1e, 0xda, 0x9d, 0x9c, 0x37, 0x4e, 0x44, 0xe0, 0x07, 0x53, 0x19, 0xf6, 0x46, 0x4f, 0x3b, 0x8f, 0xb5, 0x90, 0x0d, 0x98, 0x5f, 0x85, 0x95, 0x0d, 0x1e, 0x2e, 0x22, 0x0e, 0x62, 0xd1, 0x32, 0x34, 0x2e, 0xef, 0x92, 0x25, 0x63, 0x76, 0xc7, 0x66, 0x41, 0x38, 0xad, 0x71, 0x2b, 0x9c, 0x5e, 0x08, 0xaa, 0x93, 0x55, 0xc8, 0xb5, 0xce, 0xd4, 0x01, 0x30, 0x2f, 0x82, 0xc5, 0xb2, 0x7d, 0x59, 0x3f, 0x8b, 0x5b, 0xbf, 0x46, 0x06, 0x7b, 0xf3, 0x32, 0xeb, 0x0f, 0xab, 0xef, 0x48, 0x80, 0xfc, 0x50, 0x71, 0x63, 0x79, 0xa5, 0x46, 0xa9, 0x9f, 0x8f, 0xb4, 0x15, 0x71, 0x13, 0x7f, 0xf4, 0x5f, 0xee, 0x3e, 0x08, 0x6c, 0x28, 0xa7, 0xc5, 0x90, 0xec, 0x0c, 0xc0, 0x5b, 0x97, 0x26, 0x64, 0xdc, 0x0f, 0x12, 0xe6, 0xc1, 0x56, 0x99, 0x7c, 0xbf, 0x5f, 0xb4, 0xca, 0x35, 0x20, 0x4f, 0x9d, 0x0c, 0xe8, 0x4e, 0xdc, 0xe1, 0xf3, 0xce, 0xbc, 0x66, 0x3c, 0xad, 0x32, 0x05, 0x92, 0x4c, 0xae, 0xc7, 0xee, 0x93, 0x06, 0x75, 0x04, 0x36, 0xb0, 0xfd, 0x18, 0x37, 0x35, 0x16, 0x13, 0xad, 0xe2, 0x27, 0xd6, 0xc3, 0xc1, 0x65, 0xce, 0x03, 0xc8, 0x3c, 0xc8, 0xd5, 0x4f, 0xf1, 0x07, 0x42, 0xc8, 0x85, 0x94, 0xfe, 0xaa, 0xdc, 0xd6, 0xa6, 0xae, 0x1f, 0x62, 0x46, 0x3e, 0x5e, 0x14, 0x1e, 0x2a, 0x7a, 0x5f, 0xa6, 0x9e, 0x42, 0xe1, 0xcf, 0x51, 0xdc, 0x3b, 0x8c, 0xfe, 0x67, 0x1f, 0x91, 0x18, 0xde, 0xab, 0x5a, 0xba, 0x3f, 0xf5, 0x70, 0xdd, 0xed, 0xe7, 0xe8, 0xcd, 0x53, 0x4d, 0x2c, 0xde, 0xcb, 0x2c, 0xfe, 0x5a, 0xbe, 0x55, 0xb9, 0xbf, 0x0c, 0x3b, 0xda, 0x27, 0xae, 0x02, 0xc0, 0x08, 0x9a, 0xd8, 0xb0, 0x1d, 0xe6, 0x88, 0x1c, 0xa4, 0x31, 0x4c, 0x25, 0xca, 0x3f, 0xe3, 0x5e, 0x64, 0xe3, 0xe4, 0xd3, 0xdf, 0x22, 0x52, 0x4a, 0x7a, 0x95, 0x70, 0xc8, 0xb2, 0x0f, 0xd7, 0x57, 0xfe, 0x80, 0xc5, 0x07, 0xbd, 0x19, 0xb8, 0x33, 0x6d, 0xb1, 0x3c, 0x05, 0x1d, 0x68, 0x01, 0x3c, 0x25, 0x8a, 0x30, 0x2d, 0x14, 0xb6, 0xff, 0x08, 0xea, 0x3f, 0x84, 0x5d, 0x88, 0xd2, 0xc6, 0xdf, 0x64, 0x59, 0x1a, 0x67, 0x81, 0x20, 0xad, 0x3c, 0x9f, 0x36, 0x5d, 0x91, 0xaf, 0x17, 0xcd, 0x4f, 0x89, 0x87, 0xb8, 0x15, 0xe1, 0xc1, 0x85, 0x7d, 0x77, 0xd1, 0x1c, 0xa2, 0x8f, 0x3f, 0xf9, 0xdf, 0xa1, 0xed, 0x7e, 0xd9, 0x51, 0x42, 0x8e, 0xbf, 0xa1, 0x88, 0x57, 0xd0, 0x66, 0x93, 0x6f, 0x1e, 0xf9, 0xa4, 0x23, 0x92, 0x2e, 0x8d, 0x0c, 0x31, 0x8a, 0x15, 0xe3, 0x9d, 0xb0, 0x9d, 0x95, 0xdf, 0x1d, 0x04, 0x9a, 0x63, 0x15, 0xc9, 0x83, 0x44, 0xdd, 0x6f, 0xd3, 0xcb, 0x2b, 0x26, 0x10, 0x32, 0xdb, 0xa7, 0x1a, 0xad, 0xe3, 0x60, 0xbb, 0xab, 0x89, 0xd1, 0x7e, 0x58, 0xd4, 0x36, 0xc5, 0x67, 0x40, 0x66, 0x16, 0x10, 0xb5, 0xfb, 0xb6, 0x54, 0xba, 0xb3, 0x79, 0x88, 0xe7, 0x16, 0xd8, 0x11, 0x98, 0x59, 0x44, 0x6d, 0xe9, 0x83, 0xba, 0x73, 0xde, 0xce, 0x98, 0xdb, 0xe1, 0x50, 0xaf, 0x00, 0x72, 0xda, 0x99, 0xe5, 0x1a, 0x21, 0x4c, 0x76, 0xa0, 0x1b, 0xf0, 0x11, 0x80, 0xac, 0xee, 0x45, 0x99, 0x82, 0x4a, 0xda, 0x26, 0x3e, 0x32, 0x11, 0xef, 0xd4, 0xd7, 0x2c, 0xc1, 0x34, 0x7b, 0x31, 0x1b, 0x2a, 0xcb, 0xec, 0x2a, 0x82, 0x70, 0x33, 0xf7, 0x71, 0xe1, 0x6e, 0xe0, 0x30, 0x7b, 0x56, 0x45, 0xea, 0xd3, 0xfc, 0x83, 0xd8, 0x4b, 0x0d, 0x26, 0xab, 0xe3, 0x55, 0x5a, 0x2a, 0x52, 0x83, 0xa3, 0x1c, 0x56, 0x2c, 0xce, 0x68, 0x48, 0x12, 0x28, 0x7b, 0xf3, 0xa5, 0xed, 0xea, 0xa6, 0xca, 0x03, 0x58, 0x88, 0xdc, 0xe8, 0x9b, 0x2c, 0xf0, 0xea, 0x1a, 0x65, 0x5e, 0x96, 0x79, 0x5c, 0x7d, 0x72, 0x79, 0xdf, 0xad, 0xef, 0x19, 0xfc, 0x9b, 0x99, 0x02, 0xcf, 0xc0, 0x91, 0x21, 0x98, 0x2b, 0x3d, 0x96, 0x10, 0x81, 0x3e, 0xcd, 0xfe, 0x42, 0xa2, 0xea, 0x05, 0x4d, 0x5b, 0x6b, 0xc0, 0xa7, 0xf0, 0x08, 0x11, 0x78, 0x73, 0xde, 0xb5, 0x56, 0xb3, 0xcd, 0x1c, 0xc6, 0xb2, 0x1f, 0x78, 0x00, 0x5a, 0x6a, 0x15, 0xf3, 0x6b, 0xb7, 0xe8, 0x89, 0xb8, 0xe3, 0x6a, 0x2c, 0x93, 0x46, 0xa7, 0x89, 0x86, 0x93, 0x91, 0x94, 0x44, 0xff, 0x9b, 0xcc, 0xde, 0xa6, 0x83, 0xc0, 0x3a, 0x2a, 0x6f, 0xd2, 0xc2, 0x9d, 0x3c, 0x3b, 0x59, 0xa1, 0x13, 0x4f, 0x93, 0xcd, 0x3d, 0x02, 0x25, 0x53, 0x38, 0xac, 0x9a, 0xe0, 0x0a, 0x09, 0x48, 0xc4, 0xd5, 0x84, 0x83, 0x53, 0xac, 0xb5, 0x10, 0x8b, 0xa5, 0x28, 0xdc, 0xf7, 0x2f, 0x60, 0xee, 0xd2, 0xa6, 0x1b, 0x9b, 0x70, 0x25, 0xd8, 0xf9, 0xda, 0x9c, 0x97, 0x96, 0xb9, 0x22, 0xe0, 0x69, 0x75, 0x8c, 0x06, 0x08, 0x9d, 0x3e, 0xad, 0x1c, 0x8a, 0x41, 0x8a, 0x12, 0x3f, 0x96, 0x6a, 0x14, 0x94, 0xca, 0x76, 0x38, 0x94, 0xcb, 0xb5, 0xf7, 0x23, 0xfa, 0xd2, 0xe0, 0xe4, 0x81, 0x20, 0x8d, 0x59, 0xe7, 0xdb, 0xd7, 0x4c, 0xe2, 0xb1, 0x46, 0x6e, 0x6c, 0x80, 0xcb, 0x3f, 0x18, 0x62, 0xb2, 0x2d, 0xa7, 0xe7, 0xd2, 0x00, 0xd6, 0xa1, 0x07, 0x75, 0x7b, 0xe6, 0xe2, 0x29, 0xd0, 0xd1, 0x9e, 0xb9, 0x0f, 0x8a, 0x56, 0x28, 0x3f, 0xc7, 0x76, 0x81, 0x4d, 0x93, 0x70, 0xbd, 0x5e, 0x4f, 0xb0, 0xe6, 0x64, 0xf6, 0xd1, 0x7d, 0xef, 0xa5, 0x11, 0x1a, 0x47, 0x5a, 0x02, 0x52, 0xb7, 0xfb, 0x83, 0xdd, 0x2b, 0x9b, 0xef, 0xf8, 0xfe, 0xfa, 0x94, 0x09, 0x0d, 0x4a, 0x67, 0x82, 0x10, 0x39, 0xf5, 0x07, 0x2a, 0x2b, 0x9d, 0xd3, 0xbe, 0xc7, 0xfd, 0x58, 0x85, 0xb6, 0xaa, 0x25, 0xdd, 0xa7, 0x24, 0x0d, 0x64, 0x97, 0x09, 0x86, 0xc6, 0x4f, 0x88, 0x4f, 0xd3, 0x2e, 0x19, 0x56, 0xd5, 0x28, 0x6b, 0xd8, 0x20, 0x0f, 0x9e, 0xca, 0xea, 0x11, 0xb3, 0x78, 0x5d, 0x83, 0x41, 0x6c, 0xeb, 0xdd, 0x69, 0x91, 0xe2, 0x05, 0x0b, 0x98, 0x40, 0xd0, 0x3a, 0x9b, 0xc8, 0xc6, 0xee, 0x00, 0x55, 0x25, 0xf9, 0xa1, 0x6f, 0x29, 0x3d, 0x29, 0x1c, 0x8b, 0x1b, 0xc1, 0xf8, 0x47, 0x2f, 0xed, 0x88, 0xa3, 0x3a, 0xb0, 0xcc, 0x6d, 0x5f, 0xf7, 0x13, 0x84, 0x93, 0x35, 0x13, 0x9a, 0x4f, 0x4a, 0x39, 0x37, 0x87, 0xa9, 0x3e, 0x01, 0xe0, 0xba, 0xfb, 0x3c, 0x1e, 0x7d, 0x7e, 0x8d, 0xdb, 0x71, 0x5d, 0x03, 0x7f, 0xb4, 0x4a, 0x57, 0x6c, 0x6b, 0xe8, 0x73, 0x79, 0x64, 0xde, 0x32, 0xa2, 0xfa, 0x29, 0x67, 0xfe, 0x39, 0xb6, 0x20, 0xf1, 0x43, 0x30, 0x2c, 0xa2, 0xf2, 0x17, 0xda, 0xaf, 0xbf, 0x12, 0x04, 0x20, 0xe3, 0x86, 0x4c, 0x9a, 0xbc, 0x67, 0xa6, 0xd5, 0x71, 0x4e, 0x17, 0x50, 0xd9, 0xcc, 0xbc, 0x44, 0x99, 0xff, 0x0d, 0xd6, 0x8d, 0x62, 0x63, 0x90, 0x6a, 0xe9, 0xb8, 0x12, 0xa1, 0x4e, 0xae, 0x05, 0x86, 0xa5, 0xd3, 0x51, 0xb1, 0x37, 0x24, 0x90, 0xa4, 0x8d, 0xd0, 0xc2, 0xaf, 0xcb, 0x3e, 0x42, 0x11, 0x40, 0x50, 0xf9, 0x60, 0x3a, 0xea, 0xd1, 0x2b, 0x1f, 0xae, 0x6c, 0xdd, 0xb9, 0x0a, 0x17, 0xe4, 0xd2, 0x75, 0xf9, 0x13, 0x01, 0xf5, 0x90, 0x45, 0xc3, 0xe5, 0x5f, 0x44, 0xcd, 0xf5, 0xe0, 0xe9, 0xa1, 0x72, 0xc0, 0x84, 0x60, 0xc8, 0x4b, 0x7d, 0xdf, 0x45, 0x26, 0x3c, 0xfc, 0x1f, 0x3c, 0x47, 0x33, 0xb9, 0xfa, 0xaa, 0x6c, 0x22, 0xbf, 0x9c, 0x17, 0xde, 0x8e, 0x5f, 0x7b, 0xea, 0x07, 0x68, 0x4b, 0xfa, 0x95, 0xc0, 0x7b, 0x05, 0xe8, 0xaa, 0x51, 0x03, 0xa6, 0x86, 0xbf, 0xf6, 0x5d, 0xf5, 0xf0, 0x27, 0xbd, 0x3e, 0x21, 0xb2, 0x04, 0xf1, 0xb2, 0x44, 0xb9, 0xca, 0x7d, 0x24, 0x9d, 0xd7, 0x66, 0x70, 0xdf, 0xdd, 0x33, 0xaa, 0x8f, 0xf9, 0x9f, 0x73, 0x55, 0x83, 0xa9, 0x95, 0x63, 0x37, 0x32, 0x47, 0xa8, 0x97, 0xc7, 0xad, 0x46, 0x8b, 0xbc, 0x9f, 0x47, 0x4b, 0x7a, 0xab, 0x8b, 0x7e, 0x19, 0x5d, 0x05, 0xa4, 0x32, 0xbd, 0x28, 0xb1, 0xee, 0x1a, 0x9b, 0xfa, 0x63, 0x06, 0x34, 0x55, 0x21, 0xa2, 0x24, 0x7c, 0x07, 0x1c, 0x6f, 0xb3, 0x5c, 0x75, 0xa0, 0xab, 0x1b, 0x88, 0xba, 0xa5, 0x8d, 0x48, 0x71, 0xda, 0x1d, 0x49, 0x9a, 0x1b, 0x69, 0x82, 0xe1, 0xb5, 0x95, 0x51, 0xba, 0x97, 0xe4, 0xbf, 0x9a, 0xb7, 0x89, 0x06, 0x66, 0xb1, 0xba, 0x50, 0x2c, 0xb1, 0x07, 0xc2, 0x11, 0x94, 0xea, 0xb9, 0x8a, 0x4a, 0x9f, 0x53, 0xcf, 0x7f, 0x35, 0x32, 0x8d, 0x7a, 0xe6, 0x7c, 0xdb, 0x45, 0xa4, 0x26, 0x70, 0x0e, 0xf4, 0x73, 0x13, 0xcd, 0xff, 0xb7, 0x52, 0x27, 0xe6, 0x61, 0x77, 0x92, 0x57, 0x38, 0xb8, 0xbb, 0x5e, 0xe5, 0xae, 0x25, 0x7d, 0xb2, 0x09, 0x12, 0xfe, 0x91, 0x81, 0xa6, 0x88, 0x60, 0x10, 0x4a, 0xf1, 0x6b, 0x5e, 0x4f, 0x53, 0x33, 0x7d, 0xd3, 0x62, 0x6e, 0xd6, 0xe9, 0xfc, 0x4e, 0x63, 0xf4, 0x02, 0x06, 0x1f, 0x54, 0x67, 0x8b, 0xbb, 0x45, 0x86, 0x97, 0x93, 0x03, 0xb9, 0xf4, 0xe0, 0x33, 0x27, 0xf7, 0x2f, 0x7e, 0xdd, 0x4b, 0x12, 0x7f, 0x21, 0xef, 0x15, 0xdf, 0x02, 0x82, 0xf3, 0xbe, 0x34, 0xbf, 0x0a, 0x55, 0x1b, 0x44, 0x0d, 0xda, 0x26, 0x97, 0xf9, 0xa4, 0x5e, 0x6a, 0x4a, 0x90, 0x3f, 0x1e, 0x6e, 0xa3, 0xc6, 0x87, 0x7a, 0xf1, 0xcb, 0xef, 0x1c, 0xbd, 0x91, 0x5d, 0xd0, 0xe1, 0x9c, 0x17, 0x57, 0x71, 0xc2, 0x65, 0x66, 0x9b, 0x85, 0x98, 0x9b, 0xd1, 0xa0, 0x4b, 0xb4, 0x2b, 0xe0, 0xe9, 0x03, 0x06, 0x35, 0x6f, 0x1d, 0xf2, 0x09, 0x73, 0xd3, 0xcb, 0xd0, 0x66, 0x63, 0x25, 0xe1, 0x16, 0xef, 0xed, 0x84, 0x76, 0x2d, 0x4e, 0x4c, 0xa2, 0x61, 0xd2, 0xa7, 0x1e, 0x88, 0xca, 0xb3, 0x5e, 0xd6, 0xef, 0x53, 0x8c, 0x63, 0x49, 0x83, 0x85, 0x22, 0x50, 0xe8, 0x25, 0x12, 0x52, 0xab, 0xc4, 0xb8, 0x14, 0x88, 0x00, 0xcc, 0xbc, 0x22, 0xbd, 0x33, 0xee, 0x9a, 0x6b, 0x2d, 0x36, 0x5f, 0x88, 0xd0, 0xa6, 0x48, 0x65, 0xb5, 0xc0, 0xe0, 0x2c, 0xf1, 0x96, 0x01, 0x22, 0x46, 0x2f, 0xa4, 0x2a, 0x9b, 0x2d, 0xf7, 0x8b, 0xaa, 0xad, 0xb0, 0xf2, 0xf9, 0x6f, 0xa1, 0xbb, 0x0b, 0x37, 0x8d, 0x6c, 0xd7, 0x72, 0x3b, 0x82, 0x79, 0x1d, 0xc8, 0x71, 0x28, 0xe3, 0x41, 0xe6, 0x68, 0x85, 0x72, 0x4f, 0x80, 0x7f, 0xf8, 0x9d, 0x2f, 0xe9, 0x9e, 0x48, 0x9b, 0x9b, 0xe6, 0x94, 0x8a, 0x94, 0xe5, 0x14, 0xd4, 0x9d, 0x54, 0x6c, 0x19, 0x29, 0xe5, 0x5a, 0xaf, 0x80, 0xd3, 0xf8, 0xde, 0x1c, 0xbd, 0x3b, 0x50, 0x53, 0xb4, 0xc0, 0xc3, 0x37, 0x93, 0xc8, 0x01, 0xbb, 0x8e, 0x81, 0x12, 0x17, 0x0e, 0x87, 0xb0, 0x6d, 0xbd, 0xaa, 0xfb, 0xac, 0xdc, 0xf2, 0x6e, 0xb5, 0xdd, 0xe0, 0x12, 0xbc, 0x2e, 0xf7, 0xf1, 0xf1, 0x53, 0x7b, 0xce, 0x60, 0x37, 0x79, 0x13, 0x16, 0xc4, 0x07, 0x0b, 0x86, 0xb1, 0xcd, 0x51, 0x2b, 0x9b, 0xc4, 0x89, 0x6e, 0x58, 0x3e, 0x4d, 0xc9, 0x88, 0x27, 0x6a, 0x2d, 0x6c, 0x8a, 0x4d, 0xa1, 0xfc, 0x56, 0xb8, 0x2d, 0x33, 0x63, 0xba, 0xf6, 0xae, 0xb0, 0xdd, 0xaa, 0x75, 0xef, 0xa1, 0x1e, 0x19, 0x43, 0x29, 0x36, 0xff, 0x48, 0x35, 0x06, 0xfb, 0x54, 0x50, 0x36, 0x20, 0xfc, 0x4b, 0xab, 0xd7, 0xda, 0xe9, 0x63, 0x2f, 0x8e, 0xdc, 0xa1, 0x74, 0x03, 0xf0, 0x4b, 0x03, 0xf4, 0x87, 0x90, 0x5c, 0xae, 0x45, 0xcd, 0x79, 0x17, 0x0c, 0xb2, 0x5f, 0xef, 0x2b, 0xa1, 0xf2, 0x56, 0xd2, 0x56, 0x0d, 0x8e, 0xca, 0xcd, 0xd2, 0x03, 0x62, 0x60, 0x3f, 0x88, 0xad, 0x31, 0x02, 0xe4, 0xea, 0xc7, 0x8f, 0x8d, 0x44, 0xfc, 0x6f, 0xb3, 0xbc, 0x16, 0xdb, 0x80, 0x63, 0x34, 0x89, 0x9f, 0xcc, 0xec, 0xc6, 0xfb, 0xc1, 0x32, 0xc5, 0xc9, 0x35, 0x7b, 0x37, 0xc8, 0x7a, 0x23, 0x1b, 0xc7, 0xb4, 0x0c, 0xd8, 0x69, 0x8e, 0x89, 0x89, 0x25, 0x2b, 0x7a, 0x98, 0x90, 0x60, 0xb8, 0x8e, 0xdf, 0x20, 0xb3, 0x29, 0xa7, 0x37, 0x59, 0xb0, 0xe8, 0x3b, 0x3a, 0x83, 0x4a, 0xc0, 0xea, 0xf6, 0xa6, 0xcc, 0xa7, 0x5f, 0xc8, 0x8b, 0x3c, 0x6e, 0x74, 0x43, 0x25, 0xbd, 0xa6, 0x89, 0xf4, 0xa8, 0x1e, 0xb6, 0xf4, 0x5f, 0x1c, 0x95, 0x0b, 0x39, 0x69, 0x5e, 0xe5, 0x4c, 0x96, 0xe8, 0x4e, 0x3a, 0x88, 0x1a, 0xe0, 0x4d, 0x35, 0xa3, 0xdf, 0xc7, 0xa8, 0xea, 0x61, 0x73, 0x4b, 0x48, 0xb2, 0x80, 0x65, 0x76, 0xf6, 0x8f, 0xe2, 0x41, 0x10, 0x0b, 0x53, 0x85, 0xc3, 0xb9, 0x35, 0x58, 0x17, 0x90, 0x76, 0x86, 0xff, 0xca, 0x35, 0x3e, 0x38, 0x3b, 0xca, 0x0a, 0x74, 0xe2, 0x06, 0x04, 0xb8, 0xbe, 0xbb, 0x48, 0x03, 0xe2, 0x7f, 0xa5, 0x30, 0xcc, 0xae, 0x98, 0x1d, 0xf3, 0xae, 0x7a, 0x0d, 0x9f, 0x77, 0xf8, 0x4b, 0xfd, 0x52, 0xc4, 0x11, 0x73, 0xe0, 0x8a, 0xa7, 0x31, 0x5f, 0x26, 0xcf, 0x09, 0x29, 0x14, 0x61, 0x80, 0x7d, 0x27, 0x33, 0x25, 0x82, 0x7e, 0x3b, 0x21, 0x89, 0xb5, 0xf8, 0x10, 0x93, 0x58, 0x0d, 0x0f, 0x13, 0x9d, 0x30, 0x16, 0xf5, 0x52, 0x42, 0x89, 0xde, 0x14, 0xbf, 0x09, 0xb6, 0xc2, 0x59, 0x90, 0x64, 0x31, 0xe0, 0xbd, 0xd8, 0x21, 0x65, 0x6c, 0x4f, 0x70, 0x9f, 0x8a, 0xd2, 0x8e, 0x8e, 0x28, 0x00, 0x31, 0x5d, 0xcd, 0x0e, 0x4a, 0x8d, 0x11, 0x0c, 0x37, 0x50, 0x67, 0x6a, 0x3a, 0x33, 0x3b, 0xba, 0x2a, 0x00, 0x3d, 0xb7, 0x68, 0xe3, 0xfc, 0x87, 0x15, 0xcb, 0xb6, 0x3d, 0x82, 0x13, 0x6e, 0xa2, 0xe8, 0x62, 0x40, 0x35, 0x5a, 0xd0, 0xf2, 0x70, 0xf7, 0x4a, 0xcb, 0x4d, 0x64, 0x37, 0xa8, 0x09, 0x7a, 0x5b, 0x4c, 0x28, 0x3b, 0xfc, 0xf8, 0xb9, 0x0b, 0x44, 0x3b, 0xdb, 0x1d, 0xe7, 0x0c, 0x80, 0x2b, 0x06, 0x16, 0x71, 0x6a, 0x52, 0x53, 0x93, 0xbd, 0x74, 0xdc, 0x68, 0x28, 0xad, 0x00, 0xd8, 0x88, 0xb9, 0x93, 0x32, 0x82, 0xfa, 0x88, 0x6e, 0xba, 0xd2, 0xc3, 0xb5, 0x45, 0x51, 0x28, 0x23, 0x60, 0x10, 0xf8, 0xcb, 0x62, 0x5c, 0x5d, 0xfb, 0xef, 0x97, 0x43, 0xc2, 0x6f, 0xdc, 0x6a, 0xb0, 0xbe, 0xe2, 0xb9, 0xdd, 0x25, 0x23, 0xd6, 0x2c, 0x8a, 0x3d, 0xf3, 0xd1, 0xe3, 0x98, 0xeb, 0x11, 0xf1, 0x49, 0x8d, 0x49, 0x2a, 0x36, 0x37, 0x32, 0xf7, 0x7b, 0xa8, 0x63, 0x1f, 0x0d, 0x0f, 0x18, 0x83, 0x9d, 0x67, 0x31, 0x0d, 0xc0, 0x07, 0x7e, 0xe3, 0x4c, 0x75, 0x39, 0xe0, 0x05, 0x7c, 0xd4, 0x44, 0x79, 0x7e, 0xf6, 0xaa, 0x28, 0x0b, 0xc0, 0x3b, 0xe8, 0xb1, 0x54, 0x22, 0x88, 0x16, 0x98, 0x3f, 0xb4, 0x45, 0x37, 0x20, 0x18, 0x46, 0xe9, 0x2d, 0xc9, 0xf1, 0xf5, 0x22, 0xe0, 0x03, 0xf4, 0xc3, 0x68, 0x72, 0xd7, 0xcb, 0x7a, 0xfe, 0x2b, 0x25, 0xa6, 0x09, 0x9c, 0x5e, 0x95, 0xa8, 0xb8, 0x5b, 0xed, 0xfa, 0xf6, 0x47, 0x75, 0xb9, 0xf7, 0xd0, 0x7a, 0x0e, 0x0b, 0x93, 0x71, 0xaa, 0xf7, 0xd4, 0xdd, 0x12, 0xf6, 0x73, 0x73, 0x3a, 0xfd, 0x1b, 0x7c, 0x56, 0x43, 0xbd, 0x7c, 0xed, 0x01, 0x3d, 0x11, 0x2f, 0x76, 0x6b, 0x1d, 0x88, 0x2f, 0x34, 0x27, 0x75, 0x85, 0x1a, 0xff, 0x97, 0x67, 0xe1, 0xa1, 0x06, 0x5a, 0x8b, 0x5c, 0xe7, 0xbd, 0x87, 0x34, 0x41, 0x52, 0x26, 0x84, 0x0c, 0xfa, 0x4e, 0xe8, 0x8b, 0xc0, 0x72, 0x59, 0xdc, 0x19, 0xc1, 0x9a, 0xce, 0x6a, 0x9e, 0xd4, 0xf2, 0xcb, 0x51, 0x7d, 0xf5, 0x0b, 0xfc, 0x7d, 0x2c, 0xf4, 0xd0, 0x94, 0x71, 0xd0, 0x80, 0xf6, 0x2e, 0x2c, 0xf6, 0x39, 0xb7, 0xdb, 0x46, 0x71, 0xdd, 0x3e, 0xe0, 0x9a, 0xc0, 0xc3, 0x09, 0x36, 0xe4, 0xac, 0x8c, 0x36, 0x87, 0x12, 0xac, 0x1e, 0x32, 0x29, 0x5e, 0x65, 0x8f, 0xc5, 0xb5, 0x1a, 0x7a, 0x1d, 0x9e, 0xce, 0x5a, 0xcf, 0xcd, 0xad, 0xb2, 0x25, 0xf7, 0xee, 0xf3, 0x97, 0x42, 0x6e, 0x95, 0x91, 0xfa, 0x97, 0x65, 0x76, 0x85, 0x87, 0x21, 0xe4, 0x99, 0x6e, 0x42, 0x3a, 0xac, 0x38, 0x19, 0x57, 0xac, 0x6d, 0x1d, 0xa5, 0xf1, 0x55, 0x84, 0x57, 0x70, 0x5f, 0x10, 0xee, 0x31, 0xc3, 0x2c, 0x02, 0x03, 0x67, 0x37, 0x3f, 0x6e, 0x00, 0x20, 0xae, 0xe9, 0x79, 0x33, 0x35, 0x4d, 0x98, 0x32, 0x62, 0x8a, 0xdf, 0xa8, 0x64, 0x98, 0xb0, 0x7a, 0x5a, 0xb1, 0xb5, 0xbf, 0xd1, 0xbe, 0x7f, 0xd1, 0x87, 0x0f, 0x6d, 0xa4, 0x75, 0x4e, 0xd0, 0x57, 0x0d, 0xb6, 0x4c, 0x09, 0xc1, 0x80, 0x82, 0xee, 0xc4, 0x9e, 0xeb, 0xa2, 0x14, 0xac, 0x07, 0xbd, 0xb8, 0x24, 0xb8, 0xa7, 0x46, 0xd1, 0xe8, 0xae, 0xa9, 0x86, 0x72, 0x55, 0x21, 0x0f ],
-const [ 0xbb, 0xa0, 0x96, 0x78, 0x75, 0xc4, 0x74, 0x3a, 0x54, 0xf5, 0xb6, 0x37, 0x53, 0x52, 0xca, 0xb3, 0xf6, 0x62, 0xf2, 0x79, 0x2e, 0x60, 0x47, 0xcd, 0x7d, 0xd6, 0xfd, 0xa1, 0x5a, 0x6e, 0xe8, 0x0c, 0xd7, 0x04, 0x3f, 0xf7, 0x81, 0xff, 0xa1, 0x1a, 0x88, 0xe2, 0x55, 0x27, 0x20, 0x1e, 0xd6, 0x44, 0x26, 0x2b, 0x8f, 0xbf, 0x07, 0xd6, 0xe3, 0xfd, 0xde, 0xdd, 0x70, 0xb4, 0xdc, 0xb9, 0x95, 0x5a, 0xed, 0xbb, 0x31, 0xde, 0x98, 0x5a, 0xae, 0x95, 0x27, 0xcc, 0x3f, 0x77, 0x09, 0xd3, 0x65, 0x8b, 0x74, 0xda, 0xb8, 0xa0, 0x4f, 0x40, 0xe4, 0x3e, 0x4e, 0xf4, 0xf2, 0xdc, 0x5f, 0x42, 0xc9, 0x53, 0x45, 0xec, 0xf4, 0x93, 0x82, 0x7d, 0xa5, 0x95, 0x7b, 0xda, 0xfa, 0x91, 0xd7, 0x1a, 0x80, 0x70, 0x28, 0x97, 0xf6, 0x84, 0xcd, 0x45, 0x53, 0x77, 0x17, 0x43, 0x0a, 0x81, 0xaa, 0xb0, 0x8c, 0xde, 0x26, 0xc0, 0x0e, 0x80, 0x07, 0x0f, 0x8d, 0x01, 0xca, 0x35, 0x10, 0xdb, 0x52, 0x9a, 0x2e, 0xdb, 0x89, 0x8c, 0xcf, 0xd3, 0x4a, 0x8e, 0x37, 0x90, 0x7f, 0xf3, 0x40, 0x0b, 0x86, 0xac, 0xe6, 0xe3, 0xda, 0x5f, 0x09, 0x0b, 0xef, 0xb9, 0x6f, 0xc0, 0x5d, 0x04, 0x09, 0xbf, 0x41, 0xfc, 0x77, 0xb4, 0xe0, 0xde, 0xcd, 0xf5, 0x8e, 0xc3, 0x98, 0x70, 0xcf, 0x2c, 0x1c, 0xe3, 0xbb, 0xde, 0xe0, 0x4b, 0xa7, 0xf0, 0x6d, 0x9e, 0x01, 0x22, 0x52, 0xbc, 0x7c, 0x70, 0x6b, 0xa3, 0x6d, 0xe7, 0x63, 0xe3, 0x75, 0xb8, 0x78, 0x53, 0x61, 0x8b, 0x7e, 0x01, 0x4e, 0x15, 0x27, 0x6f, 0x11, 0xed, 0x81, 0xfc, 0xd6, 0x9b, 0xc0, 0xa0, 0x06, 0xf2, 0x3e, 0xdc, 0x6f, 0xa1, 0xc0, 0xf1, 0x9f, 0x04, 0xfb, 0x51, 0x90, 0x40, 0x57, 0x53, 0x8b, 0x8e, 0xf2, 0x2a, 0x46, 0xd7, 0xe8, 0x18, 0x50, 0x82, 0xd2, 0xdf, 0xae, 0x8a, 0x8c, 0x79, 0xc7, 0xd3, 0x3c, 0x08, 0x7d, 0xbe, 0x8f, 0x10, 0x9d, 0xfb, 0x46, 0xe4, 0x79, 0x9e, 0xf2, 0x5e, 0xd3, 0x75, 0xfb, 0xd3, 0xfd, 0x99, 0xe7, 0x46, 0x3f, 0x44, 0xd9, 0xdc, 0x79, 0xe2, 0x58, 0x90, 0x09, 0x6b, 0x52, 0x28, 0xef, 0xef, 0x61, 0x68, 0x2f, 0x73, 0x4c, 0x85, 0x77, 0xfb, 0xd1, 0xdd, 0x02, 0xe8, 0xa2, 0xe4, 0xbc, 0x84, 0xad, 0x62, 0xa7, 0xdc, 0xa0, 0xdc, 0x7d, 0xce, 0xad, 0x4f, 0x97, 0x62, 0x8b, 0x25, 0x0d, 0x5e, 0xbd, 0x61, 0x1f, 0x14, 0x16, 0x1d, 0xd4, 0x7f, 0x7d, 0x36, 0xe0, 0x8e, 0xee, 0x46, 0xcb, 0xc0, 0xc1, 0xd2, 0x50, 0xf1, 0x2f, 0xc5, 0x04, 0x74, 0x12, 0x1d, 0x38, 0x61, 0xec, 0xe5, 0x1f, 0x30, 0x2b, 0x63, 0x34, 0x87, 0xab, 0x92, 0xd6, 0x51, 0x7d, 0xd3, 0x35, 0x10, 0xe7, 0xdf, 0x72, 0x74, 0xab, 0x00, 0x02, 0x2c, 0x8c, 0x81, 0x54, 0xfc, 0x0f, 0x62, 0xb3, 0x10, 0x7f, 0x51, 0x6d, 0x90, 0x33, 0xd6, 0x35, 0x74, 0x14, 0xce, 0xc6, 0x9a, 0x59, 0x1a, 0xc9, 0x15, 0x95, 0x98, 0xf9, 0xc9, 0xf4, 0x52, 0x85, 0x35, 0xc1, 0xf6, 0xb5, 0x8f, 0x2c, 0x87, 0xd1, 0x16, 0x4b, 0x51, 0x3f, 0xa4, 0x5e, 0x22, 0xeb, 0x82, 0x57, 0xb7, 0xec, 0x81, 0x9a, 0x75, 0x64, 0x46, 0x01, 0x5a, 0xa7, 0xe6, 0x23, 0x32, 0xa0, 0xb3, 0xd6, 0x0e, 0x71, 0x55, 0xf2, 0xf2, 0x5a, 0x1c, 0x58, 0xce, 0xdc, 0x94, 0x33, 0xaf, 0x1e, 0x5a, 0x7e, 0x37, 0x8f, 0x2f, 0xc7, 0x4b, 0xcd, 0x4b, 0x32, 0x0b, 0xc6, 0xf3, 0xc0, 0x07, 0x1d, 0x4e, 0xd1, 0xaf, 0xcf, 0x75, 0xe8, 0x0c, 0x16, 0xc9, 0xaf, 0xae, 0x8d, 0x89, 0x3b, 0xe6, 0x95, 0xa4, 0x90, 0x35, 0xf8, 0xcb, 0x68, 0x03, 0xcd, 0xcb, 0x30, 0x94, 0x9c, 0x1a, 0x54, 0x39, 0xc2, 0xaf, 0xbc, 0xc3, 0x16, 0x17, 0x97, 0x3d, 0xcc, 0xc6, 0x57, 0xdb, 0x9a, 0xab, 0xfc, 0x2d, 0x1a, 0x07, 0x96, 0x98, 0x70, 0x7e, 0x05, 0x07, 0x2c, 0x6f, 0x04, 0xde, 0x72, 0x81, 0x66, 0x30, 0x58, 0x7e, 0x9e, 0x31, 0x8f, 0x65, 0x85, 0xee, 0x46, 0xba, 0x58, 0x3b, 0x4b, 0x21, 0x00, 0xed, 0x73, 0x2b, 0x97, 0x4a, 0x3d, 0x70, 0x27, 0xbe, 0xb2, 0xde, 0xb5, 0xd0, 0x8f, 0x50, 0x7e, 0x53, 0xa6, 0x62, 0x80, 0xe1, 0x82, 0x84, 0x3c, 0x85, 0x4a, 0x4e, 0xbb, 0xb8, 0xe7, 0x14, 0xcf, 0x8f, 0x69, 0xb9, 0x9b, 0x32, 0xa7, 0xc8, 0x55, 0x90, 0x26, 0xc0, 0x4b, 0x51, 0x3d, 0xb0, 0x24, 0x0c, 0x76, 0x04, 0x69, 0xbb, 0x36, 0x9f, 0x44, 0x6c, 0xa1, 0x2a, 0x87, 0x39, 0xb8, 0xab, 0xef, 0x79, 0xc4, 0x59, 0xab, 0x38, 0xf8, 0xaf, 0x18, 0xe5, 0x52, 0xbf, 0xcf, 0x4b, 0xc2, 0xc9, 0xe1, 0xc3, 0x8e, 0x0c, 0x61, 0xa7, 0xf5, 0xdc, 0x23, 0x09, 0x13, 0xf5, 0xc4, 0xa5, 0x04, 0x0f, 0xea, 0x15, 0x4c, 0xb2, 0xcd, 0x44, 0x76, 0x4c, 0xf7, 0x25, 0xfc, 0x81, 0x48, 0xa5, 0x67, 0xc2, 0x3c, 0xde, 0xb7, 0x21, 0x71, 0x8d, 0x05, 0x63, 0x63, 0xc6, 0x67, 0x57, 0x7a, 0xe6, 0x14, 0x67, 0x48, 0xca, 0xc9, 0x6d, 0x0b, 0x3e, 0x6b, 0xc8, 0x7a, 0xb8, 0xed, 0xae, 0xbe, 0x47, 0x74, 0xc3, 0xbe, 0xc6, 0xb9, 0xeb, 0x9f, 0x55, 0xaf, 0x5d, 0x8b, 0x0a, 0x67, 0xfa, 0xb2, 0xe3, 0x30, 0xdc, 0x8f, 0xff, 0x02, 0x31, 0x6d, 0x0e, 0x1d, 0x4a, 0x29, 0x07, 0xed, 0xef, 0x39, 0x19, 0x31, 0xf6, 0xed, 0xe3, 0x5c, 0x14, 0xf5, 0xe7, 0x3b, 0xf2, 0x24, 0x3c, 0xd9, 0x83, 0x74, 0x84, 0xa0, 0x96, 0x49, 0x1e, 0xc0, 0xa7, 0xfa, 0x9d, 0xd5, 0xfb, 0x8d, 0x78, 0xc4, 0xec, 0xc2, 0x02, 0xe5, 0x81, 0x54, 0x9d, 0x68, 0x41, 0x7b, 0x2b, 0xf1, 0x49, 0xb5, 0xc6, 0x86, 0x9d, 0xc6, 0xb1, 0xab, 0xbc, 0xfd, 0x8e, 0xcb, 0x77, 0xba, 0xd1, 0xda, 0x02, 0x2d, 0x74, 0x39, 0x4c, 0x60, 0xed, 0xda, 0x8c, 0x78, 0x5d, 0xa4, 0x1c, 0x38, 0x0a, 0x19, 0x8b, 0xc6, 0x0f, 0x36, 0xee, 0xb2, 0x52, 0x9a, 0x76, 0x34, 0xb7, 0xeb, 0x48, 0xb5, 0x93, 0x76, 0x88, 0x91, 0x64, 0x15, 0xb7, 0x1c, 0xbf, 0x56, 0x40, 0xe3, 0x89, 0xd9, 0x4d, 0x34, 0x6a, 0xfa, 0xdf, 0xe0, 0x7f, 0xb0, 0x1e, 0x3f, 0x4f, 0xb5, 0xee, 0x75, 0x01, 0xe8, 0xc2, 0xf4, 0xcc, 0xef, 0xb5, 0x42, 0xae, 0x20, 0xd7, 0xfd, 0x61, 0xa2, 0xc4, 0x1c, 0x8b, 0xcf, 0x7c, 0x77, 0x35, 0xdd, 0x6e, 0x8a, 0x7e, 0xbe, 0xd6, 0x75, 0x90, 0x44, 0x49, 0x48, 0xd4, 0x89, 0x8e, 0x7e, 0x62, 0x8e, 0xb0, 0xc7, 0xbc, 0x22, 0x51, 0x0b, 0xbb, 0x06, 0x41, 0xab, 0xc9, 0x4e, 0x50, 0x0a, 0x51, 0x0a, 0x60, 0x4c, 0x74, 0x26, 0xbe, 0x5d, 0xfe, 0x8f, 0xb2, 0x35, 0x98, 0x97, 0x54, 0x5b, 0x3f, 0x9b, 0xa2, 0xa8, 0xf4, 0xe3, 0xd0, 0x4e, 0xb5, 0xc9, 0xdf, 0x19, 0xad, 0x1e, 0x71, 0xf4, 0xa8, 0xc9, 0xdc, 0xae, 0xc9, 0xb1, 0x7d, 0xfe, 0x7f, 0xde, 0x4f, 0xc5, 0xb5, 0xdb, 0xbb, 0x94, 0x49, 0x5e, 0xb2, 0x6e, 0xc0, 0x2a, 0xfa, 0xcf, 0x38, 0x35, 0xc5, 0xec, 0x9d, 0x06, 0x88, 0x3d, 0x20, 0x62, 0x0a, 0x39, 0xe5, 0x27, 0xbc, 0x61, 0xfc, 0x78, 0x48, 0x7f, 0x93, 0x1a, 0x6c, 0x30, 0x6a, 0x1e, 0x09, 0xa0, 0x87, 0xc1, 0x77, 0x95, 0x2a, 0x90, 0x1c, 0xaf, 0x03, 0xd0, 0x3d, 0xee, 0xa3, 0x1c, 0x13, 0x74, 0x31, 0x50, 0x22, 0x8c, 0x5e, 0xa6, 0xc6, 0xec, 0x9a, 0x1f, 0x0f, 0x37, 0x89, 0x25, 0xce, 0xc6, 0xb0, 0x6e, 0xf0, 0xa8, 0x75, 0x23, 0x0b, 0xe7, 0x46, 0x42, 0x37, 0x0d, 0x18, 0x41, 0x1f, 0xe7, 0x13, 0xf4, 0x58, 0x89, 0x8b, 0xb0, 0xf1, 0x92, 0x33, 0xb1, 0x4b, 0xb2, 0x8d, 0xb9, 0x2a, 0x69, 0xa5, 0xfa, 0x0d, 0x11, 0xff, 0x36, 0xbb, 0x1e, 0xce, 0x25, 0x1f, 0xa5, 0x66, 0x17, 0x55, 0x1b, 0xf4, 0xda, 0x05, 0x60, 0x6d, 0xde, 0xf0, 0xfb, 0xc4, 0x97, 0xc8, 0xa8, 0x60, 0x23, 0x45, 0x10, 0xcd, 0x2d, 0x75, 0xd7, 0xb2, 0x11, 0x54, 0xdb, 0x03, 0x40, 0x9c, 0xbb, 0x77, 0xe7, 0xde, 0x97, 0x3d, 0xcb, 0xd2, 0x17, 0xeb, 0x77, 0xec, 0xaf, 0xb7, 0x9a, 0x2f, 0x21, 0xe9, 0xab, 0x46, 0x43, 0x90, 0xce, 0xd1, 0x02, 0x74, 0xfb, 0xfd, 0xa7, 0x4d, 0x5d, 0x57, 0x59, 0x32, 0xf8, 0xe2, 0xe3, 0x54, 0x8f, 0x66, 0xb8, 0xec, 0xc5, 0x0c, 0x34, 0x72, 0x82, 0x28, 0x25, 0x10, 0x98, 0x56, 0x8a, 0x56, 0xa7, 0xc8, 0x9b, 0x2f, 0x3e, 0xde, 0x09, 0x14, 0x42, 0xf7, 0x86, 0x7f, 0x94, 0x88, 0x88, 0xa3, 0xee, 0x6b, 0x4a, 0x5a, 0x0e, 0x79, 0x14, 0x5f, 0x17, 0x5a, 0xbd, 0xbd, 0x34, 0x9c, 0x6e, 0x87, 0x7e, 0x03, 0xa8, 0xca, 0x20, 0x20, 0x89, 0xc0, 0xb8, 0x25, 0x4b, 0x46, 0x01, 0xf8, 0x0d, 0x90, 0xb0, 0x86, 0xd6, 0x1c, 0x9b, 0x5a, 0xd7, 0xe4, 0x20, 0x6e, 0xf0, 0xd8, 0xc5, 0x41, 0x76, 0x8b, 0x1c, 0x29, 0x34, 0x2d, 0xea, 0xeb, 0xaf, 0xb9, 0x87, 0x89, 0xaf, 0x6f, 0x88, 0x5b, 0xfa, 0x85, 0x9c, 0x61, 0x63, 0x1a, 0xb4, 0xd8, 0x03, 0x6b, 0x67, 0x0b, 0xc7, 0x49, 0x94, 0x6c, 0x2b, 0xcb, 0x49, 0xe3, 0x44, 0x40, 0xe3, 0x66, 0x04, 0x67, 0x77, 0xca, 0xba, 0xe3, 0x71, 0xd9, 0xd8, 0xe9, 0x7b, 0xa4, 0xf9, 0x3c, 0xa1, 0x1b, 0x22, 0x5b, 0xb2, 0xda, 0x48, 0xf8, 0xe9, 0x46, 0x13, 0xad, 0xcc, 0xd9, 0xe2, 0xeb, 0x55, 0xba, 0x0f, 0x33, 0x50, 0x91, 0x74, 0x88, 0x04, 0x99, 0x2e, 0x24, 0x15, 0xf7, 0xa0, 0x6a, 0xa9, 0x4a, 0xbb, 0x1c, 0xca, 0x83, 0x7d, 0xce, 0x0c, 0xf7, 0xb8, 0x9a, 0x6f, 0xb2, 0x15, 0x16, 0x86, 0x0e, 0x58, 0x83, 0xd9, 0x85, 0xe6, 0x47, 0x89, 0xc4, 0x84, 0x9e, 0x32, 0x00, 0x61, 0x8c, 0x15, 0x8d, 0x57, 0x16, 0x77, 0xad, 0x6e, 0xb1, 0x44, 0xa6, 0xa2, 0xfb, 0xf8, 0x17, 0xe6, 0xa9, 0xbf, 0x8b, 0x68, 0xc0, 0xdb, 0x4f, 0x17, 0x09, 0x47, 0x81, 0x63, 0xbe, 0x9a, 0x6a, 0x43, 0x8a, 0x2d, 0x0e, 0x7d, 0xb1, 0x80, 0x00, 0x22, 0x8a, 0xda, 0x7b, 0x57, 0x36, 0x30, 0xaf, 0x5b, 0x8c, 0x48, 0x59, 0xc6, 0x53, 0x1f, 0x96, 0x0f, 0xb4, 0x87, 0xf9, 0x51, 0xee, 0x14, 0xdb, 0x4f, 0x4c, 0x39, 0xf2, 0xb5, 0x55, 0xaf, 0x26, 0xa1, 0x42, 0x16, 0x9f, 0x61, 0xb5, 0xdf, 0x23, 0x7f, 0xa7, 0x69, 0x9f, 0xfa, 0xa2, 0x6a, 0x03, 0xd7, 0x31, 0x91, 0x53, 0xd8, 0x96, 0x6a, 0xfb, 0x8c, 0xba, 0x81, 0x64, 0x88, 0x6a, 0xca, 0xc4, 0xf3, 0xbf, 0x40, 0x3a, 0x48, 0xde, 0xcd, 0x1a, 0x57, 0xe2, 0x6a, 0x86, 0x8d, 0x17, 0x87, 0x3e, 0x76, 0x69, 0xad, 0xb8, 0x80, 0x1c, 0x62, 0x74, 0x02, 0xbd, 0x4d, 0x8a, 0x7c, 0x58, 0x9a, 0x85, 0x21, 0xeb, 0xa0, 0x73, 0x92, 0x1b, 0xc1, 0x3d, 0xed, 0x26, 0x92, 0x35, 0x06, 0x19, 0x3c, 0xee, 0xf4, 0x43, 0x23, 0x50, 0xd0, 0xe9, 0xc5, 0xeb, 0xb9, 0x3b, 0xe4, 0x8c, 0x1b, 0x87, 0xe7, 0x0e, 0x31, 0xad, 0x7e, 0x73, 0xc9, 0xd3, 0x85, 0x34, 0x48, 0x59, 0x2b, 0xd4, 0xed, 0x0f, 0x53, 0xbb, 0x5a, 0xa6, 0x3a, 0x42, 0x50, 0x65, 0x5a, 0x0b, 0xba, 0x1d, 0x8f, 0x93, 0xed, 0x5f, 0x79, 0x0a, 0x2e, 0xec, 0x21, 0x62, 0x74, 0x6d, 0xdf, 0xa6, 0x70, 0x65, 0x7b, 0x8d, 0xcb, 0x63, 0x92, 0x4f, 0xaf, 0x7c, 0x3b, 0xb7, 0x88, 0xf8, 0xeb, 0x79, 0x0c, 0x4c, 0x96, 0xc7, 0x79, 0x49, 0x17, 0x1f, 0x1d, 0x92, 0xd2, 0x67, 0x1c, 0x53, 0x98, 0x3b, 0x6e, 0x30, 0xcb, 0x86, 0x27, 0x7c, 0xc2, 0x4f, 0xfb, 0xac, 0x6e, 0xd6, 0x01, 0x0b, 0x3e, 0xe0, 0xb7, 0xaf, 0x41, 0x4f, 0x47, 0xab, 0x8b, 0xf5, 0x08, 0x86, 0xd9, 0xaa, 0x48, 0xec, 0x78, 0x9c, 0x49, 0xa4, 0x62, 0xe7, 0x89, 0xc2, 0xab, 0x66, 0x46, 0x1e, 0x1b, 0xc8, 0x42, 0x04, 0x1d, 0xe6, 0xc4, 0x2d, 0xd7, 0x53, 0xdf, 0xee, 0x9b, 0x35, 0xf6, 0xb0, 0x7e, 0x54, 0x80, 0xa0, 0x46, 0x71, 0x09, 0xa8, 0x8a, 0xd9, 0x79, 0x9d, 0x14, 0x3a, 0x99, 0xba, 0x8a, 0xb4, 0xd3, 0x4d, 0x4e, 0x33, 0x3a, 0xb0, 0xa2, 0xfd, 0xca, 0x7b, 0x10, 0x87, 0xf0, 0xf8, 0x09, 0x8d, 0x4d, 0xd7, 0xcc, 0x61, 0xb7, 0x23, 0x89, 0x84, 0x80, 0x75, 0xc6, 0x73, 0xfb, 0x68, 0x03, 0xc3, 0x3d, 0x4c, 0x99, 0x70, 0x21, 0x1f, 0xe8, 0x73, 0x8f, 0xb9, 0xb1, 0x92, 0xfd, 0x46, 0xc1, 0x7c, 0x35, 0xf9, 0xd0, 0x15, 0x59, 0xff, 0xa8, 0x0f, 0x25, 0xb2, 0x8a, 0xba, 0x75, 0x10, 0xcd, 0x1d, 0x07, 0x6b, 0xc8, 0x45, 0x81, 0x61, 0xf2, 0xdd, 0xb6, 0x0f, 0x48, 0xff, 0x25, 0x82, 0xef, 0x4a, 0xc2, 0x6e, 0x1b, 0x35, 0xfa, 0x23, 0x2f, 0xa2, 0xf1, 0xbc, 0x26, 0xb7, 0x0e, 0x9a, 0x31, 0xe9, 0xb9, 0x11, 0xa1, 0x59, 0x63, 0x60, 0x08, 0x64, 0xc7, 0xe7, 0x9b, 0x75, 0x70, 0x94, 0xdb, 0x1e, 0x7c, 0x9f, 0x75, 0x68, 0x9f, 0x77, 0x66, 0x67, 0x6b, 0xfc, 0x62, 0x11, 0xce, 0xee, 0x77, 0x50, 0xdc, 0xa5, 0xee, 0x55, 0xce, 0x03, 0x72, 0x30, 0x4b, 0xa8, 0x74, 0x9d, 0xe7, 0x64, 0xcd, 0x21, 0xea, 0xf2, 0xa5, 0x56, 0x52, 0xe3, 0x94, 0x83, 0x1b, 0xd8, 0x08, 0x70, 0xbd, 0xf4, 0xe7, 0x79, 0xf7, 0x91, 0x75, 0xe0, 0xcb, 0x32, 0x77, 0x68, 0xca, 0xb9, 0x99, 0x1f, 0x91, 0xdb, 0x0d, 0x7b, 0x94, 0xd0, 0x75, 0xa8, 0x1a, 0x4f, 0x03, 0x21, 0x89, 0xb9, 0xde, 0x7e, 0xe4, 0x95, 0xc8, 0x8c, 0x92, 0x3c, 0xff, 0xa3, 0x61, 0xd5, 0x60, 0x34, 0xca, 0x84, 0xd2, 0xa2, 0x77, 0xdf, 0xe2, 0x53, 0x02, 0xa2, 0xab, 0x06, 0x00, 0xa3, 0xf9, 0x67, 0x3e, 0x08, 0xae, 0xe0, 0x4a, 0xb7, 0x64, 0xb3, 0x35, 0x0e, 0x53, 0x46, 0x98, 0xd5, 0x75, 0xbd, 0xd5, 0x70, 0xe9, 0xce, 0x9f, 0x59, 0x96, 0xd1, 0xbd, 0xce, 0x10, 0x17, 0x0a, 0xc7, 0xbf, 0x7d, 0xc1, 0x2b, 0x3e, 0x41, 0xf7, 0x43, 0x01, 0x14, 0x69, 0x6f, 0x3b, 0x70, 0x78, 0x18, 0xfe, 0x2b, 0x72, 0xe5, 0xa4, 0x4d, 0x13, 0x32, 0x6f, 0x1f, 0x4c, 0xbe, 0x6c, 0x84, 0x42, 0xa3, 0x9d, 0x8c, 0x9a, 0x8c, 0x56, 0x47, 0xf4, 0x22, 0xe8, 0xd7, 0xb5, 0xc7, 0x7d, 0xc9, 0x0a, 0x87, 0x43, 0xa6, 0x2a, 0x4b, 0xcd, 0xc4, 0xdb, 0x50, 0xb6, 0x62, 0x37, 0xd8, 0x87, 0xf4, 0xb0, 0x20, 0xda, 0xbc, 0x52, 0x91, 0xc0, 0x9a, 0x48, 0x3a, 0x61, 0x25, 0xa2, 0x7e, 0xe2, 0xfa, 0x55, 0x0a, 0x8c, 0x55, 0x83, 0x0b, 0x2a, 0xde, 0xfd, 0x9d, 0xb2, 0xc5, 0x07, 0x86, 0x28, 0x10, 0x5b, 0x24, 0xc0, 0x34, 0x70, 0xa4, 0x43, 0xe3, 0xfb, 0x75, 0xb3, 0x26, 0xb7, 0xfc, 0x32, 0xab, 0x61, 0x8a, 0x20, 0x60, 0x07, 0x8b, 0x84, 0x41, 0x83, 0x00, 0xad, 0x6d, 0x43, 0x2f, 0x19, 0x80, 0x4b, 0x98, 0x95, 0x1d, 0x7c, 0x2c, 0xa6, 0xca, 0x16, 0xba, 0x28, 0x01, 0x7c, 0xaa, 0x35, 0x83, 0x37, 0xed, 0x48, 0xf0, 0x3e, 0x34, 0xa2, 0x95, 0x74, 0x60, 0xed, 0x85, 0x73, 0x3a, 0x20, 0xeb, 0x88, 0x65, 0xa2, 0x9e, 0xfe, 0x91, 0xb2, 0xf6, 0xa0, 0xf0, 0x06, 0xdf, 0x79, 0xee, 0xb2, 0x2b, 0xde, 0x1d, 0x4c, 0x2d, 0xaf, 0x6e, 0x4e, 0x83, 0xd9, 0xa7, 0xbb, 0x33, 0x1f, 0x11, 0x06, 0xfa, 0x1b, 0x71, 0x2f, 0xe0, 0x7f, 0x3a, 0x2f, 0x10, 0xa1, 0x01, 0x96, 0xe7, 0x37, 0x31, 0x73, 0x4b, 0x5e, 0x00, 0x74, 0x3e, 0xe2, 0xa2, 0x4e, 0xb2, 0xb9, 0xbc, 0x5f, 0x9f, 0xd0, 0x1b, 0x92, 0x54, 0x0b, 0xa6, 0x84, 0x0b, 0x87, 0x91, 0xe5, 0xbf, 0x22, 0xd4, 0x20, 0x42, 0x3d, 0xdc, 0x3e, 0x8a, 0xc0, 0x80, 0x07, 0x4b, 0x5f, 0x36, 0x6b, 0xcc, 0x1c, 0x87, 0x21, 0xf3, 0x0d, 0xc0, 0x8e, 0xa1, 0x60, 0xeb, 0xe8, 0x46, 0x9c, 0xfd, 0x9b, 0xac, 0x29, 0x51, 0xec, 0x17, 0x13, 0x55, 0xdc, 0x90, 0x0b, 0x84, 0x4f, 0x7e, 0xaf, 0x94, 0x6d, 0x76, 0x0b, 0xf0, 0x49, 0x54, 0x5f, 0x68, 0xc0, 0x8b, 0x22, 0x27, 0xa5, 0xb9, 0x48, 0xe6, 0x1b, 0x7f, 0xc1, 0x60, 0x41, 0x8f, 0x42, 0x06, 0x15, 0x06, 0x47, 0xf3, 0x92, 0xfd, 0x59, 0x22, 0x1c, 0x5a, 0x8c, 0xdf, 0x1e, 0xec, 0x4d, 0x7b, 0xf2, 0xb8, 0x5a, 0x44, 0x01, 0x8d, 0x12, 0xb4, 0x2b, 0xdf, 0xef, 0xe9, 0x69, 0xd2, 0x51, 0x55, 0xb0, 0x94, 0x7d, 0xb7, 0x19, 0xf0, 0xe5, 0x4a, 0x40, 0x20, 0xaa, 0x3c, 0xe9, 0xe3, 0x5f, 0x61, 0xea, 0xd0, 0x10, 0x29, 0x45, 0xea, 0x82, 0xd0, 0x94, 0x74, 0xbd, 0xd4, 0xaa, 0x07, 0xc8, 0xac, 0x77, 0xe1, 0xb4, 0xb7, 0x2c, 0x80, 0xdb, 0x73, 0xa0, 0x70, 0x6a, 0xef, 0xf2, 0x61, 0x1d, 0x83, 0x71, 0x7c, 0x4a, 0xbe, 0xb8, 0xf7, 0x21, 0xa0, 0x1d, 0xe7, 0x32, 0x09, 0x4d, 0x56, 0x30, 0x72, 0x30, 0x96, 0xf4, 0xdb, 0x13, 0xd4, 0xc4, 0x04, 0x05, 0xf0, 0xd6, 0xe0, 0x81, 0x8d, 0x10, 0x47, 0x4e, 0x64, 0x12, 0xeb, 0xa4, 0xdd, 0x76, 0x8d, 0x90, 0xe0, 0x56, 0x71, 0x99, 0xe8, 0x0f, 0x0f, 0xa4, 0x5a, 0x45, 0x0b, 0x15, 0x16, 0x28, 0x67, 0x37, 0x4b, 0xf5, 0xf8, 0xde, 0x8f, 0xbf, 0x16, 0x4b, 0x2f, 0x6f, 0x98, 0x4f, 0xc3, 0x0a, 0x00, 0xb4, 0x06, 0x32, 0xf2, 0xd8, 0xe5, 0xf0, 0xeb, 0x9b, 0xd6, 0xb0, 0x2f, 0x7b, 0x6b, 0x8d, 0x03, 0xfe, 0x27, 0xcf, 0x1d, 0x51, 0x90, 0xb2, 0x59, 0x2e, 0x85, 0x6a, 0xad, 0x02, 0xd2, 0x63, 0x5f, 0x50, 0x02, 0xcd, 0x75, 0x50, 0x75, 0x58, 0x6e, 0xdd, 0xb2, 0x3c, 0x2f, 0x8e, 0xfd, 0x7d, 0x40, 0x22, 0x2d, 0x6d, 0x38, 0x21, 0xb8, 0x72, 0x76, 0xc0, 0x10, 0x09, 0x12, 0x05, 0x32, 0x0b, 0x13, 0x2d, 0x7b, 0x30, 0xe3, 0x4b, 0xbe, 0xd1, 0x00, 0x31, 0x95, 0xf2, 0xf3, 0x93, 0xf4, 0x7f, 0x86, 0x6a, 0x04, 0xd6, 0x32, 0x97, 0x2e, 0x86, 0xd7, 0xc9, 0x75, 0x56, 0xb0, 0xa0, 0x0a, 0x8a, 0x85, 0x13, 0x1a, 0x61, 0x22, 0x0f, 0xeb, 0xe2, 0x09, 0x60, 0x27, 0xd8, 0x64, 0xd5, 0x78, 0x1c, 0x3d, 0x9f, 0x54, 0x12, 0xf1, 0xfb, 0x1b, 0x76, 0xe2, 0x11, 0x5f, 0x59, 0x6d, 0x1b, 0x82, 0x66, 0x1c, 0xc9, 0x87, 0x6a, 0x1c, 0xe4, 0x22, 0x14, 0xf1, 0x33, 0x11, 0xf9, 0x68, 0x9b, 0xaf, 0xda, 0xcd, 0x89, 0xc7, 0x2a, 0x5f, 0x95, 0xa6, 0xcb, 0x01, 0x5f, 0x74, 0x19, 0x32, 0xbd, 0xc4, 0x29, 0x3f, 0x19, 0x69, 0x52, 0xb7, 0x14, 0x8b, 0xed, 0x20, 0x6f, 0xfb, 0x5a, 0xe8, 0x2c, 0xc4, 0x44, 0x9f, 0xf0, 0x03, 0x25, 0x63, 0xac, 0xf8, 0x0c, 0x9b, 0x7c, 0x5c, 0x9e, 0xe8, 0xd0, 0xf5, 0x5a, 0x58, 0xc9, 0x69, 0x22, 0xdd, 0xe6, 0x50, 0xf7, 0xfe, 0xdf, 0x8c, 0x05, 0xcd, 0xd1, 0xdd, 0xdf, 0x19, 0x9c, 0xb0, 0x0b, 0xe4, 0x89, 0x38, 0xc1, 0x17, 0x31, 0xc0, 0xf0, 0x75, 0x9a, 0x40, 0x82, 0xce, 0xa2, 0x2e, 0xe1, 0x75, 0xa1, 0x96, 0xba, 0xf4, 0x4a, 0x6d, 0x01, 0xfd, 0xd2, 0x23, 0x35, 0xa4, 0x55, 0x77, 0xe5, 0xcc, 0x75, 0x8f, 0x73, 0xdf, 0x44, 0x48, 0x18, 0xc3, 0x64, 0xcb, 0x28, 0x09, 0x6c, 0x61, 0x97, 0x67, 0x8e, 0x88, 0xbd, 0x68, 0x77, 0x46, 0x56, 0x62, 0x77, 0xbd, 0xcd, 0xa9, 0xe2, 0x00, 0xba, 0x02, 0xb6, 0x25, 0xa9, 0x5a, 0x7d, 0x9b, 0x1d, 0xb8, 0x75, 0xbe, 0xd4, 0x71, 0xef, 0xa9, 0x4d, 0x9b, 0xf5, 0x4b, 0x88, 0xc3, 0x2f, 0xbe, 0x0d, 0xe3, 0x08, 0xd3, 0x2f, 0x8e, 0x0c, 0xf2, 0x92, 0x6e, 0x94, 0x21, 0xeb, 0xf0, 0xa6, 0x62, 0x07, 0x3e, 0x17, 0x42, 0x0f, 0x6e, 0xf2, 0xaf, 0x0a, 0xf8, 0x1e, 0x0a, 0xa3, 0x6e, 0x3a, 0x7d, 0x2c, 0x67, 0xcc, 0x8f, 0xe4, 0xbd, 0x9b, 0xf5, 0x75, 0xf8, 0x59, 0xab, 0xc1, 0x09, 0x85, 0x44, 0xde, 0x3c, 0x90, 0x7f, 0x5f, 0x68, 0x3f, 0x1a, 0xd6, 0x68, 0x50, 0xeb, 0x97, 0xcf, 0x60, 0x2c, 0xbe, 0xd8, 0x0c, 0x17, 0x73, 0x9c, 0x57, 0xb3, 0x6c, 0x88, 0x4b, 0xed, 0xb4, 0x0d, 0xe4, 0xea, 0xab, 0x99, 0x29, 0x9c, 0x4f, 0xc7, 0x9c, 0x93, 0xb9, 0xd3, 0xd4, 0x16, 0xea, 0x50, 0x69, 0x73, 0xc8, 0x1d, 0x10, 0x93, 0x64, 0x95, 0x07, 0xd1, 0x7e, 0x06, 0xb4, 0x0c, 0x4b, 0x64, 0x89, 0xfb, 0x76, 0x3f, 0x2a, 0xc1, 0x64, 0xf3, 0xd2, 0xc2, 0xbc, 0x1f, 0xf3, 0xb4, 0x27, 0x58, 0x1c, 0xf9, 0x54, 0x1e, 0x20, 0x2c, 0x40, 0x0e, 0x75, 0xfa, 0xb4, 0x5a, 0xda, 0x33, 0x0f, 0x77, 0x3c, 0x20, 0x45, 0x15, 0xdb, 0x18, 0x28, 0x54, 0xa9, 0x4e, 0xe6, 0x35, 0xf2, 0xed, 0xd3, 0x4e, 0x42, 0x67, 0x69, 0xc3, 0x84, 0x09, 0x8d, 0x71, 0x67, 0xd4, 0x14, 0x6c, 0x06, 0x88, 0x86, 0xac, 0xc7, 0x01, 0x22, 0x03, 0x83, 0xc6, 0x22, 0x52, 0xe8, 0xe0, 0x40, 0xfd, 0x1c, 0xe8, 0x78, 0x9c, 0xa3, 0x64, 0x10, 0xf4, 0x83, 0x54, 0xd6, 0x25, 0xa6, 0x07, 0xa9, 0x24, 0x7f, 0x33, 0x3a, 0x6c, 0xf1, 0x45, 0x14, 0xf1, 0x6c, 0xf6, 0xda, 0x56, 0x59, 0x1f, 0xd0, 0x5f, 0xb8, 0xce, 0x9d, 0xa9, 0x07, 0x99, 0x50, 0x99, 0x66, 0x32, 0xa0, 0x92, 0xfa, 0x3c, 0x78, 0x6b, 0x8f, 0x5d, 0xb3, 0x20, 0x81, 0x95, 0x24, 0xc7, 0xdc, 0xce, 0xd9, 0xc6, 0xc2, 0xb4, 0xa0, 0x44, 0x0d, 0xc6, 0xcb, 0xdd, 0x36, 0xad, 0x31, 0x9a, 0x76, 0xcd, 0x75, 0x20, 0x2a, 0x1b, 0x8b, 0x27, 0x7c, 0x2e, 0x77, 0x2e, 0x40, 0x98, 0x58, 0x6d, 0x1c, 0x76, 0xa6, 0x0c, 0xec, 0x46, 0xb8, 0x92, 0x64, 0xf9, 0x89, 0xa0, 0xf7, 0x49, 0xbb, 0xdf, 0xf8, 0x4d, 0xdc, 0x37, 0x00, 0x4b, 0xe9, 0x42, 0x8f, 0xcd, 0x10, 0x00, 0xf6, 0xf7, 0xba, 0xcc, 0x74, 0x17, 0xc9, 0x8e, 0x9f, 0x7e, 0x1e, 0x33, 0x05, 0x8f, 0x5f, 0x5a, 0x14, 0x15, 0xf7, 0x50, 0x37, 0xda, 0x5e, 0x3f, 0x42, 0x75, 0x9a, 0xa2, 0x10, 0x63, 0x06, 0xfc, 0x6a, 0x59, 0x52, 0xca, 0x2b, 0xd9, 0xcb, 0xb6, 0xa2, 0x04, 0xdc, 0x0d, 0x38, 0xaf, 0xd5, 0x73, 0x53, 0xb8, 0xec, 0xd6, 0x7a, 0x9a, 0x82, 0xa0, 0xb9, 0x40, 0xa7, 0x31, 0x47, 0x17, 0xdf, 0x8c, 0x66, 0x67, 0x26, 0x50, 0x8b, 0xe3, 0x33, 0xeb, 0xbf, 0x7f, 0xfa, 0x0a, 0x45, 0x81, 0x74, 0x53, 0x7d, 0xdb, 0xa2, 0x57, 0x08, 0xb8, 0xd0, 0xc2, 0x2d, 0x55, 0x17, 0xd5, 0x7b, 0x12, 0x25, 0x17, 0xb0, 0xc9, 0x41, 0x47, 0xda, 0x5e, 0x89, 0x94, 0xbc, 0x97, 0x7e, 0x11, 0x73, 0x2e, 0xc3, 0x63, 0x5a, 0x25, 0x22, 0xbc, 0x2a, 0x5a, 0xd0, 0x0e, 0x66, 0x5b, 0xf2, 0x78, 0xf6, 0x7b, 0x5f, 0x05, 0x11, 0x26, 0xa8, 0x95, 0x61, 0x71, 0x56, 0x1b, 0x62, 0xf5, 0x72, 0x09, 0x0c, 0xde, 0x4b, 0x09, 0xb1, 0x3f, 0x73, 0xee, 0x28, 0xa9, 0x0b, 0xea, 0x2b, 0xfb, 0x40, 0x01, 0xfe, 0x7b, 0x16, 0xbd, 0x51, 0x26, 0x65, 0x24, 0x68, 0x45, 0x20, 0xe7, 0x79, 0x41, 0xdd, 0xdc, 0x56, 0xb8, 0x92, 0xae, 0x4b, 0xd0, 0x9d, 0xd4, 0x4a, 0xcc, 0x08, 0xbf, 0x45, 0xdd, 0x0a, 0x58, 0xdc, 0x3a, 0xd1, 0xa9, 0x38, 0x72, 0x7e, 0xda, 0x37, 0x01, 0x72, 0x60, 0xc9, 0x22, 0xc8, 0x71, 0x9a, 0xe5, 0x22, 0xbb, 0xf1, 0x81, 0xa9, 0x55, 0xd8, 0xeb, 0x4f, 0xf6, 0x7d, 0xa8, 0x58, 0x65, 0xd8, 0xdf, 0x18, 0x30, 0x8e, 0xb2, 0xfe, 0xa1, 0x15, 0xce, 0xd1, 0xee, 0x19, 0x41, 0x3a, 0xb0, 0x1f, 0x8d, 0x83, 0x96, 0x69, 0xfa, 0x9e, 0x5b, 0x19, 0x30, 0x69, 0xf5, 0x99, 0x04, 0x30, 0x10, 0x39, 0x93, 0x73, 0xba, 0x1a, 0x8d, 0xea, 0x60, 0x4c, 0xd4, 0xc7, 0xf9, 0x33, 0x46, 0x3b, 0x81, 0x2f, 0xd6, 0x3b, 0xa9, 0x7b, 0xe2, 0x84, 0xcd, 0x56, 0xc1, 0xdd, 0x26, 0x61, 0x9b, 0x9c, 0x41, 0x49, 0x7d, 0x6b, 0xaf, 0xa5, 0xac, 0x4c, 0xff, 0x22, 0x3a, 0xdb, 0xe9, 0xdd, 0xd8, 0xd3, 0xcc, 0x10, 0xeb, 0xd4, 0x5b, 0xf1, 0xe2, 0x64, 0x92, 0xd7, 0xc6, 0x33, 0xf0, 0x9f, 0x12, 0xa3, 0xe0, 0x4e, 0xc6, 0x87, 0x78, 0xf7, 0xb7, 0x2b, 0x65, 0xe0, 0x29, 0x96, 0x26, 0xe0, 0x9f, 0x0b, 0x79, 0x0b, 0xf2, 0xd6, 0x13, 0x92, 0xa1, 0x45, 0x94, 0xe4, 0x68, 0xf4, 0xba, 0x19, 0x14, 0x4d, 0xd5, 0x91, 0x95, 0x50, 0x7b, 0xd8, 0x55, 0x90, 0x7c, 0xcd, 0xc8, 0x7e, 0x18, 0x04, 0x45, 0xea, 0x70, 0x68, 0x14, 0xc7, 0x3b, 0x25, 0xc8, 0x2f, 0xba, 0xc5, 0xce, 0xa7, 0xee, 0x98, 0x47, 0xa3, 0x08, 0x5a, 0x13, 0x4d, 0x21, 0x10, 0x2e, 0x82, 0x2b, 0x33, 0x40, 0x1d, 0x28, 0x10, 0x6f, 0x79, 0x9a, 0x6f, 0x78, 0x31, 0x3a, 0x73, 0xfe, 0x2a, 0xec, 0xc1, 0x22, 0xd4, 0xf3, 0xe4, 0x53, 0xac, 0x61, 0xf1, 0x67, 0x06, 0xd2, 0x66, 0xeb, 0x09, 0x5a, 0x58, 0xb8, 0xfb, 0xbc, 0xce, 0xc7, 0xbf, 0xdd, 0x68, 0x47, 0x9b, 0x78, 0x44, 0xec, 0x3f, 0x12, 0x21, 0x89, 0x03, 0x31, 0xc5, 0xe1, 0x71, 0xc9, 0x9d, 0xbb, 0x03, 0xf7, 0xa4, 0x34, 0x2d, 0xf1, 0x85, 0x59, 0x9e, 0x3e, 0x04, 0xf5, 0xc4, 0x22, 0x9a, 0xa8, 0x8e, 0x5d, 0x5f, 0x39, 0x75, 0x15, 0x2e, 0x2d, 0xbd, 0x10, 0x03, 0x99, 0xf8, 0x26, 0xa7, 0x34, 0xcd, 0xf6, 0x90, 0xb0, 0xf7, 0xd9, 0x02, 0x4b, 0x90, 0x14, 0x7b, 0xa1, 0x90, 0x52, 0x4e, 0xc4, 0x91, 0x51, 0x8e, 0x8e, 0xd5, 0xdb, 0x2d, 0x36, 0x89, 0xf8, 0x65, 0x22, 0x4b, 0x62, 0x57, 0xfc, 0xeb, 0x39, 0xf3, 0x08, 0x6e, 0xf8, 0x17, 0xb5, 0x59, 0xa8, 0xfb, 0x72, 0x2c, 0x53, 0xcc, 0xc2, 0x2c, 0xbc, 0x97, 0x93, 0x65, 0x4d, 0x69, 0xcc, 0xf0, 0x51, 0xb5, 0x25, 0x72, 0x63, 0xf5, 0x3b, 0xe5, 0x26, 0x94, 0xe4, 0x9b, 0x37, 0x0c, 0xbf, 0x7f, 0x60, 0x4c, 0x10, 0x9f, 0x0f, 0x5c, 0xcb, 0xe7, 0x06, 0x43, 0xef, 0x2f, 0x53, 0x29, 0x15, 0x79, 0x83, 0xb9, 0x49, 0x73, 0x13, 0xc9, 0x18, 0x44, 0x27, 0x3d, 0xea, 0x84, 0x7e, 0x28, 0x93, 0x8c, 0xa6, 0x35, 0x24, 0xf1, 0x6c, 0x46, 0x07, 0x4b, 0x97, 0x5a, 0x4b, 0x3b, 0xd6, 0xb4, 0x3c, 0xac, 0xf6, 0x3a, 0x37, 0x58, 0x58, 0x1b, 0xbc, 0x8e, 0xa3, 0xb4, 0xc5, 0x33, 0xb6, 0xb5, 0x56, 0x08, 0xe1, 0x7f, 0x56, 0x2a, 0x54, 0xd1, 0x9d, 0xdf, 0xd7, 0xa4, 0x4e, 0x8f, 0xbc, 0x53, 0x67, 0x11, 0x12, 0xff, 0x96, 0x29, 0x1c, 0x32, 0x4f, 0x4e, 0x02, 0xc2, 0x1b, 0xb0, 0xc5, 0xf9, 0x33, 0x79, 0x78, 0xf2, 0x4d, 0x53, 0xae, 0x46, 0xb6, 0x2b, 0x2f, 0xe9, 0xa1, 0x35, 0xef, 0x4e, 0xbf, 0x31, 0x40, 0xd2, 0x0f, 0xec, 0x46, 0x57, 0xf8, 0x09, 0xab, 0x2f, 0x95, 0x01, 0x95, 0x3d, 0x50, 0x69, 0xd5, 0x56, 0xb2, 0x74, 0x62, 0xed, 0x79, 0xb8, 0x05, 0xf0, 0xeb, 0x35, 0x55, 0xed, 0x6b, 0x93, 0xe6, 0x79, 0x4a, 0xab, 0xbe, 0xd2, 0xdf, 0x49, 0x08, 0xc3, 0xda, 0x30, 0x0d, 0xc8, 0xd5, 0x5f, 0x5f, 0x73, 0x2c, 0x93, 0x57, 0x0e, 0x0f, 0x0d, 0xc2, 0x82, 0xd5, 0x95, 0xd8, 0x78, 0x93, 0xbf, 0x6e, 0xbd, 0xee, 0x6d, 0x6c, 0xeb, 0x2d, 0x95, 0x80, 0x46, 0x93, 0x45, 0x14, 0xe4, 0xeb, 0xe4, 0x7e, 0x11, 0x64, 0xba, 0x77, 0xf1, 0x9f, 0xb3, 0xcf, 0x67, 0x07, 0x5f, 0x5f, 0x36, 0x61, 0x3e, 0x3e, 0x66, 0xa3, 0x3b, 0x38, 0xea, 0x0a, 0x76, 0x7b, 0x7f, 0x67, 0x46, 0x94, 0xd7, 0xba, 0x7f, 0x9a, 0xf7, 0x01, 0xf0, 0xa9, 0xde, 0x52, 0x30, 0x92, 0x67, 0x28, 0x9b, 0xd1, 0x70, 0xfb, 0x97, 0xc0, 0x3c, 0x13, 0x1c, 0x0a, 0x16, 0x9d, 0x73, 0x61, 0x37, 0xff, 0x3d, 0x74, 0xea, 0x69, 0xb8, 0x1b, 0xee, 0xac, 0x3e, 0xd5, 0x1c, 0x50, 0x0e, 0x75, 0x49, 0xe0, 0x4f, 0x18, 0x6e, 0x89, 0x52, 0x5a, 0x07, 0xe4, 0x18, 0xca, 0xb8, 0x0f, 0x14, 0x9b, 0x36, 0x02, 0x31, 0x9c, 0x65, 0x20, 0x17, 0x6a, 0xbe, 0x0d, 0xaa, 0xe3, 0xf4, 0xc0, 0xd4, 0xdf, 0xd7, 0xd9, 0x85, 0x1b, 0x78, 0x34, 0xf8, 0x76, 0x8e, 0xbe, 0x37, 0x60, 0x18, 0x87, 0xe1, 0x8f, 0x44, 0x19, 0x2b, 0xf3, 0x90, 0x09, 0x25, 0xed, 0x2f, 0xcb, 0x3f, 0xbc, 0xae, 0xca, 0x0b, 0x38, 0xd7, 0xb8, 0x44, 0xc2, 0xd6, 0x23, 0x10, 0x7b, 0x9a, 0x4a, 0x82, 0xb4, 0x7e, 0x2e, 0x63, 0xa6, 0x29, 0xec, 0x32, 0x63, 0xb2, 0x49, 0x69, 0x0d, 0x08, 0x8f, 0x02, 0x46, 0x92, 0x98, 0x3a, 0xe7, 0x12, 0x28, 0x95, 0xf5, 0xcf, 0x80, 0x22, 0xd1, 0xf3, 0x2f, 0x00, 0xae, 0x32, 0x2c, 0x21, 0x48, 0xac, 0x22, 0x4e, 0xd4, 0x15, 0x0b, 0x6b, 0x32, 0x13, 0x00, 0xfd, 0x6a, 0xe7, 0x4f, 0xe9, 0x56, 0x50, 0xcf, 0x7e, 0x9c, 0xac, 0x70, 0xb6, 0xe0, 0x61, 0x16, 0xb9, 0x37, 0x7b, 0xa8, 0xa3, 0xde, 0x97, 0x63, 0x87, 0x2c, 0xff, 0x75, 0xb4, 0xc5, 0x16, 0xc7, 0x37, 0x11, 0xf7, 0x1a, 0xa1, 0xec, 0x59, 0x55, 0x0a, 0x9f, 0xb6, 0x1d, 0x55, 0x0f, 0xac, 0xa7, 0xb6, 0x35, 0xa3, 0xca, 0x72, 0xce, 0xb0, 0x59, 0xe6, 0x54, 0xb9, 0xaf, 0xcb, 0x2c, 0xda, 0x8b, 0xb8, 0x21, 0x08, 0x1f, 0xe8, 0x11, 0xf4, 0x63, 0x3e, 0xe6, 0x32, 0xaf, 0x86, 0xc8, 0x9b, 0x89, 0xfe, 0x92, 0xf0, 0xbc, 0x15, 0x82, 0xc0, 0xaa, 0x72, 0x34, 0x8b, 0xe2, 0x38, 0xd1, 0x27, 0xf5, 0x89, 0x84, 0x63, 0x86, 0x49, 0x2d, 0xeb, 0xa1, 0x24, 0x5a, 0x6b, 0x4e, 0xd2, 0x73, 0xf7, 0x65, 0x99, 0x34, 0xab, 0xa3, 0x14, 0x60, 0x8e, 0xfe, 0x34, 0xb4, 0xbc, 0x36, 0x84, 0x1a, 0xc5, 0xad, 0xb1, 0x20, 0x50, 0x78, 0x49, 0xa8, 0x04, 0xb6, 0xc3, 0xe1, 0xa8, 0x20, 0xc0, 0x76, 0x88, 0xe2, 0x90, 0x05, 0x1b, 0xaa, 0xf8, 0xd2, 0xe4, 0xfe, 0x32, 0xbd, 0x96, 0xd2, 0x36, 0x71, 0x7b, 0x5a, 0x38, 0xdf, 0x16, 0x1d, 0x72, 0xeb, 0x08, 0x4b, 0x23, 0x64, 0x30, 0x50, 0xd8, 0x3a, 0x16, 0xa9, 0xea, 0xeb, 0x8a, 0xf6, 0x48, 0x3f, 0x88, 0x51, 0x76, 0x35, 0x5f, 0xdf, 0xd6, 0x3d, 0x12, 0xa4, 0x27, 0xa7, 0xff, 0x9c, 0x4b, 0x5c, 0xbe, 0x07, 0x4d, 0xcc, 0x4c, 0x04, 0xa2, 0x27, 0x69, 0x61, 0xaf, 0xd0, 0x3e, 0xb2, 0x8c, 0x0f, 0x43, 0xa0, 0x08, 0x06, 0x60, 0x84, 0xed, 0xe6, 0x53, 0x35, 0x85, 0x62, 0x51, 0x1d, 0x5c, 0x64, 0xf0, 0x93, 0x48, 0xff, 0x44, 0x65, 0xa7, 0xa6, 0x48, 0xb3, 0xe8, 0x9b, 0x80, 0x04, 0x4d, 0xa9, 0xdd, 0x93, 0xee, 0x16, 0xe1, 0xea, 0x02, 0xd4, 0x03, 0xb2, 0x5a, 0xf7, 0x55, 0xca, 0x2e, 0x6c, 0x64, 0x96, 0x1c, 0xe7, 0x60, 0x9a, 0x6e, 0x1d, 0x7d, 0x47, 0x9c, 0x34, 0x98, 0x14, 0x11, 0x77, 0x1e, 0xd1, 0x32, 0x4f, 0x2a, 0x38, 0x9d, 0x6e, 0xed, 0xc6, 0xae, 0x4e, 0x53, 0xc9, 0x48, 0xda, 0xe3, 0xb9, 0xd2, 0x6b, 0xe8, 0xcb, 0x7f, 0xf5, 0xce, 0xc4, 0xd3, 0x83, 0xce, 0x0b, 0x63, 0xe0, 0xce, 0x03, 0xdc, 0x97, 0x82, 0x97, 0x46, 0x1e, 0xd8, 0x17, 0x8a, 0x4f, 0x93, 0x42, 0x32, 0x17, 0x35, 0xa4, 0x71, 0x72, 0x23, 0x22, 0x63, 0x97, 0x04, 0xd3, 0x95, 0x6f, 0x6a, 0x11, 0xc8, 0x4c, 0xb4, 0xd0, 0xf2, 0xd8, 0x33, 0x2f, 0x86, 0x4c, 0x8b, 0x4d, 0xf5, 0xe2, 0x5c, 0x5e, 0x75, 0x8c, 0x22, 0xfe, 0x01, 0xe6, 0x5a, 0xc4, 0xa1, 0x69, 0xe7, 0x1b, 0xeb, 0xe2, 0xb3, 0x4d, 0xca, 0x23, 0x99, 0xe1, 0x7e, 0xf9, 0x83, 0x27, 0xe4, 0x5e, 0xcf, 0x11, 0xf8, 0xef, 0xf8, 0x44, 0x98, 0xa0, 0x72, 0x6f, 0x8b, 0xae, 0xd5, 0xdc, 0xc1, 0xd5, 0x3e, 0x45, 0xdc, 0xc4, 0xf2, 0xe8, 0xf0, 0xce, 0x45, 0xdd, 0x87, 0xe2, 0xbb, 0xa8, 0xe9, 0xbd, 0x6c, 0x0b, 0x9a, 0x5e, 0xad, 0x1e, 0x23, 0xba, 0xec, 0xa1, 0x15, 0xb2, 0xdc, 0x90, 0x4c, 0x42, 0xd3, 0xf8, 0x71, 0xfb, 0x70, 0x0a, 0xc2, 0xb3, 0x80, 0x6d, 0x16, 0x7b, 0x22, 0xd9, 0x1b, 0xd1, 0x2a, 0xe2, 0xe3, 0x17, 0xc4, 0x11, 0x9f, 0x44, 0x5a, 0x39, 0xaa, 0xda, 0xb7, 0x08, 0xc9, 0x18, 0x6c, 0xdd, 0xb1, 0x70, 0x72, 0xd9, 0xc9, 0x3b, 0x12, 0x39, 0x32, 0xac, 0x02, 0xe3, 0x05, 0x02, 0xd1, 0x3e, 0xdb, 0x02, 0x84, 0x47, 0x93, 0xa5, 0x82, 0xe2, 0x4f, 0x0e, 0xad, 0x6d, 0xc0, 0xbe, 0xd2, 0x9b, 0xa4, 0x0b, 0x43, 0x80, 0x8c, 0xce, 0xc2, 0xe8, 0xe3, 0x5d, 0xa1, 0xed, 0x2c, 0xb9, 0x28, 0xc9, 0x8b, 0x08, 0x37, 0xe8, 0x87, 0x45, 0x2c, 0x42, 0x0e, 0x36, 0x07, 0xe7, 0xb9, 0x9e, 0xcd, 0xdb, 0x52, 0xb5, 0x2a, 0x25, 0x94, 0xd5, 0x59, 0x23, 0x31, 0x76, 0x49, 0x20, 0x1a, 0x5c, 0xf8, 0x28, 0xfa, 0x0f, 0x23, 0x1b, 0x03, 0x8c, 0x22, 0x01, 0xee, 0x3a, 0x0e, 0x9d, 0x3d, 0x1f, 0x24, 0x45, 0xc4, 0x54, 0x6e, 0xf1, 0x67, 0xb6, 0xa0, 0x91, 0x25, 0xdf, 0x40, 0xa4, 0x56, 0x55, 0x09, 0x06, 0x30, 0x00, 0x92, 0x09, 0x90, 0xe2, 0x2b, 0xc8, 0xf8, 0x02, 0x07, 0xb8, 0xd3, 0xa9, 0xa1, 0x80, 0x01, 0xd1, 0x58, 0x0b, 0x8f, 0xdb, 0x5c, 0xdb, 0xc6, 0x80, 0xce, 0xa0, 0x68, 0x0a, 0x23, 0x09, 0x36, 0xc4, 0xca, 0xda, 0xb5, 0xaf, 0x0e, 0x3f, 0x32, 0x76, 0x3d, 0x5f, 0x04, 0xa4, 0x0a, 0x35, 0x11, 0x15, 0x30, 0x9b, 0x94, 0xaa, 0x58, 0xa8, 0x1d, 0x41, 0x3d, 0x3c, 0xd9, 0xe5, 0x0e, 0xd9, 0x13, 0x41, 0x14, 0xb5, 0xfb, 0x5b, 0x94, 0x0d, 0xa6, 0x7f, 0xf7, 0xbb, 0x57, 0x78, 0x28, 0x0b, 0xfd, 0x07, 0x3e, 0xcb, 0xfc, 0x8d, 0x5b, 0xa1, 0x30, 0x0b, 0xd3, 0xa2, 0x2f, 0x4c, 0x91, 0x1f, 0xcf, 0x61, 0xb7, 0xc2, 0xe9, 0x4e, 0x85, 0xda, 0x5c, 0x03, 0x7c, 0xf4, 0x54, 0x8e, 0xc3, 0xab, 0xcc, 0x8e, 0xc9, 0xc1, 0x51, 0xeb, 0x2c, 0x6e, 0x09, 0xc4, 0xda, 0xf7, 0xf5, 0xa9, 0x76, 0x83, 0x73, 0x0b, 0xfd, 0x2b, 0x07, 0xf0, 0xa9, 0x50, 0x5a, 0xeb, 0x15, 0x31, 0x83, 0x4c, 0xa3, 0xbc, 0x86, 0x94, 0x1b, 0xa5, 0x1a, 0x2c, 0x94, 0xb6, 0xb0, 0x56, 0x98, 0x66, 0xb0, 0x63, 0x83, 0xac, 0x06, 0x27, 0x2c, 0x15, 0xdd, 0xaa, 0xc7, 0x15, 0xaa, 0x20, 0x0a, 0x9a, 0x6d, 0x1b, 0x8f, 0xe7, 0x34, 0x00, 0x7a, 0xa0, 0xe0, 0xb7, 0x5b, 0x21, 0x2b, 0xa7, 0x56, 0x14, 0xea, 0xe2, 0x81, 0x43, 0x90, 0x9c, 0x8d, 0xaa, 0xf4, 0xe2, 0xa9, 0xd1, 0x54, 0x89, 0xa3, 0x59, 0x99, 0x64, 0x50, 0xd4, 0xdc, 0xba, 0x2f, 0xda, 0x2a, 0xf6, 0x49, 0x59, 0x84, 0xa1, 0x5b, 0x2c, 0x2a, 0x8e, 0x37, 0xef, 0x1a, 0x54, 0x68, 0x12, 0xd3, 0x01, 0x15, 0x2d, 0x5e, 0x0d, 0x28, 0x93, 0x8f, 0x8d, 0xae, 0x2a, 0x89, 0xa9, 0x81, 0x7a, 0x80, 0x50, 0x25, 0x03, 0xc3, 0x2b, 0xf1, 0xd4, 0xf9, 0xcf, 0x6f, 0x59, 0xaa, 0x36, 0x05, 0x75, 0x02, 0x70, 0xd4, 0xd0, 0xd2, 0x96, 0xe0, 0x73, 0xd8, 0x00, 0x71, 0x92, 0x40, 0xb7, 0xba, 0xa8, 0x6a, 0x2d, 0xb9, 0xca, 0xee, 0x2c, 0x5e, 0x34, 0xde, 0x0d, 0xef, 0x29, 0x4b, 0x2a, 0xab, 0xfa, 0x0a, 0x96, 0xae, 0x64, 0xb7, 0x0b, 0x14, 0x1e, 0xfb, 0x23, 0x61, 0xb3, 0x0b, 0xcb, 0x21, 0x8e, 0x71, 0xf5, 0xcb, 0x53, 0x0f, 0x8e, 0xeb, 0x76, 0x61, 0xb0, 0x80, 0x06, 0x02, 0x18, 0xa3, 0xc9, 0x72, 0xda, 0x6a, 0x8e, 0x16, 0x53, 0x0c, 0xbf, 0x80, 0x60, 0x46, 0x36, 0xf1, 0xcd, 0xfd, 0x51, 0x1c, 0x11, 0x24, 0x49, 0x2d, 0x38, 0xe0, 0xbf, 0x0a, 0x20, 0xea, 0x98, 0xd9, 0xe8, 0x36, 0x0b, 0xc2, 0xa6, 0xd2, 0xf8, 0xf6, 0x58, 0x10, 0x7c, 0xf0, 0x1e, 0xe7, 0xc2, 0xfb, 0xa6, 0x97, 0x1c, 0xf4, 0xe7, 0x8c, 0x52, 0x51, 0x12, 0x85, 0x3a, 0x62, 0xc5, 0xf5, 0x88, 0xd7, 0x82, 0xa9, 0xe8, 0x83, 0x61, 0xac, 0x4a, 0x5f, 0x01, 0x68, 0x7d, 0xd2, 0xc4, 0x0d, 0x00, 0x2f, 0x3c, 0x37, 0x15, 0x80, 0xe0, 0xcb, 0x16, 0x82, 0x04, 0x21, 0x0c, 0xf0, 0x08, 0x69, 0x7e, 0x04, 0xcf, 0x47, 0x87, 0x3c, 0x72, 0xc1, 0x2b, 0x5a, 0x36, 0x5b, 0xeb, 0xae, 0xbc, 0x80, 0x97, 0x97, 0x78, 0x24, 0x64, 0x48, 0x64, 0xa8, 0x3f, 0xc8, 0xf6, 0xfe, 0x60, 0x3c, 0x4f, 0x0d, 0x21, 0x69, 0xb5, 0x57, 0x11, 0x75, 0x43, 0xd9, 0x44, 0xed, 0xdf, 0x32, 0xee, 0x0d, 0x6d, 0x08, 0x30, 0x3b, 0x42, 0xa8, 0x32, 0xd4, 0xdc, 0xec, 0x72, 0x2b, 0xd0, 0x62, 0x5c, 0xcf, 0x03, 0xaa, 0x1a, 0x0d, 0x1d, 0x20, 0xad, 0xb6, 0x3b, 0xbc, 0x3d, 0x23, 0xe5, 0x36, 0xad, 0x75, 0x3f, 0x6d, 0x73, 0x21, 0x83, 0x09, 0xa7, 0xad, 0xae, 0x5f, 0x59, 0xb4, 0x7a, 0x96, 0x28, 0x30, 0x8d, 0x08, 0x10, 0xf9, 0xf0, 0xeb, 0x84, 0x88, 0xc2, 0x31, 0xbd, 0x01, 0x2e, 0xac, 0x51, 0x71, 0x9a, 0x76, 0x07, 0x53, 0x21, 0x90, 0xea, 0x5a, 0x44, 0xc9, 0x9c, 0x6a, 0xdc, 0xe2, 0xed, 0xe7, 0x53, 0xef, 0xac, 0x33, 0x14, 0x00, 0xbe, 0x72, 0x40, 0x01, 0x6c, 0x91, 0xa3, 0xdf, 0x01, 0x86, 0xe6, 0xed, 0x95, 0xd9, 0x06, 0x85, 0x24, 0x63, 0x05, 0xf2, 0xe3, 0x56, 0xdf, 0x8d, 0xd3, 0x7d, 0xbf, 0x27, 0x96, 0xc5, 0x73, 0xa7, 0x82, 0xfd, 0x1d, 0xf4, 0xf4, 0xda, 0x2c, 0x16, 0xe6, 0x3e, 0x8b, 0x98, 0xc4, 0xb9, 0x18, 0x30, 0x7c, 0x51, 0x58, 0xa2, 0xd5, 0x7e, 0x69, 0xe1, 0x01, 0x79, 0x38, 0x77, 0x75, 0xb6, 0xf4, 0x28, 0xf8, 0xaf, 0xc2, 0xd2, 0xfa, 0xe4, 0xb2, 0x98, 0x28, 0x20, 0xf1, 0x3f, 0x3d, 0xfd, 0x41, 0xd8, 0x1b, 0xaa, 0xa7, 0xa0, 0x1a, 0xec, 0x63, 0x24, 0xa0, 0x63, 0x25, 0xa9, 0xf2, 0x0f, 0x7e, 0xca, 0x49, 0x13, 0x95, 0x63, 0x29, 0xb8, 0x1b, 0xae, 0xee, 0xb4, 0x81, 0xac, 0xa8, 0xad, 0x68, 0xc7, 0x28, 0xf9, 0x59, 0xb5, 0x5b, 0xa8, 0xb6, 0x9f, 0xd7, 0xc4, 0xf0, 0x83, 0xb4, 0xd7, 0xfb, 0xd7, 0x9d, 0xae, 0xff, 0x6f, 0x26, 0x5d, 0x51, 0xa0, 0x60, 0x83, 0xa1, 0xa6, 0xac, 0xcf, 0x75, 0x43, 0xcc, 0xc3, 0xd6, 0xa9, 0x40, 0xb8, 0x48, 0x9a, 0xcf, 0x23, 0x00, 0xce, 0x64, 0x16, 0x52, 0x95, 0x1b, 0x0a, 0x69, 0xbd, 0x9c, 0xdb, 0x3a, 0xb6, 0xa8, 0x14, 0xba, 0xf4, 0xf1, 0x6d, 0x4f, 0x95, 0x2f, 0x92, 0x85, 0x44, 0x70, 0x26, 0x03, 0x5d, 0xaf, 0x08, 0xbd, 0x51, 0xa9, 0xd5, 0x6b, 0x4d, 0xec, 0xae, 0x39, 0x16, 0x31, 0x3b, 0xc0, 0x38, 0xeb, 0xef, 0x35, 0x5f, 0x20, 0x8e, 0xe0, 0x05, 0x78, 0xed, 0xd0, 0x4d, 0x94, 0xfa, 0xce, 0x2f, 0xa0, 0xfb, 0x8f, 0xd6, 0x2c, 0x1b, 0x2e, 0x46, 0x37, 0x22, 0xd9, 0x42, 0x8d, 0x84, 0xca, 0x6d, 0x54, 0x9d, 0x78, 0xaf, 0xe1, 0x3b, 0x0f, 0xda, 0xd0, 0x5d, 0x1e, 0x8e, 0x53, 0x3a, 0x90, 0x5a, 0xca, 0x85, 0xde, 0x23, 0x94, 0xf0, 0x83, 0xca, 0x25, 0xef, 0xaf, 0x09, 0x59, 0xbe, 0x3f, 0x9e, 0x08, 0xa5, 0xed, 0xac, 0xdb, 0x7b, 0xc4, 0x5e, 0x5e, 0x69, 0xd8, 0xcd, 0x56, 0xf0, 0x33, 0x24, 0x54, 0x2d, 0x12, 0x02, 0x8a, 0x5c, 0x52, 0x1f, 0xde, 0x9c, 0x25, 0x33, 0x3d, 0xf1, 0x09, 0x13, 0x32, 0x8f, 0xfb, 0x1d, 0xb7, 0x56, 0xe7, 0xd7, 0x4b, 0x99, 0x64, 0xd3, 0x44, 0x23, 0x9e, 0xd6, 0x67, 0x7c, 0x93, 0x38, 0xb6, 0x68, 0x83, 0x8e, 0x89, 0xb1, 0xa1, 0x87, 0xe0, 0x26, 0x0f, 0x14, 0xf8, 0xe4, 0x09, 0xcc, 0x1c, 0xd4, 0x61, 0x8e, 0xbe, 0x75, 0x2b, 0x68, 0xc6, 0xdc, 0xb9, 0xb7, 0x2a, 0xf9, 0xca, 0x90, 0xbf, 0x1b, 0xfe, 0x5f, 0x4f, 0xb6, 0x8d, 0xce, 0xeb, 0x65, 0x39, 0xe9, 0x82, 0x2b, 0x81, 0x7f, 0xb3, 0xfe, 0x18, 0xcb, 0xe0, 0x86, 0x95, 0x53, 0x84, 0x22, 0x6c, 0x11, 0xc6, 0x2c, 0x1d, 0xd1, 0x4e, 0x7e, 0xab, 0xda, 0x57, 0x34, 0x50, 0xd0, 0x05, 0xb4, 0x6f, 0xd9, 0xf9, 0xec, 0xca, 0xff, 0x24, 0xdb, 0xf5, 0xd6, 0xd8, 0x53, 0x0b, 0x5e, 0x25, 0xfd, 0x9f, 0x2a, 0x62, 0x9d, 0xf5, 0xc2, 0x0a, 0x97, 0x72, 0x47, 0xca, 0xb3, 0x52, 0x55, 0xd7, 0x1d, 0x99, 0x2d, 0x85, 0xb0, 0x4c, 0x14, 0x16, 0x73, 0xe0, 0xf6, 0xcf, 0x64, 0xf3, 0x4f, 0x52, 0x75, 0x3a, 0x4c, 0x27, 0xd5, 0xbb, 0x2d, 0x9c, 0x70, 0x3c, 0xed, 0xcf, 0xb9, 0xfb, 0x25, 0x09, 0xa7, 0x9f, 0x2e, 0x4d, 0xfd, 0x6f, 0x85, 0x31, 0xcf, 0xc2, 0x74, 0xed, 0x42, 0xb6, 0xef, 0xb2, 0x93, 0x25, 0xbd, 0x3d, 0x5b, 0xd5, 0xd8, 0xab, 0x11, 0xef, 0x15, 0x8f, 0xd0, 0xb3, 0x07, 0x42, 0x5a, 0x69, 0x21, 0x7a, 0x5e, 0x9b, 0x1c, 0x1e, 0xf6, 0x81, 0x98, 0x59, 0x74, 0xbd, 0x06, 0xee, 0x5e, 0x49, 0xc5, 0xcb, 0xb7, 0xad, 0x8b, 0xe0, 0x80, 0x75, 0x07, 0x31, 0x7f, 0xe2, 0xc5, 0x2a, 0x3f, 0xe0, 0x51, 0x33, 0x58, 0x38, 0x9f, 0x85, 0xf0, 0x07, 0xaa, 0x3c, 0x82, 0x6f, 0x5c, 0xad, 0xdf, 0x8c, 0xae, 0xf9, 0x72, 0xa9, 0x10, 0xe3, 0xc7, 0xb4, 0x0b, 0xde, 0x4f, 0xf0, 0x25, 0x6a, 0x5d, 0xea, 0x05, 0xa1, 0x75, 0xae, 0xd7, 0x0d, 0xc6, 0x3a, 0xf2, 0xbd, 0xf5, 0x33, 0xb8, 0x98, 0x1c, 0xd7, 0xbe, 0xf1, 0x13, 0x33, 0x2e, 0x5b, 0xee, 0x96, 0x69, 0xbe, 0xc6, 0x45, 0xf0, 0xaa, 0xbd, 0x70, 0x84, 0xec, 0x3c, 0x65, 0x8c, 0x5f, 0x7f, 0x04, 0xb8, 0x05, 0x54, 0x73, 0xe4, 0x56, 0x1f, 0x13, 0x3f, 0xd8, 0x22, 0xb2, 0xac, 0xf0, 0xfb, 0x02, 0x68, 0xf8, 0x6e, 0x49, 0xed, 0x91, 0x65, 0x5b ],
-const [ 0x52, 0xa7, 0x68, 0x55, 0xb4, 0x15, 0xa3, 0x57, 0xd6, 0x74, 0x78, 0x42, 0x14, 0x01, 0x41, 0xdc, 0xa7, 0x5e, 0x25, 0x7d, 0x1c, 0x37, 0x31, 0xcf, 0x04, 0x26, 0xaa, 0xd2, 0xee, 0xd4, 0xa2, 0x23, 0x92, 0x62, 0xca, 0x7d, 0x4f, 0x07, 0x87, 0x80, 0xd8, 0xfa, 0x48, 0xb1, 0x2a, 0x92, 0x16, 0xc3, 0xc1, 0xab, 0x6d, 0x15, 0x0b, 0x4d, 0x4a, 0x7b, 0x1d, 0x88, 0x85, 0x41, 0xa5, 0xa2, 0x61, 0x6d, 0x1f, 0x75, 0x62, 0x45, 0x4c, 0x12, 0x5e, 0x11, 0xe0, 0xaa, 0xd7, 0x22, 0x7b, 0xaf, 0x88, 0x13, 0xdb, 0x36, 0x3e, 0x4f, 0x50, 0xa0, 0xe9, 0xd3, 0x70, 0x79, 0xf3, 0x36, 0x0b, 0xa0, 0xd0, 0xe6, 0x62, 0xa8, 0xd7, 0xb4, 0x93, 0x7f, 0x50, 0x93, 0x58, 0x4d, 0xce, 0x9c, 0xf1, 0x9f, 0xbf, 0x56, 0x5f, 0xc5, 0x41, 0x35, 0xd3, 0x78, 0x37, 0x60, 0x66, 0xc1, 0x9c, 0xb7, 0x0a, 0x16, 0x18, 0x15, 0xc1, 0xc5, 0xd1, 0xd2, 0x0d, 0x96, 0x84, 0x8d, 0xa7, 0xab, 0xd4, 0x28, 0x73, 0xac, 0xe2, 0x13, 0xb4, 0x21, 0x1d, 0xce, 0x7d, 0x1f, 0x5c, 0xa9, 0x68, 0x27, 0x2a, 0xcf, 0x89, 0x4b, 0x60, 0x82, 0xa5, 0x92, 0xfa, 0xa8, 0xa0, 0x9e, 0x23, 0x87, 0x35, 0x8c, 0x92, 0xcd, 0xea, 0x1c, 0x19, 0xd3, 0x42, 0x12, 0x7b, 0x22, 0x34, 0xdc, 0x7f, 0x37, 0xdc, 0x74, 0x42, 0x83, 0x71, 0x88, 0xd1, 0xb6, 0x77, 0xd9, 0xf7, 0x3d, 0x35, 0xe1, 0x54, 0x09, 0x6a, 0xb8, 0xaf, 0x93, 0x3c, 0x38, 0x8e, 0x1d, 0x71, 0x60, 0x03, 0x3a, 0xe1, 0xf6, 0xc8, 0x90, 0x2b, 0x70, 0x8e, 0xdd, 0xa8, 0x15, 0x93, 0x38, 0x9d, 0x60, 0x73, 0x9a, 0xb5, 0xa5, 0x40, 0x9c, 0xae, 0xf6, 0xd4, 0x82, 0x52, 0x48, 0x66, 0x79, 0xa9, 0xd2, 0x5c, 0x1d, 0x6d, 0xb6, 0x60, 0x3e, 0xbe, 0xe3, 0xb6, 0xe4, 0x17, 0x3a, 0xcd, 0x90, 0x81, 0xf0, 0x14, 0xc5, 0x06, 0x33, 0x0e, 0xc7, 0x69, 0x10, 0xa9, 0xa3, 0x14, 0x94, 0xcc, 0x6f, 0x52, 0x31, 0x2f, 0xd3, 0xbe, 0x64, 0x6f, 0xc9, 0xfc, 0x95, 0x62, 0xa0, 0xa6, 0x3f, 0xa8, 0x47, 0x89, 0x50, 0x82, 0xc8, 0x12, 0xd3, 0xe7, 0x13, 0x03, 0xcc, 0xd5, 0xfd, 0x6a, 0x63, 0xe6, 0x88, 0xd4, 0x45, 0x23, 0x65, 0xbe, 0x48, 0x1c, 0xb7, 0x4c, 0x4e, 0x39, 0x1a, 0x3e, 0x6b, 0x4b, 0xe4, 0x1f, 0x4a, 0x66, 0xab, 0xbf, 0xcc, 0xf3, 0x07, 0xe4, 0xf3, 0x01, 0x98, 0x3d, 0xff, 0xdc, 0x4b, 0x97, 0xd6, 0xe1, 0xda, 0x53, 0xa9, 0x90, 0x92, 0x18, 0xd5, 0xe3, 0x59, 0xc5, 0x07, 0xde, 0xef, 0xaa, 0xa4, 0x68, 0x74, 0xf7, 0x68, 0x59, 0x2b, 0x74, 0x4d, 0xd4, 0x7d, 0x73, 0xae, 0xd7, 0x41, 0x04, 0xac, 0x10, 0x3a, 0x67, 0xd1, 0xf3, 0xe1, 0xc7, 0xf3, 0x09, 0x65, 0x25, 0x5b, 0x8b, 0xf1, 0x92, 0x27, 0x2f, 0x2d, 0xa1, 0xed, 0x42, 0x07, 0x1c, 0xa1, 0xf7, 0xb3, 0xf6, 0xb9, 0xff, 0xf0, 0x81, 0x8e, 0x59, 0x8e, 0xe1, 0x06, 0x6c, 0x2d, 0xc1, 0x70, 0x53, 0x47, 0x44, 0xaf, 0x78, 0x71, 0x3e, 0x9b, 0x64, 0xdd, 0xa5, 0xa4, 0xd5, 0x24, 0x42, 0xb9, 0x11, 0x42, 0xac, 0x68, 0x7b, 0xe2, 0x77, 0x46, 0x64, 0xdd, 0xa9, 0x91, 0x23, 0xfd, 0x6d, 0x14, 0x68, 0x06, 0x0c, 0x4b, 0xcd, 0xf7, 0x18, 0xc8, 0xae, 0x8d, 0xeb, 0xd5, 0x3b, 0x09, 0x50, 0x5b, 0xcb, 0x33, 0x7f, 0x02, 0x74, 0x9f, 0x4f, 0x9a, 0xd8, 0x2f, 0xa7, 0xba, 0x41, 0xd9, 0x35, 0xa6, 0xf1, 0xaa, 0x63, 0x76, 0xb3, 0x0b, 0x87, 0x75, 0xb6, 0x44, 0x5a, 0xc8, 0x9b, 0x3e, 0xac, 0x50, 0xcd, 0x8d, 0x56, 0xd1, 0x11, 0xad, 0x6f, 0x53, 0x5e, 0x8c, 0xc3, 0xc8, 0xee, 0x49, 0x80, 0xf0, 0x95, 0x3c, 0x33, 0x7a, 0x52, 0x36, 0xf3, 0x6c, 0x24, 0x0a, 0xdc, 0xc4, 0x1e, 0x4c, 0xc0, 0x5f, 0xbe, 0x58, 0x18, 0x1b, 0x7b, 0x96, 0x41, 0x39, 0x9d, 0xfd, 0xe5, 0x05, 0x51, 0xd6, 0xb7, 0xb8, 0xfd, 0xc3, 0x63, 0x9d, 0xd1, 0xff, 0xc4, 0x73, 0x9f, 0xe7, 0x58, 0x13, 0xec, 0xba, 0xf2, 0x52, 0x47, 0x9d, 0xaf, 0x29, 0xd9, 0xe2, 0x2b, 0x13, 0x3e, 0x89, 0xf5, 0xb7, 0x93, 0x07, 0x40, 0xc7, 0xd0, 0x47, 0xdb, 0x28, 0x58, 0xef, 0x63, 0x53, 0xcf, 0xe4, 0xb7, 0xfb, 0x2c, 0x10, 0xac, 0xf0, 0x0f, 0x63, 0x02, 0x43, 0x54, 0x17, 0x97, 0xab, 0xe8, 0x39, 0xdb, 0x27, 0xdb, 0x65, 0x84, 0xe5, 0xb7, 0xd1, 0x83, 0x63, 0x11, 0x8c, 0x36, 0xd4, 0x5d, 0x08, 0xdf, 0xc5, 0x07, 0xd7, 0x55, 0x00, 0xbf, 0xb2, 0xf9, 0xb0, 0x14, 0xbf, 0xec, 0xc7, 0x44, 0x14, 0x7f, 0x9d, 0x52, 0x77, 0xeb, 0xd9, 0x5a, 0x67, 0x43, 0x95, 0x22, 0x61, 0xa6, 0xbd, 0xf1, 0x5c, 0xb9, 0xb8, 0xa4, 0x96, 0x54, 0x4b, 0xfe, 0x92, 0x7c, 0xba, 0x40, 0x61, 0x92, 0x30, 0xf9, 0x22, 0xc9, 0x60, 0x20, 0xc5, 0xde, 0x6d, 0x60, 0x14, 0x03, 0x07, 0xb3, 0xf3, 0x1c, 0xd8, 0x32, 0xe6, 0x2d, 0x1e, 0x2c, 0xd5, 0x13, 0x99, 0x75, 0x0c, 0x73, 0xa7, 0x00, 0x86, 0xf1, 0xae, 0xb0, 0x6b, 0xa2, 0xba, 0x6c, 0xd7, 0xc3, 0x67, 0x72, 0xdd, 0xab, 0x02, 0xed, 0xcc, 0xfe, 0xeb, 0xc9, 0xb0, 0x24, 0x3d, 0xc6, 0x1c, 0xf9, 0xb1, 0xcb, 0x27, 0xc6, 0xc0, 0x7e, 0xb5, 0x71, 0x08, 0x11, 0xf8, 0xf0, 0xf1, 0x5e, 0x36, 0x03, 0x90, 0x37, 0xcc, 0x23, 0xcc, 0xf7, 0x73, 0xb5, 0xbf, 0x5d, 0xc2, 0x84, 0x5f, 0x9b, 0xf4, 0x6e, 0x5d, 0xa9, 0xec, 0x5e, 0x4d, 0xdf, 0x76, 0x7a, 0x08, 0xc3, 0xd0, 0x9d, 0x4e, 0x20, 0x69, 0x07, 0xb0, 0x58, 0xe8, 0x53, 0xad, 0xfa, 0x70, 0xaa, 0x1c, 0x97, 0x22, 0x37, 0xca, 0xd2, 0xe4, 0xda, 0x63, 0xb7, 0x61, 0x21, 0x96, 0x4e, 0x51, 0x74, 0x74, 0x6f, 0xfb, 0x8f, 0x19, 0xd7, 0xf8, 0x36, 0x8f, 0x7c, 0x39, 0x23, 0xef, 0x1e, 0x4c, 0x44, 0xc9, 0x1f, 0xda, 0x23, 0xc6, 0x94, 0x75, 0xa6, 0x8c, 0x9c, 0x90, 0xf8, 0xe2, 0xf1, 0xcf, 0xc7, 0x15, 0xbc, 0x82, 0xb0, 0x9a, 0xae, 0x6c, 0xf7, 0xf4, 0x4c, 0xc8, 0x7c, 0xd9, 0x8a, 0x8e, 0xea, 0x90, 0x9c, 0xf2, 0x32, 0x9d, 0x09, 0x2d, 0x38, 0xa0, 0x01, 0x81, 0xcb, 0x7b, 0xf0, 0x77, 0xdb, 0xb3, 0x53, 0x6c, 0xe6, 0x19, 0xcb, 0x4b, 0xb4, 0xa9, 0x6f, 0x9c, 0x44, 0xb2, 0x67, 0xbe, 0x06, 0x37, 0xb7, 0x70, 0x4b, 0x95, 0x58, 0x97, 0xf9, 0x67, 0x8d, 0x3b, 0x83, 0xa7, 0x74, 0xd2, 0x18, 0x16, 0xdb, 0xc1, 0x1b, 0xdd, 0x56, 0x20, 0xd4, 0x74, 0x8e, 0xbd, 0x65, 0xc3, 0xdc, 0x64, 0xff, 0x87, 0x17, 0x5e, 0x55, 0xf8, 0xaa, 0x38, 0x51, 0xa9, 0xe9, 0xc6, 0x06, 0xaf, 0xa5, 0x66, 0xe7, 0x05, 0xfd, 0x89, 0x36, 0x2f, 0x78, 0x70, 0xbf, 0x1e, 0x51, 0x34, 0xc5, 0x54, 0x12, 0x09, 0x3d, 0x48, 0x64, 0xc3, 0x3a, 0x0c, 0x26, 0x9a, 0xa9, 0x2d, 0xbc, 0x2a, 0x3e, 0xdb, 0xaa, 0xbe, 0xae, 0x49, 0x61, 0xcd, 0x1f, 0x57, 0x58, 0xc5, 0xdc, 0x6f, 0x5f, 0x08, 0x4e, 0xac, 0x31, 0x34, 0x28, 0x42, 0x48, 0xa8, 0xe1, 0x1a, 0xf5, 0x44, 0x67, 0xbc, 0xaf, 0x6f, 0x12, 0x72, 0xac, 0x5f, 0xd6, 0xaa, 0xae, 0x95, 0xbe, 0x9d, 0x20, 0xa6, 0x95, 0x2e, 0x61, 0x41, 0xe6, 0x15, 0x60, 0x6e, 0x28, 0x3c, 0x69, 0x14, 0x32, 0x69, 0x3e, 0xbe, 0xf5, 0x1e, 0x6a, 0x9e, 0x69, 0xbe, 0xd2, 0xd3, 0xc8, 0xf0, 0x8d, 0xe7, 0xfb, 0x48, 0xf5, 0x9c, 0x51, 0x25, 0xfe, 0xe8, 0x77, 0xd5, 0xc7, 0x3e, 0xa5, 0x00, 0x6f, 0x0f, 0x15, 0x43, 0x2a, 0x91, 0xb9, 0x1b, 0x94, 0xbf, 0x2d, 0x05, 0x45, 0xa1, 0xeb, 0xe3, 0xa5, 0xcd, 0xbe, 0xa2, 0x01, 0x2e, 0x79, 0x1a, 0xdf, 0x04, 0xe8, 0x35, 0x8f, 0x2c, 0x07, 0x54, 0x03, 0xa2, 0x72, 0xee, 0xe1, 0x44, 0x1d, 0x7a, 0xd5, 0xd8, 0x45, 0x90, 0x2c, 0x51, 0xa6, 0x4b, 0x9f, 0x4e, 0xef, 0xf1, 0x6c, 0xe4, 0x73, 0xd6, 0xac, 0x9d, 0x21, 0x7d, 0xe0, 0xc0, 0xb6, 0x01, 0xcd, 0xd3, 0x31, 0xb3, 0x8a, 0x5f, 0x87, 0x05, 0xd7, 0xf3, 0x99, 0xa7, 0xb0, 0x6b, 0x63, 0xef, 0x22, 0x72, 0x76, 0x7e, 0x5e, 0x46, 0xa8, 0x21, 0x0c, 0xbc, 0x0a, 0xf5, 0xe1, 0x83, 0x1a, 0xcf, 0x74, 0xac, 0x3a, 0xda, 0x4d, 0x6a, 0x61, 0x82, 0x3f, 0x17, 0x11, 0x91, 0xf9, 0x78, 0x89, 0x98, 0xd7, 0x42, 0x3b, 0x91, 0xfe, 0xdd, 0x80, 0xc2, 0xa7, 0x67, 0x8b, 0xe5, 0xbb, 0xfc, 0x9b, 0x85, 0xa1, 0x35, 0x75, 0xab, 0x53, 0xee, 0x12, 0xba, 0xb8, 0x4d, 0x95, 0x98, 0x2e, 0x00, 0x80, 0x0e, 0x65, 0xc5, 0x26, 0x72, 0x74, 0x30, 0x64, 0x83, 0x26, 0xa9, 0x8c, 0x94, 0x95, 0xb4, 0xa2, 0xed, 0xfb, 0x75, 0xcb, 0x6e, 0xc4, 0x73, 0x02, 0x75, 0xe8, 0x9c, 0x0d, 0x02, 0x77, 0x89, 0xaf, 0x19, 0x76, 0x04, 0x20, 0x68, 0xe9, 0xc7, 0xba, 0x2a, 0x31, 0x87, 0xf5, 0x4b, 0x98, 0x31, 0x95, 0xcd, 0x2b, 0x74, 0x22, 0x6a, 0xc8, 0x7f, 0x99, 0x7b, 0x77, 0x0c, 0x61, 0x18, 0xfd, 0x9d, 0x80, 0x81, 0xaf, 0x05, 0x0f, 0xbc, 0x85, 0x2b, 0xeb, 0x80, 0x6f, 0x0b, 0xae, 0x52, 0xec, 0xfd, 0xde, 0xee, 0xd8, 0x3a, 0x64, 0xe8, 0x85, 0x9c, 0x3f, 0x93, 0x0e, 0xa5, 0x79, 0x22, 0xe8, 0xc3, 0x5a, 0x0d, 0xba, 0xd2, 0xdd, 0xb7, 0x6f, 0xe3, 0x60, 0x4d, 0x89, 0x3c, 0x9f, 0xf1, 0xb8, 0xa0, 0xe3, 0x18, 0xab, 0xd0, 0x77, 0x30, 0x26, 0x51, 0x5c, 0x87, 0x55, 0x70, 0x3d, 0x68, 0x60, 0x84, 0xa5, 0x87, 0x3f, 0x73, 0x70, 0x9e, 0xd0, 0x77, 0x80, 0x59, 0x26, 0x22, 0xb1, 0x70, 0x24, 0xa0, 0x0e, 0x12, 0x4b, 0x3d, 0x45, 0x8a, 0xd1, 0x26, 0x58, 0x1d, 0xf3, 0x74, 0x96, 0x31, 0x8c, 0x66, 0xca, 0xb5, 0xe5, 0xee, 0xb2, 0xbc, 0xcf, 0x70, 0xb2, 0x6b, 0xef, 0xc6, 0xca, 0x16, 0x5a, 0x87, 0xc6, 0xa6, 0x62, 0x89, 0xb4, 0x3e, 0xaf, 0xa4, 0x9b, 0x1e, 0x91, 0xb9, 0x6a, 0xc7, 0x94, 0xf3, 0x2f, 0x5f, 0x55, 0x4d, 0x89, 0x58, 0x95, 0x55, 0x60, 0x4d, 0x8c, 0x2f, 0xd3, 0x2c, 0x7f, 0xdc, 0x72, 0x9a, 0x95, 0xbd, 0xae, 0x93, 0xe7, 0x52, 0x8d, 0x51, 0xd6, 0x48, 0xa3, 0x70, 0xa1, 0xb3, 0x3d, 0x4f, 0x37, 0x98, 0xdf, 0xb9, 0x49, 0xae, 0xf1, 0xc5, 0xa4, 0x65, 0xb5, 0xfa, 0xbe, 0x28, 0x7c, 0xb7, 0x8e, 0xdf, 0x1a, 0xd2, 0xa1, 0xb9, 0x97, 0x80, 0x6b, 0x28, 0x27, 0x75, 0xdb, 0x2d, 0x5c, 0x4c, 0x32, 0xd5, 0x9b, 0x28, 0x14, 0x04, 0xcd, 0x9c, 0xdf, 0x71, 0x56, 0xc8, 0x3d, 0xf2, 0x4b, 0xc5, 0xf5, 0xfa, 0xdf, 0x44, 0x07, 0x5f, 0x1f, 0x71, 0xf7, 0x61, 0xe0, 0x1e, 0x69, 0xe9, 0xf5, 0x1d, 0xee, 0x0e, 0xa5, 0xed, 0x1e, 0xdd, 0x5c, 0x9a, 0xe7, 0x5a, 0xa0, 0xde, 0x24, 0xc2, 0x47, 0x8c, 0x71, 0x13, 0xe7, 0x2e, 0x3e, 0xce, 0x8f, 0xed, 0x23, 0xfc, 0xb4, 0xb2, 0x73, 0x6f, 0x6e, 0x8b, 0x14, 0x4a, 0xe5, 0x50, 0x8e, 0xc4, 0x05, 0x86, 0x61, 0x28, 0x7a, 0x83, 0x9c, 0x20, 0xd8, 0xd3, 0xab, 0x34, 0x19, 0xdb, 0x71, 0x8e, 0x4d, 0xbc, 0x97, 0x00, 0x8d, 0x7b, 0x23, 0x48, 0x31, 0x5e, 0x4c, 0x92, 0x43, 0x99, 0x8c, 0x3e, 0x33, 0x29, 0xf8, 0xe4, 0xcb, 0x01, 0xcd, 0x95, 0x66, 0x64, 0x4b, 0x64, 0x5d, 0x92, 0xc6, 0x25, 0xc3, 0xa6, 0xfa, 0x75, 0x52, 0xbf, 0x9f, 0xfb, 0xa4, 0x5e, 0x3d, 0xed, 0xa7, 0x0f, 0x42, 0xd5, 0x4b, 0x4c, 0x52, 0x95, 0x7d, 0x9e, 0xde, 0xa8, 0x59, 0x05, 0xf8, 0xac, 0x9b, 0x9a, 0x65, 0x1d, 0x57, 0x73, 0xf4, 0x64, 0xeb, 0xc7, 0x0f, 0x10, 0x31, 0x52, 0x90, 0x63, 0xf9, 0xfb, 0xd6, 0x10, 0xb6, 0xb5, 0x17, 0x43, 0x77, 0xa3, 0xf7, 0xe2, 0x19, 0x7f, 0x5a, 0x12, 0xbb, 0x3c, 0x77, 0xfe, 0x73, 0xea, 0x2f, 0xd4, 0x3f, 0xdb, 0x9c, 0x0f, 0x3f, 0x04, 0xec, 0xfc, 0x21, 0xa5, 0x70, 0x77, 0xdc, 0x2d, 0xf0, 0xf6, 0xa1, 0x58, 0x42, 0xca, 0x0e, 0x9a, 0x1a, 0xa1, 0xa6, 0xc0, 0x24, 0x4e, 0x7e, 0xd5, 0x50, 0xcd, 0x38, 0x42, 0x6e, 0x81, 0x35, 0x3a, 0xfa, 0xc1, 0x07, 0x55, 0x39, 0x93, 0x25, 0x7b, 0x85, 0xb7, 0xe3, 0x04, 0xe4, 0xe8, 0xa1, 0x1d, 0xe0, 0x5e, 0x42, 0x6e, 0x93, 0x97, 0xe0, 0xfa, 0x02, 0x57, 0xbd, 0x46, 0xac, 0xee, 0x7d, 0xbd, 0x62, 0xb9, 0x93, 0x53, 0x58, 0xeb, 0xfa, 0x69, 0x7d, 0x8d, 0x25, 0xf0, 0x08, 0xc4, 0x38, 0xd2, 0x53, 0x53, 0x78, 0x8d, 0xed, 0x60, 0x00, 0x21, 0xeb, 0x7b, 0xb7, 0x2d, 0x7e, 0xdc, 0x7e, 0x55, 0xcb, 0xec, 0xae, 0xe6, 0xf6, 0x08, 0xc1, 0xbd, 0x80, 0x81, 0x4f, 0x65, 0xd4, 0xe7, 0x3d, 0x7f, 0x1c, 0x87, 0x31, 0x67, 0x59, 0x32, 0x48, 0x14, 0xb3, 0x40, 0x0c, 0x40, 0x0d, 0xd5, 0xa0, 0xc9, 0xdd, 0x63, 0x3e, 0x58, 0x3b, 0x70, 0xe4, 0x40, 0x38, 0x9a, 0x49, 0xa9, 0x70, 0xd8, 0x16, 0xed, 0xe3, 0x02, 0x53, 0x42, 0x00, 0x94, 0x1f, 0x9a, 0x03, 0xaf, 0xa5, 0xc7, 0x81, 0x60, 0x4b, 0xe3, 0x41, 0x25, 0x2c, 0xef, 0x4e, 0xad, 0xc9, 0xba, 0x4a, 0xe0, 0xfb, 0x04, 0x05, 0x1f, 0x2d, 0xe4, 0x4f, 0xcd, 0xc7, 0x67, 0x0a, 0x0e, 0xed, 0x7a, 0x83, 0xce, 0x6a, 0x0a, 0x02, 0x06, 0xe7, 0x69, 0x9f, 0x3a, 0x61, 0xf4, 0x58, 0x47, 0xda, 0xf3, 0x61, 0x5b, 0x4e, 0xc0, 0xbb, 0x45, 0xe8, 0x2c, 0x08, 0xef, 0x76, 0x1e, 0x9e, 0x28, 0x1b, 0x7d, 0xda, 0xa7, 0x43, 0x50, 0xb6, 0x4d, 0xdc, 0x24, 0x9e, 0xab, 0xc4, 0xae, 0x80, 0xc4, 0x7d, 0xb2, 0x23, 0x14, 0x28, 0x24, 0xb9, 0xd1, 0xb1, 0x8c, 0xb7, 0x70, 0x47, 0xaf, 0xe4, 0x6b, 0x0f, 0x6b, 0xb0, 0x42, 0x19, 0xe3, 0xc8, 0xc0, 0x93, 0xdc, 0xe7, 0x7f, 0x3c, 0x67, 0xef, 0xae, 0x1c, 0xc1, 0x38, 0x12, 0x73, 0x77, 0x28, 0x4b, 0xef, 0xcd, 0x04, 0x59, 0x21, 0x61, 0x05, 0x5e, 0x32, 0x0c, 0xaf, 0xa5, 0xd2, 0x09, 0x5e, 0xe4, 0x72, 0x59, 0x22, 0xbe, 0xb3, 0x65, 0xcc, 0x8c, 0x1e, 0xe6, 0x49, 0x5d, 0x15, 0x02, 0x2f, 0x3b, 0x09, 0xb7, 0x96, 0xb1, 0xee, 0x7d, 0x29, 0x8a, 0xec, 0x27, 0x7d, 0xda, 0x58, 0x0b, 0xa1, 0x43, 0xe2, 0x62, 0xf6, 0x71, 0x10, 0xf2, 0x40, 0xe7, 0xeb, 0xea, 0xfe, 0xfe, 0xf8, 0x0d, 0xf7, 0x2a, 0x69, 0x12, 0x16, 0x80, 0x95, 0x4b, 0x77, 0x75, 0xa6, 0x86, 0xc2, 0xe9, 0x91, 0x31, 0xb8, 0x64, 0x4c, 0xc1, 0x0b, 0x9f, 0x3b, 0x54, 0x73, 0x46, 0xeb, 0x94, 0xfe, 0xfc, 0x02, 0xdf, 0xa8, 0xa0, 0x76, 0xa6, 0x2b, 0xce, 0xfe, 0x13, 0x18, 0xa9, 0xc6, 0xef, 0x27, 0xd8, 0x67, 0xc2, 0xcb, 0xcf, 0x16, 0x3c, 0x0a, 0x50, 0x1b, 0xd3, 0x8c, 0x31, 0x86, 0xae, 0xf2, 0x5f, 0x1d, 0xc2, 0x69, 0x23, 0x98, 0x3b, 0x7e, 0xa4, 0x11, 0x1d, 0x34, 0xae, 0xb6, 0x2b, 0x53, 0xb1, 0xc1, 0x08, 0x04, 0x0d, 0xaa, 0x9c, 0x9b, 0x8c, 0x9a, 0xb9, 0xb4, 0x30, 0x24, 0xfe, 0x81, 0x30, 0x30, 0xfc, 0x62, 0x3d, 0x37, 0x98, 0xb6, 0x09, 0xb6, 0xb0, 0xf2, 0x0a, 0xdc, 0x02, 0xf0, 0x7c, 0x86, 0x49, 0x89, 0xa5, 0x6e, 0xa8, 0x65, 0x5c, 0x9f, 0x4c, 0x12, 0xcc, 0x2d, 0x4e, 0x54, 0x76, 0x22, 0xd6, 0xbc, 0x75, 0xbb, 0x86, 0x7c, 0x06, 0xd5, 0x16, 0x7a, 0x47, 0xa2, 0x3b, 0xa3, 0x3f, 0xa0, 0xce, 0x82, 0x1f, 0xcc, 0x2a, 0x11, 0xc7, 0x13, 0xd6, 0xcf, 0x8c, 0x09, 0x64, 0x12, 0x39, 0xdd, 0x98, 0x9f, 0x53, 0x8d, 0xcd, 0x78, 0xa2, 0x56, 0x95, 0xf5, 0xec, 0x6f, 0xa0, 0x16, 0x04, 0xf6, 0xdf, 0x18, 0x04, 0x2b, 0xe8, 0x46, 0xd6, 0xdc, 0x9d, 0x12, 0xf9, 0x20, 0x08, 0x64, 0x81, 0x48, 0x8a, 0x32, 0x60, 0x13, 0x35, 0x51, 0xe5, 0x21, 0x76, 0x8b, 0x82, 0xaa, 0xf7, 0xf1, 0xd2, 0x70, 0xc3, 0x72, 0xda, 0xf2, 0xac, 0xad, 0x90, 0xe3, 0xea, 0x04, 0x99, 0xda, 0x04, 0xf2, 0x57, 0x4b, 0xf4, 0x9e, 0x23, 0xb6, 0x86, 0xb0, 0xd7, 0x1e, 0x01, 0x63, 0x90, 0xbd, 0x09, 0xdb, 0xb2, 0xf6, 0xc4, 0xba, 0x2c, 0x8b, 0x3c, 0xee, 0xfd, 0x10, 0x04, 0xcc, 0xf7, 0xa0, 0x1f, 0x63, 0xc2, 0xce, 0x1d, 0x0a, 0x25, 0xde, 0x87, 0x3c, 0x81, 0x36, 0x7d, 0xa6, 0x9e, 0x0f, 0x9e, 0x7d, 0xaa, 0x70, 0x28, 0x15, 0x7f, 0x5d, 0x60, 0xb0, 0x25, 0x4c, 0x35, 0x94, 0x98, 0xd8, 0x20, 0x60, 0xcb, 0xb9, 0x4e, 0x9f, 0xec, 0xf4, 0x01, 0x9e, 0xea, 0x4f, 0x34, 0x7b, 0x35, 0x08, 0x7e, 0x7f, 0xc5, 0xc6, 0x38, 0xad, 0x5d, 0xd0, 0xe2, 0x9b, 0x11, 0x7d, 0xc3, 0x81, 0x06, 0xec, 0xd0, 0x90, 0x79, 0xf4, 0xcf, 0x85, 0x02, 0x5e, 0xbc, 0x7d, 0x1a, 0x52, 0x6c, 0x0b, 0xdc, 0x10, 0x70, 0x88, 0x08, 0xe1, 0x3c, 0xaa, 0x4d, 0x4c, 0x89, 0x58, 0xc8, 0x8c, 0xf7, 0xbd, 0xc8, 0x42, 0xf7, 0x9c, 0xd4, 0x68, 0xe8, 0xe3, 0xef, 0x86, 0x80, 0x82, 0x1a, 0x28, 0x6e, 0x7d, 0x1b, 0x8f, 0x3d, 0x40, 0x7d, 0xa7, 0x7c, 0x34, 0xd8, 0x39, 0x1c, 0x8f, 0x52, 0x62, 0x19, 0x70, 0x66, 0x44, 0x5d, 0x2b, 0xe4, 0xfb, 0xe1, 0xe1, 0x39, 0xd2, 0x15, 0x55, 0xf1, 0xb7, 0x82, 0xfa, 0x7a, 0xed, 0xad, 0x51, 0x2b, 0x01, 0x3f, 0x71, 0x84, 0xff, 0x64, 0xe7, 0xb8, 0xe5, 0x71, 0xc1, 0x68, 0x58, 0xc9, 0xe6, 0xb2, 0x96, 0x01, 0xa9, 0x6a, 0xac, 0x42, 0x9d, 0xa7, 0xe9, 0xef, 0xaa, 0x82, 0x92, 0x88, 0x60, 0x1a, 0xd7, 0xcf, 0x8c, 0xdc, 0x06, 0x29, 0x09, 0x01, 0xff, 0x46, 0xd9, 0x57, 0xe8, 0x04, 0x74, 0x45, 0x22, 0x91, 0x60, 0x09, 0x7b, 0xd0, 0x02, 0x45, 0xa5, 0xff, 0xb4, 0xba, 0xe7, 0x96, 0x18, 0x53, 0x12, 0x72, 0xab, 0x65, 0xb7, 0x32, 0x9d, 0x35, 0x97, 0xe2, 0xe0, 0xbb, 0x5b, 0xd7, 0x7f, 0xa5, 0x85, 0xd9, 0x31, 0x9f, 0xa7, 0x88, 0x2e, 0xd2, 0xd2, 0xf8, 0x41, 0xaa, 0x52, 0x9f, 0x1e, 0xdd, 0x98, 0x71, 0xf7, 0xa9, 0x78, 0x49, 0x4a, 0x5d, 0x95, 0x8b, 0xfd, 0x1a, 0x19, 0x07, 0xac, 0xdb, 0xa9, 0x21, 0x42, 0xb3, 0x98, 0x2f, 0xc6, 0x56, 0x5a, 0x23, 0x78, 0xdb, 0x3c, 0x6a, 0x1d, 0xc0, 0x53, 0x14, 0x97, 0x2f, 0xb2, 0x34, 0xb8, 0x7f, 0xe0, 0x8a, 0x58, 0xfe, 0x8a, 0x5f, 0xa5, 0xee, 0x74, 0xb1, 0xbb, 0xcd, 0xb5, 0x90, 0x75, 0xda, 0x24, 0xc8, 0x82, 0xd4, 0x0e, 0xc0, 0xbb, 0x05, 0x2a, 0xa2, 0xb3, 0x7f, 0xce, 0xbc, 0x90, 0xa6, 0x62, 0x27, 0x1a, 0xee, 0x16, 0xa6, 0x12, 0xe6, 0xd0, 0xd0, 0xc5, 0x76, 0x68, 0x72, 0xe1, 0x64, 0x18, 0x2f, 0x86, 0x1d, 0x2e, 0x69, 0xa0, 0xb3, 0x04, 0x65, 0x75, 0x22, 0x32, 0xa9, 0x7a, 0xd7, 0x02, 0xa9, 0x6b, 0x73, 0x25, 0xa3, 0x9a, 0xcc, 0xa4, 0xc8, 0x88, 0x34, 0x19, 0x9c, 0xb2, 0xff, 0x1e, 0x9f, 0xad, 0x3f, 0x06, 0x2d, 0x75, 0xd2, 0xcb, 0xa3, 0x03, 0x9f, 0x48, 0xc3, 0x1d, 0x1c, 0xa8, 0x5a, 0x72, 0x14, 0x1f, 0x1f, 0xe6, 0xa7, 0xd8, 0xdf, 0x2b, 0x92, 0x2e, 0xd7, 0x91, 0xb0, 0x1e, 0x62, 0x1f, 0xc1, 0xfc, 0xd4, 0xe2, 0x6b, 0x66, 0xa5, 0x85, 0x7e, 0x77, 0xd2, 0x22, 0x7c, 0x3c, 0x80, 0x58, 0x59, 0x6c, 0xe2, 0x9e, 0x7f, 0x53, 0x5e, 0xd6, 0x15, 0x10, 0xeb, 0x26, 0x81, 0x00, 0xbe, 0x03, 0x2b, 0x7a, 0x25, 0x8e, 0x84, 0xbd, 0xb3, 0x24, 0x48, 0x26, 0x9d, 0x30, 0x00, 0xa7, 0x64, 0x44, 0xca, 0x74, 0xb4, 0x69, 0x5c, 0xff, 0x8d, 0xb3, 0x47, 0x27, 0xa0, 0x18, 0x79, 0xac, 0xfc, 0x81, 0x06, 0xe7, 0xe9, 0x22, 0x28, 0xb8, 0x14, 0x07, 0x84, 0xbf, 0xed, 0xf0, 0xae, 0xcf, 0x4e, 0x5f, 0xf0, 0x9f, 0x5d, 0xef, 0x47, 0xc3, 0xb3, 0xe7, 0xaf, 0xdb, 0xbe, 0x0f, 0xa0, 0x0b, 0x63, 0xc3, 0xd9, 0xab, 0xe8, 0x45, 0x5c, 0x3f, 0x12, 0x58, 0xba, 0xa9, 0x8a, 0x0a, 0x90, 0x9d, 0x85, 0xd1, 0x52, 0x56, 0xa4, 0xd9, 0x47, 0x87, 0x19, 0x9d, 0xd5, 0x95, 0x0c, 0xb5, 0xff, 0x03, 0x3d, 0xee, 0x2c, 0x2e, 0xea, 0xa0, 0x2a, 0x3a, 0xf3, 0x3c, 0x72, 0x4c, 0x3c, 0x25, 0xae, 0xf9, 0x53, 0xc1, 0x78, 0xff, 0x53, 0xcf, 0x65, 0x33, 0x08, 0xfb, 0x42, 0xbb, 0x53, 0xaf, 0x9d, 0x7d, 0xd0, 0x2d, 0x88, 0xd7, 0xb7, 0xdb, 0x99, 0x91, 0x00, 0xdd, 0x35, 0x10, 0xcb, 0xe9, 0x0e, 0xcc, 0xfe, 0x57, 0xeb, 0x04, 0x30, 0x78, 0xa8, 0xb0, 0xc6, 0x29, 0x7d, 0xb7, 0x5b, 0xa8, 0x83, 0x62, 0x66, 0xa6, 0x73, 0x10, 0x16, 0x9d, 0xb1, 0x2c, 0x81, 0x63, 0x8a, 0x5d, 0xfe, 0x00, 0xba, 0xfc, 0xcf, 0xbd, 0x32, 0xcb, 0x04, 0x7d, 0x18, 0xe4, 0x9b, 0x50, 0x0e, 0xef, 0xec, 0x46, 0xb7, 0x98, 0x45, 0x81, 0x77, 0x41, 0xd1, 0x8e, 0x7b, 0xf3, 0xbe, 0xf6, 0xfa, 0x9b, 0x9e, 0x0f, 0xba, 0x73, 0x0e, 0x18, 0xd5, 0xbe, 0x96, 0x85, 0xbd, 0xb8, 0xd1, 0x98, 0x7e, 0xcd, 0xce, 0x31, 0x43, 0x09, 0xb5, 0xe7, 0x1c, 0xd0, 0xae, 0x57, 0xfe, 0xcf, 0xfe, 0xbc, 0x0c, 0x32, 0x73, 0xc1, 0x14, 0x17, 0x03, 0x93, 0x5d, 0x43, 0xb0, 0x39, 0xa0, 0x14, 0xaf, 0x28, 0x54, 0xb7, 0xc8, 0x12, 0x2e, 0x9b, 0x00, 0x00, 0xe9, 0x26, 0x76, 0xa0, 0x43, 0xa6, 0x8b, 0xe0, 0x48, 0x8a, 0x45, 0xbb, 0xd2, 0xd2, 0xf6, 0x53, 0x51, 0xc4, 0x18, 0x41, 0xc8, 0xe1, 0x7c, 0x29, 0x18, 0x17, 0xa4, 0x91, 0x81, 0x38, 0x6d, 0xf3, 0x66, 0xab, 0xf0, 0x10, 0x50, 0x62, 0xab, 0x88, 0x36, 0x0b, 0xdc, 0xa8, 0xfc, 0x8b, 0x2e, 0x83, 0x39, 0xa8, 0x97, 0x44, 0x3d, 0x05, 0x81, 0xc2, 0x53, 0x54, 0x28, 0x55, 0x43, 0xc7, 0x43, 0xe9, 0x1b, 0xc7, 0xe6, 0x50, 0x2f, 0xe9, 0xa7, 0xdd, 0x5f, 0x1e, 0x00, 0x2e, 0x98, 0x2a, 0xf4, 0x49, 0x9e, 0x57, 0xf5, 0xeb, 0x08, 0x6a, 0x06, 0x1c, 0x8c, 0xd6, 0x1d, 0x07, 0x7c, 0x30, 0xcb, 0x09, 0x91, 0xe3, 0x1e, 0x08, 0xe8, 0x25, 0xc7, 0x06, 0x4a, 0x29, 0x78, 0xf5, 0xb0, 0x96, 0x90, 0xcd, 0x06, 0x39, 0xfa, 0xdd, 0x30, 0xf6, 0x52, 0x5e, 0x4b, 0x05, 0x4a, 0x4e, 0x35, 0x5b, 0x4d, 0x7c, 0x4f, 0x65, 0x62, 0xdf, 0x81, 0xfc, 0x52, 0x2b, 0x7f, 0x96, 0x0d, 0xa6, 0x4b, 0xb9, 0x4a, 0x38, 0xfc, 0xb6, 0x6e, 0xc2, 0xbd, 0x93, 0xaf, 0xb1, 0x18, 0x49, 0x79, 0xd3, 0x75, 0x30, 0x10, 0x69, 0xdd, 0xb7, 0x78, 0x7d, 0x04, 0x58, 0x92, 0x76, 0x87, 0xcb, 0x87, 0xe9, 0x72, 0x7a, 0x69, 0xb2, 0x05, 0x36, 0x18, 0x44, 0xb8, 0x28, 0x63, 0x3d, 0x7c, 0x0a, 0x70, 0x3e, 0x44, 0x97, 0x5e, 0xf9, 0xc4, 0x3f, 0x28, 0x8b, 0x78, 0x20, 0xcd, 0x0d, 0xe9, 0x32, 0xae, 0x65, 0x2c, 0xc1, 0x37, 0x62, 0xab, 0x21, 0xc1, 0x09, 0x28, 0x9d, 0xb7, 0x29, 0xfe, 0xb0, 0xf8, 0x36, 0xaa, 0x78, 0x7d, 0x53, 0x8b, 0x67, 0x3c, 0xb1, 0xe6, 0x3c, 0x4c, 0x18, 0x2d, 0x31, 0x49, 0xc3, 0x81, 0x76, 0xfa, 0x71, 0x75, 0xdf, 0x31, 0xb9, 0x15, 0xda, 0xf3, 0x9e, 0x27, 0xa3, 0xd9, 0x63, 0xb0, 0xbb, 0xb6, 0xa1, 0xba, 0x96, 0x7a, 0x96, 0x55, 0x93, 0x57, 0xc0, 0xdc, 0x32, 0x22, 0xaa, 0x79, 0x82, 0xfb, 0x07, 0xeb, 0xd8, 0x30, 0xfd, 0x87, 0xc6, 0x5f, 0xc3, 0x7d, 0x4b, 0xdb, 0x6e, 0x5d, 0x48, 0x51, 0x08, 0xda, 0x33, 0xac, 0xe3, 0xcd, 0x0f, 0x35, 0x2c, 0x7d, 0x9c, 0xff, 0xc3, 0x1d, 0xcb, 0x82, 0x4a, 0x96, 0x74, 0x86, 0x7d, 0x87, 0x4b, 0x43, 0xc1, 0x8a, 0x11, 0xc6, 0xff, 0xba, 0x07, 0x96, 0xb2, 0x72, 0xa8, 0x98, 0x3f, 0x57, 0x97, 0x30, 0x86, 0x98, 0xd7, 0xa9, 0xb6, 0x74, 0x3a, 0xd7, 0x65, 0xfd, 0x1c, 0xfa, 0xe0, 0x1c, 0x50, 0xe6, 0xbf, 0xd6, 0x5b, 0x61, 0xbd, 0xcd, 0xe0, 0xcd, 0xc7, 0x0a, 0x5c, 0x07, 0x53, 0xf9, 0x14, 0x8e, 0xf3, 0xb5, 0x4b, 0xe8, 0x2a, 0x86, 0xb7, 0x41, 0x7e, 0xa9, 0x36, 0x56, 0xce, 0x4f, 0xbe, 0x91, 0xe6, 0xe7, 0x92, 0x75, 0x51, 0xa0, 0xbc, 0x3d, 0x6e, 0x2a, 0xb7, 0xc0, 0xc7, 0xbd, 0x6c, 0x98, 0x9d, 0x5d, 0x60, 0x83, 0xc8, 0x5c, 0x2b, 0x09, 0xbe, 0x20, 0x2c, 0x60, 0xf1, 0x27, 0x7b, 0x8c, 0x5e, 0x47, 0x1f, 0xca, 0x62, 0x3b, 0x81, 0x2f, 0xd0, 0x5b, 0x21, 0x8d, 0x42, 0xab, 0x88, 0x96, 0xac, 0x17, 0x7e, 0x44, 0x37, 0xfd, 0x7c, 0x78, 0x4c, 0xec, 0x64, 0xe1, 0xee, 0xac, 0x70, 0x1f, 0x4e, 0x7e, 0x68, 0x28, 0x99, 0xa4, 0x19, 0xeb, 0x15, 0x24, 0x02, 0x34, 0x6c, 0xca, 0x50, 0xd0, 0x48, 0x6c, 0x0d, 0xf1, 0x1f, 0x71, 0x94, 0xd4, 0x51, 0x94, 0x48, 0xa0, 0x70, 0xe6, 0x85, 0x92, 0xde, 0x12, 0xd7, 0x57, 0x9e, 0xe5, 0x6a, 0xb9, 0x64, 0x0e, 0xc2, 0x7e, 0xee, 0x22, 0xac, 0x8d, 0x97, 0xe3, 0x75, 0x53, 0x2a, 0xc1, 0x59, 0x65, 0xf4, 0xa1, 0x3e, 0x67, 0x1d, 0xde, 0xa3, 0x2c, 0x38, 0x8d, 0xd3, 0x1e, 0x18, 0x06, 0x5e, 0xe1, 0xe5, 0xa0, 0xc9, 0x33, 0x70, 0xbb, 0x85, 0x17, 0xc4, 0x04, 0x1e, 0x32, 0xfe, 0xf4, 0xb5, 0x75, 0x5e, 0x9a, 0xb0, 0xfc, 0x9d, 0x9b, 0xb0, 0x36, 0x81, 0x77, 0xc3, 0x47, 0xb0, 0x0d, 0xdc, 0xaa, 0xc2, 0x62, 0x80, 0x1b, 0x99, 0x9e, 0xc1, 0xb4, 0xf5, 0x57, 0x70, 0x56, 0x43, 0x12, 0x8f, 0x4a, 0xb6, 0x07, 0x05, 0x28, 0x99, 0x25, 0x95, 0xf8, 0xe4, 0x56, 0x11, 0x98, 0x0d, 0x04, 0xcb, 0x5e, 0x20, 0xdc, 0x4d, 0xfd, 0x12, 0xd2, 0x4a, 0xad, 0x53, 0x65, 0xd4, 0x86, 0xa2, 0x24, 0xce, 0x2d, 0x25, 0x71, 0xa5, 0xb3, 0xb9, 0x85, 0x3b, 0xba, 0x87, 0xb4, 0x24, 0xda, 0xd8, 0xf2, 0x15, 0x43, 0x2a, 0x97, 0x99, 0xa3, 0x82, 0x5f, 0x06, 0x4a, 0x05, 0xb5, 0xb0, 0x8c, 0xc2, 0x31, 0x5c, 0x66, 0xd3, 0x5f, 0xf8, 0x65, 0xa4, 0xc2, 0x89, 0xc4, 0x92, 0x18, 0x64, 0xd4, 0xb8, 0xe0, 0xa1, 0xa1, 0x05, 0x1a, 0xcd, 0xd3, 0x92, 0x4e, 0xdf, 0xd2, 0x33, 0xcf, 0x6d, 0x2e, 0x4d, 0x41, 0x20, 0x3d, 0xe7, 0x59, 0x66, 0x06, 0x03, 0xe4, 0x66, 0x5d, 0x2e, 0x0b, 0x39, 0x50, 0x56, 0xd5, 0x57, 0xc2, 0xdc, 0xed, 0x4f, 0x56, 0xea, 0xa6, 0xbc, 0x8f, 0x07, 0x3c, 0x74, 0x35, 0xe8, 0x5d, 0x02, 0xfa, 0x89, 0xe7, 0x57, 0x5d, 0x7d, 0xf4, 0xbc, 0xcf, 0x83, 0x14, 0x0b, 0x14, 0x59, 0xd9, 0x1f, 0xed, 0xd5, 0x99, 0x89, 0xf4, 0x31, 0x6f, 0x84, 0xc7, 0xa7, 0x83, 0x2c, 0x68, 0x3d, 0x8b, 0xea, 0xe4, 0xe3, 0x92, 0x33, 0x33, 0xbb, 0xf8, 0x72, 0x60, 0xb8, 0xbb, 0x42, 0xea, 0x6a, 0xf4, 0xe1, 0x69, 0x18, 0xa5, 0xe1, 0x74, 0x10, 0xb1, 0x21, 0xc3, 0x3b, 0x2c, 0xfc, 0x91, 0xf4, 0xd5, 0xc0, 0x44, 0x1a, 0xe1, 0x62, 0x50, 0x64, 0xfb, 0x70, 0x59, 0xf5, 0x88, 0x46, 0x98, 0x31, 0x2f, 0x85, 0x7f, 0xce, 0x99, 0xc1, 0xa0, 0x2e, 0x75, 0x7a, 0xcb, 0xec, 0xc0, 0x4e, 0x76, 0xb5, 0x43, 0x6c, 0x62, 0x59, 0x5d, 0x4c, 0x7c, 0x21, 0x02, 0x9e, 0x02, 0x64, 0x04, 0x80, 0xe6, 0x55, 0x91, 0xf3, 0x77, 0x1f, 0xfe, 0x90, 0x3e, 0x34, 0xc2, 0x77, 0x26, 0xe1, 0xc6, 0x89, 0xe1, 0x27, 0xdc, 0xd7, 0x86, 0xc6, 0x8c, 0x59, 0x7f, 0x9a, 0x17, 0xe4, 0xa2, 0x2a, 0xb6, 0x56, 0x9e, 0x7f, 0x23, 0x14, 0x99, 0x32, 0x5a, 0xb6, 0x17, 0xc9, 0xa1, 0x00, 0x1e, 0x44, 0xc6, 0x14, 0x98, 0xf2, 0xa8, 0xe7, 0xf8, 0x89, 0xf8, 0xf2, 0x20, 0x76, 0x41, 0x2a, 0x82, 0x72, 0x26, 0x31, 0x86, 0x56, 0xec, 0xce, 0x2c, 0x30, 0x38, 0x9b, 0xf3, 0x96, 0x19, 0xfd, 0xf9, 0x3a, 0x48, 0x59, 0x63, 0xbf, 0xaf, 0x85, 0xff, 0xcb, 0x29, 0x7d, 0x28, 0x5e, 0x89, 0x58, 0xeb, 0x62, 0xdd, 0x7a, 0x68, 0x83, 0xf4, 0x0a, 0x7a, 0x40, 0x1d, 0xa7, 0x9a, 0x42, 0x32, 0x56, 0x00, 0xed, 0xd5, 0xbf, 0x0c, 0x36, 0xfa, 0x9a, 0xe5, 0xb4, 0xa6, 0x64, 0x60, 0xf9, 0xf5, 0x56, 0x23, 0x22, 0x62, 0x97, 0x0a, 0xad, 0x43, 0xb1, 0xc9, 0x8b, 0x93, 0x42, 0xd3, 0x76, 0xf4, 0xf4, 0x7b, 0x85, 0xf4, 0xae, 0x59, 0xfe, 0x90, 0x0c, 0xf0, 0x6b, 0xf7, 0x0d, 0x8d, 0xf0, 0x90, 0x0c, 0x72, 0xdb, 0x3d, 0xf2, 0x34, 0x7d, 0xe2, 0xa9, 0x62, 0x39, 0x21, 0xd4, 0x67, 0xda, 0x68, 0xbd, 0xb2, 0x29, 0x2e, 0x8e, 0x14, 0xc0, 0x79, 0xc5, 0x69, 0x19, 0xa4, 0xe2, 0x7a, 0xea, 0x5f, 0x62, 0x22, 0xb5, 0xf7, 0xf1, 0xb0, 0x9a, 0xd8, 0xdc, 0x8d, 0x71, 0x50, 0xc5, 0x1f, 0x15, 0x95, 0x9a, 0xec, 0x02, 0x0a, 0xc8, 0x03, 0x23, 0xbe, 0xab, 0x98, 0xe5, 0x35, 0x49, 0xee, 0x90, 0x6c, 0x41, 0x7a, 0xd7, 0x17, 0xfe, 0x45, 0xae, 0x2d, 0x30, 0x92, 0x5b, 0xa6, 0x7d, 0xc1, 0xd0, 0x84, 0x73, 0x73, 0x38, 0x10, 0xc2, 0xef, 0xd0, 0x66, 0xa8, 0xc4, 0xf8, 0x33, 0xac, 0xb0, 0x8a, 0xbe, 0x8f, 0xc1, 0x6a, 0x25, 0x80, 0xba, 0x5e, 0xe9, 0x8f, 0xb8, 0x20, 0xad, 0x64, 0x15, 0xb2, 0x3b, 0x31, 0x8d, 0xf2, 0xc8, 0xe5, 0x9f, 0x6e, 0x79, 0xa3, 0x36, 0x79, 0x26, 0x72, 0x89, 0x7f, 0x5d, 0x36, 0x40, 0x95, 0xaa, 0xdf, 0xd8, 0x54, 0x15, 0xe0, 0x48, 0xe8, 0xed, 0xe2, 0xe5, 0x64, 0xc4, 0xba, 0x83, 0x58, 0xbb, 0x99, 0xdd, 0xa6, 0x00, 0x83, 0x37, 0x91, 0x94, 0x03, 0x41, 0x17, 0x52, 0x1c, 0x3f, 0x81, 0x2d, 0x82, 0x67, 0x38, 0xb9, 0x0b, 0x8a, 0xda, 0xed, 0x60, 0xf7, 0x8d, 0x27, 0xf8, 0x9d, 0x94, 0x70, 0x47, 0x6f, 0x20, 0x01, 0x32, 0x0d, 0x68, 0x07, 0xc7, 0xa0, 0xfb, 0xa4, 0x2b, 0x05, 0x55, 0x36, 0xd3, 0x2f, 0xb1, 0xdb, 0xf7, 0xc6, 0x1f, 0x35, 0x44, 0x14, 0xd6, 0x6a, 0xd2, 0x22, 0xcb, 0x6f, 0x55, 0x1e, 0x83, 0x87, 0x97, 0x00, 0x25, 0x06, 0x26, 0x6e, 0xd3, 0x5b, 0x49, 0xdc, 0x3a, 0x4d, 0x39, 0xf7, 0x68, 0x85, 0x8e, 0x44, 0xde, 0x4d, 0xf8, 0x04, 0xe7, 0x97, 0x2f, 0x5c, 0x28, 0x41, 0x2d, 0xb2, 0x77, 0x97, 0x9a, 0x5a, 0xf1, 0x1a, 0x88, 0x72, 0x46, 0x80, 0x60, 0x0a, 0x58, 0xfb, 0x1c, 0x89, 0x05, 0xbe, 0xb7, 0x4b, 0x40, 0xbe, 0xe2, 0x8f, 0x67, 0xb5, 0xf9, 0x91, 0xd0, 0x6d, 0x35, 0xf3, 0xa6, 0x3b, 0x23, 0x61, 0xf3, 0xc9, 0x55, 0x75, 0xfd, 0x19, 0x57, 0xd8, 0xd6, 0xc7, 0xe4, 0xab, 0x2f, 0x8f, 0x5a, 0x25, 0x6d, 0x0e, 0x6c, 0x7d, 0xff, 0xcd, 0x17, 0x0a, 0xee, 0x7b, 0xd7, 0xa9, 0xb5, 0x7a, 0x1a, 0x5f, 0x54, 0x9e, 0xf5, 0x3f, 0xa0, 0x31, 0x16, 0x8e, 0xdd, 0x3a, 0xfa, 0x26, 0x8e, 0xfe, 0x60, 0x18, 0x8c, 0xc8, 0xfd, 0x95, 0x56, 0xe6, 0x71, 0x0f, 0xa8, 0xf4, 0x7a, 0x9b, 0x4f, 0x5d, 0x67, 0x9a, 0x3b, 0x1e, 0xd0, 0x98, 0xd6, 0xcd, 0x85, 0x74, 0x94, 0xda, 0xc4, 0xc1, 0xcb, 0x16, 0xaf, 0x6d, 0xc6, 0x71, 0xfc, 0xa0, 0x15, 0x08, 0xef, 0xe7, 0x26, 0x5f, 0x85, 0x92, 0x1a, 0xea, 0xf3, 0x5b, 0xd1, 0xd3, 0x4e, 0x48, 0x47, 0xf7, 0x8c, 0xd2, 0x24, 0x32, 0xab, 0x46, 0x8e, 0xdc, 0x30, 0x6c, 0x42, 0x93, 0xd3, 0x67, 0xe3, 0x3b, 0x79, 0xdc, 0x91, 0x44, 0x62, 0x56, 0xbe, 0x2b, 0xa4, 0xe9, 0x3d, 0x44, 0xd8, 0x16, 0x9c, 0xb6, 0x13, 0xef, 0xb4, 0xc7, 0x18, 0x7b, 0x7e, 0x5a, 0xcb, 0x5c, 0x29, 0xb5, 0xe9, 0xaf, 0x69, 0x88, 0xf7, 0x34, 0x11, 0x2b, 0x78, 0xaf, 0xe4, 0x28, 0x63, 0x8e, 0xa8, 0xf9, 0xd4, 0xcb, 0x7d, 0x13, 0x02, 0x14, 0x6d, 0x23, 0x71, 0x2a, 0x44, 0x97, 0x69, 0x87, 0xa2, 0x60, 0xa6, 0x43, 0x4e, 0xf6, 0x51, 0x38, 0xcd, 0x9d, 0x2f, 0x65, 0x34, 0xe8, 0x19, 0x90, 0x3a, 0x7b, 0xac, 0x2f, 0x91, 0x14, 0x41, 0x89, 0x77, 0xcd, 0x1f, 0x19, 0x88, 0x9b, 0xf0, 0x33, 0xd6, 0x1b, 0x72, 0xea, 0x3b, 0x8e, 0x6f, 0x30, 0xee, 0x21, 0xef, 0x3f, 0x55, 0x73, 0xac, 0x38, 0x1a, 0x51, 0xc6, 0x0a, 0x81, 0xc4, 0xb8, 0x96, 0xf9, 0x4d, 0x8b, 0x11, 0xf1, 0x6f, 0x4a, 0xa9, 0xec, 0x6e, 0xb5, 0x6b, 0xd8, 0x57, 0x39, 0x64, 0x9b, 0x40, 0x20, 0x06, 0xf0, 0xd1, 0x06, 0xce, 0x71, 0x03, 0x8c, 0x24, 0xf4, 0x28, 0x50, 0x83, 0x1b, 0x2c, 0x1c, 0xd9, 0x27, 0x1a, 0x5d, 0x31, 0x0d, 0xe1, 0xd7, 0x8f, 0xcc, 0x59, 0x98, 0x1b, 0xfd, 0x81, 0x2a, 0x82, 0xac, 0x0b, 0x0d, 0x9a, 0x66, 0x1a, 0x64, 0x45, 0x93, 0x4a, 0xef, 0x97, 0x07, 0xf1, 0x39, 0x3b, 0xd3, 0xa4, 0x13, 0x12, 0x61, 0xfd, 0x40, 0x1e, 0xc0, 0x9c, 0x72, 0x9f, 0x3c, 0x6c, 0x76, 0x7b, 0x32, 0x27, 0xab, 0xe3, 0x22, 0x1d, 0xb8, 0x34, 0x06, 0x31, 0x7e, 0x1b, 0xe2, 0x24, 0x4c, 0xfd, 0x9d, 0x16, 0x52, 0x96, 0x0f, 0x49, 0x59, 0xe0, 0x5b, 0x29, 0xb1, 0x36, 0x7f, 0x89, 0x6a, 0xb9, 0x29, 0x30, 0xc7, 0xf3, 0xcd, 0x94, 0xef, 0xba, 0xf4, 0xe5, 0xe6, 0x57, 0xd7, 0x4d, 0xbc, 0xe8, 0x2c, 0x77, 0x04, 0x03, 0x40, 0x4e, 0x88, 0x9c, 0x46, 0x07, 0x3b, 0x29, 0xee, 0x61, 0x6f, 0x03, 0x3a, 0x2b, 0x48, 0x10, 0x8e, 0x07, 0x71, 0x9f, 0x06, 0x6f, 0x0d, 0x93, 0x0b, 0xf5, 0xf1, 0xc4, 0x29, 0xcf, 0x10, 0xa2, 0x1b, 0x92, 0x36, 0x1c, 0x28, 0x3e, 0xfa, 0xc0, 0xb3, 0x7b, 0xee, 0x23, 0x0d, 0x22, 0x18, 0x83, 0x8d, 0xff, 0xa6, 0xab, 0xe3, 0xd6, 0xdd, 0x17, 0xa9, 0xa3, 0x53, 0x59, 0x3b, 0x26, 0x5e, 0xbb, 0xc9, 0x9f, 0xcc, 0x26, 0xaa, 0xd7, 0xd4, 0x42, 0xf3, 0x5f, 0x4d, 0xdf, 0x49, 0x1c, 0x1e, 0x94, 0xf3, 0x04, 0xf6, 0xa5, 0x33, 0x22, 0x3d, 0x2a, 0xd7, 0xe0, 0x4a, 0x6e, 0x0b, 0x85, 0xd6, 0x96, 0x71, 0xfd, 0xb0, 0x83, 0x74, 0xd9, 0xb3, 0xf9, 0xd9, 0x96, 0xf6, 0x00, 0x96, 0x22, 0x42, 0x8a, 0xe8, 0x9c, 0xc9, 0x57, 0xa0, 0x5b, 0x14, 0x16, 0xbd, 0x33, 0x3e, 0xcd, 0x40, 0xf3, 0x60, 0x7a, 0x3c, 0x32, 0x4c, 0xfb, 0x2d, 0x4c, 0x7e, 0x2b, 0x8a, 0xa7, 0x4f, 0x4e, 0x9e, 0x3b, 0x6c, 0xaf, 0x93, 0x51, 0x87, 0x87, 0xd0, 0x8a, 0x4c, 0x21, 0x85, 0x24, 0x97, 0x3c, 0x83, 0x79, 0xe4, 0xb1, 0x52, 0xc8, 0x07, 0x55, 0x7d, 0x38, 0x1d, 0x21, 0x31, 0x1a, 0xc2, 0x90, 0x06, 0x6f, 0x84, 0x49, 0x1d, 0xaa, 0x98, 0xfe, 0x6b, 0xb7, 0xcc, 0x94, 0x54, 0x3b, 0xbd, 0x84, 0x7c, 0x1e, 0x4a, 0x81, 0xda, 0x47, 0x48, 0x5b, 0x0e, 0xa6, 0x77, 0x23, 0xf4, 0x78, 0xb5, 0x90, 0x79, 0xc6, 0x72, 0xa1, 0xad, 0x2f, 0x64, 0x84, 0x1a, 0xe8, 0x7c, 0xb7, 0x55, 0x01, 0x18, 0x6d, 0xd2, 0xea, 0x7a, 0x33, 0xfc, 0x35, 0x79, 0xd3, 0x85, 0x9d, 0x76, 0x78, 0xfb, 0x48, 0x92, 0x14, 0x9d, 0x49, 0x1e, 0xff, 0x6c, 0x69, 0x54, 0xe1, 0x85, 0x27, 0x44, 0xd1, 0xad, 0xfd, 0x10, 0xbe, 0x2e, 0xe5, 0x5c, 0x0e, 0xe2, 0x1c, 0x01, 0x86, 0x8d, 0x26, 0x01, 0x6a, 0x6f, 0x12, 0xc0, 0xe5, 0x1a, 0xff, 0x71, 0xaa, 0x82, 0xdf, 0xce, 0xdc, 0x53, 0x7b, 0x0c, 0x2c, 0x87, 0xb8, 0x0e, 0x41, 0x37, 0x18, 0xd9, 0x5c, 0xb1, 0x83, 0x48, 0x3c, 0xcc, 0x48, 0x00, 0x3f, 0x78, 0x5f, 0xa7, 0xcb, 0x99, 0xf1, 0x51, 0xec, 0x16, 0x19, 0x3b, 0x3e, 0x2c, 0xed, 0xbc, 0x0e, 0x09, 0xb8, 0x78, 0xbc, 0x96, 0x8a, 0xd7, 0x63, 0x94, 0xf3, 0xb6, 0xbc, 0xea, 0x0b, 0x5c, 0x40, 0x3d, 0xb5, 0xaf, 0x8d, 0xc2, 0x25, 0xa7, 0x0b, 0x50, 0xa0, 0x04, 0xcf, 0xba, 0x83, 0x3c, 0xc0, 0x5b, 0x87, 0xb8, 0xf8, 0xf2, 0x43, 0x3f, 0x6d, 0xb1, 0xf3, 0xb3, 0xd0, 0x90, 0x77, 0xfb, 0xb5, 0xe7, 0x9f, 0x40, 0xf5, 0x3c, 0xa5, 0x5c, 0x50, 0x59, 0xfb, 0x8f, 0x57, 0xa2, 0x47, 0x74, 0x8a, 0xa6, 0xad, 0x34, 0xbd, 0xf4, 0x4c, 0xfa, 0xc0, 0x30, 0x0b, 0xa7, 0x3e, 0x66, 0x95, 0xc6, 0xe6, 0x9d, 0xa2, 0xc2, 0xc9, 0xb0, 0x79, 0x56, 0x03, 0x59, 0xb2, 0x46, 0x9e, 0x8f, 0x41, 0x4d, 0xb3, 0x12, 0xb0, 0x56, 0xd2, 0x44, 0xac, 0xef, 0xa4, 0x3a, 0xc3, 0xfa, 0xcf, 0x13, 0x6c, 0xa5, 0x1a, 0x88, 0x48, 0x9d, 0xd2, 0xc5, 0xa7, 0x7f, 0x6c, 0x77, 0x4e, 0x90, 0x6b, 0x27, 0x78, 0xad, 0x85, 0xc6, 0x1a, 0x85, 0x01, 0x89, 0x6b, 0x05, 0x63, 0xf7, 0xa4, 0x14, 0x4b, 0x40, 0x04, 0x81, 0x9b, 0xd0, 0x18, 0x39, 0xd8, 0x24, 0x39, 0xbe, 0xd3, 0xdc, 0x56, 0xd4, 0x88, 0x12, 0xf4, 0x7e, 0x46, 0xeb, 0x72, 0x28, 0x10, 0x6b, 0x92, 0x26, 0x44, 0x8e, 0x35, 0x5d, 0x7a, 0x94, 0x66, 0x40, 0xaf, 0x9c, 0x9a, 0xff, 0xa3, 0x74, 0x36, 0xfa, 0x7f, 0xb0, 0x52, 0x7c, 0xbb, 0xf9, 0xbd, 0xa6, 0x3f, 0xa8, 0x41, 0xa9, 0xc8, 0x94, 0x28, 0x39, 0x8e, 0x27, 0xfe, 0x3e, 0x24, 0xb8, 0x99, 0xcc, 0x9f, 0x14, 0x57, 0x55, 0xfa, 0x5e, 0xa7, 0x1d, 0xb9, 0x1a, 0xcb, 0xef, 0xcd, 0x84, 0xdc, 0x0f, 0xb8, 0x26, 0x0e, 0x6f, 0xf1, 0xa9, 0x35, 0x25, 0x8a, 0xec, 0x88, 0x1d, 0x10, 0x53, 0xa5, 0x0b, 0xb3, 0x62, 0xd6, 0xa4, 0xa6, 0x8a, 0x93, 0x0e, 0xc9, 0x42, 0x48, 0x95, 0x86, 0x5a, 0x58, 0x9f, 0xf8, 0x8c, 0x61, 0xe2, 0x53, 0x55, 0xc2, 0xd4, 0x80, 0x03, 0x5a, 0x63, 0x07, 0x0e, 0x93, 0xe7, 0x32, 0xab, 0x9f, 0x55, 0x70, 0x9f, 0x02, 0xb5, 0xf7, 0x51, 0x51, 0xd6, 0xad, 0x24, 0x39, 0x40, 0x49, 0x03, 0xc2, 0x6a, 0xb5, 0x3e, 0xd5, 0x2d, 0xb7, 0x94, 0xfd, 0x79, 0xd1, 0x91, 0x6a, 0x47, 0x66, 0x1a, 0x3b, 0xce, 0x1d, 0x46, 0xfd, 0xfa, 0x8b, 0x6f, 0x6e, 0x1a, 0x0c, 0x89, 0x87, 0xd9, 0xf1, 0xb3, 0xba, 0x6f, 0xe1, 0x0c, 0x79, 0x18, 0x79, 0xc8, 0xf7, 0xc5, 0x36, 0x83, 0x32, 0x12, 0x95, 0xd4, 0x31, 0x79, 0x78, 0x26, 0x8a, 0xc5, 0xcc, 0xc3, 0x28, 0xc9, 0x69, 0x32, 0x4b, 0x51, 0x39, 0xc3, 0xd0, 0x59, 0x9d, 0x68, 0xb3, 0x7d, 0x0c, 0xc6, 0xd2, 0xb1, 0xfe, 0x8c, 0xf4, 0x32, 0x08, 0x04, 0x09, 0xbd, 0x48, 0xe8, 0xb4, 0xfe, 0x03, 0x76, 0x06, 0x4b, 0x8d, 0xc6, 0x8d, 0x92, 0x69, 0x5c, 0x8d, 0x90, 0xb2, 0xfa, 0x8d, 0x44, 0xb9, 0xb7, 0x15, 0xa4, 0xf0, 0x55, 0xb7, 0x8e, 0x07, 0xd0, 0x4c, 0x01, 0x54, 0x33, 0x80, 0x8d, 0x78, 0xaf, 0x91, 0x08, 0x40, 0xee, 0x53, 0x83, 0xc9, 0xa5, 0x78, 0x7c, 0xe8, 0x69, 0x0e, 0x56, 0xc8, 0xc3, 0x49, 0x06, 0xd5, 0x86, 0x83, 0x0e, 0xd9, 0x60, 0x81, 0xaf, 0x65, 0xb0, 0xf8, 0x5a, 0x73, 0x97, 0x4f, 0x69, 0x49, 0x52, 0xa7, 0x0c, 0xa1, 0xc7, 0x19, 0x86, 0x06, 0x5d, 0x3e, 0x99, 0x81, 0x11, 0xf5, 0x3e, 0x75, 0xc7, 0x60, 0x9a, 0xc8, 0xdd, 0x30, 0x2e, 0x43, 0x06, 0x23, 0x4e, 0x3c, 0x56, 0xca, 0xd4, 0x72, 0x99, 0x90, 0x15, 0x38, 0xe9, 0xf8, 0x14, 0xd6, 0x80, 0x26, 0xf6, 0x2c, 0xca, 0xa1, 0xb6, 0x98, 0xbe, 0x57, 0x1a, 0x1a, 0x6f, 0xe2, 0xe6, 0xb6, 0xde, 0x09, 0x4f, 0x1a, 0x13, 0x8a, 0xb2, 0x81, 0x6c, 0x17, 0x86, 0xd7, 0x34, 0x9e, 0x90, 0x1e, 0x77, 0xcd, 0x55, 0x10, 0x15, 0xd6, 0xd5, 0x06, 0x16, 0x6f, 0x76, 0x18, 0x3d, 0x1d, 0x3f, 0x86, 0xe0, 0xb3, 0x46, 0x57, 0xf7, 0x15, 0x6c, 0x3f, 0x72, 0x42, 0x47, 0xc6, 0xd0, 0x92, 0x60, 0xa7, 0xed, 0x3c, 0x9f, 0x76, 0x1b, 0x1a, 0x03, 0x86, 0x75, 0xb1, 0x96, 0x0a, 0x70, 0x6c, 0xa1, 0x7a, 0xb3, 0x28, 0x1c, 0x39, 0x29, 0xf5, 0x68, 0x74, 0x54, 0x1b, 0x41, 0x4d, 0xe4, 0x5c, 0xee, 0x39, 0x88, 0x79, 0xba, 0xa6, 0x04, 0xf8, 0xa8, 0xe2, 0x84, 0x23, 0x63, 0x38, 0x2f, 0x54, 0x74, 0x5c, 0x00, 0x70, 0xb7, 0x09, 0xd1, 0xb2, 0x10, 0xe8, 0xb9, 0xaa, 0x5a, 0xb4, 0x98, 0x85, 0xa0, 0x9c, 0xf0, 0x8e, 0x90, 0xe8, 0xf7, 0xf5, 0x2c, 0xe0, 0xea, 0xcf, 0xc3, 0xe9, 0xa3, 0x5f, 0x20, 0xf2, 0x6e, 0x94, 0x01, 0x0e, 0x19, 0xd2, 0xcb, 0x62, 0x4a, 0xf6, 0x7b, 0x42, 0x15, 0x94, 0xe0, 0x97, 0xce, 0x82, 0x08, 0x84, 0x1c, 0x9b, 0xf8, 0x49, 0x4f, 0xbd, 0x9f, 0x67, 0xf4, 0x14, 0x0d, 0x05, 0xa6, 0x9b, 0xe1, 0x92, 0x27, 0xdf, 0x00, 0xac, 0xaf, 0x07, 0x8d, 0x40, 0x83, 0x11, 0x15, 0xf3, 0xca, 0x5e, 0x09, 0xc1, 0x9c, 0x71, 0x72, 0xe4, 0x5d, 0xf4, 0xe0, 0xf8, 0x49, 0xfb, 0xa3, 0x5c, 0x4f, 0x8d, 0x3e, 0xdb, 0x23, 0x61, 0x19, 0x8c, 0x8f, 0xe5, 0x76, 0xf6, 0x0a, 0x84, 0xa6, 0x78, 0x8b, 0x29, 0x7d, 0xe9, 0x9f, 0xff, 0x03, 0x7b, 0xba, 0x7c, 0x6c, 0xe5, 0xca, 0x9d, 0x4b, 0xc1, 0x12, 0x73, 0x02, 0x32, 0x36, 0xde, 0x7d, 0xcb, 0x92, 0x99, 0x20, 0xac, 0xd0, 0x76, 0xfd, 0xee, 0xba, 0xeb, 0x4b, 0x42, 0x4c, 0xce, 0x13, 0xd4, 0x0e, 0x5d, 0x2d, 0x76, 0xa1, 0x81, 0x6b, 0xfa, 0x97, 0x54, 0x14, 0xdf, 0x88, 0xe0, 0x94, 0x31, 0x61, 0x2a, 0x71, 0xaa, 0x00, 0x6f, 0x81, 0x1d, 0xfe, 0xad, 0x5b, 0x15, 0xcc, 0x65, 0x0b, 0xb9, 0x02, 0x9f, 0x0a, 0xf2, 0xf3, 0x30, 0x6d, 0xd0, 0x85, 0x38, 0x5c, 0x2a, 0x40, 0xee, 0xc6, 0x85, 0xa4, 0xa0, 0x53, 0x37, 0xc0, 0xf5, 0x9a, 0xcd, 0x00, 0x76, 0x95, 0xa9, 0x47, 0x4c, 0x51, 0xf0, 0x3d, 0x4b, 0xea, 0xa3, 0xeb, 0x30, 0xb7, 0x0b, 0x85, 0x27, 0xc2, 0x5b, 0x86, 0x91, 0x7b, 0x91, 0x02, 0x03, 0xad, 0x9d, 0x38, 0x92, 0xb0, 0xc5, 0x68, 0x4e, 0xe1, 0x48, 0xe4, 0x0c, 0x4f, 0x41, 0x68, 0x69, 0xb7, 0xcf, 0xae, 0x0b, 0xb3, 0x73, 0x3e, 0x2a, 0x2e, 0xb9, 0x84, 0x4f, 0x1b, 0x1b, 0x24, 0x5c, 0x66, 0x22, 0x92, 0xcd, 0x2b, 0xce, 0xdd, 0x3d, 0x27, 0x38, 0xcb, 0x2c, 0x6c, 0x76, 0x2b, 0xff, 0x58, 0xbf, 0x67, 0x48, 0xc7, 0xcf, 0x59, 0x48, 0x88, 0x8d, 0x5f, 0xb3, 0x0e, 0xec, 0xb2, 0xb2, 0x68, 0x0f, 0xf3, 0x2e, 0x74, 0xb0, 0x07, 0x4c, 0x4f, 0xc2, 0x25, 0x34, 0x0f, 0x55, 0x2d ],
-const [ 0x02, 0x87, 0xfa, 0x0e, 0x37, 0x7c, 0x9d, 0xd6, 0x08, 0xcf, 0x98, 0x53, 0x90, 0x7b, 0x01, 0x0b, 0xca, 0xe4, 0xc2, 0x16, 0x02, 0x75, 0xa7, 0xdd, 0x89, 0x88, 0xb5, 0x22, 0xad, 0x86, 0xbe, 0x41, 0xe8, 0x4f, 0x32, 0xb5, 0x58, 0xdc, 0x38, 0xdd, 0x6f, 0x23, 0xfd, 0x00, 0xec, 0x3a, 0x4c, 0x90, 0x0a, 0xc0, 0x60, 0xab, 0xf7, 0x79, 0xf6, 0xe7, 0x87, 0x38, 0xa6, 0x4f, 0x2a, 0x02, 0x72, 0xa9, 0x1c, 0x70, 0xa0, 0xfb, 0xdb, 0x55, 0xc5, 0x4d, 0xde, 0xa1, 0x23, 0xaf, 0x84, 0x85, 0x34, 0x7e, 0x4b, 0xd8, 0x87, 0xe4, 0x42, 0xba, 0xcb, 0x9e, 0xc1, 0x77, 0x2a, 0x02, 0x57, 0xae, 0xd8, 0x40, 0x04, 0xb2, 0xeb, 0xe8, 0xa8, 0x30, 0x6d, 0xac, 0xbc, 0x12, 0xaf, 0x68, 0x40, 0xa4, 0xe1, 0x5f, 0xf4, 0xf5, 0xe0, 0xc7, 0xcb, 0x81, 0x4f, 0x89, 0x9d, 0x0c, 0xe9, 0x42, 0x1c, 0xd1, 0x15, 0x8d, 0x09, 0xdc, 0xbb, 0x84, 0xa8, 0xb5, 0x57, 0x84, 0x71, 0x3e, 0x4c, 0x31, 0x08, 0xde, 0x7a, 0xba, 0x6f, 0xdf, 0x12, 0x5f, 0x7b, 0x15, 0xa9, 0x30, 0x84, 0xc1, 0x8c, 0x17, 0x61, 0xb4, 0x54, 0x18, 0x93, 0xb8, 0xba, 0xd8, 0xc1, 0x2b, 0xac, 0x5c, 0x65, 0xed, 0xa0, 0x14, 0xc4, 0x7d, 0x28, 0x18, 0x23, 0x5e, 0xc6, 0xb1, 0x38, 0xc0, 0x02, 0x1b, 0xdf, 0x5c, 0xbb, 0x89, 0x0e, 0xa0, 0xbb, 0x6a, 0x0b, 0x0c, 0x8e, 0xeb, 0xdc, 0xdc, 0x93, 0xbd, 0x00, 0xe7, 0x53, 0x18, 0x5c, 0xc7, 0x12, 0x00, 0x78, 0x3a, 0xa4, 0xc7, 0xeb, 0xc8, 0x82, 0xd3, 0x14, 0xa6, 0x1d, 0xa1, 0x0b, 0xdb, 0x72, 0x0a, 0xd7, 0xa1, 0xdf, 0xc5, 0xe2, 0x0e, 0x35, 0x2e, 0xaa, 0xf3, 0x0e, 0x45, 0xb8, 0x05, 0x61, 0xfa, 0xd6, 0x3a, 0x53, 0xa8, 0x7d, 0x76, 0x50, 0xdf, 0x8d, 0x67, 0x5b, 0x66, 0x40, 0xad, 0xa2, 0x80, 0x61, 0x3f, 0x56, 0x6f, 0xb9, 0x0a, 0xb9, 0x37, 0xcb, 0xdb, 0x79, 0xa4, 0xc1, 0x7e, 0x3c, 0x8e, 0xa5, 0x28, 0x7c, 0x5c, 0xd4, 0x12, 0x95, 0xc7, 0xb0, 0x67, 0x1c, 0xe1, 0x96, 0x60, 0x73, 0x55, 0x10, 0xad, 0x9a, 0xf0, 0x4b, 0x18, 0x48, 0x60, 0xcb, 0x65, 0x3b, 0x3c, 0x5d, 0x7c, 0xcc, 0x45, 0x4d, 0xca, 0xc6, 0xec, 0xda, 0xe4, 0x78, 0x14, 0xe7, 0x6d, 0x09, 0x18, 0xf3, 0x3b, 0x0c, 0x10, 0x4b, 0xb5, 0x54, 0x50, 0x7e, 0x7f, 0x0a, 0x32, 0x12, 0x5a, 0xfc, 0x16, 0x75, 0x45, 0x38, 0xa6, 0x36, 0xe8, 0xda, 0x5f, 0x75, 0x33, 0x22, 0x4d, 0x99, 0x43, 0xca, 0x15, 0x41, 0x85, 0x96, 0x39, 0x7c, 0x1d, 0x2c, 0x98, 0x3c, 0x89, 0x26, 0x34, 0x08, 0x81, 0x66, 0x38, 0xf2, 0x22, 0xa9, 0x3a, 0xc9, 0x4c, 0x5f, 0xbd, 0x8f, 0x49, 0xbb, 0xfa, 0x2d, 0xaf, 0x06, 0xe0, 0x66, 0x87, 0x38, 0x59, 0x0a, 0xae, 0xc9, 0xcf, 0x6c, 0x7c, 0xc5, 0xef, 0x15, 0xa4, 0x1f, 0xac, 0xba, 0x5b, 0x47, 0x87, 0x6c, 0xbd, 0xfe, 0x0e, 0x0f, 0x6c, 0x6a, 0xa3, 0x0d, 0x7a, 0x65, 0x7f, 0x4c, 0x89, 0x1b, 0xf7, 0x5d, 0x30, 0xd4, 0xfd, 0xf6, 0xa1, 0x0e, 0xe9, 0xa2, 0x89, 0xcf, 0x7a, 0xb7, 0x38, 0x39, 0x17, 0x88, 0x02, 0x5f, 0x5b, 0xdd, 0xe5, 0x57, 0xd1, 0xa0, 0x6c, 0x91, 0xfc, 0xd9, 0xd2, 0x66, 0x9b, 0xdd, 0x6b, 0xf4, 0x2a, 0xc1, 0x40, 0x2a, 0xac, 0x15, 0xf9, 0x1f, 0xa8, 0xcf, 0x01, 0xa8, 0x72, 0x86, 0xe4, 0x29, 0xab, 0xe1, 0xfc, 0xab, 0x0b, 0x4e, 0x4c, 0x2f, 0x5e, 0xf7, 0xac, 0x42, 0xcd, 0xf2, 0x27, 0xd2, 0x5f, 0xb7, 0xa1, 0x40, 0xc0, 0xd8, 0xbc, 0xb6, 0x40, 0xec, 0xfd, 0xbb, 0x1e, 0xcc, 0x2b, 0x05, 0x07, 0x03, 0xf8, 0x8e, 0xda, 0x7f, 0xe4, 0xea, 0xae, 0x8d, 0x5d, 0xd7, 0x16, 0x04, 0x2b, 0x16, 0xa4, 0xbf, 0x0b, 0x79, 0xab, 0x51, 0x9a, 0x3e, 0x49, 0xf5, 0x75, 0x9b, 0xa5, 0xc4, 0x9f, 0x9a, 0x76, 0x2b, 0x23, 0x27, 0xc5, 0x9b, 0xfa, 0x67, 0xf3, 0x82, 0x2e, 0x4c, 0xfd, 0x7b, 0x40, 0x67, 0xff, 0xc1, 0xc8, 0xfd, 0xf7, 0xea, 0x5b, 0x5c, 0xcc, 0xd2, 0xb1, 0x6f, 0x8f, 0xd5, 0x07, 0x91, 0x00, 0x41, 0xc3, 0x9f, 0x54, 0x0a, 0x57, 0x51, 0x35, 0xc0, 0x67, 0xca, 0x0b, 0xbf, 0x2e, 0x6d, 0x7a, 0xa6, 0x1e, 0xf3, 0x2b, 0x0a, 0xc6, 0xba, 0xd0, 0x6b, 0xf9, 0x60, 0x62, 0x66, 0x2d, 0x91, 0xad, 0x2d, 0x21, 0x1d, 0x0f, 0x35, 0xc3, 0x4e, 0x7d, 0x2e, 0x50, 0x78, 0xc6, 0x38, 0xbd, 0xd1, 0x1c, 0x54, 0x56, 0x83, 0xd0, 0x18, 0xa5, 0x00, 0x5d, 0xa8, 0x95, 0x96, 0xa8, 0xe1, 0xd7, 0x43, 0x86, 0xd7, 0x85, 0xca, 0x7f, 0x82, 0x05, 0x06, 0xd2, 0xb4, 0x31, 0x7f, 0xb8, 0x4e, 0xb4, 0x3b, 0xed, 0xb4, 0xb7, 0xd7, 0x6d, 0x7e, 0xbe, 0xd6, 0x7b, 0x71, 0xcc, 0x38, 0xe8, 0xad, 0xce, 0x4e, 0x92, 0x27, 0x36, 0xce, 0x2b, 0x5a, 0xe7, 0x23, 0x3c, 0x3a, 0x51, 0x06, 0x69, 0x6a, 0xdd, 0x52, 0xf6, 0xae, 0x8b, 0x14, 0x8a, 0xa3, 0xd9, 0xe2, 0x33, 0xae, 0xe8, 0x6f, 0xab, 0x32, 0xda, 0x5c, 0xda, 0x06, 0x7e, 0x50, 0x9b, 0x26, 0x2f, 0x4a, 0xc3, 0xa8, 0xf9, 0x36, 0x60, 0xf2, 0xfe, 0xbf, 0x3e, 0x2b, 0x18, 0x65, 0xb0, 0xef, 0xc0, 0xcf, 0x8c, 0x47, 0x2f, 0x62, 0x78, 0xd8, 0xc2, 0x12, 0x64, 0x5a, 0xa3, 0x78, 0x58, 0x4c, 0xa6, 0x25, 0x70, 0xe6, 0x71, 0x37, 0x25, 0x50, 0xe0, 0x2a, 0xcd, 0x11, 0xa8, 0xf0, 0x65, 0xca, 0x3a, 0x43, 0x8f, 0x24, 0xea, 0x3a, 0xd7, 0x07, 0x50, 0x1a, 0x3a, 0x0d, 0xee, 0x6f, 0xe9, 0x36, 0x14, 0x5c, 0x4a, 0xdd, 0x01, 0x30, 0x40, 0xea, 0x4b, 0x39, 0xac, 0x4a, 0x81, 0xdd, 0x34, 0x9c, 0x0e, 0xe6, 0x43, 0x2d, 0x60, 0x1e, 0x50, 0x27, 0x4a, 0x1c, 0x64, 0x05, 0xa7, 0x5d, 0xd6, 0x4a, 0x41, 0x97, 0x59, 0x73, 0xf1, 0x49, 0x3a, 0x2a, 0x07, 0x97, 0xe2, 0xbc, 0xeb, 0x55, 0xa2, 0xcd, 0x05, 0x62, 0xb0, 0x4b, 0xdb, 0x37, 0x6c, 0xa0, 0x79, 0xbf, 0xe8, 0x2c, 0x16, 0x6a, 0xa8, 0xf2, 0xf4, 0x7d, 0xa6, 0x91, 0x88, 0xac, 0x99, 0x77, 0xdb, 0xea, 0x77, 0x51, 0x30, 0x80, 0x39, 0xc5, 0xe7, 0x5c, 0xde, 0x64, 0xa1, 0xac, 0xb2, 0xda, 0xa5, 0xac, 0xd0, 0x68, 0x83, 0xbc, 0xe6, 0x95, 0xf7, 0xb6, 0x38, 0x20, 0x0f, 0x7e, 0xe8, 0x38, 0x90, 0xdb, 0x74, 0xef, 0x97, 0x85, 0x80, 0xed, 0x7c, 0x7f, 0xd6, 0x61, 0xfb, 0xa6, 0xab, 0x3e, 0x96, 0x8b, 0x24, 0xa3, 0x35, 0x7e, 0x18, 0x9a, 0x10, 0xeb, 0x18, 0x06, 0xce, 0xea, 0xac, 0xd7, 0xee, 0x11, 0xe0, 0x80, 0x67, 0x8c, 0xff, 0xab, 0x8b, 0x70, 0x9f, 0x2b, 0x31, 0x4d, 0xdd, 0x32, 0x13, 0x03, 0xea, 0xc4, 0x75, 0xd6, 0xc7, 0x6b, 0x08, 0xc4, 0x4c, 0x2d, 0x0d, 0x15, 0x6f, 0xbb, 0xbd, 0x35, 0xc3, 0xeb, 0xe9, 0xbf, 0x3f, 0x68, 0xde, 0xda, 0x41, 0xa8, 0x8b, 0xc8, 0xd2, 0x1f, 0xe6, 0xbc, 0x2c, 0xb3, 0x8b, 0xec, 0x7a, 0x6f, 0xa6, 0xe8, 0xde, 0x7b, 0x14, 0x2a, 0xb8, 0x4c, 0xc5, 0xee, 0x26, 0x18, 0x65, 0x44, 0xc7, 0x8d, 0x3b, 0x63, 0xc5, 0xc2, 0x51, 0x40, 0x12, 0x6e, 0xd5, 0x5f, 0xf1, 0x58, 0xbf, 0xe9, 0xb9, 0x0e, 0xb4, 0x00, 0xd5, 0xda, 0x2a, 0x4f, 0x10, 0xf2, 0xce, 0xe5, 0x10, 0xef, 0x22, 0x43, 0x1f, 0x80, 0x6b, 0xb3, 0x32, 0x60, 0xca, 0xdc, 0x23, 0x85, 0xa9, 0x94, 0x42, 0x9b, 0x58, 0xf5, 0x0c, 0xb0, 0xf8, 0xb3, 0x3a, 0x31, 0x99, 0xac, 0xfe, 0x15, 0x9f, 0xc1, 0x89, 0x58, 0x6a, 0xe5, 0xd0, 0xab, 0x36, 0x73, 0x90, 0x6a, 0x3f, 0xc5, 0x8f, 0xce, 0x29, 0x02, 0x26, 0x64, 0xa0, 0x37, 0xfc, 0xbd, 0x3c, 0xaa, 0x14, 0x67, 0xa7, 0x6b, 0x0a, 0x1d, 0x01, 0x2b, 0x99, 0x3b, 0x83, 0x51, 0x61, 0x75, 0x63, 0x4b, 0xe7, 0xc7, 0xf8, 0x22, 0xde, 0xaf, 0x1f, 0x52, 0xa5, 0x9b, 0xdd, 0xd8, 0x10, 0x9d, 0x46, 0x8c, 0x6b, 0x66, 0x9d, 0xb1, 0xbc, 0x72, 0xbc, 0xcb, 0x49, 0x80, 0xb6, 0xb0, 0x5a, 0x45, 0xbc, 0xe2, 0x40, 0x61, 0x3d, 0x1c, 0x96, 0x92, 0x51, 0x2b, 0xc7, 0x28, 0x58, 0xff, 0xd1, 0xb9, 0xde, 0x02, 0x48, 0x15, 0xc3, 0xa9, 0x9d, 0x7c, 0x98, 0x48, 0xa0, 0x0f, 0x4b, 0x2a, 0x44, 0x85, 0x07, 0xe1, 0xa2, 0x1f, 0x56, 0xdb, 0x41, 0xde, 0x89, 0x36, 0x95, 0xf3, 0x59, 0xd5, 0xc5, 0x77, 0xce, 0xb4, 0xb2, 0x5c, 0x60, 0x78, 0x34, 0xa4, 0x5d, 0x4b, 0xa6, 0xd0, 0x8a, 0xe6, 0xa6, 0x9c, 0x0d, 0xef, 0x16, 0xe9, 0x8a, 0x86, 0x66, 0xfb, 0x8d, 0x1b, 0x16, 0xe4, 0x28, 0x82, 0x76, 0x40, 0xdd, 0x49, 0xb1, 0x23, 0xbd, 0x49, 0x09, 0x50, 0xd2, 0x7b, 0x64, 0xac, 0xbb, 0x0d, 0x08, 0xf2, 0x96, 0xb5, 0xa3, 0xa7, 0x23, 0x46, 0x8e, 0x51, 0x25, 0x81, 0x52, 0xe4, 0x0c, 0x2d, 0x6c, 0x7d, 0xd2, 0x6a, 0x4d, 0x52, 0x23, 0x42, 0xa5, 0xe9, 0xc0, 0x81, 0xe1, 0x89, 0x25, 0xc6, 0xf2, 0xef, 0x6a, 0xdb, 0x51, 0x41, 0x67, 0x42, 0x40, 0x48, 0x1b, 0x10, 0x52, 0xd9, 0x4f, 0xff, 0x2d, 0x94, 0x76, 0xbe, 0x8f, 0xd2, 0xd8, 0x8b, 0x8f, 0xd8, 0xef, 0x04, 0x26, 0x51, 0x11, 0x3a, 0xed, 0xfb, 0x50, 0x08, 0x28, 0xa0, 0x9f, 0xa3, 0x04, 0x48, 0x36, 0x71, 0x1d, 0xad, 0x37, 0x1f, 0x43, 0xef, 0x91, 0xee, 0x7e, 0x89, 0x24, 0x4d, 0x4f, 0x84, 0x27, 0xad, 0x39, 0xea, 0xc7, 0x91, 0x80, 0x7e, 0x11, 0xe4, 0x31, 0xaa, 0x12, 0x90, 0x62, 0xb9, 0x3d, 0x4c, 0xbb, 0x46, 0x0d, 0xb5, 0x36, 0xf4, 0xeb, 0xa1, 0x22, 0x60, 0x51, 0xb0, 0x6e, 0x54, 0x30, 0x24, 0x24, 0x3e, 0x8f, 0xf2, 0x34, 0xe0, 0x75, 0x18, 0x73, 0x48, 0x0a, 0x32, 0xe3, 0x03, 0xf9, 0x48, 0x35, 0x8e, 0x18, 0xeb, 0x8c, 0x0d, 0x4b, 0x80, 0x84, 0x3f, 0xa6, 0xdb, 0x73, 0xb2, 0xd1, 0x10, 0xef, 0x33, 0xb1, 0x85, 0x90, 0x89, 0x44, 0x4c, 0xf6, 0x63, 0xcd, 0xb0, 0x0e, 0x8e, 0x32, 0x0e, 0x92, 0x6b, 0xa2, 0xe7, 0xcf, 0xa1, 0x7a, 0x32, 0xab, 0x0f, 0x6a, 0xf7, 0xe6, 0x05, 0xd4, 0x19, 0xa0, 0xb3, 0x74, 0x74, 0x1c, 0xe1, 0x46, 0x27, 0xc3, 0xe1, 0xa4, 0x33, 0x6c, 0xc2, 0xaf, 0x46, 0xda, 0xc7, 0xf1, 0xd1, 0x86, 0x17, 0x41, 0x60, 0x9f, 0xb6, 0xe6, 0x2b, 0x50, 0xb4, 0xff, 0xe8, 0x41, 0xa5, 0x22, 0xe4, 0x60, 0x51, 0x43, 0x52, 0xe1, 0xac, 0xd7, 0xe3, 0x83, 0x08, 0x3a, 0x97, 0x16, 0x89, 0x4e, 0xd2, 0x3a, 0xd9, 0x66, 0xb2, 0x69, 0x1e, 0x62, 0xa0, 0x38, 0x29, 0x1b, 0x25, 0xd9, 0xf0, 0x01, 0xff, 0xe5, 0x3f, 0x02, 0x75, 0x58, 0xaa, 0xae, 0xe7, 0xde, 0xc6, 0x99, 0xa9, 0x4d, 0x99, 0x01, 0x12, 0x72, 0x4e, 0xb1, 0xcf, 0x10, 0x2d, 0x25, 0x7d, 0x26, 0xcb, 0xef, 0x78, 0x71, 0x7e, 0x5a, 0xed, 0x32, 0x14, 0x4c, 0x37, 0x31, 0xc5, 0x71, 0x68, 0x02, 0x65, 0x95, 0x25, 0x87, 0xdf, 0x52, 0xb8, 0xb6, 0xde, 0xec, 0x60, 0x9c, 0xcd, 0x79, 0xeb, 0xa2, 0x02, 0x45, 0x87, 0x10, 0x36, 0x74, 0xd6, 0xcf, 0x39, 0xe9, 0x40, 0x73, 0xe3, 0x67, 0x8d, 0x79, 0x4e, 0xf6, 0xb3, 0xcc, 0x42, 0x89, 0xec, 0x8e, 0xf1, 0xdd, 0x0c, 0x16, 0xe5, 0xa4, 0x12, 0x35, 0x36, 0xe3, 0xfd, 0xbe, 0x00, 0x99, 0xe1, 0x45, 0x14, 0xa1, 0x39, 0x26, 0xee, 0xd9, 0x7f, 0xca, 0xe8, 0x84, 0xfa, 0x25, 0xad, 0xed, 0xd8, 0x83, 0xef, 0x4e, 0x7c, 0x85, 0x5d, 0xef, 0x19, 0x66, 0xcf, 0x92, 0x80, 0x83, 0xc4, 0x0f, 0x36, 0x1b, 0x0f, 0x3c, 0xca, 0x53, 0xcd, 0x0f, 0x65, 0x7d, 0x9a, 0x07, 0xa3, 0x99, 0x05, 0xc7, 0xa1, 0x1c, 0x41, 0x05, 0x58, 0xf1, 0x1d, 0xa2, 0x29, 0xbe, 0x35, 0x1a, 0xb8, 0x68, 0x6a, 0x1f, 0xfe, 0xd9, 0x91, 0x81, 0x9a, 0x01, 0x68, 0x51, 0x68, 0x1a, 0xce, 0x46, 0x55, 0x31, 0x33, 0x5f, 0x72, 0xe2, 0x4d, 0xca, 0x47, 0x63, 0x0c, 0x05, 0x69, 0xc4, 0xd1, 0x43, 0x4f, 0x74, 0xdb, 0x11, 0x61, 0x08, 0x01, 0x39, 0x52, 0x38, 0xa7, 0xe7, 0xb0, 0x2a, 0xeb, 0x0a, 0xb9, 0xf4, 0x1f, 0xfd, 0x71, 0x5c, 0x7c, 0x67, 0xf1, 0xe1, 0x14, 0x60, 0x02, 0x00, 0x09, 0xd5, 0xea, 0xb0, 0xfd, 0x2d, 0x86, 0x2f, 0xc9, 0x2c, 0x99, 0x00, 0x72, 0x18, 0x64, 0x35, 0x59, 0x1b, 0x77, 0xea, 0xb1, 0xe9, 0xc6, 0x12, 0x36, 0xa2, 0xff, 0x76, 0x1c, 0xfa, 0x1b, 0xfa, 0x46, 0x97, 0x34, 0x22, 0xb9, 0xbb, 0x96, 0xd6, 0x50, 0x22, 0x18, 0x62, 0xb1, 0x2e, 0xad, 0xc1, 0x7f, 0x41, 0x36, 0x1b, 0xd2, 0x6a, 0x9a, 0x8c, 0xe4, 0x45, 0x19, 0x27, 0x0d, 0x1c, 0xdd, 0x3b, 0xf1, 0x52, 0xd2, 0xd4, 0xf8, 0x02, 0xb8, 0x85, 0xfe, 0xe3, 0x77, 0x65, 0x4c, 0x6f, 0xb2, 0x58, 0xc7, 0x44, 0x9e, 0x90, 0x68, 0xca, 0x15, 0x53, 0xec, 0x16, 0xe6, 0xfe, 0xcd, 0x0e, 0x70, 0x4a, 0x70, 0xce, 0x6f, 0xce, 0xa0, 0x4b, 0x15, 0xc5, 0x3b, 0x36, 0x5d, 0x12, 0x2b, 0x24, 0x9c, 0x81, 0x98, 0xeb, 0x58, 0x50, 0x5c, 0x4f, 0x5e, 0xee, 0xb8, 0xde, 0x0f, 0x02, 0x45, 0x18, 0xfb, 0xaf, 0x2d, 0xd3, 0xb1, 0x16, 0x9a, 0xde, 0xd4, 0x1d, 0x6f, 0xe5, 0x72, 0x6f, 0x37, 0x94, 0x92, 0xc5, 0x5a, 0xff, 0x0c, 0x63, 0x97, 0x42, 0x9e, 0xe5, 0xae, 0x64, 0x3b, 0x3b, 0x5d, 0x82, 0xa6, 0xf3, 0x8e, 0x29, 0x40, 0xb6, 0xcf, 0x03, 0x1f, 0x16, 0x02, 0xb6, 0x5f, 0x87, 0x56, 0x09, 0xbd, 0xaa, 0x76, 0x49, 0x61, 0xd2, 0x00, 0xeb, 0xfc, 0xc1, 0x38, 0x72, 0x13, 0xb2, 0xfe, 0x93, 0x9b, 0x9d, 0xfd, 0x97, 0xc5, 0xb6, 0x26, 0x02, 0x1b, 0x36, 0x5d, 0x72, 0xcc, 0x5f, 0x71, 0xc9, 0x44, 0xba, 0x52, 0x8e, 0x00, 0xa4, 0x7e, 0x91, 0xa1, 0x08, 0xbd, 0xce, 0x3f, 0x6e, 0x0e, 0x94, 0xff, 0x35, 0xe1, 0xe7, 0xe8, 0x1c, 0x86, 0x22, 0xf2, 0x08, 0xe6, 0xe1, 0x60, 0x01, 0x71, 0x1d, 0x50, 0x7d, 0x57, 0x99, 0x91, 0xe1, 0xfb, 0x7d, 0xb4, 0x45, 0xa5, 0x41, 0x66, 0x77, 0x76, 0xcd, 0xfd, 0x43, 0xa2, 0xdf, 0x50, 0xf2, 0xd9, 0xac, 0xcc, 0x11, 0x06, 0xca, 0xc4, 0x74, 0x3c, 0x4d, 0x09, 0x7a, 0xed, 0x31, 0xbb, 0x91, 0x5e, 0xf8, 0x5e, 0xfd, 0x57, 0x93, 0x30, 0xd6, 0x1f, 0x86, 0xba, 0x50, 0xa8, 0x48, 0xa6, 0x40, 0x06, 0xe8, 0xd0, 0xdb, 0x25, 0xf6, 0xa0, 0xc0, 0xbc, 0xa1, 0x96, 0x39, 0x7d, 0x1d, 0x26, 0xbd, 0x8f, 0x48, 0xc7, 0xba, 0x3d, 0x8c, 0x47, 0x92, 0xf0, 0x07, 0x61, 0xe3, 0x5a, 0xe9, 0x91, 0x0c, 0xf5, 0x1e, 0x27, 0xed, 0xac, 0x2e, 0x9b, 0xee, 0xd7, 0x61, 0x20, 0x42, 0x6d, 0x26, 0x7b, 0x6d, 0x75, 0xb5, 0x16, 0x03, 0xbe, 0xf4, 0x50, 0xb3, 0xd0, 0x97, 0x18, 0x85, 0x22, 0x8c, 0xba, 0x60, 0x8e, 0x96, 0xf8, 0xcf, 0x01, 0x38, 0x5d, 0x04, 0x77, 0xd4, 0xce, 0x1e, 0x27, 0x14, 0x62, 0xa7, 0xfa, 0x89, 0x74, 0x61, 0x42, 0x92, 0xf6, 0x42, 0xa9, 0x80, 0x07, 0xbd, 0x67, 0xf7, 0xc8, 0x43, 0xb9, 0x97, 0x6c, 0x0a, 0x8e, 0xdc, 0x8f, 0x0d, 0x83, 0x43, 0xc9, 0x54, 0x11, 0xaf, 0x82, 0x75, 0x05, 0x0a, 0x08, 0x5b, 0x31, 0x2f, 0xde, 0x46, 0x62, 0x08, 0x58, 0x13, 0x92, 0xf3, 0x64, 0xbe, 0x5e, 0x6b, 0xab, 0x25, 0xba, 0xe4, 0xd9, 0x0e, 0xe3, 0xf6, 0x38, 0x6c, 0x95, 0xbe, 0x84, 0xde, 0x7f, 0x82, 0xfb, 0x79, 0xf4, 0x93, 0xb3, 0xc7, 0xe3, 0x78, 0x30, 0x0f, 0x09, 0x48, 0x36, 0xd7, 0x65, 0x58, 0xdc, 0xa8, 0xec, 0x16, 0xe2, 0x11, 0x7f, 0x35, 0x44, 0xee, 0x1a, 0x0b, 0x0f, 0xeb, 0x4e, 0x37, 0x74, 0x43, 0xf1, 0x86, 0x1b, 0xce, 0x14, 0x18, 0xba, 0x3a, 0x35, 0xbe, 0xe5, 0x98, 0xb6, 0xa7, 0x28, 0x1b, 0x8e, 0x3c, 0x53, 0x1d, 0x3f, 0x48, 0x15, 0x63, 0x08, 0x5c, 0xcc, 0xa2, 0x5b, 0x72, 0x9c, 0x42, 0x91, 0xd0, 0xbe, 0x61, 0xdd, 0x2f, 0x1b, 0x1b, 0x7e, 0x1d, 0x1a, 0x09, 0x39, 0xa0, 0xb6, 0x07, 0x07, 0x1c, 0xd3, 0x3b, 0x0b, 0x76, 0xd2, 0x53, 0xc6, 0x7a, 0x63, 0x0d, 0x8e, 0x7a, 0x9a, 0xfd, 0x3c, 0x38, 0x46, 0x8b, 0x26, 0x07, 0x7e, 0x3b, 0x4d, 0x2c, 0x7c, 0x31, 0xd7, 0x8a, 0xaf, 0xf4, 0xbf, 0x7f, 0x0b, 0x72, 0xcb, 0x09, 0xa4, 0x44, 0xbe, 0x2d, 0x7b, 0x34, 0xcf, 0x99, 0x97, 0xfc, 0x5b, 0x88, 0x58, 0x51, 0xd7, 0xe6, 0x09, 0x20, 0x08, 0xb4, 0xb4, 0x18, 0x76, 0xaf, 0x3a, 0x68, 0x1e, 0x2c, 0xa2, 0xca, 0x67, 0x47, 0xb2, 0xc0, 0x57, 0x3c, 0xbc, 0x1d, 0x07, 0x15, 0xbb, 0xc8, 0x54, 0x86, 0x9f, 0xbd, 0xd8, 0x15, 0xe4, 0x54, 0x19, 0x7d, 0x69, 0xc6, 0xff, 0x55, 0x80, 0xed, 0x8c, 0xed, 0x41, 0x4b, 0xc7, 0x79, 0x25, 0x4e, 0xf9, 0x71, 0xd0, 0xd2, 0x1c, 0x37, 0x2d, 0xe8, 0x91, 0xfb, 0xc0, 0xd6, 0x11, 0xdc, 0x38, 0x5f, 0xe6, 0x4f, 0x44, 0x44, 0x5b, 0xc5, 0xa8, 0x0a, 0x71, 0x88, 0x90, 0xfe, 0xd3, 0xe6, 0x24, 0x77, 0x0c, 0x92, 0x5c, 0x5b, 0xf8, 0x47, 0x16, 0xe4, 0x78, 0xae, 0x66, 0xa4, 0x6a, 0x82, 0x2d, 0xc7, 0xd9, 0xf2, 0xed, 0x99, 0x70, 0x47, 0xdb, 0x48, 0x35, 0xc6, 0x36, 0xea, 0x74, 0xd8, 0xd8, 0xc1, 0xf8, 0x68, 0x0b, 0xbe, 0x81, 0x8d, 0x9d, 0x45, 0x73, 0x69, 0x37, 0x30, 0xcc, 0x51, 0xea, 0x16, 0x58, 0x2d, 0x0b, 0xcd, 0x28, 0x22, 0x41, 0x2d, 0x40, 0x6f, 0xdc, 0x17, 0x90, 0x95, 0x68, 0xb6, 0x26, 0xbb, 0x82, 0x05, 0xa1, 0x50, 0xeb, 0x92, 0xe9, 0xf2, 0xdb, 0x81, 0x1d, 0x8f, 0x98, 0xd3, 0xcd, 0xca, 0x46, 0xe9, 0x6a, 0xa0, 0x01, 0x43, 0xfa, 0x4b, 0x29, 0x8e, 0x10, 0x66, 0xfd, 0xde, 0xfc, 0x53, 0x6c, 0x38, 0x3f, 0xda, 0x27, 0x53, 0x42, 0x12, 0xfb, 0x9f, 0x47, 0x85, 0x5e, 0x87, 0x9f, 0x8f, 0x48, 0xf3, 0x1d, 0x07, 0x44, 0x12, 0xcc, 0x21, 0xc6, 0x56, 0xdd, 0x93, 0xbf, 0xc0, 0xe3, 0xf7, 0x6f, 0x5d, 0x43, 0x71, 0x7a, 0x11, 0xe5, 0x91, 0x3f, 0x93, 0x30, 0x7b, 0x65, 0xb9, 0x36, 0x45, 0xb6, 0xf6, 0x2b, 0xa0, 0x31, 0x21, 0x1c, 0xbb, 0x5a, 0x77, 0xdd, 0x64, 0xd5, 0xe4, 0x44, 0x71, 0x33, 0x7e, 0x94, 0x5e, 0x0c, 0x52, 0x3c, 0x37, 0x4e, 0x64, 0xc2, 0xb8, 0xd4, 0xf1, 0xfa, 0xb4, 0x3b, 0xf7, 0x7b, 0xb3, 0xf1, 0xf8, 0x53, 0xdf, 0x8e, 0xfa, 0xfa, 0x21, 0x68, 0xd2, 0x85, 0x87, 0x61, 0xa2, 0x1c, 0xe9, 0x04, 0xa1, 0xae, 0xcc, 0xd1, 0x1a, 0xe3, 0x86, 0xd4, 0xb8, 0x53, 0xa3, 0x7d, 0x00, 0xf5, 0x88, 0xab, 0x1f, 0xda, 0x56, 0x0a, 0xe6, 0x1b, 0x11, 0x9f, 0x13, 0x10, 0x02, 0xa1, 0xd2, 0xc2, 0x59, 0x8b, 0x83, 0xa3, 0x17, 0x6f, 0xbe, 0x7d, 0x2b, 0x8d, 0x94, 0xa9, 0xdb, 0x24, 0x18, 0x81, 0x66, 0x88, 0x1f, 0x17, 0xe8, 0x75, 0x43, 0x28, 0x7d, 0xa3, 0x2e, 0x4b, 0xa9, 0x9a, 0x15, 0x6e, 0xf8, 0xc8, 0x82, 0x83, 0xe1, 0xd1, 0x57, 0x77, 0xf0, 0x26, 0x10, 0x64, 0x25, 0xd9, 0x48, 0x07, 0x97, 0xb0, 0x7e, 0x74, 0x5c, 0x78, 0x1a, 0x08, 0xad, 0x9b, 0xab, 0xa0, 0x46, 0xf5, 0x73, 0x08, 0x0c, 0xe4, 0x25, 0xb7, 0xf2, 0x9e, 0xed, 0xb9, 0x1d, 0xc8, 0xb1, 0xec, 0x47, 0x44, 0x97, 0x6f, 0x61, 0x4a, 0xc7, 0x58, 0x7c, 0xba, 0x72, 0xa5, 0xe9, 0xb0, 0x13, 0x76, 0x9f, 0x59, 0xf4, 0x79, 0xde, 0x06, 0xf4, 0xa5, 0x12, 0x7f, 0x89, 0x2b, 0xfa, 0x9a, 0x01, 0xa9, 0x09, 0x0c, 0x0d, 0xa1, 0x0d, 0x7e, 0x7f, 0x2b, 0x0e, 0xe4, 0x53, 0xe6, 0x79, 0x0a, 0xec, 0x34, 0x7e, 0x6f, 0xa1, 0xa7, 0xb6, 0x57, 0x78, 0xb6, 0x09, 0x1c, 0x31, 0xb5, 0xcf, 0xc5, 0x87, 0x04, 0x35, 0xd9, 0xb2, 0x86, 0xe2, 0x76, 0x30, 0x54, 0xdb, 0x9d, 0xc5, 0xb3, 0xa4, 0xd0, 0xc1, 0x44, 0xa9, 0xdf, 0x81, 0x7b, 0xdc, 0xff, 0x38, 0x52, 0x9e, 0x1c, 0xf0, 0x3f, 0xe3, 0x70, 0xcb, 0x63, 0x91, 0x55, 0x8f, 0x04, 0x2a, 0x57, 0x61, 0x3d, 0xab, 0x8e, 0xd1, 0xf4, 0xb4, 0x2b, 0x17, 0x0d, 0xe8, 0x50, 0x9c, 0xdd, 0x97, 0x25, 0xbd, 0xe2, 0x9b, 0x28, 0xcb, 0xb1, 0x7f, 0xc4, 0x56, 0x2f, 0xe7, 0x26, 0xab, 0x04, 0x2b, 0x4c, 0x9b, 0x4d, 0x46, 0x5e, 0x7e, 0x91, 0xef, 0x42, 0x78, 0xf7, 0x05, 0x6b, 0xfb, 0xb6, 0x30, 0xf1, 0x8d, 0xcc, 0xc6, 0xe7, 0xcc, 0xf3, 0xeb, 0xe9, 0xaf, 0xd1, 0xfd, 0xf4, 0x0e, 0x6f, 0x2f, 0x7a, 0x65, 0xec, 0x73, 0xb6, 0xd5, 0x73, 0x9e, 0x3e, 0x6b, 0x6a, 0xc6, 0xd7, 0xa5, 0xec, 0xef, 0x8c, 0x32, 0x7a, 0xe7, 0x02, 0xfa, 0xed, 0x6f, 0x06, 0x5e, 0xaf, 0x9b, 0x68, 0xc1, 0x2b, 0x7c, 0x0c, 0x47, 0x82, 0xfc, 0x3e, 0xdc, 0x80, 0x08, 0x46, 0x79, 0xce, 0xf5, 0x3c, 0xa2, 0x69, 0x1c, 0x1e, 0x34, 0x52, 0xc8, 0x20, 0x5d, 0x88, 0x53, 0x43, 0xec, 0x33, 0x8b, 0x29, 0xcb, 0x22, 0x5a, 0x28, 0xc9, 0x77, 0xa7, 0x9d, 0x9d, 0xa1, 0x77, 0x83, 0x28, 0x8b, 0x58, 0x44, 0xfb, 0x13, 0xff, 0xce, 0x19, 0xbe, 0x30, 0xea, 0xfe, 0xaa, 0xde, 0xc9, 0xe0, 0xc4, 0x94, 0xe0, 0x34, 0x3a, 0x13, 0xf7, 0x74, 0x34, 0x3d, 0x7c, 0x20, 0xbf, 0x31, 0x1c, 0x03, 0x09, 0xb8, 0x95, 0xb7, 0xd4, 0xe0, 0xc5, 0x6b, 0x25, 0xe6, 0x07, 0xe4, 0x3c, 0x59, 0xc0, 0xc2, 0xc9, 0x7d, 0x35, 0x05, 0x5d, 0xee, 0xa0, 0xcf, 0x1f, 0x85, 0x82, 0x6b, 0xc0, 0x7f, 0x3a, 0x8f, 0xb1, 0xdc, 0xd7, 0xde, 0x93, 0x06, 0x2b, 0xb1, 0xef, 0xb3, 0x20, 0x17, 0x27, 0x0c, 0x50, 0x1b, 0xac, 0x0f, 0xcf, 0x45, 0x72, 0x32, 0x4b, 0x63, 0xa1, 0x49, 0x58, 0x88, 0x8e, 0xa9, 0x05, 0x56, 0xe9, 0x8e, 0xb3, 0x79, 0x38, 0xba, 0x27, 0x74, 0x83, 0x5f, 0xdd, 0xa0, 0x51, 0x3f, 0x9f, 0x71, 0xd4, 0x12, 0x57, 0xfc, 0x61, 0x28, 0x22, 0xb6, 0x23, 0x4f, 0xa5, 0x7f, 0x0f, 0xf7, 0xa4, 0xdf, 0x1a, 0x94, 0xd0, 0x8f, 0xaa, 0x44, 0xe1, 0x3b, 0x4b, 0xb2, 0xe5, 0x86, 0xa4, 0x3a, 0xd8, 0x4f, 0xa9, 0x4e, 0x74, 0x32, 0x12, 0x18, 0x4a, 0x52, 0x0b, 0x60, 0x12, 0x56, 0x2d, 0xb1, 0x40, 0xb2, 0xad, 0xb7, 0xd8, 0x28, 0xd3, 0xec, 0x82, 0x8e, 0xae, 0x74, 0xe1, 0xd1, 0x07, 0x44, 0x21, 0x3a, 0x93, 0x8a, 0xcf, 0xf0, 0x6c, 0x49, 0xee, 0xbf, 0xc2, 0x44, 0x47, 0x17, 0xce, 0x1e, 0x00, 0x58, 0x08, 0xbf, 0x70, 0x4c, 0x9a, 0xfa, 0x32, 0xf5, 0x14, 0x6c, 0x78, 0x8a, 0x61, 0xa7, 0xa2, 0xbc, 0xfa, 0x90, 0x10, 0x3d, 0x59, 0x05, 0x34, 0x83, 0xb1, 0xc3, 0xeb, 0xca, 0xdc, 0x87, 0x0d, 0x58, 0x95, 0x74, 0x42, 0x04, 0xe7, 0xb5, 0x18, 0xf9, 0xe5, 0x63, 0x53, 0xb8, 0x9c, 0xa9, 0x85, 0x5c, 0x46, 0x26, 0xde, 0x22, 0xc1, 0x92, 0x44, 0x28, 0x3f, 0xa5, 0xa6, 0x75, 0x3e, 0x34, 0x8e, 0x3a, 0xbb, 0x9e, 0xf6, 0x57, 0xa2, 0x66, 0x5d, 0x21, 0x8a, 0x21, 0x1a, 0x63, 0x9f, 0x93, 0xef, 0xa3, 0xdf, 0x15, 0xe1, 0xa6, 0x8a, 0x39, 0x47, 0x36, 0xd3, 0xb1, 0x22, 0x22, 0xdc, 0x6d, 0xac, 0x87, 0xe1, 0x04, 0x34, 0x4e, 0xb4, 0x55, 0x28, 0xf6, 0x69, 0x6e, 0x74, 0x93, 0x52, 0xad, 0x0a, 0x17, 0x2e, 0x24, 0xc2, 0xd1, 0x9d, 0x42, 0x65, 0x33, 0xd7, 0xb0, 0x04, 0xd8, 0x9e, 0x7a, 0x8f, 0xc6, 0x71, 0x6f, 0xa3, 0xf0, 0x03, 0xca, 0xa2, 0xff, 0xeb, 0x12, 0x09, 0x51, 0x9d, 0x3e, 0xfe, 0x42, 0x99, 0x1d, 0x29, 0xab, 0xe2, 0xf5, 0xc5, 0xa9, 0xb2, 0x6b, 0xf7, 0xa0, 0x6c, 0xa2, 0x5e, 0x7f, 0xd2, 0xa7, 0xeb, 0x45, 0x78, 0x0d, 0xf3, 0xc4, 0x78, 0xd4, 0x82, 0xa4, 0x68, 0x90, 0xf3, 0xac, 0x89, 0xc6, 0xbd, 0x3d, 0x41, 0x9a, 0x90, 0x1f, 0xcc, 0xa7, 0xa1, 0x81, 0x2e, 0x2f, 0x42, 0x3a, 0x6c, 0x74, 0xb5, 0x55, 0xfb, 0x65, 0x42, 0xcd, 0x79, 0x7d, 0x87, 0x95, 0x9b, 0xe9, 0x10, 0xdb, 0x67, 0xe9, 0x27, 0x8e, 0xa3, 0x78, 0xed, 0x1e, 0x8d, 0x2f, 0xaa, 0x83, 0xcc, 0x67, 0x62, 0x80, 0xa7, 0x9e, 0xa9, 0x29, 0x75, 0x1c, 0xb7, 0xa3, 0x54, 0xd5, 0xbf, 0x2b, 0x1e, 0x92, 0x7d, 0x59, 0x99, 0x4c, 0x0f, 0xa6, 0xee, 0xd8, 0x05, 0x2d, 0x5d, 0xca, 0xbb, 0xae, 0x2e, 0x93, 0xe7, 0xd8, 0xeb, 0xec, 0x6e, 0xc8, 0xcc, 0x78, 0x7c, 0xcd, 0x73, 0xa4, 0xd3, 0x6e, 0xd9, 0xd3, 0x63, 0xae, 0x89, 0xb8, 0x1b, 0x8e, 0x0c, 0x02, 0x00, 0xd4, 0xa4, 0x3f, 0x7c, 0x0b, 0x3d, 0xfa, 0xf8, 0xcb, 0xa0, 0x27, 0xad, 0x3a, 0xea, 0xc2, 0xb6, 0xd3, 0x3c, 0xb2, 0x6a, 0x66, 0xb5, 0xf3, 0xea, 0x60, 0x9d, 0xf4, 0xf6, 0x4d, 0xe3, 0x3e, 0x05, 0x9b, 0xca, 0x57, 0x94, 0xa1, 0xdf, 0xe6, 0xbe, 0xe0, 0x2e, 0x17, 0x0d, 0x88, 0xb5, 0x41, 0x90, 0x3e, 0x19, 0xc7, 0x2d, 0x1c, 0x98, 0x3c, 0x39, 0xf9, 0x3f, 0xca, 0x46, 0xeb, 0x5d, 0xd4, 0x3c, 0x0b, 0x37, 0xda, 0xac, 0x78, 0xfd, 0x9d, 0x60, 0x9f, 0xfd, 0x84, 0x37, 0xb9, 0x17, 0x3f, 0x30, 0x94, 0x71, 0xaa, 0xc4, 0x97, 0x6c, 0xf4, 0x79, 0x01, 0xd6, 0x00, 0xb4, 0x71, 0x61, 0x0b, 0xce, 0xab, 0x53, 0x90, 0x6b, 0x99, 0x80, 0x68, 0x07, 0x90, 0x75, 0x36, 0xd2, 0xd5, 0xf7, 0x02, 0xbe, 0x60, 0xac, 0x24, 0xd6, 0xdf, 0x17, 0x64, 0xd1, 0xfe, 0xca, 0x5f, 0xe7, 0xe6, 0xd6, 0x2d, 0xe3, 0x03, 0x87, 0x40, 0x7a, 0x0b, 0x4e, 0x8f, 0xdb, 0x3c, 0xff, 0xf4, 0x87, 0xe5, 0x3c, 0xd3, 0x63, 0x27, 0x31, 0xfd, 0x0b, 0xfd, 0x83, 0xd4, 0x6a, 0x7a, 0x82, 0xaf, 0x88, 0x52, 0xa6, 0x80, 0xa2, 0x9c, 0x39, 0xb4, 0x80, 0xd6, 0x51, 0x5a, 0x03, 0x2a, 0x01, 0x88, 0xfe, 0xef, 0xd0, 0xfa, 0x46, 0x73, 0x6a, 0xfd, 0x0d, 0xf8, 0x96, 0x8b, 0x6b, 0xfc, 0x68, 0xb8, 0x3e, 0xbe, 0xb8, 0x4d, 0x34, 0xfd, 0xd3, 0xb2, 0x26, 0x03, 0x6f, 0x11, 0xa8, 0xe2, 0xe5, 0xb8, 0xde, 0xfe, 0x9a, 0xbf, 0x91, 0xcb, 0xbe, 0xeb, 0x81, 0xd8, 0x3a, 0xd3, 0xfd, 0x0d, 0xe3, 0x41, 0xb2, 0x31, 0xf4, 0xdb, 0xc1, 0xae, 0xbb, 0x03, 0x14, 0x99, 0x92, 0xfb, 0xf1, 0xed, 0x11, 0x4d, 0xcf, 0x17, 0x82, 0x6a, 0x69, 0xb8, 0x95, 0x91, 0x12, 0xa6, 0x56, 0xf2, 0x48, 0x34, 0x5b, 0x14, 0x8b, 0xb3, 0x42, 0x74, 0x70, 0x38, 0x5b, 0x6f, 0xf1, 0xa0, 0xa1, 0x61, 0x07, 0xd2, 0xef, 0x0f, 0x7b, 0x44, 0x70, 0x42, 0xf8, 0xc1, 0x58, 0xb5, 0x66, 0x69, 0xd1, 0x31, 0x73, 0xf9, 0x38, 0xf7, 0x72, 0x4c, 0x8a, 0x5e, 0x69, 0x22, 0x19, 0xbd, 0x65, 0x21, 0x84, 0x8b, 0x11, 0x19, 0xe5, 0xc5, 0x87, 0x8c, 0x4c, 0x90, 0x66, 0x6e, 0x6d, 0x20, 0x25, 0x29, 0x95, 0xd8, 0xa7, 0xe4, 0xe3, 0xb3, 0x0f, 0x05, 0xb4, 0xe2, 0xd5, 0xf4, 0x5f, 0xb7, 0x1a, 0x22, 0x23, 0xc1, 0x38, 0x4b, 0x5d, 0x39, 0x9e, 0xf8, 0xfe, 0x9c, 0xdb, 0x47, 0x3d, 0x9a, 0xf8, 0xee, 0x89, 0x2f, 0x0b, 0x7e, 0xc2, 0x10, 0x09, 0xe5, 0xa8, 0x48, 0xdc, 0x37, 0x94, 0x23, 0xb5, 0xae, 0x66, 0x4b, 0xa4, 0xef, 0xbe, 0x31, 0x66, 0x8e, 0x6f, 0xae, 0x7e, 0xd5, 0x30, 0xeb, 0x87, 0xc1, 0x95, 0x7e, 0xc8, 0x4e, 0x3e, 0xd5, 0x09, 0xf4, 0x4f, 0xd8, 0xa5, 0x72, 0x1f, 0xca, 0xe1, 0xca, 0x35, 0x70, 0x7c, 0x8d, 0x70, 0x76, 0x87, 0x58, 0x85, 0x0e, 0x77, 0x9f, 0xaf, 0xda, 0x79, 0xa9, 0xa1, 0x0c, 0x05, 0xdc, 0xc0, 0xcc, 0xb6, 0x3b, 0x8f, 0xda, 0x59, 0x2d, 0x6a, 0x74, 0x44, 0x80, 0x78, 0x7a, 0xe9, 0xad, 0xdb, 0xd0, 0xaa, 0x5e, 0x29, 0x04, 0xef, 0x2d, 0x20, 0x30, 0x76, 0xaf, 0x95, 0x22, 0xeb, 0xb1, 0xae, 0xbb, 0xb9, 0xc1, 0x51, 0x95, 0x1f, 0xf1, 0xdc, 0xe8, 0x86, 0xd7, 0x17, 0xaf, 0x12, 0xd8, 0x67, 0x06, 0x77, 0xa7, 0x44, 0xd7, 0x0e, 0x08, 0xec, 0xb5, 0x28, 0xda, 0x59, 0x08, 0xa2, 0x54, 0x71, 0x6b, 0xb9, 0x8f, 0x7e, 0x52, 0x20, 0x44, 0xdd, 0xf0, 0x50, 0xd8, 0xfa, 0x58, 0x20, 0x95, 0x7c, 0xe2, 0x95, 0x3b, 0xbc, 0xd0, 0xfb, 0xb7, 0x7c, 0x31, 0x34, 0x32, 0xd6, 0x06, 0x51, 0x4d, 0x72, 0xa4, 0x5f, 0xab, 0xfc, 0x59, 0x83, 0xb1, 0xd5, 0x52, 0x4a, 0x89, 0x09, 0xbc, 0x3a, 0x6d, 0x82, 0x2a, 0xad, 0x22, 0x7b, 0x37, 0xdf, 0xc2, 0x37, 0x6c, 0x45, 0xbf, 0xf2, 0x64, 0x20, 0x25, 0x18, 0x2d, 0x53, 0x1f, 0xb5, 0xf2, 0x71, 0xbd, 0x2c, 0xd7, 0x1b, 0xf4, 0x2d, 0x25, 0x89, 0xe7, 0xe1, 0xa7, 0x66, 0x64, 0x67, 0x54, 0xe1, 0xb2, 0x84, 0x2d, 0x01, 0x8a, 0x96, 0x69, 0x38, 0x63, 0xca, 0xd0, 0x3c, 0xf3, 0x8f, 0x65, 0x12, 0xf2, 0x4b, 0x47, 0x6b, 0x21, 0x4c, 0xd9, 0x34, 0x8b, 0x01, 0x21, 0x69, 0x0a, 0x6a, 0x6e, 0x2a, 0x0e, 0xcd, 0x3e, 0x10, 0x9a, 0xab, 0x5e, 0xc1, 0x8f, 0xf2, 0x53, 0xc2, 0x2d, 0x74, 0xf9, 0x8d, 0xd7, 0x98, 0x6a, 0xe4, 0x16, 0x4f, 0x21, 0x64, 0xe1, 0x4a, 0x60, 0x5d, 0x1c, 0x6b, 0xce, 0xe1, 0x5e, 0x79, 0x65, 0x1b, 0xf7, 0x17, 0x8b, 0xe2, 0x32, 0xf7, 0x7f, 0x8e, 0xd7, 0x4b, 0xf7, 0x0b, 0xf4, 0x7c, 0x08, 0x2c, 0xdd, 0x1f, 0x45, 0x41, 0x72, 0x25, 0x2b, 0xeb, 0xa0, 0x51, 0xbd, 0x2f, 0x2b, 0xf0, 0x6b, 0xca, 0xaa, 0xc4, 0x38, 0xc4, 0xd3, 0x41, 0x1c, 0x48, 0xf8, 0xfc, 0xa7, 0xb3, 0xd2, 0x60, 0xe8, 0xeb, 0x7e, 0xa2, 0x8d, 0xf2, 0xc5, 0xf8, 0x4b, 0xbb, 0xa0, 0x06, 0x81, 0x3c, 0xfb, 0x99, 0x18, 0xc4, 0xba, 0x98, 0xad, 0x8f, 0xfa, 0x38, 0xf2, 0x98, 0x99, 0x6e, 0x51, 0xae, 0xf8, 0xaa, 0xd3, 0xca, 0xff, 0xc2, 0x41, 0xa0, 0x62, 0x2c, 0x89, 0x74, 0x23, 0x71, 0x62, 0x2f, 0x59, 0xde, 0x33, 0xb2, 0x2f, 0x7d, 0x31, 0x6a, 0x2f, 0x44, 0xc8, 0x24, 0xc1, 0x8b, 0x3d, 0x23, 0xee, 0xc4, 0x91, 0x70, 0x6a, 0x66, 0xa8, 0x72, 0xd2, 0x2a, 0xab, 0xbe, 0x32, 0x7a, 0xaa, 0x30, 0xca, 0x26, 0x86, 0x3b, 0x12, 0x5a, 0x0e, 0x7d, 0xfb, 0xcd, 0x68, 0x97, 0x78, 0x3a, 0xb3, 0x3b, 0x3d, 0x14, 0xea, 0x87, 0xc6, 0x76, 0x0b, 0x91, 0x9c, 0x59, 0x79, 0x43, 0xd4, 0x09, 0x9f, 0x69, 0xd8, 0xda, 0xd7, 0x08, 0x6a, 0x16, 0x8a, 0xf1, 0xe5, 0x3b, 0x98, 0x97, 0xc6, 0x63, 0xfa, 0x1e, 0x6c, 0x04, 0xa6, 0xb4, 0x1c, 0xd9, 0xb2, 0x24, 0x48, 0x20, 0xbd, 0xa8, 0x11, 0x06, 0x8b, 0xff, 0x0a, 0x60, 0xef, 0xc0, 0x3f, 0x9b, 0xee, 0xee, 0x76, 0xf6, 0x21, 0xcc, 0xb4, 0xee, 0x5b, 0xf3, 0x03, 0xfa, 0x8c, 0xa1, 0x73, 0x79, 0xe5, 0x54, 0x5f, 0xe9, 0x3d, 0x98, 0xf1, 0x59, 0xb4, 0x1d, 0xe8, 0x21, 0x96, 0x0c, 0x99, 0xd0, 0x82, 0x9b, 0x34, 0x66, 0xcb, 0xe0, 0x49, 0xc4, 0x1e, 0xe2, 0x8b, 0x60, 0x65, 0xf6, 0xd3, 0x3d, 0xec, 0x49, 0x68, 0x1b, 0xc2, 0xb9, 0x7d, 0xeb, 0x63, 0xe9, 0xfb, 0x85, 0x93, 0x94, 0x81, 0x9d, 0x8d, 0x21, 0xa9, 0xf3, 0x5d, 0x78, 0x8e, 0xcb, 0x8b, 0x15, 0x8b, 0x9d, 0xf9, 0x5a, 0x45, 0x0d, 0x0e, 0x2a, 0xeb, 0x1d, 0x14, 0xb3, 0xbc, 0xa2, 0xdf, 0x8b, 0xca, 0xf5, 0xb0, 0xff, 0xfe, 0xea, 0x59, 0xa8, 0x5d, 0x06, 0xa1, 0x3f, 0x89, 0xec, 0xe9, 0xb1, 0x8b, 0x19, 0x10, 0x76, 0xcf, 0xd1, 0x95, 0x1f, 0x70, 0x59, 0xfb, 0x2f, 0xb7, 0x67, 0x72, 0x2c, 0xde, 0xd7, 0xb3, 0xf6, 0x19, 0x9f, 0x2c, 0x57, 0xd7, 0x05, 0x5d, 0xda, 0x44, 0x10, 0x82, 0xe1, 0x13, 0x3c, 0x72, 0xf2, 0x7c, 0x71, 0xc7, 0x52, 0x80, 0x36, 0x3f, 0xd5, 0x74, 0x23, 0x62, 0xf4, 0xbd, 0x94, 0x65, 0x20, 0xd9, 0xa5, 0x4f, 0x56, 0x9f, 0x5a, 0x5a, 0xf4, 0xc7, 0x1d, 0x9c, 0xcb, 0xac, 0x6e, 0xe6, 0x75, 0x51, 0xd6, 0xed, 0xe8, 0xa2, 0x1c, 0xa7, 0x4c, 0xfd, 0xbc, 0xf8, 0x0a, 0xf1, 0x95, 0x8e, 0x26, 0x46, 0xe2, 0x0a, 0xce, 0x3d, 0x6b, 0x60, 0x33, 0x18, 0xfd, 0x80, 0x97, 0xdd, 0x17, 0x36, 0xa7, 0x58, 0xe6, 0x4e, 0x0c, 0x5f, 0x73, 0xfd, 0x3d, 0x5a, 0x1c, 0x7c, 0x97, 0x02, 0x41, 0xf6, 0xaf, 0x68, 0x3f, 0xa4, 0xe7, 0x39, 0xa2, 0x37, 0x3f, 0x41, 0x96, 0x76, 0x6e, 0x2f, 0x9f, 0x28, 0x32, 0x98, 0x8a, 0x34, 0xe4, 0x3e, 0xa4, 0x07, 0x4f, 0x91, 0x29, 0x36, 0xc2, 0x76, 0xff, 0x64, 0x64, 0x48, 0xa4, 0x67, 0xc8, 0x1c, 0x66, 0xa6, 0xc1, 0x4a, 0xd2, 0xc5, 0x78, 0x29, 0x6e, 0x85, 0xbb, 0x19, 0xab, 0xe5, 0x98, 0xc7, 0x15, 0x8e, 0x2b, 0xac, 0xcd, 0x6d, 0xb4, 0xd7, 0x39, 0xa2, 0xec, 0xed, 0xfa, 0x99, 0x9a, 0x6e, 0x1e, 0x76, 0x61, 0x39, 0x97, 0xb7, 0xdc, 0x53, 0xec, 0x14, 0xed, 0xe4, 0x2f, 0xaa, 0x51, 0x82, 0x2f, 0x59, 0x78, 0xb2, 0xee, 0x6b, 0x94, 0xac, 0x56, 0x76, 0xf1, 0x5f, 0x27, 0x83, 0x84, 0xb5, 0x34, 0x6f, 0xc6, 0x18, 0xcf, 0x92, 0xc3, 0x35, 0x82, 0x9f, 0x6d, 0x00, 0x00, 0xcb, 0x37, 0xf8, 0x5a, 0x32, 0xdf, 0xac, 0x76, 0x76, 0x8b, 0x7e, 0xbe, 0xa9, 0x18, 0xa7, 0x15, 0x6d, 0xaf, 0x7b, 0x0f, 0x59, 0x99, 0xee, 0x61, 0x9f, 0x54, 0x58, 0x96, 0xec, 0xe6, 0x75, 0x04, 0x90, 0x71, 0xb0, 0xff, 0xdf, 0x08, 0xa1, 0x4c, 0xd7, 0xc1, 0xd4, 0xd8, 0x03, 0x0b, 0xcc, 0xaa, 0x9e, 0x42, 0x47, 0x17, 0xfc, 0x81, 0xc4, 0x35, 0x26, 0xb8, 0x43, 0x92, 0xc5, 0xfe, 0x4c, 0x25, 0x41, 0x28, 0x32, 0x84, 0x29, 0x9a, 0x99, 0x58, 0xd6, 0x5d, 0x36, 0x0e, 0x4b, 0x72, 0xd6, 0xd0, 0x60, 0x66, 0xa2, 0xb4, 0x20, 0x27, 0xa1, 0x33, 0x6f, 0x16, 0x7e, 0xdc, 0xf0, 0x5d, 0x8c, 0x49, 0x25, 0x83, 0x07, 0x53, 0xd8, 0x3e, 0x9d, 0x82, 0xba, 0x88, 0x2c, 0xc7, 0x4b, 0xf4, 0xce, 0x6e, 0xf9, 0x43, 0x13, 0x4e, 0x8c, 0x32, 0x8d, 0x43, 0xc1, 0x97, 0x92, 0xde, 0x35, 0xac, 0x3d, 0x5a, 0x85, 0xab, 0xb6, 0xd2, 0xb4, 0x9b, 0xb3, 0xb2, 0xcd, 0x69, 0x3f, 0x6c, 0xc9, 0x3a, 0xbb, 0x6c, 0xb2, 0x00, 0x22, 0x4d, 0x09, 0x4b, 0x91, 0x4d, 0x66, 0x63, 0x06, 0xfe, 0x5e, 0x93, 0x67, 0x3f, 0xa9, 0xc7, 0xc7, 0x6b, 0x84, 0x5a, 0xe6, 0xd0, 0x55, 0x29, 0xf6, 0x63, 0x8e, 0xec, 0xa5, 0xb1, 0xd3, 0xc6, 0x57, 0x19, 0x5f, 0x1a, 0xb3, 0x39, 0xa4, 0xa1, 0x62, 0xa6, 0x31, 0xb9, 0x13, 0xe0, 0xd9, 0x00, 0xc3, 0x85, 0x12, 0x22, 0x3b, 0xc4, 0x9b, 0xef, 0xda, 0x15, 0x62, 0xb1, 0x94, 0x27, 0xa4, 0xbc, 0x3b, 0x1a, 0x56, 0x46, 0xfd, 0xef, 0xc4, 0x79, 0x2f, 0x3d, 0x78, 0xc7, 0x49, 0x25, 0x5d, 0x7e, 0x31, 0x87, 0x24, 0x9c, 0xbc, 0x76, 0xe7, 0xe4, 0x72, 0xea, 0x0c, 0x31, 0x91, 0xb5, 0x6d, 0x0b, 0x55, 0xb9, 0xb5, 0x78, 0x77, 0x57, 0x0d, 0x14, 0xf3, 0x2b, 0xf9, 0x64, 0x0f, 0xf6, 0x7c, 0x68, 0x99, 0xdb, 0x83, 0x6f, 0x70, 0xcf, 0x81, 0x2f, 0x46, 0x4b, 0x56, 0x15, 0xa3, 0x43, 0x75, 0xda, 0x2d, 0x5c, 0x46, 0x57, 0x28, 0x5a, 0xc9, 0x9a, 0x39, 0xd7, 0x7d, 0x39, 0x6f, 0x3b, 0x80, 0xe6, 0x83, 0xe8, 0xf7, 0x44, 0x5f, 0xb5, 0xb0, 0xfa, 0xde, 0x9e, 0x06, 0x05, 0xd3, 0xba, 0x05, 0x52, 0x4c, 0x6d, 0xcf, 0x8c, 0x18, 0xde, 0x3e, 0x33, 0x86, 0xab, 0xcb, 0xee, 0x70, 0xdc, 0xaf, 0x22, 0x78, 0x16, 0x48, 0xc3, 0x92, 0x11, 0xbd, 0x6a, 0xc3, 0x4c, 0xe5, 0xa8, 0x28, 0x00, 0x65, 0x9b, 0x39, 0x52, 0x19, 0xbe, 0x4f, 0xcc, 0xb6, 0x05, 0x64, 0x0e, 0xad, 0x2a, 0x1a, 0xc1, 0x52, 0x41, 0xff, 0xcd, 0x3d, 0x93, 0x10, 0xcc, 0xf0, 0xa9, 0x7c, 0xbe, 0xbb, 0xa7, 0xaa, 0xfe, 0xdd, 0xdc, 0x7c, 0x75, 0xec, 0x96, 0xd6, 0x0d, 0x77, 0x3b, 0x5a, 0x68, 0xe9, 0x95, 0x76, 0xd3, 0xb0, 0x6e, 0xa1, 0x75, 0x9f, 0x5d, 0xe1, 0xcc, 0x91, 0xdf, 0x91, 0x5b, 0x50, 0xa9, 0x61, 0x9c, 0xb5, 0x3d, 0x9e, 0x3c, 0x10, 0xbc, 0xb4, 0x87, 0xc9, 0xfb, 0xf1, 0x22, 0x48, 0xd8, 0x8b, 0xf8, 0x13, 0xcf, 0xe5, 0x76, 0x36, 0xc8, 0x0e, 0xfb, 0xe8, 0x33, 0x8a, 0x8a, 0x6b, 0x57, 0x56, 0xc3, 0x34, 0xe7, 0x26, 0x11, 0x4c, 0xd7, 0xf1, 0x24, 0xf6, 0x6d, 0xaf, 0xa2, 0x92, 0x9b, 0x62, 0x19, 0xc1, 0x8c, 0x53, 0x39, 0xca, 0x7d, 0x9e, 0x40, 0x3d, 0xce, 0xf0, 0xb5, 0xd6, 0x59, 0x90, 0x59, 0xa3, 0x02, 0x9c, 0x5b, 0x69, 0x8f, 0x96, 0xcb, 0x45, 0xbb, 0x1f, 0x51, 0x8f, 0x85, 0x01, 0x1f, 0x03, 0xce, 0x73, 0x24, 0x23, 0x23, 0x99, 0x82, 0xd7, 0xd8, 0x4b, 0x43, 0x57, 0x56, 0x17, 0x47, 0x4a, 0xb5, 0x89, 0x81, 0x30, 0x8e, 0xa9, 0x64, 0xfd, 0x0a, 0xc6, 0x97, 0x06, 0x3f, 0x72, 0xf0, 0x21, 0xbd, 0xce, 0xa0, 0x08, 0x63, 0x08, 0xab, 0xff, 0x78, 0x21, 0x9c, 0xb7, 0xf7, 0xf4, 0x76, 0x71, 0x29, 0x74, 0xed, 0x66, 0x79, 0x35, 0xd6, 0x67, 0x85, 0x2e, 0xdd, 0xc1, 0x71, 0xbd, 0x76, 0x63, 0x80, 0xeb, 0x16, 0x43, 0xe5, 0xf2, 0xa2, 0xfd, 0xd6, 0xfc, 0x28, 0xbd, 0xe3, 0x2e, 0xcd, 0x60, 0x86, 0xe5, 0x06, 0xd6, 0xfb, 0x3f, 0x0b, 0xcb, 0x51, 0xde, 0x89, 0x86, 0xc2, 0xe8, 0x97, 0x11, 0x40, 0x52, 0xec, 0x9a, 0x50, 0x5f, 0x4f, 0x19, 0x1b, 0x63, 0x4e, 0x33, 0xc2, 0xcd, 0x33, 0x5e, 0xf3, 0x64, 0x34, 0x47, 0xba, 0xd1, 0xea, 0x71, 0x99, 0x5e, 0x05, 0x1e, 0xda, 0xfd, 0x3d, 0x72, 0x24, 0x8c, 0x8c, 0xd6, 0x4d, 0x57, 0x9a, 0x9b, 0x6f, 0xdf, 0x79, 0xdf, 0x3e, 0xda, 0x92, 0xb5, 0x98, 0x7a, 0xdf, 0x80, 0x5e, 0xf2, 0x5b, 0xa0, 0x83, 0x37, 0xb7, 0x51, 0x62, 0x03, 0x4f, 0xcf, 0x55, 0x20, 0x5c, 0xbf, 0x83, 0xe3, 0x6b, 0xca, 0xf9, 0xf7, 0x0e, 0x8b, 0xfd, 0x5b, 0xd1, 0xab, 0x9e, 0xae, 0x6f, 0x4a, 0x90, 0xab, 0x46, 0xa1, 0x37, 0xf0, 0x09, 0xe6, 0x02, 0x03, 0xb5, 0x70, 0xfa, 0x96, 0xc6, 0x1c, 0x9b, 0x0a, 0xaa, 0xef, 0xe2, 0x33, 0x76, 0xfd, 0xa7, 0x5b, 0xd8, 0x89, 0x2d, 0x89, 0x4c, 0x6d, 0xf8, 0x03, 0x93, 0xbd, 0xde, 0x11, 0x62, 0xa7, 0x61, 0x04, 0x57, 0x9d, 0x3c, 0x77, 0x30, 0xb7, 0x3c, 0xd5, 0x3f, 0x52, 0x51, 0x1b, 0x19, 0xfe, 0xe5, 0xdf, 0x8f, 0x97, 0x6c, 0x92, 0xdf, 0xb1, 0x3d, 0x02, 0x2b, 0x39, 0xa0, 0x22, 0x29, 0x5a, 0x28, 0x0e, 0x1d, 0x9e, 0x43, 0x4a, 0x04, 0x56, 0x0f, 0x4a, 0x12, 0x3b, 0x6f, 0x38, 0x5f, 0x55, 0x5f, 0xf1, 0xde, 0x1c, 0x84, 0x51, 0x8e, 0xde, 0x07, 0xb0, 0xf4, 0x60, 0xa4, 0xac, 0xc8, 0xc8, 0xfe, 0x29, 0xef, 0xba, 0x36, 0x97, 0xa9, 0xc2, 0xbb, 0x74, 0x0c, 0xf2, 0x64, 0x11, 0xb1, 0xcc, 0xbc, 0x98, 0xad, 0x62, 0x9d, 0x4e, 0xc2, 0xbb, 0x00, 0x16, 0xd7, 0x79, 0x13, 0x37, 0xa6, 0xb9, 0x8c, 0x5e, 0xb5, 0x3b, 0x3d, 0xe7, 0x87, 0xc3, 0xe9, 0x58, 0x13, 0xbe, 0x57, 0x2e, 0x75, 0x29, 0xa4, 0xdd, 0xe4, 0xaf, 0xdd, 0x12, 0xe4, 0x11, 0xce, 0x3b, 0xbc, 0xcb, 0x14, 0x49, 0x2b, 0xf5, 0x7a, 0xb4, 0x57, 0x67, 0x82, 0xc0, 0x06, 0x20, 0x41, 0x00, 0x10, 0xe9, 0x70, 0x18, 0x15, 0x35, 0xc1, 0xc6, 0x6b, 0x4c, 0x6f, 0x24, 0x5a, 0xa8, 0x19, 0x27, 0x8c, 0x9f, 0xd0, 0x6c, 0xbf, 0x43, 0x6f, 0x34, 0xbd, 0x87, 0x2a, 0xad, 0x8e, 0xa3, 0x6a, 0x73, 0xec, 0xb9, 0xd9, 0x56, 0xf7, 0xb8, 0xb8, 0x5e, 0x2a, 0x81, 0x79, 0x0c, 0x8e, 0x48, 0x8a, 0xe3, 0x2d, 0x3d, 0x6f, 0x27, 0xca, 0x6c, 0x13, 0xe5, 0xcf, 0xe2, 0x60, 0x33, 0x87, 0x12, 0x0d, 0xb9, 0x8d, 0x77, 0xb7, 0x70, 0x85, 0x7a, 0x34, 0xaa, 0x09, 0x95, 0x24, 0x53, 0xe6, 0xb9, 0xc8, 0x76, 0x89, 0xed, 0x18, 0x02, 0xb4, 0x39, 0x0f, 0xcf, 0x76, 0xc2, 0x4a, 0xdc, 0x59, 0x36, 0xd1, 0xdb, 0xdd, 0x6a, 0x35, 0xef, 0x25, 0x42, 0xdb, 0xb4, 0xf1, 0xd2, 0x97, 0x80, 0xcc, 0xc2, 0x7c, 0xe8, 0x87, 0xf7, 0xf3, 0x86, 0xe5, 0x6f, 0x0b, 0xfa, 0x98, 0x6d, 0x10, 0x2f, 0x6c, 0xd7, 0x5f, 0xe0, 0xc3, 0xdc, 0x78, 0x5a, 0x41, 0xd9, 0x55, 0x83, 0xc8, 0x7e, 0xfb, 0x1b, 0xa7, 0x2d, 0x4e, 0x42, 0x0e, 0xa2, 0x29, 0x3a, 0xc6, 0xd9, 0xae, 0x6f, 0x1e, 0x2c, 0xdb, 0xb4, 0x29, 0xbd, 0x5e, 0xd0, 0x26, 0x13, 0xab, 0x39, 0x40, 0x08, 0x4b, 0x1f, 0x78, 0xe2, 0x77, 0xac, 0xdf, 0xc0, 0xe5, 0x8b, 0x08, 0x38, 0xe2, 0xa7, 0xbd, 0x3e, 0xa1, 0x35, 0xf1, 0x47, 0xd3, 0xf4, 0xf6, 0xaf, 0x77, 0xb3, 0xf0, 0x58, 0xf4, 0x15, 0x8a, 0x95, 0x65, 0x91, 0xe7, 0x46, 0x34, 0xbc, 0xdc, 0x44, 0xea, 0xcb, 0x5c, 0xff, 0x45, 0x53, 0x33, 0x65, 0x8c, 0x54, 0xf7, 0x06, 0x1f, 0x76, 0x3c, 0x76, 0x52, 0x92, 0x08, 0xf3, 0x7b, 0x74, 0x87, 0x48, 0x4a, 0xe0, 0xff, 0xf1, 0x59, 0xd2, 0x05, 0x80, 0x04, 0x0a, 0xf2, 0x40, 0x7b, 0xc8, 0x91, 0x17, 0x15, 0xd5, 0x1a, 0xb1, 0xe8, 0xc2, 0x64, 0xda, 0x96, 0x74, 0x56, 0x2c, 0x69, 0xe1, 0x9f, 0xeb, 0xa3, 0x14, 0xa6, 0x2d, 0x0f, 0x77, 0xc4, 0x3e, 0xdc, 0x51, 0xb2, 0x42, 0xab, 0x8e, 0x3d, 0x1c, 0xe7, 0xbf, 0x41, 0x8f, 0x55, 0x61, 0xd4, 0xa3, 0xec, 0x62, 0xc2, 0x4b, 0xe6, 0xe1, 0x3a, 0x44, 0x17, 0x36, 0xc6, 0x40, 0x7e, 0x32, 0x80, 0x44, 0x1a, 0xa7, 0x84, 0x4f, 0xfe, 0x2b, 0xa1, 0x3c, 0xa8, 0x1a, 0x54, 0xe9, 0x8f, 0xda, 0xf6, 0x99, 0xfb, 0x63, 0x34, 0x97, 0x19, 0xfe, 0xc0, 0x1d, 0x4f, 0x4c, 0x46, 0x73, 0xcd, 0x8b, 0xa2, 0x5b, 0x65, 0x15, 0x50, 0xad, 0x9c, 0x29, 0x23, 0x3f, 0x01, 0xee, 0x3a, 0x07, 0xbd, 0xb5, 0x31, 0x84, 0x6c, 0x7f, 0x94, 0x59, 0x2b, 0xbf, 0x99, 0x3c, 0xf2, 0x61, 0x0e, 0x0e, 0x25, 0x0a, 0x90, 0x4b, 0x65, 0xa2, 0xfe, 0xa5, 0xac, 0x10, 0x2d, 0xec, 0x99, 0x44, 0xdd, 0x31, 0x08, 0x7b, 0xec, 0x2b, 0xe6, 0xbe, 0xca, 0xda, 0x44, 0xac, 0x2d, 0x69, 0xa9, 0x7a, 0x06, 0x59, 0xad, 0x38, 0xb3, 0xdc, 0xc3, 0x56, 0x76, 0x7f, 0x57, 0x66, 0x26, 0x0c, 0x19, 0x23, 0x24, 0xaf, 0x98, 0xb3, 0x91, 0x57, 0x12, 0x29, 0xbe, 0x5f, 0x8a, 0x4e, 0xe4, 0x6e, 0x1c, 0xa1, 0x16, 0x9c, 0x8e, 0x9c, 0x73, 0xd6, 0x27, 0x39, 0xa0, 0x83, 0xc4, 0xb5, 0x76, 0x67, 0x28, 0x94, 0xf7, 0xc8, 0x94, 0xe5, 0x87, 0xd0, 0x97, 0xc7, 0x59, 0x33, 0x28, 0x2c, 0x27, 0x12, 0xf2, 0xdd, 0x26, 0x1e, 0xef, 0xbf, 0x39, 0x00, 0x38, 0x54, 0x64, 0xf9, 0x1c, 0x84, 0x84, 0xc5, 0x6f, 0x9e, 0x3e, 0xc6 ],
-const [ 0xe3, 0x6e, 0x18, 0xed, 0xdf, 0xe2, 0xc2, 0x1d, 0x09, 0x7a, 0xf7, 0xbf, 0x9f, 0x8d, 0x89, 0xf1, 0x93, 0x4e, 0xa6, 0xb4, 0x34, 0xe8, 0xa3, 0xa1, 0x0b, 0xcd, 0xf7, 0xd8, 0x03, 0x4a, 0x8b, 0x3a, 0xce, 0x60, 0x31, 0xd8, 0x83, 0xcf, 0x71, 0xaa, 0x8c, 0x73, 0x8c, 0x85, 0xbf, 0xd3, 0xbb, 0x47, 0xcb, 0xf8, 0xb8, 0x55, 0xd6, 0x7b, 0x7f, 0x47, 0x64, 0xe2, 0x56, 0xe1, 0x7b, 0x2d, 0x0b, 0x45, 0x05, 0xab, 0x7d, 0x68, 0x75, 0x12, 0x5d, 0xc3, 0xad, 0xcf, 0x36, 0x4b, 0x1f, 0x9b, 0xab, 0xa2, 0x33, 0x4f, 0x01, 0x8f, 0xe9, 0xf9, 0xdd, 0xac, 0xc0, 0x2f, 0x4e, 0x5e, 0xd6, 0xa3, 0x0d, 0x0a, 0x50, 0xf8, 0x04, 0x86, 0xfc, 0xd4, 0x0e, 0xce, 0x35, 0x37, 0xfe, 0xf9, 0x08, 0x0b, 0xe2, 0x6b, 0x95, 0xfc, 0x89, 0x4b, 0xb7, 0x89, 0x42, 0x38, 0xe7, 0x5b, 0xe7, 0x37, 0x5d, 0xd6, 0x1a, 0xf0, 0x79, 0xef, 0xcf, 0x1b, 0x62, 0x3d, 0x0b, 0x35, 0xed, 0x52, 0xea, 0x77, 0xc0, 0x4b, 0xe7, 0x08, 0xb7, 0xa6, 0x58, 0x72, 0x86, 0x54, 0x38, 0x53, 0xa0, 0x0f, 0x29, 0x55, 0x58, 0xee, 0xb9, 0x5f, 0x46, 0x37, 0xe5, 0x0d, 0xed, 0x74, 0xdc, 0x5e, 0x9a, 0xc9, 0x05, 0xad, 0x8f, 0x84, 0x42, 0xe3, 0x61, 0xf6, 0x77, 0xea, 0x9f, 0x82, 0x46, 0x65, 0xb4, 0xf3, 0x1d, 0x9e, 0x0f, 0x12, 0x73, 0xbf, 0x81, 0x79, 0x4e, 0x46, 0xe6, 0xa2, 0x09, 0xb3, 0x07, 0x43, 0x54, 0x83, 0xbf, 0xde, 0x7c, 0x62, 0x5d, 0x93, 0xed, 0x9d, 0x4a, 0x3a, 0xf5, 0xd6, 0xec, 0xae, 0xca, 0xfb, 0xc9, 0x6b, 0xcf, 0x79, 0xf0, 0x5c, 0x13, 0xac, 0x95, 0xee, 0x1a, 0x9a, 0xfb, 0x69, 0xe1, 0xe2, 0x97, 0x80, 0x1c, 0xef, 0x72, 0x27, 0xc2, 0x71, 0xcf, 0xa4, 0xcb, 0x0e, 0x0e, 0xe9, 0x39, 0x54, 0xd0, 0x21, 0x55, 0xf3, 0x5c, 0x89, 0x3b, 0x29, 0x41, 0x81, 0x98, 0x7d, 0x3d, 0xe3, 0xb3, 0xb0, 0x5e, 0x93, 0xaa, 0xf1, 0x67, 0x57, 0xfe, 0x50, 0x75, 0xe9, 0x52, 0x75, 0xe2, 0x4b, 0x70, 0x92, 0x6a, 0x5b, 0x8d, 0x96, 0x8c, 0xa7, 0xce, 0xa4, 0x33, 0x82, 0x0b, 0xc3, 0x96, 0x58, 0xd2, 0xd7, 0x5d, 0x3e, 0xaf, 0xd0, 0x05, 0xcd, 0xaa, 0x21, 0x85, 0x31, 0x12, 0x73, 0x32, 0x7d, 0x79, 0x9b, 0xe0, 0x41, 0x00, 0xca, 0x4a, 0x5f, 0xd5, 0x04, 0xb4, 0x1a, 0xf9, 0xd4, 0xce, 0x70, 0x47, 0x3d, 0xdc, 0xaa, 0xb2, 0xf3, 0x14, 0x31, 0xce, 0xcc, 0x47, 0xa3, 0x92, 0x71, 0xc4, 0x26, 0x5c, 0x59, 0x7a, 0xfd, 0x35, 0xf8, 0x5c, 0x59, 0x56, 0x33, 0x0a, 0x71, 0xec, 0x18, 0xad, 0xd4, 0x19, 0xcc, 0x22, 0xfe, 0x3b, 0xc4, 0x5c, 0x2a, 0x70, 0x38, 0x03, 0x68, 0x5a, 0xd5, 0x61, 0xef, 0x1f, 0xb3, 0x7f, 0xb4, 0xb4, 0x86, 0x8b, 0x3c, 0x5c, 0x18, 0x7d, 0xae, 0x6b, 0xf7, 0xfb, 0x2c, 0x50, 0x6a, 0x79, 0x63, 0xd2, 0xaa, 0xa4, 0x61, 0x9a, 0x4f, 0x01, 0xa7, 0xf2, 0x09, 0xd1, 0x80, 0xcc, 0x90, 0x39, 0x91, 0x06, 0xde, 0x9f, 0xb0, 0xec, 0x9b, 0x57, 0xfa, 0xff, 0xd9, 0x7f, 0x1f, 0xf5, 0x01, 0x27, 0x01, 0x00, 0x0d, 0xb6, 0x7e, 0x53, 0xf8, 0x88, 0x89, 0xe3, 0x73, 0xdc, 0x80, 0x6a, 0xda, 0xee, 0xb9, 0xb2, 0x66, 0x60, 0x5f, 0x10, 0xa4, 0xde, 0x7c, 0x2e, 0x26, 0x02, 0x56, 0x0e, 0x78, 0x75, 0xff, 0x4c, 0x55, 0x58, 0x28, 0xa4, 0x1b, 0xe2, 0x36, 0xb3, 0x7d, 0x4a, 0x98, 0x02, 0x78, 0xe7, 0x57, 0x40, 0x88, 0x96, 0xee, 0xcf, 0x1b, 0x5c, 0x5d, 0x83, 0x46, 0x4c, 0x79, 0xa6, 0xb7, 0xab, 0x86, 0x3f, 0xeb, 0x53, 0x07, 0x93, 0xa1, 0x55, 0xd5, 0xed, 0x8e, 0xe2, 0x6f, 0x9b, 0x52, 0x6c, 0x91, 0x39, 0xab, 0x08, 0x08, 0x32, 0xe8, 0x17, 0xc4, 0x83, 0xa1, 0x25, 0x2f, 0xc2, 0xa6, 0x11, 0xbd, 0x5f, 0x35, 0x6e, 0xc4, 0x2b, 0x70, 0x2a, 0x8f, 0x16, 0x0d, 0x6d, 0xae, 0x3d, 0x50, 0xc4, 0x8f, 0x24, 0x36, 0x7f, 0x53, 0x3f, 0xf4, 0x58, 0xda, 0xb8, 0x9f, 0x55, 0x20, 0x6c, 0x2d, 0xef, 0xcd, 0x37, 0x9c, 0x73, 0x07, 0x71, 0x71, 0xa9, 0x8b, 0xb8, 0x64, 0xb4, 0xfc, 0xf0, 0x5a, 0x39, 0x7a, 0x89, 0x93, 0xc3, 0x77, 0x00, 0x25, 0x66, 0xc6, 0xa9, 0xa9, 0xa3, 0xf5, 0xab, 0x34, 0x8c, 0xdd, 0x4c, 0x89, 0x28, 0x77, 0x6f, 0x8c, 0x19, 0xf2, 0x5a, 0xfa, 0x7c, 0x02, 0xbd, 0x58, 0x11, 0x7a, 0xf0, 0x29, 0x9c, 0x1d, 0x7d, 0x64, 0x8b, 0xb1, 0xde, 0x25, 0xd8, 0x56, 0x88, 0xa3, 0x31, 0x16, 0x28, 0x62, 0x57, 0xbd, 0x2c, 0xaa, 0xc4, 0xeb, 0x85, 0x37, 0x90, 0x67, 0xab, 0x32, 0x95, 0xb6, 0xe2, 0x60, 0xd2, 0xed, 0xbd, 0x9a, 0x0d, 0xc3, 0xe0, 0x7d, 0xbc, 0xea, 0x09, 0x62, 0x26, 0xa0, 0x52, 0x90, 0xc6, 0x81, 0xb0, 0xb1, 0xf0, 0x9f, 0xc0, 0x83, 0xb7, 0xd4, 0xc3, 0xd0, 0x0d, 0x57, 0xe6, 0xa0, 0x2c, 0x8e, 0xc8, 0xad, 0x35, 0x23, 0x36, 0x17, 0x17, 0x5a, 0x39, 0x59, 0xb3, 0xa2, 0x52, 0x7c, 0x3e, 0x6a, 0x04, 0x8b, 0xe6, 0x35, 0x93, 0x46, 0xb8, 0xf1, 0x0c, 0x1a, 0xc1, 0x84, 0x85, 0x51, 0x73, 0xa9, 0xa6, 0x87, 0x4b, 0xfa, 0x68, 0x5d, 0xb1, 0x4d, 0x1d, 0x71, 0x20, 0x44, 0xb1, 0x8d, 0x86, 0x20, 0x2f, 0x1e, 0xee, 0xd6, 0x86, 0xe8, 0x5c, 0x65, 0x8e, 0xf9, 0xf8, 0x66, 0x46, 0xdb, 0x6f, 0xe5, 0x60, 0x0e, 0x97, 0x6f, 0xff, 0xb5, 0x52, 0x6c, 0xbf, 0x90, 0xb4, 0xb0, 0xf6, 0x2a, 0x68, 0x4c, 0x39, 0x54, 0x4f, 0xaa, 0x22, 0xd1, 0x6b, 0xd9, 0x51, 0x53, 0xfc, 0x25, 0xb1, 0xa7, 0xe8, 0xeb, 0xfc, 0x2c, 0x60, 0xab, 0x82, 0x89, 0xc1, 0x5f, 0x26, 0x9f, 0xb8, 0x0b, 0xa9, 0xbd, 0xaa, 0x96, 0x2b, 0x13, 0x53, 0xd8, 0xee, 0x6a, 0xad, 0xf4, 0x5e, 0x12, 0x13, 0xe8, 0x4e, 0x1b, 0xa6, 0x62, 0x85, 0xc8, 0xf0, 0xd6, 0x79, 0x40, 0xc7, 0xcd, 0x5a, 0x87, 0x74, 0x80, 0x52, 0xad, 0x15, 0xa5, 0x0c, 0x45, 0x40, 0x89, 0x73, 0x19, 0xe9, 0x5f, 0xbc, 0x1c, 0x86, 0xd7, 0xa6, 0xa0, 0x70, 0xf3, 0x00, 0xc9, 0x8d, 0x17, 0x6c, 0x42, 0x2c, 0x5f, 0x64, 0x2e, 0x30, 0x34, 0x7a, 0x62, 0x71, 0x22, 0xe4, 0xd1, 0x5f, 0xe4, 0x37, 0x47, 0xe9, 0xc1, 0x73, 0x5b, 0x9d, 0x1c, 0x40, 0x9f, 0x10, 0x46, 0x77, 0x19, 0x80, 0x96, 0xe4, 0xf7, 0xb8, 0xbc, 0x4b, 0x7e, 0x34, 0x52, 0xa8, 0x44, 0x86, 0xb4, 0xbb, 0x9f, 0xf8, 0x12, 0xc4, 0x5d, 0x73, 0xc3, 0x8c, 0xb5, 0x9f, 0xdc, 0xa4, 0x7e, 0x4c, 0x02, 0xf1, 0x9f, 0x11, 0x7c, 0x69, 0xc7, 0x32, 0x8c, 0x17, 0x5e, 0xc7, 0x00, 0x65, 0xbb, 0x1b, 0x04, 0x9a, 0x97, 0x53, 0x3a, 0xa2, 0xc1, 0x50, 0x0d, 0x0e, 0x14, 0xd6, 0x42, 0x5b, 0xa7, 0xed, 0xcf, 0x77, 0x43, 0x87, 0xf1, 0x81, 0x1a, 0x64, 0x79, 0xd0, 0xb5, 0x33, 0x66, 0x38, 0x2f, 0xfa, 0xb9, 0x88, 0xa1, 0xb7, 0x85, 0x57, 0xdd, 0x48, 0x46, 0x01, 0x5f, 0x88, 0x73, 0xec, 0x80, 0xbb, 0x57, 0x10, 0xed, 0x2c, 0x1c, 0xb6, 0x58, 0x14, 0x29, 0x7f, 0x6d, 0xbe, 0xae, 0xa9, 0x08, 0xe9, 0x7c, 0x8e, 0xa5, 0x6e, 0x1b, 0x6d, 0x18, 0x22, 0x16, 0x6d, 0x7e, 0xfe, 0x9a, 0xdf, 0x73, 0x7d, 0x3f, 0xc4, 0x85, 0x46, 0x26, 0x8f, 0xe9, 0x0b, 0x44, 0x2c, 0x6d, 0xb1, 0xfd, 0x40, 0xae, 0xb1, 0xf5, 0xb3, 0x8b, 0xbe, 0x23, 0x6c, 0xd9, 0xa8, 0x27, 0x5b, 0x58, 0x80, 0xdd, 0xbd, 0xe6, 0xfd, 0x32, 0x9b, 0xf3, 0x1e, 0x36, 0x94, 0x35, 0x11, 0x73, 0xdd, 0x9d, 0x54, 0x7e, 0x86, 0x89, 0x1a, 0xcb, 0xff, 0x3b, 0xf0, 0xc5, 0xda, 0x8a, 0xa0, 0x1e, 0xd2, 0xd7, 0x55, 0x64, 0x0d, 0x43, 0x01, 0xd6, 0x9e, 0x1f, 0xfc, 0x75, 0x4e, 0xa5, 0xee, 0x5e, 0x9c, 0xe5, 0xee, 0x56, 0x02, 0x01, 0xeb, 0xa7, 0x7a, 0x9d, 0x4b, 0x2b, 0x41, 0x92, 0xd3, 0xa6, 0xdb, 0xe2, 0xc7, 0x58, 0x57, 0xf1, 0x52, 0xd3, 0xd4, 0xf2, 0x27, 0x0b, 0x44, 0x9f, 0x69, 0xac, 0x70, 0x2d, 0xc9, 0xb0, 0x3d, 0x7f, 0xee, 0x30, 0x2d, 0x9a, 0x19, 0x7a, 0x28, 0x59, 0x09, 0x65, 0x7d, 0x61, 0x1c, 0xe1, 0x24, 0x58, 0xb8, 0xd2, 0x46, 0x52, 0xe9, 0x1f, 0xfe, 0x8c, 0x4b, 0x05, 0x62, 0x5d, 0x2b, 0xb2, 0xbd, 0x69, 0xe9, 0x0f, 0x1f, 0x18, 0xa0, 0xdd, 0x18, 0x47, 0x09, 0x03, 0xc0, 0x3d, 0x9d, 0x26, 0xfa, 0xe0, 0xfa, 0x7b, 0xfa, 0x28, 0x88, 0xd9, 0x05, 0xd5, 0x5c, 0x13, 0x78, 0x5d, 0x5d, 0x84, 0x0c, 0x29, 0xa5, 0xeb, 0x58, 0x00, 0x2a, 0x7a, 0x98, 0xc4, 0x9d, 0x29, 0xac, 0x5c, 0x92, 0x50, 0x64, 0xf1, 0xe2, 0x75, 0xfa, 0x5d, 0x4d, 0x62, 0xe0, 0xe0, 0x64, 0x7b, 0xbc, 0x15, 0xa7, 0x4f, 0xb2, 0x25, 0xea, 0x6d, 0xe1, 0x3b, 0xfd, 0x79, 0x30, 0x38, 0x8b, 0x7f, 0x4a, 0xa7, 0x43, 0x86, 0xe7, 0xf3, 0x36, 0x69, 0x4e, 0xd7, 0x80, 0xe2, 0x17, 0x17, 0x2b, 0xe8, 0x36, 0x6e, 0x50, 0x3b, 0x35, 0xc7, 0x7f, 0x3d, 0xc1, 0xb0, 0x61, 0x03, 0x68, 0x0b, 0x9c, 0xac, 0xa1, 0x06, 0xf7, 0xf1, 0x0d, 0x4e, 0xbf, 0xfe, 0xfc, 0x80, 0x69, 0x80, 0x33, 0xe1, 0x78, 0x00, 0xed, 0x4e, 0xa2, 0x6f, 0x1f, 0x76, 0x2e, 0x02, 0x00, 0x46, 0xa0, 0x40, 0xc9, 0xa5, 0x98, 0x59, 0xb9, 0x62, 0xf8, 0xb9, 0x5d, 0x6a, 0x45, 0xdd, 0x0e, 0x3f, 0x50, 0x65, 0xbb, 0xa5, 0x15, 0x6b, 0xe9, 0x9f, 0xe3, 0x14, 0xf7, 0x99, 0xbd, 0x64, 0xa7, 0xe7, 0x01, 0x57, 0xda, 0x6e, 0x47, 0x2d, 0x9b, 0xa1, 0x8c, 0x05, 0x5f, 0xb0, 0x90, 0xad, 0x8b, 0xfb, 0x7c, 0xb9, 0x37, 0xcd, 0xc8, 0xd2, 0x32, 0x47, 0x5c, 0x51, 0x46, 0x9a, 0xf5, 0x0d, 0xbd, 0x7a, 0xcb, 0x70, 0x23, 0xcf, 0x71, 0xd1, 0x4e, 0xad, 0xfc, 0xfd, 0x9c, 0x86, 0x67, 0x17, 0x7c, 0x9e, 0x36, 0xa3, 0x30, 0xc0, 0x5a, 0xdd, 0xd1, 0x30, 0x55, 0x4f, 0x93, 0xe0, 0x9e, 0xa2, 0x4a, 0xe6, 0x47, 0xb5, 0x2d, 0x2e, 0xdd, 0xec, 0xda, 0x6c, 0x90, 0xcb, 0x9b, 0x55, 0x93, 0xc3, 0xe8, 0x0f, 0xc6, 0x4b, 0x2d, 0xe6, 0x93, 0x33, 0xcd, 0x40, 0x15, 0x35, 0x66, 0xd3, 0x80, 0xce, 0x57, 0x15, 0xbd, 0x4c, 0x7f, 0xf4, 0x54, 0x27, 0x48, 0xc8, 0x8f, 0x94, 0xe4, 0x86, 0xdd, 0x58, 0xd7, 0x36, 0x74, 0xda, 0xb6, 0xa7, 0x3a, 0x7d, 0x2e, 0x61, 0xe6, 0x2c, 0x47, 0xdb, 0x62, 0x37, 0xea, 0xee, 0x74, 0x5d, 0xa2, 0x8a, 0x9e, 0x2a, 0x9f, 0xa8, 0x43, 0x83, 0x00, 0x7f, 0x0a, 0x7f, 0x52, 0xfb, 0x88, 0x78, 0x53, 0x6b, 0x19, 0x62, 0xfc, 0x7a, 0x0e, 0x5c, 0xbf, 0x60, 0x0e, 0x85, 0x0e, 0x59, 0xb6, 0x11, 0x1c, 0x56, 0x83, 0x9c, 0xe7, 0xf3, 0xf2, 0xbd, 0x76, 0xaa, 0xe5, 0xdf, 0x5f, 0x46, 0x49, 0x4c, 0x8d, 0x9a, 0xf6, 0x8b, 0x40, 0x72, 0xd6, 0xec, 0x55, 0xca, 0x4a, 0x61, 0xc8, 0x3e, 0xc9, 0x8f, 0x77, 0xc2, 0xcb, 0x25, 0x29, 0x93, 0xe5, 0x6d, 0xce, 0x6e, 0x35, 0x21, 0x09, 0xff, 0x00, 0x7f, 0xeb, 0x9c, 0x9a, 0x9f, 0x02, 0x33, 0x86, 0x05, 0x92, 0x81, 0xdf, 0x73, 0x22, 0x85, 0xf6, 0x00, 0x3a, 0x35, 0x3d, 0x6e, 0x6c, 0x6f, 0x64, 0xb9, 0x91, 0x32, 0xc1, 0xec, 0x55, 0x0e, 0xf5, 0x38, 0xf6, 0xd9, 0xcd, 0x47, 0x48, 0xa4, 0x66, 0xce, 0xfd, 0xed, 0x95, 0x62, 0x23, 0x17, 0x85, 0x8c, 0xee, 0x17, 0xa2, 0x1f, 0xb8, 0x6f, 0xb6, 0xc9, 0x46, 0x60, 0x52, 0xe9, 0x4d, 0x5b, 0x70, 0xa0, 0x34, 0xba, 0x56, 0x2b, 0x1c, 0xad, 0xbe, 0x70, 0x1e, 0x77, 0x33, 0xd6, 0xd3, 0xda, 0xbe, 0x5a, 0x1a, 0xcf, 0xc2, 0xe0, 0x15, 0x7b, 0x25, 0xc6, 0x75, 0x5f, 0xb0, 0xbf, 0xf8, 0xcf, 0xb9, 0xdf, 0x2f, 0xa5, 0xff, 0xf2, 0x85, 0x36, 0xd5, 0x12, 0x7d, 0x85, 0x83, 0x79, 0x3b, 0xb7, 0xe9, 0x93, 0x46, 0xc7, 0x65, 0x57, 0x8c, 0x7b, 0xf7, 0xd8, 0xa7, 0x97, 0xa3, 0x17, 0x5e, 0x50, 0x17, 0x1c, 0x6f, 0x03, 0x8e, 0x45, 0x8c, 0x27, 0xf4, 0xdd, 0xa3, 0x81, 0x4b, 0xf0, 0x62, 0x96, 0x4d, 0x5e, 0xfb, 0x66, 0x53, 0x2f, 0x24, 0x57, 0x75, 0x26, 0x62, 0x70, 0xf3, 0x99, 0x88, 0xc7, 0xd4, 0x80, 0x7a, 0x3d, 0xcc, 0xcb, 0x37, 0x68, 0x63, 0xf9, 0x17, 0xd1, 0x54, 0xe6, 0x51, 0x60, 0x33, 0xe4, 0xbf, 0x14, 0x53, 0x0e, 0xe6, 0xf7, 0xe7, 0xd9, 0x31, 0x52, 0x67, 0xec, 0x7d, 0x1d, 0x36, 0x32, 0xda, 0xb9, 0x81, 0x2d, 0x90, 0xe2, 0x6a, 0x8d, 0x61, 0xdf, 0x66, 0x01, 0x0e, 0xfb, 0xe3, 0x4d, 0x1d, 0x39, 0x2f, 0x9d, 0xd8, 0x44, 0x95, 0x18, 0x99, 0xa5, 0xc9, 0xb9, 0x45, 0x38, 0x86, 0x5a, 0x17, 0xe1, 0x75, 0x12, 0x9f, 0x7b, 0x51, 0xc1, 0x0a, 0x11, 0x49, 0xe9, 0xa3, 0x51, 0xa5, 0xc0, 0x9a, 0x3d, 0xad, 0x83, 0x04, 0x24, 0xc6, 0x0c, 0x24, 0xd1, 0xdf, 0xa7, 0xe9, 0x02, 0x0b, 0x22, 0xb7, 0x1c, 0x6f, 0x23, 0x6b, 0x1c, 0x5f, 0xbe, 0x99, 0xd1, 0xc4, 0x47, 0x17, 0x49, 0xc1, 0x65, 0xc0, 0x89, 0x96, 0x68, 0x72, 0x80, 0xc4, 0xdd, 0x59, 0x3e, 0x72, 0x5f, 0x70, 0x62, 0x0f, 0xb0, 0x44, 0xd1, 0x39, 0x08, 0xfc, 0xae, 0xdd, 0xac, 0x96, 0x86, 0xa0, 0xc3, 0x73, 0xca, 0x7e, 0x65, 0x16, 0x83, 0xb1, 0xf6, 0x29, 0x41, 0xd5, 0xb2, 0xc0, 0x54, 0x49, 0x88, 0xe2, 0x3f, 0xd8, 0x2c, 0x46, 0x6a, 0x99, 0x68, 0x5a, 0x17, 0x13, 0xb3, 0x89, 0x97, 0xa5, 0x04, 0xbe, 0xbe, 0x26, 0xe8, 0x24, 0x94, 0xc8, 0xd3, 0x31, 0x4d, 0x42, 0xb3, 0xe2, 0x7c, 0x2e, 0xcb, 0x48, 0x83, 0xaf, 0xbf, 0x43, 0x4e, 0x58, 0xeb, 0x8e, 0x41, 0x49, 0xf9, 0xfb, 0x6e, 0x9b, 0xb3, 0x00, 0x0c, 0xff, 0x15, 0x73, 0x24, 0xa1, 0xa7, 0x92, 0x8e, 0x53, 0x0a, 0x46, 0x1c, 0xe7, 0xd0, 0xa9, 0x15, 0xdc, 0x91, 0xc5, 0xe5, 0x3e, 0x3a, 0x9f, 0x12, 0xc7, 0xa9, 0x74, 0x72, 0x4a, 0x77, 0x42, 0x9c, 0x52, 0x15, 0x8a, 0x9c, 0x06, 0x1b, 0x54, 0xeb, 0x4f, 0xdc, 0x75, 0x9e, 0x3d, 0x3e, 0x0d, 0xdd, 0xa7, 0xc9, 0x53, 0x97, 0x12, 0xfd, 0x95, 0x74, 0xd4, 0xe9, 0x7a, 0x0b, 0x7a, 0xf9, 0x8b, 0x56, 0x66, 0x10, 0xf1, 0x62, 0xbd, 0xd6, 0x80, 0x4b, 0x80, 0x54, 0xf5, 0x68, 0xf8, 0xbe, 0x7c, 0xc3, 0x58, 0x8f, 0x76, 0xcc, 0x9e, 0xdb, 0x78, 0x4e, 0xba, 0xe1, 0x97, 0xa1, 0xf2, 0xe1, 0xe3, 0x22, 0x85, 0x2d, 0x31, 0xe0, 0x8e, 0x81, 0x1e, 0x98, 0x2c, 0x97, 0x50, 0xe4, 0xe0, 0xf7, 0xff, 0xaf, 0x36, 0x0d, 0xb4, 0xec, 0xa8, 0x7d, 0x51, 0x87, 0xbf, 0xbb, 0x52, 0x9c, 0x7b, 0xd6, 0x52, 0xe8, 0xf5, 0x94, 0xd1, 0x7d, 0x43, 0xc4, 0x34, 0xb9, 0x9c, 0xd0, 0x0d, 0x78, 0xbc, 0x92, 0x9d, 0x89, 0x8a, 0x68, 0x98, 0x5f, 0xf9, 0x8b, 0x27, 0x09, 0x2c, 0x9c, 0x33, 0x65, 0xdd, 0x80, 0xe1, 0x90, 0xff, 0x6e, 0x59, 0xa0, 0xa2, 0x46, 0xcc, 0x96, 0x18, 0x25, 0xb5, 0x8e, 0x56, 0x36, 0x5f, 0x39, 0x9c, 0xcb, 0xa7, 0x8d, 0x59, 0xac, 0x03, 0xbb, 0x49, 0xae, 0xc3, 0x62, 0xe0, 0x88, 0x97, 0x02, 0xeb, 0xe3, 0x52, 0xb3, 0x75, 0xb0, 0xed, 0x17, 0xe7, 0xbe, 0xcf, 0x8d, 0x74, 0x8c, 0x4b, 0xa7, 0xb4, 0x5c, 0x6b, 0xdf, 0x8f, 0x88, 0xec, 0x85, 0x5d, 0x19, 0x89, 0xfc, 0x4b, 0x96, 0x7d, 0x26, 0x01, 0x1a, 0x43, 0x1d, 0x82, 0xa9, 0xa0, 0x24, 0x53, 0xc4, 0xe3, 0xdd, 0xdf, 0x3b, 0x6c, 0xbc, 0x1a, 0x43, 0x6b, 0xbb, 0x65, 0xc8, 0xea, 0x4f, 0xb2, 0x05, 0x0e, 0x9b, 0xe8, 0x51, 0x99, 0xe4, 0x89, 0x3c, 0xb4, 0x46, 0x92, 0xda, 0xec, 0xa5, 0xa2, 0x5f, 0x7a, 0xe6, 0x5f, 0xec, 0xc7, 0x5e, 0x15, 0xa9, 0x2f, 0x8a, 0xa1, 0x14, 0x05, 0x01, 0x8e, 0x99, 0xd8, 0xa8, 0x7d, 0x62, 0xf5, 0x25, 0xca, 0x70, 0x2d, 0x96, 0x6c, 0xeb, 0xd9, 0x82, 0x1d, 0xb6, 0x1b, 0x0f, 0xbc, 0x47, 0x66, 0x76, 0xef, 0xb6, 0x40, 0xb5, 0x0c, 0x13, 0x46, 0x84, 0x3a, 0xfd, 0x71, 0x89, 0xd3, 0x70, 0x99, 0xcf, 0x0d, 0xdf, 0x37, 0x75, 0xda, 0x83, 0x6f, 0xa3, 0x0c, 0xf2, 0x4e, 0xc2, 0xbd, 0xf3, 0x50, 0xed, 0xee, 0x91, 0x25, 0xa2, 0x6e, 0x6e, 0xb4, 0xbe, 0xfe, 0x5a, 0x61, 0xa8, 0xb2, 0x24, 0x8b, 0xcc, 0x9a, 0xb0, 0x59, 0x4b, 0xa2, 0x4a, 0xb7, 0xf0, 0xb7, 0x3a, 0x9b, 0x67, 0x2b, 0x99, 0x8d, 0xa9, 0x5b, 0x63, 0x66, 0xbb, 0x8f, 0xcd, 0x58, 0x98, 0x21, 0xd8, 0x2e, 0x6c, 0xe2, 0x26, 0xd5, 0x02, 0xb9, 0x0c, 0x1c, 0x80, 0x8d, 0xea, 0xb8, 0x52, 0x65, 0xb7, 0x8b, 0x64, 0xce, 0xe0, 0x26, 0x94, 0x7e, 0x53, 0x8c, 0x67, 0x36, 0xd6, 0x38, 0xfa, 0xed, 0x9e, 0x62, 0x3c, 0x2a, 0x1d, 0x7f, 0x5b, 0xb2, 0x1b, 0x07, 0x7c, 0x63, 0x08, 0x7a, 0xaf, 0x60, 0x91, 0xa5, 0x22, 0x6e, 0x71, 0x22, 0x95, 0x9e, 0x8a, 0x1e, 0x0d, 0x2d, 0x34, 0x5e, 0xcd, 0xa8, 0xd5, 0x84, 0x82, 0x53, 0xb2, 0x8f, 0xbe, 0xcc, 0x04, 0xa2, 0xa7, 0xec, 0x4f, 0x06, 0xf1, 0xee, 0xef, 0x71, 0x09, 0xd3, 0xf3, 0x89, 0x93, 0x04, 0x2f, 0xa4, 0x17, 0x3a, 0x8d, 0xd2, 0xf7, 0x9b, 0xa4, 0x1d, 0xa5, 0x26, 0x8c, 0x0f, 0x12, 0x50, 0xf0, 0x75, 0x6a, 0xef, 0x64, 0x63, 0xfe, 0x58, 0xf9, 0x78, 0x82, 0xc4, 0x0f, 0x63, 0x78, 0xf9, 0x6b, 0xa6, 0xec, 0x26, 0x8a, 0x9a, 0x62, 0x0e, 0x34, 0xb4, 0x0d, 0x68, 0x54, 0x06, 0x41, 0x86, 0x06, 0x09, 0x2b, 0x36, 0xf2, 0x99, 0xc0, 0xe6, 0xd9, 0x41, 0xf3, 0x0b, 0x6d, 0xb9, 0x2b, 0xc3, 0x66, 0xad, 0xf4, 0xb8, 0xd2, 0xc0, 0xf4, 0x48, 0xac, 0xd1, 0x22, 0xe4, 0xb1, 0x7d, 0x32, 0xb6, 0x6f, 0xe5, 0x53, 0x87, 0x9f, 0xb1, 0x1d, 0xdf, 0xb4, 0x55, 0xc5, 0x6e, 0xb4, 0x92, 0x94, 0xaa, 0x47, 0x40, 0x97, 0xba, 0x0e, 0x4c, 0x97, 0x93, 0x35, 0xfd, 0x4b, 0x61, 0x4c, 0x7b, 0xcd, 0x28, 0x52, 0x91, 0x4b, 0xab, 0x13, 0xb2, 0xff, 0x8d, 0xb5, 0x3a, 0x61, 0xb6, 0x8d, 0xf7, 0x9b, 0xf8, 0x37, 0xe8, 0x3d, 0xf2, 0xe5, 0x44, 0x32, 0x35, 0xf7, 0xbe, 0xf3, 0xa6, 0xcc, 0x08, 0xfa, 0x24, 0xd8, 0x96, 0x7a, 0x6a, 0xf7, 0xa4, 0x4d, 0x36, 0x01, 0x7a, 0x2d, 0xab, 0x9f, 0xef, 0x28, 0xf3, 0x5d, 0x2c, 0x4e, 0x2a, 0x00, 0xb2, 0xad, 0x77, 0x19, 0x9f, 0x7f, 0x7c, 0xda, 0x2c, 0xa1, 0xf1, 0x29, 0x7b, 0x47, 0x8b, 0xf3, 0x90, 0xef, 0x23, 0xc3, 0x9d, 0x93, 0x14, 0x93, 0x82, 0x23, 0xe5, 0xe2, 0x94, 0x32, 0x28, 0x06, 0x9d, 0xf0, 0xa1, 0xc4, 0x25, 0x58, 0xab, 0x1e, 0xf0, 0xaa, 0xd8, 0x6c, 0xc8, 0x1c, 0xd8, 0xae, 0x7d, 0xcc, 0x9c, 0x21, 0x29, 0xfa, 0xba, 0x10, 0xb8, 0x74, 0x14, 0xed, 0xa8, 0x51, 0xb5, 0xa0, 0x0e, 0xe2, 0xfb, 0x1f, 0xda, 0xe6, 0xfb, 0x3f, 0x5b, 0xfd, 0x21, 0xca, 0x06, 0x60, 0x17, 0xd1, 0x73, 0xce, 0xe8, 0x43, 0xa8, 0xca, 0x66, 0xbf, 0x9a, 0x03, 0xc9, 0xa7, 0xf1, 0x14, 0x98, 0x76, 0x0c, 0x6d, 0xcd, 0x53, 0x45, 0x91, 0x34, 0xe6, 0x76, 0x83, 0x14, 0x6a, 0xbc, 0x7a, 0x11, 0x03, 0x7a, 0xdc, 0x51, 0x52, 0xa1, 0x6a, 0xde, 0x47, 0x2f, 0xb8, 0x4b, 0x37, 0xf6, 0xe1, 0x9b, 0x2f, 0x9f, 0x78, 0x5e, 0x87, 0xee, 0xc2, 0x1d, 0xba, 0x48, 0x22, 0xf8, 0x75, 0x72, 0xd4, 0x8e, 0xed, 0x9b, 0xde, 0x1d, 0x76, 0x9d, 0x44, 0xea, 0x52, 0x80, 0x7c, 0xe4, 0xc6, 0x3f, 0x21, 0x84, 0x73, 0xcf, 0xec, 0xf7, 0xe4, 0x5e, 0xdf, 0x7f, 0x64, 0xd9, 0xc3, 0x17, 0x12, 0xb0, 0xd5, 0x56, 0x37, 0xdd, 0xbd, 0x95, 0xd6, 0x23, 0xbf, 0x54, 0x85, 0x93, 0x35, 0xda, 0x7c, 0x55, 0x3d, 0x1c, 0xec, 0xa5, 0xaf, 0xe0, 0x92, 0x1c, 0x52, 0x22, 0x8b, 0x31, 0x4f, 0xb7, 0x6a, 0xff, 0xe5, 0x30, 0x88, 0x49, 0x5f, 0x01, 0x9b, 0xbb, 0x43, 0xe3, 0x8a, 0x72, 0xcd, 0x76, 0x80, 0xbf, 0x9b, 0x2b, 0x40, 0x28, 0xaa, 0x61, 0xb8, 0xb0, 0x81, 0xce, 0xd8, 0x59, 0xac, 0x21, 0xa4, 0xe6, 0x6c, 0xe5, 0x88, 0xe5, 0xad, 0xa9, 0xec, 0xed, 0x38, 0x5e, 0x09, 0x25, 0x2a, 0x00, 0xfb, 0x05, 0xa5, 0x79, 0x17, 0x61, 0xc5, 0xc2, 0x7e, 0xa3, 0xd6, 0x4b, 0xf2, 0x58, 0xc4, 0x9d, 0xe9, 0xee, 0xd2, 0x3e, 0xe0, 0xbb, 0x8f, 0xd4, 0xf2, 0x42, 0x07, 0x8e, 0xa9, 0xb2, 0x36, 0xc0, 0x14, 0xb0, 0xc2, 0xcd, 0x1a, 0x56, 0xe9, 0x4a, 0x0d, 0x7c, 0xb7, 0x60, 0x83, 0x36, 0x7d, 0x72, 0x61, 0x9d, 0x80, 0x00, 0x38, 0xd3, 0xee, 0xcc, 0xd5, 0x41, 0x16, 0x3b, 0x13, 0x23, 0xd7, 0xfd, 0xf4, 0x47, 0x59, 0xf0, 0xf0, 0x11, 0xfc, 0x42, 0x8d, 0xc3, 0x8e, 0xd7, 0x30, 0xfb, 0xc1, 0xea, 0x33, 0x7e, 0xdc, 0xf6, 0x37, 0x33, 0xb0, 0xd7, 0xbc, 0x73, 0xce, 0x2c, 0xef, 0x80, 0xf7, 0x01, 0xc2, 0x52, 0xd4, 0xab, 0x42, 0x9a, 0xe7, 0xf2, 0x26, 0x01, 0xc2, 0x76, 0xa3, 0xb0, 0x77, 0x4b, 0x88, 0x16, 0x4f, 0xe7, 0x86, 0xe5, 0xbf, 0x3e, 0xcf, 0x5e, 0x97, 0x2b, 0xe4, 0xcf, 0x7d, 0x12, 0xa7, 0x5a, 0x9a, 0xc4, 0xb8, 0xf7, 0x93, 0xa2, 0xfe, 0xbc, 0xbb, 0x06, 0x84, 0x5d, 0x87, 0xde, 0x87, 0xef, 0x42, 0x9a, 0xcd, 0xf1, 0x01, 0x49, 0x38, 0x8c, 0xda, 0xfe, 0x9a, 0x1a, 0x51, 0x79, 0xcb, 0xe6, 0x13, 0x03, 0xf9, 0x32, 0xe7, 0x9a, 0x40, 0x7f, 0xe1, 0x4e, 0x7a, 0x08, 0xd8, 0xeb, 0x59, 0x90, 0x1b, 0xd8, 0xb3, 0x5d, 0x60, 0x3f, 0x1c, 0x85, 0xfd, 0x6e, 0xba, 0x68, 0x5b, 0x7e, 0x55, 0x7e, 0xa7, 0x32, 0xae, 0x53, 0xca, 0x21, 0x12, 0xcf, 0x9c, 0x18, 0x2e, 0xbb, 0x54, 0xba, 0x25, 0x81, 0x44, 0x69, 0xe0, 0x33, 0xc3, 0x6a, 0xa6, 0xcf, 0x6a, 0x43, 0xec, 0xc2, 0x83, 0x68, 0x6e, 0xaa, 0xbe, 0x17, 0x7e, 0x60, 0x26, 0x81, 0x9c, 0x36, 0x54, 0x2a, 0x48, 0x7d, 0xe2, 0x92, 0x14, 0x4b, 0x23, 0x15, 0xfd, 0x7b, 0x11, 0x10, 0xfb, 0xf4, 0x87, 0x45, 0xd7, 0x2f, 0xb1, 0x81, 0x3d, 0xf3, 0xc0, 0x7c, 0x12, 0x63, 0xe2, 0x00, 0x07, 0x3b, 0x71, 0x4d, 0x6f, 0x57, 0x6a, 0xbd, 0x4e, 0x75, 0x22, 0xa4, 0xb2, 0x3b, 0x34, 0x7a, 0x46, 0x7c, 0xbe, 0x3c, 0x24, 0xb7, 0xcd, 0x0f, 0xeb, 0xe0, 0x15, 0x27, 0x11, 0x63, 0xe6, 0xe7, 0x7b, 0x67, 0x5b, 0x49, 0x4b, 0x4f, 0xd5, 0x81, 0xfa, 0x87, 0xa7, 0xdd, 0xa6, 0x7d, 0x13, 0xf0, 0xad, 0xed, 0x76, 0xef, 0x7a, 0x62, 0xbf, 0x5b, 0x9f, 0xfa, 0x25, 0xe0, 0x24, 0x69, 0x1a, 0x7e, 0x1f, 0x40, 0x7a, 0xe6, 0x85, 0x70, 0x09, 0x27, 0x40, 0x09, 0x1c, 0x89, 0x82, 0x48, 0x96, 0xb9, 0x58, 0xd1, 0x16, 0x27, 0x82, 0x39, 0x6f, 0xad, 0x82, 0xc7, 0x59, 0x71, 0xf3, 0x7c, 0x66, 0x0c, 0x1c, 0x50, 0x37, 0xec, 0xc5, 0xbf, 0xef, 0xf6, 0x49, 0x84, 0xe8, 0x70, 0xed, 0xa5, 0xa5, 0x1f, 0x70, 0xaf, 0x08, 0xac, 0xe4, 0x43, 0xc5, 0x4d, 0xbc, 0xd1, 0x17, 0xa1, 0x25, 0xa4, 0xb2, 0xdb, 0x9a, 0x1f, 0xf8, 0x22, 0xb2, 0x46, 0x6f, 0x38, 0x3d, 0x80, 0x73, 0x5a, 0x90, 0x9a, 0x28, 0x68, 0x1d, 0x10, 0xb3, 0x46, 0x47, 0x88, 0xaa, 0x82, 0x74, 0xa0, 0xc8, 0x37, 0x63, 0xe9, 0xe6, 0x31, 0xc0, 0x33, 0x26, 0x51, 0xf5, 0x0c, 0x72, 0x33, 0x44, 0x83, 0x25, 0x0f, 0x12, 0x32, 0x07, 0xdd, 0x86, 0x7b, 0x7f, 0xbd, 0x53, 0x11, 0x04, 0x95, 0xd2, 0xba, 0xd5, 0xfc, 0x54, 0x54, 0xea, 0x57, 0xb6, 0x16, 0x2a, 0x41, 0x36, 0x19, 0xde, 0x31, 0x84, 0x17, 0x66, 0x56, 0x1d, 0x72, 0x2a, 0xc6, 0xd4, 0x78, 0xd4, 0xd8, 0xb1, 0xe5, 0xbd, 0xce, 0xff, 0xa9, 0xa4, 0xb8, 0xa1, 0xec, 0xa6, 0x95, 0xa5, 0x50, 0x6a, 0xba, 0x1c, 0x76, 0x9d, 0x78, 0x28, 0xc3, 0x9e, 0xf9, 0x56, 0x64, 0x7a, 0x6b, 0x2e, 0x8f, 0x1a, 0x60, 0x09, 0x0c, 0xbb, 0x75, 0x23, 0xf5, 0x9f, 0x32, 0xf1, 0xba, 0x02, 0x32, 0xb5, 0x67, 0x50, 0x84, 0x4f, 0x2a, 0x95, 0x50, 0x56, 0x10, 0x35, 0xbe, 0x67, 0x0f, 0xdd, 0x13, 0xbd, 0x49, 0xb9, 0x1e, 0x02, 0x8f, 0xe8, 0xd2, 0x65, 0x24, 0x2d, 0x34, 0xed, 0xc4, 0xe7, 0x78, 0x0d, 0xe5, 0x43, 0x66, 0x78, 0x3d, 0xb0, 0x03, 0x36, 0x84, 0x93, 0x6e, 0xf8, 0x7b, 0x3c, 0x08, 0xa9, 0x2d, 0x19, 0xd7, 0x45, 0x75, 0x2a, 0x2d, 0xee, 0xc0, 0xb5, 0x84, 0x3d, 0x14, 0x3b, 0xad, 0xd6, 0x52, 0xaa, 0x2a, 0x3f, 0xb8, 0xd4, 0xd8, 0xf2, 0xa9, 0x20, 0xd1, 0xb0, 0xb1, 0x80, 0x90, 0x19, 0xc4, 0xa3, 0x56, 0x7a, 0xc6, 0x6b, 0xcd, 0xe6, 0x51, 0xa1, 0xeb, 0x88, 0xb2, 0xe8, 0x1a, 0x37, 0x34, 0xef, 0x96, 0x4b, 0xa2, 0xeb, 0x16, 0xaf, 0x07, 0x45, 0xae, 0x38, 0xb8, 0x8f, 0xf4, 0x35, 0x94, 0xbd, 0x62, 0x48, 0x8b, 0x92, 0xfb, 0x74, 0x5d, 0x58, 0x31, 0x76, 0xa4, 0xd4, 0x07, 0x59, 0x15, 0x79, 0x73, 0x45, 0x03, 0xdc, 0x06, 0x98, 0x24, 0x68, 0xce, 0x37, 0x98, 0x53, 0x7c, 0x27, 0x27, 0xd0, 0xc2, 0x57, 0xcb, 0x87, 0xff, 0xc0, 0x6e, 0x42, 0x1e, 0xb0, 0xf4, 0xe9, 0xbb, 0x63, 0x7c, 0xb0, 0x88, 0xd4, 0xe3, 0x8f, 0xf0, 0xd2, 0x8a, 0xf3, 0xfa, 0x56, 0x5a, 0xb3, 0x6f, 0x14, 0x05, 0x45, 0x3f, 0x50, 0x8e, 0x32, 0x21, 0xf3, 0x0b, 0xc7, 0x7a, 0xde, 0xaa, 0x0d, 0x80, 0x7e, 0xf2, 0xfc, 0x9f, 0xa1, 0x4b, 0xec, 0x1c, 0x88, 0xc1, 0x4c, 0xf8, 0x3d, 0x05, 0x96, 0x17, 0x27, 0xb4, 0x82, 0xa1, 0xdb, 0xdc, 0x7b, 0xa9, 0x35, 0xbd, 0x4f, 0x0c, 0xa8, 0xcc, 0x2a, 0x9c, 0xd2, 0xfe, 0xc5, 0x7e, 0x53, 0x42, 0xdb, 0xd1, 0xe0, 0x4f, 0xdd, 0x90, 0x93, 0xa1, 0xe6, 0xba, 0x85, 0xbe, 0xf1, 0xb0, 0x9f, 0xbe, 0x4a, 0xde, 0xad, 0x0a, 0x42, 0x9d, 0xb4, 0x64, 0x27, 0x58, 0x86, 0x28, 0x73, 0xee, 0x93, 0xd1, 0x44, 0x58, 0x02, 0xbe, 0x0c, 0x8c, 0x01, 0x37, 0x8a, 0xa1, 0x59, 0xab, 0xf9, 0x33, 0x45, 0x3b, 0x87, 0x09, 0x84, 0x7d, 0x08, 0xf5, 0xad, 0x79, 0xec, 0xfc, 0xc3, 0xf8, 0x6e, 0xb7, 0x09, 0xff, 0x0f, 0xf9, 0x17, 0x96, 0x43, 0xb3, 0x2e, 0xcd, 0x6a, 0x14, 0xc9, 0x01, 0x01, 0xf4, 0x74, 0x5c, 0x1a, 0x72, 0xe1, 0x9b, 0x09, 0xdc, 0x39, 0x14, 0x61, 0xd0, 0xb0, 0xf7, 0x1f, 0xa1, 0x5c, 0xd4, 0x24, 0xfc, 0x47, 0x5d, 0xe9, 0xcc, 0xc3, 0x6e, 0x6e, 0x5a, 0xfd, 0x4a, 0x73, 0xb9, 0xd5, 0x28, 0xeb, 0x61, 0xed, 0xee, 0xae, 0x1a, 0x00, 0x3c, 0x6e, 0x1c, 0x76, 0xac, 0xec, 0x74, 0x35, 0x58, 0x6b, 0xa9, 0xb9, 0x9d, 0x65, 0xa0, 0x67, 0x1f, 0x7e, 0xbd, 0x1e, 0x0d, 0xb6, 0x4b, 0x10, 0xa7, 0xe2, 0x1e, 0xd0, 0xfd, 0x5d, 0x76, 0xab, 0xf9, 0xfb, 0x27, 0x3c, 0x9f, 0x3e, 0xf7, 0x3b, 0x94, 0xcd, 0x48, 0x96, 0xdd, 0x21, 0xf7, 0xc3, 0xea, 0x82, 0x83, 0x54, 0xd3, 0x32, 0x72, 0xcc, 0xe1, 0xe8, 0xf0, 0xb1, 0x50, 0x7f, 0xba, 0xe2, 0x53, 0xf0, 0x3a, 0x2b, 0x59, 0x7e, 0xf3, 0x17, 0x8f, 0x30, 0x20, 0x05, 0xa6, 0x84, 0x98, 0x7e, 0xd6, 0x62, 0xf5, 0xc6, 0x23, 0x4f, 0xf5, 0xb1, 0xdf, 0xe3, 0x21, 0xb8, 0x70, 0x7d, 0xac, 0x4c, 0x53, 0x35, 0x9d, 0x6b, 0x61, 0x12, 0x31, 0x70, 0x51, 0x7e, 0x7a, 0x2f, 0x7f, 0xf6, 0x4d, 0x41, 0xeb, 0x06, 0x5b, 0x9d, 0x85, 0x75, 0x9e, 0x68, 0xa8, 0xbd, 0xf7, 0x0f, 0xe4, 0xbd, 0x15, 0x92, 0x00, 0xb2, 0x98, 0x23, 0x3f, 0x64, 0x76, 0xef, 0xe3, 0x9d, 0x9e, 0x3c, 0xf0, 0xdf, 0xdc, 0xb4, 0x32, 0x56, 0xfd, 0x00, 0x81, 0x0c, 0x33, 0x99, 0x44, 0x5c, 0xbb, 0xdb, 0x34, 0xa9, 0xbc, 0x5c, 0x63, 0x50, 0x73, 0x7b, 0x7c, 0xda, 0x8d, 0x3c, 0x4c, 0x77, 0xd4, 0x53, 0x81, 0xa8, 0x0e, 0x7e, 0xb2, 0x3b, 0x22, 0x18, 0xa0, 0x7c, 0x7d, 0xec, 0xbc, 0xaa, 0xb4, 0x47, 0xe9, 0xa8, 0x6b, 0x51, 0x82, 0xf5, 0x75, 0x9c, 0x9f, 0xde, 0x3d, 0xfe, 0x94, 0xf2, 0x64, 0x9c, 0xbb, 0xb7, 0xab, 0x48, 0x74, 0x9b, 0x14, 0x0d, 0x69, 0x2d, 0x44, 0x07, 0x17, 0x8d, 0x2c, 0x78, 0x8a, 0x21, 0xe8, 0x19, 0x67, 0x8a, 0xe7, 0xae, 0x30, 0xd7, 0x4d, 0xdd, 0xc4, 0xf8, 0x95, 0x40, 0x25, 0x75, 0x7b, 0xb9, 0x7e, 0x60, 0x19, 0x06, 0x65, 0x88, 0x50, 0x95, 0x5d, 0xef, 0x69, 0x99, 0x9f, 0x7e, 0xfc, 0x5d, 0x1a, 0xf8, 0x11, 0xd8, 0xb8, 0x2d, 0x86, 0x83, 0xe3, 0x70, 0xb1, 0x67, 0x48, 0x4a, 0x45, 0x7a, 0xda, 0x70, 0x7a, 0x2b, 0x1a, 0xf3, 0x68, 0x3c, 0x96, 0xb7, 0xb4, 0xd0, 0xb0, 0x26, 0x6f, 0xc5, 0xa1, 0x25, 0x3b, 0x43, 0xbe, 0x47, 0xb0, 0x95, 0xf9, 0x41, 0xfe, 0x38, 0xaa, 0x9f, 0xd3, 0x32, 0x90, 0xb5, 0x7f, 0xa5, 0x12, 0xd7, 0x56, 0xa4, 0xcb, 0xcd, 0x55, 0x45, 0x46, 0x81, 0x09, 0xf8, 0x06, 0xfb, 0xad, 0x17, 0xca, 0x8f, 0x93, 0xbe, 0x0f, 0x55, 0xc5, 0xdc, 0xd5, 0xda, 0xeb, 0x8a, 0xa6, 0x15, 0x6f, 0x9c, 0xd5, 0x9d, 0xe0, 0x76, 0x04, 0x19, 0x94, 0x22, 0xe8, 0xf7, 0x92, 0x9f, 0x51, 0x61, 0xae, 0x7b, 0x64, 0x6c, 0xf6, 0xa4, 0x2b, 0x93, 0x4d, 0x7b, 0x51, 0x65, 0x56, 0x2a, 0x26, 0x7a, 0x94, 0x37, 0xe9, 0xab, 0xcf, 0x5a, 0x47, 0x82, 0xb9, 0x8c, 0x1f, 0xf0, 0xd1, 0x61, 0x88, 0x3e, 0x88, 0x97, 0x15, 0x46, 0xa2, 0xef, 0x58, 0xe3, 0xe0, 0x3b, 0xa4, 0xa6, 0xdc, 0xb9, 0x17, 0xcb, 0x34, 0x9f, 0xd8, 0x6b, 0xea, 0xf7, 0x9e, 0xf3, 0x0b, 0xad, 0x72, 0xd4, 0x8f, 0xe7, 0xb5, 0x7c, 0x81, 0x94, 0x64, 0x86, 0x60, 0x48, 0x9b, 0x2d, 0xc4, 0x47, 0x58, 0x07, 0x44, 0xe0, 0x82, 0xf0, 0x98, 0xfc, 0x2a, 0x43, 0xfb, 0xf6, 0x10, 0x51, 0xd3, 0xad, 0x69, 0x0b, 0x94, 0xd8, 0xdf, 0x02, 0xe2, 0x9a, 0xda, 0x92, 0xf6, 0x57, 0xfe, 0x59, 0x42, 0xc5, 0xf5, 0xee, 0x58, 0x46, 0x6e, 0xd0, 0x08, 0x75, 0x65, 0x9d, 0xc8, 0xfe, 0xa5, 0x85, 0x5a, 0xb4, 0x8c, 0xfd, 0xa8, 0xdd, 0x0f, 0xb8, 0xf3, 0xd0, 0xfd, 0xd3, 0x2c, 0xc3, 0x88, 0x50, 0xa2, 0xde, 0x01, 0xc5, 0xde, 0x94, 0xe3, 0x55, 0xcb, 0x32, 0x13, 0xe0, 0x1b, 0xb8, 0x66, 0x77, 0xe5, 0xe9, 0x64, 0x13, 0x93, 0x9e, 0x4c, 0x86, 0xfb, 0x5f, 0x58, 0xb1, 0xcc, 0x34, 0x41, 0xf8, 0x2c, 0xb9, 0x06, 0xf3, 0x9f, 0x71, 0xea, 0x66, 0x2b, 0x5c, 0xbb, 0x74, 0xba, 0xcc, 0x5a, 0x0f, 0xbf, 0x74, 0x78, 0xb3, 0x1c, 0xc2, 0x9e, 0x54, 0x44, 0x6f, 0x70, 0x95, 0x9c, 0x54, 0x32, 0x3a, 0x28, 0x7f, 0x8b, 0xe0, 0x63, 0x86, 0x89, 0xeb, 0x6e, 0x1b, 0xe6, 0xc1, 0x6d, 0xe1, 0x8a, 0x36, 0x2f, 0x7e, 0x50, 0x46, 0x0d, 0xf2, 0x0d, 0x0a, 0x14, 0x27, 0xcf, 0xe5, 0x66, 0xc8, 0x62, 0xff, 0xdd, 0x57, 0x19, 0xf4, 0xf2, 0x7a, 0xca, 0xcd, 0xdd, 0x96, 0x1b, 0x2f, 0xfe, 0x9f, 0xfc, 0xd2, 0x7c, 0x2f, 0x75, 0x35, 0x2c, 0xd5, 0xa2, 0x90, 0xb4, 0xaf, 0xfc, 0x0b, 0xf0, 0x3b, 0xd9, 0x2d, 0x94, 0x6a, 0x37, 0x97, 0x13, 0xf6, 0xb5, 0xf2, 0xc0, 0xf6, 0xe2, 0x26, 0x33, 0xb0, 0xba, 0xcc, 0xef, 0xae, 0x6e, 0xe7, 0x42, 0x14, 0x64, 0xce, 0x6c, 0x30, 0x7f, 0x6d, 0x03, 0x53, 0xa0, 0xad, 0x95, 0xdf, 0x6d, 0x31, 0x90, 0xa2, 0x51, 0x43, 0x5f, 0x62, 0xc3, 0x0e, 0xd6, 0xb9, 0xcc, 0x0d, 0xd0, 0x24, 0xc3, 0xc3, 0x16, 0x56, 0x5c, 0xad, 0x83, 0xd2, 0xe1, 0x75, 0x66, 0xb8, 0xbe, 0x68, 0x28, 0xdf, 0x43, 0x2a, 0x2f, 0x25, 0xa6, 0xa8, 0x01, 0x03, 0x47, 0x4f, 0xad, 0x65, 0x38, 0x7c, 0x67, 0xb8, 0xfd, 0x33, 0x72, 0x44, 0x90, 0x13, 0x43, 0xbc, 0xa9, 0x89, 0xe3, 0x13, 0x3b, 0x45, 0x95, 0x92, 0x42, 0xea, 0xb9, 0x28, 0xbc, 0x0a, 0xf0, 0x01, 0xf5, 0x51, 0x81, 0x59, 0x08, 0x00, 0xfb, 0x93, 0xa3, 0x9d, 0x1c, 0x85, 0x0a, 0xe9, 0xf2, 0x17, 0x5f, 0x13, 0x40, 0x0c, 0x20, 0x2b, 0x23, 0x1f, 0xf1, 0xd9, 0xf5, 0x52, 0x9c, 0x4f, 0x72, 0x83, 0x56, 0x7c, 0x19, 0x40, 0x44, 0x83, 0xd5, 0xdc, 0x3d, 0x6b, 0xdd, 0xc2, 0xd2, 0x18, 0xd9, 0x0a, 0x8b, 0x7a, 0x46, 0x4a, 0x74, 0x04, 0x1b, 0xaf, 0xd8, 0x60, 0xad, 0x4c, 0x4d, 0x61, 0xd0, 0xb1, 0xf0, 0x39, 0x3f, 0xc0, 0xf2, 0xec, 0x3e, 0xbc, 0x54, 0x04, 0x7d, 0xa3, 0xee, 0x87, 0x40, 0xbe, 0xb6, 0x26, 0xbd, 0x76, 0x3f, 0xb7, 0xc5, 0x69, 0x80, 0xe5, 0xa7, 0xbd, 0xd7, 0x26, 0x52, 0xb4, 0x4e, 0xee, 0xb9, 0x81, 0x1c, 0x23, 0x7c, 0x5b, 0x6f, 0xd0, 0xc4, 0xcf, 0x68, 0x1d, 0x6e, 0x5a, 0x67, 0x7f, 0x6d, 0x37, 0x8a, 0x2c, 0x69, 0x76, 0x70, 0xd2, 0xac, 0x4e, 0x43, 0x88, 0x3f, 0xb4, 0xf5, 0x05, 0x50, 0x2c, 0xc9, 0x0f, 0xd7, 0xe0, 0x16, 0x37, 0x7a, 0xef, 0x48, 0xc4, 0xad, 0x07, 0x27, 0xed, 0x1d, 0x36, 0x5c, 0x4b, 0x4f, 0xfd, 0x30, 0x8d, 0x84, 0xa7, 0x98, 0x6e, 0xe1, 0xd8, 0x6f, 0xe4, 0xcc, 0x69, 0x02, 0x9a, 0x99, 0x73, 0xd1, 0xa1, 0x66, 0xaa, 0x94, 0x63, 0x43, 0xed, 0x7d, 0xd8, 0x97, 0x1b, 0xbd, 0xfc, 0xbf, 0x27, 0x49, 0x80, 0xf7, 0x6f, 0xde, 0xbf, 0x7e, 0x49, 0x42, 0xf5, 0xf5, 0xdf, 0xce, 0xab, 0x08, 0x3e, 0x29, 0x76, 0x51, 0xa9, 0x56, 0xe1, 0x79, 0x33, 0xf1, 0xa8, 0xa1, 0x8d, 0xb5, 0x27, 0x00, 0x1c, 0x42, 0x11, 0xcd, 0x4e, 0x1d, 0x65, 0x5f, 0x2f, 0xf9, 0x9e, 0x93, 0x37, 0x35, 0x2b, 0x6e, 0x66, 0xa5, 0x1e, 0x03, 0x94, 0x95, 0x28, 0x97, 0x02, 0x0b, 0xc5, 0x04, 0x34, 0x4d, 0xb4, 0x5b, 0x03, 0xa3, 0xaa, 0xcd, 0xee, 0x5e, 0x47, 0xcc, 0xb1, 0x19, 0x49, 0x6d, 0x19, 0x3f, 0x00, 0x11, 0x16, 0xce, 0x02, 0x44, 0x12, 0x5a, 0x1f, 0xe5, 0x81, 0x54, 0x97, 0x88, 0xb9, 0x8c, 0x8b, 0x18, 0x04, 0xf5, 0xb2, 0xc1, 0xf4, 0xa8, 0x4d, 0x0c, 0xf7, 0x2c, 0x5d, 0x4c, 0x2b, 0xf5, 0x13, 0x3a, 0x74, 0x2a, 0x88, 0xdc, 0xcb, 0xac, 0xae, 0xab, 0xd9, 0x53, 0x87, 0xf4, 0xc4, 0x7b, 0x94, 0x7f, 0x49, 0xbf, 0x91, 0x6f, 0x0b, 0x04, 0x5f, 0x69, 0x2a, 0xba, 0x42, 0xf8, 0x18, 0x5e, 0x4c, 0x30, 0xa8, 0x43, 0x19, 0x92, 0x68, 0x93, 0xbd, 0x30, 0x31, 0x90, 0xfb, 0x12, 0xfc, 0x20, 0xb8, 0xd7, 0xf7, 0x89, 0xae, 0x9f, 0xd9, 0x79, 0x65, 0x29, 0x72, 0x49, 0x5f, 0x39, 0x86, 0x82, 0x93, 0x3d, 0xdb, 0xa1, 0x1e, 0x2f, 0x91, 0x17, 0x34, 0xbd, 0xb2, 0x94, 0x5c, 0xa8, 0x0a, 0x85, 0xdd, 0x6a, 0x39, 0xdc, 0x73, 0x1b, 0x06, 0x0f, 0x47, 0x95, 0xf6, 0x63, 0x1e, 0xd7, 0x1e, 0x6a, 0xd1, 0xa7, 0x35, 0xca, 0xfd, 0x7c, 0xed, 0x41, 0xfb, 0x9a, 0x83, 0xe6, 0x13, 0x7f, 0x95, 0xb2, 0xec, 0x7e, 0x35, 0x3e, 0x47, 0xaa, 0x3b, 0xce, 0xed, 0xf5, 0xdf, 0x8f, 0xe6, 0x99, 0x87, 0x1d, 0xec, 0xb7, 0xdd, 0x48, 0x20, 0x3e, 0x25, 0x18, 0xfb, 0x0f, 0xce, 0x0f, 0x86, 0x5f, 0x46, 0xad, 0xce, 0x5c, 0x13, 0x3a, 0x92, 0x13, 0x20, 0xbf, 0x40, 0x91, 0x54, 0x56, 0x20, 0x48, 0x69, 0xa3, 0xce, 0xb5, 0xfc, 0xa3, 0xed, 0x40, 0xe0, 0xa4, 0x1a, 0x64, 0xb8, 0x95, 0x1f, 0x0f, 0xc5, 0x80, 0x69, 0x4c, 0xfc, 0x55, 0xbd, 0x1f, 0x5c, 0xe9, 0x26, 0xb0, 0x7e, 0x3e, 0x32, 0xac, 0x6e, 0x05, 0x5d, 0xe9, 0xb9, 0x61, 0xce, 0x49, 0xc7, 0xee, 0x41, 0xe0, 0x6b, 0x02, 0x45, 0x59, 0xb9, 0x33, 0xa7, 0x95, 0x18, 0x19, 0x2e, 0x96, 0x98, 0x55, 0x88, 0x9c, 0x85, 0xd1, 0x85, 0x8d, 0x3c, 0x4a, 0x83, 0x9a, 0x3d, 0x0c, 0x2a, 0x20, 0x82, 0xfd, 0x59, 0xcc, 0x0f, 0xdd, 0x5f, 0x03, 0xcb, 0xcc, 0x6f, 0x81, 0x8e, 0x0d, 0x4e, 0x40, 0x7b, 0x09, 0x4f, 0x9b, 0x90, 0x97, 0x81, 0xb3, 0x7b, 0x7a, 0x27, 0x12, 0xaf, 0x2b, 0x68, 0x8e, 0xb8, 0xda, 0x48, 0x70, 0xcb, 0xaf, 0xd7, 0xd6, 0xa2, 0x55, 0xa8, 0x56, 0x87, 0xb9, 0x85, 0xe4, 0xae, 0x0f, 0x61, 0xf6, 0xc7, 0x17, 0x8e, 0xe6, 0xd4, 0x9e, 0x31, 0x97, 0x38, 0x47, 0xf2, 0x5b, 0x11, 0x8b, 0xf8, 0x14, 0xc8, 0xff, 0x14, 0x9a, 0xe7, 0xd5, 0x3c, 0x5d, 0x2a, 0xa6, 0x3c, 0x4c, 0xd8, 0x6f, 0xa8, 0xf5, 0x53, 0xd9, 0x15, 0xed, 0xee, 0xbd, 0x88, 0x72, 0x00, 0xe7, 0x2f, 0x4f, 0x37, 0x1a, 0x4f, 0x00, 0x2e, 0x55, 0x7e, 0x17, 0x41, 0x55, 0x12, 0xde, 0xa0, 0x5b, 0xd9, 0x3e, 0xa2, 0x2f, 0x0b, 0xdf, 0x5c, 0x65, 0x7c, 0x91, 0x73, 0xdf, 0x16, 0xeb, 0x2e, 0x93, 0x87, 0x31, 0xcf, 0x8e, 0x37, 0x7b, 0x24, 0x39, 0x7d, 0x14, 0x59, 0xdc, 0x12, 0x21, 0x10, 0x60, 0xc6, 0x83, 0xb3, 0x59, 0x71, 0xfe, 0x09, 0x44, 0x2d, 0x9a, 0x08, 0x0c, 0xc2, 0x49, 0xeb, 0xd4, 0x62, 0xcb, 0x84, 0xf0, 0x97, 0xcf, 0xd2, 0x34, 0x79, 0x5b, 0xd6, 0x72, 0x24, 0x6d, 0xa3, 0x3e, 0x69, 0xe3, 0xb5, 0xf4, 0xc4, 0x98, 0x83, 0xfd, 0x8e, 0xd0, 0x57, 0x4d, 0x74, 0xd6, 0x5e, 0x30, 0x28, 0xe3, 0xfb, 0x47, 0x56, 0x42, 0x61, 0xcd, 0xda, 0xb2, 0x61, 0x1f, 0x30, 0x0c, 0x80, 0x7c, 0x2c, 0x25, 0x4d, 0x09, 0xeb, 0xf6, 0xf2, 0x18, 0x09, 0xfa, 0x08, 0xa9, 0x14, 0xd8, 0xb0, 0x31, 0x41, 0x42, 0xdf, 0x9b, 0x5e, 0x1d, 0xf9, 0x8d, 0x08, 0xe2, 0xa2, 0xec, 0x1e, 0x44, 0xd1, 0xa2, 0x76, 0x13, 0x25, 0x9f, 0xce, 0x60, 0x7d, 0x1d, 0x05, 0xe2, 0xc3, 0x29, 0x8b, 0x98, 0x08, 0x5f, 0x16, 0xb0, 0xd6, 0xf5, 0x96, 0xa8, 0xc1, 0xfb, 0x6c, 0xb3, 0x40, 0xe0, 0xd6, 0x5e, 0xbb, 0x39, 0xae, 0x73, 0xe5, 0xbe, 0x55, 0x1d, 0x4c, 0x95, 0xea, 0x4e, 0x2f, 0xd4, 0xbf, 0x5e, 0x8f, 0x41, 0x0d, 0xf5, 0x88, 0x5c, 0xe6, 0x2a, 0xe2, 0x9f, 0x6c, 0xec, 0xe4, 0x04, 0x41, 0xa1, 0x68, 0xc8, 0x3e, 0x0e, 0x35, 0x6e, 0x68, 0x77, 0x88, 0x08, 0x1f, 0x07, 0xf4, 0xb2, 0x99, 0x72, 0x6c, 0x5f, 0x8f, 0xd8, 0x9f, 0xd8, 0x36, 0xed, 0x84, 0x01, 0x71, 0x57, 0x35, 0x5e, 0x45, 0x57, 0x00, 0xd7, 0x8d, 0xac, 0xbb, 0xb8, 0xef, 0xb4, 0x59, 0xfc, 0x0e, 0xd5, 0xbb, 0xcb, 0x01, 0x1b, 0xc8, 0x41, 0x05, 0x22, 0xc0, 0x71, 0x6e, 0x37, 0xcd, 0xaa, 0xe4, 0xba, 0xdc, 0xf9, 0xcb, 0xc6, 0xaa, 0xee, 0x03, 0x15, 0x22, 0xa3, 0xd2, 0x1d, 0xe6, 0xfb, 0x1e, 0x7f, 0x2c, 0x28, 0xe0, 0xa2, 0xcb, 0x70, 0xd5, 0x9b, 0x95, 0x30, 0x77, 0x51, 0xe8, 0x21, 0x2b, 0xde, 0x80, 0xda, 0xbc, 0x38, 0x8f, 0x96, 0x08, 0x10, 0x10, 0x38, 0xf9, 0xfa, 0x58, 0x8c, 0xb7, 0xcf, 0xee, 0xd0, 0x1c, 0x4f, 0x9c, 0x73, 0x69, 0x0b, 0xc6, 0x1c, 0x37, 0x83, 0xfb, 0xee, 0xb0, 0x8b, 0xca, 0x0b, 0xfe, 0xf3, 0xd7, 0x56, 0x04, 0x66, 0x2e, 0x7e, 0x4c, 0x93, 0xd6, 0x38, 0x41, 0x8b, 0xaa, 0xcb, 0x9f, 0x6a, 0x64, 0xd2, 0x27, 0x3a, 0xfb, 0x3d, 0x97, 0x14, 0x2f, 0x9a, 0xd9, 0x88, 0x61, 0x93, 0x7b, 0x40, 0xa9, 0xb7, 0x5f, 0xdf, 0x23, 0x7d, 0xb4, 0x2f, 0x89, 0x85, 0x24, 0x7c, 0x07, 0x22, 0x4f, 0x3b, 0x4a, 0x16, 0x79, 0xf0, 0xdb, 0x9c, 0x7f, 0x4e, 0xab, 0xac, 0x10, 0x9f, 0xef, 0x7a, 0x19, 0x66, 0x2d, 0x40, 0x81, 0x43, 0x97, 0x3d, 0x17, 0x18, 0x99, 0xfd, 0xc9, 0x6a, 0xae, 0xdc, 0x16, 0x0a, 0x77, 0xc6, 0xc6, 0xf4, 0x0e, 0x40, 0xd8, 0x77, 0x98, 0xac, 0xbc, 0x96, 0x19, 0xc8, 0xc2, 0xaf, 0x8d, 0x79, 0xd3, 0x5a, 0x34, 0xc7, 0x5f, 0x94, 0x2d, 0x28, 0x96, 0x1d, 0x46, 0x01, 0xdb, 0x1e, 0x13, 0x6a, 0x75, 0x0f, 0x3d, 0x32, 0x88, 0xd8, 0x1d, 0x22, 0x44, 0x36, 0x89, 0x86, 0x5d, 0x61, 0xee, 0xea, 0xbb, 0xec, 0x9f, 0x22, 0x72, 0xec, 0x6d, 0x8d, 0xf4, 0x5c, 0x78, 0x9a, 0x86, 0xc0, 0x45, 0x8a, 0xf0, 0x09, 0x10, 0x78, 0x79, 0xb9, 0x63, 0x97, 0x12, 0x47, 0xe7, 0xbc, 0xd2, 0xc5, 0x7b, 0x1c, 0xa2, 0xc0, 0x83, 0x56, 0x3a, 0x68, 0x82, 0xb4, 0x4c, 0xf0, 0xec, 0xad, 0xfe, 0x38, 0x35, 0xaf, 0x9e, 0xaa, 0x2e, 0x1c, 0x91, 0x62, 0x91, 0x93, 0x8d, 0x91, 0xda, 0x70, 0x09, 0x23, 0x59, 0x96, 0xf1, 0x9f, 0x86, 0x6c, 0x9d, 0x4f, 0x94, 0x25, 0x04, 0xa2, 0x49, 0x45, 0x2d, 0xce, 0x0c, 0x60, 0xe7, 0xb9, 0x40, 0x25, 0xba, 0x1a, 0xd0, 0x9c, 0x1d, 0xdb, 0x0b, 0xac, 0xe9, 0xc3, 0xb3, 0xe0, 0x0e, 0x51, 0x50, 0x6b, 0x85, 0xeb, 0xca, 0x69, 0x86, 0x38, 0x37, 0x67, 0xfa, 0xca, 0xf2, 0x26, 0x33, 0x00, 0xed, 0x9c, 0xdb, 0x2a, 0x48, 0x3c, 0x2a, 0xef, 0x22, 0x77, 0x5c, 0xec, 0xaf, 0x83, 0x63, 0x9e, 0x8a, 0x5b, 0xd9, 0x82, 0x4d, 0x07, 0x38, 0x7a, 0x60, 0x1d, 0x4d, 0x73, 0x0e, 0x88, 0xea, 0x45, 0xde, 0x88, 0xdc, 0xda, 0x20, 0xfa, 0x1c, 0x93, 0xc6, 0xda, 0x4a, 0xe7, 0x75, 0x06, 0x56, 0x4e, 0xdc, 0x44, 0x81, 0x5d, 0x45, 0x87, 0x84, 0x32, 0x69, 0x6e, 0x0e, 0x12, 0x89, 0x0e, 0x74, 0x51, 0xba, 0xf1, 0xa4, 0x72, 0x81, 0x5e, 0x5c, 0x90, 0x9f, 0xdb, 0x99, 0xfd, 0x2e, 0xf1, 0x51, 0x28, 0xed, 0x2f, 0x64, 0xc4, 0xd9, 0x72, 0xd1, 0x26, 0xfd, 0x63, 0x25, 0xef, 0x8a, 0x40, 0x3a, 0xec, 0x2a, 0xe0, 0x1d, 0x3a, 0x92, 0xf1, 0x50, 0xae, 0x56, 0x85, 0x32, 0x73, 0x02, 0xcd, 0xbb, 0xf5, 0x66, 0x23, 0x6c, 0xfe, 0x31, 0x4e, 0x86, 0x1f, 0xc2, 0x02, 0x7b, 0x52, 0x3a, 0xa7, 0xa2, 0xdd, 0xd6, 0x5b, 0x2e, 0x7a, 0x7c, 0x3a, 0x61, 0xb4, 0x93, 0xdd, 0xfd, 0x94, 0x18, 0x20, 0xfc, 0x7d, 0xee, 0x29, 0x80, 0x55, 0x76, 0xa6, 0x0d, 0xe5, 0x60, 0x55, 0xf6, 0x83, 0xc1, 0xca, 0x15, 0xee, 0x65, 0x6d, 0xbf, 0x79, 0x66, 0xc2, 0xf7, 0x6c, 0xfd, 0xed, 0xe2, 0xa7, 0x99, 0x75, 0x7c, 0x88, 0x2e, 0x48, 0x88, 0x0f, 0xd0, 0xff, 0xcd, 0x40, 0x80, 0x64, 0x7f, 0xc9, 0x46, 0x31, 0xfc, 0xe5, 0x80, 0x1b, 0xb9, 0x80, 0x79, 0x0f, 0x7b, 0x9c, 0x3d, 0xbc, 0xca, 0xf3, 0xac, 0x51, 0xa2, 0xde, 0xce, 0x88, 0x6d, 0x75, 0x66, 0xe3, 0x2e, 0xf8, 0xca, 0x35, 0xff, 0x6e, 0xf1, 0x65, 0xbd, 0x8b, 0xce, 0x6f, 0x02, 0xd7, 0xdc, 0xab, 0x53, 0x0d, 0xfb, 0x52, 0x9b, 0xc1, 0x7a, 0x3e, 0xd8, 0x46, 0x75, 0xf1, 0x15, 0xcf, 0x61, 0xd9, 0x98, 0xd4, 0xe5, 0xd3, 0x5c, 0xb8, 0xeb, 0xed, 0xc2, 0xa8, 0xf8, 0x70, 0x83, 0xc6, 0xb8, 0x1e, 0xe9, 0x87, 0xde, 0xb8, 0x3f, 0x59, 0x2b, 0xc3, 0x86, 0x8a, 0xcb, 0x8c, 0x69, 0x65, 0xe8, 0x6a, 0x73, 0x9e, 0x7a, 0x43, 0x80, 0xf0, 0x5c, 0x51, 0x71, 0x04, 0xa5, 0x26, 0x24, 0x95, 0x35, 0xee, 0xa4, 0xd2, 0x8e, 0xf5, 0x9c, 0x03, 0xe6, 0x69, 0x12, 0x70, 0x7a, 0x60, 0x51, 0x7e, 0x24, 0x1c, 0x27, 0x1c, 0x30, 0x8e, 0x51, 0x5d, 0x6c, 0x1a, 0x34, 0x66, 0x7e, 0x9a, 0xce, 0x8b, 0x7a, 0xa5, 0xeb, 0xb5, 0xb4, 0x11, 0x9c, 0x07, 0xd3, 0xb6, 0xe5, 0xc1, 0x27, 0x75, 0xb6, 0x64, 0x3d, 0x7a, 0x1c, 0x17, 0xb0, 0xbd, 0xb9, 0x49, 0x41, 0xcf, 0x72, 0x98, 0x2a, 0xd3, 0x67, 0xf1, 0xb0, 0xca, 0x28, 0xf9 ],
-const [ 0x38, 0x32, 0x42, 0xc7, 0x09, 0xfe, 0x5f, 0x2c, 0xe7, 0x82, 0xbf, 0x8c, 0x83, 0xb6, 0x45, 0xd1, 0x71, 0xf2, 0xbd, 0x23, 0x8a, 0xbc, 0x65, 0x5d, 0x8f, 0xdf, 0xac, 0xbd, 0x0f, 0xbd, 0x39, 0xdf, 0x8a, 0xe5, 0x2f, 0xec, 0xd6, 0xe8, 0xb0, 0x0f, 0xc2, 0x69, 0xa0, 0x28, 0xfa, 0x74, 0xab, 0xc5, 0x2a, 0x11, 0x89, 0x4e, 0x66, 0x18, 0x80, 0x7f, 0xca, 0x46, 0x2b, 0x1b, 0x5d, 0x91, 0x7b, 0xdf, 0x3b, 0xb9, 0xfb, 0xb5, 0xf4, 0x20, 0x58, 0x2b, 0x2f, 0xdb, 0x20, 0x23, 0x93, 0x09, 0xca, 0xcc, 0xe7, 0x63, 0xf7, 0xd1, 0x77, 0x15, 0xf7, 0xd0, 0xba, 0xcd, 0x8f, 0x0d, 0x33, 0x11, 0xf9, 0x68, 0x95, 0xd5, 0x2d, 0x8c, 0x2a, 0x4d, 0x5f, 0x6a, 0x75, 0x00, 0xc9, 0xe6, 0x17, 0x1e, 0xaa, 0xcf, 0xef, 0x13, 0x8f, 0x15, 0x85, 0x5c, 0xd1, 0x36, 0xa9, 0x99, 0x5f, 0xfa, 0x57, 0xe4, 0xbd, 0x60, 0xde, 0x62, 0x4d, 0xd8, 0x41, 0x17, 0xce, 0xb2, 0xde, 0xff, 0x22, 0xd7, 0x4d, 0x5a, 0x54, 0xb7, 0x8b, 0x47, 0xd9, 0x82, 0x58, 0x94, 0x16, 0x9b, 0xdd, 0xd5, 0x23, 0x4a, 0x92, 0xb3, 0xcf, 0xb1, 0x5f, 0x87, 0xe4, 0x01, 0x02, 0x28, 0xac, 0xed, 0xb0, 0x00, 0xb3, 0x5f, 0xff, 0x66, 0xcf, 0x6a, 0x03, 0x28, 0x5e, 0x81, 0xb7, 0x66, 0xcf, 0xe6, 0x9f, 0xa7, 0x64, 0x64, 0xac, 0x26, 0x35, 0x41, 0x60, 0x6d, 0x79, 0x6f, 0x32, 0x25, 0x01, 0x02, 0x34, 0x2d, 0x05, 0xe7, 0xf3, 0xe9, 0x23, 0xd2, 0x9f, 0xdd, 0xa5, 0x78, 0x6c, 0x7a, 0x03, 0xff, 0x37, 0x37, 0xa8, 0xb2, 0x6d, 0xe4, 0xf9, 0xfa, 0x29, 0x3b, 0x94, 0x89, 0x9c, 0xb9, 0xd5, 0xd9, 0xb2, 0xac, 0x9f, 0xd5, 0xf2, 0x8c, 0x59, 0xd6, 0xa7, 0x8e, 0x36, 0xd0, 0x3d, 0x77, 0xba, 0xce, 0xed, 0xae, 0x7a, 0x9b, 0x9d, 0x96, 0x23, 0xc2, 0x01, 0x1a, 0xbd, 0xb9, 0x07, 0x8a, 0x31, 0x5a, 0x72, 0xa5, 0x09, 0x92, 0xc4, 0xf7, 0x78, 0x5d, 0x62, 0x65, 0x9a, 0xf2, 0xf3, 0x06, 0xfc, 0x3a, 0x09, 0x34, 0x5f, 0x87, 0x03, 0xe3, 0xb9, 0x83, 0x32, 0x32, 0x7d, 0x67, 0x3a, 0x40, 0x1c, 0x6d, 0xbb, 0x41, 0xcc, 0x87, 0x31, 0xd1, 0x88, 0x51, 0x19, 0x87, 0x58, 0x44, 0x56, 0xce, 0xd2, 0x2d, 0xd2, 0xf0, 0xe1, 0xde, 0x68, 0x74, 0xc5, 0x24, 0x02, 0xaa, 0x5b, 0xf9, 0xfe, 0x84, 0x9f, 0xfa, 0xd7, 0xa7, 0x6f, 0x1b, 0x01, 0xc2, 0x92, 0x99, 0x14, 0x1f, 0xf8, 0x30, 0x2d, 0x78, 0x43, 0x8f, 0x91, 0x0b, 0x87, 0x09, 0x94, 0xf0, 0x4e, 0x8d, 0xba, 0xab, 0xe0, 0xd8, 0x1b, 0xfe, 0xc1, 0xe9, 0x0c, 0x01, 0x7a, 0xb5, 0xfb, 0x74, 0x9c, 0x1d, 0x9b, 0x53, 0x03, 0x1d, 0x42, 0xab, 0x58, 0x46, 0x8f, 0xad, 0xd9, 0x6e, 0x4f, 0x00, 0x5d, 0xa6, 0xa1, 0x5c, 0x92, 0x6c, 0x59, 0x55, 0x8a, 0x22, 0xa3, 0x74, 0x76, 0xbf, 0xe9, 0x8c, 0xb1, 0xc5, 0xf6, 0x4b, 0x00, 0x73, 0x5b, 0x10, 0x18, 0x3b, 0x11, 0xfc, 0x60, 0x76, 0x61, 0x4c, 0xf9, 0x57, 0x01, 0xe6, 0xfc, 0x1d, 0x80, 0x31, 0x02, 0x8d, 0xe3, 0x2a, 0xea, 0xa0, 0x91, 0xb5, 0xd6, 0x79, 0x6c, 0x30, 0x77, 0x99, 0x41, 0x4e, 0x8b, 0x56, 0x62, 0x23, 0xa3, 0x89, 0x91, 0x7b, 0x2a, 0x88, 0x20, 0x70, 0xa3, 0x54, 0x57, 0x3c, 0x32, 0x13, 0x16, 0x4b, 0x5e, 0xc0, 0xbb, 0x95, 0x15, 0x21, 0x46, 0x2a, 0xf0, 0xf9, 0xbc, 0x0e, 0xb9, 0x80, 0xc9, 0x48, 0x2b, 0x10, 0xa8, 0x36, 0xf8, 0x21, 0x48, 0x23, 0x11, 0x77, 0xa7, 0x1b, 0x21, 0x9a, 0x82, 0xfe, 0x5a, 0x87, 0x31, 0xd4, 0x75, 0xa5, 0xcd, 0x60, 0xf4, 0xfa, 0x93, 0xf8, 0xab, 0x9f, 0x8d, 0x94, 0x7e, 0x71, 0x6f, 0x24, 0x6c, 0x0a, 0xbf, 0x27, 0xcd, 0xf0, 0x38, 0x79, 0xd7, 0x0b, 0x71, 0x6c, 0x67, 0x5d, 0xba, 0x1b, 0xff, 0xed, 0x46, 0xfb, 0x0a, 0x04, 0x90, 0xb3, 0x68, 0x9c, 0xf7, 0x2e, 0x26, 0x16, 0xab, 0xee, 0x8d, 0x2b, 0xcd, 0xa3, 0x5f, 0x25, 0xd2, 0xfc, 0x5d, 0x4f, 0x29, 0xbd, 0x0c, 0xaa, 0x1d, 0x12, 0xb9, 0xe1, 0xfc, 0x22, 0xbb, 0x7f, 0x79, 0xe8, 0xf8, 0x60, 0x4f, 0x3e, 0xab, 0x65, 0x27, 0x3b, 0x64, 0x6c, 0xbc, 0xbf, 0x50, 0x80, 0x3d, 0x4c, 0xba, 0x4c, 0xf3, 0x18, 0xd2, 0xd6, 0x23, 0x60, 0xad, 0x6a, 0x36, 0xfe, 0x8e, 0xd3, 0x17, 0x3e, 0x64, 0xd2, 0xdd, 0xee, 0x93, 0xc8, 0xaa, 0xb4, 0xf7, 0xb6, 0xd2, 0xa5, 0x26, 0x67, 0x40, 0x12, 0xf6, 0xec, 0x16, 0xa5, 0x40, 0x49, 0x94, 0xad, 0xe3, 0x6e, 0x3b, 0xb7, 0x0b, 0x69, 0x32, 0x5e, 0xb3, 0xd9, 0xe8, 0x64, 0x68, 0xa6, 0xfb, 0x01, 0x50, 0xef, 0x59, 0x7a, 0x6c, 0x44, 0xa5, 0xf6, 0x1a, 0x16, 0xdc, 0x8e, 0xde, 0x6b, 0x38, 0xa3, 0x61, 0xd6, 0x54, 0x74, 0xba, 0xa7, 0x92, 0xef, 0xed, 0x5f, 0xba, 0xc8, 0xb1, 0x67, 0xe3, 0xc9, 0x77, 0x01, 0x97, 0x69, 0xa7, 0x7e, 0x32, 0x9f, 0x2d, 0xb2, 0x8b, 0xf8, 0x34, 0xa5, 0xd6, 0xe8, 0x31, 0x8b, 0xc9, 0x5d, 0x24, 0xf6, 0xfe, 0x9a, 0x1b, 0x4b, 0x99, 0x43, 0xf7, 0x72, 0x2a, 0xb4, 0x72, 0xd2, 0xd5, 0x97, 0x61, 0x7d, 0xb0, 0xb6, 0x37, 0xa7, 0x6c, 0x0d, 0xcb, 0x5d, 0x38, 0x24, 0x5b, 0x74, 0xe2, 0x9c, 0xd0, 0xbf, 0x3f, 0x07, 0x43, 0x85, 0xce, 0xfd, 0xc1, 0x31, 0x98, 0x6c, 0x4b, 0x4c, 0x5a, 0x2f, 0x21, 0xa9, 0xe6, 0xe2, 0x41, 0xdf, 0xc7, 0xf5, 0x2a, 0xfc, 0x24, 0x00, 0xe5, 0x78, 0xe7, 0x56, 0x46, 0x68, 0x1d, 0xdd, 0x70, 0xf4, 0xa0, 0x1d, 0x97, 0x0b, 0xf4, 0x96, 0x0a, 0x56, 0x70, 0x57, 0x70, 0x6a, 0x9e, 0xcc, 0x51, 0x41, 0xe4, 0xd8, 0xd9, 0xeb, 0x63, 0x23, 0xd9, 0x81, 0x1f, 0xb6, 0x0f, 0x5b, 0x60, 0xc5, 0xa7, 0x82, 0x59, 0xcb, 0x01, 0x68, 0x08, 0xdd, 0xb5, 0xd7, 0x5d, 0x37, 0xd5, 0x28, 0x9e, 0x1c, 0x72, 0xb5, 0x0a, 0xdd, 0x61, 0x91, 0xbd, 0x37, 0x3e, 0x76, 0xd3, 0xe1, 0xb2, 0xfe, 0xd0, 0x66, 0xf2, 0x16, 0x40, 0x31, 0x88, 0xb0, 0x9a, 0xe6, 0x56, 0xb9, 0x6a, 0xf9, 0xd8, 0x4b, 0xaf, 0x79, 0xa9, 0x23, 0x82, 0x2c, 0x49, 0x55, 0xf9, 0xe1, 0x1d, 0x3e, 0x4b, 0x02, 0xb7, 0xbb, 0x35, 0x69, 0x58, 0x98, 0x9c, 0x74, 0xb3, 0x4c, 0x73, 0x5c, 0xf4, 0xe3, 0xdf, 0xc2, 0x01, 0x3b, 0x99, 0x8b, 0x00, 0x73, 0x95, 0xee, 0x19, 0xa1, 0xe1, 0xcb, 0x7d, 0xc3, 0xcf, 0x3f, 0xa7, 0xf9, 0x56, 0x75, 0xe2, 0xf1, 0xb6, 0xbf, 0x0b, 0xa2, 0x5b, 0xe5, 0x98, 0x3d, 0x04, 0xbd, 0xd9, 0x60, 0x24, 0xfb, 0x7e, 0x8d, 0x88, 0x4b, 0x5a, 0xdc, 0x3b, 0x9d, 0x66, 0xec, 0xa7, 0xc0, 0x09, 0x1f, 0xfc, 0x33, 0x96, 0x07, 0xd6, 0x38, 0x17, 0x1b, 0x1a, 0x29, 0x49, 0xaf, 0x20, 0x0f, 0xe7, 0x23, 0x18, 0x71, 0x2b, 0x5a, 0xa6, 0x6a, 0x93, 0x6d, 0xd0, 0xfe, 0xe1, 0xa1, 0x1a, 0xae, 0x65, 0x97, 0xef, 0x4a, 0x7e, 0xc3, 0x43, 0x07, 0x5f, 0x1f, 0x77, 0xd2, 0x0f, 0x21, 0x7d, 0xe3, 0xb3, 0xea, 0x3c, 0x94, 0x10, 0xc0, 0x36, 0x74, 0x4c, 0xbe, 0x68, 0x97, 0xf4, 0xca, 0x71, 0x31, 0x44, 0xc8, 0xf7, 0x63, 0xa2, 0x0d, 0x47, 0x55, 0x6b, 0x17, 0x3b, 0x85, 0xf2, 0x7b, 0x61, 0x5f, 0xc6, 0x1e, 0x59, 0x0d, 0x34, 0xa8, 0x7f, 0x90, 0x0d, 0x36, 0xcb, 0x10, 0xaa, 0x50, 0xf5, 0x70, 0x2c, 0x1a, 0xdc, 0x26, 0x08, 0xce, 0x28, 0x4a, 0xc4, 0x69, 0x2e, 0xec, 0xfb, 0xa5, 0x15, 0xab, 0xa7, 0x28, 0x37, 0x83, 0xa0, 0xfb, 0xca, 0xe7, 0x5f, 0x3d, 0xc0, 0x10, 0x08, 0x19, 0xeb, 0x94, 0xa8, 0xf5, 0x65, 0x3a, 0xba, 0xec, 0x2f, 0x0d, 0xf1, 0x7f, 0x18, 0xaf, 0x31, 0x87, 0xe1, 0xf0, 0xde, 0x6e, 0x9e, 0x9f, 0x5a, 0x9f, 0x5f, 0xa1, 0xc9, 0x3b, 0x10, 0x3f, 0x18, 0x0e, 0x9e, 0xc4, 0x3d, 0xc1, 0x5c, 0x48, 0xc0, 0x51, 0xa4, 0xc7, 0x7a, 0xc0, 0xc1, 0x76, 0x9d, 0x0a, 0x0c, 0x56, 0xf4, 0x5a, 0x56, 0x09, 0x6c, 0x7e, 0x86, 0xe5, 0xd4, 0x98, 0x83, 0x47, 0xe1, 0x17, 0x55, 0x29, 0x75, 0xe6, 0x87, 0xf7, 0x20, 0xe3, 0xcf, 0x9f, 0xe8, 0x93, 0xf1, 0xe8, 0x45, 0x14, 0xe0, 0x04, 0x70, 0x53, 0x26, 0x68, 0xdd, 0x7f, 0x87, 0xdb, 0x06, 0xbd, 0xe1, 0xcd, 0x6b, 0x1d, 0x57, 0xeb, 0xd7, 0xcc, 0xae, 0xf0, 0xe4, 0x8c, 0xf7, 0xbe, 0xc1, 0x62, 0x6f, 0xad, 0x33, 0x8e, 0xa3, 0x23, 0xda, 0xc0, 0xd8, 0x65, 0xb6, 0x89, 0xa9, 0xac, 0xea, 0x10, 0xf2, 0x7c, 0xbf, 0x06, 0xed, 0x31, 0xeb, 0xdc, 0x9b, 0xdb, 0x14, 0x33, 0x66, 0x4b, 0x90, 0x94, 0x04, 0x6e, 0x6f, 0x61, 0x9e, 0xda, 0xbb, 0x0b, 0x32, 0xa7, 0xfe, 0x86, 0x36, 0x80, 0x05, 0xfa, 0x7e, 0xf9, 0xe4, 0xbc, 0x5f, 0x23, 0x3a, 0x7c, 0x15, 0x5f, 0xb6, 0xc0, 0x62, 0x6f, 0xda, 0x91, 0x78, 0xd3, 0xff, 0x73, 0x19, 0x52, 0x9a, 0x9b, 0xfd, 0xd7, 0xbd, 0x5d, 0x74, 0x7e, 0xe1, 0xe4, 0x4c, 0xef, 0xe2, 0x25, 0xf5, 0xeb, 0x4b, 0x15, 0xe3, 0x24, 0xd4, 0x1a, 0x34, 0x52, 0x29, 0xc0, 0x93, 0x83, 0xed, 0xae, 0x5c, 0xb2, 0xff, 0xd8, 0x00, 0x9c, 0xfc, 0xf6, 0xac, 0xcf, 0x05, 0x34, 0x25, 0x04, 0xc2, 0x2b, 0xf7, 0xae, 0xa6, 0x10, 0xce, 0xd3, 0x75, 0x2b, 0x24, 0x1b, 0x04, 0x8b, 0x1c, 0x27, 0x41, 0xf9, 0xae, 0x23, 0x72, 0x2a, 0x05, 0x9f, 0xc2, 0x39, 0x25, 0x9a, 0xf9, 0x54, 0xd1, 0xe0, 0x8b, 0xb5, 0xac, 0x97, 0xd4, 0xd3, 0x9e, 0x14, 0xa2, 0xda, 0x79, 0xf3, 0xf4, 0x59, 0xdd, 0x66, 0x01, 0x3b, 0x59, 0xcd, 0x7c, 0xf9, 0xd2, 0x87, 0x17, 0x0e, 0x29, 0x08, 0x46, 0xaa, 0x18, 0x2c, 0x45, 0xaa, 0x5d, 0xcb, 0x5c, 0xc8, 0x1b, 0x8e, 0x62, 0x0f, 0x7d, 0x01, 0x80, 0x93, 0x9c, 0xe9, 0x37, 0x5e, 0xa3, 0xd7, 0xa4, 0xad, 0x31, 0xfd, 0x03, 0x5d, 0xfe, 0x41, 0x73, 0xa0, 0xc2, 0x90, 0xf8, 0xf4, 0x52, 0x75, 0xc6, 0x56, 0x0c, 0xea, 0xbd, 0xb2, 0x76, 0x6e, 0x30, 0x9f, 0x22, 0x57, 0xea, 0x49, 0xd5, 0x6a, 0x73, 0xae, 0xe7, 0xa9, 0x8f, 0x0e, 0xed, 0x6c, 0x08, 0x9c, 0x96, 0xb3, 0xad, 0x7a, 0xd3, 0xbb, 0x9b, 0xe4, 0x3b, 0xcf, 0xbb, 0xac, 0xad, 0x61, 0x8c, 0xe6, 0x37, 0x59, 0x23, 0xe4, 0x36, 0xad, 0x70, 0x65, 0xbf, 0x32, 0xc2, 0x09, 0x3e, 0xb2, 0x8d, 0x08, 0x5d, 0x3e, 0x6c, 0x24, 0x28, 0xc5, 0x62, 0xdc, 0x6e, 0xe6, 0x65, 0xe3, 0x6a, 0x03, 0x1d, 0xd0, 0xa2, 0x97, 0xe9, 0x17, 0x10, 0xc9, 0x23, 0x38, 0x80, 0x41, 0xa5, 0x36, 0x39, 0x3a, 0x8b, 0x4b, 0xdf, 0xd8, 0x3b, 0xda, 0x98, 0xbc, 0xa3, 0xa5, 0x6e, 0xd7, 0xc2, 0x40, 0xf5, 0x7b, 0x6a, 0xc6, 0x2d, 0xb8, 0x44, 0xca, 0xa9, 0xe5, 0x14, 0x90, 0xf1, 0x7d, 0x3e, 0x7d, 0x26, 0x2d, 0x8a, 0xcd, 0xe4, 0x2a, 0x24, 0x84, 0x6c, 0xc8, 0xe7, 0xa7, 0x03, 0x49, 0xda, 0xab, 0x95, 0xf2, 0xfb, 0x2e, 0x9e, 0x65, 0x3c, 0xe5, 0x4b, 0x2a, 0xcc, 0xd6, 0xdc, 0x8f, 0x97, 0xc7, 0x4c, 0xb2, 0x10, 0xf6, 0x34, 0xdc, 0x2e, 0x0a, 0xed, 0x10, 0xb4, 0x4a, 0xf4, 0xe4, 0xb6, 0x0d, 0x93, 0x90, 0x59, 0x71, 0xbe, 0x45, 0xda, 0x50, 0x3c, 0xc0, 0xd2, 0x70, 0x07, 0x1e, 0xb8, 0xfa, 0xf4, 0xf2, 0xa7, 0x2e, 0x96, 0x95, 0x61, 0x54, 0x60, 0xbd, 0x95, 0xf6, 0x0b, 0x51, 0x5d, 0x4c, 0x37, 0x7c, 0x0b, 0xf8, 0x55, 0x01, 0x25, 0xf4, 0xc4, 0xce, 0xae, 0xc8, 0x3a, 0xd3, 0xa7, 0x00, 0x66, 0x14, 0xd6, 0xdd, 0xd4, 0xfd, 0xc6, 0x4b, 0x10, 0xf6, 0x0f, 0x13, 0x0e, 0x38, 0xd7, 0x52, 0xc9, 0xdf, 0x99, 0x2a, 0x2b, 0x40, 0x26, 0xb7, 0x2d, 0x7c, 0xe9, 0x44, 0x3f, 0x56, 0x6e, 0xbf, 0xea, 0x41, 0x26, 0x6b, 0xb4, 0xbd, 0x64, 0xd5, 0x44, 0xe4, 0xac, 0x09, 0xc6, 0x40, 0x2d, 0x05, 0x91, 0xe0, 0x8c, 0x6e, 0x07, 0xab, 0xe3, 0x82, 0xbd, 0xf4, 0x0a, 0x4e, 0xdd, 0x4e, 0x15, 0x21, 0xc8, 0xa1, 0x1d, 0x40, 0xff, 0x7d, 0x44, 0xdb, 0x43, 0xaf, 0xf3, 0x40, 0xfb, 0x12, 0x66, 0x4f, 0xd7, 0xa8, 0x6b, 0x2e, 0xb3, 0xe9, 0x66, 0x3e, 0xbe, 0x5b, 0x99, 0x4d, 0xdb, 0x63, 0xa2, 0x0d, 0x47, 0x5b, 0x45, 0xc4, 0x7c, 0xe4, 0x6c, 0x46, 0x56, 0x7e, 0x6c, 0x21, 0x75, 0x56, 0x8a, 0x17, 0xe2, 0x5e, 0xbe, 0xd1, 0xf5, 0xa3, 0xb7, 0xd1, 0x76, 0xdc, 0x1e, 0xa9, 0x02, 0x3e, 0x1f, 0x6a, 0xb0, 0x98, 0x26, 0x60, 0xf5, 0x9b, 0xe6, 0xfc, 0xc5, 0x79, 0xa0, 0x12, 0xfb, 0xb3, 0xa2, 0x45, 0xfb, 0x2b, 0x0e, 0xbf, 0x96, 0x81, 0xdc, 0x25, 0x2e, 0x9c, 0x22, 0xc9, 0x1a, 0x87, 0x93, 0x22, 0x4b, 0x7f, 0x46, 0x7a, 0x30, 0x4a, 0xba, 0xe7, 0xd8, 0xca, 0x16, 0x7c, 0x57, 0xd1, 0xb5, 0xc0, 0x6a, 0x37, 0xe1, 0x5f, 0x5e, 0x2a, 0xdf, 0x20, 0x2d, 0xc6, 0x2d, 0x17, 0xeb, 0xe5, 0x07, 0x1c, 0x60, 0x39, 0x2f, 0x7c, 0xf7, 0x98, 0xee, 0xee, 0xd7, 0x96, 0x56, 0xc8, 0x4f, 0x59, 0xcb, 0x72, 0x77, 0xa9, 0xc2, 0x1b, 0x14, 0x47, 0xc7, 0xac, 0xbd, 0x80, 0xc5, 0xfa, 0x3c, 0x01, 0x82, 0x40, 0x37, 0xed, 0x69, 0xcc, 0x10, 0x2d, 0x8c, 0xf8, 0x09, 0x08, 0xe9, 0x5c, 0xac, 0xf3, 0xec, 0x42, 0x6a, 0xaa, 0x36, 0x5a, 0x82, 0x7f, 0x9d, 0xb0, 0x24, 0xf2, 0x74, 0xda, 0xd6, 0x83, 0x0c, 0x76, 0x18, 0xc4, 0x7a, 0xd4, 0x43, 0xb2, 0x9b, 0xef, 0xb7, 0x45, 0x56, 0xa2, 0x35, 0x46, 0x21, 0x18, 0x8a, 0x61, 0xc7, 0x85, 0x6e, 0x7b, 0x68, 0x13, 0xab, 0x46, 0xc1, 0x20, 0x82, 0x12, 0xad, 0xa6, 0x4a, 0xe6, 0xec, 0xfa, 0x5a, 0xcf, 0x24, 0xba, 0x29, 0x78, 0x25, 0x00, 0xb4, 0xfb, 0x71, 0xdc, 0x20, 0xf7, 0xfc, 0x02, 0xa1, 0xe3, 0x30, 0xbf, 0x9a, 0xa1, 0x34, 0x32, 0x06, 0x56, 0x6e, 0xb8, 0x16, 0x7a, 0x47, 0xa8, 0x1b, 0x2b, 0x2e, 0x41, 0xa7, 0xc7, 0xdf, 0xe0, 0xef, 0xb9, 0xe5, 0x76, 0x74, 0x93, 0x5d, 0x3a, 0xe3, 0x5e, 0xfe, 0x9b, 0x39, 0x2d, 0x56, 0x79, 0x2a, 0xf9, 0x56, 0x94, 0xc4, 0xa8, 0x11, 0x45, 0x50, 0x6f, 0xc1, 0x6c, 0x79, 0x5a, 0x0b, 0xa9, 0xb0, 0x29, 0x84, 0xcf, 0xce, 0x5e, 0x73, 0x95, 0xfb, 0x94, 0xd9, 0x8f, 0xcf, 0x12, 0xae, 0x5d, 0xb8, 0xa0, 0x6e, 0x23, 0x9c, 0x9a, 0xd4, 0x39, 0xbf, 0x42, 0xe5, 0x23, 0xe6, 0x5a, 0x31, 0xc3, 0xbd, 0xf3, 0x56, 0xcd, 0x76, 0x80, 0xc5, 0x7c, 0xb3, 0x2e, 0xc9, 0x83, 0xa6, 0x78, 0xc5, 0x47, 0x76, 0xf5, 0xbd, 0x4b, 0xe5, 0x75, 0x17, 0xeb, 0x31, 0x4d, 0xa3, 0x4e, 0x37, 0xef, 0xda, 0x96, 0xde, 0xbe, 0x63, 0x59, 0xb3, 0x20, 0xdc, 0x55, 0xd1, 0xd4, 0xd6, 0x5f, 0x04, 0x86, 0x21, 0x9d, 0x2e, 0xa0, 0x4b, 0xf5, 0xe9, 0x64, 0x63, 0xc5, 0x6d, 0x38, 0x02, 0xd5, 0xb5, 0x40, 0x8d, 0x8a, 0xdd, 0x32, 0xb4, 0x5c, 0xcf, 0x66, 0x3e, 0x89, 0x1e, 0x2d, 0x09, 0x0b, 0x32, 0x64, 0x4c, 0xc8, 0xa6, 0x49, 0x20, 0x0a, 0xee, 0x8d, 0x3f, 0x2e, 0x3d, 0xaa, 0x0b, 0xa0, 0xa5, 0x76, 0xd2, 0x07, 0x81, 0xf8, 0x50, 0xbc, 0x10, 0x7b, 0x75, 0x81, 0x62, 0xe2, 0x69, 0x70, 0x78, 0x3b, 0xce, 0x31, 0xa7, 0x97, 0x45, 0x70, 0x3d, 0x18, 0x33, 0x8e, 0x67, 0x4b, 0xc5, 0x97, 0x52, 0xb8, 0x31, 0x75, 0x91, 0xb8, 0x3f, 0x63, 0xbf, 0x87, 0x09, 0xa4, 0x65, 0x9a, 0xfe, 0x74, 0x1d, 0x33, 0x2d, 0x3f, 0xf8, 0x32, 0xc1, 0x11, 0x1e, 0x2e, 0xc7, 0x4e, 0xb4, 0xc4, 0x38, 0xa3, 0x03, 0x2f, 0x33, 0x3c, 0xd6, 0x19, 0x8a, 0x37, 0x23, 0xb1, 0x80, 0x59, 0xee, 0xfe, 0xd1, 0x00, 0x6b, 0x73, 0xf3, 0x59, 0x63, 0xc3, 0x9c, 0xd3, 0xd8, 0xf7, 0x84, 0xd4, 0xec, 0xbd, 0x6c, 0xaa, 0xff, 0x03, 0x5f, 0xc4, 0x18, 0xc4, 0x38, 0x22, 0x86, 0x22, 0x64, 0x0a, 0xc7, 0xb6, 0xe9, 0xfd, 0xa8, 0x24, 0xa7, 0xe9, 0xae, 0xf2, 0xde, 0xa0, 0xb5, 0x9a, 0xf1, 0x89, 0xd7, 0xdd, 0x6a, 0x95, 0x8f, 0x5b, 0x3d, 0x75, 0x1e, 0x61, 0x51, 0x0b, 0x2e, 0x02, 0x3c, 0x1e, 0xb6, 0x69, 0x4f, 0x51, 0x1d, 0x6d, 0xd2, 0x56, 0xa2, 0x66, 0x90, 0x5f, 0xfb, 0x3f, 0x97, 0xd5, 0x3c, 0xcd, 0x39, 0x4d, 0xfb, 0x5f, 0x56, 0xb8, 0xb2, 0x97, 0xde, 0xd9, 0x64, 0x78, 0x91, 0xfd, 0x84, 0xbf, 0x09, 0xe6, 0x12, 0x77, 0xfb, 0x08, 0x07, 0xc8, 0xba, 0xf8, 0xf3, 0x10, 0xfc, 0x21, 0xe5, 0x35, 0xe1, 0xb9, 0x8b, 0x39, 0x31, 0xf3, 0x9a, 0x0e, 0xe5, 0x76, 0x70, 0xac, 0xea, 0x0f, 0xf9, 0x62, 0x21, 0xa2, 0xcf, 0x69, 0xaa, 0x67, 0xa5, 0xbf, 0x62, 0x52, 0xe5, 0x32, 0xaa, 0xd3, 0x98, 0xbb, 0x6b, 0xc0, 0x87, 0x0e, 0x57, 0x90, 0x9f, 0x6f, 0x71, 0xc9, 0x9a, 0xc7, 0xcf, 0xbb, 0xdc, 0xf7, 0x9e, 0x6f, 0x9b, 0x6c, 0x68, 0xdb, 0x43, 0xf4, 0x92, 0x57, 0x19, 0xd0, 0x29, 0x55, 0x1e, 0x0a, 0xde, 0x4c, 0x36, 0x09, 0x4e, 0xf5, 0x89, 0x62, 0x87, 0xba, 0x2a, 0xf1, 0xc8, 0x6c, 0xf7, 0x29, 0x89, 0x34, 0xc0, 0xa8, 0xbb, 0xcc, 0xab, 0x0e, 0x51, 0xee, 0xd6, 0x10, 0xff, 0x0d, 0x3f, 0xc8, 0x42, 0x44, 0xe1, 0x4f, 0xa0, 0x8c, 0x20, 0x8e, 0x31, 0x31, 0x67, 0x51, 0x5e, 0x87, 0x10, 0x9d, 0xe9, 0xd9, 0x84, 0x44, 0x2e, 0xa2, 0xa3, 0xb6, 0xa8, 0xff, 0x66, 0x1a, 0xb6, 0x65, 0xc2, 0x9e, 0x9f, 0x8f, 0xd0, 0x0b, 0xd4, 0xbb, 0x2c, 0x9c, 0x76, 0x16, 0x9b, 0x10, 0x18, 0x75, 0xf0, 0xfe, 0xc6, 0x45, 0x30, 0x69, 0x46, 0xc5, 0xf4, 0x94, 0x9d, 0x73, 0x0f, 0x17, 0xd6, 0xc3, 0x71, 0x33, 0xfe, 0x17, 0x4b, 0x63, 0x73, 0xec, 0x74, 0x33, 0x5f, 0x51, 0x0c, 0x55, 0x7f, 0x9e, 0x5f, 0xf2, 0x29, 0x62, 0x0b, 0x3e, 0x8d, 0x9d, 0x66, 0x4f, 0x3b, 0x30, 0x1a, 0x2f, 0xe5, 0x91, 0x12, 0x30, 0x66, 0xc3, 0x9a, 0x7f, 0x04, 0x86, 0xc1, 0xfc, 0xf2, 0xcb, 0x02, 0x49, 0x19, 0x6a, 0x24, 0x21, 0x19, 0x17, 0x5f, 0xec, 0x8a, 0x93, 0xc0, 0x90, 0x87, 0x1f, 0xcf, 0x89, 0x6d, 0x36, 0x6e, 0x3c, 0xe0, 0x7b, 0x04, 0x88, 0x0f, 0xf1, 0xdb, 0x9f, 0x39, 0x6a, 0xc7, 0x14, 0x71, 0x42, 0x09, 0x35, 0x9e, 0x4c, 0x72, 0x9a, 0xc5, 0x0d, 0xcc, 0xfe, 0x8b, 0x28, 0x75, 0x4e, 0xf5, 0x1a, 0x4d, 0x00, 0x73, 0x27, 0xd2, 0xa6, 0x1d, 0x94, 0x8a, 0xc3, 0x3c, 0x17, 0xa2, 0xdd, 0x0c, 0x8c, 0xd4, 0xd3, 0xc0, 0xe9, 0x8e, 0x71, 0xc7, 0x74, 0x50, 0x42, 0x4e, 0x34, 0x55, 0xa5, 0x06, 0xa5, 0x77, 0x23, 0x27, 0xb0, 0x4d, 0x00, 0xb5, 0xd9, 0x96, 0x10, 0x02, 0xbb, 0xda, 0xcc, 0x74, 0xb1, 0x4e, 0xa5, 0x88, 0xd7, 0xf9, 0x99, 0x17, 0x31, 0x15, 0x03, 0xd8, 0x29, 0xb8, 0xb7, 0x27, 0x3f, 0xb3, 0x4e, 0x04, 0xfc, 0xba, 0xbf, 0x5f, 0x27, 0xc6, 0x30, 0x93, 0x3c, 0xb8, 0x0b, 0x30, 0x1a, 0x3f, 0x53, 0xfd, 0xfc, 0xfb, 0x39, 0x3d, 0xaa, 0xe3, 0xea, 0x32, 0xf1, 0xe4, 0xac, 0xe0, 0x50, 0xca, 0x29, 0x13, 0xf4, 0x64, 0x0a, 0xa3, 0xe7, 0xe3, 0xc8, 0xf7, 0x84, 0x84, 0xbf, 0xc8, 0x2e, 0x6f, 0x85, 0x27, 0x41, 0xde, 0x79, 0xc2, 0x49, 0x81, 0x9f, 0x63, 0x72, 0x22, 0xab, 0xb9, 0x40, 0x85, 0x5b, 0x5b, 0x80, 0x92, 0x0a, 0x0a, 0x7f, 0xb5, 0x83, 0x36, 0x79, 0x86, 0x13, 0xc4, 0x54, 0xa5, 0xe2, 0x0f, 0x8e, 0xe8, 0x82, 0x2d, 0x75, 0xb9, 0xc9, 0x73, 0x96, 0xb9, 0xdc, 0x3b, 0x77, 0xaa, 0x8d, 0xe4, 0x89, 0x8b, 0xe7, 0x1b, 0x58, 0x04, 0x06, 0x59, 0x05, 0x05, 0x2d, 0xad, 0xf6, 0xab, 0x12, 0xbc, 0xcc, 0x63, 0x7c, 0x06, 0x95, 0x51, 0x10, 0x6b, 0x43, 0xf3, 0x68, 0xed, 0x5e, 0x01, 0x66, 0xb7, 0xf5, 0x98, 0xc8, 0x5f, 0xda, 0x98, 0xfc, 0x68, 0x0f, 0x4b, 0x35, 0x0b, 0x7b, 0x47, 0xbe, 0x36, 0xe1, 0x95, 0x8f, 0xd6, 0x13, 0x12, 0x1e, 0x52, 0x63, 0x16, 0x77, 0x57, 0x5b, 0x54, 0x8f, 0xdb, 0xae, 0x01, 0xd5, 0x5c, 0x6d, 0x39, 0x0b, 0x69, 0x7e, 0x9e, 0x54, 0x64, 0x4b, 0x42, 0x8e, 0x86, 0xb7, 0xc7, 0xe1, 0x23, 0x56, 0xc4, 0x98, 0x30, 0xdd, 0x6b, 0x30, 0x02, 0xd7, 0x69, 0xaf, 0x58, 0x9a, 0x0e, 0x38, 0x9c, 0x7a, 0xae, 0xdb, 0x66, 0x3c, 0x47, 0xb1, 0x42, 0xce, 0x63, 0x29, 0xb3, 0x35, 0x40, 0x9d, 0x78, 0xc6, 0x2f, 0x29, 0x0d, 0x99, 0x3a, 0xbc, 0x75, 0x3b, 0x09, 0x6f, 0x37, 0xa3, 0x07, 0x16, 0xa7, 0x67, 0xc0, 0x15, 0x66, 0x30, 0x8d, 0x76, 0x2c, 0x6c, 0x74, 0x38, 0xc5, 0x42, 0x4a, 0xe9, 0x5a, 0xcb, 0x1a, 0x77, 0xf2, 0x7f, 0xcb, 0x43, 0x38, 0xed, 0xfc, 0x77, 0x7f, 0xb0, 0x33, 0x9a, 0x03, 0x9e, 0x37, 0x61, 0x72, 0x42, 0xba, 0xc8, 0xab, 0x8d, 0x3b, 0x62, 0xc5, 0xc8, 0x2b, 0xed, 0x53, 0xcd, 0x4f, 0x2a, 0xe6, 0x77, 0x65, 0xec, 0xd4, 0x57, 0x0a, 0x6e, 0x38, 0xa8, 0xdb, 0xe9, 0x3a, 0x85, 0xdb, 0x66, 0x91, 0x5a, 0x15, 0xd1, 0x46, 0x99, 0x82, 0x50, 0xba, 0xae, 0x2c, 0xd3, 0xea, 0x34, 0x94, 0xeb, 0xf2, 0x69, 0x51, 0xdf, 0xd0, 0xdf, 0xfb, 0xfd, 0x6b, 0x75, 0x47, 0x2e, 0xd4, 0x86, 0x73, 0xcd, 0xcb, 0x60, 0xe5, 0xb9, 0x85, 0xf8, 0x0f, 0xa9, 0xac, 0xdc, 0x95, 0xc0, 0xa8, 0x68, 0xb2, 0x62, 0x1d, 0x3d, 0xd8, 0x45, 0xb4, 0xef, 0x96, 0xcb, 0x1f, 0xfe, 0xbf, 0x8f, 0x57, 0x08, 0xc9, 0x3d, 0x28, 0x3c, 0x73, 0xa8, 0xf0, 0x12, 0xaa, 0x16, 0xa4, 0x39, 0xae, 0xde, 0x13, 0xd1, 0x71, 0x36, 0x6f, 0xdb, 0x40, 0x46, 0x09, 0xee, 0xa4, 0x81, 0x5c, 0x2b, 0x8b, 0x34, 0x4d, 0x73, 0xa3, 0x5f, 0xb1, 0xd7, 0x07, 0xc5, 0x10, 0x4f, 0x1d, 0x3f, 0xa8, 0xaf, 0xbe, 0x55, 0xb5, 0xd8, 0x98, 0x0f, 0xf0, 0x2b, 0xd1, 0x09, 0x56, 0x44, 0xed, 0xc6, 0x2a, 0xe4, 0xf2, 0x46, 0x3d, 0x2e, 0xca, 0xdb, 0x6d, 0x17, 0xe8, 0x38, 0x6c, 0x18, 0x2f, 0xcb, 0xc3, 0x25, 0x0f, 0x4d, 0x16, 0xe3, 0xf1, 0x97, 0xa9, 0x16, 0xd5, 0xb7, 0x23, 0x58, 0x39, 0x43, 0x92, 0x11, 0x3d, 0xed, 0xb0, 0xa3, 0x06, 0x58, 0x65, 0xe5, 0x60, 0x2a, 0x8c, 0xd3, 0xa7, 0x63, 0xfa, 0x84, 0xe7, 0xed, 0xbc, 0x5c, 0x42, 0x73, 0xa1, 0x82, 0x92, 0x77, 0xf9, 0x94, 0x50, 0x9f, 0x9b, 0x9a, 0xb5, 0x50, 0x2d, 0x39, 0x1e, 0x7e, 0x9f, 0x2a, 0xb5, 0xc3, 0xf9, 0xea, 0x4e, 0xae, 0x57, 0xb2, 0x8f, 0x5d, 0x31, 0xa9, 0x54, 0x4e, 0xe0, 0x59, 0x51, 0x72, 0x5e, 0x5f, 0xfa, 0x83, 0x4e, 0x67, 0x9f, 0x98, 0x3c, 0x58, 0xdc, 0xf7, 0x25, 0xcc, 0x30, 0x2a, 0x3a, 0xc3, 0xec, 0x55, 0xe1, 0x98, 0x4f, 0xc6, 0xfd, 0x34, 0xef, 0xce, 0x6f, 0x81, 0x5a, 0xcf, 0xdd, 0x21, 0xfe, 0x97, 0xb1, 0x61, 0x46, 0xec, 0x65, 0x68, 0x06, 0x68, 0xff, 0xb5, 0x19, 0x88, 0xd7, 0xc8, 0x49, 0xff, 0xa0, 0x1e, 0x6e, 0x50, 0xa6, 0x63, 0xda, 0x9b, 0x55, 0xe4, 0xf5, 0xb7, 0xfb, 0x43, 0x25, 0x82, 0xcf, 0x6e, 0xf1, 0x75, 0x31, 0xd1, 0x65, 0x7c, 0x33, 0xcb, 0xb8, 0x04, 0x59, 0x5f, 0x2c, 0x55, 0x9d, 0x2d, 0x36, 0x22, 0xb6, 0xa0, 0xdf, 0x5e, 0x9a, 0x68, 0x6a, 0x52, 0x42, 0x2b, 0x37, 0xed, 0xad, 0x77, 0xe7, 0x5b, 0x27, 0xfc, 0xc1, 0xd9, 0xcb, 0xf8, 0x54, 0xc7, 0x47, 0xf2, 0x5e, 0xfe, 0xdf, 0xab, 0xed, 0x65, 0xb5, 0x52, 0xc4, 0xbf, 0x47, 0xf7, 0x00, 0xc7, 0x39, 0x42, 0xfc, 0x7f, 0x55, 0x65, 0x71, 0xc5, 0xd0, 0x4f, 0xe2, 0x27, 0xce, 0x22, 0x37, 0xf8, 0x29, 0xe8, 0xa8, 0xa3, 0x6e, 0x82, 0xdc, 0x40, 0x29, 0xe0, 0x52, 0x65, 0x63, 0x78, 0x01, 0x3f, 0x68, 0xf0, 0x3b, 0xe1, 0xce, 0x1e, 0xd7, 0xdb, 0xb2, 0x33, 0x8f, 0x0f, 0x45, 0x33, 0xa7, 0xc0, 0x88, 0xa9, 0xd0, 0xec, 0x53, 0x98, 0x4b, 0xdc, 0x9c, 0xb4, 0x51, 0xf9, 0xf6, 0xd2, 0xb3, 0xe1, 0x58, 0x9e, 0xbe, 0xba, 0x20, 0x8c, 0x61, 0xc7, 0x57, 0x11, 0x92, 0x38, 0x37, 0x12, 0xed, 0x47, 0xea, 0x9d, 0x9e, 0x80, 0x95, 0xd7, 0x82, 0x60, 0x95, 0x35, 0x89, 0x22, 0x09, 0xef, 0x5f, 0xd6, 0x90, 0xb2, 0x4b, 0xb3, 0x54, 0x96, 0x57, 0xae, 0x47, 0x4f, 0xb1, 0x4c, 0xac, 0xa7, 0x51, 0xb4, 0xda, 0x2c, 0xdc, 0x08, 0x3c, 0x25, 0xc8, 0xf5, 0x9d, 0xcb, 0xc2, 0x89, 0xa2, 0xb6, 0x4c, 0x45, 0x98, 0x96, 0xab, 0x74, 0x70, 0x23, 0x00, 0xbb, 0x08, 0x57, 0xb5, 0xf0, 0xad, 0xda, 0x1a, 0x2f, 0xdd, 0xbe, 0x50, 0x2b, 0x51, 0x6c, 0x67, 0xc3, 0x3b, 0xde, 0xc3, 0xd6, 0xcc, 0x0f, 0xc4, 0x57, 0xf9, 0xb0, 0xa6, 0xa4, 0x7f, 0x1d, 0xa5, 0x13, 0x24, 0x8f, 0x65, 0xce, 0x40, 0x93, 0x92, 0xe2, 0x7d, 0xbb, 0xc3, 0x92, 0xdb, 0x93, 0xa5, 0xf1, 0xf7, 0xd6, 0x55, 0xb0, 0x8c, 0xe2, 0x0d, 0x34, 0x3a, 0x6a, 0x03, 0xeb, 0x86, 0x6b, 0x8e, 0xe1, 0x23, 0x61, 0x8b, 0x8e, 0x70, 0xba, 0xff, 0xf3, 0x41, 0x8b, 0xfe, 0xe5, 0xe2, 0x82, 0xcb, 0xa8, 0x59, 0x1c, 0x40, 0xbf, 0xec, 0x17, 0x70, 0x03, 0xe3, 0x2b, 0x8c, 0xf3, 0x8f, 0xf5, 0x03, 0x4b, 0x8b, 0x34, 0xed, 0xd8, 0x42, 0x37, 0xaa, 0x8a, 0xb1, 0x96, 0xc6, 0xcb, 0x6f, 0x21, 0x20, 0x0f, 0xea, 0x16, 0x4c, 0xac, 0xf3, 0x97, 0x35, 0xed, 0x7d, 0x5a, 0x07, 0x61, 0xa1, 0xa3, 0x4c, 0x79, 0xe6, 0x6f, 0x55, 0x52, 0xc0, 0xf2, 0xdb, 0xd0, 0x56, 0x44, 0xe6, 0xec, 0x88, 0x58, 0xee, 0x4f, 0x31, 0x2d, 0x40, 0x1f, 0xa9, 0x48, 0xa4, 0x19, 0x8f, 0x61, 0x3d, 0xe0, 0xc5, 0x5d, 0xb0, 0x94, 0xbb, 0x7c, 0x89, 0xa7, 0xf1, 0xd4, 0xda, 0xec, 0xb7, 0xfe, 0x24, 0xf1, 0x38, 0x0f, 0x7b, 0x8f, 0xb6, 0xc9, 0xe6, 0xbf, 0x17, 0x13, 0x05, 0xaf, 0xa1, 0xa7, 0xf6, 0x16, 0x02, 0x0b, 0x78, 0xc4, 0x93, 0xc2, 0x51, 0x7d, 0xdd, 0xc3, 0xee, 0x07, 0x5d, 0x2a, 0x4a, 0x82, 0x84, 0x2e, 0x11, 0xf8, 0x02, 0x53, 0x04, 0x35, 0x44, 0xe0, 0x9f, 0xd9, 0x3b, 0x94, 0xf9, 0xab, 0x60, 0x95, 0xed, 0x30, 0xf5, 0xa9, 0x77, 0x7d, 0x8d, 0xa8, 0x60, 0x49, 0xce, 0x32, 0x1e, 0x46, 0x76, 0x9d, 0xf6, 0xb2, 0x9c, 0x31, 0x63, 0x28, 0x39, 0x98, 0xbb, 0xbd, 0xe6, 0x90, 0x10, 0x48, 0xe7, 0xe3, 0x54, 0x01, 0x69, 0x99, 0xc1, 0x4e, 0x08, 0x6c, 0x78, 0xd9, 0x94, 0x7c, 0x69, 0xe6, 0x15, 0x44, 0x72, 0xe4, 0x0c, 0xcd, 0xcb, 0x41, 0xfc, 0x21, 0xa1, 0x83, 0x29, 0x03, 0x01, 0x95, 0xa0, 0xdd, 0xf8, 0x5e, 0x77, 0xfa, 0xf9, 0x98, 0x56, 0xf5, 0x7e, 0xe0, 0x37, 0x72, 0xf2, 0x09, 0x69, 0x0b, 0xcf, 0xb6, 0xdb, 0x8e, 0x04, 0x28, 0x97, 0x65, 0x99, 0x54, 0x8d, 0x55, 0x95, 0x39, 0x92, 0x6c, 0x20, 0x70, 0xa8, 0x34, 0xe5, 0x05, 0x80, 0x2d, 0xba, 0x85, 0x3d, 0x7a, 0x83, 0x58, 0x7b, 0xdb, 0x53, 0x51, 0x90, 0xdb, 0xd5, 0x84, 0x11, 0x4b, 0xeb, 0x58, 0x99, 0xee, 0x94, 0xdd, 0xc5, 0x76, 0x13, 0x5f, 0x83, 0xaf, 0x4e, 0x3b, 0x8d, 0xfb, 0x74, 0xf1, 0x30, 0xfe, 0xe2, 0x7b, 0x52, 0x9a, 0x48, 0xdd, 0xb3, 0x1e, 0x07, 0xfe, 0x73, 0xba, 0xde, 0xb6, 0xd5, 0x37, 0xc6, 0x28, 0x42, 0xe4, 0x1a, 0x52, 0x91, 0xd4, 0xfb, 0xe2, 0x85, 0x46, 0xf3, 0x4b, 0x97, 0x65, 0xd8, 0x19, 0xf6, 0x32, 0xf4, 0x81, 0xcd, 0xbe, 0x62, 0x3d, 0xc4, 0x9c, 0xbb, 0x97, 0xc9, 0x96, 0xf3, 0xc3, 0x10, 0x9f, 0x7d, 0x71, 0x58, 0x09, 0xb6, 0xa3, 0x71, 0xf8, 0x80, 0xbc, 0xfb, 0x17, 0x2d, 0xda, 0x70, 0x89, 0xa0, 0x66, 0x65, 0x23, 0xae, 0xea, 0x0c, 0xd8, 0xca, 0x22, 0xfe, 0x74, 0xe2, 0x55, 0x37, 0x8e, 0x84, 0xe5, 0x62, 0xb7, 0x45, 0x26, 0x58, 0xf8, 0x63, 0x6c, 0xe3, 0x7c, 0xa9, 0x68, 0xc7, 0x89, 0x93, 0xb4, 0x03, 0xb5, 0xb3, 0xac, 0x54, 0x56, 0x53, 0x80, 0xfb, 0x3a, 0x5c, 0x87, 0xc0, 0x98, 0x77, 0xd6, 0x37, 0x47, 0x71, 0x12, 0x42, 0x2e, 0xe4, 0x82, 0xd7, 0xfc, 0x14, 0x68, 0x03, 0x19, 0x17, 0x92, 0x2f, 0xdc, 0x39, 0x2c, 0xa3, 0xfe, 0x9e, 0xd8, 0x48, 0x4e, 0x29, 0x01, 0xb2, 0xa7, 0x9d, 0x6b, 0x5d, 0x1f, 0x02, 0x0f, 0x37, 0x82, 0x4b, 0x27, 0x5f, 0xff, 0x35, 0x85, 0x2d, 0x20, 0x72, 0x28, 0x72, 0x00, 0x07, 0x11, 0x01, 0xb8, 0xf3, 0x53, 0x6e, 0x1a, 0x11, 0x6a, 0x15, 0xa2, 0x3f, 0xcd, 0x5e, 0xa9, 0xc0, 0xc7, 0x40, 0xdc, 0xdf, 0x82, 0x04, 0xed, 0xd5, 0x65, 0x4c, 0x88, 0xed, 0x9f, 0x53, 0x89, 0xe6, 0x04, 0x76, 0x6c, 0x99, 0x19, 0xf4, 0x04, 0xdc, 0x6a, 0xf2, 0x70, 0xa5, 0x24, 0xc2, 0x4c, 0x73, 0xdf, 0x64, 0x24, 0xe9, 0xbc, 0x4d, 0x2e, 0xbc, 0xb0, 0x68, 0x38, 0xd0, 0x1f, 0x5b, 0xdf, 0x9e, 0xad, 0x0b, 0x02, 0xd9, 0x51, 0x62, 0x76, 0x51, 0xab, 0x50, 0xfb, 0x17, 0x97, 0x0f, 0x6f, 0xe2, 0x02, 0xac, 0x42, 0xb1, 0xfc, 0xc3, 0x2a, 0xb2, 0x0f, 0x8a, 0x18, 0x63, 0xcf, 0x10, 0x6a, 0xf7, 0xb3, 0xc7, 0x62, 0xfb, 0x23, 0x41, 0xd7, 0x39, 0xd2, 0x37, 0x2a, 0xdd, 0x4e, 0xcf, 0x7c, 0xd6, 0xd6, 0x1e, 0x1e, 0x7f, 0x6b, 0xec, 0x49, 0x7f, 0x29, 0xb8, 0x10, 0xee, 0xd8, 0xfc, 0x92, 0xb9, 0xbf, 0xb3, 0x74, 0x47, 0xb8, 0x17, 0x8f, 0x5c, 0x8a, 0xaf, 0xe5, 0x3e, 0x72, 0x89, 0xda, 0x17, 0x03, 0xc5, 0xa1, 0x9b, 0x31, 0x53, 0xf4, 0xea, 0xa8, 0xfc, 0x08, 0xb8, 0x62, 0xa7, 0xc0, 0xab, 0x78, 0xd5, 0x21, 0x04, 0x38, 0x6f, 0x06, 0x82, 0x79, 0xc1, 0x14, 0x83, 0x2b, 0xc6, 0xf1, 0x6d, 0x32, 0xa6, 0xb1, 0x4c, 0x75, 0x7d, 0x91, 0xbd, 0x31, 0x5e, 0xe8, 0x0a, 0x94, 0x98, 0x5a, 0x96, 0x87, 0x37, 0x4f, 0x7c, 0xcb, 0xce, 0xa3, 0x73, 0x47, 0x74, 0xa0, 0xf5, 0xa0, 0x0d, 0x29, 0xa0, 0x0b, 0xcb, 0x37, 0xdc, 0x5f, 0xf4, 0x8a, 0xbe, 0x6f, 0xe5, 0x98, 0x2c, 0x96, 0x57, 0xca, 0x42, 0x93, 0xe1, 0xe7, 0xf5, 0x97, 0xbe, 0xd0, 0xf6, 0x9d, 0xd1, 0x6f, 0xd9, 0xfa, 0xe6, 0xea, 0x77, 0x35, 0x3b, 0x1c, 0x91, 0x18, 0x3f, 0x45, 0xb6, 0x07, 0x99, 0x00, 0x66, 0x91, 0x6c, 0x76, 0x77, 0x45, 0xd9, 0xd2, 0xb8, 0xc7, 0xc6, 0xf5, 0xd5, 0x23, 0xde, 0x6a, 0x7a, 0x60, 0xd9, 0x9c, 0xbb, 0x59, 0xfe, 0x46, 0xb4, 0xc8, 0xe6, 0x2c, 0x6c, 0xa4, 0x82, 0x09, 0x00, 0xad, 0x60, 0xc8, 0xfd, 0x45, 0x29, 0xf6, 0x0d, 0x81, 0x6f, 0x78, 0xd6, 0x80, 0xa5, 0x79, 0x1f, 0xfb, 0x6f, 0xa7, 0x34, 0x1e, 0x1d, 0x9f, 0x8c, 0x96, 0x71, 0xa5, 0xaa, 0xec, 0xa9, 0x99, 0x41, 0x11, 0xb9, 0x26, 0x9b, 0x3a, 0xd9, 0x3d, 0x3b, 0xed, 0x3f, 0xc2, 0xc2, 0x5c, 0x2e, 0x85, 0x0f, 0xf3, 0x2f, 0x73, 0xaa, 0x2d, 0x9f, 0x0e, 0x63, 0xab, 0x69, 0x1a, 0x36, 0x87, 0x15, 0x99, 0x72, 0xe6, 0x02, 0xfa, 0x1b, 0xcc, 0xef, 0x8e, 0x8c, 0x35, 0xc0, 0x3b, 0x60, 0x61, 0x7f, 0x74, 0x93, 0x6f, 0xa2, 0x68, 0xe5, 0x2d, 0x8c, 0x7a, 0x7f, 0x2f, 0x56, 0xf2, 0xd9, 0x1e, 0xce, 0xf2, 0xdb, 0x53, 0xc0, 0xab, 0x43, 0xa4, 0x75, 0xd0, 0x46, 0x7e, 0x7a, 0x4b, 0x7a, 0x35, 0xa2, 0x30, 0xf3, 0x97, 0x4e, 0xef, 0xac, 0xc7, 0xec, 0xcd, 0x29, 0x49, 0xbe, 0x95, 0x5b, 0x59, 0xdd, 0x8a, 0xc4, 0x81, 0x7d, 0xa1, 0xdc, 0x6a, 0x72, 0xed, 0xb2, 0xf3, 0xf4, 0x5b, 0xd6, 0x80, 0x9f, 0x9f, 0x77, 0x94, 0xbd, 0x6e, 0xc9, 0xa3, 0xc8, 0xee, 0xa9, 0x21, 0x2b, 0x6b, 0x84, 0xdf, 0x49, 0x4b, 0x75, 0x97, 0xc0, 0x44, 0xad, 0xc6, 0xef, 0xcc, 0x18, 0xb9, 0xb6, 0xd1, 0x3e, 0xeb, 0x7c, 0xab, 0x67, 0x8e, 0x77, 0x4f, 0x02, 0x68, 0x27, 0xc5, 0x47, 0xe0, 0x24, 0xdc, 0x1c, 0x59, 0x1a, 0x1c, 0x35, 0xbe, 0x12, 0xfc, 0x80, 0x5e, 0xf3, 0x55, 0xc0, 0xfb, 0x48, 0x17, 0x77, 0x1d, 0x43, 0x3b, 0x0a, 0xac, 0x02, 0xf8, 0x20, 0xbe, 0x12, 0x3a, 0x4b, 0xae, 0x32, 0x50, 0xea, 0x6e, 0x59, 0xe4, 0x4e, 0x1e, 0xfa, 0x31, 0x1b, 0xdd, 0x86, 0x70, 0xf1, 0xdf, 0x33, 0x93, 0x4c, 0xbf, 0xfc, 0x36, 0xa9, 0x17, 0xe8, 0xd3, 0xeb, 0x4f, 0x90, 0x35, 0xfc, 0xb2, 0xdb, 0x2f, 0xb7, 0xc7, 0x0d, 0x8d, 0x06, 0xde, 0x00, 0x4b, 0x47, 0xe9, 0xb0, 0x05, 0xf5, 0x8d, 0xfe, 0xaf, 0x84, 0x79, 0xad, 0x86, 0x8c, 0xf7, 0xb1, 0x46, 0x2a, 0xc0, 0xa9, 0x9e, 0xa4, 0x15, 0xaa, 0xe1, 0x4b, 0x0b, 0x3e, 0xfe, 0xa6, 0x27, 0xac, 0xb2, 0xcc, 0x2a, 0x7a, 0xfc, 0x12, 0x2e, 0x31, 0xd2, 0xe6, 0xf2, 0x60, 0x12, 0xfb, 0x73, 0xe3, 0xbb, 0xa7, 0xbc, 0x65, 0x5d, 0x89, 0xfe, 0x24, 0xce, 0x6e, 0xe3, 0xf4, 0x1f, 0x75, 0x20, 0x87, 0xce, 0x72, 0x4a, 0xeb, 0x3d, 0x91, 0xea, 0x54, 0x63, 0x3c, 0xd3, 0x1c, 0xc2, 0x3e, 0xb3, 0x08, 0x99, 0x28, 0xe9, 0xcd, 0x5a, 0xf3, 0x96, 0xd3, 0x5e, 0xe8, 0xf7, 0x38, 0xd8, 0xbd, 0xf2, 0x18, 0x08, 0x01, 0xee, 0x0c, 0xb1, 0xba, 0xe8, 0xf0, 0xcc, 0x4c, 0xc3, 0xea, 0x7e, 0x9c, 0xe0, 0xa7, 0x48, 0x76, 0xef, 0xe8, 0x7e, 0x2c, 0x05, 0x3e, 0xfa, 0x80, 0xee, 0x11, 0x11, 0xc4, 0xc4, 0xe7, 0xc6, 0x40, 0xc0, 0xe3, 0x3e, 0xd4, 0x51, 0x8c, 0x74, 0xdf, 0x6b, 0xd1, 0x2e, 0x5f, 0x22, 0x49, 0x30, 0x59, 0x77, 0xbf, 0xaf, 0x7b, 0x72, 0xed, 0x08, 0x00, 0x71, 0x88, 0xb2, 0xd4, 0xbf, 0x7d, 0x71, 0xf8, 0x68, 0x7b, 0xcd, 0x29, 0x4c, 0xb1, 0xc3, 0xbc, 0x73, 0xd9, 0xba, 0xcd, 0xa0, 0x75, 0xb9, 0x98, 0x29, 0x58, 0xd6, 0x27, 0x05, 0x69, 0xf2, 0x2e, 0x27, 0xa4, 0xa3, 0x33, 0x0a, 0x61, 0x72, 0xf1, 0x8e, 0xd9, 0x47, 0xff, 0x02, 0xe6, 0x21, 0xad, 0x82, 0x0a, 0x0a, 0x2f, 0x83, 0xb3, 0x4b, 0xfd, 0xac, 0xbd, 0xdc, 0x79, 0xe8, 0x39, 0x1e, 0xd2, 0xb9, 0x6d, 0xcc, 0x29, 0xcf, 0x1b, 0x2f, 0xf3, 0xd9, 0x07, 0x92, 0x9f, 0x9b, 0xb3, 0xf6, 0x78, 0x40, 0x6d, 0x07, 0xcc, 0xf2, 0x8b, 0x4e, 0x4e, 0xa9, 0xf6, 0xa7, 0xb9, 0x40, 0xe5, 0xf6, 0xb6, 0xce, 0xeb, 0x16, 0x00, 0x33, 0x34, 0x12, 0xc6, 0xf1, 0x0c, 0x98, 0x51, 0x3e, 0xa0, 0xaa, 0xe6, 0x57, 0x09, 0x97, 0xee, 0x16, 0x86, 0x2a, 0x54, 0xc7, 0x09, 0x21, 0x2f, 0x38, 0xf6, 0xe0, 0xa1, 0x0f, 0x27, 0x67, 0xfe, 0x60, 0x33, 0x82, 0x31, 0x7f, 0xf0, 0x3f, 0x5c, 0x13, 0x36, 0xa5, 0xbf, 0x6c, 0xe6, 0xa3, 0xdb, 0x17, 0x2b, 0x47, 0xd7, 0xaf, 0x00, 0x31, 0x22, 0xf5, 0xf3, 0x46, 0x5a, 0x23, 0x28, 0xa9, 0x6d, 0x7e, 0xa0, 0xe7, 0xfe, 0x2b, 0xbb, 0x71, 0x0a, 0x43, 0xfc, 0x50, 0xcb, 0x2a, 0x0d, 0x14, 0xdc, 0x1c, 0x03, 0x0d, 0x9f, 0x08, 0xe2, 0xbe, 0xdc, 0xa2, 0x64, 0x8f, 0xaa, 0xb4, 0xf6, 0xc2, 0x93, 0xb4, 0x04, 0xa8, 0xf3, 0x9c, 0x76, 0x15, 0xa1, 0xf6, 0x7b, 0x11, 0xd1, 0x36, 0x85, 0xd0, 0x39, 0x4d, 0x95, 0xe5, 0x73, 0x7b, 0xb8, 0xb2, 0xa3, 0x65, 0xd1, 0x23, 0x59, 0x67, 0x9a, 0x9c, 0xb9, 0x2b, 0xe6, 0x2f, 0xd9, 0x7b, 0x29, 0x13, 0x6a, 0x53, 0x39, 0x51, 0x9b, 0x3b, 0x56, 0xc1, 0x3a, 0xd3, 0x69, 0x35, 0x1c, 0xb0, 0x89, 0xf4, 0xc0, 0x66, 0xc3, 0x6a, 0x2f, 0xe6, 0x1b, 0x1d, 0x26, 0x0b, 0xce, 0xe3, 0x77, 0x6f, 0xda, 0x53, 0xad, 0x83, 0xc0, 0x79, 0xef, 0xdf, 0x89, 0xce, 0x27, 0xd6, 0x07, 0x66, 0x63, 0x4e, 0x5d, 0x6c, 0x7b, 0xce, 0xc2, 0xcc, 0xf4, 0xd9, 0x81, 0x2f, 0x24, 0x7b, 0x44, 0x2c, 0x97, 0x21, 0x93, 0xbc, 0xb2, 0xae, 0x98, 0xef, 0x96, 0xca, 0x25, 0xde, 0x47, 0x7d, 0xf8, 0xe1, 0x0e, 0xfe, 0x3d, 0x02, 0x1b, 0xc5, 0x54, 0xb1, 0x6f, 0xe7, 0xd5, 0xb9, 0xf9, 0xa3, 0xd1, 0x72, 0xff, 0x38, 0x5b, 0x38, 0xc0, 0xfa, 0x47, 0x1d, 0x58, 0xa5, 0x32, 0xdb, 0xe3, 0xf1, 0xc3, 0x0d, 0xe5, 0x67, 0x2f, 0x9e, 0xea, 0x72, 0x03, 0x81, 0x69, 0xb9, 0x1e, 0xa2, 0xee, 0xac, 0xfc, 0x1d, 0x78, 0x5d, 0x3b, 0xaf, 0x20, 0x92, 0x57, 0x69, 0xfc, 0x18, 0xb9, 0xac, 0x43, 0x5a, 0xf0, 0x51, 0xb2, 0x32, 0x3e, 0x28, 0x2e, 0xfe, 0x56, 0xa4, 0xaa, 0xf7, 0x64, 0xd4, 0x4b, 0xbe, 0x4e, 0x95, 0xca, 0x38, 0x39, 0x07, 0x1b, 0x9c, 0x50, 0x3d, 0x4c, 0xca, 0xc0, 0x39, 0xaf, 0xdf, 0x07, 0x17, 0x3b, 0x06, 0x6f, 0x88, 0x30, 0x91, 0xd5, 0x82, 0xfa, 0x48, 0xaf, 0x36, 0x58, 0x00, 0x4e, 0x43, 0xbd, 0x70, 0x60, 0x29, 0xf7, 0x41, 0xb8, 0x00, 0x0e, 0x64, 0x52, 0x6a, 0x6f, 0xa8, 0x91, 0xc6, 0x49, 0x8c, 0xcc, 0xa6, 0x38, 0x51, 0x09, 0x83, 0x21, 0x54, 0x08, 0xb0, 0x5d, 0x9b, 0x84, 0x8d, 0x19, 0xae, 0xb5, 0xfd, 0xfc, 0xa8, 0x19, 0x1a, 0x0b, 0x8d, 0x74, 0x27, 0xca, 0xde, 0x16, 0xc5, 0xa4, 0x6b, 0x5c, 0x6a, 0x8d, 0x69, 0x79, 0x10, 0xe6, 0xc4, 0x76, 0x2a, 0xa1, 0xb7, 0x78, 0xdc, 0xa5, 0x99, 0x42, 0x6b, 0x74, 0xfa, 0xfa, 0xf3, 0x0b, 0xee, 0x30, 0x58, 0x0a, 0xa9, 0x1c, 0x7e, 0x14, 0x4c, 0x27, 0xbd, 0x79, 0xff, 0xae, 0x8f, 0x12, 0x40, 0x02, 0x8c, 0x6d, 0x7a, 0xb3, 0x99, 0x2a, 0xda, 0x0e, 0x5c, 0xa5, 0x5e, 0xe4, 0xf3, 0xd6, 0x2f, 0x8d, 0xe5, 0x75, 0x30, 0x2d, 0x58, 0x61, 0xd7, 0x36, 0x85, 0x42, 0x3c, 0x2e, 0x6a, 0x6d, 0x6f, 0xb3, 0xbe, 0x09, 0x0f, 0xbc, 0x2a, 0x70, 0x18, 0x21, 0xb6, 0xd8, 0xfd, 0x5e, 0x82, 0x33, 0xf7, 0x94, 0xb6, 0x54, 0x9c, 0xd0, 0xbb, 0x52, 0xb3, 0x90, 0xac, 0x31, 0x47, 0x83, 0x07, 0xbf, 0xfa, 0x91, 0xa9, 0xbd, 0x9c, 0x1b, 0xf9, 0x3f, 0xfc, 0x84, 0x63, 0x56, 0xfe, 0xf0, 0x08, 0xeb, 0xee, 0x4b, 0xb3, 0xee, 0x14, 0x8e, 0x0f, 0xb1, 0x89, 0x3d, 0x18, 0x8e, 0x49, 0x34, 0xd0, 0xd0, 0x88, 0xa4, 0x33, 0xd1, 0x4a, 0x59, 0x6c, 0x5f, 0x2e, 0x3e, 0x49, 0x64, 0x8a, 0x22, 0xed, 0xc6, 0xbd, 0xbc, 0xc5, 0x8d, 0xc1, 0xed, 0xbd, 0x44, 0x00, 0x46, 0xb3, 0xa1, 0x69, 0xca, 0x2b, 0x68, 0xc2, 0xf5, 0x45, 0x8c, 0x40, 0xfd, 0xed, 0x97, 0x55, 0x57, 0x52, 0x4d, 0xc9, 0x7d, 0x99, 0x8c, 0x0c, 0xef, 0xd2, 0x77, 0xcb, 0x77, 0x2b, 0xd4, 0xc1, 0xb2, 0x63, 0xb1, 0xd0, 0xcc, 0x82, 0x4e, 0x50, 0x8b, 0xc8, 0x37, 0xa7, 0x8f, 0xe3, 0xb1, 0x19, 0xd8, 0x65, 0x57, 0xe2, 0x88, 0x74, 0x05, 0x82, 0xea, 0xc3, 0xf5, 0x59, 0xb4, 0xc2, 0x28, 0x73, 0x89, 0x12, 0x08, 0xa5, 0xc2, 0x3c, 0x4b, 0xd9, 0x6e, 0xa2, 0x1a, 0xa6, 0x97, 0xb6, 0x73, 0x24, 0xc8, 0x69, 0xcc, 0xfe, 0xcb, 0xe7, 0xf9, 0xc8, 0xb7, 0x81, 0x4f, 0x93, 0x2b, 0xea, 0x0a, 0xbf, 0xd4, 0xa7, 0xec, 0x11, 0x35, 0xc1, 0x27, 0x05, 0xa7, 0xbd, 0x7d, 0x66, 0x9e, 0xcd, 0xa6, 0x1b, 0x2f, 0x48, 0xf2, 0x44, 0xcf, 0x58, 0x2f, 0x86, 0x5e, 0xf3, 0xcd, 0xa2, 0x64, 0x0c, 0x40, 0x4d, 0x9a, 0x0a, 0xa6, 0x3c, 0xac, 0x79, 0xaa, 0x7e, 0x3d, 0xff, 0xa8, 0x0e, 0x2b, 0x92, 0x12, 0xa9, 0x15, 0xe9, 0x12, 0xdd, 0x1b, 0x30, 0x70, 0x63, 0xe5, 0x00, 0xb7, 0xae, 0xe7, 0x8e, 0x93, 0xc4, 0xe3, 0x23, 0x7e, 0x4d, 0xaf, 0xcc, 0x9b, 0xe9, 0x38, 0x52, 0xe2, 0xc7, 0xc7, 0x6c, 0x7e, 0x74, 0x83, 0x34, 0x73, 0xf0, 0x38, 0xd8, 0x84, 0x07, 0x56, 0x92, 0x54, 0xde, 0x3d, 0xda, 0xcb, 0xcd, 0xb7, 0xda, 0xbb, 0x6c, 0xc6, 0x22, 0xc4, 0xf1, 0xa1, 0x9d, 0x75, 0xb9, 0xf9, 0xc3, 0xb3, 0x24, 0x80, 0x11, 0x5f, 0xa6, 0xac, 0xb6, 0x33, 0x1b, 0xb8, 0x90, 0xed, 0x5b, 0xed, 0x56, 0xb0, 0x0f, 0x1f, 0x17, 0xa7, 0xc3, 0x7a, 0xe3, 0xeb, 0x3c, 0x7f, 0xc8, 0xa7, 0x0b, 0x49, 0x00, 0x7a, 0x62, 0x15, 0x68, 0x1c, 0x27, 0x01, 0x34, 0x45, 0x47, 0x14, 0xe1, 0xca, 0x4d, 0x7f, 0x6c, 0x09, 0x33, 0x22, 0xc2, 0x88, 0x77, 0x52, 0x77, 0xd9, 0x72, 0xda, 0xba, 0xc1, 0xe6, 0x3f, 0x89, 0x99, 0xd6, 0x49, 0x21, 0xf3, 0x9a, 0xbe, 0xb9, 0x81, 0x32, 0x71, 0x6f, 0x33, 0xdb, 0x7b, 0x83, 0xa0, 0xe0, 0xc9, 0xc3, 0xa7, 0xb3, 0xd7, 0x46, 0x56, 0x3c, 0xba, 0x5d, 0x0a, 0x71, 0x64, 0xc7, 0xd8, 0x27, 0x24, 0x24, 0x2c, 0x27, 0x6c, 0xac, 0xb0, 0x85, 0xd7, 0x21, 0x70, 0x2d, 0x6a, 0x02, 0x3b, 0xbf, 0x1b, 0x02, 0x4c, 0x9d, 0x8f, 0xb9, 0x2a, 0x42, 0x28, 0x98, 0xcc, 0xd5, 0x3f, 0x22, 0x01, 0xfd, 0xae, 0x59, 0x0f, 0xf8, 0x92, 0x77, 0x9a, 0xe7, 0x4f, 0xdf, 0xc8, 0x6c, 0xd4, 0x53, 0xa3, 0x77, 0x20, 0x67, 0xbf, 0x5d, 0x04, 0x36, 0x1c, 0x2b, 0x2b, 0x53, 0x4d, 0x39, 0x59, 0x03, 0xda, 0x02, 0xf0, 0xa9, 0xe4, 0x32, 0xb8, 0x81, 0x07, 0x01, 0xdf, 0x91, 0x85, 0xc0, 0x3f, 0xdd, 0xa0, 0xb1, 0xe0, 0xdb, 0x47, 0x1c, 0xbe, 0x26, 0xf5, 0x9f, 0xcc, 0x76, 0xd7, 0xc6, 0x38, 0xd0, 0x2d, 0xdc, 0xf1, 0xfa, 0xf2, 0x00, 0x67, 0x32, 0xbf, 0x7b, 0x92, 0x1f, 0xed, 0x50, 0x35, 0x08, 0xfa, 0x15, 0x64, 0x44, 0x2d, 0x02, 0x44, 0xf2, 0x7d, 0x48, 0x12, 0xea, 0xb0, 0xa3, 0x66, 0xf3, 0xc0, 0x33, 0xb9, 0x36, 0x82, 0x88, 0x25, 0xf2, 0x89, 0xfc, 0x6d, 0x72, 0x49, 0x45, 0x3d, 0x3c, 0x78, 0x4a, 0xb3, 0x8c, 0xba, 0x36, 0x1d, 0x00, 0x7c, 0xcb, 0x05, 0x95, 0x20, 0xfa, 0x6b, 0xd2, 0x5b, 0xb0, 0x51, 0x43, 0xdc, 0xf2, 0x7d, 0x29, 0x2f, 0x2c, 0x7a, 0x70, 0xe0, 0xc6, 0xe0, 0xe1, 0xe3, 0xf9, 0xd5, 0x99, 0x33, 0xe1, 0xd4, 0xba, 0xba, 0xd3, 0xad, 0x60, 0x71, 0xf0, 0xcd, 0xd7, 0xc8, 0xfa, 0xc0, 0x0b, 0x48, 0x67, 0xf4, 0x3f, 0x77, 0xb4, 0xc0, 0x02, 0xfc, 0xfc, 0xa4, 0x5f, 0x03, 0xc9, 0xd3, 0x55, 0xe3, 0x2a, 0xee, 0x87, 0xfe, 0x06, 0x13, 0x33, 0xe9, 0xaf, 0x16, 0x68, 0xce, 0xba, 0x0e, 0x74, 0x0e, 0x0f, 0x14, 0x9c, 0x2a, 0x3c, 0x47, 0x11, 0xe3, 0x0f, 0x14, 0x1f, 0xa0, 0x63, 0xb4, 0xa6, 0x11, 0x3a, 0xf5, 0xce, 0x12, 0x0c, 0x3e, 0xf7, 0xd2, 0x5f, 0xcd, 0xef, 0x34, 0x98, 0x44, 0x68, 0x75, 0x11, 0x64, 0xa9, 0x10, 0x6b, 0x18, 0x83, 0xde, 0x26, 0xb5, 0x87, 0x82, 0x6e, 0x80, 0x76, 0x04, 0x38, 0x71, 0xf9, 0xbc, 0x8e, 0x36, 0x92, 0x72, 0x27, 0x7b, 0xd3, 0xc3, 0x3b, 0x69, 0xce, 0xc6, 0x95, 0x6c, 0xcc, 0xf0, 0xea, 0x3a, 0x42, 0x35, 0x69, 0x11, 0x00, 0x70, 0x93, 0x3f, 0xac, 0x05, 0x4d, 0xe8, 0x6f, 0xc5, 0x34, 0x04, 0xee, 0x12, 0x30, 0xa7, 0x7c, 0x43, 0x4c, 0x85, 0x8d, 0x4a, 0xc5, 0xb5, 0x6e, 0x93, 0x60, 0xb5, 0x34, 0x30, 0x01, 0xaf, 0xf3, 0x34, 0x7a, 0xfa, 0x30, 0x5c, 0xa1, 0xe4, 0x98, 0xf5, 0xa5, 0xaf, 0xf2, 0xf9, 0xa2, 0xd9, 0x52, 0x7c, 0x72, 0xa1, 0x8f, 0x46, 0xc7, 0xc6, 0xf8, 0xc2, 0x76, 0x92, 0x43, 0x17, 0x16, 0x17, 0xc6, 0x94, 0xca, 0xb9, 0xea, 0x51, 0x5b, 0xec, 0xdc, 0x13, 0x8a, 0x3f, 0x85, 0x71, 0xa4, 0x9a, 0xbd, 0x35, 0x56, 0xc3, 0xbb, 0x05, 0xc3, 0x27, 0xd0, 0x43, 0xd4, 0xd8, 0x56, 0x31, 0xcf, 0xd2, 0xe3, 0x59, 0x2c, 0x82, 0xc2, 0x2c, 0xa4, 0x89, 0xa3, 0xe9, 0x8a, 0xbd, 0x91, 0xc0, 0x5e, 0x70, 0x25, 0x38, 0xa0, 0xf6, 0xf9, 0xce, 0xe2, 0x61, 0x60, 0xde, 0x21, 0x8f, 0x54, 0xc7, 0x55, 0x67, 0xb0, 0x4b, 0x47, 0x5f, 0xa0, 0x34, 0xa3, 0x41, 0x55, 0x3d, 0x4e, 0x30, 0xfd, 0x2f, 0xf9, 0xe6, 0xf2, 0x4b, 0xf7, 0x3f, 0x31, 0xe8, 0x4b, 0xfb, 0x0f, 0x5d, 0x06, 0xbf, 0x27, 0x21, 0xd0, 0x5e, 0x97, 0x31, 0xc4, 0x57, 0x6c, 0xb2, 0x81, 0x9f, 0x5a, 0xd8, 0x7d, 0xa0, 0xb1, 0x06, 0x9d, 0x81, 0x8c, 0x37, 0x03, 0xa8, 0x4b, 0x9c, 0x28, 0x7d, 0x44, 0x86, 0x2a, 0x71, 0xb6, 0x87, 0x67, 0x40, 0xfe ],
-const [ 0x9d, 0x18, 0x98, 0xf0, 0x4e, 0x38, 0xda, 0x85, 0xc2, 0x7e, 0x63, 0x17, 0xc1, 0x9e, 0xe8, 0x1c, 0x3b, 0xdc, 0x6b, 0x1a, 0xe7, 0x21, 0x02, 0x62, 0x2a, 0x4e, 0xdb, 0xfa, 0x3a, 0xd0, 0x7d, 0xdb, 0x83, 0x75, 0x50, 0x5c, 0x4a, 0x7d, 0x60, 0xef, 0x90, 0xf5, 0x5e, 0x0b, 0x39, 0x40, 0xe8, 0x69, 0x6d, 0xf7, 0x09, 0x73, 0x3f, 0xf3, 0x04, 0xfa, 0x8c, 0xa7, 0x4d, 0x27, 0x26, 0xb3, 0xd9, 0xb4, 0x32, 0xb7, 0x97, 0x5b, 0xcf, 0x65, 0x3f, 0x8f, 0xf9, 0xdb, 0x4a, 0x6b, 0xac, 0x2f, 0x41, 0xe8, 0x4c, 0x4b, 0x3b, 0x52, 0x44, 0xfb, 0xa2, 0xfd, 0xee, 0x44, 0x35, 0x34, 0xb3, 0xf8, 0x53, 0x72, 0x73, 0x87, 0x76, 0xd5, 0x26, 0x18, 0xfe, 0xcf, 0xc4, 0xd8, 0x30, 0x1f, 0x63, 0x92, 0x7e, 0xff, 0x9f, 0x81, 0x08, 0x9f, 0x3f, 0x62, 0x64, 0xd3, 0x16, 0xcc, 0x9a, 0x08, 0x26, 0xc4, 0x73, 0x7d, 0x0c, 0x8d, 0xf4, 0xb0, 0x98, 0xbd, 0x25, 0x16, 0xbb, 0x96, 0x17, 0x0e, 0xa6, 0x92, 0x24, 0x18, 0x30, 0x40, 0x79, 0x42, 0x78, 0x4f, 0xd2, 0xe4, 0xcc, 0xe8, 0x85, 0x8d, 0xca, 0x42, 0xc2, 0x3d, 0xc5, 0x70, 0x19, 0xd5, 0x6b, 0x7d, 0x3c, 0xcb, 0xa4, 0xba, 0x07, 0x22, 0xbd, 0x57, 0xbd, 0x9a, 0xc5, 0x31, 0x95, 0x24, 0x37, 0xeb, 0x75, 0x98, 0xda, 0x40, 0xfd, 0xaa, 0xe6, 0x97, 0xc7, 0x1b, 0x68, 0xd8, 0xed, 0x2c, 0xe7, 0x7f, 0xcc, 0x58, 0x48, 0xef, 0x08, 0x42, 0xef, 0x08, 0xd1, 0xed, 0x27, 0xfb, 0x64, 0x2b, 0xc4, 0x5d, 0xd4, 0x58, 0x07, 0x7b, 0x0a, 0x47, 0xc1, 0xee, 0x0a, 0x7d, 0xbb, 0x6f, 0x79, 0x9d, 0x56, 0xec, 0x5c, 0x24, 0x6f, 0xdb, 0x23, 0x56, 0x85, 0xce, 0xe6, 0x79, 0x1e, 0x47, 0xee, 0x40, 0x66, 0xce, 0x77, 0x8a, 0x1a, 0x42, 0xb4, 0x4d, 0xa4, 0x6d, 0x14, 0xcc, 0x88, 0xda, 0xc4, 0x11, 0xfe, 0xeb, 0x75, 0x97, 0xe0, 0x26, 0x5f, 0x47, 0xc7, 0xd0, 0x86, 0xa5, 0x72, 0xbd, 0x3c, 0x4c, 0x67, 0x66, 0xe7, 0x98, 0xdc, 0x3c, 0x04, 0xa2, 0xd7, 0x3c, 0x6c, 0x71, 0x95, 0xc4, 0xd6, 0x6e, 0x29, 0xa5, 0x9e, 0x19, 0x65, 0x79, 0xc5, 0xfb, 0xfd, 0x37, 0x38, 0xdb, 0xea, 0x04, 0x55, 0x35, 0x0d, 0x4c, 0xab, 0xe8, 0x15, 0x12, 0x01, 0x2f, 0xa2, 0x84, 0x9a, 0xd2, 0xaa, 0xd3, 0xb8, 0x9e, 0x1d, 0x41, 0x5f, 0x12, 0xc4, 0x7c, 0x5b, 0x5b, 0x6f, 0x2a, 0x85, 0x83, 0x4f, 0xc5, 0x41, 0xe5, 0xa1, 0xa9, 0x4b, 0xe4, 0x8c, 0x6b, 0xb4, 0xdc, 0x4d, 0x6d, 0x27, 0x59, 0x91, 0xaf, 0x71, 0x87, 0x22, 0xe8, 0x40, 0xea, 0xc6, 0xd6, 0x2b, 0x4f, 0x65, 0xd2, 0xf3, 0x03, 0x69, 0xa7, 0x09, 0x42, 0x6a, 0xa4, 0x50, 0xf2, 0x0b, 0xf0, 0x23, 0x92, 0x1f, 0x1e, 0x9a, 0x6d, 0x11, 0x01, 0x09, 0x13, 0x82, 0xc2, 0xca, 0x09, 0x33, 0x2f, 0x3d, 0xc0, 0x26, 0x56, 0x0c, 0xc4, 0x00, 0x53, 0xb4, 0x36, 0xb2, 0x66, 0x41, 0x7c, 0x58, 0x49, 0x58, 0x37, 0x61, 0xc0, 0x7b, 0x75, 0xf1, 0x71, 0x89, 0x29, 0x83, 0xf6, 0x84, 0xd8, 0xd3, 0x31, 0x97, 0x94, 0xfb, 0xdf, 0x58, 0x2e, 0xdc, 0x70, 0x4a, 0xa8, 0xbf, 0x17, 0xa6, 0xe9, 0x3c, 0x1d, 0x5b, 0xb4, 0x5c, 0x7a, 0x53, 0xdb, 0xfa, 0xa6, 0xf8, 0xb0, 0x6f, 0xad, 0xf7, 0xbd, 0x6e, 0x82, 0x43, 0xb5, 0x2c, 0x95, 0x5e, 0xaa, 0xc4, 0xa7, 0xd4, 0x7f, 0xdb, 0xdd, 0x08, 0xa1, 0x7f, 0x14, 0x32, 0xf2, 0x55, 0x75, 0xa9, 0x06, 0xf4, 0x49, 0x5e, 0x92, 0x8c, 0x0e, 0xa9, 0x21, 0xcb, 0xca, 0x49, 0x09, 0x01, 0x9f, 0xa6, 0x9e, 0x82, 0xa0, 0x58, 0xa5, 0x4c, 0xe3, 0xed, 0x0c, 0xe9, 0xd7, 0xe7, 0xd8, 0x97, 0xd8, 0x05, 0x5e, 0xa7, 0x01, 0xc4, 0xb6, 0x23, 0x42, 0x24, 0x6d, 0xb3, 0xb2, 0xaf, 0x7a, 0xc1, 0x26, 0xb8, 0x73, 0xdc, 0x02, 0xe1, 0x01, 0x5a, 0x4f, 0xe0, 0x92, 0x42, 0x0e, 0x82, 0x4d, 0x69, 0xcc, 0xef, 0x4b, 0xda, 0x77, 0x31, 0x04, 0x7b, 0x70, 0xf0, 0x07, 0xee, 0xe1, 0x7f, 0xef, 0xb6, 0x51, 0x1d, 0x92, 0x9b, 0x76, 0x74, 0x7b, 0x4f, 0x4a, 0x66, 0x9b, 0x51, 0x61, 0x09, 0x3b, 0x12, 0x79, 0xf0, 0x35, 0x57, 0x53, 0xad, 0x64, 0xde, 0xc1, 0x93, 0x59, 0x44, 0x01, 0xc1, 0x4f, 0x26, 0x49, 0x5c, 0x61, 0x87, 0xa3, 0x1b, 0xfb, 0x71, 0xfb, 0x09, 0x8f, 0xdf, 0x76, 0x86, 0x89, 0xdb, 0x06, 0x8f, 0x84, 0xe4, 0x3c, 0x40, 0xbe, 0x92, 0x5d, 0x97, 0xc9, 0x7d, 0xb7, 0x7b, 0x84, 0x5a, 0x35, 0xfd, 0x4a, 0x67, 0x32, 0xdd, 0x69, 0x0a, 0x8b, 0x50, 0xd6, 0xb4, 0xf8, 0x00, 0x1f, 0x0c, 0x9c, 0x55, 0xa0, 0x4a, 0xda, 0xf3, 0xfa, 0xe0, 0x6b, 0x84, 0xc1, 0x60, 0xad, 0xb7, 0x75, 0x9a, 0x3e, 0x88, 0xb4, 0x04, 0xca, 0xc3, 0xad, 0x60, 0x21, 0xc3, 0xd8, 0x98, 0x8d, 0x80, 0xe5, 0xed, 0x62, 0xc9, 0xf2, 0x50, 0xd6, 0xcd, 0x00, 0x10, 0x13, 0xe0, 0xa8, 0xb6, 0x8b, 0x7c, 0x0a, 0x2e, 0x8c, 0x86, 0x07, 0x27, 0x14, 0xd3, 0xb0, 0xbb, 0xe6, 0xeb, 0xfd, 0x53, 0xdd, 0x0d, 0xc3, 0xc5, 0x81, 0x73, 0xe0, 0xc0, 0xd8, 0xd6, 0xb8, 0x6a, 0x7f, 0x35, 0xe6, 0x47, 0xf8, 0xd3, 0x2b, 0x5d, 0x46, 0x7f, 0xaa, 0x96, 0xb7, 0x17, 0x58, 0x65, 0x02, 0x4f, 0xae, 0xac, 0x91, 0xaf, 0xa1, 0xde, 0x20, 0xdb, 0xd3, 0x61, 0x87, 0x17, 0x0b, 0x36, 0xd4, 0x0a, 0xe3, 0xdb, 0x9d, 0xc2, 0xc0, 0x70, 0x95, 0xf9, 0x07, 0x1a, 0x5c, 0x97, 0x8e, 0xa5, 0x9c, 0x78, 0x51, 0x6d, 0x51, 0x6e, 0x67, 0x7e, 0x68, 0x8a, 0x34, 0xfa, 0x8c, 0x97, 0xdf, 0xbb, 0x3d, 0xe8, 0x06, 0x3a, 0x22, 0x54, 0xb1, 0xaf, 0xa0, 0x7e, 0x85, 0x7a, 0xab, 0x5a, 0x3b, 0xc2, 0xdc, 0xec, 0x50, 0x5c, 0xc4, 0x53, 0xfd, 0xee, 0x81, 0x07, 0x69, 0x54, 0x8e, 0x5f, 0x1e, 0x42, 0xe0, 0x56, 0xb9, 0x2b, 0x2e, 0x8e, 0xe6, 0x62, 0x90, 0x95, 0x8c, 0x80, 0x4b, 0x68, 0x45, 0x05, 0xeb, 0x35, 0x11, 0x42, 0x93, 0x65, 0x4b, 0x76, 0x92, 0xda, 0xdc, 0x37, 0x36, 0x75, 0xae, 0x13, 0xe5, 0xdc, 0x64, 0x78, 0x69, 0x7a, 0x48, 0xd1, 0x8c, 0xc7, 0x84, 0xf2, 0xe5, 0xc9, 0x96, 0xb6, 0xf1, 0xdb, 0xfe, 0xe6, 0x66, 0xad, 0x39, 0x5d, 0xc3, 0x8c, 0xf3, 0x6a, 0x2c, 0xe3, 0x79, 0x76, 0x75, 0x02, 0x6d, 0xe7, 0x7d, 0x1f, 0xbd, 0x44, 0xbd, 0x9a, 0xd5, 0x99, 0x20, 0x86, 0x14, 0x1d, 0x15, 0x64, 0x7d, 0x12, 0xe3, 0x31, 0xb0, 0xed, 0x3e, 0xa4, 0x18, 0xb7, 0x17, 0xb1, 0x65, 0xb3, 0xb8, 0x51, 0x3d, 0x41, 0x0f, 0x85, 0x2e, 0x02, 0x4a, 0x98, 0xe8, 0x3d, 0xa5, 0xa5, 0xa9, 0x81, 0x80, 0x5a, 0xf8, 0x8c, 0xb5, 0xfb, 0x96, 0x6c, 0x28, 0xaa, 0xb2, 0xe4, 0xa0, 0xe5, 0x5c, 0x11, 0xd5, 0x50, 0x3c, 0x4d, 0xca, 0xb5, 0x84, 0x54, 0x5c, 0x49, 0x23, 0xa6, 0x1b, 0x31, 0x3c, 0x2c, 0x5a, 0x44, 0xd6, 0x1d, 0x82, 0x13, 0xd5, 0x23, 0xac, 0x26, 0x29, 0xba, 0x6e, 0x89, 0x45, 0xd9, 0xf4, 0x88, 0xd2, 0xd5, 0x53, 0xb6, 0xa5, 0x82, 0x1b, 0x34, 0xef, 0x9b, 0x2b, 0x2f, 0xb4, 0x64, 0xca, 0xab, 0x7f, 0x8d, 0xf3, 0x7f, 0x53, 0x5a, 0xef, 0xa1, 0xe4, 0x01, 0x2a, 0xa4, 0x07, 0x54, 0x3f, 0x7f, 0x68, 0x9f, 0x55, 0x90, 0x7b, 0xd4, 0xae, 0xe1, 0xb5, 0xe5, 0x7d, 0xa9, 0xfb, 0x72, 0xf8, 0x16, 0x5b, 0xa4, 0xaf, 0x49, 0xfa, 0x59, 0x1c, 0xa3, 0x4d, 0x81, 0x7b, 0x3f, 0x8c, 0xc7, 0xdc, 0xbf, 0x64, 0x75, 0x76, 0x4c, 0xed, 0x91, 0x3e, 0xd8, 0xdb, 0x4c, 0xb8, 0xa6, 0xf8, 0x9e, 0x0d, 0x0d, 0xd2, 0x2a, 0x5f, 0x79, 0xb0, 0x67, 0x59, 0xb2, 0xcb, 0x01, 0x0a, 0x61, 0xbb, 0x7d, 0xf3, 0xd0, 0x30, 0x1d, 0x5e, 0xf1, 0xe2, 0x03, 0xf2, 0xa2, 0xcb, 0x98, 0x85, 0x2f, 0x93, 0x2f, 0x31, 0x18, 0x4c, 0xe6, 0xaa, 0x15, 0x5f, 0xcd, 0xce, 0x58, 0xc6, 0x4b, 0x7e, 0x12, 0x7c, 0xbd, 0xad, 0x38, 0x32, 0x5f, 0xb6, 0x87, 0x44, 0x70, 0xf3, 0xc6, 0xeb, 0x91, 0x8b, 0x4b, 0xb4, 0x6f, 0x8b, 0xc0, 0x31, 0xa1, 0x39, 0x27, 0xee, 0xd4, 0xa5, 0x1c, 0xa6, 0x25, 0x80, 0x5a, 0xb7, 0xce, 0x31, 0x81, 0xd4, 0x05, 0x26, 0x17, 0xfa, 0x21, 0x68, 0xcc, 0xa5, 0xff, 0x73, 0x02, 0x43, 0xa4, 0x44, 0x8c, 0xe9, 0x23, 0xb3, 0xb6, 0x45, 0xc1, 0x03, 0x86, 0xd4, 0x58, 0xb8, 0x42, 0x54, 0xf9, 0xa8, 0x32, 0x7d, 0xd5, 0x55, 0xa7, 0xec, 0x5e, 0x7a, 0x3d, 0x60, 0xa9, 0xe4, 0x5c, 0x28, 0x17, 0x83, 0x05, 0xdc, 0x34, 0xc1, 0xcb, 0x4c, 0xdf, 0x12, 0x1f, 0xb6, 0xac, 0xcd, 0xd1, 0x3c, 0x86, 0x3a, 0xd4, 0x94, 0x99, 0xec, 0x42, 0x02, 0x6f, 0x51, 0x9f, 0x83, 0x58, 0x87, 0x62, 0x4b, 0x10, 0x71, 0xb1, 0x72, 0x9c, 0x0b, 0x6d, 0xeb, 0x75, 0xfa, 0x6e, 0xb5, 0xe8, 0x68, 0x10, 0x55, 0xbd, 0x0e, 0xee, 0x83, 0x17, 0x92, 0xed, 0x24, 0x9b, 0x14, 0x7d, 0x78, 0xd4, 0x04, 0x1b, 0x95, 0xd6, 0x36, 0x1a, 0x14, 0x22, 0x38, 0xa4, 0x0a, 0xca, 0xe3, 0xfc, 0x3a, 0xd6, 0x30, 0x05, 0x88, 0xe5, 0x4d, 0x08, 0xb1, 0x18, 0xf0, 0xb2, 0x3a, 0x2b, 0xec, 0x5c, 0xa6, 0xe5, 0x02, 0x90, 0xec, 0xb3, 0xf9, 0xc8, 0x28, 0x90, 0xf0, 0x78, 0x91, 0x27, 0xf4, 0x4f, 0xab, 0x3c, 0xce, 0xba, 0xbe, 0x48, 0x1e, 0xab, 0x86, 0x63, 0xae, 0x98, 0x2c, 0x67, 0x00, 0xc6, 0x75, 0x53, 0x29, 0xc7, 0x3a, 0xed, 0xe2, 0x42, 0x18, 0xac, 0xdd, 0xf2, 0x68, 0xd4, 0x55, 0xf1, 0x71, 0xe3, 0xe9, 0x37, 0xdd, 0x2c, 0xaa, 0x5d, 0x6a, 0xc2, 0x73, 0xa7, 0xe2, 0x97, 0x79, 0x42, 0x4d, 0xe5, 0x22, 0xca, 0x65, 0xcd, 0x1b, 0x10, 0x4a, 0x3f, 0xa5, 0x19, 0x77, 0x19, 0x2f, 0x6a, 0xf5, 0x93, 0x2a, 0x82, 0xce, 0xda, 0x19, 0xa9, 0xc5, 0xfb, 0xe7, 0xe8, 0x44, 0x03, 0x7e, 0x59, 0x96, 0x64, 0x95, 0xa1, 0x56, 0x9b, 0xc9, 0xba, 0x28, 0x10, 0xf0, 0xf6, 0xa7, 0x3e, 0xaa, 0x40, 0x9e, 0x13, 0x38, 0xa5, 0x7a, 0x9a, 0x92, 0x14, 0xff, 0xd7, 0xb3, 0x62, 0x3b, 0xf3, 0x38, 0x91, 0xb8, 0x99, 0x29, 0x52, 0xf6, 0x9f, 0x17, 0xc8, 0x18, 0xe9, 0x67, 0x8f, 0xde, 0x8a, 0xed, 0xfd, 0xd3, 0x2d, 0xbd, 0xa8, 0xc8, 0xb4, 0x3d, 0x28, 0x80, 0x1e, 0x7f, 0x1e, 0xad, 0xae, 0xce, 0x75, 0x1b, 0x49, 0x87, 0xe7, 0x2c, 0x21, 0x2b, 0xc3, 0x84, 0x90, 0xb1, 0xee, 0x05, 0x46, 0x21, 0x28, 0xfe, 0xa7, 0x5e, 0x91, 0x9f, 0x6f, 0x43, 0x6c, 0xb1, 0x98, 0xf2, 0x22, 0x84, 0x7d, 0x69, 0x8a, 0x28, 0x3f, 0x57, 0x67, 0xdf, 0x68, 0x2d, 0x33, 0xd3, 0xce, 0x77, 0x1b, 0x05, 0xbb, 0x6d, 0x4a, 0x86, 0x4a, 0xc5, 0x6a, 0xe9, 0x14, 0xcc, 0x68, 0xf8, 0x0c, 0xb5, 0x78, 0xa6, 0xa8, 0x31, 0x5a, 0x45, 0x42, 0x40, 0xdb, 0xf9, 0xbd, 0x46, 0x9e, 0x6d, 0x6b, 0x61, 0x1c, 0xc4, 0x2e, 0xfa, 0xea, 0xd3, 0xde, 0x9a, 0x3b, 0x8d, 0xeb, 0xff, 0xa5, 0xbe, 0x44, 0x70, 0x28, 0xfd, 0x77, 0x4d, 0x6c, 0xdb, 0x19, 0xea, 0x4a, 0x61, 0x68, 0x9d, 0x8e, 0xba, 0x2f, 0x16, 0xfb, 0x2c, 0xea, 0xef, 0x90, 0x4d, 0x2b, 0x84, 0x0a, 0x73, 0x3c, 0x05, 0xaa, 0x6c, 0x06, 0xca, 0x38, 0x6f, 0x31, 0xe6, 0x48, 0x53, 0x8d, 0xfe, 0xbc, 0xff, 0xb1, 0x5c, 0x8a, 0x22, 0xe2, 0x3f, 0xc0, 0x24, 0x36, 0x75, 0xc5, 0x5c, 0xf8, 0x2c, 0xe1, 0x83, 0x4f, 0x06, 0xff, 0x68, 0x1b, 0x6b, 0xb2, 0xe6, 0x20, 0x23, 0x77, 0x13, 0x66, 0x24, 0x3a, 0xbb, 0xdf, 0xa8, 0x1b, 0x0d, 0x4b, 0x83, 0x71, 0x93, 0x59, 0xb4, 0x0f, 0x68, 0x0f, 0x3a, 0xc7, 0xa5, 0x6b, 0x29, 0x2d, 0x1c, 0x4b, 0xfc, 0x9d, 0x49, 0x8a, 0x2d, 0x80, 0x85, 0x6c, 0x03, 0xca, 0x7d, 0x3c, 0xac, 0xc7, 0xe3, 0x33, 0x8b, 0x18, 0x63, 0x9c, 0xd3, 0xf9, 0xd9, 0x36, 0x55, 0xc5, 0xc1, 0xda, 0x96, 0xbb, 0xee, 0x5d, 0x25, 0x02, 0x80, 0xb8, 0x2b, 0xeb, 0x10, 0x66, 0x44, 0x77, 0x2d, 0x0e, 0x8d, 0x19, 0x0c, 0x62, 0xff, 0xbc, 0x7b, 0x47, 0xfb, 0x08, 0x17, 0x36, 0x25, 0xe1, 0xbf, 0xe2, 0x76, 0x31, 0x48, 0x1b, 0x8d, 0xe8, 0x72, 0xf2, 0x46, 0x41, 0x1b, 0x1e, 0x8e, 0x46, 0xb3, 0x9e, 0x76, 0x96, 0xf0, 0xa0, 0x86, 0x66, 0xc3, 0xa2, 0x53, 0xc6, 0x8a, 0xd7, 0x53, 0x25, 0x87, 0xcc, 0xf1, 0x18, 0x91, 0x4b, 0xdd, 0x57, 0x09, 0x80, 0xa6, 0x08, 0x10, 0x5a, 0x8a, 0x41, 0xf7, 0x34, 0x8d, 0xc8, 0xf7, 0xb5, 0xc8, 0x1d, 0x23, 0xf4, 0x04, 0xba, 0x9a, 0xe0, 0x87, 0x99, 0x01, 0xe0, 0x2e, 0xf7, 0x31, 0xb6, 0xbc, 0x58, 0x2c, 0xa9, 0x72, 0xcb, 0x56, 0xe3, 0xe0, 0x6f, 0xe2, 0x18, 0xfa, 0x36, 0x8a, 0x68, 0x6e, 0xe9, 0x83, 0x87, 0x35, 0x6c, 0xb0, 0x1b, 0x68, 0x44, 0x16, 0x65, 0x56, 0x56, 0x90, 0x24, 0xd3, 0xf1, 0xc3, 0xb6, 0xd3, 0x0f, 0x55, 0x81, 0x37, 0xd8, 0x5a, 0x91, 0xe6, 0x68, 0x0f, 0x82, 0x20, 0xd2, 0xcb, 0xa1, 0x0f, 0x65, 0x32, 0x4e, 0x9f, 0x2e, 0xac, 0xa5, 0x90, 0xbd, 0x16, 0x5d, 0xca, 0x2c, 0xb7, 0xef, 0xf0, 0x5e, 0x75, 0xfb, 0x37, 0x85, 0x48, 0xe8, 0x79, 0xe7, 0xf0, 0xcc, 0x85, 0xe1, 0xe3, 0x8b, 0xba, 0x2c, 0x8a, 0x42, 0xd4, 0x5f, 0xac, 0xe6, 0x05, 0xb5, 0x2b, 0x28, 0x48, 0x11, 0xee, 0x9c, 0xf2, 0x3f, 0x1e, 0x1b, 0x89, 0x7d, 0x95, 0x66, 0xda, 0x3a, 0x93, 0x0b, 0x46, 0x1d, 0xb3, 0x8d, 0x5d, 0x49, 0x1e, 0xbf, 0xae, 0xe0, 0xff, 0x71, 0xdc, 0xc5, 0x37, 0x4e, 0xf5, 0xa7, 0x51, 0x05, 0x00, 0x3b, 0xb8, 0xa7, 0xd5, 0xc8, 0x27, 0x50, 0x32, 0xe9, 0x62, 0x0a, 0x0a, 0x8f, 0x24, 0xee, 0x20, 0x45, 0x58, 0x8d, 0xd5, 0xb8, 0x8b, 0x8e, 0x3e, 0x76, 0xa2, 0x98, 0x7a, 0xf6, 0xc8, 0x72, 0x43, 0xd9, 0xab, 0x68, 0xc2, 0x6f, 0xe8, 0xf1, 0xa8, 0x7d, 0xc3, 0x90, 0x7a, 0x3d, 0x1c, 0xf8, 0x2c, 0xa7, 0x9f, 0x73, 0xf2, 0xef, 0x3a, 0x84, 0x53, 0x4f, 0xd4, 0xcb, 0x7f, 0x06, 0x3c, 0x2a, 0xe2, 0xa1, 0x5f, 0x26, 0xf9, 0x79, 0xbf, 0x90, 0x65, 0x7d, 0x20, 0x64, 0x3e, 0x31, 0x84, 0xf1, 0xa9, 0xf7, 0x5a, 0x3a, 0xad, 0x8e, 0xf3, 0x9d, 0x42, 0xd8, 0x35, 0xb2, 0xab, 0xe0, 0x93, 0x76, 0x06, 0x1b, 0x3d, 0xa9, 0x22, 0xee, 0x93, 0x74, 0x90, 0x71, 0xe0, 0x4f, 0xfd, 0x73, 0x45, 0x22, 0xbf, 0xbe, 0xf3, 0xaa, 0xad, 0x9b, 0x9d, 0x1f, 0x34, 0x99, 0x2e, 0x14, 0xa7, 0x8b, 0xb7, 0x9e, 0xd7, 0xd0, 0xab, 0xb8, 0xe4, 0xd7, 0x4e, 0xe6, 0x52, 0xe1, 0x6b, 0x19, 0x5f, 0x09, 0x45, 0xd3, 0x94, 0x82, 0xd1, 0x8b, 0x9b, 0x21, 0x22, 0x53, 0x50, 0x1b, 0x25, 0xb8, 0x1a, 0x0f, 0x8e, 0xea, 0x7c, 0x47, 0x12, 0x1d, 0xe7, 0x3b, 0xd7, 0x2e, 0xd3, 0x56, 0x29, 0x8a, 0x0e, 0xfd, 0x6e, 0x4c, 0x53, 0xce, 0x5c, 0xa5, 0x1e, 0x25, 0x69, 0x81, 0xbf, 0xe5, 0x83, 0x67, 0xad, 0x75, 0x02, 0xa1, 0x1e, 0x08, 0xdb, 0x9e, 0xd4, 0x22, 0x16, 0x94, 0x3a, 0x58, 0x82, 0x69, 0xaf, 0x57, 0xa7, 0xd4, 0x22, 0x27, 0xfc, 0xc0, 0xdf, 0xb1, 0x5a, 0xf1, 0xa8, 0x7f, 0xb1, 0xe9, 0x08, 0xc4, 0xfa, 0x0d, 0xe4, 0x9c, 0x6c, 0x04, 0x53, 0x94, 0xf3, 0x60, 0xb0, 0x6d, 0xde, 0x80, 0xed, 0x1d, 0xd7, 0xb4, 0x29, 0x17, 0x19, 0xa3, 0x85, 0xcc, 0xdd, 0xea, 0x34, 0x72, 0x15, 0x06, 0xd2, 0x04, 0x5d, 0x74, 0xf7, 0x8a, 0x2f, 0x16, 0x0b, 0x9a, 0x56, 0xd9, 0x5c, 0x1f, 0xa5, 0x95, 0x6d, 0x59, 0xe8, 0x35, 0x92, 0x25, 0x1b, 0x17, 0xb9, 0x7f, 0xda, 0xb6, 0x8b, 0x45, 0x19, 0x86, 0xb4, 0x3d, 0x15, 0x1f, 0x7e, 0x5a, 0x8a, 0x9e, 0xa5, 0x3b, 0x27, 0x48, 0x67, 0xf5, 0x3f, 0x71, 0xda, 0x12, 0xc1, 0x9d, 0x82, 0xda, 0x6a, 0xe4, 0x23, 0xd1, 0x39, 0x9b, 0xd4, 0x80, 0x24, 0x30, 0x55, 0x78, 0x09, 0x56, 0xa2, 0x95, 0xe7, 0x62, 0xc8, 0x80, 0x4e, 0xf5, 0xf8, 0x77, 0x14, 0xdc, 0xda, 0x51, 0x4a, 0x34, 0x23, 0xbc, 0x6e, 0xd2, 0x6a, 0xca, 0xe2, 0xe2, 0x38, 0xac, 0x9d, 0xcd, 0x5e, 0xbd, 0x21, 0x61, 0x8b, 0xc2, 0xad, 0x2c, 0x1d, 0x6f, 0xb3, 0x28, 0x38, 0x2e, 0x8c, 0x9e, 0x15, 0x1d, 0x6b, 0x44, 0x9d, 0x55, 0x90, 0xa8, 0x37, 0x72, 0xbe, 0xd2, 0xde, 0x50, 0xee, 0x25, 0x76, 0x12, 0x45, 0x87, 0x60, 0x69, 0x44, 0xc2, 0x4c, 0x13, 0x3f, 0x29, 0x4e, 0xa1, 0x10, 0x7e, 0x35, 0x7e, 0x0c, 0x13, 0x18, 0x2d, 0x36, 0x30, 0x31, 0xd2, 0xb3, 0xb5, 0xee, 0xf4, 0x7e, 0x00, 0x46, 0x81, 0x5d, 0x11, 0x4a, 0x12, 0x14, 0xec, 0xfc, 0x71, 0xd8, 0x3f, 0x63, 0x59, 0x06, 0x45, 0xdf, 0x7c, 0x15, 0xea, 0xbb, 0xca, 0xca, 0x30, 0x01, 0xf1, 0xaa, 0xd1, 0x92, 0x20, 0xb5, 0x26, 0x75, 0x11, 0x51, 0x47, 0x70, 0x46, 0x85, 0x74, 0xd5, 0x93, 0x67, 0xb4, 0x9f, 0xdc, 0xd8, 0xbb, 0xbd, 0x20, 0x6e, 0x11, 0xae, 0xb6, 0xb2, 0x71, 0x4e, 0xd7, 0x8c, 0x70, 0xf0, 0x5d, 0xfb, 0x5f, 0xac, 0xca, 0x09, 0x71, 0xfb, 0x8c, 0xff, 0x21, 0x81, 0x80, 0xd5, 0xce, 0x29, 0xb4, 0xec, 0xa8, 0x77, 0x71, 0x00, 0xd0, 0x1a, 0x79, 0x58, 0xbb, 0xc1, 0x8d, 0x3f, 0xd8, 0x30, 0x32, 0xb8, 0x72, 0x93, 0xb5, 0x6e, 0xd7, 0x12, 0x6d, 0xea, 0xba, 0xa5, 0x40, 0x08, 0xd6, 0x2a, 0x68, 0xac, 0xd4, 0xb5, 0x77, 0xb1, 0x6f, 0x27, 0x99, 0x22, 0xd6, 0x02, 0x1a, 0xad, 0x51, 0x7b, 0x28, 0x54, 0x28, 0xd1, 0xd9, 0x66, 0xc1, 0xde, 0x70, 0xae, 0x08, 0xec, 0xdc, 0xea, 0x13, 0xc9, 0x81, 0x7f, 0x07, 0x1e, 0x3b, 0x6a, 0x35, 0xfc, 0xa0, 0x7a, 0x89, 0xb8, 0x86, 0xbc, 0x25, 0xf9, 0xc6, 0x37, 0x49, 0x0f, 0x3f, 0xda, 0x76, 0x86, 0x1d, 0xb3, 0xd3, 0xfb, 0x5b, 0x62, 0xcf, 0x2f, 0x86, 0xcc, 0x08, 0x5a, 0xc4, 0x14, 0x6c, 0xc2, 0x16, 0xc7, 0x9d, 0x8b, 0xda, 0x56, 0x9a, 0xd1, 0x94, 0xca, 0x9d, 0xf4, 0xed, 0xb3, 0x3f, 0x33, 0xfc, 0x61, 0xe2, 0x7d, 0xc5, 0x57, 0x50, 0x83, 0xff, 0xfd, 0xa0, 0x12, 0x1b, 0x95, 0x5a, 0xa0, 0x81, 0x70, 0xdb, 0x25, 0x1d, 0x62, 0xfa, 0x2c, 0x1a, 0x73, 0xeb, 0x29, 0xed, 0xd7, 0x64, 0x0d, 0x96, 0x21, 0xff, 0x18, 0x22, 0xb3, 0xe0, 0xee, 0x75, 0x79, 0x97, 0xee, 0x46, 0xd7, 0x47, 0xbf, 0x6b, 0xdf, 0x08, 0x2b, 0x57, 0xc8, 0x8b, 0x31, 0xe1, 0x9b, 0xfd, 0x55, 0x47, 0x30, 0x2d, 0x3b, 0x72, 0x59, 0xf0, 0x74, 0x7b, 0x5d, 0xc5, 0x98, 0x6f, 0xa8, 0xb5, 0x95, 0x4f, 0xc0, 0x7d, 0x46, 0x5b, 0x7b, 0xef, 0x48, 0x90, 0x70, 0x96, 0x09, 0x70, 0xab, 0x99, 0x21, 0x01, 0xa5, 0xe1, 0xe6, 0x18, 0x73, 0x7e, 0x3a, 0xd7, 0x3d, 0x47, 0xa8, 0x75, 0xf2, 0xc1, 0xb0, 0x3d, 0x3a, 0x43, 0x5e, 0xda, 0xac, 0x57, 0x22, 0xd1, 0x42, 0x62, 0xdb, 0x4f, 0x09, 0x88, 0x35, 0x25, 0x1d, 0xca, 0x35, 0x11, 0xd5, 0x71, 0x12, 0x3f, 0x3b, 0xb0, 0x47, 0x0f, 0xbf, 0x85, 0xe6, 0x19, 0x2c, 0xe0, 0x2f, 0x6f, 0xda, 0x07, 0x61, 0x21, 0x26, 0x39, 0xd0, 0x07, 0x1f, 0x91, 0x38, 0xba, 0x82, 0x2e, 0x51, 0xe4, 0xe9, 0x91, 0xa3, 0xba, 0x3f, 0x46, 0x9c, 0xc6, 0x77, 0xc7, 0xe0, 0xea, 0x7d, 0x9d, 0xe0, 0xa2, 0x6d, 0xc8, 0xae, 0x89, 0x04, 0x61, 0x10, 0x1f, 0x54, 0x7e, 0xd3, 0xc9, 0xbb, 0x56, 0x61, 0x19, 0x15, 0xa6, 0x96, 0x50, 0x31, 0x53, 0xd0, 0x21, 0x82, 0x50, 0x45, 0xb8, 0x17, 0xc2, 0x9a, 0xfb, 0xcd, 0x62, 0xb1, 0x10, 0xc4, 0x23, 0xc2, 0x1f, 0x0f, 0x16, 0xad, 0x59, 0xb0, 0x8a, 0x8e, 0x39, 0xc3, 0x77, 0x92, 0x09, 0xf9, 0x1d, 0x0a, 0xa9, 0x48, 0xe8, 0xbe, 0x8c, 0xe1, 0x97, 0x84, 0x03, 0x63, 0x9d, 0x11, 0xbe, 0x4e, 0xc7, 0x0e, 0x8f, 0xba, 0x20, 0x6f, 0x72, 0x49, 0x12, 0x00, 0xcb, 0x5a, 0xcd, 0x40, 0xee, 0x7f, 0xed, 0x73, 0xe4, 0x32, 0x56, 0xf3, 0x6d, 0xc3, 0x63, 0xc7, 0x41, 0x95, 0x41, 0x76, 0x9b, 0x8a, 0x95, 0x1d, 0xf8, 0xbc, 0x65, 0xc0, 0x1c, 0x6e, 0x35, 0xde, 0x57, 0x42, 0x70, 0x48, 0x06, 0xac, 0x0a, 0x33, 0x5c, 0xa6, 0x64, 0x8b, 0x63, 0xa5, 0x70, 0x8a, 0x3d, 0xcc, 0x15, 0x8a, 0xb0, 0x60, 0xd5, 0x17, 0xe2, 0x7d, 0xad, 0x49, 0x60, 0x07, 0x3c, 0x50, 0x65, 0xe2, 0x28, 0x51, 0x5a, 0x66, 0xbe, 0x71, 0x99, 0x0d, 0xd8, 0x2f, 0x76, 0x6f, 0x04, 0xf6, 0x80, 0x71, 0xe2, 0xf2, 0x04, 0xb9, 0xce, 0x24, 0xd3, 0x65, 0xbf, 0xb1, 0x45, 0xfc, 0x6f, 0x80, 0x7e, 0xa4, 0xbd, 0x03, 0xf0, 0x96, 0x4f, 0x55, 0x21, 0xd0, 0x7b, 0x86, 0xaf, 0x09, 0x68, 0x33, 0x91, 0xea, 0x70, 0x59, 0x9f, 0x7b, 0xc9, 0x6a, 0x55, 0xdc, 0x65, 0xa1, 0xd4, 0x35, 0x16, 0x93, 0x29, 0xef, 0xf6, 0x08, 0xd2, 0x25, 0x06, 0x08, 0x7e, 0x55, 0x15, 0x39, 0x15, 0x5c, 0xe4, 0x68, 0xf8, 0xa1, 0x87, 0x65, 0x8a, 0x90, 0x0e, 0x14, 0xef, 0x4a, 0x65, 0xc1, 0x14, 0x9a, 0x79, 0xb4, 0xef, 0x2c, 0x9c, 0x05, 0x08, 0xf9, 0x2b, 0xb2, 0x38, 0x06, 0x6e, 0xef, 0xb0, 0x4e, 0xbf, 0xbd, 0x3e, 0xfc, 0xef, 0xbe, 0xcc, 0xde, 0xe5, 0x48, 0x2a, 0x17, 0x88, 0xb8, 0x0d, 0x14, 0xe0, 0x09, 0x57, 0xc1, 0x77, 0xa5, 0x98, 0xfc, 0x06, 0x7a, 0xd5, 0x4a, 0x4d, 0x51, 0x89, 0xc8, 0x43, 0x5b, 0xea, 0x65, 0x6f, 0x0d, 0x6d, 0x4f, 0x96, 0x2e, 0x8c, 0xab, 0x96, 0x2f, 0xc7, 0x89, 0x92, 0xba, 0xe9, 0x17, 0x4f, 0x8d, 0x8c, 0x14, 0xde, 0x89, 0xdf, 0x88, 0x7c, 0x06, 0xa7, 0xb3, 0xb6, 0x6a, 0x84, 0x43, 0xd1, 0xfa, 0x76, 0xca, 0x68, 0xf0, 0x9f, 0x6e, 0x57, 0xcd, 0x4b, 0xe3, 0xd8, 0xf0, 0x2d, 0x96, 0xec, 0x68, 0xeb, 0x2b, 0xfd, 0x07, 0xde, 0x2a, 0xc1, 0xb7, 0x13, 0xf5, 0x61, 0x11, 0x95, 0xfe, 0xdb, 0x2c, 0xee, 0x36, 0xa5, 0xb3, 0xeb, 0xc9, 0x93, 0x3b, 0xa0, 0x08, 0xfa, 0xd3, 0xac, 0xa6, 0x16, 0xdc, 0xbe, 0x28, 0xa9, 0x1b, 0x58, 0x97, 0xe5, 0x0c, 0xd3, 0x78, 0x8c, 0x79, 0xa4, 0xfe, 0x56, 0x4c, 0xdd, 0x7d, 0x93, 0xa2, 0xf7, 0x22, 0x11, 0x20, 0xce, 0xe2, 0x40, 0x8a, 0xed, 0xb0, 0x94, 0x91, 0x0c, 0xf3, 0x2b, 0xed, 0xd7, 0x37, 0xb0, 0xac, 0xf1, 0x22, 0x7f, 0xca, 0x39, 0xaa, 0x09, 0x01, 0x4c, 0x86, 0x7a, 0xe2, 0x4b, 0xe2, 0x9a, 0x25, 0xde, 0x57, 0xf1, 0x3e, 0x78, 0x1a, 0x2f, 0x31, 0xdd, 0x74, 0xcb, 0xa6, 0xe2, 0x72, 0xe9, 0x40, 0x74, 0xdd, 0x81, 0x2b, 0xdc, 0x6c, 0xbe, 0xf4, 0x41, 0x39, 0xa4, 0x9e, 0x6f, 0x72, 0xf6, 0xf2, 0xd7, 0x51, 0x57, 0x16, 0xd6, 0x4e, 0xaf, 0x61, 0x3a, 0x93, 0xd0, 0x6e, 0x02, 0xb0, 0x5a, 0x6f, 0x65, 0x90, 0xdb, 0xc4, 0x16, 0xab, 0x3b, 0xcd, 0xc7, 0x7e, 0x58, 0xfc, 0xec, 0x38, 0xed, 0x2e, 0xc1, 0xb7, 0xb8, 0x3b, 0x8e, 0xb2, 0xdc, 0xcb, 0x29, 0x38, 0x84, 0x6c, 0xbd, 0x59, 0xc9, 0xe2, 0xcb, 0x23, 0xd6, 0xbe, 0x6e, 0xd0, 0x49, 0x33, 0xe3, 0x3d, 0xdd, 0x24, 0x48, 0x9e, 0x46, 0x81, 0xa4, 0x71, 0x5d, 0xd4, 0x28, 0xb0, 0x7d, 0x17, 0xb5, 0x4b, 0x2d, 0xc9, 0x9e, 0xd5, 0xff, 0x41, 0xae, 0x7d, 0xb8, 0x41, 0x6d, 0x41, 0xb0, 0xce, 0x9f, 0x5e, 0x7c, 0x3f, 0x0e, 0x0b, 0xcb, 0x95, 0x89, 0x66, 0x8e, 0x0a, 0x2d, 0xaf, 0x5c, 0xed, 0xe3, 0xb4, 0x14, 0xac, 0x2a, 0x8c, 0xc4, 0x33, 0x17, 0x88, 0xc9, 0x74, 0x99, 0x67, 0x38, 0x47, 0x02, 0xc9, 0x7d, 0x75, 0xc3, 0xe7, 0x42, 0x0f, 0x77, 0x80, 0x93, 0x05, 0x24, 0x17, 0x3f, 0xf3, 0xbd, 0x5b, 0x81, 0x3e, 0xeb, 0xe7, 0xdf, 0x60, 0x0c, 0x2b, 0x53, 0x80, 0x7d, 0xaa, 0xa9, 0x46, 0x14, 0x67, 0x28, 0xed, 0xf1, 0x99, 0x74, 0x9a, 0x77, 0xa6, 0xb3, 0xec, 0x95, 0x4f, 0xef, 0xd4, 0x4a, 0x28, 0xbb, 0xa7, 0x68, 0x4c, 0x1a, 0x71, 0x98, 0x4e, 0x9c, 0x8d, 0x9e, 0x73, 0xca, 0x72, 0xde, 0x1e, 0xc4, 0xd0, 0x1f, 0x8b, 0x29, 0xdc, 0x90, 0xc0, 0x37, 0xe7, 0x08, 0xc1, 0x34, 0x36, 0x92, 0x04, 0x0c, 0x0e, 0x29, 0x24, 0x3b, 0x0e, 0xc0, 0xd9, 0xed, 0xc2, 0x86, 0x28, 0x64, 0x74, 0x67, 0xd7, 0x9b, 0x45, 0xd6, 0x24, 0x29, 0x7d, 0xca, 0xb7, 0x67, 0x20, 0x06, 0xd4, 0xd5, 0xc2, 0x9e, 0xd5, 0xba, 0x9b, 0xb7, 0xd8, 0x0b, 0xde, 0x8e, 0xb5, 0x8e, 0x47, 0xbc, 0x33, 0x3f, 0xf3, 0xb8, 0x7b, 0xf3, 0x75, 0x9d, 0xcc, 0x3b, 0x26, 0x2d, 0x71, 0x8b, 0xbc, 0x16, 0xf0, 0x9c, 0x1f, 0x75, 0x85, 0x0e, 0x78, 0x99, 0xce, 0x52, 0x8a, 0x09, 0xc8, 0xc7, 0x45, 0xc8, 0xfa, 0x23, 0x98, 0xd7, 0xf0, 0x15, 0x88, 0xfc, 0xeb, 0x29, 0x7f, 0xc2, 0xd7, 0xeb, 0xe6, 0xc1, 0x7d, 0x4f, 0xf5, 0x1f, 0xfa, 0x50, 0xca, 0x57, 0x70, 0xd8, 0xb9, 0x39, 0xfb, 0xe0, 0xe4, 0x33, 0xe7, 0xd8, 0x0b, 0xce, 0x20, 0x49, 0xa5, 0x7b, 0xe9, 0xb9, 0x2f, 0x90, 0xd1, 0xcf, 0xc4, 0x8e, 0xe3, 0xb7, 0xee, 0xa5, 0x1e, 0xc8, 0xbc, 0x7a, 0x25, 0x64, 0x14, 0x27, 0x37, 0x20, 0x4b, 0x83, 0x60, 0x25, 0xf3, 0xa5, 0xf1, 0xd7, 0xf4, 0xa3, 0x2f, 0xb4, 0xdf, 0x9f, 0x48, 0x7e, 0x7e, 0x05, 0x8b, 0x9c, 0xb0, 0x0e, 0xd7, 0xbe, 0x73, 0x89, 0x54, 0xc0, 0x43, 0xda, 0x62, 0xd1, 0xa3, 0x43, 0xcf, 0xd4, 0xf9, 0x62, 0x4d, 0x06, 0x9e, 0xfb, 0x23, 0xe1, 0x36, 0xf8, 0x22, 0x41, 0x3d, 0xae, 0xdb, 0xc6, 0xe3, 0x62, 0x0f, 0x79, 0x1a, 0x0c, 0x67, 0xb2, 0xed, 0x5a, 0x65, 0x39, 0x13, 0xf8, 0x9b, 0xab, 0xc4, 0x0f, 0x1b, 0x1f, 0xcb, 0x0c, 0x2e, 0x0a, 0xdd, 0xa2, 0x49, 0x60, 0x29, 0x12, 0x3c, 0xfc, 0x30, 0xaa, 0xad, 0x42, 0xd7, 0x8b, 0xc5, 0x03, 0xba, 0xb0, 0x29, 0xa0, 0xc4, 0x2c, 0x2c, 0x73, 0xfd, 0xb3, 0x43, 0x6a, 0xa2, 0x5c, 0xb9, 0xf5, 0x7b, 0xa5, 0xa3, 0x23, 0x69, 0xb8, 0x17, 0x08, 0x3f, 0xed, 0x99, 0x61, 0xd2, 0x8f, 0xd6, 0x7b, 0x54, 0xe3, 0x95, 0x50, 0xdd, 0x66, 0xea, 0xf3, 0x4b, 0x57, 0xac, 0x2f, 0x4c, 0x75, 0x2a, 0x6b, 0xb9, 0x0a, 0x1a, 0xd1, 0x26, 0x28, 0xd2, 0xb0, 0xb7, 0x33, 0xbb, 0x1e, 0x35, 0x9f, 0x02, 0xe1, 0x60, 0xfb, 0x90, 0x90, 0x87, 0x2f, 0x3d, 0xf5, 0x57, 0x02, 0x40, 0xb6, 0xf1, 0xdf, 0xea, 0x34, 0x3f, 0xd8, 0x95, 0xb4, 0x87, 0xeb, 0xd7, 0xbd, 0x40, 0x84, 0xfb, 0xc0, 0x25, 0x44, 0xb1, 0xff, 0x89, 0x01, 0x04, 0xa7, 0xea, 0x0e, 0x8d, 0x3f, 0xc8, 0xbc, 0xe6, 0x46, 0xb7, 0x20, 0x62, 0x18, 0xb4, 0x17, 0xfb, 0x12, 0xb5, 0x88, 0x8c, 0xf6, 0x84, 0xe9, 0x41, 0x91, 0xcc, 0x05, 0x4b, 0x9b, 0x74, 0xfc, 0xd8, 0xde, 0x2d, 0x8b, 0x42, 0x9b, 0x47, 0x8d, 0x86, 0x29, 0xc9, 0xc2, 0xf9, 0xdf, 0xc0, 0xd0, 0x36, 0x34, 0xd7, 0x87, 0x5b, 0x25, 0x28, 0x69, 0x75, 0xd7, 0x52, 0x6a, 0x38, 0x7e, 0xcc, 0xf4, 0xf4, 0x7d, 0x79, 0x2e, 0xc4, 0xcf, 0x7c, 0x7e, 0x09, 0xa5, 0x4d, 0x4d, 0x16, 0x50, 0x0c, 0x0a, 0x2d, 0x62, 0x16, 0x71, 0xab, 0x10, 0xd7, 0x0d, 0x7f, 0xdb, 0xdf, 0xfb, 0xe0, 0x70, 0x37, 0xf2, 0x40, 0xcc, 0xf5, 0x80, 0x7b, 0xa3, 0x0e, 0x96, 0x55, 0x03, 0x6c, 0x47, 0x23, 0x35, 0x40, 0xcd, 0xc8, 0xe4, 0x9a, 0xcd, 0xe3, 0x80, 0x37, 0xdc, 0x47, 0xe5, 0x99, 0x41, 0xac, 0x38, 0x5d, 0xfc, 0xa4, 0x12, 0xca, 0x08, 0xd0, 0xe1, 0xa6, 0xde, 0x53, 0x8b, 0x4d, 0x3a, 0x87, 0x54, 0x04, 0x21, 0xef, 0x01, 0x8a, 0x23, 0x6d, 0x3d, 0xf0, 0xde, 0xb5, 0x3d, 0xab, 0xc3, 0x02, 0xa0, 0xe8, 0x1d, 0x08, 0x99, 0x1f, 0x4e, 0x29, 0x4f, 0xeb, 0x5c, 0xeb, 0x84, 0x19, 0xad, 0xaa, 0x75, 0xfe, 0x0f, 0x8a, 0x02, 0x0e, 0xfc, 0xb0, 0x0f, 0xab, 0x1b, 0xb2, 0x2a, 0x3b, 0x09, 0x4b, 0x6e, 0x7d, 0x5a, 0x54, 0xa7, 0x1d, 0xdb, 0xef, 0xb7, 0x86, 0x1a, 0x06, 0x38, 0xf7, 0x29, 0xf4, 0x62, 0xd9, 0x9e, 0x81, 0x2f, 0x50, 0xde, 0x14, 0xbe, 0x10, 0x9c, 0x24, 0xf5, 0x72, 0x9c, 0xf0, 0x6b, 0xc6, 0xbd, 0x70, 0x85, 0xeb, 0x36, 0x8b, 0xdf, 0x1e, 0x20, 0x8a, 0xed, 0x10, 0x35, 0xcd, 0xe2, 0x3b, 0xd7, 0xbc, 0xd0, 0x75, 0x54, 0x01, 0x11, 0xc6, 0x68, 0xf5, 0xe7, 0x77, 0x03, 0x57, 0x5f, 0x6b, 0x4d, 0x44, 0x7b, 0xb3, 0xe7, 0x63, 0x8f, 0x5c, 0x74, 0x61, 0xec, 0x8b, 0x59, 0x9d, 0xbc, 0xcd, 0xc0, 0x24, 0x2d, 0xa8, 0xe3, 0xdf, 0xd2, 0x76, 0x87, 0x0b, 0x46, 0x73, 0xc6, 0xea, 0x12, 0x14, 0x12, 0xb8, 0xd0, 0x9a, 0x77, 0xe1, 0x91, 0xe8, 0x20, 0x71, 0x7d, 0x91, 0x1d, 0xcc, 0xb9, 0x36, 0x64, 0x9f, 0x8e, 0x0f, 0x15, 0x16, 0xc7, 0xc7, 0x02, 0x50, 0x5a, 0x8d, 0x6e, 0x10, 0x4b, 0x68, 0x15, 0xb5, 0xce, 0xca, 0x6d, 0x6c, 0xac, 0x69, 0x2c, 0xa4, 0xe7, 0x4a, 0x0a, 0xc2, 0xa1, 0x1e, 0xc8, 0x16, 0x3a, 0xd2, 0x71, 0x0e, 0xb9, 0x62, 0xe0, 0xaa, 0x6d, 0xee, 0x82, 0x30, 0xd4, 0x0f, 0x5d, 0x21, 0xbb, 0x6b, 0x51, 0x6b, 0xa7, 0x87, 0x9e, 0xe0, 0x74, 0xdd, 0xa7, 0xe7, 0x3c, 0x2f, 0xf6, 0x72, 0x7a, 0x1a, 0x7f, 0x30, 0x6f, 0xee, 0x29, 0x03, 0xc5, 0xbd, 0x8a, 0xb4, 0x73, 0xb2, 0xf2, 0xe6, 0xe0, 0xa4, 0xac, 0x48, 0x4b, 0xeb, 0x80, 0x0f, 0x6a, 0x73, 0x7c, 0xa4, 0x51, 0x0f, 0xf5, 0x99, 0x96, 0x0f, 0xc8, 0xe2, 0xb3, 0x14, 0xe5, 0x42, 0xab, 0x23, 0x0f, 0x03, 0xf1, 0xf9, 0xdd, 0xea, 0x85, 0x9e, 0x05, 0x6a, 0x60, 0x3d, 0xd9, 0x18, 0x12, 0x33, 0x12, 0x5f, 0xaa, 0x66, 0xcd, 0x75, 0xd6, 0xd8, 0xd3, 0x8d, 0x4b, 0x7c, 0x1d, 0x4f, 0x67, 0x48, 0x98, 0x85, 0x15, 0x8b, 0x25, 0x17, 0xf2, 0x81, 0xe4, 0x39, 0xae, 0x24, 0xb2, 0xe3, 0xb4, 0x46, 0xf0, 0x81, 0x0d, 0xdd, 0x87, 0xed, 0x81, 0x9e, 0x28, 0x9a, 0x00, 0xcd, 0xd9, 0x12, 0x41, 0x53, 0xad, 0xa2, 0xa9, 0x11, 0xd2, 0x53, 0x6e, 0x74, 0xd1, 0x1d, 0xfc, 0x49, 0x12, 0x58, 0x98, 0xd3, 0x9f, 0x73, 0x43, 0x1b, 0x29, 0xe8, 0xe1, 0x88, 0x50, 0x6f, 0x9a, 0xaf, 0x1f, 0x73, 0x81, 0x6c, 0xd6, 0xc2, 0x73, 0x32, 0xed, 0x88, 0x42, 0x9f, 0x55, 0x7e, 0x13, 0x54, 0x01, 0x5f, 0x05, 0x03, 0xa5, 0x9c, 0x14, 0xc9, 0xbe, 0x50, 0x3c, 0xbf, 0xd2, 0x76, 0xe1, 0xcc, 0xf9, 0x5a, 0x6e, 0xbd, 0x9c, 0x4d, 0x3d, 0x97, 0x7d, 0x9d, 0xb7, 0x2b, 0xf7, 0xc4, 0xbc, 0xec, 0x88, 0xe0, 0x45, 0xfe, 0x8c, 0x63, 0x47, 0x8f, 0x4b, 0x0c, 0xdb, 0x6a, 0x36, 0x16, 0x9d, 0xc9, 0x6e, 0xaf, 0x51, 0x6b, 0x86, 0xab, 0xcd, 0xe7, 0x8a, 0x7a, 0x13, 0x40, 0x40, 0x57, 0xbd, 0xb9, 0xad, 0xc3, 0x9e, 0xeb, 0xdb, 0x32, 0xa6, 0x14, 0xda, 0x04, 0x06, 0xb2, 0x05, 0xb6, 0x95, 0x51, 0x86, 0x5a, 0x72, 0xa1, 0x1d, 0x44, 0xeb, 0xcb, 0x1d, 0x07, 0x9e, 0x05, 0xb7, 0xa0, 0xde, 0x65, 0x7a, 0xf0, 0x59, 0xf2, 0x1b, 0x70, 0xf7, 0x01, 0x72, 0x20, 0x05, 0xbf, 0xc6, 0xc0, 0x92, 0x0a, 0x4a, 0x43, 0x19, 0x85, 0xe7, 0x81, 0x61, 0xeb, 0x3c, 0x2c, 0xa2, 0xa3, 0xe4, 0x05, 0xe9, 0x95, 0xf7, 0x4f, 0xbd, 0x3d, 0xd3, 0x84, 0x03, 0xfd, 0x1c, 0x48, 0x1f, 0xb8, 0x01, 0x9b, 0x5c, 0x9c, 0xc1, 0x52, 0x8e, 0x3f, 0x6e, 0xc8, 0xf6, 0xee, 0xf2, 0xd1, 0x65, 0x42, 0x4f, 0xef, 0xa4, 0xf3, 0x2b, 0xc9, 0x14, 0xf1, 0x8b, 0xd8, 0x92, 0xb1, 0xdf, 0x64, 0x9d, 0xc5, 0x3f, 0xaf, 0xbb, 0xb0, 0xf4, 0x70, 0x18, 0xf8, 0x3a, 0x82, 0x71, 0x7d, 0x44, 0xde, 0x30, 0x08, 0x81, 0xc7, 0xd9, 0x27, 0x1e, 0x44, 0xa4, 0x39, 0xcc, 0xd3, 0x6c, 0xc5, 0xc3, 0x5c, 0xc7, 0x10, 0x06, 0x64, 0x77, 0xee, 0xe9, 0x83, 0x01, 0xd8, 0xd1, 0x18, 0x9b, 0x3f, 0x3c, 0x3b, 0x4b, 0x20, 0x01, 0xf3, 0x4e, 0xd9, 0xd8, 0xa9, 0xb7, 0x3b, 0x1c, 0xdd, 0x58, 0xe0, 0xd0, 0x18, 0xe5, 0xbe, 0xe1, 0x22, 0x57, 0xfd, 0xaa, 0x74, 0x8f, 0x06, 0xbd, 0xf0, 0x3c, 0xdd, 0xe1, 0xd0, 0xfe, 0xb0, 0x57, 0xdd, 0xcc, 0xb0, 0x62, 0xe1, 0x93, 0x1f, 0x06, 0x5e, 0x1f, 0xaa, 0x0f, 0x80, 0x3f, 0xfa, 0x55, 0x51, 0x24, 0x86, 0x3f, 0x2c, 0x0b, 0xab, 0x86, 0x74, 0x1c, 0xfe, 0x3b, 0x85, 0x91, 0xe1, 0x0c, 0xeb, 0x1a, 0x54, 0xc3, 0xd3, 0x80, 0x0e, 0x0f, 0xbe, 0x89, 0xcd, 0x87, 0x7d, 0x1d, 0xea, 0xec, 0x59, 0xa6, 0x30, 0xae, 0x92, 0xbd, 0xee, 0xb2, 0x0b, 0x02, 0x4b, 0x53, 0x43, 0x4b, 0xda, 0xa7, 0x87, 0x02, 0x6e, 0x03, 0x66, 0xc8, 0x30, 0xc1, 0x66, 0x5e, 0xee, 0x40, 0xf5, 0xc6, 0xb6, 0x2d, 0xa2, 0xa5, 0xa4, 0x01, 0x8d, 0xec, 0xf8, 0xcb, 0x1c, 0xb7, 0x6b, 0x30, 0xf0, 0x76, 0xc4, 0xb0, 0x18, 0x4a, 0xa6, 0x2b, 0x84, 0xb2, 0xac, 0xa3, 0xbc, 0x66, 0xb8, 0x43, 0xd2, 0x83, 0x87, 0xa0, 0x94, 0xe9, 0x89, 0x40, 0x07, 0xe1, 0xf0, 0x59, 0x11, 0x04, 0x07, 0xda, 0x76, 0x58, 0xc6, 0xaf, 0x06, 0xbb, 0xa3, 0x41, 0x14, 0x85, 0xaa, 0x3d, 0x29, 0x69, 0xd0, 0x97, 0xfa, 0x9c, 0x85, 0xce, 0x98, 0x39, 0x88, 0x71, 0xe7, 0xe5, 0xff, 0xe2, 0x51, 0xaf, 0xc7, 0x5a, 0xbb, 0x39, 0x09, 0x2d, 0xb8, 0x1d, 0x0e, 0x50, 0xfd, 0x8a, 0x54, 0x18, 0x16, 0x2e, 0xe1, 0x44, 0x57, 0x59, 0xd7, 0x3e, 0x14, 0x5f, 0x49, 0x9e, 0x15, 0x3e, 0x4d, 0xf0, 0x44, 0x80, 0x52, 0xb7, 0xa9, 0x63, 0xb4, 0xb2, 0x98, 0x38, 0x8e, 0x5d, 0x29, 0x09, 0xd0, 0xbb, 0xe9, 0x7e, 0x91, 0x53, 0xcf, 0x01, 0xa6, 0x78, 0x72, 0x21, 0x73, 0xce, 0x78, 0x34, 0x01, 0x0a, 0x52, 0x41, 0x51, 0xf9, 0x27, 0x1d, 0xf0, 0xc4, 0x0d, 0xd3, 0xcc, 0x72, 0x7f, 0x49, 0x46, 0xae, 0x0c, 0x21, 0x88, 0xcb, 0x4c, 0xde, 0x19, 0x05, 0x18, 0x48, 0xae, 0x0a, 0xfa, 0x11, 0x44, 0xb9, 0xe3, 0xb8, 0x6b, 0x29, 0x1c, 0xae, 0xe5, 0xed, 0x7f, 0xb8, 0x6f, 0x96, 0xe7, 0x94, 0xdf, 0x7a, 0xe5, 0xdf, 0x6f, 0xb4, 0xb5, 0x36, 0x59, 0x6c, 0x70, 0x9c, 0xa4, 0x59, 0x82, 0x1b, 0x3d, 0x83, 0x5f, 0xae, 0x49, 0x4e, 0x72, 0x5f, 0xba, 0xb4, 0x56, 0xad, 0x20, 0xd2, 0x49, 0x30, 0xc2, 0xa6, 0xde, 0x80, 0xee, 0x17, 0xf2, 0x52, 0x8d, 0x35, 0xe0, 0xe4, 0xfa, 0xc3, 0xf9, 0x9c, 0x15, 0xf3, 0x2e, 0xec, 0x93, 0x70, 0x10, 0x78, 0x98, 0xa1, 0xfb, 0x7b, 0x87, 0x2d, 0x8d, 0x66, 0x19, 0xba, 0x5d, 0xcb, 0xac, 0xfb, 0xea, 0x7a, 0xde, 0xe9, 0xd2, 0xea, 0x5b, 0x50, 0x45, 0xda, 0xf3, 0x8e, 0xb8, 0x37, 0xf0, 0x97, 0xde, 0x41, 0xa6, 0x3d, 0xd4, 0xea, 0x4b, 0xaf, 0x9c, 0x7e, 0x09, 0x3f, 0xcc, 0x89, 0x52, 0x68, 0x87, 0xf6, 0x74, 0x0f, 0xad, 0x74, 0x6d, 0x09, 0x4f, 0x1e, 0x00, 0xde, 0x66, 0x5a, 0x08, 0xcc, 0xc4, 0x01, 0x0d, 0x0f, 0x4a, 0xc1, 0x15, 0x60, 0x5c, 0xc0, 0xbc, 0xbc, 0x92, 0x82, 0x87, 0x66, 0xb0, 0x0d, 0x76, 0x2f, 0xd9, 0x4b, 0xd8, 0xf5, 0xff, 0xaf, 0x63, 0x6a, 0x9e, 0x1b, 0x84, 0x16, 0xaa, 0x02, 0xf4, 0xa0, 0xc6, 0xca, 0x8c, 0x49, 0xb6, 0x74, 0x5a, 0xb9, 0x17, 0x7e, 0xf4, 0xfe, 0x4d, 0x08, 0x0c, 0xd2, 0xbe, 0x37, 0x45, 0x1c, 0x3e, 0xd7, 0x45, 0xba, 0xc9, 0x44, 0x0c, 0x7e, 0x78, 0x8a, 0x84, 0x76, 0xae, 0xcb, 0x59, 0x71, 0x92, 0xe1, 0x0a, 0xbe, 0xc3, 0x45, 0x41, 0x37, 0x47, 0x2f, 0x60, 0x7f, 0xc4, 0xff, 0x5c, 0x87, 0xf2, 0xdc, 0xce, 0x57, 0x50, 0x9b, 0x47, 0x0b, 0x16, 0xe2, 0xe4, 0x1b, 0x6b, 0x8d, 0x23, 0xe0, 0xd9, 0x50, 0xf5, 0x54, 0xfe, 0x9e, 0x15, 0x1a, 0x84, 0xca, 0x97, 0xbe, 0x53, 0x6d, 0xc4, 0x3d, 0x04, 0x07, 0x25, 0xc8, 0x99, 0xe9, 0xde, 0xc5, 0x6c, 0x52, 0x3e, 0x17, 0x66, 0xd8, 0x93, 0x9f, 0x71, 0x09, 0x43, 0x02, 0x30, 0x53, 0x18, 0xad, 0xed, 0x21, 0xdc, 0x17, 0xd3, 0x47, 0x26, 0x46, 0x5d, 0xa0, 0x73, 0x95, 0x0e, 0xf5, 0x78, 0xb4, 0x63, 0x21, 0xb7, 0xf0, 0x06, 0x73, 0x51, 0xb5, 0x44, 0x54, 0x1b, 0x51, 0xc1, 0x2a, 0xf3, 0xfa, 0x6a, 0x7c, 0x55, 0x13, 0xac, 0x56, 0x29, 0xab, 0xe3, 0xef, 0xdf, 0x47, 0x16, 0x89, 0xbe, 0xe1, 0xe1, 0x99, 0x79, 0x30, 0xb2, 0x28, 0x04, 0x2a, 0x39, 0x79, 0xa5, 0xc8, 0x19, 0xec, 0x4e, 0x09, 0xe4, 0x22, 0x2a, 0x39, 0x46, 0x62, 0x76, 0x73, 0x80, 0x3b, 0x92, 0x65, 0x18, 0x6b, 0x58, 0x53, 0xcf, 0x00, 0xac, 0x5e, 0xd4, 0xbd, 0x54, 0x07, 0x37, 0xbf, 0x0b, 0xef, 0xa0, 0x61, 0xd0, 0xe0, 0x41, 0x5c, 0x84, 0x11, 0x09, 0x33, 0xb4, 0xa6, 0x1b, 0xce, 0xb4, 0x77, 0x7e, 0x64, 0xed, 0x12, 0x16, 0x9f, 0x77, 0x03, 0xd3, 0xfb, 0xeb, 0x53, 0x28, 0x70, 0x72, 0x4e, 0xbf, 0x50, 0x22, 0x89, 0x6b, 0x72, 0x8b, 0x24, 0x5e, 0x90, 0x8c, 0x4d, 0x9c, 0xee, 0x6c, 0x05, 0xaf, 0x3c, 0x25, 0x27, 0x9c, 0xbe, 0x03, 0xa6, 0x17, 0xaa, 0x6e, 0x16, 0xf3, 0xd2, 0x04, 0x6e, 0xdc, 0x82, 0xec, 0x0c, 0x48, 0xac, 0x66, 0xf9, 0xab, 0x42, 0xa6, 0x6f, 0xea, 0xe4, 0xe2, 0x98, 0x13, 0xbb, 0xaa, 0x99, 0x4b, 0xa5, 0x78, 0xcf, 0x08, 0x92, 0x88, 0x58, 0x80, 0x2e, 0xe9, 0xd6, 0x61, 0xc0, 0xd5, 0x6f, 0xc2, 0x51, 0x3e, 0x19, 0x59, 0x12, 0xa9, 0x14, 0xef, 0xf8, 0x3f, 0xb7, 0x12, 0xa9, 0x21, 0x70, 0x0a, 0x9b, 0xfd, 0x07, 0x0e, 0x7a, 0xdf, 0x22, 0xb7, 0xcb, 0x49, 0x0e, 0xb4, 0xd0, 0x85, 0xbc, 0xc0, 0xab, 0x3a, 0x0a, 0xd1, 0xc5, 0x3e, 0x44, 0x92, 0x71, 0xab, 0xeb, 0x14, 0xcd, 0x35, 0xb5, 0xc0, 0xe9, 0xba, 0xd4, 0x91, 0x2c, 0x1b, 0x7b, 0x80, 0xf3, 0x4b, 0x9f, 0x3f, 0x7a, 0xa5, 0xfb, 0x29, 0x00, 0x83, 0x56, 0x7a, 0x26, 0x0c, 0x08, 0xbb, 0x99, 0x4d, 0xbb, 0x81, 0xf0, 0x8c, 0x6f, 0x57, 0xd8, 0xd8, 0xc1, 0xf9, 0x6e, 0xe5, 0x6c, 0xc3, 0xec, 0x17, 0x10, 0x68, 0x88, 0xdd, 0x32, 0xe7, 0x99, 0x40, 0x84, 0xbb, 0xfc, 0xbc, 0x67, 0x52, 0xb6, 0x4e, 0xaf, 0xc1, 0xda, 0xce, 0xa6, 0xb6, 0xae, 0x7f, 0x53, 0xae, 0x09, 0xe5, 0xfc, 0x68, 0xff, 0xd6, 0xe9, 0x99, 0xc0, 0xd4, 0x6b, 0xe1, 0xbe, 0x9a, 0x1d, 0xfe, 0x0e, 0xf5, 0x6a, 0x40, 0x11, 0xd5, 0x4f, 0x3c, 0x53, 0xa4, 0x62, 0xc5, 0xb3, 0xd6, 0x14, 0x18, 0xc5, 0xc2, 0x33, 0x57, 0x74, 0xb0, 0xb3, 0x39, 0xec, 0x33, 0xad, 0xff, 0xb7, 0xb9, 0xa8, 0xaa, 0x25, 0x60, 0x18, 0x6b, 0xf2, 0x0b, 0x24, 0x5b, 0x23, 0xb6, 0xac, 0x6c, 0x31, 0x06, 0x8b, 0x9f, 0x69, 0x24, 0x19, 0x78, 0x93, 0xcc, 0xf4, 0xb0, 0xd2, 0xa1, 0x01, 0x29, 0xcb, 0xc4, 0xad, 0x27, 0x09, 0xa4, 0x79, 0xbc, 0xa0, 0x18, 0xb5, 0x84, 0x11, 0xab, 0x8b, 0x93, 0x6e, 0x36, 0x40, 0xac, 0xbf, 0xb5, 0xb7, 0xb3, 0xa3, 0x53, 0x37, 0x65, 0x3b, 0xc7, 0x6d, 0x47, 0x43, 0xe3, 0xb5, 0xdc, 0x82, 0x6a, 0x95, 0x1b, 0x65, 0x23, 0x8a, 0x20, 0xe7, 0x2b, 0x08, 0x22, 0xb3, 0x8f, 0xbc, 0xa5, 0x8d, 0x1a, 0x14, 0xf1, 0xee, 0x6c, 0x01, 0xc2, 0xee, 0x4c, 0xfc, 0x41, 0x67, 0x40, 0x47, 0x33, 0x58, 0x5a, 0x75, 0x71, 0x87, 0x54, 0x2c, 0x98, 0x6b, 0xe0, 0x2a, 0x01, 0x48, 0x39, 0x86, 0xf4, 0x9c, 0xfe, 0x38, 0x18, 0xba, 0x40, 0xdc, 0x2e, 0xb5, 0xda, 0xb3, 0xff, 0x7f, 0x00, 0xeb, 0x93, 0x52, 0x1b, 0x20, 0xa4, 0x4f, 0xd4, 0x22, 0x52, 0x66, 0x6f, 0xf9, 0x19, 0x75, 0x5b, 0x26, 0xff, 0xb4, 0x07, 0x2c, 0x12, 0x50, 0xf7, 0x4f, 0x11, 0x56, 0x16, 0x9c, 0x6a, 0xd3, 0x4e, 0x29, 0x64, 0x3a, 0x56, 0x9e, 0x9e, 0x05, 0xcb, 0xf4, 0xb8, 0x9f, 0x83, 0x7d, 0x50, 0x82, 0x1e, 0x25, 0x30, 0x9c, 0xdd, 0xf7, 0xc5, 0xf8, 0xb8, 0xe3, 0xd4, 0x9a, 0xaa, 0xbe, 0x68, 0xab, 0x50, 0x8a, 0x0f, 0xd6, 0xb2, 0xf8, 0x45, 0xf1, 0x61, 0x2b, 0x31, 0xe0, 0xc2, 0xbf, 0x8f, 0xb6, 0xa9, 0x0a, 0xee, 0x1e, 0x29, 0xa1, 0x1b, 0xfa, 0xab, 0x1e, 0xdd, 0x49, 0x3e, 0x21, 0xe2, 0x4e, 0x2e, 0x95, 0xfa, 0xef, 0xd8, 0x35, 0x83, 0x5b, 0xbc, 0x4e, 0x24, 0xef, 0xd4, 0xc6, 0xbf, 0x5b, 0x25, 0x5d, 0xa0, 0x00, 0x93, 0x33, 0xfb, 0x9d, 0xf9, 0x8b, 0x95, 0x2b, 0x79, 0xce, 0xc1, 0x05, 0x11, 0xd3, 0x8e, 0x4c, 0x6f, 0x5d, 0x3f, 0x8a, 0x07, 0xe5, 0xfb, 0x95, 0x62, 0x9a, 0xc6, 0xb7, 0xb9, 0xa7, 0xb0, 0x0b, 0xc2, 0xb4, 0x4c, 0x2a, 0xca, 0xaf, 0x64, 0x07, 0x04, 0xcc, 0xeb, 0x18, 0x21, 0xca, 0x33, 0xb7, 0x20, 0x79, 0x61, 0xc7, 0x68, 0x79, 0x1d, 0x9a, 0x14, 0x44, 0x8e, 0x12, 0x8e, 0x6e, 0x85, 0x07, 0x5f, 0x2c, 0xf8, 0xe9, 0x45, 0x14, 0xb3, 0xa7, 0x86, 0x23, 0x4a, 0xcf, 0x85, 0x04, 0x52, 0xf6, 0x93, 0x8f, 0xd0, 0x5a, 0x07, 0x91, 0xf2, 0xc6, 0x91, 0xcb, 0xfd, 0xb6, 0xcb, 0x3d, 0x87, 0xbc, 0x11, 0xa4, 0xe6, 0x22, 0x93, 0x41, 0xe8, 0xd1, 0xa8, 0xdc, 0xc5, 0x71, 0x66, 0x09, 0x51, 0xd2, 0x6f, 0xaa, 0x76, 0x8b, 0x0d, 0xb5, 0xe2, 0xe1, 0x82, 0x37, 0xfd, 0xea, 0x99, 0x99, 0x1e, 0xf2, 0x81, 0x22, 0xfe, 0x1d, 0xdb, 0xbe, 0x6d, 0x4e, 0x12, 0xfe, 0x43, 0x48, 0xeb, 0x5f, 0x9a, 0x13, 0x5d, 0xcf, 0x3a, 0xa2, 0xa2, 0x6d, 0x55, 0xb2, 0x8e, 0x91, 0x75, 0xf5, 0x20, 0x0c, 0xb2, 0x70, 0x57, 0xb1, 0x28, 0x21, 0x46, 0x14, 0xa8, 0xe6, 0x6b, 0x91, 0xae, 0x9a, 0x3d, 0x90, 0x93, 0x81, 0x04, 0x08, 0x04, 0xe6, 0xed, 0x42, 0xb3, 0x02, 0x5e, 0xe0, 0x4c, 0x20, 0x87, 0x1d, 0xab, 0xff, 0x3a, 0x56, 0x4c, 0x78, 0xfc, 0xca, 0x03, 0x60, 0x5c, 0x9e, 0xed, 0xb0, 0x83, 0x24, 0xa6, 0xe3, 0x0d, 0x5c, 0xbc, 0xa0, 0x17, 0xbb, 0x64, 0x99, 0x99, 0x2c, 0x6c, 0xb3, 0xf7, 0x55, 0x71, 0x67, 0xd2, 0x1b, 0x52, 0x68, 0x24, 0x68, 0xe4, 0x86, 0x8c, 0x2b, 0xe8, 0xd2, 0xe6, 0xa1, 0x3a, 0x03, 0x1f, 0xd4, 0x4b, 0x18, 0x47, 0x61, 0xd0, 0x3f, 0xe8, 0x7d, 0xbc, 0xf6, 0x97, 0x3a, 0x6c, 0x70, 0xc8, 0x07, 0x22, 0x3a, 0xe7, 0x76, 0xb5, 0x1e, 0xa4, 0x43, 0x87, 0x48, 0x8e, 0x91, 0xb6, 0xa7, 0xe3, 0x76, 0x97, 0x96, 0xa6, 0xba, 0x60, 0xbc, 0xf3, 0xdc, 0x24, 0x30, 0x90, 0x56, 0x05, 0xe1, 0xc4, 0x22, 0xa5, 0x36, 0x6c, 0x7d, 0xdd, 0xf1, 0x4b, 0xeb, 0xb2, 0x59, 0xa2, 0x7b, 0x84, 0x98, 0x00, 0x4c, 0x89, 0x62, 0x5c, 0x50, 0x7a, 0xd7, 0x61, 0x50, 0x8c, 0xab, 0x09, 0x31, 0xa2, 0x84, 0x6d, 0x75, 0xc1, 0xa3, 0xdc, 0x05, 0xc4, 0xc7, 0x2a, 0x2d, 0x51, 0x4e, 0x4a, 0xe8, 0x0b, 0x9e, 0x1f, 0x5e, 0x09, 0xc3, 0x90, 0xab, 0x88, 0x59, 0xdb, 0xe2, 0xdc, 0xad, 0x2b, 0x51, 0xad, 0x1f, 0x6c, 0x07, 0x5f, 0xcb, 0x5e, 0x94, 0xd2, 0x68, 0xe8, 0x10, 0x4c, 0x6f, 0xb0, 0x5f, 0xb3, 0x80, 0xe8, 0xb2, 0x00, 0x03, 0x6b, 0x51, 0xf0, 0x0b, 0x08, 0x99, 0xfc, 0x7f, 0x1d, 0x40, 0x8c, 0x7b, 0x68, 0xe1, 0x68, 0xf4, 0x1b, 0xb4, 0x6f, 0x9b, 0x2e, 0x9c, 0x8b, 0x04, 0xf9, 0x68, 0xe4, 0x08, 0x02, 0x52, 0x54, 0x68, 0x14, 0xcc, 0x1c, 0xb2, 0x91, 0x7d, 0xd5, 0x69, 0x08, 0x86, 0xa9, 0x60, 0x0a, 0x09, 0xc2, 0x67, 0x3a, 0xec, 0x03, 0x29, 0xa4, 0xda, 0xf6, 0x55, 0x50, 0x8b, 0x06, 0xfc, 0x16, 0x46, 0xef, 0x3b, 0xb3, 0xa4, 0x72, 0x19, 0x1d, 0x96, 0x4d, 0xb2, 0x14, 0xa9, 0x6a, 0x96, 0xfa, 0x89, 0x57, 0x6c, 0xe4, 0xc4, 0xf6, 0xdb, 0xf1, 0xd1, 0x76, 0xaa, 0xdb, 0x51, 0x81, 0x25, 0xcb, 0x94, 0xb7, 0xc3, 0x72, 0x5f, 0x5c, 0x07, 0x55, 0xed, 0x4d, 0xa4, 0x68, 0x33, 0x39, 0xe4, 0xdf, 0x69, 0x0d, 0x4a, 0x41, 0xc5, 0xb0, 0x77, 0xbe, 0x8a, 0xf1, 0x4a, 0xc2, 0x41, 0xbe, 0x4b, 0xca, 0x46, 0x96, 0x4a, 0x77, 0x87, 0x40, 0x43, 0xe0, 0x89, 0xbe, 0x85, 0x2d, 0xac, 0x7d, 0x13, 0x62, 0xaf, 0xce, 0x4b, 0x78, 0x76, 0x9a, 0xc5, 0xb2, 0x0b, 0x50, 0x7e, 0x2e, 0xe4, 0x23, 0x36, 0xbb, 0x64, 0x73, 0x16, 0xea, 0xa3, 0x88, 0x96, 0x68, 0x72, 0x86, 0x9e, 0x8a, 0x9a, 0x9d, 0xeb, 0x2a, 0x65, 0x81, 0xb5, 0xb2, 0x60, 0x1a, 0x8f, 0x76, 0x5e, 0x7c, 0x8e, 0x47, 0xc0, 0x19, 0xad, 0x44, 0xf4, 0x35, 0x70, 0xf4, 0x3c ],
-const [ 0xa2, 0x83, 0x31, 0xa9, 0x66, 0xb0, 0x86, 0x58, 0x92, 0xc2, 0xc7, 0x6c, 0x12, 0x4c, 0x50, 0xa0, 0x4a, 0x6e, 0xcb, 0xc7, 0x4c, 0x41, 0x01, 0x55, 0x4f, 0x75, 0xf1, 0x20, 0x5d, 0x39, 0x1f, 0x68, 0x4b, 0x5b, 0x2f, 0x15, 0xee, 0xb1, 0xb2, 0x41, 0x8c, 0xb7, 0x40, 0xf6, 0x91, 0x79, 0xc7, 0x39, 0x83, 0xb4, 0x22, 0x47, 0x38, 0x38, 0xee, 0x1e, 0x47, 0x90, 0x99, 0x3f, 0xbc, 0xe5, 0xbb, 0xb3, 0x10, 0x20, 0xaa, 0x4c, 0x58, 0x4f, 0x49, 0x2d, 0xbc, 0x4a, 0x20, 0x8c, 0x2b, 0x96, 0xb2, 0xb7, 0x4d, 0x89, 0x0a, 0x55, 0xb9, 0xaf, 0x98, 0xef, 0x69, 0x6d, 0x3b, 0xaf, 0x6a, 0xe4, 0x9f, 0x67, 0xd8, 0x18, 0xc9, 0xd4, 0x0a, 0x52, 0xf0, 0x25, 0x0a, 0xc3, 0x8f, 0xb7, 0x48, 0x69, 0xb8, 0x23, 0x8f, 0x37, 0xab, 0x7a, 0x37, 0x70, 0xa7, 0xcf, 0x9d, 0x54, 0x00, 0xf6, 0xd0, 0xfe, 0x72, 0x8c, 0x8d, 0x8d, 0xb5, 0x37, 0x6e, 0x82, 0x51, 0x2f, 0x5e, 0x69, 0xb4, 0xfe, 0x50, 0xbc, 0x82, 0x84, 0x31, 0x04, 0x2c, 0x3d, 0x1a, 0x41, 0xc4, 0xc7, 0xcb, 0x8c, 0x10, 0x9e, 0x55, 0xfb, 0xdd, 0x2b, 0x16, 0xc5, 0x95, 0xfd, 0xea, 0xa6, 0x14, 0x56, 0xa0, 0x85, 0xb8, 0xe9, 0xab, 0x55, 0xb7, 0xe2, 0x1a, 0x39, 0xb6, 0x27, 0xcb, 0xeb, 0x97, 0xdd, 0xdb, 0x5e, 0x92, 0x2f, 0x60, 0xa2, 0x87, 0x4a, 0x5b, 0x09, 0x92, 0xac, 0xe8, 0x88, 0xe1, 0x9f, 0xb8, 0x5f, 0xc2, 0x00, 0xc1, 0xfc, 0x00, 0x45, 0x34, 0x1d, 0x70, 0xbf, 0xb0, 0x36, 0xc7, 0x1b, 0xb5, 0x12, 0xae, 0x2f, 0x5b, 0xbc, 0x19, 0xf4, 0x44, 0xa0, 0xd4, 0xce, 0xcf, 0xee, 0x5e, 0x14, 0x8e, 0x3f, 0xfb, 0xcc, 0xfb, 0x7b, 0x05, 0xb6, 0x66, 0xfa, 0x83, 0x8d, 0x32, 0xe9, 0xfd, 0x89, 0x41, 0xf0, 0x8e, 0x28, 0xad, 0x11, 0x3a, 0x2e, 0xb9, 0xd4, 0x82, 0xea, 0x07, 0xa1, 0x36, 0xbc, 0x0b, 0x6d, 0x8b, 0xd4, 0xbf, 0x99, 0x6d, 0x3c, 0x98, 0x16, 0x16, 0x19, 0xb9, 0xce, 0xe0, 0x2e, 0x68, 0x3f, 0x57, 0xa1, 0xbe, 0x69, 0x93, 0x02, 0xa2, 0xeb, 0xc5, 0x89, 0xf8, 0x69, 0x0f, 0x9f, 0x15, 0x30, 0x99, 0xa0, 0x76, 0x1d, 0xe1, 0xe0, 0xb2, 0xbb, 0x52, 0xec, 0xae, 0xab, 0x19, 0x12, 0x10, 0x49, 0x34, 0x23, 0xf6, 0x8c, 0xcb, 0x77, 0xe7, 0x2e, 0xc4, 0x32, 0x0a, 0x0d, 0x92, 0xc6, 0x95, 0xd2, 0x4d, 0xb9, 0x89, 0xd0, 0x08, 0xa9, 0x9d, 0x2f, 0x5f, 0x8d, 0x77, 0x49, 0x4f, 0x3d, 0x22, 0x54, 0x4b, 0x35, 0xbd, 0x42, 0x8b, 0x95, 0x70, 0xe5, 0xa8, 0x6d, 0xa5, 0x57, 0x66, 0x38, 0x74, 0x99, 0xd0, 0xa6, 0x5e, 0x7a, 0x8b, 0x9f, 0x3f, 0xba, 0x64, 0x84, 0x7e, 0x70, 0x2b, 0xb8, 0x87, 0xa9, 0xc4, 0x5f, 0x7b, 0x52, 0x7b, 0x65, 0x25, 0x58, 0x98, 0xc2, 0x31, 0x0d, 0x33, 0xfd, 0x98, 0xce, 0x4a, 0xef, 0x5f, 0xe3, 0x11, 0xca, 0x81, 0xa6, 0x89, 0x5a, 0x2a, 0xe7, 0x54, 0x8a, 0x25, 0x90, 0xc8, 0x29, 0x98, 0x85, 0x42, 0xee, 0xef, 0xce, 0xbd, 0xba, 0x16, 0xf8, 0xa3, 0x1e, 0xeb, 0xb8, 0xe2, 0x1d, 0xf3, 0xd2, 0x43, 0x33, 0x4b, 0x39, 0xf8, 0x96, 0xe2, 0x78, 0x73, 0xbb, 0xe6, 0x50, 0x7f, 0x1c, 0x7c, 0xa3, 0x89, 0x39, 0xb4, 0x91, 0x3e, 0xdc, 0xbc, 0xe0, 0x5c, 0xa2, 0x54, 0xa1, 0xc1, 0xb7, 0x81, 0x10, 0xc9, 0xe1, 0x86, 0xbd, 0xd6, 0xc0, 0x10, 0xe9, 0x30, 0x54, 0xb1, 0x33, 0x10, 0xbf, 0x8f, 0x74, 0xf7, 0x4c, 0x5e, 0xe7, 0x44, 0xb1, 0x8b, 0x8d, 0x06, 0x91, 0xba, 0xcf, 0x0f, 0x45, 0x73, 0x66, 0x4a, 0xdc, 0x18, 0x78, 0x4e, 0x60, 0x1b, 0x03, 0x32, 0x5b, 0x6d, 0x7f, 0xa3, 0x9a, 0x3a, 0xbf, 0x35, 0x31, 0xd3, 0x19, 0xf7, 0xc0, 0xec, 0xc6, 0x4a, 0xf4, 0x07, 0x8b, 0xf3, 0x50, 0x30, 0x99, 0x6e, 0x2d, 0xeb, 0xb3, 0x85, 0xff, 0x6b, 0x8e, 0x22, 0xdb, 0x04, 0x7d, 0x62, 0x36, 0xe3, 0x4e, 0xea, 0xf0, 0xfd, 0x6e, 0x7e, 0x91, 0x45, 0x54, 0xd0, 0xd2, 0x22, 0x1d, 0x95, 0x5f, 0x20, 0x74, 0xde, 0xdb, 0xe6, 0xb5, 0xa6, 0x24, 0x68, 0x52, 0xa7, 0xd9, 0x5d, 0x75, 0x73, 0x1a, 0xf4, 0xe7, 0xbf, 0x8f, 0xc2, 0x30, 0x02, 0xac, 0xff, 0x00, 0x3f, 0x33, 0xf3, 0xcd, 0x1e, 0xfa, 0xab, 0xbe, 0x42, 0xee, 0xf0, 0xc8, 0xd7, 0x58, 0x7a, 0x17, 0x6a, 0x5f, 0x60, 0xaf, 0xfe, 0xce, 0xd3, 0x53, 0x5c, 0x18, 0x0c, 0xa5, 0xaa, 0x9a, 0x83, 0x90, 0x3f, 0x1f, 0x62, 0xe3, 0xb6, 0xa9, 0x39, 0x3e, 0x41, 0x6f, 0xf3, 0x32, 0x40, 0x22, 0x09, 0xa4, 0x13, 0x74, 0xf5, 0x72, 0x2c, 0xdb, 0xea, 0x5a, 0x68, 0x92, 0xc2, 0x17, 0x9f, 0xe2, 0x38, 0xcc, 0x7a, 0x9f, 0x57, 0xa6, 0x84, 0xf5, 0x32, 0xbd, 0x84, 0x65, 0xd6, 0x3c, 0x0b, 0x0a, 0x7d, 0xc2, 0x49, 0x21, 0x04, 0x08, 0x24, 0xc8, 0x9f, 0xc3, 0x8c, 0x06, 0xcc, 0xcc, 0x08, 0x0c, 0x85, 0x7e, 0x95, 0xba, 0xba, 0x5f, 0xb1, 0x65, 0xfe, 0x03, 0xb3, 0xd8, 0x81, 0x2e, 0x5d, 0x98, 0x3e, 0x39, 0xb4, 0x6d, 0x75, 0xb7, 0x0f, 0x1d, 0x5c, 0x58, 0x6f, 0x7b, 0x12, 0x0d, 0x0e, 0xa0, 0xd4, 0x6c, 0x3b, 0x79, 0x73, 0x57, 0x64, 0x82, 0x05, 0xd8, 0x75, 0xd0, 0xdb, 0x50, 0x61, 0x55, 0xb4, 0xd1, 0xfd, 0x60, 0x30, 0xc8, 0x15, 0x63, 0x88, 0xdf, 0xba, 0xf9, 0x7b, 0x21, 0xd9, 0x27, 0x8c, 0x5f, 0x12, 0xe2, 0x6a, 0xd3, 0xc6, 0xd2, 0xb0, 0x04, 0x72, 0x56, 0xce, 0xe9, 0x3c, 0xc8, 0x47, 0x51, 0xcc, 0x02, 0x1e, 0x83, 0x5d, 0x21, 0x8a, 0x21, 0x14, 0x89, 0xf1, 0x52, 0x90, 0x29, 0x14, 0x1f, 0xc2, 0x00, 0x88, 0x1e, 0xff, 0xdf, 0x65, 0x4e, 0x53, 0x71, 0x42, 0x43, 0x19, 0x7a, 0x60, 0x83, 0xc8, 0x5c, 0x25, 0x2f, 0x10, 0xdf, 0xcc, 0xe6, 0x26, 0x31, 0x5c, 0xe6, 0x5c, 0x2c, 0xd6, 0x74, 0xf4, 0xd8, 0xb3, 0x7f, 0x36, 0x31, 0x8d, 0x80, 0xc0, 0x2a, 0x1d, 0xa4, 0x1e, 0xf1, 0x65, 0x2d, 0x9a, 0x75, 0x2e, 0x15, 0x55, 0x26, 0xb5, 0xf5, 0x97, 0xfb, 0xa2, 0x26, 0x64, 0xba, 0x39, 0x26, 0x50, 0x74, 0xd4, 0x3d, 0x94, 0x4e, 0x91, 0x60, 0x60, 0x88, 0x48, 0x55, 0x73, 0xb7, 0xc0, 0x18, 0xea, 0x55, 0x22, 0x7e, 0x55, 0x7c, 0xad, 0x18, 0x10, 0xef, 0xac, 0x5a, 0xd1, 0x5a, 0xa5, 0xfc, 0x7d, 0xdb, 0xd4, 0xa1, 0x40, 0xc0, 0xd7, 0xb7, 0xdc, 0x93, 0xab, 0x9e, 0x41, 0x54, 0xd7, 0x0c, 0x5f, 0x05, 0xe7, 0xb0, 0x38, 0x6c, 0x1c, 0x15, 0x39, 0x14, 0x62, 0xca, 0xca, 0x95, 0x82, 0xc0, 0x24, 0x15, 0x99, 0xf3, 0x62, 0x0f, 0xc9, 0x4c, 0xdb, 0x53, 0x2e, 0xc6, 0xb0, 0x4e, 0x14, 0xd1, 0xa1, 0x8c, 0x67, 0xf4, 0x25, 0x7b, 0x6a, 0xb5, 0xb9, 0x72, 0xac, 0xbd, 0x78, 0xf1, 0x39, 0x38, 0xec, 0x2b, 0x0d, 0x7b, 0x24, 0xc1, 0xce, 0xe9, 0x06, 0xd1, 0xba, 0x17, 0xe7, 0x2f, 0xde, 0x2e, 0x59, 0xf2, 0x88, 0x91, 0x44, 0x33, 0x00, 0xc0, 0x39, 0x11, 0x73, 0x7d, 0x02, 0xf8, 0x30, 0x2d, 0x7e, 0x24, 0x17, 0x80, 0xac, 0x60, 0x4d, 0x54, 0x05, 0x14, 0x35, 0xd7, 0x0f, 0x7e, 0x9c, 0xec, 0x2f, 0x40, 0x34, 0xd1, 0xbe, 0x1b, 0x44, 0xfe, 0x60, 0xfa, 0x9d, 0x50, 0x91, 0x32, 0xd0, 0x66, 0x81, 0x08, 0x9e, 0x4c, 0x22, 0x74, 0xb0, 0x56, 0x7f, 0x24, 0x89, 0x4f, 0x4f, 0xc4, 0xb8, 0xd3, 0xca, 0x7d, 0x52, 0xfa, 0xbb, 0xbb, 0x9f, 0x37, 0xd7, 0x34, 0x14, 0x7f, 0x4d, 0x26, 0x81, 0xad, 0x9e, 0xdf, 0x8c, 0x25, 0xaf, 0x83, 0x5e, 0xb7, 0x1d, 0x0a, 0x9c, 0xc7, 0xd0, 0x88, 0x99, 0xab, 0xd3, 0xb1, 0xca, 0x55, 0x62, 0x9c, 0x7a, 0x32, 0x45, 0xc7, 0xbe, 0x51, 0x5d, 0x5c, 0xac, 0xc8, 0x7d, 0xb2, 0xc8, 0x54, 0x7b, 0x17, 0xbf, 0x3f, 0x86, 0xcd, 0x58, 0x87, 0xb9, 0x52, 0xa7, 0x3c, 0xf1, 0xe4, 0x84, 0x2a, 0xdc, 0x45, 0x3b, 0xb8, 0x53, 0xbc, 0x85, 0x10, 0xea, 0x5c, 0xb7, 0x80, 0xc5, 0x88, 0x3a, 0x20, 0xad, 0xb7, 0x3b, 0xb6, 0x62, 0x75, 0xa3, 0xd6, 0x33, 0xab, 0x4a, 0x4e, 0xcd, 0x1f, 0x67, 0xc1, 0x51, 0x3e, 0x4c, 0x91, 0xa9, 0x1a, 0x50, 0x02, 0x1b, 0xaf, 0x0c, 0x9d, 0x1e, 0x6a, 0xca, 0xd3, 0x6d, 0xec, 0x3a, 0xe3, 0x5b, 0x0b, 0x67, 0xfe, 0x66, 0x19, 0xea, 0xa8, 0x0e, 0x69, 0x5d, 0x61, 0xe8, 0x10, 0x13, 0x85, 0xee, 0xe9, 0x06, 0x71, 0x19, 0xdc, 0x11, 0xe7, 0x32, 0x5f, 0x60, 0xb4, 0xe5, 0x3c, 0x24, 0x8f, 0x17, 0x95, 0x8b, 0x45, 0x79, 0x26, 0xef, 0x13, 0x5d, 0xcb, 0x4e, 0x53, 0xc9, 0x42, 0xfa, 0x5c, 0xca, 0x31, 0x91, 0xa3, 0x0b, 0x6b, 0x30, 0x26, 0xa6, 0x6f, 0xe4, 0x0a, 0x3a, 0x32, 0x61, 0x82, 0x3e, 0x1e, 0xf7, 0xf4, 0x95, 0x5a, 0xc1, 0x57, 0x62, 0x4c, 0x20, 0xe0, 0x1d, 0x5c, 0x67, 0xdd, 0xe7, 0xfb, 0xd8, 0xe1, 0x1a, 0xe4, 0xd0, 0x21, 0x25, 0xa2, 0x3e, 0x1e, 0x97, 0x53, 0x59, 0x84, 0x79, 0xab, 0x93, 0x52, 0xe1, 0x3c, 0xc8, 0x3c, 0xc4, 0xf4, 0xbc, 0x4e, 0x0c, 0xe7, 0xc4, 0xd1, 0xea, 0x4e, 0xc3, 0x72, 0x6e, 0xd0, 0x58, 0xa1, 0x55, 0x01, 0x56, 0x38, 0x22, 0x29, 0x75, 0x5d, 0x70, 0x46, 0x47, 0xa9, 0x86, 0x54, 0x6d, 0x8a, 0x2c, 0xcb, 0x0a, 0xe5, 0xbd, 0x6a, 0x78, 0x00, 0x7e, 0x33, 0x3a, 0xa0, 0x2e, 0xb7, 0x32, 0x6e, 0xde, 0x93, 0x14, 0x9f, 0x03, 0x3b, 0x1b, 0xd4, 0xca, 0xf6, 0xfb, 0x3f, 0xab, 0x2a, 0x16, 0x08, 0x41, 0xda, 0xf2, 0xef, 0x59, 0x6d, 0xeb, 0x32, 0x49, 0xb1, 0x25, 0xb1, 0x83, 0x1f, 0xc5, 0x50, 0x69, 0x61, 0x61, 0x9d, 0x63, 0x11, 0xb4, 0xb3, 0x2f, 0xc4, 0x97, 0x5e, 0x79, 0x47, 0x2d, 0x7f, 0xac, 0x28, 0x5d, 0xb2, 0x07, 0x78, 0x85, 0x2f, 0xf3, 0xd0, 0x6c, 0xee, 0x94, 0x92, 0x79, 0x0f, 0x9e, 0x71, 0x23, 0x78, 0x6a, 0x34, 0xa9, 0xc0, 0x49, 0xb6, 0x03, 0x4c, 0x18, 0x32, 0x18, 0xb7, 0x14, 0xbd, 0x31, 0x77, 0xf0, 0x14, 0xae, 0xbe, 0x25, 0x98, 0xf8, 0x9f, 0x8a, 0x97, 0xb6, 0x72, 0x24, 0xcd, 0x44, 0x79, 0x3f, 0x2b, 0x60, 0xc4, 0xbd, 0xd7, 0x27, 0x51, 0xaf, 0x73, 0x41, 0x78, 0x22, 0xa2, 0x58, 0x86, 0x3b, 0xc8, 0xce, 0xa9, 0x87, 0x12, 0xaf, 0x0c, 0x8c, 0xb7, 0xe4, 0x42, 0xa4, 0x7d, 0xaa, 0xe8, 0x0b, 0x7e, 0x43, 0x86, 0x36, 0x2c, 0xeb, 0xb7, 0x66, 0x93, 0x0e, 0x8a, 0x7e, 0xde, 0xb8, 0x27, 0x11, 0x1d, 0x4d, 0xb6, 0xc0, 0x45, 0x7a, 0x7c, 0xc3, 0x78, 0x6b, 0x47, 0xc5, 0x87, 0x3f, 0x0d, 0xf5, 0xb6, 0xb9, 0xd0, 0x5a, 0xbf, 0x38, 0xc4, 0x66, 0x19, 0xe9, 0xb4, 0xcf, 0x79, 0x3b, 0xa2, 0x9a, 0x9a, 0x93, 0xae, 0x79, 0x3a, 0x42, 0x39, 0x56, 0x65, 0xb4, 0x49, 0x30, 0xf5, 0xe9, 0x2f, 0x26, 0x5a, 0x29, 0x68, 0xd1, 0x97, 0xf4, 0xc2, 0xd7, 0x8d, 0x39, 0xbf, 0xbd, 0x7c, 0xc8, 0x3e, 0xfd, 0xc7, 0x08, 0x58, 0x59, 0xf7, 0xed, 0x89, 0x6e, 0x03, 0x25, 0x10, 0x8c, 0xcf, 0x92, 0x98, 0xc5, 0xf2, 0xfd, 0x17, 0x44, 0xbc, 0x09, 0xf7, 0xe1, 0x78, 0x65, 0x74, 0xf2, 0xee, 0x46, 0x45, 0x63, 0x2c, 0x15, 0x7e, 0x09, 0x86, 0x64, 0xb5, 0x33, 0xdc, 0x27, 0x63, 0x82, 0x1b, 0x21, 0x8e, 0xfb, 0x06, 0x9c, 0xa5, 0x5b, 0x37, 0x5d, 0xac, 0xaa, 0x60, 0xd7, 0x98, 0x13, 0xd7, 0x9f, 0xfd, 0xf3, 0x52, 0x20, 0xe6, 0x30, 0xef, 0x90, 0x04, 0xcc, 0x77, 0x23, 0x0c, 0xba, 0xe3, 0x7e, 0x5a, 0xf0, 0x1f, 0x6e, 0xda, 0xbd, 0x0f, 0xda, 0x28, 0x5d, 0xd0, 0xf6, 0xf6, 0xcb, 0x40, 0xba, 0xaf, 0xd6, 0xc0, 0x93, 0x59, 0x77, 0x38, 0x58, 0xc0, 0x62, 0x5c, 0x7f, 0xd1, 0xdb, 0x2e, 0x91, 0x44, 0xcb, 0xc4, 0xdb, 0x7e, 0x13, 0x4c, 0x67, 0xb5, 0x20, 0x4d, 0x2a, 0x55, 0xbf, 0x30, 0x7f, 0xa2, 0x33, 0xfe, 0xd4, 0x9f, 0x86, 0x6b, 0xa3, 0x2f, 0x1c, 0x14, 0xa5, 0x7b, 0x8e, 0x05, 0x42, 0x93, 0xb5, 0x7e, 0x4b, 0x58, 0x04, 0xf7, 0xeb, 0x99, 0x1b, 0x61, 0xdb, 0x7c, 0x9a, 0xaf, 0xd6, 0x20, 0x33, 0x95, 0x4d, 0x80, 0x04, 0x8f, 0x5b, 0x9b, 0x23, 0x26, 0xfb, 0xd2, 0x7a, 0x6f, 0x79, 0x91, 0xd5, 0xd4, 0x26, 0x31, 0x39, 0x16, 0x50, 0x1d, 0x78, 0x93, 0x71, 0x34, 0x02, 0xc5, 0xa7, 0x6f, 0xfe, 0x0c, 0x64, 0xc4, 0x99, 0xad, 0x67, 0x4a, 0x9e, 0x1a, 0xeb, 0x9d, 0x48, 0x74, 0x1e, 0x84, 0x54, 0x4e, 0xd4, 0xd1, 0x59, 0xb4, 0x7d, 0x89, 0x5c, 0x6b, 0x54, 0x45, 0x9f, 0x7b, 0xda, 0xd8, 0xbb, 0xeb, 0x83, 0x32, 0xee, 0xcc, 0xaf, 0x85, 0xb6, 0x79, 0xdb, 0xa6, 0x9f, 0x1c, 0x19, 0xb5, 0x59, 0x74, 0xbd, 0x00, 0x0d, 0xd6, 0x5a, 0x25, 0xf1, 0x72, 0xed, 0x77, 0x1b, 0xd8, 0x57, 0xa3, 0x93, 0xbb, 0x11, 0x94, 0xab, 0xf4, 0x1b, 0x93, 0x93, 0xc9, 0x35, 0xb3, 0x28, 0x70, 0x52, 0x6c, 0x0d, 0xcf, 0x4a, 0x86, 0xfd, 0x86, 0xcf, 0x38, 0x5f, 0x2f, 0xa2, 0x92, 0x1b, 0xe4, 0x06, 0x18, 0xad, 0x02, 0x76, 0xb0, 0x78, 0x2d, 0x93, 0xbe, 0x5c, 0x95, 0x60, 0x8d, 0x8a, 0x77, 0xb1, 0xf1, 0x97, 0xe6, 0xe1, 0x2a, 0xd0, 0xcb, 0xc4, 0x0c, 0xce, 0x2b, 0xdc, 0x5d, 0x4a, 0xa8, 0xd0, 0x7f, 0x32, 0x4b, 0x19, 0x4e, 0xfb, 0x80, 0xff, 0x4c, 0x3a, 0x62, 0xc4, 0xfc, 0x6e, 0x39, 0x1f, 0x8b, 0x20, 0x41, 0xec, 0xb5, 0x2f, 0xae, 0x21, 0xe7, 0x65, 0xec, 0x04, 0xa1, 0x4d, 0x2b, 0x9b, 0x1f, 0x49, 0x1b, 0x64, 0x38, 0xdf, 0xf4, 0x47, 0x86, 0x54, 0xba, 0xc9, 0xc7, 0x7c, 0xbf, 0x82, 0x83, 0xd0, 0x69, 0xd1, 0xf0, 0xc1, 0x35, 0xce, 0x12, 0x4c, 0xfc, 0x80, 0x26, 0xcf, 0x76, 0x51, 0x41, 0x1b, 0xfc, 0xbe, 0x35, 0xca, 0x92, 0x53, 0xb4, 0xd3, 0x24, 0xd7, 0xb8, 0x5b, 0x10, 0xc4, 0x21, 0xce, 0xe5, 0xfa, 0xa0, 0x2f, 0x6a, 0xb3, 0xd5, 0xac, 0xe3, 0xba, 0xb4, 0x76, 0x8f, 0xd8, 0x2d, 0xcf, 0x75, 0x8f, 0x0c, 0x65, 0x61, 0x0b, 0x1e, 0xde, 0x29, 0x56, 0x95, 0xb4, 0x34, 0xcb, 0xad, 0x43, 0x3d, 0xcd, 0x90, 0x20, 0x55, 0xb9, 0x77, 0xad, 0x27, 0x18, 0x13, 0xea, 0x80, 0x1a, 0x2b, 0x8e, 0x0f, 0x40, 0x86, 0x57, 0x69, 0x58, 0x0b, 0x9e, 0x4f, 0xae, 0x27, 0x2e, 0x34, 0x81, 0x6f, 0x56, 0xfa, 0xb4, 0x87, 0x3d, 0xfd, 0xc6, 0x42, 0x76, 0x52, 0x04, 0x0a, 0xd4, 0x51, 0xfd, 0x83, 0x80, 0x50, 0x37, 0x6b, 0x48, 0xb2, 0x20, 0xc5, 0x3a, 0x21, 0x47, 0x36, 0x72, 0x17, 0xcc, 0xaf, 0x30, 0xa3, 0x16, 0x4c, 0x2e, 0x6a, 0xc3, 0x7c, 0x30, 0xec, 0xe5, 0x63, 0xdc, 0x08, 0x6b, 0x7c, 0xcc, 0xc2, 0xdd, 0x83, 0xe2, 0x45, 0x4d, 0x92, 0xdb, 0x24, 0x8a, 0x8a, 0x27, 0xe5, 0x96, 0xb4, 0xf8, 0xc0, 0x5a, 0xa8, 0x9a, 0xa4, 0x99, 0x6e, 0x02, 0x7b, 0x23, 0xe4, 0xa9, 0xaf, 0x4b, 0x5f, 0x9b, 0xed, 0x9a, 0x95, 0xca, 0x29, 0xc5, 0xbb, 0xa9, 0xe2, 0xdd, 0xea, 0xf6, 0xa7, 0xc6, 0xc7, 0xd7, 0xda, 0xea, 0x63, 0x29, 0xb4, 0x2e, 0x60, 0x15, 0x89, 0x26, 0x56, 0xe4, 0x4d, 0x84, 0x74, 0x14, 0x58, 0xd7, 0x6b, 0xab, 0x66, 0x72, 0x87, 0xcb, 0xe2, 0xa9, 0x1f, 0x87, 0x64, 0x44, 0x30, 0xf5, 0x78, 0x2d, 0x45, 0x84, 0xa1, 0x6c, 0x9a, 0x90, 0x9d, 0x55, 0x80, 0x34, 0xeb, 0x00, 0x03, 0x60, 0x8b, 0xfa, 0xcb, 0x2b, 0x05, 0x3a, 0x40, 0x6a, 0xac, 0x57, 0xf2, 0x81, 0x24, 0xf8, 0x37, 0x79, 0x22, 0x8b, 0x16, 0x53, 0x73, 0x3a, 0x63, 0x9c, 0x40, 0x1a, 0x2c, 0x42, 0x90, 0xa6, 0x54, 0xa6, 0x0e, 0x6d, 0x7e, 0xf2, 0x0d, 0x07, 0x2c, 0xad, 0xc9, 0x4d, 0x28, 0x8d, 0xef, 0xca, 0x24, 0x8c, 0x60, 0x6c, 0x9d, 0x3d, 0x32, 0x7f, 0x05, 0x61, 0xf8, 0xdc, 0x20, 0xb6, 0x44, 0x5e, 0xaf, 0x0f, 0x6a, 0x96, 0x4c, 0xa9, 0x86, 0xc0, 0x95, 0xbd, 0xc0, 0xf5, 0x8c, 0x52, 0xce, 0xa2, 0x3e, 0x55, 0xbb, 0x38, 0xa3, 0xeb, 0xe7, 0x25, 0xc6, 0x06, 0x50, 0x04, 0x25, 0x37, 0x0f, 0x10, 0x5b, 0xc3, 0x26, 0xdf, 0xfc, 0xf8, 0x78, 0x4d, 0xc1, 0xc1, 0x19, 0xb6, 0xe5, 0x79, 0xc8, 0x68, 0xce, 0xfd, 0xba, 0x57, 0xf0, 0x05, 0x9a, 0x13, 0xef, 0xb4, 0xcd, 0xf8, 0x03, 0x6d, 0xfa, 0xa4, 0xa1, 0xe9, 0xca, 0xaf, 0x58, 0x86, 0xec, 0x96, 0xf9, 0xe2, 0x5d, 0xf7, 0xfa, 0xa9, 0xe6, 0x04, 0x1c, 0xab, 0xe6, 0x32, 0x4c, 0x32, 0x51, 0x31, 0xc7, 0x92, 0xf9, 0x21, 0x82, 0x01, 0x0c, 0x03, 0xc9, 0xa9, 0xde, 0x6d, 0x26, 0xfc, 0xe9, 0x82, 0x84, 0x48, 0x13, 0x22, 0x94, 0x8b, 0x2f, 0x5e, 0x70, 0x88, 0xc5, 0x2f, 0x7f, 0x1a, 0x16, 0x67, 0x98, 0xc9, 0x5b, 0xe7, 0x6a, 0x9b, 0x4e, 0x13, 0x1b, 0x2c, 0xeb, 0x83, 0x2f, 0x01, 0x78, 0xfb, 0xac, 0x1a, 0xc3, 0x9e, 0x7b, 0xc6, 0xab, 0x5e, 0x12, 0xbc, 0xe1, 0xb7, 0x50, 0x66, 0xf0, 0x9d, 0xa8, 0x80, 0x7b, 0xb3, 0x82, 0xe2, 0xc6, 0xbd, 0xde, 0x9a, 0x79, 0x58, 0x3b, 0x3e, 0xa0, 0xe9, 0xb7, 0x81, 0xf5, 0xd3, 0x77, 0x03, 0x62, 0xed, 0x49, 0x6e, 0xc2, 0x33, 0x88, 0xbe, 0xe8, 0xbb, 0x41, 0xe0, 0xe2, 0xeb, 0x93, 0x7f, 0x7e, 0xea, 0x5c, 0x1b, 0x0e, 0x54, 0x12, 0x5b, 0x69, 0x32, 0xee, 0xa4, 0x32, 0x29, 0x50, 0xea, 0x5d, 0xf1, 0x5f, 0xc6, 0xee, 0x09, 0xef, 0xc9, 0x04, 0xa9, 0xa9, 0x11, 0x17, 0xf9, 0x65, 0x19, 0x7e, 0x80, 0xdb, 0xd5, 0x34, 0xdf, 0x7b, 0xff, 0xdb, 0xbf, 0x99, 0xac, 0x01, 0x08, 0xcd, 0x22, 0xa3, 0x53, 0x9a, 0xed, 0xef, 0xa3, 0x4d, 0x30, 0x4e, 0x4f, 0x28, 0x3a, 0xa2, 0x43, 0xc0, 0x59, 0xcc, 0x69, 0xa4, 0xf3, 0x72, 0x61, 0x3f, 0xd2, 0xff, 0x78, 0x00, 0xc0, 0xeb, 0xd8, 0xb8, 0x54, 0x3c, 0xfc, 0x43, 0x0b, 0x4d, 0x67, 0x6a, 0x9a, 0xce, 0x96, 0x08, 0x83, 0x0c, 0x33, 0x6c, 0xe7, 0x72, 0x8b, 0xff, 0x9b, 0x50, 0x42, 0x26, 0x7e, 0xdc, 0x45, 0x6a, 0x09, 0x77, 0x01, 0xd7, 0x27, 0x31, 0xd3, 0xa1, 0x47, 0x8e, 0xbf, 0x0e, 0xb0, 0x8b, 0x64, 0x8f, 0x15, 0xdc, 0x2f, 0x30, 0x6a, 0x78, 0xd0, 0x33, 0xf6, 0x57, 0xea, 0xf8, 0xa8, 0x7a, 0x0f, 0x21, 0xae, 0x2d, 0xeb, 0xf3, 0x44, 0x89, 0xbf, 0xfe, 0xca, 0x3c, 0x12, 0x00, 0x1a, 0x8d, 0xa3, 0x07, 0x18, 0x9a, 0xa1, 0xd6, 0x8b, 0xe4, 0x1e, 0x8a, 0x2b, 0x0e, 0xc2, 0x7d, 0xfa, 0xe2, 0xbc, 0x6b, 0xd8, 0x95, 0xfe, 0xd3, 0x52, 0x4c, 0xaa, 0xa0, 0xbc, 0xde, 0xc7, 0x09, 0x7f, 0xdc, 0x39, 0xb6, 0xb3, 0xcf, 0xf0, 0x24, 0xf1, 0xc0, 0x5f, 0x4a, 0x62, 0xfe, 0x30, 0x7d, 0x1c, 0x1b, 0x36, 0x91, 0xaf, 0x38, 0xa3, 0x41, 0xfa, 0x82, 0x7b, 0xd0, 0x44, 0xfd, 0x48, 0xf1, 0x88, 0x81, 0x10, 0xe5, 0x0f, 0x02, 0x84, 0xe3, 0x44, 0x14, 0x7a, 0xbc, 0xc5, 0xad, 0x9d, 0xbf, 0xb6, 0x2d, 0x63, 0xda, 0x5a, 0x9d, 0x40, 0x03, 0xe4, 0x34, 0x1a, 0xd6, 0x8a, 0x20, 0xfc, 0x80, 0xdc, 0x83, 0x0e, 0xdb, 0x54, 0xbb, 0xc5, 0xda, 0x2e, 0xe6, 0x57, 0x28, 0x79, 0xa5, 0x72, 0x0c, 0x6f, 0x21, 0x2d, 0x90, 0x02, 0x4c, 0x3f, 0xe2, 0xb7, 0x6a, 0x6e, 0xfa, 0xb7, 0xcf, 0x4b, 0x7d, 0x24, 0xea, 0x1d, 0xe2, 0xa9, 0x82, 0x1b, 0xd3, 0x55, 0x40, 0xde, 0xd6, 0xa9, 0x6e, 0x15, 0x2c, 0xef, 0xfe, 0x7b, 0xf9, 0xce, 0xce, 0x06, 0xa6, 0x1c, 0x2a, 0x61, 0x84, 0xf3, 0x93, 0x9d, 0xb2, 0x07, 0xbe, 0x24, 0x40, 0x36, 0xe0, 0xee, 0x94, 0x61, 0x29, 0xf7, 0x0d, 0x7b, 0x8e, 0xf0, 0xe7, 0xdf, 0xcc, 0x34, 0x5f, 0xe7, 0xaa, 0xff, 0x17, 0xba, 0x7e, 0xda, 0xbb, 0x65, 0xf2, 0x5a, 0xe5, 0x2e, 0x08, 0x0a, 0x3e, 0x24, 0x5c, 0xa6, 0xe7, 0xfb, 0xaa, 0x8a, 0x17, 0x17, 0x8f, 0x69, 0x05, 0xe7, 0x94, 0x42, 0x08, 0x74, 0x68, 0x90, 0xfc, 0x3a, 0x6d, 0xc2, 0xe9, 0x36, 0x76, 0xea, 0xdf, 0x40, 0xd0, 0xb9, 0x24, 0x9b, 0x7f, 0xab, 0x92, 0xcb, 0xc9, 0x7f, 0x3a, 0xa6, 0xf9, 0xea, 0x4d, 0xae, 0x5d, 0x8c, 0x3d, 0x9e, 0x91, 0x23, 0x1f, 0x43, 0xff, 0xff, 0x54, 0x8d, 0xa7, 0xb6, 0x68, 0xe6, 0x1c, 0x18, 0x3a, 0xc2, 0xcf, 0x65, 0x5d, 0x78, 0x90, 0xbe, 0xbf, 0x50, 0x52, 0xda, 0x88, 0xdd, 0x2f, 0xfa, 0x45, 0x8d, 0xac, 0x1f, 0x46, 0x7e, 0x3d, 0x7a, 0x44, 0x93, 0x0c, 0x24, 0x48, 0xc8, 0xf6, 0x0f, 0xc7, 0xc2, 0xd6, 0x3d, 0x12, 0xab, 0x07, 0x2f, 0xee, 0x3c, 0x24, 0xa1, 0x7e, 0x1b, 0x12, 0x74, 0x6a, 0x68, 0x41, 0xec, 0x3a, 0x92, 0x2e, 0x1b, 0x03, 0x70, 0x2d, 0x9d, 0x46, 0x8d, 0x65, 0x86, 0x15, 0xc3, 0x1c, 0x99, 0x77, 0x0b, 0x35, 0xbb, 0x0e, 0x93, 0xf6, 0xa7, 0xf7, 0x11, 0x0f, 0xe2, 0xf2, 0x58, 0xd8, 0xf2, 0xc3, 0x28, 0xdb, 0xcb, 0xd8, 0x4b, 0x92, 0x8a, 0x2b, 0xdd, 0x72, 0x65, 0x6a, 0xec, 0x28, 0xe2, 0x56, 0x41, 0x22, 0x48, 0x69, 0x7c, 0x51, 0x53, 0xbb, 0x67, 0x2d, 0x2c, 0x26, 0x84, 0xfa, 0x98, 0xa8, 0xe8, 0x4a, 0x70, 0x0a, 0x4c, 0xc4, 0x51, 0xbf, 0x62, 0x23, 0x94, 0x0f, 0x65, 0x82, 0x81, 0x75, 0xf4, 0xd6, 0xbf, 0x45, 0x20, 0xbc, 0x0f, 0x91, 0xc4, 0x75, 0x3b, 0x4e, 0x15, 0x2e, 0x48, 0xb3, 0x79, 0x85, 0xf3, 0xe2, 0x9d, 0x4a, 0x5c, 0xca, 0xc1, 0x82, 0xfc, 0x4c, 0x57, 0xb2, 0xdc, 0x9c, 0xcd, 0x5a, 0x09, 0xeb, 0xa7, 0xbf, 0x43, 0x43, 0xd0, 0xed, 0xf5, 0xb2, 0x32, 0xfd, 0x6a, 0xaa, 0x84, 0x94, 0x3d, 0xa8, 0x63, 0xac, 0x11, 0x14, 0xa5, 0x97, 0x83, 0x68, 0xea, 0x40, 0x5d, 0x95, 0x73, 0xb5, 0x0c, 0xa3, 0x38, 0xe2, 0x55, 0x97, 0x34, 0x9f, 0x43, 0x99, 0x04, 0xee, 0x64, 0x56, 0xb0, 0x7d, 0x35, 0xa4, 0xc9, 0x73, 0xda, 0x64, 0xb4, 0x69, 0x12, 0xad, 0x45, 0xb5, 0x6b, 0x27, 0x90, 0xef, 0xb2, 0xb4, 0xfb, 0xae, 0xae, 0x56, 0x98, 0x93, 0x0e, 0x4d, 0xb2, 0x89, 0x9f, 0x7f, 0xa6, 0x4a, 0xc2, 0x1d, 0xf4, 0x26, 0x1e, 0x84, 0x96, 0x00, 0x92, 0x61, 0x91, 0x99, 0x6d, 0x19, 0xc9, 0x11, 0xe2, 0x68, 0x19, 0xaa, 0xb6, 0x48, 0xa3, 0xd0, 0x3c, 0x14, 0x65, 0x56, 0x83, 0xed, 0x0e, 0x03, 0xce, 0x5d, 0x0f, 0x4d, 0x44, 0x3a, 0xf4, 0x64, 0xe9, 0xcd, 0xf5, 0x72, 0xcd, 0x34, 0xc8, 0x21, 0x84, 0x05, 0xba, 0x5f, 0xd5, 0x34, 0xfe, 0x5e, 0xb6, 0x37, 0x45, 0xde, 0x79, 0x67, 0x8f, 0xae, 0x40, 0xaa, 0x40, 0x70, 0xb6, 0x4f, 0x76, 0x9e, 0x01, 0x39, 0x9a, 0xca, 0xf2, 0x40, 0x35, 0x2a, 0x7f, 0xd4, 0x05, 0x53, 0x74, 0xe3, 0x51, 0x45, 0x65, 0xfd, 0x79, 0xa8, 0xe7, 0xb7, 0xd1, 0x55, 0x00, 0x4d, 0xaf, 0x18, 0xdb, 0x8b, 0xc3, 0xb4, 0xc0, 0xed, 0xa7, 0x28, 0x44, 0x05, 0xb7, 0x31, 0xbd, 0x1d, 0x23, 0x10, 0xf9, 0x1e, 0x43, 0x8d, 0x30, 0xb0, 0x2a, 0x3c, 0x36, 0xa3, 0x7d, 0xff, 0xf5, 0x8e, 0x86, 0xcc, 0x1b, 0xb5, 0x84, 0xb1, 0x10, 0x30, 0x45, 0x15, 0x2b, 0x4a, 0xf7, 0x40, 0x25, 0x28, 0x3c, 0x1e, 0xce, 0xab, 0x7c, 0x3f, 0xfe, 0x96, 0x7f, 0x23, 0xcf, 0xf4, 0x3b, 0xb5, 0x09, 0xb4, 0xea, 0x15, 0xde, 0x97, 0x60, 0x9a, 0xd8, 0x4c, 0x9c, 0x18, 0x0f, 0xd9, 0x9d, 0x5e, 0x9f, 0x3c, 0x77, 0x03, 0x59, 0x52, 0xa5, 0x63, 0xb9, 0xf9, 0xa1, 0xe4, 0x18, 0x71, 0xb2, 0x7e, 0x23, 0x09, 0x05, 0x7a, 0x8c, 0xf7, 0x00, 0x79, 0x00, 0x87, 0xd3, 0xb9, 0x58, 0x78, 0x50, 0x94, 0x13, 0xa2, 0xfc, 0x49, 0x04, 0xdd, 0x66, 0xff, 0x48, 0x1f, 0xb7, 0x07, 0x7b, 0xe4, 0x8b, 0x62, 0x2b, 0xd3, 0xff, 0x83, 0x8d, 0x9e, 0x0b, 0x55, 0x6f, 0x2a, 0x13, 0x80, 0x6e, 0xf0, 0xb8, 0xe9, 0x69, 0xa3, 0xf4, 0x77, 0x36, 0x12, 0x66, 0x1d, 0x93, 0x51, 0xea, 0x15, 0x5f, 0x13, 0x6d, 0x69, 0x0a, 0x5b, 0x00, 0xb8, 0x4a, 0x54, 0x2a, 0x37, 0x0f, 0x7c, 0x83, 0xf6, 0xba, 0x08, 0x7e, 0x65, 0x89, 0x85, 0x87, 0x16, 0x56, 0xbb, 0x4e, 0xc4, 0x82, 0xd6, 0x62, 0x95, 0x2c, 0xc8, 0x01, 0x9c, 0xa6, 0xe9, 0x2f, 0xa2, 0x29, 0xe0, 0x05, 0x26, 0xc7, 0xc7, 0x4c, 0xa2, 0xa2, 0x8a, 0x4a, 0x10, 0x5c, 0x90, 0xdc, 0xad, 0xce, 0x9e, 0xc5, 0xfd, 0xfd, 0xf8, 0x46, 0x0f, 0x49, 0xc9, 0xef, 0x02, 0xe8, 0xc4, 0xb4, 0xc8, 0x93, 0x0c, 0x43, 0x2a, 0x7f, 0x51, 0x95, 0x0c, 0x8f, 0x3c, 0xc3, 0xf3, 0xc8, 0x0e, 0x1c, 0xc4, 0x05, 0x84, 0x74, 0xcf, 0xec, 0xfd, 0xbe, 0x0b, 0x20, 0xde, 0xde, 0xa3, 0xb8, 0x36, 0xb8, 0xb2, 0xf1, 0x9e, 0x8d, 0x4b, 0x1f, 0x64, 0x87, 0xbd, 0xea, 0xe8, 0x92, 0x15, 0xb6, 0x45, 0x6e, 0xe4, 0x63, 0x34, 0x02, 0x42, 0x37, 0x2e, 0xf4, 0x12, 0x18, 0xd1, 0x76, 0x88, 0xff, 0x85, 0x63, 0xe9, 0xa9, 0x5f, 0x8a, 0x92, 0x90, 0x46, 0x4a, 0x3c, 0x19, 0x54, 0x5f, 0x7e, 0x0f, 0x7e, 0xfb, 0x93, 0x50, 0x78, 0x18, 0x5e, 0xc6, 0xd3, 0x0d, 0xab, 0x99, 0x69, 0x60, 0xb8, 0xa3, 0xfa, 0xdc, 0xf4, 0x25, 0x17, 0xe3, 0x06, 0xb8, 0x3f, 0x05, 0x11, 0x86, 0x49, 0xd1, 0x37, 0xb9, 0x01, 0xea, 0x5c, 0x34, 0x16, 0x5e, 0x2c, 0x81, 0x34, 0x34, 0x5f, 0x0b, 0x6d, 0x44, 0x3b, 0x8e, 0xdd, 0x4c, 0x5b, 0xcb, 0x8e, 0x3f, 0xb0, 0x80, 0x99, 0xe0, 0xc5, 0x97, 0x8e, 0x90, 0x47, 0x9e, 0x16, 0x64, 0xc4, 0x77, 0xd7, 0x7b, 0xb3, 0x51, 0x98, 0x8f, 0xb5, 0xd7, 0xa6, 0xc9, 0x1a, 0xa6, 0x76, 0xda, 0xa7, 0x05, 0x8b, 0x47, 0x96, 0xd0, 0x9a, 0x04, 0xdf, 0xb6, 0xed, 0x45, 0xb6, 0xa5, 0x05, 0x91, 0x55, 0x81, 0x83, 0x18, 0xfb, 0x1c, 0x49, 0x46, 0x35, 0x63, 0xdc, 0x98, 0x5c, 0xd5, 0x0c, 0xaf, 0x5f, 0x3a, 0xd8, 0xa3, 0xc2, 0x91, 0x8c, 0x99, 0xe7, 0x4a, 0x2c, 0x98, 0x8d, 0xb5, 0x15, 0x98, 0x96, 0xbb, 0xe2, 0xdc, 0x0d, 0xcc, 0x8d, 0x82, 0x67, 0x18, 0xd6, 0x59, 0x09, 0x02, 0xe9, 0xf2, 0x0b, 0xd1, 0x3b, 0xfa, 0x3c, 0xa9, 0xb5, 0xc6, 0x66, 0xbb, 0x14, 0x30, 0xd3, 0xb8, 0x90, 0xa2, 0x0f, 0x8b, 0xbb, 0x70, 0xf0, 0x47, 0xad, 0x6b, 0xd4, 0x5e, 0x5e, 0xb3, 0x2a, 0x15, 0x53, 0xcc, 0x34, 0x34, 0x7d, 0xf4, 0x0a, 0x02, 0x5e, 0xb4, 0xe3, 0x70, 0x6d, 0xb6, 0x90, 0x95, 0xbc, 0xd6, 0x49, 0x5a, 0xd8, 0x7b, 0xac, 0x77, 0xf0, 0x28, 0x03, 0x9e, 0x3a, 0x4e, 0xc6, 0xf5, 0x93, 0x65, 0x61, 0xca, 0x66, 0x3a, 0x36, 0x83, 0xce, 0x8b, 0xe6, 0xd3, 0xff, 0xd1, 0xcc, 0x34, 0xe2, 0x5d, 0xcb, 0x91, 0xff, 0xa6, 0x4a, 0x42, 0xa0, 0xe2, 0x7c, 0x3e, 0x33, 0xd3, 0xe5, 0x8c, 0xf1, 0xe4, 0x1a, 0xfb, 0xbd, 0x74, 0xc8, 0x13, 0x4f, 0x72, 0xf7, 0x4b, 0x91, 0x2a, 0x90, 0x7d, 0x49, 0x5e, 0x1d, 0x96, 0xf9, 0x99, 0xd1, 0x92, 0x03, 0xc0, 0xc8, 0xa8, 0x11, 0xea, 0x8f, 0xc1, 0xb4, 0x71, 0xe7, 0x2f, 0x4c, 0x4a, 0xc6, 0x9c, 0x27, 0x91, 0x9f, 0x40, 0xed, 0x68, 0xe3, 0x58, 0x3b, 0x02, 0xc8, 0xd3, 0x8e, 0xfb, 0x49, 0x4e, 0x63, 0xeb, 0x6e, 0x42, 0x9c, 0x3a, 0xcd, 0x7c, 0x26, 0x36, 0x51, 0xce, 0xd9, 0x62, 0x3a, 0x05, 0x9f, 0x11, 0x65, 0x1a, 0xd9, 0x34, 0xce, 0xad, 0xfe, 0x71, 0x53, 0xae, 0x85, 0x75, 0xbb, 0x5e, 0x06, 0x8a, 0xf6, 0x76, 0x9c, 0x6c, 0xa6, 0xa5, 0x8d, 0x58, 0xdf, 0x40, 0x2d, 0x67, 0x2b, 0x36, 0xff, 0x1a, 0xd2, 0x42, 0x1e, 0x36, 0x58, 0x64, 0xdb, 0xd2, 0x46, 0x91, 0xa8, 0xae, 0x2e, 0xaa, 0x35, 0xc6, 0xe9, 0xab, 0xd8, 0x27, 0x23, 0x25, 0x32, 0x02, 0x1a, 0xee, 0x10, 0xff, 0xa2, 0x16, 0x8f, 0xd3, 0x6d, 0x1e, 0x84, 0x15, 0x89, 0x65, 0x1a, 0x4d, 0x2a, 0xe3, 0xbd, 0x4f, 0xaa, 0x19, 0x37, 0xc7, 0xce, 0x48, 0x19, 0x14, 0x4b, 0xe2, 0x5d, 0x5a, 0x88, 0x3e, 0x49, 0xd2, 0xa6, 0x8f, 0x97, 0x65, 0xbe, 0x17, 0xd2, 0x7a, 0x69, 0x98, 0x03, 0x0c, 0x86, 0x0c, 0x8d, 0xff, 0x37, 0x95, 0x56, 0xb4, 0x2d, 0xb7, 0x27, 0xdb, 0x26, 0xc5, 0x56, 0x88, 0xb3, 0x99, 0xa2, 0x89, 0x3f, 0x88, 0x5e, 0xf8, 0x4d, 0x96, 0xd2, 0x0c, 0x01, 0xe5, 0xde, 0x34, 0xe2, 0x74, 0xe0, 0x67, 0xde, 0x06, 0xd8, 0xb5, 0x8f, 0x5f, 0xca, 0x23, 0xbc, 0xb6, 0x64, 0xb5, 0x23, 0x68, 0xe1, 0xcc, 0x75, 0xea, 0x2d, 0xb2, 0xa3, 0x01, 0x4a, 0x74, 0x58, 0x35, 0xf2, 0xf0, 0xc6, 0x83, 0x7e, 0x2e, 0xa6, 0x52, 0x06, 0xf4, 0x7a, 0xa8, 0xca, 0x94, 0x16, 0x9e, 0xd0, 0x09, 0x5e, 0x11, 0xcf, 0x42, 0x51, 0x9b, 0x4c, 0xbe, 0x47, 0xc1, 0x03, 0x59, 0x76, 0x6e, 0x88, 0x66, 0xbb, 0xa1, 0x2e, 0xfd, 0x98, 0x62, 0x28, 0x96, 0x79, 0xfa, 0xee, 0xd7, 0x3b, 0x63, 0xe3, 0xab, 0xee, 0xfe, 0x34, 0x94, 0xda, 0x84, 0x03, 0x42, 0xc1, 0x3f, 0xc5, 0x64, 0x64, 0x7a, 0xe8, 0xbe, 0x48, 0x36, 0xb9, 0x7c, 0xba, 0x1e, 0x86, 0xc6, 0x11, 0xbd, 0xff, 0x94, 0x33, 0xef, 0xe2, 0xc4, 0x5b, 0x95, 0xd8, 0x6a, 0x19, 0x8d, 0x9a, 0x67, 0x9a, 0xe2, 0x57, 0x3d, 0x29, 0x3f, 0x5a, 0x21, 0xf6, 0xaa, 0xe8, 0x52, 0x16, 0x6e, 0x67, 0xaa, 0xcc, 0x59, 0xc6, 0x72, 0x07, 0x28, 0x18, 0x7b, 0x2b, 0x40, 0x82, 0x6a, 0x14, 0x9f, 0x58, 0x54, 0x59, 0x11, 0x83, 0x8b, 0xcd, 0xa7, 0x26, 0xb7, 0x4c, 0x65, 0x81, 0x28, 0xb4, 0x3b, 0x15, 0x6a, 0x31, 0x37, 0x08, 0x1a, 0xbe, 0xf8, 0xcc, 0xf9, 0xe8, 0x66, 0xfc, 0x3f, 0xd5, 0xa0, 0x86, 0x32, 0x86, 0x36, 0x0f, 0xf6, 0x59, 0x99, 0x93, 0xa7, 0xd2, 0xcf, 0x4c, 0xa5, 0x9a, 0x6b, 0xd6, 0x2f, 0xc8, 0xbd, 0x90, 0x34, 0x60, 0x46, 0x45, 0x65, 0x19, 0x6e, 0x0c, 0x8f, 0x64, 0x7a, 0x6c, 0x28, 0xa9, 0xb8, 0xc4, 0x28, 0xd4, 0xfc, 0xea, 0x1a, 0x10, 0x50, 0x13, 0x72, 0xd2, 0xe8, 0xf3, 0x21, 0x1a, 0x54, 0x25, 0x67, 0xf6, 0xf9, 0xcc, 0xe8, 0x47, 0xc2, 0x7b, 0x03, 0xc7, 0x13, 0x52, 0x5f, 0x4b, 0xff, 0x6a, 0xc6, 0x46, 0xba, 0x74, 0x37, 0x8f, 0x51, 0x9c, 0x36, 0x64, 0x98, 0xb4, 0x67, 0xae, 0x64, 0x8e, 0x5b, 0x86, 0xfb, 0xa9, 0xaa, 0xf9, 0xc9, 0x10, 0x42, 0x08, 0x55, 0x80, 0xfe, 0xf3, 0x73, 0xc9, 0x7b, 0xb8, 0xba, 0x76, 0x27, 0xd6, 0x38, 0xb0, 0x9a, 0x56, 0x65, 0x60, 0x2a, 0x0c, 0x56, 0x94, 0xb9, 0x1b, 0x33, 0x24, 0xd2, 0xb7, 0xeb, 0x95, 0xf5, 0x2f, 0x26, 0x3d, 0x2e, 0x2a, 0x7c, 0xa8, 0xec, 0x30, 0xe4, 0x3b, 0x11, 0x6d, 0x6f, 0x17, 0x46, 0xb2, 0x36, 0x41, 0x91, 0xbd, 0x90, 0xff, 0x29, 0xba, 0x89, 0x85, 0x89, 0x0a, 0x90, 0xd0, 0xc3, 0x42, 0x70, 0xd3, 0x17, 0x77, 0x82, 0xd1, 0xc4, 0xb9, 0x20, 0x0a, 0x1e, 0xdd, 0x5c, 0x99, 0xe1, 0x80, 0xf2, 0x9d, 0xc5, 0x48, 0x7c, 0x97, 0x52, 0x6d, 0xe5, 0x13, 0xf6, 0x78, 0x20, 0x8b, 0x55, 0x4b, 0x1a, 0x88, 0xe0, 0x62, 0xed, 0x0a, 0xa9, 0x58, 0x56, 0x2a, 0x75, 0xad, 0x69, 0xfe, 0x13, 0xc6, 0x83, 0xbd, 0xed, 0x35, 0x81, 0x23, 0xdd, 0x3b, 0x2f, 0x17, 0x42, 0x8b, 0x03, 0x8c, 0x52, 0x51, 0x0c, 0xa5, 0xb2, 0x73, 0x25, 0x1c, 0x44, 0x17, 0x6e, 0xe4, 0x40, 0x65, 0xfd, 0x0d, 0x86, 0x8e, 0xd0, 0xe9, 0x32, 0x0d, 0x06, 0x6d, 0x71, 0x2d, 0x4f, 0xd9, 0x94, 0xcb, 0xa2, 0x9c, 0x63, 0x5d, 0x2e, 0x71, 0xb4, 0x33, 0x92, 0xcf, 0x3c, 0xfd, 0x50, 0x80, 0xa4, 0x8e, 0x7f, 0x8f, 0xdf, 0xdf, 0xc1, 0x68, 0xbc, 0x57, 0x75, 0x3b, 0xb7, 0x49, 0x2e, 0xa1, 0x15, 0xbf, 0x63, 0x82, 0x30, 0x76, 0x68, 0x36, 0x0f, 0x29, 0x9c, 0xea, 0x39, 0x12, 0xe5, 0x46, 0xcb, 0xaf, 0x59, 0x4d, 0xc9, 0xc2, 0x3e, 0x84, 0xb2, 0x9b, 0x35, 0x56, 0x57, 0x99, 0xb2, 0xb7, 0xec, 0xef, 0xaf, 0x08, 0x60, 0xa4, 0xa2, 0x3a, 0xea, 0xde, 0xac, 0x37, 0xe5, 0x5f, 0x13, 0x7d, 0xdd, 0x50, 0xf2, 0x0c, 0xea, 0x3d, 0x2f, 0x83, 0x3c, 0x62, 0xae, 0x86, 0xf8, 0x25, 0xc4, 0x62, 0x43, 0xe3, 0xef, 0xf4, 0x9b, 0xef, 0xc4, 0xc7, 0x6e, 0xd8, 0x28, 0x7c, 0xe5, 0xeb, 0xc3, 0x6f, 0x01, 0xf9, 0xb2, 0x97, 0xea, 0x5b, 0x7c, 0xae, 0x84, 0x32, 0x48, 0x92, 0x42, 0xf3, 0x4d, 0xec, 0x3f, 0x24, 0x89, 0x0f, 0x8b, 0x60, 0xb6, 0x23, 0xc2, 0xa1, 0x7a, 0x82, 0xe4, 0xbf, 0xde, 0x62, 0x60, 0x33, 0x01, 0xb5, 0x72, 0x21, 0x0e, 0x4d, 0xaf, 0x96, 0x6b, 0x44, 0xdf, 0x0e, 0x33, 0x9b, 0x0a, 0x39, 0xe7, 0x21, 0xd6, 0xfe, 0x60, 0x96, 0x10, 0xc1, 0x08, 0x11, 0x88, 0xe1, 0x4a, 0x9f, 0x22, 0x85, 0x47, 0x2d, 0x2a, 0x99, 0xcb, 0xa8, 0xe8, 0x13, 0x7f, 0x62, 0x74, 0x7b, 0x60, 0xb8, 0xcc, 0xaa, 0x6f, 0xf2, 0x24, 0xd2, 0xaa, 0x6a, 0x7d, 0xbe, 0x3c, 0xf1, 0x79, 0x5b, 0xf1, 0x6e, 0x6e, 0x78, 0xec, 0xc8, 0xb9, 0xca, 0x9c, 0x06, 0x55, 0x33, 0xec, 0xb5, 0xac, 0x43, 0xba, 0x8a, 0xac, 0x00, 0x8b, 0x49, 0x1e, 0xe2, 0x7d, 0xe5, 0x33, 0x22, 0x7d, 0xe9, 0x60, 0x35, 0xb9, 0x16, 0x6c, 0x93, 0x58, 0x4e, 0xc8, 0xbc, 0x69, 0xb1, 0x1e, 0x7d, 0x1a, 0x05, 0x2c, 0x6f, 0x2b, 0x5b, 0xd3, 0xc2, 0xa2, 0xef, 0x6b, 0x38, 0xbf, 0x51, 0x5a, 0x74, 0x32, 0xc2, 0xe5, 0x75, 0x8c, 0xe1, 0x46, 0x5e, 0xf4, 0x87, 0xfe, 0x78, 0x1b, 0xef, 0x6c, 0x79, 0x72, 0x1a, 0x9f, 0x07, 0x9a, 0x71, 0x69, 0x78, 0x1b, 0xad, 0xb4, 0xdc, 0x5a, 0xf4, 0x19, 0x3d, 0xc5, 0x44, 0xaf, 0x25, 0x51, 0x15, 0x21, 0x61, 0x26, 0x3a, 0x04, 0x05, 0x98, 0x09, 0x67, 0xb0, 0x5a, 0xbb, 0xab, 0x11, 0xee, 0x16, 0x95, 0xaa, 0x60, 0x49, 0xa1, 0xd4, 0x34, 0x17, 0x99, 0x04, 0x9d, 0x37, 0x67, 0x4c, 0xf0, 0xfb, 0x28, 0x25, 0x57, 0x31, 0x81, 0x6b, 0xca, 0x47, 0x36, 0xa9, 0x3b, 0xb2, 0xf8, 0x97, 0x11, 0x8f, 0x7f, 0xe1, 0xd8, 0x8b, 0xd9, 0x2a, 0x37, 0x01, 0x02, 0x51, 0x22, 0x63, 0xb4, 0xf3, 0x50, 0xdb, 0x80, 0x31, 0xf0, 0x32, 0x1e, 0xb3, 0x98, 0xf0, 0x02, 0xec, 0x7e, 0xc5, 0x2f, 0xa0, 0xea, 0x27, 0x50, 0xa4, 0xeb, 0x3d, 0x05, 0xe6, 0x4a, 0xfc, 0x7b, 0xad, 0xbc, 0x90, 0x3f, 0x21, 0x5b, 0xfd, 0x54, 0x0d, 0x57, 0x06, 0x83, 0xe4, 0xe9, 0x4e, 0xf2, 0x02, 0x89, 0xbd, 0xf8, 0x35, 0x61, 0x25, 0x30, 0x7c, 0x01, 0x25, 0xcc, 0x0e, 0x54, 0x4e, 0x2c, 0x9e, 0xd3, 0x85, 0xb0, 0xde, 0xf8, 0xa8, 0xca, 0x42, 0xf6, 0x75, 0x57, 0x06, 0xa7, 0xa7, 0x2f, 0x72, 0xc6, 0x61, 0xfa, 0x5d, 0x5e, 0xd0, 0x46, 0xf0, 0x82, 0x0d, 0xd7, 0xac, 0x3f, 0x40, 0x3e, 0xae, 0xcf, 0x0b, 0xae, 0x32, 0x0f, 0x26, 0x0a, 0x57, 0x34, 0x46, 0x42, 0x22, 0xb9, 0x44, 0xe0, 0xc4, 0x9b, 0x7b, 0xde, 0x20, 0xc9, 0x72, 0xbb, 0x88, 0xd6, 0xbb, 0xce, 0xc7, 0xf2, 0x1a, 0xd9, 0x65, 0x18, 0xea, 0xe1, 0x26, 0x89, 0xbd, 0x3d, 0xd4, 0x78, 0x43, 0xee, 0x3e, 0x07, 0x6d, 0x2e, 0x81, 0x72, 0xd1, 0x4b, 0x86, 0x8a, 0x51, 0xb6, 0xcc, 0x66, 0xf7, 0x57, 0x68, 0x55, 0x24, 0x24, 0x4a, 0x16, 0xea, 0xf2, 0xc1, 0x4c, 0xb6, 0x8b, 0x42, 0x2c, 0x32, 0x00, 0x65, 0x79, 0x69, 0x41, 0x30, 0xb2, 0x2d, 0xea, 0x98, 0x8a, 0xb5, 0x60, 0x45, 0x98, 0x8b, 0x1d, 0x96, 0x50, 0xa6, 0x48, 0xe5, 0x32, 0xd2, 0x89, 0x0c, 0x41, 0x59, 0x1b, 0x27, 0xb7, 0xdc, 0x23, 0x9c, 0xf7, 0x82, 0x40, 0x59, 0xc3, 0x55, 0x63, 0x5d, 0xaf, 0xe8, 0xe1, 0x7a, 0xd5, 0x3d, 0xc6, 0x59, 0xcb, 0xe7, 0x6d, 0xbe, 0xd2, 0x6c, 0x4d, 0x0d, 0x50, 0xed, 0x16, 0x0e, 0x81, 0x09, 0xfd, 0xed, 0x69, 0xfe, 0x53, 0x85, 0x0d, 0x11, 0x5d, 0xdd, 0xe2, 0x31, 0x60, 0xf3, 0x86, 0xd7, 0xfb, 0xb9, 0xae, 0x30, 0xb9, 0x5e, 0x60, 0x7e, 0xe7, 0xce, 0x62, 0xbc, 0xa3, 0x7c, 0xf2, 0x80, 0x36, 0x5f, 0xb7, 0x26, 0xa4, 0x3a, 0xf8, 0x2b, 0x81, 0x21, 0x0c, 0xd7, 0x05, 0x39, 0x11, 0x1f, 0x63, 0xbf, 0xe1, 0xc9, 0x57, 0x4c, 0x42, 0xd1, 0xfe, 0x57, 0x5d, 0x0c, 0xeb, 0xfb, 0x72, 0x0b, 0x77, 0xfa, 0xc9, 0x42, 0x58, 0x03, 0xec, 0x69, 0x76, 0x30, 0x13, 0x23, 0xfa, 0xd3, 0xe0, 0xde, 0xa7, 0x72, 0x4c, 0xfa, 0x6d, 0x10, 0xe2, 0x2d, 0x3b, 0xae, 0x2b, 0x26, 0x16, 0x12, 0x69, 0x70, 0x68, 0xc7, 0x87, 0x9a, 0x9a, 0x65, 0x51, 0x95, 0xe4, 0x13, 0xe1, 0x5d, 0x64, 0x49, 0x59, 0xdb, 0x6e, 0xdb, 0xd8, 0x0b, 0x24, 0x33, 0xa6, 0x5a, 0x46, 0xdd, 0xb2, 0x52, 0x4b, 0x4a, 0x3f, 0x78, 0xb0, 0xcd, 0xda, 0x75, 0x90, 0xea, 0x8f, 0x75, 0x75, 0xd0, 0x5c, 0xcd, 0x6e, 0x24, 0xe6, 0xe0, 0x61, 0x00, 0x6b, 0x43, 0xa3, 0x3c, 0xf8, 0x1f, 0xc6, 0xec, 0xdc, 0xd7, 0xb2, 0x29, 0x5c, 0xeb, 0xf7, 0x15, 0xa8, 0x1d, 0x62, 0x19, 0x0e, 0xd2, 0xcf, 0x71, 0x6e, 0xba, 0x3d, 0xeb, 0xee, 0xb3, 0x28, 0xeb, 0xee, 0xeb, 0x13, 0xb3, 0x3f, 0x45, 0x64, 0xe1, 0x8f, 0xff, 0x74, 0x39, 0x28, 0x91, 0xe7, 0xa5, 0xdb, 0xd8, 0x39, 0x7a, 0x36, 0x73, 0x9a, 0xfd, 0xfe, 0x6e, 0xfc, 0x26, 0xd9, 0x1d, 0x6a, 0xa4, 0x4a, 0x4b, 0x9b, 0x20, 0xe2, 0x95, 0xc7, 0xc6, 0xb5, 0x10, 0xb9, 0x02, 0x0c, 0x32, 0x26, 0x87, 0x59, 0xef, 0x3d, 0x96, 0x70, 0x22, 0x7f, 0x7d, 0xf3, 0x2f, 0xd1, 0x5e, 0x0e, 0xe6, 0xcf, 0x31, 0x65, 0xab, 0x64, 0x0c, 0x4b, 0xd4, 0x97, 0xa2, 0x35, 0x53, 0xa8, 0x0b, 0x6e, 0x95, 0x5c, 0xc3, 0x0c, 0xaa, 0x95, 0xf4, 0x22, 0xa5, 0x25, 0xf8, 0x37, 0x46, 0xe4, 0x19, 0xf7, 0xd6, 0x01, 0x9c, 0x29, 0x53, 0x95, 0xff, 0xe1, 0xcd, 0x7e, 0x7e, 0xf7, 0x10, 0x6a, 0xdc, 0xb7, 0x83, 0x32, 0x5f, 0xda, 0x50, 0x6a, 0x1d, 0xb6, 0xc5, 0x36, 0x76, 0xb1, 0xfb, 0x5e, 0xe2, 0xfb, 0xb5, 0xa5, 0xed, 0x7d, 0x8a, 0x57, 0x7f, 0x0c, 0x47, 0x22, 0x61, 0xe3, 0x8f, 0x26, 0xfd, 0x50, 0xc4, 0x4f, 0x65, 0xad, 0x2b, 0xe3, 0x97, 0x92, 0x4a, 0x57, 0x00, 0x49, 0x95, 0x67, 0x3e, 0x82, 0x4a, 0x66, 0x2a, 0x48, 0x9a, 0xd2, 0x16, 0x34, 0x09, 0x2b, 0x53, 0xe1, 0x17, 0x05, 0xf7, 0x9f, 0x20, 0x5d, 0xdc, 0x6c, 0x81, 0x29, 0xec, 0x20, 0xfc, 0x32, 0x9c, 0xe7, 0x5e, 0x26, 0xb7, 0xf4, 0x5e, 0xe9, 0x5d, 0x74, 0xc9, 0x2d, 0x4b, 0xc1, 0xdc, 0x42, 0x5d, 0xd9, 0xf1, 0x2f, 0x50, 0x0e, 0x5f, 0x01, 0xcd, 0xff, 0x9b, 0x63, 0xa3, 0xc6, 0xa3, 0x6f, 0x55, 0x73, 0x9c, 0xc4, 0xd4, 0xba, 0xb9, 0xd9, 0x8d, 0xe8, 0x60, 0x91, 0xa6, 0x1b, 0x88, 0x0f, 0x85, 0xb3, 0x66, 0xcb, 0x93, 0x04, 0x48, 0xe5, 0x3f, 0x4d, 0xc1, 0xba, 0x45, 0xee, 0x06, 0xb6, 0x30, 0xd5, 0x98, 0x69, 0x1d, 0x3a, 0x23, 0xdc, 0xc3, 0x8c, 0xa6, 0x25, 0xb0, 0xab, 0xd5, 0x39, 0xd5, 0x57, 0xbc, 0x02, 0x45, 0xe9, 0xa4, 0xb1, 0x3a, 0x40, 0x3a, 0x56, 0x59, 0xff, 0xee, 0xad, 0x37, 0xf6, 0x9a, 0x3b, 0x1b, 0xdd, 0x64, 0x9a, 0x06, 0x48, 0xe5, 0x12, 0xf0, 0xd7, 0x8b, 0x69, 0x55, 0xad, 0x3b, 0xfb, 0xf0, 0x24, 0x3b, 0x0d, 0xc7, 0xbf, 0x50, 0x5e, 0x67, 0x61, 0x23, 0xff, 0x71, 0xbc, 0xe9, 0x65, 0x55, 0x0b, 0x43, 0xbd, 0x5e, 0x04, 0x63, 0x7f, 0xef, 0x08, 0x71, 0x46, 0x0c, 0x9e, 0x2d, 0xdf, 0x1b, 0x1f, 0xd5, 0x9f, 0xec, 0xb3, 0x49, 0xfa, 0xf8, 0x7b, 0x6d, 0x52, 0xe6, 0x10, 0xcf, 0x0d, 0x54, 0x2d, 0x8a, 0xea, 0xd3, 0xa8, 0x6a, 0x95, 0x33, 0xa7, 0x50, 0x79, 0x02, 0x10, 0xd8, 0xd5, 0x4f, 0x41, 0x3a, 0x12, 0xb3, 0x02, 0x6e, 0x54, 0x93, 0xb7, 0x94, 0x4f, 0x9f, 0xdb, 0x92, 0x5c, 0x9e, 0xa9, 0xff, 0xcb, 0x6e, 0x1c, 0x40, 0x7b, 0x46, 0x1a, 0xf0, 0xa9, 0x3f, 0xec, 0x86, 0x06, 0x13, 0xf2, 0x31, 0x0c, 0x24, 0x95, 0x07, 0x91, 0xc0, 0x7c, 0x5f, 0x9d, 0xa3, 0x03, 0x7b, 0x79, 0xbd, 0xe9, 0x6b, 0x08, 0x36, 0x48, 0x2d, 0x5a, 0xb0, 0xcb, 0x19, 0x7f, 0xcc, 0x1b, 0x7d, 0x99, 0xef, 0x9a, 0x84, 0x35, 0x46, 0x54, 0x5c, 0xdc, 0x07, 0x33, 0x97, 0xe4, 0xfa, 0x72, 0xd2, 0x8c, 0x39, 0x53, 0x95, 0x49, 0x34, 0x15, 0x7b, 0x5a, 0xf7, 0x20, 0x93, 0xa2, 0xb0, 0x84, 0x05, 0xb7, 0x6b, 0xa1, 0xf9, 0x37, 0x21, 0x27, 0xb4, 0x5b, 0xf1, 0x42, 0x04, 0xce, 0xad, 0x0e, 0xdf, 0xbf, 0x98, 0x51, 0x47, 0x35, 0x6e, 0x69, 0x70, 0xa2, 0xa5, 0x83, 0x25, 0xbc, 0xf3, 0x0e, 0x68, 0x88, 0x10, 0x70, 0x59, 0xb7, 0xbd, 0xf7, 0x59, 0x36, 0x05, 0x12, 0x6e, 0x01, 0xc3, 0xc1, 0xe9, 0x38, 0x64, 0x4a, 0x47, 0x74, 0xee, 0x2e, 0x56, 0x5b, 0x41, 0x5b, 0x99, 0x72, 0x9e, 0xa3, 0xec, 0x33, 0x65, 0x6d, 0x6b, 0x60, 0x23, 0xaa, 0x91, 0x96, 0xcb, 0x0b, 0x9d, 0x25, 0x44, 0x71, 0x3a, 0x1f, 0x24, 0xa6, 0x5e, 0xaf, 0xbc, 0x4a, 0x73, 0xac, 0x54, 0x10, 0xb5, 0x6e, 0xb7, 0x2a, 0xdb, 0xe1, 0xf3, 0x01, 0xf9, 0xd7, 0x5a, 0x2a, 0xa5, 0xa3, 0xcc, 0x95, 0x59, 0xe3, 0x39, 0x08, 0x18, 0x9d, 0x61, 0xcc, 0x54, 0x8e, 0xde, 0xa7, 0x10, 0xbe, 0x65, 0x0a, 0x42, 0x58, 0x49, 0x8a, 0x7b, 0xb9, 0x40, 0x94, 0xc9, 0xc7, 0x6a, 0x5d, 0xdd, 0x84, 0x8f, 0x19, 0x69, 0xe3, 0xa9, 0x6d, 0xcc, 0xda, 0xa2, 0x26, 0xf1, 0xb8, 0x5e, 0x2b, 0x74, 0xb9, 0xfc, 0xb0, 0x07, 0xd7, 0x59, 0xad, 0x15, 0xe4, 0xd6, 0x8f, 0xa5, 0xd6, 0x5c, 0x2d, 0x80, 0x62, 0x9d, 0xfd, 0x96, 0xcc, 0x9c, 0x88, 0x9e, 0xfd, 0x6f, 0x1b, 0xfd, 0xd6, 0x43, 0xc0, 0xe9, 0xc4, 0xa2, 0x6c, 0xce, 0x94, 0xf1, 0x7a, 0xf0, 0x89, 0x3d, 0x58, 0x53, 0xac, 0x37, 0x81, 0xd8, 0x64, 0x7c, 0xab, 0xa8, 0x46, 0x1a, 0x41, 0xd5, 0x2e, 0x50, 0x13, 0x3f, 0x8f, 0x96, 0x4d, 0xb5, 0x07, 0xdd, 0xa5, 0x5d, 0x37, 0x18, 0xd9, 0x56, 0xd1, 0xfb, 0x59, 0x9b, 0xf2, 0x03, 0x40, 0x2b, 0xb3, 0xb6, 0x89, 0x67, 0xfb, 0x2c, 0x80, 0xbb, 0x97, 0xce, 0x76, 0x80, 0x8c, 0x5e, 0xb9, 0x21, 0xab, 0x38, 0xc4, 0x7d, 0x67, 0xd7, 0xb2, 0x8d, 0xe4, 0x9a, 0xf9, 0x47, 0x50, 0xc8, 0x54, 0xc2, 0x76, 0xd3, 0x01, 0x9a, 0x90, 0xd9, 0x2d, 0x96, 0x5d, 0x70, 0xad, 0x88, 0x74, 0xa3, 0xee, 0x75, 0xd8, 0x38, 0x2f, 0xf6, 0xcc, 0x35, 0xed, 0xde, 0xe9, 0xa2, 0x9f, 0x1d, 0x6d, 0x8f, 0xa4, 0xe5, 0xd6, 0x59, 0x7a, 0x0b, 0xb0, 0x2a, 0x30, 0xaf, 0xab, 0xbf, 0x1e, 0x1f, 0xf0, 0x6e, 0xd3, 0xf9, 0xb5, 0x67, 0x4f, 0x90, 0x0f, 0x3a, 0x73, 0x91, 0x08, 0x99, 0xb5, 0xe7, 0xf2, 0x5f, 0x18, 0xdb, 0xfb, 0xd2, 0x5c, 0x80, 0x01, 0x25, 0x71, 0x4e, 0xa7, 0x42, 0x32, 0x0d, 0xa8, 0xc6, 0x50, 0xf5, 0x6b, 0x4c, 0x8c, 0x13, 0xd8, 0xee, 0x2a, 0xee, 0x6b, 0x09, 0xa2, 0x6b, 0x86, 0x41, 0x98, 0xee, 0x0c, 0xc5, 0x0e, 0xc2, 0x2b, 0xd4, 0xd9, 0xbb, 0x79, 0x81, 0x51, 0x19, 0x43, 0xb3, 0x4d, 0xb0, 0x21, 0x6f, 0x4f, 0x46, 0xce, 0x5a, 0xfb, 0x3d, 0x37, 0x79, 0xce, 0x72, 0xd2, 0x3c, 0x0c, 0x64, 0x31, 0xbb, 0xfa, 0x99, 0xd7, 0x3f, 0x4e, 0x3d, 0x4a, 0x04, 0xe4, 0x0d, 0x6a, 0x3d, 0xb2, 0x73, 0x00, 0x59, 0xfe, 0xf2, 0x9a, 0x85, 0xce, 0xc5, 0x97, 0x72, 0xa1, 0xc3, 0x7e, 0x58, 0x5c, 0x86, 0x94, 0x3b, 0x87, 0xcc, 0xad, 0x6d, 0xb9, 0x1d, 0x42, 0x54, 0x51, 0xaf, 0xc4, 0x6d, 0x67, 0x86, 0x30, 0x91, 0x03, 0xdf, 0xe4, 0x77, 0x8c, 0xcf, 0xb1, 0x7b, 0x83, 0x28, 0x31, 0x9d, 0x71, 0x9c, 0x5a, 0xcd, 0x1d, 0x25, 0x54, 0x66, 0x03, 0xa4, 0x88, 0xf8, 0x02, 0xc8, 0xfa, 0x4a, 0x55, 0x31, 0xd8, 0x9f, 0xc4, 0xd5, 0x53, 0x39, 0x1b, 0xa3, 0xad, 0x1c, 0xdc, 0x67, 0x93, 0x14, 0x31, 0xee, 0xae, 0xf9, 0x24, 0x6a, 0x75, 0x32, 0x12, 0x17, 0x45, 0x78, 0x5d, 0x1f, 0xb3, 0xdc, 0x62, 0xbc, 0x21, 0x0c, 0xab, 0x9c, 0x8f, 0xd2, 0x65, 0x89, 0xb4, 0xdd, 0x14, 0x49, 0x4d, 0xc4, 0x85, 0xc3, 0xb6, 0x48, 0x04, 0x64, 0xb7, 0xda, 0xd0, 0xc1, 0xa0, 0x5d, 0xcc, 0x7e, 0x98, 0x2c, 0x77, 0x6e, 0x32, 0x5f, 0x1e, 0xfb, 0x41, 0x4a, 0x51, 0xc9, 0xee, 0x47, 0x93, 0x96, 0x07, 0xb6, 0x55, 0x65, 0x9a, 0x41, 0x26, 0xdb, 0xc3, 0x65, 0x24, 0xe9, 0xc2, 0x2d, 0xb6, 0xab, 0x50, 0x41, 0x7d, 0x90, 0x34, 0x20, 0x87, 0xbc, 0x11, 0xaa, 0xc6, 0xaa, 0x82, 0xe1, 0xc1, 0x16, 0x68, 0xf0, 0x8a, 0x1a, 0x83, 0x6d, 0xf0, 0x97, 0x40, 0xdb, 0xf5, 0xd6, 0xd2, 0x73, 0x83, 0x6f, 0x84, 0x24, 0x5a, 0x6a, 0x4e, 0xd8, 0x4d, 0xa5, 0xa6, 0xf9, 0xae, 0x75, 0x98, 0x33, 0x07, 0x90, 0x19, 0x7c, 0x0a, 0x2b, 0x99, 0x52, 0xcb, 0x5f, 0xd7, 0x44, 0x2d, 0xd1, 0xf9, 0xb4, 0x9a, 0x92, 0xdc, 0xdb, 0xf8, 0x44, 0xa9, 0x0e, 0xd8, 0x7f, 0xa9, 0x3f, 0xf0, 0x73, 0x5a, 0xc6, 0xcb, 0xce, 0xc2, 0x62, 0xbf, 0xe0, 0x03, 0x7a, 0x20, 0xfc, 0x30, 0xa9, 0xb3, 0x22, 0x5f, 0x7a, 0x65, 0xdc, 0xff, 0x70, 0x3d, 0x66, 0x6c, 0x4a, 0x90, 0x11, 0xc1, 0x84, 0x74, 0xe9 ],
-const [ 0x2d, 0x18, 0x66, 0x7c, 0xac, 0x74, 0x03, 0xce, 0x75, 0x17, 0x5d, 0x39, 0x0e, 0x00, 0xc5, 0xd4, 0x00, 0x25, 0xad, 0x5f, 0xda, 0x64, 0xc5, 0xd6, 0x78, 0xbc, 0x63, 0x46, 0x85, 0xbd, 0x28, 0xe0, 0x3f, 0x3d, 0xe1, 0x4c, 0x7a, 0x4d, 0xab, 0x40, 0xe8, 0x6c, 0x5b, 0x50, 0x97, 0xfa, 0x1c, 0x08, 0xbb, 0xef, 0x5a, 0x38, 0xae, 0xcc, 0xdf, 0x8f, 0x35, 0xd2, 0x3c, 0x6b, 0x05, 0x72, 0x6b, 0xf0, 0x86, 0x06, 0xb2, 0x58, 0xd6, 0xbe, 0xca, 0x89, 0x11, 0xdd, 0x41, 0xed, 0xd0, 0x25, 0x1d, 0x7e, 0xef, 0x8f, 0xc2, 0x20, 0x94, 0x40, 0x16, 0x34, 0x6c, 0xb9, 0xe2, 0x6a, 0x38, 0x4e, 0x7c, 0xd6, 0x89, 0xd9, 0xa3, 0x47, 0xc7, 0xaf, 0xaa, 0xd4, 0x78, 0xd3, 0xd9, 0xb7, 0xbf, 0x6a, 0x10, 0x5f, 0x23, 0x6f, 0xad, 0xc0, 0x92, 0xa8, 0xb0, 0xee, 0xa6, 0xd9, 0x1d, 0xea, 0x27, 0x37, 0xa2, 0xbb, 0xd0, 0x1f, 0x7a, 0xc1, 0x56, 0x08, 0x91, 0x47, 0xa6, 0xb7, 0xe9, 0x57, 0x6e, 0xb2, 0x3c, 0xd2, 0xe0, 0xf6, 0xe3, 0xc0, 0xb3, 0xec, 0xf6, 0xe4, 0x6a, 0x9a, 0xb5, 0x93, 0xd8, 0x16, 0x26, 0xc7, 0xe4, 0x41, 0x00, 0x70, 0x8a, 0xb1, 0xc8, 0x0a, 0x22, 0xef, 0x3a, 0x74, 0xe5, 0xe3, 0xea, 0x00, 0xad, 0x8c, 0x2b, 0xc7, 0xfc, 0xf5, 0x30, 0x3f, 0x40, 0x64, 0x71, 0x0f, 0x55, 0xd4, 0x50, 0x21, 0x4c, 0xa5, 0xfd, 0xf9, 0x6b, 0x93, 0x97, 0x46, 0x74, 0xe5, 0x94, 0xb7, 0x2b, 0xe6, 0x62, 0x10, 0x12, 0x99, 0x4e, 0x7d, 0x77, 0xa9, 0xa6, 0x26, 0xb0, 0x9f, 0x1a, 0x03, 0xa6, 0x57, 0x68, 0xf2, 0x90, 0xb5, 0x39, 0x07, 0x01, 0x94, 0x45, 0x23, 0x25, 0xff, 0xbe, 0xc8, 0x47, 0xa4, 0xec, 0x2b, 0x97, 0x85, 0x15, 0x8b, 0x2b, 0xf1, 0x9f, 0xc2, 0x43, 0xb3, 0x78, 0x1a, 0xd1, 0x89, 0xb6, 0x61, 0x39, 0xd8, 0x7b, 0x40, 0x55, 0x9d, 0x1c, 0xc8, 0xbc, 0xa7, 0x82, 0x4e, 0x44, 0x04, 0xd0, 0x79, 0xc5, 0xb9, 0x45, 0x99, 0x20, 0xb6, 0x65, 0x3a, 0x80, 0x08, 0x53, 0xfa, 0xe0, 0x51, 0x82, 0x97, 0xce, 0x75, 0x8c, 0x4c, 0x6e, 0x97, 0x62, 0x5e, 0xc1, 0x44, 0xa6, 0xf2, 0x27, 0xed, 0x55, 0x21, 0x23, 0x9b, 0xa9, 0x4e, 0x5f, 0xde, 0x3e, 0xb7, 0xf0, 0x06, 0x73, 0x4b, 0xda, 0x96, 0x13, 0xbc, 0xd7, 0xf6, 0x35, 0xd4, 0x54, 0x68, 0x60, 0x0c, 0xbd, 0x3d, 0xf3, 0x5b, 0xfa, 0x49, 0xc4, 0x4c, 0x3a, 0x94, 0x08, 0x53, 0xef, 0x52, 0x73, 0x61, 0x19, 0x16, 0xa0, 0xb6, 0xc8, 0x42, 0xb2, 0xf7, 0xdc, 0xc2, 0x3c, 0x80, 0x10, 0xfa, 0x5e, 0xfb, 0x37, 0xfc, 0x31, 0x31, 0xc5, 0xff, 0x65, 0x21, 0x90, 0x0d, 0x29, 0x4f, 0xd8, 0xfb, 0x4b, 0x5f, 0x85, 0x9e, 0xa1, 0xe2, 0xb1, 0x3c, 0xa7, 0x70, 0x66, 0x41, 0x69, 0xf7, 0xa9, 0x33, 0xa4, 0x52, 0xb7, 0xe8, 0x28, 0x1e, 0x8e, 0xf7, 0x80, 0xc9, 0xaf, 0x6c, 0xd5, 0xeb, 0x23, 0xc0, 0x10, 0xda, 0xbc, 0x08, 0x3f, 0x79, 0x9d, 0x6c, 0x3a, 0x50, 0xfc, 0xdb, 0x86, 0xe2, 0x27, 0xfd, 0x79, 0x3a, 0xc5, 0x69, 0x9f, 0xc8, 0x5f, 0x19, 0x5d, 0x6b, 0x1f, 0x1a, 0xd4, 0xcf, 0xd7, 0x88, 0x08, 0xf9, 0x44, 0xba, 0x42, 0x20, 0x95, 0xba, 0xb3, 0xbf, 0x27, 0xf8, 0x59, 0xe8, 0x93, 0x3f, 0x27, 0xdb, 0xea, 0xe7, 0x60, 0xd7, 0x3f, 0x4d, 0x44, 0x30, 0x66, 0x80, 0xee, 0xa2, 0xfc, 0x3d, 0x7d, 0xe5, 0xa7, 0x1e, 0x72, 0x81, 0x9f, 0x0e, 0x59, 0xe4, 0x6e, 0x00, 0xac, 0xb2, 0xf4, 0xe1, 0xf4, 0x5c, 0xad, 0xca, 0x31, 0xf4, 0x37, 0x7b, 0x7c, 0x40, 0x0e, 0x05, 0xeb, 0x0d, 0x9b, 0xc6, 0xb5, 0xc5, 0x6d, 0x9a, 0x96, 0x44, 0xc6, 0x50, 0x75, 0xe8, 0x59, 0x5b, 0x45, 0xe7, 0x52, 0xca, 0x29, 0xe6, 0x97, 0x7b, 0xdb, 0xc7, 0x4d, 0x8b, 0x4e, 0xc2, 0x9f, 0x10, 0x92, 0xb7, 0xba, 0x0b, 0xf9, 0xc2, 0x1c, 0x98, 0x78, 0x11, 0x0f, 0x68, 0x4f, 0xf2, 0x70, 0x71, 0xec, 0x30, 0xb5, 0xe4, 0x0d, 0xa0, 0x2f, 0x60, 0x26, 0xf7, 0x8b, 0x65, 0x02, 0xde, 0x9f, 0x0b, 0xac, 0x49, 0x64, 0xf4, 0x90, 0x04, 0x3e, 0x7f, 0xde, 0x8e, 0x84, 0x3e, 0x2f, 0x2b, 0x3c, 0xab, 0x6b, 0x35, 0x26, 0x16, 0xea, 0xb3, 0xfd, 0xe2, 0xd9, 0x2d, 0xf9, 0xf1, 0xe0, 0xbe, 0x98, 0x5d, 0x01, 0x6a, 0x9e, 0x69, 0xc4, 0xb2, 0x5a, 0xb7, 0x91, 0x66, 0x2c, 0xbb, 0x5d, 0xbb, 0x44, 0x6f, 0x89, 0x9d, 0xac, 0x48, 0x06, 0x46, 0x89, 0x69, 0xbe, 0x10, 0x9e, 0x18, 0x2f, 0x87, 0x11, 0x6e, 0x59, 0xc3, 0x72, 0x52, 0xdb, 0xf5, 0xf9, 0xa8, 0x59, 0x3f, 0x0f, 0xc5, 0x20, 0xc9, 0x10, 0x26, 0x0d, 0x11, 0x50, 0x62, 0xab, 0x82, 0x5c, 0x5e, 0x9b, 0x49, 0x82, 0xc0, 0x39, 0x64, 0x93, 0xa6, 0x7c, 0xfb, 0xe7, 0x97, 0x1e, 0xf4, 0xa2, 0xba, 0xfd, 0xc2, 0x36, 0x45, 0xc2, 0x7d, 0x29, 0x39, 0xc0, 0x38, 0x19, 0x4d, 0x1f, 0x8f, 0xfd, 0x27, 0x39, 0x7f, 0xad, 0xd2, 0x44, 0x7b, 0xa5, 0x6d, 0x32, 0xbb, 0x05, 0x20, 0xd5, 0xd8, 0xdd, 0x55, 0x47, 0x96, 0xa8, 0x24, 0x89, 0x00, 0x16, 0x0e, 0x6a, 0xbb, 0x0f, 0xef, 0xaa, 0x94, 0xf4, 0x2e, 0x60, 0x5b, 0x28, 0x37, 0x99, 0xf4, 0xcf, 0x2b, 0x42, 0xab, 0xd5, 0xd5, 0x48, 0xc8, 0x32, 0xe1, 0xfd, 0x63, 0x6d, 0x48, 0xbe, 0x7a, 0x5f, 0x0f, 0xd3, 0x41, 0x3a, 0x31, 0x96, 0xb9, 0xca, 0xda, 0xd7, 0x84, 0xfa, 0xd5, 0x80, 0xf8, 0x99, 0x48, 0x75, 0x72, 0x5e, 0x9f, 0xbe, 0xed, 0x2a, 0xc6, 0xe8, 0xd3, 0x8e, 0x9b, 0xa8, 0x12, 0x8d, 0xa3, 0xc2, 0x73, 0xa3, 0xfb, 0x29, 0x28, 0x06, 0x92, 0x68, 0xa3, 0x2b, 0x96, 0x40, 0xaf, 0x8c, 0x2c, 0x93, 0xb9, 0xa9, 0x64, 0x81, 0x6e, 0x4c, 0x6c, 0xd0, 0x8c, 0x12, 0x04, 0x91, 0xf1, 0x27, 0x31, 0x00, 0xf9, 0x51, 0x36, 0xad, 0x06, 0x30, 0xc0, 0xd9, 0x60, 0xc4, 0x61, 0x23, 0x40, 0x2f, 0x3f, 0x64, 0x27, 0xbc, 0x0e, 0xd7, 0x74, 0x21, 0x3b, 0x7d, 0x36, 0x01, 0x6a, 0xbf, 0x3f, 0xb5, 0x23, 0x56, 0x7a, 0x4c, 0xc8, 0x68, 0x7e, 0xd0, 0xcb, 0xf3, 0x62, 0xcb, 0x1d, 0x6f, 0xd3, 0x0a, 0xea, 0xaf, 0x65, 0xa1, 0x83, 0x09, 0x27, 0x30, 0x9c, 0xb6, 0x7a, 0x64, 0xb7, 0x7b, 0x23, 0xc0, 0xe0, 0x89, 0x9e, 0x9d, 0x9b, 0xa3, 0xb5, 0x6f, 0x1b, 0x7e, 0x52, 0x4b, 0xb4, 0x6d, 0x92, 0xa6, 0x93, 0x3e, 0x1a, 0x60, 0xad, 0x5e, 0xae, 0x01, 0xf5, 0x44, 0x00, 0x42, 0xd2, 0x0d, 0xc5, 0xcf, 0xd0, 0x64, 0x0e, 0x4b, 0x96, 0xa5, 0xd6, 0x94, 0x18, 0x42, 0xd7, 0x49, 0x0d, 0x65, 0xa3, 0x8a, 0xa4, 0xd7, 0xef, 0xff, 0x72, 0x20, 0x32, 0x1c, 0xaf, 0xf0, 0x6f, 0xa3, 0xa3, 0xbd, 0x4e, 0x6a, 0x5b, 0xae, 0x72, 0x5e, 0xa0, 0xb8, 0x07, 0xc8, 0x2a, 0x07, 0x9a, 0xcf, 0x10, 0x9f, 0x2e, 0x3e, 0x83, 0x43, 0x8c, 0x88, 0xbc, 0x95, 0xda, 0x0a, 0x33, 0x80, 0x6f, 0x8f, 0x12, 0xd3, 0xe6, 0x19, 0xe9, 0x2e, 0x71, 0xdf, 0xa3, 0x22, 0x70, 0x92, 0xb9, 0x94, 0x43, 0xe4, 0xa5, 0x62, 0x5c, 0x4b, 0x9a, 0x4a, 0x98, 0x02, 0x72, 0x07, 0xcf, 0x52, 0xe8, 0xbc, 0xaa, 0x0f, 0x07, 0x96, 0xb4, 0x65, 0xe2, 0xad, 0xb4, 0xd5, 0x86, 0x2c, 0x3b, 0x7a, 0x2d, 0xb2, 0x79, 0x91, 0xb4, 0xf8, 0x54, 0x38, 0x4f, 0xb3, 0xbc, 0x76, 0x7c, 0xbc, 0x38, 0x7c, 0x35, 0x6e, 0xc5, 0x2a, 0x6a, 0x4f, 0xe1, 0xd5, 0xae, 0xf3, 0xe3, 0x48, 0x31, 0x1e, 0x8d, 0x08, 0xee, 0x29, 0xe4, 0xdd, 0x25, 0xa7, 0x3f, 0x8d, 0x0c, 0x48, 0x9f, 0xeb, 0xc2, 0xfd, 0x3e, 0x10, 0x84, 0x5c, 0x6b, 0xe9, 0x23, 0x47, 0x94, 0xf2, 0xb5, 0xc8, 0xa5, 0x40, 0x8b, 0x40, 0x91, 0xc5, 0x64, 0xc1, 0x2d, 0xd0, 0xe0, 0xb8, 0x45, 0xd3, 0x38, 0xcf, 0xea, 0x69, 0x2b, 0x11, 0x09, 0x97, 0x3c, 0x4f, 0x42, 0x52, 0x1a, 0xc3, 0xf6, 0x42, 0x60, 0xf4, 0xa2, 0xc6, 0x7e, 0xd9, 0x6c, 0x38, 0xf7, 0x41, 0xfc, 0x72, 0xce, 0x73, 0x8d, 0x91, 0x3a, 0x11, 0x44, 0xf9, 0xa1, 0x42, 0xc0, 0x99, 0xc4, 0x0f, 0xf2, 0x70, 0x38, 0x0e, 0x2f, 0x4f, 0x15, 0x3e, 0x83, 0xe1, 0xf2, 0x33, 0x49, 0xea, 0x10, 0x73, 0xf8, 0xcc, 0xd5, 0x1f, 0x40, 0x4f, 0x7c, 0xd6, 0x56, 0xa1, 0x0c, 0xd6, 0x8c, 0x9c, 0x86, 0x64, 0x24, 0x48, 0x63, 0x6f, 0x66, 0xa1, 0x3d, 0x70, 0xf0, 0x9a, 0xcd, 0x94, 0x4e, 0x61, 0x15, 0x1d, 0xca, 0xe5, 0xde, 0x05, 0x85, 0x96, 0x65, 0xe5, 0xc7, 0x6b, 0x52, 0x16, 0x94, 0x2a, 0xe9, 0x16, 0x80, 0xe4, 0x84, 0x2d, 0xc4, 0xbe, 0x41, 0x50, 0x90, 0xf8, 0xf8, 0x45, 0xa3, 0x27, 0x70, 0x08, 0x1a, 0xc5, 0xd2, 0x6e, 0x85, 0xec, 0x5d, 0x08, 0x40, 0x5f, 0x5c, 0x4a, 0x01, 0xca, 0x55, 0xec, 0xad, 0x4b, 0x84, 0x91, 0x70, 0x30, 0x87, 0xa7, 0x0c, 0x03, 0x5b, 0x8e, 0x71, 0xc4, 0x87, 0xfc, 0x8f, 0x75, 0x97, 0xa0, 0x68, 0xdc, 0xcc, 0x05, 0x69, 0x84, 0x12, 0xba, 0xfa, 0x05, 0x32, 0xb0, 0x54, 0x85, 0x49, 0xe3, 0x92, 0x7f, 0x79, 0x3c, 0x0b, 0xc3, 0xde, 0xb6, 0xe0, 0xbe, 0xc4, 0xc1, 0xd1, 0xfc, 0x17, 0xe4, 0x55, 0xeb, 0x1a, 0xa5, 0xe9, 0xe2, 0x5c, 0xad, 0xa8, 0x61, 0xe9, 0x28, 0x1c, 0x9b, 0xbd, 0x6b, 0x54, 0x31, 0x7e, 0xd9, 0x36, 0x41, 0x6a, 0x07, 0x17, 0x9f, 0x8e, 0x1e, 0x89, 0x62, 0x38, 0x81, 0x74, 0xa3, 0xb0, 0xb0, 0x69, 0x81, 0x23, 0x6d, 0x32, 0x68, 0xe0, 0x1d, 0xae, 0x94, 0xc7, 0x70, 0xdc, 0xd0, 0xfd, 0x44, 0x35, 0x84, 0xe5, 0xc7, 0x3f, 0xee, 0x4c, 0xdc, 0x5f, 0xb0, 0xe4, 0xc1, 0xee, 0x8b, 0xf4, 0xee, 0x90, 0x6a, 0x4d, 0x40, 0xc1, 0xa2, 0x80, 0x56, 0xb1, 0x78, 0x4e, 0x3c, 0x52, 0xe4, 0x60, 0x46, 0xaf, 0x94, 0x39, 0x3f, 0x7f, 0x34, 0x68, 0xc3, 0xfa, 0xed, 0x02, 0xea, 0xeb, 0x2b, 0x4f, 0x27, 0x07, 0xa4, 0xc4, 0x6f, 0x7d, 0x96, 0x31, 0x9d, 0xce, 0x4f, 0x3c, 0x15, 0xdf, 0xf3, 0x0e, 0xa7, 0x4d, 0x7a, 0x4c, 0xb7, 0x00, 0xf8, 0x49, 0x9b, 0x03, 0x21, 0x7a, 0x45, 0x92, 0x0c, 0x2a, 0x22, 0x75, 0x37, 0x6e, 0x41, 0x8d, 0xcc, 0x5c, 0xb8, 0xad, 0x22, 0x78, 0x44, 0xab, 0x87, 0x6f, 0x2f, 0xb6, 0x3d, 0x08, 0x77, 0xe9, 0xc2, 0x57, 0x2c, 0x21, 0x54, 0x34, 0x1a, 0x0c, 0xb5, 0xeb, 0xa8, 0x83, 0x2c, 0x35, 0x00, 0x1a, 0xcc, 0x67, 0x70, 0xf5, 0xf8, 0xea, 0x10, 0xdd, 0x27, 0xeb, 0xa6, 0x92, 0xe5, 0x53, 0xc6, 0x63, 0x1b, 0xfa, 0x3e, 0xfd, 0x8f, 0x17, 0xb1, 0x81, 0xae, 0xfc, 0x81, 0xd9, 0x8a, 0x00, 0xf2, 0x4b, 0x1f, 0xbc, 0x8d, 0x4e, 0xda, 0x7a, 0xc3, 0x9d, 0x5c, 0xea, 0xd3, 0x8b, 0x7b, 0x17, 0xee, 0x96, 0x89, 0x9a, 0x98, 0x3e, 0xd9, 0x0d, 0x51, 0x18, 0x80, 0xc3, 0x75, 0x1e, 0x59, 0xb6, 0x61, 0x49, 0x4c, 0xc1, 0xd7, 0x62, 0xcf, 0x10, 0xa4, 0x15, 0xac, 0xd4, 0x7f, 0x47, 0x05, 0x3b, 0x35, 0xa9, 0x96, 0x9f, 0x03, 0x8d, 0x3b, 0xfe, 0x43, 0xf9, 0xb2, 0xaa, 0x4c, 0xfa, 0xa1, 0x41, 0x93, 0x3b, 0xdb, 0xe0, 0x16, 0xd6, 0xdf, 0x94, 0xfa, 0x6a, 0xa2, 0x11, 0x72, 0x6e, 0x8e, 0xa7, 0xe4, 0xc5, 0xca, 0x71, 0x47, 0x92, 0xbc, 0xd0, 0xd0, 0x4d, 0xcc, 0x17, 0xcd, 0x17, 0x6b, 0x88, 0xd1, 0x4a, 0x54, 0x80, 0x11, 0x55, 0x12, 0xee, 0x0e, 0xc7, 0xc3, 0x09, 0x74, 0xa9, 0x1b, 0x43, 0x42, 0x11, 0xac, 0x78, 0x2c, 0xf4, 0x64, 0x6c, 0x3e, 0x3c, 0x57, 0x74, 0xc1, 0x1a, 0xbe, 0x73, 0x62, 0x9e, 0x40, 0x08, 0x91, 0x85, 0x71, 0x06, 0x28, 0x52, 0x99, 0x25, 0x4d, 0xa0, 0xb6, 0xf7, 0x99, 0xb6, 0xc4, 0x1d, 0x7a, 0x5c, 0x3b, 0xba, 0xd5, 0xed, 0xda, 0x28, 0xf0, 0xae, 0xa3, 0xea, 0x90, 0x5e, 0x27, 0xe2, 0x5e, 0x0e, 0x03, 0xc4, 0x8f, 0x33, 0xab, 0xcb, 0xc4, 0xfa, 0x66, 0xab, 0x2f, 0xdb, 0x9a, 0xc6, 0xf8, 0x71, 0x4a, 0xa2, 0xdf, 0x89, 0xdd, 0x9b, 0x22, 0x79, 0x21, 0xd5, 0xa1, 0xb3, 0x8f, 0x75, 0x40, 0x99, 0xd1, 0x11, 0x8d, 0x93, 0x81, 0x64, 0xa3, 0x5f, 0x34, 0x47, 0x4e, 0xa9, 0xb7, 0xdd, 0x6f, 0xdc, 0x98, 0x0d, 0xa2, 0x37, 0xe8, 0x35, 0x1f, 0x23, 0x40, 0x1c, 0xde, 0xc4, 0x02, 0x29, 0xff, 0xce, 0xe1, 0xd3, 0x68, 0x9a, 0xa4, 0x59, 0xb0, 0x79, 0x26, 0xb3, 0x3c, 0x48, 0xa2, 0xc8, 0xa7, 0x44, 0x2d, 0xe1, 0x67, 0x20, 0x84, 0x5e, 0xae, 0x55, 0x08, 0xa8, 0x8f, 0xba, 0x07, 0x66, 0x62, 0x54, 0x3d, 0xf4, 0x69, 0x6f, 0x9b, 0x10, 0xb4, 0xed, 0x47, 0xd7, 0x41, 0xdf, 0xe3, 0xf1, 0x68, 0x52, 0x12, 0x08, 0x76, 0x6b, 0x38, 0x7e, 0x99, 0xb7, 0x82, 0x5f, 0xfc, 0xbc, 0x27, 0x94, 0x32, 0xd4, 0xed, 0x5a, 0xd8, 0x3b, 0xee, 0xf3, 0x76, 0x66, 0x9c, 0x9b, 0xa7, 0x96, 0x03, 0xbe, 0x7a, 0xae, 0x4e, 0x68, 0x17, 0x41, 0x8d, 0xfd, 0xa6, 0xf0, 0xb5, 0x2a, 0x6c, 0xf3, 0xe8, 0x1b, 0x37, 0xf5, 0xf7, 0xef, 0xfd, 0x25, 0x26, 0x69, 0xc0, 0x8a, 0x2f, 0xe8, 0xb4, 0x96, 0x89, 0x99, 0xa4, 0xff, 0xe9, 0xeb, 0x92, 0xca, 0x0a, 0x43, 0x9e, 0xa9, 0xaa, 0xf2, 0x29, 0x86, 0xd5, 0x64, 0x39, 0x60, 0x65, 0x99, 0x1f, 0x56, 0xca, 0xd9, 0x58, 0x01, 0x07, 0xa4, 0xb2, 0x07, 0xfd, 0xe9, 0xaf, 0xed, 0xec, 0x78, 0x2e, 0x2d, 0x37, 0xb8, 0x48, 0x89, 0x67, 0x9d, 0x79, 0x9e, 0x73, 0xd5, 0x00, 0xbc, 0x3f, 0x42, 0x88, 0xf5, 0x62, 0xad, 0x07, 0x74, 0x2c, 0xb9, 0xe7, 0x11, 0xe8, 0x15, 0x64, 0x22, 0x5e, 0xf6, 0x35, 0x93, 0x9c, 0xc5, 0x6e, 0x39, 0xf6, 0x14, 0xa5, 0x63, 0x4c, 0xd7, 0x53, 0xb2, 0x8b, 0xd1, 0x7e, 0x2b, 0x76, 0x4c, 0x95, 0x8b, 0xa7, 0x0d, 0x9c, 0xda, 0xd0, 0x87, 0x88, 0x43, 0x47, 0x4f, 0xed, 0x23, 0xc2, 0xd0, 0xd6, 0x60, 0x5f, 0x40, 0xf4, 0xfc, 0xe7, 0xd3, 0xfc, 0xea, 0x53, 0x2e, 0x4a, 0x20, 0x8f, 0x1e, 0xca, 0xed, 0x7f, 0x8a, 0x18, 0x8d, 0x40, 0xa6, 0xe6, 0xfb, 0xb0, 0x6a, 0x9f, 0x06, 0x30, 0x43, 0x49, 0xa7, 0xa8, 0x08, 0xb0, 0x92, 0xcc, 0x2f, 0xc1, 0x0b, 0x9e, 0x41, 0x34, 0xfb, 0x34, 0x8b, 0x6e, 0x43, 0xbc, 0x17, 0xa5, 0x50, 0xbd, 0xda, 0x45, 0xef, 0xa0, 0x2f, 0x92, 0x63, 0x6e, 0x84, 0x8f, 0xb6, 0xdb, 0x53, 0x1f, 0x4c, 0x84, 0x55, 0x6b, 0xbe, 0x75, 0xf2, 0x83, 0xe5, 0xee, 0xfb, 0x48, 0x34, 0x67, 0x9b, 0x89, 0x4b, 0xd1, 0x8b, 0x6c, 0xca, 0x1f, 0x86, 0x10, 0x63, 0x05, 0xfd, 0x70, 0x34, 0xff, 0x0b, 0x8b, 0x53, 0x96, 0xab, 0xc2, 0xaa, 0xdf, 0x29, 0x81, 0x05, 0x44, 0xd6, 0x21, 0x69, 0x86, 0x00, 0x0d, 0xa8, 0x03, 0x21, 0x24, 0x32, 0x35, 0x57, 0x5f, 0x2e, 0x7c, 0x14, 0xb4, 0xc9, 0x1d, 0x17, 0x3a, 0xce, 0x8a, 0x9b, 0x8d, 0x78, 0xe4, 0xce, 0x74, 0x84, 0xbe, 0x84, 0xc1, 0x89, 0x24, 0x2d, 0x79, 0x8c, 0xdb, 0x04, 0x35, 0xcf, 0xeb, 0x8a, 0xc8, 0xeb, 0x5b, 0x33, 0x22, 0x1e, 0x3c, 0x5f, 0x75, 0xe6, 0xe9, 0x8b, 0x96, 0xcf, 0x8c, 0xc9, 0xa5, 0x89, 0xe4, 0x6d, 0xf0, 0x3d, 0x46, 0x0a, 0x15, 0x21, 0xe2, 0x9d, 0x67, 0x4b, 0x48, 0x07, 0x93, 0xc3, 0x2b, 0xc1, 0x84, 0xdb, 0x64, 0xcb, 0x83, 0xc3, 0x39, 0xe5, 0xa3, 0x58, 0xe0, 0x02, 0x5c, 0x3d, 0x3f, 0xfa, 0x76, 0x2d, 0xf6, 0x7f, 0x28, 0x8f, 0x9f, 0x52, 0x82, 0x4b, 0x54, 0xb6, 0x08, 0xdd, 0x72, 0x26, 0xa0, 0xa8, 0x9d, 0x43, 0xae, 0x8c, 0x05, 0x10, 0x7d, 0xba, 0xe7, 0x61, 0xe1, 0xc7, 0x56, 0x91, 0x1a, 0x00, 0x3b, 0x74, 0xfc, 0xfe, 0x9b, 0x8c, 0x4d, 0x7a, 0x18, 0x80, 0x6f, 0x62, 0xbb, 0xc9, 0x3e, 0x2b, 0xf0, 0xaf, 0x3c, 0x6a, 0xd2, 0x74, 0xec, 0x9e, 0xa9, 0xcf, 0x7b, 0x50, 0xb1, 0x9c, 0xa5, 0x5f, 0x1e, 0xd1, 0xd7, 0x95, 0x5c, 0xb4, 0x91, 0x7d, 0x9b, 0x4b, 0x0f, 0x79, 0x8b, 0x14, 0x28, 0x0f, 0x64, 0xf7, 0x76, 0x84, 0x2a, 0x79, 0xb7, 0xac, 0x2f, 0x32, 0x73, 0x00, 0xd9, 0x81, 0xe0, 0xf1, 0xa5, 0x7e, 0x02, 0x7c, 0x6c, 0x30, 0x16, 0xff, 0xe6, 0x01, 0x31, 0x4b, 0x6c, 0x6e, 0x25, 0xfa, 0x02, 0x03, 0xa4, 0x03, 0x94, 0x87, 0xa8, 0x8b, 0x80, 0x74, 0x11, 0xfe, 0x55, 0xaa, 0x90, 0x5f, 0xda, 0x63, 0xc5, 0xdc, 0x53, 0x6a, 0xa4, 0xa6, 0xff, 0x88, 0x1d, 0xff, 0xe5, 0x3f, 0xfc, 0x95, 0xd1, 0xbb, 0x0e, 0x0e, 0x99, 0x06, 0x85, 0xe4, 0xa4, 0x7b, 0x9d, 0x73, 0xad, 0x7d, 0x80, 0x50, 0xc5, 0x69, 0x67, 0xdd, 0x97, 0xc8, 0x03, 0x1a, 0xf0, 0xca, 0x1b, 0xbe, 0x7f, 0xf0, 0x76, 0x87, 0xd9, 0x08, 0xfb, 0xce, 0xbf, 0x5e, 0x17, 0x5e, 0xa4, 0x31, 0x5f, 0x86, 0x6a, 0x64, 0x77, 0x6d, 0x6d, 0x76, 0x32, 0xa6, 0xc2, 0xb4, 0xfa, 0x04, 0xc1, 0xad, 0x73, 0xb0, 0xc0, 0xe7, 0x5b, 0x78, 0x22, 0xd0, 0xb5, 0x6a, 0x91, 0xf7, 0x26, 0xa2, 0x87, 0x7c, 0x9f, 0x60, 0x13, 0xc6, 0x3c, 0x5e, 0xda, 0x73, 0x6c, 0x60, 0x5c, 0x95, 0x53, 0x0c, 0x78, 0x1b, 0x6c, 0xfc, 0x32, 0x8d, 0x73, 0x12, 0xb5, 0xfd, 0x82, 0x0b, 0x94, 0x3a, 0x7a, 0x57, 0x55, 0x46, 0xa4, 0x28, 0x30, 0x0a, 0x98, 0xca, 0x14, 0x49, 0x5e, 0x32, 0xeb, 0xd3, 0xd4, 0xd9, 0x1f, 0xfb, 0x4f, 0xcb, 0x5d, 0x4a, 0x85, 0xfa, 0x99, 0x75, 0xab, 0xd9, 0x52, 0x8d, 0xda, 0x26, 0x17, 0x76, 0xb7, 0x07, 0x4a, 0x9a, 0x53, 0x59, 0x24, 0xde, 0x50, 0x45, 0xf9, 0xd6, 0x46, 0x14, 0xbd, 0x34, 0x64, 0x44, 0xc8, 0x87, 0x5b, 0xdb, 0xd6, 0x22, 0x77, 0xfb, 0x52, 0x59, 0x0f, 0xb7, 0xd4, 0xf4, 0x20, 0x25, 0xe8, 0xdd, 0x35, 0xb4, 0x11, 0x1c, 0x8a, 0xc0, 0x0d, 0x05, 0x70, 0x64, 0x5b, 0xb0, 0xf3, 0x90, 0xfb, 0xaa, 0xbb, 0x5b, 0x75, 0xea, 0x30, 0x9a, 0x1c, 0x07, 0xe2, 0xb1, 0x94, 0xa8, 0x27, 0xa9, 0x92, 0x3b, 0x06, 0x83, 0xe3, 0xea, 0x53, 0xcc, 0xb0, 0xca, 0x1c, 0x72, 0x00, 0x56, 0x44, 0xd6, 0x7e, 0x1d, 0x6e, 0x22, 0x7d, 0xb7, 0x1c, 0xdd, 0x39, 0xfd, 0x18, 0xbd, 0x5f, 0x7a, 0x14, 0xbc, 0xd0, 0x1c, 0x8d, 0x6d, 0xa2, 0x2f, 0xf5, 0x91, 0x68, 0x8c, 0x10, 0xe6, 0xb4, 0x0e, 0x9f, 0x3f, 0xda, 0x46, 0x3c, 0xd9, 0xf6, 0x70, 0x85, 0xed, 0x30, 0xa5, 0x7c, 0x82, 0x3e, 0x52, 0x2e, 0x85, 0x2b, 0xe8, 0x93, 0x1b, 0x57, 0xd5, 0xb6, 0x36, 0xc0, 0xb4, 0x15, 0x67, 0x7f, 0xc0, 0x4b, 0xf3, 0x96, 0x8f, 0xec, 0x28, 0xe8, 0xfd, 0xb1, 0xf1, 0x89, 0x66, 0xd5, 0xa9, 0x38, 0x18, 0xbe, 0x2d, 0x2a, 0x07, 0xe0, 0x35, 0x0a, 0xc3, 0xdf, 0xe4, 0x3d, 0xa8, 0xf3, 0x9d, 0x6a, 0x54, 0x91, 0x19, 0x3a, 0x5f, 0x48, 0xb6, 0x5c, 0x46, 0xe9, 0x12, 0xcd, 0xa7, 0xea, 0xd9, 0x56, 0xb4, 0x0c, 0xdb, 0x56, 0xe2, 0x3c, 0x62, 0xc1, 0xe1, 0xb7, 0xc2, 0x69, 0xd1, 0x72, 0x31, 0x7c, 0xb3, 0xb9, 0xd9, 0x4e, 0x1d, 0x16, 0x2c, 0x59, 0x32, 0x74, 0x78, 0x83, 0xd2, 0x84, 0xbb, 0x9f, 0x0e, 0x60, 0xb8, 0x35, 0xdf, 0x6f, 0x4a, 0x86, 0x17, 0x88, 0xf9, 0xcb, 0x97, 0x5a, 0xcb, 0xbe, 0xc3, 0x0b, 0x5c, 0x5b, 0x33, 0x1f, 0x31, 0xe8, 0xab, 0x9c, 0x4a, 0x33, 0x4e, 0x6b, 0xf6, 0x1b, 0x0e, 0x02, 0xec, 0x51, 0x67, 0x40, 0x96, 0x60, 0x4d, 0x98, 0xb0, 0xeb, 0x63, 0x72, 0x12, 0x36, 0x6d, 0xce, 0xca, 0xe9, 0x08, 0x2b, 0x6e, 0x10, 0x99, 0xa7, 0xb1, 0x65, 0x83, 0x67, 0x33, 0xd2, 0x9d, 0x39, 0x9e, 0x32, 0xe3, 0x78, 0xee, 0x58, 0x6b, 0x31, 0x10, 0x52, 0x9b, 0x83, 0xaf, 0xee, 0x9a, 0x4c, 0x4b, 0x7e, 0x04, 0x02, 0x8b, 0xd9, 0xe2, 0xde, 0xd4, 0xa2, 0xd9, 0x40, 0x1a, 0xcd, 0xa1, 0x4f, 0xf6, 0x5e, 0xb9, 0xdf, 0xf9, 0x74, 0x59, 0x99, 0x41, 0x87, 0xa9, 0x55, 0x49, 0xee, 0x30, 0xcb, 0x05, 0xa4, 0x8f, 0x6b, 0x2f, 0x4b, 0x6f, 0x89, 0xdc, 0x71, 0xb8, 0xbd, 0x52, 0x13, 0x03, 0x8a, 0x1d, 0x5f, 0x53, 0x3d, 0x60, 0xbe, 0xff, 0x18, 0x6a, 0x12, 0xf3, 0xb0, 0x89, 0x3c, 0x19, 0x94, 0x23, 0xe2, 0x11, 0x2f, 0x02, 0x6f, 0x28, 0xf0, 0xf0, 0x5b, 0x88, 0xa8, 0x84, 0xac, 0xac, 0x33, 0x3b, 0xbd, 0x17, 0x5a, 0xca, 0x3e, 0x46, 0xf8, 0xb3, 0x7c, 0xe3, 0x5c, 0x17, 0xe2, 0x3b, 0xef, 0xcb, 0xc0, 0xf2, 0x16, 0xae, 0x4c, 0xf5, 0x5a, 0x39, 0xe7, 0xb1, 0xc7, 0x57, 0xa1, 0x83, 0x91, 0x77, 0xfe, 0x6f, 0xfe, 0xe0, 0xfb, 0x14, 0x7f, 0x45, 0x4c, 0xdf, 0x20, 0x9a, 0xe8, 0x80, 0x23, 0x26, 0xc7, 0x9a, 0xe8, 0xd8, 0xea, 0xbf, 0x11, 0xde, 0x9d, 0x9b, 0xe3, 0x74, 0xf9, 0x6f, 0xee, 0xfa, 0xac, 0xc2, 0xf0, 0x4a, 0xfd, 0x53, 0xf7, 0x48, 0x0a, 0x51, 0xc6, 0xbb, 0x54, 0xce, 0x7a, 0x5b, 0x7e, 0x72, 0x6d, 0x2a, 0x52, 0x6c, 0x5b, 0x08, 0x05, 0xae, 0xc3, 0x82, 0xbc, 0x5a, 0x90, 0xec, 0x4e, 0x77, 0xf9, 0xaf, 0x4c, 0xe9, 0xa6, 0xe3, 0x3f, 0xa0, 0x14, 0x21, 0x30, 0x0f, 0x3a, 0x92, 0x6e, 0xe0, 0x6d, 0x4c, 0x8b, 0xe6, 0x81, 0xdf, 0xa8, 0x53, 0x31, 0x2a, 0xf2, 0x2b, 0xc0, 0x74, 0x6d, 0xf8, 0xe1, 0xb8, 0xf1, 0xc0, 0xd5, 0x3f, 0x72, 0x34, 0xd3, 0x74, 0x84, 0x2a, 0xac, 0xf5, 0x1d, 0x4d, 0xaf, 0xe6, 0x9d, 0x13, 0xca, 0x8a, 0x0d, 0xf0, 0xf3, 0x14, 0xa4, 0xca, 0xc6, 0xba, 0x90, 0xac, 0x70, 0x0c, 0xf3, 0xbe, 0xcb, 0x84, 0x2b, 0x75, 0xca, 0x5e, 0x56, 0x07, 0x18, 0xa9, 0x15, 0x22, 0xfc, 0x9f, 0x91, 0xdd, 0x80, 0x32, 0xbc, 0xef, 0xd2, 0xe7, 0xda, 0x1e, 0xea, 0xe7, 0x3f, 0xfb, 0x6d, 0x54, 0x5a, 0xcd, 0xd2, 0xd9, 0xf2, 0xcb, 0xc3, 0x85, 0xb0, 0x8e, 0xc6, 0xd9, 0xde, 0xc5, 0x1c, 0x1f, 0x6e, 0x2b, 0xe9, 0xfe, 0x3e, 0xb6, 0x96, 0x4c, 0x9a, 0x11, 0x74, 0x23, 0x03, 0x4d, 0xa2, 0x37, 0x2e, 0xd4, 0x30, 0x66, 0x50, 0x9e, 0x84, 0x91, 0x99, 0xa7, 0xfd, 0xab, 0xfe, 0xa0, 0xd7, 0x0f, 0x3c, 0xe4, 0x4f, 0x17, 0x1a, 0xaf, 0x07, 0xea, 0xee, 0x8a, 0xab, 0x95, 0x62, 0x0a, 0xd5, 0x5e, 0x78, 0xba, 0x2e, 0x54, 0xcc, 0x56, 0xd7, 0x2b, 0x1a, 0x3a, 0x07, 0x47, 0xff, 0x19, 0xf5, 0x17, 0x04, 0xf2, 0xf8, 0xa4, 0xd8, 0x40, 0xec, 0x6a, 0xdd, 0x72, 0xd9, 0x66, 0xe6, 0x9a, 0xcf, 0x70, 0x40, 0x69, 0x14, 0xcb, 0xef, 0x5b, 0x82, 0xfb, 0x39, 0x2f, 0x2a, 0xd6, 0x69, 0x9a, 0x3d, 0xde, 0xcd, 0x3c, 0x2d, 0xce, 0x01, 0xd3, 0x0f, 0x73, 0x6f, 0xaf, 0x44, 0xbd, 0x17, 0x66, 0x58, 0x16, 0x8c, 0xc8, 0x2a, 0xf2, 0x3f, 0x15, 0x4d, 0xa8, 0x00, 0x6e, 0xaf, 0x80, 0xc2, 0x8a, 0x78, 0x0d, 0x9f, 0xaa, 0x35, 0xbd, 0x1c, 0xcf, 0x36, 0xae, 0xad, 0x2a, 0x34, 0xc3, 0x7c, 0xd4, 0x38, 0xf8, 0x66, 0xbf, 0xb7, 0xf2, 0x46, 0xed, 0x02, 0xdb, 0x77, 0xdf, 0xde, 0x6c, 0x94, 0x51, 0x6e, 0x4b, 0x82, 0x24, 0x5a, 0x98, 0xb1, 0x9c, 0x2a, 0xc2, 0x9e, 0xcb, 0xf3, 0xa0, 0x9d, 0x4d, 0x36, 0xbd, 0xd5, 0x36, 0x05, 0xf3, 0x8c, 0x49, 0x67, 0x3b, 0xa5, 0x6b, 0xfe, 0xc3, 0x66, 0x57, 0xe7, 0x41, 0x7f, 0x92, 0xe2, 0x88, 0x48, 0xa2, 0xb3, 0x58, 0x4b, 0x7b, 0xc8, 0x7b, 0x02, 0x3a, 0x1b, 0x0d, 0xe2, 0x15, 0x5a, 0x1c, 0x98, 0x92, 0x46, 0x71, 0x92, 0xf8, 0x59, 0xac, 0xc1, 0x03, 0xab, 0x97, 0x9d, 0xdc, 0x16, 0xb4, 0x6a, 0x48, 0x98, 0x18, 0xba, 0x20, 0xfa, 0x7c, 0x34, 0x01, 0xaf, 0x92, 0x93, 0x44, 0xff, 0x95, 0xf2, 0x31, 0x65, 0x24, 0x46, 0x6f, 0x35, 0x50, 0x2c, 0xbf, 0x81, 0xf4, 0xe5, 0xeb, 0x3e, 0x45, 0x9e, 0xf8, 0xa3, 0xa9, 0xf5, 0xa3, 0xd2, 0xcd, 0xba, 0x0c, 0xba, 0xf1, 0xf2, 0xac, 0x3c, 0x87, 0x22, 0x8c, 0x8c, 0xfd, 0xca, 0xb9, 0xdb, 0xd7, 0x2f, 0xf3, 0x33, 0x00, 0x5d, 0xa5, 0xa2, 0x62, 0x6d, 0x1a, 0x9a, 0xb4, 0x04, 0xed, 0x98, 0x93, 0x1c, 0xc1, 0x04, 0xd5, 0x07, 0x33, 0x58, 0x1a, 0xb0, 0x0d, 0x85, 0xa3, 0x25, 0xbc, 0x93, 0x68, 0x52, 0x05, 0x87, 0x64, 0x0f, 0xf3, 0x89, 0x34, 0x5e, 0x14, 0x46, 0xe0, 0xed, 0xe5, 0x94, 0xf9, 0xe3, 0x8a, 0x54, 0xe4, 0xd9, 0xc2, 0x9d, 0x75, 0x25, 0x1b, 0x17, 0xc0, 0x5f, 0x62, 0xa4, 0x2b, 0x1e, 0x5e, 0x46, 0xc8, 0x03, 0xbe, 0x3d, 0xe2, 0xf9, 0x4f, 0x6f, 0xd6, 0xba, 0x72, 0x0d, 0x24, 0x96, 0xce, 0x74, 0xc6, 0x70, 0x42, 0x51, 0xc1, 0x09, 0x1d, 0x09, 0xf9, 0x81, 0x92, 0x58, 0x49, 0x1a, 0x66, 0x38, 0xd3, 0x40, 0xec, 0x04, 0x95, 0xc6, 0x33, 0xdd, 0x3e, 0x73, 0x7e, 0x4d, 0x3f, 0xbd, 0xf4, 0x2a, 0x24, 0xd4, 0x99, 0xbd, 0x25, 0xe2, 0x7d, 0x24, 0xf8, 0x91, 0x34, 0xf5, 0xea, 0xcf, 0x85, 0x24, 0x2e, 0xce, 0x66, 0x27, 0x75, 0x4e, 0x29, 0x57, 0xbf, 0x1e, 0xf0, 0x9a, 0x70, 0xe0, 0x66, 0x3f, 0xa6, 0x0e, 0xb1, 0x29, 0xca, 0x3a, 0xa2, 0x30, 0x65, 0x9a, 0x2f, 0xc4, 0x35, 0xc3, 0x24, 0xd3, 0x81, 0xb5, 0x15, 0xed, 0xa9, 0x18, 0x97, 0xa7, 0x01, 0xc5, 0xb0, 0x3d, 0xdf, 0x88, 0x8b, 0x7b, 0xf3, 0x24, 0x70, 0xdd, 0xd7, 0x98, 0xf4, 0xf5, 0xe7, 0xa1, 0x6d, 0x0d, 0x53, 0x80, 0xa9, 0x0e, 0x73, 0xfd, 0xe0, 0xa0, 0x5a, 0xac, 0xe6, 0x93, 0xad, 0x6f, 0xa5, 0x7e, 0xb6, 0x3c, 0xcb, 0xa5, 0xb4, 0x21, 0xc0, 0x20, 0x75, 0x85, 0xdb, 0x3a, 0x27, 0xb0, 0xd5, 0x18, 0x6c, 0x8e, 0x7e, 0x9b, 0xac, 0xaf, 0xae, 0x86, 0xaf, 0x93, 0x7f, 0xe4, 0x6b, 0x25, 0xb9, 0xa4, 0x1a, 0x85, 0x8e, 0x87, 0x90, 0x0a, 0x88, 0x3c, 0xcc, 0x88, 0xbf, 0xc9, 0xcd, 0xce, 0x4f, 0x2c, 0xa7, 0x73, 0x09, 0x42, 0xd5, 0xd3, 0x69, 0xe9, 0xd1, 0x54, 0xc8, 0x61, 0xe2, 0xee, 0xd3, 0xf9, 0x35, 0xea, 0x3c, 0xe7, 0x30, 0xe9, 0xb0, 0x77, 0x03, 0x29, 0x08, 0x68, 0x80, 0x04, 0xc3, 0x92, 0x2c, 0xb9, 0xb4, 0xcd, 0x96, 0x6f, 0xf8, 0x0f, 0xe7, 0x77, 0x2b, 0xd4, 0xbb, 0xd2, 0xdb, 0xc3, 0x2f, 0xf3, 0x3d, 0x8e, 0x3b, 0xc5, 0x1f, 0x1a, 0x43, 0xf0, 0x1e, 0xe0, 0xe8, 0x59, 0x19, 0x93, 0x24, 0xe7, 0xe6, 0x02, 0x96, 0x8d, 0x43, 0x41, 0x1a, 0x85, 0x0f, 0x03, 0x9d, 0xd9, 0xba, 0x4b, 0x30, 0x28, 0xfa, 0x44, 0x5a, 0xa7, 0xbf, 0x6c, 0xb3, 0x66, 0x6a, 0xf8, 0xae, 0xd5, 0x39, 0x75, 0xb7, 0x86, 0x06, 0xab, 0x7e, 0x34, 0x32, 0xc6, 0x92, 0x05, 0xdc, 0xb8, 0x31, 0x0c, 0x56, 0xd9, 0x5f, 0x12, 0xd9, 0xd0, 0x35, 0x96, 0x77, 0xb7, 0x7c, 0x12, 0x52, 0x7a, 0x7a, 0x80, 0x0c, 0x80, 0x0c, 0x1d, 0x7e, 0x8e, 0xf5, 0x6d, 0xad, 0xe8, 0x76, 0x7f, 0xf9, 0xb9, 0x1f, 0x72, 0x98, 0xb4, 0xe4, 0x38, 0x43, 0xfc, 0x73, 0x9a, 0x2f, 0x41, 0xc5, 0x7c, 0x3f, 0x2c, 0xf3, 0x63, 0x78, 0xfe, 0x4c, 0x34, 0xb5, 0x74, 0xa4, 0x3f, 0x9c, 0xed, 0xee, 0x7b, 0xd0, 0xce, 0x0e, 0x13, 0x68, 0x26, 0xe8, 0x22, 0xa1, 0x8e, 0xbd, 0xbb, 0xcf, 0x54, 0xb7, 0x2d, 0x9a, 0xd8, 0xc2, 0x85, 0x66, 0x35, 0x9e, 0x54, 0x13, 0x24, 0x32, 0xb2, 0xe7, 0x1e, 0x24, 0x82, 0xc8, 0xc1, 0xa6, 0xf8, 0xaf, 0x75, 0x93, 0x59, 0x59, 0x4f, 0xba, 0x02, 0x40, 0x36, 0x7a, 0xac, 0xc9, 0x44, 0x8f, 0xee, 0xbf, 0x6e, 0x2b, 0x03, 0x00, 0x68, 0x48, 0xce, 0x76, 0xc3, 0x3d, 0x1b, 0x49, 0x59, 0x90, 0x28, 0x53, 0xea, 0x0c, 0x64, 0xd5, 0x07, 0x13, 0x76, 0x68, 0x2f, 0x35, 0x81, 0x36, 0x39, 0x01, 0xa7, 0x69, 0xf1, 0x1a, 0xcc, 0xe4, 0x06, 0x8e, 0x9c, 0x31, 0x24, 0x64, 0xcf, 0xbb, 0x5d, 0x74, 0xab, 0x3e, 0xcd, 0x7c, 0xcb, 0x7b, 0x7e, 0x6f, 0x20, 0x30, 0x89, 0x10, 0x35, 0x47, 0x7e, 0xc0, 0xb7, 0x4e, 0x06, 0x94, 0x34, 0x27, 0xc7, 0xab, 0x23, 0x01, 0x88, 0xbf, 0x25, 0x87, 0x96, 0xf9, 0x8a, 0x56, 0x66, 0x0a, 0x17, 0xb5, 0x7b, 0x77, 0x06, 0x80, 0x8a, 0x34, 0x4f, 0x66, 0xdd, 0x75, 0x26, 0x55, 0xf5, 0xc1, 0xc5, 0x31, 0x73, 0x48, 0x6b, 0xcc, 0x39, 0x76, 0xa5, 0x13, 0xcc, 0xc8, 0xcc, 0x85, 0xfc, 0xdf, 0xcf, 0xea, 0xc8, 0xd3, 0x32, 0x41, 0x7c, 0xc9, 0x57, 0xfa, 0x1c, 0xc8, 0xfd, 0x65, 0x05, 0xc8, 0x06, 0x6b, 0xd2, 0x0c, 0x7d, 0x7c, 0x7d, 0xb2, 0xd7, 0xc8, 0xc6, 0x89, 0x79, 0xb2, 0xd9, 0x22, 0x7b, 0x81, 0x2b, 0x2a, 0xac, 0x59, 0xa5, 0xf6, 0xd6, 0x6b, 0x04, 0x60, 0x43, 0x68, 0x80, 0xd2, 0x7f, 0x3b, 0xab, 0xa0, 0x60, 0xf7, 0x9d, 0x9b, 0x44, 0x0e, 0x4e, 0xe3, 0x9a, 0xc5, 0x43, 0xfc, 0xa4, 0xe4, 0x6d, 0x24, 0x7a, 0xb2, 0x4e, 0xe4, 0x53, 0x20, 0x5d, 0xe6, 0x00, 0x45, 0xac, 0x06, 0xb9, 0x0a, 0xc8, 0xab, 0x1c, 0x27, 0xe0, 0x58, 0x73, 0x4e, 0x2a, 0x7e, 0x36, 0xa5, 0x83, 0x95, 0xd1, 0x7a, 0x56, 0x6a, 0xa6, 0x33, 0xbe, 0xbb, 0x56, 0x83, 0xef, 0x01, 0x3c, 0xe4, 0xd2, 0x8d, 0x3b, 0x41, 0xef, 0xd6, 0xba, 0xf2, 0x90, 0x12, 0xec, 0xee, 0x23, 0x03, 0x55, 0x3c, 0xe1, 0x14, 0x8a, 0xab, 0xad, 0xa4, 0x38, 0xc3, 0x3f, 0xa2, 0x67, 0xfb, 0x81, 0x5a, 0x00, 0x2d, 0x39, 0x8e, 0x8d, 0x46, 0xe9, 0xc9, 0x41, 0x42, 0xf3, 0xf0, 0x38, 0x58, 0x01, 0x1a, 0xff, 0x71, 0xa4, 0xa1, 0x57, 0xdf, 0x3c, 0x7a, 0x36, 0x4c, 0x17, 0xc1, 0x0f, 0xf0, 0xdd, 0x98, 0x53, 0x08, 0x2b, 0x32, 0x38, 0x83, 0x7e, 0x2b, 0xb9, 0xfe, 0x53, 0x1b, 0xde, 0xf2, 0x8c, 0x6a, 0x3d, 0x2c, 0x16, 0x66, 0xc1, 0x7e, 0xc9, 0x92, 0xaa, 0xb5, 0x8f, 0x41, 0xd5, 0xca, 0xc9, 0x64, 0x3e, 0x5d, 0xee, 0xa1, 0xc3, 0x5e, 0x75, 0xa5, 0x2b, 0x0e, 0xf6, 0xba, 0x66, 0x26, 0x8c, 0x9c, 0x16, 0x55, 0x7d, 0x88, 0x4f, 0xf0, 0x1d, 0x97, 0x9b, 0xe6, 0xef, 0x4a, 0x42, 0xf2, 0x0e, 0x66, 0xc8, 0x14, 0xcb, 0x02, 0xb6, 0x41, 0x98, 0xde, 0x9e, 0x5a, 0x25, 0xf6, 0x59, 0x5b, 0xc8, 0x57, 0x93, 0xd5, 0x22, 0x32, 0x8a, 0x9e, 0x00, 0x2f, 0x12, 0xc6, 0x7f, 0x03, 0xdd, 0xce, 0x74, 0x45, 0xf9, 0x15, 0x0a, 0x7d, 0x9a, 0x93, 0xad, 0x7f, 0x1a, 0xc9, 0x27, 0xf7, 0x3e, 0xf8, 0x09, 0x44, 0xbb, 0x92, 0x4d, 0x8a, 0xf8, 0xee, 0x39, 0x02, 0x16, 0x3f, 0x87, 0x95, 0x2e, 0xc7, 0xc2, 0xaa, 0xd9, 0x48, 0xf3, 0x3c, 0xf6, 0xbc, 0x7d, 0x2f, 0xa7, 0x45, 0x46, 0xe4, 0x9d, 0x67, 0x17, 0x0b, 0x96, 0x75, 0x46, 0xb8, 0x23, 0x49, 0x92, 0xb9, 0xaf, 0x38, 0x4e, 0x28, 0xbd, 0x46, 0xc2, 0x3c, 0x71, 0x95, 0xce, 0x64, 0x52, 0x24, 0xd0, 0x97, 0x4e, 0xb6, 0xc8, 0xe5, 0xff, 0x0f, 0xba, 0x53, 0x2c, 0x66, 0x54, 0xe5, 0x93, 0x18, 0xd1, 0xfc, 0xe5, 0x9a, 0x1d, 0xe2, 0x13, 0xb1, 0x3a, 0xa4, 0xc8, 0xe5, 0xe2, 0x20, 0x36, 0x33, 0x6e, 0x5e, 0x16, 0x02, 0xf6, 0x24, 0xea, 0x58, 0xba, 0xc4, 0x86, 0x4e, 0xc0, 0x39, 0xce, 0xc1, 0xbf, 0x72, 0xc1, 0x4b, 0x3c, 0xee, 0xb7, 0x71, 0xf3, 0x89, 0xe6, 0x1e, 0x78, 0x96, 0x2b, 0x51, 0x1e, 0x2d, 0x08, 0x12, 0x18, 0xc6, 0xe9, 0xaa, 0xde, 0x07, 0xab, 0x13, 0xd3, 0xdb, 0x5e, 0xae, 0x24, 0xc4, 0x4a, 0x34, 0xf3, 0x72, 0x31, 0xef, 0xb5, 0x94, 0xd4, 0x2a, 0xd8, 0xee, 0xb8, 0xe6, 0xa9, 0xac, 0x2a, 0xce, 0x76, 0xf6, 0x81, 0x6d, 0xef, 0xc4, 0xa3, 0x9f, 0xd2, 0xf4, 0xcb, 0x45, 0xc8, 0x9a, 0x89, 0x3d, 0x8a, 0x97, 0x0a, 0x92, 0x47, 0x6d, 0x99, 0xef, 0x4a, 0x51, 0x66, 0x5a, 0xd8, 0x82, 0x86, 0x1e, 0x57, 0xda, 0x3c, 0x09, 0xb6, 0xa2, 0x77, 0xd8, 0x08, 0xab, 0x9b, 0xf0, 0x72, 0x9a, 0x84, 0x4f, 0x48, 0x84, 0xc9, 0xc1, 0x73, 0xbb, 0x3d, 0x57, 0x16, 0xe7, 0xbc, 0x15, 0x71, 0x58, 0x24, 0xeb, 0x05, 0x9a, 0xa1, 0xe7, 0xf8, 0x4a, 0x2e, 0xa8, 0xbc, 0x29, 0x58, 0x16, 0xec, 0x6f, 0x45, 0x50, 0x76, 0x62, 0xf6, 0xe6, 0xff, 0x26, 0xc9, 0x49, 0x83, 0xd7, 0x42, 0x7f, 0x3c, 0xd5, 0x0a, 0x1b, 0xc6, 0x5f, 0x38, 0x6d, 0x80, 0x64, 0xd0, 0xf6, 0x35, 0x95, 0x89, 0x1e, 0xfc, 0xbf, 0xd4, 0x2a, 0x5c, 0x58, 0x19, 0x68, 0xb4, 0x58, 0x44, 0xac, 0xda, 0x4a, 0x80, 0x00, 0x03, 0xa2, 0x42, 0x98, 0xe3, 0x51, 0x8a, 0x04, 0x15, 0x97, 0x66, 0xa9, 0xbc, 0x18, 0xb7, 0x72, 0x6b, 0x33, 0x37, 0xc3, 0x42, 0x8f, 0xbb, 0xaf, 0x5a, 0xf6, 0xb6, 0x6a, 0x64, 0x67, 0xff, 0x01, 0x8c, 0x66, 0xd4, 0x48, 0xa4, 0x97, 0x1e, 0x14, 0x7e, 0x8b, 0xf6, 0xab, 0x99, 0xda, 0x69, 0x79, 0x00, 0x72, 0x78, 0x05, 0x70, 0x2e, 0x63, 0x23, 0xb9, 0xab, 0x28, 0x6a, 0x66, 0x57, 0x46, 0xe8, 0xa0, 0xca, 0xc6, 0x15, 0x50, 0x5a, 0x7c, 0x06, 0x84, 0xe9, 0x8b, 0xe3, 0x14, 0x02, 0x27, 0x9b, 0x85, 0x25, 0x9f, 0xd6, 0x2d, 0x5e, 0x9a, 0x2c, 0x98, 0x1c, 0xa0, 0x94, 0x2b, 0x41, 0xdd, 0x1f, 0x07, 0x76, 0x22, 0xe6, 0x31, 0xc1, 0x2d, 0x40, 0xef, 0x59, 0x2a, 0x39, 0x75, 0xb9, 0x7a, 0x40, 0xc0, 0xf3, 0xb2, 0x20, 0xc3, 0x47, 0xe7, 0x32, 0xc1, 0xf4, 0x29, 0xd0, 0xfa, 0x4e, 0x4d, 0x0c, 0x89, 0x11, 0xf0, 0xa2, 0x8d, 0xf5, 0xb8, 0x2c, 0x87, 0x82, 0xdd, 0x95, 0x03, 0x26, 0xe8, 0xd0, 0x7b, 0x85, 0xbb, 0xca, 0x78, 0x10, 0xd2, 0x9d, 0xfa, 0xd9, 0xc8, 0x06, 0x1a, 0xa5, 0x1d, 0x19, 0xee, 0x43, 0x36, 0x33, 0xad, 0x1d, 0xa5, 0x31, 0x13, 0x0d, 0xab, 0xdf, 0x07, 0x72, 0xfb, 0xb3, 0x7c, 0x82, 0xc1, 0xbc, 0x95, 0xe2, 0xe3, 0xd5, 0x0c, 0x74, 0x87, 0x1e, 0xd4, 0x70, 0xd5, 0xad, 0xfd, 0xb6, 0xfe, 0x80, 0xd9, 0x62, 0x7d, 0xb6, 0x5d, 0xa1, 0x9d, 0xff, 0xc9, 0xc4, 0x3b, 0x52, 0x8c, 0x93, 0xcd, 0xde, 0x61, 0xe4, 0xa3, 0x42, 0xbf, 0x6c, 0x6d, 0x00, 0x70, 0xd4, 0xfe, 0x2f, 0x7f, 0x0f, 0x4f, 0x71, 0x58, 0xec, 0xc7, 0x25, 0x2b, 0xe7, 0xb9, 0xde, 0x91, 0x45, 0x2f, 0x13, 0x72, 0x60, 0xe6, 0x18, 0x26, 0x3f, 0x99, 0x4c, 0xda, 0x69, 0x82, 0x95, 0x36, 0xfb, 0x1f, 0x09, 0x3d, 0xf9, 0x32, 0xee, 0x74, 0xe2, 0x0b, 0xe5, 0x46, 0x87, 0x09, 0x62, 0xa7, 0x1c, 0x5f, 0x5f, 0xf8, 0x90, 0x14, 0x52, 0x2a, 0x1a, 0x4e, 0x5c, 0x27, 0x15, 0xcf, 0xc3, 0x6d, 0x0d, 0xc0, 0xa2, 0xfc, 0x1a, 0xad, 0xdf, 0x73, 0x6c, 0xd2, 0x5e, 0x76, 0x28, 0x95, 0x74, 0x52, 0x73, 0x53, 0x9f, 0xe4, 0xcb, 0x5f, 0x74, 0xb7, 0x9e, 0x48, 0xd8, 0x6c, 0x15, 0x5b, 0x73, 0x5f, 0x31, 0x69, 0x62, 0x87, 0x1a, 0xcb, 0x2c, 0x9e, 0xb4, 0xa2, 0xf8, 0x82, 0x72, 0x63, 0xfd, 0xdc, 0x6f, 0x94, 0x39, 0xff, 0xbb, 0xd0, 0x66, 0x13, 0xf2, 0x11, 0x2a, 0x72, 0x14, 0x2f, 0x8e, 0x52, 0x90, 0xa3, 0xb1, 0xa5, 0xa2, 0x91, 0xbe, 0x3d, 0xdf, 0x06, 0x1b, 0x34, 0x0f, 0x7e, 0xe3, 0x8b, 0x3a, 0xa9, 0x97, 0x11, 0x06, 0x6e, 0x10, 0x86, 0x40, 0x31, 0xb8, 0x01, 0xb8, 0x51, 0xfa, 0x8f, 0x52, 0xf5, 0xf7, 0x1d, 0x5a, 0x09, 0x7b, 0x98, 0x18, 0x83, 0x2f, 0x52, 0xa4, 0xeb, 0x10, 0xa8, 0xfc, 0x1a, 0x1f, 0xe2, 0x54, 0x42, 0x5a, 0x5a, 0xad, 0x2e, 0xec, 0xe1, 0xa9, 0xcb, 0xa1, 0x5e, 0x9e, 0xe8, 0x9c, 0xb8, 0xe9, 0x3a, 0x4c, 0xf6, 0x85, 0xa3, 0x9c, 0xa5, 0xdc, 0xb3, 0x6a, 0x7a, 0xdc, 0x70, 0x3b, 0x39, 0x4e, 0x52, 0x2d, 0xd5, 0x63, 0x92, 0x2d, 0xd9, 0x90, 0xa5, 0x69, 0x06, 0x9c, 0x03, 0x08, 0x3e, 0xf8, 0x2c, 0x19, 0xa1, 0x4e, 0xed, 0xca, 0xf5, 0x5c, 0xdf, 0xdb, 0x4b, 0x03, 0x32, 0x52, 0xdf, 0x9b, 0xa8, 0x6f, 0x41, 0x8a, 0xe4, 0xe2, 0xb2, 0x15, 0xe5, 0x3c, 0xd1, 0x76, 0xce, 0xa4, 0x77, 0x2e, 0xe8, 0xcb, 0xdf, 0x9c, 0xe9, 0x22, 0x0a, 0xcf, 0x77, 0x4a, 0x61, 0x99, 0xe8, 0xcb, 0x9d, 0xe4, 0x4c, 0x0a, 0xe4, 0x49, 0xad, 0x75, 0x34, 0xdf, 0x95, 0x01, 0x05, 0x51, 0xd1, 0xd6, 0x2a, 0x34, 0x75, 0x48, 0xf9, 0x97, 0x20, 0x0a, 0xab, 0xdb, 0x81, 0x9e, 0x06, 0xc5, 0x1a, 0x10, 0x39, 0xd1, 0x44, 0xe4, 0x07, 0xc9, 0x74, 0x4d, 0x27, 0x97, 0xbc, 0xa0, 0xeb, 0x58, 0x95, 0x07, 0x21, 0xb1, 0xdb, 0x7a, 0x37, 0x66, 0x19, 0xeb, 0xa2, 0x28, 0x07, 0xc1, 0x7f, 0xaf, 0x51, 0x88, 0x7b, 0x09, 0x9a, 0xe7, 0xf1, 0x32, 0xc1, 0xd2, 0x53, 0xe4, 0x63, 0x00, 0xcb, 0xb0, 0xa1, 0xa0, 0x22, 0x4e, 0x23, 0x48, 0xe0, 0x32, 0x5c, 0x2e, 0xb5, 0x5f, 0x10, 0x9a, 0x17, 0x80, 0x14, 0x9b, 0x2d, 0x35, 0x56, 0xfa, 0xec, 0xab, 0x1d, 0x6c, 0x80, 0x6f, 0x91, 0x0b, 0xed, 0x84, 0x7d, 0x07, 0xf6, 0xb3, 0x54, 0x99, 0x3e, 0x22, 0x72, 0x39, 0xad, 0x28, 0xa5, 0x11, 0x15, 0x60, 0xec, 0xb1, 0x15, 0xfc, 0x7e, 0x04, 0x3e, 0x5c, 0x0e, 0x83, 0x75, 0xe0, 0x4e, 0xa8, 0x98, 0xfa, 0xb2, 0xa6, 0x65, 0x87, 0x76, 0x57, 0x97, 0x5f, 0xe2, 0x76, 0x51, 0x2a, 0xcd, 0x0e, 0xc0, 0x76, 0x60, 0x32, 0xfd, 0x07, 0x1c, 0xef, 0x30, 0x6e, 0x1e, 0x7f, 0xfb, 0xde, 0xa2, 0xbf, 0x16, 0x3a, 0xc7, 0xe4, 0x36, 0x72, 0x92, 0x69, 0x34, 0x10, 0x34, 0x4b, 0x6b, 0x0e, 0x90, 0x79, 0x62, 0xeb, 0xf8, 0x86, 0xab, 0xfe, 0x37, 0xa2, 0x0a, 0x09, 0xd5, 0xc8, 0xda, 0x11, 0x96, 0x39, 0xad, 0x6d, 0x44, 0x28, 0x33, 0x1e, 0xae, 0xb7, 0x5d, 0x5e, 0xf1, 0x22, 0xc1, 0x7b, 0xf6, 0x3a, 0x41, 0xe6, 0x3c, 0x16, 0xe7, 0x87, 0xd8, 0x05, 0x14, 0x54, 0xba, 0xc6, 0xda, 0x22, 0x31, 0xfc, 0xa6, 0xbb, 0xb2, 0xdc, 0x22, 0x30, 0xd5, 0x29, 0x59, 0x71, 0xa0, 0x62, 0x1d, 0x1a, 0x08, 0x3a, 0xa5, 0x90, 0xb5, 0x48, 0x7b, 0x4d, 0x06, 0x00, 0x96, 0x78, 0x55, 0xe2, 0xc2, 0xb9, 0x7c, 0xf1, 0x49, 0x4b, 0x97, 0x67, 0xcc, 0x53, 0x0c, 0xa7, 0x72, 0x70, 0xc9, 0x73, 0x45, 0x93, 0xcd, 0x5f, 0xd8, 0x11, 0xea, 0x85, 0x2d, 0xf6, 0xc9, 0x7b, 0xd7, 0x9d, 0x2e, 0x82, 0x5c, 0x7d, 0x7d, 0x00, 0xdd, 0x46, 0x7e, 0x31, 0xf9, 0x2d, 0x5d, 0x19, 0xee, 0x83, 0xf5, 0xbd, 0x01, 0x8d, 0x4d, 0x92, 0x21, 0x90, 0x63, 0x36, 0xc7, 0x2b, 0x29, 0x5e, 0x20, 0xe9, 0xce, 0x10, 0x6e, 0x17, 0x3e, 0x12, 0xac, 0xd3, 0xec, 0xa2, 0x70, 0x66, 0xcf, 0x67, 0x16, 0xd4, 0xaa, 0xa8, 0x1b, 0xb1, 0x91, 0xbc, 0xc7, 0x35, 0xa9, 0xc1, 0x0f, 0x93, 0x2f, 0x91, 0xb9, 0x87, 0xbc, 0xf2, 0xc1, 0x2e, 0xc7, 0x0d, 0xfc, 0x1b, 0x6b, 0x22, 0xfb, 0xa7, 0x6a, 0x79, 0x32, 0x88, 0x73, 0x9c, 0x59, 0xa6, 0xa0, 0xc3, 0x13, 0x2a, 0x43, 0x90, 0xce, 0xd7, 0xe2, 0xfc, 0xea, 0x9d, 0x80, 0x92, 0x1d, 0x6b, 0x1e, 0xdb, 0x16, 0x46, 0x82, 0x19, 0x60, 0x98, 0x37, 0x37, 0x8a, 0xca, 0xd5, 0x01, 0x85, 0x14, 0x83, 0x91, 0x4d, 0x94, 0xb9, 0x09, 0xcb, 0x9e, 0x4b, 0x88, 0xfb, 0x54, 0xa3, 0x56, 0x4a, 0x76, 0x4d, 0x62, 0x42, 0x7b, 0xba, 0xef, 0x68, 0xe0, 0x3d, 0x8a, 0x65, 0xc0, 0x5a, 0x3f, 0x65, 0xa5, 0x40, 0x0c, 0xbd, 0x9e, 0x94, 0x96, 0xd0, 0x91, 0x70, 0x1b, 0x33, 0xd3, 0xac, 0xa8, 0x0f, 0xf6, 0x5c, 0x8c, 0xc7, 0xe2, 0x99, 0x0c, 0xdb, 0x27, 0x85, 0x58, 0x0d, 0x92, 0x89, 0xbe, 0xc2, 0xff, 0xe1, 0x1e, 0xaa, 0x6d, 0x5b, 0x9e, 0xa3, 0x58, 0x5b, 0x9e, 0xdb, 0x43, 0x23, 0xef, 0x35, 0x94, 0x51, 0x3f, 0xef, 0xa4, 0xa9, 0xd8, 0x81, 0x17, 0x15, 0x8b, 0xc8, 0x69, 0xea, 0xe6, 0x63, 0xca, 0x6d, 0xae, 0x5e, 0x2c, 0x96, 0x89, 0x0d, 0x9a, 0x14, 0xfa, 0x3b, 0xcb, 0x90, 0x92, 0x85, 0xf7, 0x36, 0x65, 0x00, 0xe9, 0x72, 0xbc, 0x22, 0x56, 0xf7, 0x09, 0xdf, 0x6d, 0x06, 0x20, 0x12, 0xaf, 0xed, 0xa3, 0x1f, 0x01, 0xce, 0xbe, 0xd6, 0xff, 0xa1, 0x15, 0x9b, 0x94, 0x7c, 0xfb, 0xc4, 0xc7, 0x12, 0xe5, 0x43, 0xd8, 0x7b, 0x1e, 0x85, 0x8c, 0x33, 0xbc, 0x9a, 0xc5, 0x64, 0xd2, 0x95, 0x55, 0x68, 0xe7, 0x36, 0x14, 0x89, 0xa7, 0xc6, 0x31, 0x0c, 0xd9, 0x43, 0xc5, 0x6f, 0x91, 0xbd, 0xae, 0xee, 0xa7, 0x00, 0x9a, 0x4c, 0x67, 0x73, 0x62, 0xcf, 0x8a, 0x40, 0x9a, 0x8d, 0x66, 0xb5, 0x66, 0xe6, 0x61, 0xeb, 0x8e, 0x52, 0xab, 0xa5, 0xd5, 0x5d, 0x2d, 0x7a, 0x87, 0xef, 0xbc, 0x37, 0x52, 0xd1, 0x93, 0x7f, 0x56, 0x6d, 0x00, 0xb4, 0x7f, 0xd5, 0x5d, 0x1b, 0x13, 0x07, 0x42, 0x3a, 0x87, 0x70, 0xf9, 0x85, 0x97, 0xae, 0x32, 0x3a, 0x96, 0x9a, 0xf8, 0x8a, 0x02, 0x86, 0xe4, 0xf9, 0x5b, 0xc3, 0x91, 0x07, 0x35, 0x67, 0x4f, 0x10, 0x8d, 0x4c, 0x1c, 0x71, 0x59, 0x5c, 0xd0, 0xec, 0x62, 0x0c, 0x97, 0x4e, 0x56, 0x27, 0xa4, 0x4e, 0x19, 0xcd, 0x24, 0xb9, 0x5d, 0xbb, 0x71, 0xcc, 0x72, 0xcd, 0x89, 0xe1, 0x5f, 0xc0, 0xbe, 0x4f, 0x31, 0x3d, 0xaf, 0x8b, 0x93, 0x13, 0x76, 0x93, 0x9f, 0xc5, 0x23, 0x8c, 0xf4, 0x44, 0x6a, 0xa9, 0x09, 0xfd, 0x98, 0x50, 0xc1, 0x16, 0xcb, 0x78, 0x3f, 0xf5, 0x63, 0x56, 0xfb, 0x03, 0xb4, 0x38, 0x15, 0xaf, 0xfd, 0xb1, 0xea, 0xb5, 0x9e, 0xf6, 0xe6, 0xa0, 0x85, 0x88, 0x99, 0x8d, 0xea, 0x13, 0x0c, 0x33, 0x3c, 0x96, 0x55, 0x20, 0x5b, 0xc5, 0x69, 0x45, 0x07, 0xac, 0x32, 0xb5, 0x99, 0x94, 0xe1, 0xaa, 0xf0, 0x2a, 0x86, 0xc9, 0xaf, 0xde, 0xdd, 0xa7, 0xa6, 0x8a, 0x6b, 0x8b, 0x8d, 0x54, 0xca, 0x76, 0xf8, 0xd5, 0x42, 0x60, 0x87, 0x7b, 0x99, 0xc5, 0x5d, 0x2b, 0x2b, 0x60, 0xd4, 0x2b, 0x3d, 0x37, 0x6f, 0x40, 0x8e, 0xd7, 0x11, 0x13, 0x2f, 0xe1, 0x6c, 0xd9, 0x95, 0xc5, 0xbb, 0x33, 0xed, 0xce, 0xb4, 0x53, 0xaf, 0x5f, 0xb8, 0x61, 0x76, 0x7c, 0x4e, 0x1d, 0x0f, 0x8b, 0xcf, 0xc5, 0xcf, 0x5c, 0x63, 0x39, 0x2a, 0x68, 0x2b, 0x5d, 0x82, 0x56, 0xc0, 0xbf, 0x3d, 0xc4, 0xdd, 0x7a, 0x1a, 0x43, 0x58, 0x5a, 0xc5, 0xa3, 0x57, 0x40, 0xa9, 0x72, 0xc0, 0xc8, 0x05, 0xbf, 0xf1, 0x2a, 0x42, 0x23, 0xb2, 0x5e, 0x84, 0x03, 0x67, 0x84, 0x7f, 0x0f, 0x8b, 0x82, 0x8c, 0x0e, 0x59, 0xef, 0xfb, 0xde, 0xcc, 0x30, 0xab, 0xb6, 0xca, 0xe0, 0xd9, 0xaf, 0x9c, 0x76, 0x36, 0x83, 0xa2, 0x21, 0x3c, 0x94, 0x45, 0xf7, 0xc1, 0x30, 0x2c, 0x4f, 0xcd, 0x13, 0xb3, 0x6b, 0xa9, 0x2d, 0x99, 0x5b, 0x38, 0xa6, 0xf8, 0x1d, 0x8a, 0x20, 0x7b, 0x09, 0xaf, 0x3c, 0xcb, 0x6d, 0xc9, 0x5f, 0x4a, 0x74, 0x65, 0xb6, 0x04, 0x4c, 0x0c, 0x77, 0xe3, 0x87, 0x14, 0x6a, 0x22, 0xc2, 0xbc, 0xa9, 0x03, 0x85, 0x79, 0xa4, 0xc5, 0x6b, 0x8a, 0x67, 0xd0, 0x83, 0xd2, 0x20, 0x34, 0xf5, 0xe7, 0xdb, 0x51, 0xe9, 0x67, 0x91, 0xd7, 0xa4, 0x8b, 0x61, 0xf2, 0xf4, 0xfe, 0x1d, 0xbe, 0xcf, 0xef, 0x08, 0x01, 0x37, 0x65, 0xde, 0x19, 0x60, 0xd2, 0x15, 0x33, 0x15, 0xec, 0x63, 0xbe, 0x58, 0xb8, 0x80, 0x20, 0x49, 0xe7, 0x2d, 0xa7, 0x49, 0x66, 0x75, 0xc2, 0x5e, 0x31, 0x33, 0x71, 0xd9, 0x68, 0xd4, 0xfa, 0x37, 0xa4, 0x5e, 0xde, 0x46, 0x8b, 0xb1, 0x0b, 0x89, 0xa2, 0x0e, 0x53, 0xdc, 0x63, 0xd5, 0x1d, 0x5b, 0x90, 0x93, 0x5a, 0x81, 0xc6, 0x3b, 0xbb, 0x8d, 0x55, 0xb4, 0x21, 0x2a, 0x4f, 0x94, 0x56, 0x4e, 0xdf, 0x2c, 0xfa, 0x63, 0xdc, 0xc4, 0xc0, 0xa5, 0x9e, 0x27, 0xda, 0xcb, 0x11, 0x63, 0xb1, 0xe9, 0x07, 0xca, 0xda, 0x95, 0xd3, 0x3c, 0x45, 0x49, 0x13, 0xa9, 0xb8, 0x08, 0xcd, 0xd1, 0x7c, 0x44, 0xbe, 0x4e, 0x57, 0x00, 0xee, 0xd5, 0xba, 0x32, 0x88, 0xb9, 0x3a, 0x6b, 0xe9, 0xb0, 0x44, 0xb9, 0xf7, 0xda, 0x0d, 0xcd, 0xb4, 0xff, 0xc9, 0x59, 0x13, 0x19, 0x1d, 0xbc, 0x0a, 0x12, 0xd6, 0xe1, 0xe8, 0xce, 0xdb, 0x64, 0xe9, 0x6c, 0x60, 0xf7, 0x07, 0xc9, 0x5d, 0x05, 0x14, 0x46, 0x3f, 0x95, 0x06, 0xcc, 0xdd, 0x70, 0x92, 0x0d, 0xad, 0x86, 0xfc, 0x0c, 0x38, 0x8e, 0x2d, 0xdf, 0xcb, 0xed, 0x06, 0xb3, 0x70, 0xd9, 0xf4, 0x12, 0x1c, 0xbe, 0xc4, 0x61, 0x2a, 0xe0, 0xb9, 0xad, 0x08, 0x43, 0xdc, 0xa7, 0x31, 0xc8, 0x94, 0xec, 0x5b, 0x98, 0x76, 0x8a, 0xf1, 0xc5, 0x5e, 0xc0, 0xc3, 0x2f, 0xbf, 0x06, 0xfd, 0xa5, 0x37, 0x4d, 0x55, 0x4d, 0x67, 0x88, 0x89, 0x46, 0x01, 0x6b, 0x09, 0x8b, 0x22, 0x73, 0xf0, 0x1b, 0xe3, 0x26, 0x39, 0x57, 0x2b, 0x9c, 0x30, 0xab, 0xc7, 0x3e, 0x26, 0x70, 0xbc, 0xce, 0x69, 0x11, 0xdb, 0xa8, 0x74, 0x6d, 0x97, 0x47, 0x62, 0x7d, 0x14, 0x0a, 0xa9, 0x37, 0x80, 0x38, 0x04, 0xb2, 0xa6, 0x43, 0xb1, 0x8a, 0xc0, 0x49, 0xdd, 0x86, 0x8d, 0xe0, 0x5d, 0x78, 0xa4, 0x13, 0x9e, 0x65, 0x08, 0xa8, 0xdf, 0xe6, 0xfc, 0xa5, 0x9d, 0xce, 0x19, 0x12, 0x4f, 0x0d, 0x9d, 0xff, 0x54, 0xd5, 0x06, 0xc9, 0x2a, 0xfb, 0xe0, 0x9a, 0xe0, 0x9f, 0xdb, 0x2f, 0xce, 0x0f, 0x20, 0xde, 0x83, 0xe9, 0xe5, 0xd7, 0xff, 0x80, 0x3f, 0xaa, 0x23, 0x81, 0x38, 0x09, 0x65, 0xd7, 0x22, 0xcf, 0xc8, 0xcb, 0x2b, 0x42, 0x0c, 0x70, 0x31, 0x95, 0x21, 0x3e, 0xd7, 0xb2, 0xe2, 0xfd, 0xd8, 0x36, 0x00, 0xe5, 0x9b, 0xbc, 0x3c, 0x03, 0x08, 0x5e, 0xda, 0xde, 0x9b, 0x79, 0x52, 0x5b, 0xb6, 0xb1, 0x48, 0xde, 0x3c, 0x35, 0xbe, 0xb2, 0x5b, 0x44, 0x89, 0xab, 0xa9, 0xf1, 0x01, 0x09, 0x73, 0x23, 0xfd, 0xa0, 0x51, 0xdf, 0xff, 0x36, 0xfe, 0xca, 0xab, 0x2d, 0x67, 0xe9, 0x7e, 0x62, 0x02, 0xac, 0xbc, 0x54, 0x61, 0x2b, 0xaa, 0x89, 0x07, 0xaf, 0xfe, 0x2d, 0x7a, 0x74, 0x94, 0xfd, 0x9a, 0xad, 0x62, 0x63, 0x30, 0xc9, 0xae, 0xe2, 0xca, 0xf5, 0x7e, 0xb5, 0xc7, 0xe2, 0x51, 0xb3, 0xae, 0xc8, 0x0c, 0x76, 0xc4, 0xab, 0x37, 0xbc, 0xdd, 0xdd ],
-const [ 0x3a, 0x14, 0x14, 0x5d, 0xd1, 0xfa, 0x9e, 0x46, 0xc4, 0x56, 0x2e, 0xed, 0x0b, 0x0d, 0xa1, 0x0d, 0x84, 0x5a, 0xd8, 0x4f, 0x43, 0xcd, 0xb1, 0x6e, 0x29, 0x93, 0x36, 0x99, 0xb8, 0xf7, 0x15, 0x19, 0x25, 0x29, 0x51, 0x33, 0xaf, 0x3e, 0x36, 0x50, 0x30, 0x79, 0x92, 0x5b, 0xf2, 0xc9, 0x22, 0x6b, 0xc3, 0x92, 0x4b, 0xa2, 0x4c, 0xb0, 0x0a, 0x55, 0x9e, 0xba, 0x2e, 0x6c, 0x0e, 0x83, 0xc5, 0x0c, 0x43, 0xe7, 0xd4, 0x74, 0x8d, 0xc4, 0x4b, 0x25, 0x78, 0x46, 0x37, 0x46, 0xa2, 0x68, 0x3a, 0x46, 0xc9, 0xb7, 0x38, 0xc3, 0x28, 0x59, 0x54, 0xab, 0x04, 0x4f, 0x1b, 0xa1, 0x82, 0xf7, 0xfe, 0xa2, 0xbb, 0xd5, 0x06, 0xe8, 0x12, 0x92, 0xc3, 0x0e, 0xc6, 0x45, 0x86, 0x76, 0xc3, 0xf2, 0xd0, 0xe8, 0xbe, 0x50, 0x09, 0x7b, 0x80, 0xd0, 0x75, 0xb9, 0x82, 0xda, 0x65, 0xfe, 0xbb, 0x5a, 0xaa, 0x21, 0xb6, 0x7b, 0x4f, 0x56, 0xe7, 0xb2, 0x88, 0x53, 0x3f, 0xff, 0xe5, 0xb2, 0xfe, 0x70, 0xcb, 0x97, 0xc9, 0xe6, 0x25, 0x92, 0xfc, 0x1b, 0x57, 0xc7, 0x41, 0xe4, 0x73, 0x4c, 0x62, 0xb4, 0xb0, 0xd2, 0x5b, 0x62, 0x18, 0x88, 0xb4, 0x2c, 0x80, 0x3c, 0x0d, 0xfb, 0xbd, 0xc3, 0xfb, 0xe9, 0x15, 0x9c, 0x12, 0x00, 0xf4, 0xd0, 0x43, 0x44, 0xe0, 0x1c, 0x69, 0xf4, 0xaf, 0x52, 0x1e, 0x0e, 0xf8, 0xfd, 0xd3, 0x11, 0xc7, 0x44, 0x20, 0x06, 0x95, 0x11, 0x58, 0xc1, 0x77, 0x72, 0x61, 0x65, 0x95, 0x3f, 0xc2, 0x26, 0xde, 0xfd, 0xfe, 0x53, 0xfa, 0x02, 0x21, 0x93, 0x80, 0xda, 0x98, 0x6f, 0x6a, 0xea, 0x45, 0x10, 0xc6, 0x53, 0xd3, 0x4a, 0xae, 0x19, 0x47, 0xda, 0x79, 0x85, 0xd8, 0xec, 0x33, 0xc7, 0x01, 0xe1, 0x4b, 0xe0, 0xd4, 0x4e, 0x8c, 0xbf, 0x91, 0x48, 0x4e, 0xaa, 0x77, 0xdf, 0xee, 0xe0, 0xda, 0xe8, 0x7b, 0x7d, 0x76, 0x00, 0xb2, 0x9d, 0x03, 0xcd, 0x2d, 0xc4, 0x0a, 0x87, 0xd7, 0x7e, 0xf6, 0xb7, 0xa3, 0x42, 0x6e, 0x3f, 0x7e, 0x9c, 0xe2, 0x9b, 0x82, 0x8c, 0x64, 0x66, 0x6c, 0x29, 0xba, 0x20, 0x50, 0x89, 0xb1, 0x2e, 0x8b, 0xe5, 0xb4, 0x22, 0xfa, 0xf9, 0x9c, 0x3d, 0x69, 0xaa, 0xca, 0x32, 0x4e, 0xeb, 0x73, 0x2d, 0xb8, 0xe1, 0x3c, 0x14, 0x82, 0x45, 0x07, 0x0d, 0xcc, 0x0b, 0x0c, 0x40, 0xab, 0x41, 0x2b, 0xde, 0x20, 0x39, 0x80, 0x62, 0x47, 0xea, 0x39, 0x17, 0xd1, 0x94, 0xa4, 0xda, 0xb4, 0xa3, 0x8c, 0x21, 0x21, 0xd6, 0xc6, 0x3c, 0xb7, 0xa0, 0x07, 0xdb, 0xf6, 0xcf, 0xf9, 0xd1, 0xf6, 0x6b, 0x8d, 0x17, 0x59, 0xe1, 0x92, 0x14, 0x7e, 0x60, 0x87, 0x1b, 0xf7, 0x84, 0xad, 0x36, 0x3e, 0x32, 0x61, 0x22, 0xa3, 0xc3, 0xa9, 0x9a, 0x89, 0x64, 0x0d, 0xd9, 0xd2, 0xbc, 0xa8, 0x5a, 0x98, 0xd0, 0x7e, 0xe2, 0x1e, 0x24, 0x10, 0xc0, 0x06, 0x23, 0x2e, 0x53, 0xc4, 0xc1, 0x0d, 0xce, 0x52, 0x5f, 0x99, 0x38, 0x25, 0xef, 0x0c, 0xb7, 0x61, 0x58, 0xc0, 0x0d, 0x49, 0x1c, 0x41, 0x63, 0xf9, 0x38, 0xa7, 0x46, 0x57, 0x4c, 0x23, 0xef, 0x47, 0xfb, 0xd7, 0xc7, 0x1e, 0x95, 0xeb, 0x2a, 0x5a, 0xf3, 0xdd, 0x6b, 0x90, 0xa3, 0x18, 0x19, 0xa5, 0x46, 0xc9, 0x81, 0x41, 0x35, 0xee, 0x74, 0x81, 0x6b, 0xaf, 0x4b, 0xec, 0x9f, 0xf2, 0x27, 0xa9, 0xb0, 0x2a, 0x7e, 0xef, 0x46, 0x6f, 0xd3, 0xbc, 0xb7, 0xd4, 0xc4, 0xca, 0x27, 0xf5, 0x4a, 0xbf, 0xf4, 0xcf, 0x3d, 0xa3, 0x51, 0xd5, 0x16, 0x98, 0x30, 0x40, 0xf9, 0xc5, 0x66, 0xa6, 0xf3, 0x94, 0x09, 0xce, 0x80, 0x1d, 0x1d, 0xc3, 0x50, 0xe2, 0x70, 0x27, 0x4a, 0xbc, 0xc3, 0xca, 0xd2, 0x15, 0x2a, 0x7b, 0x47, 0x58, 0xb6, 0x1e, 0xd0, 0xa6, 0x50, 0xff, 0x59, 0xcb, 0xe8, 0x66, 0xd8, 0x70, 0xd0, 0x6c, 0xd5, 0x91, 0x62, 0x0c, 0x29, 0x32, 0xe9, 0x7d, 0x06, 0x4e, 0xbf, 0xbf, 0x37, 0x11, 0xb2, 0x75, 0xa9, 0x47, 0xac, 0xf2, 0x2b, 0x13, 0x94, 0x96, 0x72, 0xe4, 0x6f, 0x5b, 0x60, 0xa5, 0xcb, 0xab, 0x86, 0x34, 0x5d, 0x75, 0xe7, 0x16, 0xe9, 0x7f, 0xfe, 0x69, 0x62, 0xfe, 0x03, 0x19, 0x53, 0x64, 0x6b, 0x57, 0x7d, 0x79, 0xae, 0x47, 0xc1, 0xad, 0x4c, 0xf9, 0x41, 0xac, 0x12, 0x9b, 0xc3, 0x34, 0x99, 0xed, 0x56, 0x23, 0x11, 0xf5, 0x37, 0xd5, 0x3c, 0xf3, 0xf5, 0xac, 0xbd, 0x97, 0xd4, 0xf0, 0x93, 0x72, 0x6f, 0xda, 0xe1, 0xab, 0xa2, 0xeb, 0xf0, 0xf3, 0xa7, 0x82, 0x76, 0xba, 0x7f, 0xae, 0x19, 0xa3, 0x94, 0x41, 0x2f, 0x36, 0x9c, 0x26, 0xc8, 0xd6, 0xc0, 0xf4, 0xee, 0xf2, 0xfe, 0xc2, 0x2b, 0x7f, 0xcc, 0x3e, 0x4c, 0xa5, 0xfe, 0xf9, 0x65, 0xb8, 0xe9, 0x05, 0x15, 0x6b, 0xc9, 0xc2, 0x0b, 0x40, 0x60, 0xf5, 0xc9, 0x43, 0xe0, 0x1a, 0xa8, 0xf8, 0x0b, 0xfc, 0x1d, 0x92, 0x99, 0x82, 0x3a, 0x65, 0xda, 0xcc, 0x78, 0x9e, 0x9c, 0x7e, 0xb3, 0x32, 0x4f, 0x5c, 0x76, 0x14, 0x67, 0x18, 0x79, 0xab, 0x02, 0x67, 0x68, 0x83, 0xcb, 0x5a, 0xe6, 0x43, 0x1e, 0xec, 0xd2, 0xdf, 0x6d, 0xd8, 0xc9, 0x0e, 0xe2, 0xad, 0xec, 0xff, 0x45, 0x23, 0xe3, 0x47, 0x21, 0xb0, 0x22, 0x1f, 0x22, 0x57, 0x6a, 0xcc, 0xc2, 0xc1, 0x93, 0x5e, 0x24, 0x8e, 0x8a, 0x9d, 0x40, 0xed, 0x96, 0x41, 0x41, 0x6a, 0xdf, 0x61, 0x2b, 0x08, 0x30, 0x2e, 0xc1, 0x90, 0xfc, 0xe1, 0xa6, 0x28, 0x9f, 0xf2, 0xc2, 0x27, 0xe7, 0x8b, 0xe7, 0x28, 0xd3, 0x3c, 0xb5, 0x5e, 0x9a, 0xf0, 0xbb, 0x27, 0xef, 0x20, 0xde, 0xe3, 0x84, 0x46, 0xff, 0x06, 0xcd, 0x95, 0xd8, 0x6c, 0x06, 0xe7, 0x27, 0xed, 0x77, 0xf7, 0x0f, 0x32, 0xf7, 0xd0, 0xbb, 0xc6, 0xaf, 0x85, 0x44, 0x70, 0x20, 0x23, 0xd5, 0xc1, 0x68, 0xe4, 0x0d, 0xe9, 0xc0, 0xa5, 0xa4, 0xcf, 0x4a, 0x9a, 0x52, 0x60, 0x0a, 0x41, 0xec, 0x26, 0x31, 0x94, 0xd1, 0x1d, 0xa2, 0x83, 0x84, 0xc3, 0xaf, 0xa1, 0x9a, 0x6f, 0x23, 0x1e, 0xd7, 0xe3, 0x86, 0xf5, 0x94, 0x24, 0x9c, 0x66, 0x63, 0x8a, 0x2f, 0xa7, 0xf6, 0x13, 0x0e, 0xd7, 0x3d, 0xfc, 0x56, 0x33, 0xcf, 0x93, 0xf0, 0x8c, 0x8b, 0x47, 0x5b, 0xf9, 0x7f, 0x01, 0xac, 0xc9, 0x09, 0xb7, 0xd3, 0xbb, 0x3b, 0x3e, 0x1f, 0x72, 0x84, 0x5f, 0x05, 0x23, 0x8d, 0x2e, 0x1d, 0x91, 0x62, 0x97, 0x6d, 0x3b, 0xd2, 0x3a, 0xea, 0xd3, 0x18, 0x79, 0x3c, 0xf3, 0xbb, 0xce, 0xc2, 0x0c, 0xb2, 0x62, 0xd6, 0x9f, 0xcc, 0xdc, 0x52, 0xaf, 0x4f, 0x77, 0x52, 0x76, 0xdf, 0x58, 0x3c, 0x57, 0xa2, 0x1e, 0xfe, 0x14, 0xa2, 0xba, 0x97, 0x41, 0x73, 0x81, 0xd9, 0xf8, 0x15, 0x7f, 0x6d, 0xcf, 0x1b, 0x0f, 0x17, 0x07, 0x0d, 0xa9, 0x3b, 0x06, 0x0c, 0xfa, 0xa1, 0x07, 0xb4, 0x3a, 0x75, 0x11, 0x47, 0xba, 0x92, 0x25, 0x07, 0xbc, 0x00, 0xbc, 0xe3, 0x88, 0xba, 0x71, 0x56, 0xbc, 0xb5, 0xfa, 0x8d, 0xe4, 0x1f, 0x5c, 0xc8, 0x4a, 0xe4, 0x5f, 0x02, 0x10, 0x77, 0x40, 0xd4, 0x7b, 0xcf, 0xa7, 0x97, 0x92, 0xb0, 0xd8, 0xc9, 0xe8, 0x2b, 0x2d, 0xb1, 0xb6, 0x68, 0xc4, 0x46, 0x2c, 0xa3, 0x75, 0x4e, 0x09, 0x75, 0x07, 0xc3, 0x6a, 0x55, 0xa3, 0x7a, 0xdf, 0x5e, 0x88, 0x07, 0xc4, 0x53, 0x01, 0xdb, 0xcf, 0xe0, 0x94, 0xaf, 0xe5, 0x22, 0x7d, 0x26, 0x32, 0x6a, 0x5b, 0xad, 0x78, 0x3e, 0x28, 0xa6, 0xa7, 0xa1, 0x6e, 0xc7, 0xaf, 0x95, 0xb8, 0xbc, 0x92, 0xdd, 0x47, 0x14, 0xbd, 0x07, 0x07, 0x5a, 0x98, 0xaa, 0xc2, 0x82, 0x5c, 0xed, 0x92, 0x88, 0x25, 0x48, 0x9c, 0x53, 0x48, 0x8f, 0xfb, 0xdf, 0xe6, 0x2c, 0xfb, 0x9b, 0xc1, 0xab, 0x88, 0x10, 0x4f, 0x7d, 0xe6, 0xc4, 0x0d, 0xf5, 0xa2, 0x5e, 0x16, 0x97, 0xc8, 0x0a, 0xf4, 0x92, 0x56, 0x1f, 0xb6, 0x8b, 0xf1, 0x00, 0x42, 0x9c, 0xd7, 0x40, 0xed, 0x9d, 0x15, 0x09, 0x49, 0xa2, 0xfa, 0xbe, 0x3e, 0xc4, 0xcb, 0xdf, 0x5d, 0x25, 0xb8, 0x2d, 0x70, 0x2e, 0x0f, 0x0f, 0x56, 0x1b, 0xb0, 0x35, 0x0e, 0xba, 0xc1, 0x7b, 0x11, 0x6f, 0xa2, 0x10, 0xe5, 0x7c, 0x23, 0xd7, 0xef, 0x7f, 0xf5, 0x0d, 0x89, 0x3c, 0x5f, 0x2d, 0x54, 0x9d, 0x32, 0x10, 0xcf, 0xf7, 0xff, 0x59, 0x29, 0x8f, 0x87, 0x10, 0x54, 0x5d, 0x73, 0x8d, 0x5b, 0x10, 0x46, 0x98, 0xf5, 0x52, 0x8f, 0xce, 0x5a, 0x4c, 0x63, 0x47, 0x55, 0x6d, 0x0a, 0x75, 0x9b, 0x67, 0xf9, 0x4f, 0x5b, 0x7b, 0x00, 0xaf, 0x16, 0xf7, 0xc5, 0xf9, 0xb1, 0xfd, 0x71, 0xfe, 0xc9, 0x85, 0xa9, 0x20, 0x46, 0xa5, 0xc0, 0xb6, 0x33, 0x11, 0x2b, 0xb2, 0xcd, 0xde, 0x35, 0x81, 0xd9, 0x8b, 0xf4, 0x32, 0x3b, 0x41, 0x7b, 0xdb, 0xc5, 0x5a, 0x51, 0x38, 0x4d, 0x21, 0x22, 0x96, 0x02, 0xd8, 0xb5, 0xef, 0x00, 0x00, 0x1e, 0x57, 0x21, 0xd4, 0x35, 0x96, 0x16, 0x17, 0x46, 0x17, 0xb7, 0x0f, 0x0a, 0x01, 0x98, 0xd2, 0xd6, 0xa3, 0xdd, 0xc0, 0x13, 0x15, 0x4f, 0x51, 0xee, 0x1c, 0xaf, 0x11, 0x50, 0x4f, 0x4a, 0xe8, 0x11, 0x78, 0xcd, 0x9f, 0x69, 0x3d, 0x5b, 0xa0, 0xa7, 0x00, 0xdd, 0xfd, 0x25, 0x03, 0x99, 0xb4, 0x7b, 0xd0, 0x07, 0x32, 0xf3, 0xd8, 0xdf, 0x15, 0x3d, 0x5a, 0x77, 0x36, 0x64, 0x86, 0x4c, 0xe7, 0x01, 0xe3, 0xde, 0x79, 0xaf, 0xee, 0xc2, 0x02, 0xbe, 0x04, 0xf2, 0x5c, 0x2c, 0x81, 0x67, 0x71, 0xd0, 0x2a, 0xea, 0xb6, 0xd9, 0xc8, 0x27, 0xf6, 0x77, 0x16, 0x03, 0x51, 0xd8, 0xdd, 0x2f, 0x84, 0x56, 0x5e, 0xfd, 0x6b, 0xef, 0xf0, 0x73, 0xc4, 0xf5, 0xea, 0x9f, 0x35, 0x06, 0xc3, 0x29, 0x91, 0x3f, 0x78, 0x2f, 0x57, 0xad, 0x2e, 0x4c, 0x7b, 0x04, 0x19, 0xfa, 0x69, 0x94, 0x9c, 0x1b, 0x48, 0x78, 0xb2, 0xd2, 0x7b, 0x11, 0x8c, 0x97, 0x6e, 0xb3, 0x7c, 0x8b, 0x8f, 0x9d, 0x11, 0x08, 0x9a, 0x2f, 0x84, 0x7d, 0x1a, 0x57, 0x52, 0x79, 0x2d, 0x4d, 0x2b, 0x05, 0x87, 0x80, 0x0b, 0x37, 0xb9, 0xd0, 0xa7, 0x04, 0xb3, 0xfd, 0x0a, 0x56, 0x88, 0x5f, 0x80, 0x5e, 0x72, 0xd8, 0xb3, 0x2c, 0x16, 0x08, 0x14, 0x7d, 0x09, 0xbf, 0x7c, 0xd4, 0x92, 0xb8, 0x13, 0xcc, 0xb2, 0x84, 0x72, 0xac, 0x61, 0xc4, 0x04, 0x3c, 0x1b, 0x9b, 0xb2, 0xd7, 0x9b, 0x63, 0xbf, 0xc2, 0xe7, 0x9f, 0xf0, 0xbc, 0x8c, 0x31, 0xf1, 0xd6, 0x2b, 0xce, 0xf4, 0x85, 0x34, 0xae, 0x9b, 0xf6, 0xf2, 0x88, 0x18, 0xa1, 0xc8, 0xbd, 0x93, 0x21, 0xba, 0xd4, 0xcb, 0x43, 0x2e, 0x26, 0x01, 0x5d, 0xf4, 0xda, 0x12, 0xe1, 0x85, 0x14, 0xe3, 0x31, 0x88, 0x6a, 0x01, 0xb5, 0x9b, 0x98, 0x89, 0x2c, 0x4f, 0x74, 0x46, 0x3f, 0x74, 0x24, 0x1a, 0x5c, 0x98, 0x8e, 0x9f, 0xc1, 0xca, 0x10, 0x0d, 0xd7, 0xa4, 0x71, 0x5f, 0xc2, 0x88, 0x18, 0xb1, 0x36, 0x29, 0x7c, 0xed, 0x8c, 0x4d, 0xdc, 0xa6, 0x15, 0xd2, 0x30, 0x44, 0xae, 0xef, 0x5f, 0x62, 0x94, 0xbd, 0xb2, 0x74, 0x7a, 0xf6, 0x89, 0xad, 0xd9, 0xfc, 0x4d, 0x20, 0x88, 0x1d, 0xa5, 0x25, 0x8c, 0x15, 0xed, 0xfe, 0x31, 0xd4, 0xe4, 0xba, 0x5a, 0x82, 0xa4, 0x5a, 0x15, 0xc1, 0xd8, 0x33, 0x72, 0x32, 0x29, 0x93, 0x96, 0x3a, 0xf9, 0xa7, 0x0b, 0x06, 0x54, 0x9c, 0x5a, 0xcc, 0x23, 0x05, 0xdc, 0x54, 0xa3, 0x7d, 0xcd, 0xb8, 0x16, 0x8d, 0xa2, 0x68, 0xb9, 0xd0, 0x9c, 0x70, 0xf5, 0x54, 0x9e, 0xfe, 0xd9, 0x44, 0x3c, 0x1e, 0xc8, 0xc4, 0x14, 0xc9, 0x6f, 0x1d, 0x61, 0x1e, 0xfa, 0x1a, 0xcd, 0xef, 0x88, 0xb2, 0x87, 0x7f, 0xdc, 0xe6, 0x96, 0x8a, 0x55, 0xed, 0x6d, 0x86, 0x20, 0x8f, 0xbf, 0x29, 0xac, 0xcf, 0x94, 0x2b, 0x5e, 0xcc, 0x9d, 0x4d, 0x87, 0xe9, 0xc4, 0x9a, 0x93, 0x2c, 0x08, 0xed, 0x83, 0xe4, 0x88, 0xb3, 0x9d, 0x8f, 0xdd, 0xf2, 0x61, 0xfa, 0xad, 0x8b, 0xc0, 0xaa, 0x7d, 0xbc, 0x89, 0x7b, 0xc7, 0xe8, 0x24, 0x87, 0x4d, 0x9b, 0x82, 0x49, 0xac, 0xc9, 0x54, 0x03, 0x34, 0x56, 0x7b, 0x5c, 0xf7, 0xdb, 0xc0, 0x4e, 0x20, 0xa8, 0xc6, 0x3f, 0x87, 0x05, 0x3c, 0x6e, 0x82, 0xbe, 0x57, 0x91, 0xfd, 0xde, 0x80, 0xbd, 0xcd, 0xba, 0x4a, 0x85, 0x41, 0x31, 0xa6, 0x66, 0xfa, 0x33, 0x5a, 0x63, 0xfd, 0x80, 0xaf, 0xec, 0x07, 0xb2, 0x6a, 0x04, 0x21, 0x7e, 0xfe, 0xa3, 0x73, 0x37, 0x00, 0x59, 0x5d, 0x93, 0xdb, 0x35, 0xc4, 0xb2, 0xc5, 0xe5, 0xaa, 0x5c, 0xf2, 0x1e, 0x02, 0x8b, 0x07, 0x3f, 0xc2, 0x29, 0xd1, 0x31, 0x39, 0x1a, 0x37, 0x91, 0xa3, 0x7d, 0x6d, 0x11, 0xfb, 0x2f, 0x6b, 0x1b, 0x10, 0x91, 0x9e, 0xb8, 0xdb, 0x8c, 0xdd, 0xb1, 0x10, 0xd2, 0x9e, 0xf4, 0xf3, 0x66, 0x6a, 0x38, 0x6d, 0x5e, 0x8e, 0xe4, 0x5f, 0xe8, 0x14, 0x2d, 0x36, 0x8b, 0xf1, 0x7f, 0xc0, 0xaf, 0x80, 0x1f, 0x3e, 0x60, 0x2f, 0x0e, 0xba, 0x4f, 0x79, 0x30, 0x9a, 0x19, 0x14, 0xad, 0x76, 0xcc, 0x6b, 0x98, 0x27, 0xa8, 0x4e, 0xcf, 0x20, 0x22, 0xe8, 0x22, 0x02, 0x2f, 0xf2, 0xb7, 0x6a, 0xbe, 0x27, 0xac, 0x0d, 0x86, 0xf8, 0xff, 0x08, 0x03, 0x80, 0xab, 0x71, 0xbb, 0xba, 0x14, 0x32, 0xc6, 0xf2, 0xa5, 0x17, 0x8d, 0x79, 0xb8, 0x25, 0xd2, 0x9d, 0xb6, 0x2e, 0xf1, 0xd8, 0x7f, 0xa2, 0x65, 0x48, 0x0c, 0xa8, 0x8d, 0x5f, 0x53, 0x6d, 0xb0, 0xdc, 0x6a, 0xbc, 0x40, 0xfa, 0xf0, 0xd0, 0x5b, 0xe7, 0xa9, 0x66, 0x97, 0x77, 0x68, 0x16, 0xff, 0x1a, 0x32, 0xe2, 0x59, 0x0c, 0xa0, 0x10, 0xab, 0xcb, 0x85, 0x35, 0xfd, 0xce, 0xd1, 0x93, 0x5f, 0x74, 0xb5, 0xa4, 0x2e, 0x3b, 0x08, 0xf7, 0x94, 0x32, 0xea, 0x3b, 0x4e, 0xb1, 0xa7, 0x9a, 0xb2, 0x47, 0xde, 0x48, 0xf0, 0xf4, 0xe2, 0x5b, 0x98, 0x98, 0x60, 0xdd, 0x5c, 0xac, 0x42, 0x1f, 0x18, 0x30, 0xd4, 0x51, 0x0f, 0xe4, 0x25, 0x50, 0x77, 0xbb, 0xb1, 0xbf, 0x39, 0x8d, 0x3c, 0x59, 0xf2, 0x0c, 0x01, 0x85, 0x3d, 0xf9, 0x0c, 0x2b, 0x34, 0x98, 0xe5, 0xc7, 0x34, 0x61, 0x6e, 0xbc, 0xe1, 0xf8, 0x0e, 0xea, 0x6a, 0x5f, 0x0f, 0x82, 0x0f, 0x6b, 0x45, 0x19, 0xe0, 0x74, 0xf1, 0xfc, 0xc7, 0x51, 0xe4, 0xc4, 0xc8, 0x83, 0xe8, 0x2a, 0x88, 0xb1, 0x5b, 0x1c, 0x0c, 0x55, 0x1d, 0x10, 0xc4, 0xb4, 0xad, 0x98, 0xc8, 0x13, 0x8e, 0x36, 0x61, 0x28, 0xf0, 0x72, 0xcb, 0xcf, 0x8c, 0x2b, 0x39, 0xfe, 0xd0, 0x2b, 0x1a, 0xfb, 0x3c, 0xfe, 0x9b, 0xcc, 0x0c, 0x03, 0x6d, 0xf0, 0x17, 0xc3, 0xc8, 0x4c, 0xf7, 0x82, 0xb0, 0x68, 0x6a, 0x14, 0x77, 0xdb, 0xf8, 0xf2, 0x83, 0x04, 0xd6, 0x8d, 0x51, 0xfb, 0x0b, 0xe2, 0xba, 0xc7, 0xd1, 0x4f, 0x75, 0xd2, 0x3e, 0xa5, 0xde, 0x9a, 0x23, 0x7e, 0xf5, 0xa8, 0x35, 0xd1, 0xaa, 0xc6, 0x6a, 0xc3, 0x58, 0x6d, 0xa6, 0xc0, 0x8f, 0x7d, 0x97, 0xcb, 0x16, 0x30, 0xdd, 0x12, 0x30, 0x51, 0x6f, 0xc6, 0x1f, 0xa9, 0x3a, 0x29, 0xe7, 0xbb, 0x0b, 0xe9, 0x54, 0xb1, 0xae, 0xac, 0x3e, 0x95, 0x58, 0xec, 0x0c, 0xc4, 0x42, 0x05, 0x77, 0xa0, 0x97, 0x8c, 0x91, 0x86, 0x90, 0xe3, 0x05, 0x00, 0xdd, 0x0a, 0xa0, 0x3b, 0x48, 0xb8, 0x10, 0xbb, 0x95, 0xab, 0xec, 0x4d, 0xac, 0x3c, 0xf5, 0x3d, 0xfa, 0x36, 0x9c, 0xca, 0x14, 0xe8, 0xc4, 0xd7, 0x9d, 0x79, 0xc8, 0xe3, 0x6b, 0x7c, 0xc0, 0x3b, 0xe5, 0xc4, 0x00, 0x6e, 0xaf, 0x7a, 0xe2, 0x02, 0x8a, 0x6c, 0xc6, 0x65, 0x75, 0xa8, 0x56, 0x26, 0x18, 0x4a, 0x0f, 0x65, 0x63, 0x92, 0xfd, 0x89, 0x73, 0x3a, 0xc5, 0x31, 0xb5, 0x06, 0xe9, 0x6c, 0x4d, 0x9c, 0x48, 0x2c, 0xb9, 0x96, 0xe4, 0xf8, 0xb1, 0xd6, 0xe8, 0xe2, 0x52, 0x19, 0xea, 0xb9, 0x7c, 0xcf, 0x6d, 0x7f, 0x79, 0x2b, 0xaa, 0x1d, 0xdf, 0x76, 0x90, 0x56, 0xb7, 0xa8, 0x09, 0xfa, 0xde, 0x39, 0x7f, 0x5c, 0xac, 0x35, 0x9f, 0x05, 0xd4, 0x8f, 0x5c, 0xaa, 0x8b, 0xb7, 0x37, 0x5c, 0xed, 0x6e, 0xbe, 0xff, 0x9c, 0xda, 0x53, 0xfd, 0xaa, 0xd5, 0x2f, 0x3c, 0xb9, 0x8b, 0xa7, 0x4d, 0x60, 0x44, 0xad, 0xe6, 0xd1, 0x7e, 0x99, 0x92, 0xb9, 0x3f, 0x2a, 0xa7, 0x68, 0xa9, 0xc7, 0x78, 0x32, 0xcf, 0x0b, 0xcd, 0x15, 0xc7, 0x81, 0x90, 0x9c, 0x01, 0xac, 0xc9, 0x02, 0xd6, 0x4b, 0xcd, 0x9b, 0x64, 0xda, 0xb1, 0x70, 0x9a, 0x5c, 0x05, 0x29, 0x8f, 0x58, 0xbf, 0x31, 0x18, 0x22, 0x76, 0x14, 0x99, 0x5b, 0xd1, 0x2c, 0x1b, 0xbb, 0x3e, 0x7c, 0x9f, 0x0e, 0xe7, 0xdc, 0xb2, 0x7d, 0xe2, 0x57, 0x42, 0x0f, 0xa7, 0xd1, 0xb0, 0x70, 0xc8, 0xec, 0x26, 0xf0, 0xdc, 0x2d, 0x2b, 0xce, 0xbc, 0x5b, 0x75, 0xb7, 0xf3, 0x28, 0xfe, 0x8a, 0x6f, 0x14, 0x5a, 0x5e, 0x7d, 0x8d, 0x47, 0xc6, 0xf4, 0x5b, 0x86, 0x54, 0xaf, 0x3b, 0xe9, 0x5b, 0x41, 0xca, 0xae, 0xf9, 0xe5, 0xa5, 0x0b, 0x55, 0xb4, 0xcf, 0x0a, 0x26, 0x1b, 0x53, 0x97, 0x75, 0x8b, 0x2a, 0xd7, 0xa3, 0x72, 0x5e, 0xbc, 0xad, 0x6b, 0x70, 0xd7, 0xaf, 0xb1, 0xf8, 0x6d, 0xa7, 0xda, 0x8b, 0xcc, 0x7c, 0xc2, 0xe1, 0xdf, 0x3f, 0xc5, 0x37, 0x01, 0xb0, 0x31, 0xf3, 0x0f, 0x04, 0xfa, 0x87, 0xc1, 0xe5, 0xb0, 0x97, 0x3a, 0xbb, 0xaf, 0x5e, 0xdd, 0x2a, 0x96, 0x4e, 0x63, 0xdb, 0xfa, 0xf6, 0x2a, 0x80, 0x5b, 0x29, 0xd0, 0x12, 0x56, 0x5d, 0x01, 0x5d, 0x1d, 0x51, 0x8d, 0xbf, 0x25, 0xf3, 0xbe, 0x2d, 0x1e, 0x80, 0xe8, 0x76, 0x28, 0xed, 0x41, 0xcc, 0x44, 0x86, 0xf3, 0x80, 0x08, 0xd5, 0x70, 0x0d, 0x98, 0xc5, 0x06, 0x58, 0xd1, 0x07, 0xb3, 0x36, 0xc7, 0xb5, 0x3a, 0x2f, 0x72, 0x35, 0x76, 0x82, 0xa4, 0x61, 0xef, 0x68, 0x3e, 0xe4, 0xab, 0x9d, 0xa4, 0xe7, 0x47, 0x1d, 0x6e, 0xee, 0x46, 0x2b, 0x61, 0xfc, 0xa8, 0x98, 0x9d, 0xfe, 0xbe, 0x42, 0x17, 0x66, 0x3e, 0xdb, 0x4a, 0x17, 0x93, 0xec, 0x2a, 0x81, 0x76, 0x19, 0x5a, 0x0d, 0xc2, 0xa6, 0x9e, 0xbb, 0x84, 0x3a, 0x93, 0x09, 0x52, 0xe3, 0x9e, 0x18, 0xdf, 0x5b, 0x22, 0x0a, 0xcc, 0x8a, 0xf6, 0xae, 0xc0, 0x4b, 0x16, 0x5f, 0xba, 0x73, 0x98, 0x29, 0xa6, 0x10, 0xe2, 0x2e, 0x2f, 0xee, 0x1b, 0x48, 0xd5, 0x60, 0xdf, 0xf0, 0x3f, 0x3c, 0x37, 0x5f, 0xd2, 0x28, 0xc8, 0xf2, 0x82, 0x14, 0x4a, 0xd3, 0xe8, 0x08, 0x3c, 0xd6, 0x95, 0x20, 0xd6, 0xa1, 0xa7, 0xd5, 0x40, 0x10, 0x9a, 0x7d, 0x01, 0xd8, 0x60, 0x15, 0xba, 0x6a, 0xb3, 0x3f, 0x14, 0x1a, 0xaa, 0x87, 0xf7, 0x80, 0x8a, 0xea, 0xfd, 0x1e, 0xdf, 0x99, 0x26, 0x44, 0xcc, 0xfa, 0xcd, 0x31, 0xa0, 0xf0, 0xda, 0x7b, 0xa9, 0x5c, 0x3a, 0xb1, 0x4d, 0xe4, 0x8c, 0x3e, 0x56, 0xf3, 0x1d, 0x90, 0x8e, 0x00, 0x17, 0x7a, 0x8c, 0x14, 0xf5, 0xd7, 0xcd, 0x86, 0x3a, 0x71, 0x07, 0x09, 0x63, 0x21, 0xb9, 0xea, 0x1a, 0x37, 0x07, 0x92, 0xac, 0x1b, 0xc5, 0x52, 0xbd, 0x35, 0xd2, 0x60, 0x3b, 0x0b, 0xa7, 0x1c, 0x90, 0xa9, 0x2f, 0x98, 0x1c, 0x46, 0xda, 0x58, 0xe2, 0x24, 0xed, 0x56, 0x81, 0xb8, 0x1c, 0x49, 0x67, 0x0b, 0x5a, 0x27, 0x41, 0x60, 0xf0, 0xe9, 0xb5, 0x17, 0xcc, 0x8e, 0x54, 0xd1, 0x1c, 0x62, 0xca, 0xd5, 0x1c, 0x80, 0x58, 0xb3, 0x2c, 0x96, 0x85, 0x27, 0x26, 0xe8, 0x10, 0x3f, 0xee, 0x98, 0x28, 0xc0, 0x4b, 0x24, 0xdf, 0xc7, 0xf5, 0x30, 0xdd, 0xac, 0xef, 0x86, 0x51, 0x2b, 0x16, 0x5b, 0x2e, 0xc6, 0xfb, 0xd4, 0x93, 0x65, 0xee, 0xc8, 0x8a, 0x40, 0x5b, 0xc8, 0xf6, 0xfe, 0x5a, 0x5c, 0xc7, 0x1e, 0x81, 0x90, 0x70, 0x97, 0xfc, 0xaf, 0x9b, 0xbb, 0xe0, 0x4f, 0x1b, 0x61, 0xbd, 0x8d, 0x22, 0x43, 0x73, 0x9a, 0xb4, 0xa5, 0x46, 0x77, 0x5b, 0x38, 0x34, 0xfc, 0x1d, 0x3d, 0x85, 0x1f, 0xab, 0xed, 0xa5, 0x73, 0xdb, 0x19, 0x2f, 0xef, 0x58, 0x0e, 0x4a, 0xf1, 0x98, 0xbb, 0x38, 0x82, 0x0f, 0x16, 0x2c, 0xdc, 0xa3, 0xbb, 0x5c, 0x2a, 0x5f, 0xd6, 0x58, 0x8e, 0x6b, 0x44, 0x9a, 0x68, 0x3c, 0xf5, 0x5e, 0xd6, 0x08, 0x95, 0xb4, 0x77, 0x7d, 0x6b, 0xd3, 0x75, 0xb2, 0x81, 0xb0, 0xc2, 0x5e, 0x05, 0xcf, 0xa1, 0x48, 0xef, 0x59, 0x69, 0xfe, 0xe4, 0x70, 0x85, 0xca, 0x5a, 0xbf, 0xc0, 0xe2, 0xfe, 0x55, 0xc0, 0xdf, 0x52, 0xb3, 0xcf, 0x70, 0x9b, 0x23, 0xe2, 0x50, 0xfa, 0x4c, 0xd3, 0x75, 0xd9, 0x04, 0xf2, 0x8b, 0x88, 0x65, 0xbc, 0xa0, 0x28, 0x23, 0xea, 0x21, 0xc9, 0x1c, 0xae, 0x05, 0xcf, 0x31, 0x39, 0x48, 0x9a, 0x55, 0x80, 0x9b, 0x66, 0xe3, 0x40, 0x5a, 0x6f, 0x35, 0x3f, 0xbe, 0x59, 0x72, 0xd6, 0x54, 0xd0, 0xa7, 0xac, 0xad, 0x6c, 0x1a, 0xc4, 0x57, 0xd7, 0xdb, 0xba, 0x0d, 0x31, 0x9b, 0x49, 0x2b, 0xb3, 0xc1, 0x11, 0x65, 0x93, 0xbb, 0x97, 0xb7, 0x28, 0x92, 0x8e, 0x9f, 0x4f, 0xc2, 0x55, 0x8b, 0x0d, 0x48, 0xc0, 0x8d, 0x76, 0xfc, 0x1b, 0x56, 0xcd, 0x21, 0x6c, 0x62, 0xec, 0x3b, 0xf9, 0x70, 0xe6, 0x20, 0x0a, 0x35, 0xec, 0x52, 0xf0, 0x51, 0x6d, 0x8c, 0x46, 0x82, 0x81, 0x9b, 0x77, 0x18, 0x88, 0x6f, 0x81, 0xa9, 0x0e, 0x72, 0xf8, 0x05, 0xf3, 0x19, 0x4d, 0x6c, 0xc8, 0xb8, 0x50, 0xff, 0x7b, 0x9a, 0xf4, 0x75, 0x37, 0x51, 0x52, 0x0f, 0x86, 0x4b, 0xf1, 0xce, 0xb9, 0xa6, 0x45, 0xe3, 0x89, 0x45, 0x75, 0x67, 0xfe, 0x24, 0x62, 0x4c, 0x90, 0xe8, 0xe4, 0x94, 0x8d, 0xbb, 0x56, 0xc0, 0xba, 0x56, 0x56, 0x8c, 0x3d, 0x5f, 0xc6, 0xd9, 0xba, 0xf6, 0x16, 0xeb, 0xbd, 0x8b, 0xc6, 0xd4, 0x58, 0xf2, 0x26, 0x30, 0x0d, 0xb9, 0x61, 0x13, 0xed, 0xb9, 0xb9, 0x40, 0x02, 0xeb, 0x14, 0x9c, 0xeb, 0x7d, 0xb8, 0xe2, 0xc6, 0x25, 0x53, 0x97, 0x53, 0xb6, 0x3e, 0x41, 0x55, 0xf1, 0x02, 0xd4, 0x3c, 0x9d, 0x1c, 0x6d, 0x02, 0xda, 0xfd, 0x42, 0x53, 0xb2, 0x55, 0xd9, 0xf0, 0xf1, 0x91, 0x79, 0x55, 0x36, 0xa2, 0xdf, 0x9a, 0x4b, 0x01, 0x31, 0x97, 0xb2, 0xf0, 0x38, 0x4b, 0x80, 0x02, 0xc9, 0x7f, 0x6f, 0xdd, 0x84, 0xa6, 0x2e, 0x3f, 0xc2, 0x08, 0xfb, 0x3f, 0xc8, 0x1f, 0x74, 0xd6, 0x41, 0x41, 0xaa, 0x9d, 0xeb, 0x80, 0x78, 0xd8, 0x90, 0xcf, 0x13, 0xb4, 0x38, 0x66, 0xe1, 0xcd, 0x9d, 0x67, 0x8f, 0xf3, 0xdf, 0xc1, 0x5e, 0x2e, 0x79, 0x54, 0xbd, 0xff, 0x74, 0x57, 0x1d, 0xe9, 0xda, 0xf7, 0x01, 0x30, 0x6e, 0x41, 0x54, 0xe1, 0x9a, 0x42, 0x00, 0x12, 0xa9, 0x6d, 0xbc, 0x6b, 0x36, 0x3d, 0x25, 0xe6, 0xe4, 0x1b, 0x11, 0xd2, 0x50, 0x81, 0x20, 0x1e, 0x44, 0x60, 0x94, 0xd4, 0x2e, 0xbf, 0x62, 0xe4, 0xd0, 0xa5, 0x88, 0x23, 0x38, 0x3a, 0xa2, 0x93, 0xf3, 0x29, 0xb8, 0xe5, 0x7e, 0x48, 0x5b, 0x3c, 0xfd, 0x7b, 0xf0, 0x34, 0x2f, 0xd6, 0x4b, 0x23, 0xa2, 0x01, 0x80, 0x9f, 0x23, 0xe1, 0xf5, 0x40, 0x79, 0x74, 0xbc, 0xa6, 0x53, 0xfd, 0x20, 0xbe, 0x7e, 0x62, 0x7e, 0x42, 0x5b, 0xd2, 0x57, 0x7f, 0x91, 0xaa, 0xa2, 0x5b, 0xff, 0x9a, 0x67, 0x96, 0xf5, 0x04, 0x89, 0x50, 0xa3, 0xa4, 0xe4, 0xcc, 0xd1, 0x76, 0x97, 0x73, 0xd1, 0xd4, 0xa3, 0x1c, 0xb2, 0xdf, 0xb6, 0x8a, 0xb7, 0x21, 0x41, 0x36, 0x07, 0x71, 0xd0, 0x4f, 0xa6, 0x16, 0x9b, 0x00, 0xa4, 0x2f, 0x58, 0xf1, 0x95, 0x52, 0x54, 0x10, 0x41, 0x73, 0xc2, 0x91, 0x9c, 0x07, 0x53, 0x33, 0xf8, 0x6a, 0x07, 0xc6, 0x79, 0x7e, 0x42, 0xea, 0xc9, 0x96, 0x22, 0x19, 0x0e, 0x92, 0x10, 0xe8, 0x19, 0x4b, 0x95, 0x89, 0xe0, 0x31, 0x6f, 0x95, 0x2f, 0x32, 0xe5, 0x08, 0x9a, 0xde, 0x57, 0x8e, 0xb6, 0xc9, 0x19, 0xfd, 0x89, 0x31, 0x82, 0x22, 0x3e, 0xe1, 0x3f, 0xc0, 0x1d, 0x55, 0xed, 0xd6, 0xbb, 0x1f, 0xe8, 0x21, 0x6e, 0x8a, 0x5d, 0xe2, 0x04, 0x7c, 0xa7, 0xe1, 0xb5, 0xa1, 0xd8, 0xb2, 0x55, 0xc5, 0x95, 0x37, 0xcf, 0x82, 0x28, 0x66, 0xce, 0x1c, 0xd0, 0x4c, 0xbd, 0xa9, 0x5b, 0x52, 0xf2, 0x75, 0xf7, 0xc0, 0x26, 0xa4, 0x46, 0x7f, 0x29, 0x19, 0xb0, 0x23, 0xd3, 0x97, 0xfd, 0x29, 0x3e, 0x26, 0x23, 0x7c, 0x32, 0xb9, 0x5c, 0x3e, 0xe1, 0x0d, 0x7c, 0xc6, 0xd5, 0xd4, 0x82, 0xe5, 0x26, 0x13, 0x6d, 0x6e, 0xf0, 0xc9, 0x51, 0xf5, 0x04, 0xd1, 0xa9, 0xd6, 0xde, 0x09, 0xef, 0x7a, 0xd8, 0xb4, 0x6a, 0xd5, 0x9d, 0x1d, 0x48, 0x33, 0xdf, 0x7e, 0xec, 0x35, 0x4d, 0x1f, 0x89, 0x16, 0xbf, 0xc2, 0xf0, 0x33, 0xb4, 0x3f, 0xa6, 0xcb, 0xff, 0x6c, 0x3a, 0x03, 0xbd, 0x3f, 0xd5, 0x2d, 0x8a, 0x37, 0x13, 0x49, 0xf5, 0xf7, 0x11, 0xcc, 0x31, 0x35, 0xc8, 0xa1, 0x0d, 0xd2, 0x99, 0x6e, 0x25, 0x4a, 0x28, 0x18, 0x5a, 0x4f, 0x6e, 0x89, 0x81, 0xb1, 0x0a, 0xb1, 0x58, 0x81, 0xd8, 0xca, 0xbe, 0x76, 0xc5, 0xe1, 0x23, 0x8f, 0xe2, 0x92, 0x3d, 0xfa, 0xb7, 0x13, 0xfc, 0x35, 0xd9, 0x74, 0xc1, 0x73, 0xbf, 0x24, 0xcb, 0x41, 0xd1, 0xb8, 0xf1, 0x69, 0xc2, 0xe8, 0x97, 0x17, 0x20, 0xda, 0xdb, 0x3a, 0x29, 0xa4, 0x0f, 0x2d, 0xe1, 0x0c, 0x6c, 0x97, 0x61, 0x91, 0x04, 0x90, 0x72, 0xb0, 0xf9, 0x05, 0x5a, 0x60, 0xed, 0x5d, 0xf6, 0xdf, 0xb9, 0x5c, 0x09, 0xb0, 0x62, 0x48, 0xd4, 0xe5, 0x49, 0x4b, 0xe7, 0x9a, 0xa1, 0x19, 0x36, 0xc2, 0x26, 0xd2, 0x6f, 0x26, 0x0c, 0x2a, 0x8b, 0xaa, 0x36, 0xc7, 0xa4, 0xd2, 0xa9, 0xeb, 0x06, 0x86, 0x40, 0x52, 0x88, 0x12, 0xa1, 0x5e, 0x1d, 0x71, 0x6f, 0x71, 0xa6, 0xcb, 0xc2, 0x9a, 0x0a, 0x3c, 0xd4, 0x75, 0x89, 0xd7, 0xfd, 0x4c, 0x4d, 0xeb, 0xe1, 0x82, 0x42, 0x84, 0xe8, 0x32, 0x28, 0x35, 0xee, 0x13, 0xe7, 0x15, 0x3c, 0x9f, 0x22, 0x08, 0xb7, 0x74, 0x0e, 0x40, 0x58, 0xfa, 0x85, 0x03, 0xdc, 0x46, 0x56, 0xae, 0xbd, 0x3e, 0xe0, 0xfa, 0x60, 0xfe, 0xdf, 0x7e, 0x90, 0x7b, 0x85, 0x75, 0x2b, 0x66, 0xcd, 0xc2, 0x1b, 0x54, 0x0c, 0x31, 0x88, 0x1b, 0xc8, 0x00, 0x4c, 0x7f, 0xce, 0x9e, 0xa8, 0x0e, 0x7f, 0xb2, 0x35, 0x48, 0x6b, 0x5f, 0x1d, 0x03, 0x21, 0xc6, 0x8a, 0x0e, 0x44, 0xcd, 0x5f, 0x15, 0xe2, 0x1f, 0x27, 0xc4, 0x02, 0x75, 0x4a, 0x2f, 0x7c, 0x13, 0x87, 0x72, 0x0e, 0x95, 0x9e, 0x94, 0xab, 0xeb, 0x4d, 0xb2, 0x16, 0xa3, 0x7e, 0x59, 0xb0, 0x66, 0xbf, 0x33, 0x8f, 0xc6, 0xf2, 0xe6, 0xcf, 0x37, 0x46, 0x39, 0x2d, 0x5a, 0x66, 0x79, 0xd1, 0x82, 0xf0, 0x1b, 0x6c, 0x71, 0x28, 0xa2, 0x83, 0x62, 0xee, 0xc3, 0x0b, 0x4d, 0xed, 0xc7, 0x35, 0x66, 0x16, 0x32, 0x8b, 0xe6, 0x4d, 0xa2, 0x3c, 0x0f, 0x61, 0xf9, 0xb4, 0x6a, 0x42, 0xbe, 0x70, 0x54, 0x6e, 0xc1, 0x11, 0xb8, 0xad, 0xfe, 0xaf, 0x1e, 0xfe, 0xc4, 0x6f, 0xe5, 0xd1, 0x17, 0x58, 0xcc, 0x76, 0x52, 0x62, 0xb8, 0xd6, 0x11, 0xd0, 0xb1, 0x61, 0x4d, 0xc0, 0x2d, 0x47, 0xc9, 0x01, 0x91, 0xeb, 0xad, 0x24, 0xf5, 0x95, 0x71, 0xd6, 0x27, 0x66, 0xfd, 0x6d, 0xf3, 0x92, 0x0f, 0xc0, 0xa2, 0xc9, 0xdc, 0x3c, 0xc1, 0xf6, 0xfa, 0x34, 0x24, 0x2c, 0x7d, 0x79, 0x2a, 0xdd, 0x61, 0x2b, 0x41, 0x4e, 0x28, 0xce, 0xad, 0x47, 0xc3, 0xa0, 0x86, 0x0f, 0xb6, 0x2a, 0x00, 0x98, 0x78, 0x16, 0xf0, 0xf6, 0x18, 0x40, 0x8b, 0x15, 0x26, 0x10, 0x70, 0xac, 0xd1, 0x06, 0xe9, 0x6d, 0x4d, 0x96, 0x6d, 0x7f, 0x78, 0x37, 0x6a, 0x2d, 0xbc, 0xb7, 0x42, 0xe0, 0x37, 0xd1, 0x93, 0x4a, 0x19, 0x01, 0xbc, 0xe5, 0x4e, 0x97, 0x9d, 0x9c, 0x5e, 0x0b, 0x9e, 0xc7, 0x91, 0x90, 0xf2, 0x5d, 0x56, 0xeb, 0x1d, 0x65, 0xe5, 0x86, 0xb3, 0xae, 0x24, 0xc0, 0x63, 0xc0, 0xc7, 0x88, 0x35, 0x12, 0xbc, 0x2a, 0x10, 0x7e, 0xc6, 0x68, 0x7f, 0xf1, 0x68, 0xcd, 0xb4, 0x67, 0x04, 0x3e, 0xce, 0x17, 0x44, 0xd2, 0x57, 0xea, 0xb9, 0xe4, 0x11, 0x32, 0xc2, 0x66, 0xf2, 0x99, 0xb0, 0x77, 0x6d, 0x57, 0x27, 0x38, 0xf3, 0xa9, 0xc7, 0xdc, 0xba, 0x7e, 0x0c, 0xff, 0xbd, 0x73, 0x73, 0x39, 0x04, 0x01, 0xdf, 0xf2, 0x25, 0xf5, 0x3a, 0x78, 0x0b, 0x21, 0x5f, 0x4e, 0xf6, 0x52, 0x38, 0xc8, 0xc3, 0x82, 0x23, 0xd4, 0x6e, 0x4e, 0x9b, 0x1b, 0xd5, 0xaa, 0x14, 0x49, 0xbe, 0xd3, 0x26, 0xa8, 0x1c, 0x85, 0xee, 0xf4, 0x8e, 0x6f, 0xb2, 0x6b, 0x29, 0xe4, 0xc3, 0x23, 0x77, 0xd3, 0xa8, 0xa0, 0xbf, 0xf9, 0x78, 0xa6, 0x87, 0x55, 0x88, 0x4c, 0x58, 0xdc, 0x46, 0x52, 0xc1, 0x6f, 0x65, 0xb4, 0x9e, 0x0a, 0x3b, 0x7f, 0x9b, 0x3e, 0x67, 0xe4, 0xf3, 0xe1, 0xb6, 0x8b, 0x7e, 0x04, 0x48, 0x2a, 0xea, 0x25, 0xee, 0x55, 0x48, 0xa6, 0xd7, 0x98, 0xcb, 0x7e, 0x6c, 0xc3, 0xcd, 0x2f, 0x78, 0x85, 0x13, 0xf8, 0x8c, 0x3c, 0x52, 0x4b, 0xa2, 0x0c, 0xf2, 0x81, 0x00, 0x2e, 0x11, 0xcd, 0x5f, 0x8b, 0xcb, 0x6e, 0x4d, 0x8a, 0xb9, 0x29, 0xd0, 0x26, 0xb7, 0xf7, 0x4c, 0x43, 0xeb, 0xfb, 0xa6, 0x42, 0x03, 0xb6, 0xaa, 0xd3, 0xbd, 0x7e, 0xaa, 0x0a, 0xad, 0x2c, 0x68, 0xb6, 0x3b, 0x16, 0x37, 0xee, 0xeb, 0x3d, 0x5c, 0xec, 0xe1, 0xc7, 0xba, 0x1f, 0xa4, 0xaf, 0xaf, 0x7b, 0x22, 0xbb, 0x39, 0x14, 0xf4, 0xae, 0x5d, 0xeb, 0xe4, 0xbf, 0xc9, 0x07, 0xac, 0x4b, 0xb8, 0xc8, 0x01, 0xc7, 0x16, 0x79, 0xd0, 0xf8, 0xe4, 0x24, 0xc8, 0x66, 0xdf, 0xaa, 0x18, 0x0e, 0x5c, 0x12, 0x7a, 0x57, 0x77, 0x22, 0x70, 0x47, 0x6c, 0x2c, 0xcd, 0xf7, 0x45, 0x2b, 0x78, 0x44, 0xb6, 0x0f, 0x6d, 0xc8, 0x45, 0x54, 0x04, 0x09, 0xad, 0xd9, 0x76, 0xef, 0x85, 0xf0, 0x9d, 0x7c, 0x1d, 0xb1, 0xfb, 0xb7, 0xa9, 0x95, 0xfe, 0xe9, 0xa1, 0x40, 0x82, 0x0c, 0x67, 0x9d, 0x98, 0x81, 0x2b, 0x30, 0x86, 0x01, 0x0c, 0xa8, 0x0f, 0xd6, 0x7f, 0xb4, 0xf4, 0x4b, 0xf5, 0x18, 0xba, 0x61, 0xb8, 0x00, 0xae, 0xc3, 0x16, 0x94, 0x27, 0xfc, 0xc2, 0xcc, 0x0b, 0xe8, 0x77, 0x86, 0x94, 0x68, 0xde, 0xd6, 0x54, 0x5a, 0xb2, 0x9d, 0x77, 0xc9, 0x22, 0x5d, 0x49, 0x60, 0x77, 0x4b, 0xf8, 0x25, 0xf6, 0xa6, 0x9a, 0x64, 0x08, 0x48, 0x71, 0xe8, 0x98, 0x7b, 0x6e, 0x71, 0xbd, 0x0d, 0xf5, 0x63, 0x99, 0xa7, 0xe0, 0xbc, 0x81, 0x5a, 0xc6, 0x48, 0x5d, 0x7b, 0x7d, 0x18, 0x52, 0xb1, 0xdd, 0x30, 0x9f, 0x4c, 0xc7, 0x80, 0xc5, 0xd8, 0x66, 0x16, 0xeb, 0xf2, 0xb5, 0x91, 0x80, 0x5b, 0x42, 0xd9, 0x22, 0x4b, 0x31, 0x0d, 0xbf, 0x08, 0x83, 0xbd, 0xfa, 0xb6, 0x99, 0x5a, 0xd0, 0x71, 0xf3, 0xea, 0x7b, 0x99, 0x3e, 0x00, 0x96, 0x6d, 0x8e, 0xec, 0x83, 0xdc, 0xe8, 0x2f, 0x0a, 0x97, 0x03, 0x32, 0x42, 0x6b, 0x4f, 0x37, 0xb5, 0xce, 0x37, 0x8f, 0xbf, 0xb8, 0xa3, 0x0d, 0x37, 0xb4, 0xc2, 0xbc, 0x51, 0x36, 0x06, 0xcd, 0xc3, 0x2f, 0x70, 0xd3, 0x27, 0xdf, 0x0d, 0x33, 0xa1, 0xea, 0xc1, 0xd5, 0xc1, 0xaf, 0x43, 0x20, 0xab, 0xd5, 0x69, 0x26, 0x75, 0x26, 0xa6, 0x1b, 0xd0, 0xa1, 0xd1, 0x0c, 0xeb, 0xca, 0x27, 0xcd, 0x94, 0x45, 0x94, 0x34, 0xa1, 0xa3, 0x2e, 0x84, 0x8e, 0x7c, 0x02, 0x2c, 0x67, 0xbe, 0x14, 0xb2, 0xe8, 0x44, 0xa1, 0xea, 0xe4, 0xab, 0xa7, 0x6b, 0xe3, 0x61, 0xa8, 0x43, 0x0f, 0xfe, 0xaa, 0xea, 0x51, 0xd8, 0x82, 0x75, 0xb7, 0xd1, 0x52, 0x0c, 0x19, 0x74, 0x51, 0x9e, 0xfc, 0x41, 0xca, 0xd3, 0xb6, 0x44, 0x68, 0x43, 0xd3, 0xed, 0xb0, 0xe5, 0xb8, 0x1b, 0xcf, 0xca, 0x86, 0x7a, 0x96, 0x0b, 0x41, 0x0f, 0xc3, 0x00, 0x32, 0x11, 0x82, 0xb2, 0x89, 0xfb, 0x33, 0x93, 0x47, 0xdf, 0x6e, 0x6d, 0x5b, 0xfd, 0x44, 0x99, 0x0b, 0x94, 0xc8, 0x71, 0x96, 0xf8, 0xcf, 0x07, 0x18, 0xe5, 0xf3, 0x18, 0xad, 0x13, 0xde, 0x3b, 0xd9, 0x0a, 0xc5, 0x5e, 0x28, 0x38, 0x32, 0x73, 0x11, 0x41, 0x07, 0x67, 0x20, 0x96, 0xc0, 0x54, 0x55, 0x49, 0xf8, 0xf7, 0xc7, 0x20, 0x2e, 0x64, 0x8c, 0xe8, 0xca, 0xf8, 0xdd, 0x0b, 0x5b, 0x90, 0x76, 0x65, 0x23, 0xf8, 0x3c, 0x54, 0xd5, 0xa7, 0x22, 0x0e, 0x9d, 0xa9, 0x4d, 0x38, 0x61, 0xdc, 0x77, 0xb4, 0x47, 0x5f, 0x91, 0xba, 0x77, 0x48, 0xac, 0x2a, 0x22, 0x95, 0x19, 0x20, 0xc3, 0x66, 0xcf, 0xc9, 0xa4, 0x69, 0x0e, 0x76, 0xa4, 0x95, 0x42, 0xef, 0x39, 0x1b, 0x2a, 0x0a, 0xb1, 0x99, 0x39, 0x7c, 0xbd, 0x91, 0x3d, 0xee, 0x2f, 0x1b, 0x3e, 0x54, 0x03, 0xd6, 0xa9, 0x7a, 0x9c, 0x24, 0xae, 0xdf, 0x51, 0x97, 0xe6, 0xc7, 0x28, 0xa6, 0x39, 0x8c, 0xe1, 0xa5, 0xff, 0x35, 0x37, 0xf4, 0x65, 0x49, 0x62, 0x76, 0x12, 0xe6, 0xe0, 0x44, 0x0b, 0x0d, 0x75, 0xa3, 0xd4, 0x40, 0x71, 0x34, 0xd9, 0x4f, 0x31, 0x6b, 0x0c, 0x6f, 0xe8, 0x42, 0xce, 0x8c, 0xa0, 0x2f, 0x13, 0xe0, 0x7b, 0x53, 0xc1, 0xc5, 0x3f, 0xf4, 0x5a, 0xc7, 0x11, 0x2d, 0xdb, 0xfe, 0x81, 0xe4, 0xe4, 0x9b, 0xc7, 0xfd, 0x18, 0xc0, 0x4c, 0xcd, 0xc7, 0x95, 0x6d, 0xd2, 0xcb, 0x98, 0x7b, 0xa1, 0xaf, 0x34, 0x06, 0x1f, 0x17, 0x96, 0x5b, 0xf4, 0x5b, 0xbc, 0x4b, 0x3d, 0x76, 0xce, 0x2e, 0x81, 0x1f, 0xb2, 0x28, 0xe7, 0x35, 0xdb, 0xab, 0xa6, 0x60, 0x61, 0x3d, 0xbc, 0xf6, 0x57, 0x7c, 0xe3, 0x1b, 0x59, 0x5f, 0xc1, 0x2d, 0x64, 0xbe, 0x5f, 0x5f, 0xea, 0x15, 0xdc, 0xa3, 0x26, 0x85, 0x63, 0xce, 0xae, 0x1b, 0x5a, 0xf6, 0x47, 0x55, 0xdc, 0x1f, 0xfc, 0xe2, 0x6a, 0x17, 0x72, 0xaa, 0xdd, 0x9f, 0x76, 0x0e, 0x9f, 0xcb, 0xd8, 0x71, 0x1b, 0xac, 0x7c, 0xf7, 0x72, 0x2c, 0xae, 0x8c, 0x70, 0x38, 0xb6, 0x29, 0xbe, 0x25, 0xac, 0x52, 0x59, 0x4c, 0x8e, 0xe4, 0x42, 0xf8, 0x90, 0x0d, 0x78, 0x83, 0xb3, 0x9c, 0x23, 0xbb, 0x99, 0x7b, 0x12, 0x8a, 0x98, 0x79, 0x67, 0xd7, 0x0d, 0x4d, 0x91, 0xa7, 0xf3, 0xd8, 0x7b, 0x88, 0xb4, 0xab, 0x03, 0x2f, 0x3e, 0xc9, 0xae, 0x60, 0x5a, 0xae, 0x9a, 0x0e, 0x39, 0x90, 0xb4, 0xc4, 0x50, 0xe4, 0x2a, 0x43, 0x67, 0x24, 0x24, 0x6d, 0xec, 0xd0, 0xaf, 0x61, 0x8c, 0xb3, 0xf9, 0xe8, 0x05, 0x67, 0xc4, 0x10, 0x35, 0x1b, 0x15, 0x16, 0x77, 0x94, 0x2c, 0x89, 0x30, 0x72, 0xb9, 0xad, 0xa5, 0xb5, 0x4d, 0x1e, 0x10, 0x7f, 0x0f, 0xb5, 0xf2, 0x1b, 0xb0, 0xaf, 0xaa, 0x3f, 0xa1, 0x0c, 0x47, 0x8e, 0x83, 0x36, 0x9b, 0x61, 0xdf, 0xe3, 0x90, 0xc7, 0x17, 0x3c, 0xc0, 0xcb, 0x9c, 0x3f, 0x3f, 0xf5, 0x62, 0x62, 0xbb, 0x13, 0x91, 0x79, 0xc8, 0x38, 0x7e, 0xd9, 0x75, 0x06, 0xd9, 0xbe, 0x23, 0x29, 0x28, 0xea, 0x97, 0x24, 0x73, 0x8f, 0x4d, 0x50, 0x41, 0x6f, 0x0f, 0x21, 0xc4, 0x42, 0xc7, 0xac, 0x51, 0x58, 0x92, 0x66, 0x13, 0x7f, 0x15, 0x2f, 0xff, 0x27, 0x14, 0x8f, 0x0a, 0xc4, 0x40, 0x3f, 0x9a, 0x74, 0x51, 0xeb, 0x3b, 0xe2, 0x55, 0x36, 0x94, 0x6a, 0x48, 0xff, 0x99, 0x7e, 0xe4, 0xe2, 0x02, 0x48, 0xba, 0x02, 0xfb, 0x90, 0x82, 0x06, 0x1d, 0xe1, 0xb0, 0x62, 0x9d, 0xe7, 0x48, 0xd8, 0xc3, 0x1c, 0xf2, 0x3e, 0x9e, 0xa4, 0x51, 0x81, 0xf7, 0x74, 0x91, 0xea, 0x83, 0xba, 0x3f, 0xa0, 0x5c, 0x79, 0x5e, 0x6f, 0xb2, 0x74, 0xb7, 0xc7, 0xbe, 0x4e, 0x70, 0x08, 0xf8, 0xef, 0xe0, 0xfc, 0x8a, 0x2a, 0xa2, 0xa5, 0x04, 0x9c, 0xe8, 0x3a, 0x51, 0xd7, 0x12, 0x6c, 0xea, 0xc0, 0x80, 0xed, 0x49, 0x35, 0xa4, 0x33, 0xa1, 0xf3, 0x5b, 0x7a, 0xcc, 0xb7, 0x7d, 0x08, 0x85, 0xa4, 0xb2, 0xb4, 0xd7, 0xe5, 0x88, 0xa9, 0xd5, 0x93, 0xc3, 0x68, 0x8c, 0xd9, 0xf5, 0x0c, 0x36, 0x56, 0x4e, 0xd2, 0xb1, 0xc2, 0xb4, 0xd8, 0x2f, 0xd5, 0x16, 0x25, 0x2e, 0x64, 0xfe, 0xea, 0xab, 0xce, 0x66, 0x07, 0x92, 0x96, 0xcd, 0xd1, 0x7a, 0x51, 0x8a, 0x13, 0x8f, 0xc3, 0x5f, 0x53, 0xcf, 0x45, 0x51, 0x56, 0x7a, 0x69, 0xb7, 0xe6, 0xc3, 0xe1, 0x92, 0xd2, 0xcc, 0x9d, 0x1c, 0x37, 0xd1, 0x34, 0xa4, 0xfe, 0xa4, 0x85, 0x98, 0xa6, 0x59, 0x9e, 0xe4, 0x43, 0x42, 0xdd, 0x7a, 0xc7, 0x1e, 0x54, 0x32, 0x81, 0x8d, 0x72, 0xd5, 0xe3, 0xc7, 0xe0, 0x74, 0x88, 0x8e, 0xaa, 0xff, 0x76, 0x61, 0x9f, 0x13, 0xa0, 0xf3, 0xfa, 0x12, 0xaf, 0xdb, 0x42, 0x79, 0x01, 0x8d, 0x6e, 0x6e, 0xf2, 0x89, 0x4d, 0x99, 0x5b, 0xd2, 0x25, 0x35, 0x59, 0xa2, 0x9b, 0x67, 0x50, 0x5c, 0xd2, 0xce, 0x2f, 0xc2, 0xd7, 0x5b, 0xf5, 0x68, 0x3d, 0x63, 0x74, 0x68, 0x04, 0xf2, 0x54, 0x58, 0xc0, 0x63, 0x5c, 0x79, 0xf6, 0x2d, 0xed, 0x31, 0xca, 0x00, 0xcf, 0xbc, 0xd7, 0x11, 0x31, 0x1e, 0x5f, 0xb2, 0xea, 0x5c, 0xa4, 0x25, 0x05, 0xeb, 0x95, 0xb2, 0x7d, 0x69, 0xad, 0xf7, 0x45, 0x8b, 0x19, 0x80, 0x8b, 0x57, 0x19, 0x97, 0x3e, 0x93, 0xa8, 0x5d, 0xce, 0x7d, 0x5f, 0x1a, 0x33, 0xbc, 0x97, 0xd2, 0x30, 0x97, 0xce, 0x19, 0xd9, 0x65, 0x4c, 0x27, 0x53, 0x44, 0x05, 0x2f, 0xdb, 0x0e, 0xc2, 0xed, 0x09, 0x89, 0x7c, 0x7f, 0x56, 0xde, 0x08, 0x75, 0xdd, 0x4d, 0xfa, 0x2b, 0x5e, 0x1e, 0xc3, 0x57, 0x88, 0xdb, 0x1c, 0xde, 0x78, 0xbc, 0xa8, 0xec, 0x7d, 0x63, 0xd4, 0x43, 0x1e, 0xc9, 0x03, 0xd3, 0x5e, 0x79, 0xe8, 0x8b, 0x3e, 0xfc, 0x32, 0x70, 0x84, 0x94, 0x6f, 0xec, 0xbb, 0x2d, 0x2a, 0x68, 0x7b, 0x90, 0x57, 0x1d, 0xea, 0xda, 0xf2, 0x26, 0x83, 0x2c, 0xe2, 0xda, 0x16, 0xa5, 0x23, 0x5a, 0x10, 0x8d, 0x24, 0x66, 0xfd, 0xd3, 0x6e, 0x75, 0x4b, 0xba, 0x87, 0x04, 0x51, 0xcf, 0x16, 0x2e, 0x90, 0x1e, 0x47, 0x7d, 0x38, 0xa5, 0x71, 0x00, 0xee, 0x09, 0xf7, 0x9d, 0xcc, 0x88, 0x6c, 0xa9, 0xa9, 0x2f, 0xfa, 0xb6, 0x9b, 0x4d, 0x04, 0xac, 0xbb, 0x27, 0x0a, 0x1c, 0x28, 0xed, 0xcd, 0xd0, 0x4f, 0xed, 0xb4, 0xa7, 0x69, 0x07, 0x6f, 0xa0, 0x44, 0x61, 0xda, 0x34, 0x47, 0x5c, 0x24, 0xe9, 0xb1, 0xc6, 0x30, 0x24, 0x21, 0x51, 0x3b, 0x3e, 0x5b, 0x43, 0xc0, 0xdb, 0x49, 0x70, 0x98, 0x77, 0x40, 0x65, 0x66, 0x42, 0x85, 0xe7, 0x32, 0x2e, 0x10, 0x9c, 0x54, 0x46, 0x8f, 0x07, 0x94, 0x41, 0xae, 0xba, 0x8f, 0x57, 0x96, 0xc6, 0x5d, 0x53, 0xb3, 0x77, 0x70, 0xea, 0xbb, 0x3e, 0xbf, 0x4b, 0xec, 0xef, 0x24, 0xf7, 0x95, 0x2c, 0x03, 0xd3, 0xd7, 0x21, 0x2d, 0x7b, 0xad, 0x73, 0x04, 0xda, 0x2a, 0x72, 0xdf, 0xf8, 0x02, 0x96, 0xb0, 0x12, 0x4c, 0x29, 0xe4, 0xf0, 0x86, 0x41, 0x8a, 0x73, 0xda, 0xf1, 0xb8, 0x6e, 0x9f, 0xc0, 0x2a, 0xb6, 0x23, 0x5a, 0x2d, 0x7d, 0xa8, 0x86, 0xbb, 0xdb, 0xac, 0x58, 0xe8, 0xae, 0x6e, 0xa8, 0x7d, 0xa4, 0xad, 0xc3, 0xe2, 0x96, 0xb3, 0x5f, 0x41, 0x18, 0x92, 0xd5, 0xe8, 0x4e, 0xae, 0x8a, 0xef, 0x01, 0x7b, 0xae, 0x1b, 0xf1, 0x88, 0x2a, 0x03, 0x6d, 0xbd, 0xd3, 0x71, 0x22, 0xe1, 0xe4, 0x0b, 0x31, 0x5e, 0xab, 0x33, 0x84, 0x49, 0x82, 0x2b, 0x61, 0x9d, 0x01, 0x7d, 0x3f, 0xc7, 0x72, 0x9a, 0xd9, 0x68, 0x85, 0xc1, 0x82, 0x56, 0x46, 0x22, 0xb8, 0xe4, 0x4b, 0x44, 0xfb, 0x63, 0x32, 0xa4, 0xe0, 0xe8, 0x4b, 0x9f, 0x61, 0x50, 0x91, 0x91, 0x77, 0x82, 0xdf, 0x3f, 0xeb, 0xf4, 0x60, 0x72, 0x68, 0x71, 0x48, 0xe5, 0xd6, 0x19, 0xc1, 0x61, 0xe3, 0xa9, 0x28, 0x27, 0xe2, 0xfc, 0x7a, 0x8e, 0xd9, 0xd2, 0x09, 0xed, 0xd5, 0xd1, 0x74, 0xbb, 0x81, 0xc9, 0xd5, 0xf5, 0xf7, 0x3c, 0x3c, 0xc0, 0xd6, 0x1e, 0x5d, 0x50, 0x95, 0xd9, 0x85, 0x08, 0x17, 0x94, 0xd3, 0xe3, 0x7f, 0xb5, 0xa4, 0x12, 0x45, 0xa4, 0x4f, 0xe7, 0x8a, 0xd2, 0x13, 0xf1, 0xa8, 0xfb, 0x4d, 0x69, 0x0e, 0xa8, 0xee, 0xcc, 0x4b, 0xf7, 0x2d, 0xca, 0x68, 0x9e, 0x79, 0x5f, 0x7b, 0x2e, 0xb2, 0x40, 0x79, 0x95, 0x98, 0x78, 0x4c, 0xe7, 0x84, 0x53, 0x25, 0x5e, 0x56, 0x7b, 0x14, 0x9f, 0xae, 0x61, 0xd6, 0x3e, 0x5f, 0xde, 0xee, 0x85, 0x20, 0x1b, 0xf7, 0x71, 0x85, 0xae, 0x38, 0xfe, 0x2e, 0x05, 0x79, 0xa4, 0x3f, 0x08, 0x15, 0x22, 0x0f, 0xfa, 0x51, 0x7a, 0x25, 0xa0, 0xec, 0x3d, 0x60, 0xa6, 0xf7, 0x08, 0x75, 0x3e, 0xe7, 0x4f, 0x9f, 0x0a, 0xe9, 0x59, 0x91, 0x3c, 0x75, 0x8c, 0xb0, 0xfc, 0x26, 0xeb, 0x7f, 0x0a, 0xc9, 0xdd, 0x5a, 0xa4, 0xb4, 0x30, 0x68, 0xaa, 0x59, 0x5d, 0xcb, 0x00, 0x1a, 0x0e, 0x19, 0x34, 0x5f, 0xdd, 0x10, 0x60, 0xe6, 0x5f, 0x85, 0x52, 0x5b, 0x61, 0x9e, 0xeb, 0x29, 0x71, 0x41, 0xc5, 0x8f, 0xa1, 0xcc, 0x18, 0xf6, 0x87, 0x07, 0xdf, 0x82, 0x88, 0x57, 0x36, 0xe7, 0x57, 0x34, 0x07, 0x7e, 0xb8, 0xdc, 0xe5, 0x98, 0x8a, 0x49, 0x38, 0x12, 0x04, 0x61, 0x9b, 0x29, 0x3f, 0x6e, 0x82, 0x90, 0xf4, 0xcd, 0x20, 0xc0, 0x88, 0xea, 0x88, 0x90, 0x45, 0x6c, 0x12, 0x05, 0xeb, 0xac, 0x00, 0x6b, 0x67, 0x6c, 0x61, 0xa4, 0xe2, 0xc6, 0x36, 0xc1, 0xfd, 0x62, 0xd4, 0xcf, 0x5b, 0xec, 0x89, 0xf3, 0x61, 0xc5, 0x82, 0xba, 0x39, 0xf9, 0xec, 0xaa, 0x1d, 0x72, 0x5a, 0x1d, 0xd2, 0x6b, 0x67, 0x4f, 0x72, 0x27, 0x9c, 0xb5, 0x6f, 0xe2, 0x94, 0x90, 0xd5, 0x08, 0x5d, 0xc3, 0xcf, 0xa5, 0x22, 0xe1, 0x6d, 0x1c, 0x07, 0x8b, 0xa4, 0x1d, 0x55, 0xf9, 0x97, 0xd1, 0xd7, 0xd6, 0x14, 0x57, 0x84, 0x51, 0x62, 0x74, 0x5d, 0x71, 0x3a, 0x86, 0x99, 0xa8, 0x13, 0xba, 0x00, 0xac, 0xa3, 0x7f, 0x95, 0x82, 0xa2, 0x3b, 0x77, 0xdb, 0xd1, 0x3c, 0x09, 0xa4, 0x3b, 0xf1, 0x51, 0xd9, 0xba, 0x5a, 0x9e, 0x9a, 0xbe, 0xbd, 0x6e, 0x80, 0x4a, 0x9b, 0x8e, 0x31, 0x3f, 0xe2, 0x83, 0x32, 0xdd, 0x64, 0x29, 0xfd, 0x87, 0x88, 0x9a, 0x54, 0xc6, 0x3f, 0x51, 0xd4, 0x91, 0x3a, 0x90, 0xcd, 0xcc, 0x5b, 0xfe, 0x51, 0x0e, 0x69, 0x95, 0x8b, 0xa7, 0x07, 0xbb, 0x52, 0xe2, 0xe7, 0xaf, 0xfe, 0x87, 0x3b, 0x27, 0x7b, 0xa4, 0x6c, 0x38, 0x9c, 0x8d, 0x0f, 0x75, 0xb1, 0x22, 0x15, 0x5b, 0x5b, 0x50, 0x41, 0xed, 0x9f, 0xdb, 0xe0, 0x9b, 0x3a, 0x5a, 0xb4, 0x68, 0x34, 0x83, 0x31, 0x4c, 0xb8, 0xa8, 0xec, 0xd7, 0x23, 0x82, 0x50, 0x18, 0x5b, 0x2e, 0x92, 0xbd, 0x62, 0x75, 0xe8, 0x7b, 0x2b, 0x50, 0xf6, 0xb1, 0xac, 0xab, 0x89, 0x48, 0x34, 0x6a, 0x88, 0xdd, 0xff, 0xaa, 0x28, 0x22, 0x08, 0x49, 0x5e, 0x81, 0x1e, 0xa8, 0x9a, 0x03, 0x3a, 0xaf, 0xb2, 0x71, 0x10, 0x12, 0x1c, 0xb9, 0xe4, 0xd3, 0x61, 0x92, 0x9f, 0x09, 0xce, 0x63, 0x22, 0xdf, 0x6d, 0x61, 0xda, 0xdf, 0x34, 0xf8, 0x94, 0x71, 0x7b, 0x6d, 0x93, 0x9e, 0xb4, 0xc1, 0xe0, 0x1a, 0x56, 0xd8, 0xe2, 0x82, 0x1a, 0xdb, 0x2e, 0xe2, 0x6a, 0xda, 0xa0, 0x7a, 0x16, 0xb6, 0xab, 0xc2, 0x4a, 0x3e, 0xed, 0xab, 0xbd, 0x98, 0x07, 0x28, 0x2a, 0xe3, 0xab, 0xed, 0x04, 0x1a, 0xf7, 0x76, 0x66, 0x3b, 0x01, 0x4c, 0x49, 0xa9, 0xb3, 0x84, 0xf9, 0xcf, 0xd9, 0x88, 0xca, 0x07, 0x78, 0x1a, 0x06, 0xba, 0x61, 0x95, 0x2b, 0xc8, 0x07, 0x76, 0x53, 0x2a, 0x8e, 0x1c, 0xf4, 0xd6, 0x24, 0xcc, 0xc9, 0xe2, 0x94, 0xf8, 0x10, 0xed, 0x18, 0xc1, 0xf6, 0xbb, 0x6f, 0xba, 0x50, 0x1f, 0x30, 0xef, 0x8b, 0x1e, 0x5e, 0x26, 0xe6, 0x51, 0x3c, 0x64, 0xde, 0x8b, 0x63, 0xb3, 0xea, 0xbc, 0x11, 0x23, 0x69, 0x15, 0xc4, 0x0f, 0xd9, 0x6d, 0x08, 0xa1, 0x49, 0xe4, 0x8d, 0x98, 0x11, 0xc6, 0x7c, 0x49, 0xc0, 0xb2, 0x0b, 0xe4, 0x56, 0xfb, 0x50, 0xf9, 0xb4, 0x4e, 0x52, 0x3b, 0x50, 0x95, 0x66, 0x83, 0x2d, 0x1c, 0xb9, 0x18, 0x0b, 0xf2, 0x29, 0x2d, 0xdb, 0x93, 0x59, 0xab, 0x75, 0xc3, 0x04, 0x31, 0x8d, 0xbd, 0x91, 0x59, 0xe3, 0x8d, 0xe8, 0x3e, 0xbb, 0xbb, 0x85, 0x3b, 0x8d, 0x29, 0xca, 0xf5, 0xfd, 0x3e, 0x9a, 0x9b, 0x0d, 0x44, 0x23, 0x6c, 0x92, 0x0f, 0xfb, 0x7a, 0xe5, 0xe0, 0x6f, 0xae, 0xda, 0x89, 0x18, 0x0d, 0xf6, 0xd1, 0xaf, 0x39, 0xdc, 0x19, 0x21, 0x3b, 0x09, 0x40, 0xe6, 0x7f, 0xc1, 0xc5, 0x8f, 0x20, 0x49, 0x2b, 0x9f, 0x67, 0x57, 0xa2, 0x9c, 0x8e, 0xc7, 0xe3, 0x66, 0xc9, 0x8f, 0x5c, 0xc7, 0x87, 0xf5, 0x8d, 0x4a, 0xf4, 0x00, 0xb2, 0x51, 0xc3, 0x2c, 0xa2, 0x62, 0x2c, 0x61, 0xf7, 0xc2, 0x30, 0x26, 0x6f, 0x45, 0x24, 0x13, 0x92, 0x64, 0x6d, 0x84, 0x95, 0x90, 0x89, 0x95, 0x7f, 0xc6, 0x4f, 0x4a, 0x8a, 0x64, 0x77, 0x0d, 0xcc, 0x3b, 0x5c, 0x5e, 0x16, 0xe5, 0x01, 0xc6, 0x1d, 0x58, 0x52, 0x0c, 0xd7, 0xbc, 0xad, 0xac, 0x28, 0x7a, 0xa1, 0x85, 0xbe, 0x96, 0xf6, 0xd2, 0x3a, 0x3e, 0xed, 0x5b, 0x90, 0xa3, 0xc8, 0xed, 0xb0, 0x07, 0x8d, 0x07, 0x66, 0x17, 0x08, 0xd6, 0x7e, 0x7c, 0x0f, 0x63, 0x2d, 0xad, 0x0a, 0x0c, 0xac, 0x07, 0xb2, 0x31, 0x26, 0x1f, 0x18, 0x2f, 0xd4, 0x57, 0xe9, 0x92, 0x67, 0xaf, 0xf1, 0x86, 0xa6, 0xde, 0xdf, 0x8f, 0x58, 0xa2, 0x48, 0x7a, 0x64, 0x54, 0xee, 0x94, 0x37, 0xbf, 0x41, 0x19, 0x66, 0x32, 0x26, 0xef, 0x94, 0xd4, 0xf8, 0x94, 0x97, 0x38, 0xcc, 0x56, 0xd6, 0x31, 0xfa, 0xc2, 0xf5, 0xe8, 0xd9, 0x5e, 0xb5, 0x2b, 0xc9, 0x9b, 0x15, 0x08, 0x77, 0x05, 0xbe, 0x9b, 0x5c, 0xbd, 0x9d, 0x24, 0x87, 0x29, 0xd2, 0x5c, 0x9d, 0xea, 0xc9, 0x0a, 0x1e, 0x0e, 0xa6, 0xd1, 0xe9, 0x87, 0xe7, 0x4c, 0x03, 0xdc, 0x44, 0x5d, 0x94, 0x1f, 0xda, 0xc1, 0x32, 0x1f, 0x89, 0xe8, 0x62, 0xde, 0x9b, 0x04, 0x5c, 0x46, 0xa6, 0x61, 0x0f, 0x17, 0xb3, 0xf4, 0x65, 0x24, 0x9f, 0x36, 0xc8, 0xbf, 0xc2, 0x33, 0xe5, 0x72, 0xcf, 0xdd, 0xb0, 0xf0, 0xfb, 0xa7, 0xa8, 0x4a, 0x62, 0x4f, 0x5c, 0x66, 0xa6, 0xfb, 0x2e, 0xae, 0xd9, 0x88, 0x57, 0x05, 0x9d, 0x1f, 0x2b, 0xff, 0x89, 0x09, 0x9e, 0x51, 0xcf, 0xc4, 0x08, 0x86, 0x1c, 0x56, 0x25, 0xf4, 0xc0, 0xe1, 0x60, 0xef, 0x0f, 0x78, 0x51, 0x3c, 0x07, 0x31, 0x84, 0xc8, 0x33, 0x7b, 0x7c, 0x9a, 0xce, 0xb2, 0xf7, 0x07, 0x2c, 0xf1, 0x74, 0x25, 0x56, 0x28, 0xf3, 0x82, 0xf5, 0x6e, 0xfc, 0x15, 0x71, 0x98, 0xe2, 0x74, 0x59, 0x0a, 0x49, 0x48, 0x06, 0xcd, 0xe6, 0xfe, 0x7b, 0xe2, 0x86, 0xc0, 0x90, 0xd6, 0x52, 0xa4, 0x50, 0x97, 0x51, 0x23, 0x9f, 0x86, 0x2e, 0xcc, 0x20, 0xcd, 0x3c, 0x39, 0x55, 0xf3, 0xb7, 0x43, 0x08, 0xae, 0x4d, 0x72, 0xea, 0xf8, 0xdc, 0xb7, 0x7b, 0x64, 0x7e, 0x5e, 0x29, 0xb3, 0xc3, 0x3e, 0xbc, 0xa2, 0x3d, 0x33, 0xf1 ],
-];
-
-const sha1_long_mds = const [
-'d8fd6a91ef3b6ced05b98358a99107c1fac8c807',
-'4a75a406f4de5f9e1132069d66717fc424376388',
-'a135e32581bb06289b8c83f040e9421ec79bbe01',
-'b22b87ea30f4050913f8f0241fc2ae2c319f52e7',
-'d742931bc51d4d44ff938783be73dc7beccc980b',
-'20a3a677c117c61ed3bb19e2ac77f69987896d0b',
-'dd4374e29b17e2ec533813feddc5253765cd37ac',
-'fdccb6e47645928fbbd51ccddc6cef48d6afc011',
-'e50a54470f59fb9b654bffcb4c353e58b683ada5',
-'9b3ed390fbb328a1641fca93691763000523569d',
-'09bf403d8a9d2334f28fab704d9cab87da43731a',
-'7f32d7486bde22ed00eeeaae073858144dc3ee37',
-'37b7277fc606556160f9bc28b06fd55f4424d9cc',
-'dbc7ace190c9dc985d2c3fbed5fe90328352b3b0',
-'796135c20bfd2dfc7a1ff2087aba7f93b2814ef4',
-'baa2e9bef9dd836d3d37013c296ec31919fe7840',
-'3d40608ab9bce3f372bb29a62ff3fcc68e48385d',
-'8bce8c69fd802389c805d2945c7499c9dd279ea2',
-'064c6fccb707f0f3929084eeb0298e800d542370',
-'bf2d47d4435ace28d3c336acdd6313aa8f9c41fd',
-'efe28211673e7bb68657243df023d4b70c0e5325',
-'afc01657b55fffd0c739cf017294a8379f60c2f9',
-'8a148c03dfc846b484ec15809d9cbfaa4b74a060',
-'8ff89c859a6ffa3d3874d3d1be4125f9de62c9bc',
-'c0af54b14db7ef0c68b1300b7350fd2a82fe96e9',
-'4c66ccc9d6a9f1d988bb7ae0fb41be3a1e1a648d',
-'0f5176527280b8e3fa69a6c14ce1f759d6e9c67c',
-'eef7dfc20c57895d31ad15aaab13cf710aa0d739',
-'93239fa543e8bd68b59a4bd55a7be068f18c5ea1',
-'2393e09e218261acb91ff9fb4783253e9b44b9f6',
-'7d90c7a14fc71e228a4f4fd191d3b7ea98c6509e',
-'07f84b3990bbeb9fc280681dc25d96bf8626992c',
-'bfa71db73fb3d8103fd7f2965eb89f2394f0b751',
-'92588ff54cd3903ceab98afd39f1854835f54492',
-'d947e8fd7fb5d805d70c1a21bd6eb5368f312885',
-'66ba577de1222642fd9e3b2a6e20741905356c2c',
-'b1542439b3590f2e43fa30baaee0ed11a9c46bab',
-'18de122bf588dc3d1eca78661673fa8d8acf254e',
-'e4ae28261f24a10355fd1aa1c2554592a331ceda',
-'290d124e77abc911e4be375232ff1798c4b48cb0',
-'fc8456f92f8a8bb38a3248e988a3e12271061510',
-'94a5d77bc308382a8aa317be7bad0a870f006c67',
-'515d2a8972936e6b45b9b457d9eab8e2f62cbc3d',
-'7fb74b4dde68f8c5e0d9b27878040123a9ed5fde',
-'534702c37c6fa8e1bde879ce4d87aa10c4cc8c8a',
-'cdd84a87e1457601d899b2abbe2e0974784491b7',
-'b51232c68cd82ce9ffb4bc1fea0ea9f71354314e',
-'adf2ebb0c337c89334fe8580b53dae70b25d00a7',
-'e2eb69f7d6fab720a3f038ac773b3274b6d113e9',
-'9c5bf7e24e8764745642e23e7cdc5fd44f91bbf9',
-'7731a20dfb7725e61d7aacebb41afbb4a05ffbfb',
-'fa47305e71a8e1e536486a806cbb839d813caf9f',
-'a94d7bf363f32a5a5b6e9f71b2edaa3f2ae31a61',
-'ed76c5bf4ada6a2092e6dbb40ff40909b8ec06cb',
-'6a5fc2f4a741f17a2e62b198d65e4a5ff6a1e748',
-'280ebf4f434e4134fce0d3f7581c2434bab1efbb',
-'af75e59940783e84761dbe59727ed7908a8709b5',
-'06f0df10ed7bc4b446f9271fdbe6ac81e36bc142',
-'e900914d8a38d14b307d1eb8e569a509421d811f',
-'581562f2a9f3097f760488cbe87f823d0fa7524c',
-'844e1f50dd792b283902e66bc1086a273c05d511',
-'61ca85608418090c78ebe8614bb2b80113fe130e',
-'a1f35ddd6a6275fd21bb8c2ebf290a06a2563df7',
-'b09d1a963ba9bf92907707b7d48b96e0d37dbd79',
-];
diff --git a/pkg/crypto/test/sha1_short_test_vectors.dart b/pkg/crypto/test/sha1_short_test_vectors.dart
deleted file mode 100644
index f17e147..0000000
--- a/pkg/crypto/test/sha1_short_test_vectors.dart
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of sha1_test;
-
-// Standard test vectors from:
-// http://csrc.nist.gov/groups/STM/cavp/documents/shs/shabytetestvectors.zip
-
-const sha1_short_inputs = const [
-const [ ],
-const [ 0x36 ],
-const [ 0x19, 0x5a ],
-const [ 0xdf, 0x4b, 0xd2 ],
-const [ 0x54, 0x9e, 0x95, 0x9e ],
-const [ 0xf7, 0xfb, 0x1b, 0xe2, 0x05 ],
-const [ 0xc0, 0xe5, 0xab, 0xea, 0xea, 0x63 ],
-const [ 0x63, 0xbf, 0xc1, 0xed, 0x7f, 0x78, 0xab ],
-const [ 0x7e, 0x3d, 0x7b, 0x3e, 0xad, 0xa9, 0x88, 0x66 ],
-const [ 0x9e, 0x61, 0xe5, 0x5d, 0x9e, 0xd3, 0x7b, 0x1c, 0x20 ],
-const [ 0x97, 0x77, 0xcf, 0x90, 0xdd, 0x7c, 0x7e, 0x86, 0x35, 0x06 ],
-const [ 0x4e, 0xb0, 0x8c, 0x9e, 0x68, 0x3c, 0x94, 0xbe, 0xa0, 0x0d, 0xfa ],
-const [ 0x09, 0x38, 0xf2, 0xe2, 0xeb, 0xb6, 0x4f, 0x8a, 0xf8, 0xbb, 0xfc, 0x91 ],
-const [ 0x74, 0xc9, 0x99, 0x6d, 0x14, 0xe8, 0x7d, 0x3e, 0x6c, 0xbe, 0xa7, 0x02, 0x9d ],
-const [ 0x51, 0xdc, 0xa5, 0xc0, 0xf8, 0xe5, 0xd4, 0x95, 0x96, 0xf3, 0x2d, 0x3e, 0xb8, 0x74 ],
-const [ 0x3a, 0x36, 0xea, 0x49, 0x68, 0x48, 0x20, 0xa2, 0xad, 0xc7, 0xfc, 0x41, 0x75, 0xba, 0x78 ],
-const [ 0x35, 0x52, 0x69, 0x4c, 0xdf, 0x66, 0x3f, 0xd9, 0x4b, 0x22, 0x47, 0x47, 0xac, 0x40, 0x6a, 0xaf ],
-const [ 0xf2, 0x16, 0xa1, 0xcb, 0xde, 0x24, 0x46, 0xb1, 0xed, 0xf4, 0x1e, 0x93, 0x48, 0x1d, 0x33, 0xe2, 0xed ],
-const [ 0xa3, 0xcf, 0x71, 0x4b, 0xf1, 0x12, 0x64, 0x7e, 0x72, 0x7e, 0x8c, 0xfd, 0x46, 0x49, 0x9a, 0xcd, 0x35, 0xa6 ],
-const [ 0x14, 0x8d, 0xe6, 0x40, 0xf3, 0xc1, 0x15, 0x91, 0xa6, 0xf8, 0xc5, 0xc4, 0x86, 0x32, 0xc5, 0xfb, 0x79, 0xd3, 0xb7 ],
-const [ 0x63, 0xa3, 0xcc, 0x83, 0xfd, 0x1e, 0xc1, 0xb6, 0x68, 0x0e, 0x99, 0x74, 0xa0, 0x51, 0x4e, 0x1a, 0x9e, 0xce, 0xbb, 0x6a ],
-const [ 0x87, 0x5a, 0x90, 0x90, 0x9a, 0x8a, 0xfc, 0x92, 0xfb, 0x70, 0x70, 0x04, 0x7e, 0x9d, 0x08, 0x1e, 0xc9, 0x2f, 0x3d, 0x08, 0xb8 ],
-const [ 0x44, 0x4b, 0x25, 0xf9, 0xc9, 0x25, 0x9d, 0xc2, 0x17, 0x77, 0x2c, 0xc4, 0x47, 0x8c, 0x44, 0xb6, 0xfe, 0xff, 0x62, 0x35, 0x36, 0x73 ],
-const [ 0x48, 0x73, 0x51, 0xc8, 0xa5, 0xf4, 0x40, 0xe4, 0xd0, 0x33, 0x86, 0x48, 0x3d, 0x5f, 0xe7, 0xbb, 0x66, 0x9d, 0x41, 0xad, 0xcb, 0xfd, 0xb7 ],
-const [ 0x46, 0xb0, 0x61, 0xef, 0x13, 0x2b, 0x87, 0xf6, 0xd3, 0xb0, 0xee, 0x24, 0x62, 0xf6, 0x7d, 0x91, 0x09, 0x77, 0xda, 0x20, 0xae, 0xd1, 0x37, 0x05 ],
-const [ 0x38, 0x42, 0xb6, 0x13, 0x7b, 0xb9, 0xd2, 0x7f, 0x3c, 0xa5, 0xba, 0xfe, 0x5b, 0xbb, 0x62, 0x85, 0x83, 0x44, 0xfe, 0x4b, 0xa5, 0xc4, 0x15, 0x89, 0xa5 ],
-const [ 0x44, 0xd9, 0x1d, 0x3d, 0x46, 0x5a, 0x41, 0x11, 0x46, 0x2b, 0xa0, 0xc7, 0xec, 0x22, 0x3d, 0xa6, 0x73, 0x5f, 0x4f, 0x52, 0x00, 0x45, 0x3c, 0xf1, 0x32, 0xc3 ],
-const [ 0xcc, 0xe7, 0x3f, 0x2e, 0xab, 0xcb, 0x52, 0xf7, 0x85, 0xd5, 0xa6, 0xdf, 0x63, 0xc0, 0xa1, 0x05, 0xf3, 0x4a, 0x91, 0xca, 0x23, 0x7f, 0xe5, 0x34, 0xee, 0x39, 0x9d ],
-const [ 0x66, 0x4e, 0x6e, 0x79, 0x46, 0x83, 0x92, 0x03, 0x03, 0x7a, 0x65, 0xa1, 0x21, 0x74, 0xb2, 0x44, 0xde, 0x8c, 0xbc, 0x6e, 0xc3, 0xf5, 0x78, 0x96, 0x7a, 0x84, 0xf9, 0xce ],
-const [ 0x95, 0x97, 0xf7, 0x14, 0xb2, 0xe4, 0x5e, 0x33, 0x99, 0xa7, 0xf0, 0x2a, 0xec, 0x44, 0x92, 0x1b, 0xd7, 0x8b, 0xe0, 0xfe, 0xfe, 0xe0, 0xc5, 0xe9, 0xb4, 0x99, 0x48, 0x8f, 0x6e ],
-const [ 0x75, 0xc5, 0xad, 0x1f, 0x3c, 0xbd, 0x22, 0xe8, 0xa9, 0x5f, 0xc3, 0xb0, 0x89, 0x52, 0x67, 0x88, 0xfb, 0x4e, 0xbc, 0xee, 0xd3, 0xe7, 0xd4, 0x44, 0x3d, 0xa6, 0xe0, 0x81, 0xa3, 0x5e ],
-const [ 0xdd, 0x24, 0x5b, 0xff, 0xe6, 0xa6, 0x38, 0x80, 0x66, 0x67, 0x76, 0x83, 0x60, 0xa9, 0x5d, 0x05, 0x74, 0xe1, 0xa0, 0xbd, 0x0d, 0x18, 0x32, 0x9f, 0xdb, 0x91, 0x5c, 0xa4, 0x84, 0xac, 0x0d ],
-const [ 0x03, 0x21, 0x79, 0x4b, 0x73, 0x94, 0x18, 0xc2, 0x4e, 0x7c, 0x2e, 0x56, 0x52, 0x74, 0x79, 0x1c, 0x4b, 0xe7, 0x49, 0x75, 0x2a, 0xd2, 0x34, 0xed, 0x56, 0xcb, 0x0a, 0x63, 0x47, 0x43, 0x0c, 0x6b ],
-const [ 0x4c, 0x3d, 0xcf, 0x95, 0xc2, 0xf0, 0xb5, 0x25, 0x8c, 0x65, 0x1f, 0xcd, 0x1d, 0x51, 0xbd, 0x10, 0x42, 0x5d, 0x62, 0x03, 0x06, 0x7d, 0x07, 0x48, 0xd3, 0x7d, 0x13, 0x40, 0xd9, 0xdd, 0xda, 0x7d, 0xb3 ],
-const [ 0xb8, 0xd1, 0x25, 0x82, 0xd2, 0x5b, 0x45, 0x29, 0x0a, 0x6e, 0x1b, 0xb9, 0x5d, 0xa4, 0x29, 0xbe, 0xfc, 0xfd, 0xbf, 0x5b, 0x4d, 0xd4, 0x1c, 0xdf, 0x33, 0x11, 0xd6, 0x98, 0x8f, 0xa1, 0x7c, 0xec, 0x07, 0x23 ],
-const [ 0x6f, 0xda, 0x97, 0x52, 0x7a, 0x66, 0x25, 0x52, 0xbe, 0x15, 0xef, 0xae, 0xba, 0x32, 0xa3, 0xae, 0xa4, 0xed, 0x44, 0x9a, 0xbb, 0x5c, 0x1e, 0xd8, 0xd9, 0xbf, 0xff, 0x54, 0x47, 0x08, 0xa4, 0x25, 0xd6, 0x9b, 0x72 ],
-const [ 0x09, 0xfa, 0x27, 0x92, 0xac, 0xbb, 0x24, 0x17, 0xe8, 0xed, 0x26, 0x90, 0x41, 0xcc, 0x03, 0xc7, 0x70, 0x06, 0x46, 0x6e, 0x6e, 0x7a, 0xe0, 0x02, 0xcf, 0x3f, 0x1a, 0xf5, 0x51, 0xe8, 0xce, 0x0b, 0xb5, 0x06, 0xd7, 0x05 ],
-const [ 0x5e, 0xfa, 0x29, 0x87, 0xda, 0x0b, 0xaf, 0x0a, 0x54, 0xd8, 0xd7, 0x28, 0x79, 0x2b, 0xcf, 0xa7, 0x07, 0xa1, 0x57, 0x98, 0xdc, 0x66, 0x74, 0x37, 0x54, 0x40, 0x69, 0x14, 0xd1, 0xcf, 0xe3, 0x70, 0x9b, 0x13, 0x74, 0xea, 0xeb ],
-const [ 0x28, 0x36, 0xde, 0x99, 0xc0, 0xf6, 0x41, 0xcd, 0x55, 0xe8, 0x9f, 0x5a, 0xf7, 0x66, 0x38, 0x94, 0x7b, 0x82, 0x27, 0x37, 0x7e, 0xf8, 0x8b, 0xfb, 0xa6, 0x62, 0xe5, 0x68, 0x2b, 0xab, 0xc1, 0xec, 0x96, 0xc6, 0x99, 0x2b, 0xc9, 0xa0 ],
-const [ 0x42, 0x14, 0x3a, 0x2b, 0x9e, 0x1d, 0x0b, 0x35, 0x4d, 0xf3, 0x26, 0x4d, 0x08, 0xf7, 0xb6, 0x02, 0xf5, 0x4a, 0xad, 0x92, 0x2a, 0x3d, 0x63, 0x00, 0x6d, 0x09, 0x7f, 0x68, 0x3d, 0xc1, 0x1b, 0x90, 0x17, 0x84, 0x23, 0xbf, 0xf2, 0xf7, 0xfe ],
-const [ 0xeb, 0x60, 0xc2, 0x8a, 0xd8, 0xae, 0xda, 0x80, 0x7d, 0x69, 0xeb, 0xc8, 0x75, 0x52, 0x02, 0x4a, 0xd8, 0xac, 0xa6, 0x82, 0x04, 0xf1, 0xbc, 0xd2, 0x9d, 0xc5, 0xa8, 0x1d, 0xd2, 0x28, 0xb5, 0x91, 0xe2, 0xef, 0xb7, 0xc4, 0xdf, 0x75, 0xef, 0x03 ],
-const [ 0x7d, 0xe4, 0xba, 0x85, 0xec, 0x54, 0x74, 0x7c, 0xdc, 0x42, 0xb1, 0xf2, 0x35, 0x46, 0xb7, 0xe4, 0x90, 0xe3, 0x12, 0x80, 0xf0, 0x66, 0xe5, 0x2f, 0xac, 0x11, 0x7f, 0xd3, 0xb0, 0x79, 0x2e, 0x4d, 0xe6, 0x2d, 0x58, 0x43, 0xee, 0x98, 0xc7, 0x20, 0x15 ],
-const [ 0xe7, 0x06, 0x53, 0x63, 0x7b, 0xc5, 0xe3, 0x88, 0xcc, 0xd8, 0xdc, 0x44, 0xe5, 0xea, 0xce, 0x36, 0xf7, 0x39, 0x8f, 0x2b, 0xac, 0x99, 0x30, 0x42, 0xb9, 0xbc, 0x2f, 0x4f, 0xb3, 0xb0, 0xee, 0x7e, 0x23, 0xa9, 0x64, 0x39, 0xdc, 0x01, 0x13, 0x4b, 0x8c, 0x7d ],
-const [ 0xdd, 0x37, 0xbc, 0x9f, 0x0b, 0x3a, 0x47, 0x88, 0xf9, 0xb5, 0x49, 0x66, 0xf2, 0x52, 0x17, 0x4c, 0x8c, 0xe4, 0x87, 0xcb, 0xe5, 0x9c, 0x53, 0xc2, 0x2b, 0x81, 0xbf, 0x77, 0x62, 0x1a, 0x7c, 0xe7, 0x61, 0x6d, 0xcb, 0x5b, 0x1e, 0x2e, 0xe6, 0x3c, 0x2c, 0x30, 0x9b ],
-const [ 0x5f, 0x48, 0x5c, 0x63, 0x7a, 0xe3, 0x0b, 0x1e, 0x30, 0x49, 0x7f, 0x0f, 0xb7, 0xec, 0x36, 0x4e, 0x13, 0xc9, 0x06, 0xe2, 0x81, 0x3d, 0xaa, 0x34, 0x16, 0x1b, 0x7a, 0xc4, 0xa4, 0xfd, 0x7a, 0x1b, 0xdd, 0xd7, 0x96, 0x01, 0xbb, 0xd2, 0x2c, 0xef, 0x1f, 0x57, 0xcb, 0xc7 ],
-const [ 0xf6, 0xc2, 0x37, 0xfb, 0x3c, 0xfe, 0x95, 0xec, 0x84, 0x14, 0xcc, 0x16, 0xd2, 0x03, 0xb4, 0x87, 0x4e, 0x64, 0x4c, 0xc9, 0xa5, 0x43, 0x46, 0x5c, 0xad, 0x2d, 0xc5, 0x63, 0x48, 0x8a, 0x65, 0x9e, 0x8a, 0x2e, 0x7c, 0x98, 0x1e, 0x2a, 0x9f, 0x22, 0xe5, 0xe8, 0x68, 0xff, 0xe1 ],
-const [ 0xda, 0x7a, 0xb3, 0x29, 0x15, 0x53, 0xc6, 0x59, 0x87, 0x3c, 0x95, 0x91, 0x37, 0x68, 0x95, 0x3c, 0x6e, 0x52, 0x6d, 0x3a, 0x26, 0x59, 0x08, 0x98, 0xc0, 0xad, 0xe8, 0x9f, 0xf5, 0x6f, 0xbd, 0x11, 0x0f, 0x14, 0x36, 0xaf, 0x59, 0x0b, 0x17, 0xfe, 0xd4, 0x9f, 0x8c, 0x4b, 0x2b, 0x1e ],
-const [ 0x8c, 0xfa, 0x5f, 0xd5, 0x6e, 0xe2, 0x39, 0xca, 0x47, 0x73, 0x75, 0x91, 0xcb, 0xa1, 0x03, 0xe4, 0x1a, 0x18, 0xac, 0xf8, 0xe8, 0xd2, 0x57, 0xb0, 0xdb, 0xe8, 0x85, 0x11, 0x34, 0xa8, 0x1f, 0xf6, 0xb2, 0xe9, 0x71, 0x04, 0xb3, 0x9b, 0x76, 0xe1, 0x9d, 0xa2, 0x56, 0xa1, 0x7c, 0xe5, 0x2d ],
-const [ 0x57, 0xe8, 0x96, 0x59, 0xd8, 0x78, 0xf3, 0x60, 0xaf, 0x6d, 0xe4, 0x5a, 0x9a, 0x5e, 0x37, 0x2e, 0xf4, 0x0c, 0x38, 0x49, 0x88, 0xe8, 0x26, 0x40, 0xa3, 0xd5, 0xe4, 0xb7, 0x6d, 0x2e, 0xf1, 0x81, 0x78, 0x0b, 0x9a, 0x09, 0x9a, 0xc0, 0x6e, 0xf0, 0xf8, 0xa7, 0xf3, 0xf7, 0x64, 0x20, 0x97, 0x20 ],
-const [ 0xb9, 0x1e, 0x64, 0x23, 0x5d, 0xbd, 0x23, 0x4e, 0xea, 0x2a, 0xe1, 0x4a, 0x92, 0xa1, 0x73, 0xeb, 0xe8, 0x35, 0x34, 0x72, 0x39, 0xcf, 0xf8, 0xb0, 0x20, 0x74, 0x41, 0x6f, 0x55, 0xc6, 0xb6, 0x0d, 0xc6, 0xce, 0xd0, 0x6a, 0xe9, 0xf8, 0xd7, 0x05, 0x50, 0x5f, 0x0d, 0x61, 0x7e, 0x4b, 0x29, 0xae, 0xf9 ],
-const [ 0xe4, 0x2a, 0x67, 0x36, 0x2a, 0x58, 0x1e, 0x8c, 0xf3, 0xd8, 0x47, 0x50, 0x22, 0x15, 0x75, 0x5d, 0x7a, 0xd4, 0x25, 0xca, 0x03, 0x0c, 0x43, 0x60, 0xb0, 0xf7, 0xef, 0x51, 0x3e, 0x69, 0x80, 0x26, 0x5f, 0x61, 0xc9, 0xfa, 0x18, 0xdd, 0x9c, 0xe6, 0x68, 0xf3, 0x8d, 0xbc, 0x2a, 0x1e, 0xf8, 0xf8, 0x3c, 0xd6 ],
-const [ 0x63, 0x4d, 0xb9, 0x2c, 0x22, 0x01, 0x0e, 0x1c, 0xbf, 0x1e, 0x16, 0x23, 0x92, 0x31, 0x80, 0x40, 0x6c, 0x51, 0x52, 0x72, 0x20, 0x9a, 0x8a, 0xcc, 0x42, 0xde, 0x05, 0xcc, 0x2e, 0x96, 0xa1, 0xe9, 0x4c, 0x1f, 0x9f, 0x6b, 0x93, 0x23, 0x4b, 0x7f, 0x4c, 0x55, 0xde, 0x8b, 0x19, 0x61, 0xa3, 0xbf, 0x35, 0x22, 0x59 ],
-const [ 0xcc, 0x6c, 0xa3, 0xa8, 0xcb, 0x39, 0x1c, 0xd8, 0xa5, 0xaf, 0xf1, 0xfa, 0xa7, 0xb3, 0xff, 0xbd, 0xd2, 0x1a, 0x5a, 0x3c, 0xe6, 0x6c, 0xfa, 0xdd, 0xbf, 0xe8, 0xb1, 0x79, 0xe4, 0xc8, 0x60, 0xbe, 0x5e, 0xc6, 0x6b, 0xd2, 0xc6, 0xde, 0x6a, 0x39, 0xa2, 0x56, 0x22, 0xf9, 0xf2, 0xfc, 0xb3, 0xfc, 0x05, 0xaf, 0x12, 0xb5 ],
-const [ 0x7c, 0x0e, 0x6a, 0x0d, 0x35, 0xf8, 0xac, 0x85, 0x4c, 0x72, 0x45, 0xeb, 0xc7, 0x36, 0x93, 0x73, 0x1b, 0xbb, 0xc3, 0xe6, 0xfa, 0xb6, 0x44, 0x46, 0x6d, 0xe2, 0x7b, 0xb5, 0x22, 0xfc, 0xb9, 0x93, 0x07, 0x12, 0x6a, 0xe7, 0x18, 0xfe, 0x8f, 0x00, 0x74, 0x2e, 0x6e, 0x5c, 0xb7, 0xa6, 0x87, 0xc8, 0x84, 0x47, 0xcb, 0xc9, 0x61 ],
-const [ 0xc5, 0x58, 0x1d, 0x40, 0xb3, 0x31, 0xe2, 0x40, 0x03, 0x90, 0x1b, 0xd6, 0xbf, 0x24, 0x4a, 0xca, 0x9e, 0x96, 0x01, 0xb9, 0xd8, 0x12, 0x52, 0xbb, 0x38, 0x04, 0x86, 0x42, 0x73, 0x1f, 0x11, 0x46, 0xb8, 0xa4, 0xc6, 0x9f, 0x88, 0xe1, 0x48, 0xb2, 0xc8, 0xf8, 0xc1, 0x4f, 0x15, 0xe1, 0xd6, 0xda, 0x57, 0xb2, 0xda, 0xa9, 0x99, 0x1e ],
-const [ 0xec, 0x6b, 0x4a, 0x88, 0x71, 0x3d, 0xf2, 0x7c, 0x0f, 0x2d, 0x02, 0xe7, 0x38, 0xb6, 0x9d, 0xb4, 0x3a, 0xbd, 0xa3, 0x92, 0x13, 0x17, 0x25, 0x9c, 0x86, 0x4c, 0x1c, 0x38, 0x6e, 0x9a, 0x5a, 0x3f, 0x53, 0x3d, 0xc0, 0x5f, 0x3b, 0xee, 0xb2, 0xbe, 0xc2, 0xaa, 0xc8, 0xe0, 0x6d, 0xb4, 0xc6, 0xcb, 0x3c, 0xdd, 0xcf, 0x69, 0x7e, 0x03, 0xd5 ],
-const [ 0x03, 0x21, 0x73, 0x6b, 0xeb, 0xa5, 0x78, 0xe9, 0x0a, 0xbc, 0x1a, 0x90, 0xaa, 0x56, 0x15, 0x7d, 0x87, 0x16, 0x18, 0xf6, 0xde, 0x0d, 0x76, 0x4c, 0xc8, 0xc9, 0x1e, 0x06, 0xc6, 0x8e, 0xcd, 0x3b, 0x9d, 0xe3, 0x82, 0x40, 0x64, 0x50, 0x33, 0x84, 0xdb, 0x67, 0xbe, 0xb7, 0xfe, 0x01, 0x22, 0x32, 0xda, 0xca, 0xef, 0x93, 0xa0, 0x00, 0xfb, 0xa7 ],
-const [ 0xd0, 0xa2, 0x49, 0xa9, 0x7b, 0x5f, 0x14, 0x86, 0x72, 0x1a, 0x50, 0xd4, 0xc4, 0xab, 0x3f, 0x5d, 0x67, 0x4a, 0x0e, 0x29, 0x92, 0x5d, 0x5b, 0xf2, 0x67, 0x8e, 0xf6, 0xd8, 0xd5, 0x21, 0xe4, 0x56, 0xbd, 0x84, 0xaa, 0x75, 0x53, 0x28, 0xc8, 0x3f, 0xc8, 0x90, 0x83, 0x77, 0x26, 0xa8, 0xe7, 0x87, 0x7b, 0x57, 0x0d, 0xba, 0x39, 0x57, 0x9a, 0xab, 0xdd ],
-const [ 0xc3, 0x21, 0x38, 0x53, 0x11, 0x18, 0xf0, 0x8c, 0x7d, 0xcc, 0x29, 0x24, 0x28, 0xad, 0x20, 0xb4, 0x5a, 0xb2, 0x7d, 0x95, 0x17, 0xa1, 0x84, 0x45, 0xf3, 0x8b, 0x8f, 0x0c, 0x27, 0x95, 0xbc, 0xdf, 0xe3, 0xff, 0xe3, 0x84, 0xe6, 0x5e, 0xcb, 0xf7, 0x4d, 0x2c, 0x9d, 0x0d, 0xa8, 0x83, 0x98, 0x57, 0x53, 0x26, 0x07, 0x49, 0x04, 0xc1, 0x70, 0x9b, 0xa0, 0x72 ],
-const [ 0xb0, 0xf4, 0xcf, 0xb9, 0x39, 0xea, 0x78, 0x5e, 0xab, 0xb7, 0xe7, 0xca, 0x7c, 0x47, 0x6c, 0xdd, 0x9b, 0x22, 0x7f, 0x01, 0x5d, 0x90, 0x53, 0x68, 0xba, 0x00, 0xae, 0x96, 0xb9, 0xaa, 0xf7, 0x20, 0x29, 0x74, 0x91, 0xb3, 0x92, 0x12, 0x67, 0x57, 0x6b, 0x72, 0xc8, 0xf5, 0x8d, 0x57, 0x76, 0x17, 0xe8, 0x44, 0xf9, 0xf0, 0x75, 0x9b, 0x39, 0x9c, 0x6b, 0x06, 0x4c ],
-const [ 0xbd, 0x02, 0xe5, 0x1b, 0x0c, 0xf2, 0xc2, 0xb8, 0xd2, 0x04, 0xa0, 0x26, 0xb4, 0x1a, 0x66, 0xfb, 0xfc, 0x2a, 0xc3, 0x7e, 0xe9, 0x41, 0x1f, 0xc4, 0x49, 0xc8, 0xd1, 0x19, 0x4a, 0x07, 0x92, 0xa2, 0x8e, 0xe7, 0x31, 0x40, 0x7d, 0xfc, 0x89, 0xb6, 0xdf, 0xc2, 0xb1, 0x0f, 0xaa, 0x27, 0x72, 0x3a, 0x18, 0x4a, 0xfe, 0xf8, 0xfd, 0x83, 0xde, 0xf8, 0x58, 0xa3, 0x2d, 0x3f ],
-const [ 0xe3, 0x31, 0x46, 0xb8, 0x3e, 0x4b, 0xb6, 0x71, 0x39, 0x22, 0x18, 0xda, 0x9a, 0x77, 0xf8, 0xd9, 0xf5, 0x97, 0x41, 0x47, 0x18, 0x2f, 0xb9, 0x5b, 0xa6, 0x62, 0xcb, 0x66, 0x01, 0x19, 0x89, 0xc1, 0x6d, 0x9a, 0xf1, 0x04, 0x73, 0x5d, 0x6f, 0x79, 0x84, 0x1a, 0xa4, 0xd1, 0xdf, 0x27, 0x66, 0x15, 0xb5, 0x01, 0x08, 0xdf, 0x8a, 0x29, 0xdb, 0xc9, 0xde, 0x31, 0xf4, 0x26, 0x0d ],
-const [ 0x41, 0x1c, 0x13, 0xc7, 0x50, 0x73, 0xc1, 0xe2, 0xd4, 0xb1, 0xec, 0xf1, 0x31, 0x39, 0xba, 0x96, 0x56, 0xcd, 0x35, 0xc1, 0x42, 0x01, 0xf1, 0xc7, 0xc6, 0xf0, 0xee, 0xb5, 0x8d, 0x2d, 0xbf, 0xe3, 0x5b, 0xfd, 0xec, 0xcc, 0x92, 0xc3, 0x96, 0x1c, 0xfa, 0xbb, 0x59, 0x0b, 0xc1, 0xeb, 0x77, 0xea, 0xc1, 0x57, 0x32, 0xfb, 0x02, 0x75, 0x79, 0x86, 0x80, 0xe0, 0xc7, 0x29, 0x2e, 0x50 ],
-const [ 0xf2, 0xc7, 0x6e, 0xf6, 0x17, 0xfa, 0x2b, 0xfc, 0x8a, 0x4d, 0x6b, 0xcb, 0xb1, 0x5f, 0xe8, 0x84, 0x36, 0xfd, 0xc2, 0x16, 0x5d, 0x30, 0x74, 0x62, 0x95, 0x79, 0x07, 0x9d, 0x4d, 0x5b, 0x86, 0xf5, 0x08, 0x1a, 0xb1, 0x77, 0xb4, 0xc3, 0xf5, 0x30, 0x37, 0x6c, 0x9c, 0x92, 0x4c, 0xbd, 0x42, 0x1a, 0x8d, 0xaf, 0x88, 0x30, 0xd0, 0x94, 0x0c, 0x4f, 0xb7, 0x58, 0x98, 0x65, 0x83, 0x06, 0x99 ],
-const [ 0x45, 0x92, 0x7e, 0x32, 0xdd, 0xf8, 0x01, 0xca, 0xf3, 0x5e, 0x18, 0xe7, 0xb5, 0x07, 0x8b, 0x7f, 0x54, 0x35, 0x27, 0x82, 0x12, 0xec, 0x6b, 0xb9, 0x9d, 0xf8, 0x84, 0xf4, 0x9b, 0x32, 0x7c, 0x64, 0x86, 0xfe, 0xae, 0x46, 0xba, 0x18, 0x7d, 0xc1, 0xcc, 0x91, 0x45, 0x12, 0x1e, 0x14, 0x92, 0xe6, 0xb0, 0x6e, 0x90, 0x07, 0x39, 0x4d, 0xc3, 0x3b, 0x77, 0x48, 0xf8, 0x6a, 0xc3, 0x20, 0x7c, 0xfe ],
-];
-
-const sha1_short_mds = const [
-'da39a3ee5e6b4b0d3255bfef95601890afd80709',
-'c1dfd96eea8cc2b62785275bca38ac261256e278',
-'0a1c2d555bbe431ad6288af5a54f93e0449c9232',
-'bf36ed5d74727dfd5d7854ec6b1d49468d8ee8aa',
-'b78bae6d14338ffccfd5d5b5674a275f6ef9c717',
-'60b7d5bb560a1acf6fa45721bd0abb419a841a89',
-'a6d338459780c08363090fd8fc7d28dc80e8e01f',
-'860328d80509500c1783169ebf0ba0c4b94da5e5',
-'24a2c34b976305277ce58c2f42d5092031572520',
-'411ccee1f6e3677df12698411eb09d3ff580af97',
-'05c915b5ed4e4c4afffc202961f3174371e90b5c',
-'af320b42d7785ca6c8dd220463be23a2d2cb5afc',
-'9f4e66b6ceea40dcf4b9166c28f1c88474141da9',
-'e6c4363c0852951991057f40de27ec0890466f01',
-'046a7b396c01379a684a894558779b07d8c7da20',
-'d58a262ee7b6577c07228e71ae9b3e04c8abcda9',
-'a150de927454202d94e656de4c7c0ca691de955d',
-'35a4b39fef560e7ea61246676e1b7e13d587be30',
-'7ce69b1acdce52ea7dbd382531fa1a83df13cae7',
-'b47be2c64124fa9a124a887af9551a74354ca411',
-'8bb8c0d815a9c68a1d2910f39d942603d807fbcc',
-'b486f87fb833ebf0328393128646a6f6e660fcb1',
-'76159368f99dece30aadcfb9b7b41dab33688858',
-'dbc1cb575ce6aeb9dc4ebf0f843ba8aeb1451e89',
-'d7a98289679005eb930ab75efd8f650f991ee952',
-'fda26fa9b4874ab701ed0bb64d134f89b9c4cc50',
-'c2ff7ccde143c8f0601f6974b1903eb8d5741b6e',
-'643c9dc20a929608f6caa9709d843ca6fa7a76f4',
-'509ef787343d5b5a269229b961b96241864a3d74',
-'b61ce538f1a1e6c90432b233d7af5b6524ebfbe3',
-'5b7b94076b2fc20d6adb82479e6b28d07c902b75',
-'6066db99fc358952cf7fb0ec4d89cb0158ed91d7',
-'b89962c94d60f6a332fd60f6f07d4f032a586b76',
-'17bda899c13d35413d2546212bcd8a93ceb0657b',
-'badcdd53fdc144b8bf2cc1e64d10f676eebe66ed',
-'01b4646180f1f6d2e06bbe22c20e50030322673a',
-'10016dc3a2719f9034ffcc689426d28292c42fc9',
-'9f42fa2bce6ef021d93c6b2d902273797e426535',
-'cdf48bacbff6f6152515323f9b43a286e0cb8113',
-'b88fb75274b9b0fd57c0045988cfcef6c3ce6554',
-'c06d3a6a12d9e8db62e8cff40ca23820d61d8aa7',
-'6e40f9e83a4be93874bc97cdebb8da6889ae2c7a',
-'3efc940c312ef0dfd4e1143812248db89542f6a5',
-'a0cf03f7badd0c3c3c4ea3717f5a4fb7e67b2e56',
-'a544e06f1a07ceb175a51d6d9c0111b3e15e9859',
-'199d986ed991b99a071f450c6b1121a727e8c735',
-'33bac6104b0ad6128d091b5d5e2999099c9f05de',
-'76d7db6e18c1f4ae225ce8ccc93c8f9a0dfeb969',
-'f652f3b1549f16710c7402895911e2b86a9b2aee',
-'63faebb807f32be708cf00fc35519991dc4e7f68',
-'0e6730bc4a0e9322ea205f4edfff1fffda26af0a',
-'b61a3a6f42e8e6604b93196c43c9e84d5359e6fe',
-'32d979ca1b3ed0ed8c890d99ec6dd85e6c16abf4',
-'6f18190bd2d02fc93bce64756575cea36d08b1c3',
-'68f525feea1d8dbe0117e417ca46708d18d7629a',
-'a7272e2308622ff7a339460adc61efd0ea8dabdc',
-'aef843b86916c16f66c84d83a6005d23fd005c9e',
-'be2cd6f380969be59cde2dff5e848a44e7880bd6',
-'e5eb4543deee8f6a5287845af8b593a95a9749a1',
-'534c850448dd486787b62bdec2d4a0b140a1b170',
-'6fbfa6e4edce4cc85a845bf0d228dc39acefc2fa',
-'018872691d9b04e8220e09187df5bc5fa6257cd9',
-'d98d512a35572f8bd20de62e9510cc21145c5bf4',
-'9f3ea255f6af95c5454e55d7354cabb45352ea0b',
-'a70cfbfe7563dd0e665c7c6715a96a8d756950c0',
-];
diff --git a/pkg/crypto/test/sha1_test.dart b/pkg/crypto/test/sha1_test.dart
deleted file mode 100644
index acfdad8..0000000
--- a/pkg/crypto/test/sha1_test.dart
+++ /dev/null
@@ -1,569 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Library tag to allow dartium to run the test.
-library sha1_test;
-
-import "package:crypto/crypto.dart";
-import "package:unittest/unittest.dart";
-
-part 'sha1_long_test_vectors.dart';
-part 'sha1_short_test_vectors.dart';
-
-
-void main() {
- test('expected values', _testExpectedValues);
- test('invalid use', _testInvalidUse);
- test('repeated digest', _testRepeatedDigest);
- test('long inputs', () {
- _testStandardVectors(sha1_long_inputs, sha1_long_mds);
- });
- test('short inputs', () {
- _testStandardVectors(sha1_short_inputs, sha1_short_mds);
- });
-}
-
-void _testExpectedValues() {
- var expectedValues = const [
- "da39a3ee5e6b4b0d3255bfef95601890afd80709",
- "5ba93c9db0cff93f52b521d7420e43f6eda2784f",
- "3f29546453678b855931c174a97d6c0894b8f546",
- "0c7a623fd2bbc05b06423be359e4021d36e721ad",
- "a02a05b025b928c039cf1ae7e8ee04e7c190c0db",
- "1cf251472d59f8fadeb3ab258e90999d8491be19",
- "868460d98d09d8bbb93d7b6cdd15cc7fbec676b9",
- "6dc86f11b8cdbe879bf8ba3832499c2f93c729ba",
- "67423ebfa8454f19ac6f4686d6c0dc731a3ddd6b",
- "63bf60c7105a07a2b125bbf89e61abdabc6978c2",
- "494179714a6cd627239dfededf2de9ef994caf03",
- "2c7e7c384f7829694282b1e3a6216def8082d055",
- "cff9611cb9aa422a16d9beee3a75319ce5395912",
- "e51f9799c4a21bba255cf473baf95a89e1b86180",
- "f741644ba6e1bcf5fee6d3c1b6177b78468ece99",
- "fb1d9241f67827ce6dd7ac55f1e3c4e4f50caa03",
- "56178b86a57fac22899a9964185c2cc96e7da589",
- "0a0315ec7b1e22a79fc862edf79bda2fc01669e3",
- "32af8a619c2566222bb0ba0689dabcc480c381d5",
- "d35b5afbc48a696897c084e6e71aae67c7cd9417",
- "602c63d2f3d13ca3206cdf204cde24e7d8f4266c",
- "a3c6fbe5c13e8b41fadc204c0cf26f3f214189f4",
- "25e480e9e0ca2b610105cd1424b8a35f63fb3981",
- "45412d51d3ca7bcf452d1612720ee88f9d2427c3",
- "ed6a95036e3e046931597a457db7a78b7309c4c0",
- "b4fe0256d346700783420e08a4a6f7992b1e36c9",
- "33e1799e98280e5a9ace5509477a2048607c5537",
- "cf193837f6de43f8e38000acfcf764fa8d8fde22",
- "7c8de247dda83599af2ec2ee2d29e20583dac34b",
- "f38a076f70613fc251c4d21e6435ad08341a8a99",
- "dcd68e6174bd74ba180da047a7345e8d111f85fd",
- "43bbacb5f62a0482cbdb564171b04365ca6e27c0",
- "ae5bd8efea5322c4d9986d06680a781392f9a642",
- "eb90bce364635c4c23b49f493f0043579bc85c17",
- "2942c7afa65444c43d0592d0dc73ca71db729205",
- "abf726f5fda729fb7f3f0484d7c94b3107aa02ae",
- "75db4f6bcc05a781dda9d17c46717286dd53654b",
- "a82cb42d89daf5fbc1d4a48476229c495782f98d",
- "fc1a69683744af823cd69e8a1e3f460591714028",
- "dc68db44b48521b0700a864896a00e17777aea83",
- "cc9ad99e917042381b0f99588896cbf236aa8ed3",
- "ec7a68484a749c7065c6b746f9c465dcb414f370",
- "c627c449deff14ae7ed807293d30846f061da5b8",
- "4782f2a19b6dbb0882d656de86c3d21a7317f768",
- "02d4eed99e7307bea39af5330bf7fb388d48b496",
- "b3d99b9d90a69e50fd4365704f5ab2eab7bc9763",
- "9b1c07176bb227f73e8a4e173071d39302061de2",
- "d79097ddac552a6e02a52ce7aaf494d2d73b2557",
- "df7f23b160e75b9bae5ea1e62b43a5a34a260127",
- "f598f3780d8c374d97957b9b62d56106e9e0b2d2",
- "0bd98598f9ab29c1359ef5460a206dd1370515e3",
- "e6c320834f69d81689e1ecd5abc808d49d9c4e07",
- "fd5ee7588cd129e12b886974621fd29facc78e19",
- "2a9c28ef61eb536d3bbda64ad95a132554be3d6b",
- "cfae6d86a767b9c700b5081a54265fb2fe0f6fd9",
- "8ae2d46729cfe68ff927af5eec9c7d1b66d65ac2",
- "636e2ec698dac903498e648bd2f3af641d3c88cb",
- "7cb1330f35244b57437539253304ea78a6b7c443",
- "2e780486f64bc91fbfa2785ec1ca5c9e3cc07939",
- "4a7713d44e97d9f09ae1d786199c58ae2bfaf3eb",
- "c98714b16f92c8a770e9fc229df834d1688e282f",
- "aace3dd6f54a2a255aba920f5ffc8cf04b85a69a",
- "cf8563896a3b0a0775985d8289444c4bbc478da7",
- "6d942da0c4392b123528f2905c713a3ce28364bd",
- "c6138d514ffa2135bfce0ed0b8fac65669917ec7",
- "69bd728ad6e13cd76ff19751fde427b00e395746",
- "ce705b7c60d46e7e36fe073db8822698579ca410",
- "c717ebbf6a2bf1bb33da6257352d5085bee218b3",
- "86151d140aafc9a4b5877d3fbb49014fe5906e57",
- "7446b5a6bbcc58bc9662451a0a747d7d031f9a7d",
- "c24887924f92adac5ae367995d12691c662b7362",
- "5af83cfd42d61967778889ca911cfb6c14339ba7",
- "587d4f6e6b4e21343423e434679009cbd3d24dcf",
- "ac65dd946c5cc432d4d624caeb53c7363f96b7af",
- "fa71e70750674c0f6b4aa19d0be717b2936c83fd",
- "c9efe6dd0a019315f73f3962de38b6c848a1705b",
- "d1d05649b952c8f6eb016be08fe1544aac5d5925",
- "cc3081ac1d695bae51cfd5b44b9fb3a230733cc3",
- "eb9de332558953792687d9a7f598b5d84bf0a46b",
- "39de5efdc92e3d3678f24d2cf545ba4d172d003d",
- "399dbc9f721e44a992a0def42d999b32af449adc",
- "996a2817c8acbc667e1c4c27b8f4e9952736dd7a",
- "3ef8189ce1bcc0d65aa182b1a81534635edfdf2b",
- "d676714c6a6ff4e17a60c0511c25aa8b164fa606",
- "4db6e3381e1b9290267c1539e1053793c8b81fa1",
- "3a34d35b0296fe4d83eda39b742a9d8f4b13a958",
- "54f3b45304ef1287f54b877fcce3285e154f9d6c",
- "b1ea96216e025377ab5aa845238fc8bc65dd60e1",
- "bc6c7488145485dede1ae1d43b594f0046bcda0f",
- "3d9a0619ecf88c84ce86213e9aa91d9a252cbc32",
- "92ccaa0b4ce89e2bd80a61b9bafd5ac58ab7b588",
- "3eb326b5bf4440fb3a88e3dcb05c1db5ea01ac5c",
- "989c63e819b13d4cadfb33f8deafbc57c1992a12",
- "ae944552c20cf16f07a5c357713832c9d72d0c6b",
- "46723e982569a1e2d9edced5498fc1f46f7d63fc",
- "3bc5dae7907c83a0693f87fd8372efdd1df53e09",
- "96d281ba44eb21ecfb1663c8ac5752c48686a927",
- "fa0ef18178880a72b51c26555c10f5210dab4390",
- "0c7ecac32b8ed6d9835d381bf069568722a276e1",
- "649e44ecba85c0938ec09229cee4bb69388ec642",
- "1e6634bfaebc0348298105923d0f26e47aa33ff5",
- "af2af2734bb2baa288940cb62109f4849daa347f",
- "22d14bc045cc9a3794c99beee7abe278bf24d6d8",
- "c3164ccbed75b82ed3f59f4a47fe09b256025549",
- "c27b5bc7cd24de4913614a769a442e9cc9fb0e08",
- "f44d48d98cac77522ff6b9e1b9cbb8489e58e588",
- "ea19a71ffbec9572f6cd65523acaf865ec05ab52",
- "cda0eb9d310247bd1e8b3ea10d9b9deff6fbaba9",
- "449dfce971b9d65d69fbc72940e9a885e8dde9ce",
- "96eebb6b95a9da99c58190cbd77cd6fbcf638a79",
- "670f7a869e90ce86e0a18232a9d4b1f97c1c77d0",
- "bc544e24573d592290fdaff8ecf3f7f2b00cd483",
- "e4ce142d09a84a8645338dd6535cbfaaf800d320",
- "1c26461e26eb697ccc36a98714ee70caaa87a84e",
- "51c5b1c25a71ff00394a84ab48b5733c8955551e",
- "84803504181c0ae33a511c49af5015a5b1892bfd",
- "7cc8bca120c2635abfea82dd203112b5c7e165da",
- "44e2519a529d7261f1bebedc8ed95e1182cae0dc",
- "2a81372da39c1df4251539a9922717b7cf5f0334",
- "41c89d06001bab4ab78736b44efe7ce18ce6ae08",
- "d3dbd653bd8597b7475321b60a36891278e6a04a",
- "3723f8ab857804f89f80970e9fc88cf8f890adc2",
- "d031c9fb7af0a461241e539e10db62ed28f7033b",
- "e0b550438e794b65d89b9ee5c8f836ae737decf0",
- "fb3998281c31d1a8eea2ea737affd0b4d6ab6ac2",
- "7a914d8b86a534581aa71ec61912ba3f5b478698",
- "a271f71547442dea7b2edf65cd5fbd5c751710aa",
- "89d7312a903f65cd2b3e34a975e55dbea9033353",
- "e6434bc401f98603d7eda504790c98c67385d535",
- "3352e41cc30b40ae80108970492b21014049e625",
- "6981ed7d97ffca517d531cd3d1874b43e11f1b46",
- "76382259107c56b3f798107a8acc62b32d8ec2c6",
- "548538582fd2e877b023be0611150df9e7ca99e8",
- "54152ac7d9f4e686e47d3a74d96229c33793d51b",
- "40e1b424cb6f13453ea005d077adb732b2fb9084",
- "a47fd7470c43f7cb7e5dd4159fb0c11644f6a108",
- "4ab5a4f084d4d95894078e8d570eb0bff13c6286",
- "5f9de1b34863866e2c644fee51ec0bed7d6b7d91",
- "2425097e0fea366d916d919f690e99cb6594d370",
- "1e2cf1d35240f0b37d056c69c18ab95559e311d8",
- "25fb08a7408a380b19074fa547f4fc4eb7d303b9",
- "e38c3774d31cd2ab4079c38abd7876fe1ff8c1cb",
- "e06dfc04b000d187b8bd6b539c884581e49a7b48",
- "027f9a54264ed75254e00c6a8f821630d780c6b3",
- "a86906b83ee8851520e2e628ab6295ce3497a2d3",
- "3ba5b1a7c92cf4e749995b819cea8c37e479f433",
- "e192f0d9326d7a0406b343d89e6c1b0bd1bbfb76",
- "e5c31d8a5d94c54aba514694cb0ddcd835b328de",
- "77237ee62b7ea8504451b6372289bba5d46d15a1",
- "11e85e204f22d0784746ffdcf8c5bc0b5de6a211",
- "6a2bc12e4605f27fce8c2e90a387e7dee901e48f",
- "8c696b02e3bd3f7fb02ff852ee8bf8d1d3c9c75c",
- "75a73cd24385a1e1768adddb23b3d7183cbb2f00",
- "3c1a0181f2b5d470bf78df6dd596d85f63e4d855",
- "0be0dc00e59482a360f21199abe9974a85047da2",
- "b853306aa29ebbea560c61eb1f9a2f740b45b6c8",
- "5e477b0a9dfe6225bdab510bd87bcecc59bc2497",
- "9112798181ba4cc1c528a70729cf784115ca69f6",
- "d741bec70d9070cee9960c5043a2773051e4cbaa",
- "7135cdf89a331ca5cf339d414a950afa9e2bd786",
- "aca27247604a6960e513b1eea56146bb4e443c47",
- "cee02aef5cb718ab5838c9673deb86f47f479f68",
- "cd024743ff967bf59d595461f549efe50ae155f6",
- "c100aaa2cc196af36fcdc403e99f04f357c88131",
- "2f33512a40135a515b68bf53b09844678c7548a1",
- "3416bd9a3f79dbc063fff2c25bbd760831bf49cb",
- "679256809caa8eb74c086b8c3a0e2d4abf850f86",
- "476d4a88a9dabdf50e65dfb207b7117ff9d6e2f4",
- "9af88ed103f83fab906e5851728b4d47c31cc5cf",
- "c0733dd1c6ff8f9b1463c3e3ddd299cd3f81d8f0",
- "5b19b45105657e67a75d290e52b0b12b7cb54fb5",
- "aa6cc574968f08a0a975fbc65ae1c673125a38b6",
- "1b3e6fa3c2a28bec0d42f4db58190bd393d372d4",
- "97019771490e12f6b89b581c7df82ec1e250652b",
- "37452dde0527a88d2beb55b5b98eebeceaa2b464",
- "5ada134688493c8ff0298563b6d37e0c2b820818",
- "27c194fd8566a2c5eff8d00a9ad2febf8105846e",
- "b692e7fdf82422566df39942a262647fc27544db",
- "a8df45ea509a4abbb0a9ed2af668040ab420ccca",
- "b9aa0fd55e3da81095d899e52d6427406779e6c7",
- "e308d9ea4b329e5ce3ae1ca31cdfc59b687cb7a7",
- "7366daa91f296da16fc931b8d820c671674c73b1",
- "b44ab5276973cfccf3b6e1b50f78d1dccae35e0b",
- "48a9d63f99faea8f26c8f9b37ae8650419767808",
- "356301d2c18c60cbf761e8820e78b2670a54ba83",
- "c82f43012f075b3be2018878d30ba404ccde3b5d",
- "b3d1e00b9f264ff969f7a16c6ae3901f9edb933e",
- "0446503bbb165ad4e747ebe9e040a550cf6ea1c4",
- "f4e0b1d08f68e38c83604fda8266535965955131",
- "38dfba530b2a3b77c25816472c44c03b7e32fe9d",
- "f079c4078b90472d5a6de034133e6fb6bbb16745",
- "453e806d74a27e554f2a3395ce7917919bf3bde6",
- "995b6f0c8f9eda20f3e5a2bd89df908747900008",
- "c7b4dbb98c78008fd53159174b7baadf250fa5a9",
- "2407f4de74bc711d0071476eccd73370bb6fbd0e",
- "56b81cf38a7ad1eb515a8e21af35b308f4977cfe",
- "de45d743c21cbe75d718086178ce454ced1dfa1a",
- "9dcc4b7304e7305639ff55e78bf538e6e4bdc847",
- "63cdae0a07072e387cdbcac4f73bfb0ed66432f6",
- "20431c9fd7ed84d31937901e6c2f2263e22f2915",
- "54d11e99127d159799dbce10f51a75e697780478",
- "b9ae613785fc3061f9df6a4f1e86e6252a6004b3",
- "366ab5426763b78563de648d831e6e8f02e16c4a",
- "b5a7a52b733421f97a37319fe3580a4ba2b86a11",
- "8ed72f03309e7ab31964e4dbfb25e8ab41684124",
- "5afd9a289b4fce41efb7a77a2baa9314f9f11cf5",
- "21d0451e21cae775b5f718886fd59b2ea9e9e787",
- "696cd0f2c8a6e0fce77fac490b70621a71c51e38",
- "5bcd7ae76d23e39340ef0a0f2fd38ddaa3b4b733",
- "0e68e78d5d668479992fd6a7ea2879f1c0b44403",
- "f93dbecda2f86c5c52936e986a582680bcc10953",
- "e9ef3322618fd7db744b674620bac1d2427c79e5",
- "2febe02de9105bf3ee4412c79c7c3df1044037ed",
- "4f60bb9f2c379b6c6b95003d54a4b4dae47889e8",
- "f2ce6d9c33c6dea70d4a6955f4d00fa8371e54d4",
- "c012e1bbaac2cb4b7074a859bb98e469177e1afd",
- "7c5c4cb81d270a5a41f7a41e6124e6028070ee97",
- "669702442cabc5b51604234fd8ef37062a6cf11a",
- "0b5febebdc3f4f31d6c5c52b83ef2a06c262ef8b",
- "cf5d815b01a6a3952ff81a688341222dcbb853fe",
- "845c71d2b20913850ef1fcfec5606412256639ab",
- "861c969227f1043620c9833c2580e64bf4cf52d5",
- "55241a343ca97a602f7a6c71183fe8976999651f",
- "1d298771d3d6c35899c5604660c1f6c77d1e71c1",
- "580cc8968318c3bf61ce62aa2ded2b15777de522",
- "65bb4da1216214d7962733a372e78966bdfda5d5",
- "17565818c45a669aa6bdd25a7c5c121120704731",
- "1ad5f3869d8b92fdc30b81b06e21b9be866e103f",
- "9b181c583aa16426c200931bfe5d4e6c269e6ca2",
- "60c456ecebd7834f3fa8d1f4307449bf41616740",
- "bd4c73a0a8748c627879652fad3761fd7ac36c4c",
- "0baa214b983e58e39ecec9bf2bd537a10b2071ad",
- "642c7c6166e4dd09183e1b32dfa62f6f3dfc8ad7",
- "9beb03f7c76da0de2bf22a08efd1e2bf07274f0d",
- "a0d8782e1eeccc7bb104a4c38f79f8541383fb1d",
- "1c1b52a04ac3aa838a3698395aa3d934784b4b50",
- "b844b4f08c5255fa66158fa18ad57154af1aa840",
- "c07f9c996bf7327dfb47c82eb6b8bda1af065e2f",
- "1b9fbff4d5a61741c90b6f040eac211285294510",
- "2e4766b0ebf480a027ae6f9e59e7a2ef9e2aef2a",
- "f7b8e5e76e6b4cb3dfa7af7070d5560400822b65",
- "54717f94e8f3ded40b4cc1a470eacb25cb10136f",
- "e2fce1365029e7d2e8c81f5b1f6c533629ef3752",
- "7d7bd28f79bfba1b69dcb45f81a423d1730b56d8",
- "1a17d4c4c689817bc9e5dce38ef79ea684eb8976",
- "1250a5f131121f1fc0aa77d3d6dfd641526f266a",
- "43c87ab4ed185c57ab3ccd9d89017897a4e77504",
- "5a7d9a1c26ef0cb99fa2d7e970b19ccf5a5e4229",
- "431e10ef7681217c353a54302c611661f5d8aa75",
- "c572caf20d5aa8b6a8faf99f6628594fe3ddf81b",
- "a1219d23a9efaaede86c392888a18f995b15e8e2",
- "be9a388016c3973d9b4a8d0c2c7fb9a6d254370e",
- "bb260e71e8bd5ed2baf5d9038600032669086ce3",
- "10fdd35f361b080323b86b47c893cfb13879c028",
- "154c3aed514692dfef86d89cf1dfbc4f8f1bfc92",
- "fa2c27c443e60a0bcd8a1eb82d20fec20759c03e",
- "4916d6bdb7f78e6803698cab32d1586ea457dfc8",
- "89d6d7a79dfc4c2588e5ba3726d163faa67c4249",
- "4bc7dfa199db2cc10d6fa1acbe2bea402c3f69f3",
- "ec485bc69fb3660cdd7c650a8da191c958273534",
- "1fb3afbdcd58e4edcd92c49f22d4caa0581749a1",
- "0183c0e82beb55c6b2bc24b89df5dd64b87d22d8",
- "d8dc481dbe69b312789e85b0284c114108a18bac",
- "296f1f75500286b9b4e5ac80fba1ea8452d40792",
- "205c3b9ed40f9f92a70e5920b85707f50689a618",
- "77ce91d45055ca41c52fa6f9a9c3117b2aee9611",
- "fe4c72354229cb1b9c9a05dde2ffa93ff6d12400",
- "48174534cef0fc3fec5b1a6dadfba2281c4195bd",
- "202413d6ea5edda76cd27e81f8700d0b379ef58e",
- "699b731a830041cc7afc2a0e8f48df1146abb75d",
- "3a5f338bf04229f9e45e1402988bd5c59dda930f",
- "8c620f2651c8ad1a40f4aa2fc0687848c6db1d75",
- "743fa8d2c15ddaa8923904ba6c2f61db15f5c71e",
- "ee065a446ffac9e405bc0e30b8a595d898fd8f57",
- "ba83d7ae664cde7a19ec33e839fa19b46beb7ee8",
- "0941612acd729027440f6aeac58ac28e18a44cda",
- "b4a3e1dab651d8e978abfa4c05c0cab1a33902f2",
- "30666bf53a5fed4b7d6bdbc993348e56144bb1b1",
- "f6a97e96436d9c5340009a497ba298d2901eb06d",
- "dc0b98a0d1d20b974885aac995d8c484d6594d4d",
- "62b3e62ba7f7194fed07c518179d0d86e4e20661",
- "699b84e119bffbbffa1a228e92682f1f394cabcd",
- "31ea9a067b4d9207bf4f4e4dbe3ce191cc754e05",
- "5b9ab97c102fcfb39efda8b788a4a387f18a507f",
- "a2f9fde34879a9e7f8caa9a21c2f2a4b47c24ede",
- "4201b2664b010fa180ec54c37d8615b3055f8a81",
- "84404983f08452a5ff4802e2f531602520d74546",
- "cc0ea7cd6b40fa790570fc767b363d1482718cb2",
- "0b0c30ce8a0770ee6a989e94bcf875494ed105d8",
- "6f5f7e81f4102d4f76c2604d9a0f028e49c4952e",
- "bab4994f3923af37ddbf54a1b69d5954852d1754",
- "2c2a9d56d09c676a7b6500d3ee18b6e100cbd87f",
- "58391cd702c86eec62fcfc9fbfff535410dfb150",
- "e3510479f43a21b29fde3504af668d37bdbbb799",
- "ac2369f558f15f080f68cd384fbe52f348a47e31",
- "e090b0bf8c1b9e7607962a8523f02d82e8cc12af",
- "262b8f0734bd8af3b42f21fefc9293a6c0bcf8d0",
- "a4f2c68beca4ab5b4b3db1ae9d07cd1b35f9fffd",
- "2ca39733f7a738c1fa8f515ffe2ff3ddc0c95c56",
- "63d16097c9b701d65b33700e05512bc905b58443",
- "bf77ecf143ceb21f1676c34b8d89c8bb3c43cc4e",
- "862e4228ab561c475192bdbd03bb33c743fc0734",
- "515e46b8fd51d614ca183cc8b3a076a9dbe3b70b",
- "15cd4acbc372d214f88c908c92903c7acb958e32",
- "26110861010beaef40f4590c701c0ff493f0ee27",
- "bf7e80ffa9cbda63f72be2b83d732730cb953e97",
- "d0900aeb1174173f7cc69d4788a61a574893d3b7",
- "e79a9ff141c1279cec57f7ea34d4ac4d057f0834",
- "a669f82976ca034e631533ce96e94b44e24dd2d8",
- "7aab0fd3799c01adc27018aebca9b3a0e1a3d7fc",
- "36248be03e0562a5306b30fcf7c4a4905cc41714",
- "6bf234d718fd1f27bbfbff81fb7fd64a22ae6745",
- "935ca3dfc9bfb1a3dccd5f794ab17e387441a4d2",
- "bb6ac0036ee0a56803045317744d4269ecfd0e62",
- "901406bf18a77ea00d526753957cb7423ee20b4e",
- "b0fe8f32582fa72bddd26dd9599c8205117c6789",
- "7d62100f74e829f7c5dd4db5817c530f3506813a",
- "713b4f3bb5a983590b7cb3d8b68aa56abb396cd9",
- "8e62281add5a87ba1b6df012b5fa25c7ec697265",
- "ebaa706a4823c278319dfcae0cb4a042d13eb39c",
- "c2e1fc39b890ff2b27ba8d0d355ef5704d792a8c",
- "eefbfce3c1c225bb429d0f5bc2552210373aa2d9",
- "4daea7d3291cdfb5bb13d522966c49bf1d692eac",
- "efd657e983cc85ba14c91f33fa81cb55413fbda9",
- "d33bce8f11c9f73666ae05446e0645235b29faf5",
- "c0c549f0976e53d790ea9fd14aedf0a0cb86a678",
- "44992a04e41a5cdb18833afe21a731c2b424b990",
- "6233b62e68349b3b17ffd9eaa7395b8521e31d38",
- "85d7f914b07ea2df148d5b1ed22f44928fce3a2a",
- "a2a0b0917c454ba4cb1ee2c61dda863004542ed1",
- "2411673903f84144bc5ee990f1b9160796196f1b",
- "6ee6dd69ff465b3bbd0c72048df09f001958419e",
- "c4493400da60de7e324dd0328ca5e3429d273c14",
- "a9ea2b10ea549303f8a5448f3921449ce25b8c36",
- "89725b40e71e1c0b27a68378a9e0ee0b2b0953b8",
- "cab92400df0b6b54e05d22b6ede2a2e5a623714e",
- "615653835fa024decf05ab5051fcabb4c6ecf853",
- "dccbb727546f111a22dbfe140aeb1ca04d74195c",
- "5d70ca252c600d686da9dd797018545aef3be66a",
- "a4b6a68e3b0e76d9d97b1323f8ebf752ab8b9815",
- "9fca700f9b8eb2159fade3e194a26a203270da3c",
- "69f3f034ffbe3f8881c47e96d8a3c25d108b0b39",
- "ccecfaa2c49a05caecd260b67e06b3db579aa0c8",
- "fc97a9f84b147b2244a9c68ed6e42a2b443102e9",
- "d64305c4b5c334fe9777f4a4c0c82389b289ff1e",
- "bc04cd94abdf3c177c38572e0b070cfdc6bb615d",
- "a96053be94fe5646d44c8455783180d5ad7d2ee8",
- "d34c409ea103ec1a7d54336149f33f3688fafff8",
- "660e49f0c60c8040ebfea6fbf9d4641bd29a50de",
- "2f8a580637446865145b7bc1f1376e5827966b47",
- "bca314aa8344c273ce31d86d05899c4dae043bc6",
- "c56453208571fd9c5ecb07451ef0f3b93e057ad8",
- "a238597192afa484d5c085938fe7e5ff5676c5e0",
- "7c033b565ec87dd7355c42a1822f4478db8a5a06",
- "2b0006ff2c586663fa9e60f0086ed31cbe263ae4",
- "07497ffe076d1c6ab3115f8762959763d03a661d",
- "5b886da6ce74d2392e79fbdf6573d37bd027e767",
- "946aa1664ebf30f0c8a5297d0307130943516e8a",
- "1fd32848d34600ec3dbec573897f6491f351e899",
- "caaf2320f61e4902e0a76275eade0b7b696df011",
- "188cf111bf5fac85bbd1234a725ae6d60c01b0be",
- "5a4b75efd596c4b63b585de8bdd7ba32e5c9d51f",
- "e6cde00bb218398b0746731df063d3bb566de2fa",
- "5eccce82721de36778dc60bc2202eba25330ac6c",
- "3f09e72b246a37847815cf6961c046fbe03a1b82",
- "e41218b9952ed1fdf1c13f4764ce0464ab84da09",
- "658e0bf69909da7ed06d0812743ea447f031ce20",
- "351df1eb81e4c608b0f3ab639b4535176417a65e",
- "8b1418a8864f2bed6f0a744d2a9bff79ce6e128c",
- "61300adab058879efab23bec70c679a8764cd61c",
- "c111d79fe3c572e5bb7b76665801304054f9460b",
- "dbd3d71d83e8eb20ee962d516bc649cf7611bafc",
- "3fd30a37347451c25842c635700d543a87159ec3",
- "cdab33892deced0454e1918813b95444c008ad49",
- "3e2e8c970e959b224f2333e4a9009b482e6863ea",
- "db4a493a3da552ed75be5fe0d96f6e99e2fd8eeb",
- "8b94a2c478e153ac9f5fc0b5de763b5124a1f70d",
- "465059936302a4b0f5303dee926a54c983701c2f",
- "4d2564abccc82edc1201f2f53975216586966c50",
- "0b0aa6cf662dcd77e54d3ad8f4f3dc5cc27151a2",
- "7918795cb32586b1e9e1024318e7eafa9b6ad18f",
- "35b1bc29234467f581fdcd1eab41d4f5b4e12b64",
- "abb9f092576cc104c714c930fc45ce4d64579119",
- "4b21a2a5f59effb24c569761e6d81190178b4ada",
- "69905ce9887ec25bba3431c58bc461cc198e216e",
- "9550962ede872cdba5c76e4edd01e0af82627131",
- "ba961c3cf1019b3ae55cf3cb4dfd63e56445a491",
- "1daa88cc7b906174701a12cd4ee99db16f0ce895",
- "1331b7f53c41c3af02675cf9bf9c90f766b15a66",
- "4c79f5e36122bdd75f0441394e17c47d1610398e",
- "47ca89f45df07b0cf76413b3e9501a673afaae92",
- "aafd8ad6f2e4fc8a62a62f9aa0e4b7dfe3ced4ac",
- "931dc6deca5a7bf14c7f09363b0128e7c2ed54c1",
- "2860821a19639a36f466d9b609c18d8b925a17be",
- "1b0833981cb628ba449413cf3b2298a2704aeb32",
- "36e77b3b717a5157e12ec0c31e97cd7206da5fa2",
- "de62d25749bd635d6bbe90c450277784a3c61cd0",
- "dc060bc4abac7f859ce49196440be380973875ec",
- "7f14938a411d1d43a518f616b89987754587e0a4",
- "d213475a442062ca792da0365b65013b91bce3e1",
- "568197b973327d6e1381fb787defb016554ff697",
- "0f487f25e2c6d326d5842469151decd377808c31",
- "944c6549c461c86e6efbb055ce984ce8cb477a3e",
- "5ab47b9585d9fb2479153f5ddb34df05d0d92d2b",
- "436104ec60d00a3d56f2715f4737b7a12141147f",
- "c4a4e308300110262019dbbfb4e3d8ba25b15596",
- "bc32be2415c6c9f7166cd72244aaebdb683ebc58",
- "283d86c470fead74c4bf994cba027f7edf596747",
- "7f387b0c27f3b2b273f85eaa35a93bf9d06d8a10",
- "92aace99c76e474bb8adcba0a875b477fc360885",
- "bb1cd0c8e0513222e530aa4e1f276cd3b13372ab",
- "b837ddcbc1eb7084f3c28b6e05bcdb3fea844b56",
- "d9a19e686d6c77640b10823a49e51b4eb8f51ee5",
- "198d0a35c25c67b817f4851f5ce0d0056259fdc3",
- "b5e6beb43c52ae185e2599db1927db7744335adc",
- "761dc03843153110601ae87b6e36dc29ace16ef6",
- "a64e92f4a324ad3ba3a116d561bd89036bc9eb71",
- "18dc53328d39feb8cd31c172e1695093ceec915e",
- "ae6082492d71f0ef80b402858803602ca3458153",
- "ec6f78c1620e0bda60f630f36015226ac8639b25",
- "c05239ff738a997fadd46525bf739e3e2c040e89",
- "707e83ce4291c118051c5191e888c283b4e98399",
- "cc14800d9ac3ef0c1f6731c9e70c7939c8dd0870",
- "c5294dbe82ede53a2d8bb0418503a2deba2e4f3b",
- "0455262dbd4b71218ed20f4162bbd0c3b7de4d07",
- "6ccb4f7070d3c908830645cd552e3d6112d059c4",
- "3974fab667fb7d746d5f088c6e277bfeee8128e7",
- "065742e2a66d88b5652b2e40d46c4d50102f6db3",
- "07fa47c9f269b323557182c61f6f6ed1c16ccafb",
- "196987fbf33148ae33ce9f9733a97ea845cdc1c4",
- "8139864a57098a32915f0e3aa6c0322fa9459fb6",
- "1fcbf41589c8e7d92274e64ae6ed3ad9016c179d",
- "055a0c549e6f648794cc65bddc08cfefffccdf9b",
- "f956af32d67df97f6534357de15b216cc2d2d102",
- "d7fea5323eea433ddb6277228ec0a5bc1ab4a808",
- "083c9487c4469fda257aa45c8876ec8269aeebd8",
- "9e88e459135e5f0b52ef6c371cca04a39d54b90b",
- "b8c1ee8246d14bd62e5a03b94b848b534613e7d2",
- "d26b97682f8acb1daf78be8c4418a0ebb17a05b4",
- "68f2b5a79ddb450cd1b4d5d6e502979c9f157996",
- "629e969018aa82b56389a3e601ef2a209f07cf07",
- "2dca01e39393889210c566779afb65048a387785",
- "d51c2f00f8c0fa2484497abe1bf85689c45d42ae",
- "467dd26d49785595bba3d406de25f5df8fd8fd4f",
- "72f9f715ea0aaf529be15e6afd7388e02341af75",
- "25a5435435d5020c5a7cbbb84d3f9b5e8b2fb9fe",
- "059d91ec492b6051340704b240b282d1fbe3d114",
- "33fd244ba8454d234e7d6a8d04a55b78eff890c5",
- "7d008c2d8d47bb97fc5dfe3de4559506e7fc4708",
- "860ddab2982e9dac6cdd1e19f5c6c53dab82e4c1",
- "4e39274189149868840fe7832230aa66483cd72d",
- "c61b506b45d98fe6ce5422f8edf6f8bde43fd2df",
- "97a8be86139d2732a9009525dff7cf77781acec1",
- "1e83aad8918c5002eca3b07b071045d23a7213f1",
- "d58d9ff6d19bd47651f3e2c766f869e6e07776ff",
- "edbb172dc2004b81bf3937a0d3e54ea5ed642da1",
- "1b144f648322f58caea9d31b3daf5ed686a3305b",
- "0662edf0d072a4efcbb94fc855a35b0631007eff",
- "446da0ba13c0c8cdec5dcb55beaff62f83822af7",
- "3ecdc37d6ba572f691cf42654b182ce0cf4853e0",
- "b9cf503328fc20919109b57a7785dbb664b2710e",
- "8519d7c98bc7b7610ee96c047fb71ba73a441ca4",
- "897e381dc5bac1eb7e8756dde6adae3ef2a081b8",
- "8d1f32ea054e1d02370eb02c8ddd67bafd4138b2",
- "d08fbd377a7f3689f881049f8c999e8c3616bdd2",
- "ef9c6777079358192b922616871f6e6762d5a05a",
- "63e2d52b6704f4660c1b6662a67acf385b4fb3cf",
- "9fd8b020a14f2dd4be4ad5de13352ab8addbedaa",
- "4481cc23334be067c5dfe87bffed1a1557fb5f64",
- "dbb3e3d67acf2807afce8e9cdc3f670b1cfb67c2",
- "0ab84832b324391f111b796e18dbdbf2c640f89f",
- "742672e86dc79921ad0551daaa134baecb1f81f6",
- "768e50efa6303a32043f7417f3360ffc3c9d4ba8",
- "4fc6247f63a71000a794758c3d266d42acd39758",
- "adfbec37138f84c212aab558a83e40570a349e1d",
- "b8725701da5bb62ed2371788edb05daa9b42799a",
- "10a0fe5f359d0f7bdcf10ed843b06a73338fa086",
- "a30f11be717bc710d4d6dbfa02da4767eec14fc1",
- "c0f1aba4346f0aca89f3ced0822af676a6835e87",
- "89399c4a03e038efb7a97fe38ab3f6604f1fc37e",
- "69ac5e45377465de71eed8a5527d7542130d8b2c",
- "69a5899a88ad3922168116e523a59a19f5fdbe63",
- "4da263905ead1900d957e11a24165aa5364da10c",
- "b3f980c9a1a5939c21865e1430cdb6514c9f0787",
- "195c2807c4b178c8d357d48560b759c70a5e1912",
- "f5527b7bdfa0eb61b5b399c8a92ef72bcaa1dca7",
- "60acf171a06b799678aa04c5ad2b999eba84f2e8",
- "c357c94e288185c8c29ec2af829d159d296d5907",
- "a7dc371d6a10326870be46b2cdf54803c4f05f2e",
- "1f5e0cc507a3f9749d8c6377663626bd31aaa99b",
- "8f352137a1e22f329086dd7b429049c7a8038718",
- "879c2e232949b8ec6c9ee6529ee39d5dbc502b8c",
- "aef44d7afe612259094ccd60494193225954bc51",
- "1fdadca3d067bcc8db56715a9a492dfd2d4f5b3d",
- "3b70d3d1cb0646f288537ed2695696c10b64d41b",
- "8188a5ccd6e88caaf801c0373283c18a0b315bf9",
- "75ebb8907480f01839e972a91051eccdd001619d",
- "0ec661c8aa7e106c4e03acbcca84c3cd8eaaea6d",
- "97da3e33e17f41d2187825d377bf0994c1631f89",
- "5f7c53e4006f76cbd1777b01005d03482d616f75",
- "50750f6ec4bdaa134369299de53d8d8b87d1ba63",
- "5f8f7e823d4e54b02610108a86ea721e337864ec",
- "d6cc685ba7b6ac3157adbb44c3f24c5a3c01ea67",
- "61e297c05feecd9901ec06b314429fe6ca92f27a",
- "d64a178d4759b796ec0e77626cf19257c28292fc",
- "6ae457f71b1cd60b1810fd4379c90bb38154568f",
- "063623280f208df296895ccd867dab8a73cf174d",
- "7a8b8c9aa0591603cf08e94ec2ae6a6350cbb8a2",
- "20c4232d3066c41e211eefe2834db78a8c083ea4",
- "82fdf2cccc77ab556aa35557d0923b162d1b98cf",
- "3dce8306f3c1810d5d81ed5ebb0ccea947277a61",
- "11bca5b61fc1f6d59078ec5354bc6d9adecc0c5d",
- ];
- for (var i = 0; i < expectedValues.length; i++) {
- var hash = new SHA1();
- hash.add(new List<int>.generate(i, (j) => j, growable: false));
- var digest = hash.close();
- expect(expectedValues[i], CryptoUtils.bytesToHex(digest));
- }
-}
-
-void _testInvalidUse() {
- var sha = new SHA1();
- sha.close();
- expect(() => sha.add([0]), throwsStateError);
-}
-
-void _testRepeatedDigest() {
- var sha = new SHA1();
- var digest = sha.close();
- expect(digest, sha.close());
-}
-
-void _testStandardVectors(inputs, mds) {
- for (var i = 0; i < inputs.length; i++) {
- var hash = new SHA1();
- hash.add(inputs[i]);
- var d = hash.close();
- expect(mds[i], CryptoUtils.bytesToHex(d), reason: '$i');
- }
-}
diff --git a/pkg/crypto/test/sha256_long_test_vectors.dart b/pkg/crypto/test/sha256_long_test_vectors.dart
deleted file mode 100644
index 40934a7..0000000
--- a/pkg/crypto/test/sha256_long_test_vectors.dart
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of sha256_test;
-
-// Standard test vectors from:
-// http://csrc.nist.gov/groups/STM/cavp/documents/shs/shabytetestvectors.zip
-
-const sha256_long_inputs = const [
- const [ 0x45, 0x11, 0x01, 0x25, 0x0e, 0xc6, 0xf2, 0x66, 0x52, 0x24, 0x9d, 0x59, 0xdc, 0x97, 0x4b, 0x73, 0x61, 0xd5, 0x71, 0xa8, 0x10, 0x1c, 0xdf, 0xd3, 0x6a, 0xba, 0x3b, 0x58, 0x54, 0xd3, 0xae, 0x08, 0x6b, 0x5f, 0xdd, 0x45, 0x97, 0x72, 0x1b, 0x66, 0xe3, 0xc0, 0xdc, 0x5d, 0x8c, 0x60, 0x6d, 0x96, 0x57, 0xd0, 0xe3, 0x23, 0x28, 0x3a, 0x52, 0x17, 0xd1, 0xf5, 0x3f, 0x2f, 0x28, 0x4f, 0x57, 0xb8, 0x5c, 0x8a, 0x61, 0xac, 0x89, 0x24, 0x71, 0x1f, 0x89, 0x5c, 0x5e, 0xd9, 0x0e, 0xf1, 0x77, 0x45, 0xed, 0x2d, 0x72, 0x8a, 0xbd, 0x22, 0xa5, 0xf7, 0xa1, 0x34, 0x79, 0xa4, 0x62, 0xd7, 0x1b, 0x56, 0xc1, 0x9a, 0x74, 0xa4, 0x0b, 0x65, 0x5c, 0x58, 0xed, 0xfe, 0x0a, 0x18, 0x8a, 0xd2, 0xcf, 0x46, 0xcb, 0xf3, 0x05, 0x24, 0xf6, 0x5d, 0x42, 0x3c, 0x83, 0x7d, 0xd1, 0xff, 0x2b, 0xf4, 0x62, 0xac, 0x41, 0x98, 0x00, 0x73, 0x45, 0xbb, 0x44, 0xdb, 0xb7, 0xb1, 0xc8, 0x61, 0x29, 0x8c, 0xdf, 0x61, 0x98, 0x2a, 0x83, 0x3a, 0xfc, 0x72, 0x8f, 0xae, 0x1e, 0xda, 0x2f, 0x87, 0xaa, 0x2c, 0x94, 0x80, 0x85, 0x8b, 0xec ],
- const [ 0x6b, 0x91, 0x8f, 0xb1, 0xa5, 0xad, 0x1f, 0x9c, 0x5e, 0x5d, 0xbd, 0xf1, 0x0a, 0x93, 0xa9, 0xc8, 0xf6, 0xbc, 0xa8, 0x9f, 0x37, 0xe7, 0x9c, 0x9f, 0xe1, 0x2a, 0x57, 0x22, 0x79, 0x41, 0xb1, 0x73, 0xac, 0x79, 0xd8, 0xd4, 0x40, 0xcd, 0xe8, 0xc6, 0x4c, 0x4e, 0xbc, 0x84, 0xa4, 0xc8, 0x03, 0xd1, 0x98, 0xa2, 0x96, 0xf3, 0xde, 0x06, 0x09, 0x00, 0xcc, 0x42, 0x7f, 0x58, 0xca, 0x6e, 0xc3, 0x73, 0x08, 0x4f, 0x95, 0xdd, 0x6c, 0x7c, 0x42, 0x7e, 0xcf, 0xbf, 0x78, 0x1f, 0x68, 0xbe, 0x57, 0x2a, 0x88, 0xdb, 0xcb, 0xb1, 0x88, 0x58, 0x1a, 0xb2, 0x00, 0xbf, 0xb9, 0x9a, 0x3a, 0x81, 0x64, 0x07, 0xe7, 0xdd, 0x6d, 0xd2, 0x10, 0x03, 0x55, 0x4d, 0x4f, 0x7a, 0x99, 0xc9, 0x3e, 0xbf, 0xce, 0x5c, 0x30, 0x2f, 0xf0, 0xe1, 0x1f, 0x26, 0xf8, 0x3f, 0xe6, 0x69, 0xac, 0xef, 0xb0, 0xc1, 0xbb, 0xb8, 0xb1, 0xe9, 0x09, 0xbd, 0x14, 0xaa, 0x48, 0xba, 0x34, 0x45, 0xc8, 0x8b, 0x0e, 0x11, 0x90, 0xee, 0xf7, 0x65, 0xad, 0x89, 0x8a, 0xb8, 0xca, 0x2f, 0xe5, 0x07, 0x01, 0x5f, 0x15, 0x78, 0xf1, 0x0d, 0xce, 0x3c, 0x11, 0xa5, 0x5f, 0xb9, 0x43, 0x4e, 0xe6, 0xe9, 0xad, 0x6c, 0xc0, 0xfd, 0xc4, 0x68, 0x44, 0x47, 0xa9, 0xb3, 0xb1, 0x56, 0xb9, 0x08, 0x64, 0x63, 0x60, 0xf2, 0x4f, 0xec, 0x2d, 0x8f, 0xa6, 0x9e, 0x2c, 0x93, 0xdb, 0x78, 0x70, 0x8f, 0xcd, 0x2e, 0xef, 0x74, 0x3d, 0xcb, 0x93, 0x53, 0x81, 0x9b, 0x8d, 0x66, 0x7c, 0x48, 0xed, 0x54, 0xcd, 0x43, 0x6f, 0xb1, 0x47, 0x65, 0x98, 0xc4, 0xa1, 0xd7, 0x02, 0x8e, 0x6f, 0x2f, 0xf5, 0x07, 0x51, 0xdb, 0x36, 0xab, 0x6b, 0xc3, 0x24, 0x35, 0x15, 0x2a, 0x00, 0xab, 0xd3, 0xd5, 0x8d, 0x9a, 0x87, 0x70, 0xd9, 0xa3, 0xe5, 0x2d, 0x5a, 0x36, 0x28, 0xae, 0x3c, 0x9e, 0x03, 0x25 ],
- const [ 0x82, 0x82, 0x96, 0x90, 0xaa, 0x37, 0x33, 0xc6, 0x2b, 0x90, 0xd3, 0x29, 0x78, 0x86, 0x95, 0x2f, 0xc1, 0xdc, 0x47, 0x3d, 0x67, 0xbb, 0x7d, 0x6b, 0xb2, 0x99, 0xe0, 0x88, 0xc6, 0x5f, 0xc9, 0x5e, 0xd3, 0xca, 0x0f, 0x36, 0x8d, 0x11, 0x1d, 0x9f, 0xdc, 0xc9, 0x47, 0x6c, 0xd4, 0x06, 0x5e, 0xfc, 0xe7, 0xc4, 0x81, 0xbe, 0x59, 0x85, 0x37, 0xf3, 0xf5, 0x3b, 0xbb, 0xb6, 0xff, 0x67, 0x97, 0x3a, 0x69, 0x83, 0x74, 0x54, 0x49, 0x9e, 0x31, 0x39, 0x8b, 0x46, 0x32, 0x88, 0xe3, 0xaa, 0xfb, 0x8b, 0x06, 0x00, 0xfd, 0xba, 0x1a, 0x25, 0xaf, 0x80, 0x6b, 0x83, 0xe1, 0x42, 0x5f, 0x38, 0x4e, 0x9e, 0xac, 0x75, 0x70, 0xf0, 0xc8, 0x23, 0x98, 0x1b, 0xa2, 0xcd, 0x3d, 0x86, 0x8f, 0xba, 0x94, 0x64, 0x87, 0x59, 0x62, 0x39, 0x91, 0xe3, 0x0f, 0x99, 0x7c, 0x3b, 0xfb, 0x33, 0xd0, 0x19, 0x15, 0x0f, 0x04, 0x67, 0xa9, 0x14, 0xf1, 0xeb, 0x79, 0xcd, 0x87, 0x27, 0x10, 0x6d, 0xbf, 0x7d, 0x53, 0x10, 0xd0, 0x97, 0x59, 0x43, 0xa6, 0x06, 0x7c, 0xc7, 0x90, 0x29, 0xb0, 0x92, 0x39, 0x51, 0x14, 0x17, 0xd9, 0x22, 0xc7, 0xc7, 0xac, 0x3d, 0xfd, 0xd8, 0xa4, 0x1c, 0x52, 0x45, 0x5b, 0x3c, 0x5e, 0x16, 0x4b, 0x82, 0x89, 0xe1, 0x41, 0xd8, 0x20, 0x91, 0x0f, 0x17, 0xa9, 0x66, 0x81, 0x29, 0x74, 0x3d, 0x93, 0x6f, 0x73, 0x12, 0xe1, 0x60, 0x4b, 0xc3, 0x5f, 0x73, 0xab, 0x16, 0x4a, 0x3f, 0xdd, 0xfe, 0x5f, 0xe1, 0x9b, 0x1a, 0x4a, 0x9f, 0x23, 0x7f, 0x61, 0xcb, 0x8e, 0xb7, 0x92, 0xe9, 0x5d, 0x09, 0x9a, 0x14, 0x55, 0xfb, 0x78, 0x9d, 0x8d, 0x16, 0x22, 0xf6, 0xc5, 0xe9, 0x76, 0xce, 0xf9, 0x51, 0x73, 0x7e, 0x36, 0xf7, 0xa9, 0xa4, 0xad, 0x19, 0xee, 0x0d, 0x06, 0x8e, 0x53, 0xd9, 0xf6, 0x04, 0x57, 0xd9, 0x14, 0x8d, 0x5a, 0x3c, 0xe8, 0x5a, 0x54, 0x6b, 0x45, 0xc5, 0xc6, 0x31, 0xd9, 0x95, 0xf1, 0x1f, 0x03, 0x7e, 0x47, 0x2f, 0xe4, 0xe8, 0x1f, 0xa7, 0xb9, 0xf2, 0xac, 0x40, 0x68, 0xb5, 0x30, 0x88, 0x58, 0xcd, 0x6d, 0x85, 0x86, 0x16, 0x5c, 0x9b, 0xd6, 0xb3, 0x22, 0xaf, 0xa7, 0x55, 0x40, 0x8d, 0xa9, 0xb9, 0x0a, 0x87, 0xf3, 0x73, 0x5a, 0x5f, 0x50, 0xeb, 0x85, 0x68, 0xda, 0xa5, 0x8e, 0xe7, 0xcb, 0xc5, 0x9a, 0xbf, 0x8f, 0xd2, 0xa4, 0x4e, 0x1e, 0xba, 0x72, 0x92, 0x88, 0x16, 0xc8, 0x90, 0xd1, 0xb0, 0xdb, 0xf6, 0x00, 0x42, 0x08, 0xff, 0x73, 0x81, 0xc6, 0x97, 0x75, 0x5a, 0xda, 0xc0, 0x13, 0x7c, 0xca, 0x34, 0x2b, 0x16, 0x93 ],
- const [ 0x5f, 0x66, 0x4b, 0xe0, 0xc0, 0xf3, 0xd2, 0xfc, 0x9a, 0x1a, 0x7e, 0xd6, 0xb5, 0x15, 0xef, 0x9c, 0x52, 0xad, 0x1c, 0x7f, 0xb3, 0xac, 0xf2, 0xc2, 0xde, 0x94, 0x3e, 0x10, 0x9f, 0x91, 0xcc, 0x12, 0xcc, 0xad, 0xd0, 0x41, 0xcc, 0x43, 0x86, 0xf9, 0x5a, 0xb6, 0x16, 0xcf, 0x87, 0x62, 0xba, 0x25, 0xfe, 0xd3, 0x22, 0xfc, 0x8c, 0x35, 0x18, 0x09, 0xe0, 0x0c, 0x60, 0x0a, 0x8f, 0x26, 0xe2, 0x5a, 0x5b, 0xcd, 0x0b, 0xc3, 0xb4, 0x41, 0x70, 0x94, 0x7f, 0x65, 0xb4, 0xf4, 0x17, 0xb8, 0xac, 0x76, 0x91, 0x87, 0xc2, 0xee, 0x45, 0x61, 0x97, 0x82, 0x89, 0xcc, 0xed, 0x04, 0xc0, 0x36, 0xc3, 0x7f, 0x94, 0x2e, 0xc1, 0x0f, 0x7f, 0xd4, 0xd7, 0xf6, 0x90, 0x8e, 0x22, 0xed, 0x6c, 0xfd, 0x0f, 0xb8, 0x93, 0x30, 0xc2, 0xfd, 0xe4, 0x17, 0xb9, 0x56, 0x64, 0x3a, 0xac, 0xa5, 0x3b, 0xaa, 0xb8, 0xa8, 0xff, 0x38, 0xbd, 0xcd, 0x35, 0xe6, 0x05, 0x47, 0x15, 0x9b, 0x26, 0x61, 0x8e, 0x1b, 0x29, 0x12, 0x8a, 0x35, 0xeb, 0xd2, 0x73, 0x3f, 0xc4, 0xad, 0xf6, 0xbf, 0x67, 0x96, 0x07, 0x6b, 0x09, 0xfd, 0x25, 0x54, 0xc6, 0xa4, 0xdf, 0x5e, 0x40, 0xae, 0x97, 0xf3, 0x89, 0xf9, 0x86, 0xf8, 0x43, 0xad, 0x00, 0x00, 0x05, 0x15, 0xf9, 0xc0, 0x01, 0xae, 0xc9, 0xc4, 0xe4, 0x7e, 0x2c, 0x60, 0xfe, 0xa7, 0x8d, 0xe8, 0xa3, 0x3c, 0x84, 0x23, 0xd1, 0x53, 0x9d, 0xfe, 0x12, 0x5c, 0x5b, 0x7e, 0xa4, 0xb1, 0x7c, 0xf8, 0xd8, 0x6e, 0x7f, 0x84, 0xb8, 0x82, 0x64, 0xaf, 0xec, 0x06, 0xb3, 0x70, 0xdf, 0xce, 0xbf, 0x5e, 0x1d, 0x3e, 0x2c, 0x1f, 0x00, 0x5f, 0xaf, 0x24, 0x8b, 0x32, 0x15, 0x93, 0x96, 0x45, 0x87, 0x85, 0x2b, 0x83, 0x0c, 0x72, 0x31, 0x50, 0x4f, 0xe9, 0x47, 0xd6, 0xa3, 0x85, 0xf3, 0x99, 0x44, 0x1c, 0xfc, 0x52, 0xdf, 0x39, 0x14, 0xfa, 0x55, 0xcd, 0xba, 0x25, 0xbd, 0x21, 0x5f, 0x91, 0xa8, 0x0f, 0xc8, 0xff, 0xa8, 0x72, 0xb3, 0x41, 0x13, 0xdb, 0xbd, 0x95, 0x04, 0x86, 0x83, 0x31, 0xa3, 0x8c, 0x08, 0x1f, 0xa6, 0x59, 0x57, 0x4b, 0x18, 0x61, 0x69, 0xdb, 0x59, 0x0f, 0x48, 0xbe, 0x67, 0xfe, 0x75, 0x88, 0x5b, 0x6c, 0x87, 0x7d, 0x37, 0xec, 0x16, 0xeb, 0xde, 0x5a, 0xd7, 0xbe, 0x64, 0x14, 0x08, 0x4e, 0x88, 0x67, 0x0f, 0x7b, 0x7f, 0x48, 0x5e, 0xfc, 0xf4, 0x45, 0x99, 0xf4, 0x4c, 0xbb, 0xfb, 0xc6, 0x2e, 0x48, 0xf6, 0x2b, 0x43, 0x83, 0x19, 0x82, 0x3a, 0xeb, 0x37, 0x67, 0x10, 0x1e, 0xc6, 0x86, 0x8e, 0x4c, 0x85, 0xb1, 0x13, 0xea, 0x62, 0x31, 0x93, 0xab, 0x9a, 0x5a, 0xe0, 0xac, 0x22, 0x63, 0x28, 0xee, 0x46, 0x74, 0xbf, 0x0a, 0x90, 0xff, 0x1f, 0x20, 0xeb, 0x54, 0x2e, 0x11, 0x08, 0x70, 0xbf, 0xee, 0x01, 0x16, 0x5a, 0xb0, 0x3c, 0x22, 0x40, 0x29, 0x93, 0x19, 0xaa, 0x3a, 0xb1, 0x04, 0x52, 0x47, 0xbf, 0x7f, 0x34, 0xe8, 0x41, 0x0d, 0x96, 0xe1, 0x3a, 0xae, 0x46, 0x55, 0x97, 0xb4, 0x23, 0x36, 0xca, 0xd2, 0xde, 0x00, 0xb6, 0x76, 0x02, 0xa7, 0xcb, 0x58, 0x32, 0xcd, 0x72, 0x53, 0xb2, 0x39, 0xab, 0x75, 0x2a, 0x85, 0xf4, 0x52, 0xa6, 0x16, 0x6e, 0x9d, 0xe0, 0x52, 0x3b, 0xf9, 0xc2, 0x0c, 0x2a, 0x0c, 0x27, 0x43, 0x96, 0xd5 ],
- const [ 0x9d, 0x64, 0xd8, 0x91, 0xd9, 0x9b, 0xb8, 0xab, 0xa2, 0x3a, 0x29, 0xa8, 0xf6, 0x9b, 0x32, 0x48, 0x27, 0x14, 0xe0, 0x31, 0xd3, 0x1d, 0xde, 0x33, 0x17, 0xb0, 0x46, 0xd0, 0x00, 0xf6, 0xb7, 0xfc, 0x42, 0x1f, 0xa8, 0x21, 0x2d, 0x91, 0xfb, 0x66, 0xdc, 0x46, 0xd5, 0x31, 0xb0, 0x6f, 0xae, 0xea, 0xfd, 0x5e, 0xa4, 0x03, 0x02, 0xa2, 0x15, 0x35, 0x1f, 0x74, 0x6c, 0x0c, 0x42, 0x52, 0x3b, 0xa5, 0xa3, 0xe9, 0x8b, 0xb7, 0xb1, 0x38, 0x70, 0xd0, 0x4b, 0xf3, 0xe0, 0xe1, 0x34, 0x25, 0xc4, 0xfd, 0xc1, 0x1a, 0x50, 0x5e, 0xd5, 0x7c, 0x90, 0xa9, 0x0f, 0xbc, 0x44, 0x72, 0x42, 0xb3, 0xee, 0x03, 0x26, 0x8a, 0x29, 0x59, 0x4d, 0xd7, 0x3c, 0x70, 0x58, 0x08, 0xef, 0xc1, 0x6a, 0x05, 0x9e, 0x08, 0xdd, 0x11, 0x8b, 0x4a, 0x34, 0xf1, 0x78, 0x17, 0x51, 0x51, 0x76, 0x0d, 0xe9, 0x63, 0xf8, 0x9d, 0x34, 0xc9, 0x2b, 0x12, 0xe9, 0xb5, 0x8a, 0xce, 0x69, 0x4f, 0xad, 0xd7, 0x3a, 0x57, 0x61, 0x93, 0xb8, 0x0b, 0xfe, 0xd0, 0x07, 0x4b, 0xf5, 0x07, 0x4c, 0xfb, 0xa9, 0xe2, 0x1d, 0xa9, 0x80, 0xfb, 0x36, 0x6f, 0x39, 0xe7, 0x6d, 0x1b, 0x80, 0x73, 0xe8, 0x8e, 0xbf, 0x2d, 0x8d, 0x62, 0x38, 0x27, 0xba, 0xd0, 0x51, 0xf7, 0x36, 0xd0, 0x2e, 0x02, 0x68, 0x81, 0x85, 0xfb, 0xc7, 0xcc, 0xae, 0xa6, 0x92, 0x44, 0xfa, 0xe2, 0xc1, 0x51, 0x46, 0xe6, 0x3b, 0x8e, 0xd0, 0xcb, 0x49, 0x6f, 0x49, 0x4b, 0x4b, 0x27, 0x2b, 0xc8, 0xaa, 0xc9, 0x4c, 0x8f, 0x0d, 0xad, 0xb4, 0x5f, 0xd0, 0x15, 0xab, 0x25, 0xb2, 0x10, 0x17, 0x0a, 0xcd, 0x9f, 0x05, 0xaf, 0xcc, 0x17, 0x86, 0xb7, 0x58, 0xc6, 0xbc, 0x87, 0xd3, 0xd9, 0x34, 0x49, 0x49, 0x7d, 0x76, 0x37, 0xa3, 0x45, 0xdb, 0x16, 0x1e, 0xcc, 0x9f, 0x00, 0xfc, 0x9b, 0x37, 0x67, 0x7a, 0x4d, 0xe5, 0x57, 0x01, 0xf1, 0x89, 0xfb, 0xa0, 0xaf, 0xba, 0x63, 0xba, 0xaf, 0x15, 0x84, 0xfc, 0x36, 0xd5, 0x81, 0x92, 0x12, 0xa5, 0x29, 0x9b, 0x39, 0xb2, 0xc0, 0xda, 0xad, 0x03, 0x02, 0xae, 0xa2, 0x0d, 0x65, 0x44, 0xe3, 0x82, 0x9f, 0x0b, 0x72, 0x6b, 0x68, 0x68, 0x6e, 0x76, 0x81, 0xac, 0x3a, 0x91, 0xf5, 0x43, 0xdc, 0xb7, 0x9f, 0x2d, 0xa3, 0x0a, 0xec, 0xb3, 0x0d, 0x23, 0xe2, 0x52, 0xe7, 0xa6, 0x61, 0xfc, 0xb6, 0x19, 0xa9, 0x80, 0x56, 0xf6, 0x1d, 0x46, 0xe1, 0xfe, 0x47, 0x3f, 0xd3, 0xd1, 0x1b, 0x1c, 0x6b, 0xbc, 0x80, 0xbe, 0x54, 0xd2, 0x0c, 0xee, 0x84, 0x3e, 0x0f, 0x4f, 0x65, 0xd7, 0xd4, 0x90, 0x32, 0xf5, 0x23, 0xe6, 0xa4, 0x83, 0x0a, 0xba, 0xcf, 0x56, 0xde, 0x9f, 0x46, 0xbd, 0x7c, 0x86, 0x86, 0x5a, 0xd4, 0x35, 0x92, 0x30, 0xa9, 0xf5, 0xda, 0xfc, 0x92, 0x8b, 0x61, 0xc9, 0x45, 0x6a, 0x1f, 0xbf, 0x14, 0x27, 0xa5, 0x3c, 0xb8, 0x2d, 0xff, 0x26, 0x4e, 0xb2, 0xde, 0x7f, 0x9f, 0xea, 0xf7, 0x39, 0xa4, 0x7a, 0xa6, 0x4c, 0x4a, 0x2f, 0xd7, 0x07, 0x72, 0xf0, 0x26, 0xa3, 0x3c, 0xf1, 0x45, 0x1e, 0x85, 0x2a, 0x9e, 0x47, 0xae, 0x08, 0x3a, 0x15, 0x9f, 0x62, 0xe2, 0x3c, 0x0c, 0xae, 0x84, 0x02, 0xf7, 0x75, 0xd8, 0x4f, 0x77, 0x04, 0x42, 0x04, 0xb7, 0x65, 0xfb, 0x8e, 0x41, 0x8d, 0x6c, 0xbb, 0x7d, 0xd7, 0xda, 0xcc, 0x74, 0xb1, 0x48, 0xcb, 0xda, 0x95, 0x99, 0x1f, 0x4c, 0x3c, 0xf6, 0x5d, 0xd6, 0x0e, 0x6f, 0x61, 0xb8, 0xdc, 0xe5, 0x9e, 0x6a, 0xd1, 0x27, 0xb2, 0xdd, 0xa6, 0x5b, 0x3d, 0x04, 0x16, 0xa0, 0xf4, 0x93, 0x92, 0xf1, 0xf1, 0x07, 0x35, 0x4c, 0x4d, 0xe6, 0xfa, 0x14, 0xf1, 0x48, 0x2d, 0xb5, 0xa9, 0x96, 0x1f, 0x86, 0x7b, 0x92, 0x1e, 0xf3, 0x36, 0x97, 0xa4, 0xdb, 0x4d, 0x22, 0xcf, 0x37, 0xe6, 0x92, 0x11, 0xfd, 0x2f, 0x2c, 0x29, 0x44, 0xf1, 0x62, 0x52, 0xa8, 0x67, 0x55, 0xba, 0xf0, 0x50, 0x98, 0x35, 0xee, 0x43, 0x37, 0x33, 0xa7, 0x43, 0xf8, 0xf0, 0xb4, 0x93, 0xe0, 0xea, 0xe8, 0xcb ],
- const [ 0x7d, 0xd5, 0x46, 0x39, 0x7a, 0x9a, 0x01, 0x29, 0x86, 0x1f, 0xb6, 0x81, 0x5d, 0x41, 0x9a, 0x30, 0x7f, 0x90, 0xd2, 0x59, 0xd5, 0x5f, 0x35, 0x03, 0x96, 0x17, 0x54, 0x12, 0x6c, 0xd1, 0xb7, 0x76, 0xd3, 0x23, 0x6a, 0xa2, 0xc2, 0x39, 0xb9, 0x3f, 0x8e, 0x28, 0x37, 0x22, 0x0b, 0x80, 0x05, 0x7c, 0xf4, 0x20, 0x50, 0x51, 0x8d, 0x4f, 0x1c, 0x2c, 0x86, 0x08, 0x40, 0x10, 0x23, 0x94, 0xb2, 0xb1, 0x9a, 0x5f, 0x05, 0xe4, 0xbd, 0x04, 0x30, 0x55, 0xd8, 0xaa, 0x91, 0x78, 0xdd, 0x93, 0x32, 0xc2, 0xbe, 0xf2, 0x4a, 0x18, 0x1b, 0xfd, 0x07, 0x88, 0x1d, 0x44, 0x8a, 0x37, 0xa2, 0x41, 0x34, 0x9a, 0x9a, 0x30, 0x20, 0xe9, 0xb0, 0x21, 0xf0, 0xd1, 0x2e, 0x4b, 0xcd, 0x6a, 0x1a, 0xa3, 0xa9, 0x68, 0xa5, 0xad, 0xc7, 0x95, 0xc7, 0x92, 0x7e, 0x7f, 0x23, 0x74, 0x3a, 0x6d, 0x30, 0xfe, 0xc3, 0x98, 0x9a, 0x3f, 0xc2, 0x98, 0xe6, 0xb8, 0x81, 0x1d, 0x56, 0xb3, 0xf2, 0xdf, 0x0c, 0xd7, 0xf3, 0xd8, 0x71, 0xfa, 0xd0, 0xb0, 0xd8, 0x36, 0x09, 0x79, 0x5f, 0x3f, 0x56, 0x9c, 0x16, 0xf3, 0xe9, 0x13, 0x64, 0x33, 0xf3, 0xd9, 0xa6, 0xf2, 0x69, 0x9f, 0x18, 0x8b, 0x08, 0xc1, 0xf9, 0x58, 0x97, 0x78, 0xea, 0x80, 0x6c, 0x51, 0x98, 0x10, 0x31, 0xde, 0x9a, 0x4e, 0xe8, 0xab, 0x9d, 0x4a, 0x2d, 0x73, 0xbe, 0xb5, 0xbb, 0x94, 0x37, 0xf6, 0x32, 0xc1, 0x3e, 0x7b, 0x18, 0xf7, 0x2a, 0x4d, 0x1d, 0xb2, 0xd8, 0xe8, 0xa3, 0x60, 0x4d, 0x49, 0x7d, 0x16, 0x9c, 0x48, 0xf7, 0x82, 0x0a, 0x28, 0x17, 0x21, 0x71, 0x6d, 0x23, 0xb1, 0xe2, 0xed, 0x63, 0xea, 0x8e, 0x2a, 0x28, 0x69, 0xe7, 0xdf, 0x0e, 0xed, 0x02, 0xd9, 0x7d, 0xc5, 0x40, 0x08, 0x76, 0x89, 0x2d, 0xd6, 0x8c, 0x09, 0xa8, 0xb7, 0x30, 0x83, 0x45, 0x02, 0x32, 0x19, 0xef, 0xff, 0x85, 0x81, 0xd2, 0x41, 0x43, 0xff, 0x78, 0x36, 0xf0, 0x90, 0x31, 0xfc, 0x03, 0x68, 0xb9, 0x76, 0xa2, 0x9f, 0x15, 0xa0, 0xae, 0x28, 0xbe, 0x1f, 0xff, 0x02, 0x01, 0x1d, 0xf1, 0xb2, 0xa6, 0x53, 0x1f, 0xf0, 0xd0, 0x67, 0x6e, 0xa1, 0x24, 0x79, 0x4e, 0x05, 0x2d, 0xf9, 0x3c, 0x32, 0xff, 0xbb, 0x8b, 0xc1, 0x1b, 0x4d, 0x65, 0xc7, 0x93, 0x88, 0x0d, 0x07, 0x6f, 0x65, 0x66, 0x65, 0x4e, 0x12, 0xb9, 0x9e, 0x51, 0x45, 0xb3, 0x37, 0x34, 0xd1, 0xad, 0xb3, 0xbe, 0x77, 0x31, 0x09, 0x5c, 0xfe, 0xb9, 0x55, 0x09, 0x85, 0xb9, 0xce, 0x70, 0x19, 0xe0, 0xf8, 0x55, 0x83, 0x9b, 0x1b, 0x31, 0x63, 0xdc, 0xf3, 0x1c, 0x83, 0x19, 0xa9, 0xf0, 0x65, 0x97, 0x02, 0xac, 0x1e, 0xe8, 0xd7, 0x16, 0x67, 0xb3, 0xc5, 0xa5, 0xf2, 0xb3, 0x25, 0x9d, 0xfa, 0x02, 0x3e, 0x7c, 0x1e, 0x98, 0xba, 0x95, 0x6f, 0x0e, 0x57, 0xfb, 0xc8, 0xa8, 0xdf, 0xa0, 0x5e, 0x93, 0x5a, 0xbe, 0x97, 0x6b, 0x82, 0x76, 0x20, 0x01, 0x77, 0xb8, 0x3a, 0x5a, 0xb4, 0x62, 0x54, 0xfb, 0x42, 0xac, 0xdf, 0x63, 0x2b, 0xc3, 0x5e, 0xda, 0x32, 0xb4, 0xbc, 0x69, 0xc1, 0x8c, 0xe3, 0x2a, 0x23, 0xbd, 0x8a, 0xc2, 0xf3, 0xc4, 0x4e, 0x2b, 0xd5, 0x09, 0x05, 0xb7, 0x64, 0x07, 0x4f, 0x51, 0x6b, 0xac, 0x6d, 0x06, 0x57, 0x03, 0x57, 0xc5, 0xec, 0x10, 0x08, 0x63, 0x38, 0xfc, 0x1d, 0xe2, 0xc5, 0x72, 0x9e, 0xf3, 0x13, 0x48, 0x1c, 0xb9, 0x45, 0x62, 0xfc, 0xd0, 0x1b, 0xd3, 0x12, 0x8e, 0x20, 0x46, 0x72, 0x89, 0x25, 0x9d, 0x82, 0x59, 0xed, 0xd7, 0x54, 0x9f, 0x2a, 0x37, 0x33, 0x46, 0xa8, 0xa2, 0x7c, 0x08, 0xc9, 0x4a, 0xb0, 0x34, 0x31, 0x89, 0xc6, 0xaf, 0xc2, 0x0f, 0xc6, 0x39, 0xcb, 0x40, 0x93, 0xf2, 0x7c, 0xd8, 0x08, 0x1d, 0x9e, 0xd1, 0x47, 0x23, 0x81, 0x86, 0x4e, 0xdb, 0x35, 0x18, 0xcc, 0x08, 0xfc, 0x11, 0x32, 0x24, 0x00, 0x47, 0x0c, 0x5c, 0x42, 0x04, 0x92, 0xdb, 0xd3, 0x63, 0x7a, 0x4b, 0x46, 0xfd, 0x11, 0x99, 0x65, 0xc5, 0x8a, 0xf9, 0x23, 0x31, 0x96, 0x2b, 0xd2, 0x9b, 0x35, 0xfc, 0x96, 0xe6, 0xcb, 0x0f, 0x1a, 0x64, 0x76, 0xdd, 0x81, 0xf7, 0x9f, 0xfb, 0xa0, 0x77, 0xcf, 0x9c, 0x6a, 0x54, 0xc4, 0x56, 0xab, 0x7d, 0xc5, 0x29, 0xfa, 0x80, 0x32, 0xbd, 0xe8, 0xf2, 0x5f, 0xeb, 0x7e, 0x11, 0xa2, 0x7f, 0xe7, 0xa8, 0xab, 0x3c, 0x69, 0x33, 0x14, 0x21, 0x9a, 0x44, 0x39, 0xeb, 0xd0, 0x25, 0x4a, 0xdb, 0xd9, 0xbf, 0x9f, 0xb9, 0xec, 0xba, 0x4b, 0x19, 0xe0, 0xe6, 0xf3, 0xdd, 0x9c, 0xda, 0xe1, 0xfb, 0xcf, 0xdb, 0x54, 0x81, 0xe1, 0xff, 0x1a, 0xd6, 0x29, 0x91, 0x61, 0x42, 0x60, 0xb8, 0xcb, 0xb0, 0x55, 0x54, 0xc0, 0xb3, 0xe3, 0x29, 0x08, 0xc8, 0x20, 0x3f, 0x99 ],
- const [ 0x42, 0x17, 0x2d, 0x5f, 0xda, 0xe4, 0x47, 0xc4, 0xcf, 0xdd, 0x13, 0x83, 0x6b, 0xb8, 0xb8, 0x33, 0xc0, 0xcb, 0x85, 0xf7, 0x32, 0x7f, 0x92, 0x98, 0x35, 0x01, 0xa4, 0xd7, 0x58, 0x3a, 0x52, 0x01, 0x83, 0x02, 0x66, 0xc3, 0x7c, 0x90, 0x86, 0x40, 0xb0, 0x35, 0x14, 0x61, 0x31, 0x4b, 0x52, 0x6c, 0xfb, 0x68, 0xca, 0xd9, 0x7b, 0xd7, 0xed, 0x61, 0x52, 0x48, 0xfa, 0x57, 0x56, 0xc6, 0x21, 0x3b, 0xd9, 0xea, 0xe9, 0x8d, 0x2f, 0x4e, 0xcf, 0xdf, 0x6a, 0x45, 0x2f, 0x2e, 0x68, 0xc9, 0x68, 0x72, 0x10, 0xb5, 0x3c, 0x74, 0xd8, 0x35, 0x75, 0xe0, 0x8a, 0x7a, 0xce, 0x9b, 0x49, 0xb2, 0x10, 0x56, 0xcf, 0x37, 0x7c, 0x64, 0xf8, 0x06, 0x69, 0xc8, 0x84, 0x74, 0x2e, 0x93, 0x18, 0x1c, 0x42, 0x6d, 0x87, 0x1c, 0xa2, 0x71, 0x50, 0x81, 0x73, 0x3e, 0x68, 0xff, 0xe9, 0x4a, 0x39, 0xe6, 0x67, 0x7a, 0xea, 0x51, 0xe8, 0xf0, 0xe1, 0xa0, 0x9d, 0x25, 0x86, 0x29, 0xd7, 0x37, 0x4a, 0x2b, 0x28, 0x84, 0xe9, 0x03, 0xc5, 0x77, 0xeb, 0xa3, 0x2f, 0xa2, 0x71, 0x3f, 0x13, 0x0d, 0x2e, 0x49, 0x6e, 0xce, 0xb4, 0xa0, 0xf4, 0xda, 0xf1, 0x05, 0xb3, 0x1b, 0xf9, 0xce, 0xf4, 0xc3, 0x06, 0xde, 0x62, 0xdf, 0xbc, 0xd4, 0x6e, 0x2f, 0xb2, 0x83, 0xf1, 0x35, 0x2f, 0xa3, 0x13, 0x8c, 0x31, 0xc5, 0x6d, 0x7b, 0xb4, 0x8d, 0x6a, 0xca, 0x30, 0x1b, 0xf3, 0xd4, 0x64, 0xca, 0x4b, 0xde, 0x52, 0x1d, 0x37, 0xa7, 0x8b, 0xf6, 0x63, 0x40, 0xac, 0x09, 0x01, 0x1e, 0x29, 0x91, 0xb3, 0x6e, 0x49, 0x41, 0xab, 0xa8, 0x72, 0x7e, 0x10, 0x67, 0xa7, 0xcb, 0xa4, 0x78, 0x4f, 0x85, 0xa5, 0x31, 0x38, 0xd0, 0xf1, 0x04, 0xdb, 0xd1, 0x6d, 0x54, 0xe2, 0x1e, 0xa6, 0x86, 0xe7, 0x72, 0xb9, 0x5c, 0x7f, 0xa6, 0x71, 0x7e, 0x77, 0xdc, 0xb0, 0x5a, 0x5d, 0xfe, 0x10, 0x2e, 0x42, 0x67, 0xc9, 0x63, 0xbf, 0xdf, 0xd6, 0x1d, 0x36, 0xcd, 0x53, 0x10, 0x5a, 0xa8, 0x2a, 0x95, 0xf2, 0xaf, 0xee, 0xfd, 0xda, 0xda, 0x07, 0x25, 0x4a, 0x10, 0x10, 0x4a, 0x5a, 0x9a, 0x7d, 0x1f, 0xc6, 0xd8, 0x81, 0x1d, 0xef, 0x32, 0x2f, 0x1b, 0x23, 0x52, 0xdf, 0x1e, 0x1e, 0x90, 0xd3, 0x72, 0xd1, 0xae, 0x1a, 0xfa, 0x62, 0xc6, 0xb5, 0xc4, 0x73, 0x80, 0xf9, 0xe0, 0xa7, 0x88, 0x34, 0x73, 0x62, 0x40, 0x93, 0x07, 0xd1, 0xb2, 0x43, 0x25, 0x2b, 0xc8, 0xd7, 0x26, 0x36, 0xbf, 0xea, 0x46, 0x0c, 0xd9, 0x05, 0xfa, 0x1f, 0x52, 0xc3, 0x84, 0x7b, 0x96, 0x32, 0xc4, 0x4b, 0xb1, 0x7d, 0x51, 0x9f, 0x07, 0xc8, 0xc8, 0x6c, 0x45, 0x5c, 0x64, 0xd4, 0x97, 0x04, 0xcf, 0xa8, 0x1c, 0xb6, 0x38, 0x2c, 0x97, 0x76, 0xa6, 0x1a, 0x67, 0x78, 0x8c, 0xe9, 0xb9, 0x85, 0x9d, 0x4e, 0xfc, 0x9f, 0xe1, 0x04, 0x95, 0xe8, 0x09, 0xc9, 0xd4, 0xc0, 0x00, 0xa9, 0x27, 0x2e, 0xc2, 0x7e, 0x8e, 0x81, 0x71, 0xb8, 0x4f, 0x37, 0xa6, 0x5a, 0xeb, 0x1d, 0x05, 0x45, 0x50, 0xb8, 0x14, 0xb9, 0x50, 0xe4, 0x4d, 0x19, 0x52, 0xbb, 0x71, 0xee, 0x48, 0xb8, 0x20, 0x2f, 0xe1, 0x1c, 0xa7, 0xc0, 0xff, 0x91, 0x19, 0x38, 0x6b, 0x0e, 0xa1, 0xe7, 0xc8, 0xfa, 0x16, 0x18, 0xc5, 0x94, 0xd0, 0x93, 0x97, 0x92, 0xba, 0x66, 0xa7, 0x08, 0xa9, 0xe5, 0x87, 0x8c, 0xec, 0xf0, 0x2b, 0x98, 0x25, 0x74, 0x56, 0x30, 0x57, 0x34, 0x52, 0xc4, 0x3f, 0xca, 0xe4, 0x57, 0xe8, 0xe8, 0x7f, 0xe1, 0x7a, 0xe4, 0xb8, 0xf2, 0x52, 0x74, 0xfa, 0x99, 0x58, 0xb6, 0x7b, 0x84, 0x8d, 0x73, 0x6e, 0x68, 0xe4, 0xa4, 0x7b, 0xa4, 0x53, 0x35, 0x6c, 0x21, 0x29, 0x0a, 0x29, 0x7c, 0xa2, 0x40, 0xe6, 0x67, 0xb9, 0xb5, 0x9b, 0x4c, 0x3d, 0xca, 0xb4, 0x34, 0x27, 0x67, 0x0a, 0xe8, 0x2b, 0x40, 0x13, 0x55, 0x8d, 0x57, 0x55, 0x35, 0x36, 0xc2, 0x21, 0xec, 0x07, 0xaf, 0x7d, 0xb0, 0x6d, 0xa5, 0x62, 0xed, 0x36, 0x0d, 0x28, 0xe8, 0xa3, 0xf0, 0x3e, 0xa2, 0xbe, 0x02, 0x1e, 0xff, 0xed, 0xe0, 0x80, 0x27, 0xc8, 0x96, 0xce, 0x2d, 0x28, 0x64, 0xd9, 0xef, 0x80, 0xc2, 0xca, 0x3d, 0x71, 0xa1, 0x5b, 0x3d, 0x98, 0xf4, 0x47, 0x0d, 0xab, 0x6f, 0xfe, 0xab, 0xc4, 0x8e, 0x9e, 0x12, 0xfc, 0xda, 0x1f, 0xa6, 0x3c, 0x68, 0xcd, 0xd2, 0x50, 0xa2, 0xfc, 0xf0, 0x3d, 0x49, 0xf7, 0x69, 0xd5, 0xbb, 0x39, 0x1d, 0x88, 0x72, 0xe0, 0x05, 0x7d, 0xce, 0x5e, 0x16, 0xe2, 0x14, 0x72, 0x69, 0x80, 0xb6, 0x57, 0x9a, 0x92, 0xd5, 0x3b, 0x6e, 0xd7, 0x04, 0xf2, 0xb8, 0xe6, 0x4f, 0xec, 0x7d, 0xc2, 0x7c, 0x64, 0x56, 0xae, 0x90, 0xdb, 0x16, 0x42, 0x95, 0xc5, 0xad, 0xbf, 0x9b, 0x82, 0x4c, 0xa0, 0xfd, 0x8f, 0xca, 0x71, 0xe5, 0xfe, 0x47, 0xe4, 0x12, 0x23, 0x0f, 0x22, 0xd9, 0x91, 0xc0, 0x5f, 0x6a, 0x45, 0xb0, 0xb1, 0x55, 0x20, 0x89, 0x22, 0x4d, 0x9b, 0x36, 0x04, 0x2b, 0xb6, 0x03, 0x84, 0x36, 0x31, 0xff, 0x82, 0xa1, 0xff, 0xa5, 0xa0, 0x55, 0xf8, 0xbc, 0x99, 0xf1, 0xce, 0x7c, 0xd5, 0x0f, 0x42, 0xf2, 0x3a, 0xca, 0x97, 0xa6, 0x44, 0x7d, 0x47, 0x7a, 0x58, 0xcc, 0xf6, 0xd5, 0x55, 0xe9, 0xa4, 0x01, 0x6d, 0x10, 0x26, 0xd2, 0x33, 0x54, 0xd7, 0x89, 0xf4, 0x9e, 0x8b, 0xf7, 0x4b, 0xf3, 0xc4, 0xe6, 0xf0, 0xf5, 0x29, 0xb4, 0xd1, 0xad, 0x33, 0x41, 0x64, 0x87, 0x2a, 0x0c, 0x3b, 0x9e, 0x50, 0x98, 0xd9, 0x3a ],
- const [ 0x9c, 0x4b, 0xdc, 0x3b, 0x1a, 0xf6, 0xab, 0x9d, 0xc7, 0xbd, 0x2d, 0xd9, 0x0e, 0x2e, 0x42, 0x9a, 0x07, 0xd5, 0xdd, 0x5c, 0x48, 0xbb, 0x70, 0x16, 0xfe, 0x2c, 0xa5, 0x1d, 0x3c, 0xbd, 0x4f, 0x45, 0x92, 0x8e, 0xa0, 0x49, 0xe2, 0xcd, 0x9c, 0x6d, 0x6f, 0x7b, 0xcd, 0x61, 0x37, 0x73, 0x39, 0x69, 0x83, 0xa8, 0x91, 0xbb, 0xbc, 0xae, 0xab, 0x28, 0x80, 0x7c, 0x32, 0xff, 0xf5, 0x70, 0x9d, 0x2f, 0x5d, 0x93, 0x5d, 0xab, 0xeb, 0x1f, 0x5b, 0x13, 0xd5, 0x3e, 0xa1, 0x90, 0xab, 0x15, 0x57, 0x00, 0xe7, 0x01, 0xf2, 0x53, 0xc5, 0x20, 0xa8, 0x34, 0x55, 0x14, 0x27, 0xec, 0xce, 0x03, 0x86, 0x84, 0x25, 0xe2, 0x7c, 0x2a, 0xde, 0xf4, 0xd0, 0xd7, 0x23, 0x8d, 0x10, 0x2e, 0x13, 0x1c, 0x86, 0xa6, 0x5c, 0x68, 0x68, 0xeb, 0x0c, 0x1a, 0x4f, 0x82, 0xa4, 0x7c, 0xea, 0xac, 0x6e, 0x80, 0xf4, 0x8e, 0x11, 0x04, 0x63, 0x8e, 0x63, 0x54, 0xe3, 0x00, 0x7e, 0xf1, 0x82, 0x02, 0x16, 0x91, 0xad, 0xa4, 0x0a, 0x66, 0x5b, 0x4d, 0x38, 0xa3, 0x88, 0x5a, 0x96, 0x3d, 0xe5, 0x07, 0x7f, 0xee, 0xce, 0x93, 0x4a, 0x80, 0x7c, 0x9f, 0x21, 0x48, 0x7c, 0xd8, 0x10, 0xf1, 0x5f, 0xd5, 0x5d, 0x7b, 0xb4, 0x42, 0x18, 0x82, 0x33, 0x3f, 0xf2, 0xc4, 0x3b, 0x03, 0x53, 0xde, 0x7f, 0xc5, 0xa6, 0x56, 0xfc, 0xdc, 0xf8, 0xde, 0x2e, 0x25, 0xc1, 0xd7, 0x83, 0xa5, 0x01, 0x15, 0x10, 0x6f, 0x8f, 0xe2, 0x82, 0xc8, 0xae, 0x45, 0x58, 0x8a, 0xe2, 0x84, 0x50, 0xc6, 0x02, 0xe7, 0x1f, 0xad, 0x8d, 0xbf, 0x65, 0xb1, 0x41, 0xa7, 0xe0, 0xe7, 0xea, 0x0a, 0xe0, 0xb0, 0x79, 0xe5, 0xfb, 0x98, 0x55, 0xce, 0x01, 0x7e, 0xf6, 0x36, 0x33, 0xf6, 0xaf, 0xeb, 0xaf, 0xeb, 0xcb, 0xe0, 0x2f, 0x89, 0xdc, 0x31, 0xf3, 0x59, 0x50, 0x62, 0xfc, 0xae, 0x45, 0xe8, 0x7b, 0x41, 0x9f, 0xea, 0x89, 0x18, 0x57, 0x48, 0x18, 0xac, 0x15, 0xdd, 0x2a, 0x4a, 0x02, 0x01, 0x41, 0xba, 0xd7, 0x52, 0x16, 0x1f, 0x3b, 0xb5, 0x8d, 0x1e, 0x4b, 0x97, 0xe9, 0x42, 0x7a, 0x79, 0x3c, 0x9f, 0x9b, 0xab, 0x22, 0xb6, 0x3c, 0x57, 0xaf, 0x99, 0x36, 0xc2, 0xa6, 0x50, 0x82, 0xcf, 0xec, 0x7a, 0x4e, 0xc5, 0x3c, 0x37, 0x50, 0x51, 0x1b, 0x46, 0x5b, 0xcf, 0x0f, 0x6b, 0x30, 0xc5, 0x0c, 0x14, 0x96, 0xb0, 0x2f, 0x3b, 0xad, 0x04, 0xaf, 0x8e, 0x7f, 0x6e, 0x10, 0xce, 0xd8, 0x5c, 0x99, 0x75, 0x58, 0xbf, 0x09, 0x9b, 0xc6, 0x0f, 0x86, 0x1a, 0xa7, 0x90, 0xd6, 0xf1, 0x0f, 0xd5, 0xd1, 0xe6, 0xb8, 0x82, 0x16, 0x70, 0x51, 0x56, 0xfe, 0xd3, 0x18, 0x68, 0xce, 0x8d, 0xab, 0xb0, 0x31, 0xf1, 0x1b, 0xca, 0xe5, 0x12, 0x43, 0xf7, 0xb4, 0xe2, 0x58, 0x65, 0xa6, 0x9b, 0xc1, 0xb0, 0x75, 0x5e, 0x28, 0xa8, 0x41, 0x1a, 0xd1, 0x55, 0x85, 0xb0, 0x2a, 0x38, 0x4a, 0x55, 0xa4, 0xd4, 0x9a, 0x37, 0xc2, 0x6d, 0x38, 0x63, 0x6f, 0x10, 0x8e, 0xe6, 0x95, 0xd3, 0xe7, 0x32, 0xeb, 0x5e, 0xde, 0xc4, 0x0f, 0xaa, 0x16, 0x04, 0xd4, 0x09, 0x2c, 0x6d, 0xdd, 0x67, 0xea, 0xed, 0x6b, 0xcf, 0xbe, 0x8f, 0x73, 0x31, 0x6a, 0x57, 0xf4, 0x62, 0xfc, 0x6d, 0x87, 0x64, 0x01, 0x7f, 0x38, 0xe8, 0xf6, 0x60, 0x94, 0x11, 0xff, 0xf5, 0x03, 0x7b, 0xdc, 0x51, 0x58, 0x7c, 0x18, 0x1f, 0xa7, 0xa9, 0x83, 0x40, 0x56, 0x9c, 0xe3, 0xb6, 0x77, 0xf5, 0xe7, 0xc1, 0x55, 0x9f, 0x5c, 0x47, 0x4d, 0x55, 0xa3, 0x79, 0xe0, 0x64, 0x63, 0xb4, 0x06, 0xb2, 0x7b, 0xa5, 0xc4, 0xff, 0x3b, 0xb1, 0x00, 0x6b, 0xd3, 0x94, 0x95, 0x38, 0x0b, 0x48, 0xa3, 0xd2, 0x35, 0x28, 0x28, 0x0c, 0x60, 0x55, 0xd5, 0xad, 0xcf, 0x59, 0x1a, 0x2b, 0xaa, 0x0a, 0x84, 0xb6, 0xf2, 0xb1, 0x48, 0x78, 0xba, 0x6c, 0x20, 0x1c, 0x95, 0xd1, 0x55, 0x8d, 0x4b, 0xd4, 0x1d, 0x00, 0xd0, 0xeb, 0x28, 0x34, 0x76, 0x70, 0x76, 0xf8, 0x61, 0x46, 0x6b, 0xef, 0x3b, 0xbf, 0x25, 0x90, 0x2a, 0xbd, 0x0d, 0x70, 0xff, 0x18, 0xac, 0xc4, 0xb1, 0x40, 0xc1, 0x21, 0x09, 0x24, 0x90, 0x87, 0x9e, 0x52, 0x7c, 0x9e, 0x04, 0x5f, 0xd8, 0x3f, 0x41, 0x89, 0xfb, 0x36, 0x80, 0x9b, 0x92, 0x47, 0x0a, 0x11, 0x3b, 0x6f, 0x71, 0x7d, 0x4f, 0x6b, 0x0e, 0x29, 0xfe, 0x7f, 0xae, 0xfe, 0xa2, 0x70, 0x89, 0xa4, 0x4d, 0xd2, 0x74, 0xeb, 0xa4, 0x8a, 0x57, 0x6a, 0xf1, 0x8b, 0xe0, 0x66, 0x73, 0xe3, 0x79, 0xf5, 0xf9, 0xfb, 0x78, 0x62, 0xaf, 0x1a, 0x96, 0xd4, 0x37, 0x2c, 0xa3, 0x2b, 0xfb, 0xc2, 0x78, 0x2b, 0xc2, 0x59, 0x2c, 0xdc, 0x82, 0xdf, 0x8b, 0x30, 0x75, 0x73, 0xc3, 0xe7, 0x6f, 0x6d, 0x61, 0xb0, 0x6f, 0x9e, 0x7c, 0x91, 0x74, 0xd9, 0x30, 0x88, 0x92, 0xb1, 0x4f, 0x73, 0x44, 0x85, 0x52, 0x2d, 0x04, 0xba, 0x96, 0xfa, 0x19, 0x48, 0xc5, 0x25, 0xb1, 0x78, 0x91, 0xe7, 0x2f, 0xec, 0xa9, 0x8b, 0xc6, 0xdf, 0xe5, 0xd0, 0x47, 0xae, 0xc4, 0x8f, 0x37, 0x97, 0x19, 0x9d, 0x25, 0xc1, 0x01, 0xf3, 0x3a, 0x7d, 0x18, 0x0c, 0x12, 0xcc, 0xed, 0x8f, 0xca, 0x21, 0xb3, 0x2e, 0x5b, 0x68, 0x39, 0xce, 0x26, 0x46, 0x1c, 0xe8, 0xd0, 0xa3, 0x3b, 0x2f, 0x4f, 0x66, 0x6b, 0x73, 0x45, 0x7f, 0x6c, 0xc5, 0x8d, 0x2b, 0x1c, 0xdc, 0x14, 0x73, 0xeb, 0xb7, 0xeb, 0xf6, 0x8f, 0x84, 0x9a, 0xe9, 0xf9, 0xc1, 0xb6, 0x5c, 0x87, 0xa1, 0xb6, 0xbf, 0x7b, 0xb1, 0x02, 0xa4, 0xac, 0xbb, 0x4d, 0xc7, 0x7b, 0xea, 0x25, 0x4b, 0x09, 0x30, 0xc8, 0x46, 0xa7, 0xe5, 0x3a, 0x80, 0x8e, 0xb1, 0x94, 0x78, 0xd1, 0xab, 0x9f, 0xa8, 0x8f, 0xc2, 0xa1, 0x0a, 0x6d, 0x5d, 0x77, 0xdb, 0x43, 0x3e, 0xe4, 0x9f, 0x16, 0xac, 0x29, 0x65, 0x47, 0xd1, 0xd6, 0x4c, 0x09, 0x61, 0xdf, 0x46, 0x18, 0x7c, 0xf2, 0x1c, 0xa9, 0xd6, 0x08, 0xb3, 0x9c, 0x15, 0x3b, 0x8d, 0xf9, 0x7a, 0xd7, 0x92, 0x9a, 0xc4, 0xb3, 0x11, 0x25, 0x51, 0xc2, 0x02, 0x3e, 0x87, 0xe5, 0x8e, 0xfa, 0x72, 0x03, 0xd1, 0x96, 0xae, 0x5c, 0xde, 0x69, 0x88, 0x1a, 0x03, 0x17, 0x60, 0x29, 0x4f, 0x08, 0x52 ],
- const [ 0xbb, 0x64, 0xbe, 0x5c, 0x71, 0x91, 0x87, 0x56, 0xc6, 0x11, 0xcd, 0x6e, 0x00, 0x1d, 0xba, 0xb5, 0x3e, 0x6b, 0xf9, 0xbe, 0x16, 0x48, 0x75, 0x53, 0x7c, 0xe7, 0x63, 0x67, 0xe5, 0xf9, 0x82, 0x4c, 0xad, 0x7d, 0xa1, 0x26, 0xb6, 0xda, 0x63, 0xa0, 0x53, 0x2b, 0x3f, 0xdd, 0x64, 0xda, 0xca, 0xb2, 0xc2, 0x70, 0x39, 0x12, 0xdd, 0xab, 0x21, 0xc9, 0xa3, 0xd2, 0x82, 0x6d, 0xa4, 0x45, 0x04, 0x92, 0x74, 0x58, 0x80, 0x3e, 0x51, 0x61, 0xc2, 0x9d, 0x06, 0x10, 0x8e, 0xf5, 0x0f, 0xff, 0xe0, 0xdb, 0xfe, 0x8a, 0x78, 0xa8, 0x1e, 0xe1, 0x96, 0x27, 0x55, 0x5b, 0x03, 0x90, 0x4f, 0x0e, 0x50, 0xba, 0xd8, 0x9c, 0x62, 0x8c, 0x8a, 0x4f, 0x2f, 0xb5, 0xa9, 0x69, 0xc2, 0x9c, 0x4b, 0xb5, 0x85, 0x9a, 0xbc, 0x62, 0xbf, 0x68, 0x20, 0x11, 0x5c, 0xd3, 0x5a, 0x2d, 0xed, 0xb7, 0x2d, 0x7b, 0xef, 0x2a, 0xa1, 0xf2, 0x50, 0xf8, 0xa9, 0xcc, 0x2f, 0x50, 0x02, 0xdd, 0xe4, 0xbc, 0x5e, 0x24, 0x40, 0x56, 0xc2, 0xa0, 0x15, 0x3a, 0x2d, 0x64, 0xf9, 0x37, 0x7a, 0xee, 0x48, 0xca, 0x87, 0xb5, 0x68, 0x4c, 0x97, 0x01, 0x51, 0x6a, 0xf5, 0xff, 0x4c, 0xd6, 0xdb, 0x15, 0xfa, 0x3c, 0x91, 0x73, 0x99, 0x78, 0xd9, 0xeb, 0x83, 0x06, 0x8b, 0x02, 0xf7, 0xb9, 0x7d, 0x47, 0x1c, 0xb0, 0xa5, 0xe3, 0x43, 0x87, 0x82, 0x72, 0x6d, 0xca, 0xb7, 0x11, 0x0d, 0xaf, 0xfa, 0xb8, 0x0f, 0x04, 0x2c, 0xcb, 0x18, 0x66, 0xc9, 0xeb, 0x10, 0xb4, 0x83, 0x12, 0xde, 0xc3, 0x2a, 0xdf, 0x72, 0x53, 0xcf, 0x2e, 0x09, 0x42, 0x29, 0xec, 0xac, 0x00, 0x38, 0x2a, 0xfa, 0x43, 0x27, 0x6f, 0x28, 0xfc, 0x77, 0x53, 0x46, 0x89, 0x5a, 0x49, 0xc4, 0x2c, 0x5d, 0xbd, 0x34, 0xbc, 0x4a, 0x5f, 0x51, 0x9a, 0x4d, 0xbe, 0x41, 0xe7, 0x55, 0x18, 0x17, 0xf4, 0xbd, 0x70, 0x9c, 0xfa, 0x2c, 0xe2, 0x4f, 0x0c, 0xba, 0x34, 0xaa, 0x49, 0x54, 0xad, 0xa7, 0x56, 0x61, 0x2a, 0x83, 0x0c, 0xa5, 0x6e, 0xc2, 0x6d, 0x66, 0xba, 0x73, 0xdd, 0xce, 0x9d, 0xb5, 0x8f, 0x91, 0x0e, 0x7a, 0x3d, 0xd0, 0xb8, 0x8b, 0x1c, 0x3c, 0x95, 0xcd, 0x0f, 0x7e, 0xbe, 0xc2, 0x1a, 0xd7, 0x82, 0x52, 0x1a, 0x03, 0xb5, 0xcc, 0xb4, 0x64, 0x4a, 0x28, 0x8c, 0x5c, 0x25, 0x8f, 0xb7, 0xfb, 0x2a, 0x1d, 0x72, 0xda, 0x9a, 0xe5, 0x14, 0x46, 0x9f, 0x35, 0x41, 0xa1, 0x25, 0x1c, 0x61, 0x06, 0xec, 0x2a, 0x50, 0x2c, 0xdb, 0x77, 0x57, 0x8d, 0x98, 0xe6, 0x5c, 0xc7, 0x55, 0xab, 0x55, 0x42, 0xed, 0x0b, 0x03, 0x13, 0x2f, 0x63, 0xdc, 0x20, 0x79, 0x6c, 0x49, 0x85, 0x8a, 0xbd, 0x11, 0x37, 0x91, 0x92, 0x15, 0xe7, 0x89, 0xcb, 0x3f, 0x2a, 0xc9, 0x38, 0xb5, 0xd6, 0xd7, 0x13, 0x52, 0xaf, 0x7e, 0xce, 0x56, 0x43, 0x20, 0x10, 0x5c, 0x12, 0x4d, 0xfa, 0x8d, 0xf2, 0x93, 0xae, 0x14, 0xb2, 0x98, 0x12, 0xd1, 0xfe, 0x67, 0xd1, 0x52, 0x82, 0x08, 0xa3, 0xff, 0x53, 0x53, 0xcf, 0x94, 0x8a, 0x05, 0xee, 0xd5, 0x32, 0x14, 0xf1, 0x7d, 0x64, 0x40, 0x65, 0x77, 0xb0, 0xeb, 0xf6, 0x50, 0xbf, 0x2a, 0x32, 0xed, 0x37, 0x1c, 0x90, 0x79, 0xdf, 0x7b, 0xb1, 0xa2, 0x04, 0x70, 0xe5, 0x05, 0x1b, 0xac, 0xf1, 0xe6, 0xa7, 0xb4, 0x10, 0x25, 0x5d, 0x7c, 0x37, 0x6d, 0x86, 0x38, 0x9d, 0xaf, 0xa6, 0x6f, 0x7b, 0xcf, 0x5b, 0x51, 0x10, 0x9d, 0x87, 0x4a, 0xe9, 0x06, 0xb1, 0xd7, 0x5f, 0x8c, 0xa9, 0x99, 0x61, 0xf3, 0x6b, 0xa8, 0x74, 0x3d, 0x46, 0x29, 0xf7, 0xd9, 0x3e, 0x23, 0xac, 0x18, 0xae, 0x8e, 0x74, 0xe0, 0x32, 0xad, 0x5a, 0xa4, 0xc3, 0x9e, 0xd3, 0x93, 0x24, 0x30, 0x44, 0x10, 0x7e, 0xf4, 0xc5, 0x63, 0x47, 0x97, 0x25, 0xae, 0x67, 0x6e, 0x2e, 0x22, 0x9e, 0x53, 0x2a, 0x72, 0x20, 0xb0, 0xa6, 0x88, 0x83, 0xd9, 0x75, 0x78, 0xdb, 0x9f, 0xf8, 0xb2, 0x24, 0x22, 0x9d, 0x7b, 0xe0, 0xe6, 0xa6, 0x9e, 0x00, 0x29, 0x2c, 0x5e, 0x08, 0x74, 0x63, 0xb0, 0x6f, 0x71, 0x1f, 0xa7, 0x44, 0xfc, 0x97, 0x30, 0x18, 0x7c, 0x69, 0xff, 0x17, 0x74, 0xdf, 0xc9, 0x78, 0x55, 0x71, 0xb4, 0x18, 0x97, 0x8b, 0x0c, 0x61, 0x07, 0x90, 0x37, 0x71, 0x63, 0x1e, 0xeb, 0x78, 0x24, 0x94, 0x9e, 0x62, 0x9b, 0xd1, 0x3e, 0xb7, 0x3f, 0x3f, 0x23, 0xbf, 0x46, 0x11, 0x42, 0xe9, 0x72, 0xc8, 0xa3, 0x6d, 0x2e, 0xfc, 0x15, 0x31, 0xd9, 0x59, 0x20, 0xea, 0x62, 0xe8, 0x3b, 0x83, 0x15, 0x8f, 0x3f, 0xc2, 0xb4, 0xdc, 0x1c, 0x29, 0xca, 0xfe, 0xca, 0x1a, 0x3c, 0x14, 0x83, 0x3f, 0x21, 0xab, 0x30, 0x29, 0xd3, 0x81, 0x21, 0x37, 0x46, 0x8f, 0x00, 0xba, 0x99, 0x47, 0x08, 0x56, 0xeb, 0x1b, 0x72, 0xac, 0x70, 0x3e, 0x30, 0x35, 0xc4, 0xae, 0xde, 0x71, 0x7f, 0x72, 0xf6, 0x42, 0x09, 0x20, 0x43, 0x92, 0xb0, 0xa3, 0x98, 0x3c, 0xf7, 0x3b, 0xc1, 0x2a, 0x31, 0xc5, 0xba, 0xbb, 0x4f, 0x3d, 0x1f, 0x67, 0xf7, 0x81, 0xe4, 0xa5, 0xd6, 0x58, 0x46, 0x0c, 0x36, 0xb2, 0x01, 0xb9, 0xd3, 0x32, 0xc4, 0xf2, 0xea, 0xe9, 0xe2, 0x08, 0x94, 0x65, 0x4a, 0x82, 0x52, 0xea, 0xb9, 0x77, 0xe9, 0xff, 0x2e, 0x3c, 0x70, 0x2c, 0x9f, 0x40, 0xa7, 0x03, 0xea, 0x33, 0x8a, 0x5d, 0x0e, 0x6e, 0x26, 0xe6, 0x9b, 0x8f, 0xac, 0xdc, 0x67, 0x63, 0xc4, 0x13, 0x83, 0x0a, 0x23, 0x3d, 0x6d, 0x55, 0x60, 0x68, 0x87, 0x73, 0x03, 0xc8, 0xc8, 0xcd, 0xe0, 0xb7, 0xb2, 0x2e, 0xa3, 0xfa, 0x84, 0x27, 0xab, 0x46, 0xb0, 0xb2, 0x1c, 0x02, 0x8f, 0x15, 0x2f, 0x4f, 0x54, 0x09, 0xcd, 0x46, 0x3f, 0x1c, 0x5d, 0x80, 0x13, 0x54, 0xda, 0xdc, 0xc9, 0x15, 0x28, 0x7c, 0x86, 0x44, 0xa8, 0x11, 0xcb, 0xad, 0x0a, 0x59, 0xeb, 0xa2, 0x62, 0xe6, 0xc3, 0xe5, 0x7e, 0x20, 0xa5, 0xc9, 0x77, 0x8d, 0x95, 0x93, 0x87, 0x50, 0xb8, 0x26, 0x1a, 0xf0, 0x09, 0xe0, 0x28, 0x5b, 0x4e, 0xbf, 0xc1, 0x2b, 0x4b, 0xc8, 0xea, 0x27, 0x35, 0xa9, 0xa7, 0x0d, 0x69, 0x9d, 0x59, 0x8f, 0x5e, 0x90, 0x4a, 0x9b, 0xd8, 0x84, 0x87, 0xdf, 0x5f, 0x33, 0xee, 0x8d, 0xf0, 0xf5, 0x87, 0x5b, 0xf2, 0xe5, 0x18, 0xcf, 0x6b, 0x3f, 0xf3, 0xb9, 0x74, 0x0d, 0x13, 0x01, 0xeb, 0x03, 0x67, 0xa2, 0x67, 0xa7, 0x6e, 0xf7, 0x71, 0xb5, 0x04, 0x36, 0xf1, 0xc1, 0x7c, 0x3a, 0xe6, 0x1e, 0xee, 0x85, 0x5a, 0xff, 0xd2, 0x85, 0x96, 0xdc, 0xce, 0x16, 0x92, 0x17, 0xcd, 0x49, 0xaf, 0xe0, 0x51, 0x63, 0xa8, 0x56, 0x0a, 0x29, 0xc6, 0xee, 0xa7, 0x5b, 0x54, 0x19, 0xec, 0x7f, 0x53, 0x21, 0x05, 0xdf, 0x6f, 0x54, 0x1a, 0xd5, 0x31, 0x65, 0x23, 0x46, 0x75, 0x0f, 0xfe, 0x6d, 0x1f, 0xfb, 0xbe, 0xda, 0x0a, 0xe4, 0x47, 0xba, 0x41, 0xf9, 0x18, 0x58, 0x72, 0x83, 0x67, 0xe4, 0x9f, 0xc7, 0x73, 0x74 ],
- const [ 0xe5, 0x09, 0x8b, 0x6a, 0x0b, 0x1c, 0xfc, 0x57, 0xc6, 0xa7, 0x65, 0x37, 0x10, 0x4a, 0x39, 0xc4, 0x8b, 0xae, 0xcb, 0x15, 0xc6, 0xbb, 0xb4, 0x6f, 0xbb, 0x0b, 0x74, 0x5f, 0x9c, 0x9e, 0x5c, 0x05, 0xcf, 0xcf, 0xab, 0xb3, 0x37, 0x86, 0xf7, 0xb7, 0xb5, 0xb0, 0xce, 0x74, 0xee, 0xec, 0x9e, 0xb8, 0x4f, 0x87, 0xd2, 0x49, 0x4f, 0xab, 0x3e, 0xc1, 0xf4, 0xd3, 0xbd, 0x9c, 0x99, 0x82, 0x18, 0x90, 0xee, 0x35, 0x2a, 0x1d, 0x40, 0x96, 0x42, 0x64, 0xfb, 0xf2, 0xc9, 0x3c, 0x6d, 0xed, 0x25, 0x83, 0xcc, 0x75, 0xdc, 0xb2, 0x7b, 0xf4, 0xfd, 0xb4, 0x89, 0xca, 0xbc, 0xf9, 0x7b, 0xfa, 0x5c, 0xc6, 0x4b, 0x23, 0x52, 0xcf, 0xb0, 0xb3, 0xa7, 0x07, 0xa0, 0x57, 0x9e, 0xb7, 0x13, 0xb6, 0x97, 0xcd, 0x0b, 0x5e, 0x33, 0x77, 0xd1, 0xfe, 0xb9, 0xf1, 0x81, 0xd7, 0xb8, 0x9c, 0xc8, 0x6d, 0xee, 0x4f, 0xed, 0x82, 0x69, 0xf1, 0x0e, 0x44, 0xec, 0x48, 0xad, 0xc6, 0x94, 0x0c, 0x6b, 0xad, 0xbb, 0x40, 0x12, 0x2c, 0x1d, 0xc2, 0xd9, 0x32, 0x39, 0x20, 0xe4, 0xe1, 0xfb, 0xad, 0x0b, 0x43, 0x97, 0xd4, 0xdc, 0x38, 0xb8, 0xad, 0xe3, 0xb3, 0xda, 0xce, 0x29, 0x26, 0xf4, 0x64, 0xfa, 0x3b, 0x5b, 0x82, 0xeb, 0xc5, 0xe3, 0xb8, 0x1c, 0xf6, 0x47, 0xe8, 0xbb, 0xd2, 0xcb, 0x55, 0xc9, 0xe3, 0x1f, 0xfd, 0x21, 0x2f, 0x87, 0x29, 0xb6, 0x67, 0x39, 0x42, 0x1c, 0x61, 0x06, 0xe6, 0x4a, 0xc8, 0x3d, 0x3b, 0x9e, 0x13, 0xcd, 0x83, 0x21, 0xb3, 0xa9, 0xf1, 0x0d, 0x91, 0x71, 0xbb, 0x8c, 0xb7, 0x4e, 0x71, 0xc3, 0x4d, 0x1e, 0x8d, 0x0f, 0xc8, 0xd1, 0x4b, 0x8e, 0x5e, 0x12, 0xbb, 0xe2, 0xbd, 0x2a, 0x14, 0x31, 0xfc, 0x22, 0x4b, 0x70, 0xd2, 0x28, 0xe4, 0xe2, 0x06, 0x35, 0x09, 0xdb, 0x26, 0xec, 0xd9, 0xca, 0x7c, 0xc4, 0x02, 0x76, 0x3e, 0x69, 0x92, 0x88, 0x05, 0x60, 0x0a, 0x4a, 0x80, 0xea, 0xb4, 0xae, 0x6a, 0x2c, 0x37, 0x92, 0xb9, 0x8c, 0x69, 0x42, 0x19, 0x5e, 0x64, 0x3f, 0x98, 0xc0, 0xdc, 0x3f, 0xa3, 0xc2, 0xb0, 0x74, 0x31, 0xcb, 0xbe, 0x11, 0x3e, 0x38, 0xfc, 0x0b, 0x7b, 0x45, 0xc5, 0x1c, 0x44, 0x31, 0x70, 0x0e, 0xd2, 0x9d, 0x27, 0x36, 0xb2, 0x36, 0xf6, 0x3f, 0x75, 0x93, 0x23, 0x29, 0xaa, 0x60, 0xbe, 0x90, 0x09, 0xbd, 0x78, 0x32, 0xf1, 0xe1, 0xb9, 0xac, 0x15, 0x03, 0xec, 0x84, 0x72, 0x7a, 0x1e, 0x6c, 0x84, 0x23, 0xc7, 0xc5, 0xb9, 0x03, 0xe7, 0x63, 0x26, 0x2d, 0x55, 0x90, 0x78, 0xe6, 0x54, 0x53, 0x2e, 0x08, 0x68, 0xf2, 0x06, 0xa4, 0x68, 0xb5, 0xb5, 0xeb, 0xd3, 0xed, 0xdb, 0x4f, 0x67, 0x35, 0x36, 0xe5, 0xf0, 0xf8, 0x16, 0x0e, 0x5f, 0x33, 0x11, 0x56, 0x1b, 0x7c, 0xf7, 0x9c, 0x9c, 0x44, 0x09, 0x74, 0x35, 0x59, 0x65, 0xc9, 0x31, 0xae, 0xc5, 0xc7, 0x22, 0x5f, 0x69, 0xf7, 0x76, 0xf0, 0x52, 0xac, 0x4b, 0xd6, 0xb1, 0x9f, 0x85, 0x38, 0x9f, 0xd6, 0x1d, 0xf6, 0x0e, 0xca, 0xbb, 0xeb, 0x00, 0xc8, 0x88, 0x6f, 0xf7, 0x98, 0x3d, 0x20, 0xac, 0x5d, 0x81, 0xe3, 0x03, 0xbc, 0x71, 0x25, 0x3f, 0x40, 0x80, 0x67, 0x72, 0xfd, 0x81, 0xf9, 0x38, 0x74, 0x02, 0x05, 0xa5, 0xb7, 0xdc, 0xd0, 0x7c, 0xce, 0x08, 0x3d, 0xa2, 0x58, 0xb4, 0x93, 0xd2, 0x75, 0x96, 0x7f, 0x91, 0xe4, 0x81, 0x5d, 0x65, 0x69, 0x36, 0xb3, 0x42, 0x72, 0x7c, 0xfe, 0x45, 0xf9, 0x73, 0xb2, 0xa5, 0xac, 0x25, 0x7c, 0xe6, 0x4c, 0x5e, 0xca, 0x4f, 0x53, 0xbe, 0x8d, 0x9f, 0xd9, 0x0c, 0x3d, 0xfc, 0xb8, 0xcd, 0x1e, 0x2c, 0xef, 0x15, 0xc3, 0x07, 0x44, 0x9e, 0xd0, 0x2c, 0x2e, 0x17, 0x04, 0xf4, 0xf1, 0xbe, 0x76, 0xa4, 0x0b, 0x31, 0x1e, 0xe7, 0xcf, 0x81, 0x98, 0x7b, 0x50, 0x89, 0x25, 0x2a, 0x80, 0x7e, 0xf3, 0xfc, 0x99, 0xc7, 0x9e, 0xab, 0xbc, 0x0e, 0xf6, 0x57, 0xd8, 0x97, 0x03, 0x7b, 0xce, 0xd0, 0x46, 0x20, 0xd3, 0x2a, 0x42, 0x50, 0x15, 0x28, 0x3b, 0xce, 0xa1, 0xb5, 0x3e, 0x04, 0x84, 0xbb, 0x61, 0x3d, 0x30, 0xf1, 0x4c, 0x14, 0x22, 0xf5, 0xf8, 0x2c, 0xc2, 0x9a, 0xb7, 0x22, 0x8b, 0x83, 0x75, 0xc0, 0x6b, 0xf1, 0x3d, 0x74, 0x6d, 0xd9, 0xff, 0x00, 0x95, 0x3a, 0x90, 0x72, 0x0b, 0xad, 0xf2, 0x57, 0x7d, 0x3e, 0xd6, 0x2c, 0xbe, 0x7a, 0x5f, 0x15, 0xb3, 0xc9, 0x29, 0xd2, 0x6f, 0xfe, 0x8a, 0xee, 0x9d, 0x2d, 0x17, 0x39, 0x1e, 0xbc, 0x6a, 0x79, 0xf4, 0xbd, 0x23, 0x5d, 0x5f, 0x7b, 0x2d, 0xb2, 0x45, 0x53, 0x43, 0xd9, 0xd7, 0xc6, 0xb2, 0x79, 0x72, 0xcc, 0x60, 0x71, 0xc3, 0x6a, 0x0d, 0x11, 0x2f, 0x86, 0xd9, 0x89, 0x72, 0xfb, 0x06, 0xa1, 0x86, 0xe9, 0x00, 0xab, 0xc6, 0x4e, 0x9a, 0xb6, 0x53, 0xdb, 0x9b, 0x05, 0xb7, 0x00, 0x79, 0xc0, 0xc8, 0x4a, 0x64, 0xe8, 0xcf, 0xee, 0x86, 0x90, 0xea, 0xa6, 0x8a, 0x4b, 0xaf, 0xbb, 0x5b, 0xe1, 0x12, 0x63, 0x2e, 0x46, 0x89, 0x4e, 0xc2, 0xcc, 0x6e, 0x7c, 0xe6, 0x97, 0xa4, 0x51, 0x3d, 0x51, 0x7d, 0xeb, 0x3e, 0x20, 0xdb, 0xb3, 0x7e, 0xd5, 0x96, 0x32, 0x32, 0x67, 0x1e, 0x27, 0xef, 0x9f, 0x62, 0xd6, 0xb5, 0x14, 0xf0, 0xa2, 0x2c, 0x5a, 0x5d, 0xde, 0x2d, 0x77, 0xe7, 0xe1, 0x84, 0x96, 0x59, 0x58, 0xf5, 0x00, 0x2f, 0xe1, 0x7d, 0x47, 0xfb, 0xd5, 0xd9, 0xc4, 0x07, 0x64, 0x4d, 0x44, 0x3c, 0xe8, 0x9e, 0xff, 0x42, 0x73, 0x60, 0xca, 0xe9, 0xaa, 0x78, 0x8d, 0xc8, 0xd7, 0xd9, 0xf6, 0x24, 0x39, 0x91, 0x6f, 0x13, 0x9f, 0x09, 0x4e, 0xe0, 0x35, 0x88, 0x4c, 0xb2, 0x9d, 0xfa, 0x39, 0x69, 0x41, 0xf0, 0xee, 0xc9, 0xe8, 0xe7, 0x82, 0xda, 0x88, 0xcd, 0xc1, 0x8e, 0x5b, 0xc1, 0xd9, 0xa5, 0x35, 0x1b, 0x57, 0xce, 0x15, 0xac, 0x52, 0x0f, 0xfa, 0x47, 0xe6, 0x66, 0xf8, 0x7f, 0xe5, 0xb1, 0x8a, 0xb3, 0xc8, 0xcb, 0x2a, 0x48, 0xec, 0xf8, 0x1f, 0x36, 0xfb, 0x83, 0x97, 0xc6, 0xa7, 0xa5, 0xf5, 0x9a, 0x9f, 0xa9, 0x6c, 0xed, 0xbb, 0x4e, 0xcd, 0x1c, 0x7a, 0x6d, 0x9d, 0x65, 0xaf, 0xdb, 0x6b, 0xef, 0x77, 0x91, 0x60, 0x0b, 0x6e, 0x0a, 0x18, 0xba, 0x23, 0xed, 0xb0, 0x6f, 0xc9, 0xec, 0x21, 0x16, 0x2f, 0xec, 0xcc, 0x54, 0xf2, 0x66, 0x56, 0x11, 0xf1, 0x0d, 0xb5, 0x34, 0x01, 0xb1, 0x8b, 0xad, 0xe2, 0x63, 0xb3, 0xb9, 0x72, 0xda, 0x1a, 0x61, 0x21, 0x15, 0xd1, 0x44, 0xa5, 0x42, 0x60, 0x97, 0xef, 0xdf, 0x5c, 0x6a, 0x5d, 0x1f, 0x3c, 0x2d, 0x31, 0x8f, 0x68, 0x72, 0x42, 0xf9, 0x93, 0xf5, 0xf1, 0x88, 0x4b, 0xd9, 0x5f, 0x2e, 0xce, 0x34, 0xdd, 0x43, 0x20, 0xce, 0xa4, 0x6f, 0x5a, 0x26, 0xc7, 0xc9, 0x45, 0xb6, 0x65, 0x40, 0x27, 0x78, 0x23, 0x3b, 0xdd, 0xa9, 0xd9, 0x7c, 0x2a, 0xcd, 0x8c, 0x4a, 0x4f, 0xf3, 0x9d, 0xcf, 0xdc, 0x3a, 0x3f, 0xbf, 0xc5, 0x94, 0x2e, 0x3a, 0xb8, 0xca, 0x9f, 0xf4, 0xae, 0xc1, 0x72, 0x93, 0xc1, 0xfb, 0xaf, 0x58, 0x3d, 0x60, 0x30, 0x02, 0xf9, 0x3f, 0x9b, 0xef, 0xe8, 0x90, 0x94, 0x85, 0xeb, 0x7c, 0x30, 0xd0, 0xe9, 0x1f, 0xac, 0x6c, 0x22, 0x8c, 0x5f, 0xa6, 0xc0, 0x11, 0xed, 0xde, 0xaf, 0xbd, 0xbe, 0x30, 0xaf, 0x20, 0xae, 0x53, 0xa8, 0x52, 0x06, 0xc0, 0x3d, 0x37, 0xac, 0x17, 0xa3, 0x00, 0x96, 0xbf, 0xb4, 0xf5, 0x84, 0xcd, 0x3f, 0x72, 0xef, 0x28, 0xa3, 0x30, 0x3c, 0xea, 0x9c, 0xc6, 0x36, 0x09, 0x5c, 0x70, 0xbb, 0x36, 0xde, 0x0e, 0xb5, 0x05, 0x77, 0x70, 0x4d, 0x4f, 0xae, 0xd0, 0x5b, 0xd5, 0x4d, 0xa0, 0x20 ],
- const [ 0x68, 0x17, 0x37, 0xf9, 0x3f, 0xfd, 0x83, 0x5d, 0x7b, 0x51, 0xaf, 0xa8, 0x71, 0x23, 0x56, 0x94, 0x48, 0x12, 0x72, 0xc7, 0x5a, 0x1a, 0xdb, 0x4a, 0xdd, 0xae, 0x0a, 0x3c, 0xc3, 0x07, 0x23, 0xc8, 0xde, 0xbb, 0x33, 0x54, 0x48, 0x91, 0xb5, 0xfb, 0x02, 0x94, 0x5c, 0x3e, 0xdb, 0x66, 0x0c, 0xf6, 0x94, 0xd7, 0x29, 0x8d, 0x41, 0xb6, 0x15, 0x6e, 0xf2, 0xe8, 0xf4, 0xba, 0x93, 0xb6, 0xb3, 0x3d, 0x11, 0x6b, 0x48, 0xa0, 0xbf, 0x1f, 0x3b, 0xe0, 0xf7, 0xce, 0x65, 0xff, 0x04, 0xad, 0xf8, 0xf9, 0x3f, 0xbd, 0xbf, 0xf9, 0x79, 0xa0, 0xa7, 0xcd, 0x99, 0xac, 0x7f, 0x97, 0x86, 0x3e, 0xfc, 0xc6, 0x48, 0x50, 0x00, 0x45, 0x6a, 0x4e, 0x1b, 0xf2, 0xa2, 0x26, 0x53, 0x52, 0xb4, 0x9f, 0x20, 0x83, 0x93, 0xeb, 0xbb, 0x72, 0xc9, 0x7f, 0x98, 0x4e, 0x1a, 0x22, 0x31, 0x3c, 0x64, 0x44, 0x06, 0x4c, 0xca, 0x92, 0xe2, 0xab, 0x11, 0xc7, 0x5f, 0x1b, 0x4a, 0xc5, 0xac, 0xa1, 0xb2, 0xe4, 0x8e, 0x7d, 0xd6, 0x8a, 0xa5, 0x5f, 0xfb, 0xfc, 0xf1, 0xd8, 0xbc, 0x73, 0x95, 0x0f, 0xf5, 0x73, 0xda, 0xb5, 0xe0, 0x58, 0x76, 0x3b, 0x7e, 0x32, 0x0f, 0x42, 0x39, 0xd2, 0xfb, 0x53, 0xc7, 0x25, 0x4a, 0xd0, 0x51, 0xc1, 0x06, 0x2a, 0xd5, 0xbe, 0xb9, 0x55, 0xc9, 0xc7, 0x30, 0x79, 0x01, 0x70, 0x7f, 0xeb, 0xd2, 0xca, 0x45, 0x5b, 0x78, 0x36, 0x31, 0x4f, 0xb5, 0x76, 0xc5, 0xd0, 0xbb, 0x0a, 0x5a, 0x62, 0x4c, 0xb9, 0x65, 0x3a, 0x20, 0x6e, 0xf8, 0xac, 0x87, 0x45, 0x8c, 0xe3, 0x4f, 0xe6, 0xfd, 0xd4, 0xe8, 0x12, 0xd6, 0x74, 0xc6, 0x7b, 0xcf, 0x29, 0x07, 0xd9, 0x94, 0x7f, 0x56, 0x3a, 0xc8, 0x1d, 0x0f, 0x99, 0x4a, 0xf7, 0xa3, 0xb3, 0xb7, 0xc5, 0x3f, 0x16, 0x30, 0xb3, 0xa8, 0x7b, 0x5d, 0x5a, 0x6a, 0x55, 0xb1, 0xef, 0x31, 0xaa, 0xf0, 0xba, 0x77, 0x22, 0xef, 0xca, 0x5f, 0x5e, 0x9c, 0xe8, 0xe1, 0x8a, 0x3d, 0xc9, 0x28, 0x36, 0xfd, 0x88, 0x38, 0x61, 0xa4, 0x53, 0xd4, 0xd7, 0xa6, 0x64, 0x9f, 0xbe, 0x5f, 0x32, 0x81, 0x6b, 0x9d, 0xe9, 0x4c, 0x7a, 0x5f, 0x18, 0xa0, 0x1d, 0xdc, 0xaa, 0x0c, 0xb4, 0xc7, 0x18, 0x75, 0x9e, 0xd2, 0xdd, 0xbc, 0x4f, 0x71, 0x29, 0x9b, 0xa3, 0xe0, 0xd9, 0xd0, 0x72, 0x67, 0xa7, 0x7e, 0x65, 0xdd, 0x9e, 0xd0, 0x08, 0x6b, 0xd2, 0xdf, 0x20, 0x92, 0x4d, 0xd6, 0x3e, 0x6f, 0x4c, 0x54, 0x94, 0x3e, 0xac, 0x11, 0x08, 0x1e, 0x9f, 0xc5, 0x87, 0x13, 0xa3, 0x45, 0x9c, 0x51, 0xb5, 0xef, 0x41, 0xb8, 0xc1, 0x49, 0xf5, 0x9b, 0x5e, 0xe5, 0x0e, 0xc5, 0xb8, 0x88, 0x51, 0xbe, 0xcd, 0x8a, 0xc0, 0x4a, 0xdd, 0x80, 0xb3, 0x33, 0x1b, 0x19, 0x2a, 0x48, 0xa9, 0x46, 0x62, 0xa6, 0xc3, 0x9e, 0xa6, 0x36, 0x3b, 0x00, 0x68, 0x77, 0x25, 0x7a, 0x90, 0x7e, 0xd3, 0x69, 0x14, 0x3b, 0x04, 0xe2, 0xc9, 0xfd, 0x58, 0x51, 0x79, 0x38, 0x07, 0x60, 0x35, 0x87, 0xd3, 0x1b, 0xec, 0xed, 0x3b, 0x51, 0x3d, 0x60, 0xf2, 0x3d, 0x8a, 0x88, 0x8f, 0x65, 0x4e, 0xc4, 0x86, 0xc3, 0xb0, 0x6e, 0x57, 0x23, 0x58, 0x60, 0x05, 0xcc, 0x81, 0xb6, 0xca, 0x62, 0x4f, 0xd6, 0x09, 0x0b, 0x63, 0xae, 0x84, 0xd1, 0xae, 0x3d, 0xcf, 0x48, 0x82, 0x55, 0x05, 0x70, 0xef, 0x9f, 0xb9, 0xdc, 0x4c, 0xdf, 0x2f, 0x14, 0x14, 0x79, 0xcc, 0x39, 0xf4, 0x35, 0xcc, 0xe7, 0x21, 0x3f, 0x33, 0x5f, 0xef, 0x72, 0x06, 0xe6, 0xa0, 0xd5, 0xba, 0x68, 0x79, 0x66, 0xed, 0x61, 0x1c, 0x17, 0x54, 0xfe, 0x11, 0x17, 0xf5, 0x7f, 0xa6, 0x52, 0x96, 0xdf, 0xf9, 0x3b, 0x75, 0xb7, 0x53, 0xc9, 0x39, 0x60, 0xb7, 0xbf, 0x29, 0x57, 0xbb, 0x31, 0x9c, 0xe6, 0x97, 0x44, 0xb0, 0x01, 0x7c, 0x35, 0x3f, 0x6f, 0x27, 0x9d, 0x0f, 0x2a, 0xb5, 0xf3, 0x49, 0x07, 0xb9, 0x52, 0x2d, 0x99, 0x8c, 0x7c, 0x03, 0x53, 0xe4, 0x20, 0x55, 0xee, 0xa8, 0x58, 0x5b, 0x0a, 0x03, 0x76, 0xb7, 0x18, 0xb8, 0x00, 0x63, 0x77, 0xb5, 0xf9, 0xe7, 0xdd, 0xea, 0x62, 0xcf, 0xf9, 0x5b, 0x01, 0x5c, 0x57, 0x74, 0x61, 0x7a, 0x83, 0x9d, 0x1a, 0xf2, 0x71, 0x0f, 0x52, 0xe1, 0x1c, 0xe6, 0x84, 0x69, 0x6e, 0x77, 0x81, 0xa6, 0x60, 0xe3, 0xb4, 0xe3, 0x62, 0xed, 0xa9, 0x0e, 0xfd, 0x08, 0xd1, 0x6a, 0xb7, 0xb4, 0x7f, 0x84, 0x37, 0x0b, 0x37, 0x68, 0xa9, 0x97, 0x28, 0x14, 0x64, 0x67, 0xf7, 0x2d, 0xca, 0x62, 0xbe, 0xf1, 0x70, 0xdb, 0x55, 0x6d, 0x80, 0x65, 0xd0, 0xf0, 0x5b, 0xe8, 0x48, 0xbf, 0x82, 0xf4, 0xdf, 0x0a, 0xb6, 0x56, 0xfe, 0x1f, 0x5e, 0xe9, 0xe1, 0xde, 0x2a, 0xaf, 0x56, 0x6d, 0xf6, 0x20, 0xc1, 0x2d, 0xf1, 0xc2, 0x64, 0xec, 0xfe, 0xfa, 0xdd, 0x5c, 0x5a, 0x22, 0xf0, 0xc3, 0x7f, 0xdb, 0x87, 0xf5, 0x49, 0xa5, 0xf7, 0x80, 0x58, 0xad, 0x85, 0x26, 0xb5, 0xe5, 0x29, 0x90, 0xb8, 0x5a, 0x92, 0x40, 0x29, 0xc3, 0x69, 0xc8, 0xa5, 0x55, 0xda, 0x39, 0x43, 0xdf, 0x51, 0xdf, 0x78, 0x12, 0x81, 0x2b, 0x38, 0x20, 0xab, 0xf1, 0x5e, 0x8a, 0x1d, 0xd4, 0x4e, 0x32, 0xf9, 0xfe, 0xd9, 0xb8, 0x37, 0x14, 0x61, 0x03, 0xed, 0x68, 0x3d, 0x1e, 0xce, 0x71, 0x5e, 0x46, 0xf1, 0x79, 0x33, 0x41, 0xd5, 0x96, 0xcb, 0xf1, 0xa1, 0xdb, 0x3a, 0x28, 0xb0, 0xcf, 0x3d, 0xbe, 0x4c, 0x1e, 0x21, 0xe1, 0xba, 0x8f, 0xe0, 0xad, 0x78, 0x36, 0x8e, 0xfc, 0xc2, 0xeb, 0xf3, 0x80, 0x5a, 0xfb, 0x7a, 0x0f, 0x89, 0x1d, 0x4a, 0x3d, 0x61, 0xa7, 0xb2, 0x30, 0x46, 0x01, 0xca, 0xb0, 0xad, 0x5a, 0x57, 0x7e, 0x22, 0x9b, 0xf0, 0xe7, 0x90, 0x99, 0x5f, 0x98, 0xbd, 0x8f, 0x4a, 0xb4, 0x14, 0xcb, 0x13, 0x24, 0xa7, 0xa7, 0xfc, 0x2f, 0x74, 0xbb, 0x8f, 0x4a, 0xe7, 0x51, 0x3d, 0x31, 0xa1, 0x19, 0x45, 0x36, 0x78, 0x1f, 0xd7, 0xd9, 0xbf, 0xf9, 0x79, 0x9a, 0xc7, 0x45, 0xab, 0x0b, 0xa5, 0x53, 0xc6, 0x29, 0x36, 0x1e, 0x2a, 0xec, 0x61, 0x81, 0x98, 0x1d, 0x9c, 0xa7, 0xdd, 0x68, 0xb2, 0xc4, 0xb1, 0xb2, 0xc3, 0x02, 0xde, 0xad, 0x8c, 0xbf, 0xa5, 0xa9, 0xe8, 0xf5, 0x5d, 0xad, 0x97, 0xf9, 0x5d, 0xc6, 0x3f, 0x69, 0x1c, 0x9f, 0xb0, 0x5f, 0x97, 0x52, 0x6c, 0xeb, 0xf3, 0x7e, 0x67, 0xc1, 0x64, 0x9a, 0x0b, 0x2e, 0x4d, 0x88, 0x7f, 0x51, 0xa9, 0x6d, 0x29, 0x87, 0xa9, 0xc1, 0x72, 0x27, 0x9e, 0xa2, 0xc9, 0x70, 0x1a, 0x6e, 0xea, 0xbf, 0x52, 0x90, 0x60, 0x05, 0xc7, 0x9a, 0x48, 0x79, 0x26, 0x95, 0x59, 0x8a, 0x6c, 0x94, 0x21, 0x18, 0x4d, 0x90, 0x91, 0xe3, 0xd7, 0x6f, 0xbc, 0x44, 0x53, 0x66, 0xdc, 0x1b, 0x6c, 0x81, 0x96, 0x08, 0x93, 0x80, 0x7f, 0xde, 0xa1, 0xe5, 0xde, 0x54, 0xbe, 0x4b, 0xb4, 0xfe, 0x82, 0xf9, 0xf9, 0x7c, 0x5b, 0xb7, 0x29, 0xf2, 0x2f, 0xe1, 0xff, 0xb8, 0x42, 0xb9, 0x80, 0x52, 0x59, 0x01, 0x3c, 0xa2, 0x20, 0xca, 0xd1, 0x5c, 0xc9, 0x87, 0xb0, 0xbb, 0xf6, 0x65, 0x24, 0x72, 0xd9, 0xdf, 0x90, 0xe6, 0x99, 0x8c, 0xf8, 0x9a, 0xf8, 0x3c, 0xc2, 0xea, 0x34, 0x44, 0xbe, 0xfd, 0x2a, 0x16, 0x65, 0xf5, 0xc1, 0x15, 0x5e, 0x68, 0x86, 0xa7, 0x47, 0x14, 0x94, 0x8b, 0xb1, 0xce, 0xb7, 0x6d, 0x6c, 0xbc, 0xd1, 0xb7, 0x06, 0xc4, 0x7c, 0xab, 0x8e, 0x44, 0xf0, 0xaf, 0x9d, 0x04, 0x28, 0xe7, 0x98, 0x69, 0x40, 0x09, 0x2f, 0xeb, 0x22, 0x6d, 0x29, 0xc8, 0x61, 0x64, 0x64, 0xfa, 0x65, 0xcb, 0x17, 0x67, 0xc9, 0xe0, 0x5b, 0x59, 0x01, 0x54, 0xea, 0x2d, 0x40, 0xa1, 0x26, 0x4f, 0x98, 0x9d, 0x5d, 0x66, 0x64, 0x4f, 0x4b, 0xcb, 0xe3, 0x02, 0xe0, 0x40, 0x25, 0x99, 0x44, 0xdf, 0x2b, 0x22, 0x19, 0x50, 0x4a, 0xae, 0x00, 0x3f, 0xd0, 0x5f, 0x5e, 0x0d, 0xea, 0xc2, 0x60, 0xc6, 0xc5, 0x5f, 0x3c, 0x54, 0xf4, 0x8f, 0xba, 0xf2, 0x12, 0x8e, 0xf4, 0xe3, 0xa8, 0xd1, 0x59, 0x63, 0x50, 0x9a, 0xf8, 0xde, 0x1b, 0xc9, 0xfc, 0x60, 0x31, 0xf5, 0x72, 0x4d, 0xb7, 0xbb, 0x53, 0x52, 0xf6, 0x56, 0xbe, 0x9b, 0xb9, 0x70, 0x85, 0x46, 0xf6, 0x38, 0xeb, 0x18, 0xb1, 0xb5, 0xac, 0x6f, 0x1e, 0x5a, 0x3e, 0x78, 0x06, 0xda, 0x57, 0xa2, 0x6b, 0x3e, 0xaf, 0x53, 0x6f, 0x34, 0x07, 0xd9, 0x72 ],
- const [ 0x38, 0x42, 0xb0, 0x33, 0xf3, 0xca, 0x31, 0xa6, 0xf8, 0xe5, 0xa6, 0x38, 0xb3, 0x9e, 0xfe, 0xe6, 0xbf, 0x73, 0xcd, 0xcc, 0x5a, 0xff, 0x57, 0xe8, 0x16, 0xd6, 0xea, 0x21, 0xd2, 0xb1, 0x72, 0x88, 0xe9, 0xcb, 0x47, 0xdd, 0xa9, 0x8a, 0x49, 0x55, 0x07, 0x62, 0x2f, 0x9a, 0x90, 0xf7, 0x1c, 0x14, 0xa3, 0x81, 0x73, 0x67, 0xde, 0x75, 0xed, 0x3d, 0xd6, 0x62, 0xe9, 0x45, 0x0b, 0x18, 0x03, 0x7c, 0x1b, 0x10, 0xe7, 0xab, 0x35, 0x08, 0x68, 0x30, 0xd1, 0xee, 0xcc, 0x02, 0x9e, 0xff, 0x6a, 0xf0, 0xbc, 0x30, 0x78, 0x29, 0x2c, 0xcd, 0x1e, 0x01, 0x85, 0x60, 0xce, 0xf2, 0xe8, 0xd4, 0xd8, 0xe1, 0x35, 0xda, 0x39, 0xa3, 0x7f, 0x8c, 0xb4, 0xc0, 0xbe, 0x50, 0x25, 0x77, 0xc4, 0x00, 0x11, 0x02, 0x73, 0x48, 0x81, 0x1b, 0x2c, 0x4f, 0x11, 0xbe, 0x8a, 0x99, 0x44, 0x31, 0x51, 0x2c, 0x1a, 0x42, 0xa1, 0xf1, 0xe5, 0xd0, 0x70, 0x5e, 0x58, 0x8c, 0x37, 0x52, 0xe1, 0x01, 0xea, 0x40, 0x39, 0xd2, 0x2e, 0x90, 0x39, 0x43, 0xc7, 0x42, 0xef, 0xfb, 0x4f, 0xd5, 0xf1, 0x09, 0x2e, 0x67, 0xf1, 0x24, 0xc6, 0x1d, 0x92, 0x37, 0xee, 0xc5, 0x7a, 0x1d, 0xa2, 0xba, 0xa8, 0xa8, 0xf8, 0x08, 0x08, 0xe9, 0x56, 0xd1, 0x45, 0xab, 0xe3, 0xf0, 0xdf, 0x41, 0x3b, 0xdb, 0x7d, 0x82, 0x67, 0xce, 0x84, 0x11, 0x0c, 0x26, 0xe8, 0xe2, 0xe2, 0x0b, 0x43, 0xf9, 0x68, 0x51, 0x24, 0x75, 0xd7, 0xa0, 0xa9, 0xce, 0x54, 0xd3, 0x50, 0x5b, 0x69, 0x9f, 0x0a, 0x17, 0xb6, 0x75, 0x91, 0xa4, 0xe4, 0xa9, 0xfc, 0x90, 0xdb, 0xd3, 0x91, 0xd8, 0x35, 0x76, 0xda, 0xaa, 0xf2, 0xdf, 0xfb, 0x6f, 0x6d, 0x50, 0x42, 0x09, 0x8e, 0x5e, 0x00, 0x59, 0x42, 0x98, 0x97, 0x05, 0x28, 0x69, 0xd5, 0x78, 0x8e, 0x40, 0x80, 0x2a, 0x9b, 0xed, 0x32, 0x21, 0xcd, 0x4f, 0x67, 0xb8, 0xa7, 0x2c, 0xd5, 0x9f, 0xa3, 0x60, 0xfc, 0x23, 0x6e, 0x3a, 0xfd, 0xaf, 0x54, 0x23, 0xaf, 0x93, 0xf9, 0x80, 0xf0, 0x05, 0x4b, 0xda, 0x39, 0x65, 0xb4, 0x3c, 0x76, 0xc6, 0x94, 0xdd, 0x14, 0xa9, 0xee, 0xff, 0x5b, 0x0b, 0x62, 0x17, 0xfe, 0xa3, 0x5b, 0x2e, 0xf0, 0x65, 0x89, 0x87, 0x7a, 0x4a, 0x92, 0x82, 0x8b, 0x53, 0x04, 0xc0, 0x4f, 0xcc, 0x8f, 0x88, 0x02, 0xce, 0x71, 0x6a, 0x07, 0x07, 0x31, 0x22, 0x34, 0xbd, 0x90, 0xbf, 0x71, 0x11, 0xbd, 0x04, 0x81, 0x81, 0xc8, 0x0e, 0x1f, 0xb1, 0x59, 0x37, 0x4d, 0x6b, 0xa2, 0x3b, 0xe9, 0xe4, 0x92, 0x99, 0x81, 0x41, 0x4b, 0x3c, 0x68, 0x59, 0xd7, 0x5b, 0x09, 0xbd, 0x16, 0x9e, 0x7c, 0xf6, 0xfb, 0x82, 0x57, 0x0d, 0xf8, 0xfe, 0xc7, 0x51, 0xb7, 0x67, 0xdf, 0x54, 0x0b, 0x91, 0x2f, 0x37, 0x26, 0x37, 0x99, 0x27, 0x0c, 0x9c, 0x60, 0x28, 0x48, 0x73, 0x82, 0x11, 0xdd, 0xfc, 0x48, 0xd8, 0x7f, 0x71, 0x1b, 0x10, 0x03, 0xa0, 0x99, 0xb0, 0x15, 0xd9, 0xe8, 0x16, 0x29, 0x0a, 0x4a, 0x4c, 0xb4, 0x29, 0xf2, 0x89, 0x9b, 0xd2, 0x17, 0xfb, 0xeb, 0x32, 0x46, 0xc3, 0xcc, 0x23, 0xfc, 0x42, 0xb0, 0x98, 0x74, 0x93, 0xd0, 0x3c, 0xbe, 0x58, 0xd9, 0x56, 0x11, 0xba, 0xe2, 0xf0, 0x62, 0xab, 0xa2, 0x38, 0x35, 0x6e, 0xe0, 0x26, 0xb4, 0x5a, 0x2a, 0x5f, 0xfe, 0xdb, 0xca, 0x5a, 0xc1, 0xb9, 0xf6, 0xc1, 0x0b, 0x9d, 0x47, 0x1a, 0x5d, 0xd1, 0x6d, 0xa6, 0x02, 0x47, 0x20, 0x89, 0x9e, 0xdd, 0x59, 0x2c, 0x0a, 0xdf, 0xc3, 0xe0, 0x5f, 0xcd, 0x6c, 0xc4, 0x51, 0x5f, 0xc1, 0xe8, 0xbf, 0xc7, 0xb9, 0xb2, 0x87, 0x36, 0x50, 0x81, 0x9f, 0xa1, 0x37, 0x91, 0x62, 0xc5, 0xca, 0x1f, 0x27, 0x69, 0x42, 0xcd, 0x18, 0xe3, 0x2c, 0x47, 0x42, 0xdd, 0x1a, 0x27, 0xe8, 0x59, 0x98, 0x16, 0x1d, 0xf3, 0x61, 0x34, 0x92, 0x66, 0xd3, 0xbb, 0xac, 0x52, 0xa1, 0xdf, 0xd9, 0x3d, 0xc8, 0xf8, 0x25, 0xd7, 0xc4, 0xe2, 0x08, 0x82, 0x03, 0xa4, 0x82, 0x11, 0x9a, 0x51, 0x6a, 0xd0, 0x37, 0x2c, 0x04, 0xc5, 0x56, 0x0f, 0xd1, 0x36, 0xb8, 0x0e, 0xab, 0x6c, 0x11, 0x57, 0x11, 0xb6, 0x02, 0x5c, 0xbf, 0xb0, 0x46, 0x35, 0x81, 0xc4, 0x30, 0x3f, 0x4a, 0xf2, 0x55, 0x0a, 0x80, 0xcd, 0x86, 0x72, 0x9b, 0xc6, 0x01, 0x0b, 0xee, 0xad, 0xe7, 0xc3, 0xc4, 0x75, 0xf1, 0xc2, 0xaf, 0x38, 0x5f, 0x95, 0x1d, 0x7a, 0x32, 0x8c, 0x2c, 0xb2, 0x9b, 0x60, 0xc0, 0x07, 0xb3, 0x19, 0xd2, 0x57, 0x6c, 0x2f, 0x0b, 0x7d, 0xc8, 0xf0, 0x91, 0xd4, 0x49, 0x21, 0x21, 0xf7, 0xa8, 0xe8, 0x5e, 0xcb, 0xca, 0xea, 0x68, 0xc0, 0xef, 0xb0, 0xb1, 0x53, 0x2d, 0x4f, 0x0c, 0xd8, 0x1d, 0x48, 0x07, 0x76, 0xd4, 0xad, 0x7b, 0x73, 0x14, 0x85, 0x61, 0xb1, 0xc4, 0x72, 0xe7, 0x79, 0x9e, 0x91, 0xc4, 0x78, 0x28, 0xa2, 0xc8, 0x07, 0xe5, 0x69, 0xb7, 0xb0, 0xcc, 0x53, 0x57, 0xed, 0xf9, 0x5d, 0xc8, 0x32, 0xa3, 0x32, 0x14, 0x2e, 0x4e, 0x93, 0x07, 0x4f, 0x41, 0xfc, 0x41, 0x84, 0x3b, 0x85, 0x89, 0x46, 0x62, 0x06, 0x64, 0xd9, 0x7c, 0x7e, 0xe6, 0xcf, 0x61, 0xb6, 0xc9, 0xcf, 0xb0, 0x21, 0xbc, 0x94, 0xc2, 0x07, 0xfd, 0x38, 0xdc, 0xe2, 0x2a, 0xb3, 0xa9, 0x09, 0x55, 0x9f, 0xe7, 0x8b, 0x56, 0x3e, 0x60, 0x5e, 0x65, 0xbd, 0x1c, 0xb9, 0xe8, 0xba, 0xd5, 0xbe, 0x89, 0x05, 0xab, 0x5c, 0x8c, 0xa3, 0x19, 0x74, 0x5f, 0x19, 0x28, 0x3a, 0x73, 0xe7, 0xe2, 0xdf, 0x4b, 0x52, 0x0a, 0x6d, 0xd3, 0x66, 0x0a, 0xf2, 0xf2, 0x3c, 0x2d, 0xe0, 0x62, 0x79, 0x0e, 0xb4, 0xc0, 0x17, 0x51, 0xd6, 0xdf, 0x68, 0x90, 0xc0, 0x62, 0x57, 0x98, 0x63, 0x8a, 0xf2, 0xd6, 0xc6, 0x4c, 0x25, 0x0c, 0xf1, 0xa7, 0xc8, 0x48, 0x09, 0x34, 0xdd, 0x17, 0xbc, 0xff, 0x12, 0xf6, 0xe0, 0x95, 0x8e, 0x09, 0x56, 0x5e, 0xe9, 0x10, 0x35, 0x2d, 0x7c, 0x96, 0x24, 0x16, 0xdc, 0x6b, 0x08, 0x80, 0xa1, 0x55, 0xe0, 0x7a, 0x6c, 0x03, 0xec, 0x53, 0x28, 0x42, 0x15, 0x64, 0x8f, 0x74, 0x89, 0x31, 0xf0, 0x3d, 0xa6, 0xb1, 0x30, 0x7f, 0x19, 0xe9, 0x10, 0x89, 0x47, 0xc0, 0xad, 0x8b, 0xec, 0x0e, 0x4d, 0x4d, 0x01, 0xf6, 0x58, 0x21, 0xe4, 0x76, 0xa5, 0x17, 0xb3, 0x3c, 0xf7, 0x6f, 0xf8, 0xbb, 0xc8, 0x54, 0x8c, 0x7f, 0x45, 0xc7, 0xb5, 0xbd, 0x99, 0xd9, 0x92, 0x2f, 0x6e, 0x1d, 0xb9, 0x1e, 0xb1, 0x5d, 0x1e, 0xc1, 0x96, 0x8c, 0x37, 0xc5, 0xdd, 0xfc, 0x5d, 0x2d, 0x53, 0xd1, 0x76, 0x5c, 0x9b, 0xb6, 0xd1, 0x70, 0x2e, 0xce, 0x51, 0xd2, 0xa1, 0xed, 0xce, 0x0b, 0x27, 0x09, 0xb8, 0xda, 0x56, 0xeb, 0xfd, 0x83, 0x2e, 0x2a, 0x2d, 0x69, 0x57, 0x5a, 0xdd, 0xdf, 0xaa, 0x81, 0x49, 0x3c, 0xf3, 0xca, 0x3d, 0x2d, 0xf5, 0x7e, 0x35, 0x50, 0xaf, 0x2f, 0xc3, 0xfe, 0xde, 0x37, 0x31, 0x68, 0xc3, 0x61, 0x67, 0xe5, 0x26, 0xe5, 0x10, 0x8a, 0x9b, 0x9a, 0xf9, 0xfc, 0x04, 0x67, 0xb9, 0x82, 0x57, 0xfa, 0x97, 0x5e, 0xa2, 0xbd, 0xa8, 0x5e, 0x4c, 0x06, 0x38, 0xae, 0x9d, 0x8f, 0x6b, 0xf0, 0x80, 0x25, 0x24, 0x8e, 0x88, 0xa4, 0x26, 0x4f, 0x32, 0x22, 0x7a, 0x29, 0x6a, 0x6b, 0x10, 0x57, 0x50, 0xae, 0xa9, 0xab, 0x3b, 0x75, 0xf3, 0x24, 0xfe, 0xda, 0xf6, 0xc3, 0x6b, 0xf8, 0xb0, 0x9b, 0x16, 0xa1, 0xfc, 0x28, 0x5c, 0x4f, 0xb9, 0xe1, 0xa3, 0x5c, 0x27, 0x10, 0xe2, 0x75, 0x94, 0xe2, 0x65, 0x4c, 0x39, 0xba, 0xca, 0x8d, 0x5f, 0xcb, 0x50, 0x14, 0xc6, 0xe6, 0x51, 0x5d, 0x46, 0x90, 0x0c, 0x3b, 0xb7, 0x58, 0xa8, 0xcd, 0x0f, 0x68, 0x76, 0xae, 0xca, 0x59, 0x77, 0x6d, 0x8f, 0x4c, 0x1e, 0x3d, 0x10, 0x36, 0x56, 0xed, 0x32, 0x7b, 0xc7, 0x1a, 0x6e, 0xbf, 0x55, 0xa3, 0x76, 0xf8, 0xea, 0x5d, 0x1c, 0xc8, 0x76, 0x08, 0x70, 0x0b, 0x34, 0x82, 0x29, 0xac, 0x2e, 0x3b, 0x47, 0xbc, 0x03, 0xe9, 0xf6, 0xc5, 0xe8, 0x7d, 0xb4, 0x5b, 0xed, 0x55, 0xb6, 0xf5, 0x82, 0xb3, 0x88, 0xfb, 0x39, 0x6e, 0xf5, 0x20, 0xcd, 0xe7, 0x26, 0xf2, 0x64, 0x3f, 0x0e, 0xaf, 0x11, 0xc7, 0x05, 0x5b, 0x9d, 0xb8, 0xb2, 0x0f, 0x87, 0x25, 0x2f, 0x94, 0x49, 0x2d, 0x68, 0x31, 0xdd, 0x75, 0xc4, 0xc0, 0x80, 0xd6, 0x08, 0x07, 0xb6, 0x52, 0x78, 0x46, 0x8e, 0x4d, 0x3f, 0x0d, 0x27, 0xf9, 0x10, 0x50, 0x73, 0x13, 0x0e, 0xbd, 0x3b, 0xcd, 0xe9, 0x4d, 0x63, 0x0b, 0x4a, 0x1a, 0x70, 0xd1, 0x72, 0x70, 0x47, 0xfc, 0x1e, 0x26, 0x37, 0x31, 0xad, 0x2f, 0x3a, 0x14, 0x84, 0x6c, 0x78, 0xba, 0xb2, 0xc4, 0x0d, 0x60, 0xd0, 0x77, 0x0c, 0x5d, 0x2b, 0xaf, 0xc4, 0x55, 0x26, 0x59, 0x42, 0xb0, 0xd9, 0x32, 0x17, 0x4a, 0xfe, 0x25, 0x5b, 0x6c, 0x0e, 0xd4, 0xf1, 0xfc, 0xa7, 0x75, 0x0d, 0xf0, 0x31, 0xdf, 0xf4, 0x08, 0xc1, 0xe4, 0x03, 0xbd, 0x3d, 0xe2, 0xf3, 0x75, 0xc2, 0x95, 0x5b, 0xf8, 0x42, 0x2f, 0x76, 0x27, 0x72, 0xab, 0x27, 0xec, 0xe3, 0x5e, 0x3a, 0x6d, 0x6e, 0xcf, 0xed ],
- const [ 0x90, 0x20, 0x91, 0x8a, 0xad, 0x4e, 0xbe, 0x24, 0xbf, 0xba, 0xd9, 0xf9, 0x10, 0x93, 0x25, 0xd0, 0x9e, 0xf5, 0x20, 0xbd, 0x79, 0xba, 0x08, 0x98, 0x6d, 0x94, 0x9f, 0xad, 0xe1, 0x59, 0x2c, 0xb5, 0xff, 0x9d, 0xc2, 0x06, 0x15, 0x86, 0xc4, 0x06, 0x3b, 0xdc, 0xa9, 0xe5, 0x37, 0x60, 0xfd, 0x8c, 0x9d, 0x5f, 0xa8, 0xd0, 0x3b, 0x86, 0x73, 0xec, 0xb3, 0xf8, 0xc8, 0x2e, 0x6a, 0x9e, 0xb9, 0xf0, 0xa1, 0xbe, 0x45, 0xca, 0xe2, 0xd0, 0xd6, 0x06, 0x9e, 0x8d, 0x0d, 0x54, 0x14, 0x48, 0xc2, 0xbf, 0x74, 0x81, 0x47, 0xe0, 0x45, 0xb8, 0xed, 0x52, 0x04, 0x7f, 0xca, 0x66, 0x0e, 0xd3, 0xb9, 0x17, 0xc0, 0xac, 0xa1, 0x40, 0xdc, 0xd3, 0xfb, 0x0c, 0x2e, 0xf4, 0x8e, 0xae, 0x70, 0xf4, 0x7d, 0x53, 0x6c, 0x84, 0x84, 0x55, 0x60, 0xf7, 0x7f, 0xb2, 0xa6, 0x50, 0x2c, 0xbc, 0x94, 0xa0, 0x31, 0x12, 0xa2, 0x8f, 0x61, 0xce, 0xca, 0x38, 0x3b, 0x00, 0x35, 0x3a, 0xb3, 0x5c, 0x13, 0x0b, 0x36, 0x2f, 0xcb, 0x90, 0xe8, 0x98, 0x54, 0xeb, 0x30, 0xf4, 0xe2, 0x95, 0x76, 0x9a, 0xc6, 0xac, 0x2b, 0xc9, 0x8f, 0x8e, 0x0a, 0xde, 0x76, 0xa6, 0x9e, 0xca, 0xf9, 0x86, 0x05, 0xc4, 0xc5, 0x36, 0xf3, 0x3b, 0xd9, 0xcc, 0xfa, 0x0f, 0xe9, 0x3d, 0x08, 0x00, 0x00, 0x73, 0x31, 0x67, 0x6a, 0xa0, 0xae, 0x24, 0xd1, 0xd1, 0x26, 0xd7, 0xa6, 0xc6, 0x2d, 0x53, 0xc3, 0x01, 0x0b, 0x4f, 0x4e, 0x1d, 0xbe, 0x5f, 0xe0, 0x61, 0x42, 0x23, 0xe6, 0x95, 0x0f, 0xbe, 0x48, 0x14, 0xe4, 0x8a, 0x49, 0x23, 0xc3, 0x0b, 0xaf, 0x81, 0x3c, 0x21, 0x23, 0x40, 0xef, 0x81, 0xda, 0xd2, 0x4d, 0x65, 0x75, 0x67, 0x9e, 0x83, 0x26, 0x77, 0x48, 0x3c, 0x15, 0x9a, 0x4e, 0x17, 0x02, 0xa0, 0x17, 0x6d, 0x2b, 0xde, 0x71, 0x66, 0x70, 0xc6, 0xd5, 0x24, 0xb5, 0xbb, 0xed, 0x3d, 0x88, 0x23, 0x53, 0x6f, 0x03, 0xbd, 0x9c, 0x8f, 0xf4, 0x34, 0x95, 0xc3, 0x3c, 0xf5, 0xcc, 0xf1, 0x75, 0x3e, 0x52, 0x77, 0xd8, 0x78, 0xc0, 0x1d, 0x5d, 0xc7, 0x78, 0x47, 0x23, 0xdf, 0x2d, 0x70, 0x13, 0x19, 0xa6, 0xd3, 0xc1, 0xc6, 0xbe, 0x6b, 0x92, 0xc3, 0xb0, 0x1e, 0x24, 0x4e, 0x91, 0x36, 0xea, 0x17, 0x1e, 0x10, 0x17, 0x9a, 0xb8, 0x18, 0xbe, 0xad, 0xad, 0xf5, 0x37, 0x55, 0xb9, 0x00, 0xc4, 0xde, 0xcd, 0xfb, 0x74, 0x2b, 0x0e, 0x00, 0x48, 0x4a, 0x21, 0xb7, 0x95, 0x4b, 0xa6, 0xcc, 0xa9, 0x53, 0x02, 0xa0, 0xb1, 0xec, 0x62, 0x3f, 0xdb, 0x9f, 0xfd, 0x93, 0xb7, 0xc5, 0x99, 0xd7, 0xe3, 0x9a, 0x50, 0x4d, 0xe7, 0x93, 0x94, 0x34, 0x5e, 0xf2, 0x71, 0xf5, 0x57, 0x97, 0x12, 0x9d, 0xfa, 0x19, 0x87, 0x8f, 0x6f, 0x15, 0xc5, 0x7b, 0xfb, 0xc6, 0xee, 0x8a, 0x6c, 0xd6, 0xd3, 0xdb, 0xb8, 0x74, 0xb8, 0x33, 0xe1, 0xa7, 0x57, 0xf0, 0x1b, 0xe2, 0x27, 0x3f, 0x31, 0xd8, 0xdd, 0x8f, 0x25, 0x91, 0x33, 0x46, 0x17, 0xbe, 0xe9, 0xb2, 0x67, 0x4a, 0x0a, 0x42, 0x1e, 0x31, 0x71, 0xf6, 0x8a, 0x95, 0x8b, 0x14, 0x29, 0x0f, 0x5f, 0x1d, 0xc9, 0x43, 0xcb, 0xff, 0xec, 0xb7, 0x10, 0x8c, 0x71, 0xe5, 0x91, 0x2b, 0x71, 0x8e, 0xd7, 0xcd, 0x68, 0x52, 0xd9, 0x23, 0x95, 0x7e, 0x7a, 0x0f, 0xa3, 0x25, 0x54, 0x58, 0x88, 0x72, 0xb4, 0xa1, 0xae, 0x3c, 0xe5, 0x9c, 0x50, 0xdb, 0xb2, 0x7b, 0x28, 0x3a, 0x26, 0xa7, 0x47, 0x2e, 0x96, 0xb5, 0x44, 0x06, 0xe2, 0x96, 0x98, 0x64, 0xf7, 0x0d, 0x49, 0x4b, 0x98, 0x66, 0xc6, 0x78, 0x5f, 0x66, 0x12, 0xf6, 0xfe, 0x7e, 0x25, 0xed, 0xcb, 0x43, 0x90, 0xbb, 0x7c, 0x23, 0x5f, 0x45, 0x2e, 0x50, 0x43, 0x8f, 0xad, 0x01, 0xf1, 0x8b, 0xef, 0xda, 0xc5, 0x2f, 0xe1, 0xa8, 0xab, 0xca, 0x67, 0x52, 0x3f, 0x98, 0x9d, 0x0d, 0x33, 0x94, 0x64, 0xce, 0xf1, 0x8d, 0x1a, 0x05, 0x82, 0x7c, 0xa8, 0x88, 0xaf, 0x15, 0xc2, 0xcd, 0x66, 0x9c, 0x6a, 0x5d, 0x5f, 0xfa, 0xb6, 0x85, 0xfe, 0x10, 0xd4, 0x4f, 0x7c, 0x4b, 0x4b, 0xb1, 0x42, 0x79, 0x83, 0x03, 0x95, 0xdb, 0x88, 0xb6, 0x78, 0x7b, 0x0b, 0x44, 0xce, 0xbf, 0xaa, 0x63, 0xc0, 0x3f, 0x71, 0x7e, 0x5e, 0xd4, 0xa0, 0x65, 0x89, 0xf1, 0xae, 0x44, 0x10, 0x37, 0x8f, 0xd2, 0x19, 0x43, 0x33, 0xca, 0xc3, 0xcb, 0x4f, 0x9f, 0x09, 0xe9, 0x5f, 0x6c, 0xea, 0xb6, 0xec, 0x29, 0xc6, 0x1b, 0x0a, 0x25, 0x0c, 0xe4, 0x26, 0xb0, 0x12, 0x16, 0xfe, 0x18, 0x44, 0x83, 0xf1, 0xd8, 0x81, 0x9b, 0x79, 0x0b, 0xc2, 0x85, 0xf6, 0x27, 0xfd, 0x6f, 0xad, 0xe7, 0x49, 0x22, 0x10, 0x89, 0x42, 0xd9, 0x40, 0x3a, 0xaf, 0x53, 0xd0, 0xcf, 0x62, 0x27, 0xcc, 0xb5, 0x60, 0x58, 0xf9, 0x2b, 0x42, 0x29, 0x5f, 0xae, 0xdb, 0x32, 0x05, 0xb5, 0x1b, 0xb4, 0xfc, 0x9f, 0x33, 0x2a, 0x9e, 0xea, 0xfa, 0x20, 0x18, 0xa5, 0x90, 0x48, 0x26, 0x28, 0x41, 0xcb, 0x1e, 0x02, 0xac, 0xdd, 0x30, 0x33, 0x24, 0x94, 0xec, 0x9c, 0x56, 0xfa, 0x04, 0xb3, 0x2c, 0x61, 0x54, 0x7b, 0xf2, 0xf6, 0x1f, 0xb4, 0xb8, 0x99, 0x9c, 0x4e, 0xf7, 0xec, 0xb1, 0x24, 0x77, 0xaa, 0xfe, 0xe7, 0x6f, 0x3b, 0x1d, 0x58, 0xef, 0x85, 0x28, 0xbb, 0x7b, 0x04, 0x7c, 0x88, 0xf8, 0x1d, 0xbd, 0x63, 0xcd, 0xaf, 0x1b, 0x4e, 0x42, 0xec, 0xd3, 0x1e, 0x2b, 0x67, 0xf8, 0x2b, 0xcb, 0x6d, 0x73, 0x4c, 0xf3, 0x99, 0x49, 0x03, 0x6a, 0xa3, 0x1c, 0xf4, 0x91, 0x79, 0xf5, 0x9c, 0x47, 0x91, 0x40, 0x3f, 0x0b, 0x7d, 0x18, 0x22, 0x60, 0xc0, 0xc5, 0xfb, 0x76, 0xe0, 0x83, 0xa6, 0x06, 0xbc, 0x85, 0x19, 0x7e, 0x20, 0x3a, 0x9a, 0x5e, 0x97, 0xcf, 0x30, 0xe2, 0x80, 0xf5, 0x57, 0xe1, 0x64, 0xe4, 0xf7, 0xf5, 0x87, 0xa0, 0x97, 0xdc, 0xbd, 0x7b, 0xce, 0x1e, 0x7f, 0xdb, 0xfb, 0xf0, 0x3e, 0x3d, 0x36, 0x59, 0xf7, 0x7a, 0x87, 0x93, 0x08, 0x49, 0x55, 0xb4, 0x42, 0x06, 0x21, 0x8e, 0x3f, 0xb2, 0x74, 0xd3, 0xf6, 0x3a, 0x15, 0x7d, 0x8c, 0xfc, 0x80, 0x6c, 0x6e, 0x87, 0x94, 0x51, 0x9c, 0xa2, 0x8c, 0xcc, 0x48, 0x91, 0x30, 0xd1, 0x9f, 0x93, 0x4c, 0x50, 0xe7, 0xaf, 0x62, 0x15, 0xca, 0xb0, 0x9c, 0xed, 0xf1, 0x6f, 0x04, 0x0a, 0xd5, 0x50, 0xf7, 0xa8, 0xd2, 0x0f, 0xd7, 0xf1, 0x7e, 0xbd, 0x01, 0x1e, 0x38, 0x05, 0xff, 0xe0, 0x04, 0xb4, 0xfe, 0xfe, 0x96, 0x79, 0x82, 0x3f, 0xac, 0xe8, 0x58, 0x8a, 0xa1, 0xc5, 0xcd, 0x4c, 0x3f, 0x80, 0x1d, 0x1a, 0xd6, 0xfc, 0x2e, 0x98, 0x8a, 0x94, 0x7e, 0x99, 0xf1, 0x60, 0x5a, 0x87, 0xde, 0xb4, 0x52, 0x06, 0x77, 0xea, 0xe9, 0xd4, 0x8e, 0x62, 0x91, 0xf3, 0x2e, 0xc6, 0xd6, 0x0b, 0x73, 0x93, 0xd9, 0x0a, 0x9f, 0xd5, 0x00, 0x0d, 0x6b, 0x32, 0xec, 0x83, 0x9b, 0x29, 0xab, 0x8f, 0xd5, 0x9c, 0x2f, 0xaf, 0xb3, 0x8c, 0xff, 0x9c, 0x17, 0x25, 0x2d, 0x71, 0xbf, 0xfa, 0x88, 0x0e, 0x19, 0x91, 0x12, 0xbf, 0x58, 0x22, 0xb5, 0x19, 0xc7, 0x9c, 0x31, 0x25, 0x5d, 0xe9, 0x59, 0xc1, 0x92, 0x73, 0x7f, 0x42, 0x72, 0xe7, 0x2d, 0x5e, 0xf0, 0x39, 0x16, 0x4a, 0x7c, 0xe8, 0x4b, 0x1f, 0xd8, 0x83, 0xb2, 0x82, 0x27, 0x6c, 0xb5, 0x84, 0x47, 0xdc, 0x37, 0xc7, 0x60, 0x27, 0xcc, 0xe3, 0xbd, 0x41, 0x29, 0x07, 0xdb, 0x81, 0xd9, 0xe4, 0xc0, 0xa6, 0x32, 0xc6, 0x8e, 0x18, 0x88, 0x04, 0x58, 0x70, 0xa0, 0x9b, 0x34, 0x39, 0x67, 0x16, 0x92, 0xf8, 0xe4, 0xb1, 0xcc, 0x6b, 0x6c, 0xbd, 0xfe, 0x0f, 0x15, 0x46, 0x17, 0xe4, 0x6d, 0xf4, 0x30, 0x74, 0x6b, 0x2f, 0x1d, 0x12, 0xa5, 0x86, 0x42, 0x60, 0xc4, 0x52, 0xa8, 0x14, 0x35, 0x96, 0x51, 0xfb, 0x22, 0x2a, 0xc8, 0x3e, 0xa1, 0x19, 0xfb, 0xe4, 0x2b, 0x47, 0x4d, 0x98, 0x4f, 0x57, 0xe8, 0xac, 0xa7, 0xcb, 0x50, 0x5f, 0x0c, 0x6d, 0x3e, 0x5b, 0x06, 0xee, 0xab, 0x82, 0x86, 0xce, 0x2b, 0xea, 0xd8, 0x7b, 0x7c, 0x26, 0xd3, 0xbd, 0x5f, 0xc8, 0x53, 0x51, 0xa6, 0x23, 0xe9, 0xd5, 0x8f, 0x56, 0xd0, 0xe4, 0x50, 0x86, 0x23, 0x81, 0xf3, 0x6a, 0x4e, 0xb9, 0x64, 0x0d, 0xc3, 0x84, 0xc9, 0xcf, 0xee, 0xed, 0x11, 0xad, 0x6a, 0x72, 0xd0, 0xc3, 0x75, 0xae, 0x4a, 0x0f, 0xa1, 0x35, 0xcd, 0x78, 0xcd, 0xc0, 0x45, 0x0f, 0x54, 0x8a, 0x0a, 0x94, 0x84, 0xf9, 0xfc, 0x3c, 0x52, 0x81, 0xd2, 0xb1, 0x4b, 0xc6, 0xaf, 0x5b, 0xce, 0x00, 0xf6, 0xde, 0x79, 0xa4, 0x60, 0xe4, 0xe1, 0x41, 0x4c, 0x1c, 0x86, 0xa7, 0x56, 0x83, 0x06, 0x4f, 0x2a, 0xe2, 0x90, 0xf7, 0x9b, 0x97, 0x9c, 0x8d, 0xef, 0x99, 0xd9, 0x4e, 0x7d, 0xb7, 0x67, 0x2f, 0x7b, 0x20, 0x47, 0x7c, 0x11, 0x28, 0x10, 0xbf, 0xb1, 0x49, 0xe3, 0xe3, 0xab, 0x68, 0xa0, 0x99, 0xfc, 0x5a, 0x5a, 0xfb, 0x67, 0xa7, 0x09, 0x6f, 0xc8, 0x8e, 0x7f, 0xcf, 0xa4, 0x49, 0x9e, 0xc7, 0x04, 0x92, 0xc7, 0x7e, 0x84, 0x65, 0x95, 0x78, 0xa7, 0x08, 0xcc, 0xbb, 0x6d, 0x49, 0x8c, 0x30, 0x28, 0x07, 0xcb, 0x4d, 0x8b, 0xf3, 0x02, 0xf1, 0x04, 0x98, 0x25, 0x8f, 0x4c, 0x99, 0xd9, 0x8f, 0x3c, 0x3a, 0xe2, 0xf1, 0xe2, 0x22, 0xda, 0x34, 0xd4, 0x60, 0x29, 0x76, 0xc4, 0xab, 0x31, 0xdc, 0x55, 0xee, 0xc9, 0x34, 0x2d, 0x04, 0xed, 0xd9, 0x4b, 0xbf, 0xb3, 0xd7, 0x9b, 0x30, 0x81, 0x50, 0xc8, 0x22, 0x7e, 0x1f, 0x52, 0xe8, 0x46, 0xba, 0xe0, 0x59, 0xe2, 0x5d, 0xd7, 0x18, 0xf7, 0x65, 0x2b, 0x19, 0x3d, 0xfa, 0x76, 0x60, 0x33, 0xf0, 0x47, 0x0c, 0x12, 0xef, 0xbc, 0x95, 0xff, 0xd2, 0x53, 0x52, 0x84, 0x4e, 0xfd, 0x3e, 0x41, 0xd4, 0x74, 0xfb, 0xdf, 0xb8, 0xcf, 0x17, 0x46, 0x92, 0x54, 0x8f ],
- const [ 0x56, 0x2d, 0x41, 0x2b, 0x2b, 0x65, 0xb5, 0xb9, 0x06, 0x84, 0x8a, 0xe4, 0xc8, 0xb6, 0xcb, 0xdb, 0xf3, 0x47, 0x26, 0xe6, 0xbc, 0x65, 0x9d, 0x4d, 0x62, 0x26, 0x7f, 0x76, 0xbf, 0xcd, 0x97, 0x4d, 0x1d, 0x49, 0xa3, 0xe8, 0x4a, 0xfe, 0x08, 0x6c, 0xef, 0xc8, 0xc3, 0x2a, 0x1d, 0x3d, 0xa3, 0x0e, 0x29, 0x33, 0xb5, 0x3a, 0xba, 0x83, 0x00, 0xee, 0x20, 0x0c, 0x73, 0xab, 0xe7, 0xfa, 0x1c, 0x98, 0xac, 0x48, 0x9b, 0x24, 0x30, 0x83, 0xd5, 0xed, 0xab, 0xd1, 0xed, 0xe1, 0x63, 0x33, 0x70, 0xa2, 0x7c, 0x07, 0xcf, 0x2f, 0x12, 0xd1, 0x13, 0xc2, 0x85, 0x3a, 0xcc, 0xf4, 0x14, 0x59, 0x4a, 0x27, 0xae, 0x32, 0x10, 0x25, 0x04, 0x7c, 0x86, 0x05, 0xe3, 0xa8, 0xee, 0x4f, 0xc1, 0x1e, 0x99, 0x60, 0x96, 0xca, 0x5b, 0x0f, 0xed, 0xd7, 0x3c, 0x90, 0x3a, 0xba, 0x70, 0x99, 0x6e, 0x73, 0x8a, 0xc4, 0xc9, 0x0f, 0xec, 0x35, 0xef, 0x72, 0x82, 0x7c, 0x3f, 0x53, 0xb0, 0xbc, 0x60, 0x88, 0x88, 0x0d, 0x1c, 0x84, 0x41, 0x20, 0x72, 0x1e, 0xe4, 0x22, 0xe6, 0x94, 0x49, 0xe2, 0x1c, 0xcf, 0x42, 0x35, 0xa5, 0xe8, 0x16, 0x9a, 0x19, 0xec, 0x31, 0x1a, 0x66, 0xdc, 0x19, 0x72, 0x67, 0xf8, 0xa4, 0x74, 0xb9, 0x3d, 0x69, 0xab, 0xca, 0x2d, 0x74, 0x3e, 0x32, 0xce, 0x3e, 0x16, 0x47, 0xf5, 0xdc, 0x43, 0xeb, 0xc4, 0x76, 0x9c, 0xa9, 0x72, 0xfb, 0xa6, 0x01, 0x4a, 0x13, 0xb8, 0xff, 0xf7, 0x55, 0x5c, 0x13, 0xfe, 0xbb, 0xf7, 0x1c, 0x8c, 0x52, 0xad, 0xc6, 0x72, 0x36, 0x7f, 0x16, 0x6e, 0xbe, 0xb6, 0x43, 0xac, 0xf4, 0x85, 0xc8, 0x8c, 0x48, 0xea, 0xb7, 0xa6, 0x85, 0xd5, 0x50, 0x0c, 0x03, 0x8c, 0xd2, 0xce, 0x1f, 0x4e, 0x91, 0xc4, 0xe8, 0x36, 0x49, 0x87, 0x1b, 0x63, 0xb2, 0xc1, 0x52, 0x56, 0x54, 0xa7, 0x78, 0x9b, 0x9d, 0xc3, 0x80, 0xac, 0x31, 0xf7, 0x56, 0x12, 0x81, 0xbf, 0x16, 0xcd, 0x9f, 0xb6, 0x7d, 0xf6, 0x51, 0x5c, 0x9d, 0xa3, 0x64, 0x16, 0xd4, 0x0b, 0x42, 0x76, 0xfe, 0xeb, 0xc7, 0xbd, 0xea, 0x28, 0x51, 0x9e, 0x0b, 0xb5, 0x16, 0x45, 0x70, 0xb7, 0xbb, 0x98, 0xf6, 0xe7, 0x22, 0xbd, 0xbd, 0x38, 0x83, 0xdc, 0xd8, 0xbb, 0xbe, 0x26, 0x49, 0xbf, 0xef, 0x16, 0x2c, 0x3c, 0x43, 0xf6, 0x32, 0x72, 0x0b, 0xa6, 0x51, 0xcd, 0x0f, 0x99, 0xba, 0x0c, 0x25, 0x20, 0x0c, 0xa2, 0x02, 0xeb, 0xc7, 0x5c, 0x4f, 0xcc, 0x03, 0x45, 0x00, 0xbf, 0x62, 0xc7, 0xe1, 0x28, 0x43, 0x12, 0x71, 0x5b, 0x38, 0xc2, 0xf4, 0x61, 0xbb, 0xbb, 0xc4, 0xfa, 0x1c, 0x58, 0xe8, 0xde, 0xbe, 0xc6, 0xe7, 0x48, 0x83, 0xaa, 0xde, 0xb5, 0x85, 0x0a, 0xd1, 0xe9, 0x07, 0x6a, 0x3f, 0x34, 0xab, 0x35, 0xf9, 0xf3, 0xe5, 0x5f, 0x34, 0x59, 0xaf, 0x49, 0xdc, 0x70, 0x7e, 0xe5, 0x2b, 0x5a, 0x75, 0x1a, 0x7b, 0xdd, 0xd9, 0x6a, 0x58, 0x1f, 0xc6, 0xd2, 0xda, 0xad, 0x20, 0xf1, 0x31, 0xc2, 0xcb, 0x6d, 0x82, 0xc7, 0x1f, 0x93, 0xf2, 0x16, 0x96, 0x3d, 0x00, 0x03, 0xc8, 0xf9, 0x17, 0x1d, 0x9a, 0x67, 0x63, 0xb1, 0xb2, 0xe3, 0xe5, 0x90, 0x2e, 0x64, 0xc2, 0x12, 0x95, 0xa4, 0xe1, 0x5b, 0x0d, 0x82, 0xb4, 0xdd, 0xcf, 0xa4, 0x56, 0x1e, 0xd9, 0x60, 0xd7, 0xbc, 0xe2, 0xdd, 0xd4, 0xae, 0x93, 0x75, 0x4a, 0xcc, 0xf4, 0x5e, 0xab, 0x92, 0x25, 0x8a, 0x32, 0x21, 0x4e, 0xcb, 0x74, 0x86, 0xd8, 0x3b, 0x39, 0x3f, 0xde, 0xdb, 0x89, 0xfb, 0xde, 0x7a, 0x0a, 0xa2, 0xb5, 0xd9, 0x89, 0x95, 0xca, 0x0c, 0xd6, 0x37, 0x89, 0x23, 0xd5, 0xac, 0x13, 0x0a, 0xd2, 0xe1, 0x33, 0xae, 0x15, 0xcc, 0x95, 0x61, 0xb6, 0xf5, 0x32, 0x80, 0xb3, 0x35, 0x0f, 0x53, 0x40, 0xbd, 0x27, 0x34, 0x5e, 0x5b, 0xa5, 0xf4, 0xaf, 0xf9, 0x57, 0x7a, 0x89, 0x67, 0x60, 0xad, 0x49, 0x5a, 0x2d, 0x95, 0xea, 0xb4, 0xaa, 0xbc, 0xd6, 0x05, 0xb5, 0xdb, 0xfb, 0x52, 0xd3, 0xb2, 0x22, 0x16, 0x21, 0x38, 0x7c, 0x87, 0x8e, 0xf4, 0x7e, 0x1a, 0x48, 0xab, 0xef, 0x49, 0x74, 0x3b, 0x40, 0x94, 0x22, 0xc7, 0x1b, 0xc6, 0x80, 0x14, 0x3e, 0x79, 0x4d, 0x33, 0x8a, 0xdc, 0x91, 0x61, 0x57, 0xb4, 0x8c, 0x2b, 0x0b, 0xa1, 0xec, 0xd6, 0xeb, 0xa3, 0x43, 0xfd, 0x31, 0xdc, 0xb7, 0x7c, 0x5e, 0x98, 0xfc, 0x8d, 0xd1, 0x8a, 0x7f, 0x31, 0x99, 0x58, 0xe4, 0xd2, 0x88, 0x5b, 0xb3, 0x26, 0x88, 0xa0, 0x4e, 0x56, 0x32, 0x32, 0x27, 0x60, 0x9d, 0x9b, 0x2f, 0xba, 0x74, 0xa8, 0x92, 0x38, 0x4c, 0x6d, 0xa1, 0x2f, 0x34, 0x89, 0x0f, 0xdb, 0x8d, 0xab, 0x61, 0xfe, 0x1c, 0x55, 0xa0, 0xca, 0x5d, 0xe0, 0x51, 0x01, 0x1a, 0xc1, 0xa7, 0x5b, 0x3d, 0x0a, 0xf6, 0x28, 0xe3, 0x34, 0x6b, 0x36, 0xb1, 0x1b, 0xfb, 0xf5, 0x6b, 0x4a, 0x99, 0xd9, 0xc2, 0x79, 0xac, 0x00, 0x6e, 0x54, 0xc0, 0x15, 0x7d, 0x7e, 0x7b, 0x74, 0xeb, 0xd6, 0xd3, 0x8e, 0x72, 0xf9, 0x7f, 0x8f, 0xa3, 0x08, 0xab, 0x3f, 0x36, 0xab, 0xf0, 0x26, 0x9f, 0x55, 0x83, 0xf4, 0xe2, 0xca, 0xad, 0x20, 0xa7, 0xdf, 0x7b, 0xce, 0x91, 0x81, 0xb6, 0xf6, 0xcc, 0xf9, 0x15, 0xc3, 0xe5, 0x6e, 0xb2, 0x39, 0xdf, 0xac, 0xbb, 0x1b, 0x83, 0x24, 0x6a, 0x0c, 0xf7, 0x33, 0x37, 0xf4, 0x92, 0xa7, 0x4c, 0xa5, 0xef, 0x7f, 0x39, 0xbf, 0x40, 0xf2, 0xe9, 0xd0, 0xe5, 0xb3, 0xd4, 0xc0, 0x3e, 0x74, 0x77, 0x6d, 0xbd, 0xa9, 0x01, 0x92, 0x3f, 0x8e, 0x50, 0xed, 0x9c, 0x6b, 0x1b, 0xa1, 0x7c, 0x16, 0x71, 0xd9, 0x6d, 0xba, 0x62, 0xae, 0x33, 0xd8, 0xfc, 0x4b, 0x5f, 0x8b, 0x79, 0x4e, 0x24, 0x10, 0xb6, 0x72, 0x65, 0x85, 0xe7, 0x6b, 0x12, 0xf1, 0x8a, 0x12, 0xb5, 0x85, 0x99, 0xc2, 0x48, 0x22, 0x04, 0x02, 0x4a, 0x1b, 0x5e, 0x64, 0x12, 0x3b, 0xd6, 0xad, 0x62, 0x0a, 0x6a, 0x35, 0x3f, 0x4c, 0x57, 0x91, 0x00, 0xcb, 0xd4, 0x70, 0xa6, 0x56, 0xff, 0xc3, 0x6b, 0x0a, 0x18, 0x21, 0x9e, 0xd0, 0xed, 0x69, 0xad, 0x27, 0x95, 0xa9, 0x84, 0x24, 0x61, 0x3e, 0x15, 0xb6, 0x10, 0x3d, 0x38, 0x2f, 0x42, 0x12, 0xb6, 0x00, 0x30, 0x67, 0xa0, 0xc4, 0x99, 0x48, 0xe6, 0x81, 0x00, 0x84, 0x24, 0x2a, 0x14, 0x56, 0xbf, 0x68, 0x70, 0x44, 0x31, 0x99, 0x84, 0x48, 0xa1, 0x1a, 0xd3, 0x2e, 0xb7, 0xc1, 0x60, 0x3d, 0xae, 0xae, 0x62, 0x19, 0xab, 0x44, 0x3f, 0xe8, 0x4d, 0x72, 0xb8, 0xb4, 0x85, 0x37, 0x61, 0x10, 0xa8, 0x65, 0x55, 0xff, 0xc2, 0xa5, 0x27, 0x11, 0x2e, 0xbb, 0x1c, 0xcf, 0x63, 0x0b, 0x97, 0x59, 0x11, 0x5c, 0xd4, 0x4e, 0x6d, 0xdd, 0xd9, 0xec, 0xc8, 0x65, 0xaa, 0x79, 0x67, 0xff, 0xbd, 0xe1, 0x8f, 0xa6, 0xad, 0xa0, 0xdf, 0x4d, 0x32, 0xe2, 0xe3, 0x23, 0x51, 0xe9, 0xe5, 0x14, 0xd0, 0xb0, 0x06, 0x93, 0xed, 0xce, 0x8e, 0x97, 0x50, 0x9c, 0x81, 0xe3, 0x3d, 0x9a, 0x73, 0x8b, 0x0e, 0x0f, 0x9c, 0xb4, 0xe1, 0xf0, 0x2f, 0x9b, 0x8e, 0x03, 0xe8, 0xd9, 0xdc, 0x44, 0xe4, 0xe5, 0xf4, 0x88, 0xb6, 0xda, 0x15, 0x60, 0xb7, 0x7a, 0x8a, 0x40, 0x9d, 0x73, 0xd9, 0xe1, 0x50, 0xe2, 0x3e, 0xe3, 0xf9, 0x16, 0x57, 0xb7, 0x5b, 0x96, 0x21, 0xbc, 0x66, 0x65, 0x23, 0xa8, 0x09, 0x84, 0xe9, 0x2a, 0x49, 0xb9, 0xb4, 0xce, 0x90, 0x8f, 0x70, 0x20, 0x47, 0x9e, 0xe6, 0x14, 0xa6, 0x0c, 0x33, 0xa5, 0xcb, 0x54, 0x79, 0xbd, 0x0a, 0x46, 0xd4, 0x55, 0x85, 0x50, 0x90, 0xdd, 0xfc, 0xfb, 0x99, 0xde, 0xe6, 0xb8, 0x32, 0xde, 0xc0, 0xdd, 0xea, 0x84, 0xa5, 0xeb, 0xcc, 0xfc, 0x1f, 0x12, 0xd7, 0x9d, 0x3d, 0xf7, 0xae, 0xc9, 0xe5, 0xb4, 0x90, 0x15, 0x6c, 0x20, 0x89, 0xaa, 0x64, 0x52, 0xea, 0xec, 0xb5, 0x60, 0xf8, 0x59, 0xf0, 0x6c, 0xe1, 0xb3, 0xdf, 0xe2, 0xf4, 0x61, 0x61, 0xfb, 0x10, 0x13, 0x74, 0x86, 0x5d, 0xa5, 0x94, 0xe7, 0x3b, 0x46, 0x44, 0x60, 0x78, 0xd9, 0xea, 0x8f, 0xc6, 0x9b, 0xdf, 0x38, 0x6c, 0x06, 0xc7, 0x45, 0x3b, 0xf6, 0x1e, 0x0b, 0xc4, 0x0b, 0x14, 0xcf, 0xc8, 0x4e, 0x9b, 0x89, 0xf0, 0x17, 0xbe, 0xe7, 0xbe, 0x2e, 0x34, 0x95, 0xc4, 0x30, 0x35, 0xbc, 0x14, 0x34, 0x8c, 0xc9, 0xf7, 0xaf, 0xee, 0x6f, 0xe2, 0x95, 0x8a, 0xef, 0xa5, 0xc1, 0xe1, 0x97, 0xe6, 0x97, 0xd8, 0x88, 0xce, 0xe8, 0x0b, 0xbd, 0x02, 0x15, 0x65, 0x49, 0xd5, 0x78, 0xee, 0xe0, 0xbc, 0xff, 0xe3, 0x99, 0x02, 0x1a, 0x0c, 0xf2, 0xbc, 0xd8, 0x4a, 0x15, 0x00, 0x4d, 0x70, 0x5a, 0x52, 0x36, 0x53, 0x0c, 0x5f, 0xe0, 0x25, 0x70, 0xee, 0x45, 0xfe, 0x03, 0x13, 0x78, 0xbc, 0x04, 0xa5, 0x44, 0x0d, 0x32, 0xf3, 0x10, 0xca, 0xd7, 0xb3, 0x06, 0x87, 0x05, 0x3b, 0x75, 0x68, 0x20, 0xf4, 0x73, 0x36, 0x9c, 0x0b, 0xc6, 0xb1, 0x08, 0x69, 0x05, 0x28, 0x4c, 0xe6, 0xfa, 0x48, 0x2f, 0xb9, 0x4b, 0x32, 0x1c, 0x33, 0x59, 0xd0, 0x25, 0xae, 0x69, 0x68, 0x48, 0xc0, 0x02, 0x71, 0xf1, 0xb4, 0x95, 0xa6, 0xc1, 0x3a, 0x64, 0x5a, 0x8e, 0x5d, 0x9c, 0x0b, 0xab, 0xb6, 0xc4, 0x39, 0x69, 0xdf, 0x5b, 0x78, 0xdd, 0x2b, 0xbd, 0xc5, 0xe4, 0x94, 0x47, 0x16, 0x65, 0xf5, 0xbb, 0x35, 0xd6, 0x7a, 0xe6, 0xcd, 0x02, 0x54, 0x80, 0xc5, 0x09, 0xb1, 0x53, 0xce, 0xa8, 0xeb, 0xa0, 0x38, 0xba, 0xff, 0xbe, 0x0a, 0xff, 0x42, 0x04, 0x51, 0x1d, 0x4f, 0xe9, 0xb8, 0xe4, 0x44, 0x6a, 0x59, 0xd6, 0x2e, 0xac, 0xd3, 0xe7, 0xc1, 0xe3, 0x9d, 0x81, 0x4d, 0x72, 0x9a, 0xcb, 0xed, 0x54, 0xed, 0x2b, 0x02, 0xba, 0x0e, 0x0a, 0xdf, 0xf5, 0x1d, 0xd7, 0xc6, 0x97, 0x77, 0x4e, 0x14, 0xd5, 0x88, 0xfa, 0xb8, 0x30, 0xe0, 0xf8, 0xe9, 0x55, 0x88, 0xff, 0x19, 0x41, 0x96, 0x9d, 0x24, 0xa8, 0xff, 0xc3, 0xce, 0x98, 0xad, 0x84, 0x6c, 0x5a, 0xd1, 0x1a, 0xe1, 0x99, 0x7b, 0x2a, 0xcc, 0xc5, 0x68, 0x49, 0x00, 0xba, 0x1a, 0xbe, 0x35, 0x9d, 0x2e, 0x89, 0xfd, 0x07, 0xeb, 0xa5, 0xf9, 0x66, 0x17, 0x8b, 0x4c, 0xa0, 0x0e, 0xf7, 0x50, 0xf9, 0x15, 0xee, 0x88, 0x36, 0xeb, 0x00, 0xd6, 0x02, 0xa1, 0xcb, 0xee, 0x92, 0xac, 0xc0, 0x0b, 0x85, 0x39, 0x2a, 0xe1, 0x0e, 0xc0, 0x6b, 0xd2, 0x54, 0xdc, 0x89, 0x64, 0x19, 0x5a, 0xea, 0xf3, 0x9a, 0x8f, 0x5c, 0xa3, 0xb7, 0xef, 0x59, 0x99, 0x54, 0xdc, 0x88, 0x6b, 0xff, 0xbc, 0x86, 0xd4, 0xd3, 0x4e, 0xe7 ],
- const [ 0x53, 0x10, 0x97, 0x7a, 0x5f, 0x36, 0x89, 0xbb, 0x9a, 0xcd, 0x32, 0xb9, 0xec, 0x2a, 0x60, 0xa0, 0x27, 0xe9, 0x12, 0xff, 0xeb, 0x3c, 0x7f, 0xc1, 0xc7, 0x83, 0x5a, 0x5f, 0xa0, 0x1d, 0x55, 0x54, 0x57, 0x7e, 0xe4, 0xd0, 0xa6, 0x82, 0x43, 0xb0, 0x4b, 0x01, 0xba, 0xae, 0x69, 0xa4, 0x20, 0xd5, 0x2b, 0xf7, 0x9e, 0x39, 0xaa, 0xbf, 0xb5, 0xe4, 0x11, 0x8d, 0x82, 0x13, 0xff, 0x93, 0x41, 0xa3, 0x2c, 0xb7, 0x11, 0xc6, 0x50, 0xe6, 0xf6, 0xfa, 0x40, 0xab, 0x24, 0x3c, 0x5a, 0x00, 0x7b, 0x78, 0x24, 0x64, 0x4e, 0x45, 0x30, 0x2d, 0x68, 0xcf, 0x43, 0x20, 0x51, 0x14, 0xb5, 0x3f, 0xcd, 0x54, 0x1b, 0xe2, 0xa6, 0xc2, 0x24, 0x09, 0xab, 0x80, 0xc1, 0xf1, 0xf9, 0xca, 0x89, 0xe5, 0x79, 0x72, 0x5b, 0x57, 0xaa, 0x8c, 0x45, 0x2f, 0xa1, 0x6a, 0xa4, 0x63, 0x4e, 0xcb, 0x8d, 0xc8, 0x00, 0x4f, 0x6c, 0x28, 0x2b, 0x2e, 0xeb, 0x94, 0x6a, 0x2a, 0x16, 0xfb, 0xc0, 0xc2, 0xbc, 0xfc, 0x23, 0xa9, 0x18, 0xf9, 0x3b, 0x76, 0xb0, 0x6d, 0x67, 0x9d, 0x7e, 0x7f, 0x01, 0x9e, 0x4e, 0xd7, 0xe3, 0x7c, 0x67, 0xb0, 0x29, 0x71, 0x6d, 0x2e, 0x39, 0xe0, 0x86, 0xf2, 0x01, 0x8b, 0xbc, 0xed, 0x80, 0x06, 0xa3, 0x71, 0x88, 0x6c, 0x3b, 0x8e, 0xc2, 0x50, 0x17, 0x9b, 0xf2, 0xf6, 0xbf, 0x13, 0x7c, 0xc3, 0x54, 0xa3, 0x28, 0xf3, 0x72, 0x80, 0x22, 0x8a, 0x5a, 0xfe, 0x45, 0x8d, 0x51, 0x5f, 0x98, 0x71, 0x43, 0xe8, 0x19, 0xd4, 0xac, 0x3b, 0xba, 0x6b, 0xb9, 0xe0, 0xaa, 0x3c, 0xaa, 0x25, 0xd5, 0x0d, 0x7a, 0x28, 0xae, 0x1c, 0xc2, 0x32, 0x2c, 0x10, 0xdb, 0x46, 0x12, 0x30, 0x42, 0xfa, 0x74, 0xd3, 0x41, 0x86, 0x77, 0x17, 0xcc, 0x1b, 0x58, 0xd6, 0xaa, 0x76, 0xb0, 0xd6, 0xd5, 0xb4, 0xf6, 0x40, 0x22, 0x68, 0x45, 0x54, 0x24, 0xeb, 0x5f, 0x5a, 0x4e, 0xf3, 0xf3, 0xdc, 0x59, 0x67, 0x1b, 0x12, 0xe5, 0x72, 0x29, 0x9e, 0x63, 0xd7, 0xa3, 0x7a, 0x32, 0x84, 0x8c, 0x2e, 0x08, 0x69, 0xe5, 0x46, 0x94, 0x8a, 0x74, 0x03, 0x62, 0x53, 0xc4, 0x51, 0xfe, 0x2c, 0x6d, 0xf9, 0x5c, 0x4e, 0x95, 0x18, 0x77, 0xd5, 0xb7, 0xd0, 0x39, 0x16, 0xa4, 0x3d, 0x9b, 0x32, 0xc7, 0xaa, 0x0d, 0xec, 0xac, 0x05, 0x18, 0xb7, 0xc4, 0x91, 0x42, 0x13, 0x62, 0xdb, 0x32, 0x1a, 0x0a, 0xef, 0x14, 0x56, 0xeb, 0xcb, 0x3f, 0xd6, 0xaa, 0x14, 0x15, 0x81, 0x61, 0x08, 0x2b, 0xaa, 0xe8, 0xb4, 0xab, 0xe4, 0x53, 0x67, 0xf6, 0x17, 0xbb, 0x66, 0x8d, 0xd3, 0x42, 0xe1, 0x31, 0xe5, 0x51, 0x26, 0x49, 0x28, 0x24, 0x15, 0x85, 0x9e, 0x89, 0xd4, 0xc1, 0xbf, 0xe4, 0xc4, 0x2c, 0x11, 0x77, 0xb3, 0xa9, 0xf9, 0xe0, 0x53, 0x75, 0xd1, 0xe3, 0xea, 0x0a, 0x3a, 0x6a, 0x4c, 0x44, 0xb4, 0xca, 0x07, 0xc3, 0x6c, 0x48, 0xdd, 0x90, 0x54, 0xdc, 0x77, 0x03, 0x79, 0x35, 0x57, 0xe4, 0x92, 0xfc, 0x0f, 0xd0, 0xd4, 0x5d, 0xb0, 0xde, 0x0e, 0xc4, 0x86, 0x83, 0xf1, 0xe4, 0x02, 0xb3, 0xaf, 0xfe, 0xf8, 0x49, 0xc9, 0x60, 0x0b, 0xa9, 0x21, 0x2c, 0x65, 0xa4, 0x57, 0x5a, 0xab, 0x9c, 0x52, 0x00, 0x2f, 0xe8, 0x1d, 0xd1, 0x68, 0x79, 0xf5, 0xe4, 0xa0, 0xbe, 0xa0, 0xb8, 0xed, 0xc6, 0x00, 0x74, 0x62, 0xa5, 0xe7, 0x73, 0x86, 0x18, 0x2d, 0xff, 0x05, 0x6c, 0x00, 0x5d, 0xa6, 0x9b, 0x7c, 0x0b, 0x7d, 0xb9, 0x7b, 0x45, 0x62, 0x8e, 0xaf, 0xcd, 0xa2, 0x85, 0xee, 0xec, 0xf4, 0xc5, 0xcc, 0xb4, 0xae, 0x9d, 0x6f, 0x89, 0x38, 0x25, 0x9f, 0xe0, 0xc1, 0x22, 0x1d, 0x45, 0x32, 0x2b, 0x36, 0xa3, 0x60, 0x0a, 0x97, 0xc0, 0x86, 0x65, 0x63, 0x07, 0xf2, 0x9e, 0x83, 0x8a, 0xfe, 0xf7, 0x3e, 0x47, 0x42, 0xfa, 0x09, 0xaa, 0x08, 0x18, 0xa0, 0x54, 0x00, 0x90, 0x55, 0x1b, 0x36, 0x92, 0xa8, 0x52, 0x40, 0xa4, 0x19, 0x4a, 0xbc, 0x46, 0x3a, 0x18, 0xfa, 0xd1, 0x08, 0x99, 0xf5, 0xa5, 0x7b, 0xb4, 0x88, 0x83, 0x5c, 0xdf, 0xde, 0x38, 0x57, 0xe5, 0x2b, 0x7c, 0x51, 0xe6, 0x99, 0x19, 0xfc, 0x9f, 0x86, 0x50, 0xa8, 0xeb, 0xec, 0x78, 0x5c, 0x8a, 0x20, 0xe8, 0x25, 0x22, 0xc0, 0x17, 0xae, 0x83, 0xe6, 0x02, 0x11, 0x2f, 0xa2, 0xce, 0xed, 0x1a, 0xa8, 0xaf, 0xb9, 0xae, 0x45, 0x08, 0x57, 0x12, 0x98, 0xd4, 0xec, 0xac, 0xfe, 0x44, 0xf0, 0xe5, 0xce, 0xa9, 0x81, 0x2c, 0x47, 0x95, 0xfd, 0x3d, 0xc6, 0x3d, 0xcf, 0xa3, 0x3c, 0x22, 0x89, 0x7b, 0xe0, 0xf1, 0x34, 0x7c, 0x21, 0xa7, 0xe3, 0x34, 0xdf, 0xf8, 0x8f, 0x94, 0xda, 0xf2, 0x1e, 0xaf, 0x6b, 0xde, 0xc5, 0xbf, 0x72, 0x67, 0x90, 0x69, 0x8f, 0xfe, 0x3f, 0x42, 0x95, 0x7c, 0x54, 0x91, 0x3b, 0x09, 0x6a, 0x57, 0x15, 0x3d, 0xc8, 0x8c, 0xc3, 0x86, 0x36, 0xac, 0x69, 0xca, 0x10, 0x72, 0x5f, 0x4d, 0x98, 0xe3, 0x29, 0xd4, 0x90, 0x8f, 0xa9, 0x0b, 0x09, 0x14, 0x93, 0x24, 0x76, 0xe3, 0x22, 0xc1, 0x04, 0x47, 0x09, 0x14, 0x2e, 0xa3, 0xad, 0x44, 0x8b, 0xfb, 0x91, 0x13, 0xeb, 0xb5, 0x11, 0xbf, 0xa3, 0xa1, 0x54, 0x25, 0x25, 0x38, 0x7c, 0x2c, 0xd4, 0x21, 0x1f, 0x61, 0x16, 0xfa, 0xfb, 0xdf, 0xaa, 0x54, 0xe5, 0x72, 0x3c, 0xff, 0x03, 0xfc, 0x36, 0x89, 0x3b, 0x17, 0xda, 0x01, 0xeb, 0xfb, 0x8e, 0x00, 0xdb, 0xa3, 0x76, 0xeb, 0x70, 0x2b, 0x48, 0x72, 0x22, 0x7d, 0x5c, 0x5c, 0x2f, 0x2c, 0x03, 0x87, 0x91, 0xa0, 0x1a, 0x2a, 0x2e, 0x74, 0xdf, 0x5e, 0x50, 0x1c, 0x03, 0xdd, 0x54, 0xcb, 0x00, 0x09, 0xa6, 0x93, 0xac, 0x30, 0xed, 0xcf, 0x0e, 0x0e, 0x82, 0xbe, 0x71, 0x93, 0x27, 0x70, 0xb8, 0xe7, 0xf6, 0xe6, 0xf1, 0xac, 0x97, 0x75, 0x2d, 0x83, 0xb6, 0x6b, 0x8e, 0xd1, 0xb4, 0xf5, 0xa1, 0xc3, 0x9d, 0x40, 0xee, 0x8f, 0x5b, 0xdf, 0xce, 0xfd, 0x29, 0x6d, 0x7d, 0x27, 0x4a, 0x73, 0x70, 0x7c, 0xfa, 0x8b, 0xe9, 0x0b, 0xa5, 0xc6, 0xc8, 0xff, 0x57, 0x4c, 0xa4, 0x65, 0x74, 0x42, 0x1a, 0x36, 0xa9, 0xf1, 0x65, 0x91, 0x22, 0x24, 0x2f, 0x48, 0xfd, 0xd1, 0xa7, 0x9e, 0xff, 0xfc, 0xd4, 0x4f, 0x86, 0xd9, 0x29, 0xd1, 0xbf, 0x31, 0x59, 0xda, 0x19, 0x06, 0x6d, 0x22, 0xfa, 0x7a, 0x13, 0x6a, 0xb0, 0xed, 0x39, 0xbd, 0xaa, 0x66, 0xda, 0xf6, 0xe8, 0x34, 0x18, 0x82, 0xb0, 0xd5, 0x8c, 0x67, 0x83, 0x16, 0xda, 0x85, 0x4f, 0x7c, 0x88, 0x1c, 0xe6, 0xe3, 0x10, 0x8f, 0xaf, 0x65, 0x33, 0x68, 0x9b, 0x7d, 0x91, 0x9b, 0x5b, 0x6c, 0x77, 0x0f, 0xd1, 0xdc, 0xf8, 0x5a, 0xc4, 0xc4, 0x3f, 0xcd, 0xd7, 0x8b, 0x23, 0xb0, 0xbc, 0x70, 0xfc, 0xce, 0xa5, 0x29, 0xb5, 0x35, 0xfb, 0xca, 0x23, 0x37, 0x53, 0xe9, 0x95, 0xb4, 0x9e, 0x00, 0xad, 0x9c, 0x9f, 0x12, 0x6e, 0xaf, 0xa3, 0x92, 0x95, 0x87, 0x6c, 0x80, 0x2d, 0xd9, 0x6e, 0xd5, 0x5e, 0xf8, 0x3e, 0x21, 0x86, 0x9a, 0x47, 0x73, 0x8b, 0xdf, 0xbf, 0x79, 0x6f, 0x8f, 0xd9, 0xe8, 0x24, 0xa3, 0x3c, 0x1e, 0xa2, 0x08, 0xb5, 0x07, 0x38, 0x9f, 0x28, 0x3d, 0x1f, 0x88, 0xcd, 0x73, 0x55, 0xa0, 0x98, 0x13, 0xa8, 0x48, 0xf9, 0x26, 0x11, 0x69, 0xc6, 0x75, 0x44, 0xb5, 0x76, 0xed, 0x85, 0x2f, 0x8f, 0x48, 0xbd, 0xed, 0x61, 0xea, 0xcd, 0x1c, 0xf5, 0x09, 0x22, 0x46, 0x41, 0x11, 0x8a, 0xd0, 0x9d, 0x47, 0x46, 0xc7, 0x7b, 0xac, 0x60, 0xdc, 0x52, 0x24, 0x3f, 0xac, 0xdb, 0xd7, 0x78, 0x45, 0x80, 0xd8, 0xe7, 0xe6, 0x12, 0x05, 0xff, 0x07, 0xba, 0x2e, 0x5e, 0x99, 0x32, 0x79, 0xa4, 0x8f, 0x34, 0x04, 0x86, 0x9d, 0x33, 0xcd, 0x1e, 0x40, 0x4a, 0xcf, 0x85, 0xfe, 0x72, 0x6e, 0xa4, 0xef, 0xf7, 0x15, 0x47, 0x7c, 0x2d, 0x1e, 0x73, 0x67, 0x5f, 0xf2, 0xfa, 0x0c, 0x08, 0x71, 0x4c, 0xe6, 0x45, 0x94, 0x90, 0x54, 0x8b, 0x50, 0xf4, 0x9d, 0x95, 0xbe, 0x41, 0x32, 0xa1, 0x7a, 0xb2, 0x34, 0xdc, 0x49, 0x06, 0x36, 0x1b, 0xfe, 0xd4, 0x44, 0xcb, 0x9e, 0x1f, 0x24, 0x2b, 0xc2, 0x2a, 0xdb, 0xb9, 0x3d, 0x8d, 0x74, 0xe9, 0xff, 0x89, 0xfc, 0x1d, 0x39, 0x99, 0xd1, 0xd2, 0xc2, 0x49, 0x1d, 0x17, 0xba, 0x4b, 0x9d, 0x44, 0x6d, 0xc8, 0xa7, 0xe8, 0x79, 0xf4, 0x6b, 0x03, 0x34, 0xe5, 0x79, 0x76, 0x48, 0xa5, 0x83, 0xb7, 0xa0, 0x86, 0x64, 0xc9, 0x88, 0xb5, 0x62, 0x6c, 0x0f, 0x12, 0xb0, 0x91, 0xb0, 0x3f, 0x37, 0x10, 0x32, 0xf7, 0x97, 0x9d, 0xcd, 0xa2, 0x68, 0xf9, 0x8e, 0x26, 0xc5, 0x65, 0xfd, 0xff, 0x0b, 0x5c, 0xfc, 0x92, 0xde, 0x81, 0xf2, 0xbe, 0x6d, 0xd7, 0x29, 0xb5, 0xf7, 0x30, 0x75, 0x0a, 0x8f, 0xe8, 0x17, 0x0b, 0x1c, 0xd2, 0xe0, 0x50, 0xa3, 0x73, 0x9a, 0x94, 0xc9, 0x6e, 0xa3, 0xc4, 0x93, 0x40, 0xdb, 0x56, 0x71, 0x2d, 0xc0, 0xdc, 0x7b, 0x7a, 0xd8, 0xd9, 0xfa, 0xdd, 0x50, 0xd3, 0x2a, 0x32, 0xe2, 0xa9, 0x3e, 0x6f, 0xfc, 0x27, 0xa5, 0xda, 0x1e, 0xd8, 0x8c, 0x7a, 0x83, 0x1b, 0xa4, 0xcb, 0x05, 0x79, 0x25, 0xb6, 0x3b, 0x36, 0x13, 0xbf, 0xe4, 0x26, 0xc0, 0x81, 0x88, 0xc2, 0x92, 0x57, 0x5c, 0x7b, 0x06, 0x5d, 0x67, 0x4f, 0xf5, 0x97, 0xe3, 0x99, 0x16, 0x6f, 0xe6, 0x2d, 0xc5, 0x65, 0x41, 0xa4, 0x02, 0x02, 0xa8, 0xf5, 0xbd, 0x0d, 0x14, 0x46, 0x51, 0x02, 0x66, 0x01, 0x4e, 0xc0, 0x4d, 0x29, 0x7b, 0x82, 0x69, 0xef, 0x1b, 0x10, 0xb1, 0x80, 0x70, 0x37, 0x12, 0x22, 0x7e, 0x76, 0x58, 0x7f, 0x11, 0xfa, 0x52, 0x40, 0x01, 0xcd, 0x31, 0xde, 0xb5, 0x4a, 0x32, 0xb5, 0xe6, 0xd4, 0x7d, 0x5b, 0xa5, 0xc7, 0x4c, 0x2f, 0xa0, 0xaf, 0x4f, 0x35, 0xa1, 0xb8, 0x50, 0x21, 0x57, 0x66, 0x13, 0xb1, 0x59, 0x86, 0x80, 0x40, 0x68, 0x65, 0x03, 0x99, 0xf4, 0x3f, 0x34, 0x09, 0xe2, 0xfa, 0xb3, 0xb8, 0x8d, 0x14, 0x56, 0x38, 0x0b, 0xdb, 0x87, 0x5f, 0xb1, 0xdc, 0xe7, 0x52, 0xd9, 0x9d, 0x38, 0xe3, 0xe2, 0x8f, 0x79, 0x1d, 0x79, 0x3e, 0x52, 0x1c, 0x17, 0xcb, 0xb3, 0x23, 0xcb, 0x9c, 0xb9, 0xe8, 0x3a, 0x52, 0xd1, 0x32, 0xe4, 0xfb, 0x1f, 0xa6, 0xa9, 0x89, 0x21, 0xde, 0x8b, 0x84, 0x8f, 0xbc, 0xb5, 0xfb, 0x86, 0xfe, 0xbd, 0xc0, 0xe6, 0x12, 0x26, 0xd5, 0xf9, 0x2b, 0x29, 0x21, 0x55, 0x94, 0xb4, 0x67, 0x03, 0x45, 0xb4, 0x79, 0xe0, 0xb4, 0x90, 0xa9, 0x44, 0xed, 0xf5, 0x81, 0xe2, 0xe5, 0xd9, 0xb4, 0xef, 0x0b, 0xba, 0x53, 0x87, 0x21, 0x27, 0x44, 0x4c, 0x4a, 0x82, 0xf1, 0x50, 0x64, 0x04, 0x3d, 0x35, 0x97, 0x01, 0xbc, 0x92, 0x2e, 0x6e, 0x23, 0x99, 0xa6, 0xa0, 0xfd, 0xf7, 0x05, 0x56, 0xa0, 0xfc, 0x6e, 0xfa, 0x60, 0xfc, 0xf1, 0x24, 0x02, 0xf5, 0xa7, 0x60, 0x74, 0x71, 0xff, 0x31, 0xbb, 0xae, 0x53, 0x56, 0x2c, 0xfd, 0xbf, 0x4b, 0xdf, 0x68, 0x32, 0x13, 0x61, 0x97, 0xc5, 0x35, 0xa9, 0xf5, 0x4c, 0x05, 0x4d, 0x0e, 0x2b, 0x24, 0xf6, 0x3b, 0x6c, 0x4a, 0x12, 0x82, 0x0e, 0x43, 0xc8, 0xb8, 0x9f, 0x38, 0x31, 0xe8, 0x0d, 0x30, 0xc5, 0xf9, 0xb9, 0xd6, 0x13, 0x8a, 0xcd, 0x7d, 0xb6, 0x21, 0xd0, 0x61, 0x84, 0x85 ],
- const [ 0x3c, 0xfb, 0xc7, 0x7b, 0x88, 0x97, 0xb6, 0xa5, 0x61, 0x3f, 0x62, 0xf6, 0xb1, 0xc8, 0x9b, 0x0d, 0x68, 0xf2, 0x72, 0xc6, 0xc1, 0x9b, 0x9e, 0x0e, 0xc6, 0x33, 0x1e, 0xf6, 0x16, 0x70, 0x20, 0x06, 0xe6, 0x43, 0x22, 0xd3, 0x46, 0x0a, 0x57, 0xd3, 0xa5, 0x07, 0x4c, 0x71, 0x98, 0x11, 0xcb, 0x5d, 0xd7, 0x89, 0x00, 0x26, 0x88, 0x90, 0xda, 0x0a, 0xc1, 0x77, 0xb4, 0x0d, 0x48, 0x77, 0x35, 0x48, 0x9d, 0xa3, 0x74, 0x84, 0x3a, 0x1a, 0x60, 0x07, 0x19, 0x81, 0x60, 0xae, 0x77, 0xb1, 0x36, 0x3c, 0xd8, 0xac, 0x29, 0xf2, 0x4b, 0xd6, 0x63, 0x60, 0xef, 0x62, 0x98, 0x7a, 0xb6, 0x0a, 0xe8, 0xee, 0x69, 0x03, 0x07, 0xb5, 0xec, 0x30, 0x9b, 0xe8, 0xc4, 0x96, 0xe5, 0xd6, 0xd6, 0x10, 0xa4, 0x53, 0x71, 0x43, 0x36, 0x53, 0x8f, 0xd5, 0x01, 0xb7, 0x58, 0xda, 0x11, 0x66, 0xe8, 0x8f, 0x02, 0xa0, 0x52, 0x4b, 0x21, 0x8f, 0xe5, 0xb2, 0xce, 0x1f, 0xae, 0x2c, 0x25, 0x10, 0x3d, 0x96, 0xdd, 0x4a, 0xac, 0x37, 0x6f, 0x70, 0xde, 0xf5, 0x7b, 0xb7, 0x05, 0xc8, 0x68, 0xf9, 0x67, 0x70, 0x4c, 0x05, 0x61, 0x63, 0x0b, 0x3a, 0xac, 0x0a, 0xc2, 0x54, 0xdf, 0x2c, 0x66, 0x85, 0x35, 0xab, 0xa8, 0xc8, 0x91, 0x6e, 0x1c, 0x72, 0xbf, 0x9e, 0x9b, 0x09, 0xfd, 0x15, 0xe6, 0x5a, 0xba, 0x13, 0x8b, 0xc6, 0x9d, 0x33, 0x0d, 0xdd, 0xc9, 0x9e, 0x3f, 0x2e, 0x60, 0x7f, 0xf1, 0x5c, 0x45, 0xb7, 0xce, 0x75, 0x27, 0xd1, 0x85, 0x80, 0xbb, 0x38, 0x27, 0x55, 0x48, 0xa7, 0xd0, 0xb2, 0x69, 0xe2, 0x8a, 0x8a, 0x0f, 0xa4, 0x6e, 0xa0, 0xc5, 0xd8, 0x0d, 0x55, 0x38, 0x0b, 0x0e, 0xbe, 0xf6, 0x22, 0x18, 0xfa, 0x76, 0x48, 0xf2, 0xc3, 0x59, 0x2b, 0xe8, 0x42, 0xef, 0x68, 0x71, 0x28, 0xfd, 0x43, 0x10, 0xfa, 0xbd, 0x9c, 0x78, 0xac, 0x27, 0x1f, 0xf3, 0x72, 0x6f, 0xba, 0x04, 0xd3, 0xcf, 0x54, 0x4b, 0xff, 0x86, 0xbc, 0xaa, 0x62, 0x21, 0xdf, 0xa6, 0x79, 0xf9, 0x3f, 0x10, 0xe5, 0xfd, 0xa0, 0xe4, 0xbe, 0xb1, 0x04, 0x71, 0x29, 0x77, 0xda, 0xba, 0x2d, 0x0e, 0x73, 0x1d, 0xc2, 0x58, 0xb5, 0x32, 0x2b, 0x60, 0x13, 0xf6, 0x86, 0x9b, 0xbd, 0x29, 0xa2, 0x6e, 0x13, 0xf4, 0x10, 0xf1, 0x60, 0xcf, 0x7d, 0xf3, 0xc5, 0xa2, 0x3f, 0x3e, 0x73, 0x2a, 0x2d, 0x1b, 0x1d, 0x9f, 0xb4, 0x19, 0xae, 0x94, 0x27, 0x0b, 0x37, 0x1e, 0x57, 0x50, 0x2b, 0x38, 0x64, 0x57, 0xce, 0x66, 0xd2, 0x61, 0xeb, 0x99, 0xdf, 0x89, 0xc5, 0x53, 0x14, 0x02, 0x51, 0x0b, 0x1b, 0xa1, 0xa2, 0xd3, 0xd0, 0x9b, 0xa5, 0x38, 0x9a, 0x8f, 0x0e, 0x6a, 0xfc, 0xc7, 0x92, 0x9d, 0x67, 0xbb, 0x57, 0xae, 0x53, 0xd6, 0xa9, 0x0a, 0x8e, 0x7d, 0xee, 0xcc, 0xd3, 0x4e, 0xdc, 0x25, 0x9e, 0xa5, 0xe9, 0x01, 0x3f, 0x65, 0x03, 0xe7, 0x2d, 0xf5, 0x82, 0x21, 0x9e, 0x88, 0x5b, 0x1e, 0x54, 0xa2, 0x96, 0x14, 0xba, 0xd8, 0x02, 0xe9, 0x2f, 0xd7, 0x27, 0x54, 0xa2, 0xa7, 0x7c, 0x40, 0x5f, 0x31, 0xda, 0x71, 0x28, 0xff, 0x31, 0x69, 0x88, 0x44, 0x7a, 0x8d, 0x64, 0x1c, 0xec, 0x84, 0xd3, 0x14, 0x73, 0xe0, 0x30, 0xed, 0x5e, 0x00, 0x6d, 0x9d, 0x57, 0x34, 0xa9, 0x97, 0x99, 0x23, 0x05, 0x4c, 0x5d, 0x6a, 0xb4, 0xf2, 0x95, 0x86, 0x52, 0x84, 0xdd, 0xf4, 0x77, 0x0a, 0xaf, 0x96, 0x8b, 0x1a, 0xd6, 0x59, 0xdc, 0x9f, 0x25, 0x15, 0xed, 0xd9, 0x68, 0xb5, 0x12, 0xa5, 0x9b, 0x97, 0x39, 0xff, 0x5a, 0x36, 0x0b, 0xc5, 0x99, 0x06, 0x34, 0xbd, 0x95, 0x9f, 0xfe, 0xda, 0x0a, 0x1e, 0x25, 0xbb, 0xa7, 0xc8, 0xe7, 0x75, 0xbf, 0xf1, 0x5a, 0x92, 0x41, 0x1d, 0x02, 0x5a, 0xea, 0x64, 0xa3, 0x51, 0xb9, 0x1b, 0x54, 0x00, 0xa4, 0xb0, 0xd5, 0xf8, 0x89, 0xd6, 0x22, 0x15, 0x67, 0xe2, 0x48, 0x00, 0xce, 0x75, 0x78, 0xf7, 0x94, 0x5c, 0x5a, 0xd1, 0xca, 0xb4, 0xa3, 0x3c, 0xee, 0x52, 0xea, 0x4a, 0x62, 0x62, 0xb8, 0x2c, 0x1d, 0x4d, 0xde, 0x3d, 0xa1, 0xe1, 0x0b, 0x42, 0x2d, 0xac, 0x9d, 0xef, 0x33, 0xa8, 0xb8, 0xae, 0x0c, 0x1e, 0x95, 0x9d, 0xeb, 0xc4, 0x1d, 0xd5, 0x10, 0x28, 0xb7, 0xf2, 0x3e, 0x52, 0x5e, 0xd0, 0x6e, 0xa5, 0xf6, 0x92, 0xc5, 0x07, 0xe0, 0xe9, 0xc4, 0x42, 0xcc, 0x93, 0xbf, 0xa9, 0xce, 0x21, 0x90, 0xfe, 0xb5, 0xfe, 0x8c, 0x93, 0x98, 0xad, 0xb6, 0xb0, 0xb1, 0x52, 0x33, 0x35, 0x6e, 0x74, 0xfe, 0x80, 0xc6, 0x01, 0xdd, 0x91, 0xca, 0x92, 0x94, 0x6c, 0x7c, 0xf1, 0x58, 0xbf, 0xe3, 0xd9, 0x86, 0xc5, 0x5f, 0xfc, 0x95, 0x6a, 0x3b, 0x4a, 0x4a, 0xb0, 0x81, 0x71, 0x2a, 0x51, 0x12, 0xa0, 0x35, 0xa6, 0xf5, 0x91, 0xd1, 0xc7, 0xf0, 0xc6, 0x05, 0xf4, 0x55, 0x13, 0xe7, 0x34, 0x1f, 0x5c, 0x58, 0x3b, 0x3d, 0xa0, 0xee, 0x91, 0x2e, 0x36, 0x32, 0xf1, 0xce, 0x57, 0x0c, 0xf0, 0x70, 0xdd, 0x7b, 0xdf, 0x2c, 0x4a, 0x89, 0xf1, 0x7b, 0x0c, 0x7f, 0xa1, 0x01, 0x00, 0x55, 0x4e, 0xa9, 0x34, 0x6c, 0x28, 0xf7, 0xf1, 0x80, 0x50, 0x9a, 0xf9, 0xd8, 0x3b, 0x41, 0x0d, 0xbf, 0x58, 0xb0, 0xb2, 0x38, 0xf2, 0x13, 0x35, 0xee, 0x57, 0x92, 0xed, 0x6a, 0x3a, 0x25, 0xc0, 0x88, 0x56, 0xaa, 0xe8, 0x2c, 0x54, 0x35, 0xf7, 0x31, 0xef, 0xa7, 0x19, 0xa2, 0x56, 0x82, 0x9a, 0x2d, 0xd1, 0xfb, 0xa8, 0xd4, 0xa8, 0x51, 0x59, 0xe6, 0x41, 0x5e, 0xf0, 0x2e, 0x88, 0x6c, 0x5c, 0x6a, 0x93, 0x49, 0x01, 0xff, 0x87, 0x9e, 0xbb, 0xea, 0xb5, 0x7c, 0x20, 0xfa, 0x09, 0x38, 0x06, 0x3c, 0xa5, 0x79, 0x46, 0xb7, 0xc9, 0x8f, 0xbf, 0x5a, 0xf6, 0x06, 0x9d, 0x33, 0x53, 0x7b, 0xdb, 0xe2, 0x4f, 0xaf, 0x06, 0x4c, 0x88, 0xda, 0x44, 0x94, 0xec, 0x42, 0x96, 0x47, 0x1d, 0x0b, 0x5a, 0xd6, 0x1a, 0x51, 0x14, 0x4a, 0x1d, 0x74, 0x6d, 0x33, 0xbf, 0xb3, 0x7c, 0xe1, 0x62, 0xfd, 0x45, 0xd7, 0xd0, 0x03, 0x7f, 0x7d, 0x20, 0x92, 0x9b, 0x15, 0xda, 0x20, 0x01, 0xf0, 0x5b, 0xa5, 0x9d, 0xe2, 0x7a, 0xac, 0x9a, 0xf3, 0x6b, 0xa9, 0x6d, 0x57, 0xe4, 0x8d, 0x16, 0xa1, 0x7f, 0x98, 0xa2, 0x33, 0x60, 0x6e, 0xf5, 0xf9, 0x17, 0x6e, 0xc6, 0x57, 0xc7, 0x3f, 0xeb, 0x5f, 0x88, 0xab, 0xd7, 0x48, 0x0b, 0xb1, 0x61, 0x1b, 0x7d, 0xd5, 0xc7, 0xb0, 0xad, 0xbb, 0xf2, 0xd9, 0x70, 0xf4, 0xfb, 0xdd, 0x45, 0x18, 0xef, 0x28, 0x35, 0x15, 0xcf, 0x40, 0xfd, 0xc6, 0xdb, 0xfb, 0x6f, 0xc8, 0x10, 0xf0, 0x16, 0x89, 0xf0, 0x2b, 0x19, 0xa1, 0x81, 0x25, 0x61, 0x66, 0x98, 0xf3, 0xfe, 0xba, 0x57, 0xbd, 0xc7, 0x28, 0xf5, 0x72, 0x41, 0x30, 0xbd, 0xba, 0xc3, 0xde, 0x5a, 0x2c, 0xd7, 0xa2, 0x51, 0xc2, 0xe2, 0x5b, 0xcf, 0x89, 0x08, 0xb5, 0xa5, 0x9d, 0x4a, 0xb5, 0x91, 0x55, 0xf1, 0x92, 0xbf, 0xbb, 0x30, 0xc7, 0x8f, 0x3f, 0x05, 0x66, 0x99, 0xac, 0x60, 0xaf, 0xef, 0x5a, 0x87, 0xe1, 0xa1, 0xa6, 0xb9, 0x50, 0x87, 0x9f, 0x11, 0xb8, 0x3a, 0x02, 0xae, 0xd1, 0x64, 0x69, 0x11, 0x23, 0x3a, 0xbf, 0xc6, 0x1c, 0x46, 0xf7, 0x47, 0x60, 0x6a, 0xfd, 0x1d, 0x60, 0x22, 0xed, 0x48, 0x2e, 0x09, 0x84, 0xe1, 0x90, 0x9f, 0xd4, 0xfe, 0x53, 0x49, 0x3b, 0xd6, 0xe1, 0x99, 0x95, 0x26, 0x16, 0xd0, 0xb1, 0xd3, 0x50, 0xa1, 0x02, 0xd0, 0xc5, 0x38, 0x97, 0x42, 0x1a, 0x7b, 0x4d, 0xe2, 0x31, 0x90, 0x44, 0xa3, 0x42, 0x9f, 0x8f, 0x96, 0x2d, 0xd9, 0x30, 0x0a, 0x0e, 0xb9, 0x43, 0xf7, 0x12, 0x89, 0x79, 0x9d, 0x8a, 0x29, 0xc8, 0x68, 0x3e, 0x0c, 0x61, 0x17, 0x04, 0x83, 0xe3, 0x1d, 0x91, 0x3e, 0xce, 0x47, 0x8e, 0x0f, 0x3a, 0xa0, 0xef, 0xf2, 0xc9, 0x92, 0x80, 0x4b, 0xda, 0x4d, 0xc0, 0x6e, 0xff, 0x6d, 0xf3, 0x64, 0xb2, 0xd6, 0x73, 0xed, 0x43, 0xe3, 0x47, 0xc1, 0x15, 0xc1, 0xf6, 0x1b, 0x0a, 0x15, 0x9d, 0x78, 0x3c, 0xe5, 0x40, 0x9c, 0xee, 0xb5, 0x5e, 0xd7, 0xc2, 0xf0, 0xc8, 0x86, 0x2c, 0x8a, 0xb3, 0xdc, 0x26, 0xe4, 0x0b, 0xe3, 0x25, 0xf0, 0x0a, 0xbd, 0x4c, 0x95, 0x0a, 0x30, 0xe0, 0x55, 0x97, 0x62, 0xfd, 0x2d, 0xc9, 0xe0, 0x87, 0xbc, 0xd0, 0xe5, 0x62, 0xa8, 0xd1, 0xda, 0xe6, 0x3e, 0xf1, 0x19, 0x8d, 0x58, 0xaf, 0xf6, 0xef, 0x84, 0x76, 0x00, 0xf1, 0x62, 0x72, 0x84, 0x39, 0x4e, 0xa4, 0x53, 0xe5, 0x3f, 0x31, 0xc5, 0x7c, 0xef, 0x00, 0xfe, 0x24, 0x3d, 0x83, 0x70, 0x16, 0xcf, 0xd5, 0xa1, 0x50, 0xfb, 0x06, 0x2f, 0x89, 0xe8, 0xb3, 0x11, 0x6a, 0xf0, 0xd9, 0x1f, 0xfb, 0x49, 0xea, 0xd5, 0x5c, 0xe5, 0x21, 0x54, 0xb5, 0x96, 0x13, 0xa9, 0x6f, 0x76, 0x88, 0x52, 0xa5, 0x86, 0x88, 0xfe, 0xd5, 0x95, 0xb9, 0x95, 0xdc, 0x64, 0xe8, 0x78, 0x21, 0x07, 0xe5, 0x0a, 0x10, 0x8e, 0x94, 0x6f, 0xca, 0xe5, 0x41, 0x94, 0x1a, 0xf9, 0x34, 0x6f, 0xac, 0x1c, 0x85, 0x88, 0x79, 0xab, 0x32, 0xb8, 0x86, 0xee, 0x6f, 0x30, 0xce, 0x3f, 0x3d, 0xbe, 0x7c, 0x6f, 0x3e, 0x4c, 0x5e, 0x65, 0xc8, 0xaa, 0x97, 0x08, 0x38, 0x8d, 0x94, 0x60, 0x89, 0xd7, 0x41, 0xf7, 0x25, 0x18, 0x7c, 0x86, 0xfa, 0x55, 0xca, 0xcd, 0xd1, 0x09, 0x48, 0xc3, 0xdb, 0x6a, 0xe5, 0xef, 0x8d, 0xed, 0xcf, 0x16, 0xae, 0x0c, 0x2b, 0x16, 0xaf, 0x47, 0x09, 0x12, 0x3a, 0x69, 0x97, 0xcf, 0x0d, 0x0c, 0x94, 0x5e, 0x09, 0x5f, 0x08, 0xfc, 0x86, 0x27, 0x33, 0x36, 0xea, 0x04, 0xc3, 0x51, 0x7a, 0xf6, 0x4a, 0xe8, 0x70, 0x1f, 0xee, 0xd7, 0x4d, 0xcb, 0x63, 0x58, 0x70, 0xad, 0x16, 0x6c, 0xe8, 0x6b, 0xab, 0x7d, 0x87, 0x5e, 0xaa, 0x41, 0x37, 0x93, 0x75, 0xe1, 0x91, 0x15, 0x7e, 0x5b, 0xac, 0x6e, 0xb6, 0x25, 0x33, 0x6b, 0x49, 0x13, 0xbb, 0x20, 0x88, 0x7a, 0x53, 0x2c, 0x26, 0x96, 0x5c, 0x3e, 0xa8, 0x29, 0x9b, 0xd8, 0x17, 0x65, 0x8c, 0x53, 0xf8, 0x0c, 0xf9, 0x24, 0x7e, 0xd6, 0xcc, 0x5d, 0xfd, 0x13, 0x22, 0x77, 0xa2, 0x91, 0xa0, 0x4e, 0x62, 0xc0, 0x0a, 0x6d, 0x30, 0x14, 0x11, 0x8c, 0x73, 0xab, 0x6d, 0x57, 0xb7, 0x30, 0x2c, 0x71, 0xa2, 0xff, 0x4a, 0xb9, 0x2a, 0x89, 0x81, 0xcc, 0x06, 0xfa, 0x62, 0xcb, 0x62, 0x1a, 0xa5, 0x5e, 0xd7, 0x71, 0xbe, 0xf8, 0x9a, 0xaf, 0xb1, 0x5d, 0xf4, 0x4b, 0x26, 0x62, 0xf2, 0x69, 0xc0, 0xf4, 0x5d, 0x01, 0xab, 0x5c, 0xec, 0x3e, 0x74, 0xc1, 0xb9, 0x24, 0x1e, 0xef, 0xf2, 0x76, 0x72, 0x57, 0xd1, 0xd7, 0x96, 0x56, 0xce, 0x2f, 0xe1, 0xba, 0x13, 0x50, 0xee, 0x82, 0x30, 0xda, 0xef, 0xe5, 0x10, 0x5b, 0x44, 0x96, 0x2b, 0xbb, 0x4d, 0x47, 0xfe, 0xd8, 0x7c, 0x6c, 0xb8, 0x6d, 0xae, 0x41, 0x37, 0x38, 0xbb, 0x0e, 0x32, 0x5c, 0x4b, 0xa9, 0xb8, 0x04, 0xec, 0x3d, 0xd9, 0x49, 0x62, 0x4b, 0xa3, 0x56, 0x3e, 0xee, 0x50, 0xc9, 0xb3, 0x63, 0xbd, 0x5d, 0xa4, 0xc8, 0x1e, 0xc6, 0x01, 0x24, 0xf1, 0xdd, 0x54, 0xa8, 0x30, 0xfd, 0x97, 0x35, 0xcb, 0xad, 0x49, 0x1e, 0x55, 0x7f, 0xc1, 0x2e, 0xfd, 0x38, 0xc1, 0xed, 0xc1, 0x30, 0x4e, 0x1f, 0xde, 0xfc, 0xbf, 0x8e, 0x8b, 0x4b, 0x15, 0x09, 0xe6, 0x0e, 0x8a, 0xad, 0x2f, 0xdc, 0x6d, 0x63, 0x34, 0x94, 0x2c, 0xaa, 0x0c, 0x44, 0xb3, 0x97, 0x08, 0x49, 0xf4, 0x19, 0xe7, 0xb8, 0xc7, 0x82, 0x49, 0xfd, 0xf5, 0x43, 0x67, 0xc2, 0x8f, 0xf7, 0x00, 0x13, 0x85, 0xa4, 0x97, 0xbf, 0x73, 0x3d, 0xdb, 0x01, 0xbe, 0x6b, 0x67, 0x5f, 0xe0, 0x8c, 0xab, 0xd3, 0x00, 0xfd, 0x2a, 0x29, 0xc6, 0x94, 0xe7, 0xa8, 0x6d, 0x71, 0x19, 0xf4, 0x1a, 0xf7, 0x26, 0x33, 0x6c, 0x15, 0xcf, 0x6f, 0x54, 0xca, 0xa8, 0x3b, 0x27, 0xe8, 0xcc, 0x9a, 0xf1, 0x18, 0xce, 0x1c, 0x0d, 0x1e, 0xf3, 0x4a, 0xf2, 0x5e, 0x9e, 0x44, 0x50, 0x9f, 0x0b, 0xa9, 0x5c ],
- const [ 0x3f, 0xbc, 0xbd, 0x3f, 0x57, 0xa9, 0x91, 0x2b, 0x97, 0x17, 0xf9, 0x1e, 0x81, 0x52, 0x9f, 0x67, 0x36, 0xc6, 0xd0, 0x6f, 0x8b, 0xc1, 0x30, 0x9c, 0x5e, 0x7a, 0xad, 0x74, 0x2b, 0x51, 0xb1, 0x06, 0xda, 0x58, 0x9c, 0x85, 0xdb, 0x13, 0x71, 0x37, 0x75, 0x7c, 0xcf, 0x8d, 0x5b, 0x4a, 0x24, 0x94, 0x81, 0x73, 0x1d, 0x8c, 0x2d, 0xf0, 0x61, 0xd5, 0x51, 0xc0, 0x7e, 0x13, 0x18, 0x2f, 0x23, 0x8a, 0xbf, 0x58, 0x91, 0xca, 0xa6, 0xe9, 0x4c, 0x91, 0xa7, 0x26, 0x16, 0xed, 0xa6, 0x31, 0x1d, 0xa1, 0x69, 0x88, 0x74, 0xca, 0xaa, 0xcf, 0xc0, 0xc2, 0x6b, 0xd0, 0x34, 0x45, 0x8a, 0xc0, 0xbf, 0xd2, 0x95, 0xc3, 0x83, 0x54, 0xdf, 0xb3, 0x8a, 0x02, 0xd4, 0x1d, 0xb4, 0x84, 0x89, 0x8d, 0xf4, 0x57, 0x98, 0x0c, 0xbc, 0x72, 0x2a, 0xe6, 0xb6, 0x2a, 0x55, 0xb1, 0xb5, 0x53, 0xa9, 0x8a, 0xeb, 0xa8, 0x05, 0xa2, 0x5c, 0x6d, 0xaf, 0xfa, 0x92, 0x52, 0xa4, 0x6a, 0x93, 0x9b, 0x2d, 0xe8, 0x10, 0x7e, 0xb3, 0x07, 0xdf, 0xcc, 0xd4, 0xbe, 0xac, 0xd4, 0xb7, 0x6b, 0xeb, 0x85, 0x9c, 0x17, 0x10, 0xd2, 0xb7, 0xfc, 0x03, 0x5b, 0x3e, 0x44, 0xce, 0x49, 0xc1, 0x14, 0x99, 0x79, 0xba, 0xc9, 0xd9, 0xde, 0x65, 0x82, 0xc4, 0x20, 0xd1, 0xde, 0x08, 0x89, 0x37, 0x07, 0xbc, 0x22, 0x8c, 0xef, 0x97, 0x19, 0x52, 0xd9, 0x60, 0x66, 0xb3, 0x1c, 0xa5, 0xae, 0xd0, 0x23, 0xb0, 0x68, 0x57, 0xb9, 0xb7, 0x3e, 0x53, 0x83, 0x53, 0xb6, 0x49, 0xce, 0x33, 0x11, 0x80, 0x8c, 0x12, 0x74, 0xa0, 0x98, 0xe6, 0x45, 0x7f, 0x42, 0x5b, 0xd8, 0x37, 0x07, 0x7f, 0x4b, 0x7c, 0xa0, 0xbf, 0xae, 0x2c, 0x3f, 0x12, 0x67, 0x28, 0x15, 0x74, 0xd5, 0x63, 0x17, 0x96, 0x34, 0x38, 0x02, 0xd4, 0xc1, 0x01, 0x9c, 0x67, 0x1e, 0xe5, 0x3d, 0xdc, 0xf7, 0xf1, 0x8f, 0xc4, 0xe6, 0x6a, 0x92, 0xae, 0x94, 0x62, 0xe3, 0x52, 0x22, 0x8a, 0x3d, 0x0f, 0xc7, 0x47, 0x40, 0x98, 0xba, 0x08, 0x71, 0xea, 0x52, 0xd6, 0x83, 0x81, 0x6b, 0x2d, 0xd5, 0xcb, 0x0d, 0x0a, 0x3b, 0xdd, 0x48, 0x45, 0x01, 0x65, 0x62, 0x21, 0x2d, 0xdf, 0x35, 0x22, 0x05, 0x0c, 0xd2, 0x1e, 0xd1, 0xa0, 0x6a, 0x97, 0xe2, 0x3b, 0x6f, 0x48, 0xd3, 0x9b, 0xf6, 0xfe, 0x0f, 0x10, 0x60, 0xa9, 0x93, 0x30, 0x39, 0xb3, 0xf6, 0xcb, 0x60, 0x90, 0xa6, 0x22, 0x68, 0x97, 0x74, 0x53, 0x3f, 0x10, 0x53, 0x18, 0x0d, 0x8e, 0x5c, 0xb1, 0x5f, 0x7f, 0x16, 0x1f, 0x85, 0x01, 0xf5, 0x93, 0x38, 0xf7, 0x20, 0x26, 0x81, 0x5c, 0x77, 0xca, 0xd6, 0xd8, 0xd5, 0x81, 0x85, 0x91, 0x92, 0xcd, 0x56, 0x44, 0x4d, 0x67, 0x6b, 0x94, 0xe8, 0x33, 0x6c, 0xa2, 0xd3, 0x74, 0xe1, 0xdd, 0x8e, 0x3d, 0xdf, 0x1c, 0x69, 0x28, 0xe7, 0xea, 0x8f, 0x49, 0x0b, 0x20, 0x42, 0x65, 0x52, 0xba, 0x68, 0x60, 0x5e, 0xe3, 0x47, 0xf5, 0x4c, 0x52, 0x8d, 0xaa, 0xdc, 0xd9, 0x93, 0x02, 0xd2, 0x3b, 0xe2, 0xf4, 0x9c, 0x3f, 0xf7, 0x9c, 0x34, 0x02, 0x43, 0x31, 0x48, 0x91, 0x76, 0x37, 0x99, 0xb7, 0xfd, 0xf5, 0xa1, 0x14, 0xc9, 0x2a, 0x78, 0x6f, 0x53, 0xfc, 0xf8, 0x4e, 0xdd, 0x31, 0x20, 0xc3, 0xfa, 0xa1, 0xb6, 0x88, 0x50, 0xeb, 0x30, 0x4e, 0x9d, 0x68, 0xd5, 0x53, 0xf8, 0x5d, 0x20, 0x33, 0x5a, 0x75, 0x65, 0x00, 0x5c, 0x6e, 0xb6, 0x94, 0x42, 0x12, 0x08, 0x26, 0x39, 0x69, 0x92, 0x1c, 0xdd, 0x2d, 0x76, 0x20, 0xfe, 0x7e, 0xa3, 0x76, 0xa4, 0xd7, 0xfa, 0x8d, 0x50, 0x41, 0xb0, 0xd4, 0x85, 0xc6, 0xf3, 0xce, 0x87, 0x29, 0xd0, 0x69, 0x63, 0xd4, 0x54, 0x8c, 0x2f, 0x12, 0xf1, 0xef, 0x93, 0x7e, 0x24, 0x2f, 0x89, 0xbc, 0x55, 0x22, 0x60, 0x66, 0xff, 0x68, 0x07, 0x49, 0x10, 0x42, 0x88, 0xd2, 0x93, 0xa7, 0xd3, 0xc3, 0x8c, 0x95, 0xbd, 0x2a, 0x23, 0xa6, 0x48, 0x94, 0x05, 0xe3, 0x25, 0x7e, 0x08, 0xdc, 0x77, 0x0c, 0x0e, 0xf9, 0xda, 0xfe, 0x2b, 0x0b, 0xa4, 0xdf, 0x0a, 0x26, 0x6b, 0x7f, 0x8c, 0xb3, 0xc7, 0xa4, 0xb3, 0xc1, 0x58, 0xfd, 0xbf, 0x9c, 0x0b, 0x57, 0x96, 0xa1, 0x9a, 0x13, 0x69, 0x50, 0x52, 0xd8, 0x95, 0xa3, 0x19, 0x85, 0xc7, 0x9e, 0xaf, 0x6a, 0x64, 0x28, 0x34, 0xb7, 0x28, 0x19, 0xeb, 0x34, 0x0d, 0x94, 0x3d, 0x33, 0x6e, 0x97, 0x01, 0xc4, 0x6c, 0xd0, 0xfa, 0x27, 0x91, 0xb3, 0xa1, 0x87, 0xb3, 0xc9, 0x25, 0xe5, 0x1b, 0x4b, 0xb1, 0x52, 0xe7, 0xef, 0xed, 0x61, 0xad, 0x02, 0xc7, 0xdc, 0x61, 0xb7, 0x73, 0xb6, 0x79, 0xbf, 0xb0, 0x41, 0x4e, 0x19, 0x4e, 0xa1, 0xc6, 0x2c, 0xed, 0x81, 0x30, 0x13, 0x07, 0x04, 0x6f, 0x38, 0x31, 0xfe, 0x5b, 0x24, 0x9d, 0x65, 0x64, 0x95, 0xe4, 0x02, 0x79, 0xd1, 0x02, 0x6c, 0x28, 0x3b, 0xa2, 0x37, 0x06, 0x24, 0x9d, 0x69, 0x51, 0xe3, 0xbd, 0x2d, 0xd4, 0x28, 0xc6, 0xcc, 0x0b, 0x8d, 0xb7, 0xd8, 0x88, 0x6e, 0x4d, 0xab, 0x95, 0xfb, 0xc9, 0x10, 0x1b, 0x8b, 0xf3, 0x3f, 0xc2, 0x34, 0x5f, 0x0f, 0x5a, 0x98, 0xef, 0x67, 0x7a, 0x01, 0x99, 0xf5, 0x66, 0xb1, 0x6a, 0x23, 0x36, 0x73, 0xcb, 0x47, 0x35, 0x76, 0x04, 0x1a, 0x88, 0x5b, 0xfe, 0x6c, 0x10, 0x8d, 0x4d, 0x16, 0x91, 0xd1, 0x6d, 0x2f, 0x13, 0x1e, 0x4c, 0x83, 0x88, 0xae, 0x09, 0x40, 0xb0, 0x55, 0xfc, 0xf3, 0x3a, 0x12, 0xf6, 0xb3, 0x2c, 0xe4, 0xca, 0x9c, 0x84, 0xde, 0x0c, 0x80, 0x1f, 0x7e, 0x18, 0xd8, 0xdb, 0x3b, 0x56, 0x01, 0xf9, 0x5d, 0xbd, 0xa5, 0xc5, 0x11, 0x96, 0x77, 0x78, 0xbd, 0x83, 0x23, 0x5d, 0x91, 0xbf, 0x84, 0x33, 0x5f, 0xa7, 0x18, 0xd3, 0xac, 0x7a, 0xb2, 0x12, 0x07, 0x5d, 0x6f, 0xe9, 0x99, 0xa2, 0xeb, 0xd3, 0xfe, 0x49, 0xb5, 0x77, 0x53, 0xc7, 0x00, 0x87, 0x90, 0x07, 0x9b, 0xe8, 0x18, 0xaf, 0x23, 0x13, 0x8f, 0xa4, 0x77, 0xbb, 0xec, 0xd0, 0x6c, 0xb0, 0xcf, 0x23, 0xc2, 0x03, 0x14, 0xd7, 0x57, 0x6b, 0xa8, 0xf9, 0x9b, 0xe7, 0x9b, 0x25, 0x44, 0xa5, 0x77, 0x91, 0x43, 0x23, 0xd1, 0x4c, 0xf6, 0x94, 0x1d, 0xc8, 0x9f, 0x85, 0xc7, 0x97, 0x15, 0xc0, 0x7f, 0x72, 0xb9, 0x70, 0xd4, 0x7f, 0xac, 0x87, 0x04, 0xd4, 0x3f, 0x5d, 0x12, 0x37, 0xab, 0x99, 0x1a, 0x27, 0x03, 0x55, 0xe2, 0x21, 0x66, 0x7d, 0xb1, 0x1c, 0x79, 0x78, 0x64, 0x56, 0x14, 0x0b, 0xbe, 0x52, 0x3c, 0x7a, 0x00, 0x21, 0x52, 0xf0, 0xb9, 0xe2, 0x89, 0x20, 0xe0, 0x85, 0x9e, 0x2d, 0x20, 0xd4, 0xc3, 0xc7, 0x73, 0xb3, 0xdc, 0x98, 0xf2, 0xa6, 0xed, 0xde, 0xec, 0x95, 0xd3, 0x59, 0x35, 0xcc, 0x33, 0x67, 0xc0, 0x46, 0xb1, 0x6e, 0x70, 0x2b, 0x62, 0x7a, 0x2c, 0x97, 0x83, 0x27, 0x32, 0x9d, 0x6b, 0xc2, 0xad, 0x8c, 0xbe, 0xab, 0x89, 0x70, 0xe4, 0xfd, 0x86, 0xdc, 0xb9, 0x71, 0x8b, 0xe7, 0x86, 0x80, 0x3e, 0x75, 0x31, 0xc8, 0xd1, 0xb8, 0xb0, 0xb1, 0x1e, 0xf6, 0xc3, 0x50, 0xf7, 0x8c, 0xe3, 0x8c, 0xb7, 0x33, 0x75, 0x7f, 0x1d, 0x82, 0x44, 0x1f, 0x5b, 0xb4, 0x2e, 0x1d, 0x69, 0xac, 0x1e, 0x0d, 0x9f, 0x36, 0x3a, 0xc8, 0x83, 0x90, 0x5d, 0x0e, 0xe0, 0x29, 0xc7, 0x70, 0x18, 0xa8, 0x13, 0x6d, 0xba, 0x30, 0x6a, 0xdc, 0x57, 0xe2, 0xf7, 0x8a, 0x92, 0xa4, 0x9a, 0x23, 0x77, 0x21, 0xe1, 0x56, 0x0e, 0x11, 0x34, 0x34, 0x2f, 0xbb, 0x4f, 0xd9, 0x97, 0xb8, 0xf6, 0x4f, 0x3c, 0xf9, 0xe3, 0xaf, 0xde, 0x0c, 0x04, 0x89, 0xdf, 0x9a, 0xe3, 0x86, 0x54, 0x35, 0x66, 0x4c, 0x5c, 0x50, 0xb8, 0xa2, 0xb1, 0x8f, 0x87, 0xd5, 0x7c, 0x42, 0x70, 0x5a, 0x6e, 0x2c, 0xb7, 0xb4, 0x0c, 0x88, 0x3c, 0x99, 0x4a, 0x4e, 0xaa, 0x50, 0x5c, 0xb2, 0xf2, 0x5d, 0xc9, 0xed, 0xf8, 0x60, 0xc1, 0x41, 0x8b, 0x3b, 0xb0, 0x37, 0x9b, 0x73, 0x13, 0x2c, 0xa6, 0xd9, 0x8b, 0x0b, 0x74, 0x69, 0x2f, 0x5c, 0x04, 0x72, 0x27, 0x7e, 0xc6, 0xf7, 0x77, 0x30, 0x0b, 0x55, 0x18, 0x57, 0xb9, 0x27, 0x4d, 0xfb, 0x43, 0x67, 0x34, 0x92, 0xd8, 0xd6, 0x9b, 0x81, 0xdb, 0x9d, 0x16, 0xe0, 0x94, 0x34, 0x4e, 0x7d, 0x25, 0x83, 0x9c, 0x24, 0xbf, 0x47, 0xd7, 0x1e, 0x15, 0xb8, 0x6a, 0xf8, 0x11, 0x69, 0xa9, 0x86, 0xc6, 0x6f, 0x65, 0x26, 0xa7, 0xc5, 0xbd, 0x49, 0xf6, 0xef, 0x38, 0x30, 0x7f, 0xde, 0x11, 0xf4, 0x85, 0x14, 0xd2, 0xc9, 0xfd, 0x08, 0x24, 0x83, 0xfa, 0xcc, 0xe6, 0x5a, 0x69, 0xed, 0x7c, 0xea, 0xfe, 0x9b, 0x6a, 0x7e, 0x6e, 0x09, 0x21, 0x8d, 0xdf, 0x17, 0x18, 0x85, 0x9c, 0x2f, 0x1f, 0xc8, 0x0e, 0x6c, 0xf1, 0xf4, 0xe8, 0x02, 0x08, 0x68, 0xa1, 0xda, 0xb5, 0x04, 0x27, 0x7c, 0x6f, 0x2f, 0xd2, 0x32, 0x6c, 0x1f, 0x96, 0x6a, 0x6e, 0x55, 0x7e, 0x5d, 0xe0, 0x66, 0x55, 0xee, 0x21, 0x01, 0xa6, 0xd5, 0x20, 0x2e, 0xe8, 0xfc, 0x29, 0xd4, 0xf2, 0x29, 0xfe, 0x7e, 0xb5, 0xde, 0x2a, 0x5e, 0x29, 0x7e, 0x92, 0x93, 0x88, 0xb0, 0x4d, 0xa7, 0xbb, 0x08, 0xb5, 0x5c, 0x11, 0xe5, 0xbe, 0xa8, 0x37, 0x95, 0x87, 0xfe, 0x65, 0xc0, 0x2f, 0xcf, 0xd5, 0x03, 0xea, 0x51, 0x79, 0xdb, 0x54, 0x7f, 0xed, 0xc5, 0x05, 0x61, 0xab, 0xa3, 0x65, 0x8d, 0x7e, 0x62, 0xc1, 0xee, 0x39, 0xda, 0x9f, 0xc4, 0xa8, 0xf5, 0x4f, 0xec, 0xc7, 0x14, 0xc3, 0x62, 0x32, 0xae, 0xa1, 0x04, 0xdd, 0x3a, 0x95, 0x98, 0x05, 0x50, 0xec, 0x11, 0x66, 0x0b, 0x5f, 0x0e, 0xaf, 0xb1, 0x2c, 0xa4, 0x33, 0x96, 0x6c, 0x5d, 0xe1, 0x3d, 0xa0, 0x80, 0x76, 0xc1, 0x8d, 0x93, 0xf1, 0x73, 0x4a, 0x1f, 0x47, 0xc5, 0x97, 0xb3, 0x59, 0x67, 0x70, 0x2b, 0x23, 0xaf, 0xe2, 0x32, 0x36, 0x3e, 0x1e, 0x06, 0x68, 0xe1, 0xcc, 0x7c, 0xca, 0xb5, 0xa1, 0x43, 0xda, 0x8f, 0x34, 0x6c, 0xfa, 0x9a, 0x0d, 0x2a, 0x21, 0x42, 0xff, 0xd7, 0xd1, 0x51, 0xb9, 0x38, 0x49, 0x58, 0x97, 0x02, 0xfb, 0x51, 0xbe, 0x9d, 0x40, 0x82, 0x67, 0x27, 0x4b, 0xa5, 0x7b, 0xbc, 0x5b, 0x45, 0x61, 0xf5, 0x35, 0x6b, 0x13, 0xae, 0xd2, 0x7a, 0x78, 0x0d, 0x55, 0x58, 0xee, 0xc0, 0x40, 0xce, 0x25, 0x85, 0xe6, 0x32, 0x34, 0xf0, 0x24, 0x43, 0xe6, 0x69, 0x4c, 0x54, 0x55, 0x74, 0x62, 0xad, 0xbb, 0x35, 0x8b, 0x2e, 0x84, 0x33, 0xc2, 0x35, 0xa8, 0x5c, 0xcd, 0xc2, 0x37, 0x49, 0x6f, 0xd9, 0x36, 0xc4, 0xe0, 0x28, 0xa9, 0x87, 0x7a, 0xea, 0xf1, 0x47, 0xb5, 0x0b, 0x58, 0xf1, 0x55, 0x8d, 0xeb, 0x34, 0xe2, 0x2a, 0x88, 0x3f, 0x59, 0x3b, 0x37, 0xcc, 0x21, 0xd8, 0xbd, 0x5d, 0x40, 0x41, 0x6f, 0xc5, 0xcf, 0x7c, 0x45, 0xeb, 0xab, 0x40, 0x2f, 0xcb, 0x6e, 0x12, 0xac, 0xbd, 0x9e, 0xae, 0x98, 0xfa, 0x24, 0xa8, 0x45, 0x5c, 0xff, 0x53, 0xce, 0x65, 0x39, 0xe2, 0xa8, 0x83, 0x1a, 0xcd, 0x7a, 0x92, 0x9d, 0x77, 0x2f, 0xa3, 0x20, 0x0d, 0x49, 0xfc, 0x5f, 0xb1, 0x78, 0x60, 0xa3, 0xd8, 0x6b, 0x90, 0x37, 0xf0, 0xe6, 0x11, 0x1c, 0x47, 0x15, 0x30, 0xfd, 0x28, 0x20, 0x44, 0x65, 0x47, 0xff, 0x33, 0x30, 0x5e, 0x90, 0x37, 0x40, 0x19, 0xe6, 0xe2, 0x71, 0x30, 0xe4, 0x60, 0xce, 0xd2, 0x0b, 0xfd, 0x05, 0x4a, 0x91, 0xe6, 0x18, 0xdd, 0xb3, 0x34, 0x56, 0xf1, 0x4c, 0x26, 0x8a, 0x75, 0xa5, 0xae, 0x72, 0x7c, 0x8f, 0x30, 0x72, 0x2b, 0xaf, 0x86, 0x8a, 0xd6, 0x1a, 0x47, 0x86, 0x66, 0x22, 0x49, 0x74, 0xfe, 0x6f, 0x64, 0x5b, 0xde, 0x51, 0x79, 0x2a, 0x87, 0x54, 0xb3, 0xef, 0x1f, 0x15, 0x0d, 0x49, 0x18, 0x55, 0x15, 0x20, 0x0d, 0x4c, 0xef, 0x93, 0xec, 0x3f, 0x9c, 0x32, 0x5a, 0x55, 0x7d, 0x6e, 0x53, 0xa7, 0x12, 0x4d, 0x11, 0x96, 0x08, 0x63, 0x30, 0x61, 0x73, 0xfd, 0x0f, 0xf7, 0x58, 0x9f, 0x79, 0x09, 0x6e, 0xb1, 0x85, 0x64, 0x25, 0x75, 0xba, 0x7e, 0xe8, 0x3c, 0x77, 0x4e, 0x9f, 0xda, 0x92, 0x61, 0x79, 0x57, 0x40, 0x2b, 0xe8, 0xe7, 0x35, 0x9b, 0xed, 0x1c, 0x0c, 0xf2, 0x95, 0x5b, 0xe8, 0xd4, 0xc4, 0x8d, 0x5c, 0x9f, 0x31, 0x16, 0x88, 0xfd, 0xb2, 0x0b, 0x85, 0xb5, 0xba, 0x9f, 0x04, 0xc7, 0x1f, 0xdf, 0x31, 0xb7, 0x21, 0xa0, 0xde, 0x29, 0xa9, 0xb5, 0xdd, 0xae, 0xce, 0x65, 0xad, 0xde, 0x9d, 0x1c, 0x5a, 0xa7, 0x1a, 0x60, 0x9e, 0xe4, 0x82, 0x07, 0x4c, 0x31, 0xd3, 0xa7, 0xee, 0xfe, 0x8e, 0x4f, 0xad, 0xe3, 0xbc, 0x74, 0x72, 0x33, 0x2f, 0x2e, 0x4b, 0xd4, 0x0a, 0xa5, 0x10, 0x4e, 0x84, 0xc5, 0x46, 0x21, 0xe8, 0x3a, 0x43, 0x5c, 0xe0, 0x98, 0x93, 0x6b, 0xf4, 0xd9 ],
- const [ 0x17, 0x18, 0xa5, 0x7f, 0xe1, 0xa0, 0xa0, 0x12, 0xda, 0xdd, 0xb0, 0xd3, 0x00, 0x69, 0x52, 0x5c, 0x5a, 0xbe, 0x69, 0x14, 0x7e, 0xa9, 0xdf, 0x49, 0x57, 0xfc, 0x8f, 0x7f, 0x25, 0x84, 0x63, 0x07, 0xc5, 0x3a, 0xb9, 0xd3, 0x33, 0xbd, 0x0c, 0x88, 0x4d, 0x00, 0xd0, 0xd5, 0xda, 0x40, 0x9d, 0x04, 0xca, 0x3a, 0x90, 0xce, 0xbf, 0x9a, 0xef, 0x74, 0xcd, 0xb6, 0x0b, 0x0b, 0x7e, 0x7c, 0x6b, 0x17, 0x1a, 0xa9, 0x26, 0x5c, 0x25, 0x3d, 0x91, 0xf1, 0x28, 0x2b, 0x1a, 0x96, 0xb5, 0x54, 0x74, 0x47, 0xa5, 0xb6, 0xf5, 0x12, 0xa4, 0xe1, 0x3c, 0x25, 0xf0, 0xab, 0x16, 0x2b, 0x5d, 0x25, 0xa3, 0xd9, 0x9d, 0xce, 0xb4, 0xc3, 0xbe, 0x06, 0x78, 0x75, 0xf4, 0xc5, 0x58, 0xbf, 0x99, 0x8c, 0x1f, 0x50, 0x72, 0x9c, 0x5e, 0x86, 0x34, 0x67, 0x0f, 0x85, 0x46, 0x44, 0x78, 0x87, 0xc9, 0x66, 0x52, 0x73, 0xd6, 0x0f, 0x2b, 0xb0, 0x06, 0x01, 0x09, 0x3b, 0x38, 0x36, 0x50, 0xf7, 0x8e, 0xd0, 0xe5, 0x45, 0xb9, 0x53, 0x94, 0xd5, 0x77, 0x12, 0xaf, 0xbc, 0x59, 0xe7, 0xf8, 0xc6, 0xca, 0x27, 0xc1, 0x0d, 0x4d, 0xd5, 0x52, 0xca, 0x06, 0x16, 0x8b, 0x6c, 0x7c, 0xe5, 0xcb, 0xe7, 0x9d, 0x08, 0x10, 0x4f, 0x03, 0x43, 0x5f, 0xa5, 0x75, 0xcb, 0x66, 0xf1, 0xb1, 0xfd, 0x60, 0x90, 0x68, 0x50, 0x39, 0xd0, 0x8b, 0x89, 0xf2, 0xba, 0xc5, 0x2e, 0x48, 0x2f, 0x49, 0x3c, 0x90, 0x37, 0xcd, 0x1c, 0xe6, 0x95, 0xd6, 0xd4, 0x86, 0x9f, 0x37, 0x7b, 0x7a, 0x4c, 0xd4, 0xef, 0x76, 0x8f, 0xac, 0xca, 0x00, 0xe3, 0x17, 0x91, 0xd3, 0x27, 0x4b, 0x2f, 0x86, 0xad, 0x25, 0xa2, 0x69, 0x8e, 0x27, 0xf5, 0xb0, 0x40, 0xbd, 0x6e, 0xd3, 0x6a, 0xc4, 0x08, 0x34, 0xf6, 0x4c, 0x23, 0x03, 0x68, 0x9d, 0x7b, 0x5e, 0x6f, 0x79, 0x57, 0xbd, 0xba, 0xa1, 0x03, 0x8e, 0x0d, 0x9b, 0x7f, 0x1c, 0x94, 0xb1, 0x79, 0xb5, 0x77, 0x3d, 0x79, 0x0c, 0xae, 0x24, 0x5c, 0xdc, 0x17, 0xa1, 0x03, 0xce, 0xc6, 0x44, 0x4c, 0x9d, 0x9c, 0x3a, 0x41, 0x78, 0x1b, 0xce, 0x90, 0xa8, 0x78, 0x30, 0x3c, 0x72, 0xf2, 0x75, 0x91, 0x3f, 0x63, 0xe0, 0x5d, 0xfa, 0x15, 0x60, 0x5d, 0xba, 0xd6, 0x59, 0xf6, 0xa1, 0x4f, 0xa7, 0x25, 0x04, 0x91, 0xe1, 0xb9, 0xcb, 0xf1, 0xda, 0xc0, 0x1b, 0x16, 0x6e, 0x3f, 0x33, 0x50, 0x7b, 0x26, 0x94, 0x2b, 0x2d, 0x82, 0x65, 0x45, 0x7f, 0xf5, 0x15, 0x5c, 0xfe, 0x63, 0x42, 0xab, 0xd0, 0xef, 0xda, 0x77, 0xf6, 0x26, 0x80, 0xe5, 0xce, 0x79, 0x31, 0x0e, 0xdc, 0xf1, 0x27, 0x55, 0xc9, 0x1e, 0xfd, 0xf9, 0xac, 0x51, 0x15, 0xe6, 0x89, 0x0b, 0x37, 0xd1, 0x17, 0xb4, 0x7a, 0x83, 0xc7, 0x90, 0x68, 0x75, 0x01, 0xf0, 0x5d, 0x9e, 0xb1, 0xa5, 0x30, 0x89, 0x02, 0xba, 0x15, 0xaa, 0x69, 0x63, 0xc2, 0xf2, 0xe6, 0x30, 0xd1, 0xa1, 0x87, 0x86, 0x66, 0x5c, 0x2d, 0x50, 0x11, 0x7f, 0x92, 0xf2, 0xf6, 0xb4, 0x8b, 0x7e, 0x2b, 0xc5, 0x8b, 0x2b, 0x61, 0xae, 0x69, 0x03, 0xc7, 0xf7, 0x63, 0xdb, 0x2b, 0x40, 0x62, 0x88, 0x62, 0x1e, 0x80, 0x50, 0xeb, 0x25, 0xc7, 0x9f, 0xcf, 0x46, 0x3b, 0xfb, 0xcb, 0x5c, 0x1b, 0x3a, 0xb1, 0x01, 0x65, 0xf3, 0x0c, 0xa6, 0x98, 0x32, 0x03, 0xe3, 0xbd, 0x70, 0x80, 0x0b, 0xa8, 0xc2, 0x91, 0x04, 0x7c, 0x50, 0x0e, 0x55, 0x6d, 0x09, 0x7c, 0x81, 0xca, 0x95, 0x31, 0x94, 0x3a, 0x8b, 0xb9, 0xfb, 0x46, 0xe5, 0x79, 0x98, 0x17, 0xb1, 0x92, 0x16, 0x81, 0x09, 0x08, 0x7a, 0x41, 0x44, 0x24, 0xfb, 0x83, 0x6e, 0x16, 0x14, 0xa8, 0xf6, 0xdf, 0xd7, 0x45, 0xa7, 0x6e, 0x84, 0x6f, 0xd9, 0x09, 0x5a, 0x36, 0xe9, 0xef, 0xad, 0x6f, 0xe6, 0x3c, 0x39, 0xb7, 0x8d, 0x0c, 0xb6, 0xb4, 0x78, 0xe3, 0xad, 0x9e, 0x92, 0x4d, 0x89, 0xfe, 0xce, 0xc1, 0xf1, 0xb6, 0x19, 0xcb, 0x55, 0x42, 0x8d, 0x6b, 0xc7, 0x3d, 0xe7, 0xb8, 0x0d, 0x27, 0x3b, 0xc8, 0xf4, 0x65, 0xe6, 0xd4, 0xe7, 0x89, 0xc5, 0x98, 0xbf, 0xd4, 0xa4, 0xf9, 0xdd, 0xf9, 0xf9, 0xea, 0x76, 0x24, 0xd3, 0x90, 0x2f, 0x3b, 0x0d, 0xa4, 0xea, 0x64, 0xc7, 0x1a, 0xdf, 0xc7, 0x16, 0x00, 0xee, 0x95, 0xfb, 0xa8, 0x33, 0x49, 0x92, 0x09, 0xdc, 0x2e, 0x8c, 0x63, 0x37, 0x21, 0xdf, 0x22, 0x0f, 0x98, 0xbc, 0x05, 0x39, 0xe3, 0xc2, 0x7f, 0x6a, 0xb2, 0x71, 0x5e, 0x4c, 0xd8, 0xe1, 0xaa, 0xd0, 0x4e, 0xb4, 0xd0, 0xc5, 0x7b, 0x49, 0xff, 0xaa, 0xb2, 0x32, 0xd3, 0xc0, 0xfd, 0xe9, 0x31, 0x64, 0x19, 0xbe, 0x72, 0x9c, 0xc1, 0x14, 0xc3, 0xf0, 0x30, 0xcd, 0xcb, 0x7b, 0xe1, 0x03, 0x8f, 0x41, 0x99, 0xf9, 0x93, 0xc3, 0xa7, 0x51, 0x42, 0xd1, 0x6a, 0x7f, 0x90, 0xa0, 0x15, 0x7d, 0xde, 0x1c, 0xaf, 0xc0, 0x1e, 0x7f, 0x5e, 0x6c, 0x37, 0x23, 0xe4, 0xc4, 0xab, 0x94, 0x6a, 0xe4, 0x77, 0xea, 0x7d, 0xb2, 0x3b, 0x56, 0x56, 0x12, 0x9a, 0xfa, 0x5e, 0x59, 0xe4, 0xfe, 0xf1, 0x05, 0xf2, 0xe0, 0x62, 0xab, 0x52, 0x0b, 0x40, 0x30, 0xa5, 0xac, 0xd8, 0x3c, 0x44, 0xc1, 0xfb, 0xec, 0x2a, 0x72, 0x02, 0xc7, 0x0e, 0xa5, 0x0e, 0xf4, 0xcf, 0xcd, 0x95, 0xaa, 0x15, 0x02, 0x1a, 0xe7, 0x36, 0x57, 0x3b, 0x65, 0x56, 0x68, 0xf1, 0xca, 0xd3, 0x32, 0x14, 0x1e, 0xe0, 0x28, 0x1d, 0x83, 0x6f, 0x83, 0x30, 0x20, 0x55, 0xd9, 0x5a, 0x5f, 0xa8, 0xf1, 0x17, 0x58, 0x6c, 0xd6, 0x17, 0x8d, 0x6f, 0x2a, 0x41, 0xd7, 0x72, 0xbd, 0xf9, 0xa0, 0x89, 0x5e, 0x9e, 0x53, 0xc5, 0xf1, 0x57, 0x11, 0x0f, 0xc2, 0x10, 0xa6, 0x57, 0x19, 0xbf, 0xbb, 0xef, 0x0f, 0xec, 0x4c, 0x31, 0x9f, 0x70, 0x5d, 0x68, 0x00, 0x7d, 0xe9, 0xee, 0x32, 0xde, 0x1c, 0x91, 0xd8, 0x80, 0xc2, 0x3b, 0x45, 0x32, 0xfe, 0xd3, 0xd9, 0xa9, 0x3f, 0x5e, 0x8e, 0xc7, 0x70, 0x6a, 0xce, 0x1d, 0x6f, 0xac, 0x88, 0xae, 0xc1, 0xe8, 0x82, 0xf5, 0x84, 0x11, 0xf1, 0x2a, 0xa4, 0xb2, 0x47, 0xc2, 0x52, 0x8c, 0x4c, 0x35, 0xb2, 0x80, 0x70, 0x03, 0xd4, 0xb0, 0x5f, 0xf9, 0xe6, 0xe2, 0xd7, 0xb0, 0xa8, 0x25, 0xb6, 0x58, 0x20, 0xb6, 0x58, 0xb3, 0x8e, 0x24, 0x1f, 0x64, 0xa2, 0xb3, 0x53, 0x6a, 0xed, 0xfe, 0x2d, 0xe8, 0x96, 0xe1, 0x2e, 0x27, 0x4e, 0x96, 0xb5, 0xdd, 0x85, 0x1e, 0xd1, 0xb0, 0xde, 0xe3, 0x54, 0xf6, 0xe1, 0x9b, 0x29, 0xbf, 0xf1, 0x6f, 0xe7, 0x15, 0x7d, 0x5d, 0xa5, 0x82, 0x7a, 0xdb, 0x11, 0xd3, 0x10, 0xbd, 0xbc, 0x1c, 0x93, 0x58, 0xb8, 0xfc, 0xb6, 0xe8, 0x65, 0x22, 0xfb, 0x2f, 0x88, 0x10, 0x6e, 0x5f, 0x9d, 0x1f, 0x93, 0x3a, 0x6f, 0xc4, 0x9d, 0x78, 0xe5, 0x11, 0xe0, 0x69, 0x1f, 0x7f, 0x89, 0xdb, 0xc1, 0xea, 0x8d, 0x3e, 0x8f, 0xdd, 0xdf, 0x06, 0x3b, 0x10, 0xe6, 0x51, 0x7a, 0x2f, 0x2e, 0xca, 0x5d, 0xdd, 0x5e, 0xcd, 0xdf, 0xf9, 0x6a, 0xcc, 0xbb, 0x20, 0x09, 0xf1, 0x80, 0x73, 0x6a, 0x04, 0xe6, 0x9a, 0x22, 0x90, 0x63, 0x09, 0x6a, 0x41, 0xfa, 0x81, 0x87, 0x91, 0x54, 0xda, 0x89, 0xa3, 0x11, 0x01, 0x38, 0x6f, 0x60, 0x3d, 0x4c, 0x20, 0xcd, 0xb6, 0xdc, 0xba, 0x5b, 0x37, 0x19, 0x00, 0xd3, 0x33, 0x3c, 0x95, 0x5b, 0x06, 0xbd, 0x61, 0x4a, 0x7e, 0xc6, 0x36, 0x3b, 0x9a, 0xe7, 0xb4, 0x61, 0x91, 0x0b, 0x6a, 0x1a, 0x16, 0xab, 0x3d, 0xc6, 0xdb, 0x41, 0x0e, 0xd9, 0x54, 0x00, 0x97, 0x2f, 0xbd, 0xc2, 0x96, 0xa0, 0x5e, 0x42, 0x2e, 0xd5, 0x0e, 0x8b, 0x8a, 0x59, 0xf6, 0xb0, 0xc3, 0xf3, 0x97, 0xbe, 0x04, 0x34, 0x0f, 0xef, 0xec, 0x4c, 0x97, 0x20, 0x33, 0x22, 0x51, 0x85, 0x91, 0xa3, 0x41, 0x9c, 0xdb, 0x59, 0x98, 0x5f, 0x70, 0x40, 0x39, 0xbe, 0xd3, 0xd6, 0x76, 0x4c, 0x99, 0x72, 0x1a, 0x39, 0x86, 0xd6, 0xad, 0x80, 0xf3, 0x07, 0xf3, 0x61, 0x72, 0x5d, 0xb6, 0x12, 0xb5, 0xd6, 0xc5, 0xb2, 0xac, 0xaf, 0x3d, 0x7e, 0xee, 0x36, 0x07, 0x47, 0x5a, 0xda, 0xa2, 0x24, 0xfe, 0x84, 0x23, 0x64, 0x38, 0x2a, 0x7a, 0xc6, 0x1a, 0xa1, 0xf6, 0xed, 0x13, 0xb2, 0x0c, 0x0e, 0xcc, 0x71, 0x54, 0xec, 0x51, 0xca, 0xd4, 0x06, 0x71, 0x5d, 0x81, 0x0e, 0x67, 0x8c, 0x03, 0x9e, 0xba, 0xd1, 0xb9, 0x27, 0x61, 0x55, 0xfd, 0x2a, 0x2b, 0xbf, 0xa9, 0xaa, 0x5e, 0x4a, 0xd9, 0xe1, 0x9e, 0x1b, 0xf3, 0x32, 0x11, 0xd1, 0xe5, 0x5f, 0xc1, 0x5d, 0xae, 0xfc, 0x42, 0x14, 0x20, 0x23, 0x94, 0x02, 0xe4, 0x6a, 0x4a, 0x82, 0xbe, 0x12, 0xec, 0x0c, 0x12, 0x81, 0x9b, 0x4d, 0xa8, 0xf2, 0xf3, 0x7d, 0xac, 0x6c, 0x36, 0xed, 0xf9, 0xf0, 0xa6, 0xdf, 0x97, 0xf7, 0x32, 0x9b, 0x81, 0x1c, 0x55, 0xbf, 0xac, 0x15, 0x3c, 0xd7, 0x46, 0xe7, 0x27, 0x2d, 0x3b, 0x5a, 0x11, 0xe3, 0xfe, 0xab, 0x93, 0x3e, 0x86, 0x82, 0x06, 0x45, 0x97, 0x23, 0xe8, 0x8b, 0x42, 0xe8, 0x80, 0x49, 0xaf, 0xef, 0xc5, 0xaf, 0x1a, 0x10, 0x7d, 0x7c, 0x1c, 0x12, 0xa2, 0xcd, 0x2c, 0x1e, 0x09, 0x32, 0x65, 0x73, 0x46, 0x07, 0x8a, 0x5c, 0xca, 0x02, 0x47, 0x5f, 0x4e, 0x08, 0xb9, 0xb8, 0x75, 0x45, 0x31, 0x06, 0xac, 0x7b, 0x35, 0x43, 0x55, 0x9a, 0xc8, 0xf9, 0x26, 0x92, 0xec, 0xb3, 0xcb, 0x65, 0x64, 0xb2, 0xd3, 0x80, 0xbe, 0xe2, 0xc9, 0x4b, 0x91, 0x0d, 0xa1, 0xff, 0x04, 0x4d, 0x57, 0xb8, 0x8f, 0xc7, 0xd2, 0xcb, 0x06, 0x96, 0x0e, 0x59, 0xd3, 0x06, 0x7a, 0x24, 0x82, 0x03, 0x9f, 0xa2, 0x84, 0xd1, 0x03, 0x50, 0x2c, 0xfd, 0x4d, 0x49, 0xfe, 0x93, 0xa9, 0x17, 0x29, 0x91, 0x6e, 0xc9, 0x52, 0x9c, 0xff, 0x45, 0x93, 0xf2, 0xef, 0xe0, 0xc4, 0xa0, 0x68, 0x2c, 0xf9, 0xf5, 0xcd, 0x11, 0x4b, 0x36, 0x9e, 0x20, 0xdc, 0x93, 0x9c, 0x23, 0x15, 0x5a, 0x2e, 0xf9, 0x32, 0x6b, 0x04, 0xa1, 0x01, 0xec, 0xfa, 0x94, 0xe6, 0x3d, 0x3f, 0x58, 0x23, 0x2e, 0xb6, 0x52, 0x56, 0x70, 0x9c, 0xdc, 0x43, 0x4a, 0x6c, 0x97, 0xd4, 0x8d, 0xff, 0x02, 0x5e, 0xca, 0xf8, 0x4c, 0x26, 0xc2, 0x5f, 0x67, 0x24, 0x1e, 0x8c, 0x5e, 0x07, 0x61, 0x47, 0xe8, 0x79, 0x1a, 0x2d, 0x3d, 0xa3, 0x5e, 0x56, 0x28, 0xf4, 0x75, 0x34, 0x5e, 0x1e, 0xd4, 0xbe, 0x0e, 0x62, 0x4b, 0xce, 0xb9, 0x0e, 0x80, 0xc8, 0x44, 0x44, 0x9c, 0x7d, 0x4c, 0xfc, 0x44, 0x4f, 0xb9, 0x4c, 0xcb, 0x95, 0x96, 0xe8, 0xa6, 0x41, 0x20, 0xe5, 0x20, 0xc0, 0x1c, 0xc2, 0x4f, 0x21, 0x6e, 0xa8, 0x46, 0x7a, 0xe8, 0xf1, 0x8c, 0x87, 0x60, 0xe8, 0xcd, 0x95, 0x05, 0xcf, 0xd0, 0x9e, 0xf3, 0x27, 0xa9, 0xb6, 0x04, 0x2b, 0x30, 0xa5, 0xe9, 0x9e, 0xb1, 0xd6, 0x7a, 0xc6, 0xe5, 0x70, 0x4b, 0xb9, 0x21, 0xc2, 0x80, 0xd7, 0xce, 0xe4, 0xe2, 0x98, 0x19, 0x9b, 0x32, 0x88, 0xeb, 0x7e, 0xbd, 0x8f, 0x1c, 0x57, 0x30, 0x76, 0xe4, 0xcc, 0xae, 0xa7, 0x92, 0x3f, 0x20, 0x34, 0x80, 0xf2, 0xcc, 0x1b, 0x46, 0x6f, 0x2a, 0xc9, 0x2e, 0x27, 0xf2, 0xdc, 0xe8, 0x59, 0x7a, 0x2d, 0x7f, 0x35, 0x3f, 0x0e, 0x8c, 0x42, 0xc1, 0xd0, 0xaa, 0xfd, 0x95, 0x89, 0x29, 0xc3, 0xb5, 0x13, 0x07, 0xf0, 0x1a, 0x58, 0x1b, 0x49, 0x8d, 0xcd, 0x94, 0x97, 0xba, 0x3d, 0xa2, 0x95, 0x86, 0xc8, 0x73, 0x0c, 0xa2, 0x2b, 0x61, 0x3d, 0x60, 0x42, 0x6a, 0x7f, 0xc6, 0xcb, 0xe0, 0x29, 0xe2, 0x6c, 0x61, 0xb2, 0x5c, 0xf8, 0x0a, 0x17, 0x52, 0xee, 0xe8, 0x7d, 0x5f, 0x42, 0xaf, 0x18, 0xfd, 0x60, 0xaf, 0x4b, 0x0e, 0x6f, 0x03, 0x11, 0xb5, 0xd2, 0x0c, 0x9b, 0x6a, 0xf5, 0x1e, 0x3b, 0x4e, 0x46, 0x78, 0x80, 0xbb, 0x81, 0x7a, 0xa3, 0x20, 0x31, 0x12, 0x21, 0x0c, 0x74, 0x78, 0xaa, 0x88, 0xfe, 0x1b, 0x3a, 0xaa, 0x60, 0xdb, 0x86, 0x67, 0x8a, 0x78, 0x99, 0xa9, 0x8f, 0x4a, 0xbf, 0xa1, 0xa9, 0x33, 0xa2, 0x5f, 0x7d, 0xd3, 0xb3, 0xa0, 0xa0, 0xfa, 0xcb, 0xe7, 0x59, 0x63, 0x12, 0xcf, 0xa9, 0x9f, 0x21, 0x9f, 0x88, 0x4f, 0x63, 0x1f, 0x72, 0x96, 0xc1, 0xaa, 0x22, 0xce, 0x7e, 0x85, 0x9e, 0x7a, 0x5f, 0x6f, 0x73, 0x7c, 0x10, 0x79, 0x42, 0x89, 0xc3, 0x18, 0x7b, 0xd9, 0x1a, 0x79, 0x69, 0x23, 0x47, 0x14, 0x6f, 0xc8, 0x72, 0x84, 0x91, 0x4f, 0x5a, 0x96, 0x35, 0x11, 0x40, 0xa0, 0x2b, 0x35, 0x01, 0x14, 0xec, 0xdf, 0x82, 0x54, 0x1f, 0xa5, 0x50, 0xc8, 0x62, 0x43, 0x88, 0x2f, 0x46, 0x8f, 0xf5, 0x32, 0x9b, 0xaf, 0x79, 0x3f, 0xef, 0x89, 0xae, 0x94, 0x51, 0x7b, 0xcc, 0x9a, 0x5b, 0x4c, 0xce, 0x75, 0x6f, 0x63, 0xd0, 0xd9, 0x40, 0x37, 0xbc, 0x1f, 0x94, 0x07, 0x25, 0x98, 0x49, 0xcb, 0x73, 0x21, 0x96, 0x6a, 0x41, 0xf7, 0x94, 0x2d, 0x03, 0xcd, 0xfd, 0x74, 0xec, 0x1c, 0x33, 0xa8, 0x0f, 0xbb, 0x84, 0x70, 0xc4, 0xaf, 0xac, 0x28, 0x4d, 0x44, 0x9b, 0x8f, 0xb9, 0x5d, 0x79, 0xbf, 0x09, 0x08, 0xe8, 0x63, 0x92, 0x55, 0x89, 0x24, 0xa2, 0x69, 0xc1, 0x64, 0x66, 0xce, 0xbd, 0x2f, 0x0b, 0x0d, 0xb3, 0x6e, 0x24, 0x7f, 0x6b, 0x5e, 0x4c, 0x60, 0xff, 0x41, 0x0c, 0x25, 0xdf, 0x54, 0xff, 0x0f, 0x17, 0x00, 0x33, 0x01, 0xd5, 0x54, 0xd3, 0x8f, 0x25, 0xb3, 0x03, 0x57, 0x00, 0xca, 0x0c, 0x94, 0x85, 0xc5, 0xb9, 0xf0, 0x86, 0xc3 ],
- const [ 0xee, 0xb1, 0xa4, 0xc6, 0x60, 0xbe, 0x97, 0xe3, 0x65, 0xdf, 0xe4, 0x2a, 0x4d, 0x34, 0x00, 0xc6, 0xe6, 0x61, 0xca, 0xac, 0xa0, 0x2a, 0xcc, 0xd2, 0xef, 0x41, 0xbe, 0x9b, 0xf1, 0x5b, 0x4c, 0x96, 0x51, 0x89, 0x1a, 0x69, 0x6b, 0xc6, 0x04, 0x08, 0xb0, 0xcc, 0xaa, 0x2b, 0x4c, 0x2d, 0x2c, 0xfe, 0x07, 0x9e, 0x32, 0x1a, 0x69, 0x96, 0x30, 0xb4, 0x22, 0x18, 0xe8, 0x14, 0xa9, 0xcc, 0x30, 0x49, 0x22, 0x55, 0xf5, 0x1c, 0x85, 0xdf, 0x80, 0x42, 0xfd, 0xf7, 0xf8, 0xd6, 0x8e, 0xa0, 0x28, 0x06, 0xfb, 0xa3, 0x83, 0x0c, 0xe7, 0x26, 0x65, 0x60, 0x3a, 0x80, 0x9c, 0x2b, 0xc6, 0x4c, 0x27, 0xff, 0x2b, 0xbc, 0x3d, 0xc6, 0xf7, 0x31, 0x92, 0xf9, 0x12, 0x08, 0xd5, 0x13, 0x5a, 0xb6, 0x7d, 0x44, 0x8a, 0x17, 0xc5, 0x69, 0x60, 0x03, 0xf5, 0x3c, 0xff, 0x23, 0xe4, 0xc8, 0x92, 0x02, 0xbb, 0x21, 0x32, 0x67, 0xfb, 0x51, 0x0a, 0xe3, 0xc2, 0x95, 0xb8, 0xa6, 0x4a, 0xca, 0xf7, 0x96, 0xb2, 0x22, 0x7b, 0xa3, 0x01, 0x1b, 0x1d, 0x54, 0x68, 0xb2, 0x38, 0xa6, 0xc7, 0xd3, 0x53, 0x17, 0x73, 0x15, 0x00, 0xfe, 0x37, 0xa4, 0x03, 0x1d, 0x98, 0x7e, 0xb7, 0x79, 0x5d, 0xe3, 0xae, 0x6a, 0x4f, 0x06, 0x98, 0xee, 0x3e, 0x09, 0x66, 0x42, 0x44, 0x28, 0xaf, 0xb4, 0x4e, 0x35, 0x52, 0xb3, 0xd7, 0x44, 0x5d, 0x28, 0xf7, 0xa7, 0x2d, 0x09, 0x9d, 0x1d, 0xd7, 0x2a, 0x18, 0x46, 0xc7, 0x57, 0xdd, 0x5a, 0xa7, 0xa1, 0x84, 0x1b, 0x83, 0xf5, 0x13, 0x08, 0x2a, 0xf3, 0x7f, 0xd4, 0xd7, 0xfc, 0x70, 0x16, 0x10, 0x8d, 0x45, 0x42, 0xcf, 0xcc, 0x58, 0xd8, 0xe0, 0x61, 0x83, 0xdb, 0x8a, 0x87, 0xe3, 0x85, 0x71, 0x63, 0xdb, 0x39, 0xbb, 0x94, 0x5c, 0xb9, 0x72, 0x0b, 0x64, 0x99, 0x29, 0x1d, 0xc5, 0xf4, 0xe3, 0xd6, 0x28, 0x5d, 0x30, 0x91, 0x51, 0x18, 0x99, 0xc5, 0xa5, 0x8b, 0x3e, 0x22, 0xe9, 0xef, 0xbe, 0xdd, 0x4c, 0x4b, 0x57, 0x48, 0xa8, 0xa3, 0x4f, 0xa5, 0x05, 0x6c, 0x92, 0x3c, 0x5f, 0x44, 0x9c, 0xab, 0xa9, 0xe0, 0x99, 0x7e, 0x11, 0x46, 0xcb, 0xff, 0x86, 0x3c, 0x2d, 0x4f, 0x77, 0x00, 0x56, 0xb6, 0xde, 0x39, 0x9f, 0x38, 0x7e, 0x2e, 0x88, 0x69, 0x68, 0x36, 0x58, 0x82, 0xc4, 0x6f, 0x04, 0xb3, 0xce, 0xb3, 0x52, 0xbb, 0x1f, 0xc8, 0x3e, 0xb7, 0x2e, 0xd7, 0x9d, 0x37, 0x16, 0x20, 0x00, 0x97, 0x9a, 0xeb, 0xdb, 0x8d, 0x66, 0xc2, 0xe7, 0xfe, 0x97, 0xdd, 0xc4, 0x16, 0x7e, 0xde, 0xe3, 0x97, 0xa1, 0xbf, 0xa3, 0x71, 0x03, 0x08, 0xba, 0x94, 0xa6, 0x45, 0xd7, 0x02, 0x4d, 0xb7, 0x86, 0x28, 0x86, 0x4a, 0x53, 0x6e, 0xe8, 0xc7, 0x32, 0x0d, 0x9a, 0x4b, 0x1e, 0x20, 0x15, 0xf8, 0x01, 0xff, 0x2a, 0xea, 0xd4, 0xc8, 0x46, 0x6c, 0x07, 0x3e, 0xf5, 0x6c, 0x23, 0xd7, 0xa5, 0x2d, 0xae, 0x10, 0xad, 0x3c, 0x4f, 0x04, 0x8d, 0xa5, 0x32, 0x3d, 0x77, 0x66, 0xae, 0xca, 0x0f, 0x24, 0x25, 0x91, 0x70, 0x1d, 0x2c, 0xe7, 0x6f, 0x5e, 0xec, 0x5e, 0x23, 0x36, 0xc8, 0xde, 0xa5, 0xea, 0x41, 0xf8, 0x14, 0xaa, 0x16, 0x76, 0xdc, 0xc4, 0xaf, 0x37, 0x38, 0x18, 0xbb, 0x3a, 0xf6, 0xcc, 0x19, 0xf8, 0x7b, 0x41, 0xf4, 0xf7, 0x06, 0x45, 0x33, 0x9c, 0x39, 0x8a, 0x10, 0x41, 0xd5, 0x56, 0x06, 0x87, 0xc5, 0x7d, 0xf1, 0xed, 0x5e, 0x8d, 0x71, 0xa2, 0xe5, 0x48, 0x8f, 0x98, 0x51, 0x57, 0xa3, 0xda, 0x53, 0x3c, 0x75, 0x1f, 0x94, 0x89, 0xa2, 0x9f, 0x3e, 0x4f, 0x41, 0x25, 0xbd, 0xda, 0xc7, 0x66, 0xc7, 0x9b, 0x28, 0x91, 0x99, 0x66, 0x3f, 0x27, 0x84, 0xde, 0x70, 0x0d, 0xa9, 0x2d, 0x8c, 0xe0, 0x01, 0xf8, 0xf4, 0x88, 0xa0, 0x91, 0x02, 0x10, 0x3a, 0x6f, 0xa4, 0xb4, 0xe6, 0xdc, 0x4a, 0x3c, 0x22, 0xee, 0x03, 0x89, 0x17, 0xb8, 0xe2, 0x6e, 0x1f, 0xc1, 0xa7, 0xc1, 0x85, 0xb6, 0x9b, 0xb1, 0x8c, 0x5b, 0xbc, 0x59, 0xb2, 0xc7, 0x1a, 0x96, 0x35, 0xd1, 0x81, 0x16, 0xd7, 0xc6, 0x58, 0xb2, 0xde, 0x5d, 0xc9, 0xfe, 0x60, 0xec, 0x23, 0x1e, 0xbd, 0xdb, 0x7c, 0xdb, 0x6d, 0x59, 0x9a, 0xf6, 0xfc, 0x4f, 0x14, 0xbb, 0x52, 0x92, 0xb4, 0xda, 0x38, 0x5d, 0x20, 0x73, 0x18, 0xfe, 0xb9, 0x70, 0x04, 0xcf, 0xc4, 0x17, 0xfa, 0x68, 0xc8, 0xdf, 0x67, 0x13, 0x36, 0x83, 0xe9, 0x81, 0x4f, 0x56, 0x59, 0xbb, 0x43, 0xd6, 0x09, 0x5a, 0x96, 0x83, 0x4a, 0xfb, 0xc8, 0xf2, 0x32, 0xee, 0x35, 0x1d, 0x9c, 0x2e, 0x3a, 0xfd, 0x6f, 0x96, 0x99, 0x5b, 0x24, 0x51, 0x1f, 0xe3, 0x82, 0x93, 0x84, 0x7a, 0xac, 0x86, 0x92, 0xd1, 0x5e, 0x88, 0x89, 0x3a, 0x74, 0x93, 0xc3, 0xbb, 0xac, 0xfc, 0x94, 0x61, 0xac, 0x61, 0x74, 0xd7, 0x47, 0xdd, 0x60, 0x37, 0xfc, 0x7d, 0x7d, 0x20, 0xbf, 0xf8, 0xff, 0x09, 0xfd, 0x9a, 0x49, 0xd5, 0xda, 0x82, 0x55, 0xa7, 0xbd, 0x0d, 0x57, 0xf7, 0x0e, 0x92, 0x9d, 0xe6, 0x3e, 0x50, 0xba, 0xce, 0x08, 0xa4, 0xe3, 0x1e, 0xf7, 0x80, 0x99, 0x65, 0x29, 0x18, 0x89, 0xac, 0x52, 0xde, 0xb0, 0x09, 0x03, 0xb1, 0xc2, 0x71, 0x2d, 0x51, 0xcd, 0xce, 0xe1, 0x17, 0x19, 0x51, 0x59, 0xe3, 0x54, 0x0a, 0x3c, 0x55, 0xeb, 0xb6, 0x1e, 0x40, 0xbb, 0xd8, 0x46, 0x5b, 0xe9, 0x0b, 0xb5, 0x3a, 0x0e, 0x96, 0x64, 0x7d, 0x98, 0x41, 0xcc, 0x48, 0x6d, 0x67, 0xab, 0xf3, 0xd1, 0x4d, 0x06, 0x02, 0x89, 0xb2, 0x6a, 0x57, 0x40, 0xa7, 0x78, 0xa6, 0x2b, 0xa1, 0xa1, 0x2a, 0xe9, 0xcd, 0x2d, 0x96, 0xad, 0xa3, 0x82, 0x4f, 0x9e, 0xbe, 0xa3, 0xd8, 0x7e, 0xeb, 0xf7, 0x8d, 0x8a, 0x80, 0x4c, 0x95, 0xa2, 0xef, 0x1b, 0x12, 0xaa, 0x9a, 0x0d, 0x9a, 0x30, 0xe9, 0xbf, 0xeb, 0x4f, 0x9a, 0xc2, 0xda, 0xd3, 0x59, 0xe7, 0x8d, 0x9d, 0x91, 0xb9, 0xea, 0x4a, 0x81, 0x4a, 0x4f, 0x0f, 0x92, 0x33, 0x84, 0xe7, 0xe8, 0xd6, 0xee, 0xf1, 0x37, 0xe6, 0x05, 0x13, 0xd8, 0x2a, 0x08, 0xe4, 0x1c, 0x7d, 0xef, 0xc9, 0xe0, 0x1a, 0xa1, 0x5e, 0x61, 0x16, 0x67, 0x17, 0x52, 0x2e, 0xa0, 0x27, 0x2c, 0xc3, 0xb7, 0xa0, 0xc6, 0x23, 0x53, 0xdc, 0x25, 0x0a, 0xcd, 0x1d, 0x95, 0x69, 0xe7, 0x70, 0xf8, 0x65, 0xbb, 0xd7, 0x5f, 0xa3, 0xf1, 0xa6, 0xd7, 0xc3, 0x35, 0x2e, 0x86, 0x2a, 0xe8, 0x99, 0xf6, 0x05, 0x16, 0x15, 0xb0, 0x8a, 0xa9, 0x35, 0x0d, 0x81, 0xdc, 0x93, 0x49, 0x04, 0xf2, 0xbb, 0xd9, 0x83, 0x27, 0x44, 0xfe, 0x0b, 0xe7, 0x40, 0x9b, 0xc7, 0x3e, 0xd7, 0x44, 0xc7, 0x90, 0x2e, 0x97, 0x00, 0x8a, 0x8e, 0xcf, 0x94, 0x58, 0xc2, 0x96, 0x54, 0x18, 0xc0, 0x1b, 0x83, 0x8f, 0x8c, 0x65, 0xdd, 0x1b, 0x5a, 0xe7, 0xd8, 0xe9, 0xf3, 0x54, 0x2a, 0x68, 0x59, 0xb4, 0x8b, 0xfe, 0xae, 0xb8, 0xbc, 0xf9, 0x52, 0x4a, 0xc8, 0xc8, 0x4c, 0x69, 0x8a, 0x6b, 0xeb, 0x34, 0x6f, 0x28, 0xac, 0x44, 0x7e, 0x80, 0x5f, 0x3f, 0x95, 0x61, 0x86, 0xaa, 0xf5, 0x9d, 0xfe, 0xff, 0x00, 0x9b, 0xe1, 0x00, 0x42, 0x4d, 0xaa, 0x4a, 0xaf, 0x61, 0x9a, 0x2d, 0x2b, 0xbc, 0x5b, 0xbb, 0x50, 0x24, 0xe4, 0x1f, 0x6b, 0x3c, 0x9c, 0x31, 0xc7, 0xb6, 0xc2, 0x47, 0x2f, 0xc4, 0x0c, 0x4d, 0xae, 0xcf, 0x8e, 0x18, 0x99, 0x6c, 0xde, 0xf7, 0xcf, 0x8c, 0x76, 0x8b, 0x40, 0xf2, 0x59, 0xd9, 0xac, 0xeb, 0xfa, 0x9e, 0xad, 0x39, 0x59, 0xe2, 0xf8, 0x50, 0x6f, 0xd0, 0xe0, 0xc5, 0xcc, 0xc5, 0x1c, 0x03, 0x7f, 0xa7, 0xc9, 0x40, 0x36, 0x78, 0xb3, 0xaf, 0xa6, 0x2b, 0xd0, 0xf7, 0x2d, 0xb6, 0x0d, 0xe5, 0xb6, 0x68, 0x4d, 0x5d, 0xde, 0x7d, 0xaf, 0x97, 0x55, 0xf0, 0x10, 0x88, 0x86, 0x90, 0xd2, 0x9d, 0x7a, 0x56, 0xdb, 0xaf, 0xf9, 0xf6, 0xe0, 0x34, 0xf3, 0xb4, 0xe3, 0xb2, 0x1f, 0x79, 0xfa, 0x7a, 0xe2, 0x26, 0x53, 0x92, 0x72, 0x28, 0x75, 0xf3, 0x3b, 0x4d, 0xc8, 0xf4, 0x82, 0xd5, 0x58, 0x07, 0x48, 0xcd, 0xd6, 0xa3, 0x71, 0x98, 0xe0, 0x81, 0x25, 0xcf, 0x81, 0x0b, 0x77, 0x4b, 0xfc, 0x12, 0x44, 0x7f, 0xc5, 0xbf, 0x5e, 0x0b, 0xd1, 0xcc, 0xea, 0x8f, 0x0f, 0xf3, 0x07, 0xbd, 0x37, 0xa7, 0xb1, 0xb3, 0xc2, 0x03, 0xe4, 0x87, 0x39, 0x00, 0x04, 0x23, 0xb3, 0xea, 0x7c, 0x53, 0x9a, 0x15, 0xa6, 0x1c, 0xad, 0xcc, 0xeb, 0x50, 0x4b, 0x8a, 0x2b, 0x5f, 0xee, 0x6d, 0x5e, 0x70, 0xf6, 0xe7, 0x7c, 0xb0, 0xa8, 0xb7, 0x9b, 0xea, 0x76, 0x17, 0x57, 0x59, 0x80, 0x37, 0x77, 0xba, 0x5c, 0xeb, 0xce, 0xa4, 0x12, 0xa0, 0x5e, 0x1c, 0x6b, 0x95, 0xc4, 0x65, 0x6c, 0x48, 0xd0, 0x15, 0x1d, 0x2e, 0x73, 0x6e, 0x8f, 0xa6, 0xde, 0xea, 0x1c, 0x30, 0xe8, 0x18, 0xf1, 0xda, 0xb0, 0xa7, 0xca, 0xfc, 0x84, 0xc0, 0xfd, 0x25, 0x02, 0x9a, 0xba, 0x55, 0x7d, 0x48, 0x91, 0x6d, 0xa3, 0xd5, 0x34, 0xe3, 0x5c, 0x92, 0x7f, 0xba, 0xf5, 0xaf, 0xb5, 0xb2, 0x7d, 0x09, 0x0d, 0xbc, 0x6f, 0x43, 0x6d, 0xb0, 0x92, 0x18, 0x75, 0x42, 0x1e, 0xef, 0xbf, 0x33, 0x20, 0xb0, 0x65, 0xc4, 0x1f, 0xd7, 0xc4, 0x70, 0x00, 0xc7, 0x80, 0xda, 0x27, 0x60, 0xc9, 0x05, 0xdf, 0xd3, 0xdc, 0xc3, 0xfc, 0xb5, 0xcc, 0x70, 0xbf, 0x53, 0x82, 0xdf, 0xf9, 0x46, 0x02, 0x95, 0x73, 0x47, 0xf1, 0x35, 0x8e, 0x44, 0x54, 0x3c, 0x27, 0xb3, 0x9b, 0xee, 0xbd, 0x26, 0xde, 0x91, 0xd6, 0x1f, 0x66, 0xd8, 0x9e, 0x26, 0x6f, 0xa2, 0xd2, 0x1a, 0x2c, 0xe5, 0xdc, 0xc5, 0x0c, 0xe4, 0x40, 0xb2, 0x3c, 0xa9, 0x36, 0x43, 0x6d, 0xaf, 0x98, 0xfe, 0xd7, 0xdf, 0xff, 0x28, 0x7e, 0xbd, 0x2a, 0x95, 0xb4, 0xe4, 0x9f, 0xbe, 0xdf, 0xb0, 0x94, 0x14, 0x7c, 0x3a, 0x0f, 0x94, 0x64, 0x89, 0x4d, 0x9c, 0x4e, 0x06, 0x61, 0xfd, 0x96, 0x31, 0x1d, 0x51, 0x3d, 0x93, 0x35, 0x8f, 0x30, 0xf3, 0xa2, 0xdc, 0xcd, 0xcd, 0x45, 0xa4, 0xa3, 0x00, 0xcd, 0xea, 0x79, 0xc7, 0xda, 0xdc, 0x92, 0xea, 0x62, 0xab, 0x30, 0x36, 0x55, 0x99, 0x57, 0x2a, 0x7c, 0x54, 0xd3, 0xf3, 0xa7, 0x82, 0x7d, 0x9b, 0x07, 0x9d, 0xb9, 0x7d, 0xd9, 0x01, 0x43, 0xfc, 0x44, 0x43, 0x2c, 0x74, 0x85, 0xc5, 0x1f, 0x71, 0x49, 0x87, 0xe9, 0x1f, 0x5a, 0x40, 0x38, 0x02, 0x7e, 0xae, 0xa3, 0xe7, 0x9d, 0x2a, 0xeb, 0x1b, 0x21, 0x7f, 0x81, 0xda, 0xa2, 0xfc, 0x48, 0x0a, 0xc3, 0xc8, 0x9b, 0x2a, 0x57, 0x76, 0x92, 0x85, 0xc9, 0xd9, 0x81, 0xab, 0xba, 0x1a, 0xc2, 0x21, 0xeb, 0x07, 0xb5, 0x58, 0x5e, 0xae, 0x04, 0xdc, 0xb8, 0x2b, 0x2c, 0xce, 0xea, 0xbe, 0x39, 0x94, 0x10, 0x21, 0xd0, 0xcf, 0x99, 0x18, 0x73, 0x8d, 0xa9, 0x49, 0x01, 0xc1, 0xbb, 0x4e, 0x7c, 0xf0, 0x8b, 0x09, 0x0f, 0x2c, 0x33, 0x37, 0x50, 0x46, 0x94, 0x48, 0xc2, 0x40, 0xf7, 0x6f, 0x9e, 0x01, 0xf4, 0xf5, 0xd3, 0x4c, 0x94, 0xd2, 0x4b, 0xf3, 0xb2, 0x7e, 0x70, 0x48, 0xa7, 0x05, 0xef, 0xd5, 0x26, 0x5a, 0xbb, 0x4d, 0x64, 0xed, 0x56, 0xc2, 0x7c, 0x7f, 0x4c, 0x17, 0x13, 0x35, 0x00, 0xb9, 0x37, 0xec, 0xaa, 0x8a, 0x8d, 0xcd, 0xa1, 0x1e, 0xac, 0x21, 0xd6, 0x2a, 0xc4, 0x66, 0xa1, 0x39, 0x83, 0xa2, 0xc1, 0xa1, 0x39, 0xf7, 0x9e, 0xb6, 0x3a, 0x78, 0xd0, 0x3d, 0x84, 0x3b, 0xe5, 0x24, 0xa1, 0xaf, 0x5f, 0x70, 0xcf, 0x30, 0xfd, 0x76, 0x5f, 0xd9, 0x3c, 0x4e, 0x5b, 0x9a, 0x1c, 0x85, 0x6b, 0x8a, 0x27, 0x12, 0xf9, 0x7e, 0xb0, 0x8b, 0x94, 0xda, 0x59, 0x99, 0x92, 0xa7, 0xd8, 0xaa, 0xfa, 0xe6, 0xfa, 0xe5, 0xa1, 0x24, 0xe7, 0x63, 0x92, 0x4f, 0xa9, 0x9c, 0xb3, 0xc8, 0xe8, 0x1f, 0xa6, 0xb9, 0xf7, 0x87, 0xee, 0xa9, 0x15, 0xaa, 0x53, 0x4e, 0xec, 0x13, 0x87, 0xa2, 0x5e, 0xb3, 0x09, 0x39, 0x81, 0xd3, 0x4a, 0xd1, 0xe8, 0x4d, 0x0f, 0x2b, 0x25, 0xfc, 0x16, 0x19, 0x8b, 0x71, 0xfc, 0xd9, 0x39, 0xe7, 0x5e, 0xa1, 0x54, 0x79, 0x3f, 0x7b, 0x93, 0x93, 0xa9, 0x53, 0x01, 0xa7, 0x97, 0x4e, 0xfe, 0x21, 0x13, 0x5e, 0x87, 0x9c, 0x9c, 0x14, 0xb8, 0x56, 0xca, 0xb5, 0x8f, 0xe1, 0x35, 0x8f, 0xf3, 0x1c, 0x92, 0x8d, 0xf5, 0x62, 0x1f, 0x0a, 0x55, 0x01, 0x42, 0xe3, 0x48, 0xee, 0x6c, 0xd0, 0x78, 0xb7, 0x44, 0xf4, 0x4d, 0xb8, 0x02, 0xb2, 0x6b, 0x92, 0x18, 0xc3, 0x7c, 0xd9, 0x18, 0x85, 0x2f, 0x0d, 0xd2, 0x96, 0x80, 0xcc, 0xbc, 0xa2, 0x3b, 0x45, 0x98, 0x79, 0xbb, 0xf0, 0x50, 0x65, 0xf8, 0x7d, 0x25, 0xba, 0xc1, 0x0a, 0x08, 0xae, 0x45, 0x98, 0x48, 0x6b, 0xd8, 0xc0, 0x6e, 0x63, 0xf4, 0xa2, 0x66, 0xe4, 0x7e, 0x1f, 0xdf, 0xec, 0x4b, 0x48, 0xf3, 0x3e, 0xe3, 0x15, 0x0b, 0xb5, 0x85, 0x5b, 0xfd, 0xd9, 0x6b, 0xf8, 0x78, 0xb0, 0x4e, 0x50, 0xa2, 0xd7, 0x2d, 0xfe, 0xff, 0xd0, 0x4b, 0xc3, 0x95, 0x9e, 0x77, 0xc2, 0x4e, 0x8f, 0x8f, 0xf0, 0x9d, 0x5a, 0x47, 0xc6, 0x64, 0x69, 0x27, 0x39, 0x16, 0x78, 0xd3, 0xeb, 0x19, 0x5f, 0x8f, 0xa3, 0x6e, 0x2c, 0x02, 0xfb, 0x93, 0x75, 0x3a, 0x58, 0xa8, 0xed, 0xf1, 0x1f, 0xd2, 0x34, 0x0f, 0x26, 0xdd, 0xf4, 0x70, 0x69, 0x25, 0x29, 0xe6, 0xff, 0xb6, 0xc0, 0x82, 0x4c, 0xb2, 0x64, 0x0f, 0x77, 0xf3, 0x95, 0xe0, 0x1e, 0xf2, 0xfa, 0xcc, 0x49, 0xe7, 0xf8, 0x76, 0x9d, 0x32, 0x83, 0xd2, 0xd3, 0xfa, 0x34, 0xe4, 0x68, 0x14, 0x9c, 0xcb, 0x95, 0x26, 0xd9, 0xff, 0x81, 0x0c, 0x66, 0xd7, 0xb6, 0x7a, 0x38, 0x4e, 0xd1, 0xe3, 0x06, 0x06, 0x7e, 0x9a, 0xe8, 0x8d, 0xa4, 0x38, 0x23, 0xe0, 0xdd, 0x3d, 0x43, 0x2d, 0x29, 0xfa, 0x6b, 0xdd, 0xe3, 0xae, 0xea, 0xd2, 0xf4, 0xef, 0x0e, 0xed, 0x46, 0x4b, 0x3d, 0xd4, 0x7c, 0x30, 0x41, 0xf2, 0xe0, 0x09, 0xe4, 0xbf, 0x9c, 0xaa, 0xbd, 0x41, 0x2e, 0xee, 0x49, 0xd3, 0x16, 0x9e, 0x3e, 0x25, 0xd1, 0x95, 0x1b, 0x84, 0x0b, 0x22, 0x04, 0x5b, 0x11, 0xae, 0xcd, 0xfa, 0x85, 0x9f, 0x55, 0x97, 0x55, 0x7c, 0x15, 0x92, 0xed, 0x51 ],
- const [ 0x22, 0xe9, 0x35, 0x5d, 0xee, 0x8f, 0x5b, 0xd9, 0xee, 0x75, 0x3a, 0xcc, 0xa4, 0xe2, 0x8a, 0x5e, 0xab, 0xd4, 0xdc, 0x28, 0x4a, 0x47, 0xd4, 0x95, 0x49, 0xb3, 0x92, 0x8e, 0x03, 0xd7, 0x71, 0x56, 0xbd, 0xb5, 0xf4, 0xb2, 0x36, 0xde, 0xfd, 0x4e, 0x7f, 0xef, 0x40, 0x5c, 0x0d, 0x5c, 0xf8, 0x7e, 0x0d, 0x6c, 0xd8, 0xe6, 0xf7, 0x85, 0x45, 0xbb, 0x66, 0xaa, 0xc2, 0xbf, 0x27, 0x42, 0xac, 0x30, 0x90, 0x1b, 0x27, 0xec, 0x13, 0xae, 0x58, 0xd8, 0x13, 0xa5, 0xd5, 0x81, 0xf5, 0x9a, 0x59, 0x04, 0x7b, 0x22, 0xbd, 0x2c, 0x4d, 0x0a, 0x23, 0xdb, 0xd9, 0xe0, 0x75, 0xab, 0x5d, 0xb5, 0x0e, 0xd4, 0x42, 0x22, 0xb6, 0x51, 0xac, 0x89, 0xd4, 0x3e, 0x4f, 0x9d, 0xdf, 0x85, 0x84, 0x25, 0x16, 0xb9, 0x9c, 0xfd, 0x71, 0x42, 0x74, 0x5d, 0xd7, 0xbb, 0x49, 0x5d, 0x91, 0x98, 0xce, 0xb9, 0xff, 0x0c, 0x7c, 0xd2, 0x89, 0x2a, 0x2a, 0xf6, 0xd9, 0x4a, 0xdd, 0xe1, 0x47, 0xae, 0xe1, 0x84, 0x95, 0x65, 0x19, 0x05, 0xdd, 0x70, 0x93, 0x06, 0xc7, 0x24, 0x5f, 0x2a, 0xff, 0xcf, 0xa2, 0xd5, 0xe7, 0x9e, 0xe6, 0x34, 0x89, 0xbe, 0xb4, 0x7e, 0xcf, 0xc2, 0x65, 0x79, 0xf6, 0x45, 0x35, 0x3f, 0x40, 0xd0, 0x99, 0x42, 0xe9, 0xfe, 0xd3, 0x8e, 0x5d, 0xdd, 0xc3, 0x4e, 0xa8, 0x98, 0x00, 0x92, 0x2e, 0x53, 0x27, 0x4f, 0x9c, 0x57, 0x73, 0xa7, 0x1e, 0x6f, 0x8e, 0x6b, 0xd3, 0x91, 0xa7, 0xdf, 0x7e, 0xc1, 0xc5, 0xbd, 0x7e, 0x33, 0x5b, 0x7c, 0x00, 0xb0, 0x1c, 0xd1, 0x73, 0x3a, 0x10, 0x77, 0x3c, 0xf3, 0xe8, 0x2c, 0xab, 0x3b, 0x8f, 0xfc, 0x2e, 0x19, 0x01, 0xc1, 0xc5, 0xdc, 0x60, 0xeb, 0xb6, 0x02, 0x45, 0x7d, 0x82, 0x58, 0x54, 0x58, 0x17, 0x63, 0x13, 0xbc, 0x47, 0xff, 0xfc, 0x0c, 0x79, 0x46, 0xd0, 0xd1, 0x9f, 0xb3, 0x2f, 0x02, 0x68, 0x87, 0x66, 0x83, 0xb6, 0x6c, 0x88, 0xeb, 0x52, 0x59, 0xc0, 0x8a, 0xdf, 0xb5, 0xe5, 0xab, 0x0c, 0xbf, 0x4f, 0x16, 0x0e, 0x2d, 0xe9, 0xd9, 0x4e, 0x13, 0x88, 0x48, 0x5e, 0x07, 0x7b, 0x43, 0x32, 0x83, 0x64, 0xb7, 0x8d, 0x8b, 0x46, 0x67, 0xb9, 0x8f, 0xde, 0xed, 0x7b, 0x92, 0x37, 0xfb, 0x46, 0x8c, 0x79, 0xe7, 0xaf, 0x0d, 0x01, 0x67, 0x21, 0x24, 0xb7, 0x99, 0xd2, 0x7f, 0x9c, 0x46, 0xf5, 0xd3, 0xa3, 0x67, 0x32, 0x7f, 0xc2, 0xe8, 0x53, 0x6c, 0x48, 0xad, 0x40, 0x37, 0x71, 0xd3, 0x2d, 0x92, 0x38, 0x38, 0x12, 0xe7, 0x6c, 0x3d, 0x5b, 0x3f, 0x06, 0xca, 0xe1, 0x63, 0xba, 0x93, 0x1a, 0x40, 0xcc, 0x9a, 0x8c, 0x90, 0x25, 0xf5, 0x88, 0xb7, 0xa6, 0xd2, 0x14, 0xeb, 0xbc, 0xb8, 0x29, 0x98, 0x35, 0x10, 0x1f, 0x03, 0x52, 0xe3, 0x65, 0x2d, 0x1d, 0xe5, 0x75, 0xfa, 0xfc, 0xb3, 0x07, 0x92, 0x87, 0x59, 0x85, 0x08, 0x97, 0x17, 0xc0, 0x3a, 0x9f, 0x65, 0xe1, 0xf8, 0x40, 0x34, 0xa2, 0x68, 0x17, 0x77, 0xbe, 0xa8, 0xda, 0xe2, 0xa5, 0xb6, 0xa3, 0xf1, 0x75, 0x8d, 0x8b, 0x2d, 0x26, 0x91, 0x7b, 0xab, 0x04, 0x2d, 0x3f, 0xd5, 0x63, 0xbb, 0xdc, 0x6c, 0x8e, 0xa4, 0x24, 0xce, 0x00, 0xc8, 0x87, 0x75, 0xd7, 0x20, 0x2c, 0xc1, 0x85, 0xa1, 0x41, 0xf7, 0xc9, 0x64, 0x8f, 0x89, 0xde, 0x05, 0x51, 0x98, 0xf2, 0x49, 0x46, 0xb7, 0xd9, 0x03, 0x05, 0xf2, 0x03, 0x38, 0x91, 0x0f, 0xab, 0x81, 0x2d, 0x13, 0x52, 0xb1, 0x71, 0x08, 0x6c, 0xb8, 0x9e, 0xfe, 0x59, 0xc7, 0x2f, 0x50, 0x96, 0xb5, 0xb0, 0x28, 0x35, 0xa2, 0xd3, 0x45, 0x8a, 0xda, 0xc1, 0xfc, 0x28, 0xfb, 0xae, 0x7d, 0x0c, 0x5b, 0xb0, 0x58, 0x17, 0xa4, 0xd1, 0x40, 0xc2, 0xc1, 0x63, 0x0e, 0x0d, 0xfe, 0x93, 0x09, 0xb8, 0x6a, 0x41, 0x64, 0xb6, 0x80, 0x0f, 0x08, 0xdf, 0x07, 0xb8, 0x94, 0xe5, 0x37, 0xa4, 0xa2, 0x89, 0x1d, 0xb9, 0x4d, 0x0e, 0x41, 0x73, 0xf0, 0xee, 0x85, 0x37, 0x2f, 0xcd, 0x50, 0xe4, 0x3c, 0xab, 0xec, 0xac, 0x53, 0x5d, 0x2d, 0x22, 0x87, 0x3e, 0x54, 0x93, 0xc1, 0x22, 0x32, 0x9a, 0x06, 0x8b, 0x91, 0xef, 0xf8, 0x20, 0xcf, 0x80, 0xa0, 0x5a, 0xcc, 0xc3, 0x6a, 0x81, 0x07, 0x4a, 0x71, 0xd7, 0x03, 0x98, 0xfd, 0x13, 0xf0, 0x33, 0x4a, 0x10, 0x87, 0xfa, 0x8c, 0xc7, 0x36, 0xb9, 0x2f, 0x7b, 0x7d, 0xfb, 0x63, 0x33, 0x98, 0x1f, 0xd8, 0x6d, 0x5e, 0xae, 0xc6, 0x11, 0x69, 0xec, 0x31, 0xa4, 0x77, 0xad, 0x6b, 0xbe, 0x10, 0x6a, 0xda, 0xbe, 0x69, 0x94, 0xfb, 0xbc, 0x89, 0x28, 0xa7, 0xbf, 0xaa, 0x84, 0x96, 0x30, 0xe2, 0x79, 0x21, 0x8f, 0x02, 0xa1, 0x4c, 0x65, 0xbf, 0xf3, 0x03, 0x7a, 0x0f, 0x94, 0xa4, 0x47, 0xd6, 0xf0, 0xbe, 0xae, 0xc2, 0x0a, 0x19, 0xe9, 0x73, 0x10, 0xf6, 0xc1, 0xe0, 0x33, 0x97, 0x00, 0xf6, 0xb6, 0x02, 0x28, 0x82, 0x44, 0x03, 0x65, 0x50, 0x86, 0x70, 0xc1, 0x94, 0xf5, 0xb0, 0x97, 0x8a, 0xed, 0x7e, 0x4a, 0x5a, 0x03, 0xeb, 0x36, 0x3e, 0x99, 0xa2, 0xe7, 0xe6, 0xb0, 0x70, 0x89, 0x1c, 0xfd, 0x04, 0xa0, 0xa4, 0x3e, 0xf3, 0xfa, 0x66, 0xce, 0xff, 0xe1, 0xcf, 0x77, 0x98, 0x95, 0x74, 0x88, 0xa3, 0xf9, 0xf8, 0x28, 0x7b, 0x8c, 0x30, 0xea, 0x35, 0x9b, 0x86, 0xa2, 0x29, 0xb5, 0x9b, 0x76, 0xad, 0x60, 0x31, 0x38, 0x24, 0x0a, 0x47, 0xf3, 0x38, 0x42, 0x85, 0xc3, 0x63, 0x28, 0xdb, 0xea, 0xb4, 0x22, 0x66, 0x21, 0xd0, 0xd1, 0x93, 0x2c, 0x37, 0x44, 0x86, 0xb1, 0xc8, 0x6b, 0xbd, 0x4a, 0x88, 0xce, 0xf0, 0xd9, 0x9f, 0x7e, 0x3c, 0x1c, 0xa3, 0x4c, 0x81, 0x81, 0x19, 0x3a, 0x09, 0x3b, 0x39, 0x2f, 0x6a, 0x95, 0xf2, 0xef, 0xad, 0x86, 0x2e, 0x49, 0xaf, 0x86, 0x57, 0x93, 0xc8, 0xa1, 0x1a, 0x53, 0xab, 0xca, 0x6b, 0x3f, 0x8d, 0x71, 0xc9, 0x68, 0x8a, 0x58, 0xc3, 0xb2, 0x44, 0xa2, 0xbb, 0x87, 0xcd, 0x2d, 0xea, 0xcc, 0xc7, 0x21, 0xa4, 0x14, 0xc9, 0xc9, 0xdd, 0x14, 0x05, 0xa2, 0xed, 0x58, 0x28, 0xb2, 0x90, 0x34, 0x82, 0x1b, 0x31, 0xfc, 0x67, 0xf0, 0x68, 0x77, 0xd5, 0x47, 0xc1, 0x92, 0x56, 0x90, 0xbf, 0x52, 0x28, 0x25, 0x20, 0x0c, 0x9c, 0x22, 0x63, 0xd8, 0xbc, 0x76, 0x88, 0x43, 0x30, 0x3a, 0x17, 0x44, 0x63, 0x42, 0x63, 0x72, 0xe1, 0xf2, 0x10, 0x73, 0x04, 0x53, 0xd3, 0xb8, 0xcf, 0x66, 0x79, 0x67, 0x1a, 0xb9, 0x2b, 0x99, 0xef, 0x37, 0xf0, 0xc6, 0x35, 0x44, 0x73, 0x7d, 0x8b, 0x0a, 0x07, 0x59, 0x77, 0x0d, 0xe8, 0x30, 0xc0, 0x06, 0xc3, 0x8d, 0x18, 0xee, 0x79, 0x61, 0xfe, 0x59, 0x21, 0xf5, 0xe3, 0x05, 0x4c, 0x23, 0x8c, 0xb3, 0x8c, 0xc6, 0xb7, 0x35, 0x37, 0x6f, 0x01, 0xc9, 0x68, 0x5a, 0x07, 0xa5, 0x47, 0xa0, 0xcc, 0xd3, 0x8a, 0xad, 0x5b, 0x3f, 0x3c, 0xf5, 0xad, 0x0f, 0xbd, 0xe3, 0xcc, 0x32, 0x0b, 0x12, 0x39, 0x3c, 0x3f, 0xc0, 0x8b, 0x71, 0x5b, 0x80, 0x5a, 0x1f, 0x42, 0x2e, 0x5b, 0x32, 0x08, 0x28, 0xcc, 0x02, 0x6c, 0xbb, 0x13, 0x6f, 0xa3, 0xdc, 0xa2, 0x30, 0x58, 0x19, 0x1d, 0x68, 0xf0, 0xcf, 0xbf, 0x7a, 0x12, 0x9c, 0xfa, 0x1f, 0x67, 0x17, 0x5d, 0xb6, 0x9e, 0xbf, 0xbb, 0xdb, 0xb4, 0x32, 0x8a, 0x3a, 0x72, 0xa0, 0x89, 0xa5, 0x37, 0x7e, 0xa6, 0x65, 0xf7, 0x7f, 0x1e, 0xce, 0x84, 0xc0, 0xe6, 0x17, 0x0c, 0x42, 0x4a, 0x68, 0xe3, 0x9e, 0xd4, 0x33, 0x83, 0xf4, 0x6f, 0xc8, 0xd2, 0x25, 0xcc, 0x24, 0xa3, 0x42, 0x05, 0x0a, 0x7e, 0x44, 0x80, 0x56, 0xa4, 0xfd, 0x17, 0x8d, 0x4e, 0x4e, 0x75, 0xb8, 0x36, 0x9b, 0xc3, 0x73, 0x58, 0x7c, 0x85, 0x41, 0xfa, 0xb5, 0xbe, 0x22, 0xea, 0x69, 0x5b, 0x68, 0x07, 0x8a, 0xce, 0xc6, 0x02, 0x94, 0xfa, 0xaa, 0x66, 0x7b, 0x4f, 0xcc, 0xd6, 0xe1, 0x36, 0x07, 0x96, 0x8d, 0xaf, 0x69, 0x4e, 0x19, 0x38, 0x86, 0x0a, 0xea, 0xf2, 0x11, 0x84, 0x66, 0xff, 0xad, 0xa6, 0x60, 0x2e, 0x00, 0x4b, 0xd7, 0xda, 0x09, 0x46, 0xe1, 0x0f, 0xb4, 0xa5, 0xe2, 0xef, 0xac, 0x37, 0x01, 0x54, 0x71, 0x4b, 0xdd, 0xb7, 0xaa, 0xbb, 0x7b, 0x51, 0xbc, 0x29, 0x84, 0x7f, 0x9b, 0x89, 0xad, 0x6b, 0xe1, 0xdf, 0x76, 0xe9, 0x1d, 0x4a, 0x17, 0x9f, 0x6d, 0x42, 0xb7, 0x69, 0x4f, 0x1e, 0xe0, 0xfc, 0xb4, 0xd9, 0x30, 0xc9, 0x56, 0x15, 0x51, 0x24, 0x4c, 0x60, 0x2b, 0xa5, 0xdb, 0xb7, 0x57, 0xce, 0x90, 0x48, 0xd7, 0xef, 0x8b, 0x7c, 0x05, 0x47, 0x1e, 0x35, 0xca, 0x6c, 0x97, 0x55, 0x10, 0xed, 0x59, 0x7f, 0x7a, 0x35, 0x32, 0x21, 0x52, 0xb2, 0xe8, 0xb2, 0xc3, 0x37, 0x15, 0x38, 0x48, 0x9f, 0x35, 0x0e, 0x64, 0xb4, 0xfe, 0xe4, 0x94, 0x4f, 0xf0, 0x07, 0x82, 0xc0, 0x2c, 0xe3, 0x7b, 0x6f, 0x89, 0xc6, 0x23, 0xc4, 0xe5, 0xe6, 0x67, 0x45, 0xb9, 0xa6, 0xb4, 0xfe, 0xf0, 0x15, 0x66, 0x26, 0xfa, 0xb7, 0x84, 0xff, 0x1c, 0x89, 0xaa, 0xfe, 0x0a, 0x3f, 0x46, 0x2c, 0xb7, 0xd0, 0x07, 0xcc, 0x6c, 0x34, 0x93, 0x3e, 0x18, 0x6c, 0x79, 0x23, 0xe7, 0xc4, 0x66, 0xc2, 0x15, 0x55, 0x9b, 0xab, 0x05, 0xcd, 0x9e, 0x99, 0x8d, 0x73, 0x30, 0x9d, 0x94, 0x65, 0x80, 0x79, 0xe0, 0x24, 0x9e, 0x4a, 0x29, 0x53, 0x32, 0x6b, 0x72, 0xbc, 0x6e, 0x95, 0x99, 0x94, 0x41, 0x4b, 0x2c, 0x00, 0xce, 0x75, 0x7e, 0xd8, 0x1c, 0x4b, 0xfa, 0xaa, 0x0f, 0x74, 0xb8, 0x02, 0x97, 0x6f, 0x4e, 0xe8, 0x27, 0x33, 0xe9, 0xab, 0x69, 0x12, 0x9c, 0xdd, 0x30, 0xe3, 0xf7, 0x9f, 0xae, 0x60, 0xdc, 0x1f, 0xe7, 0xcd, 0x8e, 0x5e, 0x65, 0xdb, 0x0b, 0x37, 0x2d, 0xcb, 0x9c, 0x9d, 0xf3, 0xd6, 0xaa, 0x24, 0x8a, 0xcd, 0xd3, 0xc2, 0x9e, 0xfd, 0x3d, 0xd7, 0xa5, 0x55, 0x2a, 0x6c, 0x13, 0xcb, 0xcd, 0xb8, 0xcd, 0xfb, 0x5d, 0xe9, 0xe1, 0x11, 0x67, 0x21, 0x74, 0xea, 0x68, 0xbe, 0xfc, 0x76, 0x9b, 0xde, 0xaf, 0x61, 0x10, 0x22, 0x3a, 0xf2, 0xfe, 0xb3, 0xb7, 0x33, 0x5a, 0x83, 0xd9, 0x52, 0xa8, 0xd6, 0x6a, 0x47, 0x12, 0x00, 0xf8, 0xb7, 0xb7, 0x70, 0xcb, 0x18, 0x45, 0xed, 0x1a, 0x17, 0xca, 0x20, 0x7e, 0x36, 0xc7, 0x53, 0xa6, 0xba, 0x87, 0x78, 0x4d, 0xc4, 0xae, 0x6d, 0x69, 0xbe, 0x15, 0x7e, 0xa5, 0xf8, 0xd5, 0x2c, 0x12, 0x93, 0xa2, 0x2c, 0x19, 0x9f, 0x5b, 0xb3, 0xb5, 0x80, 0xde, 0xf1, 0xdf, 0x96, 0x21, 0xdb, 0x49, 0x1d, 0x7f, 0x2e, 0x4e, 0x51, 0x4f, 0xb1, 0x29, 0xd6, 0xbb, 0xba, 0x66, 0x58, 0xd0, 0xf3, 0x97, 0x6f, 0xd1, 0x5e, 0x48, 0xc5, 0xd1, 0x97, 0x35, 0x7a, 0x80, 0x5a, 0xba, 0xc7, 0x46, 0x44, 0x8a, 0xe2, 0x8e, 0xde, 0xa4, 0x22, 0x65, 0xd7, 0x83, 0x64, 0x43, 0x91, 0x95, 0xad, 0x28, 0xe0, 0xef, 0x11, 0xeb, 0x0e, 0x3f, 0xd3, 0xcf, 0x22, 0x02, 0xcd, 0x58, 0x61, 0xf7, 0x12, 0x5d, 0x16, 0xd3, 0xd3, 0x5d, 0x8f, 0x36, 0x7f, 0x17, 0x68, 0xde, 0x2e, 0x54, 0x0c, 0x1b, 0x40, 0x08, 0x78, 0x82, 0x41, 0x99, 0x42, 0xe6, 0x10, 0x7f, 0xda, 0x84, 0x41, 0x0d, 0x11, 0x7e, 0xbf, 0x8e, 0xd7, 0x8b, 0xb6, 0x94, 0x49, 0xec, 0xb0, 0x8d, 0xeb, 0xa2, 0xfe, 0x97, 0x31, 0xde, 0x59, 0x96, 0x45, 0xb9, 0xc9, 0x83, 0x04, 0x25, 0xc6, 0x07, 0x49, 0x23, 0x9d, 0x48, 0x6f, 0x37, 0x16, 0x03, 0x11, 0x19, 0x54, 0xdb, 0x14, 0xae, 0xfc, 0xf0, 0xe8, 0x36, 0x9a, 0xb4, 0x0a, 0xc7, 0x40, 0xfa, 0xce, 0xfa, 0x70, 0x50, 0x5b, 0xe4, 0x3b, 0x8f, 0xf7, 0x48, 0xab, 0xb0, 0x85, 0x0a, 0x5f, 0xe1, 0x4b, 0xe7, 0x75, 0xd8, 0xf9, 0x64, 0xad, 0x68, 0xe7, 0x04, 0xca, 0x52, 0x9f, 0xbe, 0x3c, 0x5d, 0x9b, 0xae, 0xfd, 0xa9, 0x50, 0x0b, 0xb9, 0x40, 0x6b, 0x59, 0x31, 0xee, 0x5a, 0xe0, 0xe1, 0x53, 0x0e, 0x5c, 0xe0, 0x36, 0xff, 0xf6, 0x09, 0x1c, 0x71, 0x73, 0x58, 0x19, 0xf6, 0xac, 0x96, 0xe7, 0x35, 0x3e, 0x39, 0x35, 0xe9, 0x82, 0x86, 0x41, 0x2d, 0xc0, 0xf8, 0xa9, 0xf6, 0x9f, 0xe5, 0x7f, 0xe1, 0xe0, 0x5f, 0x9b, 0x2f, 0x4c, 0x59, 0x35, 0x0d, 0xeb, 0x0a, 0xb3, 0x19, 0x77, 0x97, 0xbf, 0x23, 0x10, 0xec, 0x9d, 0x30, 0x31, 0xea, 0xbb, 0xc5, 0xe3, 0xc8, 0x8a, 0x62, 0x31, 0xb3, 0x8d, 0x4c, 0xdb, 0xb8, 0xb0, 0x8f, 0x4f, 0xe4, 0xda, 0x44, 0xd4, 0xaa, 0xc5, 0x10, 0x09, 0x84, 0x0e, 0xed, 0x8e, 0xdd, 0x88, 0x2d, 0x01, 0x2f, 0xd6, 0xbc, 0x2c, 0x69, 0x39, 0xa5, 0x7c, 0x93, 0xa6, 0xd7, 0xb5, 0xb4, 0x1c, 0x2a, 0xe5, 0xf4, 0x34, 0x9d, 0x97, 0xfe, 0xfa, 0xe1, 0x48, 0xa8, 0xfb, 0x1c, 0x1f, 0xd6, 0x9f, 0xe7, 0xd8, 0x9b, 0xb9, 0x98, 0x02, 0xa2, 0x5d, 0xc7, 0x6a, 0xcd, 0xf2, 0x0b, 0xd7, 0x1b, 0x87, 0x05, 0xf7, 0xcf, 0x6b, 0xa0, 0x9a, 0xcf, 0xf7, 0x96, 0x1e, 0x4a, 0xaf, 0x37, 0x2a, 0x9d, 0x8a, 0x66, 0xa0, 0x78, 0x8d, 0xe4, 0xcc, 0x3c, 0x9e, 0xd1, 0xe2, 0xa8, 0x98, 0x6f, 0xa7, 0xb5, 0x9b, 0x2a, 0x6e, 0xbe, 0xa6, 0xd5, 0x46, 0xe4, 0x67, 0x37, 0x72, 0xb1, 0x51, 0xc6, 0x19, 0xfc, 0xf0, 0xb2, 0x3f, 0x0c, 0x79, 0x25, 0xf4, 0x00, 0xa6, 0xca, 0xcb, 0x6d, 0xc0, 0x8c, 0x8e, 0x4a, 0xfd, 0xa0, 0x30, 0x09, 0x0d, 0xc5, 0x03, 0x07, 0xf0, 0xca, 0x2b, 0x26, 0x0a, 0x51, 0x53, 0xb8, 0x79, 0xd4, 0x9f, 0xa0, 0xa6, 0xe5, 0xe1, 0xb3, 0x1a, 0xba, 0x0f, 0x65, 0x94, 0xe8, 0xf5, 0xa1, 0x58, 0x6f, 0x27, 0xf8, 0xc9, 0xf7, 0x3a, 0xfe, 0x3a, 0x59, 0x33, 0xf1, 0x02, 0x61, 0x40, 0x9c, 0xce, 0xd3, 0xa6, 0x7b, 0x3c, 0xab, 0xfb, 0x20, 0xa5, 0xa9, 0x95, 0xd5, 0x39, 0x0d, 0x42, 0x83, 0x52, 0xa0, 0x39, 0xd3, 0x02, 0xf3, 0x51, 0x92, 0xee, 0xeb, 0x71, 0x5a, 0x60, 0x7d, 0x48, 0x6f, 0x97, 0xb7, 0x3e, 0xe7, 0x62, 0x00, 0xaa, 0x0e, 0xed, 0xa0, 0x45, 0x08, 0xda, 0x83, 0xdf, 0xb8, 0x93, 0x39, 0x50, 0xe1, 0xdf, 0x42, 0xb2, 0x8b, 0xb4, 0x89, 0xcd, 0xa9, 0x4d, 0x2e, 0xd3, 0xf8, 0x7b, 0x88, 0x4e, 0x2a, 0x40, 0x6b, 0x56, 0x44, 0x9a, 0xa6, 0x07, 0x45, 0x9d, 0xd0, 0x32, 0x08, 0xc4, 0x45, 0x53, 0x6b, 0x89, 0x6b, 0xc3, 0xb1, 0x33, 0x3a, 0x2f, 0x25, 0xf0, 0xfb, 0x49, 0x00, 0x23, 0x4f, 0xbd, 0x8d, 0xff, 0x74, 0x67, 0x8b, 0x55, 0xc4, 0xc3, 0xd3, 0xaa, 0x7e, 0xa5, 0x3b, 0x8d, 0xc9, 0x2a, 0xb9, 0x28, 0xf6, 0xee, 0xcc, 0x14, 0x06, 0x7f, 0x17, 0x72, 0x6c, 0x12, 0x4f, 0x37, 0x14, 0x75, 0x58, 0xc7, 0xa3, 0x45, 0xab, 0xc6, 0x01, 0x61, 0xfb, 0x2a, 0x15, 0x9e, 0x18, 0x95, 0xcf, 0xbd, 0x13, 0xe3, 0x6c, 0x9a, 0xa3, 0xfe, 0xf5, 0xa5, 0xc7, 0xfa, 0x09, 0x96, 0xad, 0x5e, 0xdd, 0x5d, 0xd3, 0xbf, 0x81, 0x58, 0x6c, 0x94, 0x65, 0xc9, 0x05 ],
- const [ 0x9e, 0xd1, 0xf4, 0x04, 0x5d, 0xe7, 0xf9, 0x65, 0x2a, 0xf2, 0xc6, 0x72, 0xe2, 0x65, 0xd3, 0x57, 0x57, 0xe1, 0x11, 0xca, 0xae, 0x03, 0x73, 0x89, 0x06, 0x81, 0xad, 0x04, 0x5b, 0x75, 0x3c, 0x56, 0xa9, 0xf8, 0xa6, 0x7a, 0x54, 0xf3, 0x03, 0xbc, 0xc7, 0x32, 0xbc, 0x6d, 0x5b, 0xba, 0x93, 0xdb, 0x7b, 0x5d, 0xe3, 0x81, 0x07, 0x8b, 0x29, 0x7a, 0xf5, 0x6b, 0xc4, 0x3c, 0x3e, 0x2a, 0xf9, 0x82, 0xf8, 0x94, 0x3a, 0x8a, 0xbf, 0xe1, 0xa8, 0x81, 0x5a, 0xd1, 0xd6, 0x3c, 0x9c, 0xfb, 0xd0, 0x28, 0x87, 0x61, 0x5c, 0x84, 0xb8, 0x49, 0x7f, 0xcd, 0xff, 0x48, 0x43, 0x7a, 0x4d, 0xa0, 0xb8, 0xea, 0xd3, 0xcc, 0x39, 0x9b, 0x68, 0x58, 0xf0, 0x9c, 0x2b, 0xf6, 0x9d, 0x45, 0x6a, 0xcf, 0x92, 0x25, 0xc3, 0x17, 0x02, 0x3c, 0x89, 0xe4, 0x7c, 0x6a, 0x6a, 0x40, 0xb3, 0x28, 0x4e, 0x7c, 0x80, 0x76, 0x81, 0xc8, 0x2a, 0x14, 0x15, 0x01, 0xe4, 0xf5, 0x82, 0xca, 0x97, 0xf1, 0x90, 0xde, 0xe2, 0xba, 0x77, 0xa5, 0x60, 0x11, 0x44, 0x05, 0x29, 0x3a, 0x7e, 0x7a, 0x9b, 0xad, 0x0a, 0x69, 0x5a, 0x0e, 0x4c, 0xb1, 0x95, 0x5f, 0x8f, 0x84, 0x8b, 0x75, 0xa7, 0x75, 0x4e, 0xa8, 0xd4, 0xd1, 0xc7, 0xcf, 0xea, 0x33, 0xfb, 0x6c, 0xaf, 0x53, 0x8c, 0x23, 0x85, 0x1f, 0x83, 0x71, 0x49, 0x0d, 0x4c, 0x9a, 0x7a, 0xaf, 0x02, 0xe3, 0x9e, 0x88, 0xee, 0x02, 0xe1, 0x1e, 0x4a, 0xd3, 0x00, 0x50, 0x4a, 0x4c, 0x65, 0xea, 0x5d, 0xb3, 0x94, 0x77, 0xb0, 0x0e, 0xc5, 0x56, 0xf3, 0xdc, 0xd2, 0x10, 0x61, 0x02, 0x54, 0xe9, 0xfa, 0x08, 0x09, 0xb5, 0x13, 0x85, 0x7a, 0xed, 0x11, 0xd8, 0xda, 0x02, 0x72, 0x19, 0x30, 0xf1, 0x0d, 0x50, 0xb9, 0x18, 0x9a, 0xe4, 0x87, 0x48, 0x74, 0x56, 0x6f, 0x1b, 0x9e, 0x2e, 0x22, 0x88, 0x04, 0x36, 0x9a, 0xb4, 0x04, 0xe7, 0xb8, 0x0b, 0x2d, 0x21, 0x2b, 0x90, 0x47, 0x1f, 0x93, 0x71, 0x93, 0xa9, 0xe6, 0xdf, 0x54, 0x8b, 0x13, 0x1c, 0x8d, 0x47, 0xe6, 0xd6, 0x0d, 0x07, 0x2c, 0xb3, 0xa9, 0xd5, 0x17, 0x2d, 0xc9, 0x0e, 0xe4, 0xa0, 0x26, 0x14, 0xba, 0xa1, 0xd1, 0x44, 0xd6, 0x92, 0x78, 0x28, 0xe5, 0x73, 0xe5, 0xed, 0xb1, 0xfb, 0xc7, 0x17, 0x00, 0xe8, 0xb5, 0x73, 0xb9, 0x93, 0x70, 0x4d, 0x49, 0xc7, 0x68, 0xe4, 0x45, 0xd3, 0x82, 0x1b, 0x51, 0xde, 0x19, 0x71, 0x40, 0x7b, 0x43, 0x33, 0x7d, 0x7e, 0x55, 0xf1, 0xa9, 0x0d, 0xa9, 0x2e, 0x85, 0xfa, 0x9e, 0x5b, 0x13, 0x50, 0xe1, 0x07, 0xf8, 0x2b, 0xeb, 0x50, 0x25, 0xcd, 0xcb, 0x9d, 0xb6, 0xef, 0x26, 0x8f, 0x1a, 0x55, 0x7c, 0x34, 0x75, 0xa5, 0xac, 0x7e, 0x42, 0x79, 0xbb, 0xf4, 0x3d, 0xb3, 0xd1, 0xa8, 0x80, 0x11, 0x84, 0x69, 0xec, 0x01, 0x59, 0x39, 0xca, 0xb6, 0x88, 0x02, 0xb2, 0x7b, 0x00, 0x84, 0xac, 0x47, 0xab, 0x92, 0x96, 0x92, 0xf3, 0x7e, 0xc6, 0x68, 0x85, 0xd2, 0xf0, 0xbc, 0x55, 0x40, 0x49, 0xfe, 0xe2, 0xdc, 0xec, 0xf0, 0xbb, 0x89, 0x7d, 0xb5, 0x42, 0xb1, 0x0d, 0x2a, 0xb0, 0x3a, 0x3e, 0x7a, 0x59, 0xb5, 0xa8, 0xed, 0x32, 0xd8, 0x7b, 0x01, 0x90, 0x2e, 0x65, 0xbc, 0x32, 0x0d, 0xb6, 0x40, 0x82, 0xc9, 0xc2, 0xa0, 0x18, 0x27, 0x86, 0xf2, 0x80, 0x14, 0x8f, 0xa6, 0x3d, 0x97, 0x18, 0x16, 0x0d, 0x05, 0x73, 0x5d, 0x6f, 0x74, 0xaa, 0x6d, 0x63, 0x71, 0x65, 0x5c, 0x71, 0xf6, 0x0e, 0xff, 0xec, 0x96, 0x34, 0xba, 0x78, 0xfb, 0x2d, 0x96, 0xca, 0x92, 0x00, 0x94, 0xaf, 0x85, 0x82, 0x42, 0x50, 0xea, 0xbe, 0x8b, 0xb4, 0x3a, 0x9a, 0xd3, 0x86, 0x04, 0xb8, 0x44, 0x19, 0xe2, 0x9b, 0x62, 0xa9, 0xad, 0x0b, 0xe6, 0xe4, 0xed, 0xba, 0xc9, 0xa8, 0x93, 0x27, 0x9f, 0x0f, 0xeb, 0xc3, 0x26, 0xa9, 0xcc, 0x53, 0x1f, 0x08, 0x12, 0x95, 0x5c, 0x82, 0x4d, 0x26, 0x1b, 0x32, 0xbb, 0xa3, 0x92, 0x40, 0x74, 0x0e, 0xcb, 0x62, 0xe5, 0x74, 0xb2, 0xa3, 0x7f, 0xcd, 0x6d, 0x64, 0xb0, 0x24, 0xeb, 0xa0, 0x13, 0xf8, 0xc0, 0x74, 0xe4, 0xe1, 0x30, 0xde, 0xb6, 0x77, 0x89, 0xc5, 0x68, 0x6f, 0xb7, 0x39, 0x55, 0x07, 0x12, 0xfd, 0xcb, 0xa5, 0x7a, 0x42, 0xbf, 0xba, 0xa6, 0xb6, 0xbe, 0xed, 0xb9, 0xbd, 0x27, 0x76, 0x16, 0xfe, 0x98, 0xc7, 0x76, 0x22, 0xa6, 0x72, 0x38, 0xd8, 0xd1, 0x47, 0xf8, 0x1d, 0xb6, 0xbc, 0x62, 0xba, 0x87, 0x93, 0x48, 0x0e, 0xb9, 0xb6, 0xf3, 0x0d, 0xfc, 0x66, 0xb7, 0x89, 0x70, 0x94, 0xca, 0xb1, 0x16, 0x8f, 0x57, 0xd7, 0x85, 0xe0, 0xcd, 0x76, 0xde, 0x72, 0x7d, 0x73, 0x01, 0xf7, 0x64, 0xa3, 0x01, 0x86, 0x45, 0x8e, 0xd6, 0x89, 0xfc, 0x72, 0x52, 0xd6, 0x0e, 0x8b, 0x57, 0x1c, 0x84, 0x92, 0x46, 0x81, 0xfa, 0x84, 0xba, 0x89, 0xf3, 0xa4, 0x77, 0x3a, 0x6f, 0xc3, 0x9d, 0x7e, 0xc0, 0xbf, 0x22, 0xc8, 0x99, 0x4a, 0x7e, 0xfa, 0x68, 0xec, 0xa8, 0x87, 0xe5, 0x4b, 0x42, 0xd4, 0xeb, 0xab, 0x10, 0xe5, 0x88, 0xb1, 0xaf, 0x35, 0x50, 0x6c, 0x84, 0xe5, 0xf6, 0x96, 0xf2, 0x19, 0x1d, 0x16, 0xd0, 0xa0, 0x6b, 0xca, 0x1a, 0xd3, 0xdf, 0x84, 0xe6, 0xbf, 0x65, 0x52, 0x9a, 0x86, 0xa8, 0x03, 0x5d, 0x02, 0x28, 0xe6, 0xcb, 0xac, 0x8c, 0xd5, 0xed, 0xbc, 0x39, 0x72, 0x68, 0x92, 0x23, 0xb1, 0xf4, 0x55, 0xe3, 0x97, 0x10, 0xda, 0x0b, 0x41, 0xf5, 0xc7, 0xb6, 0x27, 0xc8, 0xf8, 0x63, 0xa2, 0x13, 0x21, 0x03, 0xac, 0x76, 0xb5, 0x50, 0xe7, 0x9a, 0x07, 0x61, 0xe2, 0x67, 0xb0, 0x7b, 0x97, 0x77, 0x30, 0x2b, 0x38, 0xca, 0xd8, 0x91, 0x2b, 0xbb, 0xe7, 0xff, 0x53, 0x32, 0xf3, 0xc3, 0x91, 0x1c, 0x8a, 0x40, 0x8a, 0x18, 0x1a, 0x44, 0xab, 0x73, 0x0e, 0x95, 0x6b, 0x57, 0x3a, 0xcd, 0xd0, 0x3f, 0x79, 0x68, 0x35, 0xae, 0x94, 0x1c, 0x4a, 0x21, 0x66, 0x69, 0x5c, 0x42, 0x3e, 0x70, 0xd7, 0x5e, 0x85, 0x08, 0x09, 0x19, 0xa1, 0x0f, 0x28, 0x61, 0x18, 0xfe, 0x97, 0xa0, 0xf9, 0xc0, 0x65, 0x36, 0x78, 0xc5, 0x17, 0x26, 0xd8, 0x52, 0xa7, 0x0f, 0x8e, 0x1b, 0xcc, 0x5f, 0xa3, 0x13, 0x7c, 0xc3, 0x5a, 0x83, 0xaf, 0xe2, 0x13, 0x59, 0x67, 0x4a, 0x6f, 0xc3, 0xed, 0xaa, 0xb5, 0xfd, 0x5d, 0x43, 0x74, 0x68, 0x64, 0x99, 0x6a, 0xdb, 0x49, 0x6e, 0xa5, 0x3d, 0x2a, 0xf0, 0xe8, 0x54, 0x89, 0x32, 0x50, 0xd8, 0x07, 0xd9, 0x37, 0xcc, 0x6e, 0x18, 0x59, 0x0e, 0xf5, 0xde, 0x35, 0x2c, 0xc0, 0x4d, 0xb7, 0x79, 0xa7, 0x6f, 0x13, 0x60, 0x38, 0x24, 0xf4, 0xf9, 0xff, 0x5f, 0xd6, 0xda, 0x05, 0x92, 0xb0, 0x30, 0x96, 0x67, 0xd7, 0x0e, 0x47, 0xb1, 0x1f, 0x04, 0x38, 0xa2, 0x43, 0xf4, 0x97, 0x3e, 0x87, 0x21, 0x65, 0x0f, 0x9b, 0x89, 0x7d, 0x1b, 0xc3, 0x75, 0xd2, 0x13, 0x35, 0x4e, 0xf8, 0xcd, 0xc2, 0xb2, 0xe6, 0xf4, 0xb9, 0xc7, 0xfa, 0xff, 0x09, 0xcf, 0x3d, 0x5f, 0xa5, 0xfd, 0xe9, 0xfd, 0x2d, 0x87, 0x28, 0xe3, 0xca, 0xfd, 0x1f, 0x39, 0x5a, 0xd9, 0x2b, 0x74, 0xcd, 0x57, 0x6a, 0xca, 0xce, 0x87, 0x7e, 0xe9, 0xa6, 0xa0, 0x8d, 0xe8, 0x5e, 0x97, 0x8c, 0x7e, 0x24, 0xf0, 0xbe, 0x72, 0xf1, 0xd5, 0x77, 0x52, 0x68, 0x65, 0x26, 0x68, 0x00, 0x4e, 0x92, 0xea, 0x65, 0x9e, 0x64, 0x71, 0x1c, 0xd6, 0xe6, 0xac, 0x66, 0x40, 0x0a, 0x56, 0x68, 0x83, 0xae, 0x65, 0x88, 0x75, 0x1e, 0x85, 0x1a, 0x30, 0xdb, 0xc4, 0x3c, 0x68, 0x9b, 0x8f, 0xfe, 0xfc, 0x90, 0xdd, 0xc7, 0xca, 0xed, 0xaa, 0xf4, 0xc8, 0xa7, 0xa7, 0xc1, 0x51, 0x78, 0x30, 0x6d, 0xbc, 0x2a, 0x7e, 0x99, 0x33, 0x12, 0x1e, 0xf2, 0xc2, 0xdb, 0xa1, 0x0f, 0xaf, 0x85, 0x96, 0x9c, 0x0a, 0xac, 0xb5, 0xb9, 0x84, 0x0e, 0x5d, 0x9d, 0x85, 0x48, 0x41, 0x7f, 0x78, 0xe0, 0x5e, 0xb6, 0x6a, 0x88, 0x30, 0x1f, 0xd3, 0xa1, 0x25, 0xbf, 0xb3, 0xff, 0x52, 0xa9, 0xe1, 0xec, 0x64, 0x22, 0xa0, 0x6f, 0xda, 0x04, 0x74, 0xce, 0x72, 0x60, 0x34, 0x51, 0xe1, 0x67, 0x5f, 0x49, 0xc7, 0x8b, 0xb3, 0x51, 0xe2, 0xe1, 0xfc, 0xd4, 0x82, 0xca, 0x2b, 0xcf, 0x3d, 0xd2, 0xa7, 0xd8, 0xe3, 0xd8, 0xe8, 0x60, 0xb5, 0x70, 0x41, 0x35, 0xd1, 0x85, 0xfd, 0x4a, 0xf1, 0x43, 0xae, 0xbb, 0x55, 0x33, 0xc2, 0x0c, 0xfe, 0xa8, 0x57, 0xb2, 0x1d, 0x5b, 0x51, 0xd4, 0xcb, 0x52, 0xa9, 0x52, 0xfa, 0x06, 0x07, 0x07, 0xac, 0xc4, 0x94, 0x4b, 0x63, 0x54, 0x09, 0xbc, 0xd8, 0xd9, 0x0d, 0x3f, 0xef, 0xf8, 0xbd, 0x41, 0xeb, 0x3c, 0x8c, 0x43, 0xde, 0xb9, 0x4d, 0x95, 0x64, 0xf0, 0x8e, 0x61, 0x91, 0xf3, 0x28, 0xec, 0x28, 0xca, 0x14, 0x19, 0x0e, 0x14, 0x80, 0x2f, 0xfe, 0xf1, 0x22, 0xdb, 0x7d, 0x20, 0xcd, 0x79, 0x11, 0x65, 0x42, 0x8f, 0xae, 0x2e, 0x48, 0x9a, 0x71, 0x75, 0xff, 0x0e, 0x91, 0xe8, 0x71, 0x98, 0x92, 0x48, 0x6a, 0xa6, 0xbb, 0x0f, 0x8a, 0x29, 0xcb, 0x55, 0x98, 0x99, 0xe8, 0xf4, 0x19, 0x3a, 0xd8, 0xeb, 0x21, 0x9f, 0x73, 0x00, 0x6a, 0x6c, 0x58, 0xaa, 0xa3, 0x60, 0xe0, 0x2d, 0x0a, 0x92, 0x50, 0x07, 0x3d, 0xfa, 0x53, 0x8b, 0x4d, 0x34, 0xa7, 0xcc, 0x15, 0x81, 0x16, 0xbc, 0xca, 0x0f, 0xa8, 0x95, 0xd3, 0x7a, 0x17, 0x78, 0xda, 0x92, 0x83, 0x54, 0x23, 0x5f, 0x67, 0x0a, 0x1c, 0x62, 0xcc, 0xcf, 0x36, 0x1e, 0xbc, 0xd1, 0xf4, 0xd7, 0xfa, 0x1d, 0x41, 0x9a, 0xf0, 0xc0, 0x07, 0x7d, 0xe9, 0x2c, 0xfd, 0x28, 0x80, 0xde, 0xc1, 0x94, 0x58, 0x3e, 0x26, 0x13, 0x0e, 0xc7, 0xcf, 0x91, 0x6c, 0x67, 0xfd, 0x19, 0xe0, 0x29, 0xa5, 0x9b, 0x2c, 0x11, 0xc6, 0xec, 0x5e, 0x47, 0xf9, 0x0e, 0x03, 0x79, 0x4a, 0xb2, 0x98, 0x7a, 0x46, 0xfb, 0x41, 0x2f, 0x55, 0x85, 0xbe, 0xab, 0x4a, 0xa6, 0x9a, 0x99, 0x39, 0xf3, 0xa5, 0xda, 0x88, 0x06, 0xa5, 0x70, 0x49, 0x7f, 0x49, 0x9b, 0xc7, 0x49, 0x5e, 0x41, 0x5f, 0x1f, 0x45, 0x93, 0x92, 0x4e, 0xa5, 0xee, 0x58, 0xbc, 0x5d, 0xff, 0xb6, 0x29, 0xbd, 0x2b, 0x92, 0xb5, 0xf5, 0x2e, 0xc7, 0xa2, 0xcd, 0x02, 0x75, 0x5c, 0x97, 0x02, 0x9a, 0xb6, 0x62, 0x4f, 0xe7, 0x77, 0x71, 0x73, 0xcc, 0x15, 0xec, 0x44, 0xd6, 0xc0, 0xd4, 0x0b, 0x3a, 0xa2, 0x3c, 0xe6, 0xb2, 0x66, 0xb7, 0x6b, 0x87, 0xf7, 0x0d, 0x8e, 0xef, 0x8a, 0x32, 0xc5, 0x9a, 0xde, 0x78, 0x6a, 0x88, 0xc2, 0x03, 0x60, 0x1d, 0xd9, 0x7d, 0xf9, 0x77, 0x9a, 0x0c, 0x17, 0xff, 0x9a, 0x81, 0x92, 0x3e, 0x0e, 0xd3, 0xda, 0xf3, 0x8b, 0xcb, 0xde, 0x62, 0x11, 0x00, 0x2c, 0xee, 0x48, 0x06, 0x59, 0xea, 0x09, 0xe3, 0xa3, 0xad, 0x20, 0xc2, 0xd5, 0xe4, 0x51, 0xec, 0x6b, 0x2d, 0x99, 0xf3, 0xf7, 0xe1, 0xb5, 0x30, 0xc3, 0x30, 0xe9, 0x70, 0xb8, 0x74, 0xfa, 0xeb, 0x7e, 0xbf, 0x7c, 0x76, 0xe5, 0xb6, 0x54, 0xf9, 0x84, 0xa3, 0x75, 0x22, 0xa0, 0xc5, 0xed, 0x5b, 0x4f, 0xeb, 0x25, 0xfa, 0xdc, 0x41, 0x64, 0xb8, 0x6e, 0x69, 0x96, 0x65, 0xe5, 0xcd, 0x4c, 0xda, 0x05, 0x34, 0x03, 0x2e, 0xd6, 0x94, 0xa9, 0x2d, 0x4a, 0x27, 0x5d, 0x05, 0x21, 0xc1, 0x77, 0x43, 0x0a, 0x61, 0xc8, 0xfe, 0x0b, 0x06, 0x23, 0x52, 0x22, 0xc4, 0x1b, 0x11, 0x2d, 0x16, 0x0f, 0xb4, 0x07, 0x76, 0x64, 0x98, 0xf4, 0x2b, 0x12, 0x67, 0x3f, 0x63, 0x62, 0xd3, 0x21, 0x81, 0xf6, 0x8b, 0xe5, 0xb8, 0x09, 0x67, 0x4a, 0xd9, 0xf8, 0xe6, 0x29, 0x69, 0x01, 0xdb, 0x57, 0xf7, 0x4b, 0x63, 0xcd, 0xac, 0x27, 0x1a, 0x06, 0x24, 0x96, 0x8f, 0xa9, 0x7c, 0x0b, 0xf5, 0x68, 0xad, 0x72, 0x1b, 0x28, 0x18, 0x70, 0x9e, 0x62, 0x62, 0xed, 0x5d, 0xc9, 0x81, 0xd0, 0x2d, 0x2d, 0x17, 0x09, 0xce, 0x9f, 0xff, 0xd5, 0x1e, 0xd6, 0x26, 0x3d, 0x8d, 0xd1, 0x9d, 0xe0, 0xd1, 0xbe, 0xec, 0xf3, 0xdb, 0x1b, 0xa8, 0x86, 0x09, 0x1b, 0x48, 0x09, 0x9d, 0x4b, 0x34, 0x0e, 0x6e, 0x75, 0x1f, 0x51, 0xdd, 0xc4, 0x97, 0xf5, 0x0b, 0x2a, 0xda, 0x10, 0x49, 0xff, 0xec, 0x6a, 0xd0, 0xeb, 0xe6, 0x82, 0xb3, 0x05, 0x91, 0xd2, 0x11, 0x3c, 0x33, 0x54, 0x8f, 0xf7, 0xa9, 0x45, 0x05, 0xf8, 0xb6, 0x29, 0x78, 0x86, 0x9b, 0x0f, 0x49, 0xcb, 0xe8, 0x16, 0xab, 0x7b, 0x91, 0x30, 0x5a, 0xb6, 0x44, 0x26, 0x8b, 0x30, 0xfa, 0xdd, 0x1e, 0x8f, 0xcd, 0xd7, 0x1b, 0x14, 0x09, 0xfc, 0x5c, 0x7e, 0x85, 0x9b, 0x87, 0x2b, 0x34, 0xac, 0x40, 0x81, 0xf7, 0x58, 0x9c, 0x8c, 0xb5, 0xbb, 0xd8, 0xe8, 0xae, 0xe8, 0x4b, 0xe2, 0x0c, 0x2d, 0x99, 0xda, 0xbb, 0x99, 0x2a, 0xec, 0x7b, 0xbc, 0xda, 0xcf, 0x34, 0xae, 0xf2, 0xfc, 0x89, 0x53, 0x58, 0x13, 0xaf, 0xdc, 0x02, 0x7b, 0x80, 0x91, 0xb0, 0x49, 0xcb, 0xce, 0xdb, 0x64, 0xef, 0x4c, 0xe8, 0xe6, 0xa8, 0xa2, 0xa2, 0xc5, 0x28, 0x0c, 0xe7, 0xb2, 0x6a, 0x6a, 0xa1, 0x41, 0xc3, 0x8c, 0xf9, 0x4b, 0xba, 0xac, 0xc7, 0x91, 0x19, 0x3c, 0x4c, 0xa1, 0x44, 0xe3, 0x23, 0xfe, 0xca, 0xc2, 0x75, 0x7b, 0x3a, 0xfb, 0x6d, 0xe8, 0x38, 0x74, 0xeb, 0xf0, 0xcf, 0xd8, 0x7d, 0x42, 0x09, 0xdf, 0x8b, 0xef, 0xbd, 0xd0, 0xd1, 0x13, 0xa9, 0x44, 0x12, 0xb8, 0xc0, 0x2c, 0x0b, 0xf7, 0xc5, 0x15, 0xa7, 0x60, 0x19, 0xab, 0x71, 0x9d, 0xd2, 0x7c, 0x4e, 0x51, 0x0c, 0xff, 0x6c, 0x46, 0x84, 0xd5, 0x76, 0xc8, 0x63, 0x4e, 0x0a, 0x4c, 0x57, 0x2f, 0x6c, 0x56, 0xe8, 0xb3, 0x7c, 0x99, 0x0a, 0xcf, 0xe5, 0x5f, 0xee, 0xba, 0x98, 0x2b, 0x1e, 0xad, 0x79, 0x9d, 0xc9, 0xe8, 0x57, 0x97, 0x5b, 0xf5, 0x22, 0x9e, 0x51, 0x30, 0x58, 0x83, 0x4c, 0x87, 0xc1, 0x42, 0x64, 0x7f, 0x5c, 0x2a, 0xbe, 0x77, 0x99, 0x3e, 0x61, 0x31, 0xc8, 0xdc, 0x45, 0x8e, 0xd2, 0x9c, 0xad, 0x99, 0x27, 0x7b, 0xb7, 0xc7, 0xf7, 0x39, 0x32, 0x7e, 0xa5, 0xff, 0xaf, 0xd3, 0x79, 0x45, 0xdb, 0x98, 0x95, 0xf3, 0x0c, 0x96, 0x2a, 0xc6, 0x19, 0x17, 0xeb, 0xf6, 0x6f, 0xa8, 0xc2, 0x16, 0x61, 0x1c, 0xc2, 0x3b, 0xc0, 0xd4, 0x5e, 0x60, 0xac, 0x3e, 0xd8, 0x09, 0xa9, 0x9c, 0xfc, 0x27, 0xf6, 0x07, 0x0d, 0x3c, 0x1a, 0xb3, 0x00, 0xbf, 0xbf, 0x74, 0xe8, 0xc2, 0xc3, 0x81, 0xb2, 0xd2, 0x8d, 0x79, 0x12, 0x1f, 0x9d, 0xa3, 0xbd, 0xdd, 0x67, 0x7a, 0xd9, 0xe9, 0x62, 0x69, 0xb1, 0xb0, 0x5c, 0xd3, 0xae, 0x4d, 0x10, 0x56, 0x83, 0xf1, 0xfa, 0x51, 0xa7, 0x88, 0x6a, 0xa3, 0x08, 0x99, 0xd8, 0xb6, 0xfe, 0x6e, 0x77, 0xbd, 0x7d, 0x76, 0x0c, 0x39, 0x90, 0xe7, 0x01, 0xc2, 0x02, 0xa7, 0xb5, 0x04, 0x5e, 0x6d, 0x17, 0x08, 0x1b, 0x24, 0x73, 0xb5, 0x10, 0x90, 0x8c, 0x96, 0x2e, 0x33, 0xea, 0xdd, 0x6d, 0x72, 0x75, 0xa8, 0x07, 0xf4, 0x43, 0x84, 0xe5, 0x4b, 0xaf, 0x2f, 0x56, 0xd6, 0xab, 0xa3, 0x07, 0xe5, 0x57, 0x4f, 0x30, 0x1f, 0xd2, 0xa8, 0x0b, 0x21, 0x4f, 0xe0, 0x8a, 0x68, 0x6c, 0xf5, 0x49, 0x71, 0xc0, 0xee, 0xc2, 0x1e, 0xb3, 0x62, 0xc0, 0x5c, 0x93, 0x39, 0x16, 0x03, 0xe4, 0xb6, 0x90, 0xfe, 0xf7, 0xb6, 0x2a, 0xab, 0xbe, 0x32, 0x80, 0x84, 0xde, 0x0b, 0x86, 0x00, 0x06, 0x07, 0x79, 0xb4, 0x7f, 0x16, 0x15, 0xbe, 0x05, 0xdb, 0x09, 0x63, 0xd6, 0x67, 0xa8, 0xf7, 0x08, 0x48, 0xe1, 0xfd, 0x1f, 0xc2, 0x71, 0x90, 0xdf, 0x5c, 0x57, 0x02, 0x5f, 0x9f, 0x88, 0xc2, 0x5f, 0x1a ],
- const [ 0xfb, 0x9d, 0xe4, 0x3c, 0x9c, 0x78, 0x60, 0xe1, 0xa3, 0xba, 0xcf, 0x32, 0x1b, 0x59, 0x22, 0xea, 0x1d, 0x15, 0xe6, 0xf4, 0x39, 0x50, 0xc7, 0xdd, 0x18, 0x1f, 0x53, 0x8a, 0x60, 0xa1, 0x01, 0x26, 0xd8, 0x90, 0x72, 0x5f, 0xcd, 0x15, 0xf6, 0xd2, 0xb4, 0xe1, 0x52, 0xc3, 0x10, 0x79, 0xc1, 0x12, 0x96, 0xd1, 0x38, 0x6a, 0x8f, 0x1d, 0xee, 0xbc, 0x7f, 0xe4, 0x1c, 0xec, 0x04, 0x56, 0x01, 0xca, 0x00, 0xdf, 0x2a, 0x43, 0xfa, 0xfc, 0xf0, 0xd9, 0xc2, 0x4e, 0x42, 0x50, 0x54, 0xed, 0xa5, 0xaa, 0xff, 0xfe, 0x78, 0x56, 0xc7, 0x88, 0x7d, 0xa5, 0x07, 0x83, 0x95, 0x7d, 0x5b, 0x32, 0xcb, 0x51, 0xbc, 0xb3, 0x94, 0x50, 0xed, 0xd5, 0x55, 0xdd, 0x17, 0x29, 0x26, 0x40, 0xb0, 0x5c, 0xd6, 0x9b, 0xa0, 0xc3, 0x2f, 0x1f, 0xa7, 0x38, 0x7b, 0x7f, 0xf9, 0x25, 0x47, 0xa5, 0x2c, 0xde, 0x66, 0xa5, 0x54, 0x34, 0x39, 0xef, 0x6d, 0x47, 0x2e, 0xc8, 0xf9, 0x9b, 0x87, 0xfb, 0xe9, 0x6e, 0x5d, 0xcb, 0xc1, 0x49, 0xe4, 0x2d, 0xf8, 0xd6, 0xf0, 0x34, 0x9d, 0xf1, 0xb8, 0xcd, 0x41, 0x01, 0xda, 0xac, 0x10, 0x89, 0xa0, 0x86, 0x41, 0xfa, 0x82, 0x81, 0xb1, 0xcc, 0xec, 0xe9, 0xca, 0xcc, 0x41, 0x24, 0xaa, 0xb8, 0x1f, 0xe8, 0x81, 0x09, 0xe5, 0xab, 0x3b, 0x10, 0x72, 0x5b, 0x60, 0x44, 0x30, 0x50, 0x38, 0xdb, 0x52, 0x7f, 0x32, 0x97, 0x59, 0xf0, 0x86, 0xe3, 0xdd, 0x72, 0x1a, 0x1e, 0x8a, 0x8d, 0xa3, 0x37, 0x69, 0xb8, 0x0c, 0x7a, 0x60, 0xcc, 0x1b, 0xa9, 0xfd, 0xb9, 0x52, 0x4f, 0x6f, 0x77, 0x13, 0x51, 0xd5, 0x40, 0x08, 0xc6, 0xbc, 0xfd, 0xc2, 0x08, 0xe2, 0xfe, 0xa0, 0x0b, 0x40, 0xed, 0xf3, 0xee, 0x48, 0x05, 0x5f, 0xd0, 0x6c, 0x7f, 0x85, 0xe5, 0xdf, 0x4d, 0xde, 0xc9, 0x9f, 0x0b, 0xea, 0x14, 0xb3, 0x33, 0x8b, 0x2e, 0xb1, 0x90, 0xab, 0x65, 0x84, 0xf5, 0x25, 0x3c, 0x6c, 0x2e, 0xe3, 0x06, 0x46, 0x37, 0x44, 0xb4, 0x0e, 0xac, 0xc0, 0xec, 0xa2, 0x81, 0xce, 0x5b, 0xc9, 0xf3, 0x05, 0x4b, 0x73, 0xbe, 0x82, 0x78, 0x43, 0x91, 0x8b, 0x1f, 0x4a, 0xbf, 0x71, 0x59, 0x16, 0x37, 0xbb, 0xa7, 0xeb, 0xb6, 0x80, 0xce, 0x50, 0x3b, 0x15, 0xe5, 0xcd, 0xbc, 0xe9, 0xac, 0xf4, 0x17, 0xac, 0x1f, 0x9e, 0x4b, 0xb7, 0x4b, 0x77, 0xe8, 0xa8, 0x61, 0xbd, 0xc4, 0x4c, 0x09, 0x44, 0xf0, 0xc3, 0xf8, 0xbe, 0xea, 0xde, 0xc5, 0x39, 0x14, 0xcc, 0xf8, 0xe9, 0x65, 0xf6, 0x65, 0x28, 0x5f, 0x27, 0xb8, 0xbb, 0x41, 0xf0, 0x50, 0x57, 0x7d, 0x4b, 0x51, 0x63, 0x6c, 0x7e, 0xf4, 0x00, 0x41, 0x42, 0x22, 0x47, 0x3c, 0x25, 0x42, 0xd1, 0x20, 0x2d, 0x4f, 0x7d, 0xe6, 0xbe, 0x2d, 0x6d, 0xb3, 0xbd, 0x3d, 0x52, 0x08, 0xf6, 0x2f, 0xea, 0x38, 0xbb, 0x17, 0xc7, 0x20, 0xce, 0xc3, 0x51, 0x12, 0x82, 0x4c, 0x0e, 0x12, 0x1c, 0xec, 0x21, 0x45, 0x7f, 0x0f, 0x11, 0xa6, 0x09, 0xad, 0xcc, 0xfb, 0xb8, 0xd6, 0xec, 0x08, 0x91, 0x8f, 0x38, 0x02, 0x42, 0xdc, 0x6e, 0x46, 0x06, 0x1e, 0x40, 0x4b, 0xc9, 0x9f, 0x9c, 0xd5, 0x8d, 0x6c, 0x30, 0x6c, 0x0c, 0x63, 0x2e, 0x0d, 0x9e, 0x8c, 0x4c, 0x1f, 0x5e, 0xad, 0x10, 0xa8, 0x88, 0x18, 0x4a, 0xc1, 0x26, 0xc8, 0xe2, 0x48, 0xec, 0xac, 0xd3, 0xd4, 0x60, 0x43, 0x78, 0xee, 0x3e, 0x69, 0x07, 0x7e, 0x1a, 0x71, 0x5b, 0x83, 0x47, 0x73, 0xf6, 0x07, 0xf8, 0xe7, 0x46, 0x53, 0xa5, 0x73, 0x27, 0x5f, 0xb0, 0x02, 0xaa, 0x8c, 0x49, 0x16, 0x14, 0x95, 0x8f, 0x5f, 0x2a, 0xc3, 0xf7, 0x8c, 0xac, 0x61, 0xf2, 0x61, 0x20, 0x70, 0xca, 0x0a, 0xd0, 0x9c, 0xcd, 0xaf, 0x16, 0x6e, 0xae, 0x48, 0xd7, 0xc2, 0x28, 0xb3, 0x4e, 0x7c, 0xe4, 0x03, 0x0b, 0x77, 0x9d, 0x1c, 0x3b, 0xbe, 0x82, 0x7d, 0x29, 0xff, 0xdc, 0x5c, 0x05, 0x3c, 0xf0, 0xf8, 0xe5, 0xc4, 0x27, 0x2b, 0x09, 0x62, 0x6c, 0x3e, 0x63, 0xd4, 0xd6, 0x02, 0x56, 0x7e, 0x87, 0x1c, 0xbf, 0x60, 0xd4, 0xa1, 0x32, 0x46, 0xa6, 0xe3, 0x86, 0x3e, 0x1f, 0x8a, 0x93, 0x4f, 0x81, 0xe6, 0x3a, 0x68, 0x4c, 0x83, 0xa6, 0x97, 0xa7, 0xfe, 0xd2, 0x7b, 0x01, 0x18, 0x4b, 0xfc, 0xf8, 0x09, 0x38, 0x39, 0x7a, 0x17, 0x97, 0xc2, 0x2a, 0x66, 0xc9, 0x08, 0x05, 0x12, 0x51, 0x12, 0x45, 0x7b, 0xd9, 0x71, 0x85, 0xe0, 0x75, 0x75, 0x27, 0x30, 0x2c, 0xa1, 0xf3, 0x1c, 0xb5, 0x5d, 0x00, 0x71, 0x7e, 0xeb, 0xd8, 0xa5, 0xf3, 0x9c, 0xd7, 0xaf, 0xfc, 0x44, 0xd4, 0x1c, 0xc7, 0xeb, 0x04, 0x60, 0xc9, 0xc5, 0x1a, 0x6a, 0xff, 0x65, 0xb3, 0x7b, 0x7a, 0x2d, 0xf2, 0x37, 0x1a, 0x09, 0x67, 0xfd, 0x9a, 0x5d, 0x36, 0x74, 0xcc, 0x3b, 0x75, 0x66, 0x26, 0xda, 0xd5, 0xd2, 0x7e, 0x43, 0x85, 0x3c, 0x12, 0x4e, 0x53, 0x48, 0xcb, 0xcd, 0x15, 0x87, 0xc3, 0x07, 0x47, 0x91, 0x04, 0x68, 0xf5, 0x54, 0x93, 0x76, 0xdc, 0xab, 0xad, 0x07, 0xcc, 0x33, 0x50, 0xb1, 0x50, 0x5a, 0xfd, 0x83, 0x91, 0xb8, 0xbd, 0xf2, 0x78, 0xa3, 0x62, 0x16, 0x13, 0xfd, 0x0f, 0x17, 0x3a, 0x51, 0xfa, 0xe2, 0x72, 0x1e, 0x71, 0x20, 0x11, 0x73, 0x1b, 0x68, 0xa3, 0xbc, 0x81, 0xb3, 0x8d, 0xdc, 0xcc, 0x11, 0xf0, 0x7c, 0xd0, 0x9b, 0xd0, 0xa2, 0x4a, 0xa9, 0x76, 0x85, 0x66, 0x45, 0x12, 0xa0, 0x85, 0xdf, 0xa5, 0x05, 0x3c, 0x42, 0x1e, 0xf4, 0xa0, 0xc6, 0xc3, 0xac, 0xc1, 0xc7, 0xd3, 0x81, 0x74, 0x57, 0x6a, 0x2f, 0x56, 0x30, 0xa4, 0x6e, 0x0d, 0xec, 0x05, 0xc6, 0xd1, 0x79, 0x19, 0xa5, 0x2c, 0xc7, 0x57, 0xaf, 0xfd, 0xc3, 0x4b, 0x55, 0xc3, 0x89, 0xf5, 0xa9, 0x18, 0xd5, 0x6c, 0x70, 0x7c, 0xbb, 0xc6, 0x79, 0x54, 0x99, 0x3c, 0x2e, 0x32, 0x49, 0x8a, 0x69, 0x57, 0x9b, 0x95, 0x89, 0x77, 0x02, 0x50, 0xc4, 0xbc, 0x8d, 0xe0, 0xbf, 0x0d, 0x19, 0xff, 0x5b, 0x8f, 0xc6, 0x9e, 0xd2, 0x6c, 0xa7, 0xce, 0x04, 0xd4, 0xbe, 0xe0, 0x0b, 0x42, 0x27, 0xcb, 0x15, 0x01, 0x93, 0xcf, 0x73, 0xee, 0xf8, 0x58, 0xed, 0x7f, 0x87, 0x25, 0x59, 0x04, 0xdf, 0xa9, 0x6c, 0x2d, 0x80, 0xb2, 0xcf, 0xcd, 0x82, 0x48, 0x75, 0xdd, 0x87, 0xd8, 0x2d, 0xc4, 0xee, 0x92, 0x73, 0xd6, 0x49, 0x0f, 0x8c, 0x1a, 0x11, 0x37, 0xd2, 0x50, 0x99, 0x62, 0x4c, 0x32, 0x41, 0xbd, 0x81, 0xfb, 0xec, 0xf0, 0x8e, 0x26, 0xb4, 0xfd, 0x77, 0x78, 0xdc, 0x6b, 0xbb, 0x40, 0x05, 0xa5, 0x2b, 0xde, 0xa5, 0x9d, 0xfb, 0x82, 0xb6, 0xb4, 0x1a, 0x36, 0xab, 0xde, 0xbf, 0x1f, 0xa8, 0x01, 0x45, 0xff, 0xf2, 0x9f, 0x38, 0xff, 0xa5, 0xb5, 0xb0, 0xac, 0xa5, 0xe3, 0xdd, 0x3f, 0xd6, 0xcc, 0xe4, 0x21, 0x90, 0xc0, 0xe9, 0xae, 0x4d, 0x99, 0x6d, 0x3a, 0xa5, 0xe2, 0xdb, 0x51, 0x7d, 0x3f, 0x5d, 0x43, 0x7b, 0x08, 0xf4, 0xe0, 0xbd, 0x38, 0xc8, 0x81, 0xca, 0x86, 0xbd, 0x48, 0xc8, 0xd1, 0x46, 0xa8, 0xf0, 0xc1, 0x7e, 0x27, 0x40, 0xac, 0x75, 0x62, 0x6f, 0xb6, 0xc7, 0x52, 0x26, 0x3d, 0x74, 0xcf, 0x6d, 0x74, 0xeb, 0x52, 0x64, 0x4d, 0x68, 0xff, 0x33, 0x9d, 0x80, 0xe3, 0x43, 0x7b, 0xfb, 0x7a, 0xaf, 0xe8, 0xe1, 0x74, 0xf5, 0xb6, 0xd7, 0xb8, 0xf2, 0xa2, 0xac, 0xaa, 0x0d, 0xc4, 0x30, 0xa9, 0xb2, 0x29, 0x45, 0xdc, 0x02, 0xbe, 0x38, 0x2f, 0xc8, 0x6f, 0x51, 0x98, 0xaf, 0x91, 0xa8, 0x9f, 0xb3, 0x7d, 0x3b, 0x1d, 0xd6, 0x7e, 0x3e, 0x44, 0x14, 0xee, 0xb2, 0xdf, 0x98, 0x9b, 0x39, 0xdb, 0x30, 0x70, 0x29, 0x07, 0xff, 0x51, 0xdf, 0x18, 0x72, 0x46, 0x56, 0xf0, 0x75, 0xdc, 0xf8, 0x20, 0xe6, 0xc8, 0xb3, 0xab, 0x49, 0xce, 0x50, 0x0d, 0xbe, 0xe1, 0x00, 0x7b, 0x31, 0x8c, 0x38, 0x6d, 0xd1, 0x90, 0xbf, 0x5a, 0xc3, 0xcf, 0x06, 0xc2, 0x17, 0x68, 0xb7, 0x72, 0xfb, 0x24, 0x90, 0x04, 0x2e, 0x11, 0x72, 0xa5, 0xb8, 0x6c, 0xb5, 0x1b, 0xd9, 0xc4, 0xbf, 0x06, 0x3f, 0x5d, 0xd5, 0x65, 0x7b, 0xd3, 0x30, 0x5d, 0xb6, 0xff, 0x54, 0x36, 0xa0, 0x1e, 0x9d, 0xa7, 0xaa, 0x30, 0x1b, 0x53, 0x75, 0x9f, 0xa0, 0x93, 0x8a, 0x21, 0x16, 0x76, 0x4b, 0xdf, 0x16, 0x06, 0x2a, 0xd7, 0xb7, 0xcd, 0x18, 0x7f, 0xa4, 0x98, 0x40, 0xab, 0x72, 0x7b, 0xf6, 0xb0, 0x30, 0x15, 0xea, 0xca, 0x3f, 0x15, 0xa2, 0xbb, 0x64, 0xfd, 0x27, 0xb5, 0x1b, 0x27, 0xfe, 0x7a, 0x2e, 0x05, 0x59, 0xc2, 0x87, 0xac, 0x8f, 0xdd, 0x42, 0x94, 0xca, 0x99, 0x07, 0x99, 0xff, 0x66, 0x97, 0x46, 0x24, 0xb8, 0xa4, 0x53, 0x9d, 0xad, 0xe6, 0x6c, 0xf7, 0xf0, 0x6b, 0x35, 0xd8, 0xdd, 0x2f, 0x8a, 0x36, 0xe6, 0xec, 0x0b, 0xc8, 0x35, 0x33, 0xd8, 0xba, 0x92, 0xbc, 0x99, 0xa5, 0x88, 0xfb, 0xc2, 0xbe, 0xc3, 0xf3, 0x15, 0x4e, 0xbd, 0x4f, 0x68, 0x62, 0x9a, 0xaf, 0xa8, 0xc3, 0x50, 0x40, 0x1e, 0x28, 0x0a, 0x8f, 0xf1, 0xab, 0xcf, 0x9f, 0xec, 0x7a, 0x5e, 0x39, 0x82, 0xcf, 0x5d, 0x83, 0x0f, 0x22, 0xb3, 0xd4, 0x61, 0x9d, 0x33, 0xc7, 0x77, 0xd0, 0x7a, 0x8e, 0x88, 0xa6, 0x1a, 0x89, 0x48, 0x97, 0xf8, 0x17, 0x66, 0x20, 0xf2, 0xad, 0x59, 0x70, 0xc5, 0x25, 0x5c, 0x65, 0x2e, 0x58, 0xb7, 0xb6, 0x50, 0xee, 0x41, 0x72, 0x56, 0x75, 0x23, 0xa9, 0x59, 0xb1, 0xde, 0x68, 0x84, 0x33, 0x90, 0xeb, 0x76, 0x2d, 0x73, 0x0f, 0xe7, 0x85, 0xa6, 0x06, 0x8f, 0x28, 0x30, 0x4e, 0x43, 0xa1, 0x42, 0xe4, 0x62, 0xea, 0xbc, 0xb5, 0x6f, 0x82, 0xf3, 0x55, 0xff, 0xbf, 0xb1, 0xf3, 0xd6, 0x66, 0x7e, 0x8d, 0x4d, 0x79, 0x1e, 0x60, 0xf7, 0x50, 0x5b, 0xa3, 0x83, 0xeb, 0x05, 0x74, 0xe4, 0x87, 0x36, 0x13, 0xb0, 0x6f, 0xda, 0x4e, 0xc6, 0x15, 0x6f, 0x3c, 0x34, 0x61, 0x0a, 0x2e, 0x58, 0x49, 0x9b, 0xe3, 0x45, 0xa2, 0x71, 0xfb, 0x67, 0x36, 0x01, 0xae, 0x6b, 0x16, 0xe3, 0xbe, 0x59, 0x32, 0x1d, 0xaa, 0x03, 0x26, 0xa4, 0x25, 0xa3, 0x57, 0x20, 0xc6, 0xc0, 0x3f, 0xf0, 0x01, 0x51, 0x05, 0x6e, 0x56, 0x25, 0x51, 0x74, 0xc8, 0x82, 0x5e, 0x1f, 0x91, 0x0d, 0x51, 0xd2, 0x14, 0xe9, 0xc9, 0x7e, 0x13, 0x23, 0xb7, 0x21, 0x22, 0x4e, 0x70, 0x8d, 0x5c, 0x6a, 0x00, 0x6b, 0x54, 0x0b, 0xc1, 0x7f, 0x4f, 0xb7, 0x2d, 0x2e, 0xb0, 0x8f, 0xf1, 0x3d, 0xb3, 0x31, 0x42, 0xdb, 0x5e, 0xde, 0x74, 0xe2, 0xb5, 0xd8, 0xc9, 0x5a, 0x2e, 0x0e, 0x87, 0x3f, 0x64, 0xfb, 0x4d, 0x83, 0x0f, 0xcc, 0xa6, 0x57, 0x34, 0xc1, 0xdf, 0xa7, 0x99, 0xd5, 0x16, 0xe3, 0x7c, 0xa1, 0x94, 0x05, 0x84, 0x7e, 0x5d, 0xd0, 0xf8, 0xea, 0x04, 0x55, 0x2f, 0x2d, 0xc4, 0xbc, 0x48, 0x3c, 0xcd, 0x41, 0x1b, 0xdd, 0xdc, 0x7d, 0x6e, 0x0c, 0x0e, 0xe7, 0x6d, 0x9d, 0xf6, 0x9a, 0x54, 0x24, 0xed, 0x59, 0x6f, 0x12, 0xa9, 0xd0, 0x44, 0x20, 0x12, 0x1c, 0x0f, 0xf1, 0x50, 0x8e, 0x6e, 0xf2, 0x29, 0xac, 0x5e, 0x86, 0x8a, 0x79, 0x66, 0x60, 0x63, 0xf7, 0x12, 0x2f, 0xb8, 0xe9, 0xa3, 0x81, 0xf6, 0xdd, 0x05, 0xe1, 0x83, 0x6a, 0x01, 0x43, 0x98, 0xb7, 0xb4, 0xa3, 0x53, 0x3c, 0x40, 0xe8, 0x08, 0xcd, 0xc1, 0x0e, 0xd9, 0xd4, 0x83, 0x84, 0x86, 0xde, 0x72, 0xd3, 0x86, 0x59, 0xd1, 0x81, 0x56, 0x9b, 0x2f, 0x35, 0x11, 0x27, 0x97, 0x1b, 0x41, 0x2c, 0x08, 0x8a, 0xf4, 0x4f, 0x24, 0xe5, 0x13, 0xaa, 0x2c, 0xbf, 0xf0, 0x15, 0x2c, 0x42, 0x1e, 0xa4, 0x73, 0xd1, 0x85, 0x71, 0x46, 0xec, 0xb5, 0x9b, 0xd6, 0x54, 0x7b, 0x8e, 0x6f, 0x70, 0xb2, 0x85, 0xf1, 0xf0, 0x5c, 0x4e, 0x84, 0xb0, 0xf2, 0x4d, 0x88, 0xdf, 0xf8, 0xc4, 0xcb, 0x60, 0xd3, 0x52, 0xff, 0x70, 0xdf, 0xb9, 0x6b, 0x8a, 0xbd, 0xe4, 0xe0, 0x87, 0xea, 0x28, 0xef, 0x0a, 0x96, 0xca, 0x59, 0x1b, 0xb3, 0xc1, 0xc7, 0x12, 0x4c, 0xbe, 0xbb, 0xb7, 0x18, 0x6a, 0xc7, 0xa7, 0x4f, 0xee, 0xfd, 0xfa, 0xbc, 0xb9, 0xa6, 0x22, 0x14, 0x7d, 0x37, 0x16, 0x86, 0x7b, 0x80, 0xb1, 0x93, 0x01, 0x27, 0x54, 0x20, 0x31, 0x55, 0xd3, 0xc9, 0x03, 0xaf, 0x8f, 0x79, 0x8e, 0x88, 0xdf, 0x37, 0x83, 0x54, 0xb5, 0x43, 0xfa, 0x60, 0x7e, 0x62, 0x71, 0xc1, 0x49, 0x76, 0x11, 0x8b, 0x2c, 0x51, 0x34, 0x43, 0xe3, 0xcb, 0x25, 0x96, 0xbb, 0x12, 0x26, 0x4a, 0xaf, 0x42, 0xb8, 0x76, 0xd0, 0x36, 0x16, 0xee, 0xea, 0x9d, 0x03, 0x02, 0x64, 0x50, 0xc5, 0x68, 0x68, 0xe3, 0x72, 0x76, 0x44, 0x79, 0x6a, 0x94, 0x10, 0xdd, 0x25, 0xf2, 0x91, 0xcf, 0x2f, 0x76, 0x5e, 0x9c, 0x70, 0xf9, 0x41, 0xf2, 0xb1, 0xb2, 0xe0, 0xf1, 0x5c, 0xf2, 0x9d, 0x85, 0x83, 0x12, 0xba, 0xf4, 0x24, 0xaa, 0xc1, 0xb3, 0xac, 0x04, 0x23, 0x7e, 0xb9, 0xd1, 0x1f, 0xa7, 0x24, 0x1a, 0xe5, 0xaf, 0x3f, 0x79, 0xfc, 0x13, 0x5b, 0x88, 0xe1, 0x68, 0x8e, 0x9a, 0xf1, 0xaa, 0xb3, 0xa9, 0x88, 0xd2, 0xb1, 0x90, 0x6b, 0xa6, 0x01, 0x7a, 0x63, 0xd5, 0x6a, 0x9b, 0x2b, 0x43, 0x0f, 0x1e, 0x8c, 0xa2, 0xac, 0x5e, 0xc7, 0x42, 0x1d, 0x58, 0x33, 0x2a, 0x20, 0x61, 0x27, 0x67, 0x5b, 0x14, 0x1a, 0xa4, 0xa1, 0x8f, 0x09, 0xfb, 0x71, 0xdf, 0x1a, 0x0b, 0xbf, 0xb8, 0x7e, 0x4b, 0xf7, 0x69, 0x9b, 0x9d, 0x40, 0x10, 0x6b, 0x27, 0xfe, 0x0a, 0x1f, 0x5e, 0x9a, 0xae, 0x09, 0x63, 0x85, 0x3b, 0xb8, 0x93, 0x7a, 0x0e, 0x65, 0x5a, 0x04, 0x19, 0x8e, 0x47, 0x41, 0x90, 0xe0, 0x66, 0xe5, 0xe5, 0x5a, 0xca, 0x81, 0xf7, 0xb0, 0x69, 0x06, 0x87, 0xed, 0x2d, 0x85, 0xeb, 0x5d, 0x47, 0x38, 0x06, 0xaa, 0xc7, 0xc6, 0x77, 0x45, 0x69, 0xc3, 0x11, 0x07, 0xb2, 0x76, 0x8b, 0x19, 0x3c, 0xe0, 0x79, 0x11, 0x4f, 0xf9, 0x7b, 0x5d, 0xb0, 0x3d, 0xb5, 0xe5, 0xbe, 0x67, 0x7f, 0xec, 0xba, 0x7d, 0x5d, 0x37, 0x67, 0x0c, 0x31, 0x72, 0xd3, 0xb5, 0xaf, 0xcf, 0x74, 0xe8, 0x12, 0xf0, 0x76, 0xf0, 0x0d, 0x07, 0x54, 0x30, 0x05, 0x3c, 0xa6, 0xac, 0x7d, 0x4f, 0x3a, 0xcb, 0xd2, 0x7e, 0x65, 0x5b, 0x28, 0xa9, 0x9b, 0xd5, 0xa4, 0xb4, 0x3e, 0xe2, 0xdc, 0x2d, 0xb4, 0x1f, 0x8b, 0x2e, 0xbc, 0x1d, 0x8a, 0x85, 0x02, 0xad, 0xfb, 0x13, 0xf1, 0x5a, 0xc7, 0x72, 0xc8, 0x36, 0x4c, 0xdb, 0xf0, 0xda, 0x4f, 0x46, 0x8d, 0xa8, 0x38, 0xd2, 0x53, 0x53, 0x7e, 0x68, 0x9a, 0xa2, 0x60, 0x9b, 0xb5, 0x70, 0xd6, 0xd3, 0x80, 0xf8, 0xc7, 0xab, 0x39, 0x4f, 0x7c, 0x97, 0x91, 0x32, 0x55, 0xca, 0x02, 0x02, 0xba, 0x57, 0x62, 0x0d, 0x55, 0x96, 0xb9, 0x0f, 0x7e, 0xc9, 0x50, 0xf9, 0xf7, 0xff, 0x0a, 0xf0, 0xda, 0x39, 0xf7, 0x99, 0xcf, 0xcc, 0x27, 0x94, 0x82, 0x06, 0xbc, 0x46, 0x55, 0x14, 0x43, 0xdc, 0x52, 0x23, 0x45, 0x8c, 0x63, 0xc6, 0x18, 0x1e, 0xc5, 0x98, 0xfb, 0xac, 0xba, 0x22, 0x63, 0xa6, 0x7e, 0xff, 0x8f, 0x18, 0x7d, 0x3d, 0x62, 0x30, 0xc3, 0x07, 0x72, 0xfb, 0xb4, 0x81, 0x5d, 0x6f, 0xfd, 0xf4, 0x5c, 0xae, 0xca, 0x2b, 0x1a, 0x89, 0x3a, 0x1d, 0xc6, 0x43, 0x0f, 0xcc, 0x66, 0x98, 0xab, 0x6c, 0x6f, 0xfe, 0x38, 0xc8, 0x93, 0x2b, 0x26, 0xe2, 0xdb, 0xd7, 0xda, 0xd9, 0xf5, 0xc3, 0xa4, 0x10, 0xcf, 0xfa, 0xf2, 0x8d, 0x65, 0x57, 0xc4, 0x9f, 0xd7, 0x47, 0x60, 0xc4, 0xbe, 0xd0, 0x47, 0xc9, 0xc0, 0xd3, 0x67, 0x33, 0x62, 0x8e, 0x92, 0xde, 0x1e, 0x64, 0x2f, 0xe4, 0xb6, 0xe1, 0x30, 0xc0, 0xc7, 0xf9, 0x44, 0xb4, 0xa1, 0x90, 0x4d, 0x68, 0x56, 0x40, 0x14, 0xd3, 0x11, 0x56, 0x3b, 0x5e, 0xa9, 0x1d, 0x74, 0x47, 0x76, 0x60, 0xf1, 0x44, 0x64, 0x2a, 0x1c, 0x6a, 0x45, 0xd0, 0x87, 0x4c, 0x6c, 0x31, 0x26, 0x67, 0x77, 0x3d, 0xbc, 0xbe, 0x6c, 0xb4, 0x93, 0xc1, 0x08, 0x30, 0x70, 0x73, 0x53, 0x66, 0xc6, 0xcc, 0x78, 0xa9, 0x2a, 0x5c, 0xd4, 0xb0, 0x07, 0x32, 0x4d, 0x98, 0x93, 0xfc, 0xe5, 0x2c, 0x01, 0x70, 0x8e, 0x65, 0xf9, 0xea, 0x41, 0x2d, 0x45, 0x56, 0x4a, 0x68, 0xcd, 0x50, 0xe6, 0x35, 0xc5, 0x8a, 0x0f, 0x71, 0x25, 0x6e, 0x97, 0x7e, 0x59, 0x05, 0x74, 0x42, 0x3a, 0x18, 0x5b ],
- const [ 0x58, 0x06, 0x7f, 0xf7, 0x95, 0x9a, 0x19, 0x66, 0xd3, 0x7f, 0xce, 0x5c, 0xf0, 0x6a, 0x8d, 0xde, 0x6e, 0x1f, 0x1c, 0x67, 0x6e, 0x91, 0xb0, 0x2d, 0xdc, 0x4b, 0xbb, 0xa5, 0xe7, 0x0e, 0x05, 0x49, 0xb4, 0xbc, 0xfe, 0x99, 0x53, 0x74, 0x53, 0x60, 0xf2, 0xff, 0xbf, 0x38, 0x50, 0x6b, 0x24, 0x50, 0x75, 0xf5, 0xda, 0x6d, 0xa1, 0x2d, 0x46, 0x2f, 0x82, 0x54, 0xaf, 0x96, 0xa9, 0x09, 0x4e, 0xc4, 0x3f, 0x25, 0xa4, 0x05, 0xf4, 0xe3, 0x11, 0x0c, 0x39, 0x44, 0xa1, 0x80, 0xaf, 0xb1, 0x29, 0xb7, 0xdf, 0xe2, 0x93, 0xc1, 0x2b, 0x00, 0x76, 0xa8, 0x04, 0x06, 0xea, 0xf6, 0x5e, 0x6d, 0x9a, 0x78, 0x61, 0x08, 0x1a, 0x42, 0x62, 0x2d, 0x7b, 0xf3, 0x11, 0x15, 0x1d, 0x3a, 0xf4, 0x85, 0xc5, 0x99, 0x14, 0xae, 0xef, 0x69, 0xf6, 0x53, 0x66, 0x1f, 0xcc, 0x29, 0x11, 0xcd, 0xed, 0x83, 0x10, 0xec, 0x83, 0x2e, 0x08, 0x58, 0x83, 0x9a, 0xba, 0x9c, 0xe3, 0x3b, 0xdb, 0x70, 0x07, 0x2f, 0x1f, 0x80, 0x7c, 0x21, 0x98, 0x6f, 0xe8, 0x6d, 0x3e, 0x1c, 0x41, 0x85, 0xcf, 0x24, 0x3e, 0x93, 0xd9, 0xa8, 0x0b, 0x60, 0x14, 0x50, 0x41, 0x74, 0xf6, 0x8f, 0x15, 0x7f, 0x82, 0x29, 0xd0, 0xf7, 0x61, 0xf3, 0x7f, 0x03, 0x33, 0xda, 0xeb, 0x98, 0x27, 0x27, 0xcb, 0xe1, 0xc9, 0x02, 0x39, 0xe5, 0x1c, 0x34, 0x63, 0x64, 0xe9, 0x31, 0x83, 0x01, 0x56, 0x55, 0x11, 0xa7, 0xba, 0x6e, 0x36, 0x25, 0xb0, 0x7b, 0x85, 0x1b, 0x6b, 0xb3, 0xe6, 0x1a, 0x49, 0xc9, 0xd2, 0x07, 0xaa, 0x6f, 0xc6, 0xc0, 0x02, 0x19, 0xf1, 0x02, 0x2d, 0x03, 0x30, 0x8b, 0x03, 0x75, 0x3d, 0x7b, 0x2d, 0x46, 0x24, 0x00, 0x37, 0x9f, 0xf6, 0x32, 0xe5, 0x01, 0xc0, 0x3c, 0xcb, 0x89, 0xbe, 0xbd, 0x18, 0x73, 0xcd, 0x6e, 0xb3, 0xde, 0x1f, 0x04, 0x89, 0xce, 0x32, 0x58, 0x25, 0x77, 0x03, 0xc5, 0x81, 0xb9, 0x7f, 0xd1, 0x1b, 0xe7, 0x3a, 0x10, 0x4c, 0xcc, 0x63, 0x46, 0xd5, 0xf0, 0xf8, 0xcc, 0xbb, 0x17, 0x36, 0x35, 0x56, 0x0b, 0x54, 0x30, 0xa4, 0x9b, 0x70, 0xb0, 0xe3, 0xe4, 0xca, 0x4b, 0x5e, 0xcf, 0x30, 0xe0, 0x87, 0xdb, 0xb9, 0x7d, 0x46, 0x1d, 0xb6, 0x80, 0x91, 0x85, 0xe6, 0xfc, 0x3d, 0x62, 0xe9, 0x5e, 0x13, 0x28, 0xf7, 0x50, 0x27, 0x71, 0xd2, 0xdd, 0x65, 0x43, 0xf9, 0xd6, 0x6d, 0x91, 0x1f, 0x75, 0xa1, 0x04, 0xdb, 0x41, 0x7b, 0xfb, 0xa1, 0x31, 0x25, 0xd0, 0xf1, 0x14, 0x43, 0x5d, 0xce, 0x30, 0x13, 0xbe, 0x72, 0x2a, 0xb9, 0x59, 0x40, 0x26, 0xd4, 0x1c, 0xfa, 0x2e, 0x55, 0x06, 0x34, 0xd8, 0x91, 0xe9, 0x09, 0x23, 0x95, 0x6e, 0x0c, 0xa3, 0xb9, 0x59, 0x81, 0xde, 0x78, 0x0e, 0xce, 0xf5, 0x7e, 0x54, 0x2c, 0x87, 0x03, 0x5a, 0xa2, 0xd2, 0x58, 0xf8, 0x34, 0x1b, 0xbf, 0x36, 0x58, 0x50, 0x80, 0x12, 0xa9, 0xed, 0x39, 0x7e, 0xdf, 0x1c, 0x76, 0xa9, 0xff, 0x20, 0x81, 0x7f, 0xcf, 0xf3, 0x7c, 0x73, 0x8d, 0x2e, 0xac, 0x7c, 0xe0, 0x2a, 0x18, 0x5d, 0x0f, 0x65, 0x53, 0x2a, 0x71, 0x27, 0x96, 0x08, 0x25, 0x65, 0x11, 0x34, 0x02, 0xe5, 0x83, 0x47, 0xd1, 0xa3, 0x09, 0xb8, 0xba, 0x74, 0x33, 0xa2, 0xfd, 0xe9, 0x5d, 0xc7, 0xe3, 0x76, 0x3d, 0xd6, 0xf3, 0xd3, 0xb8, 0xe9, 0x68, 0xa3, 0xfa, 0x52, 0xe3, 0x54, 0xc5, 0x97, 0x5e, 0x46, 0x09, 0xbb, 0x61, 0x2f, 0xb6, 0xbf, 0x78, 0xbe, 0xce, 0x69, 0xe4, 0x7e, 0xbe, 0x44, 0x91, 0xfe, 0xee, 0xe8, 0x48, 0x2f, 0x97, 0x7b, 0x26, 0x0d, 0xd5, 0x78, 0x4d, 0x81, 0xfd, 0xaf, 0xd9, 0x86, 0x30, 0x8e, 0x16, 0x8c, 0x30, 0x9e, 0xf0, 0x19, 0x73, 0x50, 0xaa, 0xb6, 0x76, 0xfa, 0xd3, 0x09, 0x54, 0x1d, 0x76, 0x3f, 0x97, 0xe9, 0x92, 0xad, 0x4e, 0x03, 0xc9, 0xb6, 0x60, 0x85, 0x5c, 0xef, 0x1f, 0x47, 0x57, 0x81, 0x20, 0x5d, 0x09, 0xcf, 0x4b, 0xe0, 0xb7, 0x59, 0x2e, 0xf2, 0x92, 0xe0, 0x96, 0xfc, 0xe5, 0xcc, 0x61, 0x3a, 0x93, 0xca, 0x8e, 0x7a, 0xc1, 0xb9, 0x96, 0x20, 0xd0, 0xc7, 0xff, 0x6e, 0x8e, 0xd7, 0x2e, 0x02, 0xad, 0x27, 0x7d, 0xa0, 0x74, 0x2f, 0x8d, 0x32, 0xb4, 0xcc, 0xde, 0x0d, 0xfe, 0x9d, 0x9c, 0x76, 0x13, 0xad, 0xbc, 0x65, 0x9c, 0x53, 0x48, 0x89, 0x1b, 0x57, 0xf7, 0x8b, 0x22, 0x56, 0x01, 0x97, 0xc3, 0x68, 0x31, 0x19, 0x47, 0xff, 0x3c, 0xc4, 0x22, 0x13, 0x51, 0xd9, 0x27, 0x7c, 0xf1, 0xa6, 0xf9, 0x9f, 0x01, 0x4d, 0xc2, 0x4c, 0x1e, 0xc6, 0x27, 0xe7, 0x30, 0x27, 0x7b, 0xc6, 0x42, 0x23, 0x32, 0xdb, 0x91, 0xd1, 0x99, 0x93, 0xe2, 0xaf, 0xc5, 0xfd, 0x19, 0xe7, 0xc9, 0x2f, 0x08, 0xd1, 0x2d, 0xe6, 0x85, 0xb8, 0x9b, 0x6c, 0xbf, 0xe1, 0xda, 0xbf, 0xd2, 0xc9, 0x01, 0xef, 0x98, 0xaf, 0xe4, 0xc8, 0xc2, 0x52, 0xd3, 0xb1, 0x28, 0xfc, 0x84, 0xd4, 0x5e, 0xbf, 0x4d, 0x7f, 0x88, 0xff, 0x96, 0xca, 0x6f, 0x31, 0x8f, 0x7b, 0xd4, 0xe1, 0x1e, 0x26, 0x04, 0xfa, 0x1c, 0x99, 0xac, 0x42, 0xc0, 0x77, 0xef, 0x24, 0x5b, 0x22, 0xb6, 0xb2, 0x46, 0xde, 0x47, 0xea, 0x19, 0x34, 0x1a, 0x38, 0x1e, 0x95, 0xe7, 0x3d, 0x06, 0x40, 0x04, 0xcf, 0xda, 0x66, 0xee, 0x41, 0x34, 0x8b, 0x26, 0xe4, 0xae, 0x2f, 0x3e, 0xcd, 0x9b, 0xae, 0x33, 0xd9, 0xf5, 0x65, 0xfd, 0xef, 0x97, 0x16, 0x65, 0x85, 0xac, 0x8d, 0x17, 0x66, 0x68, 0x84, 0xf8, 0xb2, 0xf6, 0xc5, 0xb9, 0x26, 0xb1, 0x8e, 0xad, 0x9d, 0x96, 0x39, 0xd7, 0xd7, 0xf9, 0x1c, 0x48, 0x7a, 0x78, 0xaf, 0xa8, 0x56, 0x2e, 0xec, 0x12, 0xed, 0x29, 0xfc, 0x25, 0x33, 0x1d, 0x0f, 0x57, 0x92, 0x59, 0x8c, 0x8d, 0x31, 0xfb, 0x6a, 0xe9, 0x76, 0x60, 0xdd, 0xe3, 0xca, 0xdf, 0x36, 0x9c, 0x9c, 0xb7, 0x04, 0x6e, 0xa8, 0x45, 0x80, 0xc8, 0x79, 0x7b, 0x28, 0x39, 0x2c, 0x8d, 0xa9, 0xca, 0x78, 0xed, 0x02, 0x91, 0xeb, 0x7a, 0xe7, 0x83, 0x76, 0xf5, 0x63, 0x8a, 0x2c, 0xb4, 0xc2, 0xd8, 0x47, 0x9a, 0xae, 0x7a, 0x6c, 0x46, 0x98, 0x30, 0x30, 0x8b, 0x5a, 0x7c, 0xda, 0x20, 0x1a, 0xf9, 0x6a, 0x99, 0x71, 0xee, 0xdb, 0x96, 0xcc, 0x23, 0xa6, 0x3b, 0x13, 0xf3, 0x87, 0xe0, 0x89, 0xa3, 0x83, 0x09, 0xf4, 0xf2, 0x2a, 0x98, 0xfd, 0xf1, 0x1a, 0x41, 0xd9, 0x15, 0xc4, 0x3f, 0x29, 0x8b, 0x73, 0x45, 0x1f, 0xcb, 0x8a, 0xb8, 0xe3, 0x70, 0x0c, 0x1b, 0x35, 0x47, 0x62, 0xcb, 0x53, 0xa6, 0x59, 0xec, 0x1d, 0xff, 0x6b, 0xa3, 0x77, 0xb4, 0x3f, 0x85, 0xef, 0x2d, 0x73, 0x50, 0xa0, 0x29, 0x98, 0xd9, 0x55, 0x51, 0x7e, 0x46, 0xf2, 0x13, 0xb2, 0x7d, 0x10, 0xad, 0x46, 0xdd, 0xe8, 0x88, 0xd0, 0x2b, 0x72, 0xc8, 0xb5, 0xcf, 0xce, 0x21, 0xa8, 0x40, 0xe2, 0xec, 0x6d, 0xbd, 0x45, 0x7a, 0xe3, 0x3e, 0x5b, 0xa8, 0x41, 0xaa, 0xc2, 0xb3, 0xa0, 0x4a, 0xed, 0x4e, 0xba, 0x7e, 0x0f, 0xf2, 0xf1, 0xae, 0x3b, 0x76, 0x93, 0x84, 0xc9, 0xdf, 0x5c, 0x58, 0xfb, 0x79, 0x3c, 0xec, 0xe1, 0x27, 0x5b, 0x5a, 0x79, 0xf7, 0x5b, 0x4a, 0x1b, 0xf9, 0xdd, 0x68, 0x14, 0x52, 0x46, 0x16, 0x92, 0x8c, 0xc3, 0x5d, 0xc0, 0x30, 0x8a, 0x2a, 0x31, 0x97, 0x63, 0xb7, 0x82, 0xfd, 0x67, 0x47, 0x3b, 0xd7, 0x08, 0x16, 0xf7, 0x66, 0x52, 0x90, 0xc5, 0x8d, 0x71, 0xc1, 0xcd, 0xe0, 0x72, 0x0d, 0x37, 0xfd, 0x4e, 0x21, 0x48, 0x1f, 0x24, 0x29, 0xce, 0xf0, 0xc6, 0x43, 0xbf, 0x9f, 0x77, 0x34, 0x1d, 0x33, 0xf3, 0x5b, 0x1c, 0x1f, 0xb0, 0xe3, 0x87, 0x16, 0x64, 0x3c, 0x60, 0x20, 0xc7, 0xcb, 0xc7, 0xee, 0x9a, 0xe0, 0x1c, 0x6a, 0xe8, 0xe9, 0x68, 0x93, 0x8c, 0xe6, 0xf9, 0x88, 0xf3, 0x1d, 0x4d, 0xe2, 0x23, 0x0f, 0x32, 0x47, 0xfc, 0xaa, 0x2a, 0x3d, 0xbe, 0xc0, 0x14, 0x3b, 0xcc, 0xb8, 0x09, 0x06, 0xb0, 0x84, 0x85, 0x3b, 0x5e, 0xd3, 0xc7, 0x27, 0xbd, 0x87, 0x7a, 0xdf, 0x63, 0x69, 0x94, 0x8d, 0xa0, 0x1b, 0x7f, 0x09, 0xbf, 0x4f, 0x77, 0xa9, 0x88, 0x37, 0x33, 0x59, 0x0a, 0x3c, 0xc7, 0xee, 0x97, 0xf3, 0xc9, 0xb7, 0x0f, 0x4d, 0xb2, 0x55, 0x62, 0x0e, 0x88, 0xcd, 0x50, 0x80, 0xba, 0xdc, 0x73, 0x68, 0x4c, 0x8b, 0x80, 0x39, 0x33, 0x02, 0xca, 0x88, 0x03, 0xa1, 0x07, 0xc0, 0xc7, 0x4d, 0x57, 0x17, 0x30, 0x08, 0x82, 0xc0, 0xf3, 0xc5, 0x81, 0x62, 0x6c, 0x7a, 0x41, 0xca, 0x87, 0x76, 0xa3, 0xdd, 0xe0, 0xf5, 0xc7, 0xd0, 0x29, 0xf2, 0x8a, 0x9b, 0xcd, 0x3c, 0x4d, 0xaa, 0xd2, 0xcc, 0xf9, 0xd6, 0x04, 0x56, 0x3f, 0x95, 0x50, 0x1e, 0x25, 0x6d, 0x6e, 0x0d, 0xbe, 0xaf, 0xc3, 0x04, 0x38, 0x61, 0x85, 0x70, 0x1d, 0x7c, 0x20, 0x1f, 0xd2, 0x58, 0xd8, 0x52, 0x64, 0x64, 0xb0, 0x13, 0x83, 0x1a, 0x8b, 0xc8, 0xcf, 0x32, 0x92, 0x09, 0x53, 0x16, 0xd5, 0xaf, 0x4f, 0x97, 0x35, 0x2d, 0x3b, 0xde, 0x81, 0x24, 0x08, 0xa5, 0xdf, 0x31, 0xa9, 0xa7, 0x6e, 0x0a, 0xd2, 0x54, 0x29, 0xc9, 0x00, 0xca, 0x0f, 0x87, 0xb9, 0x01, 0x81, 0x2d, 0x15, 0x45, 0xeb, 0x87, 0x7d, 0xea, 0xa6, 0x9a, 0xb3, 0x3b, 0x1d, 0x38, 0x12, 0xb3, 0x2f, 0xd1, 0x18, 0x70, 0xd5, 0x8c, 0x21, 0xe4, 0x05, 0x96, 0x75, 0xce, 0xd6, 0xba, 0x85, 0x68, 0xe4, 0x33, 0x72, 0xe2, 0xf6, 0xbe, 0xcf, 0x10, 0xde, 0xf3, 0xa8, 0x60, 0xa1, 0xd4, 0xc3, 0x0e, 0xd8, 0xa7, 0x25, 0x9b, 0x56, 0x01, 0xd8, 0x7b, 0x0b, 0x24, 0xec, 0x0e, 0x28, 0x8a, 0xbc, 0xd1, 0x84, 0xc2, 0x73, 0xd6, 0x3f, 0x7b, 0xce, 0x71, 0xa5, 0xdf, 0x23, 0x35, 0x55, 0x22, 0xa2, 0x1e, 0xa2, 0x5a, 0xdb, 0x10, 0x39, 0x91, 0x80, 0x80, 0x04, 0x18, 0x6c, 0x71, 0x4f, 0x1f, 0xe5, 0xa3, 0x2a, 0x83, 0x1e, 0x07, 0x0e, 0xe7, 0x00, 0x75, 0xc3, 0x06, 0x2a, 0xa1, 0x80, 0x47, 0x37, 0x4c, 0x55, 0x93, 0x3f, 0xb7, 0xc6, 0x63, 0xa0, 0x5d, 0xb9, 0x1d, 0xfe, 0xe1, 0x92, 0xa0, 0x88, 0x46, 0x9c, 0x1d, 0x7d, 0x5e, 0xab, 0x2a, 0xef, 0x85, 0xff, 0x11, 0xc8, 0x8f, 0x6c, 0x6e, 0x0a, 0xfe, 0xb8, 0xf9, 0x5b, 0x78, 0x45, 0xa0, 0xc0, 0x79, 0xef, 0xd9, 0xa9, 0x46, 0x38, 0x36, 0x2e, 0x22, 0xa3, 0x39, 0x98, 0xc3, 0x5d, 0x6b, 0x23, 0x07, 0x22, 0xa8, 0x02, 0xe4, 0x5f, 0xbd, 0xa4, 0x9d, 0x94, 0x35, 0x36, 0x3c, 0xfd, 0x6f, 0x69, 0x3c, 0x71, 0xf4, 0x75, 0x86, 0x8a, 0x08, 0x5e, 0x9f, 0x06, 0x7f, 0x75, 0x1f, 0x6d, 0xd2, 0x23, 0x65, 0xf4, 0x72, 0xe2, 0x89, 0xa2, 0x5c, 0x8c, 0x92, 0xb1, 0xee, 0xd8, 0xe9, 0x37, 0xf9, 0x21, 0x0e, 0x06, 0x17, 0x6a, 0x8a, 0xd0, 0x3f, 0xa0, 0x25, 0x8f, 0x96, 0x1e, 0x58, 0x23, 0x88, 0x77, 0x05, 0x3d, 0x18, 0x6f, 0x66, 0x7d, 0x74, 0x4a, 0x44, 0xd7, 0xcd, 0x4a, 0x69, 0x3b, 0x65, 0x73, 0x57, 0x75, 0xea, 0x91, 0x3a, 0x52, 0x02, 0x7c, 0x1c, 0x04, 0x27, 0x9b, 0x58, 0xc7, 0xb5, 0xa7, 0x51, 0xc5, 0x41, 0xb1, 0x63, 0x37, 0x2d, 0x67, 0x1a, 0xce, 0x79, 0x93, 0xa2, 0x51, 0xdc, 0xe4, 0x7f, 0x87, 0x14, 0xf1, 0x7e, 0x57, 0x7a, 0x7b, 0xec, 0x2e, 0xd9, 0xf2, 0x05, 0xa1, 0x80, 0x3b, 0xaf, 0x54, 0x96, 0xb1, 0x69, 0x1a, 0xae, 0x6a, 0x7e, 0x5d, 0x9b, 0xbb, 0x7e, 0xc1, 0x86, 0xfe, 0xee, 0x04, 0x3e, 0x92, 0x3f, 0x29, 0xce, 0x24, 0xfd, 0xd5, 0x55, 0x2d, 0x49, 0xf9, 0x12, 0xbc, 0x89, 0xb1, 0xbf, 0x76, 0x5e, 0x6c, 0x20, 0xdb, 0xd7, 0x4e, 0xdb, 0xcb, 0xe4, 0xd2, 0x8a, 0x48, 0x0d, 0xb4, 0x0f, 0x7d, 0x63, 0x0e, 0x27, 0xff, 0xb7, 0xc1, 0x43, 0x54, 0x0b, 0x16, 0x93, 0xb2, 0x46, 0xa5, 0x63, 0x08, 0x2c, 0x76, 0xaa, 0x43, 0x8c, 0x67, 0xe0, 0xca, 0xbb, 0xcd, 0x11, 0x4a, 0x42, 0x5e, 0x30, 0xb9, 0xd4, 0x4f, 0xad, 0x95, 0x83, 0xb9, 0x49, 0x6d, 0x33, 0x41, 0x2a, 0xa3, 0x4e, 0xf8, 0x2a, 0x70, 0xb9, 0x80, 0x75, 0x28, 0x07, 0x71, 0x53, 0xc0, 0xed, 0xfa, 0x42, 0x8d, 0xf6, 0xcc, 0x48, 0x4e, 0x78, 0x33, 0x87, 0x6d, 0xc7, 0x86, 0x12, 0x82, 0xa8, 0xc2, 0xff, 0x19, 0x09, 0x72, 0xbe, 0xb5, 0xef, 0xd2, 0xa9, 0x15, 0xaf, 0x33, 0xdb, 0xb5, 0x61, 0xa1, 0x46, 0x98, 0x92, 0xc4, 0x00, 0x45, 0x39, 0x04, 0xde, 0x10, 0xec, 0xf0, 0x44, 0x9a, 0x54, 0xe1, 0x3b, 0x9b, 0xdf, 0xda, 0xc4, 0xdf, 0xb4, 0xb3, 0x6d, 0x8f, 0xec, 0x77, 0x21, 0xb2, 0xff, 0x0a, 0x44, 0xf3, 0x7c, 0x0f, 0x00, 0xa5, 0xfe, 0x08, 0xd9, 0x04, 0x5b, 0xbf, 0x88, 0xbe, 0x1e, 0xe6, 0x06, 0xb2, 0x38, 0xfa, 0xe7, 0xf7, 0xf2, 0x6d, 0xe9, 0x20, 0x26, 0x03, 0xcd, 0xbe, 0xaf, 0x7d, 0x65, 0x27, 0x1e, 0x75, 0xef, 0x76, 0xae, 0x89, 0xa1, 0xd3, 0x7b, 0xbb, 0x85, 0xf5, 0xee, 0x18, 0x87, 0xe4, 0x7c, 0x98, 0xcd, 0x04, 0x90, 0x46, 0x46, 0x4f, 0xc5, 0xa0, 0x86, 0xe2, 0x59, 0x41, 0xd1, 0xbb, 0xdf, 0xbd, 0x75, 0xc1, 0x33, 0xcd, 0x5d, 0x04, 0xb3, 0xac, 0xe4, 0x47, 0xac, 0xc0, 0xe7, 0xbc, 0x13, 0x7d, 0x1e, 0x0e, 0x76, 0x87, 0xac, 0xa4, 0x31, 0x16, 0xf4, 0x25, 0xe5, 0x9f, 0xaf, 0x37, 0x26, 0xb1, 0x3b, 0x8d, 0x74, 0x1d, 0x36, 0x20, 0x6d, 0x59, 0x4c, 0xbc, 0x40, 0x26, 0x4d, 0xbf, 0x65, 0x71, 0x83, 0x1e, 0x8c, 0x77, 0x42, 0xa8, 0xd3, 0x2d, 0xc0, 0x8f, 0x3b, 0xdf, 0x27, 0x24, 0x5d, 0x17, 0xe9, 0xe2, 0x59, 0xc0, 0x54, 0xae, 0x10, 0x8b, 0x66, 0x5d, 0x93, 0x92, 0xe2, 0x77, 0xda, 0x3c, 0xa3, 0x3a, 0xba, 0x60, 0x31, 0xe2, 0x11, 0xad, 0x92, 0x28, 0x44, 0x49, 0x63, 0x09, 0xeb, 0xb8, 0x27, 0xc8, 0xca, 0x00, 0xde, 0x36, 0x04, 0x0a, 0xda, 0x31, 0x8b, 0x4c, 0xce, 0x6b, 0xdb, 0xa5, 0x28, 0x6d, 0xe8, 0x88, 0xa0, 0xdb, 0x54, 0x5d, 0x11, 0xf9, 0xe6, 0x24, 0x88, 0x6e, 0x38, 0x5c, 0x9b, 0x48, 0xaf, 0x23, 0xfd, 0x41, 0xb0, 0x9e, 0x4f, 0x40, 0x11, 0x9b, 0x38, 0x23, 0xce, 0x75, 0xb7, 0xbc, 0xfe, 0x38, 0xb8, 0x19, 0x05, 0x06, 0xe6, 0x09, 0x0a, 0xba, 0xc1, 0xdb, 0xac, 0xca, 0xf0, 0x69, 0xf0, 0x72, 0xd8, 0x56, 0x7e, 0x0f, 0x6d, 0x93, 0x0e, 0xc9, 0x48, 0x28, 0x1d, 0x74, 0xfb, 0x31, 0xe4, 0xb8, 0xa1, 0x26, 0x8a, 0x70, 0xb9, 0x60, 0x99, 0x51, 0x34, 0xd9, 0xaf, 0xcc, 0xcc, 0x34, 0x76, 0x35, 0x98, 0xfd, 0xd5, 0x24, 0xdd, 0x31, 0x68, 0x1c, 0x28, 0x01, 0x2e, 0x6a, 0x99, 0xd3, 0x82, 0x50, 0x82, 0x8a, 0x4d, 0x63, 0x31, 0x07, 0x79, 0x32, 0x09, 0xef, 0xa9, 0x28, 0xd8, 0xaf, 0x27, 0xb4, 0x64, 0xbe, 0x1d, 0xa6, 0x47, 0x22, 0x09, 0xdd, 0xfd, 0x36, 0x6b, 0x1f, 0x3c, 0xaa, 0xc0, 0x48, 0x83, 0xcb, 0xb4, 0xa7, 0xf6, 0x05, 0x94, 0xa5, 0x69, 0xa6, 0x02, 0xa7, 0xbb, 0xe4, 0xec, 0x36, 0x65, 0x22, 0xbf, 0x5e, 0x52, 0x6f, 0xd7, 0x53, 0xf2, 0x50, 0x3b, 0x5b, 0x8a, 0xbf, 0x87, 0xe7, 0xce, 0x73, 0x29, 0x03, 0xb1, 0x62, 0xd0, 0xf1, 0x7c, 0x85, 0x22, 0x11, 0x1d, 0xdb, 0xae, 0x05, 0xc2, 0xb0, 0x21, 0x11, 0xa7, 0x1f, 0xbc, 0xc8, 0x2c, 0xd6, 0x05, 0xe5, 0x2b, 0x19, 0xbd, 0x77, 0x88, 0x0a, 0x13, 0x41, 0x0a, 0x27, 0x17, 0x60, 0x69, 0x14, 0x71, 0x2e, 0xa8, 0x9b, 0x53, 0x67, 0xa4, 0xf1, 0xac, 0x8a, 0xee, 0x3a, 0x9f, 0x82, 0xd6, 0x50, 0x33, 0x86, 0xc8, 0xc0, 0x4c, 0x3e, 0xdc, 0x16, 0xda, 0x27, 0xa8, 0x5b, 0x50, 0x38, 0x59, 0xdb, 0x58, 0xc6, 0x02, 0x2c, 0xc4, 0xa5, 0x33, 0x6b, 0xc8, 0x90, 0xce, 0xc9, 0x67, 0xca, 0x16, 0x46, 0x2c, 0x06, 0x09, 0xbd, 0x1a, 0x85, 0xf0, 0x21, 0xe5, 0x7e, 0x34, 0x06, 0x63, 0xc2, 0x73, 0x63, 0x3d, 0xa0, 0xd3, 0x96, 0xea, 0x06, 0x96, 0xa8, 0xde, 0xea, 0xef, 0xd3, 0xfe, 0xe8, 0x14, 0x41, 0x58, 0x2d, 0x95, 0x17, 0x11, 0x93, 0xec, 0xb2, 0x9e, 0x0d, 0x55, 0x30, 0x37, 0x46, 0xe0, 0x33, 0x89, 0x85, 0xc4, 0xe1, 0xac, 0xd4, 0xf6, 0x30, 0x54, 0x61, 0xfa, 0x60, 0x4b, 0x24, 0xfa, 0xc9, 0x1f, 0xc2, 0x15, 0xd6, 0x18, 0xb2, 0xf9, 0x52, 0x6c, 0x9e, 0xb4, 0xe2, 0xb6, 0x0c, 0xc7, 0xd3, 0xa5, 0x3d, 0x7c, 0x16, 0xf1, 0x55, 0x7a, 0x89, 0x94, 0xbd, 0x97, 0x79, 0x36, 0xc6, 0xed, 0x64, 0xe9, 0x8f, 0x30, 0x03, 0x16, 0x28, 0x3f, 0x87, 0xb7, 0xf7, 0xf8, 0x24, 0xc7, 0x5b, 0x51, 0xcc, 0xf7, 0x90, 0xa4, 0x3d, 0xa3, 0xd3, 0x4b, 0x3d, 0x04, 0xc6, 0x6d, 0x24, 0xa7, 0x15, 0x17, 0x9c, 0x1e, 0x5a, 0x8f, 0xa5, 0xf5, 0x3e, 0xe5, 0xdc, 0xe8, 0xe1, 0xca, 0xfc, 0x52, 0x7d, 0xa5, 0xa5, 0xe9, 0x46, 0xe4, 0x5c, 0xa9, 0x94, 0x90, 0xd4, 0x0e, 0x43, 0x25, 0x6b, 0x86, 0x5a, 0xa0, 0xf8, 0x26, 0xec, 0xd9, 0xc4, 0x9c, 0x3c, 0x13, 0xd6, 0x65, 0x24, 0xd2, 0x74, 0x40, 0xb8, 0xed, 0xe6, 0xe2, 0x26, 0xe3, 0x7d, 0xeb ],
- const [ 0x02, 0x33, 0xe1, 0xcb, 0x20, 0x16, 0xc8, 0xa4, 0x26, 0x8a, 0x16, 0xfe, 0x8d, 0x3a, 0x98, 0x01, 0x28, 0xba, 0x62, 0x02, 0x4d, 0x1b, 0x13, 0xb1, 0x35, 0xbd, 0x5a, 0x94, 0xa5, 0x65, 0xb9, 0xb4, 0xce, 0x8f, 0x89, 0x96, 0x73, 0x06, 0x3f, 0x6c, 0x49, 0xb1, 0xed, 0x8d, 0xa3, 0xb0, 0x0c, 0x23, 0x4e, 0xa8, 0x78, 0x23, 0xba, 0x5a, 0xbc, 0x83, 0x5b, 0x7b, 0x90, 0xa7, 0x4f, 0xbf, 0xa0, 0x1c, 0x41, 0x38, 0x8f, 0x88, 0x8d, 0xde, 0x3c, 0xe1, 0xa5, 0x6f, 0x44, 0xde, 0xb3, 0x79, 0xc8, 0xab, 0x80, 0xb4, 0x70, 0xe1, 0x94, 0x96, 0xaf, 0xb5, 0x9f, 0x22, 0x49, 0x70, 0x17, 0x01, 0x13, 0x1f, 0x23, 0xd3, 0xfa, 0x8b, 0xb8, 0xc7, 0x47, 0x6b, 0x01, 0x69, 0x22, 0xd9, 0x05, 0xbc, 0x54, 0x03, 0x84, 0x89, 0x51, 0x23, 0x21, 0xf6, 0x75, 0xb1, 0xc7, 0x5a, 0x8e, 0xd6, 0x45, 0x50, 0x9b, 0x25, 0x3b, 0x0b, 0xd3, 0x86, 0x3a, 0xe9, 0xe9, 0x72, 0x27, 0x4a, 0x8f, 0x66, 0xe0, 0xa2, 0x39, 0x91, 0x22, 0xcd, 0x23, 0xd0, 0xab, 0xa3, 0x95, 0xdd, 0x9b, 0xcd, 0x66, 0xc4, 0x20, 0xd7, 0xbf, 0x96, 0x52, 0x85, 0x21, 0x60, 0x5c, 0x6b, 0xa9, 0x5e, 0xdd, 0xb8, 0x93, 0x6d, 0x8e, 0x53, 0xfe, 0xbf, 0x24, 0x29, 0xee, 0xd2, 0x78, 0xc5, 0x97, 0xa3, 0xe5, 0x21, 0xd9, 0x1f, 0xf1, 0xbb, 0x07, 0xda, 0x30, 0xec, 0xec, 0x03, 0x66, 0x75, 0x10, 0x98, 0xec, 0x5b, 0x37, 0xd6, 0x55, 0xf6, 0x2b, 0xf4, 0x50, 0x44, 0xbb, 0x10, 0xd0, 0x83, 0x04, 0x6a, 0x6b, 0xfe, 0xef, 0xd0, 0x00, 0x27, 0xfb, 0x59, 0x9d, 0xe6, 0x3d, 0x56, 0xa0, 0x31, 0xa5, 0x86, 0x1c, 0xdd, 0x82, 0x89, 0x7e, 0xb3, 0x48, 0x97, 0x70, 0xc7, 0x91, 0x72, 0xfd, 0x05, 0x63, 0x99, 0xf6, 0x0d, 0xb1, 0xbf, 0x95, 0x41, 0x24, 0x7b, 0x61, 0x1b, 0x1b, 0x41, 0x51, 0xc5, 0xf0, 0x91, 0x34, 0xe3, 0x7d, 0x6e, 0x50, 0xb3, 0xde, 0x12, 0x4a, 0x59, 0x79, 0xe0, 0x46, 0x74, 0x3c, 0x9a, 0x4e, 0xf5, 0x26, 0xd4, 0xf8, 0x31, 0x09, 0xa9, 0x43, 0x35, 0x8e, 0xac, 0xc3, 0x59, 0x79, 0x21, 0xfe, 0x18, 0x2e, 0x6e, 0x15, 0x1e, 0x74, 0xcc, 0xa7, 0xa3, 0x7a, 0x42, 0xf2, 0xf8, 0x18, 0xd4, 0x3b, 0x5f, 0x56, 0xf8, 0x70, 0x20, 0x32, 0x49, 0x0d, 0xd9, 0x9e, 0x7f, 0x3c, 0x16, 0xc9, 0x9f, 0x40, 0x21, 0x9f, 0x6f, 0x13, 0x1c, 0x93, 0x2d, 0x4e, 0x4c, 0x9c, 0x80, 0x4a, 0xb8, 0x7d, 0xaf, 0x85, 0xf3, 0x4a, 0x11, 0x47, 0x36, 0x28, 0xc5, 0x85, 0xb1, 0x54, 0xa2, 0x05, 0x23, 0x67, 0x71, 0xc3, 0xa9, 0xd8, 0x5a, 0x94, 0xd3, 0xc2, 0x9d, 0x09, 0xfd, 0xe7, 0x83, 0x96, 0xdd, 0xf6, 0x93, 0xf3, 0x58, 0x09, 0x08, 0xc3, 0x9a, 0x72, 0x83, 0x74, 0x65, 0xb7, 0xfe, 0x66, 0xa9, 0xdb, 0x01, 0x4f, 0x56, 0xdf, 0x18, 0xde, 0x6e, 0x89, 0x84, 0x9e, 0x5e, 0x64, 0x31, 0x1e, 0x8e, 0x08, 0xe8, 0x4f, 0x37, 0x9b, 0xc6, 0x2d, 0x75, 0x98, 0xed, 0xa1, 0x9d, 0xcf, 0x79, 0xa6, 0xd0, 0xae, 0xb6, 0xac, 0xd0, 0xbe, 0x90, 0x39, 0x13, 0x70, 0x4a, 0xd6, 0x16, 0x1a, 0x73, 0x29, 0xf4, 0x3d, 0x16, 0x5f, 0x37, 0x09, 0x32, 0xcd, 0xee, 0x23, 0x69, 0xd6, 0x00, 0xa5, 0xfc, 0x0f, 0xbf, 0x67, 0xf7, 0xa1, 0xc0, 0x7d, 0xa9, 0xef, 0xeb, 0x00, 0x57, 0x79, 0xce, 0x12, 0x32, 0x00, 0x36, 0x1c, 0x85, 0xec, 0x01, 0x5a, 0x33, 0xea, 0x2e, 0x9a, 0x61, 0xd9, 0x36, 0x40, 0x70, 0xe7, 0x9f, 0x8e, 0x2e, 0xf7, 0xce, 0x22, 0x4d, 0x47, 0x1d, 0xc0, 0x14, 0x4f, 0x2d, 0x52, 0x54, 0xec, 0x7e, 0x2d, 0x9e, 0xbd, 0x3c, 0x96, 0xb3, 0xcd, 0x5c, 0x85, 0x3c, 0x73, 0xe8, 0xa9, 0xbb, 0x77, 0x97, 0xab, 0xc2, 0x76, 0xa1, 0xb7, 0x63, 0x88, 0xd1, 0x39, 0xe7, 0x1f, 0xdc, 0xe4, 0xc2, 0x33, 0xf1, 0xf9, 0xc7, 0x9c, 0x91, 0xc6, 0x99, 0xbf, 0xa1, 0x6d, 0x62, 0x6c, 0xbe, 0xe6, 0xc7, 0x07, 0xd0, 0x47, 0x1b, 0xe6, 0xe2, 0x43, 0xd2, 0xfb, 0x31, 0xf1, 0x39, 0xb3, 0x82, 0xcf, 0x65, 0x1d, 0xb9, 0x07, 0x69, 0x4f, 0xa8, 0xf1, 0xcd, 0x06, 0x25, 0xd8, 0x3b, 0x8c, 0x5f, 0x01, 0x7a, 0xdf, 0x72, 0xe9, 0xa1, 0x0f, 0x38, 0xcf, 0x84, 0xe8, 0x62, 0x72, 0x73, 0xd1, 0xc8, 0x1c, 0x24, 0xf4, 0xfe, 0xdf, 0xed, 0x9f, 0x28, 0x1f, 0x36, 0xea, 0x0f, 0x51, 0x2f, 0x9b, 0x74, 0x01, 0xbe, 0x46, 0xa4, 0x1a, 0xbc, 0xb9, 0x4c, 0x62, 0x60, 0x97, 0x8f, 0x44, 0xfb, 0x42, 0x56, 0xd2, 0xe6, 0xfe, 0xe7, 0x0a, 0xb9, 0x54, 0xba, 0x58, 0xbe, 0xb5, 0x87, 0x5d, 0xa6, 0x60, 0xa4, 0xef, 0x7a, 0x86, 0x8e, 0x61, 0xd4, 0xab, 0xc6, 0x04, 0x4e, 0x4f, 0xde, 0xed, 0x3b, 0xce, 0xd3, 0xf9, 0x95, 0x85, 0x9d, 0x0f, 0x37, 0x36, 0x05, 0xa5, 0x4c, 0xad, 0xb7, 0x86, 0x08, 0xa4, 0x98, 0xd2, 0x96, 0xe5, 0x59, 0x46, 0x51, 0xae, 0x4d, 0xbd, 0x36, 0x59, 0x77, 0xf7, 0x99, 0x3c, 0xe8, 0x9a, 0x18, 0xcf, 0x48, 0x76, 0xce, 0x0c, 0xb2, 0x0d, 0xc9, 0x1c, 0xc5, 0x53, 0xbd, 0x2f, 0xf7, 0xb2, 0xf9, 0xac, 0x2d, 0x51, 0x9b, 0x8a, 0x89, 0x96, 0x00, 0xfd, 0x83, 0xea, 0x7f, 0x56, 0x3c, 0xbc, 0x57, 0x24, 0x0e, 0xc8, 0xe5, 0xa0, 0x68, 0x99, 0x1b, 0x48, 0xd9, 0x4c, 0x2d, 0xc9, 0x6a, 0x98, 0x8d, 0x22, 0x31, 0x0b, 0x1a, 0x07, 0x23, 0x96, 0x95, 0x83, 0x2a, 0x4c, 0x54, 0xe2, 0x78, 0x67, 0x3a, 0xce, 0x1a, 0x8c, 0xe6, 0xb8, 0xd0, 0x50, 0x2b, 0x7a, 0x1c, 0xfa, 0xc0, 0x3a, 0x99, 0x8a, 0x39, 0x91, 0x8e, 0xfb, 0x36, 0xec, 0xc3, 0xc6, 0xdb, 0x33, 0x93, 0xa7, 0x80, 0xa9, 0x43, 0xa3, 0xa9, 0x14, 0x92, 0x4a, 0x38, 0x1d, 0x91, 0x3a, 0xe1, 0xf9, 0xb5, 0xe4, 0xdf, 0x49, 0x2b, 0x93, 0xe5, 0x3f, 0x6b, 0xaa, 0x58, 0x03, 0x10, 0x2c, 0xbb, 0x55, 0xe7, 0x82, 0x6b, 0x73, 0x46, 0x79, 0x8c, 0x3d, 0x9f, 0x8b, 0x43, 0x97, 0x54, 0x5f, 0x25, 0x0f, 0xcd, 0x93, 0xf0, 0xc0, 0xc9, 0xb8, 0x79, 0x75, 0xf1, 0x9e, 0xe6, 0x12, 0xb3, 0xd2, 0x1d, 0x30, 0x4d, 0x66, 0x7d, 0x08, 0x28, 0xf0, 0xcb, 0x92, 0x68, 0xd5, 0x6f, 0xee, 0xc1, 0xc8, 0xe0, 0x02, 0x8c, 0x8d, 0x5d, 0x65, 0x1a, 0x03, 0xde, 0x7b, 0x48, 0x61, 0x4a, 0xe2, 0x53, 0xc0, 0xea, 0x0d, 0xee, 0xda, 0x1e, 0x2f, 0x92, 0x11, 0x4e, 0x5b, 0x16, 0xb3, 0x24, 0xe9, 0x7f, 0x7c, 0xf8, 0x1b, 0x19, 0x5c, 0x8c, 0x01, 0xc7, 0x7b, 0xfa, 0x99, 0x97, 0x7b, 0xea, 0x3b, 0x99, 0xfd, 0x08, 0x34, 0xf2, 0x66, 0xb6, 0xb2, 0x2c, 0xe3, 0xfd, 0xe0, 0xd0, 0xaa, 0xca, 0x51, 0x37, 0x83, 0x57, 0xa2, 0x9d, 0x87, 0xe7, 0x5b, 0x77, 0x28, 0xb6, 0x17, 0x06, 0x72, 0x30, 0xe5, 0x2d, 0x91, 0x61, 0xed, 0x80, 0x92, 0xad, 0x57, 0x9d, 0x6e, 0xc1, 0x68, 0xbf, 0x44, 0xc9, 0xee, 0x90, 0xe6, 0xe3, 0xdf, 0x3f, 0x97, 0xd4, 0x3d, 0xd3, 0x13, 0xfb, 0x3c, 0xbf, 0xd0, 0x83, 0xa7, 0xb6, 0x84, 0xdc, 0x80, 0xc0, 0xe7, 0x6b, 0xe7, 0x8e, 0xba, 0x80, 0x3c, 0x0a, 0x08, 0x89, 0x88, 0x33, 0xac, 0x86, 0x19, 0x28, 0x13, 0xbd, 0x6d, 0x82, 0x43, 0xaf, 0x52, 0xe7, 0x1c, 0x4a, 0x4a, 0xdd, 0xde, 0x60, 0x34, 0xdb, 0xec, 0x58, 0x29, 0xa6, 0xd0, 0x24, 0xa5, 0xdb, 0x7e, 0x73, 0xe7, 0xc7, 0xdd, 0x27, 0x9a, 0x7f, 0x83, 0x09, 0xb4, 0x2d, 0xc0, 0xbb, 0x9f, 0xa9, 0xdf, 0xef, 0x97, 0x49, 0xa8, 0xd7, 0x53, 0xf9, 0x2a, 0xdc, 0xe7, 0x8e, 0xb7, 0x93, 0xe9, 0x57, 0x2f, 0xed, 0xd2, 0xf5, 0x82, 0xae, 0xa8, 0x6d, 0x70, 0x20, 0xda, 0x7c, 0x93, 0x08, 0x6c, 0x2b, 0xa0, 0xd9, 0x53, 0xa2, 0xea, 0x28, 0x23, 0x41, 0x27, 0x60, 0xe7, 0xed, 0x77, 0xb7, 0x50, 0xa8, 0xa2, 0x60, 0x13, 0x65, 0xa1, 0x02, 0x8c, 0x1a, 0x61, 0x6a, 0xa7, 0x16, 0xc3, 0x7d, 0x00, 0x95, 0xe7, 0x70, 0x49, 0x92, 0xaa, 0x3b, 0xed, 0xdc, 0x6d, 0x4a, 0xf2, 0x6c, 0x19, 0x76, 0x24, 0xf6, 0x5f, 0x35, 0x70, 0xbe, 0x45, 0x0d, 0x8e, 0xad, 0xde, 0x4f, 0xe3, 0xa4, 0x58, 0x01, 0xa5, 0x10, 0x3d, 0x1c, 0x40, 0xbf, 0xf2, 0xf8, 0xf8, 0xf2, 0x84, 0x04, 0xd0, 0xb3, 0xa3, 0xba, 0xab, 0x68, 0xef, 0xd2, 0xb2, 0xa9, 0x73, 0xb6, 0xf5, 0x4f, 0x6f, 0x37, 0x55, 0xcd, 0x5b, 0x7e, 0xa1, 0xc4, 0x28, 0x45, 0xff, 0xd1, 0xc9, 0x47, 0x8e, 0xaa, 0xf2, 0xf4, 0x49, 0x69, 0x20, 0x6a, 0x2f, 0x27, 0xd9, 0xa1, 0xa1, 0xcd, 0x35, 0xe5, 0x0b, 0x27, 0x9d, 0x8a, 0xc6, 0x3a, 0xd3, 0xdb, 0x3d, 0xd8, 0x32, 0x53, 0x4f, 0x71, 0x38, 0x10, 0xf5, 0x2c, 0x41, 0x84, 0x25, 0x36, 0x95, 0x6e, 0xf6, 0x5a, 0xa5, 0x08, 0x04, 0xd3, 0x92, 0x82, 0x16, 0x5e, 0xef, 0xb0, 0xfe, 0x93, 0xc8, 0x00, 0xc1, 0x74, 0xe3, 0xae, 0xf8, 0x47, 0x45, 0x3b, 0x76, 0xa1, 0xf8, 0x1b, 0x2b, 0xc4, 0x0c, 0xae, 0x48, 0x2a, 0xdc, 0x71, 0xa4, 0x62, 0x93, 0x76, 0x5f, 0x1b, 0xee, 0x11, 0xc5, 0x7f, 0x43, 0xd5, 0x75, 0xc2, 0xc2, 0xbe, 0xc2, 0xfa, 0xfb, 0xb0, 0x59, 0x31, 0xa0, 0x20, 0x24, 0xb8, 0x8c, 0x11, 0x6f, 0xbf, 0x05, 0x43, 0x4a, 0x23, 0x3e, 0xa7, 0x2e, 0x87, 0x20, 0x15, 0xe3, 0xa6, 0x4a, 0x41, 0xa0, 0xe7, 0x57, 0xec, 0x75, 0x33, 0x5f, 0x57, 0xe6, 0x03, 0xc0, 0xfd, 0xd9, 0xbd, 0x1e, 0x81, 0xb2, 0x40, 0xa8, 0xe6, 0xbc, 0xbd, 0x9d, 0xfe, 0xcb, 0xca, 0x0f, 0x25, 0x1f, 0xb1, 0xe8, 0x2f, 0x8c, 0x0e, 0x2a, 0x9e, 0xd8, 0x99, 0x7b, 0x18, 0x65, 0x40, 0xe0, 0x19, 0x0f, 0x79, 0xc9, 0xe6, 0x58, 0xd6, 0x4e, 0xc2, 0xc3, 0xd9, 0xb8, 0x63, 0x7d, 0x0b, 0x43, 0xa7, 0x42, 0x48, 0x22, 0x84, 0x7f, 0x5d, 0xc4, 0x3d, 0xb4, 0xd5, 0x56, 0xdc, 0x1d, 0x0f, 0x89, 0xdc, 0x91, 0x94, 0x95, 0x26, 0xaa, 0xa8, 0x7e, 0x3f, 0x26, 0x1f, 0x95, 0xbf, 0x8d, 0x72, 0x43, 0x05, 0x14, 0x12, 0x02, 0x29, 0xc2, 0xfc, 0xac, 0x32, 0xd1, 0x8e, 0xf8, 0x89, 0x57, 0x99, 0x41, 0xae, 0x26, 0xb7, 0x8a, 0x2a, 0xf0, 0xdf, 0xc0, 0xc5, 0xaf, 0x36, 0x3e, 0xf8, 0x43, 0x28, 0x97, 0xa5, 0x5d, 0xb8, 0x8f, 0x06, 0x9d, 0x14, 0x6a, 0xe4, 0xf7, 0x6d, 0x6a, 0x09, 0x5b, 0x05, 0x93, 0xf7, 0x95, 0x8a, 0xb1, 0xda, 0x72, 0xa2, 0x9c, 0xbc, 0x24, 0xc7, 0xbb, 0xf8, 0xe7, 0x55, 0xc7, 0xf1, 0xe5, 0xe1, 0xd1, 0x03, 0x57, 0xcd, 0x87, 0xba, 0xee, 0x19, 0xb3, 0x42, 0x71, 0x7c, 0x04, 0x1f, 0xa7, 0xb4, 0x11, 0x1e, 0x77, 0x1a, 0x9b, 0x8c, 0x4e, 0x79, 0x12, 0xa5, 0xc1, 0x20, 0x5b, 0x4f, 0x74, 0x36, 0xd1, 0x09, 0x3a, 0x4e, 0x8a, 0x1e, 0x7d, 0x3b, 0xdb, 0x1e, 0xe1, 0x26, 0x1e, 0x8e, 0x24, 0xde, 0xb2, 0xdf, 0x49, 0x6e, 0x44, 0x9d, 0xf5, 0xf5, 0x4d, 0xe9, 0x19, 0xb2, 0xdc, 0x29, 0xd1, 0x5f, 0x96, 0xfe, 0x8c, 0xc0, 0xfb, 0x77, 0x6e, 0x7b, 0xeb, 0x84, 0xf2, 0x2a, 0x68, 0xad, 0xd4, 0xaf, 0x9d, 0x03, 0x2e, 0xc7, 0x1f, 0x57, 0xe1, 0xe3, 0x74, 0xab, 0x36, 0x33, 0xd2, 0xe6, 0xc5, 0x03, 0x28, 0xcc, 0x96, 0x4a, 0x63, 0x2c, 0x87, 0x80, 0xea, 0x5b, 0xed, 0xb1, 0x6a, 0xe2, 0x7e, 0xd0, 0xd9, 0x74, 0x6f, 0x4d, 0xb5, 0x23, 0xd9, 0xe9, 0x8d, 0xd3, 0x61, 0xca, 0xc3, 0xee, 0x18, 0xca, 0x90, 0x59, 0xa0, 0x15, 0x48, 0xa7, 0x91, 0xf3, 0xe0, 0x8d, 0x1a, 0xe2, 0xad, 0x96, 0xec, 0xe8, 0x6e, 0x18, 0x53, 0x27, 0x8d, 0x67, 0xa6, 0xb2, 0xa2, 0x48, 0xe2, 0x9f, 0x39, 0xa9, 0x92, 0x5e, 0xd5, 0x8f, 0xf2, 0x49, 0x35, 0x4f, 0x53, 0x7b, 0xd5, 0x01, 0xc1, 0xe6, 0xb8, 0x32, 0xe4, 0xa0, 0x65, 0xd9, 0x24, 0x7e, 0x30, 0x8c, 0x10, 0xe4, 0xba, 0xf4, 0x01, 0xdb, 0xbb, 0x7f, 0xfa, 0x64, 0xff, 0x54, 0xd3, 0x0d, 0xaf, 0x8c, 0x97, 0xc1, 0xd2, 0x9f, 0x2a, 0xe4, 0x13, 0x1c, 0x2f, 0xa0, 0xc5, 0x9e, 0x28, 0x79, 0x24, 0xfb, 0xdf, 0x28, 0xde, 0xbe, 0x06, 0xa6, 0xd2, 0xd8, 0x1a, 0x87, 0x17, 0x92, 0x8d, 0x89, 0x40, 0xc6, 0x23, 0x6d, 0xde, 0x4f, 0x9d, 0x05, 0x47, 0xbe, 0x95, 0x8f, 0x96, 0x4e, 0xa9, 0x41, 0xf3, 0x1b, 0xdb, 0x25, 0x15, 0x8e, 0x38, 0x27, 0x04, 0x1c, 0xb8, 0x6d, 0x24, 0x30, 0x66, 0xe6, 0x6f, 0x65, 0xc0, 0x26, 0x02, 0xf9, 0x61, 0x71, 0xdb, 0x7f, 0xdd, 0x15, 0xe1, 0xd3, 0xed, 0xfd, 0x24, 0x53, 0xcc, 0x84, 0x67, 0x4c, 0xe0, 0x87, 0xdc, 0xb3, 0x9d, 0xbe, 0x2e, 0x16, 0xa7, 0x4c, 0xc4, 0xd1, 0x36, 0x94, 0x45, 0x85, 0xbf, 0x4f, 0x57, 0xc6, 0xd1, 0xdb, 0xad, 0x14, 0x3d, 0xd6, 0x40, 0x0d, 0x79, 0xec, 0xdc, 0xe0, 0x46, 0xed, 0xdf, 0x05, 0x91, 0x23, 0x3e, 0x2c, 0x97, 0xe2, 0xc8, 0x73, 0x4d, 0x60, 0xaf, 0xdb, 0xff, 0xc7, 0x44, 0xfd, 0x37, 0x89, 0x02, 0xf9, 0xe0, 0xf4, 0xce, 0xb0, 0xab, 0x06, 0x7d, 0x33, 0xb2, 0x82, 0x97, 0x7a, 0x5c, 0x43, 0x5a, 0x5a, 0x80, 0xd1, 0x02, 0xb1, 0xcd, 0x32, 0x48, 0xe4, 0x69, 0x03, 0x29, 0x8b, 0xd8, 0xc7, 0xe8, 0x6a, 0x20, 0x7e, 0x56, 0xa4, 0x2a, 0x7a, 0x51, 0x2b, 0x6c, 0x6e, 0x8b, 0x7b, 0xc5, 0xc8, 0x8d, 0x88, 0xa8, 0x40, 0xfb, 0xf4, 0x7d, 0xb1, 0x19, 0x86, 0x44, 0x28, 0x8e, 0xd8, 0x7c, 0x3b, 0x68, 0x4f, 0x43, 0x9d, 0x61, 0x50, 0xbe, 0xef, 0x60, 0xb1, 0xbb, 0xd8, 0x43, 0x6e, 0x95, 0x57, 0xdc, 0x9e, 0x58, 0x58, 0x39, 0xa5, 0x26, 0x86, 0x29, 0xaa, 0xda, 0x61, 0xfb, 0x4c, 0xea, 0x90, 0x89, 0x90, 0x92, 0x78, 0x76, 0x1e, 0x2f, 0x0d, 0xb3, 0xae, 0xe9, 0xe8, 0x48, 0xbd, 0x94, 0x9b, 0x51, 0x84, 0xd8, 0x41, 0x46, 0x2a, 0x90, 0x59, 0x80, 0x39, 0x71, 0xd4, 0xf9, 0x4f, 0xec, 0x6c, 0x54, 0x16, 0x55, 0x38, 0x1d, 0x75, 0x44, 0x7d, 0x51, 0x08, 0x3c, 0xc8, 0x21, 0xce, 0x8a, 0x39, 0xf3, 0x22, 0x70, 0x22, 0xaa, 0xed, 0x83, 0xd1, 0x27, 0x19, 0x52, 0xa9, 0x0f, 0x49, 0x48, 0x78, 0xcf, 0xc7, 0xd4, 0x04, 0xde, 0xbd, 0xc6, 0xe7, 0x42, 0xa9, 0xfd, 0x9d, 0x56, 0x0b, 0x3f, 0xdc, 0xca, 0x60, 0x68, 0x23, 0xeb, 0x54, 0xc7, 0x96, 0x25, 0x34, 0xc5, 0x09, 0xc6, 0xa2, 0xc7, 0x5b, 0x04, 0x8c, 0x56, 0x05, 0x42, 0x5f, 0x7e, 0xf2, 0x8f, 0x77, 0x73, 0x92, 0x70, 0xdb, 0x7b, 0x2a, 0xdf, 0x27, 0x07, 0x6e, 0x93, 0xc9, 0x23, 0x51, 0x82, 0x70, 0x11, 0x1c, 0xa5, 0xc2, 0x31, 0xbd, 0xfb, 0x4e, 0x25, 0x62, 0xd0, 0xc1, 0x31, 0x47, 0x3f, 0x5c, 0xe8, 0xcc, 0xf6, 0xa5, 0x05, 0xcb, 0x39, 0x5d, 0x97, 0x28, 0x2a, 0xb3, 0x61, 0xaa, 0x47, 0xb7, 0x80, 0x09, 0x34, 0x11, 0x4e, 0x48, 0xbb, 0xf3, 0x87, 0x44, 0x11, 0x4c, 0xaa, 0x8e, 0x5a, 0x3f, 0xa2, 0x76, 0x70, 0xd3, 0xa6, 0x68, 0xe0, 0xec, 0x5e, 0x7c, 0x36, 0x7a, 0x47, 0x48, 0x7b, 0xf0, 0x58, 0xf9, 0xfb, 0xf8, 0xe6, 0xa2, 0x4c, 0x64, 0xc5, 0xd3, 0x8b, 0x68, 0xb0, 0x6e, 0xe9, 0x07, 0xea, 0xb6, 0x66, 0xcc, 0x26, 0xa9, 0xdd, 0xba, 0xa5, 0x90, 0x41, 0x85, 0x9e, 0xd4, 0x26, 0x03, 0xe2, 0x13, 0x83, 0xdd, 0xc0, 0x73, 0xb6, 0x8a, 0x26, 0x36, 0xc8, 0x7e, 0x0a, 0x8f, 0xf3, 0x9e, 0x08, 0xb4, 0x61, 0xf8, 0x4d, 0x35, 0x37, 0xb1, 0xb3, 0x8c, 0xd2, 0x3e, 0x2d, 0xf5, 0x50, 0xd7, 0x66, 0x80, 0x53, 0x29, 0xa5, 0x64, 0x01, 0x4c, 0xf4, 0x96, 0x50, 0xf4, 0x81, 0x9a, 0x80, 0xeb, 0x44, 0x9a, 0xe9, 0xbf, 0xe2, 0xb5, 0xf6, 0xb8, 0xd2, 0x99, 0x72, 0x0c, 0xbe, 0x54, 0x02, 0x56, 0x2c, 0x67, 0xf3, 0x45, 0x5d, 0x1c, 0x36, 0x91, 0x75, 0x1a, 0xa9, 0x34, 0xdd, 0x37, 0x99, 0xd6, 0xe6, 0x8d, 0x84, 0x89, 0xaf, 0xd0, 0x23, 0xb6, 0x48, 0xdf, 0xa7, 0x57, 0x17, 0x98, 0x44, 0x67, 0x7b, 0xf1, 0xec, 0x97, 0xb0, 0x44, 0x5d, 0x43, 0xf3, 0xeb, 0x5d, 0xa4, 0xe6, 0x0d, 0x44, 0x47, 0x35, 0xb7, 0xbc, 0xbe, 0x7a, 0x2f, 0xc5, 0x95, 0x5e, 0x85, 0xfc, 0x88, 0x01, 0x6a, 0x1c, 0xf2, 0x9d, 0x45, 0xc5, 0x89, 0x66, 0x84, 0x7c, 0x49, 0xb4, 0x30, 0xf4, 0xae, 0x63, 0xc5, 0x8b, 0x26, 0x7a, 0x40, 0x18, 0xc6, 0x0c, 0x79, 0xe4, 0x3c, 0x5c, 0xb3, 0xf6, 0x05, 0x44, 0x72, 0x94, 0xe0, 0xd8, 0x8d, 0x06, 0x82, 0x46, 0x83, 0x9d, 0x8b, 0x01, 0x12, 0xf4, 0xb9, 0x1e, 0x06, 0x76, 0x5b, 0xfe, 0x50, 0x20, 0x09, 0x2d, 0x57, 0x88, 0x93, 0x8a, 0x93, 0x1f, 0x37, 0xa8, 0x57, 0xb3, 0x17, 0x75, 0xee, 0x38, 0xea, 0x19, 0xea, 0xc7, 0xf1, 0x21, 0xb9, 0xe7, 0x2c, 0xdd, 0x79, 0x0c, 0xcf, 0x06, 0x0d, 0x5d, 0xf0, 0xa4, 0x71, 0xba, 0x82, 0x2f, 0x4a, 0xfe, 0x86, 0xf5, 0xc2, 0x81, 0x80, 0xbb, 0x92, 0xe2, 0x28, 0xa7, 0x60, 0x03, 0x63, 0x5e, 0x4c, 0x54, 0x71, 0x69, 0xc6, 0x55, 0x68, 0xdd, 0xa2, 0x56, 0xe1, 0x3b, 0x6e, 0x81, 0xf1, 0x95, 0x03, 0x1b, 0x5b, 0xf2, 0x5a, 0x07, 0x03, 0xf4, 0xa1, 0x8c, 0xa6, 0xb8, 0x8e, 0x58, 0xc9, 0xfe, 0xf4, 0xc4, 0xef, 0x8a, 0x94, 0x59, 0x0f, 0xca, 0x35, 0x93, 0x45, 0xb8, 0xf7, 0xe6, 0xc8, 0x02, 0xe4, 0xff, 0x1c, 0x68, 0xc8, 0x4c, 0x89, 0x66, 0x42, 0xbe, 0xcb, 0x14, 0x1c, 0xce, 0x0b, 0x4a, 0xd8, 0xbe, 0x0e, 0x07, 0x8b, 0x21, 0xad, 0x14, 0xef, 0x9d, 0x85, 0xe4, 0xb3, 0xf0, 0xef, 0xbf, 0x15, 0x31, 0x33, 0x20, 0xb3, 0x58, 0xf8, 0x5b, 0x9e, 0x01, 0xff, 0x82, 0xb1, 0x6d, 0x11, 0x8a, 0x21, 0xca, 0x36, 0xaa, 0x54, 0xb4, 0x28, 0x04, 0xf7, 0xfb, 0x07, 0x87, 0x4b, 0xa7, 0x4e, 0x14, 0xbf, 0x39, 0x06 ],
- const [ 0x03, 0xd1, 0x46, 0x76, 0xac, 0x6a, 0xfd, 0x0e, 0xec, 0xd6, 0x7c, 0x8e, 0xbb, 0xb6, 0x2e, 0xbe, 0x95, 0x2d, 0xfc, 0xf9, 0x35, 0x95, 0x29, 0x84, 0xa1, 0x71, 0x7a, 0x1e, 0x66, 0xa3, 0x9b, 0xd8, 0x25, 0xe0, 0xbe, 0x27, 0x4e, 0x60, 0x85, 0x38, 0x2c, 0xda, 0x22, 0x83, 0x22, 0xaf, 0xbd, 0xa3, 0x34, 0x66, 0x15, 0x65, 0xc8, 0x58, 0x6b, 0x1f, 0xae, 0xac, 0x9c, 0x43, 0x5f, 0x86, 0x8d, 0x33, 0x82, 0x7c, 0xcb, 0x57, 0xb5, 0x4a, 0x73, 0x6e, 0x89, 0xc6, 0x50, 0x21, 0xce, 0x16, 0x44, 0xde, 0x12, 0x20, 0xe9, 0xe3, 0x64, 0x42, 0x77, 0x99, 0x5e, 0x43, 0xe9, 0x24, 0x62, 0x8a, 0x5b, 0x38, 0x23, 0x8e, 0xb7, 0x2e, 0x67, 0x8e, 0x90, 0x57, 0x0c, 0x82, 0x4e, 0x90, 0x49, 0x51, 0x8c, 0x16, 0x37, 0x44, 0xbe, 0x9c, 0x90, 0xbb, 0x17, 0x9b, 0xb6, 0x1f, 0xaa, 0xea, 0xf7, 0x17, 0xcf, 0x8e, 0x0f, 0xff, 0xc8, 0xd3, 0xee, 0x96, 0xa4, 0x9c, 0xbc, 0xf6, 0x64, 0xf7, 0x1b, 0xca, 0x5d, 0xf4, 0xac, 0xbb, 0xdd, 0xb8, 0xd4, 0x2b, 0x11, 0xcd, 0xc0, 0x26, 0x26, 0xbc, 0xa6, 0x95, 0xaf, 0xde, 0x4e, 0xb5, 0x47, 0x6f, 0xd2, 0xc8, 0x77, 0xe4, 0xa2, 0x0b, 0xda, 0x7e, 0xca, 0xe7, 0x7e, 0x20, 0x78, 0x6b, 0x8e, 0x5e, 0xb8, 0xfa, 0x2e, 0xd6, 0x83, 0x41, 0xa7, 0xc3, 0xf8, 0x6c, 0xc4, 0xcf, 0xe9, 0x9a, 0x7c, 0x29, 0x99, 0x8e, 0xd0, 0xd8, 0xc4, 0xa7, 0xf7, 0x4f, 0xe0, 0x12, 0xb9, 0x41, 0xa3, 0x3e, 0x19, 0xb6, 0xc5, 0x90, 0x36, 0x5f, 0x07, 0x59, 0x73, 0x26, 0x74, 0x05, 0xd6, 0x0a, 0xe7, 0x95, 0xae, 0x2a, 0xcd, 0x4f, 0x79, 0x1f, 0x2c, 0xb3, 0x04, 0x8f, 0xe5, 0xb2, 0xd4, 0xff, 0x36, 0x1b, 0xc5, 0xe9, 0x82, 0x56, 0xf1, 0x0f, 0x55, 0x54, 0xd3, 0x0e, 0xa3, 0xc6, 0xad, 0x36, 0x50, 0x8d, 0x26, 0x99, 0xf5, 0x72, 0x38, 0x62, 0xe2, 0x18, 0x49, 0x69, 0x5f, 0x2e, 0x98, 0x04, 0x38, 0xe9, 0xdb, 0x1f, 0x78, 0xb2, 0x27, 0x8f, 0x74, 0x1c, 0x0f, 0xa3, 0x0b, 0x18, 0x10, 0xfc, 0x2d, 0x6c, 0x2d, 0x9f, 0x9a, 0x61, 0xd6, 0x49, 0xec, 0xbc, 0x0e, 0x03, 0xd8, 0xf0, 0xcd, 0xf5, 0xb1, 0x92, 0xa3, 0x7f, 0x2d, 0x0d, 0x9f, 0x86, 0x6c, 0x97, 0x6f, 0x0c, 0x36, 0x64, 0xc8, 0x04, 0x85, 0x19, 0x09, 0x64, 0x43, 0x83, 0x1b, 0x7b, 0x54, 0x89, 0x9b, 0x85, 0xd7, 0x5f, 0x3b, 0x7d, 0xa9, 0xfd, 0x65, 0x32, 0x2b, 0xd0, 0x22, 0x9d, 0x46, 0xaf, 0x3b, 0x72, 0xac, 0x10, 0x9e, 0xf5, 0x60, 0x7c, 0x02, 0x0f, 0x78, 0x40, 0xce, 0xa1, 0x22, 0x66, 0x37, 0x18, 0xe5, 0xe3, 0xa9, 0x42, 0x29, 0x12, 0x69, 0x60, 0xfa, 0x61, 0x78, 0x7c, 0x09, 0x4b, 0xba, 0xfc, 0xf3, 0x86, 0x57, 0x78, 0xc6, 0x7d, 0x62, 0xc9, 0xc2, 0x00, 0xb9, 0x62, 0x5c, 0x3a, 0x2c, 0xe4, 0x89, 0xe4, 0xe1, 0xec, 0x38, 0xb9, 0xf6, 0x2f, 0x20, 0x2a, 0x69, 0xca, 0xbd, 0x52, 0x35, 0xd3, 0x95, 0x2c, 0xbe, 0x34, 0xc0, 0x04, 0x6f, 0xb9, 0xa7, 0x2b, 0xa2, 0x67, 0x0c, 0xef, 0xc0, 0x10, 0x4b, 0xca, 0xa9, 0x24, 0xdf, 0xda, 0x56, 0xca, 0x27, 0x91, 0xbd, 0x2f, 0x6a, 0xae, 0xf4, 0x1e, 0x1a, 0x6c, 0x9a, 0xd2, 0x55, 0xf9, 0x73, 0x08, 0xb1, 0x29, 0x52, 0x58, 0x39, 0x6c, 0x3c, 0xc4, 0xb3, 0xfe, 0xca, 0x92, 0x25, 0x5d, 0xcf, 0x57, 0x97, 0x00, 0x3b, 0x55, 0x19, 0x46, 0x3f, 0x06, 0x08, 0xad, 0xb2, 0xf9, 0x8e, 0x44, 0xb4, 0xdd, 0x68, 0x63, 0x91, 0xdc, 0xec, 0x99, 0xe8, 0x2a, 0x4a, 0xe6, 0x0c, 0xdd, 0x12, 0x2a, 0xaa, 0xff, 0xf6, 0xde, 0xac, 0xe1, 0xd2, 0x02, 0x5e, 0xb3, 0xe9, 0x56, 0xcf, 0x52, 0x71, 0xcd, 0x7b, 0x61, 0x53, 0x3f, 0x26, 0x9b, 0x2c, 0x5e, 0x0b, 0x67, 0x97, 0xeb, 0x36, 0xad, 0xae, 0x2a, 0x2f, 0xe9, 0xce, 0x93, 0xd8, 0x7e, 0x9b, 0xca, 0x98, 0x4c, 0x44, 0xd1, 0xb9, 0x84, 0x09, 0x7d, 0x0f, 0xbb, 0xfa, 0x26, 0xdb, 0x3e, 0x01, 0xa3, 0xee, 0xa6, 0x22, 0x75, 0x12, 0xac, 0x02, 0x43, 0xa5, 0x3e, 0xa6, 0x87, 0x87, 0xd2, 0x7e, 0x86, 0x37, 0xfa, 0xa2, 0x85, 0x38, 0x38, 0x5b, 0x3a, 0xba, 0x14, 0xe5, 0x81, 0x76, 0x6d, 0x73, 0x50, 0xda, 0x0d, 0x74, 0xed, 0x66, 0x80, 0x15, 0x5e, 0x56, 0x25, 0x07, 0x22, 0x81, 0x85, 0x82, 0x1e, 0x81, 0xe4, 0x8a, 0xda, 0x14, 0x16, 0x71, 0xed, 0xc2, 0x94, 0x9d, 0xb6, 0xc0, 0xcf, 0x8b, 0x4d, 0x15, 0xc4, 0x14, 0xb9, 0xfb, 0xd1, 0xef, 0x64, 0x88, 0xc7, 0x78, 0xcc, 0x8d, 0x40, 0xaf, 0x7a, 0xbf, 0x33, 0x84, 0x38, 0x14, 0xc5, 0x52, 0x7f, 0x70, 0x62, 0xa9, 0x2f, 0x81, 0x0d, 0x50, 0x82, 0xe7, 0xf4, 0x8a, 0x43, 0x99, 0x48, 0x99, 0x3b, 0x84, 0x4b, 0x81, 0xed, 0x75, 0xab, 0x0e, 0x83, 0x38, 0x0e, 0x18, 0x07, 0x02, 0xee, 0x06, 0xd6, 0x0c, 0xa7, 0x91, 0x52, 0x81, 0xce, 0xcb, 0xd8, 0x9a, 0xc5, 0x5f, 0xf2, 0x07, 0x8c, 0x1a, 0xcd, 0x92, 0xda, 0xaa, 0xed, 0xff, 0x6d, 0xa6, 0x1f, 0x36, 0x9e, 0xcf, 0xaf, 0xa4, 0x38, 0x96, 0xdc, 0xde, 0x8a, 0xde, 0x89, 0x87, 0xbb, 0x02, 0x35, 0x75, 0x5e, 0x1a, 0x2d, 0x0f, 0x46, 0x7a, 0x00, 0xf9, 0x9c, 0x7c, 0x34, 0xf4, 0x2e, 0x80, 0x37, 0xff, 0x0a, 0x30, 0x98, 0xc2, 0x4c, 0x09, 0x77, 0x2d, 0x34, 0x17, 0x3b, 0x5d, 0x7c, 0xff, 0x83, 0xbf, 0xe8, 0x43, 0x5e, 0x77, 0x1e, 0xc2, 0xbe, 0x03, 0xb8, 0x7e, 0x2a, 0x1b, 0x98, 0xa2, 0xb4, 0xdc, 0x7b, 0xc4, 0x2b, 0x26, 0xd1, 0x67, 0x91, 0x43, 0xcd, 0xc4, 0xcf, 0xc9, 0xb8, 0xca, 0xa8, 0xc1, 0x8a, 0x63, 0xec, 0x08, 0xbb, 0xf9, 0xee, 0xf6, 0x57, 0x39, 0x37, 0x3e, 0x51, 0x16, 0x7c, 0x15, 0x19, 0x11, 0xce, 0x97, 0x70, 0xb8, 0x11, 0x66, 0x7c, 0x6d, 0xaf, 0x94, 0x17, 0x69, 0x8e, 0xc3, 0x6d, 0x01, 0x3f, 0x8a, 0xc6, 0x27, 0x78, 0x1b, 0xa0, 0x33, 0xc4, 0x23, 0x01, 0xe4, 0x79, 0xf2, 0x0b, 0xa1, 0xea, 0xdc, 0xd1, 0x05, 0xdf, 0xdf, 0x69, 0x9b, 0x42, 0x86, 0x43, 0xe6, 0x1b, 0x0c, 0xb8, 0xa5, 0xbf, 0xc5, 0xe6, 0x54, 0x43, 0xba, 0xbc, 0xf6, 0x37, 0x93, 0x51, 0x12, 0x91, 0xbb, 0x7a, 0xfc, 0xe8, 0xbe, 0x9b, 0x55, 0xe3, 0xf6, 0xbd, 0xd5, 0xf0, 0x66, 0xe1, 0x48, 0x39, 0xe6, 0x94, 0xd7, 0xd4, 0x81, 0xc4, 0x89, 0x39, 0x1b, 0xd2, 0x0a, 0xfa, 0x56, 0xe8, 0xaa, 0xae, 0xb7, 0x8d, 0xa8, 0x2e, 0x05, 0x77, 0xb1, 0x05, 0xf2, 0xa0, 0xa4, 0x21, 0xfe, 0x9c, 0x98, 0xcf, 0x97, 0x29, 0x20, 0xe6, 0x85, 0x08, 0xce, 0x41, 0x85, 0x0b, 0xf5, 0x73, 0x34, 0x70, 0xb3, 0xb7, 0x2f, 0x6d, 0x2f, 0x26, 0x79, 0x0c, 0x20, 0x2d, 0x1d, 0x39, 0x8f, 0x3d, 0x14, 0x19, 0xdd, 0xc4, 0x68, 0x9e, 0x07, 0x5d, 0x9a, 0x59, 0x29, 0x43, 0x42, 0x8f, 0x41, 0x0c, 0xf5, 0x8e, 0x36, 0x94, 0x6b, 0x41, 0x19, 0x37, 0xe1, 0x03, 0xaa, 0x43, 0xbd, 0xb1, 0x1e, 0xac, 0x71, 0x03, 0x1f, 0x02, 0xa1, 0x1c, 0x15, 0xa1, 0x88, 0x5f, 0xa4, 0x28, 0x98, 0x85, 0x75, 0x2c, 0x60, 0xec, 0x3a, 0x2d, 0xb3, 0x32, 0xec, 0xc8, 0x07, 0x03, 0x57, 0x2f, 0x1b, 0x2f, 0xd9, 0xd7, 0xdd, 0x00, 0x67, 0x70, 0x8a, 0xca, 0xd0, 0x1a, 0x17, 0xc3, 0x46, 0xd6, 0xd0, 0x15, 0x1a, 0x3a, 0x3f, 0x32, 0xc7, 0x6a, 0x4f, 0x68, 0x32, 0x43, 0xb1, 0xb5, 0x30, 0xd9, 0x7f, 0xdc, 0x49, 0x24, 0x1f, 0xb8, 0xbc, 0xf6, 0x6b, 0xd1, 0xc2, 0x30, 0x0e, 0x2d, 0x17, 0x36, 0x31, 0x69, 0xb7, 0xa0, 0x58, 0x08, 0xe5, 0x33, 0x86, 0x0a, 0x72, 0x0f, 0xa8, 0xc0, 0x3c, 0x29, 0x30, 0xe0, 0xf5, 0xfc, 0x01, 0xd5, 0x26, 0x7c, 0x8b, 0x58, 0x73, 0x4c, 0x37, 0x44, 0x20, 0x30, 0x05, 0xa6, 0xd4, 0xc5, 0x73, 0x14, 0x9d, 0x70, 0xa2, 0x41, 0x35, 0x94, 0xb4, 0xce, 0x84, 0x08, 0x78, 0x62, 0x65, 0xc8, 0x49, 0xfc, 0xad, 0xea, 0x33, 0x88, 0x6a, 0xd4, 0x58, 0xb1, 0x68, 0xad, 0x92, 0xf7, 0xfa, 0x11, 0x5a, 0x01, 0xf6, 0x09, 0xe9, 0x34, 0x02, 0x3a, 0x9c, 0x84, 0x0e, 0x5c, 0x9d, 0x8a, 0x22, 0xee, 0xc0, 0xd7, 0x5a, 0x28, 0xab, 0x89, 0x2f, 0x32, 0x3a, 0x1c, 0xf7, 0x93, 0x22, 0x82, 0xaf, 0xec, 0xd4, 0x75, 0xf9, 0xe6, 0xa4, 0x0c, 0x61, 0x69, 0x2a, 0x8c, 0xe4, 0x0f, 0xe8, 0x81, 0xb3, 0xd8, 0x2e, 0x0e, 0x34, 0x1f, 0x3b, 0x82, 0x4a, 0xcc, 0xa5, 0x2b, 0xd6, 0xcc, 0xfb, 0x6f, 0x7e, 0xbe, 0xa8, 0x18, 0xad, 0xef, 0x1a, 0xf0, 0xda, 0x89, 0x24, 0x8e, 0x0e, 0x07, 0xa1, 0x6f, 0xa0, 0xec, 0x5b, 0x49, 0x43, 0xb5, 0x2b, 0x9b, 0x44, 0x0c, 0x61, 0x89, 0x0c, 0x3e, 0x65, 0xe7, 0xec, 0xef, 0x9f, 0x94, 0x1a, 0x0d, 0x95, 0x09, 0xf6, 0x02, 0x53, 0x31, 0x92, 0x2e, 0x10, 0x7c, 0x72, 0x94, 0x0e, 0x2f, 0x90, 0xd3, 0xc2, 0xfe, 0xa3, 0x59, 0x35, 0xdc, 0xa1, 0xd3, 0xaa, 0x12, 0x83, 0xe7, 0x81, 0x8e, 0x48, 0x26, 0x5b, 0x7e, 0x3c, 0x3c, 0x7f, 0x1e, 0x7a, 0x6a, 0x7d, 0xce, 0xb0, 0x37, 0x11, 0x68, 0x22, 0x62, 0x49, 0xd0, 0xf2, 0x1a, 0xea, 0xcd, 0x9e, 0x71, 0x11, 0x17, 0xca, 0x0f, 0x16, 0xb1, 0x40, 0x23, 0xb5, 0x78, 0x35, 0xa0, 0x70, 0xfd, 0xce, 0xa5, 0x2f, 0x90, 0xe2, 0x3c, 0x2a, 0x9d, 0x02, 0x48, 0x08, 0x3c, 0xb6, 0xb9, 0x48, 0x03, 0x0a, 0x02, 0xe1, 0x1e, 0x49, 0xcd, 0x25, 0xa2, 0x09, 0xed, 0xeb, 0x1f, 0x67, 0x94, 0xed, 0x75, 0x94, 0xc6, 0x6f, 0xe8, 0x91, 0x0d, 0x22, 0x76, 0x36, 0x6f, 0x47, 0x67, 0x79, 0x9d, 0x17, 0x27, 0xed, 0x6d, 0x63, 0x51, 0x89, 0x8a, 0x78, 0x0c, 0xab, 0x6a, 0x45, 0x9a, 0x5c, 0x81, 0xc0, 0x2e, 0xd6, 0xb5, 0x85, 0xfe, 0x44, 0x11, 0xc0, 0x9a, 0xc8, 0xbd, 0x4e, 0x7c, 0xc2, 0x2e, 0x1f, 0xe0, 0x50, 0x9a, 0xdf, 0xd6, 0x11, 0xaf, 0xd5, 0x95, 0x2f, 0x84, 0x0b, 0x12, 0x9c, 0xd0, 0xaf, 0xd1, 0x9b, 0x5a, 0xb9, 0xfb, 0x83, 0xb0, 0xce, 0xb2, 0xbf, 0x1c, 0x64, 0xa1, 0x1a, 0xd4, 0x28, 0xd7, 0x3a, 0x71, 0x9c, 0xd5, 0x69, 0xa2, 0x05, 0xe5, 0x9c, 0x22, 0x84, 0xae, 0xad, 0xe7, 0x83, 0x06, 0xec, 0x9d, 0x52, 0x07, 0xd6, 0x52, 0x12, 0x65, 0x24, 0x73, 0xd3, 0xfe, 0x08, 0xf7, 0xf9, 0xb3, 0xb3, 0xda, 0xe4, 0x77, 0x1a, 0xcd, 0xd0, 0xa5, 0xfa, 0x2c, 0xf9, 0x97, 0x19, 0x30, 0x03, 0x74, 0xd0, 0x66, 0x9a, 0x49, 0xc6, 0x5f, 0x56, 0x5c, 0xfe, 0xa9, 0xe1, 0xbd, 0x14, 0xff, 0x5b, 0x1d, 0xc3, 0xbd, 0xfd, 0xe3, 0xab, 0x97, 0xfd, 0x7d, 0x51, 0x89, 0xb2, 0xf4, 0x68, 0x11, 0xf9, 0xc4, 0x4f, 0x9d, 0xd7, 0xea, 0xda, 0x3f, 0x60, 0x3e, 0x55, 0xa8, 0xd7, 0x03, 0xc6, 0x54, 0x16, 0xbd, 0x73, 0x02, 0x30, 0x42, 0xa4, 0x67, 0x56, 0x14, 0xaa, 0x23, 0xf7, 0xee, 0x20, 0xf4, 0x2b, 0x9d, 0x71, 0x2a, 0x52, 0x11, 0x9b, 0x5b, 0xf8, 0xb4, 0x32, 0x57, 0xfd, 0xfb, 0xa7, 0x5e, 0xf2, 0x3a, 0xca, 0x91, 0xc5, 0xbc, 0x8e, 0xa7, 0xa1, 0x13, 0x0c, 0xe1, 0x10, 0xad, 0xcb, 0x40, 0x63, 0xa8, 0x3f, 0xf5, 0x53, 0xe7, 0x8f, 0x19, 0xe8, 0x66, 0x9c, 0x9e, 0x9a, 0xca, 0x3e, 0x86, 0xb7, 0x3d, 0xd0, 0x52, 0x04, 0x78, 0xf0, 0xbe, 0xa7, 0x21, 0x80, 0xab, 0x44, 0x58, 0xf0, 0x5d, 0x67, 0x8d, 0xc0, 0xe6, 0x22, 0x94, 0x40, 0xe2, 0xf7, 0xfb, 0x9b, 0x65, 0xf7, 0x9b, 0x13, 0x32, 0x2c, 0x6d, 0x8e, 0x2e, 0x35, 0x9f, 0x52, 0x14, 0x30, 0xe7, 0x0d, 0x69, 0xdd, 0x18, 0x18, 0xb3, 0xff, 0xf3, 0xfc, 0xe6, 0x06, 0x3f, 0x36, 0x1f, 0xec, 0x1c, 0x37, 0x94, 0x5d, 0x94, 0xaf, 0xcb, 0x1a, 0x73, 0x0b, 0x0b, 0x9f, 0x58, 0x3c, 0x11, 0x04, 0x0d, 0xbb, 0x03, 0x21, 0x14, 0xca, 0xaa, 0xf5, 0x82, 0xfc, 0xdb, 0x49, 0x11, 0xf7, 0x36, 0x90, 0x70, 0x79, 0x14, 0x12, 0xdd, 0x99, 0xba, 0x49, 0xf6, 0x50, 0xd3, 0x8b, 0xcc, 0x37, 0x1d, 0xea, 0x3a, 0x92, 0x62, 0x59, 0x75, 0x8e, 0xaa, 0x10, 0xe3, 0xc7, 0xaf, 0x31, 0x31, 0x0d, 0x91, 0xab, 0xa0, 0x68, 0xcb, 0x5e, 0x9f, 0x59, 0x66, 0x81, 0x9f, 0x63, 0x6c, 0x41, 0x23, 0xca, 0xa0, 0xab, 0x16, 0x9b, 0x6c, 0xcc, 0x62, 0xec, 0x1b, 0x17, 0xbe, 0x65, 0x48, 0x07, 0xc7, 0x00, 0x96, 0x05, 0x53, 0x0c, 0xa2, 0x8b, 0x02, 0x78, 0x36, 0x8a, 0x16, 0x4e, 0xc0, 0x09, 0x84, 0x7e, 0x02, 0x0f, 0x4a, 0xdd, 0x0a, 0xc4, 0x04, 0x6d, 0x65, 0xd3, 0xba, 0xdf, 0x90, 0x12, 0xfd, 0x56, 0xaf, 0x65, 0x32, 0x6e, 0x81, 0xe0, 0x2d, 0x7d, 0x94, 0x2b, 0x02, 0x19, 0xb5, 0x2b, 0x17, 0xda, 0xab, 0xde, 0x7e, 0x60, 0x25, 0x87, 0x82, 0x98, 0xf0, 0x0c, 0x80, 0x3c, 0x6d, 0x9c, 0xf9, 0x99, 0x43, 0x94, 0xe4, 0x95, 0x51, 0xa4, 0x49, 0xf0, 0xe7, 0x2e, 0x0b, 0xca, 0x35, 0xee, 0x06, 0x66, 0x03, 0xe0, 0x59, 0x2d, 0xa3, 0x5e, 0x05, 0xf6, 0x24, 0x89, 0xb8, 0x84, 0xc9, 0xeb, 0xe3, 0x50, 0xb9, 0x5b, 0x12, 0x89, 0xf8, 0x20, 0x7d, 0x5a, 0x96, 0x59, 0xda, 0x6b, 0x27, 0x9c, 0x76, 0xaa, 0x73, 0xdd, 0x84, 0x4b, 0x6e, 0x91, 0xb5, 0x0d, 0x6a, 0x14, 0x09, 0xc0, 0x8b, 0x48, 0xe4, 0x04, 0x7b, 0x80, 0x64, 0x53, 0x60, 0x9c, 0xf2, 0x42, 0x0b, 0x75, 0x17, 0x03, 0x72, 0x7b, 0x91, 0x2f, 0x61, 0x9c, 0xa7, 0xc2, 0x6c, 0x68, 0xb9, 0x68, 0x28, 0x73, 0x1b, 0xf7, 0x9b, 0xfb, 0x24, 0x3c, 0xf0, 0xcb, 0x81, 0xfa, 0x6f, 0x5f, 0xcf, 0x30, 0xad, 0x49, 0x6a, 0x9b, 0x00, 0xd4, 0x7f, 0x7c, 0x36, 0xe6, 0x69, 0x9b, 0x87, 0x2b, 0x3a, 0x8c, 0xc7, 0x6f, 0x97, 0x31, 0xe1, 0x4c, 0xca, 0x80, 0x80, 0x06, 0x12, 0x86, 0x0f, 0xb3, 0x3d, 0xac, 0xe4, 0x9f, 0x79, 0x3a, 0xb8, 0xee, 0x68, 0x19, 0x5b, 0x83, 0x72, 0xdd, 0xa5, 0x21, 0x5f, 0x03, 0xb0, 0xd0, 0x25, 0x76, 0x44, 0x83, 0xfe, 0x58, 0x93, 0xf7, 0xbe, 0x00, 0x27, 0xde, 0x64, 0x3f, 0x18, 0x3d, 0xef, 0xe8, 0x82, 0x13, 0x73, 0x8f, 0x36, 0x3b, 0x6b, 0x90, 0xb0, 0x93, 0x51, 0x54, 0x4a, 0x5e, 0x6c, 0xcf, 0xaf, 0xe7, 0xea, 0x4d, 0x91, 0x68, 0x2e, 0x6f, 0x9f, 0x29, 0x6b, 0x70, 0xb1, 0xec, 0x72, 0xad, 0x46, 0x89, 0xc8, 0x65, 0x31, 0xd6, 0xfc, 0xbd, 0x8f, 0xc9, 0x37, 0x07, 0xfc, 0xe1, 0x15, 0x43, 0x07, 0xc1, 0xb3, 0xe6, 0xe3, 0x1f, 0x0a, 0xdb, 0x5f, 0xdc, 0x7b, 0xc8, 0x17, 0x74, 0xaa, 0x92, 0xec, 0x99, 0x90, 0x23, 0xb3, 0x1b, 0xcc, 0x6b, 0x2a, 0x0b, 0x3a, 0xa4, 0x30, 0x20, 0xc7, 0xdb, 0x35, 0x59, 0x84, 0xac, 0xef, 0xe4, 0xf9, 0x4d, 0x4e, 0x3f, 0xbb, 0xce, 0xb3, 0x9d, 0x41, 0x9e, 0x5d, 0x8b, 0xf3, 0x52, 0x23, 0xd3, 0x84, 0xa2, 0x69, 0xa1, 0x82, 0xb4, 0x4d, 0xe4, 0x2b, 0x9e, 0x21, 0xf7, 0x83, 0x26, 0x1e, 0x81, 0xa3, 0xcb, 0x56, 0x9a, 0x54, 0x0a, 0xeb, 0x2f, 0xdc, 0xda, 0x7f, 0xa7, 0x18, 0x79, 0xeb, 0xc6, 0xcb, 0x6a, 0x34, 0xd2, 0x36, 0xbf, 0xbb, 0xf5, 0xe9, 0x94, 0xb3, 0xe3, 0xd8, 0xdc, 0xd8, 0xbc, 0xb1, 0x60, 0x5e, 0x34, 0x6d, 0x04, 0x28, 0xf1, 0x26, 0x4c, 0x3b, 0x35, 0x28, 0x20, 0x72, 0xbc, 0x4a, 0xcc, 0x73, 0xe8, 0x7f, 0x4b, 0xe1, 0x1b, 0xa8, 0xc5, 0xd4, 0x64, 0xac, 0x56, 0x86, 0x5f, 0xcb, 0x11, 0x4f, 0x56, 0x2f, 0x45, 0xd3, 0xac, 0xc4, 0xfe, 0x7a, 0x7c, 0x4a, 0xcf, 0x20, 0x7d, 0xa9, 0xcf, 0x0e, 0x29, 0x84, 0xe2, 0x29, 0x1e, 0x10, 0x3a, 0x6a, 0xc4, 0x27, 0x1d, 0x8e, 0x30, 0x98, 0xe8, 0x0f, 0x48, 0xc2, 0x54, 0x52, 0x28, 0x61, 0xf8, 0x22, 0xc5, 0xa7, 0x0f, 0x5d, 0xd0, 0x8f, 0x7c, 0xed, 0xde, 0x6e, 0x0b, 0xfa, 0xc5, 0xca, 0xfa, 0x5e, 0x49, 0x70, 0xb8, 0x5a, 0xf8, 0xc1, 0xec, 0x87, 0x52, 0x4d, 0xb9, 0x0f, 0x2d, 0xa3, 0x40, 0x1c, 0x58, 0x66, 0x67, 0x91, 0x7f, 0xa4, 0xd9, 0xf9, 0x4e, 0x64, 0x4f, 0xbc, 0xd9, 0x7e, 0x0d, 0x99, 0x3c, 0xb0, 0xaf, 0x50, 0x7e, 0xed, 0x25, 0x9f, 0xbc, 0xf8, 0xfd, 0x70, 0x83, 0x32, 0xe0, 0x51, 0x7d, 0xb1, 0x60, 0x24, 0x50, 0x91, 0xf1, 0x18, 0xc3, 0x8f, 0x34, 0xd8, 0x23, 0xd3, 0x7c, 0x02, 0xe5, 0x0e, 0x8b, 0xda, 0x8c, 0xc5, 0x9c, 0x40, 0xcd, 0xed, 0xa7, 0xdf, 0xf1, 0xb7, 0xe0, 0xa8, 0x7c, 0xad, 0x80, 0x7f, 0x0c, 0xfe, 0xc9, 0x33, 0x83, 0x16, 0x44, 0xb4, 0x68, 0x72, 0x4e, 0x80, 0x8b, 0xb3, 0xd2, 0x5f, 0xe8, 0xf1, 0x58, 0x50, 0xce, 0x51, 0x3f, 0xc3, 0x41, 0xda, 0x46, 0x08, 0x9c, 0x84, 0x52, 0x08, 0x7b, 0x92, 0x6b, 0x33, 0xd7, 0x22, 0x07, 0xb9, 0x73, 0x03, 0x8b, 0xfd, 0x77, 0xc6, 0x0f, 0x47, 0x5b, 0x18, 0x61, 0xb8, 0x07, 0x4f, 0x4d, 0x84, 0x39, 0x42, 0x1c, 0x5b, 0x26, 0x5e, 0x5b, 0x28, 0x64, 0xf6, 0xde, 0xfe, 0x07, 0xdb, 0x04, 0x4f, 0x0b, 0x2d, 0x3b, 0x60, 0xf2, 0x70, 0xc7, 0xf9, 0xad, 0xe2, 0xc0, 0x61, 0xc0, 0x0c, 0x5a, 0x8a, 0xa2, 0x98, 0x6a, 0x88, 0x62, 0x62, 0x25, 0x47, 0x90, 0xd2, 0x2a, 0x7e, 0x5b, 0x68, 0xc3, 0xdf, 0xf7, 0x98, 0x67, 0x91, 0x42, 0xd9, 0x84, 0xdf, 0xa6, 0xf9, 0x7c, 0x32, 0x41, 0xb3, 0xed, 0x3c, 0x43, 0x83, 0x36, 0x77, 0x98, 0xb9, 0x37, 0xce, 0xc8, 0xcd, 0x58, 0x99, 0x1b, 0xf2, 0xcc, 0xcf, 0x00, 0xed, 0x17, 0x77, 0xaf, 0x28, 0xcd, 0x60, 0x0e, 0x02, 0x9d, 0x12, 0xd1, 0x6a, 0x8f, 0x04, 0xe6, 0xac, 0x8a, 0x10, 0x10, 0x8a, 0x19, 0x23, 0xd2, 0x8f, 0x6e, 0x39, 0x8e, 0xa0, 0xa8, 0x89, 0xee, 0xd4, 0x51, 0xfc, 0x83, 0x86, 0x2b, 0xe4, 0xac, 0xa8, 0x2c, 0xeb, 0xba, 0x59, 0xc7, 0x49, 0x51, 0xba, 0x6d, 0x3b, 0x11, 0xfe, 0x54, 0xb0, 0x76, 0xc1, 0x77, 0x45, 0xfd, 0x9b, 0xde, 0x73, 0x89, 0xf4, 0x1f, 0x07, 0x04, 0x1a, 0x25, 0xd3, 0x49, 0x90, 0x30, 0xa4, 0x42, 0xaa, 0x1d, 0x74, 0x4d, 0x56, 0xe8, 0xe0, 0xe5, 0x3d, 0x6f, 0xdc, 0x7e, 0x0b, 0x78, 0xa5, 0xb0, 0x0a, 0xf6, 0xf7, 0x98, 0xf6, 0x88, 0x81, 0x7c, 0x0d, 0x43, 0x96, 0xad, 0x65, 0xb1, 0x25, 0xb2, 0x82, 0x19, 0xeb, 0xa2, 0x28, 0x01, 0xe7, 0xd2, 0x6e, 0xf2, 0x0e, 0xb0, 0x14, 0x7b, 0x41, 0xef, 0x16, 0x78, 0x7c, 0xe5, 0x81, 0x95, 0x50, 0x31, 0x86, 0x0d, 0x93, 0xa0, 0xcd, 0xb8, 0x56, 0x52 ],
- const [ 0x08, 0xbe, 0x55, 0x57, 0x31, 0x77, 0xd7, 0x0c, 0x9e, 0xca, 0x51, 0x8c, 0x96, 0xb4, 0x57, 0x67, 0x7c, 0xe0, 0x7e, 0x31, 0xa1, 0x26, 0xcc, 0x29, 0x5c, 0x53, 0x6c, 0x17, 0x5d, 0x28, 0xa6, 0x7b, 0x3e, 0xa5, 0x0f, 0xe3, 0x5b, 0x87, 0xfd, 0x9d, 0xe4, 0x0f, 0x3e, 0x8e, 0x30, 0x05, 0x0a, 0x62, 0x54, 0xfd, 0x35, 0xe6, 0xf5, 0xd9, 0xa9, 0xb1, 0x5a, 0x8f, 0x14, 0x0a, 0xc5, 0x2c, 0xde, 0x06, 0x04, 0x19, 0x5e, 0xf1, 0x43, 0x9d, 0x4d, 0xef, 0x24, 0xa4, 0x7b, 0xe3, 0x12, 0xbf, 0xc0, 0x90, 0xd2, 0x6b, 0x36, 0xff, 0x5a, 0x96, 0xa5, 0x20, 0xe7, 0x5f, 0x3f, 0xb3, 0x4a, 0x1e, 0x8e, 0x69, 0x82, 0xa4, 0xaa, 0x47, 0x90, 0xc4, 0xaf, 0x4c, 0x87, 0x12, 0x6e, 0x53, 0xe3, 0xea, 0x63, 0x3b, 0x1b, 0xb4, 0xe8, 0x44, 0x7a, 0x67, 0xa7, 0xbc, 0x2a, 0x4c, 0x55, 0xdc, 0x92, 0x05, 0x9e, 0xed, 0xe2, 0xcd, 0x5b, 0xae, 0xeb, 0x01, 0x0b, 0xfa, 0x35, 0xe0, 0x81, 0xa6, 0x4b, 0x8f, 0xda, 0xa9, 0x5a, 0x5f, 0xb2, 0x7f, 0xfa, 0x53, 0x98, 0xcf, 0x4c, 0xdd, 0xbe, 0x4b, 0x45, 0xe9, 0xf5, 0xd7, 0x49, 0x1c, 0xd9, 0xee, 0xfc, 0x5e, 0x49, 0x42, 0x55, 0x96, 0x1b, 0xa3, 0xf4, 0xb4, 0x0d, 0x22, 0xb5, 0xf5, 0xfe, 0x76, 0x85, 0x62, 0x5e, 0x9f, 0x74, 0x9b, 0xe3, 0xc9, 0x0c, 0xd2, 0x7d, 0x72, 0xe1, 0x1a, 0x8d, 0xcf, 0x6a, 0xe2, 0x52, 0x6c, 0x0f, 0xbc, 0xa3, 0x14, 0x83, 0x64, 0xe4, 0xf0, 0x54, 0xfd, 0x33, 0xf2, 0xc1, 0x9d, 0xe2, 0x75, 0xcb, 0x0c, 0x2a, 0x1d, 0x8f, 0xc9, 0x1d, 0x05, 0xd2, 0x4e, 0xdd, 0x19, 0xde, 0x95, 0x0c, 0xc0, 0x8d, 0xdb, 0x83, 0xbf, 0xa3, 0xa4, 0x47, 0x5a, 0x60, 0xff, 0xb8, 0xbb, 0x56, 0x0b, 0x0c, 0x98, 0x79, 0xba, 0xfc, 0x11, 0x75, 0xd5, 0xbd, 0xd7, 0x44, 0x41, 0x32, 0x93, 0xff, 0x80, 0x60, 0x86, 0xf4, 0x7a, 0x22, 0x6c, 0xfa, 0x7e, 0x1e, 0xa7, 0x01, 0x84, 0xf7, 0x99, 0xed, 0xb5, 0xc5, 0x52, 0xa5, 0x2d, 0xc2, 0x6b, 0x66, 0xff, 0x45, 0x31, 0x5e, 0x79, 0xf5, 0x07, 0x76, 0xaa, 0x36, 0x05, 0x6f, 0x22, 0xe8, 0xe5, 0x30, 0xf9, 0x51, 0x20, 0x5e, 0x13, 0x57, 0x54, 0x2e, 0xa1, 0xf3, 0xe9, 0x77, 0xeb, 0xe2, 0xf4, 0x0c, 0x4e, 0x9e, 0x5b, 0x48, 0x80, 0x8c, 0x3b, 0xea, 0x1c, 0x77, 0x86, 0x23, 0x5a, 0x3d, 0xf1, 0xee, 0x1d, 0xc8, 0x0d, 0xa0, 0x34, 0x40, 0xb3, 0xc0, 0xd9, 0x7f, 0xa6, 0x18, 0x7e, 0xc6, 0x74, 0x0c, 0xca, 0xae, 0x9d, 0x2b, 0xde, 0x61, 0xf7, 0x04, 0xdc, 0x09, 0x51, 0x3b, 0xaa, 0x89, 0x57, 0xdc, 0xf3, 0x6c, 0xb6, 0xee, 0x6f, 0x1a, 0x80, 0x4c, 0x65, 0x52, 0xd1, 0xb0, 0x6e, 0xd4, 0xb3, 0x11, 0x7b, 0x5e, 0x3f, 0x2f, 0x19, 0xda, 0x05, 0x6c, 0xf4, 0xd6, 0xae, 0xdd, 0x9a, 0x34, 0xe0, 0xa1, 0x82, 0x23, 0x62, 0x71, 0x4d, 0x4e, 0x81, 0x79, 0x4b, 0x53, 0xb2, 0x66, 0x41, 0x76, 0x78, 0xc1, 0x6a, 0x97, 0x88, 0x7b, 0xbb, 0x61, 0x2c, 0xc9, 0x6b, 0xc5, 0xe5, 0x32, 0xb3, 0xa6, 0x54, 0xe5, 0xd3, 0xd6, 0x5a, 0x51, 0x55, 0x42, 0x7f, 0xf0, 0x95, 0x69, 0x90, 0x63, 0x81, 0x13, 0x8c, 0xc4, 0x9e, 0x3f, 0xc2, 0x38, 0x4c, 0x5d, 0x33, 0xc3, 0x4a, 0xbd, 0x3d, 0x61, 0x7c, 0x48, 0x7b, 0x52, 0xec, 0x6e, 0xe7, 0xb5, 0x10, 0x5f, 0x41, 0x58, 0x4b, 0x7e, 0xb5, 0xcf, 0xb5, 0x12, 0xb8, 0xc3, 0x1f, 0x3f, 0x33, 0x8d, 0x52, 0x36, 0xe3, 0x03, 0x98, 0xa8, 0xff, 0x92, 0x7e, 0x80, 0x1c, 0x8e, 0xd7, 0xd1, 0x4f, 0xc5, 0x04, 0x0d, 0x91, 0x5a, 0x73, 0x79, 0x67, 0xd1, 0x66, 0xdd, 0xc2, 0x66, 0xf6, 0x80, 0x23, 0xa3, 0x57, 0x53, 0x04, 0x31, 0x5d, 0x6d, 0x74, 0xef, 0x3f, 0xb7, 0x01, 0x41, 0x9c, 0xe9, 0xda, 0xab, 0xbb, 0xb5, 0x35, 0x9e, 0x17, 0x41, 0xef, 0x91, 0x1b, 0xdb, 0x72, 0x54, 0x2a, 0xe9, 0xdc, 0xa1, 0xe2, 0x1e, 0x5e, 0xf5, 0xa2, 0xf4, 0xe1, 0x9d, 0x49, 0x56, 0xf0, 0x14, 0x41, 0x9c, 0xd2, 0x8c, 0xbd, 0xbd, 0xf6, 0xcb, 0x3e, 0xc0, 0x95, 0x38, 0x5c, 0x74, 0x92, 0x36, 0xc3, 0x61, 0xa5, 0xb0, 0x7c, 0xfe, 0xb8, 0xf5, 0x6e, 0x25, 0x91, 0xc7, 0x24, 0xc3, 0xb2, 0xae, 0xd0, 0xd4, 0x7d, 0x93, 0x90, 0x8f, 0x9c, 0x89, 0xf1, 0xdd, 0xa0, 0xee, 0xb2, 0x10, 0xe8, 0xb3, 0xca, 0xd2, 0xc5, 0xf8, 0xab, 0x5b, 0xdb, 0xdc, 0xc9, 0xe8, 0xcb, 0x93, 0x56, 0x68, 0x0f, 0xb9, 0x50, 0x78, 0x25, 0xe5, 0xbe, 0x91, 0xef, 0x82, 0x37, 0x80, 0x5a, 0xda, 0xa3, 0x17, 0x3e, 0x74, 0x46, 0x23, 0x85, 0xa0, 0xfa, 0x9e, 0x90, 0x50, 0xbb, 0x25, 0xd6, 0x29, 0x69, 0xac, 0xce, 0xda, 0xca, 0x70, 0x10, 0xad, 0xcf, 0x2d, 0xb7, 0x5b, 0x18, 0x91, 0x09, 0x25, 0xb9, 0xf1, 0x5a, 0x20, 0x3f, 0x3c, 0x2d, 0xd1, 0xee, 0x2d, 0x9d, 0xf9, 0x4d, 0xc4, 0xfb, 0xb2, 0xe5, 0xf6, 0xb9, 0xbb, 0x45, 0xa4, 0x86, 0x11, 0x49, 0xca, 0xbb, 0xbf, 0x9c, 0xf9, 0xf6, 0xf6, 0x7c, 0x07, 0x04, 0x60, 0xbd, 0x05, 0x05, 0xb2, 0x11, 0x71, 0xca, 0x81, 0x86, 0xad, 0x82, 0x56, 0x50, 0xb0, 0x96, 0x04, 0xc9, 0xfc, 0xd1, 0x39, 0xb6, 0xcf, 0xc4, 0x54, 0xcc, 0x9e, 0x69, 0x76, 0x73, 0xbf, 0x06, 0xdc, 0xc9, 0x66, 0x54, 0x6c, 0xea, 0xd2, 0xe1, 0x8d, 0x6f, 0xc8, 0xb3, 0x3c, 0x34, 0x41, 0x2e, 0x5d, 0x5f, 0x60, 0x38, 0x4e, 0x9d, 0xa6, 0x9a, 0xc2, 0xaf, 0x69, 0xa9, 0xcd, 0x26, 0x82, 0x27, 0x3b, 0x6a, 0x47, 0x64, 0x26, 0x01, 0xb9, 0xa8, 0xc8, 0x0e, 0xfe, 0xd5, 0x8d, 0x18, 0x11, 0x49, 0x6c, 0x0d, 0xb8, 0x02, 0x78, 0x87, 0xb6, 0x05, 0xb2, 0x4d, 0x42, 0x00, 0x22, 0x1d, 0xb9, 0x2e, 0x26, 0xa9, 0x90, 0x7b, 0x09, 0xdf, 0x8c, 0xe9, 0xd7, 0x6d, 0x35, 0x32, 0x70, 0x85, 0x88, 0xaf, 0xdc, 0xdd, 0xec, 0x78, 0xde, 0xfb, 0x67, 0xcd, 0xcc, 0xaf, 0x12, 0xb4, 0x9d, 0xe1, 0xca, 0xe4, 0x44, 0x8c, 0x29, 0xe2, 0x3d, 0x0b, 0xb4, 0x6a, 0x65, 0x94, 0x56, 0x10, 0x0e, 0x02, 0x0e, 0x27, 0x53, 0xd7, 0xe4, 0xe2, 0xa9, 0x81, 0x21, 0xb9, 0xb7, 0xdc, 0xbf, 0x0e, 0x68, 0xf9, 0x1f, 0x11, 0x3e, 0x1e, 0xfa, 0xe1, 0xe9, 0x0d, 0x9a, 0xf4, 0x18, 0x89, 0x4a, 0xb8, 0x8f, 0x17, 0x0b, 0x7a, 0x79, 0x02, 0x88, 0x88, 0x00, 0xa1, 0x4c, 0x92, 0x1c, 0xdc, 0x33, 0x56, 0xa8, 0xed, 0x1e, 0x7d, 0xbb, 0x64, 0xeb, 0xbf, 0x35, 0x6e, 0xa5, 0x4e, 0x98, 0x56, 0xf7, 0x72, 0x1a, 0x4c, 0xe7, 0x70, 0xf8, 0x66, 0xc1, 0xb1, 0x0c, 0xe4, 0x50, 0x20, 0xa2, 0xb8, 0x54, 0xd4, 0x88, 0x46, 0x31, 0xef, 0x64, 0x68, 0xe5, 0xc6, 0x4a, 0xb5, 0x3c, 0x42, 0x8e, 0x03, 0x47, 0x86, 0xd7, 0x2a, 0x0a, 0xd1, 0x75, 0x0b, 0x75, 0xa6, 0xf5, 0xd1, 0x96, 0x2b, 0xf2, 0x77, 0x0c, 0xd0, 0x2e, 0x8b, 0xbf, 0x30, 0xe1, 0x31, 0xce, 0x3c, 0x50, 0x6a, 0xc9, 0x96, 0xa2, 0x96, 0x21, 0x3b, 0xef, 0x38, 0xdc, 0x65, 0x9b, 0xfa, 0x8d, 0xb0, 0xe2, 0xf1, 0x84, 0x7b, 0xb3, 0x21, 0x42, 0x91, 0xc2, 0x44, 0x30, 0x09, 0xd9, 0xc7, 0x90, 0x6a, 0x6e, 0x16, 0xb3, 0x13, 0x7b, 0x19, 0x6c, 0xda, 0x8a, 0xfe, 0xc6, 0xf4, 0x0f, 0x3a, 0xf2, 0x15, 0xfb, 0xca, 0x83, 0xd7, 0x8e, 0xbf, 0xde, 0x60, 0x6d, 0xf9, 0xeb, 0x3f, 0xf4, 0x33, 0x11, 0x98, 0xcd, 0x40, 0x62, 0x81, 0xc2, 0x93, 0x12, 0xab, 0xcf, 0x05, 0x2e, 0x45, 0x7c, 0xd3, 0x8a, 0x1d, 0x6a, 0xe6, 0xfc, 0x09, 0x2b, 0x58, 0xc7, 0x85, 0x56, 0x33, 0x5a, 0x9d, 0xdb, 0x7c, 0x3b, 0x0e, 0x95, 0x70, 0x3e, 0xa8, 0x1e, 0x0d, 0xfa, 0xf6, 0xe7, 0xd4, 0x7d, 0x21, 0x88, 0xce, 0x3f, 0x12, 0x54, 0xcd, 0x55, 0xd7, 0x31, 0xf4, 0xe7, 0x48, 0xa7, 0x79, 0xe4, 0xea, 0x36, 0xaa, 0xf4, 0x13, 0xed, 0x2e, 0xaf, 0x4f, 0x38, 0x8e, 0x0c, 0x03, 0xfa, 0xf4, 0x1c, 0x50, 0xdb, 0x32, 0xf8, 0x3a, 0xe4, 0x05, 0xf8, 0x0a, 0x49, 0x9b, 0x25, 0xf0, 0x85, 0x54, 0xf1, 0xed, 0xac, 0xc6, 0x26, 0xf0, 0xfd, 0x03, 0x1d, 0x40, 0xb7, 0x1e, 0x30, 0x19, 0x2f, 0xeb, 0x71, 0x9a, 0x1e, 0x07, 0x9d, 0xdf, 0x3f, 0x18, 0x4b, 0x6a, 0x1a, 0x56, 0x69, 0xc7, 0x1a, 0x4b, 0xe9, 0x6f, 0xe6, 0xd6, 0xb8, 0xee, 0xee, 0x76, 0xf0, 0x41, 0x44, 0xc5, 0x4e, 0x82, 0xae, 0x43, 0xe6, 0xc7, 0xf9, 0x55, 0x15, 0x47, 0x90, 0x8e, 0xb8, 0xbe, 0x4d, 0x2c, 0x9b, 0x13, 0x8e, 0xe6, 0x35, 0x38, 0x8c, 0xe5, 0x92, 0x53, 0xe8, 0x10, 0x90, 0x1b, 0x87, 0x8c, 0x4e, 0x84, 0xa0, 0x83, 0xe2, 0x9e, 0x13, 0x25, 0x4a, 0xba, 0xfd, 0xed, 0xa5, 0xd0, 0x89, 0x26, 0xa4, 0x1d, 0x09, 0xad, 0x3b, 0x10, 0x45, 0xf8, 0x9c, 0x67, 0x12, 0x57, 0x65, 0x96, 0x27, 0x7a, 0x18, 0x68, 0x2d, 0x34, 0xcd, 0xe8, 0x15, 0x7e, 0x23, 0x82, 0xae, 0xbf, 0x7c, 0x66, 0x77, 0x4b, 0x6a, 0x2d, 0xb2, 0x29, 0x64, 0xbf, 0xb9, 0x19, 0xbe, 0x74, 0x95, 0xd5, 0xd8, 0x79, 0xcd, 0x98, 0x95, 0x76, 0x7c, 0xdd, 0x0e, 0x6d, 0xa6, 0x69, 0x88, 0xe6, 0xcc, 0x8b, 0xa4, 0x49, 0xbe, 0xa3, 0xd6, 0x8b, 0xb1, 0xe1, 0x18, 0x0c, 0x91, 0x4f, 0xe0, 0xc0, 0x99, 0x12, 0x4f, 0x8e, 0x20, 0xed, 0xab, 0xf5, 0xb6, 0x06, 0x0f, 0xf5, 0x6f, 0xed, 0x61, 0x2d, 0x7f, 0xda, 0x85, 0x41, 0x07, 0x36, 0xd0, 0x7e, 0x2f, 0x5d, 0xc0, 0xc1, 0x75, 0xa3, 0xea, 0x94, 0x45, 0x95, 0x33, 0x9b, 0xc9, 0x81, 0x43, 0x2f, 0x02, 0x38, 0x37, 0x48, 0x18, 0x12, 0x96, 0xa0, 0xee, 0x33, 0x87, 0x15, 0xfa, 0x0d, 0x41, 0x4f, 0x54, 0x26, 0xc2, 0xa4, 0x0c, 0x1b, 0xc4, 0x38, 0xc1, 0xe6, 0xed, 0x69, 0x6f, 0x5c, 0x46, 0x6a, 0x89, 0xf9, 0xee, 0x2d, 0x48, 0xe0, 0x10, 0x87, 0x42, 0x1e, 0x12, 0x8f, 0x3e, 0x2f, 0x0f, 0x47, 0x47, 0xc3, 0x88, 0x7e, 0xff, 0xc2, 0x56, 0xf4, 0x36, 0x8d, 0xe3, 0xc0, 0xbb, 0x87, 0x9a, 0xef, 0x72, 0xd4, 0x9c, 0x6e, 0xa7, 0x60, 0xb5, 0x2a, 0xa2, 0x23, 0x8e, 0x75, 0x7c, 0xa4, 0x24, 0xac, 0x31, 0xbc, 0x78, 0x16, 0xf5, 0x9d, 0x89, 0x10, 0xcc, 0x12, 0x7f, 0x67, 0x55, 0x09, 0x29, 0x06, 0xe6, 0x4e, 0xa9, 0xd1, 0xde, 0x99, 0x6e, 0xd0, 0x37, 0xcb, 0x63, 0x90, 0x5b, 0x75, 0x66, 0xc6, 0x39, 0x9a, 0xfc, 0x36, 0x97, 0xb6, 0x43, 0xd3, 0xaa, 0xfe, 0x28, 0x28, 0xe4, 0xea, 0xd9, 0xf6, 0x0d, 0xf1, 0x7e, 0x1f, 0x95, 0x93, 0x24, 0xc2, 0x29, 0x9d, 0xf9, 0xa8, 0x84, 0xa9, 0xbf, 0xdf, 0x88, 0xe4, 0x7b, 0xa4, 0x8d, 0x14, 0x6d, 0x87, 0xf9, 0xd9, 0x45, 0xc9, 0x10, 0x32, 0x94, 0x09, 0x0e, 0x44, 0x81, 0x1f, 0x73, 0x57, 0xbd, 0x49, 0x9f, 0x22, 0xb9, 0x85, 0x9e, 0x48, 0x16, 0x3d, 0x45, 0x22, 0x5d, 0x29, 0x7e, 0xbf, 0xf0, 0x72, 0xe0, 0x29, 0x40, 0x13, 0x83, 0xea, 0x41, 0x85, 0x12, 0xcf, 0x1b, 0x9b, 0x21, 0xec, 0x23, 0xab, 0xc1, 0xe0, 0x09, 0xee, 0x52, 0x5b, 0x52, 0x29, 0x99, 0xdd, 0x09, 0x8d, 0x13, 0xc0, 0xb2, 0xdc, 0x88, 0x78, 0x80, 0xce, 0xe2, 0x1a, 0xc8, 0xb3, 0x40, 0x1b, 0xb4, 0x59, 0x47, 0x5a, 0x3c, 0x30, 0xb8, 0x61, 0x52, 0xac, 0x48, 0xe8, 0x5d, 0xeb, 0xac, 0x9b, 0xe9, 0x98, 0xf3, 0x1e, 0x9d, 0x0f, 0x18, 0x4d, 0x6d, 0xc2, 0xd8, 0xc8, 0x11, 0xdb, 0xc1, 0xaf, 0xb5, 0x23, 0x8c, 0xaa, 0xf2, 0x22, 0xac, 0x2d, 0xfd, 0x88, 0x27, 0xfa, 0x1e, 0xcb, 0xa5, 0xe7, 0x64, 0x12, 0xc6, 0xe1, 0x98, 0x52, 0xb9, 0x31, 0x6f, 0xb6, 0x0b, 0xfe, 0x03, 0x45, 0xbc, 0x13, 0x84, 0xbf, 0x98, 0xe3, 0x2b, 0xc7, 0xc4, 0xca, 0x70, 0x47, 0x98, 0x96, 0x7d, 0x11, 0xac, 0x46, 0xe2, 0xc2, 0x36, 0x12, 0x8a, 0xec, 0x93, 0xab, 0xee, 0x74, 0x23, 0xc3, 0x88, 0x38, 0x5a, 0xd0, 0x8b, 0xf5, 0x14, 0x0d, 0xd1, 0x69, 0x29, 0xc2, 0x15, 0xb4, 0x42, 0xc6, 0x62, 0x04, 0xeb, 0x42, 0xcb, 0x71, 0xe9, 0xb7, 0x5d, 0x26, 0xcd, 0x43, 0x52, 0xc2, 0xc9, 0x20, 0x87, 0xfe, 0xc3, 0x6d, 0x31, 0x8f, 0xa8, 0x31, 0xcb, 0x4e, 0x03, 0x9d, 0x53, 0x96, 0xce, 0x91, 0xb5, 0xed, 0x87, 0x62, 0x88, 0xe7, 0x87, 0xdb, 0xf8, 0x48, 0x90, 0x81, 0x03, 0x69, 0xa5, 0x1b, 0xe9, 0xdd, 0x1e, 0x72, 0xdd, 0x53, 0xfb, 0x56, 0x01, 0xbe, 0x79, 0xe1, 0x91, 0xb4, 0xe3, 0x00, 0x5e, 0x14, 0xab, 0x2e, 0x7f, 0xec, 0xb9, 0x83, 0x43, 0x9a, 0x03, 0xee, 0x6a, 0x31, 0x5e, 0xbf, 0x94, 0x1e, 0x93, 0x68, 0xf9, 0x0b, 0xb6, 0x84, 0x5b, 0x03, 0xb3, 0x18, 0x39, 0xd7, 0x2a, 0x19, 0x46, 0xc1, 0x7d, 0x2f, 0x19, 0x48, 0x27, 0xb9, 0x26, 0x63, 0x4f, 0x11, 0xed, 0xe1, 0x9c, 0x11, 0x71, 0x08, 0x4c, 0xd6, 0xec, 0x7d, 0x80, 0xc3, 0xc1, 0x64, 0xda, 0xc9, 0xb2, 0xc7, 0x4a, 0xe6, 0x53, 0x3c, 0x25, 0xec, 0xbe, 0xc2, 0x78, 0x84, 0x89, 0xed, 0x9b, 0x72, 0xf5, 0x43, 0x09, 0x1b, 0x68, 0xe5, 0x6e, 0x44, 0x1e, 0x72, 0x02, 0x1c, 0x1b, 0x28, 0x16, 0x7d, 0x64, 0x4c, 0xec, 0x6f, 0x6e, 0xcc, 0xcc, 0xee, 0xd7, 0x24, 0x54, 0xed, 0x54, 0x7e, 0x10, 0x9a, 0xeb, 0x1d, 0x4b, 0xe4, 0x62, 0xfb, 0x24, 0x3a, 0xf7, 0xb1, 0xe4, 0x96, 0x51, 0x98, 0x8e, 0xbb, 0xb7, 0x2e, 0xb8, 0xbb, 0x80, 0xbb, 0x9a, 0xbb, 0xca, 0x34, 0x65, 0xfa, 0x6f, 0x5f, 0xd6, 0x10, 0x35, 0x38, 0x0a, 0x74, 0x45, 0x94, 0x94, 0x41, 0xdf, 0x04, 0xcd, 0x3a, 0x4b, 0xfc, 0x6b, 0x0b, 0x13, 0x34, 0x55, 0xd2, 0x6f, 0x4f, 0xb6, 0xdd, 0x01, 0xbb, 0x50, 0xb5, 0xc2, 0xd8, 0x14, 0x5c, 0x3d, 0x5c, 0xef, 0xd4, 0xfb, 0xf6, 0xe6, 0xe0, 0x3e, 0x31, 0x65, 0x0f, 0xf2, 0x9c, 0xd4, 0xf5, 0xe0, 0x28, 0x6c, 0xbc, 0x25, 0xd1, 0x49, 0xdc, 0xe2, 0x80, 0xc0, 0x26, 0x36, 0x30, 0xf2, 0x07, 0x69, 0x50, 0xa1, 0x0b, 0x6a, 0x69, 0x43, 0xa0, 0x7c, 0x01, 0x55, 0x1d, 0x2c, 0xbf, 0xf2, 0x02, 0x86, 0xd0, 0xa4, 0x81, 0x88, 0x88, 0x7a, 0x3e, 0xd7, 0x4d, 0x5b, 0x54, 0xb1, 0xb1, 0x99, 0x98, 0x23, 0xde, 0xc9, 0x21, 0x7c, 0x37, 0xd3, 0x08, 0x01, 0x3c, 0x45, 0x6c, 0xe2, 0xae, 0xed, 0xb9, 0x6d, 0xf4, 0xa6, 0x2a, 0x82, 0xbe, 0x72, 0x8d, 0x47, 0xe8, 0xc9, 0x47, 0x1c, 0xa1, 0x31, 0x97, 0xd2, 0xcc, 0x0f, 0x1f, 0x17, 0xa6, 0xbd, 0xa0, 0x35, 0xaa, 0xdc, 0x05, 0xfd, 0xb2, 0xec, 0xa3, 0xfd, 0x5e, 0x1a, 0xbf, 0xfa, 0xb9, 0x58, 0x50, 0x9a, 0x1a, 0xb3, 0x07, 0x60, 0x49, 0xe1, 0x8d, 0xdd, 0xe3, 0x1a, 0x0c, 0x25, 0x00, 0x2a, 0xf0, 0x81, 0x12, 0xc3, 0xef, 0x63, 0x11, 0x17, 0x46, 0x9f, 0xd5, 0xa6, 0x46, 0xd7, 0xc3, 0x55, 0x10, 0x37, 0xab, 0xc1, 0x9d, 0x63, 0xf1, 0xd2, 0x01, 0xae, 0xeb, 0x93, 0xf0, 0x8d, 0x8b, 0x41, 0x81, 0x4b, 0x3e, 0xa2, 0x32, 0xfe, 0x13, 0x97, 0x2c, 0xb9, 0x20, 0xf5, 0xc9, 0x03, 0x22, 0x91, 0x54, 0x88, 0x63, 0x9a, 0x10, 0x0f, 0xe1, 0x2c, 0x7b, 0xac, 0xac, 0x21, 0xd3, 0x37, 0x90, 0x2b, 0xda, 0xfc, 0xf4, 0x20, 0xd7, 0xb4, 0x02, 0x94, 0xdd, 0xb5, 0x08, 0xad, 0x4f, 0x65, 0x1e, 0x33, 0xa4, 0xf4, 0x0a, 0xe7, 0x68, 0x4b, 0x60, 0x16, 0x83, 0x3f, 0xee, 0x6d, 0xbe, 0x0b, 0x56, 0x0f, 0x83, 0xfd, 0xfd, 0xe5, 0xe4, 0x6f, 0x24, 0x35, 0xe0, 0xf9, 0x55, 0x77, 0xe1, 0xe5, 0x01, 0x64, 0x88, 0xe3, 0x67, 0x4f, 0xad, 0xfe, 0xb7, 0xb8, 0xa2, 0xcf, 0x78, 0x1f, 0xb8, 0xf1, 0x27, 0x16, 0x05, 0xb5, 0x21, 0x9a, 0x64, 0x16, 0xc3, 0xa3, 0xbc, 0xef, 0xcf, 0xfa, 0x86, 0x6b, 0x11, 0x4b, 0x89, 0xbd, 0x43, 0x7b, 0xe8, 0x12, 0x2f, 0x3b, 0x5f, 0xc4, 0x13, 0xde, 0xca, 0xd1, 0x49, 0x67, 0xe7, 0x8b, 0x27, 0xe7, 0x5c, 0x91, 0x25, 0x06, 0xfc, 0xfd, 0x3d, 0xdf, 0x46, 0xdf, 0x98, 0x11, 0x2e, 0xeb, 0x66, 0x12, 0x21, 0x6e, 0x0e, 0xc7, 0x43, 0x87, 0x87, 0x52, 0xfb, 0x93, 0x05, 0x2c, 0xb1, 0xe9, 0xd9, 0x73, 0xd6, 0xc8, 0x92, 0x85, 0x25, 0x8d, 0x69, 0xcd, 0x29, 0x29, 0xdc, 0xdd, 0x00, 0xd3, 0x98, 0xbd, 0x5e, 0xfa, 0x9c, 0x83, 0xd5, 0x7e, 0x9c, 0x24, 0x53, 0x1f, 0xa3, 0x8a, 0xec, 0x36, 0xfd, 0xe7, 0xd9, 0xa3, 0x54, 0x48, 0xc1, 0x06, 0x19, 0x6d, 0x38, 0x32, 0x26, 0xd8, 0x86, 0xde, 0xa1, 0x24, 0xa9, 0x9e, 0x23, 0x98, 0x9d, 0x12, 0x19, 0xfc, 0xda, 0x5d, 0x6b, 0xab, 0x1f, 0xd9, 0x5c, 0xea, 0x6e, 0x0a, 0xb2, 0x78, 0x57, 0xd0, 0x16, 0x67, 0x7a, 0xe0, 0xbd, 0x29, 0x48, 0x74, 0x48, 0xee, 0x09, 0x42, 0xe9, 0x2e, 0x23, 0xab, 0xc8, 0x81, 0x99, 0x36, 0xa5, 0xb7, 0xd2, 0x3c, 0xbe, 0x25, 0x9c, 0xe5, 0xf3, 0x3d, 0x70, 0x53, 0x28, 0x62, 0xf8, 0x1c, 0xeb, 0xfa, 0xce, 0xfe, 0x56, 0xc4, 0x87, 0xce, 0x37, 0x6b, 0xf0, 0xb2, 0x6f, 0x5c, 0x97, 0x90, 0x98, 0xd5, 0x8d, 0xc6, 0xeb, 0x3f, 0x6b, 0x1c, 0x60, 0xbe, 0x93, 0xf6, 0x16, 0x06, 0xb8, 0xcf, 0xf6, 0x70, 0xa1, 0xe2, 0x94, 0x4d, 0x29, 0x2a, 0x55, 0x7a, 0x8b, 0x8d, 0xd7, 0x35, 0xdc, 0x55, 0x8d, 0x2e, 0xd9, 0xdf, 0xaa, 0xe1, 0xe3, 0x97, 0x41, 0x24, 0x48, 0x24, 0xaa, 0xfc, 0xc4, 0xdf, 0x27, 0xb5, 0x48, 0x8a, 0xc7, 0x32, 0xf9, 0x3f, 0x8b, 0x81, 0x7c, 0xa6, 0xc8, 0xb2, 0x71, 0x6b, 0xcc, 0xea, 0x3d, 0xef, 0xc4, 0xb3, 0x0d, 0x3e, 0xde, 0x96, 0x18, 0x42, 0xaa, 0xec, 0x24, 0x36, 0xc6, 0xf1, 0x4b, 0x5c, 0xba, 0x1a, 0xff, 0xf3, 0x21, 0xa9, 0x4c, 0x64, 0x0a, 0x7e, 0x5d, 0xbc, 0x9d, 0x30, 0x42, 0x5e, 0x02, 0x5c, 0xf0, 0xfa, 0x7e, 0x3d, 0x89, 0xb9, 0xdf, 0x7d, 0xde, 0xba, 0x1b, 0x4b, 0x33, 0xc2, 0x34, 0xae, 0x42, 0x2f, 0x5e, 0x19, 0x82, 0x2e, 0x64, 0x3f, 0xa8, 0x2e, 0x48, 0x28, 0x6e, 0x95, 0x2a, 0x85, 0x94, 0xb1, 0x6a, 0x41, 0x25, 0xf1, 0x11, 0x58, 0xfc, 0x55, 0x6d, 0xec, 0x86, 0x23, 0xfc, 0x96, 0xca, 0xdc, 0x8c, 0xfa, 0xa6, 0x6e, 0x9f, 0x9e, 0x5b, 0xab, 0x14, 0xfc, 0x4c, 0xfa, 0x04, 0xd5, 0x02, 0x4c, 0xeb, 0xc9, 0x74, 0x52, 0x08, 0x25, 0x85, 0xee, 0x06, 0xfc, 0xcf, 0xe7, 0xdb, 0x79, 0x9f, 0xe0, 0xf1, 0x73, 0x40, 0x8b, 0x83, 0x42, 0x7d, 0x1a, 0x4b, 0xd1, 0x61, 0xf6, 0x5a, 0xf5, 0x41, 0xb4, 0x47, 0xfd, 0xfd, 0x45, 0x8b, 0x8b, 0x82, 0x6c, 0x2c, 0xa2, 0x93, 0x75, 0x99, 0xff, 0xca, 0x25, 0xd5, 0xad, 0xd9, 0xed, 0xd8, 0xd4, 0x16, 0x62, 0x33, 0xd2, 0x37, 0xf2, 0xf2, 0x8c, 0x59, 0xcf, 0xc6, 0x06, 0x48, 0x30, 0x64, 0x32, 0xfa, 0xb9, 0x28, 0x06, 0x5c, 0x37, 0xfe, 0xd1, 0x52, 0x91, 0x82, 0xcf, 0xf8, 0xfc, 0x66, 0xfb, 0x2f, 0x6d, 0x14, 0x24, 0x55, 0x54, 0x95, 0x43, 0x53, 0x87, 0xb2, 0x0c, 0xdd, 0x7c, 0x59, 0xc3, 0xf5, 0xbc, 0x42, 0x51, 0xb1, 0x94, 0xd1, 0x97, 0x3f, 0x0e, 0x3f, 0x02, 0x26, 0x20, 0xf5, 0x60, 0xce, 0x22, 0x38, 0xf2, 0x43, 0x85, 0x0b, 0xc2, 0x36 ],
- const [ 0x5b, 0xfe, 0x61, 0x88, 0x8f, 0xb4, 0x87, 0x79, 0xd4, 0xdc, 0x6b, 0xfb, 0xfe, 0x89, 0x1f, 0xed, 0x45, 0xa8, 0x30, 0xb3, 0x45, 0xed, 0xce, 0xd1, 0x49, 0x0d, 0x2c, 0xb8, 0xc8, 0x2e, 0x2a, 0xdf, 0x30, 0x9b, 0x32, 0x16, 0xe3, 0xbd, 0x5f, 0x18, 0x7f, 0x47, 0xe5, 0x5f, 0x63, 0xb0, 0xad, 0x3c, 0x6f, 0xe6, 0x3f, 0x26, 0x0a, 0x41, 0xe5, 0x53, 0x6a, 0xb5, 0x0d, 0x85, 0x10, 0x4d, 0xf0, 0x27, 0x91, 0xd4, 0x71, 0x98, 0x9c, 0xd5, 0x48, 0xc7, 0x39, 0xc7, 0x5f, 0x00, 0x4f, 0x81, 0x7c, 0x05, 0x69, 0xf4, 0x21, 0x61, 0xb9, 0x18, 0xb1, 0xf9, 0x5e, 0x27, 0xd3, 0xe4, 0xe2, 0x0a, 0x1b, 0x7c, 0x07, 0x10, 0xe8, 0xb5, 0xc3, 0xe6, 0x88, 0xae, 0x89, 0xc4, 0xa3, 0x86, 0xca, 0xe4, 0xd6, 0x71, 0xbc, 0x38, 0x9e, 0x0b, 0x5a, 0x5c, 0x78, 0xec, 0xac, 0xca, 0x46, 0x7c, 0x48, 0x4d, 0xf5, 0x08, 0x19, 0xb8, 0x5d, 0x16, 0x5f, 0xd7, 0x68, 0xf6, 0xf7, 0xa6, 0x77, 0x9a, 0xdd, 0xc1, 0x01, 0xa8, 0xef, 0x1c, 0x7d, 0xcc, 0xf3, 0xf4, 0x83, 0x53, 0xdc, 0x05, 0x2e, 0xf6, 0x49, 0xfe, 0xc4, 0xf3, 0x4f, 0x32, 0x99, 0x63, 0x78, 0x90, 0x30, 0xc7, 0x0b, 0xd5, 0xa4, 0xe4, 0x8e, 0x00, 0x46, 0xd1, 0x8a, 0x06, 0x88, 0x4e, 0x8e, 0xc8, 0x1a, 0x57, 0x76, 0x42, 0x52, 0xf9, 0xed, 0x05, 0xd1, 0x65, 0x31, 0xe7, 0x64, 0x43, 0x17, 0xf9, 0x28, 0x48, 0x4e, 0xb9, 0xf2, 0x0b, 0xe7, 0x89, 0xed, 0x14, 0x15, 0x60, 0x85, 0x36, 0x32, 0xc0, 0x84, 0x20, 0x03, 0xe8, 0x7b, 0x2e, 0x3d, 0x4a, 0x64, 0x85, 0x48, 0x3f, 0x85, 0x5e, 0x42, 0xfa, 0x98, 0xa2, 0x47, 0xba, 0x28, 0xb8, 0xf0, 0x44, 0x3e, 0x9a, 0x19, 0x91, 0x3d, 0x2f, 0xe8, 0xc4, 0x0b, 0xd5, 0x0b, 0x5f, 0x71, 0x3c, 0x40, 0xb5, 0xc5, 0x7b, 0x1b, 0xa3, 0xc6, 0x5d, 0x04, 0x7b, 0xc7, 0xfc, 0x7f, 0x41, 0x10, 0x92, 0xb0, 0x1a, 0x81, 0x8b, 0x1e, 0x01, 0x78, 0xdf, 0xb7, 0xbc, 0xf5, 0x9e, 0x14, 0x0e, 0xfc, 0xcd, 0xff, 0x2f, 0x3b, 0x70, 0x32, 0x79, 0xed, 0xe8, 0x62, 0x64, 0xfe, 0x7f, 0x7c, 0xb4, 0x70, 0x42, 0x2f, 0xf1, 0xfd, 0x0f, 0xaa, 0x18, 0xfe, 0xee, 0xa7, 0x90, 0x8b, 0xa4, 0xa8, 0x5f, 0xe4, 0x86, 0x80, 0x9e, 0x0f, 0x8c, 0x16, 0x2a, 0xc3, 0xa6, 0x66, 0x9d, 0x85, 0x53, 0xc8, 0x7d, 0x11, 0x6f, 0x75, 0xb3, 0xfb, 0x4c, 0x47, 0x3e, 0x96, 0x05, 0xc0, 0x28, 0x15, 0x0f, 0x4e, 0xb9, 0xf0, 0x11, 0xcd, 0xec, 0x8a, 0xf6, 0x4e, 0x1f, 0x10, 0x40, 0x17, 0x0e, 0xa4, 0x9f, 0xeb, 0x02, 0xbb, 0xc2, 0x8b, 0x46, 0xc3, 0x6d, 0x7c, 0xdb, 0x0a, 0xcc, 0x0b, 0x6c, 0xdb, 0x07, 0x8f, 0x84, 0xea, 0x16, 0xee, 0xff, 0xf1, 0xd7, 0x62, 0xbf, 0x9c, 0x5d, 0x7d, 0xa0, 0xa3, 0x8b, 0x6b, 0xad, 0x35, 0xe2, 0x78, 0x94, 0x9d, 0x98, 0xd1, 0x57, 0x20, 0xea, 0x8f, 0x45, 0x24, 0xb3, 0xf1, 0x29, 0x98, 0x3c, 0xe9, 0xc1, 0x8f, 0x56, 0xdb, 0x71, 0x2e, 0xa6, 0xa1, 0x39, 0xc9, 0x41, 0xd2, 0xe5, 0x49, 0x79, 0x44, 0x83, 0xd1, 0xf6, 0xcf, 0x1a, 0xa1, 0x08, 0x54, 0x99, 0x3a, 0x3b, 0xfe, 0x0e, 0xc2, 0x2c, 0xc8, 0x18, 0xab, 0x9c, 0x40, 0x9f, 0x90, 0xc3, 0x8a, 0xc2, 0x5f, 0xe6, 0xa7, 0x11, 0xbd, 0x2c, 0xf8, 0xfd, 0xa6, 0xae, 0xfd, 0x8c, 0x54, 0xcd, 0x63, 0x52, 0x63, 0xc8, 0x3e, 0x9c, 0x32, 0x8e, 0x93, 0xee, 0x8c, 0xd0, 0x19, 0xb0, 0x88, 0x5b, 0x40, 0x24, 0xad, 0xa5, 0x73, 0x9b, 0x5a, 0xa5, 0x9a, 0xe9, 0x65, 0xe8, 0xe4, 0x16, 0x03, 0xe2, 0xc3, 0x56, 0xe8, 0x82, 0x38, 0x3b, 0xaf, 0x09, 0x50, 0x2a, 0x7b, 0x1b, 0xef, 0x0c, 0xdf, 0x16, 0xcc, 0x45, 0xfb, 0xa4, 0xbd, 0xea, 0xe8, 0x8c, 0x35, 0x2e, 0x57, 0xce, 0x0a, 0x1e, 0x74, 0xee, 0x7c, 0x8f, 0x11, 0x90, 0x74, 0x54, 0x00, 0x45, 0x09, 0xb4, 0xc0, 0xa5, 0x48, 0x1b, 0x5d, 0x9e, 0x35, 0x0f, 0x91, 0x0b, 0x0d, 0x66, 0x2f, 0x88, 0xce, 0xb6, 0xc1, 0x85, 0xf9, 0x0e, 0x70, 0x9a, 0x97, 0xe3, 0x25, 0x1a, 0x7a, 0x4d, 0xee, 0xeb, 0xc5, 0x74, 0xa3, 0x95, 0xaf, 0x44, 0xc9, 0x98, 0x83, 0x69, 0xb6, 0x03, 0xeb, 0x77, 0xf6, 0x42, 0x6f, 0x68, 0xee, 0x38, 0x39, 0x4c, 0xbf, 0x8e, 0x1b, 0x3c, 0x6e, 0x4a, 0xd3, 0x90, 0x41, 0xa3, 0x8d, 0x52, 0x6c, 0x13, 0xa9, 0xf2, 0xec, 0xaf, 0xbf, 0x3a, 0xb4, 0xb4, 0xe0, 0x85, 0x07, 0x62, 0x1f, 0x2c, 0x25, 0x0d, 0x50, 0x42, 0x29, 0x71, 0x10, 0x81, 0x32, 0x46, 0x06, 0x83, 0xc1, 0x14, 0x68, 0x36, 0x62, 0x49, 0xc0, 0x8a, 0x8f, 0x89, 0xf0, 0x6c, 0xd1, 0x45, 0x73, 0xf8, 0x28, 0x8f, 0xe7, 0xea, 0xad, 0x2c, 0xc8, 0x56, 0x76, 0xeb, 0x7f, 0x9a, 0xba, 0x36, 0x9b, 0x90, 0x35, 0xe7, 0x5e, 0x08, 0xce, 0x5d, 0x7b, 0x75, 0x78, 0xce, 0x1e, 0xe6, 0x56, 0xde, 0x2d, 0x38, 0x22, 0x71, 0xcd, 0x8a, 0xcf, 0xbe, 0x29, 0xf2, 0x6d, 0xa6, 0x6f, 0x6e, 0x4e, 0x43, 0x1a, 0x1e, 0x67, 0xc3, 0x77, 0xb0, 0xf8, 0x77, 0x62, 0x1b, 0x70, 0x27, 0x51, 0x90, 0x8b, 0xa9, 0x95, 0xad, 0xbd, 0xb1, 0xdc, 0xf5, 0xd3, 0xeb, 0xf9, 0x7d, 0xd8, 0x47, 0xe8, 0xe7, 0x35, 0x95, 0x0c, 0x94, 0x1d, 0x51, 0xbc, 0x16, 0x28, 0xc0, 0xfe, 0xe4, 0x3e, 0x3c, 0x92, 0x52, 0xb7, 0xcb, 0x33, 0xc0, 0xc0, 0xf7, 0x19, 0x11, 0x01, 0xda, 0xc2, 0x5f, 0x7d, 0x79, 0xf2, 0xec, 0xb9, 0x53, 0xf9, 0x5c, 0x20, 0x39, 0x34, 0x22, 0xa6, 0x5f, 0xd6, 0x39, 0xac, 0xb4, 0xe8, 0x14, 0x23, 0x6f, 0x8f, 0xd7, 0xf5, 0xea, 0x8e, 0xc7, 0xa0, 0xb4, 0x0b, 0xff, 0x24, 0xe2, 0x96, 0x66, 0x20, 0xa5, 0x67, 0xdd, 0x38, 0x22, 0xe7, 0xbd, 0xb9, 0x7d, 0x73, 0x80, 0x80, 0x37, 0x5c, 0xbe, 0x18, 0xbb, 0x32, 0x5c, 0x22, 0x33, 0x42, 0x00, 0xfa, 0xa0, 0x5d, 0xc7, 0x97, 0x2a, 0xdb, 0x3b, 0xb3, 0xb4, 0xe0, 0x7f, 0x2c, 0xb4, 0xde, 0xcd, 0xab, 0x42, 0x5b, 0x23, 0x83, 0x6f, 0xf5, 0x38, 0xdc, 0xd7, 0xa3, 0xb5, 0x10, 0x7a, 0x3d, 0xa2, 0x55, 0xc7, 0x3f, 0x1e, 0x9d, 0xfa, 0xca, 0x54, 0xba, 0xa8, 0xeb, 0xaa, 0xc6, 0x98, 0x20, 0x3b, 0xc2, 0xd5, 0x18, 0x88, 0x7d, 0x01, 0xbb, 0x6a, 0xb7, 0xec, 0x6a, 0x4c, 0x87, 0x66, 0x88, 0x96, 0xfa, 0x51, 0x39, 0x6c, 0xfd, 0xfa, 0x69, 0x99, 0x7d, 0xa9, 0x11, 0xc6, 0xcc, 0x76, 0xb5, 0xf0, 0x47, 0x5f, 0x32, 0x19, 0x36, 0x98, 0xb6, 0x3d, 0xf3, 0x22, 0x10, 0x87, 0x4f, 0x9f, 0x2a, 0xc5, 0x31, 0x65, 0xd3, 0x1a, 0x80, 0xd1, 0xc2, 0xf2, 0x43, 0xdd, 0xd8, 0x3b, 0x07, 0xf5, 0xa6, 0xd3, 0x81, 0x07, 0x2f, 0x3c, 0x75, 0xda, 0xef, 0x97, 0xd7, 0xa0, 0x1c, 0xd0, 0x2f, 0xce, 0x2b, 0x16, 0x42, 0x2b, 0x96, 0x8e, 0xee, 0x27, 0xdd, 0x48, 0x56, 0x6f, 0xcb, 0x72, 0x3f, 0xbe, 0xfa, 0xcb, 0xba, 0xf6, 0x99, 0x5b, 0x04, 0x6f, 0x6d, 0x62, 0xaa, 0x8f, 0x16, 0x8e, 0xf0, 0x9b, 0x94, 0x70, 0x74, 0xcc, 0x09, 0x31, 0x0f, 0xa6, 0xc0, 0x81, 0xfc, 0x85, 0x6f, 0xd1, 0x3c, 0x79, 0xb9, 0xc2, 0x38, 0x53, 0xf7, 0xdd, 0xa9, 0x00, 0x38, 0x84, 0xb5, 0x16, 0x86, 0x28, 0x5a, 0xad, 0x6c, 0xbd, 0x10, 0x70, 0xb5, 0x6b, 0xaa, 0xf4, 0x75, 0x87, 0x7e, 0x48, 0x4e, 0xc1, 0xc5, 0xcd, 0xec, 0x9f, 0x45, 0x47, 0xd2, 0x2a, 0x2d, 0x35, 0x59, 0xe7, 0x40, 0x5e, 0xf5, 0x08, 0x35, 0xad, 0xbb, 0xe4, 0x5e, 0x3e, 0x20, 0xa5, 0x89, 0xb9, 0x04, 0x40, 0x24, 0xdf, 0xef, 0xab, 0xa4, 0x62, 0x9a, 0x4a, 0x27, 0xfa, 0xb1, 0xaa, 0x57, 0xb5, 0xd7, 0x71, 0x92, 0x8f, 0xeb, 0x95, 0x49, 0x42, 0x89, 0xcd, 0xa6, 0x5f, 0xd4, 0x45, 0x72, 0x9e, 0x73, 0x96, 0x35, 0x72, 0xda, 0xf5, 0x9f, 0xe1, 0xcb, 0xaa, 0x26, 0x93, 0x1c, 0xc5, 0xf1, 0x29, 0xba, 0x0c, 0xf5, 0xd0, 0xee, 0x37, 0x5e, 0x15, 0xdf, 0x60, 0x30, 0xfb, 0x59, 0xb5, 0x2e, 0x4a, 0xcc, 0x70, 0xfb, 0x2b, 0x98, 0x09, 0x7f, 0xf2, 0x87, 0xa9, 0x8c, 0x3b, 0x9b, 0xe3, 0xc1, 0x38, 0x0b, 0x9f, 0xaf, 0x49, 0x88, 0x56, 0x3b, 0xcd, 0xc4, 0x85, 0x43, 0x39, 0x35, 0x5b, 0x85, 0x67, 0x17, 0xb5, 0xbc, 0x30, 0xb0, 0x4d, 0x0b, 0x3c, 0xd7, 0x2e, 0x9f, 0x19, 0xb7, 0x6c, 0x91, 0x8b, 0xd1, 0x11, 0x09, 0x23, 0x40, 0x5a, 0xa9, 0x13, 0x41, 0x24, 0x29, 0x41, 0xf2, 0xa1, 0x3e, 0x9a, 0x5a, 0x4f, 0xc1, 0xa9, 0xaa, 0x2b, 0x0d, 0x68, 0xc2, 0x22, 0xa9, 0x56, 0xf7, 0xc8, 0x27, 0xc9, 0x14, 0x4c, 0x4b, 0x86, 0x9e, 0xac, 0x70, 0x8f, 0x5d, 0x25, 0x28, 0x3c, 0x17, 0xee, 0x23, 0x8d, 0x9f, 0x25, 0x52, 0xbf, 0x0f, 0x0a, 0x4b, 0x1d, 0x51, 0x6b, 0xf0, 0x19, 0xe4, 0x5f, 0x4b, 0x9b, 0xdc, 0x37, 0xbd, 0x99, 0x2b, 0xb2, 0x58, 0xe8, 0x20, 0x70, 0x89, 0x52, 0x2d, 0xa9, 0xfa, 0xe8, 0xed, 0x1f, 0xb6, 0x99, 0x65, 0x51, 0x8f, 0x04, 0x8b, 0xf2, 0xbd, 0x8b, 0x04, 0x99, 0xc7, 0xa9, 0x32, 0xba, 0xa7, 0x85, 0x6e, 0xd5, 0x29, 0xc7, 0x92, 0xed, 0x94, 0xaa, 0xbb, 0x3c, 0x8c, 0x52, 0x4d, 0x25, 0x37, 0x61, 0x37, 0x6a, 0x9f, 0xc5, 0x78, 0x9f, 0x57, 0xd3, 0xe2, 0xdf, 0x62, 0x9a, 0x1d, 0xbd, 0x50, 0x71, 0xf0, 0x7d, 0xaa, 0xd3, 0xbc, 0x85, 0x90, 0x6d, 0x49, 0x0e, 0xa1, 0x74, 0xc5, 0x1f, 0x1b, 0x3c, 0x0a, 0xbc, 0x43, 0x07, 0x20, 0x5b, 0x08, 0x1b, 0x03, 0x97, 0xe3, 0x17, 0xa6, 0x28, 0x01, 0x86, 0x37, 0x13, 0xa4, 0xb5, 0xa5, 0x1e, 0xc7, 0xc2, 0x60, 0x87, 0x01, 0xf6, 0x60, 0xf5, 0xab, 0x54, 0x68, 0xaf, 0x45, 0x72, 0x8c, 0x0c, 0x16, 0x88, 0xf1, 0x2b, 0x13, 0xc7, 0xd4, 0xe3, 0x02, 0xec, 0xcd, 0xfd, 0xdf, 0x14, 0x55, 0xa1, 0x7f, 0xd2, 0x87, 0x0f, 0x73, 0x7f, 0x23, 0x90, 0x2f, 0xd1, 0xd8, 0xab, 0x6c, 0xaf, 0xc3, 0x9b, 0xca, 0x44, 0x33, 0x01, 0xba, 0x53, 0xaf, 0xd7, 0x9b, 0xca, 0x3a, 0xa5, 0x23, 0x99, 0xd5, 0xf7, 0x01, 0xc4, 0x46, 0x0e, 0xc0, 0xb7, 0x18, 0xd6, 0xef, 0xdb, 0xe3, 0x18, 0x7f, 0x66, 0xcd, 0xf1, 0x6c, 0x77, 0x51, 0x83, 0xa0, 0x62, 0x3f, 0xea, 0x14, 0x48, 0x04, 0x71, 0x38, 0xec, 0x2c, 0x06, 0x95, 0xc1, 0x25, 0xec, 0xb0, 0x48, 0x46, 0xb0, 0x32, 0x98, 0x0f, 0x5e, 0x47, 0x3e, 0xb3, 0xf4, 0x44, 0x48, 0xd3, 0x17, 0x8c, 0x9d, 0x8d, 0x05, 0xb4, 0x90, 0xb5, 0xcb, 0xe5, 0xb4, 0x62, 0xb8, 0x82, 0xf1, 0xad, 0x11, 0x0b, 0xd7, 0xb5, 0x06, 0x42, 0x33, 0xe7, 0xe5, 0x8c, 0xe0, 0x7c, 0x8e, 0x99, 0xe0, 0x42, 0x27, 0x47, 0xab, 0xa0, 0x11, 0xc4, 0xc7, 0xd4, 0x1a, 0xf3, 0x99, 0x80, 0xf4, 0x12, 0x7b, 0x65, 0xe6, 0x99, 0x0f, 0x6e, 0xc1, 0x65, 0xd2, 0xf0, 0x16, 0x15, 0xf4, 0x30, 0xa6, 0xb5, 0x67, 0x26, 0x1a, 0x9a, 0x36, 0x80, 0xf4, 0x8c, 0x18, 0xea, 0xc6, 0x2b, 0x45, 0x8d, 0xa1, 0x8b, 0x88, 0xd5, 0xd1, 0x22, 0x95, 0x78, 0xc7, 0xe4, 0x9e, 0xb4, 0x57, 0xac, 0x21, 0xd8, 0x24, 0xde, 0x04, 0x05, 0x58, 0x4a, 0xe3, 0x36, 0x98, 0x54, 0xa9, 0x7e, 0x37, 0x52, 0x5d, 0x91, 0xa9, 0x36, 0x3f, 0x86, 0x3b, 0x6d, 0x14, 0xdb, 0x02, 0x07, 0xbe, 0xba, 0x11, 0x17, 0x0f, 0x7a, 0xef, 0x5d, 0xdf, 0x69, 0x49, 0x22, 0x5c, 0xc9, 0xe3, 0x64, 0xa2, 0x18, 0xd4, 0x33, 0x8c, 0x95, 0xf3, 0x5b, 0xc9, 0xff, 0x8d, 0x43, 0x32, 0xa0, 0x59, 0x15, 0x5a, 0x8a, 0xad, 0x1f, 0x67, 0x21, 0xf1, 0x7a, 0x21, 0xd9, 0x55, 0xe9, 0x49, 0x41, 0xbf, 0x03, 0x2c, 0x41, 0x07, 0x95, 0x78, 0x9f, 0x67, 0x42, 0x4d, 0xc8, 0x2d, 0x6c, 0x97, 0xce, 0xb3, 0x58, 0x9c, 0xad, 0x91, 0x8c, 0xd1, 0xd2, 0x11, 0x7c, 0xf2, 0xde, 0xe4, 0x66, 0x51, 0xa7, 0x13, 0x7b, 0x6f, 0x7f, 0x38, 0x3f, 0xc9, 0xba, 0xed, 0x32, 0xf4, 0x6a, 0x85, 0xb0, 0xec, 0x6d, 0xfa, 0x16, 0xaa, 0xaa, 0x27, 0x26, 0xf4, 0x97, 0x37, 0xad, 0x79, 0xff, 0x5e, 0x62, 0x1d, 0x02, 0xc7, 0x12, 0x92, 0x5d, 0xcd, 0xfa, 0x28, 0xeb, 0x6d, 0x75, 0xe6, 0x6c, 0xfb, 0xd7, 0xd9, 0x86, 0x15, 0x98, 0xac, 0x09, 0xd6, 0xb5, 0x79, 0x77, 0x4b, 0x53, 0xdf, 0xc4, 0x2b, 0xa5, 0x55, 0x5a, 0xc2, 0x11, 0xbd, 0x60, 0x2f, 0x8e, 0x3d, 0x3c, 0xcf, 0x51, 0x4a, 0x56, 0xf9, 0xa8, 0x05, 0x1f, 0xec, 0x26, 0xcb, 0x53, 0x05, 0x00, 0x07, 0x7b, 0x36, 0xb7, 0x4b, 0xb5, 0xb3, 0xf7, 0xa0, 0xb7, 0xee, 0xc0, 0x1a, 0x12, 0xc6, 0xc3, 0xaf, 0xb4, 0xfb, 0x0f, 0x48, 0xb1, 0xe6, 0xec, 0x19, 0x43, 0x67, 0x07, 0x2e, 0x0f, 0x1e, 0xd0, 0x47, 0xa9, 0xde, 0x21, 0xe6, 0x5b, 0x5e, 0x20, 0xa6, 0x22, 0x32, 0x66, 0xce, 0xfa, 0xfa, 0x61, 0x26, 0x5b, 0xda, 0xf6, 0x0a, 0x04, 0x2a, 0x6b, 0xbc, 0xf7, 0x6e, 0x85, 0xff, 0xc5, 0x88, 0xed, 0xe1, 0x0b, 0x2c, 0xd8, 0xd8, 0x3d, 0x95, 0xe7, 0x10, 0xa2, 0x76, 0x4c, 0x04, 0xa0, 0x34, 0x2f, 0x4c, 0x3a, 0x52, 0x50, 0xb5, 0xd7, 0x2d, 0xed, 0x97, 0x45, 0xe9, 0xe6, 0x63, 0xfd, 0xab, 0x1f, 0x7c, 0xa9, 0x08, 0x26, 0x48, 0xe3, 0xbe, 0x16, 0x86, 0x40, 0xa2, 0xbb, 0xe2, 0x8d, 0xda, 0xf6, 0xc6, 0x58, 0x4c, 0x63, 0x74, 0xb3, 0x56, 0x3a, 0x52, 0x34, 0xc0, 0x73, 0x84, 0x40, 0xef, 0x2e, 0xc0, 0x89, 0x5b, 0x51, 0x5e, 0xd6, 0x43, 0x73, 0xaf, 0x03, 0x9f, 0xf9, 0x90, 0x48, 0x56, 0x7e, 0x3f, 0xbe, 0xb1, 0x79, 0x6d, 0x1e, 0x0f, 0x19, 0x94, 0xcc, 0xdb, 0x74, 0x8a, 0x15, 0xbc, 0xe1, 0x57, 0xb5, 0x0b, 0xa2, 0x44, 0x9d, 0x8a, 0xc7, 0x34, 0xf3, 0x53, 0x4e, 0x37, 0x59, 0x0e, 0x8f, 0x5d, 0x72, 0x67, 0xd8, 0xc8, 0xa2, 0xc0, 0x54, 0x05, 0x16, 0x22, 0x31, 0x9d, 0x05, 0x7a, 0x01, 0xe6, 0x35, 0x02, 0x61, 0x1f, 0xc0, 0xfd, 0xd9, 0xbc, 0x18, 0xa7, 0x04, 0xff, 0x49, 0x6c, 0xf1, 0xc8, 0x7e, 0x58, 0xc8, 0xae, 0xc7, 0xcf, 0xb1, 0x4e, 0x19, 0x7e, 0xf1, 0xe3, 0x97, 0x91, 0x56, 0x18, 0x0f, 0x26, 0xd6, 0x1a, 0xc8, 0x02, 0x73, 0xf0, 0x7b, 0x83, 0x62, 0x0f, 0x9f, 0xd6, 0x6b, 0x29, 0xe9, 0x6a, 0x93, 0x47, 0x14, 0xa5, 0xf9, 0x17, 0xde, 0xd5, 0xfe, 0x87, 0x53, 0x69, 0xa8, 0x92, 0x4d, 0x61, 0x49, 0x5a, 0x3c, 0x03, 0x5b, 0x78, 0x23, 0xd0, 0xaf, 0x90, 0xe3, 0xb6, 0xc7, 0x28, 0xbc, 0x87, 0x80, 0xba, 0x11, 0xaa, 0xf3, 0x07, 0x6b, 0x11, 0x9e, 0xaf, 0xc1, 0x6a, 0xbf, 0xff, 0xf7, 0x9a, 0x01, 0x0a, 0xa4, 0x67, 0x5a, 0xfb, 0x18, 0x74, 0x34, 0xa9, 0x9e, 0x73, 0xcb, 0x6c, 0xfe, 0x96, 0xd6, 0x30, 0x46, 0x46, 0x69, 0xc7, 0xca, 0x18, 0x1a, 0x84, 0x6a, 0xfd, 0x63, 0x05, 0x13, 0xb9, 0x47, 0x50, 0x89, 0x96, 0x38, 0x22, 0x63, 0x59, 0x39, 0x83, 0x57, 0x75, 0x40, 0x9e, 0xb7, 0x7f, 0xde, 0xd0, 0x3c, 0xe2, 0x21, 0xff, 0x03, 0xd4, 0xba, 0x2d, 0xd5, 0x88, 0x5b, 0x4c, 0xab, 0xa5, 0x63, 0x54, 0x71, 0xf8, 0xbd, 0x94, 0x0b, 0x65, 0x05, 0x45, 0x96, 0x24, 0xed, 0x65, 0xf0, 0x2a, 0xe0, 0xc3, 0x7a, 0xe4, 0xe5, 0x56, 0x1c, 0x2b, 0xc5, 0xd2, 0x8a, 0x75, 0x70, 0x7d, 0xc6, 0x48, 0x9d, 0x3f, 0xe7, 0xf5, 0xb1, 0xf9, 0x18, 0x82, 0xe2, 0x18, 0xe3, 0xe8, 0x9c, 0x6a, 0xb0, 0x7f, 0x23, 0x30, 0x88, 0xb6, 0x7b, 0x74, 0x1f, 0x07, 0x85, 0x9d, 0x12, 0x2a, 0x6a, 0x40, 0x6d, 0x89, 0x3c, 0x39, 0x70, 0xf5, 0xdb, 0xfb, 0x93, 0x97, 0x16, 0x24, 0xc7, 0x29, 0x13, 0x55, 0xff, 0x66, 0xf1, 0x40, 0xef, 0xbe, 0xab, 0x02, 0x13, 0x4f, 0x40, 0xb4, 0xf4, 0x11, 0x11, 0x3c, 0xa7, 0x50, 0x8a, 0x69, 0x96, 0x60, 0x04, 0x40, 0x83, 0x8c, 0xea, 0x90, 0xc9, 0x4f, 0x1b, 0xcd, 0xe5, 0xc7, 0x90, 0x1a, 0x36, 0x66, 0x3f, 0xa8, 0x01, 0xeb, 0x3f, 0x3f, 0xb8, 0x90, 0x2c, 0x1a, 0x7c, 0x85, 0xcd, 0xf8, 0xe0, 0x9e, 0xf4, 0x70, 0xf0, 0x49, 0xa6, 0x85, 0x72, 0xc2, 0x7c, 0x7a, 0x6b, 0x8a, 0x49, 0xe8, 0xe5, 0x15, 0xfd, 0x0d, 0xf0, 0xc2, 0xca, 0x67, 0xe7, 0x11, 0x85, 0x81, 0xf4, 0x11, 0x4e, 0x0e, 0xd6, 0x17, 0x73, 0x34, 0xe2, 0xb5, 0x92, 0x2a, 0x48, 0xea, 0xfe, 0x05, 0x98, 0x97, 0x64, 0xcf, 0x85, 0x32, 0xaf, 0xda, 0xe8, 0xbe, 0x28, 0x53, 0x08, 0xfb, 0xe2, 0x1a, 0x18, 0xda, 0x55, 0xd1, 0x01, 0x33, 0x49, 0x34, 0x62, 0xba, 0xf6, 0xa8, 0xd5, 0x30, 0x69, 0x16, 0x75, 0xd6, 0x29, 0xf9, 0x9d, 0x27, 0x1b, 0xb6, 0xf2, 0xc6, 0xa3, 0x2d, 0xa3, 0xb6, 0x0c, 0x8d, 0xef, 0xc9, 0x2a, 0x6c, 0xe8, 0x5b, 0x3d, 0x17, 0x77, 0x3f, 0x19, 0x26, 0xa1, 0xfa, 0x84, 0x54, 0x08, 0x2f, 0xe0, 0x8e, 0xb5, 0x5b, 0x0a, 0x4a, 0x14, 0xc3, 0x81, 0x1a, 0x40, 0xaa, 0xcb, 0x81, 0x81, 0xc6, 0x14, 0x05, 0x14, 0xf5, 0x19, 0x85, 0x2a, 0x2d, 0x44, 0xcd, 0x32, 0xb1, 0x18, 0x68, 0x5b, 0x8b, 0xd0, 0xb5, 0x55, 0x36, 0x43, 0x3e, 0x58, 0x9b, 0x0b, 0x44, 0x68, 0x3f, 0xe6, 0x9f, 0xd7, 0xba, 0x5c, 0xc5, 0x0b, 0x6b, 0xa3, 0x28, 0x82, 0x6a, 0xbf, 0xc5, 0x12, 0xbe, 0xed, 0xf9, 0x76, 0xd0, 0x42, 0x97, 0x06, 0x20, 0x90, 0x39, 0xc6, 0x37, 0x89, 0xd3, 0xa2, 0xdd, 0x27, 0x8e, 0xf8, 0x8b, 0x4b, 0xd3, 0x57, 0x23, 0xa4, 0xa5, 0x87, 0xdf, 0xd2, 0x35, 0xc9, 0x87, 0xcb, 0xb0, 0x5f, 0xe8, 0x7e, 0x5c, 0x4f, 0x81, 0xb7, 0xe3, 0x65, 0x7f, 0x43, 0xef, 0x77, 0xec, 0x54, 0xf6, 0xec, 0x23, 0x27, 0x58, 0x7f, 0x87, 0xe3, 0xa7, 0x41, 0x74, 0xc5, 0x45, 0xdd, 0x76, 0x7a, 0x35, 0x20, 0xb9, 0xcc, 0x2b, 0xb9, 0xc1, 0x81, 0xe5, 0x3d, 0x5b, 0x80, 0xbe, 0x6e, 0xd4, 0x36, 0x81, 0xbc, 0x68, 0x38, 0x7b, 0x0c, 0xfd, 0x2a, 0xd4, 0xb9, 0x12, 0xdf, 0x1f, 0xd8, 0xf2, 0xc1, 0x2f, 0xc1, 0x2d, 0x74, 0x2c, 0xcb, 0x48, 0xb6, 0xe7, 0x56, 0xb4, 0x8a, 0x6b, 0x0f, 0xfd, 0x95, 0xd5, 0x6f, 0x44, 0xc8, 0x65, 0x85, 0xef, 0x3f, 0xd4, 0xf6, 0x9f, 0x69, 0xe8, 0x42, 0x62, 0x6a, 0x47, 0x48, 0x2b, 0xbd, 0x89, 0x0d, 0x7f, 0x1e, 0x90, 0xb9, 0x70, 0xa7, 0x1c, 0xe2, 0xcf, 0x39, 0x9a, 0x0d, 0x9e, 0x1d, 0x3d, 0x72, 0xc4, 0xeb, 0x50, 0x00, 0x04, 0xab, 0xcb, 0xa1, 0x30, 0x3b, 0x24, 0xbf, 0x9a, 0xf1, 0x67, 0x07, 0xcc, 0x80, 0x89, 0x6d, 0x79, 0x20, 0xfa, 0x70, 0xb3, 0xe9, 0x79, 0x9f, 0x5d, 0x80, 0x2c, 0x5c, 0xe4, 0xf6, 0xf0, 0xe0, 0x2a, 0xed, 0xee, 0x7f, 0xc3, 0xfd, 0x6f, 0x2d, 0x64, 0x56, 0xf1, 0x42, 0x98, 0xa6, 0x79, 0x7a, 0xb5, 0x3d, 0x2c, 0x40, 0x0f, 0x6f, 0x19, 0x2c, 0x6b, 0x39, 0x5a, 0xca, 0xb7, 0x28, 0x5b, 0x9d, 0xf8, 0x77, 0x79, 0x63, 0x83, 0x77, 0xcf, 0x9b, 0x70, 0x34, 0x4c, 0x45, 0x4c, 0x56, 0x09, 0xe9, 0x0e, 0x45, 0xda, 0xda, 0x4c, 0x91, 0x24, 0xbc, 0xaf, 0x90, 0xee, 0x44, 0xa5, 0x49, 0x3a, 0x3f, 0x55, 0x90, 0x95, 0xd6, 0xd8, 0x73, 0xed, 0x10, 0xa6, 0xd5, 0xa3, 0x98, 0x4e, 0x59, 0xe1, 0xc1, 0x6b, 0x82, 0x2e, 0xc7, 0xd3, 0x18, 0x3f, 0x58, 0x11, 0xcd, 0x10, 0x52, 0x16, 0x20, 0x34, 0xcf, 0x2b, 0x82, 0x6a, 0x5f, 0x2a, 0xb7, 0x70, 0x94, 0xee, 0x80, 0x1c, 0xc4, 0x08, 0x77, 0xa8, 0x0a, 0xb3, 0x3a, 0x4e, 0x8e, 0x0b, 0xcb, 0x14, 0x06, 0x79, 0x37, 0xea, 0x7d, 0x72, 0x76, 0xf2, 0x53, 0x61, 0x93, 0x1f, 0x86, 0xe1, 0x0d, 0x01, 0x2f, 0x30, 0x7c, 0xdf, 0x50, 0xe0, 0x77, 0x07, 0xcc, 0xd0, 0xb6, 0x62, 0xb7, 0x5b, 0x74, 0x4b, 0xd0, 0xcf, 0x17, 0xa1, 0x4c, 0x21, 0x13, 0x1b, 0xd6, 0xdf, 0x0c, 0xdc, 0xd3, 0x65, 0x3b, 0x48, 0xea, 0x54, 0x12, 0x15, 0xc4 ],
- const [ 0xf5, 0x73, 0x04, 0x25, 0x76, 0xd4, 0x7a, 0x37, 0x21, 0x6e, 0x1a, 0x4e, 0x3b, 0x45, 0x68, 0x29, 0x98, 0xab, 0xff, 0x4e, 0xb1, 0x06, 0x3b, 0xf3, 0xf7, 0xd3, 0x35, 0x1e, 0x67, 0xeb, 0xf4, 0x0c, 0x5f, 0x05, 0xe1, 0xd0, 0xb0, 0x7d, 0x7c, 0x3c, 0xf4, 0x54, 0x4e, 0x04, 0x22, 0x77, 0x1e, 0x21, 0x5f, 0x44, 0x68, 0x74, 0x17, 0x4a, 0x0b, 0xac, 0x4d, 0x50, 0x42, 0x69, 0x2f, 0x99, 0xd5, 0xa1, 0xee, 0x67, 0x91, 0x44, 0xcc, 0xbe, 0xf5, 0x1b, 0x77, 0x6a, 0x2e, 0xf6, 0x95, 0x44, 0x46, 0x06, 0xa0, 0xb0, 0x98, 0x88, 0xf4, 0x6a, 0x87, 0xa3, 0x26, 0x83, 0x6f, 0x94, 0x98, 0xa6, 0xdc, 0x08, 0x4a, 0xa0, 0xfa, 0xc9, 0xf3, 0x1f, 0x4d, 0x9d, 0x51, 0xba, 0xa2, 0x6c, 0xbd, 0x32, 0x46, 0xa0, 0x02, 0xf8, 0x75, 0xd1, 0x6f, 0xef, 0x15, 0xa2, 0x2b, 0x72, 0xa5, 0xe6, 0xc9, 0x99, 0x70, 0x08, 0x1c, 0xb8, 0x06, 0xa9, 0x4d, 0x29, 0xec, 0x8a, 0x2a, 0x4c, 0x93, 0xad, 0xc1, 0xcb, 0x87, 0xb7, 0x2e, 0x23, 0xe9, 0x99, 0xb1, 0x60, 0x1f, 0x6f, 0x04, 0x27, 0xca, 0xa8, 0xeb, 0xfa, 0xf8, 0x68, 0x0c, 0xb8, 0x9c, 0x2a, 0x01, 0x63, 0x3b, 0xaa, 0xac, 0x26, 0xe7, 0x02, 0xca, 0x97, 0x71, 0x13, 0xcb, 0x39, 0xdb, 0x26, 0xe2, 0x45, 0x0c, 0xd3, 0x58, 0xaa, 0xc7, 0x23, 0x25, 0x52, 0xde, 0xf1, 0xc1, 0xa7, 0xa3, 0x96, 0x38, 0x56, 0xa0, 0xc5, 0x7d, 0x52, 0x88, 0xb3, 0x00, 0x1d, 0x6d, 0x7b, 0x82, 0x43, 0x32, 0xc2, 0x28, 0x27, 0x44, 0x96, 0xcf, 0x01, 0x85, 0x9c, 0xa0, 0x28, 0x89, 0x6b, 0xe4, 0x8d, 0x05, 0x33, 0x19, 0x88, 0x84, 0xa2, 0x45, 0xd8, 0x5c, 0x08, 0x8a, 0xe5, 0xe1, 0xb9, 0xfb, 0x47, 0xd8, 0xb3, 0xae, 0x8c, 0x2f, 0x80, 0x12, 0x36, 0xeb, 0x5e, 0x83, 0x04, 0x61, 0x9e, 0x1c, 0x73, 0xa9, 0x4a, 0xcd, 0x83, 0x50, 0x0a, 0xad, 0xbe, 0x4d, 0x48, 0x91, 0x77, 0x36, 0x93, 0xdd, 0x50, 0xb4, 0x41, 0x9a, 0xff, 0x35, 0x59, 0xc9, 0x51, 0xe0, 0xb0, 0xf7, 0x6e, 0xce, 0x51, 0x12, 0x60, 0x77, 0x22, 0x7b, 0xcf, 0x6a, 0xc5, 0x5c, 0x0e, 0x42, 0xbd, 0x3c, 0x5c, 0xd5, 0xd2, 0xd1, 0x63, 0xae, 0xb6, 0x15, 0x05, 0xbe, 0xe8, 0x9c, 0x58, 0x4e, 0xd9, 0x24, 0xef, 0x38, 0x4e, 0x6e, 0x5c, 0x57, 0x05, 0x4c, 0xf2, 0x3c, 0x9b, 0xfc, 0xd0, 0x22, 0xad, 0xb4, 0x1b, 0x24, 0x3e, 0x7e, 0x8a, 0xae, 0x58, 0x46, 0x28, 0x32, 0xf6, 0x31, 0x55, 0x1c, 0x22, 0x31, 0x0e, 0x07, 0x5b, 0xd7, 0x6f, 0x31, 0x39, 0x68, 0x76, 0x2c, 0x54, 0x32, 0x0a, 0xd7, 0x61, 0x20, 0x3c, 0x8d, 0x9e, 0x8d, 0xcc, 0x9c, 0x71, 0x56, 0xef, 0xf9, 0x4b, 0x33, 0x4f, 0x32, 0xd3, 0x47, 0x54, 0xa3, 0x41, 0xf5, 0xa2, 0xed, 0x07, 0xf6, 0xe3, 0xa4, 0xb7, 0xa8, 0xc6, 0x48, 0x21, 0xa9, 0x47, 0x77, 0xbb, 0xa5, 0x32, 0x60, 0x47, 0x6c, 0xe2, 0x7b, 0xaf, 0x48, 0x4f, 0x78, 0x34, 0x8d, 0x48, 0x75, 0xc7, 0x71, 0xfc, 0x73, 0xb7, 0x1e, 0xbf, 0x0b, 0x8d, 0x06, 0x0b, 0x5d, 0x35, 0x77, 0xc5, 0x4a, 0x5e, 0x6f, 0xc2, 0xe3, 0x22, 0xb1, 0x8a, 0x20, 0xea, 0x18, 0x5c, 0xd6, 0x8c, 0x2c, 0x72, 0xe3, 0xb7, 0xf3, 0x85, 0xab, 0x91, 0x0a, 0x94, 0xc9, 0x9e, 0xf3, 0xe2, 0xfe, 0xe4, 0xb1, 0x3e, 0x6d, 0x4d, 0x92, 0x86, 0x0b, 0x4c, 0x4d, 0x6e, 0x51, 0xc3, 0x4c, 0x7e, 0x34, 0x25, 0x4b, 0x5a, 0x56, 0xd8, 0x22, 0x46, 0x7e, 0xdd, 0xdf, 0xe9, 0x46, 0xb2, 0x18, 0x51, 0x13, 0x77, 0x80, 0x38, 0x4a, 0x51, 0xb7, 0x86, 0xc1, 0x0c, 0x67, 0x17, 0x74, 0x04, 0x8c, 0xbd, 0x7a, 0x45, 0x13, 0x89, 0x37, 0xf1, 0xa7, 0x46, 0xd2, 0xe2, 0xc8, 0x47, 0xe9, 0x91, 0x1d, 0x63, 0x84, 0x36, 0x0b, 0x3d, 0x48, 0x31, 0x86, 0xc9, 0xee, 0xa9, 0x27, 0x0b, 0xf3, 0x73, 0x7f, 0x22, 0x90, 0x35, 0xac, 0x86, 0xec, 0xcb, 0x29, 0x8e, 0x91, 0xe9, 0xeb, 0x35, 0x1c, 0x02, 0xa9, 0x1d, 0x39, 0x69, 0x7b, 0xd4, 0xcf, 0xb7, 0xa6, 0x57, 0x78, 0x6c, 0xb6, 0xd4, 0x34, 0xd9, 0xce, 0xb4, 0x5e, 0x3d, 0x3d, 0xd9, 0xdf, 0x2e, 0x51, 0x24, 0xa1, 0x3a, 0x70, 0x3b, 0x47, 0xcf, 0x64, 0x89, 0x1b, 0x58, 0xf7, 0x86, 0x47, 0xa9, 0xc0, 0x38, 0x49, 0x9d, 0x3c, 0xfa, 0xa1, 0xfd, 0x21, 0x7c, 0xcc, 0xa4, 0xee, 0x0b, 0x76, 0xe1, 0xc7, 0x12, 0xec, 0x1d, 0x80, 0xe1, 0xd0, 0xbe, 0xf8, 0xae, 0x10, 0x4b, 0xa8, 0xd9, 0x18, 0xd0, 0x7b, 0x75, 0x47, 0x84, 0xe0, 0x03, 0xa0, 0xa9, 0x1e, 0x80, 0xc3, 0xb4, 0xe9, 0xa3, 0x1b, 0xae, 0x32, 0x60, 0x58, 0xda, 0x43, 0xb0, 0x20, 0x98, 0x0a, 0x94, 0x01, 0x89, 0xb5, 0x57, 0xab, 0xf4, 0x80, 0x14, 0x5c, 0x68, 0xcb, 0x79, 0x9b, 0xa3, 0x70, 0xca, 0x29, 0xb3, 0x53, 0x29, 0x35, 0x5b, 0x3b, 0x14, 0xcf, 0xb8, 0xe0, 0x2f, 0x9f, 0x24, 0x45, 0x44, 0xd7, 0x5b, 0x47, 0x88, 0x66, 0xdd, 0x76, 0x20, 0x6f, 0x93, 0x25, 0xe3, 0xf9, 0xb4, 0xbd, 0x62, 0xe8, 0xea, 0x57, 0x25, 0x2c, 0xb1, 0x89, 0x38, 0x38, 0x00, 0x7f, 0xe7, 0xb5, 0x2c, 0x4e, 0xc5, 0x78, 0x09, 0x86, 0xf3, 0xb2, 0x52, 0x06, 0x9e, 0x67, 0x4b, 0x15, 0xca, 0x22, 0xa4, 0xae, 0x4e, 0xe6, 0xa1, 0x1a, 0x20, 0x67, 0x78, 0xc5, 0xd3, 0x7a, 0xfb, 0x4a, 0x5e, 0xcb, 0x76, 0xd0, 0x1f, 0xce, 0xdb, 0x99, 0x20, 0xf8, 0x1c, 0xd8, 0x98, 0x2e, 0xd9, 0xc3, 0xb5, 0x7e, 0x3b, 0xea, 0x98, 0x0d, 0x20, 0xc7, 0xa2, 0x50, 0x78, 0x96, 0xee, 0x7f, 0xee, 0x67, 0x1e, 0x47, 0xcc, 0x71, 0x5b, 0xc0, 0x18, 0xa9, 0x97, 0x9e, 0x03, 0x93, 0x15, 0xab, 0x85, 0x58, 0x2c, 0x75, 0x41, 0x1a, 0x48, 0x43, 0xae, 0x84, 0x31, 0x4e, 0x78, 0xa5, 0x90, 0x2e, 0x24, 0xfe, 0xaf, 0x93, 0xf4, 0xd9, 0x80, 0x35, 0x0a, 0xdd, 0xe1, 0x0e, 0xcf, 0xe0, 0x1e, 0xc6, 0x96, 0xfc, 0xb7, 0x6f, 0x7d, 0xe5, 0x64, 0x72, 0x94, 0x79, 0x57, 0xc9, 0x42, 0x99, 0xc1, 0x6f, 0xe4, 0x38, 0x97, 0x15, 0xb6, 0xb1, 0x96, 0x17, 0xf7, 0x5e, 0x85, 0xae, 0x48, 0x66, 0xba, 0x67, 0x56, 0xd6, 0xdf, 0xd4, 0xb8, 0xf4, 0xf6, 0x81, 0x1b, 0xd0, 0x9b, 0x29, 0x9c, 0x1b, 0x89, 0x2a, 0x75, 0x3c, 0x60, 0x37, 0xdc, 0xa1, 0xa6, 0x4d, 0x28, 0x53, 0x0b, 0xe8, 0x36, 0xce, 0xf1, 0x76, 0x0b, 0x0f, 0x2b, 0x0c, 0xba, 0xee, 0x05, 0x58, 0x88, 0xae, 0x85, 0xd7, 0x4f, 0xd3, 0xf1, 0x47, 0x20, 0x33, 0x91, 0x60, 0x2c, 0x50, 0xb6, 0xbf, 0xe5, 0xe5, 0xfc, 0x23, 0x60, 0xbf, 0xcb, 0xdb, 0xfe, 0xce, 0x24, 0x7f, 0x4b, 0x7c, 0x9a, 0xdf, 0x26, 0x3d, 0x9e, 0x39, 0x23, 0x68, 0x00, 0xaf, 0x2d, 0x45, 0xb3, 0xf7, 0x70, 0x67, 0xd1, 0x55, 0x76, 0x3c, 0xde, 0xc6, 0x8f, 0xe2, 0x51, 0x7e, 0x77, 0x3c, 0x50, 0x95, 0x33, 0x46, 0xbc, 0xfe, 0x3c, 0xa5, 0x6d, 0xb8, 0xdf, 0x83, 0xbf, 0x48, 0xe4, 0x99, 0x4d, 0x66, 0x6e, 0x8d, 0xfc, 0xf7, 0x22, 0x7f, 0x3c, 0x3b, 0x8b, 0xdf, 0x8a, 0x48, 0xbd, 0x81, 0x39, 0xb7, 0x39, 0xf3, 0x73, 0x9d, 0x11, 0x0e, 0x7b, 0xbd, 0x4d, 0xcb, 0x34, 0xfb, 0x8c, 0x58, 0xe7, 0x14, 0xef, 0x6b, 0x41, 0x8d, 0x32, 0xd7, 0x9b, 0xe9, 0x1c, 0x5d, 0x7f, 0x1f, 0x1a, 0xc4, 0x67, 0x4b, 0x27, 0x2b, 0xc7, 0xa4, 0xee, 0x9f, 0x4e, 0xae, 0x33, 0xe9, 0x69, 0xb1, 0x6f, 0xa9, 0x0a, 0x69, 0xba, 0xa9, 0xa7, 0xff, 0xee, 0x6b, 0x85, 0x38, 0x0a, 0x04, 0x36, 0xed, 0xd4, 0x2d, 0x61, 0xbb, 0xc3, 0x98, 0xc1, 0xfb, 0x1b, 0x80, 0x70, 0xf4, 0x5a, 0x84, 0x66, 0x50, 0xd3, 0xb5, 0x3c, 0xcd, 0x99, 0xee, 0x36, 0x35, 0x9e, 0x64, 0x81, 0x90, 0x1c, 0x7d, 0xb9, 0x98, 0x34, 0xe6, 0xaf, 0x6d, 0xd6, 0xe0, 0x68, 0x8a, 0xe0, 0xda, 0x69, 0xf8, 0x8a, 0x45, 0x31, 0xc1, 0x01, 0xa4, 0x08, 0xa8, 0x52, 0xe2, 0xf7, 0x17, 0x8a, 0xe9, 0x18, 0x59, 0x1b, 0x70, 0x10, 0x09, 0x82, 0x14, 0xd9, 0xcb, 0x27, 0xab, 0xc5, 0x3a, 0x85, 0xd5, 0xbf, 0x21, 0x8a, 0xd3, 0xd4, 0xed, 0x41, 0x9d, 0xf3, 0x62, 0xae, 0x2e, 0xf1, 0x8e, 0xfa, 0x23, 0xd0, 0xfb, 0xd0, 0x84, 0x41, 0x29, 0x06, 0xe2, 0x67, 0x3b, 0x80, 0xa2, 0xde, 0xf1, 0x51, 0x98, 0xfc, 0xd6, 0x24, 0xd8, 0x57, 0xbb, 0xdb, 0xc8, 0x87, 0x63, 0x75, 0x7a, 0x2d, 0x80, 0x35, 0x39, 0x34, 0xde, 0x00, 0x62, 0x56, 0xdf, 0x08, 0x76, 0xe2, 0x27, 0xa7, 0x6c, 0xbd, 0x98, 0x8d, 0x4c, 0xa7, 0x81, 0x1e, 0xf9, 0xc0, 0x12, 0x16, 0x4e, 0x4b, 0x14, 0x6f, 0x6d, 0xb1, 0xd7, 0x84, 0x54, 0xc9, 0x6b, 0x76, 0xb2, 0x56, 0x12, 0xcf, 0xf8, 0xd2, 0xf6, 0x65, 0xb2, 0x6a, 0x18, 0x82, 0x18, 0x49, 0x89, 0x41, 0xe0, 0x19, 0xdc, 0x3b, 0x57, 0xc7, 0xdb, 0x63, 0xb0, 0x87, 0x79, 0x2f, 0x9c, 0x19, 0x08, 0xf9, 0x1b, 0x4a, 0xac, 0xa4, 0x91, 0xbd, 0x10, 0x82, 0x1c, 0xeb, 0x57, 0x75, 0x25, 0x69, 0x56, 0x55, 0x35, 0x6a, 0x00, 0x92, 0x0a, 0x84, 0x21, 0x1b, 0xeb, 0xb7, 0x50, 0x7e, 0x38, 0xab, 0x1e, 0x50, 0x45, 0x39, 0x94, 0xcf, 0x68, 0x2d, 0xdd, 0xc6, 0x51, 0x4a, 0x3f, 0xb1, 0x9a, 0x8f, 0x50, 0x22, 0x9f, 0xb9, 0x66, 0x63, 0x90, 0x09, 0x4f, 0x5d, 0xc5, 0x47, 0x42, 0xb8, 0x51, 0x07, 0x16, 0x44, 0xd9, 0x2b, 0xb2, 0x98, 0xa7, 0xa9, 0xc5, 0xf9, 0xfa, 0x8f, 0xb7, 0x7d, 0xa0, 0x44, 0xdf, 0x6f, 0xc7, 0x10, 0xf6, 0xf6, 0x11, 0xde, 0xcb, 0xf2, 0xe6, 0x41, 0x39, 0x27, 0x0e, 0xb6, 0x56, 0x9d, 0x7f, 0x29, 0xee, 0x46, 0x73, 0xba, 0x30, 0xe2, 0xbe, 0xc0, 0xa6, 0x20, 0x5f, 0x0e, 0x6b, 0x06, 0x55, 0x76, 0x98, 0x92, 0xb4, 0x8c, 0xff, 0xa2, 0xf7, 0xac, 0x1c, 0x11, 0x98, 0x3f, 0x48, 0x23, 0xde, 0x39, 0x30, 0x23, 0xf7, 0xe6, 0x86, 0x4a, 0x46, 0xe7, 0xf6, 0xe3, 0xfe, 0x78, 0x5c, 0xad, 0xf0, 0xf4, 0x34, 0x81, 0xa1, 0x9a, 0x51, 0x34, 0xa0, 0x91, 0xd3, 0xbf, 0x16, 0x2a, 0x53, 0x9d, 0x9f, 0x66, 0x60, 0x75, 0x58, 0xb8, 0x2f, 0xf9, 0x3a, 0x0b, 0x8e, 0x0e, 0xa6, 0x07, 0x1a, 0x2d, 0x40, 0x90, 0xb2, 0x09, 0x01, 0x90, 0x2b, 0x72, 0x88, 0xf7, 0x45, 0x79, 0xb1, 0x00, 0xde, 0xd5, 0x69, 0xb5, 0x66, 0x85, 0xc1, 0xb5, 0x93, 0xb7, 0x41, 0x35, 0x56, 0xe9, 0x7e, 0x45, 0x0d, 0x4e, 0xee, 0x54, 0xfa, 0x73, 0xfc, 0xf7, 0xf4, 0x22, 0x58, 0xe6, 0x5c, 0x87, 0x91, 0x47, 0x53, 0x91, 0xe5, 0x30, 0x2a, 0x9b, 0x58, 0x67, 0x1a, 0x4c, 0x03, 0x6c, 0x36, 0xbb, 0xaf, 0xb9, 0x9d, 0xd7, 0xa2, 0x48, 0xf4, 0x07, 0xb9, 0x56, 0x14, 0x0d, 0xb7, 0x67, 0xff, 0x30, 0xdd, 0x8a, 0x19, 0x9a, 0xbb, 0xde, 0x95, 0xff, 0x45, 0x55, 0x2d, 0x7f, 0x29, 0xb8, 0x16, 0xce, 0x60, 0xeb, 0x33, 0x92, 0x03, 0x73, 0x89, 0x0c, 0x61, 0x35, 0xf3, 0xfb, 0x4e, 0x80, 0x16, 0xbd, 0xbe, 0x4e, 0x98, 0xb8, 0x92, 0xc7, 0x8d, 0xf8, 0xb1, 0x07, 0x32, 0x19, 0x5b, 0x21, 0xde, 0x68, 0xba, 0x64, 0x35, 0x45, 0xba, 0xdd, 0x9f, 0xcc, 0x1b, 0x1c, 0xf9, 0xb4, 0xc5, 0x3b, 0x8a, 0x76, 0x5b, 0x1d, 0x38, 0xb2, 0x12, 0xf4, 0xfb, 0xcf, 0xc4, 0x06, 0x93, 0xe3, 0x40, 0xb0, 0x76, 0xd2, 0xe5, 0xab, 0x0d, 0xb9, 0x6f, 0x8e, 0x1f, 0x8d, 0x10, 0x94, 0x8e, 0xff, 0xc3, 0xa0, 0x41, 0xa3, 0xdd, 0x7e, 0x61, 0x52, 0xe4, 0x6c, 0xc8, 0xcd, 0xa5, 0xd9, 0xb6, 0xa2, 0x81, 0x6c, 0xc6, 0x54, 0x08, 0x48, 0x21, 0xb6, 0xc9, 0x8f, 0xf2, 0x98, 0x67, 0x24, 0x1a, 0xa5, 0xf0, 0xb6, 0x24, 0x8c, 0x6b, 0xfa, 0x7b, 0x5e, 0xb0, 0x37, 0xda, 0x37, 0x7d, 0x08, 0x05, 0x21, 0xc5, 0x5e, 0xb7, 0x35, 0x4b, 0xc4, 0xdb, 0x04, 0x70, 0xe7, 0xfe, 0x35, 0x49, 0x55, 0x05, 0x6f, 0xf5, 0x85, 0x1b, 0x79, 0x2e, 0x18, 0xee, 0x9f, 0x1d, 0x5e, 0x1b, 0x58, 0x73, 0x1c, 0xe6, 0x27, 0xb5, 0x8c, 0x2f, 0xbf, 0xd7, 0xa6, 0xa2, 0x6a, 0x0d, 0x9e, 0x2d, 0xab, 0xde, 0xae, 0xb7, 0x22, 0x7a, 0x15, 0x0f, 0xb1, 0x4d, 0x60, 0x22, 0xdd, 0xd4, 0xe8, 0x72, 0x77, 0xb0, 0x9c, 0xc3, 0x7b, 0xf9, 0x00, 0x17, 0x38, 0xd4, 0x76, 0xdd, 0xb1, 0x48, 0xbd, 0x66, 0x44, 0x4d, 0xb7, 0x98, 0x89, 0x26, 0x6f, 0xe6, 0x7d, 0xf1, 0x5a, 0x80, 0xe0, 0x7d, 0xdd, 0xc6, 0xdb, 0x5b, 0x10, 0x03, 0xe6, 0x38, 0xc2, 0x58, 0xe9, 0x6a, 0xbd, 0xf6, 0xa1, 0xc8, 0x4a, 0x90, 0x46, 0xbf, 0xf8, 0x11, 0x6b, 0xa2, 0x9a, 0x8a, 0x25, 0x42, 0x8f, 0x6e, 0x6f, 0xbf, 0x46, 0x01, 0xcd, 0x9d, 0x00, 0x0e, 0x30, 0x1a, 0xd8, 0xd8, 0x1a, 0xbf, 0x01, 0x54, 0x02, 0x36, 0x50, 0x95, 0xfa, 0x5b, 0xfa, 0x88, 0x8f, 0x95, 0x9e, 0xe1, 0xf1, 0x67, 0x86, 0x55, 0x54, 0x42, 0x2a, 0x0a, 0x95, 0x9e, 0xf5, 0x4c, 0x21, 0x49, 0x4c, 0x81, 0x13, 0xfe, 0xcd, 0x5f, 0x9c, 0x39, 0xd4, 0x5c, 0xa8, 0x4a, 0x44, 0x66, 0xbe, 0xa8, 0x84, 0xd5, 0x28, 0x89, 0xc7, 0x9e, 0x55, 0xaf, 0x91, 0xc9, 0x7b, 0x85, 0x77, 0x25, 0x80, 0x6a, 0x26, 0x3a, 0x1b, 0x4d, 0xa6, 0x7f, 0x37, 0x7a, 0xe0, 0xcd, 0x98, 0xb3, 0x5e, 0x14, 0xc0, 0x83, 0x53, 0x4d, 0x14, 0xcf, 0xdb, 0xaf, 0x3b, 0xae, 0x83, 0x26, 0xc7, 0x7b, 0x0c, 0x01, 0x17, 0x28, 0x6c, 0xea, 0x7b, 0xd4, 0x16, 0x1c, 0x9a, 0xa0, 0x7b, 0xd0, 0x11, 0xbf, 0xd1, 0xf8, 0x5d, 0xcd, 0x13, 0x30, 0xfb, 0x62, 0x49, 0xf2, 0xcd, 0xe6, 0x09, 0x09, 0xc0, 0xa7, 0x3e, 0x48, 0xac, 0x28, 0x28, 0x7b, 0x7c, 0xbd, 0xa4, 0x9e, 0x8e, 0x54, 0xae, 0x4d, 0x5d, 0x96, 0x24, 0x7c, 0x5d, 0x2f, 0xcc, 0x68, 0x26, 0x69, 0x99, 0xcd, 0xd5, 0x00, 0x2a, 0x5a, 0xaf, 0x32, 0x94, 0x62, 0x08, 0x15, 0x61, 0xd4, 0x64, 0x2d, 0xd9, 0x6d, 0xdb, 0x3e, 0x80, 0x2c, 0xc2, 0x5f, 0xdf, 0x07, 0x87, 0x50, 0x87, 0xdc, 0xdd, 0x0d, 0x54, 0xaa, 0x19, 0xa3, 0xef, 0x01, 0xdc, 0x43, 0x96, 0xb7, 0xf3, 0x95, 0x20, 0xdd, 0x7b, 0x4e, 0x3b, 0xf1, 0x49, 0x05, 0xf9, 0x55, 0x89, 0x43, 0x8b, 0x00, 0xa4, 0xd9, 0x4c, 0x74, 0x68, 0x76, 0x01, 0xf0, 0x63, 0x78, 0x5e, 0xe6, 0x8f, 0x03, 0xcd, 0xaf, 0x35, 0x50, 0x6c, 0x7e, 0x0b, 0x48, 0x54, 0x93, 0x9f, 0x52, 0x21, 0xb1, 0xf9, 0x69, 0xaf, 0xd1, 0x7c, 0x71, 0x21, 0x18, 0x0e, 0xcb, 0x28, 0x07, 0x79, 0x27, 0x82, 0xf2, 0x10, 0x99, 0xc0, 0xb3, 0x95, 0xf0, 0x4d, 0x9f, 0x5a, 0x43, 0xac, 0xb9, 0xa7, 0xcc, 0x01, 0x26, 0x5c, 0xf9, 0xd3, 0xe1, 0xd7, 0xc1, 0x10, 0xb0, 0x18, 0x35, 0x51, 0x57, 0x23, 0x57, 0x60, 0x0b, 0xa6, 0x2e, 0xf8, 0x29, 0xdc, 0x1a, 0xcb, 0x28, 0xb1, 0x66, 0xc9, 0xcd, 0x27, 0x1c, 0xa0, 0x9d, 0xf8, 0x1d, 0x7f, 0x98, 0x7d, 0x70, 0x20, 0x24, 0xce, 0xdb, 0x05, 0x48, 0x2b, 0xb0, 0x02, 0x1a, 0x9b, 0xea, 0xfb, 0x7b, 0xd2, 0x78, 0xef, 0x01, 0x58, 0xd9, 0x35, 0x35, 0xe8, 0xe9, 0x06, 0xff, 0x17, 0xfb, 0x3c, 0x5e, 0x36, 0x27, 0x59, 0x5c, 0x78, 0xe6, 0xcb, 0x42, 0x58, 0xdc, 0x6f, 0x08, 0x35, 0xf4, 0x53, 0x0f, 0x3f, 0xb2, 0xc0, 0x13, 0x97, 0xc5, 0x78, 0x5b, 0xb2, 0xdc, 0x3c, 0x32, 0xff, 0xbb, 0x91, 0x9b, 0xc9, 0x8e, 0xc4, 0x41, 0x5e, 0x7d, 0x2c, 0xad, 0x71, 0x80, 0xaf, 0xbb, 0xbd, 0x75, 0x87, 0x4f, 0xeb, 0x70, 0x46, 0x44, 0xb6, 0x52, 0x18, 0xa5, 0x4d, 0x9d, 0x49, 0x20, 0xf8, 0x86, 0x07, 0xb7, 0xff, 0x4c, 0x68, 0xb9, 0xc8, 0xc9, 0xaf, 0xf1, 0x3f, 0x47, 0xcb, 0x1d, 0x7a, 0x94, 0x20, 0xa2, 0x9e, 0x59, 0x8a, 0x7d, 0xfc, 0xa7, 0x9f, 0x7d, 0x80, 0xd3, 0x35, 0xaf, 0x4c, 0x84, 0x25, 0x1a, 0xa0, 0x0a, 0x4e, 0xad, 0xfd, 0xf1, 0xdc, 0x76, 0x8a, 0xd6, 0xca, 0x15, 0xb6, 0x7a, 0xa5, 0x6f, 0x1f, 0x15, 0x93, 0xa7, 0xb3, 0xed, 0x95, 0x4a, 0x14, 0x26, 0x09, 0xc9, 0x41, 0xdc, 0x73, 0x2d, 0x74, 0x6f, 0x7c, 0x06, 0x46, 0x1e, 0x3b, 0xa4, 0x19, 0xd8, 0xb4, 0x8a, 0xb7, 0x4e, 0x9e, 0x20, 0x37, 0x4d, 0x6a, 0xa8, 0x21, 0x4b, 0x80, 0x73, 0xd2, 0x40, 0xcc, 0x55, 0x21, 0xb7, 0x79, 0x56, 0x42, 0x24, 0xfc, 0xaa, 0xeb, 0x78, 0x55, 0xe4, 0xb6, 0xf3, 0x91, 0x66, 0xc7, 0x39, 0x94, 0x1c, 0xae, 0xa9, 0x15, 0x6a, 0x8e, 0xea, 0xea, 0x62, 0x7f, 0xc6, 0x86, 0x3b, 0x32, 0x3c, 0xc0, 0xfe, 0xd4, 0xd0, 0xd6, 0x83, 0x34, 0x26, 0xb1, 0x9c, 0x27, 0xcf, 0x6a, 0x90, 0x2c, 0x63, 0x0e, 0xcb, 0x4c, 0xd0, 0x9e, 0xd3, 0x44, 0xf1, 0x5a, 0x7e, 0xe6, 0x63, 0x3f, 0x63, 0xbd, 0x94, 0xcf, 0x8e, 0xf0, 0x1c, 0x10, 0x78, 0x68, 0x51, 0xd7, 0x36, 0x35, 0x15, 0x46, 0xf0, 0x2e, 0xf3, 0x94, 0x95, 0xd8, 0x6b, 0x0c, 0xcd, 0x8a, 0x89, 0x59, 0x2f, 0xce, 0xbd, 0x00, 0xb5, 0x09, 0xe6, 0x2e, 0x6c, 0x5f, 0xb0, 0xb4, 0x70, 0xd1, 0x20, 0x50, 0x18, 0xa8, 0x6d, 0x2e, 0x6e, 0x17, 0x12, 0xae, 0xe2, 0x1c, 0x21, 0x68, 0x3f, 0xa7, 0xda, 0x6e, 0xdd, 0xfe, 0x7c, 0xd0, 0x19, 0x60, 0x5b, 0x66, 0x02, 0xe8, 0x33, 0xc9, 0x55, 0xb5, 0xbc, 0xa3, 0xac, 0x48, 0x7e, 0x29, 0xf2, 0x2d, 0xe7, 0xe5, 0x1a, 0xde, 0x9b, 0xb9, 0x10, 0xe4, 0x0b, 0x21, 0xf0, 0x3f, 0x49, 0xb8, 0x77, 0x08, 0x1b, 0xfe, 0xb7, 0x55, 0x4e, 0x58, 0x0e, 0x5d, 0x4c, 0x58, 0x58, 0xdd, 0xf1, 0x3f, 0x64, 0xba, 0x9b, 0xc0, 0xa5, 0xe7, 0x80, 0x07, 0x2a, 0x89, 0x45, 0xfa, 0xd0, 0x59, 0xcc, 0xbf, 0xb7, 0x4a, 0x4d, 0x7e, 0xf2, 0x6d, 0xa8, 0x68, 0x83, 0x11, 0xf9, 0xf8, 0x86, 0x2e, 0x6d, 0x78, 0xac, 0x04, 0x55, 0xc8, 0xeb, 0xff, 0x79, 0x5b, 0x74, 0xde, 0xaf, 0x82, 0xe6, 0x14, 0xac, 0xed, 0xc1, 0x6e, 0x19, 0x6e, 0x1d, 0xf7, 0xea, 0x01, 0x9c, 0x19, 0xeb, 0x0a, 0x9d, 0x04, 0x9b, 0xdd, 0xb2, 0x54, 0x3e, 0x83, 0x55, 0xed, 0x2e, 0xbc, 0xd6, 0x2a, 0x72, 0x40, 0x98, 0x38, 0x91, 0x4a, 0x7d, 0xbc, 0xa8, 0x57, 0x9f, 0xbc, 0xbb, 0x2b, 0x41, 0xbc, 0x49, 0x16, 0x05, 0x27, 0x23, 0x75, 0x5f, 0xf1, 0x7e, 0x7b, 0x49, 0x7b, 0x46, 0x32, 0x38, 0xb7, 0xb5, 0xbc, 0x4f, 0x8c, 0x25, 0xdf, 0xd3, 0x7c, 0x22, 0xc1, 0xe0, 0x84, 0xc4, 0xef, 0x5a, 0x43, 0x3b, 0xa4, 0x25, 0x5f, 0xac, 0x49, 0x99, 0x25, 0x3c, 0x38, 0x30, 0x6f, 0x6a, 0xc5, 0x82, 0xcb, 0xa1, 0x7f, 0x74, 0xd9, 0x0d, 0xb3, 0xac, 0xf5, 0xaf, 0x32, 0x48, 0x16, 0xac, 0x54, 0xcf, 0xf6, 0xeb, 0x3d, 0x67, 0x74, 0xde, 0x5f, 0x49, 0x36, 0xa0, 0x40, 0x73, 0x92, 0x41, 0x7e, 0x9c, 0xaf, 0x5e, 0x10, 0x6d, 0xe7, 0xf4, 0xce, 0xee, 0x70, 0x75, 0x34, 0x3f, 0x3c, 0x1c, 0x63, 0x88, 0x1d, 0x7e, 0x68, 0x32, 0x2d, 0x63, 0xc1, 0x58, 0x6d, 0xd3, 0x1d, 0x78, 0xac, 0x74, 0x64, 0x6f, 0xab, 0x13, 0xf7, 0xa4, 0x7e, 0x80, 0x39, 0x83, 0x35, 0x9f, 0x4e, 0x2d, 0xbc, 0xbc, 0x23, 0x6d, 0x00, 0x1f, 0xae, 0xef, 0x53, 0xe0, 0x77, 0xac, 0x12, 0xfd, 0x57, 0xa9, 0x85, 0xaa, 0x7f, 0xe1, 0x06, 0xe8, 0xbd, 0x7f, 0x66, 0x59, 0xfb, 0x51, 0x8c, 0x53, 0x09, 0x7a, 0x5f, 0x33, 0x9c, 0x67, 0xe7, 0xf4, 0x96, 0x04, 0xae, 0x00, 0x87, 0x2f, 0x6d, 0x45, 0x74, 0x6d, 0xe4, 0x8c, 0xd8, 0xdb, 0x0a, 0x06, 0xe9, 0x68, 0x66, 0x28, 0x1c, 0x42, 0xbd, 0xb9, 0xeb, 0x8e, 0xed, 0x2a, 0xd6, 0x5c, 0x19, 0x25, 0xa8, 0xda, 0x06, 0x68, 0xfb, 0xc7, 0xc5, 0xd4, 0xfe, 0x2b, 0x93, 0xc1, 0x76, 0x46, 0xfd, 0x95, 0x03, 0xc6, 0x48, 0x95, 0xa5, 0x3d, 0x0f, 0xfb, 0x7e, 0xd1, 0x2e, 0x48, 0xda, 0x36, 0xdf, 0xdb, 0x6c, 0xd9, 0x23, 0xc3, 0xda, 0x5e, 0x64, 0xd2, 0x7d, 0x4d, 0x58, 0xf2, 0x62, 0x08, 0x28, 0xbc, 0x94, 0x01, 0xd2, 0x47, 0x9d, 0x29, 0xcc, 0x3e, 0x4a, 0xac, 0xea, 0x36, 0xaf, 0xdb, 0x81, 0x3e, 0x6b, 0x69, 0xcd, 0xb7, 0x2d, 0xdb, 0x90, 0x66, 0x77, 0x3a, 0xfc, 0xc7, 0xa2, 0x0b, 0xd3, 0xa4, 0x23, 0x81, 0xcd, 0xe7, 0x0c, 0xf0, 0x3a, 0xad, 0xd6, 0x85, 0xe8, 0x9b, 0x5d, 0x35, 0x47, 0x75, 0x2c, 0xf3, 0xcb, 0xec, 0xfb, 0x26, 0x92, 0xb8, 0x76, 0x5a, 0x47, 0xe7, 0x40, 0x35, 0x46, 0x75, 0x38, 0xad, 0x00, 0x1c, 0xfb, 0x79, 0xa1, 0x6d, 0xaa, 0xc5, 0xf1, 0x20, 0xed, 0x2a, 0x78, 0xa9, 0x37, 0xdd, 0xe6, 0x0c, 0x4c, 0x27, 0xb2 ],
- const [ 0x1b, 0xa0, 0x72, 0x89, 0x93, 0xb8, 0xf0, 0x03, 0x8c, 0xd7, 0xaf, 0xac, 0x17, 0xdf, 0xde, 0x8c, 0x71, 0x28, 0x42, 0xe3, 0x27, 0x18, 0x7b, 0x5f, 0x7d, 0xf4, 0x89, 0x91, 0x11, 0xf5, 0x8e, 0xa2, 0xbc, 0x9f, 0xd5, 0x42, 0xb9, 0x4e, 0x14, 0xe2, 0x09, 0x12, 0xee, 0x23, 0x15, 0xbc, 0xbc, 0x8e, 0x96, 0x39, 0x8d, 0x85, 0xb2, 0x1f, 0x6b, 0x79, 0x67, 0x86, 0xe1, 0x5e, 0x2d, 0x19, 0xba, 0x5c, 0xd7, 0x6d, 0x0a, 0xc8, 0xbb, 0x91, 0x73, 0x52, 0x12, 0xe6, 0xa1, 0x80, 0xa2, 0x30, 0x17, 0x5b, 0x9a, 0xee, 0x2e, 0x68, 0xbd, 0xe7, 0x5a, 0xd9, 0xc2, 0x06, 0xb0, 0x05, 0xfb, 0x67, 0xa5, 0x16, 0x36, 0xb2, 0x19, 0x01, 0xe1, 0xa8, 0x94, 0xbc, 0x71, 0xfb, 0xcf, 0xab, 0x04, 0x63, 0x76, 0x5b, 0x44, 0xee, 0x2c, 0x72, 0x8f, 0x98, 0xd0, 0xe6, 0x56, 0x1b, 0xfe, 0x6e, 0xc3, 0x08, 0xd9, 0x36, 0x9f, 0x17, 0x08, 0xd7, 0x72, 0xbb, 0xff, 0x86, 0xec, 0xfa, 0x80, 0x8b, 0x83, 0x7c, 0x61, 0xf6, 0x5e, 0xe2, 0x8f, 0x8d, 0x72, 0x59, 0x53, 0x08, 0xeb, 0x6e, 0xd4, 0x81, 0xcd, 0x24, 0xde, 0x26, 0xdb, 0x43, 0xe1, 0x31, 0xb8, 0xf4, 0x3d, 0x1a, 0x4c, 0x8b, 0xbc, 0x0a, 0x69, 0xa4, 0x60, 0x94, 0xae, 0x71, 0x60, 0xa0, 0xac, 0x52, 0x6d, 0xa7, 0x48, 0xa6, 0x39, 0x26, 0x60, 0xe2, 0x3a, 0x4c, 0xb2, 0xe0, 0xac, 0xf6, 0xf9, 0x79, 0xd5, 0xde, 0x58, 0x55, 0x8c, 0x0f, 0xfc, 0x02, 0xfc, 0x9d, 0xfe, 0x44, 0xa6, 0x92, 0x86, 0xac, 0xa5, 0x2b, 0x36, 0x6c, 0x36, 0x45, 0xc6, 0x6a, 0x77, 0x12, 0xeb, 0x93, 0x6f, 0x10, 0x7e, 0x72, 0x4f, 0x3c, 0xda, 0x01, 0xf7, 0x83, 0x86, 0xbf, 0xbc, 0x79, 0x14, 0x02, 0x69, 0x4d, 0x48, 0x8f, 0x83, 0xfd, 0x7d, 0x68, 0xd2, 0xc6, 0x45, 0xe5, 0x1c, 0xdf, 0x50, 0x06, 0x34, 0x66, 0x8f, 0x08, 0x34, 0x9b, 0x98, 0x36, 0x06, 0x4c, 0x4d, 0x02, 0x29, 0x90, 0xb8, 0x54, 0xb1, 0xb8, 0x3a, 0x22, 0x90, 0x83, 0xe5, 0x41, 0x15, 0x91, 0x26, 0x7b, 0xb2, 0x1a, 0xa7, 0xe1, 0x02, 0xe0, 0x73, 0x62, 0x0a, 0x62, 0x5c, 0x9d, 0xc0, 0x53, 0x9a, 0xf4, 0xc9, 0x4a, 0xb4, 0xe2, 0x87, 0xbb, 0xa4, 0x8e, 0x53, 0x26, 0x36, 0xa0, 0x07, 0x8e, 0xb1, 0x53, 0xc0, 0x2d, 0xb9, 0xcb, 0xe2, 0x66, 0x74, 0xaa, 0x5c, 0xfb, 0xec, 0xde, 0x2d, 0x80, 0xb4, 0xbc, 0x27, 0x10, 0xcf, 0x53, 0xf2, 0x3e, 0xcd, 0xfa, 0x55, 0x4e, 0x37, 0x2c, 0xb1, 0xa6, 0x2d, 0x96, 0xce, 0x7f, 0x4e, 0x6d, 0xda, 0xe0, 0xd8, 0x05, 0xaf, 0xcd, 0x10, 0xa0, 0x55, 0xbc, 0xe5, 0x84, 0xc8, 0x48, 0xd0, 0x50, 0xfb, 0x29, 0xfe, 0x8f, 0x1c, 0x64, 0xb1, 0x8e, 0x1a, 0xbf, 0xe4, 0x6b, 0x65, 0x78, 0x2e, 0x6f, 0xf5, 0x36, 0xe8, 0x9d, 0x8d, 0x40, 0x92, 0x8b, 0x41, 0xed, 0x73, 0x71, 0x36, 0x5c, 0x80, 0x80, 0xa9, 0x64, 0x7f, 0x75, 0x32, 0xce, 0x6c, 0x6d, 0x4a, 0xc2, 0x1c, 0xfb, 0x0c, 0x80, 0x20, 0x78, 0x38, 0x51, 0xec, 0x9a, 0x7d, 0xbc, 0x39, 0x48, 0xf8, 0xfc, 0xa7, 0xad, 0xf8, 0xb2, 0xa7, 0x8c, 0x04, 0xd8, 0x98, 0xd3, 0x1f, 0xf6, 0x30, 0x72, 0x4a, 0x98, 0x1e, 0x6d, 0x4b, 0xff, 0xed, 0x30, 0xad, 0x17, 0x2c, 0x24, 0x08, 0xa9, 0xcc, 0x7f, 0x82, 0xd2, 0xc9, 0x60, 0x96, 0xb4, 0x0d, 0x1b, 0x14, 0x6b, 0x91, 0xd1, 0x69, 0x42, 0xc5, 0x45, 0x21, 0x27, 0x32, 0xea, 0xaa, 0x5d, 0x5d, 0x41, 0x5b, 0x71, 0xef, 0x61, 0xb4, 0x6f, 0x14, 0xd7, 0xe8, 0x55, 0x21, 0xb1, 0x98, 0xc8, 0x79, 0xd6, 0xe2, 0x06, 0xb1, 0x99, 0x9a, 0x1c, 0xf2, 0x8d, 0xd7, 0x59, 0x9f, 0x9a, 0xb2, 0x02, 0x38, 0x50, 0x4a, 0x47, 0x7f, 0x7c, 0x0c, 0x76, 0xd9, 0xf9, 0x31, 0x6f, 0xf6, 0xc9, 0x87, 0x58, 0xb4, 0x64, 0x75, 0x92, 0x41, 0x50, 0x39, 0xeb, 0x80, 0xf2, 0x75, 0x15, 0xaf, 0xa4, 0xea, 0x57, 0x46, 0x08, 0x83, 0x82, 0x22, 0x9b, 0x95, 0x27, 0xe2, 0x8d, 0x65, 0x07, 0x92, 0xd0, 0xeb, 0xcb, 0x87, 0x6f, 0xd5, 0xf5, 0x89, 0x21, 0xcf, 0x17, 0x38, 0x1e, 0x02, 0x42, 0xa8, 0x31, 0xda, 0xc2, 0x4f, 0x0e, 0x0d, 0x08, 0x21, 0xe7, 0xd9, 0xe8, 0xf9, 0x3a, 0x8d, 0x05, 0x3b, 0xed, 0x4a, 0x89, 0xb7, 0x9c, 0x0b, 0x19, 0xd1, 0x32, 0xe3, 0x08, 0xdf, 0xb6, 0x86, 0xca, 0xd3, 0x68, 0x0b, 0xac, 0x1a, 0x0d, 0xf0, 0xc3, 0xc4, 0x87, 0x5f, 0x22, 0xe4, 0xa8, 0xaf, 0x50, 0x3a, 0x48, 0x2e, 0xfa, 0x0f, 0x95, 0x1e, 0xe4, 0x61, 0xab, 0xfd, 0x25, 0x40, 0x65, 0x0a, 0x94, 0x78, 0x72, 0x04, 0x7e, 0x70, 0xab, 0x35, 0x9a, 0x52, 0xa3, 0xaf, 0x3e, 0x6c, 0x80, 0xd6, 0xd2, 0xd7, 0x0a, 0x1e, 0x86, 0x56, 0x02, 0x16, 0x40, 0x80, 0xb5, 0xa6, 0xd8, 0x22, 0xd1, 0x94, 0x88, 0xdf, 0x76, 0x4d, 0x9e, 0x19, 0x90, 0xe3, 0x74, 0x15, 0x65, 0x52, 0xa2, 0x59, 0x6a, 0x07, 0x72, 0x59, 0x5b, 0xa3, 0x95, 0x53, 0x8a, 0xfc, 0x14, 0x78, 0x78, 0x64, 0x89, 0x4c, 0xa2, 0x2f, 0x8e, 0x4f, 0x9d, 0x6f, 0x76, 0xdd, 0x65, 0x02, 0x3b, 0x53, 0xf3, 0xcf, 0xb8, 0x73, 0x0d, 0x4c, 0x18, 0x0a, 0x62, 0x44, 0x8f, 0xcf, 0xd6, 0xd7, 0x48, 0x8f, 0x1b, 0xc2, 0x9e, 0x87, 0x81, 0xe0, 0x8e, 0x12, 0x0f, 0xf1, 0x6c, 0x84, 0xd2, 0x9b, 0xd6, 0x55, 0x75, 0xae, 0xe7, 0x82, 0x12, 0xac, 0xac, 0x30, 0x48, 0x89, 0xdc, 0x92, 0x8e, 0xaf, 0xc3, 0x0e, 0xc6, 0x45, 0x80, 0x9b, 0x16, 0xb1, 0x70, 0x6e, 0xf3, 0x5b, 0xea, 0xd5, 0x7e, 0xb4, 0x2d, 0x63, 0x14, 0x78, 0x96, 0x4d, 0x20, 0x30, 0x17, 0x14, 0x34, 0xfa, 0xe4, 0x64, 0x59, 0x8c, 0x6f, 0x3d, 0xa3, 0x77, 0x97, 0x50, 0x08, 0xa9, 0x1c, 0xac, 0x71, 0x36, 0x57, 0x99, 0x12, 0x58, 0x28, 0xc4, 0xf7, 0xb4, 0x2f, 0x9d, 0xe0, 0xde, 0x3f, 0xfe, 0x4f, 0x20, 0x0f, 0x0d, 0xdf, 0x77, 0x33, 0x63, 0xd7, 0xdf, 0x4b, 0x6e, 0xff, 0xd0, 0x7b, 0x13, 0xb3, 0x09, 0x1b, 0x98, 0x35, 0x8c, 0xaf, 0xc2, 0x48, 0xea, 0x19, 0x3a, 0xfa, 0xc0, 0x0d, 0x35, 0xc1, 0x82, 0xc6, 0x54, 0xc9, 0x77, 0xf7, 0xc9, 0x8d, 0x05, 0x05, 0xbc, 0xa5, 0x2f, 0x73, 0xed, 0xde, 0x5c, 0x9e, 0x9a, 0x90, 0x5a, 0xaa, 0xa3, 0x2c, 0xa2, 0xbc, 0xec, 0x15, 0xde, 0x69, 0x03, 0xb1, 0xa8, 0x6f, 0x03, 0xbf, 0x95, 0xa3, 0xb8, 0xeb, 0x72, 0x2b, 0x03, 0x9f, 0xcd, 0xed, 0x80, 0x1d, 0xb8, 0x47, 0x67, 0xcb, 0xc9, 0x01, 0xb0, 0xcd, 0x65, 0x80, 0x7b, 0xd9, 0x3e, 0x3c, 0xae, 0x47, 0x1b, 0x74, 0xe0, 0x68, 0xd8, 0x20, 0x76, 0x19, 0xad, 0x27, 0x0b, 0x98, 0xb3, 0xd2, 0x16, 0x96, 0xa3, 0x80, 0xc6, 0x8d, 0xe1, 0x9c, 0x31, 0x53, 0xba, 0xcd, 0xae, 0xf0, 0xea, 0x6c, 0x7f, 0xad, 0x62, 0x3b, 0xb4, 0x6d, 0x48, 0x54, 0x4b, 0x40, 0x3e, 0x5f, 0x9c, 0x36, 0xe7, 0x08, 0xf5, 0x71, 0xa7, 0xb1, 0x81, 0x7e, 0xab, 0x63, 0x6e, 0xe6, 0x2a, 0x0b, 0x4e, 0xff, 0xea, 0xe3, 0xbe, 0x08, 0x05, 0x2e, 0x46, 0x75, 0xed, 0x28, 0x81, 0x88, 0xae, 0x3d, 0x7e, 0x21, 0x73, 0x79, 0x65, 0xd7, 0x4c, 0x40, 0x5e, 0x47, 0x2e, 0x3f, 0xae, 0xac, 0x3c, 0xa2, 0x23, 0xb1, 0x44, 0x87, 0xb3, 0x83, 0x8d, 0xb3, 0x60, 0x29, 0xd0, 0x84, 0x5f, 0x18, 0x84, 0x27, 0x78, 0x02, 0x5e, 0x0b, 0xb0, 0xf0, 0x19, 0x96, 0x26, 0x90, 0x73, 0x16, 0x3b, 0xd0, 0x78, 0xfa, 0xf5, 0xab, 0x02, 0x42, 0xa6, 0x43, 0x81, 0x34, 0xc8, 0x31, 0xf8, 0x51, 0x2c, 0x19, 0x48, 0x87, 0x54, 0x81, 0xb1, 0xa8, 0x1d, 0xe3, 0x96, 0x1b, 0xa0, 0x00, 0x80, 0xd2, 0x5b, 0x78, 0x66, 0x7b, 0x8c, 0x98, 0x2c, 0xfb, 0xde, 0x73, 0x69, 0x18, 0x47, 0x34, 0x6d, 0x75, 0x31, 0xb2, 0x83, 0xc4, 0xd8, 0x45, 0x73, 0x37, 0xf3, 0xd9, 0x4b, 0x37, 0x96, 0x40, 0x5f, 0x59, 0x57, 0xcd, 0x8f, 0x8e, 0xb0, 0x1e, 0xc8, 0x9a, 0xa4, 0x39, 0xce, 0xc7, 0xa5, 0xdb, 0x38, 0xda, 0xb6, 0x0c, 0xbc, 0x46, 0xcd, 0xf7, 0xac, 0xa0, 0x7b, 0xf9, 0xc1, 0x53, 0xce, 0xf8, 0x18, 0x95, 0x77, 0xf6, 0x7a, 0x99, 0x28, 0xe5, 0xe0, 0x06, 0x40, 0xbd, 0x36, 0xa9, 0xaa, 0xcd, 0x60, 0x66, 0x02, 0x4e, 0x7b, 0x75, 0xfa, 0x3e, 0x65, 0xcb, 0xfd, 0x6c, 0x7f, 0xd5, 0x12, 0xcf, 0xb1, 0x6c, 0x02, 0x1b, 0xaf, 0x06, 0xbd, 0x96, 0x7b, 0x29, 0xfa, 0x28, 0x2c, 0x26, 0x1e, 0xb2, 0xed, 0x03, 0x5f, 0xa1, 0x48, 0xb9, 0x29, 0xc3, 0xa5, 0xa0, 0xc0, 0x59, 0x0d, 0x27, 0x28, 0x6d, 0x34, 0xc8, 0x42, 0x66, 0xb7, 0x3b, 0x37, 0xd9, 0xa2, 0xea, 0x19, 0xa2, 0x35, 0xa6, 0xc8, 0x34, 0xe8, 0x98, 0x13, 0x2d, 0xac, 0x7a, 0x20, 0x2e, 0x74, 0x07, 0x0e, 0xe9, 0xf4, 0xaf, 0xd8, 0x7b, 0xa8, 0x90, 0x7d, 0xfd, 0x19, 0xa2, 0x5e, 0x55, 0x5c, 0x31, 0xe7, 0x52, 0xdb, 0x91, 0x71, 0xf9, 0x58, 0x0d, 0x67, 0x19, 0x2e, 0x20, 0xa8, 0x26, 0xda, 0xe8, 0x2d, 0x43, 0xbb, 0xd7, 0xec, 0xa1, 0x16, 0xac, 0xfc, 0x08, 0x5d, 0xa1, 0xf9, 0xb3, 0xb1, 0xe6, 0xaa, 0x61, 0xa5, 0x4f, 0xe1, 0xa9, 0x45, 0x4a, 0xa3, 0x8e, 0x57, 0x13, 0x89, 0x53, 0xe0, 0x2b, 0x66, 0x91, 0xea, 0x06, 0x2a, 0x86, 0x85, 0x03, 0x07, 0xb0, 0x0c, 0xa2, 0xd2, 0x9a, 0xa9, 0xf2, 0xab, 0xf7, 0x1b, 0x48, 0xe0, 0xed, 0xb7, 0x36, 0x0f, 0xb3, 0xad, 0xbb, 0x8b, 0x5e, 0x8d, 0xb8, 0x01, 0xf8, 0x0a, 0xa3, 0x5c, 0xd3, 0xfd, 0x7f, 0xe5, 0x1c, 0xad, 0x0c, 0xaf, 0xb3, 0x4d, 0x3b, 0x32, 0x3a, 0xc6, 0xe4, 0x36, 0x6d, 0xb7, 0xbb, 0xf3, 0xb1, 0xba, 0x81, 0x76, 0xef, 0xea, 0x77, 0x46, 0xa2, 0xa2, 0x18, 0x48, 0x2f, 0x87, 0x07, 0xe0, 0x76, 0xc8, 0x47, 0x59, 0xa6, 0xa4, 0xaa, 0x87, 0x55, 0x2d, 0x8c, 0xaa, 0xd0, 0x4c, 0xc0, 0x96, 0xaf, 0x06, 0xcb, 0x11, 0xad, 0xfd, 0x50, 0x7d, 0xb7, 0x3a, 0xcc, 0xb7, 0x43, 0x29, 0x84, 0x3e, 0xe3, 0xe5, 0xbb, 0x98, 0x1a, 0xb6, 0x27, 0xf1, 0x6e, 0xd9, 0xa6, 0x06, 0xbe, 0x7f, 0x2e, 0x41, 0xd6, 0x17, 0x02, 0x25, 0x41, 0xd0, 0x2c, 0xed, 0x5e, 0x5a, 0x27, 0x70, 0xb7, 0xed, 0xdc, 0x48, 0x8d, 0x8d, 0xd0, 0x33, 0xb8, 0x8c, 0x9b, 0xb9, 0xae, 0x50, 0x9c, 0x10, 0xe1, 0x57, 0xeb, 0x3c, 0x4e, 0x77, 0x8f, 0x7a, 0x52, 0x6b, 0xf1, 0xdf, 0xc0, 0x8b, 0x91, 0x3d, 0x32, 0xdb, 0xf8, 0x46, 0x9c, 0x47, 0xee, 0xf4, 0x27, 0x2d, 0xec, 0x28, 0x3c, 0x1c, 0xd4, 0x91, 0xde, 0xdc, 0xe0, 0xcf, 0x3e, 0xae, 0xd8, 0xd8, 0x89, 0xd4, 0x89, 0x9b, 0x05, 0x54, 0x72, 0xe4, 0x5c, 0xfa, 0xc0, 0x80, 0x38, 0x9c, 0x7d, 0xa1, 0x0f, 0xa1, 0x04, 0x84, 0x41, 0xc4, 0xb8, 0x50, 0x60, 0x16, 0xf5, 0x42, 0xce, 0x42, 0x47, 0x07, 0x8e, 0x15, 0xda, 0x69, 0x54, 0x3e, 0x32, 0x2e, 0xde, 0x52, 0x1c, 0x3d, 0x87, 0x13, 0xe5, 0x03, 0x1a, 0xf1, 0xc9, 0x15, 0xe4, 0xd1, 0xae, 0x17, 0x0d, 0x0e, 0x13, 0xdc, 0x28, 0xbd, 0x43, 0xce, 0x08, 0x36, 0xce, 0x91, 0xd5, 0xd0, 0x39, 0xe3, 0x60, 0xeb, 0xf5, 0xc7, 0xb4, 0x34, 0x8e, 0xe2, 0xee, 0x24, 0x25, 0x25, 0x4e, 0xca, 0x20, 0xac, 0x8d, 0xcb, 0x20, 0xe6, 0x71, 0xa7, 0x33, 0xf7, 0xa0, 0x3d, 0x4c, 0x5a, 0xb2, 0x92, 0xf0, 0xcb, 0x89, 0xce, 0x31, 0x64, 0xe5, 0x87, 0xe0, 0x06, 0x33, 0x42, 0xff, 0xfa, 0xa6, 0x37, 0x75, 0xd8, 0x89, 0x55, 0x05, 0xa8, 0xd4, 0x86, 0x81, 0x48, 0xfd, 0x34, 0x3b, 0x0e, 0x10, 0x0c, 0xbd, 0xad, 0x02, 0x02, 0xba, 0x5d, 0x43, 0x95, 0x44, 0x36, 0x92, 0x54, 0x3e, 0xdd, 0x15, 0xa1, 0x15, 0x63, 0xa9, 0xb5, 0xab, 0x6a, 0x77, 0xe4, 0x94, 0x8a, 0xc8, 0x22, 0x85, 0xf3, 0x1a, 0xc7, 0x09, 0x53, 0x72, 0x8f, 0x76, 0xfa, 0xf5, 0xe5, 0x20, 0x3c, 0xb2, 0x61, 0xcc, 0x16, 0xc3, 0x8f, 0x68, 0x15, 0x94, 0xf2, 0xf9, 0x74, 0x82, 0x48, 0xd4, 0x84, 0xa8, 0x10, 0x11, 0x51, 0xf5, 0x4a, 0x3d, 0x83, 0x82, 0x7e, 0x4f, 0x82, 0x23, 0xff, 0xdd, 0xde, 0x3d, 0x71, 0x90, 0xed, 0xd7, 0x89, 0xd6, 0xb6, 0xf3, 0x14, 0xd6, 0x0d, 0x1e, 0x3b, 0xa9, 0x00, 0x46, 0x05, 0xc7, 0x72, 0xcc, 0x1d, 0xbf, 0x06, 0xda, 0xd6, 0x2c, 0x3f, 0xf7, 0x6c, 0xe4, 0xe5, 0xd8, 0x8d, 0x72, 0xaa, 0x79, 0x17, 0xc7, 0x0d, 0x6d, 0x24, 0x2c, 0x7f, 0x73, 0x44, 0x7b, 0xc4, 0x49, 0x09, 0x8f, 0x9d, 0xc5, 0xc9, 0xf9, 0xa4, 0x21, 0x9f, 0xf4, 0x77, 0x97, 0xb3, 0x9c, 0x18, 0x2d, 0xbb, 0x5a, 0x94, 0xd3, 0xc2, 0xa3, 0xe3, 0xab, 0x28, 0xe2, 0x10, 0xa8, 0xeb, 0xb2, 0x9a, 0x5a, 0x24, 0x51, 0x19, 0x08, 0xd5, 0x51, 0x24, 0x00, 0xe1, 0x91, 0x73, 0x2b, 0x5c, 0x6c, 0x41, 0xe4, 0x05, 0x30, 0xf4, 0x0a, 0x11, 0xd2, 0x00, 0x54, 0x2b, 0xe0, 0x09, 0xe5, 0xb8, 0xb6, 0x48, 0x21, 0x5f, 0xf5, 0x2f, 0xbe, 0xc9, 0x31, 0x50, 0x1e, 0xa5, 0xea, 0x7b, 0xdc, 0xf0, 0xbe, 0x26, 0xa5, 0x73, 0xdc, 0x12, 0x49, 0x8d, 0xbc, 0x2c, 0x11, 0x32, 0x0e, 0xb2, 0x54, 0x34, 0xf0, 0x96, 0x45, 0xc1, 0x63, 0x27, 0x0f, 0x2e, 0x00, 0xee, 0x24, 0xf2, 0xe7, 0xd6, 0xd1, 0xf6, 0xf9, 0x91, 0x17, 0x0c, 0x47, 0x36, 0xb6, 0xbc, 0xc9, 0x2f, 0x8a, 0x47, 0x54, 0x52, 0x1a, 0xe6, 0xc6, 0x4e, 0x6f, 0x53, 0x84, 0x49, 0x22, 0x8a, 0x26, 0xc7, 0xb9, 0xd1, 0x70, 0xce, 0x34, 0xf6, 0x84, 0x48, 0xe2, 0xd8, 0x57, 0xa8, 0x79, 0x28, 0x62, 0xd0, 0x66, 0x71, 0x9a, 0x32, 0x62, 0x56, 0xa1, 0x36, 0x46, 0x1c, 0x3e, 0xdc, 0x20, 0x68, 0x0b, 0xa3, 0x86, 0x49, 0x6d, 0xa9, 0x2a, 0x78, 0xc9, 0x13, 0xaf, 0xdf, 0xf5, 0xaf, 0xbb, 0x59, 0xed, 0xd8, 0x4e, 0xb9, 0xc8, 0x9b, 0x52, 0x0d, 0xea, 0x18, 0x73, 0x24, 0x7a, 0x2a, 0x30, 0x4d, 0x17, 0x4a, 0x32, 0x62, 0xc6, 0xb0, 0xdd, 0x05, 0x2f, 0xbc, 0x26, 0x2a, 0x0a, 0x95, 0xa4, 0xd6, 0xd4, 0x10, 0xe9, 0x25, 0xc6, 0xd3, 0x12, 0x92, 0x07, 0xba, 0x9d, 0x73, 0x21, 0x79, 0x7b, 0xc3, 0xb2, 0x83, 0x66, 0x24, 0x64, 0x2b, 0x75, 0x24, 0x1e, 0x09, 0xee, 0xc0, 0x7c, 0xa0, 0x5b, 0x27, 0x7d, 0x3d, 0xe0, 0xc0, 0x7c, 0x22, 0xcb, 0x6d, 0x62, 0xe4, 0x6d, 0x12, 0x19, 0x12, 0x29, 0x51, 0x44, 0x17, 0xca, 0x98, 0x2d, 0x62, 0x19, 0x5e, 0xfe, 0xc4, 0xb0, 0xa9, 0x35, 0x19, 0x09, 0xd4, 0x52, 0x2a, 0xda, 0x8f, 0xd2, 0xd2, 0xa5, 0x27, 0x61, 0x60, 0x8a, 0x08, 0x4c, 0x3d, 0x61, 0x80, 0x35, 0xcf, 0x05, 0xc5, 0x0a, 0x9c, 0xf2, 0x3a, 0x38, 0xb3, 0x13, 0xee, 0x1b, 0x48, 0xd5, 0x65, 0xb9, 0x9e, 0x80, 0x9c, 0xb1, 0x2a, 0xc7, 0x47, 0x6e, 0xf5, 0x9e, 0x5d, 0xa0, 0x42, 0x4b, 0xd6, 0xed, 0x71, 0xc0, 0xb4, 0xe3, 0x23, 0x28, 0x40, 0x32, 0x9f, 0xc0, 0x96, 0x18, 0x74, 0xe8, 0x63, 0x1c, 0x60, 0x7a, 0xee, 0xff, 0x71, 0x5a, 0x55, 0xf0, 0x6a, 0x4e, 0x19, 0xff, 0x68, 0x10, 0xdd, 0xd4, 0xc5, 0xa2, 0x6b, 0xa1, 0x3d, 0xe2, 0xf8, 0x55, 0x4f, 0x5e, 0xa9, 0x13, 0xe6, 0x69, 0x56, 0xe2, 0x39, 0x6f, 0x8d, 0xa6, 0xf0, 0x85, 0xda, 0x4f, 0x88, 0x44, 0x45, 0x50, 0xf8, 0xd8, 0x1d, 0x52, 0x95, 0x54, 0xf4, 0x2a, 0x33, 0x48, 0xeb, 0x09, 0x8d, 0x96, 0x30, 0xf3, 0xe7, 0x81, 0xc4, 0x73, 0xf1, 0x07, 0x82, 0x8c, 0xef, 0x71, 0x5d, 0xf2, 0x17, 0x28, 0xe9, 0x7b, 0x3a, 0xca, 0x1d, 0xd0, 0xa7, 0x7d, 0x57, 0x68, 0x4d, 0x84, 0xa0, 0xb7, 0x1f, 0x10, 0x31, 0xa2, 0xbd, 0x58, 0x37, 0x37, 0x50, 0xeb, 0xd4, 0x9b, 0xb5, 0x45, 0x66, 0x43, 0xdf, 0xa1, 0x0b, 0x67, 0x76, 0x0f, 0x65, 0xb4, 0xc4, 0xc6, 0x9a, 0x42, 0xd2, 0xbb, 0x9f, 0xc5, 0xce, 0x73, 0xb7, 0x07, 0xb0, 0x15, 0x36, 0x96, 0x1e, 0xc3, 0x8b, 0xb9, 0x8c, 0x2a, 0x7d, 0xa9, 0xa7, 0x58, 0xb5, 0xfe, 0xf4, 0xce, 0x7d, 0x68, 0xb4, 0xd7, 0xc7, 0x9f, 0x0c, 0x18, 0x71, 0x9d, 0x62, 0x67, 0xc7, 0x0a, 0x0a, 0xe1, 0x4a, 0xf8, 0x22, 0x36, 0xb0, 0xd0, 0xba, 0x48, 0x2b, 0x8c, 0x39, 0xf5, 0xee, 0x27, 0xfb, 0x30, 0xee, 0x52, 0x3f, 0x57, 0xe5, 0x69, 0x41, 0xc0, 0x9d, 0xa5, 0xa3, 0x96, 0x6b, 0x93, 0x11, 0xe3, 0xf9, 0xc5, 0x25, 0xed, 0x49, 0xc7, 0x88, 0xc6, 0xf7, 0x54, 0x5b, 0x1f, 0xbf, 0xca, 0xd5, 0x5d, 0x3e, 0xdc, 0x2d, 0xef, 0xfd, 0x87, 0xba, 0xde, 0xab, 0x47, 0x59, 0xa5, 0xaa, 0x8a, 0x0f, 0x44, 0xce, 0x65, 0xef, 0x90, 0x61, 0x86, 0x3e, 0xcd, 0x6a, 0x6a, 0xd6, 0x7e, 0x2e, 0xd0, 0xc8, 0x7c, 0xf8, 0x6d, 0x45, 0x46, 0x16, 0xe1, 0xbf, 0x98, 0x24, 0xea, 0x4b, 0x3f, 0x8d, 0xd7, 0x4a, 0x2b, 0x4e, 0x40, 0x48, 0xc6, 0xfd, 0xf5, 0x24, 0x84, 0x0a, 0x34, 0x71, 0xbb, 0x46, 0x1f, 0x1d, 0xb6, 0xa1, 0x6c, 0x50, 0x05, 0x38, 0x5f, 0x97, 0x16, 0x8f, 0xf5, 0x42, 0x0a, 0x1a, 0x63, 0x0b, 0xc1, 0x03, 0xbe, 0xf8, 0x37, 0x27, 0xfc, 0x82, 0x14, 0x62, 0x1b, 0xf6, 0x7e, 0x0c, 0xa0, 0x1c, 0x32, 0xc3, 0x43, 0x17, 0xd3, 0x6b, 0xe9, 0x8c, 0x81, 0x74, 0xd2, 0x06, 0xae, 0x5b, 0x14, 0x99, 0x2d, 0x74, 0x48, 0xc6, 0x8c, 0xe6, 0x83, 0x9f, 0xa4, 0xf7, 0x88, 0x2b, 0x6e, 0x8a, 0x3b, 0x0c, 0x19, 0xe5, 0x59, 0x5f, 0x59, 0xb8, 0x67, 0xe4, 0x01, 0x5b, 0xe8, 0x5f, 0xd4, 0x58, 0xd3, 0x3e, 0x98, 0x29, 0x44, 0x7b, 0x6d, 0x43, 0x72, 0xc4, 0x5d, 0x53, 0xe1, 0xda, 0x34, 0xc7, 0xd9, 0x37, 0x92, 0x90, 0x16, 0xf3, 0x3e, 0x26, 0xc1, 0xe8, 0xbd, 0xcd, 0x9f, 0x15, 0x24, 0x18, 0x89, 0x40, 0x2a, 0xab, 0x1c, 0xdf, 0x81, 0x44, 0xb1, 0x39, 0x67, 0xfd, 0x8f, 0xc9, 0x78, 0xcb, 0x60, 0xe3, 0xc6, 0x4b, 0xe2, 0x9a, 0x2b, 0xbe, 0xdf, 0xe0, 0xde, 0x51, 0x5f, 0xef, 0x45, 0xa3, 0x1c, 0xe8, 0x0a, 0x81, 0x36, 0xba, 0x71, 0xf4, 0x28, 0x46, 0xe9, 0x7d, 0xfb, 0xc1, 0xe1, 0x9f, 0xba, 0x59, 0xdc, 0x9e, 0x25, 0x1b, 0xc8, 0x87, 0xa9, 0x14, 0x8b, 0x70, 0x90, 0xb6, 0xe0, 0x01, 0x76, 0x7e, 0x61, 0x33, 0xfc, 0xd4, 0xe4, 0x58, 0xc0, 0x33, 0x0b, 0x5c, 0x8c, 0x89, 0x17, 0x4a, 0xcd, 0xe1, 0xfd, 0x11, 0x47, 0x3f, 0xbc, 0x89, 0x08, 0xcb, 0xed, 0xb1, 0x9a, 0x32, 0x9c, 0x3b, 0x7d, 0x4a, 0x56, 0x4a, 0xd4, 0xf5, 0x83, 0x7a, 0x5f, 0x47, 0xf7, 0x21, 0xa9, 0xeb, 0xc3, 0xd4, 0x83, 0xc2, 0x51, 0x2d, 0xb0, 0xce, 0xb0, 0xcc, 0xe2, 0x4f, 0x2c, 0x9c, 0xe6, 0x2b, 0x22, 0x57, 0x1b, 0x93, 0x12, 0x4d, 0x28, 0xe4, 0xf6, 0x61, 0xee, 0xcb, 0xd2, 0x54, 0xbc, 0xad, 0x8d, 0x46, 0xc2, 0x46, 0xff, 0x79, 0xc9, 0x90, 0x4b, 0x59, 0x21, 0xe6, 0x6f, 0xb9, 0xda, 0x69, 0x19, 0x60, 0x37, 0xa3, 0xbd, 0xc4, 0x5f, 0x6a, 0xe4, 0x15, 0x56, 0x07, 0xc7, 0x7d, 0x2c, 0x98, 0x1c, 0xa7, 0x74, 0xb3, 0x30, 0x7e, 0xf8, 0x4c, 0x36, 0x37, 0xab, 0xd9, 0xde, 0x91, 0xdf, 0xb3, 0x2a, 0x5b, 0xb8, 0xc0, 0x7e, 0x37, 0xe1, 0x4f, 0xf6, 0x9f, 0x7d, 0x43, 0xfb, 0x25, 0x61, 0x74, 0x19, 0xff, 0x80, 0x52, 0x0b, 0xc2, 0xa6, 0xcc, 0x18, 0x6e, 0x6a, 0x70, 0xa3, 0xab, 0x5e, 0xd3, 0xfd, 0x52, 0x88, 0x33, 0x7d, 0x2f, 0x16, 0x5b, 0xd3, 0x06, 0x4d, 0xc7, 0x99, 0xd3, 0xc3, 0x09, 0x2b, 0x56, 0xce, 0x6b, 0xb9, 0xcf, 0x3c, 0xd6, 0x9a, 0x07, 0x44, 0xf2, 0xe3, 0x8f, 0xbd, 0x8f, 0x39, 0x4c, 0x8e, 0x44, 0xe3, 0x34, 0x66, 0x55, 0x23, 0x52, 0xad, 0xda, 0xc7, 0x10, 0xba, 0x1e, 0xfb, 0xb5, 0x46, 0x46, 0x61, 0x2d, 0x20, 0x33, 0x64, 0x09, 0x23, 0xa9, 0xc9, 0xc6, 0x66, 0xb0, 0x86, 0x52, 0xb2, 0x3a, 0xd8, 0xcc, 0x39, 0x07, 0x90, 0x8b, 0x84, 0xc6, 0xad, 0x63, 0xae, 0x7d, 0x30, 0x23, 0xd0, 0x2a, 0x2c, 0x62, 0xbc, 0xab, 0x1d, 0x7c, 0xee, 0xdb, 0x7a, 0xd7, 0xbf, 0xfe, 0x8e, 0x6b, 0xdc, 0x5f, 0x83, 0x81, 0xf7, 0x37, 0xc0, 0xba, 0xbc, 0xd1, 0x75, 0x54, 0x07, 0xec, 0x73, 0xa9, 0x54, 0x61, 0x42, 0xf8, 0x77, 0x05, 0x6d, 0x68, 0x8d, 0xd1, 0x21, 0x4a, 0x32, 0x40, 0xf6, 0x9f, 0xf4, 0xf9, 0x0d, 0xda, 0x08, 0xae, 0x5b, 0xe7, 0x3c, 0x44, 0x44, 0x6b, 0x2d, 0x34, 0x6c, 0x4e, 0xba, 0x31, 0xca, 0x77, 0xb8, 0x0b, 0xfe, 0xd6, 0xe7, 0xd3, 0xe4, 0xa8, 0x25, 0x40, 0x69, 0xf6, 0xe2, 0x51, 0x9d, 0x5f, 0xd4, 0x34, 0x0a, 0x18, 0xec, 0x67, 0x45, 0x31, 0x88, 0x1d, 0xc2, 0x1a, 0xea, 0xe3, 0xec, 0x65, 0xe9, 0x83, 0x75, 0xcd, 0xe6, 0x28, 0xeb, 0x78, 0x02, 0xc4, 0x8d, 0x79, 0x8e, 0xaf, 0x5c, 0x99, 0xc4, 0x91, 0x75, 0x57, 0xb4, 0x81, 0x9d, 0x2d, 0x80, 0x6e, 0x1e, 0x15, 0xcc, 0xbe, 0xd2, 0x4c, 0x71, 0x36, 0x7d, 0x56, 0x71, 0x1a, 0x5f, 0x42, 0x30, 0x95, 0x0a, 0x2f, 0xe1, 0x5a, 0x72, 0x0f, 0x3e, 0x8c, 0x43, 0xab, 0x7c, 0xdc, 0x77, 0xe8, 0x7e, 0xf1, 0x27, 0x48, 0x49, 0x0c, 0xa1, 0xb3, 0xb8, 0xec, 0xbc, 0x78, 0x70, 0xef, 0x68, 0x8f, 0x17, 0x7b, 0x89, 0x21, 0xc1, 0x9c, 0x06, 0x49, 0xab, 0xee, 0x1c, 0x1d, 0x2c, 0xbe, 0xf9, 0xe8 ],
- const [ 0x9e, 0x01, 0x44, 0x21, 0xc8, 0x8b, 0xcf, 0x4c, 0x26, 0x11, 0x98, 0x1d, 0x72, 0x37, 0x47, 0xec, 0xae, 0xc7, 0x0e, 0x75, 0xb8, 0xf6, 0xdc, 0x3a, 0x1e, 0xe9, 0xd4, 0x23, 0x33, 0x77, 0xfd, 0x68, 0x63, 0x31, 0x3b, 0xb0, 0xc3, 0x9f, 0x7e, 0x7b, 0xec, 0xcd, 0x39, 0xbd, 0x0a, 0x06, 0x16, 0xcb, 0x30, 0xe0, 0xe8, 0x7b, 0xef, 0x79, 0xe0, 0x87, 0x26, 0xff, 0x05, 0x33, 0x1b, 0x76, 0xde, 0x30, 0xcb, 0xb5, 0x71, 0xbf, 0x7f, 0xb2, 0x72, 0x1a, 0xa0, 0x00, 0xb4, 0x0f, 0xcc, 0x96, 0xe3, 0xee, 0x29, 0xd2, 0x75, 0xa5, 0xfa, 0xbe, 0xde, 0x2a, 0x70, 0x91, 0x03, 0x19, 0xc2, 0x79, 0xf2, 0x9f, 0x80, 0x97, 0xd0, 0x96, 0x24, 0x4b, 0x12, 0xf1, 0xea, 0xb3, 0xf1, 0x5b, 0xe1, 0x6e, 0x17, 0x1b, 0x42, 0xa6, 0x9f, 0x3b, 0x01, 0x4d, 0x3c, 0xe9, 0xa3, 0xa6, 0xb8, 0x1d, 0x4f, 0x08, 0xa1, 0x7c, 0x27, 0xdf, 0x3f, 0x7d, 0xd9, 0xf3, 0xc8, 0xca, 0x70, 0xed, 0xd7, 0xe9, 0x71, 0x17, 0x1b, 0x1b, 0x23, 0x63, 0x4c, 0x84, 0x2e, 0xaf, 0x64, 0x8d, 0x67, 0x47, 0x0b, 0x87, 0xeb, 0xab, 0x53, 0x91, 0x6b, 0x93, 0xa5, 0xbb, 0xc6, 0x31, 0xfc, 0x6b, 0xdd, 0xb6, 0x50, 0x00, 0xa3, 0x17, 0x56, 0xb6, 0x73, 0x11, 0x66, 0xc9, 0xa7, 0x6b, 0xbc, 0xde, 0x66, 0x7b, 0xe4, 0x9e, 0xbd, 0xeb, 0x70, 0xa4, 0xf1, 0xbd, 0xec, 0x99, 0x14, 0x8d, 0x14, 0x9d, 0xd7, 0x16, 0x44, 0xe9, 0x9f, 0xf8, 0x2f, 0xb3, 0xdb, 0xb9, 0xd4, 0x52, 0x94, 0x09, 0xae, 0xa3, 0x45, 0x4a, 0x2b, 0xab, 0xee, 0x4f, 0x60, 0x7e, 0x64, 0x64, 0xfb, 0x5f, 0xeb, 0x8f, 0x79, 0x28, 0x06, 0x16, 0x99, 0xed, 0x8e, 0x41, 0x10, 0xdc, 0x02, 0x61, 0x7e, 0x67, 0x1e, 0x11, 0xa1, 0xa6, 0xaf, 0xbc, 0xc8, 0xf6, 0xa5, 0x60, 0x8b, 0xe7, 0x6a, 0x91, 0xba, 0x55, 0x72, 0xc0, 0x93, 0xd4, 0x14, 0xbd, 0x38, 0x52, 0x98, 0x7b, 0x60, 0xf7, 0x91, 0x14, 0x4c, 0x50, 0x6d, 0x0c, 0xfd, 0xad, 0x4a, 0xda, 0xa4, 0xc7, 0x0b, 0xa4, 0x5a, 0xa6, 0xab, 0x4b, 0x11, 0xc2, 0xd2, 0xa7, 0xca, 0x69, 0xa6, 0x14, 0x09, 0x60, 0xe4, 0x2d, 0x86, 0xcd, 0x2f, 0xd7, 0x26, 0x54, 0xa8, 0x82, 0x29, 0x81, 0xbe, 0xab, 0xa5, 0x66, 0x48, 0xa5, 0x33, 0x85, 0xd1, 0x9a, 0xe8, 0xf0, 0x32, 0xcd, 0x87, 0xae, 0x67, 0x21, 0xf4, 0x61, 0x9b, 0xdf, 0xec, 0x26, 0x85, 0xb4, 0xf4, 0xbd, 0xf7, 0xf9, 0x8f, 0xea, 0xb4, 0x37, 0xb4, 0x1a, 0x83, 0xeb, 0x7f, 0x4a, 0x81, 0x86, 0x27, 0x25, 0xbb, 0xb8, 0x30, 0x6c, 0xfc, 0xee, 0xe2, 0x9b, 0xe4, 0x1a, 0xf9, 0xca, 0x3a, 0xb2, 0x9e, 0xd1, 0x83, 0xfb, 0x96, 0xaf, 0xd4, 0x87, 0xba, 0x2d, 0xe4, 0xfc, 0xa7, 0xbe, 0x65, 0x18, 0xb6, 0xaa, 0x95, 0xf2, 0x2f, 0x6b, 0x10, 0x83, 0xb9, 0x57, 0xe8, 0x64, 0x15, 0x80, 0xf7, 0xd9, 0x0c, 0xd9, 0x74, 0x0f, 0xa6, 0x9a, 0xc5, 0xa2, 0x9d, 0xe5, 0x94, 0x62, 0x11, 0xa9, 0x25, 0x57, 0x7d, 0xc7, 0xe7, 0x03, 0xea, 0x73, 0x49, 0xe6, 0x63, 0xdd, 0xce, 0x48, 0xa8, 0x11, 0x64, 0x32, 0x27, 0x1c, 0xf2, 0xbe, 0x27, 0x71, 0x30, 0x90, 0x47, 0x8b, 0xbb, 0xa5, 0x27, 0xd3, 0x69, 0x4c, 0x65, 0xc3, 0xd9, 0x71, 0xcb, 0x4c, 0x4f, 0x21, 0xc6, 0x75, 0xbf, 0x4b, 0x1a, 0x46, 0x28, 0xc4, 0xd5, 0xe4, 0x24, 0x8e, 0x81, 0xfd, 0xbc, 0x5a, 0x9e, 0x66, 0x80, 0x4b, 0x50, 0x03, 0xd8, 0xfd, 0x54, 0xe8, 0x95, 0xc6, 0x38, 0xbd, 0xcb, 0x3c, 0xcc, 0x67, 0xe3, 0xf7, 0xd4, 0xe5, 0xec, 0x98, 0xff, 0x77, 0x32, 0x09, 0x1d, 0x06, 0x12, 0x07, 0x8c, 0xc0, 0x0c, 0xde, 0xf3, 0x03, 0x1a, 0x74, 0x33, 0x7c, 0x40, 0x89, 0x9b, 0x90, 0x65, 0x3d, 0x5c, 0xfa, 0x61, 0xd3, 0x3c, 0xb6, 0x57, 0xb4, 0x8e, 0x1e, 0x45, 0xb7, 0x61, 0x54, 0xd9, 0x9f, 0xf8, 0xdf, 0x87, 0xe6, 0x7a, 0x99, 0xd8, 0xb9, 0xeb, 0xc8, 0x05, 0x43, 0x5b, 0x8b, 0xc4, 0x2e, 0x5d, 0x78, 0x62, 0x67, 0xbb, 0x83, 0x12, 0x22, 0x68, 0x21, 0x85, 0x1f, 0xb6, 0xae, 0xba, 0x2b, 0xc9, 0x0c, 0x18, 0xe9, 0x4c, 0x8e, 0xba, 0xd2, 0x62, 0x14, 0x0a, 0x7b, 0xe0, 0x77, 0x91, 0x16, 0xb9, 0x27, 0x0d, 0x3c, 0xba, 0x12, 0xc4, 0xea, 0x77, 0xc8, 0x19, 0xc9, 0x85, 0xdd, 0x5d, 0xb2, 0xe9, 0x8f, 0xe7, 0x71, 0xd1, 0xa9, 0x67, 0xc9, 0x82, 0xa8, 0x77, 0xb9, 0x92, 0x1b, 0x73, 0xfe, 0x57, 0x50, 0x8b, 0xd9, 0x9f, 0x2c, 0x16, 0x12, 0xa1, 0x5b, 0x29, 0x3d, 0x34, 0xaa, 0x69, 0x3c, 0x3f, 0xb0, 0x1d, 0x05, 0x71, 0xb4, 0x88, 0xa6, 0x32, 0xcb, 0x75, 0x86, 0xd9, 0x41, 0x13, 0xed, 0x1f, 0x3a, 0x03, 0xc6, 0xd3, 0x99, 0xb0, 0xa4, 0xd0, 0x21, 0xdf, 0x04, 0x2d, 0xda, 0x87, 0xd2, 0xb3, 0xb7, 0xe2, 0x2e, 0x94, 0x75, 0xc4, 0x6f, 0x59, 0xc6, 0x2c, 0x68, 0x1d, 0xaf, 0x18, 0xeb, 0xf9, 0x2f, 0x9e, 0x8c, 0xbf, 0x21, 0x39, 0xa7, 0xeb, 0x63, 0x61, 0xa5, 0xd6, 0x38, 0x5e, 0x7a, 0x2d, 0xeb, 0x5d, 0x72, 0xa2, 0xb6, 0xc4, 0x2e, 0xe1, 0xe1, 0xc3, 0xe9, 0xc6, 0x2e, 0x2b, 0x01, 0xcd, 0x75, 0x84, 0xb2, 0xca, 0x8c, 0x5a, 0x24, 0xda, 0x69, 0xd7, 0xa8, 0x99, 0x8b, 0x97, 0x3e, 0x95, 0x96, 0xb7, 0x5c, 0x03, 0x3d, 0x2f, 0xea, 0xb1, 0x64, 0x62, 0x91, 0x3c, 0x86, 0xf4, 0x35, 0x83, 0x55, 0xdc, 0xc0, 0x5b, 0xa1, 0xba, 0x22, 0x85, 0x7b, 0x6a, 0x96, 0xdd, 0x9a, 0xd9, 0x26, 0xd3, 0xfe, 0x17, 0x71, 0x1f, 0xd2, 0xae, 0xac, 0xb1, 0x97, 0x33, 0xe7, 0xe7, 0x7f, 0x1a, 0x91, 0x03, 0x17, 0xce, 0x3f, 0xdc, 0x29, 0x02, 0xa9, 0xd4, 0xe1, 0x41, 0xf5, 0x09, 0x2e, 0xcd, 0x39, 0xd0, 0x6b, 0xa6, 0x3b, 0x5f, 0x3f, 0xe9, 0x7b, 0xc9, 0xc2, 0x5b, 0x73, 0x30, 0xe1, 0x46, 0x1d, 0x35, 0x03, 0x84, 0xb6, 0xb4, 0xed, 0xd9, 0xc2, 0xaf, 0xe2, 0x86, 0x50, 0x87, 0x0f, 0x1a, 0x7f, 0x72, 0x27, 0x8c, 0x41, 0x29, 0x4b, 0x87, 0x5f, 0xe1, 0x2c, 0x05, 0xbd, 0x7d, 0x73, 0x1f, 0xe0, 0x02, 0x61, 0x23, 0xad, 0x4b, 0xb2, 0xe8, 0x73, 0xfe, 0xc8, 0x5e, 0x2c, 0xbe, 0x05, 0x69, 0x00, 0xa2, 0x79, 0xf0, 0x0b, 0xe6, 0xbd, 0x31, 0x60, 0xe1, 0x1e, 0x57, 0x4e, 0x37, 0xfe, 0x4e, 0xe2, 0x50, 0x78, 0xd6, 0xac, 0x09, 0x43, 0xd6, 0xc6, 0xa9, 0xd9, 0xf3, 0x13, 0x16, 0xd8, 0x62, 0xc5, 0x49, 0xa8, 0xfa, 0x22, 0xff, 0x5e, 0x8e, 0x87, 0xb1, 0xe0, 0x79, 0xad, 0xc7, 0x4a, 0x7a, 0x2b, 0x09, 0x91, 0xc3, 0x3c, 0x56, 0x67, 0x4c, 0xc3, 0x98, 0x5e, 0x6d, 0x8c, 0xf7, 0x4f, 0xac, 0xd5, 0x4d, 0xfd, 0xd4, 0x0d, 0xda, 0xf6, 0x47, 0xdb, 0x3a, 0xba, 0x94, 0x62, 0x93, 0x1f, 0x4c, 0xc4, 0x13, 0xf4, 0x12, 0xe4, 0x9a, 0xe5, 0xf2, 0x71, 0xb3, 0x9e, 0xf4, 0x20, 0xc9, 0x34, 0xf0, 0x38, 0x98, 0xc0, 0xa3, 0x54, 0xe1, 0x4d, 0x03, 0x64, 0x62, 0xf4, 0xd0, 0xf6, 0x05, 0x45, 0x6c, 0xb4, 0x58, 0xe9, 0xec, 0x2d, 0x3d, 0x86, 0x6f, 0xd8, 0xe3, 0xe3, 0xae, 0x55, 0xf4, 0x4d, 0xd5, 0xf7, 0x10, 0x39, 0x92, 0x80, 0x7b, 0x2a, 0x6b, 0x2b, 0x12, 0xd5, 0x54, 0xf0, 0x84, 0x83, 0x81, 0x03, 0xbe, 0xb8, 0x79, 0x9e, 0xa7, 0x12, 0x6c, 0x00, 0x0e, 0x73, 0xc6, 0xb6, 0xe0, 0x63, 0x04, 0x19, 0x9f, 0xaf, 0xc6, 0x18, 0x0f, 0x56, 0x26, 0x37, 0x33, 0xa6, 0x49, 0xd8, 0x77, 0xa3, 0x33, 0xb9, 0x2f, 0xa8, 0xe0, 0xbf, 0x40, 0x51, 0x90, 0xf2, 0x1d, 0x97, 0x62, 0xc8, 0xf6, 0x3d, 0x24, 0xa6, 0x2c, 0x6c, 0x6a, 0xa4, 0x07, 0x9a, 0xdd, 0x91, 0xab, 0xb0, 0xd6, 0x37, 0x48, 0x6b, 0x2c, 0xdf, 0x92, 0x02, 0x4a, 0x18, 0x71, 0x0a, 0x84, 0xb5, 0xf9, 0x97, 0xab, 0x15, 0x9c, 0xa5, 0xde, 0xa7, 0x9e, 0xb6, 0xa4, 0xac, 0xca, 0xbc, 0x38, 0x3f, 0x64, 0x38, 0x24, 0x93, 0x5e, 0xa4, 0x11, 0x7d, 0xce, 0x0f, 0xde, 0x32, 0xa0, 0x07, 0xef, 0x51, 0x88, 0xbb, 0xc8, 0x24, 0x3b, 0x61, 0xda, 0x23, 0xdf, 0xd6, 0x9c, 0xb9, 0xc0, 0x84, 0xde, 0x4b, 0x44, 0x89, 0x5b, 0x77, 0x21, 0x16, 0x8d, 0x99, 0xcd, 0x14, 0xc5, 0x94, 0x37, 0x0e, 0x7a, 0xcf, 0xb4, 0x4b, 0xe1, 0x7d, 0x3c, 0x3a, 0xbf, 0x22, 0xd6, 0x14, 0x7c, 0x52, 0x51, 0xbc, 0x78, 0xbc, 0x35, 0xea, 0xa2, 0x68, 0xf9, 0x88, 0x46, 0x3d, 0x76, 0x5c, 0x26, 0xc6, 0x9c, 0xe8, 0xcd, 0x36, 0x64, 0x8e, 0x20, 0xa9, 0x05, 0xf8, 0x36, 0xac, 0x6b, 0xb7, 0x69, 0x00, 0xe5, 0x2a, 0xad, 0x9b, 0x1e, 0xa2, 0x21, 0xf0, 0x4e, 0xc3, 0xe4, 0x70, 0xb1, 0x2e, 0x2a, 0x51, 0x39, 0x5d, 0x8f, 0x8e, 0x80, 0xcd, 0xab, 0x2f, 0x00, 0x63, 0xe6, 0xca, 0x86, 0x09, 0x8d, 0x4a, 0xe4, 0x98, 0x26, 0xef, 0xe6, 0xfa, 0x01, 0x96, 0x88, 0x90, 0x10, 0x3b, 0x66, 0xd1, 0xf8, 0xbc, 0x74, 0x34, 0x68, 0xdf, 0xef, 0x50, 0xaa, 0x97, 0x94, 0x42, 0x78, 0x83, 0x0f, 0x50, 0x10, 0xb8, 0xb6, 0xcc, 0x8b, 0xc0, 0x77, 0x3a, 0x6a, 0xe2, 0x0f, 0xb5, 0x72, 0xa4, 0x7d, 0x8e, 0xba, 0x8f, 0xb7, 0x37, 0x02, 0x32, 0x9b, 0x5f, 0x46, 0x6a, 0x28, 0x5f, 0x93, 0xe0, 0xee, 0xd5, 0x1a, 0xd2, 0xc3, 0x8e, 0x83, 0x17, 0xb8, 0xaa, 0x83, 0x5d, 0x4c, 0xfa, 0xb1, 0xb6, 0xdf, 0xad, 0x95, 0x53, 0x69, 0x2c, 0x02, 0x8e, 0x6b, 0x42, 0xa6, 0x2e, 0x26, 0x80, 0xe0, 0xe7, 0x0c, 0xe0, 0xd1, 0x21, 0x74, 0xa8, 0xb6, 0xfb, 0x91, 0x91, 0x75, 0x8e, 0xa5, 0x29, 0x75, 0x76, 0x72, 0x76, 0xb3, 0x8f, 0xf1, 0xdc, 0x13, 0xfc, 0x47, 0x40, 0xf4, 0x6e, 0xf5, 0x6e, 0x06, 0xa2, 0x4f, 0xb8, 0x60, 0x2c, 0x2f, 0xe0, 0xcd, 0x74, 0xea, 0x39, 0x67, 0xfe, 0x83, 0x08, 0x68, 0xee, 0x1f, 0x30, 0x3c, 0xcb, 0xb9, 0x0f, 0xdb, 0x83, 0x17, 0xa3, 0x55, 0xaf, 0xfd, 0xf1, 0xae, 0x19, 0xa0, 0xa7, 0xed, 0x7b, 0x5d, 0x00, 0x70, 0x8a, 0xab, 0xe8, 0x82, 0x33, 0x4f, 0x61, 0x30, 0x25, 0xcf, 0x25, 0x58, 0x8f, 0x28, 0x8c, 0x02, 0x2b, 0xc3, 0xb1, 0xf3, 0x7b, 0xa6, 0xd0, 0x80, 0x53, 0xe8, 0xf3, 0xa1, 0x97, 0x67, 0xce, 0x46, 0x46, 0xbd, 0xe7, 0xee, 0xb7, 0x6f, 0xfa, 0x75, 0x23, 0x68, 0x9b, 0x2d, 0x64, 0xa6, 0x1d, 0x31, 0xfc, 0x34, 0xb3, 0xf6, 0x59, 0x58, 0xd5, 0x23, 0x58, 0x0d, 0xe5, 0xa3, 0x07, 0xb3, 0x13, 0xf8, 0xaf, 0x06, 0x7e, 0xd2, 0x12, 0x4d, 0x9b, 0xe0, 0xf1, 0xd3, 0xdb, 0xe6, 0xd1, 0x9b, 0x88, 0x10, 0xff, 0x50, 0xf0, 0x86, 0xd2, 0x7b, 0xc6, 0x40, 0x30, 0xf9, 0xc5, 0x1c, 0x53, 0xab, 0x96, 0x2d, 0xcd, 0x6f, 0xf4, 0x56, 0xca, 0x4f, 0x0e, 0x18, 0x96, 0xf9, 0x2d, 0xa9, 0x5f, 0x6f, 0x96, 0x46, 0x3b, 0x00, 0xb2, 0xc9, 0x6d, 0x77, 0x6c, 0x7e, 0xe4, 0x92, 0xdb, 0x33, 0x04, 0xb6, 0x21, 0x8e, 0xa9, 0xe0, 0x93, 0xa4, 0x69, 0xdf, 0x1a, 0xc6, 0x1a, 0xc1, 0xd8, 0x9e, 0x94, 0x8b, 0x0f, 0x7c, 0xb8, 0x2d, 0x3f, 0xea, 0xb2, 0xb4, 0x8f, 0x86, 0x7a, 0xc2, 0x6e, 0x11, 0xa1, 0x3b, 0x7a, 0xc3, 0x4a, 0x42, 0xa1, 0xe1, 0x77, 0x64, 0x86, 0x92, 0x86, 0x12, 0x26, 0xef, 0xfb, 0x55, 0xbb, 0x59, 0x7f, 0xbd, 0xe1, 0x0f, 0x29, 0x9b, 0xf7, 0xff, 0xfd, 0x6f, 0xc8, 0xdd, 0xb2, 0xa4, 0x6a, 0x73, 0xb9, 0x7b, 0x67, 0x38, 0x7a, 0x46, 0x1b, 0x23, 0xe1, 0xd6, 0x5d, 0xc1, 0x19, 0x36, 0x62, 0x86, 0x97, 0x9a, 0xdd, 0x61, 0x5b, 0x92, 0x6b, 0x92, 0x72, 0x83, 0x2f, 0xc0, 0xc0, 0x58, 0xb9, 0x46, 0xfc, 0x75, 0x2d, 0xcf, 0xfc, 0xec, 0xa1, 0x22, 0x33, 0xf4, 0xc6, 0x3f, 0x78, 0x97, 0xcb, 0xaa, 0x08, 0xaa, 0x7e, 0x07, 0xcf, 0x02, 0xb5, 0xe7, 0xe3, 0xe5, 0xec, 0xe2, 0x52, 0xbf, 0x2f, 0xe6, 0x1d, 0x16, 0x3b, 0xce, 0x84, 0xc0, 0xe0, 0x36, 0x84, 0x54, 0xa9, 0x8e, 0x9f, 0xde, 0xbf, 0x6e, 0xdb, 0xd7, 0x0b, 0x29, 0x0d, 0x54, 0x9b, 0xa5, 0x57, 0x7d, 0x47, 0x6a, 0xf0, 0x41, 0x94, 0xf8, 0x23, 0x48, 0xd8, 0x5e, 0x9b, 0x29, 0x9f, 0x08, 0xdd, 0xde, 0x4e, 0xd9, 0x16, 0x75, 0x06, 0x7a, 0x17, 0x07, 0xcb, 0xf1, 0x9e, 0xee, 0xe6, 0x75, 0xd7, 0x33, 0x87, 0x80, 0x22, 0x46, 0xaf, 0x27, 0x17, 0xf2, 0x4d, 0xa7, 0xc7, 0x8f, 0xa8, 0x40, 0x45, 0x7a, 0xfc, 0x46, 0x66, 0xc2, 0x68, 0x75, 0xc4, 0x24, 0x07, 0x85, 0x09, 0x3a, 0x5e, 0xfe, 0x6a, 0xef, 0xf6, 0x4e, 0x71, 0x36, 0x49, 0x18, 0x00, 0xfc, 0xe3, 0xd0, 0x93, 0x5a, 0xc1, 0x85, 0xc5, 0x10, 0xfd, 0xfd, 0x16, 0x2f, 0xad, 0x07, 0xeb, 0x15, 0x08, 0x0d, 0xd6, 0x9e, 0xca, 0xe9, 0x18, 0x99, 0xda, 0xf9, 0x64, 0x79, 0x2a, 0x76, 0xe6, 0x4d, 0xdf, 0x01, 0x84, 0xf3, 0xb3, 0x7f, 0x64, 0x88, 0x97, 0x27, 0xae, 0x22, 0x9c, 0xd9, 0x93, 0xc2, 0x13, 0xb2, 0x8e, 0x84, 0xf3, 0xdd, 0xe9, 0x19, 0x7c, 0xac, 0x84, 0x77, 0x1a, 0xe7, 0xd2, 0xcf, 0x8c, 0x64, 0x24, 0xc0, 0x45, 0xd7, 0x2a, 0xca, 0x13, 0xec, 0xb6, 0x05, 0xfe, 0x93, 0xc4, 0x13, 0x73, 0x9b, 0xb8, 0x53, 0xa2, 0x83, 0xe6, 0x57, 0x24, 0x8d, 0x57, 0x99, 0xe1, 0x13, 0xca, 0x69, 0x31, 0x1e, 0xfa, 0x2a, 0x41, 0x35, 0x1f, 0xbe, 0xb9, 0x73, 0xb7, 0x3f, 0x9b, 0xdd, 0x86, 0xf0, 0x6e, 0xf2, 0xdc, 0x73, 0x9d, 0x83, 0x16, 0x3c, 0x1a, 0xc4, 0x67, 0x45, 0x46, 0xa4, 0xd9, 0x03, 0x15, 0x5a, 0x8e, 0x9a, 0x6d, 0x40, 0x4c, 0x4d, 0xd0, 0xe5, 0x39, 0x38, 0x3b, 0x5d, 0xe2, 0x41, 0x4e, 0xdc, 0x82, 0x4c, 0xac, 0x84, 0x82, 0xae, 0xa5, 0x7a, 0x3c, 0xe4, 0x13, 0x3f, 0x04, 0x86, 0x81, 0x3e, 0x69, 0x76, 0x93, 0xa1, 0xb8, 0x5d, 0xa2, 0x69, 0xc2, 0x58, 0xa6, 0xbe, 0xdf, 0xee, 0x59, 0x83, 0x33, 0x46, 0x99, 0x2e, 0x30, 0x96, 0x0e, 0xd7, 0x5c, 0xdf, 0x0e, 0x8e, 0x55, 0xd8, 0xbd, 0xf2, 0x12, 0x27, 0x79, 0x00, 0x6b, 0xd7, 0x75, 0x28, 0xdc, 0x07, 0xa3, 0xa6, 0x86, 0xdf, 0xd8, 0x0f, 0x76, 0xc9, 0x2b, 0x2a, 0x2a, 0xdd, 0x9e, 0x02, 0x51, 0x9c, 0x00, 0x39, 0xd3, 0xe2, 0x11, 0x9f, 0x11, 0x16, 0xe8, 0x03, 0x6e, 0xa4, 0x92, 0x4a, 0x0e, 0xad, 0xfc, 0xbe, 0xde, 0xfd, 0x12, 0xa8, 0xd4, 0x3d, 0x29, 0x20, 0x78, 0x69, 0x9a, 0x24, 0xa3, 0x85, 0xb0, 0xe8, 0x86, 0x8c, 0xc5, 0x6d, 0xef, 0xaa, 0xa7, 0x55, 0xc8, 0xaa, 0x41, 0xf6, 0xe0, 0xb2, 0x77, 0xad, 0xef, 0x2e, 0x51, 0x74, 0xd4, 0x0a, 0x5c, 0xb7, 0x20, 0x24, 0x4d, 0x64, 0xd8, 0x01, 0xe8, 0x42, 0x77, 0xbf, 0x20, 0x83, 0x33, 0x4a, 0x80, 0x9c, 0x81, 0xd3, 0xc9, 0x54, 0xdb, 0x7e, 0xdd, 0x1b, 0xc1, 0x5b, 0xdb, 0x9e, 0xfe, 0x98, 0x8c, 0x98, 0x2c, 0xf5, 0xfe, 0xeb, 0x7a, 0x77, 0x6e, 0xef, 0xad, 0x61, 0x6b, 0x0a, 0x65, 0x60, 0x39, 0x81, 0xa2, 0x06, 0x74, 0x8d, 0x86, 0x79, 0xf5, 0xb2, 0x5d, 0x6d, 0xfa, 0x4c, 0xda, 0x4f, 0x80, 0x6b, 0xa3, 0xc3, 0xf4, 0xe0, 0x11, 0x51, 0x0b, 0x98, 0x30, 0x5b, 0xef, 0x29, 0x0e, 0x53, 0x9b, 0xab, 0x32, 0x2b, 0x88, 0xc9, 0x6a, 0x0c, 0x89, 0x17, 0xca, 0x4a, 0xf3, 0xa7, 0xf1, 0x98, 0x02, 0xd7, 0x8e, 0x78, 0x78, 0x6c, 0x23, 0xf6, 0x87, 0xe5, 0x09, 0x96, 0xf1, 0x09, 0xb5, 0x8b, 0x6e, 0xc3, 0x39, 0x29, 0x4e, 0x2f, 0x0d, 0x9d, 0x5f, 0xf5, 0x10, 0xdc, 0x11, 0xd6, 0xca, 0xd9, 0xd8, 0x84, 0xf4, 0xfb, 0xd2, 0xb7, 0x3a, 0xce, 0xaa, 0x7d, 0x3f, 0xf9, 0xbc, 0xd1, 0xe2, 0x70, 0x7a, 0x70, 0xc0, 0xea, 0x0e, 0xe8, 0xf9, 0x96, 0x41, 0xf2, 0x38, 0x09, 0x9b, 0x01, 0xed, 0x7b, 0xcb, 0x1b, 0xdd, 0x34, 0x4a, 0xe8, 0xdd, 0x41, 0x3c, 0x09, 0xda, 0x6b, 0x97, 0xaa, 0x1d, 0x6a, 0x86, 0x5b, 0xcd, 0x55, 0x10, 0x1b, 0xb6, 0x5d, 0xf5, 0xb6, 0x48, 0xbb, 0xd8, 0x52, 0xe3, 0xe7, 0xa3, 0x44, 0x52, 0x0b, 0x28, 0x28, 0x95, 0xb7, 0x04, 0x30, 0xe3, 0xd6, 0xc9, 0xbc, 0xef, 0xe1, 0x5c, 0x2b, 0x6b, 0x52, 0x9b, 0xf1, 0xca, 0x5c, 0x43, 0xea, 0x4b, 0xd9, 0x11, 0xef, 0x33, 0x84, 0x28, 0xa6, 0x59, 0x68, 0xb3, 0x9e, 0xe8, 0x98, 0xcb, 0x9b, 0x61, 0x21, 0x9b, 0x2e, 0xdf, 0x3d, 0xc2, 0x89, 0x9f, 0xc9, 0xf8, 0x92, 0xbf, 0xf9, 0xf5, 0x36, 0x46, 0x4b, 0x8f, 0x00, 0x65, 0xb9, 0x22, 0xea, 0xfd, 0x33, 0x34, 0x73, 0x60, 0x4c, 0x59, 0xf1, 0x5c, 0x34, 0x55, 0x29, 0x76, 0xe6, 0x81, 0x1d, 0x73, 0xa2, 0x70, 0x25, 0x1d, 0x9e, 0xd1, 0x41, 0x43, 0xf9, 0x97, 0xae, 0x02, 0xf0, 0x58, 0xb7, 0x43, 0x54, 0xf3, 0xce, 0x85, 0x3b, 0x76, 0xdb, 0xdd, 0xf7, 0x3f, 0xd4, 0x3a, 0x44, 0x61, 0x8e, 0xee, 0xc5, 0x49, 0xd3, 0x6a, 0xb2, 0xa1, 0xb4, 0x49, 0xcb, 0x74, 0x20, 0x91, 0x90, 0x93, 0xb6, 0x35, 0xb3, 0x38, 0xd8, 0xde, 0xce, 0xea, 0x01, 0xea, 0x52, 0xa0, 0x58, 0xb5, 0xbf, 0x29, 0x85, 0x18, 0x1b, 0xcb, 0xc3, 0x30, 0x9d, 0x2b, 0x36, 0x61, 0xa9, 0x6c, 0x80, 0x9a, 0x01, 0x9b, 0x8f, 0xda, 0x39, 0x4b, 0xb8, 0xf3, 0x6b, 0x7c, 0x0a, 0x8e, 0x2d, 0xc2, 0xdc, 0x6f, 0xc0, 0xa3, 0xa9, 0xfa, 0x8a, 0x40, 0x1e, 0xf6, 0xc6, 0x38, 0x70, 0x92, 0x7b, 0xc9, 0xf3, 0xa5, 0xaa, 0x38, 0xe9, 0x3a, 0xcc, 0x73, 0x97, 0x4c, 0x7c, 0xf6, 0x9f, 0xce, 0x70, 0xeb, 0x89, 0xef, 0xad, 0x95, 0xa3, 0x9b, 0xfb, 0xee, 0x0b, 0x45, 0x97, 0x8f, 0x0a, 0xe4, 0x29, 0xd1, 0xa3, 0x3b, 0xf5, 0x32, 0x6c, 0x5e, 0x55, 0xfa, 0x9d, 0x72, 0x67, 0x1e, 0x67, 0xb4, 0x03, 0x64, 0x87, 0xbd, 0xf0, 0xc8, 0x1a, 0x04, 0x57, 0x1e, 0xb3, 0xa4, 0x77, 0xfa, 0xab, 0x5f, 0x9b, 0xcd, 0xb8, 0xe3, 0x49, 0x50, 0xc1, 0x4d, 0xbd, 0x26, 0xf1, 0xec, 0x96, 0xbd, 0x0b, 0x47, 0xce, 0x75, 0xfd, 0x61, 0xef, 0x04, 0xb7, 0x3b, 0x84, 0x19, 0x3d, 0x9b, 0xce, 0x3f, 0xfb, 0x0c, 0xb9, 0x04, 0x5a, 0x26, 0x0e, 0x5b, 0x90, 0x0f, 0xea, 0x40, 0xbc, 0x42, 0x6f, 0x9a, 0x32, 0x8f, 0xb9, 0x65, 0x13, 0x63, 0x14, 0x10, 0x22, 0x4a, 0x6c, 0x24, 0xd2, 0xb2, 0x05, 0x27, 0xa4, 0xf2, 0x6c, 0xc0, 0xaf, 0x8b, 0xad, 0x1c, 0x80, 0xad, 0xc6, 0x8f, 0x25, 0xfd, 0x5c, 0x7f, 0x85, 0x95, 0xad, 0x7e, 0xf3, 0x4c, 0xc6, 0xb6, 0x02, 0x38, 0xf5, 0x8a, 0x9a, 0x72, 0x82, 0x7a, 0x4b, 0x19, 0x9a, 0x47, 0xe2, 0x9a, 0x8c, 0x58, 0x3a, 0x2e, 0x38, 0x5d, 0x55, 0xa4, 0xc3, 0x32, 0xab, 0x60, 0x90, 0x06, 0xc2, 0xa4, 0x6c, 0xbc, 0xff, 0x0e, 0x09, 0x91, 0xbc, 0x62, 0xae, 0x00, 0x9b, 0x8a, 0x2c, 0xe3, 0x19, 0xdb, 0x14, 0xda, 0x66, 0x9a, 0x27, 0xf0, 0x74, 0xbf, 0x0e, 0x7c, 0x4d, 0xf8, 0x4c, 0x46, 0xab, 0xf1, 0x70, 0xeb, 0xc2, 0xd3, 0x8f, 0x83, 0x61, 0x0b, 0xf1, 0x80, 0x39, 0x4c, 0x0b, 0xd9, 0x7c, 0xd7, 0xad, 0x69, 0xab, 0xfa, 0x7d, 0x92, 0xa9, 0xd6, 0xa4, 0x25, 0x13, 0x66, 0xc7, 0x86, 0xd4, 0xbd, 0x39, 0x0b, 0xf3, 0x8f, 0x6f, 0xa6, 0xb0, 0xf3, 0xb4, 0xc4, 0xd0, 0x67, 0x1d, 0x74, 0x35, 0x15, 0xc0, 0xcc, 0xb1, 0x55, 0x21, 0x88, 0x1c, 0x72, 0xed, 0xf5, 0xa4, 0xb1, 0xeb, 0x0e, 0x65, 0x8f, 0x2f, 0xe4, 0x3a, 0x4b, 0x91, 0x43, 0xd2, 0xa4, 0x5d, 0x92, 0x06, 0xe4, 0x4c, 0xfb, 0x69, 0x1d, 0xb3, 0xcc, 0x21, 0xb3, 0xfb, 0x1d, 0xf6, 0x1a, 0x51, 0xb4, 0xa9, 0xe1, 0x9e, 0x25, 0x87, 0xf0, 0xba, 0x3d, 0x3d, 0x0e, 0xdd, 0xa1, 0xee, 0xa6, 0x56, 0xb3, 0x83, 0xca, 0x7f, 0xb5, 0x43, 0x78, 0xf0, 0x31, 0xa3, 0x1c, 0xf3, 0x98, 0x5f, 0x57, 0x38, 0x29, 0xc9, 0xff, 0xca, 0x14, 0x61, 0x67, 0x42, 0xe0, 0xa7, 0xe0, 0x3b, 0x0a, 0x2d, 0x7f, 0x05, 0xef, 0xf0, 0x21, 0x9e, 0xeb, 0xe8, 0xad, 0xdd, 0xc3, 0xde, 0x99, 0xf1, 0x40, 0x7e, 0xb0, 0x0a, 0x1d, 0xad, 0x12, 0x56, 0x24, 0x1d, 0x7c, 0x2f, 0x93, 0x1e, 0xc9, 0x93, 0xc4, 0xb7, 0xb9, 0xd4, 0x0d, 0xf5, 0xf2, 0x90, 0xe6, 0x83, 0x44, 0xe4, 0x49, 0x7b, 0x31, 0xdd, 0x5f, 0x7c, 0xad, 0x2f, 0x58, 0xfd, 0x22, 0x2a, 0x9a, 0xe0, 0xb7, 0xe9, 0x1f, 0x4a, 0xd2, 0xcd, 0x18, 0xb3, 0xdb, 0x2a, 0xd7, 0x39, 0x44, 0x3f, 0xeb, 0x3a, 0xc6, 0x6c, 0x8d, 0x21, 0xed, 0x9f, 0x3b, 0x80, 0xd6, 0x10, 0xa2, 0x60, 0x38, 0x2e, 0xc1, 0xd5, 0xa1, 0xd8, 0x4c, 0xd5, 0x02, 0xd1, 0x4e, 0x49, 0x6e, 0x6e, 0x13, 0x65, 0x1f, 0x92, 0x45, 0x35, 0xba, 0xdc, 0x55, 0x79, 0xd3, 0x1f, 0x1c, 0xb3, 0xb4, 0x13, 0xc3, 0x7e, 0x5a, 0x4a, 0xe0, 0x21, 0xc1, 0x65, 0xe1, 0x64, 0x62, 0x87, 0xae, 0xa3, 0xf9, 0x0a, 0x8a, 0x20, 0x8b, 0x71, 0x3a, 0x9d, 0xa8, 0x9e, 0x6a, 0x2b, 0xee, 0x46, 0x4c, 0x3d, 0xce, 0xa1, 0x82, 0x00, 0x93, 0x66, 0x3e, 0xef, 0x9f, 0xf6, 0xa8, 0xa2, 0xf8, 0xd7, 0x80, 0xe6, 0x04, 0x65, 0x04, 0x13, 0x91, 0xc4, 0x14, 0x9a, 0x18, 0x19, 0x94, 0xde, 0x43, 0xfa, 0x12, 0x45, 0xac, 0x23, 0xa8, 0x8e, 0xe8, 0x6a, 0x24, 0x65, 0xc4, 0xf5, 0x67, 0x34, 0xce, 0xaa, 0x0b, 0x3d, 0x18, 0xe7, 0x49, 0xe6, 0x38, 0x73, 0x19, 0x53, 0x93, 0xb5, 0x9a, 0x3a, 0xdc, 0x24, 0xb5, 0xf3, 0xd7, 0xff, 0xfd, 0xcf, 0x63, 0x3e, 0xda, 0xab, 0xb7, 0xc8, 0xe7, 0xc5, 0xec, 0xe6, 0x98, 0xce, 0xbc, 0xf8, 0x20, 0x40, 0x89, 0x67, 0x92, 0xf1, 0xa0, 0xda, 0x46, 0xe9, 0xc0, 0xad, 0x7e, 0x70, 0xd6, 0x9f, 0x49, 0x6c, 0x0b, 0xca, 0xa8, 0xea, 0x00, 0xd9, 0xf0, 0xfb, 0x58, 0x75, 0x6f, 0xc1, 0x78, 0x00, 0x52, 0xc9, 0x8a, 0x86, 0xc6, 0x9b, 0xc8, 0xf0, 0x5e, 0x90, 0xf7, 0x7b, 0xb5, 0xe4, 0x31, 0x69, 0x54, 0x0c, 0xe8, 0xf7, 0xd6, 0x4a, 0x28, 0x8e, 0x4a, 0x7e, 0x1c, 0x3d, 0xd8, 0x3f, 0xd4, 0x67, 0xa8, 0x2a, 0x45, 0xb9, 0xff, 0x7a, 0x92, 0x5f, 0xab, 0xda, 0x8a ],
- const [ 0xdf, 0x75, 0x3c, 0x3c, 0x6e, 0xb6, 0xf4, 0xe3, 0x4d, 0xde, 0x6e, 0xe5, 0x38, 0x8b, 0x5b, 0x81, 0x81, 0x96, 0xc4, 0xe7, 0xa9, 0x51, 0x43, 0x9e, 0x2d, 0x0d, 0x72, 0x23, 0xa2, 0xe0, 0xa4, 0xd3, 0x04, 0xa5, 0xd3, 0x0a, 0x4c, 0x43, 0xda, 0x8d, 0x40, 0x33, 0xe4, 0x25, 0x8f, 0x3c, 0x25, 0x8d, 0x1d, 0x81, 0xc8, 0x8e, 0x9c, 0xbe, 0x28, 0x69, 0x5c, 0xcf, 0x42, 0x75, 0x64, 0x72, 0x6b, 0x09, 0xc1, 0x4d, 0x3e, 0x9c, 0x1e, 0x33, 0xd9, 0x2b, 0x95, 0xa3, 0x49, 0xdc, 0xc5, 0x91, 0x42, 0xe0, 0x25, 0x69, 0x13, 0x9d, 0x97, 0x52, 0xda, 0x0d, 0x41, 0xb0, 0xf4, 0x61, 0x98, 0xec, 0xb8, 0xeb, 0xbd, 0x77, 0x65, 0x3a, 0x0d, 0x0c, 0x58, 0x87, 0xf4, 0x36, 0x83, 0x50, 0x01, 0x13, 0x1a, 0x42, 0x40, 0x57, 0x8f, 0x5c, 0xc4, 0x93, 0xc1, 0x52, 0x83, 0xb8, 0x71, 0x2f, 0x67, 0xd7, 0xf5, 0x3f, 0xa1, 0x2a, 0x30, 0x2c, 0x41, 0x58, 0xc1, 0x67, 0x03, 0xf5, 0x7b, 0xc9, 0x6c, 0x48, 0x15, 0x7b, 0x16, 0x52, 0x23, 0x13, 0x49, 0x0b, 0x45, 0xff, 0xca, 0xef, 0x9f, 0x27, 0xf8, 0xb9, 0x89, 0xce, 0x14, 0x6f, 0x87, 0xb9, 0xe1, 0x9e, 0x7b, 0x94, 0x6d, 0xe7, 0x19, 0x91, 0x2e, 0xba, 0x9c, 0x52, 0x50, 0x62, 0xb7, 0x09, 0x4e, 0x42, 0xcf, 0xde, 0xc0, 0x5e, 0x67, 0x91, 0x74, 0x1d, 0xdc, 0x60, 0xbf, 0x4d, 0x52, 0x2b, 0x15, 0x67, 0xee, 0xd6, 0xd8, 0x14, 0x46, 0xef, 0x6e, 0xf1, 0x15, 0x90, 0x96, 0x8f, 0x34, 0x87, 0xfc, 0xbf, 0xc5, 0xb5, 0x0b, 0x0c, 0xb1, 0xb4, 0x02, 0x88, 0x56, 0xbd, 0x4a, 0xcc, 0x79, 0xc8, 0x07, 0x3a, 0x82, 0xf4, 0xed, 0x85, 0xe8, 0x2a, 0x54, 0x74, 0xea, 0xfd, 0x8f, 0xe2, 0x80, 0xd5, 0x7a, 0x0a, 0x91, 0x4d, 0x53, 0x01, 0x66, 0xd9, 0xcb, 0x84, 0x5f, 0xac, 0x5c, 0xf4, 0xe4, 0xd9, 0xdc, 0x9f, 0x9f, 0xb8, 0x53, 0x41, 0xe8, 0x8b, 0x0a, 0xcb, 0x81, 0x61, 0xe4, 0x62, 0x84, 0x3b, 0xf1, 0xab, 0x99, 0x6e, 0x41, 0x46, 0x6c, 0x48, 0xf6, 0x98, 0x5f, 0xf6, 0x9d, 0xce, 0x7c, 0xa5, 0xbf, 0x1e, 0xad, 0xe8, 0xb2, 0x50, 0x2f, 0x5a, 0xb5, 0x7e, 0x44, 0x84, 0x3d, 0x18, 0x28, 0x01, 0x89, 0x2a, 0x47, 0xdf, 0x7c, 0xe2, 0xad, 0x49, 0xac, 0x4d, 0xbe, 0x63, 0xb7, 0x61, 0x27, 0x76, 0xd6, 0x40, 0x14, 0x4d, 0xb4, 0xbb, 0xa4, 0xdf, 0x80, 0x15, 0x99, 0x2e, 0x40, 0x0a, 0x55, 0x6e, 0x69, 0x10, 0x02, 0x6a, 0xad, 0xdd, 0x10, 0x24, 0x15, 0x29, 0xe4, 0xbb, 0x4f, 0xb5, 0xce, 0x92, 0x49, 0x8c, 0x3c, 0xaf, 0xff, 0x89, 0x2e, 0x61, 0x91, 0x19, 0xea, 0x26, 0x98, 0x42, 0xf1, 0xcb, 0xba, 0xe5, 0x31, 0xd5, 0x7c, 0x40, 0x7c, 0x20, 0x58, 0xb6, 0x39, 0xc6, 0x10, 0xd3, 0x5a, 0x42, 0x41, 0x8b, 0x8e, 0xd6, 0x3b, 0xc2, 0xb7, 0x2a, 0x10, 0x12, 0x9e, 0x35, 0xeb, 0xc8, 0xe5, 0x60, 0xa3, 0x2f, 0x3e, 0xe9, 0x90, 0x12, 0xdb, 0x86, 0x9e, 0x7c, 0x26, 0x4c, 0x9f, 0xc2, 0xb1, 0xce, 0xe6, 0xc3, 0x70, 0x89, 0x11, 0x6f, 0x26, 0x80, 0x26, 0x86, 0x1d, 0x23, 0xe2, 0xa2, 0x1a, 0x75, 0x4d, 0x78, 0x90, 0x6e, 0x92, 0x5b, 0x14, 0x9e, 0x0e, 0x02, 0x11, 0x14, 0xa7, 0x8a, 0xbd, 0x7e, 0x5f, 0xbe, 0x4b, 0x92, 0x28, 0x97, 0x63, 0xac, 0xfb, 0xff, 0xcf, 0xb8, 0x24, 0xda, 0x77, 0x52, 0xe0, 0x47, 0x8f, 0x2c, 0x29, 0x23, 0x0f, 0xb0, 0xd1, 0xd0, 0x63, 0xe7, 0xce, 0x34, 0x64, 0x9a, 0xd5, 0x04, 0x88, 0xb7, 0x2a, 0x42, 0x55, 0xf5, 0xb6, 0x04, 0x1c, 0xbb, 0x5a, 0x78, 0xe3, 0x3f, 0x83, 0x25, 0xa3, 0xeb, 0xfe, 0x73, 0xb4, 0x04, 0x0e, 0x6e, 0x85, 0x8d, 0xbc, 0xc7, 0x90, 0x69, 0x6f, 0x1b, 0x8d, 0xc1, 0xbc, 0x78, 0xe6, 0xa5, 0x7f, 0x1e, 0x6c, 0xf6, 0x2b, 0x82, 0x48, 0x83, 0x5e, 0x99, 0x34, 0x72, 0xb9, 0x52, 0xeb, 0xe2, 0xee, 0x65, 0xdd, 0xce, 0x1a, 0x4b, 0x28, 0x34, 0x56, 0x8d, 0xc4, 0x77, 0x88, 0x42, 0xfd, 0x03, 0x80, 0xd3, 0x27, 0x2f, 0x40, 0x02, 0x8d, 0x67, 0x9a, 0x2b, 0xaa, 0x8a, 0x01, 0xc9, 0x9c, 0x91, 0x99, 0x3b, 0xd5, 0x72, 0x90, 0xc9, 0x14, 0x43, 0xb1, 0xe2, 0x93, 0xa3, 0x36, 0xa7, 0x82, 0x56, 0xde, 0xae, 0xb5, 0x2f, 0x40, 0xff, 0x9a, 0x33, 0x5f, 0x63, 0x6d, 0xfb, 0x7e, 0xdf, 0xaf, 0x5a, 0x36, 0x7b, 0xd4, 0x40, 0xc5, 0x47, 0x3c, 0xde, 0xa9, 0xa0, 0x64, 0x0b, 0x6e, 0xb0, 0x5e, 0xe7, 0xc4, 0x34, 0x7e, 0xbe, 0xd4, 0x82, 0x57, 0x2f, 0xd4, 0xca, 0xe5, 0x8d, 0xd9, 0x9c, 0x0c, 0x85, 0xed, 0xaa, 0x41, 0x01, 0x62, 0xd0, 0x88, 0x4d, 0x66, 0x51, 0x9e, 0x78, 0xd7, 0x64, 0x77, 0xfe, 0x58, 0xef, 0xeb, 0xa3, 0xa4, 0x92, 0xac, 0xa2, 0x22, 0xe7, 0x7b, 0x07, 0xba, 0x08, 0x9b, 0x5a, 0xe8, 0x52, 0x86, 0x7d, 0x0e, 0x69, 0xe0, 0xd7, 0x0f, 0x7c, 0xa9, 0xb3, 0x19, 0xcb, 0xb6, 0xe2, 0xc2, 0x66, 0x62, 0xa8, 0x57, 0x37, 0x81, 0xd6, 0x70, 0x42, 0x95, 0x33, 0xc8, 0x2c, 0x45, 0x20, 0x4c, 0xfa, 0x0a, 0x7c, 0x72, 0x1c, 0x2c, 0xc6, 0xcc, 0xaa, 0xed, 0x81, 0xdd, 0xed, 0x03, 0xdd, 0x2b, 0x21, 0x4c, 0x93, 0x95, 0x79, 0xbe, 0x11, 0xe7, 0x64, 0x9d, 0xd7, 0xac, 0x0f, 0xf0, 0x21, 0x44, 0x2b, 0x35, 0xc6, 0x36, 0xf0, 0x54, 0x60, 0xc7, 0x62, 0xd2, 0xad, 0xcb, 0xd3, 0x47, 0x35, 0xbb, 0xa9, 0x12, 0x2d, 0x08, 0x61, 0x4b, 0x9c, 0xaf, 0xd4, 0xf9, 0xbc, 0x0e, 0xb9, 0x85, 0xa3, 0xf5, 0x6c, 0x6f, 0x22, 0x01, 0xee, 0x40, 0xee, 0x25, 0x2c, 0xc0, 0xfd, 0x8a, 0x84, 0x68, 0x33, 0x99, 0x85, 0x1a, 0x3e, 0x56, 0xf6, 0x10, 0xbf, 0xef, 0x1a, 0x13, 0xaa, 0x94, 0x33, 0xed, 0xef, 0x8a, 0x45, 0x20, 0x5a, 0x7b, 0x1c, 0xd8, 0xb7, 0x11, 0x90, 0x1f, 0x3b, 0xc3, 0x08, 0x50, 0x1f, 0xee, 0x3d, 0xce, 0x8e, 0x27, 0x41, 0xf5, 0xc1, 0xd0, 0xbf, 0x51, 0x69, 0xe9, 0x84, 0x0e, 0x4d, 0x29, 0x3e, 0xb0, 0x34, 0x4d, 0x84, 0x05, 0x05, 0xb1, 0x17, 0x57, 0x2d, 0x1d, 0x68, 0xe5, 0x41, 0xe1, 0x5a, 0x95, 0xe4, 0x24, 0x48, 0xe3, 0xec, 0x79, 0x4a, 0x1d, 0xc0, 0xb3, 0xb4, 0xd2, 0x04, 0xfb, 0xe0, 0x88, 0x79, 0x1f, 0x2e, 0xad, 0x1e, 0x2d, 0x48, 0xd0, 0x9c, 0x41, 0xab, 0x11, 0xe0, 0x9b, 0x63, 0xd6, 0x0a, 0xf4, 0x15, 0xc0, 0x86, 0x12, 0x43, 0xde, 0x78, 0x9b, 0xcc, 0x20, 0x5e, 0x27, 0xb2, 0x0e, 0xf1, 0x98, 0x20, 0xb9, 0x4b, 0xae, 0xac, 0xf2, 0x4f, 0xd6, 0xd9, 0xbb, 0x46, 0x43, 0xe0, 0xfb, 0xc6, 0x40, 0xb0, 0x76, 0xd8, 0xc5, 0x33, 0xfb, 0x59, 0x48, 0xd3, 0xdf, 0xa1, 0xd5, 0x3d, 0xab, 0x63, 0x61, 0x64, 0x12, 0xd4, 0x5c, 0xc9, 0x26, 0x10, 0x85, 0xfb, 0xcb, 0xb9, 0x02, 0x59, 0x6b, 0xe1, 0xb0, 0x1f, 0xeb, 0x2a, 0xb8, 0xa1, 0xde, 0x2b, 0x63, 0xd1, 0xf9, 0x16, 0x2f, 0x07, 0xc7, 0x98, 0x22, 0x02, 0x9e, 0x01, 0x5e, 0x2a, 0xd2, 0xa5, 0xf6, 0x17, 0x28, 0x82, 0x00, 0x57, 0x8e, 0x23, 0xeb, 0x6c, 0x09, 0xc4, 0x13, 0x15, 0xee, 0xb6, 0x93, 0xcf, 0x55, 0x05, 0x5a, 0x9a, 0xcb, 0x59, 0x82, 0x00, 0x47, 0x1a, 0xdd, 0x54, 0x60, 0xd7, 0xd0, 0x38, 0xbc, 0xe9, 0x64, 0x61, 0xcc, 0x53, 0x9a, 0x9f, 0xb6, 0xed, 0xff, 0x17, 0x93, 0xc2, 0x81, 0xd3, 0xdb, 0xb6, 0x81, 0x7e, 0x1d, 0x6c, 0x29, 0x68, 0xf4, 0x66, 0x00, 0xd1, 0x36, 0x6e, 0xbb, 0x63, 0x6e, 0x35, 0x57, 0x00, 0x8d, 0x3b, 0x64, 0xbe, 0xdc, 0xee, 0xa4, 0x30, 0x35, 0x16, 0xd4, 0xe8, 0x73, 0x70, 0xca, 0x39, 0x27, 0x99, 0xc0, 0x42, 0x8d, 0x2e, 0xf0, 0x27, 0xbe, 0x32, 0x61, 0xa2, 0x26, 0xb0, 0x00, 0xbb, 0x39, 0xa1, 0xf2, 0xd3, 0x62, 0x0f, 0x29, 0xe7, 0x3c, 0x7b, 0x35, 0x13, 0x05, 0x7d, 0x5d, 0x55, 0x50, 0xaa, 0xef, 0x94, 0xf9, 0xba, 0xd4, 0xe1, 0x5e, 0xeb, 0x67, 0xfc, 0xcc, 0xa0, 0x88, 0x1a, 0x38, 0x4e, 0xeb, 0xe5, 0x30, 0x98, 0xb6, 0xc5, 0x11, 0xb9, 0x4c, 0x5e, 0x79, 0x23, 0x63, 0x5a, 0xff, 0x65, 0x5d, 0x68, 0x22, 0x52, 0xd5, 0x84, 0x80, 0x60, 0x78, 0x7a, 0x49, 0x4e, 0x16, 0xa5, 0xf2, 0x0a, 0xf8, 0xfd, 0x2e, 0xd1, 0x75, 0x51, 0x1a, 0x98, 0xc0, 0xd0, 0xb7, 0xab, 0x04, 0xce, 0x9e, 0x94, 0xb3, 0xc5, 0xef, 0x3e, 0x1b, 0x9a, 0x8b, 0x5a, 0x3a, 0x22, 0x83, 0x02, 0xd3, 0xe5, 0xd0, 0x9c, 0xc1, 0x22, 0x44, 0x02, 0x8c, 0x13, 0xc0, 0xe0, 0x3a, 0x71, 0xa8, 0x5d, 0x67, 0x3b, 0x94, 0xfd, 0x98, 0xb4, 0x48, 0xc5, 0xcd, 0xab, 0xe7, 0xa1, 0x55, 0xfe, 0x63, 0x04, 0xe6, 0x61, 0x38, 0xce, 0xed, 0x5c, 0x5a, 0x72, 0x23, 0x93, 0x6b, 0x58, 0x61, 0x4a, 0x32, 0x80, 0xb5, 0x28, 0x49, 0x69, 0xb5, 0x3b, 0x15, 0x31, 0x13, 0x3d, 0xfb, 0xfd, 0x72, 0x16, 0xd1, 0x9b, 0x78, 0xa1, 0x93, 0x66, 0x25, 0xb3, 0x58, 0x6a, 0x63, 0x5a, 0x84, 0xc9, 0xde, 0x62, 0x3e, 0x5e, 0x15, 0x1e, 0x25, 0x9f, 0xb2, 0x65, 0x3e, 0xc8, 0x16, 0xda, 0x31, 0x36, 0x39, 0x70, 0xb6, 0x10, 0xb1, 0x2e, 0x4a, 0x2d, 0x10, 0x30, 0x26, 0x32, 0x73, 0xef, 0x71, 0xfb, 0x58, 0xc2, 0xb5, 0x3d, 0xb0, 0xa4, 0x90, 0x69, 0x36, 0x37, 0xac, 0xd3, 0xfe, 0x09, 0xf0, 0x13, 0x51, 0x16, 0xf8, 0xab, 0xb8, 0x8f, 0xc3, 0xeb, 0x57, 0xda, 0xac, 0x12, 0x7c, 0xda, 0x9c, 0xb6, 0x78, 0x70, 0x7d, 0x66, 0xae, 0x42, 0xf2, 0x8d, 0xe9, 0xbb, 0x45, 0x99, 0xf3, 0x53, 0xa1, 0x5d, 0x63, 0x10, 0x81, 0xb4, 0xb6, 0x4c, 0x68, 0x68, 0xa1, 0xba, 0xd3, 0x52, 0xa6, 0xa4, 0x6b, 0xc2, 0xe6, 0x76, 0x80, 0x21, 0x36, 0x80, 0xb3, 0xd4, 0x74, 0xf8, 0xf2, 0x64, 0x1c, 0x3e, 0xaa, 0xdc, 0x16, 0x64, 0x37, 0x73, 0xd2, 0xee, 0xa0, 0x6b, 0x97, 0xd6, 0x81, 0x39, 0x18, 0xd4, 0x48, 0xe6, 0x49, 0xdc, 0xa4, 0xb5, 0x70, 0xe7, 0x3b, 0x06, 0x7f, 0xf6, 0x9c, 0x7a, 0xa1, 0x54, 0x74, 0x58, 0x13, 0x1c, 0x04, 0x30, 0x35, 0xfc, 0xd2, 0xbe, 0xe1, 0x38, 0x9f, 0x10, 0xfb, 0xf2, 0x9a, 0xeb, 0x49, 0xa8, 0xd3, 0x6c, 0x85, 0xfe, 0xf2, 0xeb, 0xb1, 0xbe, 0x29, 0x24, 0xab, 0x1d, 0x67, 0x99, 0x01, 0x40, 0xcf, 0x32, 0x06, 0xfe, 0x68, 0x27, 0x26, 0xe8, 0x16, 0x1f, 0x76, 0x86, 0xc9, 0x9a, 0x8f, 0xe4, 0xf4, 0x8c, 0x9d, 0x4d, 0x41, 0x4a, 0xb3, 0x57, 0x83, 0xaa, 0x62, 0x20, 0xeb, 0x66, 0x89, 0xd6, 0x80, 0xc2, 0x6e, 0x7d, 0xc9, 0x6f, 0x0e, 0xec, 0xcc, 0xae, 0xb2, 0x19, 0x3d, 0xb9, 0xc3, 0x97, 0xef, 0x5e, 0xdf, 0x5d, 0x8e, 0xed, 0x2c, 0xc9, 0x90, 0x54, 0xed, 0xe5, 0x69, 0x89, 0x53, 0xe8, 0xfe, 0x28, 0x95, 0x00, 0x5d, 0x5e, 0x43, 0x4e, 0xab, 0x05, 0xd7, 0x32, 0x5d, 0x10, 0x8d, 0xca, 0xac, 0x2a, 0x74, 0xb5, 0x42, 0x9a, 0xc5, 0x1d, 0x3a, 0x6a, 0x74, 0xf4, 0x47, 0xc8, 0x06, 0x7d, 0x33, 0xac, 0xa2, 0x0f, 0x8c, 0xbb, 0x6a, 0x16, 0x9a, 0x6c, 0x0c, 0x5a, 0x93, 0x69, 0x93, 0x84, 0x12, 0x38, 0x84, 0xde, 0xc6, 0x1a, 0x26, 0x5a, 0x67, 0x33, 0x21, 0xd6, 0xef, 0xec, 0x4a, 0x9e, 0x06, 0x96, 0xbe, 0x32, 0xbe, 0x50, 0x2e, 0x4a, 0x80, 0x2a, 0x79, 0x18, 0x47, 0x8a, 0x80, 0xcd, 0x0b, 0xcf, 0x36, 0x5e, 0x81, 0x35, 0xf6, 0x88, 0x01, 0xf8, 0x1a, 0x12, 0xc7, 0xbd, 0xc9, 0x52, 0x5f, 0x2d, 0x10, 0xf2, 0x5b, 0xe3, 0x34, 0xf4, 0x47, 0x88, 0x47, 0xf4, 0xdf, 0x3c, 0xfa, 0xad, 0x7f, 0x38, 0xb2, 0xbf, 0xda, 0xb2, 0xde, 0xb0, 0xef, 0x01, 0x87, 0x30, 0x39, 0x02, 0x28, 0xa1, 0x26, 0xba, 0xc1, 0xd6, 0xcb, 0x3d, 0x27, 0x1b, 0xd6, 0xce, 0x9e, 0x76, 0xc4, 0x47, 0xa9, 0x2d, 0x54, 0xbc, 0x21, 0x88, 0x3b, 0x5b, 0x85, 0xd8, 0x19, 0x96, 0x91, 0xb8, 0xac, 0x85, 0x12, 0x93, 0x43, 0x85, 0xf8, 0x67, 0x76, 0x26, 0xad, 0xc8, 0x15, 0x44, 0xa5, 0x27, 0x5e, 0x73, 0x37, 0x54, 0x73, 0xa1, 0xab, 0x42, 0x0b, 0xf6, 0x94, 0x0b, 0x67, 0xff, 0x60, 0x33, 0x88, 0x0c, 0x2d, 0x31, 0x9f, 0xd6, 0xde, 0x2b, 0xc5, 0x65, 0x6e, 0x02, 0xec, 0x31, 0x85, 0x8e, 0x15, 0x88, 0x49, 0x2b, 0xc4, 0x2f, 0x77, 0x74, 0xb1, 0x4c, 0xb2, 0x4e, 0xc1, 0x83, 0x1b, 0x29, 0x34, 0x60, 0x21, 0x82, 0x20, 0xf5, 0x9b, 0xac, 0x1e, 0xc4, 0x14, 0xd1, 0x43, 0xdf, 0x65, 0x34, 0x52, 0x4d, 0x8a, 0xb8, 0x2f, 0xb0, 0xae, 0xa6, 0x97, 0x25, 0x88, 0xab, 0x0f, 0x6c, 0xea, 0x20, 0x1a, 0x49, 0x97, 0x8e, 0xaf, 0x29, 0x56, 0x72, 0xea, 0x09, 0x44, 0x3d, 0x02, 0x94, 0x6e, 0x9f, 0x7b, 0x8b, 0x9f, 0x05, 0x9d, 0x6a, 0x77, 0x61, 0x24, 0x49, 0xbd, 0x29, 0x39, 0x00, 0xf6, 0xa2, 0xa1, 0x8e, 0x37, 0x5e, 0x35, 0xbc, 0x37, 0x03, 0x92, 0xfd, 0xa8, 0x4f, 0x11, 0x99, 0xc8, 0x59, 0xfa, 0x0a, 0x33, 0x1a, 0xf4, 0xa6, 0xfb, 0x2b, 0xc0, 0x7f, 0xfa, 0xd0, 0x27, 0x88, 0x67, 0x36, 0x31, 0xf9, 0xa8, 0xf9, 0x98, 0xf4, 0x67, 0xe9, 0x7c, 0x68, 0xe8, 0x0e, 0x58, 0x36, 0x9a, 0xea, 0x35, 0x92, 0xec, 0xfd, 0x1e, 0xac, 0x61, 0x8f, 0xd3, 0x90, 0xe7, 0xa9, 0xc2, 0x4b, 0x65, 0x65, 0x32, 0x50, 0x93, 0x67, 0xc2, 0x1a, 0x0e, 0xac, 0x12, 0x12, 0xac, 0x83, 0xc0, 0xb2, 0x0c, 0xd8, 0x96, 0xeb, 0x72, 0xb8, 0x01, 0xc4, 0xd2, 0x12, 0xc5, 0x45, 0x2b, 0xbb, 0xf0, 0x93, 0x17, 0xb5, 0x0c, 0x5c, 0x9f, 0xb1, 0x99, 0x75, 0x53, 0xd2, 0xbb, 0xc2, 0x9b, 0xb4, 0x2f, 0x57, 0x48, 0xad, 0x83, 0xdc, 0x6e, 0x53, 0x87, 0x36, 0x76, 0x3e, 0xff, 0x64, 0x6f, 0x0f, 0x9a, 0xa6, 0xa5, 0xb0, 0x28, 0xe5, 0x75, 0xde, 0x07, 0x4f, 0x5f, 0xe5, 0xde, 0x42, 0x5d, 0xab, 0x8e, 0x6b, 0x73, 0xf0, 0x66, 0x2f, 0x88, 0xd4, 0x97, 0x49, 0x74, 0x9a, 0xe7, 0xb5, 0x5a, 0xab, 0xa9, 0xcd, 0x38, 0xde, 0xec, 0xb3, 0xbc, 0xf6, 0xf3, 0xee, 0x5a, 0x6d, 0xe5, 0x58, 0x9b, 0x70, 0xc6, 0x37, 0xb8, 0x2a, 0xa6, 0xaa, 0x67, 0x45, 0x18, 0x47, 0xf5, 0xae, 0xe6, 0x02, 0x95, 0x99, 0x03, 0x50, 0xf8, 0xc6, 0xc1, 0x8d, 0x1d, 0x02, 0x44, 0x9b, 0x6b, 0xf0, 0x37, 0xcd, 0xfd, 0x09, 0xbd, 0x03, 0x3d, 0xe2, 0xab, 0x16, 0xb4, 0xad, 0xf4, 0x76, 0x20, 0x03, 0x65, 0x11, 0xc7, 0xe1, 0x92, 0x77, 0x0c, 0xf0, 0x10, 0x3c, 0x40, 0x09, 0xe4, 0x9e, 0xba, 0xf8, 0x3c, 0x68, 0x2a, 0x80, 0x5d, 0x17, 0x2a, 0xa0, 0xdd, 0x3a, 0x16, 0x15, 0x12, 0x1f, 0x1e, 0x20, 0xca, 0xab, 0x99, 0x89, 0x3c, 0x8a, 0x9c, 0xe4, 0x3f, 0x89, 0xcc, 0x13, 0xba, 0x3f, 0x70, 0x0c, 0x5c, 0xf3, 0xcb, 0xdd, 0x8d, 0xba, 0xa8, 0xed, 0xa4, 0xe0, 0x36, 0x84, 0x5a, 0x89, 0x16, 0x8d, 0x7e, 0x98, 0xb3, 0x9b, 0xeb, 0xd0, 0xd2, 0x2b, 0xb8, 0x39, 0x6a, 0x29, 0xae, 0xc6, 0xb5, 0xb5, 0xff, 0x34, 0x87, 0x26, 0x34, 0x35, 0xdf, 0x4f, 0x68, 0xce, 0xbb, 0x02, 0xb4, 0xfe, 0x31, 0xd3, 0xea, 0xa0, 0xbc, 0x1e, 0x86, 0x92, 0xd4, 0x4c, 0xe1, 0x17, 0xc1, 0x51, 0xa8, 0x7a, 0xb0, 0x79, 0x8d, 0xf5, 0x07, 0x65, 0x3c, 0xd0, 0xf6, 0x50, 0x91, 0xcd, 0x4e, 0x98, 0x08, 0xc4, 0x97, 0x79, 0x75, 0x8b, 0x5d, 0x1b, 0xf5, 0x18, 0xca, 0xcf, 0x24, 0xea, 0x7a, 0x95, 0x90, 0xa5, 0x8a, 0xe3, 0x6e, 0xfc, 0xf2, 0xa1, 0x8c, 0xd3, 0x15, 0x78, 0x87, 0xa5, 0x97, 0x4c, 0x3e, 0x24, 0x6f, 0x07, 0x86, 0x20, 0x3d, 0x99, 0x20, 0xaa, 0xdd, 0x3d, 0xe8, 0x79, 0x3c, 0xfd, 0x4e, 0x8d, 0x6a, 0x78, 0x0a, 0x11, 0xf1, 0xe3, 0x0c, 0x86, 0x66, 0x4e, 0xb2, 0x1e, 0x3d, 0x28, 0x3e, 0x66, 0xe1, 0x06, 0x87, 0x28, 0x05, 0xa0, 0xef, 0x90, 0x34, 0x1c, 0x94, 0x8d, 0xb0, 0x90, 0xcb, 0x7a, 0x79, 0xc2, 0xca, 0xfe, 0xac, 0x32, 0xa4, 0x31, 0x0e, 0x5a, 0x7b, 0x00, 0xe9, 0x34, 0xf0, 0xd2, 0x17, 0xfd, 0xdf, 0x6c, 0x5c, 0x39, 0x4a, 0x11, 0xf9, 0xf7, 0x92, 0xee, 0x7d, 0x56, 0xed, 0xb6, 0xdf, 0x48, 0x14, 0x8a, 0xca, 0x96, 0x3c, 0x1b, 0x38, 0x24, 0x48, 0x12, 0x42, 0x77, 0x3d, 0xb0, 0x36, 0x74, 0xf6, 0xb1, 0xeb, 0x6a, 0x19, 0x77, 0x51, 0x53, 0x49, 0x64, 0x4c, 0x57, 0x9d, 0x88, 0xc3, 0x92, 0x51, 0x7c, 0xf4, 0x17, 0xbc, 0x8d, 0x0a, 0x35, 0x82, 0x1d, 0xf1, 0xf9, 0x0b, 0x47, 0x69, 0xf3, 0x34, 0xc2, 0x59, 0x3d, 0x44, 0x08, 0x66, 0xba, 0x21, 0xb7, 0xc5, 0x9c, 0xc4, 0x37, 0x4d, 0x29, 0xea, 0x9d, 0xd1, 0xbe, 0x0c, 0xcf, 0xac, 0x14, 0x92, 0xe9, 0x9d, 0xc2, 0x44, 0xe0, 0xd6, 0x03, 0x01, 0x66, 0x4f, 0xba, 0xb3, 0x0d, 0x60, 0xb3, 0x82, 0xae, 0x8f, 0x2c, 0x48, 0x0c, 0xa7, 0x94, 0x45, 0xb5, 0x0a, 0x92, 0x15, 0x29, 0x47, 0x49, 0xde, 0x3e, 0xef, 0xdb, 0xce, 0xc3, 0xa5, 0x2b, 0xc5, 0x64, 0x75, 0xe8, 0x4e, 0xcd, 0x67, 0xc7, 0xd4, 0x13, 0x53, 0x0f, 0x13, 0x4f, 0xf6, 0x5b, 0xcc, 0x8c, 0x46, 0x9b, 0xbd, 0xe3, 0x03, 0x5d, 0xd0, 0xe4, 0x8f, 0x4b, 0x93, 0x38, 0xff, 0xf4, 0xe8, 0x85, 0x72, 0xcf, 0xfe, 0x92, 0xa1, 0x7c, 0x7f, 0xac, 0xb8, 0x4e, 0x0b, 0x48, 0x65, 0x07, 0xe6, 0xe9, 0x2e, 0xe2, 0xed, 0x44, 0x07, 0xd7, 0xcf, 0xa2, 0x24, 0x1a, 0x79, 0x87, 0x0c, 0xe5, 0xd2, 0x91, 0xef, 0x77, 0xa9, 0xa2, 0x39, 0x5d, 0xeb, 0x42, 0x67, 0xf0, 0x1a, 0x3e, 0x19, 0x1f, 0xfa, 0x95, 0x69, 0x6e, 0x8e, 0x95, 0x7c, 0x3f, 0x42, 0x42, 0x56, 0x50, 0x6a, 0xf7, 0xf3, 0x86, 0xeb, 0x50, 0x93, 0xe9, 0x38, 0x46, 0x55, 0xef, 0x81, 0x9c, 0x07, 0xfd, 0x27, 0x7b, 0x3d, 0x2b, 0x72, 0x59, 0xa0, 0x48, 0x86, 0x1f, 0x89, 0x1e, 0x93, 0x8a, 0xcf, 0xf6, 0x4d, 0xd1, 0xdd, 0x5f, 0x9c, 0x89, 0x07, 0x2c, 0x94, 0xc6, 0x1e, 0xbc, 0xa7, 0x84, 0x41, 0x7e, 0x19, 0x45, 0xf7, 0xb3, 0xb5, 0xfb, 0x7b, 0x76, 0xbf, 0x27, 0x57, 0xfa, 0x29, 0x43, 0x34, 0x14, 0x09, 0x5e, 0xf1, 0xf9, 0x4b, 0x06, 0xf2, 0x48, 0xa3, 0x6a, 0xbb, 0x4b, 0xc6, 0xc0, 0xbd, 0x7a, 0xda, 0xe5, 0x6f, 0x40, 0x2b, 0x43, 0xa1, 0x02, 0x1f, 0xf8, 0x0e, 0x5e, 0x6c, 0x35, 0x30, 0xb0, 0x88, 0xe3, 0x58, 0xdb, 0x62, 0x8d, 0xfd, 0x46, 0x4f, 0x7a, 0x54, 0x24, 0x47, 0x19, 0x22, 0xf9, 0x51, 0xa3, 0xcf, 0x59, 0x3c, 0xfb, 0xbb, 0xf3, 0x90, 0xd9, 0xd5, 0xcf, 0xc4, 0x27, 0x69, 0xd4, 0xb1, 0xab, 0x39, 0x8d, 0x47, 0xe7, 0xd0, 0x2d, 0x7f, 0x3d, 0x13, 0xd0, 0x90, 0x57, 0x19, 0x03, 0x66, 0xc6, 0x3c, 0x87, 0x50, 0xe9, 0x70, 0x52, 0xf9, 0x11, 0xd4, 0xd7, 0x99, 0xe2, 0x87, 0x87, 0x6c, 0xfd, 0xbd, 0x98, 0x64, 0xdc, 0x12, 0x05, 0x1b, 0xfc, 0x1e, 0xd6, 0x0b, 0x42, 0x49, 0xa1, 0x01, 0x98, 0xe0, 0x51, 0xcf, 0xd7, 0x69, 0x26, 0x41, 0xe9, 0x34, 0xfd, 0x53, 0x2f, 0x33, 0xd2, 0xa1, 0x20, 0x0b, 0x83, 0x1f, 0x33, 0x6b, 0xd6, 0x0a, 0xff, 0x9d, 0xbe, 0x1f, 0xa1, 0x5b, 0xda, 0x0a, 0x5f, 0xe3, 0x3f, 0x21, 0x8b, 0x4e, 0x77, 0x52, 0xa9, 0x1d, 0xc9, 0x5a, 0xd4, 0x15, 0xbb, 0x38, 0x5d, 0x4d, 0xd6, 0xe2, 0xb6, 0x85, 0xa9, 0x36, 0x8e, 0xb9, 0x11, 0x33, 0x3e, 0xf6, 0xb7, 0x69, 0x64, 0x6d, 0xd9, 0xae, 0xcd, 0xc6, 0x4e, 0x13, 0x99, 0xb6, 0xc4, 0x17, 0x99, 0xd4, 0x4d, 0x1a, 0xfc, 0xa8, 0x1a, 0x14, 0x2b, 0x05, 0x85, 0x86, 0xf1, 0x99, 0x55, 0xb1, 0xdf, 0xc3, 0x3e, 0x07, 0xef, 0xa4, 0xa8, 0xdf, 0x67, 0x79, 0xb2, 0x6c, 0x00, 0x28, 0x75, 0xf0, 0x48, 0x18, 0x8d, 0x2d, 0x45, 0x46, 0xd6, 0x1c, 0x5b, 0x96, 0x73, 0xe2, 0x6f, 0x67, 0x15, 0x00, 0x4d, 0x69, 0x79, 0xca, 0x47, 0xb3, 0x33, 0x1a, 0x1f, 0x10, 0xab, 0x45, 0x28, 0x9a, 0x65, 0x4e, 0xa7, 0x8b, 0x85, 0x5a, 0x7f, 0x4f, 0x92, 0x64, 0x0e, 0xde, 0x7a, 0x32, 0x52, 0x48, 0xd6, 0x88, 0x50, 0x91, 0x70, 0x9b, 0xb6, 0xc0, 0x02, 0xc8, 0xbf, 0x33, 0x41, 0x86, 0x57, 0x35, 0x1a, 0x9a, 0x80, 0xd3, 0x3c, 0x8a, 0xf4, 0xeb, 0xd6, 0x53, 0x0b, 0x85, 0xa2, 0x5e, 0xe0, 0x66, 0x22, 0xb1, 0xaf, 0xe3, 0x2a, 0x63, 0x82, 0xf4, 0x9e, 0x52, 0x0d, 0x89, 0x7d, 0x18, 0xd6, 0x21, 0x1e, 0x3a, 0x99, 0x98, 0xba, 0xa3, 0xea, 0x40, 0x2b, 0x51, 0x1c, 0x34, 0xf3, 0x4f, 0x62, 0xe9, 0x80, 0xe3, 0x34, 0x06, 0xaf, 0x08, 0xf4, 0x76, 0x8e, 0x1e, 0xd2, 0xbb, 0x66, 0xe1, 0xed, 0x85, 0xf9, 0x98, 0xba, 0x83, 0x08, 0x8e, 0xaa, 0x79, 0x18, 0xc6, 0x07, 0x93, 0x76, 0xeb, 0x1f, 0xf9, 0x79, 0x86, 0xa5, 0xa3, 0x07, 0x74, 0x54, 0x6f, 0x5a, 0x96, 0xd5, 0x70, 0x04, 0xca, 0xe3, 0x89, 0x31, 0x1a, 0xad, 0x3b, 0x2d, 0x34, 0x7c, 0xbc, 0x26, 0x1a, 0x95, 0x49, 0x32, 0x1b, 0x61, 0xbc, 0x94, 0x02, 0xcb, 0x61, 0x3b, 0x8d, 0xea, 0x06, 0x8b, 0x21, 0xe0, 0x51, 0x60, 0xbb, 0x02, 0x57, 0x50, 0x2a, 0x39, 0x69, 0x31, 0x7c, 0xa7, 0x31, 0xdb, 0xb6, 0x8e, 0xff, 0x2f, 0xc8, 0x6e, 0x5d, 0x59, 0xbf, 0x6e, 0xe9, 0x51, 0x3d, 0xfd, 0x64, 0xa8, 0x26, 0xb9, 0x06, 0x81, 0x9d, 0x90, 0x14, 0xde, 0x2f, 0x25, 0xb5, 0x1d, 0x4d, 0x75, 0x02, 0xc2, 0x00, 0xba, 0x5c, 0x76, 0xd8, 0x90, 0x02, 0x50, 0x26, 0x56, 0xe2, 0x54, 0x6a, 0xd7, 0xb0, 0x39, 0x0f, 0x29, 0x36, 0x70, 0x56, 0xd6, 0xeb, 0x61, 0x91, 0x3a, 0xc6, 0xf8, 0x91, 0x2c, 0x54, 0x60, 0x61, 0xe1, 0x09, 0x0e, 0x35, 0x0c, 0xd4, 0x02, 0x9d, 0x4a, 0xf5, 0x49, 0xfe, 0xbe, 0x13, 0xc7, 0x43, 0xf8, 0x89, 0x33, 0xd0, 0x1c, 0x02, 0x63, 0xb7, 0x40, 0x45, 0xca, 0x2f, 0x15, 0x52, 0x3f, 0x42, 0xca, 0xad, 0xff, 0xc5, 0x2d, 0xfa, 0xf6, 0x8d, 0x14, 0xca, 0x3a, 0xe0, 0xfb, 0xb5, 0xd9, 0x2a, 0xee, 0xa9, 0xd4, 0xf1, 0xaa, 0x81, 0x6b, 0x0b, 0xff, 0xd9, 0x9b, 0x0f, 0x78, 0x21, 0xe6, 0x09, 0x3e, 0xf1, 0x52, 0x72, 0x3a, 0x9c, 0xb4, 0x5f, 0x7a, 0x08, 0x2e, 0xf8, 0xd6, 0xbd, 0xf7, 0x2c, 0xd3, 0x3b, 0x5a, 0xa3, 0xc7, 0x91, 0x02, 0xf4, 0x3e, 0x2b, 0x74, 0x19, 0x9d, 0xec, 0xdd, 0x20, 0x05, 0x7d, 0x0e, 0x22, 0x7a, 0xe4, 0xc5, 0x79, 0x45, 0x58, 0x2e, 0x2e, 0x96, 0x53, 0xa9, 0xb1, 0x6e, 0xea, 0xce, 0xcd, 0xbc, 0x5a, 0xae, 0xda, 0xc7, 0xe3, 0x5c, 0x35, 0xcb, 0xd9, 0xad, 0xed, 0xe7, 0xf8, 0x3b, 0xbf, 0x36, 0xf8, 0xb0, 0x45, 0x3d, 0x61, 0x41, 0x6a, 0x85, 0xa1, 0x78, 0x21, 0x88, 0x5b, 0x37, 0x57, 0xd2, 0x03, 0xfa, 0x25, 0x60, 0xa8, 0x5c, 0x4b, 0x4c, 0x10 ],
- const [ 0x6d, 0x72, 0x62, 0x47, 0x6d, 0xa9, 0x5d, 0xb6, 0x3b, 0x32, 0x2c, 0x51, 0x93, 0xea, 0x05, 0x03, 0x09, 0x23, 0xc3, 0xcb, 0xf0, 0xf8, 0xe8, 0xb1, 0x7b, 0xde, 0xe2, 0xfe, 0x22, 0x7c, 0x8d, 0xac, 0x47, 0xbd, 0xfa, 0x1c, 0x1a, 0x23, 0x6f, 0x07, 0xba, 0x5e, 0xae, 0xb7, 0x9d, 0x1d, 0x7a, 0x77, 0x31, 0x24, 0x58, 0x48, 0xc3, 0x9e, 0x93, 0xd5, 0xa1, 0xb5, 0x82, 0xa9, 0x7b, 0x61, 0x0d, 0xa0, 0x0f, 0x7d, 0x6e, 0x9b, 0x06, 0x20, 0x35, 0x78, 0x18, 0x2a, 0x8f, 0x42, 0x77, 0x1d, 0xc7, 0xa4, 0x6b, 0x2f, 0x0d, 0xa4, 0x39, 0x9d, 0x77, 0x8e, 0x4a, 0x41, 0x45, 0x2d, 0x89, 0x67, 0x69, 0x41, 0x0d, 0xdd, 0x47, 0x2e, 0xf8, 0x49, 0xb9, 0xf2, 0x9f, 0xbf, 0x56, 0x59, 0xeb, 0x93, 0xf4, 0x74, 0xff, 0x6c, 0x6b, 0x47, 0x1a, 0x9a, 0x9c, 0xc2, 0xbf, 0xaa, 0xb2, 0xf3, 0x14, 0x37, 0xa8, 0x79, 0x89, 0x03, 0x0c, 0x3c, 0xb9, 0x46, 0x02, 0x5b, 0x95, 0x45, 0x8b, 0x66, 0xbf, 0x27, 0x07, 0xce, 0x34, 0x04, 0xf9, 0x99, 0x2e, 0x40, 0x0b, 0x5a, 0x49, 0x17, 0x52, 0x61, 0xe4, 0x78, 0xd2, 0x2f, 0xca, 0x17, 0x45, 0x2d, 0x12, 0xbe, 0x18, 0x9d, 0x43, 0xe3, 0xb7, 0xd0, 0xbc, 0x80, 0x0a, 0x99, 0x53, 0x1f, 0x3f, 0x03, 0x3d, 0x34, 0xcb, 0x3f, 0x2e, 0xb0, 0xab, 0xe0, 0xc0, 0xd3, 0xf0, 0x4b, 0x19, 0x42, 0x7a, 0x68, 0xc8, 0x59, 0x04, 0x9e, 0xf1, 0xc2, 0x61, 0xff, 0xaa, 0x47, 0x04, 0xbf, 0xa4, 0xe4, 0xc6, 0xeb, 0x0e, 0x21, 0xe4, 0x57, 0xb6, 0x9f, 0x47, 0xd9, 0x72, 0xf0, 0x09, 0xb4, 0xbe, 0xab, 0x34, 0x57, 0xa6, 0xc0, 0xcd, 0x48, 0xe7, 0x0a, 0x11, 0x5b, 0x51, 0x23, 0xfe, 0x27, 0x6f, 0x7c, 0x15, 0xba, 0x6a, 0xad, 0x5f, 0x8c, 0x2b, 0x09, 0xae, 0xb2, 0xc0, 0x76, 0x25, 0x54, 0x01, 0x7c, 0xfa, 0x61, 0x73, 0x9b, 0x7b, 0x81, 0x6c, 0xe2, 0x4f, 0x4c, 0x78, 0xbd, 0xff, 0xb9, 0xfc, 0x0f, 0xb5, 0xd9, 0x19, 0x80, 0x43, 0xc5, 0xd3, 0x19, 0x66, 0xd5, 0x73, 0x0e, 0x4c, 0x12, 0x29, 0xda, 0x55, 0xee, 0xf6, 0x91, 0x17, 0x33, 0xc9, 0x72, 0xa4, 0x3a, 0xe9, 0xbc, 0x0f, 0x5d, 0x92, 0xc4, 0x2c, 0xae, 0xe3, 0x43, 0x98, 0xea, 0xf8, 0xf4, 0xf9, 0xa8, 0x53, 0x5f, 0x87, 0xd6, 0x80, 0xef, 0xcc, 0x66, 0xf8, 0x4b, 0xa7, 0x45, 0x47, 0xe3, 0x97, 0x8d, 0x6a, 0xc9, 0x36, 0xfb, 0x7b, 0xc3, 0x04, 0xa3, 0x90, 0x9e, 0x66, 0xe2, 0xe0, 0xc5, 0xef, 0x95, 0x27, 0x12, 0xdd, 0x88, 0x4c, 0xe3, 0xe7, 0x32, 0x41, 0x71, 0x36, 0x9f, 0x2c, 0x5d, 0xb1, 0xad, 0xc4, 0x8c, 0x7d, 0x7b, 0xfd, 0x35, 0xc4, 0x1f, 0xe7, 0x38, 0xb6, 0x97, 0xd3, 0xb2, 0xce, 0x02, 0xb9, 0xce, 0x57, 0x11, 0xd6, 0xde, 0x2e, 0xb8, 0x99, 0xaa, 0xc9, 0x29, 0xc0, 0x07, 0x78, 0x02, 0xbf, 0xac, 0xeb, 0xc5, 0x61, 0x42, 0xf5, 0x8a, 0xb1, 0xba, 0x8f, 0xf0, 0x1b, 0xe3, 0x20, 0x59, 0xcf, 0x3c, 0xfc, 0x57, 0x66, 0x07, 0x2a, 0x61, 0xc8, 0x9e, 0x6a, 0xcb, 0x4d, 0x0a, 0x76, 0xf5, 0x22, 0xd2, 0x89, 0xc2, 0xef, 0x11, 0x1e, 0x4b, 0xb6, 0xcb, 0xfa, 0xd5, 0xff, 0x81, 0x6c, 0x01, 0x32, 0x03, 0xd4, 0x43, 0x44, 0x86, 0x62, 0x95, 0x95, 0xf6, 0x20, 0x6d, 0x19, 0x8e, 0x33, 0xec, 0xb7, 0xa5, 0x5e, 0x58, 0xee, 0xcb, 0xc7, 0xcc, 0xbe, 0x14, 0xfe, 0x2e, 0xc6, 0xb4, 0x3b, 0x62, 0xaa, 0xcc, 0xe7, 0xbd, 0xb7, 0x84, 0x5e, 0xbd, 0xca, 0x5a, 0xf4, 0xf7, 0x6d, 0xba, 0x36, 0x50, 0x44, 0xce, 0x72, 0x70, 0xa8, 0x97, 0x79, 0x74, 0x91, 0x3d, 0xa3, 0xe3, 0xb9, 0xa3, 0x14, 0xe4, 0xfe, 0x3f, 0x3e, 0xae, 0x08, 0x29, 0xa7, 0x3f, 0x2d, 0x71, 0xec, 0x51, 0x91, 0xb6, 0x07, 0x8a, 0x92, 0xf4, 0xcd, 0xf3, 0x63, 0x9e, 0xba, 0xab, 0xf6, 0xed, 0xf1, 0xdd, 0x20, 0x77, 0x7f, 0xef, 0xf8, 0x03, 0xe0, 0xfc, 0x80, 0x9c, 0xc4, 0x85, 0x87, 0xe4, 0x13, 0x63, 0xcd, 0xab, 0x2e, 0x00, 0x69, 0xc0, 0x78, 0xc7, 0x68, 0x07, 0x15, 0xd9, 0xb7, 0xcc, 0xf1, 0x02, 0x43, 0x57, 0x04, 0xeb, 0x5e, 0xc1, 0xd5, 0x91, 0x65, 0x06, 0x3d, 0xf5, 0x9f, 0x5a, 0x6e, 0x16, 0x69, 0xc1, 0x33, 0x1c, 0x90, 0xda, 0x7a, 0xd6, 0xff, 0xfb, 0x0f, 0x66, 0x9a, 0x83, 0xaa, 0x3b, 0x69, 0x6c, 0x2c, 0x40, 0xf9, 0x20, 0x26, 0x53, 0xff, 0x8e, 0x9b, 0xf9, 0x3f, 0x7c, 0x07, 0x50, 0xac, 0x1f, 0x9f, 0x45, 0xd1, 0xe9, 0xdb, 0x06, 0x6f, 0xa2, 0x32, 0xbb, 0x68, 0xba, 0x24, 0x71, 0xdb, 0xde, 0x7e, 0x56, 0x91, 0xc9, 0xda, 0x2c, 0x98, 0x5d, 0x65, 0xf8, 0x2d, 0xf2, 0xe5, 0xfa, 0xe0, 0xee, 0xfa, 0xe2, 0xf2, 0x95, 0xa3, 0x41, 0x02, 0x23, 0x05, 0x3e, 0xe8, 0x18, 0x68, 0x8a, 0xe2, 0xd4, 0x83, 0x96, 0xee, 0x63, 0xf9, 0x03, 0x76, 0x9a, 0x23, 0x5a, 0x32, 0x63, 0x10, 0xfd, 0x4b, 0x55, 0xca, 0x5d, 0xbc, 0x88, 0xdb, 0x6e, 0xfe, 0xa7, 0x10, 0x58, 0xe4, 0x46, 0x7d, 0x70, 0xc4, 0x76, 0xc1, 0x66, 0xd7, 0x97, 0x8c, 0xbf, 0xe2, 0x6e, 0x5e, 0x86, 0x16, 0x78, 0x91, 0x3f, 0x35, 0x7d, 0x99, 0x1d, 0xf7, 0x67, 0x8b, 0x75, 0xac, 0x55, 0xdc, 0x71, 0x22, 0xec, 0x6b, 0x09, 0xc9, 0xed, 0xc2, 0x2f, 0x15, 0x0d, 0x99, 0x4a, 0x24, 0x01, 0x9c, 0xe6, 0xa1, 0xd8, 0x6f, 0xaa, 0xe8, 0x8d, 0xee, 0x8a, 0x6b, 0xdd, 0xb9, 0x3e, 0x54, 0x56, 0xf0, 0xf2, 0x6c, 0xb1, 0x3b, 0x3f, 0x3b, 0x61, 0x0e, 0x5a, 0x71, 0x6c, 0x2b, 0x8b, 0x84, 0x7a, 0x68, 0xe1, 0x9b, 0x2b, 0xb2, 0x25, 0xab, 0xae, 0x52, 0x0c, 0xdf, 0x90, 0x6f, 0xb0, 0x3e, 0xd1, 0xd4, 0x41, 0x88, 0x3d, 0xf4, 0xf8, 0x60, 0xf9, 0x2b, 0x4d, 0xb0, 0x5d, 0x47, 0x6a, 0x4a, 0x01, 0x47, 0xdf, 0xcb, 0x1b, 0x63, 0x97, 0xc5, 0x08, 0x4c, 0x0b, 0x1d, 0x28, 0xb4, 0xb5, 0xb1, 0xef, 0x11, 0xc8, 0x3e, 0x39, 0x9e, 0x1e, 0x82, 0xde, 0xa3, 0x72, 0x9d, 0x87, 0xf7, 0xcf, 0xbd, 0xc0, 0xc3, 0x48, 0xfa, 0x4e, 0x88, 0xea, 0x7f, 0xc2, 0x64, 0xef, 0xeb, 0x4e, 0x91, 0x34, 0xf7, 0xd8, 0x2e, 0xee, 0x58, 0x4d, 0x42, 0x98, 0xe7, 0x38, 0xfe, 0x30, 0xff, 0x93, 0x42, 0xa2, 0x26, 0xdc, 0x63, 0x85, 0xf0, 0x6c, 0x2c, 0x05, 0x21, 0x05, 0x22, 0x20, 0x12, 0xaa, 0x0c, 0x16, 0x56, 0xb3, 0xb3, 0x1a, 0x9c, 0x20, 0xe7, 0x4e, 0xd7, 0x2e, 0xc2, 0xee, 0x9d, 0x28, 0x31, 0xcb, 0xcd, 0x80, 0xaf, 0xfc, 0x75, 0x1e, 0x54, 0xd0, 0xf3, 0xf8, 0x0f, 0x07, 0x5a, 0xe3, 0x30, 0x41, 0x17, 0xa8, 0x29, 0xb6, 0xd4, 0x5b, 0x95, 0x28, 0x9c, 0xe8, 0x79, 0x16, 0x40, 0xef, 0xca, 0x33, 0xfa, 0xd2, 0x30, 0x16, 0x51, 0x0c, 0x0a, 0x33, 0x3c, 0xc4, 0xb2, 0x0a, 0x8a, 0xa1, 0x02, 0x9e, 0x81, 0xe1, 0x17, 0x29, 0xc6, 0xa5, 0x54, 0x0e, 0x7d, 0x8f, 0xaa, 0x0f, 0xb0, 0x8f, 0x17, 0xc0, 0xf5, 0xfa, 0x6d, 0x3b, 0x4b, 0xdd, 0x55, 0x16, 0x46, 0x90, 0x93, 0x92, 0x6c, 0x8e, 0x8c, 0x15, 0xde, 0x83, 0x05, 0xdb, 0x3b, 0xa7, 0x2d, 0xe8, 0xc1, 0x4b, 0xde, 0x41, 0xb5, 0xb1, 0x20, 0x5b, 0x05, 0x21, 0xef, 0xd4, 0x2d, 0x39, 0x3e, 0x61, 0x57, 0x85, 0x3b, 0x08, 0xc6, 0x50, 0xd5, 0x8f, 0x74, 0xb9, 0x7b, 0x34, 0xfa, 0x09, 0x27, 0x9e, 0xb1, 0x43, 0x9c, 0x14, 0x17, 0xfd, 0xec, 0xed, 0x74, 0x6f, 0x3c, 0x47, 0xbd, 0xca, 0xcb, 0xfc, 0xb8, 0xcb, 0x31, 0xd2, 0x61, 0x8f, 0xe5, 0xf2, 0x8d, 0xa9, 0x02, 0x9c, 0xcd, 0x72, 0x4b, 0x18, 0x95, 0xa0, 0x6c, 0xf0, 0x9d, 0x1a, 0x83, 0x5c, 0x88, 0x0b, 0xde, 0xfe, 0xc4, 0x35, 0x06, 0xcf, 0xb1, 0x89, 0xfd, 0x5a, 0x05, 0xf4, 0xc5, 0x28, 0x6f, 0x7b, 0x21, 0x7b, 0x7a, 0x8a, 0xa0, 0x3f, 0xb5, 0x89, 0xd6, 0x3d, 0x11, 0xb1, 0xed, 0x92, 0x8a, 0x1e, 0x5d, 0x5f, 0x09, 0x25, 0xf7, 0xc3, 0x89, 0xe7, 0x28, 0x06, 0x79, 0x26, 0x7c, 0x17, 0x62, 0x58, 0x61, 0x39, 0xca, 0xfa, 0x2e, 0xf9, 0x58, 0x27, 0x63, 0x63, 0x39, 0x69, 0x32, 0x75, 0xc1, 0xcf, 0x3f, 0xd4, 0x56, 0x40, 0xa5, 0xbe, 0x8a, 0x0e, 0x39, 0x40, 0x87, 0xce, 0x12, 0xa9, 0xb0, 0x68, 0x49, 0x3e, 0x85, 0x6a, 0xfd, 0x2f, 0xc7, 0xa2, 0x9a, 0xca, 0xdd, 0xeb, 0x5b, 0xef, 0x77, 0x47, 0x0e, 0xc4, 0x71, 0x2e, 0x18, 0xa9, 0xfa, 0x26, 0xb8, 0x6f, 0xf5, 0x94, 0x90, 0xc4, 0x9f, 0xd2, 0x61, 0xf2, 0x73, 0x81, 0x16, 0xca, 0x4b, 0x21, 0x04, 0xda, 0xc7, 0xdf, 0x70, 0xe7, 0xf2, 0xad, 0x51, 0x97, 0x23, 0x98, 0x58, 0x6d, 0x22, 0x56, 0x2e, 0xfa, 0x8c, 0x1f, 0xfd, 0x52, 0x79, 0xbf, 0x31, 0xbe, 0x5b, 0xe8, 0x80, 0xb0, 0x2a, 0xcc, 0x27, 0xfc, 0xbe, 0xeb, 0x77, 0x44, 0x7c, 0x2a, 0x91, 0xb4, 0x34, 0x26, 0x6e, 0xf0, 0x4a, 0xc7, 0x22, 0x4b, 0x14, 0x18, 0x61, 0x3a, 0x84, 0x56, 0x42, 0x08, 0x07, 0x47, 0x43, 0xcb, 0xac, 0xcc, 0x8d, 0x96, 0x89, 0xba, 0x7a, 0xf0, 0x5b, 0xe6, 0x55, 0x85, 0x6c, 0x7f, 0x61, 0x1c, 0xba, 0xa1, 0x1c, 0xc9, 0x55, 0x26, 0xc4, 0x64, 0x09, 0xc0, 0x1b, 0x39, 0x3d, 0x45, 0x68, 0x01, 0x1b, 0x49, 0xbe, 0x12, 0xf1, 0xf2, 0x80, 0xd2, 0xd7, 0x08, 0x25, 0x71, 0x93, 0x4c, 0x39, 0xd8, 0xb9, 0x0b, 0xa4, 0xdc, 0x17, 0xf2, 0x2f, 0xb8, 0x4f, 0x24, 0x44, 0xba, 0xc6, 0x8a, 0xf5, 0x3c, 0xbd, 0x6a, 0x41, 0xd6, 0xbe, 0x3c, 0x92, 0xd2, 0x3a, 0xb9, 0x89, 0xe0, 0x70, 0x34, 0xfe, 0x0b, 0x90, 0x2d, 0x43, 0xec, 0x21, 0x24, 0xa9, 0x1e, 0xa0, 0xab, 0x46, 0xf2, 0x6a, 0xbf, 0xf5, 0x63, 0xdc, 0x58, 0x9d, 0x4c, 0xb8, 0x3f, 0xb7, 0xd8, 0xca, 0x20, 0x0a, 0x3a, 0xcc, 0xe0, 0xb9, 0x9f, 0x88, 0x30, 0x80, 0x61, 0x3c, 0x63, 0x3b, 0x7e, 0x42, 0x7c, 0xa8, 0x48, 0xf0, 0x8c, 0x6d, 0x5e, 0xbe, 0x3b, 0x5d, 0xda, 0xa6, 0xa4, 0xf7, 0xcc, 0xd1, 0x66, 0x2f, 0xe8, 0x6f, 0xf7, 0x72, 0x7b, 0xe7, 0x3c, 0xe4, 0xa4, 0x30, 0x57, 0xec, 0xc0, 0x7e, 0xc1, 0xf2, 0x26, 0x22, 0x98, 0x67, 0x15, 0xab, 0x3a, 0x06, 0xea, 0x52, 0x12, 0x5a, 0x96, 0x95, 0xb2, 0x81, 0x50, 0x21, 0x22, 0x2f, 0x87, 0xf5, 0x78, 0xf6, 0x1b, 0xc5, 0xa9, 0xc4, 0xcc, 0x9c, 0x9f, 0xad, 0xf3, 0xc6, 0x8c, 0xea, 0x70, 0xed, 0x7d, 0x22, 0xe3, 0x82, 0x32, 0xe9, 0x1f, 0x5f, 0x2d, 0x87, 0xdb, 0xaa, 0x09, 0xfa, 0xab, 0xfc, 0x0d, 0x3e, 0x2f, 0xc2, 0x01, 0xcb, 0x8a, 0xe4, 0x40, 0x60, 0x16, 0xa5, 0x0f, 0xff, 0x57, 0xcb, 0x2d, 0x38, 0x2d, 0xff, 0xac, 0xab, 0x4d, 0x76, 0xfe, 0xc9, 0xf1, 0xd1, 0x53, 0xda, 0xcf, 0x42, 0x23, 0x44, 0x48, 0xf1, 0x06, 0x0a, 0xe3, 0x9e, 0xcc, 0x93, 0xf9, 0x87, 0xca, 0xad, 0xb2, 0x8c, 0x72, 0xd1, 0x30, 0x91, 0x27, 0xa9, 0x09, 0x24, 0x4f, 0xcf, 0xfb, 0x5f, 0xa9, 0xd8, 0xdb, 0x10, 0xe0, 0x91, 0xcf, 0x18, 0x61, 0x88, 0xbd, 0x11, 0x6a, 0xce, 0x03, 0x34, 0x64, 0xfc, 0x69, 0x79, 0x73, 0x74, 0x53, 0xff, 0x4b, 0xe9, 0x3c, 0xaf, 0x45, 0x22, 0x5f, 0x1d, 0xb2, 0xfa, 0xb7, 0xae, 0x6f, 0xac, 0x2a, 0x00, 0xba, 0x4d, 0x02, 0x86, 0x43, 0x9a, 0x9c, 0x73, 0x86, 0xf4, 0x64, 0xda, 0x59, 0xa9, 0x01, 0x13, 0xc1, 0x75, 0xcc, 0x60, 0x0a, 0x49, 0x87, 0xd0, 0x17, 0x4a, 0x4c, 0x64, 0xf6, 0x1d, 0xc3, 0x71, 0xb7, 0x62, 0x98, 0x45, 0x7f, 0x7e, 0x2c, 0x0d, 0xd8, 0x9e, 0x8b, 0xf7, 0x4b, 0xf9, 0x9f, 0x93, 0x31, 0x55, 0xa3, 0x7f, 0xc6, 0xcc, 0xd9, 0x43, 0x7f, 0xd0, 0x80, 0x7a, 0x9e, 0x6d, 0x01, 0x33, 0x03, 0xce, 0x69, 0x96, 0x45, 0x03, 0x1b, 0xcb, 0x01, 0x01, 0xc7, 0x17, 0x72, 0xea, 0x96, 0x48, 0x42, 0x8f, 0xa7, 0x54, 0xa0, 0x34, 0xbf, 0x3d, 0x93, 0x93, 0x3c, 0x37, 0x8e, 0x23, 0x4b, 0x0d, 0x44, 0x99, 0x5b, 0xc1, 0xbd, 0xaf, 0xd2, 0x73, 0xaa, 0x25, 0xfe, 0x83, 0xf6, 0x06, 0x4e, 0xfa, 0x9d, 0x2d, 0xc2, 0x26, 0xc1, 0x07, 0xa0, 0x85, 0xfb, 0x9b, 0x69, 0xe5, 0xef, 0xc7, 0x0b, 0xc8, 0x23, 0xcc, 0x58, 0x0d, 0x11, 0x0d, 0xb7, 0xcd, 0x7a, 0x13, 0x19, 0x84, 0xfe, 0xd5, 0x2f, 0x71, 0xea, 0x36, 0xdb, 0x3f, 0x51, 0xd0, 0xe4, 0xe4, 0x5e, 0xf0, 0xed, 0xca, 0xe8, 0xe1, 0xa8, 0x2c, 0x47, 0x6e, 0x47, 0xc4, 0x66, 0xa2, 0x33, 0xa3, 0x1a, 0xd2, 0x01, 0x60, 0xb2, 0xde, 0xa2, 0x74, 0xd0, 0xb3, 0xd9, 0xe5, 0x77, 0x14, 0xf2, 0x22, 0x64, 0x9b, 0xb2, 0x2e, 0xa2, 0xfa, 0x8a, 0x01, 0x59, 0x87, 0x0f, 0x2c, 0xe7, 0xf8, 0xaf, 0xbb, 0x31, 0x6a, 0x9c, 0x5f, 0x3b, 0xa9, 0x0d, 0xcd, 0xf7, 0xab, 0xa6, 0x61, 0x5b, 0x5d, 0x34, 0x07, 0xb6, 0xa3, 0x9e, 0x5b, 0x44, 0x99, 0x19, 0x0f, 0x00, 0x20, 0x9a, 0x8d, 0xb9, 0x96, 0x91, 0xde, 0x68, 0xe4, 0xd4, 0xcb, 0xc1, 0xbe, 0xd9, 0x42, 0x08, 0x26, 0x29, 0xfb, 0x26, 0x32, 0x11, 0x5a, 0xfc, 0x10, 0x9b, 0x98, 0xf7, 0x47, 0xbd, 0x1e, 0xe5, 0x3f, 0xcf, 0x31, 0x07, 0x04, 0x42, 0xd4, 0x67, 0x47, 0x90, 0xea, 0x6b, 0xa6, 0x6f, 0x9c, 0xab, 0x2d, 0x4a, 0xfa, 0x00, 0x1c, 0xf1, 0xe5, 0xdd, 0xea, 0x90, 0x2c, 0xe3, 0x8b, 0xde, 0xf5, 0xaf, 0xef, 0x96, 0x5f, 0xf7, 0xcb, 0x2b, 0x65, 0xd5, 0x9b, 0xb8, 0x06, 0x62, 0xe8, 0x35, 0xa2, 0x87, 0xc6, 0xf1, 0xa8, 0x10, 0xa2, 0x3c, 0x6e, 0x02, 0x3a, 0x64, 0x60, 0x2f, 0xed, 0xe4, 0x5d, 0x07, 0x35, 0xd7, 0x5e, 0xb1, 0x72, 0xb3, 0x59, 0x5b, 0xe9, 0x33, 0x65, 0xce, 0x0c, 0x95, 0x1e, 0x45, 0xfc, 0x06, 0x4b, 0x7f, 0x4c, 0x5b, 0xbe, 0x13, 0x08, 0x01, 0x7c, 0x04, 0xf5, 0x37, 0x1e, 0x95, 0x1b, 0x7a, 0x77, 0x5e, 0x81, 0x41, 0x77, 0xa0, 0x38, 0xeb, 0x4f, 0xd6, 0x9a, 0xf6, 0xd6, 0x8c, 0xd4, 0x71, 0x2c, 0x74, 0xa2, 0xb4, 0x9d, 0xb7, 0x5a, 0x4e, 0xc8, 0x89, 0x2c, 0x3f, 0x00, 0x00, 0xa8, 0x68, 0xf2, 0x26, 0x80, 0x3f, 0x88, 0x4d, 0x90, 0xc7, 0x0e, 0xa2, 0x1b, 0xc0, 0x94, 0x05, 0x58, 0x1a, 0x93, 0x18, 0x2d, 0xb0, 0xd3, 0x96, 0x3a, 0x33, 0x8b, 0xe7, 0x19, 0x64, 0xcb, 0xf1, 0xe4, 0x87, 0x17, 0x30, 0xf8, 0x14, 0x54, 0x09, 0xf9, 0xaf, 0xe9, 0x5b, 0x17, 0x5a, 0x1e, 0x58, 0x8f, 0xea, 0xc7, 0x93, 0x74, 0xb7, 0x27, 0x59, 0xaf, 0x98, 0x0f, 0x45, 0x45, 0x0f, 0x46, 0x0f, 0xd8, 0xc0, 0x2d, 0xa5, 0x71, 0x28, 0xa3, 0x7d, 0x7c, 0x8b, 0x27, 0x29, 0x14, 0x2e, 0x3c, 0x2c, 0x81, 0xc7, 0x12, 0x0c, 0xff, 0x32, 0x62, 0xa8, 0xc1, 0x65, 0x9a, 0xcc, 0x36, 0xa6, 0x3a, 0x03, 0x8b, 0xfc, 0x7e, 0xac, 0x71, 0xe3, 0x3d, 0x50, 0x20, 0x43, 0x11, 0x33, 0x9c, 0xa3, 0xb8, 0x29, 0x37, 0x9a, 0xba, 0xab, 0x57, 0x87, 0x4c, 0x2a, 0x79, 0x82, 0x75, 0xa3, 0x76, 0x93, 0x6f, 0x74, 0x05, 0x21, 0x50, 0x6e, 0x82, 0xad, 0xea, 0x2b, 0xee, 0xc0, 0xef, 0xa2, 0x36, 0x21, 0x59, 0xf8, 0xb8, 0x4c, 0x08, 0x9a, 0x03, 0x20, 0xad, 0x88, 0xde, 0xd8, 0xe8, 0xf4, 0x8d, 0x3c, 0xad, 0x0b, 0x4f, 0x18, 0xec, 0x13, 0x2b, 0xee, 0x71, 0xb6, 0xec, 0xe8, 0x09, 0x9d, 0x6b, 0x10, 0xe6, 0x41, 0x0c, 0xc3, 0x44, 0xfe, 0x8b, 0x63, 0x4d, 0x6a, 0xf9, 0x4d, 0x3a, 0xe4, 0x01, 0x0b, 0xbc, 0x70, 0x70, 0xca, 0x9a, 0xc2, 0xf5, 0x0e, 0x9b, 0x98, 0x24, 0xa4, 0xa6, 0x4d, 0xc1, 0xd9, 0x28, 0xab, 0x3c, 0xe9, 0xb6, 0x02, 0x78, 0xba, 0xf4, 0x76, 0xd0, 0xca, 0xb5, 0x9d, 0x5c, 0x66, 0x63, 0x4a, 0x70, 0x1e, 0xa2, 0xa3, 0x66, 0x75, 0x30, 0x7a, 0x9e, 0xdd, 0x0f, 0xda, 0xc2, 0xe2, 0xe7, 0xdf, 0x4f, 0xa5, 0xa6, 0xcb, 0x51, 0x8c, 0x69, 0x57, 0x6e, 0x38, 0x9f, 0x47, 0x25, 0xb7, 0x6b, 0x41, 0x58, 0xfb, 0x4b, 0xdf, 0x08, 0x8b, 0xf8, 0x03, 0x61, 0x79, 0x8d, 0x6b, 0xf6, 0x94, 0xea, 0x85, 0x4d, 0xde, 0x5b, 0x84, 0x9e, 0x41, 0x75, 0xb3, 0xd8, 0x7d, 0x41, 0x09, 0xe5, 0x65, 0x9d, 0xfe, 0x2f, 0x4b, 0xde, 0x9e, 0x63, 0xb9, 0xba, 0xdc, 0x75, 0x62, 0x66, 0x28, 0xe4, 0x57, 0xfb, 0x44, 0x3f, 0x7e, 0x1e, 0x53, 0xe8, 0x41, 0xe0, 0x33, 0x18, 0x83, 0xe3, 0x0c, 0x23, 0xd8, 0xbf, 0x29, 0xfd, 0xf5, 0xa3, 0x07, 0xfd, 0x65, 0x40, 0xac, 0xe2, 0x7e, 0xe2, 0x3a, 0x14, 0x94, 0xe0, 0xc4, 0x2c, 0x6c, 0x37, 0x60, 0xb5, 0xf3, 0x72, 0x7e, 0x34, 0x30, 0xcd, 0x78, 0x67, 0x78, 0x99, 0x6a, 0xcb, 0xe1, 0xe2, 0x43, 0x60, 0xf9, 0x50, 0x1c, 0xb0, 0xb7, 0x4b, 0xc9, 0x0e, 0xb1, 0x62, 0xae, 0x1c, 0x90, 0xee, 0xd4, 0x90, 0xc1, 0xf2, 0x3d, 0x37, 0x6e, 0x46, 0x74, 0x3a, 0xad, 0xf5, 0x67, 0xa0, 0xf7, 0xe3, 0x79, 0x14, 0xdb, 0xb3, 0xd4, 0xe8, 0xf3, 0xe7, 0xfc, 0x5b, 0x18, 0x49, 0xaa, 0x17, 0xd2, 0x8a, 0xd7, 0xfe, 0x12, 0x2a, 0x17, 0x26, 0x24, 0x97, 0x28, 0x22, 0xdf, 0x99, 0xcb, 0x84, 0x1f, 0xed, 0xd2, 0x9f, 0x75, 0x31, 0x7b, 0x92, 0x1c, 0x00, 0xfc, 0x82, 0x2f, 0x5d, 0x5f, 0x26, 0x1a, 0x55, 0x90, 0x89, 0x4f, 0xe0, 0xb5, 0x0b, 0x3a, 0x09, 0xbd, 0xa9, 0x76, 0x4e, 0x3c, 0x7f, 0x41, 0x4a, 0x76, 0x8b, 0x2d, 0x91, 0xb9, 0xb4, 0x19, 0xdc, 0xf1, 0x0b, 0x60, 0x66, 0x76, 0x50, 0x50, 0x95, 0x28, 0xb8, 0xde, 0xdd, 0xbe, 0xed, 0x97, 0xe2, 0x5b, 0x57, 0xda, 0xdc, 0x62, 0x9a, 0x45, 0x40, 0x8c, 0x60, 0x6d, 0x9d, 0x38, 0x58, 0xd2, 0xc3, 0x02, 0x7f, 0x12, 0x2b, 0x96, 0x9e, 0x5c, 0x93, 0xc7, 0x13, 0x28, 0xe9, 0xdb, 0xd5, 0x25, 0x6a, 0x29, 0xb3, 0x73, 0x0b, 0xe7, 0xdc, 0x13, 0x18, 0x3d, 0xa4, 0x9c, 0x1b, 0x9d, 0x85, 0x2f, 0xff, 0x57, 0x64, 0xac, 0x75, 0x68, 0x16, 0x26, 0x97, 0x93, 0x23, 0x95, 0xcb, 0xb4, 0xca, 0xcb, 0xeb, 0x50, 0x45, 0xaa, 0xa3, 0x70, 0x4e, 0x93, 0x1a, 0xb0, 0xe1, 0x21, 0xd4, 0x93, 0x44, 0x18, 0xd7, 0x19, 0x45, 0x98, 0x0c, 0x94, 0xc3, 0x97, 0xe9, 0xb7, 0x6f, 0x8e, 0x4d, 0xf0, 0xd4, 0x71, 0xab, 0xf8, 0x95, 0xe5, 0x6b, 0xa8, 0xf6, 0xae, 0x8d, 0x0e, 0x9e, 0x66, 0x90, 0xc0, 0x9c, 0x75, 0x92, 0x70, 0xa7, 0x3d, 0xb8, 0xc1, 0xaa, 0x95, 0xd0, 0x59, 0x80, 0x79, 0x35, 0x37, 0xfb, 0xff, 0xf3, 0x47, 0x2c, 0x8d, 0x2c, 0x34, 0xde, 0x4a, 0xbb, 0x7e, 0x64, 0xd2, 0x16, 0xcc, 0x95, 0x2e, 0x79, 0x83, 0x14, 0x03, 0x41, 0x97, 0xd5, 0x09, 0x96, 0xa2, 0xdc, 0xbf, 0x4c, 0x33, 0x48, 0x5e, 0x0b, 0x68, 0x91, 0x0b, 0xae, 0xbf, 0x0e, 0x50, 0xea, 0x29, 0xba, 0xcd, 0x30, 0x60, 0x37, 0x2b, 0xd4, 0x7b, 0x13, 0x52, 0x6e, 0xc0, 0x4b, 0xdc, 0x81, 0xb9, 0x0d, 0xc9, 0x5a, 0x8a, 0xc2, 0x74, 0x3b, 0x81, 0x4c, 0xc5, 0xb9, 0xef, 0x8c, 0xa9, 0x63, 0x36, 0x28, 0xbf, 0xa4, 0x24, 0x8b, 0x55, 0xeb, 0x7f, 0x2d, 0x92, 0x08, 0xe1, 0x14, 0xf4, 0xda, 0xc6, 0x9b, 0xfe, 0x27, 0xe4, 0x72, 0x2a, 0xcb, 0xbb, 0xe6, 0x25, 0x15, 0x6c, 0x62, 0x3b, 0x6e, 0xce, 0x36, 0x10, 0x3b, 0xbf, 0x98, 0x92, 0x05, 0xb8, 0xe8, 0x2b, 0xd7, 0xa5, 0x39, 0x3b, 0xe8, 0xf3, 0x0c, 0xc5, 0x7a, 0xea, 0x5e, 0x69, 0x02, 0x3d, 0xe6, 0x92, 0x89, 0xdf, 0x98, 0xf0, 0x52, 0x19, 0x6d, 0x29, 0xbd, 0xda, 0x66, 0xcb, 0x6b, 0x4e, 0xcf, 0x86, 0xa3, 0xb1, 0xc1, 0x98, 0xf5, 0x66, 0xea, 0x88, 0x1d, 0x43, 0x90, 0x17, 0x2a, 0x30, 0xd4, 0x74, 0xdf, 0xf0, 0x34, 0xaf, 0x59, 0x3e, 0x54, 0x70, 0xf2, 0x1c, 0xfe, 0xe9, 0x66, 0x68, 0x67, 0x09, 0x34, 0xb0, 0xb4, 0xf2, 0x47, 0x47, 0xbc, 0xae, 0xd6, 0x98, 0x10, 0x1d, 0x89, 0xbb, 0x39, 0x32, 0xdd, 0x46, 0x40, 0x5f, 0xc9, 0x66, 0x74, 0x4e, 0xa2, 0x2e, 0x67, 0xd2, 0x3c, 0x2e, 0x3a, 0x1d, 0x52, 0x48, 0x1a, 0x33, 0x27, 0xbf, 0x0b, 0x9f, 0x6e, 0x91, 0xe4, 0x64, 0x67, 0x07, 0x9b, 0x36, 0x4c, 0x8a, 0xc3, 0xea, 0xeb, 0xb8, 0x53, 0x2c, 0x94, 0xb7, 0xa9, 0x70, 0x35, 0xc9, 0xcf, 0x2b, 0xc4, 0x21, 0xfc, 0x42, 0xdd, 0xf6, 0x5e, 0xc2, 0xad, 0xd5, 0x16, 0xd3, 0x0e, 0x3b, 0x85, 0xe7, 0xf3, 0x63, 0xc6, 0x37, 0x07, 0x5d, 0x7b, 0x70, 0x91, 0x60, 0xcd, 0xa9, 0x9b, 0x61, 0xae, 0x99, 0x53, 0xe4, 0x61, 0x07, 0xb1, 0x13, 0x3d, 0x81, 0x5a, 0x0d, 0xae, 0x51, 0xc5, 0x80, 0x7c, 0xad, 0x9c, 0x7a, 0x50, 0x2e, 0x65, 0x7c, 0x74, 0x84, 0x61, 0xd1, 0xda, 0x67, 0xb4, 0x1d, 0x60, 0xd0, 0xc7, 0x39, 0x52, 0x6a, 0xeb, 0x3e, 0x30, 0x43, 0x3f, 0xe0, 0xb2, 0xc8, 0xd3, 0xfe, 0x0a, 0xf0, 0x0d, 0x76, 0x69, 0xb7, 0x4c, 0x3e, 0xc4, 0xce, 0xcc, 0xb1, 0xd8, 0x91, 0xca, 0x26, 0x6c, 0x39, 0xe8, 0xc7, 0xd6, 0x53, 0xd2, 0xa1, 0xc0, 0x71, 0x22, 0xf7, 0x2c, 0x1f, 0x81, 0xdc, 0xb6, 0x18, 0x0f, 0x01, 0x19, 0xba, 0x06, 0xcb, 0xf5, 0xb8, 0x9a, 0xa8, 0xd0, 0x0f, 0x23, 0xa4, 0x5a, 0x3b, 0x7d, 0x37, 0xf5, 0xaa, 0xaf, 0x61, 0x74, 0x71, 0xcc, 0xf9, 0x23, 0x3e, 0x17, 0x43, 0x08, 0x8d, 0x6a, 0xc0, 0x69, 0x1f, 0xd9, 0x4a, 0x8f, 0xa8, 0x92, 0x60, 0xc9, 0xc9, 0x07, 0xbe, 0xb3, 0x3d, 0x50, 0x30, 0xb7, 0x57, 0xca, 0xa9, 0xd5, 0xac, 0x05, 0x8f, 0xa0, 0x0d, 0xdd, 0x5a, 0x89, 0xb8, 0xe6, 0x5d, 0x60, 0xce, 0x0e, 0xe3, 0x18, 0x08, 0x7d, 0x7e, 0xcb, 0xa6, 0xc0, 0x9c, 0xfd, 0xa9, 0x27, 0x5b, 0x25, 0x42, 0x6b, 0x9f, 0x6a, 0x8a, 0x94, 0x61, 0xaa, 0x73, 0x1a, 0x4a, 0xc0, 0xff, 0x4b, 0x80, 0x07, 0xb0, 0xec, 0xc0, 0x1a, 0x3f, 0x23, 0xad, 0xde, 0x91, 0x95, 0x67, 0xc3, 0xe6, 0xcb, 0x60, 0x46, 0x54, 0xda, 0x6b, 0xbb, 0x74, 0x43, 0x16, 0x49, 0x5b, 0x18, 0x3a, 0x36, 0xcb, 0x60, 0xd0, 0x64, 0xab, 0xbd, 0x06, 0x1c, 0xb5, 0x4c, 0x93, 0x0b, 0x6f, 0xcd, 0x47, 0x8a, 0x5c, 0x04, 0xe6, 0x23, 0x73, 0x5e, 0x36, 0x50, 0xd0, 0xd8, 0x57, 0x85, 0xaa, 0x1d, 0x53, 0x71, 0x85, 0xee, 0xf6, 0x82, 0xa8, 0xc7, 0xe0, 0xa7, 0xd2, 0xc0, 0xd8, 0x59, 0x29, 0xb1, 0x63, 0xdc, 0x73, 0x99, 0x95, 0xc2, 0x88, 0x41, 0x28, 0xb2, 0x07, 0x1c, 0xcb, 0x67, 0x49, 0x72, 0xbc, 0xfb, 0x93, 0xbd, 0x99, 0x66, 0x90, 0x54, 0x74, 0x42, 0xfe, 0x46, 0x25, 0xd1, 0xa7, 0x89, 0xe4, 0x40, 0x93, 0x54, 0x17, 0x2d, 0x7c, 0xc9, 0x68, 0x68, 0x82, 0xd7, 0x1b, 0xf6, 0x20, 0x5f, 0x9e, 0x5c, 0x5f, 0x95, 0x62, 0x1a, 0x49, 0xaa, 0xea, 0x75, 0xa1, 0xa8, 0x22, 0x79, 0xd1, 0x9d, 0xf1, 0x3f, 0x24, 0xfb, 0x11, 0x6c, 0x35, 0x3f, 0x1f, 0xfa, 0xa8, 0xd1, 0xee, 0x3b, 0x17, 0x2b, 0x21, 0x1a, 0x4f, 0x3e, 0xf9, 0xa5, 0xbd, 0x11, 0x6b, 0xc8, 0x23, 0xac, 0x76, 0x5b, 0x8f, 0x34, 0xb3, 0x60, 0x8e, 0x57, 0x2e, 0x85, 0x9d, 0xeb, 0x74, 0xf1, 0xe0, 0xd1, 0xed, 0x3c, 0x17, 0x20, 0x6c, 0xbf, 0xcd, 0x7f, 0x05, 0x0f, 0xd2, 0xd3, 0x1f, 0xc4, 0xec, 0x1b, 0xc9, 0x7f, 0xca, 0x97, 0x52, 0x2b, 0x39, 0x30, 0x13, 0x82, 0x9b, 0x14, 0x90, 0xd3, 0x94, 0xa1, 0xc0, 0x03, 0x06, 0x84, 0xa8, 0xd3, 0x40, 0x22, 0x2f, 0x60, 0x72, 0x37, 0x2d, 0xf0, 0x64, 0xbc, 0xc5, 0xeb, 0x68, 0x0f, 0xf5, 0x28, 0x8e, 0x4e, 0x6b, 0x6a, 0x16 ],
- const [ 0x3a, 0xc3, 0xe8, 0x6e, 0x6d, 0x6d, 0x65, 0xca, 0x20, 0x3b, 0x85, 0x0a, 0xc3, 0x6f, 0xd5, 0x96, 0xe8, 0xe0, 0x1f, 0x21, 0x4b, 0xef, 0x8e, 0x39, 0x0f, 0xbd, 0x14, 0x1c, 0x4a, 0x9b, 0x09, 0xce, 0xc4, 0xc2, 0x15, 0x68, 0xfc, 0x45, 0x4f, 0xb3, 0x6c, 0x43, 0xa6, 0xf5, 0x0e, 0x61, 0x81, 0x0b, 0x1f, 0x77, 0xa2, 0xb8, 0x23, 0x8a, 0x50, 0x3d, 0x29, 0xfb, 0xb5, 0x2a, 0x50, 0xfd, 0x85, 0x73, 0x8a, 0x4c, 0xe0, 0xc6, 0xa0, 0x1d, 0x7a, 0x1c, 0x77, 0x50, 0xf9, 0x8f, 0x91, 0xed, 0x9e, 0x6b, 0xd6, 0xce, 0x28, 0x87, 0x95, 0x99, 0xf5, 0xd6, 0xc6, 0xf2, 0x6b, 0x39, 0x92, 0xee, 0x96, 0x97, 0x15, 0xca, 0x12, 0x30, 0x62, 0xdd, 0x2c, 0x2e, 0xc7, 0xcb, 0x44, 0x7d, 0x53, 0xfc, 0x76, 0xdd, 0x96, 0x4c, 0x79, 0x36, 0xa8, 0x04, 0xc6, 0x2b, 0x6d, 0x0a, 0xfd, 0xf1, 0x16, 0x54, 0x85, 0x62, 0xeb, 0xa2, 0x73, 0x4d, 0x48, 0x6d, 0xae, 0x11, 0xe6, 0x1a, 0x50, 0x6a, 0x5c, 0x74, 0x4f, 0x8a, 0xe6, 0x59, 0x5c, 0x6c, 0x64, 0xb3, 0x0b, 0x65, 0xa6, 0xab, 0x35, 0xfc, 0xe6, 0x19, 0x9b, 0xfb, 0x96, 0x3e, 0xcb, 0xc6, 0x5d, 0xb5, 0x48, 0xec, 0x5c, 0xa7, 0xe5, 0xfc, 0xb5, 0x3f, 0x72, 0x9a, 0x4e, 0x5d, 0x9a, 0xd1, 0xd2, 0x8f, 0x0c, 0xab, 0xf9, 0x3d, 0xd9, 0xff, 0x0a, 0x23, 0x1d, 0x8b, 0x9e, 0x04, 0xe2, 0x42, 0xa6, 0x9d, 0x41, 0xe7, 0xaf, 0xd9, 0xca, 0xdb, 0x65, 0x43, 0x27, 0x34, 0x56, 0xc0, 0xfb, 0x0e, 0xf9, 0x7e, 0x10, 0x26, 0xef, 0x28, 0xb2, 0xa5, 0x88, 0x5c, 0x56, 0x39, 0x89, 0x5e, 0x80, 0x6a, 0x2d, 0x0e, 0xe3, 0x2c, 0x69, 0x17, 0xc9, 0xb0, 0x74, 0x6a, 0xb5, 0x80, 0x87, 0xeb, 0x47, 0xcb, 0xe2, 0x69, 0x61, 0xfd, 0x0f, 0xd4, 0x88, 0x93, 0x6a, 0xaa, 0x8d, 0x2e, 0xe1, 0xb3, 0x6c, 0xe6, 0xf9, 0xee, 0x74, 0xe0, 0x11, 0xcb, 0xa8, 0x23, 0xeb, 0x9a, 0x66, 0xa7, 0x68, 0x44, 0x46, 0xaf, 0x93, 0x39, 0x45, 0x59, 0xe1, 0xa9, 0x23, 0x74, 0xb8, 0xf7, 0x09, 0x91, 0x2d, 0x6b, 0x6f, 0x5d, 0x12, 0x27, 0x3d, 0x2e, 0x30, 0x5c, 0x30, 0xdb, 0xd1, 0xbd, 0x80, 0xd1, 0x82, 0x34, 0xc0, 0x63, 0x16, 0xd4, 0x05, 0x62, 0xee, 0x10, 0x4a, 0xee, 0x78, 0x2a, 0x13, 0x8b, 0xf6, 0xee, 0x51, 0x78, 0x81, 0x9f, 0x86, 0x3c, 0x4d, 0x32, 0x29, 0x81, 0x2e, 0xba, 0x4c, 0x25, 0x5b, 0x24, 0x7c, 0x8f, 0x73, 0x24, 0xe9, 0x3f, 0xbd, 0x6f, 0xc7, 0xa9, 0xb4, 0x2b, 0xf3, 0x44, 0xc3, 0xa3, 0xda, 0xde, 0x4d, 0x40, 0x97, 0x32, 0xf0, 0xb5, 0x5b, 0xbc, 0x0b, 0x79, 0x12, 0xcc, 0x7d, 0x7a, 0x43, 0xda, 0xb0, 0x10, 0x38, 0x19, 0xd7, 0x2f, 0x60, 0x4e, 0x73, 0xe2, 0xf1, 0xe3, 0x1c, 0xf4, 0xd1, 0x37, 0x7e, 0xf0, 0xb7, 0x39, 0xa2, 0x4d, 0x8e, 0x35, 0x6f, 0xe2, 0x1a, 0xee, 0x70, 0xa0, 0xdd, 0xec, 0xd7, 0x7f, 0x3c, 0x17, 0xc2, 0xb9, 0xde, 0x85, 0xbe, 0x37, 0x55, 0x91, 0x89, 0x48, 0x00, 0x2d, 0x1d, 0x99, 0x2f, 0x79, 0xe9, 0x62, 0x89, 0x94, 0x62, 0xdd, 0xab, 0xb1, 0xba, 0xfc, 0x12, 0x6e, 0xef, 0x5b, 0x3b, 0x62, 0x08, 0x74, 0x08, 0xf5, 0x9c, 0x12, 0x66, 0x75, 0x93, 0x08, 0x2d, 0x66, 0x30, 0x22, 0x48, 0x19, 0x50, 0x5c, 0x15, 0x80, 0xec, 0x52, 0x0e, 0x40, 0xe5, 0xf8, 0xaa, 0x08, 0x01, 0x8b, 0x7e, 0x21, 0x30, 0xc7, 0xa8, 0x47, 0x15, 0x5b, 0x6d, 0xb8, 0xc1, 0x9a, 0x21, 0x8a, 0xc2, 0x73, 0x47, 0x41, 0x5c, 0xa3, 0xfa, 0xa1, 0x16, 0x29, 0x8c, 0xc1, 0x79, 0xfa, 0x6c, 0x61, 0x14, 0xf7, 0x4d, 0x7d, 0xc3, 0x1c, 0x84, 0x23, 0x31, 0xfa, 0xb2, 0x81, 0x9c, 0x67, 0xa4, 0x42, 0xd8, 0x74, 0x77, 0x1b, 0x97, 0x9f, 0x00, 0xa0, 0xe7, 0x4a, 0x6b, 0x5d, 0xfc, 0x6c, 0x21, 0x22, 0x30, 0x87, 0xf0, 0x9e, 0x48, 0xda, 0x66, 0x2f, 0xf9, 0xd7, 0x7d, 0xf9, 0xab, 0xd7, 0x7e, 0x36, 0x7c, 0x0d, 0x1f, 0xcc, 0x88, 0xb8, 0xee, 0x25, 0x68, 0x9d, 0xf3, 0x3b, 0xf8, 0xb5, 0x91, 0xf2, 0x5d, 0x23, 0xae, 0xab, 0x47, 0x68, 0x14, 0x16, 0x74, 0xda, 0x16, 0x47, 0x76, 0x53, 0x76, 0x0d, 0xb5, 0x26, 0x86, 0x7f, 0xb7, 0x57, 0x8e, 0xd7, 0x9f, 0x0b, 0x6e, 0x84, 0xf4, 0x3d, 0x84, 0x7a, 0xa4, 0xb3, 0xd0, 0xcd, 0x49, 0x30, 0x56, 0x7e, 0xaa, 0xec, 0xc4, 0x95, 0x85, 0x41, 0x55, 0x6f, 0x8c, 0xa7, 0xf5, 0x5a, 0xad, 0xe2, 0xa6, 0x5f, 0x96, 0x7a, 0x22, 0x5f, 0x79, 0x6c, 0xc2, 0x62, 0x0c, 0x1f, 0x9e, 0x2b, 0xd5, 0x99, 0xf6, 0x10, 0xa4, 0xf3, 0xd1, 0x08, 0x61, 0x0a, 0xe3, 0x06, 0x07, 0x78, 0xb4, 0x85, 0xf1, 0xc3, 0xff, 0x64, 0x55, 0xd3, 0x58, 0xf5, 0x0e, 0xaa, 0x12, 0x51, 0x9e, 0x4f, 0x60, 0xee, 0x73, 0x0b, 0xba, 0x73, 0x69, 0xd8, 0x83, 0xca, 0x91, 0x17, 0xe8, 0x77, 0x31, 0x81, 0x0b, 0x29, 0x0b, 0x60, 0x61, 0x8f, 0xe2, 0xff, 0x58, 0x6d, 0x3b, 0x5f, 0x3e, 0xef, 0x61, 0x2b, 0x5e, 0x3d, 0xab, 0xee, 0x6c, 0x4f, 0x01, 0x84, 0x23, 0x03, 0x9d, 0xcf, 0x2c, 0x6d, 0x0f, 0xab, 0x42, 0x6e, 0x84, 0x23, 0x94, 0x88, 0x47, 0xe5, 0x6a, 0xf0, 0x88, 0xf3, 0x0c, 0xe5, 0x5d, 0x9c, 0xe0, 0x41, 0x06, 0xab, 0xd2, 0x4e, 0x75, 0xde, 0xf8, 0xda, 0x0e, 0x99, 0x76, 0x8e, 0xab, 0xdc, 0xa0, 0x7b, 0xe3, 0x73, 0x5f, 0xf6, 0x8c, 0x6c, 0xd6, 0xa6, 0x7e, 0xce, 0x45, 0xdb, 0x9a, 0x88, 0x2d, 0x21, 0x0b, 0xa8, 0xb5, 0x16, 0xcc, 0xcd, 0x4c, 0x78, 0x6a, 0xdf, 0x90, 0x82, 0x0c, 0xfd, 0x6e, 0x79, 0xb0, 0xb7, 0x8b, 0x82, 0xb7, 0x7e, 0xe3, 0xb6, 0xa4, 0x58, 0xb1, 0x78, 0x21, 0xd9, 0x8e, 0x06, 0x43, 0x4e, 0xdc, 0x4f, 0x0e, 0x3b, 0x65, 0x05, 0x3c, 0x08, 0x40, 0xf2, 0x3a, 0xf7, 0xf5, 0x8f, 0x74, 0x59, 0xe0, 0xd3, 0xd2, 0x02, 0xdb, 0x49, 0x82, 0xfa, 0x17, 0x65, 0xf9, 0x75, 0x4b, 0x18, 0x34, 0x05, 0x11, 0xa2, 0x44, 0x0f, 0x8c, 0xa8, 0x09, 0x7c, 0x4f, 0x86, 0x3e, 0xb0, 0x7a, 0xe6, 0xb5, 0xc0, 0x26, 0x92, 0xe4, 0xdf, 0x04, 0x86, 0xa1, 0x1a, 0x40, 0x4a, 0x2a, 0x46, 0xac, 0x7e, 0x68, 0x36, 0x1a, 0xb6, 0x75, 0x31, 0x09, 0x89, 0x5b, 0xa2, 0x85, 0xe5, 0x1f, 0x12, 0x48, 0xa5, 0xfe, 0x54, 0x25, 0x66, 0xf6, 0xff, 0xa7, 0x96, 0x88, 0x22, 0xf5, 0xcd, 0xbd, 0x32, 0xf8, 0x61, 0x67, 0x47, 0xc0, 0x35, 0xa9, 0x88, 0x24, 0xd1, 0xb9, 0xe4, 0xa9, 0xb8, 0xe5, 0x04, 0xa6, 0xf5, 0xd4, 0x7d, 0xa5, 0xf8, 0x0f, 0x49, 0x0b, 0xa0, 0xbf, 0x78, 0xfc, 0x99, 0xb9, 0x23, 0x79, 0xe8, 0xb7, 0xa2, 0xcb, 0xc4, 0xe8, 0xfe, 0x25, 0xa8, 0xac, 0xa9, 0x85, 0xa6, 0x98, 0x6d, 0xdb, 0xfe, 0xc1, 0xa3, 0x6d, 0xef, 0x37, 0xa5, 0x7a, 0xcd, 0xcf, 0x86, 0x1d, 0x54, 0x26, 0x00, 0x75, 0x3c, 0xe2, 0xad, 0x03, 0x0d, 0x3b, 0x7a, 0x53, 0x35, 0xbb, 0x5a, 0xdf, 0x58, 0x41, 0x37, 0x30, 0xe7, 0x4c, 0x2e, 0x46, 0xf4, 0x76, 0xfb, 0x3a, 0x45, 0x3f, 0xb2, 0x22, 0xa7, 0x0c, 0xb1, 0x35, 0x84, 0x70, 0xd2, 0x30, 0xb8, 0xa9, 0xe5, 0xf8, 0xa1, 0x6e, 0x5d, 0x80, 0x75, 0xe8, 0x49, 0xed, 0xd9, 0xfe, 0x86, 0xf8, 0xaf, 0xd5, 0x33, 0x94, 0x2f, 0x97, 0x66, 0xd1, 0x39, 0x74, 0x1d, 0x01, 0xe9, 0xe7, 0x78, 0x19, 0x6d, 0x3b, 0x25, 0x5a, 0x13, 0x4d, 0x1b, 0x30, 0xa6, 0x93, 0x8b, 0x5a, 0xfb, 0x5d, 0x13, 0x4b, 0xc7, 0x5b, 0x36, 0xd0, 0xb3, 0x60, 0x09, 0xf4, 0xb3, 0x65, 0x2e, 0x21, 0x93, 0xd1, 0x06, 0x87, 0xd3, 0xf8, 0x23, 0xc1, 0xb4, 0xe1, 0xfc, 0xb6, 0x93, 0x4c, 0xe5, 0xbe, 0x76, 0xf3, 0x3e, 0x07, 0xe5, 0x11, 0xea, 0x36, 0xfb, 0x21, 0x03, 0x51, 0xbc, 0xe8, 0xcb, 0xdc, 0xa9, 0xb5, 0xe6, 0x42, 0x92, 0xe8, 0xc7, 0x77, 0xac, 0xb1, 0x69, 0xdc, 0xe3, 0x1a, 0x3f, 0x63, 0x71, 0x48, 0x6d, 0xf3, 0xb0, 0xfd, 0x38, 0x0e, 0x2c, 0x62, 0xbb, 0xb1, 0xfd, 0x04, 0xdc, 0x7b, 0x54, 0x1c, 0x7f, 0x12, 0x53, 0x13, 0xfa, 0xc3, 0x22, 0x45, 0xc8, 0x68, 0x3f, 0x06, 0x81, 0x8f, 0x15, 0xe2, 0x09, 0xd8, 0xd1, 0x29, 0x08, 0x9f, 0x71, 0xac, 0x9b, 0xdb, 0x1d, 0xc1, 0x4a, 0x46, 0xbb, 0x8d, 0x39, 0xbf, 0xbe, 0x82, 0xa2, 0xec, 0x3e, 0x26, 0x82, 0x23, 0x4e, 0x16, 0x93, 0x8b, 0x8a, 0x4b, 0x7b, 0x7e, 0xef, 0x9d, 0x43, 0x32, 0xf0, 0x85, 0x0a, 0x99, 0xc5, 0x27, 0xfb, 0x85, 0x07, 0x90, 0x7c, 0x10, 0x7a, 0x3c, 0xa8, 0x3b, 0x2a, 0xdb, 0x00, 0xd5, 0xb9, 0x54, 0x5d, 0x9f, 0xf7, 0x0b, 0x2a, 0xad, 0xb3, 0x60, 0xcf, 0x0f, 0xd1, 0x78, 0x70, 0xb1, 0x9d, 0x3f, 0xd8, 0x80, 0x5f, 0xad, 0xb0, 0xce, 0x30, 0x49, 0xf5, 0xf8, 0x0b, 0xec, 0xa9, 0x46, 0x27, 0xc8, 0xc8, 0x12, 0x84, 0xa8, 0x7d, 0x2d, 0xc4, 0x79, 0x96, 0x7e, 0x3d, 0x0a, 0x36, 0xec, 0x4c, 0x10, 0xc9, 0x7f, 0xec, 0x6d, 0x3d, 0xc1, 0x87, 0xb2, 0x70, 0x6b, 0x0c, 0xe2, 0xe4, 0x3d, 0x41, 0x79, 0xba, 0x2e, 0x5b, 0xac, 0xde, 0xc5, 0xcc, 0xf3, 0x7f, 0xc7, 0x5c, 0xc5, 0xc2, 0x12, 0x7b, 0xa2, 0xb7, 0xc9, 0xd5, 0x57, 0x8c, 0xb1, 0x28, 0x7e, 0x00, 0xdb, 0x52, 0x44, 0x1b, 0x84, 0xaf, 0x6f, 0x1c, 0x39, 0xa1, 0x9f, 0xb4, 0x3f, 0x70, 0xd3, 0x71, 0x31, 0x55, 0x30, 0x7d, 0xeb, 0xd1, 0xfe, 0x88, 0xa7, 0x43, 0xf4, 0x03, 0x66, 0xba, 0xb5, 0x8f, 0x92, 0x08, 0x9a, 0xb5, 0xe1, 0x18, 0xb2, 0xd7, 0x7c, 0x81, 0x07, 0x66, 0x61, 0x5a, 0x23, 0x56, 0x05, 0x51, 0xd3, 0xcf, 0x3e, 0xf7, 0x2b, 0x26, 0x61, 0x5e, 0xca, 0x0b, 0xa7, 0xe6, 0x60, 0x04, 0xd6, 0x54, 0x6d, 0x1a, 0x1d, 0x24, 0x4b, 0xd1, 0x3f, 0x21, 0x6e, 0x5e, 0xf4, 0x32, 0xeb, 0x15, 0x8c, 0x77, 0x37, 0x21, 0xd5, 0x94, 0x31, 0x77, 0x3f, 0x4d, 0x63, 0x0d, 0x3e, 0x54, 0x85, 0x46, 0xf0, 0x5e, 0x43, 0xb1, 0x00, 0x7c, 0x41, 0xf4, 0xca, 0xa9, 0x5b, 0x03, 0xbf, 0x9f, 0x31, 0x96, 0x0b, 0xf0, 0xe3, 0xd9, 0x76, 0x51, 0x19, 0x65, 0x88, 0x39, 0x47, 0x6f, 0xf1, 0xab, 0x2f, 0x3f, 0x28, 0x4f, 0xa7, 0xe4, 0x51, 0xc8, 0x9c, 0x27, 0x64, 0x42, 0x57, 0xbd, 0x8c, 0x4a, 0xff, 0xc1, 0xcd, 0xe3, 0x5f, 0x61, 0xea, 0xd6, 0xea, 0xd7, 0x86, 0x49, 0xfc, 0x9b, 0x89, 0x93, 0x63, 0xd6, 0xc5, 0x4f, 0x1e, 0x1a, 0xda, 0xaf, 0x64, 0x51, 0x56, 0x14, 0xe9, 0xf4, 0x21, 0xdb, 0x5c, 0x7e, 0x19, 0x79, 0x34, 0x1f, 0xf9, 0xca, 0xac, 0xb4, 0x7f, 0xa6, 0x0c, 0xf7, 0xce, 0xb6, 0x2b, 0xf3, 0x11, 0x85, 0x32, 0xbc, 0x61, 0xda, 0xa2, 0x5c, 0xe9, 0x46, 0x99, 0x10, 0x47, 0xf9, 0x51, 0xb5, 0x36, 0xd9, 0xe9, 0x7d, 0x6a, 0xd6, 0x68, 0xe6, 0xbc, 0x77, 0xff, 0xed, 0x87, 0xb9, 0x8e, 0x7e, 0x52, 0x1a, 0x6a, 0x30, 0xaf, 0xf1, 0x5e, 0x2f, 0x62, 0x00, 0xef, 0x79, 0xc6, 0x4c, 0xe4, 0x4e, 0x6d, 0x2d, 0x06, 0xe1, 0x07, 0xa1, 0x25, 0x54, 0x85, 0xe5, 0x5b, 0xe3, 0x7e, 0x47, 0x95, 0x60, 0xd1, 0x36, 0x4e, 0xdf, 0x8c, 0x9b, 0x9e, 0xb2, 0x0c, 0x6c, 0x74, 0x98, 0x66, 0x7d, 0x1f, 0x31, 0x06, 0x9a, 0x14, 0xb5, 0x96, 0xd4, 0xeb, 0xe6, 0x22, 0x18, 0xaa, 0x43, 0x79, 0x06, 0x46, 0x7f, 0xd6, 0xff, 0x67, 0x31, 0xbf, 0x80, 0x6c, 0xcd, 0x2e, 0xaf, 0xaf, 0xd3, 0xef, 0x34, 0x0a, 0x46, 0x49, 0x4a, 0x9a, 0x60, 0xe0, 0x16, 0xc2, 0x84, 0xda, 0x37, 0x73, 0x74, 0x41, 0x9e, 0xab, 0xc4, 0xa8, 0xa0, 0x3c, 0x8f, 0x12, 0x49, 0xcf, 0x68, 0x0f, 0xf4, 0x28, 0x93, 0x28, 0x18, 0xac, 0x76, 0x7d, 0x65, 0x20, 0x4a, 0xad, 0x10, 0xb3, 0x16, 0xf6, 0x6b, 0x3f, 0xde, 0x9e, 0xb8, 0xcc, 0x17, 0x91, 0x3f, 0x56, 0x5f, 0x4b, 0x9e, 0xd0, 0x6b, 0xf8, 0x61, 0x68, 0x41, 0xda, 0xd2, 0x0d, 0xa7, 0xec, 0x12, 0x2e, 0xdb, 0xc5, 0x69, 0xc5, 0x84, 0xbe, 0xdb, 0x95, 0xe9, 0x57, 0xfc, 0xaf, 0x61, 0xd7, 0x05, 0x3b, 0x0a, 0x33, 0x26, 0x75, 0xbe, 0x31, 0x1e, 0xf6, 0x43, 0xcd, 0x0a, 0x35, 0xc2, 0xdc, 0x7a, 0x4d, 0x7b, 0xef, 0xca, 0x01, 0xb6, 0x7a, 0xb0, 0xfd, 0xfd, 0x36, 0x11, 0x5e, 0x88, 0xc3, 0x19, 0x75, 0xf9, 0x92, 0x8a, 0xc8, 0x4a, 0x02, 0x54, 0x5a, 0x03, 0xc9, 0x67, 0x2d, 0xb0, 0x96, 0xc5, 0x04, 0x92, 0xf5, 0xdb, 0x6d, 0x95, 0x72, 0x11, 0xff, 0x82, 0x01, 0xa0, 0xe1, 0x76, 0x9d, 0xa3, 0x8c, 0x93, 0x30, 0x72, 0xd1, 0xf5, 0xb3, 0x2b, 0x1d, 0xe7, 0x96, 0x91, 0xfc, 0x57, 0x62, 0x1a, 0xdc, 0x88, 0x9d, 0x43, 0x14, 0x07, 0xee, 0x27, 0x24, 0xe0, 0x81, 0x50, 0x3e, 0x11, 0xad, 0xcd, 0x06, 0x3f, 0xd4, 0x84, 0x97, 0xa8, 0x8b, 0xca, 0xc6, 0x59, 0xfb, 0x31, 0xaa, 0xa1, 0x87, 0xa1, 0x5c, 0xc5, 0xb0, 0xab, 0xfb, 0xf5, 0x35, 0x19, 0xf3, 0x7f, 0x7e, 0xca, 0x7f, 0x43, 0x3a, 0xbd, 0x6d, 0x67, 0x48, 0x6b, 0x22, 0x4c, 0xd3, 0x5a, 0xdd, 0xc0, 0xc2, 0xef, 0x40, 0x75, 0x4f, 0x84, 0x0c, 0xb1, 0xf5, 0xba, 0x2c, 0x48, 0x90, 0x10, 0xf5, 0xc8, 0xc0, 0xb5, 0xac, 0xf3, 0x8e, 0x9b, 0x48, 0x72, 0x52, 0xcd, 0x7a, 0xc7, 0xd4, 0x02, 0xeb, 0x84, 0xb1, 0x72, 0xc5, 0xba, 0x00, 0xe8, 0x74, 0xb5, 0x36, 0x19, 0xae, 0xe6, 0x47, 0x34, 0xb0, 0x21, 0x0e, 0xba, 0xcb, 0x09, 0xef, 0x90, 0x20, 0xc8, 0xbb, 0x53, 0xa8, 0x03, 0xd3, 0xeb, 0x77, 0x0c, 0x91, 0x63, 0x41, 0x5a, 0xe3, 0xf7, 0x1d, 0x37, 0x39, 0x6f, 0x89, 0xb9, 0xa2, 0xac, 0xae, 0xf3, 0x31, 0x81, 0xe6, 0x6c, 0xa6, 0xc4, 0x7c, 0xd1, 0x4a, 0xa4, 0xb3, 0xe6, 0x1b, 0x3c, 0x09, 0xc2, 0x29, 0x69, 0xbc, 0x3c, 0x40, 0xd9, 0x8e, 0xa1, 0xc7, 0x65, 0xc5, 0xa8, 0xe8, 0xa1, 0x77, 0xa7, 0xf2, 0xb1, 0x04, 0x06, 0xfb, 0x5e, 0xe4, 0xf4, 0xc9, 0x69, 0xa3, 0x5a, 0xf3, 0x1e, 0x29, 0x0d, 0x43, 0x2d, 0x3f, 0x48, 0x5f, 0xb6, 0x4f, 0x59, 0xa8, 0xa3, 0x6b, 0x9a, 0x63, 0x3a, 0x91, 0xa3, 0x17, 0xf2, 0x2e, 0xbe, 0x35, 0x86, 0xe0, 0x9c, 0xfe, 0x49, 0x80, 0x46, 0xa2, 0xb9, 0x60, 0x55, 0xa5, 0x56, 0xd1, 0x66, 0x87, 0xb5, 0xe9, 0xc9, 0xa4, 0xd0, 0x83, 0x79, 0x59, 0xa0, 0x86, 0x51, 0x68, 0xee, 0x6b, 0x7c, 0x9e, 0x66, 0xf9, 0x2e, 0xb3, 0xed, 0x53, 0x91, 0x71, 0x34, 0x35, 0x03, 0x18, 0x8d, 0x7b, 0x7e, 0x02, 0xfe, 0xe3, 0x57, 0x83, 0x94, 0x13, 0x2c, 0x13, 0xfa, 0xde, 0x18, 0xaf, 0x4a, 0xc3, 0x28, 0x7c, 0x23, 0xb6, 0x13, 0xae, 0xfc, 0x24, 0x25, 0xa8, 0xb8, 0x31, 0x7d, 0x64, 0x7a, 0x44, 0x78, 0x16, 0xba, 0xc5, 0x6d, 0x0c, 0x99, 0x25, 0x9b, 0xd9, 0x71, 0x1f, 0x5f, 0xb2, 0xb1, 0x3e, 0xab, 0x18, 0xe8, 0xa0, 0xb3, 0xb8, 0x1f, 0xf9, 0xe9, 0x8f, 0x6c, 0xda, 0x2c, 0x51, 0xc4, 0x34, 0x3c, 0x0c, 0x11, 0x18, 0x72, 0x08, 0x84, 0xc0, 0xae, 0xf3, 0x2d, 0xd3, 0x90, 0x3a, 0xc9, 0xe5, 0xeb, 0xba, 0xdb, 0x3d, 0x76, 0x98, 0xfe, 0xdc, 0xc5, 0x6d, 0x79, 0xbb, 0x78, 0xa7, 0x14, 0x53, 0xb3, 0x2c, 0x2a, 0x62, 0xce, 0x40, 0x00, 0xed, 0x4d, 0xa8, 0x55, 0x81, 0x12, 0x0f, 0x3a, 0xbf, 0xd1, 0xaa, 0x24, 0x18, 0xc5, 0x18, 0x40, 0xd4, 0xa1, 0x8c, 0x06, 0x59, 0xca, 0x2d, 0x11, 0xaa, 0xc3, 0xbd, 0x2e, 0x2e, 0xe8, 0x79, 0xb3, 0xb3, 0x60, 0x41, 0x12, 0xb2, 0x4d, 0xf9, 0xad, 0xd4, 0x45, 0x2f, 0xec, 0xb6, 0x06, 0xfe, 0x8d, 0xe9, 0x65, 0x32, 0x3c, 0x3e, 0x88, 0xac, 0x64, 0x40, 0x55, 0x09, 0x44, 0x01, 0x2a, 0x7e, 0x45, 0x1a, 0xcf, 0x06, 0x8b, 0xed, 0xa9, 0xc0, 0xca, 0x2d, 0x30, 0x92, 0x5b, 0xa1, 0xa3, 0x13, 0x8f, 0x24, 0xfa, 0xa8, 0x43, 0xf1, 0x1c, 0xed, 0xb4, 0x1d, 0x52, 0x56, 0x95, 0x65, 0xfb, 0x16, 0x5f, 0x2a, 0x82, 0x3f, 0xe9, 0xba, 0x8e, 0x2b, 0x38, 0xd1, 0x78, 0x1c, 0x98, 0x60, 0x02, 0x1f, 0xeb, 0x8c, 0x46, 0x36, 0x42, 0xfa, 0xec, 0xb5, 0xaa, 0x4a, 0xa0, 0xed, 0x49, 0xe1, 0xc3, 0x08, 0xa9, 0xec, 0x61, 0x34, 0x53, 0xa1, 0x64, 0x04, 0xa0, 0xc8, 0x07, 0x12, 0xcc, 0x7b, 0x8d, 0xea, 0x4c, 0x2a, 0x32, 0x23, 0x61, 0xe2, 0x62, 0xcf, 0xee, 0xce, 0x29, 0x16, 0x87, 0xfe, 0xeb, 0x1d, 0xca, 0x67, 0x55, 0x2d, 0xf2, 0x2b, 0x93, 0x11, 0xa9, 0x1b, 0xc3, 0xbf, 0x1e, 0x7a, 0xaa, 0x3b, 0x58, 0x04, 0xa6, 0xb9, 0xca, 0x2f, 0xe4, 0x02, 0x27, 0xb1, 0xd3, 0x18, 0x77, 0x42, 0xd9, 0x1d, 0x6b, 0xa3, 0x44, 0x71, 0xed, 0xdf, 0x83, 0x1b, 0xfc, 0xd1, 0x96, 0x6a, 0xb7, 0xe6, 0xc3, 0xdb, 0xb7, 0x25, 0x8b, 0x3e, 0xa2, 0x6c, 0xdc, 0x15, 0xfd, 0xfc, 0x88, 0x3d, 0x42, 0x37, 0xf6, 0xd0, 0x33, 0xa9, 0x18, 0x49, 0x6d, 0x46, 0x9c, 0xe9, 0x40, 0xf2, 0x67, 0x5a, 0xbe, 0x47, 0x3f, 0x93, 0x12, 0x92, 0xc7, 0xfb, 0x14, 0x1e, 0xb1, 0xd1, 0x1a, 0xb6, 0x2f, 0xcb, 0x10, 0x65, 0xaa, 0xfd, 0xcb, 0x80, 0xb7, 0xfd, 0x9a, 0xe6, 0x47, 0x45, 0x1e, 0x87, 0x1d, 0xd8, 0x5c, 0x23, 0x86, 0x29, 0x11, 0x54, 0x44, 0x38, 0x45, 0xcf, 0xcb, 0xfe, 0x23, 0xe7, 0xb0, 0x0b, 0x08, 0x53, 0x5e, 0x6e, 0xda, 0x30, 0x0b, 0xd5, 0x9b, 0x4a, 0xea, 0xf5, 0x3e, 0x97, 0xa2, 0x2c, 0xb9, 0x04, 0x00, 0x65, 0x5b, 0x74, 0xe8, 0x3d, 0x60, 0x06, 0x92, 0x64, 0xc3, 0x97, 0xf3, 0x45, 0x53, 0x89, 0x78, 0xe9, 0x09, 0xc2, 0xfa, 0x18, 0x99, 0xf7, 0xef, 0xc2, 0x47, 0x2a, 0xdd, 0x9e, 0xfc, 0x71, 0x15, 0x11, 0x99, 0xfa, 0x9d, 0x51, 0x8b, 0x4c, 0x6e, 0xca, 0xa0, 0xcf, 0xdf, 0xc1, 0x18, 0x8f, 0x62, 0x37, 0x00, 0x3d, 0x6e, 0x10, 0xbb, 0x77, 0xbc, 0x74, 0xe2, 0x48, 0xb6, 0x76, 0x4e, 0xf3, 0x2d, 0xf3, 0x72, 0xec, 0x4a, 0xbd, 0xee, 0x28, 0xc7, 0xf9, 0x62, 0x96, 0x5e, 0xc6, 0x80, 0xee, 0x82, 0x20, 0x66, 0xa9, 0x4e, 0x03, 0x2a, 0x50, 0xbb, 0xd3, 0xb6, 0xfa, 0x15, 0xfb, 0xd6, 0x11, 0xb0, 0xd5, 0x8f, 0x54, 0xd7, 0xca, 0xb3, 0x22, 0x05, 0xba, 0xb2, 0xf5, 0x58, 0x9d, 0xb3, 0x2d, 0x42, 0x6b, 0xe3, 0x0f, 0x82, 0x3a, 0x0d, 0x0d, 0x52, 0xa6, 0x6c, 0x47, 0xe2, 0x76, 0xbd, 0x53, 0x06, 0x7d, 0x97, 0x39, 0x2b, 0xbd, 0xff, 0xc2, 0x90, 0xd3, 0x38, 0xf3, 0xb3, 0x8f, 0xd8, 0xd4, 0x09, 0xe2, 0x21, 0x76, 0xf1, 0xfd, 0x8d, 0x33, 0xeb, 0xb7, 0xab, 0x38, 0x05, 0x2f, 0x2a, 0x41, 0x97, 0xb3, 0x33, 0xa4, 0x30, 0xe1, 0xfd, 0x91, 0xd0, 0x0c, 0x9b, 0x98, 0x58, 0xe2, 0x18, 0x6b, 0x3e, 0x4b, 0xc5, 0xe6, 0x85, 0x94, 0xd2, 0x4c, 0xed, 0xcc, 0x1c, 0xd4, 0x67, 0x6e, 0x46, 0x64, 0xcb, 0x41, 0x0b, 0x9c, 0xcd, 0x7d, 0xd2, 0x16, 0x2e, 0x2f, 0x83, 0xec, 0x2f, 0xde, 0x9a, 0x7b, 0x4b, 0x6f, 0x7a, 0x67, 0x25, 0x46, 0x03, 0xe0, 0xc0, 0xae, 0x66, 0x23, 0xee, 0x7b, 0x38, 0x43, 0x0b, 0xee, 0xc6, 0x29, 0xea, 0xd8, 0xa9, 0xd9, 0x10, 0x02, 0x9a, 0xf8, 0x20, 0xcd, 0x87, 0x8b, 0x97, 0x16, 0xe6, 0x02, 0xb9, 0x5c, 0x49, 0x75, 0xcc, 0x25, 0x32, 0x2d, 0x83, 0x9d, 0x29, 0x66, 0xbd, 0x81, 0x0d, 0x53, 0x70, 0x3b, 0xa8, 0x63, 0xdf, 0x4f, 0x85, 0xc3, 0x14, 0xf5, 0x06, 0x24, 0x8a, 0x07, 0xb1, 0xbe, 0x2a, 0x1e, 0xcb, 0x95, 0x78, 0xf9, 0x28, 0xfb, 0x0f, 0x1e, 0x41, 0x56, 0x4b, 0xc3, 0x87, 0x23, 0x45, 0xee, 0xf7, 0x3b, 0x04, 0xdc, 0xef, 0x55, 0xf1, 0xa0, 0x40, 0xcd, 0x8c, 0x0c, 0x84, 0xa4, 0x5e, 0xd4, 0xb2, 0xc7, 0x2e, 0xf1, 0xef, 0x94, 0x78, 0x44, 0xa7, 0x9a, 0x1b, 0x7c, 0xdd, 0xa0, 0x52, 0x39, 0xbf, 0xe9, 0xe5, 0x71, 0x7e, 0xb7, 0xa1, 0x14, 0x5c, 0x0e, 0x05, 0xeb, 0x07, 0xba, 0x3e, 0xc6, 0x25, 0x94, 0x56, 0xd6, 0x30, 0x00, 0xa8, 0x58, 0x84, 0xba, 0x97, 0x73, 0xb6, 0xd3, 0x7f, 0x64, 0x28, 0xf6, 0xec, 0xd8, 0xda, 0xf0, 0x0a, 0x99, 0x83, 0x6f, 0x5d, 0x6d, 0xe1, 0x0a, 0xb2, 0x3c, 0x4d, 0x82, 0x56, 0x70, 0x92, 0x48, 0x85, 0xa1, 0xff, 0x3f, 0x25, 0x72, 0xbb, 0xc2, 0xb5, 0xb6, 0x59, 0xe9, 0x80, 0xd8, 0xac, 0x08, 0x16, 0x79, 0xdd, 0x79, 0xfc, 0x5a, 0xba, 0x9c, 0xa3, 0x7d, 0x51, 0x1b, 0x97, 0x87, 0xbe, 0x73, 0xf9, 0x69, 0x41, 0xb0, 0x2f, 0x3f, 0x94, 0x77, 0xda, 0x78, 0x7b, 0x4a, 0x08, 0x38, 0x9c, 0x08, 0xac, 0xfa, 0x91, 0xb3, 0x4b, 0x7a, 0x3c, 0x76, 0xf7, 0xd2, 0x5a, 0xe7, 0x81, 0xe3, 0x5b, 0x89, 0xeb, 0xf6, 0x72, 0x95, 0x1c, 0xa3, 0xe8, 0xfa, 0xd7, 0xf3, 0xb5, 0xa2, 0xee, 0xc1, 0x51, 0xf7, 0xb3, 0x66, 0xc8, 0xa6, 0xb0, 0x95, 0x0d, 0xa2, 0x98, 0x83, 0x90, 0x6d, 0x7d, 0x4b, 0x12, 0x93, 0x42, 0x92, 0xb8, 0x77, 0x54, 0x66, 0x5f, 0x51, 0x95, 0x6c, 0x30, 0x78, 0x99, 0x3b, 0x74, 0xdd, 0x15, 0x03, 0xa9, 0xd8, 0x94, 0x72, 0xd5, 0x28, 0x6c, 0xd8, 0x1a, 0x35, 0xf1, 0x89, 0x8b, 0x97, 0xe8, 0x83, 0x3e, 0xdc, 0x3f, 0x50, 0xa2, 0x86, 0xfb, 0x2e, 0x13, 0x54, 0x71, 0x6e, 0xac, 0xc3, 0xb9, 0x1a, 0x5d, 0xd3, 0x60, 0xda, 0x3d, 0x0e, 0x5d, 0x18, 0x21, 0xc7, 0x46, 0x63, 0x6d, 0xa0, 0xc4, 0x11, 0x2a, 0x4f, 0x45, 0x29, 0x59, 0xa1, 0xf0, 0x80, 0x87, 0xbe, 0xde, 0x21, 0xa2, 0xb0, 0x87, 0xf2, 0x0b, 0x1f, 0x7a, 0x95, 0xec, 0x5e, 0x52, 0x8d, 0xcc, 0xac, 0xe5, 0xa2, 0x61, 0xb3, 0xbe, 0x86, 0xa5, 0x55, 0xce, 0xb8, 0x2c, 0xa8, 0x5e, 0xa9, 0xb4, 0x3f, 0x48, 0x1e, 0xfe, 0xac, 0x67, 0xd5, 0xdc, 0x42, 0x4c, 0x6b, 0x8c, 0x20, 0x32, 0x7d, 0x44, 0x6b, 0x34, 0x0e, 0x0e, 0xda, 0xbe, 0x28, 0xd6, 0x78, 0x42, 0xc6, 0xc1, 0xa5, 0x2c, 0xf2, 0xc1, 0x5e, 0x17, 0x2b, 0x67, 0xbf, 0x41, 0x09, 0xf8, 0xc6, 0x3c, 0x24, 0xc2, 0x5a, 0xe7, 0x31, 0xb0, 0x8c, 0x9d, 0x6e, 0x1d, 0x1c, 0xac, 0x41, 0xe6, 0x3f, 0x09, 0x1b, 0xc3, 0x9f, 0x42, 0xa3, 0xd7, 0xa4, 0xb3, 0x11, 0x85, 0xf2, 0xfd, 0xd7, 0x86, 0x33, 0xb4, 0x87, 0x38, 0x16, 0x58, 0xf1, 0x39, 0x97, 0x87, 0x8b, 0x35, 0x82, 0x70, 0x17, 0xfc, 0x32, 0x8b, 0x7f, 0xd8, 0x9f, 0x88, 0x04, 0x1d, 0x98, 0x85, 0x97, 0x01, 0x4c, 0x83, 0x87, 0xae, 0x0f, 0x1b, 0x5d, 0x96, 0x5b, 0x6d, 0x05, 0x07, 0x15, 0x5a, 0x2e, 0xff, 0x12, 0xf3, 0xf2, 0x41, 0xda, 0x30, 0xba, 0xa8, 0xac, 0xe6, 0x5c, 0xbc, 0xc2, 0xf3, 0x87, 0x83, 0xd5, 0xbb, 0x61, 0x9a, 0xe4, 0xd9, 0x6e, 0x83, 0x32, 0x0e, 0xb4, 0x41, 0x8e, 0x7d, 0x1d, 0x22, 0xd6, 0x1b, 0x1c, 0xdd, 0xbe, 0x61, 0x93, 0xdc, 0xce, 0x44, 0xf5, 0xdb, 0xaa, 0x66, 0xa8, 0xb2, 0x96, 0x8e, 0xad, 0x6f, 0x39, 0x56, 0x82, 0xa8, 0xa1, 0x23, 0x47, 0x10, 0x88, 0x5a, 0x21, 0x47, 0xd6, 0xd1, 0xdc, 0xf7, 0x67, 0x84, 0xd4, 0x1c, 0x0d, 0x8a, 0x15, 0xa3, 0xd9, 0x47, 0xc1, 0x37, 0x96, 0xe2, 0xb2, 0x58, 0x97, 0xf9, 0x61, 0xad, 0xb3, 0x94, 0x06, 0x9b, 0x8d, 0x58, 0x01, 0x16, 0x19, 0xfe, 0x79, 0xb7, 0x5b, 0x03, 0x43, 0x0f, 0x72, 0xa0, 0x05, 0x3c, 0xd6, 0xfc, 0x9b, 0xb9, 0xde, 0xa1, 0xb9, 0x7b, 0x85, 0x2c, 0xd2, 0x39, 0x6d, 0x49, 0x39, 0x0b, 0x24, 0xdf, 0x87, 0x36, 0xa7, 0x88, 0x3c, 0x46, 0x24, 0x44, 0xa9, 0x5e, 0x04, 0x6e, 0x0d, 0xcd, 0x29, 0xef, 0xfe, 0xe1, 0x74, 0xb1, 0x0a, 0x00, 0x8b, 0x57, 0x9f, 0xf4, 0xd9, 0x2b, 0x28, 0x87, 0xd6, 0x57, 0x79, 0x50, 0x88, 0x59, 0x6d, 0xcc, 0x4a, 0xb1, 0xcd, 0xb1, 0xcc, 0xdc, 0x74, 0x7e, 0x5b, 0x86, 0xb1, 0x57, 0x62, 0xfc, 0xed, 0x10, 0x31, 0xe0, 0x8e, 0x88, 0xfe, 0x20, 0x1b, 0x38, 0x29, 0x28, 0xa0, 0x0b, 0xc5, 0x57, 0x54, 0x70, 0x53, 0xb0, 0x79, 0xae, 0xd0, 0xd3, 0x84, 0x79, 0xf3, 0x2b, 0x7e, 0xc2, 0xb0, 0x68, 0xaa, 0xd3, 0x00, 0x30, 0x68, 0x9a, 0xe4, 0x11, 0x59, 0x45, 0xa7, 0xbb, 0xc4, 0x10, 0x64, 0x6c, 0x38, 0x5b, 0xc9, 0xab, 0x73 ],
- const [ 0x9a, 0x96, 0x67, 0x95, 0x5c, 0x84, 0x47, 0x3a, 0xde, 0xe8, 0x98, 0x0b, 0x59, 0xea, 0x75, 0x0b, 0xd6, 0x41, 0x4a, 0x45, 0x41, 0xf6, 0x89, 0xb2, 0xc0, 0x6a, 0x9e, 0x5c, 0x43, 0x9a, 0x24, 0xc4, 0x5b, 0xa2, 0x59, 0x81, 0x4f, 0x80, 0xcf, 0x2b, 0x6d, 0x1b, 0x65, 0x77, 0x9e, 0x84, 0x76, 0xa3, 0x3d, 0x7b, 0x50, 0x15, 0x29, 0x35, 0xe8, 0x3f, 0x19, 0x5c, 0xcc, 0xc5, 0x30, 0x58, 0x58, 0xe2, 0xd2, 0xcd, 0x2d, 0x08, 0xb5, 0x64, 0xdf, 0xc6, 0x3b, 0xcf, 0xee, 0xef, 0xff, 0x07, 0xf8, 0xf9, 0xad, 0xd8, 0x2c, 0xa3, 0x18, 0xa0, 0x02, 0xda, 0x86, 0x54, 0x29, 0xde, 0x4e, 0xc3, 0xc1, 0xa1, 0xa6, 0x1f, 0xcb, 0x70, 0xb6, 0xb9, 0xde, 0xd4, 0xf1, 0x0c, 0x1b, 0xbb, 0xa4, 0xfd, 0x63, 0xd3, 0xcf, 0x61, 0xc7, 0x37, 0x35, 0xc0, 0x3f, 0x4d, 0xaf, 0x58, 0x9f, 0xee, 0xc5, 0x65, 0xc8, 0xc8, 0x7f, 0xa0, 0x1b, 0x01, 0x79, 0x06, 0x34, 0x1d, 0x36, 0xda, 0xd4, 0x22, 0xb6, 0xed, 0x1e, 0xfa, 0x4b, 0x1d, 0x07, 0x18, 0xa8, 0x1c, 0x08, 0x5f, 0x3b, 0x73, 0x15, 0x3f, 0xbd, 0xc6, 0xd3, 0x21, 0x07, 0x59, 0x06, 0x05, 0x27, 0xd3, 0x48, 0x69, 0xb3, 0x42, 0x01, 0x6d, 0x5d, 0x60, 0x93, 0x36, 0xc8, 0x15, 0xd5, 0x90, 0x9a, 0x3c, 0xc3, 0xd7, 0xd3, 0xaa, 0x74, 0x17, 0x5d, 0x6c, 0x4c, 0x72, 0xe3, 0x51, 0x72, 0xc2, 0xe7, 0xa9, 0x84, 0x80, 0x0f, 0x4b, 0x8a, 0xe5, 0xc0, 0xdd, 0x29, 0x4e, 0xee, 0x4f, 0x1a, 0xe5, 0x33, 0xa9, 0xda, 0x7e, 0x1e, 0x07, 0xa2, 0xbf, 0xcd, 0xe1, 0x99, 0x84, 0xbe, 0x90, 0x49, 0x81, 0xe2, 0x0e, 0x4f, 0x2a, 0xf3, 0xfe, 0x57, 0xcf, 0x08, 0xec, 0x48, 0x0c, 0x67, 0xd5, 0xbc, 0x60, 0x9a, 0xea, 0xb3, 0x1c, 0xc5, 0x91, 0x88, 0x7f, 0x36, 0xad, 0x24, 0x1f, 0x3e, 0x1f, 0x71, 0x8a, 0x3f, 0x8d, 0x11, 0x2e, 0x07, 0x61, 0x51, 0x76, 0x5c, 0x15, 0x58, 0x36, 0xd8, 0xaf, 0xa5, 0x49, 0xf8, 0x87, 0xb8, 0x79, 0x6f, 0x50, 0x0e, 0x9e, 0xc0, 0x56, 0x53, 0x0a, 0x0b, 0x05, 0xd4, 0x25, 0x27, 0xab, 0x33, 0x55, 0xf2, 0x7f, 0x5e, 0x21, 0xe5, 0xe1, 0xc1, 0x95, 0xec, 0xe3, 0xbb, 0xe8, 0x74, 0x09, 0x4f, 0x5c, 0xc5, 0x4d, 0x1d, 0x66, 0x92, 0x66, 0x90, 0x0f, 0xce, 0x4a, 0x58, 0x9a, 0xc2, 0xf2, 0x1b, 0x67, 0x5d, 0x5d, 0x67, 0x17, 0xcb, 0xd7, 0xec, 0xf1, 0x49, 0x7b, 0xe8, 0x84, 0x37, 0xf7, 0xe2, 0x8e, 0x6e, 0x8f, 0x9b, 0x1d, 0xd5, 0x65, 0x42, 0xf4, 0x2f, 0xf7, 0xe7, 0x30, 0x37, 0xe9, 0x32, 0x2c, 0xef, 0x05, 0x55, 0xa1, 0x35, 0x80, 0x3f, 0x12, 0x97, 0x7e, 0x12, 0x67, 0x68, 0xd9, 0xd8, 0xd8, 0x13, 0x1e, 0x72, 0x0c, 0xb0, 0xd9, 0xd0, 0x82, 0xd5, 0x13, 0x68, 0x31, 0xaf, 0x18, 0xe0, 0x6b, 0x51, 0x7e, 0x0e, 0x07, 0x4b, 0x62, 0x23, 0xbf, 0x7f, 0xf5, 0x23, 0xd7, 0x30, 0x38, 0x99, 0x00, 0x5c, 0x03, 0x88, 0x7b, 0x4c, 0x4c, 0xa4, 0x81, 0x69, 0xa6, 0xc2, 0xe3, 0x51, 0x08, 0x8e, 0xee, 0x2a, 0xd0, 0x7c, 0x91, 0x37, 0x07, 0x01, 0xc2, 0xa8, 0xe7, 0x02, 0x1d, 0xb7, 0x9a, 0x8d, 0xce, 0xf0, 0x45, 0xc7, 0xb2, 0xd0, 0x45, 0x25, 0xb9, 0x92, 0xb9, 0xdf, 0x8f, 0x46, 0x40, 0xa2, 0x7b, 0x23, 0x04, 0x86, 0x87, 0x1e, 0xf7, 0x3f, 0xe1, 0xbc, 0x5c, 0x97, 0x81, 0x24, 0x8a, 0x1c, 0x0c, 0x78, 0xec, 0x15, 0xf8, 0x65, 0x4d, 0xbb, 0xf2, 0xf9, 0x52, 0xa6, 0x7c, 0xb5, 0x48, 0x86, 0xdb, 0xe4, 0x20, 0x13, 0x30, 0x2b, 0xb8, 0x47, 0xe5, 0x60, 0x5d, 0xca, 0x4a, 0x9f, 0x8d, 0xae, 0x80, 0x9b, 0x01, 0x5c, 0x97, 0x33, 0xeb, 0xce, 0xf3, 0x46, 0x7c, 0xff, 0xf4, 0xc7, 0xa9, 0xa0, 0xd6, 0x14, 0x2f, 0x0d, 0xd5, 0x83, 0xd4, 0x7f, 0x95, 0x3e, 0xf0, 0x83, 0xc2, 0x52, 0x2d, 0xab, 0xf3, 0x02, 0x8b, 0x83, 0xd5, 0x61, 0xa7, 0xc6, 0x85, 0x20, 0x3c, 0xd2, 0x3d, 0xa4, 0xea, 0x5a, 0x33, 0x5b, 0x36, 0x5b, 0xbe, 0x51, 0xd3, 0x51, 0xbb, 0xfe, 0x20, 0xaa, 0x2f, 0x63, 0xf1, 0x7b, 0x2e, 0x55, 0x92, 0x72, 0xfb, 0x18, 0x09, 0x0c, 0x70, 0x2f, 0x9c, 0x07, 0xa0, 0x73, 0x93, 0x1b, 0xbc, 0x63, 0x3f, 0xe5, 0x33, 0xbb, 0x3b, 0x24, 0x1d, 0x48, 0xf2, 0x27, 0xda, 0xfa, 0x61, 0x86, 0xf6, 0x3b, 0x1f, 0x11, 0x50, 0x7f, 0x9a, 0x06, 0x7c, 0x1c, 0xa3, 0x87, 0x65, 0x5d, 0x2d, 0x4a, 0x37, 0xd1, 0x51, 0x93, 0x7c, 0xe9, 0x96, 0x5f, 0x85, 0xc2, 0x70, 0xe2, 0x0b, 0x40, 0x06, 0x34, 0x16, 0x5c, 0x38, 0x48, 0x1e, 0xbf, 0xe1, 0x1d, 0x70, 0x8f, 0x59, 0x38, 0xd4, 0x89, 0x3f, 0x51, 0x6d, 0x50, 0x75, 0x4d, 0xe0, 0x04, 0x6b, 0x6c, 0xb9, 0x17, 0xa1, 0xc4, 0x0a, 0x5c, 0x67, 0xee, 0x54, 0x61, 0xe8, 0xff, 0xab, 0xff, 0x66, 0xb9, 0x16, 0x2f, 0xc7, 0x03, 0x35, 0x1f, 0x51, 0x97, 0x26, 0x86, 0xb2, 0xfb, 0xa8, 0x34, 0x43, 0xb2, 0x81, 0xed, 0x8d, 0xb3, 0x1e, 0x77, 0x0d, 0x1a, 0x7a, 0xf2, 0x34, 0x1e, 0x41, 0x68, 0xb2, 0x43, 0x34, 0xa5, 0xf4, 0xd0, 0xcf, 0x49, 0xeb, 0x84, 0x29, 0x1b, 0x10, 0x85, 0x1d, 0xa0, 0xa5, 0x99, 0xa7, 0xed, 0x3d, 0x98, 0x90, 0xb9, 0x7e, 0x22, 0x4e, 0xb6, 0x26, 0x8d, 0x26, 0x22, 0x4c, 0x21, 0x93, 0x98, 0xe9, 0x88, 0xeb, 0x2d, 0x96, 0x80, 0x40, 0xb8, 0x97, 0xd3, 0x84, 0x71, 0x19, 0x89, 0xf1, 0xbe, 0xb8, 0x5c, 0xa8, 0x49, 0x44, 0x6c, 0x99, 0x56, 0xc5, 0x34, 0xa2, 0x54, 0xbc, 0xbd, 0xfb, 0xb1, 0xac, 0x11, 0xd1, 0xf3, 0xd9, 0xf3, 0x31, 0x05, 0x50, 0xcd, 0x28, 0xce, 0x27, 0xea, 0x29, 0x08, 0x06, 0xe5, 0xae, 0x50, 0xe7, 0x62, 0x22, 0x79, 0x19, 0xfb, 0xff, 0x26, 0x8b, 0x7e, 0x34, 0x98, 0x47, 0x55, 0xc9, 0xc4, 0x3d, 0x45, 0xc5, 0xa9, 0x42, 0x5c, 0x50, 0xe0, 0x58, 0x24, 0x15, 0x75, 0x30, 0x1d, 0xea, 0xf5, 0xed, 0x6a, 0xb3, 0xc8, 0x2b, 0xcb, 0x83, 0xc1, 0x40, 0xcb, 0x05, 0xf4, 0xc1, 0x3b, 0x1b, 0xc8, 0x49, 0xde, 0xc4, 0x4d, 0x75, 0x66, 0x43, 0xcf, 0x33, 0x9f, 0x7e, 0xab, 0x3d, 0xeb, 0xa4, 0x61, 0xe0, 0xee, 0x12, 0xeb, 0x02, 0x8a, 0x78, 0x4d, 0x63, 0x0e, 0x37, 0x6e, 0x23, 0xaa, 0x0e, 0x26, 0x85, 0x27, 0xf6, 0x98, 0xf2, 0xd4, 0x4a, 0xc2, 0x41, 0xc4, 0x2b, 0x52, 0x35, 0x36, 0x23, 0xbb, 0x47, 0x55, 0x08, 0x89, 0xa6, 0x22, 0x24, 0xf1, 0x7d, 0xae, 0x92, 0xad, 0x74, 0x8c, 0xeb, 0x07, 0x79, 0x86, 0x23, 0x33, 0xc0, 0x8f, 0xad, 0xe1, 0x08, 0xf9, 0xe6, 0x13, 0x21, 0xe8, 0xb0, 0x2c, 0xab, 0x07, 0x5d, 0x4a, 0x20, 0x79, 0xd0, 0xd6, 0x15, 0x13, 0xde, 0x5a, 0xbc, 0xc8, 0xfa, 0x92, 0xae, 0x64, 0x12, 0xc5, 0xe7, 0x7e, 0xb4, 0x55, 0x12, 0xa7, 0x75, 0x96, 0x08, 0xe8, 0x93, 0xdc, 0x93, 0x6c, 0xd9, 0xd8, 0x77, 0x79, 0xc3, 0x24, 0xb3, 0xa5, 0xe3, 0x1c, 0x04, 0x46, 0x83, 0xf0, 0xab, 0x2a, 0x8c, 0xf7, 0x70, 0x88, 0xa7, 0x46, 0xe7, 0x37, 0xa1, 0x82, 0xf2, 0x1e, 0x14, 0xf2, 0x87, 0xec, 0x44, 0xd8, 0xb3, 0x09, 0x47, 0x02, 0xdf, 0xcc, 0x69, 0x9c, 0x53, 0xee, 0xce, 0x48, 0xf8, 0x3e, 0x59, 0x71, 0x62, 0x97, 0xcd, 0xdb, 0x0d, 0x0f, 0x32, 0x7f, 0xe7, 0x72, 0x7b, 0x97, 0x0f, 0xef, 0x65, 0xf5, 0xdd, 0x10, 0xa2, 0x98, 0x22, 0xf0, 0x37, 0x81, 0xb1, 0xa8, 0x23, 0xc3, 0x1e, 0x0a, 0x41, 0xda, 0xc5, 0x92, 0x6f, 0x3d, 0x0e, 0x99, 0xf0, 0x37, 0xf0, 0xcc, 0x0f, 0xf2, 0xb4, 0xdd, 0x05, 0xd5, 0xfc, 0x78, 0x1d, 0x0f, 0x03, 0x79, 0x16, 0x74, 0x26, 0x5c, 0xc9, 0x89, 0xa4, 0xf4, 0x0c, 0xda, 0xa2, 0x60, 0xd5, 0x94, 0x72, 0x3c, 0xa3, 0x4f, 0x14, 0x14, 0x19, 0x2c, 0xfd, 0x1e, 0xec, 0x20, 0x18, 0x28, 0x00, 0x8f, 0x0b, 0xcf, 0xce, 0x1d, 0xbb, 0xf2, 0x09, 0xc1, 0x12, 0x66, 0x81, 0x1b, 0x00, 0xeb, 0x47, 0x07, 0xbf, 0x5f, 0x12, 0x72, 0x5c, 0x32, 0xe1, 0x6c, 0x73, 0x1a, 0xe2, 0x7f, 0x3a, 0x08, 0x93, 0x3f, 0xc0, 0x5a, 0x27, 0x23, 0x77, 0x52, 0x2b, 0x93, 0xf1, 0xc7, 0x69, 0x42, 0xe7, 0x1a, 0x0d, 0xbe, 0x7f, 0x6c, 0x06, 0x46, 0xce, 0x0e, 0xaf, 0xdb, 0x9c, 0x39, 0xaf, 0x99, 0x68, 0x00, 0x1e, 0x48, 0xac, 0x82, 0xe9, 0x2f, 0x63, 0x64, 0x77, 0x28, 0xc7, 0x7f, 0x8c, 0xfa, 0x5f, 0xd5, 0x6e, 0xe2, 0x39, 0xca, 0x47, 0x73, 0x75, 0x91, 0xcb, 0xa1, 0x03, 0xe4, 0x1a, 0x18, 0xac, 0xf8, 0xe8, 0xd2, 0x57, 0xb0, 0xdb, 0xe8, 0x85, 0x11, 0x34, 0xa8, 0x1f, 0xf6, 0xb2, 0xe9, 0x71, 0x04, 0xb3, 0x9b, 0x76, 0xe1, 0x9d, 0xa2, 0x56, 0xa1, 0x7c, 0xe5, 0x2d, 0x81, 0xed, 0xa1, 0x0e, 0xd8, 0x3a, 0x04, 0x48, 0x4a, 0xc6, 0xf7, 0xe7, 0x3f, 0xac, 0x3b, 0x7e, 0x93, 0xa3, 0xb7, 0x24, 0x90, 0x25, 0x10, 0xbd, 0x19, 0xd0, 0x7b, 0x7b, 0x27, 0x0c, 0xcf, 0xa4, 0x7a, 0xee, 0xdf, 0x95, 0x88, 0x5c, 0x06, 0x07, 0xba, 0x72, 0x03, 0x91, 0xd7, 0x25, 0x07, 0x6e, 0xc0, 0x26, 0x0d, 0x81, 0x5f, 0x09, 0x6a, 0x96, 0xda, 0xa7, 0xa5, 0xeb, 0x0c, 0xc1, 0x88, 0xef, 0x35, 0xe6, 0x77, 0x49, 0xf0, 0x96, 0x01, 0x1c, 0x66, 0xa7, 0xb5, 0x89, 0xc2, 0xe8, 0x37, 0x76, 0xe5, 0x05, 0x93, 0x8e, 0x5a, 0xaa, 0xd0, 0x89, 0x8c, 0xeb, 0xc9, 0xae, 0x36, 0xe4, 0x38, 0x96, 0x1c, 0x9c, 0x14, 0x32, 0xf9, 0x30, 0x1d, 0x10, 0xb8, 0x2d, 0xb5, 0xd9, 0xe6, 0x3d, 0xf1, 0x1f, 0x68, 0x06, 0xf0, 0x55, 0x69, 0x4f, 0x6b, 0x1f, 0x97, 0x64, 0x8e, 0xcd, 0x8f, 0xbc, 0x06, 0x21, 0x95, 0xda, 0x5c, 0x59, 0x89, 0x71, 0x81, 0x69, 0x16, 0xcb, 0xaa, 0x89, 0x2d, 0x6b, 0x5d, 0xef, 0xb2, 0xf2, 0xcc, 0xde, 0x75, 0x3f, 0x63, 0xdf, 0x63, 0xda, 0x9d, 0x4f, 0xfe, 0x93, 0x1b, 0x19, 0x0a, 0x66, 0xf7, 0xc5, 0x89, 0xa2, 0x56, 0xb2, 0xea, 0x4b, 0x3c, 0x9f, 0x7e, 0xbc, 0xa5, 0x70, 0x2b, 0x90, 0xd1, 0x2f, 0x64, 0xc3, 0xdf, 0x52, 0x58, 0x15, 0x9d, 0x3c, 0x6a, 0xaf, 0x9f, 0x06, 0xe2, 0x09, 0x8e, 0x7e, 0xe2, 0x0b, 0xc3, 0x70, 0x9b, 0x73, 0x14, 0x25, 0xc0, 0x76, 0xee, 0x2a, 0x3b, 0xaa, 0xa5, 0x52, 0x20, 0x23, 0x07, 0xfe, 0xdf, 0xdc, 0x37, 0x9c, 0xbd, 0x59, 0xb9, 0x6e, 0x85, 0x8b, 0xc9, 0x8d, 0x7a, 0xf4, 0xf1, 0x2d, 0x91, 0x0c, 0xda, 0x22, 0xdd, 0xe2, 0x63, 0xa4, 0x4b, 0x06, 0xf0, 0x4f, 0x8f, 0xa7, 0x04, 0x6d, 0x5e, 0xf9, 0x13, 0x78, 0xde, 0xd9, 0x91, 0xdb, 0x5b, 0xb4, 0x4f, 0xf9, 0x3b, 0xa5, 0x07, 0x70, 0x34, 0xdd, 0x36, 0x9f, 0xbc, 0x48, 0x29, 0x66, 0xc1, 0x6e, 0x5b, 0x2c, 0x9b, 0x97, 0xfe, 0x27, 0x3f, 0x32, 0xd8, 0xd7, 0xb5, 0x77, 0x50, 0xd4, 0xcc, 0x4c, 0xc9, 0xca, 0x0c, 0x65, 0x2e, 0xc2, 0xec, 0xb0, 0xce, 0xa3, 0x45, 0xf0, 0x6b, 0xf8, 0x07, 0xa7, 0x8d, 0xf3, 0x2b, 0x3a, 0x1c, 0xb2, 0xe8, 0x50, 0x2e, 0xc2, 0x2a, 0x7b, 0x1e, 0xe2, 0x40, 0x1a, 0xde, 0x09, 0xd4, 0x7e, 0x8e, 0xaa, 0x21, 0x4b, 0x4d, 0x36, 0x60, 0x21, 0x4f, 0xe3, 0x83, 0x7c, 0x2f, 0xac, 0x26, 0xd9, 0x87, 0x98, 0xc3, 0x1b, 0xbf, 0x40, 0x25, 0x2c, 0x22, 0x8b, 0x1f, 0xe7, 0x37, 0xbd, 0x7d, 0x36, 0x4e, 0xb0, 0x3b, 0x77, 0x59, 0x60, 0xf5, 0x25, 0xfd, 0xae, 0x9f, 0xb4, 0xe9, 0x5d, 0x76, 0xbc, 0x67, 0x61, 0x36, 0x5a, 0x30, 0x59, 0x8e, 0xd4, 0x85, 0x5a, 0xd1, 0x7b, 0x7b, 0xee, 0xee, 0xd6, 0x97, 0x5c, 0xa2, 0xfc, 0x9a, 0x2a, 0xec, 0x42, 0x9e, 0xe1, 0xc2, 0x16, 0x62, 0x10, 0x02, 0x2b, 0xe3, 0x93, 0xab, 0xd7, 0x2c, 0x15, 0x4d, 0xb9, 0x6e, 0xd4, 0xbe, 0x9e, 0x53, 0xa4, 0x0f, 0xa5, 0x90, 0x37, 0xbe, 0xa2, 0xba, 0x9b, 0x2d, 0xc1, 0x5a, 0x04, 0x53, 0x6c, 0x43, 0xcc, 0xb2, 0x6e, 0x23, 0xb8, 0x89, 0x58, 0x59, 0x7d, 0x4a, 0x23, 0x06, 0x83, 0x4e, 0x18, 0x67, 0xe8, 0xc8, 0xed, 0x62, 0xc8, 0xf8, 0x31, 0x5e, 0xbc, 0xa1, 0xea, 0x58, 0xa0, 0xbc, 0x7c, 0x33, 0x9a, 0x6e, 0xcc, 0x50, 0x57, 0x38, 0xa6, 0x5f, 0x98, 0x6e, 0x5c, 0x75, 0xee, 0xea, 0xb0, 0x5e, 0xc1, 0x01, 0xf4, 0x34, 0x97, 0xb6, 0x70, 0x30, 0x93, 0x2e, 0x04, 0xc1, 0x3c, 0x64, 0x0f, 0xdb, 0x81, 0x1e, 0x8f, 0x92, 0xf9, 0x20, 0x89, 0xe7, 0x6f, 0x9f, 0xab, 0xe2, 0x9d, 0xf8, 0x30, 0xe1, 0x38, 0xa2, 0x04, 0x2f, 0x2d, 0x61, 0x28, 0xd8, 0x2b, 0xbd, 0x59, 0xbc, 0x61, 0xb3, 0xec, 0xe3, 0x89, 0xaa, 0xfd, 0x10, 0x25, 0xa9, 0xc8, 0x99, 0x08, 0xc6, 0x57, 0x75, 0x19, 0xe2, 0x5e, 0x97, 0x54, 0x93, 0x63, 0x7a, 0x11, 0x62, 0x21, 0xfe, 0x89, 0x37, 0x2f, 0x72, 0x96, 0x11, 0xdd, 0xf2, 0xba, 0xfa, 0x5f, 0xf3, 0x63, 0x3b, 0x2d, 0x1c, 0x6d, 0xcc, 0xa9, 0x58, 0xe9, 0x0e, 0x02, 0x29, 0x1d, 0xbc, 0x59, 0x3f, 0xcb, 0x1f, 0x23, 0x49, 0xb7, 0x82, 0xcf, 0x0b, 0x63, 0xe6, 0xa8, 0xb0, 0x1d, 0xf7, 0xfc, 0x62, 0x3b, 0x3e, 0x7e, 0x19, 0xa6, 0x97, 0xe9, 0xb0, 0x95, 0xe6, 0xe6, 0x3e, 0x9b, 0x06, 0x30, 0xa3, 0xe4, 0x02, 0xf6, 0x61, 0xbc, 0x88, 0x81, 0xae, 0x50, 0x9a, 0x16, 0xc7, 0xb9, 0x87, 0x1e, 0x86, 0x36, 0x1a, 0x84, 0x37, 0xb9, 0x11, 0x5f, 0xa8, 0xa6, 0xd0, 0xd1, 0x7f, 0xd7, 0x57, 0x2e, 0xd0, 0xe3, 0x72, 0x61, 0xef, 0xa0, 0x2f, 0x8c, 0x83, 0xe6, 0x95, 0xef, 0xdc, 0x96, 0x93, 0x0b, 0x87, 0xdb, 0x37, 0x07, 0x1f, 0xb0, 0x21, 0x52, 0x65, 0xa3, 0x36, 0x8a, 0x93, 0xd8, 0x99, 0x9d, 0xee, 0x50, 0xd7, 0x2e, 0x9b, 0x6b, 0x61, 0x3a, 0xb3, 0xac, 0x40, 0xfb, 0x9a, 0xbd, 0x04, 0x0c, 0x8c, 0xb3, 0xfd, 0xcf, 0x78, 0x92, 0xae, 0x0c, 0x12, 0x14, 0x7f, 0xda, 0x24, 0xa6, 0xb2, 0xc3, 0x24, 0xb4, 0x98, 0x23, 0x0c, 0x26, 0x05, 0xd1, 0x66, 0x2b, 0x01, 0x01, 0xa6, 0x35, 0xc0, 0x69, 0xbd, 0x45, 0xd5, 0xa3, 0xeb, 0x68, 0xa2, 0xd3, 0xd5, 0x81, 0x13, 0x89, 0xd7, 0x4a, 0x8c, 0xe9, 0x9b, 0x96, 0x1f, 0x09, 0xeb, 0xd9, 0x03, 0x9a, 0xc3, 0xe9, 0x41, 0xcb, 0xab, 0x06, 0xb1, 0x6a, 0x43, 0x19, 0x25, 0x4c, 0x20, 0x39, 0xe4, 0xf0, 0xd6, 0x73, 0x5a, 0x5f, 0x56, 0xcb, 0x0d, 0x56, 0x7b, 0x7e, 0xd3, 0xa7, 0xdf, 0x8a, 0x43, 0xdd, 0xf3, 0x70, 0x69, 0x1f, 0x4f, 0x39, 0xbe, 0x57, 0x46, 0xb7, 0x56, 0x93, 0xbe, 0x0d, 0x5c, 0xab, 0x3e, 0x72, 0xbc, 0x24, 0x49, 0x31, 0x1f, 0x54, 0xeb, 0xf4, 0x1c, 0xc7, 0x91, 0x43, 0xac, 0xe2, 0x1e, 0x48, 0xdf, 0xc6, 0x3a, 0xd5, 0xce, 0x77, 0xed, 0xa8, 0xd1, 0x3e, 0x6e, 0xed, 0xf2, 0x4b, 0x35, 0x04, 0xa1, 0x9f, 0x57, 0x85, 0xa9, 0x29, 0x13, 0x81, 0x62, 0x2f, 0xa8, 0x0b, 0x28, 0xf0, 0x6a, 0xf7, 0x0d, 0x88, 0x15, 0xe2, 0xcb, 0x13, 0x61, 0x73, 0xfd, 0x15, 0xd7, 0xdf, 0x8e, 0x1a, 0xe2, 0xb3, 0x71, 0x99, 0x29, 0xce, 0x92, 0x1e, 0x1c, 0xac, 0x0d, 0xa8, 0xcd, 0xeb, 0x9f, 0x50, 0x02, 0x07, 0x59, 0x2c, 0x88, 0x69, 0x9c, 0x73, 0xca, 0xa0, 0x41, 0xe2, 0xa2, 0xee, 0x18, 0x5e, 0x6e, 0x06, 0x94, 0xda, 0x67, 0x14, 0xc4, 0x7b, 0x2e, 0xfe, 0x85, 0xfa, 0xa8, 0xe9, 0xf7, 0x4b, 0x0c, 0x00, 0x2d, 0x7c, 0x3a, 0x70, 0x29, 0xdf, 0x4f, 0xb7, 0x07, 0x6b, 0x76, 0x1f, 0x78, 0x60, 0x01, 0x85, 0x72, 0x2a, 0xb8, 0x5f, 0x26, 0x88, 0x70, 0xfe, 0x33, 0xed, 0xe0, 0x10, 0x19, 0x27, 0xb1, 0x68, 0xf0, 0x3e, 0xd4, 0x02, 0x5a, 0x9f, 0x18, 0x41, 0xb6, 0x79, 0xfc, 0x7c, 0x96, 0x68, 0xc1, 0xb9, 0x73, 0x51, 0xc4, 0xb8, 0xa0, 0x8d, 0x0b, 0x34, 0x7d, 0x49, 0x1e, 0x65, 0xed, 0x2c, 0x18, 0xc9, 0x0a, 0x3b, 0xfd, 0x24, 0x17, 0xfa, 0x4e, 0xc6, 0xb5, 0xd4, 0xdb, 0x0c, 0x5a, 0xbd, 0xd9, 0x29, 0x00, 0x16, 0x34, 0x26, 0x1a, 0xd1, 0x27, 0x28, 0xcc, 0xd5, 0x09, 0xf2, 0x5b, 0xa4, 0x6a, 0xaa, 0xe3, 0x3b, 0x5e, 0xe0, 0x48, 0x3a, 0x19, 0xcc, 0x6e, 0x44, 0xbc, 0xd7, 0xad, 0xa9, 0x6f, 0x5e, 0x7f, 0x42, 0xb0, 0xb2, 0x7c, 0x9d, 0xea, 0x63, 0x89, 0x5a, 0x4a, 0xbe, 0x4c, 0xd5, 0xce, 0x94, 0xe3, 0x06, 0x9f, 0x3d, 0xd5, 0xa5, 0xa0, 0xdd, 0x48, 0x91, 0x47, 0xe6, 0x75, 0x72, 0xac, 0xde, 0x5a, 0x9d, 0xdf, 0x63, 0xae, 0x39, 0x7f, 0x6c, 0x1a, 0xa0, 0x88, 0xd1, 0xa6, 0x08, 0x6d, 0x0e, 0x72, 0x63, 0x67, 0x44, 0xa6, 0x84, 0x0c, 0x80, 0xab, 0x82, 0x23, 0x40, 0x9c, 0x61, 0xb7, 0x33, 0xf7, 0xef, 0x6a, 0x41, 0x99, 0xed, 0x0c, 0xcb, 0xe9, 0x6f, 0x6c, 0x34, 0x53, 0x86, 0x6e, 0xa0, 0xf8, 0x1b, 0x5e, 0xfb, 0xa3, 0x1e, 0x84, 0x3e, 0xff, 0xe1, 0xf9, 0xed, 0x08, 0xbe, 0xb9, 0xe4, 0xc0, 0x00, 0xf8, 0x54, 0x23, 0x01, 0xba, 0x09, 0x5c, 0x8f, 0x9e, 0xee, 0x39, 0x94, 0xfa, 0xd2, 0xdd, 0xf6, 0x2d, 0x6c, 0xb5, 0xbd, 0x31, 0x9d, 0xad, 0x74, 0x70, 0xf6, 0xa3, 0xd1, 0xd9, 0x7a, 0x1b, 0x98, 0x32, 0xa5, 0x35, 0xbc, 0xb0, 0xad, 0xdd, 0xc7, 0xc5, 0x07, 0x42, 0x7d, 0x39, 0x2d, 0x89, 0xbc, 0x7c, 0x9f, 0xc2, 0xa7, 0x3b, 0x27, 0x1b, 0x04, 0x31, 0x62, 0x53, 0xe1, 0x40, 0x7c, 0x72, 0x7e, 0xc0, 0x3b, 0xb8, 0x67, 0x17, 0x3f, 0xd3, 0xe1, 0x89, 0x88, 0x55, 0x87, 0x52, 0x38, 0x64, 0x35, 0xf2, 0x9a, 0xb3, 0x25, 0xc9, 0x64, 0xb2, 0x58, 0xe3, 0x39, 0x02, 0x38, 0x15, 0x72, 0x2c, 0x7b, 0x49, 0x1e, 0x92, 0x4a, 0x16, 0x47, 0xa6, 0xa3, 0x94, 0x78, 0x59, 0xfc, 0x6e, 0x7b, 0xd7, 0x29, 0x38, 0x67, 0x71, 0x7f, 0x03, 0xdb, 0xda, 0x3a, 0x2f, 0x84, 0x97, 0x1c, 0x81, 0xe5, 0xb1, 0x57, 0x75, 0x57, 0xad, 0xad, 0xd6, 0x4e, 0xbd, 0xd6, 0x8b, 0xdf, 0x38, 0x22, 0xb4, 0x7f, 0x48, 0x5f, 0xf6, 0x0e, 0xe3, 0xfd, 0x12, 0x14, 0xfc, 0x70, 0xbd, 0x4a, 0xfa, 0xd6, 0xac, 0x5c, 0x69, 0xda, 0xee, 0xed, 0xef, 0xd8, 0x7e, 0xdb, 0x82, 0x42, 0x19, 0xc5, 0xd9, 0x42, 0x4d, 0xcb, 0x20, 0xa0, 0xd3, 0x95, 0xf0, 0xe7, 0x1e, 0x97, 0x7e, 0xc3, 0x34, 0x93, 0x13, 0xae, 0xbd, 0x5f, 0xbc, 0xcb, 0x59, 0xe8, 0x42, 0x12, 0x37, 0x77, 0x5c, 0xae, 0xe4, 0x33, 0x24, 0xa3, 0x60, 0xe8, 0xc8, 0xb4, 0x77, 0x06, 0x82, 0x84, 0x4e, 0xed, 0xca, 0xfb, 0x3d, 0x67, 0xca, 0xeb, 0xdc, 0x76, 0x12, 0xf4, 0x61, 0x51, 0x8d, 0xa5, 0x29, 0xa9, 0xb3, 0xe3, 0x94, 0x30, 0x01, 0x8f, 0x16, 0x5c, 0xa6, 0x63, 0x8b, 0x68, 0x80, 0x1d, 0xcb, 0x9d, 0x46, 0xe0, 0x7f, 0xcf, 0x07, 0xd7, 0x33, 0x2a, 0xd3, 0x1b, 0xac, 0x2f, 0xb8, 0xd7, 0x7b, 0xf9, 0xf0, 0xaa, 0xd2, 0xc5, 0x58, 0x4c, 0x97, 0xb1, 0x24, 0x75, 0xb7, 0xc4, 0xd1, 0xfa, 0xbd, 0x2f, 0x5c, 0x39, 0xa3, 0xd2, 0xb2, 0xb8, 0xe7, 0x02, 0x67, 0x09, 0xe2, 0x8a, 0xaa, 0xf1, 0x56, 0xef, 0x79, 0xc9, 0x46, 0xf9, 0x11, 0x23, 0x0a, 0x6e, 0xa9, 0xb1, 0xa2, 0x21, 0x5f, 0x63, 0x4b, 0x2b, 0x73, 0xd0, 0x50, 0x79, 0xb3, 0xd7, 0x23, 0x87, 0x36, 0x86, 0xac, 0x6a, 0x4d, 0x3a, 0xe1, 0x14, 0xb7, 0x08, 0x97, 0xd4, 0x14, 0x5c, 0x97, 0x1c, 0x9c, 0xe0, 0xf5, 0x87, 0x11, 0xa0, 0x9d, 0x1a, 0xf2, 0x6b, 0x2f, 0xcb, 0xf2, 0x7c, 0x0d, 0x3f, 0xa9, 0x5a, 0xb2, 0xd8, 0x88, 0xfc, 0x45, 0xef, 0x12, 0x31, 0x6d, 0x5e, 0x49, 0x3f, 0x68, 0x42, 0x67, 0xca, 0x57, 0xff, 0xcf, 0xf8, 0xdc, 0x84, 0x43, 0xd3, 0xe7, 0xd0, 0x57, 0xef, 0xcd, 0xb4, 0x26, 0x4c, 0x9b, 0xdb, 0x43, 0x7d, 0xa9, 0x09, 0xf3, 0x0a, 0x72, 0xa0, 0x99, 0x14, 0xa2, 0x68, 0x71, 0x37, 0x71, 0x8f, 0x81, 0xb5, 0x30, 0xef, 0xcd, 0xd0, 0x21, 0x90, 0xcb, 0x77, 0x8c, 0x6e, 0x16, 0x25, 0x0f, 0x7c, 0x66, 0x07, 0x36, 0xe8, 0xc0, 0x5d, 0x4c, 0xa1, 0xea, 0x22, 0x70, 0x17, 0x22, 0xef, 0xeb, 0x42, 0x0f, 0x1d, 0xc0, 0xe5, 0xf8, 0x2a, 0x85, 0x14, 0x34, 0x5d, 0x72, 0xf4, 0xe2, 0xad, 0xb8, 0xc2, 0xda, 0xe0, 0x13, 0x16, 0xe3, 0xf0, 0xa3, 0x69, 0x26, 0xb2, 0xf8, 0xd5, 0xe2, 0xb9, 0x6c, 0x1d, 0x62, 0x79, 0xb5, 0xed, 0x2c, 0xa8, 0xba, 0x63, 0x7c, 0xea, 0xa6, 0xcd, 0xf0, 0xac, 0x3b, 0xb5, 0x85, 0x50, 0x6a, 0x1b, 0xc2, 0x8b, 0x20, 0x01, 0x33, 0x0c, 0x62, 0x2d, 0x19, 0x5f, 0x9c, 0x2a, 0x60, 0x10, 0x36, 0x90, 0xd1, 0x13, 0x69, 0x85, 0x89, 0x63, 0x51, 0x84, 0xaa, 0xea, 0x43, 0x5d, 0x50, 0xa1, 0x60, 0x7d, 0xc7, 0xf8, 0x6a, 0x70, 0xfb, 0x78, 0xd7, 0xa4, 0x2f, 0xa7, 0x24, 0x70, 0xf2, 0x2c, 0x6c, 0x54, 0x4f, 0x33, 0x39, 0x83, 0x45, 0x13, 0x9a, 0x9e, 0x77, 0x2e, 0x76, 0xc3, 0x23, 0x19, 0x1f, 0xc6, 0x58, 0xfe, 0x2a, 0xbe, 0x64, 0x3e, 0x7f, 0xc4, 0x8c, 0x5a, 0xac, 0xf7, 0x01, 0x13, 0x7f, 0xc4, 0x0f, 0xd0, 0xd3, 0x64, 0x96, 0x41, 0xaa, 0xa5, 0xbe, 0x42, 0x7c, 0xee, 0xe7, 0x02, 0xcf, 0x7d, 0xdf, 0x64, 0x08, 0xf4, 0x58, 0xa5, 0x81, 0x14, 0x99, 0x40, 0xdb, 0xc8, 0x73, 0x0e, 0x96, 0x65, 0x77, 0xb2, 0xde, 0x30, 0x66, 0x34, 0xa8, 0x21, 0xe9, 0xec, 0xfe, 0xe6, 0x82, 0xa2, 0x97, 0x2b, 0xc3, 0xf3, 0xab, 0x19, 0xbe, 0xf6, 0x05, 0x1c, 0xbc, 0x20, 0x5a, 0xea, 0x32, 0x65, 0xd9, 0xc1, 0xf0, 0xa0, 0x03, 0xef, 0x9c, 0x35, 0xbd, 0x98, 0x5f, 0xf5, 0xa4, 0xb4, 0xde, 0x42, 0xa0, 0x57, 0x6c, 0x73, 0xbc, 0x35, 0x7d, 0x7a, 0x35, 0x65, 0x5e, 0xc3, 0xd0, 0x65, 0x24, 0x60, 0x71, 0x5f, 0xe3, 0x64, 0xea, 0xaa, 0x20, 0x8c, 0x11, 0x94, 0x88, 0x25, 0x15, 0x5f, 0xe2, 0x29, 0x12, 0x89, 0x42, 0xac, 0xe2, 0x51, 0x7f, 0x76, 0x37, 0x76, 0xe8, 0xf2, 0xe6, 0x42, 0x33, 0x47, 0x86, 0xc7, 0xb6, 0xc4, 0x3a, 0x69, 0xda, 0x81, 0xcb, 0x9c, 0xcc, 0x43, 0xfa, 0xef, 0x75, 0xa1, 0x14, 0x4a, 0xad, 0x65, 0xc6, 0x73, 0xab, 0x35, 0x33, 0xd7, 0xc0, 0x73, 0x44, 0x88, 0x46, 0x61, 0x3f, 0x82, 0xd3, 0x89, 0x9c, 0x32, 0xb2, 0x5c, 0x14, 0x39, 0x93, 0x19, 0xfa, 0x6d, 0x81, 0xf0, 0xce, 0x20, 0x15, 0x68, 0x10, 0xa6, 0xe9, 0xfe, 0x52, 0x11, 0x50, 0x0e, 0x91, 0x3f, 0x44, 0xf7, 0xc5, 0x17, 0xa0, 0x7b, 0xb7, 0x0f, 0x90, 0x64, 0x13, 0xf1, 0x45, 0x6d, 0xbe, 0xe0, 0xed, 0x5f, 0x69, 0x96, 0xe2, 0x7b, 0x67, 0xef, 0x21, 0x18, 0xbb, 0xab, 0xff, 0x8d, 0x76, 0x6f, 0x17, 0x51, 0x40, 0x0e, 0x87, 0x61, 0x34, 0x07, 0x5c, 0xe2, 0xf1, 0x4f, 0x4a, 0x08, 0xed, 0x50, 0xa1, 0x36, 0x0d, 0x31, 0x7c, 0x67, 0x73, 0x58, 0x3b, 0xcc, 0x98, 0x2d, 0x34, 0xb6, 0x9a, 0x21, 0xa6, 0xb7, 0xd7, 0xf0, 0xee, 0x04, 0xba, 0x22, 0xfe, 0x1e, 0xd5, 0xd8, 0x0a, 0xb2, 0x30, 0xc5, 0x84, 0xbd, 0xe1, 0x7b, 0x4b, 0xf3, 0xdd, 0xe8, 0x20, 0x62, 0x0e, 0x20, 0x59, 0x53, 0xa6, 0x5d, 0xd9, 0x71, 0xb2, 0x43, 0x3f, 0x2d, 0xf2, 0x69, 0x5e, 0x60, 0xe8, 0x16, 0xee, 0x32, 0x2f, 0x48, 0x80, 0x3c, 0x0e, 0xfb, 0xb8, 0xe9, 0x4d, 0xa7, 0xb6, 0x22, 0x47, 0x0b, 0xd5, 0x2a, 0x41, 0x29, 0x98, 0xc6, 0xfa, 0x92, 0xe1, 0xa2, 0x83, 0xe3, 0x64, 0xf0, 0x51, 0x90, 0x5c, 0x52, 0x91, 0xe0, 0x7c, 0xfa, 0xbb, 0x39, 0x29, 0x0f, 0x6a, 0x9e, 0xe6, 0x53, 0x6b, 0x76, 0x10, 0x04, 0x14, 0x8f, 0xcb, 0x00, 0xd7, 0x62, 0x3c, 0x2c, 0x17, 0x99, 0xf9, 0x15, 0x39, 0xce, 0xbd, 0xd8, 0xff, 0x96, 0x61, 0x40, 0x11, 0xbe, 0x07, 0x2f, 0xdd, 0xd4, 0x99, 0x3f, 0xa1, 0xe9, 0x72, 0xa8, 0xc6, 0x96, 0x5a, 0x65, 0x70, 0x3d, 0xb8, 0x92, 0x53, 0x91, 0x03, 0x19, 0xc8, 0x59, 0x7a, 0x8d, 0x20, 0x71, 0x15, 0x56, 0x38, 0x11, 0xbb, 0x0f, 0x4d, 0x51, 0xb5, 0x2c, 0x12, 0xed, 0x63, 0xe0, 0x00, 0x46, 0x2d, 0x3e, 0xee, 0xaa, 0xbd, 0x9e, 0xe1, 0xd5, 0x6b, 0x42, 0x25, 0xb8, 0xf9, 0x39, 0x9d, 0x79, 0x81, 0x84, 0x57, 0xba, 0xab, 0x78, 0x63, 0x1e, 0x23, 0x63, 0xe6, 0x09, 0x4b, 0x72, 0x6a, 0xa8, 0x2d, 0xd2, 0x78, 0x32, 0xb3, 0x16, 0x69, 0x6d, 0x1a, 0xd9, 0x79, 0x73, 0xa4, 0xa4, 0x1d, 0xb6, 0x8d, 0x12, 0x97, 0x42, 0x41, 0x31, 0xc7, 0x42, 0xcc, 0x2c, 0x44, 0xc6, 0x92, 0x27, 0xab, 0xc3, 0x40, 0x6b, 0x37, 0x5b, 0x02, 0xc3, 0x92, 0x5f, 0xf7, 0x25, 0xeb, 0x13, 0xe2, 0x95, 0x49, 0x31, 0x22, 0x47, 0x1f, 0x30, 0xe4, 0x04, 0x20, 0xc5, 0x97, 0xce, 0x54, 0xab, 0xa0, 0xc7, 0x6c, 0xa0, 0x4f, 0x4f, 0x53, 0xb0, 0x12, 0x6d, 0x05, 0xb5, 0xe9, 0x70, 0xa4, 0x1f, 0x1a, 0xd6, 0xc9, 0xf1, 0x26, 0x6c, 0x18, 0x0c, 0xfb, 0xb7, 0x17, 0xb0, 0x6b, 0x93, 0x40, 0x40 ],
- const [ 0x92, 0x98, 0x35, 0x01, 0xa4, 0xd7, 0x58, 0x3a, 0x52, 0x01, 0x83, 0x02, 0x66, 0xc3, 0x7c, 0x90, 0x86, 0x40, 0xb0, 0x35, 0x14, 0x61, 0x31, 0x4b, 0x52, 0x6c, 0xfb, 0x68, 0xca, 0xd9, 0x7b, 0xd7, 0xed, 0x61, 0x52, 0x48, 0xfa, 0x57, 0x56, 0xc6, 0x21, 0x3b, 0xd9, 0xea, 0xe9, 0x8d, 0x2f, 0x4e, 0xcf, 0xdf, 0x6a, 0x45, 0x2f, 0x2e, 0x68, 0xc9, 0x68, 0x72, 0x10, 0xb5, 0x3c, 0x74, 0xd8, 0x35, 0x75, 0xe0, 0x8a, 0x7a, 0xce, 0x9b, 0x49, 0xb2, 0x10, 0x56, 0xcf, 0x37, 0x7c, 0x64, 0xf8, 0x06, 0x69, 0xc8, 0x84, 0x74, 0x2e, 0x93, 0x18, 0x1c, 0x42, 0x6d, 0x87, 0x1c, 0xa2, 0x71, 0x50, 0x81, 0x73, 0x3e, 0x68, 0xff, 0xe9, 0x4a, 0x39, 0xe6, 0x67, 0x7a, 0xea, 0x51, 0xe8, 0xf0, 0xe1, 0xa0, 0x9d, 0x25, 0x86, 0x29, 0xd7, 0x37, 0x4a, 0x2b, 0x28, 0x84, 0xe9, 0x03, 0xc5, 0x77, 0xeb, 0xa3, 0x2f, 0xa2, 0x71, 0x3f, 0x13, 0x0d, 0x2e, 0x49, 0x6e, 0xce, 0xb4, 0xa0, 0xf4, 0xda, 0xf1, 0x05, 0xb3, 0x1b, 0xf9, 0xce, 0xf4, 0xc3, 0x06, 0xde, 0x62, 0xdf, 0xbc, 0xd4, 0x6e, 0x2f, 0xb2, 0x83, 0xf1, 0x35, 0x2f, 0xa3, 0x13, 0x8c, 0x31, 0xc5, 0x6d, 0x7b, 0xb4, 0x8d, 0x6a, 0xca, 0x30, 0x1b, 0xf3, 0xd4, 0x64, 0xca, 0x4b, 0xde, 0x52, 0x1d, 0x37, 0xa7, 0x8b, 0xf6, 0x63, 0x40, 0xac, 0x09, 0x01, 0x1e, 0x29, 0x91, 0xb3, 0x6e, 0x49, 0x41, 0xab, 0xa8, 0x72, 0x7e, 0x10, 0x67, 0xa7, 0xcb, 0xa4, 0x78, 0x4f, 0x85, 0xa5, 0x31, 0x38, 0xd0, 0xf1, 0x04, 0xdb, 0xd1, 0x6d, 0x54, 0xe2, 0x1e, 0xa6, 0x86, 0xe7, 0x72, 0xb9, 0x5c, 0x7f, 0xa6, 0x71, 0x7e, 0x77, 0xdc, 0xb0, 0x5a, 0x5d, 0xfe, 0x10, 0x2e, 0x42, 0x67, 0xc9, 0x63, 0xbf, 0xdf, 0xd6, 0x1d, 0x36, 0xcd, 0x53, 0x10, 0x5a, 0xa8, 0x2a, 0x95, 0xf2, 0xaf, 0xee, 0xfd, 0xda, 0xda, 0x07, 0x25, 0x4a, 0x10, 0x10, 0x4a, 0x5a, 0x9a, 0x7d, 0x1f, 0xc6, 0xd8, 0x81, 0x1d, 0xef, 0x32, 0x2f, 0x1b, 0x23, 0x52, 0xdf, 0x1e, 0x1e, 0x90, 0xd3, 0x72, 0xd1, 0xae, 0x1a, 0xfa, 0x62, 0xc6, 0xb5, 0xc4, 0x73, 0x80, 0xf9, 0xe0, 0xa7, 0x88, 0x34, 0x73, 0x62, 0x40, 0x93, 0x07, 0xd1, 0xb2, 0x43, 0x25, 0x2b, 0xc8, 0xd7, 0x26, 0x36, 0xbf, 0xea, 0x46, 0x0c, 0xd9, 0x05, 0xfa, 0x1f, 0x52, 0xc3, 0x84, 0x7b, 0x96, 0x32, 0xc4, 0x4b, 0xb1, 0x7d, 0x51, 0x9f, 0x07, 0xc8, 0xc8, 0x6c, 0x45, 0x5c, 0x64, 0xd4, 0x97, 0x04, 0xcf, 0xa8, 0x1c, 0xb6, 0x38, 0x2c, 0x97, 0x76, 0xa6, 0x1a, 0x67, 0x78, 0x8c, 0xe9, 0xb9, 0x85, 0x9d, 0x4e, 0xfc, 0x9f, 0xe1, 0x04, 0x95, 0xe8, 0x09, 0xc9, 0xd4, 0xc0, 0x00, 0xa9, 0x27, 0x2e, 0xc2, 0x7e, 0x8e, 0x81, 0x71, 0xb8, 0x4f, 0x37, 0xa6, 0x5a, 0xeb, 0x1d, 0x05, 0x45, 0x50, 0xb8, 0x14, 0xb9, 0x50, 0xe4, 0x4d, 0x19, 0x52, 0xbb, 0x71, 0xee, 0x48, 0xb8, 0x20, 0x2f, 0xe1, 0x1c, 0xa7, 0xc0, 0xff, 0x91, 0x19, 0x38, 0x6b, 0x0e, 0xa1, 0xe7, 0xc8, 0xfa, 0x16, 0x18, 0xc5, 0x94, 0xd0, 0x93, 0x97, 0x92, 0xba, 0x66, 0xa7, 0x08, 0xa9, 0xe5, 0x87, 0x8c, 0xec, 0xf0, 0x2b, 0x98, 0x25, 0x74, 0x56, 0x30, 0x57, 0x34, 0x52, 0xc4, 0x3f, 0xca, 0xe4, 0x57, 0xe8, 0xe8, 0x7f, 0xe1, 0x7a, 0xe4, 0xb8, 0xf2, 0x52, 0x74, 0xfa, 0x99, 0x58, 0xb6, 0x7b, 0x84, 0x8d, 0x73, 0x6e, 0x68, 0xe4, 0xa4, 0x7b, 0xa4, 0x53, 0x35, 0x6c, 0x21, 0x29, 0x0a, 0x29, 0x7c, 0xa2, 0x40, 0xe6, 0x67, 0xb9, 0xb5, 0x9b, 0x4c, 0x3d, 0xca, 0xb4, 0x34, 0x27, 0x67, 0x0a, 0xe8, 0x2b, 0x40, 0x13, 0x55, 0x8d, 0x57, 0x55, 0x35, 0x36, 0xc2, 0x21, 0xec, 0x07, 0xaf, 0x7d, 0xb0, 0x6d, 0xa5, 0x62, 0xed, 0x36, 0x0d, 0x28, 0xe8, 0xa3, 0xf0, 0x3e, 0xa2, 0xbe, 0x02, 0x1e, 0xff, 0xed, 0xe0, 0x80, 0x27, 0xc8, 0x96, 0xce, 0x2d, 0x28, 0x64, 0xd9, 0xef, 0x80, 0xc2, 0xca, 0x3d, 0x71, 0xa1, 0x5b, 0x3d, 0x98, 0xf4, 0x47, 0x0d, 0xab, 0x6f, 0xfe, 0xab, 0xc4, 0x8e, 0x9e, 0x12, 0xfc, 0xda, 0x1f, 0xa6, 0x3c, 0x68, 0xcd, 0xd2, 0x50, 0xa2, 0xfc, 0xf0, 0x3d, 0x49, 0xf7, 0x69, 0xd5, 0xbb, 0x39, 0x1d, 0x88, 0x72, 0xe0, 0x05, 0x7d, 0xce, 0x5e, 0x16, 0xe2, 0x14, 0x72, 0x69, 0x80, 0xb6, 0x57, 0x9a, 0x92, 0xd5, 0x3b, 0x6e, 0xd7, 0x04, 0xf2, 0xb8, 0xe6, 0x4f, 0xec, 0x7d, 0xc2, 0x7c, 0x64, 0x56, 0xae, 0x90, 0xdb, 0x16, 0x42, 0x95, 0xc5, 0xad, 0xbf, 0x9b, 0x82, 0x4c, 0xa0, 0xfd, 0x8f, 0xca, 0x71, 0xe5, 0xfe, 0x47, 0xe4, 0x12, 0x23, 0x0f, 0x22, 0xd9, 0x91, 0xc0, 0x5f, 0x6a, 0x45, 0xb0, 0xb1, 0x55, 0x20, 0x89, 0x22, 0x4d, 0x9b, 0x36, 0x04, 0x2b, 0xb6, 0x03, 0x84, 0x36, 0x31, 0xff, 0x82, 0xa1, 0xff, 0xa5, 0xa0, 0x55, 0xf8, 0xbc, 0x99, 0xf1, 0xce, 0x7c, 0xd5, 0x0f, 0x42, 0xf2, 0x3a, 0xca, 0x97, 0xa6, 0x44, 0x7d, 0x47, 0x7a, 0x58, 0xcc, 0xf6, 0xd5, 0x55, 0xe9, 0xa4, 0x01, 0x6d, 0x10, 0x26, 0xd2, 0x33, 0x54, 0xd7, 0x89, 0xf4, 0x9e, 0x8b, 0xf7, 0x4b, 0xf3, 0xc4, 0xe6, 0xf0, 0xf5, 0x29, 0xb4, 0xd1, 0xad, 0x33, 0x41, 0x64, 0x87, 0x2a, 0x0c, 0x3b, 0x9e, 0x50, 0x98, 0xd9, 0x3a, 0x5c, 0x15, 0xc4, 0x97, 0x29, 0x3c, 0xdb, 0xe9, 0xb0, 0x7b, 0xea, 0x9c, 0x34, 0x52, 0x7c, 0xe0, 0xbc, 0xfd, 0xf0, 0x65, 0xc6, 0x53, 0xcf, 0x63, 0x3a, 0xee, 0x5d, 0xde, 0x9d, 0x8c, 0x6e, 0x28, 0x87, 0xb5, 0x7b, 0xa7, 0x57, 0x9e, 0xf5, 0xd8, 0x25, 0x4e, 0xd9, 0x94, 0xf8, 0xff, 0x85, 0x93, 0x39, 0xc7, 0xca, 0x2e, 0x68, 0x77, 0x42, 0x69, 0x0e, 0xc4, 0xe4, 0x30, 0xf3, 0xa4, 0xd5, 0xe1, 0x90, 0xfb, 0x81, 0x0b, 0xc7, 0x77, 0xeb, 0x76, 0xd2, 0xb8, 0x41, 0x63, 0x7a, 0xb5, 0xb4, 0x14, 0x89, 0x5b, 0x87, 0x8f, 0x81, 0x77, 0x65, 0xa0, 0x8e, 0xd5, 0xf7, 0x1d, 0xba, 0xa9, 0xb6, 0x6d, 0x60, 0x2f, 0xfe, 0x4b, 0xe3, 0x8f, 0x64, 0xc8, 0x9f, 0x03, 0x4a, 0x8f, 0x20, 0x3b, 0xb1, 0x6d, 0x92, 0x01, 0x4e, 0x11, 0x79, 0x19, 0xdf, 0x10, 0xa3, 0x6b, 0xbf, 0x2c, 0x5a, 0x64, 0xb8, 0xd5, 0xde, 0x99, 0x19, 0xf0, 0x12, 0xad, 0x09, 0xd8, 0x75, 0x75, 0x1b, 0xa2, 0x54, 0x5b, 0x23, 0xa6, 0x3e, 0x00, 0x47, 0x3a, 0xb9, 0x26, 0x59, 0xc1, 0x33, 0xcc, 0x64, 0xe5, 0x3b, 0x9a, 0x84, 0x20, 0xf1, 0x80, 0xfb, 0x81, 0xbb, 0x9b, 0x82, 0xad, 0x3a, 0x58, 0xdd, 0x24, 0x7d, 0xdb, 0xb2, 0xc5, 0x74, 0xa2, 0x9b, 0x95, 0xa7, 0x65, 0x7a, 0xbc, 0x27, 0x41, 0x0d, 0xd0, 0xc5, 0x16, 0xc2, 0x56, 0x83, 0x2e, 0xcc, 0x86, 0x48, 0x1f, 0x76, 0x4f, 0xd8, 0xf2, 0xb7, 0x9b, 0x02, 0x84, 0x07, 0xd4, 0x1c, 0x2d, 0x72, 0xa7, 0xac, 0xa0, 0xeb, 0x08, 0x68, 0x12, 0xe2, 0x76, 0x61, 0x9f, 0x19, 0x80, 0x7b, 0xe9, 0xb3, 0x88, 0x20, 0x02, 0x8e, 0xc7, 0x35, 0x8c, 0xd2, 0x91, 0x4d, 0x1e, 0xca, 0xda, 0x1d, 0xea, 0xf3, 0xfa, 0x31, 0x9d, 0x53, 0xad, 0xdd, 0x87, 0x0c, 0x5e, 0x75, 0xfc, 0x31, 0xa5, 0xc0, 0xfa, 0xd8, 0x0e, 0xab, 0x0b, 0x71, 0x1c, 0x3b, 0x6d, 0x56, 0x8d, 0xc5, 0x71, 0xa3, 0xe0, 0x61, 0x21, 0x47, 0x15, 0x9c, 0x25, 0x5b, 0xb4, 0x6d, 0xe8, 0xb3, 0x10, 0x6b, 0xf6, 0xb3, 0xcd, 0x3c, 0xa9, 0x64, 0xa0, 0x51, 0x04, 0xc7, 0x56, 0xd0, 0xdf, 0x6a, 0x18, 0xd2, 0x44, 0x38, 0xed, 0xcf, 0x1a, 0x95, 0x80, 0x56, 0x00, 0xab, 0x24, 0x02, 0x7c, 0xfe, 0x15, 0xa9, 0x55, 0x47, 0x00, 0xd6, 0x3d, 0x7f, 0xc6, 0x7a, 0xb3, 0x3a, 0x7e, 0xde, 0x28, 0x36, 0xb9, 0xdc, 0x61, 0x34, 0x09, 0x4f, 0x1c, 0x06, 0xc4, 0xc8, 0xf6, 0xea, 0x05, 0x83, 0x8c, 0x16, 0xf4, 0x99, 0xe1, 0x94, 0x47, 0x76, 0x00, 0x50, 0x09, 0x8e, 0xe2, 0x70, 0x9a, 0x4c, 0x91, 0xe3, 0xf8, 0x4b, 0x8e, 0x3d, 0x3c, 0xc9, 0x70, 0xc2, 0x68, 0x59, 0xcf, 0xc0, 0x5f, 0xd7, 0x60, 0x23, 0x35, 0xa1, 0x61, 0x43, 0xa9, 0x04, 0x38, 0x00, 0xf0, 0xf5, 0x57, 0x11, 0xb5, 0x02, 0x62, 0x99, 0x5d, 0x88, 0x94, 0xfb, 0x8f, 0x25, 0x5f, 0xf0, 0xf4, 0x70, 0x52, 0xd7, 0x3b, 0xe8, 0x40, 0x4c, 0x61, 0x2b, 0x9f, 0xfb, 0x2f, 0x69, 0x2e, 0xb6, 0x04, 0x17, 0xdb, 0xc6, 0xd4, 0xe8, 0xe3, 0x7f, 0x71, 0xf9, 0x3b, 0x18, 0x09, 0x4b, 0x2f, 0xb9, 0xf0, 0x77, 0x49, 0xd4, 0xa0, 0x9d, 0x74, 0xb9, 0xff, 0x9e, 0x61, 0x65, 0xe0, 0x8b, 0x2a, 0x9b, 0xcb, 0x5d, 0x35, 0x37, 0x01, 0xe6, 0x5c, 0xbe, 0xbb, 0x07, 0x4a, 0x39, 0xb3, 0x24, 0x28, 0x44, 0xe5, 0xd5, 0x7a, 0x62, 0x97, 0xde, 0x43, 0x93, 0x97, 0x62, 0x70, 0x29, 0xc4, 0x53, 0x73, 0xd7, 0xcf, 0x2d, 0x2f, 0x0b, 0x43, 0xe4, 0x14, 0x7d, 0xc3, 0x1a, 0x8b, 0x08, 0x93, 0x96, 0x94, 0xba, 0x5b, 0xf2, 0xad, 0x27, 0x27, 0x93, 0xf7, 0x02, 0xb1, 0xdf, 0x94, 0xee, 0xe3, 0xa9, 0x53, 0x91, 0x98, 0xf0, 0x8f, 0xea, 0xa3, 0xca, 0x54, 0xe5, 0x12, 0x9b, 0xc4, 0x2d, 0xb4, 0x8a, 0xb9, 0x42, 0xd8, 0x36, 0xac, 0xcb, 0x58, 0xa4, 0xd6, 0x2d, 0xd6, 0x7d, 0x94, 0x5c, 0x46, 0x76, 0x10, 0xf2, 0xac, 0x0f, 0x1e, 0x7e, 0x27, 0x80, 0x64, 0x1e, 0x2f, 0xf0, 0xbe, 0x50, 0x1b, 0xe9, 0xe1, 0x05, 0xe6, 0x09, 0x3e, 0xf7, 0x32, 0xfa, 0x29, 0x3d, 0x8d, 0xa4, 0x3a, 0x1c, 0xf4, 0xa0, 0xf3, 0x21, 0x95, 0xf0, 0xa4, 0x6c, 0xd9, 0xee, 0x8c, 0x4f, 0xa2, 0x83, 0x41, 0x18, 0xd2, 0x99, 0x52, 0x2a, 0x0c, 0xd3, 0x2a, 0x53, 0xbe, 0x7b, 0x37, 0x59, 0x5f, 0xbc, 0x4c, 0xd6, 0xf5, 0x11, 0x44, 0x46, 0xdb, 0xfd, 0xe9, 0x5f, 0xc1, 0xfd, 0x14, 0xa1, 0xf4, 0xbb, 0x15, 0x2d, 0xe0, 0x84, 0x54, 0xda, 0xd3, 0xfc, 0x39, 0x86, 0x03, 0x10, 0x4a, 0xaa, 0xd3, 0x2d, 0x93, 0x31, 0x52, 0xaf, 0x4b, 0x8b, 0x04, 0x9d, 0xb4, 0xfd, 0xe6, 0x93, 0x43, 0x3b, 0xac, 0xff, 0x01, 0x38, 0x4d, 0x90, 0x31, 0x3d, 0xc1, 0xec, 0x33, 0x39, 0x09, 0xa2, 0xa8, 0x58, 0x71, 0x5f, 0xd7, 0xd6, 0x12, 0x64, 0x50, 0x16, 0x9a, 0x37, 0xce, 0xee, 0x50, 0x99, 0x62, 0x45, 0x52, 0xb9, 0xce, 0xe1, 0x21, 0xa7, 0x2f, 0x7a, 0x60, 0x0b, 0xe0, 0x13, 0xd9, 0x17, 0x9a, 0x8a, 0xc1, 0xba, 0xe0, 0x6d, 0x3d, 0x17, 0x9a, 0x0f, 0x25, 0x35, 0x00, 0xdb, 0x07, 0xf8, 0xb9, 0xe9, 0x6f, 0x50, 0x44, 0xcf, 0x65, 0xb0, 0x98, 0xba, 0x38, 0xc2, 0x07, 0xbd, 0x7a, 0x59, 0x68, 0x68, 0x4c, 0xa7, 0x75, 0x9d, 0xdc, 0xb0, 0x72, 0x9f, 0x2b, 0xfe, 0x10, 0x6c, 0x14, 0x96, 0x90, 0x4d, 0x8a, 0x2c, 0x2b, 0xab, 0x21, 0x93, 0xb2, 0x24, 0xcf, 0x77, 0x72, 0xde, 0xf4, 0x4e, 0x5a, 0x1b, 0x99, 0x8c, 0x60, 0x0e, 0xf5, 0x16, 0x20, 0xee, 0x36, 0xfa, 0xc6, 0x48, 0x7e, 0x5d, 0x2f, 0x99, 0x2b, 0xb5, 0x4b, 0x1c, 0x5b, 0x38, 0xc6, 0xe1, 0xaf, 0x93, 0xe7, 0x1f, 0x50, 0xe0, 0xb8, 0xcb, 0x30, 0xd2, 0x67, 0x69, 0x93, 0x33, 0xec, 0x23, 0xcd, 0x91, 0xec, 0x18, 0x4d, 0x34, 0xdd, 0xf6, 0xda, 0x53, 0x6c, 0xcb, 0x1d, 0x87, 0x1b, 0x18, 0x60, 0x7f, 0x2f, 0x28, 0x95, 0xf6, 0xc9, 0x9f, 0x9a, 0xe2, 0x53, 0x56, 0xbb, 0xee, 0x1d, 0x66, 0x79, 0x2b, 0x48, 0x83, 0x89, 0x02, 0xe4, 0x8c, 0x20, 0x6e, 0x55, 0x5f, 0x6e, 0x68, 0xfb, 0xf2, 0x68, 0xa2, 0x12, 0xa0, 0xcb, 0x77, 0xd6, 0xc0, 0x5e, 0x22, 0xeb, 0x7c, 0x77, 0x2f, 0xfd, 0xe1, 0xc0, 0x30, 0xa4, 0x32, 0x3b, 0xb1, 0x8a, 0x82, 0x84, 0x6e, 0xcf, 0x81, 0x57, 0xc3, 0xac, 0x97, 0x51, 0x63, 0x57, 0x2f, 0xfb, 0x4d, 0x27, 0x56, 0x04, 0xfc, 0xf9, 0x84, 0xce, 0xde, 0xd2, 0xb9, 0x2d, 0x08, 0xc6, 0xcc, 0x6b, 0x28, 0x18, 0x00, 0x8f, 0xbb, 0xa2, 0xd9, 0xde, 0x80, 0x77, 0x2e, 0xa3, 0x2c, 0xc8, 0x7e, 0x2c, 0x5f, 0x04, 0x88, 0x15, 0xd7, 0x43, 0x15, 0xc9, 0xe4, 0xe5, 0x19, 0x45, 0x1b, 0x76, 0xfa, 0x1f, 0x4f, 0xd5, 0x30, 0xc7, 0xbd, 0x96, 0x0e, 0x0e, 0x87, 0xa4, 0xdf, 0xe4, 0x64, 0x2b, 0x35, 0x66, 0x95, 0xb5, 0x7e, 0x18, 0x1b, 0x93, 0xd8, 0x6e, 0x27, 0x7e, 0x27, 0x92, 0xd2, 0x7e, 0x64, 0x61, 0x0e, 0x0b, 0x38, 0xb6, 0xdc, 0x72, 0xc9, 0xec, 0xc0, 0x7b, 0xd4, 0x9e, 0x72, 0x49, 0xfc, 0xb1, 0xd7, 0x81, 0x61, 0x95, 0x2f, 0xaf, 0x75, 0xc7, 0x90, 0xe5, 0x0b, 0x9b, 0x93, 0xa5, 0xb1, 0x38, 0x4d, 0x00, 0x40, 0xe4, 0x81, 0x00, 0xb1, 0x82, 0x13, 0x44, 0x32, 0x58, 0xc0, 0xea, 0x79, 0x16, 0x0d, 0xb2, 0x59, 0x14, 0x7d, 0x5f, 0x93, 0xdc, 0x07, 0x61, 0xee, 0xe8, 0xc7, 0xb2, 0x8a, 0xad, 0xf4, 0xfe, 0x71, 0xd8, 0x12, 0x06, 0x6f, 0xd7, 0x69, 0x46, 0x24, 0x9b, 0xb5, 0xd5, 0x57, 0x9c, 0x1f, 0x8e, 0x8d, 0x1e, 0x6c, 0x6d, 0xda, 0xb3, 0x75, 0x3b, 0xf8, 0x02, 0xd7, 0x6e, 0x96, 0xc6, 0xeb, 0x4b, 0xf2, 0x1a, 0xf9, 0x4d, 0xaa, 0xf3, 0xa8, 0xca, 0xd0, 0xee, 0xb9, 0xd4, 0x3c, 0x4c, 0xf5, 0x5e, 0x26, 0x3a, 0x64, 0x9f, 0xf4, 0x56, 0xc0, 0xbc, 0x50, 0x70, 0x29, 0xa1, 0x7e, 0x8d, 0x1a, 0x2f, 0xec, 0x32, 0x9c, 0x9d, 0x0b, 0xdf, 0xba, 0x18, 0x5e, 0xd9, 0x34, 0xad, 0xd1, 0x2c, 0x78, 0x69, 0x4b, 0xf1, 0xcd, 0xbf, 0x86, 0xcd, 0xd2, 0x29, 0x1f, 0xba, 0x27, 0x12, 0xe9, 0x0a, 0x6a, 0xf4, 0x87, 0xa9, 0x65, 0xbe, 0x3a, 0xa2, 0x85, 0x78, 0xf7, 0xe4, 0x8e, 0x29, 0xbd, 0x47, 0x8e, 0xf9, 0x25, 0xca, 0x10, 0x93, 0x3b, 0x1e, 0x91, 0xcd, 0x8c, 0x69, 0x38, 0x8b, 0x80, 0x44, 0xc1, 0xe0, 0xea, 0x05, 0xbb, 0x77, 0xde, 0x44, 0xf3, 0x32, 0xc3, 0x98, 0x30, 0x10, 0xa8, 0xa2, 0x20, 0x54, 0xdc, 0x4d, 0x93, 0xe4, 0xb8, 0x53, 0xe7, 0xef, 0xc0, 0x04, 0xc3, 0xd2, 0xeb, 0x43, 0x09, 0x3d, 0x3e, 0xd1, 0x05, 0x91, 0x9f, 0xce, 0xeb, 0x8d, 0xe9, 0x7c, 0x80, 0x2a, 0x3c, 0x47, 0x17, 0xc3, 0x97, 0x02, 0xbf, 0x79, 0xa8, 0x74, 0xbb, 0xd6, 0xe2, 0x13, 0x32, 0xb1, 0xd1, 0x0f, 0x28, 0x51, 0xaa, 0x92, 0xad, 0xd5, 0x27, 0x47, 0x54, 0xd2, 0x91, 0x19, 0xe7, 0x3f, 0x1e, 0x3d, 0x59, 0x8e, 0x7e, 0x72, 0xfc, 0x1c, 0xb1, 0x87, 0xf4, 0xcb, 0x1b, 0x1e, 0xec, 0xed, 0xda, 0xb1, 0x08, 0x65, 0x57, 0xd2, 0x1a, 0x08, 0x1b, 0xb7, 0x18, 0x4a, 0xe5, 0xf5, 0xce, 0x16, 0xf9, 0x8c, 0xd0, 0xfd, 0xba, 0x24, 0xb3, 0x93, 0x7b, 0x96, 0x7c, 0x16, 0x93, 0xae, 0x59, 0x51, 0xaf, 0x30, 0x8f, 0xc0, 0x6d, 0x18, 0xb4, 0xf5, 0x26, 0x26, 0x1e, 0x3a, 0x0a, 0x9a, 0x9b, 0x78, 0x73, 0x3d, 0x62, 0x58, 0x73, 0xa0, 0x4a, 0xa7, 0xaf, 0xa8, 0x3a, 0xff, 0x71, 0x4a, 0xe1, 0xa4, 0xf8, 0x94, 0xa7, 0xac, 0x13, 0xed, 0xe3, 0x63, 0xee, 0x9d, 0x4e, 0xed, 0x2b, 0x90, 0xb8, 0x2d, 0x34, 0x56, 0xf9, 0xe6, 0xd0, 0x6f, 0x2b, 0x20, 0xf5, 0xc6, 0x16, 0xce, 0xde, 0x7b, 0xec, 0xad, 0x5c, 0xe5, 0x37, 0x6f, 0x71, 0xd8, 0x0f, 0x19, 0x1b, 0x23, 0x90, 0xaa, 0x6e, 0x5d, 0x8b, 0xfd, 0xe5, 0xe2, 0x7c, 0xf0, 0xfa, 0x18, 0xbc, 0xc6, 0xf4, 0xf7, 0xf8, 0xca, 0x01, 0xc8, 0xe2, 0x35, 0x84, 0x2c, 0x26, 0x52, 0xb0, 0x61, 0xa0, 0xe0, 0x56, 0xc1, 0xcc, 0xb8, 0xfb, 0x8b, 0x7e, 0xb0, 0x2e, 0xe6, 0xd3, 0xbe, 0x19, 0x23, 0x67, 0x61, 0x55, 0x43, 0xc8, 0x3c, 0x03, 0xb9, 0x2b, 0x04, 0x18, 0x71, 0x5e, 0x9d, 0xf8, 0x10, 0xfe, 0x80, 0x47, 0x7e, 0xea, 0x60, 0xfb, 0xa2, 0xf7, 0x0d, 0xb6, 0x6c, 0xe6, 0x98, 0x54, 0x19, 0x93, 0xb8, 0xbf, 0xb2, 0x6e, 0x6c, 0x0b, 0xd6, 0x2f, 0xe2, 0xbf, 0xba, 0xc6, 0x98, 0x70, 0x6e, 0x91, 0xc1, 0x95, 0x62, 0xd2, 0xea, 0x96, 0x28, 0x60, 0xdd, 0x26, 0x7b, 0x9d, 0xc6, 0xd3, 0x81, 0xa7, 0x94, 0xdb, 0x4d, 0xd3, 0xa2, 0x42, 0xa8, 0x57, 0x97, 0x21, 0x11, 0x46, 0x8b, 0x41, 0x02, 0xc2, 0x6b, 0xe8, 0x75, 0x6d, 0x9e, 0xf3, 0xa7, 0x20, 0xe8, 0x25, 0x1c, 0xe0, 0x8f, 0xbf, 0xe3, 0x0d, 0xbd, 0x51, 0x1b, 0xdd, 0x26, 0xcf, 0xb6, 0x09, 0xea, 0xe7, 0x7d, 0xc6, 0xbd, 0x92, 0x54, 0xf7, 0x45, 0xea, 0xc0, 0xa1, 0xc3, 0x3b, 0xa6, 0x9f, 0xf6, 0x5c, 0x56, 0x97, 0x3d, 0x40, 0xc7, 0x2c, 0xfb, 0xc8, 0x24, 0x75, 0x3f, 0xdb, 0x88, 0xae, 0xa5, 0xb9, 0x07, 0x2e, 0x77, 0x8c, 0xed, 0x99, 0x18, 0x41, 0x4a, 0x57, 0xa3, 0x95, 0xae, 0x45, 0xcf, 0x73, 0x31, 0xaa, 0x16, 0x7d, 0xb6, 0x6c, 0x16, 0xe9, 0x71, 0x84, 0x37, 0x8e, 0xa7, 0xaf, 0x8e, 0x3e, 0xb5, 0x66, 0x01, 0x57, 0x54, 0x11, 0xac, 0x95, 0x1b, 0x78, 0x84, 0x2a, 0x46, 0x7a, 0x3a, 0x11, 0xb5, 0x01, 0x63, 0x9f, 0x38, 0x35, 0xd5, 0x5b, 0x09, 0xf0, 0x54, 0x0f, 0x9a, 0x72, 0x6e, 0x1f, 0x91, 0x57, 0xa3, 0x1a, 0x11, 0xc6, 0xc9, 0x8f, 0x3c, 0xea, 0xaf, 0x22, 0xf6, 0xa6, 0x01, 0xde, 0xeb, 0x84, 0x6b, 0xcd, 0xd3, 0xef, 0x01, 0xc6, 0xf5, 0xa3, 0xdf, 0x87, 0xe9, 0x61, 0x0c, 0x04, 0xa3, 0xe7, 0xa5, 0xfe, 0xad, 0x1f, 0x37, 0xd6, 0xb4, 0x97, 0x6c, 0xa4, 0x46, 0x31, 0xea, 0x84, 0xda, 0x1c, 0x78, 0x30, 0x11, 0x02, 0x62, 0xd4, 0x3b, 0x83, 0x1f, 0x1d, 0x1d, 0xe3, 0x32, 0x93, 0xf2, 0xff, 0x4e, 0x2a, 0xaf, 0x86, 0xbd, 0x13, 0x8b, 0x65, 0x03, 0xd8, 0xbf, 0x83, 0xbe, 0xa8, 0x8a, 0xaf, 0xd0, 0xf0, 0x79, 0xd7, 0xc0, 0x2b, 0xe5, 0x7a, 0x5e, 0xfa, 0xbd, 0x5f, 0xa6, 0x77, 0x86, 0x88, 0xe7, 0xc6, 0x9f, 0x62, 0x25, 0xee, 0xca, 0x3e, 0xbb, 0xe7, 0xe8, 0x04, 0x44, 0xf5, 0x04, 0x26, 0xbc, 0x34, 0x93, 0xd4, 0xe3, 0x73, 0xfa, 0x6f, 0xe2, 0x45, 0x51, 0x3f, 0x31, 0x56, 0x67, 0x68, 0xb8, 0xfc, 0x06, 0x1a, 0x35, 0x0e, 0x78, 0x09, 0xdd, 0xf9, 0x49, 0x1d, 0x46, 0x10, 0x4f, 0x6a, 0x84, 0x24, 0xe8, 0x62, 0x93, 0x55, 0x83, 0x49, 0xf5, 0x27, 0x62, 0xea, 0x9b, 0xd9, 0x9e, 0x89, 0x09, 0xf2, 0x6b, 0x18, 0xb6, 0x1c, 0x9d, 0xae, 0xb1, 0x35, 0x6b, 0x34, 0x8a, 0xa4, 0x73, 0x62, 0x70, 0xe9, 0xff, 0xea, 0x97, 0x78, 0x87, 0xf2, 0xdd, 0xc8, 0x77, 0xc8, 0xac, 0xa7, 0x31, 0xd1, 0x22, 0xd0, 0x56, 0xc3, 0x6f, 0xbf, 0x42, 0x14, 0x7f, 0xc4, 0xd5, 0xb3, 0xda, 0x57, 0x79, 0xf5, 0xc8, 0xab, 0x60, 0xd2, 0xb8, 0x86, 0x0e, 0x51, 0xe2, 0x4f, 0x18, 0x41, 0x2c, 0x69, 0x2b, 0x2a, 0x4a, 0xbf, 0x4f, 0x83, 0x2a, 0xa0, 0x6d, 0x25, 0x8f, 0xce, 0x0f, 0x00, 0xfc, 0xd1, 0x68, 0x0d, 0xd3, 0x91, 0x94, 0x83, 0xbe, 0x24, 0x21, 0x4e, 0x4e, 0xe5, 0xcd, 0xbd, 0xe2, 0xc6, 0x91, 0x7b, 0xcb, 0xe7, 0xdf, 0xc0, 0xad, 0x67, 0x29, 0xc8, 0x28, 0x7a, 0xa2, 0x85, 0xb8, 0xbb, 0x48, 0x91, 0xda, 0xc4, 0x22, 0x66, 0x71, 0xfc, 0xc6, 0xd1, 0x67, 0xb1, 0x1f, 0xa4, 0x97, 0x67, 0x6d, 0xac, 0xeb, 0x6f, 0x8d, 0xe2, 0xc1, 0xbb, 0x7b, 0xe5, 0x94, 0xf0, 0x15, 0xa8, 0xd8, 0xbd, 0x22, 0x68, 0x25, 0x6c, 0x92, 0xe2, 0x98, 0xb6, 0x07, 0xc2, 0x77, 0xdc, 0x95, 0x5e, 0x13, 0xf3, 0xc6, 0xa4, 0xf3, 0x7f, 0xe2, 0x51, 0x2e, 0x44, 0x6d, 0x65, 0x19, 0x59, 0xf0, 0xd3, 0x22, 0x7e, 0xfd, 0x7c, 0xfc, 0xaf, 0x6d, 0x5e, 0xfd, 0xfa, 0xec, 0x09, 0xc4, 0x8d, 0xb8, 0x53, 0x1e, 0x13, 0xa5, 0x4d, 0x2b, 0x41, 0x65, 0x76, 0xbc, 0xab, 0x06, 0x2e, 0x00, 0xdd, 0xbc, 0x6d, 0x60, 0xa7, 0xe1, 0xb4, 0xa7, 0xb8, 0x3a, 0x44, 0x66, 0x6e, 0x7c, 0x8f, 0x97, 0xed, 0x0e, 0xec, 0x80, 0x6f, 0x11, 0x8e, 0xda, 0xdb, 0x9e, 0xb7, 0x33, 0x98, 0x4e, 0x29, 0x91, 0xa3, 0x00, 0xde, 0x58, 0xdf, 0xd6, 0xf8, 0x6d, 0xad, 0x81, 0xfb, 0x9c, 0xbd, 0xbf, 0x3a, 0x37, 0x24, 0x21, 0x8f, 0x00, 0xae, 0x12, 0x4f, 0x49, 0x75, 0x15, 0x7d, 0x5a, 0xb2, 0x4e, 0x3e, 0x13, 0xd4, 0x44, 0x8d, 0xd3, 0xcf, 0xe5, 0x30, 0x98, 0xb7, 0xcb, 0xeb, 0x67, 0x8d, 0xbd, 0xf3, 0xee, 0x59, 0x79, 0xa5, 0x68, 0x78, 0xb0, 0x78, 0xc1, 0x38, 0x53, 0x31, 0xfa, 0xa2, 0x0d, 0x56, 0xd0, 0x97, 0x11, 0xe4, 0x98, 0x1f, 0x15, 0x44, 0x6e, 0xfd, 0x9e, 0x7c, 0x8e, 0x87, 0x7f, 0xa3, 0x02, 0xb4, 0x9c, 0x97, 0x7e, 0x77, 0xf4, 0xf2, 0x88, 0x4b, 0xdf, 0x39, 0xdb, 0x0f, 0x93, 0x57, 0x0e, 0x15, 0xed, 0x4a, 0x71, 0x76, 0x6f, 0x1d, 0x38, 0xa8, 0x85, 0x16, 0xdb, 0x52, 0x0c, 0x30, 0xbc, 0x5e, 0x14, 0xcb, 0x0b, 0x50, 0xe5, 0xa3, 0xe6, 0xd7, 0x41, 0xff, 0xc5, 0xa2, 0xe9, 0x2b, 0x16, 0x75, 0x63, 0x27, 0x24, 0x7c, 0xf9, 0xa1, 0x3d, 0xdf, 0x05, 0x21, 0x14, 0x96, 0x6c, 0x84, 0x64, 0x7f, 0x69, 0xab, 0xd6, 0xae, 0x8c, 0x74, 0x25, 0x04, 0x02, 0xe9, 0x80, 0x03, 0x16, 0xb8, 0x30, 0xe0, 0xf8, 0xe4, 0x7a, 0xda, 0xbd, 0xb9, 0xc7, 0xcb, 0xa8, 0x05, 0x02, 0xfd, 0xa8, 0x85, 0x42, 0x3e, 0x21, 0x9e, 0xa9, 0x37, 0xef, 0x4d, 0x8c, 0xf9, 0xa9, 0x61, 0xd3, 0xd9, 0x22, 0xe8, 0xa3, 0x7e, 0x36, 0xe7, 0x3b, 0x38, 0xc3, 0x4e, 0x1c, 0x93, 0xf5, 0x2a, 0x6d, 0x2d, 0xc7, 0x1d, 0x9d, 0xc4, 0xc6, 0x0b, 0x4a, 0x93, 0x18, 0x17, 0x62, 0xdf, 0xbe, 0xce, 0x88, 0xcd, 0x16, 0xa1, 0xb9, 0x76, 0xa4, 0x99, 0x2f, 0x3d, 0x11, 0x46, 0x85, 0x61, 0x74, 0xf9, 0x1d, 0xce, 0xd1, 0x33, 0xbf, 0x39, 0xdf, 0x5c, 0x82, 0x6b, 0x0f, 0xb8, 0xf0, 0xdd, 0xc9, 0x98, 0x65, 0x86, 0xf9, 0xcd, 0xb8, 0xf1, 0xca, 0x62, 0x1d, 0x92, 0xb1, 0x8b, 0x4a, 0x5a, 0xae, 0xd8, 0xd9, 0x89, 0xcf, 0xae, 0xee, 0xc4, 0xf5, 0xf8, 0x19, 0x67, 0xda, 0x1a, 0x7e, 0x1c, 0x53, 0x26, 0x33, 0xad, 0xd3, 0x53, 0xe9, 0x16, 0x31, 0xab, 0xcf, 0xdf, 0xab, 0x03, 0xb3, 0xa8, 0x2a, 0x30, 0x6a, 0x06, 0xc8, 0x78, 0x73, 0x8d, 0x8f, 0x47, 0xd7, 0x2e, 0x83, 0x23, 0x53, 0xc4, 0xe3, 0xe2, 0xb9, 0xe9, 0xad, 0x1b, 0x94, 0x0e, 0x60, 0xda, 0x0b, 0xcb, 0x05, 0x98, 0x08, 0x73, 0x70, 0x6a, 0x99, 0xec, 0xc4, 0x78, 0x96, 0xbd, 0x35, 0xb1, 0x84, 0x69, 0x12, 0xbd, 0xb9, 0xfc, 0x02, 0x33, 0xc1, 0xe3, 0x8e, 0x0d, 0x01, 0x00, 0xdf, 0x59, 0x9a, 0xfe, 0xc9, 0x31, 0x90, 0xe2, 0x09, 0xec, 0x2c, 0xe3, 0xcb, 0x96, 0x9e, 0x7c, 0x70, 0x9e, 0xe7, 0xbf, 0x8d, 0xcf, 0xf6, 0xec, 0x37, 0x81, 0x11, 0x42, 0x7e, 0x11, 0x77, 0x15, 0x37, 0x8e, 0x44, 0x21, 0xff, 0xb5, 0x94, 0x1e, 0x7c, 0x20, 0xeb, 0x95, 0xe6, 0xba, 0xd5, 0xf1, 0xc6, 0x76, 0xc9, 0xd9, 0xfe, 0x41, 0x53, 0xbd, 0x0a, 0x35, 0x73, 0xaf, 0x85, 0x0f, 0x40, 0x75, 0xef, 0xe3, 0xd0, 0xdc, 0xad, 0x0e, 0x5c, 0x4f, 0x51, 0x6d, 0xa0, 0xa7, 0x1c, 0xcc, 0x81, 0x45, 0xc1, 0xa1, 0xf2, 0x5e, 0x6c, 0xfb, 0x18, 0x97, 0x03, 0xb5, 0xac, 0xd2, 0xac, 0xef, 0xa2, 0x47, 0x8f, 0xbe, 0x08, 0xd6, 0xdd, 0x23, 0x30, 0x9b, 0x11, 0x3a, 0x11, 0xc4, 0x76, 0xb4, 0xeb, 0x9f, 0xe9, 0x87, 0x2a, 0xf7, 0xe0, 0xe4, 0x8d, 0xa1, 0xab, 0x6a, 0x87, 0x52, 0xfa, 0x99, 0xe6, 0xb4, 0xa0, 0x89, 0xb2, 0xb8, 0x96, 0xdc, 0x58, 0x2d, 0x43, 0xf1, 0x07, 0x92, 0xfa, 0x5a, 0x5b, 0x28, 0xc5, 0x91, 0x39, 0x4c, 0x61, 0xe6, 0xfa, 0x04, 0x89, 0xbc, 0xcb, 0xd8, 0x78, 0xf5, 0x53, 0xe3, 0xa9, 0xab, 0x97, 0x29, 0xe1, 0x21, 0x1b, 0x2b, 0x6f, 0xf9, 0x4a, 0xb9, 0xb2, 0xa7, 0x18, 0x08, 0xdd, 0x25, 0xe6, 0x04, 0xf7, 0xe8, 0xa6, 0xe7, 0x26, 0x14, 0x3f, 0x0b, 0x2c, 0xec, 0x33, 0xfc, 0x32, 0x8c, 0x7f, 0xd2, 0xc5, 0xda, 0xc3, 0xbe, 0x1e, 0xba, 0xa2, 0xe2, 0xa6, 0x81, 0x6c, 0x66, 0xb9, 0xad, 0xfa, 0xc8, 0xaa, 0xd3, 0xda, 0x73, 0x08, 0xd8, 0xad, 0x94, 0x20, 0x64, 0xcc, 0x29, 0xc3, 0x94, 0x32, 0x5a, 0x4a, 0xef, 0x96, 0x0d, 0xd6, 0x9c, 0xd7, 0xb5, 0xdd, 0xd2, 0x9d, 0x6a, 0xe2, 0x8f, 0x3e, 0x3f, 0x83, 0x8d, 0xde, 0xd0, 0xb9, 0x72, 0xdb, 0x1a, 0x5c, 0x46, 0x68, 0x90, 0xe5, 0x2b, 0x77, 0x6b, 0x78, 0x48, 0xdd, 0x41, 0x22, 0x07, 0xb0, 0xd9, 0x5f, 0x80, 0xf4, 0x3e, 0xdf, 0x35, 0x77, 0x12, 0x89, 0xff, 0xfa, 0x25, 0xc1, 0x48, 0x91, 0x46, 0xe6, 0x7b, 0x4d, 0x59, 0x1f, 0xb9, 0x17, 0xaa, 0x58, 0xce, 0xdf, 0x81, 0x87, 0x63, 0xf7, 0xf7, 0x34, 0x74, 0xb9, 0x07, 0x38, 0x05, 0x70, 0xe8, 0xc5, 0x11, 0x76, 0x9a, 0xa6, 0xc4, 0x99, 0xc0, 0xc8, 0xea, 0xc3, 0xad, 0xfa, 0xa6, 0xdb, 0xc1, 0xf1, 0x67, 0xe6, 0xf6, 0x8f, 0x18, 0x72, 0xb6, 0x65, 0x97, 0x34, 0xf0, 0x76, 0x69, 0xf0, 0x6a, 0x3d, 0xac, 0x99, 0x59, 0xf2, 0x4c, 0xba, 0x2f, 0x0a, 0x7a, 0x14, 0xb4, 0xfd, 0x5a, 0x88, 0x58, 0x4b, 0xfc, 0x38, 0xc7, 0xc1, 0x8e, 0xea, 0xbf, 0xf8, 0xd0, 0xad, 0x1e, 0x20, 0xc8, 0xbe, 0x40, 0xfb, 0xb6, 0xac, 0x87, 0x2c, 0x4a, 0xbb, 0x3b, 0xb2, 0x15, 0x86, 0x95, 0xb0, 0x3e, 0xe9, 0x16, 0x6f, 0x76, 0x1e, 0x1d, 0xa5, 0x2d, 0x26, 0xb9, 0xf8, 0x06, 0x6b, 0xbc, 0xbe, 0x89, 0xa3, 0x11, 0x07, 0x19, 0xf7, 0x4f, 0xdd, 0x25, 0x65, 0x8d, 0xca, 0xa2, 0x63, 0x79, 0x9b, 0xb8, 0xc5, 0xa4, 0x64, 0xbb, 0xe0, 0x20, 0xc4, 0x5e, 0xf0, 0x4d, 0x6a, 0x23, 0xb7, 0xf0, 0xd8, 0x16, 0x67, 0x85, 0x67, 0xbb, 0xc2 ],
- const [ 0x2e, 0x52, 0x3e, 0x9d, 0x8a, 0x55, 0x32, 0x12, 0x7e, 0xc6, 0x3b, 0x22, 0x08, 0x38, 0xf1, 0x1b, 0x0f, 0x8a, 0x09, 0xe9, 0xa3, 0x17, 0xc1, 0xe4, 0x87, 0x2d, 0x7f, 0xec, 0xec, 0xc1, 0xb4, 0xb8, 0x80, 0x60, 0x07, 0x6b, 0xa7, 0x69, 0xb0, 0x68, 0x08, 0x7a, 0x21, 0x68, 0x4c, 0x28, 0xec, 0xca, 0x22, 0xf3, 0xe1, 0x2a, 0x87, 0x78, 0x76, 0x34, 0x44, 0xe9, 0x6d, 0xba, 0xb8, 0xbb, 0xb0, 0x05, 0xd7, 0x9e, 0x80, 0x69, 0x73, 0xb2, 0xce, 0x1c, 0xbb, 0xf8, 0xe9, 0x49, 0x01, 0x07, 0x5a, 0x5f, 0xc0, 0x00, 0x0c, 0xaf, 0xdd, 0xc3, 0xb1, 0x36, 0x2d, 0x63, 0x60, 0xb7, 0x38, 0xd8, 0x83, 0x0e, 0x3c, 0xf4, 0xf0, 0xc0, 0x75, 0x99, 0x56, 0xd6, 0x9c, 0x28, 0xdb, 0xec, 0xae, 0x3c, 0x03, 0x85, 0xee, 0x99, 0xd4, 0xa1, 0x2d, 0x5f, 0x38, 0x92, 0x49, 0x84, 0xa2, 0x0b, 0xf4, 0x80, 0xf4, 0x7a, 0xb6, 0x4a, 0xa1, 0x97, 0x35, 0x84, 0x0e, 0x3d, 0xb5, 0xf2, 0x3f, 0x7a, 0xdb, 0x31, 0xaf, 0xe2, 0xb6, 0xa6, 0x7f, 0x28, 0x00, 0xb4, 0xd3, 0xef, 0xa0, 0x32, 0x7a, 0xdd, 0x74, 0x1c, 0xcd, 0xf1, 0x4e, 0x88, 0xd9, 0x17, 0x3c, 0xdc, 0xc0, 0xfa, 0x0d, 0x3f, 0x5c, 0x1a, 0x10, 0x4d, 0x26, 0x1e, 0x1f, 0x0f, 0x56, 0x6b, 0xdc, 0x2a, 0x4c, 0xf5, 0x3b, 0x56, 0x2f, 0x55, 0x41, 0x12, 0xd4, 0x1d, 0x0b, 0x97, 0xe1, 0x68, 0x11, 0x0a, 0x32, 0xb5, 0xac, 0xf5, 0x7b, 0xf5, 0xd6, 0xf8, 0x2f, 0xe2, 0x31, 0xbc, 0xa1, 0x93, 0x4c, 0x29, 0x6a, 0x4d, 0x21, 0xd9, 0x0a, 0x9d, 0xe2, 0xcc, 0xd2, 0xa3, 0xf5, 0x5d, 0x01, 0xb1, 0x3d, 0x74, 0x2d, 0x15, 0x9b, 0xfe, 0xe4, 0x32, 0xb4, 0x9a, 0x94, 0xd6, 0xf5, 0x95, 0xa8, 0xc7, 0xd5, 0x19, 0xf4, 0x9f, 0x5a, 0xa1, 0x53, 0xda, 0xdf, 0xb0, 0x8e, 0x2e, 0x14, 0xc3, 0x80, 0x1b, 0x46, 0x84, 0x78, 0xc2, 0xe1, 0x40, 0xdf, 0xfa, 0x33, 0x9b, 0x1b, 0xa1, 0x72, 0x83, 0xb2, 0x30, 0x01, 0x62, 0xb3, 0x92, 0xef, 0x98, 0x52, 0x37, 0xc1, 0x28, 0xd2, 0x64, 0x71, 0xb1, 0xa8, 0xcd, 0xb6, 0xa1, 0xdd, 0x65, 0x86, 0xa5, 0xb4, 0x75, 0xd9, 0x64, 0x8d, 0xeb, 0xb1, 0x6c, 0x09, 0xf5, 0x57, 0x6c, 0x6f, 0xcf, 0xe7, 0xa5, 0x4e, 0xda, 0x0e, 0x9b, 0x64, 0xed, 0x13, 0x10, 0xbf, 0xef, 0x14, 0x32, 0x22, 0xa6, 0x93, 0x14, 0xaa, 0xca, 0x31, 0x5b, 0xb1, 0x5e, 0xb8, 0x3a, 0xf3, 0x40, 0x5f, 0xa0, 0xef, 0xfe, 0x4a, 0xaf, 0x91, 0xeb, 0x51, 0x71, 0x0d, 0x72, 0x02, 0xc6, 0x0e, 0xab, 0xe9, 0xa1, 0x10, 0x2c, 0x0f, 0x74, 0x0a, 0x22, 0xc0, 0xe9, 0x51, 0xa0, 0x91, 0xd3, 0xb9, 0x36, 0xa2, 0x64, 0xfd, 0xc6, 0x21, 0xa0, 0x61, 0x93, 0x0f, 0x11, 0x95, 0x9b, 0x47, 0xbd, 0xdd, 0x27, 0xbc, 0x55, 0x6f, 0xa0, 0x02, 0xaf, 0x1c, 0xa4, 0x10, 0x76, 0x33, 0x59, 0x44, 0x21, 0xa3, 0x01, 0xa7, 0x21, 0x5f, 0xcf, 0x73, 0x5f, 0x07, 0xf9, 0xd2, 0xe5, 0xc4, 0x0f, 0xe9, 0xdb, 0x74, 0x8b, 0x15, 0xb6, 0x07, 0xa9, 0x74, 0xac, 0x28, 0x79, 0xa8, 0x6b, 0x20, 0x32, 0xd7, 0x0a, 0xf8, 0xc9, 0xf6, 0x40, 0xde, 0xc2, 0x48, 0xd4, 0xcb, 0x47, 0x21, 0x54, 0x62, 0x77, 0xf0, 0x0a, 0x1a, 0x00, 0x7c, 0x2c, 0x9f, 0xf0, 0x6e, 0x53, 0x76, 0xc8, 0x10, 0x2e, 0xe0, 0xd2, 0x54, 0x78, 0x02, 0xb5, 0x18, 0x27, 0x42, 0x47, 0xa8, 0xe7, 0xf4, 0xa2, 0x85, 0xc6, 0x36, 0x7a, 0x65, 0x31, 0x18, 0xae, 0x7a, 0x1f, 0x01, 0x1c, 0xf7, 0x8c, 0x4e, 0xba, 0xd1, 0x29, 0x3b, 0xe3, 0xc2, 0x52, 0x07, 0xee, 0x94, 0x40, 0x53, 0x05, 0x9c, 0x80, 0xcc, 0x34, 0x85, 0xa3, 0x09, 0xc1, 0x4f, 0x38, 0xb6, 0xbc, 0x96, 0xf7, 0xf3, 0xd6, 0x18, 0x3f, 0xf7, 0x77, 0x72, 0xc3, 0xf9, 0x0a, 0x2a, 0x80, 0x50, 0x9c, 0xf2, 0xf2, 0xd9, 0xa5, 0x2b, 0x87, 0x99, 0x25, 0xa9, 0x54, 0xa3, 0xf3, 0xb6, 0x06, 0x3c, 0x52, 0x59, 0x1c, 0x3e, 0xc6, 0xd8, 0x54, 0xba, 0x26, 0x7b, 0x63, 0xe1, 0xf1, 0x93, 0xe9, 0x25, 0xe5, 0xbb, 0xa4, 0x9b, 0xce, 0x5e, 0xe4, 0xa4, 0x9d, 0x79, 0x3f, 0xcc, 0xb9, 0xa2, 0x85, 0xf2, 0x9a, 0x4a, 0xf7, 0xaa, 0x93, 0x3f, 0xb3, 0xdf, 0xef, 0x74, 0x73, 0xbd, 0x40, 0x05, 0x77, 0xcd, 0xf4, 0x76, 0xc0, 0x62, 0x29, 0x3c, 0x7f, 0x35, 0xc3, 0x7e, 0xcd, 0x4c, 0xbb, 0x1c, 0x9c, 0x20, 0xb9, 0xf1, 0xee, 0xfe, 0xe6, 0x55, 0x45, 0xae, 0xfb, 0xe6, 0x5a, 0x53, 0x9f, 0x89, 0x11, 0x92, 0xef, 0xab, 0xad, 0xf6, 0x5e, 0xcd, 0x40, 0x93, 0xbf, 0x3f, 0x66, 0xea, 0xa0, 0x2b, 0x33, 0x0d, 0xda, 0xd6, 0x6a, 0x04, 0x66, 0x23, 0xf0, 0x6e, 0x72, 0x59, 0x80, 0x6b, 0xb4, 0x25, 0x9f, 0xba, 0xff, 0xe3, 0xd3, 0x1f, 0x14, 0x19, 0x10, 0x08, 0xba, 0x44, 0x73, 0x6f, 0x11, 0xd8, 0x33, 0x02, 0x23, 0x82, 0xd4, 0x82, 0xbc, 0xb0, 0x9d, 0x69, 0x7c, 0x53, 0x4d, 0xcf, 0x2a, 0xe3, 0x0a, 0x8e, 0x4b, 0xa4, 0x9a, 0xa5, 0xf3, 0x29, 0xd5, 0xda, 0xdc, 0x16, 0x5a, 0xa4, 0xb5, 0x2a, 0x82, 0x47, 0xbc, 0x7c, 0x92, 0x41, 0x8f, 0x04, 0x35, 0xe5, 0x3f, 0x5e, 0x29, 0x46, 0xa7, 0xcb, 0x38, 0x56, 0xfc, 0x79, 0x6a, 0x4f, 0xa5, 0x04, 0x79, 0x52, 0x4c, 0x3c, 0x85, 0x4e, 0x35, 0x29, 0x09, 0x24, 0xce, 0x4c, 0x0e, 0x09, 0x88, 0x28, 0x9e, 0x2b, 0xe6, 0x01, 0x7c, 0x97, 0xd3, 0xe4, 0x12, 0x5a, 0x39, 0xe7, 0xab, 0xe6, 0xcf, 0xb2, 0xe2, 0xb8, 0x33, 0x3e, 0x5a, 0x38, 0x38, 0xdd, 0xb0, 0xe1, 0x81, 0x7b, 0xae, 0xa1, 0x4f, 0x23, 0xc2, 0x83, 0x97, 0xc5, 0xae, 0x8b, 0x58, 0x36, 0x80, 0xe1, 0x2b, 0x78, 0xc5, 0x33, 0x1c, 0x3c, 0xfa, 0x54, 0xb8, 0xa5, 0x43, 0x29, 0x67, 0x4f, 0x60, 0xc5, 0xfc, 0x90, 0xdc, 0xd3, 0x8b, 0xfd, 0x87, 0x34, 0x7a, 0x30, 0x27, 0xea, 0xdb, 0xc9, 0x6b, 0x35, 0xf9, 0xb3, 0x20, 0xfb, 0x31, 0xa9, 0xa7, 0x6d, 0x04, 0xf8, 0xa7, 0xe8, 0x6a, 0x86, 0xff, 0x19, 0x68, 0x13, 0xff, 0x65, 0xe4, 0xbf, 0xd7, 0x88, 0xb9, 0xcc, 0x4f, 0x7c, 0x07, 0xa6, 0xb9, 0x9c, 0xcc, 0x20, 0x24, 0x09, 0xb9, 0x01, 0xd3, 0x4d, 0x3e, 0xbf, 0xee, 0x3e, 0xe8, 0x8a, 0x76, 0x25, 0xec, 0x8c, 0x7e, 0x20, 0x04, 0x70, 0x99, 0xc5, 0x79, 0x21, 0x8f, 0x08, 0x81, 0xd4, 0x54, 0x5f, 0xcc, 0x48, 0x3a, 0x24, 0x5a, 0x4c, 0x65, 0x3a, 0x8f, 0x83, 0x7f, 0xf3, 0x89, 0x64, 0xae, 0x31, 0xb1, 0x84, 0xc3, 0xcc, 0x90, 0x18, 0xb5, 0x34, 0xe5, 0xb5, 0x4d, 0x58, 0xf4, 0x5b, 0x22, 0xc6, 0x20, 0xb2, 0xc8, 0x13, 0xbc, 0x93, 0x45, 0x7d, 0x1f, 0xca, 0xc4, 0xcf, 0xf6, 0x1b, 0x8e, 0x85, 0xdf, 0x83, 0x35, 0x31, 0x33, 0xbf, 0x12, 0x1d, 0x22, 0x13, 0xf2, 0x32, 0x06, 0x44, 0x0d, 0x18, 0xf1, 0xe6, 0x38, 0x9f, 0x88, 0xde, 0x5b, 0x5e, 0x15, 0x1f, 0x24, 0x9a, 0xd7, 0xb7, 0xfd, 0x69, 0x9d, 0x0f, 0x3c, 0x16, 0x93, 0x6e, 0x9a, 0xc8, 0x5b, 0xc0, 0xe7, 0x5f, 0x5f, 0x96, 0xfc, 0x9f, 0x66, 0x6d, 0xf0, 0x90, 0x66, 0x33, 0x8f, 0x24, 0x99, 0x07, 0x07, 0x1b, 0xd3, 0x41, 0xe5, 0x24, 0x13, 0xb2, 0x40, 0x45, 0x58, 0x2d, 0x34, 0x7c, 0xb6, 0x45, 0x93, 0xa7, 0xa8, 0x59, 0xd6, 0xa1, 0xa8, 0xce, 0x5a, 0xae, 0xfd, 0x9c, 0xc9, 0x19, 0xd5, 0x0c, 0xd5, 0x1b, 0x93, 0xc0, 0x2d, 0xff, 0x6a, 0xf3, 0xa9, 0x84, 0x2b, 0x02, 0xc8, 0x83, 0x5b, 0x2b, 0x5d, 0xd1, 0x89, 0x95, 0x85, 0x67, 0xde, 0x91, 0xdc, 0xc0, 0xf6, 0x20, 0xf1, 0x83, 0xee, 0xb5, 0xf7, 0x62, 0xbf, 0x3c, 0xbd, 0x42, 0xca, 0x5a, 0xe0, 0x9c, 0xb4, 0xf7, 0x3f, 0x23, 0x73, 0xfa, 0xaf, 0xa7, 0xa9, 0x53, 0xf0, 0x39, 0x31, 0x3f, 0xe0, 0x90, 0xf8, 0xc7, 0xef, 0xab, 0x0f, 0x8a, 0xd3, 0xb8, 0xfe, 0xbd, 0x7d, 0x35, 0x5a, 0x70, 0x4b, 0x55, 0x9a, 0x13, 0x7f, 0xa5, 0x26, 0x38, 0xf0, 0xef, 0xb1, 0x9b, 0xff, 0x5e, 0xc9, 0x5f, 0xcd, 0xe4, 0xac, 0x9a, 0xab, 0xd9, 0x5e, 0x14, 0xd2, 0xe5, 0xf8, 0x4c, 0x55, 0x1f, 0x43, 0xbc, 0x53, 0x76, 0x85, 0x5e, 0x71, 0x51, 0x9b, 0x6f, 0x87, 0x72, 0x48, 0x73, 0x9a, 0x20, 0xcd, 0x79, 0x0b, 0x85, 0xba, 0xa0, 0x0d, 0x55, 0x03, 0xda, 0x5c, 0xb0, 0x56, 0xf0, 0x2d, 0x4a, 0xac, 0xc7, 0x60, 0xc9, 0x1f, 0xe1, 0xfd, 0x6e, 0xfb, 0x26, 0xde, 0xf8, 0x17, 0xe5, 0xa9, 0xc5, 0x66, 0x16, 0x02, 0x3b, 0xc9, 0xe2, 0xfe, 0x66, 0x27, 0x65, 0xda, 0xe2, 0xc0, 0xb2, 0xed, 0xfc, 0xbe, 0x17, 0xdb, 0x14, 0x0d, 0xa3, 0x0c, 0x46, 0x6d, 0xe6, 0x5c, 0x49, 0xc6, 0xf8, 0x14, 0x96, 0xbb, 0xbd, 0x1a, 0xcd, 0x81, 0x66, 0x64, 0x55, 0xf2, 0x3b, 0xb2, 0x43, 0xdd, 0x98, 0x7d, 0x7e, 0xa1, 0x36, 0x2a, 0x20, 0xfa, 0xac, 0x84, 0x1f, 0x1a, 0x36, 0x69, 0x2c, 0xfc, 0xb4, 0xc3, 0xdb, 0xf5, 0xf6, 0xbb, 0x05, 0x8c, 0x36, 0x29, 0x6b, 0x8b, 0xe6, 0x4e, 0x9b, 0x56, 0xad, 0xc5, 0x18, 0x7c, 0xac, 0xb7, 0xb5, 0x8c, 0x05, 0x4f, 0x42, 0x2a, 0x9e, 0x6d, 0x6a, 0x61, 0x22, 0x9f, 0xdc, 0x3b, 0x49, 0x4d, 0xa9, 0x8f, 0x5a, 0x33, 0xed, 0x1b, 0xee, 0x14, 0xb2, 0xd2, 0xf6, 0xad, 0x11, 0x77, 0xff, 0xe9, 0x9a, 0x6b, 0xb5, 0x53, 0xf7, 0xc4, 0xa6, 0xd0, 0xcb, 0x9e, 0x49, 0x8e, 0xe0, 0xb6, 0x3f, 0x38, 0x82, 0x35, 0xd8, 0x6c, 0x26, 0xc9, 0xd9, 0x6e, 0x50, 0xfa, 0x7d, 0x1e, 0xb3, 0xbc, 0xb9, 0x27, 0x99, 0x40, 0xc4, 0x7a, 0x85, 0x10, 0xd7, 0xfb, 0x17, 0x5b, 0x32, 0x79, 0x31, 0x8d, 0x5f, 0xe4, 0x58, 0x23, 0xba, 0xba, 0x5d, 0xbe, 0x31, 0xc3, 0x3c, 0x76, 0x49, 0xfe, 0x44, 0x70, 0x61, 0xdb, 0x78, 0xb3, 0x3b, 0xaa, 0x36, 0x37, 0xb8, 0x54, 0x16, 0x3f, 0xe3, 0x49, 0x15, 0xe9, 0x31, 0xb9, 0xf3, 0x04, 0x08, 0x07, 0xd9, 0x21, 0x7d, 0x7b, 0x3f, 0xed, 0x62, 0x37, 0x0d, 0xbe, 0x80, 0x6c, 0x00, 0x6b, 0x21, 0xcd, 0x50, 0x61, 0xd2, 0x44, 0x90, 0xf3, 0x66, 0xe4, 0xd5, 0xf2, 0x3e, 0x20, 0x1a, 0x7e, 0xc8, 0x3a, 0xe3, 0x1b, 0x46, 0xfe, 0x21, 0x08, 0xd1, 0xaf, 0x56, 0xcc, 0x9d, 0x42, 0xf9, 0x11, 0x7e, 0xca, 0x1c, 0xb5, 0xab, 0x34, 0x4c, 0x1f, 0xc3, 0x34, 0xb9, 0xcf, 0x0d, 0x7f, 0x97, 0x39, 0x04, 0x3b, 0xc3, 0xd4, 0x13, 0xb3, 0xaa, 0x6e, 0x9d, 0x50, 0x67, 0xc2, 0x40, 0xc5, 0x2b, 0x4c, 0x5b, 0x89, 0xe2, 0x5c, 0xcd, 0x8a, 0x13, 0x6a, 0x00, 0x20, 0x08, 0xa9, 0x27, 0x3f, 0x30, 0xde, 0xc3, 0xf2, 0xc1, 0x73, 0x6c, 0x04, 0xa1, 0xc7, 0xce, 0x00, 0x87, 0xc9, 0xf2, 0x5d, 0x5e, 0xc5, 0xbf, 0xf2, 0xea, 0x7e, 0xc0, 0xb0, 0xad, 0x7c, 0x27, 0x8f, 0x0c, 0xa7, 0x12, 0xc9, 0xae, 0x15, 0x0e, 0x47, 0x25, 0x21, 0xd9, 0x58, 0xd0, 0xbd, 0x6d, 0xa9, 0xff, 0x09, 0x39, 0x72, 0x59, 0x24, 0xb2, 0xed, 0x7b, 0x41, 0x0a, 0x0c, 0xe2, 0xfe, 0x3f, 0x6b, 0x0b, 0xf2, 0x58, 0x84, 0xd8, 0x85, 0xec, 0x22, 0x36, 0x05, 0xe3, 0x18, 0xfd, 0xf6, 0x80, 0x32, 0x18, 0xa9, 0xa0, 0x6c, 0xe5, 0x10, 0x3c, 0x62, 0xde, 0xd0, 0x35, 0x08, 0x7a, 0x98, 0x51, 0x9b, 0x4e, 0xb1, 0x80, 0xd7, 0x78, 0xd7, 0x65, 0x6b, 0x3d, 0x48, 0x11, 0xaa, 0xf1, 0x1a, 0x12, 0x83, 0x17, 0xd1, 0xac, 0xb3, 0xca, 0x31, 0x66, 0x39, 0x5c, 0x51, 0xc9, 0x0a, 0x3c, 0xf1, 0x64, 0x07, 0x1d, 0x0d, 0x13, 0x2c, 0x54, 0xb3, 0x81, 0x0a, 0x82, 0x11, 0xec, 0x77, 0x74, 0xd2, 0x28, 0x84, 0x47, 0xab, 0xe7, 0xaf, 0xd0, 0x30, 0x37, 0x5a, 0x3b, 0xed, 0x4c, 0x7c, 0xf1, 0xb2, 0x80, 0x97, 0xc0, 0x2e, 0x98, 0xea, 0x36, 0xbf, 0x49, 0xe7, 0x4d, 0x89, 0xfb, 0xe7, 0x4e, 0xc6, 0xcc, 0x1d, 0xef, 0x5c, 0xd8, 0xc8, 0xbe, 0xb5, 0xb8, 0xad, 0xc3, 0xcb, 0x48, 0xc5, 0x61, 0x82, 0xad, 0x33, 0x7e, 0x3b, 0x97, 0x78, 0xe4, 0xa6, 0xc4, 0xea, 0xe6, 0xd7, 0xc6, 0x63, 0x46, 0x9d, 0x05, 0x36, 0x56, 0x0f, 0x07, 0x67, 0x5e, 0x67, 0xef, 0x1b, 0x3e, 0x14, 0x44, 0x4d, 0x54, 0x0a, 0xf4, 0xc3, 0xa0, 0x5d, 0x99, 0x40, 0x26, 0x0e, 0xfa, 0xfc, 0x94, 0x25, 0xd5, 0x51, 0x25, 0xff, 0xdc, 0xb7, 0xc5, 0xea, 0xfd, 0xf2, 0x76, 0xef, 0xe6, 0x8a, 0xf2, 0xef, 0xc9, 0x7c, 0x92, 0xf2, 0x5c, 0x2f, 0x6e, 0xbb, 0x25, 0xa9, 0xc6, 0xa0, 0xf4, 0x03, 0xa1, 0x98, 0xb1, 0x1a, 0xb3, 0x96, 0x57, 0x88, 0x84, 0x15, 0x41, 0xd3, 0xcf, 0xf4, 0xa5, 0xe3, 0x28, 0x85, 0x5e, 0xba, 0xe2, 0xe1, 0xee, 0x5f, 0x30, 0x7e, 0xc3, 0x1b, 0x8a, 0x03, 0xb9, 0xe8, 0x53, 0x5a, 0xe1, 0x27, 0xb8, 0x07, 0x81, 0x91, 0xdb, 0xb9, 0x5b, 0x70, 0x31, 0x1f, 0x32, 0x0f, 0x28, 0xfd, 0x8b, 0x6f, 0x0e, 0x7f, 0xb1, 0x3b, 0x2e, 0xcd, 0xfb, 0xfe, 0x3c, 0xdf, 0x51, 0x94, 0xf3, 0x93, 0xed, 0xdf, 0xfc, 0xfd, 0x5f, 0xbb, 0x12, 0xfe, 0xd4, 0x33, 0x64, 0x18, 0x97, 0xf5, 0x3a, 0x80, 0xd8, 0x03, 0xdc, 0x75, 0xad, 0xac, 0xb0, 0xd1, 0x56, 0xbb, 0xa2, 0xde, 0xc5, 0xee, 0xc8, 0x6a, 0x5e, 0xa9, 0x46, 0x1e, 0xfb, 0xec, 0x70, 0x0b, 0x33, 0x83, 0x2f, 0x86, 0xdc, 0x7c, 0xa6, 0x36, 0xce, 0xde, 0x15, 0x6b, 0xea, 0x98, 0xfd, 0xb1, 0x5b, 0xb8, 0x85, 0xa6, 0x1c, 0xdd, 0x1c, 0x08, 0xba, 0xef, 0x60, 0x12, 0x5c, 0x0d, 0x3e, 0x09, 0x00, 0xc7, 0x5b, 0x12, 0x07, 0x8e, 0xb3, 0x46, 0xf4, 0x68, 0x81, 0x08, 0x71, 0xe9, 0x5e, 0x96, 0x93, 0x5e, 0xac, 0xdf, 0x5e, 0x4b, 0x35, 0x95, 0x8c, 0x18, 0x10, 0x82, 0x8a, 0x07, 0xc5, 0x1f, 0xc4, 0x69, 0xb0, 0x63, 0x22, 0x12, 0xab, 0xd9, 0xd2, 0x0a, 0xe7, 0xf5, 0x49, 0x85, 0x1b, 0xa8, 0x84, 0x15, 0xe1, 0x32, 0x94, 0x1f, 0x5c, 0x38, 0x59, 0x8c, 0x1f, 0x16, 0x8e, 0xc0, 0x4a, 0x76, 0x05, 0xd0, 0xf6, 0x22, 0x34, 0xef, 0xd4, 0x16, 0xf1, 0x2a, 0x10, 0xda, 0x7a, 0x56, 0x7c, 0x0e, 0xb8, 0x46, 0xea, 0x46, 0xc5, 0x41, 0xd9, 0x19, 0xab, 0xb2, 0x55, 0x75, 0x6f, 0x22, 0x18, 0x35, 0x4e, 0x64, 0xf5, 0xf6, 0x46, 0x0f, 0x77, 0x26, 0xd8, 0x32, 0xc5, 0x5d, 0x0d, 0x42, 0xc8, 0xf1, 0xb7, 0x57, 0x90, 0xc5, 0xf9, 0x98, 0xf4, 0x61, 0x09, 0xf4, 0x79, 0x48, 0x35, 0x14, 0x76, 0x85, 0x24, 0x8d, 0x75, 0x88, 0x5f, 0x59, 0xdb, 0x30, 0x0f, 0x88, 0xcc, 0x29, 0x09, 0x33, 0x49, 0x78, 0x07, 0xb2, 0x9b, 0x54, 0x38, 0x0e, 0xf5, 0x38, 0xfc, 0xb9, 0x55, 0x36, 0xe8, 0x7d, 0xab, 0x8e, 0x11, 0xb3, 0x3d, 0x7f, 0x87, 0xb5, 0x4a, 0x5d, 0x1f, 0x96, 0xed, 0xe4, 0x76, 0x10, 0x45, 0xcc, 0x32, 0xbd, 0xd3, 0x9d, 0x8b, 0x8a, 0x23, 0xc5, 0x0b, 0x6a, 0xaf, 0xe8, 0x91, 0x47, 0x00, 0x77, 0x9c, 0x3e, 0x16, 0x84, 0xc6, 0x0b, 0x0a, 0xd5, 0x8f, 0xc2, 0xf2, 0x37, 0x5c, 0xc1, 0x05, 0x14, 0xc0, 0xe2, 0x00, 0x48, 0xf9, 0xf5, 0xc8, 0x31, 0xbe, 0x6d, 0x50, 0x05, 0x38, 0x59, 0xbd, 0x69, 0x4e, 0x96, 0xc8, 0x3f, 0x25, 0x43, 0x64, 0xbf, 0xe7, 0x76, 0xa1, 0xc9, 0xc4, 0x2d, 0xd1, 0x79, 0x37, 0x88, 0xe9, 0xfd, 0x8b, 0x35, 0x2a, 0xa3, 0x9d, 0x2b, 0x00, 0x36, 0xe3, 0x9b, 0x2a, 0x8b, 0xad, 0x23, 0x1b, 0x57, 0xab, 0x46, 0xa0, 0x43, 0xb0, 0x19, 0xc4, 0x43, 0xb5, 0x3e, 0xf1, 0x23, 0x21, 0x16, 0x57, 0x63, 0x48, 0x33, 0x91, 0x44, 0x31, 0x0c, 0x86, 0x23, 0x9c, 0xf5, 0x8e, 0x06, 0x43, 0x4e, 0xd7, 0x75, 0x61, 0xfa, 0x06, 0x8b, 0x71, 0x13, 0x21, 0x4c, 0x38, 0xdb, 0xac, 0x39, 0x05, 0xf6, 0x12, 0x22, 0x38, 0xd7, 0x47, 0x3c, 0x01, 0x79, 0xac, 0x73, 0x6a, 0x4f, 0x33, 0x01, 0x98, 0x7d, 0xc3, 0x40, 0x4d, 0x48, 0xde, 0xbc, 0xb2, 0xcb, 0x81, 0x8d, 0x54, 0xec, 0x4b, 0xe4, 0x6c, 0x8f, 0xe2, 0xe3, 0x63, 0x0a, 0x93, 0xb2, 0x95, 0xd8, 0x38, 0xcf, 0x56, 0x91, 0x5f, 0xa5, 0x32, 0x19, 0xa8, 0x61, 0x79, 0x18, 0x6f, 0x01, 0xfc, 0xab, 0xab, 0xad, 0x11, 0x5a, 0x16, 0x4b, 0xdd, 0x49, 0x8f, 0x4e, 0xd2, 0xb2, 0xbc, 0xce, 0x76, 0x92, 0xf3, 0xde, 0x66, 0xa3, 0x5b, 0x1a, 0x9b, 0x8b, 0x4e, 0x7f, 0xed, 0x53, 0x02, 0x80, 0xd5, 0x1a, 0x69, 0x55, 0x77, 0x0b, 0x55, 0x97, 0xe0, 0x8c, 0xe0, 0x0a, 0x8c, 0xb8, 0x0b, 0xba, 0x2b, 0x10, 0xa5, 0x49, 0xa4, 0x6d, 0x6f, 0x87, 0x5b, 0x3a, 0x7d, 0x43, 0xb0, 0xdf, 0xdf, 0x61, 0xc8, 0x80, 0x81, 0x2d, 0x8f, 0xe8, 0x50, 0xef, 0xfd, 0xc0, 0x9e, 0xc0, 0x99, 0x05, 0xc8, 0x9b, 0x3c, 0xb9, 0x16, 0xb7, 0x18, 0xd8, 0xe2, 0x14, 0xf8, 0x8d, 0xfd, 0x54, 0xc9, 0xa6, 0x4e, 0xcd, 0x5a, 0x46, 0xbc, 0xdc, 0x60, 0xd9, 0x4f, 0x7c, 0xbd, 0x4d, 0x91, 0x17, 0x02, 0x80, 0x3b, 0x9c, 0x32, 0xf4, 0x0d, 0xd1, 0xc9, 0xca, 0xfe, 0xeb, 0xfc, 0xee, 0x95, 0x5c, 0x43, 0x8f, 0x97, 0xec, 0x15, 0xd2, 0xe2, 0x0b, 0xf2, 0xc7, 0x99, 0x65, 0xa7, 0x9c, 0x81, 0xb8, 0xce, 0x10, 0xab, 0xe2, 0x94, 0x2b, 0x54, 0x3f, 0xbf, 0x2c, 0x09, 0x31, 0xef, 0xc4, 0x0f, 0x00, 0x23, 0x81, 0x01, 0xe5, 0x80, 0x8d, 0xbb, 0x61, 0x4e, 0x98, 0x77, 0xd3, 0x44, 0x13, 0x36, 0x4a, 0x05, 0x9f, 0x62, 0x98, 0xea, 0xc5, 0xb1, 0xa8, 0x02, 0xe7, 0x4c, 0x11, 0x57, 0x76, 0x31, 0xea, 0x73, 0x66, 0xd5, 0xe1, 0x23, 0xdf, 0x0e, 0x87, 0x7b, 0x36, 0x31, 0xee, 0x1a, 0x1b, 0x77, 0x76, 0xb0, 0x14, 0xa6, 0xe4, 0xbd, 0x2a, 0xed, 0xb4, 0x9b, 0xe1, 0x0f, 0xb1, 0xbe, 0x6e, 0xc4, 0xc2, 0x3b, 0x25, 0x5c, 0x07, 0x87, 0x31, 0xa5, 0x24, 0x81, 0x87, 0x0f, 0xdd, 0xb3, 0x1d, 0x0e, 0xe4, 0xd5, 0x56, 0xc0, 0xee, 0x93, 0xc1, 0xd0, 0x0c, 0x91, 0x04, 0x9a, 0x39, 0xab, 0x13, 0x8f, 0x2f, 0x81, 0xa6, 0xdb, 0x80, 0x33, 0xe9, 0x46, 0xe1, 0x69, 0x75, 0x58, 0xc9, 0x97, 0x7f, 0xc1, 0x3b, 0x7f, 0x4f, 0xf8, 0xdf, 0xf7, 0xf4, 0x21, 0x58, 0xec, 0x37, 0x34, 0xd2, 0xa7, 0xcd, 0x5c, 0xda, 0x4f, 0xd1, 0x9d, 0x73, 0xaf, 0x71, 0xba, 0x66, 0x3a, 0xe7, 0x56, 0xd9, 0x4c, 0xab, 0x59, 0x23, 0xb3, 0xe6, 0x95, 0xdf, 0x6e, 0x2a, 0xaa, 0x3f, 0xb4, 0x61, 0x26, 0xa4, 0x39, 0x04, 0xf1, 0x6b, 0xac, 0x8e, 0xe9, 0x09, 0x84, 0x2f, 0xc9, 0x5a, 0xfc, 0xc4, 0x4f, 0x36, 0x5c, 0x07, 0x9e, 0x46, 0x7b, 0x03, 0xe1, 0x15, 0x82, 0xcc, 0x31, 0x6a, 0xf2, 0x6c, 0xb9, 0xd6, 0xe9, 0x20, 0x17, 0x89, 0xa1, 0xc5, 0x06, 0x69, 0x39, 0x8d, 0x3a, 0x66, 0xb8, 0xf6, 0x8c, 0x07, 0x4f, 0xfd, 0x57, 0x49, 0xde, 0x8e, 0x22, 0xaa, 0xba, 0x40, 0x7f, 0x81, 0xae, 0x3f, 0x32, 0x90, 0x3f, 0x89, 0x96, 0xdc, 0x34, 0x5e, 0x3d, 0xbd, 0x56, 0xf1, 0xd7, 0x31, 0x75, 0x64, 0x55, 0x75, 0xab, 0xf3, 0x4e, 0xd7, 0xe5, 0x70, 0xa1, 0xc6, 0x9e, 0xef, 0x5c, 0x2b, 0xee, 0xc2, 0xdc, 0xfc, 0xc4, 0xa8, 0x36, 0x0d, 0x6f, 0x41, 0xd6, 0x2a, 0x64, 0xc5, 0x66, 0x64, 0x3b, 0xf6, 0xf2, 0xa8, 0xfa, 0x53, 0x49, 0x96, 0x96, 0x8f, 0xa6, 0x8f, 0xb7, 0x41, 0x8f, 0x10, 0xbc, 0xdd, 0xfe, 0x3f, 0xff, 0xe3, 0xbf, 0xc4, 0x5a, 0x56, 0x19, 0xda, 0xea, 0x70, 0xb0, 0xa6, 0x12, 0x94, 0xaa, 0xc7, 0xc3, 0x84, 0x11, 0x2e, 0xfb, 0xd4, 0x78, 0x30, 0x8c, 0x9f, 0xe2, 0xd9, 0x1f, 0x78, 0xdf, 0x84, 0x78, 0xa3, 0xf8, 0xa8, 0xfc, 0x86, 0x4d, 0xf5, 0x70, 0x5a, 0x7d, 0xa0, 0x03, 0x26, 0xc6, 0xfb, 0x8f, 0xee, 0x6e, 0x48, 0x1c, 0x27, 0x61, 0xcf, 0xa6, 0x6f, 0x1b, 0x2e, 0x20, 0x7b, 0xc8, 0xf1, 0xb8, 0x51, 0xaa, 0x62, 0x5d, 0xb7, 0xbc, 0xa2, 0x7e, 0xeb, 0x95, 0xf9, 0x15, 0x94, 0x8e, 0x6b, 0xe5, 0xf9, 0x27, 0x8c, 0xff, 0x71, 0xa7, 0x95, 0x8b, 0x1a, 0x03, 0xb6, 0xc5, 0xce, 0x01, 0xae, 0x46, 0x53, 0x9d, 0x9a, 0x85, 0xd2, 0xac, 0x0a, 0x9d, 0x8b, 0xbf, 0x5a, 0x51, 0xc6, 0x4a, 0x40, 0x4d, 0x0d, 0x06, 0xa1, 0xae, 0x98, 0x93, 0xa9, 0xc5, 0x09, 0x62, 0x1a, 0x18, 0x5a, 0xd2, 0xe4, 0xaa, 0x13, 0x99, 0xf7, 0x7d, 0xc0, 0x66, 0x55, 0x54, 0xa2, 0xc5, 0x6b, 0xbd, 0xa5, 0x42, 0xa1, 0x4f, 0x92, 0xd1, 0x30, 0x31, 0x86, 0x6d, 0x33, 0xdc, 0xa3, 0x00, 0x02, 0x21, 0x05, 0x83, 0xbb, 0x6d, 0xf7, 0x66, 0x21, 0x4c, 0x67, 0x32, 0xaa, 0x2c, 0x98, 0x6d, 0xd3, 0x64, 0x17, 0xbe, 0xb7, 0x74, 0xf0, 0x51, 0xe0, 0x8e, 0x21, 0x7d, 0x5d, 0x56, 0x4f, 0xa4, 0x14, 0xe7, 0xb8, 0x5b, 0x5a, 0x16, 0x69, 0xcb, 0xc1, 0xfa, 0xb1, 0x57, 0x31, 0xac, 0xd5, 0x80, 0x3b, 0x4b, 0x05, 0x05, 0xa9, 0x43, 0x8f, 0x4e, 0x5a, 0xcf, 0x53, 0x0a, 0x4d, 0xbd, 0x77, 0x18, 0xfb, 0x72, 0x5c, 0xa3, 0xea, 0x2d, 0xd0, 0x92, 0x7f, 0x90, 0x85, 0x1f, 0x14, 0x5c, 0xc1, 0xc5, 0x4a, 0x7c, 0x58, 0x60, 0xa0, 0x45, 0xd8, 0x90, 0x45, 0xfc, 0x03, 0x5e, 0x2b, 0x98, 0x82, 0x22, 0x5d, 0xca, 0xd7, 0xa4, 0x92, 0x3b, 0x94, 0x81, 0x02, 0x15, 0xca, 0xd0, 0x78, 0xc4, 0xc5, 0x06, 0xa9, 0xfe, 0xf6, 0x17, 0xc4, 0x00, 0x31, 0xde, 0x4a, 0x1b, 0x19, 0xbf, 0x20, 0x70, 0xd8, 0x8b, 0xe3, 0xf8, 0x13, 0xa3, 0x7b, 0xc7, 0x1c, 0x61, 0xf3, 0x91, 0x6a, 0xb3, 0x87, 0x6d, 0x47, 0x09, 0xff, 0xd9, 0xc9, 0x72, 0x3c, 0xfe, 0x03, 0x01, 0x11, 0x36, 0x7c, 0x76, 0x54, 0xcc, 0xe1, 0x1a, 0x34, 0x03, 0xf6, 0xeb, 0xcc, 0x59, 0xd2, 0xf9, 0xf9, 0x0c, 0x4c, 0x10, 0x69, 0xde, 0xb1, 0x97, 0xf5, 0x15, 0xb8, 0xb8, 0x31, 0xc7, 0xb7, 0xc2, 0x41, 0x54, 0x16, 0xcb, 0xee, 0x34, 0x04, 0x99, 0xf9, 0xf3, 0x6a, 0xc3, 0xae, 0x79, 0x1d, 0x13, 0xbd, 0x8f, 0x58, 0x2f, 0x46, 0x9f, 0x69, 0x78, 0x33, 0xbb, 0xaa, 0x33, 0xca, 0xe1, 0xb3, 0xe7, 0x82, 0x7e, 0xce, 0x05, 0x16, 0x30, 0xac, 0xce, 0xd9, 0xd0, 0x56, 0x72, 0x49, 0xb0, 0x65, 0x75, 0xe6, 0x21, 0x76, 0x57, 0x45, 0x39, 0xd9, 0x74, 0x60, 0xd3, 0x89, 0x29, 0x30, 0xd6, 0x61, 0x38, 0x7e, 0xbb, 0x8c, 0x6e, 0xf6, 0x49, 0x3e, 0x83, 0x7d, 0xa3, 0xa1, 0x41, 0xc4, 0x85, 0x13, 0xe8, 0x1d, 0xcb, 0x8e, 0xd2, 0x8e, 0x33, 0x67, 0x53, 0x24, 0x63, 0x3c, 0xe3, 0x8a, 0x2e, 0x28, 0x7f, 0xda, 0x13, 0x38, 0x4c, 0xb3, 0x06, 0x23, 0x7e, 0x8c, 0x74, 0x35, 0x78, 0x48, 0x81, 0x8d, 0x34, 0x0a, 0x94, 0x88, 0xe6, 0x4a, 0x15, 0x7d, 0xdc, 0x29, 0x75, 0xab, 0xa9, 0x01, 0x6f, 0x6f, 0x82, 0x41, 0x8e, 0xbb, 0xe8, 0x78, 0xf0, 0xc3, 0x88, 0xaf, 0x49, 0xf9, 0x5f, 0xfc, 0x2a, 0x3c, 0x21, 0x54, 0x84, 0x4c, 0xdc, 0xa1, 0x68, 0x82, 0xd8, 0x14, 0x10, 0xbe, 0xc3, 0xbd, 0x23, 0xa0, 0x0a, 0x59, 0x35, 0xfb, 0x8a, 0x6b, 0x8d, 0x86, 0x68, 0x8e, 0x2c, 0xd5, 0x3d, 0x09, 0x0b, 0x88, 0x77, 0xa4, 0xa3, 0xc3, 0xfc, 0xba, 0xb2, 0xde, 0x10, 0x90, 0x3d, 0x5d, 0x78, 0xe5, 0xd1, 0x22, 0xdf, 0xca, 0x0f, 0xe1, 0x7a, 0xb4, 0x68, 0xd5, 0xe8, 0xd0, 0x24, 0xb1, 0x5c, 0x96, 0xa9, 0xda, 0xfd, 0xa1, 0xfa, 0xd3, 0x8d, 0xbe, 0x7e, 0xf8, 0x49, 0x43, 0x03, 0x70, 0x11, 0xa2, 0x02, 0x5d, 0xc9, 0x3d, 0x24, 0x55, 0xff, 0x7c, 0x06, 0x16, 0xce, 0x1d, 0x39, 0x75, 0x02, 0xcc, 0x8e, 0x98, 0x7c, 0xf4, 0x90, 0x65, 0xd9, 0xd4, 0x51, 0x3a, 0x4e, 0xd5, 0x6a, 0xdf, 0xd6, 0x1b, 0x3d, 0xb9, 0x90, 0x5a, 0x7d, 0x40, 0x62, 0xeb, 0xf1, 0xb3, 0xe3, 0x1f, 0x74, 0x0a, 0x78, 0xd3, 0x41, 0x2c, 0xbd, 0x44, 0x6d, 0x62, 0x26, 0x25, 0xb5, 0x0b, 0xe6, 0xef, 0x7a, 0x92, 0x0f, 0x79, 0x0a, 0x9e, 0xfb, 0xc8, 0x21, 0x88, 0xec, 0x28, 0xb0, 0x12, 0xef, 0x7b, 0xdc, 0x56, 0x06, 0xd2, 0x4a, 0xfc, 0x85, 0x3a, 0x9a, 0xb0, 0xbd, 0xd9, 0x31, 0xd3, 0xd8, 0x39, 0x3c, 0x71, 0x04, 0xe3, 0xf1, 0x74, 0xd4, 0x30, 0x18, 0x17, 0xe2, 0x5c, 0xcb, 0x9d, 0xba, 0xdc, 0x7a, 0x42, 0xf3, 0xf1, 0x32, 0x72, 0x9f, 0x7e, 0x1e, 0x39, 0xe6, 0x17, 0x4e, 0xfb, 0xed, 0x5a, 0xb7, 0x65, 0xfd, 0x82, 0x7b, 0xa3, 0xe1, 0x39, 0x6b, 0xd3, 0x8f, 0xae, 0xca, 0xba, 0x0b, 0xe8, 0x54, 0xb6, 0x89, 0x5a, 0x7f, 0xf4, 0xd2, 0xb7, 0x01, 0xe3, 0xe8, 0x07, 0x92, 0xe9, 0xed, 0xfb, 0xf3, 0x54, 0x41, 0x7d, 0x2f, 0x93, 0xeb, 0x8c, 0x21, 0xa6, 0x3a, 0x47, 0x36, 0xd3, 0xab, 0x47, 0x75, 0x9b, 0x0e, 0x32, 0xbc, 0xec, 0xe5, 0x8d, 0x4c, 0x98, 0x0d, 0xd2, 0x87, 0x06, 0xa0, 0xc3, 0xf9, 0x28, 0x19, 0xfd, 0x96, 0xac, 0xb9, 0xd0, 0x42, 0x77, 0x2a, 0x4e, 0x97, 0x4f, 0x63, 0xa2, 0xe2, 0xd7, 0xcb, 0xa4, 0x6e, 0xc1, 0xa1, 0xaa, 0x06, 0x3f, 0x9b, 0xa0, 0xb5, 0xba, 0xcd, 0x5b, 0xd0, 0xc7, 0xcd, 0x2a, 0x36, 0x57, 0x15, 0xae, 0xd7, 0x2d, 0xa8, 0xec, 0x73, 0x96, 0xf9, 0xa1, 0xa4, 0x54, 0x08, 0xd5, 0x1f, 0xdb, 0xce, 0xb3, 0x37, 0xc0, 0xdb, 0x98, 0xa3, 0x6e, 0x3e, 0x6a, 0x80, 0x1b, 0xa5, 0x2b, 0x9a, 0xfa, 0xc5, 0xce, 0xe7, 0xb2, 0xfc, 0x49, 0x54, 0x10, 0x35, 0xeb, 0xc4, 0xf8, 0x0d, 0xf0, 0x56, 0xa2, 0x34, 0x53, 0xe7, 0x03, 0x15, 0xe3, 0xd9, 0x88, 0xb9, 0x99, 0x12, 0x0a, 0xe8, 0x29, 0x47, 0xff, 0x92, 0xd7, 0x7a, 0xed, 0x6e, 0x8c, 0xc1, 0x25, 0xe1, 0x29, 0x4a, 0xad, 0x21, 0x1b, 0x9c, 0x7e, 0x9a, 0x30, 0x1f, 0xef, 0x91, 0xa8, 0xdf, 0x72, 0x07, 0x90, 0x8d, 0x7e, 0xe0, 0x4b, 0xc7, 0xcc, 0x44, 0x72, 0x98, 0xc6, 0x46, 0xde, 0x43, 0x3d, 0xc3, 0x02, 0x3c, 0x5a, 0x8d, 0x7e, 0x78, 0xd7, 0xc9, 0xf2, 0xe6, 0x6e, 0x96, 0x10, 0x3e, 0x92, 0xf0, 0xf6, 0xf9, 0x5e, 0xd3, 0xba, 0xa0, 0xcb, 0xa3, 0x46, 0x4a, 0x25, 0xcb, 0x66, 0x61, 0xc0, 0xa5, 0x1f, 0xa4, 0xe7, 0x9a, 0x43, 0x72, 0x15, 0x8a, 0x42, 0x45, 0x68, 0x6d, 0x43, 0x7d, 0x52, 0x3b, 0x73, 0x5f, 0x92, 0x0a, 0x9d, 0x5d, 0x62, 0x76, 0xfc, 0x97, 0xf2, 0x46, 0x4d, 0xa3, 0x16, 0x4d, 0x27, 0x89, 0x3b, 0x8d, 0x8f, 0x12, 0xa0, 0xa3, 0xc8, 0x43, 0xc3, 0x5f, 0x68 ],
- const [ 0xe7, 0x06, 0x53, 0x63, 0x7b, 0xc5, 0xe3, 0x88, 0xcc, 0xd8, 0xdc, 0x44, 0xe5, 0xea, 0xce, 0x36, 0xf7, 0x39, 0x8f, 0x2b, 0xac, 0x99, 0x30, 0x42, 0xb9, 0xbc, 0x2f, 0x4f, 0xb3, 0xb0, 0xee, 0x7e, 0x23, 0xa9, 0x64, 0x39, 0xdc, 0x01, 0x13, 0x4b, 0x8c, 0x7d, 0x3a, 0x45, 0x92, 0xd2, 0x4b, 0x20, 0x0f, 0x68, 0x9f, 0x25, 0x40, 0x5d, 0x69, 0x0a, 0x0b, 0xcd, 0xe9, 0x5e, 0xd7, 0x51, 0xe2, 0x27, 0xa1, 0xc5, 0x4d, 0xc9, 0x4c, 0x4f, 0x4f, 0x29, 0x39, 0x9c, 0x69, 0x13, 0x18, 0x6d, 0xef, 0xd9, 0xfe, 0x53, 0xbb, 0x3d, 0xb7, 0xb6, 0x22, 0x91, 0x5d, 0x1c, 0x27, 0x1d, 0x29, 0xa8, 0xef, 0xc1, 0x8a, 0xe1, 0x75, 0xdc, 0x74, 0xb6, 0x7f, 0x6c, 0xfb, 0xbe, 0xd1, 0x76, 0x20, 0xc4, 0xa0, 0xa8, 0xeb, 0x82, 0x49, 0x3d, 0xba, 0xad, 0x43, 0x21, 0xd8, 0x32, 0x52, 0x55, 0x51, 0xc0, 0xfe, 0x96, 0x05, 0x86, 0x44, 0x39, 0xfc, 0x3e, 0x8b, 0x5a, 0xf9, 0x6a, 0xda, 0x35, 0x52, 0xdd, 0x47, 0xd4, 0xfe, 0x7e, 0xb3, 0xeb, 0xf0, 0x49, 0xb4, 0x00, 0xa3, 0x96, 0xd3, 0xce, 0xf7, 0x9e, 0xf8, 0xec, 0x3b, 0x3b, 0x22, 0xaa, 0x8b, 0xef, 0x5b, 0x3c, 0x5c, 0x28, 0xec, 0x1a, 0x55, 0xc2, 0xcd, 0xa6, 0x61, 0xce, 0x5f, 0x0f, 0x02, 0x92, 0x5d, 0x76, 0xe8, 0xd0, 0x10, 0x50, 0xc2, 0x4c, 0xc3, 0x0c, 0x54, 0x88, 0x77, 0xf5, 0xc9, 0xd2, 0xd8, 0x59, 0x4b, 0x80, 0x6f, 0xeb, 0xd2, 0x7b, 0x18, 0x66, 0x39, 0xfa, 0xb7, 0x73, 0x97, 0x90, 0x27, 0xcd, 0xcc, 0x69, 0x73, 0xa3, 0x5a, 0xd1, 0x49, 0x3e, 0x77, 0xf5, 0xab, 0xe3, 0x60, 0xee, 0xe8, 0xfb, 0xef, 0xfb, 0xcb, 0x71, 0x70, 0x0e, 0x12, 0x5c, 0xb1, 0x8b, 0x21, 0xde, 0x58, 0x4c, 0xf8, 0x4b, 0x79, 0xe8, 0x63, 0x8e, 0x68, 0x35, 0x70, 0xc9, 0xcc, 0x0b, 0x26, 0x3c, 0xf5, 0x4b, 0x74, 0x68, 0x70, 0x20, 0x68, 0x74, 0xd8, 0x85, 0xa2, 0xcf, 0xee, 0x08, 0x07, 0x17, 0xec, 0xcd, 0xba, 0x3a, 0x17, 0xd5, 0x48, 0xdb, 0x94, 0x80, 0x22, 0xf7, 0x7c, 0x51, 0x51, 0xc8, 0x33, 0xf2, 0x65, 0xe9, 0xf5, 0x78, 0xae, 0xbc, 0xb1, 0xe7, 0xaf, 0x09, 0x1b, 0xf9, 0xd0, 0xe7, 0xfd, 0x1b, 0x53, 0xe0, 0xcd, 0xb9, 0x89, 0x50, 0x85, 0xbb, 0x46, 0x0e, 0xaf, 0x50, 0x92, 0x4e, 0xbf, 0xea, 0xa1, 0xc6, 0xa6, 0x8a, 0x06, 0x10, 0xa4, 0x3d, 0x23, 0x50, 0x5e, 0xe6, 0xe4, 0x16, 0x30, 0x3f, 0xad, 0x86, 0xc4, 0x1b, 0x90, 0xb6, 0xe4, 0xee, 0xc4, 0x57, 0x8c, 0x8e, 0x52, 0x98, 0x44, 0x3b, 0x12, 0x47, 0xac, 0xde, 0xd6, 0x39, 0x59, 0x8e, 0xe5, 0xed, 0xdf, 0x58, 0xab, 0x6c, 0x2f, 0x40, 0xae, 0x73, 0x24, 0x83, 0xc4, 0xd4, 0x58, 0x1f, 0x84, 0x1a, 0x3c, 0x95, 0xfa, 0x6c, 0x68, 0xee, 0x9f, 0xb4, 0x2f, 0xfc, 0x87, 0x00, 0x77, 0xe2, 0xdd, 0x28, 0xc7, 0xd7, 0x8d, 0xb1, 0xa2, 0x26, 0x40, 0xf1, 0x14, 0x79, 0x8d, 0x74, 0x8a, 0x58, 0x6d, 0x9f, 0xe7, 0xed, 0xf0, 0x93, 0xd3, 0x0a, 0x2f, 0x54, 0x56, 0x6d, 0x82, 0x2b, 0xa7, 0x42, 0xf3, 0x48, 0x3e, 0xe9, 0xf2, 0xac, 0x30, 0xfa, 0x4a, 0x46, 0xbc, 0x86, 0x53, 0x5c, 0x21, 0xa0, 0x69, 0x2d, 0xb3, 0x1c, 0x9e, 0xd5, 0x2e, 0x97, 0xac, 0x70, 0x4a, 0xb8, 0x2e, 0x82, 0x90, 0xb4, 0x0f, 0x97, 0x6b, 0x18, 0x42, 0x26, 0x82, 0xc3, 0xb3, 0xbb, 0x45, 0x31, 0x7e, 0x55, 0xc6, 0x00, 0x60, 0x0d, 0xcb, 0xac, 0x6a, 0xf9, 0x21, 0x9e, 0xfd, 0x50, 0x33, 0x65, 0xf2, 0xcf, 0xdb, 0x43, 0x19, 0x5b, 0x77, 0xeb, 0xe5, 0xe7, 0x40, 0x89, 0x65, 0x98, 0xd7, 0x03, 0x76, 0x27, 0x21, 0x7e, 0x38, 0x88, 0x55, 0x25, 0xbe, 0xc9, 0x53, 0x25, 0x0a, 0x3c, 0x38, 0xfc, 0x38, 0xd8, 0x2f, 0xf4, 0xf9, 0xdd, 0x8a, 0xea, 0x43, 0xb7, 0x11, 0x54, 0x47, 0x25, 0x99, 0x83, 0xa4, 0x9a, 0xd9, 0x25, 0xda, 0xe4, 0x7a, 0x0d, 0x01, 0x0b, 0x6d, 0x37, 0xbb, 0x7c, 0x81, 0x06, 0x67, 0x66, 0x35, 0xd1, 0x97, 0x65, 0xca, 0x9e, 0xc4, 0x5e, 0x9d, 0x2d, 0x41, 0xaa, 0xb4, 0x39, 0x6e, 0x76, 0x97, 0xfa, 0x2e, 0x69, 0x61, 0xee, 0x9b, 0x88, 0x16, 0xd9, 0xf8, 0x57, 0x37, 0x0b, 0xe6, 0x41, 0x94, 0xe1, 0xdb, 0x3a, 0x62, 0x8e, 0xd1, 0xa3, 0x8d, 0x1b, 0x3b, 0x6e, 0x50, 0xad, 0x3d, 0x82, 0x02, 0x07, 0x1c, 0x61, 0x33, 0x4f, 0xf4, 0x08, 0xf7, 0x15, 0xa9, 0x17, 0x82, 0x91, 0x1f, 0x31, 0xf5, 0x2c, 0xae, 0xa6, 0x78, 0x43, 0xd0, 0x4f, 0x89, 0x27, 0x1d, 0xba, 0x93, 0x68, 0x7a, 0x87, 0xc3, 0x53, 0x8d, 0x12, 0x17, 0xb9, 0x74, 0x53, 0xb8, 0xf2, 0xb6, 0x02, 0x89, 0x22, 0x79, 0xfe, 0x00, 0xbb, 0xf6, 0xef, 0x35, 0x43, 0x2b, 0x2a, 0x38, 0x58, 0xcf, 0xd6, 0xa8, 0xf1, 0x8b, 0x4d, 0x81, 0xe6, 0x67, 0xc5, 0x36, 0xb3, 0x83, 0x30, 0x00, 0x79, 0x07, 0x61, 0x75, 0x45, 0x5c, 0x6f, 0x5c, 0x95, 0x9d, 0x5e, 0xc0, 0x18, 0x48, 0xfc, 0x43, 0xb6, 0x3a, 0x0a, 0xb5, 0xd0, 0xda, 0x9c, 0xe5, 0xc9, 0x94, 0xc3, 0xb7, 0xc5, 0x89, 0x68, 0x77, 0xb0, 0x84, 0x7b, 0x6d, 0x83, 0x30, 0x4e, 0xb2, 0xc2, 0x89, 0x3b, 0x42, 0x49, 0x91, 0x8d, 0x51, 0x49, 0x44, 0x9e, 0xe3, 0x8e, 0xcd, 0x3c, 0x97, 0x03, 0xfa, 0x51, 0xc3, 0x77, 0xee, 0xc3, 0xc6, 0xa1, 0x16, 0x9a, 0x9a, 0x62, 0x5e, 0x61, 0xa9, 0x4b, 0xa4, 0xce, 0xe2, 0x5f, 0x6c, 0xa5, 0x0b, 0x1a, 0xd6, 0xd9, 0x59, 0xb2, 0xce, 0xf4, 0x3e, 0x9c, 0x83, 0xba, 0x82, 0x52, 0x1a, 0x09, 0x95, 0x54, 0xa3, 0x04, 0x24, 0x6c, 0x4c, 0x71, 0xea, 0x37, 0xd4, 0x5e, 0xc9, 0xe1, 0x43, 0x0b, 0x19, 0x30, 0xd9, 0x04, 0x40, 0xc4, 0x44, 0x8e, 0x82, 0x9d, 0x16, 0x44, 0x1b, 0xdd, 0x75, 0x02, 0x8b, 0xcf, 0x14, 0x02, 0x32, 0x29, 0x63, 0x45, 0x1c, 0x8e, 0x03, 0x35, 0x1e, 0x57, 0x7d, 0x88, 0x22, 0x93, 0x33, 0x67, 0xbf, 0x4c, 0x97, 0xd0, 0x0d, 0x0d, 0x9a, 0x39, 0xb7, 0xa0, 0x68, 0x76, 0x51, 0x1c, 0x52, 0xdc, 0xec, 0x20, 0x0b, 0xa7, 0xe8, 0x59, 0x18, 0x99, 0x0a, 0x4a, 0x82, 0xe4, 0xce, 0x4c, 0xce, 0x4a, 0xff, 0xd3, 0x2e, 0x83, 0x84, 0xf4, 0xf9, 0xdf, 0x7d, 0x24, 0x59, 0x2c, 0x8f, 0x43, 0x44, 0xda, 0x7b, 0xd9, 0xad, 0x5d, 0xf6, 0x9f, 0xfb, 0xd3, 0xb5, 0x41, 0xba, 0xe7, 0xc7, 0x62, 0x90, 0xf5, 0x27, 0xe0, 0x73, 0x6f, 0x92, 0x5a, 0x1a, 0x7f, 0x96, 0xf0, 0xb1, 0xed, 0xec, 0x4a, 0xd1, 0x44, 0x07, 0xdc, 0xaf, 0x30, 0xed, 0x68, 0x94, 0x2b, 0x46, 0xc4, 0x8d, 0x58, 0xb2, 0xdd, 0x63, 0xaf, 0x60, 0xfc, 0xcd, 0x5b, 0xdd, 0x48, 0xe5, 0x60, 0x29, 0x8d, 0xd9, 0x81, 0x10, 0x3b, 0xe3, 0x61, 0xb7, 0xb2, 0x7b, 0xe8, 0x76, 0xbc, 0xcb, 0xe8, 0xe5, 0x5b, 0x63, 0x01, 0x3a, 0xc6, 0x2e, 0xc2, 0xd2, 0xae, 0xa4, 0x10, 0x0d, 0xc5, 0x42, 0xcc, 0x5f, 0x81, 0x37, 0xb0, 0xa4, 0x1d, 0x61, 0x7a, 0xb4, 0xe2, 0x77, 0x4d, 0x38, 0xa4, 0x88, 0x54, 0xbc, 0x8f, 0xa4, 0xa8, 0x05, 0x24, 0xd9, 0x74, 0xa4, 0x7e, 0x61, 0x57, 0xcb, 0xda, 0x19, 0x09, 0x60, 0x56, 0x35, 0x42, 0x50, 0xf9, 0x32, 0xd7, 0x26, 0xf4, 0x0d, 0x26, 0xdc, 0x27, 0xb3, 0xb5, 0xf0, 0xe7, 0xb8, 0x16, 0xbb, 0xff, 0x4b, 0x0e, 0xff, 0xf4, 0x6a, 0xf6, 0xbf, 0x8e, 0x52, 0x60, 0x53, 0x93, 0x3a, 0xfe, 0xbb, 0xd6, 0x40, 0xc0, 0x34, 0x70, 0xa4, 0x3d, 0x09, 0x4e, 0x34, 0x54, 0xac, 0xec, 0x07, 0x13, 0x05, 0x5f, 0x6e, 0xd7, 0x0a, 0x99, 0x28, 0xb5, 0x90, 0xe9, 0xd5, 0x19, 0x60, 0xc1, 0xad, 0xad, 0x8e, 0xbc, 0x72, 0x7d, 0x06, 0xdf, 0xa3, 0x58, 0x68, 0x20, 0xf3, 0x79, 0x16, 0x24, 0xfa, 0x67, 0x8b, 0x4d, 0x29, 0x19, 0xee, 0xf4, 0x03, 0x5e, 0xe6, 0xf3, 0x8a, 0x7c, 0xb1, 0x67, 0xf8, 0x17, 0x70, 0xb4, 0xb0, 0x55, 0xc5, 0xc9, 0x74, 0x40, 0xa0, 0xa5, 0xd8, 0x6c, 0x56, 0x19, 0xf7, 0xd9, 0xf4, 0xd0, 0x64, 0x1a, 0xd2, 0x8e, 0x64, 0xb7, 0x6b, 0xb5, 0x5a, 0xd1, 0x6b, 0x0d, 0x82, 0x04, 0x0a, 0xc4, 0xe2, 0x92, 0x99, 0xb4, 0x7e, 0xbd, 0x5a, 0xe5, 0xcc, 0x74, 0x95, 0x53, 0x67, 0x32, 0xe8, 0xf1, 0x07, 0x24, 0xdf, 0xed, 0xb1, 0x8a, 0xc5, 0x36, 0x2b, 0x5f, 0xb9, 0x3c, 0xb3, 0x3c, 0x04, 0xf7, 0xf0, 0x7a, 0xa9, 0x2a, 0x29, 0x97, 0x3e, 0xe9, 0xb5, 0xda, 0xfb, 0x59, 0xb3, 0x3a, 0x11, 0xb7, 0xfb, 0x7d, 0x3c, 0x9b, 0x54, 0x9d, 0x9c, 0x7e, 0xe7, 0x6f, 0xc1, 0x7a, 0xf3, 0x86, 0x05, 0x52, 0xc3, 0x56, 0x1e, 0xb2, 0xdd, 0x95, 0xf3, 0xb8, 0x7d, 0xe7, 0xaf, 0xb2, 0x41, 0xb9, 0x14, 0x2a, 0x26, 0x6d, 0x13, 0x20, 0xb3, 0xb8, 0x99, 0x96, 0x74, 0x49, 0xab, 0x52, 0xaa, 0xac, 0xb5, 0xdf, 0x41, 0x6d, 0x1f, 0xd5, 0x02, 0x80, 0x22, 0x5a, 0x0a, 0xe0, 0xda, 0xe9, 0x7b, 0x77, 0x9c, 0x52, 0x71, 0x3e, 0x89, 0x02, 0x38, 0xa5, 0x63, 0x85, 0xbc, 0x35, 0xa0, 0x49, 0x40, 0x74, 0xbd, 0xa5, 0x53, 0x09, 0xd5, 0x19, 0x00, 0x20, 0x72, 0xd8, 0x46, 0x10, 0xa3, 0x83, 0xc8, 0x3b, 0x4f, 0x38, 0xc4, 0x36, 0xc8, 0xcb, 0x49, 0x2b, 0xa3, 0x53, 0xa5, 0x7b, 0xc8, 0xe9, 0x1d, 0xa7, 0xc5, 0xac, 0xe2, 0x70, 0x68, 0x09, 0x40, 0x3d, 0x8c, 0x39, 0x17, 0xbe, 0x33, 0x0a, 0x8f, 0xcf, 0xd5, 0xe3, 0x08, 0x9f, 0xf8, 0x02, 0x50, 0x11, 0x01, 0x09, 0x19, 0x62, 0x4a, 0xb9, 0xaa, 0x0d, 0x74, 0xfd, 0xd4, 0xeb, 0xff, 0x2a, 0x28, 0x9f, 0x17, 0x85, 0x67, 0x31, 0xb1, 0x06, 0x3a, 0xf9, 0xd7, 0x5b, 0x23, 0xbf, 0x40, 0x30, 0xb4, 0x20, 0x24, 0xae, 0xff, 0x33, 0x4e, 0x41, 0x4d, 0x6d, 0x73, 0x9f, 0x13, 0xc2, 0xc2, 0x06, 0x21, 0x0d, 0xbc, 0xc4, 0x1d, 0xb2, 0x46, 0xfd, 0x30, 0x82, 0xfd, 0xa9, 0xff, 0xdf, 0xc9, 0xdc, 0xdd, 0x20, 0xb5, 0x4a, 0x3e, 0x37, 0xfe, 0x0a, 0x6f, 0x90, 0x69, 0x9a, 0x85, 0x3d, 0xda, 0x24, 0x94, 0x51, 0x23, 0xff, 0x21, 0x89, 0x1a, 0x79, 0xd9, 0x32, 0xee, 0xd4, 0x83, 0x46, 0xbb, 0x8e, 0x33, 0xd9, 0x5b, 0xe6, 0xc0, 0xb3, 0x80, 0x9b, 0x79, 0x3f, 0xff, 0xf7, 0x14, 0xa4, 0x6f, 0x0c, 0xe7, 0x31, 0xf3, 0x3e, 0x5b, 0xfe, 0x54, 0x01, 0x9d, 0xd0, 0x53, 0xe4, 0x96, 0x3e, 0x3d, 0xcf, 0x1e, 0x12, 0xbf, 0x88, 0x6c, 0xf2, 0xfc, 0x7c, 0xd1, 0x40, 0xdd, 0xbd, 0xa7, 0x3e, 0xa8, 0x47, 0x84, 0x76, 0xd5, 0x87, 0xb3, 0x59, 0x1d, 0x1e, 0xe4, 0x26, 0xd3, 0xe2, 0x22, 0x0d, 0x77, 0x25, 0x06, 0x95, 0x89, 0x3b, 0x2a, 0x3b, 0x9b, 0x36, 0xe1, 0x5b, 0xaa, 0xf4, 0x25, 0x54, 0xae, 0x5c, 0xd1, 0xe8, 0x70, 0xe4, 0x11, 0xe1, 0x9c, 0x56, 0x16, 0xfa, 0x17, 0xd5, 0x0e, 0xfc, 0x92, 0x1b, 0x53, 0x28, 0x60, 0x04, 0xe2, 0xd5, 0x84, 0x50, 0x10, 0x5a, 0x0f, 0xa4, 0x78, 0x2e, 0xa9, 0xd3, 0x38, 0x4e, 0x6d, 0x5c, 0x5d, 0xdf, 0xfa, 0x34, 0x9b, 0x15, 0xc6, 0xc5, 0x42, 0x53, 0xb6, 0x36, 0x6d, 0x94, 0xec, 0xed, 0x7c, 0x09, 0xe1, 0x52, 0xc5, 0x03, 0xb3, 0xd6, 0x87, 0x14, 0xc0, 0x35, 0x1f, 0x71, 0x73, 0xf7, 0x7f, 0x9b, 0x5e, 0x3d, 0xdb, 0x3f, 0x89, 0xba, 0xa5, 0x5a, 0x0a, 0x00, 0xbc, 0xa0, 0xd6, 0xfd, 0xe1, 0x1f, 0xd7, 0xc5, 0x6a, 0x20, 0x3f, 0x92, 0x3a, 0x4e, 0x1b, 0x08, 0xf0, 0x1a, 0x2b, 0xbe, 0x5f, 0x5d, 0xf1, 0xfb, 0x3f, 0x3f, 0x08, 0xbd, 0x21, 0x59, 0xb7, 0x00, 0xa9, 0x16, 0xc6, 0x3c, 0xf7, 0x5f, 0x90, 0x30, 0x66, 0x77, 0x5a, 0xde, 0x79, 0x23, 0xe3, 0xd7, 0x12, 0x0f, 0x3c, 0xb8, 0xe5, 0x6d, 0xda, 0xf5, 0x2d, 0xdf, 0xea, 0xd5, 0x9d, 0x97, 0xe4, 0xbe, 0x9a, 0xbc, 0x63, 0xb3, 0xa7, 0x10, 0x34, 0x1b, 0x21, 0xd1, 0xad, 0xc4, 0x2c, 0xdd, 0x40, 0x27, 0xed, 0x19, 0x50, 0xee, 0xfa, 0x12, 0x42, 0xb3, 0x0e, 0xe5, 0xd8, 0x0b, 0x02, 0x5d, 0xba, 0xc3, 0xf8, 0x5c, 0x56, 0x69, 0xda, 0x7c, 0xea, 0x0e, 0x03, 0xf5, 0xdf, 0x4b, 0x3b, 0xc2, 0x59, 0x82, 0xe9, 0xff, 0x0c, 0x66, 0x84, 0x96, 0x51, 0xbe, 0x4b, 0x1a, 0x79, 0x66, 0x36, 0xf3, 0x61, 0x96, 0x2c, 0xbc, 0x46, 0x66, 0x76, 0xe9, 0xdb, 0x92, 0x74, 0xad, 0x99, 0x7b, 0x8e, 0x1b, 0x57, 0x6f, 0x6e, 0x8b, 0x1a, 0x2a, 0x6c, 0x3f, 0x2e, 0x9d, 0x4a, 0x46, 0x76, 0xee, 0x22, 0xa1, 0x00, 0xbf, 0x9c, 0xa5, 0xdc, 0xb3, 0x64, 0xa0, 0x2f, 0x2e, 0xdc, 0xbf, 0x83, 0x5d, 0x0e, 0x2f, 0x61, 0x77, 0xe4, 0x83, 0x22, 0x42, 0x9b, 0x56, 0x02, 0xd8, 0x75, 0x31, 0x76, 0xab, 0xae, 0xaf, 0xc0, 0xc7, 0xb2, 0xde, 0xc0, 0x57, 0x8d, 0xe9, 0x0d, 0x6b, 0xa3, 0xf4, 0x44, 0xf8, 0xa1, 0x48, 0xa0, 0x20, 0xb3, 0xb0, 0xcb, 0xb4, 0xf8, 0x22, 0xf4, 0xf8, 0x33, 0xa2, 0x22, 0xa6, 0xc3, 0x64, 0xc8, 0x35, 0xd5, 0x31, 0x99, 0x5a, 0xd8, 0x0b, 0x9d, 0xd0, 0x31, 0x14, 0x85, 0x55, 0x30, 0xac, 0x3c, 0xf5, 0x43, 0xda, 0xbe, 0x8a, 0x6a, 0xed, 0x2d, 0x84, 0xeb, 0x63, 0x22, 0xe6, 0x47, 0x09, 0x41, 0x91, 0x6c, 0x64, 0x10, 0xc5, 0x2c, 0x50, 0x09, 0xe5, 0xee, 0xe7, 0xed, 0x7a, 0xa4, 0xa4, 0x5c, 0x7b, 0xfd, 0xc8, 0xa3, 0xcc, 0xdb, 0xfd, 0xd5, 0x04, 0x07, 0x3a, 0x1d, 0x73, 0x24, 0xe6, 0x52, 0x64, 0xe1, 0x40, 0xcc, 0x9f, 0x73, 0xfe, 0x76, 0x32, 0x43, 0x34, 0x25, 0x71, 0xe3, 0x78, 0x28, 0x3c, 0x47, 0x44, 0x21, 0x80, 0x32, 0x9c, 0x13, 0x00, 0xee, 0xf0, 0xbb, 0x56, 0x40, 0x43, 0x24, 0x34, 0x9b, 0x8d, 0x76, 0xf0, 0x94, 0x5e, 0x0e, 0x40, 0x96, 0xc5, 0xd4, 0x42, 0xd7, 0x70, 0xc9, 0xbf, 0x8a, 0x14, 0xe0, 0xb0, 0x57, 0x10, 0x0f, 0x01, 0x08, 0x4d, 0xa5, 0x96, 0x85, 0x68, 0xde, 0x8c, 0x02, 0x13, 0xb5, 0xc1, 0x77, 0xb8, 0xf9, 0x96, 0x50, 0x60, 0xa3, 0xf3, 0x66, 0xd4, 0x67, 0x8c, 0x2f, 0x01, 0x89, 0x63, 0x31, 0xa1, 0xf2, 0x8e, 0xbd, 0x18, 0x83, 0x3b, 0xd9, 0x9c, 0xa9, 0xf1, 0x7e, 0x99, 0x32, 0x19, 0x04, 0x54, 0x5f, 0xbc, 0xda, 0xce, 0x3a, 0x8e, 0x7a, 0xeb, 0x29, 0x2c, 0x9c, 0xd3, 0xc4, 0xa2, 0xaa, 0x99, 0xe4, 0x30, 0x75, 0x1b, 0xfc, 0x4e, 0x26, 0x29, 0xad, 0xed, 0x77, 0xe9, 0x94, 0x00, 0x23, 0x79, 0x67, 0x3b, 0x9a, 0xd7, 0x40, 0x1a, 0xfa, 0xfe, 0x38, 0x26, 0x3b, 0x52, 0x38, 0x74, 0xa9, 0x3e, 0x0c, 0x6e, 0x98, 0x1c, 0xb9, 0xd5, 0x53, 0x55, 0x11, 0x07, 0x55, 0xc9, 0x84, 0x7e, 0xbc, 0x71, 0x39, 0x9a, 0xfa, 0x42, 0x5e, 0xa0, 0xce, 0x55, 0xbc, 0x02, 0x73, 0x46, 0x8e, 0xe1, 0x17, 0xda, 0x93, 0xd0, 0x8e, 0xe4, 0x62, 0xdb, 0x48, 0x69, 0xfe, 0xc8, 0x80, 0x02, 0xaa, 0x9c, 0xb7, 0x82, 0xfe, 0x61, 0x61, 0xd9, 0x3b, 0x27, 0xde, 0x38, 0xdc, 0x49, 0xab, 0x76, 0x6d, 0xf1, 0xda, 0xb3, 0xa0, 0xde, 0xbf, 0x3b, 0x9e, 0x65, 0xed, 0xac, 0x9b, 0xb6, 0x61, 0x5c, 0xad, 0x61, 0xfc, 0xf5, 0xde, 0x19, 0x37, 0x62, 0x80, 0xb7, 0x12, 0xef, 0xc0, 0x82, 0x4d, 0xab, 0x7e, 0xad, 0xdb, 0x11, 0x5c, 0x21, 0x94, 0xe8, 0x15, 0x7d, 0x2a, 0x68, 0x11, 0x5b, 0x5e, 0x9e, 0x36, 0xd6, 0x73, 0x12, 0x00, 0x49, 0xe3, 0xa6, 0xd4, 0x58, 0x52, 0xc1, 0x91, 0x35, 0xc0, 0xad, 0x69, 0x1c, 0x02, 0x3e, 0xef, 0x20, 0x73, 0xb5, 0x70, 0x2a, 0xe7, 0xe3, 0x87, 0x3f, 0xe0, 0x92, 0xec, 0x01, 0x05, 0x20, 0x8d, 0x79, 0xcf, 0x6d, 0xe0, 0x13, 0x86, 0xf8, 0x77, 0xea, 0x6c, 0x44, 0xd5, 0x46, 0x38, 0x81, 0x80, 0x63, 0xc5, 0x68, 0x57, 0x75, 0x0c, 0x67, 0x26, 0xe8, 0x50, 0xfe, 0x78, 0xec, 0x98, 0x69, 0xac, 0x31, 0x62, 0x7f, 0x4b, 0xef, 0x96, 0xda, 0x99, 0x2a, 0xb9, 0x38, 0x6a, 0x34, 0x63, 0x21, 0x37, 0x73, 0xf3, 0xca, 0x71, 0x64, 0x81, 0x3a, 0x15, 0xe0, 0x14, 0xab, 0x81, 0x9f, 0x15, 0x33, 0x86, 0xfa, 0x04, 0xa3, 0xbe, 0xf5, 0x6a, 0xb0, 0x20, 0x7c, 0x0f, 0x50, 0xd1, 0xed, 0x6c, 0x67, 0x3d, 0xd7, 0x63, 0xa3, 0x67, 0x02, 0x2e, 0xa4, 0x7d, 0xaf, 0x96, 0x61, 0xb0, 0x20, 0x65, 0xc7, 0x43, 0x5b, 0x1d, 0xa3, 0xe1, 0x2c, 0xea, 0xc1, 0x33, 0x69, 0xd6, 0x55, 0xb2, 0x79, 0x3c, 0x9b, 0xba, 0x17, 0x7f, 0xbb, 0xe0, 0x54, 0xfb, 0xef, 0x86, 0xdb, 0x3c, 0xe7, 0xad, 0x79, 0x6e, 0x6d, 0x0a, 0xdd, 0x15, 0x45, 0x5b, 0x9c, 0xff, 0x57, 0xfb, 0x78, 0x76, 0x10, 0xb4, 0xe1, 0xba, 0x05, 0xd5, 0xbc, 0xae, 0xd9, 0x85, 0x64, 0xd1, 0x61, 0x57, 0xee, 0x70, 0x07, 0x1f, 0xb2, 0x1a, 0x6c, 0x03, 0x06, 0x55, 0x52, 0xd5, 0x4d, 0x8f, 0xb8, 0xa0, 0x31, 0x57, 0x46, 0x80, 0x2c, 0xcd, 0xec, 0xb7, 0x4d, 0x57, 0xc7, 0xfe, 0x39, 0x96, 0x44, 0x19, 0x70, 0x99, 0x87, 0xae, 0xd1, 0x50, 0x0e, 0x57, 0x61, 0x43, 0x91, 0xf6, 0x48, 0x83, 0x2d, 0x49, 0x1c, 0xe1, 0xc2, 0xbe, 0x62, 0x5f, 0x9a, 0x88, 0x52, 0xe4, 0x4b, 0xf2, 0xdb, 0x34, 0xde, 0xf3, 0xe7, 0x1e, 0x30, 0x03, 0xe0, 0xf8, 0x99, 0x2e, 0x73, 0x48, 0xcc, 0x67, 0x94, 0xc4, 0xfe, 0x1e, 0xc2, 0x7d, 0x4b, 0x15, 0x8c, 0x57, 0x55, 0x6f, 0x54, 0xbc, 0x2e, 0x0a, 0x53, 0x91, 0x78, 0x0e, 0xdd, 0x69, 0xca, 0xc6, 0xe6, 0xf9, 0x56, 0xaf, 0xc6, 0xcd, 0xc9, 0xcf, 0x39, 0x39, 0x73, 0x48, 0xaa, 0x91, 0xa8, 0x2d, 0xb1, 0x9c, 0x66, 0x94, 0xda, 0x47, 0x37, 0xed, 0xa8, 0x97, 0x59, 0x92, 0xd9, 0xe1, 0x1d, 0x9f, 0xec, 0x3d, 0x8d, 0x03, 0xe1, 0x38, 0x51, 0xd7, 0x40, 0xc9, 0xd4, 0xef, 0x5c, 0x87, 0xa2, 0xaf, 0xd9, 0x18, 0x15, 0x20, 0x6c, 0xed, 0x30, 0x43, 0xe2, 0x2c, 0xcb, 0xa6, 0x64, 0xee, 0xf0, 0x34, 0xf9, 0xab, 0x86, 0x51, 0x4c, 0xf2, 0x2c, 0x27, 0xb0, 0x5e, 0x68, 0x3a, 0x61, 0xc5, 0x01, 0x43, 0x0c, 0xb2, 0xa9, 0x3b, 0x92, 0x16, 0xdf, 0xb6, 0x0a, 0x3a, 0x14, 0x72, 0x05, 0xf8, 0x0d, 0x30, 0x15, 0x2b, 0x88, 0xc2, 0x90, 0x64, 0x22, 0x66, 0x91, 0xdf, 0x78, 0x52, 0x40, 0xb5, 0x8d, 0x90, 0x53, 0x52, 0x6c, 0x0c, 0xd5, 0x2a, 0x0e, 0xec, 0x26, 0xa8, 0x7d, 0x1f, 0x44, 0x67, 0x3a, 0x39, 0x48, 0xa5, 0xdc, 0x7e, 0x34, 0xf5, 0xfb, 0x3c, 0xeb, 0x33, 0x4c, 0x5f, 0x81, 0xbd, 0x0d, 0x3f, 0xb5, 0xe0, 0xa4, 0xbc, 0xbc, 0x91, 0x83, 0x8d, 0x41, 0x5e, 0x4e, 0xd5, 0xa9, 0xa4, 0x40, 0xf7, 0x9b, 0x01, 0xcb, 0xac, 0xc0, 0x0c, 0x7e, 0x53, 0xc7, 0x44, 0x2c, 0x88, 0xad, 0x47, 0x4b, 0xf7, 0x3b, 0x45, 0x9a, 0x72, 0xd0, 0xb3, 0x07, 0x42, 0x60, 0x44, 0xcf, 0xbb, 0xbd, 0x15, 0xe7, 0x14, 0x15, 0x27, 0x9b, 0x75, 0xbc, 0x13, 0x75, 0x50, 0x2c, 0xf9, 0x60, 0xf5, 0x4b, 0xba, 0x0d, 0x61, 0xec, 0x67, 0x96, 0x57, 0x97, 0xf9, 0x61, 0xb3, 0x8d, 0x42, 0x48, 0xfa, 0x07, 0x23, 0xf6, 0x35, 0xbf, 0x00, 0x94, 0x00, 0xb1, 0x71, 0xa6, 0xde, 0x23, 0x3a, 0x2f, 0xcf, 0xe3, 0x7e, 0x1c, 0x25, 0xd0, 0x2f, 0xdf, 0x93, 0x9b, 0xc9, 0x5b, 0x87, 0xcf, 0x40, 0x00, 0xb9, 0x0f, 0x36, 0x37, 0x04, 0x9f, 0x72, 0x00, 0x76, 0x27, 0x8e, 0xd9, 0xa3, 0xb3, 0xef, 0xe3, 0x3e, 0xfd, 0xfb, 0x40, 0xea, 0xef, 0x85, 0xbf, 0x4d, 0x64, 0x8c, 0xbb, 0x66, 0x2f, 0x26, 0x40, 0x21, 0x5e, 0xb7, 0x70, 0x29, 0xc0, 0x66, 0x25, 0xfe, 0xa4, 0xd2, 0xd8, 0x47, 0xe4, 0x00, 0xc2, 0x69, 0x22, 0x99, 0x40, 0x58, 0x52, 0x52, 0x7c, 0xae, 0x78, 0xab, 0x4a, 0xfa, 0xb3, 0xdc, 0x50, 0x5a, 0x7b, 0x0c, 0x6a, 0x4c, 0x27, 0xc5, 0x4d, 0xc1, 0xb2, 0xa5, 0x6a, 0x73, 0xbe, 0x56, 0x15, 0x79, 0xd9, 0xc0, 0xe6, 0x18, 0x00, 0x7c, 0x5f, 0xdd, 0x61, 0x8c, 0xd0, 0xe8, 0x65, 0x4a, 0x78, 0x8b, 0xee, 0x9f, 0xed, 0x14, 0xde, 0x75, 0xbe, 0xe6, 0xd8, 0x6f, 0x56, 0xcf, 0x4a, 0xd7, 0x23, 0x95, 0xab, 0xd8, 0xf8, 0xd2, 0x01, 0xed, 0xb0, 0x02, 0xa7, 0x99, 0x15, 0xdb, 0x4d, 0x59, 0x00, 0xdd, 0x40, 0xd7, 0xc1, 0x29, 0xec, 0x60, 0xc0, 0x96, 0x9f, 0x98, 0x65, 0x02, 0x8f, 0x6c, 0x36, 0xe6, 0x1f, 0x49, 0x3f, 0x2d, 0x5e, 0x8b, 0xb7, 0x47, 0xd0, 0x39, 0xe0, 0x79, 0x72, 0xef, 0x2f, 0x77, 0xf8, 0x1b, 0xad, 0x34, 0x59, 0x6c, 0x9d, 0xf9, 0x8d, 0x88, 0x5f, 0xb5, 0x95, 0xfe, 0x94, 0x94, 0xbd, 0x7b, 0x83, 0xd2, 0x1e, 0x40, 0xbc, 0xd2, 0x66, 0xd3, 0xfa, 0x6a, 0xdc, 0xf5, 0x4e, 0x81, 0x9e, 0xd5, 0x7a, 0xdd, 0x2d, 0x83, 0x9b, 0x36, 0x2c, 0xa7, 0x0c, 0x8f, 0x65, 0x73, 0x86, 0xc6, 0x0d, 0xd6, 0x8c, 0x69, 0x49, 0xf3, 0x06, 0xcb, 0xf1, 0xd1, 0x2c, 0x57, 0x93, 0x54, 0xa5, 0x25, 0xbb, 0x6c, 0xf0, 0xcb, 0x71, 0x8c, 0x04, 0x76, 0x04, 0x5e, 0x33, 0x39, 0x06, 0xb5, 0x54, 0xa4, 0x98, 0xc3, 0x21, 0x99, 0xe8, 0x8c, 0xde, 0x5b, 0xf7, 0x9a, 0x3c, 0xe8, 0xa0, 0xf2, 0x7c, 0x89, 0xd6, 0x48, 0xd7, 0xa7, 0x2d, 0x6f, 0x1e, 0xe0, 0x9b, 0x13, 0x9e, 0x5a, 0x80, 0xaa, 0x46, 0x57, 0xe5, 0xa8, 0x0c, 0x0a, 0x01, 0xf2, 0x8c, 0xaa, 0x02, 0x96, 0xf2, 0xc4, 0x0a, 0xb9, 0x1b, 0xd5, 0x77, 0xd1, 0xf7, 0x18, 0x67, 0x14, 0x32, 0x9d, 0x7b, 0x2f, 0x13, 0x9b, 0xdc, 0x3c, 0xa4, 0x07, 0x7c, 0xee, 0x13, 0x65, 0x9f, 0x0f, 0x58, 0xdf, 0x99, 0x2d, 0x18, 0x94, 0xd9, 0x90, 0xc9, 0x32, 0x26, 0x6f, 0x18, 0xc7, 0x29, 0x63, 0x87, 0xd4, 0x2c, 0x1b, 0x5b, 0xa4, 0x21, 0x52, 0xb5, 0xdb, 0xe6, 0xfe, 0xff, 0x52, 0xc7, 0xca, 0x89, 0x22, 0x45, 0xc7, 0x74, 0xff, 0x15, 0x5e, 0xd0, 0xc8, 0x6c, 0x8a, 0x01, 0x5b, 0x7a, 0x44, 0x67, 0xae, 0x34, 0x3e, 0x3e, 0x1c, 0x57, 0xd3, 0xc2, 0xfc, 0xaa, 0x3e, 0x97, 0x78, 0x83, 0x0b, 0x69, 0x9d, 0x8c, 0xcc, 0xd0, 0xae, 0xc7, 0x0d, 0x76, 0xbe, 0xd0, 0x8a, 0x7b, 0x7d, 0x63, 0x9f, 0x18, 0x53, 0x1d, 0xff, 0x83, 0xab, 0x87, 0xa9, 0x13, 0x92, 0x50, 0x18, 0xa5, 0x80, 0xda, 0xba, 0x3e, 0x75, 0xf9, 0xa4, 0xf2, 0x48, 0xf7, 0x84, 0x04, 0x3c, 0xdb, 0xd7, 0x4e, 0xd5, 0xea, 0x5c, 0xe3, 0xea, 0x6f, 0xc8, 0xf4, 0xfa, 0xb8, 0xbb, 0xf0, 0xc4, 0x61, 0xf3, 0xef, 0x11, 0xd5, 0xc0, 0x51, 0xd5, 0x11, 0xb7, 0xa2, 0x76, 0xab, 0xab, 0xc1, 0x6c, 0x13, 0xd9, 0x42, 0x0a, 0x1a, 0x63, 0x10, 0x9b, 0xb0, 0x00, 0x57, 0xb1, 0xf2, 0xf1, 0xa1, 0xba, 0x64, 0x37, 0x3f, 0xd4, 0x7a, 0x03, 0xea, 0xe3, 0x5e, 0x6e, 0xaa, 0xe0, 0xed, 0x6a, 0xf7, 0x74, 0x02, 0xf8, 0x1e, 0xc5, 0xf8, 0x9c, 0xe7, 0x90, 0x6a, 0x0e, 0x75, 0x78, 0x3d, 0x33, 0x6d, 0x9d, 0xe1, 0x4b, 0x5b, 0x71, 0xd3, 0x6c, 0x51, 0xc7, 0x67, 0x2f, 0xd1, 0x2d, 0xc4, 0xa9, 0xec, 0x7c, 0x30, 0x9d, 0xac, 0xad, 0x8e, 0xef, 0xb0, 0xee, 0x24, 0x5c, 0x16, 0xf5, 0xa2, 0x69, 0x9e, 0x95, 0x60, 0x99, 0x0b, 0x8f, 0xe8, 0xe3, 0xcd, 0xaa, 0xb4, 0x63, 0xde, 0x06, 0x39, 0x50, 0xea, 0xad, 0x24, 0x2e, 0xb2, 0x6b, 0xe3, 0x45, 0xb2, 0xe0, 0x67, 0x51, 0x01, 0xd3, 0x28, 0x7b, 0x7a, 0xc9, 0x6a, 0x88, 0x19, 0xd6, 0xbf, 0x51, 0xa7, 0xb4, 0xce, 0x73, 0x9a, 0x12, 0x52, 0x47, 0x37, 0x2e, 0x66, 0x15, 0xf9, 0xa6, 0xff, 0x84, 0x36, 0x8c, 0xba, 0x55, 0x00, 0xb8, 0xd8, 0x51, 0x4a, 0x62, 0x86, 0x80, 0x4b, 0xf0, 0x62, 0x9c, 0x28, 0x0c, 0x3c, 0xc5, 0xcd, 0xfa, 0x19, 0x76, 0x1b, 0x28, 0x7e, 0xb8, 0x49, 0x07, 0xeb, 0x96, 0x84, 0x1a, 0xa5, 0xd0, 0xd9, 0x4d, 0xb8, 0xd4, 0x55, 0x87, 0x3d, 0xe9, 0x6b, 0x82, 0xd9, 0xae, 0x95, 0xdb, 0x86, 0xc3, 0x3e, 0x65, 0x96, 0xc6, 0xe0, 0xc3, 0xf5, 0x81, 0x6a, 0x36, 0xae, 0x61, 0xe4, 0xb3, 0xb0, 0x2a, 0x55, 0x39, 0xd3, 0xea, 0xe5, 0x61, 0x16, 0x2c, 0x3f, 0x37, 0x2a, 0x6d, 0x39, 0x48, 0x35, 0xd4, 0xb7, 0xfc, 0xd0, 0x1d, 0xcc, 0x26, 0x51, 0xd7, 0x23, 0xda, 0x50, 0xcf, 0x9e, 0x7f, 0x64, 0xcc, 0x3c, 0x24, 0x2e, 0x7c, 0x40, 0x18, 0x99, 0xaf, 0x90, 0xb4, 0x5f, 0xc3, 0x5b, 0x7c, 0xd0, 0x5f, 0xfe, 0x67, 0xcf, 0x65, 0x29, 0x7a, 0x1d, 0x21, 0x3d, 0x9b, 0xda, 0xc7, 0xf9, 0xa5, 0x48, 0x1c, 0x56, 0xb8, 0xd3, 0x73, 0xaf, 0xd3, 0x4e, 0xdb, 0x25, 0xa4, 0x80, 0x97, 0x42, 0x9e, 0xdf, 0xce, 0xdd, 0x4d, 0x9b, 0x84, 0x3d, 0xe6, 0xde, 0xc9, 0x81, 0x23, 0x53, 0x30, 0x3e, 0x4d, 0xe5, 0x83, 0x6b, 0x9a, 0xc9, 0xb5, 0x7a, 0xba, 0xbe, 0x18, 0xc8, 0xad, 0x93, 0xd0, 0x37, 0xd7, 0xea, 0x88, 0x19, 0x56, 0x3d, 0x64, 0x51, 0x93, 0x1e, 0x36, 0xb4, 0x17, 0xc3, 0xf4, 0xb6, 0xa1, 0xc1, 0x6a, 0x42, 0x75, 0x18, 0x2c, 0xe9, 0xf6, 0x70, 0xcf, 0x3f, 0x77, 0xa2, 0x58, 0x82, 0x4f, 0x7a, 0xf5, 0x7d, 0x2b, 0xbc, 0xeb, 0xac, 0xa9, 0x64, 0xd0, 0xa1, 0x22, 0x32, 0xfa, 0xa6, 0xc6, 0x66, 0x37, 0xa4, 0xef, 0xc9, 0xbe, 0x44, 0xaf, 0xec, 0x66, 0x53, 0xab, 0xb4, 0x16, 0x6b, 0x2d, 0x16, 0x7d, 0xd0, 0x74, 0x20, 0x03, 0x98, 0x4f, 0x39, 0xff, 0x0f, 0xea, 0xa9, 0x2a, 0x59, 0xe7, 0x5c, 0x54, 0x59, 0xb0, 0xe2, 0x55, 0xd2, 0x0c, 0xbb, 0x47, 0xcc, 0xf1, 0xd2, 0xf2, 0x3a, 0x9a, 0x47, 0x88, 0xd9, 0xd8, 0x71, 0x93, 0x5b, 0xad, 0x24, 0x2b, 0xc5, 0x17, 0x2f, 0x6c, 0x16, 0x2a, 0x29, 0x27, 0x29, 0x61, 0x6e, 0xd8, 0xdc, 0x36, 0x64, 0xd8, 0x72, 0xf0, 0x03, 0xd4, 0x36, 0xbd, 0x94, 0x7e, 0x61, 0x00, 0xb8, 0x82, 0x3e, 0xec, 0xad, 0xbc, 0x8c, 0x52, 0xcd, 0xa8, 0x24, 0xb7, 0x57, 0x1a, 0xdc, 0xaa, 0x72, 0x2f, 0xaa, 0x55, 0x6f, 0x83, 0x0d, 0x51, 0x4f, 0xa4, 0xa8, 0xbf, 0x85, 0xc7, 0x30, 0x94, 0xfd, 0xba, 0x89, 0x34, 0x5c, 0x1a, 0x2c, 0x43, 0x8a, 0xc6, 0xcc, 0xb7, 0x6e, 0x93, 0x39, 0x32, 0xf8, 0x42, 0x84, 0x90, 0x65, 0xaf, 0x64, 0xbb, 0xbe, 0x4a, 0xd8, 0xc7, 0xa2, 0xcb, 0x0e, 0x3b, 0x46, 0x22, 0x84, 0xac, 0xba, 0xad, 0x6d, 0x91, 0x6e, 0xae, 0x56, 0x52, 0xf4, 0xfc, 0x09, 0xa2, 0x07, 0xf9, 0xb2, 0x0f, 0xcd, 0xc3, 0x40, 0xd7, 0x59, 0xaf, 0x0e, 0xfe, 0x74, 0xf3, 0xc3, 0x9d, 0x9d, 0xa2, 0x77, 0x7d, 0x4e, 0xde, 0x17, 0xe4, 0x81, 0x49, 0x0a, 0xaf, 0x73, 0xbc, 0x14, 0xa1, 0xa8, 0x3c, 0x7b, 0xfb, 0x2f, 0x29, 0x69, 0x4d, 0x27, 0xb9, 0x92, 0x8b, 0x82, 0xa5, 0x16, 0x63, 0x09, 0x22, 0xa9, 0xce, 0xa0, 0x13, 0xf1, 0xe6, 0xcc, 0x7d, 0x2f, 0xf7, 0x72, 0x3b, 0x22, 0xd8, 0xe2, 0xf3, 0x29, 0x7c, 0x13, 0x48, 0xa7, 0xc4, 0x30, 0x51, 0xab, 0x97, 0x54, 0x4a, 0xd1, 0x35, 0x93, 0x8a, 0x63, 0xc8, 0x39, 0xb5, 0xc4, 0x3d, 0x56, 0x33, 0x0f, 0x51, 0x7a, 0xe1, 0xfb, 0xef, 0xbd, 0x06, 0x02, 0xb9, 0x02, 0x88, 0xc2, 0xe5, 0x7d, 0x60 ],
- const [ 0xaa, 0x2a, 0x95, 0xbe, 0x71, 0x7d, 0xdf, 0x5d, 0x67, 0x6a, 0xeb, 0x00, 0x65, 0xf4, 0x00, 0xe6, 0x88, 0x55, 0xc2, 0x30, 0x34, 0xf0, 0x57, 0x80, 0x58, 0x87, 0xc9, 0xc6, 0xf3, 0xae, 0xab, 0x57, 0xd7, 0x7f, 0x00, 0x40, 0xad, 0x90, 0x58, 0xd9, 0x39, 0x22, 0x3c, 0x9d, 0xdf, 0x9b, 0xcc, 0x38, 0x66, 0x37, 0xa7, 0xe2, 0xfd, 0xfa, 0x0b, 0xec, 0x7b, 0xe9, 0x3e, 0x98, 0xeb, 0x79, 0x2c, 0x2e, 0x48, 0x48, 0x51, 0x4c, 0x85, 0x0b, 0xd9, 0x7e, 0xd0, 0xc7, 0x06, 0x0e, 0x18, 0x45, 0xd3, 0x1e, 0xcd, 0xc0, 0xd7, 0xf3, 0xe7, 0xe0, 0x6b, 0x94, 0x29, 0xec, 0x0f, 0x94, 0xa7, 0x3b, 0x0a, 0x2c, 0x86, 0xeb, 0x51, 0x8d, 0x03, 0xd6, 0xaa, 0x73, 0xb6, 0xc2, 0x11, 0xfe, 0x18, 0xd8, 0x5b, 0xbe, 0x44, 0x58, 0x19, 0x0c, 0xfa, 0x8a, 0xbf, 0xa1, 0xe9, 0xf8, 0x06, 0x61, 0x2e, 0xda, 0x8e, 0x78, 0x18, 0xd2, 0xc8, 0xa8, 0x2e, 0xd9, 0x13, 0xe1, 0x73, 0x79, 0x25, 0x13, 0xe8, 0x3e, 0xad, 0x40, 0x53, 0x67, 0x36, 0xd5, 0x3f, 0xe0, 0x4f, 0x3a, 0x44, 0x75, 0xe9, 0xa8, 0x88, 0x40, 0x00, 0x3b, 0x86, 0x63, 0x7e, 0x48, 0x0e, 0xfd, 0x5c, 0xf0, 0x8d, 0x56, 0x0a, 0xf5, 0x8f, 0x5d, 0x11, 0xcd, 0x82, 0x55, 0xf7, 0xf5, 0xbd, 0xcb, 0x62, 0x88, 0xc1, 0xcb, 0x81, 0x10, 0xbe, 0x53, 0xa8, 0x9c, 0x59, 0x08, 0x3a, 0x13, 0xac, 0x28, 0xcc, 0xc7, 0x8e, 0xc0, 0x87, 0x4d, 0x15, 0x1f, 0xce, 0x8d, 0x5a, 0x8a, 0x21, 0x15, 0x7c, 0x31, 0x42, 0xb3, 0xe8, 0x62, 0x96, 0x42, 0xd7, 0xfd, 0xcd, 0xc4, 0x18, 0x28, 0xc6, 0xb1, 0x0f, 0x43, 0xac, 0x8f, 0xfe, 0x1f, 0x66, 0xc3, 0x83, 0x6a, 0x2e, 0xa7, 0x62, 0x6e, 0x7f, 0xdc, 0x85, 0xfc, 0x35, 0xe2, 0x41, 0xa2, 0xf0, 0xe5, 0xdb, 0x24, 0xb9, 0xda, 0x4b, 0x2a, 0xe8, 0xcb, 0x3f, 0x37, 0x44, 0x6f, 0x63, 0xda, 0x6d, 0xfe, 0xe0, 0x28, 0x77, 0x43, 0x22, 0x69, 0xd8, 0xf3, 0xdf, 0x12, 0x84, 0x3d, 0x55, 0xf4, 0x56, 0xa2, 0xd3, 0xb2, 0xb2, 0x07, 0x7a, 0x78, 0x69, 0x09, 0x45, 0xea, 0xdc, 0x90, 0x47, 0x5b, 0x65, 0xa7, 0x34, 0x40, 0xf2, 0x8b, 0x23, 0xe4, 0xf3, 0x01, 0x92, 0x5d, 0x77, 0xed, 0xab, 0xbe, 0x91, 0x21, 0xc6, 0x8e, 0x01, 0x73, 0x2e, 0x79, 0x10, 0x12, 0x28, 0x46, 0xbc, 0x1a, 0x31, 0x09, 0x15, 0x65, 0x88, 0x9a, 0xe7, 0xa5, 0xec, 0x45, 0x99, 0xaf, 0xa7, 0xc3, 0x55, 0x1a, 0xcb, 0x69, 0x6a, 0x09, 0xbc, 0xa0, 0xee, 0x45, 0xee, 0x95, 0xa7, 0x8f, 0xf0, 0x32, 0x2c, 0x34, 0xaa, 0x4c, 0x47, 0xe1, 0xe3, 0x1e, 0x9e, 0xb9, 0x06, 0xf6, 0x92, 0xa5, 0x25, 0x2e, 0x68, 0xeb, 0x3e, 0x5e, 0xa6, 0x03, 0xbd, 0xd0, 0xc0, 0xa6, 0x43, 0x34, 0xf4, 0x27, 0xa6, 0x95, 0x73, 0x06, 0x39, 0x8c, 0xc1, 0xc3, 0x4d, 0xb4, 0x5e, 0xf0, 0xf7, 0x5d, 0xa6, 0x8a, 0x14, 0x85, 0xf6, 0x89, 0x8b, 0x04, 0x10, 0xb6, 0xd2, 0x06, 0xc1, 0xbd, 0xb4, 0xbe, 0xc1, 0x83, 0x51, 0x59, 0xda, 0xb9, 0x66, 0x31, 0x4c, 0xb2, 0xce, 0x44, 0x71, 0x71, 0x49, 0xe4, 0x9d, 0x07, 0x7d, 0xb0, 0x48, 0x1c, 0x3a, 0xc2, 0x6f, 0xcb, 0x02, 0x2a, 0x37, 0xb3, 0xc9, 0x9b, 0xd4, 0x4a, 0xf9, 0x65, 0xa9, 0x75, 0xb9, 0xa3, 0xb0, 0x56, 0x6f, 0xb6, 0x1d, 0x65, 0x83, 0xf2, 0x3e, 0xc3, 0x67, 0x96, 0xa6, 0xcb, 0xd4, 0x02, 0x8a, 0xe9, 0x56, 0x24, 0x6b, 0xaf, 0x0a, 0x34, 0xf5, 0x25, 0xa6, 0xa1, 0x28, 0x61, 0xbb, 0x4b, 0xb5, 0x58, 0x37, 0xf2, 0xab, 0xf4, 0x2e, 0xee, 0x52, 0x67, 0xda, 0x21, 0x57, 0xbe, 0xe0, 0x2b, 0x2a, 0xb9, 0xd4, 0xdc, 0xa5, 0xda, 0x00, 0xef, 0xee, 0xbc, 0x61, 0xf5, 0x9e, 0xa6, 0xf3, 0x8f, 0x23, 0x60, 0x2f, 0xe0, 0x63, 0x45, 0xd1, 0x42, 0xa1, 0x9a, 0xde, 0x38, 0xa5, 0x1e, 0xe6, 0xa5, 0x17, 0xe2, 0x86, 0x3b, 0x2d, 0x5b, 0x32, 0x35, 0x86, 0xb6, 0x31, 0x49, 0x55, 0x6b, 0xe9, 0xd8, 0xc1, 0x15, 0x5d, 0x69, 0x8c, 0x81, 0xf4, 0x55, 0xf3, 0x05, 0x7c, 0xc3, 0xd6, 0x13, 0x6e, 0xd7, 0x19, 0x0d, 0x74, 0x27, 0x4a, 0x5b, 0x28, 0x6f, 0x84, 0xbc, 0x1f, 0x85, 0x93, 0xd9, 0x26, 0x8f, 0x58, 0x20, 0xcb, 0x73, 0x6f, 0xcf, 0x20, 0x8f, 0x10, 0x4f, 0xbb, 0xab, 0x33, 0xc4, 0x01, 0x2b, 0xf8, 0xe2, 0xa5, 0x89, 0x45, 0x02, 0x6b, 0x03, 0xb1, 0x75, 0x32, 0x91, 0xa1, 0x18, 0x31, 0x1a, 0xb0, 0x28, 0x81, 0xe7, 0x55, 0x58, 0xdb, 0x58, 0xc0, 0x21, 0xa4, 0xd6, 0x04, 0x5a, 0x26, 0x08, 0x7b, 0x08, 0x21, 0x4a, 0x66, 0x77, 0x82, 0x5b, 0xd5, 0x8a, 0x72, 0x55, 0xc7, 0x4f, 0x92, 0xe3, 0x91, 0xd6, 0x85, 0xae, 0x84, 0x44, 0xb0, 0x18, 0xca, 0x23, 0x3d, 0x2d, 0x91, 0xfc, 0x66, 0xd6, 0x6c, 0x28, 0xf0, 0x50, 0xf5, 0xe3, 0xf5, 0xdd, 0xb8, 0xa2, 0xe7, 0xba, 0x4c, 0xa7, 0xd2, 0x50, 0xc3, 0xd2, 0xe1, 0xae, 0x45, 0xba, 0x24, 0x37, 0xf7, 0xfc, 0x90, 0x98, 0x21, 0xd3, 0x48, 0xfe, 0x91, 0xe9, 0x1b, 0x85, 0x3a, 0x6d, 0x4d, 0xf3, 0x21, 0x66, 0x9a, 0xa6, 0x7a, 0x47, 0x78, 0xcb, 0x0d, 0xc3, 0x9d, 0xd1, 0xdf, 0xe2, 0xc1, 0x1d, 0x0f, 0x55, 0xa5, 0x00, 0xfe, 0x07, 0x54, 0xe6, 0xb2, 0xf4, 0xa8, 0xd0, 0x7d, 0x3e, 0x11, 0x04, 0xd9, 0x7d, 0x92, 0x02, 0x97, 0x57, 0x0c, 0xbb, 0x39, 0x52, 0xbf, 0xfe, 0x9c, 0xe5, 0x0e, 0x33, 0xda, 0xd5, 0x82, 0x4b, 0x6e, 0xbf, 0x12, 0xf7, 0x99, 0xf0, 0xa2, 0x18, 0x05, 0x7d, 0xc9, 0x77, 0xa9, 0x91, 0xd7, 0xb7, 0xec, 0x01, 0x17, 0x88, 0x0d, 0x26, 0x51, 0x1d, 0xc2, 0xeb, 0x93, 0xdf, 0x1f, 0x25, 0x31, 0x63, 0xba, 0x23, 0x0b, 0x99, 0x0d, 0x86, 0x0e, 0x47, 0x1b, 0x53, 0xfe, 0xb6, 0x57, 0x47, 0x72, 0xac, 0xc1, 0x6b, 0x20, 0x99, 0x52, 0xe8, 0x5a, 0x15, 0x9a, 0x1b, 0xd9, 0x8a, 0xa8, 0xec, 0xba, 0x2e, 0x2a, 0x5c, 0xc6, 0x35, 0xd5, 0x5e, 0xf6, 0x44, 0x07, 0xe8, 0x36, 0x28, 0xab, 0x49, 0x6a, 0xc8, 0x5e, 0xbd, 0xaf, 0x58, 0xcf, 0x3f, 0xe3, 0xd0, 0x6c, 0x9e, 0x67, 0x9d, 0x3b, 0xd3, 0x23, 0x96, 0x05, 0x92, 0xcb, 0x31, 0xba, 0x1f, 0x61, 0xf7, 0x11, 0x63, 0xfc, 0x35, 0x6f, 0x3f, 0xc7, 0xf5, 0x0a, 0x20, 0x4c, 0x2c, 0x4e, 0xd4, 0xf3, 0x35, 0x80, 0x9c, 0xc5, 0x7e, 0xa1, 0x82, 0x76, 0x82, 0x95, 0xec, 0xa3, 0xf7, 0x84, 0x72, 0x58, 0x48, 0x81, 0xed, 0xd5, 0x45, 0x69, 0xd0, 0x92, 0x1a, 0x0e, 0xbc, 0x80, 0x7d, 0x95, 0x4e, 0x92, 0x2c, 0x1d, 0x3c, 0x7c, 0x97, 0xa2, 0xa0, 0xbb, 0xd9, 0x20, 0x93, 0xd5, 0xed, 0xfb, 0xfe, 0xe2, 0x1f, 0x9e, 0xad, 0x4b, 0xc0, 0x62, 0xa5, 0xd2, 0x1e, 0xb2, 0xb8, 0xd2, 0xb4, 0x6e, 0x56, 0xc8, 0x9d, 0x8c, 0xa6, 0x13, 0x4f, 0x05, 0xd5, 0xf8, 0x85, 0xef, 0xaf, 0xe9, 0x7d, 0xe6, 0x6c, 0x07, 0x64, 0xb1, 0xcc, 0xe5, 0x0f, 0x23, 0x66, 0x8f, 0xeb, 0x3e, 0x3c, 0xcb, 0x37, 0x9f, 0x94, 0x9e, 0x70, 0x16, 0x03, 0x12, 0x0d, 0x94, 0xcb, 0x37, 0x6d, 0x4a, 0x67, 0x68, 0x0e, 0x0f, 0x63, 0xcf, 0xff, 0x02, 0x71, 0x2c, 0x98, 0x71, 0xba, 0xd1, 0x68, 0xfa, 0x72, 0xf1, 0x6f, 0xf0, 0xaf, 0x1b, 0x8d, 0x01, 0x7b, 0x02, 0x3b, 0x15, 0x27, 0x7f, 0x79, 0x78, 0xe3, 0xd9, 0x07, 0x3c, 0x8c, 0x43, 0xd8, 0xd9, 0xc5, 0xa6, 0xc4, 0x17, 0x49, 0xa1, 0x7d, 0x2e, 0x80, 0xcf, 0xc4, 0x2b, 0x50, 0x48, 0xdd, 0x95, 0x35, 0x6a, 0x40, 0x51, 0x94, 0xd9, 0x91, 0xc3, 0x4c, 0xc4, 0xd2, 0x36, 0x8f, 0x6a, 0xd8, 0x7e, 0xf0, 0xdd, 0xfb, 0xdb, 0xbc, 0x06, 0x12, 0x21, 0x8e, 0xea, 0x9f, 0x16, 0x1e, 0x2b, 0x46, 0x1c, 0x5a, 0xd2, 0x84, 0x10, 0xb8, 0x4b, 0x9d, 0x71, 0xca, 0xb1, 0xd6, 0xc5, 0x13, 0x4d, 0xe5, 0x38, 0x19, 0x59, 0xa6, 0x87, 0xbb, 0x09, 0x0f, 0x1c, 0xc5, 0xcc, 0x66, 0x7b, 0xc2, 0xcf, 0xb1, 0xdc, 0x11, 0xc2, 0x6f, 0x19, 0x3b, 0xe0, 0x85, 0xcb, 0x84, 0x29, 0x7b, 0xb0, 0xc0, 0xf2, 0xe8, 0x51, 0x68, 0xa0, 0x2b, 0xe1, 0xed, 0xb1, 0x5c, 0x67, 0x4c, 0xfc, 0x83, 0x20, 0xe3, 0x39, 0x07, 0x1e, 0x83, 0xc3, 0x69, 0x36, 0xc6, 0x9d, 0x31, 0x19, 0xa3, 0xb3, 0x29, 0xc1, 0x3f, 0x63, 0xca, 0x0f, 0x06, 0x3c, 0xf4, 0xb2, 0xfb, 0x06, 0xe2, 0x4a, 0x4c, 0x02, 0x5c, 0xcd, 0x2a, 0x73, 0x2e, 0x2a, 0xd7, 0x5c, 0xda, 0x2d, 0x01, 0x8c, 0x8a, 0xa3, 0x4e, 0xd8, 0x48, 0xbe, 0x38, 0xa8, 0x71, 0xbb, 0x1b, 0xb5, 0x67, 0xc1, 0x8c, 0x10, 0x87, 0x0d, 0xed, 0x67, 0x5b, 0x4c, 0x3e, 0x84, 0x10, 0x48, 0x36, 0x16, 0x2a, 0xc7, 0x93, 0xb4, 0x76, 0xb0, 0xae, 0x1f, 0x40, 0x70, 0x52, 0xc7, 0xc7, 0x9c, 0xce, 0x91, 0xee, 0xd8, 0x49, 0xd8, 0x34, 0xf7, 0x56, 0xb2, 0xe6, 0x64, 0xc9, 0x74, 0x94, 0xc0, 0xc8, 0x78, 0xc1, 0xcc, 0x25, 0x1d, 0xde, 0x8a, 0xeb, 0x10, 0x7a, 0x9f, 0x36, 0xca, 0xb3, 0xfc, 0x48, 0x5a, 0xf0, 0xbd, 0xda, 0x65, 0xd2, 0x51, 0xb0, 0x6b, 0x67, 0xdc, 0x70, 0x4b, 0xa1, 0xd9, 0xb4, 0x0a, 0x07, 0x04, 0x5e, 0xd0, 0xab, 0x77, 0x2c, 0x33, 0x5c, 0x13, 0x8c, 0xb8, 0x1c, 0x21, 0xb1, 0x97, 0xd5, 0x39, 0xe6, 0xbf, 0x47, 0x63, 0x22, 0x1a, 0x45, 0x7d, 0xdd, 0x12, 0x21, 0xdd, 0x23, 0x54, 0x65, 0x37, 0xe7, 0xd4, 0xc3, 0xc0, 0x99, 0x11, 0x4f, 0x93, 0xfb, 0x9a, 0xec, 0x54, 0x30, 0xd1, 0x04, 0x14, 0x15, 0xef, 0x7d, 0x75, 0xd5, 0x48, 0xe8, 0x0f, 0xb8, 0xd1, 0xfb, 0x12, 0x3c, 0xdf, 0x41, 0x2c, 0x67, 0x31, 0x10, 0xad, 0x5b, 0x31, 0xbc, 0xe9, 0x2b, 0x77, 0x0a, 0xdd, 0xed, 0x8f, 0xe7, 0x16, 0x11, 0xfc, 0x5a, 0xcf, 0xf1, 0x7c, 0xb8, 0x5a, 0xa8, 0x8e, 0x17, 0xc1, 0x28, 0x32, 0x04, 0xac, 0x87, 0xf0, 0x79, 0x85, 0x9a, 0x1b, 0x09, 0xdb, 0xc5, 0x57, 0x5e, 0x04, 0x11, 0x59, 0xe5, 0x07, 0x7f, 0xee, 0xc8, 0xb9, 0x9d, 0x3f, 0x1d, 0x25, 0x56, 0x53, 0x5d, 0x31, 0x0e, 0xd5, 0x17, 0x7f, 0xef, 0x18, 0xe5, 0x92, 0x7d, 0x58, 0xa0, 0x32, 0x71, 0x43, 0xd0, 0x11, 0xc4, 0xb7, 0x66, 0xae, 0x0a, 0xce, 0xae, 0x7a, 0x01, 0x18, 0x7f, 0x3a, 0x6a, 0x27, 0xb5, 0xac, 0x17, 0x51, 0xe0, 0x6d, 0x46, 0xb1, 0x3e, 0x1a, 0x2d, 0x6f, 0xe7, 0xb5, 0xd6, 0x41, 0x48, 0x4b, 0x2d, 0x32, 0xd2, 0xd4, 0x58, 0xa3, 0xf3, 0x5b, 0x46, 0x8f, 0x46, 0x5f, 0x8b, 0x13, 0x07, 0x78, 0x6b, 0x2d, 0xc9, 0x3e, 0x34, 0xc4, 0x6b, 0x66, 0xd2, 0xe8, 0x48, 0x2e, 0x9d, 0x5c, 0xae, 0xfc, 0x75, 0x51, 0x92, 0x41, 0x11, 0x75, 0x81, 0xa4, 0x94, 0x2c, 0xda, 0x5d, 0x61, 0x1d, 0x3b, 0xde, 0x31, 0xf1, 0x39, 0xb9, 0x63, 0x57, 0x54, 0xbe, 0x93, 0x4c, 0x29, 0x63, 0x6d, 0x99, 0xea, 0x6a, 0xc3, 0x9d, 0x0c, 0xbd, 0xde, 0x4c, 0x3f, 0x9d, 0x12, 0x78, 0xa3, 0xfb, 0x95, 0x50, 0x39, 0x26, 0x92, 0x26, 0x98, 0xa7, 0x78, 0x75, 0xe1, 0x69, 0x98, 0x22, 0xf4, 0x1e, 0xef, 0x02, 0xe4, 0xdd, 0x40, 0x9d, 0xa9, 0x10, 0x67, 0x31, 0x15, 0x8d, 0xe9, 0xfa, 0x0a, 0x03, 0xcf, 0xb1, 0xe9, 0x98, 0xb5, 0x53, 0x4d, 0xd0, 0x1e, 0x23, 0xfa, 0xb1, 0x0a, 0xf2, 0x10, 0x25, 0xcb, 0x9e, 0x85, 0x9f, 0x14, 0xd9, 0xd1, 0x01, 0x53, 0x2b, 0xeb, 0xbe, 0x40, 0x3a, 0x75, 0x3b, 0xb6, 0x4a, 0x33, 0x7c, 0xc3, 0x00, 0xc2, 0xfc, 0xfb, 0x6b, 0x87, 0xdc, 0x11, 0x45, 0xe5, 0x40, 0xa8, 0x75, 0xb3, 0xf7, 0x66, 0xd9, 0xed, 0x5a, 0x4a, 0x43, 0xa9, 0x76, 0x40, 0xc1, 0x4d, 0x6d, 0xf3, 0x22, 0x00, 0x19, 0xe3, 0xb5, 0x5e, 0xf3, 0xb7, 0x54, 0x70, 0x33, 0xd4, 0xa1, 0xdb, 0x39, 0x2e, 0x90, 0x57, 0x2c, 0x5e, 0x26, 0x63, 0xe1, 0xf6, 0x80, 0x38, 0xfe, 0x11, 0x16, 0xfb, 0x5f, 0x2e, 0x41, 0x36, 0xb8, 0x3e, 0xfb, 0x89, 0x7c, 0xfb, 0xe6, 0x9d, 0xfe, 0x7c, 0x91, 0x5a, 0xd7, 0x06, 0xf6, 0x5a, 0x87, 0x26, 0x47, 0x9d, 0x5f, 0xfc, 0xea, 0x7e, 0x9e, 0xda, 0xc2, 0xe5, 0xda, 0x0e, 0xb0, 0xbf, 0xa1, 0xfb, 0x59, 0xab, 0x61, 0x6f, 0x2a, 0xf6, 0x85, 0x30, 0x9a, 0xca, 0xe1, 0xd8, 0xaf, 0xa2, 0x50, 0xe3, 0xc4, 0x01, 0x9b, 0x07, 0x89, 0x64, 0x9d, 0xc4, 0x4b, 0x75, 0xa5, 0x3b, 0x76, 0x81, 0x1c, 0x43, 0x58, 0x2c, 0x68, 0xba, 0x27, 0x64, 0x0f, 0x19, 0x46, 0x93, 0x20, 0x4b, 0xc4, 0x19, 0xcf, 0xc0, 0x26, 0xf9, 0x5f, 0xbd, 0x66, 0xd2, 0x45, 0xf6, 0x3b, 0x12, 0x8a, 0x5e, 0x9b, 0x66, 0x71, 0x3e, 0x7e, 0x75, 0x5a, 0x84, 0xe6, 0xcd, 0xe6, 0x5e, 0x1c, 0x1d, 0x5c, 0x08, 0x3c, 0xa6, 0x4b, 0xe3, 0xf3, 0xec, 0x71, 0xc6, 0x88, 0xb1, 0xdc, 0x98, 0x19, 0x23, 0x4f, 0x1f, 0x28, 0x55, 0xe7, 0x13, 0x56, 0xec, 0xfe, 0x77, 0x6d, 0x1b, 0x50, 0x29, 0xa4, 0xd1, 0x5c, 0xb7, 0x1f, 0x30, 0x0e, 0x74, 0xb6, 0x42, 0x9a, 0xcb, 0xf7, 0xe7, 0xab, 0xd4, 0x6e, 0x12, 0xbd, 0x25, 0x24, 0x35, 0xc7, 0xeb, 0x65, 0xfa, 0x1e, 0x39, 0xc6, 0x34, 0x96, 0x9f, 0x67, 0x15, 0xea, 0xff, 0x76, 0xa1, 0x5e, 0x9c, 0xf4, 0x62, 0xa2, 0x74, 0xbc, 0x5e, 0xfa, 0xd0, 0xc1, 0x46, 0x9c, 0x19, 0x97, 0xf0, 0x59, 0xed, 0x35, 0x07, 0x80, 0x72, 0xf9, 0x02, 0x00, 0xea, 0xec, 0x52, 0xcc, 0x88, 0x48, 0xe0, 0x84, 0x82, 0x37, 0xb6, 0x51, 0x68, 0xde, 0xfc, 0x11, 0xb4, 0x9a, 0x27, 0xb4, 0xa2, 0x89, 0x6d, 0xe5, 0x42, 0x4d, 0x7c, 0xed, 0xcb, 0x0c, 0x6b, 0xd5, 0x32, 0xbb, 0xf1, 0xcb, 0xfb, 0x9d, 0xd5, 0xc8, 0x50, 0x06, 0xa5, 0x6f, 0x50, 0x65, 0xab, 0x37, 0xa9, 0x81, 0x1d, 0xcc, 0x69, 0x03, 0x94, 0xb3, 0x11, 0x35, 0xbf, 0x2d, 0xeb, 0x09, 0x59, 0x5f, 0x9e, 0x5d, 0x58, 0xaf, 0x00, 0x7d, 0x68, 0x71, 0x2b, 0xea, 0x97, 0xc3, 0xd3, 0x5a, 0x52, 0xb5, 0xd7, 0xff, 0x90, 0xae, 0x15, 0x0c, 0x4d, 0x0b, 0x83, 0x76, 0x3a, 0x08, 0x7c, 0xf7, 0xb3, 0xe4, 0x57, 0x59, 0xf1, 0x40, 0x3e, 0xf1, 0x81, 0xc9, 0x3d, 0x6a, 0xf4, 0x16, 0x9a, 0xc4, 0xd9, 0xd3, 0x65, 0x9b, 0xe8, 0x20, 0x4f, 0xad, 0x80, 0x34, 0xc0, 0x97, 0x54, 0x46, 0x23, 0xdf, 0x61, 0xad, 0x85, 0x37, 0x23, 0x46, 0x5e, 0x00, 0x08, 0x16, 0xae, 0x0e, 0x25, 0x30, 0x4c, 0xab, 0x27, 0xd9, 0x7b, 0xde, 0x8d, 0xeb, 0xbf, 0xed, 0x15, 0x77, 0xef, 0x20, 0x74, 0xae, 0x8a, 0xc8, 0x4a, 0x02, 0x4e, 0x80, 0x55, 0x88, 0x07, 0xb3, 0xe5, 0xa1, 0xa6, 0x5e, 0x90, 0xd9, 0x92, 0x17, 0x26, 0x0f, 0x43, 0x4f, 0xe8, 0xd7, 0x0c, 0xd4, 0xf4, 0x1c, 0x38, 0x99, 0x04, 0x0a, 0x59, 0xba, 0x58, 0x2a, 0xdd, 0xbb, 0xf1, 0xcf, 0xe2, 0x11, 0x00, 0xb2, 0x4c, 0xe3, 0x9e, 0xd9, 0x14, 0x11, 0xbd, 0xbd, 0xe2, 0x76, 0x5f, 0xab, 0xdf, 0x6a, 0x06, 0x6b, 0xc4, 0x8b, 0x6b, 0x20, 0x38, 0xbe, 0x72, 0x6f, 0x58, 0x70, 0x5e, 0xe3, 0x97, 0x22, 0x41, 0x90, 0xc8, 0x24, 0xb7, 0xf7, 0x79, 0xa0, 0xd4, 0x2a, 0x83, 0xdb, 0x5b, 0x31, 0xdf, 0xb8, 0x31, 0xab, 0xbb, 0x7e, 0x11, 0xb8, 0xcd, 0xda, 0x80, 0x17, 0xe8, 0x28, 0x04, 0x8c, 0xcd, 0xee, 0x91, 0x85, 0x43, 0xa9, 0x44, 0xfc, 0x6a, 0xcd, 0x54, 0x9f, 0x4c, 0x07, 0x45, 0x2f, 0xb5, 0xc5, 0x5e, 0x26, 0x45, 0xf8, 0x5e, 0x9c, 0xc3, 0x18, 0x6b, 0x6b, 0xb4, 0x69, 0x4b, 0x92, 0x2c, 0x7e, 0xd6, 0xd7, 0xe5, 0xfb, 0xab, 0xb1, 0x8e, 0x9f, 0x23, 0x64, 0x65, 0x81, 0x83, 0x6e, 0x08, 0x99, 0x76, 0x22, 0x88, 0x83, 0xba, 0x93, 0xc0, 0x80, 0x19, 0xb3, 0xe5, 0xbe, 0x9b, 0xbc, 0x5e, 0xd9, 0xfa, 0xcf, 0xd5, 0xa1, 0x56, 0xdb, 0x8e, 0x1e, 0x2a, 0xc1, 0xf7, 0xd1, 0x7f, 0xb6, 0x81, 0x3d, 0x5f, 0xe8, 0xaf, 0xa6, 0x8d, 0x64, 0x6c, 0x19, 0x73, 0x37, 0xa2, 0xac, 0x5c, 0xd3, 0x08, 0x07, 0xe3, 0xb5, 0x3c, 0x23, 0xab, 0x45, 0x11, 0x52, 0x51, 0xfe, 0x2a, 0x80, 0x9f, 0xce, 0xc8, 0xb8, 0x03, 0xc0, 0xe0, 0xea, 0x3f, 0xd8, 0x71, 0xeb, 0x61, 0x3e, 0x14, 0xbd, 0xf6, 0xa0, 0xd5, 0x11, 0x7b, 0xd1, 0x41, 0x0a, 0x14, 0xb6, 0xc0, 0x44, 0x81, 0x62, 0x25, 0x15, 0x4d, 0x80, 0x84, 0x12, 0x48, 0xf1, 0x43, 0xd5, 0x38, 0xb7, 0x74, 0xfe, 0xcc, 0x12, 0x62, 0x78, 0xd1, 0xe8, 0x6a, 0xfe, 0xa8, 0x6a, 0x0d, 0xdd, 0xf8, 0xf5, 0x43, 0xfb, 0xa0, 0x36, 0x11, 0x18, 0xf0, 0x92, 0x5d, 0x54, 0x18, 0xc5, 0x02, 0xf1, 0xe0, 0xc9, 0x20, 0x5b, 0x9a, 0xf9, 0xb5, 0x65, 0x55, 0x76, 0x72, 0xd6, 0x54, 0xca, 0xc7, 0x24, 0xbf, 0xcb, 0x41, 0x7f, 0x97, 0xc2, 0x15, 0x11, 0xef, 0xcd, 0xfd, 0x85, 0x5a, 0x82, 0x42, 0xc6, 0xa0, 0xd5, 0x1a, 0x09, 0xb5, 0x3c, 0x35, 0x0d, 0xeb, 0x11, 0x93, 0xa1, 0x66, 0x37, 0x98, 0x68, 0xd0, 0x00, 0x62, 0xd9, 0x4f, 0x4e, 0x5a, 0x89, 0xb4, 0xf9, 0x09, 0xad, 0xf6, 0x71, 0x2e, 0xda, 0xde, 0xa5, 0x0d, 0x10, 0x03, 0x23, 0x09, 0xf7, 0xf9, 0x80, 0x75, 0x68, 0xc6, 0xfa, 0xa8, 0x2f, 0x95, 0x5c, 0x4f, 0x10, 0xaf, 0x22, 0x08, 0x08, 0xa6, 0xde, 0x2c, 0xd4, 0xd3, 0xda, 0xeb, 0xb8, 0x03, 0xff, 0x9f, 0x79, 0x6e, 0xf5, 0x5a, 0xab, 0xe9, 0x8c, 0xc1, 0x33, 0x5c, 0x5b, 0x1e, 0x04, 0x75, 0xa7, 0xb0, 0x2c, 0x9e, 0x86, 0x46, 0x14, 0x2d, 0x43, 0x0c, 0x03, 0xdb, 0x05, 0xa4, 0xe5, 0x78, 0xac, 0x78, 0x4b, 0xdd, 0xfc, 0x4f, 0xb2, 0x21, 0xfd, 0x1f, 0x08, 0x10, 0xa1, 0x22, 0x6c, 0xd8, 0xa8, 0x2c, 0x36, 0x06, 0xc1, 0x3c, 0x37, 0xb1, 0xf2, 0x51, 0x42, 0xf5, 0x39, 0x7f, 0xea, 0xa4, 0x74, 0x41, 0x8e, 0x37, 0x7e, 0x11, 0x93, 0x0b, 0x9b, 0x36, 0xf1, 0xca, 0x16, 0xde, 0xf1, 0x26, 0x28, 0x6c, 0x35, 0xce, 0x1c, 0x13, 0xf8, 0x9a, 0xb1, 0xa4, 0x97, 0x09, 0xc0, 0xa4, 0x50, 0xee, 0x1e, 0xa2, 0x4a, 0x66, 0xc4, 0xc7, 0xd6, 0x0d, 0x2d, 0xaf, 0xf5, 0x72, 0x00, 0x77, 0x1a, 0xc8, 0xef, 0x18, 0x31, 0xde, 0xdf, 0xf3, 0xdf, 0x51, 0x49, 0xad, 0x0c, 0x00, 0xe0, 0x3c, 0x9f, 0xc0, 0x74, 0x42, 0x88, 0x51, 0x16, 0x9a, 0x04, 0x91, 0x7d, 0x31, 0x1c, 0xf0, 0xa8, 0x18, 0x6f, 0x24, 0xc5, 0xd7, 0x32, 0x1e, 0x52, 0x03, 0x75, 0x3c, 0x82, 0x13, 0xa8, 0xc0, 0xe2, 0x6f, 0x5d, 0x81, 0x3c, 0xca, 0x50, 0xe0, 0xbb, 0xb2, 0xa4, 0xfe, 0x51, 0x65, 0x6f, 0x2c, 0x56, 0xe7, 0x79, 0xa3, 0x72, 0x51, 0x41, 0x76, 0xbc, 0x6c, 0x41, 0xc4, 0x23, 0x7e, 0x73, 0x32, 0x0e, 0x64, 0x14, 0x98, 0x3f, 0xe1, 0xa8, 0xfb, 0xfd, 0x36, 0x3e, 0xbc, 0x72, 0xf3, 0xf5, 0x0e, 0x52, 0x0c, 0xbf, 0xad, 0xbd, 0x2f, 0x65, 0xce, 0x67, 0x55, 0xcc, 0x51, 0xf6, 0x98, 0x76, 0x3e, 0xab, 0x44, 0x4b, 0x6f, 0x45, 0x30, 0x9a, 0x8a, 0x22, 0x4f, 0x5b, 0x33, 0xa8, 0x82, 0xb7, 0x7f, 0xe3, 0xb0, 0xca, 0xab, 0x6f, 0x19, 0xa7, 0x0e, 0x99, 0xe7, 0x9c, 0x4c, 0xc1, 0x06, 0xb8, 0xcd, 0x03, 0x36, 0x8b, 0x6d, 0x16, 0x5f, 0x2d, 0x75, 0x73, 0x24, 0x82, 0xcb, 0xba, 0xba, 0xbb, 0x65, 0x52, 0xfb, 0x20, 0x03, 0x50, 0xb6, 0x0d, 0x1e, 0x9b, 0x4a, 0x3b, 0x1b, 0x4d, 0x73, 0x41, 0xc5, 0x5c, 0x63, 0x5b, 0xfa, 0x79, 0x15, 0x69, 0xa4, 0x38, 0xde, 0x3b, 0xec, 0x72, 0x45, 0x0b, 0xaa, 0xe8, 0x14, 0x4b, 0x1f, 0x28, 0xaf, 0xa2, 0xe6, 0xb5, 0xa5, 0x31, 0x28, 0x62, 0x85, 0x1a, 0x10, 0xff, 0xf3, 0x43, 0x7e, 0x37, 0xfa, 0x57, 0x00, 0xb9, 0xa4, 0x0e, 0xfe, 0x96, 0xc8, 0xaf, 0x34, 0xea, 0x24, 0xd3, 0x65, 0xbf, 0xab, 0x6b, 0x4e, 0x2e, 0x20, 0x04, 0xda, 0xc7, 0xe4, 0x4a, 0x94, 0x34, 0x0d, 0xcb, 0x61, 0x18, 0xb7, 0xfe, 0x6f, 0x3d, 0x9f, 0x84, 0x69, 0xef, 0xee, 0xad, 0xed, 0xa3, 0x52, 0x3e, 0x3f, 0xdd, 0x53, 0x72, 0x3f, 0x50, 0xe5, 0x3e, 0x98, 0x46, 0x39, 0xd9, 0x3b, 0x42, 0xd9, 0x7c, 0x0c, 0xe4, 0xf4, 0x67, 0xda, 0x0e, 0xf6, 0x24, 0x95, 0x45, 0x5c, 0x0f, 0xbb, 0x5a, 0xc7, 0x16, 0x14, 0x49, 0x4f, 0xbe, 0x9f, 0x61, 0x19, 0x66, 0xcc, 0xa5, 0x2c, 0xd0, 0xeb, 0x73, 0x80, 0xdd, 0xe5, 0x63, 0x58, 0x98, 0x2a, 0x72, 0xd2, 0x76, 0xea, 0x60, 0xbd, 0xdd, 0x88, 0x56, 0xaa, 0xe2, 0x4c, 0xcc, 0x46, 0x57, 0x58, 0xaa, 0xe7, 0x05, 0xdd, 0xad, 0x64, 0x36, 0x8e, 0x0d, 0x2a, 0x77, 0x55, 0x5d, 0x8c, 0x9b, 0x45, 0xb2, 0x5b, 0x03, 0xd1, 0x07, 0xb7, 0x1d, 0x3b, 0xe0, 0x24, 0x2b, 0x4f, 0x2e, 0xe1, 0x46, 0x50, 0x73, 0x75, 0xa2, 0x33, 0x26, 0x8a, 0x13, 0x0b, 0x59, 0xfe, 0xd0, 0xc5, 0x99, 0x38, 0x78, 0x15, 0x16, 0xb8, 0x52, 0xb0, 0x04, 0xf2, 0xd9, 0xbc, 0x40, 0x5d, 0x78, 0x84, 0x37, 0xc7, 0x92, 0x71, 0x04, 0xeb, 0xc5, 0x36, 0xd8, 0x45, 0x70, 0x4a, 0x9f, 0x25, 0x72, 0x9b, 0xe0, 0x03, 0x35, 0x81, 0xe5, 0x12, 0xec, 0xf0, 0x1d, 0x17, 0x18, 0xf3, 0xbe, 0x7c, 0x51, 0x55, 0xae, 0xa0, 0x43, 0xa1, 0xa4, 0x72, 0xf7, 0x4e, 0x8b, 0x3e, 0x54, 0x33, 0x27, 0xc7, 0xe5, 0x41, 0xfa, 0x95, 0xdc, 0x70, 0x69, 0x90, 0x57, 0xfa, 0x1b, 0xce, 0xe3, 0xc8, 0xa2, 0xaa, 0x3e, 0x29, 0x5d, 0x16, 0x62, 0xca, 0x9c, 0x32, 0xbe, 0xe3, 0x06, 0x1d, 0xc7, 0xae, 0x38, 0x0a, 0xaf, 0x1d, 0xaf, 0x97, 0x74, 0xcc, 0xe8, 0x5b, 0x1d, 0x35, 0xc5, 0xbe, 0x41, 0x23, 0x33, 0x0e, 0xc8, 0x69, 0x0a, 0xcf, 0xf5, 0xd3, 0x35, 0x52, 0xa5, 0x5d, 0x12, 0x89, 0xd1, 0xa3, 0x1b, 0x19, 0x5a, 0x99, 0xc7, 0xb1, 0x06, 0x7c, 0xab, 0x9a, 0xc5, 0x08, 0xe5, 0x90, 0x3a, 0xec, 0xba, 0xd1, 0x76, 0x7b, 0x7e, 0x73, 0x07, 0xa4, 0xb4, 0xfa, 0x31, 0x24, 0x77, 0x2a, 0x7b, 0xfa, 0x19, 0x1a, 0x6e, 0x1b, 0x09, 0x8a, 0x99, 0x68, 0xfa, 0x76, 0xd8, 0xdd, 0x41, 0xec, 0xd6, 0x0b, 0x7f, 0x1a, 0xd1, 0xc8, 0x81, 0xab, 0x9d, 0x25, 0x64, 0x54, 0xec, 0xa0, 0xfd, 0xa9, 0xcc, 0x9b, 0x78, 0x36, 0x71, 0x0d, 0x3e, 0xcb, 0x35, 0x78, 0x1d, 0x17, 0xdd, 0x1b, 0xa3, 0x78, 0x1e, 0x68, 0xca, 0x12, 0x60, 0xb8, 0xdb, 0x1f, 0xc1, 0x3e, 0x8c, 0x85, 0x5d, 0x39, 0x6b, 0xae, 0xcd, 0x6e, 0x80, 0x94, 0xed, 0xd6, 0x2e, 0x1b, 0xe2, 0x94, 0x5b, 0xa4, 0x5c, 0x29, 0xd1, 0xdf, 0x19, 0xeb, 0xe3, 0xe0, 0xab, 0xb4, 0x53, 0x76, 0x7a, 0xd7, 0x73, 0xb8, 0x0c, 0x58, 0x8b, 0xe0, 0x84, 0x5c, 0x7b, 0x5d, 0x69, 0xde, 0xa1, 0x23, 0xa9, 0xa4, 0xfd, 0x46, 0xde, 0x71, 0x93, 0xc7, 0xcf, 0x7d, 0x11, 0xae, 0x3a, 0x22, 0xb2, 0x58, 0xd1, 0xd8, 0x62, 0x13, 0x82, 0x63, 0x23, 0xe8, 0xfb, 0x4b, 0xaf, 0xb8, 0x6e, 0x8d, 0x5f, 0x8b, 0x91, 0x90, 0x4b, 0x24, 0xea, 0x5a, 0xb3, 0xd9, 0x49, 0x04, 0x9e, 0xa1, 0x96, 0x6b, 0xc0, 0x6f, 0xcc, 0x29, 0xa1, 0xbe, 0x46, 0xc4, 0xfc, 0x6d, 0x3a, 0x24, 0x65, 0xce, 0x83, 0x4b, 0x2f, 0xfa, 0xa3, 0x40, 0x8d, 0x67, 0x08, 0x4c, 0xf7, 0xbc, 0x8e, 0x69, 0xd0, 0xe3, 0x46, 0xf8, 0x45, 0x60, 0x76, 0xb2, 0x78, 0xe2, 0xe0, 0xe1, 0xde, 0x18, 0x47, 0xd0, 0xe5, 0xc6, 0x30, 0x80, 0xdb, 0x18, 0xe6, 0x9c, 0x0b, 0x36, 0xc0, 0xaf, 0x29, 0x18, 0xa6, 0x95, 0xf0, 0x9c, 0xd2, 0x30, 0x09, 0xd6, 0xd4, 0x5c, 0x2f, 0xa7, 0xd9, 0x24, 0x91, 0x91, 0x2c, 0x36, 0x77, 0xc9, 0xfd, 0x94, 0x29, 0x8e, 0x62, 0x8d, 0x0d, 0xba, 0x9b, 0xec, 0x0f, 0x97, 0x9a, 0x6f, 0x45, 0xf3, 0xc3, 0x7a, 0xd3, 0x77, 0xf0, 0x0d, 0x0d, 0x34, 0xb8, 0xf4, 0xdc, 0x7f, 0xf1, 0x3d, 0x63, 0xff, 0x73, 0xef, 0xe2, 0x04, 0x1f, 0xf9, 0xda, 0x1a, 0x20, 0x69, 0x72, 0xdf, 0x71, 0xde, 0x19, 0x11, 0x9f, 0x40, 0x6d, 0xeb, 0xd1, 0xae, 0x5b, 0xb2, 0x05, 0xb8, 0x88, 0x8b, 0x9c, 0xcf, 0xf0, 0x8f, 0x19, 0xf9, 0xce, 0x21, 0x26, 0xca, 0xbb, 0x7f, 0xd8, 0x8f, 0x19, 0x98, 0x33, 0xcc, 0xb2, 0x1e, 0xf1, 0xe9, 0x9d, 0xdb, 0x7f, 0x28, 0x62, 0x48, 0x49, 0xda, 0x5d, 0x5c, 0x37, 0xd3, 0x68, 0xa2, 0x77, 0x1b, 0xb4, 0x8e, 0x7e, 0xe6, 0xf8, 0x11, 0x49, 0xc6, 0xce, 0x6b, 0xe9, 0x20, 0x59, 0x41, 0x3e, 0xdd, 0x2c, 0xef, 0x03, 0x61, 0x67, 0x1f, 0x0a, 0xc1, 0x23, 0x9b, 0xc9, 0x30, 0x11, 0x5f, 0x16, 0xbb, 0x5d, 0xf3, 0x2f, 0x37, 0xd9, 0xf7, 0xfd, 0x77, 0x57, 0xff, 0x9a, 0xc2, 0x56, 0xa2, 0x10, 0x83, 0xe2, 0xce, 0x64, 0x43, 0xb5, 0x5e, 0xd3, 0xd5, 0xa2, 0xef, 0x5b, 0xd0, 0x34, 0xef, 0x7d, 0x43, 0x92, 0xf6, 0x42, 0xa3, 0xa5, 0x5a, 0x7c, 0x08, 0x7d, 0xfe, 0x4e, 0x99, 0xf1, 0x6a, 0xee, 0x45, 0x86, 0x21, 0xaa, 0xb5, 0x93, 0x2e, 0x29, 0x7e, 0xa2, 0x01, 0xf4, 0x9a, 0x18, 0x79, 0x34, 0x19, 0x19, 0x42, 0xbe, 0x14, 0xa6, 0x61, 0x4c, 0xe3, 0x08, 0x0d, 0x0d, 0x8f, 0x72, 0xc1, 0x61, 0x8a, 0xe2, 0x8f, 0xdd, 0x9e, 0x48, 0xb7, 0x96, 0x24, 0xea, 0x78, 0x9c, 0x76, 0x07, 0x26, 0xc4, 0xa7, 0xba, 0x7d, 0xab, 0x71, 0x22, 0x35, 0xf7, 0x6e, 0xc0, 0xd6, 0xe0, 0x8b, 0x20, 0xce, 0xf0, 0xbb, 0xbc, 0xc1, 0x06, 0xe8, 0x1d, 0x20, 0xa1, 0x2f, 0x43, 0xfd, 0x5b, 0x4c, 0x47, 0x1e, 0xb4, 0x53, 0x3f, 0x50, 0x11, 0xa2, 0x62, 0xfd, 0x05, 0x13, 0x6d, 0x01, 0xce, 0x76, 0x45, 0xba, 0x23, 0x3e, 0xdd, 0x5e, 0x2d, 0x7a, 0x5a, 0x92, 0xd3, 0x07, 0x75, 0x38, 0x3a, 0x04, 0x21, 0x88, 0x8c, 0x87, 0x6e, 0x62, 0xf9, 0x8e, 0xae, 0xe2, 0xfc, 0x39, 0xd6, 0x36, 0xe0, 0x36, 0x27, 0xac, 0x82, 0x7c, 0x0d, 0x0f, 0x58, 0x3c, 0x47, 0x34, 0xb2, 0x14, 0x48, 0xd0, 0x40, 0x87, 0xdd, 0x8c, 0xd5, 0xaa, 0x11, 0x5c, 0x6a, 0x1f, 0x4e, 0x0c, 0x66, 0x47, 0xc4, 0x1c, 0x1d, 0xb4, 0x0e, 0xcd, 0x96, 0xdd, 0x13, 0x7c, 0x91, 0x16, 0x2b, 0x2f, 0xc8, 0xbf, 0x84, 0x6e, 0x76, 0xbb, 0xc3, 0x54, 0x16, 0x24, 0xee, 0xe5, 0x6d, 0x3c, 0x89, 0xa2, 0xca, 0xa7, 0xff, 0x5b, 0x8d, 0xd8, 0x44, 0x45, 0xe6, 0xca, 0xb9, 0x4c, 0xdf, 0xf0, 0x50, 0xaa, 0x9d, 0x6e, 0xf0, 0xb9, 0xe2, 0x89, 0x1b, 0x05, 0xd7, 0x5c, 0xce, 0xa6, 0x09, 0xcd, 0xa8, 0xcd, 0xb1, 0xc0, 0x4f, 0x9c, 0x38, 0x8b, 0x10, 0x3b, 0xfa, 0xa9, 0xc5, 0x28, 0x4b, 0xb2, 0xfc, 0xce, 0xb7, 0x8a, 0x55, 0x5a, 0x8e, 0xd9, 0x2c, 0xca, 0xa1, 0xbc, 0x78, 0x46, 0x46, 0xbb, 0xf3, 0xb4, 0xa2, 0xfa, 0x7c, 0x87, 0x27, 0xb3, 0xb9, 0xd7, 0x5b, 0xe3, 0x00, 0xb7, 0xdb, 0x44, 0x78, 0xc3, 0xa0, 0x7c, 0x7b, 0xf8, 0x82, 0x94, 0x3f, 0xc9, 0xfa, 0xab, 0xb6, 0x6e, 0x2c, 0xec, 0xb2, 0x80, 0x25, 0xbd, 0x4d, 0xc3, 0x61, 0x39, 0x88, 0x43, 0x90, 0xe1, 0x32, 0xa2, 0x99, 0x8e, 0x0c, 0xb0, 0xe0, 0xab, 0x2a, 0x3c, 0xc5, 0xa0, 0x9c, 0x2a, 0x6d, 0x91, 0x4e, 0xc6, 0xc4, 0x49, 0x2d, 0x58, 0xc2, 0x71, 0x8b, 0xf9, 0xee, 0x06, 0xc5, 0xa4, 0x21, 0x0a, 0x23, 0x90, 0x8d, 0x79, 0xff, 0xbd, 0xfd, 0x7e, 0x2a, 0xcd, 0x5e, 0xe7, 0x8b, 0x16, 0x7f, 0xd7, 0x09, 0xf5, 0x15, 0xba, 0xac, 0x65, 0x02, 0x7e, 0xfe, 0xd0, 0xd7, 0x01, 0xb8, 0x25, 0x97, 0xc5, 0x9a, 0x2a, 0xbe, 0xeb, 0x9b, 0x14, 0x81, 0x5f, 0x42, 0x55, 0x58, 0x50, 0x54, 0xb5, 0xba, 0xe3, 0xaf, 0xa4, 0x27, 0x28, 0x76, 0xce, 0x6c, 0x4d, 0x6e, 0xf1, 0x23, 0x11, 0xa8, 0xeb, 0x79, 0x7c, 0x61, 0x18, 0x34, 0xcd, 0x26, 0xda, 0xf4, 0xb5, 0x3c, 0x79, 0xb8, 0xc2, 0x3e, 0x2e, 0xa5, 0x1e ],
- const [ 0xd7, 0xa5, 0x68, 0x8c, 0x0c, 0x38, 0x5e, 0xdc, 0xc1, 0x60, 0x49, 0x30, 0xcc, 0x73, 0xba, 0x22, 0x67, 0x8c, 0xec, 0x50, 0xcc, 0xd3, 0xfa, 0xbc, 0x02, 0xff, 0x50, 0x73, 0xf6, 0x19, 0x5f, 0x6d, 0xcd, 0x82, 0x96, 0xb5, 0x79, 0x37, 0x8d, 0xc9, 0x8a, 0x54, 0x83, 0x44, 0x47, 0xd7, 0x0a, 0xba, 0xfe, 0xa7, 0x01, 0xe4, 0x98, 0xd5, 0xc3, 0xfd, 0x70, 0x21, 0x9e, 0x6b, 0x66, 0xc0, 0x87, 0xa2, 0x2f, 0x5c, 0x0b, 0x46, 0xef, 0x5d, 0x89, 0x8f, 0x09, 0x67, 0x9f, 0xf2, 0x35, 0x23, 0xe2, 0xfe, 0xd4, 0x43, 0xd2, 0x84, 0x81, 0xc0, 0x0d, 0xfa, 0xe9, 0x66, 0xc2, 0x21, 0xdc, 0x93, 0x69, 0xe6, 0xa4, 0x3c, 0xb1, 0x86, 0x95, 0x30, 0xba, 0xf6, 0xe5, 0xa1, 0x85, 0x82, 0xbe, 0xe0, 0xa9, 0xb4, 0x92, 0x68, 0x47, 0x77, 0xaf, 0x1e, 0x3f, 0x7c, 0x13, 0xd7, 0xa4, 0xdd, 0x81, 0x1b, 0x6e, 0x01, 0xd4, 0x29, 0x6f, 0xbf, 0x94, 0x3a, 0x89, 0xc6, 0xc7, 0x0a, 0x1d, 0x3c, 0x09, 0x95, 0xc6, 0xa5, 0xdf, 0x1e, 0x48, 0x07, 0x49, 0x76, 0xc3, 0x4b, 0x96, 0x7b, 0x2d, 0xe7, 0x7c, 0xdf, 0xfe, 0xba, 0x68, 0x2b, 0x2d, 0x37, 0x13, 0x03, 0x5c, 0xc6, 0x56, 0xab, 0x50, 0x67, 0x3f, 0xca, 0xa3, 0x99, 0x64, 0x6e, 0xbd, 0x7a, 0x77, 0x51, 0x00, 0x2f, 0x1b, 0x5b, 0x43, 0x86, 0xf6, 0x67, 0x82, 0xda, 0x08, 0x4a, 0xd3, 0x38, 0x3b, 0x11, 0x9c, 0xbf, 0x3b, 0x8b, 0x04, 0x4d, 0x87, 0x08, 0xa7, 0x58, 0xc9, 0x5f, 0x8e, 0x19, 0x63, 0x36, 0x5e, 0xf0, 0x4a, 0x7d, 0xcf, 0x04, 0x17, 0x3c, 0x60, 0x2a, 0x5b, 0x8f, 0x4a, 0x08, 0x33, 0xee, 0xb2, 0x7a, 0x1d, 0xb2, 0x22, 0x34, 0x0a, 0xd5, 0x3a, 0xa9, 0xb5, 0xfa, 0xa3, 0x2c, 0x32, 0xad, 0x45, 0x55, 0xca, 0xeb, 0xba, 0xa7, 0x06, 0xe5, 0x02, 0x6f, 0x0a, 0x01, 0x78, 0xef, 0x24, 0x22, 0x04, 0xbc, 0xa5, 0x29, 0x93, 0x65, 0xf0, 0xbc, 0xc4, 0x55, 0xd0, 0x46, 0xe4, 0xfb, 0x0f, 0x3e, 0x1d, 0x28, 0x44, 0xad, 0xea, 0xb8, 0xec, 0xea, 0xce, 0x74, 0xbc, 0xa8, 0x46, 0x37, 0x36, 0x33, 0xfc, 0x50, 0x7b, 0xf7, 0x3d, 0x28, 0x60, 0x42, 0xad, 0x25, 0xc3, 0x4b, 0x3a, 0xcd, 0x20, 0x72, 0x4e, 0x2f, 0x5f, 0xc9, 0x49, 0x7e, 0xf0, 0xd4, 0x2e, 0x00, 0x1a, 0x8d, 0x9c, 0x26, 0x90, 0xab, 0x01, 0xfd, 0x46, 0x24, 0x0a, 0xc5, 0x82, 0xf1, 0x5e, 0xde, 0x36, 0x11, 0x8b, 0xec, 0x8d, 0xd0, 0x40, 0x33, 0xc4, 0x49, 0xbe, 0x43, 0x3b, 0x2a, 0x89, 0xda, 0xcc, 0xb7, 0x63, 0x06, 0x5b, 0x12, 0x7a, 0x8a, 0xae, 0xb9, 0xe1, 0x83, 0x7f, 0x50, 0x3d, 0x4b, 0xd0, 0xa1, 0xc1, 0x9e, 0x7f, 0xe1, 0x5c, 0xfb, 0x1a, 0x34, 0x30, 0x4d, 0xf4, 0x74, 0x47, 0xcb, 0x79, 0x2e, 0x81, 0x1d, 0xbe, 0xee, 0xd1, 0xc0, 0x5d, 0xbd, 0xa9, 0xab, 0x7f, 0xe7, 0xb3, 0x33, 0x3a, 0x02, 0xc2, 0x2c, 0x1e, 0x2b, 0x08, 0x51, 0x0a, 0x93, 0x89, 0xe6, 0x44, 0x3b, 0xcf, 0x9b, 0xc9, 0xfb, 0xe0, 0xb4, 0xe2, 0xc9, 0x6d, 0x67, 0xf8, 0x38, 0x4c, 0x85, 0xa9, 0x3f, 0x29, 0x5d, 0x1c, 0x3c, 0x78, 0xde, 0x91, 0x38, 0xad, 0xfb, 0x3c, 0x6d, 0xb0, 0x54, 0x53, 0x05, 0x8b, 0x12, 0x66, 0x25, 0x66, 0x12, 0xef, 0x2a, 0xb6, 0x47, 0x2a, 0x33, 0xb1, 0x59, 0x26, 0xdf, 0x05, 0x92, 0x1c, 0x58, 0xc9, 0xfb, 0x01, 0x90, 0xb4, 0xc2, 0x57, 0xca, 0x8d, 0xdf, 0x48, 0x5d, 0xe2, 0xf7, 0xf5, 0xb4, 0xfd, 0x81, 0x0c, 0x9a, 0x14, 0x27, 0x98, 0xb4, 0xc0, 0x6f, 0x1e, 0x4f, 0xb0, 0x9a, 0xe5, 0x5d, 0x9f, 0xcd, 0x95, 0xb9, 0x83, 0x6e, 0x04, 0xb3, 0x08, 0xd1, 0x4c, 0xc8, 0x3c, 0x14, 0x21, 0xb1, 0x8c, 0x47, 0x61, 0xa0, 0xef, 0xd0, 0xed, 0xc6, 0x61, 0x0e, 0xb8, 0x18, 0x93, 0x3d, 0x1d, 0x53, 0xe1, 0x9a, 0x76, 0x3d, 0x84, 0xc7, 0xea, 0x2e, 0x09, 0x70, 0x86, 0xd0, 0x01, 0x2f, 0x8f, 0x23, 0xfb, 0xad, 0x17, 0xc4, 0xaf, 0x0b, 0xcf, 0x6e, 0x7c, 0x80, 0x1c, 0xc1, 0x15, 0x43, 0x6d, 0x42, 0x77, 0xab, 0xcb, 0xa4, 0x1e, 0x94, 0xb2, 0x46, 0x78, 0x06, 0x1f, 0xfc, 0x9a, 0x11, 0xea, 0x12, 0x32, 0xfb, 0x56, 0x8e, 0xbc, 0x9e, 0xe7, 0xb6, 0xf9, 0x0b, 0x73, 0xd2, 0x9d, 0x73, 0x7c, 0x33, 0x48, 0x48, 0xbd, 0x74, 0xb8, 0x9f, 0x03, 0x00, 0x3d, 0xd9, 0x3e, 0xd4, 0x6d, 0x82, 0xd8, 0x87, 0x18, 0x79, 0x45, 0x87, 0x7f, 0x51, 0xdc, 0xa5, 0xc0, 0xf8, 0xe5, 0xd4, 0x95, 0x96, 0xf3, 0x2d, 0x3e, 0xb8, 0x74, 0x37, 0xbc, 0xae, 0x86, 0x66, 0x40, 0x31, 0x0c, 0xe1, 0xe3, 0x4a, 0x01, 0x88, 0x97, 0x6f, 0x0d, 0x36, 0x5e, 0xee, 0x56, 0x43, 0xba, 0x8f, 0x99, 0x4e, 0x64, 0x74, 0x79, 0x39, 0x40, 0x45, 0x17, 0x74, 0x91, 0x8a, 0xe2, 0x7f, 0x6a, 0x58, 0xb1, 0xaa, 0x65, 0x30, 0x0f, 0x20, 0x96, 0x24, 0xd5, 0x23, 0xc2, 0x3b, 0xff, 0x99, 0xcd, 0x17, 0xb8, 0xc8, 0x72, 0xd5, 0xb7, 0x5e, 0x37, 0x35, 0xce, 0xb4, 0x9f, 0xfb, 0xc0, 0x53, 0xa1, 0x95, 0x54, 0xb8, 0x59, 0xfd, 0xa7, 0x54, 0xfe, 0xe1, 0xc6, 0xd7, 0x14, 0x02, 0x7c, 0xae, 0xe2, 0xda, 0x69, 0xca, 0x27, 0x81, 0x54, 0xa4, 0x09, 0xd1, 0xc3, 0x7e, 0x4e, 0xc9, 0xc8, 0xeb, 0xce, 0x2f, 0x1d, 0x91, 0x28, 0x79, 0x73, 0x2e, 0xb5, 0xee, 0x08, 0xd9, 0xba, 0x09, 0x78, 0x8b, 0xe2, 0x1e, 0xd5, 0xdd, 0xeb, 0x3f, 0xf9, 0x13, 0x9f, 0x61, 0x1b, 0x5a, 0x06, 0xbb, 0xa1, 0x4e, 0xda, 0x6f, 0x35, 0xbf, 0x3b, 0x6c, 0x1b, 0xb5, 0xa4, 0x93, 0xc2, 0xb1, 0x1e, 0x19, 0x99, 0x36, 0xb3, 0x2c, 0x23, 0x88, 0x26, 0xd9, 0x4e, 0xb4, 0xe1, 0x2d, 0x01, 0xd0, 0x2f, 0x9a, 0xf4, 0x84, 0xab, 0x9d, 0xc4, 0xca, 0xf9, 0x9e, 0x47, 0xf1, 0xb3, 0x18, 0x1d, 0xe8, 0xa6, 0xf9, 0x87, 0xb9, 0x3f, 0x4c, 0x7c, 0x54, 0x40, 0x15, 0xfa, 0x8e, 0xb7, 0x7c, 0x9b, 0x69, 0x31, 0x2e, 0x68, 0x96, 0x2b, 0x01, 0xf1, 0x38, 0xc9, 0xd7, 0x9e, 0xeb, 0xcb, 0xc4, 0x40, 0x05, 0xbc, 0x73, 0xeb, 0x1c, 0x6c, 0xc5, 0x08, 0xc8, 0xa1, 0xbc, 0xa6, 0xa9, 0x0a, 0x98, 0x11, 0xac, 0x74, 0x3f, 0xa6, 0x8b, 0x40, 0xe2, 0xe5, 0x93, 0x15, 0xde, 0xc8, 0xaa, 0xd2, 0xe0, 0x53, 0x90, 0xc7, 0x4d, 0x6d, 0x65, 0x24, 0xe1, 0xee, 0x6c, 0xb1, 0x96, 0xf9, 0x0e, 0xc0, 0xc7, 0x8c, 0x22, 0x61, 0x95, 0x55, 0x6b, 0xd4, 0x8a, 0xc8, 0x62, 0x44, 0x7c, 0x6e, 0x36, 0xb2, 0xb4, 0x80, 0x12, 0x2f, 0x50, 0xb4, 0x9e, 0x4e, 0xe6, 0x57, 0xc8, 0xd9, 0x6a, 0x9c, 0xc4, 0xc3, 0x52, 0x34, 0x51, 0x5e, 0xf7, 0x1e, 0x3f, 0xce, 0x3f, 0xc1, 0x2e, 0xbe, 0x79, 0x38, 0x98, 0x51, 0x88, 0xed, 0x12, 0x5b, 0x44, 0x69, 0xce, 0xd2, 0x1d, 0x6a, 0x65, 0x7f, 0x02, 0x36, 0xd3, 0xf9, 0x81, 0x30, 0xc3, 0xd4, 0x2f, 0xa9, 0x0e, 0x16, 0x4a, 0xf8, 0x7e, 0xea, 0x9d, 0xcd, 0xd7, 0x99, 0xa4, 0xc2, 0x18, 0xb5, 0xf1, 0x33, 0xfe, 0x98, 0xce, 0x50, 0xca, 0x0d, 0x24, 0x70, 0x44, 0x4c, 0x9b, 0xa9, 0x00, 0x2c, 0x03, 0x9d, 0xe0, 0x94, 0xf3, 0x96, 0xda, 0x32, 0xaf, 0xd6, 0xfb, 0x70, 0x4f, 0x28, 0xac, 0xa4, 0x1e, 0xbb, 0x35, 0x87, 0x41, 0x30, 0x7f, 0xe9, 0x99, 0xf2, 0x1e, 0xa3, 0xea, 0xc6, 0x8e, 0xcc, 0x3c, 0xa3, 0xbd, 0x30, 0x81, 0xc3, 0xca, 0xfd, 0x79, 0xfa, 0x0d, 0xc0, 0xd3, 0x47, 0x57, 0x90, 0x95, 0xa9, 0x7b, 0x89, 0xbd, 0x33, 0x0d, 0x7d, 0x28, 0x63, 0x69, 0xe5, 0xb4, 0xb0, 0xf7, 0x1e, 0xa2, 0x62, 0xae, 0xd2, 0x3e, 0xa6, 0xd7, 0xb4, 0xc1, 0xe2, 0x14, 0x70, 0x76, 0x46, 0xa0, 0xe1, 0x1c, 0xa4, 0xd8, 0x85, 0x8c, 0x81, 0xfb, 0x2f, 0x9b, 0x6c, 0x2e, 0xfc, 0x42, 0x8e, 0xc3, 0x88, 0xfc, 0x83, 0xba, 0x62, 0x70, 0x68, 0x88, 0xbd, 0x50, 0x35, 0x18, 0x68, 0x81, 0x4d, 0x10, 0x00, 0x7c, 0x54, 0x55, 0x64, 0xf4, 0x41, 0xd1, 0x69, 0xb9, 0xb4, 0x74, 0xcf, 0xdc, 0x89, 0x78, 0x74, 0x14, 0xad, 0xea, 0xc8, 0x60, 0x30, 0x66, 0x81, 0xee, 0x9c, 0x22, 0x90, 0x3c, 0x86, 0x2d, 0x53, 0x7d, 0x62, 0xf9, 0x0c, 0x3e, 0x9c, 0x18, 0x92, 0x49, 0xe4, 0x43, 0x46, 0xc9, 0xc9, 0xa0, 0x49, 0xb0, 0x89, 0x45, 0xec, 0x56, 0x27, 0xf8, 0x68, 0x62, 0xbf, 0x38, 0xd0, 0xee, 0x17, 0x82, 0x43, 0xe6, 0x76, 0xcd, 0x66, 0xb1, 0xb9, 0x57, 0x11, 0x14, 0xa3, 0xa3, 0x49, 0x53, 0x75, 0xc2, 0x6f, 0x99, 0xbe, 0xd3, 0xb6, 0x99, 0x75, 0xc6, 0xdb, 0x76, 0x45, 0x65, 0x10, 0xe0, 0x28, 0x94, 0x39, 0x81, 0x37, 0xd7, 0x5a, 0x97, 0xc1, 0x16, 0x50, 0xe2, 0x9a, 0x9d, 0xc0, 0xc0, 0xb5, 0x67, 0x4e, 0x97, 0xf5, 0x9c, 0x0f, 0x73, 0x41, 0x58, 0x40, 0xf0, 0xd7, 0xae, 0x38, 0x5b, 0xe2, 0xed, 0x9b, 0x14, 0x4e, 0x21, 0xd1, 0x36, 0xdb, 0xdd, 0xb6, 0x7a, 0x70, 0x38, 0x93, 0x59, 0xb3, 0x16, 0x4e, 0x71, 0xd6, 0xa9, 0xdd, 0x2a, 0xb3, 0x37, 0x00, 0x99, 0x1c, 0x1d, 0x30, 0xa5, 0x6c, 0x14, 0xd2, 0x68, 0x62, 0xb3, 0xb1, 0xd8, 0x30, 0x35, 0xab, 0xa6, 0xce, 0x7d, 0xab, 0x66, 0x94, 0x57, 0xd7, 0xf1, 0x08, 0x01, 0x0a, 0x07, 0xf5, 0xea, 0x84, 0x39, 0xbd, 0xb9, 0xe0, 0x06, 0xef, 0x91, 0x47, 0x45, 0x1c, 0x93, 0xe4, 0xc3, 0xe7, 0xa5, 0x97, 0x2c, 0x5c, 0x72, 0xee, 0x2f, 0x83, 0xb2, 0x51, 0xdd, 0x34, 0xac, 0x7c, 0x52, 0x2c, 0xf9, 0x33, 0x98, 0x61, 0x8a, 0x30, 0xc8, 0x93, 0xed, 0x61, 0x72, 0x24, 0xcb, 0x50, 0x3f, 0x29, 0xb6, 0xe3, 0xd5, 0xc1, 0x21, 0x45, 0xfb, 0xa6, 0xb0, 0x24, 0xfe, 0x01, 0xb3, 0x1d, 0x53, 0x83, 0xed, 0x74, 0x7d, 0xb1, 0x99, 0x09, 0x32, 0x7f, 0xaf, 0x87, 0xb9, 0x21, 0x63, 0xdf, 0x96, 0x1e, 0xee, 0xf5, 0x69, 0xa6, 0x92, 0x98, 0x14, 0x25, 0xd8, 0xb8, 0x1c, 0x18, 0x1d, 0xd3, 0x52, 0x20, 0x4c, 0xb1, 0xb2, 0x54, 0xed, 0x51, 0x8b, 0xdc, 0x5f, 0x23, 0xe0, 0xbc, 0x61, 0x78, 0x0e, 0xed, 0xd8, 0x36, 0xb0, 0xb2, 0xcc, 0xd0, 0xc0, 0x29, 0xb3, 0x75, 0xff, 0x20, 0xf2, 0x88, 0x96, 0x2b, 0xa1, 0x51, 0xfd, 0xf3, 0x8e, 0xf2, 0x1c, 0xd1, 0x85, 0x9c, 0xb0, 0x9c, 0xcf, 0x02, 0xf1, 0xbf, 0xf9, 0x0e, 0x72, 0x8e, 0xd7, 0xd3, 0x48, 0xda, 0xc7, 0xc4, 0x6e, 0xc2, 0x3a, 0x23, 0x68, 0xcd, 0x71, 0xbc, 0x27, 0x36, 0x85, 0xd2, 0x2d, 0x87, 0xaa, 0x5a, 0xf1, 0x69, 0xb4, 0x67, 0x85, 0xbb, 0xdb, 0xe6, 0x76, 0xe1, 0xbb, 0x8b, 0xf4, 0x5f, 0x9f, 0x0b, 0x32, 0xa6, 0xfe, 0x8c, 0x10, 0x2d, 0x46, 0x59, 0xf8, 0xc4, 0xd9, 0xdb, 0x05, 0x26, 0x55, 0xc5, 0x6b, 0xcd, 0x19, 0x8e, 0x13, 0x0a, 0x05, 0x24, 0x85, 0x54, 0x80, 0xdf, 0x0b, 0xe1, 0xc0, 0xb3, 0x13, 0x73, 0x46, 0xab, 0xd6, 0x75, 0xa7, 0x92, 0x37, 0x46, 0x92, 0xf3, 0xee, 0xd5, 0x0f, 0x45, 0xe5, 0x6e, 0x05, 0x5f, 0xe2, 0xd3, 0xff, 0x32, 0x67, 0x8f, 0x2f, 0xb6, 0xd7, 0x87, 0xb4, 0x25, 0xd9, 0xd2, 0x18, 0x68, 0x01, 0xca, 0x1d, 0xce, 0xae, 0x63, 0xb9, 0x04, 0x2e, 0xbc, 0x5f, 0x42, 0x29, 0xf4, 0x80, 0xc2, 0x3c, 0x3f, 0x52, 0x76, 0xe4, 0x39, 0xd0, 0xfa, 0x9e, 0x7a, 0x02, 0xc8, 0x4c, 0x6a, 0x7e, 0xab, 0xdb, 0x56, 0x2f, 0x76, 0x23, 0xc4, 0x55, 0xf5, 0x0e, 0x04, 0xcd, 0x24, 0xfd, 0x08, 0x93, 0x9f, 0x67, 0x76, 0x85, 0x5a, 0xc3, 0xfa, 0x69, 0x92, 0xa9, 0xe1, 0x32, 0x03, 0x34, 0xe4, 0x7f, 0x5c, 0xaa, 0x41, 0x65, 0xf0, 0x5f, 0x11, 0x6e, 0xae, 0xd6, 0xd5, 0xe1, 0x53, 0x2a, 0x52, 0x44, 0xde, 0xac, 0x9f, 0x20, 0x44, 0xce, 0x7c, 0x04, 0x66, 0x40, 0xe5, 0xcc, 0x40, 0x58, 0xe7, 0x23, 0x63, 0xb7, 0xb3, 0x47, 0xa5, 0x2a, 0xf1, 0x0d, 0x17, 0xce, 0x56, 0x24, 0x37, 0x78, 0x79, 0x9d, 0x67, 0x53, 0xe2, 0xab, 0x9e, 0xcb, 0x64, 0xa8, 0x5e, 0xaa, 0xae, 0x59, 0xe6, 0x81, 0x1c, 0x73, 0xa8, 0x4a, 0xd3, 0x5e, 0xfd, 0x4b, 0x0c, 0x38, 0x18, 0x3e, 0xb0, 0x1d, 0x38, 0xae, 0x26, 0xa6, 0x22, 0xa4, 0x68, 0xaf, 0xcf, 0x83, 0x5d, 0x5e, 0x62, 0x31, 0x63, 0x61, 0x5d, 0x77, 0x2a, 0x76, 0x13, 0xab, 0xc9, 0x31, 0x61, 0x8c, 0x0b, 0xfa, 0x99, 0x6d, 0x0a, 0x55, 0xbf, 0x96, 0x00, 0x66, 0xf8, 0xe7, 0x59, 0xb4, 0x3f, 0xbe, 0x0d, 0x2d, 0x5a, 0x1b, 0x2c, 0x6a, 0x0c, 0x02, 0xbb, 0x35, 0x8d, 0x21, 0xbe, 0x48, 0x37, 0xb3, 0x96, 0x58, 0x82, 0xa4, 0x8d, 0x52, 0x32, 0xf6, 0xb0, 0xe5, 0xcf, 0x63, 0xdd, 0x40, 0x56, 0x44, 0x1c, 0x1d, 0x2e, 0xb1, 0x32, 0xfe, 0x5d, 0xea, 0x74, 0xb6, 0xfc, 0xf5, 0xda, 0x2c, 0xe8, 0x89, 0x54, 0x5c, 0xbb, 0x2b, 0x61, 0x9e, 0xfb, 0x97, 0xdd, 0x2b, 0x91, 0x61, 0x1a, 0xdd, 0x7c, 0xdc, 0x33, 0x36, 0xc6, 0x3b, 0x9d, 0xa4, 0xb7, 0xf6, 0xff, 0x03, 0x4a, 0x70, 0x44, 0x64, 0xdd, 0xd6, 0xee, 0x0d, 0x2c, 0x4a, 0xad, 0xc1, 0x80, 0x41, 0x30, 0x41, 0x24, 0x29, 0x3b, 0x12, 0x19, 0x50, 0xfa, 0x81, 0x0a, 0x01, 0x95, 0xe5, 0x82, 0xf0, 0x04, 0x24, 0x5d, 0xd7, 0x25, 0x78, 0x7d, 0x62, 0x0b, 0x73, 0xbe, 0x49, 0x99, 0x41, 0x2b, 0xbb, 0x50, 0x2e, 0x72, 0x03, 0x66, 0x67, 0x95, 0x66, 0x18, 0x05, 0xe3, 0x4a, 0x41, 0x47, 0x27, 0x9e, 0x2a, 0x1f, 0x1f, 0x75, 0xa4, 0xf1, 0x2f, 0xf4, 0x54, 0x97, 0x57, 0x6f, 0x4f, 0xa8, 0x63, 0xcf, 0xe7, 0xfa, 0x61, 0x37, 0xc4, 0x65, 0x58, 0xe7, 0x36, 0xca, 0x37, 0x60, 0xc9, 0x54, 0x0c, 0xc8, 0x1a, 0xfe, 0x76, 0x91, 0xea, 0x56, 0x5d, 0x56, 0x71, 0x80, 0xe0, 0x05, 0xf4, 0x7d, 0x8f, 0x43, 0x9a, 0xae, 0xdb, 0x0c, 0x7c, 0x93, 0xca, 0x9a, 0xfb, 0xd9, 0xf0, 0x89, 0x56, 0x94, 0x9a, 0x38, 0x7c, 0xc9, 0x4c, 0x72, 0x1e, 0x2f, 0x6e, 0x4e, 0x09, 0x36, 0x42, 0x53, 0xb3, 0x49, 0x19, 0xe0, 0x13, 0x50, 0xc7, 0xcb, 0xb6, 0x7a, 0x54, 0x49, 0x10, 0x39, 0xf4, 0x0e, 0x10, 0x8e, 0x39, 0xb5, 0xf7, 0x86, 0x88, 0x61, 0x69, 0x05, 0xca, 0xa5, 0xc4, 0xc2, 0x63, 0xa1, 0xb2, 0x93, 0x68, 0x6e, 0xfa, 0xeb, 0x0c, 0xbd, 0x9c, 0xa0, 0x5c, 0xba, 0x1c, 0xf2, 0x2d, 0x37, 0x1e, 0xca, 0x52, 0x06, 0x33, 0x3f, 0x12, 0xa6, 0xf3, 0x5e, 0xd9, 0x23, 0x4c, 0x2b, 0x2d, 0x37, 0x19, 0xe3, 0xe4, 0xb5, 0xf6, 0x84, 0x94, 0x27, 0x53, 0x8f, 0x4c, 0xb6, 0xc8, 0x0d, 0x81, 0x4b, 0xa8, 0xd0, 0x4b, 0xf4, 0xd9, 0xfb, 0xd2, 0x89, 0xe3, 0xc5, 0x02, 0x8f, 0x46, 0x79, 0x87, 0x5c, 0x11, 0xc1, 0xf5, 0x7c, 0xb0, 0x25, 0x46, 0x54, 0x06, 0xcf, 0x8a, 0x05, 0xbc, 0x91, 0xda, 0x94, 0xd8, 0x29, 0x8e, 0x47, 0x91, 0xc3, 0xb0, 0x52, 0x61, 0xbf, 0xb0, 0xb2, 0x5d, 0xb5, 0x58, 0x5a, 0xc2, 0xb6, 0x03, 0x8d, 0xd0, 0xd5, 0x0a, 0x8b, 0xdb, 0xe6, 0x80, 0x6f, 0x9f, 0x86, 0x1f, 0x58, 0xd4, 0x5c, 0x81, 0xc7, 0x02, 0x9e, 0x94, 0x48, 0x97, 0xd6, 0x48, 0x55, 0x37, 0xe6, 0x8a, 0x77, 0x53, 0x49, 0x76, 0xae, 0xfd, 0x9d, 0xc8, 0x13, 0xfa, 0x5e, 0x94, 0xbc, 0x19, 0xf5, 0x38, 0xe0, 0xc4, 0xf1, 0x8e, 0x3b, 0xd5, 0x94, 0x66, 0xb4, 0xab, 0x91, 0x33, 0x3e, 0x7c, 0x14, 0x04, 0xfc, 0xec, 0x03, 0xb6, 0xa8, 0xdf, 0x83, 0x68, 0x35, 0x8c, 0xbf, 0x30, 0xb3, 0xd4, 0xe5, 0x0c, 0x74, 0xd1, 0x70, 0x1c, 0x6d, 0xb1, 0xad, 0x0e, 0xde, 0xc5, 0x78, 0xd9, 0x36, 0xd5, 0x47, 0xae, 0x31, 0xb7, 0x6b, 0x2b, 0x43, 0x1f, 0x92, 0xd3, 0x39, 0xb9, 0x8f, 0xbb, 0x1e, 0x75, 0x5e, 0x85, 0x5b, 0x23, 0x62, 0x92, 0x23, 0x3f, 0xf2, 0x74, 0x0e, 0x0e, 0x14, 0xa2, 0x04, 0xea, 0x88, 0x70, 0x5d, 0xd9, 0x09, 0x3e, 0x46, 0x65, 0xcf, 0xef, 0x67, 0xa8, 0x58, 0x9d, 0xc3, 0xa7, 0x68, 0x8a, 0xdf, 0xe1, 0x4f, 0x5a, 0x26, 0x27, 0x6a, 0x80, 0x8c, 0xad, 0xec, 0xf7, 0x72, 0x62, 0xde, 0x32, 0xc9, 0x7d, 0x65, 0x55, 0x7b, 0x58, 0x44, 0xa5, 0x06, 0x82, 0xa1, 0x3d, 0x6a, 0x10, 0x0c, 0x04, 0x46, 0x33, 0xbd, 0xdb, 0x3e, 0x10, 0x1d, 0x1b, 0x9f, 0xcb, 0x89, 0x3e, 0x46, 0xe5, 0x52, 0xdc, 0xbe, 0xc9, 0x08, 0xda, 0xa8, 0xa1, 0xf8, 0xde, 0x60, 0x6e, 0xf3, 0x05, 0xdd, 0x58, 0x51, 0xd9, 0xd9, 0x42, 0x36, 0x7d, 0x32, 0xa2, 0x14, 0x2b, 0x91, 0x90, 0x71, 0xe1, 0x49, 0x1d, 0xeb, 0x56, 0x82, 0xe5, 0x79, 0x33, 0x96, 0xe8, 0xf3, 0x80, 0xbb, 0x95, 0xd5, 0x5c, 0xe3, 0x28, 0x40, 0xf2, 0xe0, 0x36, 0x41, 0xa8, 0xcc, 0x86, 0x56, 0x99, 0xa8, 0x23, 0x2e, 0x46, 0x43, 0xaf, 0xb1, 0x88, 0x5d, 0xfa, 0x40, 0xca, 0x0d, 0xd4, 0x3e, 0x74, 0x60, 0x1f, 0xcf, 0xaa, 0x43, 0x28, 0xdf, 0x37, 0xa3, 0x37, 0x67, 0xc4, 0xd2, 0x64, 0xeb, 0x4e, 0x2d, 0xad, 0x48, 0xd7, 0xfc, 0x46, 0xac, 0x5b, 0x99, 0x30, 0xe6, 0x05, 0xd5, 0x0d, 0xe0, 0xa3, 0x97, 0x33, 0x69, 0x58, 0xc6, 0xff, 0x38, 0x90, 0x69, 0x6b, 0x2e, 0x39, 0x0d, 0xe3, 0xdc, 0x31, 0x67, 0x55, 0x45, 0xfa, 0x3b, 0x88, 0xe5, 0xb5, 0x7d, 0xae, 0xf2, 0x4e, 0xb5, 0x3c, 0xe1, 0xf4, 0xa8, 0xf9, 0x2c, 0xcc, 0x34, 0x55, 0x53, 0xe6, 0x7c, 0xfd, 0x21, 0x70, 0x45, 0xac, 0x30, 0x29, 0xa0, 0x44, 0xaf, 0x19, 0xca, 0x1d, 0x63, 0x80, 0x50, 0x9d, 0xec, 0x0c, 0x76, 0x09, 0x4a, 0x4e, 0xda, 0x9a, 0x9f, 0x6f, 0x55, 0xd4, 0x36, 0x1f, 0x22, 0x13, 0xc5, 0xcf, 0x42, 0x67, 0xef, 0x20, 0x1e, 0xa1, 0x0d, 0x9b, 0x6f, 0xae, 0x2e, 0xa2, 0x5b, 0x24, 0x5c, 0xa6, 0xe0, 0x1b, 0x22, 0x9b, 0x76, 0x3e, 0x4b, 0xa9, 0xf0, 0x22, 0xeb, 0x25, 0xa4, 0xd6, 0xa4, 0xbf, 0xcb, 0xbb, 0x22, 0xfd, 0x2b, 0x95, 0xe8, 0xe8, 0xf3, 0xe3, 0x4f, 0x05, 0xe6, 0x6c, 0xcb, 0x86, 0xbb, 0x1b, 0x71, 0xc2, 0xc4, 0x0c, 0xb6, 0xe3, 0xcf, 0xe7, 0x7a, 0xde, 0x4a, 0x6d, 0x45, 0xa9, 0xaa, 0x50, 0xd0, 0xa8, 0x0d, 0x48, 0xc7, 0x68, 0x1d, 0x63, 0xcd, 0x8f, 0x38, 0x9d, 0xc1, 0x13, 0xcf, 0xb0, 0x3f, 0xab, 0x0c, 0x2d, 0x6a, 0x83, 0xb8, 0xcc, 0xe9, 0x34, 0x5b, 0x00, 0x30, 0xf3, 0xa5, 0xcf, 0x01, 0x08, 0x0c, 0xe1, 0x32, 0x83, 0xb7, 0xd7, 0xb0, 0x2a, 0x9b, 0xde, 0xc4, 0xb5, 0xe4, 0x83, 0x95, 0x3e, 0x96, 0xc9, 0xef, 0xf3, 0x74, 0x78, 0x42, 0x0e, 0x21, 0xb9, 0xee, 0x07, 0x85, 0xe0, 0xbd, 0x07, 0x72, 0x89, 0xb1, 0xa1, 0x87, 0xe6, 0x01, 0xbd, 0x55, 0x57, 0x5e, 0xd4, 0xc1, 0x3b, 0x7a, 0x63, 0xa9, 0x07, 0xcb, 0x99, 0xcb, 0x95, 0x8d, 0x53, 0xe2, 0xbe, 0x06, 0x4b, 0x11, 0x2a, 0x0d, 0x8c, 0x85, 0x67, 0xcd, 0x2a, 0x57, 0x39, 0xc7, 0x2f, 0xaf, 0x31, 0x16, 0xd8, 0x2f, 0x81, 0xf7, 0x02, 0x8f, 0x0f, 0x88, 0xdf, 0x84, 0xc8, 0xd0, 0xed, 0xe7, 0x37, 0x00, 0x29, 0x13, 0x56, 0xf8, 0x80, 0x8f, 0xa4, 0x0d, 0x86, 0xed, 0x77, 0x0a, 0x6a, 0xf1, 0x94, 0x74, 0x2a, 0xf6, 0xfd, 0x13, 0x03, 0x8e, 0x0a, 0xad, 0x2c, 0x69, 0xbb, 0x15, 0xc3, 0x78, 0x4d, 0x65, 0x08, 0x51, 0x0b, 0x87, 0xc9, 0xd6, 0x67, 0xfa, 0x1d, 0x11, 0x49, 0xd2, 0x55, 0x63, 0xa7, 0x01, 0x30, 0xde, 0x56, 0xd6, 0x4e, 0xef, 0x20, 0xc3, 0xe7, 0x40, 0x16, 0x63, 0xbd, 0xdc, 0x27, 0xbb, 0x4f, 0x95, 0xf2, 0xc1, 0x50, 0xa3, 0xd9, 0x1a, 0x57, 0x8d, 0x57, 0x28, 0xd8, 0x4d, 0x93, 0x44, 0x53, 0xaf, 0x35, 0x48, 0xcb, 0xfa, 0x78, 0x51, 0x7a, 0xd2, 0x80, 0xc3, 0xc3, 0x5d, 0xef, 0x8d, 0x68, 0xa5, 0xb3, 0xae, 0xfd, 0x3d, 0x21, 0xf8, 0x9d, 0x28, 0x48, 0x13, 0xdb, 0xf6, 0x7f, 0xc6, 0xfb, 0x30, 0x41, 0x72, 0x63, 0xf6, 0x3b, 0xdf, 0x4c, 0xe7, 0xa2, 0x3b, 0xbd, 0x41, 0xca, 0x60, 0xba, 0x49, 0xf5, 0x56, 0xb9, 0xee, 0x69, 0x19, 0x55, 0xa9, 0xc5, 0x9c, 0x46, 0xa7, 0x94, 0x0d, 0x91, 0x2a, 0x23, 0x5b, 0xfc, 0x2d, 0x90, 0xf6, 0xc5, 0x47, 0x24, 0xd6, 0x93, 0xd1, 0xe2, 0xbe, 0xad, 0x4b, 0x60, 0xc2, 0x6a, 0xfc, 0xd6, 0x07, 0xe9, 0xd9, 0x75, 0xca, 0x01, 0xa8, 0xfa, 0xa3, 0x7b, 0x65, 0x82, 0x0b, 0x7f, 0xe5, 0xa0, 0x1d, 0x4d, 0xb9, 0xad, 0x99, 0x2e, 0x55, 0x5f, 0x2e, 0xa9, 0x72, 0x9d, 0xf9, 0xf9, 0xb0, 0x92, 0x49, 0xbf, 0x80, 0x01, 0xa5, 0xf5, 0x41, 0xd8, 0x10, 0x23, 0xa9, 0x07, 0x8b, 0xd5, 0x67, 0x92, 0xdc, 0x4c, 0x06, 0xe5, 0x8e, 0x74, 0x15, 0x69, 0x39, 0x16, 0x85, 0x54, 0x03, 0x4f, 0x52, 0xc5, 0x67, 0x41, 0x66, 0x10, 0x35, 0x08, 0xba, 0x56, 0xda, 0xef, 0xbe, 0x5a, 0xe2, 0xe4, 0xfb, 0x8f, 0xbb, 0x2a, 0xf6, 0x76, 0xbc, 0x4e, 0x58, 0x26, 0x65, 0x5c, 0x4d, 0x2c, 0xe9, 0x52, 0x2a, 0x96, 0xe9, 0xd5, 0x52, 0x4b, 0x83, 0x23, 0x5a, 0x9e, 0x8b, 0x49, 0x6b, 0x22, 0x18, 0x96, 0xe8, 0xbf, 0x43, 0x4f, 0x51, 0x05, 0x2b, 0xa4, 0x68, 0xc1, 0x3d, 0xe3, 0x92, 0xce, 0xb2, 0xec, 0x7f, 0x2e, 0x58, 0xe5, 0x0d, 0x59, 0x96, 0x2f, 0x6a, 0xd5, 0xaa, 0x98, 0x79, 0x07, 0x36, 0xd2, 0x78, 0x49, 0xfb, 0x24, 0xdf, 0x3d, 0xe4, 0x5f, 0x8b, 0x60, 0x46, 0x14, 0x1b, 0xe2, 0x66, 0x04, 0x9b, 0xb5, 0x3c, 0xd8, 0x60, 0xe4, 0x76, 0x12, 0x32, 0x26, 0xc0, 0x44, 0xb1, 0xb3, 0x43, 0x7f, 0xf1, 0x56, 0x6b, 0x0f, 0x68, 0xc3, 0xee, 0x65, 0x0a, 0x2c, 0x0a, 0x55, 0xb2, 0x0f, 0x0e, 0x82, 0xc4, 0x52, 0x1b, 0x16, 0x10, 0x91, 0x2c, 0xb6, 0xfa, 0xb7, 0x54, 0xb5, 0xd8, 0xcb, 0x47, 0x87, 0x9c, 0x0d, 0x1c, 0x79, 0xb3, 0x42, 0x51, 0xa0, 0x2d, 0x4c, 0x10, 0x0f, 0x1d, 0xfd, 0xb0, 0x4d, 0x43, 0x2d, 0x7f, 0x07, 0xe8, 0x0a, 0xbf, 0x01, 0x0a, 0xb0, 0xee, 0x52, 0xb9, 0xfa, 0x4b, 0xd1, 0xc1, 0x97, 0x95, 0xcb, 0x89, 0x60, 0x16, 0xf7, 0x3b, 0xe8, 0xe0, 0xab, 0x25, 0x55, 0x57, 0x4f, 0x60, 0x6f, 0xef, 0x13, 0xaf, 0xf7, 0x37, 0xdd, 0xa9, 0x3a, 0x17, 0x85, 0x1b, 0xe6, 0x55, 0x45, 0xa8, 0x1b, 0x5e, 0x6b, 0xb2, 0xc5, 0x44, 0x51, 0x7e, 0x2a, 0x03, 0x8f, 0x92, 0xbf, 0x08, 0x6f, 0x62, 0x40, 0xf4, 0xa2, 0x2c, 0xff, 0x9d, 0x31, 0x21, 0x7d, 0x55, 0xb6, 0xc5, 0x37, 0x70, 0xcb, 0x98, 0xc2, 0x00, 0xc3, 0xf6, 0x1a, 0xe3, 0x98, 0x3c, 0x38, 0x00, 0x25, 0x2c, 0xe2, 0xcd, 0x95, 0x93, 0xc7, 0x15, 0x1c, 0x28, 0xcb, 0xf8, 0xe5, 0xb8, 0xa0, 0x33, 0x4b, 0x80, 0x96, 0xa1, 0x4b, 0xdb, 0xb4, 0x02, 0x39, 0x1d, 0x07, 0xfc, 0xb3, 0xbe, 0x3a, 0x5f, 0xd4, 0xbb, 0x67, 0xad, 0xa9, 0x39, 0x2d, 0xda, 0xe9, 0x6b, 0x03, 0x50, 0xe0, 0xb7, 0xcb, 0x36, 0xad, 0x14, 0xab, 0xf2, 0xad, 0xb7, 0x18, 0xec, 0x37, 0xee, 0x33, 0x95, 0x8a, 0x4c, 0x59, 0xa9, 0x03, 0x06, 0xf5, 0xb1, 0x94, 0x9d, 0x99, 0xcb, 0x71, 0xbd, 0x4e, 0xad, 0x0c, 0x66, 0x28, 0xe8, 0x44, 0x49, 0x1d, 0x6a, 0xd9, 0x75, 0x16, 0x47, 0x24, 0x32, 0x47, 0xb9, 0x05, 0x2d, 0xbc, 0x65, 0x1c, 0xd6, 0x35, 0xdf, 0x3c, 0x07, 0x34, 0x71, 0x1c, 0xe6, 0x54, 0x18, 0x50, 0x0c, 0xdc, 0xd0, 0x78, 0xe7, 0x94, 0x11, 0xb8, 0x5c, 0xd8, 0x9a, 0x68, 0xb1, 0xea, 0x6d, 0x0c, 0xab, 0x8d, 0x1b, 0x86, 0xf3, 0xcf, 0x41, 0x8a, 0xbe, 0x26, 0x53, 0x53, 0xad, 0xbe, 0x98, 0x94, 0xf2, 0x12, 0x76, 0xb2, 0xb5, 0xba, 0xf0, 0x30, 0xb6, 0x83, 0x6d, 0x6b, 0x33, 0xc5, 0xbb, 0x87, 0x0c, 0xf1, 0x53, 0xa9, 0x25, 0x6a, 0xdf, 0x66, 0x0c, 0x96, 0xf9, 0x7c, 0xdc, 0x34, 0x36, 0xc0, 0x61, 0xf0, 0x63, 0x58, 0x7c, 0x34, 0x0e, 0x2a, 0xc9, 0x42, 0x49, 0x94, 0x80, 0x80, 0xaa, 0x5e, 0x99, 0x12, 0x96, 0xed, 0x34, 0xae, 0xbf, 0xb9, 0x37, 0xac, 0xec, 0x01, 0x39, 0x5d, 0xf9, 0xbd, 0x9f, 0x9e, 0x1e, 0xd4, 0x04, 0xad, 0x74, 0x8f, 0xdf, 0x3b, 0xb4, 0x4d, 0x5f, 0xc2, 0x42, 0x79, 0x9a, 0x18, 0x6b, 0xba, 0xe7, 0x45, 0xeb, 0x69, 0x88, 0x92, 0xb3, 0x48, 0x8d, 0xe2, 0xe9, 0x71, 0xf4, 0x45, 0x2f, 0x8c, 0x15, 0xcb, 0x28, 0x45, 0x3e, 0x96, 0x38, 0xfe, 0x9a, 0x33, 0x8c, 0xc0, 0x57, 0x2b, 0x5b, 0x78, 0x07, 0xd4, 0x6b, 0x60, 0x47, 0x6d, 0xd6, 0xbb, 0x9f, 0x6a, 0x0e, 0xc5, 0xaa, 0x0d, 0x1f, 0xea, 0x77, 0x36, 0x34, 0x36, 0x2e, 0x7c, 0x5d, 0x0d, 0xf7, 0x7c, 0x8f, 0x1c, 0x17, 0x71, 0xed, 0x8f, 0x5c, 0x06, 0x45, 0x84, 0xbc, 0x68, 0xde, 0xc0, 0x39, 0x9e, 0x71, 0xa1, 0x08, 0x1d, 0x75, 0x54, 0xf1, 0x97, 0x9f, 0x48, 0xf9, 0x15, 0xaa, 0xe3, 0x3f, 0x45, 0x54, 0x73, 0x24, 0x15, 0xa9, 0x67, 0xae, 0x80, 0x83, 0xbf, 0x2f, 0xa8, 0x52, 0xc1, 0x21, 0x26, 0x19, 0xee, 0x55, 0x9e, 0xb9, 0x34, 0x4d, 0x96, 0x72, 0x65, 0xe6, 0x88, 0xa7, 0xe8, 0x39, 0x35, 0xe1, 0xaf, 0xc4, 0x3d, 0x17, 0x68, 0xc5, 0xed, 0x2d, 0xf8, 0xe7, 0x58, 0xba, 0x25, 0x20, 0xa9, 0x0e, 0x92, 0xda, 0xb7, 0x74, 0xf1, 0x51, 0xda, 0xb4, 0x74, 0x3c, 0xfe, 0xdc, 0x84, 0xaf, 0xf5, 0x40, 0xb6, 0x40, 0x12, 0xc0, 0xfb, 0x69, 0xf3, 0x49, 0x17, 0x2d, 0x9e, 0x9f, 0x54, 0xfe, 0xd0, 0x59, 0x77, 0xdf, 0x91, 0x2d, 0xf3, 0xc6, 0x0c, 0x6d, 0x5d, 0x44, 0x9e, 0xd2, 0x20, 0x67, 0x2d, 0x79, 0x72, 0xe0, 0xbb, 0x2b, 0x86, 0x61, 0x3a, 0xe1, 0x03, 0x49, 0xa2, 0x87, 0xb6, 0x83, 0x42, 0x01, 0x83, 0xab, 0x53, 0x6c, 0xa2, 0x73, 0xd3, 0xa6, 0x08, 0x46, 0x91, 0x10, 0x22, 0x2b, 0x84, 0x92, 0xc9, 0xeb, 0x60, 0xe0, 0x73, 0x76, 0x6b, 0xfc, 0xa6, 0x83, 0x8d, 0xfd, 0xb3, 0x77, 0xa7, 0x0e, 0xa0, 0x88, 0x26, 0xb9, 0x66, 0x22, 0xd8, 0x66, 0x5d, 0x89, 0xfe, 0x1e, 0xf4, 0xc1, 0xa2, 0x95, 0xa5, 0xab, 0x2b, 0x68, 0x28, 0x70, 0x2e, 0xa3, 0xe7, 0x22, 0x87, 0x86, 0xb3, 0xa1, 0xa9, 0x89, 0xb5, 0xbc, 0x32, 0x9d, 0xa7, 0x99, 0xc3, 0xb5, 0x44, 0x57, 0x0e, 0x85, 0xfc, 0xf1, 0x30, 0x89, 0xed, 0x66, 0x42, 0x4a, 0x0f, 0x17, 0x2a, 0xdd, 0xae, 0x70, 0xb7, 0xac, 0x1e, 0xca, 0xee, 0x79, 0xaa, 0x90, 0x9e, 0x9f, 0xcd, 0xa1, 0x3b, 0x9b, 0xa5, 0xf6, 0xe8, 0xcc, 0xa4, 0x85, 0xd6, 0x77, 0x89, 0x65, 0xcd, 0x0e, 0x8e, 0x32, 0x08, 0xb2, 0xe3, 0xb3, 0x46, 0xf6, 0x5c, 0xba, 0x1e, 0xe6, 0x67, 0x4c, 0x93, 0x48, 0x40, 0x02, 0xe8, 0x21, 0x68, 0xaf, 0xb6, 0x7b, 0x53, 0x43, 0x3b, 0x66, 0x60, 0xf0, 0xf5, 0x3d, 0x0f, 0x8b, 0x6f, 0x2a, 0x6f, 0x34, 0x5c, 0xec, 0xd5, 0x39, 0xe2, 0xd8, 0xd3, 0x38, 0x38, 0x1e, 0x68, 0x84, 0x73, 0x4e, 0x75, 0xca, 0x9d, 0x1b, 0x70, 0xf5, 0x08, 0x5e, 0x5c, 0x4e, 0xe1, 0x5e, 0xf9, 0xe8, 0x08, 0x4e, 0x38, 0x3b, 0x1f, 0x17, 0xf1, 0x0f, 0xe2, 0x58, 0xd8, 0x9c, 0xb6, 0xab, 0xae, 0xef, 0x84, 0x2b, 0xb4, 0x8f, 0xc7, 0x33, 0x65, 0x61, 0xe4, 0x68, 0x64, 0xc9, 0xbb, 0xf9, 0xb4, 0x12, 0x7b, 0x25, 0x27, 0x10, 0xba, 0xfe, 0x19, 0x03, 0xc5, 0x6d, 0x5d, 0xbf, 0x34, 0x77, 0x78, 0x0a, 0xc2, 0xbe, 0x0d, 0x46, 0x5c, 0x4b, 0x99, 0x50, 0x78, 0x8a, 0x61, 0xa7, 0xa8, 0x96, 0xa8, 0xd1, 0x6f, 0xb7, 0x24, 0xfa, 0x53, 0x2a, 0xb3, 0xdf, 0x33, 0x20, 0x4b, 0xea, 0xdb, 0x08, 0x2f, 0x9e, 0xd6, 0x11, 0x69, 0x36, 0x83, 0xeb, 0x74, 0x89, 0x6c, 0xce, 0x39, 0x31, 0xd2, 0xbe, 0x3d, 0xec, 0x8d, 0x0d, 0x18, 0x42, 0x13, 0x21, 0x29, 0x69, 0xd6, 0x78, 0x88, 0x65, 0xd3, 0xe8, 0x3c, 0x73, 0x67, 0x2c, 0xae, 0xa8, 0x65, 0x9c, 0x5e, 0xd6, 0x67, 0x3c, 0xd5, 0xaf, 0x61, 0xf8, 0xdb, 0x2d, 0x7c, 0x2e, 0xe9, 0x31, 0x21, 0x6d, 0xe1, 0x6a, 0x53, 0x7d, 0xfd, 0x78, 0x43, 0x9f, 0x05, 0x51, 0x1e, 0x15, 0xc6, 0xe4, 0x2a, 0xe5, 0xbf, 0xfd, 0x11, 0xdb, 0x1d, 0x69, 0x7d, 0xcd, 0xea, 0x5a, 0xe4, 0x22, 0x81, 0x0d, 0xa6, 0x95, 0x45, 0xa9, 0x55, 0x37, 0x92, 0x6b, 0x53, 0xb3, 0xf4, 0x00, 0xa3, 0xd6, 0x97, 0x32, 0xf9, 0x4f, 0xff, 0xc7, 0x13, 0xb3, 0xf9, 0xa6, 0x4c, 0xc4, 0xd2, 0x3c, 0x6f, 0xf2, 0xc6, 0x1e, 0xc9, 0x22, 0xbb, 0xf0, 0x82, 0xaf, 0x30, 0x85, 0x2d, 0xae, 0x70, 0x47, 0x9d, 0x77, 0x0b, 0xda, 0xfa, 0x61, 0x86, 0xfc, 0x15, 0xcc, 0x52, 0xb0, 0xf9 ],
- const [ 0xd2, 0x96, 0x7d, 0xdf, 0x69, 0xef, 0x62, 0xa9, 0xe2, 0x3c, 0x91, 0x18, 0xdf, 0xaa, 0x55, 0xdf, 0x92, 0xb4, 0x11, 0x63, 0x22, 0xf1, 0xc9, 0x27, 0x51, 0x31, 0xe3, 0x87, 0x5d, 0xc9, 0x2f, 0xaa, 0x23, 0x2b, 0x26, 0xb2, 0x8a, 0xba, 0x6f, 0x35, 0x1f, 0xdc, 0xa8, 0xf1, 0xfd, 0x50, 0x62, 0xbb, 0xf0, 0xc2, 0x6d, 0xb9, 0xda, 0x9c, 0x57, 0xd1, 0x55, 0x20, 0x2f, 0x61, 0x99, 0xb4, 0x8e, 0x31, 0xa1, 0x7c, 0xd9, 0xa6, 0x89, 0x2e, 0xc0, 0x38, 0x3b, 0x22, 0x0a, 0x25, 0x4a, 0xa9, 0x95, 0x67, 0x1e, 0xa0, 0x98, 0xe4, 0x52, 0x45, 0x2c, 0xe6, 0x5a, 0x49, 0x0b, 0xca, 0x69, 0x26, 0x97, 0xfc, 0x91, 0xb2, 0x1e, 0x23, 0x2d, 0xf4, 0x5c, 0x98, 0x7c, 0x37, 0x41, 0x1d, 0x8e, 0x5e, 0xf5, 0xcc, 0x64, 0x77, 0x1a, 0x4d, 0x53, 0x93, 0x51, 0x4c, 0xa9, 0xd4, 0xff, 0x2a, 0x93, 0xc7, 0x51, 0xf3, 0x3e, 0xf4, 0x7d, 0x91, 0x3d, 0xb4, 0x4b, 0x3f, 0x2b, 0x43, 0xd5, 0x40, 0x91, 0x16, 0x8a, 0xd0, 0x09, 0x6f, 0x79, 0x5b, 0xa4, 0x2e, 0xcd, 0xed, 0x8a, 0xea, 0x93, 0xea, 0xe0, 0x40, 0xc4, 0xff, 0xef, 0x6b, 0x7f, 0x58, 0x82, 0x15, 0x96, 0x13, 0x8f, 0x6d, 0x4c, 0xf5, 0x1a, 0x7a, 0x5d, 0x5c, 0x57, 0xaf, 0x3f, 0x75, 0x0f, 0xbf, 0xa8, 0xaf, 0x44, 0xb3, 0x50, 0x70, 0x18, 0x39, 0xf8, 0x06, 0xeb, 0x3f, 0xab, 0xe0, 0xc4, 0xc0, 0x44, 0xfe, 0xf2, 0xde, 0x30, 0xa6, 0xf3, 0x32, 0x75, 0x59, 0x94, 0x60, 0xf3, 0x05, 0x5a, 0xee, 0xea, 0x7c, 0x21, 0x56, 0xbd, 0x25, 0x03, 0x59, 0xf6, 0xf1, 0x7b, 0x97, 0x89, 0x91, 0xca, 0x5d, 0x5d, 0xe7, 0x9a, 0xbe, 0x08, 0xba, 0xe2, 0xe5, 0xdb, 0xad, 0x09, 0xa9, 0x1e, 0x72, 0x4e, 0x62, 0x9c, 0x3b, 0x67, 0xfb, 0x63, 0x71, 0x68, 0x49, 0xc5, 0xa9, 0xe7, 0x9b, 0xa2, 0xd4, 0x5e, 0x93, 0xea, 0xb5, 0xd0, 0x34, 0x5d, 0x99, 0xb0, 0x3b, 0x95, 0x42, 0xfe, 0xb3, 0x47, 0x24, 0xb3, 0xc4, 0xc6, 0xd4, 0x5f, 0xcc, 0xc8, 0xbd, 0x11, 0xb1, 0x6d, 0x15, 0x77, 0x75, 0x7d, 0x0f, 0x46, 0x0a, 0xf1, 0x52, 0xdc, 0x68, 0xb6, 0xab, 0x25, 0xde, 0xad, 0xfe, 0xbb, 0xa5, 0xf6, 0x83, 0x51, 0xbb, 0x6e, 0x2e, 0x51, 0xee, 0x76, 0x6f, 0xc4, 0x37, 0xf7, 0x1c, 0x73, 0x4a, 0xa3, 0xac, 0x4b, 0x6b, 0x7d, 0xa5, 0x06, 0x83, 0x9b, 0x57, 0x08, 0x73, 0x2a, 0xcb, 0x87, 0xa8, 0xb4, 0xf7, 0xef, 0xf0, 0x9e, 0x33, 0x85, 0x8c, 0xf5, 0xf1, 0x4a, 0x86, 0x6a, 0xa8, 0x22, 0x45, 0x9a, 0x11, 0x35, 0x5e, 0x93, 0x96, 0x96, 0xad, 0x94, 0x08, 0x23, 0xa5, 0x15, 0x90, 0xac, 0xe4, 0x07, 0xe8, 0x57, 0x0a, 0x5d, 0xca, 0x42, 0xcc, 0xcb, 0xa9, 0x6b, 0x44, 0xce, 0xa0, 0xcd, 0x8b, 0xec, 0xa8, 0xcc, 0x8a, 0x3d, 0x0d, 0xd3, 0x0d, 0x2a, 0x23, 0x3c, 0x19, 0x75, 0x35, 0x70, 0x80, 0x7a, 0xbe, 0x4f, 0xb2, 0xb4, 0xdb, 0xd2, 0xd6, 0x82, 0x01, 0xee, 0x1a, 0x2b, 0xeb, 0xbc, 0x47, 0x20, 0xd7, 0xd8, 0x98, 0x82, 0xf2, 0x07, 0xcc, 0xe4, 0x11, 0x1c, 0x7a, 0x52, 0xa1, 0x1c, 0xa5, 0x92, 0xe1, 0xa0, 0x90, 0xa9, 0x4f, 0x7b, 0xd3, 0xa2, 0x5f, 0x9d, 0xaf, 0x8a, 0x73, 0x37, 0x9f, 0xbf, 0x08, 0x20, 0x2f, 0x6b, 0x2d, 0x78, 0x11, 0x4b, 0x3a, 0x8b, 0x6e, 0xb5, 0xbe, 0xf7, 0x7a, 0xd9, 0xb9, 0x12, 0x4b, 0x47, 0x0c, 0x86, 0xeb, 0xb1, 0x2d, 0x3e, 0xac, 0xf2, 0x1f, 0x86, 0xbb, 0x50, 0xa2, 0x6d, 0xf8, 0xfe, 0xa7, 0x6e, 0x05, 0xe5, 0x06, 0x50, 0x9d, 0xa5, 0x73, 0x4b, 0x28, 0xd6, 0xaf, 0x6c, 0x8c, 0x93, 0xfb, 0x3b, 0x45, 0x39, 0xd2, 0x9a, 0xb8, 0x6c, 0xd7, 0xf0, 0xc4, 0x5b, 0x0d, 0x87, 0x9b, 0x45, 0x46, 0x33, 0xd0, 0x3d, 0xde, 0x35, 0xb1, 0x2a, 0xa8, 0x5e, 0xd6, 0x11, 0x29, 0x78, 0xfa, 0x97, 0x04, 0xe1, 0x0a, 0xc1, 0xb6, 0x79, 0x7c, 0xff, 0x83, 0xbe, 0xe2, 0x69, 0xb0, 0x36, 0xbf, 0x48, 0xf3, 0x0e, 0x99, 0xd8, 0x28, 0x00, 0x4f, 0x4c, 0x45, 0x7a, 0xad, 0x13, 0x90, 0xfc, 0x3e, 0x5a, 0x10, 0xc1, 0x61, 0xd2, 0x41, 0xa3, 0x9f, 0xb3, 0x0c, 0x39, 0x3c, 0x01, 0xf5, 0x42, 0x0c, 0x0e, 0x97, 0x46, 0x88, 0x40, 0x4d, 0x7a, 0x21, 0x14, 0x33, 0xe5, 0xd5, 0x63, 0x4d, 0xc1, 0xff, 0xe4, 0x05, 0x24, 0x73, 0xf3, 0xdb, 0xdf, 0xca, 0x90, 0x58, 0xa6, 0xfb, 0xab, 0x43, 0x72, 0x2c, 0x9f, 0x18, 0x24, 0xc7, 0xfc, 0xb6, 0x6b, 0xcf, 0x89, 0x58, 0xe7, 0x75, 0x89, 0xc6, 0x8f, 0xe6, 0x3e, 0xcd, 0x50, 0x68, 0xac, 0xec, 0xf6, 0xa5, 0x9f, 0x50, 0x50, 0x46, 0xef, 0x03, 0x8f, 0xc4, 0x03, 0x60, 0xf0, 0x7b, 0x94, 0xca, 0x9b, 0x01, 0xb3, 0x9d, 0xca, 0xb5, 0x0e, 0x65, 0x2d, 0x9b, 0x6f, 0x4e, 0x8e, 0x67, 0x85, 0xdc, 0xb1, 0xd7, 0xe7, 0xdc, 0x7e, 0x46, 0x56, 0x9b, 0x61, 0x7f, 0x42, 0x55, 0xf2, 0xcf, 0x90, 0xf0, 0xd1, 0x5e, 0x9b, 0xea, 0xd4, 0xbe, 0x79, 0x91, 0x65, 0xc5, 0x7f, 0x72, 0x25, 0x98, 0x07, 0x13, 0xd6, 0x09, 0x70, 0xe5, 0x77, 0x23, 0x67, 0x74, 0xb0, 0x02, 0x65, 0xe1, 0x71, 0xe9, 0x79, 0x92, 0xd7, 0x8e, 0x48, 0x28, 0x4f, 0xb8, 0x52, 0xb1, 0xfd, 0x0c, 0x77, 0x1f, 0x5f, 0x24, 0xb9, 0xfa, 0x2d, 0xe2, 0x43, 0x51, 0x84, 0x04, 0xab, 0xf6, 0x44, 0xf8, 0x74, 0xeb, 0xb7, 0xf1, 0xd7, 0x17, 0x73, 0x3a, 0xc2, 0x3d, 0x81, 0xcb, 0x22, 0x2f, 0xbe, 0x1a, 0x5e, 0x3f, 0x82, 0x33, 0x23, 0xf7, 0x80, 0x0b, 0x67, 0x0a, 0xed, 0x11, 0xa8, 0x89, 0xe5, 0x07, 0x75, 0x5a, 0x0a, 0x10, 0x30, 0xe7, 0x6e, 0x0a, 0x12, 0x13, 0xb3, 0x1d, 0x6f, 0x72, 0x70, 0x94, 0x3c, 0xb9, 0xd7, 0xec, 0xce, 0x73, 0x95, 0x2b, 0xe4, 0xf6, 0xfa, 0x74, 0xe8, 0x96, 0x5a, 0xd7, 0x72, 0x18, 0xb3, 0x6d, 0x0e, 0x6a, 0x8f, 0xa5, 0x3f, 0x91, 0x2c, 0xd9, 0xc4, 0xe2, 0xdb, 0x25, 0x19, 0x75, 0xa6, 0x78, 0x41, 0xd7, 0x35, 0xeb, 0xc3, 0xff, 0xf3, 0x52, 0xf3, 0x83, 0x6c, 0x11, 0x72, 0x0c, 0xf9, 0x32, 0xf8, 0x08, 0xa0, 0xb4, 0x51, 0x9e, 0x36, 0x25, 0xa6, 0xe7, 0xc6, 0x73, 0xfe, 0x5b, 0x37, 0xff, 0x04, 0x89, 0x28, 0xf3, 0x0b, 0x0c, 0x1f, 0xd6, 0x4f, 0xba, 0xe3, 0x5d, 0x7e, 0x1e, 0x26, 0x84, 0x77, 0x29, 0x67, 0xde, 0x51, 0x24, 0x17, 0x29, 0x9f, 0xe9, 0xfb, 0x26, 0xf2, 0x53, 0xd1, 0xa8, 0xa0, 0xf3, 0x36, 0xea, 0xc4, 0x04, 0xc7, 0x25, 0x86, 0xa1, 0x87, 0x62, 0x9d, 0x36, 0x81, 0x8d, 0x12, 0x35, 0xae, 0xcc, 0x46, 0x0a, 0x18, 0x0f, 0x36, 0x50, 0x40, 0xe7, 0xfe, 0x45, 0xbd, 0x9b, 0x9c, 0x7b, 0x27, 0x79, 0xf7, 0xd1, 0x33, 0x6a, 0x20, 0xa2, 0x1f, 0xc9, 0xd7, 0x3c, 0x51, 0x75, 0x51, 0x94, 0x3b, 0x25, 0x38, 0x38, 0x81, 0xfc, 0xf4, 0x84, 0x5e, 0x5e, 0x29, 0x19, 0x44, 0x01, 0x80, 0x8b, 0xc2, 0x47, 0xab, 0x5a, 0xab, 0xcb, 0xa3, 0x24, 0x75, 0x39, 0x34, 0x18, 0xdf, 0x64, 0xbc, 0xae, 0xd6, 0x92, 0x30, 0x95, 0x9a, 0x1a, 0x5f, 0xed, 0x1d, 0x32, 0x7b, 0xb7, 0xac, 0x02, 0xd5, 0x8a, 0xd0, 0xfd, 0xe8, 0x87, 0x77, 0x70, 0x99, 0x8f, 0x4f, 0x5b, 0xbd, 0xb3, 0x73, 0x81, 0xdc, 0xeb, 0x49, 0xbb, 0x34, 0x0b, 0xaa, 0x91, 0x01, 0xf4, 0x44, 0x0b, 0xfc, 0x07, 0x3d, 0xc5, 0x22, 0xe0, 0x19, 0x42, 0xb6, 0x40, 0xde, 0x82, 0x89, 0x4a, 0x76, 0xd7, 0x79, 0xf3, 0x54, 0xf4, 0x38, 0xb4, 0x5b, 0x47, 0x4f, 0x81, 0xfb, 0x89, 0x62, 0xff, 0x9d, 0x93, 0xb5, 0xf2, 0x41, 0x73, 0xef, 0xf4, 0x65, 0xbf, 0x1e, 0x6d, 0x29, 0x29, 0xfc, 0xbf, 0xb2, 0x54, 0x71, 0xc1, 0xcc, 0xe6, 0x58, 0x6f, 0xd3, 0xdf, 0x86, 0xe0, 0xd3, 0x29, 0x08, 0x78, 0xee, 0x6f, 0xad, 0x5e, 0xfe, 0x33, 0xc5, 0x30, 0x7c, 0x1b, 0x27, 0xf6, 0xa1, 0x8c, 0x79, 0x55, 0xca, 0x7a, 0xab, 0x06, 0x21, 0x7f, 0xc5, 0x86, 0x7a, 0x2a, 0xe3, 0x0e, 0x7b, 0x99, 0x7d, 0xc5, 0x00, 0x4a, 0xec, 0x35, 0xbd, 0x2e, 0x2a, 0xfb, 0x26, 0xff, 0xda, 0xc3, 0x8b, 0xd4, 0x88, 0x74, 0x88, 0xf3, 0x31, 0xa8, 0x9c, 0xe6, 0x06, 0x5f, 0x18, 0xd1, 0x6d, 0xf4, 0x3b, 0x02, 0x49, 0x50, 0x9b, 0xca, 0x7b, 0x5d, 0xc6, 0x8b, 0xa9, 0xbd, 0x2a, 0x13, 0x3d, 0xbd, 0x32, 0x28, 0xb1, 0x84, 0xb2, 0x64, 0x0b, 0x91, 0x85, 0x44, 0xa3, 0x64, 0x75, 0x7b, 0x2c, 0x7a, 0x5a, 0x8c, 0xf2, 0x7f, 0x86, 0x97, 0x61, 0xc0, 0x61, 0x73, 0xc7, 0xdf, 0x51, 0xfe, 0x5b, 0xca, 0xdd, 0xb1, 0x7d, 0xed, 0x11, 0x78, 0x3f, 0xa7, 0x24, 0xc0, 0x25, 0xfb, 0x58, 0xd1, 0x29, 0x89, 0x22, 0x5e, 0x02, 0xbc, 0x8b, 0x5a, 0xa6, 0x44, 0xd6, 0x0e, 0x0e, 0xc7, 0x63, 0x69, 0x39, 0xd3, 0xd3, 0x97, 0x73, 0x18, 0x6d, 0xd5, 0xd7, 0xd4, 0xc0, 0x83, 0x13, 0x8e, 0x8a, 0x7a, 0x6b, 0x07, 0xd9, 0xa1, 0x01, 0x6e, 0x70, 0xbb, 0x53, 0xd3, 0x6c, 0x83, 0x05, 0xde, 0x28, 0xfb, 0xe1, 0xc1, 0x5d, 0x01, 0x1c, 0x6b, 0x8e, 0x23, 0xda, 0xfe, 0xa3, 0xb4, 0xf5, 0x84, 0xd4, 0x1f, 0xfa, 0xde, 0xc8, 0x7c, 0x75, 0xfc, 0xfe, 0x61, 0x6f, 0x54, 0x6d, 0xfb, 0x34, 0x8c, 0x67, 0x5d, 0x5a, 0x7a, 0xc3, 0x17, 0xfe, 0x4f, 0x3b, 0x0b, 0x51, 0x0f, 0x13, 0x7c, 0x54, 0x45, 0xfc, 0x68, 0xdf, 0xf4, 0x37, 0x18, 0xe8, 0xd0, 0xfd, 0xf5, 0x02, 0xae, 0x1f, 0x9d, 0x24, 0x3a, 0xea, 0x36, 0xac, 0xe8, 0x4d, 0x03, 0xa3, 0x2d, 0x3e, 0x34, 0x43, 0xee, 0x59, 0x03, 0xb6, 0x39, 0xca, 0xfc, 0x21, 0x33, 0x6e, 0x9c, 0xe1, 0x51, 0x35, 0x1e, 0x15, 0xcb, 0xcb, 0x92, 0x5c, 0x4e, 0x77, 0x2f, 0xe0, 0xf2, 0x43, 0xea, 0x93, 0x6b, 0x5d, 0x48, 0xb8, 0x83, 0xbd, 0x70, 0xa6, 0xc8, 0x08, 0x84, 0xc8, 0x81, 0xb4, 0x31, 0xe9, 0xe7, 0x6e, 0x85, 0xae, 0x92, 0xb8, 0x01, 0x64, 0x32, 0xd7, 0xf0, 0xfc, 0x7f, 0xec, 0xf7, 0x54, 0x73, 0x61, 0xec, 0xb9, 0xb6, 0x86, 0xeb, 0xa9, 0x5a, 0x7c, 0xa7, 0xdd, 0xc8, 0x53, 0xff, 0x87, 0xfa, 0x6f, 0xd2, 0xd8, 0xeb, 0x30, 0x13, 0xc5, 0x4c, 0xd2, 0x20, 0x0b, 0x79, 0x91, 0x4f, 0x70, 0xab, 0x11, 0xca, 0x4c, 0x6f, 0xfe, 0x9e, 0x49, 0x57, 0xef, 0x0e, 0x67, 0xef, 0x91, 0x2d, 0x43, 0xf2, 0x01, 0xac, 0x98, 0xbe, 0x79, 0xf0, 0x06, 0x06, 0x2f, 0x67, 0x12, 0xc7, 0x7a, 0x1d, 0x6f, 0x7d, 0x37, 0x8a, 0x7c, 0x96, 0x6b, 0xaf, 0x0d, 0x27, 0x2a, 0x61, 0x6e, 0xde, 0xb7, 0xe4, 0xa5, 0x38, 0xec, 0xbb, 0xf8, 0xf3, 0xdc, 0xbf, 0xaf, 0xc7, 0xb8, 0x6f, 0x1b, 0x51, 0xef, 0x87, 0xd7, 0x50, 0x99, 0xd4, 0x4e, 0x13, 0x16, 0x46, 0x7d, 0x32, 0xf2, 0x47, 0xfb, 0x7d, 0x0c, 0x4b, 0x36, 0x32, 0xf8, 0xa8, 0xff, 0x73, 0xa1, 0xa9, 0x49, 0xf6, 0x33, 0xdd, 0x2d, 0xff, 0x38, 0xb5, 0x32, 0x8b, 0x01, 0x4e, 0xcc, 0xce, 0x47, 0x8c, 0x22, 0xe0, 0x12, 0x68, 0x14, 0xb4, 0xda, 0x8b, 0x7d, 0x49, 0xec, 0x1b, 0xb5, 0x24, 0x10, 0xd5, 0x5b, 0xfd, 0x69, 0x5c, 0x51, 0xb9, 0x9c, 0xd0, 0x07, 0x98, 0x35, 0xa3, 0xfd, 0xb0, 0x46, 0xa8, 0x83, 0x9a, 0x50, 0x6d, 0xc4, 0x6b, 0x67, 0xcb, 0x02, 0xe5, 0x92, 0xbb, 0x23, 0xef, 0x71, 0x6b, 0x6d, 0x43, 0x22, 0x92, 0x8e, 0x67, 0x64, 0x00, 0xdf, 0xde, 0xfd, 0x79, 0xe9, 0x9f, 0x5a, 0xc3, 0x29, 0xc6, 0x76, 0xfe, 0x10, 0x8a, 0xfd, 0x34, 0x4e, 0x6f, 0xb0, 0x31, 0x50, 0xbc, 0x0b, 0x95, 0x07, 0x30, 0x25, 0x27, 0xec, 0xf1, 0xd9, 0x6c, 0x41, 0xc5, 0x23, 0x79, 0x99, 0x84, 0xcc, 0x05, 0x9a, 0xce, 0x4a, 0xc2, 0x02, 0xf9, 0xe2, 0xee, 0xe8, 0x4d, 0x0f, 0x24, 0x45, 0x74, 0x27, 0x79, 0xb2, 0x2c, 0x3c, 0xc4, 0x73, 0x3f, 0x40, 0x3d, 0xb5, 0xb5, 0x6d, 0x4a, 0x14, 0x48, 0xe4, 0x95, 0x60, 0x18, 0x95, 0x62, 0xa1, 0xa0, 0x5e, 0x20, 0x58, 0xe9, 0x77, 0x3d, 0x08, 0xfd, 0x0d, 0x3f, 0xf5, 0x9f, 0x2d, 0x11, 0x2c, 0x39, 0xe4, 0x9a, 0xc3, 0x16, 0xa5, 0x94, 0x62, 0xd1, 0xea, 0x9c, 0x03, 0x0e, 0x1e, 0x85, 0xf5, 0x67, 0xbb, 0xf2, 0x27, 0xaa, 0xb0, 0x24, 0xa3, 0x41, 0x05, 0x10, 0x59, 0xf1, 0xc1, 0xb5, 0x1e, 0xc8, 0x0c, 0xac, 0xf4, 0x50, 0x91, 0x01, 0x8c, 0x09, 0x26, 0x41, 0x09, 0x16, 0xaf, 0xd4, 0x07, 0x37, 0x3f, 0x8d, 0xdc, 0xf7, 0x81, 0x80, 0x1d, 0x27, 0x57, 0x14, 0x65, 0x8a, 0xc0, 0x59, 0x51, 0xd2, 0xff, 0x9b, 0xcf, 0xcb, 0xfa, 0x37, 0x99, 0xd7, 0xe0, 0xad, 0xfc, 0x9a, 0x0e, 0xf7, 0xde, 0xf6, 0x34, 0x19, 0xff, 0x3a, 0xb3, 0xfa, 0x7f, 0x96, 0x4a, 0x72, 0xa1, 0xd3, 0xf2, 0xa4, 0xce, 0x40, 0x06, 0x8e, 0xdd, 0xf0, 0xa7, 0xde, 0x91, 0x22, 0x5f, 0x07, 0x63, 0x01, 0x04, 0x95, 0x82, 0x8e, 0xe0, 0xbd, 0x19, 0xda, 0x0e, 0x39, 0xd0, 0x78, 0x27, 0x53, 0x95, 0x32, 0x1f, 0x3f, 0x9c, 0xfb, 0x69, 0xad, 0xa4, 0x25, 0x62, 0x9f, 0x7d, 0xd4, 0xec, 0x78, 0xc7, 0xb3, 0x59, 0x56, 0xfc, 0xe5, 0x8c, 0xa2, 0xb1, 0x3f, 0x5a, 0xe6, 0x18, 0xb4, 0x36, 0xde, 0xca, 0x10, 0x0e, 0xd1, 0xc3, 0xea, 0x70, 0x21, 0xae, 0xd3, 0xf1, 0x22, 0x64, 0xd4, 0xcf, 0x28, 0xaf, 0x18, 0xd5, 0xe4, 0x53, 0xe5, 0x7f, 0xf0, 0x4f, 0xd1, 0x5f, 0xa8, 0x60, 0x32, 0xbf, 0x3c, 0xc7, 0xd6, 0x88, 0x03, 0x4c, 0xf4, 0x63, 0x12, 0x83, 0x63, 0x1d, 0x0e, 0x4e, 0x0a, 0x50, 0x3e, 0xa3, 0x98, 0x40, 0xe4, 0x8f, 0x75, 0x03, 0xce, 0x7b, 0xf8, 0xe5, 0x28, 0xaf, 0xda, 0x0a, 0x94, 0x14, 0xea, 0x55, 0x7d, 0x3e, 0x03, 0x89, 0xa7, 0xa9, 0x3b, 0xae, 0x0b, 0x43, 0x5e, 0xb7, 0xe3, 0x2b, 0x9b, 0x61, 0x01, 0xb9, 0x7c, 0x5e, 0x64, 0xbe, 0x1c, 0xb3, 0x0d, 0x0d, 0x94, 0x5f, 0x0f, 0x3a, 0xb6, 0x3d, 0xe6, 0xa1, 0xfe, 0x2b, 0x09, 0xaa, 0xc5, 0x6c, 0xc3, 0x4c, 0xb8, 0x4b, 0x3e, 0xd0, 0x89, 0x01, 0xe1, 0xd8, 0xe4, 0xd9, 0xdb, 0x9f, 0xa5, 0x92, 0x00, 0x82, 0x48, 0x05, 0xd5, 0xc0, 0xa0, 0x08, 0xe6, 0x7e, 0xcc, 0x91, 0x60, 0x0e, 0x68, 0x1f, 0xdb, 0x70, 0x00, 0x55, 0x78, 0x19, 0xca, 0xe8, 0x2c, 0xf4, 0x94, 0xbc, 0x5b, 0xa7, 0xfb, 0x4a, 0xa9, 0x17, 0xde, 0x45, 0x0d, 0x2e, 0x12, 0x7d, 0x27, 0xdc, 0x57, 0x03, 0xd3, 0x5b, 0x8b, 0x8e, 0xfe, 0xb8, 0x1e, 0x1d, 0xb8, 0x8f, 0xc6, 0xde, 0x8b, 0x16, 0x74, 0x4f, 0x0b, 0x5c, 0x86, 0xa3, 0xaf, 0xd3, 0x3e, 0x67, 0xdf, 0x0d, 0x73, 0x65, 0x4e, 0xc3, 0x86, 0xc9, 0x8a, 0x1b, 0x98, 0x82, 0xd2, 0x2a, 0xfa, 0xeb, 0x27, 0xb8, 0xe5, 0xab, 0xa5, 0x44, 0x6c, 0xda, 0x14, 0x48, 0xae, 0x65, 0xbb, 0xbf, 0x50, 0xb3, 0x74, 0xe3, 0x2b, 0x88, 0x06, 0x3b, 0x41, 0x2a, 0xae, 0xd5, 0xf6, 0xc3, 0xff, 0xd1, 0x7d, 0x07, 0xed, 0x1f, 0x90, 0x16, 0x24, 0x88, 0x64, 0xa4, 0x9e, 0xf3, 0xdc, 0x57, 0x74, 0xe1, 0xfd, 0x70, 0xf4, 0x3b, 0xa2, 0xae, 0xf5, 0x4d, 0x70, 0x6f, 0x67, 0x12, 0x0d, 0x19, 0x2e, 0xb2, 0x8d, 0xb8, 0x31, 0x49, 0x2d, 0xe9, 0xad, 0xea, 0x44, 0xf6, 0xd0, 0xe4, 0x76, 0x42, 0x83, 0x43, 0x2b, 0xe8, 0x87, 0x9a, 0x3f, 0x9f, 0xc3, 0x00, 0xfc, 0xe1, 0xdc, 0x59, 0x45, 0x4c, 0x07, 0xd7, 0x13, 0x48, 0x1b, 0xc0, 0x26, 0xea, 0xeb, 0x71, 0xf4, 0x18, 0xd2, 0xa3, 0xe6, 0xee, 0x8f, 0xed, 0xc3, 0x61, 0x53, 0x8a, 0x6c, 0x22, 0x19, 0x5d, 0xcb, 0xc5, 0x36, 0x32, 0x06, 0x23, 0x31, 0x47, 0xf8, 0xfd, 0xd4, 0x0b, 0xe1, 0xe2, 0x83, 0x25, 0x5c, 0x52, 0xcd, 0xb8, 0x92, 0x23, 0x41, 0xe5, 0xae, 0x24, 0x83, 0x92, 0x91, 0x01, 0x9f, 0x6a, 0xc6, 0x66, 0x9c, 0x25, 0xb8, 0x67, 0x55, 0x0a, 0x22, 0x20, 0x84, 0xb2, 0xc8, 0x98, 0x20, 0x0e, 0x65, 0xec, 0xe9, 0xac, 0xe4, 0xa9, 0x41, 0x35, 0xd2, 0x79, 0x3d, 0x3b, 0x14, 0x02, 0xfc, 0x31, 0xd5, 0x0b, 0x37, 0xbb, 0xc3, 0xe0, 0x1a, 0x29, 0x7b, 0xf8, 0x52, 0x3d, 0x41, 0xd6, 0x68, 0x35, 0xf5, 0x2d, 0x4d, 0x05, 0x42, 0x47, 0x36, 0xe5, 0x19, 0xa7, 0xa9, 0x0b, 0x5e, 0xee, 0xd8, 0xba, 0xe1, 0xfb, 0x2f, 0x7b, 0x8f, 0x56, 0x29, 0xab, 0xea, 0xcf, 0x67, 0x35, 0xb6, 0x62, 0x03, 0xa1, 0xf5, 0x5e, 0x22, 0x4e, 0x16, 0xc7, 0xc8, 0xfb, 0x6a, 0xf8, 0xf1, 0x8c, 0xd7, 0x8c, 0xdd, 0x0b, 0xd0, 0x7f, 0xab, 0xee, 0x84, 0x91, 0x29, 0x98, 0x56, 0xeb, 0xeb, 0x22, 0x8e, 0x05, 0x9a, 0x5a, 0x4e, 0xc7, 0x8f, 0x0c, 0xc7, 0xef, 0xa0, 0x81, 0xac, 0xb2, 0x3a, 0x46, 0xe7, 0xa6, 0xb1, 0x2e, 0x8c, 0xdf, 0xd3, 0x9a, 0x0b, 0x58, 0xc3, 0xf8, 0xa9, 0x95, 0x05, 0x8a, 0x31, 0x87, 0xd5, 0x69, 0xe6, 0xb0, 0xbd, 0xc9, 0xbd, 0x88, 0x66, 0x7e, 0xc9, 0x1e, 0xaf, 0xc0, 0xf7, 0x02, 0xfc, 0x2b, 0xfb, 0x63, 0xd0, 0x09, 0x8a, 0x75, 0x9f, 0xd4, 0xca, 0x15, 0xdd, 0xf7, 0x07, 0xb0, 0x5b, 0xd5, 0xa7, 0x61, 0xd3, 0x0c, 0x60, 0x59, 0xc2, 0xfb, 0xa8, 0x84, 0x75, 0x82, 0x6d, 0x6a, 0x67, 0x08, 0x07, 0x53, 0xca, 0xc3, 0x6b, 0xae, 0x64, 0x33, 0xa1, 0xb3, 0x9c, 0xf0, 0x78, 0x48, 0xd5, 0xa6, 0x78, 0x21, 0xfa, 0x5e, 0x18, 0x2c, 0x5a, 0xff, 0x31, 0x2c, 0xb7, 0x14, 0xb3, 0xa3, 0x99, 0xcf, 0x97, 0xf6, 0xe8, 0x4e, 0x14, 0xcc, 0xba, 0x1e, 0x16, 0xb7, 0x6a, 0xfe, 0xec, 0x16, 0xea, 0xe5, 0x40, 0x3a, 0x5a, 0x46, 0x4d, 0xc7, 0xd9, 0x92, 0x4c, 0x5d, 0x9b, 0xff, 0x2f, 0x78, 0x3b, 0x88, 0x92, 0x95, 0x53, 0x34, 0xef, 0x97, 0x4b, 0x9c, 0x11, 0x68, 0x6e, 0xa7, 0xcb, 0xe3, 0x43, 0x99, 0xe9, 0xf2, 0x1a, 0x4c, 0x67, 0xf3, 0xe5, 0xbc, 0xe1, 0x61, 0x49, 0xca, 0x4b, 0xb0, 0xf5, 0x39, 0xe2, 0x78, 0x33, 0xfd, 0x62, 0xd6, 0xbc, 0xb5, 0x7a, 0x10, 0xd1, 0x76, 0x7d, 0x77, 0x87, 0xca, 0x5a, 0x92, 0x63, 0xf8, 0xce, 0x78, 0x26, 0x86, 0xd8, 0x7e, 0xea, 0xfd, 0x6e, 0x12, 0x6e, 0xec, 0x6e, 0xe7, 0xaf, 0x2f, 0xd7, 0x53, 0xb8, 0x71, 0x39, 0xf5, 0xba, 0xf0, 0x6a, 0x9a, 0x5f, 0x80, 0x7b, 0x61, 0x5c, 0xd3, 0xea, 0x1e, 0x46, 0xf7, 0x19, 0xfd, 0xa6, 0x20, 0xff, 0x68, 0x4f, 0xa8, 0x1e, 0x2a, 0xef, 0x54, 0xb5, 0xd4, 0xe5, 0xd9, 0x36, 0x5f, 0x52, 0x9f, 0xfa, 0x14, 0x73, 0xc4, 0x34, 0xa9, 0x2e, 0x64, 0x24, 0xad, 0xea, 0x18, 0x8d, 0x26, 0xa4, 0xbc, 0x68, 0x78, 0x3f, 0x76, 0xda, 0x88, 0x1c, 0xf3, 0x64, 0x22, 0xeb, 0xf4, 0x5a, 0x98, 0xc1, 0x0a, 0x96, 0xac, 0x6a, 0x9d, 0x6d, 0xb0, 0x00, 0x33, 0xe2, 0xec, 0xbc, 0xef, 0x1a, 0x40, 0x0d, 0x58, 0x10, 0x0b, 0xe7, 0x5d, 0x8a, 0x4b, 0x5e, 0x95, 0x4c, 0x05, 0x73, 0xcb, 0x8b, 0xe7, 0x2e, 0xb9, 0xa4, 0x2c, 0xed, 0x14, 0x0e, 0xc0, 0xfb, 0xc9, 0x8d, 0xa4, 0x64, 0x87, 0xa9, 0x95, 0x08, 0x7d, 0x5f, 0xe8, 0xef, 0x65, 0x16, 0xb9, 0xdc, 0xc1, 0xd5, 0x44, 0x25, 0x64, 0xb2, 0x93, 0xc1, 0x35, 0x8e, 0x5a, 0xa3, 0x30, 0xff, 0x1f, 0x46, 0xad, 0x8e, 0x9d, 0x8a, 0xe5, 0x23, 0x6b, 0xbe, 0xb2, 0xbd, 0xd9, 0xfe, 0x96, 0x66, 0x1b, 0xbf, 0xff, 0x67, 0xa9, 0xa8, 0xc9, 0xb8, 0xe5, 0xa4, 0x05, 0xba, 0xfe, 0x35, 0xf9, 0x28, 0x15, 0x0b, 0x67, 0x4b, 0x9f, 0xd5, 0x13, 0x6e, 0x0b, 0x57, 0x7f, 0x92, 0xa4, 0xbc, 0xf9, 0x63, 0xb8, 0x2e, 0xd7, 0x6a, 0xfa, 0xa5, 0x02, 0x83, 0x25, 0xfc, 0xb1, 0x92, 0xe2, 0x4a, 0x77, 0x72, 0xec, 0x6f, 0x80, 0x2e, 0x72, 0xed, 0x18, 0x74, 0xbd, 0xfa, 0x6c, 0x46, 0x12, 0xd3, 0x95, 0xf3, 0xda, 0x52, 0xd2, 0x46, 0x00, 0xc3, 0x15, 0xfd, 0x9b, 0xf4, 0xc2, 0x7c, 0xcd, 0x8b, 0xb3, 0xc3, 0xea, 0x9c, 0x7f, 0x9e, 0xdd, 0x7b, 0xfc, 0x1b, 0xc8, 0xcf, 0x02, 0x41, 0xeb, 0xe8, 0x72, 0xff, 0xc7, 0x53, 0x77, 0x63, 0x83, 0xab, 0x0c, 0x0d, 0x8e, 0xb1, 0xbf, 0xe2, 0x86, 0x9f, 0xb4, 0x05, 0x59, 0xba, 0xec, 0x03, 0xaa, 0x27, 0xc7, 0x4d, 0x76, 0xff, 0xc8, 0xec, 0xf7, 0xa6, 0x99, 0x70, 0xc8, 0x58, 0x4f, 0x29, 0x4b, 0x04, 0xee, 0x9a, 0x48, 0x5e, 0x30, 0x2b, 0xd6, 0x30, 0x82, 0x1e, 0x7f, 0xf0, 0x50, 0xc4, 0x9f, 0x98, 0x82, 0xf1, 0x0d, 0xb2, 0x47, 0xad, 0xfd, 0xb2, 0x11, 0x2c, 0x25, 0x89, 0xe1, 0x01, 0x1f, 0x77, 0xc4, 0x8e, 0x0f, 0x21, 0x9d, 0xbf, 0x85, 0xe3, 0x26, 0xf8, 0xa5, 0x67, 0x32, 0x4b, 0x85, 0x77, 0x35, 0xef, 0xd6, 0x0f, 0x05, 0xed, 0xc7, 0xb7, 0xe2, 0x1d, 0x26, 0x0f, 0xb5, 0x51, 0xc8, 0xac, 0x95, 0xd0, 0x2c, 0x22, 0x8f, 0x06, 0x5b, 0x62, 0xa7, 0x79, 0x12, 0x47, 0x1a, 0xff, 0x23, 0x6b, 0xe6, 0x2f, 0x19, 0x3f, 0x8c, 0x15, 0x1b, 0x5b, 0x15, 0x2a, 0x13, 0x12, 0x53, 0x82, 0x0f, 0x4a, 0x69, 0x48, 0xe7, 0x8a, 0x8e, 0x68, 0x20, 0x55, 0x0d, 0x8b, 0x10, 0xb7, 0x90, 0x48, 0x43, 0x1d, 0x9f, 0x98, 0x1e, 0x6a, 0x64, 0x8b, 0xc2, 0x46, 0xb1, 0x3a, 0x33, 0xb9, 0x44, 0xfd, 0xba, 0xfa, 0x49, 0xde, 0x87, 0x81, 0x20, 0x4d, 0x9b, 0x63, 0x61, 0x15, 0xe5, 0xdf, 0x1d, 0x8e, 0xab, 0x34, 0x67, 0x14, 0x2c, 0xb6, 0x13, 0xb9, 0x84, 0x21, 0xbe, 0x37, 0xcf, 0x2d, 0x0f, 0x29, 0x91, 0x63, 0x3b, 0x7a, 0x56, 0x2e, 0xcf, 0x1d, 0x95, 0x35, 0xaa, 0xfe, 0xda, 0xe8, 0x48, 0x39, 0x24, 0x59, 0x47, 0x8b, 0x8c, 0x4e, 0x23, 0x05, 0x28, 0x94, 0x45, 0x08, 0x2f, 0x96, 0x3c, 0x6d, 0x5e, 0x2e, 0x4a, 0x04, 0x9a, 0xba, 0x22, 0x40, 0xd6, 0x73, 0xf0, 0x30, 0x37, 0xfa, 0x9a, 0xb1, 0x76, 0x34, 0x45, 0xe3, 0x87, 0x58, 0x1c, 0xd9, 0x78, 0x46, 0x4c, 0x95, 0x9b, 0x1b, 0x53, 0x33, 0xe7, 0x02, 0x7b, 0x64, 0x9c, 0x4d, 0xa1, 0x1e, 0x26, 0xc4, 0x3b, 0x92, 0x44, 0x3c, 0x9a, 0x5f, 0x69, 0x6c, 0x6c, 0x05, 0x63, 0xfd, 0x84, 0x9c, 0x3a, 0xe0, 0xde, 0xc6, 0x5b, 0xe4, 0xdd, 0xe2, 0xf5, 0x88, 0xd8, 0x82, 0xa4, 0x0d, 0xd5, 0x1f, 0x4d, 0xd0, 0x94, 0x0c, 0x49, 0xd7, 0xd0, 0xa9, 0xc5, 0xaa, 0xc1, 0xd9, 0x68, 0x64, 0xe5, 0xb6, 0x37, 0x09, 0x00, 0x83, 0xb6, 0x1a, 0x62, 0xe1, 0x50, 0x67, 0x68, 0x46, 0xf9, 0x25, 0x45, 0xac, 0x12, 0x40, 0x02, 0x86, 0x8d, 0xf3, 0xc4, 0xf8, 0x51, 0x95, 0x4e, 0x47, 0xe0, 0xb6, 0xc6, 0x8f, 0x37, 0x6a, 0xbc, 0xb4, 0xf6, 0xe5, 0x68, 0x9a, 0xc0, 0x48, 0x33, 0x99, 0xe5, 0xbb, 0x7a, 0x2b, 0x3e, 0xbc, 0x8e, 0xe8, 0x59, 0xb6, 0xff, 0xb5, 0xd6, 0xd6, 0x1a, 0x38, 0x11, 0x1a, 0xb0, 0x8f, 0x02, 0xab, 0x19, 0x41, 0x61, 0x6c, 0x79, 0x74, 0x0d, 0xd3, 0x42, 0x61, 0xae, 0xf8, 0xfa, 0x06, 0x99, 0xeb, 0x3f, 0x1a, 0xf5, 0x4b, 0x08, 0x46, 0x1c, 0x14, 0x2d, 0x92, 0x44, 0xb9, 0x2a, 0x1e, 0x5f, 0x73, 0x20, 0x12, 0x40, 0xd8, 0x1c, 0xd7, 0xfe, 0xaf, 0x9c, 0x88, 0x9d, 0x03, 0x4f, 0xa3, 0xeb, 0x76, 0x1d, 0x05, 0xa9, 0xd8, 0x67, 0x15, 0xeb, 0xf8, 0x90, 0x3f, 0xc2, 0xba, 0xbc, 0xa4, 0x17, 0x6a, 0xd7, 0x0f, 0xda, 0x50, 0xda, 0x2b, 0x5d, 0x85, 0x49, 0xf4, 0xfa, 0x05, 0x00, 0x6c, 0xfc, 0x04, 0x30, 0x8f, 0xbd, 0x86, 0xa5, 0x88, 0x0b, 0x2a, 0x4a, 0x25, 0xd0, 0x46, 0xee, 0x89, 0xf2, 0x39, 0x48, 0x21, 0x79, 0xfd, 0x39, 0xd9, 0xf0, 0xfc, 0x52, 0x8f, 0x0d, 0x25, 0x96, 0xc7, 0x94, 0x3e, 0x81, 0xa1, 0x78, 0x7c, 0x49, 0x09, 0x43, 0x51, 0x63, 0x2e, 0xb9, 0x85, 0x49, 0x35, 0xb8, 0x88, 0x7b, 0x2e, 0x63, 0x07, 0xc3, 0x47, 0x80, 0xbd, 0xbe, 0x3f, 0x1d, 0x8c, 0x98, 0x1e, 0x7a, 0xcc, 0x17, 0x24, 0x23, 0xe3, 0xdb, 0xff, 0x5d, 0x15, 0xe4, 0x41, 0xc3, 0x9e, 0x54, 0x10, 0x31, 0xfe, 0x76, 0x1f, 0xe1, 0x95, 0x00, 0xde, 0xd4, 0x6f, 0x95, 0xee, 0x74, 0x61, 0x8e, 0xd8, 0x77, 0x55, 0xfa, 0xfe, 0x06, 0xe2, 0xe3, 0xd2, 0x1f, 0x20, 0xd4, 0x45, 0x38, 0xba, 0x97, 0x83, 0x25, 0x44, 0x43, 0xdd, 0x3b, 0xcf, 0x77, 0x06, 0xb6, 0xbb, 0xe0, 0x83, 0x58, 0xcd, 0x01, 0x5d, 0x53, 0x81, 0x33, 0x19, 0x69, 0xa2, 0xea, 0xe9, 0x52, 0x17, 0x3b, 0x24, 0x5e, 0x00, 0x9b, 0xf4, 0x5b, 0x02, 0xea, 0x4f, 0xb9, 0xde, 0xb0, 0x28, 0xec, 0x49, 0xa6, 0xe6, 0x12, 0xf8, 0x78, 0x15, 0xd6, 0xfa, 0xc9, 0x5b, 0x94, 0x4a, 0x77, 0xae, 0xbe, 0xa5, 0x21, 0xc5, 0x7e, 0x99, 0xe7, 0xcc, 0x9c, 0xdf, 0x71, 0x5c, 0xa3, 0xea, 0x33, 0xaa, 0x3f, 0xc0, 0xef, 0xff, 0xea, 0x09, 0x7b, 0x68, 0xc7, 0x65, 0xc4, 0xae, 0xce, 0x03, 0x13, 0x88, 0x2a, 0x70, 0x8f, 0x10, 0xdf, 0xac, 0x04, 0x74, 0xb0, 0x83, 0xe2, 0xee, 0x40, 0x1a, 0x89, 0xf6, 0x77, 0xc9, 0xc3, 0xb6, 0x27, 0x28, 0x92, 0xbe, 0xf0, 0x6d, 0x2d, 0xf9, 0x61, 0xf5, 0x45, 0xdf, 0x5f, 0x20, 0x8c, 0xed, 0xcb, 0x62, 0x78, 0x52, 0x5f, 0x97, 0x44, 0xec, 0xd9, 0x97, 0x39, 0x72, 0x5c, 0x0b, 0x2b, 0xf3, 0x13, 0x7f, 0x46, 0x7f, 0x17, 0xb8, 0x0b, 0x24, 0x93, 0x47, 0x95, 0x1c, 0x26, 0x5e, 0x21, 0x44, 0x88, 0xe3, 0xcd, 0xd0, 0x71, 0xc3, 0xa0, 0x3d, 0xb6, 0x89, 0xcb, 0x88, 0xb5, 0x2f, 0x2e, 0x9e, 0xf4, 0x33, 0x1e, 0x13, 0x05, 0xee, 0x66, 0x16, 0xad, 0x22, 0x8b, 0xa5, 0x45, 0xd2, 0x55, 0xfd, 0x5f, 0x56, 0x8a, 0x55, 0xad, 0xae, 0xfd, 0xcb, 0x1f, 0x17, 0xc7, 0x9f, 0x4c, 0xdc, 0xd5, 0x9f, 0x13, 0x6f, 0xa3, 0xe2, 0x82, 0xb8, 0x46, 0xb9, 0xf6, 0xad, 0xb0, 0xe3, 0x84, 0x23, 0x30, 0x00, 0x98, 0xe3, 0x38, 0x48, 0xdc, 0x01, 0x63, 0x7d, 0x5c, 0x69, 0xb6, 0x1e, 0xe7, 0xbb, 0x27, 0xde, 0xb8, 0x59, 0x5b, 0x55, 0x56, 0xbe, 0xb4, 0xf4, 0xb8, 0x11, 0x8b, 0x3e, 0xad, 0xf9, 0xba, 0x35, 0x7b, 0xb4, 0x5e, 0x13, 0xc6, 0x63, 0xdb, 0x3b, 0xb4, 0xa8, 0x20, 0x6f, 0x4f, 0x73, 0x2c, 0x43, 0x2b, 0x19, 0xd0, 0xd2, 0x48, 0xa7, 0xb7, 0xaf, 0x39, 0x75, 0xa5, 0x1f, 0x86, 0xfe, 0xfc, 0x85, 0x50, 0xee, 0x84, 0x1d, 0x33, 0x7d, 0x6b, 0xed, 0x71, 0xfc, 0x8b, 0xf9, 0x4c, 0xad, 0xec, 0xb7, 0xb3, 0xd8, 0x8a, 0xc2, 0x21, 0x1b, 0x58, 0xd2, 0xc3, 0x02, 0x84, 0xec, 0xd9, 0xd8, 0xfd, 0xd6, 0x5e, 0xbc, 0x33, 0xce, 0xeb, 0xf7, 0x1e, 0x7b, 0xd9, 0x8c, 0x81, 0x24, 0xa6, 0x11, 0x70, 0x20, 0x99, 0xbe, 0x10, 0x8e, 0xa9, 0xc4, 0x9e, 0x46, 0x9c, 0xdf, 0xb2, 0x0f, 0x6c, 0x2f, 0xc5, 0x12, 0xee, 0x44, 0xf1, 0x8e, 0xb5, 0x78, 0xf9, 0xce, 0x35, 0x81, 0x89, 0x58, 0x24, 0x46, 0xbf, 0x68, 0x26, 0xf2, 0xe9, 0x9c, 0xa8, 0x47, 0x91, 0xf1, 0x0c, 0x36, 0xb7, 0xee, 0x07, 0xac, 0x5d, 0x1f, 0x48, 0xae, 0x49, 0xc5, 0x5b, 0xa8, 0x06, 0xcc, 0xcc, 0x02, 0x2c, 0xfd, 0x8f, 0xf5, 0xe1, 0x75, 0x9f, 0x9d, 0xa0, 0x56, 0xe6, 0x4f, 0x39, 0xbc, 0x5d, 0x2c, 0x19, 0xf3, 0x74, 0xf6, 0xcc, 0xe7, 0xb4, 0x23, 0xc0, 0xdb, 0xa3, 0x30, 0x4c, 0x5e, 0xe8, 0x38, 0xf0, 0x7b, 0xaf, 0xc5, 0xdf, 0x31, 0x4f, 0xe6, 0xba, 0x23, 0x2a, 0x82, 0x9f, 0x8f, 0xd5, 0xeb, 0x62, 0x84, 0x7a, 0xb6, 0x1a, 0x50, 0x7a, 0xcb, 0xe0, 0x38, 0x56, 0xb8, 0xd3, 0x6d, 0xcf, 0x4b, 0x60, 0x3b, 0x4c, 0x5f, 0xc0, 0x82, 0x7d, 0xf6, 0xc1, 0x6a, 0x3e, 0x88, 0xca, 0x53, 0xbe, 0x9b, 0x19, 0x0b, 0xe0, 0x94, 0x50, 0x44, 0xe1, 0xcd, 0x30, 0x45, 0x3c, 0xe7, 0xa4, 0xdf, 0xca, 0x62, 0x01, 0xa3, 0x2e, 0x6a, 0x8c, 0x52, 0x70, 0xf4, 0x3d, 0x95, 0xe8, 0x0a, 0xc2, 0xee, 0x5e, 0x63, 0xc7, 0xef, 0x6f, 0x37, 0x75, 0xaa, 0x32, 0x51, 0x38, 0x68, 0x1c, 0x66, 0xc6, 0x9e, 0x21, 0xa5, 0x5d, 0x1c, 0x1c, 0x8f, 0x4b, 0x88, 0x71, 0x09, 0xb4, 0x0b, 0xf1, 0xb0, 0x90, 0x4a, 0xfe, 0x6c, 0xf3, 0x98, 0xef, 0x48, 0x91, 0x69, 0xb6, 0x81, 0x81, 0x0a, 0xbf, 0xdc, 0x41, 0x90, 0x1c, 0x3d, 0xfb, 0x0f, 0xe0, 0x76, 0x06, 0x0c, 0xc8, 0x5d, 0xb0, 0x34, 0x21, 0x21, 0x3b, 0x4e, 0xe5, 0xde, 0x25, 0x6e, 0x28, 0x6e, 0xad, 0x6b, 0xb2, 0x83, 0x92, 0x94, 0xee, 0xf2, 0x1e, 0x9f, 0x03, 0x52, 0x63, 0xe2, 0x40, 0xc6, 0xc5, 0xc6, 0xbd, 0x17, 0xb8, 0x78, 0x3f, 0x06, 0xcb, 0xe1, 0x5d, 0xe0, 0xe6, 0xd9, 0xe1, 0x52, 0xcf, 0x97, 0x71, 0x7f, 0xf3, 0x6c, 0x6f, 0x50, 0x64, 0xb2, 0x1d, 0x0b, 0x1e, 0xff, 0x05, 0x28, 0x8e, 0x9e, 0x98, 0x60, 0x55, 0x3f, 0x15, 0x06, 0x49, 0xed, 0xac, 0x9a, 0xbc, 0x41, 0xe4, 0x9c, 0x02, 0xd5, 0x3a, 0x9e, 0x2d, 0xfc, 0x0a, 0x9d, 0x1b, 0xb0, 0xb3, 0x91, 0xb3, 0xcc, 0xf7, 0x43, 0x6b, 0x7c, 0xa0, 0x5f, 0x0d, 0xf1, 0x69, 0xca, 0xbc, 0x59, 0x1b, 0x35, 0x32, 0x0e, 0xf7, 0xf3, 0x4b, 0x0d, 0x54, 0x07, 0xc7, 0xab, 0x89, 0x82, 0x4b, 0x83, 0x0d, 0x0c, 0xaa, 0xb3, 0xdd, 0xc0, 0x63, 0x48, 0x1e, 0x3d, 0x6b, 0xf6, 0x04, 0xf9, 0x2c, 0x0d, 0xf2, 0xd9, 0xcd, 0xa8, 0xe3, 0xff, 0xb4, 0x27 ],
- const [ 0x0f, 0x54, 0x52, 0xe6, 0xb5, 0x15, 0x40, 0xcf, 0x21, 0x99, 0x98, 0x59, 0x09, 0x95, 0xcd, 0x7f, 0x87, 0x85, 0xfa, 0x40, 0xb4, 0xf2, 0x17, 0xfc, 0x79, 0xf0, 0x73, 0x22, 0xa2, 0xec, 0x5e, 0x08, 0x34, 0xa4, 0x26, 0x1a, 0x01, 0x77, 0x46, 0x37, 0x79, 0xdf, 0xd9, 0x58, 0xc3, 0x3c, 0x55, 0x73, 0x0d, 0xd3, 0x75, 0x9f, 0x20, 0x16, 0x77, 0x78, 0x37, 0x26, 0x88, 0xc5, 0x11, 0x96, 0x7d, 0x58, 0x45, 0x72, 0xc3, 0x36, 0xd6, 0x7f, 0x99, 0xf8, 0x07, 0xc5, 0x7c, 0x71, 0x70, 0x4b, 0xe3, 0x91, 0x52, 0x22, 0x2d, 0x89, 0x28, 0xa4, 0xd8, 0x30, 0x7e, 0xfe, 0xf3, 0xa6, 0x06, 0xec, 0xd6, 0x37, 0xe9, 0xc4, 0x10, 0x82, 0x5b, 0xb6, 0xa1, 0xda, 0x72, 0x52, 0x6a, 0xec, 0x38, 0x4a, 0xe1, 0xa2, 0xff, 0x7a, 0x09, 0x48, 0xf4, 0x25, 0xa2, 0xee, 0xf7, 0x82, 0x9c, 0x0d, 0xaa, 0x77, 0xd2, 0x6d, 0xc8, 0xa4, 0xf5, 0x45, 0xb9, 0xa3, 0xc6, 0xa5, 0x63, 0x8e, 0x89, 0x11, 0x42, 0xc2, 0xb6, 0x6e, 0xbb, 0xe3, 0xf1, 0x23, 0xad, 0x21, 0x3c, 0x78, 0x4a, 0xb9, 0x6c, 0x41, 0x25, 0xbe, 0xd9, 0xc1, 0x8b, 0x19, 0x5a, 0xc9, 0x17, 0xcf, 0x71, 0x20, 0x81, 0x82, 0xc2, 0x27, 0xb7, 0x3b, 0xca, 0xbd, 0x2f, 0x66, 0xcd, 0x61, 0x7b, 0x1e, 0x10, 0x96, 0x1e, 0xab, 0x49, 0x8c, 0x9e, 0x49, 0x54, 0xfc, 0xda, 0x2b, 0x27, 0x54, 0x9e, 0xc0, 0x08, 0x14, 0x75, 0x35, 0xfe, 0x78, 0xbe, 0x3b, 0x85, 0x57, 0x02, 0x0a, 0x85, 0x4b, 0x85, 0xa6, 0x85, 0x12, 0x1b, 0x61, 0x1c, 0x34, 0x3d, 0xa1, 0xa9, 0xe6, 0x5c, 0xe3, 0x44, 0x2f, 0x75, 0x00, 0xf5, 0x49, 0xe6, 0xaf, 0x23, 0x4a, 0x80, 0x4c, 0x4f, 0x04, 0xdd, 0xd8, 0x02, 0x29, 0xf4, 0x40, 0x03, 0xb3, 0xea, 0xe2, 0xce, 0x82, 0x2c, 0x4d, 0x42, 0x47, 0xba, 0x48, 0x9a, 0xa2, 0xc6, 0x17, 0x9e, 0x87, 0x7d, 0xf9, 0x1a, 0xe6, 0x25, 0xf5, 0x90, 0x8b, 0x68, 0xd6, 0x2a, 0x43, 0xef, 0x75, 0xf2, 0x40, 0x33, 0x36, 0x45, 0xbe, 0x90, 0xd5, 0x85, 0xe7, 0x9c, 0x63, 0x0f, 0xf4, 0xb6, 0x8b, 0x6d, 0x96, 0xe2, 0x1a, 0xcc, 0x94, 0xd4, 0xbf, 0xb0, 0xb5, 0x4a, 0x0e, 0xe6, 0xe0, 0x9f, 0xcb, 0xbb, 0x82, 0x9d, 0x66, 0x6b, 0x30, 0x94, 0xc2, 0xdc, 0x8e, 0xa8, 0x3a, 0x8c, 0x6f, 0x6f, 0xe6, 0xc8, 0x3d, 0xbc, 0x1a, 0x20, 0x9c, 0xb5, 0x30, 0x17, 0x4a, 0x2c, 0x88, 0x1f, 0x49, 0x2c, 0xcc, 0xc4, 0x41, 0xd1, 0x79, 0x27, 0x20, 0x5d, 0x9b, 0xae, 0x03, 0x89, 0xd8, 0xfa, 0x59, 0x19, 0xaf, 0x19, 0x45, 0xb3, 0x02, 0xfd, 0x45, 0xf1, 0xd2, 0x2d, 0x12, 0xb5, 0x4b, 0xbb, 0xc7, 0xbd, 0x00, 0x76, 0x44, 0x77, 0x77, 0x60, 0xd5, 0x16, 0xe8, 0x63, 0x0f, 0xe5, 0x42, 0x3f, 0xfb, 0xdb, 0x6f, 0xc7, 0x77, 0x70, 0xd9, 0x4d, 0xd8, 0xb0, 0x2d, 0x5b, 0xd4, 0x8e, 0x5f, 0xa4, 0xa0, 0x7a, 0xee, 0x39, 0x55, 0x36, 0x69, 0x00, 0x98, 0xe5, 0x32, 0x63, 0x7a, 0x65, 0x82, 0x45, 0x9d, 0xde, 0xad, 0x3a, 0x99, 0x9b, 0xa7, 0xf7, 0x9d, 0x19, 0xc7, 0x07, 0x5a, 0x5e, 0xcc, 0xc0, 0x1c, 0x8c, 0x1e, 0x76, 0x3a, 0xb6, 0x56, 0xee, 0xb1, 0xf2, 0xff, 0x15, 0x0c, 0xb0, 0x9e, 0xf2, 0x87, 0x4a, 0xf1, 0xda, 0x73, 0xdc, 0x75, 0xe3, 0xdc, 0x55, 0x2a, 0x9b, 0x6a, 0xce, 0x9a, 0xf9, 0x85, 0x1b, 0x18, 0x93, 0xbc, 0xa0, 0x46, 0x12, 0x68, 0x66, 0xda, 0xe3, 0x8c, 0x6f, 0xa1, 0x30, 0x00, 0x46, 0xc4, 0x0f, 0xcf, 0xd9, 0x4a, 0xf9, 0xdd, 0x8b, 0xde, 0x7d, 0xcd, 0x86, 0xd2, 0x35, 0x21, 0x4e, 0x65, 0xfa, 0xa3, 0x9c, 0x41, 0x54, 0x04, 0x69, 0x48, 0x34, 0xc4, 0x49, 0x90, 0xe6, 0x51, 0xfa, 0xac, 0x41, 0x73, 0x3d, 0x2e, 0x21, 0xe7, 0xe4, 0x69, 0x17, 0x4b, 0x2d, 0x7c, 0x5e, 0x3a, 0x4e, 0x8c, 0x11, 0xb7, 0x51, 0x50, 0x9c, 0xcf, 0x22, 0xd3, 0x71, 0x7a, 0xe7, 0x75, 0xfc, 0xc3, 0x8f, 0x33, 0xd8, 0x28, 0xae, 0x29, 0x43, 0x44, 0x88, 0x55, 0xcf, 0xab, 0x6b, 0x9e, 0x5b, 0x16, 0x43, 0x15, 0x42, 0xc0, 0x68, 0x7a, 0xd2, 0x0f, 0xba, 0x02, 0x00, 0x77, 0xf0, 0x57, 0x59, 0x9c, 0x2d, 0xe1, 0x3c, 0xb6, 0xd4, 0x44, 0x47, 0x3a, 0x9e, 0x2a, 0x0f, 0xb7, 0xea, 0x42, 0x14, 0xfd, 0x54, 0x89, 0xf4, 0x85, 0x88, 0xc8, 0xde, 0x0d, 0x59, 0x5d, 0x4a, 0x83, 0x0d, 0x3f, 0xe7, 0x24, 0xfb, 0x3d, 0xd5, 0xe5, 0x59, 0x86, 0x15, 0x12, 0x4f, 0x6e, 0x3e, 0x35, 0x4f, 0x6f, 0x71, 0x39, 0xa9, 0x6e, 0x8e, 0xcf, 0x5a, 0x40, 0xa8, 0x11, 0x25, 0x6d, 0xb7, 0x65, 0xe6, 0x34, 0x8d, 0xa5, 0x22, 0xcf, 0x0c, 0x7d, 0xe2, 0xf8, 0x95, 0x14, 0xc2, 0xab, 0xc3, 0xee, 0x45, 0x2e, 0x5a, 0x11, 0x6b, 0x4f, 0x7a, 0x66, 0x86, 0xed, 0x19, 0x63, 0x49, 0xb9, 0xb0, 0xe7, 0x22, 0x3e, 0x33, 0x65, 0xca, 0x1f, 0x47, 0x45, 0x1a, 0xa0, 0xb0, 0x87, 0x20, 0x68, 0x08, 0xaa, 0x72, 0x86, 0xb7, 0xcc, 0xc2, 0xb1, 0x1f, 0x12, 0xb3, 0xd4, 0x17, 0x4a, 0xeb, 0xca, 0x9b, 0xcf, 0x69, 0x65, 0xc1, 0xad, 0x19, 0xb6, 0xef, 0x06, 0xa6, 0x88, 0x4c, 0xb5, 0x90, 0x2e, 0x74, 0x30, 0x7e, 0x7f, 0x70, 0xb3, 0xd5, 0x1e, 0xe5, 0x9b, 0x89, 0xff, 0x8b, 0x10, 0x34, 0x26, 0xe1, 0xe6, 0x65, 0xb2, 0x20, 0xc5, 0x3a, 0x1b, 0x6d, 0x88, 0x31, 0xb8, 0x52, 0xe4, 0x3b, 0x84, 0x6f, 0x4a, 0x12, 0x21, 0x6d, 0x0e, 0xcd, 0x1d, 0x34, 0xc8, 0xb2, 0x75, 0x5e, 0xfb, 0x4b, 0x57, 0xeb, 0xf4, 0xbc, 0x2c, 0x36, 0xf5, 0x53, 0xd6, 0x27, 0x93, 0x61, 0x36, 0xab, 0x5d, 0x48, 0xf2, 0x61, 0xbe, 0xd6, 0x75, 0x97, 0x25, 0xd1, 0x37, 0x74, 0x62, 0xd3, 0x3e, 0x76, 0x54, 0x58, 0xe5, 0x20, 0xc1, 0x16, 0xdc, 0xec, 0x85, 0x8d, 0x70, 0x87, 0xef, 0xde, 0x0c, 0x3d, 0x68, 0xe0, 0x00, 0xb2, 0x55, 0x71, 0x82, 0xd4, 0x3f, 0x0a, 0xf2, 0x0d, 0x31, 0x97, 0x63, 0xbd, 0x62, 0x85, 0x56, 0xe7, 0x14, 0x1c, 0xc8, 0x2b, 0xbc, 0x0f, 0x70, 0xf4, 0x63, 0x51, 0x42, 0xf2, 0x4c, 0x2b, 0x37, 0xcb, 0xd7, 0x8c, 0x50, 0x0d, 0xa5, 0xa0, 0xd9, 0x68, 0xfd, 0xa3, 0xeb, 0x1a, 0x6f, 0xf8, 0x34, 0xaa, 0xb7, 0x75, 0xfa, 0xd9, 0xe4, 0x02, 0x5e, 0xd6, 0xb9, 0x62, 0xde, 0xb1, 0x53, 0x50, 0x1e, 0x12, 0x0c, 0xce, 0xe8, 0x2b, 0xa0, 0xba, 0x71, 0xeb, 0x8e, 0xa2, 0xde, 0x74, 0xc1, 0xd9, 0x06, 0xd0, 0x70, 0xca, 0x7a, 0xdf, 0x43, 0x8d, 0xc3, 0x94, 0xb7, 0xb8, 0xea, 0x61, 0xc3, 0x78, 0x3e, 0xf0, 0xbc, 0xe0, 0x51, 0x14, 0x76, 0x80, 0x44, 0xff, 0xac, 0x3a, 0x44, 0xb5, 0xa1, 0x51, 0x55, 0xc1, 0x08, 0xc3, 0x4e, 0x26, 0x21, 0xd9, 0x25, 0x98, 0x26, 0xfc, 0x6d, 0xec, 0xe5, 0xca, 0x1d, 0xce, 0xae, 0x69, 0x93, 0xb2, 0x6f, 0x1b, 0xd9, 0x0d, 0x1e, 0x13, 0x26, 0xc4, 0x57, 0x88, 0xa8, 0xe4, 0x47, 0x07, 0x80, 0x95, 0xc8, 0x0d, 0x0f, 0x49, 0xcd, 0xd5, 0x70, 0x39, 0x01, 0x6f, 0x45, 0x12, 0xab, 0x12, 0xb7, 0xeb, 0xd5, 0xb3, 0xb8, 0x7b, 0xad, 0xd6, 0x8b, 0x89, 0x2b, 0xa5, 0x87, 0xa3, 0xf4, 0x3f, 0x18, 0x13, 0x7f, 0x52, 0x06, 0x0f, 0x76, 0xec, 0xfa, 0x30, 0x5f, 0x8e, 0x3e, 0x26, 0x7b, 0x83, 0xc4, 0xa9, 0xee, 0x6f, 0x6a, 0xb2, 0x21, 0x2b, 0x7c, 0xec, 0x65, 0xd0, 0x7a, 0x65, 0xd9, 0x12, 0x1c, 0x8a, 0x8d, 0xd0, 0x94, 0x52, 0xe7, 0xe8, 0x13, 0xb9, 0x46, 0x50, 0x8e, 0x70, 0xe6, 0x63, 0xc2, 0xd3, 0x04, 0x78, 0x76, 0x1b, 0x42, 0xb9, 0x00, 0xd5, 0x4c, 0x33, 0x0a, 0x93, 0xbc, 0x29, 0x96, 0xe1, 0x3b, 0xae, 0x40, 0x7a, 0xe9, 0x73, 0xc3, 0xbc, 0x00, 0xdd, 0xbf, 0x5a, 0xb4, 0x5a, 0xba, 0x51, 0x5d, 0xf6, 0x64, 0x1d, 0xd7, 0x29, 0x1f, 0x2c, 0x29, 0xf3, 0xbe, 0x93, 0x66, 0x2b, 0x8d, 0x00, 0xd1, 0x15, 0x92, 0xef, 0x44, 0x32, 0x13, 0x21, 0xd3, 0x5c, 0x59, 0x4a, 0xac, 0x12, 0xb3, 0x0b, 0x41, 0x10, 0xbd, 0x1f, 0xaa, 0x22, 0xe1, 0xd9, 0x44, 0x3b, 0x1f, 0xce, 0x9f, 0xc1, 0x0a, 0xcf, 0x97, 0x2c, 0x13, 0x1a, 0xc0, 0xcf, 0x0a, 0xd0, 0x08, 0xf5, 0xe2, 0xaa, 0x97, 0x30, 0xb5, 0xe8, 0xfa, 0xee, 0x07, 0x8b, 0x81, 0x4d, 0x4f, 0xc4, 0xe5, 0x31, 0xb4, 0xac, 0x2e, 0x93, 0x14, 0x35, 0xd4, 0x1c, 0x4a, 0x61, 0x25, 0xf2, 0xb1, 0xb2, 0xe6, 0xd2, 0xe4, 0xe1, 0x3d, 0x5f, 0xc8, 0xd3, 0xcf, 0xb9, 0xcd, 0xc8, 0x25, 0x52, 0x70, 0xd6, 0x54, 0xfd, 0x05, 0x96, 0xdd, 0x48, 0xb3, 0x1d, 0xd2, 0x0c, 0xc0, 0x2d, 0x3a, 0x42, 0x0e, 0xad, 0xb7, 0x18, 0xe6, 0x57, 0x66, 0x45, 0xf5, 0xb1, 0x07, 0x99, 0x94, 0x3e, 0x5e, 0xd8, 0x4d, 0xf5, 0xd8, 0xc8, 0x9a, 0xf2, 0x72, 0x89, 0xef, 0x6c, 0xd7, 0x25, 0xfb, 0xe7, 0xc8, 0x68, 0x2c, 0xaa, 0xc1, 0xf2, 0x71, 0x74, 0xda, 0x8a, 0x43, 0x6b, 0xeb, 0xb5, 0xe6, 0x55, 0xf3, 0x87, 0xec, 0x0a, 0xbb, 0xba, 0xfc, 0x29, 0xb6, 0xfd, 0xd1, 0x0b, 0x2c, 0x8e, 0x85, 0xf5, 0x97, 0x0b, 0x10, 0x92, 0x4e, 0x86, 0x0c, 0xa0, 0x60, 0xd7, 0xbb, 0xe9, 0xc3, 0x36, 0x4a, 0x75, 0xae, 0x09, 0x57, 0xfe, 0x43, 0xfa, 0xb2, 0xa4, 0x71, 0x4d, 0x60, 0xe2, 0x19, 0x70, 0xe6, 0xc1, 0x6f, 0xd4, 0xc4, 0x4b, 0xa4, 0xfc, 0x3f, 0x43, 0xc2, 0xd4, 0x63, 0x13, 0xd7, 0x43, 0x49, 0x06, 0x55, 0x03, 0x96, 0xb7, 0xb9, 0xb1, 0x44, 0xca, 0x6b, 0x20, 0xa5, 0xd9, 0xe5, 0xf3, 0xa4, 0xb1, 0x18, 0x6b, 0x4f, 0xbf, 0x0b, 0x7d, 0x92, 0xc5, 0xc6, 0x28, 0x45, 0xd1, 0x6e, 0x05, 0x6a, 0x70, 0xb1, 0x20, 0xaf, 0x1f, 0x65, 0x06, 0x3b, 0x02, 0x6b, 0x1f, 0xa6, 0xd9, 0xda, 0x3e, 0x49, 0x2f, 0x59, 0x77, 0xb9, 0xd4, 0xcd, 0x31, 0x8e, 0x8e, 0x35, 0x7b, 0x69, 0x0c, 0xd1, 0xa4, 0x35, 0x1b, 0x8a, 0x05, 0xac, 0x1d, 0x8e, 0x22, 0x1d, 0xb6, 0x3b, 0xf2, 0x6d, 0xc8, 0x3e, 0x7a, 0x5d, 0xa2, 0xfc, 0xa1, 0x0a, 0x74, 0x31, 0x3f, 0xba, 0x06, 0xd6, 0x77, 0xd5, 0xaa, 0x49, 0x47, 0x32, 0x70, 0xa8, 0x5d, 0x94, 0x98, 0x7d, 0x2c, 0x75, 0x4d, 0xa1, 0x40, 0x02, 0x90, 0x5a, 0xce, 0x66, 0x72, 0xc7, 0x90, 0x4b, 0x86, 0x7e, 0xcf, 0x9e, 0x96, 0x73, 0xc2, 0x93, 0x95, 0x1c, 0x16, 0xea, 0xd5, 0xd2, 0xce, 0x70, 0x7a, 0x7b, 0x4d, 0xc8, 0x2f, 0x66, 0xb1, 0x6b, 0x17, 0x76, 0x63, 0xee, 0x06, 0x83, 0xec, 0x84, 0xf2, 0xfd, 0x0b, 0xc3, 0xa4, 0xd2, 0x04, 0xab, 0xb3, 0x92, 0x3a, 0xe4, 0xb3, 0xd2, 0x00, 0x47, 0xaa, 0xce, 0xad, 0xa0, 0xc3, 0x52, 0xee, 0xb2, 0x47, 0xda, 0x61, 0x7c, 0xc8, 0xf8, 0x5f, 0xbb, 0xa0, 0xf6, 0x19, 0xb0, 0x9a, 0xbc, 0xe6, 0x23, 0xee, 0xf5, 0xdb, 0xa8, 0x73, 0x6e, 0x9d, 0x21, 0x10, 0xbe, 0x73, 0x84, 0x73, 0x2c, 0x9f, 0xdf, 0x06, 0xcd, 0xef, 0x99, 0x1f, 0xed, 0x8f, 0xfa, 0x78, 0xb0, 0x21, 0xed, 0xde, 0xf9, 0x0f, 0x05, 0x2d, 0x8b, 0x20, 0xbf, 0x7b, 0x6f, 0x4a, 0x07, 0x94, 0x95, 0xc8, 0xfd, 0xa7, 0xbe, 0x6c, 0xf8, 0x3e, 0x98, 0x35, 0xcb, 0x73, 0x2b, 0x24, 0x48, 0x61, 0x75, 0x4c, 0x03, 0xda, 0x51, 0x29, 0x59, 0x58, 0x9e, 0x32, 0xb0, 0x35, 0x9c, 0xb1, 0xff, 0x1e, 0x99, 0xd3, 0x92, 0xc5, 0xce, 0xfb, 0x07, 0xd6, 0x84, 0x5c, 0x9d, 0x2d, 0x7b, 0xc7, 0xae, 0x46, 0x8b, 0xc1, 0x79, 0xf4, 0x8c, 0xd9, 0x25, 0x56, 0x74, 0x39, 0x03, 0x07, 0xbf, 0x7a, 0x14, 0x96, 0x14, 0xbd, 0xcb, 0x36, 0x25, 0xf7, 0x13, 0xb6, 0xd7, 0x8c, 0x94, 0xb3, 0xa3, 0x20, 0x32, 0x0c, 0x3b, 0xa9, 0xd7, 0x96, 0x71, 0xc9, 0x73, 0x11, 0x55, 0x5c, 0x41, 0x5b, 0x9e, 0x4d, 0x4b, 0xe4, 0x4c, 0xad, 0x30, 0x62, 0x8b, 0x06, 0x25, 0xc6, 0xd9, 0xec, 0x3a, 0x6e, 0x6b, 0xd6, 0xdf, 0x9c, 0xcd, 0x2c, 0xa6, 0x27, 0xca, 0xa1, 0x4a, 0x70, 0x8b, 0xc3, 0xf1, 0x98, 0x03, 0xd0, 0xae, 0xf0, 0x8a, 0xcc, 0x4a, 0xb1, 0xc7, 0xd0, 0x44, 0xee, 0xd4, 0xa5, 0x16, 0xc6, 0x9d, 0x92, 0xba, 0xde, 0x89, 0x71, 0x6d, 0x0f, 0x5d, 0x08, 0xb3, 0x5b, 0x5d, 0x97, 0x9b, 0x26, 0xb4, 0xae, 0x44, 0xa2, 0x15, 0x41, 0xa0, 0x8c, 0xa3, 0xfe, 0x78, 0x16, 0x0e, 0xde, 0xb0, 0x24, 0xff, 0xfb, 0xcd, 0xba, 0xb7, 0xa1, 0xb4, 0xb5, 0xf3, 0xa7, 0xb4, 0xba, 0x12, 0x00, 0xc7, 0x6d, 0x79, 0x8d, 0x15, 0xe3, 0x37, 0x35, 0xba, 0x59, 0xe5, 0x38, 0xc9, 0x26, 0xd0, 0xc0, 0x91, 0xee, 0x5b, 0xba, 0x1f, 0x19, 0x9e, 0xe3, 0x04, 0x83, 0x53, 0x26, 0x58, 0x75, 0xf3, 0x25, 0xfe, 0xd5, 0x1c, 0x16, 0x2a, 0x99, 0x36, 0xd0, 0x21, 0x81, 0x56, 0x25, 0x40, 0x06, 0x62, 0x73, 0x40, 0x8e, 0x77, 0x76, 0xb8, 0xe1, 0x87, 0x60, 0xe3, 0xe0, 0x47, 0x2c, 0xa4, 0x75, 0x48, 0x2f, 0xc7, 0xc6, 0x63, 0xf0, 0x8a, 0xae, 0x5b, 0x39, 0x5c, 0x6d, 0xbe, 0x6e, 0xe4, 0x9e, 0x0c, 0x1e, 0x45, 0x6a, 0x1b, 0xd8, 0xa1, 0xfc, 0xba, 0x40, 0xdc, 0x34, 0x95, 0x61, 0xa2, 0xa0, 0x59, 0x45, 0xab, 0xa8, 0x18, 0xc3, 0x3d, 0x08, 0xee, 0x99, 0xf3, 0x84, 0xe5, 0xbb, 0xbe, 0xd6, 0x16, 0xea, 0x29, 0xec, 0x11, 0x87, 0xe1, 0x50, 0x7f, 0xaa, 0x74, 0xe8, 0x06, 0x6f, 0x59, 0xdf, 0x6d, 0x90, 0x31, 0xe3, 0x01, 0x39, 0x4c, 0x91, 0x37, 0x17, 0x6f, 0x2d, 0x92, 0xb3, 0xd4, 0x97, 0xc7, 0xfe, 0x73, 0x7a, 0x20, 0x2c, 0x80, 0xc7, 0x1e, 0xc6, 0x35, 0x62, 0x62, 0xfb, 0xd1, 0x1b, 0xcd, 0x38, 0xe1, 0xdf, 0xe7, 0xf8, 0xbe, 0x2f, 0x7d, 0xdc, 0x57, 0xd2, 0x8f, 0xfe, 0x30, 0xc7, 0x69, 0x83, 0xab, 0x7e, 0x0f, 0x6f, 0x87, 0x48, 0xde, 0xbd, 0xa6, 0x0b, 0x71, 0xb0, 0x13, 0x3a, 0xc2, 0x64, 0x43, 0x04, 0x91, 0xa8, 0x9b, 0xcc, 0x0a, 0x10, 0x33, 0xda, 0xa2, 0x45, 0xda, 0x50, 0x42, 0xa0, 0x5a, 0x5f, 0xa7, 0xf7, 0xfd, 0xba, 0x09, 0xb7, 0x4f, 0x4b, 0xfa, 0x33, 0x26, 0x26, 0x92, 0x3c, 0xe0, 0xbb, 0xc9, 0xf2, 0xec, 0x4f, 0x24, 0xd9, 0x8c, 0xad, 0x94, 0x30, 0xd8, 0x18, 0x9b, 0x7e, 0x07, 0x85, 0xb0, 0x6d, 0xea, 0x07, 0xe5, 0xdb, 0xb9, 0x8b, 0xc7, 0x2f, 0x12, 0xc5, 0x85, 0xe9, 0x3f, 0x6a, 0x55, 0x7e, 0xb8, 0xa0, 0x14, 0x62, 0xe8, 0xb3, 0x2c, 0x66, 0x34, 0x09, 0xbb, 0x44, 0x3a, 0x58, 0xf2, 0x78, 0x56, 0x16, 0xbb, 0x52, 0x6b, 0x31, 0x9e, 0x4a, 0xe0, 0x01, 0xe5, 0x93, 0xe8, 0x7b, 0xfe, 0xf3, 0x07, 0xa7, 0x22, 0xd1, 0xd2, 0x54, 0x34, 0x90, 0xf6, 0x0a, 0xec, 0x1b, 0x7b, 0x40, 0x34, 0xc1, 0x4a, 0xcf, 0xd2, 0x44, 0xed, 0xa7, 0x48, 0x2c, 0x97, 0xc0, 0xf8, 0x61, 0x64, 0x54, 0x8c, 0xf9, 0xe1, 0x4c, 0x95, 0x4f, 0xcf, 0xf8, 0x72, 0x55, 0x24, 0x02, 0x74, 0x2b, 0x53, 0xa5, 0x40, 0xf0, 0xcd, 0x1a, 0x74, 0xd8, 0xc8, 0x53, 0x8d, 0x7e, 0x3f, 0xec, 0x08, 0x7c, 0x3a, 0x5f, 0xc7, 0x3a, 0x4f, 0x77, 0xb7, 0x03, 0x69, 0x07, 0xb0, 0x5e, 0xc8, 0xdb, 0x9c, 0x9b, 0x49, 0xef, 0xdc, 0xac, 0xe8, 0xdf, 0xe7, 0x36, 0x83, 0x9f, 0x34, 0xe8, 0xe1, 0x6c, 0x5b, 0x0c, 0xf2, 0x02, 0x77, 0x5b, 0x58, 0x10, 0xce, 0x16, 0x27, 0xe9, 0xb4, 0x52, 0xe9, 0x7c, 0xac, 0x94, 0xe6, 0x86, 0xd1, 0x9d, 0xa2, 0x06, 0x74, 0x87, 0xa6, 0xf2, 0x07, 0x11, 0x83, 0x28, 0x39, 0x38, 0x15, 0xa7, 0x63, 0x07, 0x05, 0xff, 0x23, 0xaf, 0x91, 0x06, 0x46, 0xda, 0x90, 0xcd, 0xec, 0x3d, 0xb0, 0xd2, 0xe6, 0x6c, 0x03, 0x77, 0x63, 0xf3, 0xba, 0xb3, 0xcc, 0xa2, 0x30, 0x08, 0xec, 0x28, 0x2a, 0xb5, 0x54, 0xe4, 0x5d, 0x2c, 0xfe, 0xf7, 0x30, 0xc6, 0x30, 0x9e, 0xc4, 0xb6, 0xa3, 0xbf, 0x31, 0x3c, 0xe5, 0xc1, 0x13, 0x1b, 0xfc, 0xa1, 0x46, 0x4c, 0x4c, 0x42, 0xed, 0xf4, 0xbb, 0x05, 0xb9, 0x94, 0x12, 0x9a, 0x68, 0x7f, 0xa6, 0x16, 0x8b, 0x92, 0x39, 0x45, 0x8d, 0x1f, 0x1b, 0x41, 0xf1, 0x2a, 0x94, 0x43, 0xdb, 0xd8, 0x87, 0xba, 0xd2, 0x24, 0x4f, 0x9a, 0xc4, 0xd4, 0xed, 0xf7, 0x4a, 0xab, 0x65, 0xd2, 0x2e, 0xe1, 0x65, 0x33, 0x2b, 0xd0, 0x28, 0x78, 0xf3, 0xf0, 0x9a, 0xec, 0x77, 0x05, 0xbd, 0x9b, 0x62, 0x97, 0x4b, 0x65, 0xe6, 0xa3, 0x9d, 0x52, 0xbc, 0x90, 0xcb, 0x25, 0x66, 0x64, 0x15, 0x34, 0xb8, 0x38, 0x81, 0x76, 0x96, 0xea, 0xc6, 0xde, 0xff, 0x11, 0x69, 0xe7, 0x4b, 0x36, 0x26, 0x71, 0xb0, 0x41, 0x91, 0xcb, 0x0b, 0x31, 0xfd, 0x11, 0xdd, 0x10, 0x9d, 0xb8, 0x94, 0x26, 0xe9, 0x67, 0x0d, 0x6e, 0x43, 0x08, 0x56, 0x46, 0xdb, 0x20, 0xb8, 0x6a, 0xd0, 0x5b, 0xf5, 0x23, 0x98, 0x6c, 0xce, 0xbc, 0xa1, 0x13, 0xc8, 0x36, 0x38, 0x7f, 0x30, 0x3d, 0xab, 0xd7, 0x5d, 0x5a, 0xaa, 0x14, 0x35, 0x69, 0xf3, 0x11, 0xf3, 0x4e, 0x2f, 0xe5, 0x27, 0xe4, 0x16, 0x70, 0xfd, 0x36, 0xda, 0x34, 0xc3, 0xf2, 0xc3, 0x66, 0xa6, 0x1a, 0x16, 0x45, 0xbc, 0xfd, 0x3c, 0xab, 0x48, 0x66, 0x20, 0xe2, 0x39, 0x13, 0xd9, 0xb8, 0xf3, 0x68, 0x89, 0xd6, 0x52, 0x65, 0x85, 0x4d, 0xec, 0xd6, 0xb6, 0x72, 0x97, 0xc9, 0x3f, 0xec, 0x2c, 0x45, 0x5f, 0x0b, 0x8a, 0x39, 0x99, 0x5c, 0xdd, 0xb3, 0x13, 0x7a, 0x20, 0x52, 0x3d, 0x26, 0xe0, 0xfe, 0xb2, 0x9a, 0x43, 0xd6, 0x63, 0x1b, 0x4a, 0x6a, 0xf2, 0xce, 0x53, 0x2b, 0x5c, 0xcc, 0xe2, 0x20, 0xdb, 0x78, 0xa0, 0xda, 0x0b, 0x11, 0xa4, 0xa9, 0x4b, 0x83, 0xf2, 0x10, 0x66, 0x83, 0x41, 0x77, 0x73, 0xda, 0x02, 0x20, 0xf9, 0x01, 0x9d, 0x5c, 0x57, 0xef, 0xfe, 0xff, 0x63, 0x2f, 0x50, 0x11, 0x52, 0x35, 0x08, 0xc6, 0xd8, 0xf2, 0x26, 0xb0, 0x8f, 0xa6, 0xb7, 0x34, 0x9d, 0xf6, 0x9f, 0x3b, 0x92, 0x3e, 0x95, 0x29, 0x8f, 0x28, 0x6f, 0x13, 0xad, 0x7e, 0xa0, 0x2d, 0x9c, 0x3c, 0xff, 0x81, 0x8b, 0xea, 0xca, 0xe7, 0x48, 0x28, 0xea, 0x31, 0xa9, 0x8b, 0x78, 0xa6, 0x2a, 0xa7, 0x81, 0xb2, 0xd7, 0x6d, 0x06, 0xdb, 0x6d, 0xb8, 0x47, 0xf7, 0xbc, 0x22, 0x42, 0x9c, 0x4f, 0x1c, 0x76, 0xd9, 0x4f, 0x3e, 0xec, 0x23, 0xa5, 0xdb, 0x78, 0x92, 0x5f, 0xd9, 0x3d, 0x4e, 0x55, 0xbf, 0x6f, 0x44, 0x0c, 0x10, 0x5d, 0x1d, 0xda, 0xd8, 0xae, 0x70, 0x4b, 0x84, 0xea, 0x36, 0xc4, 0xf6, 0x3d, 0x7f, 0x66, 0xd9, 0x78, 0x64, 0x35, 0x32, 0x59, 0x3d, 0x7a, 0x38, 0x0c, 0x14, 0x66, 0x66, 0xf1, 0x59, 0xf7, 0xce, 0xa0, 0xd6, 0x20, 0xb0, 0x2b, 0xe6, 0x24, 0x4b, 0xa3, 0xe2, 0x43, 0xf3, 0xdd, 0xdd, 0x98, 0x64, 0x75, 0x91, 0x42, 0x56, 0x14, 0x98, 0xc2, 0x52, 0xef, 0xe0, 0xa4, 0xc3, 0x90, 0x59, 0x62, 0x50, 0xd9, 0xf0, 0x85, 0x69, 0x46, 0xc1, 0x0d, 0x20, 0x72, 0x88, 0x13, 0x3b, 0xdd, 0x59, 0xad, 0x87, 0xec, 0x92, 0x12, 0x6f, 0x31, 0x0d, 0xfe, 0xcc, 0xed, 0x9a, 0x58, 0xff, 0xd3, 0xac, 0x13, 0x3e, 0x0f, 0x52, 0x52, 0x2b, 0x87, 0x69, 0xcf, 0xab, 0x61, 0x11, 0x7d, 0xf5, 0xc5, 0x5d, 0x6c, 0xe9, 0xe4, 0x4f, 0xed, 0xa4, 0x39, 0x03, 0xf8, 0x51, 0x0e, 0x2a, 0xca, 0x41, 0x43, 0xba, 0xd2, 0x3f, 0x4b, 0xe4, 0xce, 0x1d, 0x77, 0x47, 0x32, 0x93, 0x77, 0x63, 0xc9, 0x4a, 0x1e, 0x50, 0x9e, 0x33, 0x65, 0xaf, 0x1d, 0x1d, 0xb3, 0xe2, 0x76, 0x87, 0x5b, 0x78, 0x42, 0xb2, 0x66, 0xeb, 0x69, 0xfb, 0x94, 0x8e, 0x43, 0x68, 0x9d, 0xc1, 0xfd, 0x81, 0xbc, 0x67, 0x3f, 0x61, 0x6e, 0x9a, 0x0b, 0x0c, 0x78, 0x9d, 0xe9, 0x03, 0x27, 0x11, 0x41, 0x16, 0xdb, 0x6c, 0x08, 0x7a, 0xc7, 0xa8, 0x9e, 0x1b, 0xf2, 0x38, 0xf7, 0x33, 0x81, 0x40, 0xfa, 0x1c, 0x39, 0x05, 0x26, 0x63, 0x40, 0xa3, 0x7b, 0x1d, 0x23, 0xfe, 0x98, 0x7e, 0x1d, 0xfa, 0x21, 0xa7, 0x97, 0xef, 0x63, 0xc0, 0xeb, 0x57, 0x3b, 0x47, 0x6d, 0xca, 0x33, 0xa7, 0xac, 0x2d, 0xef, 0x0d, 0xf5, 0x26, 0xc8, 0x77, 0x19, 0xd2, 0xb6, 0x0e, 0x70, 0xbb, 0x73, 0xb5, 0x1e, 0x04, 0xdd, 0xe2, 0x95, 0xe7, 0x9d, 0xac, 0x5c, 0x62, 0x06, 0x26, 0x0e, 0x2c, 0x3f, 0xec, 0xa5, 0xee, 0xa5, 0xfb, 0xf8, 0xb0, 0x6b, 0xc6, 0x83, 0x91, 0x83, 0x86, 0x67, 0xbc, 0xc2, 0xd1, 0xb1, 0x97, 0x3f, 0x6e, 0xdf, 0x3e, 0xfc, 0x68, 0xa1, 0x2f, 0xc8, 0x61, 0xdc, 0x47, 0x63, 0x29, 0xf4, 0xed, 0xe4, 0x8f, 0x4b, 0x8d, 0x58, 0x77, 0x05, 0x48, 0xac, 0x2d, 0x0f, 0xe9, 0xcd, 0xf9, 0x5f, 0x1b, 0x0d, 0xf4, 0x7d, 0xda, 0xc9, 0x19, 0x42, 0x28, 0x48, 0x9f, 0xdf, 0x01, 0xe7, 0x87, 0x22, 0x90, 0x73, 0x71, 0xf5, 0xa3, 0xd7, 0xb3, 0x28, 0x5d, 0xf7, 0xac, 0x70, 0x2a, 0xdb, 0x56, 0xaf, 0xf8, 0x10, 0x1b, 0x75, 0xa5, 0x4b, 0xea, 0xc7, 0xb3, 0x50, 0x89, 0x20, 0x43, 0x12, 0x2d, 0xb6, 0x41, 0x1c, 0x48, 0xfe, 0xdc, 0x2f, 0xa2, 0x72, 0x39, 0x2d, 0xab, 0x92, 0x68, 0x35, 0x10, 0x29, 0x97, 0x10, 0x8c, 0xd1, 0x85, 0xcc, 0x01, 0xb9, 0x3a, 0xa6, 0xc7, 0xa6, 0xf6, 0x2e, 0x43, 0x38, 0x67, 0xa5, 0xbc, 0x6f, 0x1e, 0xaa, 0x6b, 0x6d, 0x44, 0x16, 0xd1, 0x7e, 0x89, 0x24, 0x4e, 0x55, 0x5e, 0xd5, 0xee, 0x99, 0x64, 0x92, 0x86, 0xa0, 0x24, 0x13, 0x00, 0x7a, 0x00, 0x81, 0xf3, 0x31, 0x69, 0xd7, 0x77, 0x4f, 0x53, 0x8e, 0x37, 0xa1, 0xe6, 0x79, 0xc7, 0x3b, 0x77, 0xee, 0x38, 0xbc, 0xb6, 0x26, 0xea, 0xd3, 0x29, 0xe6, 0xa2, 0x02, 0xd9, 0x5f, 0xdc, 0xa2, 0x4b, 0x54, 0x63, 0x28, 0xb1, 0x7a, 0x1e, 0xa6, 0x62, 0x24, 0x2d, 0x95, 0x88, 0x1f, 0x35, 0xd1, 0x18, 0xdb, 0xf7, 0xe5, 0x08, 0xcc, 0x28, 0x89, 0xbc, 0x10, 0x7c, 0x69, 0xc1, 0x52, 0x05, 0x28, 0xbd, 0xee, 0xbb, 0xa5, 0xa6, 0x56, 0x5c, 0x7d, 0x33, 0xb4, 0x76, 0xd1, 0x90, 0xd1, 0xc1, 0x49, 0x56, 0x35, 0xb3, 0x58, 0xba, 0x90, 0x4f, 0xc2, 0x05, 0x58, 0x3e, 0x5c, 0x44, 0xb4, 0x20, 0x13, 0x40, 0x99, 0x24, 0x30, 0xb0, 0x32, 0xd6, 0xdb, 0xae, 0x86, 0x39, 0xdd, 0x68, 0x55, 0x16, 0xaa, 0x18, 0x42, 0x93, 0x9e, 0x36, 0x38, 0x07, 0x87, 0xeb, 0x06, 0x0d, 0x64, 0xca, 0x4c, 0xd8, 0x6c, 0xbb, 0x9b, 0xc6, 0x52, 0x37, 0xd8, 0x37, 0xc8, 0xbb, 0xe1, 0x9f, 0x42, 0x76, 0x73, 0xda, 0xfc, 0x45, 0x4c, 0xc0, 0x3e, 0xe2, 0x8c, 0xfa, 0xdf, 0x59, 0x61, 0x14, 0x08, 0xbb, 0xe3, 0xd2, 0x3a, 0x15, 0x3d, 0xc8, 0x92, 0xa3, 0x0e, 0x25, 0x4c, 0x42, 0x0f, 0xd0, 0x87, 0x24, 0xf5, 0xb6, 0x47, 0xc7, 0x99, 0x62, 0xc0, 0x28, 0x56, 0xce, 0xd2, 0x34, 0xb2, 0x78, 0xd0, 0x7f, 0x41, 0xb9, 0x85, 0x38, 0xc7, 0x52, 0x79, 0x5d, 0x9d, 0x48, 0x70, 0x2b, 0x56, 0xf3, 0x34, 0xd9, 0xa1, 0x51, 0x94, 0x85, 0x71, 0xa0, 0xad, 0x6f, 0x5c, 0x2b, 0x68, 0x65, 0x41, 0x64, 0x44, 0x7e, 0x2e, 0x33, 0x56, 0x0b, 0x81, 0x8e, 0x8e, 0xcb, 0x4d, 0x4a, 0x3b, 0x5e, 0xff, 0x30, 0xd1, 0xfc, 0x41, 0x54, 0xea, 0x67, 0x1e, 0xa2, 0x8c, 0x1e, 0x67, 0xba, 0xaa, 0xd4, 0x56, 0xfe, 0xed, 0x20, 0x72, 0xe8, 0xb4, 0x76, 0xb2, 0xa2, 0x59, 0x56, 0xe5, 0xd0, 0xb6, 0xc3, 0x51, 0xb0, 0xe7, 0xf7, 0x9b, 0x66, 0x52, 0x55, 0xe7, 0x91, 0xe5, 0x9f, 0x3f, 0x22, 0x9f, 0x69, 0x39, 0x6e, 0x52, 0xce, 0xd4, 0x82, 0xa7, 0x61, 0xa4, 0xb6, 0x62, 0x66, 0x2f, 0x85, 0xe7, 0x43, 0x96, 0x9b, 0xfd, 0x31, 0x78, 0x30, 0xd3, 0x37, 0x13, 0x95, 0x41, 0x59, 0xac, 0x0c, 0x4f, 0x0d, 0x31, 0xdd, 0xfb, 0xee, 0x1e, 0xa6, 0x37, 0xb4, 0x9d, 0xf3, 0x32, 0x64, 0xf1, 0x0e, 0xd8, 0xc4, 0x14, 0x19, 0x9c, 0x12, 0x9f, 0x59, 0x75, 0xf5, 0xeb, 0xd5, 0x26, 0xb4, 0x76, 0x20, 0xc3, 0xa6, 0x88, 0x73, 0x71, 0xea, 0x16, 0xfe, 0x6d, 0x57, 0xe6, 0x80, 0x50, 0xb6, 0xf4, 0x16, 0x91, 0x2f, 0x15, 0x50, 0x4b, 0x02, 0xda, 0x8a, 0x40, 0x78, 0xb7, 0x7a, 0x1f, 0x18, 0x64, 0x05, 0x02, 0x1d, 0x84, 0x57, 0x3b, 0x28, 0x85, 0x32, 0x50, 0x33, 0xc7, 0x86, 0x44, 0xc6, 0x00, 0x43, 0x18, 0x6d, 0xdf, 0x6b, 0x92, 0x69, 0xef, 0x6b, 0x3d, 0xa6, 0xbf, 0xab, 0xb1, 0xed, 0x40, 0x64, 0x14, 0x5b, 0x6e, 0xb2, 0xe1, 0x12, 0x32, 0xea, 0xe8, 0x2e, 0x87, 0x2d, 0x97, 0xfb, 0xdd, 0x3d, 0x77, 0x65, 0xba, 0x90, 0xf9, 0xaf, 0xa7, 0xa3, 0x73, 0x68, 0x4a, 0x91, 0x66, 0x9b, 0xd0, 0xe4, 0x02, 0x47, 0x8e, 0xab, 0xec, 0x0e, 0xe7, 0xcd, 0x3e, 0x31, 0x70, 0x9c, 0xd0, 0xbc, 0x52, 0xad, 0xb6, 0xfe, 0xf0, 0xe8, 0x09, 0x3c, 0xca, 0xdb, 0xeb, 0xa7, 0xa1, 0x53, 0xc5, 0x8a, 0xdd, 0x2e, 0xd3, 0xc8, 0x2b, 0x6b, 0xe3, 0x86, 0x6a, 0x83, 0x59, 0x25, 0xc8, 0xfc, 0x77, 0x73, 0x28, 0x3b, 0xdb, 0x22, 0xc8, 0x9a, 0x49, 0x79, 0x20, 0xba, 0xab, 0x49, 0x0d, 0x1b, 0x56, 0x23, 0x2e, 0xe9, 0x8f, 0xc8, 0x8e, 0x19, 0x4e, 0xe1, 0x84, 0xb5, 0x42, 0xf0, 0xd8, 0x74, 0x14, 0x87, 0x27, 0x8e, 0xf0, 0xb8, 0x89, 0xce, 0x42, 0xcc, 0x70, 0xe9, 0xbd, 0x37, 0xd4, 0x0e, 0xa2, 0xcc, 0x8d, 0xbe, 0x3f, 0x2e, 0x00, 0xde, 0xb6, 0x87, 0xfd, 0x0b, 0xff, 0x7c, 0xe8, 0x2d, 0x30, 0x60, 0x17, 0x4f, 0xfc, 0xa7, 0x7c, 0xae, 0x7a, 0x9e, 0x84, 0x0f, 0x28, 0x5a, 0x3e, 0x56, 0x30, 0xee, 0xc0, 0x55, 0xea, 0xe2, 0xc7, 0xe2, 0xa1, 0xe0, 0x9d, 0x2c, 0x9a, 0xaf, 0x40, 0x4f, 0x52, 0x66, 0xc0, 0x25, 0x08, 0xd9, 0xe9, 0x5f, 0x7b, 0x58, 0x22, 0xd5, 0xf5, 0x99, 0x95, 0x1b, 0x88, 0xf2, 0x90, 0x55, 0x98, 0xcb, 0x2b, 0x4c, 0x9a, 0x54, 0x2c, 0xc1, 0x1a, 0x73, 0x27, 0x01, 0x03, 0x01, 0xea, 0xb9, 0x1b, 0x35, 0x18, 0x0c, 0xcd, 0x60, 0x13, 0xe3, 0x2b, 0xdb, 0x1f, 0x84, 0x33, 0x3e, 0xc5, 0x67, 0x51, 0xd3, 0x76, 0x44, 0x26, 0x4b, 0x71, 0x71, 0x88, 0xaf, 0xe7, 0x6b, 0xca, 0x99, 0x5c, 0xb3, 0x3d, 0xa3, 0x50, 0xdb, 0xf6, 0x20, 0x1f, 0xe0, 0xd2, 0x0a, 0x26, 0xba, 0xb8, 0x3c, 0x27, 0x32, 0x1e, 0xe1, 0xee, 0xf4, 0xcf, 0x2d, 0x35, 0xe5, 0xeb, 0x4b, 0xc6, 0xb6, 0x2f, 0x96, 0xdf, 0xba, 0x76, 0x0b, 0xda, 0xf4, 0x80, 0xfe, 0x0d, 0x75, 0xf3, 0x0d, 0xf0, 0xe5, 0x9f, 0x53, 0x7d, 0x5f, 0x06, 0xde, 0xdd, 0x82, 0x1c, 0x62, 0x40, 0xc4, 0x4b, 0x2e, 0x0d, 0x0a, 0xba, 0x60, 0x3b, 0x76, 0xcf, 0x55, 0xfe, 0x80, 0xf3, 0x64, 0xa7, 0x49, 0x95, 0xcc, 0xc5, 0x2b, 0x71, 0xea, 0x91, 0x95, 0x12, 0xb0, 0x89, 0x16, 0x95, 0x52, 0x5a, 0xb7, 0xb1, 0x42, 0x03, 0x8e, 0xf4, 0x5f, 0x38, 0x90, 0x4f, 0x6a, 0x04, 0xa7, 0xd5, 0xb9, 0xb3, 0x05, 0xc0, 0x2f, 0xef, 0xb7, 0xb5, 0x6b, 0x29, 0x7d, 0x49, 0x40, 0x3b, 0xd9, 0xc3, 0x65, 0x4b, 0x66, 0x23, 0x6e, 0xf2, 0x6b, 0x64, 0xfb, 0x9d, 0xb0, 0xff, 0x30, 0x34, 0x90, 0xb0, 0x65, 0xfa, 0x50, 0x7c, 0x1e, 0xb5, 0xaf, 0xf3, 0x3d, 0x0e, 0xbe, 0xb3, 0x76, 0x3a, 0xf2, 0x2d, 0x04, 0xda, 0x78, 0xac, 0x9a, 0x20, 0xc8, 0x93, 0x9d, 0x34, 0x7d, 0xe5, 0x90, 0xd6, 0x64, 0x0b, 0xd0, 0x44, 0xd3, 0xd2, 0x81, 0x5e, 0x3c, 0xb4, 0xc8, 0x08, 0x01, 0x58, 0x3a, 0xd0, 0x8a, 0x5c, 0x95, 0xd1, 0x96, 0x51, 0xae, 0xd6, 0xce, 0x07, 0xab, 0xc3, 0xa0, 0x0b, 0x72, 0x31, 0x4a, 0x6f, 0x62, 0x59, 0x35, 0xc9, 0x40, 0x33, 0x85, 0x7e, 0x74, 0xdf, 0xee, 0x41, 0x75, 0x43, 0xc9, 0xd6, 0x82, 0xf6, 0x67, 0x1c, 0x93, 0x5c, 0xa5, 0x4a, 0x8f, 0x13, 0xc0, 0x79, 0xbf, 0x8e, 0x6b, 0x63, 0x83, 0x00, 0x1f, 0x6a, 0x43, 0x7c, 0xb3, 0xdc, 0xa9, 0x5a, 0x2c, 0x75, 0x0d, 0xdc, 0xd6, 0x25, 0x31, 0x12, 0x94, 0x14, 0x2f, 0xfa, 0x74, 0xe4, 0xaf, 0xec, 0x86, 0x36, 0x5d, 0x35, 0xef, 0x6f, 0x9b, 0x03, 0x39, 0xbc, 0x72, 0x81, 0xed, 0x53, 0xcf, 0x42, 0x64, 0xfc, 0xec, 0xe3, 0xda, 0xd0, 0x0c, 0xec, 0xc4, 0x41, 0x6b, 0xf8, 0x63, 0x5b, 0x75, 0x16, 0x9a, 0x4a, 0x36, 0x6e, 0xfd, 0x1b, 0x12, 0x28, 0x2a, 0xc7, 0xb6, 0x89, 0x5c, 0x6d, 0x4e, 0x5f, 0x3d, 0xdf, 0xf8, 0xa0, 0xfc, 0x60, 0x79, 0x4e, 0xa0, 0xac, 0x30, 0x9d, 0x9c, 0x39, 0x48, 0x58, 0xa3, 0xbd, 0x31, 0x81, 0xbd, 0xf0, 0x50, 0x38, 0x9b, 0x93, 0xf5, 0xdd, 0x27, 0xb1, 0x8e, 0x79, 0x60, 0x25, 0x1b, 0x5a, 0x65, 0x5c, 0xe2, 0xfe, 0xcf, 0x5c, 0x64, 0x33, 0x44, 0x05, 0x8f, 0x7b, 0x4a, 0x97, 0x35, 0xb5, 0x58, 0x75, 0xbd, 0xfa, 0x33, 0x29, 0x19, 0xc6, 0x78, 0xa7, 0xf8, 0x58, 0x74, 0xd6, 0x3c, 0x5b, 0x3c, 0x4c, 0xae, 0xc5, 0xfa, 0x59, 0xf0, 0x00, 0x86, 0x48, 0xb4, 0x48, 0x36, 0xe1, 0x2c, 0x54, 0xf6, 0x33, 0xc1, 0x38, 0x9b, 0x90, 0x08, 0x8a, 0x74, 0xd8, 0xf2, 0xc3, 0x22, 0xfb, 0x43, 0xe9, 0xaa, 0xb9, 0x45, 0x6b, 0xc9, 0xac, 0xbd, 0x4d, 0x88, 0x89, 0x1e, 0x84, 0x0f, 0xa3, 0xfd, 0xa4, 0xbe, 0xb0, 0xc5, 0xb8, 0x7a, 0xd0, 0xac, 0x71, 0x45, 0xcb, 0xe5, 0x84, 0x12, 0x9a, 0x17, 0x4d, 0xd7, 0x2a, 0x0f, 0xb8, 0xe3, 0x5c, 0xb2, 0x61, 0x72, 0x50, 0x35, 0xfa, 0x7f, 0xe3, 0x90, 0xee, 0xd9, 0x76, 0x2f, 0x43, 0x79, 0xf2, 0xeb, 0xc5, 0x13, 0x08, 0x3a, 0x61, 0xeb, 0xbe, 0xa2, 0xcf, 0xea, 0x27, 0x74, 0x74, 0xf1, 0x71, 0xb6, 0x86, 0x6d, 0x26, 0x61, 0x71, 0x2c, 0xab, 0xcd, 0x79, 0x6f, 0x0d, 0x69, 0xa1, 0x40, 0xfc, 0xaf, 0xcc, 0x05, 0x18, 0x57, 0x23, 0x56, 0x6c, 0xcb, 0xb6, 0x0c, 0x38, 0xdc, 0x66, 0x9a, 0xf4, 0xb3, 0x02, 0xa1, 0x91, 0x0a, 0xb0, 0xbe, 0x02, 0x9c, 0x8f, 0xa7, 0xfb, 0xd9, 0x9a, 0x76, 0xf9, 0xdf, 0xd0, 0x44, 0x82, 0xa6, 0x92, 0xfa, 0xae, 0x7a ],
- const [ 0x10, 0x93, 0x17, 0x55, 0x6c, 0x21, 0xc9, 0x69, 0xed, 0xa6, 0x5a, 0x94, 0x17, 0x6d, 0x7a, 0x11, 0x46, 0x2c, 0x9a, 0xe1, 0x8a, 0x86, 0x5b, 0x6d, 0xb4, 0xd4, 0x46, 0x6e, 0xb1, 0x25, 0xbd, 0x0a, 0x17, 0x83, 0x31, 0x3f, 0xfe, 0x79, 0x96, 0x85, 0x11, 0xd2, 0x14, 0xaf, 0xe5, 0xa2, 0x00, 0x13, 0x89, 0x8b, 0x0a, 0xea, 0x5e, 0x39, 0xb8, 0xfa, 0x28, 0x2f, 0x13, 0x72, 0x66, 0xc6, 0xa0, 0x15, 0xdf, 0x72, 0x91, 0x9a, 0x7e, 0x48, 0x3d, 0x53, 0x5f, 0xbd, 0xce, 0x0e, 0x2a, 0xb1, 0x39, 0x39, 0xa0, 0xac, 0x74, 0x49, 0x73, 0x67, 0xe3, 0x5c, 0x5b, 0x8e, 0x13, 0x1c, 0x66, 0xc4, 0xaa, 0xe7, 0x90, 0xe8, 0x9e, 0x2e, 0x93, 0x96, 0xa6, 0x1b, 0x00, 0xf1, 0xee, 0x77, 0x8f, 0xa0, 0x0f, 0xca, 0xb3, 0x17, 0x3e, 0xc4, 0x72, 0x18, 0xc3, 0xdb, 0x74, 0x79, 0xae, 0x36, 0x5a, 0x27, 0xc5, 0xca, 0x51, 0x6b, 0xc0, 0xc3, 0xe6, 0x6c, 0xb9, 0x25, 0x1c, 0xf6, 0xde, 0xb3, 0xbb, 0x79, 0x69, 0x10, 0xec, 0x55, 0xd2, 0x24, 0x03, 0x54, 0x42, 0xc1, 0x9c, 0x78, 0x4c, 0x86, 0xe9, 0xf8, 0xd8, 0x04, 0x4a, 0x85, 0x5f, 0x20, 0x1e, 0xd1, 0x5e, 0xb8, 0xda, 0x52, 0x04, 0x8a, 0x58, 0x44, 0x2e, 0x51, 0x71, 0xed, 0x96, 0x30, 0xcd, 0x24, 0x47, 0x54, 0xfa, 0x14, 0x55, 0xd6, 0xbc, 0x3e, 0xca, 0xde, 0xa4, 0xbd, 0xe3, 0x0e, 0xe4, 0xce, 0x7d, 0x1e, 0x62, 0x8f, 0xca, 0xc3, 0x0b, 0x07, 0x48, 0xd6, 0x6a, 0x67, 0xf4, 0xb2, 0x79, 0x8f, 0xbb, 0xde, 0xb7, 0xd4, 0x31, 0xec, 0x7a, 0x01, 0x85, 0xa0, 0x87, 0x9b, 0xb5, 0x55, 0xe0, 0x6a, 0xfe, 0x9d, 0xdd, 0x34, 0x97, 0x28, 0x7e, 0xcc, 0x9e, 0xe7, 0x00, 0x4c, 0x53, 0x70, 0xae, 0x9e, 0x84, 0xa5, 0xfa, 0x41, 0x48, 0x90, 0xcc, 0x49, 0xf0, 0x92, 0x1a, 0xa8, 0x3b, 0xbd, 0xb9, 0xad, 0xc9, 0x7e, 0x73, 0xca, 0xd2, 0x7f, 0x59, 0x9a, 0x18, 0xcb, 0x5a, 0x22, 0x1a, 0x34, 0x15, 0x58, 0x8b, 0xf2, 0xec, 0xe1, 0x02, 0x8c, 0x5a, 0x1f, 0xf3, 0xfc, 0x86, 0x6b, 0xde, 0x0e, 0x18, 0x9f, 0xc6, 0x09, 0x4b, 0xd8, 0xe5, 0x91, 0x43, 0x7a, 0x9e, 0xcc, 0xa2, 0x74, 0xb3, 0xc4, 0x56, 0xc5, 0xb8, 0x0c, 0xb4, 0x3f, 0xc8, 0xa7, 0xcb, 0x8a, 0x76, 0x25, 0xf2, 0x6d, 0x06, 0x0f, 0xa4, 0x49, 0xde, 0x85, 0x8e, 0xe6, 0x37, 0x26, 0xe5, 0x72, 0x18, 0x30, 0xfd, 0xc7, 0x85, 0xe8, 0x18, 0xed, 0xf4, 0x3d, 0x7c, 0xe0, 0x00, 0xa8, 0xc8, 0x93, 0x61, 0x56, 0x87, 0x34, 0x1c, 0x89, 0x06, 0xb2, 0xf7, 0x3c, 0x63, 0x7d, 0x30, 0x06, 0xe7, 0x8d, 0x6e, 0x40, 0x95, 0xa5, 0xf8, 0x6a, 0x03, 0xd9, 0x25, 0xcb, 0x69, 0x4e, 0x14, 0x58, 0xf8, 0x41, 0x9c, 0xd7, 0x6d, 0x4a, 0x86, 0x44, 0xe5, 0xe2, 0xfa, 0x74, 0xf3, 0x24, 0x38, 0xf8, 0xf0, 0xd0, 0x89, 0x44, 0x92, 0x95, 0x74, 0x11, 0xc0, 0x90, 0x34, 0xff, 0xa5, 0x10, 0x6a, 0x7f, 0x04, 0x9c, 0x10, 0xf0, 0xcb, 0x37, 0xae, 0x08, 0xea, 0xe2, 0xd0, 0x76, 0x65, 0x63, 0xb7, 0xc5, 0xa8, 0x45, 0x4f, 0x84, 0x1c, 0x20, 0x61, 0xa4, 0xf7, 0x1a, 0x0a, 0x21, 0x58, 0xae, 0x6c, 0xe5, 0x93, 0xac, 0xa3, 0xe9, 0xc9, 0x81, 0xfa, 0x9d, 0xbd, 0xb9, 0x5f, 0x8a, 0xe2, 0xc2, 0x15, 0x35, 0xb9, 0xf3, 0xa9, 0x47, 0x59, 0xcc, 0x27, 0xec, 0x4f, 0x80, 0x8d, 0x79, 0xa9, 0xb0, 0x80, 0x51, 0x4e, 0x7a, 0x3e, 0x09, 0x91, 0xb2, 0xd4, 0xca, 0x05, 0x6f, 0x91, 0xf7, 0x92, 0xca, 0xba, 0x10, 0xc8, 0xe2, 0x7f, 0xd7, 0x74, 0x24, 0x2e, 0xb1, 0x71, 0xc9, 0xa7, 0x4e, 0xc1, 0x9f, 0x10, 0x8c, 0xdc, 0x0d, 0xca, 0x99, 0x48, 0x51, 0xa3, 0x58, 0x6a, 0x0d, 0x4d, 0x07, 0x9c, 0x02, 0x0f, 0x1e, 0x80, 0x1b, 0xba, 0x7a, 0x93, 0xad, 0xdf, 0xba, 0x05, 0xfd, 0x3f, 0xea, 0xc8, 0x03, 0x83, 0x5f, 0xe7, 0x6d, 0x2d, 0xe1, 0x19, 0xe7, 0xcf, 0x10, 0x96, 0x9a, 0x7a, 0x00, 0x29, 0xf2, 0x7a, 0x27, 0x86, 0xa5, 0x40, 0x79, 0xdf, 0xf1, 0xa0, 0xd1, 0xb2, 0x25, 0x3d, 0x93, 0xe5, 0x62, 0x41, 0x8f, 0x14, 0xa3, 0x51, 0x29, 0x2a, 0xfb, 0xc0, 0xb7, 0x2e, 0x1e, 0x02, 0x2b, 0x60, 0x23, 0x64, 0xf2, 0x85, 0x88, 0xfb, 0x1c, 0x7f, 0x77, 0xda, 0xbc, 0x20, 0x47, 0x88, 0x92, 0x40, 0x46, 0xb2, 0xe7, 0x0d, 0xb6, 0x1c, 0xb9, 0xa3, 0x15, 0xdd, 0x18, 0xdd, 0xa2, 0xcc, 0xd0, 0x6a, 0x1c, 0x36, 0x48, 0x23, 0xcd, 0xd2, 0xaa, 0x9b, 0xc7, 0xf6, 0x44, 0xf8, 0x6e, 0x0a, 0x2f, 0x02, 0x36, 0x3e, 0x2e, 0x7a, 0xae, 0x78, 0xd8, 0xad, 0xbe, 0x90, 0xfa, 0x49, 0x2c, 0xc0, 0x37, 0x6e, 0x65, 0x56, 0xf1, 0x08, 0x7b, 0xac, 0x6d, 0x5d, 0x6a, 0x5a, 0x31, 0xe2, 0x9f, 0xaa, 0xb1, 0x53, 0xbb, 0x4d, 0x2b, 0x02, 0x94, 0x4c, 0xd0, 0x70, 0x7c, 0x41, 0x24, 0x1a, 0xc7, 0xc6, 0xa7, 0x95, 0x87, 0x2e, 0xb5, 0xdd, 0x9a, 0x73, 0xab, 0xeb, 0xe7, 0x70, 0x4b, 0x85, 0xe4, 0x50, 0x62, 0x5a, 0x5c, 0x47, 0xa7, 0x4e, 0x6f, 0x80, 0xe7, 0x13, 0xda, 0x56, 0x5f, 0xf9, 0x78, 0xc6, 0x6a, 0x07, 0x09, 0x24, 0x5c, 0x4a, 0x33, 0x0e, 0xad, 0x6d, 0xc6, 0x9f, 0x5a, 0x8a, 0x44, 0xe4, 0x88, 0x40, 0xa1, 0x94, 0x6a, 0x06, 0x47, 0xfb, 0x66, 0xbe, 0x5d, 0x38, 0x73, 0x8e, 0x49, 0xa8, 0xc6, 0xeb, 0x73, 0xa2, 0xad, 0xf6, 0x4c, 0x65, 0xbb, 0x0c, 0x90, 0x4e, 0x25, 0x98, 0xc8, 0x4f, 0x6c, 0x2c, 0x12, 0x9c, 0x3c, 0xd1, 0x24, 0xa7, 0x95, 0x9b, 0x8f, 0x4f, 0x28, 0x80, 0x41, 0x54, 0x04, 0x69, 0x4e, 0x0f, 0x71, 0x8a, 0xf0, 0x60, 0x1c, 0xef, 0xcc, 0xe7, 0x75, 0x58, 0x76, 0x77, 0x56, 0x47, 0x38, 0xc7, 0xe5, 0x57, 0x0f, 0x6b, 0xbb, 0xcf, 0xf7, 0x03, 0x46, 0x77, 0x68, 0xb3, 0x6b, 0xab, 0x21, 0xd3, 0x70, 0xad, 0x24, 0xe7, 0x1a, 0x40, 0x02, 0xd1, 0x12, 0x72, 0x58, 0x45, 0x8d, 0xb9, 0x9a, 0x7e, 0x2c, 0x41, 0x0f, 0x2f, 0x21, 0x85, 0x1d, 0xbd, 0x94, 0x1d, 0xc7, 0xab, 0x45, 0xd6, 0x74, 0x56, 0x72, 0x08, 0xf2, 0xe2, 0xfb, 0x24, 0xba, 0x74, 0xc4, 0x8d, 0x76, 0xa1, 0x5b, 0xa9, 0xc0, 0x27, 0xdb, 0x37, 0x2d, 0xdb, 0x10, 0xe3, 0x8a, 0xe3, 0xdb, 0x17, 0x65, 0x25, 0xd8, 0x15, 0xd0, 0xff, 0x3f, 0x43, 0x61, 0x39, 0x08, 0xc5, 0x7d, 0x38, 0x53, 0x51, 0xd6, 0x74, 0x06, 0x3f, 0x33, 0x2c, 0xb8, 0xe0, 0x70, 0x58, 0xce, 0x11, 0xc5, 0xdf, 0xe3, 0x10, 0x4b, 0x0a, 0x6e, 0x8e, 0xbb, 0x38, 0x9e, 0x05, 0x79, 0xd4, 0x89, 0x4b, 0xd2, 0x85, 0x86, 0x68, 0x82, 0xa4, 0xd7, 0xa5, 0x7a, 0xf3, 0x8c, 0xe5, 0xe0, 0x8c, 0xa3, 0x38, 0x56, 0x17, 0x74, 0xae, 0x7f, 0x40, 0x4d, 0x69, 0xbf, 0x69, 0x59, 0xf6, 0x43, 0x9b, 0xc6, 0xde, 0x42, 0xc3, 0x26, 0x77, 0x82, 0x1b, 0x16, 0x00, 0x1d, 0xe6, 0x1e, 0xed, 0x85, 0x60, 0xd9, 0x80, 0xc6, 0xf5, 0x56, 0x99, 0x0b, 0xb1, 0xbd, 0xcf, 0x64, 0xf8, 0x36, 0xbf, 0xc6, 0x77, 0x06, 0xa4, 0x54, 0x5a, 0xfb, 0x29, 0xdc, 0xbf, 0x0b, 0x7b, 0xa5, 0x6b, 0x38, 0xa1, 0x68, 0xbc, 0xb7, 0x10, 0x9c, 0xdf, 0x50, 0x7a, 0xf6, 0x43, 0x08, 0xe8, 0x31, 0x4e, 0xfe, 0x08, 0x0b, 0x4e, 0x93, 0xc8, 0x90, 0xb2, 0xcd, 0x23, 0x9a, 0x7a, 0xfe, 0x3b, 0x99, 0xec, 0xa0, 0xa9, 0x90, 0x89, 0x84, 0x11, 0x60, 0x3f, 0x2c, 0xf9, 0x49, 0xe0, 0x75, 0xdb, 0xae, 0xd3, 0x78, 0x78, 0x18, 0x0a, 0xb3, 0x70, 0x7e, 0x33, 0x64, 0x10, 0xc4, 0x33, 0x36, 0x6b, 0x81, 0xd0, 0x1f, 0xac, 0x05, 0xad, 0x89, 0xaa, 0x9b, 0x7c, 0xb0, 0xbd, 0x0b, 0x6f, 0x4b, 0xd1, 0x63, 0xef, 0x6e, 0xb8, 0xf7, 0x91, 0xaf, 0xc5, 0xa7, 0x46, 0x88, 0x96, 0x60, 0xd2, 0xfc, 0x31, 0xe6, 0x7f, 0x7d, 0x53, 0xd0, 0x12, 0x0e, 0x04, 0xd4, 0xfe, 0xa5, 0x6f, 0x44, 0xd8, 0xd3, 0xf1, 0xd9, 0x0b, 0xa6, 0x70, 0xb0, 0xcd, 0xcf, 0xee, 0x92, 0x51, 0x00, 0x5d, 0x78, 0x3e, 0x98, 0xb5, 0x4e, 0x61, 0x82, 0x45, 0xf8, 0x9e, 0x5a, 0x46, 0x93, 0x2d, 0xd2, 0xb6, 0xfd, 0x03, 0x55, 0x64, 0x97, 0x8d, 0xea, 0x47, 0x49, 0xa4, 0x5a, 0x13, 0xc7, 0xbe, 0x95, 0x0e, 0x13, 0x61, 0x52, 0x20, 0x44, 0xde, 0xf6, 0x2a, 0x85, 0x3b, 0xb7, 0x99, 0x60, 0x71, 0x01, 0x3b, 0x3d, 0xd8, 0x18, 0x51, 0x25, 0xdf, 0x00, 0xe5, 0xcc, 0x00, 0x9a, 0x5e, 0xcf, 0xf3, 0x0f, 0x51, 0x3a, 0x22, 0x71, 0x9a, 0x4d, 0x5e, 0xa0, 0xac, 0x80, 0xd0, 0x6b, 0x25, 0xc4, 0x32, 0xf8, 0xa6, 0x0c, 0x3f, 0x66, 0xe1, 0x0c, 0x67, 0xb0, 0xf3, 0x40, 0xc8, 0xd5, 0xf5, 0x31, 0x5a, 0x36, 0xcd, 0xf4, 0x69, 0x3f, 0x4a, 0xf3, 0x49, 0x49, 0x71, 0xf0, 0x45, 0xbf, 0x11, 0x46, 0xd8, 0x80, 0x9e, 0x72, 0x20, 0x85, 0x3b, 0xd3, 0x8f, 0xc4, 0x19, 0xae, 0xe4, 0x54, 0x00, 0x75, 0x59, 0xd1, 0x2b, 0x49, 0x1e, 0x02, 0x59, 0xbd, 0x07, 0xb9, 0x21, 0xdd, 0x82, 0xfb, 0x86, 0x6f, 0xcb, 0x61, 0xcb, 0x78, 0x63, 0xbe, 0x89, 0x02, 0xbe, 0x02, 0xfe, 0x1d, 0x3b, 0x5f, 0xa8, 0x24, 0x5a, 0xaa, 0x12, 0x41, 0x2a, 0x03, 0xef, 0x33, 0x00, 0xb8, 0x65, 0x4f, 0x6e, 0x67, 0xab, 0xc5, 0x73, 0x63, 0xd6, 0x25, 0xf0, 0x59, 0xf0, 0x22, 0x5b, 0x34, 0x4b, 0x95, 0xb7, 0x3d, 0x14, 0xc5, 0xc4, 0x87, 0x2b, 0xe5, 0x73, 0x8a, 0x32, 0xde, 0x9c, 0x0e, 0xe5, 0x4f, 0xf3, 0x4b, 0xa9, 0xd2, 0x39, 0x4e, 0x67, 0x82, 0xaf, 0x9e, 0x9a, 0xba, 0xd0, 0x20, 0xa7, 0x1f, 0x3f, 0x38, 0x6e, 0xe0, 0xff, 0x31, 0x1e, 0x3c, 0xe2, 0xdf, 0x4d, 0x45, 0x44, 0x82, 0x48, 0xe4, 0xf8, 0xee, 0xa7, 0x1e, 0x83, 0xe9, 0x25, 0x95, 0x88, 0xd5, 0xaf, 0x52, 0x84, 0x8f, 0xbb, 0xc1, 0xbc, 0x96, 0xdb, 0xfd, 0x73, 0x70, 0x92, 0x4e, 0x5f, 0x49, 0x66, 0xf1, 0x5e, 0xde, 0x36, 0x17, 0x66, 0x99, 0xce, 0x2f, 0xba, 0xfd, 0xb9, 0x68, 0x64, 0x45, 0x56, 0x72, 0xdf, 0x48, 0x2f, 0x85, 0x14, 0xa0, 0x85, 0xa5, 0x88, 0x0b, 0x30, 0x24, 0xd3, 0x11, 0xa6, 0x68, 0x54, 0xe8, 0x59, 0xef, 0x23, 0x94, 0x46, 0x8f, 0x47, 0x52, 0xca, 0x03, 0x29, 0x37, 0xb8, 0xa3, 0x49, 0x15, 0xaa, 0x73, 0x30, 0x9e, 0x94, 0x5f, 0xa6, 0xcc, 0x9f, 0xc5, 0x24, 0x80, 0x34, 0x34, 0x8c, 0x69, 0x56, 0x74, 0x18, 0x27, 0x36, 0xc6, 0x90, 0xb0, 0x01, 0x6c, 0xc1, 0xf3, 0xfd, 0x6c, 0x2a, 0xbc, 0xd4, 0x92, 0xf8, 0xd8, 0x30, 0xb4, 0x35, 0x79, 0x87, 0x39, 0x3c, 0xdc, 0x39, 0xdc, 0x70, 0x28, 0xd8, 0xae, 0x2d, 0x9a, 0xc6, 0x5a, 0xff, 0xdf, 0x06, 0xad, 0x12, 0xc1, 0x4c, 0x56, 0xea, 0x06, 0x56, 0xea, 0x54, 0x95, 0x7f, 0x2b, 0x9d, 0xdb, 0x92, 0x89, 0x01, 0x6d, 0xdc, 0xe9, 0x66, 0xef, 0x85, 0xa6, 0x4b, 0x34, 0x20, 0xd5, 0xfb, 0xa6, 0x80, 0xce, 0x06, 0xe9, 0xcd, 0xe8, 0xf1, 0xbb, 0xd8, 0x83, 0x2d, 0x1f, 0xac, 0x4c, 0x46, 0xba, 0x66, 0xbc, 0x5d, 0x7d, 0x46, 0xe2, 0xd8, 0x84, 0x05, 0x63, 0x58, 0x3e, 0x69, 0xbf, 0xeb, 0xcf, 0x18, 0xd5, 0x84, 0xb2, 0xaa, 0xaa, 0xa8, 0xa3, 0x01, 0x66, 0x69, 0xbc, 0xdd, 0x9f, 0x98, 0xde, 0xab, 0xda, 0x37, 0x52, 0x9e, 0x4f, 0x2d, 0xb0, 0x01, 0xed, 0x3d, 0x00, 0xcc, 0x9e, 0x39, 0x20, 0x75, 0xcc, 0x73, 0x66, 0x08, 0x24, 0x75, 0x85, 0x7a, 0x9a, 0xf2, 0xb5, 0x3b, 0xad, 0xfc, 0x0e, 0x0a, 0xec, 0x76, 0x35, 0x0d, 0xb9, 0xcd, 0x3b, 0x21, 0x4d, 0xe3, 0xc2, 0x6f, 0xfc, 0x4c, 0x62, 0x40, 0xba, 0xbd, 0x4b, 0x12, 0xdf, 0xc1, 0x2b, 0xea, 0x27, 0xae, 0x52, 0xed, 0xfd, 0xd8, 0x14, 0x2a, 0xf9, 0x04, 0x6e, 0xbb, 0xa7, 0x20, 0xed, 0x0c, 0x8a, 0x31, 0xcc, 0x7a, 0x60, 0x8c, 0x5c, 0x20, 0xa8, 0x49, 0xa9, 0xed, 0x62, 0xf5, 0x5b, 0xfa, 0x16, 0x87, 0xda, 0x1b, 0x17, 0x95, 0xb6, 0xb5, 0x09, 0xc8, 0x45, 0xcf, 0xa1, 0x8e, 0x8e, 0x6b, 0xac, 0x0e, 0x65, 0x16, 0x53, 0x61, 0xd8, 0xbe, 0x9d, 0xff, 0xca, 0xc4, 0x35, 0x77, 0xde, 0x52, 0x6e, 0x64, 0x97, 0xef, 0x84, 0x9c, 0xbd, 0x50, 0x25, 0xaa, 0x02, 0x71, 0x2f, 0x7f, 0xe5, 0xe5, 0xbc, 0x64, 0xd7, 0x6b, 0x5c, 0x33, 0x9c, 0xc1, 0xa1, 0xc7, 0xf5, 0xbd, 0xe1, 0xb1, 0x7c, 0x99, 0x37, 0x2c, 0xcf, 0x8f, 0xcb, 0x54, 0xf0, 0xa5, 0x53, 0x92, 0xec, 0xcb, 0xda, 0x5b, 0xbb, 0x23, 0xc0, 0x1a, 0x68, 0xa0, 0x03, 0x6a, 0x72, 0xd2, 0xbc, 0x89, 0x71, 0x00, 0xed, 0x09, 0xfc, 0x78, 0x79, 0xc9, 0xcb, 0x23, 0x74, 0x24, 0x19, 0x5c, 0x9d, 0x68, 0x4c, 0x02, 0x29, 0x8a, 0xd8, 0xcc, 0xc3, 0x18, 0x61, 0xdd, 0xd0, 0x6e, 0x20, 0x99, 0xf7, 0x2d, 0x87, 0xb6, 0xe1, 0xe9, 0x28, 0x96, 0x3d, 0x22, 0xd3, 0xd4, 0x08, 0x76, 0xfe, 0x1d, 0x0b, 0x14, 0x6a, 0x41, 0xa5, 0x74, 0x04, 0x89, 0xca, 0x46, 0x0a, 0x4c, 0x4c, 0xa8, 0x6e, 0xbd, 0x59, 0x9b, 0x7f, 0x07, 0x46, 0xb8, 0xc6, 0x9c, 0x8a, 0x1f, 0x2e, 0xc9, 0x0e, 0xb1, 0x69, 0x8f, 0xa4, 0x7f, 0x8e, 0xae, 0xd4, 0x81, 0x07, 0x02, 0xdf, 0x8c, 0xaa, 0x12, 0xfe, 0x7e, 0x26, 0xe7, 0xeb, 0xbc, 0xa1, 0x1a, 0xa2, 0xde, 0x9f, 0x31, 0x69, 0xa8, 0x26, 0x2c, 0x0e, 0x3c, 0x20, 0x5a, 0x70, 0x8f, 0x00, 0x71, 0x40, 0x1a, 0xa8, 0xde, 0x09, 0xd2, 0x8a, 0x5a, 0x6e, 0x59, 0x0e, 0xbe, 0xb4, 0x76, 0x34, 0x18, 0x80, 0xc3, 0x7b, 0xfe, 0xe1, 0xa5, 0x01, 0x22, 0x90, 0x81, 0xeb, 0x27, 0x77, 0x2d, 0x07, 0xb3, 0x71, 0xa5, 0xb0, 0xc6, 0x51, 0x00, 0xf3, 0x4a, 0x25, 0xa2, 0xf0, 0xeb, 0xbc, 0xb2, 0x82, 0x28, 0x65, 0xcf, 0x22, 0xaa, 0xfa, 0xfe, 0x08, 0xd5, 0x1d, 0xe7, 0x94, 0x9e, 0xc2, 0x42, 0xed, 0x9c, 0xee, 0x8c, 0xe8, 0x61, 0xbd, 0xfe, 0x2b, 0x0a, 0xaa, 0xbf, 0x92, 0x15, 0x0b, 0x59, 0xd1, 0x73, 0xdb, 0x6a, 0x5b, 0xde, 0xbc, 0x9c, 0x83, 0x6d, 0x3c, 0xd6, 0xe1, 0x66, 0x58, 0xb4, 0xf8, 0x53, 0x3f, 0x35, 0x15, 0x58, 0x58, 0xb4, 0x7a, 0xc3, 0x85, 0x1a, 0xbc, 0xe5, 0xaa, 0x51, 0x6a, 0x21, 0x69, 0xfc, 0xef, 0x42, 0x30, 0x65, 0xba, 0x11, 0x76, 0xb6, 0x9c, 0x28, 0x41, 0x6d, 0x71, 0x01, 0xec, 0x0a, 0x02, 0x52, 0x27, 0x0a, 0x2a, 0x9d, 0x3f, 0x19, 0x38, 0x02, 0xa0, 0x84, 0x95, 0x59, 0x98, 0xed, 0xa7, 0x7d, 0x5d, 0x42, 0xf4, 0xea, 0x52, 0xf0, 0x8b, 0x8b, 0x86, 0x53, 0xa0, 0xcd, 0x7d, 0x71, 0x76, 0xf8, 0x34, 0xe9, 0x82, 0xbf, 0x5f, 0x26, 0xcd, 0x16, 0xf5, 0xd8, 0x9a, 0x43, 0xee, 0xa5, 0x49, 0x38, 0x4c, 0x1b, 0x7b, 0x20, 0x58, 0xea, 0x77, 0x38, 0x2e, 0x50, 0xcc, 0xe0, 0x7b, 0xd4, 0x38, 0xf2, 0x86, 0x37, 0xc9, 0x52, 0x6d, 0xa8, 0x42, 0xc6, 0xb1, 0x37, 0xc0, 0x08, 0xf5, 0x8c, 0x9d, 0x1a, 0x03, 0xd9, 0x95, 0xda, 0x10, 0x0d, 0x27, 0xd6, 0x41, 0x4b, 0x3e, 0x61, 0x6e, 0x9a, 0x11, 0xe7, 0x25, 0xde, 0x48, 0x7d, 0xf2, 0x07, 0x60, 0xbc, 0xdd, 0x88, 0x50, 0xd0, 0x35, 0x0a, 0x6d, 0xcc, 0x8c, 0x62, 0x8b, 0x40, 0x03, 0xc1, 0x65, 0x0e, 0xc8, 0x2b, 0x3f, 0x79, 0xdc, 0x2b, 0xc9, 0x7f, 0x1a, 0xc4, 0x47, 0x69, 0x75, 0xaa, 0xef, 0xa0, 0x81, 0xb3, 0x92, 0xc2, 0x35, 0x88, 0x7f, 0xf5, 0xef, 0xa0, 0xa5, 0x7c, 0xb8, 0x6f, 0xf7, 0x88, 0xc9, 0xda, 0x15, 0x50, 0x4f, 0xef, 0x28, 0x63, 0x6c, 0xd3, 0x0d, 0x3d, 0x7e, 0xfb, 0xb7, 0x19, 0xa3, 0x9f, 0xce, 0x07, 0x7d, 0x6c, 0x9c, 0x3e, 0x32, 0x7a, 0x2a, 0xb3, 0xb7, 0x7d, 0xa6, 0xeb, 0x4f, 0x3f, 0x08, 0x0d, 0x4e, 0x4e, 0xf6, 0x3b, 0x23, 0xf1, 0xe4, 0x22, 0x95, 0x61, 0x7f, 0xd0, 0x4d, 0x36, 0x4c, 0xc6, 0x95, 0x20, 0x8c, 0x4f, 0x5f, 0xd7, 0x64, 0x10, 0x89, 0x55, 0x3a, 0xdf, 0x5f, 0x42, 0x62, 0xd9, 0x62, 0xb0, 0xfa, 0xae, 0x48, 0x08, 0x12, 0x40, 0x43, 0x44, 0x11, 0x6d, 0x86, 0x5f, 0x53, 0x28, 0x06, 0x0a, 0x17, 0xcf, 0x7d, 0xa1, 0x99, 0xb8, 0xb5, 0x5d, 0x7b, 0x0e, 0x03, 0xcb, 0x69, 0xdb, 0x11, 0x7d, 0xfd, 0x65, 0xe1, 0xff, 0xe0, 0xbe, 0x0f, 0x0c, 0x33, 0x97, 0x57, 0x02, 0x2d, 0x55, 0x56, 0x94, 0x05, 0x67, 0x95, 0xbf, 0x12, 0xd6, 0xc3, 0xff, 0x31, 0x1d, 0x42, 0xc2, 0x67, 0x3c, 0xe6, 0x1d, 0xc7, 0x08, 0xf9, 0xbe, 0x96, 0xc5, 0x82, 0x22, 0xae, 0xf6, 0xc6, 0x08, 0x20, 0x74, 0x10, 0x25, 0x1d, 0xbe, 0xae, 0x19, 0x17, 0x90, 0x3c, 0xa2, 0x23, 0xb7, 0x25, 0x0f, 0xa2, 0x23, 0x66, 0xf8, 0x20, 0x3e, 0x95, 0x2d, 0x7c, 0x7c, 0x22, 0xec, 0x49, 0x33, 0xde, 0x57, 0x75, 0xae, 0xb9, 0x24, 0x28, 0x7d, 0xd0, 0x97, 0xef, 0x0e, 0xa7, 0xad, 0x1a, 0x82, 0xb2, 0x9b, 0x63, 0xb9, 0x1b, 0x76, 0xd0, 0xaf, 0xbf, 0x34, 0xda, 0x0c, 0x7a, 0xd3, 0xce, 0xf6, 0xa4, 0xd8, 0x74, 0x2a, 0xdb, 0xfb, 0xef, 0x4b, 0x03, 0x21, 0xe4, 0x79, 0x8c, 0x8a, 0xde, 0x26, 0xf3, 0x4c, 0xf1, 0x25, 0x8c, 0x00, 0x9e, 0x04, 0x7e, 0xbb, 0xf7, 0x9c, 0x0f, 0x40, 0x03, 0xe6, 0x22, 0x73, 0x64, 0x11, 0xfd, 0x11, 0x37, 0xd1, 0x50, 0x9f, 0x3c, 0xf9, 0x73, 0xa0, 0x37, 0x4c, 0xf0, 0x0b, 0x96, 0x90, 0x41, 0xfc, 0x53, 0xe5, 0xdb, 0xaa, 0x1c, 0x55, 0x6b, 0x99, 0xb2, 0xac, 0x5f, 0x11, 0x8f, 0x8a, 0xa8, 0xce, 0xcb, 0xb6, 0xbe, 0xf9, 0x40, 0xb5, 0xe5, 0x57, 0xed, 0x9c, 0xb0, 0xc1, 0x98, 0x22, 0xc3, 0xd4, 0xb7, 0xf9, 0xdc, 0xe9, 0x91, 0x5f, 0x15, 0x47, 0xa1, 0xf0, 0x63, 0x98, 0x3b, 0xbe, 0x63, 0x9a, 0x72, 0xa3, 0x56, 0x17, 0x38, 0xd6, 0x69, 0x17, 0xc7, 0xbd, 0x3b, 0x54, 0x40, 0x02, 0x99, 0xee, 0x92, 0xe9, 0x8c, 0x60, 0x9e, 0xe1, 0x95, 0xb3, 0x99, 0x59, 0x37, 0xf2, 0xb1, 0xd4, 0xb6, 0xdd, 0xf3, 0x40, 0x1f, 0xe1, 0x6c, 0x83, 0x88, 0x48, 0x8e, 0x58, 0x99, 0xae, 0xd6, 0x59, 0x4b, 0xb4, 0xac, 0x5c, 0xf0, 0xf8, 0x8b, 0x03, 0x74, 0x44, 0x61, 0x8f, 0xe2, 0x05, 0x39, 0xf5, 0x29, 0xff, 0x17, 0x34, 0x21, 0x40, 0x23, 0xe5, 0xc9, 0x52, 0x0a, 0x14, 0xd3, 0xb5, 0xa2, 0x4e, 0x62, 0x8c, 0xcd, 0xfb, 0x12, 0x97, 0x9f, 0xef, 0x39, 0x61, 0xc3, 0x3b, 0x6c, 0xbb, 0x1a, 0x49, 0x45, 0x68, 0xa6, 0x28, 0x64, 0x1a, 0xa7, 0x24, 0xb4, 0x9e, 0x03, 0x9a, 0xef, 0x53, 0xeb, 0x0a, 0x65, 0xe0, 0xbc, 0x6e, 0xf9, 0x26, 0x23, 0xca, 0x6c, 0x74, 0x85, 0x05, 0xde, 0xfa, 0x9e, 0xf7, 0x91, 0x81, 0x68, 0xc3, 0xf1, 0x59, 0x3e, 0x67, 0xd1, 0x92, 0x41, 0x91, 0xf8, 0x6f, 0xfb, 0xb5, 0xdc, 0x17, 0x42, 0x5c, 0xad, 0x8e, 0x5f, 0xbf, 0x95, 0xe4, 0x70, 0x94, 0x3f, 0xac, 0x0b, 0x28, 0x96, 0xb0, 0x24, 0xae, 0xcf, 0xe3, 0x31, 0xd6, 0xa9, 0x97, 0x8b, 0xa2, 0xf3, 0xf0, 0x18, 0x76, 0x4f, 0x99, 0x27, 0x6e, 0x37, 0xb5, 0x9b, 0xf3, 0x3d, 0x19, 0x4c, 0x91, 0x97, 0xb8, 0xaa, 0x03, 0xda, 0x5e, 0xa4, 0x90, 0x06, 0xa2, 0xc8, 0x9b, 0xc3, 0x16, 0xab, 0x75, 0xea, 0xc0, 0x8b, 0x75, 0x47, 0xce, 0x33, 0x4b, 0x9e, 0x85, 0x1f, 0x91, 0xeb, 0x7b, 0xe1, 0xa3, 0xee, 0x06, 0xc3, 0xb1, 0xe7, 0xf4, 0xae, 0x12, 0x9f, 0x7c, 0x4a, 0xdb, 0xa7, 0x75, 0x67, 0xb1, 0xe4, 0xc6, 0x9c, 0xdb, 0x4c, 0x1e, 0x2d, 0x9b, 0xea, 0xe5, 0x32, 0xbf, 0x28, 0x72, 0xf6, 0x73, 0x4d, 0x7e, 0x9e, 0x59, 0x45, 0xd8, 0x0b, 0xdc, 0xa1, 0x5b, 0x01, 0xc1, 0xde, 0x1e, 0x88, 0xfe, 0xea, 0xea, 0x92, 0xd0, 0xe4, 0xf1, 0xdf, 0x08, 0x23, 0xbc, 0x1e, 0xa5, 0x7b, 0x66, 0x55, 0xa8, 0xbb, 0x08, 0x82, 0x24, 0x7a, 0x74, 0x83, 0x95, 0x14, 0x26, 0x33, 0x72, 0xef, 0x77, 0xd6, 0x06, 0x03, 0x14, 0xb7, 0x7b, 0x99, 0xaf, 0x0f, 0x38, 0x52, 0xf4, 0x29, 0x6d, 0x6c, 0xbf, 0xc4, 0xeb, 0x41, 0x8c, 0xb9, 0x3a, 0x10, 0x2f, 0xdd, 0xe5, 0x00, 0xc5, 0x29, 0x19, 0x62, 0xea, 0x18, 0x6e, 0x37, 0x2c, 0x51, 0x05, 0xf2, 0xc0, 0x86, 0xd3, 0x7f, 0x74, 0x9c, 0x3c, 0x83, 0xe5, 0x0c, 0xe4, 0xe6, 0xf2, 0x89, 0xc2, 0x8f, 0x70, 0xe3, 0x76, 0x6e, 0x1f, 0x2b, 0xdc, 0xc0, 0xdd, 0x18, 0xe1, 0x8e, 0x1a, 0xa9, 0x95, 0x77, 0x8c, 0x0c, 0x82, 0xb0, 0x24, 0xbf, 0x3d, 0x49, 0x40, 0xf5, 0x3a, 0xb2, 0x22, 0x3b, 0xe4, 0x7d, 0xa1, 0x5b, 0xed, 0x65, 0x1e, 0x80, 0xe3, 0x90, 0xba, 0x9c, 0x05, 0x11, 0xc6, 0x07, 0x54, 0xb1, 0x7c, 0x69, 0xed, 0xef, 0xec, 0xd9, 0x95, 0x45, 0x38, 0x46, 0x96, 0xad, 0x04, 0x16, 0xca, 0x64, 0x29, 0x0e, 0xf5, 0xee, 0xa9, 0x72, 0x57, 0x5a, 0xe8, 0x6d, 0x82, 0xc7, 0x19, 0xb2, 0x6a, 0x27, 0xf6, 0x64, 0xbb, 0x43, 0xb4, 0x34, 0x6f, 0x00, 0x36, 0xc9, 0x9f, 0xe0, 0x81, 0x64, 0x99, 0xcb, 0x70, 0xc4, 0x34, 0x10, 0xa8, 0x47, 0x60, 0xa7, 0xcf, 0x53, 0x01, 0xb9, 0xf9, 0xf4, 0xfe, 0x61, 0x63, 0xc6, 0x94, 0xb5, 0x64, 0x16, 0xf1, 0x00, 0xa0, 0x44, 0xfe, 0x52, 0x7f, 0x6b, 0x7c, 0x3b, 0xde, 0x44, 0x52, 0xd3, 0x04, 0x48, 0x25, 0xfd, 0xd7, 0x15, 0x2a, 0xed, 0x4f, 0x13, 0x38, 0xe8, 0x2c, 0x57, 0x22, 0x4b, 0xe4, 0xc8, 0x43, 0xcf, 0xe0, 0x80, 0x5a, 0x0b, 0xe7, 0x75, 0x99, 0x3b, 0xdb, 0x58, 0xf8, 0x3f, 0xa3, 0xbd, 0xcf, 0xe7, 0x68, 0x7d, 0xa4, 0x6d, 0x04, 0x58, 0x41, 0x43, 0xb7, 0xdf, 0x0a, 0x0f, 0x1c, 0x92, 0x8e, 0xf5, 0x5c, 0x45, 0x5c, 0x14, 0xa2, 0xc8, 0x18, 0x53, 0xcf, 0xc6, 0xce, 0x5d, 0x6e, 0xee, 0x85, 0xea, 0xea, 0x51, 0x18, 0x41, 0xfe, 0x0b, 0x41, 0xfa, 0x6e, 0x26, 0xf7, 0x09, 0xf5, 0xbb, 0xfa, 0xf8, 0x7e, 0x5a, 0xac, 0x74, 0x97, 0xac, 0x22, 0x0b, 0x22, 0x57, 0x7b, 0x34, 0x4d, 0x22, 0x70, 0x90, 0xc5, 0x5a, 0x2d, 0x6f, 0x27, 0x74, 0x5f, 0x96, 0xb8, 0xf3, 0x8f, 0x40, 0x55, 0x8d, 0xae, 0x62, 0xad, 0x89, 0xf1, 0x33, 0xad, 0x6b, 0xdf, 0xec, 0x3c, 0xd3, 0xa8, 0xcc, 0x29, 0xa3, 0xb8, 0x60, 0x61, 0x60, 0x8c, 0x01, 0x66, 0xdb, 0xc4, 0x9e, 0xfc, 0x10, 0x7a, 0xbc, 0x26, 0x4e, 0xd3, 0xba, 0x50, 0x98, 0xd3, 0x5a, 0xce, 0x4c, 0x76, 0x7d, 0x85, 0x02, 0xfc, 0x2e, 0xe8, 0xb7, 0x84, 0xe2, 0x27, 0x2b, 0xdc, 0xfe, 0xa2, 0x87, 0x98, 0x9a, 0xa4, 0x43, 0x61, 0x85, 0x4e, 0x47, 0x90, 0x89, 0xd1, 0x50, 0xfc, 0xf0, 0xe1, 0x96, 0x0f, 0x46, 0x66, 0xac, 0x20, 0x61, 0x74, 0xa7, 0xfc, 0x9f, 0x7d, 0x82, 0xc6, 0x6f, 0xc5, 0xc1, 0x02, 0x13, 0x17, 0x55, 0xec, 0xa4, 0xb7, 0xc0, 0x0e, 0x56, 0x97, 0x79, 0x11, 0xfd, 0xcd, 0x92, 0xd4, 0xd0, 0x45, 0x98, 0xbb, 0x6d, 0xb3, 0xbb, 0x4a, 0x1e, 0xcc, 0x2e, 0xf2, 0x5b, 0xb6, 0xd1, 0x2a, 0x90, 0xbd, 0x0e, 0xc2, 0x20, 0x47, 0x00, 0x74, 0xa9, 0x0a, 0xdb, 0xbd, 0x8a, 0x7c, 0x88, 0xeb, 0xa2, 0x8b, 0x8f, 0x76, 0x5b, 0x8f, 0x3a, 0x93, 0xe7, 0x7d, 0xf8, 0x07, 0xca, 0x5d, 0xff, 0x39, 0x99, 0xfe, 0x35, 0x8c, 0x01, 0xe8, 0x51, 0xeb, 0x0a, 0x92, 0x3d, 0xa6, 0x9d, 0xd5, 0xbf, 0x7c, 0x45, 0xa1, 0x59, 0xf9, 0x32, 0xef, 0x6e, 0x02, 0x83, 0xf6, 0xa5, 0xae, 0xc5, 0xa2, 0x93, 0x57, 0xb6, 0x42, 0x94, 0xf1, 0x4f, 0x81, 0xf9, 0x9b, 0x02, 0x97, 0x69, 0x74, 0x41, 0xc0, 0x81, 0xb0, 0x3f, 0xed, 0xbe, 0xeb, 0xfa, 0xba, 0x9d, 0xbc, 0x79, 0xa1, 0x00, 0x8e, 0x52, 0x6d, 0xd4, 0xab, 0x70, 0xf1, 0xf1, 0x9a, 0x13, 0xf9, 0x41, 0xab, 0x18, 0x81, 0x25, 0xd0, 0x7b, 0x25, 0x14, 0xae, 0x1a, 0xd9, 0x86, 0xf4, 0xbc, 0xda, 0x10, 0xec, 0x51, 0xe5, 0xd0, 0x50, 0x7c, 0xa6, 0x0b, 0x5e, 0x4e, 0x73, 0x15, 0x2e, 0x55, 0x3a, 0x71, 0x44, 0xd5, 0xb8, 0x3a, 0x62, 0x55, 0xec, 0xc1, 0x9f, 0x5d, 0xcc, 0x78, 0xbd, 0x7f, 0x36, 0x0f, 0xb8, 0x94, 0x29, 0xdc, 0x9b, 0x48, 0x35, 0x80, 0x97, 0xd9, 0x30, 0xc8, 0x56, 0x1b, 0x2b, 0xd1, 0x8d, 0xc0, 0xa4, 0x70, 0xd1, 0xd6, 0xfe, 0xd0, 0xab, 0x91, 0x2e, 0x5d, 0xee, 0x4b, 0xb6, 0xe1, 0x48, 0xc9, 0xd7, 0xed, 0x18, 0xc0, 0x02, 0x7b, 0x7f, 0x97, 0x91, 0xd1, 0xba, 0x6f, 0xb4, 0xa9, 0xaf, 0x61, 0xae, 0x8e, 0xc5, 0x06, 0x41, 0x89, 0xf9, 0x3d, 0x66, 0xfd, 0x2f, 0x28, 0x42, 0xd0, 0xc5, 0x78, 0x56, 0xcb, 0x6e, 0xeb, 0xf6, 0x44, 0x3e, 0x12, 0xfc, 0xfa, 0x01, 0x58, 0xbd, 0x40, 0xd1, 0x40, 0x3c, 0x5e, 0xe8, 0xee, 0x9e, 0x34, 0xb2, 0xe9, 0xde, 0x20, 0x26, 0x1f, 0xc2, 0x22, 0x57, 0x2a, 0x0e, 0x3e, 0x46, 0xd1, 0xf7, 0x22, 0xfb, 0xd2, 0xda, 0x09, 0xd4, 0xdf, 0x2e, 0xdf, 0x1c, 0xe6, 0xb8, 0xa6, 0xdf, 0x95, 0xfd, 0x18, 0xfd, 0x1e, 0xfd, 0x8e, 0x7e, 0x37, 0x1e, 0x20, 0x25, 0x65, 0x67, 0x0e, 0x48, 0x7b, 0xee, 0x5f, 0xdf, 0x5d, 0x94, 0xc7, 0xda, 0x0a, 0xef, 0xce, 0xb8, 0xda, 0x88, 0x2f, 0x55, 0x04, 0x47, 0x7e, 0x03, 0x62, 0x2b, 0x0e, 0xdd, 0x79, 0x3e, 0x12, 0x58, 0xb4, 0xc9, 0x02, 0x1b, 0xf0, 0xc4, 0x41, 0x11, 0x3d, 0x90, 0xfc, 0xbc, 0xe3, 0xe9, 0x55, 0xcc, 0xa4, 0x16, 0xc1, 0xf0, 0x41, 0x62, 0xae, 0xec, 0x40, 0xd0, 0x6a, 0xec, 0xeb, 0x0b, 0x40, 0x17, 0x9c, 0x9c, 0xe4, 0x68, 0x38, 0x5f, 0x11, 0xb9, 0xfa, 0x38, 0x70, 0x21, 0x72, 0x02, 0xbc, 0x80, 0xcd, 0xc8, 0x24, 0x58, 0x56, 0x38, 0xf0, 0xdf, 0x3d, 0x54, 0x68, 0x52, 0x97, 0x6b, 0xf1, 0x8b, 0xa7, 0x48, 0x7a, 0xd6, 0x5c, 0xa9, 0x16, 0x01, 0x1a, 0xf3, 0xea, 0xb2, 0xbe, 0x23, 0x4a, 0xfd, 0xdc, 0x08, 0x1f, 0x36, 0x4a, 0xb0, 0x8c, 0x04, 0xe3, 0x20, 0xd1, 0xb7, 0x85, 0x47, 0x6f, 0xdc, 0x5c, 0x35, 0x8d, 0x0e, 0x63, 0x89, 0x9a, 0x0f, 0x27, 0x28, 0x34, 0x17, 0xcf, 0x35, 0x48, 0x6b, 0x59, 0x3d, 0x7b, 0x32, 0x26, 0xb1, 0xc9, 0x84, 0xb9, 0x9a, 0x6c, 0xc5, 0xbc, 0x88, 0x00, 0x31, 0x43, 0xcb, 0xe4, 0xb7, 0x55, 0xe6, 0xe3, 0x0b, 0xa9, 0x41, 0x14, 0xf7, 0xad, 0x1e, 0xfe, 0xf2, 0xcc, 0xce, 0x00, 0xf3, 0xf1, 0x25, 0xf1, 0x87, 0x47, 0x2b, 0x03, 0x22, 0x44, 0x14, 0xed, 0xb2, 0xe5, 0x73, 0x49, 0x7a, 0x3b, 0xaa, 0x3a, 0x1e, 0x26, 0xa5, 0x53, 0xfa, 0x61, 0xc8, 0xb4, 0xb8, 0xbe, 0x25, 0x76, 0x22, 0xb3, 0xf3, 0x4a, 0x34, 0x16, 0x3b, 0x5c, 0x76, 0x25, 0xd5, 0x7e, 0x89, 0xc9, 0x93, 0x82, 0xff, 0x1c, 0xbc, 0xe7, 0x70, 0x28, 0xbc, 0xb9, 0xc9, 0xf2, 0x19, 0xb2, 0xe8, 0xb7, 0xa9, 0xa5, 0x66, 0x75, 0x03, 0x1d, 0xb4, 0xad, 0x33, 0x41, 0x6a, 0x67, 0xb2, 0xfa, 0xdb, 0x78, 0x95, 0x58, 0xed, 0x00, 0x04, 0x32, 0x28, 0x36, 0xee, 0x0d, 0x0c, 0x68, 0xfb, 0x3f, 0xa8, 0x3d, 0xc2, 0x55, 0x68, 0x3e, 0x3d, 0xb1, 0x2f, 0x94, 0x79, 0x78, 0xa5, 0x13, 0x92, 0xab, 0xd3, 0x78, 0xdf, 0x93, 0xed, 0xef, 0x6a, 0x63, 0x6e, 0xd9, 0xa3, 0x19, 0x6a, 0xcb, 0x55, 0xa5, 0x20, 0xda, 0xd8, 0x4d, 0xd0, 0x16, 0x89, 0x50, 0xcc, 0x54, 0x77, 0xc9, 0xd0, 0x31, 0x5f, 0xd7, 0x96, 0x53, 0xdb, 0xfb, 0xa6, 0xf2, 0xd6, 0xc1, 0x6c, 0x97, 0x43, 0xa3, 0x8c, 0x24, 0x0e, 0x2a, 0x7a, 0x15, 0x53, 0x56, 0x45, 0x05, 0xcf, 0x40, 0xb3, 0x74, 0x94, 0xfe, 0x93, 0xc7, 0x00, 0xc7, 0x4f, 0x90, 0xef, 0x57, 0xc1, 0x10, 0x30, 0x95, 0x47, 0xfb, 0x36, 0x74, 0x1a, 0x7a, 0x10, 0x17, 0xdb, 0x76, 0x9c, 0x38, 0x6f, 0x14, 0xf7, 0xca, 0x0d, 0x7c, 0x37, 0xdd, 0x95, 0xdf, 0x5d, 0xc3, 0x24, 0xb8, 0x85, 0x71, 0xe5, 0x52, 0x60, 0x27, 0x2a, 0x8a, 0xe4, 0x54, 0xbb, 0xd6, 0x42, 0xb4, 0x6d, 0x86, 0x19, 0xbb, 0xf7, 0x4a, 0xe9, 0x36, 0x02, 0xf5, 0xca, 0x30, 0x7f, 0x80, 0x5e, 0x12, 0x3d, 0x52, 0x04, 0x0f, 0xbb, 0xbe, 0x4e, 0xbf, 0x3b, 0xce, 0xb6, 0x0a, 0x17, 0x3f, 0x8c, 0x48, 0x58, 0xcc, 0x33, 0xa6, 0x85, 0xb0, 0x8d, 0xcc, 0xb9, 0x66, 0xb4, 0xbd, 0xf8, 0xb3, 0xeb, 0xfe, 0xc3, 0xe6, 0xd4, 0xfa, 0xea, 0x5f, 0xe3, 0xa5, 0xa2, 0x4e, 0x12, 0x60, 0xd7, 0xbd, 0xd6, 0x1d, 0xc4, 0xd1, 0x52, 0xc3, 0xc0, 0x4c, 0xcb, 0xd4, 0x5b, 0x57, 0x5d, 0x4d, 0xa9, 0x7f, 0xec, 0xcd, 0xde, 0xfd, 0x5d, 0xfa, 0x1b, 0x3a, 0x05, 0x20, 0x88, 0x92, 0x61, 0x1c, 0xa3, 0x58, 0x08, 0x79, 0xd8, 0x1b, 0xdf, 0xd8, 0x51, 0x28, 0x8c, 0x95, 0x0f, 0x50, 0x2d, 0xa7, 0x3a, 0xec, 0x49, 0xc8, 0xb5, 0x1e, 0x06, 0xd7, 0xf6, 0x59, 0x9d, 0x7a, 0x15, 0x23, 0x0c, 0x07, 0x22, 0x19, 0x0b, 0xa5, 0xbc, 0x34, 0x40, 0xae, 0xdf, 0x4c, 0xb6, 0x58, 0xfe, 0xda, 0x8c, 0x95, 0x52, 0x02, 0xea, 0x37, 0x71, 0xd1, 0x39, 0x58, 0x22, 0xc3, 0x94, 0xf9, 0x70, 0x88, 0x79, 0xe9, 0xfd, 0x07, 0xc5, 0xe9, 0x99, 0xa4, 0xdf, 0x0d, 0x13, 0xbe, 0x33, 0x65, 0x4f, 0x7c, 0xe2, 0xdd, 0x99, 0xca, 0xb7, 0x62, 0x39, 0x9e, 0x5e, 0x46, 0x48, 0x80, 0xd0, 0xe6, 0xc2, 0x49, 0x12, 0x8a, 0xdc, 0x2b, 0x1f, 0x8c, 0x97, 0xf1, 0x23, 0xbd, 0x95, 0x88, 0xe9, 0x04, 0x2b, 0xbf, 0x97, 0x48, 0xb9, 0x4b, 0x99, 0x90, 0x36, 0x0e, 0xdb, 0x69, 0x0f, 0x99, 0x3b, 0x89, 0x32, 0xef, 0x3e, 0xb1, 0x65, 0x8b, 0x01, 0xd8, 0xdd, 0xa5, 0x73, 0x85, 0x0c, 0xb2, 0xc2, 0x7d, 0xba, 0x2a, 0x13, 0x9e, 0x57, 0x8d, 0x76, 0x0b, 0x90, 0xa8, 0x19, 0x89, 0x20, 0x15, 0xbc, 0x29, 0xe9, 0x01, 0x64, 0x28, 0x43, 0x31, 0x54, 0x13, 0x94, 0x47, 0x39, 0x2e, 0x21, 0x42, 0xa5, 0x17, 0x23, 0x45, 0xbe, 0xa7, 0x1e, 0x99, 0x38, 0x19, 0x6e, 0xf4, 0x80, 0x6e, 0x22, 0xfc, 0x3a, 0x0f, 0x0e, 0x07, 0xee, 0xb5, 0x1c, 0x25, 0xfe, 0x86, 0xe3, 0x60, 0xdc, 0x81, 0x7b, 0x42, 0x79, 0x1b, 0x8f, 0x98, 0x01, 0x2a, 0xb3, 0x76, 0xc5, 0x03, 0xf8, 0x7b, 0x79, 0xdf, 0xbe, 0x56, 0x9f, 0x84, 0xca, 0x89, 0x43, 0x21, 0x99, 0x6d, 0xe9, 0x79, 0xf3, 0x77, 0xc4, 0x43, 0xc3, 0xb9, 0x28, 0xd1, 0x25, 0xac, 0x42, 0xf1, 0xc1, 0x2c, 0x07, 0x11, 0x58, 0xc4, 0x6a, 0xa6, 0x9c, 0x2c, 0xd2, 0xce, 0x45, 0x10, 0xcb, 0x33, 0x61, 0x13, 0xfb, 0x33, 0xeb, 0x14, 0x59, 0x3f, 0xa0, 0xb0, 0x99, 0x81, 0x0e, 0x08, 0xea, 0xc2, 0xee, 0xc4, 0xe4, 0x8a, 0xb3, 0x58, 0xbc, 0x89, 0x63, 0x85, 0xbb, 0x35, 0xa6, 0x23, 0xee, 0xb5, 0x1d, 0x1f ],
- const [ 0xf6, 0x0c, 0x89, 0x48, 0x14, 0x88, 0xd6, 0x5c, 0x26, 0xa6, 0xba, 0x36, 0x4c, 0x5d, 0x60, 0x21, 0x34, 0xed, 0x1a, 0xfa, 0xd5, 0xc2, 0xb0, 0x37, 0x60, 0x9b, 0xf8, 0x28, 0x73, 0xeb, 0xa6, 0x7d, 0x90, 0x7f, 0x66, 0x09, 0xcf, 0x62, 0x28, 0xc5, 0xcf, 0xfe, 0xbb, 0x18, 0xf2, 0x83, 0x9e, 0x55, 0xca, 0x8d, 0x13, 0x86, 0xce, 0x01, 0x74, 0x68, 0x52, 0x37, 0xca, 0xb6, 0xb6, 0x5f, 0x9c, 0xaa, 0xdd, 0x1d, 0x05, 0xc2, 0xe0, 0x77, 0x09, 0xc0, 0x04, 0xf1, 0x29, 0xf4, 0xea, 0xf6, 0x35, 0xbd, 0x06, 0x7a, 0x62, 0x4e, 0x52, 0xde, 0x9d, 0xae, 0x44, 0x14, 0x1e, 0x02, 0xfd, 0x03, 0x3f, 0x0f, 0xc3, 0x2d, 0x8f, 0xfb, 0xb1, 0x8f, 0x22, 0x53, 0xad, 0xc8, 0x2c, 0x53, 0x9b, 0x7e, 0xce, 0x61, 0xd0, 0xfe, 0x30, 0xda, 0xca, 0x22, 0xd0, 0x11, 0x1e, 0x78, 0x1a, 0x95, 0xb1, 0xa0, 0x38, 0xb3, 0x2b, 0xf6, 0x2b, 0x3c, 0xa9, 0x72, 0x1b, 0x89, 0xb3, 0xcc, 0xeb, 0xbb, 0x6d, 0xe3, 0x11, 0x47, 0x11, 0x5f, 0xa5, 0xb3, 0x9c, 0x95, 0xb7, 0x9a, 0xc8, 0xac, 0xe6, 0xf6, 0x3b, 0xfe, 0x2e, 0x9f, 0xfe, 0xc1, 0x02, 0x0e, 0x30, 0xe7, 0x9b, 0x67, 0xfc, 0x42, 0x8f, 0xb7, 0xc8, 0xec, 0xa5, 0x79, 0xaf, 0xe6, 0xe8, 0x60, 0x32, 0xff, 0xfa, 0x50, 0x2a, 0xf8, 0xab, 0xad, 0x01, 0xe5, 0xca, 0xd9, 0x22, 0xd6, 0x3c, 0xf8, 0xae, 0xb7, 0x4a, 0xf7, 0x71, 0x75, 0x3f, 0xcc, 0x14, 0x63, 0x33, 0xff, 0x94, 0xdb, 0x22, 0x69, 0xf3, 0x28, 0x41, 0x3c, 0x2d, 0xa3, 0x91, 0x43, 0x6d, 0x1d, 0xb4, 0x6b, 0x81, 0x7d, 0x00, 0x83, 0x8b, 0xaa, 0xd2, 0x40, 0xfa, 0xac, 0x24, 0x84, 0xb9, 0x0e, 0x62, 0xdf, 0xa6, 0x86, 0x7a, 0x57, 0x46, 0xd8, 0x33, 0x64, 0xb7, 0xf7, 0xbf, 0x3f, 0xe6, 0x6d, 0x93, 0x5c, 0x02, 0xfe, 0x76, 0x35, 0x30, 0x88, 0xd8, 0x4a, 0x80, 0x2e, 0x66, 0x66, 0x1f, 0xb5, 0xdb, 0x23, 0xcf, 0x2e, 0x19, 0xb0, 0x95, 0xd6, 0x78, 0xd2, 0xb1, 0x3a, 0x5e, 0x29, 0xd3, 0x9f, 0x10, 0xb5, 0x8c, 0xa0, 0xc7, 0x99, 0x03, 0x19, 0x07, 0x1e, 0xe9, 0x44, 0x2c, 0xfa, 0xaf, 0x22, 0x46, 0xd3, 0xf6, 0x1d, 0x26, 0xff, 0x47, 0xeb, 0xb9, 0x8e, 0x04, 0xb5, 0x95, 0x8a, 0x9e, 0x79, 0xd2, 0x7d, 0x09, 0xad, 0x1b, 0x34, 0x6d, 0x25, 0x04, 0xc3, 0x1f, 0x36, 0x9e, 0xc9, 0xcf, 0x1c, 0x4a, 0xf5, 0x03, 0x99, 0xca, 0xc9, 0xc4, 0xdf, 0x9e, 0x9e, 0x96, 0xb0, 0x8d, 0xe9, 0xae, 0xc4, 0x82, 0xbc, 0x60, 0x6b, 0x99, 0x90, 0xd7, 0x73, 0x7a, 0x41, 0x08, 0x4c, 0xe6, 0x5a, 0xe8, 0x6a, 0x8f, 0x93, 0xdd, 0xeb, 0x2d, 0x98, 0x73, 0x7a, 0xce, 0x0c, 0x51, 0x73, 0x6d, 0xce, 0x6b, 0x47, 0xc7, 0x7b, 0x79, 0x23, 0x6a, 0x34, 0xa7, 0xcc, 0x0f, 0xa1, 0x8e, 0xce, 0x29, 0x35, 0x63, 0xd5, 0xbe, 0xb4, 0x6e, 0x5b, 0x76, 0xf3, 0xbe, 0x83, 0xf2, 0xe0, 0x1c, 0x45, 0x5e, 0xc1, 0x3d, 0xcc, 0x4a, 0xc1, 0x3c, 0x1c, 0xb5, 0xa8, 0x47, 0xf8, 0x6b, 0xea, 0x98, 0x03, 0x92, 0xe3, 0xa6, 0x25, 0x7f, 0x61, 0x9d, 0x30, 0xce, 0x63, 0x0c, 0xc4, 0xb1, 0x20, 0xde, 0x70, 0x88, 0x4b, 0x8c, 0x19, 0xb2, 0x96, 0x91, 0xa0, 0xa3, 0x75, 0x1d, 0xbf, 0x37, 0x24, 0x0d, 0x34, 0x46, 0xeb, 0x1b, 0x22, 0x79, 0xa1, 0x52, 0xb4, 0x5c, 0x6f, 0xc6, 0x03, 0xb4, 0xd6, 0x81, 0x3a, 0x12, 0xf3, 0xc0, 0xf8, 0xa8, 0x02, 0x60, 0xf5, 0x5c, 0x22, 0x93, 0xe9, 0x1b, 0x57, 0xd7, 0xa9, 0x70, 0xd5, 0x29, 0x93, 0x55, 0x7c, 0x75, 0x2d, 0x49, 0x9f, 0x52, 0x09, 0xa2, 0x09, 0xec, 0xec, 0x25, 0x42, 0x41, 0x2e, 0xd4, 0x0e, 0x91, 0x64, 0x07, 0x37, 0x0f, 0x3d, 0xbe, 0x8c, 0xdd, 0xaa, 0x36, 0x2a, 0x37, 0x42, 0xba, 0xfa, 0xef, 0xe4, 0xbc, 0x7b, 0x19, 0x9e, 0x24, 0xc2, 0x07, 0xcd, 0xe8, 0xbf, 0x78, 0x86, 0xdd, 0xc1, 0x0c, 0x35, 0xcd, 0x3c, 0xfb, 0x84, 0xc9, 0xcb, 0x07, 0x7f, 0xc0, 0x71, 0xaf, 0xf5, 0x51, 0x24, 0xa6, 0x21, 0xde, 0x8c, 0x83, 0x89, 0xe2, 0x08, 0xba, 0x27, 0x84, 0xf2, 0xcb, 0xc7, 0x6c, 0x24, 0xb9, 0xb0, 0xd5, 0xba, 0xbe, 0x86, 0xe3, 0x1a, 0x3d, 0x6f, 0x37, 0x32, 0xf8, 0x75, 0xc2, 0x01, 0x83, 0x2c, 0xd6, 0x59, 0xf9, 0x94, 0x83, 0xe3, 0xed, 0x40, 0x20, 0x63, 0xa3, 0xb8, 0x28, 0x3d, 0x80, 0x1d, 0x48, 0x39, 0xc0, 0x0b, 0xb5, 0x83, 0x67, 0xc3, 0xc3, 0xf6, 0x7a, 0x8a, 0xb4, 0x99, 0x6e, 0x4c, 0xcd, 0x6a, 0xe1, 0x85, 0xb0, 0x5b, 0x88, 0x62, 0xe5, 0x9b, 0x69, 0x23, 0xba, 0x16, 0x4a, 0xc3, 0x4d, 0x3f, 0x69, 0xdb, 0xe7, 0x0d, 0x6d, 0xc4, 0x8b, 0x43, 0x9d, 0xfb, 0xcf, 0xf5, 0x50, 0xca, 0xeb, 0x48, 0xa4, 0x25, 0x10, 0x79, 0x73, 0xd3, 0xfb, 0x21, 0x83, 0xce, 0xc9, 0xb7, 0xfd, 0xeb, 0x0d, 0x56, 0x21, 0xbd, 0x20, 0xc0, 0x37, 0xb7, 0xb8, 0xa4, 0xc9, 0x92, 0xbc, 0x1c, 0x0f, 0xee, 0x57, 0x7a, 0xab, 0x3c, 0x4c, 0x44, 0x97, 0xdb, 0x89, 0x7d, 0x5b, 0x81, 0xfe, 0x26, 0x83, 0xdd, 0xaf, 0x05, 0x50, 0x7b, 0x08, 0xa5, 0xae, 0xe7, 0x71, 0x9e, 0x66, 0x15, 0x23, 0x16, 0x95, 0x00, 0x3a, 0x88, 0x5d, 0x92, 0x0b, 0xc5, 0xda, 0xc4, 0xb7, 0x38, 0x57, 0x06, 0x01, 0x6d, 0xc2, 0xe1, 0x5c, 0xd5, 0x5e, 0xdb, 0x48, 0xc3, 0xb8, 0x9b, 0xdf, 0xbb, 0xdc, 0x4d, 0xab, 0xec, 0xc8, 0x48, 0xbb, 0xfb, 0x21, 0xee, 0xf6, 0x02, 0x25, 0xd4, 0xaf, 0xd9, 0xe1, 0x24, 0x79, 0x94, 0xa4, 0x3f, 0x3c, 0x4c, 0xb3, 0xa6, 0x88, 0x23, 0x3e, 0x1a, 0x2a, 0x82, 0x93, 0x02, 0xfd, 0xa5, 0x92, 0x0e, 0x03, 0x5a, 0x61, 0x1a, 0xb4, 0x05, 0x61, 0x55, 0x96, 0xe8, 0x60, 0xa2, 0x0e, 0xa1, 0x10, 0x3e, 0x76, 0xf4, 0xb7, 0xa3, 0x6f, 0xcb, 0x29, 0xad, 0x79, 0x7b, 0xf4, 0xfc, 0xc1, 0x49, 0xda, 0x99, 0x39, 0x2d, 0x84, 0xdc, 0xee, 0xd6, 0x74, 0x8d, 0x97, 0xed, 0x3c, 0x49, 0x69, 0x9e, 0xed, 0x27, 0x33, 0x55, 0xd3, 0x9c, 0xa6, 0xc5, 0x5f, 0x9c, 0xf4, 0x2f, 0x65, 0x02, 0x9e, 0xe1, 0x88, 0x32, 0x86, 0xfd, 0xf2, 0xfd, 0x4c, 0x7b, 0x48, 0xc5, 0xd7, 0x71, 0xdc, 0xe1, 0x32, 0x92, 0x25, 0x42, 0x9a, 0xf5, 0x6d, 0x57, 0xd5, 0x19, 0xca, 0x2f, 0xc5, 0x25, 0x4f, 0xde, 0x3c, 0x74, 0x83, 0x21, 0x12, 0x50, 0x12, 0x45, 0x75, 0xfe, 0xc3, 0x44, 0x81, 0xfc, 0xaa, 0x32, 0x10, 0x86, 0x9f, 0xd7, 0xd4, 0x5e, 0xef, 0x9e, 0xa3, 0xcd, 0x51, 0xae, 0x11, 0xe5, 0x1b, 0x56, 0x44, 0x0a, 0xb5, 0xae, 0x04, 0xb1, 0x4e, 0x7b, 0x12, 0x66, 0xcf, 0x54, 0xbb, 0x14, 0x0d, 0x03, 0xac, 0x81, 0x43, 0x2e, 0x08, 0x18, 0xbf, 0x37, 0xb8, 0xeb, 0xdb, 0x60, 0x03, 0xf8, 0x2f, 0x33, 0x5e, 0xab, 0x05, 0x21, 0x85, 0xa5, 0x0d, 0x69, 0xca, 0xbc, 0x53, 0x3b, 0xad, 0x43, 0x6d, 0x1d, 0xae, 0x8b, 0xf9, 0x8f, 0x5f, 0xa9, 0x47, 0xea, 0xbd, 0x7a, 0x52, 0x8e, 0xc0, 0xe5, 0xf5, 0x3c, 0x31, 0x60, 0x5b, 0xc1, 0xbc, 0xb6, 0xb8, 0xd5, 0x46, 0x07, 0x36, 0x42, 0x81, 0x10, 0x33, 0x49, 0xbd, 0xac, 0xa9, 0x41, 0x01, 0x9b, 0xed, 0x81, 0x5a, 0x83, 0x9d, 0x80, 0x73, 0x34, 0xd3, 0x3b, 0x66, 0x30, 0x9f, 0xd7, 0xd2, 0x6b, 0xb5, 0x88, 0x2e, 0x4f, 0x62, 0xb1, 0x5c, 0x03, 0xc5, 0x4d, 0x81, 0xed, 0x3b, 0x8d, 0x15, 0x76, 0x1b, 0xc2, 0x36, 0x0d, 0xa4, 0x7e, 0x42, 0x6e, 0x33, 0xf6, 0xa4, 0x24, 0xb9, 0xab, 0xee, 0x4c, 0x6d, 0x4a, 0x29, 0x9d, 0xbe, 0xd0, 0x68, 0xa5, 0x8c, 0xf1, 0xa4, 0x55, 0x97, 0xbb, 0xc3, 0xc0, 0x38, 0x77, 0xfa, 0x20, 0x4f, 0xd0, 0x55, 0x1a, 0x7c, 0x37, 0x94, 0x43, 0x92, 0x85, 0x39, 0xe2, 0x48, 0xe2, 0xdf, 0xf8, 0x32, 0xe6, 0xcd, 0x7d, 0xf0, 0xff, 0xcb, 0xed, 0xa6, 0x13, 0x35, 0x03, 0xac, 0x66, 0x4d, 0xc4, 0x86, 0xbd, 0xd5, 0xc0, 0x16, 0xc4, 0xde, 0x95, 0x10, 0xad, 0xdb, 0xb4, 0xaf, 0x1a, 0xf9, 0x68, 0xa6, 0x3d, 0xb3, 0x14, 0x5a, 0x3d, 0xa0, 0xbc, 0x4e, 0xdc, 0x90, 0xc6, 0xde, 0x58, 0xd8, 0x02, 0x31, 0x8e, 0xea, 0xe9, 0x69, 0x65, 0x29, 0x22, 0x1c, 0x6a, 0xfb, 0x4b, 0x08, 0xb8, 0x1f, 0xf5, 0x02, 0x1b, 0x41, 0xf0, 0x30, 0x75, 0xcb, 0xca, 0x78, 0x60, 0xff, 0x92, 0x38, 0x14, 0x43, 0xe1, 0x38, 0x8c, 0xbb, 0x1c, 0xdd, 0xe4, 0x1d, 0xf3, 0x9f, 0x06, 0xc1, 0x2d, 0xbc, 0x85, 0xf8, 0xa8, 0x2e, 0xc9, 0x9f, 0x9b, 0xdb, 0x6d, 0xf4, 0x1f, 0x0d, 0xe5, 0xa8, 0xee, 0x21, 0x64, 0x35, 0x6a, 0x83, 0xfc, 0x71, 0xe1, 0xda, 0x08, 0x63, 0x0f, 0x7f, 0xc7, 0x56, 0xe4, 0x34, 0x49, 0x2d, 0x88, 0x13, 0x8f, 0xf6, 0x9d, 0xc4, 0xee, 0xc2, 0xc4, 0xf3, 0xb4, 0xb3, 0x62, 0x01, 0x0e, 0x56, 0xa4, 0xfa, 0x29, 0x33, 0xc0, 0xc8, 0x98, 0xa3, 0x7e, 0xa6, 0xf6, 0xe2, 0xf8, 0xd7, 0xcc, 0x65, 0x9d, 0x97, 0xb4, 0x6e, 0x7c, 0x52, 0xbf, 0xdd, 0xc0, 0x14, 0x15, 0x49, 0x76, 0x41, 0xdb, 0x4f, 0x97, 0x86, 0x5a, 0x2a, 0x42, 0x0f, 0x5d, 0x84, 0x49, 0xfa, 0xda, 0x8c, 0xef, 0x0c, 0xd5, 0x49, 0xf0, 0xa3, 0x82, 0x2e, 0xc2, 0xec, 0xaa, 0xee, 0x1b, 0x56, 0x4f, 0x92, 0xb3, 0x47, 0x93, 0xc8, 0x4b, 0x0d, 0xd6, 0x7e, 0xee, 0x17, 0x1f, 0xaf, 0x77, 0x65, 0xbd, 0x7d, 0x53, 0x3d, 0x2e, 0x81, 0x88, 0x20, 0x3f, 0x5f, 0xf6, 0xfc, 0x75, 0x9d, 0xdd, 0xa3, 0xac, 0xb5, 0xa0, 0x7c, 0xfe, 0x68, 0xc9, 0x78, 0xe6, 0x56, 0x4c, 0x48, 0xa5, 0xcc, 0x10, 0xce, 0xe5, 0xdd, 0xab, 0xd1, 0x9d, 0xb4, 0x6e, 0xf4, 0x34, 0x28, 0xa1, 0xe9, 0xe9, 0x91, 0x0f, 0xe2, 0x72, 0xda, 0xc6, 0x48, 0xe3, 0xd8, 0x18, 0xb0, 0xd2, 0xda, 0xe5, 0x0b, 0xb9, 0x82, 0x1d, 0x1c, 0x9b, 0xd3, 0x80, 0x30, 0xeb, 0x8a, 0xa8, 0x09, 0xa9, 0xb2, 0x4a, 0x1b, 0xce, 0x73, 0xb9, 0xfb, 0xea, 0x2b, 0xab, 0x14, 0x0c, 0xc0, 0x40, 0x9c, 0xe2, 0x34, 0x40, 0xc6, 0x21, 0x79, 0xa4, 0x39, 0x27, 0x87, 0x59, 0xc2, 0xe0, 0xad, 0x40, 0x45, 0xe6, 0x24, 0x79, 0xfa, 0xec, 0xea, 0xe1, 0xd5, 0x5c, 0xcd, 0xd9, 0x46, 0x3f, 0xc6, 0x4a, 0x23, 0x5e, 0x89, 0xe6, 0xe3, 0xa6, 0x5a, 0xb0, 0x0c, 0xd1, 0x22, 0xbe, 0xee, 0x43, 0xc2, 0x3d, 0x92, 0x32, 0xa7, 0xb7, 0xee, 0x0a, 0x9f, 0x91, 0x5a, 0x10, 0xeb, 0xd8, 0x48, 0x45, 0x95, 0x3d, 0x2f, 0x8d, 0x04, 0x5d, 0xc8, 0x10, 0xcd, 0x46, 0x7d, 0xe1, 0xcc, 0x37, 0x1f, 0xde, 0x74, 0xa8, 0xd7, 0xd7, 0x63, 0x8a, 0x5f, 0xf2, 0x39, 0xd0, 0x71, 0x4d, 0xab, 0x2e, 0x80, 0xe6, 0xd3, 0x21, 0xa7, 0xb8, 0xca, 0x2f, 0xdf, 0x27, 0x79, 0x70, 0x74, 0x9e, 0xac, 0x4d, 0xba, 0x77, 0x68, 0x88, 0xfc, 0x1b, 0x7f, 0x7d, 0xb5, 0x6a, 0x61, 0xa7, 0x02, 0x5d, 0x35, 0x65, 0x58, 0xe9, 0x29, 0xfe, 0x72, 0x27, 0x06, 0xe3, 0x8e, 0xb3, 0x07, 0x35, 0xd9, 0x52, 0xeb, 0x87, 0x28, 0xd7, 0x49, 0xe5, 0xe8, 0x47, 0x24, 0x15, 0x58, 0x3b, 0xbf, 0x1c, 0xf6, 0x86, 0xb2, 0x05, 0x36, 0x18, 0x3e, 0xdd, 0x7a, 0x22, 0xde, 0x02, 0x3f, 0x7b, 0x1e, 0x9e, 0x94, 0x43, 0xb0, 0x6e, 0xd1, 0xc6, 0xbd, 0xc8, 0x85, 0xa2, 0x79, 0xdc, 0xb0, 0x2d, 0xfa, 0x3a, 0x33, 0x11, 0x4a, 0x94, 0x84, 0x39, 0xbb, 0xc5, 0xa6, 0xf1, 0x7a, 0x13, 0x59, 0x48, 0x67, 0xb1, 0x8e, 0xb9, 0x24, 0x88, 0x1d, 0x0b, 0x6c, 0x38, 0xba, 0x76, 0xa7, 0x59, 0x26, 0x07, 0xbb, 0x06, 0xa2, 0x46, 0x24, 0x9c, 0xa9, 0x15, 0x47, 0xbf, 0xde, 0xdb, 0x03, 0x9e, 0x44, 0xe2, 0x8a, 0x78, 0xad, 0xfe, 0x6f, 0x60, 0x75, 0x70, 0x00, 0x3d, 0x6f, 0x09, 0xd5, 0x14, 0x20, 0x93, 0xa9, 0x8a, 0x2b, 0x6c, 0x69, 0xa4, 0x0d, 0x74, 0x8b, 0xd2, 0x0a, 0x29, 0xa1, 0x2c, 0x67, 0x11, 0x2e, 0xfb, 0xda, 0x59, 0xb8, 0x7b, 0x3f, 0xbb, 0x1e, 0xdf, 0x8c, 0xa5, 0x2c, 0x96, 0x07, 0x97, 0x6d, 0xcd, 0xb7, 0xcc, 0x40, 0x35, 0x18, 0x1e, 0x2e, 0x06, 0x13, 0x24, 0x7b, 0x44, 0x2c, 0x9d, 0xfb, 0x41, 0xfe, 0x11, 0x27, 0x63, 0xe4, 0xb5, 0x70, 0x27, 0xfa, 0x90, 0xd4, 0x66, 0x44, 0xdc, 0xae, 0xd7, 0x2c, 0xaf, 0xd2, 0xd6, 0x32, 0xda, 0xd9, 0x63, 0xdf, 0x11, 0xba, 0x6e, 0xfa, 0x4d, 0x9b, 0x52, 0xff, 0x6f, 0xe6, 0x9f, 0xcd, 0x26, 0x9e, 0x1c, 0x9f, 0x12, 0xf4, 0x0c, 0x3d, 0x2a, 0x15, 0xb1, 0x74, 0x5b, 0x47, 0x0f, 0xc3, 0x71, 0x34, 0xf2, 0x57, 0x3b, 0x85, 0x32, 0x3a, 0xea, 0xb3, 0x36, 0xc7, 0xbb, 0x1a, 0xb7, 0x61, 0xd6, 0x50, 0xc6, 0x64, 0x75, 0xb4, 0x11, 0x5c, 0x48, 0x4a, 0x62, 0x75, 0x19, 0xc6, 0x68, 0x33, 0xac, 0xe6, 0xba, 0x63, 0xe9, 0x05, 0x19, 0x52, 0x3c, 0xee, 0xf5, 0x3c, 0x3d, 0xee, 0x33, 0x07, 0x8c, 0x2d, 0x2e, 0x31, 0xff, 0x3d, 0xfc, 0x08, 0x00, 0xf4, 0xf2, 0x19, 0x30, 0x77, 0x6a, 0xea, 0x51, 0x98, 0xc3, 0xec, 0x62, 0x62, 0xaa, 0xab, 0x0b, 0xf1, 0x98, 0x48, 0x3c, 0x88, 0x9c, 0x29, 0x12, 0xdd, 0x5b, 0xef, 0xfa, 0xb7, 0x55, 0xa8, 0x18, 0xbb, 0x6a, 0x46, 0xea, 0x83, 0x9c, 0x51, 0x28, 0xf1, 0x16, 0xd8, 0xef, 0xc3, 0x6e, 0xad, 0x1f, 0x67, 0x27, 0xd2, 0x02, 0x10, 0x7a, 0x2e, 0x2e, 0x09, 0x55, 0x84, 0xac, 0x4a, 0xa5, 0xa6, 0x59, 0x49, 0xd1, 0xe6, 0x8d, 0x12, 0x86, 0xce, 0xfb, 0x9a, 0xba, 0x11, 0xd8, 0x50, 0xeb, 0xc0, 0x40, 0xf6, 0xa8, 0xc1, 0xd5, 0xaf, 0x53, 0x7e, 0xa9, 0x59, 0x25, 0xda, 0x5e, 0x1c, 0x72, 0x69, 0x8b, 0x43, 0x2f, 0xe0, 0x62, 0x4b, 0xb1, 0xca, 0x90, 0x3a, 0xb7, 0x7d, 0x65, 0x33, 0xab, 0x4d, 0x35, 0x46, 0x25, 0xff, 0xfe, 0x8c, 0xb1, 0x81, 0x4a, 0x74, 0xd2, 0xd8, 0x57, 0x58, 0x47, 0x59, 0x76, 0x54, 0x8c, 0x1c, 0xb1, 0x57, 0xa4, 0xae, 0xb0, 0x7a, 0x16, 0x06, 0xde, 0x91, 0x36, 0xba, 0xc7, 0x00, 0xa5, 0x73, 0xc4, 0xd1, 0x1b, 0x9f, 0xdb, 0x03, 0x64, 0x65, 0xe1, 0x24, 0xa9, 0xde, 0xe1, 0x22, 0xf1, 0x82, 0xc2, 0x5e, 0xe7, 0xe0, 0x23, 0x02, 0xde, 0x93, 0x8a, 0x95, 0x12, 0x71, 0xbe, 0xcc, 0x31, 0x05, 0x71, 0xa3, 0x1a, 0x40, 0x22, 0xad, 0xe4, 0x6b, 0x42, 0xa8, 0x22, 0x60, 0x96, 0x55, 0x65, 0xfa, 0xdc, 0x87, 0x03, 0xca, 0xb1, 0x79, 0x17, 0x0b, 0xb2, 0x64, 0xc9, 0xd8, 0xe2, 0x51, 0xd0, 0x9d, 0x4c, 0x2c, 0x35, 0xcc, 0xe9, 0x1b, 0x59, 0xd1, 0xc3, 0x0e, 0x39, 0x47, 0x5b, 0x96, 0xf1, 0x6c, 0x48, 0xfa, 0x7f, 0xd2, 0x22, 0x88, 0xca, 0x58, 0x9e, 0x29, 0xe3, 0x59, 0xfa, 0x38, 0x8a, 0x23, 0x9c, 0x94, 0xf4, 0xab, 0xf6, 0xf4, 0xcb, 0x7f, 0xac, 0x7b, 0x77, 0xfb, 0xf9, 0x8d, 0x9c, 0xc0, 0x4f, 0xe0, 0xe3, 0x62, 0x3d, 0xd6, 0xfe, 0x61, 0x96, 0x0a, 0xe6, 0x5b, 0xd0, 0x28, 0x67, 0x7f, 0xaa, 0x03, 0xdf, 0x45, 0x11, 0xe1, 0x43, 0x5c, 0x45, 0x19, 0x62, 0xe4, 0x38, 0xe1, 0x6e, 0xde, 0x37, 0x61, 0xb8, 0xe1, 0xcb, 0x0c, 0xbb, 0x0e, 0xe2, 0x2f, 0x5c, 0x46, 0x2a, 0xca, 0x70, 0x9a, 0xbe, 0xa0, 0x7f, 0x02, 0x04, 0x8a, 0xc7, 0x52, 0xd5, 0x10, 0x84, 0x6b, 0xdf, 0x3a, 0x6f, 0xae, 0x48, 0xa4, 0x85, 0xb7, 0x94, 0xd1, 0x09, 0x47, 0xc9, 0xc1, 0xcc, 0x81, 0xd1, 0xc6, 0xac, 0x5a, 0x1f, 0x93, 0x5b, 0x4b, 0x96, 0x96, 0x62, 0x48, 0xa6, 0x88, 0x65, 0xf6, 0xb8, 0x42, 0xa8, 0x19, 0xcc, 0xd2, 0xd2, 0x4b, 0x60, 0xce, 0xf1, 0xf4, 0x94, 0xe8, 0xbf, 0x76, 0x8d, 0xc3, 0x24, 0xa8, 0x17, 0x05, 0xfb, 0x86, 0x8e, 0xae, 0x19, 0x27, 0xfe, 0xa8, 0x8b, 0xef, 0x89, 0x9e, 0x20, 0x05, 0x09, 0x12, 0x28, 0x07, 0xf7, 0xaa, 0x7a, 0xfd, 0x8c, 0xcb, 0xbc, 0x8c, 0x25, 0x69, 0xde, 0x6d, 0xec, 0x1e, 0xe8, 0x1d, 0xb5, 0x79, 0xf6, 0xd5, 0x26, 0x98, 0x80, 0xbc, 0x1b, 0xf9, 0xdf, 0x5c, 0x48, 0x8d, 0x0d, 0x52, 0x21, 0x0e, 0xad, 0x4a, 0xf6, 0x93, 0x4b, 0x2b, 0x63, 0x62, 0xe4, 0x8f, 0xe7, 0x05, 0xa9, 0x76, 0xd3, 0xa0, 0x00, 0x3b, 0x66, 0x81, 0xcc, 0xc7, 0x36, 0xf9, 0xee, 0x04, 0xd1, 0x6a, 0x0c, 0x94, 0xa5, 0xa2, 0x90, 0xc4, 0x1d, 0x67, 0xf4, 0xbb, 0x0d, 0x53, 0x3e, 0xf8, 0x50, 0xe3, 0xc6, 0xfb, 0xb0, 0xca, 0x3f, 0x41, 0x05, 0x8b, 0xf5, 0x76, 0xa1, 0x46, 0x54, 0xe7, 0xec, 0xd2, 0xaa, 0x36, 0x4c, 0x0d, 0x2e, 0x51, 0x48, 0x70, 0x40, 0xa4, 0xec, 0xe7, 0xf2, 0x8e, 0x6f, 0xdf, 0xc8, 0x12, 0x13, 0xa0, 0xbc, 0xd0, 0x4d, 0xdd, 0x85, 0x33, 0x26, 0x89, 0x19, 0xeb, 0xe1, 0xed, 0x71, 0x9e, 0xde, 0xf8, 0x8c, 0xda, 0xbe, 0xd6, 0xb6, 0x4f, 0xc8, 0xc4, 0x0a, 0x3b, 0x8b, 0x22, 0x36, 0x25, 0xc5, 0xc9, 0x7e, 0xce, 0x84, 0xa0, 0x04, 0x65, 0x8b, 0x6a, 0x46, 0xfa, 0xf7, 0xe2, 0xe8, 0x35, 0x23, 0x0a, 0xb4, 0x48, 0xc8, 0xc0, 0xdf, 0x22, 0x69, 0x92, 0x8d, 0xe5, 0xee, 0xd3, 0x98, 0x9b, 0x8f, 0xee, 0x8d, 0x25, 0xf3, 0xfb, 0xf8, 0x73, 0x99, 0x90, 0xe2, 0xfb, 0x78, 0xda, 0x97, 0x63, 0xe2, 0xec, 0xad, 0x81, 0xae, 0x56, 0x41, 0x86, 0x96, 0xfa, 0x84, 0x76, 0xde, 0x1b, 0x77, 0xdc, 0x37, 0xb7, 0xf2, 0xbb, 0xe2, 0x17, 0xeb, 0xc7, 0x18, 0xa4, 0xf5, 0xd5, 0xaa, 0xfc, 0x07, 0x91, 0xe5, 0x45, 0x7f, 0x6f, 0xb8, 0xc2, 0x66, 0xe4, 0x19, 0xa3, 0xf6, 0xd5, 0xa4, 0x22, 0x59, 0x50, 0x85, 0xcb, 0xb4, 0x7a, 0x99, 0x1b, 0x64, 0xc8, 0xd0, 0x4d, 0x88, 0x72, 0xd6, 0x71, 0xbf, 0x25, 0xf2, 0xbe, 0x33, 0xf9, 0x2e, 0x29, 0xd6, 0xa2, 0xb8, 0x37, 0xeb, 0xea, 0x88, 0x0f, 0xc9, 0x5f, 0x43, 0xd3, 0xdb, 0x48, 0x5f, 0x30, 0xec, 0xde, 0x89, 0x34, 0xa1, 0xb9, 0x43, 0x60, 0x47, 0x89, 0xd2, 0xff, 0xcf, 0x06, 0x57, 0xb6, 0x17, 0x2a, 0x3c, 0x5b, 0x6c, 0x9d, 0xd1, 0x0a, 0x4c, 0x71, 0x37, 0x76, 0x70, 0x0f, 0x7e, 0x7e, 0x0a, 0x71, 0x0a, 0x01, 0x4b, 0x92, 0x3b, 0xf2, 0x28, 0x23, 0x4d, 0xaf, 0x5e, 0x80, 0x7c, 0x8e, 0xb3, 0xe2, 0x6c, 0xb9, 0x7f, 0xd6, 0xc9, 0x3d, 0x6c, 0xee, 0x2a, 0x5d, 0x7a, 0xb6, 0x3c, 0x2c, 0x46, 0xe9, 0x1c, 0x5b, 0x8b, 0xe5, 0x04, 0x4f, 0xe9, 0x5d, 0x2a, 0x76, 0xe5, 0x4e, 0xe5, 0xdc, 0x32, 0x34, 0x12, 0xf9, 0x2f, 0x7d, 0xb6, 0xce, 0xb0, 0x3e, 0xe5, 0x30, 0x01, 0x25, 0xe2, 0x63, 0x28, 0xaf, 0x87, 0xea, 0x6b, 0x9a, 0xe7, 0x9e, 0x12, 0x9e, 0x33, 0xfe, 0x6e, 0x58, 0xda, 0xc6, 0x1a, 0x87, 0xf4, 0xc3, 0x81, 0x7a, 0xe1, 0xe5, 0xa0, 0xc9, 0x2d, 0x96, 0x0e, 0x44, 0xb7, 0x4a, 0x39, 0x29, 0x13, 0x57, 0xf2, 0x9a, 0x2c, 0x08, 0x2c, 0x4d, 0x2e, 0xec, 0x00, 0x86, 0xa3, 0x74, 0xf5, 0x42, 0xdc, 0xbd, 0x7f, 0xb5, 0x92, 0xab, 0xc5, 0xf7, 0xcd, 0x37, 0xa7, 0xfb, 0x05, 0x0a, 0x00, 0xc0, 0x87, 0x4a, 0x28, 0xcb, 0x1b, 0xb4, 0xbe, 0xd4, 0xe4, 0xeb, 0xa4, 0xc0, 0x87, 0x0f, 0x4a, 0xcf, 0x90, 0x92, 0x30, 0x17, 0x11, 0x47, 0xa6, 0x31, 0x8b, 0xbc, 0xd7, 0x32, 0x12, 0xca, 0x05, 0xdc, 0xad, 0x6a, 0x16, 0x16, 0xfc, 0xca, 0x50, 0x9a, 0x1d, 0xa1, 0x61, 0xee, 0xcf, 0xbf, 0xa2, 0x95, 0xd8, 0xe8, 0x9c, 0x86, 0xa5, 0xe2, 0xcc, 0xdd, 0x31, 0xcd, 0xa3, 0xd1, 0x28, 0xb3, 0xd1, 0xe6, 0x4b, 0x60, 0xc3, 0x63, 0x16, 0x74, 0x6a, 0x07, 0xa0, 0xb6, 0x3f, 0xf8, 0xc4, 0xab, 0x84, 0xfc, 0x7e, 0x68, 0xcc, 0xeb, 0x97, 0xa4, 0xbd, 0x65, 0x85, 0x11, 0x15, 0xc0, 0x8d, 0xed, 0xeb, 0x44, 0x2a, 0xd3, 0x38, 0x9b, 0xb2, 0xd8, 0x95, 0x83, 0x37, 0xd3, 0x46, 0xc6, 0xab, 0xfc, 0x78, 0x6c, 0x48, 0xb9, 0xc7, 0x2f, 0x2f, 0xb4, 0x03, 0x2f, 0x50, 0x31, 0x34, 0xe7, 0x89, 0x9f, 0xdb, 0x60, 0x12, 0x6c, 0x7b, 0xa4, 0x18, 0x1e, 0x58, 0x76, 0xa8, 0xa0, 0x7f, 0x40, 0xcf, 0xd9, 0x06, 0x4d, 0x00, 0x83, 0x95, 0x38, 0xb5, 0x3b, 0x26, 0xa5, 0x59, 0xd4, 0x08, 0x2e, 0x66, 0xf1, 0x2a, 0xa1, 0xcb, 0xd3, 0x96, 0x68, 0x90, 0x6f, 0x3c, 0x48, 0xbc, 0xc4, 0xf1, 0x4f, 0x77, 0x6b, 0xb7, 0x07, 0x6c, 0x70, 0x3f, 0xf0, 0x71, 0x60, 0xac, 0x2d, 0x6a, 0xa3, 0x9a, 0x7e, 0x6a, 0x0c, 0x5f, 0x6e, 0x1c, 0xaf, 0x90, 0xce, 0x62, 0xf3, 0xc8, 0x61, 0x3b, 0xe8, 0xa4, 0xd9, 0xea, 0xda, 0x12, 0x02, 0x55, 0x26, 0xcc, 0x3e, 0xab, 0x4c, 0x1f, 0x31, 0x49, 0x46, 0xf1, 0xbd, 0xdf, 0x18, 0x02, 0x31, 0xce, 0xa9, 0x72, 0xbd, 0xd5, 0xd1, 0x84, 0x2a, 0xed, 0xb3, 0xa1, 0xc7, 0x71, 0x4d, 0xa0, 0xa7, 0x82, 0x4d, 0x44, 0x09, 0xaa, 0x26, 0x06, 0x18, 0xbf, 0x64, 0x15, 0xd5, 0x0b, 0x3c, 0x9c, 0x51, 0xa9, 0x68, 0x43, 0x1f, 0x32, 0x32, 0xf8, 0x09, 0x9a, 0xce, 0xef, 0x02, 0x54, 0xec, 0xe7, 0x5c, 0xbd, 0x8e, 0xb0, 0x3b, 0xb7, 0x17, 0xea, 0x4a, 0x94, 0xa5, 0x0f, 0xac, 0x37, 0xa1, 0xb4, 0x36, 0x75, 0x95, 0x0b, 0xdb, 0xc1, 0x3d, 0xad, 0x67, 0x09, 0xe0, 0x96, 0x71, 0xdb, 0xe0, 0x71, 0x8a, 0xcc, 0x91, 0x17, 0xbb, 0x1a, 0x47, 0x52, 0x2f, 0x90, 0xb3, 0xe6, 0x2c, 0xaa, 0x6f, 0xd2, 0x48, 0xfa, 0xd7, 0xd3, 0xd9, 0xca, 0x1b, 0x2a, 0xad, 0x03, 0x92, 0x9f, 0xfb, 0x4e, 0x51, 0xc6, 0x9a, 0x78, 0xfd, 0x81, 0x71, 0x1b, 0xdd, 0xc6, 0x2f, 0x7b, 0x33, 0xa2, 0x3c, 0xae, 0xcd, 0x7e, 0xef, 0x00, 0xd7, 0xa2, 0x01, 0x95, 0xf3, 0xf7, 0x41, 0x50, 0x8c, 0x11, 0x8a, 0xf4, 0x66, 0x6c, 0xf2, 0x89, 0x7a, 0xf6, 0x45, 0x02, 0x02, 0xce, 0xb2, 0x1c, 0xd0, 0x4c, 0xc3, 0x89, 0xe3, 0x41, 0x93, 0x4e, 0x3c, 0x80, 0x3b, 0x6a, 0xee, 0x9d, 0x8d, 0xb8, 0x75, 0xf4, 0x05, 0x16, 0x48, 0xed, 0xfc, 0xc7, 0xb2, 0x7f, 0x1f, 0x16, 0xdd, 0xf3, 0x20, 0x3c, 0x30, 0xeb, 0xab, 0x84, 0xda, 0xa2, 0x9c, 0xad, 0xaf, 0x75, 0x6f, 0x90, 0x34, 0xa3, 0xf7, 0x03, 0xf5, 0x51, 0x53, 0xfc, 0x1f, 0xd1, 0x1f, 0xfa, 0x4a, 0x23, 0xe7, 0xa0, 0x97, 0xbc, 0xe1, 0xa3, 0xfb, 0x87, 0xdb, 0xe7, 0xda, 0x2a, 0x72, 0xe5, 0xd8, 0x8a, 0x85, 0x50, 0xec, 0x91, 0xe9, 0xf8, 0xb6, 0x2f, 0x5e, 0xee, 0x12, 0x9e, 0xc2, 0xe9, 0xed, 0xeb, 0x85, 0xe8, 0x57, 0xb2, 0x5d, 0x19, 0xda, 0x29, 0x3b, 0xfa, 0x0a, 0x5f, 0x7d, 0xbe, 0x5e, 0xc6, 0x65, 0xf2, 0x3e, 0xf0, 0xca, 0x60, 0x5d, 0x96, 0x0d, 0x34, 0x49, 0xde, 0x4f, 0x5d, 0x41, 0xdd, 0xe1, 0x36, 0x46, 0x5b, 0xfc, 0x66, 0x74, 0xd7, 0xb3, 0x05, 0x93, 0xcb, 0x25, 0x00, 0xea, 0x32, 0xf7, 0xbe, 0x53, 0x46, 0x02, 0x03, 0x95, 0x8e, 0x48, 0x15, 0xed, 0x18, 0x2d, 0x1e, 0xee, 0x04, 0xe4, 0xd2, 0x8c, 0x42, 0x27, 0x51, 0x73, 0x9b, 0x2b, 0x4f, 0x9d, 0xf6, 0xd3, 0x72, 0x23, 0xd4, 0x24, 0xfb, 0x53, 0x1e, 0xf9, 0xa9, 0x04, 0x20, 0xf7, 0xda, 0x26, 0xd5, 0xc4, 0xf4, 0x9d, 0x65, 0x74, 0x03, 0x50, 0xec, 0x44, 0xa4, 0x7c, 0x7d, 0x8b, 0x21, 0x4f, 0x67, 0xed, 0xdd, 0xb2, 0xb6, 0xd2, 0xf3, 0x66, 0xfd, 0x16, 0x1a, 0x52, 0x53, 0x03, 0xcc, 0x1b, 0x9c, 0x7c, 0xa7, 0xf6, 0x0a, 0x7a, 0x13, 0xba, 0xe3, 0xbd, 0x25, 0x3a, 0x84, 0xbb, 0xc3, 0xd1, 0xa6, 0xdd, 0x09, 0x3e, 0xe0, 0xea, 0xec, 0xb2, 0x6d, 0xc3, 0x1d, 0x28, 0x30, 0x52, 0x30, 0xf5, 0xf5, 0xbd, 0xfe, 0xa0, 0xfa, 0xdf, 0x48, 0xf3, 0xae, 0xf8, 0x9d, 0x52, 0xb8, 0xa3, 0x7d, 0x4c, 0x3b, 0x09, 0xbe, 0x70, 0x58, 0x55, 0x2f, 0x62, 0xf5, 0x68, 0x7c, 0x2e, 0xbd, 0xcd, 0x51, 0xdb, 0x68, 0xef, 0xc2, 0x44, 0x3d, 0x89, 0xeb, 0x23, 0xd5, 0x5f, 0xd3, 0x6f, 0x21, 0x2c, 0x97, 0xe8, 0xaf, 0xdb, 0xc4, 0xf0, 0x28, 0xf9, 0x04, 0x9c, 0x1e, 0x6b, 0xfd, 0x0b, 0x04, 0x5c, 0x76, 0xf6, 0x7e, 0x7a, 0xbb, 0x89, 0xdc, 0x62, 0x43, 0x71, 0xe0, 0x58, 0x91, 0x37, 0xc8, 0x3c, 0x58, 0xcc, 0x88, 0xb9, 0xe2, 0x65, 0x58, 0xc0, 0xb2, 0x88, 0x6e, 0x35, 0x69, 0x67, 0x0d, 0xe8, 0xe6, 0x6e, 0xbe, 0xc6, 0xb1, 0x18, 0xde, 0x51, 0x9a, 0x06, 0x58, 0x4d, 0x9d, 0x52, 0xb4, 0xbc, 0x09, 0x21, 0x51, 0x0d, 0xe2, 0x77, 0xee, 0x91, 0x83, 0x50, 0x6f, 0x2e, 0x87, 0xec, 0xde, 0x57, 0xea, 0x6a, 0xb1, 0x3b, 0x6c, 0x98, 0x4b, 0x3d, 0x36, 0x0a, 0xc5, 0xa5, 0xc0, 0x69, 0xed, 0x95, 0xf2, 0x0e, 0x8f, 0x3e, 0x8a, 0xcf, 0xf4, 0x53, 0xbd, 0x19, 0xa9, 0xbe, 0x21, 0x40, 0x81, 0x93, 0xca, 0x12, 0xdd, 0x42, 0xb3, 0xb2, 0x2b, 0x10, 0x60, 0xa4, 0xad, 0xc8, 0xc2, 0x24, 0x7c, 0xad, 0x5b, 0xbc, 0xcc, 0xb4, 0xa3, 0x15, 0x71, 0xf0, 0xa9, 0x0e, 0xa3, 0x4e, 0xfd, 0x0b, 0xfe, 0x82, 0xce, 0x8f, 0xcc, 0x41, 0x50, 0x0e, 0x87, 0xb1, 0x60, 0xfc, 0x9a, 0x1e, 0x6b, 0x2a, 0x68, 0xee, 0x8c, 0x52, 0x8f, 0xd7, 0xf4, 0xf1, 0x6e, 0x4f, 0x8f, 0x54, 0xe5, 0x44, 0xe5, 0xf6, 0x5b, 0x0e, 0x3e, 0x09, 0x06, 0xa2, 0x09, 0x53, 0x66, 0x08, 0x7e, 0x3b, 0x13, 0x0f, 0x83, 0x24, 0xb9, 0x3f, 0xcc, 0xf9, 0x61, 0x0f, 0x47, 0x09, 0xf2, 0x58, 0xb7, 0x16, 0xf7, 0x0a, 0x9e, 0xa8, 0xa2, 0x1e, 0x61, 0xa7, 0x11, 0xcb, 0xa7, 0x29, 0xd1, 0xfd, 0x02, 0x89, 0xa1, 0x03, 0xd1, 0xb9, 0x78, 0x87, 0x65, 0xd9, 0xc9, 0xc4, 0x62, 0x08, 0x05, 0xf3, 0x68, 0x7a, 0x62, 0x06, 0xf3, 0xca, 0xdb, 0x99, 0x80, 0x92, 0x77, 0x26, 0xf2, 0x3a, 0xcf, 0x78, 0x33, 0x0d, 0xca, 0x62, 0x1e, 0x92, 0xac, 0xb0, 0x9d, 0x19, 0x4f, 0x5e, 0x0e, 0x94, 0xaf, 0x08, 0xec, 0xa8, 0xad, 0xa2, 0xab, 0x04, 0x0c, 0x69, 0xe3, 0xf2, 0xc0, 0x19, 0xb1, 0x2b, 0x68, 0x61, 0x5b, 0xf0, 0x19, 0x94, 0x32, 0x56, 0x5d, 0xa1, 0xbd, 0xe2, 0x7b, 0x45, 0x13, 0x55, 0xf9, 0x7f, 0x89, 0xc9, 0x60, 0x45, 0x8d, 0xfd, 0x3f, 0x75, 0xd2, 0xee, 0x72, 0x0e, 0xae, 0xa7, 0xa4, 0xa0, 0xc0, 0x59, 0x13, 0x01, 0xd5, 0xae, 0x93, 0x42, 0x0c, 0x5b, 0xd6, 0xe1, 0x39, 0xf5, 0xea, 0x40, 0x88, 0x05, 0x03, 0x56, 0x63, 0x5e, 0x7b, 0xa5, 0x95, 0xae, 0x17, 0x6c, 0xaf, 0x54, 0x8c, 0x1d, 0xaa, 0x71, 0x42, 0x11, 0xcf, 0x42, 0x57, 0x7b, 0xd4, 0xad, 0xe7, 0x9b, 0x48, 0x19, 0x8b, 0x34, 0x31, 0x83, 0x1f, 0x3f, 0xf3, 0xce, 0xc9, 0xe1, 0x73, 0x5b, 0x36, 0x9b, 0x7d, 0xda, 0x27, 0xc1, 0x63, 0x60, 0x2d, 0x2d, 0xe7, 0xb9, 0xb0, 0x34, 0x5b, 0xff, 0x36, 0xd9, 0x07, 0x6b, 0xe2, 0x41, 0xcb, 0x6c, 0x3b, 0x67, 0x06, 0xf6, 0x30, 0x11, 0xb6, 0x1d, 0x58, 0x03, 0xe0, 0xe2, 0x7e, 0x72, 0x32, 0x4d, 0x5c, 0xbb, 0xe7, 0xbc, 0xa7, 0x55, 0xeb, 0x7a, 0x4c, 0x04, 0x3f, 0x93, 0xfa, 0x50, 0xa0, 0xe7, 0xe0, 0x36, 0x63, 0x7e, 0xb8, 0x1d, 0xa4, 0x1b, 0x04, 0x0c, 0x9f, 0x14, 0x97, 0x19, 0x5e, 0x60, 0x58, 0x25, 0x95, 0xf2, 0x43, 0xc6, 0xca, 0x45, 0xb0, 0x85, 0xb8, 0x39, 0xd8, 0x4a, 0xf6, 0x1d, 0x95, 0x14, 0xd4, 0x0d, 0x69, 0xed, 0x86, 0x7e, 0xc2, 0x1e, 0x84, 0x17, 0x7c, 0x9f, 0x30, 0xc3, 0xa8, 0xd1, 0xb9, 0x04, 0x8c, 0x6f, 0x40, 0x8a, 0xea, 0xc2, 0x3a, 0x04, 0x86, 0x15, 0x16, 0x36, 0xe2, 0x69, 0x1f, 0x4b, 0x4c, 0x6a, 0xa3, 0x6d, 0x1a, 0xa1, 0x55, 0x94, 0x35, 0xea, 0xf0, 0x9b, 0xd4, 0x29, 0x1d, 0x99, 0x8a, 0x39, 0x97, 0x6e, 0x83, 0x25, 0x8d, 0x9c, 0x0b, 0x9b, 0x48, 0x59, 0x4f, 0x9d, 0x0d, 0xe2, 0x68, 0x7a, 0x45, 0x11, 0x95, 0xfd, 0xdb, 0x32, 0xc8, 0xe4, 0xe6, 0x13, 0x65, 0x93, 0x88, 0x5a, 0x46, 0x0a, 0x15, 0x1b, 0x02, 0x15, 0x78, 0xaa, 0x6f, 0xc2, 0xd3, 0xae, 0x65, 0x18, 0x66, 0x77, 0xc5, 0x06, 0xb2, 0x92, 0xba, 0x9a, 0xde, 0x9a, 0x3f, 0x74, 0x59, 0x50, 0xe2, 0x79, 0xc1, 0xee, 0xc7, 0xcc, 0x04, 0xb9, 0xef, 0xfa, 0xc5, 0xd6, 0xba, 0x74, 0x01, 0x5e, 0xab, 0x43, 0xf2, 0xb5, 0x6c, 0xf7, 0x33, 0x17, 0x12, 0xe0, 0x26, 0x73, 0xa1, 0x81, 0x93, 0x7d, 0xd3, 0x42, 0x91, 0xff, 0x15, 0x65, 0xaa, 0x6f, 0xd3, 0x3b, 0x3a, 0xc7, 0xf5, 0x98, 0x18, 0x91, 0xaa, 0x84, 0x78, 0x41, 0x64, 0x33, 0x10, 0xc8, 0x24, 0x38, 0x7a, 0x66, 0xf7, 0xf5, 0xda, 0xc0, 0xc0, 0x56, 0xc0, 0x32, 0x39, 0xbf, 0x50, 0x66, 0x35, 0x42, 0xa0, 0x26, 0x28, 0x16, 0x61, 0x6e, 0xe8, 0x44, 0xc2, 0xc6, 0xb5, 0xa4, 0x91, 0xce, 0x78, 0x08, 0xa3, 0x1b, 0x48, 0xb7, 0x77, 0x41, 0x32, 0x1d, 0x16, 0x31, 0x3a, 0xc0, 0x3d, 0xc6, 0x9d, 0x76, 0xbe, 0x9a, 0x59, 0xd6, 0x24, 0x1e, 0xef, 0xec, 0x96, 0xea, 0x68, 0x31, 0xfe, 0x51, 0x96, 0xb9, 0x6a, 0x39, 0x9c, 0xaf, 0xb2, 0x29, 0xb1, 0xff, 0x5b, 0xa4, 0x20, 0x52, 0xbb, 0xb6, 0x93, 0x3f, 0x5e, 0xcc, 0x92, 0xbf, 0xa9, 0xc9, 0x47, 0xe2, 0xbd, 0x55, 0x84, 0xc1, 0x9e, 0x78, 0x07, 0xb4, 0x95, 0x69, 0xfc, 0xc5, 0xd2, 0xa0, 0xc3, 0x64, 0x56, 0x32, 0xf4, 0x5c, 0x10, 0x5e, 0xa0, 0x05, 0x46, 0x63, 0xda, 0xbb, 0x37, 0x95, 0x76, 0x90, 0xff, 0xb0, 0x11, 0x3e, 0xba, 0x6c, 0x52, 0x60, 0xec, 0x52, 0x6e, 0xe1, 0x21, 0xcd, 0xf2, 0xb4, 0xd0, 0x84, 0xbd, 0xc5, 0x85, 0xe7, 0x4b, 0x30, 0x3f, 0x08, 0x3a, 0xb2, 0x17, 0xad, 0x06, 0x5c, 0x23, 0xa3, 0x18, 0x8f, 0x9a, 0x55, 0xff, 0x24, 0x39, 0x9d, 0xfd, 0xeb, 0xe5, 0xd9, 0xc5, 0x57, 0x91, 0x42, 0x83, 0x77, 0x62, 0x79, 0x1d, 0x28, 0x11, 0x63, 0xb8, 0x8a, 0x92, 0x37, 0x7f, 0xb0, 0xf3, 0xd5, 0x9f, 0x9c, 0x86, 0x5a, 0x96, 0x6a, 0x42, 0xf1, 0xae, 0xcb, 0x67, 0xec, 0xc4, 0xb5, 0x61, 0x13, 0x4e, 0x59, 0xef, 0x3b, 0x9d, 0x56, 0x84, 0x1b, 0x5f, 0x2c, 0xee, 0x5c, 0x67, 0xf3, 0x35, 0xef, 0xb1, 0x4d, 0xc6, 0xa3, 0xa0, 0x99, 0xd0, 0xf7, 0x8b, 0x69, 0xef, 0x2c, 0x78, 0x36, 0x08, 0x9f, 0x27, 0x53, 0x74, 0x56, 0x53, 0x20, 0x60, 0xd9, 0x34, 0x80, 0x73, 0x43, 0x48, 0x8d, 0xb2, 0x98, 0x53, 0x8a, 0xa1, 0x59, 0xa5, 0x18, 0xab, 0x56, 0x9b, 0xad, 0xc4, 0xc4, 0x68, 0x43, 0x4d, 0x8f, 0x15, 0x4d, 0x38, 0xf2, 0xc7, 0xef, 0x6c, 0x44, 0x41, 0x6e, 0x6b, 0x15, 0xa9, 0xe6, 0x32, 0x79, 0x8f, 0x3b, 0x61, 0xa4, 0x2b, 0x51, 0x9b, 0xb7, 0xe6, 0x80, 0x30, 0xda, 0x1d, 0x42, 0xf9, 0x8b, 0x21, 0x2f, 0x84, 0x35, 0x82, 0x2c, 0x71, 0x05, 0x8d, 0xdf, 0x1c, 0xf9, 0x13, 0x66, 0x7d, 0x3a, 0x6c, 0x48, 0x4c, 0xab, 0xbc, 0xab, 0x68, 0xc2, 0x75, 0xc8, 0x79, 0x97, 0x1d, 0x9d, 0xd4, 0x3a, 0x52, 0xe1, 0xa0, 0x4a, 0x0b, 0x3d, 0x37, 0xc3, 0x20, 0xb9, 0xcf, 0x18, 0x0d, 0x75, 0x5a, 0x82, 0xf3, 0x99, 0xab, 0x97, 0xdf, 0x8e, 0xd9, 0x1e, 0x4f, 0x6f, 0xe8, 0x22, 0xf2, 0xba, 0xa6, 0x45, 0xb0, 0x4c, 0xd4, 0x57, 0xea, 0x8c, 0x86, 0x27, 0x03, 0xe6, 0xcd, 0x99, 0x1f, 0x7b, 0x92, 0xf9, 0x2a, 0x16, 0xc5, 0x8f, 0x1d, 0x62, 0xb8, 0x74, 0x7c, 0x5b, 0xc5, 0xa4, 0x23, 0x03, 0x37, 0x53, 0x43, 0x56, 0x68, 0x85, 0xa8, 0x7f, 0x26, 0xd9, 0x3d, 0x4c ],
- const [ 0x6b, 0x1d, 0x94, 0xbc, 0x0c, 0x6e, 0x45, 0xfc, 0x90, 0x5c, 0x50, 0x9e, 0xa6, 0x67, 0x85, 0x3e, 0x4b, 0x2c, 0x5a, 0x88, 0x48, 0xdd, 0x91, 0x4e, 0xfc, 0xef, 0x14, 0xd9, 0x5b, 0x12, 0x24, 0x7d, 0x37, 0x66, 0xb2, 0x70, 0xbf, 0xec, 0x0d, 0xdd, 0x45, 0x3b, 0xbe, 0x33, 0x44, 0x74, 0xb0, 0xc3, 0xa1, 0x77, 0x95, 0x8a, 0x31, 0x57, 0x84, 0x4b, 0x7c, 0x0c, 0xe7, 0xe2, 0xc0, 0x68, 0x94, 0xd4, 0x39, 0x4d, 0x3a, 0x2a, 0xa0, 0x1c, 0xff, 0x80, 0xf2, 0x70, 0x67, 0x59, 0x72, 0x0d, 0x78, 0xb5, 0xf1, 0x13, 0x1c, 0xe6, 0x4d, 0x78, 0xc6, 0x9f, 0x38, 0xb4, 0x58, 0x4e, 0x3a, 0xbe, 0x45, 0xab, 0xf9, 0x38, 0xf2, 0x91, 0xb9, 0xe6, 0x63, 0x0e, 0x1f, 0x65, 0x13, 0xb6, 0x3a, 0x1a, 0x23, 0x3c, 0xc4, 0x68, 0xb7, 0x43, 0xa4, 0x26, 0x9e, 0x71, 0xb8, 0x50, 0x31, 0xc5, 0xd2, 0xfc, 0x7d, 0x2b, 0x00, 0x90, 0xa4, 0x4e, 0x11, 0x33, 0x80, 0xae, 0x54, 0x81, 0x8a, 0xf2, 0xa3, 0x83, 0xfa, 0x7f, 0xa0, 0xde, 0x30, 0x49, 0x3f, 0x4a, 0x53, 0xe9, 0x85, 0x46, 0x38, 0xf1, 0x8f, 0x0b, 0x85, 0x7c, 0xd5, 0xbe, 0x16, 0x09, 0xb0, 0xe9, 0x9f, 0x89, 0x1a, 0x2c, 0x93, 0xb6, 0xb5, 0x30, 0x45, 0xa7, 0x10, 0xdd, 0x4e, 0xa1, 0x25, 0xcd, 0x2e, 0x31, 0x26, 0x00, 0x36, 0x77, 0x79, 0xd1, 0xa5, 0xc5, 0x01, 0x28, 0x11, 0x69, 0x9f, 0xf2, 0x08, 0xc6, 0xf8, 0xce, 0xf8, 0xaa, 0x79, 0x09, 0x4c, 0xdb, 0x99, 0xcd, 0xd8, 0xf3, 0x5e, 0x95, 0x77, 0x6e, 0x23, 0xe4, 0xf2, 0x02, 0x98, 0x37, 0x24, 0x2f, 0x0a, 0x38, 0x5c, 0x16, 0xe5, 0x34, 0x03, 0x8e, 0x77, 0xcf, 0x7f, 0x75, 0xf6, 0xf7, 0x56, 0x44, 0xc5, 0x16, 0x97, 0xe6, 0xf3, 0x8c, 0x76, 0xcb, 0x05, 0x5c, 0x36, 0x38, 0xf5, 0x25, 0x4c, 0xe1, 0x7a, 0x55, 0xc1, 0xb9, 0x8a, 0x99, 0xd8, 0x09, 0x1d, 0x98, 0xf1, 0xbf, 0x35, 0xe0, 0xad, 0x09, 0x1b, 0x20, 0x53, 0x23, 0xeb, 0x99, 0x72, 0x6e, 0x52, 0xcf, 0xc8, 0xc1, 0x97, 0x84, 0x63, 0x03, 0xd8, 0xe6, 0x06, 0xfa, 0x97, 0x08, 0xce, 0x5e, 0x75, 0x8f, 0x15, 0x32, 0x3c, 0xae, 0x97, 0x54, 0x23, 0x54, 0xd3, 0x52, 0x4e, 0xa3, 0xb5, 0x7f, 0x95, 0xa5, 0x71, 0x46, 0x86, 0x3a, 0xb2, 0xbf, 0xad, 0x55, 0xf4, 0x80, 0x13, 0x68, 0x2e, 0xb6, 0x04, 0x1d, 0xb5, 0x74, 0x15, 0x47, 0x5d, 0x4a, 0x66, 0x18, 0xe1, 0x1a, 0x25, 0x94, 0x85, 0x27, 0x53, 0x45, 0xf9, 0x6f, 0xcb, 0x31, 0x81, 0x3b, 0x80, 0x09, 0x53, 0xf4, 0x06, 0xa3, 0x40, 0x38, 0x54, 0xaa, 0x97, 0x2d, 0xc8, 0x95, 0x47, 0x15, 0x6b, 0xd5, 0x43, 0x23, 0x77, 0x53, 0x2b, 0x8d, 0x16, 0x19, 0x28, 0xe3, 0x6d, 0x4f, 0x18, 0x9f, 0xd9, 0x6a, 0xeb, 0xfd, 0x78, 0xa0, 0x4c, 0x0d, 0xec, 0x9f, 0x84, 0x06, 0x5b, 0x7e, 0x9c, 0xdd, 0xba, 0xf4, 0xc2, 0x16, 0x4c, 0xc8, 0xef, 0xdb, 0x65, 0x88, 0xc6, 0x4b, 0x74, 0x7e, 0xbe, 0x14, 0x40, 0xe0, 0x83, 0x44, 0x72, 0x47, 0x9a, 0x5c, 0x54, 0x62, 0x44, 0xa6, 0xd8, 0xec, 0xa6, 0xc9, 0xdc, 0xdb, 0x26, 0x9b, 0xac, 0xdb, 0x18, 0x36, 0xc9, 0xfa, 0x9a, 0x4e, 0xe9, 0xa5, 0xbc, 0xc2, 0x3e, 0xd3, 0xe5, 0x70, 0xfb, 0x80, 0x72, 0x4e, 0x15, 0x5d, 0x9f, 0xb7, 0x46, 0xc6, 0xab, 0x02, 0x58, 0xf4, 0x37, 0x59, 0xa0, 0x74, 0xf0, 0xc8, 0xc9, 0xd7, 0x6d, 0x95, 0xd3, 0xac, 0x5a, 0xd0, 0x5a, 0xab, 0xd7, 0x2a, 0x1c, 0x33, 0x1b, 0x0b, 0xb6, 0xf7, 0x5d, 0xde, 0xae, 0xf4, 0xf4, 0xb0, 0xb6, 0xa6, 0xbd, 0xf9, 0x2f, 0x7b, 0xbd, 0xb9, 0xed, 0x88, 0x07, 0xc7, 0x3a, 0x7a, 0xe0, 0x66, 0x1d, 0xd0, 0x22, 0x1a, 0xdc, 0x48, 0xde, 0xba, 0xbf, 0x97, 0x45, 0xc5, 0x17, 0x5d, 0xc9, 0xf9, 0x7f, 0x58, 0x7f, 0x22, 0x62, 0xd8, 0xc8, 0x31, 0xbd, 0x73, 0x30, 0x8d, 0x26, 0xf9, 0x96, 0xae, 0x0e, 0xab, 0x8e, 0xe7, 0x43, 0xa7, 0x03, 0x83, 0xb8, 0xa7, 0x21, 0x14, 0x89, 0xeb, 0x71, 0x08, 0x3a, 0x74, 0x46, 0x7d, 0x40, 0x73, 0x59, 0x57, 0xc2, 0x01, 0xb0, 0x8f, 0xa0, 0x10, 0xc4, 0xcd, 0xb5, 0xa2, 0xe2, 0x3a, 0x59, 0x39, 0xd2, 0x8f, 0x2a, 0x8e, 0xb7, 0x73, 0x0d, 0x85, 0x36, 0x03, 0x6f, 0x61, 0xda, 0xb2, 0xd1, 0x34, 0xb7, 0x53, 0x83, 0x9a, 0x4e, 0x74, 0xaf, 0xa7, 0xb1, 0xee, 0x9a, 0x1e, 0xe8, 0xba, 0x27, 0xe4, 0x92, 0x06, 0x9d, 0xb4, 0xcf, 0x88, 0xa9, 0x13, 0x5e, 0x13, 0xa7, 0x87, 0x03, 0x68, 0x1d, 0x04, 0x2c, 0x4e, 0x88, 0xa7, 0xd3, 0xe5, 0x5c, 0xa7, 0xa6, 0x37, 0x46, 0x88, 0x66, 0x10, 0xb4, 0x91, 0x8d, 0x10, 0x97, 0x81, 0x33, 0xfe, 0x67, 0x7e, 0x32, 0x5f, 0x68, 0x4e, 0x89, 0x47, 0x2d, 0xc9, 0xfe, 0x70, 0x5a, 0x8e, 0x08, 0x89, 0xae, 0xf6, 0xeb, 0xd0, 0x40, 0x46, 0x25, 0xe3, 0x08, 0x29, 0x09, 0xd3, 0xa2, 0x5d, 0xaa, 0x7b, 0x4f, 0xac, 0xfa, 0x10, 0x3d, 0x1e, 0x33, 0xf9, 0x08, 0x6d, 0x76, 0xe0, 0x80, 0xb9, 0xb2, 0x09, 0xad, 0x7d, 0xc8, 0xe2, 0x10, 0xc2, 0xed, 0xdc, 0x2c, 0x92, 0x4f, 0x7a, 0x45, 0xb0, 0xfb, 0xa7, 0x68, 0x86, 0xfe, 0x4d, 0xab, 0x5f, 0xca, 0x23, 0xb6, 0xd6, 0xdc, 0xc7, 0x82, 0x8e, 0x9c, 0x0c, 0x61, 0x24, 0x85, 0x95, 0x3f, 0x62, 0x85, 0xa3, 0x27, 0xb6, 0xa7, 0x2b, 0x09, 0xe2, 0xef, 0x2c, 0xba, 0xf4, 0x85, 0x3f, 0x3c, 0x79, 0x17, 0x70, 0x40, 0xee, 0x78, 0x4c, 0xe9, 0x77, 0x8d, 0x3b, 0xd3, 0xd4, 0x69, 0x10, 0x54, 0x90, 0xb7, 0xdf, 0x01, 0x7b, 0x58, 0x0e, 0x74, 0x5b, 0x4e, 0xaf, 0x4d, 0xdf, 0xd9, 0x0d, 0x77, 0xd4, 0xdf, 0x85, 0xad, 0x9b, 0x91, 0x98, 0x3c, 0xdb, 0x4c, 0x3e, 0x0a, 0x73, 0xbd, 0x7c, 0xd7, 0xb3, 0x49, 0x38, 0xc3, 0xcb, 0xac, 0x4d, 0x10, 0x83, 0xe0, 0xdb, 0x2a, 0x2d, 0x40, 0xe0, 0xe4, 0xd8, 0xed, 0x0d, 0x05, 0xc7, 0x71, 0xd2, 0x03, 0x22, 0xa2, 0xbc, 0x0e, 0xea, 0xc9, 0x00, 0x50, 0x32, 0x04, 0x58, 0x74, 0x8d, 0xe9, 0x0d, 0x65, 0xc3, 0x6c, 0x55, 0x58, 0xc8, 0x03, 0xe0, 0x0c, 0xee, 0x08, 0xae, 0x50, 0x59, 0x5e, 0x23, 0xc7, 0xb3, 0x57, 0x5d, 0xe8, 0x22, 0xd5, 0xc5, 0x48, 0x77, 0xb0, 0xe4, 0x1c, 0xa9, 0x58, 0x79, 0xf9, 0x81, 0xbc, 0xc8, 0xdf, 0x96, 0x6a, 0x34, 0x76, 0x7c, 0xf7, 0x10, 0x97, 0x39, 0xa1, 0xb3, 0x0e, 0xf8, 0x33, 0xca, 0x9f, 0x02, 0x29, 0xf3, 0x47, 0xe9, 0x15, 0x87, 0xc3, 0x06, 0x41, 0xb6, 0x57, 0x26, 0x96, 0xda, 0xc8, 0x81, 0xbc, 0x05, 0xaa, 0xec, 0x83, 0xdc, 0xe2, 0x4f, 0x82, 0xa9, 0x63, 0x58, 0xfe, 0xab, 0x3b, 0x71, 0x0d, 0xb1, 0xd3, 0xf0, 0xfa, 0xe7, 0x72, 0x8e, 0xec, 0xef, 0x04, 0x1b, 0xc3, 0x33, 0x1a, 0x70, 0x43, 0x7a, 0x31, 0xa4, 0x74, 0xba, 0x37, 0x83, 0x48, 0x2d, 0x4b, 0x3b, 0x7f, 0xa7, 0xc5, 0x59, 0xc8, 0x27, 0x76, 0xf4, 0x29, 0xac, 0x31, 0x28, 0xa0, 0x4a, 0x89, 0xc7, 0x0b, 0x7c, 0xdd, 0x4a, 0x45, 0xbc, 0x92, 0x0e, 0x92, 0x51, 0xa0, 0xbd, 0x3d, 0x69, 0x50, 0x09, 0x7f, 0x67, 0x44, 0xa1, 0xa3, 0x7e, 0xb7, 0x5d, 0x68, 0x7f, 0x06, 0xbc, 0xa7, 0xef, 0x6f, 0x91, 0x35, 0x5d, 0x19, 0xf9, 0x0b, 0xf2, 0x55, 0x90, 0xa4, 0x4a, 0x24, 0xe5, 0xa7, 0x82, 0xf9, 0x2b, 0xc6, 0x93, 0xc0, 0x31, 0xe6, 0xde, 0x1e, 0x94, 0x80, 0x08, 0xfb, 0x33, 0x47, 0x07, 0x3e, 0xe3, 0x0b, 0x7d, 0xd7, 0x64, 0xdd, 0x45, 0x03, 0x94, 0x74, 0x4c, 0xcb, 0xe3, 0xcf, 0xa3, 0xce, 0x07, 0x1c, 0xd2, 0x41, 0xf1, 0xd9, 0x6e, 0x34, 0xff, 0x39, 0xee, 0x17, 0x73, 0xc9, 0xba, 0x7c, 0x24, 0x53, 0x85, 0x1f, 0x73, 0x02, 0xdd, 0x23, 0x81, 0xc8, 0x00, 0x9e, 0x9f, 0xfd, 0xf2, 0x58, 0x06, 0x49, 0xcc, 0xd0, 0xc9, 0xc3, 0x57, 0x80, 0x07, 0x5a, 0xd9, 0x62, 0x65, 0x75, 0x2f, 0xb3, 0xbb, 0xd6, 0x1c, 0xf7, 0x0e, 0xc4, 0xe1, 0x3d, 0xbf, 0x69, 0x0e, 0xa4, 0x01, 0x79, 0x97, 0x1e, 0x90, 0x14, 0x2a, 0x74, 0xa1, 0xee, 0xc0, 0x8b, 0x14, 0xad, 0x73, 0xe5, 0xf1, 0x92, 0x8f, 0x6a, 0x12, 0x5c, 0xeb, 0x69, 0x1d, 0x69, 0x7a, 0xda, 0xb6, 0x1f, 0x1d, 0xe6, 0xf2, 0x8a, 0xbb, 0xa9, 0x0e, 0x46, 0x94, 0x36, 0x61, 0xa0, 0xd2, 0xdb, 0x8f, 0xf8, 0x61, 0xa7, 0x00, 0x6a, 0x01, 0x2a, 0x90, 0xad, 0x9a, 0x7c, 0x88, 0x3a, 0xcf, 0x81, 0xce, 0xb1, 0xd5, 0x6a, 0x58, 0x79, 0x86, 0x7f, 0xe6, 0xa7, 0xb1, 0x1c, 0xf1, 0x22, 0xb5, 0xfa, 0xde, 0x04, 0x4e, 0xb0, 0x78, 0x43, 0xae, 0x7a, 0x9d, 0x90, 0xd0, 0x38, 0x37, 0x7f, 0x09, 0xba, 0x6f, 0xe9, 0xe0, 0x3a, 0x1d, 0x8f, 0x1f, 0x2a, 0x82, 0xff, 0x2a, 0x31, 0x39, 0xbc, 0x90, 0x70, 0x6b, 0x99, 0xe0, 0x09, 0x43, 0x66, 0xbe, 0xe2, 0xa1, 0xce, 0x35, 0xa6, 0x13, 0x80, 0x4f, 0x0d, 0x01, 0x8d, 0xe3, 0x5e, 0x27, 0x11, 0xaf, 0x32, 0x48, 0x16, 0xa6, 0x7a, 0x21, 0xb5, 0x8b, 0xc3, 0x9d, 0x7e, 0xbf, 0xb9, 0x47, 0x1b, 0x58, 0xea, 0x04, 0x2f, 0x72, 0xcd, 0x02, 0x84, 0xca, 0x03, 0xec, 0x66, 0x89, 0xdc, 0x60, 0x4a, 0x5d, 0x1d, 0xa2, 0xb4, 0xce, 0x01, 0x92, 0x57, 0xd0, 0x7d, 0xdb, 0x7d, 0x94, 0xc8, 0x6e, 0xa9, 0xa4, 0x1b, 0x2f, 0x7b, 0x2f, 0xb6, 0xed, 0xd5, 0xa1, 0x23, 0x98, 0x3c, 0x77, 0xbe, 0xae, 0x81, 0x52, 0x75, 0xf7, 0xa0, 0x4a, 0xcd, 0x72, 0xe8, 0x84, 0x25, 0x8f, 0x5c, 0x07, 0x3f, 0x9e, 0x5a, 0xcb, 0xfc, 0x88, 0x7a, 0x13, 0x67, 0xbd, 0xb9, 0xfd, 0xf5, 0x6d, 0xd7, 0x58, 0x0c, 0xfb, 0xfd, 0xb5, 0xc1, 0xaf, 0xa3, 0xc1, 0xe6, 0xab, 0xb1, 0xd2, 0x44, 0x20, 0xe4, 0xbf, 0x25, 0xc1, 0x74, 0xf5, 0x16, 0x78, 0xf4, 0xc7, 0xea, 0x58, 0x79, 0x06, 0x02, 0xd4, 0xfe, 0xd2, 0xcc, 0x2e, 0x07, 0xaf, 0x8a, 0x32, 0x85, 0xdc, 0x55, 0x23, 0xfa, 0xe0, 0x61, 0xf6, 0xdd, 0x65, 0x82, 0xbe, 0x40, 0x49, 0xef, 0x68, 0xb0, 0xf3, 0x47, 0xa8, 0x5d, 0xe3, 0xd1, 0x33, 0x7b, 0x8d, 0x08, 0x2f, 0xe7, 0x68, 0x57, 0xe7, 0x0e, 0x42, 0x21, 0xc4, 0x0b, 0xd6, 0x04, 0x79, 0x0f, 0xa0, 0x5f, 0x7d, 0x06, 0xf0, 0x11, 0xbe, 0x77, 0x3e, 0x84, 0x94, 0xac, 0xbd, 0xeb, 0xf3, 0x14, 0x32, 0xc7, 0xe6, 0xe5, 0x07, 0xb0, 0x38, 0x05, 0x9b, 0x52, 0x74, 0x2b, 0xdd, 0xb6, 0x11, 0x42, 0x19, 0xc3, 0xe6, 0x0e, 0x12, 0x04, 0xe4, 0x11, 0x50, 0xab, 0x03, 0xb0, 0xbb, 0xd6, 0x7d, 0x92, 0x69, 0x12, 0x3b, 0x49, 0xb5, 0x1d, 0x8c, 0x34, 0x91, 0xf1, 0x1d, 0xa3, 0x1d, 0xfd, 0x26, 0x3d, 0x78, 0xb6, 0xe1, 0x9f, 0xd5, 0x4e, 0x40, 0x46, 0xd2, 0xc3, 0xdf, 0xaf, 0x06, 0x1c, 0x38, 0xbc, 0xd9, 0xf0, 0x16, 0x5a, 0x99, 0x27, 0x4c, 0x61, 0xca, 0x04, 0xa6, 0xbc, 0xbd, 0x64, 0x20, 0xc9, 0x64, 0x40, 0x56, 0x02, 0x64, 0x79, 0x3c, 0xde, 0x6c, 0xd5, 0x0f, 0xf2, 0xc5, 0x44, 0x8b, 0x5c, 0x2b, 0x69, 0x5f, 0x61, 0xdc, 0x55, 0xde, 0x55, 0xee, 0x96, 0xf7, 0xbb, 0xe5, 0x70, 0x67, 0xae, 0x85, 0x6a, 0x2d, 0x80, 0xe5, 0x0d, 0x3e, 0xa0, 0xc5, 0xe8, 0x7b, 0xc1, 0x21, 0xd7, 0xe0, 0x38, 0x07, 0x85, 0xfe, 0xa6, 0xa5, 0x30, 0xab, 0xd8, 0xa6, 0xac, 0xf8, 0xeb, 0xbf, 0xab, 0x63, 0xb4, 0x84, 0x3b, 0x4e, 0x5f, 0x81, 0x90, 0xb0, 0x55, 0x86, 0x04, 0x0b, 0x64, 0x42, 0x5c, 0x9e, 0x1a, 0x13, 0x4d, 0xdb, 0x71, 0x1d, 0x3f, 0x1b, 0xb2, 0x9a, 0x50, 0x91, 0x93, 0x70, 0x9c, 0x7c, 0xa2, 0x09, 0xbc, 0xa1, 0xe7, 0x5f, 0x8c, 0xf9, 0xc5, 0x56, 0x31, 0xa7, 0x22, 0x4f, 0x5b, 0x2c, 0xc8, 0xfa, 0xc8, 0xde, 0x0a, 0x6b, 0x0a, 0x97, 0xaa, 0x71, 0x89, 0xaa, 0xfa, 0x23, 0xcb, 0x1b, 0x42, 0xbb, 0xf3, 0x0f, 0x62, 0xa8, 0x88, 0x81, 0xb8, 0xde, 0x78, 0x37, 0x44, 0x71, 0x5d, 0xf4, 0x0a, 0x62, 0xfe, 0xf0, 0xb8, 0xb9, 0x19, 0x85, 0x89, 0xd3, 0x60, 0x2b, 0x69, 0xfe, 0xc1, 0xa6, 0x5a, 0x43, 0xea, 0x7e, 0x16, 0x83, 0x0d, 0xb0, 0xf6, 0xc6, 0xe0, 0xa3, 0x12, 0xcf, 0xe9, 0x5d, 0xaa, 0xf4, 0xf8, 0xf7, 0xc5, 0x2c, 0xf5, 0x4e, 0x17, 0x6a, 0xdb, 0xfc, 0x28, 0x29, 0x05, 0x87, 0xb3, 0x48, 0xa9, 0xd7, 0x4c, 0x19, 0xa2, 0xee, 0x46, 0xb5, 0x72, 0xd3, 0xd4, 0x92, 0x87, 0xcf, 0x6e, 0x57, 0xbd, 0xdc, 0x77, 0xee, 0x25, 0x5b, 0x1c, 0xdb, 0x05, 0x05, 0x7f, 0xcd, 0x1f, 0x24, 0x15, 0x73, 0x36, 0x03, 0x4c, 0x91, 0xcf, 0xa3, 0x72, 0x53, 0x35, 0xaf, 0xd2, 0xe1, 0xbf, 0xb2, 0x20, 0x33, 0x55, 0x88, 0x17, 0x27, 0x31, 0x13, 0x60, 0xd1, 0xe3, 0x2f, 0xb6, 0x12, 0x98, 0xe7, 0x48, 0x6c, 0x9b, 0xe9, 0x5e, 0x14, 0x1c, 0x37, 0x40, 0x49, 0x31, 0x20, 0x54, 0xe5, 0x1a, 0x6f, 0x86, 0x32, 0xc9, 0xe2, 0xec, 0xfe, 0xa2, 0xdd, 0xaa, 0xf2, 0x7f, 0x60, 0x14, 0x1f, 0xf7, 0x37, 0x13, 0xda, 0xe0, 0x70, 0xca, 0xca, 0x12, 0x12, 0x79, 0x3f, 0x6e, 0x0c, 0xa1, 0xc5, 0x1f, 0x6c, 0x69, 0xfa, 0x20, 0xd1, 0x40, 0x9c, 0xfe, 0x23, 0xc4, 0xe6, 0xe0, 0x81, 0xe2, 0x1d, 0xc4, 0x7b, 0x3f, 0x66, 0x0b, 0x82, 0xd7, 0xda, 0x38, 0x9c, 0xe5, 0xdc, 0xf5, 0x5d, 0x02, 0xaa, 0x57, 0x12, 0x90, 0x33, 0x62, 0x3f, 0x59, 0x29, 0xd0, 0x4c, 0x74, 0x56, 0x0e, 0x7b, 0x69, 0x33, 0x88, 0x1d, 0x94, 0xb7, 0x26, 0x06, 0xcf, 0x6d, 0x16, 0x3e, 0x4b, 0xc9, 0xcd, 0xf9, 0xbf, 0xbc, 0x48, 0xc9, 0xc5, 0x86, 0x98, 0x13, 0x80, 0xcc, 0x9d, 0xc0, 0x83, 0xea, 0x12, 0x34, 0xee, 0x8a, 0xc9, 0x84, 0xda, 0x76, 0x38, 0xe3, 0xf8, 0xaa, 0x35, 0x5e, 0x74, 0xae, 0xfe, 0xca, 0x20, 0x22, 0x7c, 0xfa, 0xce, 0x9a, 0xc9, 0x35, 0xfd, 0xad, 0xef, 0xe6, 0xb9, 0x49, 0xf3, 0x96, 0xbc, 0x49, 0x12, 0x18, 0xd9, 0x4a, 0x4a, 0x03, 0x9b, 0xba, 0x1c, 0x66, 0x29, 0x31, 0x91, 0xb6, 0x6c, 0x05, 0x7b, 0x0b, 0x74, 0x19, 0xfd, 0x8c, 0x18, 0xf5, 0x4d, 0x28, 0xdd, 0x1c, 0xb9, 0x88, 0x1a, 0x99, 0xe8, 0x41, 0x59, 0xdc, 0x63, 0x4d, 0xff, 0xc4, 0x53, 0xbc, 0x30, 0xfd, 0x8d, 0xa7, 0xed, 0x8c, 0xcb, 0x66, 0x7f, 0xa8, 0x3c, 0x02, 0x19, 0xcc, 0x40, 0xed, 0xb9, 0x0a, 0x6c, 0xf1, 0x4f, 0xa2, 0xd5, 0x67, 0x21, 0xd3, 0x8b, 0xa9, 0x6e, 0xf1, 0x63, 0xca, 0x51, 0xb8, 0xfa, 0x84, 0xe9, 0xe0, 0xf6, 0x71, 0xb7, 0xf1, 0x8f, 0x7e, 0x47, 0x59, 0x4f, 0x9e, 0x13, 0xbc, 0x15, 0xbb, 0xa4, 0x8b, 0x60, 0xf2, 0xfa, 0xd8, 0xca, 0xff, 0x2e, 0x69, 0xd3, 0xf6, 0x56, 0x0b, 0xe0, 0x35, 0xa9, 0x28, 0x84, 0x96, 0xe4, 0x9c, 0xfd, 0xe9, 0xec, 0xc5, 0x02, 0xa1, 0xb4, 0xd9, 0xbc, 0xcd, 0x61, 0x7d, 0x12, 0x4a, 0xac, 0x93, 0x29, 0x37, 0x88, 0x53, 0x2b, 0xaa, 0x05, 0x9d, 0x48, 0xa1, 0x75, 0x8d, 0xfb, 0x3c, 0xcd, 0x51, 0x8f, 0x29, 0x4e, 0x37, 0xe1, 0x5f, 0x64, 0x0a, 0x67, 0x0f, 0xce, 0x9f, 0x71, 0xd7, 0xff, 0xab, 0xaf, 0x3a, 0xc4, 0xd7, 0xf4, 0x4d, 0x28, 0x17, 0x39, 0xb2, 0x95, 0x37, 0xe5, 0xca, 0x3b, 0xb7, 0x4c, 0x27, 0xb5, 0xd8, 0x75, 0x40, 0xea, 0xf7, 0x20, 0x69, 0x32, 0x1a, 0x07, 0x02, 0xbb, 0xc9, 0x65, 0xee, 0x2a, 0x1f, 0xb5, 0x47, 0x85, 0x20, 0xbc, 0x4f, 0x50, 0x4d, 0xc9, 0xaa, 0xf6, 0x76, 0x3c, 0xcb, 0x6b, 0xd0, 0x45, 0xad, 0x10, 0x47, 0xee, 0xc3, 0xd7, 0x15, 0x5c, 0x31, 0xa7, 0x94, 0x51, 0x3c, 0x02, 0x50, 0xf6, 0xff, 0xe5, 0x61, 0xd8, 0x60, 0xef, 0xf8, 0x30, 0x43, 0xc6, 0x37, 0x67, 0xfe, 0xb7, 0x46, 0xd9, 0x0c, 0x9c, 0xa3, 0xda, 0x05, 0x03, 0xb9, 0xf6, 0xcd, 0x8c, 0xb5, 0x7d, 0x0c, 0x93, 0x95, 0x40, 0xdf, 0x0f, 0x81, 0x95, 0xce, 0xba, 0x5f, 0xa1, 0xfd, 0x73, 0xa2, 0xd6, 0xa6, 0xe0, 0x62, 0xba, 0xc6, 0x57, 0xb2, 0xea, 0x17, 0xff, 0x2e, 0x5f, 0x3f, 0x32, 0xd3, 0xf1, 0x47, 0x26, 0x14, 0x19, 0x4e, 0xcd, 0x29, 0xfb, 0x7f, 0xf9, 0xab, 0xa4, 0x40, 0xc4, 0x5e, 0x90, 0xac, 0x2f, 0x4e, 0x6f, 0x44, 0x09, 0x1d, 0x28, 0xe1, 0x13, 0x9b, 0x1f, 0xee, 0x61, 0x97, 0xb4, 0xd3, 0x03, 0xf5, 0x0c, 0xb4, 0xe5, 0x01, 0x13, 0x5c, 0xf4, 0x03, 0xc1, 0x74, 0x82, 0x14, 0x9d, 0xf9, 0xec, 0x2f, 0x80, 0xed, 0x7a, 0x8b, 0x9c, 0x4c, 0x86, 0x28, 0xbc, 0x41, 0xe1, 0xa8, 0xcd, 0x9a, 0x72, 0x61, 0x9e, 0x7a, 0x20, 0xb0, 0xe4, 0x4d, 0xf3, 0x90, 0x81, 0x01, 0x75, 0x6b, 0x06, 0x74, 0x5f, 0x30, 0x76, 0x28, 0x71, 0xa5, 0x4d, 0x3e, 0xa2, 0xff, 0xc0, 0xa2, 0x79, 0xb0, 0x47, 0x83, 0xbb, 0x80, 0x59, 0x06, 0x46, 0xdf, 0x76, 0x3b, 0x3d, 0x79, 0x6b, 0x50, 0x65, 0x0c, 0xd2, 0x04, 0xcf, 0x76, 0xd8, 0x5f, 0xb8, 0x13, 0x43, 0xa0, 0xad, 0x45, 0xb3, 0x78, 0xf3, 0x54, 0x27, 0x75, 0x25, 0x79, 0xc4, 0xc1, 0x1f, 0x35, 0xd2, 0x0c, 0x1b, 0xe7, 0x08, 0xc7, 0x1a, 0x9e, 0x09, 0x93, 0x86, 0x2c, 0x2e, 0xf9, 0x15, 0x7c, 0x86, 0x5b, 0xf0, 0x25, 0x1b, 0x2a, 0x15, 0x3e, 0x77, 0x5a, 0xf9, 0x75, 0x67, 0x13, 0x72, 0x5b, 0xff, 0xaa, 0xd5, 0x02, 0xde, 0xcf, 0x5b, 0xca, 0xb4, 0x08, 0xca, 0x78, 0x01, 0x5e, 0x51, 0x88, 0x1f, 0x55, 0xb3, 0xc5, 0x82, 0x22, 0xa8, 0x16, 0x3f, 0x19, 0x80, 0x9b, 0xcb, 0x65, 0x09, 0xf8, 0x05, 0xfb, 0xb3, 0xf1, 0x77, 0xd1, 0xf2, 0x38, 0xd9, 0x4a, 0xe4, 0x82, 0xd7, 0xf5, 0x34, 0xe0, 0x15, 0x78, 0x3e, 0x4d, 0x6f, 0xc7, 0x73, 0x83, 0x85, 0x9a, 0xff, 0x14, 0x77, 0x1d, 0xaa, 0xb5, 0xed, 0xe9, 0xfc, 0xdd, 0x5b, 0x33, 0xa5, 0x8f, 0x83, 0x43, 0x1c, 0x73, 0x3b, 0x28, 0x85, 0x2c, 0x70, 0xab, 0xd8, 0xe6, 0x6b, 0x81, 0x40, 0x2e, 0x53, 0xc5, 0xc1, 0x07, 0xf3, 0xa5, 0x1e, 0x3a, 0xbe, 0x5b, 0xfa, 0xed, 0x10, 0x5f, 0x3d, 0x77, 0xb7, 0xda, 0xb9, 0x73, 0xb2, 0x5e, 0x0e, 0x13, 0x38, 0xd5, 0xca, 0xb8, 0xfd, 0xb8, 0xd5, 0xbf, 0xb0, 0x82, 0x0d, 0x9d, 0xc8, 0x63, 0x2d, 0x2e, 0x80, 0x38, 0xf3, 0x4a, 0x20, 0xbb, 0x82, 0x9a, 0x7f, 0xf7, 0x05, 0xa9, 0xc6, 0x00, 0x95, 0x3e, 0x76, 0xe0, 0x5d, 0xea, 0xad, 0xd4, 0xfb, 0xdd, 0xa5, 0xb9, 0x2a, 0xfd, 0x7d, 0xc1, 0x9e, 0x3a, 0x3c, 0x6a, 0x30, 0x1b, 0x13, 0xb1, 0x3b, 0x9d, 0xe2, 0x82, 0x46, 0x3e, 0xfe, 0x74, 0xe3, 0x55, 0x32, 0xb3, 0xd6, 0xa4, 0x03, 0x3d, 0x7a, 0x30, 0x38, 0x52, 0x61, 0x51, 0x9a, 0x25, 0x3b, 0x05, 0xf9, 0xd8, 0xf9, 0x89, 0x6f, 0xa7, 0x32, 0x2b, 0xe9, 0x64, 0xc5, 0x5a, 0xe2, 0x23, 0xc0, 0xff, 0x72, 0x36, 0x80, 0x10, 0x88, 0x5c, 0x1a, 0x61, 0x73, 0x35, 0xfa, 0xbe, 0xa8, 0xf9, 0xca, 0x38, 0xbf, 0x6a, 0x96, 0xbc, 0xbe, 0x07, 0x2d, 0xea, 0x9a, 0x83, 0xca, 0x23, 0xfb, 0x75, 0xf3, 0xe4, 0x40, 0x51, 0xa2, 0x53, 0xc3, 0x97, 0xa3, 0x18, 0x5e, 0x4a, 0x3d, 0x6e, 0x2e, 0xa4, 0x14, 0x7a, 0x96, 0x08, 0x4e, 0xdb, 0x87, 0x38, 0xf5, 0x82, 0xff, 0xc8, 0x9c, 0xc4, 0xd0, 0xd3, 0x46, 0xad, 0xa3, 0xec, 0x83, 0x98, 0x3c, 0x57, 0xdc, 0xfc, 0x00, 0x7a, 0x71, 0x89, 0xb4, 0x8e, 0xe1, 0x74, 0x87, 0x9a, 0x6a, 0x0f, 0x53, 0xa2, 0x52, 0x9c, 0x20, 0x1b, 0x85, 0x63, 0xea, 0xa3, 0x7f, 0x02, 0xa4, 0xef, 0x6c, 0x05, 0x7c, 0x05, 0x8e, 0xb6, 0x61, 0xab, 0xe0, 0x36, 0xc2, 0x1f, 0xf9, 0xcd, 0x99, 0x08, 0x32, 0x7f, 0xa9, 0xad, 0x0b, 0xe0, 0x03, 0x65, 0xcb, 0x29, 0xcf, 0x4e, 0x67, 0x8a, 0x49, 0x42, 0xa5, 0xc2, 0x0a, 0x07, 0x81, 0xee, 0x89, 0xc6, 0xd0, 0x9e, 0xe1, 0xbf, 0x23, 0x2e, 0xd5, 0x3a, 0xee, 0x54, 0x11, 0xc1, 0xea, 0xf5, 0xb2, 0x8c, 0xb7, 0x3d, 0x09, 0x3d, 0xc6, 0xee, 0x9c, 0xce, 0x76, 0xf8, 0x6e, 0xc7, 0x7d, 0x4b, 0x81, 0xb4, 0x8a, 0xe9, 0x98, 0xd6, 0x29, 0x3f, 0x41, 0x19, 0xe6, 0xb5, 0x13, 0x46, 0xb5, 0x84, 0x35, 0x7a, 0x91, 0xc7, 0x20, 0xd7, 0x64, 0xd6, 0xa5, 0x79, 0x27, 0xcf, 0x31, 0xab, 0x4a, 0x75, 0x50, 0x5b, 0x56, 0x3e, 0x70, 0xcc, 0xd1, 0xa7, 0xe8, 0x8b, 0x62, 0xcb, 0x38, 0xa4, 0x35, 0x34, 0x92, 0x15, 0xa1, 0xf1, 0x9a, 0x83, 0x08, 0xe8, 0x6b, 0x2c, 0xff, 0x6e, 0xda, 0x1d, 0xaf, 0x15, 0xfe, 0xa5, 0x7b, 0xc5, 0xf0, 0x09, 0xe4, 0x0f, 0xcf, 0x79, 0xa9, 0xbd, 0x07, 0x43, 0x32, 0xae, 0xd3, 0x47, 0x2e, 0xe1, 0x01, 0xab, 0x7c, 0xcf, 0xf6, 0xd0, 0x47, 0xfe, 0xf1, 0x84, 0x76, 0xd3, 0x94, 0x79, 0x43, 0xa8, 0xa0, 0xf5, 0x29, 0x1e, 0x00, 0xcc, 0x04, 0xb4, 0x09, 0x8c, 0x74, 0x99, 0x00, 0xf7, 0x82, 0xbf, 0xdc, 0xb6, 0x86, 0x31, 0x4e, 0x4b, 0x48, 0xa6, 0xff, 0x48, 0x65, 0x56, 0x19, 0xbe, 0xf4, 0x0c, 0x08, 0xf9, 0x6a, 0x7d, 0x82, 0x6a, 0xbb, 0xd8, 0xc4, 0xe5, 0xc2, 0x9e, 0x1f, 0x0d, 0xe3, 0xb4, 0xb4, 0x0c, 0xef, 0xb7, 0x7c, 0x87, 0x47, 0x8f, 0x8b, 0xd0, 0x45, 0x47, 0x95, 0x5e, 0xd7, 0x1b, 0xb1, 0x7b, 0x6d, 0xd3, 0x5d, 0x3d, 0x16, 0x50, 0xc2, 0xb7, 0xe5, 0x65, 0x3a, 0x70, 0x9a, 0xe8, 0x10, 0x15, 0x7e, 0x08, 0x87, 0x6a, 0x8f, 0xe0, 0x1d, 0x86, 0xdd, 0x4d, 0x10, 0x40, 0x34, 0xfd, 0x22, 0xe5, 0xfb, 0xc9, 0x99, 0x2c, 0x5c, 0x45, 0x8b, 0x6b, 0xa6, 0x95, 0x58, 0x0a, 0xef, 0x82, 0x78, 0x38, 0xfd, 0xcd, 0x77, 0xde, 0x67, 0xc2, 0x3d, 0xd1, 0xf7, 0x11, 0x93, 0x4c, 0x53, 0xda, 0xe3, 0x9d, 0xdc, 0x07, 0x3f, 0x1e, 0xd7, 0xde, 0xa5, 0x67, 0xcb, 0xd6, 0x82, 0xc2, 0x29, 0xaa, 0x74, 0xe0, 0x32, 0xad, 0x54, 0xca, 0x16, 0x5d, 0x74, 0x19, 0x59, 0x3a, 0x25, 0x6a, 0x7b, 0xd9, 0x7d, 0x0d, 0xd8, 0x34, 0x57, 0xfd, 0xcd, 0x44, 0x9a, 0x15, 0x1c, 0xd2, 0xbf, 0x80, 0x92, 0x8a, 0x8d, 0x72, 0xe7, 0x51, 0x27, 0x15, 0xe5, 0xd8, 0x49, 0xc7, 0xcc, 0x71, 0xcf, 0x82, 0xf6, 0x22, 0x77, 0x9b, 0xb7, 0xf8, 0xe7, 0xb0, 0x87, 0x9e, 0xf2, 0xdc, 0x63, 0x2e, 0x17, 0x2c, 0x70, 0x47, 0x4a, 0x57, 0xe2, 0x60, 0xf8, 0xa9, 0x1c, 0x5c, 0x45, 0x41, 0x18, 0x5e, 0x98, 0x7c, 0x0a, 0xde, 0x59, 0xb1, 0x40, 0xfd, 0xf9, 0x1f, 0x4d, 0x15, 0x33, 0x23, 0x66, 0x95, 0x92, 0xaf, 0x0c, 0x0c, 0x34, 0xf7, 0xec, 0x83, 0xcd, 0x6d, 0x03, 0x10, 0xee, 0xf0, 0x05, 0xa8, 0x88, 0x40, 0x00, 0x35, 0xac, 0xb6, 0x3c, 0xe8, 0x94, 0x32, 0x67, 0xd1, 0xe7, 0x54, 0xee, 0xad, 0x39, 0xef, 0xae, 0xff, 0xd1, 0xba, 0xcc, 0x62, 0xb0, 0x49, 0xe1, 0x1d, 0xcf, 0x3c, 0x5b, 0xf8, 0xa7, 0xb7, 0x20, 0x4e, 0xf6, 0x12, 0x74, 0x64, 0xc1, 0xd1, 0x1c, 0xf9, 0x95, 0xd6, 0xc3, 0x1e, 0x13, 0xd5, 0x9e, 0x48, 0xac, 0x09, 0x4c, 0xa4, 0xa8, 0x25, 0x00, 0xaa, 0x6d, 0x8e, 0xe1, 0xf5, 0xfe, 0xc7, 0xb1, 0x52, 0xc2, 0x2c, 0xad, 0x17, 0x87, 0xe4, 0xb5, 0xb6, 0xc6, 0x11, 0xad, 0x91, 0x28, 0x49, 0x23, 0x10, 0x4a, 0x4a, 0x32, 0xf1, 0xbd, 0xe9, 0xa6, 0xe0, 0x52, 0x4c, 0x60, 0x48, 0x94, 0x59, 0xfd, 0x68, 0x95, 0x6e, 0xb2, 0xa9, 0xee, 0x53, 0x7a, 0x2f, 0x01, 0x6d, 0x74, 0xae, 0x81, 0x34, 0x86, 0x7f, 0x35, 0xe7, 0x47, 0xf3, 0xf8, 0x7e, 0x1c, 0xe7, 0x05, 0xe0, 0xa1, 0x98, 0x71, 0x56, 0x4a, 0xb9, 0xf9, 0x3f, 0x4a, 0xc3, 0xfe, 0x06, 0xb3, 0x8d, 0xce, 0x52, 0xdf, 0x1c, 0x25, 0x7c, 0x10, 0xbc, 0xf4, 0x46, 0x53, 0x4f, 0x60, 0xca, 0xaa, 0xe6, 0x0e, 0xb0, 0x69, 0x8e, 0x9e, 0xa4, 0xe1, 0x6d, 0x75, 0x07, 0x3c, 0x0d, 0xc0, 0xe5, 0xa8, 0xf7, 0xb5, 0x28, 0xb8, 0x84, 0x1c, 0x0b, 0x06, 0xf0, 0x0f, 0xd1, 0x1e, 0xb0, 0xfe, 0xb6, 0x97, 0x05, 0xf6, 0x26, 0x83, 0xd2, 0x22, 0x2d, 0x0a, 0xab, 0x92, 0x2f, 0x51, 0x2e, 0x3b, 0xd9, 0xa1, 0x96, 0x3f, 0x57, 0xc5, 0x8d, 0x6f, 0xc7, 0xb3, 0x42, 0x0e, 0xee, 0x6f, 0xbc, 0xd8, 0x2a, 0x2d, 0x6e, 0x43, 0xa8, 0xb6, 0x0b, 0x05, 0xd7, 0x0c, 0x9b, 0xd6, 0x1d, 0x51, 0xcf, 0x77, 0xc8, 0xe5, 0x91, 0xf3, 0x47, 0xcf, 0xe0, 0x25, 0x9a, 0x5e, 0xdb, 0x7a, 0x07, 0x0f, 0x1b, 0xf9, 0x0f, 0xb2, 0x46, 0x80, 0xa0, 0xc9, 0xe1, 0x50, 0x8c, 0x31, 0x66, 0xcb, 0x3a, 0x04, 0x97, 0x7d, 0x9c, 0xbd, 0x11, 0x5a, 0x60, 0x9d, 0x24, 0x46, 0x6b, 0x4e, 0xe2, 0xdb, 0x83, 0xc7, 0x76, 0x66, 0x4b, 0x6f, 0xb8, 0x32, 0x75, 0x85, 0xfe, 0x0a, 0x33, 0xbf, 0x34, 0xf9, 0xee, 0x31, 0x2f, 0x54, 0x3b, 0x71, 0x3e, 0xfa, 0x0b, 0xf9, 0x02, 0xdb, 0x21, 0xcc, 0x80, 0xb7, 0xca, 0x5d, 0x75, 0x28, 0xc8, 0xac, 0xe9, 0xe3, 0x8f, 0xb2, 0x07, 0x3b, 0xb4, 0xff, 0x2c, 0xe7, 0xa2, 0xa2, 0x3e, 0x04, 0x8f, 0x49, 0x3f, 0x5e, 0xae, 0xa9, 0x22, 0xeb, 0xa6, 0x20, 0xdd, 0x98, 0x44, 0x99, 0xbf, 0x48, 0x6c, 0xb1, 0x04, 0x1a, 0x56, 0x18, 0xa7, 0xeb, 0xf7, 0x39, 0x77, 0x1d, 0xbc, 0x1d, 0x6d, 0x96, 0x7e, 0x8c, 0x3d, 0x0b, 0xb3, 0x76, 0x2b, 0x7e, 0xe1, 0x92, 0x20, 0x05, 0x59, 0x45, 0xfd, 0xce, 0x21, 0xc5, 0x2f, 0x60, 0x32, 0x7e, 0x84, 0x23, 0xe3, 0xb5, 0x3c, 0x23, 0xa6, 0x6b, 0x64, 0x11, 0xf2, 0x84, 0x5f, 0x8b, 0x80, 0x28, 0xc6, 0x9c, 0xba, 0x6a, 0x72, 0x87, 0x71, 0x27, 0xd6, 0xc0, 0xce, 0x31, 0x92, 0x3c, 0x8b, 0xad, 0x46, 0xea, 0x62, 0xba, 0xa4, 0x82, 0xc6, 0x54, 0xca, 0x7d, 0xd2, 0x77, 0xce, 0x64, 0x7f, 0x87, 0x9a, 0x4e, 0x19, 0xef, 0xfa, 0xa5, 0xf4, 0x09, 0xf3, 0x28, 0x5b, 0x3e, 0x57, 0x36, 0xc9, 0x6e, 0x96, 0x49, 0x5c, 0x91, 0xd7, 0xc1, 0x86, 0x9f, 0x47, 0xe3, 0x06, 0xae, 0xb1, 0x21, 0x16, 0x5a, 0x50, 0x9b, 0xe6, 0x6a, 0xe1, 0xe7, 0x4a, 0xb1, 0xfb, 0x0d, 0xaf, 0x31, 0xa3, 0xd6, 0x54, 0x87, 0x1c, 0x47, 0xb7, 0x83, 0xfc, 0x68, 0x4d, 0x16, 0x85, 0x4a, 0x75, 0x71, 0x31, 0x47, 0xaf, 0x6b, 0x8f, 0x8c, 0x09, 0x23, 0x4e, 0xd5, 0xdb, 0xe7, 0x97, 0x78, 0xb4, 0x55, 0xa1, 0xa5, 0x94, 0xc0, 0x7f, 0xec, 0x5c, 0xd6, 0x3c, 0xff, 0x82, 0x7f, 0x29, 0xba, 0x09, 0x08, 0x76, 0x60, 0xb1, 0x80, 0x00, 0x28, 0x6b, 0x62, 0x6a, 0xf8, 0x0f, 0x75, 0x6f, 0x70, 0x51, 0xf1, 0x76, 0x2a, 0xf2, 0xe3, 0x67, 0x40, 0x33, 0xd2, 0xbe, 0x0f, 0x8f, 0xa3, 0xde, 0x3b, 0xa9, 0xba, 0xa7, 0xf4, 0x84, 0x62, 0x4a, 0x77, 0xf2, 0x6f, 0x5c, 0xd7, 0x4f, 0x22, 0x2a, 0xfd, 0x6e, 0x4c, 0x4d, 0xed, 0xd4, 0xb6, 0x7e, 0x4c, 0x24, 0xc1, 0xab, 0x1f, 0xdb, 0x4a, 0x4a, 0xd6, 0x3d, 0xd0, 0xed, 0x89, 0x90, 0xd9, 0x16, 0x81, 0x87, 0x91, 0x4d, 0xfa, 0x01, 0xb5, 0x71, 0x27, 0xf4, 0xaf, 0x4c, 0x77, 0xa3, 0x03, 0x69, 0x17, 0x18, 0xe9, 0x2a, 0xb8, 0xce, 0x3b, 0x15, 0x92, 0xae, 0x92, 0x6f, 0xa9, 0x3c, 0xad, 0x0c, 0x4f, 0x13, 0x12, 0x65, 0xea, 0x8f, 0xf7, 0xeb, 0xf7, 0xc9, 0x62, 0x9b, 0x4f, 0xc8, 0x90, 0xd3, 0xa9, 0xf5, 0x94, 0x64, 0x61, 0xd0, 0x40, 0xe8, 0x78, 0xe2, 0x48, 0x56, 0xdb, 0xf2, 0xa5, 0xd3, 0xe8, 0x7c, 0x38, 0xcb, 0x2e, 0x5f, 0xb0, 0x41, 0x74, 0xd6, 0xad, 0x63, 0xfd, 0xa9, 0x25, 0x62, 0x0b, 0xa5, 0x08, 0x80, 0xa2, 0x49, 0x1f, 0x6b, 0x8e, 0xc2, 0x3a, 0xc9, 0xa8, 0x1a, 0x8a, 0x14, 0x54, 0xac, 0x4c, 0xa8, 0x4e, 0xdb, 0xa7, 0x1a, 0xa7, 0x03, 0xd8, 0xcc, 0x0a, 0xb0, 0x8c, 0xbe, 0x44, 0x0e, 0x8d, 0xa7, 0x03, 0xa1, 0xa1, 0x45, 0xde, 0x36, 0xb0, 0xf1, 0x96, 0x1a, 0x24, 0x76, 0x9c, 0x89, 0x95, 0x23, 0xd3, 0x69, 0xa6, 0x1f, 0x96, 0x39, 0x2a, 0xfd, 0xfd, 0x44, 0x8c, 0x90, 0x5c, 0x1a, 0x6d, 0x01, 0x0d, 0x40, 0x8e, 0x1e, 0x70, 0x27, 0xf1, 0xf5, 0x2f, 0x5b, 0x3b, 0xa2, 0xc7, 0xfd, 0x5d, 0x65, 0x44, 0x73, 0x73, 0xf8, 0x4b, 0x5e, 0xec, 0x1f, 0x5e, 0xcc, 0xec, 0x80, 0x5c, 0xb0, 0xee, 0xb5, 0x47, 0x8f, 0xae, 0xa0, 0x4a, 0x7b, 0x46, 0xfe, 0xfb, 0x45, 0x97, 0x3f, 0xdd, 0xef, 0xea, 0x96, 0x29, 0x60, 0xd7, 0x4c, 0xce, 0x5b, 0x67, 0x59, 0xb6, 0xb2, 0x75, 0x35, 0x4b, 0xb7, 0x5a, 0xec, 0x3a, 0xf4, 0xc9, 0x71, 0x76, 0x1c, 0xf7, 0x34, 0x81, 0x41, 0xff, 0xf6, 0xe7, 0x46, 0x86, 0xdc, 0x0b, 0x98, 0x9a, 0xc3, 0x25, 0x19, 0xe0, 0xd4, 0x8c, 0x5d, 0xef, 0x58, 0x31, 0x19, 0xf7, 0xcd, 0x6c, 0xd8, 0xa6, 0x39, 0xfc, 0xf0, 0x4c, 0xbe, 0x49, 0xb5, 0x3d, 0x6f, 0xeb, 0xec, 0x77, 0x62, 0x70, 0x83, 0x84, 0x06, 0x5a, 0x7f, 0xa2, 0xb7, 0x68, 0x35, 0x22, 0x90, 0x17, 0xbd, 0x0e, 0x81, 0x67, 0xa4, 0x0e, 0xa1, 0xe2, 0xe1, 0x8c, 0xc5, 0xdb, 0x0a, 0x17, 0x51, 0xf4, 0xc8, 0x05, 0x4e, 0xe3, 0x89, 0x5d, 0xbd, 0x75, 0x74, 0xf4, 0x2b, 0xd2, 0xa2, 0xd5, 0x86, 0x04, 0x8b, 0xe6, 0x2f, 0xb3, 0xbe, 0xc9, 0x50, 0x32, 0xd6, 0x01, 0x70, 0xc0, 0xa9, 0x56, 0x45, 0x07, 0xc2, 0x7a, 0xc9, 0xe9, 0x12, 0xec, 0x90, 0x7c, 0xe2, 0x1d, 0x58, 0x53, 0x0c, 0xd2, 0xe2, 0x00, 0x6b, 0xc9, 0x00, 0xd6, 0x90, 0x9f, 0xf0, 0xf4, 0xb6, 0xf1, 0xe8, 0x7f, 0xf8, 0xc2, 0xf2, 0x2e, 0xc2, 0x1c, 0xfa, 0x0c, 0x86, 0xfa, 0x25, 0x79, 0xb0, 0x66, 0x65, 0x72, 0xdb, 0xdf, 0x4b, 0x13, 0x45, 0xfd, 0x1c, 0x5a, 0x80, 0x58, 0x26, 0x2e, 0x6b, 0xa5, 0x54, 0xa0, 0x61, 0x22, 0x01, 0x70, 0xb0, 0x35, 0x0a, 0xd3, 0x4d, 0x4f, 0x27, 0x73, 0xc6, 0x17, 0x7b, 0xb8, 0x77, 0xc5, 0x69, 0x46, 0x01, 0xcb, 0xaa, 0xc7, 0xf8, 0xbb, 0x9c, 0xea, 0xdc, 0x65, 0xdd, 0xab, 0x4b, 0x3f, 0x19, 0xd6, 0x74, 0x0b, 0x20, 0xc6, 0xcf, 0xb3, 0x3c, 0x73, 0x0c, 0x78, 0xc1, 0xac, 0x49, 0x4b, 0xe5, 0xa0, 0x87, 0x7b, 0xd2, 0xa3, 0x5f, 0x91, 0xfa, 0x2f, 0xf1, 0x79, 0xab, 0x29, 0x1e, 0xe2, 0xe3, 0x66, 0xf7, 0xe6, 0x65, 0x6e, 0x74, 0xee, 0x0c, 0x80, 0x6a, 0xd0, 0x60, 0xd6, 0xb7, 0x3b, 0x67, 0x29, 0xbf, 0x55, 0xbe, 0x78, 0x1d, 0xa2, 0xe7, 0x06, 0x92, 0x28, 0xe5, 0xa2, 0x41, 0xd1, 0x06, 0x2a, 0x1f, 0x10, 0x01, 0x52, 0xa5, 0xc7, 0x40, 0xa2, 0xc8, 0x69, 0x7f, 0xbe, 0x2a, 0x5c, 0x96, 0xea, 0x92, 0xa1, 0x93, 0xcd, 0x9a, 0xb6, 0x0c, 0x75, 0xa7, 0xbb, 0xb4, 0x9c, 0x1e, 0xd5, 0x2b, 0x2a, 0xd5, 0xd0, 0x1b, 0xfb, 0xc8, 0x08, 0x80, 0xe1, 0x0e, 0x89, 0x47, 0xed, 0x0b, 0x75, 0x1b, 0xea, 0xe6, 0xa6, 0x7c, 0x2b, 0x3d, 0x95, 0x11, 0x87, 0x18, 0x7a, 0x3f, 0xa1, 0x1c, 0xb5, 0xfa, 0x6d, 0x02, 0x6d, 0xdb, 0xef, 0x47, 0x77, 0x73, 0x46, 0x24, 0x79, 0xe0, 0xea, 0xc0, 0x4f, 0x9d, 0x32, 0xa5, 0xad, 0x9f, 0x19, 0x70, 0x06, 0x9d, 0x41, 0xcd, 0xad, 0xaf, 0x38, 0xa3, 0x3b, 0x1a, 0xfb, 0x8c, 0x30, 0x6a, 0xb8, 0x88, 0xdd, 0xc2, 0xd8, 0xf2, 0x81, 0x71, 0x3d, 0xb3, 0xb2, 0xc5, 0xc8, 0xb5, 0xfe, 0x24, 0x1f, 0x9b, 0xd3, 0x58, 0xad, 0xaf, 0x9c, 0x2b, 0xea, 0x1b, 0x2d, 0x34, 0xdc, 0x5d, 0x61, 0xf0, 0xde, 0xf5, 0x01, 0x15, 0xa0, 0x60, 0xe8, 0x22, 0x6f, 0x4a, 0x65, 0x3b, 0xb6, 0x00, 0xe1, 0x34, 0xc5, 0x24, 0xc2, 0xec, 0xd2, 0xa4, 0x8f, 0xdc, 0x3d, 0xec, 0x54, 0xef, 0x19, 0x5b, 0x48, 0x94, 0xe7, 0xf4, 0xad, 0x12, 0xa4, 0x57, 0xf8, 0x1d, 0x07, 0xef, 0x32, 0xa6, 0x04, 0x6c, 0x9e, 0xf7, 0x94, 0x74, 0x9c, 0xfe, 0xb8, 0x95, 0xcd, 0xe9, 0xbb, 0x7f, 0x78, 0xf4, 0xb8, 0x70, 0x2c, 0x7f, 0x5d, 0xef, 0xa7, 0x64, 0xee, 0xbd, 0xf7, 0x87, 0x8d, 0x09, 0xdf, 0xaf, 0xb8, 0xe3, 0x7c, 0x94, 0x13, 0xf3, 0x28, 0x39, 0x68, 0x6b, 0x9f, 0x7b, 0xec, 0x3a, 0x61, 0xea, 0xc4, 0x83, 0x57, 0xd9, 0xc7, 0x4d, 0xb8, 0xb1, 0x86, 0x7c, 0x2e, 0x8b, 0x89, 0x00, 0x35, 0xfd ],
- const [ 0x56, 0xee, 0x7c, 0xbb, 0x74, 0x5a, 0x2b, 0x1f, 0x3a, 0x77, 0xc8, 0xa9, 0xba, 0xde, 0x1e, 0x49, 0x34, 0xa0, 0x86, 0x45, 0xe7, 0xd0, 0x5a, 0xdc, 0x27, 0x42, 0xac, 0x2a, 0xb0, 0x93, 0x38, 0x4b, 0x3a, 0x69, 0x98, 0xc3, 0x4d, 0xfc, 0xb7, 0x1d, 0x57, 0xd6, 0x88, 0xd3, 0xfc, 0xd7, 0xf8, 0x6e, 0xad, 0x7b, 0x21, 0xee, 0x7c, 0x60, 0xc0, 0x6c, 0x2e, 0x02, 0xe9, 0xfe, 0x92, 0xc9, 0xf9, 0xdb, 0x12, 0x47, 0xcd, 0xc0, 0x88, 0xba, 0x31, 0x92, 0x53, 0xd9, 0x9b, 0x44, 0xa9, 0xcd, 0x1a, 0xfb, 0x2e, 0x7d, 0x89, 0x70, 0xc6, 0x0e, 0x08, 0x96, 0xa8, 0xaa, 0xad, 0x7e, 0xb5, 0x81, 0x76, 0x77, 0x07, 0x0e, 0x82, 0x79, 0xcc, 0x9c, 0x81, 0xc4, 0x55, 0x08, 0x6a, 0xc4, 0x6a, 0xc8, 0x6c, 0x38, 0xe1, 0x2c, 0x26, 0x93, 0x6f, 0xe4, 0x1a, 0xa2, 0xbd, 0xc3, 0x5f, 0x70, 0xbe, 0xc3, 0x97, 0x67, 0x41, 0x48, 0x21, 0xb7, 0xc2, 0xa9, 0x90, 0xfc, 0x86, 0xec, 0x5b, 0x1b, 0xe7, 0xd1, 0xd5, 0x6c, 0xec, 0x13, 0x60, 0x1f, 0x1c, 0xea, 0xde, 0xd8, 0x94, 0xd4, 0x69, 0x9d, 0x58, 0x95, 0x44, 0xf2, 0xe7, 0x7c, 0x11, 0x42, 0x12, 0xe9, 0x44, 0x81, 0x0d, 0x0c, 0xd7, 0x10, 0xc7, 0xef, 0x40, 0xe1, 0x77, 0xb7, 0xa0, 0xdb, 0x77, 0x27, 0x3d, 0x80, 0x56, 0x65, 0x32, 0xcd, 0x29, 0x01, 0x65, 0x61, 0x21, 0x33, 0xba, 0xe2, 0x63, 0x64, 0x86, 0x9d, 0x13, 0xf0, 0x47, 0x6c, 0xb2, 0x2b, 0x92, 0xdd, 0xab, 0xa2, 0x4c, 0x90, 0x28, 0xa3, 0x1d, 0xe1, 0x2a, 0xff, 0x22, 0xc7, 0xd9, 0x0e, 0xe2, 0xfc, 0x19, 0xf4, 0x84, 0x5f, 0x5d, 0x23, 0x3f, 0x96, 0xc0, 0x21, 0x11, 0xf7, 0x52, 0x8c, 0xb4, 0xa9, 0xaf, 0x5b, 0xce, 0x06, 0xd7, 0x66, 0x68, 0x44, 0x39, 0x29, 0xa1, 0x55, 0x11, 0xc4, 0xa3, 0x0b, 0xf4, 0x47, 0xd7, 0x80, 0xa9, 0x2d, 0x55, 0xb5, 0x3b, 0x26, 0x9f, 0x79, 0x4c, 0x1a, 0x8e, 0x8d, 0xac, 0x6a, 0x8c, 0x05, 0x2b, 0x79, 0x04, 0xf1, 0xab, 0x6b, 0x17, 0x3d, 0x79, 0x2c, 0x91, 0xd6, 0xdd, 0xb4, 0x1b, 0x0e, 0xef, 0x8a, 0xb2, 0x42, 0xad, 0x87, 0x57, 0xba, 0x4b, 0xdd, 0x08, 0xd0, 0xca, 0x58, 0xf0, 0x55, 0xcc, 0xe3, 0xdb, 0x30, 0xa7, 0x4d, 0xec, 0x48, 0xb8, 0x4d, 0x92, 0xa5, 0xfa, 0xc4, 0xb8, 0xd2, 0xd6, 0x43, 0x3c, 0x85, 0x3d, 0xcd, 0xa3, 0x81, 0xf5, 0xde, 0x0b, 0xbc, 0x30, 0xab, 0x60, 0xbd, 0x63, 0xac, 0xd3, 0x49, 0x55, 0x58, 0x88, 0x3e, 0x77, 0x30, 0x8f, 0xbf, 0x73, 0xfe, 0x16, 0x91, 0x07, 0x5f, 0xdd, 0xc5, 0x14, 0x7f, 0xea, 0x98, 0xf2, 0x24, 0x7d, 0x97, 0x07, 0xee, 0x46, 0x07, 0x98, 0xdd, 0xd6, 0x83, 0xde, 0x13, 0x54, 0xe7, 0x5d, 0xdb, 0x71, 0x6d, 0x71, 0xeb, 0x9d, 0x16, 0x2a, 0xe6, 0x7c, 0x4c, 0x59, 0x25, 0x93, 0xc5, 0xeb, 0xb7, 0x48, 0xaa, 0x76, 0xa6, 0x09, 0xf9, 0x12, 0x7c, 0xcb, 0x28, 0x6a, 0x06, 0xb6, 0x0b, 0x13, 0x58, 0x1e, 0xf7, 0x1c, 0x11, 0xb6, 0x28, 0xe6, 0xe1, 0x00, 0x60, 0x35, 0x48, 0x08, 0xd1, 0x88, 0xa0, 0x52, 0x3d, 0xa6, 0x5d, 0x11, 0x5c, 0x7a, 0x94, 0x99, 0x7e, 0x20, 0xba, 0x17, 0x71, 0x40, 0xaf, 0x80, 0xa5, 0x9b, 0xfa, 0xc7, 0x8e, 0xe3, 0x57, 0x53, 0x4a, 0xd0, 0x6f, 0xb0, 0x84, 0x70, 0xe6, 0x85, 0x98, 0xbf, 0x9a, 0xc6, 0xf7, 0x77, 0x2a, 0x2a, 0xce, 0x29, 0xb6, 0xe0, 0xe2, 0x8d, 0xe6, 0x7e, 0xbe, 0x17, 0x2e, 0x3a, 0x11, 0xca, 0x50, 0x5c, 0x52, 0x51, 0x22, 0xf3, 0xa5, 0x4c, 0x91, 0xc7, 0x02, 0xe8, 0xe6, 0x90, 0x94, 0xb2, 0x48, 0x65, 0x5f, 0xad, 0x82, 0x77, 0x26, 0xa1, 0x07, 0xff, 0x8c, 0xb7, 0x33, 0x75, 0x79, 0x43, 0xd4, 0x03, 0xbf, 0xe1, 0xe9, 0x39, 0xfe, 0xc3, 0xaa, 0x02, 0xc5, 0x49, 0xc8, 0xd7, 0xf9, 0xd2, 0xf5, 0x32, 0x7b, 0xd3, 0xa7, 0x46, 0x05, 0x26, 0x19, 0xed, 0x55, 0xa4, 0x93, 0xe2, 0x8e, 0xf5, 0xec, 0x30, 0xdb, 0xa7, 0x4d, 0xea, 0x55, 0x7e, 0x37, 0x1d, 0x27, 0x0b, 0xc8, 0x03, 0xef, 0x80, 0x3a, 0x79, 0x68, 0xc3, 0xac, 0xb3, 0x47, 0xc1, 0x25, 0x2f, 0x62, 0x05, 0xd6, 0xe7, 0x17, 0x89, 0x9f, 0xcb, 0xec, 0xcc, 0xd5, 0x6e, 0x73, 0x24, 0x43, 0x00, 0x71, 0x56, 0x6e, 0x7c, 0x3e, 0x64, 0x1e, 0x22, 0x6f, 0xa6, 0x19, 0x28, 0xb3, 0x1c, 0x32, 0xad, 0xfb, 0x03, 0x82, 0xee, 0xde, 0xa6, 0xf6, 0xbc, 0x3b, 0x77, 0x0a, 0x2e, 0x20, 0x5e, 0xd3, 0x93, 0xea, 0x51, 0x43, 0xaa, 0xae, 0x25, 0xa9, 0x16, 0xd8, 0xa4, 0x77, 0x0c, 0x12, 0xdf, 0x48, 0x4f, 0x68, 0xc6, 0x21, 0x5e, 0xa9, 0xf5, 0xf7, 0xeb, 0x10, 0xd1, 0x72, 0x90, 0x23, 0xd4, 0xf1, 0xbe, 0xdc, 0x25, 0xce, 0xf6, 0x07, 0x6c, 0xe3, 0x3b, 0xeb, 0xe4, 0x4d, 0xc7, 0x2c, 0xb2, 0x6f, 0xfd, 0xf0, 0x75, 0x3a, 0x9f, 0x41, 0x1e, 0xac, 0x41, 0xb3, 0x02, 0x97, 0xfd, 0x46, 0x2d, 0xa4, 0x69, 0x8d, 0xf9, 0x97, 0xc6, 0x10, 0xe0, 0xd5, 0x7a, 0xf0, 0x8f, 0x23, 0xc1, 0xc9, 0x3b, 0xb0, 0x9f, 0xdc, 0x38, 0x56, 0x19, 0x6e, 0xc8, 0x1d, 0xa4, 0x6b, 0x31, 0x01, 0xde, 0x4f, 0x12, 0xf5, 0x7c, 0x46, 0xf6, 0x27, 0x83, 0x92, 0x2a, 0x86, 0xbc, 0x2e, 0xcc, 0x82, 0x61, 0xb1, 0x25, 0x12, 0x1d, 0x74, 0x39, 0xfc, 0x34, 0xf7, 0x9b, 0x51, 0xfd, 0x81, 0x86, 0x36, 0x99, 0x07, 0x2a, 0xea, 0xdf, 0x4f, 0x44, 0x05, 0x96, 0x56, 0xf1, 0xfe, 0xe7, 0xee, 0xc4, 0xf0, 0x11, 0xab, 0x16, 0x9e, 0x5f, 0x00, 0x9d, 0xb4, 0x58, 0xa6, 0x41, 0x50, 0x35, 0x3d, 0x2a, 0xc0, 0x98, 0x36, 0x1e, 0x8e, 0x7a, 0xf0, 0x0a, 0xb9, 0x65, 0x21, 0xde, 0x46, 0xe4, 0x78, 0x9e, 0xf7, 0x39, 0x81, 0xb6, 0x5b, 0x4d, 0xc8, 0x8f, 0x07, 0xed, 0x41, 0x5f, 0x22, 0x32, 0xe7, 0x45, 0x27, 0x41, 0xa4, 0x95, 0xe6, 0x35, 0x71, 0x71, 0xcc, 0x5a, 0xbe, 0x99, 0x65, 0x9c, 0x14, 0x83, 0x1f, 0x3f, 0xf9, 0xaf, 0x51, 0xd0, 0x14, 0x35, 0x7b, 0x5b, 0x91, 0xa0, 0xd0, 0xde, 0xc7, 0xfe, 0xf1, 0xfe, 0x18, 0x38, 0xfc, 0xf9, 0x19, 0xa0, 0xc5, 0xdc, 0xf3, 0xc9, 0x63, 0xf6, 0x0a, 0x9b, 0xef, 0x8c, 0xdc, 0xa6, 0x88, 0xce, 0x2b, 0xb7, 0x9a, 0x0a, 0x5e, 0xa9, 0x60, 0x20, 0x25, 0x7e, 0xa8, 0x36, 0x5c, 0xaf, 0xd7, 0xac, 0x32, 0xbf, 0x2c, 0x52, 0x8a, 0x16, 0x49, 0xd9, 0xa1, 0x0d, 0xef, 0x88, 0xf1, 0x46, 0x09, 0x30, 0x56, 0x3e, 0xec, 0x62, 0x70, 0x25, 0xdd, 0xdf, 0x48, 0xed, 0xd3, 0x50, 0x36, 0xa1, 0x7f, 0x38, 0x02, 0xf8, 0x8a, 0x26, 0x49, 0x2a, 0x1e, 0x2f, 0x22, 0x02, 0xa7, 0x9b, 0x02, 0x34, 0xdb, 0xdf, 0xdd, 0xf2, 0xf8, 0xcc, 0x8e, 0xba, 0x4c, 0x05, 0x79, 0x72, 0xfb, 0xb6, 0x6f, 0xb6, 0xfd, 0x83, 0xd2, 0x71, 0x66, 0xbf, 0xf9, 0xaa, 0xea, 0xdf, 0xd5, 0xa1, 0xa0, 0x2e, 0xd5, 0x1b, 0x06, 0xc2, 0x08, 0xfa, 0x46, 0xae, 0x82, 0x10, 0xb7, 0x79, 0x00, 0x35, 0xa7, 0xcf, 0xcf, 0x97, 0x58, 0x77, 0xe9, 0x52, 0x48, 0x85, 0x62, 0x41, 0xb5, 0xd1, 0x02, 0x13, 0x61, 0xa7, 0x34, 0xa1, 0x93, 0xc0, 0x1e, 0x7e, 0x5e, 0x71, 0x12, 0xd0, 0x25, 0x23, 0x25, 0x5f, 0x5f, 0x03, 0x1d, 0xec, 0x98, 0xfb, 0x91, 0xc4, 0xb8, 0xe0, 0x4b, 0x95, 0x88, 0xed, 0xf1, 0x7f, 0x72, 0x70, 0xe5, 0x6e, 0x89, 0xc3, 0x69, 0xa8, 0xc9, 0x7e, 0x07, 0xa2, 0x9f, 0xeb, 0x30, 0x18, 0xac, 0xba, 0x23, 0x5c, 0xc6, 0xf6, 0x10, 0xef, 0x3f, 0x38, 0x7d, 0x4e, 0x6a, 0x1b, 0xea, 0x0e, 0x5c, 0xef, 0xb0, 0x2b, 0xf0, 0xb2, 0x2f, 0x9e, 0x0e, 0x3c, 0x28, 0x2d, 0x2c, 0xb9, 0x68, 0x87, 0x14, 0x5c, 0xa7, 0x90, 0xe8, 0x52, 0xaf, 0xfa, 0x64, 0xf5, 0xc1, 0x15, 0x64, 0x43, 0x34, 0xe8, 0xa6, 0x8e, 0x5f, 0x80, 0xd0, 0x74, 0xb9, 0x88, 0xb5, 0x12, 0x3f, 0x1a, 0xd4, 0x75, 0x16, 0xd5, 0x21, 0x51, 0x72, 0x30, 0x09, 0xf6, 0xb6, 0x0d, 0xb0, 0x7f, 0xdd, 0x92, 0x7d, 0x4d, 0x18, 0x34, 0xd8, 0xb4, 0xb8, 0x14, 0x32, 0xf3, 0x4f, 0x8f, 0x46, 0x6a, 0x12, 0x10, 0x9f, 0x07, 0x82, 0x29, 0x5b, 0x02, 0x4c, 0xe3, 0x2e, 0xca, 0x6d, 0x52, 0xaa, 0x3f, 0x99, 0x6c, 0xbd, 0x21, 0xde, 0x1b, 0x7b, 0xc8, 0x85, 0x90, 0x1d, 0x16, 0x39, 0xdb, 0x4a, 0xab, 0x6b, 0xb8, 0x96, 0x57, 0xf4, 0xac, 0x49, 0xd5, 0xfc, 0x51, 0x61, 0xb6, 0x1b, 0xee, 0xda, 0x9b, 0xbf, 0x4b, 0x2c, 0xa7, 0xce, 0xc4, 0x16, 0x34, 0x8c, 0x9b, 0x9a, 0xc5, 0xbe, 0x93, 0x49, 0x3c, 0x10, 0xba, 0xc0, 0x4e, 0xb4, 0x86, 0x73, 0x33, 0x4c, 0x23, 0xa9, 0xa2, 0x0a, 0x0c, 0xc8, 0xfc, 0x15, 0xd9, 0xd3, 0xc8, 0x2f, 0x57, 0x31, 0x5f, 0x96, 0xde, 0xb0, 0xe8, 0x27, 0xdf, 0xc9, 0x87, 0xc9, 0xbd, 0x26, 0xd2, 0x09, 0xde, 0x61, 0x85, 0x02, 0x01, 0x0f, 0x76, 0x80, 0xd2, 0xfd, 0xcb, 0x65, 0xbb, 0xb9, 0x6a, 0x4b, 0xfe, 0x54, 0xb1, 0x6a, 0x01, 0x67, 0x68, 0xbc, 0xe8, 0x54, 0xf3, 0x60, 0x69, 0xce, 0xcc, 0x3d, 0xdc, 0x9c, 0x31, 0xe7, 0x92, 0x99, 0x1a, 0xc6, 0x68, 0x00, 0x6e, 0x75, 0x9c, 0xe6, 0x76, 0x68, 0xdf, 0x08, 0x92, 0xd2, 0xab, 0xc7, 0x2b, 0xc5, 0xd6, 0x71, 0xe8, 0x9b, 0x68, 0xc2, 0x25, 0x96, 0xaa, 0xab, 0xa1, 0xc3, 0x7f, 0x51, 0x76, 0x24, 0xf7, 0x59, 0x4f, 0x0d, 0x22, 0x63, 0xd5, 0xcf, 0x22, 0xd4, 0x6a, 0x94, 0x84, 0xd9, 0x1a, 0x8a, 0xd1, 0xa9, 0xce, 0x44, 0x5f, 0x0a, 0xc3, 0x5d, 0x6d, 0x16, 0x3b, 0x5e, 0x6f, 0x3f, 0x73, 0xe1, 0xa7, 0x91, 0xd4, 0xf7, 0xf5, 0x37, 0x6d, 0xc8, 0xf0, 0x41, 0xa1, 0x79, 0x35, 0xa4, 0x1d, 0x53, 0x00, 0x82, 0x0e, 0x21, 0xf9, 0xac, 0x90, 0xd9, 0x50, 0x66, 0x69, 0x7f, 0x0b, 0x6a, 0xf7, 0x47, 0x9f, 0x2f, 0x67, 0xfa, 0xbe, 0x6a, 0x28, 0x9a, 0x71, 0xd6, 0x9f, 0x49, 0x66, 0x30, 0x1d, 0x67, 0x8b, 0x86, 0x0e, 0xfb, 0xdc, 0xb2, 0x73, 0x54, 0x78, 0x22, 0x92, 0xf0, 0xfb, 0xda, 0xeb, 0x9c, 0x08, 0xbb, 0x6f, 0xdd, 0x25, 0x05, 0xed, 0x8f, 0xcc, 0x1b, 0xcd, 0xcc, 0xbe, 0x86, 0x00, 0x0f, 0x9b, 0x3d, 0x37, 0x99, 0xb0, 0x23, 0x53, 0x14, 0x10, 0xd2, 0x1d, 0x77, 0xe6, 0x97, 0x38, 0x29, 0x09, 0xbd, 0x54, 0x69, 0xd1, 0x0f, 0xa3, 0xed, 0x2a, 0x98, 0x91, 0xc9, 0xe6, 0xad, 0xb0, 0x93, 0x58, 0x2e, 0xf1, 0xc5, 0x1e, 0x08, 0x1a, 0x62, 0x3e, 0xfe, 0x74, 0xdd, 0x75, 0xaa, 0xc4, 0x36, 0xcb, 0xbe, 0x7d, 0x66, 0x6b, 0x90, 0x34, 0xfd, 0xb2, 0xd6, 0x54, 0x0a, 0x86, 0xad, 0x13, 0x3b, 0xe9, 0xe1, 0xa5, 0x45, 0xcd, 0x68, 0xaf, 0x86, 0x2a, 0x2f, 0xfe, 0xe9, 0x4f, 0x1a, 0x79, 0x0b, 0x76, 0x46, 0x54, 0x9c, 0x9a, 0x91, 0x87, 0x07, 0x8d, 0x5c, 0x7f, 0x55, 0x45, 0x8f, 0x13, 0x4e, 0x76, 0xde, 0xb9, 0xe2, 0x67, 0x4b, 0xfa, 0xc8, 0xfe, 0xec, 0x23, 0x65, 0x1c, 0xef, 0x3e, 0xef, 0x31, 0xdb, 0x40, 0xd2, 0x07, 0x18, 0x84, 0x53, 0xe2, 0xb2, 0x78, 0x73, 0xcb, 0x5a, 0x97, 0x16, 0x29, 0xae, 0x97, 0x64, 0x91, 0xba, 0xe3, 0x70, 0xdf, 0xbe, 0x4b, 0x17, 0x86, 0x31, 0xfa, 0x2c, 0x24, 0x07, 0xa9, 0xd2, 0x5a, 0x30, 0x13, 0x28, 0xda, 0x61, 0xa9, 0x2c, 0xc1, 0x16, 0x86, 0xd9, 0x28, 0xd8, 0xa5, 0x93, 0xf5, 0xbb, 0x52, 0xc5, 0xf7, 0x2c, 0xde, 0xc9, 0x33, 0xe9, 0x97, 0x08, 0x78, 0x51, 0xf7, 0x62, 0x3a, 0xde, 0x1c, 0xd0, 0x9d, 0xf0, 0x78, 0x47, 0xcf, 0xcc, 0xca, 0xe0, 0x9b, 0xe4, 0x4d, 0x37, 0x3b, 0x59, 0x2f, 0x10, 0x6e, 0xbe, 0x44, 0x41, 0xcb, 0x1f, 0xfc, 0xcc, 0x55, 0x41, 0x93, 0x4b, 0x4f, 0x2c, 0x87, 0x91, 0x52, 0xe7, 0x4f, 0x8e, 0x9c, 0x83, 0x4a, 0x73, 0xab, 0x5a, 0xf6, 0x17, 0x0b, 0x99, 0x62, 0x99, 0x6c, 0xfc, 0xe6, 0x48, 0xf7, 0xd9, 0x11, 0xbf, 0xe2, 0x60, 0xe3, 0x54, 0x42, 0x21, 0x3c, 0xb4, 0x21, 0xcf, 0x95, 0xc7, 0xd1, 0x43, 0xee, 0xda, 0x7f, 0xc3, 0x07, 0xfc, 0x0b, 0x85, 0xd3, 0xa8, 0x18, 0x6f, 0x2a, 0xa5, 0x5f, 0x21, 0xbe, 0x2b, 0x48, 0x35, 0x50, 0x47, 0xbb, 0xc5, 0x24, 0x80, 0x33, 0x2e, 0xb2, 0xbb, 0x15, 0x14, 0x9e, 0x5c, 0x41, 0xa7, 0xea, 0xae, 0xe6, 0x24, 0x6b, 0x85, 0x9a, 0x9e, 0x79, 0x22, 0xaa, 0xfe, 0xeb, 0x56, 0xae, 0x49, 0x43, 0xeb, 0x61, 0x21, 0x25, 0x3f, 0xb0, 0x8f, 0x0e, 0x32, 0x11, 0xff, 0x42, 0x42, 0x16, 0x8c, 0x06, 0xf5, 0x42, 0x7e, 0x10, 0x78, 0x1b, 0x11, 0x3c, 0x85, 0x80, 0x79, 0x80, 0x89, 0x3d, 0x22, 0x22, 0x07, 0xdd, 0x3c, 0x28, 0x37, 0xc0, 0x77, 0x11, 0xf4, 0x6d, 0x0b, 0xc2, 0xd5, 0x28, 0xfc, 0xc3, 0x99, 0xc8, 0x9c, 0xab, 0xc8, 0xc3, 0x51, 0xd9, 0x97, 0x8b, 0x98, 0x65, 0x0c, 0x1d, 0x4a, 0x56, 0x64, 0xd6, 0x1f, 0x16, 0xb2, 0x89, 0x70, 0x23, 0xc8, 0xd0, 0x41, 0x06, 0x5a, 0x9f, 0x7e, 0x89, 0x61, 0x1f, 0x85, 0x25, 0xbe, 0xb9, 0xe5, 0xba, 0x20, 0x70, 0x65, 0x83, 0x27, 0x75, 0x49, 0x48, 0xca, 0xf5, 0xd0, 0xd5, 0xf6, 0x36, 0x01, 0xac, 0x77, 0xe2, 0xa7, 0xf7, 0x1c, 0xa3, 0x9b, 0xc0, 0x16, 0xef, 0x41, 0x64, 0xa2, 0x26, 0x55, 0x45, 0xe8, 0xda, 0xe8, 0xc0, 0x22, 0x6d, 0xa5, 0x5f, 0x00, 0xe2, 0x59, 0x4f, 0x4b, 0xed, 0xb3, 0x14, 0xca, 0x4c, 0x48, 0x7b, 0x62, 0x5a, 0xd9, 0xd0, 0x80, 0xe2, 0xd9, 0x52, 0xbc, 0x31, 0x2a, 0xe4, 0xb6, 0x6f, 0x28, 0x05, 0x44, 0x2f, 0xe8, 0x02, 0xd0, 0x44, 0xc1, 0x6a, 0xfb, 0xd6, 0x0c, 0xc3, 0x86, 0xb6, 0x29, 0x7b, 0x73, 0xef, 0xc3, 0x22, 0x67, 0x9e, 0x54, 0xd6, 0x53, 0x03, 0xeb, 0xfe, 0x53, 0xd7, 0x2d, 0x3b, 0xd7, 0xe0, 0x99, 0x9b, 0x00, 0xc4, 0x11, 0x10, 0x4d, 0x1b, 0x96, 0x21, 0x76, 0xc7, 0x54, 0xe0, 0x98, 0x88, 0xde, 0x1c, 0x93, 0xcb, 0xba, 0xd7, 0xb0, 0xc3, 0x20, 0xfa, 0x88, 0xbb, 0xff, 0x48, 0x21, 0xab, 0x41, 0x91, 0x59, 0x09, 0x50, 0x28, 0x88, 0xe1, 0xd9, 0x97, 0x61, 0x28, 0xd0, 0x90, 0x19, 0x4e, 0xb4, 0x27, 0xcc, 0x12, 0x14, 0x3f, 0x1c, 0x9a, 0x52, 0x42, 0x1b, 0xc3, 0xa7, 0x16, 0x6b, 0xb6, 0x67, 0x4c, 0xa3, 0xbc, 0x86, 0x9a, 0xf5, 0x53, 0x5c, 0x8b, 0x0e, 0x81, 0xa5, 0x75, 0x3e, 0x68, 0xcc, 0xac, 0xd9, 0x1b, 0x69, 0xf5, 0xdd, 0xb0, 0x08, 0x3d, 0xd4, 0x96, 0x2c, 0x8b, 0xfc, 0x29, 0x93, 0x34, 0xa6, 0x84, 0xbc, 0x4e, 0xdc, 0x96, 0xa7, 0x66, 0x46, 0x79, 0xdc, 0x76, 0x4f, 0xfe, 0xae, 0x11, 0x83, 0x8d, 0xc1, 0xe1, 0x3b, 0x2c, 0xca, 0x53, 0x7d, 0xdd, 0x96, 0x91, 0x1e, 0x2d, 0x4e, 0xb1, 0x29, 0x0a, 0xf9, 0x2b, 0x85, 0xd5, 0x42, 0x91, 0xd1, 0xb8, 0x7b, 0x7a, 0x93, 0x3a, 0xe3, 0xc0, 0x92, 0x10, 0x24, 0xeb, 0x80, 0x36, 0x20, 0xec, 0xdc, 0x3f, 0xed, 0x0f, 0x17, 0xea, 0x1e, 0x2b, 0xf6, 0xf5, 0x45, 0x1b, 0x37, 0x36, 0xb6, 0x72, 0x77, 0xe7, 0x8d, 0x6b, 0x53, 0x42, 0xf2, 0x1f, 0xce, 0x4e, 0x9b, 0xfb, 0xf2, 0xf8, 0x93, 0x70, 0xbb, 0x65, 0x3a, 0xec, 0x30, 0x87, 0x8e, 0x0a, 0xd3, 0xee, 0xa8, 0x06, 0x3b, 0xe1, 0x89, 0x73, 0x00, 0xae, 0x17, 0x30, 0xd7, 0x3e, 0x63, 0x98, 0xfe, 0xec, 0x2d, 0xf9, 0xdb, 0x97, 0xaa, 0x47, 0xe0, 0xf6, 0x85, 0x12, 0xb1, 0x2c, 0x23, 0xb6, 0x89, 0x9d, 0x2b, 0xd2, 0xda, 0xff, 0x46, 0xfb, 0x33, 0xb4, 0x23, 0xb1, 0x67, 0x57, 0xbf, 0x91, 0xec, 0x95, 0xe3, 0xcd, 0x81, 0x3e, 0xee, 0xda, 0x13, 0x9b, 0xd4, 0x68, 0xe2, 0x03, 0x67, 0x97, 0xe0, 0xa9, 0xd5, 0x68, 0x59, 0xb8, 0x72, 0x71, 0xd9, 0xa2, 0xb8, 0xd6, 0x4b, 0xb4, 0x8c, 0x74, 0x5e, 0xef, 0xc3, 0x5f, 0x2d, 0x13, 0xe5, 0x8f, 0x1e, 0xfc, 0x31, 0xd6, 0x0a, 0x31, 0xe1, 0x15, 0x9f, 0xbb, 0xaf, 0xb0, 0x03, 0x33, 0x97, 0x3f, 0xba, 0x1f, 0xdf, 0x87, 0xca, 0x7f, 0x55, 0xa8, 0x1d, 0xa2, 0xd8, 0x97, 0x26, 0x3e, 0x19, 0xcf, 0xc8, 0xc0, 0xa3, 0x44, 0x73, 0xe1, 0x19, 0x99, 0x90, 0x7a, 0xbf, 0x92, 0x1f, 0x99, 0x3c, 0xcc, 0x9e, 0xd4, 0x9f, 0xac, 0x2d, 0xdd, 0x9f, 0x95, 0xf1, 0x57, 0x27, 0x5e, 0xb6, 0xe8, 0x12, 0x03, 0xd8, 0x90, 0x33, 0x9a, 0x63, 0x39, 0x98, 0x89, 0x79, 0x8f, 0x0f, 0xf7, 0xf4, 0x11, 0xea, 0x80, 0x4d, 0x68, 0x00, 0x2d, 0xbd, 0xf8, 0xf4, 0xa3, 0xa1, 0xb6, 0xba, 0x9a, 0x23, 0x39, 0x56, 0x91, 0x17, 0x13, 0xe7, 0xc0, 0x23, 0x61, 0xe5, 0x4f, 0x23, 0xa1, 0xa7, 0xc5, 0xcb, 0xc4, 0x28, 0xc3, 0x8e, 0x84, 0x0a, 0xf2, 0xbf, 0xf8, 0xdb, 0x3a, 0xf7, 0x66, 0x98, 0x35, 0xb6, 0x58, 0x6f, 0xe3, 0x4d, 0xf2, 0xc9, 0x9f, 0xfb, 0x82, 0x88, 0x51, 0x56, 0x59, 0x8d, 0xe6, 0xec, 0xda, 0x7e, 0xfd, 0x2b, 0xd0, 0xc6, 0xe3, 0x7e, 0x05, 0xdd, 0xc2, 0xb9, 0x10, 0xc9, 0x15, 0xb7, 0x6e, 0xe5, 0x5f, 0x41, 0xd4, 0xe1, 0x1d, 0x32, 0xc4, 0x0a, 0xf9, 0xd9, 0x5f, 0xcb, 0x40, 0x9f, 0x7a, 0x74, 0x96, 0xea, 0xf3, 0x3b, 0xe9, 0x41, 0x45, 0x81, 0xa3, 0xb0, 0x5b, 0x56, 0x24, 0x6e, 0xa2, 0x3e, 0x6f, 0xbd, 0x62, 0x35, 0x23, 0x12, 0x4e, 0xf2, 0xae, 0x76, 0x5a, 0x69, 0xbd, 0x2c, 0xcc, 0x93, 0xf6, 0x94, 0x96, 0x71, 0xea, 0x4f, 0xe3, 0x4f, 0x45, 0xa4, 0xf0, 0x46, 0x48, 0x22, 0x1d, 0x04, 0x7a, 0x87, 0x44, 0xd0, 0x9a, 0xe1, 0x49, 0xc8, 0xd7, 0xf3, 0xf2, 0x6d, 0x44, 0xda, 0xf9, 0x62, 0x86, 0xf1, 0x60, 0x71, 0xcf, 0xf1, 0x05, 0xcf, 0x11, 0x5d, 0x76, 0xa1, 0x6b, 0x1d, 0x06, 0xbe, 0xe8, 0x68, 0x21, 0xb7, 0x68, 0xe8, 0xdc, 0x15, 0xde, 0x19, 0xd0, 0xe1, 0xbc, 0xf3, 0x29, 0x6a, 0xac, 0xc8, 0xfa, 0x42, 0x81, 0x6f, 0xd4, 0x8a, 0x6d, 0xa2, 0x96, 0x6f, 0x74, 0xa5, 0x86, 0xf5, 0x20, 0x28, 0xa1, 0xf4, 0x77, 0x6f, 0x30, 0x5f, 0x2a, 0xb0, 0x9c, 0xcc, 0x0f, 0xbd, 0x83, 0x31, 0xd1, 0xe2, 0x0b, 0xec, 0xe7, 0x11, 0x77, 0x07, 0xc2, 0x3c, 0xf8, 0xb9, 0x4b, 0x03, 0xc5, 0x30, 0x8c, 0x8f, 0x6d, 0x8d, 0xad, 0xbe, 0x6c, 0x31, 0x23, 0x80, 0xfd, 0x37, 0x24, 0x81, 0x30, 0x41, 0x5e, 0x08, 0x3c, 0x78, 0xe8, 0x1f, 0x16, 0xce, 0x79, 0xf4, 0x43, 0x87, 0xd8, 0x7f, 0xea, 0xf7, 0x93, 0x65, 0x2d, 0x8d, 0xf4, 0x1c, 0xb9, 0x10, 0x31, 0x50, 0x9c, 0x29, 0xe3, 0x86, 0x58, 0x22, 0xb9, 0x00, 0x35, 0xed, 0x6e, 0xe0, 0xdb, 0x68, 0xf8, 0x90, 0x1f, 0xdf, 0x03, 0x60, 0x1e, 0xd2, 0x9d, 0x71, 0x88, 0xf9, 0x33, 0xd3, 0x3f, 0x86, 0xbc, 0xea, 0x21, 0xaa, 0x34, 0x16, 0x21, 0x5a, 0x4c, 0x92, 0x9d, 0x53, 0x60, 0x9d, 0xec, 0x5c, 0xa9, 0xd8, 0x36, 0xcb, 0xb4, 0xf0, 0x88, 0x4a, 0x12, 0x7c, 0x27, 0xdb, 0x52, 0x29, 0x25, 0x1a, 0x2c, 0x14, 0x33, 0xc2, 0xff, 0x77, 0xb6, 0x73, 0x7e, 0x88, 0x1d, 0xb3, 0xa5, 0x9e, 0x71, 0x32, 0xf3, 0x96, 0x2d, 0x52, 0xd3, 0x75, 0x51, 0xe6, 0x5b, 0x4e, 0xb2, 0x3a, 0x38, 0x67, 0x94, 0x55, 0xe9, 0x97, 0x7a, 0x7a, 0x2c, 0xf2, 0x3d, 0xf5, 0xb6, 0xa9, 0x5c, 0x14, 0x27, 0x2b, 0x93, 0x73, 0x3d, 0x90, 0xaf, 0x7c, 0x48, 0x38, 0xa0, 0x2f, 0xde, 0xaf, 0xd0, 0x1f, 0xcf, 0xd4, 0xb3, 0xbd, 0x5b, 0x3b, 0xa0, 0xd9, 0xa3, 0xcf, 0xdf, 0x66, 0x5e, 0xbc, 0x03, 0x7e, 0xcd, 0x8c, 0x79, 0xa6, 0xf1, 0x8f, 0x62, 0x52, 0xfb, 0x81, 0x9e, 0xac, 0x04, 0x67, 0x29, 0x91, 0xfe, 0xba, 0xab, 0xdc, 0xeb, 0xc7, 0x4a, 0xe8, 0x4d, 0x56, 0xc3, 0x50, 0xdd, 0x8a, 0xb9, 0xf9, 0x7f, 0x08, 0x4d, 0x53, 0x76, 0x5b, 0xee, 0xdb, 0xd4, 0x98, 0x72, 0xe5, 0x35, 0x3d, 0x66, 0x98, 0xad, 0x5f, 0xa3, 0x3a, 0xff, 0x05, 0x22, 0xae, 0x10, 0xcf, 0x12, 0x3a, 0x9b, 0xdb, 0x27, 0x8e, 0x25, 0xe8, 0x34, 0x02, 0x34, 0xbc, 0xfc, 0x20, 0xbc, 0xc4, 0x46, 0x62, 0xda, 0xfb, 0x2f, 0x3c, 0xc4, 0x0c, 0xc4, 0x5d, 0x01, 0xbb, 0xd0, 0x33, 0xd5, 0x81, 0xf3, 0xad, 0x00, 0x76, 0xf4, 0x44, 0xa8, 0x75, 0x58, 0x3c, 0x93, 0x7a, 0x34, 0x27, 0x99, 0x4e, 0x3f, 0xac, 0x59, 0x67, 0x2b, 0x86, 0x2c, 0x09, 0x36, 0xcf, 0x57, 0xb2, 0xfc, 0x7f, 0x85, 0xb5, 0x8f, 0x30, 0x74, 0x25, 0xc9, 0x24, 0xee, 0xf4, 0xe1, 0x88, 0xfb, 0x5c, 0x3d, 0xfa, 0x55, 0x7e, 0x87, 0x4a, 0x1c, 0x4a, 0x03, 0x7d, 0xcb, 0x9e, 0x20, 0x18, 0x6b, 0xb2, 0x4d, 0x9b, 0x06, 0xb3, 0x0d, 0x4b, 0x5f, 0xae, 0x4e, 0x34, 0xe0, 0xb0, 0xf7, 0x6f, 0xd4, 0x2c, 0xc0, 0xa1, 0xd6, 0x9c, 0x46, 0xc4, 0x89, 0x6b, 0x5f, 0x2a, 0x8a, 0x13, 0xaa, 0xbe, 0xa3, 0x83, 0x6b, 0x8e, 0x42, 0xc3, 0x96, 0x86, 0x29, 0xda, 0x2a, 0x7e, 0x66, 0xf0, 0xc0, 0x78, 0x86, 0xb0, 0x64, 0x22, 0x06, 0xf0, 0xa3, 0xa3, 0x0a, 0x94, 0xe5, 0x93, 0x51, 0xaf, 0xfe, 0x4b, 0x69, 0xec, 0xff, 0x60, 0x1f, 0x2d, 0x52, 0x6a, 0x3a, 0x71, 0x06, 0x0a, 0x69, 0xfb, 0x67, 0x2b, 0x79, 0xb1, 0xd2, 0x87, 0xcb, 0xc2, 0xc7, 0x6d, 0x06, 0x8b, 0x40, 0xc2, 0x09, 0xbc, 0x41, 0x47, 0x24, 0xb6, 0xb1, 0x19, 0x87, 0x38, 0x68, 0x7e, 0xfa, 0x3b, 0x89, 0xde, 0xcf, 0x1a, 0x12, 0x10, 0x15, 0xf6, 0xb1, 0xd8, 0x0f, 0x59, 0xda, 0xad, 0xe5, 0x19, 0x16, 0xbf, 0x98, 0x80, 0x9e, 0x38, 0x3b, 0xa9, 0x28, 0xc2, 0x61, 0x2d, 0x01, 0x4a, 0xd2, 0x00, 0x5c, 0x04, 0x82, 0x95, 0xea, 0xb0, 0xc3, 0x49, 0xaa, 0x1b, 0xb9, 0xfe, 0x03, 0xe8, 0x0e, 0x06, 0x10, 0x90, 0xe8, 0x44, 0x3b, 0xa8, 0x18, 0x8d, 0x0d, 0x63, 0x95, 0x54, 0x44, 0x57, 0x28, 0x87, 0x26, 0x84, 0x68, 0xb4, 0x16, 0x92, 0xe9, 0x70, 0x65, 0x5a, 0xb1, 0xf9, 0x6a, 0xa8, 0xeb, 0x1a, 0xd5, 0x3f, 0xe0, 0x4f, 0x40, 0x1e, 0x22, 0x2a, 0x07, 0x02, 0x0a, 0xf5, 0x5a, 0x2c, 0x65, 0x99, 0x90, 0x64, 0x6b, 0xbf, 0xbe, 0x3e, 0xf1, 0x34, 0x89, 0x9c, 0xdf, 0x92, 0x38, 0x74, 0xe3, 0x1d, 0x0e, 0xd4, 0x67, 0xeb, 0xd6, 0x23, 0xc1, 0x48, 0xbf, 0xa9, 0xaa, 0x58, 0x6a, 0x52, 0xf2, 0xfe, 0x42, 0xae, 0x72, 0xfd, 0x0c, 0x3d, 0x41, 0x5d, 0xbe, 0xea, 0x2b, 0x11, 0x95, 0xd5, 0x5e, 0xd6, 0x62, 0x55, 0x67, 0x5e, 0x25, 0x3e, 0x5d, 0xae, 0xdc, 0x5f, 0x5c, 0xc5, 0x9d, 0x4f, 0x35, 0x7e, 0xe3, 0x6a, 0x64, 0xb7, 0x26, 0x16, 0x43, 0xb3, 0xae, 0x4b, 0x7d, 0xbd, 0xa8, 0x52, 0xc4, 0x0e, 0x7a, 0xcc, 0xc7, 0xf1, 0x54, 0xf7, 0x5e, 0x25, 0x07, 0x2d, 0x08, 0x83, 0x1b, 0xad, 0x98, 0xe0, 0x1b, 0x9e, 0x2b, 0x35, 0x34, 0x51, 0x5d, 0xfe, 0xff, 0xc7, 0xbd, 0xdf, 0x9a, 0x73, 0x7e, 0x8d, 0xfd, 0x40, 0x6f, 0xec, 0x8b, 0xd6, 0x2d, 0x75, 0xe8, 0x19, 0x96, 0xdb, 0x0b, 0xf3, 0x82, 0xee, 0x94, 0x54, 0xae, 0xbf, 0x5f, 0x77, 0xf9, 0x05, 0x59, 0x66, 0xd3, 0xbf, 0x92, 0xc0, 0xf2, 0x1b, 0x94, 0xba, 0x46, 0x97, 0xf4, 0x64, 0x30, 0x66, 0x26, 0x2e, 0xef, 0x15, 0x95, 0xaa, 0x5b, 0x6e, 0xf3, 0x93, 0xd5, 0x9d, 0xce, 0x0f, 0x7e, 0x91, 0x65, 0x31, 0xa7, 0xa5, 0xb9, 0xc2, 0x89, 0x80, 0xe7, 0x41, 0x36, 0x39, 0xb4, 0x28, 0xd0, 0xbf, 0x6a, 0x71, 0xf9, 0x79, 0xe3, 0x59, 0x8a, 0x29, 0xe3, 0x64, 0x88, 0x16, 0xab, 0xa1, 0x54, 0x6a, 0xca, 0x2f, 0x21, 0xd9, 0x37, 0x00, 0xab, 0x83, 0x9d, 0xdd, 0x27, 0x1c, 0xf6, 0xaa, 0x75, 0x4a, 0x5b, 0xec, 0x9d, 0x4e, 0x1a, 0x88, 0x79, 0xe7, 0x0a, 0xcd, 0xaf, 0x73, 0x1b, 0xb5, 0xe3, 0x58, 0x31, 0x68, 0x2a, 0xa2, 0x33, 0x02, 0xc1, 0xee, 0x5e, 0x96, 0xff, 0x86, 0xe0, 0x73, 0x88, 0xcd, 0xa2, 0xa6, 0xc4, 0xde, 0x65, 0xc0, 0x8f, 0x70, 0x10, 0xd9, 0x32, 0xfd, 0x48, 0xd4, 0x92, 0x23, 0x42, 0xe5, 0xa8, 0x4a, 0xd5, 0x51, 0x31, 0x87, 0xd4, 0x75, 0xa7, 0xc0, 0x9a, 0x0a, 0x6f, 0x11, 0xe6, 0xa7, 0x54, 0x6f, 0xea, 0x87, 0x34, 0x8b, 0x9e, 0x8d, 0xf9, 0xf9, 0x5a, 0x85, 0xcb, 0x92, 0xa4, 0xad, 0x85, 0x17, 0x47, 0x74, 0x65, 0x17, 0xa5, 0x81, 0x07, 0x12, 0x4d, 0xf7, 0x94, 0xde, 0xd0, 0xf8, 0x37, 0x4a, 0xd1, 0x68, 0xd0, 0x02, 0x5c, 0xf3, 0xed, 0xb2, 0x79, 0x51, 0xf6, 0x6e, 0x00, 0xc8, 0xa7, 0x52, 0xae, 0xf3, 0xc3, 0x65, 0x79, 0xc3, 0x07, 0xc3, 0x21, 0xc3, 0x5d, 0xfc, 0x08, 0xa0, 0x53, 0xb7, 0x43, 0xe8, 0xcb, 0x9b, 0xf1, 0x12, 0xf4, 0x6f, 0xcb, 0xbf, 0x79, 0x7f, 0xfd, 0x3f, 0xf8, 0x42, 0x35, 0x57, 0xb5, 0x3b, 0xf9, 0x41, 0x90, 0x1d, 0x3d, 0xf5, 0x34, 0x32, 0x35, 0xa7, 0x92, 0xfd, 0x68, 0x91, 0x8e, 0x1f, 0x06, 0xf2, 0xf7, 0x77, 0x7b, 0x57, 0xbd, 0x8d, 0x44, 0x19, 0x5e, 0x31, 0x01, 0x27, 0xa2, 0x5f, 0xcc, 0x05, 0x88, 0x66, 0xca, 0x15, 0x80, 0x49, 0xff, 0x16, 0xda, 0x66, 0x67, 0xea, 0x7f, 0x55, 0x42, 0x9c, 0xdf, 0x13, 0xaf, 0xa1, 0x2a, 0x60, 0x7c, 0x5e, 0xc3, 0x65, 0x3d, 0xeb, 0xf2, 0x9a, 0x9b, 0x17, 0xd9, 0xe7, 0xef, 0xac, 0xa9, 0x0a, 0x10, 0xf4, 0x15, 0x38, 0x68, 0x7b, 0x07, 0x07, 0x4e, 0x17, 0x92, 0x8b, 0x90, 0x26, 0x29, 0xbf, 0x4e, 0x17, 0x0e, 0x27, 0x0f, 0x2c, 0x0c, 0xb4, 0x0e, 0x7d, 0x69, 0xe8, 0xd5, 0x41, 0x17, 0x3a, 0x0d, 0x49, 0x2a, 0xbc, 0x95, 0xcd, 0x8f, 0xfb, 0xd1, 0x6b, 0xfa, 0x27, 0x45, 0x6d, 0x20, 0x74, 0x62, 0x4b, 0x27, 0xbf, 0x9f, 0x70, 0x5a, 0x75, 0xcc, 0x41, 0x22, 0xb1, 0xa3, 0x5c, 0x31, 0xa4, 0xa1, 0x1d, 0x01, 0x3a, 0x14, 0x67, 0x7d, 0xfa, 0x74, 0xa1, 0xfe, 0x2f, 0xf6, 0xfe, 0x78, 0x45, 0x5f, 0x02, 0xf6, 0x75, 0x16, 0x42, 0x43, 0xa5, 0x7e, 0x6b, 0xea, 0x89, 0x82, 0x85, 0x61, 0x0f, 0x72, 0x79, 0x82, 0xfa, 0x0d, 0xd1, 0x3a, 0xcc, 0xdf, 0xc0, 0x85, 0xea, 0xcd, 0x62, 0x9a, 0xfb, 0xee, 0x44, 0x62, 0x91, 0x9c, 0x27, 0x2f, 0x0b, 0xcb, 0x01, 0xab, 0xba, 0x9a, 0x45, 0x0f, 0x42, 0x28, 0x64, 0x95, 0x43, 0xa9, 0x94, 0x2f, 0x39, 0xb9, 0xd0, 0x79, 0xa1, 0xef, 0x20, 0xec, 0x5e, 0xb6, 0x1a, 0x55, 0x5a, 0x58, 0xa9, 0x86, 0x70, 0x5c, 0x0d, 0x4c, 0x8a, 0x12, 0x23, 0xa1, 0x06, 0x6c, 0xe7, 0x22, 0x5f, 0x0f, 0x37, 0xc3, 0x09, 0xaa, 0xda, 0xc1, 0x9c, 0x87, 0xc0, 0xd8, 0x35, 0x60, 0x8b, 0xb7, 0x19, 0x73, 0x4f, 0xb1, 0x9c, 0xd8, 0x96, 0xb5, 0x42, 0x13, 0xa8, 0x80, 0x23, 0xe6, 0x09, 0x11, 0x94, 0x69, 0x42, 0x5d, 0x03, 0x5c, 0xe4, 0x45, 0x23, 0xbb, 0xcb, 0xc5, 0x4a, 0x93, 0xa0, 0x6e, 0x17, 0x15, 0xa1, 0x16, 0x57, 0xe8, 0xa5, 0xce, 0x29, 0xc4, 0x5a, 0x14, 0x61, 0x3d, 0xd2, 0x4a, 0x2b, 0xdc, 0x3e, 0x67, 0xf1, 0x74, 0xf9, 0xed, 0x7e, 0xb3, 0xc8, 0x1b, 0x63, 0xf8, 0x60, 0x63, 0x99, 0x64, 0x28, 0x1e, 0x69, 0x34, 0x41, 0x7f, 0x89, 0x4e, 0xc4, 0xc5, 0x88, 0x19, 0x4a, 0xb5, 0x6b, 0x92, 0xb2, 0x48, 0x99, 0x9d, 0x1e, 0xa1, 0xf4, 0x98, 0x3f, 0x41, 0x49, 0x36, 0xd3, 0x7e, 0xea, 0x8b, 0x6b, 0x31, 0x99, 0x63, 0x72, 0xb0, 0xa8, 0xd8, 0x6b, 0xfc, 0x5f, 0x24, 0x7a, 0x3b, 0x9e, 0xb3, 0x26, 0x68, 0xc3, 0x7d, 0x5d, 0x49, 0xce, 0x92, 0xb8, 0xa1, 0xc4, 0xf6, 0x01, 0xa8, 0x51, 0xb0, 0xf3, 0xb8, 0xb0, 0x1e, 0x40, 0x49, 0xd0, 0x8b, 0xd9, 0x1f, 0xaf, 0x03, 0x69, 0xc2, 0x0a, 0x66, 0x22, 0x2f, 0x39, 0xbc, 0xbd, 0xcd, 0x55, 0xc8, 0xbc, 0xa2, 0x9b, 0xe0, 0xf3, 0xc7, 0x15, 0xfc, 0x46, 0x19, 0x77, 0x0c, 0xb4, 0x32, 0x47, 0x8f, 0x95, 0x98, 0x40, 0x61, 0x1f, 0x33, 0xf9, 0xd4, 0x2f, 0x05, 0xc2, 0x03, 0x47, 0x15, 0xce, 0x63, 0xd2, 0xac, 0x98, 0x9b, 0xb0, 0xc4, 0x7f, 0x96, 0xee, 0xbe, 0xb3, 0xd6, 0xd5, 0x53, 0x55, 0x0b, 0x27, 0xcd, 0xda, 0xe4, 0xa5, 0x77, 0xb1, 0x25, 0xd4, 0x52, 0x25, 0xfa, 0x01, 0x09, 0x84, 0x8a, 0x83, 0x27, 0x81, 0xd0, 0x40, 0x88, 0xd7, 0xa6, 0x73, 0x0d, 0x2f, 0x23, 0xac, 0x94, 0x44, 0x27, 0x18, 0x28, 0x45, 0x34, 0x02, 0x74, 0x7b, 0x80, 0x9a, 0x7e, 0x2b, 0x48, 0xf5, 0x92, 0xbe, 0x66, 0x56, 0x7b, 0x1f, 0x26, 0xac, 0xfa, 0x65, 0x56, 0x5b, 0x70, 0xb2, 0x9c, 0x3f, 0xde, 0x5a, 0x0d, 0xee, 0x0f, 0x48, 0xfa, 0x3e, 0x14, 0x9e, 0x0d, 0x08, 0xf1, 0x9c, 0x95, 0x2b, 0x96, 0xc3, 0x1f, 0xd3, 0x11, 0x3a, 0x46, 0xfb, 0x01, 0x70, 0xcc, 0x30, 0x4e, 0x03, 0xe9, 0x98, 0x17, 0xe1, 0xe2, 0x34, 0xec, 0xad, 0xde, 0x62, 0x3e, 0x64, 0xf6, 0xa6, 0x13, 0x40, 0x8b, 0xa9, 0xfe, 0xdc, 0xdc, 0x82, 0x4f, 0x9a, 0xd7, 0x35, 0x87, 0x42, 0x30, 0x79, 0x0f, 0xeb, 0xb1, 0xbf, 0x29, 0x1f, 0xd1, 0x6f, 0x26, 0x3a, 0x87, 0x75, 0xda, 0x13, 0x60, 0xfc, 0x4d, 0xde, 0xd0, 0x79, 0xb3, 0x51, 0xc5, 0xec, 0x9e, 0x06, 0x82, 0x63, 0x73, 0x21, 0xab, 0xbf, 0x1a, 0x32, 0x9c, 0xba, 0xfa, 0x5d, 0xff, 0x29, 0x25, 0xb8, 0x9e, 0x7f, 0xcf, 0xf4, 0x75, 0x93, 0x05, 0x40, 0x0c, 0xa3, 0x9c, 0x6a, 0x04, 0x98, 0x67, 0x47, 0xef, 0x8b, 0xad, 0x56, 0x65, 0x89, 0xd9, 0xa0, 0x54, 0x93, 0x74, 0xe2, 0x97, 0xe9, 0x51, 0xee, 0xca, 0x89, 0x07, 0x4f, 0x5d, 0xf2, 0xa4, 0x2c, 0xe8, 0x2d, 0xa0, 0x6f, 0xbe, 0x0e, 0x10, 0x25, 0xc5, 0xb8, 0x1c, 0x28, 0x85, 0x5f, 0xb3, 0xfc, 0x7e, 0x52, 0x7e, 0xf8, 0xbf, 0x38, 0x12, 0xa6, 0xb4, 0x99, 0x69, 0x6c, 0x40, 0xa1, 0x93, 0x6b, 0x0b, 0x21, 0xa9, 0xa7, 0x1e, 0xd7, 0x03, 0x68, 0xad, 0xef, 0xaa, 0xe1, 0x33, 0xc9, 0x10, 0x10, 0xc5, 0xfd, 0xff, 0xe5, 0x9f, 0x9d, 0xd0, 0xa6, 0x04, 0xba, 0xdd, 0x92, 0x45, 0x29, 0x39, 0xc5, 0x1f, 0x86, 0x9e, 0x5b, 0x49, 0x7a, 0xa6, 0xd8, 0x4e, 0x3a, 0x3e, 0xc8, 0x99, 0x50, 0x58, 0xa2, 0xce, 0x9e, 0xe1, 0xf2, 0x61, 0xa0, 0xf3, 0xb7, 0x61, 0xf1, 0x4b, 0x0a, 0x94, 0x11, 0xfd, 0x01, 0xc9, 0x65, 0x66, 0xd3, 0x6a, 0x7f, 0x63, 0x3d, 0x51, 0xa0, 0xc0, 0x24, 0xdc, 0x7b, 0xf4, 0x7b, 0x44, 0x3c, 0x0b, 0x67, 0x2a, 0xc9, 0xe3, 0xa1, 0x73, 0x48, 0x9b, 0x1d, 0x56, 0xe1, 0x49, 0xe9, 0xb3, 0xc5, 0xeb, 0x57, 0xa7, 0x6f, 0xa1, 0x5e, 0x5d, 0x2a, 0x19, 0x3e, 0x27, 0xd3, 0x4a, 0x63, 0xcd, 0xe0, 0x65, 0x8c, 0x25, 0xa1, 0x08, 0x2c, 0xe3, 0xc6, 0xb5, 0x10, 0xb3, 0x22, 0x84, 0x43, 0x85, 0xae, 0x14, 0x2f, 0x28, 0xd1, 0xc7, 0x04, 0x1b, 0xde, 0x2f, 0x5e, 0xa0, 0xdf, 0xc3, 0x22, 0x11, 0x91, 0xd7, 0xa8, 0x77, 0xaf, 0xcb, 0x20, 0x59, 0x73, 0x82, 0x2e, 0xd2, 0x5b, 0x15, 0xd8, 0xe6, 0x29, 0xc9, 0xa2, 0x16, 0x2d, 0x3f, 0xf7, 0x32, 0xc6, 0xeb, 0xcb, 0x6f, 0x27, 0xc7, 0x7f, 0xba, 0x57, 0x49, 0x05, 0x4b, 0x7b, 0x92, 0x44, 0x7c, 0x58, 0xe8, 0xbe, 0xdc, 0x14, 0x66, 0x70, 0x7f, 0x3c, 0xf2, 0xf9, 0x99, 0x0c, 0x70, 0xff, 0x4b, 0xea, 0x35, 0xcf, 0xbd, 0x33, 0xbf, 0x43, 0x6d, 0x3a, 0xa3, 0xe9, 0xc7, 0x8e, 0xc6, 0x61, 0xf5, 0x7c, 0xd0, 0x07, 0xf8, 0xd5, 0xde, 0xd3, 0xf8, 0xf2, 0x78, 0x7d, 0xd8, 0xf4, 0xc2, 0xe4, 0x0e, 0x50, 0xf6, 0xb0, 0xb2, 0x8c, 0x11, 0x36, 0xd4, 0x43, 0xcd, 0x9d, 0x13, 0x6f, 0xd0, 0x3f, 0x6b, 0xe8, 0x23, 0x52, 0x4f, 0x27, 0xe5, 0xc8, 0xf8, 0x50, 0x41, 0x73, 0xfc, 0x70, 0x9d, 0x6d, 0x22, 0x02, 0x14, 0xb7, 0x75, 0xb9, 0x27, 0x20, 0x97, 0x79, 0xaf, 0x69, 0x58, 0xa6, 0x16, 0xa6, 0x87, 0xa2, 0xc7, 0xe7, 0x09, 0x91, 0xe3, 0x18, 0x27, 0x60, 0x36, 0x26, 0x2c, 0x05, 0x69, 0x64, 0x30, 0x08, 0x79, 0x2c, 0x2f, 0x42, 0x68, 0xc9, 0x5e, 0xe5, 0x32, 0x94, 0xbe, 0xbc, 0x02, 0x5e, 0xf1, 0xb4, 0xa6, 0x0e, 0x4d, 0x9c, 0x40, 0x8b, 0x2f, 0x29, 0x3f, 0xdd, 0x91, 0x3d, 0x8e, 0x8f, 0xdf, 0x68, 0x0b, 0x57, 0x07, 0xb0, 0x3b, 0xf9, 0xd0, 0x8d, 0x3c, 0x68, 0x6c, 0x38, 0xfb, 0x2e, 0x50, 0x25, 0xa7, 0x0f, 0x43, 0xce, 0x65, 0xe9, 0xb5, 0xb3, 0x45, 0xdf, 0x53, 0x9f, 0x74, 0xb6, 0xd8, 0x2c, 0xb4, 0x7f, 0x26, 0x89, 0x0a, 0x77, 0x95, 0x7b, 0xb6, 0x2b, 0x8b, 0xa2, 0x68, 0xe0, 0x4d, 0xfe, 0xb1, 0x31, 0x14, 0xb2, 0xb8, 0xfa, 0x64, 0x07, 0x2e, 0x75, 0x99, 0xb3, 0x84, 0xa3, 0xc3, 0x5c, 0x5b, 0xee, 0xb3, 0x58, 0x3c, 0x0c, 0x56, 0xb7, 0x89, 0x26, 0x42, 0x83, 0xb3, 0x3a, 0x8f, 0x46, 0xae, 0xbe, 0xe8, 0xcd, 0xa2, 0x86, 0xe1, 0x2c, 0xe4, 0xe7, 0x8b, 0x02, 0x24, 0x1d, 0x47, 0xfe, 0xe8 ],
- const [ 0x87, 0x68, 0x04, 0xe2, 0xe7, 0xf2, 0xb0, 0x45, 0xcb, 0x5f, 0x60, 0x95, 0xfc, 0xa5, 0x41, 0x1b, 0x31, 0xef, 0xe0, 0xfe, 0x84, 0x44, 0x40, 0x09, 0x23, 0x63, 0x2a, 0xaf, 0x48, 0xf2, 0xc4, 0x4c, 0x6b, 0xd8, 0x65, 0xae, 0xb6, 0xe8, 0xa8, 0xd4, 0xb9, 0xbf, 0xbf, 0xf5, 0x5f, 0xef, 0x0a, 0xc5, 0x20, 0x5d, 0xe8, 0xf3, 0x79, 0xe7, 0xce, 0xf6, 0x99, 0x4a, 0x96, 0x09, 0x5e, 0x43, 0x19, 0x74, 0x7f, 0xf5, 0xff, 0x0e, 0x0b, 0x8b, 0xd6, 0x00, 0x12, 0x1e, 0x62, 0xcb, 0xa1, 0xd9, 0x34, 0x8d, 0xf4, 0x5b, 0x7e, 0x80, 0xe8, 0x5c, 0x26, 0xc3, 0xaf, 0x94, 0x19, 0x5d, 0xc7, 0xd8, 0xe2, 0x7f, 0x2d, 0x87, 0x7b, 0x09, 0xce, 0x24, 0x63, 0x50, 0x3e, 0x44, 0xf0, 0x1e, 0xac, 0xab, 0xe7, 0xfb, 0x16, 0xb2, 0x4a, 0xab, 0xb9, 0xec, 0x71, 0xf8, 0xcc, 0x08, 0x5c, 0xb2, 0x6d, 0xf9, 0x48, 0xf3, 0xdc, 0x55, 0x80, 0xa7, 0xe7, 0xfb, 0x76, 0x4c, 0xa5, 0xf9, 0x12, 0xf7, 0x67, 0xad, 0x4a, 0x98, 0xec, 0x2a, 0xf3, 0x7e, 0xd4, 0xdc, 0xd7, 0x1e, 0x57, 0x70, 0x07, 0x10, 0x37, 0xee, 0x73, 0x5a, 0xf3, 0x28, 0xb7, 0xf1, 0x3e, 0x58, 0x38, 0x7d, 0xaf, 0x05, 0x70, 0x5d, 0xba, 0x26, 0x86, 0xeb, 0xdf, 0x8a, 0x22, 0x01, 0x21, 0x77, 0x7f, 0xbc, 0xba, 0x92, 0xc2, 0x7f, 0x0d, 0xfe, 0x8a, 0x3b, 0xdc, 0xc8, 0xc8, 0xee, 0xbb, 0x83, 0xd1, 0x6a, 0xc5, 0x2f, 0xb1, 0x58, 0x8d, 0x60, 0xc2, 0x7c, 0x58, 0x9c, 0x7e, 0x3b, 0x89, 0x04, 0x92, 0x5a, 0x5c, 0x36, 0x33, 0x08, 0xd7, 0x73, 0xb5, 0x1f, 0xfe, 0xfd, 0x5a, 0xa7, 0x47, 0xc3, 0x68, 0x9c, 0x4d, 0x40, 0x7e, 0xf0, 0xc8, 0xa1, 0x27, 0xd4, 0xbd, 0x26, 0xb0, 0x34, 0xf2, 0xca, 0x37, 0x80, 0xa5, 0x26, 0x05, 0xb2, 0x7d, 0x93, 0x1e, 0x8d, 0xc1, 0x8f, 0x15, 0x22, 0xc8, 0x62, 0x25, 0x99, 0xb1, 0x01, 0x7e, 0x2e, 0x54, 0x32, 0xdd, 0x7a, 0x77, 0xf1, 0x5f, 0xf4, 0x46, 0x12, 0x97, 0xb7, 0xfd, 0x29, 0xde, 0x86, 0xe8, 0xa7, 0xea, 0x0d, 0x8d, 0x45, 0xa3, 0x69, 0x28, 0xa6, 0x31, 0xeb, 0x57, 0x37, 0x5a, 0x19, 0x17, 0x5b, 0x0b, 0xf6, 0xef, 0xc5, 0x34, 0x84, 0x6b, 0x24, 0xd9, 0x86, 0xcc, 0x06, 0x67, 0x8a, 0xfe, 0xf6, 0x44, 0x27, 0xca, 0xe8, 0xa9, 0x84, 0x4d, 0xd8, 0xb4, 0x19, 0xa9, 0xad, 0xb9, 0xba, 0xfa, 0x63, 0xda, 0xd1, 0x8c, 0x69, 0xd7, 0xeb, 0x4b, 0x48, 0x27, 0x76, 0x7a, 0x86, 0x47, 0xc8, 0xa8, 0xca, 0x52, 0x64, 0xe0, 0x40, 0xd2, 0x79, 0x21, 0x3f, 0xd5, 0xac, 0x0d, 0x2a, 0x44, 0x17, 0xe5, 0x94, 0x71, 0x92, 0xb5, 0xa7, 0xef, 0x31, 0xcc, 0xc6, 0xa6, 0x0e, 0x6f, 0x71, 0x26, 0x48, 0xcf, 0x69, 0x3c, 0x4b, 0x38, 0x15, 0xc3, 0x52, 0x8a, 0x25, 0xbd, 0x2b, 0xed, 0x75, 0xa3, 0x3a, 0xc1, 0x34, 0xf9, 0xc1, 0xd4, 0x45, 0x24, 0x5f, 0xd8, 0xe5, 0x80, 0xd6, 0x14, 0x8f, 0xae, 0x11, 0x59, 0x1c, 0x2b, 0x65, 0x38, 0x2f, 0x27, 0x17, 0x72, 0xd0, 0x94, 0x1e, 0xb0, 0x57, 0x7d, 0x2b, 0x74, 0x8c, 0x99, 0xe7, 0x50, 0x0c, 0x20, 0x7b, 0x56, 0xef, 0xdd, 0x56, 0xcf, 0xa7, 0x85, 0x2a, 0x30, 0x2b, 0x47, 0x38, 0x49, 0x56, 0xa4, 0xce, 0xc0, 0x89, 0x81, 0x0e, 0xbe, 0x98, 0x7a, 0xf0, 0xe8, 0xe4, 0x7a, 0x8b, 0x91, 0xc4, 0x88, 0x90, 0x2d, 0x2a, 0xe4, 0x17, 0x09, 0x83, 0x53, 0x9e, 0x3a, 0xde, 0xb7, 0x4e, 0xd4, 0x51, 0xe2, 0x81, 0x5c, 0x98, 0xac, 0x82, 0x7f, 0x00, 0x43, 0x93, 0x03, 0x84, 0xc3, 0x35, 0xff, 0x35, 0x07, 0xa3, 0x47, 0xdf, 0xbe, 0xa0, 0x2b, 0xe9, 0xc1, 0x72, 0x61, 0x7d, 0xa4, 0x2f, 0x3f, 0xe9, 0x8a, 0x37, 0x2d, 0x45, 0x3e, 0x02, 0x5b, 0x56, 0x80, 0x1c, 0xaf, 0xb3, 0x9d, 0x6d, 0x02, 0x26, 0x43, 0xbe, 0x8b, 0x55, 0x92, 0x79, 0x9b, 0xa2, 0x76, 0xb0, 0x8b, 0x4f, 0x35, 0x61, 0xf3, 0xe6, 0x44, 0xf9, 0x1d, 0xd8, 0x5f, 0x16, 0xba, 0x64, 0xd8, 0x91, 0xd3, 0xba, 0x30, 0xbc, 0x02, 0x61, 0xe4, 0xe8, 0xe1, 0xd6, 0x89, 0x2b, 0xc3, 0x76, 0x1b, 0x60, 0xa2, 0x9d, 0x93, 0x6e, 0x59, 0x10, 0xb7, 0xce, 0x13, 0x98, 0x36, 0x47, 0x04, 0xf0, 0xf4, 0xfc, 0x57, 0xe1, 0xa3, 0xa9, 0x67, 0xac, 0x93, 0x2a, 0x31, 0xa8, 0xcb, 0x3d, 0x0a, 0x2c, 0x58, 0x88, 0x8d, 0xaf, 0xe5, 0xde, 0xd8, 0x2e, 0x8c, 0xbe, 0xf8, 0xcf, 0xec, 0x1c, 0xa1, 0xc3, 0x7c, 0x64, 0x22, 0x70, 0x1e, 0xbd, 0x99, 0xd0, 0xf8, 0x8b, 0x63, 0x14, 0x7f, 0x37, 0xd7, 0x8e, 0xd4, 0x32, 0x34, 0xcd, 0x54, 0x37, 0xd7, 0x0a, 0x6b, 0xd1, 0xb2, 0xc3, 0xa8, 0x1e, 0xf9, 0xa5, 0x17, 0xd2, 0x1e, 0xaf, 0xcb, 0x7e, 0x00, 0x95, 0xba, 0x13, 0x60, 0x62, 0xce, 0xa2, 0x94, 0x62, 0x38, 0x65, 0x7f, 0x3f, 0x08, 0x03, 0xc0, 0x6a, 0xfa, 0x10, 0x2a, 0xbc, 0x93, 0xd3, 0x74, 0x5e, 0x6d, 0x4d, 0x32, 0xe6, 0xd0, 0x76, 0x04, 0xc2, 0x81, 0xca, 0x0e, 0xda, 0xdf, 0x04, 0xa8, 0x71, 0x2b, 0x2a, 0x56, 0x4c, 0x28, 0xc9, 0xfa, 0x17, 0xe4, 0x82, 0x48, 0x04, 0xd5, 0xc5, 0x7b, 0xb5, 0x27, 0xdd, 0x46, 0x5c, 0x55, 0x2d, 0x0e, 0x21, 0xf7, 0xb9, 0x56, 0xc4, 0xdb, 0xe8, 0x7b, 0x83, 0x56, 0x88, 0xa1, 0x3e, 0xdc, 0x12, 0xed, 0xd9, 0xcf, 0x2f, 0xf5, 0xe2, 0x95, 0x7c, 0x74, 0x73, 0xed, 0x8a, 0x43, 0x5a, 0x83, 0x2a, 0x84, 0x78, 0xc2, 0xe7, 0x20, 0x67, 0xe9, 0xd3, 0x75, 0x60, 0x61, 0x87, 0x48, 0x5b, 0x4e, 0x65, 0x01, 0x77, 0x64, 0x20, 0x17, 0x9d, 0xfb, 0x7f, 0xc9, 0x60, 0x66, 0x5d, 0x0f, 0x28, 0x81, 0xf5, 0xd0, 0x90, 0x8a, 0x5c, 0x55, 0x0c, 0x32, 0x4f, 0xfe, 0xcf, 0xf3, 0x2f, 0x33, 0xec, 0xa3, 0x4a, 0x9e, 0xbb, 0x4a, 0x5c, 0x97, 0x7e, 0x31, 0x56, 0xe0, 0x44, 0x3b, 0x5d, 0x93, 0x0e, 0x78, 0x16, 0x58, 0x31, 0xf8, 0x21, 0xdb, 0xfb, 0xdd, 0xe3, 0x7e, 0x99, 0xb4, 0x89, 0x4b, 0x38, 0x06, 0x49, 0x2c, 0x6b, 0x29, 0xeb, 0x5e, 0xcd, 0x5c, 0x89, 0x23, 0xe7, 0x14, 0x93, 0xb7, 0x54, 0x90, 0x15, 0x86, 0x22, 0xb3, 0x3d, 0x9c, 0x7c, 0x13, 0x18, 0x5d, 0x86, 0x4e, 0x9c, 0x76, 0x89, 0x9d, 0xeb, 0x13, 0x50, 0xab, 0xd6, 0x53, 0xd2, 0xa7, 0xa0, 0xf8, 0x11, 0x97, 0x05, 0x64, 0x41, 0xf0, 0x7b, 0xc1, 0x2d, 0x64, 0xb8, 0x7f, 0xd7, 0xfc, 0x74, 0x03, 0x5e, 0x66, 0x70, 0x9d, 0x25, 0x90, 0xb7, 0xbb, 0x32, 0x76, 0x24, 0x5d, 0xd4, 0x38, 0x24, 0xc9, 0x89, 0x6f, 0xbd, 0x80, 0x1e, 0xc1, 0xd0, 0x70, 0x18, 0xb3, 0x9b, 0x6b, 0x53, 0xbf, 0x81, 0xd8, 0xe9, 0xa7, 0x0e, 0xa9, 0x55, 0x08, 0x36, 0x8d, 0xd9, 0x32, 0xdd, 0x66, 0x1d, 0x37, 0x9d, 0xfd, 0x18, 0x42, 0xc3, 0xf4, 0x33, 0x2a, 0x9a, 0xfd, 0xac, 0x47, 0xed, 0x4a, 0x39, 0x85, 0xc7, 0x45, 0xef, 0xb6, 0x7d, 0x80, 0x61, 0x2d, 0xee, 0xef, 0x0c, 0x88, 0x0a, 0x55, 0xf3, 0xcd, 0x91, 0xfc, 0x86, 0xb9, 0x1d, 0xa9, 0xc8, 0x54, 0x63, 0xcf, 0xb1, 0xc9, 0xb6, 0x03, 0xd1, 0x75, 0xcd, 0xb0, 0x37, 0x3e, 0xc5, 0x0c, 0x91, 0x26, 0x69, 0x4a, 0x95, 0x1f, 0xb2, 0x12, 0x9f, 0x22, 0x8a, 0x2e, 0x9b, 0x7b, 0xd5, 0x86, 0x25, 0x67, 0xb2, 0x4e, 0xef, 0xe0, 0xfe, 0x7e, 0x63, 0xb8, 0x1b, 0x82, 0x8a, 0xe5, 0xef, 0x33, 0x2d, 0x1c, 0x2f, 0x07, 0x3a, 0xa1, 0xdd, 0x84, 0x68, 0x5d, 0x0f, 0xfb, 0x1e, 0x31, 0xf3, 0x72, 0x92, 0x8a, 0x10, 0xe2, 0x2e, 0x35, 0xce, 0xa3, 0x37, 0x75, 0x39, 0x24, 0xb0, 0x53, 0x02, 0xdf, 0x7c, 0x36, 0xc6, 0x8c, 0xc4, 0xb3, 0x93, 0x95, 0x98, 0xa6, 0xa9, 0xcb, 0xd9, 0x82, 0x7d, 0x57, 0x56, 0xe5, 0x04, 0xf3, 0x35, 0x70, 0x2d, 0x5a, 0x95, 0xd5, 0xb0, 0xfc, 0x71, 0x31, 0x06, 0xf7, 0xc7, 0x9d, 0xb8, 0x43, 0xfa, 0xff, 0xdd, 0x2c, 0x76, 0x27, 0xde, 0x06, 0x92, 0x17, 0x7d, 0x1c, 0xba, 0xa1, 0x16, 0xe9, 0xcd, 0x38, 0x24, 0x8b, 0xc4, 0x00, 0x06, 0x74, 0x95, 0x27, 0x04, 0x63, 0x56, 0x78, 0x8d, 0x92, 0xa6, 0x2d, 0xc2, 0x31, 0x49, 0x05, 0x39, 0x14, 0x12, 0x97, 0xfa, 0xa9, 0x06, 0xe6, 0xce, 0x2c, 0xbe, 0x35, 0xba, 0x1e, 0x0d, 0x1d, 0xc6, 0xf3, 0xe3, 0xdc, 0x02, 0x0b, 0x71, 0xf0, 0xcb, 0xe3, 0x8e, 0xe5, 0x4b, 0x8d, 0x5a, 0x6b, 0x3f, 0x5d, 0x21, 0xab, 0xfd, 0xe6, 0x82, 0xdb, 0xb5, 0x24, 0xd0, 0x10, 0xf7, 0xfb, 0xb8, 0x54, 0x75, 0xe0, 0x24, 0xf9, 0x0b, 0xd7, 0x60, 0x2d, 0xfc, 0x9d, 0x7b, 0xce, 0x7f, 0x26, 0xf1, 0x7f, 0x7a, 0x4a, 0x86, 0xfb, 0x8d, 0xbb, 0x75, 0xa9, 0x52, 0x3a, 0xca, 0x71, 0xe3, 0x0a, 0x0d, 0xcf, 0x9d, 0xa5, 0x20, 0x25, 0x24, 0xaf, 0x6a, 0x56, 0xa7, 0x28, 0x36, 0x90, 0x66, 0xe5, 0x55, 0x69, 0x71, 0x41, 0x0b, 0x2e, 0xb2, 0x10, 0x29, 0x77, 0x2d, 0xd4, 0x76, 0xff, 0x87, 0x34, 0x53, 0xb3, 0xc5, 0xa9, 0x9f, 0x09, 0x57, 0x7b, 0xd9, 0x93, 0x55, 0xec, 0x84, 0xd4, 0x08, 0xb2, 0xd0, 0x52, 0xac, 0xab, 0x76, 0xec, 0x74, 0xcd, 0xe4, 0x6e, 0xcf, 0x5c, 0x9a, 0x63, 0xea, 0x5f, 0xd4, 0x2b, 0x76, 0x54, 0x69, 0x4d, 0xab, 0x23, 0xf3, 0x0e, 0x8d, 0x51, 0x30, 0x42, 0x6e, 0x76, 0xa8, 0x62, 0xb4, 0xf1, 0x90, 0xdf, 0xdc, 0xda, 0xef, 0xb6, 0xbf, 0x38, 0xff, 0x45, 0x14, 0x74, 0xd6, 0x5c, 0x37, 0x0e, 0x45, 0x98, 0x29, 0x8f, 0x01, 0xec, 0xd7, 0xbf, 0x00, 0x81, 0x9f, 0x17, 0x26, 0xc0, 0x10, 0x79, 0x21, 0xad, 0xf1, 0x1f, 0x92, 0x76, 0x85, 0xd2, 0x6d, 0x4b, 0x0e, 0x5c, 0xa2, 0x71, 0x90, 0x3f, 0xfd, 0x92, 0xd7, 0xa7, 0x4a, 0x58, 0xbb, 0x9e, 0xbe, 0x3a, 0xa3, 0x7f, 0x92, 0x95, 0x48, 0xad, 0xf1, 0xfe, 0xbc, 0x84, 0x14, 0xd7, 0xaa, 0x90, 0xac, 0x20, 0xdf, 0xfd, 0x80, 0x90, 0x09, 0x4f, 0x57, 0xe4, 0xbf, 0x54, 0x18, 0x78, 0xc2, 0x56, 0x30, 0x14, 0x83, 0x94, 0x34, 0x08, 0xe5, 0xf4, 0xc7, 0x7b, 0x43, 0xf2, 0xbf, 0x00, 0xb5, 0xdc, 0x83, 0x6a, 0x8f, 0x41, 0xb7, 0xe2, 0x2b, 0xa7, 0x1c, 0x36, 0xe9, 0x7c, 0xb1, 0x74, 0x73, 0x4f, 0x1f, 0xb8, 0x46, 0x40, 0x53, 0x42, 0x6e, 0xb5, 0x6d, 0xcb, 0x90, 0x4f, 0xd9, 0x19, 0x2e, 0x1d, 0xbb, 0xd2, 0x27, 0x0f, 0x91, 0x8e, 0x7d, 0xad, 0x14, 0x2f, 0x5b, 0x08, 0x5e, 0x75, 0x57, 0xf1, 0x52, 0xcd, 0xf4, 0x6a, 0x39, 0x6a, 0x6b, 0x5a, 0xa9, 0x97, 0xab, 0x85, 0xab, 0x4c, 0x9e, 0xba, 0x1c, 0xff, 0xae, 0x4e, 0x54, 0xbc, 0x88, 0xca, 0x06, 0x78, 0x1f, 0xe1, 0x67, 0xa3, 0xf4, 0xa5, 0x93, 0xfc, 0x96, 0xfa, 0x2c, 0xa9, 0x64, 0x4a, 0x44, 0x87, 0x9a, 0x7a, 0x7d, 0xbf, 0x8c, 0x1d, 0x6e, 0x9a, 0x2c, 0xe8, 0x49, 0x96, 0xd2, 0x66, 0xbb, 0xb9, 0x3d, 0xed, 0x14, 0x25, 0xd5, 0xd1, 0xa8, 0xed, 0x32, 0xd7, 0x75, 0x27, 0xe2, 0xed, 0x06, 0x42, 0x67, 0x18, 0x97, 0x9a, 0x80, 0xad, 0x79, 0x4a, 0xaa, 0xc4, 0xb8, 0x41, 0xe5, 0xea, 0xfc, 0x99, 0xbb, 0x16, 0xad, 0x24, 0x7f, 0xdf, 0x5a, 0x47, 0xd3, 0xeb, 0x5c, 0x0b, 0x6c, 0xab, 0xb6, 0x71, 0x1a, 0x45, 0x40, 0x06, 0x02, 0xd2, 0x05, 0xb8, 0x2e, 0xca, 0xe9, 0xe8, 0x49, 0xbc, 0x8f, 0xc0, 0xa3, 0x43, 0x79, 0xc7, 0x7c, 0x35, 0x71, 0xb2, 0x7e, 0x1d, 0x28, 0x7e, 0x8b, 0xec, 0x1e, 0xbb, 0xb9, 0xeb, 0xc1, 0x2b, 0x9b, 0xf4, 0xd9, 0x8b, 0xc3, 0xe2, 0x23, 0xb1, 0x84, 0x46, 0x3c, 0xd7, 0xfd, 0x5c, 0xc1, 0x37, 0x52, 0x3d, 0xb5, 0xd8, 0x3d, 0x55, 0x23, 0xa7, 0xc6, 0x18, 0x04, 0xc9, 0x4e, 0xf1, 0x62, 0x30, 0xd2, 0x7b, 0xbe, 0x6c, 0x6e, 0xf4, 0xb0, 0xc4, 0x20, 0xef, 0xcd, 0x86, 0xcf, 0x48, 0xcd, 0x9b, 0x8c, 0x5d, 0xee, 0x5e, 0x17, 0x7b, 0x93, 0xaf, 0xa5, 0x97, 0x31, 0x42, 0xe0, 0x3f, 0x6b, 0x3d, 0x30, 0xd0, 0x7c, 0x03, 0x39, 0xe8, 0xd6, 0x4a, 0xa5, 0x1e, 0x08, 0x74, 0x23, 0xf1, 0xe5, 0x1c, 0xaf, 0xff, 0xe3, 0xef, 0x15, 0x78, 0xc1, 0xbd, 0xb0, 0xd1, 0x6d, 0xcf, 0x78, 0xbd, 0x24, 0x7c, 0x3c, 0x59, 0xdb, 0xf7, 0x2b, 0xa6, 0xde, 0x6b, 0x99, 0x3d, 0xb7, 0x4a, 0x00, 0x3e, 0x51, 0xe2, 0x45, 0x8a, 0x5d, 0x31, 0x3d, 0x32, 0xf5, 0xfa, 0x70, 0x2f, 0x7f, 0x18, 0x1d, 0x53, 0xd5, 0x13, 0x7e, 0x7f, 0xa3, 0xf1, 0x4c, 0x17, 0x10, 0x4e, 0x86, 0xb3, 0xa0, 0xaf, 0x6f, 0x17, 0x58, 0x14, 0xd6, 0x66, 0x24, 0xcc, 0x99, 0x92, 0x77, 0x8d, 0x6c, 0x17, 0x31, 0xc4, 0xd7, 0xe9, 0xc5, 0x2a, 0x7e, 0xaa, 0x9b, 0x98, 0xa5, 0x21, 0xb3, 0x1c, 0xf3, 0xe8, 0x8c, 0x4c, 0x76, 0x64, 0x44, 0xda, 0xe8, 0xfa, 0x00, 0x69, 0x31, 0x80, 0x8e, 0x9f, 0x2c, 0xf2, 0x49, 0x7c, 0xae, 0x67, 0x3d, 0xea, 0xc5, 0x43, 0x8c, 0x95, 0x3d, 0xad, 0x11, 0xfc, 0x69, 0x44, 0x42, 0xc9, 0x20, 0x0d, 0x5b, 0x5d, 0x05, 0xb0, 0xb9, 0xb0, 0x0b, 0xe5, 0x83, 0x58, 0x39, 0x29, 0x90, 0xe7, 0xab, 0xb5, 0x85, 0x7a, 0xda, 0xb0, 0x3e, 0x8f, 0x1d, 0xa4, 0x70, 0x17, 0x6f, 0x2f, 0x8c, 0xcd, 0x72, 0xfb, 0xe6, 0xc5, 0xb4, 0xef, 0x16, 0x48, 0x31, 0xa7, 0x9e, 0xdf, 0x1a, 0x22, 0xce, 0xae, 0xd5, 0xbb, 0xe5, 0x03, 0x45, 0x5b, 0x79, 0x2f, 0x4b, 0xec, 0x19, 0x95, 0x8d, 0x11, 0x30, 0x00, 0x76, 0x14, 0x2c, 0x3a, 0x7e, 0x20, 0xe0, 0xda, 0xab, 0xb0, 0x27, 0x5d, 0x57, 0x47, 0xcb, 0x78, 0x35, 0x62, 0xa5, 0xad, 0x8f, 0xaa, 0x05, 0x1d, 0xd1, 0x6f, 0x54, 0x9d, 0x4b, 0x52, 0xf7, 0x0b, 0x33, 0x41, 0x77, 0xe3, 0xe9, 0xa9, 0xdf, 0x0d, 0x7f, 0xe6, 0x66, 0xf9, 0x79, 0xff, 0x4e, 0xee, 0xd1, 0x90, 0x0c, 0x9f, 0x3f, 0x07, 0xa9, 0x00, 0xb7, 0x13, 0x68, 0x57, 0x32, 0x5a, 0xa9, 0x96, 0xb1, 0x6b, 0x0d, 0xe8, 0x7f, 0xf3, 0xdb, 0x8a, 0xb7, 0x33, 0xa3, 0xdc, 0x07, 0xb1, 0x21, 0xb8, 0xb3, 0x2e, 0x63, 0x02, 0xdd, 0xd9, 0x2e, 0x80, 0x03, 0xc2, 0x9f, 0xec, 0xc9, 0x91, 0x0e, 0x48, 0xf9, 0x78, 0x37, 0x72, 0xc8, 0x66, 0x9c, 0xf8, 0x5b, 0x7e, 0x25, 0x2d, 0x89, 0xc7, 0x0a, 0x7d, 0xe3, 0x25, 0xf2, 0xfd, 0xf1, 0x88, 0x5d, 0x46, 0xbf, 0x63, 0x3f, 0x84, 0x98, 0x60, 0xed, 0xca, 0x12, 0x52, 0x3d, 0xa9, 0x4b, 0x6a, 0xe9, 0x00, 0x71, 0xaf, 0x35, 0x15, 0x88, 0xa8, 0xd2, 0xe5, 0x67, 0x5b, 0x01, 0xb9, 0x04, 0x7c, 0xfc, 0xfa, 0xf2, 0xde, 0x91, 0x46, 0x28, 0x2d, 0x10, 0xc3, 0x04, 0xdf, 0x67, 0xb4, 0x90, 0x68, 0x8c, 0x4a, 0x03, 0xad, 0x1b, 0xbc, 0x8b, 0xbc, 0x41, 0x9a, 0x49, 0xba, 0xd8, 0x5e, 0x9d, 0x1c, 0xd3, 0x44, 0xa5, 0x1b, 0xdd, 0x5b, 0x00, 0x61, 0x3d, 0xdc, 0xd8, 0x09, 0xfd, 0xbb, 0x1f, 0xc6, 0x4b, 0x7d, 0x18, 0x62, 0x1f, 0x49, 0x1a, 0x6b, 0x1e, 0x41, 0x91, 0x29, 0xbf, 0x13, 0x45, 0xd2, 0xac, 0xca, 0xdf, 0x01, 0x6b, 0xeb, 0xa9, 0x65, 0x3d, 0xbd, 0x95, 0xb6, 0x46, 0xe8, 0x81, 0xee, 0xef, 0x41, 0xb9, 0xb5, 0x89, 0xe5, 0xbd, 0x1d, 0x33, 0x85, 0x45, 0x8f, 0xfd, 0x00, 0x83, 0x06, 0x4d, 0x37, 0xa8, 0x7a, 0x82, 0x1d, 0xa9, 0xa0, 0xd8, 0x0d, 0x43, 0xd0, 0x8b, 0x61, 0x3d, 0x46, 0x40, 0x40, 0xed, 0x8e, 0xa0, 0xb7, 0xfd, 0x3a, 0x46, 0x0b, 0x6f, 0xd6, 0xdb, 0x4e, 0xdf, 0x1e, 0x7f, 0x31, 0x08, 0x6e, 0x6b, 0x19, 0x8a, 0x79, 0xd5, 0x75, 0xeb, 0x3e, 0x14, 0x4e, 0xdb, 0x38, 0x05, 0x1f, 0xbc, 0xd5, 0xad, 0xe8, 0x61, 0x2a, 0x20, 0x7e, 0x16, 0xe5, 0xa1, 0x25, 0xe1, 0x83, 0x0a, 0x60, 0x08, 0xc3, 0x6f, 0x08, 0xd3, 0x5a, 0xfe, 0x9c, 0x93, 0xe8, 0x29, 0xd8, 0xe3, 0x2b, 0x08, 0x89, 0x2e, 0x72, 0xf8, 0x9f, 0x72, 0x55, 0x89, 0x84, 0x43, 0xa4, 0x97, 0xac, 0x12, 0x9d, 0xb6, 0x6e, 0xaf, 0x62, 0xd4, 0x12, 0x0d, 0xaa, 0x19, 0x2b, 0x46, 0xb6, 0x12, 0x27, 0xde, 0x87, 0x0f, 0x24, 0x4c, 0x4e, 0xc9, 0x05, 0xb6, 0x24, 0x48, 0xc5, 0xfd, 0xfb, 0x04, 0x0c, 0xf9, 0xd4, 0x4b, 0x00, 0x06, 0x33, 0xe2, 0x5e, 0xbf, 0xd0, 0xef, 0xc9, 0x09, 0x90, 0x16, 0x62, 0x54, 0xb3, 0xe3, 0x98, 0x1d, 0x4f, 0x68, 0x42, 0xb7, 0xfd, 0x27, 0xeb, 0x4c, 0xd2, 0x32, 0x6c, 0x1f, 0x91, 0x90, 0xc1, 0x13, 0x1e, 0xe3, 0x15, 0x71, 0x36, 0x48, 0x1f, 0xe6, 0x5e, 0x7f, 0xb1, 0xcb, 0x19, 0x4c, 0x8e, 0xa9, 0x5e, 0x1c, 0x7d, 0xfd, 0x49, 0xec, 0x9b, 0x38, 0x11, 0x67, 0xf5, 0x0a, 0x3a, 0x4e, 0x56, 0xe0, 0x0c, 0x1d, 0x5e, 0xac, 0x43, 0xec, 0xd4, 0xe4, 0x08, 0x93, 0x3d, 0xcd, 0x20, 0x11, 0xae, 0xf9, 0x64, 0x2f, 0xde, 0x0e, 0x71, 0x60, 0x7f, 0xca, 0xa0, 0xec, 0xcf, 0x44, 0x39, 0x4d, 0x6a, 0x75, 0xe3, 0xd9, 0x62, 0xf6, 0x5f, 0xa2, 0x91, 0x0b, 0x76, 0x9b, 0x2e, 0xe1, 0x30, 0xfc, 0x9f, 0x14, 0x47, 0xe7, 0x8e, 0x74, 0xdb, 0x4b, 0x3f, 0x09, 0x67, 0x09, 0x21, 0x55, 0xf4, 0x55, 0xa3, 0xd8, 0x8d, 0x5f, 0x48, 0xda, 0xf2, 0x33, 0xfe, 0x64, 0x91, 0xde, 0xac, 0x90, 0xb1, 0xd3, 0x0a, 0x02, 0xf1, 0x8d, 0xb5, 0xb7, 0xf1, 0x75, 0x83, 0xfe, 0x4f, 0x05, 0x13, 0xc3, 0xd5, 0x2e, 0xa9, 0x13, 0xf0, 0xf7, 0x39, 0xdd, 0x64, 0x68, 0xc2, 0xf6, 0x3f, 0xa6, 0xde, 0x60, 0x0b, 0x5f, 0x96, 0xcc, 0x48, 0x68, 0x7a, 0x5d, 0x1a, 0xa5, 0xf2, 0xaf, 0x3e, 0x2a, 0xcf, 0x18, 0x42, 0x9f, 0x25, 0x2e, 0xf6, 0xe9, 0x5d, 0x89, 0x1e, 0x07, 0x86, 0xca, 0x69, 0x39, 0xec, 0xdb, 0xa7, 0x68, 0xec, 0x79, 0x36, 0xc2, 0x06, 0xf0, 0xbd, 0xa5, 0x34, 0x26, 0x1d, 0xbe, 0x7a, 0xdb, 0xa5, 0x72, 0xbf, 0x2f, 0x86, 0x7c, 0xdb, 0x65, 0x86, 0xd8, 0xf1, 0xe6, 0xf8, 0xe0, 0xff, 0x89, 0xeb, 0xb6, 0xb3, 0x11, 0xa2, 0xe1, 0x81, 0xf8, 0x44, 0x3b, 0xf2, 0x6b, 0xd5, 0x0a, 0x3f, 0x95, 0x65, 0x6d, 0x1e, 0x20, 0x87, 0xfa, 0xdc, 0xf9, 0x05, 0xa5, 0xac, 0x54, 0xd2, 0xe3, 0x3f, 0xf1, 0x40, 0x10, 0x94, 0x9d, 0x73, 0x0e, 0x12, 0xfb, 0x16, 0x30, 0xd4, 0x84, 0x4c, 0x56, 0x44, 0xcd, 0xea, 0x59, 0xeb, 0x08, 0xe3, 0xa9, 0x87, 0xce, 0x04, 0x34, 0x5e, 0x1c, 0xe1, 0x8a, 0xd3, 0x9b, 0x0f, 0x3f, 0x37, 0x24, 0x93, 0x91, 0xe1, 0x83, 0x9b, 0x4b, 0x81, 0x7b, 0x6c, 0xea, 0xb1, 0x0b, 0x9c, 0xfd, 0xcd, 0xf0, 0x81, 0xd2, 0x05, 0x6b, 0xe9, 0x4e, 0xb0, 0x44, 0x0b, 0x1d, 0xe3, 0x0f, 0xbe, 0x0c, 0x43, 0xae, 0xe9, 0xb2, 0x17, 0x17, 0x3b, 0x56, 0xa2, 0x58, 0x1c, 0x0d, 0xaf, 0xd8, 0xe3, 0x23, 0x6d, 0xdf, 0x49, 0xbc, 0x7d, 0x58, 0x1d, 0xbb, 0x4a, 0xd6, 0x3a, 0xe3, 0x99, 0xd6, 0xb7, 0x3c, 0x61, 0x44, 0x5d, 0xb9, 0xdc, 0x40, 0x5e, 0x17, 0xde, 0x21, 0x43, 0x08, 0x66, 0xba, 0x27, 0x91, 0x72, 0xdd, 0x23, 0xb1, 0x18, 0x1e, 0x09, 0x43, 0xd3, 0xd9, 0x55, 0x25, 0x1b, 0x77, 0x60, 0x9a, 0x38, 0xec, 0xd7, 0xed, 0x57, 0x84, 0x6c, 0x58, 0xde, 0xe0, 0xcb, 0x23, 0xfd, 0x3b, 0xd0, 0x10, 0x85, 0xf3, 0xf7, 0xf7, 0xfe, 0x44, 0x14, 0xae, 0xf4, 0x56, 0x44, 0x2b, 0x91, 0x7a, 0x23, 0xed, 0x71, 0xb0, 0x3f, 0x98, 0xb1, 0x6e, 0xcd, 0xdf, 0x49, 0x9c, 0x9b, 0xa6, 0x9c, 0xe3, 0x46, 0x68, 0x4e, 0x27, 0xad, 0xd7, 0x56, 0x52, 0xa5, 0xc3, 0x54, 0x54, 0xef, 0x3d, 0x24, 0x68, 0x67, 0xfc, 0xb3, 0x98, 0x7d, 0x00, 0x11, 0x83, 0xe9, 0x74, 0xc8, 0x5e, 0x9b, 0xd9, 0x6d, 0x39, 0xf1, 0x61, 0x74, 0x83, 0x2d, 0x99, 0x48, 0xd1, 0x26, 0x4b, 0x9c, 0xdb, 0x3e, 0xa3, 0xfb, 0xc7, 0x93, 0x90, 0xa7, 0xab, 0x7a, 0x6d, 0xa0, 0x4d, 0x29, 0xe1, 0x03, 0x2d, 0xb3, 0x04, 0x95, 0xc5, 0x3a, 0xc3, 0xa0, 0x0f, 0x5f, 0x85, 0xfe, 0x48, 0xfe, 0x0f, 0x73, 0xf4, 0x19, 0xa4, 0x40, 0x22, 0x11, 0x71, 0xf4, 0xf1, 0x1c, 0x29, 0x86, 0x53, 0xf3, 0xed, 0xa1, 0x11, 0xcb, 0x6e, 0x3f, 0x0f, 0x87, 0x55, 0x79, 0xd2, 0x2c, 0xe3, 0x9d, 0x3f, 0x95, 0xd4, 0x82, 0xa5, 0x68, 0x8a, 0x18, 0xfe, 0x48, 0x67, 0x43, 0x72, 0x4c, 0x7b, 0xea, 0x1d, 0xb0, 0x5f, 0x4b, 0x12, 0xcb, 0x60, 0x91, 0xa0, 0x41, 0xe0, 0xa8, 0xd4, 0x7a, 0xfa, 0x50, 0x3e, 0x53, 0x65, 0x70, 0xf8, 0x13, 0x9b, 0xad, 0xe5, 0xa0, 0x3a, 0x3c, 0x37, 0xf3, 0xaa, 0xf4, 0x34, 0xc9, 0x00, 0xa8, 0x39, 0x9b, 0x22, 0xb3, 0xff, 0xd1, 0x2c, 0xd4, 0x1d, 0x33, 0x13, 0x3d, 0xce, 0xa0, 0x89, 0xe6, 0xf5, 0x02, 0x20, 0x27, 0x5e, 0x81, 0xb1, 0x86, 0x47, 0xf7, 0xff, 0xce, 0x1f, 0xa4, 0x98, 0x61, 0x8d, 0x24, 0xfc, 0xce, 0xb4, 0x9d, 0x01, 0xa6, 0xb6, 0x3d, 0x76, 0x8c, 0x76, 0xe4, 0x07, 0x8c, 0xa3, 0x1d, 0x60, 0xae, 0xf2, 0x53, 0x96, 0xca, 0xaa, 0x42, 0xc2, 0x9d, 0x66, 0xab, 0xef, 0x1d, 0x16, 0x4c, 0x36, 0x0a, 0x48, 0x0f, 0x27, 0xc6, 0xa6, 0x82, 0x6b, 0x66, 0xbf, 0x87, 0xa8, 0x09, 0x0a, 0x4d, 0xa5, 0x68, 0x27, 0x7e, 0xaf, 0xaf, 0x69, 0xba, 0x3b, 0x8c, 0x92, 0x45, 0xcc, 0x85, 0xdd, 0xfc, 0x17, 0x8e, 0x42, 0x8e, 0x65, 0xdb, 0xf5, 0xe8, 0x3a, 0xf3, 0x30, 0xf1, 0x34, 0x06, 0x32, 0x78, 0x35, 0x80, 0x88, 0x6a, 0xc5, 0xde, 0x8b, 0x49, 0xb1, 0xc0, 0x2a, 0xd9, 0xf8, 0x40, 0xe9, 0x1d, 0xe8, 0x83, 0x2a, 0x81, 0x85, 0x8d, 0xab, 0x59, 0x2a, 0x5a, 0x51, 0x8a, 0x73, 0x2a, 0x24, 0x87, 0x59, 0x1c, 0x9a, 0x80, 0x9f, 0xfe, 0x18, 0xd6, 0x6e, 0x64, 0xb6, 0xd1, 0x3c, 0xf7, 0x43, 0x95, 0xf2, 0x10, 0x89, 0x52, 0x4d, 0x86, 0xd1, 0xbc, 0x84, 0xc4, 0xaa, 0xbb, 0x2c, 0x1e, 0xe7, 0x63, 0x59, 0x65, 0xe7, 0x26, 0x07, 0xb8, 0x19, 0x48, 0xb8, 0x9e, 0xbe, 0x94, 0x5e, 0x52, 0xf1, 0x4e, 0x7a, 0x5e, 0xe5, 0x68, 0x86, 0x6b, 0x6f, 0xf8, 0x91, 0x58, 0xc4, 0xea, 0x29, 0x89, 0x83, 0xf2, 0x7d, 0x82, 0xf6, 0xc5, 0xc3, 0xb4, 0x95, 0x89, 0xd8, 0x96, 0xcb, 0x8a, 0x26, 0xf8, 0xfd, 0x2e, 0xcb, 0x95, 0xc9, 0x2b, 0xf8, 0xe7, 0x8b, 0xf7, 0x96, 0x3f, 0x26, 0x81, 0x30, 0x14, 0x01, 0x1e, 0x0d, 0x9b, 0x4f, 0xc6, 0x9c, 0x99, 0x94, 0x80, 0x16, 0x76, 0x64, 0x1b, 0x5e, 0x92, 0x6e, 0x1f, 0x2c, 0xdc, 0xba, 0x03, 0x6a, 0xa0, 0x2f, 0xa0, 0xde, 0xa0, 0x58, 0xe6, 0x0a, 0x67, 0x68, 0xce, 0x50, 0xda, 0x7b, 0x8f, 0x5a, 0x10, 0x1e, 0x15, 0xb9, 0x63, 0x12, 0xaf, 0xcc, 0xc7, 0x4d, 0x08, 0xe4, 0x5b, 0x42, 0x58, 0xa5, 0x3e, 0x62, 0xdb, 0xb0, 0xa4, 0xe3, 0x83, 0x7f, 0x29, 0xc0, 0xea, 0x8f, 0x65, 0x01, 0x8a, 0xc5, 0xc0, 0x3c, 0x30, 0x0b, 0x87, 0x5c, 0xae, 0x3a, 0x40, 0xa1, 0xd0, 0x3c, 0x3b, 0xe8, 0x92, 0x72, 0x6a, 0x2d, 0x90, 0x53, 0x72, 0x4e, 0xbe, 0x56, 0x02, 0x11, 0x59, 0x12, 0x64, 0x69, 0x1e, 0xa4, 0x52, 0xf5, 0xb9, 0x52, 0x0a, 0xca, 0x80, 0x6e, 0xa5, 0x72, 0x61, 0x7c, 0xa4, 0x34, 0x19, 0x97, 0xcc, 0x96, 0xa7, 0x10, 0x34, 0x21, 0x01, 0x59, 0x9c, 0x64, 0x05, 0x21, 0x00, 0x3c, 0xb2, 0xc1, 0x6d, 0x52, 0x98, 0xd7, 0x14, 0xe4, 0x8d, 0x30, 0x9d, 0xc9, 0xa2, 0xec, 0xbd, 0xaf, 0x56, 0xdc, 0x0b, 0xa8, 0x09, 0x2f, 0x0f, 0xe5, 0xb3, 0x4e, 0x9c, 0xc0, 0xd5, 0x04, 0x60, 0x00, 0xb0, 0xe2, 0xba, 0x59, 0xb6, 0xe2, 0xcb, 0x33, 0x3e, 0x4a, 0xd0, 0xad, 0x7b, 0xd3, 0xaf, 0xe0, 0xaf, 0x0b, 0xcf, 0x68, 0x9c, 0xf8, 0x2d, 0x21, 0x3b, 0xfe, 0xad, 0x2e, 0xb1, 0x02, 0xae, 0x40, 0x7f, 0xd0, 0xe0, 0x14, 0xf9, 0xba, 0x5a, 0x3e, 0xf9, 0x82, 0xe7, 0x26, 0xd4, 0x7b, 0xa1, 0x50, 0x8d, 0xea, 0xc2, 0xe0, 0x49, 0xb2, 0xb6, 0x5d, 0x03, 0x31, 0x75, 0xb5, 0x81, 0x65, 0x0f, 0x81, 0x87, 0x53, 0x88, 0x8b, 0x4a, 0xa9, 0xe7, 0x8d, 0x27, 0xa2, 0x8a, 0x3c, 0x95, 0x2a, 0xbc, 0x85, 0x59, 0x43, 0x8a, 0x17, 0xf9, 0xa7, 0xd2, 0x21, 0x72, 0xae, 0x9c, 0x5d, 0x2d, 0x73, 0xad, 0x4d, 0x30, 0x32, 0x5a, 0xc5, 0x92, 0xf5, 0x9b, 0xa9, 0x31, 0x70, 0x60, 0xf8, 0xa7, 0x29, 0x28, 0x09, 0x79, 0xdc, 0xcf, 0x15, 0x92, 0x1d, 0xa7, 0xf6, 0xf0, 0x3f, 0xcb, 0x2e, 0x9e, 0x75, 0xb0, 0x2b, 0xe2, 0x37, 0xfd, 0xca, 0xb7, 0xe7, 0x9d, 0x19, 0x7d, 0xb5, 0x12, 0x61, 0xf0, 0xc0, 0x0c, 0x64, 0x57, 0x7d, 0x3a, 0xe3, 0xfd, 0x5d, 0x60, 0x63, 0xe5, 0xaa, 0xaa, 0x31, 0xba, 0xb2, 0x40, 0xa4, 0x05, 0x28, 0x1a, 0xa2, 0xa3, 0xc7, 0x16, 0x65, 0x75, 0x38, 0x47, 0x7f, 0x59, 0x36, 0x90, 0x1c, 0x59, 0xf0, 0x72, 0x88, 0x23, 0xaf, 0x23, 0xf1, 0xb9, 0xb8, 0xe0, 0x6d, 0x6a, 0x74, 0x83, 0x3f, 0x01, 0xce, 0x58, 0x56, 0x3c, 0xdd, 0x2d, 0x16, 0x80, 0xc3, 0xa8, 0x5b, 0xca, 0xd5, 0xde, 0xbb, 0xe9, 0xfc, 0x20, 0x0c, 0xeb, 0x5a, 0x18, 0x26, 0xd5, 0x31, 0x16, 0xea, 0x97, 0x01, 0xa4, 0x84, 0x3e, 0xf1, 0x60, 0xec, 0x6c, 0x70, 0x0b, 0xb3, 0x05, 0x1c, 0xdd, 0xfc, 0x2c, 0xe3, 0x1b, 0xc9, 0x6e, 0x68, 0xec, 0x78, 0x3c, 0xa8, 0x69, 0x8d, 0x9f, 0xdd, 0xf3, 0xb1, 0x27, 0xa3, 0xc9, 0xfb, 0x25, 0x59, 0xd9, 0x6f, 0x19, 0xca, 0xd7, 0xc4, 0x6e, 0x0c, 0x8d, 0x6b, 0x65, 0xa9, 0x72, 0xcc, 0x50, 0xfd, 0x7d, 0xd3, 0x00, 0xdf, 0x3b, 0xab, 0x80, 0x84, 0x20, 0xc9, 0x04, 0x9f, 0x1b, 0x2d, 0x1c, 0xcd, 0x6c, 0xe4, 0x2d, 0x31, 0xba, 0xd2, 0x22, 0x5b, 0x60, 0xae, 0x5f, 0x6f, 0x09, 0x4e, 0xf6, 0x83, 0x7c, 0x25, 0x1e, 0x48, 0xb9, 0x0a, 0xe1, 0xed, 0x44, 0x3a, 0x14, 0x40, 0xc1, 0xa1, 0x8c, 0x17, 0xc1, 0x55, 0x8f, 0xee, 0xdc, 0x64, 0x89, 0xd1, 0x00, 0xcf, 0x00, 0x7d, 0x08, 0xd6, 0xca, 0xc2, 0x90, 0x76, 0x7e, 0x2b, 0x08, 0x31, 0x28, 0xe1, 0x08, 0x0d, 0x41, 0xcd, 0xe3, 0xdf, 0xde, 0xfd, 0x7f, 0xc9, 0x27, 0x49, 0x64, 0x02, 0x0b, 0x36, 0x12, 0xd5, 0x32, 0x1a, 0x98, 0xed, 0x33, 0x81, 0x62, 0xcf, 0x08, 0xd0, 0x53, 0xa8, 0xbf, 0x28, 0x14, 0x49, 0x71, 0x8d, 0xab, 0x70, 0x78, 0x48, 0x4f, 0x49, 0xdd, 0x89, 0x7a, 0x34, 0x10, 0x51, 0x41, 0xc9, 0xdc, 0x8f, 0xe1, 0x19, 0x99, 0x8a, 0x9a, 0x37, 0xa4, 0x7e, 0xc0, 0xf8, 0x0c, 0x8a, 0x0f, 0xf6, 0x8e, 0xc9, 0x3f, 0xdb, 0xc4, 0xc0, 0xd8, 0xdc, 0x99, 0xf8, 0x48, 0x83, 0x00, 0xeb, 0x32, 0xb2, 0xe6, 0x25, 0x0a, 0xe5, 0x64, 0xa3, 0xdf, 0xb7, 0x3a, 0x7f, 0x77, 0xa8, 0x79, 0xcf, 0xa1, 0x1d, 0x7f, 0xca, 0xc7, 0xa8, 0x28, 0x2c, 0xc3, 0x8a, 0x43, 0xdc, 0xf3, 0x76, 0x43, 0xcc, 0x90, 0x98, 0x37, 0x21, 0x3b, 0xd6, 0xfd, 0x95, 0xd9, 0x56, 0xb2, 0x19, 0xa1, 0x40, 0x6c, 0xbe, 0x73, 0xc5, 0x2c, 0xd5, 0x6c, 0x60, 0x0e, 0x55, 0xb7, 0x5b, 0xc3, 0x7e, 0xa6, 0x96, 0x41, 0xbc, 0x01, 0x84, 0xb9, 0xce, 0x9e, 0x76, 0xca, 0x27, 0x31, 0x1c, 0xf4, 0x95, 0x66, 0x48, 0x4f, 0x20, 0x2d, 0xf6, 0x7d, 0x35, 0x55, 0x8a, 0xdd, 0x04, 0x5d, 0x58, 0x01, 0x26, 0x87, 0x69, 0x63, 0x83, 0x2d, 0x7c, 0x53, 0x73, 0x58, 0x4c, 0x34, 0x23, 0x8f, 0x11, 0xe8, 0x3b, 0xed, 0x49, 0x89, 0xbd, 0x77, 0xb8, 0x5a, 0x30, 0xac, 0xae, 0xfd, 0xff, 0x5d, 0x88, 0xe6, 0x1c, 0xbe, 0x79, 0x0f, 0xe8, 0xbe, 0x8b, 0xed, 0x57, 0x94, 0xe0, 0xa4, 0x4f, 0x9a, 0x3e, 0x77, 0x52, 0x5f, 0xcb, 0x82, 0x5d, 0xf7, 0x14, 0xab, 0x10, 0x96, 0x54, 0xd6, 0x0e, 0x5e, 0xf4, 0x58, 0xa7, 0x74, 0x4e, 0xae, 0xb5, 0x59, 0xb6, 0x70, 0xc3, 0x78, 0xbb, 0x80, 0x75, 0xfb, 0xaa, 0x87, 0x24, 0xe3, 0x54, 0xa2, 0xc8, 0x58, 0x11, 0x58, 0x1b, 0x3d, 0x05, 0xd0, 0xfb, 0x08, 0xa2, 0x40, 0x10, 0xd1, 0x6e, 0xa9, 0xb0, 0xa8, 0x07, 0xc2, 0xff, 0x2c, 0x64, 0x31, 0x5b, 0x5a, 0x5d, 0x01, 0xf7, 0xa2, 0x6e, 0x51, 0xc5, 0x40, 0xb8, 0x49, 0x9a, 0xc9, 0x48, 0x53, 0x8d, 0x04, 0x9c, 0x87, 0xa0, 0xfc, 0x63, 0x66, 0xa2, 0x53, 0x85, 0xcc, 0x53, 0xd9, 0x63, 0x20, 0xca, 0x5d, 0x60, 0xce, 0x14, 0xc4, 0xa0, 0xf7, 0x1e, 0x58, 0x10, 0x67, 0xd4, 0x62, 0xa6, 0xc7, 0x8b, 0xfa, 0xea, 0x13, 0x9c, 0x1e, 0xb5, 0x4f, 0x52, 0x02, 0x38, 0x76, 0x07, 0xa7, 0x41, 0xb4, 0x89, 0xaf, 0xba, 0xd4, 0xc3, 0x70, 0x72, 0xfc, 0x99, 0x47, 0x21, 0x98, 0x13, 0x2e, 0xa6, 0x94, 0xbe, 0x91, 0x92, 0xce, 0x4f, 0x5e, 0xea, 0xcb, 0x8a, 0x5c, 0x29, 0xa9, 0x62, 0xbd, 0x85, 0x54, 0x62, 0xf6, 0x73, 0xfd, 0x4b, 0xce, 0x6d, 0xc8, 0xff, 0xb5, 0xf3, 0xc5, 0x9d, 0x58, 0xd0, 0x22, 0xee, 0x72, 0x9e, 0x9f, 0x00, 0xe5, 0x8c, 0x41, 0x10, 0x09, 0x5f, 0x4b, 0xad, 0x44, 0xb7, 0x6a, 0x1b, 0xdb, 0x94, 0x30, 0xf6, 0x07, 0x18, 0xc3, 0x17, 0x4c, 0x8f, 0xd7, 0xbc, 0x06, 0xac, 0xd9, 0xe2, 0x45, 0x15, 0x6d, 0xf6, 0xda, 0x23, 0x1b, 0xad, 0xb2, 0xe2, 0x45, 0x31, 0x63, 0x60, 0x5d, 0x7d, 0x05, 0x24, 0x55, 0x0a, 0x43, 0xfc, 0x56, 0xab, 0xb1, 0xfc, 0xb4, 0xb5, 0x61, 0xc3, 0x22, 0x64, 0xb1, 0x00, 0x22, 0x7a, 0x66, 0x35, 0xc0, 0x29, 0xff, 0xbb, 0x80, 0x33, 0x43, 0x07, 0x95, 0x50, 0x1d, 0x2b, 0x53, 0xd0, 0xa9, 0x9f, 0xe7, 0x81, 0x8f, 0x42, 0x46, 0xd3, 0x90, 0x9c, 0x63, 0x3a, 0x5e, 0x66, 0xa5, 0xd4, 0xb1, 0x4c, 0x98, 0x4c, 0x97, 0xf1, 0xe3, 0xfe, 0x0b, 0x34, 0x7a, 0x5c, 0xca, 0xb2, 0x14, 0x90, 0x62, 0x8b, 0xe0, 0x63, 0x8c, 0x6a, 0x73, 0x5d, 0xbb, 0xbf, 0x05, 0x2d, 0xf5, 0x4f, 0xde, 0x4c, 0xe2, 0xef, 0x0b, 0xde, 0x23, 0x8c, 0x55, 0xd9, 0xe4, 0x6f, 0x74, 0x68, 0xb5, 0xbf, 0x7f, 0x92, 0x95, 0x48, 0xa7, 0x17, 0x50, 0x7a, 0x25, 0x9a, 0x0c, 0xb5, 0x71, 0x05, 0x1e, 0xc4, 0xb5, 0x2a, 0x22, 0xa7, 0x81, 0xa6, 0x4a, 0x95, 0xc0, 0x0b, 0xf6, 0x41, 0xeb, 0x3e, 0x85, 0x5d, 0x7c, 0x1d, 0x6b, 0x5c, 0xa6, 0x65, 0x84, 0x7d, 0x43, 0xd3, 0xa9, 0x05, 0x0e, 0x8a, 0x80, 0xcb, 0x12, 0xb5, 0x98, 0xfa, 0x62, 0x6d, 0xb5, 0x13, 0x0b, 0xdd, 0x68, 0x31, 0x47, 0xa4, 0xe3, 0x91, 0xf3, 0x7a, 0x0c, 0x51, 0x43, 0x17, 0xd0, 0x78, 0xb5, 0x51, 0xba, 0x37, 0x43, 0x84, 0xc4, 0x6f, 0xdd, 0x36, 0x6d, 0x72, 0x16, 0xfb, 0x0b, 0x0e, 0x1e, 0x97, 0x63, 0xc8, 0xf0, 0x63, 0x77, 0x65, 0xcc, 0xf2, 0x9f, 0xaf, 0xe8, 0xf3, 0xdb, 0x75, 0x63, 0x59, 0x68, 0xd4, 0x7a, 0xba, 0x91, 0xb5, 0xfe, 0xf5, 0xc8, 0x97, 0x05, 0x18, 0xf5, 0x8f, 0xe1, 0x81, 0x0e, 0x8c, 0x4e, 0x43, 0xe8, 0xe0, 0xef, 0xcb, 0x4d, 0xfc, 0xfc, 0xc3, 0x4e, 0x7b, 0x35, 0x36, 0xda, 0x63, 0x1a, 0xf5, 0x90, 0xa7, 0x5d, 0x3a, 0xd2, 0xf0, 0x98, 0x8c, 0x1b, 0x9c, 0x3c, 0xe2, 0x92, 0x07, 0xc9, 0x0b, 0xdf, 0x0a, 0x45, 0x4d, 0x3d, 0xc2, 0xe7, 0x4d, 0xd0, 0x93, 0x13, 0x2e, 0x3a, 0x6c, 0x8b, 0xfd, 0x69, 0x4c, 0xe3, 0x4d, 0xb2, 0x05, 0x35, 0x1e, 0x24, 0x40, 0x17, 0x04, 0x16, 0xc1, 0xca, 0x85, 0x03, 0xec, 0xb4, 0xc2, 0x98, 0x88, 0x10, 0x5a, 0x0a, 0xc4, 0xe5, 0x8b, 0xad, 0x77, 0x34, 0x9a, 0xc3, 0xac, 0x76, 0x75, 0x91, 0x5e, 0x46, 0x98, 0xb9, 0x80, 0x5a, 0x2d, 0xc3, 0x41, 0xb7, 0x77, 0xfd, 0x8d, 0x25, 0x70, 0x85, 0xd7, 0xe1, 0xb1, 0xa4, 0x16, 0x93, 0x93, 0x5d, 0x0d, 0x7f, 0x94, 0x46, 0xd0, 0xff, 0xfc, 0x97, 0x84, 0x31, 0xc0, 0x81, 0x66, 0xed, 0xa6, 0xc1, 0x0f, 0xfa, 0xaa, 0x74, 0xf6, 0x81, 0xa0, 0x2d, 0x36, 0xc1, 0x1c, 0x45, 0x91, 0x05, 0x8f, 0x72, 0xb5, 0xd3, 0xb2, 0x9b, 0xbf, 0x67, 0x28, 0xeb, 0xfe, 0x60, 0x5f, 0x25, 0xf9, 0xb8, 0xb7, 0x37, 0xb3, 0xf9, 0xe6, 0x11, 0x2d, 0xae, 0x9b, 0xb7, 0x2d, 0x18, 0x61, 0x95, 0x3e, 0x23, 0xc6, 0x14, 0xf8, 0x98, 0xbd, 0x6a, 0x81, 0x94, 0x42, 0xb6, 0x54, 0x39, 0x3c, 0x4c, 0x41, 0xa3, 0xa7, 0x4d, 0xb5, 0x1e, 0xf2, 0x7c, 0x3c, 0x96, 0xa6, 0x4c, 0x44, 0x4f, 0x49, 0x3e, 0x24, 0xd6, 0x82, 0x69, 0x5d, 0x37, 0x7e, 0x5a, 0x1f, 0x70, 0x91, 0x1f, 0x0f, 0x26, 0x21, 0x9f, 0x47, 0x97, 0xc0, 0x2d, 0x9e, 0xd0, 0x98, 0x5c, 0x2a, 0x1f, 0x0c, 0x14, 0x04, 0xcc, 0x9c, 0xe5, 0x4b, 0x04, 0x09, 0x9c, 0x6c, 0x16, 0xba, 0x14, 0xa0, 0xe2, 0x5f, 0x4f, 0xb6, 0x8d, 0xd4, 0xc5, 0x12, 0x7a, 0x48, 0xfc, 0xf6, 0x76, 0x9e, 0x59, 0x00, 0x33, 0x13, 0x36, 0xf4, 0xf8, 0x22, 0x35, 0xbc, 0x96, 0xa5, 0xd3, 0xad, 0x9e, 0x3c, 0x40, 0x0c, 0xd1, 0xf2, 0x6e, 0xd1, 0xd8, 0x1e, 0x67, 0xaa, 0x36, 0x88, 0xe5, 0x43, 0x7a, 0xcd, 0x1c, 0xc5, 0xb9, 0x05, 0xdb, 0x9d, 0x3b, 0xa2, 0xd3, 0x7e, 0x75, 0x9b, 0x36, 0xa9, 0x37, 0xcb, 0x85, 0x6c, 0x27, 0x94, 0xa3, 0xe8, 0x6e, 0xc7, 0x2d, 0x18, 0xb1, 0xc8, 0x0e, 0x0f, 0x43, 0xed, 0x4d, 0x81, 0x99, 0x28, 0x2a, 0x85, 0xfe, 0xe6, 0x6a, 0x99, 0x87, 0x36, 0xef, 0xe7, 0x4a, 0x2e, 0x8b, 0xc7, 0xcb, 0x8a, 0x16, 0x84, 0xb7, 0x97, 0xbe, 0x63, 0xd5, 0x50, 0x9f, 0xe1, 0x39, 0xc6, 0x94, 0x3d, 0xbb, 0xc5, 0x4c, 0x36, 0xa7, 0xb4, 0xa0, 0x16, 0xb6, 0xbd, 0x23, 0xef, 0x3d, 0x2e, 0xfb, 0x25, 0xa5, 0x1f, 0xf0, 0x2c, 0x1b, 0x56 ],
- const [ 0x6b, 0x9e, 0x10, 0xc9, 0xdb, 0xa0, 0x55, 0x60, 0x31, 0x96, 0xcb, 0x2b, 0x7f, 0xd7, 0xc5, 0x4a, 0x3e, 0x8d, 0x10, 0x62, 0x4a, 0xad, 0x1c, 0x34, 0x2e, 0x2d, 0x5d, 0x75, 0xa2, 0x71, 0xf1, 0xd9, 0x52, 0x06, 0x83, 0x72, 0xe1, 0x92, 0x6f, 0x38, 0x2e, 0x0b, 0x27, 0xe9, 0xd6, 0x28, 0xd5, 0x13, 0xfa, 0x15, 0x42, 0x6e, 0x42, 0x6b, 0xf6, 0x70, 0x21, 0x5f, 0xa1, 0x1c, 0x5b, 0x3a, 0xb9, 0x1b, 0xc5, 0x09, 0x65, 0x0d, 0x4c, 0x95, 0x9a, 0x21, 0x39, 0x95, 0x83, 0xe3, 0xb4, 0x23, 0x27, 0x56, 0x86, 0x6d, 0x46, 0x43, 0x23, 0xad, 0x83, 0xd0, 0xe7, 0x5b, 0xc9, 0x54, 0xa0, 0xa0, 0xe7, 0x6a, 0x4d, 0x0f, 0x7d, 0x45, 0x25, 0x90, 0x1c, 0x43, 0xdb, 0x9c, 0xa9, 0xc4, 0x21, 0xb0, 0x02, 0x3c, 0x6b, 0xfb, 0xe4, 0x87, 0xf5, 0x5a, 0x0d, 0x7d, 0x07, 0x87, 0x9d, 0xc7, 0x78, 0x8e, 0xc2, 0xf1, 0x71, 0x80, 0x94, 0xbf, 0x73, 0x6a, 0x3e, 0xc5, 0x9b, 0x88, 0x5f, 0x32, 0x25, 0xb7, 0xb0, 0xed, 0x30, 0x29, 0xe6, 0xe3, 0xc0, 0x5c, 0xda, 0x9f, 0x09, 0x4d, 0xe7, 0x1b, 0xeb, 0xe9, 0x93, 0xd5, 0xb9, 0xc4, 0x72, 0x26, 0x3e, 0x0d, 0x48, 0xcf, 0x02, 0xc2, 0x6e, 0xd5, 0xc9, 0x20, 0x77, 0x90, 0x5d, 0x5e, 0x12, 0xfe, 0x8d, 0x9a, 0x32, 0x5d, 0x76, 0x14, 0x6d, 0xf8, 0x01, 0x9a, 0xa2, 0x41, 0xad, 0x43, 0xdf, 0x20, 0x8f, 0x60, 0x82, 0x8b, 0x97, 0xb0, 0x9e, 0x57, 0x14, 0xd3, 0xa0, 0x4d, 0x7a, 0x01, 0x32, 0x81, 0x63, 0xfc, 0x5f, 0xdf, 0xd5, 0x43, 0xf8, 0x07, 0xc3, 0x89, 0x37, 0x5b, 0xd6, 0x65, 0xa3, 0x55, 0x6d, 0x4b, 0x33, 0x1f, 0xe2, 0xbb, 0xb6, 0x5d, 0x0f, 0xb8, 0x72, 0x4d, 0x10, 0x7c, 0x0c, 0x13, 0x4b, 0x6a, 0xa8, 0x4e, 0xae, 0x44, 0x50, 0xef, 0x38, 0x9e, 0x9a, 0x4b, 0xbb, 0x93, 0x85, 0x6f, 0xe0, 0xb6, 0xa5, 0xb3, 0x6b, 0x4b, 0x80, 0x92, 0xc0, 0xb8, 0x37, 0xb8, 0xa6, 0x36, 0x69, 0x5d, 0x4c, 0xcc, 0x54, 0xd2, 0x8a, 0x7e, 0x3d, 0x59, 0x68, 0xc2, 0x12, 0x3a, 0xe4, 0x33, 0x4f, 0x13, 0xf0, 0x89, 0x1e, 0x70, 0xbb, 0xc9, 0xc2, 0x9b, 0x31, 0xb9, 0x35, 0xb6, 0xc5, 0x97, 0x10, 0x06, 0x6e, 0x0a, 0xac, 0x92, 0xef, 0x59, 0x87, 0xed, 0x5c, 0xdb, 0xe9, 0x50, 0xda, 0xaf, 0xc7, 0xeb, 0xa6, 0xac, 0xe7, 0x7d, 0x59, 0x9b, 0x45, 0x23, 0x6a, 0xa4, 0xb6, 0x6d, 0xf4, 0x07, 0xcb, 0xb7, 0xb9, 0x0d, 0xf8, 0xb7, 0x68, 0x3d, 0xf5, 0x52, 0x1b, 0xd2, 0x65, 0xb4, 0x24, 0x6d, 0xb6, 0x9f, 0x09, 0x08, 0x48, 0x03, 0xcd, 0x2b, 0xd1, 0xd0, 0x71, 0x62, 0x00, 0x08, 0xbb, 0xee, 0x60, 0x18, 0x36, 0xbb, 0x80, 0x68, 0x7a, 0x92, 0x51, 0x31, 0xad, 0x90, 0xcf, 0x8f, 0x4a, 0xd7, 0xe3, 0xd7, 0x21, 0x83, 0x88, 0x2a, 0xa0, 0xe0, 0x2e, 0x4a, 0x50, 0xda, 0x5b, 0xad, 0xa2, 0xb4, 0x98, 0xd0, 0xec, 0xfd, 0x8b, 0xce, 0xaf, 0xc0, 0x61, 0x31, 0x1b, 0xfc, 0x6f, 0x08, 0xd5, 0x53, 0x18, 0x3a, 0xf7, 0x06, 0xf1, 0x19, 0x59, 0x21, 0x23, 0x3a, 0x0f, 0xf3, 0x11, 0x85, 0x32, 0xc1, 0x3b, 0x88, 0xe4, 0xbc, 0x62, 0x10, 0x8e, 0x2f, 0xee, 0xfb, 0x6c, 0xfd, 0x8c, 0x48, 0x4c, 0x4b, 0x1b, 0x70, 0x92, 0x7a, 0xc9, 0xf9, 0x80, 0x58, 0x79, 0x48, 0xb4, 0x97, 0x69, 0xb7, 0xf2, 0x7e, 0x11, 0xe7, 0x24, 0xde, 0x4e, 0x58, 0x9f, 0x48, 0xbf, 0x36, 0xa8, 0x7d, 0x6f, 0x76, 0x37, 0x26, 0xb5, 0x22, 0xfb, 0xc5, 0x59, 0xf1, 0x9d, 0xec, 0xf8, 0x1b, 0x49, 0xad, 0xaa, 0x6b, 0x6b, 0x51, 0xe1, 0x96, 0xb6, 0x4c, 0x95, 0xcb, 0x6b, 0x71, 0x9e, 0x8b, 0xd8, 0x63, 0x61, 0xbb, 0x1f, 0x4c, 0xae, 0xf8, 0x38, 0xd1, 0xe9, 0x2a, 0x39, 0x45, 0x68, 0x5c, 0xd5, 0x1c, 0x1d, 0xcb, 0x23, 0xa3, 0x75, 0x3c, 0xa1, 0xef, 0x7f, 0x93, 0x79, 0x13, 0x51, 0xa2, 0x03, 0x97, 0xa8, 0x3f, 0x8a, 0x25, 0xce, 0x99, 0x53, 0x84, 0xc1, 0xcc, 0xdb, 0xcb, 0x91, 0xb2, 0x61, 0xce, 0x0a, 0xfc, 0xa4, 0xdd, 0x93, 0x82, 0xee, 0xae, 0x56, 0xd8, 0x51, 0x97, 0xa1, 0x22, 0x31, 0x00, 0x8c, 0x29, 0x03, 0x19, 0xdd, 0xae, 0x53, 0xc8, 0x28, 0xfe, 0x0c, 0xe6, 0x3b, 0xc6, 0xf4, 0xaa, 0xb9, 0x29, 0x76, 0x65, 0x04, 0x10, 0xa4, 0x70, 0x60, 0xc1, 0x7c, 0x63, 0x56, 0xb4, 0x6a, 0x88, 0x57, 0xa1, 0x0f, 0x90, 0xa2, 0xde, 0x41, 0x84, 0x68, 0xe8, 0x53, 0xfe, 0x2d, 0x40, 0x96, 0x98, 0x71, 0x78, 0x1f, 0xa5, 0x90, 0x8d, 0xcb, 0x1f, 0xe7, 0x77, 0x81, 0xe1, 0x38, 0xff, 0xb7, 0x16, 0x4f, 0xd1, 0x38, 0xf2, 0xe6, 0xd2, 0x24, 0xa0, 0xc7, 0xb3, 0x38, 0x7b, 0x30, 0xc7, 0x4f, 0x80, 0x7b, 0x11, 0x29, 0x03, 0xfe, 0xa2, 0x6c, 0xa2, 0x31, 0x22, 0xe8, 0x78, 0x0e, 0xac, 0x1f, 0x93, 0xbe, 0xdf, 0x05, 0xa7, 0x71, 0x31, 0x04, 0x03, 0x8e, 0x87, 0x43, 0xc5, 0x0c, 0x03, 0x28, 0x4a, 0x1f, 0x1d, 0x1c, 0xe9, 0x18, 0xf6, 0x8e, 0xe1, 0x86, 0xe8, 0x3a, 0x8f, 0xa2, 0x62, 0xab, 0xe5, 0xea, 0xf3, 0xfe, 0x17, 0x0b, 0xa4, 0xea, 0x97, 0x04, 0x8b, 0xfd, 0x44, 0x89, 0x9d, 0x28, 0xdf, 0xa5, 0xc4, 0x7e, 0xbe, 0xa4, 0x32, 0x39, 0xc4, 0x30, 0xf4, 0xfe, 0x90, 0xba, 0xca, 0x62, 0xf5, 0x1c, 0x36, 0xac, 0xaa, 0x7c, 0xd3, 0xdc, 0x43, 0x73, 0xe8, 0xed, 0x60, 0x6e, 0x3d, 0x58, 0x25, 0x55, 0x2d, 0xd9, 0xea, 0x6b, 0xfd, 0x75, 0x33, 0x76, 0x6c, 0xbc, 0xe2, 0x1f, 0x8b, 0x4c, 0xab, 0x9b, 0xcf, 0x96, 0xc9, 0x8b, 0x65, 0xe5, 0xef, 0x21, 0xc5, 0x9c, 0x82, 0x85, 0x8a, 0xbe, 0x05, 0x77, 0x81, 0xb4, 0xd5, 0x35, 0x00, 0x4b, 0x16, 0x9f, 0x79, 0xfd, 0xed, 0x99, 0x4e, 0x71, 0xef, 0xb1, 0xe7, 0x45, 0xda, 0x02, 0x03, 0x0a, 0x83, 0x57, 0x4b, 0x90, 0x10, 0x94, 0x2d, 0x64, 0x67, 0x52, 0xe7, 0x98, 0xe7, 0xca, 0xe2, 0xc2, 0x55, 0xf4, 0x42, 0x47, 0x19, 0xf0, 0xbb, 0xda, 0xaa, 0xa4, 0xa6, 0x3f, 0x47, 0xa7, 0x54, 0x55, 0xe8, 0x5d, 0xa2, 0x53, 0x74, 0x64, 0xcd, 0x52, 0x34, 0x2f, 0x88, 0x0c, 0x88, 0xf1, 0x4c, 0xe3, 0xd8, 0xbd, 0xf0, 0x25, 0xce, 0xeb, 0x79, 0x8e, 0xc2, 0xbd, 0x33, 0x0e, 0x76, 0x43, 0x01, 0xcd, 0x04, 0x7b, 0xf1, 0x6d, 0x14, 0xbd, 0x13, 0x8f, 0x52, 0x56, 0x8c, 0x98, 0x20, 0x74, 0xe6, 0xb5, 0x87, 0x42, 0xaa, 0x1c, 0x74, 0x53, 0x31, 0x95, 0x21, 0x44, 0xb7, 0x39, 0xd1, 0x9d, 0xb1, 0x7a, 0xc0, 0xf9, 0x60, 0x64, 0x5a, 0x67, 0xa7, 0x23, 0xab, 0x0f, 0x1a, 0xc4, 0x17, 0x19, 0x57, 0x40, 0x4b, 0xca, 0x99, 0xb6, 0x73, 0xf0, 0x8a, 0xf8, 0xad, 0x81, 0x59, 0x49, 0xbe, 0x7f, 0x0d, 0x65, 0x05, 0x1e, 0x19, 0xc2, 0xad, 0x29, 0x30, 0x16, 0x26, 0xa2, 0x5a, 0x19, 0xd5, 0xa9, 0x48, 0x8c, 0x0a, 0x9e, 0xe4, 0x7a, 0x33, 0x8a, 0x2d, 0xbe, 0x50, 0xbb, 0x42, 0xc5, 0xa7, 0xaf, 0xbc, 0x95, 0xb9, 0x34, 0x41, 0x0e, 0x74, 0xcc, 0x57, 0x70, 0xaa, 0x56, 0x75, 0x1e, 0xc2, 0xeb, 0x60, 0xa2, 0xae, 0x07, 0xb5, 0xf0, 0x1d, 0xe9, 0xc1, 0xef, 0xf1, 0x3c, 0x99, 0x35, 0xf3, 0xf6, 0x67, 0x12, 0xc5, 0x81, 0x03, 0xd1, 0x19, 0x19, 0xc3, 0x3a, 0x21, 0x75, 0x93, 0x5c, 0x46, 0xa9, 0x48, 0x89, 0x1d, 0x4b, 0x31, 0xa1, 0x97, 0xd4, 0xef, 0x94, 0x78, 0x4a, 0x87, 0x22, 0x0a, 0x1c, 0xb6, 0xe5, 0x12, 0x4e, 0x85, 0x92, 0x03, 0xd5, 0x1c, 0x7c, 0x72, 0x45, 0xdb, 0x59, 0xca, 0xa9, 0xa7, 0x49, 0x41, 0xb2, 0x82, 0x14, 0x0a, 0x15, 0x5f, 0xb3, 0xcc, 0x2e, 0x34, 0x13, 0x54, 0xe9, 0x50, 0x15, 0x87, 0xe2, 0xef, 0xd9, 0x9a, 0xcb, 0x0c, 0x3c, 0x85, 0x0f, 0x76, 0x9f, 0xb4, 0xb4, 0x26, 0xeb, 0x00, 0x86, 0xd0, 0xd1, 0xdf, 0x72, 0xb8, 0x57, 0xd7, 0x30, 0xc7, 0x90, 0x39, 0x25, 0xde, 0xaa, 0x0b, 0x87, 0x6a, 0x2f, 0x46, 0xc2, 0x39, 0x84, 0x42, 0x1a, 0x8c, 0xb6, 0x6e, 0x92, 0x6d, 0x75, 0x44, 0x0d, 0x42, 0x61, 0x7c, 0xb4, 0xa3, 0x85, 0x80, 0x97, 0x69, 0x21, 0x21, 0x97, 0x07, 0xad, 0x88, 0x83, 0x1e, 0x1a, 0x6f, 0x81, 0x4b, 0x5b, 0x91, 0xb0, 0x44, 0x24, 0x5e, 0x0b, 0x23, 0xf2, 0xf4, 0x91, 0x01, 0x4b, 0x4b, 0xa3, 0xc7, 0x47, 0xaf, 0xad, 0x41, 0x4f, 0x74, 0x08, 0x74, 0x25, 0xe5, 0x1f, 0x32, 0x24, 0x7d, 0xd1, 0xeb, 0xca, 0x5a, 0x17, 0xc6, 0x73, 0xee, 0xe7, 0xf0, 0x67, 0xf8, 0x58, 0x34, 0x17, 0xb2, 0x06, 0xcd, 0xa4, 0x4c, 0xb8, 0x78, 0xa1, 0x9a, 0x40, 0xcd, 0x1a, 0x0a, 0xa3, 0xce, 0xd5, 0xd8, 0x7a, 0xc1, 0xd7, 0x85, 0x98, 0x3b, 0x2a, 0x85, 0xed, 0x7e, 0xde, 0x38, 0xaa, 0x04, 0x4e, 0x1b, 0xa6, 0x5c, 0xa5, 0x40, 0x01, 0x35, 0xa0, 0xfb, 0x07, 0xb9, 0x95, 0xdf, 0x57, 0x1c, 0xb4, 0xe8, 0x44, 0x74, 0x8d, 0xfa, 0x7b, 0xcb, 0xd2, 0x8a, 0xe6, 0x72, 0x5e, 0x9b, 0xd1, 0x99, 0x77, 0xed, 0x4c, 0x1d, 0x50, 0x71, 0xd0, 0xa1, 0xd2, 0xff, 0x25, 0xe0, 0x9c, 0x4b, 0x82, 0x41, 0x49, 0x16, 0xf7, 0xad, 0xf1, 0xa1, 0x08, 0x9d, 0xf2, 0x67, 0x9b, 0x77, 0xf0, 0x0b, 0x14, 0x1a, 0x1a, 0x90, 0xbe, 0xb7, 0xaf, 0xc8, 0x6d, 0xe4, 0xc1, 0x0f, 0x61, 0xeb, 0x3a, 0x39, 0x6e, 0x68, 0x1c, 0xc8, 0x5a, 0x13, 0x0d, 0x62, 0x87, 0xda, 0x12, 0x83, 0xd1, 0x33, 0x9b, 0x70, 0xba, 0xb0, 0xc0, 0x6c, 0xc5, 0xd3, 0xca, 0x2d, 0x1f, 0x25, 0xf5, 0x91, 0x84, 0x82, 0x74, 0x8e, 0x61, 0xb7, 0xb6, 0x67, 0x36, 0x4f, 0xe8, 0x26, 0x3f, 0xa9, 0xbb, 0x46, 0x53, 0x4e, 0x67, 0xb0, 0x0c, 0x82, 0xf0, 0xe9, 0x28, 0x19, 0xa7, 0x89, 0x2f, 0x8c, 0xf5, 0xef, 0x56, 0x4c, 0x54, 0x33, 0xa4, 0x56, 0x9e, 0x5c, 0x53, 0x08, 0x8a, 0xd3, 0x79, 0x33, 0x73, 0x18, 0xe8, 0x71, 0x5c, 0xb4, 0x52, 0xb9, 0x32, 0x6f, 0xb1, 0x30, 0x50, 0xc2, 0xe5, 0x42, 0x49, 0x8f, 0x9f, 0xf2, 0xe1, 0x10, 0x7f, 0x6e, 0x5c, 0x0e, 0x79, 0xe7, 0xfc, 0x53, 0x7d, 0x9f, 0xc5, 0x61, 0x57, 0x44, 0x83, 0x64, 0xd4, 0x7c, 0x0e, 0x66, 0x26, 0xc1, 0xcd, 0xc2, 0x89, 0x6f, 0x79, 0xdb, 0x27, 0x1b, 0x23, 0x0d, 0x39, 0x27, 0x79, 0xe4, 0x70, 0x93, 0x45, 0x8c, 0x93, 0x16, 0x36, 0x89, 0x69, 0x6e, 0xe3, 0xa8, 0xd9, 0xf4, 0x0d, 0x36, 0x50, 0x73, 0x24, 0x6f, 0x63, 0x3a, 0x0d, 0x39, 0xb6, 0x70, 0x23, 0x13, 0x1c, 0xa8, 0x7c, 0x48, 0xff, 0xb5, 0x6d, 0x68, 0x03, 0xc0, 0x50, 0xf8, 0xe6, 0x98, 0x84, 0x69, 0xab, 0x48, 0xb6, 0x47, 0xf7, 0xef, 0x5f, 0xb3, 0xbb, 0xcc, 0x8e, 0x13, 0x13, 0x99, 0xe8, 0x08, 0x6e, 0x1a, 0xed, 0xa1, 0xf0, 0xf5, 0x7d, 0xce, 0x14, 0xc4, 0x9a, 0x17, 0x96, 0x69, 0x6f, 0x8d, 0x90, 0xa1, 0x91, 0x01, 0xe3, 0xdd, 0x86, 0x75, 0xd8, 0x4d, 0x84, 0xd0, 0x07, 0x3d, 0x7a, 0xd6, 0x78, 0xa4, 0x55, 0x56, 0x09, 0xfa, 0x7c, 0xa5, 0x0f, 0x4b, 0x9c, 0x4c, 0x40, 0x8a, 0xab, 0xfe, 0xd1, 0x27, 0x27, 0xcd, 0xdb, 0xe3, 0x9f, 0x9d, 0x03, 0xe4, 0x75, 0xd8, 0x5a, 0x04, 0xe2, 0x63, 0x82, 0x6f, 0x3a, 0xd1, 0x13, 0x6d, 0x72, 0xd7, 0x3c, 0x7c, 0xdf, 0x00, 0xae, 0xa2, 0x40, 0xa2, 0xb5, 0x01, 0xff, 0x11, 0xa8, 0xac, 0xb4, 0x12, 0x84, 0xb9, 0xeb, 0x93, 0xd4, 0x98, 0x27, 0x99, 0xd4, 0xa3, 0x27, 0x79, 0xd5, 0xf5, 0x67, 0x4b, 0xe3, 0x80, 0xea, 0x9c, 0xa6, 0x5a, 0x37, 0x63, 0x86, 0x58, 0xa2, 0x36, 0x12, 0xde, 0xcc, 0xbe, 0xa3, 0xf5, 0x6d, 0x69, 0x3c, 0x9e, 0x51, 0x5e, 0xb5, 0x67, 0xa1, 0xb6, 0x19, 0x3b, 0x64, 0xe9, 0x4c, 0x7e, 0x45, 0x86, 0xf1, 0x5a, 0x97, 0x28, 0x8a, 0x53, 0x96, 0xa5, 0xe1, 0x22, 0xf0, 0x88, 0xa8, 0xc0, 0x84, 0xc2, 0x5c, 0xc1, 0x69, 0x9c, 0x6f, 0xe3, 0x32, 0xf0, 0xa5, 0xe7, 0x70, 0x99, 0xbf, 0x9f, 0x79, 0x28, 0x57, 0x49, 0x68, 0xd8, 0x0b, 0x1b, 0x65, 0xc5, 0xdd, 0x1f, 0x27, 0x58, 0xda, 0x41, 0xb6, 0x06, 0xfa, 0xa7, 0x76, 0x3a, 0x48, 0x40, 0x61, 0x8f, 0x42, 0xa0, 0x94, 0x43, 0x83, 0x0b, 0x0d, 0xe9, 0x9f, 0xcf, 0xb3, 0x5d, 0x4f, 0xd7, 0x96, 0xfd, 0xce, 0x7e, 0x79, 0x16, 0x82, 0xa1, 0x8e, 0x9d, 0xdf, 0xf8, 0x80, 0x20, 0x89, 0xa6, 0xb6, 0xfb, 0xb8, 0x0e, 0xd7, 0xcf, 0xe1, 0xe9, 0x89, 0x30, 0x93, 0x95, 0x7f, 0x9e, 0x9f, 0xb0, 0xb2, 0xb7, 0x7b, 0xe6, 0xee, 0xaa, 0xe8, 0x07, 0x91, 0xef, 0xd3, 0x5d, 0x90, 0x36, 0x79, 0x3c, 0xba, 0x9d, 0xcf, 0xda, 0x41, 0x25, 0x21, 0x61, 0x76, 0x67, 0xf9, 0x43, 0xd4, 0x83, 0x42, 0xce, 0x40, 0x5a, 0xad, 0x00, 0x8f, 0xfd, 0x54, 0x9c, 0x49, 0x64, 0x9e, 0x7d, 0xac, 0x64, 0x62, 0x2b, 0xf4, 0xdb, 0x4f, 0xac, 0xda, 0x2e, 0x8b, 0x9d, 0x5b, 0xf5, 0x9a, 0x81, 0xba, 0xf4, 0x82, 0x58, 0xc8, 0x4e, 0x2c, 0x74, 0x63, 0xf5, 0x0e, 0x88, 0x3d, 0x65, 0x07, 0x02, 0xdf, 0x92, 0x8a, 0x9a, 0xed, 0x1e, 0xff, 0x2b, 0xab, 0xd0, 0x66, 0xc2, 0xc0, 0x42, 0x3e, 0xf5, 0x3a, 0xd9, 0xa5, 0x77, 0xd3, 0xfa, 0xc0, 0xe9, 0x72, 0x7b, 0x5d, 0xf2, 0xf5, 0x58, 0xd7, 0x91, 0x2e, 0xa8, 0x3a, 0xb2, 0x2b, 0xcf, 0xa8, 0x00, 0xbb, 0xf4, 0xfc, 0xfb, 0x2d, 0xb6, 0xac, 0x4a, 0x5b, 0x1a, 0xf4, 0x52, 0xe8, 0xc8, 0x31, 0x07, 0xc5, 0x78, 0x8b, 0x02, 0xfa, 0xa7, 0xd6, 0xd5, 0xa3, 0x8e, 0xba, 0x9b, 0x38, 0x54, 0x12, 0xd3, 0x12, 0x83, 0x93, 0x6e, 0x2b, 0xb9, 0xae, 0x26, 0x26, 0xa0, 0xb7, 0x12, 0x8f, 0x1f, 0x46, 0x77, 0x63, 0xd2, 0xde, 0xe2, 0xd3, 0xb8, 0xcc, 0x73, 0x45, 0x2c, 0x52, 0x7c, 0x9c, 0x17, 0x05, 0x4b, 0xb9, 0x63, 0x74, 0x43, 0x41, 0xb3, 0x0a, 0x32, 0xa1, 0x51, 0x36, 0xde, 0x50, 0x67, 0xc8, 0xe1, 0x54, 0x73, 0x9f, 0xb7, 0x08, 0xf5, 0x81, 0x16, 0x1c, 0x6a, 0x4a, 0x7d, 0xdd, 0x7e, 0x49, 0x10, 0xb7, 0x7e, 0xe7, 0xa3, 0xf8, 0x0c, 0x89, 0x15, 0xd6, 0x16, 0xb8, 0xdf, 0xb4, 0x09, 0x80, 0xec, 0xa1, 0x41, 0x15, 0xac, 0x22, 0xc5, 0xbd, 0x64, 0x31, 0x31, 0xe9, 0xc8, 0x85, 0xf3, 0xa5, 0xcb, 0x14, 0xba, 0x33, 0xb6, 0xd7, 0x2c, 0xf3, 0x77, 0xcd, 0xd8, 0x87, 0x3c, 0x42, 0x6b, 0x33, 0x41, 0x51, 0x26, 0x8a, 0xe6, 0xa8, 0x8f, 0x47, 0x05, 0x8b, 0x67, 0x79, 0x82, 0x1c, 0xdd, 0xe3, 0x24, 0xd9, 0x01, 0xa2, 0xa3, 0x66, 0x7b, 0x10, 0x02, 0x8d, 0x7d, 0xe9, 0x1e, 0x83, 0xf6, 0xac, 0x88, 0x6c, 0x09, 0x44, 0x90, 0x22, 0xbd, 0xe8, 0xa2, 0x32, 0xf6, 0x40, 0xd6, 0x28, 0xa4, 0xc9, 0xc2, 0x0d, 0x3a, 0x7a, 0x93, 0x2d, 0x62, 0xa8, 0x5c, 0x1e, 0xee, 0x27, 0xad, 0xfd, 0x12, 0xb2, 0x68, 0xfb, 0xd1, 0x8c, 0xd0, 0x18, 0xb6, 0x68, 0xe3, 0x2f, 0xc4, 0x87, 0xea, 0x33, 0xaf, 0x20, 0x4e, 0xb8, 0x4d, 0x04, 0xad, 0xb5, 0x47, 0x82, 0x2d, 0x88, 0x14, 0x88, 0x10, 0x3a, 0x28, 0x0c, 0x89, 0x05, 0x68, 0xaa, 0xce, 0x13, 0xe2, 0x8f, 0x6f, 0x89, 0xbb, 0x95, 0xe6, 0xc4, 0x68, 0xaf, 0x6f, 0xe2, 0x21, 0x88, 0x1a, 0x85, 0x93, 0x67, 0x1e, 0xd3, 0xd6, 0x56, 0x70, 0xc2, 0x9e, 0x83, 0x94, 0x92, 0xb5, 0xe6, 0xb4, 0x9b, 0xa9, 0x24, 0xef, 0x48, 0xc2, 0xb4, 0xf3, 0x64, 0x36, 0x40, 0xce, 0x94, 0xa0, 0x4e, 0x01, 0x25, 0xaf, 0x1f, 0xd6, 0x08, 0x1b, 0xd7, 0xf4, 0x1b, 0xde, 0xdf, 0x31, 0xab, 0xa0, 0x88, 0xa7, 0x36, 0x73, 0xf1, 0x0a, 0x75, 0xc0, 0x2a, 0x39, 0x99, 0x81, 0x99, 0x12, 0xd6, 0xb1, 0x9d, 0x8b, 0x1e, 0x01, 0x72, 0xfe, 0x2f, 0xcd, 0x55, 0xc5, 0xcf, 0x4e, 0xe8, 0x07, 0x56, 0x11, 0xd7, 0xd1, 0x6e, 0xa8, 0xbc, 0x69, 0x17, 0x9f, 0x40, 0xdf, 0xee, 0xb2, 0x83, 0xe4, 0xae, 0x3c, 0xbf, 0xdf, 0xf7, 0xf3, 0x28, 0x3e, 0x4e, 0xd3, 0x16, 0x0a, 0x66, 0x58, 0x65, 0xbf, 0x9d, 0xf0, 0x1c, 0x5a, 0xca, 0xb0, 0x4e, 0xb3, 0x36, 0x46, 0x3e, 0x0d, 0xe8, 0x2f, 0xc6, 0xec, 0x26, 0x2a, 0xfa, 0x27, 0x38, 0xec, 0x08, 0x3d, 0x6f, 0x15, 0x63, 0xec, 0x66, 0x63, 0x20, 0x00, 0x88, 0x25, 0xa0, 0x6a, 0xd2, 0xf3, 0x6f, 0x91, 0xda, 0x9d, 0x6c, 0xed, 0x11, 0x61, 0x2a, 0xd1, 0x45, 0x61, 0x97, 0x88, 0x6a, 0x54, 0xdb, 0xa4, 0x99, 0x7b, 0x83, 0x93, 0x59, 0xd6, 0xdf, 0x73, 0x1e, 0x99, 0xa8, 0x27, 0x0f, 0xda, 0xe6, 0xab, 0x0c, 0x8c, 0x11, 0xa4, 0xf0, 0xb0, 0x77, 0x3c, 0x13, 0xca, 0xdd, 0x2c, 0x14, 0x92, 0x69, 0x1a, 0xd5, 0xed, 0xc0, 0x26, 0xc6, 0x1b, 0x6b, 0xc0, 0x67, 0x32, 0x7f, 0xbc, 0x08, 0xcb, 0x7d, 0xa8, 0xd3, 0xfb, 0x77, 0x5d, 0x0d, 0x85, 0x74, 0xd4, 0x99, 0x4d, 0x16, 0x3b, 0xbe, 0x10, 0x7a, 0x48, 0x2a, 0x53, 0x60, 0xce, 0x36, 0x99, 0x8c, 0x8e, 0x6b, 0xd9, 0x6c, 0x4f, 0x45, 0x2f, 0xfa, 0x31, 0x38, 0xd2, 0xe4, 0x3e, 0xf1, 0x46, 0xea, 0x42, 0xde, 0xd3, 0x88, 0xdc, 0xf0, 0x35, 0xd6, 0xd6, 0xa0, 0x95, 0xac, 0xb2, 0x30, 0xb8, 0x09, 0x85, 0x33, 0x77, 0xb6, 0x09, 0x4f, 0x6f, 0x26, 0xed, 0x42, 0xf9, 0xa1, 0x6f, 0x23, 0x5d, 0xa2, 0x2d, 0xea, 0x42, 0x7d, 0x38, 0x33, 0x69, 0x44, 0x6b, 0x3f, 0x9b, 0xec, 0xfb, 0x3c, 0xe0, 0xac, 0x4e, 0xc6, 0xf2, 0xa6, 0x11, 0xad, 0xf1, 0xc9, 0x85, 0xf9, 0x58, 0xf6, 0x19, 0x2b, 0x30, 0x61, 0x3e, 0xc6, 0x84, 0x3b, 0x77, 0x0e, 0x14, 0x8e, 0xaf, 0x10, 0x4d, 0x68, 0xd0, 0xe2, 0x79, 0x3b, 0x91, 0x2c, 0x34, 0x84, 0x90, 0xe7, 0x1f, 0xab, 0xa0, 0x65, 0xd8, 0x2a, 0x64, 0x92, 0x29, 0xf2, 0x1d, 0x79, 0x7f, 0x0a, 0xc0, 0x0a, 0x9e, 0x7a, 0x4c, 0x1a, 0x94, 0x67, 0x5a, 0xab, 0xeb, 0x7f, 0xf5, 0x6e, 0x23, 0x98, 0xad, 0x86, 0x60, 0x93, 0xe7, 0x8f, 0x5f, 0x87, 0x77, 0xdf, 0xae, 0x1c, 0x71, 0x0b, 0x1d, 0x34, 0x3b, 0xad, 0x70, 0xd1, 0xe7, 0x65, 0x56, 0x33, 0xc0, 0x1e, 0x9f, 0x40, 0x23, 0x93, 0xa9, 0x29, 0x91, 0x11, 0x1b, 0x4b, 0x01, 0x7e, 0xd6, 0x53, 0x7b, 0x9a, 0x29, 0xa6, 0xe2, 0x85, 0x44, 0x00, 0x12, 0x82, 0xf0, 0x5a, 0x2b, 0xfa, 0x7d, 0x12, 0x2b, 0xc4, 0xfb, 0x46, 0xc3, 0xa3, 0xad, 0x80, 0x63, 0x10, 0xba, 0x99, 0x98, 0x3a, 0x26, 0xd7, 0x97, 0x4c, 0x01, 0x59, 0x1a, 0xee, 0xde, 0xb5, 0x6a, 0x0e, 0x87, 0xdf, 0xbd, 0xe0, 0xef, 0x4d, 0xc3, 0x23, 0x68, 0x58, 0x7c, 0xa7, 0x16, 0xe6, 0x4c, 0x0c, 0xa4, 0x46, 0x51, 0xcc, 0x35, 0x5b, 0xf4, 0x7c, 0x9e, 0xfd, 0xbe, 0x4e, 0xd2, 0x9c, 0x6e, 0xdb, 0x9d, 0x26, 0x48, 0x1f, 0x96, 0x2b, 0xaf, 0xc5, 0x4f, 0x40, 0xf6, 0xa5, 0xce, 0xa1, 0x74, 0x8c, 0x41, 0x1a, 0xd6, 0x3b, 0xed, 0x27, 0xb9, 0xb2, 0x68, 0x5a, 0x79, 0xae, 0x08, 0xfd, 0x43, 0x70, 0x9b, 0xf9, 0x72, 0xc0, 0x58, 0xf6, 0x18, 0x32, 0x16, 0xc4, 0xda, 0xa8, 0xbc, 0xf9, 0x02, 0x18, 0xf9, 0xdc, 0xcf, 0x8f, 0x35, 0x82, 0x0f, 0x76, 0xc7, 0x37, 0xf0, 0x15, 0x68, 0x20, 0x14, 0x55, 0xe7, 0x1e, 0xe3, 0xca, 0x1f, 0xf4, 0x25, 0xf0, 0x27, 0xad, 0xd0, 0xb5, 0xc8, 0x38, 0x1e, 0x38, 0x34, 0x56, 0xe3, 0xd1, 0xf4, 0xb6, 0x1e, 0x51, 0x23, 0x5d, 0xce, 0x8b, 0xda, 0x4c, 0x07, 0x13, 0xeb, 0x5d, 0x44, 0x45, 0xd2, 0x6f, 0xff, 0x89, 0xe8, 0xc2, 0x7f, 0xd6, 0xda, 0xa4, 0xf2, 0x75, 0x5a, 0x4e, 0xbb, 0x08, 0x14, 0x09, 0x0d, 0xca, 0xe4, 0x95, 0xb9, 0x18, 0x46, 0xca, 0x44, 0x31, 0x0e, 0x80, 0x3d, 0x3a, 0x59, 0xad, 0xcd, 0x85, 0xc3, 0xcd, 0x90, 0x12, 0xda, 0x87, 0xa3, 0x56, 0xd3, 0x8d, 0xff, 0x3c, 0x7c, 0xc4, 0x05, 0x6a, 0x72, 0xa5, 0x59, 0xc5, 0x94, 0xe3, 0xf4, 0x37, 0xb7, 0x4d, 0x75, 0xb0, 0x9c, 0xf7, 0xb8, 0x6a, 0x1f, 0x94, 0xaa, 0x72, 0xb0, 0x27, 0x5c, 0x64, 0x07, 0xdb, 0x56, 0x75, 0x14, 0x2e, 0x2d, 0xb7, 0x35, 0x55, 0x58, 0x99, 0xac, 0xdc, 0x3f, 0xad, 0x50, 0x8e, 0x95, 0xaf, 0x82, 0x94, 0xe8, 0xc2, 0x63, 0xe1, 0x76, 0xfc, 0x45, 0xcd, 0x43, 0x25, 0x5f, 0xff, 0x68, 0xbc, 0xc4, 0x91, 0xae, 0x3b, 0x96, 0x6f, 0x5b, 0x9d, 0x76, 0x00, 0x4c, 0x1c, 0x40, 0x09, 0x44, 0x3f, 0xf5, 0xce, 0x84, 0x14, 0xf9, 0x7a, 0x9c, 0xba, 0x7f, 0xc0, 0x80, 0x23, 0x41, 0xc3, 0xde, 0x18, 0x74, 0x33, 0xaf, 0x7e, 0xfb, 0xb9, 0x0d, 0xd7, 0xdb, 0x96, 0x44, 0x0c, 0xef, 0x87, 0x2b, 0x69, 0xdd, 0xeb, 0xb5, 0xe9, 0x48, 0x27, 0xc3, 0xb4, 0x47, 0x4a, 0x3c, 0xe6, 0x16, 0xed, 0x60, 0x92, 0x0c, 0x5e, 0x59, 0x07, 0xcd, 0xfd, 0x13, 0x51, 0xc1, 0xe5, 0x4e, 0x03, 0xc5, 0xcf, 0xf2, 0x34, 0x20, 0x34, 0xa2, 0xc8, 0xb8, 0xb2, 0x93, 0xf1, 0x86, 0xb1, 0x9f, 0xf4, 0x47, 0x46, 0x95, 0x31, 0x74, 0x58, 0xd4, 0x5e, 0x75, 0x01, 0x18, 0x13, 0x12, 0x36, 0x93, 0x8b, 0x2a, 0xab, 0x40, 0xa9, 0xa7, 0xf1, 0x74, 0x39, 0xb1, 0xe1, 0xb6, 0x79, 0x22, 0x3e, 0xd0, 0xd7, 0x3a, 0x96, 0x26, 0xfd, 0x95, 0x69, 0x47, 0x0b, 0x59, 0x8e, 0xc2, 0x23, 0xb4, 0xd1, 0x3b, 0x2b, 0x86, 0xe1, 0xbd, 0xce, 0x5a, 0x6a, 0x52, 0xc4, 0x9b, 0x7e, 0xd1, 0x54, 0x05, 0x39, 0xf8, 0x17, 0x59, 0xa5, 0xba, 0xfe, 0x55, 0xdb, 0xda, 0x96, 0xe3, 0x6b, 0xb9, 0x8b, 0x91, 0xfe, 0x6d, 0x6c, 0x41, 0x3a, 0x12, 0xad, 0x21, 0xe6, 0x65, 0xf2, 0xde, 0x4f, 0x8f, 0x8b, 0x15, 0xea, 0x3e, 0x3a, 0x0b, 0x3a, 0xfa, 0x3d, 0x9d, 0xf4, 0xb7, 0x88, 0x7a, 0x62, 0xa6, 0x53, 0x8f, 0x05, 0x51, 0xd4, 0xc3, 0x7e, 0xe7, 0x4e, 0xe5, 0xaf, 0xd4, 0x4a, 0xe2, 0x1d, 0x95, 0x24, 0x3c, 0x98, 0xcb, 0xca, 0xb7, 0x1f, 0x8e, 0xc1, 0x56, 0xfe, 0x03, 0x69, 0x85, 0x39, 0x31, 0x81, 0x98, 0x2d, 0x10, 0xed, 0x74, 0x75, 0xe3, 0xb7, 0x8c, 0x0b, 0xc8, 0x55, 0x10, 0xaf, 0x8e, 0x2a, 0x60, 0x8d, 0xc6, 0x4f, 0xc7, 0x1a, 0x1d, 0x92, 0x66, 0x3f, 0xe9, 0xbf, 0x6e, 0xb9, 0x01, 0x1f, 0x93, 0xc0, 0xd2, 0x3f, 0xbd, 0xe6, 0xaf, 0xf2, 0x00, 0x43, 0x69, 0x99, 0xce, 0xcf, 0x20, 0xa2, 0x6b, 0x0f, 0x58, 0x4f, 0xa2, 0xf4, 0x4f, 0xb9, 0xb7, 0x00, 0x8f, 0x14, 0x9c, 0xaa, 0xbf, 0x34, 0x67, 0x04, 0xbe, 0x50, 0x04, 0x9b, 0xf3, 0x07, 0x27, 0x9e, 0xde, 0xa0, 0x85, 0x43, 0xf3, 0x96, 0x44, 0x67, 0xa9, 0x54, 0xb0, 0x75, 0xce, 0x3d, 0x2f, 0x88, 0x1d, 0xef, 0x77, 0xd4, 0x12, 0xc9, 0xfe, 0x42, 0xfd, 0xab, 0xb2, 0x5a, 0x56, 0xfc, 0xeb, 0x66, 0x50, 0xf2, 0x9e, 0xd4, 0xb0, 0x0d, 0xd3, 0xdd, 0xe0, 0xe5, 0x59, 0x64, 0x3f, 0x26, 0xb8, 0x21, 0xbc, 0xd9, 0x67, 0xfe, 0xa3, 0xe5, 0x3f, 0xc1, 0xb6, 0xd5, 0x30, 0xec, 0x80, 0xdb, 0x33, 0xe1, 0xe6, 0x15, 0x7f, 0x4a, 0xff, 0x10, 0x00, 0xb8, 0x26, 0x8b, 0x05, 0x8a, 0x4d, 0x7d, 0x39, 0x11, 0x94, 0x59, 0xd4, 0xf2, 0x1a, 0x90, 0x12, 0xcb, 0x12, 0x57, 0xe5, 0x19, 0x1a, 0xac, 0xe6, 0x59, 0xc9, 0x93, 0x92, 0x6d, 0x87, 0xa6, 0xb3, 0x42, 0xa2, 0xcc, 0x1c, 0xb0, 0x9e, 0x49, 0x99, 0xa1, 0xcc, 0xf7, 0x26, 0x76, 0x1e, 0xd2, 0x5f, 0xa6, 0x39, 0xba, 0x38, 0xa8, 0xcc, 0x75, 0xee, 0x14, 0x20, 0xf4, 0x3e, 0x05, 0xf1, 0xd7, 0xd4, 0xc1, 0x7d, 0x33, 0x06, 0x9c, 0xda, 0x92, 0xc2, 0x19, 0x8c, 0x3b, 0xc5, 0x53, 0x57, 0xb4, 0x0e, 0x9b, 0x52, 0x86, 0x93, 0x63, 0x3d, 0x40, 0x32, 0x5b, 0x14, 0xbe, 0xea, 0xd9, 0xe4, 0xab, 0x4b, 0x7e, 0xde, 0x45, 0x2b, 0x17, 0xaa, 0x60, 0x9b, 0xc1, 0xfe, 0xae, 0x1a, 0x51, 0x6e, 0x3d, 0x08, 0xf2, 0x86, 0x41, 0x5d, 0x10, 0x16, 0x14, 0x9a, 0x75, 0xcd, 0x7b, 0x00, 0xb2, 0x09, 0x2b, 0x00, 0xc1, 0xee, 0x8c, 0xf4, 0xe8, 0xb6, 0xbc, 0x0c, 0xe0, 0x47, 0xd7, 0x8b, 0x37, 0x0b, 0x76, 0x33, 0xf3, 0xfc, 0x75, 0xfd, 0x78, 0xfe, 0xfa, 0x0e, 0xac, 0x72, 0xb2, 0xe7, 0x58, 0x08, 0x5e, 0xdc, 0xd2, 0xd4, 0x8f, 0xc7, 0xd9, 0xa5, 0xad, 0xfd, 0xc0, 0x92, 0x3e, 0x81, 0xcf, 0xd5, 0x65, 0x78, 0xe6, 0xdd, 0xa9, 0xdd, 0x63, 0x9e, 0xf8, 0x76, 0x46, 0x2c, 0xec, 0x07, 0x93, 0x88, 0x4d, 0xc5, 0xf8, 0xb9, 0xd6, 0x0d, 0xb0, 0x1f, 0x3c, 0x56, 0xa7, 0x05, 0x6c, 0x65, 0xdf, 0x75, 0x14, 0xc0, 0x12, 0x50, 0x66, 0x64, 0x99, 0x9e, 0x19, 0xba, 0x8c, 0x22, 0xb0, 0xc8, 0x2b, 0x31, 0xfe, 0xa4, 0x7c, 0xc5, 0xea, 0x2f, 0x36, 0xce, 0x70, 0xff, 0xde, 0xc8, 0xe8, 0x9d, 0x30, 0x92, 0x8b, 0xf1, 0xc0, 0x7e, 0x33, 0xfa, 0xe1, 0xa5, 0x62, 0xc3, 0xc6, 0x7d, 0x86, 0x92, 0xe7, 0xad, 0x7b, 0x62, 0xa6, 0x1f, 0x52, 0x93, 0x33, 0x57, 0x51, 0xe1, 0xad, 0x04, 0x3a, 0x93, 0x8a, 0xd5, 0xd1, 0xf4, 0x38, 0x8e, 0x98, 0x07, 0x04, 0x5b, 0xdd, 0x77, 0x3c, 0x64, 0xf6, 0xcd, 0x90, 0xa1, 0xcc, 0xe5, 0xbe, 0xf0, 0x96, 0xa3, 0x6f, 0x65, 0xe7, 0xe2, 0x5b, 0xe1, 0xeb, 0xad, 0xb4, 0xe6, 0xed, 0xb2, 0xc2, 0xa9, 0x1d, 0xf3, 0xcb, 0x69, 0x91, 0xbf, 0x35, 0x00, 0x89, 0xe1, 0xee, 0xb8, 0xf7, 0x17, 0x0c, 0x5f, 0x3f, 0xc6, 0xb1, 0x9e, 0x3b, 0xeb, 0x32, 0x86, 0x82, 0x55, 0x78, 0x6c, 0xea, 0x12, 0xa6, 0xf7, 0x4b, 0x27, 0xfb, 0x77, 0x86, 0x84, 0xfb, 0x78, 0xc6, 0x36, 0xc9, 0x98, 0x06, 0xdf, 0xd8, 0x95, 0xd4, 0x63, 0xc2, 0xaa, 0x54, 0xe5, 0x78, 0x1c, 0x87, 0xf2, 0x9c, 0x10, 0xcd, 0xfb, 0x2b, 0x9f, 0xa9, 0x09, 0x5f, 0x2c, 0xc5, 0xac, 0xd4, 0xf5, 0x36, 0x34, 0xe9, 0xe9, 0x00, 0x24, 0x69, 0xba, 0xdd, 0xe4, 0x6b, 0x32, 0x3a, 0xb6, 0x76, 0xca, 0x83, 0xeb, 0xe9, 0x79, 0xa0, 0x57, 0x9a, 0xca, 0xc0, 0x02, 0xbe, 0x31, 0x55, 0x20, 0x09, 0x9f, 0x5f, 0x44, 0x16, 0x54, 0xee, 0xd0, 0x08, 0xf5, 0xe2, 0xb0, 0x72, 0xde, 0xf6, 0x48, 0x74, 0xb9, 0xfd, 0xaa, 0x27, 0x4f, 0x6b, 0x0d, 0x3b, 0x9f, 0x16, 0x7b, 0xdf, 0x2d, 0x3e, 0xc9, 0xe1, 0x9d, 0xcb, 0xcc, 0x17, 0x80, 0xd7, 0xca, 0xfd, 0x6e, 0x6c, 0x2f, 0x9f, 0x55, 0x8f, 0x81, 0xba, 0x10, 0x7d, 0x96, 0x1e, 0x3c, 0x34, 0x05, 0x56, 0x47, 0x35, 0xda, 0x8b, 0xc9, 0x89, 0x8e, 0xa6, 0x18, 0x02, 0x36, 0xb5, 0x17, 0xc3, 0xfa, 0x90, 0x4e, 0x02, 0xc9, 0xbc, 0x40, 0x0d, 0x4b, 0x8f, 0xf8, 0x8b, 0x17, 0x95, 0xe6, 0x05, 0x27, 0x33, 0xe9, 0xa5, 0x88, 0x8a, 0xad, 0x3d, 0x56, 0x9e, 0x37, 0x8a, 0xe8, 0xb8, 0xbe, 0xbb, 0x48, 0x09, 0xbd, 0x2d, 0xe6, 0x8f, 0x46, 0x79, 0x8d, 0x3d, 0x99, 0xb0, 0x95, 0x56, 0xf5, 0xe5, 0x5b, 0x1a, 0xae, 0xec, 0xee, 0xa4, 0x80, 0x62, 0x0b, 0x13, 0x23, 0xed, 0x4c, 0xe8, 0x1f, 0xc5, 0x9c, 0xaf, 0xe2, 0x74, 0xee, 0xe2, 0x10, 0xda, 0x2f, 0x0a, 0x1a, 0x73, 0x78, 0x27, 0x12, 0xdd, 0x89, 0x52, 0xbe, 0x94, 0x73, 0xa1, 0xeb, 0x01, 0x94, 0x4b, 0x03, 0xb3, 0xc8, 0x0c, 0xe2, 0xec, 0xde, 0xcb, 0xe6, 0x5f, 0x49, 0x7b, 0x45, 0x38, 0x18, 0x3f, 0xa4, 0x5d, 0x29, 0xd1, 0xe5, 0xf3, 0x99, 0x24, 0x40, 0x25, 0x7e, 0x48, 0x95, 0x20, 0xd9, 0x8f, 0x00, 0x62, 0xc6, 0xee, 0xaf, 0x35, 0xf6, 0xa5, 0xf0, 0x76, 0x5f, 0x22, 0x8e, 0x9b, 0x32, 0x23, 0x5e, 0xf5, 0x0e, 0x1c, 0x15, 0x31, 0x73, 0xd8, 0x5c, 0x25, 0x79, 0x62, 0x27, 0xca, 0xc2, 0x26, 0x42, 0x84, 0xad, 0x54, 0x2c, 0xaa, 0xcc, 0x85, 0x29, 0x42, 0x99, 0xa1, 0x93, 0x0c, 0x64, 0x00, 0x71, 0xc3, 0x90, 0xcf, 0x4b, 0x9f, 0xff, 0xb6, 0x3c, 0x1e, 0xcb, 0xb7, 0x48, 0x04, 0x37, 0x5a, 0xf0, 0xa0, 0xe5, 0x07, 0x04, 0x52, 0x49, 0xb3, 0xb9, 0x4a, 0x5d, 0xbf, 0xfb, 0x92, 0x96, 0x1c, 0x04, 0x4f, 0x17, 0xb4, 0x2e, 0x44, 0x26, 0x05, 0x05, 0x97, 0xdc, 0x0f, 0xa1, 0xd8, 0x20, 0x71, 0x33, 0x3f, 0xd6, 0xcf, 0xdd, 0x35, 0x53, 0x76, 0xc7, 0x16, 0x14, 0x43, 0x6f, 0x36, 0xb0, 0xc1, 0x40, 0x22, 0x0c, 0x91, 0x67, 0x28, 0xce, 0x0f, 0xe2, 0x19, 0x14, 0x32, 0xd9, 0x4d, 0x65, 0xb4, 0x32, 0xe8, 0xe8, 0x73, 0x60, 0x5c, 0xd3, 0x18, 0x7b, 0x2f, 0x27, 0xf6, 0x96, 0xff, 0x9b, 0x35, 0x4d, 0xc3, 0xd5, 0x2f, 0x9d, 0x53, 0xe0, 0x1a, 0xf9, 0x2b, 0xdb, 0xe8, 0x99, 0x6b, 0xee, 0x6b, 0x16, 0x23, 0x83, 0xbd, 0x34, 0xce, 0xb2, 0xdf, 0xfe, 0x1c, 0xfc, 0xa0, 0x19, 0xf5, 0x3d, 0xc0, 0x52, 0xba, 0xdc, 0x56, 0x79, 0xce, 0x45, 0x6f, 0x72, 0x55, 0x99, 0xf8, 0x89, 0x3b, 0xa3, 0xde, 0x06, 0x78, 0x0f, 0x73, 0x01, 0x93, 0xd6, 0x14, 0x78, 0x65, 0xfd, 0x09, 0x9f, 0x20, 0x7f, 0xac, 0x77, 0x90, 0x88, 0xcd, 0xa2, 0xa0, 0xe3, 0x56, 0x76, 0x1f, 0xb6, 0x2b, 0x50, 0xc4, 0x6d, 0x54, 0x2b, 0x70, 0xf4, 0x5e, 0x71, 0xb4, 0x29, 0xfe, 0x10, 0x93, 0x91, 0xf8, 0xd1, 0x89, 0x49, 0x3f, 0xe6, 0xcc, 0x40, 0x5e, 0xc1, 0xd1, 0xa4, 0x16, 0x2d, 0x12, 0x9a, 0x49, 0x97, 0x0f, 0x32, 0x17, 0xac, 0x92, 0x9a, 0x46, 0x2a, 0x38, 0x92, 0xe7, 0xef, 0x2d, 0x1f, 0x36, 0x57, 0x37, 0x84, 0xc3, 0xc4, 0xf6, 0x6e, 0xcf, 0x7e, 0x6a, 0x6f, 0xf9, 0xbe, 0xb5, 0xad, 0x1a, 0x05, 0x22, 0xdc, 0x6d, 0xb2, 0x67, 0x69, 0xf3, 0xd4, 0x27, 0xf8, 0x15, 0x3d, 0xbb, 0x11, 0x8c, 0xd8, 0x32, 0x16, 0x7e, 0x3c, 0x96, 0x79, 0xe9, 0x80, 0x71, 0x2b, 0x45, 0x51, 0x90, 0x58, 0x65, 0x43, 0x07, 0x51, 0x9f, 0x65, 0x76, 0xca, 0x2c, 0x18, 0x8a, 0x45, 0xd1, 0x21, 0xc6, 0xce, 0xbf, 0xfc, 0x83, 0xe9, 0xb9, 0x73, 0x35, 0xc9, 0x74, 0x70, 0xf1, 0xc2, 0x43, 0x10, 0x2c, 0x01, 0xf4, 0xf8, 0xc6, 0x7b, 0xf4, 0xec, 0x47, 0x23, 0xba, 0x9e, 0x68, 0x60, 0x63, 0xc3, 0xd5, 0xbe, 0x9a, 0x6c, 0x31, 0xe4, 0xbb, 0x94, 0x5a, 0xc6, 0x38, 0xf5, 0xef, 0x1b, 0x3b, 0x21, 0x10, 0x12, 0x8d, 0xcd, 0x65, 0x40, 0xb6, 0x70, 0x62, 0xdd, 0x66, 0x0d, 0xc9, 0x31, 0x13, 0x4c, 0x70, 0x49, 0xe4, 0xd0, 0x44, 0xee, 0xce, 0xc5, 0x8e, 0xd8, 0xfd, 0xb8, 0x75, 0x1e, 0x75, 0xac, 0xc4, 0xf1, 0xf9, 0x6a, 0xee, 0x8a, 0x2b, 0x18, 0x50, 0x61, 0xf6, 0x0d, 0xb5, 0xa0, 0x29, 0xe4, 0x1f, 0xd7, 0x64, 0xcf, 0xc5, 0xf1, 0x38, 0x2e, 0x58, 0x67, 0x8a, 0x61, 0x8a, 0xb3, 0x38, 0xda, 0xd1, 0x08, 0x00, 0x76, 0x68, 0x40, 0x9d, 0x0d, 0x98, 0x16, 0x32, 0x48, 0x35, 0x95, 0xec, 0xb2, 0x6b, 0xd0, 0xe3, 0x12, 0xbb, 0xd4, 0x42, 0xf9, 0x40, 0xdb, 0xa8, 0x97, 0x37, 0xc2, 0xce, 0xd2, 0xbe, 0xbd, 0x69, 0x9a, 0xdc, 0x4a, 0x52, 0x76, 0xc2, 0x63, 0xe4, 0x63, 0x50, 0xf8, 0xa5, 0xdf, 0xdb, 0x9c, 0x29, 0x41, 0x2e, 0x7f, 0x34, 0x4b, 0xce, 0x9c, 0x1f, 0x02, 0x83, 0x33, 0x7d, 0xbd, 0x13, 0x7a, 0xfe, 0x7d, 0x51, 0x90, 0x93, 0x7c, 0x56, 0xb2, 0xd2, 0x09, 0x0f, 0xb1, 0x9d, 0x92, 0xf8, 0xa3, 0xfe, 0x03, 0x26, 0xd9, 0x56, 0x4f, 0x8b, 0x12, 0xb7, 0x4b, 0x76, 0xee, 0x8e, 0xc3, 0x59, 0xa6, 0x85, 0xc8, 0xcf, 0xf9, 0xa7, 0x47, 0xdd, 0x6a, 0xc5, 0xe0, 0x78, 0xa8, 0x19, 0xf4, 0x48, 0x4e, 0x2a, 0x00, 0xac, 0xcc, 0xef, 0x2a, 0xfe, 0xa5, 0x37, 0x1a, 0x18, 0xdc, 0x49, 0x0b, 0x17, 0xa8, 0xc7, 0x22, 0x5f, 0x6f, 0xd8, 0xfe, 0xdf, 0xf2, 0x85, 0x90, 0x96, 0xc6, 0x64, 0x2d, 0x55, 0x03, 0x74, 0xe1, 0xc7, 0x40, 0x49, 0x07, 0xb0, 0xbe, 0x69, 0x16, 0x72, 0xe3, 0xf5, 0xbe, 0xd5, 0xea, 0x8c, 0x34, 0x07, 0xda, 0x6c, 0xca, 0xe2, 0xb4, 0xda, 0xc2, 0x6e, 0xf1, 0xc5, 0x64, 0xa7, 0x2b, 0xa6, 0x4e, 0x80, 0x1b, 0xaa, 0x0c, 0x27, 0xc3, 0x13, 0xe8, 0x8b, 0xec, 0xdb, 0x03, 0x1c, 0xd3, 0x9b, 0xa5, 0xd1, 0x20, 0xac, 0xd2, 0x70, 0x17, 0x8c, 0x1e, 0x0a, 0x12, 0x83, 0xc2, 0xc4, 0x2f, 0x86, 0xee, 0xde, 0x46, 0x5b, 0x61, 0xed, 0x1e, 0xfe, 0x38, 0x6b, 0xe0, 0x44, 0x03, 0x72, 0xcb, 0xbe, 0x1e, 0xc5, 0x2a, 0xe0, 0x3f, 0x10, 0x83, 0x62, 0x4b, 0x71, 0x12, 0xe7, 0x6e, 0x36, 0x75, 0xdd, 0x6a, 0xe9, 0xa9, 0xa4, 0x2f, 0x8a, 0x35, 0xf2, 0xad, 0x1b, 0xa5, 0x76, 0xe6, 0x62, 0x3a, 0xbb, 0x47, 0xea, 0xe0, 0x50, 0x38, 0x4b, 0x60, 0x26, 0xf2, 0xab, 0xd7, 0x39, 0x90, 0x85, 0x67, 0x72, 0x69, 0xa9, 0x2c, 0xcc, 0x9e, 0x84, 0x72, 0xb7, 0xef, 0xa2, 0x25, 0xba, 0xd3, 0x71, 0x88, 0x5b, 0xc7, 0x48, 0x2a, 0x43, 0xe6, 0xa7, 0x17, 0x9e, 0xba, 0xc1, 0x4b, 0xc1, 0x52, 0x37, 0x6c, 0x0f, 0x94, 0x27, 0xb8, 0x1d, 0xd5, 0x65, 0x3c, 0x14, 0xa7, 0x08, 0x46, 0x57, 0xf2, 0x29, 0x1e, 0x66, 0x47, 0xe7, 0xf1, 0x03, 0x70, 0xae, 0x0e, 0x93, 0x4c, 0xba, 0x55, 0xc6, 0xda, 0xd6, 0xeb, 0x7a, 0x93, 0x6a, 0x33, 0xdd, 0xfd, 0xb4, 0xfa, 0xd2, 0x7d, 0x56, 0xf2, 0x97, 0x6c, 0x11, 0x62, 0xa4, 0x6e, 0xd0, 0x1b, 0xd6, 0xff, 0xe8, 0xae, 0xcc, 0x4f, 0x9e, 0xdc, 0x92, 0x50, 0xea, 0x4e, 0x7c, 0x0d, 0x7a, 0x87, 0x55, 0x3d, 0xfa, 0x16, 0xb9, 0x18, 0x93, 0x10, 0xc0, 0x69, 0xb1, 0xbd, 0xdd, 0xe5, 0x0a, 0x92, 0x05, 0xbb, 0xdc, 0x5f, 0x13, 0x6c, 0x75, 0xca, 0x6b, 0xdd, 0xf9, 0xfc, 0xdd, 0xab, 0x60, 0x9a, 0xcd, 0xbe, 0xbe, 0xf7, 0x91, 0x21, 0xc7, 0x88, 0x1b, 0x10, 0x92, 0x98, 0xd8, 0x53, 0x9d, 0x3c, 0xd7, 0xcb, 0x12, 0x8a, 0x2e, 0x4b, 0x48, 0x06, 0x9a, 0xa9, 0x8d, 0x5d, 0x65, 0x14, 0x23, 0x56, 0x8d, 0xa7, 0x88, 0x05, 0x22, 0x3f, 0xfa, 0x42, 0xf0, 0x8a, 0x3b, 0x59, 0x5e, 0x61, 0x92, 0x03, 0x96, 0x58, 0x12, 0x95, 0xe6, 0x93, 0x1e, 0x78, 0x66, 0xdb, 0x2d, 0xd9, 0xdc, 0xf0, 0xcb, 0xa1, 0xdc, 0x21, 0xe1, 0xa8, 0x34, 0x1b, 0x35, 0x25, 0x87, 0xff, 0x34, 0x6a, 0x37, 0xb7, 0xf0, 0xce, 0x88, 0x89, 0x65, 0xea, 0x03, 0xec, 0x00, 0x08, 0x19, 0x9b, 0x62, 0xd8, 0x09, 0xe9, 0x61, 0x65, 0x04, 0x54, 0x4f, 0x48, 0x8e, 0x5c, 0x7f ],
- const [ 0x2c, 0x97, 0xef, 0x4f, 0x65, 0x31, 0x94, 0x44, 0x19, 0x9d, 0xf6, 0x71, 0xde, 0xae, 0xe9, 0x66, 0xd1, 0x96, 0x28, 0x05, 0x23, 0x59, 0xf7, 0x91, 0xd5, 0x81, 0x06, 0x08, 0xbf, 0x14, 0x99, 0xb3, 0xd7, 0xc3, 0xe6, 0xfb, 0xb0, 0x64, 0xbe, 0x7e, 0x41, 0xa2, 0x70, 0x62, 0xe8, 0xf3, 0xeb, 0xe9, 0xaf, 0xcb, 0x22, 0x46, 0xcd, 0x10, 0xb5, 0xb0, 0x70, 0xcd, 0xcd, 0xb4, 0xb9, 0x2a, 0x47, 0xcf, 0x08, 0x9c, 0x16, 0x3c, 0x7b, 0x59, 0xe2, 0x0b, 0xb1, 0x0f, 0xf5, 0x73, 0xd4, 0xd5, 0x58, 0x69, 0xd6, 0x62, 0x39, 0x71, 0xfa, 0x7c, 0x90, 0xb5, 0x97, 0xb4, 0x03, 0x54, 0x19, 0x51, 0x06, 0xfc, 0x48, 0x8a, 0x46, 0xbb, 0xcd, 0xf8, 0x48, 0x12, 0xf1, 0x4a, 0x4d, 0x4c, 0xa9, 0x3b, 0x7a, 0x0d, 0xd0, 0xc1, 0x35, 0x2e, 0xb3, 0x87, 0xd2, 0xc8, 0xd2, 0x9e, 0x6f, 0x8f, 0xe5, 0x70, 0x1c, 0x62, 0x1e, 0xf5, 0x40, 0x20, 0xae, 0x29, 0x38, 0xbc, 0x8a, 0xbd, 0x40, 0x94, 0x6f, 0x0c, 0x97, 0xfe, 0x23, 0x52, 0xde, 0x24, 0xff, 0x18, 0xc1, 0x13, 0xaa, 0xf3, 0xda, 0x0e, 0x27, 0x6e, 0xd2, 0x28, 0x12, 0x45, 0xca, 0x12, 0x26, 0xd4, 0xf9, 0x31, 0x03, 0xce, 0x96, 0xf3, 0x2e, 0x32, 0xf8, 0x64, 0x5a, 0x7b, 0xfc, 0xfc, 0xe6, 0x18, 0xa7, 0xbb, 0xa6, 0x1b, 0x0c, 0x79, 0xe6, 0x35, 0x70, 0x77, 0xac, 0xe2, 0xad, 0x39, 0x3e, 0xe1, 0xd4, 0x98, 0xe4, 0xe7, 0x16, 0x13, 0xef, 0x94, 0xe5, 0x66, 0xfa, 0xa6, 0x56, 0x5e, 0x70, 0x6d, 0xca, 0xeb, 0x4f, 0x7f, 0xcd, 0x77, 0x2b, 0xac, 0x3e, 0x76, 0x75, 0x34, 0xb1, 0x3e, 0xfd, 0x38, 0x11, 0x19, 0xb6, 0x6f, 0x8a, 0x99, 0xb9, 0x1a, 0xa5, 0x2c, 0x8d, 0x3a, 0xb5, 0xf0, 0xa6, 0x00, 0x73, 0xc9, 0x2b, 0x85, 0xe5, 0xb0, 0xfd, 0xbb, 0x84, 0x4e, 0xf4, 0xa4, 0x9d, 0xc9, 0x6c, 0xc1, 0xf8, 0xde, 0x00, 0xce, 0xb8, 0x30, 0x95, 0xac, 0x82, 0xdf, 0x9b, 0x9f, 0xe1, 0x5d, 0x8f, 0xb9, 0xe9, 0x7d, 0xc4, 0x96, 0x1b, 0xcd, 0x64, 0x4a, 0x89, 0x26, 0xb1, 0x98, 0x3b, 0x81, 0x91, 0x65, 0xd0, 0x0c, 0x4a, 0x6b, 0x68, 0x7e, 0x8a, 0x32, 0xc2, 0xa7, 0xaa, 0x3c, 0xa2, 0x4b, 0x33, 0x80, 0x76, 0x30, 0xa2, 0x1b, 0x38, 0x76, 0x68, 0x41, 0x96, 0x27, 0x35, 0x79, 0x51, 0x0f, 0x76, 0x0a, 0xe3, 0xce, 0x1d, 0xb0, 0x64, 0x2b, 0xa0, 0x94, 0xae, 0xab, 0x44, 0x7b, 0xc0, 0x63, 0x9b, 0x3e, 0x60, 0x0a, 0x4b, 0x7a, 0x05, 0x52, 0x12, 0x88, 0xf3, 0x78, 0x07, 0xb0, 0xa8, 0x1a, 0x23, 0x99, 0x77, 0x4a, 0xff, 0x04, 0x73, 0xe0, 0xdf, 0xba, 0x8e, 0x14, 0xf0, 0xc3, 0x02, 0x4c, 0xce, 0xd9, 0xf0, 0x32, 0x49, 0x1d, 0x47, 0x0a, 0x69, 0x08, 0xe8, 0x43, 0xb0, 0xa3, 0x08, 0x4b, 0x9e, 0xfb, 0xd5, 0xa8, 0x7b, 0xcf, 0x5c, 0x45, 0x50, 0x8d, 0xaa, 0x09, 0x37, 0x7d, 0x31, 0xae, 0xd4, 0x3b, 0x6e, 0xd1, 0x24, 0x6a, 0xc9, 0x45, 0x75, 0xa7, 0xbd, 0xad, 0xb6, 0xbc, 0x38, 0x4a, 0xf1, 0x16, 0x45, 0x11, 0x16, 0x7a, 0xe8, 0x01, 0xfa, 0xf3, 0x49, 0xb3, 0x9f, 0x0f, 0x15, 0x33, 0xb6, 0x4a, 0x22, 0x0e, 0x62, 0xcb, 0x52, 0xac, 0x3f, 0x4e, 0xb9, 0xe0, 0xa3, 0x62, 0x02, 0xbe, 0x24, 0xd4, 0x0e, 0xad, 0x5a, 0x6b, 0xdf, 0xbd, 0xe6, 0xd5, 0xb5, 0x3a, 0xb2, 0xe2, 0x76, 0x81, 0x7b, 0xf0, 0x53, 0x12, 0x8d, 0xa7, 0xa9, 0xe7, 0xce, 0xe6, 0x25, 0x04, 0xfe, 0xfc, 0x2c, 0x50, 0x3d, 0x1c, 0x7a, 0xa3, 0xce, 0x0b, 0x09, 0x20, 0x1a, 0x1c, 0x34, 0xc5, 0xf8, 0x5e, 0x1c, 0x40, 0x2b, 0x14, 0x4b, 0x04, 0x2c, 0x65, 0x97, 0x9d, 0x2b, 0x55, 0x49, 0x40, 0x50, 0xf4, 0x7f, 0xa7, 0x46, 0xd5, 0xcf, 0x1c, 0xfa, 0xc2, 0x2d, 0xd3, 0xa0, 0xae, 0x0f, 0x7c, 0xf8, 0xeb, 0xcf, 0x19, 0xcf, 0x9e, 0x50, 0x0d, 0xc8, 0x6f, 0xe4, 0x76, 0x5c, 0x85, 0x6d, 0xbd, 0x20, 0xb1, 0xc3, 0x6c, 0x46, 0xe9, 0x56, 0x3f, 0x67, 0xf9, 0x15, 0x7d, 0x80, 0x75, 0x8e, 0x88, 0x3a, 0xf2, 0x56, 0xb3, 0x6e, 0x75, 0xab, 0x55, 0xe8, 0x2c, 0x58, 0x1c, 0x6b, 0x5c, 0xd9, 0xa3, 0xf6, 0x9b, 0xc0, 0x46, 0x46, 0x3f, 0x57, 0x35, 0x9c, 0x16, 0x87, 0xc7, 0xc0, 0x58, 0xf8, 0x11, 0x46, 0xd9, 0x7a, 0xb8, 0x10, 0x83, 0xa4, 0x03, 0x14, 0x04, 0xba, 0x34, 0x5f, 0xc4, 0xd4, 0x19, 0x5a, 0x1a, 0x3d, 0xde, 0x4d, 0xbf, 0x1a, 0x25, 0x21, 0x83, 0x4c, 0x58, 0x6a, 0x3e, 0x97, 0x3e, 0xa5, 0x0a, 0x03, 0xcd, 0xbd, 0xaf, 0x82, 0x40, 0xd5, 0x5f, 0xd4, 0x69, 0x41, 0xa4, 0xa8, 0x47, 0xd5, 0x96, 0x04, 0xdb, 0x63, 0x51, 0xe6, 0x38, 0x7f, 0xa6, 0x2c, 0xda, 0x85, 0x11, 0xb1, 0x38, 0xde, 0xeb, 0xb9, 0x9c, 0x7e, 0xe1, 0x8f, 0x33, 0xb1, 0xa5, 0x6c, 0x60, 0x18, 0xe3, 0x9b, 0x56, 0xee, 0x77, 0xdb, 0xe6, 0x90, 0xdd, 0x05, 0x95, 0x3d, 0xe9, 0xee, 0xf2, 0x1a, 0xb8, 0x8f, 0x27, 0x79, 0xe6, 0x63, 0xcd, 0x5a, 0x01, 0x11, 0x05, 0x32, 0x3e, 0x4b, 0xc4, 0xec, 0x6b, 0xf6, 0x6e, 0x2e, 0x25, 0x8b, 0xa7, 0xdd, 0x4b, 0xbd, 0x66, 0xe3, 0xb3, 0x5c, 0x4a, 0x30, 0x1b, 0x79, 0x32, 0xfe, 0x62, 0xcb, 0x08, 0x5a, 0xf8, 0x51, 0xdd, 0xe0, 0x93, 0x39, 0x3b, 0xc6, 0x23, 0x01, 0xb6, 0x1c, 0x09, 0xdc, 0xc5, 0x51, 0x83, 0x57, 0xd0, 0xfa, 0x6b, 0x3c, 0x8a, 0xcf, 0x22, 0xb6, 0x81, 0xf6, 0xc7, 0xb7, 0xf4, 0x85, 0xac, 0x97, 0xe4, 0x42, 0x0a, 0xfe, 0x6d, 0xad, 0xf3, 0x03, 0x57, 0x40, 0x89, 0x95, 0xe9, 0xf5, 0x6e, 0x1a, 0xfd, 0x09, 0x7b, 0x57, 0x5a, 0xff, 0xb5, 0x90, 0x3d, 0xe9, 0x7c, 0xf0, 0x39, 0xe3, 0x06, 0x2b, 0x41, 0xe0, 0x0c, 0x61, 0x04, 0xa9, 0xc3, 0x46, 0x79, 0x22, 0x0e, 0x80, 0xba, 0xcf, 0xf2, 0x50, 0x15, 0x98, 0x4a, 0x75, 0x60, 0xc9, 0xbc, 0x4d, 0x8e, 0x5d, 0xeb, 0x3e, 0x80, 0x7c, 0xee, 0x54, 0x1d, 0x42, 0x02, 0x2b, 0xa5, 0xc2, 0x7b, 0x10, 0x42, 0x4b, 0x01, 0x63, 0xe1, 0xea, 0xf8, 0x3f, 0x3f, 0x2f, 0x40, 0x5e, 0x47, 0x34, 0x1f, 0x36, 0x9b, 0xdc, 0x7b, 0x68, 0x71, 0x59, 0x4d, 0x5b, 0xa0, 0xf1, 0x52, 0x24, 0xfa, 0x01, 0x04, 0xaa, 0xdd, 0x42, 0xc8, 0x07, 0x05, 0x4b, 0x69, 0x31, 0xa4, 0x57, 0xc5, 0xd9, 0xb5, 0x49, 0xc6, 0x93, 0x8d, 0xed, 0x94, 0x38, 0xb3, 0x81, 0x09, 0x88, 0xf1, 0x74, 0x66, 0x14, 0xab, 0x6d, 0x44, 0x5c, 0x70, 0x8f, 0xcd, 0x34, 0xcf, 0xfc, 0x2b, 0x6c, 0x6c, 0x97, 0x41, 0xaf, 0x53, 0x0f, 0x99, 0xac, 0x8b, 0x19, 0x9e, 0x74, 0xef, 0xfc, 0x0c, 0x23, 0x39, 0x53, 0xa4, 0xc3, 0x60, 0x0e, 0x24, 0x6d, 0x24, 0xbb, 0x76, 0xb1, 0xe6, 0x04, 0x28, 0x39, 0xbe, 0x78, 0x1c, 0xa8, 0xc8, 0x8e, 0x81, 0xc8, 0xbe, 0xe6, 0x01, 0xe5, 0xcc, 0xd3, 0x3c, 0x74, 0x9f, 0x17, 0x76, 0xf9, 0xc0, 0xed, 0x8c, 0x27, 0x20, 0x4d, 0x2d, 0x48, 0xf4, 0x6b, 0x46, 0xdf, 0xc2, 0x81, 0xbe, 0x8c, 0xbc, 0xce, 0x64, 0x31, 0x4e, 0xde, 0x26, 0x53, 0xf3, 0x0d, 0x83, 0xc3, 0x4c, 0x47, 0x43, 0x7d, 0x73, 0x11, 0x65, 0xd0, 0x8d, 0xcd, 0x59, 0xbf, 0x9e, 0x39, 0x6f, 0xa8, 0xa2, 0x3a, 0x90, 0x23, 0xd9, 0xd8, 0x2c, 0x2d, 0x62, 0x89, 0x73, 0x86, 0x0b, 0xb2, 0xc8, 0x57, 0x68, 0x6b, 0x72, 0x18, 0x22, 0x83, 0x95, 0xb1, 0x92, 0xc3, 0x61, 0xdf, 0x8e, 0x77, 0x8a, 0xda, 0x83, 0x2b, 0xf8, 0x35, 0xc4, 0xb3, 0xbf, 0x05, 0x22, 0x6e, 0x51, 0x45, 0xbd, 0xcb, 0xf3, 0x79, 0x1a, 0x0b, 0x6d, 0x92, 0x75, 0x49, 0x06, 0x12, 0x58, 0xb8, 0xaf, 0x70, 0x6c, 0x2d, 0x7f, 0xbe, 0x90, 0xdd, 0x5f, 0x89, 0x28, 0x67, 0x07, 0x01, 0xb7, 0x15, 0x29, 0x59, 0xb1, 0x5e, 0xeb, 0x71, 0x8a, 0xb0, 0x9b, 0xb3, 0x13, 0x6d, 0x9e, 0x3b, 0x06, 0x34, 0xaa, 0x3a, 0xdf, 0x61, 0x36, 0x9c, 0xee, 0xd7, 0x2e, 0xe8, 0xab, 0xfd, 0xea, 0x68, 0x49, 0x06, 0x61, 0x8b, 0x8e, 0x76, 0x9a, 0x87, 0xe1, 0xe1, 0x64, 0x42, 0xa5, 0xf6, 0x47, 0x73, 0xc5, 0xbd, 0xba, 0x04, 0x90, 0x1d, 0x96, 0xbc, 0xc8, 0xa1, 0xcb, 0x1a, 0xf5, 0x7c, 0x52, 0x84, 0xff, 0xca, 0x63, 0xa1, 0xfc, 0x18, 0xe7, 0x03, 0x47, 0x27, 0x30, 0x09, 0xd2, 0xed, 0xe8, 0x03, 0xbd, 0xdd, 0x47, 0x98, 0x27, 0x68, 0x89, 0x65, 0x44, 0xc4, 0xa0, 0xe7, 0xaf, 0xec, 0x26, 0x9b, 0x02, 0xe8, 0x95, 0x63, 0xa5, 0x4e, 0xba, 0x2c, 0xe3, 0x09, 0x67, 0xce, 0x43, 0x59, 0x69, 0x33, 0x15, 0x1b, 0xb9, 0xbc, 0x4b, 0x4b, 0xf7, 0xe0, 0x8a, 0xc7, 0x13, 0x17, 0x81, 0x55, 0x4e, 0xf6, 0x7a, 0xe8, 0x61, 0x9b, 0x2e, 0x1f, 0xfb, 0x4b, 0xde, 0x0f, 0x71, 0x5a, 0x9f, 0x42, 0xb1, 0x4b, 0xf6, 0xff, 0x79, 0x39, 0xa4, 0xcc, 0xc6, 0x76, 0xc3, 0x32, 0x8e, 0x71, 0x12, 0xc0, 0xb1, 0xdd, 0x8e, 0x53, 0x2e, 0x0f, 0x42, 0x94, 0x92, 0xa8, 0x5f, 0xc1, 0xb7, 0x75, 0x8f, 0xb1, 0xaa, 0x93, 0x87, 0x12, 0xed, 0xd7, 0xdb, 0xf6, 0xdf, 0x6c, 0x17, 0x8e, 0x78, 0xbe, 0x0b, 0x34, 0x39, 0x97, 0x66, 0xaf, 0x63, 0x88, 0x87, 0xb3, 0x68, 0x8b, 0x8f, 0xa8, 0x9f, 0xe6, 0xbb, 0xac, 0x3b, 0x53, 0xf1, 0xdb, 0x7e, 0x5d, 0x98, 0xce, 0x2a, 0x0d, 0xad, 0x61, 0x39, 0xc6, 0x13, 0xba, 0xcd, 0x6e, 0x2b, 0x87, 0x6a, 0xce, 0xa5, 0x86, 0x63, 0x3c, 0x96, 0x4b, 0x92, 0x77, 0xca, 0x3e, 0x4c, 0xd2, 0x5b, 0xe3, 0x94, 0x95, 0x82, 0x5e, 0x8f, 0xa0, 0xae, 0x36, 0x39, 0x51, 0xd3, 0x59, 0x55, 0xa8, 0x05, 0x60, 0xaa, 0xa9, 0x45, 0x15, 0x6c, 0x02, 0x9b, 0x32, 0xf9, 0xee, 0x65, 0x6c, 0xc6, 0x59, 0xee, 0xb0, 0x98, 0x45, 0x42, 0xad, 0xf7, 0x6c, 0x41, 0x92, 0xdf, 0x27, 0xf3, 0x19, 0xba, 0x8e, 0x1b, 0xc4, 0x8b, 0xe1, 0x0f, 0x66, 0x6c, 0x27, 0xc6, 0xe6, 0x3a, 0x14, 0x33, 0x40, 0x8f, 0x30, 0xd1, 0xcc, 0xf0, 0x36, 0x80, 0xc3, 0x48, 0xba, 0x8f, 0xff, 0x95, 0x0f, 0x1a, 0x02, 0xe2, 0x68, 0x96, 0x3a, 0x75, 0x3d, 0xaa, 0x84, 0x49, 0xf1, 0x40, 0xee, 0xbf, 0xb1, 0xdd, 0xc1, 0x90, 0x9f, 0x2d, 0xbf, 0x06, 0x30, 0xe3, 0xa9, 0x6c, 0xd2, 0xc0, 0x04, 0xc3, 0xd3, 0xf0, 0x1d, 0xb6, 0x7e, 0x9d, 0x4b, 0xd0, 0x87, 0xbf, 0x74, 0xed, 0xa9, 0x31, 0xd2, 0xee, 0x8d, 0x0a, 0xf7, 0xb1, 0xee, 0x2a, 0x0f, 0x41, 0xfb, 0x13, 0x66, 0x49, 0xfc, 0xfb, 0x2a, 0xcf, 0x39, 0x1f, 0x71, 0x1e, 0x17, 0x59, 0x7d, 0x04, 0x85, 0xf5, 0x3f, 0x3e, 0x96, 0xc1, 0x1b, 0x31, 0x6f, 0x63, 0xeb, 0xdb, 0x64, 0xef, 0x46, 0x08, 0x5e, 0xb9, 0x02, 0xc9, 0x80, 0x68, 0xf7, 0x22, 0x0a, 0x4c, 0x06, 0x03, 0x7d, 0xf2, 0x5b, 0x79, 0x00, 0xf5, 0xee, 0x26, 0x02, 0x16, 0x50, 0xef, 0x21, 0x8f, 0xa4, 0xf4, 0x4a, 0xa5, 0xeb, 0xc5, 0x22, 0x7d, 0x86, 0xd3, 0xa5, 0x30, 0xf5, 0x24, 0x0d, 0x21, 0xe5, 0x4b, 0xf6, 0x8f, 0x6a, 0x98, 0xbf, 0x66, 0x89, 0x8c, 0x33, 0x5b, 0xf9, 0x8f, 0x69, 0x37, 0x2a, 0xe5, 0xe8, 0x73, 0x87, 0xdf, 0x0f, 0x06, 0xf9, 0x4e, 0xb5, 0x7b, 0xac, 0x3d, 0x0c, 0x46, 0x15, 0xe0, 0xcb, 0x58, 0x34, 0xc7, 0x8c, 0xf1, 0x16, 0x57, 0x72, 0xb6, 0x9f, 0x7b, 0x10, 0x03, 0x86, 0x97, 0x86, 0x82, 0xa1, 0xbe, 0xed, 0xfd, 0x63, 0x24, 0xf6, 0x70, 0xa3, 0xd6, 0xcd, 0x63, 0x9e, 0xa8, 0x44, 0x76, 0x40, 0x6f, 0x2d, 0x3e, 0x9f, 0x71, 0x07, 0x4f, 0xc9, 0x1a, 0xde, 0x9a, 0xbf, 0xf1, 0x6c, 0xfa, 0xc1, 0xca, 0x84, 0x09, 0xcc, 0x3c, 0xb1, 0x38, 0x62, 0x55, 0x1a, 0x1f, 0x89, 0x8d, 0xa8, 0x11, 0x16, 0xf9, 0x6b, 0xf4, 0x2b, 0xc1, 0x3a, 0x4f, 0xff, 0xd4, 0x9a, 0xa5, 0xdd, 0xda, 0xe2, 0x02, 0x70, 0x6b, 0x9c, 0xd3, 0x3d, 0x7e, 0x2d, 0xfa, 0x71, 0x24, 0xb9, 0x22, 0xdd, 0x76, 0x41, 0x50, 0x3f, 0xcb, 0x0e, 0xbb, 0xc3, 0x2f, 0x53, 0xde, 0xc9, 0x11, 0x0e, 0xcb, 0xe9, 0x3c, 0x2f, 0xc2, 0x34, 0x09, 0xfc, 0x02, 0xbd, 0xd2, 0xb4, 0xdf, 0x59, 0xa9, 0x72, 0x15, 0xa2, 0x4a, 0x55, 0x5c, 0x42, 0x4f, 0xde, 0x3d, 0x6e, 0xa3, 0x99, 0x23, 0xb0, 0x39, 0x00, 0xb5, 0xea, 0xfe, 0x9c, 0x63, 0x98, 0x0c, 0x6d, 0x3f, 0x55, 0x20, 0x8c, 0x0f, 0xa1, 0x4e, 0x0f, 0xa0, 0xe1, 0xf3, 0x2d, 0x5d, 0xa7, 0xec, 0xa3, 0x1f, 0x34, 0x05, 0x55, 0x47, 0x3b, 0xb4, 0x39, 0x0b, 0xe8, 0x08, 0x71, 0x0d, 0x21, 0xdc, 0xb7, 0x32, 0x0c, 0x50, 0xfe, 0xb1, 0xd1, 0x7a, 0x56, 0x6a, 0xa1, 0x58, 0x11, 0x7a, 0xf7, 0x09, 0x24, 0x0c, 0x1d, 0x3d, 0xd0, 0x71, 0xf3, 0xeb, 0x81, 0x74, 0xec, 0x42, 0xf6, 0xe7, 0x59, 0xe1, 0xa2, 0x82, 0xea, 0x4a, 0x52, 0xee, 0x71, 0x94, 0x11, 0x1c, 0xea, 0x61, 0x48, 0xdb, 0xb9, 0x10, 0x2a, 0xaa, 0x32, 0x34, 0x4f, 0xca, 0x5e, 0x44, 0x9f, 0x98, 0xfc, 0x94, 0x72, 0x1a, 0xc7, 0x83, 0xf6, 0xd8, 0xf7, 0xf6, 0xd0, 0xed, 0x0a, 0x06, 0x06, 0x5d, 0xc4, 0xf6, 0x1c, 0xa9, 0x75, 0x68, 0x7d, 0xa1, 0x7a, 0xd0, 0x1d, 0x7a, 0x06, 0x28, 0x5d, 0x20, 0x23, 0xe6, 0x2f, 0xcd, 0xf3, 0x2b, 0x7a, 0xdb, 0x3c, 0x3d, 0xc0, 0xd7, 0x23, 0x37, 0xfe, 0xd6, 0x38, 0xff, 0xd3, 0x0c, 0xb3, 0x79, 0xe5, 0x9a, 0xfd, 0xfa, 0x81, 0xa8, 0x73, 0x00, 0x81, 0xb4, 0x66, 0x20, 0x73, 0x29, 0x66, 0x3f, 0xf7, 0x34, 0xc0, 0x05, 0x69, 0xd3, 0x45, 0x8f, 0xc0, 0x2f, 0x4d, 0x64, 0xb6, 0x2b, 0xfc, 0xab, 0x2a, 0x3d, 0xc4, 0x9b, 0xc2, 0x7d, 0x2b, 0x32, 0xd4, 0xfb, 0xcf, 0x2a, 0x87, 0x56, 0xa7, 0x29, 0x35, 0x8a, 0x8b, 0x38, 0x14, 0x0a, 0xf7, 0x76, 0x16, 0x0f, 0x0c, 0x0d, 0x0d, 0x2f, 0xd7, 0x66, 0x13, 0x31, 0xd6, 0x99, 0x29, 0x20, 0xb8, 0x28, 0x1e, 0x9e, 0x65, 0xec, 0xb3, 0x7b, 0x3e, 0x4f, 0xfc, 0x86, 0xa6, 0xbc, 0x09, 0xa3, 0xc1, 0x54, 0xc6, 0x1e, 0x7b, 0xe3, 0x20, 0x3f, 0xcd, 0x12, 0x69, 0x1f, 0x3c, 0xde, 0xfe, 0xb9, 0xa2, 0x48, 0x27, 0x44, 0x30, 0x4e, 0x3e, 0xc1, 0xb4, 0x1b, 0x14, 0xd0, 0x18, 0x7b, 0x90, 0xc7, 0x2b, 0x91, 0x99, 0x05, 0xa5, 0xcc, 0x36, 0x84, 0x65, 0x17, 0xf4, 0xae, 0xfc, 0x50, 0x89, 0x72, 0x6f, 0xfc, 0xb6, 0x96, 0x39, 0x39, 0x72, 0x4f, 0x90, 0xf3, 0x44, 0x0f, 0xe9, 0x5b, 0xf1, 0x9e, 0xbe, 0x95, 0x57, 0x6c, 0x8f, 0xb1, 0x99, 0x26, 0x27, 0xdd, 0x7c, 0x87, 0x20, 0xd9, 0x11, 0x71, 0xa9, 0xab, 0x95, 0x3c, 0x87, 0x93, 0x95, 0x4e, 0x5a, 0x41, 0x55, 0xeb, 0x22, 0x46, 0x73, 0x4f, 0x01, 0xc9, 0xc8, 0xfa, 0x43, 0x7b, 0x8f, 0x4c, 0x9b, 0xcd, 0xc9, 0x51, 0xaf, 0x60, 0xe0, 0xde, 0xd7, 0xbc, 0x8a, 0xdd, 0x22, 0x46, 0xf0, 0xe5, 0x9b, 0x6c, 0x10, 0x0e, 0xca, 0x23, 0x5f, 0x03, 0x7d, 0x93, 0xb3, 0x58, 0xc8, 0x10, 0x61, 0x1e, 0x4a, 0x4d, 0xa2, 0xb5, 0xb2, 0xcc, 0x3c, 0xe2, 0x82, 0x99, 0x5e, 0x21, 0x13, 0x38, 0xcb, 0x3d, 0xd9, 0xdc, 0x3a, 0x1d, 0xe9, 0xda, 0xfd, 0xe1, 0xb8, 0x5c, 0xe2, 0x2e, 0x26, 0x5a, 0x57, 0xc5, 0xbb, 0xc6, 0xd1, 0x5b, 0x30, 0x07, 0x6e, 0xa5, 0x31, 0xa9, 0xd9, 0xb2, 0x61, 0x53, 0x6e, 0x7d, 0x9f, 0xf9, 0x9e, 0xc3, 0x88, 0x52, 0x95, 0x12, 0x3c, 0x8d, 0x1b, 0x23, 0x65, 0x40, 0xb8, 0x69, 0x76, 0xa1, 0x1c, 0xea, 0x31, 0xf8, 0xbd, 0x4e, 0x6c, 0x54, 0xc2, 0x35, 0x14, 0x7d, 0x20, 0xce, 0x72, 0x2b, 0x03, 0xa6, 0xad, 0x75, 0x6f, 0xbd, 0x91, 0x8c, 0x27, 0xdf, 0x8e, 0xa9, 0xce, 0x31, 0x04, 0x44, 0x4c, 0x0b, 0xbe, 0x87, 0x73, 0x05, 0xbc, 0x02, 0xe3, 0x55, 0x35, 0xa0, 0x2a, 0x58, 0xdc, 0xda, 0x30, 0x6e, 0x63, 0x2a, 0xd3, 0x0b, 0x3d, 0xc3, 0xce, 0x0b, 0xa9, 0x7f, 0xdf, 0x46, 0xec, 0x19, 0x29, 0x65, 0xdd, 0x9c, 0xd7, 0xf4, 0xa7, 0x1b, 0x02, 0xb8, 0xcb, 0xa3, 0xd4, 0x42, 0x64, 0x6e, 0xee, 0xc4, 0xaf, 0x59, 0x08, 0x24, 0xca, 0x98, 0xd7, 0x4f, 0xbc, 0xa9, 0x34, 0xd0, 0xb6, 0x86, 0x7a, 0xa1, 0x99, 0x1f, 0x30, 0x40, 0xb7, 0x07, 0xe8, 0x06, 0xde, 0x6e, 0x66, 0xb5, 0x93, 0x4f, 0x05, 0x50, 0x9b, 0xea, 0x57, 0x2f, 0xc0, 0x75, 0x0c, 0x52, 0xd1, 0x0f, 0x15, 0xf6, 0xeb, 0xf5, 0x09, 0x66, 0xf7, 0xf8, 0xc7, 0x14, 0x74, 0x2f, 0x5d, 0xe8, 0x77, 0xe9, 0x28, 0xd8, 0xef, 0xe5, 0x3d, 0xb9, 0x2e, 0xc6, 0x08, 0x54, 0xa5, 0xc1, 0x33, 0xbd, 0xef, 0x99, 0xc9, 0xe0, 0x12, 0xcd, 0x9c, 0x5d, 0x01, 0x10, 0xe4, 0x96, 0x65, 0xf9, 0x28, 0x05, 0x9c, 0xfc, 0x62, 0xd4, 0x02, 0x99, 0x5e, 0xa7, 0x70, 0xd3, 0x63, 0xbd, 0x03, 0xe4, 0x15, 0x37, 0x1f, 0x2f, 0x9a, 0xb7, 0xb3, 0x76, 0xfc, 0x2d, 0xbe, 0x4d, 0xce, 0xee, 0x12, 0xce, 0x13, 0x07, 0x58, 0x8f, 0x5b, 0xd0, 0x54, 0xd1, 0x2f, 0xc4, 0x6a, 0xfa, 0xaf, 0x8f, 0x61, 0x46, 0x7a, 0x69, 0x68, 0xb9, 0xce, 0xa3, 0x56, 0x58, 0xf1, 0x7f, 0x36, 0x98, 0xcf, 0x45, 0x03, 0x17, 0xe4, 0x93, 0xb0, 0x8a, 0x5c, 0xf5, 0x6b, 0xf6, 0x79, 0xb5, 0x23, 0x24, 0x36, 0xf5, 0x48, 0x4f, 0x2a, 0xfa, 0xd2, 0x1f, 0xae, 0xcb, 0x84, 0xdb, 0x42, 0xfb, 0x72, 0xda, 0x2d, 0xc3, 0xc1, 0x3a, 0x64, 0x54, 0xae, 0xd5, 0xad, 0x6a, 0xd1, 0x71, 0x04, 0x25, 0xa3, 0x37, 0x3e, 0x15, 0x3f, 0x67, 0xec, 0x93, 0x65, 0x49, 0x82, 0x58, 0xc4, 0x67, 0xb9, 0x48, 0x79, 0xf9, 0x31, 0x8f, 0xd3, 0xa1, 0x5b, 0xef, 0x59, 0x58, 0x96, 0x58, 0x0e, 0xa8, 0x98, 0xba, 0xf3, 0x1d, 0x10, 0x17, 0xce, 0xf6, 0x89, 0xdc, 0x2a, 0x1f, 0x92, 0x71, 0x9f, 0x64, 0x1c, 0x0f, 0x53, 0xdf, 0x23, 0xd2, 0xc1, 0xb2, 0x91, 0x0f, 0xb9, 0xfc, 0x5f, 0xe7, 0xa8, 0x05, 0xfd, 0x1c, 0x1a, 0xbc, 0xf4, 0x24, 0x7d, 0x64, 0xca, 0x7c, 0x28, 0x8a, 0x25, 0x3f, 0x9c, 0x3a, 0x34, 0xf7, 0x09, 0x72, 0x4b, 0xb3, 0x14, 0xd7, 0xcd, 0x5a, 0xd7, 0xa7, 0x4f, 0x3e, 0x29, 0xef, 0xfa, 0xf4, 0x20, 0xfe, 0x31, 0x64, 0xd5, 0x19, 0x74, 0x1c, 0x67, 0x70, 0x85, 0xea, 0x43, 0x51, 0xc9, 0xa9, 0xa2, 0x9c, 0xf0, 0x5b, 0x53, 0x77, 0xd9, 0x78, 0xba, 0x42, 0xaf, 0x86, 0x19, 0xce, 0x59, 0xea, 0x0e, 0xc9, 0x11, 0xfe, 0x5d, 0x7d, 0x52, 0x63, 0xf0, 0xbb, 0xf8, 0x99, 0x1c, 0x11, 0xa3, 0xcc, 0x26, 0x43, 0x5c, 0xf1, 0x06, 0xf9, 0x7b, 0x12, 0x6a, 0xb6, 0xc7, 0xe6, 0xfe, 0x09, 0xe0, 0xa5, 0xeb, 0x07, 0xda, 0x1a, 0x9d, 0xf8, 0x2b, 0xfa, 0xca, 0x51, 0xc7, 0x74, 0xb0, 0xe3, 0x89, 0x09, 0x9e, 0x51, 0xd5, 0x9e, 0xb5, 0xc7, 0x7c, 0xd0, 0xf0, 0xe9, 0xdf, 0x87, 0x62, 0x0a, 0x58, 0xce, 0xbf, 0x9f, 0xd5, 0xe2, 0x1e, 0xf3, 0xc6, 0x88, 0xfd, 0x1c, 0x3a, 0xa4, 0x86, 0x2d, 0x44, 0x08, 0x11, 0xad, 0xa4, 0x8a, 0xe9, 0x48, 0xa3, 0x59, 0x53, 0xc5, 0x3f, 0x91, 0xcc, 0x38, 0x88, 0x0c, 0x93, 0x79, 0x4a, 0x7c, 0x67, 0xd4, 0xec, 0xb6, 0x92, 0x02, 0x98, 0x51, 0x26, 0x58, 0x9d, 0x70, 0x87, 0x3f, 0x11, 0xdc, 0x29, 0xe4, 0xba, 0x56, 0x9b, 0x31, 0x2f, 0x2b, 0xc5, 0xfb, 0x3a, 0x08, 0x6e, 0x7d, 0x81, 0x10, 0x01, 0x05, 0x65, 0x2c, 0x90, 0xed, 0x2b, 0xa2, 0x19, 0xcd, 0x59, 0xea, 0x08, 0xef, 0x63, 0xbd, 0xfe, 0x03, 0x87, 0x6e, 0xd1, 0x14, 0xf6, 0x7d, 0xd4, 0xbb, 0x34, 0x6a, 0x58, 0x93, 0xc1, 0xc7, 0x72, 0xec, 0xf9, 0x91, 0xff, 0xc4, 0x39, 0xc0, 0xe6, 0xf3, 0x43, 0x1d, 0x9d, 0xa5, 0xe4, 0x54, 0xef, 0x0d, 0xd4, 0x4a, 0xfc, 0x58, 0xdd, 0xb0, 0x81, 0xe0, 0x3f, 0xd9, 0x59, 0xa3, 0x54, 0xc8, 0x44, 0xf3, 0x70, 0x8e, 0xe8, 0x6f, 0x0b, 0xd3, 0x15, 0x31, 0x22, 0xb2, 0x4d, 0x49, 0xda, 0xca, 0x84, 0x6a, 0x67, 0x91, 0x24, 0xe4, 0x2c, 0xec, 0x54, 0xd2, 0x23, 0xfd, 0x7a, 0x95, 0x80, 0x3c, 0xfe, 0x81, 0x91, 0xca, 0x52, 0xd5, 0xe9, 0x02, 0x2f, 0xf1, 0xbd, 0x50, 0x21, 0xc3, 0x8e, 0x46, 0x45, 0x83, 0x08, 0xec, 0x51, 0xa0, 0x2b, 0x58, 0xd6, 0xfa, 0xa8, 0x7f, 0xc2, 0x51, 0x8e, 0x4b, 0x29, 0xfd, 0x25, 0xee, 0x45, 0xe0, 0x1a, 0x75, 0xbb, 0x9a, 0xdd, 0xa0, 0x1f, 0xfb, 0x48, 0xf1, 0xbb, 0xbe, 0x81, 0x03, 0x8c, 0x74, 0x21, 0x1d, 0x8e, 0xbe, 0x96, 0x07, 0x3a, 0xbf, 0xc6, 0x1c, 0x4c, 0xd1, 0xf4, 0xa1, 0xc9, 0x77, 0xe8, 0x55, 0x41, 0x94, 0x4a, 0x49, 0x51, 0xda, 0x50, 0xf2, 0x6d, 0x84, 0x99, 0x7d, 0xdc, 0x48, 0x58, 0x62, 0x04, 0x87, 0xb4, 0x3c, 0xe8, 0xc8, 0x6f, 0xd8, 0xef, 0x64, 0xc6, 0x8c, 0xe7, 0x82, 0x99, 0xca, 0x49, 0x46, 0xcc, 0xf4, 0xbf, 0x46, 0xed, 0x72, 0xe3, 0x3e, 0x17, 0x03, 0x4a, 0x04, 0x16, 0x50, 0xc1, 0xbe, 0xcb, 0xc7, 0xd6, 0x52, 0xd2, 0xa6, 0x9b, 0x1e, 0x63, 0x56, 0xa6, 0xea, 0x76, 0xfb, 0x5c, 0x1a, 0x2b, 0x49, 0x70, 0x28, 0x68, 0x99, 0xa6, 0x52, 0xc4, 0x3c, 0xdd, 0x90, 0xa4, 0x0f, 0x4c, 0xc9, 0xa3, 0x4f, 0x0c, 0x46, 0x38, 0xaf, 0xd6, 0x67, 0x93, 0xa8, 0x0f, 0x95, 0xc7, 0x11, 0x01, 0x77, 0x2e, 0xef, 0x6c, 0x69, 0x09, 0x8e, 0x3d, 0x2a, 0x68, 0xd1, 0x9d, 0xd4, 0x4a, 0xc6, 0x2d, 0x12, 0x04, 0x7d, 0x90, 0x8d, 0xe7, 0x1b, 0x2b, 0xa7, 0x1d, 0x2a, 0x28, 0x6c, 0xd4, 0x33, 0xc1, 0xc5, 0x9f, 0x8f, 0xbb, 0xef, 0x18, 0x7a, 0x30, 0x2c, 0xcb, 0x69, 0x92, 0xb9, 0x4f, 0x9e, 0xed, 0xff, 0xb6, 0xf9, 0x6c, 0x0d, 0x28, 0x11, 0x1f, 0x46, 0xca, 0x83, 0xfb, 0x57, 0xe4, 0x8a, 0x23, 0x6d, 0x44, 0xd0, 0x66, 0xa4, 0xdd, 0x84, 0x08, 0xc2, 0xb4, 0xad, 0xc5, 0x25, 0xfd, 0xbe, 0x13, 0xfa, 0x80, 0x6a, 0xa8, 0xb0, 0x42, 0xb9, 0x3c, 0xac, 0x62, 0x5c, 0x90, 0x3f, 0x41, 0x3e, 0xaf, 0xd5, 0xe5, 0x5b, 0x73, 0x6f, 0xa0, 0xd5, 0x4c, 0x53, 0xec, 0x44, 0x3d, 0x01, 0x9a, 0x4e, 0x27, 0x6a, 0x2c, 0x79, 0x4a, 0x5d, 0x7f, 0x3c, 0x09, 0x42, 0xad, 0x5c, 0xed, 0x0a, 0x31, 0x76, 0xed, 0x66, 0x4c, 0xd7, 0xed, 0x37, 0xa8, 0x94, 0x84, 0x46, 0x3c, 0xd8, 0x02, 0x36, 0x6f, 0x78, 0xb2, 0xb7, 0x80, 0xcd, 0x5c, 0xfc, 0x25, 0xc2, 0x0e, 0x6e, 0x72, 0x2c, 0x1c, 0xa2, 0xfd, 0x5a, 0x66, 0x88, 0x40, 0xed, 0xd9, 0xe6, 0x3e, 0xea, 0x39, 0x05, 0x6a, 0x0e, 0x1d, 0xab, 0xc4, 0x62, 0x3b, 0x48, 0x45, 0x0f, 0xe5, 0x74, 0x7d, 0x72, 0xd4, 0x99, 0x7b, 0x73, 0x25, 0xed, 0xed, 0x13, 0xa1, 0xa4, 0x88, 0x45, 0x41, 0x63, 0xaa, 0xff, 0xf1, 0xf7, 0x3e, 0x90, 0x95, 0x47, 0xe1, 0x34, 0x4a, 0x87, 0x42, 0xe6, 0xee, 0xaf, 0xcf, 0x75, 0xe2, 0x2c, 0x8e, 0xda, 0x0e, 0xd5, 0x48, 0xc9, 0x26, 0x20, 0xed, 0x86, 0x2c, 0x96, 0x34, 0xfa, 0x37, 0x84, 0x82, 0x06, 0x72, 0xf4, 0x0d, 0x17, 0x67, 0xdb, 0x41, 0xfb, 0x7e, 0x94, 0x63, 0xf3, 0xc0, 0x8d, 0x74, 0x09, 0xe1, 0x41, 0x58, 0xa3, 0x7e, 0x66, 0x37, 0x59, 0xa3, 0x67, 0x24, 0x04, 0x90, 0x14, 0xfc, 0x17, 0xbd, 0x99, 0x91, 0x33, 0x1b, 0xac, 0x08, 0xf5, 0x9d, 0x0b, 0x80, 0x13, 0xf7, 0x26, 0xf5, 0xa7, 0xa6, 0x18, 0x63, 0xca, 0x30, 0xdc, 0x2e, 0x65, 0xad, 0xbe, 0xc1, 0x44, 0x86, 0x0f, 0x75, 0x6c, 0x7d, 0x1d, 0xb5, 0xaf, 0xed, 0x63, 0x61, 0x7d, 0x53, 0xfc, 0x6f, 0xfd, 0x0e, 0x5e, 0xd8, 0x5c, 0x63, 0x44, 0xb2, 0x66, 0xc4, 0xec, 0x99, 0x53, 0x52, 0x83, 0x54, 0xe3, 0xa0, 0xde, 0xb6, 0xad, 0xba, 0x6a, 0xc1, 0xb3, 0x66, 0x66, 0x12, 0x3b, 0xa9, 0x4f, 0x79, 0xda, 0x8d, 0x9c, 0xe7, 0xd2, 0x22, 0xac, 0x8d, 0x9e, 0xc3, 0xfd, 0x42, 0xca, 0x9a, 0x9e, 0x25, 0x08, 0x67, 0xe7, 0x84, 0x81, 0x7c, 0x67, 0xfd, 0x69, 0x0c, 0x1e, 0xe3, 0xd6, 0xa6, 0xec, 0xe4, 0xd2, 0xfd, 0x4a, 0xe8, 0xae, 0xea, 0x38, 0x3b, 0x9a, 0xb4, 0x76, 0xef, 0x73, 0x8e, 0xf7, 0x7c, 0xdc, 0x61, 0x93, 0xaa, 0x90, 0xcc, 0xfc, 0xb1, 0xf7, 0x6a, 0xf3, 0x9e, 0xf7, 0x53, 0xbc, 0xf8, 0x0c, 0xe5, 0xcf, 0xa4, 0x9b, 0xc4, 0xd0, 0x06, 0x83, 0x1f, 0xc1, 0x69, 0xf6, 0x35, 0x77, 0xa1, 0x87, 0x18, 0x4a, 0xee, 0x83, 0xb1, 0x11, 0x24, 0x85, 0x05, 0x4e, 0x09, 0x45, 0xb6, 0xa5, 0xff, 0xb1, 0xcd, 0x93, 0xe3, 0x3f, 0xb6, 0x5c, 0x34, 0x81, 0x8c, 0x45, 0x78, 0xfa, 0x98, 0x04, 0xdb, 0x30, 0x14, 0x75, 0x1a, 0x02, 0x34, 0x8e, 0x9f, 0x3c, 0x67, 0x95, 0xee, 0x69, 0xda, 0x90, 0x3f, 0xe8, 0x3d, 0xfe, 0x6c, 0x42, 0xcb, 0xc4, 0x0e, 0xbb, 0x84, 0x6a, 0xe3, 0x27, 0xbd, 0x87, 0x74, 0xff, 0xdb, 0x7a, 0xf4, 0xb4, 0x5c, 0x5b, 0x6a, 0x43, 0x17, 0x32, 0x13, 0x0a, 0xc4, 0x66, 0x01, 0xda, 0xbe, 0x78, 0x09, 0x4d, 0x08, 0xf0, 0xdc, 0x5a, 0x8e, 0x98, 0x74, 0x26, 0xae, 0xe9, 0xb2, 0x1d, 0xf7, 0xc3, 0x45, 0x42, 0x31, 0x61, 0xcd, 0xc3, 0x9d, 0x8b, 0x40, 0xd1, 0x7e, 0x0d, 0x8d, 0xae, 0xd7, 0x69, 0x80, 0x08, 0x77, 0xc9, 0xe6, 0x85, 0x33, 0x37, 0xf1, 0x9f, 0x73, 0x10, 0xde, 0xb2, 0xf0, 0xb6, 0xd4, 0x53, 0xbb, 0x86, 0x10, 0xe4, 0x82, 0x0a, 0x3f, 0x65, 0x0f, 0x6f, 0x2b, 0x8d, 0x11, 0x39, 0x9a, 0x1a, 0x1f, 0x35, 0x73, 0x65, 0xfa, 0xaf, 0x23, 0x39, 0x12, 0xe6, 0x3f, 0xe5, 0x4c, 0xbd, 0x6b, 0x90, 0x03, 0xb3, 0x7a, 0xcd, 0x4d, 0x15, 0xd7, 0x70, 0x7f, 0x73, 0x23, 0x9f, 0xf3, 0x50, 0x1f, 0x2c, 0x08, 0x1d, 0xcd, 0x22, 0x6b, 0x69, 0xd2, 0x9d, 0x95, 0x52, 0x1f, 0xdf, 0x95, 0x3f, 0xd0, 0xa1, 0x10, 0xd1, 0x54, 0xa7, 0x86, 0x16, 0xcf, 0x97, 0xd6, 0x00, 0xbc, 0x0b, 0x05, 0x16, 0xd7, 0xe5, 0x3b, 0x6a, 0x3a, 0xe3, 0x0e, 0xcb, 0xc6, 0x73, 0x03, 0x3b, 0xc4, 0xc8, 0x52, 0xa4, 0xcc, 0x2d, 0xea, 0xc6, 0xe6, 0x99, 0xb5, 0x74, 0xf0, 0x84, 0x1d, 0x00, 0x40, 0xfa, 0xcf, 0xf4, 0x8a, 0xee, 0xbf, 0x02, 0x03, 0xd0, 0x6c, 0x3e, 0xc6, 0x62, 0x65, 0x8b, 0x77, 0xc7, 0x0c, 0x53, 0x27, 0xdc, 0x9a, 0x7c, 0x78, 0xcc, 0x63, 0x97, 0x02, 0xdf, 0x5c, 0x5a, 0xf5, 0x93, 0xda, 0x50, 0xff, 0xee, 0x9c, 0xcf, 0x70, 0x12, 0x0c, 0x2b, 0x9c, 0x12, 0xc2, 0x29, 0x80, 0x04, 0x4a, 0xb6, 0xa9, 0x58, 0x27, 0xd9, 0x52, 0x68, 0x17, 0xe7, 0xcd, 0x4f, 0x99, 0xf6, 0x24, 0xff, 0xad, 0x93, 0xff, 0x8e, 0xdb, 0xb8, 0xc8, 0xd1, 0x76, 0xf8, 0x0e, 0x2c, 0x22, 0xfd, 0x27, 0xa8, 0x94, 0x34, 0x1a, 0x46, 0x99, 0xc7, 0xbc, 0x94, 0x5a, 0xcc, 0x18, 0x7d, 0xde, 0xbc, 0x14, 0x65, 0xd0, 0x26, 0x52, 0x76, 0x83, 0xa4, 0x55, 0x34, 0x33, 0x0f, 0xe5, 0x58, 0x8e, 0xef, 0xb4, 0xdb, 0x72, 0x35, 0x41, 0x51, 0xf9, 0x2d, 0xfd, 0x78, 0xb3, 0xae, 0xad, 0x11, 0x32, 0x94, 0x0f, 0xee, 0xcc, 0x6f, 0xc0, 0x4d, 0x9c, 0x7d, 0x5d, 0x64, 0xca, 0xd6, 0xe8, 0x3d, 0x0c, 0xe7, 0x6e, 0xc4, 0x6d, 0x21, 0xe7, 0x1f, 0x4e, 0xf2, 0x5e, 0x3d, 0xaa, 0xf5, 0x52, 0xb2, 0x9e, 0x66, 0x5b, 0xc2, 0x28, 0xd8, 0x11, 0xbb, 0x2f, 0x2a, 0x29, 0x89, 0xc3, 0xb7, 0xe1, 0x84, 0xa7, 0xcd, 0x9f, 0x8c, 0x0c, 0x61, 0xd4, 0x58, 0xa0, 0x00, 0x27, 0x0b, 0xc7, 0x09, 0xd0, 0x08, 0x28, 0x1a, 0x41, 0x08, 0x6c, 0xc8, 0x0c, 0x6a, 0x42, 0x93, 0x01, 0xca, 0xa7, 0x18, 0x96, 0xd4, 0x64, 0x89, 0x8d, 0x5a, 0xd8, 0x5b, 0xd0, 0xa5, 0xf7, 0x3e, 0xa0, 0x09, 0x93, 0x52, 0xee, 0xbc, 0xdb, 0x98, 0x09, 0xe9, 0x21, 0xa7, 0x7a, 0xff, 0xe0, 0xa0, 0x2c, 0x4f, 0xfd, 0x63, 0xd1, 0xd6, 0x4d, 0x03, 0x80, 0x57, 0x58, 0x78, 0xa3, 0xae, 0x5c, 0x94, 0x10, 0x60, 0x95, 0x39, 0x76, 0x76, 0xbc, 0xc8, 0xfb, 0x8c, 0xce, 0xdc, 0x23, 0x25, 0x0e, 0x39, 0xf4, 0x41, 0x4d, 0xff, 0x58, 0x32, 0x69, 0x24, 0xc2, 0xab, 0x14, 0x20, 0x14, 0x1a, 0xd6, 0xea, 0xc1, 0x37, 0x55, 0x24, 0x2e, 0xdd, 0xd5, 0x92, 0x5f, 0x1a, 0xfb, 0xd1, 0xcf, 0x82, 0xd6, 0x46, 0x9f, 0xc8, 0x20, 0x54, 0xf3, 0x8f, 0xc0, 0xd2, 0x9a, 0x7d, 0x94, 0xbc, 0xed, 0x91, 0x6e, 0x28, 0xf9, 0xb7, 0x5c, 0x7c, 0xe0, 0x9a, 0x2d, 0xdf, 0x7c, 0xba, 0x30, 0xed, 0x46, 0xbe, 0x3f, 0xaf, 0x76, 0x0b, 0xfc, 0xca, 0x6c, 0x95, 0x5b, 0xf6, 0x4f, 0xf5, 0x61, 0xb2, 0xf4, 0xbd, 0x2b, 0x37, 0x01, 0x08, 0x31, 0xaa, 0x52, 0x55, 0xcc, 0x95, 0x9b, 0x95, 0xf6, 0x98, 0x4f, 0x82, 0x51, 0x5c, 0xc1, 0x33, 0x6c, 0xc9, 0x8a, 0xed, 0x41, 0x79, 0x2a, 0x3d, 0x02, 0x6c, 0xf2, 0x43, 0x15, 0xfd, 0x21, 0x51, 0x5d, 0x14, 0x4d, 0xb5, 0xbb, 0x9e, 0x04, 0xd2, 0xd4, 0x3a, 0xb4, 0x76, 0x15, 0x35, 0xc8, 0x67, 0xf5, 0xb9, 0x14, 0x3f, 0x7a, 0x41, 0x73, 0x7a, 0xff, 0x50, 0xae, 0xce, 0x34, 0x63, 0xa0, 0xbb, 0x66, 0x24, 0x98, 0x62, 0x01, 0xe0, 0xff, 0x9a, 0x53, 0x3b, 0x3b, 0x41, 0x92, 0x23, 0xd2, 0xd0, 0x21, 0x02, 0xd3, 0x32, 0x0f, 0x38, 0x72, 0xd7, 0xe1, 0xc8, 0xf2, 0x04, 0x91, 0x51, 0xc8, 0x6d, 0xd6, 0x41, 0xfd, 0x05, 0xa6, 0x45, 0xd4, 0x15, 0xf9, 0x04, 0xad, 0x8b, 0xd1, 0x0c, 0x29, 0x95, 0x77, 0x0c, 0x8f, 0x6f, 0x07, 0x45, 0x6e, 0x7a, 0x2e, 0x3b, 0x84, 0x8d, 0x33, 0xb0, 0xdf, 0x8f, 0x34, 0xd2, 0x42, 0x46, 0xb3, 0xb4, 0xca, 0x6a, 0x51, 0xfb, 0xd1, 0xfe, 0xd8, 0xda, 0x13, 0xe0, 0x7f, 0x40, 0x0f, 0x9e, 0x6a, 0x4f, 0xb1, 0x8b, 0x71, 0x11, 0x2d, 0x12, 0x22, 0x66, 0x2e, 0x4b, 0x09, 0x41, 0x30, 0xcc, 0x2f, 0x14, 0x2a, 0xc2, 0xe0, 0x89, 0x71, 0x40, 0xb1, 0x73, 0xd9, 0xd6, 0xc2, 0x04, 0x1d, 0x66, 0x41, 0x40, 0x81, 0x33, 0x2f, 0xb1, 0xb5, 0x3b, 0x67, 0x5d, 0xfd, 0xc7, 0xdc, 0xf5, 0x8f, 0x40, 0x22, 0x4f, 0x3c, 0x44, 0x30, 0x16, 0x53, 0xf9, 0x64, 0xc1, 0xc3, 0xa1, 0xc7, 0xc1, 0x7f, 0x6f, 0x93, 0xff, 0x27, 0x99, 0xf2, 0x85, 0xe4, 0xaf, 0x09, 0x7b, 0x94, 0x2b, 0x35, 0x56, 0x27, 0x49, 0x94, 0x4c, 0x48, 0x19, 0xc8, 0x0b, 0x40, 0xd2, 0xf7, 0xaa, 0x18, 0x69, 0x16, 0xe0, 0xfe, 0x62, 0x68, 0x74, 0xeb, 0xe7, 0x41, 0xf4, 0x82, 0x17, 0x10, 0xaa, 0x3a, 0xa0, 0x9c, 0xcc, 0xbf, 0x90, 0x8e, 0xf3, 0x96, 0x68, 0x30, 0xce, 0x00, 0x72, 0x74, 0x18, 0x22, 0x55, 0x38, 0xc7, 0x62, 0xe7, 0xc8, 0x87, 0x14, 0x42, 0xa5, 0x66, 0x56, 0x1a, 0x85, 0xd1, 0x38, 0x4e, 0x9a, 0xbf, 0x21, 0xbc, 0x17, 0x2c, 0x6e, 0x5a, 0xf1, 0xc9, 0x5b, 0x83, 0xe2, 0xf2, 0x27, 0x8e, 0xb4, 0xe0, 0x73, 0xa5, 0xbc, 0x20, 0xec, 0xd4, 0xa5, 0x43, 0x29, 0x61, 0x6f, 0xd8, 0xd6, 0x5c, 0xb6, 0x97, 0x13, 0x76, 0x38, 0xdf, 0x17, 0x17, 0x92, 0x63, 0x19, 0xaa, 0x4a, 0x20, 0x70, 0x3c, 0x12, 0x92, 0xf9, 0x45, 0x4b, 0x27, 0xb9, 0xc5, 0xc9, 0xf4, 0xc3, 0x93, 0xd6, 0xa6, 0x5c, 0xf2, 0x79, 0xbc, 0x5e, 0x66, 0xf8, 0xf4, 0xda, 0xc6, 0x9b, 0x03, 0x01, 0x91, 0xb3, 0x89, 0x45, 0x85, 0xdb, 0x44, 0xbb, 0x6e, 0x7e, 0x84, 0xc4, 0x3d, 0x99, 0xdf, 0xec, 0x59, 0xc2, 0x25, 0x12, 0x3a, 0x6a, 0x97, 0xca, 0x33, 0x5f, 0x53, 0xff, 0x8f, 0x94, 0x13, 0xdd, 0xe0, 0x25, 0x17, 0xed, 0x94, 0x96, 0x60, 0x82, 0xc9, 0x5c, 0x1f, 0x55, 0x63, 0x9e, 0x6d, 0x6c, 0x5b, 0x3c, 0x3c, 0x40, 0x59, 0x11, 0x8e, 0x1e, 0x86, 0x75, 0xe5, 0xce, 0x9b, 0x06, 0xfa, 0x73, 0x3f, 0xa9, 0xb1, 0xb2, 0x8f, 0xcb, 0x4d, 0x16, 0xfe, 0xed, 0xe0, 0xb3, 0x5f, 0x5f, 0x06, 0x0a, 0x40, 0x4b, 0xd3, 0x2d, 0x7a, 0xf6, 0x0a, 0x24, 0x06, 0x43, 0x90, 0x8e, 0x12, 0x79, 0x20, 0x8b, 0x54, 0x45, 0x3f, 0xda, 0x9f, 0x03, 0x73, 0x3f, 0xb4, 0x39, 0xb0, 0x28, 0x5a, 0x64, 0x13, 0x8f, 0xb1, 0xf8, 0xd3, 0x22, 0xc3, 0xa2, 0x74, 0xa2, 0x5c, 0xd0, 0x3d, 0x89, 0x1c, 0x73, 0xed, 0xef, 0xca, 0x03, 0xaa, 0xae, 0xeb, 0xc4, 0x3a, 0xc5, 0x93, 0x49, 0x75, 0xfa, 0x7c, 0x36, 0xfa, 0xc4, 0x55, 0x4a, 0x22, 0x67, 0x5c, 0x9c, 0x32, 0x61, 0x2f, 0x24, 0xd5, 0x05, 0xdf, 0x7e, 0xc9, 0x66, 0x47, 0xeb, 0xd8, 0x76, 0x9c, 0x99, 0x0a, 0x6f, 0x45, 0x24, 0x19, 0x72, 0xec, 0x5c, 0x25, 0x6e, 0xd5, 0x49, 0xa9, 0x44, 0x6e, 0x6c, 0xae, 0x29, 0x28, 0x48, 0x3e, 0x4b, 0x86, 0x21, 0x1c, 0xb7, 0x73, 0x04, 0xb2, 0x7a, 0xd9, 0x07, 0x4b, 0x06, 0x6f, 0xd2, 0x82, 0xd8, 0xd3, 0x5e, 0xfa, 0x58, 0xd8, 0xfd, 0x50, 0x01, 0x21, 0x9b, 0x4e, 0xc1, 0xef, 0x43, 0x62, 0xa3, 0x37, 0xe5, 0x4e, 0xab, 0xf8, 0x56, 0x20, 0x01, 0xcb, 0x98, 0x65, 0x53, 0xbc, 0x5c, 0x9a, 0x74, 0x58, 0xc5, 0xe3, 0x49, 0x07, 0x6f, 0x00, 0xe5, 0x9c, 0xb0, 0x7c, 0xf3, 0x2b, 0x1d, 0x27, 0x54, 0x1a, 0x50, 0xc7, 0x0a, 0x7b, 0xe9, 0x0b, 0x55, 0x99, 0xd3, 0xc0, 0x1b, 0xd1, 0xc9, 0x47, 0x8d, 0xa4, 0x18, 0x47, 0x08, 0x0a, 0xa6, 0x9f, 0x39, 0x08, 0x33, 0x9f, 0x85, 0x84, 0xdf, 0x77, 0xa8, 0x59, 0xec, 0xef, 0x9c, 0xa7, 0xc6, 0x59, 0xbc, 0x6c, 0x40, 0xc4, 0x29, 0x59, 0x21, 0x73, 0x6d, 0xde, 0xdf, 0x8e, 0x5e, 0x88, 0xaa, 0x16, 0x45, 0x8c, 0xac, 0x1e, 0x40, 0xa4, 0x90, 0x39, 0xe5, 0x19, 0x41, 0x2f, 0x28, 0x21, 0xf4, 0xf4, 0x7f, 0x6c, 0x68, 0xda, 0x44, 0xfa, 0x6c, 0x05, 0x5a, 0x2f, 0xa3, 0x1f, 0x13, 0x29, 0x84, 0x4e, 0x51, 0x51, 0xa4, 0x63, 0xec, 0x30, 0x38, 0x55, 0x54, 0x85, 0xd5, 0xed, 0x78, 0x94, 0x7b, 0xc2, 0xe6, 0xc0, 0xd2, 0x68, 0x33, 0x5c, 0xb3, 0xe5, 0x9d, 0xbf, 0xea, 0x64, 0xef, 0x96, 0x3b, 0x2e, 0xa5, 0x7f, 0xa3, 0xd5, 0x51, 0xd3, 0xdf, 0xb2, 0x3d, 0xc2, 0x33, 0x92, 0x52, 0xa6, 0x64, 0xad, 0x38, 0x91, 0x06, 0xd8, 0xbf, 0x28, 0xfe, 0xfb, 0x7e, 0xb5, 0x3f, 0xc4, 0xba, 0x77, 0xd7, 0x9d, 0x89, 0x3d, 0x2f, 0xdc, 0x36, 0x33, 0x8e, 0x3a, 0xe8, 0xfb, 0xe0, 0x87, 0x7f, 0xff, 0xb6, 0x9c, 0xbf, 0x06, 0x8d, 0x90, 0xb0, 0x06, 0x53, 0x2f, 0x44, 0x39, 0x27, 0xa7, 0x3b, 0x73, 0x61, 0x85, 0x44, 0xb3, 0xd2, 0xe0, 0x65, 0xf8, 0x4d, 0xd4, 0x9c, 0x56, 0x65, 0x33, 0xc7, 0x48, 0x79, 0x76, 0xc1, 0x48, 0xee, 0xfa, 0xce, 0x9d, 0xbc, 0x69, 0x39, 0x75, 0x2c, 0x75, 0x3b, 0x33, 0xe0, 0xcd, 0x1f, 0x0a, 0x13, 0x49, 0xa4, 0xcb, 0x22, 0x68, 0xa3, 0xfb, 0x4b, 0xfd, 0xf1, 0x29, 0xb5, 0x25, 0x87, 0x7e, 0xb1, 0x7c, 0xe0, 0x96, 0x40, 0x91, 0xa3, 0x8e, 0xd5, 0x97, 0x82, 0x5f, 0x5c, 0x5d, 0x62, 0x6a, 0x7a, 0x80, 0xbc, 0x54, 0x17, 0xdf, 0x43, 0x13, 0x1a, 0x4f, 0xc7, 0x49, 0x73, 0x90, 0x59, 0xd1 ],
- const [ 0x62, 0x9b, 0x37, 0xb9, 0xa0, 0x56, 0xe7, 0x49, 0x59, 0x34, 0x6e, 0x8c, 0x40, 0xae, 0xb4, 0xe2, 0x07, 0x3e, 0x97, 0xbf, 0x21, 0x17, 0xd2, 0xff, 0xcd, 0x13, 0x23, 0x7a, 0x50, 0xed, 0xad, 0xd9, 0x81, 0xb0, 0x9b, 0xa8, 0x8b, 0x6f, 0x06, 0xac, 0xef, 0x37, 0x18, 0x76, 0xc8, 0x42, 0x72, 0x38, 0x53, 0x6d, 0xcc, 0xd8, 0xae, 0xec, 0xdb, 0x43, 0xe0, 0x3d, 0x78, 0x04, 0x1a, 0x5a, 0xfe, 0x15, 0x3d, 0x33, 0xf4, 0xf4, 0x9b, 0x5b, 0xec, 0xfa, 0x02, 0x02, 0xaa, 0xe9, 0xf7, 0x23, 0x89, 0xc4, 0x3f, 0xfe, 0x1b, 0xe3, 0xa4, 0xc9, 0x10, 0x46, 0xf5, 0xa3, 0x59, 0x2a, 0x4f, 0xc9, 0x8d, 0xda, 0x9b, 0x0c, 0x8b, 0xc8, 0x58, 0x83, 0x61, 0xdc, 0x9b, 0x7d, 0x6c, 0x0c, 0x53, 0xb9, 0xc1, 0x2d, 0xd2, 0xda, 0xcc, 0x08, 0x89, 0x15, 0x37, 0xb1, 0x13, 0x2d, 0x0d, 0x14, 0x76, 0xa1, 0x20, 0xd1, 0xa5, 0x24, 0xa8, 0x4a, 0x49, 0x4d, 0x2c, 0xf9, 0xc0, 0x90, 0xa6, 0x08, 0x66, 0x6d, 0xe2, 0x1b, 0x14, 0xe7, 0x27, 0x71, 0xe7, 0x38, 0x19, 0x2b, 0x43, 0xc3, 0xde, 0xeb, 0x17, 0x4a, 0x80, 0xa1, 0x62, 0x61, 0x92, 0xa2, 0xf6, 0x22, 0x17, 0xfb, 0x7c, 0x23, 0x9f, 0x04, 0xb8, 0xa5, 0xb3, 0x38, 0x0e, 0x0e, 0x73, 0x43, 0x45, 0x9a, 0x7e, 0x5d, 0x8c, 0x4d, 0x12, 0xd7, 0xba, 0x2c, 0x75, 0xf3, 0xda, 0xac, 0x93, 0xf9, 0xe7, 0x6b, 0xe8, 0x87, 0xd4, 0x1e, 0xa0, 0x29, 0xcf, 0xca, 0xfd, 0x29, 0xc7, 0x38, 0xfa, 0xa9, 0x2c, 0xa3, 0x2e, 0xee, 0xf6, 0xb3, 0xf2, 0xff, 0xe8, 0xaf, 0xc6, 0x6f, 0x16, 0xee, 0xf1, 0x77, 0xa5, 0x8e, 0x68, 0x48, 0xd2, 0x69, 0xf1, 0x9e, 0x35, 0x45, 0x88, 0x99, 0x47, 0x4b, 0x02, 0xc9, 0x23, 0xbb, 0xf0, 0x87, 0x89, 0xdd, 0xc6, 0x8c, 0x28, 0x3b, 0x3d, 0xbc, 0x1d, 0x0d, 0xf5, 0x43, 0xb7, 0xf5, 0x5f, 0xe3, 0x7d, 0xec, 0xda, 0x8c, 0x72, 0x7c, 0x1c, 0x2e, 0x97, 0x31, 0xd4, 0xcb, 0xb2, 0x4a, 0x8d, 0xd0, 0x4e, 0xb3, 0xd6, 0xa5, 0x03, 0x38, 0xa0, 0x83, 0xf7, 0xf3, 0xe7, 0x86, 0xa5, 0x06, 0x95, 0x03, 0xdd, 0x90, 0xa3, 0x1b, 0x0c, 0xd9, 0x81, 0x90, 0xbe, 0xd0, 0xb8, 0xd8, 0x61, 0xb8, 0xce, 0x70, 0x4c, 0x1e, 0x69, 0x73, 0x00, 0x0e, 0xb8, 0x6b, 0xad, 0x86, 0x0f, 0x67, 0xf8, 0x2b, 0xd1, 0x4e, 0xfb, 0x3b, 0x93, 0x72, 0x8d, 0xc3, 0x7e, 0x68, 0xc4, 0x12, 0xf5, 0x18, 0xb9, 0x6d, 0x78, 0x10, 0x8b, 0x04, 0xc9, 0x1e, 0xa7, 0x25, 0x4d, 0x1d, 0x46, 0xb0, 0xb4, 0x0f, 0x37, 0xcb, 0xdd, 0x6c, 0xde, 0xd6, 0xf3, 0xba, 0x7d, 0xa2, 0xdd, 0x5e, 0xb2, 0xdd, 0xd5, 0xb2, 0x41, 0xd1, 0x56, 0x57, 0x14, 0x4f, 0x3c, 0xcd, 0x80, 0xe5, 0x27, 0x40, 0xca, 0x57, 0x20, 0xa5, 0xea, 0x4d, 0x7f, 0x06, 0x8e, 0x4a, 0x0b, 0x1a, 0x62, 0xdd, 0x64, 0x19, 0x8f, 0x1b, 0x9e, 0xce, 0x81, 0x4c, 0x2f, 0xee, 0xee, 0xe5, 0x0b, 0xa8, 0x14, 0xb7, 0x0d, 0x7d, 0x42, 0x65, 0x99, 0x52, 0x99, 0x1b, 0x80, 0xc4, 0x14, 0x7d, 0x23, 0xbb, 0xc6, 0xde, 0xdc, 0x42, 0x63, 0xb3, 0x99, 0x96, 0x02, 0x47, 0xca, 0x7c, 0x21, 0xb0, 0x7e, 0xd8, 0xea, 0x01, 0xc8, 0x7c, 0xb5, 0xc1, 0x68, 0x3e, 0xcd, 0x9c, 0xa7, 0x4d, 0x77, 0x59, 0x83, 0xc5, 0x30, 0x0c, 0x0c, 0x80, 0x37, 0x8d, 0x0e, 0x30, 0x4b, 0x28, 0xf0, 0xaa, 0xb6, 0x96, 0xdc, 0x85, 0x8a, 0x2c, 0x21, 0xe4, 0x2b, 0x53, 0xd5, 0x90, 0x0d, 0x38, 0xbe, 0x4a, 0xbf, 0xc5, 0x73, 0x5f, 0x29, 0xcf, 0xbe, 0x7c, 0x12, 0x91, 0x45, 0xc4, 0xe5, 0x59, 0x69, 0x20, 0xb4, 0x81, 0x6f, 0xd6, 0x7d, 0xa1, 0xdd, 0x5e, 0xac, 0x03, 0x27, 0x71, 0xe2, 0x57, 0x8b, 0x62, 0xf5, 0xa8, 0x3a, 0xb1, 0x38, 0x8f, 0xb8, 0xde, 0xfc, 0xa7, 0x85, 0x7b, 0x56, 0x40, 0xfd, 0x85, 0x23, 0x58, 0x7d, 0xf4, 0x4a, 0xc7, 0xc7, 0x91, 0x41, 0xb9, 0xa8, 0x08, 0xd3, 0x61, 0xd8, 0x3e, 0x20, 0xec, 0x21, 0xe4, 0xe5, 0xb4, 0xc3, 0x4d, 0xfd, 0xb7, 0x18, 0x7c, 0x28, 0x47, 0x74, 0x82, 0x0c, 0x03, 0x4f, 0x07, 0x79, 0x05, 0xa6, 0x26, 0xf1, 0x5d, 0x9e, 0x7e, 0x68, 0xbe, 0x6b, 0x85, 0x48, 0x78, 0x70, 0x20, 0xb8, 0xa6, 0xa7, 0x71, 0x1e, 0xa9, 0x44, 0xf0, 0xe2, 0xd5, 0x95, 0xbe, 0x76, 0x69, 0x2d, 0x36, 0x93, 0xc5, 0x41, 0xc4, 0xc5, 0xd7, 0x52, 0xfa, 0x29, 0xd7, 0x0c, 0xe0, 0x75, 0x34, 0x6f, 0x8c, 0x3a, 0xce, 0x2c, 0xf3, 0x66, 0x65, 0x52, 0xff, 0x0d, 0x51, 0x29, 0xe2, 0x69, 0x74, 0x5e, 0xa9, 0x1f, 0x6e, 0x61, 0x14, 0xc3, 0x0f, 0x0c, 0xa5, 0x9f, 0x12, 0x85, 0xf7, 0xb0, 0x08, 0x65, 0x51, 0xf2, 0x92, 0x1a, 0x7b, 0xde, 0xd3, 0x8a, 0xd0, 0x30, 0x25, 0xf8, 0x95, 0xed, 0x0b, 0x2c, 0x89, 0xa5, 0x68, 0xce, 0xbd, 0xf5, 0xee, 0x14, 0xa6, 0x51, 0xd8, 0x9d, 0x71, 0x00, 0xdc, 0x9c, 0x96, 0x68, 0x5b, 0x38, 0xb0, 0x8c, 0xdc, 0x33, 0x8c, 0xd3, 0xb8, 0xca, 0x80, 0x0b, 0x16, 0xdd, 0xfe, 0xad, 0x1a, 0x50, 0x68, 0x63, 0x5a, 0xb1, 0x26, 0xc7, 0x92, 0x1b, 0xf7, 0x6e, 0x98, 0x5a, 0x84, 0x25, 0x92, 0x4f, 0x3b, 0x7a, 0x66, 0x96, 0x5a, 0x7f, 0x72, 0x67, 0x4a, 0xca, 0x7e, 0xba, 0x2f, 0xc0, 0xee, 0xaf, 0xbd, 0x14, 0x3c, 0x2c, 0x4d, 0x8a, 0xa6, 0xc8, 0x30, 0x01, 0x24, 0xe8, 0x43, 0xb0, 0x9d, 0x27, 0xc3, 0xb0, 0x5a, 0xfc, 0x63, 0xba, 0xbb, 0x97, 0x9c, 0x33, 0x29, 0x0b, 0x45, 0x65, 0x4b, 0xb2, 0x63, 0x10, 0x7d, 0xcd, 0x42, 0x21, 0x7e, 0x6c, 0xc5, 0xc1, 0x68, 0x8e, 0xfa, 0x91, 0xe6, 0x88, 0xf1, 0x34, 0xa1, 0xab, 0xcf, 0x0f, 0xfb, 0x21, 0x1e, 0x4c, 0x00, 0x18, 0x67, 0x25, 0x99, 0x23, 0x03, 0x5f, 0x03, 0xdc, 0x2e, 0x14, 0x80, 0xcf, 0x5d, 0xb6, 0x4d, 0x93, 0xd2, 0x51, 0xd3, 0x3a, 0x6d, 0x10, 0x21, 0xec, 0xc5, 0x03, 0x9a, 0xce, 0x77, 0x1f, 0xeb, 0x28, 0xbe, 0x87, 0x41, 0xc8, 0x44, 0x0a, 0xb8, 0xa1, 0x38, 0xec, 0x16, 0xb8, 0xa1, 0xe9, 0xb9, 0x41, 0xf2, 0x77, 0xce, 0x04, 0xde, 0x4c, 0xc4, 0x06, 0x6d, 0x20, 0x00, 0x66, 0x50, 0xb4, 0xd3, 0x85, 0x72, 0x13, 0xa9, 0x69, 0xcf, 0x17, 0x83, 0x64, 0x89, 0x30, 0xa7, 0xf0, 0x38, 0x61, 0x95, 0xde, 0x82, 0x8b, 0x3e, 0xb0, 0xed, 0xee, 0x71, 0x43, 0xf0, 0xed, 0x96, 0xb1, 0x50, 0x11, 0x9e, 0x75, 0xaa, 0x51, 0x3a, 0xd0, 0x4b, 0x91, 0x4b, 0x6c, 0x48, 0x68, 0x9a, 0x40, 0xcc, 0x26, 0xca, 0xb3, 0xac, 0x16, 0x8b, 0x04, 0x41, 0x00, 0x10, 0xe9, 0x76, 0xf2, 0xc2, 0x76, 0x20, 0x40, 0x36, 0x41, 0x8e, 0xca, 0x5c, 0xc4, 0x61, 0x7d, 0xfa, 0x02, 0x9e, 0x1d, 0x59, 0x6e, 0x02, 0x41, 0x3f, 0x08, 0x96, 0x9f, 0x1c, 0xc9, 0x83, 0x89, 0x88, 0x41, 0x26, 0xb8, 0xed, 0x7f, 0x67, 0x49, 0x81, 0x31, 0x47, 0x05, 0x78, 0x0c, 0xb9, 0xe5, 0x77, 0x6e, 0xb3, 0xd5, 0x4b, 0x42, 0x84, 0xb9, 0xdb, 0x25, 0x68, 0xae, 0x5b, 0xc6, 0x5a, 0x92, 0xc3, 0x93, 0x29, 0xc6, 0x80, 0x92, 0xce, 0x32, 0x69, 0x8c, 0xfd, 0x8a, 0xf4, 0x71, 0xfa, 0xd0, 0xaa, 0xf8, 0xae, 0x1b, 0xd8, 0x86, 0xfa, 0x96, 0x88, 0x51, 0x4b, 0xcb, 0xaf, 0xc5, 0x6f, 0x22, 0xa8, 0x27, 0xa7, 0xa4, 0xe1, 0x78, 0xfd, 0x05, 0xd5, 0x9c, 0xd7, 0xe2, 0x3a, 0xbb, 0xcd, 0x47, 0x7b, 0xe8, 0xb8, 0x74, 0x68, 0x00, 0x0b, 0xe1, 0x2d, 0xd5, 0x67, 0x7f, 0x80, 0x8c, 0x69, 0x41, 0x1f, 0x44, 0xc7, 0xdb, 0x7a, 0xf9, 0x9b, 0xca, 0xac, 0xa7, 0xfe, 0x94, 0xb0, 0xb2, 0xd9, 0x51, 0xd2, 0x85, 0xf8, 0x6a, 0x63, 0x79, 0x60, 0xa1, 0xb1, 0xf9, 0xe3, 0x51, 0x37, 0xe5, 0xf1, 0xf7, 0x10, 0x33, 0xb1, 0xf2, 0xb2, 0xdc, 0x50, 0x87, 0xd8, 0xf6, 0x9a, 0x28, 0xc0, 0x1d, 0xc7, 0xf6, 0x97, 0x18, 0x97, 0x84, 0x32, 0xba, 0xa1, 0xde, 0xfe, 0x05, 0xe7, 0xca, 0x3a, 0x96, 0xaf, 0x4d, 0x63, 0x3d, 0x8e, 0x71, 0xf0, 0xeb, 0xc6, 0x46, 0x40, 0xd1, 0xd2, 0x27, 0xd1, 0xc6, 0x3e, 0x3e, 0xb2, 0xe9, 0xbc, 0x4b, 0x3b, 0x88, 0x75, 0xa0, 0xfb, 0x41, 0x9d, 0x70, 0xf2, 0x67, 0x4a, 0x4a, 0x00, 0xa8, 0x86, 0xe1, 0x9e, 0xec, 0xa2, 0x0e, 0xcc, 0x7f, 0xce, 0x18, 0x4a, 0x73, 0xe7, 0x32, 0x0b, 0x40, 0x90, 0x45, 0xe7, 0xae, 0x84, 0xf0, 0x90, 0xf5, 0x2b, 0xce, 0xc7, 0x22, 0x6b, 0xf7, 0xd0, 0xbc, 0xc0, 0xc9, 0x23, 0xa8, 0x8f, 0xe8, 0x64, 0x4a, 0xb7, 0x83, 0x95, 0xed, 0x6a, 0xd9, 0x8b, 0x65, 0x3b, 0xfc, 0x9e, 0xf2, 0x77, 0xd5, 0xa5, 0x68, 0xb9, 0x69, 0x22, 0x8d, 0xb9, 0x5a, 0xb9, 0xc3, 0x65, 0xb1, 0xe7, 0xe7, 0x33, 0xda, 0xf0, 0x78, 0xb5, 0xf0, 0x19, 0xfc, 0x6e, 0x3c, 0x18, 0x9f, 0xe4, 0xf8, 0xc9, 0x1e, 0xf6, 0x58, 0x22, 0xe3, 0x70, 0xcb, 0x69, 0x72, 0xdd, 0x7e, 0xa4, 0x03, 0x9c, 0x21, 0x52, 0x70, 0x36, 0xef, 0x58, 0x52, 0xef, 0xe8, 0x3e, 0x67, 0x9b, 0x61, 0x9b, 0x38, 0xb3, 0xbf, 0xce, 0xf8, 0xa8, 0x80, 0xef, 0xae, 0x77, 0x7b, 0x06, 0x97, 0x7e, 0x68, 0x7a, 0xc5, 0x8e, 0xa2, 0xcc, 0x0d, 0x41, 0x2c, 0x84, 0x20, 0x8e, 0xf2, 0x6c, 0xf8, 0x9a, 0x52, 0xfd, 0x76, 0xd1, 0xdb, 0x17, 0x49, 0x36, 0x55, 0xf5, 0x11, 0xf7, 0x01, 0x5f, 0xc4, 0x45, 0x22, 0x21, 0x51, 0x62, 0xbb, 0xbd, 0x84, 0xfc, 0x9b, 0x5d, 0x2a, 0xb9, 0x97, 0x0b, 0x75, 0x13, 0x17, 0x24, 0xa2, 0x66, 0xd4, 0x0a, 0xd8, 0x47, 0xdf, 0x1a, 0x54, 0x18, 0xe6, 0xde, 0xc3, 0xd9, 0xb3, 0x83, 0xef, 0x41, 0xf5, 0x8d, 0x9e, 0x0e, 0x43, 0xc9, 0xb7, 0x99, 0x5e, 0x83, 0xa7, 0xad, 0xb6, 0xfa, 0x03, 0x99, 0x30, 0x11, 0x6f, 0x84, 0x27, 0x47, 0xbe, 0x01, 0xb1, 0xe9, 0x5b, 0xe4, 0x23, 0x87, 0xe7, 0x53, 0xd7, 0xa4, 0x23, 0x20, 0x2c, 0xb1, 0x11, 0x56, 0xcf, 0x3d, 0x56, 0x11, 0x39, 0x66, 0xe3, 0x93, 0x79, 0x93, 0xd4, 0x95, 0x34, 0x65, 0x98, 0xdb, 0xea, 0xea, 0x53, 0x0b, 0x7a, 0x14, 0x80, 0xbf, 0xe9, 0x6a, 0xdb, 0xd9, 0x5f, 0xfe, 0x7e, 0x17, 0x72, 0x9f, 0x4a, 0xe7, 0xa7, 0x4f, 0x88, 0x7c, 0x36, 0xf8, 0xd0, 0x21, 0x0e, 0x5a, 0x2a, 0xcd, 0x19, 0x48, 0x74, 0xf8, 0xc1, 0x14, 0x04, 0xae, 0xb3, 0x48, 0x8e, 0xe2, 0xe3, 0x96, 0x47, 0x04, 0xd0, 0x12, 0x4a, 0xd6, 0x09, 0x9f, 0x3b, 0x7b, 0xf0, 0xa7, 0x2b, 0xd0, 0xbe, 0x10, 0xbc, 0x00, 0xc7, 0x6b, 0x86, 0x53, 0x00, 0x6e, 0xb9, 0x47, 0xbe, 0xa4, 0x03, 0xe2, 0xc0, 0x63, 0xb4, 0x46, 0x70, 0xff, 0x20, 0x86, 0x66, 0x3d, 0x44, 0xb8, 0x2e, 0x0a, 0xad, 0x4c, 0x4b, 0x6d, 0x96, 0x9c, 0x7b, 0xbb, 0x51, 0xc3, 0x3d, 0x0a, 0xe8, 0xb3, 0x91, 0xe7, 0x03, 0x82, 0xff, 0x4c, 0x0c, 0x05, 0xda, 0xcc, 0x92, 0xa0, 0xc6, 0x11, 0xeb, 0x5c, 0x78, 0x88, 0x1e, 0x3a, 0xbd, 0x5b, 0x00, 0xc8, 0xbe, 0xa0, 0x9c, 0xf1, 0x82, 0xd0, 0xd8, 0x19, 0xb4, 0x7a, 0x56, 0x6a, 0xa7, 0x38, 0x99, 0x68, 0x97, 0xe3, 0x69, 0xcc, 0x32, 0x03, 0x78, 0x8f, 0x56, 0x89, 0x45, 0x45, 0x1d, 0xc1, 0x41, 0xac, 0x17, 0x82, 0x31, 0x85, 0xd6, 0xa8, 0xd3, 0xa2, 0xb0, 0xc3, 0xc4, 0x41, 0xc0, 0x11, 0xa1, 0x98, 0x2e, 0xaa, 0x6c, 0xb1, 0xb0, 0xfb, 0x32, 0x78, 0x51, 0x75, 0xeb, 0x13, 0x72, 0x86, 0xa2, 0x71, 0x0e, 0xc9, 0xd6, 0x26, 0x42, 0x7a, 0x1f, 0x76, 0x0c, 0x2c, 0x15, 0xaf, 0x53, 0xbe, 0x6d, 0xbd, 0x27, 0x8b, 0x65, 0xf8, 0x4b, 0xe1, 0x63, 0x40, 0xf0, 0xb5, 0xd8, 0x4c, 0xc4, 0x94, 0x6b, 0x3f, 0x2b, 0xdd, 0x54, 0x7c, 0xcc, 0x2e, 0x05, 0xbc, 0x50, 0x1c, 0x10, 0x5e, 0x66, 0x27, 0x45, 0xfe, 0x0b, 0xec, 0x1a, 0x48, 0x08, 0x9d, 0x51, 0x0e, 0xbc, 0xaf, 0xd4, 0x99, 0x1b, 0xd2, 0xe4, 0x3d, 0xf7, 0x26, 0x72, 0x30, 0x7f, 0xac, 0xcd, 0x9d, 0x05, 0xfb, 0x7e, 0xf3, 0x04, 0x34, 0x70, 0x83, 0x61, 0x37, 0x55, 0x4a, 0xf1, 0x17, 0x44, 0x0b, 0x3c, 0xcc, 0xa7, 0xa2, 0x80, 0x28, 0x54, 0x94, 0xf9, 0x0d, 0xfa, 0xea, 0x60, 0xdc, 0xbf, 0x40, 0xb2, 0x30, 0x27, 0x19, 0x32, 0xcd, 0x38, 0x75, 0xb1, 0xd3, 0xdc, 0xa6, 0x0d, 0x38, 0x86, 0x5f, 0xf8, 0x74, 0x18, 0x0e, 0xfa, 0x7e, 0x05, 0x6b, 0xb9, 0xf8, 0xb2, 0x51, 0x79, 0xa6, 0x23, 0xce, 0xdf, 0x25, 0xd3, 0x76, 0xfa, 0xda, 0xe3, 0xfc, 0x84, 0x28, 0x77, 0x03, 0x64, 0xe6, 0x5e, 0x31, 0x78, 0x10, 0xf1, 0x85, 0x92, 0xbc, 0x3d, 0xeb, 0xc0, 0x50, 0x64, 0x0e, 0xd1, 0xf3, 0x40, 0x6e, 0x14, 0x41, 0x4a, 0xb2, 0x63, 0x43, 0xba, 0x3f, 0x60, 0x9e, 0xf0, 0x09, 0xff, 0x0a, 0x13, 0xa9, 0x45, 0x06, 0xf8, 0xb1, 0x4f, 0xcb, 0x45, 0x3c, 0x95, 0x7e, 0xd6, 0xc9, 0x70, 0xa9, 0x5f, 0x49, 0xda, 0xec, 0x53, 0x76, 0x75, 0xf0, 0x05, 0x67, 0xd0, 0x9d, 0x0e, 0x61, 0xe5, 0x8d, 0xee, 0xf1, 0xe6, 0xc0, 0xf6, 0x37, 0x39, 0x91, 0x65, 0x85, 0xc1, 0xe8, 0xd1, 0x29, 0x5f, 0xb2, 0xc8, 0x86, 0xb8, 0x8e, 0xb8, 0x6a, 0x39, 0xc9, 0x0c, 0x9b, 0x59, 0x8d, 0x98, 0xb3, 0x1e, 0x55, 0x37, 0x2e, 0xe3, 0xa4, 0xb2, 0xc2, 0x58, 0xf7, 0xe4, 0xef, 0xca, 0xf8, 0x1c, 0xd6, 0xa5, 0xf4, 0xc3, 0x4e, 0x37, 0x8f, 0x3f, 0x35, 0xb6, 0xb7, 0x16, 0x04, 0x85, 0xd6, 0x57, 0xa6, 0xb3, 0x4c, 0x36, 0x8b, 0xc5, 0x1c, 0xf6, 0xf8, 0xb5, 0xe5, 0x0c, 0xa1, 0x3a, 0x15, 0x81, 0x79, 0x4a, 0x59, 0x98, 0xc9, 0xdd, 0x58, 0xb1, 0x7f, 0xf5, 0xa0, 0x6d, 0xc9, 0xdb, 0xe0, 0x13, 0xe3, 0xab, 0x59, 0x32, 0x2e, 0x12, 0x8f, 0x88, 0x81, 0x57, 0x44, 0x23, 0xc3, 0x98, 0xa6, 0xc6, 0xba, 0x57, 0xc8, 0x8e, 0x1e, 0x35, 0x4f, 0xd5, 0xf2, 0xfc, 0x6e, 0x57, 0x14, 0xe3, 0x14, 0x93, 0x12, 0x0e, 0x63, 0x75, 0x3f, 0x55, 0x65, 0x31, 0x06, 0x46, 0xfa, 0x72, 0x7f, 0x6d, 0x15, 0xb4, 0x40, 0xd3, 0x28, 0xee, 0x76, 0xc4, 0xdd, 0x75, 0x34, 0xd5, 0x07, 0x1d, 0x0a, 0x26, 0xd8, 0xa1, 0xda, 0xe5, 0x54, 0x45, 0xe7, 0x13, 0x05, 0xb9, 0x2f, 0x8b, 0xf1, 0x41, 0xfb, 0x40, 0xc9, 0x13, 0xb4, 0xc6, 0x63, 0x00, 0xf8, 0x14, 0x6a, 0x57, 0xed, 0x88, 0x55, 0x07, 0xd5, 0x2b, 0x95, 0x03, 0xe3, 0x37, 0x13, 0xeb, 0x4d, 0xd6, 0xd9, 0xe8, 0xa3, 0x2d, 0x0f, 0xd8, 0x5f, 0x99, 0x2a, 0xab, 0xbd, 0x38, 0x60, 0x0c, 0xcd, 0xac, 0x5f, 0x44, 0xc6, 0x1b, 0x3e, 0x5c, 0x9d, 0x7a, 0xb4, 0x82, 0xd6, 0x0c, 0x88, 0xaf, 0x9b, 0x25, 0x48, 0x86, 0x0b, 0x34, 0x3e, 0x7e, 0xd4, 0x00, 0xa0, 0x43, 0x04, 0x32, 0x07, 0x5a, 0x1c, 0x14, 0x22, 0x04, 0x66, 0x98, 0xac, 0x66, 0x89, 0x9c, 0x9b, 0xe6, 0x5b, 0x6c, 0x9b, 0xd8, 0xf6, 0x89, 0xba, 0x5a, 0x0e, 0xa9, 0x65, 0x7c, 0x82, 0xfe, 0x93, 0xa5, 0x30, 0xbb, 0x40, 0x32, 0x0e, 0xd5, 0x1d, 0x5f, 0x77, 0x06, 0x86, 0x6b, 0xc2, 0x18, 0xb4, 0xf7, 0x19, 0x60, 0x34, 0xb0, 0x88, 0x89, 0x97, 0x2d, 0x55, 0x93, 0x6c, 0x1a, 0x90, 0x1a, 0x6b, 0x97, 0xea, 0xdc, 0xf3, 0xdb, 0xcb, 0x76, 0xb7, 0x1d, 0x9e, 0x6e, 0xb4, 0xb4, 0x70, 0x76, 0x66, 0x7d, 0xb9, 0xef, 0x3b, 0x7d, 0x79, 0xad, 0x48, 0xc7, 0x87, 0xfa, 0x3a, 0xa0, 0x26, 0xdd, 0x90, 0xe2, 0xda, 0x9c, 0x08, 0x9e, 0x7a, 0x7f, 0x57, 0x05, 0x85, 0xd7, 0x1d, 0x89, 0xb9, 0x3f, 0x18, 0x3f, 0xe2, 0x22, 0x98, 0x88, 0xf1, 0x7d, 0x33, 0xf0, 0x4d, 0xe6, 0xb9, 0x56, 0x6e, 0xce, 0x6b, 0x4e, 0xa7, 0x03, 0x67, 0xc3, 0x43, 0x78, 0x67, 0xe1, 0xd4, 0x49, 0xab, 0x31, 0xc8, 0xfa, 0x34, 0x06, 0x3d, 0x00, 0x33, 0x19, 0x17, 0x82, 0xc1, 0x70, 0x4f, 0x60, 0xd0, 0x84, 0x8d, 0x75, 0x62, 0xa2, 0xfa, 0x19, 0xf9, 0x92, 0x4f, 0xea, 0x4e, 0x77, 0x33, 0xcd, 0x45, 0xf6, 0xc3, 0x2f, 0x21, 0x9a, 0x72, 0x91, 0xf4, 0x77, 0x13, 0x43, 0x5a, 0x0e, 0x34, 0x6f, 0x67, 0x71, 0xae, 0x5a, 0xde, 0xa8, 0x7a, 0xe7, 0xa4, 0x52, 0xc6, 0x5d, 0x74, 0x8f, 0x48, 0x69, 0xd3, 0x1e, 0xd3, 0x67, 0x47, 0xc3, 0x28, 0xdd, 0xc4, 0xec, 0x0e, 0x48, 0x67, 0x93, 0xa5, 0x1c, 0x67, 0x66, 0xf7, 0x06, 0x48, 0x26, 0xd0, 0x74, 0x51, 0x4d, 0xd0, 0x57, 0x41, 0xf3, 0xbe, 0x27, 0x3e, 0xf2, 0x1f, 0x28, 0x0e, 0x49, 0x07, 0xed, 0x89, 0xbe, 0x30, 0x1a, 0x4e, 0xc8, 0x49, 0x6e, 0xb6, 0xab, 0x90, 0x00, 0x06, 0xe5, 0xa3, 0xc8, 0xe9, 0xc9, 0x93, 0x62, 0x1d, 0x6a, 0x3b, 0x0f, 0x6c, 0xba, 0xd0, 0xfd, 0xde, 0xf3, 0xb9, 0xc8, 0x2d, 0x36, 0xa0, 0x40, 0x79, 0x72, 0xc9, 0x6d, 0x3d, 0x88, 0xa2, 0xd0, 0x82, 0xad, 0x9c, 0xec, 0x52, 0x0f, 0x3a, 0x05, 0x70, 0xbb, 0x67, 0x28, 0x46, 0xbe, 0x0d, 0x6b, 0x1f, 0x8a, 0xe3, 0x76, 0x96, 0x9c, 0x87, 0x42, 0x4e, 0x5c, 0xcc, 0x21, 0xe4, 0x45, 0x55, 0xff, 0x22, 0x45, 0x63, 0xe7, 0x76, 0x67, 0xeb, 0xc9, 0xa2, 0xaf, 0xec, 0x7a, 0xb4, 0x45, 0xff, 0xfc, 0x39, 0xd7, 0x30, 0x00, 0xae, 0x38, 0x0c, 0xa9, 0x37, 0x4d, 0xfb, 0x93, 0x94, 0x29, 0xd0, 0x14, 0x50, 0x77, 0x9f, 0xc1, 0x3b, 0x18, 0xce, 0x34, 0x1b, 0x0e, 0x6f, 0x0d, 0x9f, 0x99, 0xcd, 0x37, 0x94, 0x9f, 0x45, 0x6d, 0x5b, 0x51, 0x58, 0xfc, 0x9b, 0x0c, 0xfe, 0xca, 0x33, 0x7d, 0x3c, 0x97, 0x73, 0x09, 0xf8, 0x83, 0x8b, 0x6c, 0x0d, 0xd0, 0x43, 0xa0, 0x9b, 0xea, 0xed, 0x00, 0xa0, 0xa4, 0x98, 0xad, 0xcd, 0xc5, 0x87, 0x31, 0x92, 0xc3, 0xe2, 0x62, 0x7c, 0xce, 0xaa, 0x89, 0xc0, 0x10, 0xf2, 0xc4, 0x18, 0x34, 0x4d, 0xa9, 0xcd, 0x25, 0x83, 0x2c, 0x15, 0x18, 0x88, 0xc3, 0xa0, 0xcc, 0xae, 0xc8, 0x6e, 0x10, 0x19, 0x1e, 0xe3, 0x87, 0x73, 0x17, 0x1d, 0xa8, 0xe2, 0x95, 0x85, 0x08, 0x37, 0x70, 0xa4, 0xdc, 0x69, 0x18, 0x39, 0xb9, 0x41, 0x7c, 0x88, 0x9f, 0x56, 0x2a, 0xf4, 0x36, 0x3c, 0xb7, 0xd0, 0x57, 0xf9, 0x61, 0x73, 0xce, 0xb8, 0xf3, 0x8a, 0x5f, 0xc2, 0xe9, 0xb3, 0x07, 0xa9, 0xd5, 0x47, 0x83, 0xc6, 0x01, 0x76, 0x17, 0xe6, 0x56, 0x9a, 0x88, 0x41, 0x7c, 0xc5, 0x6a, 0xac, 0x43, 0x9c, 0xa2, 0x0f, 0x42, 0x69, 0x23, 0x18, 0xbe, 0x6b, 0xfb, 0x31, 0xcd, 0x71, 0x93, 0xb0, 0xba, 0xa7, 0x32, 0x4e, 0xac, 0xaf, 0xc4, 0xdb, 0x83, 0xf3, 0xda, 0x30, 0x03, 0x3a, 0xf1, 0x64, 0x34, 0x7a, 0xf7, 0x43, 0x08, 0xed, 0x0b, 0xfb, 0x3f, 0x67, 0x85, 0x19, 0x88, 0xe7, 0x36, 0xb4, 0xe9, 0x6c, 0xf1, 0xe8, 0x60, 0x0a, 0x49, 0x87, 0xcb, 0x3c, 0x9d, 0x0a, 0x05, 0x7c, 0x52, 0xce, 0x52, 0x11, 0x60, 0x7d, 0xfd, 0x29, 0x10, 0xc9, 0x3f, 0x27, 0x04, 0x61, 0x63, 0x3e, 0x77, 0x1d, 0x28, 0x3f, 0xc6, 0x7c, 0x67, 0xaf, 0x2f, 0x51, 0xf5, 0x1d, 0xd9, 0xb9, 0xcb, 0xb2, 0x15, 0x50, 0x64, 0x0a, 0xe4, 0xa5, 0x67, 0x42, 0xb9, 0xeb, 0x86, 0x53, 0x80, 0xf1, 0xa6, 0x9e, 0xde, 0x54, 0x40, 0xc8, 0xbb, 0xf3, 0x07, 0xc7, 0xfe, 0xa3, 0xcb, 0x3d, 0x97, 0x24, 0x9d, 0x05, 0xc3, 0x54, 0x34, 0x0c, 0x8b, 0xa3, 0x8f, 0x63, 0x8e, 0xc7, 0xdc, 0x92, 0x01, 0xb1, 0x99, 0x2e, 0xf4, 0xbf, 0xf9, 0xae, 0xd7, 0x33, 0x89, 0x7a, 0x3c, 0xe4, 0x13, 0x45, 0xdf, 0x33, 0xc2, 0x9d, 0xe3, 0x41, 0x88, 0xc0, 0x5e, 0x5f, 0xbd, 0xb2, 0x18, 0xc6, 0x09, 0x8c, 0x90, 0x89, 0x83, 0x17, 0x40, 0xc7, 0x1a, 0x99, 0x22, 0x25, 0x35, 0xef, 0x73, 0x7b, 0x96, 0xdc, 0xb7, 0xce, 0x84, 0xa1, 0xfd, 0x7f, 0x29, 0xce, 0x64, 0xc1, 0x39, 0x57, 0xde, 0x50, 0xd4, 0xea, 0x34, 0x61, 0xae, 0x80, 0x4b, 0xd4, 0x6d, 0x33, 0xa5, 0xb1, 0x52, 0x4f, 0x2a, 0xd2, 0x1c, 0xab, 0x29, 0xdd, 0x29, 0x3a, 0x9a, 0x76, 0xdf, 0xdd, 0xa6, 0xb2, 0x4a, 0x7b, 0x69, 0xce, 0x06, 0x54, 0xf6, 0x21, 0x60, 0x92, 0x9b, 0x4f, 0xb8, 0x21, 0x67, 0xc0, 0x2a, 0xc1, 0xea, 0x50, 0x6d, 0x5a, 0x3c, 0x48, 0xfa, 0x8f, 0x41, 0x8e, 0x71, 0x95, 0x2a, 0x18, 0x39, 0x46, 0x3f, 0xa6, 0x67, 0x71, 0xdc, 0xb1, 0xe2, 0x75, 0xba, 0x9e, 0xc4, 0x0e, 0x70, 0x38, 0x03, 0x6e, 0x3a, 0x5d, 0x50, 0x90, 0xf8, 0xf7, 0x3f, 0xc9, 0x7a, 0x2f, 0xa9, 0xa0, 0xfa, 0xdd, 0x4f, 0xdf, 0xea, 0x42, 0xbf, 0xea, 0xf1, 0xf9, 0x7c, 0x50, 0x30, 0x2b, 0x59, 0xa0, 0xc9, 0x03, 0x26, 0x7e, 0xa2, 0x61, 0x8e, 0xf5, 0x66, 0xd3, 0x40, 0x0f, 0xcd, 0xc1, 0x4d, 0xa3, 0x1e, 0xe7, 0xd1, 0x6f, 0xf2, 0x08, 0xd6, 0x66, 0x3a, 0xe1, 0x75, 0x4b, 0x83, 0x5d, 0x3e, 0x7f, 0x79, 0x07, 0xdb, 0x18, 0xaa, 0xc4, 0xef, 0x32, 0x8d, 0xc2, 0x44, 0x8a, 0xc3, 0xac, 0x26, 0x49, 0x9c, 0x20, 0x0a, 0x1d, 0xdd, 0x62, 0x74, 0x8e, 0xc1, 0x52, 0x17, 0x90, 0x3d, 0x9b, 0x3d, 0x54, 0x88, 0x2e, 0x69, 0x64, 0xdb, 0xef, 0x3b, 0xef, 0x76, 0xad, 0x95, 0x61, 0xe3, 0x58, 0xfc, 0x37, 0x7e, 0x6e, 0x41, 0x12, 0x35, 0xb7, 0x60, 0x0a, 0x8d, 0x32, 0xa8, 0x44, 0xe5, 0x4f, 0x1c, 0xc7, 0xff, 0x5e, 0x1a, 0x8b, 0xbc, 0x48, 0x3a, 0xd3, 0x27, 0x7d, 0x79, 0xbd, 0xb5, 0x2d, 0x97, 0x18, 0xcc, 0xbb, 0xbd, 0x75, 0x81, 0x6f, 0x63, 0x81, 0xa6, 0x6b, 0x71, 0x92, 0x04, 0xe0, 0xa4, 0x7f, 0xe5, 0x81, 0x34, 0xb5, 0xd6, 0x38, 0xb4, 0x87, 0xaa, 0x18, 0x39, 0xc6, 0xc2, 0x94, 0xbe, 0x92, 0x8c, 0xee, 0xc7, 0x6f, 0x4a, 0xf2, 0x45, 0x9c, 0x15, 0xe3, 0xba, 0xa0, 0x21, 0xb6, 0x9d, 0x25, 0x42, 0x7e, 0x00, 0x09, 0xaf, 0x28, 0x70, 0xb3, 0x07, 0x68, 0x1d, 0xa3, 0x91, 0xf3, 0x3b, 0x4d, 0xc8, 0xef, 0xa7, 0x28, 0x17, 0xa7, 0xce, 0x02, 0xe1, 0x84, 0xcb, 0x96, 0xc4, 0x39, 0xcf, 0x60, 0x1f, 0x3d, 0xc6, 0xb0, 0xd1, 0x7e, 0x37, 0xfe, 0x44, 0x54, 0x6c, 0x7d, 0xab, 0xb3, 0xd4, 0xf2, 0x87, 0xa6, 0xa5, 0xc7, 0x70, 0xf8, 0xc5, 0x5b, 0x12, 0x34, 0xeb, 0x9d, 0x76, 0xd1, 0x02, 0xd9, 0x83, 0xa6, 0xce, 0xd2, 0xc4, 0xa4, 0xd1, 0x10, 0x6b, 0xc3, 0x70, 0x7b, 0x96, 0x3d, 0x52, 0x29, 0xd2, 0xfb, 0x09, 0x75, 0xdd, 0x4c, 0xf4, 0x51, 0xb1, 0xdd, 0x63, 0xdd, 0xbd, 0xe6, 0xfd, 0x38, 0x76, 0xa1, 0x5f, 0x95, 0x0e, 0x00, 0x06, 0x92, 0x83, 0x9f, 0x6f, 0xc6, 0xdc, 0xf8, 0x7c, 0x99, 0xb0, 0xd6, 0x1a, 0x59, 0xe7, 0x0c, 0x21, 0x8a, 0xc4, 0x66, 0x7c, 0x7d, 0x24, 0xe0, 0x89, 0x24, 0x00, 0x16, 0xc2, 0x24, 0x39, 0xfc, 0x9e, 0x2c, 0x95, 0xcf, 0xb2, 0x85, 0x04, 0x4b, 0x1c, 0xeb, 0x29, 0x1f, 0x21, 0x9c, 0x15, 0x9e, 0x15, 0xae, 0x56, 0xb7, 0x7b, 0xa5, 0x30, 0x27, 0x6e, 0x45, 0x2a, 0xed, 0x40, 0xa5, 0xcd, 0xfe, 0x60, 0x85, 0xa8, 0x3b, 0x81, 0xe1, 0x97, 0xa0, 0xf8, 0xc7, 0x45, 0xbe, 0x66, 0x65, 0xf0, 0x6b, 0x98, 0x66, 0x6c, 0xb8, 0xab, 0x7f, 0x6b, 0x23, 0x74, 0x44, 0xfb, 0x0e, 0x1f, 0x41, 0x50, 0x70, 0x15, 0x46, 0xc4, 0xcb, 0x24, 0x02, 0x1c, 0x5e, 0xda, 0xd3, 0x0d, 0x9b, 0x31, 0xdd, 0xff, 0xdb, 0x72, 0x5a, 0x10, 0x51, 0x53, 0x30, 0x5c, 0x3c, 0x62, 0xc9, 0x7c, 0x61, 0xa7, 0x1f, 0x4c, 0xb9, 0x85, 0x16, 0xf1, 0x67, 0xe2, 0x0f, 0x1b, 0xec, 0x88, 0xba, 0x88, 0x9e, 0xca, 0x2b, 0xca, 0x57, 0x6a, 0x31, 0x49, 0x6a, 0xba, 0xe3, 0x8b, 0xdb, 0x02, 0x7b, 0xb3, 0xcf, 0x22, 0x68, 0x48, 0x41, 0x78, 0x9e, 0x38, 0xf7, 0x04, 0x31, 0x1d, 0xb4, 0xca, 0x22, 0xbe, 0xb0, 0x78, 0x79, 0xd9, 0x45, 0x49, 0x93, 0x20, 0xeb, 0x29, 0xbe, 0x81, 0x66, 0x1a, 0x03, 0xaa, 0x3e, 0xd6, 0x43, 0xcd, 0x70, 0xb6, 0x86, 0xa0, 0x63, 0xd2, 0x8f, 0xa9, 0x1d, 0x6a, 0xb4, 0xb8, 0xb7, 0x85, 0xec, 0xb5, 0x0e, 0xd7, 0x2a, 0x9b, 0xbc, 0xe8, 0xe9, 0xc5, 0x47, 0x73, 0x08, 0x69, 0x97, 0x0c, 0xd9, 0x62, 0xae, 0x06, 0x75, 0x32, 0x93, 0x94, 0x52, 0x47, 0x8f, 0x2e, 0x17, 0x7d, 0x9c, 0x37, 0xae, 0xe5, 0x1b, 0xdc, 0x9b, 0xc5, 0xc5, 0x3f, 0x8d, 0xdf, 0xe4, 0xd5, 0x33, 0xf6, 0xc3, 0x0c, 0x51, 0x8f, 0x63, 0x32, 0x13, 0xf5, 0x6f, 0x92, 0xa1, 0x7f, 0x72, 0xe0, 0xf3, 0x15, 0x48, 0xd7, 0xe7, 0xf1, 0xd3, 0x20, 0x91, 0xa3, 0xef, 0x76, 0xd2, 0x58, 0xa7, 0x08, 0x2c, 0x5b, 0xa9, 0x1e, 0xd4, 0xdc, 0xf7, 0x00, 0x09, 0xf1, 0xe0, 0x14, 0xa5, 0xda, 0x2f, 0x46, 0xf2, 0x89, 0xa2, 0xac, 0xbe, 0x62, 0x9d, 0x6a, 0xb2, 0x3f, 0x20, 0xd4, 0xdf, 0xb7, 0xf7, 0xd3, 0x9a, 0xa0, 0x30, 0x8a, 0x8a, 0xd2, 0xd2, 0x39, 0xff, 0x2e, 0xcc, 0x61, 0x85, 0xdf, 0x2c, 0x29, 0xba, 0xe0, 0x91, 0x00, 0x5c, 0xbe, 0xe3, 0x84, 0xa6, 0xa0, 0x41, 0xa2, 0xdd, 0x84, 0x3b, 0xff, 0x26, 0xcb, 0x42, 0x97, 0x9a, 0xf8, 0x5c, 0xa5, 0x9c, 0xb5, 0x1d, 0xc2, 0x6a, 0x17, 0xd2, 0x50, 0xf3, 0x22, 0xff, 0x19, 0xe9, 0x90, 0x0c, 0x34, 0x16, 0xce, 0x3b, 0x29, 0xf3, 0x48, 0xdd, 0x54, 0x77, 0xe6, 0xc6, 0x8f, 0x2d, 0xd6, 0xfe, 0x0b, 0x89, 0x8d, 0xb9, 0x7f, 0x7c, 0x08, 0x89, 0x85, 0x46, 0x58, 0xd3, 0x40, 0x8c, 0x5d, 0x80, 0x43, 0xaa, 0xd2, 0xf4, 0xae, 0x4a, 0x89, 0x44, 0x9a, 0x36, 0xf8, 0xa3, 0xb8, 0x6a, 0xf5, 0x1e, 0x34, 0x6e, 0xbe, 0x8a, 0xe0, 0xe2, 0x3c, 0xba, 0x8e, 0x5a, 0x89, 0xf5, 0xbd, 0x6d, 0xaf, 0xa6, 0x79, 0x09, 0xb3, 0x56, 0x7c, 0x09, 0xd2, 0xd8, 0x99, 0x0a, 0x0a, 0xc3, 0x5b, 0x7a, 0xdc, 0x26, 0xe9, 0xf1, 0x51, 0x76, 0x2c, 0xc5, 0x3b, 0xcb, 0x34, 0xd9, 0xbd, 0x4c, 0xd8, 0xb5, 0x0d, 0xe8, 0x9d, 0xdc, 0x79, 0x48, 0xda, 0x59, 0xa8, 0x01, 0x19, 0x9c, 0x23, 0x0d, 0xbf, 0x84, 0x13, 0x7c, 0xf0, 0xbd, 0x4d, 0x67, 0xad, 0x4c, 0x8b, 0x26, 0x3f, 0x68, 0xfc, 0xc2, 0xd9, 0x8c, 0x00, 0xad, 0x79, 0xca, 0x2c, 0xb1, 0x0f, 0x62, 0x95, 0x27, 0xe1, 0x93, 0x4b, 0x69, 0x2e, 0xb1, 0x23, 0x8a, 0x11, 0x78, 0xba, 0x44, 0xa9, 0xa0, 0xb6, 0x31, 0x77, 0xb1, 0x4f, 0x3e, 0x07, 0x19, 0x0f, 0x5e, 0xd3, 0x7c, 0xd5, 0x7b, 0x64, 0x4b, 0x20, 0xb2, 0xba, 0x98, 0x8a, 0xbf, 0xee, 0x29, 0x93, 0xb6, 0x16, 0xcb, 0xa0, 0xf5, 0x69, 0xe8, 0x44, 0x56, 0xa4, 0x5c, 0xbd, 0xa9, 0xac, 0x85, 0xc2, 0x61, 0x74, 0x99, 0x7c, 0x8d, 0x21, 0x3d, 0xd2, 0x0a, 0x6c, 0x53, 0xe9, 0xf7, 0x48, 0x13, 0xeb, 0x6a, 0xc5, 0x5d, 0x08, 0x61, 0x35, 0x4d, 0xbb, 0xfc, 0x8d, 0x11, 0x4f, 0xe9, 0x0e, 0xf7, 0xa1, 0x1f, 0x24, 0xca, 0x27, 0xcf, 0x8e, 0x5f, 0x31, 0x97, 0xbf, 0x6b, 0x6f, 0xfa, 0x84, 0x97, 0xb4, 0x0d, 0xe8, 0xd7, 0xf9, 0x72, 0x55, 0xf7, 0xa5, 0x8a, 0xfb, 0x77, 0x0c, 0xe7, 0x75, 0x98, 0x35, 0x00, 0xaa, 0xb7, 0xe0, 0x29, 0xf2, 0xda, 0xc7, 0xc2, 0x7b, 0x89, 0x25, 0xae, 0xea, 0xdf, 0x75, 0x07, 0x45, 0xe0, 0x7c, 0x0f, 0x10, 0x0d, 0x89, 0x6a, 0xb6, 0x36, 0xfc, 0x8b, 0x2b, 0x90, 0x05, 0x6d, 0xd0, 0x07, 0xae, 0x83, 0x97, 0xd5, 0x1c, 0xf1, 0x67, 0x54, 0x11, 0xfc, 0xc2, 0x10, 0xb6, 0xbf, 0xa5, 0x21, 0x98, 0x20, 0xaf, 0xb8, 0xf0, 0x03, 0x86, 0xf7, 0x27, 0xbe, 0x77, 0x06, 0x99, 0xcc, 0x5c, 0x63, 0x9a, 0xc5, 0xc3, 0x79, 0xb6, 0x8d, 0x4c, 0x75, 0x3d, 0xcc, 0x53, 0x55, 0x00, 0x9f, 0xcf, 0x41, 0x55, 0x8e, 0x7a, 0x1f, 0x61, 0xbd, 0x33, 0x62, 0x96, 0x66, 0xa0, 0x22, 0x7a, 0x86, 0x17, 0x72, 0xaa, 0xd7, 0xbf, 0xee, 0x1f, 0xff, 0xf2, 0x93, 0xb1, 0x07, 0xe6, 0xd4, 0xd9, 0x0e, 0x8d, 0xe9, 0xbb, 0x3f, 0xb9, 0x6b, 0x64, 0x00, 0x84, 0x1e, 0x50, 0x6c, 0xef, 0x0e, 0x2f, 0x04, 0xc9, 0xdd, 0xe8, 0xa1, 0xd3, 0x5b, 0xdf, 0xae, 0x21, 0x57, 0x74, 0x93, 0xc3, 0xb5, 0xcc, 0x74, 0xa5, 0xc1, 0xd3, 0x1c, 0xb4, 0xc3, 0x81, 0x34, 0x42, 0xd4, 0x5d, 0xb9, 0xac, 0xef, 0x40, 0xad, 0x3a, 0x4b, 0x5c, 0x0c, 0x46, 0xe8, 0x7c, 0x01, 0xa1, 0x68, 0x8d, 0x5a, 0x32, 0x21, 0x5e, 0x3a, 0xe0, 0x70, 0xa4, 0x0d, 0xb3, 0x50, 0x41, 0xc1, 0x35, 0x2b, 0xc6, 0x34, 0x1f, 0xf0, 0x36, 0xe8, 0x31, 0x65, 0x0d, 0xfe, 0x62, 0xbf, 0x80, 0x62, 0x39, 0x70, 0x07, 0x43, 0x7b, 0x40, 0x19, 0xc6, 0x06, 0x9f, 0x36, 0xfb, 0xfd, 0x39, 0x2b, 0x10, 0x25, 0xcc, 0x92, 0xc4, 0x8f, 0x36, 0x98, 0x1f, 0x78, 0xd3, 0x03, 0x60, 0x6d, 0x05, 0x73, 0x38, 0xb3, 0x14, 0xe7, 0x35, 0xe5, 0x39, 0x84, 0x81, 0xdf, 0xf5, 0x92, 0xcc, 0xdb, 0xa7, 0xc8, 0x87, 0xda, 0x5e, 0xc9, 0x53, 0x46, 0xec, 0xee, 0xb9, 0xd5, 0x3c, 0x46, 0x1b, 0xb0, 0xe5, 0xdb, 0xea, 0xd5, 0xfe, 0x37, 0x1a, 0xb9, 0x35, 0x27, 0xd3, 0x32, 0x1b, 0xbf, 0x6a, 0x95, 0xc2, 0x9e, 0x8f, 0x1b, 0x8a, 0x74, 0xc8, 0x8a, 0x38, 0xc1, 0x1e, 0x11, 0x48, 0xdf, 0x15, 0x73, 0x85, 0x42, 0xe2, 0x68, 0xd6, 0xff, 0xd9, 0x40, 0x5b, 0x8b, 0x25, 0xc9, 0xb8, 0xc5, 0xbb, 0x73, 0xb1, 0x37, 0x91, 0xb2, 0xf8, 0x99, 0x0a, 0xa4, 0x42, 0x97, 0xb5, 0xf4, 0xa0, 0xd5, 0x38, 0xfe, 0x0d, 0x2f, 0x87, 0x33, 0x43, 0x45, 0x5a, 0xbf, 0xd4, 0x37, 0xdd, 0x6a, 0x75, 0xad, 0xa9, 0xbc, 0x9d, 0x1b, 0xf3, 0x65, 0x4f, 0x43, 0x03, 0xdc, 0x33, 0xfb, 0xe8, 0x45, 0xec, 0x30, 0x6b, 0x98, 0xa6, 0x2b, 0x41, 0x00, 0xee, 0x13, 0x85, 0x81, 0xc7, 0xb3, 0x65, 0xde, 0xfa, 0x7e, 0x1b, 0xba, 0xad, 0xd0, 0x1f, 0xfd, 0x37, 0x77, 0x9a, 0x79, 0x33, 0x72, 0x1e, 0xce, 0xd3, 0xf8, 0x95, 0x8a, 0x78, 0xbd, 0x78, 0x95, 0x7f, 0x70, 0x42, 0xcd, 0x5d, 0x88, 0x23, 0xed, 0xee, 0x40, 0xf8, 0xb3, 0x0a, 0xe0, 0x7b, 0x42, 0x5a, 0x3f, 0xb7, 0xc5, 0x69, 0x86, 0xc0, 0x55, 0xfe, 0x36, 0xa0, 0x1d, 0xaa, 0x6d, 0x94, 0xbb, 0x9d, 0x65, 0x79, 0xea, 0xbd, 0x3d, 0x81, 0x5e, 0xfa, 0xfc, 0x2a, 0xf0, 0xdb, 0xd3, 0x71, 0xfb, 0x5d, 0xa2, 0x42, 0x06, 0xfe, 0xbe, 0x34, 0xa3, 0x15, 0xf2, 0x73, 0x96, 0x64, 0xc3, 0xfd, 0x3a, 0xf0, 0xf8, 0x12, 0x21, 0x11, 0x5a, 0xe5, 0xfb, 0xc5, 0xb9, 0x98, 0xb9, 0x49, 0x2f, 0x67, 0xf2, 0xeb, 0xa9, 0x24, 0x85, 0x1a, 0xa2, 0xe3, 0x80, 0xbf, 0x32, 0xf6, 0x40, 0xd0, 0x48, 0x1c, 0xda, 0x21, 0x33, 0xf5, 0xba, 0x7e, 0x68, 0xb9, 0x8a, 0xf8, 0x7f, 0x2a, 0x56, 0x7c, 0x7e, 0xc7, 0xed, 0xaa, 0x5a, 0x43, 0x8a, 0xe3, 0xbb, 0x35, 0xb3, 0xa4, 0x00, 0x11, 0x62, 0x13, 0x83, 0x57, 0x63, 0xd8, 0x1e, 0x0a, 0xfd, 0x2e, 0xee, 0x64, 0xd4, 0x3a, 0x56, 0xc8, 0x0e, 0x9b, 0x47, 0xf8, 0xb5, 0x42, 0xbf, 0x88, 0x5c, 0x84, 0x90, 0x93, 0x06, 0x6d, 0x63, 0xac, 0x43, 0x58, 0xfc, 0x17, 0x9c, 0xbc, 0xc0, 0x3a, 0x31, 0x49, 0x74, 0x4e, 0xa1, 0x34, 0x47, 0x5a, 0x2a, 0xcf, 0x13, 0x62, 0x12, 0x5c, 0xe0, 0xdb, 0x45, 0x23, 0xaa, 0x63, 0x3f, 0xc2, 0x64, 0xaf, 0x2c, 0xc5, 0x3c, 0xc5, 0x4e, 0x76, 0x21, 0x6b, 0xa0, 0xf6, 0x82, 0xdf, 0xb9, 0x8d, 0x59, 0xc8, 0xf2, 0x3f, 0x69, 0x6d, 0xcb, 0xa0, 0xc3, 0x25, 0x8b, 0xe9, 0x8f, 0x0e, 0x27, 0x4a, 0x09, 0x02, 0x65, 0x82, 0xca, 0xc7, 0x41, 0xae, 0x49, 0x86, 0x90, 0x5e, 0xa1, 0x7f, 0xe3, 0xee, 0x95, 0xfa, 0xae, 0x14, 0xd1, 0x81, 0xaa, 0xb5, 0x72, 0x4c, 0x77, 0xfd, 0xc9, 0xfd, 0x86, 0xae, 0x5c, 0x8e, 0x36, 0xb8, 0x2e, 0x87, 0x3d, 0x0b, 0x41, 0x74, 0x4a, 0xa9, 0x58, 0x96, 0xe9, 0xff, 0x01, 0xd9, 0xa6, 0x75, 0xd3, 0x06, 0x75, 0x44, 0xf5, 0x3a, 0x51, 0x87, 0xe0, 0x97, 0x24, 0x96, 0x65, 0x39, 0xe7, 0x8f, 0xf1, 0x6b, 0x0a, 0x35, 0x10, 0x1b, 0x16, 0xfe, 0x30, 0x8c, 0x91, 0x67, 0xa8, 0x4b, 0x22, 0x8b, 0xf8, 0x64, 0xf5, 0xf4, 0x52, 0xd5, 0x61, 0xb1, 0x5a, 0x43, 0xc8, 0xa8, 0x2b, 0xec, 0xbf, 0x2e, 0x9a, 0xdd, 0x6f, 0xd5, 0xbe, 0x65, 0x3b, 0x85, 0xb0, 0xc9, 0xa4, 0xcf, 0x8f, 0x39, 0x69, 0x7d, 0xc7, 0x03, 0xf2, 0x6e, 0x93, 0x07, 0xee, 0xa1, 0xc1, 0x6b, 0x3c, 0x8f, 0xb6, 0x90, 0x07, 0xbe, 0xb1, 0x44, 0x36, 0x93, 0x54, 0x39, 0x03, 0x68, 0x60, 0xb5, 0xe9, 0xde, 0xc0, 0x8c, 0xc4, 0x74, 0xc9, 0x4c, 0x34, 0x59, 0xc0, 0xb7, 0x42, 0x7f, 0x9c, 0x76, 0x46, 0xf1, 0x0e, 0x0b, 0x08, 0x66, 0xbf, 0x08, 0x25, 0x16, 0xd9, 0x7e, 0xb4, 0xcc, 0xc8, 0xb9, 0x2a, 0x3d, 0x42, 0x2a, 0x7b, 0x98, 0x84, 0xa5, 0x82, 0x5e, 0xdf, 0xcd, 0xa3, 0x74, 0x74, 0xcc, 0xaf, 0x77, 0x3c, 0x47, 0x07, 0x4f, 0x4b, 0x90, 0x05, 0x07, 0x55, 0x1e, 0x97, 0xdb, 0x71, 0x3b, 0x2d, 0x93, 0x1d, 0xfd, 0xd6, 0x10, 0x82, 0x77, 0xa5, 0x25, 0xfa, 0x30, 0x5a, 0xa8, 0xd0, 0xd5, 0x3e, 0xc8, 0x47, 0x2a, 0x4f, 0xa0, 0xdd, 0x46, 0x9d, 0x0d, 0xd0, 0x00, 0xf4, 0xbd, 0xe2, 0xa5, 0xbb, 0x89, 0x59, 0xec, 0x1c, 0x05, 0x4b, 0x2b, 0x66, 0x55, 0x18, 0xca, 0xaf, 0x42, 0x38, 0xf8, 0xbd, 0x8d, 0x37, 0x9e, 0x27, 0x82, 0xfd, 0x91, 0xb7, 0xd1, 0x53, 0x0c, 0x13, 0x9a, 0xa3, 0x5d, 0x9c, 0xc7, 0xff, 0xde, 0x97, 0x9e, 0x65, 0x27, 0x8b, 0x96, 0x42, 0x82, 0xe9, 0x6a, 0x34, 0xa0, 0xf2, 0x6d, 0x14, 0x8a, 0xd6, 0x1d, 0x34, 0xd9, 0x19, 0xfa, 0xe5, 0x2a, 0x3b, 0x99, 0x3d, 0xcd, 0x98, 0xf4, 0x17, 0xbd, 0x8d, 0x04, 0x5a, 0xd5, 0xdc, 0x92, 0x7f, 0x40, 0x52, 0x4a, 0x4d, 0x32, 0xa7, 0x11, 0xe7, 0xd5, 0xa5, 0x98, 0x09, 0x87, 0x8c, 0x31, 0x8f, 0x42, 0xb6, 0xe2, 0x37, 0x5b, 0x77, 0xb8, 0xa7, 0x70, 0x47, 0x5e, 0xb2, 0x9c, 0x23, 0xee, 0xd7, 0xec, 0x30, 0x07, 0x0a, 0x17, 0xa2, 0x20, 0xb8, 0x69, 0xdc, 0x1c, 0x05, 0x01, 0xd8, 0x1e, 0x58, 0x3c, 0xca, 0x9e, 0x19, 0x71, 0x00, 0xbd, 0xb9, 0xdf, 0x0d, 0xd5, 0xf3, 0xe3, 0x26, 0x55, 0x52, 0x6f, 0xcc, 0xcc, 0xf4, 0xb7, 0xac, 0x43, 0x8d, 0x2d, 0xc3, 0xd0, 0xae, 0xb0, 0xc5, 0x68, 0x48, 0x00, 0xc0, 0xf5, 0x6c, 0x76, 0xfc, 0xa8, 0x54, 0xf2, 0x27, 0x91, 0xa7, 0x14, 0xae, 0x6d, 0xf9, 0xaf, 0x6e, 0xbf, 0x91, 0x7a, 0x8c, 0x22, 0x70, 0x09, 0xa1, 0xdd, 0x8f, 0xfc, 0x1b, 0xb8, 0x67, 0x77, 0xe0, 0x0e, 0xb6, 0xd2, 0x34, 0x24, 0x81, 0x91, 0xdc, 0xb9, 0x55, 0x96, 0x83, 0xde, 0xd3, 0x95, 0x5e, 0x08, 0x6c, 0xc9, 0x0c, 0x64, 0x68, 0xe5, 0xc0, 0x6a, 0x2d, 0x4e, 0xa1, 0xb5, 0xbe, 0x87, 0x71, 0x12, 0x82, 0xec, 0x6d, 0xd7, 0x47, 0xa4, 0x75, 0x76, 0x86, 0xd1, 0x6d, 0x51, 0xe8, 0x09, 0xe3, 0xd0, 0x0a, 0x0a, 0xf2, 0xb1, 0x7d, 0xa9, 0x66, 0xa0, 0x12, 0x0c, 0x20, 0x08, 0x54, 0x19, 0xbd, 0x28, 0x55, 0x2e, 0x72, 0x69, 0xae, 0x13, 0x3a, 0xef, 0xc1, 0x2d, 0x34, 0x6e, 0x41, 0xf4, 0x46, 0x3f, 0xf5, 0xa7, 0x07, 0xb3, 0xb8, 0x3e, 0xdc, 0xa7, 0xc5, 0xa0, 0x61, 0x58, 0x31, 0x16, 0x0a, 0x79, 0xb9, 0xff, 0x0a, 0x83, 0xbe, 0xc6, 0x73, 0x4d, 0x8e, 0x12, 0x9f, 0xdc, 0xe5, 0x3c, 0xd0, 0x7c, 0xb4, 0x06, 0x13, 0x0f, 0x20, 0x8a, 0x6a, 0xa6, 0xce, 0x70, 0x29, 0x4e, 0x5e, 0x64, 0xa1, 0x2d, 0x35, 0xc7, 0xfc, 0xcd, 0x80, 0xa5, 0x68, 0xb7, 0x75, 0xe8, 0x78, 0x44, 0xdc, 0xcb, 0xc6, 0xb0, 0xcf, 0x91, 0xde, 0x70, 0xbe, 0x76, 0x57, 0xc5, 0xb6, 0xe6, 0x43, 0x92, 0xe2, 0xed, 0xca ],
- const [ 0x2c, 0x9b, 0xdc, 0x9d, 0x3e, 0x5c, 0xf0, 0x9a, 0xdd, 0xfc, 0xd9, 0xc3, 0xf2, 0x4f, 0x6b, 0xb1, 0x82, 0xd7, 0x6c, 0x1d, 0x2f, 0x3b, 0x3e, 0xf5, 0x02, 0xf4, 0xbd, 0xae, 0x67, 0x4a, 0x6b, 0xdd, 0x79, 0x7f, 0xcb, 0x01, 0x80, 0x4a, 0x0a, 0xa3, 0xb8, 0x87, 0xe4, 0xa2, 0x55, 0x2c, 0xc6, 0xc8, 0xc3, 0x7f, 0x30, 0xa0, 0x32, 0x86, 0x5e, 0x8c, 0x52, 0xbf, 0x27, 0x12, 0x5b, 0x12, 0x25, 0x77, 0x51, 0x04, 0x16, 0x8f, 0x86, 0x2d, 0x82, 0xd3, 0x60, 0xec, 0x9f, 0xb4, 0x5c, 0x59, 0x71, 0x2f, 0x53, 0x7b, 0x35, 0xa2, 0xfd, 0xbc, 0x00, 0xde, 0xb3, 0x99, 0xa4, 0x7d, 0x79, 0x9e, 0xd3, 0x76, 0x3b, 0x92, 0x87, 0xee, 0x57, 0xef, 0xa0, 0x51, 0x5c, 0x95, 0xcf, 0xa2, 0x11, 0xbe, 0xb4, 0x0f, 0xba, 0x35, 0x43, 0xc9, 0x96, 0xc3, 0x6c, 0x12, 0xac, 0xea, 0xfb, 0x98, 0xc8, 0xd6, 0xbd, 0x01, 0xc0, 0x91, 0xe4, 0xc7, 0xfb, 0x76, 0xac, 0x46, 0x34, 0xe8, 0x3f, 0x13, 0x7c, 0x44, 0xd6, 0x90, 0x7e, 0x13, 0x22, 0xbd, 0x07, 0x85, 0xea, 0x51, 0xc6, 0x1b, 0xf5, 0x0a, 0x50, 0xa3, 0x2a, 0x41, 0x66, 0x69, 0xf6, 0xc1, 0x7b, 0xac, 0xee, 0xd9, 0x71, 0x4f, 0xb6, 0xb0, 0xa4, 0xd1, 0x21, 0xd9, 0x29, 0x7f, 0x99, 0x27, 0x58, 0xe8, 0xc2, 0xc3, 0x87, 0x92, 0x5a, 0x7b, 0x19, 0xeb, 0x64, 0x5d, 0xb8, 0x82, 0x85, 0x85, 0xde, 0x77, 0xae, 0x33, 0x9a, 0x31, 0xfb, 0x21, 0x91, 0x4e, 0xdb, 0x13, 0x43, 0xe0, 0x72, 0xaf, 0x8f, 0xd6, 0x3b, 0x8f, 0x79, 0xb8, 0xf2, 0x95, 0x2c, 0x98, 0xb1, 0x7e, 0x3b, 0x45, 0x59, 0xba, 0x2c, 0xc1, 0x33, 0x7b, 0x37, 0xf5, 0xd7, 0x0d, 0x4b, 0xa4, 0x4d, 0x65, 0x52, 0x9e, 0x73, 0xfc, 0xb6, 0x36, 0x9e, 0xde, 0x24, 0xf5, 0x84, 0xfd, 0x90, 0x90, 0x5a, 0xcc, 0x79, 0x18, 0x39, 0x09, 0x6e, 0x71, 0xc6, 0xda, 0xd1, 0x05, 0x12, 0x1c, 0xdb, 0xb9, 0xbf, 0xf8, 0xe0, 0x21, 0x65, 0xb7, 0xd4, 0xef, 0x33, 0xd7, 0x0f, 0xb2, 0xda, 0x5e, 0x4d, 0xbd, 0xa6, 0x6e, 0xf9, 0x64, 0xee, 0x1a, 0xab, 0x6f, 0xaf, 0x78, 0xef, 0xc8, 0x74, 0xf7, 0x48, 0x77, 0x79, 0xf3, 0x74, 0xd0, 0x0f, 0x87, 0xf2, 0xeb, 0x42, 0xa3, 0xc2, 0x55, 0xba, 0x5e, 0x6c, 0x05, 0xdf, 0x8d, 0x43, 0x92, 0x41, 0x94, 0xeb, 0xa3, 0x36, 0x7c, 0x19, 0xa6, 0xc5, 0x46, 0x9a, 0xc5, 0xc2, 0x7f, 0x97, 0x15, 0x3b, 0x15, 0x17, 0x11, 0x13, 0x69, 0xc5, 0x48, 0xed, 0xa5, 0xf4, 0x52, 0x4b, 0x50, 0xe0, 0x08, 0xf7, 0x20, 0x36, 0xf5, 0xa3, 0x0f, 0xd7, 0x07, 0xcc, 0xb0, 0xd9, 0x8a, 0xe4, 0xc4, 0xcf, 0x57, 0xaf, 0x09, 0x4b, 0x49, 0xee, 0x52, 0xa1, 0xf1, 0x3b, 0xdc, 0xed, 0x8b, 0x34, 0xe0, 0x57, 0x30, 0xdb, 0x65, 0x95, 0x4d, 0x3d, 0x58, 0xb2, 0x53, 0x52, 0xde, 0x0e, 0xb0, 0x25, 0xe9, 0xa7, 0xff, 0x34, 0x0a, 0x96, 0x7b, 0x1a, 0x86, 0xdd, 0xba, 0x6b, 0xab, 0x5f, 0x98, 0xe0, 0x64, 0x30, 0x71, 0xb4, 0x0c, 0x0f, 0x93, 0x4d, 0x80, 0x31, 0xf2, 0x1f, 0x78, 0x41, 0x1e, 0xce, 0x17, 0xa4, 0x73, 0x92, 0xc0, 0x01, 0x8f, 0xe0, 0x2c, 0x01, 0x0a, 0x47, 0xb9, 0x53, 0x61, 0x98, 0x05, 0xf4, 0x32, 0x49, 0xbc, 0xad, 0xaf, 0x1b, 0xae, 0xdd, 0x4d, 0xfb, 0x25, 0x78, 0xbc, 0x26, 0x75, 0x50, 0x1c, 0x91, 0xd4, 0x93, 0x6e, 0x88, 0x6c, 0x95, 0x48, 0x95, 0xaf, 0xd0, 0xcd, 0xa3, 0xeb, 0x2a, 0xdd, 0x63, 0x1e, 0x76, 0x89, 0xef, 0x0b, 0x3c, 0xca, 0xae, 0x8d, 0xbd, 0x72, 0x77, 0x2c, 0x32, 0x62, 0xf9, 0xee, 0x55, 0xfe, 0x5a, 0x6f, 0x22, 0xde, 0x1e, 0x34, 0xdf, 0xc6, 0x4b, 0x3d, 0x5a, 0xd9, 0xca, 0xd9, 0x72, 0x09, 0x11, 0xbf, 0xd8, 0xd2, 0xff, 0x59, 0x17, 0x28, 0x07, 0x63, 0xd2, 0xae, 0x91, 0xb5, 0x4d, 0x28, 0x9d, 0x5d, 0x30, 0x33, 0xaa, 0xf1, 0x87, 0x34, 0xd6, 0x24, 0x0c, 0x8e, 0x46, 0x96, 0xa9, 0x18, 0xc8, 0xf1, 0x39, 0xce, 0xb7, 0x31, 0x8f, 0xc6, 0x20, 0x43, 0xb9, 0x66, 0x22, 0xd2, 0x85, 0xd5, 0x9b, 0x5e, 0x45, 0xaf, 0x01, 0x8e, 0xd0, 0xfd, 0x8d, 0xc7, 0xc9, 0x64, 0x9f, 0xfd, 0x24, 0x9c, 0x5e, 0xc9, 0xe5, 0x24, 0x9e, 0xbc, 0x2b, 0x34, 0x08, 0xf4, 0x6e, 0xf4, 0x74, 0xec, 0x05, 0xeb, 0x9a, 0x98, 0xeb, 0xba, 0xea, 0xb2, 0xc2, 0x0a, 0xb8, 0x4f, 0x18, 0xc3, 0x9c, 0xb5, 0xea, 0x7e, 0x19, 0x70, 0x66, 0x3e, 0x7c, 0xa3, 0xf5, 0x5a, 0x07, 0x9d, 0x79, 0xbe, 0x4f, 0xac, 0xd3, 0x54, 0xe3, 0x36, 0xa9, 0xbc, 0x2e, 0x05, 0x66, 0x43, 0x9f, 0xe3, 0x82, 0x13, 0x07, 0x67, 0x03, 0xa7, 0x42, 0x0e, 0x44, 0x82, 0x19, 0x8d, 0xf5, 0x21, 0x67, 0x66, 0x63, 0x2e, 0x7b, 0xba, 0xf9, 0xf6, 0xbe, 0x5e, 0x07, 0x1d, 0x95, 0x31, 0xc3, 0x90, 0x89, 0xac, 0x8e, 0xbc, 0xa6, 0xba, 0x78, 0xfe, 0x20, 0xca, 0x05, 0x5a, 0x3d, 0x23, 0x32, 0x6f, 0x6e, 0x78, 0xb3, 0xaa, 0xbf, 0xbd, 0x7f, 0xbb, 0x72, 0x39, 0x8e, 0x45, 0xe7, 0xdb, 0xe1, 0xda, 0xc0, 0xd1, 0xc4, 0x26, 0x42, 0x57, 0x50, 0x6a, 0xfd, 0xcd, 0x33, 0x2d, 0xaf, 0x0d, 0xb4, 0x2e, 0x66, 0xfb, 0xf1, 0x9c, 0xe5, 0x5e, 0x6b, 0x89, 0x49, 0xee, 0xc5, 0x9d, 0xec, 0xad, 0xc9, 0x07, 0x8a, 0x7b, 0xac, 0xb9, 0xa2, 0xe5, 0x93, 0xd5, 0x1f, 0x3f, 0x55, 0x62, 0x38, 0xf2, 0x83, 0x44, 0x95, 0x16, 0xa6, 0x6b, 0xb3, 0x44, 0xc7, 0x4a, 0x89, 0xa5, 0x35, 0x8b, 0x6c, 0x4f, 0x82, 0x01, 0x30, 0xd2, 0xcf, 0xde, 0x90, 0x0d, 0x49, 0x26, 0xcf, 0x47, 0xf4, 0x63, 0xa0, 0x7b, 0xa8, 0x9b, 0x44, 0xf2, 0x59, 0x7f, 0xf2, 0x17, 0x9b, 0xe5, 0x7b, 0x88, 0x64, 0x78, 0x2e, 0x69, 0x14, 0xae, 0xf9, 0xfd, 0xb4, 0xfb, 0xd2, 0x77, 0x7b, 0x45, 0x55, 0x0d, 0x97, 0x97, 0xaf, 0x4f, 0x2a, 0x19, 0xba, 0xb7, 0x92, 0x40, 0x69, 0x81, 0xed, 0x42, 0x67, 0xbc, 0xdc, 0xcd, 0xfb, 0xa2, 0x88, 0xf8, 0x2f, 0x25, 0xe3, 0x7a, 0x31, 0xca, 0x31, 0x19, 0xf9, 0xba, 0xc6, 0x66, 0x2c, 0x17, 0x11, 0xa8, 0x41, 0x8c, 0xd9, 0x16, 0xe2, 0x28, 0xc7, 0x49, 0x95, 0x6c, 0x25, 0xf0, 0x9b, 0xa2, 0xe5, 0xc6, 0x18, 0x71, 0xe5, 0xc1, 0x75, 0xaf, 0x71, 0x8c, 0x03, 0x76, 0x0a, 0x38, 0xe1, 0x7a, 0x65, 0x2f, 0x1f, 0x99, 0xb7, 0x69, 0x23, 0xb4, 0x30, 0xe2, 0x4c, 0xbe, 0xc5, 0x4b, 0xd6, 0x12, 0x33, 0xff, 0xfe, 0x0a, 0x41, 0x3a, 0x66, 0xcd, 0x45, 0x85, 0xba, 0x68, 0xe9, 0x75, 0x94, 0x21, 0x2f, 0x95, 0x9d, 0x07, 0xb3, 0xa1, 0xf6, 0xce, 0x31, 0xf5, 0xd6, 0xda, 0x46, 0x44, 0x74, 0x9a, 0x7b, 0x8d, 0x27, 0x17, 0x7f, 0x4b, 0xcb, 0xcd, 0xb4, 0xed, 0x68, 0xb9, 0xed, 0x85, 0x0e, 0xb3, 0x77, 0xc4, 0x03, 0xfe, 0x56, 0x26, 0x21, 0x1e, 0xd0, 0x6a, 0x79, 0xe9, 0x30, 0x45, 0x3c, 0xe1, 0xc4, 0x57, 0xdc, 0xc1, 0x28, 0x5e, 0x6e, 0x56, 0xc6, 0xaa, 0x53, 0x90, 0x9e, 0xd1, 0x17, 0xd9, 0x43, 0xa3, 0x99, 0xa5, 0x26, 0x60, 0x6c, 0x4b, 0x17, 0x29, 0x7e, 0x13, 0x09, 0xb5, 0xf7, 0x90, 0x16, 0x45, 0x64, 0x30, 0xc3, 0xda, 0x15, 0x11, 0x84, 0xa5, 0xc3, 0x16, 0x83, 0xbf, 0x77, 0x3b, 0x9d, 0x1a, 0xa6, 0x25, 0xad, 0xb8, 0xa1, 0xfe, 0x0e, 0x1a, 0x2d, 0x7f, 0x5b, 0xfc, 0x6d, 0x4e, 0x79, 0x3f, 0x09, 0x8b, 0xd8, 0x27, 0x89, 0xa5, 0xf5, 0xc6, 0x02, 0x73, 0x24, 0xb8, 0xf5, 0x80, 0x8c, 0x11, 0x74, 0xa6, 0x73, 0x94, 0x86, 0xde, 0xbc, 0x26, 0xcd, 0x56, 0xad, 0x82, 0x66, 0xc4, 0xf6, 0x2d, 0x11, 0xfb, 0xef, 0xad, 0x92, 0xbb, 0x22, 0xf6, 0x57, 0xce, 0x09, 0x25, 0x5a, 0x50, 0x19, 0x70, 0x49, 0x4f, 0xff, 0x5d, 0xe5, 0x94, 0x29, 0x33, 0xa8, 0xbf, 0x88, 0xae, 0xaa, 0x9a, 0x94, 0xf7, 0xc5, 0xa7, 0x91, 0xd3, 0xf7, 0xfb, 0x11, 0x1b, 0x09, 0x4f, 0xbb, 0x6c, 0x6e, 0x55, 0x4a, 0x1f, 0x6e, 0x48, 0xd9, 0x7c, 0x84, 0xc7, 0x5d, 0x2a, 0x04, 0xe3, 0x73, 0xea, 0x00, 0x77, 0x5c, 0x86, 0x6d, 0xb8, 0x45, 0x03, 0x82, 0x0c, 0xcc, 0x1e, 0x61, 0x20, 0xc1, 0xf7, 0xf9, 0x34, 0x29, 0x07, 0x2b, 0xba, 0x89, 0x57, 0x2b, 0x20, 0x61, 0xf4, 0x2a, 0xea, 0xf6, 0x9e, 0x32, 0x03, 0x54, 0xc0, 0x51, 0x55, 0x94, 0xa5, 0xf9, 0x97, 0x5b, 0xe8, 0xa7, 0x66, 0xa3, 0x2c, 0xc3, 0x98, 0xbe, 0x0e, 0xc7, 0xcd, 0x97, 0x58, 0xa4, 0x46, 0x3c, 0x77, 0x62, 0xfb, 0x99, 0x30, 0x06, 0xe7, 0x86, 0x8e, 0xb8, 0xa7, 0x05, 0x1f, 0x25, 0x43, 0xc4, 0x60, 0x23, 0x4c, 0xea, 0x75, 0x93, 0x27, 0x10, 0x1d, 0x8c, 0xa8, 0x8c, 0xe6, 0xb6, 0xe3, 0xf6, 0x9d, 0xf3, 0x3e, 0xe5, 0x09, 0x45, 0xcb, 0xfa, 0xd9, 0xec, 0xd5, 0x20, 0xda, 0xce, 0xb9, 0x11, 0x6d, 0x1c, 0xf7, 0x1d, 0x39, 0x33, 0x89, 0x27, 0x1d, 0xc0, 0x74, 0xf0, 0x68, 0x28, 0x9c, 0x98, 0x4d, 0x27, 0xdc, 0x61, 0x91, 0xb7, 0x56, 0xb7, 0x87, 0x33, 0x08, 0x6d, 0x3e, 0xbc, 0xa1, 0x4a, 0xf9, 0xdc, 0x92, 0xc4, 0xdf, 0x69, 0x67, 0x0b, 0xf4, 0xac, 0x58, 0x49, 0x48, 0xc3, 0x1b, 0x28, 0x6f, 0x44, 0xfd, 0x96, 0x30, 0x23, 0x31, 0xc5, 0x81, 0xd6, 0x68, 0x75, 0xb4, 0xb6, 0xa2, 0x75, 0xeb, 0xa9, 0x43, 0x67, 0xd1, 0xfe, 0x69, 0xc5, 0x8c, 0x98, 0x7d, 0x21, 0xed, 0x4f, 0x08, 0xb1, 0xea, 0x93, 0xc8, 0x0a, 0x4f, 0x52, 0x04, 0x2c, 0xb0, 0x1c, 0x1c, 0xbf, 0xa2, 0x86, 0x64, 0x9c, 0x2b, 0xcc, 0x32, 0x8f, 0x76, 0xba, 0x36, 0x5b, 0xcb, 0xcc, 0x0a, 0xff, 0xbf, 0x94, 0x0a, 0x38, 0xa8, 0x5c, 0x66, 0x47, 0x54, 0x0d, 0x76, 0xf4, 0xfb, 0x4f, 0x4d, 0xd3, 0x71, 0xf2, 0x90, 0xc6, 0xa0, 0x8d, 0x89, 0xc3, 0x36, 0x64, 0x77, 0xd8, 0x9b, 0x8f, 0x28, 0x6c, 0x26, 0x59, 0xca, 0xc7, 0x90, 0xe7, 0xff, 0xd5, 0xa9, 0x1a, 0x2f, 0x26, 0x49, 0xb5, 0x22, 0x3a, 0x8a, 0xc3, 0xce, 0xfc, 0x34, 0x33, 0x6d, 0x8c, 0x79, 0xc6, 0xd3, 0x41, 0xe3, 0x2b, 0xff, 0xef, 0x8a, 0x68, 0xf0, 0x65, 0x8a, 0x7b, 0xba, 0x3a, 0xb4, 0x41, 0xd8, 0xca, 0x84, 0x98, 0xc4, 0x7b, 0x53, 0xc0, 0xc5, 0x45, 0xce, 0x08, 0x08, 0x71, 0xa7, 0xa6, 0xf3, 0xa0, 0x8b, 0xe6, 0xb6, 0x10, 0x53, 0x87, 0x23, 0x1b, 0x7e, 0x61, 0xbf, 0x00, 0xdf, 0x4c, 0x19, 0xe6, 0x93, 0x3e, 0x5a, 0x1e, 0x36, 0xb3, 0x1e, 0xa9, 0x56, 0x52, 0x82, 0xfa, 0x28, 0xcd, 0x7e, 0xfc, 0x7a, 0x09, 0x76, 0x57, 0xe9, 0x7f, 0x0b, 0xf0, 0x54, 0xe2, 0x37, 0xae, 0x91, 0x01, 0x99, 0x84, 0x5e, 0xf0, 0x0d, 0xac, 0x9a, 0x62, 0x80, 0x30, 0xb5, 0x5a, 0x03, 0xaf, 0x65, 0x03, 0x1d, 0x5e, 0x9a, 0xdb, 0x66, 0x4d, 0xb5, 0x17, 0x51, 0xec, 0xf4, 0x44, 0x4a, 0xcd, 0x31, 0x2a, 0x01, 0xab, 0xcd, 0xf5, 0x05, 0xac, 0xe7, 0x97, 0x94, 0xe3, 0xd1, 0x68, 0xb2, 0x19, 0xc4, 0x0f, 0x78, 0xcd, 0xd2, 0xa6, 0xaf, 0x79, 0x1d, 0x19, 0x9d, 0x17, 0x47, 0xcf, 0x1f, 0xe4, 0x29, 0x8d, 0xf8, 0x64, 0xc8, 0x97, 0x69, 0xa6, 0x84, 0x18, 0x02, 0xc9, 0x93, 0xc3, 0xb7, 0xbf, 0xae, 0xbb, 0x36, 0x51, 0x0a, 0xb0, 0x78, 0x63, 0x8a, 0x4b, 0x96, 0x7a, 0x33, 0xcd, 0xdf, 0x7b, 0xe0, 0xf3, 0x27, 0xb6, 0x37, 0x1c, 0x61, 0x22, 0xdb, 0xad, 0x71, 0xea, 0xe3, 0xb5, 0x3b, 0x29, 0x8c, 0xcd, 0x00, 0xf2, 0x2a, 0x43, 0xea, 0x94, 0x65, 0x77, 0xe5, 0x1c, 0xa1, 0x84, 0xb1, 0x1b, 0xbe, 0x23, 0x35, 0xa9, 0x02, 0xcd, 0x17, 0xa9, 0x53, 0x20, 0x89, 0x4f, 0xaa, 0x84, 0x66, 0xe0, 0xc4, 0x0e, 0x7d, 0xb9, 0x1b, 0xa5, 0x2d, 0x93, 0x14, 0x63, 0x32, 0x05, 0x7a, 0x3d, 0xbe, 0x4a, 0x2b, 0xe7, 0xcb, 0x45, 0x11, 0xf2, 0xb0, 0xc2, 0x54, 0x38, 0xf3, 0xff, 0xce, 0x79, 0x5f, 0x6b, 0xc0, 0x46, 0x56, 0xad, 0xc3, 0x1e, 0x68, 0xe8, 0x01, 0xd8, 0x24, 0x3e, 0xa4, 0x40, 0x2d, 0x93, 0x8f, 0x05, 0x91, 0x93, 0x4c, 0xd3, 0x57, 0xf6, 0x46, 0xbc, 0x57, 0x02, 0x39, 0xdc, 0x4f, 0x52, 0xe6, 0x3d, 0x32, 0xd7, 0x0b, 0xf8, 0xc3, 0x1c, 0x92, 0x9d, 0x63, 0xce, 0x09, 0xd5, 0x27, 0x7b, 0x52, 0x46, 0x2e, 0x9a, 0x9c, 0xb7, 0x32, 0xcc, 0x92, 0x75, 0x5c, 0x61, 0xd1, 0xf5, 0x5d, 0x1e, 0xa0, 0xba, 0xba, 0x3d, 0xdb, 0x79, 0x67, 0xb6, 0x31, 0x7c, 0x98, 0xbd, 0x90, 0x44, 0xd4, 0x8c, 0xdc, 0x72, 0x4b, 0x62, 0xe7, 0xe8, 0x69, 0xcc, 0x9e, 0x2b, 0xab, 0x23, 0x80, 0x0b, 0xb2, 0x56, 0x55, 0x87, 0x96, 0xe9, 0x1c, 0xeb, 0x7c, 0x3e, 0x45, 0x3b, 0x6b, 0x14, 0x20, 0xd4, 0x5b, 0x4d, 0x96, 0x51, 0x8f, 0xf4, 0x17, 0xac, 0x25, 0x7e, 0xd3, 0xa5, 0xec, 0x50, 0x2d, 0x68, 0x75, 0x82, 0x6c, 0x6a, 0x6d, 0xe3, 0xb4, 0x94, 0x29, 0x3d, 0x36, 0xa3, 0x83, 0xda, 0xa3, 0xcf, 0xe5, 0x46, 0xe6, 0xaa, 0xa3, 0x57, 0x12, 0x4c, 0x8e, 0x6b, 0x99, 0xad, 0xc6, 0xf1, 0xc0, 0x52, 0xcf, 0x2b, 0x4f, 0x2c, 0xe7, 0x31, 0x8d, 0xbd, 0x97, 0x3a, 0x6b, 0x7c, 0x89, 0x17, 0x00, 0x7b, 0x99, 0x00, 0x35, 0x47, 0x2e, 0x93, 0xc2, 0x0f, 0xcb, 0x1a, 0x59, 0x09, 0xe1, 0x0d, 0x20, 0x12, 0xe8, 0xd8, 0x65, 0x95, 0xad, 0xdd, 0x8e, 0xad, 0xee, 0xbd, 0x4e, 0x8e, 0x24, 0xd3, 0x1f, 0x21, 0xa0, 0x02, 0xec, 0xee, 0xd9, 0xb1, 0x0d, 0x3f, 0x05, 0x13, 0x79, 0x82, 0xe6, 0xac, 0x37, 0xf0, 0xe7, 0x11, 0x16, 0x6c, 0x67, 0xef, 0x9e, 0xae, 0x55, 0x4e, 0x46, 0xa0, 0xfd, 0x17, 0xe8, 0x08, 0x21, 0xd4, 0x71, 0x68, 0x4c, 0xb8, 0xdd, 0x22, 0x63, 0xdf, 0x63, 0xe0, 0x7d, 0xd6, 0xec, 0x33, 0xf4, 0x5e, 0xca, 0x7b, 0xbd, 0x6d, 0xa7, 0x06, 0xf4, 0x76, 0xbb, 0x7c, 0xbb, 0xea, 0x43, 0x7a, 0x45, 0xff, 0x2e, 0x7d, 0x2e, 0xb0, 0x19, 0x02, 0x0e, 0x05, 0x7d, 0xeb, 0x4d, 0x94, 0x27, 0x25, 0x39, 0x48, 0xe9, 0x88, 0x55, 0x61, 0x90, 0xfe, 0xf4, 0xbc, 0x15, 0xe8, 0x07, 0x55, 0x18, 0xbd, 0x34, 0x0a, 0x89, 0xf4, 0x28, 0xa2, 0xa9, 0x25, 0x2d, 0x0d, 0x31, 0x6b, 0xff, 0xed, 0xd0, 0x0c, 0xdb, 0x56, 0xdb, 0x5c, 0xda, 0xd2, 0x41, 0xde, 0x7d, 0xa9, 0xbd, 0xad, 0x89, 0x5f, 0x4f, 0x1a, 0x15, 0x7d, 0xec, 0x97, 0xe1, 0x95, 0x75, 0xd4, 0xe9, 0x80, 0xe6, 0x27, 0x3a, 0xea, 0xd0, 0x31, 0x05, 0x11, 0x09, 0xbf, 0xf2, 0xc9, 0xa1, 0xee, 0xb6, 0xc4, 0x19, 0x93, 0xe8, 0x10, 0xd0, 0xd9, 0x10, 0xe1, 0xbe, 0x2c, 0x02, 0x91, 0x64, 0x56, 0x6a, 0xe5, 0x03, 0xe8, 0xa7, 0x92, 0x0d, 0xdc, 0xdd, 0xff, 0xd9, 0x78, 0x45, 0x4d, 0x9a, 0x76, 0xc8, 0x95, 0x92, 0x61, 0xcd, 0x70, 0x83, 0x42, 0x4f, 0xbd, 0x67, 0x7c, 0x32, 0x9e, 0x60, 0xf5, 0xd7, 0xc4, 0xf2, 0x76, 0xee, 0xed, 0x70, 0x55, 0x8b, 0xaa, 0xb4, 0x51, 0x7c, 0x66, 0x13, 0xbd, 0xdb, 0xa4, 0x91, 0xe1, 0xdf, 0x88, 0x50, 0x9d, 0xf7, 0x99, 0x4f, 0x4f, 0x1a, 0xc5, 0x51, 0xf7, 0x58, 0xa6, 0x1a, 0x99, 0xb6, 0x03, 0xe1, 0xe3, 0x38, 0x9a, 0x03, 0x10, 0x3f, 0x1c, 0xf5, 0x0c, 0x15, 0x7a, 0x7c, 0xd9, 0xc7, 0x5f, 0x20, 0x31, 0x33, 0xfd, 0xde, 0x6d, 0x61, 0x0d, 0x1d, 0xa5, 0x17, 0x11, 0xe3, 0x19, 0xa7, 0xdd, 0x49, 0xcf, 0x0c, 0x55, 0x2c, 0x7e, 0x35, 0x78, 0x26, 0xab, 0xa1, 0x9e, 0xbc, 0x12, 0x2c, 0xfd, 0xd9, 0x47, 0x29, 0x72, 0x7c, 0x9d, 0xb0, 0x7f, 0xad, 0x47, 0x39, 0x90, 0xb5, 0xbd, 0x6a, 0x82, 0x8e, 0x62, 0x2e, 0x65, 0x99, 0x63, 0x07, 0x81, 0x8f, 0xe2, 0xa5, 0x98, 0xba, 0x54, 0xb7, 0x6b, 0x65, 0x27, 0x01, 0x7f, 0x91, 0xa8, 0xaf, 0x21, 0xe9, 0x25, 0xe9, 0xa8, 0xf8, 0x4e, 0xa7, 0xfa, 0x9a, 0xe1, 0xc7, 0x52, 0xb0, 0x87, 0x5d, 0x40, 0x18, 0xf9, 0x4a, 0xf1, 0xdd, 0x66, 0x10, 0xb0, 0xaa, 0x19, 0xe4, 0xad, 0x85, 0x57, 0x05, 0xfd, 0xb9, 0x86, 0x4d, 0xe3, 0x14, 0x95, 0x05, 0x4e, 0x53, 0x97, 0xfe, 0xa2, 0xdb, 0xb1, 0xdd, 0xbb, 0xaa, 0x37, 0xb7, 0x30, 0x8c, 0x12, 0xde, 0xd4, 0x92, 0x65, 0xfa, 0x83, 0xc0, 0x70, 0x5b, 0x1b, 0x06, 0xb4, 0x8d, 0xc8, 0x72, 0x57, 0x2d, 0x85, 0xa3, 0xcb, 0xfc, 0xdf, 0x81, 0xab, 0x32, 0xfc, 0x2b, 0xe5, 0x15, 0xdd, 0x31, 0x1e, 0xc9, 0xe0, 0x04, 0x52, 0x6a, 0x89, 0xaa, 0xbb, 0x58, 0x81, 0xb6, 0xf5, 0xd2, 0xdf, 0x78, 0x5f, 0xc7, 0xa7, 0x71, 0xc4, 0xe8, 0x90, 0x09, 0x3b, 0x02, 0x0b, 0x85, 0x4b, 0x8b, 0x80, 0x33, 0x53, 0x7b, 0xdb, 0xe7, 0x29, 0x5d, 0x47, 0xab, 0x02, 0xa5, 0x39, 0xb3, 0x92, 0x44, 0xb1, 0x8f, 0x74, 0x7a, 0xbd, 0xa4, 0xcb, 0xeb, 0x3e, 0xdd, 0x2a, 0xf6, 0xee, 0x9e, 0xb1, 0x42, 0xa2, 0xfa, 0x79, 0x99, 0xcd, 0x25, 0x33, 0xfa, 0x46, 0x2c, 0x0b, 0xe9, 0x4b, 0xe3, 0xd3, 0x0a, 0xc5, 0x1f, 0x5d, 0xee, 0xcd, 0x26, 0x28, 0x2d, 0x70, 0x64, 0x3f, 0xb5, 0xaf, 0x60, 0x5f, 0x61, 0xca, 0xee, 0x58, 0xce, 0xbf, 0xa5, 0xb5, 0x6a, 0x0d, 0x93, 0x9f, 0xcd, 0xbd, 0x30, 0xff, 0x4d, 0xa3, 0x91, 0xe3, 0xcc, 0xe2, 0xde, 0x23, 0xd5, 0xae, 0x06, 0x44, 0xe8, 0x56, 0xb1, 0x9c, 0x11, 0x81, 0x77, 0xb7, 0xbf, 0xb7, 0x4f, 0xfa, 0xd4, 0x24, 0x4a, 0x86, 0xf9, 0x99, 0x81, 0x60, 0x34, 0xd4, 0x4b, 0xce, 0xbc, 0x01, 0xb4, 0x04, 0x0c, 0x81, 0x2b, 0xff, 0x36, 0xe9, 0x7b, 0xb2, 0x7a, 0x4e, 0xfd, 0x60, 0x17, 0xc0, 0x0b, 0x49, 0x61, 0x14, 0xb7, 0x88, 0x14, 0xe7, 0xbd, 0x3c, 0xe8, 0xdf, 0xb7, 0xe6, 0x65, 0x34, 0x90, 0x12, 0xf9, 0x6f, 0x3b, 0x3a, 0x48, 0x72, 0xa5, 0xe7, 0xc3, 0xb9, 0xe8, 0x19, 0x7c, 0xdf, 0xc1, 0xe9, 0x38, 0x64, 0x44, 0x6d, 0xc6, 0xad, 0xce, 0xdc, 0x90, 0x4c, 0x3c, 0xf2, 0x70, 0x82, 0x5a, 0x96, 0xc5, 0x02, 0x9e, 0xbb, 0xc5, 0xf8, 0x17, 0x84, 0x15, 0x4a, 0xa0, 0xab, 0x97, 0x1e, 0x59, 0x23, 0x83, 0x9c, 0x58, 0xfc, 0xb9, 0xf5, 0x9b, 0x88, 0x55, 0xa4, 0x41, 0xbc, 0x84, 0xf4, 0xfa, 0xd8, 0x97, 0xc2, 0xbd, 0x4b, 0x56, 0x84, 0xb9, 0xd0, 0x97, 0x8a, 0x8d, 0xde, 0x0f, 0x84, 0xbb, 0x3f, 0x67, 0x45, 0x5a, 0xfe, 0x92, 0xc6, 0x0c, 0x87, 0x5f, 0x6e, 0x30, 0x0a, 0x4a, 0x90, 0x59, 0x20, 0x98, 0x36, 0xfe, 0xb1, 0xa3, 0x1d, 0x73, 0x15, 0x72, 0x00, 0x17, 0x79, 0x8c, 0x19, 0xd0, 0x85, 0x0e, 0xe6, 0xb4, 0x3c, 0xfc, 0x29, 0x09, 0x23, 0xd5, 0x32, 0x70, 0xa5, 0x6a, 0x60, 0x5d, 0xb6, 0xef, 0xe6, 0xca, 0xb7, 0x53, 0xcb, 0x2d, 0x99, 0xcd, 0x35, 0xa7, 0x46, 0xb8, 0xe6, 0x7e, 0x3c, 0xa0, 0x07, 0xcd, 0x7b, 0x9d, 0x24, 0x7a, 0xa2, 0xdf, 0x79, 0x69, 0x55, 0x8b, 0x6c, 0xef, 0xe1, 0xc6, 0x5a, 0x8a, 0x23, 0x0e, 0x96, 0xcf, 0xa6, 0xd1, 0xaf, 0xa3, 0x0b, 0x38, 0xf2, 0xae, 0xae, 0x44, 0x30, 0x0d, 0x86, 0x1d, 0xc2, 0x47, 0x4d, 0xa7, 0xc9, 0x83, 0xe1, 0x55, 0xba, 0xf8, 0xeb, 0x42, 0x1b, 0xa4, 0xbe, 0x7e, 0x87, 0x41, 0x82, 0xa5, 0xf8, 0x75, 0x91, 0xb7, 0x46, 0x49, 0x21, 0x23, 0xea, 0xdc, 0x24, 0x25, 0x08, 0x59, 0x6c, 0x52, 0xad, 0x26, 0x13, 0x72, 0x55, 0x5e, 0x1a, 0x8d, 0xb0, 0x82, 0x50, 0x49, 0xa5, 0x6b, 0x75, 0x73, 0x98, 0x83, 0xa0, 0xdb, 0xe8, 0x35, 0xde, 0x65, 0xbc, 0xa2, 0x1c, 0x5d, 0x00, 0x96, 0x47, 0x0b, 0xaa, 0xba, 0xb1, 0x87, 0x42, 0x0b, 0xb7, 0xcf, 0xa1, 0x8a, 0xa1, 0x17, 0xf9, 0x35, 0xc9, 0x60, 0x15, 0x37, 0x00, 0x4c, 0xe2, 0x5c, 0x2d, 0x31, 0x2f, 0xc7, 0x37, 0x6c, 0xb1, 0xe7, 0x25, 0xf8, 0x4a, 0xa7, 0x84, 0x3f, 0x8a, 0xe5, 0x09, 0x2f, 0x77, 0x26, 0x78, 0x91, 0x89, 0x88, 0xc4, 0x96, 0xf9, 0xf8, 0x78, 0xb3, 0x3c, 0xa4, 0x55, 0xaf, 0xca, 0xb3, 0x3d, 0xfb, 0x23, 0x34, 0x50, 0x41, 0x14, 0x55, 0x54, 0x3f, 0x36, 0xd6, 0x5a, 0xd6, 0xb9, 0xbd, 0x9e, 0x5e, 0x5f, 0x4a, 0xb0, 0x3d, 0xcb, 0x2d, 0xd1, 0xb8, 0xfc, 0xf7, 0xa0, 0x09, 0x15, 0xcf, 0xf6, 0xb1, 0x5f, 0x66, 0x0e, 0x0f, 0x90, 0x2d, 0xe9, 0x32, 0x4e, 0xc5, 0xf0, 0xec, 0xef, 0xb6, 0xdc, 0x27, 0x83, 0x65, 0xd3, 0x7c, 0x14, 0x40, 0xd3, 0x02, 0x2c, 0x3c, 0x54, 0x64, 0x98, 0x81, 0x29, 0x37, 0x6c, 0x63, 0xa8, 0x8a, 0x47, 0x95, 0x0a, 0xbe, 0xd8, 0x99, 0x15, 0x98, 0xa1, 0x7b, 0xf8, 0x94, 0xfb, 0xbf, 0x76, 0x7c, 0x5b, 0x98, 0x46, 0x3a, 0xd3, 0x5b, 0xba, 0xeb, 0xdc, 0x32, 0xa0, 0x34, 0x52, 0x15, 0x66, 0xd9, 0xc0, 0xf6, 0x81, 0x8b, 0xde, 0x3c, 0x0e, 0x02, 0x58, 0x73, 0xba, 0x4c, 0xd1, 0x42, 0xe0, 0x65, 0x28, 0x9d, 0xf2, 0x07, 0xfa, 0x3b, 0x1a, 0xc3, 0x68, 0x4b, 0x21, 0x51, 0x1a, 0x63, 0x8f, 0x25, 0x83, 0xb9, 0x14, 0x42, 0x67, 0x95, 0x26, 0x53, 0x9b, 0x06, 0xec, 0xf8, 0x0d, 0xd5, 0x5b, 0x5e, 0x04, 0xb7, 0x9f, 0x12, 0xa8, 0xc6, 0xbc, 0x17, 0xc4, 0x32, 0x75, 0x36, 0xcb, 0x34, 0x6d, 0x95, 0x19, 0x44, 0x8c, 0x8b, 0x7c, 0x8c, 0xa4, 0xb3, 0xf3, 0x9c, 0x54, 0x3f, 0xb5, 0x5f, 0x2d, 0x8f, 0x75, 0x4e, 0x14, 0x03, 0xe5, 0xe3, 0xe7, 0x0d, 0x79, 0x51, 0x64, 0x8a, 0x6d, 0x72, 0x46, 0x52, 0x09, 0x01, 0xb0, 0x0d, 0x24, 0x09, 0xcf, 0x49, 0xe7, 0x9d, 0xbc, 0xca, 0xd3, 0xca, 0x9f, 0x21, 0x05, 0xca, 0x1a, 0x81, 0xb9, 0x7a, 0xe5, 0xcd, 0x0e, 0x0f, 0xb5, 0xf5, 0x09, 0x04, 0x63, 0x83, 0xdb, 0x56, 0x4a, 0x71, 0x67, 0xf4, 0xf1, 0x3e, 0xff, 0x71, 0xea, 0x41, 0x6e, 0xfd, 0xf9, 0x3c, 0x3c, 0x93, 0x79, 0x34, 0x2d, 0x74, 0xfc, 0x80, 0x0b, 0xd3, 0x32, 0x21, 0xa5, 0xd2, 0x0c, 0x51, 0x18, 0xad, 0x20, 0x5e, 0x4d, 0x35, 0x50, 0xb9, 0xc3, 0x81, 0xa6, 0x4a, 0x8f, 0xe0, 0x83, 0x07, 0xa1, 0x11, 0xf9, 0xc5, 0x48, 0xb7, 0x75, 0x4e, 0xf9, 0x07, 0xa1, 0xb3, 0x4c, 0xc4, 0x88, 0xe4, 0x47, 0x6d, 0xfc, 0x7d, 0xdf, 0xb5, 0x34, 0xe3, 0xbc, 0x33, 0xba, 0x90, 0x3d, 0x5b, 0x85, 0xab, 0xbc, 0xad, 0x61, 0xdc, 0x13, 0x2c, 0x98, 0x5e, 0x5e, 0x12, 0xcb, 0x56, 0x03, 0xc2, 0x21, 0x63, 0xf0, 0xfe, 0xa4, 0x76, 0x24, 0x5a, 0xe7, 0xe4, 0x71, 0xf0, 0xec, 0xb9, 0x80, 0x56, 0x46, 0x50, 0x15, 0xcd, 0x7b, 0x20, 0x94, 0xbb, 0xac, 0xd9, 0xc5, 0x5c, 0x78, 0xb0, 0xd4, 0xb4, 0x1d, 0xf6, 0x9c, 0xc8, 0xe0, 0xf0, 0x24, 0x0d, 0xb0, 0xe3, 0x6a, 0x21, 0x06, 0x6e, 0x60, 0xb9, 0x0f, 0x1c, 0x35, 0xdb, 0x0d, 0x3a, 0xd5, 0x4d, 0xfb, 0xe6, 0xb3, 0x4d, 0x6f, 0x69, 0xc6, 0x82, 0xc5, 0xc7, 0xd1, 0x33, 0x7a, 0x94, 0xe8, 0xb7, 0xd6, 0x08, 0x30, 0x2c, 0xce, 0x56, 0xe6, 0x6c, 0x28, 0x3a, 0xa3, 0x3d, 0xe0, 0xd1, 0xde, 0xc8, 0xcb, 0xae, 0xb2, 0x4d, 0x7a, 0x2a, 0xe1, 0x14, 0x61, 0xfb, 0x1a, 0xa7, 0x38, 0x09, 0x77, 0x3e, 0xa2, 0x7d, 0x4a, 0x7b, 0x0d, 0x1a, 0x19, 0x57, 0xd9, 0xd0, 0xe7, 0x5d, 0xbc, 0x8e, 0xb5, 0x16, 0x65, 0x59, 0x49, 0xc4, 0x5f, 0x9b, 0x2e, 0x52, 0x39, 0xbd, 0xfc, 0x8c, 0xe4, 0xf7, 0xda, 0x8c, 0x5c, 0x67, 0x40, 0x74, 0x8a, 0x61, 0x02, 0x63, 0x6a, 0x07, 0x8a, 0xa1, 0x69, 0x19, 0x64, 0x1d, 0x11, 0x0e, 0x01, 0x1a, 0xe7, 0x63, 0xb4, 0x25, 0x94, 0x33, 0x01, 0x4a, 0x44, 0x08, 0x17, 0x87, 0x4c, 0xf1, 0x9b, 0x81, 0x0f, 0xd4, 0xa7, 0x76, 0x22, 0x06, 0x13, 0x73, 0xae, 0x19, 0xf3, 0xc7, 0x16, 0xf5, 0x60, 0xb7, 0xda, 0x2a, 0x7c, 0x73, 0xbc, 0x85, 0xb0, 0x49, 0x21, 0xe2, 0x38, 0x19, 0xb9, 0x40, 0xe2, 0x09, 0x62, 0x1b, 0x12, 0x79, 0x4a, 0xf6, 0x0a, 0x3a, 0x54, 0x37, 0x68, 0xfa, 0xbe, 0x37, 0xf0, 0x03, 0x00, 0x9a, 0x8c, 0x26, 0xf7, 0xdc, 0x91, 0xf1, 0x42, 0x2d, 0x44, 0x29, 0xed, 0x7f, 0x9d, 0x74, 0x4c, 0xdd, 0x4b, 0x55, 0x2a, 0xfe, 0xf7, 0x5d, 0x24, 0x1a, 0xcd, 0xa0, 0x4f, 0xfc, 0x39, 0x67, 0x21, 0x59, 0xee, 0x24, 0x8e, 0x60, 0x2d, 0xab, 0x71, 0x92, 0x44, 0x9e, 0x2e, 0xd4, 0x55, 0x29, 0x95, 0xc2, 0x58, 0xf0, 0x0a, 0x47, 0x63, 0x46, 0xe3, 0x6a, 0x29, 0xa0, 0x12, 0x6b, 0xc2, 0x49, 0x04, 0x0f, 0xaa, 0x57, 0xc9, 0x38, 0x0b, 0xdd, 0x74, 0xb8, 0x3f, 0x62, 0xc5, 0x67, 0x90, 0x92, 0x05, 0x74, 0x43, 0x34, 0x32, 0xf8, 0xd6, 0x5c, 0x5c, 0xd1, 0x85, 0xe2, 0x4f, 0xad, 0x13, 0x12, 0x72, 0x65, 0xc6, 0xa5, 0xef, 0x8d, 0xb4, 0xf1, 0x14, 0x49, 0x3d, 0x5c, 0xfa, 0x61, 0xd9, 0x16, 0x64, 0x98, 0x14, 0x08, 0xe9, 0x3a, 0xd6, 0x07, 0x56, 0xf5, 0xe8, 0x4e, 0x4e, 0xe9, 0xb4, 0x2b, 0x33, 0x02, 0x4c, 0xf8, 0x4a, 0x86, 0xae, 0x4d, 0x19, 0xea, 0x47, 0x74, 0x14, 0xea, 0xb5, 0x1d, 0x79, 0xd9, 0xd1, 0x53, 0x79, 0x35, 0xed, 0xaf, 0x98, 0x7e, 0x5a, 0xcc, 0x56, 0x48, 0x2e, 0xfa, 0x0f, 0x90, 0x43, 0x37, 0x20, 0x4c, 0x83, 0x5b, 0x4b, 0x45, 0x63, 0x92, 0x5d, 0x29, 0xae, 0x0f, 0x0d, 0xdc, 0x84, 0xff, 0x28, 0x10, 0xa2, 0xbc, 0xeb, 0x15, 0xe4, 0x44, 0xb0, 0xf2, 0x07, 0xe9, 0xce, 0xb4, 0xb4, 0x4a, 0xba, 0x06, 0xba, 0x81, 0x72, 0x02, 0x9c, 0x9e, 0x1b, 0x47, 0x4b, 0x55, 0xe8, 0x4c, 0x34, 0xf3, 0x3f, 0xf4, 0x7d, 0x96, 0x17, 0x62, 0x8c, 0x9e, 0xa5, 0x0e, 0xca, 0x5f, 0x37, 0x18, 0xa6, 0x18, 0x60, 0xdd, 0xdc, 0x29, 0x55, 0xc9, 0xf7, 0x80, 0x97, 0x6c, 0x14, 0x55, 0xd2, 0xcf, 0xea, 0x17, 0x05, 0x08, 0x07, 0xa6, 0xe4, 0x0c, 0x5c, 0xc2, 0x7b, 0xc5, 0xfc, 0xc4, 0x13, 0x64, 0x21, 0x8b, 0x59, 0xf9, 0x70, 0xba, 0xbd, 0x40, 0x7e, 0x21, 0x19, 0xbe, 0x92, 0x78, 0x93, 0x0d, 0xad, 0x53, 0xc4, 0x75, 0xc7, 0x52, 0x1a, 0xbc, 0x5c, 0x98, 0x7a, 0x3e, 0x27, 0x7f, 0x2a, 0x40, 0x2e, 0x8a, 0xef, 0x81, 0xfe, 0x9c, 0x72, 0x12, 0x38, 0x67, 0xe8, 0x68, 0x4c, 0x26, 0xf2, 0xb0, 0x85, 0x8f, 0xc2, 0x62, 0x46, 0x03, 0x80, 0x19, 0x93, 0x09, 0xec, 0xa2, 0xd2, 0xfa, 0x44, 0x52, 0xd3, 0xfe, 0x68, 0x9d, 0x0f, 0x36, 0x3c, 0xe5, 0x2d, 0x3b, 0x4e, 0x90, 0xcb, 0xc8, 0xb9, 0x5d, 0x7a, 0xb3, 0x49, 0xf8, 0x0a, 0x22, 0xdf, 0xcc, 0x09, 0xfb, 0x17, 0x18, 0x86, 0x9c, 0x29, 0x45, 0x1a, 0xcd, 0x0d, 0x77, 0x2a, 0xf2, 0xe3, 0x62, 0x66, 0x86, 0x91, 0x5f, 0x95, 0xc4, 0xae, 0xbe, 0x95, 0xa7, 0x9f, 0x5e, 0x9d, 0x15, 0xff, 0x7c, 0xc6, 0x57, 0x45, 0xc9, 0xca, 0xcd, 0xa0, 0xbf, 0x0b, 0xe0, 0x26, 0x34, 0xd7, 0x37, 0x2e, 0x30, 0xea, 0x2e, 0xfa, 0xfc, 0x34, 0x84, 0x9a, 0x7b, 0xdd, 0x53, 0x0c, 0xbd, 0x87, 0x46, 0xa8, 0xd2, 0xd3, 0x06, 0xbc, 0xdc, 0x26, 0xf5, 0x73, 0x68, 0xad, 0x1f, 0xfb, 0xff, 0x9e, 0x6e, 0xe6, 0xf7, 0xc1, 0x1d, 0xd1, 0x8f, 0x30, 0x6e, 0x44, 0x3c, 0x5b, 0xa0, 0xda, 0x3d, 0x4e, 0x1b, 0xa2, 0x75, 0x37, 0xef, 0xc4, 0x7a, 0x22, 0x7c, 0x68, 0xea, 0x08, 0x72, 0xd3, 0xfe, 0x08, 0xfd, 0xd3, 0x61, 0xf4, 0x39, 0x5e, 0x42, 0x0f, 0xec, 0x76, 0xa8, 0x15, 0x74, 0x4f, 0x05, 0x7c, 0xfe, 0xb4, 0x0f, 0xfa, 0xf9, 0xa7, 0xcb, 0x47, 0xcb, 0x48, 0xea, 0x24, 0xc2, 0xf8, 0x59, 0x9c, 0x4d, 0xbd, 0x14, 0x8a, 0x6c, 0xe8, 0x3b, 0x5b, 0x65, 0xf6, 0x67, 0x15, 0xb9, 0xb5, 0x3e, 0x98, 0x56, 0xa8, 0x45, 0x25, 0x0e, 0xab, 0xf6, 0x1c, 0x48, 0xda, 0x13, 0x0a, 0xf5, 0xb0, 0x39, 0xe2, 0xc6, 0x6c, 0xb8, 0x8b, 0x9c, 0xb9, 0xa2, 0x9b, 0x41, 0x8d, 0x22, 0x63, 0x55, 0x52, 0x0f, 0x2b, 0x8b, 0x44, 0xc1, 0xbe, 0x15, 0x1a, 0x24, 0x2a, 0x5c, 0xe8, 0x0a, 0xc1, 0xf5, 0x44, 0xc6, 0x63, 0xd0, 0xa8, 0xf6, 0x00, 0xb3, 0x17, 0xa0, 0x58, 0xe7, 0x03, 0x81, 0x05, 0x32, 0x6f, 0xa1, 0xbc, 0x05, 0x51, 0x2b, 0xd0, 0xf5, 0x3a, 0x7c, 0xf7, 0x6f, 0x38, 0x7a, 0x51, 0xa8, 0xfc, 0x27, 0xa6, 0xd4, 0x38, 0x76, 0xf0, 0x98, 0x4b, 0x5d, 0x19, 0xc1, 0x20, 0x2b, 0x05, 0x36, 0x53, 0x1c, 0xd3, 0x2b, 0x96, 0x2a, 0x60, 0x98, 0x54, 0x27, 0x0d, 0xea, 0x94, 0x09, 0xc3, 0xf8, 0x1f, 0x85, 0x34, 0x38, 0xe5, 0xdf, 0x63, 0x33, 0x9d, 0x00, 0x66, 0x36, 0xac, 0xc9, 0x6a, 0x4b, 0x48, 0xa7, 0xf9, 0x67, 0xdd, 0x67, 0x78, 0xe5, 0xaf, 0x4c, 0xf4, 0x33, 0xc2, 0x5f, 0x1e, 0xcc, 0xf7, 0x07, 0x93, 0x66, 0x77, 0xd9, 0x61, 0x6c, 0x54, 0xb1, 0xc7, 0xae, 0x6e, 0x02, 0x3d, 0x58, 0x94, 0x6a, 0xb4, 0x20, 0xec, 0x8a, 0x1f, 0xc4, 0x95, 0x14, 0x32, 0xb4, 0x8a, 0x25, 0x6a, 0x0b, 0xca, 0xd6, 0x4d, 0xc4, 0xb6, 0x0e, 0xf3, 0x2b, 0xba, 0x9a, 0xc5, 0x91, 0x2f, 0x7f, 0x85, 0x44, 0x80, 0x8e, 0x8f, 0xbf, 0x8c, 0x3a, 0x5e, 0x1d, 0x4c, 0xa7, 0x51, 0xd4, 0xb6, 0x03, 0xaf, 0x9f, 0xe1, 0x19, 0xea, 0xbc, 0x69, 0x23, 0x20, 0x58, 0x15, 0xe0, 0xe7, 0x48, 0xb7, 0xe7, 0x4a, 0xf9, 0x54, 0x3b, 0x0f, 0xaa, 0x85, 0x1f, 0x3c, 0xd8, 0x1d, 0x2c, 0xd9, 0xfa, 0x0c, 0xa0, 0xf6, 0x6f, 0x84, 0xf9, 0xf0, 0xb5, 0x5a, 0xc3, 0xf1, 0xdb, 0xae, 0xae, 0xb6, 0x39, 0xce, 0xe3, 0x95, 0x5e, 0x58, 0x98, 0xbe, 0x4a, 0x9f, 0xe2, 0xc1, 0xde, 0x50, 0xcb, 0x50, 0x90, 0x56, 0xa5, 0x46, 0x63, 0xfa, 0x9e, 0xe9, 0x17, 0x4f, 0x94, 0x6c, 0x9c, 0xcd, 0x2a, 0xb9, 0xcd, 0x3c, 0x1b, 0x6d, 0x5b, 0xd4, 0xce, 0x23, 0x07, 0xa2, 0x2b, 0xf5, 0x15, 0x2d, 0xae, 0x40, 0xfd, 0x5a, 0xb9, 0xa8, 0x63, 0x8d, 0x2f, 0x5c, 0x49, 0x11, 0x3e, 0x9b, 0x84, 0xba, 0x7c, 0x78, 0x6c, 0xc8, 0x36, 0xda, 0xd8, 0x0f, 0x04, 0xc6, 0x4a, 0x55, 0xa1, 0xe1, 0x66, 0xfc, 0xfa, 0x30, 0xa9, 0xe1, 0x85, 0x23, 0x57, 0x83, 0xd4, 0xd2, 0xb5, 0x68, 0x6a, 0x86, 0x79, 0xbc, 0xcd, 0x7b, 0x7f, 0x3c, 0xdd, 0xe4, 0xbd, 0x52, 0x63, 0x30, 0x79, 0x81, 0xed, 0x8c, 0xb9, 0x04, 0xda, 0xa9, 0xfc, 0xb2, 0xb1, 0xbf, 0x27, 0x25, 0xb7, 0xd2, 0xc2, 0x1b, 0xc0, 0x34, 0x64, 0x1c, 0x45, 0x4b, 0x6c, 0x5e, 0xb7, 0x94, 0xf2, 0xe5, 0x13, 0xe8, 0xfe, 0xee, 0xb7, 0xfe, 0xf7, 0x8e, 0x74, 0x32, 0x5e, 0x97, 0xe4, 0x84, 0xbc, 0xbb, 0xfd, 0xe4, 0xd8, 0xf4, 0xe7, 0xad, 0x2e, 0x23, 0x0b, 0x6f, 0x9d, 0xf7, 0x6d, 0xf1, 0x60, 0x10, 0x3b, 0x76, 0x3f, 0x64, 0xa6, 0x40, 0x06, 0xe2, 0xf0, 0x53, 0x37, 0x56, 0xc6, 0x7b, 0xfc, 0x8d, 0xd1, 0x90, 0x5f, 0xb9, 0x88, 0xf9, 0xbd, 0x16, 0x48, 0x6f, 0x78, 0xce, 0xa6, 0x03, 0xed, 0x1b, 0x04, 0x63, 0xa6, 0xab, 0x62, 0x59, 0xd0, 0x48, 0x77, 0x94, 0xef, 0xb8, 0x00, 0xab, 0xd0, 0xe2, 0x59, 0x5f, 0xbf, 0x33, 0x4a, 0x21, 0xfb, 0x40, 0x23, 0xd4, 0x67, 0xad, 0x0b, 0xd3, 0x82, 0x4d, 0x95, 0x36, 0x99, 0x8a, 0x94, 0x51, 0x3c, 0x08, 0x31, 0x7e, 0xee, 0x85, 0x3a, 0x1d, 0x20, 0x04, 0xbd, 0xd8, 0x61, 0x2a, 0xd6, 0x2c, 0xcf, 0xe8, 0xc5, 0x24, 0xd1, 0x5a, 0x43, 0x68, 0x08, 0xef, 0x17, 0x77, 0x82, 0xcb, 0xe4, 0x31, 0x31, 0x69, 0x45, 0x98, 0x9c, 0x85, 0x1b, 0xd7, 0xd5, 0x39, 0x26, 0x84, 0xab, 0x66, 0xd3, 0x22, 0x20, 0x55, 0x55, 0xea, 0x1e, 0x9e, 0xf7, 0xcb, 0x65, 0x49, 0xb1, 0xaf, 0xc8, 0x34, 0xf9, 0x00, 0x99, 0xb4, 0xdb, 0x6a, 0x62, 0x7f, 0x4c, 0xe3, 0xd5, 0xca, 0xbc, 0xe9, 0x06, 0xae, 0xea, 0x0b, 0xd8, 0xd0, 0xfc, 0xab, 0xb5, 0x41, 0xcf, 0x02, 0x83, 0xa3, 0x8c, 0x65, 0xd3, 0x8e, 0x7c, 0xc6, 0x5b, 0x32, 0x1d, 0x7d, 0xa6, 0x3d, 0x75, 0x49, 0x0a, 0xff, 0xa6, 0x91, 0xdb, 0xcb, 0xc3, 0xf0, 0xde, 0xa1, 0xe2, 0xf1, 0x00, 0x0b, 0x72, 0x17, 0x48, 0x45, 0xcf, 0x21, 0x0b, 0xa0, 0x14, 0x8b, 0x5f, 0x28, 0x31, 0x58, 0xd1, 0x85, 0x3d, 0x0f, 0x5b, 0x1f, 0x0d, 0x04, 0x90, 0x86, 0x05, 0xd8, 0x1a, 0x10, 0x2e, 0x43, 0x66, 0xc4, 0x89, 0x11, 0x9e, 0x76, 0xa3, 0x6b, 0xd8, 0x34, 0x6a, 0x58, 0x8d, 0xe1, 0x3f, 0x84, 0x4c, 0x20, 0x4c, 0x3f, 0xaf, 0x74, 0x18, 0xc8, 0x8f, 0xa5, 0x58, 0xcc, 0x74, 0x65, 0x09, 0x2a, 0x4f, 0x33, 0xbb, 0xf9, 0x6c, 0x80, 0x30, 0xcc, 0xa2, 0x10, 0x25, 0x34, 0xcd, 0xa4, 0x70, 0x87, 0x7e, 0xd6, 0x4b, 0xe0, 0xf0, 0x44, 0xf0, 0x67, 0x3e, 0xf0, 0x66, 0xd3, 0xd4, 0xe7, 0x9a, 0x2d, 0x23, 0x21, 0xb1, 0xd6, 0x9a, 0xa9, 0x9d, 0xcb, 0xd1, 0xfd, 0xee, 0x28, 0x07, 0xb8, 0xeb, 0xeb, 0xce, 0x6e, 0xe2, 0xfb, 0x05, 0xd8, 0xbc, 0x69, 0x07, 0x31, 0xd4, 0xf5, 0x22, 0xdf, 0x0a, 0xd4, 0x4b, 0x56, 0x13, 0xb0, 0x0f, 0x3a, 0x13, 0xf1, 0xcd, 0xc3, 0x6d, 0x3b, 0x23, 0x66, 0xd9, 0x37, 0xa6, 0xb2, 0xb8, 0x97, 0xd6, 0x78, 0xa5, 0x54, 0x51, 0x2e, 0x4d, 0x3a, 0x46, 0x95, 0x80, 0xa7, 0x2d, 0x9a, 0x88, 0x90, 0xb5, 0x7a, 0xb9, 0xc4, 0xfe, 0x2a, 0x49, 0x75, 0x09, 0xf6, 0x62, 0xf4, 0x6d, 0x68, 0x76, 0xbc, 0x4b, 0x6b, 0xd3, 0xb2, 0x83, 0xb0, 0x77, 0xab, 0x28, 0x51, 0x25, 0x2f, 0x32, 0xb5, 0xb8, 0x7d, 0x73, 0xb3, 0xb8, 0xce, 0xcd, 0xfa, 0x2b, 0xde, 0xa1, 0xb0, 0xad, 0xa9, 0x8a, 0x59, 0xc3, 0x72, 0x4c, 0xfb, 0x6d, 0x0a, 0x07, 0x7f, 0xfa, 0x4f, 0xb1, 0x5b, 0x20, 0xf3, 0xc2, 0x6e, 0x4c, 0x7f, 0x31, 0x2b, 0x37, 0x97, 0xa0, 0xfa, 0xba, 0x7f, 0xd4, 0xdb, 0xe3, 0xde, 0x67, 0x4d, 0x48, 0xc2, 0xc1, 0x6e, 0x9b, 0xe5, 0x44, 0x63, 0x7f, 0x2f, 0xc7, 0xfa, 0x9a, 0x7b, 0x46, 0x8e, 0xec, 0x9e, 0xd7, 0x2c, 0x5f, 0xa5, 0xe0, 0xf3, 0x9f, 0x5f, 0x88, 0xc1, 0x2b, 0x1c, 0x6b, 0x0c, 0xad, 0xb3, 0x92, 0x0d, 0x87, 0xca, 0xa2, 0x24, 0xae, 0x51, 0x53, 0x78, 0xbb, 0x50, 0x24, 0xde, 0x3f, 0xe3, 0x4e, 0xfc, 0x57, 0x82, 0xf6, 0xae, 0x81, 0x86, 0xa6, 0xa8, 0xae, 0xe9, 0xfe, 0x5d, 0x99, 0x4e, 0xa7, 0x20, 0x56, 0x41, 0x89, 0x89, 0x2e, 0xbf, 0x3e, 0x1b, 0xaa, 0xf9, 0xc6, 0x23, 0xee, 0x55, 0x7c, 0xe3, 0x48, 0xb6, 0x48, 0xf0, 0x09, 0xfd, 0x17, 0xd9, 0x94, 0xd0, 0x88, 0x09, 0xb4, 0x9a, 0xe8, 0xef, 0x33, 0xd2, 0x61, 0x5c, 0xa8, 0x81, 0x6e, 0x2c, 0x90, 0xfe, 0x92, 0x28, 0xa0, 0xfc, 0x4a, 0x2b, 0x5a, 0xc7, 0x40, 0x84, 0xdf, 0xcb, 0xc1, 0x9c, 0x04, 0x56, 0x71, 0xd9, 0xa7, 0x9f, 0x3e, 0xc1, 0x44, 0x06, 0x92, 0x63, 0xc3, 0x9d, 0xcd, 0xf2, 0x94, 0xe8, 0xf2, 0xb4, 0xfe, 0xe1, 0xa0, 0x1a, 0xb4, 0x3f, 0x45, 0x31, 0xaa, 0xf8, 0x8e, 0x39, 0x26, 0x05, 0x22, 0x92, 0x1a, 0x65, 0x8f, 0xe0, 0xb1, 0x64, 0x84, 0x67, 0x28, 0x1d, 0x42, 0xb7, 0xdf, 0x3e, 0x4d, 0x8e, 0xb0, 0x0b, 0x67, 0xfa, 0x7f, 0xa6, 0xbe, 0xbe, 0x12, 0x8d, 0x65, 0xf7, 0x23, 0x64, 0x01, 0xff, 0xb4, 0xf5, 0xc5, 0x92, 0xa3, 0x75, 0xa0, 0x2f, 0x7e, 0x08, 0xb4, 0xc1, 0x98, 0x88, 0x0b, 0x7f, 0x5d, 0x82, 0x85, 0x11, 0xe2, 0x82, 0x15, 0xf4, 0xc1, 0x91, 0x2d, 0x1f, 0x23, 0xfb, 0x77, 0xe7, 0x1e, 0x56, 0xc6, 0x20, 0x42, 0xbf, 0x4c, 0x85, 0x6e, 0x67, 0x0d, 0x5a, 0xe8, 0x4f, 0x93, 0x4f, 0xad, 0x4f, 0xe4, 0xa8, 0x06, 0x5d, 0xb1, 0x9b, 0x5c, 0x0c, 0xd0, 0xf9, 0x4d, 0x53, 0xed, 0x11, 0x00, 0x90, 0x7c, 0xd2, 0xb5, 0xcc, 0xf1, 0x2f, 0xa0, 0x41, 0x34, 0xc8, 0xf7, 0x19, 0x4f, 0xc6, 0x4a, 0x79, 0x6a, 0x06, 0x13, 0xbe, 0xfa, 0x7b, 0x8e, 0x07, 0x35, 0xcd, 0xca, 0xf3, 0xc9, 0x46, 0x00, 0xac, 0xcd, 0xef, 0x25, 0x24, 0xf8, 0xf6, 0xbb, 0x9e, 0x11, 0x53, 0xec, 0x71, 0xa6, 0xab, 0xd9, 0x08, 0x01, 0x75, 0x30, 0x2e, 0x58, 0x5b, 0xfc, 0x88, 0x44, 0xe3, 0xc2, 0x63, 0x74, 0x4e, 0xc9, 0xb1, 0xa3, 0xc1, 0xb9, 0x4d, 0xc7, 0xa2, 0x68, 0x87, 0x8c, 0x45, 0xf0, 0xdc, 0x00, 0xc8, 0x05, 0x05, 0x90, 0x3b, 0x85, 0x34, 0x33, 0x04, 0x51, 0x9a, 0xe5, 0x82, 0x5c, 0x2c, 0x57, 0xf1, 0x01, 0xa7, 0xe5, 0x8e, 0x9a, 0xd1, 0xc8, 0xfb, 0x4e, 0x02, 0x8d, 0xe4, 0x2a, 0xe4, 0xc5, 0xe3, 0x73, 0x77, 0xff, 0xa1, 0x3b, 0x58, 0xf3, 0x3f, 0x33, 0x42, 0x00 ],
- const [ 0x18, 0xdf, 0x82, 0xa5, 0x4c, 0x94, 0xb4, 0x56, 0x9b, 0xbf, 0x2c, 0x4a, 0xf0, 0x72, 0x3e, 0xd1, 0x67, 0x26, 0x15, 0xb9, 0xa8, 0xb7, 0xa6, 0x72, 0x74, 0xb0, 0xe6, 0x70, 0x7d, 0xc9, 0x3b, 0xd1, 0x7b, 0xae, 0x31, 0x40, 0x7c, 0x02, 0x6f, 0x19, 0x7b, 0xa4, 0xe9, 0xcd, 0x35, 0x31, 0x57, 0x89, 0x38, 0xca, 0xe5, 0x12, 0x3d, 0x17, 0x2c, 0xf4, 0xb7, 0x8b, 0x61, 0xdb, 0xac, 0xea, 0xcc, 0x41, 0xc4, 0x09, 0x7c, 0x49, 0xa0, 0xd6, 0x3a, 0xeb, 0x6c, 0x97, 0xbb, 0x52, 0xb8, 0x77, 0x1a, 0x82, 0x83, 0x3e, 0x85, 0x3e, 0x99, 0x60, 0x36, 0x29, 0x20, 0x39, 0xa4, 0x2b, 0x6d, 0x97, 0xfb, 0x16, 0x1c, 0x79, 0xca, 0x8a, 0x5f, 0x16, 0xfc, 0x16, 0x96, 0x21, 0x0a, 0x9f, 0x20, 0x4c, 0x6f, 0x06, 0x71, 0x0b, 0x5b, 0x05, 0x65, 0x9a, 0xab, 0x5a, 0xd4, 0x41, 0x19, 0x28, 0x67, 0xd7, 0xb0, 0x9a, 0xaa, 0x85, 0x84, 0xc9, 0x62, 0xcc, 0x9f, 0xe0, 0x20, 0xc9, 0x3e, 0x7e, 0x16, 0xb8, 0x3e, 0x5b, 0x2a, 0xb8, 0xd1, 0x2f, 0x49, 0xcd, 0x75, 0xcf, 0xfe, 0x2b, 0x27, 0x99, 0x43, 0xb2, 0xd3, 0x13, 0x97, 0xb5, 0x10, 0xcf, 0x50, 0xff, 0x0a, 0x92, 0x33, 0x18, 0xbf, 0xb4, 0x42, 0xc4, 0x6f, 0xca, 0xd5, 0xcd, 0x4d, 0x83, 0xec, 0x02, 0x7b, 0xd0, 0xc4, 0x80, 0x35, 0x48, 0xa8, 0x30, 0x4d, 0xca, 0x0a, 0x91, 0xd7, 0x64, 0xd2, 0xb8, 0x25, 0x73, 0xf6, 0x95, 0xf6, 0x0c, 0x4b, 0x77, 0xea, 0x9b, 0x9b, 0xd2, 0x39, 0xca, 0xf7, 0x41, 0xa5, 0xa5, 0x4e, 0xc7, 0xad, 0xfb, 0x3f, 0x5a, 0x04, 0x07, 0x2c, 0xa2, 0x41, 0x4f, 0x90, 0xfe, 0xd8, 0xcd, 0x92, 0xc8, 0x49, 0x4d, 0xda, 0xda, 0x97, 0x16, 0xa3, 0x50, 0xfc, 0xcc, 0x11, 0x90, 0xdb, 0x95, 0xc5, 0x88, 0xf6, 0x7b, 0xb0, 0x37, 0xe1, 0x12, 0x24, 0x6f, 0xb7, 0x5a, 0x31, 0xd9, 0x0b, 0xe6, 0x2e, 0x39, 0x21, 0x3e, 0x96, 0xf3, 0x5e, 0x83, 0x16, 0xcf, 0xfe, 0x51, 0xe3, 0xf9, 0x05, 0xe9, 0x51, 0x4c, 0x78, 0x90, 0xa2, 0xcf, 0xcc, 0x32, 0x1b, 0x80, 0x9f, 0x4b, 0x5e, 0x51, 0xa6, 0x08, 0xf3, 0x71, 0xe7, 0xa9, 0x28, 0xcc, 0x28, 0x29, 0x1b, 0xd5, 0xa7, 0x21, 0x15, 0x83, 0x0b, 0xea, 0x19, 0x99, 0x9b, 0x01, 0xbd, 0x2b, 0xae, 0xb0, 0x39, 0x5e, 0x62, 0xeb, 0xbe, 0x6f, 0x91, 0x79, 0x09, 0xf7, 0x01, 0x54, 0x37, 0x6d, 0xdb, 0x51, 0xdb, 0xec, 0x5f, 0x03, 0x4e, 0x36, 0xd5, 0xdd, 0x46, 0xfa, 0xc7, 0x98, 0xaa, 0x52, 0x6d, 0xd4, 0xa5, 0x90, 0x69, 0x02, 0xfa, 0x3a, 0xb5, 0x81, 0x97, 0x53, 0xd9, 0x07, 0x6c, 0xdc, 0x61, 0x43, 0x7d, 0x9b, 0x8e, 0xc1, 0x36, 0x1b, 0x4c, 0x0d, 0xff, 0xf4, 0x64, 0x1b, 0x11, 0x4c, 0xf3, 0xe6, 0x88, 0x9e, 0x1b, 0x58, 0xb9, 0xbb, 0xf8, 0x6a, 0xc5, 0x0e, 0xd5, 0x8c, 0x6f, 0x23, 0xa0, 0x47, 0x2a, 0x6b, 0x9c, 0x21, 0x76, 0x39, 0x56, 0xc1, 0x6d, 0x11, 0xda, 0x53, 0x99, 0x22, 0x26, 0x2e, 0x09, 0x11, 0xdf, 0xb4, 0xa4, 0xf8, 0x43, 0x7a, 0xbd, 0xaf, 0x5f, 0xaa, 0xe7, 0x4a, 0x82, 0xa5, 0x0a, 0xe2, 0xf1, 0xec, 0xb6, 0x99, 0xdc, 0x40, 0xb8, 0xd8, 0x91, 0x08, 0xeb, 0xdb, 0xf0, 0xf4, 0x51, 0x70, 0x1f, 0xe0, 0x62, 0xfb, 0x7f, 0xfb, 0xa4, 0xbe, 0xde, 0x28, 0x7c, 0x57, 0xee, 0xa4, 0x44, 0x8a, 0xf5, 0xe9, 0x9d, 0x41, 0xc7, 0xd3, 0x07, 0xd1, 0xf2, 0x02, 0xaf, 0x7f, 0x38, 0x7f, 0x87, 0x43, 0x42, 0xa2, 0x9c, 0xcc, 0x92, 0x33, 0xa5, 0xc3, 0xba, 0xcf, 0xd7, 0x54, 0xcb, 0x8d, 0x01, 0xeb, 0x11, 0xe2, 0xd4, 0x3b, 0xfd, 0xc2, 0x82, 0x85, 0x63, 0x08, 0x8c, 0x17, 0xe6, 0x18, 0xd4, 0x13, 0xb0, 0xc3, 0xfa, 0x71, 0x66, 0x6b, 0xe5, 0x47, 0x5a, 0x67, 0xa0, 0x48, 0x03, 0xa8, 0x68, 0x8b, 0xab, 0x9d, 0x03, 0x8f, 0x68, 0x55, 0x53, 0x7b, 0x4d, 0xe4, 0x2a, 0xaa, 0xe1, 0x07, 0x60, 0x66, 0xd0, 0x0b, 0x23, 0xf4, 0xe1, 0xea, 0x8f, 0xd2, 0x28, 0xb8, 0x7e, 0x3c, 0x7d, 0x3d, 0xa2, 0xf4, 0x2d, 0xe4, 0xd1, 0x43, 0xef, 0xd4, 0x9f, 0x3b, 0x19, 0x5c, 0x32, 0x40, 0x13, 0x94, 0x52, 0xc7, 0x0c, 0x41, 0xc0, 0x5c, 0xed, 0xfa, 0xc9, 0xea, 0x8b, 0x89, 0x1a, 0x37, 0x21, 0x94, 0xd6, 0xae, 0xfd, 0x7d, 0xe6, 0x61, 0x79, 0x86, 0x91, 0x4e, 0x2d, 0x39, 0x4c, 0xe1, 0x63, 0x07, 0xd3, 0xbb, 0xcb, 0x2f, 0x78, 0xb2, 0x71, 0xe1, 0xbb, 0x19, 0xeb, 0xa3, 0x1c, 0x41, 0xd7, 0xf5, 0x2d, 0x3f, 0x85, 0x30, 0xeb, 0xf0, 0xf0, 0xb4, 0x4e, 0x3b, 0xf3, 0x42, 0x1f, 0x96, 0xb9, 0xa7, 0x0a, 0xcc, 0x76, 0x9b, 0xf4, 0xfd, 0x54, 0xe8, 0x8f, 0xe6, 0xb1, 0xcf, 0x2b, 0x62, 0x87, 0xa7, 0xcf, 0x31, 0x2b, 0xc7, 0x88, 0xf9, 0x3b, 0xa6, 0x01, 0x8a, 0xd1, 0x41, 0x54, 0x66, 0xfd, 0xbd, 0x20, 0x81, 0x73, 0x4e, 0xdc, 0x45, 0x80, 0x57, 0x6a, 0xd9, 0x43, 0xd3, 0xef, 0xa3, 0x19, 0xf3, 0xe3, 0x0c, 0x59, 0x08, 0x64, 0x83, 0x42, 0xa4, 0xd0, 0xc4, 0x31, 0xfc, 0x92, 0x5a, 0x17, 0x91, 0x3c, 0x62, 0x2b, 0x10, 0xd7, 0x93, 0xdc, 0x76, 0x76, 0x7b, 0x0a, 0x77, 0x12, 0x0b, 0x75, 0x21, 0x91, 0x56, 0x76, 0xbd, 0x28, 0x96, 0xed, 0xf6, 0xe3, 0x70, 0x7a, 0x3d, 0x82, 0x79, 0xf0, 0x6b, 0x87, 0xf8, 0x06, 0xa8, 0x8d, 0xee, 0x50, 0x8c, 0xdb, 0x53, 0x6e, 0x85, 0x39, 0xa3, 0x84, 0x79, 0x03, 0x99, 0xea, 0xac, 0x7b, 0x3a, 0x24, 0xe3, 0x63, 0x16, 0x14, 0xca, 0xcc, 0xcb, 0x6e, 0x93, 0x29, 0xca, 0x6d, 0xe0, 0xa7, 0x5e, 0xc4, 0xe3, 0xc1, 0xea, 0xd8, 0xc3, 0x0e, 0x72, 0x2c, 0x42, 0x5e, 0x5c, 0x1c, 0x9e, 0x06, 0x78, 0xcf, 0xb4, 0x78, 0x3f, 0x67, 0x6b, 0x17, 0x58, 0x7a, 0x50, 0x49, 0x61, 0xc6, 0x7e, 0xcd, 0xeb, 0x20, 0xc1, 0x4f, 0xc6, 0xae, 0xfb, 0x39, 0x80, 0x56, 0xc6, 0xcd, 0x28, 0x76, 0x5a, 0x71, 0x57, 0xd6, 0xb2, 0x49, 0x72, 0xdb, 0xea, 0x0b, 0x29, 0xfd, 0xec, 0x0f, 0x43, 0x7a, 0x4b, 0xa6, 0x9e, 0x4c, 0x6f, 0xad, 0x71, 0x59, 0xf3, 0x62, 0xd5, 0xeb, 0x4b, 0x76, 0x84, 0x5f, 0xaa, 0x63, 0xe0, 0x21, 0x22, 0xff, 0x37, 0xd8, 0x0e, 0x51, 0x45, 0xdd, 0xad, 0xa4, 0xfa, 0xf2, 0x0f, 0xdb, 0x7e, 0x31, 0x35, 0x04, 0x73, 0x42, 0x74, 0x30, 0x7a, 0xd1, 0x1a, 0x81, 0xf8, 0x3f, 0x54, 0x84, 0x1a, 0x98, 0x4f, 0xc1, 0x16, 0xc6, 0x9e, 0x91, 0xb4, 0x04, 0xdc, 0x30, 0x0e, 0x95, 0x92, 0x13, 0x93, 0xb5, 0x5a, 0x7c, 0x52, 0xd0, 0x45, 0x4b, 0x76, 0xf2, 0x7b, 0x17, 0x0c, 0x7f, 0x21, 0x7d, 0x0d, 0x24, 0x80, 0xb8, 0x98, 0x0d, 0x63, 0x72, 0x7f, 0x58, 0xc0, 0xda, 0x05, 0xca, 0x9b, 0xf7, 0xe6, 0xc1, 0x28, 0x3c, 0x98, 0x6a, 0x30, 0x5c, 0xd1, 0x34, 0xb5, 0x60, 0x49, 0x85, 0xd9, 0xf6, 0xc1, 0xab, 0xfc, 0x0c, 0x44, 0x15, 0x25, 0x9d, 0xad, 0xc3, 0xa3, 0xcb, 0x69, 0xfb, 0xf4, 0x2f, 0x7e, 0x3e, 0xe5, 0x6d, 0xcc, 0x7a, 0xfb, 0x0b, 0x93, 0x81, 0x12, 0x83, 0x36, 0xba, 0x44, 0x96, 0x3f, 0x16, 0x0c, 0xe4, 0xa2, 0x46, 0xab, 0xba, 0x46, 0x2c, 0xcb, 0x2b, 0xc1, 0x8f, 0x63, 0x62, 0x64, 0x12, 0xda, 0x36, 0x77, 0x67, 0x6f, 0xff, 0xc5, 0xc0, 0xd8, 0xa8, 0x5c, 0x86, 0x29, 0x06, 0x8e, 0x4e, 0xf8, 0x68, 0x3b, 0x09, 0xbf, 0x70, 0x53, 0x7a, 0x81, 0x21, 0x96, 0xee, 0xb1, 0x38, 0x9e, 0x27, 0x4f, 0xc0, 0x20, 0x99, 0x54, 0xe1, 0x6f, 0xd9, 0x50, 0xf9, 0x41, 0x52, 0x52, 0xee, 0xb6, 0x3a, 0x08, 0xc2, 0x96, 0xc4, 0x27, 0x67, 0xda, 0x97, 0x0d, 0xd5, 0x6f, 0x80, 0xa6, 0x5b, 0x36, 0x63, 0x8c, 0x32, 0x4f, 0x78, 0x72, 0x58, 0x97, 0xb3, 0xc2, 0x9b, 0x6f, 0x84, 0x85, 0xf4, 0xc0, 0xc1, 0x84, 0x17, 0x3c, 0xe1, 0xac, 0x48, 0xe6, 0x6a, 0xb7, 0x70, 0xd4, 0xac, 0x09, 0x70, 0x33, 0xb0, 0xd8, 0xb5, 0x8d, 0x6c, 0x90, 0x0d, 0x47, 0x38, 0x76, 0xb9, 0x6e, 0x86, 0x8b, 0xc3, 0xb3, 0xcd, 0xb3, 0x92, 0xb3, 0xc6, 0x16, 0xbb, 0x7c, 0xdb, 0xc7, 0x1a, 0x4d, 0xdd, 0xa4, 0x22, 0x9e, 0xf5, 0x7d, 0x71, 0x60, 0xdd, 0x78, 0xa7, 0x86, 0x4f, 0xb3, 0x79, 0xc4, 0xbe, 0x2c, 0x01, 0x97, 0x45, 0xde, 0x58, 0x85, 0xdd, 0x2d, 0x67, 0xa6, 0xd2, 0x84, 0xfa, 0x63, 0x78, 0x3d, 0x16, 0x7e, 0x1a, 0xc1, 0x8d, 0x53, 0x33, 0xf0, 0xcf, 0x5d, 0xe0, 0xc3, 0x03, 0xfb, 0x96, 0x2f, 0x57, 0x74, 0x10, 0x4d, 0x94, 0x39, 0x8c, 0xb9, 0xf5, 0x6b, 0x37, 0x38, 0x39, 0x9d, 0xe6, 0x9d, 0xf7, 0xdb, 0x06, 0xed, 0x32, 0xeb, 0xd6, 0xc1, 0x2d, 0xd2, 0xd4, 0xec, 0x80, 0x9b, 0x74, 0x5e, 0x6c, 0x53, 0x18, 0x48, 0x6c, 0x58, 0x3d, 0x81, 0x0c, 0xd4, 0xf2, 0x29, 0xfe, 0x84, 0x8f, 0x8c, 0x6b, 0xbe, 0xa3, 0x48, 0x87, 0xb2, 0x2e, 0xb3, 0x68, 0xf0, 0x11, 0x77, 0x18, 0x2a, 0xc2, 0x7f, 0xe9, 0x3b, 0x44, 0x17, 0x08, 0x69, 0x57, 0x4e, 0x55, 0xe7, 0xec, 0x9f, 0x72, 0x9e, 0xdb, 0xd1, 0x1a, 0x2e, 0xd8, 0x1c, 0xb5, 0x2f, 0xa4, 0x8d, 0x29, 0xbc, 0x80, 0xac, 0xf2, 0x32, 0xe7, 0x5b, 0x75, 0x35, 0x7c, 0x01, 0x91, 0xf4, 0x42, 0xe8, 0x78, 0xae, 0x0b, 0xe4, 0xbd, 0x76, 0x33, 0x36, 0xae, 0x33, 0x8d, 0xaf, 0xe3, 0xea, 0x9e, 0x19, 0x17, 0x40, 0x09, 0xd2, 0x37, 0x3a, 0x4b, 0xba, 0xb9, 0x48, 0xa8, 0x4f, 0x2f, 0x82, 0x65, 0x17, 0x1c, 0x31, 0x38, 0x3f, 0x06, 0x91, 0xfd, 0x81, 0xcc, 0xd5, 0xaa, 0x4b, 0x3a, 0x6c, 0x85, 0x1d, 0xdb, 0x83, 0x95, 0x32, 0x0e, 0xcb, 0x56, 0x64, 0x5c, 0x7c, 0xb1, 0x4a, 0x09, 0x9a, 0x2a, 0xa3, 0xe9, 0x77, 0x5c, 0xf7, 0x75, 0x79, 0xa2, 0x7b, 0x1e, 0x1d, 0x18, 0x36, 0xe2, 0x3c, 0xc2, 0x62, 0x1c, 0x8d, 0x0a, 0x15, 0xa0, 0x6c, 0x70, 0x20, 0x07, 0xd9, 0x7d, 0x37, 0x48, 0xc4, 0xf8, 0x53, 0x89, 0x88, 0x5d, 0x55, 0x34, 0xb5, 0x8b, 0xec, 0x4c, 0x12, 0xbd, 0xb8, 0x02, 0xe2, 0xbb, 0xb0, 0x83, 0x67, 0x52, 0xc1, 0x15, 0xa5, 0x01, 0xb7, 0x62, 0x68, 0xf5, 0x61, 0x13, 0x88, 0x38, 0xf0, 0xa1, 0x6c, 0x25, 0xa1, 0x68, 0xcd, 0x1f, 0x9c, 0xfe, 0xbc, 0x82, 0x1b, 0xc2, 0xe7, 0xda, 0xce, 0xb8, 0x18, 0x53, 0x7f, 0x94, 0xfe, 0x71, 0xf2, 0x14, 0x30, 0x01, 0x0f, 0x93, 0x6f, 0x50, 0x42, 0xdc, 0x2b, 0x9a, 0x23, 0x3c, 0x49, 0xc5, 0x52, 0xdb, 0x24, 0x4f, 0xa5, 0x4b, 0xd2, 0x86, 0x86, 0x62, 0xa8, 0xf7, 0x96, 0x45, 0x00, 0x28, 0x97, 0xc6, 0x39, 0x8a, 0x88, 0xf0, 0x00, 0xa9, 0x11, 0xdf, 0xce, 0xa6, 0x22, 0xd6, 0xb2, 0xe7, 0xd8, 0x8b, 0x51, 0x0d, 0xa0, 0xc5, 0x2b, 0x26, 0x9e, 0x29, 0x20, 0x24, 0x50, 0x51, 0x32, 0x8f, 0x6e, 0x1f, 0x8c, 0x76, 0x15, 0x51, 0xc4, 0xab, 0x25, 0x55, 0x5d, 0x30, 0xe8, 0x5e, 0x90, 0xec, 0xf4, 0xb7, 0x4b, 0xa2, 0x52, 0x58, 0x7b, 0x24, 0xdf, 0xb7, 0x87, 0xc4, 0xf3, 0xe0, 0x1c, 0x0c, 0x41, 0xc8, 0x30, 0xaf, 0xfe, 0xde, 0x41, 0xbe, 0x46, 0xe4, 0xde, 0x1f, 0xbb, 0xfd, 0x69, 0x3c, 0x6f, 0x07, 0x1b, 0xf8, 0x04, 0x2a, 0x48, 0xe7, 0x11, 0xb1, 0xe5, 0xbe, 0xc8, 0x19, 0x47, 0x08, 0xd6, 0x68, 0x2d, 0x1b, 0x8b, 0xc1, 0x01, 0x4b, 0x3b, 0x34, 0x5b, 0x5d, 0xe4, 0xda, 0xc7, 0x3f, 0x10, 0x22, 0xc8, 0xf6, 0xfd, 0x66, 0x1d, 0xd7, 0xfc, 0xc2, 0x42, 0xfa, 0x17, 0x25, 0x3a, 0xec, 0xf6, 0xa8, 0x8c, 0xa4, 0x04, 0x1f, 0x8c, 0xb8, 0xcd, 0xee, 0xdb, 0xd1, 0xaa, 0x1f, 0x31, 0x5d, 0xa1, 0xb1, 0x5a, 0x83, 0x87, 0x32, 0x7f, 0x5c, 0x67, 0x90, 0xa7, 0x60, 0x28, 0x2c, 0x7d, 0x1e, 0x69, 0x30, 0x54, 0x31, 0xb0, 0x23, 0x68, 0x6f, 0xc4, 0xba, 0x67, 0x63, 0x57, 0xf1, 0x30, 0xfe, 0xe8, 0x5b, 0xda, 0x89, 0xe8, 0xb6, 0xf8, 0xde, 0x1c, 0xc3, 0x1b, 0xd8, 0x42, 0x55, 0x99, 0x08, 0xf7, 0xa7, 0x8d, 0xa9, 0xd8, 0xf2, 0x1f, 0xd6, 0xe8, 0x3f, 0x06, 0xfb, 0x32, 0x7a, 0x4b, 0x8a, 0xaf, 0xc9, 0x4f, 0xef, 0x69, 0x1c, 0x0f, 0xc5, 0xe1, 0x04, 0xa7, 0x4a, 0xae, 0xc8, 0x15, 0x10, 0x68, 0xb6, 0x40, 0xf6, 0xc4, 0xb7, 0x39, 0x57, 0x00, 0x26, 0xc0, 0x81, 0x82, 0xe2, 0x0a, 0x69, 0xbc, 0xa2, 0xc1, 0x9d, 0x52, 0x89, 0x4d, 0x79, 0x7f, 0xfb, 0x52, 0x9e, 0xb5, 0xae, 0x79, 0xa0, 0x83, 0x04, 0x74, 0xff, 0xbc, 0x98, 0x3c, 0x59, 0xd6, 0x16, 0x9d, 0xdd, 0x90, 0x51, 0xf5, 0x03, 0xd7, 0x8f, 0x39, 0x7a, 0xeb, 0x27, 0x38, 0x62, 0xbe, 0x4f, 0x24, 0xbc, 0x9d, 0x2f, 0x4e, 0x1f, 0x11, 0x3a, 0x31, 0xac, 0x08, 0xbd, 0xb2, 0x44, 0x30, 0xb8, 0xa6, 0xf8, 0xa4, 0xee, 0x95, 0xc0, 0xca, 0x38, 0xbd, 0x70, 0x7b, 0x1e, 0x5a, 0xe9, 0x65, 0xa8, 0x25, 0x8c, 0xae, 0x72, 0x1b, 0xf5, 0xda, 0xff, 0x7f, 0xe5, 0xef, 0x4f, 0x22, 0x7f, 0xd7, 0xb4, 0xe2, 0xb8, 0x05, 0xe1, 0x71, 0x09, 0x5c, 0x44, 0x58, 0x66, 0x4c, 0x96, 0x3b, 0x74, 0x3e, 0xb0, 0x5e, 0xf7, 0x32, 0xa0, 0x68, 0x89, 0xa6, 0xfc, 0x67, 0x92, 0xba, 0x76, 0x15, 0x74, 0x93, 0xb1, 0x5a, 0x06, 0xfd, 0x53, 0x11, 0x44, 0x54, 0x5c, 0x0f, 0x45, 0xa4, 0xb6, 0x61, 0x6d, 0x0f, 0x0c, 0xd6, 0xe3, 0x6f, 0xe0, 0xbe, 0x45, 0x3d, 0xd8, 0xf0, 0x9b, 0xb2, 0x59, 0x12, 0x8a, 0x2b, 0x57, 0x14, 0xcb, 0xd2, 0x6c, 0xfe, 0xdb, 0x7b, 0x27, 0xec, 0xf3, 0xcc, 0xa6, 0x56, 0x3a, 0xa1, 0x67, 0x95, 0x3a, 0xae, 0x5b, 0xa3, 0x90, 0x67, 0x3c, 0x23, 0xe8, 0x1c, 0x21, 0xa1, 0x29, 0x69, 0x50, 0x1a, 0xed, 0xcd, 0x53, 0xbf, 0x34, 0x99, 0x4e, 0xf6, 0x59, 0x0c, 0x8f, 0xa2, 0x45, 0xbc, 0x67, 0xa4, 0xe2, 0x37, 0x38, 0xa2, 0xd2, 0xeb, 0xd0, 0x06, 0x62, 0x43, 0xf5, 0x4a, 0xb9, 0x13, 0x41, 0x74, 0x56, 0x36, 0x31, 0xdc, 0xb9, 0x76, 0x78, 0x35, 0x5f, 0xab, 0x99, 0xcb, 0xf4, 0x27, 0xb4, 0x0a, 0xc5, 0x52, 0xa0, 0x40, 0x74, 0x92, 0x3b, 0xa4, 0xef, 0x6e, 0xfe, 0x96, 0xa2, 0xf2, 0xd5, 0x28, 0xec, 0x55, 0x2d, 0xde, 0xd0, 0xd9, 0x4e, 0xb2, 0xee, 0xf3, 0xeb, 0x5b, 0xb1, 0xac, 0xf7, 0xcf, 0xc9, 0x47, 0xbb, 0x07, 0xdc, 0x24, 0x26, 0x02, 0x78, 0xe4, 0x64, 0x0c, 0x4d, 0xce, 0xb2, 0x40, 0x99, 0x71, 0x70, 0x4c, 0xe3, 0x8b, 0x77, 0x74, 0xec, 0x2a, 0xae, 0xda, 0xe3, 0x11, 0xd8, 0xfc, 0xd8, 0x5d, 0xb0, 0x7e, 0x73, 0x69, 0x38, 0x2a, 0xe6, 0xee, 0x4e, 0x35, 0x20, 0x6f, 0x80, 0xc3, 0x43, 0xd4, 0x21, 0xae, 0x59, 0x55, 0x9c, 0x83, 0x43, 0x99, 0x09, 0xce, 0xf1, 0x1f, 0xfe, 0x98, 0xd9, 0xde, 0xa8, 0x2d, 0xa1, 0x28, 0x1a, 0x23, 0x1f, 0xd4, 0xe4, 0x97, 0x84, 0x9c, 0xe8, 0xba, 0xd4, 0xc4, 0x69, 0x8d, 0x9a, 0xfd, 0x65, 0xe8, 0xd9, 0x88, 0x25, 0xc1, 0x45, 0x9e, 0x12, 0xab, 0xb3, 0x10, 0xca, 0x9d, 0xcf, 0x2b, 0x73, 0xf5, 0x0d, 0xde, 0x50, 0xbc, 0xe2, 0x1f, 0x91, 0x2c, 0x33, 0x8a, 0x70, 0x6f, 0x0e, 0x4b, 0x79, 0xaa, 0x98, 0x3f, 0x29, 0x3a, 0x46, 0x56, 0xbb, 0x3e, 0x50, 0x3c, 0x3f, 0x55, 0x63, 0x38, 0xec, 0xa9, 0x97, 0x54, 0xb7, 0x2c, 0xa0, 0xbe, 0x25, 0x21, 0x48, 0x6e, 0x5d, 0xdf, 0x1d, 0x09, 0x81, 0xd1, 0x66, 0x05, 0x3e, 0xc2, 0x5c, 0x0f, 0xa2, 0x57, 0x97, 0xa9, 0x2e, 0xdd, 0xc7, 0x18, 0x2d, 0x45, 0xa4, 0x7d, 0x44, 0x6d, 0x28, 0x42, 0x49, 0xa2, 0xfb, 0xb7, 0x58, 0x62, 0x2f, 0xfd, 0x24, 0x66, 0x2d, 0x24, 0x8c, 0xe0, 0xef, 0x90, 0x6f, 0x01, 0x70, 0xa1, 0xc0, 0xbe, 0x61, 0x93, 0xdd, 0xd4, 0x1e, 0xa2, 0x1c, 0x09, 0xe0, 0x72, 0xa7, 0xb5, 0x34, 0xaf, 0x8b, 0x82, 0xac, 0xf0, 0x0b, 0x70, 0xd4, 0xe2, 0x3a, 0x1c, 0x67, 0xa2, 0xc9, 0x41, 0xc3, 0x6a, 0x1d, 0x7f, 0x9b, 0x70, 0xa4, 0x5b, 0xec, 0x0b, 0x6a, 0x88, 0x32, 0x18, 0xe7, 0x65, 0xdb, 0x9c, 0x1c, 0xc6, 0xfc, 0xab, 0xde, 0xf7, 0x43, 0x88, 0x71, 0xfe, 0x2d, 0x0d, 0x58, 0x21, 0x78, 0x4d, 0x6c, 0xa8, 0xdc, 0x79, 0x2c, 0xe4, 0xf6, 0x00, 0x54, 0x70, 0x85, 0xfa, 0xb1, 0xb7, 0xd8, 0xc7, 0x33, 0xb6, 0x87, 0xf3, 0x44, 0x04, 0x62, 0x5d, 0x58, 0x0f, 0xa7, 0x99, 0xc5, 0xa8, 0x78, 0x92, 0xd6, 0xc2, 0x8b, 0x74, 0x1a, 0x76, 0x24, 0xc9, 0x02, 0x4b, 0x40, 0xe2, 0xab, 0xb5, 0x13, 0x78, 0xf9, 0xdb, 0xb5, 0x93, 0xe5, 0x9d, 0x19, 0xab, 0x18, 0xd6, 0x3e, 0x0d, 0xb8, 0xde, 0xa9, 0x81, 0x82, 0x54, 0x12, 0x2a, 0x19, 0x1a, 0x5e, 0xad, 0x9d, 0xa0, 0xcd, 0x96, 0x80, 0x66, 0x75, 0xf7, 0x95, 0xbc, 0xef, 0x51, 0x6a, 0xcd, 0x50, 0xb8, 0xd8, 0xdb, 0x5a, 0x33, 0xd8, 0xcc, 0xf4, 0x62, 0x98, 0xe6, 0xd8, 0x63, 0xcf, 0xd7, 0x8c, 0xf5, 0x4d, 0xf8, 0x93, 0xde, 0xd6, 0xd2, 0xe4, 0x8b, 0x30, 0xe2, 0x9b, 0xf7, 0x7b, 0x99, 0xef, 0xce, 0xc1, 0xa7, 0x64, 0xd1, 0xce, 0x79, 0x41, 0x7c, 0x42, 0x00, 0x45, 0xe6, 0xe4, 0xb5, 0x96, 0xea, 0x39, 0xda, 0xfa, 0x84, 0x56, 0x02, 0x49, 0x7d, 0xf2, 0xd3, 0x23, 0x4b, 0xbf, 0x0b, 0xde, 0x33, 0xfb, 0xc1, 0xc2, 0xb0, 0x41, 0xee, 0x79, 0x18, 0xa6, 0x2b, 0xc1, 0x7d, 0x01, 0xbc, 0x64, 0xd1, 0x8a, 0xce, 0x6a, 0x4e, 0xa7, 0xfd, 0x8d, 0x15, 0x02, 0x19, 0xed, 0x16, 0xdf, 0x2a, 0x05, 0x2f, 0xad, 0xb1, 0xde, 0x98, 0xda, 0x31, 0x82, 0x7e, 0xec, 0xee, 0xb4, 0xee, 0xce, 0xf5, 0xde, 0xf5, 0x67, 0x5c, 0x4b, 0x06, 0x71, 0xcb, 0x96, 0x9b, 0x89, 0x3c, 0x63, 0x1f, 0x82, 0xfe, 0x4c, 0x0c, 0xff, 0x00, 0x1f, 0x51, 0x41, 0x4c, 0x46, 0xf6, 0x3d, 0xd2, 0x86, 0x02, 0xf2, 0x67, 0xed, 0x9d, 0xf9, 0x0d, 0x05, 0x72, 0x5e, 0x75, 0x4e, 0x57, 0xae, 0xc2, 0xeb, 0x30, 0x51, 0x90, 0x9c, 0x10, 0x1a, 0x35, 0xec, 0xa2, 0x1d, 0x46, 0xac, 0xc8, 0xc1, 0x5e, 0x9f, 0x81, 0x16, 0x1a, 0x77, 0x10, 0x68, 0x68, 0x00, 0x5b, 0x14, 0x02, 0x9c, 0x91, 0x9a, 0x35, 0xef, 0x0f, 0xf4, 0xe7, 0xdb, 0x85, 0x26, 0xd8, 0xaf, 0x54, 0x17, 0x28, 0x9b, 0x3b, 0x9f, 0x1a, 0x68, 0x33, 0xe1, 0x17, 0x65, 0x97, 0xdb, 0xf6, 0xa5, 0x88, 0x3b, 0x7a, 0x67, 0x90, 0x74, 0x1c, 0xd6, 0x85, 0x12, 0x0b, 0xf3, 0xb1, 0x4a, 0x72, 0xcf, 0x2f, 0xd6, 0xf9, 0xfd, 0x98, 0x00, 0x8e, 0x47, 0xe0, 0xfc, 0x65, 0xa0, 0x7a, 0x7a, 0x3d, 0x5a, 0xc3, 0x7c, 0xe6, 0x99, 0x9d, 0x65, 0x00, 0x08, 0x5a, 0x53, 0x05, 0xca, 0xdd, 0xaf, 0x8a, 0xb4, 0xfb, 0x03, 0xc1, 0xb9, 0x27, 0x0b, 0x43, 0xa5, 0x4f, 0x0e, 0x0c, 0x0f, 0x01, 0x6e, 0xc7, 0x88, 0xd2, 0x7f, 0x4d, 0x19, 0x00, 0x95, 0x68, 0xed, 0x56, 0x61, 0xdc, 0x4a, 0x50, 0x7d, 0xa8, 0xc6, 0x80, 0x45, 0x89, 0xb7, 0x30, 0xe9, 0xc0, 0xeb, 0x49, 0xc0, 0x15, 0x99, 0x74, 0xdf, 0x1c, 0x98, 0x7e, 0xeb, 0xb7, 0xcf, 0x01, 0x2b, 0xdc, 0xed, 0x41, 0xe1, 0x98, 0x5a, 0x54, 0xdb, 0x54, 0x6d, 0x86, 0x45, 0x58, 0xdf, 0xfb, 0xc1, 0x8d, 0x7f, 0x96, 0xba, 0x87, 0x28, 0x1a, 0xf4, 0xc2, 0xf0, 0x8f, 0x68, 0x2c, 0xa3, 0xe8, 0x50, 0xe4, 0x70, 0xe2, 0x7e, 0x42, 0xe1, 0x2f, 0xf1, 0x17, 0x11, 0xd4, 0xaa, 0x36, 0x19, 0xd0, 0xbc, 0x33, 0xcb, 0xfe, 0xa3, 0x6a, 0xa3, 0x3c, 0xd6, 0x43, 0xfa, 0xcd, 0xa0, 0xb5, 0x7d, 0xfc, 0x2b, 0x09, 0xde, 0x02, 0xde, 0xe1, 0xc9, 0x2a, 0xe8, 0x78, 0x1a, 0x33, 0x1d, 0x2b, 0x4d, 0xf6, 0x02, 0x39, 0x35, 0x49, 0x23, 0xc7, 0xf1, 0x22, 0xad, 0x27, 0x1d, 0x00, 0x38, 0x59, 0x45, 0x86, 0xe5, 0xd2, 0x9f, 0x69, 0xa9, 0x7d, 0xf9, 0x8d, 0xe8, 0x00, 0xf0, 0x6b, 0x46, 0x40, 0x63, 0xb6, 0xba, 0x27, 0x27, 0x3e, 0xe4, 0xa5, 0xfc, 0x14, 0xa0, 0xf4, 0xc0, 0xef, 0xdb, 0x21, 0xe3, 0xce, 0xa5, 0xc8, 0x1b, 0xdf, 0x88, 0x1f, 0x59, 0xa0, 0x18, 0x35, 0xfb, 0x44, 0xcc, 0x7c, 0x43, 0x58, 0x0c, 0x86, 0x08, 0xa6, 0x8b, 0x0c, 0xab, 0x5a, 0xd7, 0x34, 0x4d, 0x63, 0x2f, 0x13, 0x3f, 0x1c, 0x94, 0x71, 0xba, 0x2c, 0x22, 0xcd, 0xd1, 0xab, 0xa1, 0xa1, 0xa3, 0x86, 0x58, 0xe8, 0xd5, 0x24, 0x21, 0xdc, 0x40, 0x49, 0xc3, 0x04, 0xe6, 0x3b, 0x7b, 0x6e, 0x2b, 0x24, 0xdc, 0x3a, 0x42, 0xb8, 0xda, 0x58, 0xe5, 0x17, 0x21, 0x91, 0x49, 0xf5, 0xab, 0xcc, 0x51, 0xf8, 0x91, 0x8a, 0x02, 0x61, 0x21, 0xb4, 0x37, 0xef, 0x32, 0x96, 0x95, 0x00, 0xb4, 0x2b, 0xc2, 0xfa, 0x8b, 0x9b, 0xd2, 0xe9, 0x9e, 0x02, 0x02, 0x6a, 0x2a, 0x73, 0xa9, 0xc7, 0x5d, 0x3d, 0x6b, 0x63, 0x20, 0x6c, 0xb0, 0x59, 0x34, 0x93, 0x54, 0x60, 0x80, 0xc9, 0xa1, 0xf2, 0xa9, 0xf2, 0x7a, 0xad, 0xe4, 0x40, 0xd8, 0xf9, 0x08, 0xf9, 0x7b, 0xeb, 0xe8, 0x7a, 0xd9, 0x69, 0xdf, 0x7c, 0x5b, 0x8f, 0xac, 0x96, 0xc8, 0x52, 0x80, 0x03, 0x01, 0x63, 0x56, 0xa6, 0xf0, 0x56, 0x83, 0x4b, 0xbb, 0x04, 0x8e, 0x30, 0x3d, 0x2e, 0x41, 0xc4, 0xb6, 0x63, 0x00, 0xae, 0xc1, 0x23, 0x5a, 0x11, 0x87, 0x44, 0xde, 0x0e, 0x33, 0x95, 0x30, 0x8b, 0xa6, 0xc2, 0x5c, 0x33, 0x6b, 0x77, 0x69, 0xbe, 0xed, 0xc8, 0x32, 0x73, 0xe7, 0xd1, 0x71, 0xeb, 0x1d, 0x99, 0x1d, 0x17, 0x4a, 0x3d, 0xf6, 0x85, 0x59, 0x4a, 0x5e, 0xde, 0xd7, 0x6a, 0x6a, 0xb4, 0xa9, 0x43, 0x39, 0x7a, 0xfa, 0x9c, 0x84, 0xd4, 0x78, 0xc1, 0x77, 0x12, 0xc0, 0x29, 0xbf, 0xf6, 0x16, 0x57, 0xe5, 0xbe, 0x5a, 0xfe, 0xda, 0x5e, 0x37, 0x68, 0xd3, 0x0e, 0x9e, 0x18, 0x56, 0x04, 0x73, 0xaf, 0x95, 0x83, 0x86, 0x0c, 0xfc, 0x14, 0xc4, 0xb7, 0x06, 0x14, 0xaf, 0x80, 0x54, 0x6e, 0x0b, 0x63, 0x00, 0xaa, 0xda, 0xaf, 0x2f, 0x27, 0x8b, 0x68, 0xe5, 0xa4, 0x6f, 0xe9, 0x1e, 0x05, 0x6c, 0xcd, 0x1a, 0x54, 0xf5, 0x10, 0xf8, 0x07, 0x39, 0x72, 0x86, 0x81, 0x9b, 0x1c, 0x58, 0xdb, 0x63, 0x86, 0x17, 0xe3, 0xb3, 0x98, 0x1c, 0x65, 0xbc, 0x10, 0x3d, 0xaa, 0x31, 0x23, 0xe7, 0x3f, 0xfc, 0x67, 0x6e, 0xf7, 0x31, 0xf0, 0xa0, 0x33, 0x40, 0xb9, 0xa0, 0x61, 0x6e, 0x46, 0xf2, 0xc3, 0x86, 0x88, 0xd2, 0x72, 0xcb, 0x01, 0xca, 0xa2, 0x32, 0x29, 0x83, 0x27, 0xce, 0x0f, 0xdc, 0x39, 0x8c, 0x43, 0x39, 0x74, 0x20, 0xf4, 0x1d, 0x22, 0x3f, 0x56, 0xfc, 0xbd, 0x0f, 0x46, 0x4a, 0xb0, 0xdc, 0x31, 0xd8, 0x5e, 0x0c, 0x32, 0x60, 0x65, 0x55, 0x7a, 0x5f, 0x24, 0x2d, 0xf5, 0x22, 0x7b, 0x82, 0x2b, 0x24, 0xd1, 0xac, 0x64, 0x97, 0x5c, 0xa0, 0x0f, 0x41, 0x9c, 0x66, 0x64, 0x89, 0x29, 0xcd, 0x49, 0xd2, 0xaf, 0x5d, 0x72, 0x07, 0x37, 0x8d, 0xcd, 0x77, 0xa8, 0x36, 0x1d, 0xe4, 0x8d, 0x48, 0xe4, 0xd6, 0x18, 0xbc, 0x87, 0x35, 0x67, 0xc9, 0xad, 0x17, 0x07, 0x5b, 0xe8, 0xd7, 0xb7, 0xc1, 0x97, 0x67, 0x6e, 0xa5, 0x0b, 0xe7, 0x9f, 0x42, 0xe8, 0x76, 0xbb, 0xd1, 0xce, 0x48, 0xf8, 0x44, 0x39, 0xf8, 0x51, 0x37, 0xa6, 0x20, 0xcd, 0x24, 0xf8, 0x28, 0x05, 0xd6, 0x19, 0x5b, 0xe0, 0x20, 0xe4, 0x40, 0xa2, 0xce, 0x43, 0x27, 0x25, 0xdc, 0x94, 0x02, 0x65, 0xe6, 0x52, 0x76, 0x43, 0xe0, 0xf1, 0x32, 0x82, 0x07, 0x09, 0x80, 0x16, 0x17, 0xb7, 0x19, 0x9e, 0xbf, 0x41, 0x3e, 0x2f, 0x52, 0xf8, 0x04, 0x53, 0xbf, 0x63, 0xf0, 0x51, 0xc3, 0x99, 0xc3, 0xaf, 0x5d, 0xef, 0x97, 0xf6, 0x83, 0xd3, 0x2b, 0xb5, 0x13, 0xf8, 0x7c, 0xc8, 0x0c, 0xb4, 0x95, 0xda, 0xfe, 0xa6, 0xa7, 0x29, 0xbf, 0x9b, 0x5c, 0x89, 0x60, 0xb2, 0x69, 0xac, 0x5f, 0xbf, 0x63, 0xa0, 0x1e, 0xee, 0xd3, 0x99, 0x94, 0xa9, 0x8c, 0xf1, 0x43, 0xbb, 0x3c, 0x6d, 0x6a, 0xb5, 0x42, 0xc2, 0x7b, 0x90, 0xbf, 0x58, 0xcf, 0x95, 0xf0, 0x4d, 0x99, 0x7a, 0xbb, 0xbd, 0x19, 0xce, 0x87, 0x41, 0x12, 0x97, 0x51, 0xb5, 0x7d, 0x39, 0xfc, 0x3f, 0x7f, 0x99, 0xe9, 0x8c, 0x99, 0x83, 0xc8, 0x5d, 0x1f, 0x49, 0xae, 0x43, 0xeb, 0xad, 0x67, 0xa6, 0x52, 0x01, 0x0d, 0x0c, 0x57, 0x8d, 0xd9, 0x98, 0x1f, 0x31, 0x3a, 0xd1, 0xa5, 0x4c, 0x24, 0xa6, 0xaf, 0xdc, 0xab, 0xae, 0x01, 0xe6, 0xd0, 0xb4, 0xd0, 0x18, 0x9b, 0x72, 0x79, 0xad, 0x6a, 0x9d, 0x73, 0x91, 0x88, 0x22, 0x82, 0xc5, 0x01, 0xb0, 0x2e, 0x06, 0xb5, 0x76, 0x74, 0xa9, 0xac, 0x2e, 0xbb, 0xca, 0xa9, 0x5a, 0x0a, 0xa5, 0x02, 0xcd, 0x77, 0x44, 0xae, 0x6e, 0xe3, 0x5b, 0xa0, 0x39, 0xe4, 0x70, 0x53, 0x86, 0x03, 0x3e, 0xa7, 0x8e, 0x28, 0x5c, 0xeb, 0x2b, 0x52, 0x1a, 0x3b, 0xdf, 0x8b, 0xac, 0x0c, 0x18, 0x1c, 0x8a, 0x05, 0xb2, 0xfd, 0x16, 0x11, 0xbe, 0x8f, 0x7f, 0xb2, 0x82, 0x8d, 0xe6, 0x98, 0xc0, 0x40, 0xc0, 0x72, 0x3c, 0xf3, 0x7c, 0x04, 0x78, 0xa7, 0x65, 0x79, 0xc2, 0x08, 0xc9, 0xfb, 0x70, 0x9f, 0x5b, 0x82, 0x6b, 0x48, 0xd6, 0xe9, 0xea, 0xe7, 0xe3, 0x47, 0x80, 0x57, 0x3d, 0x7c, 0x59, 0xa3, 0x13, 0x0a, 0xc1, 0x79, 0xae, 0x27, 0xe5, 0xdb, 0x53, 0x10, 0xde, 0x18, 0x6b, 0x9f, 0xeb, 0xfb, 0xe1, 0x20, 0xfe, 0x42, 0xcc, 0x61, 0x7b, 0x51, 0x4e, 0x08, 0x3c, 0x28, 0xbb, 0x29, 0xd8, 0x93, 0xfe, 0x18, 0x25, 0xa0, 0x39, 0x7c, 0xfb, 0x56, 0xac, 0xa5, 0x3b, 0xa4, 0xd8, 0x20, 0x10, 0x98, 0xe4, 0x88, 0x75, 0xd2, 0x3f, 0x9e, 0xf8, 0x37, 0x87, 0x9c, 0xbd, 0xea, 0xaa, 0xc7, 0xc5, 0x78, 0x4b, 0x44, 0x70, 0x52, 0x67, 0x2c, 0x41, 0x81, 0x38, 0xe3, 0xe2, 0x95, 0x59, 0xa5, 0x68, 0xde, 0x2c, 0x61, 0xd7, 0xdf, 0x79, 0xcb, 0xe9, 0x00, 0x57, 0xad, 0x0b, 0x83, 0x50, 0x7d, 0xa9, 0xb9, 0xc0, 0x35, 0xab, 0x76, 0x7e, 0x5f, 0x40, 0xc2, 0xbe, 0x6f, 0xda, 0xd1, 0x36, 0x56, 0x7a, 0x36, 0x80, 0x54, 0x2d, 0x53, 0xc0, 0x0e, 0xd6, 0x14, 0x86, 0xe0, 0x2f, 0xdd, 0xf6, 0x74, 0x0b, 0xc0, 0x26, 0x94, 0xde, 0xf4, 0xc7, 0x3c, 0x7e, 0x82, 0x08, 0xf4, 0x2b, 0x42, 0xb7, 0x5c, 0xce, 0x06, 0xa9, 0x09, 0x7e, 0x15, 0x5d, 0x8f, 0x48, 0xdb, 0xdc, 0xdf, 0x30, 0xde, 0xe3, 0xd4, 0x73, 0xf4, 0x44, 0x08, 0x0f, 0xb4, 0x8a, 0xec, 0x85, 0x2a, 0xdc, 0x18, 0xde, 0xcf, 0x24, 0xdf, 0xec, 0xb7, 0x70, 0x27, 0xd2, 0x0d, 0x98, 0x77, 0xc7, 0xbd, 0x21, 0x52, 0x16, 0x70, 0x61, 0xc4, 0x69, 0xbd, 0xe4, 0x3a, 0x48, 0x9d, 0x0f, 0x97, 0xdd, 0x20, 0x03, 0x83, 0xfa, 0x5f, 0xc4, 0x06, 0x5d, 0xb2, 0x9b, 0x57, 0x32, 0x23, 0xb8, 0xee, 0xd9, 0x22, 0x1c, 0xe0, 0xea, 0x7a, 0xb6, 0x6c, 0x76, 0x83, 0xcc, 0xd1, 0x90, 0x99, 0x9d, 0x63, 0x0c, 0xce, 0x45, 0xde, 0x87, 0xdc, 0xe0, 0xfa, 0xa8, 0x5e, 0xf2, 0x40, 0xa4, 0x3f, 0x07, 0x1b, 0x08, 0x72, 0x96, 0x32, 0xb3, 0xe3, 0x2b, 0xf5, 0x21, 0xae, 0xc5, 0x76, 0xf0, 0x90, 0x7d, 0x7b, 0x9c, 0x9a, 0x69, 0xd1, 0x8e, 0x2d, 0xc0, 0xe3, 0x55, 0x22, 0x3f, 0x8b, 0x33, 0x49, 0xcb, 0x27, 0xdb, 0x15, 0x57, 0xf0, 0x79, 0x95, 0x08, 0x87, 0xf3, 0xa6, 0x97, 0xd1, 0x6e, 0x68, 0xf8, 0x05, 0x15, 0xee, 0x39, 0x03, 0x15, 0x3a, 0xac, 0xe8, 0xec, 0x68, 0x48, 0xdf, 0xe4, 0x29, 0x4d, 0x3a, 0xda, 0x73, 0x27, 0xc1, 0x44, 0x77, 0x95, 0x49, 0x73, 0xd4, 0x0a, 0x89, 0x15, 0x0a, 0x54, 0x2a, 0xfd, 0x31, 0x7b, 0x1d, 0x27, 0xeb, 0xec, 0x31, 0xf6, 0x97, 0xd6, 0xe5, 0xc1, 0xc7, 0xd5, 0x7a, 0x8e, 0xf4, 0xce, 0x4d, 0x1d, 0x71, 0x1a, 0x64, 0x29, 0x9e, 0xe6, 0x47, 0xea, 0x5e, 0xd9, 0x11, 0xde, 0xcb, 0xf8, 0xc6, 0xc9, 0x28, 0xc7, 0xe7, 0xfb, 0x16, 0xb1, 0x44, 0xd1, 0x0b, 0xaa, 0x12, 0x7e, 0x01, 0x13, 0x3d, 0x0b, 0x6b, 0xde, 0x00, 0x9d, 0x6d, 0xf2, 0xb2, 0xf7, 0x4c, 0xd1, 0xe3, 0x3f, 0x24, 0x78, 0xa7, 0x05, 0xd9, 0x87, 0x32, 0x81, 0x4f, 0xa1, 0xa5, 0x1c, 0xde, 0x16, 0x28, 0x33, 0x00, 0xbf, 0x39, 0x17, 0x4d, 0x2a, 0x43, 0x58, 0xaa, 0xf7, 0x73, 0x43, 0xbd, 0x82, 0xc7, 0xa9, 0xa4, 0xc3, 0x68, 0xe2, 0xe6, 0x72, 0x39, 0x12, 0xa9, 0x6e, 0xb0, 0xab, 0x26, 0x5f, 0xe5, 0x33, 0x5b, 0x9a, 0xe8, 0x48, 0xff, 0x46, 0x58, 0xe1, 0xbb, 0xbd, 0x31, 0xd6, 0x97, 0x35, 0xe6, 0xa3, 0xb3, 0xa0, 0xb0, 0x69, 0x37, 0xd1, 0x25, 0x35, 0x8c, 0xdf, 0x0c, 0x85, 0xcd, 0xce, 0x70, 0x08, 0x78, 0x6c, 0xf3, 0xa6, 0x6a, 0x7a, 0x65, 0xc0, 0x0a, 0x0c, 0x95, 0xb9, 0xc4, 0x33, 0x67, 0xb5, 0xb9, 0xd8, 0x27, 0xa0, 0xb4, 0xeb, 0x1d, 0x73, 0x60, 0xbe, 0x62, 0xb2, 0xb9, 0xab, 0xf2, 0x39, 0xc1, 0xfd, 0x01, 0x39, 0x74, 0x0e, 0x93, 0x7e, 0xfd, 0xac, 0x47, 0xf3, 0x2a, 0xc1, 0x73, 0x67, 0x1e, 0x33, 0x76, 0x91, 0x46, 0x0a, 0x4a, 0x52, 0x8e, 0xd1, 0x59, 0x3b, 0xd4, 0x3e, 0x92, 0x4f, 0x9c, 0x15, 0xbb, 0x0a, 0x06, 0x49, 0x09, 0xa2, 0xfe, 0x64, 0xee, 0x8c, 0xb3, 0x2a, 0x32, 0x42, 0x4a, 0x79, 0x45, 0x44, 0xd3, 0x74, 0xd4, 0x5c, 0x7c, 0xe1, 0x9a, 0x27, 0x04, 0xce, 0x79, 0xd1, 0x73, 0x7b, 0xc9, 0x20, 0x09, 0x74, 0xf0, 0xb4, 0x74, 0xfe, 0x32, 0x8d, 0x46, 0xb4, 0xcb, 0xcd, 0xa5, 0x72, 0x3b, 0xbf, 0x44, 0x72, 0xe2, 0x19, 0x93, 0xb5, 0xcc, 0x7e, 0x33, 0xa5, 0xce, 0x47, 0xad, 0xf8, 0xd2, 0x83, 0x63, 0xd7, 0x6f, 0x3c, 0xc7, 0x40, 0xbd, 0xfd, 0xca, 0xa9, 0x67, 0x90, 0x98, 0xe6, 0x01, 0x0c, 0x82, 0x4c, 0x9c, 0x10, 0x3b, 0x17, 0x98, 0x49, 0x48, 0x09, 0xba, 0x3a, 0xb2, 0x54, 0x7e, 0x3c, 0xfe, 0xba, 0xaf, 0xc3, 0x5e, 0xf3, 0x34, 0xe4, 0x29, 0x4f, 0x2d, 0x14, 0x89, 0x9c, 0x3f, 0x33, 0x74, 0x4a, 0x2b, 0xc9, 0xdd, 0xcd, 0xa6, 0x8f, 0x2b, 0x43, 0x65, 0x31, 0xea, 0x57, 0x77, 0x52, 0xc0, 0x65, 0xd7, 0xd0, 0xa3, 0xdf, 0x42, 0x4a, 0x4a, 0xef, 0x46, 0xe0, 0xe1, 0x5d, 0x9c, 0x3a, 0x01, 0xb4, 0xb7, 0xcc, 0xdf, 0xa0, 0x9d, 0x58, 0xc4, 0x9b, 0xf6, 0xb4, 0xbd, 0xc8, 0x62, 0xcd, 0x93, 0x1f, 0x10, 0xec, 0xfd, 0xcb, 0x8d, 0x38, 0x15, 0xd0, 0xd9, 0x7d, 0x09, 0xf1, 0xc0, 0x2b, 0x13, 0xd1, 0x67, 0xa2, 0xab, 0x58, 0x26, 0xac, 0xfb, 0x58, 0x95, 0x4b, 0x93, 0x71, 0xea, 0xb6, 0x5e, 0x32, 0x82, 0x9e, 0xd4, 0x80, 0xbd, 0xb5, 0x72, 0x3c, 0x0f, 0x71, 0x67, 0x20, 0x54, 0x0d, 0x91, 0xea, 0x64, 0xd2, 0xa7, 0xbd, 0xe8, 0x94, 0xb8, 0xc4, 0x6c, 0x7f, 0xd4, 0x18, 0xb5, 0x14, 0x09, 0xe4, 0x54, 0x6e, 0x91, 0xc7, 0x7b, 0xca, 0x49, 0x79, 0x10, 0x46, 0x65, 0xb2, 0x00, 0xe9, 0x62, 0x47, 0xd6, 0xe4, 0x3d, 0x96, 0x8c, 0x17, 0xe3, 0x25, 0xa0, 0xd7, 0xe8, 0x86, 0x6b, 0xef, 0x7b, 0x7e, 0xaf, 0xe4, 0x9a, 0x66, 0x6f, 0x7e, 0x82, 0xd0, 0x03, 0x83, 0x6a, 0x6e, 0x6b, 0xc6, 0x70, 0x30, 0xe4, 0x60, 0xd4, 0xad, 0xb9, 0x3e, 0x64, 0xc4, 0x5c, 0xdc, 0x37, 0x83, 0xb5, 0x4f, 0x9e, 0x47, 0xba, 0x89, 0x58, 0x25, 0x40, 0xd9, 0x05, 0x89, 0x10, 0xb1, 0xdd, 0x1d, 0x3e, 0xac, 0xa2, 0xed, 0xb6, 0xcf, 0xd3, 0xc8, 0x18, 0x10, 0x23, 0xe9, 0xc6, 0x14, 0x2a, 0xd7, 0x3b, 0x3d, 0x59, 0x89, 0x9e, 0xe4, 0x33, 0xce, 0x96, 0xe3, 0xba, 0xec, 0x61, 0x57, 0x28, 0x87, 0x20, 0xa4, 0xe0, 0xc5, 0x75, 0xb9, 0xa4, 0xb0, 0x50, 0x95, 0x08, 0xdc, 0x06, 0x09, 0x27, 0x49, 0xa4, 0xc0, 0x94, 0x8a, 0x82, 0x7e, 0x94, 0x27, 0x1b, 0xa5, 0x8a, 0x41, 0x1b, 0xfd, 0xb2, 0x74, 0xba, 0xb4, 0x12, 0x02, 0x49, 0xa4, 0xae, 0x2d, 0x0a, 0xd5, 0xfc, 0xe4, 0x45, 0x43, 0x97, 0xa2, 0x98, 0xe1, 0x37, 0x94, 0x8f, 0xdd, 0xe1, 0xfa, 0x75, 0x26, 0x5b, 0xcf, 0x69, 0x2c, 0xe3, 0xac, 0xb4, 0xe7, 0x20, 0xea, 0x59, 0x1a, 0x59, 0x07, 0xee, 0xd9, 0xe5, 0x4a, 0xab, 0x49, 0xe3, 0xaa, 0xc1, 0xa7, 0x2b, 0xed, 0xec, 0x8b, 0x84, 0x0d, 0x4c, 0x6e, 0x17, 0xdf, 0x71, 0x6a, 0x23, 0xf6, 0xb5, 0x42, 0xf3, 0xc6, 0xce, 0xa2, 0x0d, 0x05, 0xa3, 0xa8, 0xad, 0x57, 0x5f, 0xa2, 0x71, 0x29, 0xc4, 0x1a, 0x56, 0xdd, 0xc3, 0x10, 0xe3, 0x28, 0x49, 0x86, 0xa4, 0xb9, 0x5b, 0x42, 0xda, 0x1c, 0x65, 0xcf, 0x71, 0xdd, 0xcf, 0xc5, 0x32, 0xf0, 0xd2, 0x4a, 0x3a, 0x50, 0x8a, 0xd9, 0xab, 0xe7, 0x4c, 0x42, 0xa1, 0xae, 0x39, 0xf2, 0x68, 0x15, 0x13, 0x75, 0xec, 0xa5, 0x50, 0x39, 0x70, 0xe4, 0x6d, 0x95, 0x83, 0x79, 0x85, 0x09, 0x30, 0x90, 0x22, 0xc8, 0x76, 0x80, 0x53, 0x73, 0xf8, 0xab, 0xff, 0x28, 0xf4, 0xa6, 0x78, 0xbb, 0x79, 0x9b, 0x53, 0x43, 0xd5, 0xeb, 0x78, 0xd9, 0x4d, 0x17, 0x75, 0x9c, 0x12, 0xe0, 0x18, 0xf9, 0x70, 0xad, 0x3c, 0x29, 0x47, 0x2e, 0xe3, 0xfa, 0xbf, 0x3f, 0x85, 0xd3, 0x38, 0x0f, 0xa8, 0xf2, 0x80, 0x81, 0xb1, 0xf9, 0x49, 0xd2, 0xfa, 0xa9, 0xda, 0x7d, 0x24, 0xed, 0x04, 0x5b, 0xaf, 0x1a, 0x58, 0x0f, 0xc7, 0x75, 0x97, 0xa1, 0x61, 0xf6, 0x6a, 0x69, 0x87, 0x4b, 0x53, 0x2f, 0xf0, 0x20, 0xe4, 0x90, 0xd4, 0x9e, 0x2f, 0xa3, 0xfe, 0x31, 0x7d, 0xdd, 0x23, 0x8f, 0x43, 0x32, 0x72, 0xf6, 0x51, 0x7d, 0x6c, 0xb4, 0x4d, 0x22, 0xf6, 0xed, 0x60, 0xf2, 0xad, 0x99, 0x2f, 0x4f, 0x79, 0xcc, 0x0d, 0x90, 0x65, 0x3a, 0x6e, 0xa7, 0xae, 0xfa, 0x9f, 0x00, 0x19, 0x8a, 0xb5, 0xad, 0x8a, 0x14, 0xc4, 0xc1, 0xd3, 0xef, 0x51, 0xf9, 0xca, 0x69, 0x09, 0xa2, 0x9e, 0xc4, 0xb3, 0xb6, 0x6b, 0x7e, 0x63, 0x49, 0x0b, 0xd6, 0xf0, 0x23, 0x30, 0x8b, 0xa9, 0xaf, 0xaf, 0xe7, 0x44, 0x14, 0x1f, 0xfc, 0x17, 0xa1, 0xa3, 0x2e, 0x8b, 0x6e, 0x04, 0xf1, 0xcd, 0x40, 0x03, 0xd4, 0xc6, 0xae, 0xed, 0xbf, 0x4e, 0x82, 0x6f, 0x78, 0x9c, 0x62, 0xac, 0x6c, 0x01, 0xb0, 0x8d, 0xad, 0xd7, 0xae, 0x58, 0x37, 0xb4, 0xe6, 0x85, 0x77, 0xe3, 0xc9, 0xcd, 0x0e, 0x14, 0x96, 0x83, 0xd2, 0x52, 0x7d, 0x27, 0x15, 0x36, 0x05, 0x39, 0x2b, 0x5a, 0xab, 0x4b, 0x26, 0x11, 0xcb, 0x5a, 0xe4, 0x55, 0xc4, 0x5e, 0x4c, 0x01, 0x58, 0x20, 0xd4, 0x41, 0x51, 0x4c, 0x46, 0x46, 0x6a, 0xc7, 0xc5, 0x3e, 0x6c, 0x42, 0x0b, 0x83, 0x98, 0x10, 0xf4, 0x12, 0x45, 0x34, 0x40, 0x40, 0xca, 0xbf, 0x94, 0xa8, 0x9e, 0x59, 0xc3, 0x68, 0xbe, 0x1d, 0x4c, 0x8d, 0x4f, 0xaa, 0x24, 0xcb, 0x85, 0x76, 0xb5, 0x72, 0xc3, 0x66, 0x26, 0x9d, 0x04, 0x9c, 0xdd, 0xac, 0x79, 0x91, 0x42, 0xf5, 0x73, 0x63, 0xc6, 0xb7, 0x84, 0x70, 0x25, 0x4f, 0xe1, 0x23, 0xe7, 0xaf, 0x0b, 0x0e, 0x2d, 0x0b, 0xaf, 0x39, 0xaa, 0xd5, 0xca, 0xba, 0xf0, 0xec, 0x10, 0x86, 0xed, 0x11, 0x8f, 0x87, 0xb5, 0x9a, 0x90, 0xef, 0x82, 0x6a, 0xbe, 0xcb, 0xf8, 0x20, 0x8a, 0xdb, 0xae, 0x8f, 0xcd, 0xa1, 0xeb, 0x6f, 0xaf, 0xb8, 0xad, 0x51, 0xc9, 0x67, 0xf0, 0xd9, 0x86, 0x76, 0x2c, 0x27, 0xcf, 0x40, 0x20, 0x96, 0xe7, 0x0a, 0xce, 0xa9, 0x93, 0x93, 0xc7, 0x42, 0x7f, 0xec, 0xa8, 0x15, 0xdd, 0x8a, 0xe5, 0x5d, 0x4f, 0x9a, 0xc5, 0xcd, 0x07, 0x94, 0xae, 0xca, 0x2c, 0x13, 0xa3, 0xd7, 0x80, 0xe4, 0x0b, 0x51, 0x41, 0x5d, 0xb4, 0x5c, 0x4d, 0xf0, 0x17, 0x1d, 0x89, 0x00, 0xde, 0x2a, 0x82, 0xf2, 0xa3, 0x3e, 0x55, 0x88, 0xfb, 0x32, 0xcd, 0x6a, 0xb3, 0x28, 0xcc, 0x06, 0x59, 0x0a, 0xec, 0x9a, 0xfe, 0x33, 0x65, 0x8f, 0x3b, 0x6b, 0x32, 0x09, 0x72, 0x19, 0x6f, 0xbc, 0x56, 0xb4, 0x06, 0x01, 0xae, 0x7b, 0x8a, 0x29, 0x56, 0x66, 0x63, 0x11, 0x86, 0x5c, 0x2c, 0xf6, 0x56, 0xa6, 0x59, 0x8b, 0x82, 0xa4, 0x1d, 0x49, 0x6b, 0xbe, 0x8b, 0x07, 0x5f, 0x9e, 0xfb, 0xca, 0x1a, 0x9c, 0xaf, 0xde, 0x8d, 0x7a, 0xb6, 0x26, 0xde, 0x52, 0x11, 0xb0, 0xaf, 0xcc, 0x15, 0x8c, 0xa3, 0x94, 0x10, 0xdf, 0x1e, 0x0c, 0x2f, 0x33, 0x4d, 0x3e, 0x9f, 0x11, 0x67, 0x14, 0xf3, 0xd2, 0x32, 0xcb, 0xc6, 0xb2, 0xc8, 0xa5, 0xa1, 0x26, 0x9b, 0xde, 0x1f, 0x70, 0xb7, 0xe2, 0x4e, 0x70, 0x47, 0xbd, 0x59, 0xbd, 0x5b, 0xd3, 0x64, 0xf4, 0xe8, 0xd1, 0xb8, 0x50, 0x10, 0xe3, 0x20, 0x7b, 0xa4, 0x28, 0x92, 0xa4, 0xe8, 0x63, 0x12, 0xd2, 0x96, 0xf3, 0xd4, 0x78, 0x25, 0x05, 0xa1, 0x49, 0x4a, 0x08, 0x7b, 0x4d, 0xc0, 0x61, 0x84, 0x35, 0x45, 0x60, 0x1c, 0xec, 0xe5, 0x73, 0x4a, 0x6e, 0x7a, 0x9a, 0x5d, 0xdd, 0x74, 0x1b, 0xd3, 0xd2, 0xd6, 0x77, 0x79, 0xf1, 0x81, 0x9c, 0xd4, 0xc0, 0xb5, 0x5c, 0xc0, 0xb9, 0xd5, 0x1e, 0x57, 0x9d, 0x6a, 0xd4, 0x14, 0x0c, 0x6b, 0x2d, 0x38, 0x53, 0xbc, 0x0b, 0x6d, 0x85, 0xf4, 0x37, 0xaa, 0xcd, 0x63, 0x54, 0x56, 0x02, 0x54, 0x11, 0xb0, 0x7c, 0x8f, 0xa3, 0x6e, 0x26, 0x22, 0x73, 0xa4, 0xd5, 0x61, 0x13, 0xe8, 0xd8 ],
- const [ 0xd9, 0xdb, 0x53, 0x5f, 0x11, 0xed, 0x31, 0xc9, 0x06, 0xaf, 0x44, 0xc6, 0xb1, 0x0a, 0x63, 0x1f, 0xc6, 0xb0, 0x04, 0xc2, 0x89, 0xa4, 0xb0, 0x66, 0xe3, 0xfc, 0xb4, 0x72, 0xb5, 0xe6, 0x1a, 0x1b, 0x6c, 0xe9, 0xd7, 0xcd, 0xd6, 0x6d, 0x46, 0xcd, 0x34, 0x7e, 0xd5, 0x1c, 0x90, 0xcd, 0xff, 0x9e, 0x50, 0xf7, 0x7a, 0x7b, 0x0c, 0x0a, 0xb1, 0xc6, 0x9d, 0x46, 0x74, 0x5d, 0x76, 0x20, 0xee, 0x10, 0x38, 0x8d, 0xd8, 0x05, 0x80, 0x7c, 0xed, 0x5a, 0x03, 0xa4, 0x9e, 0x0d, 0xde, 0x81, 0x06, 0x19, 0x27, 0x99, 0x20, 0xe2, 0xc8, 0x04, 0x38, 0xd3, 0x8d, 0x2b, 0x9f, 0x46, 0x7b, 0xd0, 0xa3, 0xa4, 0x64, 0x4f, 0xbe, 0xcd, 0xb8, 0x23, 0x0e, 0xba, 0x9e, 0xab, 0x05, 0x61, 0x43, 0x2e, 0x62, 0xd8, 0x72, 0x1e, 0x60, 0xbe, 0x66, 0x99, 0x2d, 0xd7, 0xdc, 0x35, 0x9d, 0xf6, 0x6c, 0xfd, 0x20, 0x20, 0x18, 0xb7, 0xf2, 0xee, 0x26, 0x69, 0x91, 0x33, 0x2b, 0x1b, 0x74, 0xdf, 0x69, 0xdd, 0xfa, 0x23, 0x5a, 0x0c, 0xa1, 0xd6, 0x8d, 0xd2, 0x78, 0x18, 0xb1, 0xec, 0xd7, 0x35, 0xf0, 0xb0, 0x4d, 0xcc, 0x7e, 0x4e, 0xda, 0x30, 0x71, 0x56, 0x5e, 0x0e, 0xd3, 0x7a, 0x52, 0x50, 0xf5, 0x96, 0xb6, 0x42, 0x07, 0xed, 0x4a, 0xf3, 0xe6, 0xb5, 0x01, 0xdf, 0x35, 0xd7, 0xb3, 0xca, 0xaf, 0xf0, 0x12, 0xef, 0xbb, 0x9b, 0xdf, 0x5a, 0x41, 0xf2, 0x5e, 0x93, 0xbd, 0x52, 0x07, 0x7c, 0x92, 0x5f, 0x7e, 0x7c, 0xa0, 0x48, 0xc5, 0xdd, 0x18, 0x4d, 0xb1, 0x73, 0x8f, 0x7e, 0x9a, 0x7f, 0x52, 0xc5, 0x57, 0xd2, 0xfa, 0x26, 0x69, 0x36, 0x40, 0x46, 0x77, 0x09, 0x12, 0x2a, 0xfb, 0x2b, 0xe6, 0x42, 0x3a, 0x1b, 0x4e, 0xa6, 0x79, 0x5c, 0xcc, 0x9f, 0x6e, 0x1e, 0xe8, 0x69, 0xf5, 0x1a, 0x81, 0x37, 0x04, 0xbe, 0x61, 0x78, 0xe1, 0x8a, 0x14, 0x59, 0x92, 0xba, 0xf9, 0x8b, 0x96, 0x25, 0x99, 0x46, 0xd2, 0x65, 0x38, 0x8e, 0xce, 0x38, 0xaa, 0xb5, 0x21, 0x26, 0x68, 0x21, 0x2a, 0x64, 0xe3, 0x4f, 0x01, 0xf9, 0x18, 0x18, 0xad, 0x1f, 0x65, 0x33, 0x98, 0xec, 0x9b, 0xfc, 0x40, 0x31, 0x54, 0x73, 0x2e, 0xa3, 0x87, 0x88, 0x2c, 0x38, 0x59, 0x96, 0xb3, 0xd4, 0x36, 0x2d, 0xa3, 0x25, 0x21, 0x14, 0x36, 0xcb, 0x48, 0x8e, 0x37, 0xbd, 0xdc, 0xdd, 0x6f, 0xe8, 0x1f, 0x05, 0x61, 0x19, 0xbf, 0xd2, 0x37, 0x1c, 0x62, 0x1c, 0xfb, 0x26, 0x82, 0x4a, 0x0a, 0x70, 0x7b, 0x15, 0xc6, 0x25, 0xe2, 0x8f, 0x8c, 0x7e, 0x19, 0x63, 0xe6, 0x2b, 0x20, 0x5e, 0x01, 0xf6, 0xae, 0x2e, 0x61, 0xa3, 0x81, 0x6a, 0xd3, 0x1a, 0xf2, 0xd3, 0xa3, 0xc8, 0xcc, 0xda, 0x10, 0x42, 0x5e, 0x62, 0xfd, 0x2b, 0xcf, 0xc6, 0xe9, 0x59, 0xb2, 0x1e, 0x21, 0x33, 0xda, 0xbe, 0x34, 0x5d, 0x70, 0x00, 0xa8, 0x98, 0x42, 0x44, 0xeb, 0xe3, 0x5e, 0x34, 0x8c, 0xe6, 0xe0, 0x4d, 0xab, 0x91, 0x08, 0x9b, 0xaf, 0x01, 0x90, 0xc3, 0x37, 0xa3, 0x3c, 0x47, 0x52, 0x9b, 0xb2, 0x06, 0xf2, 0x67, 0x8c, 0x02, 0x9e, 0xbf, 0xac, 0x66, 0x68, 0xc0, 0xcf, 0xc8, 0x1f, 0x4a, 0x65, 0xab, 0xc5, 0xa7, 0xa1, 0x48, 0x43, 0x6d, 0xcc, 0x8e, 0x5c, 0xa5, 0xde, 0x67, 0xe0, 0x2c, 0x4f, 0x3d, 0x22, 0x5a, 0x2b, 0xbd, 0xab, 0xe2, 0x65, 0xda, 0x30, 0xf9, 0x6d, 0x15, 0xc2, 0xbb, 0x04, 0xfc, 0x45, 0xca, 0x50, 0xf1, 0x23, 0x38, 0x2b, 0x2d, 0x42, 0xa7, 0xc1, 0x05, 0x33, 0xae, 0x5a, 0x6b, 0xac, 0x7f, 0x74, 0xb7, 0x38, 0xc7, 0x15, 0xa8, 0x2d, 0xd6, 0x5f, 0xa5, 0xde, 0x00, 0x65, 0x49, 0x13, 0x43, 0x3d, 0x1f, 0xb6, 0x2a, 0x57, 0xaa, 0xcf, 0xf0, 0x0c, 0xa9, 0xb3, 0xe9, 0x7a, 0x98, 0x77, 0x1e, 0x90, 0x7a, 0xab, 0x37, 0x65, 0xd6, 0x45, 0x9f, 0xce, 0x00, 0xdc, 0xe2, 0x2f, 0x99, 0x17, 0x5a, 0x91, 0x59, 0x64, 0x0a, 0xf5, 0x0c, 0xed, 0xca, 0xe8, 0xdb, 0xc8, 0xa5, 0x58, 0xcd, 0x6d, 0x7f, 0xa6, 0x8e, 0x6e, 0xfa, 0xfc, 0x6e, 0x62, 0x9b, 0xe1, 0xac, 0x22, 0x29, 0x0b, 0xf5, 0x39, 0x56, 0x74, 0x28, 0x95, 0xa2, 0xb0, 0x5c, 0x83, 0x7b, 0x7d, 0x24, 0xda, 0xa9, 0x9c, 0x12, 0x75, 0xe9, 0xdf, 0x79, 0xe7, 0xd8, 0x84, 0x77, 0x6b, 0x13, 0xc1, 0x33, 0x1a, 0x9d, 0xa0, 0x64, 0x61, 0x81, 0x0d, 0x13, 0xb1, 0xb8, 0x2d, 0xa1, 0x78, 0x4c, 0xf2, 0x0b, 0x51, 0xbe, 0xed, 0x6d, 0x77, 0xa6, 0x63, 0xc5, 0x80, 0x99, 0xa2, 0xfa, 0x48, 0x4f, 0x95, 0x1d, 0x2b, 0x05, 0x97, 0xee, 0x77, 0x21, 0x85, 0xa2, 0x20, 0x15, 0x17, 0xe3, 0xb6, 0x85, 0x70, 0x19, 0x95, 0xac, 0xf3, 0xe8, 0x5c, 0xfc, 0x59, 0xf9, 0xa0, 0x04, 0x00, 0xfe, 0xe1, 0x97, 0x86, 0xf0, 0xbc, 0x2b, 0x97, 0x9b, 0x63, 0x7f, 0x03, 0x5d, 0x4b, 0x81, 0x14, 0x2b, 0x24, 0x6e, 0x1e, 0xd4, 0x0e, 0x3b, 0x57, 0x8a, 0x0a, 0x34, 0xe9, 0x9e, 0xae, 0xe3, 0x46, 0x8b, 0x1e, 0x33, 0xbc, 0x36, 0x37, 0xd5, 0x49, 0x74, 0x0d, 0xe3, 0xb0, 0xcd, 0x98, 0xc3, 0xcc, 0x80, 0xaa, 0x4f, 0x25, 0xc6, 0x24, 0x32, 0xc1, 0x5b, 0x6a, 0x95, 0x3d, 0x3b, 0x14, 0xfc, 0x1c, 0xa9, 0xe7, 0x6a, 0x5e, 0x76, 0x03, 0xcc, 0x54, 0x80, 0x5d, 0x94, 0xb4, 0x79, 0x70, 0xa5, 0xe9, 0xea, 0x30, 0x6f, 0xac, 0x77, 0x40, 0x5b, 0xd8, 0x64, 0x64, 0x69, 0x7a, 0x58, 0x39, 0x17, 0x28, 0x61, 0x24, 0x86, 0x95, 0x39, 0x88, 0xd8, 0x62, 0xc8, 0x3c, 0xdc, 0x36, 0xe9, 0x3c, 0xed, 0x10, 0x71, 0x9e, 0x17, 0xdc, 0x6e, 0xc8, 0x7c, 0x45, 0xac, 0xe1, 0xf6, 0xcb, 0x7e, 0x85, 0xfe, 0x15, 0xba, 0xbd, 0xcd, 0x88, 0x06, 0x2e, 0xc0, 0x18, 0x52, 0x90, 0x01, 0x5e, 0xa6, 0x62, 0x64, 0xeb, 0x1e, 0xdc, 0x8f, 0xdd, 0x33, 0x26, 0x5e, 0xb0, 0x3b, 0xc7, 0x86, 0x56, 0x33, 0x60, 0x78, 0x89, 0xbd, 0x9a, 0x88, 0x60, 0x65, 0x5d, 0x4e, 0x20, 0x28, 0x43, 0x4c, 0x55, 0x37, 0x4c, 0xd2, 0x22, 0xf8, 0xd3, 0x1f, 0xd6, 0x4e, 0xc0, 0xc9, 0xbf, 0x1a, 0x00, 0x5f, 0x43, 0x02, 0x32, 0x4c, 0x2c, 0x71, 0xa3, 0xfe, 0x44, 0xde, 0x7d, 0x48, 0x22, 0x52, 0x3b, 0x05, 0x43, 0x24, 0x60, 0xff, 0x5d, 0x07, 0x69, 0x0f, 0xef, 0x48, 0x00, 0x85, 0x1d, 0x50, 0x72, 0xc9, 0xbb, 0x70, 0x63, 0x43, 0xa8, 0xde, 0xc1, 0x79, 0x5d, 0xfa, 0xf6, 0x77, 0xc5, 0xd6, 0x62, 0x74, 0x50, 0xf6, 0x08, 0xb2, 0x43, 0x54, 0x87, 0xa6, 0x52, 0xa7, 0x4d, 0x59, 0x70, 0xe5, 0x07, 0x0e, 0xe6, 0x07, 0x5b, 0x25, 0xa2, 0x0c, 0xda, 0x3f, 0xd2, 0x40, 0x30, 0xa3, 0xb2, 0xbe, 0x9e, 0xe1, 0xa2, 0x34, 0xab, 0xb5, 0x7c, 0xe6, 0x16, 0x2d, 0x24, 0xf6, 0x0e, 0x0e, 0x61, 0xe2, 0xa5, 0x75, 0xeb, 0x4e, 0x83, 0xba, 0xc5, 0x04, 0xd7, 0x99, 0xcc, 0x39, 0x94, 0x94, 0x91, 0x12, 0xd9, 0x93, 0x64, 0x66, 0xb0, 0xce, 0xb1, 0xc6, 0xfc, 0xec, 0x90, 0xba, 0xad, 0x6c, 0x97, 0x4e, 0x36, 0x45, 0xf2, 0xcd, 0x41, 0xc9, 0xb6, 0xcd, 0xa1, 0xcf, 0x73, 0x6b, 0x88, 0x11, 0x09, 0xd8, 0xfa, 0xd3, 0xbc, 0x15, 0x81, 0xc6, 0x8a, 0xfa, 0x23, 0x2b, 0xbb, 0x7d, 0x91, 0x3b, 0xbb, 0x31, 0xa1, 0xc7, 0x25, 0x0d, 0xfe, 0x1c, 0x20, 0x6f, 0x1e, 0x29, 0xee, 0x60, 0x75, 0xe4, 0xc2, 0x1a, 0xe9, 0xe9, 0xd2, 0xc8, 0x85, 0x64, 0xae, 0x8c, 0x71, 0x32, 0xd0, 0xc6, 0x22, 0x43, 0x74, 0x94, 0xce, 0x43, 0xaa, 0x95, 0x23, 0x79, 0xa9, 0xf3, 0x38, 0xef, 0x66, 0xa0, 0xc4, 0xd3, 0x65, 0xdf, 0x8e, 0x1d, 0xcf, 0x07, 0x24, 0x72, 0xc6, 0x83, 0xd0, 0x48, 0xf5, 0x1e, 0xc8, 0x4c, 0x6b, 0x7e, 0xa5, 0x00, 0xa9, 0xed, 0x16, 0xa9, 0xf9, 0x60, 0xd6, 0x68, 0x02, 0xb1, 0xdb, 0xa7, 0x9a, 0x30, 0xd1, 0xb6, 0xdb, 0x5a, 0xc6, 0xb6, 0x79, 0xe8, 0x27, 0xb7, 0x52, 0x0c, 0xeb, 0x1d, 0x47, 0xf7, 0x0e, 0x48, 0x4b, 0x9e, 0x41, 0x74, 0xb9, 0xbe, 0xe0, 0xdd, 0xeb, 0x1d, 0x24, 0x27, 0x08, 0x14, 0x9a, 0xfe, 0x1d, 0x4a, 0xd3, 0xfa, 0x70, 0xc2, 0x5d, 0xc5, 0x11, 0x18, 0xf3, 0x7f, 0xb1, 0x07, 0xf1, 0x61, 0xb7, 0x2f, 0x0b, 0xa1, 0x91, 0x15, 0x3d, 0x96, 0x48, 0x6c, 0x05, 0x1d, 0x58, 0x93, 0xd1, 0x3b, 0xbe, 0x5e, 0xb3, 0x04, 0x52, 0x19, 0x5c, 0xbb, 0x57, 0xca, 0x48, 0x3a, 0x51, 0xb7, 0x36, 0x94, 0x16, 0x28, 0xdb, 0xfa, 0x28, 0x6e, 0xd7, 0xdb, 0x42, 0x24, 0xe8, 0x4f, 0x31, 0xb5, 0x5e, 0xb6, 0xe5, 0x1f, 0xcf, 0x9c, 0xc8, 0xf6, 0x0b, 0xe1, 0x4f, 0xab, 0x52, 0x16, 0xce, 0x0e, 0xc5, 0x29, 0x90, 0x12, 0x1b, 0x45, 0x27, 0xd0, 0x95, 0xf4, 0x01, 0xcf, 0x34, 0x87, 0x3c, 0x83, 0x29, 0xb7, 0xbb, 0x13, 0x8d, 0x8c, 0x7a, 0x60, 0x52, 0x7e, 0x1e, 0x42, 0x7a, 0xdb, 0xd1, 0x14, 0x86, 0x68, 0x4c, 0x74, 0x32, 0x4b, 0x35, 0x44, 0x5f, 0x28, 0xac, 0xf4, 0x51, 0x8b, 0x21, 0x04, 0x1a, 0x86, 0x68, 0xc4, 0x56, 0x9b, 0x0f, 0x5f, 0x19, 0xdb, 0xef, 0x17, 0x26, 0x50, 0x01, 0xd2, 0x62, 0x99, 0x73, 0xd6, 0x88, 0xd4, 0xfb, 0xd1, 0x1d, 0xc1, 0x6c, 0x1c, 0xa7, 0x23, 0x87, 0x40, 0x1a, 0x6a, 0x13, 0xba, 0x93, 0x90, 0x30, 0xfb, 0x48, 0x41, 0xe8, 0xb3, 0xbf, 0x3e, 0x07, 0x4f, 0x3f, 0x03, 0x2c, 0xc0, 0x85, 0xa8, 0x21, 0x7f, 0xb7, 0x05, 0x68, 0xce, 0x9e, 0x19, 0x16, 0x40, 0x0f, 0xad, 0xe5, 0x7b, 0xaa, 0x34, 0x84, 0x3d, 0xc8, 0xf6, 0x31, 0x9d, 0xae, 0x6d, 0x8a, 0x94, 0x07, 0xef, 0xa0, 0xbb, 0x91, 0x8e, 0x4e, 0x56, 0x16, 0x3d, 0xc9, 0x92, 0x9e, 0x34, 0x77, 0x0b, 0xe3, 0x95, 0x05, 0x91, 0x05, 0x4f, 0xb4, 0x2c, 0x7f, 0x42, 0xf3, 0x5d, 0x5a, 0xa5, 0x33, 0xa7, 0xa0, 0xa5, 0xf7, 0x4e, 0x14, 0x4f, 0x2a, 0x5f, 0x20, 0xb0, 0xb6, 0xf0, 0x0f, 0x3b, 0x52, 0xa9, 0x7c, 0x6b, 0x9b, 0x84, 0x0a, 0xa9, 0x67, 0xd0, 0x56, 0x6f, 0x56, 0x7c, 0x2a, 0xae, 0xaa, 0x92, 0xf4, 0x6d, 0x58, 0x02, 0x76, 0xb3, 0x5e, 0xa1, 0xbe, 0xa8, 0x58, 0x71, 0x59, 0xf7, 0x4e, 0x23, 0xc4, 0x76, 0xd1, 0xda, 0x23, 0x09, 0x46, 0x32, 0x35, 0xc4, 0x81, 0x81, 0x88, 0x4f, 0x96, 0x5d, 0xe9, 0x8f, 0xeb, 0x5e, 0x1f, 0x82, 0x92, 0x24, 0xd9, 0x6b, 0xd6, 0x9c, 0xe4, 0x30, 0x14, 0x80, 0xa1, 0x00, 0xcd, 0x1d, 0xb7, 0x38, 0xf8, 0x59, 0x05, 0x88, 0x9d, 0xf4, 0xdb, 0x52, 0x9f, 0x0e, 0x69, 0x52, 0xda, 0xea, 0x77, 0x84, 0x6d, 0xf1, 0x57, 0x42, 0x59, 0xfa, 0x18, 0xad, 0x4c, 0xc8, 0xfd, 0x4f, 0xb7, 0xd4, 0x2d, 0xff, 0x26, 0x4d, 0xac, 0x04, 0xd1, 0x5e, 0x8a, 0x7d, 0x6e, 0xaf, 0x5b, 0x00, 0x4a, 0x2e, 0xe7, 0x81, 0x98, 0x0f, 0x22, 0x75, 0x09, 0x11, 0x5e, 0x38, 0x9d, 0x04, 0xbf, 0xac, 0xb8, 0x88, 0xef, 0x24, 0x78, 0x17, 0x14, 0x80, 0x46, 0x46, 0xff, 0x99, 0xab, 0x47, 0xa6, 0xdf, 0x65, 0xb3, 0xd5, 0x40, 0xbb, 0x86, 0x20, 0x4c, 0x0d, 0x6c, 0x1c, 0x97, 0xaf, 0x3b, 0xcf, 0x5f, 0xf8, 0xc0, 0x64, 0x6f, 0x95, 0xbe, 0x23, 0x43, 0x23, 0x34, 0xa1, 0x6d, 0xfe, 0xdf, 0x34, 0x38, 0x53, 0x00, 0xaa, 0x8a, 0x7d, 0x5f, 0x3b, 0x0f, 0x8e, 0x90, 0xbb, 0x93, 0x2b, 0x75, 0x15, 0xb0, 0x9e, 0x04, 0xf4, 0xaa, 0x26, 0x4a, 0xc3, 0x97, 0x91, 0xb0, 0xd8, 0xc3, 0x0d, 0x7e, 0xec, 0x52, 0x3c, 0x9d, 0xcf, 0x27, 0x86, 0xa1, 0x59, 0x05, 0xb3, 0x07, 0xa4, 0xf4, 0xb9, 0xba, 0x78, 0xe7, 0xd2, 0xdc, 0x07, 0x9b, 0xd2, 0xc4, 0xdb, 0xc2, 0xb8, 0x43, 0x0c, 0x61, 0x83, 0x2c, 0xb6, 0x77, 0x47, 0x13, 0xaa, 0xdf, 0x7f, 0x54, 0x64, 0x77, 0xa5, 0x58, 0x3e, 0x82, 0x00, 0x13, 0xe3, 0x4b, 0xbe, 0xd1, 0x05, 0x0c, 0x42, 0x33, 0x53, 0x0d, 0xbf, 0x74, 0xa5, 0x10, 0x06, 0xf1, 0x7a, 0xed, 0x9c, 0xe9, 0xa5, 0x7a, 0x10, 0x81, 0x43, 0xad, 0x8b, 0x0b, 0xf0, 0x05, 0xa9, 0x87, 0x3b, 0x25, 0x87, 0x6a, 0x57, 0xc3, 0x1e, 0x9f, 0x13, 0xc0, 0xcf, 0xcc, 0x0b, 0x98, 0x3e, 0xd6, 0x20, 0xfd, 0x64, 0xa7, 0x27, 0xbf, 0xe0, 0x2f, 0xde, 0xef, 0x8e, 0xa8, 0x24, 0x44, 0x5b, 0x1f, 0x69, 0xbd, 0x58, 0x30, 0x63, 0x88, 0x0d, 0x11, 0x02, 0x23, 0x0f, 0xd2, 0xa7, 0xc1, 0xd5, 0xe2, 0x91, 0xef, 0xc7, 0xd6, 0x97, 0x77, 0x98, 0x66, 0x1d, 0x85, 0xd6, 0xb8, 0x41, 0x08, 0xbf, 0xe2, 0x55, 0x5b, 0x57, 0xaa, 0x92, 0x25, 0xb7, 0x8f, 0x0a, 0x7e, 0xa8, 0x0e, 0xdf, 0x53, 0x70, 0x1e, 0xb3, 0x0b, 0xec, 0xfd, 0x5f, 0x6a, 0xdf, 0x2e, 0xe8, 0xb6, 0x8a, 0xc3, 0xaf, 0x19, 0x7d, 0xd8, 0xe7, 0x47, 0xac, 0x60, 0x4c, 0x60, 0xc5, 0x24, 0x12, 0x18, 0xc1, 0x08, 0x1c, 0x15, 0xba, 0x90, 0x6f, 0x99, 0xfc, 0xa4, 0xe6, 0x60, 0x5e, 0x90, 0x27, 0xcc, 0xd3, 0x4f, 0xd5, 0x3f, 0x3c, 0x09, 0x08, 0xc8, 0x80, 0xda, 0xfa, 0x03, 0xdf, 0xd5, 0x03, 0x3a, 0x83, 0x49, 0xc7, 0xd0, 0x58, 0x42, 0xae, 0xe0, 0x1e, 0x53, 0x94, 0x21, 0xbd, 0x93, 0xc2, 0x0d, 0xd8, 0xe6, 0x1d, 0x42, 0xa4, 0x7e, 0x9e, 0x28, 0xfb, 0xa1, 0x02, 0xd4, 0xac, 0xac, 0xc3, 0x2c, 0x16, 0x58, 0x46, 0x4c, 0xf5, 0x3c, 0x56, 0x29, 0x7b, 0x93, 0xd1, 0x74, 0xa3, 0x40, 0xa1, 0xc2, 0xc2, 0x0f, 0xee, 0xe9, 0x5e, 0x3e, 0x92, 0xad, 0x44, 0x3c, 0xce, 0x9c, 0xd5, 0xb0, 0x3b, 0x36, 0xa1, 0xbd, 0x03, 0x51, 0x37, 0x84, 0x50, 0xbc, 0x3a, 0xeb, 0x05, 0x23, 0xb8, 0x9d, 0xad, 0x32, 0xb8, 0x53, 0xb0, 0xfd, 0x12, 0x51, 0xcd, 0xa0, 0x84, 0x33, 0xc4, 0x22, 0x01, 0xe9, 0x53, 0xa0, 0x4c, 0x01, 0x64, 0xa7, 0xc6, 0x24, 0x85, 0xe1, 0x85, 0xe4, 0x98, 0xf4, 0xa5, 0xb5, 0xcc, 0xa7, 0xe3, 0x38, 0xcc, 0x47, 0x67, 0xc0, 0x36, 0x49, 0xe2, 0x0f, 0x4e, 0x30, 0xd9, 0x60, 0xf4, 0xb1, 0x41, 0xab, 0xd3, 0x15, 0x4b, 0x24, 0xdc, 0xe0, 0x81, 0x04, 0xf3, 0xb0, 0x12, 0x8d, 0xe7, 0x67, 0x6a, 0x48, 0xa8, 0x8c, 0x06, 0x92, 0xb4, 0xef, 0x87, 0x56, 0xd3, 0x8c, 0x05, 0x1c, 0x04, 0xb2, 0xa5, 0x43, 0xb7, 0x65, 0x6e, 0x8a, 0x3c, 0x00, 0x58, 0xd6, 0x7c, 0x1f, 0xa6, 0x2f, 0xe7, 0xbb, 0x76, 0x0b, 0xad, 0x97, 0x97, 0xcf, 0x31, 0xdb, 0x9a, 0x93, 0xbb, 0xff, 0x2c, 0x25, 0x6c, 0xeb, 0xa3, 0x51, 0x78, 0x5d, 0xd6, 0x60, 0x8f, 0x8a, 0x32, 0xdf, 0x9c, 0x08, 0x0a, 0xa2, 0xb2, 0xeb, 0x2f, 0x08, 0x43, 0x2f, 0xc1, 0x7f, 0x94, 0x56, 0x44, 0x4b, 0x6d, 0x51, 0xf6, 0x84, 0x15, 0xa4, 0x60, 0x5e, 0x7e, 0xc6, 0x2c, 0xae, 0xbc, 0xc6, 0x36, 0xa9, 0xbb, 0x34, 0xe6, 0xee, 0x32, 0x3f, 0xbc, 0xc7, 0xd3, 0x1b, 0x2c, 0xab, 0xc5, 0xa6, 0xad, 0x08, 0x53, 0x4a, 0x0d, 0x40, 0xe6, 0x25, 0x07, 0xf1, 0x30, 0x67, 0x17, 0x7a, 0xab, 0xfc, 0x8d, 0xbb, 0x42, 0x6c, 0xe1, 0x1c, 0x4d, 0xff, 0x46, 0xd0, 0xc3, 0x24, 0x81, 0x5b, 0xab, 0x13, 0xfc, 0x51, 0xd4, 0xb2, 0x16, 0x61, 0xc6, 0xb5, 0xbe, 0x93, 0xf8, 0x0a, 0x40, 0xce, 0x44, 0x74, 0x5e, 0x9d, 0x97, 0x76, 0xa3, 0x32, 0xed, 0x72, 0xf4, 0xac, 0x7d, 0x12, 0x68, 0x95, 0x30, 0xe7, 0x5a, 0xaf, 0x58, 0x50, 0xbc, 0xf0, 0x9f, 0x9e, 0xad, 0xcb, 0x3d, 0x75, 0x4e, 0xb1, 0x6f, 0x75, 0xd2, 0xd8, 0x24, 0x1a, 0xd5, 0x3b, 0xf9, 0xe1, 0xef, 0xe2, 0x67, 0xad, 0x88, 0x63, 0x3b, 0x68, 0xee, 0xa9, 0x47, 0xed, 0xa4, 0xf4, 0x58, 0x26, 0xfe, 0x21, 0x68, 0x71, 0xea, 0x2c, 0x14, 0x49, 0x11, 0xf3, 0x50, 0x22, 0x1f, 0x3c, 0x59, 0x94, 0x5e, 0xfa, 0xeb, 0xbc, 0x8a, 0xcc, 0xb5, 0xe0, 0xe1, 0xc7, 0x0a, 0x51, 0x79, 0x75, 0xd9, 0x96, 0xd6, 0x1d, 0xdf, 0xc6, 0xbc, 0x45, 0x1b, 0x36, 0x42, 0x76, 0x82, 0x54, 0x28, 0x3f, 0xf5, 0xd3, 0x6a, 0x7c, 0x70, 0x09, 0x15, 0xd9, 0x84, 0x95, 0x5a, 0x91, 0x07, 0x44, 0xe1, 0x7c, 0x0a, 0x36, 0x60, 0x48, 0x0b, 0x3c, 0x6b, 0x06, 0x6c, 0x85, 0x8e, 0xe9, 0x24, 0x7a, 0x99, 0x4b, 0xb5, 0xe6, 0x3b, 0xf1, 0x5e, 0x5a, 0xd2, 0x90, 0x91, 0xd0, 0x82, 0x90, 0xa7, 0x8e, 0x84, 0x0f, 0xd3, 0x4d, 0xc1, 0x29, 0x54, 0x9b, 0xa0, 0x77, 0xef, 0x7e, 0x1c, 0xd5, 0x9d, 0x5a, 0x19, 0x69, 0x81, 0x14, 0xf8, 0xe1, 0x1c, 0x78, 0x69, 0xfb, 0xc4, 0xd8, 0x80, 0x4b, 0x52, 0xf6, 0x0c, 0x39, 0x1c, 0x25, 0x24, 0x49, 0x23, 0xaa, 0x02, 0x9f, 0x8d, 0x68, 0x15, 0xc2, 0x55, 0xbd, 0x51, 0xa0, 0x41, 0xa7, 0xca, 0xd2, 0x14, 0x2b, 0x81, 0x22, 0x05, 0xf7, 0x7d, 0x4a, 0x71, 0x46, 0x1e, 0xff, 0xcd, 0x04, 0xaf, 0x2e, 0xde, 0x32, 0x3a, 0x86, 0x2c, 0x8d, 0xa0, 0x36, 0xb4, 0x6a, 0xe8, 0xf8, 0xdd, 0xe5, 0xd8, 0x4e, 0xad, 0x3a, 0xc2, 0x0b, 0x3d, 0x73, 0xa1, 0x16, 0x6a, 0x44, 0x65, 0x6b, 0xce, 0x33, 0x8a, 0x62, 0xef, 0xfb, 0xef, 0x34, 0xb5, 0x33, 0xe6, 0xbb, 0x22, 0x2b, 0x87, 0x79, 0x3d, 0x17, 0x4b, 0xdc, 0x4f, 0x6f, 0xd6, 0xc0, 0x52, 0x95, 0x13, 0x36, 0xa7, 0xb9, 0x86, 0x84, 0x07, 0xfa, 0xde, 0x6d, 0xbc, 0xcd, 0xca, 0xb2, 0x11, 0xa3, 0x0e, 0xd8, 0x07, 0xc6, 0xd6, 0x2c, 0x49, 0x84, 0x4a, 0x05, 0x62, 0x90, 0x62, 0x49, 0x2e, 0xa5, 0xfc, 0x32, 0x8e, 0x6c, 0x2c, 0x52, 0x60, 0xa0, 0xd3, 0xd5, 0xaf, 0x70, 0x73, 0x07, 0x26, 0x25, 0x41, 0x16, 0xcb, 0x04, 0x7c, 0x18, 0xea, 0x76, 0xfe, 0x4f, 0x4e, 0x66, 0x11, 0xac, 0xb7, 0xeb, 0x83, 0x93, 0x89, 0x27, 0xfd, 0xde, 0xc2, 0x6f, 0x90, 0x24, 0x2e, 0xab, 0x91, 0x3b, 0xde, 0x00, 0xa7, 0xfb, 0xd6, 0xad, 0x22, 0x45, 0x06, 0x33, 0x8e, 0x44, 0x7c, 0xb9, 0x88, 0xf3, 0xd7, 0xae, 0xd1, 0xe0, 0xff, 0xb0, 0xa1, 0x2f, 0x13, 0xad, 0x3e, 0xe1, 0xa3, 0x48, 0xcc, 0x57, 0x20, 0x7e, 0x67, 0x11, 0x90, 0x89, 0x6f, 0xbc, 0x86, 0x04, 0x23, 0x6c, 0x52, 0x51, 0x72, 0x26, 0x75, 0x38, 0x0d, 0xa1, 0x58, 0xd0, 0xc1, 0x4d, 0x3d, 0xa3, 0x04, 0x95, 0x75, 0x0d, 0xce, 0x61, 0xd3, 0xe5, 0xaa, 0xe0, 0x62, 0x5f, 0x0c, 0x84, 0x53, 0x31, 0xe5, 0x4e, 0x39, 0xf5, 0x75, 0x4b, 0x79, 0xcf, 0x60, 0x5f, 0xfb, 0x4f, 0x05, 0x41, 0x26, 0x99, 0x0b, 0xc7, 0x0c, 0xc3, 0x3c, 0x64, 0xe1, 0x7e, 0x97, 0xef, 0xb2, 0xf9, 0xa0, 0xa5, 0x53, 0x02, 0xfb, 0x72, 0x9a, 0x6f, 0x39, 0x6c, 0xca, 0xbc, 0xf2, 0xa0, 0x52, 0xf5, 0x14, 0x12, 0xb8, 0xd6, 0x7a, 0xff, 0xd0, 0x32, 0xc1, 0x65, 0x31, 0x91, 0x57, 0xc6, 0xe9, 0x1d, 0xd4, 0x28, 0x70, 0xbf, 0x8e, 0x60, 0xdb, 0x85, 0x67, 0x90, 0x52, 0x47, 0xea, 0xef, 0xc4, 0x8a, 0x97, 0xc8, 0xd9, 0xa4, 0x7a, 0xc6, 0x29, 0x21, 0x03, 0x6e, 0xab, 0x66, 0x11, 0xed, 0x70, 0x94, 0x50, 0x14, 0x91, 0xaf, 0xc5, 0xa1, 0x66, 0x00, 0xa7, 0xc0, 0xf8, 0xb7, 0x71, 0xd1, 0xb9, 0xd5, 0x35, 0x6c, 0x73, 0x49, 0x33, 0xa2, 0x7f, 0x59, 0xaa, 0x86, 0x37, 0x44, 0xee, 0xed, 0xad, 0x26, 0xbb, 0x71, 0x9e, 0x1b, 0xc9, 0xbc, 0xa1, 0xa7, 0xa0, 0x03, 0xa4, 0x56, 0xae, 0xd0, 0x99, 0x9f, 0x97, 0x05, 0x6d, 0x0e, 0xcc, 0x1e, 0x3a, 0xa3, 0x5f, 0xb6, 0xbd, 0x75, 0x16, 0x4c, 0x0a, 0x9a, 0xbe, 0x48, 0x7e, 0x4b, 0xc1, 0x39, 0xf6, 0x44, 0xfb, 0x61, 0x3e, 0x6a, 0xca, 0x73, 0xcd, 0xb0, 0x64, 0x9b, 0xaf, 0x3b, 0x6e, 0xbf, 0xc2, 0xc5, 0xca, 0x05, 0x25, 0x3f, 0xb0, 0x95, 0xee, 0xba, 0x00, 0xa0, 0x1b, 0x87, 0xd6, 0xa1, 0xcc, 0x9d, 0x5f, 0xe2, 0xaf, 0x3c, 0xec, 0x42, 0xbb, 0xd0, 0x45, 0x37, 0x21, 0x18, 0x40, 0x0f, 0x7f, 0x87, 0x92, 0x7b, 0x57, 0xeb, 0xe4, 0x4d, 0xc1, 0x4c, 0x2a, 0x81, 0x5c, 0x17, 0x30, 0x7a, 0x8a, 0x7c, 0x75, 0x8f, 0xdd, 0x14, 0x3d, 0xc6, 0xcc, 0xc7, 0xe2, 0xdf, 0xab, 0xed, 0x6b, 0x95, 0xda, 0xb3, 0x5f, 0x20, 0x3c, 0xc0, 0xdc, 0xfe, 0xea, 0x19, 0xe3, 0xf3, 0x29, 0x42, 0xf6, 0x4f, 0x9a, 0xa7, 0xe5, 0x6f, 0xb1, 0x3a, 0xe5, 0x86, 0x68, 0x5c, 0xe2, 0x9e, 0x35, 0x01, 0x16, 0xd9, 0x39, 0x0f, 0xdb, 0xfd, 0xba, 0x08, 0xbd, 0x2f, 0xd3, 0xe9, 0xd4, 0xff, 0x6a, 0x52, 0x51, 0xa5, 0x63, 0xe6, 0x56, 0x8a, 0x13, 0xf5, 0x0b, 0x0b, 0xf8, 0x59, 0xee, 0x79, 0xa7, 0x9d, 0x6a, 0x64, 0x05, 0x65, 0xac, 0x19, 0xba, 0x09, 0xb2, 0x69, 0xe3, 0x84, 0xa4, 0xac, 0x07, 0x8d, 0x68, 0x06, 0x4d, 0x03, 0x71, 0xe9, 0xec, 0x8e, 0xd7, 0xdb, 0xe2, 0x84, 0xad, 0x7a, 0xe9, 0x09, 0x8f, 0xbd, 0xa7, 0x7b, 0x7a, 0x7c, 0x25, 0x0d, 0xe0, 0x33, 0x82, 0xb1, 0xfc, 0x03, 0xe9, 0x3c, 0x64, 0xf9, 0xc0, 0xc4, 0xdd, 0x93, 0x22, 0x4d, 0x72, 0x80, 0x90, 0xa5, 0xc8, 0xa8, 0xe3, 0x8d, 0xac, 0x6c, 0x85, 0x19, 0xee, 0x2f, 0xe1, 0x5a, 0x72, 0x15, 0x18, 0x3a, 0x84, 0x0a, 0xf6, 0xa6, 0x6c, 0x07, 0x24, 0xf3, 0x42, 0x90, 0x9f, 0x7a, 0x04, 0x82, 0x68, 0x86, 0xe6, 0x0b, 0x7e, 0x71, 0xe9, 0xfa, 0x09, 0x09, 0xaf, 0x39, 0xd8, 0x38, 0x8e, 0x97, 0x0d, 0xe5, 0xe3, 0xcb, 0x17, 0x15, 0xa9, 0xb6, 0xe1, 0x56, 0x4a, 0xe9, 0x49, 0x5d, 0xb4, 0x67, 0xd4, 0xee, 0xb0, 0xac, 0xa0, 0xfc, 0x6f, 0xee, 0x9a, 0x12, 0x66, 0xa2, 0xf0, 0xf1, 0x5d, 0x42, 0xca, 0x7b, 0xc2, 0x4e, 0x35, 0xcf, 0x42, 0x91, 0x5f, 0xb6, 0x9b, 0xa5, 0x0a, 0x3e, 0xab, 0xb9, 0x3b, 0xa4, 0xcd, 0x92, 0x32, 0x77, 0x66, 0xd0, 0x9f, 0xfb, 0xbb, 0x73, 0x13, 0xcc, 0x06, 0x9d, 0xb5, 0xc3, 0xc8, 0x99, 0x36, 0x1d, 0x60, 0x1d, 0x07, 0xda, 0xdd, 0xcc, 0xc9, 0x64, 0x11, 0xff, 0x05, 0x71, 0xe6, 0xc5, 0x1d, 0x2a, 0xf6, 0x29, 0x82, 0x8d, 0x55, 0xb3, 0x28, 0x10, 0xb1, 0x31, 0x37, 0x87, 0x9e, 0xb6, 0x04, 0x47, 0x2b, 0xe4, 0x3f, 0x8c, 0xb9, 0x67, 0x6e, 0x18, 0x0d, 0xc2, 0x99, 0x1d, 0xa3, 0x4e, 0x47, 0x5d, 0x45, 0x7f, 0xaa, 0x90, 0xdd, 0x6a, 0x17, 0x06, 0x88, 0x84, 0xb9, 0x8d, 0xeb, 0xad, 0x85, 0x95, 0xca, 0x6d, 0x70, 0x92, 0xd6, 0x7d, 0xe0, 0xa2, 0xc7, 0x89, 0x61, 0x70, 0xab, 0x34, 0x9a, 0x58, 0x7e, 0x5d, 0x7f, 0xcc, 0xfa, 0xa0, 0xc8, 0xf6, 0xb0, 0x20, 0xa1, 0x9e, 0x58, 0x84, 0xa3, 0x4f, 0x66, 0x40, 0x03, 0xb5, 0xde, 0x16, 0x09, 0x4a, 0x68, 0xdc, 0xc4, 0x32, 0xa7, 0x7f, 0xfd, 0x62, 0xc7, 0x48, 0x69, 0x08, 0x55, 0x5e, 0x22, 0x27, 0x54, 0x8d, 0x58, 0x82, 0x8d, 0x45, 0x44, 0xbc, 0x26, 0xe6, 0x5e, 0xbd, 0x76, 0x3a, 0xd0, 0x58, 0x18, 0x43, 0x2a, 0x2a, 0x3e, 0x38, 0x57, 0xc5, 0x48, 0xca, 0xd0, 0x0e, 0x96, 0xab, 0x0f, 0xe3, 0x9a, 0x51, 0x47, 0x01, 0x31, 0xf8, 0x52, 0x25, 0x33, 0xe6, 0xeb, 0x72, 0x48, 0xf2, 0x1d, 0x13, 0xfe, 0x47, 0xfb, 0x21, 0x19, 0x66, 0x92, 0xc7, 0x2b, 0x6a, 0x1c, 0xa4, 0x64, 0x90, 0x77, 0x70, 0xaa, 0xf6, 0xd5, 0xe3, 0xec, 0xa3, 0xb4, 0xd2, 0xb4, 0xc8, 0x11, 0x9c, 0xfc, 0x45, 0xd8, 0xc4, 0x43, 0x6f, 0xa0, 0xdf, 0xe0, 0x11, 0x95, 0xb1, 0x95, 0xb1, 0xb5, 0x93, 0x67, 0x14, 0x40, 0x17, 0xad, 0x04, 0x69, 0xef, 0x68, 0x50, 0x52, 0x0b, 0xd2, 0x15, 0x37, 0x02, 0x3a, 0x3c, 0xea, 0xb3, 0x0e, 0x44, 0x7f, 0x2c, 0x3a, 0x41, 0x48, 0xcb, 0xb0, 0x25, 0x04, 0xa2, 0x48, 0x3f, 0x53, 0x20, 0xcb, 0x01, 0x6d, 0xee, 0x4a, 0x06, 0x14, 0x18, 0xb5, 0x54, 0xc7, 0x6d, 0xa9, 0xde, 0x39, 0x28, 0x88, 0x4d, 0x01, 0xd0, 0xcf, 0xff, 0x93, 0x5c, 0xa4, 0x50, 0x6f, 0x9b, 0xaf, 0x19, 0x98, 0xd3, 0x2b, 0x77, 0x48, 0xa9, 0x3d, 0xce, 0xe2, 0x40, 0x84, 0x0d, 0x28, 0xa5, 0xf1, 0x33, 0xae, 0x6b, 0xd9, 0x12, 0x8e, 0x92, 0x48, 0x52, 0x5e, 0xae, 0x99, 0xba, 0x5f, 0x44, 0x43, 0xab, 0xf7, 0x78, 0xf6, 0xed, 0x62, 0xe5, 0xe7, 0xaf, 0xa4, 0xcd, 0x68, 0xc8, 0xc2, 0x72, 0xbb, 0x43, 0x31, 0xc3, 0x28, 0x1b, 0x8f, 0x3b, 0x4d, 0x43, 0x91, 0x07, 0xb6, 0xe9, 0x3d, 0x67, 0xad, 0xfc, 0x59, 0x56, 0x53, 0xec, 0x23, 0x6d, 0xf0, 0xb1, 0x42, 0x05, 0x88, 0x0e, 0xfd, 0x9c, 0xaf, 0x17, 0xab, 0x7a, 0x9d, 0xf1, 0x6a, 0x93, 0x85, 0xd9, 0x14, 0xb0, 0x23, 0x67, 0x6f, 0xca, 0x95, 0x14, 0xa4, 0xb6, 0x6b, 0xfb, 0xf3, 0x08, 0x01, 0xdc, 0xa4, 0x31, 0x0d, 0x66, 0x41, 0xea, 0x74, 0xb6, 0x02, 0xd6, 0x62, 0x1b, 0x89, 0x62, 0x99, 0x1c, 0xcf, 0xf1, 0x09, 0xbc, 0x5f, 0x36, 0xa1, 0xfc, 0xc2, 0xe0, 0x66, 0xa2, 0x3a, 0x7d, 0xc2, 0x39, 0xb3, 0x98, 0x1e, 0x59, 0xf6, 0x25, 0xb3, 0x28, 0x20, 0x20, 0x9c, 0x21, 0x52, 0x70, 0x30, 0x14, 0xab, 0x11, 0x90, 0x6e, 0x73, 0x72, 0x7c, 0xbb, 0x99, 0x1c, 0x6b, 0x69, 0x60, 0x95, 0xda, 0xcf, 0x55, 0x84, 0xe4, 0x6e, 0x84, 0x15, 0x13, 0x76, 0xeb, 0x9f, 0x76, 0x8c, 0x2f, 0x85, 0xf3, 0xca, 0x8e, 0x5a, 0xdf, 0x07, 0x15, 0x48, 0xcc, 0x59, 0x13, 0xb2, 0xa2, 0xd9, 0xcd, 0x18, 0xf2, 0xa6, 0x73, 0x3b, 0x86, 0x2d, 0x53, 0x82, 0x3d, 0xa7, 0x4d, 0x9d, 0x16, 0xe2, 0x87, 0x68, 0x8a, 0x45, 0x62, 0x12, 0x1f, 0x0f, 0xac, 0x7e, 0x3a, 0xdf, 0x17, 0xe9, 0x34, 0x79, 0xe9, 0xce, 0xb1, 0xc7, 0xf6, 0x06, 0x2d, 0x1e, 0xcb, 0x34, 0xd8, 0xc3, 0x2d, 0x60, 0xa4, 0xae, 0xc2, 0xe2, 0x9c, 0x8d, 0x0d, 0x82, 0x77, 0x0c, 0xa0, 0xdd, 0x6d, 0x54, 0x8c, 0x0b, 0x49, 0xd1, 0x1d, 0x7e, 0xc0, 0x39, 0xc4, 0x2d, 0x01, 0xca, 0x55, 0xf2, 0x8d, 0xd3, 0x72, 0x31, 0x49, 0x75, 0x47, 0xbb, 0xd1, 0xab, 0x79, 0xf2, 0x10, 0x88, 0x58, 0x2d, 0x0e, 0xc0, 0x5c, 0x5e, 0x08, 0x6a, 0xcf, 0xf2, 0xc6, 0x04, 0xc7, 0xf8, 0x29, 0xb8, 0x57, 0x86, 0x04, 0xdd, 0x06, 0x58, 0x2c, 0xc1, 0x80, 0xbb, 0xd3, 0xa6, 0x8c, 0xa9, 0x11, 0x0a, 0x3e, 0x36, 0xc4, 0x2c, 0x6e, 0x2b, 0x9a, 0xcb, 0x69, 0xf0, 0x6c, 0x31, 0xe5, 0xaf, 0xce, 0x70, 0x3b, 0xb6, 0xe4, 0xec, 0xd0, 0x1d, 0x77, 0x19, 0xd4, 0xa9, 0x47, 0x86, 0x30, 0xf1, 0xa3, 0x1b, 0xb9, 0xbf, 0x38, 0x9f, 0xaa, 0xb9, 0x27, 0x7c, 0x51, 0x41, 0x5a, 0xc7, 0x08, 0x99, 0x17, 0x7b, 0x67, 0x4b, 0xd5, 0x05, 0xb8, 0xc8, 0x4f, 0x06, 0xab, 0x4f, 0xd8, 0x54, 0x4c, 0x10, 0xee, 0x42, 0x31, 0x92, 0x11, 0x21, 0xf8, 0x52, 0xd6, 0x06, 0xf1, 0xad, 0x37, 0xce, 0x17, 0xff, 0x2d, 0x60, 0x45, 0x0d, 0x81, 0x32, 0xa6, 0xa0, 0xde, 0x0f, 0x6e, 0x73, 0x2c, 0x17, 0xc7, 0x4f, 0x19, 0x07, 0x0e, 0x75, 0xf8, 0xba, 0x40, 0x3c, 0xcf, 0xf0, 0xaf, 0xfb, 0xab, 0x4f, 0xfa, 0x29, 0x37, 0xa7, 0x3b, 0xc3, 0x8d, 0x7a, 0x82, 0xee, 0x4c, 0xbc, 0x83, 0xde, 0xeb, 0xd7, 0x8b, 0xf6, 0x4d, 0xf2, 0xb9, 0x31, 0x95, 0x73, 0x6a, 0xc0, 0x3b, 0xc2, 0xf5, 0xf5, 0x60, 0x50, 0x99, 0x5f, 0x5e, 0xd9, 0xb3, 0x37, 0xa4, 0xe6, 0x34, 0xfa, 0xc1, 0x95, 0x53, 0x58, 0xbe, 0x9c, 0x7f, 0x4d, 0xb1, 0x8c, 0x98, 0x8e, 0x8f, 0x53, 0x5e, 0x26, 0x42, 0x05, 0x2a, 0x61, 0xfb, 0xdc, 0xdc, 0xe9, 0xca, 0x7d, 0x14, 0x2f, 0x6c, 0x7c, 0xa5, 0x0c, 0x64, 0x23, 0x46, 0xa9, 0x4d, 0x6f, 0x8b, 0x9c, 0x6e, 0x5c, 0x14, 0x53, 0x8f, 0x62, 0x05, 0xb6, 0x0b, 0x40, 0xb5, 0x08, 0x27, 0xf8, 0xab, 0x0e, 0xa2, 0x1b, 0xc6, 0x74, 0x8d, 0x46, 0xbb, 0x6c, 0x5d, 0xed, 0xc5, 0x98, 0x3f, 0x57, 0x97, 0x2a, 0xab, 0xea, 0x96, 0x4a, 0x3c, 0xa9, 0x45, 0xb8, 0xbf, 0xfb, 0x00, 0xb2, 0x8a, 0xae, 0xee, 0x18, 0x0f, 0x3b, 0x31, 0xce, 0xb0, 0x4c, 0x5f, 0x62, 0xd5, 0x7b, 0x36, 0xee, 0x3c, 0x5d, 0x8b, 0x40, 0x91, 0xbf, 0x84, 0x39, 0x3f, 0x2f, 0x07, 0x73, 0x85, 0xbf, 0x72, 0x26, 0xcc, 0x05, 0x8d, 0x4d, 0x38, 0x66, 0xbd, 0x04, 0x7d, 0x95, 0x7a, 0x35, 0xf4, 0x56, 0x02, 0x73, 0xee, 0x88, 0x4f, 0x26, 0x48, 0x62, 0x47, 0xe9, 0x3f, 0xfd, 0x34, 0x30, 0x86, 0x12, 0x73, 0x2e, 0x96, 0x06, 0x70, 0xf6, 0x46, 0x23, 0xd2, 0xe0, 0x9b, 0x29, 0xf2, 0x2e, 0xe1, 0x05, 0x92, 0xef, 0xfa, 0xe0, 0xcc, 0x24, 0xf7, 0x5b, 0x48, 0x22, 0xe5, 0x19, 0xb2, 0x37, 0xe9, 0x7f, 0x6b, 0x90, 0x90, 0xb7, 0x7f, 0x5a, 0x60, 0xfb, 0xd8, 0x28, 0xb3, 0x10, 0xb1, 0x95, 0xc5, 0x10, 0x4d, 0x2a, 0x0b, 0x6d, 0xe8, 0x82, 0xc6, 0x33, 0xee, 0xab, 0xd9, 0x8d, 0x6b, 0xd0, 0xd7, 0x8b, 0xc2, 0x15, 0x61, 0x22, 0xa3, 0xc3, 0xaf, 0x75, 0x37, 0xa5, 0x6c, 0x52, 0x9d, 0xb2, 0xc7, 0x00, 0x9a, 0xeb, 0xc7, 0x38, 0x8c, 0x87, 0xde, 0x71, 0xa0, 0x4e, 0xc2, 0x61, 0x45, 0x43, 0x78, 0xc0, 0xe1, 0x85, 0xb1, 0x4f, 0xc2, 0x77, 0x5a, 0x19, 0x57, 0x1f, 0x6f, 0xf8, 0xa0, 0xcc, 0x10, 0x5c, 0xe3, 0xfc, 0xd6, 0x48, 0xa1, 0x7c, 0x67, 0x9d, 0xc8, 0xd1, 0x48, 0x9b, 0x2a, 0xd7, 0xf3, 0xa5, 0x2e, 0xa8, 0x2a, 0x44, 0xc5, 0xbf, 0x8a, 0x6f, 0xa0, 0x5e, 0x63, 0x0a, 0xa1, 0x2c, 0xc7, 0xac, 0x8f, 0x23, 0xe1, 0xa5, 0x0d, 0xa9, 0x88, 0x40, 0xcd, 0xfd, 0x14, 0x45, 0x01, 0xd5, 0x71, 0xc2, 0x12, 0x46, 0x72, 0x0b, 0x95, 0xe3, 0x67, 0x00, 0x7b, 0x29, 0xf1, 0x8e, 0x87, 0x1b, 0x15, 0x79, 0x06, 0x29, 0x90, 0x58, 0xba, 0x56, 0x6a, 0xe1, 0x17, 0x9a, 0xce, 0x66, 0xb2, 0x85, 0x19, 0xa0, 0xf6, 0x26, 0x31, 0xac, 0x18, 0x2b, 0x18, 0x53, 0x4e, 0x49, 0xc1, 0x8e, 0x3c, 0xdf, 0x22, 0x49, 0xaf, 0xd6, 0x8a, 0x68, 0x8e, 0xcb, 0x35, 0x08, 0x0e, 0x70, 0x1e, 0x07, 0x24, 0x2f, 0x14, 0xc6, 0x40, 0x11, 0x10, 0x2d, 0x38, 0xdf, 0xc6, 0xf0, 0x82, 0x87, 0x7a, 0x11, 0xa7, 0xc0, 0x15, 0xa7, 0xf4, 0xf1, 0x78, 0xdd, 0x73, 0x4f, 0x10, 0x3d, 0x1a, 0x46, 0xaa, 0x2f, 0x41, 0x1b, 0x89, 0xbc, 0x5a, 0xcf, 0xb6, 0x98, 0xdc, 0x46, 0x98, 0x60, 0x80, 0xa9, 0xc4, 0x20, 0xb0, 0x08, 0x16, 0x18, 0x3c, 0x44, 0x01, 0xc0, 0x50, 0x2c, 0x23, 0x09, 0xa3, 0xe6, 0x1d, 0xe6, 0xf0, 0x91, 0xa1, 0x0b, 0xaa, 0x28, 0xcd, 0xf4, 0xec, 0xa9, 0xb7, 0x2a, 0xaf, 0x77, 0x49, 0xc2, 0x3f, 0xfd, 0x4f, 0x26, 0xf0, 0x95, 0xce, 0x18, 0x0c, 0xa8, 0x97, 0xf3, 0x11, 0x16, 0x1d, 0x34, 0x19, 0xd8, 0x84, 0x3a, 0x9a, 0xe4, 0xfa, 0x4a, 0x4f, 0x50, 0x4a, 0xd6, 0x76, 0xbb, 0xae, 0xff, 0x3c, 0xe9, 0xe5, 0x58, 0x76, 0xad, 0x86, 0xed, 0x91, 0x0c, 0x94, 0x84, 0xcc, 0x9f, 0x52, 0x22, 0xa4, 0x39, 0x59, 0xd1, 0x90, 0xca, 0xe7, 0xa1, 0xef, 0x83, 0x7a, 0xed, 0x3f, 0x3b, 0x9e, 0xdf, 0x8f, 0x12, 0x03, 0x36, 0x37, 0x54, 0xd2, 0x47, 0xc6, 0xa0, 0x41, 0x42, 0x3c, 0x49, 0x66, 0xb7, 0x7a, 0xfc, 0x48, 0x59, 0xf6, 0xa3, 0x3c, 0x01, 0xb3, 0x8a, 0x6f, 0xf6, 0x71, 0xc0, 0xbf, 0x6b, 0x21, 0xc1, 0xcf, 0x49, 0x9b, 0x51, 0x5a, 0x2f, 0x93, 0xab, 0xc7, 0xb7, 0xc9, 0xdb, 0xfe, 0xfc, 0x81, 0x69, 0x7b, 0x59, 0x33, 0x37, 0xa0, 0x73, 0x83, 0xac, 0x50, 0x79, 0x73, 0x12, 0xb9, 0xaa, 0xd8, 0x3d, 0x71, 0x18, 0x0b, 0x6e, 0xc5, 0xac, 0xe0, 0x77, 0x4e, 0x6b, 0xdc, 0x1f, 0xc5, 0xf7, 0xa2, 0xc7, 0x17, 0x59, 0xaf, 0x4e, 0xbc, 0xfd, 0x47, 0x33, 0x45, 0xfe, 0xaf, 0xf9, 0x35, 0xa5, 0x9d, 0xd0, 0x12, 0x2c, 0xed, 0x71, 0xbc, 0xc7, 0x95, 0x4a, 0xfd, 0xe5, 0xdb, 0xdb, 0x60, 0xb2, 0xc6, 0x60, 0x47, 0xe1, 0xd2, 0xb0, 0x38, 0xaa, 0xe7, 0x65, 0x78, 0x0e, 0x8c, 0x3d, 0xdb, 0x62, 0x59, 0xc0, 0xda, 0x0b, 0xaa, 0x23, 0xe6, 0x87, 0x9b, 0x6d, 0xfc, 0xad, 0x30, 0xd8, 0x7a, 0x35, 0xd3, 0x7a, 0x31, 0x7a, 0x04, 0x24, 0xbb, 0x7f, 0x4c, 0x8b, 0x0e, 0x30, 0x72, 0xa5, 0x52, 0xeb, 0xf2, 0x56, 0xf0, 0x3f, 0xab, 0x4c, 0xec, 0xf4, 0xd8, 0x28, 0x74, 0x4b, 0x41, 0xde, 0xb9, 0x86, 0xb3, 0x5e, 0xfd, 0xab, 0xad, 0x74, 0xed, 0x86, 0x5c, 0xec, 0x32, 0xed, 0xc9, 0xfb, 0x43, 0x48, 0x52, 0xda, 0x7d, 0x50, 0x57, 0xb4, 0x75, 0x16, 0x35, 0xc2, 0x8d, 0x47, 0x78, 0xb5, 0xc5, 0xaf, 0x4c, 0x54, 0xd4, 0xfd, 0x35, 0x66, 0x78, 0xc6, 0x00, 0xd2, 0x0a, 0xcc, 0xfa, 0x05, 0x55, 0x7f, 0x5f, 0x94, 0xa8, 0xc4, 0x15, 0x22, 0x2a, 0xf6, 0x9a, 0x85, 0x6e, 0x2a, 0x3c, 0x24, 0x47, 0xb8, 0x88, 0xa3, 0xde, 0xf7, 0x04, 0xc3, 0x01, 0x47, 0x21, 0x83, 0xbe, 0x55, 0x6b, 0x8c, 0x31, 0x9a, 0x03, 0xcb, 0x9a, 0x25, 0x4f, 0x60, 0xb2, 0x9b, 0xf0, 0xb7, 0x40, 0x7c, 0xf4, 0xf4, 0xe7, 0xa7, 0x4d, 0x95, 0x42, 0x21, 0x82, 0x52, 0x33, 0x12, 0xa5, 0x48, 0x77, 0x10, 0x85, 0x57, 0x7e, 0xa0, 0x24, 0xc9, 0x7a, 0xfa, 0x6c, 0x34, 0xb7, 0x0d, 0x1d, 0xa1, 0x2a, 0xc3, 0x0a, 0xed, 0x4c, 0x86, 0x85, 0x70, 0x29, 0x03, 0x18, 0xdd, 0xb3, 0x2e, 0x76, 0x69, 0x5d, 0x86, 0xb0, 0x30, 0xe5, 0x9a, 0xac, 0xd4, 0x71, 0xcc, 0xd4, 0x67, 0xde, 0x55, 0x0b, 0x8b, 0x55, 0x89, 0xe5, 0xd7, 0x1f, 0x5c, 0x17, 0x7d, 0xba, 0x26, 0x2c, 0x2a, 0x2c, 0xa3, 0x7a, 0x2e, 0x97, 0x3e, 0x55, 0xdd, 0x0e, 0x8f, 0x82, 0x35, 0xa7, 0x22, 0xee, 0xc1, 0xd1, 0x7a, 0xa0, 0xbc, 0xe8, 0x55, 0xed, 0x7a, 0x07, 0x32, 0xeb, 0x04, 0x1e, 0x11, 0x28, 0x03, 0x44, 0x7a, 0x9b, 0xdf, 0x4e, 0xc0, 0xda, 0x27, 0xa0, 0x87, 0x8e, 0x34, 0x43, 0x84, 0x24, 0x09, 0x38, 0x84, 0xc6, 0x7e, 0x0c, 0xb0, 0x8a, 0x9e, 0xad, 0x0f, 0xe9, 0x4d, 0x7c, 0x4c, 0x72, 0x2e, 0xa3, 0xba, 0xbf, 0xc3, 0xa9, 0x95, 0xa9, 0xd6, 0x44, 0x8b, 0xb8, 0x18, 0x6e, 0x7a, 0xdd, 0x09, 0xba, 0x7c, 0x64, 0x17, 0xe9, 0x21, 0x24, 0x0a, 0xb8, 0xfb, 0xf9, 0x9f, 0xfd, 0x60, 0x74, 0x73, 0xf2, 0x6b, 0xd0, 0x23, 0xd1, 0x44, 0x28, 0xb2, 0xa1, 0xa1, 0xe8, 0x2b, 0x4f, 0x8d, 0x82, 0x87, 0x00, 0x69, 0x62, 0xd0, 0xa6, 0x30, 0x23, 0x87, 0xd1, 0xff, 0x03, 0x44, 0xc9, 0xd4, 0x94, 0x9c, 0xd9, 0x95, 0xb5, 0x47, 0xed, 0x55, 0xc1, 0x82, 0x60, 0xd4, 0x06, 0xb3, 0x0f, 0x44, 0x79, 0x4c, 0xb2, 0x53, 0xa7, 0xf1, 0x6c, 0x65, 0xef, 0xdd, 0xa0, 0x21, 0xef, 0x82, 0x07, 0x30, 0x3c, 0x6f, 0xff, 0x41, 0x56, 0x77, 0x26, 0x51, 0xdb, 0x10, 0x28, 0x29, 0xfa, 0xf9, 0xd5, 0x28, 0x2b, 0x20, 0x77, 0x42, 0x1d, 0xc2, 0x62, 0x49, 0xf0, 0xd4, 0xcc, 0x6b, 0xa5, 0xa2, 0xdf, 0xfd, 0xd3, 0xb6, 0x0d, 0x77, 0x9b, 0xfb, 0xa4, 0xbf, 0xdd, 0x22, 0xa2, 0xaa, 0xac, 0x45, 0xca, 0xc0, 0x00, 0xca, 0xf7, 0x3f, 0xab, 0x8b, 0xb1, 0x63, 0x8f, 0x33, 0xfe, 0xe5, 0x0d, 0xeb, 0x7a, 0xc1, 0xc1, 0x37, 0xaa, 0x3d, 0x6c, 0x1a, 0x8e, 0x27, 0x31, 0x81, 0x75, 0x5e, 0x05, 0xdf, 0x15, 0x94, 0x61, 0x14, 0xdb, 0x51, 0x39, 0x93, 0x80, 0x3b, 0x32, 0xc4, 0xdd, 0x96, 0x10, 0xa7, 0x00, 0x07, 0x6d, 0xbb, 0x7f, 0x9d, 0xb1, 0x1e, 0x0c, 0x11, 0x3e, 0xf5, 0x4a, 0x4d, 0xeb, 0x0e, 0xe0, 0x2c, 0xb4, 0xc4, 0xcb, 0x81, 0xb0, 0x23, 0xf8, 0x5a, 0x43, 0x4d, 0x12, 0x86, 0x94, 0x1c, 0x99, 0x54, 0x41, 0x09, 0x34, 0x9e, 0x52, 0x4d, 0x48, 0x06, 0x6c, 0x46, 0xc9, 0x80, 0x47, 0x1b, 0x50, 0x11, 0x62, 0xa3, 0x6e, 0xd6, 0xf6, 0x83, 0x41, 0x47, 0x28, 0x97, 0x44, 0xbd, 0x82, 0x94, 0x6b, 0x32, 0xa4, 0xeb, 0x70, 0x48, 0x37, 0xf0, 0x67, 0x8d, 0x23, 0x3b, 0x99, 0xfe, 0x02, 0x4e, 0x8f, 0xca, 0xd4, 0x79, 0x6d, 0x58, 0xf4, 0xfb, 0x82, 0x8a, 0x4b, 0x6a, 0x1c, 0x44, 0xc3, 0x55, 0xa1, 0x28, 0xfe, 0x27, 0xdb, 0xa4, 0x49, 0x4e, 0x94, 0x2f, 0xcb, 0x9d, 0x63, 0xcf, 0x02, 0xef, 0xc5, 0xdf, 0x71, 0x0e, 0x6f, 0x0f, 0x92, 0xd3, 0xe3, 0xac, 0x12, 0x8e, 0x42, 0x22, 0x3d, 0xa7, 0x61, 0xbf, 0xb8, 0x86, 0x1e, 0xb9, 0x6e, 0xb1, 0xf5, 0x73, 0xcc, 0x34, 0xce, 0xfc, 0x31, 0x46, 0x19, 0xd8, 0xa0, 0x29, 0x1d, 0x04, 0xb9, 0x52, 0x8d, 0x34, 0xe7, 0xca, 0x5d, 0x5f, 0xda, 0xd4, 0xd3, 0x7d, 0x38, 0xd0, 0xe1, 0x90, 0x8f, 0x5f, 0xb2, 0xe1, 0x8f, 0xc8, 0x83, 0x8c, 0x76, 0x9b, 0xb4, 0x3e, 0xcb, 0x94, 0x1f, 0x3e, 0x4f, 0xc1, 0xa8, 0xaa, 0x31, 0xe7, 0x15, 0x04, 0x81, 0x23, 0x21, 0xed, 0xe7, 0xcd, 0xcb, 0x2f, 0x95, 0xa1, 0xf4, 0x01, 0x7a, 0x21, 0x29, 0x87, 0xb8, 0x35, 0xbe, 0x99, 0x59, 0x15, 0x1c, 0xc5, 0x3d, 0x68, 0x5b, 0x97, 0x57, 0xae, 0x14, 0x17, 0x1a, 0xdb, 0x70, 0x94, 0x2d, 0x44, 0x85, 0xa0, 0x66, 0xbf, 0xe3, 0x5c, 0xf6, 0x06, 0x69, 0xf6, 0xe1, 0x5d, 0x5e, 0x6f, 0xb2, 0x75, 0xbd, 0xa2, 0x6c, 0x8f, 0xcf, 0x82, 0xc3, 0xe4, 0xff, 0xa3, 0x8c, 0x45, 0xeb, 0xfc, 0x73, 0xff, 0xb7, 0xeb, 0xec, 0x01, 0xa6, 0x79, 0x6c, 0x41, 0xeb, 0xe0, 0xd8, 0x5b, 0xbc, 0x4a, 0x3e, 0x7b, 0xa9, 0xdc, 0xc3, 0x7e, 0x2c, 0xf3, 0xdc, 0x54, 0x81, 0xad, 0xc1, 0xa9, 0xb7, 0xac, 0x1f, 0xc4, 0x08, 0x16, 0x0d, 0xaf, 0x66, 0xe0, 0x42, 0x98, 0x56, 0x4d, 0x85, 0x77, 0x01, 0xb1, 0x64, 0xf1, 0x88, 0x7b, 0x29, 0x7c, 0x99, 0x72, 0x0a, 0xc5, 0x40, 0x3f, 0xa0, 0x4f, 0xff, 0x2c, 0x9b, 0x5c, 0x20, 0x2b, 0xb3, 0x10, 0x4a, 0x1a, 0xe2, 0xd4, 0x53, 0x45, 0xd0, 0xf9, 0x55, 0x2d, 0x8f, 0x9d, 0x04, 0x88, 0x88, 0xd3, 0x3e, 0x88, 0xb5, 0xfe, 0xe4, 0x60, 0x11, 0x7e, 0xe9, 0x05, 0x4d, 0x8f, 0xa8, 0x31, 0xc5, 0x6d, 0x7b, 0xae, 0xb2, 0xbd, 0x89, 0xd1, 0xa1, 0x28, 0xdf, 0x45, 0x24, 0x49 ],
- const [ 0xc0, 0xa4, 0xf3, 0x47, 0xf7, 0x90, 0xb9, 0x98, 0x5d, 0x95, 0x42, 0x6b, 0xd5, 0x9a, 0x30, 0xee, 0xa6, 0x59, 0xa0, 0xd7, 0x7d, 0x58, 0x52, 0xf8, 0xb6, 0x1a, 0x0a, 0x14, 0xd7, 0x96, 0x35, 0xf2, 0x5d, 0xe8, 0xd0, 0xaf, 0xbc, 0x47, 0x86, 0x58, 0xa1, 0x37, 0x18, 0xb9, 0x7a, 0xff, 0x02, 0x6f, 0x38, 0x5e, 0x5c, 0x45, 0x53, 0x7a, 0xfe, 0xbd, 0x0f, 0x19, 0xe7, 0xec, 0xff, 0x13, 0xe0, 0x8b, 0xc7, 0x08, 0x5c, 0x4c, 0x25, 0x4e, 0xa3, 0x6a, 0x33, 0x2d, 0x2f, 0x84, 0xe6, 0x4f, 0x56, 0xab, 0xdb, 0x72, 0x2a, 0xba, 0x53, 0x60, 0x9e, 0xe5, 0x7c, 0x21, 0xea, 0x95, 0xf2, 0x6f, 0x30, 0x74, 0x85, 0x6a, 0x5f, 0xc3, 0x3d, 0x8d, 0x58, 0xf4, 0x9b, 0xe1, 0x4f, 0x75, 0x22, 0x70, 0x74, 0xca, 0x16, 0xfd, 0xd3, 0xde, 0x84, 0xf2, 0x79, 0x9b, 0x82, 0x9a, 0xd9, 0xb8, 0xb8, 0x90, 0x6e, 0xd2, 0x1f, 0x78, 0xa1, 0xbf, 0x09, 0xec, 0xec, 0x1f, 0x62, 0xb9, 0x40, 0x33, 0x35, 0x4c, 0xa4, 0xf3, 0x71, 0x67, 0x20, 0x5a, 0xee, 0x19, 0xd9, 0x05, 0xab, 0xec, 0x7d, 0xfc, 0x5a, 0x60, 0xe1, 0xd0, 0x1e, 0x98, 0xe9, 0xe6, 0x93, 0x54, 0xa9, 0x12, 0x0f, 0x1f, 0xc9, 0x67, 0x27, 0xca, 0x2e, 0x4e, 0x75, 0x18, 0xd6, 0xd6, 0x99, 0xbb, 0x04, 0x4b, 0x7e, 0x7f, 0x9e, 0x0a, 0xdf, 0xc6, 0xd3, 0x93, 0x09, 0x34, 0x00, 0xe0, 0xe2, 0xab, 0xd5, 0xf6, 0x2a, 0x7a, 0xb4, 0xb9, 0x01, 0xd1, 0x59, 0x04, 0xa9, 0x79, 0xc0, 0xf9, 0x8e, 0xc1, 0x43, 0x96, 0x83, 0xbc, 0x04, 0x89, 0x4f, 0xa9, 0x8a, 0x46, 0x68, 0xb3, 0xaf, 0x56, 0xfe, 0xdb, 0xb9, 0xf2, 0x3b, 0x32, 0xc7, 0xd0, 0xca, 0x4b, 0x6f, 0x3d, 0x96, 0xf0, 0xa5, 0x6c, 0xd4, 0x14, 0xde, 0x0e, 0x43, 0x09, 0x76, 0x22, 0xb2, 0xf3, 0x4f, 0x0f, 0xc4, 0x7d, 0xbc, 0xf0, 0xf0, 0xca, 0x9d, 0x2f, 0xcb, 0xaf, 0xcb, 0x55, 0x8a, 0x1f, 0xb6, 0x20, 0xc2, 0xe6, 0x4c, 0xd7, 0x73, 0x9a, 0x1d, 0xda, 0x45, 0xcf, 0xbd, 0x7d, 0x11, 0x8b, 0x6a, 0x16, 0xa3, 0xfa, 0xef, 0x55, 0xbf, 0x62, 0xc8, 0xd4, 0x61, 0x58, 0x87, 0xef, 0x49, 0x35, 0x77, 0xd6, 0xb7, 0xc4, 0x7e, 0xe0, 0x74, 0x3d, 0x48, 0x23, 0x11, 0x77, 0xa1, 0x41, 0x73, 0x59, 0x23, 0x84, 0x90, 0x92, 0x12, 0x2e, 0x73, 0x89, 0x84, 0x0a, 0x86, 0x97, 0xc5, 0x47, 0x10, 0x75, 0xf9, 0x86, 0xfd, 0xf0, 0x03, 0x32, 0xde, 0xe4, 0xa6, 0x10, 0x30, 0x67, 0xea, 0x17, 0xe1, 0x45, 0xc2, 0x81, 0x10, 0xad, 0xeb, 0x22, 0x15, 0x29, 0x17, 0xf9, 0xc1, 0xd3, 0x4b, 0x05, 0xe6, 0xc7, 0x86, 0x59, 0x1a, 0xd4, 0xa3, 0x73, 0xb9, 0x77, 0x80, 0xca, 0x29, 0x09, 0x60, 0xa6, 0x62, 0x37, 0x8e, 0x34, 0xad, 0xb3, 0x44, 0xda, 0xab, 0x29, 0xca, 0xc8, 0x9a, 0x75, 0xe2, 0xd0, 0xd4, 0x13, 0x64, 0x77, 0x98, 0xd6, 0x26, 0x4c, 0x0d, 0xdd, 0x1e, 0x78, 0x84, 0xc4, 0xcb, 0x97, 0xfe, 0x17, 0xd0, 0xc6, 0xee, 0x0c, 0xe3, 0xfd, 0x40, 0x71, 0xe5, 0xa0, 0x99, 0xe3, 0x52, 0x50, 0xe1, 0x41, 0xdc, 0x07, 0xff, 0x60, 0x53, 0x64, 0xe3, 0x00, 0xc8, 0x43, 0xca, 0xff, 0xf2, 0x91, 0xbd, 0xcd, 0xd1, 0x5f, 0x5b, 0x20, 0x90, 0x34, 0xd9, 0xe9, 0xb0, 0xa8, 0x47, 0x86, 0x63, 0x2e, 0x15, 0x39, 0x36, 0x32, 0xd5, 0xd9, 0xf3, 0x64, 0x42, 0xc7, 0xc6, 0x53, 0x82, 0x24, 0x9e, 0x3d, 0xa8, 0x41, 0xd6, 0x25, 0x7d, 0x57, 0x15, 0x27, 0x80, 0x79, 0x73, 0x09, 0x2b, 0xc6, 0xdd, 0x12, 0x78, 0xe3, 0xba, 0x1f, 0xa4, 0xa9, 0xce, 0xf3, 0x33, 0x1a, 0x5f, 0xcf, 0x34, 0x9a, 0x97, 0x42, 0xc6, 0x5c, 0x2a, 0x43, 0xdb, 0x1a, 0x39, 0x7d, 0x3c, 0x09, 0x75, 0xea, 0xce, 0x0c, 0x87, 0xa3, 0x13, 0x27, 0xb0, 0xf7, 0xf3, 0x37, 0xac, 0xba, 0xbd, 0xe1, 0xdd, 0xdf, 0x69, 0xc9, 0xa5, 0x4a, 0x20, 0x04, 0x14, 0xdf, 0xfe, 0xcf, 0xc3, 0xdf, 0x16, 0x81, 0xff, 0x74, 0xb6, 0xbe, 0x2a, 0x8a, 0xed, 0xee, 0x5f, 0xe1, 0x4b, 0xed, 0x55, 0x60, 0xe8, 0x04, 0x86, 0xad, 0xa7, 0x19, 0x90, 0xfa, 0xbc, 0x22, 0xdb, 0x22, 0x6c, 0xe0, 0x7c, 0xf4, 0x14, 0xc9, 0x59, 0xce, 0x6d, 0x46, 0x8e, 0x6f, 0x0e, 0x1e, 0x10, 0x06, 0x33, 0x32, 0x90, 0x8e, 0xbc, 0x6c, 0xa3, 0x5e, 0x79, 0xf2, 0x1f, 0xfc, 0xa4, 0x9f, 0xc8, 0x33, 0xaf, 0xb3, 0x2c, 0x65, 0x41, 0xc9, 0xcb, 0x22, 0x7b, 0x0a, 0x7b, 0xf8, 0x7f, 0xa1, 0x0b, 0x8d, 0x33, 0x6e, 0x27, 0xec, 0x42, 0xff, 0x7b, 0x1d, 0x64, 0xbc, 0x1c, 0xf8, 0xe0, 0x61, 0x23, 0x3a, 0x4f, 0xb2, 0x9b, 0xd9, 0xa2, 0x6a, 0x9d, 0x95, 0x66, 0x74, 0xb9, 0xd0, 0x47, 0x5d, 0x98, 0x9f, 0xd3, 0x0a, 0xe0, 0x21, 0x81, 0xa6, 0x58, 0x10, 0xf2, 0xdf, 0x4d, 0x95, 0x76, 0x52, 0x34, 0x61, 0xd2, 0x43, 0x90, 0xf9, 0x41, 0x92, 0x16, 0x51, 0xb8, 0xea, 0x0f, 0x9d, 0x6e, 0x3c, 0xff, 0x64, 0x9c, 0x6c, 0x84, 0xd6, 0x81, 0x4a, 0x80, 0x5f, 0xaa, 0xc3, 0x7a, 0x7c, 0x70, 0x59, 0x42, 0xce, 0xc2, 0xd0, 0xd4, 0x6d, 0x25, 0x2a, 0x7f, 0x7e, 0xf8, 0xd6, 0x47, 0x08, 0xfd, 0x25, 0x87, 0x03, 0x15, 0xfd, 0xdb, 0xb2, 0x4b, 0xd1, 0x3c, 0x33, 0x14, 0xd0, 0x6d, 0x55, 0xd5, 0x5d, 0x97, 0xa9, 0xa6, 0xc0, 0x30, 0xdc, 0x56, 0x1b, 0x20, 0x43, 0xaf, 0x9f, 0x27, 0xb8, 0xfb, 0xff, 0x79, 0xa5, 0xc7, 0x25, 0xac, 0x5e, 0xe6, 0x25, 0xd4, 0xb4, 0xb9, 0x6f, 0xed, 0xc7, 0xae, 0x48, 0x79, 0x1b, 0x07, 0x7b, 0x69, 0xee, 0xdd, 0x4b, 0x41, 0xc9, 0x64, 0xad, 0x78, 0x56, 0x70, 0xb4, 0x1d, 0x71, 0x38, 0x4d, 0xc1, 0x81, 0x5a, 0x2c, 0x90, 0x09, 0x20, 0x06, 0xc1, 0x7a, 0x02, 0x01, 0x31, 0x4c, 0x6c, 0x69, 0x4a, 0x4c, 0xc1, 0xa4, 0x2a, 0x38, 0x9f, 0x68, 0x01, 0x89, 0x65, 0x2b, 0xbb, 0x90, 0xf2, 0xdb, 0xe0, 0xc4, 0xb0, 0xd0, 0xb8, 0x5b, 0xd2, 0xff, 0xb2, 0x17, 0xd9, 0x70, 0x06, 0x63, 0x5d, 0xf2, 0x9a, 0x9e, 0x0a, 0x0d, 0x23, 0xb7, 0xe9, 0x38, 0x8c, 0xfa, 0xe0, 0x4c, 0x9b, 0x29, 0x7d, 0x39, 0xd2, 0xcf, 0xef, 0xf7, 0x93, 0xd1, 0x55, 0xc0, 0x88, 0x46, 0x3c, 0x7d, 0x42, 0x88, 0x62, 0x7e, 0x20, 0x8b, 0xc0, 0x6d, 0x73, 0x6e, 0xc8, 0x85, 0xdf, 0x50, 0xec, 0xff, 0x05, 0x65, 0x5f, 0xcd, 0x5e, 0x49, 0x1f, 0x8b, 0x6a, 0x94, 0x33, 0xb3, 0x0b, 0xae, 0x31, 0x10, 0x2b, 0xe5, 0x04, 0x75, 0xa5, 0xbc, 0xec, 0xae, 0x63, 0x86, 0xc6, 0xb7, 0xc4, 0x34, 0x8e, 0x2c, 0x40, 0x6c, 0x22, 0x01, 0x4e, 0xdb, 0x49, 0x73, 0x85, 0xcb, 0xf3, 0x3e, 0x02, 0xf8, 0xc3, 0x11, 0x0b, 0x9f, 0xca, 0x3f, 0xf1, 0xd9, 0x96, 0xb7, 0x3b, 0x27, 0x6b, 0x36, 0x00, 0x4e, 0xd0, 0xbb, 0x95, 0x65, 0x4d, 0x3c, 0x69, 0x2c, 0x74, 0x97, 0x2c, 0x9f, 0x1e, 0xcb, 0x37, 0xcb, 0xf7, 0x68, 0x28, 0xe1, 0x3d, 0x44, 0xcc, 0x89, 0xc4, 0x70, 0x43, 0x78, 0x3e, 0x6a, 0x5e, 0x45, 0xb9, 0x94, 0x4c, 0x78, 0x69, 0xe5, 0x76, 0xe5, 0xa8, 0xdf, 0xa7, 0x38, 0x3b, 0xc1, 0x70, 0xd0, 0xd7, 0xfd, 0xcb, 0xd1, 0xe3, 0xec, 0xfe, 0x74, 0x80, 0xc1, 0xc2, 0xa2, 0xc7, 0xbc, 0xa5, 0xc2, 0x51, 0xa0, 0xad, 0xcf, 0xfd, 0x66, 0x3e, 0xad, 0xed, 0x33, 0x3d, 0xbd, 0xd2, 0x88, 0x76, 0xaf, 0x6a, 0xb8, 0x3b, 0x97, 0x47, 0xa0, 0x4e, 0x43, 0xd1, 0x92, 0x02, 0xcc, 0x8e, 0x92, 0x9c, 0x6c, 0xa1, 0xc5, 0xff, 0x8f, 0x91, 0x26, 0x89, 0x2d, 0x4c, 0x7b, 0x38, 0x56, 0x6c, 0x88, 0x11, 0x0f, 0xb8, 0x82, 0xc2, 0x5c, 0xee, 0xc6, 0x86, 0x9e, 0xc0, 0xcb, 0x49, 0x1f, 0x1c, 0x55, 0x0d, 0xec, 0xb0, 0xec, 0x8c, 0xe3, 0xae, 0x8d, 0x1e, 0x0c, 0xcc, 0x9f, 0xde, 0x2d, 0x90, 0x28, 0x08, 0x98, 0xca, 0x41, 0xa6, 0x48, 0x62, 0xc8, 0x6c, 0x2c, 0x53, 0x54, 0xe0, 0xc3, 0xf8, 0x6e, 0xbe, 0xe9, 0x87, 0xfe, 0x9a, 0xf1, 0xdb, 0x03, 0xc7, 0xf3, 0x76, 0x87, 0x78, 0x67, 0xc6, 0xd3, 0x25, 0xf3, 0xa7, 0xdf, 0x30, 0x82, 0x2a, 0x0c, 0xc9, 0x96, 0x94, 0x15, 0x0f, 0xdf, 0xaa, 0x43, 0x77, 0x0c, 0x2c, 0xe1, 0x72, 0xe1, 0xa0, 0xf0, 0x4a, 0x8a, 0x50, 0x1c, 0x4d, 0x2f, 0x96, 0xee, 0x2e, 0xc8, 0x57, 0x42, 0xa8, 0x33, 0xce, 0xfc, 0x64, 0x83, 0x8b, 0xf7, 0x1d, 0x9c, 0xbb, 0x3e, 0x02, 0xfd, 0xa9, 0x7f, 0x5c, 0xdc, 0x85, 0xbc, 0x70, 0x78, 0x65, 0x44, 0xa7, 0xab, 0x89, 0xe2, 0xec, 0xbe, 0xe3, 0x54, 0x56, 0x82, 0xd6, 0xfe, 0x07, 0x9c, 0x3f, 0xe0, 0x54, 0x21, 0xb2, 0xc6, 0x26, 0x63, 0x06, 0xbe, 0x9f, 0x0a, 0x13, 0xcf, 0x01, 0x66, 0xba, 0xe8, 0xcc, 0x03, 0x26, 0x17, 0x27, 0x7e, 0x52, 0xfb, 0x81, 0x98, 0xcb, 0x7c, 0x78, 0x89, 0xb8, 0xb9, 0xfa, 0x97, 0x17, 0x42, 0xaa, 0xe6, 0x49, 0x88, 0x85, 0x92, 0xd1, 0x92, 0xc5, 0xfb, 0x59, 0xf1, 0x05, 0x60, 0xf5, 0xf5, 0xa7, 0xb0, 0xac, 0x21, 0x73, 0x9c, 0x35, 0xdd, 0x80, 0xf1, 0xfe, 0x6b, 0x58, 0x25, 0x73, 0x1c, 0x57, 0x2f, 0x7c, 0xc4, 0x54, 0x9c, 0x47, 0x6b, 0x84, 0xe0, 0x49, 0x45, 0x9a, 0xea, 0x7f, 0xe5, 0x33, 0xfb, 0xfa, 0xad, 0x72, 0xb7, 0x9a, 0x89, 0xe7, 0x7d, 0x1a, 0xdd, 0xb6, 0xf4, 0x4c, 0xbb, 0xf5, 0xe6, 0xa6, 0x5a, 0x55, 0x52, 0xfe, 0xc3, 0x05, 0xbc, 0x92, 0xce, 0xd3, 0xc8, 0x4b, 0x4d, 0x95, 0x07, 0x43, 0x87, 0xc7, 0x11, 0x84, 0xe8, 0x75, 0xd4, 0x13, 0xf6, 0x5c, 0x2b, 0x2d, 0x87, 0x4c, 0xb3, 0xd0, 0x31, 0xd0, 0xda, 0x7d, 0x03, 0x11, 0x38, 0x3d, 0x72, 0xf8, 0x23, 0xe2, 0x96, 0x93, 0x7d, 0x8f, 0x97, 0xba, 0xd1, 0x7a, 0x62, 0xf2, 0x9e, 0xf1, 0xa0, 0x91, 0xf3, 0x9b, 0xe8, 0x23, 0x3c, 0x01, 0x33, 0x0d, 0x5c, 0x4c, 0x91, 0x70, 0xfc, 0x50, 0x1b, 0x50, 0x22, 0xca, 0x29, 0xf6, 0x05, 0xe6, 0xc5, 0x92, 0x20, 0x05, 0x5f, 0x25, 0x85, 0xbc, 0xc2, 0x9e, 0x74, 0x20, 0x46, 0x43, 0x2c, 0x41, 0x47, 0x53, 0x01, 0xf4, 0xd7, 0xea, 0xaf, 0xd6, 0xb0, 0x24, 0xee, 0x8d, 0x6c, 0x85, 0x46, 0x51, 0xf9, 0x99, 0x25, 0xac, 0x47, 0xd7, 0x2f, 0x7d, 0x43, 0xcb, 0xd5, 0x43, 0x09, 0x75, 0x29, 0x98, 0x55, 0xec, 0xf0, 0xfc, 0x3b, 0x46, 0xf9, 0xd4, 0x19, 0xbc, 0xae, 0xb2, 0xc9, 0x0a, 0xe9, 0xd7, 0x1b, 0x15, 0x09, 0xf7, 0x82, 0xd0, 0x44, 0x3c, 0x0d, 0x60, 0x3f, 0x8d, 0x99, 0x7f, 0xdb, 0x0f, 0x46, 0x1e, 0x52, 0xec, 0x27, 0x4e, 0x84, 0x54, 0x3e, 0x60, 0x8b, 0xc2, 0xa7, 0x4b, 0x95, 0x81, 0x13, 0x4f, 0xf3, 0x6e, 0x78, 0xd8, 0x6d, 0xff, 0x07, 0xa5, 0xd9, 0x84, 0x5f, 0x29, 0xec, 0xad, 0x00, 0x32, 0x4f, 0x4d, 0x02, 0xc8, 0xf5, 0x5d, 0x07, 0x58, 0xad, 0x44, 0x6e, 0x12, 0xf3, 0x56, 0xc9, 0x8f, 0x0c, 0x9a, 0x91, 0xb7, 0x52, 0xd0, 0x19, 0xe2, 0xcc, 0xb2, 0xc1, 0x3d, 0x01, 0x7b, 0x6c, 0x70, 0x0e, 0xa6, 0x34, 0x7d, 0xf7, 0xf8, 0x5c, 0xeb, 0x3b, 0xc0, 0x85, 0x25, 0xab, 0x5e, 0x25, 0x1d, 0x7b, 0x02, 0x36, 0x34, 0x9a, 0xb6, 0x2b, 0x5e, 0x3f, 0x9f, 0x28, 0x81, 0xc5, 0x7f, 0x72, 0x1f, 0xb8, 0x7f, 0x25, 0x35, 0x30, 0x2c, 0x25, 0x63, 0x5d, 0xbf, 0x56, 0x4c, 0x64, 0xa1, 0x10, 0x40, 0x69, 0x2e, 0xcd, 0x19, 0xed, 0xba, 0x25, 0x62, 0x5b, 0xd1, 0xfd, 0xbf, 0xdd, 0xc3, 0xfb, 0x88, 0x74, 0x60, 0x3d, 0xb8, 0x48, 0x01, 0x4a, 0x06, 0x3d, 0xc8, 0x48, 0x51, 0xc6, 0x28, 0x70, 0x41, 0xfe, 0xa7, 0xc0, 0x2c, 0xf5, 0xe2, 0xef, 0x36, 0x47, 0xd2, 0xa6, 0xbd, 0xf4, 0x4f, 0xed, 0xf4, 0x6b, 0xd2, 0xe4, 0xcd, 0xe8, 0x7f, 0xb3, 0x1d, 0x00, 0x63, 0xc3, 0xfb, 0x7b, 0xfa, 0x2f, 0x68, 0x61, 0xf4, 0x75, 0x36, 0x57, 0x38, 0x72, 0x22, 0x2c, 0x2a, 0x8d, 0x44, 0xb0, 0x29, 0x32, 0xa9, 0xc5, 0x5c, 0x82, 0x3e, 0xb8, 0xaf, 0x48, 0xef, 0xd1, 0x18, 0x2f, 0x11, 0x28, 0x1f, 0x33, 0xfd, 0xbb, 0x9d, 0x56, 0xfe, 0xbe, 0xc4, 0x94, 0x6e, 0x32, 0x5f, 0x18, 0x1b, 0xb9, 0x5b, 0xb0, 0xf0, 0xa9, 0x87, 0x7f, 0xd1, 0x5f, 0x98, 0xf2, 0xc6, 0xd6, 0x70, 0xf5, 0x5c, 0x78, 0xa0, 0x66, 0x48, 0x33, 0x2b, 0xc9, 0x4e, 0xd0, 0x8d, 0x3e, 0x61, 0x80, 0xfb, 0xb1, 0x0c, 0xb8, 0xed, 0x51, 0x10, 0x3f, 0xda, 0x43, 0x4f, 0x86, 0x42, 0x97, 0xe8, 0x37, 0xf2, 0x7b, 0xa4, 0x10, 0x84, 0xae, 0x91, 0xf2, 0x25, 0x38, 0xec, 0x35, 0x9b, 0x59, 0x44, 0x3f, 0x86, 0xbf, 0xdd, 0x55, 0xe5, 0xfb, 0x53, 0xb0, 0xdd, 0x36, 0x7f, 0xd4, 0xb6, 0x20, 0x9e, 0x1d, 0x27, 0x2a, 0xb0, 0x9b, 0xd3, 0xf5, 0x1f, 0x20, 0x13, 0x0a, 0xa1, 0x96, 0xf6, 0xcb, 0x5f, 0x96, 0x86, 0xaa, 0x57, 0x37, 0x4d, 0x98, 0xff, 0x24, 0x18, 0xc0, 0x2b, 0xf2, 0xfb, 0x76, 0x30, 0xb0, 0x95, 0x6a, 0x4a, 0xbf, 0x95, 0x22, 0x3b, 0xe4, 0x7d, 0xa7, 0x35, 0x9b, 0xa7, 0x7e, 0xfa, 0xae, 0x85, 0xd9, 0x42, 0x07, 0x2c, 0x0f, 0x5d, 0xc2, 0x14, 0x4a, 0x19, 0x87, 0x19, 0x7f, 0xe6, 0x17, 0xc6, 0xa4, 0x38, 0x24, 0xd3, 0x1d, 0x2d, 0x66, 0xec, 0x77, 0x70, 0xeb, 0xb5, 0x58, 0x5d, 0xaf, 0x0a, 0xb6, 0x66, 0x6c, 0x8b, 0x48, 0xb5, 0xb3, 0x58, 0x3a, 0x12, 0x3c, 0x19, 0x25, 0x08, 0x7b, 0x42, 0x3e, 0x43, 0x73, 0x95, 0xce, 0x3d, 0xcf, 0xe8, 0xe2, 0x1a, 0x2f, 0x28, 0x43, 0xd0, 0xc0, 0x9e, 0xa8, 0x8a, 0x0f, 0x71, 0x2b, 0x4f, 0x1f, 0x6c, 0xfa, 0xde, 0xb9, 0x02, 0x4f, 0xdd, 0x03, 0x8f, 0xa2, 0x33, 0x54, 0xe1, 0x1d, 0xb3, 0x47, 0xf7, 0x50, 0xfa, 0x0e, 0x08, 0x26, 0x9a, 0x09, 0xc8, 0x17, 0x78, 0x97, 0xe6, 0xa0, 0x72, 0x2d, 0xd9, 0xf0, 0x45, 0xa5, 0xdc, 0xe5, 0xae, 0xd8, 0x37, 0x36, 0xd0, 0x6e, 0xc1, 0xf2, 0xd6, 0xf5, 0xa3, 0x29, 0xd9, 0x31, 0x5e, 0xe8, 0x04, 0xb3, 0x10, 0x6b, 0xf6, 0xad, 0xf3, 0x8f, 0x67, 0x05, 0x26, 0x86, 0x0f, 0xa8, 0xb0, 0xce, 0xc3, 0x21, 0xc2, 0x64, 0xe2, 0x6a, 0x3c, 0x35, 0xef, 0x02, 0x73, 0xd5, 0x7f, 0x3f, 0x31, 0x73, 0x56, 0xe6, 0xfe, 0x0d, 0xcd, 0xf9, 0x9e, 0xe0, 0x77, 0xd0, 0xdb, 0x23, 0x03, 0x6b, 0x85, 0xf4, 0x64, 0x07, 0xb6, 0x93, 0x30, 0xef, 0x5a, 0xce, 0x46, 0x95, 0xef, 0xbc, 0xb4, 0xe1, 0x8a, 0xae, 0xd8, 0xc9, 0x1b, 0x63, 0xc5, 0x22, 0xf1, 0x7b, 0xe7, 0xb6, 0x81, 0x2e, 0xeb, 0x96, 0x63, 0x3e, 0xd9, 0xb2, 0x9d, 0x2a, 0x83, 0xa6, 0x24, 0xa5, 0x23, 0xd7, 0xa0, 0x46, 0x40, 0xbf, 0x70, 0x81, 0xd1, 0x85, 0xee, 0xd6, 0xa5, 0xd1, 0xf4, 0x48, 0x02, 0xde, 0x9f, 0x11, 0x8d, 0xd1, 0x52, 0x94, 0x69, 0x49, 0xfe, 0x93, 0xa3, 0x37, 0xa1, 0xa2, 0xce, 0xf0, 0x0d, 0xdc, 0xea, 0x80, 0xeb, 0xd4, 0x8b, 0x41, 0xff, 0xcf, 0x37, 0xad, 0xae, 0x30, 0x0f, 0x71, 0xbd, 0x33, 0xb1, 0xc2, 0x5b, 0xde, 0x5e, 0xf4, 0x62, 0x35, 0x58, 0x49, 0xda, 0xae, 0x8e, 0x07, 0xbf, 0xe4, 0x7b, 0xcd, 0x03, 0x8f, 0x4c, 0x26, 0xd7, 0xb4, 0x41, 0x5f, 0x27, 0x19, 0x55, 0x96, 0x63, 0xfc, 0x21, 0x14, 0x85, 0x04, 0xfe, 0xdd, 0x50, 0x78, 0x6a, 0x84, 0xd5, 0xaf, 0xad, 0x44, 0x3c, 0xc8, 0xbc, 0x4d, 0xc1, 0x9b, 0x5d, 0x5c, 0xfd, 0xee, 0x8c, 0x8e, 0x67, 0xed, 0x1d, 0x76, 0x1a, 0xd4, 0xa4, 0x6d, 0xd9, 0xef, 0x92, 0x29, 0x50, 0xc4, 0xa0, 0x92, 0x9c, 0x8f, 0x71, 0xd0, 0x0e, 0xee, 0x72, 0xa9, 0x2c, 0xde, 0x06, 0x0a, 0xf9, 0xe6, 0xe0, 0xe3, 0x77, 0x92, 0xaf, 0x38, 0x69, 0x23, 0x01, 0x76, 0x5d, 0x85, 0x61, 0x03, 0xea, 0x81, 0xc3, 0x18, 0x37, 0x34, 0x23, 0xd3, 0xbc, 0xc0, 0x68, 0x88, 0x4d, 0x41, 0x8e, 0x59, 0x54, 0x03, 0x04, 0x06, 0x5e, 0xf2, 0x53, 0x06, 0xd9, 0x51, 0x01, 0xd6, 0x1b, 0xaf, 0xb5, 0x91, 0xa7, 0x17, 0x9b, 0xc1, 0xac, 0x88, 0x0a, 0x74, 0xcf, 0xa4, 0x65, 0x93, 0x2a, 0xac, 0x3f, 0x70, 0x95, 0xac, 0xc2, 0x9e, 0x24, 0xf3, 0x51, 0x05, 0xf1, 0xc6, 0x6c, 0x35, 0x1b, 0x56, 0xd4, 0xfb, 0x0e, 0xef, 0xf0, 0x32, 0x05, 0x71, 0x70, 0xdc, 0xce, 0x04, 0x30, 0x72, 0xcd, 0x08, 0x5f, 0x78, 0x44, 0x4b, 0xe0, 0x53, 0xd2, 0x7f, 0xf0, 0x5f, 0x39, 0xeb, 0x0a, 0x3d, 0x64, 0x60, 0x07, 0x6a, 0xa8, 0x6f, 0x8a, 0x16, 0x4a, 0xd9, 0x9b, 0x33, 0x41, 0x47, 0x92, 0xcc, 0x3e, 0x3b, 0x37, 0x98, 0xea, 0x47, 0x27, 0xcf, 0x6e, 0x7d, 0x7a, 0x3c, 0x39, 0x26, 0xa2, 0x94, 0xfd, 0xb7, 0x96, 0x06, 0xfb, 0x00, 0x31, 0x13, 0x81, 0xa7, 0xd4, 0xa0, 0xb1, 0xd5, 0x53, 0x49, 0x83, 0x2f, 0x0f, 0xf9, 0x0e, 0x08, 0x5f, 0xb7, 0x03, 0xd4, 0x35, 0xc3, 0x7a, 0xe0, 0xfe, 0xe2, 0xf1, 0x41, 0xc9, 0xf6, 0x91, 0x0b, 0xac, 0xd1, 0xb4, 0xc3, 0x63, 0x4b, 0xa5, 0x16, 0x3b, 0x92, 0xa6, 0xca, 0x2f, 0xc2, 0x38, 0xf6, 0x50, 0xb6, 0x96, 0x6e, 0x6a, 0x1d, 0x83, 0x82, 0xe4, 0xd0, 0x45, 0xe8, 0xe8, 0x63, 0xf2, 0xf6, 0xc4, 0xf9, 0xea, 0x14, 0x90, 0x5d, 0xa5, 0x72, 0x11, 0x4f, 0xaf, 0xf6, 0xde, 0x1c, 0xf0, 0x79, 0xc1, 0x72, 0x31, 0x32, 0x60, 0x71, 0xdc, 0x72, 0x1d, 0x05, 0x03, 0x92, 0x3a, 0x74, 0xa4, 0x2a, 0x41, 0x33, 0x2c, 0x84, 0xa3, 0xfe, 0x39, 0x51, 0x9f, 0x27, 0xa4, 0x9a, 0x65, 0x2f, 0xbf, 0xf9, 0x7c, 0x93, 0xdb, 0x08, 0x61, 0xe8, 0x0e, 0x1a, 0x71, 0x2a, 0x33, 0x29, 0x08, 0x52, 0x31, 0x10, 0xeb, 0x26, 0x81, 0xfa, 0xe3, 0x55, 0xea, 0x1b, 0xab, 0xc3, 0x8f, 0x9e, 0x0c, 0x22, 0x2c, 0xde, 0x47, 0xc2, 0x9d, 0xd8, 0xb3, 0xaa, 0xa0, 0xe1, 0xa7, 0xe7, 0xdb, 0x94, 0x9a, 0x24, 0x21, 0x0f, 0x89, 0x7b, 0xf1, 0x5f, 0x9a, 0x8b, 0x3f, 0x38, 0xfe, 0xcb, 0x77, 0xe9, 0x1b, 0x1d, 0xc0, 0x90, 0xeb, 0xa7, 0x7e, 0x8a, 0x9f, 0xde, 0x1a, 0x2e, 0x89, 0xe3, 0x05, 0xbb, 0x38, 0x13, 0xfa, 0x8e, 0xe5, 0xda, 0x84, 0x99, 0x0e, 0xc7, 0xc1, 0x10, 0x60, 0xe6, 0x65, 0x65, 0xda, 0x4a, 0x01, 0x77, 0x30, 0xe9, 0x86, 0x07, 0x6d, 0xad, 0x05, 0x6b, 0xdd, 0xc7, 0xb8, 0x86, 0x2a, 0x47, 0x46, 0xf7, 0xc5, 0xe9, 0x43, 0x91, 0x87, 0x32, 0xf6, 0x0b, 0x99, 0xbc, 0x60, 0xf9, 0x91, 0xcf, 0x79, 0xfb, 0xdd, 0x30, 0xbd, 0x35, 0x65, 0x3e, 0xe7, 0xff, 0x6c, 0x3a, 0xfd, 0xdd, 0xb7, 0xe7, 0x8c, 0xb1, 0xf2, 0x53, 0x35, 0x2f, 0x4f, 0xf4, 0x68, 0x92, 0x70, 0xf6, 0x70, 0x8d, 0x87, 0xd4, 0xb0, 0x85, 0xbc, 0x26, 0x2c, 0xfd, 0xcf, 0xba, 0x4b, 0x52, 0xfe, 0xe5, 0xdb, 0xa8, 0x29, 0x1b, 0x55, 0x24, 0x34, 0xbe, 0x62, 0x5c, 0xad, 0x34, 0x9f, 0x0b, 0xae, 0x3c, 0x9d, 0x0a, 0x05, 0x82, 0x2d, 0x7b, 0x93, 0x71, 0xda, 0x47, 0xf2, 0x48, 0xb6, 0xcc, 0x5b, 0x70, 0x5a, 0xcf, 0xc6, 0x0d, 0x28, 0xb8, 0x52, 0xd3, 0xd3, 0xfe, 0xe8, 0x1a, 0x22, 0xe0, 0x1b, 0x35, 0xf0, 0x56, 0x53, 0x00, 0x78, 0x47, 0x2b, 0xb9, 0xcf, 0xfc, 0x17, 0x11, 0xb2, 0xd5, 0x4a, 0x82, 0x82, 0x3a, 0xd7, 0xe2, 0x8d, 0xd5, 0x16, 0x39, 0x8f, 0xfe, 0x49, 0xd0, 0x79, 0x77, 0x7f, 0x8a, 0x70, 0x5a, 0xb9, 0x77, 0x19, 0x4f, 0x4c, 0xa7, 0x14, 0x02, 0x86, 0x3c, 0xc6, 0xd5, 0x94, 0xc3, 0x5c, 0xd2, 0xa3, 0xc5, 0x0c, 0xe3, 0x46, 0x98, 0x9e, 0x45, 0x18, 0x7b, 0x2c, 0x3a, 0xa2, 0xe3, 0x26, 0xfe, 0x7f, 0x0f, 0x98, 0xfd, 0xbd, 0xe2, 0xb0, 0x43, 0x87, 0xf2, 0x7b, 0x34, 0x01, 0xdd, 0xef, 0x7d, 0x74, 0xdc, 0x2e, 0x4a, 0xab, 0x9a, 0x09, 0xba, 0x9d, 0x46, 0xc3, 0x8f, 0x4c, 0xe6, 0x18, 0x2b, 0xec, 0xef, 0x7e, 0xb8, 0x48, 0x13, 0xab, 0xa6, 0x62, 0x5b, 0x57, 0x5a, 0x59, 0x75, 0x43, 0x24, 0x90, 0x4f, 0x7a, 0x72, 0x0d, 0xe5, 0xd7, 0x44, 0x1f, 0x57, 0xc7, 0xe0, 0x44, 0x3e, 0x50, 0xc7, 0x49, 0x40, 0x53, 0xe7, 0xb3, 0xe2, 0x0e, 0x12, 0x5e, 0x9e, 0xe4, 0xaf, 0x64, 0x36, 0x61, 0xb0, 0x40, 0x47, 0x79, 0xc4, 0x34, 0x21, 0x10, 0xcd, 0xe8, 0xd6, 0xc0, 0x94, 0x53, 0x91, 0xd6, 0xbb, 0xde, 0x29, 0x9d, 0xf4, 0xc7, 0xf6, 0xe0, 0x71, 0xc4, 0xe4, 0xaa, 0x9c, 0xea, 0xc5, 0x50, 0x07, 0xcc, 0xec, 0xb1, 0xa6, 0xe7, 0xf7, 0xbd, 0x3c, 0x3e, 0xec, 0x34, 0x13, 0x41, 0x88, 0xb0, 0xf0, 0xf3, 0xd3, 0xe6, 0x46, 0x4c, 0xf8, 0x29, 0xaa, 0xdc, 0x54, 0x30, 0x87, 0xb2, 0xcd, 0x18, 0x13, 0x7c, 0x65, 0xac, 0x81, 0xf0, 0x0e, 0xe5, 0x79, 0x6a, 0xc1, 0xad, 0xc5, 0xd6, 0xca, 0xe8, 0x4d, 0xd0, 0x66, 0xb5, 0x45, 0x0a, 0x8f, 0xf1, 0xa5, 0xee, 0x17, 0xfe, 0xd9, 0x85, 0xf4, 0xc2, 0xba, 0x98, 0xdb, 0xf2, 0xbe, 0x15, 0x10, 0x90, 0x6b, 0xb3, 0x7c, 0xb2, 0x12, 0xd9, 0x00, 0x86, 0xb9, 0xbd, 0x09, 0x93, 0x59, 0xc9, 0x64, 0x41, 0x4a, 0x42, 0x54, 0x9c, 0xfb, 0x2b, 0xe2, 0x55, 0xe6, 0x67, 0x75, 0x09, 0xc3, 0x1f, 0xa2, 0xc6, 0xfc, 0x63, 0x45, 0xcc, 0x62, 0x14, 0xd1, 0x90, 0x1e, 0x01, 0xe4, 0x07, 0xea, 0x50, 0x1f, 0x20, 0x81, 0x20, 0x34, 0x93, 0x53, 0x6c, 0x40, 0xd9, 0x7e, 0x32, 0x5c, 0x7b, 0xfa, 0xd5, 0x6e, 0x90, 0x13, 0xc1, 0x46, 0x81, 0x1d, 0x4d, 0xe6, 0x10, 0x63, 0xe5, 0x20, 0x99, 0x60, 0x68, 0x67, 0x97, 0x32, 0xcf, 0xdf, 0x69, 0x4b, 0x10, 0xb6, 0x57, 0x6a, 0x41, 0xb7, 0xd0, 0xc9, 0x01, 0x1c, 0xf5, 0x98, 0x14, 0xa4, 0x5c, 0xab, 0x4d, 0xe6, 0x0d, 0x70, 0xb1, 0xe5, 0xd1, 0x23, 0xd9, 0xe4, 0xad, 0x45, 0x98, 0x7c, 0xa9, 0x4a, 0xde, 0xeb, 0xd5, 0x92, 0xdc, 0xaf, 0x8e, 0x9a, 0x69, 0x54, 0xfe, 0x74, 0xa5, 0x8a, 0xe2, 0x74, 0xdc, 0x7a, 0x90, 0x2d, 0xad, 0x5a, 0x38, 0x9b, 0x6b, 0x3f, 0x6a, 0xa2, 0xc3, 0x33, 0xd8, 0xb7, 0x9f, 0x88, 0x5e, 0xde, 0x4b, 0x6c, 0x3f, 0xd4, 0xd6, 0xbd, 0xb2, 0x8d, 0xbc, 0x1e, 0x9d, 0xe1, 0xc1, 0x4a, 0xa0, 0x82, 0x20, 0xa8, 0x55, 0x31, 0xe5, 0x20, 0xd6, 0x31, 0x98, 0x2e, 0x80, 0xfc, 0x1b, 0x34, 0xf7, 0x36, 0xd5, 0x15, 0x6a, 0xdf, 0x11, 0xff, 0x19, 0xcc, 0xa0, 0x88, 0x14, 0x58, 0xc6, 0xfd, 0x45, 0x57, 0x54, 0xf6, 0xb0, 0x4b, 0x11, 0x2e, 0xfa, 0xdb, 0x5e, 0x92, 0x28, 0x80, 0x1a, 0x98, 0xaa, 0x82, 0xc4, 0xd2, 0x98, 0x23, 0xdf, 0xc3, 0x3b, 0x19, 0x9b, 0xf1, 0xcf, 0x42, 0xb1, 0x3b, 0x87, 0x94, 0x8f, 0x6d, 0xd2, 0x53, 0xb5, 0x12, 0xdd, 0x86, 0x5f, 0x8a, 0x59, 0xab, 0x64, 0x5c, 0x7e, 0xaa, 0x5e, 0xcd, 0x50, 0x08, 0x0b, 0xb1, 0x21, 0x5d, 0xf3, 0x81, 0x57, 0x08, 0x4b, 0xae, 0x6f, 0x21, 0x1a, 0x35, 0x42, 0xaf, 0x9a, 0x74, 0x87, 0x1b, 0xe1, 0x3b, 0x9a, 0xe5, 0xc0, 0x27, 0x7c, 0x96, 0xec, 0x2b, 0x1a, 0xf6, 0x5b, 0x70, 0xd2, 0x7e, 0xf1, 0x5f, 0x33, 0x10, 0x5c, 0xfc, 0x04, 0xe6, 0x3d, 0x75, 0x88, 0xc9, 0x88, 0xfa, 0x01, 0x83, 0x2d, 0xd0, 0x73, 0x96, 0xf8, 0xa1, 0xaa, 0x2e, 0xb5, 0x17, 0x7e, 0x55, 0x99, 0xa9, 0x56, 0x66, 0xdd, 0xb4, 0xeb, 0xc4, 0xac, 0xcd, 0x4f, 0xcb, 0x3f, 0x56, 0x2d, 0x07, 0x47, 0x4f, 0x52, 0xa4, 0x8b, 0x6f, 0x6c, 0x26, 0xd2, 0x73, 0x12, 0x5b, 0x03, 0xb7, 0x05, 0x8d, 0x8b, 0x03, 0xb6, 0xfb, 0xff, 0xa7, 0x08, 0x8b, 0x02, 0xca, 0x56, 0xb9, 0x6a, 0xff, 0xb8, 0xd3, 0x9e, 0x19, 0x82, 0x68, 0x42, 0x41, 0x0e, 0xfe, 0x17, 0x45, 0xbc, 0x03, 0x1c, 0x33, 0x36, 0x06, 0xfa, 0x27, 0xf9, 0x27, 0x9e, 0x61, 0x11, 0xcc, 0x28, 0x9a, 0x23, 0x96, 0x04, 0x98, 0xb1, 0x94, 0x56, 0x01, 0x9a, 0xb6, 0x9c, 0x6d, 0xe0, 0x84, 0x8f, 0xbe, 0xae, 0x0f, 0x49, 0xb4, 0x9a, 0x28, 0xad, 0xbc, 0x27, 0xd1, 0x04, 0x09, 0x8e, 0xf1, 0xe4, 0xe6, 0xbe, 0x4c, 0x56, 0x4b, 0xa1, 0xb1, 0x37, 0xae, 0xa1, 0x75, 0xdf, 0x1b, 0x6b, 0x21, 0x01, 0x87, 0xf2, 0x68, 0xd2, 0x62, 0xb7, 0x5c, 0x6e, 0x6b, 0x49, 0xe1, 0x77, 0xc8, 0x07, 0x61, 0xff, 0x56, 0x2d, 0xc1, 0xa8, 0x3e, 0x0f, 0x94, 0x09, 0xc9, 0x9f, 0x8f, 0x54, 0x75, 0x35, 0x3d, 0x36, 0x48, 0x90, 0xf4, 0xff, 0x64, 0x18, 0x08, 0x03, 0xdc, 0x65, 0x3e, 0x40, 0xc6, 0x05, 0x84, 0x41, 0x91, 0x7a, 0xdf, 0x42, 0x99, 0x83, 0xa4, 0x94, 0xf9, 0x9d, 0xeb, 0x43, 0xa0, 0xc8, 0x41, 0xf7, 0xa8, 0x8e, 0x9d, 0x18, 0xe3, 0x42, 0x96, 0x35, 0xb6, 0x86, 0xd2, 0xa7, 0x2a, 0x0f, 0xc2, 0x71, 0x40, 0xad, 0x8c, 0x6b, 0x85, 0x85, 0x49, 0xa0, 0xe7, 0xa1, 0x71, 0xf4, 0xc7, 0xac, 0x93, 0x0a, 0x4f, 0xf6, 0x4a, 0x64, 0x06, 0xbf, 0x6c, 0xcc, 0xa1, 0xb1, 0x84, 0xf3, 0x1d, 0xae, 0x83, 0x59, 0x0a, 0xcc, 0xb2, 0x6c, 0x2a, 0x9e, 0xeb, 0xf4, 0x3a, 0xb6, 0x09, 0xae, 0x10, 0x67, 0x9d, 0x37, 0xe6, 0xd0, 0xe3, 0x2c, 0xf6, 0x15, 0xf4, 0x90, 0x47, 0xf0, 0x3c, 0x6e, 0xc6, 0x69, 0x2f, 0xbf, 0x98, 0xe1, 0x38, 0x8d, 0xaf, 0x55, 0xf2, 0x59, 0x9b, 0xe1, 0x9b, 0xbb, 0xa3, 0x83, 0xc6, 0x48, 0x15, 0x22, 0x4f, 0xb8, 0xda, 0xcf, 0x94, 0x49, 0x4d, 0x4a, 0xe2, 0x5e, 0x4e, 0xc8, 0x2e, 0x6c, 0x91, 0xf3, 0x06, 0x16, 0x3c, 0x33, 0xc7, 0x97, 0xb2, 0x2c, 0x0f, 0x61, 0xa9, 0x88, 0x75, 0x03, 0x83, 0xf6, 0x78, 0x50, 0xdb, 0x72, 0xb6, 0xbe, 0x5e, 0xc8, 0x5f, 0x0c, 0xdc, 0x53, 0xe8, 0x28, 0x9e, 0x0b, 0x04, 0x4f, 0xfb, 0xbf, 0xd0, 0x76, 0x26, 0x9e, 0x4d, 0xe9, 0x4a, 0xfc, 0x14, 0x32, 0xd9, 0x53, 0x45, 0x3c, 0x21, 0x88, 0xc1, 0xb8, 0x20, 0x70, 0x99, 0xc0, 0x99, 0x93, 0xc6, 0xba, 0x67, 0x30, 0x1a, 0x80, 0x12, 0x81, 0x76, 0xbe, 0xa0, 0x3f, 0x3e, 0x9b, 0xad, 0x69, 0x0a, 0x9b, 0xbe, 0x42, 0x9e, 0xc3, 0xd3, 0x99, 0x1d, 0xff, 0x3b, 0x4c, 0x79, 0xc2, 0xac, 0x0f, 0x2e, 0xec, 0x93, 0x6a, 0x30, 0xf0, 0xa9, 0x01, 0x21, 0x36, 0xc7, 0x18, 0xc8, 0xbe, 0xfb, 0x56, 0xbf, 0x07, 0xdb, 0xc9, 0x6b, 0x2f, 0x19, 0x2b, 0x31, 0x5b, 0x58, 0x64, 0xe7, 0x59, 0x3e, 0x4f, 0x89, 0x84, 0xcb, 0xc1, 0x2e, 0xe8, 0xe9, 0xc8, 0x3a, 0xa7, 0x44, 0x30, 0xd4, 0x9c, 0x5b, 0x4c, 0x9b, 0x3d, 0xd8, 0xf3, 0x94, 0xc6, 0x1c, 0xc8, 0x67, 0x94, 0x1f, 0xbe, 0xcc, 0xce, 0x77, 0xdc, 0x40, 0x4b, 0xb6, 0x3e, 0xfc, 0xb0, 0xf9, 0x5d, 0x27, 0xd9, 0xbe, 0x90, 0x4b, 0x7b, 0xf6, 0xd2, 0x06, 0x07, 0x5c, 0xc5, 0x02, 0xd1, 0x04, 0xf7, 0x26, 0x71, 0x37, 0x64, 0x0e, 0x69, 0x7e, 0x3d, 0xb9, 0x09, 0xfd, 0xe8, 0x82, 0x90, 0x02, 0x48, 0x52, 0x94, 0xde, 0x3e, 0x13, 0xa4, 0xf4, 0x70, 0x68, 0x2b, 0x0f, 0x49, 0x9b, 0x97, 0xf9, 0x41, 0xd7, 0xbb, 0x49, 0x5e, 0x97, 0x72, 0x7c, 0xfa, 0x5e, 0x86, 0x47, 0xc8, 0xa9, 0xd0, 0x2c, 0x12, 0x21, 0xa0, 0x4c, 0x44, 0x16, 0x5f, 0x7c, 0xae, 0x29, 0x72, 0x9a, 0x86, 0x48, 0x62, 0x22, 0x2c, 0xe0, 0x3a, 0xfc, 0xb2, 0x4d, 0x31, 0x98, 0x9c, 0x96, 0x89, 0x3d, 0xe4, 0x57, 0xb7, 0x9e, 0x42, 0xfe, 0xc4, 0xaf, 0xaa, 0x3a, 0xf3, 0xb6, 0x15, 0xb1, 0xa4, 0xa5, 0x84, 0xf2, 0x78, 0xa7, 0x42, 0xaa, 0xb6, 0xf9, 0x6a, 0x1a, 0xee, 0xfb, 0xaa, 0xc8, 0xdc, 0x87, 0x46, 0x75, 0x8e, 0x81, 0x60, 0x50, 0xc9, 0xaf, 0x76, 0x69, 0xaa, 0xcb, 0x2c, 0x68, 0x89, 0xd7, 0x4c, 0x7f, 0x22, 0xb1, 0x0b, 0x9d, 0xf7, 0xe7, 0x8e, 0xe5, 0xf0, 0xcc, 0xac, 0x5e, 0x45, 0xcc, 0xf6, 0xec, 0x9d, 0xfc, 0xf4, 0x7f, 0x78, 0xf5, 0xb2, 0x8a, 0xca, 0xe3, 0x7b, 0xb7, 0xe8, 0xd9, 0xe5, 0xd9, 0xa8, 0x68, 0x0e, 0x21, 0xc4, 0x6f, 0x24, 0x96, 0x80, 0x34, 0x2b, 0xbf, 0x8d, 0xb4, 0xfa, 0xa2, 0x2c, 0x38, 0x87, 0xf3, 0x97, 0x29, 0x65, 0x85, 0x9c, 0x25, 0x8b, 0x04, 0x8b, 0x52, 0x57, 0xe6, 0x52, 0xf3, 0xd3, 0x9f, 0xe7, 0x39, 0x36, 0x14, 0xe6, 0x5b, 0xae, 0x53, 0x7c, 0xe9, 0x5c, 0x81, 0x83, 0x5d, 0xa0, 0x13, 0xee, 0xf3, 0x98, 0x42, 0x68, 0xba, 0xe3, 0xb8, 0x38, 0xeb, 0xab, 0x90, 0x68, 0x7a, 0xe2, 0x7d, 0x26, 0xec, 0xcb, 0x49, 0x6a, 0x68, 0xbd, 0x82, 0xd9, 0x10, 0x24, 0x70, 0xea, 0x92, 0xc8, 0x49, 0x47, 0xf9, 0x52, 0xa8, 0x76, 0xca, 0x0c, 0x3c, 0xb8, 0x4c, 0xe8, 0xbd, 0x31, 0x27, 0xc4, 0x25, 0x4a, 0x30, 0xec, 0x1c, 0x54, 0x84, 0xe0, 0xb4, 0x6e, 0xd4, 0x58, 0x56, 0xa8, 0xff, 0x86, 0xfd, 0x68, 0xe6, 0x9b, 0xa1, 0x0d, 0x7c, 0x8c, 0xf7, 0xd3, 0x1c, 0x16, 0x57, 0xf6, 0x20, 0x00, 0xfd, 0x1b, 0xaf, 0xa0, 0x75, 0xeb, 0xd6, 0xa0, 0x51, 0x01, 0xda, 0x02, 0x1d, 0x06, 0xcd, 0x62, 0x95, 0x1a, 0x60, 0x7b, 0x15, 0x76, 0xf8, 0xed, 0x50, 0x50, 0x04, 0x3e, 0x45, 0xff, 0x8d, 0x1e, 0x6f, 0x60, 0x0e, 0xef, 0x3c, 0x78, 0x87, 0x84, 0xc1, 0x5b, 0xcd, 0x29, 0xac, 0x4c, 0x24, 0xe4, 0x7a, 0x25, 0x0f, 0xfb, 0xea, 0xfa, 0x67, 0xb6, 0xb1, 0xf9, 0xab, 0x66, 0x6f, 0x94, 0x97, 0xa6, 0xe2, 0xe3, 0xf8, 0xe1, 0x59, 0x43, 0xbe, 0x15, 0x6c, 0x44, 0x53, 0xd6, 0xeb, 0xc2, 0x2b, 0x95, 0x14, 0x51, 0x9d, 0x22, 0x09, 0xdf, 0xf1, 0x70, 0x81, 0x94, 0xba, 0x99, 0xbd, 0xfd, 0x66, 0x21, 0xbe, 0x6a, 0x13, 0x7f, 0xb5, 0x94, 0xa4, 0xd9, 0xbb, 0x83, 0x14, 0x10, 0xc2, 0xaf, 0x0b, 0xfc, 0xcb, 0x66, 0xaf, 0xf9, 0x5a, 0x6d, 0xbd, 0xa2, 0x27, 0xea, 0xd8, 0xdc, 0x17, 0x81, 0x21, 0x17, 0x6a, 0xbe, 0x07, 0xd0, 0x36, 0xb3, 0x61, 0x5a, 0x14, 0xe2, 0xba, 0xdf, 0x19, 0x5d, 0xeb, 0xa2, 0x08, 0x2b, 0xf0, 0x86, 0xc5, 0xee, 0xf4, 0xd4, 0x0d, 0xc3, 0xae, 0x39, 0x65, 0x6a, 0xf0, 0x0e, 0x50, 0xa7, 0x7d, 0xdc, 0xc5, 0xe7, 0x1c, 0x20, 0xe0, 0x27, 0xea, 0x4b, 0xd8, 0x12, 0xf4, 0x0d, 0x31, 0x69, 0x05, 0xd3, 0x33, 0xa8, 0xbd, 0x8f, 0x9a, 0xe7, 0xe3, 0xb7, 0x8f, 0xfe, 0xfc, 0x90, 0xd7, 0xec, 0x1d, 0xac, 0x4b, 0x7a, 0xfd, 0xb1, 0x88, 0x1b, 0x4e, 0x5d, 0xe7, 0x17, 0x4e, 0xc7, 0xb0, 0xe8, 0x99, 0xe8, 0x8a, 0xe4, 0x41, 0x59, 0x36, 0x1d, 0x20, 0x5e, 0x7d, 0x86, 0x6d, 0x24, 0x67, 0x57, 0x8e, 0x47, 0xae, 0xb2, 0x2d, 0x97, 0x72, 0x86, 0x8e, 0x1c, 0x2e, 0xb4, 0x20, 0x58, 0xeb, 0x70, 0x52, 0xcb, 0xb4, 0xea, 0xa7, 0xbd, 0x49, 0x2e, 0x0d, 0x37, 0x18, 0x49, 0x6b, 0x53, 0x68, 0xae, 0x79, 0xb5, 0xd8, 0xd8, 0xd4, 0x5a, 0x08, 0x30, 0x52, 0x91, 0x96, 0x30, 0x92, 0x46, 0x4c, 0xc9, 0xd8, 0x86, 0x97, 0x02, 0x18, 0x40, 0x3b, 0xe3, 0x51, 0x49, 0x46, 0x91, 0x1d, 0xa3, 0x42, 0xba, 0x85, 0xff, 0xaf, 0x33, 0x19, 0x80, 0xb1, 0xe0, 0x41, 0xc2, 0x05, 0xd5, 0xce, 0x1b, 0x39, 0xba, 0xd4, 0x21, 0x1d, 0x74, 0xbc, 0x6c, 0x75, 0x02, 0x95, 0x9d, 0xf0, 0xa4, 0xab, 0x9e, 0x5e, 0x43, 0x5b, 0x2c, 0x1d, 0x0d, 0x25, 0x93, 0xd4, 0x60, 0x03, 0xb9, 0x64, 0xe9, 0xf9, 0x5e, 0x1c, 0x0d, 0xee, 0xa2, 0x2d, 0x87, 0xba, 0xc8, 0x5d, 0x53, 0x80, 0x39, 0xff, 0xcb, 0x3e, 0xcc, 0x22, 0x11, 0xa2, 0x44, 0x09, 0xac, 0x20, 0x1b, 0xdb, 0x76, 0x41, 0x7e, 0x9c, 0xb5, 0x3e, 0x98, 0x5c, 0x88, 0xcd, 0x13, 0xae, 0x85, 0x3b, 0xdc, 0x5c, 0xa0, 0xbb, 0x27, 0x59, 0x4e, 0xfe, 0xb4, 0xf7, 0xeb, 0x03, 0x50, 0x5a, 0x59, 0x31, 0x9e, 0x2d, 0xeb, 0xa3, 0x17, 0x93, 0x81, 0xc3, 0x50, 0x61, 0xf4, 0x1a, 0x7b, 0x8a, 0xb4, 0x66, 0x31, 0xdb, 0xaf, 0xed, 0x6f, 0xe8, 0x75, 0x12, 0xde, 0x46, 0x9a, 0x26, 0x57, 0xfa, 0x5c, 0x80, 0xa6, 0x32, 0x86, 0xd0, 0x8e, 0x33, 0x95, 0xb0, 0x0e, 0x93, 0x18, 0x7c, 0xe3, 0xa8, 0x5d, 0x64, 0x4e, 0x40, 0x49, 0xbf, 0x17, 0x92, 0x88, 0xa2, 0xd2, 0x75, 0xe7, 0xb2, 0x61, 0xd0, 0xfd, 0x36, 0xba, 0x52, 0x11, 0x71, 0xeb, 0x63, 0x38, 0x2e, 0x5b, 0x5a, 0xbe, 0x9c, 0x52, 0xf0, 0xc7, 0x5c, 0xbb, 0xf4, 0x36, 0xd9, 0x29, 0x41, 0xce, 0xd8, 0x19, 0xee, 0x97, 0x50, 0x77, 0xc4, 0x84, 0x7b, 0x63, 0xf5, 0x52, 0x2d, 0x34, 0x0a, 0xb3, 0x65, 0xbd, 0x1e, 0xac, 0x21, 0xd0, 0x4a, 0x3c, 0x77, 0x01, 0x60, 0x3e, 0xe2, 0xac, 0xdc, 0x90, 0xda, 0x3a, 0x17, 0x75, 0xa7, 0x9f, 0xbe, 0x38, 0x76, 0x27, 0x83, 0x13, 0xad, 0x73, 0x12, 0x4e, 0x7c, 0xbe, 0x47, 0xab, 0xb4, 0x66, 0x9e, 0x02, 0xdd, 0xa7, 0xeb, 0x29, 0x83, 0xa9, 0x4b, 0x16, 0xd0, 0xbd, 0x5a, 0x48, 0x60, 0xe3, 0xa6, 0x63, 0x50, 0x91, 0x64, 0x1a, 0x98, 0xaf, 0x62, 0x51, 0x9b, 0xe6, 0x3d, 0x83, 0xfd, 0x1a, 0xd4, 0x62, 0xb5, 0x35, 0xfc, 0xbe, 0x63, 0x27, 0x76, 0xa8, 0xe3, 0x2b, 0x1e, 0xd7, 0x22, 0x4b, 0x64, 0x4b, 0x30, 0x26, 0x00, 0x2f, 0x97, 0xf1, 0xe2, 0x04, 0xec, 0xbc, 0x68, 0xfc, 0xa3, 0xf6, 0xd4, 0xa4, 0x27, 0x34, 0xfd, 0xc6, 0x2b, 0x2e, 0x45, 0x8e, 0x3a, 0x0a, 0xca, 0xeb, 0x96, 0xde, 0xe1, 0x38, 0x3f, 0x70, 0xc0, 0x1c, 0x52, 0x40, 0x7a, 0xaf, 0x94, 0xc8, 0x31, 0xde, 0x4f, 0x02, 0x86, 0x10, 0x5d, 0x2b, 0x55, 0x0a, 0x82, 0xc7, 0xa0, 0x0f, 0xff, 0xe5, 0xc8, 0x4c, 0x63, 0xa4, 0x03, 0x74, 0xa5, 0xf6, 0x0a, 0xa8, 0x70, 0xa4, 0x12, 0x99, 0xbe, 0x92, 0xfe, 0xf0, 0xa8, 0x45, 0xd3, 0xee, 0x7c, 0xa2, 0x6c, 0x4f, 0x11, 0xf8, 0x6f, 0x75, 0x57, 0x41, 0x7f, 0xc2, 0x32, 0xa5, 0xb3, 0x46, 0x89, 0x40, 0x47, 0x9a, 0x9a, 0x25, 0x92, 0x0b, 0x90, 0xa3, 0x38, 0xfb, 0x57, 0xc7, 0xa1, 0x85, 0xaf, 0x21, 0xaa, 0x60, 0x7f, 0xcb, 0x9a, 0x06, 0x6c, 0xa8, 0x57, 0x15, 0xab, 0xea, 0xda, 0xf5, 0x13, 0xd7, 0xe0, 0xbb, 0x77, 0xcc, 0xe2, 0x4d, 0x32, 0x82, 0x48, 0xc7, 0x03, 0x90, 0xda, 0x1e, 0x1c, 0x31, 0x77, 0x04, 0x75, 0x48, 0x09, 0x0b, 0x66, 0xa1, 0xb8, 0x0c, 0x75, 0x7a, 0x5e, 0xca, 0x6d, 0x42, 0x3b, 0xd3, 0xb0, 0xa0, 0xeb, 0xa7, 0xcd, 0xb7, 0x94, 0x1c, 0x55, 0xa9, 0x64, 0x01, 0xeb, 0x59, 0x3b, 0x02, 0x9b, 0x76, 0xa4, 0xcb, 0x6d, 0xb5, 0x0a, 0x71, 0x39, 0x5d, 0x29, 0x0d, 0xbc, 0x09, 0xc2, 0xaa, 0xec, 0xa9, 0x93, 0x61, 0x89, 0xcb, 0x86, 0xc2, 0xf5, 0x19, 0x29, 0x76, 0x45, 0x22, 0x5e, 0x23, 0x98, 0x5d, 0x54, 0x90, 0xa7, 0x6a, 0xb5, 0x0a, 0x9e, 0x9c, 0x21, 0x06, 0x2b, 0xb5, 0xdc, 0x07, 0xd4, 0xf0, 0xc3, 0xc2, 0x8d, 0x45, 0x85, 0x80, 0x8a, 0xe8, 0x0f, 0xc5, 0x52, 0x13, 0x48, 0x2f, 0x15, 0x05, 0xff, 0xa0, 0x3f, 0x4b, 0x21, 0xa0, 0x4d, 0x3e, 0x30, 0xfc, 0xdf, 0xcd, 0xf0, 0xb3, 0x0f, 0x7c, 0x64, 0x13, 0x02, 0xad, 0xf8, 0x20, 0xbc, 0x1e, 0x00, 0x35, 0x39, 0xb4, 0x61, 0xee, 0xb9, 0x77, 0x8e, 0x44, 0x5b, 0xdd, 0xb7, 0xfa, 0xed, 0x4b, 0x3d, 0x39, 0x03, 0xd9, 0x68, 0x77, 0x46, 0x56, 0x5c, 0x9d, 0x0f, 0x8c, 0x49, 0x68, 0x35, 0xc4, 0xe3, 0x0f, 0x23, 0x8d, 0x12, 0x27, 0x2d, 0xba, 0xea, 0xc4, 0x24, 0xaa, 0xdd, 0xe2, 0x27, 0xcc, 0x2f, 0x03, 0xbd, 0x61, 0xab, 0x19, 0x21, 0x84, 0x95, 0xa5, 0xdd, 0x68, 0xdf, 0x21, 0x9a, 0xe2, 0x9f, 0x9c, 0x37, 0x27, 0xc1, 0xa4, 0x18, 0xd6, 0xf9, 0x68, 0xc1, 0x39, 0xfc, 0x1e, 0xa3, 0xc8, 0xf0, 0xa3, 0x35, 0xee, 0x21, 0x61, 0x47, 0x10, 0xf5, 0x76, 0x94, 0xcc, 0x22, 0x13, 0x96, 0x7e, 0x1e, 0x21, 0x9e, 0x09, 0xd8, 0x2b, 0x23, 0xd4, 0xa5, 0x78, 0x5a, 0x12, 0x7d, 0x77, 0x08, 0x47, 0x67, 0x61, 0x95, 0x07, 0x32, 0x19, 0x61, 0x01, 0x66, 0x57, 0x5b, 0x3d, 0x7a, 0x05, 0xcf, 0xa2, 0x47, 0xe9, 0x7f, 0xbb, 0xbd, 0x85, 0xf6, 0xbb, 0xd5, 0x3b, 0x19, 0xbe, 0xc6, 0xb5, 0xff, 0x51, 0x7c, 0x84, 0x02, 0x35, 0x46, 0x07, 0x16, 0x60, 0xcf, 0x8f, 0x5a, 0x45, 0x4f, 0xc0, 0xed, 0x55, 0x02, 0x3b, 0x03, 0xc6, 0xda, 0x7a, 0x38, 0x93, 0x71, 0xfa, 0x24, 0xc4, 0x41, 0xa0, 0x2f, 0xef, 0x17, 0x56, 0xa6, 0xff, 0xc5, 0xf5, 0x0f, 0x34, 0x17, 0x67, 0xba, 0x6b, 0x09, 0x0d, 0x99, 0xa0, 0x37, 0x5e, 0x51, 0xb1, 0x95, 0xd1, 0x91, 0x64, 0x60, 0xfd, 0xa3, 0xac, 0x55, 0xff, 0x41, 0x28, 0x20, 0x1d, 0xa9, 0xed, 0x17, 0xa9, 0xf4, 0x85, 0x28, 0x27, 0xa3, 0x37, 0x10, 0xb2, 0x7b, 0x89, 0xce, 0x9b, 0x93, 0x04, 0x58, 0x54, 0xab, 0x37, 0x8c, 0x8c, 0xbf, 0xff, 0x69, 0x9c, 0xdc, 0x05, 0x7f, 0x22, 0x33, 0x87, 0xa4, 0xeb, 0x6c, 0x5c, 0xe9, 0x17, 0x3c, 0x32, 0xcd, 0x77, 0x3a, 0x1b, 0xb0, 0x3a, 0xee, 0x48, 0x8a, 0xc9, 0x2b, 0x13, 0xdc, 0xef, 0x9f, 0x43, 0xe7, 0x3d, 0xa9, 0x8c, 0x1d, 0xad, 0x6a, 0x56, 0xd5, 0x85, 0x1f, 0xc0, 0x42, 0x7e, 0xae, 0xe3, 0xa6, 0x26, 0x7e, 0x5b, 0xc3, 0x83, 0x8c, 0x04, 0x92, 0xf9, 0xbc, 0x01, 0x38, 0x6d, 0x6d, 0x03, 0x36, 0xab, 0x4f, 0xc7, 0xe0, 0x05, 0x79, 0xe1, 0x10, 0x3d, 0xb6, 0xb9, 0x1b, 0xa6, 0x20, 0xd3, 0x04, 0x85, 0xf1, 0x53, 0xf0, 0xbd, 0x95, 0xc0, 0xda, 0xac, 0x04, 0x08, 0x88, 0x50, 0x4e, 0xc4, 0xbe, 0xae, 0x77, 0xbe, 0xb1, 0x74, 0x86, 0xb0, 0xbe, 0xdd, 0xd9, 0x4f, 0x5c, 0xd5, 0xbb, 0x88, 0x50, 0x5e, 0x39, 0x0a, 0x20, 0x32, 0x31, 0x04, 0xc9, 0xa9, 0xab, 0x30, 0xb4, 0xde, 0x6c, 0x10, 0xe7, 0x0d, 0xc9, 0x78, 0x79, 0x40, 0xba, 0x4c, 0x48, 0x2b, 0x2f, 0x8b, 0xee, 0x54, 0xa7, 0x8c, 0xf0, 0x77, 0xfe, 0x88, 0x39, 0x28, 0x86, 0x59, 0xc7, 0xba, 0x5a, 0x81, 0xa5, 0x60, 0xef, 0x6e, 0x19, 0x92, 0xec, 0xfd, 0x1e, 0xb2, 0x3c, 0x3c, 0x14, 0xf0, 0x61, 0x74, 0xb7, 0x6b, 0x0b, 0x67, 0x4e, 0x98, 0xe9, 0xd6, 0x24, 0xe8, 0xbf, 0x46, 0x3c, 0xa5, 0xb9, 0x04, 0x41, 0x1d, 0xff, 0x67, 0xbc, 0x03, 0x89, 0x55, 0x8a, 0x12, 0x35, 0x08, 0x8c, 0xf3, 0x16, 0x12, 0xa0, 0x61, 0x0f, 0x9f, 0xd0, 0x8b, 0xa1, 0xfb, 0xca, 0xba, 0x02, 0x54, 0x90, 0x33, 0x6f, 0xc0, 0x71, 0x5f, 0xc2, 0x82, 0x38, 0x29, 0x47, 0x89, 0xa3, 0xa8, 0xcc, 0x39, 0x17, 0xfe, 0xf7, 0x6e, 0x91, 0x80, 0xdd, 0xbe, 0xe0, 0x17, 0xcf, 0xff, 0x12, 0xe5, 0x77, 0x09, 0x2c, 0x2c, 0x25, 0xbd, 0x1e, 0x6c, 0x63, 0x47, 0xf5, 0xcc, 0xcf, 0x9f, 0x53, 0xbb ],
- const [ 0x2d, 0x81, 0x9b, 0x81, 0xdf, 0x84, 0x8a, 0x0b, 0x7e, 0x30, 0x2b, 0x76, 0x8f, 0x47, 0x48, 0x37, 0x45, 0x81, 0xcb, 0x60, 0xf4, 0x2e, 0xd1, 0x6a, 0xc9, 0x1c, 0xff, 0x31, 0xb9, 0xbb, 0x19, 0x40, 0xb7, 0x7f, 0xd0, 0x4f, 0x2a, 0x86, 0xdc, 0x0a, 0x9e, 0x7b, 0x4b, 0x14, 0xb9, 0xba, 0x19, 0x4c, 0x71, 0xb4, 0x00, 0x4f, 0x7d, 0x95, 0x91, 0x3e, 0x09, 0x25, 0x84, 0xc1, 0xae, 0xec, 0x4d, 0x4b, 0xa1, 0x9a, 0xf0, 0xa0, 0x2b, 0xa6, 0x15, 0x95, 0x59, 0x34, 0x5f, 0x17, 0xf4, 0x3c, 0xfa, 0x6f, 0xb3, 0xe9, 0x73, 0xc4, 0xb0, 0x3f, 0xcd, 0xe2, 0x19, 0x01, 0xd1, 0x3a, 0x28, 0xd2, 0xa5, 0x29, 0x55, 0x9a, 0xa0, 0x7d, 0xca, 0x2b, 0x5d, 0x35, 0x17, 0x25, 0x0e, 0x88, 0x27, 0x16, 0x13, 0x29, 0x72, 0xe6, 0xcc, 0xca, 0x75, 0x73, 0xab, 0xdf, 0x5f, 0x78, 0x8d, 0xa4, 0x0e, 0xb3, 0x4a, 0x61, 0x39, 0x47, 0x8a, 0xec, 0xef, 0x5f, 0xdb, 0x70, 0x40, 0x14, 0x01, 0x6e, 0x3a, 0x91, 0x8d, 0x01, 0x17, 0x74, 0xb2, 0x66, 0xb4, 0x78, 0x53, 0xbb, 0x45, 0x51, 0x60, 0x07, 0x48, 0xd8, 0x63, 0x7b, 0xb7, 0x68, 0x56, 0xf8, 0x82, 0x88, 0xb8, 0xd1, 0x3c, 0xca, 0xe0, 0xd1, 0x14, 0xf3, 0x90, 0x80, 0x08, 0x5b, 0xcd, 0xa2, 0x55, 0x97, 0xee, 0x01, 0x32, 0x56, 0xf4, 0x6c, 0xbd, 0x89, 0x19, 0x00, 0x36, 0xc7, 0xac, 0xa6, 0x6b, 0xef, 0x1b, 0xdd, 0x73, 0x0f, 0x52, 0xba, 0x9f, 0x84, 0x43, 0x2c, 0xae, 0x63, 0xc6, 0x85, 0x40, 0x18, 0xa4, 0x36, 0x8e, 0x4d, 0xee, 0xda, 0x57, 0x0e, 0x94, 0x77, 0x1e, 0x2a, 0x32, 0x00, 0x92, 0xdc, 0x2d, 0x1e, 0x4e, 0xaa, 0xff, 0x2f, 0xc2, 0x8e, 0xcf, 0x90, 0x71, 0x54, 0x45, 0x17, 0x5e, 0x43, 0x9c, 0xe4, 0xc0, 0xff, 0xf9, 0x5a, 0xfd, 0xae, 0xfb, 0x68, 0xd6, 0x5a, 0x93, 0x0d, 0xdf, 0x96, 0x16, 0x1b, 0x33, 0x65, 0x90, 0x3b, 0x65, 0x57, 0x5c, 0x31, 0xba, 0xf5, 0xf1, 0x61, 0x95, 0x5f, 0xff, 0x92, 0x32, 0x34, 0xbb, 0xf3, 0x97, 0xb2, 0x76, 0x5b, 0xc8, 0x1f, 0x75, 0xd5, 0x3b, 0x67, 0xfd, 0x5c, 0x8b, 0x06, 0xad, 0xe3, 0x70, 0x28, 0x11, 0x99, 0xef, 0x0f, 0x73, 0x6a, 0xce, 0xb6, 0xf4, 0xc9, 0x4b, 0xb4, 0xdc, 0xad, 0x0e, 0x62, 0x2f, 0xd9, 0x5b, 0x40, 0x81, 0x61, 0x8c, 0x95, 0x0a, 0x6a, 0xbf, 0x56, 0xfd, 0x31, 0xcc, 0x49, 0x16, 0x4f, 0x7a, 0x6a, 0x72, 0x3b, 0xf2, 0x8e, 0xa4, 0x10, 0x73, 0x46, 0x05, 0x90, 0x48, 0x06, 0x4b, 0x69, 0xf7, 0x87, 0x5e, 0xb8, 0xbc, 0x69, 0x67, 0xcc, 0x35, 0x1d, 0x29, 0x2c, 0x5f, 0x02, 0x94, 0xdb, 0xc1, 0xce, 0x97, 0xda, 0xe7, 0x30, 0x37, 0xef, 0x12, 0xb4, 0xde, 0xa5, 0x2e, 0xe6, 0xf5, 0x94, 0x04, 0xba, 0xb4, 0xe2, 0xb1, 0x2b, 0x39, 0x0a, 0x57, 0x23, 0xd8, 0xdc, 0x12, 0x9b, 0xb3, 0xc6, 0x2e, 0x03, 0x8a, 0x51, 0x97, 0xe4, 0xd4, 0xee, 0x90, 0xc4, 0x0e, 0xf3, 0xa8, 0x4a, 0x53, 0xe1, 0xea, 0xa2, 0x2d, 0xe8, 0x55, 0x23, 0xab, 0xad, 0x8c, 0x2f, 0xb3, 0x4a, 0xce, 0x5b, 0x9a, 0x96, 0x27, 0xd0, 0xf2, 0xa8, 0xe8, 0xf2, 0xa3, 0x96, 0x56, 0x3f, 0x3e, 0x82, 0x9f, 0x79, 0x8d, 0xd8, 0x12, 0x07, 0x6f, 0xd1, 0x8e, 0x99, 0xe2, 0x3c, 0x3b, 0x0b, 0x62, 0x7d, 0x79, 0x8c, 0x72, 0xd6, 0x16, 0xff, 0x78, 0xe5, 0xc4, 0xa1, 0xcd, 0x6e, 0xca, 0xec, 0x15, 0x5b, 0xf9, 0xbc, 0xcc, 0x01, 0xe2, 0xb1, 0x22, 0xa5, 0x46, 0xd4, 0x09, 0x3f, 0xce, 0x7d, 0x8c, 0x7d, 0xfc, 0x74, 0x62, 0x0b, 0x62, 0x56, 0xc3, 0x12, 0x12, 0x3a, 0x7a, 0xff, 0x55, 0x95, 0x3c, 0x85, 0xa0, 0x5b, 0x38, 0xe5, 0xc3, 0x67, 0xef, 0x6d, 0x64, 0x1d, 0x46, 0x3e, 0xac, 0x4e, 0xd9, 0x53, 0x40, 0x5b, 0x93, 0xbf, 0x73, 0x9e, 0x7c, 0x36, 0xba, 0x05, 0xd1, 0xcf, 0x60, 0x00, 0x5a, 0x08, 0x7a, 0x9e, 0xf8, 0x0b, 0x1e, 0xf3, 0x7e, 0x30, 0xd0, 0xbc, 0xc1, 0xc2, 0x3d, 0x46, 0xf3, 0x06, 0x2c, 0x8b, 0x2c, 0x79, 0xb1, 0x9e, 0x4a, 0x5a, 0xa3, 0x4a, 0xfb, 0x68, 0x51, 0xf6, 0x18, 0xed, 0x71, 0xcc, 0x35, 0xfb, 0x59, 0x1b, 0x76, 0xf6, 0x72, 0xf9, 0xa4, 0x52, 0xe9, 0x2c, 0x7f, 0x9e, 0xa7, 0x4b, 0x56, 0xc2, 0x84, 0x20, 0xd6, 0x85, 0xb7, 0x51, 0x20, 0x52, 0x91, 0x3f, 0x1e, 0x3b, 0x6c, 0x2f, 0x16, 0x3e, 0xde, 0xa8, 0x7f, 0xc7, 0x32, 0x1b, 0x14, 0x77, 0x18, 0xca, 0x28, 0x24, 0x9b, 0xe2, 0x39, 0x21, 0x54, 0xea, 0xc7, 0xbf, 0xdd, 0x61, 0x66, 0x13, 0x89, 0xa3, 0x13, 0xfa, 0x52, 0x0d, 0xc4, 0x5b, 0x13, 0x61, 0x43, 0xac, 0xf8, 0x6c, 0x3b, 0xb8, 0x32, 0xe6, 0x93, 0x9f, 0xef, 0x99, 0xfc, 0x1e, 0x89, 0xc6, 0xc6, 0x10, 0xfd, 0xc4, 0xf8, 0x35, 0xa0, 0xea, 0x9f, 0x33, 0x0d, 0xaf, 0x66, 0xda, 0x62, 0x10, 0x67, 0xac, 0xac, 0x32, 0x41, 0x9d, 0x9f, 0x49, 0x6b, 0x17, 0x8b, 0xb8, 0xc8, 0x41, 0x8b, 0x7a, 0x7b, 0x81, 0x00, 0xc0, 0xfc, 0x40, 0x3d, 0xdb, 0x6b, 0xed, 0x84, 0x5d, 0x25, 0x44, 0x32, 0x7b, 0x96, 0xd0, 0x36, 0xb6, 0x4e, 0xae, 0xc7, 0xbb, 0x56, 0x95, 0x57, 0x87, 0xc4, 0x13, 0xc2, 0xce, 0x8d, 0x19, 0xcc, 0x9e, 0x9b, 0xba, 0xca, 0x40, 0x1f, 0x30, 0x9f, 0x5f, 0x29, 0x20, 0xea, 0x6b, 0x76, 0x1f, 0x7e, 0x40, 0x88, 0x74, 0x13, 0x03, 0xfc, 0x1f, 0x3b, 0x4d, 0x19, 0x1b, 0x97, 0x8c, 0xa5, 0xe1, 0x4a, 0xa6, 0xfc, 0x2d, 0xae, 0xdf, 0x63, 0x04, 0x46, 0xfc, 0x99, 0xf6, 0xf4, 0xa8, 0xaf, 0xa1, 0x6c, 0x18, 0x1a, 0x76, 0xe9, 0xeb, 0x07, 0xc0, 0x1f, 0x54, 0xee, 0xe1, 0x70, 0x7a, 0x6a, 0xdf, 0x62, 0x1f, 0x48, 0x20, 0x51, 0x80, 0xdd, 0x72, 0x61, 0x7d, 0x9d, 0x4f, 0xb7, 0xfa, 0xea, 0x5e, 0xe9, 0x85, 0x2a, 0x3c, 0xb2, 0x39, 0x1c, 0x7d, 0xeb, 0xe2, 0x6c, 0xee, 0xb6, 0x62, 0x85, 0x1d, 0xfd, 0x53, 0xa6, 0x1c, 0x1b, 0xed, 0x38, 0x81, 0xd8, 0x2a, 0x5f, 0xb1, 0x9b, 0x29, 0xcf, 0x5f, 0xdb, 0xd0, 0xe1, 0x4f, 0xd7, 0xb6, 0xe5, 0x60, 0x87, 0x40, 0xba, 0xc9, 0xd2, 0x0a, 0x9d, 0xa3, 0x01, 0x88, 0x3f, 0xa8, 0x74, 0xed, 0x1a, 0x3a, 0x93, 0x4b, 0x04, 0xa7, 0x08, 0xfc, 0x05, 0xab, 0x2c, 0x42, 0x66, 0x36, 0xbe, 0x2a, 0x0a, 0x70, 0xdb, 0xb6, 0x02, 0xfa, 0x2a, 0x3a, 0x5b, 0x77, 0x58, 0x07, 0x3a, 0x4c, 0xc4, 0x47, 0x2c, 0xa3, 0x7b, 0x28, 0xb7, 0xb6, 0x66, 0x3d, 0x35, 0x4a, 0xc2, 0x21, 0xe2, 0x79, 0xd1, 0x5d, 0x33, 0xb5, 0xcf, 0x8b, 0x69, 0x0a, 0x28, 0xbc, 0x67, 0xa3, 0xe8, 0x18, 0xc0, 0x90, 0x73, 0xc4, 0x15, 0xc7, 0x76, 0x09, 0x9e, 0x68, 0x1d, 0xb2, 0x06, 0x45, 0x87, 0xb5, 0x7c, 0xa1, 0x77, 0x16, 0x07, 0x38, 0x4c, 0x09, 0x19, 0x80, 0x33, 0x57, 0x68, 0x2f, 0x9b, 0x02, 0xf9, 0xfd, 0xe9, 0x2c, 0x7d, 0xab, 0x6d, 0x35, 0xe1, 0x44, 0x95, 0x24, 0x21, 0xa3, 0x61, 0x48, 0x5d, 0x35, 0x17, 0x1f, 0x2e, 0x00, 0x38, 0x76, 0x3a, 0xe4, 0xb2, 0xd2, 0x06, 0x21, 0x57, 0x0f, 0x0c, 0x1a, 0x8e, 0x47, 0x0e, 0x59, 0x49, 0xf5, 0xa9, 0xd2, 0x37, 0x5a, 0x2d, 0x6c, 0x3a, 0x20, 0xac, 0xbd, 0x1b, 0x3e, 0x51, 0x15, 0x7d, 0x1b, 0xf3, 0xbf, 0x0f, 0xf6, 0xea, 0x83, 0x06, 0x85, 0x22, 0x6f, 0xcb, 0xdc, 0x6e, 0xd8, 0xf0, 0x91, 0x1e, 0x9b, 0x69, 0x1e, 0xd3, 0xa8, 0xf9, 0x86, 0x92, 0xc2, 0xea, 0x3c, 0x18, 0x80, 0x01, 0x40, 0x6d, 0x98, 0xb1, 0x8b, 0xbc, 0x5c, 0x8f, 0xad, 0x62, 0x85, 0x06, 0xb5, 0x45, 0x30, 0x4c, 0x51, 0x67, 0x26, 0x94, 0x36, 0xbb, 0x60, 0x86, 0xc2, 0x37, 0xcb, 0xec, 0xe0, 0x2a, 0x48, 0xae, 0x2d, 0xd0, 0xf7, 0x00, 0x59, 0x23, 0xb5, 0xda, 0xcf, 0xf5, 0xe3, 0xa8, 0x98, 0x3c, 0x6a, 0x44, 0x7c, 0xad, 0xfb, 0x21, 0x6b, 0x8c, 0x9c, 0xc9, 0x1c, 0xc2, 0x60, 0x89, 0xf4, 0x30, 0x75, 0x6a, 0x29, 0x43, 0x64, 0x64, 0x27, 0xc8, 0x95, 0xcf, 0x33, 0x02, 0x12, 0x1a, 0x4e, 0xfa, 0x8c, 0xbf, 0x5c, 0x17, 0xa3, 0x76, 0x85, 0xee, 0x62, 0xaa, 0xdc, 0x5b, 0x09, 0x29, 0x3e, 0xd1, 0x10, 0x1f, 0x7d, 0xee, 0x68, 0x45, 0xbe, 0x53, 0x04, 0x56, 0x20, 0xb2, 0x98, 0xc3, 0x9f, 0x28, 0xa1, 0xa7, 0x37, 0xce, 0xa5, 0xfd, 0x4c, 0x8b, 0xbc, 0x11, 0x49, 0x2c, 0x4f, 0x34, 0x88, 0xb6, 0x20, 0xb4, 0x72, 0xfa, 0x8a, 0x0b, 0xe7, 0x6b, 0x0b, 0x57, 0xe0, 0x2d, 0xff, 0x0a, 0x52, 0x6e, 0xae, 0xe3, 0x56, 0xf9, 0x89, 0x1d, 0x88, 0x08, 0xb1, 0xe6, 0xac, 0x5a, 0xb9, 0x12, 0x98, 0x86, 0xad, 0x11, 0x4e, 0x8f, 0x53, 0x1e, 0x68, 0xb8, 0xb0, 0xba, 0xb9, 0x9a, 0xce, 0x59, 0x31, 0x73, 0xbd, 0x5b, 0x01, 0xc1, 0xd8, 0x3d, 0x00, 0x10, 0x49, 0x11, 0x4d, 0x10, 0xd0, 0x2b, 0x36, 0xea, 0xc0, 0x1e, 0x59, 0xd4, 0x4a, 0xe7, 0x09, 0xe4, 0xfd, 0x67, 0xf4, 0x21, 0x8e, 0x17, 0x02, 0xe0, 0xd5, 0xf7, 0x80, 0x4e, 0x19, 0xc7, 0x7d, 0x49, 0x8d, 0x7a, 0x74, 0x74, 0x1a, 0xe8, 0x2c, 0x8a, 0x5f, 0xc3, 0xdd, 0xf2, 0xf7, 0xcc, 0x94, 0x94, 0xfa, 0x46, 0xd8, 0xec, 0xc6, 0xab, 0x8e, 0x5c, 0xff, 0x9f, 0x1a, 0xc7, 0xd4, 0x22, 0xc7, 0x5b, 0x84, 0x09, 0x69, 0xae, 0x21, 0xaf, 0x41, 0x0d, 0x95, 0xe8, 0x20, 0x11, 0xe2, 0x36, 0xcf, 0x72, 0xae, 0x40, 0xaf, 0x20, 0xfe, 0x7f, 0x9d, 0x90, 0x42, 0x3b, 0x18, 0x54, 0x92, 0xb6, 0xa6, 0xef, 0x37, 0xa7, 0x73, 0xe7, 0x6d, 0xe9, 0x3c, 0x1c, 0x67, 0x75, 0x6b, 0x57, 0x94, 0x8e, 0x84, 0x26, 0x21, 0x3b, 0xbf, 0xe8, 0xbf, 0xfa, 0xf7, 0x24, 0xa6, 0xb3, 0xc2, 0x1f, 0xd9, 0xeb, 0xe2, 0xad, 0xac, 0x3a, 0xdc, 0x47, 0x84, 0xff, 0xe6, 0x5e, 0xdf, 0x52, 0x06, 0xef, 0x94, 0x3a, 0x79, 0x58, 0x5b, 0x20, 0x52, 0x6a, 0x8f, 0x84, 0x63, 0xbf, 0x33, 0xef, 0x60, 0x4d, 0x34, 0x29, 0x42, 0x3c, 0xed, 0xab, 0xea, 0xf5, 0xf0, 0x57, 0x07, 0x7c, 0x04, 0x67, 0x39, 0xff, 0x6a, 0xa4, 0x77, 0xaf, 0x65, 0xd8, 0xae, 0xce, 0xf9, 0x85, 0xaa, 0x09, 0xf2, 0xd7, 0x3a, 0x09, 0x28, 0xd8, 0x8f, 0x45, 0x02, 0xe3, 0xe6, 0x1a, 0x39, 0x5b, 0x67, 0x1d, 0xde, 0x9c, 0x4c, 0xb0, 0x9f, 0x32, 0x45, 0xd3, 0x46, 0x4a, 0x1b, 0x3d, 0x82, 0x65, 0x94, 0xac, 0xea, 0x54, 0x98, 0x79, 0x3f, 0x60, 0x91, 0x6f, 0xf1, 0xc9, 0x18, 0xdd, 0xe5, 0x72, 0xcd, 0xea, 0x76, 0xda, 0x86, 0x29, 0xba, 0x4e, 0xad, 0x6d, 0x06, 0x5d, 0xe3, 0xdf, 0xb4, 0x8d, 0xe9, 0x4d, 0x23, 0x4c, 0xc1, 0xc5, 0x00, 0x29, 0x10, 0x63, 0xc4, 0x44, 0xc7, 0x67, 0x7e, 0x03, 0x02, 0x8a, 0xd3, 0x07, 0x31, 0x93, 0x43, 0x5f, 0x75, 0x25, 0xae, 0xfb, 0x4d, 0xdb, 0x16, 0x63, 0x71, 0x97, 0xa6, 0xa9, 0xfe, 0x16, 0xf3, 0x9b, 0xd4, 0xc8, 0x83, 0x3e, 0x3c, 0xdf, 0x8c, 0x78, 0xcf, 0xa6, 0xfd, 0x0d, 0x93, 0x15, 0xc2, 0xcd, 0x66, 0xa2, 0x44, 0x0b, 0xa0, 0x59, 0x30, 0x50, 0xf4, 0x2f, 0x7a, 0x51, 0x97, 0x94, 0xa1, 0x1f, 0xa4, 0x47, 0x34, 0x9e, 0xc0, 0x6e, 0x95, 0x38, 0xfa, 0xe6, 0xfd, 0xd2, 0xf4, 0xd8, 0xc0, 0xff, 0x48, 0x8d, 0xd3, 0x74, 0x25, 0x83, 0x8b, 0xbd, 0x39, 0xc0, 0xa7, 0x2e, 0xd4, 0x66, 0x91, 0x1b, 0x4a, 0x88, 0xe1, 0x4c, 0x99, 0x3c, 0x23, 0xab, 0x4b, 0xf1, 0xda, 0x40, 0x9e, 0x03, 0xc5, 0x5f, 0xe3, 0x8d, 0x60, 0x20, 0x24, 0x7f, 0xae, 0x10, 0x09, 0xf0, 0x36, 0x26, 0xfc, 0xb5, 0x4b, 0xf9, 0x8c, 0x32, 0x91, 0x2f, 0x0f, 0x70, 0xbd, 0x39, 0x8c, 0x70, 0x9c, 0x3e, 0xd8, 0xbf, 0x57, 0x54, 0xfe, 0x4b, 0xf5, 0xf6, 0xe4, 0x75, 0x21, 0xb3, 0x2c, 0x67, 0x2e, 0x23, 0x59, 0xa8, 0x58, 0x1f, 0x33, 0xed, 0x4d, 0x31, 0x6c, 0x33, 0xec, 0x4a, 0x83, 0x0a, 0x4c, 0xb3, 0xe9, 0x34, 0x00, 0x46, 0x63, 0x6e, 0x99, 0xde, 0xaf, 0x8e, 0x6d, 0x0c, 0x6a, 0xce, 0x97, 0x0c, 0x31, 0x68, 0x3f, 0xf7, 0x07, 0x63, 0x1c, 0x39, 0xf6, 0xac, 0x36, 0x46, 0xf9, 0x68, 0xf1, 0x89, 0x1a, 0x89, 0x47, 0x9d, 0xd8, 0x9f, 0x55, 0xc0, 0xcb, 0xf1, 0x19, 0x85, 0x8b, 0xcd, 0x7a, 0xc9, 0xcd, 0x1c, 0x88, 0xe7, 0xcf, 0x39, 0x06, 0x30, 0xf7, 0x04, 0x26, 0x95, 0xb7, 0x32, 0x93, 0xa7, 0xb3, 0xe7, 0xb4, 0xc2, 0x26, 0x86, 0x30, 0x84, 0x81, 0xc8, 0xad, 0x84, 0x56, 0x0b, 0xde, 0x41, 0x75, 0xed, 0xbc, 0x59, 0x55, 0x1a, 0x13, 0xfc, 0xb5, 0x62, 0x41, 0x9f, 0x82, 0x0f, 0x3a, 0xf5, 0xfc, 0x75, 0xd0, 0x1b, 0x15, 0xca, 0x32, 0x13, 0x19, 0x38, 0xb2, 0x73, 0x94, 0x31, 0xcb, 0x5e, 0x71, 0x03, 0x62, 0xb4, 0x5f, 0xac, 0x4c, 0x86, 0x79, 0xef, 0x11, 0xcd, 0x25, 0xa7, 0xef, 0x5b, 0x3c, 0x5c, 0x22, 0x11, 0x6c, 0x14, 0x63, 0x53, 0xdb, 0x6b, 0xaf, 0xb9, 0x0d, 0xe6, 0x49, 0x07, 0x08, 0x85, 0x02, 0x60, 0xb6, 0x97, 0xb8, 0xb6, 0x8a, 0xd2, 0x1d, 0x85, 0x66, 0xa3, 0xb9, 0xc1, 0xbd, 0xc3, 0x33, 0x0d, 0xf5, 0x0b, 0xcc, 0x2d, 0x0f, 0x89, 0x2c, 0xbe, 0x89, 0xd3, 0x61, 0x24, 0x83, 0x9b, 0x25, 0xc5, 0x22, 0x84, 0x5f, 0x75, 0x32, 0x34, 0xed, 0x30, 0x0f, 0xab, 0xa1, 0x0f, 0xc5, 0xd3, 0x89, 0x75, 0x76, 0x58, 0x74, 0x89, 0xfc, 0xb9, 0xb1, 0xea, 0xd0, 0xa0, 0x1a, 0x9e, 0x2a, 0x6f, 0x52, 0x4b, 0x6a, 0x1b, 0x4a, 0xa9, 0xb7, 0x3d, 0x0a, 0x37, 0xe6, 0x66, 0xae, 0x2d, 0x9d, 0xb3, 0xae, 0xb2, 0xb8, 0xa2, 0x63, 0x50, 0xeb, 0x24, 0xc7, 0xa5, 0xa9, 0xf4, 0x7d, 0x5b, 0x45, 0x26, 0x11, 0x5a, 0x58, 0x03, 0x80, 0x3b, 0x62, 0x14, 0xfb, 0x00, 0xb4, 0x7d, 0xe8, 0x03, 0x8d, 0x8d, 0x2a, 0x2d, 0x83, 0x92, 0xa2, 0x68, 0x24, 0xf2, 0xf5, 0x57, 0xde, 0x77, 0x90, 0x44, 0x1c, 0xeb, 0xea, 0x5a, 0xb2, 0xe5, 0x09, 0x14, 0x7b, 0xe2, 0x48, 0xf5, 0x40, 0x97, 0x57, 0x7a, 0xdc, 0x86, 0x83, 0x4d, 0x9e, 0xd0, 0x38, 0xbb, 0xef, 0x4a, 0xc4, 0x68, 0x35, 0xd2, 0x5d, 0x41, 0xf7, 0xe4, 0x66, 0xb3, 0x41, 0x68, 0xee, 0x1a, 0x4a, 0xce, 0x7a, 0x7d, 0x54, 0x5d, 0x04, 0x78, 0xd4, 0xc8, 0x43, 0x79, 0xd3, 0x03, 0x2d, 0x30, 0x94, 0x54, 0xbb, 0x40, 0x77, 0xad, 0xec, 0x3b, 0x1d, 0x39, 0x0c, 0xcd, 0xcd, 0x35, 0x36, 0x37, 0x16, 0x01, 0x18, 0xff, 0xb6, 0x77, 0xf6, 0xe6, 0xbb, 0x7b, 0xf1, 0x1b, 0xe8, 0xd3, 0x8a, 0xae, 0x5a, 0x3a, 0x62, 0x47, 0x6c, 0xaf, 0x43, 0x18, 0xd7, 0x13, 0x64, 0x10, 0x1e, 0xf3, 0xe9, 0x52, 0x29, 0xa3, 0xaa, 0xe5, 0x2f, 0x8c, 0x35, 0xad, 0xda, 0xc6, 0x16, 0x9a, 0xa6, 0xea, 0x56, 0x1f, 0x8b, 0x21, 0x41, 0xe6, 0xdb, 0x81, 0x6c, 0xc2, 0x6d, 0x9a, 0xf7, 0xe5, 0xfb, 0x4b, 0x10, 0x53, 0xc9, 0xdb, 0xb8, 0x96, 0x87, 0x44, 0xca, 0xb3, 0x79, 0xd2, 0x39, 0x5e, 0xd5, 0xed, 0x99, 0x6a, 0x6d, 0x33, 0xe1, 0x83, 0x8d, 0xcb, 0x6f, 0x1f, 0x27, 0xf5, 0x4c, 0xb2, 0x2d, 0xe5, 0xb2, 0x21, 0x3f, 0xd1, 0xcb, 0x7a, 0x86, 0x49, 0xbc, 0xe2, 0xe0, 0xc7, 0xe2, 0xcf, 0x3d, 0x87, 0x5b, 0x77, 0x49, 0x98, 0xc9, 0x88, 0x4b, 0x34, 0x52, 0x19, 0x4c, 0x4d, 0xec, 0xe0, 0x7d, 0x68, 0xd7, 0xa6, 0xd3, 0xae, 0x6a, 0xf9, 0xf4, 0x40, 0x13, 0x21, 0x56, 0xcc, 0x9a, 0x55, 0xa5, 0x5e, 0xa5, 0x2e, 0x66, 0x78, 0x81, 0x5b, 0xdb, 0x64, 0x1f, 0x97, 0x26, 0xc9, 0x5d, 0xd8, 0xb0, 0x7d, 0x87, 0xc9, 0xcc, 0x9a, 0x1e, 0x7b, 0x98, 0xd4, 0xd8, 0x57, 0x24, 0x09, 0xe7, 0x58, 0xd7, 0x1a, 0x7e, 0x77, 0x0e, 0xfa, 0x92, 0x66, 0x05, 0x04, 0xde, 0x80, 0xfb, 0x92, 0x29, 0x01, 0x91, 0xcb, 0xcb, 0x72, 0x74, 0xbc, 0x6e, 0x68, 0x3b, 0xab, 0x12, 0x6e, 0x93, 0xa7, 0x54, 0x40, 0x99, 0x64, 0xef, 0x3a, 0x87, 0x46, 0x83, 0x0f, 0x93, 0xbc, 0x95, 0xbe, 0x14, 0xcf, 0xd7, 0xc2, 0xe7, 0xfb, 0xaa, 0x89, 0x11, 0x3d, 0xe2, 0x28, 0xa5, 0x6d, 0xc9, 0x4d, 0xe9, 0xce, 0x66, 0x75, 0xb4, 0xe4, 0xff, 0x5f, 0x1a, 0x85, 0xdc, 0xc0, 0x4b, 0x33, 0x4e, 0x38, 0xb9, 0xa9, 0xf0, 0x85, 0x79, 0xb4, 0x2d, 0xf7, 0xec, 0x44, 0x02, 0x23, 0x9e, 0xc3, 0x05, 0xdc, 0x6e, 0xa5, 0xa7, 0x5f, 0xf0, 0x41, 0xb6, 0xce, 0x0f, 0xdf, 0x26, 0xe0, 0xf7, 0x12, 0x10, 0xd6, 0x32, 0x48, 0xfb, 0xb1, 0x10, 0x9f, 0x5b, 0xa2, 0x4d, 0xfa, 0x57, 0xc2, 0xee, 0x55, 0xcf, 0x03, 0x6c, 0x55, 0x9e, 0x66, 0x14, 0x23, 0x1c, 0x6f, 0xae, 0x7b, 0xe7, 0xd7, 0x5d, 0x00, 0xe4, 0x80, 0xc6, 0xd3, 0x80, 0xae, 0x74, 0x63, 0x3c, 0x73, 0x7b, 0x87, 0x68, 0x6b, 0x5c, 0xca, 0x2e, 0xaa, 0x29, 0x05, 0xd3, 0xf3, 0xea, 0x34, 0x3a, 0x2a, 0x3e, 0x82, 0xaa, 0x0c, 0x46, 0xa6, 0xd0, 0x1e, 0xbe, 0x72, 0x08, 0xe3, 0x6d, 0xa9, 0xd8, 0x52, 0xc0, 0x12, 0xbd, 0x87, 0xb2, 0xca, 0x2b, 0xb9, 0xee, 0xde, 0xcf, 0x6c, 0x38, 0x19, 0x17, 0xe8, 0x09, 0x1b, 0xf4, 0xe9, 0x79, 0xab, 0xdf, 0x98, 0x62, 0x4f, 0x1a, 0xba, 0xc3, 0x19, 0x38, 0x28, 0x62, 0xc3, 0xdf, 0x7f, 0xb6, 0xff, 0xcd, 0x18, 0x03, 0x08, 0x19, 0x3b, 0xc7, 0x7d, 0xbb, 0x8f, 0x55, 0x6f, 0x4f, 0xd5, 0xc0, 0xb9, 0x16, 0xd6, 0xfa, 0x8f, 0x3e, 0x9a, 0x3d, 0x5a, 0x63, 0xdb, 0xaa, 0xc3, 0x55, 0xb9, 0x31, 0x0e, 0x1c, 0xb0, 0xb0, 0xaa, 0x39, 0xc6, 0x5f, 0x06, 0x2f, 0x09, 0x6b, 0xa6, 0x42, 0x38, 0xe1, 0x75, 0x7f, 0xc1, 0xce, 0x5d, 0xfc, 0xeb, 0xa5, 0x15, 0x61, 0x55, 0xe0, 0x3a, 0xa7, 0x9f, 0xea, 0xa2, 0x20, 0x67, 0x3d, 0xed, 0xb8, 0x77, 0xc7, 0x5c, 0x7a, 0x3c, 0x93, 0xe7, 0x56, 0x7b, 0xa5, 0x89, 0x21, 0x3f, 0x26, 0xdf, 0xdd, 0x16, 0xc1, 0xf1, 0x3b, 0x7c, 0x4c, 0x50, 0x5e, 0x98, 0xab, 0x61, 0xe2, 0x26, 0xf1, 0xf8, 0x1d, 0xb5, 0xc9, 0x28, 0xa4, 0x12, 0x15, 0x5a, 0x11, 0x04, 0xd4, 0x9d, 0x04, 0x39, 0x49, 0x3d, 0x68, 0x81, 0x5a, 0x97, 0xf8, 0x3a, 0x36, 0x2b, 0x01, 0x0b, 0x3a, 0xf3, 0x69, 0xd6, 0x16, 0xf4, 0xf0, 0xe7, 0x2b, 0x12, 0xb6, 0x72, 0x38, 0x28, 0xfe, 0x3c, 0x36, 0x58, 0x31, 0x98, 0x80, 0xa0, 0x26, 0x95, 0x37, 0xae, 0xa0, 0x76, 0xe5, 0xf6, 0x18, 0x62, 0x60, 0x01, 0xbd, 0x5d, 0xf2, 0x08, 0xba, 0x77, 0xb6, 0xc1, 0xb7, 0x43, 0x45, 0x79, 0xa2, 0x8b, 0x92, 0x63, 0xaf, 0x42, 0x13, 0x30, 0x9d, 0xba, 0x22, 0xdf, 0x3c, 0x18, 0xa2, 0xd7, 0x2c, 0x04, 0xe5, 0x33, 0xe7, 0xa5, 0xcd, 0x5d, 0x01, 0xcc, 0x32, 0xde, 0xaf, 0x6f, 0x84, 0x74, 0x87, 0x5a, 0xb2, 0x65, 0x86, 0x21, 0x4a, 0x14, 0x57, 0x59, 0xe1, 0xd2, 0xd2, 0x07, 0xb5, 0xf6, 0xc4, 0x59, 0x91, 0x30, 0xee, 0x94, 0xf1, 0x1a, 0x50, 0x4e, 0x67, 0x10, 0xa7, 0xdd, 0x3d, 0x42, 0x34, 0x0f, 0x5c, 0x07, 0xbf, 0x1c, 0x6c, 0x75, 0xdc, 0xd8, 0x3d, 0x2e, 0x6d, 0x2d, 0x66, 0x7c, 0x68, 0xc9, 0x2c, 0xa1, 0xda, 0x14, 0xa5, 0x68, 0x2c, 0x65, 0x1d, 0x00, 0xa5, 0x75, 0xb8, 0x0a, 0x31, 0x14, 0x59, 0xf1, 0x61, 0x1a, 0xc3, 0x7a, 0xb2, 0xa1, 0xfe, 0x9c, 0x12, 0x71, 0xfd, 0x91, 0xa0, 0xbc, 0x7d, 0x2d, 0xb4, 0x0c, 0x30, 0x6f, 0x1f, 0x79, 0x1b, 0x56, 0xb4, 0x1f, 0x3c, 0xf5, 0x07, 0xcf, 0x71, 0xca, 0x74, 0x05, 0x95, 0x4c, 0x63, 0x1a, 0xec, 0xc3, 0xcb, 0xbb, 0xc1, 0x5c, 0xf5, 0x9a, 0x4d, 0x7d, 0x83, 0x63, 0xdb, 0x56, 0xb0, 0xf2, 0x2a, 0xb9, 0xd9, 0xc3, 0x13, 0x2b, 0x3d, 0xaa, 0x6b, 0x3b, 0x01, 0xc4, 0x2b, 0x12, 0x77, 0xad, 0xce, 0x4c, 0x9f, 0xf3, 0xfb, 0x06, 0xee, 0xcb, 0x64, 0x38, 0x4f, 0x03, 0xee, 0x46, 0x68, 0x38, 0x12, 0xd1, 0x1e, 0x49, 0x83, 0xd3, 0x5b, 0x0b, 0x11, 0xeb, 0x0e, 0x3f, 0xcd, 0xf5, 0x74, 0xc1, 0x6e, 0xde, 0x97, 0x02, 0xf3, 0xb6, 0x14, 0xb7, 0x8a, 0x07, 0x20, 0xd3, 0xb1, 0x66, 0xcd, 0xb3, 0x9b, 0x47, 0x8a, 0x99, 0xd5, 0x16, 0xe9, 0x5c, 0x29, 0x83, 0xa6, 0x5e, 0xc3, 0x1d, 0xe4, 0xbd, 0x92, 0x22, 0xb9, 0xce, 0xf1, 0x95, 0xed, 0xc7, 0x87, 0x92, 0xff, 0xbb, 0x6b, 0xdf, 0x69, 0xcc, 0x8c, 0xc3, 0x25, 0x9c, 0x51, 0x1b, 0x70, 0x04, 0x7c, 0xaa, 0xce, 0x09, 0x54, 0xb1, 0x4e, 0x0b, 0x03, 0xbf, 0x0f, 0x40, 0x3d, 0xcb, 0x03, 0x61, 0x22, 0x80, 0xf3, 0xa3, 0x66, 0xd8, 0xc4, 0xe9, 0xaf, 0xec, 0xf8, 0x38, 0x3e, 0x0b, 0x78, 0x6b, 0xd2, 0x09, 0x90, 0x28, 0xc9, 0xd9, 0x3b, 0x12, 0x89, 0x5e, 0xa1, 0x40, 0x1e, 0x7f, 0xde, 0xef, 0x24, 0x7a, 0x05, 0x73, 0xe8, 0x7a, 0x64, 0x74, 0xca, 0x6b, 0x0a, 0x56, 0xe6, 0x0d, 0x87, 0xf9, 0xf3, 0x47, 0xf3, 0xa3, 0x6a, 0xbf, 0x32, 0x3a, 0xeb, 0xa7, 0x75, 0xb7, 0xde, 0xda, 0x04, 0xd7, 0x56, 0x27, 0x3c, 0x13, 0x3a, 0xec, 0xd3, 0xd3, 0xa6, 0xe7, 0x64, 0xdf, 0x8f, 0x4a, 0x27, 0x16, 0xa6, 0x0d, 0xff, 0x62, 0x7f, 0x88, 0xbb, 0xeb, 0xf3, 0x41, 0x95, 0x8b, 0xc3, 0x03, 0xff, 0x83, 0x7d, 0x30, 0xa0, 0x6c, 0xa4, 0x57, 0x99, 0x70, 0x0b, 0x09, 0x0c, 0xb9, 0x82, 0xe9, 0xdf, 0x2a, 0xb4, 0x03, 0xbd, 0x4d, 0x50, 0x5f, 0x5e, 0x8d, 0x67, 0xd5, 0x09, 0xa6, 0x16, 0x22, 0x57, 0x59, 0x64, 0x3c, 0x39, 0x64, 0x6d, 0xe3, 0x3c, 0xb1, 0xc1, 0x79, 0x0c, 0xce, 0x07, 0x13, 0x37, 0x9d, 0xe6, 0xd0, 0x34, 0x4d, 0x25, 0x6a, 0xa4, 0x88, 0x10, 0x0a, 0xd7, 0xee, 0x1e, 0x61, 0x92, 0xc3, 0xd2, 0xf4, 0x10, 0xe4, 0xdf, 0xb7, 0x46, 0x00, 0x8f, 0xde, 0x6c, 0x04, 0x65, 0xf0, 0xb8, 0xd7, 0x02, 0x1d, 0x6d, 0x48, 0x45, 0xd1, 0x14, 0x45, 0xb6, 0x89, 0x09, 0x4d, 0x25, 0xe6, 0x3a, 0x27, 0x8e, 0xff, 0x2c, 0xd5, 0x40, 0xfc, 0x3f, 0xc4, 0x3e, 0xe1, 0x32, 0x45, 0xe6, 0xa7, 0xe9, 0x41, 0xd0, 0x91, 0x6e, 0x27, 0xf9, 0xbd, 0x37, 0x2a, 0x21, 0xfa, 0xa7, 0xaa, 0x71, 0xd9, 0xd6, 0xef, 0x61, 0x07, 0x95, 0x1d, 0xd9, 0xd9, 0xad, 0x64, 0x96, 0x29, 0x68, 0x78, 0xd0, 0x61, 0x53, 0x41, 0x1a, 0xd5, 0x41, 0xd3, 0x89, 0x56, 0x93, 0xa0, 0x18, 0x03, 0xb7, 0xec, 0x4b, 0x63, 0xef, 0x82, 0x13, 0xb1, 0x54, 0xa6, 0xf2, 0x77, 0x1a, 0x4a, 0x5f, 0x5f, 0x15, 0x85, 0x6c, 0x45, 0x7c, 0x40, 0xa6, 0x90, 0xee, 0x33, 0x3d, 0xc3, 0xb2, 0x10, 0x65, 0x4f, 0x43, 0xfd, 0xfb, 0xac, 0x0c, 0x48, 0x6c, 0xa7, 0x70, 0x56, 0xd3, 0xfe, 0x0d, 0xdd, 0x61, 0x2a, 0x42, 0x53, 0x02, 0x7c, 0xee, 0xa7, 0x3d, 0x6b, 0x7b, 0x2e, 0x5c, 0x2d, 0x1c, 0xe0, 0xce, 0x84, 0x52, 0xc4, 0xc9, 0xdb, 0xb5, 0xa9, 0x34, 0x91, 0xf1, 0x17, 0xc3, 0x95, 0x0f, 0x85, 0x64, 0x33, 0xf6, 0xcc, 0xda, 0x2d, 0x31, 0xdc, 0xa7, 0x0e, 0xf2, 0xae, 0x30, 0xbb, 0x57, 0x7a, 0x1c, 0x4b, 0xed, 0x29, 0xfd, 0x18, 0x73, 0x0d, 0x32, 0x16, 0xe0, 0xd0, 0x0c, 0x64, 0xa7, 0xaa, 0x2f, 0x21, 0x39, 0xd7, 0x3b, 0x81, 0xcb, 0x49, 0xac, 0x20, 0x5a, 0x9a, 0xff, 0x96, 0xed, 0x44, 0x17, 0x4b, 0x1b, 0x14, 0xde, 0x8d, 0xcc, 0xdc, 0x2f, 0xdf, 0x44, 0x69, 0xf4, 0x94, 0x5d, 0xb4, 0x8b, 0x9d, 0x13, 0x5c, 0x6f, 0xa0, 0x46, 0x54, 0x14, 0x4a, 0xbc, 0xd9, 0x12, 0xe5, 0x66, 0xa8, 0x86, 0x2d, 0xe4, 0x6d, 0xb5, 0x5f, 0x4a, 0x7e, 0xf3, 0x94, 0x25, 0xc9, 0xc4, 0x4d, 0xb9, 0x0c, 0x40, 0x4f, 0x8d, 0x44, 0xbc, 0xb1, 0x2a, 0x67, 0xa6, 0x33, 0x1f, 0x55, 0xb1, 0xd1, 0x48, 0x0c, 0x32, 0x98, 0x50, 0x1c, 0xca, 0xb9, 0x75, 0x5c, 0x46, 0xdc, 0x8b, 0xda, 0xc3, 0xb6, 0x44, 0x18, 0x16, 0xde, 0xae, 0x75, 0x6b, 0xdc, 0xfd, 0xe9, 0x2b, 0x83, 0x8b, 0xf5, 0x24, 0x82, 0x1d, 0xda, 0xe4, 0x35, 0x68, 0x0a, 0x65, 0xc1, 0xd4, 0xdc, 0xf0, 0x5f, 0x7f, 0x83, 0x3b, 0xf8, 0x85, 0x41, 0xd5, 0xf3, 0x7f, 0xd8, 0xc3, 0x4b, 0x49, 0x42, 0x6c, 0xe4, 0x09, 0xa1, 0xb2, 0x1f, 0x6c, 0x79, 0x62, 0xac, 0x33, 0x1d, 0xce, 0x9f, 0xef, 0x67, 0xb8, 0xc6, 0x08, 0xac, 0x72, 0x3a, 0x04, 0xef, 0x44, 0x35, 0x06, 0x55, 0x0e, 0x23, 0x95, 0xd9, 0x2e, 0xfc, 0x9f, 0x41, 0xa4, 0xd0, 0xbe, 0x51, 0x74, 0xa4, 0xb9, 0x3e, 0x4c, 0x7c, 0x4e, 0x66, 0x67, 0xb9, 0x2f, 0x3d, 0xb1, 0xa5, 0x4a, 0x8b, 0x2c, 0x4d, 0x4d, 0xd5, 0x92, 0x8f, 0x6a, 0x18, 0x3c, 0x73, 0x58, 0xbe, 0x42, 0xbf, 0x9a, 0xca, 0xe4, 0xc5, 0x03, 0x56, 0x29, 0x80, 0x7a, 0x3f, 0xc5, 0xdf, 0xfb, 0x1f, 0x40, 0x61, 0xde, 0x7b, 0x55, 0xe2, 0x5c, 0x3e, 0x99, 0xb5, 0x4f, 0x66, 0x5d, 0xf2, 0x39, 0xfe, 0xd4, 0x11, 0x88, 0x4c, 0x79, 0xb8, 0x18, 0x4b, 0xab, 0xd2, 0xfa, 0x5c, 0x9a, 0xe1, 0x74, 0x38, 0x67, 0x95, 0x48, 0x29, 0x87, 0x9d, 0x39, 0x7a, 0x69, 0xbd, 0xcc, 0x2b, 0x58, 0x21, 0x4c, 0xea, 0xa2, 0xf1, 0x10, 0x3f, 0xfa, 0x25, 0x01, 0x07, 0x1b, 0x9b, 0x56, 0x23, 0xae, 0x66, 0xa2, 0x71, 0x6e, 0x6a, 0x11, 0xfb, 0x8a, 0x26, 0xee, 0x6f, 0x4a, 0xd0, 0x69, 0xd0, 0xf6, 0xa7, 0x98, 0x6a, 0xf4, 0x85, 0xbb, 0x0b, 0x30, 0xb3, 0xc4, 0x70, 0xc1, 0x02, 0x17, 0xfe, 0xc9, 0x17, 0x8e, 0xb3, 0x9c, 0x07, 0xc0, 0x5b, 0x25, 0x24, 0x83, 0x07, 0x86, 0x16, 0xaf, 0xbb, 0xff, 0x2d, 0x25, 0x67, 0x11, 0xf5, 0x10, 0x18, 0xe3, 0x0b, 0x6b, 0x70, 0xe4, 0x30, 0xc4, 0x54, 0xb2, 0x9c, 0x3f, 0xe4, 0x3b, 0x94, 0xdd, 0xb0, 0x22, 0x3f, 0xfe, 0x28, 0x64, 0xb6, 0x25, 0x55, 0x3b, 0x5a, 0xfc, 0xc7, 0x42, 0x6a, 0x98, 0xcf, 0xda, 0xd5, 0xfd, 0xee, 0xcd, 0x4c, 0xe5, 0x8c, 0x32, 0x9c, 0xbd, 0xed, 0x91, 0x3b, 0xf1, 0x62, 0x47, 0x20, 0x69, 0xbc, 0x2b, 0xd8, 0x54, 0x06, 0x71, 0xd7, 0x24, 0x74, 0xcf, 0x0c, 0xd9, 0x96, 0xdf, 0xb8, 0x83, 0xd1, 0xc5, 0x7f, 0x02, 0x10, 0x11, 0xc0, 0x11, 0xb7, 0xe7, 0x22, 0x83, 0xd9, 0x5d, 0x6f, 0xcb, 0xaa, 0x24, 0xa6, 0xc2, 0x37, 0x6b, 0x4b, 0xa5, 0x54, 0x00, 0x02, 0x5d, 0xd6, 0xb8, 0x5c, 0x04, 0x03, 0x12, 0xf1, 0xa4, 0x47, 0x17, 0xaf, 0x42, 0x29, 0x84, 0x71, 0x1b, 0x7c, 0x2b, 0xd3, 0x2d, 0xda, 0x97, 0x45, 0xf9, 0x4e, 0xef, 0x5f, 0x88, 0x51, 0x1c, 0x75, 0xac, 0xf8, 0x2e, 0x6a, 0x88, 0x6b, 0xfc, 0xc9, 0x52, 0x99, 0x0b, 0x11, 0x58, 0x2a, 0xb2, 0x51, 0x41, 0xb5, 0x7b, 0xf5, 0x96, 0x34, 0xcb, 0xe0, 0x81, 0xb5, 0xc6, 0xbb, 0xd4, 0x52, 0x6d, 0x8c, 0x4c, 0x62, 0x09, 0x8a, 0x18, 0xf1, 0xcd, 0x30, 0x95, 0x6e, 0xb7, 0x90, 0x5c, 0xa4, 0xb7, 0xea, 0x7e, 0xec, 0x13, 0x7d, 0x0e, 0xa0, 0x0a, 0x9d, 0xe0, 0xd2, 0xb8, 0x06, 0x91, 0x3e, 0x39, 0x70, 0xc7, 0x7e, 0x11, 0x63, 0xba, 0x7d, 0xcb, 0x4d, 0xf4, 0x2e, 0xe1, 0xd2, 0x55, 0x7e, 0xdc, 0x63, 0x59, 0x87, 0xbc, 0x12, 0x9e, 0x06, 0x9a, 0xa4, 0xa0, 0x0f, 0x8c, 0xe8, 0xc7, 0xff, 0xc9, 0x48, 0xa5, 0xb3, 0x0e, 0x9e, 0x78, 0xf7, 0x40, 0x49, 0xf7, 0x41, 0x52, 0x7f, 0x4b, 0xa0, 0x69, 0xe4, 0x5b, 0xef, 0x3e, 0x5c, 0x4c, 0x4e, 0xc4, 0x1e, 0x48, 0xd3, 0x0c, 0x0b, 0x7f, 0x7c, 0x65, 0x3d, 0x6c, 0x68, 0xc7, 0xe2, 0x5a, 0x47, 0x72, 0x4b, 0x26, 0x10, 0xd2, 0x40, 0x46, 0xf2, 0xa6, 0x97, 0x0a, 0x8c, 0x61, 0x05, 0x22, 0x60, 0xd0, 0x33, 0x61, 0x85, 0xfe, 0x14, 0xc1, 0x9d, 0x55, 0x77, 0xa6, 0x07, 0x05, 0xd8, 0x67, 0x56, 0xaa, 0x7c, 0x0a, 0x01, 0x29, 0xbd, 0x4f, 0x5b, 0xda, 0xa2, 0xf1, 0xc6, 0xed, 0xb2, 0x28, 0x24, 0x06, 0x0a, 0x72, 0x8f, 0x2b, 0xae, 0x93, 0x4a, 0xe0, 0x1d, 0xda, 0xf7, 0x90, 0x28, 0xa7, 0x0a, 0x2f, 0x03, 0x2a, 0x7d, 0x1e, 0x9d, 0x6d, 0xc6, 0x4f, 0x2d, 0x95, 0x06, 0xa9, 0x0d, 0x65, 0x83, 0xae, 0xcc, 0x03, 0x58, 0x5b, 0x7f, 0xff, 0x6b, 0x4f, 0x57, 0x91, 0xa0, 0x30, 0x79, 0x22, 0x4c, 0x4b, 0x09, 0x0e, 0xed, 0x7a, 0x88, 0xa9, 0x18, 0x4b, 0x61, 0x80, 0xb2, 0x5e, 0xbe, 0xe1, 0x63, 0x0f, 0xa0, 0x9d, 0x48, 0x55, 0x2f, 0x0c, 0xe8, 0xea, 0x4f, 0x52, 0x6a, 0xad, 0x73, 0xe1, 0x05, 0x44, 0xb6, 0x3f, 0xb7, 0x05, 0x28, 0x0a, 0x3a, 0x17, 0x65, 0x39, 0x34, 0xd4, 0x6d, 0xa4, 0xae, 0x72, 0xaf, 0xc7, 0xc7, 0xe3, 0x67, 0xc2, 0xa9, 0xf9, 0x2a, 0xa5, 0xbd, 0xce, 0xbf, 0xeb, 0x1b, 0x63, 0x31, 0x44, 0x45, 0x87, 0x22, 0x98, 0x14, 0xfb, 0x62, 0x48, 0xf2, 0xd3, 0xc1, 0xb7, 0x4a, 0x1f, 0x21, 0x09, 0x3d, 0xcb, 0xcf, 0x2a, 0x97, 0xc4, 0x13, 0x12, 0x01, 0x5c, 0x05, 0x48, 0x78, 0xf0, 0xa3, 0xa5, 0xfd, 0xc8, 0x21, 0x5b, 0x8e, 0x3e, 0x80, 0x36, 0x56, 0x23, 0x62, 0x21, 0x21, 0x5e, 0x1d, 0xeb, 0x12, 0xd6, 0x0e, 0x4b, 0x98, 0x93, 0x30, 0x22, 0x9e, 0x20, 0xec, 0x01, 0x02, 0x33, 0x33, 0xeb, 0x49, 0x8f, 0xcb, 0x5c, 0x91, 0x2a, 0xe6, 0x89, 0xc6, 0x8b, 0xf9, 0xea, 0x19, 0x77, 0xcb, 0xf6, 0xae, 0xcc, 0xcd, 0x2e, 0x95, 0xad, 0xa9, 0x5c, 0xfc, 0xdf, 0x1d, 0x1d, 0xa3, 0x73, 0x0a, 0x9d, 0x90, 0xa6, 0xc8, 0xa2, 0x03, 0x05, 0xbd, 0xcc, 0xac, 0xd5, 0x2e, 0x1b, 0x1c, 0xb1, 0x54, 0xb1, 0x7a, 0x75, 0xb3, 0xd9, 0x77, 0x5b, 0xa7, 0x49, 0x83, 0x64, 0x40, 0xa4, 0x42, 0xfa, 0x4f, 0x43, 0x39, 0xd3, 0xc1, 0x35, 0xce, 0x18, 0x2c, 0x84, 0x6f, 0xc7, 0xa8, 0xba, 0x11, 0x56, 0xe0, 0xa4, 0xdc, 0x99, 0x69, 0x56, 0x24, 0xe5, 0x52, 0x6f, 0x9c, 0x76, 0xfc, 0x9f, 0xc6, 0x0e, 0x2b, 0x66, 0xae, 0xdf, 0x5e, 0x1e, 0xd8, 0xab, 0x5c, 0x3b, 0x77, 0x2a, 0x10, 0xd2, 0xdf, 0xac, 0x96, 0x58, 0x3d, 0xff, 0x96, 0xad, 0x86, 0x93, 0xd1, 0x58, 0xad, 0xdc, 0xf9, 0x15, 0x19, 0xf8, 0xc6, 0x8d, 0x56, 0x92, 0x46, 0x64, 0x0b, 0x06, 0x75, 0x78, 0x2c, 0xc5, 0x0d, 0x68, 0x70, 0xfc, 0x9f, 0x54, 0x06, 0x70, 0xe3, 0xe4, 0x84, 0xac, 0x4d, 0x8c, 0x20, 0x5f, 0xe0, 0x0e, 0x22, 0x00, 0x47, 0x40, 0x99, 0xb3, 0x22, 0x0f, 0x4d, 0x70, 0x9e, 0xc4, 0xf6, 0x62, 0x48, 0x86, 0xab, 0x8d, 0x23, 0x20, 0x9d, 0xb4, 0xf7, 0x05, 0x05, 0x7a, 0xed, 0x91, 0x5b, 0xc7, 0x59, 0x92, 0xc9, 0x6d, 0xd7, 0x07, 0xdf, 0x0c, 0x99, 0x28, 0x88, 0x33, 0xff, 0xa6, 0x3d, 0xc7, 0x68, 0x33, 0x78, 0xa9, 0x49, 0x45, 0x6c, 0x93, 0x7c, 0x17, 0xf3, 0x43, 0xda, 0xf1, 0xc8, 0xdc, 0x0b, 0xaa, 0xf6, 0x89, 0x9d, 0x6b, 0x90, 0x63, 0x54, 0xb5, 0xa3, 0x95, 0xc1, 0xa6, 0x69, 0xbd, 0x16, 0x78, 0xbf, 0x96, 0x39, 0x4a, 0xd9, 0xd5, 0x17, 0x23, 0x35, 0x50, 0x3b, 0x34, 0xcd, 0x65, 0x9f, 0x5d, 0x91, 0x9a, 0xc2, 0xf3, 0x14, 0x81, 0xfa, 0xc1, 0x86, 0xdf, 0x0c, 0x4c, 0xe2, 0x0c, 0xfa, 0x5c, 0x68, 0x9d, 0x1c, 0xb7, 0x4e, 0x41, 0x72, 0x30, 0xb3, 0xe9, 0x39, 0xe0, 0xd4, 0x2c, 0xbc, 0xb4, 0x82, 0xe9, 0x6d, 0x28, 0xd4, 0x2e, 0x34, 0x51, 0x19, 0x58, 0x07, 0x21, 0x10, 0x7c, 0xbb, 0xe7, 0x5c, 0x06, 0x1a, 0x15, 0x32, 0xa0, 0x35, 0x46, 0x55, 0x56, 0xfc, 0x7f, 0x44, 0xf7, 0x0b, 0xb5, 0xb1, 0xbe, 0xc7, 0x90, 0x36, 0x31, 0xaa, 0x6f, 0x44, 0x4a, 0xdb, 0xac, 0x5c, 0xd5, 0x02, 0x21, 0x81, 0x19, 0x5a, 0xeb, 0xed, 0xba, 0x08, 0x6d, 0x03, 0xde, 0xab, 0x98, 0x85, 0x8f, 0x34, 0x6a, 0x07, 0x61, 0xf8, 0xb5, 0xa3, 0x54, 0x03, 0x22, 0xef, 0xfb, 0xaf, 0x75, 0x2c, 0xde, 0x76, 0x13, 0xc0, 0x1e, 0x05, 0xc1, 0xe7, 0x57, 0x91, 0xae, 0xa5, 0xca, 0x6e, 0xb4, 0xff, 0xbc, 0xde, 0xdb, 0x6a, 0x19, 0x27, 0x1f, 0x84, 0x5d, 0xe8, 0x73, 0x02, 0xb4, 0xac, 0x05, 0xe9, 0x60, 0xc0, 0xc4, 0x02, 0x5c, 0x42, 0x20, 0x87, 0x3f, 0x7b, 0x10, 0x23, 0x62, 0x6f, 0x5a, 0x1a, 0x45, 0xb1, 0x0f, 0xc3, 0x2f, 0x7c, 0x54, 0x3f, 0x15, 0x00, 0x68, 0x65, 0xbd, 0xfa, 0xe3, 0xfc, 0x24, 0x87, 0x3c, 0x2d, 0x1c, 0x3a, 0x8e, 0x37, 0x39, 0x6c, 0x9c, 0x65, 0xee, 0xd3, 0x12, 0x3e, 0xf4, 0x57, 0x0e, 0xfb, 0xeb, 0x20, 0xde, 0x3e, 0x44, 0xf4, 0x0c, 0x00, 0x5e, 0xc0, 0x97, 0xcb, 0xef, 0x74, 0x84, 0x2a, 0xa6, 0x14, 0x95, 0x5f, 0x0f, 0x0c, 0x59, 0x53, 0xb6, 0xc5, 0x65, 0xd3, 0x8f, 0x75, 0xe0, 0xf8, 0x95, 0x3b, 0x45, 0xe7, 0xb2, 0x6b, 0x64, 0xbb, 0xdf, 0x27, 0xaa, 0xc0, 0x8c, 0x2f, 0xa3, 0xe2, 0x42, 0xf9, 0xbd, 0x65, 0x87, 0x05, 0x4f, 0xd6, 0x02, 0x6b, 0xd9, 0x41, 0xdf, 0xb6, 0x8e, 0xa4, 0x75, 0xf4, 0x0f, 0xa4, 0x26, 0x0e, 0x7a, 0x7f, 0x87, 0x56, 0xa3, 0x42, 0xc1, 0x5f, 0xa1, 0x3c, 0x38, 0x11, 0x8d, 0xb2, 0x6a, 0xfc, 0x86, 0xd4, 0x19, 0xed, 0xf8, 0xf0, 0xac, 0xbf, 0x1e, 0xe6, 0xd3, 0x74, 0xc6, 0xdc, 0x6a, 0x85, 0x55, 0x32, 0xa0, 0x75, 0x0a, 0xb8, 0x58, 0xac, 0x87, 0x1f, 0xcf, 0x83, 0x8d, 0xae, 0x7f, 0x9c, 0x07, 0x36, 0x44, 0x74, 0x4a, 0x48, 0xbe, 0x3b, 0x9b, 0xa5, 0xf6, 0xe3, 0xf1, 0xf6, 0x44, 0x77, 0xfd, 0xbe, 0x70, 0xae, 0x68, 0x8c, 0x17, 0xc0, 0x5c, 0x75, 0x50, 0x78, 0x45, 0xc1, 0x90, 0x8a, 0xd9, 0xe5, 0xcb, 0x28, 0x56, 0xb2, 0xdc, 0xd0, 0x0a, 0xcb, 0x27, 0x68, 0x19, 0x5c, 0x7d, 0x8c, 0x7b, 0x09, 0x40, 0x27, 0x44, 0x25, 0xc7, 0x40, 0x28, 0x25, 0x03, 0x17, 0x3e, 0x54, 0x63, 0x71, 0x04, 0xc8, 0xf6, 0x30, 0xa4, 0x94, 0xd0, 0x26, 0x75, 0x3f, 0xae, 0x2b, 0xc5, 0x75, 0xdd, 0x6d, 0xd6, 0xfd, 0x57, 0x08, 0x26, 0xeb, 0x30, 0xd7, 0xf3, 0x17, 0x30, 0x89, 0xff, 0xcd, 0xc2, 0xf7, 0x91, 0xc6, 0x0c, 0xb4, 0xbc, 0x57, 0x60, 0xe6, 0xe3, 0xe9, 0xd3, 0x55, 0x7d, 0xa9, 0x2b, 0xc2, 0x16, 0x81, 0xff, 0x7a, 0x96, 0x46, 0x19, 0x2b, 0xc6, 0x33, 0x1f, 0xf5, 0x10, 0x96, 0x73, 0xc4, 0x87, 0xc9, 0x57, 0xde, 0x27, 0x64, 0x55, 0xb8, 0x5d, 0xb1, 0xde, 0x0e, 0xca, 0x60, 0x31, 0x32, 0x44, 0x7c, 0x7e, 0xa5, 0x1d, 0x9e, 0x4b, 0xe4, 0xa8, 0x61, 0x18, 0x84, 0xfa, 0x15, 0x3e, 0x81, 0xee, 0xb8, 0x1d, 0xd4, 0x6c, 0x22, 0x76, 0x43, 0xea, 0x7f, 0x16, 0x7d, 0x32, 0x02, 0xb5, 0x66, 0x66, 0xd8, 0x1d, 0xb0, 0x42, 0x5b, 0x8f, 0xab, 0xa2, 0x89, 0x62, 0x5e, 0x44, 0xb4, 0xed, 0xd6, 0xce, 0x7a, 0xa7, 0xbe, 0x13, 0xf8, 0x8d, 0x30, 0x92, 0x3b, 0xc4, 0xcb, 0x3f, 0xf7, 0x80, 0x06, 0x87, 0x7c, 0x24, 0xc3, 0x8e, 0xe5, 0xab, 0x28, 0xbb, 0x93, 0x46, 0xaa, 0x76, 0xda, 0x46, 0x6a, 0x30, 0xf9, 0x3d, 0xc5, 0xa4, 0x50, 0x60, 0x26, 0x5d, 0xcd, 0x30, 0x1f, 0x79, 0xa8, 0x5a, 0xb9, 0xac, 0x50, 0xdb, 0x08, 0x88, 0xa5, 0x67, 0x02, 0xfb, 0x67, 0x0c, 0x91, 0x19, 0xee, 0x13, 0xe6, 0x1b, 0x1c, 0x27, 0x11, 0xa8, 0x91, 0xb9, 0xce, 0x54, 0x1d, 0xa2, 0xa2, 0x67, 0x7b, 0x0a, 0x27, 0xdf, 0x3c, 0x89, 0xa4, 0xb8, 0x01, 0x8d, 0xe1, 0x6a, 0xed, 0xfc, 0x3a, 0xb4, 0x5a, 0x1a, 0xf1, 0x98, 0xcb, 0xac, 0xc9, 0xa7, 0x22, 0x5e, 0xd0, 0x7e, 0x14, 0x62, 0x7c, 0x91, 0xd9, 0x5a, 0xf9, 0x27, 0x28, 0x78, 0xc2, 0xa6, 0x62, 0xe3, 0x6f, 0x11, 0x0e, 0x5d, 0xcd, 0xcf, 0x85, 0x24, 0x34, 0xae, 0xee, 0x15, 0x15, 0x27, 0x6d, 0x17, 0xd3, 0xe4, 0x98, 0xb7, 0xd4, 0x7f, 0x2b, 0x10, 0xd7, 0x8d, 0xfc, 0xee, 0x88, 0xdb, 0x31, 0x33, 0x51, 0xf7, 0xb0, 0x79, 0x74, 0xf2, 0xd7, 0xf8, 0x57, 0x65, 0x6e, 0xaa, 0x1e, 0xb2, 0xd9, 0xae, 0x7f, 0x8c, 0x92, 0xeb, 0xd2, 0xba, 0xd7, 0xf5, 0x68, 0x17, 0xa0, 0x34, 0x1e, 0xde, 0xd4, 0x43, 0x32, 0x24, 0xbc, 0x96, 0x55, 0xa6, 0xb8, 0x60, 0x01, 0xc5, 0x31, 0xb3, 0x0c, 0xcf, 0xce, 0xe9, 0x7e, 0x80, 0xeb, 0x44, 0xa0, 0xc9, 0x47, 0xd1, 0x55, 0xcf, 0xfc, 0x92, 0xad, 0x37, 0xb5, 0xdb, 0xb8, 0xa1, 0x1b, 0xfd, 0x98, 0x72, 0x90, 0x22, 0xda, 0xd7, 0x20, 0x78, 0x07, 0x07, 0xb4, 0x92, 0x75, 0xc8, 0x89, 0x0b, 0x63, 0x34, 0xe1, 0x6c, 0x45, 0xbd, 0xf9, 0x4f, 0x5d, 0x6f, 0x3a, 0xc5, 0x8b, 0x75, 0xb3, 0xf6, 0x66, 0xdf, 0xc7, 0x07, 0x8b, 0xa2, 0x23, 0x41, 0x36, 0xe0, 0xf4, 0x6f, 0x0f, 0x6a, 0x56, 0x87, 0x46, 0x84, 0x0f, 0x8d, 0xe1, 0xe8, 0x7d, 0xb5, 0x55, 0x0d, 0xcd, 0xc8, 0x54, 0xa8, 0x6e, 0xc8, 0xe7, 0x74, 0xc5, 0xd7, 0xbc, 0x2e, 0x23, 0x55, 0xc1, 0xe4, 0xf4, 0x49, 0xf2, 0x70, 0x39, 0x02, 0x6e, 0x40, 0x38, 0xfe, 0xd1, 0x58, 0x71, 0x0a, 0xbe, 0x99, 0xd5, 0xab, 0xbb, 0x43, 0x33, 0xbd, 0x42, 0xb9, 0xf3, 0x5a, 0x14, 0x84, 0x06, 0xfd, 0xd1, 0x9b, 0x1d, 0xe7, 0xc6, 0xe1, 0x19, 0xc2, 0x06, 0xf0, 0xc3, 0x85, 0xbc, 0x15, 0xbe, 0x97, 0xbf, 0x9b, 0xba, 0x37, 0x67, 0x4d, 0xe9, 0x1b, 0xa0, 0x36, 0xb7, 0x57, 0x3c, 0xab, 0xb6, 0x81, 0x8e, 0x8c, 0xd7, 0x13, 0x34, 0xc6, 0xe0, 0x10, 0x34, 0x1c, 0x1a, 0xeb, 0x4b, 0x28, 0x4a, 0xa4, 0x81, 0x9c, 0xe3, 0x34, 0x01, 0xce, 0x7a, 0x2b, 0x28, 0x74, 0x7a, 0x98, 0xdc, 0xab, 0x19, 0x29, 0x1f, 0x3f, 0x8b, 0x93, 0xe3, 0x26, 0x75, 0x34, 0x20, 0x4d, 0xa4, 0xf7, 0x25, 0x98, 0xff, 0x79, 0x2c, 0x24, 0xba, 0x6a, 0x30, 0xcf, 0xcd, 0x35, 0x03, 0xfa, 0xa5, 0xe3, 0x9b, 0x8d, 0x19, 0x3c, 0xac, 0x3c, 0x9f, 0x30, 0x7d, 0x09, 0xc0, 0x76, 0xf4, 0x0a, 0xc9, 0x73, 0xf2, 0x6d, 0xc4, 0x5d, 0xe7, 0xb9, 0xa6, 0xa0, 0x9d, 0x56, 0xca, 0x81, 0x58, 0x50, 0x9e, 0x01, 0x21, 0x58, 0x9d, 0x04, 0x5f, 0x0c, 0x7d, 0xb2, 0xa7, 0x78, 0xa9, 0x1e, 0xd5, 0xdc, 0xf1, 0x25, 0x5c, 0xaf, 0x80, 0x9a, 0xda, 0xe5, 0x0f, 0xa0, 0xf0, 0x6e, 0x59, 0x56, 0x50, 0xff, 0xcf, 0xba, 0x17, 0x14, 0x8c, 0xc7, 0x5e, 0x36, 0x8b, 0xe1, 0x0b, 0x79, 0x18, 0x73, 0xed, 0x4a, 0x84, 0xd7, 0x09, 0x67, 0x1d, 0x76, 0x2e, 0x2f, 0x5d, 0x30, 0xd0, 0x1c, 0x62, 0xfe, 0x13, 0x8e, 0x9e, 0xd5, 0x25, 0xca, 0xd0, 0xce, 0xd1, 0x42, 0x33, 0x85, 0x51, 0x17, 0xf5, 0xbe, 0x64, 0xdc, 0xea, 0x4f, 0xa1, 0x9d, 0x82, 0x3a, 0x0b, 0x1f, 0xf9, 0x19, 0xe5, 0x6a, 0xcd, 0xbf, 0xc8, 0x85, 0x75, 0x1c, 0xf2, 0x81, 0x50, 0x61, 0xe1, 0xb8, 0xdc, 0x65, 0x21, 0x57, 0x28, 0x47, 0x62, 0x1a, 0x8c, 0x56, 0xcd, 0x57, 0x97, 0x2d, 0x98, 0x3e, 0x49, 0x22, 0xd8, 0x5f, 0x82, 0xe2, 0x97, 0x6d, 0xbb, 0x55, 0x27, 0x41, 0xf4, 0xc8, 0xb5, 0x21, 0xed, 0x4a, 0x21, 0x43, 0x99, 0x56, 0x0e, 0x8d, 0xd0, 0xb3, 0x35, 0x9f, 0x44, 0x99, 0xfe, 0x13, 0xb6, 0x15, 0x51, 0x03, 0x6a, 0xae, 0xa9, 0xcc, 0xd8, 0x49, 0x6b, 0x12, 0xa4, 0x4a, 0x77, 0x05, 0xd0, 0xfc, 0xfc, 0xe2, 0x31, 0x33, 0x90, 0xbc, 0x1f, 0x30, 0x80, 0x7c, 0x71, 0xc4, 0x64, 0x27, 0xa9, 0xb9, 0xf7, 0x5f, 0x6b, 0x6d, 0x26, 0x2d, 0x34, 0xc0, 0x67, 0xfd, 0x48, 0x30, 0x4c, 0xea, 0xec, 0x43 ],
- const [ 0x7b, 0xd0, 0xa5, 0x9d, 0x7e, 0xec, 0x22, 0xeb, 0x80, 0x64, 0x83, 0xb0, 0xb9, 0x5d, 0xe6, 0xe1, 0x5c, 0x14, 0x23, 0x44, 0x25, 0x22, 0x01, 0xd5, 0x31, 0xfe, 0xa9, 0x69, 0x13, 0xc3, 0x5a, 0x91, 0x24, 0x33, 0x5f, 0xc1, 0x1a, 0xfc, 0x3e, 0xb2, 0xdd, 0x3b, 0x33, 0x04, 0x96, 0x3f, 0xdc, 0x28, 0x08, 0x8f, 0x36, 0x7d, 0x23, 0x2e, 0xc8, 0xb9, 0xd6, 0x1d, 0x1e, 0x8b, 0x26, 0x22, 0x79, 0x7f, 0x7d, 0xc8, 0xc5, 0x21, 0x44, 0xa7, 0xcb, 0x65, 0xb3, 0xe5, 0xa8, 0x46, 0xe8, 0xfd, 0x7e, 0xae, 0x37, 0xbf, 0x69, 0x96, 0xc2, 0x99, 0xb5, 0x6e, 0x49, 0x14, 0x4e, 0xbf, 0x43, 0xa1, 0x77, 0x0f, 0x2d, 0x96, 0xbf, 0x05, 0x22, 0x74, 0x31, 0xcd, 0xac, 0x6b, 0xcc, 0xbe, 0xda, 0x20, 0x33, 0x3a, 0x92, 0xad, 0xa5, 0xd6, 0x29, 0xe9, 0x2e, 0xbb, 0x31, 0xeb, 0x1f, 0x4d, 0x92, 0xc9, 0xbd, 0x0a, 0xdd, 0xa5, 0x36, 0xb4, 0xdc, 0xeb, 0xd9, 0xb2, 0x6e, 0xd4, 0x85, 0xb4, 0x91, 0x2f, 0x62, 0x96, 0xc1, 0x60, 0xd0, 0x87, 0x81, 0xa9, 0x9d, 0x6a, 0x37, 0xa8, 0x7b, 0x7c, 0x3c, 0x21, 0xb1, 0x37, 0x34, 0xfe, 0x10, 0x77, 0x9b, 0x94, 0x29, 0xdc, 0xa1, 0x28, 0xbd, 0x6f, 0x38, 0xb2, 0x75, 0x88, 0x6b, 0xe0, 0xd3, 0xef, 0xf1, 0x5e, 0x69, 0x41, 0x02, 0x55, 0x49, 0x95, 0x69, 0x32, 0xbc, 0x60, 0xdb, 0xa8, 0x37, 0x96, 0x87, 0xf8, 0x8a, 0x12, 0xee, 0x70, 0x5b, 0x38, 0xf5, 0x31, 0xd3, 0xd9, 0x38, 0x36, 0x97, 0x56, 0xa2, 0x92, 0xfa, 0x09, 0x3b, 0xf9, 0x71, 0xe0, 0x40, 0x82, 0x47, 0x4b, 0x79, 0xab, 0x91, 0x59, 0xc7, 0x9e, 0x65, 0x1e, 0xfd, 0xb3, 0x47, 0x57, 0xf0, 0x35, 0xe4, 0x51, 0xd2, 0x69, 0x03, 0x06, 0xbb, 0xcc, 0xb8, 0x89, 0x89, 0x9d, 0xda, 0xa5, 0xea, 0x9b, 0xb8, 0xc1, 0xb7, 0x10, 0x08, 0x07, 0x84, 0x0e, 0x20, 0xc6, 0x75, 0xf9, 0x69, 0x14, 0x53, 0x45, 0x10, 0xb7, 0xde, 0x81, 0xfe, 0x46, 0x65, 0x95, 0x0b, 0x8b, 0x95, 0x48, 0x6e, 0x2c, 0x8f, 0x05, 0x78, 0x8a, 0x3d, 0xde, 0x83, 0xea, 0xe5, 0xd1, 0x25, 0xd3, 0xfe, 0x4a, 0xa9, 0xb6, 0x43, 0xea, 0xbf, 0xd5, 0x07, 0x87, 0x72, 0x5d, 0xc8, 0x74, 0x5b, 0xd5, 0x06, 0x02, 0x14, 0xbc, 0x55, 0x46, 0xf0, 0x6e, 0xb2, 0x1d, 0xe9, 0x48, 0x13, 0x6e, 0xda, 0x0c, 0x42, 0xaf, 0xef, 0x87, 0xea, 0xab, 0x59, 0x71, 0xf2, 0x82, 0x46, 0x94, 0x0b, 0xf1, 0x10, 0x31, 0x85, 0xd3, 0xb4, 0x9f, 0x67, 0xe8, 0x87, 0x35, 0xbe, 0xd6, 0x24, 0x6a, 0x35, 0x6d, 0xa9, 0x3b, 0xe6, 0x2f, 0x23, 0xcd, 0x70, 0x10, 0x46, 0x54, 0x4a, 0x7a, 0x62, 0x33, 0x57, 0x94, 0x92, 0x65, 0xba, 0xc4, 0x37, 0x1b, 0xeb, 0x73, 0xa4, 0xa6, 0x0a, 0x10, 0x1b, 0x98, 0x74, 0x57, 0xf9, 0x26, 0x95, 0xd3, 0x2d, 0xd1, 0xfd, 0xa1, 0xee, 0x46, 0xb5, 0x78, 0xae, 0x82, 0xd3, 0xe6, 0x49, 0x39, 0x4c, 0xdc, 0x83, 0x79, 0x0a, 0x6d, 0xb1, 0x8b, 0x3e, 0xd3, 0xb6, 0x1a, 0xf8, 0xb3, 0x31, 0x96, 0xf5, 0xa2, 0xf5, 0xdb, 0xb7, 0xe7, 0xba, 0x0e, 0xdb, 0x82, 0x12, 0xc8, 0xa8, 0x6e, 0x9e, 0x77, 0xe4, 0x24, 0x81, 0x01, 0xeb, 0x60, 0x15, 0xaa, 0x02, 0x27, 0xdd, 0x37, 0xe8, 0x09, 0xbb, 0x53, 0xae, 0xa4, 0x63, 0x33, 0xc9, 0x69, 0x10, 0x76, 0x66, 0xa3, 0x76, 0x4f, 0xfd, 0xb4, 0xf7, 0xe5, 0x29, 0xa2, 0x19, 0xfa, 0xb7, 0xd3, 0x38, 0xcb, 0xfc, 0x15, 0x78, 0x38, 0x6c, 0xe2, 0xfe, 0x25, 0x69, 0xe1, 0x60, 0x20, 0x59, 0xaf, 0x59, 0x44, 0xfb, 0xe0, 0xc2, 0x5d, 0xfb, 0x41, 0xbd, 0x4d, 0xc4, 0x60, 0x34, 0xae, 0x95, 0x4f, 0x82, 0xb8, 0xd7, 0xa4, 0x6f, 0x65, 0xae, 0xc4, 0x62, 0xd4, 0xce, 0x62, 0xd2, 0xeb, 0x90, 0x42, 0xfe, 0x41, 0x44, 0x43, 0xde, 0x3b, 0xc9, 0x9c, 0x59, 0x75, 0x5c, 0x66, 0xb8, 0x63, 0xae, 0x5b, 0x5b, 0x38, 0x39, 0xdd, 0xaa, 0x06, 0xd3, 0x3a, 0x4f, 0x27, 0x84, 0x2e, 0xa3, 0xdd, 0x95, 0xa9, 0x65, 0x35, 0xe9, 0xd3, 0xb2, 0x31, 0x91, 0x4d, 0x31, 0x25, 0x9a, 0xba, 0x8f, 0x62, 0x29, 0x7f, 0x2b, 0x12, 0xcb, 0xc6, 0x12, 0x63, 0x06, 0xc9, 0x2d, 0xe8, 0x34, 0x4d, 0xb9, 0x3c, 0x91, 0x6c, 0xf8, 0xe8, 0x92, 0x98, 0x26, 0x86, 0x78, 0xdd, 0xaf, 0x27, 0x26, 0x66, 0x9f, 0xf3, 0x2f, 0x43, 0x5a, 0x0f, 0x34, 0x6a, 0x8d, 0xc4, 0x6d, 0xfb, 0x64, 0xdd, 0x85, 0xc8, 0xfe, 0x50, 0xab, 0x14, 0x1e, 0x21, 0xe6, 0x9b, 0x23, 0x84, 0xa8, 0xd3, 0x3a, 0x42, 0xa7, 0x72, 0xd2, 0x5d, 0xe8, 0x30, 0x50, 0xf7, 0x1c, 0xce, 0x04, 0x70, 0x30, 0x57, 0x5c, 0xcf, 0x20, 0xa6, 0x58, 0x63, 0x0c, 0x28, 0x3e, 0xaa, 0x8d, 0xe3, 0x8f, 0x71, 0x49, 0xb7, 0x39, 0x3d, 0xc5, 0xe4, 0x0e, 0xea, 0x7b, 0xcd, 0x75, 0x92, 0x2d, 0xfc, 0x60, 0xb0, 0x78, 0x65, 0x7e, 0x85, 0xac, 0xef, 0xb1, 0xbb, 0xdb, 0x30, 0xc2, 0x49, 0x30, 0x78, 0x54, 0x96, 0x82, 0x12, 0x16, 0xe1, 0x29, 0xc6, 0x3d, 0xe0, 0x11, 0xa2, 0x32, 0xa7, 0x0d, 0xfb, 0x87, 0xcc, 0x6d, 0xae, 0x30, 0xc9, 0xd2, 0xab, 0xf0, 0xa1, 0x41, 0xb5, 0x11, 0xc7, 0x77, 0x63, 0x58, 0x3b, 0x7c, 0x6b, 0x38, 0xf6, 0x7b, 0x1f, 0x46, 0x88, 0xd1, 0x38, 0xed, 0x00, 0x64, 0xd3, 0x63, 0x0c, 0x36, 0xb9, 0xdb, 0x61, 0x3a, 0xe3, 0xfd, 0x5d, 0x66, 0x3e, 0x93, 0xeb, 0x09, 0xab, 0x85, 0xa8, 0x5f, 0x4a, 0x07, 0x44, 0x62, 0xf8, 0x11, 0x2a, 0xe4, 0x16, 0x0f, 0x63, 0xdb, 0x8d, 0xdb, 0xb7, 0xfc, 0x0e, 0xe8, 0x16, 0x8b, 0x9f, 0xc0, 0x37, 0x71, 0x53, 0xb0, 0x7f, 0x8f, 0x58, 0xc1, 0x24, 0x52, 0x37, 0xeb, 0x92, 0x87, 0x58, 0x86, 0x0e, 0x71, 0xc5, 0x01, 0x99, 0x19, 0x2f, 0xd6, 0x17, 0xe6, 0x36, 0xbd, 0xb0, 0x6d, 0xe5, 0x21, 0x77, 0x8a, 0x7c, 0xd0, 0x49, 0xb0, 0x73, 0xf6, 0xf8, 0x7d, 0xbb, 0x4c, 0xa9, 0x92, 0x47, 0x8d, 0x7b, 0xa1, 0xcb, 0x2a, 0x6a, 0xc7, 0xc4, 0x3e, 0x72, 0x1d, 0xb8, 0xc4, 0xf7, 0x8a, 0xbf, 0x08, 0x64, 0xdb, 0x42, 0x5b, 0x13, 0x15, 0x03, 0x0b, 0x6d, 0x09, 0x5d, 0x92, 0x52, 0x2a, 0xce, 0x0e, 0xbb, 0x9c, 0xb2, 0xf1, 0x9d, 0x8d, 0x51, 0xfa, 0x11, 0xc8, 0x1c, 0x64, 0xb3, 0x87, 0x34, 0x5d, 0x47, 0x89, 0x2c, 0xb9, 0xa3, 0x65, 0x10, 0xe8, 0xc9, 0x1e, 0xa6, 0x25, 0x53, 0xf7, 0xf3, 0xf1, 0x14, 0x89, 0x01, 0xc0, 0xfc, 0x12, 0xe0, 0xf2, 0x3c, 0x10, 0xeb, 0x04, 0xab, 0x0f, 0x4c, 0x08, 0x68, 0xbf, 0xc3, 0x52, 0xc1, 0x49, 0xa3, 0x75, 0x54, 0xe3, 0x1d, 0x6e, 0x74, 0xa3, 0xc0, 0x1e, 0xcf, 0x90, 0x41, 0xfe, 0x4d, 0xff, 0x78, 0x0e, 0x3b, 0x1d, 0xac, 0x0e, 0xa8, 0xc8, 0x10, 0xf1, 0x0f, 0xa3, 0x8d, 0x8f, 0x37, 0x69, 0xc2, 0x9a, 0x58, 0x81, 0x4a, 0xd3, 0x7f, 0xd3, 0x3d, 0x7d, 0x33, 0xdb, 0xf9, 0x12, 0x59, 0xfb, 0x22, 0x36, 0x55, 0x16, 0xe7, 0xe9, 0x72, 0x5a, 0x87, 0x00, 0x84, 0x5d, 0x14, 0xd6, 0xcc, 0x6c, 0x78, 0x3f, 0x1b, 0x20, 0xb5, 0xbd, 0x3a, 0x31, 0x71, 0xf7, 0x8a, 0x8f, 0xb1, 0x66, 0xe8, 0xaf, 0xe5, 0x52, 0xd3, 0x23, 0x25, 0xfd, 0xd1, 0x6e, 0xba, 0x1e, 0x0e, 0x16, 0xe0, 0x90, 0x47, 0xfb, 0xca, 0x4c, 0xe6, 0xe6, 0xe7, 0x95, 0x6f, 0x65, 0x64, 0x72, 0x1a, 0xd7, 0xf2, 0x61, 0xc2, 0xc3, 0xc9, 0x4a, 0xfd, 0x6e, 0xec, 0xb2, 0x8d, 0xac, 0xaf, 0x31, 0xf7, 0xf6, 0x77, 0x26, 0x71, 0xbd, 0xc2, 0xa9, 0x01, 0xfe, 0x67, 0xc1, 0xe4, 0x17, 0x1e, 0xd7, 0x2d, 0xd9, 0x42, 0x6b, 0xae, 0xde, 0xd6, 0x06, 0x1b, 0x1c, 0xc7, 0x70, 0x6d, 0xbb, 0x70, 0x22, 0x85, 0x24, 0x63, 0xfe, 0x12, 0x5b, 0x67, 0x3e, 0xb4, 0x8e, 0xbd, 0xab, 0x62, 0xee, 0xa8, 0x0f, 0x09, 0xbd, 0x2c, 0xec, 0x75, 0xa8, 0x15, 0x6e, 0x75, 0x58, 0x3b, 0x9f, 0x3a, 0x44, 0x05, 0xda, 0x01, 0xc9, 0x2c, 0x82, 0xf2, 0x7c, 0xc1, 0xf3, 0x47, 0xbf, 0x72, 0xb9, 0xb0, 0x92, 0x09, 0x01, 0xf6, 0xac, 0x35, 0x4c, 0xdf, 0xcb, 0x8d, 0x6b, 0x53, 0x48, 0xd2, 0xa7, 0xbc, 0xee, 0x74, 0x40, 0xb3, 0x0c, 0x58, 0x19, 0xd8, 0xc9, 0xd9, 0xb1, 0x01, 0xb8, 0x0d, 0x55, 0x98, 0xac, 0x49, 0x94, 0x3e, 0xce, 0xe7, 0xf4, 0xb4, 0xec, 0x46, 0xe3, 0xfc, 0x14, 0x13, 0xf0, 0xbb, 0x62, 0xc7, 0x3b, 0xe2, 0x16, 0x71, 0x2a, 0x8d, 0xe9, 0xb6, 0x5e, 0x2c, 0xa2, 0x16, 0xe6, 0xe0, 0xe4, 0x71, 0xb2, 0x28, 0x4a, 0xc9, 0x4a, 0xbc, 0xb6, 0x49, 0xc0, 0xb9, 0xe5, 0x86, 0xe2, 0xff, 0x47, 0x06, 0xb5, 0xd7, 0x0e, 0xff, 0x1f, 0xda, 0x85, 0x60, 0xe4, 0x0e, 0xa4, 0x15, 0xd4, 0x51, 0xe1, 0x87, 0x42, 0xfb, 0x48, 0x63, 0xb7, 0xbf, 0xce, 0x9d, 0xe8, 0xd2, 0xe3, 0xb4, 0xe6, 0x4f, 0x46, 0x37, 0x95, 0xdb, 0x1d, 0x88, 0x5f, 0x85, 0x45, 0xe0, 0x29, 0xef, 0xe7, 0x93, 0x86, 0xb3, 0x4c, 0x96, 0x2b, 0x00, 0xf2, 0x3e, 0xa4, 0x84, 0xdf, 0x4a, 0x45, 0x8f, 0x35, 0x24, 0x62, 0x75, 0x07, 0x64, 0xc3, 0x34, 0x6b, 0x96, 0x52, 0x56, 0xd0, 0x3d, 0x17, 0x19, 0x92, 0x18, 0x66, 0xce, 0xcc, 0xa3, 0x57, 0x7f, 0x6e, 0xe1, 0x77, 0xd4, 0x8f, 0x59, 0xbd, 0x37, 0x04, 0x5e, 0xc0, 0x37, 0x31, 0x94, 0x26, 0x2a, 0x1f, 0xb0, 0x60, 0x17, 0xcf, 0x7f, 0x95, 0xd3, 0xce, 0x2a, 0xdb, 0x69, 0x0a, 0xb8, 0xad, 0xbf, 0xe4, 0xd4, 0x9a, 0x77, 0x86, 0xd1, 0x3a, 0x14, 0x77, 0xeb, 0x66, 0x5e, 0x6c, 0xd0, 0xa8, 0x07, 0x62, 0x5f, 0xf1, 0x8e, 0xe9, 0xaf, 0x8a, 0x64, 0xc3, 0x53, 0x4d, 0x4e, 0xad, 0xdc, 0x15, 0x0a, 0x7d, 0xa0, 0x73, 0x35, 0x6d, 0xba, 0xa3, 0x6c, 0xb7, 0x52, 0xbe, 0xb2, 0x62, 0x1f, 0x30, 0x11, 0x5b, 0x29, 0x6d, 0x84, 0xc7, 0xd4, 0xe0, 0x15, 0x98, 0x1a, 0x24, 0x43, 0x5e, 0x18, 0x77, 0xa6, 0x60, 0xcc, 0x6c, 0xd6, 0xec, 0x1d, 0xe0, 0x88, 0xeb, 0x1b, 0x2e, 0xfa, 0xb8, 0x89, 0xa7, 0x92, 0x33, 0x99, 0x3c, 0xc2, 0x11, 0xf6, 0x7e, 0x2e, 0x76, 0x07, 0xc9, 0x11, 0xc5, 0x73, 0xbb, 0xdc, 0xb7, 0xe0, 0xeb, 0x21, 0xaa, 0x01, 0xd8, 0xb0, 0x3c, 0xcf, 0x20, 0x00, 0x19, 0x16, 0xf3, 0xd0, 0x11, 0x34, 0xc6, 0x0d, 0x6e, 0x1d, 0x4c, 0xf7, 0x84, 0xa3, 0xa2, 0x80, 0x89, 0xf5, 0xca, 0xf4, 0xa7, 0x65, 0x5a, 0xdf, 0x50, 0x6e, 0x75, 0x2c, 0xd2, 0xf5, 0xfb, 0x8a, 0x2b, 0xcf, 0xfd, 0x14, 0x1e, 0x84, 0x74, 0x30, 0x86, 0x52, 0x32, 0xb7, 0xeb, 0x75, 0x18, 0x57, 0x53, 0xa6, 0x8a, 0x36, 0x5a, 0xe2, 0x20, 0xd8, 0x85, 0x6c, 0x9e, 0x43, 0xd4, 0x15, 0x27, 0x61, 0x96, 0xbb, 0xad, 0xa5, 0x81, 0x10, 0xac, 0xf1, 0x02, 0x9c, 0x18, 0xb8, 0xd2, 0x06, 0x94, 0x60, 0xca, 0x8f, 0xe4, 0xea, 0xf8, 0xdf, 0xa5, 0xd4, 0xf2, 0x04, 0x3b, 0x3e, 0x6a, 0xb8, 0x0c, 0x4d, 0x03, 0xe2, 0xec, 0xcd, 0x63, 0x60, 0xd7, 0x1a, 0x8a, 0x04, 0xe6, 0x40, 0x62, 0xdc, 0x7c, 0x61, 0x97, 0xb7, 0xc0, 0x57, 0xa8, 0xe4, 0x51, 0x9b, 0x3f, 0x3d, 0x35, 0x65, 0xbe, 0x65, 0x12, 0x15, 0x1a, 0x4d, 0xa0, 0xd2, 0xec, 0xfd, 0x5e, 0x71, 0xc5, 0x91, 0x84, 0x98, 0xc2, 0x81, 0x39, 0x23, 0x61, 0x26, 0x07, 0xc6, 0x93, 0x7a, 0x8c, 0xf4, 0x13, 0x20, 0x72, 0x00, 0xf5, 0xa4, 0xa1, 0x83, 0x82, 0x03, 0xb2, 0xfd, 0x43, 0x6e, 0xa7, 0xbf, 0x5c, 0x4b, 0xda, 0x08, 0x1c, 0x7d, 0x34, 0x6e, 0xd1, 0xe5, 0x9f, 0x7f, 0xe1, 0x28, 0xbe, 0xa9, 0x16, 0xb3, 0xdb, 0x57, 0x3a, 0xfd, 0x21, 0x5d, 0xe4, 0x0c, 0x0b, 0x96, 0x91, 0x3b, 0x1c, 0xcb, 0xf6, 0x3a, 0xd1, 0xd7, 0x95, 0x56, 0xd4, 0x09, 0x8f, 0xfb, 0x72, 0xca, 0xb9, 0x77, 0x4f, 0x80, 0xf1, 0x00, 0x58, 0xb2, 0xb3, 0xf9, 0xfa, 0x6c, 0xe7, 0x71, 0x91, 0xe5, 0xfd, 0xed, 0x24, 0x5f, 0x3c, 0x67, 0x4f, 0x4f, 0x57, 0x96, 0x80, 0xbe, 0x42, 0x70, 0x67, 0xef, 0x43, 0xee, 0xa7, 0x42, 0x4c, 0x0f, 0xd2, 0x58, 0x88, 0x1f, 0x94, 0x78, 0x34, 0x39, 0x2e, 0x31, 0xb0, 0x0b, 0x26, 0x41, 0xd6, 0xd9, 0x3d, 0xb6, 0x8a, 0xc4, 0xa2, 0x53, 0x92, 0x4d, 0x65, 0x35, 0xa9, 0x15, 0x2e, 0xb7, 0xce, 0xe6, 0x2f, 0x92, 0xe2, 0xf7, 0x57, 0x49, 0x72, 0x6c, 0xc9, 0xc4, 0xd2, 0x1d, 0x8c, 0x3a, 0x6b, 0x98, 0x84, 0x55, 0x55, 0x69, 0xa1, 0x91, 0x29, 0x99, 0x56, 0xe6, 0x10, 0x74, 0x4d, 0xa6, 0x20, 0x8f, 0x59, 0xa8, 0xe9, 0x0a, 0xac, 0xa6, 0x4a, 0x13, 0x4a, 0xe4, 0x8a, 0xab, 0xbd, 0x12, 0xa3, 0xad, 0x0a, 0x74, 0xe1, 0x0c, 0xe5, 0x40, 0xac, 0x5c, 0x21, 0x48, 0xa2, 0x94, 0x6a, 0xd8, 0xea, 0x12, 0x36, 0xe2, 0xc4, 0xdf, 0xf9, 0x58, 0x64, 0x35, 0x98, 0xda, 0x00, 0x3e, 0x21, 0x91, 0x28, 0x1f, 0xb9, 0x5b, 0x56, 0x35, 0xd6, 0x28, 0xc6, 0x9e, 0xae, 0xa4, 0x87, 0xfc, 0xef, 0x16, 0xd3, 0x75, 0xb0, 0x87, 0x9c, 0xff, 0xa7, 0x28, 0x67, 0xda, 0x9d, 0xee, 0x5d, 0x5d, 0x20, 0x7f, 0x9f, 0xf6, 0x78, 0x51, 0xdb, 0x6d, 0xdc, 0x10, 0x1d, 0x68, 0xe5, 0x41, 0xe7, 0x34, 0x42, 0x26, 0x83, 0xc2, 0xae, 0xe1, 0x98, 0xf0, 0x1f, 0xdb, 0xfc, 0x0a, 0x40, 0x67, 0xc9, 0x91, 0x22, 0xa3, 0xb3, 0x3b, 0x2e, 0x9f, 0x98, 0x3a, 0x5f, 0xc2, 0x59, 0xc1, 0xae, 0x69, 0xe9, 0xc5, 0xcd, 0xd0, 0xa3, 0x01, 0x17, 0x36, 0xe1, 0x3c, 0xc8, 0x3c, 0xca, 0xce, 0x69, 0x8f, 0x6b, 0x61, 0x8f, 0xc6, 0x0a, 0xf5, 0xc5, 0x8e, 0xb6, 0x27, 0xc7, 0x04, 0x23, 0xb2, 0xf1, 0x62, 0xb5, 0x36, 0xf6, 0xde, 0xdb, 0x38, 0xd5, 0xcf, 0x9e, 0x6a, 0x09, 0x12, 0x7a, 0x2d, 0x00, 0xac, 0x6c, 0x55, 0xcf, 0xb0, 0x4c, 0x2c, 0x24, 0x64, 0x5d, 0xb9, 0x7c, 0x9f, 0x23, 0x42, 0x96, 0x75, 0x74, 0x0f, 0x27, 0x16, 0xd2, 0x71, 0xcf, 0xf4, 0xf8, 0x03, 0x4c, 0x24, 0xb3, 0x30, 0xee, 0x07, 0xf3, 0xf5, 0x4a, 0x29, 0x22, 0xe8, 0x33, 0x69, 0xb4, 0x7a, 0xe6, 0x5b, 0x00, 0x79, 0x85, 0xea, 0x4e, 0xd9, 0xc7, 0x42, 0x31, 0xb3, 0xed, 0xed, 0x17, 0x8e, 0xf8, 0x3b, 0x1e, 0xde, 0x19, 0xe8, 0x29, 0xca, 0x69, 0xf9, 0x34, 0x32, 0xda, 0xe7, 0xe4, 0xf1, 0x6d, 0xff, 0x62, 0x5f, 0xa6, 0x09, 0x6a, 0x1a, 0x3e, 0x28, 0x9f, 0x07, 0x17, 0x01, 0x22, 0x93, 0x75, 0x1f, 0x62, 0x3f, 0x6a, 0x96, 0x36, 0x5b, 0x92, 0xe7, 0x29, 0x11, 0x01, 0x24, 0x14, 0xa6, 0x7a, 0x55, 0xf3, 0xfd, 0xe1, 0x19, 0xf1, 0x5d, 0xf3, 0x91, 0xc5, 0x73, 0x35, 0x79, 0x41, 0x9b, 0x2a, 0x98, 0x28, 0x5b, 0xc9, 0x5b, 0x41, 0x30, 0x2e, 0xbd, 0xa9, 0x8e, 0x90, 0x69, 0x6d, 0x22, 0x73, 0x23, 0x58, 0x5a, 0x1f, 0x64, 0x0a, 0x27, 0x50, 0x44, 0x4a, 0x02, 0x2f, 0x9d, 0x9e, 0x2d, 0x81, 0x6e, 0x18, 0x3b, 0x1f, 0x7d, 0x72, 0xd2, 0xa6, 0x41, 0x5e, 0xb0, 0x6f, 0xfe, 0x17, 0xec, 0xc2, 0x32, 0x3c, 0x7e, 0x46, 0x30, 0xde, 0x02, 0xbc, 0x0b, 0xd8, 0xb9, 0xed, 0xb5, 0x5e, 0xd1, 0xe1, 0x68, 0xd9, 0xe6, 0x52, 0x45, 0xf2, 0xc8, 0x60, 0x3c, 0xed, 0x7f, 0x87, 0x2b, 0x39, 0x8c, 0xcd, 0x4a, 0x45, 0x72, 0x40, 0xc6, 0x95, 0x75, 0x9f, 0xac, 0x14, 0xa2, 0x58, 0x09, 0xac, 0x0f, 0xb2, 0x50, 0x14, 0x64, 0x4c, 0xfb, 0xe9, 0x9a, 0xc6, 0x75, 0x01, 0x03, 0xbe, 0x38, 0xfc, 0x8b, 0xfe, 0x32, 0x1b, 0x3d, 0xf3, 0x6e, 0x56, 0x09, 0x62, 0xf0, 0xa8, 0xc4, 0x56, 0xe1, 0xae, 0x70, 0x5d, 0xec, 0x70, 0xbe, 0xf3, 0xe7, 0x7f, 0xd1, 0x3f, 0xb6, 0x40, 0x45, 0xfd, 0x6c, 0x87, 0x70, 0xbc, 0xb4, 0x67, 0xe7, 0x49, 0x70, 0x49, 0x44, 0x6b, 0x9f, 0x3c, 0x27, 0xd0, 0x84, 0x8c, 0x7b, 0x48, 0x05, 0x96, 0xfb, 0x31, 0x51, 0xda, 0xf4, 0x32, 0xc5, 0x52, 0x4c, 0x2d, 0x11, 0x03, 0xc3, 0x6e, 0x96, 0xd1, 0x79, 0x29, 0x13, 0x97, 0xb1, 0x23, 0x81, 0x77, 0xd4, 0xaf, 0x3b, 0x6f, 0xb9, 0xdc, 0x62, 0x2d, 0x23, 0xed, 0x80, 0x25, 0x8b, 0x09, 0x6b, 0xe0, 0x20, 0x34, 0x6d, 0x97, 0x0d, 0x7e, 0xa1, 0x00, 0xfa, 0x7a, 0xa0, 0x68, 0xd5, 0xf2, 0x5d, 0x02, 0xd2, 0xd9, 0x4e, 0x7f, 0xb0, 0x81, 0xcd, 0xde, 0x3f, 0x0f, 0xbd, 0x86, 0x1f, 0x2b, 0x70, 0x92, 0xca, 0xfc, 0xc8, 0x6c, 0xd4, 0x53, 0x9d, 0x9d, 0x72, 0x26, 0x5f, 0xe3, 0x3a, 0x41, 0xfd, 0x84, 0x29, 0x38, 0x05, 0xe3, 0xea, 0xa0, 0x0c, 0x51, 0x55, 0x7e, 0x50, 0x25, 0x37, 0x00, 0x9c, 0x0f, 0x51, 0x6b, 0x6c, 0xa9, 0xa3, 0x55, 0x52, 0x4f, 0xea, 0x14, 0x98, 0x31, 0x67, 0x76, 0x27, 0xa6, 0xe2, 0xb3, 0xa7, 0xc4, 0xef, 0x9f, 0xe8, 0x2d, 0x70, 0x24, 0x81, 0x2b, 0x5b, 0xf0, 0xb7, 0x00, 0xbd, 0x6b, 0xa0, 0x77, 0xff, 0xec, 0x88, 0xbf, 0x68, 0x2c, 0x93, 0x79, 0xe4, 0xfb, 0xa4, 0x10, 0x04, 0x31, 0x7e, 0x49, 0x45, 0xe8, 0x29, 0x1b, 0x95, 0xe8, 0x98, 0xc0, 0x13, 0x63, 0x88, 0x0c, 0x17, 0xe3, 0xab, 0xfe, 0x72, 0x80, 0x06, 0x95, 0xf7, 0x56, 0x97, 0xe4, 0x3a, 0x36, 0x3c, 0x69, 0x97, 0x9c, 0xd0, 0x9b, 0x76, 0xe1, 0x97, 0xc2, 0xce, 0xb2, 0xdc, 0x0b, 0xe8, 0xc1, 0xd8, 0xdc, 0x66, 0xba, 0xd6, 0x65, 0x83, 0x79, 0x95, 0x78, 0x9c, 0x7a, 0xee, 0x9a, 0xf0, 0x91, 0xb6, 0x5a, 0xa4, 0xdb, 0xe6, 0xe1, 0x0a, 0xf4, 0xf9, 0xcb, 0x22, 0x6a, 0x96, 0x35, 0x61, 0x72, 0x6f, 0x17, 0xb2, 0xda, 0x69, 0xd5, 0xbb, 0x3f, 0xfd, 0x10, 0x61, 0x80, 0xde, 0xc2, 0x8e, 0x72, 0xdc, 0x8a, 0x31, 0xd6, 0x08, 0x44, 0x87, 0x88, 0x19, 0xdd, 0x9a, 0xf9, 0x0e, 0x65, 0x07, 0xde, 0x15, 0x66, 0x03, 0x2a, 0xac, 0x75, 0xa0, 0x3a, 0x06, 0x06, 0x4d, 0x50, 0xb0, 0x85, 0x9c, 0x43, 0x74, 0xa2, 0x49, 0x75, 0x7e, 0xec, 0x77, 0x04, 0xbd, 0xa1, 0x3c, 0x45, 0x8c, 0xc4, 0x60, 0x6e, 0x92, 0x71, 0x62, 0x92, 0xe6, 0x6e, 0xbc, 0xd3, 0x77, 0x02, 0x68, 0xd3, 0xac, 0x0a, 0xa3, 0x6b, 0x47, 0x49, 0xf1, 0xa0, 0x8f, 0x00, 0x61, 0xd2, 0xae, 0xbe, 0x12, 0x37, 0x58, 0x7a, 0xf6, 0x88, 0xad, 0xdf, 0xd6, 0xfa, 0x61, 0xe7, 0x97, 0x70, 0x1a, 0xab, 0xbb, 0xef, 0x19, 0x7a, 0x2b, 0x52, 0x1d, 0x28, 0x33, 0x3f, 0x84, 0xa8, 0xce, 0x59, 0xb4, 0xdd, 0x24, 0xb7, 0xb9, 0xae, 0x51, 0x96, 0x2f, 0x59, 0x68, 0x4a, 0x63, 0x09, 0xb7, 0x7b, 0xb5, 0xaa, 0x4d, 0x8d, 0x41, 0xfc, 0xba, 0x60, 0xbe, 0xe6, 0x16, 0x3a, 0xa5, 0x0e, 0x45, 0x01, 0x96, 0xa6, 0x78, 0xae, 0xf9, 0x89, 0xf7, 0xfe, 0xe1, 0x86, 0x1f, 0x6a, 0x35, 0xfb, 0xa6, 0x5a, 0x11, 0xa6, 0x27, 0x96, 0x6a, 0xb9, 0xda, 0xfd, 0xf1, 0x2c, 0xa2, 0x79, 0x3a, 0x57, 0x4e, 0x32, 0x1e, 0xc0, 0x18, 0x02, 0x5e, 0x32, 0x72, 0x2a, 0x88, 0x0f, 0x03, 0x43, 0x1f, 0xe6, 0xec, 0x77, 0xf6, 0x48, 0x4f, 0xf0, 0xdd, 0xd8, 0x12, 0x91, 0x7f, 0xa2, 0xe0, 0xe4, 0x8b, 0xae, 0x71, 0x54, 0x12, 0xd4, 0x0c, 0x9d, 0x31, 0xd1, 0x4a, 0x80, 0xef, 0x9b, 0x1c, 0xbb, 0x68, 0xf2, 0x0f, 0x38, 0x2c, 0x38, 0xcf, 0x85, 0xe2, 0x82, 0xea, 0x84, 0x31, 0xef, 0xd7, 0x64, 0xe0, 0x39, 0x37, 0xcf, 0x3b, 0x89, 0x5a, 0x65, 0xb9, 0x90, 0x05, 0x6a, 0xdd, 0xd3, 0x73, 0xbb, 0x5a, 0x46, 0x99, 0x07, 0x7a, 0x1d, 0xaf, 0x3b, 0xc0, 0xdf, 0xeb, 0x3e, 0xcd, 0xbc, 0x90, 0xdf, 0x80, 0x20, 0x27, 0x0c, 0x61, 0x88, 0x0c, 0x44, 0x40, 0x95, 0x2d, 0x4e, 0x19, 0x5e, 0x0f, 0x2c, 0x3b, 0x0b, 0x12, 0x4b, 0xa9, 0xa0, 0xf5, 0xfc, 0xc1, 0x16, 0x9c, 0x28, 0x1b, 0xb0, 0x11, 0x3e, 0xb4, 0x8c, 0xca, 0x71, 0x4c, 0x79, 0x2a, 0x21, 0x0c, 0x08, 0x49, 0x96, 0x6c, 0xe6, 0xf8, 0xf4, 0x54, 0x68, 0x00, 0x6b, 0x81, 0x68, 0xab, 0xaf, 0x2b, 0x50, 0x86, 0xa8, 0xe5, 0x74, 0x64, 0x6a, 0xc4, 0xa5, 0xa6, 0x67, 0xc3, 0x02, 0xba, 0xe3, 0x66, 0x12, 0xe2, 0xa9, 0x9e, 0x10, 0x37, 0xfd, 0xed, 0x86, 0xed, 0xd1, 0xca, 0x1e, 0xd8, 0x3c, 0x47, 0xb4, 0x2f, 0x27, 0xf1, 0xaf, 0x91, 0x4a, 0xf8, 0x92, 0x45, 0x57, 0x90, 0xce, 0xc6, 0x74, 0x96, 0xdb, 0x7f, 0xef, 0x77, 0x86, 0xd3, 0x2d, 0x4e, 0x8d, 0x60, 0xe4, 0x4c, 0x69, 0x85, 0x8a, 0x5d, 0x6b, 0x21, 0x0e, 0x08, 0x0a, 0x9e, 0xc5, 0x97, 0x7c, 0x2f, 0xa7, 0x79, 0x83, 0x55, 0xbb, 0xe4, 0x8a, 0xa8, 0xd0, 0xbf, 0xf0, 0xd4, 0x6e, 0xbe, 0xa4, 0xe2, 0x0c, 0xcf, 0xf2, 0xb9, 0x83, 0xb5, 0x9c, 0xe4, 0xc3, 0xf2, 0x2d, 0x95, 0xc5, 0xeb, 0x8a, 0xea, 0xc1, 0x47, 0xca, 0x70, 0xa0, 0x98, 0x47, 0xe6, 0xb4, 0x3d, 0xf5, 0x43, 0xa7, 0x87, 0xf3, 0xfa, 0xb1, 0x1a, 0x60, 0x7c, 0x0e, 0x96, 0x70, 0xfe, 0xb0, 0x77, 0xbf, 0x7d, 0x31, 0x3a, 0xe5, 0x00, 0x0b, 0xc2, 0x4a, 0x1e, 0x0b, 0xf9, 0x3c, 0xbf, 0x03, 0xba, 0x3e, 0x27, 0xc0, 0xef, 0xa3, 0x30, 0x3b, 0xf6, 0x5c, 0xd6, 0x13, 0x4a, 0x0f, 0xf9, 0x3b, 0x5f, 0x69, 0x5f, 0xf0, 0xcd, 0xb4, 0xf9, 0xef, 0xb1, 0xac, 0x67, 0xe4, 0x50, 0x8e, 0xbd, 0x25, 0xfe, 0x73, 0x88, 0xa0, 0x3f, 0xdc, 0x0c, 0x13, 0x2b, 0x8e, 0xd0, 0x7b, 0x17, 0xa0, 0x5d, 0xce, 0x71, 0xd2, 0x42, 0xec, 0xec, 0x20, 0x5b, 0xd3, 0xdd, 0x97, 0x53, 0x13, 0xe5, 0x68, 0x68, 0x83, 0xd1, 0x3b, 0x6e, 0x31, 0xbe, 0xc5, 0x17, 0x9f, 0x81, 0x9d, 0x71, 0x2c, 0x46, 0x4b, 0xb0, 0xd0, 0x76, 0xa2, 0x2e, 0x0c, 0xdf, 0x51, 0xb0, 0x21, 0x0f, 0xb4, 0xeb, 0x81, 0x00, 0xf0, 0x47, 0x83, 0xfb, 0x3e, 0xe2, 0x5a, 0xb6, 0x87, 0xd8, 0x48, 0xc0, 0x32, 0xc2, 0x0f, 0x1e, 0x3a, 0x7c, 0xa9, 0x37, 0x83, 0x2c, 0x38, 0xed, 0x6e, 0x7f, 0x40, 0x0d, 0xab, 0x36, 0x14, 0xe9, 0x4e, 0xe2, 0x8e, 0x43, 0x25, 0xeb, 0x03, 0x6d, 0x49, 0xd7, 0x76, 0xaf, 0xf4, 0xc9, 0x0c, 0xe9, 0x92, 0x48, 0xc0, 0x79, 0x1b, 0x42, 0x58, 0x5f, 0x9f, 0x51, 0x98, 0x9f, 0x23, 0x3c, 0xb5, 0xe7, 0xab, 0xc1, 0x0d, 0x72, 0x98, 0x92, 0x14, 0x2c, 0x34, 0x9d, 0x92, 0x17, 0x8c, 0x90, 0x0c, 0xed, 0x7e, 0x9d, 0x7f, 0x07, 0x12, 0x7b, 0x55, 0x7d, 0x0e, 0xad, 0x91, 0x8f, 0xc4, 0x06, 0x4d, 0x44, 0x2f, 0x6d, 0x66, 0x50, 0x3e, 0xde, 0x76, 0x3b, 0x70, 0xb1, 0x02, 0xc0, 0xa1, 0x1f, 0xf5, 0x74, 0x24, 0x02, 0x4d, 0xa8, 0x11, 0xdc, 0x15, 0x8f, 0xe0, 0x1b, 0x93, 0xa4, 0x37, 0x9b, 0xc2, 0x46, 0x01, 0x6d, 0x03, 0xa5, 0xc0, 0xd7, 0x0f, 0xe2, 0x24, 0x9b, 0x30, 0x72, 0xdc, 0x7c, 0xb1, 0xc4, 0xac, 0xff, 0x92, 0x23, 0xc0, 0x6f, 0x81, 0xdd, 0x40, 0x23, 0x06, 0xa5, 0x24, 0x04, 0xfe, 0x36, 0x4a, 0x49, 0x4a, 0x39, 0xc5, 0x85, 0xc8, 0x69, 0x79, 0xe4, 0x82, 0xf5, 0xe5, 0xb1, 0x26, 0x25, 0x3f, 0x1c, 0xb7, 0x41, 0xc6, 0x3b, 0x81, 0xaf, 0x54, 0x4e, 0x52, 0x5b, 0x32, 0x47, 0xe7, 0x5c, 0x31, 0x8a, 0xa5, 0xd4, 0xf6, 0xf1, 0x8a, 0x17, 0x96, 0x13, 0x62, 0x10, 0x63, 0xc6, 0x3e, 0xe1, 0x05, 0xe2, 0x22, 0xca, 0xcc, 0x48, 0xfe, 0x4c, 0x44, 0x23, 0xdf, 0x8e, 0x0a, 0x6e, 0x67, 0xff, 0xdf, 0xb7, 0x7b, 0x3d, 0xfb, 0x22, 0x3b, 0x36, 0xa3, 0xb0, 0x37, 0x8d, 0xfe, 0xc1, 0xdf, 0x3f, 0x25, 0xd8, 0x3c, 0x86, 0x79, 0x9f, 0xde, 0xfd, 0x39, 0x2b, 0x16, 0x05, 0x54, 0x80, 0x65, 0x68, 0x7b, 0x58, 0x33, 0x3d, 0x7b, 0x20, 0xc4, 0x0c, 0xca, 0x44, 0x69, 0x32, 0x5f, 0xac, 0xf3, 0x86, 0xc7, 0x87, 0x6d, 0x3c, 0x76, 0x47, 0x0b, 0x0a, 0x5b, 0xec, 0x5d, 0x8a, 0xb7, 0x86, 0xc8, 0xe0, 0x2e, 0xf5, 0x37, 0x9c, 0x1f, 0xf4, 0x0e, 0xe2, 0x31, 0x56, 0x60, 0xc8, 0x2e, 0x8e, 0x61, 0xff, 0x15, 0x75, 0x1e, 0xb6, 0x6a, 0x48, 0x6b, 0xbb, 0xd1, 0xf0, 0x1d, 0xe3, 0xdb, 0x87, 0x7a, 0xad, 0x20, 0x17, 0xee, 0x22, 0x8e, 0xa5, 0x00, 0xff, 0x00, 0x6e, 0x83, 0x16, 0x12, 0x70, 0x11, 0xf2, 0x34, 0x2c, 0xb5, 0xba, 0xfe, 0xab, 0xe8, 0x57, 0xc4, 0xbf, 0xbf, 0xd9, 0x69, 0x8b, 0x62, 0x17, 0x78, 0x45, 0xc0, 0x96, 0x70, 0x3b, 0x81, 0xad, 0x60, 0x14, 0x3c, 0xe6, 0xb4, 0x59, 0xeb, 0xa6, 0x4f, 0x34, 0x9c, 0x11, 0xda, 0x77, 0x69, 0x28, 0x5b, 0xdf, 0xa9, 0x34, 0x09, 0x9b, 0x68, 0x68, 0x5f, 0x08, 0x15, 0xc2, 0x6f, 0xbf, 0x7b, 0x32, 0x79, 0xd1, 0xf3, 0xfe, 0xbc, 0x51, 0xd7, 0x65, 0x8c, 0x13, 0x39, 0x83, 0xa5, 0xb4, 0xd5, 0x74, 0xbf, 0xda, 0x45, 0xbc, 0x62, 0xbd, 0x74, 0xe6, 0xfc, 0xe7, 0x55, 0x6c, 0x31, 0x38, 0xd5, 0xd7, 0x72, 0x2c, 0x0e, 0x27, 0xd1, 0x61, 0xbd, 0x75, 0x13, 0x53, 0xf6, 0xd7, 0x07, 0x6a, 0x16, 0x84, 0x17, 0x38, 0xfa, 0x39, 0x1d, 0xfb, 0x6e, 0xdb, 0x78, 0x6a, 0xe8, 0x5d, 0x5e, 0xae, 0x77, 0xe4, 0x73, 0xae, 0xf6, 0x29, 0x9b, 0x8f, 0x85, 0x1f, 0x0d, 0x7b, 0x3a, 0xd7, 0xaa, 0xa2, 0x13, 0xa0, 0x8c, 0x7f, 0x2f, 0x72, 0xe1, 0x5d, 0x3e, 0x8d, 0xfa, 0x19, 0x37, 0x5d, 0x9f, 0x29, 0x49, 0xa1, 0xa6, 0xdd, 0x13, 0xcc, 0xc4, 0xe5, 0x17, 0xab, 0xa2, 0x14, 0x6c, 0x49, 0x33, 0x64, 0xb4, 0x10, 0x46, 0x39, 0x4e, 0x30, 0x57, 0xea, 0xcd, 0x45, 0xab, 0x7d, 0xa8, 0x34, 0x9c, 0xb2, 0x32, 0x55, 0x31, 0x44, 0xcd, 0xd8, 0xf1, 0x6b, 0x5b, 0x61, 0xf9, 0xa5, 0xf6, 0xf6, 0x4d, 0xb6, 0xe1, 0x1b, 0x6c, 0xed, 0xbe, 0x3b, 0x27, 0xaa, 0x01, 0x4a, 0xb2, 0x1d, 0xa4, 0xa9, 0xfc, 0x50, 0x1d, 0x4a, 0x3c, 0x68, 0x8d, 0x14, 0xcc, 0x28, 0x3a, 0x89, 0x3b, 0xb6, 0x3f, 0xa6, 0x9e, 0xa2, 0x82, 0x0a, 0x26, 0x24, 0xe7, 0x5b, 0xf8, 0xa5, 0xc3, 0xe6, 0x38, 0x81, 0x94, 0x85, 0x67, 0x0c, 0xef, 0xc6, 0xf0, 0xd3, 0xb9, 0x49, 0xfd, 0x24, 0x9a, 0x6a, 0x8f, 0xd0, 0xaf, 0x20, 0xce, 0x2f, 0x7f, 0x25, 0x9e, 0x65, 0x31, 0x58, 0x72, 0xe4, 0xfc, 0x5f, 0x65, 0x32, 0xde, 0x90, 0x87, 0xed, 0x91, 0x12, 0x74, 0x0c, 0xbb, 0x3f, 0x2c, 0x67, 0x65, 0x4d, 0x1e, 0x7a, 0xae, 0x2e, 0x86, 0x65, 0xc0, 0xb4, 0xf9, 0x38, 0x04, 0xf9, 0x3e, 0x6e, 0x92, 0xfe, 0x60, 0xb7, 0xec, 0x92, 0x01, 0xfb, 0xeb, 0x76, 0xf1, 0x9b, 0xf9, 0xbe, 0x00, 0xfa, 0x81, 0x7a, 0x10, 0x3c, 0xa4, 0x96, 0x6e, 0x4d, 0x2e, 0xff, 0x62, 0x25, 0xc8, 0x07, 0x04, 0x4b, 0x6f, 0x0b, 0x52, 0x98, 0x24, 0x53, 0x80, 0x3e, 0xe5, 0x39, 0x8f, 0x09, 0xdd, 0x8e, 0x21, 0xe4, 0xd8, 0x39, 0x8c, 0x9e, 0xf9, 0x21, 0x2d, 0xee, 0xaf, 0x4e, 0xff, 0xb5, 0xe5, 0x4b, 0x6b, 0x84, 0x79, 0xce, 0x62, 0x5e, 0xf0, 0x9a, 0xaa, 0xbf, 0x68, 0xa5, 0x75, 0xdc, 0xcd, 0x76, 0x38, 0x2d, 0x50, 0xd2, 0xba, 0x29, 0x15, 0x97, 0x6c, 0x51, 0x2c, 0xe8, 0xf8, 0x6f, 0xc3, 0x8a, 0x1c, 0x20, 0x9a, 0x8e, 0xb9, 0x90, 0xb7, 0x31, 0x27, 0x85, 0x5a, 0x00, 0xcc, 0x9f, 0x33, 0x40, 0xed, 0xde, 0xd3, 0x8c, 0xc3, 0x64, 0x61, 0xc0, 0xd2, 0x7c, 0x8e, 0x16, 0x76, 0xdc, 0xca, 0x8f, 0xbf, 0x27, 0xb9, 0x95, 0x7e, 0xb6, 0xe0, 0xde, 0xa0, 0x98, 0xa5, 0x93, 0xbb, 0xd7, 0x76, 0xb2, 0xe7, 0xfd, 0x48, 0xb1, 0xcf, 0xd7, 0x43, 0x64, 0x08, 0x79, 0xbb, 0x20, 0xa1, 0x82, 0x63, 0x21, 0xfb, 0xa2, 0xbd, 0x29, 0xda, 0x59, 0xd5, 0x6a, 0xbd, 0x01, 0x2f, 0xa6, 0x6b, 0x0e, 0xfe, 0x95, 0xcf, 0x95, 0x96, 0x87, 0x05, 0x0b, 0x24, 0x4a, 0xb5, 0x50, 0x9d, 0x4e, 0xa0, 0xeb, 0xf4, 0x07, 0x78, 0x98, 0x90, 0x93, 0xf5, 0x00, 0xfd, 0x9d, 0x25, 0xc7, 0xe2, 0x81, 0x04, 0xcb, 0x33, 0xb0, 0x4c, 0xab, 0xa7, 0x57, 0x8e, 0x87, 0x6d, 0x3b, 0x82, 0x07, 0x1b, 0xe7, 0x9c, 0x9f, 0xe7, 0x0a, 0xdf, 0x11, 0x19, 0x1b, 0xf6, 0x33, 0xc0, 0x3e, 0x81, 0xf2, 0xa4, 0x6b, 0xad, 0x97, 0x7d, 0xcd, 0x07, 0x49, 0x62, 0x68, 0x92, 0xd3, 0x84, 0xff, 0x16, 0xa8, 0x1c, 0x35, 0xbc, 0x24, 0xa2, 0xf2, 0xd8, 0x15, 0x40, 0x08, 0x06, 0x7a, 0x86, 0x17, 0x78, 0x8b, 0x5f, 0xae, 0x8e, 0xf9, 0x44, 0xb2, 0xa7, 0x76, 0xaf, 0x04, 0x38, 0x78, 0xd3, 0x5e, 0x1b, 0x3a, 0x8a, 0x7e, 0x29, 0x04, 0x8f, 0x87, 0x0a, 0xad, 0xed, 0xa4, 0x4c, 0x5e, 0xb7, 0xee, 0xb3, 0x98, 0xfa, 0x90, 0xd0, 0x79, 0xf0, 0x28, 0xd5, 0x3b, 0x76, 0x71, 0xa8, 0xfd, 0xc0, 0x20, 0x36, 0xc6, 0x4c, 0x0b, 0x0a, 0xc7, 0x14, 0x90, 0x1e, 0xe0, 0x08, 0x35, 0xf1, 0x66, 0xbb, 0x8c, 0xd9, 0x24, 0x5d, 0x5a, 0x9b, 0x9f, 0xe9, 0xf7, 0x39, 0x9f, 0x9f, 0xf8, 0x0b, 0xea, 0xb5, 0x0c, 0x11, 0x53, 0x4a, 0x24, 0x88, 0xf3, 0x9b, 0xd7, 0xbb, 0xb7, 0x79, 0x04, 0x1c, 0x1b, 0xfb, 0xb9, 0x93, 0x34, 0x70, 0x53, 0x16, 0xf4, 0x97, 0xe7, 0x7a, 0xaa, 0x13, 0xe1, 0x89, 0xc8, 0x19, 0xeb, 0x54, 0xe9, 0x6c, 0x11, 0xcb, 0x12, 0x8b, 0x22, 0x8a, 0x38, 0x28, 0x59, 0xf6, 0x03, 0xdd, 0x3c, 0x89, 0xd2, 0x1b, 0xc5, 0x6a, 0xff, 0x63, 0xc0, 0x41, 0x64, 0xb8, 0x74, 0x49, 0x1e, 0x54, 0x85, 0xa7, 0x90, 0x9a, 0x19, 0xfa, 0xab, 0x4c, 0x3a, 0x33, 0x6d, 0xfe, 0x7c, 0xa7, 0xa8, 0xca, 0xdf, 0x62, 0x05, 0x46, 0xf6, 0xbe, 0x48, 0xb3, 0x49, 0x35, 0xd6, 0x77, 0xf9, 0x74, 0x74, 0xce, 0xa2, 0xb0, 0x51, 0xbc, 0x85, 0x3d, 0x47, 0x46, 0xe7, 0x5d, 0x5e, 0xe1, 0xb4, 0x56, 0x92, 0x2b, 0x68, 0xc7, 0xd6, 0xd9, 0x2f, 0x3b, 0x58, 0xf0, 0x4b, 0xff, 0x07, 0x39, 0xb7, 0x31, 0x53, 0xee, 0x0a, 0x1a, 0x33, 0xba, 0x9d, 0xbe, 0x6d, 0xe1, 0xf0, 0xb0, 0x12, 0xba, 0x4a, 0x2b, 0x47, 0x66, 0xa0, 0x5f, 0x4b, 0xbc, 0xb8, 0x09, 0xb6, 0x83, 0x8f, 0x46, 0xff, 0xe4, 0xf7, 0xa9, 0x41, 0x1e, 0x84, 0x8b, 0x3f, 0x7c, 0xa9, 0xa2, 0xa5, 0x85, 0x1f, 0xd6, 0x91, 0x72, 0x86, 0x4f, 0x51, 0xe5, 0x4f, 0xd3, 0x6f, 0xd7, 0xd9, 0x4f, 0xea, 0xd2, 0xda, 0xb3, 0xc7, 0x61, 0x01, 0x03, 0xc8, 0xc6, 0xda, 0xab, 0x7c, 0xea, 0xf1, 0x14, 0x78, 0x9a, 0x3a, 0x74, 0xe3, 0xef, 0xb0, 0xea, 0x38, 0x0e, 0x3d, 0xca, 0x47, 0x12, 0xda, 0x36, 0x7d, 0x47, 0xf7, 0xee, 0x66, 0x99, 0x1d, 0x68, 0x70, 0x4c, 0xd2, 0x24, 0xf2, 0xed, 0xbd, 0x3a, 0x6c, 0x88, 0x0a, 0x35, 0x11, 0x1b, 0x10, 0x23, 0x82, 0x4b, 0x31, 0xed, 0xdd, 0x56, 0x02, 0xe5, 0xf6, 0x49, 0xac, 0x9e, 0xe4, 0x73, 0x93, 0x00, 0xc0, 0x19, 0x35, 0x9b, 0xa9, 0x6b, 0x54, 0x3c, 0x0b, 0xb7, 0x57, 0xbe, 0x21, 0xdd, 0xee, 0x23, 0xb9, 0x03, 0xf5, 0xe4, 0x38, 0x89, 0x9b, 0x84, 0xdd, 0x3f, 0xc3, 0x6b, 0x4a, 0xd6, 0xaa, 0xf2, 0x40, 0x95, 0xca, 0xbb, 0xaa, 0x4d, 0xff, 0x43, 0xdd, 0x8f, 0xe9, 0xba, 0x1e, 0x1c, 0x91, 0x12, 0x64, 0x9d, 0x4f, 0x56, 0x60, 0x95, 0xeb, 0x3d, 0xbb, 0x93, 0x02, 0xff, 0x9f, 0xac, 0xab, 0x67, 0x78, 0x28, 0x5b, 0x29, 0xfc, 0x7c, 0x06, 0x77, 0x69, 0x79, 0x87, 0xcf, 0x0d, 0xc2, 0x42, 0x17, 0x0c, 0x83, 0x08, 0xeb, 0x5e, 0x60, 0x3b, 0x36, 0x17, 0xac, 0x32, 0xff, 0xeb, 0xdc, 0xde, 0x86, 0xf1, 0x3b, 0xae, 0x90, 0xa7, 0xdf, 0xb1, 0xff, 0x37, 0xdb, 0xfb, 0xa5, 0xf8, 0xb6, 0x49, 0x5a, 0x38, 0x1c, 0xe8, 0x4c, 0x39, 0xd4, 0xd2, 0x97, 0x79, 0xf2, 0x1b, 0x16, 0x36, 0x4e, 0x8b, 0x78, 0x32, 0x34, 0x8d, 0x96, 0xb4, 0x5d, 0x47, 0x03, 0xcf, 0x1e, 0x0b, 0xe5, 0xe6, 0xe0, 0xee, 0x04, 0x70, 0xd0, 0xb6, 0x21, 0xf9, 0xd8, 0xfa, 0x89, 0x69, 0xcd, 0x84, 0xea, 0x89, 0xea, 0xfa, 0x64, 0xc3, 0x7d, 0xbe, 0xe3, 0x2a, 0xe0, 0x12, 0xad, 0xba, 0xab, 0x80, 0x37, 0xe0, 0x28, 0x79, 0x3d, 0x3d, 0x07, 0x3c, 0x11, 0xa7, 0x53, 0xf9, 0x34, 0x70, 0xa5, 0x36, 0x23, 0xeb, 0x98, 0x73, 0x73, 0x2d, 0x7c, 0x09, 0x20, 0x11, 0x4f, 0x58, 0x23, 0x7f, 0xe9, 0x21, 0x42, 0xed, 0x76, 0x31, 0x2c, 0x25, 0x29, 0x40, 0xc5, 0x49, 0x2f, 0x18, 0xbf, 0x15, 0xe2, 0xfa, 0x6a, 0x65, 0x40, 0x3d, 0xcd, 0xf7, 0x9b, 0x38, 0xf5, 0x71, 0x91, 0x62, 0x8d, 0xa6, 0x3f, 0xb8, 0xaf, 0x15, 0xb2, 0x5f, 0xfa, 0xb2, 0x9e, 0x8b, 0xe5, 0xea, 0x53, 0x9f, 0x52, 0xe1, 0xec, 0x96, 0x67, 0xfe, 0xca, 0xa1, 0x99, 0xa9, 0x41, 0x11, 0x09, 0x53, 0x90, 0x78, 0x14, 0xb7, 0x17, 0x0b, 0x25, 0x60, 0xc4, 0x4b, 0xce, 0x6c, 0xcf, 0xe5, 0x18, 0x8f, 0xa7, 0xd6, 0x17, 0x5b, 0x2c, 0xd2, 0xc1, 0xbe, 0x1e, 0xe7, 0x00, 0xcc, 0xd5, 0x5e, 0x05, 0xbe, 0x33, 0xe2, 0xe0, 0x3b, 0xd8, 0xe4, 0x4d, 0xd7, 0x94, 0x3d, 0xd1, 0xda, 0x22, 0x15, 0x06, 0x42, 0x13, 0x04, 0x33, 0x0b, 0x08, 0x78, 0x20, 0xad, 0x24, 0x57, 0x29, 0xe7, 0xc1, 0xe5, 0x90, 0xbb, 0x62, 0xe7, 0x18, 0xba, 0xe9, 0x09, 0xcf, 0x81, 0x0b, 0x7d, 0x2b, 0x84, 0x00, 0xe5, 0x58, 0x0a, 0x7f, 0x73, 0xd1, 0x79, 0xe9, 0x4e, 0x2e, 0xd4, 0xc5, 0x38, 0x3c, 0x82, 0x6c, 0x6f, 0x53, 0x51, 0x05, 0xd0, 0xe4, 0xba, 0xb4, 0x42, 0x52, 0x67, 0x0f, 0x52, 0x03, 0xf2, 0xd2, 0x1b, 0xb6, 0xf0, 0xd3, 0x69, 0x17, 0x2e, 0x38, 0x1e, 0x90, 0x3a, 0xe7, 0xd4, 0x63, 0x25, 0x3e, 0xc3, 0xf6, 0x88, 0x05, 0xe5, 0x6d, 0xc5, 0xa0, 0x59, 0x7e, 0x8f, 0x89, 0x06, 0x81, 0xad, 0xfe, 0x80, 0xc7, 0xfa, 0xf7, 0x2f, 0x2d, 0xb1, 0x5b, 0xae, 0xf1, 0xe7, 0x73, 0x71, 0xc4, 0x59, 0x9f, 0xab, 0x20, 0x68, 0x48, 0x6e, 0xdb, 0x62, 0x15, 0x14, 0xfd, 0x03, 0x62, 0xdf, 0xcf, 0x3c, 0xee, 0xdc, 0x34, 0x32, 0xd3, 0x0d, 0x3c, 0x8a, 0xbc, 0xc6, 0xf7, 0xe4, 0x52, 0x58, 0x87, 0xa5, 0xf7, 0xed, 0x79, 0xfa, 0xb7, 0xb3, 0x56, 0x1a, 0x7b, 0x3d, 0x74, 0xcb, 0x80, 0x26, 0x12, 0x27, 0x08, 0xf7, 0xa4, 0xa0, 0x50, 0x4a, 0x6c, 0x42, 0xc1, 0x30, 0x4a, 0x38, 0x6a, 0xd1, 0xd5, 0x92, 0xae, 0x52, 0xaa, 0x45, 0x3a, 0xfc, 0x05, 0x73, 0x3b, 0x9a, 0x8e, 0xed, 0xcd, 0x22, 0x75, 0xf7, 0xb6, 0x98, 0xc0, 0x4b, 0x54, 0x30, 0xe4, 0x60, 0xd4, 0xb3, 0x93, 0xeb, 0xa5, 0x23, 0xd6, 0xa7, 0x2c, 0xa2, 0x5b, 0x51, 0xba, 0x90, 0x10, 0xf7, 0xbb, 0xf4, 0xf1, 0x73, 0x30, 0x1d, 0x1d, 0x33, 0x5f, 0x89, 0x30, 0x3b, 0xc8, 0x05, 0xcd, 0x6c, 0x5c, 0x16, 0x7a, 0x06, 0xea, 0x98, 0xb1, 0x6c, 0xda, 0xa5, 0x33, 0x27, 0x1d, 0xb8, 0xa0, 0x2e, 0x64, 0x12, 0x45, 0x64, 0x90, 0x5d, 0x35, 0x63, 0x6a, 0x90, 0x9b, 0x78, 0x95, 0x12, 0x4e, 0xee, 0xc1, 0x22, 0xa6, 0x90, 0x20, 0x76, 0x8f, 0x69, 0x1e, 0x22, 0xdb, 0xce, 0x4d, 0xbc, 0xdd, 0x9f, 0x9e, 0xbe, 0x33, 0xc9, 0xd7, 0x2b, 0xe3, 0x0f, 0x41, 0x76, 0xaa, 0x0b, 0xa1, 0x9f, 0x90, 0x6f, 0x6a, 0x9f, 0xc0, 0x91, 0x31, 0x06, 0x97, 0x27, 0x61, 0xe3, 0xfb, 0x4e, 0x30, 0xe4, 0xee, 0xd2, 0xd2, 0xbe, 0x62, 0xa9, 0xec, 0xcf, 0x4f, 0xc0, 0x4b, 0x02, 0x04, 0xfb, 0xd6, 0xf4, 0xbb, 0x77, 0xc1, 0x55, 0x6f, 0x12, 0x04, 0x90, 0xf2, 0x2d, 0x0c, 0xae, 0x3a, 0xb0, 0xb0, 0x77, 0xfb, 0x4f, 0x66, 0xdb, 0x7c, 0x0c, 0xb7, 0x91, 0xa3, 0xfd, 0xf0, 0xfe, 0x51, 0x50, 0x1b, 0x58, 0xf6, 0x8c, 0x2d, 0x0b, 0x5c, 0x19, 0x81, 0x5c, 0xc7, 0x03, 0x85, 0x4c, 0x40, 0xfb, 0xb4, 0xbf, 0x2e, 0x9f, 0xc4, 0xdd, 0x26, 0xfb, 0x20, 0xb9, 0x04, 0x4f, 0x98, 0x30, 0x3b, 0x12, 0x57, 0x15, 0x69, 0x38, 0x16, 0x8b, 0x2f, 0xb1, 0x90, 0xb1, 0x3f, 0x32, 0x36, 0x85, 0xb6, 0x37, 0x23, 0x02, 0xad, 0x49, 0x52, 0x8c, 0x0a, 0x7c, 0x0f, 0x8e, 0x9c, 0x3d, 0xab, 0x62, 0x68, 0x4a, 0x74, 0x71, 0x3d, 0x02, 0xe4, 0x9b, 0x8f, 0xdf, 0x19, 0xd9, 0x82, 0x41, 0x85, 0x20, 0x44, 0x6d, 0xe7, 0x89, 0xa0, 0xd5, 0x7a, 0xb0, 0xd0, 0x9a, 0x6c, 0x59, 0x93, 0x4f, 0x91, 0x5a, 0x80, 0x00, 0x59, 0xb5, 0x9a, 0x72, 0x00, 0x04, 0x24, 0xad, 0x04, 0x1a, 0xb7, 0xb8, 0xdc, 0xe7, 0x91, 0xa4, 0xe7, 0x9c, 0x30, 0xcb, 0xa3, 0x10, 0x20, 0x5a, 0x1f, 0x62, 0x11, 0x0d, 0xb3, 0xe1, 0x2c, 0x3a, 0xee, 0x28, 0xa7, 0x11, 0xd0, 0x8d, 0x97, 0x22, 0x39, 0xbd, 0x06, 0x20, 0xa2, 0xa0, 0x46, 0xe4, 0x0b, 0x83, 0x84, 0xb4, 0x34, 0x75, 0xa0, 0xc6, 0x10, 0xf1, 0x3d, 0x00, 0x77, 0xbe, 0x14, 0x02, 0x1b, 0x14, 0x8d, 0x66, 0xbd, 0x00, 0x90, 0x46, 0xa1, 0x09, 0x98, 0xff, 0x3f, 0x14, 0x0a, 0x35, 0x3b, 0x85, 0xc6, 0x18, 0x97, 0xa7, 0xfb, 0xe5, 0x28, 0x4e, 0x3f, 0xaf, 0x46, 0xbb, 0xdf, 0x5f, 0xc8, 0xbf, 0x73, 0xfa, 0x30, 0x24, 0xb6, 0x22, 0x22, 0x48, 0x95, 0xe0, 0x1b, 0x0b, 0x86, 0xa0, 0x5f, 0xeb, 0x1b, 0x7d, 0x33, 0x6e, 0xd7, 0xbf, 0x4d, 0xc1, 0x40, 0xa2, 0x89, 0x9e, 0x35, 0x5a, 0xdd, 0x72, 0x82, 0x53, 0x8f, 0xc0, 0xb2, 0xbd, 0xa5, 0xc0, 0x25, 0x48, 0x9e, 0x4d, 0x62, 0x2c, 0x5f, 0xfe, 0xad, 0x6d, 0x70, 0x92, 0xdd, 0x5d, 0x68, 0x91, 0x68, 0x62, 0xa6, 0x30, 0xc0, 0xf9, 0x42, 0x75, 0xe2, 0xfb, 0x43, 0x9d, 0x2b, 0x20, 0x13, 0xbb, 0x6e, 0xc1, 0x30, 0xa1, 0x45, 0xe2, 0x23, 0x03, 0xa4, 0x6f, 0xb6, 0xda, 0xb4, 0xc6, 0x62, 0x07, 0xde, 0x76, 0x07, 0x39, 0x25, 0x46, 0xe0, 0x10, 0xba, 0x7a, 0xb5, 0x83, 0xca, 0x51, 0x52, 0x7f, 0x9b, 0xd2, 0x39, 0xd0, 0xd7, 0xc8, 0x94, 0x45, 0x28, 0x0c, 0x6d, 0x0f, 0x04, 0x02, 0x21, 0x6b, 0xcb, 0x66, 0x12, 0x81, 0x0f, 0x49, 0x9d, 0x8b, 0x32, 0x56, 0x4c, 0x39, 0x37, 0x5a, 0x4c, 0x54, 0xd2, 0x04, 0x21, 0xa3, 0xc1, 0xe9, 0x98, 0x0b, 0x5f, 0xca, 0xfd, 0xf9, 0x77, 0x1a, 0x8f, 0x05, 0x56, 0xbb, 0x31, 0xcf, 0x24, 0x09, 0x62, 0x2d, 0x74, 0x19, 0x6f, 0x89, 0x19, 0x42, 0xe7, 0x84, 0x3b, 0xdd, 0x50, 0xdf, 0xab, 0x4a, 0x18, 0x9c, 0x74, 0x34, 0xcf, 0x60, 0xb3, 0x15, 0x93, 0x1c, 0xa8, 0xfc, 0xcb, 0xec, 0x0c, 0x8e, 0x18, 0x40, 0xa5, 0x4a, 0x88, 0x39, 0x19, 0x12, 0x0d, 0x56, 0x00, 0xe7, 0x2e, 0x4f, 0x3c, 0xf5, 0xfd, 0x41, 0x8d, 0xcf, 0x49, 0x0c, 0x60, 0xfb, 0x14, 0xf9, 0xe8, 0xb1, 0x47, 0xa1, 0x70, 0xe0, 0xa5, 0x0a, 0xf0, 0x72, 0xfe, 0x12, 0xde, 0xd1, 0xa5, 0x11, 0x46, 0xaa, 0x24, 0xba, 0x1d, 0xf1, 0x2d, 0x42, 0xd3, 0x25, 0xd4, 0xc5, 0x27, 0xd5, 0xfc, 0xe5, 0x3f, 0x63, 0x0f, 0xb4, 0xf8, 0x08, 0xf3, 0xd4, 0x7b, 0x18, 0x39, 0xdc, 0x11, 0x87, 0x97, 0xfe, 0x38, 0xad, 0x98, 0xe7, 0xf6, 0x46, 0x92, 0xe7, 0x6d, 0xbd, 0xd9, 0x52, 0xb0, 0xaa, 0x32, 0x26, 0xd5, 0x99, 0x8a, 0xed, 0x4b, 0x0d, 0xe8, 0xe5, 0x6e, 0xc4, 0xa1, 0x5f, 0x59, 0x3d, 0xcb, 0x65, 0xfb, 0x78, 0xf3, 0x9f, 0x6e, 0xfd, 0x13, 0x78, 0x83, 0x1f, 0xbe, 0x7c, 0xa2, 0x82, 0x9e, 0x04, 0xd1, 0xdb, 0x20, 0x16, 0x12, 0xf7, 0x6e, 0x87, 0xf2, 0xff, 0x9e, 0x62, 0x5f, 0xfa, 0x28, 0x8e, 0xba, 0x93, 0x9e, 0xaa, 0x2d, 0x1c, 0x97, 0x3c, 0x3f, 0xd4, 0xed, 0x0b, 0xa5, 0x65, 0x28, 0xc9, 0x5b, 0xb1, 0x39, 0xf5, 0xf4, 0xce, 0x6c, 0x00, 0x2f, 0x4f, 0x98, 0xaf, 0xca, 0xc6, 0x98, 0xc0, 0x9b, 0x87, 0xff, 0xd0, 0xdc, 0xae, 0x08, 0x7c, 0xc7, 0x63, 0xcc, 0xc7, 0x63, 0x5c, 0xb8, 0xbb, 0x9d, 0xa4, 0x3d, 0x54, 0x9a, 0x9b, 0xc9, 0x99, 0x4c, 0x3f, 0xf7, 0x0c, 0x43, 0xa9, 0x03, 0x44, 0xc6, 0xda, 0x80, 0xd9, 0x23, 0xb8, 0x4d, 0x80, 0x43, 0x54, 0xc5, 0x77, 0x81, 0x6e, 0x36, 0x24, 0xbc, 0x3b, 0x94, 0xf9, 0xab, 0x66, 0x6f, 0x9a, 0x71, 0x54, 0x23, 0x42, 0x72, 0xac, 0x4f, 0x63, 0x64, 0x17, 0x88, 0x8c, 0xa9, 0x44, 0x4e, 0x90, 0xdc ],
- const [ 0xcb, 0x70, 0x90, 0xf7, 0xa4, 0x65, 0x78, 0x2f, 0x68, 0x0f, 0xd4, 0x4c, 0xbc, 0x55, 0x81, 0x07, 0x82, 0x5c, 0x9e, 0x53, 0xf2, 0x4e, 0x41, 0x40, 0xec, 0x5b, 0x68, 0x20, 0x8c, 0xfe, 0x33, 0xe8, 0x00, 0x82, 0x50, 0xd9, 0x96, 0xc4, 0xb6, 0x5f, 0x19, 0x3a, 0x96, 0x39, 0x5e, 0x34, 0x8e, 0xda, 0x1a, 0x62, 0x21, 0x0f, 0xf6, 0x97, 0x64, 0xe3, 0xe6, 0xcc, 0xf9, 0xc0, 0xb6, 0x68, 0x41, 0xd6, 0xe6, 0xbf, 0xce, 0xc0, 0xb7, 0xd8, 0x17, 0x65, 0x86, 0x73, 0x70, 0x1d, 0x59, 0x4a, 0x39, 0x16, 0xb8, 0x98, 0x55, 0xf5, 0xbe, 0xd8, 0xde, 0xc0, 0x6f, 0xcf, 0x16, 0xfb, 0x4c, 0xcc, 0xa1, 0x11, 0x25, 0x2f, 0xf2, 0xf6, 0x2f, 0x28, 0x04, 0x0b, 0x56, 0xc1, 0x4a, 0x42, 0xd4, 0x1f, 0xe8, 0x82, 0x03, 0x04, 0x23, 0x4d, 0x6f, 0x99, 0x16, 0xa0, 0x30, 0x6b, 0xa7, 0x1a, 0x77, 0xb3, 0xba, 0x61, 0x66, 0xda, 0xa5, 0xc2, 0x25, 0x3c, 0xe3, 0x17, 0x32, 0x2d, 0x0c, 0xee, 0xf8, 0x39, 0x04, 0xe7, 0xa4, 0xb0, 0x73, 0x5e, 0x34, 0x63, 0x76, 0x4a, 0xd0, 0xa8, 0x95, 0x65, 0x5e, 0xa4, 0xf4, 0x8e, 0x51, 0xc9, 0xcd, 0x6b, 0xc1, 0x9d, 0x1d, 0x52, 0xc1, 0xbd, 0x9e, 0x6a, 0xed, 0x22, 0xf6, 0x0d, 0x42, 0xa4, 0x2e, 0x71, 0x33, 0xbc, 0x65, 0x88, 0xf8, 0x8e, 0xc6, 0x24, 0x2a, 0x27, 0xb7, 0x5f, 0x8d, 0x03, 0x53, 0x3a, 0x2d, 0xd2, 0x1b, 0x84, 0xac, 0x7b, 0xe8, 0xfe, 0xda, 0x62, 0x25, 0xbc, 0x86, 0xe7, 0x3a, 0xce, 0x94, 0x2f, 0x4b, 0x20, 0x50, 0x26, 0x23, 0x9f, 0x02, 0xc4, 0x6b, 0x9d, 0xc3, 0x90, 0x20, 0x77, 0x8e, 0x63, 0x44, 0x75, 0x9a, 0x6f, 0xd3, 0xf1, 0xe7, 0x7f, 0xf8, 0xbc, 0x17, 0x80, 0x81, 0xbd, 0x80, 0x41, 0x91, 0xdb, 0x7f, 0x77, 0x94, 0x1e, 0x0f, 0x04, 0x78, 0x10, 0x9a, 0x79, 0x1b, 0x6a, 0x0f, 0xd9, 0xff, 0xec, 0x34, 0xa0, 0x45, 0x8d, 0x3e, 0x03, 0xd9, 0xd4, 0x9f, 0x7a, 0xea, 0x86, 0x1f, 0x7c, 0x9d, 0x81, 0x2e, 0x89, 0x02, 0xe8, 0x78, 0x6e, 0x47, 0x80, 0xbb, 0xc5, 0x2b, 0x5a, 0xd5, 0xbb, 0xb6, 0xb3, 0x22, 0x16, 0x27, 0x18, 0x04, 0x76, 0x2f, 0xce, 0xc3, 0xda, 0x5c, 0x70, 0x98, 0x67, 0xd8, 0xda, 0x04, 0x65, 0x53, 0x46, 0x66, 0x8b, 0x3e, 0xb5, 0xcd, 0x7c, 0x3a, 0x91, 0x0b, 0x91, 0xd0, 0x90, 0x0b, 0xd9, 0x62, 0xdb, 0x64, 0x5e, 0x61, 0x70, 0x2d, 0xaa, 0xc1, 0xc4, 0x14, 0x8a, 0xaa, 0xad, 0xaa, 0x12, 0x71, 0x80, 0x01, 0xe1, 0xc6, 0x76, 0x79, 0xa7, 0x2f, 0x55, 0xd7, 0xe4, 0xb5, 0x4c, 0x97, 0xf2, 0xdc, 0x1e, 0x84, 0x45, 0xd9, 0x83, 0x85, 0xf2, 0x00, 0xcb, 0xba, 0x6e, 0x7c, 0xc4, 0xc7, 0x98, 0x42, 0xde, 0x70, 0xfa, 0x48, 0x8d, 0x67, 0x4c, 0xf1, 0xef, 0x61, 0x3a, 0xcc, 0xaf, 0x6f, 0x68, 0x7f, 0x29, 0x8c, 0xb2, 0xfe, 0xce, 0x72, 0xb8, 0x01, 0xca, 0xb3, 0x9a, 0xb4, 0xe5, 0x04, 0x00, 0xb0, 0xa7, 0xdc, 0x5e, 0x2a, 0xc0, 0x3e, 0x76, 0x6a, 0xa7, 0xd2, 0x1e, 0x7f, 0x80, 0x3b, 0x43, 0x32, 0x43, 0xa5, 0x2e, 0x38, 0x1b, 0x9d, 0x06, 0xac, 0x0c, 0x26, 0x96, 0xbc, 0xd9, 0x09, 0x51, 0xa2, 0x25, 0x6c, 0x93, 0xd6, 0xd8, 0xa6, 0x2a, 0x81, 0xc4, 0x52, 0x15, 0x35, 0x89, 0xa2, 0x8b, 0xdc, 0xb5, 0xf7, 0x40, 0xef, 0x30, 0xae, 0xe3, 0xe9, 0xd8, 0x3c, 0xeb, 0xfa, 0x68, 0x7d, 0x93, 0xff, 0x9e, 0x49, 0x23, 0xb2, 0x9d, 0x49, 0x72, 0x1e, 0x90, 0x08, 0xa9, 0x57, 0x90, 0x4d, 0x49, 0x67, 0xc8, 0xa9, 0x70, 0x8b, 0xd6, 0x4c, 0x58, 0xa0, 0x75, 0x1c, 0x20, 0xd8, 0x59, 0x09, 0xcf, 0xb1, 0x5b, 0x9a, 0x96, 0x28, 0xd6, 0xcc, 0x55, 0x29, 0x51, 0x1d, 0x61, 0x4b, 0x5e, 0xe4, 0x85, 0xba, 0xc1, 0xe3, 0x46, 0x74, 0xd5, 0x1f, 0x6b, 0xb9, 0x2c, 0xf0, 0xbd, 0xbc, 0x76, 0x54, 0x0c, 0x9f, 0xa4, 0x88, 0x72, 0x9e, 0x4d, 0xda, 0xdc, 0x8b, 0x50, 0xb9, 0xc5, 0x7a, 0xbb, 0x0e, 0x45, 0xbd, 0xeb, 0xcf, 0x4b, 0x13, 0xf5, 0xd0, 0x26, 0x1c, 0x45, 0xdd, 0x4b, 0x10, 0x85, 0x07, 0x52, 0xb1, 0xc1, 0x3b, 0x41, 0x7e, 0xc8, 0x19, 0x0d, 0x2a, 0xd5, 0x02, 0x5e, 0x4c, 0x6e, 0x73, 0x93, 0x58, 0x8d, 0x92, 0x06, 0xce, 0xfe, 0x07, 0x91, 0xb1, 0x08, 0x0d, 0x51, 0x3b, 0x4f, 0xc9, 0xa9, 0xcf, 0xf9, 0xda, 0x8a, 0x2f, 0x10, 0x31, 0xf2, 0xef, 0x27, 0x23, 0xb3, 0x2a, 0x41, 0xbc, 0x76, 0x73, 0xee, 0x57, 0xff, 0x0e, 0xb7, 0x6b, 0xb3, 0x61, 0xbc, 0xa8, 0x57, 0xa5, 0x9c, 0x43, 0x1a, 0xe1, 0x95, 0x8e, 0xd6, 0x19, 0xed, 0xcb, 0x93, 0xc2, 0x90, 0x42, 0x4d, 0x7a, 0xfa, 0x91, 0xf7, 0xf6, 0x57, 0x44, 0xbf, 0x3c, 0xe9, 0xa5, 0x94, 0x12, 0xab, 0xd5, 0xe5, 0xb6, 0x34, 0x1c, 0xac, 0xcf, 0xdd, 0x7e, 0xac, 0xa4, 0x26, 0x8f, 0xf6, 0x8c, 0x56, 0x88, 0xb2, 0xa5, 0x62, 0x99, 0x1c, 0xc9, 0x10, 0x81, 0xcd, 0xbe, 0x5c, 0x5d, 0x3c, 0xad, 0x1b, 0xbd, 0x84, 0xd6, 0xde, 0xfd, 0x68, 0x81, 0x19, 0xd3, 0x94, 0x38, 0x85, 0x24, 0x25, 0x33, 0xc2, 0x1c, 0x6c, 0x14, 0x41, 0x7d, 0xef, 0xd5, 0x61, 0x37, 0xb1, 0xfe, 0xd8, 0x3a, 0xb4, 0x1b, 0x55, 0x88, 0xbb, 0x6d, 0x64, 0x8e, 0x54, 0xe0, 0x91, 0xb4, 0x16, 0x3d, 0xd0, 0x33, 0x28, 0xa1, 0x1c, 0x26, 0x03, 0x2e, 0x5f, 0xe5, 0x78, 0x00, 0x92, 0x8e, 0xf4, 0x62, 0x25, 0xe4, 0x03, 0x42, 0xa1, 0x5d, 0x13, 0xe3, 0x8c, 0x76, 0x7b, 0xd2, 0x8d, 0x4a, 0xbb, 0x1b, 0xd0, 0x63, 0x05, 0xbc, 0xac, 0xd0, 0xfd, 0x5a, 0x83, 0x77, 0xbe, 0x33, 0xea, 0xad, 0x1d, 0x54, 0x0a, 0x04, 0x31, 0x0c, 0x46, 0x64, 0x13, 0xa0, 0x1f, 0x5e, 0xe2, 0x40, 0x54, 0xbc, 0x0a, 0x3a, 0x4d, 0x5d, 0xc6, 0x6e, 0xb9, 0x40, 0xe4, 0x02, 0x77, 0xde, 0xc9, 0x57, 0xb2, 0xbd, 0xb4, 0x3b, 0x51, 0x42, 0x47, 0x60, 0x8e, 0xc7, 0x43, 0x0c, 0xe4, 0xed, 0x93, 0x13, 0x2f, 0x33, 0x8c, 0x03, 0x0f, 0xc8, 0x73, 0x9e, 0x8d, 0x9e, 0x3f, 0x8d, 0x01, 0xc0, 0xa1, 0x52, 0x33, 0xe5, 0x42, 0x7f, 0xc0, 0x45, 0x4c, 0x25, 0xbf, 0xab, 0x2b, 0x90, 0xa5, 0xcc, 0x95, 0x31, 0x66, 0xd7, 0xc7, 0xdc, 0xdd, 0x4d, 0x12, 0x34, 0x6e, 0x13, 0x97, 0x63, 0xea, 0xc6, 0x4f, 0x0e, 0xb2, 0x4e, 0x4e, 0x87, 0x20, 0xb6, 0x48, 0x45, 0x22, 0x3a, 0x54, 0x92, 0x28, 0xa2, 0xf0, 0x84, 0x41, 0xcf, 0x45, 0x2e, 0x80, 0x94, 0xad, 0x17, 0xa5, 0xc7, 0x73, 0xec, 0xf9, 0x97, 0xda, 0x71, 0x7a, 0x1f, 0x60, 0xbd, 0x38, 0x3c, 0x43, 0xa7, 0xff, 0x9c, 0x45, 0x7c, 0x36, 0x18, 0xac, 0xf3, 0x07, 0x44, 0x8e, 0x62, 0xc1, 0x44, 0x4b, 0x31, 0x7a, 0xe1, 0x5b, 0x8f, 0xf8, 0xdc, 0x4a, 0x65, 0xd2, 0x81, 0x00, 0x88, 0xd2, 0x80, 0x46, 0x33, 0x9e, 0xf9, 0x86, 0xb4, 0x97, 0xd6, 0xd2, 0x65, 0x02, 0x5d, 0x28, 0xde, 0x66, 0x05, 0xf5, 0x69, 0x34, 0x89, 0xd7, 0xb7, 0xad, 0x3c, 0xa7, 0xd1, 0x01, 0x9c, 0xb7, 0x50, 0xb4, 0x29, 0x58, 0xd1, 0x46, 0x78, 0xa0, 0xa4, 0x13, 0x83, 0x6a, 0xc4, 0x78, 0x43, 0x9d, 0x0c, 0x37, 0x81, 0xb2, 0xa7, 0x1d, 0xe9, 0x70, 0xc9, 0xe2, 0x60, 0xfa, 0x9c, 0x50, 0x97, 0x0c, 0x7e, 0xa7, 0xe0, 0x82, 0x69, 0x41, 0x41, 0x1a, 0xb2, 0x72, 0xc7, 0x7a, 0xf7, 0xb2, 0x1d, 0x75, 0x53, 0xfe, 0x5d, 0x8a, 0xd3, 0x7b, 0x26, 0xad, 0x2e, 0x5d, 0xef, 0x4b, 0xb0, 0x07, 0x9b, 0x88, 0x78, 0x73, 0x4d, 0xcb, 0xe3, 0xd5, 0x7d, 0x7c, 0x48, 0x7b, 0x4c, 0x0c, 0xe6, 0xf8, 0x14, 0x36, 0x1a, 0x81, 0x44, 0x85, 0xd6, 0x97, 0x6b, 0x17, 0x4e, 0xe7, 0x92, 0xa0, 0xf4, 0x6e, 0xcf, 0xb1, 0xa7, 0xe0, 0x17, 0x3b, 0x27, 0x4b, 0x54, 0x4f, 0xcd, 0xf7, 0xb7, 0x27, 0x79, 0x92, 0x50, 0x6a, 0xcb, 0x89, 0xdc, 0xac, 0x96, 0xb9, 0xde, 0x34, 0x91, 0x47, 0xf1, 0x03, 0x50, 0xcc, 0x5c, 0x12, 0x73, 0xb6, 0xe7, 0xda, 0x1e, 0xeb, 0xed, 0x19, 0xa9, 0xaf, 0xb3, 0xd4, 0x98, 0xc7, 0xf8, 0x98, 0xcd, 0xde, 0xcd, 0x06, 0xfc, 0x29, 0xa7, 0x8f, 0x60, 0x47, 0xb3, 0x7b, 0xac, 0x6b, 0x69, 0x30, 0x45, 0xbc, 0x64, 0xb1, 0xae, 0xfc, 0x71, 0x65, 0x43, 0x68, 0xe6, 0x1a, 0x2b, 0xe0, 0x35, 0x49, 0x88, 0x48, 0xc0, 0x9b, 0xf0, 0x2e, 0xef, 0xad, 0x21, 0xad, 0x80, 0x10, 0xf0, 0x91, 0x1f, 0x95, 0x83, 0xbb, 0x37, 0xc7, 0xc0, 0xc8, 0x07, 0xb8, 0x05, 0xed, 0xf8, 0x01, 0x1a, 0x25, 0x2e, 0x04, 0x64, 0x8f, 0x5d, 0x74, 0x5b, 0x11, 0xde, 0x18, 0x3e, 0x42, 0x02, 0xcb, 0x05, 0x87, 0xa6, 0xc8, 0x97, 0x7c, 0x07, 0x24, 0x3d, 0x95, 0xd8, 0x9c, 0x56, 0x05, 0x92, 0x91, 0x4d, 0xde, 0x0c, 0x51, 0xc9, 0x7a, 0x4b, 0x98, 0x23, 0x1b, 0x9b, 0x57, 0x1d, 0xce, 0xde, 0xb3, 0xd1, 0x95, 0x25, 0x51, 0xe7, 0xc4, 0x7d, 0xd1, 0x0b, 0xac, 0x0c, 0x98, 0x9e, 0x77, 0x5c, 0xd3, 0xac, 0x53, 0xf6, 0xb8, 0x1f, 0xd3, 0x33, 0x0f, 0x32, 0x91, 0x4f, 0xf2, 0x28, 0x19, 0xbf, 0xd1, 0x3d, 0x02, 0xc4, 0xb9, 0xdd, 0x5e, 0x41, 0xd5, 0x14, 0x55, 0xca, 0x35, 0x46, 0x0c, 0xfd, 0xce, 0x20, 0xcc, 0x15, 0xc2, 0xce, 0x60, 0xbc, 0xe2, 0x6e, 0xbe, 0x21, 0x71, 0xc5, 0xea, 0x4b, 0x2b, 0x31, 0x18, 0xad, 0x86, 0xdf, 0x11, 0xfa, 0x38, 0x3e, 0xd7, 0x3a, 0xf9, 0xb4, 0x8c, 0x1e, 0x8a, 0x8f, 0x90, 0x90, 0xf6, 0x3e, 0xea, 0x8f, 0x18, 0xc1, 0xe9, 0x3a, 0x5d, 0x5e, 0x0a, 0x2a, 0xcc, 0x96, 0x1d, 0x05, 0x43, 0x57, 0xa4, 0x50, 0x03, 0x73, 0x7c, 0x85, 0x6e, 0x51, 0xbf, 0x66, 0x10, 0xe3, 0xe8, 0x90, 0xdd, 0xd7, 0x38, 0x53, 0xb9, 0x12, 0x59, 0xc1, 0x3e, 0x5a, 0x42, 0x05, 0xb9, 0x52, 0x5a, 0xf7, 0x75, 0xac, 0xe0, 0xed, 0x3d, 0x9a, 0x8a, 0xd3, 0x1c, 0x85, 0x6c, 0x7e, 0x67, 0x02, 0x1c, 0x3d, 0xfd, 0x02, 0x14, 0xb1, 0xce, 0x48, 0x57, 0xdf, 0x9a, 0x21, 0x58, 0x84, 0xfb, 0x4f, 0x17, 0xa8, 0xa6, 0x46, 0x8d, 0x76, 0xee, 0x9b, 0x4a, 0x4b, 0x8a, 0xb9, 0x5d, 0x0d, 0x97, 0xd6, 0x74, 0xbe, 0xe1, 0x25, 0x44, 0x51, 0x5e, 0x4d, 0x2b, 0xbc, 0xfb, 0x1b, 0x14, 0x4e, 0x9b, 0x73, 0x9c, 0x43, 0x5d, 0x8d, 0x73, 0x96, 0x1e, 0x5e, 0x04, 0x16, 0x40, 0x53, 0x58, 0xbc, 0xa9, 0x45, 0x37, 0x3c, 0x0e, 0xaa, 0x91, 0xda, 0x71, 0x08, 0x1d, 0x7f, 0xe8, 0xb0, 0x40, 0x0c, 0xa1, 0xa8, 0x30, 0xee, 0x23, 0xe9, 0x59, 0xf3, 0xd6, 0xca, 0x00, 0x5b, 0xc6, 0xbd, 0x26, 0x33, 0xa4, 0x39, 0xaf, 0xde, 0x0e, 0xf7, 0xc3, 0xf5, 0x0f, 0x61, 0x75, 0x51, 0xea, 0x48, 0xa2, 0x65, 0x13, 0xd5, 0x1c, 0xd1, 0x7f, 0xc2, 0x08, 0x35, 0x1d, 0xc9, 0x85, 0x43, 0xa5, 0x5d, 0x8f, 0x19, 0x90, 0x99, 0x22, 0xcd, 0x67, 0x76, 0xa2, 0x49, 0x41, 0x40, 0x7a, 0x59, 0x88, 0x4b, 0x04, 0x02, 0xfb, 0xe2, 0xa9, 0x16, 0xf9, 0x80, 0x49, 0x05, 0xfc, 0x43, 0xdc, 0xf6, 0x64, 0x9d, 0x5a, 0x16, 0x76, 0x4d, 0xd9, 0x30, 0xa4, 0x8d, 0xf5, 0x7f, 0x0e, 0x8d, 0x75, 0xc0, 0x4a, 0x21, 0x2c, 0x8a, 0x60, 0xb6, 0x1c, 0xe2, 0x19, 0x8b, 0xe2, 0x0b, 0x7a, 0x1e, 0x4e, 0x9b, 0x8b, 0xe4, 0x51, 0xd4, 0x5d, 0x3c, 0x1c, 0x30, 0x4a, 0xa6, 0x86, 0x3e, 0x7f, 0x30, 0xae, 0xad, 0xb8, 0x32, 0xe2, 0xa6, 0x4b, 0x3b, 0xc0, 0x60, 0x68, 0x4b, 0x9b, 0xee, 0x9f, 0x43, 0x21, 0x5b, 0xa2, 0x99, 0x3a, 0xf8, 0x4d, 0x50, 0x33, 0xf5, 0xe3, 0x28, 0x1b, 0x2f, 0x9b, 0x12, 0x6d, 0x49, 0x5b, 0xe6, 0xf0, 0xfe, 0xc3, 0x58, 0xdc, 0xb5, 0x6d, 0x29, 0x3e, 0x56, 0x73, 0x9a, 0x9d, 0x5d, 0x32, 0x26, 0xde, 0x2d, 0x4e, 0x70, 0x65, 0xa6, 0xf7, 0x7b, 0x7d, 0xf9, 0x6a, 0x19, 0xfa, 0xbb, 0xba, 0xa6, 0x1d, 0x39, 0xd0, 0xf5, 0xb7, 0x0c, 0xb0, 0x8b, 0x91, 0xed, 0xff, 0x0b, 0x0c, 0xca, 0xc2, 0xf2, 0x05, 0x19, 0x69, 0x84, 0xfb, 0x6c, 0x0c, 0x07, 0x74, 0x45, 0xf4, 0x2e, 0x9c, 0x2c, 0x5d, 0xd8, 0x30, 0x00, 0x7a, 0xfb, 0x9a, 0x8b, 0xba, 0xda, 0x5e, 0x58, 0x4a, 0x7f, 0xb4, 0xc9, 0xdb, 0x65, 0x76, 0x64, 0xa5, 0x75, 0x3d, 0x6e, 0xac, 0x33, 0xc8, 0xbb, 0x42, 0x3a, 0x9d, 0xc4, 0xcd, 0xe6, 0xf2, 0xfa, 0xca, 0x50, 0xcd, 0x5a, 0x12, 0x7f, 0x6b, 0x42, 0x5c, 0xdc, 0xdf, 0x83, 0x04, 0xe7, 0xfb, 0xb7, 0x0b, 0x29, 0x73, 0xd5, 0x5e, 0x69, 0x40, 0x02, 0x5b, 0x23, 0x43, 0xaa, 0x91, 0x36, 0x2b, 0xd0, 0xc7, 0xdd, 0x98, 0xa2, 0x40, 0xe0, 0x80, 0x51, 0x3e, 0x0c, 0xd3, 0x1f, 0xc5, 0xe0, 0x5a, 0xba, 0xa1, 0x89, 0xe5, 0xc8, 0xab, 0x11, 0xa5, 0xc3, 0x47, 0xd3, 0xd7, 0x07, 0x31, 0x32, 0xa2, 0x29, 0x7a, 0x8a, 0x43, 0x8b, 0xcd, 0x67, 0x67, 0x2d, 0xf7, 0xf5, 0xd8, 0xc6, 0xa6, 0xb8, 0x5c, 0x14, 0x71, 0x7d, 0xdb, 0x70, 0x19, 0x91, 0xbf, 0xa5, 0x0f, 0x30, 0xa0, 0x02, 0x36, 0x40, 0x21, 0xae, 0xe9, 0x40, 0x15, 0x3c, 0x40, 0x7b, 0xe7, 0x7f, 0x8f, 0x81, 0x38, 0xa0, 0x30, 0xd7, 0xc9, 0x6d, 0x83, 0xee, 0x9c, 0xf4, 0x32, 0x52, 0x56, 0x51, 0xba, 0x24, 0xe8, 0xc4, 0x27, 0xca, 0x6e, 0x07, 0x1e, 0xe5, 0x57, 0xde, 0x21, 0x83, 0xc7, 0xef, 0x0f, 0x97, 0x39, 0xd4, 0xea, 0xa6, 0x69, 0x6f, 0xdd, 0xc2, 0x71, 0x7d, 0x7e, 0xbc, 0x32, 0x6e, 0x50, 0x96, 0xf5, 0x75, 0x8c, 0x37, 0x52, 0xdb, 0x21, 0x62, 0x52, 0x98, 0xf9, 0xe9, 0xd0, 0x24, 0x7e, 0x1e, 0x25, 0x8b, 0x5d, 0x8b, 0x04, 0xc0, 0x89, 0xe3, 0xa2, 0x33, 0x84, 0x38, 0x1a, 0xa5, 0xda, 0x6d, 0x11, 0x3b, 0xee, 0xef, 0x95, 0xd2, 0xf8, 0xa0, 0x4b, 0x93, 0x4f, 0x14, 0xca, 0xc7, 0xe4, 0x00, 0x42, 0xec, 0x0f, 0xef, 0x61, 0x08, 0x8f, 0x37, 0x77, 0x3d, 0xcc, 0x2c, 0xd8, 0x9e, 0x5e, 0x93, 0x82, 0x41, 0xd3, 0x5a, 0xff, 0x95, 0xad, 0x86, 0x8d, 0xf6, 0xab, 0x6c, 0x7d, 0x7f, 0x4a, 0x24, 0xd9, 0x20, 0x8a, 0x3b, 0x49, 0xf0, 0xf5, 0xa8, 0x37, 0xc4, 0xde, 0x01, 0x32, 0x00, 0xe7, 0xef, 0x90, 0xad, 0xc6, 0xe0, 0x58, 0xcc, 0x48, 0xfb, 0x5f, 0xea, 0x95, 0x59, 0xb0, 0xf5, 0xb7, 0x72, 0x31, 0x4e, 0x56, 0xd5, 0x84, 0x1f, 0xc5, 0x1d, 0x2c, 0xef, 0x43, 0x20, 0xf1, 0x74, 0x7a, 0x69, 0x85, 0xa8, 0x4c, 0xe9, 0x67, 0x1f, 0xcf, 0xe9, 0x08, 0x97, 0x96, 0x43, 0x2d, 0xd1, 0x33, 0xd2, 0x94, 0x9f, 0xf9, 0x27, 0xda, 0x3f, 0x07, 0x7d, 0x9c, 0xe7, 0x82, 0xef, 0xdd, 0xa1, 0x21, 0xe9, 0xa7, 0x59, 0xef, 0xdd, 0xf5, 0x34, 0x4c, 0x37, 0xd1, 0x24, 0x35, 0x92, 0xba, 0xba, 0xc6, 0x2c, 0x48, 0x3b, 0xfd, 0x97, 0x13, 0xf5, 0xc1, 0xb2, 0xd0, 0xd3, 0x23, 0xd8, 0xbd, 0x30, 0xe3, 0x57, 0x40, 0xe9, 0x36, 0x24, 0xca, 0xb6, 0xc6, 0xcd, 0x02, 0xba, 0xfb, 0xae, 0x20, 0x58, 0x79, 0x68, 0x96, 0x49, 0xea, 0x8f, 0xf6, 0xeb, 0xfd, 0xa3, 0x10, 0xdc, 0xae, 0x42, 0x5a, 0xc8, 0xc9, 0x9b, 0x96, 0x7f, 0xa9, 0x26, 0xae, 0x4b, 0x46, 0x93, 0xe3, 0x80, 0x6f, 0x00, 0x26, 0x54, 0x53, 0x6e, 0xc6, 0xf1, 0x46, 0x76, 0x4c, 0xc9, 0xc2, 0x38, 0xa4, 0x2a, 0xac, 0x95, 0x7d, 0x12, 0xd9, 0x9e, 0xf1, 0x44, 0xd1, 0x4b, 0x69, 0x9b, 0xd3, 0x71, 0xbb, 0x9f, 0x19, 0xee, 0x96, 0x56, 0x5c, 0x26, 0x20, 0x5d, 0x9b, 0xb4, 0xdd, 0x36, 0x19, 0x59, 0xd3, 0xe4, 0xa5, 0x38, 0xec, 0xb5, 0x1d, 0x46, 0x9b, 0x60, 0x35, 0xfc, 0xc2, 0x4f, 0x75, 0x4f, 0xd4, 0x3e, 0x81, 0xe1, 0x37, 0x05, 0x9d, 0x79, 0xec, 0xb2, 0x70, 0xb1, 0x71, 0xdb, 0x08, 0xee, 0xe6, 0x33, 0x1f, 0x95, 0x70, 0x5a, 0x9d, 0x7c, 0xdb, 0xfa, 0x5e, 0x9f, 0x83, 0x0f, 0x34, 0x15, 0x74, 0x86, 0x30, 0x42, 0xd0, 0x0a, 0x1d, 0x4d, 0x71, 0x1b, 0x4e, 0xd4, 0xd0, 0x60, 0x9a, 0xdf, 0x25, 0x3e, 0xa4, 0x13, 0xd0, 0xa9, 0x60, 0x29, 0xf8, 0x3a, 0xd2, 0x9e, 0x72, 0x82, 0x19, 0xab, 0xe4, 0x9f, 0xad, 0x77, 0x2a, 0x0c, 0xe5, 0x8c, 0xf8, 0xbe, 0xbc, 0x87, 0xc1, 0x6c, 0xd4, 0x14, 0xd8, 0x2e, 0xbb, 0x1a, 0xd6, 0x49, 0x6e, 0x33, 0x3b, 0x49, 0x1b, 0x5f, 0x58, 0x51, 0x2b, 0xf9, 0x6c, 0xb0, 0x80, 0xea, 0x0d, 0xb4, 0xfb, 0x1c, 0xc9, 0xc3, 0x42, 0x32, 0x0e, 0xa7, 0xc0, 0x76, 0x47, 0x2a, 0xed, 0x12, 0x48, 0xe3, 0xcf, 0x84, 0xec, 0x4f, 0xc1, 0x4c, 0xfc, 0x24, 0x73, 0xe7, 0x53, 0xe1, 0x32, 0x01, 0x40, 0xaa, 0x69, 0xe7, 0x2c, 0x53, 0x68, 0x3b, 0x7d, 0xbb, 0x65, 0xeb, 0xba, 0x5b, 0xc0, 0x63, 0xef, 0x1e, 0x8c, 0x02, 0x53, 0x73, 0x4a, 0xcb, 0x28, 0xa1, 0xf7, 0x5e, 0xe3, 0x5c, 0x4a, 0x26, 0x8d, 0x95, 0x37, 0xd3, 0x69, 0x96, 0xb7, 0x0b, 0xd7, 0x4d, 0xcb, 0x5c, 0x78, 0xe8, 0xbe, 0x76, 0x93, 0xa3, 0xab, 0x97, 0xb7, 0xde, 0x40, 0x46, 0xa2, 0x73, 0xc1, 0x44, 0x62, 0x46, 0x50, 0xc0, 0xba, 0x1e, 0x6b, 0xca, 0xc7, 0xb3, 0xb6, 0x0a, 0xe3, 0x08, 0xfb, 0xb2, 0xca, 0xfa, 0x6f, 0xb1, 0xfc, 0x19, 0x37, 0x2a, 0x62, 0xb8, 0x2a, 0x24, 0x33, 0x40, 0xd9, 0x83, 0x19, 0xca, 0xcc, 0x37, 0x90, 0xec, 0x0f, 0xb3, 0x8f, 0xd2, 0xee, 0xa0, 0x6b, 0x91, 0xfc, 0xd3, 0xf8, 0xb9, 0x5a, 0x7d, 0xf1, 0x29, 0x35, 0xa2, 0x9a, 0x28, 0x91, 0xcd, 0xa3, 0xb1, 0x45, 0x01, 0x50, 0x0d, 0x47, 0xf2, 0xd7, 0xa8, 0x2a, 0x75, 0x0a, 0x1d, 0xe5, 0x36, 0x35, 0x93, 0xd6, 0xa9, 0x4a, 0x4c, 0x07, 0x43, 0x3b, 0x7b, 0xaf, 0xe9, 0xa8, 0x56, 0xfc, 0xa9, 0xba, 0x6d, 0x0f, 0xa8, 0x4f, 0x3a, 0x49, 0x5b, 0x57, 0xf9, 0xc5, 0xfa, 0x7d, 0xba, 0x25, 0x32, 0x0b, 0xb4, 0x92, 0x1b, 0x07, 0xdc, 0xfe, 0x69, 0xa2, 0xb6, 0xac, 0xe6, 0xd4, 0x6b, 0xf3, 0x20, 0x40, 0x1d, 0x3f, 0x5e, 0x5d, 0x77, 0x58, 0xd9, 0xd7, 0x88, 0xe7, 0x29, 0x33, 0xd1, 0x36, 0xfe, 0xb3, 0x9c, 0x37, 0x10, 0x79, 0x90, 0xc8, 0x59, 0xee, 0x83, 0x35, 0x81, 0x65, 0x8f, 0xfe, 0x9a, 0xfc, 0x68, 0xdb, 0x0d, 0xc3, 0xec, 0xfe, 0xd4, 0x21, 0xfc, 0x98, 0xea, 0x73, 0x8b, 0x9e, 0x00, 0xf5, 0xf4, 0xcd, 0x72, 0xe6, 0x91, 0xec, 0x79, 0xe7, 0x89, 0x51, 0xa2, 0xa5, 0xe9, 0xa6, 0x7f, 0xb7, 0xf7, 0xed, 0x9c, 0xca, 0xc3, 0xc2, 0xb4, 0xfb, 0xfe, 0xe0, 0x25, 0x84, 0x0f, 0xe7, 0xa2, 0x9b, 0x64, 0x5d, 0x28, 0x97, 0x06, 0xf2, 0x33, 0x55, 0x71, 0x08, 0x31, 0xda, 0xa2, 0x72, 0x37, 0x39, 0x71, 0x7c, 0xf3, 0xb7, 0x21, 0x2c, 0xe2, 0x2e, 0x36, 0xc8, 0xc2, 0xaf, 0x86, 0x98, 0x4b, 0x6b, 0x93, 0xed, 0x1a, 0xd4, 0x18, 0x63, 0xee, 0xff, 0xe2, 0x62, 0x16, 0x4d, 0xe1, 0xeb, 0x2a, 0x4a, 0x7f, 0x91, 0xfa, 0xd5, 0x30, 0xc5, 0xc4, 0x82, 0x4b, 0x57, 0xaa, 0x3c, 0x18, 0x3a, 0x62, 0x2f, 0x2a, 0x88, 0x30, 0xe5, 0xef, 0xc5, 0x11, 0xae, 0x85, 0x68, 0x39, 0x46, 0xcf, 0x97, 0xc0, 0xb2, 0xc9, 0x33, 0x99, 0x6b, 0x18, 0x14, 0xc3, 0xbe, 0xe6, 0x96, 0xc3, 0x73, 0xec, 0x54, 0x51, 0xad, 0xd0, 0x33, 0x52, 0x11, 0xb2, 0xa3, 0x06, 0x2a, 0x02, 0x21, 0x83, 0x0c, 0x94, 0x00, 0x62, 0x38, 0xf6, 0x6a, 0xb8, 0xc0, 0x01, 0xa2, 0x48, 0xac, 0xae, 0x8b, 0xf6, 0x9b, 0x2b, 0x6e, 0x7f, 0xae, 0x2e, 0xf8, 0x68, 0xa1, 0x8a, 0x82, 0x34, 0x3b, 0x00, 0x96, 0xda, 0xe9, 0x57, 0xae, 0x76, 0xa6, 0xae, 0x3e, 0x3f, 0x1d, 0x12, 0xf5, 0xb9, 0x12, 0x4c, 0x40, 0x2c, 0xfe, 0xfc, 0x11, 0x54, 0xf9, 0xec, 0xde, 0x5a, 0xdd, 0x9e, 0xec, 0x03, 0xa9, 0x27, 0xcd, 0x28, 0x23, 0x40, 0x28, 0x66, 0xc2, 0x9b, 0xb8, 0x16, 0xca, 0x73, 0x97, 0x7f, 0xb9, 0x67, 0xbd, 0x4b, 0xe2, 0x88, 0xc3, 0x38, 0x58, 0xb1, 0xed, 0x10, 0x0d, 0x17, 0x68, 0xdb, 0x3b, 0x20, 0xd0, 0x53, 0x03, 0x79, 0xf6, 0x98, 0x55, 0x63, 0xdf, 0x25, 0x0f, 0x4d, 0x10, 0x03, 0x69, 0xa8, 0x08, 0x3c, 0x90, 0xf7, 0x0f, 0x93, 0x91, 0x25, 0x2e, 0x72, 0x79, 0x1c, 0x7f, 0x24, 0xba, 0x93, 0xa7, 0x44, 0xd1, 0x27, 0xa0, 0x76, 0x26, 0xae, 0xbc, 0x55, 0x34, 0xc8, 0xe6, 0xac, 0xe9, 0xb6, 0x2b, 0xe8, 0x50, 0x70, 0x7a, 0xcd, 0x6d, 0xf1, 0xa8, 0x69, 0x69, 0xd6, 0xb7, 0x46, 0xef, 0x27, 0x58, 0xe4, 0xd5, 0x75, 0xae, 0x66, 0xff, 0x25, 0x55, 0x8c, 0x80, 0x0b, 0xa3, 0xe1, 0x03, 0x3b, 0x2e, 0x36, 0x6a, 0x1b, 0x8e, 0x4e, 0xb4, 0xbd, 0x64, 0xdb, 0x24, 0x6c, 0x9b, 0xa9, 0x9f, 0x85, 0xed, 0x1a, 0x57, 0x89, 0xa9, 0xd2, 0xa6, 0x6f, 0xb4, 0xb3, 0x3c, 0x3f, 0xce, 0x0c, 0x7d, 0xdc, 0x17, 0x0d, 0x25, 0x21, 0xd2, 0x7f, 0x2e, 0x30, 0x68, 0xb2, 0xf3, 0x07, 0xb0, 0xb6, 0x95, 0x55, 0x6d, 0xcd, 0x9e, 0x8b, 0x19, 0x21, 0xe4, 0x35, 0xe1, 0xb3, 0xb1, 0x8b, 0xf0, 0x94, 0x20, 0x43, 0xf0, 0x57, 0xca, 0xaa, 0xce, 0xc6, 0xa2, 0xf3, 0xbe, 0xd4, 0x1e, 0xcf, 0x80, 0xd3, 0x98, 0x3e, 0xe1, 0xe7, 0xf3, 0xa4, 0x84, 0xbb, 0x81, 0x1f, 0xe2, 0x72, 0x24, 0x18, 0x90, 0xe1, 0xb4, 0x18, 0xc1, 0xfb, 0xa1, 0xdd, 0x0b, 0x8c, 0xda, 0xae, 0x6e, 0x2b, 0xed, 0xeb, 0x92, 0x69, 0x6f, 0xe8, 0x50, 0x4f, 0x9e, 0xfb, 0x74, 0x08, 0x45, 0xd4, 0xc1, 0xda, 0xe0, 0x0d, 0x36, 0x5b, 0x01, 0x02, 0x90, 0xe1, 0xf2, 0xe3, 0x10, 0x3a, 0x9c, 0x08, 0x7e, 0x9d, 0xa7, 0x84, 0x6e, 0xe1, 0xe3, 0xfc, 0xc2, 0xed, 0xe7, 0xba, 0x70, 0x70, 0xf8, 0xfd, 0x86, 0xd2, 0x2c, 0x93, 0x6b, 0x6a, 0xce, 0xaa, 0x67, 0xf1, 0x05, 0xe4, 0x65, 0x36, 0xb1, 0xa9, 0xf8, 0x14, 0x96, 0xc1, 0x9d, 0xa1, 0xbc, 0x22, 0x40, 0xa9, 0x15, 0x06, 0x01, 0x5b, 0x61, 0x41, 0x37, 0x41, 0x4f, 0xd2, 0xb5, 0x76, 0xe5, 0xb8, 0x4d, 0x13, 0x21, 0x07, 0x93, 0xea, 0xe1, 0x3a, 0xe3, 0x77, 0x00, 0xcb, 0xa6, 0x13, 0xc2, 0x01, 0xd0, 0x6b, 0x72, 0x0a, 0xad, 0x31, 0x49, 0x49, 0xde, 0x11, 0x92, 0xf1, 0x9f, 0xe7, 0x0c, 0xd3, 0x4b, 0x2f, 0x90, 0x74, 0x21, 0xbc, 0xf3, 0x63, 0x48, 0xae, 0x2e, 0xc9, 0x11, 0x9e, 0xbc, 0x42, 0x7d, 0x1b, 0x44, 0xeb, 0xff, 0x5a, 0x78, 0xbd, 0x82, 0x29, 0x3d, 0x19, 0xae, 0x25, 0x0c, 0xa3, 0x67, 0x2d, 0x98, 0x54, 0x97, 0x16, 0xb1, 0xcb, 0x2e, 0xa0, 0x68, 0xe4, 0x67, 0xa9, 0x74, 0x8c, 0x4c, 0xa1, 0xd4, 0xd4, 0x7c, 0x3e, 0xb6, 0x44, 0x2c, 0x71, 0x98, 0x71, 0x6c, 0x98, 0xad, 0xd1, 0xab, 0xf5, 0x82, 0xcf, 0x7e, 0x5f, 0xe1, 0x1b, 0x9d, 0x37, 0xf6, 0x44, 0x2e, 0x9e, 0xb0, 0x88, 0x47, 0xe5, 0x6a, 0xeb, 0xae, 0x45, 0xcb, 0x86, 0xe3, 0xd1, 0xea, 0x22, 0x60, 0xa8, 0xb6, 0x05, 0x1f, 0x6f, 0x96, 0x0c, 0x5d, 0xff, 0x4c, 0xfa, 0x9e, 0x5a, 0x1f, 0x10, 0xf1, 0xe4, 0x39, 0xde, 0x75, 0xd0, 0x4e, 0x58, 0x1c, 0xd8, 0x7e, 0x2c, 0xaf, 0x31, 0x7d, 0x53, 0x12, 0xbe, 0xf1, 0xe6, 0xca, 0x84, 0x1b, 0x34, 0xbc, 0x5e, 0xba, 0x11, 0x37, 0xf1, 0x2c, 0x71, 0x35, 0xe3, 0xd7, 0x35, 0xde, 0x48, 0xc7, 0x44, 0x4e, 0x5d, 0x98, 0xde, 0x98, 0x79, 0x97, 0x2d, 0x0b, 0x40, 0x24, 0x1d, 0xb4, 0x1a, 0x5b, 0x6e, 0x23, 0xe4, 0xf3, 0x08, 0x72, 0xe5, 0x65, 0x8e, 0x84, 0x03, 0x51, 0x35, 0x8b, 0x36, 0x1e, 0xd7, 0xcd, 0x3e, 0xe2, 0x43, 0xa7, 0x91, 0x81, 0xd8, 0xd2, 0x98, 0x18, 0x52, 0xe5, 0x1a, 0x9c, 0xe3, 0x1b, 0xf9, 0xbe, 0x86, 0x57, 0x1c, 0x12, 0x90, 0x65, 0xac, 0x71, 0x87, 0x83, 0x83, 0x9c, 0x38, 0x20, 0xe1, 0x21, 0x04, 0xe3, 0x61, 0x83, 0x7b, 0xef, 0x2c, 0x95, 0x2c, 0x66, 0x6d, 0x27, 0xba, 0x2b, 0x05, 0xe4, 0x33, 0xed, 0x7f, 0x7b, 0x9e, 0x61, 0x46, 0xfd, 0xd3, 0xce, 0x15, 0x86, 0x90, 0xcf, 0xb0, 0x20, 0xc8, 0x55, 0xd2, 0xe4, 0x3e, 0xeb, 0x66, 0x63, 0x53, 0x3e, 0xf9, 0x44, 0x1c, 0xdc, 0x70, 0x2e, 0xb8, 0x3c, 0xf6, 0xe8, 0xe1, 0xff, 0x39, 0xbe, 0xc0, 0x75, 0xd6, 0x27, 0x06, 0x63, 0x11, 0xa6, 0x38, 0x03, 0xca, 0xee, 0x4a, 0x4d, 0xad, 0x49, 0x70, 0x75, 0xa8, 0x3a, 0x31, 0xb5, 0xa2, 0x61, 0xbd, 0x4c, 0x6a, 0xa0, 0x80, 0xc7, 0xed, 0x7c, 0xf7, 0x7f, 0xad, 0xc6, 0xc3, 0x63, 0x6e, 0x7a, 0xfc, 0xf7, 0x32, 0xe7, 0xc7, 0x9d, 0x68, 0x10, 0x2b, 0x14, 0x61, 0x53, 0x20, 0x3e, 0x03, 0x48, 0xe9, 0x26, 0xc1, 0xec, 0xa4, 0x41, 0xcb, 0xff, 0x20, 0xf4, 0x81, 0xaa, 0xee, 0x57, 0x2e, 0x65, 0xbb, 0x39, 0xf3, 0x18, 0xdd, 0x64, 0x01, 0x80, 0x2b, 0x21, 0x0b, 0xd5, 0x12, 0xff, 0xfc, 0xaa, 0xe5, 0xd1, 0xe5, 0x14, 0x75, 0xf6, 0x39, 0x0e, 0xe2, 0xdd, 0x3c, 0x1c, 0xb0, 0xc7, 0xb9, 0x2f, 0x1d, 0xcf, 0xf3, 0xc9, 0xb2, 0x28, 0xdf, 0x61, 0x19, 0xa7, 0x90, 0x09, 0x2e, 0x81, 0xf3, 0x4e, 0x58, 0x55, 0xbc, 0x60, 0x1a, 0x6d, 0xa0, 0x73, 0xe5, 0x41, 0xc5, 0x64, 0x31, 0x3c, 0x77, 0xa0, 0xcc, 0xc3, 0x1c, 0x42, 0x71, 0x74, 0x6a, 0x7b, 0x9c, 0xab, 0xd7, 0x37, 0x9d, 0x4b, 0x51, 0xfd, 0xeb, 0xbb, 0x30, 0x17, 0xbc, 0x2e, 0x69, 0xf4, 0xd2, 0x28, 0x04, 0xca, 0x98, 0x3e, 0xd0, 0x7f, 0x6d, 0x1d, 0x55, 0xca, 0x40, 0xcd, 0x0a, 0x96, 0x5d, 0x37, 0xc8, 0xa7, 0x86, 0xe5, 0x7f, 0x7f, 0x46, 0x0a, 0x28, 0x83, 0x82, 0xc2, 0xfa, 0x5a, 0x51, 0x9a, 0xe1, 0x96, 0x0e, 0x53, 0x2c, 0x96, 0xab, 0xe3, 0x85, 0xaa, 0x47, 0xbd, 0x27, 0x79, 0x03, 0x52, 0x4b, 0xa0, 0x12, 0xd8, 0xe3, 0x9c, 0x10, 0x4a, 0x8b, 0xea, 0x95, 0xb0, 0xbd, 0x6c, 0x09, 0xa0, 0x44, 0x0f, 0xba, 0x05, 0xf3, 0xab, 0x2b, 0x1f, 0x96, 0x2b, 0xb0, 0xcb, 0x29, 0xed, 0x37, 0x05, 0x48, 0x6c, 0x69, 0xab, 0xe7, 0x1c, 0xf2, 0x83, 0x43, 0x95, 0x1c, 0x80, 0x18, 0xf4, 0xa3, 0x41, 0x15, 0x7e, 0xc5, 0xdb, 0x8d, 0x87, 0x98, 0xd8, 0x6f, 0x93, 0xa0, 0x80, 0x78, 0xba, 0xa1, 0x57, 0xa7, 0x51, 0xb2, 0xe6, 0xf2, 0xc6, 0x93, 0xbe, 0x37, 0xcc, 0x40, 0xbb, 0x75, 0xb8, 0xc6, 0x86, 0x3c, 0x2b, 0x56, 0x5d, 0x62, 0xf2, 0x98, 0x17, 0xf8, 0x2a, 0x41, 0x62, 0x7c, 0xa8, 0xe8, 0x50, 0x50, 0x98, 0x16, 0x12, 0x6b, 0x63, 0x9c, 0x03, 0x4f, 0xd7, 0x29, 0xe8, 0x3b, 0x82, 0x1b, 0x75, 0xa1, 0x5e, 0x96, 0x14, 0xda, 0xb4, 0xd3, 0xe3, 0x19, 0x3a, 0xbb, 0xfb, 0x9e, 0x7e, 0xb5, 0xf8, 0x2c, 0x88, 0xbc, 0xb6, 0xbc, 0xbb, 0xb4, 0x58, 0x73, 0xfd, 0xfe, 0x8f, 0xd2, 0x18, 0x4a, 0x19, 0x2d, 0x5f, 0xac, 0x87, 0x5e, 0x94, 0xf3, 0x44, 0xba, 0x09, 0x36, 0xd3, 0x44, 0x06, 0xaf, 0x58, 0x21, 0x6b, 0xcc, 0x5a, 0x4c, 0x96, 0x84, 0xc7, 0x8b, 0x87, 0xe8, 0x38, 0xa2, 0x42, 0xfa, 0x77, 0xc6, 0x75, 0xc1, 0x3f, 0x54, 0x5b, 0x9d, 0x42, 0xc3, 0xe0, 0xd9, 0x70, 0xd8, 0x06, 0x7f, 0x77, 0x18, 0x87, 0x70, 0x86, 0x83, 0xbc, 0xb3, 0x57, 0x7f, 0xbd, 0x0e, 0x6c, 0x13, 0xca, 0xd3, 0x99, 0x55, 0xea, 0xfd, 0xc2, 0x26, 0xd1, 0x7b, 0xe6, 0x1c, 0x07, 0xcc, 0x5c, 0xc0, 0x47, 0xcc, 0x5d, 0xfa, 0x26, 0xce, 0xc3, 0xc9, 0xf5, 0xea, 0x10, 0x37, 0xe7, 0x99, 0xb2, 0x8d, 0x77, 0x7f, 0x86, 0xc3, 0x04, 0x87, 0x9a, 0x3a, 0xbe, 0x35, 0x37, 0xae, 0xc6, 0x38, 0x1f, 0x66, 0x91, 0x3f, 0x13, 0xad, 0x8e, 0x0e, 0x98, 0x86, 0x08, 0xd1, 0xfb, 0x9c, 0x4d, 0xb0, 0x93, 0x78, 0x10, 0xa3, 0x46, 0xf6, 0x0c, 0x88, 0x4e, 0xfa, 0xea, 0x73, 0x3d, 0x5f, 0x65, 0x45, 0x3f, 0x30, 0xac, 0x80, 0xa0, 0x1b, 0x07, 0x59, 0x8e, 0x22, 0xbe, 0x0f, 0x1f, 0x94, 0x37, 0x7c, 0x96, 0x3c, 0x5e, 0xea, 0xe2, 0xd8, 0x49, 0x27, 0x67, 0xcd, 0x1d, 0xdc, 0x01, 0x18, 0x2b, 0x1a, 0x46, 0x88, 0x5f, 0x36, 0x0c, 0x2a, 0xdb, 0xd7, 0x2c, 0x05, 0xdf, 0x4d, 0x85, 0x08, 0xec, 0x24, 0x43, 0x41, 0x29, 0xf9, 0x61, 0x50, 0x05, 0x8d, 0x6c, 0x1a, 0x1e, 0x18, 0x8a, 0xc2, 0x62, 0xe0, 0xbc, 0xd5, 0x73, 0x09, 0x60, 0xc4, 0x50, 0xaf, 0xfa, 0x98, 0x33, 0x32, 0x33, 0xe1, 0xb5, 0xd1, 0x22, 0xef, 0x38, 0x7b, 0xcb, 0x45, 0x86, 0xe1, 0xe5, 0x4b, 0xb6, 0xd0, 0xe1, 0x43, 0x50, 0xbe, 0x27, 0x7e, 0xb1, 0xa3, 0xa3, 0xd0, 0xb0, 0x0a, 0x80, 0x41, 0x81, 0x67, 0x33, 0x05, 0xda, 0xab, 0xbc, 0xaf, 0x55, 0x16, 0x28, 0xa1, 0x16, 0x4c, 0x5b, 0xc7, 0xad, 0xac, 0x0c, 0x85, 0x3d, 0xdd, 0x11, 0xed, 0xde, 0xa9, 0xdd, 0x36, 0x41, 0x0f, 0x47, 0x69, 0x93, 0x93, 0x8d, 0x5e, 0xa3, 0xd9, 0x98, 0xe7, 0x46, 0x72, 0x81, 0x4b, 0xfb, 0xf6, 0x55, 0xf6, 0xcb, 0x53, 0x15, 0x6e, 0x73, 0x64, 0x01, 0x89, 0xc5, 0xc6, 0x16, 0xde, 0x4c, 0xe7, 0xd6, 0x79, 0x2f, 0x5f, 0x47, 0xd3, 0x57, 0x84, 0x3e, 0x01, 0xd4, 0x38, 0xdd, 0x2b, 0x7d, 0x06, 0x5b, 0x40, 0xd7, 0x6e, 0x03, 0xe8, 0x39, 0x7c, 0x80, 0xba, 0x2d, 0xa0, 0x57, 0xb0, 0x18, 0xb9, 0xb5, 0xd7, 0x1e, 0x73, 0x6b, 0x4b, 0x40, 0xd3, 0x37, 0x63, 0xc7, 0x10, 0x45, 0x29, 0xe6, 0xa5, 0xf5, 0x0d, 0x9b, 0xa4, 0xdf, 0xda, 0xd6, 0x4d, 0x15, 0xe8, 0xdd, 0xdf, 0xa7, 0x94, 0xef, 0xae, 0x6d, 0xed, 0x27, 0x76, 0x00, 0xb0, 0xa4, 0xef, 0x0a, 0x77, 0xe7, 0xa1, 0xc0, 0x2d, 0x7c, 0xfa, 0xac, 0xc5, 0xdd, 0x9e, 0xb0, 0x2b, 0x93, 0xfe, 0x48, 0x7b, 0x9e, 0x2c, 0x0f, 0x72, 0x17, 0xee, 0x85, 0x22, 0x14, 0x11, 0x0f, 0xe9, 0xcc, 0xff, 0x3f, 0xa3, 0xfc, 0x94, 0x56, 0x1f, 0x89, 0x2e, 0x07, 0xd0, 0x66, 0x03, 0x7e, 0xc5, 0xb8, 0xb8, 0xa1, 0xdb, 0x38, 0x2f, 0x96, 0x32, 0xd9, 0xa0, 0x85, 0xdd, 0xac, 0xeb, 0x9f, 0xde, 0x00, 0x2c, 0x5f, 0x51, 0xcd, 0x90, 0x0f, 0xe7, 0x53, 0x68, 0x8f, 0x96, 0xfe, 0x7c, 0x52, 0x8f, 0x8d, 0xa2, 0xa9, 0x71, 0x73, 0x8f, 0x44, 0xbc, 0x7d, 0xec, 0xf5, 0x88, 0xb6, 0xad, 0xb8, 0x77, 0x88, 0x9e, 0xf1, 0xe8, 0x23, 0x3e, 0xf4, 0x6d, 0x23, 0xd1, 0xca, 0x80, 0x6c, 0xb1, 0x33, 0x71, 0x59, 0xe5, 0xe7, 0xa3, 0x17, 0xf4, 0x21, 0xf8, 0x4b, 0xfb, 0x5e, 0x8a, 0xfb, 0xfe, 0x62, 0x9c, 0xab, 0x7c, 0x7d, 0xd0, 0xc6, 0x46, 0x0c, 0x9a, 0x40, 0x91, 0x42, 0xf4, 0x7a, 0x49, 0x29, 0x53, 0x66, 0xa8, 0xe3, 0xda, 0xeb, 0x08, 0x36, 0xce, 0x8b, 0xf5, 0x48, 0x4b, 0x43, 0x87, 0xa6, 0x35, 0xb2, 0xee, 0x8b, 0x70, 0x7e, 0x4f, 0x60, 0x54, 0xf4, 0xcf, 0x7f, 0x5b, 0xee, 0xed, 0x3c, 0x1d, 0xfa, 0x14, 0x26, 0x7f, 0xb8, 0x70, 0x8a, 0x27, 0x84, 0x02, 0x39, 0x33, 0x55, 0xef, 0x8b, 0x2a, 0xe5, 0x1e, 0xa4, 0x32, 0x13, 0x01, 0xf6, 0x84, 0x85, 0xb3, 0x07, 0x1e, 0x91, 0x44, 0x75, 0xb7, 0x5e, 0x51, 0x37, 0xf8, 0x46, 0xd7, 0x25, 0xe9, 0x7f, 0x48, 0xbb, 0xaa, 0xfb, 0xdf, 0x1a, 0x63, 0x8c, 0x31, 0x4f, 0x7d, 0x4c, 0x06, 0xd8, 0x13, 0x3c, 0x66, 0x64, 0xa3, 0x2b, 0xf7, 0xdb, 0x0a, 0xda, 0x86, 0x9e, 0xaf, 0x5d, 0xe3, 0x10, 0xfe, 0xc4, 0xf2, 0x55, 0x18, 0xfb, 0xff, 0x5a, 0xc8, 0xef, 0x52, 0x15, 0xba, 0xf2, 0x03, 0x0e, 0xe7, 0x61, 0x10, 0x1e, 0x54, 0x84, 0xad, 0x76, 0xfc, 0xb5, 0xdb, 0xe4, 0x0a, 0xc5, 0x3c, 0x52, 0x4c, 0x9b, 0x26, 0x90, 0xe5, 0x1e, 0xf6, 0x53, 0x42, 0x56, 0xa7, 0x7d, 0x4f, 0xcd, 0xa3, 0x9e, 0xea, 0x3c, 0xd8, 0xbb, 0x98, 0x63, 0x0f, 0x4f, 0x76, 0x39, 0x79, 0x90, 0x73, 0x45, 0x8b, 0xf3, 0xbd, 0x4c, 0x0c, 0xf2, 0x79, 0x2c, 0x6d, 0x0d, 0xb7, 0x08, 0x58, 0x0f, 0xa5, 0xa5, 0x8b, 0x92, 0x02, 0x14, 0xe7, 0xc5, 0xd6, 0x92, 0xc4, 0x6d, 0x61, 0xac, 0x88, 0x2a, 0x51, 0xa7, 0x78, 0xfc, 0x38, 0x1e, 0xce, 0x05, 0x3c, 0xed, 0x0b, 0x91, 0x11, 0x4e, 0x8e, 0x53, 0x24, 0x42, 0x66, 0xf1, 0x19, 0x33, 0x65, 0xc4, 0x78, 0xd7, 0x75, 0xd9, 0xa3, 0x57, 0x2f, 0x3b, 0x0c, 0xb1, 0xaa, 0x74, 0xa4, 0x5b, 0x91, 0x51, 0x97, 0x29, 0x79, 0xe6, 0x36, 0x70, 0x71, 0xd2, 0x34, 0x6c, 0xda, 0xc4, 0x16, 0xdf, 0x79, 0x3e, 0xe5, 0xfb, 0xca, 0x99, 0x26, 0x82, 0x97, 0x4a, 0x0c, 0x2c, 0xca, 0x63, 0xeb, 0x49, 0x80, 0x5d, 0xf0, 0xa7, 0x5e, 0x14, 0x10, 0xb6, 0x28, 0x13, 0x3e, 0xea, 0x8f, 0x12, 0xe1, 0x61, 0x4b, 0xbd, 0x85, 0xc6, 0x6a, 0xb7, 0xd0, 0x75, 0xe8, 0xdf, 0xb8, 0xdf, 0x7f, 0xd2, 0xf4, 0x30, 0xc0, 0xb1, 0xb0, 0x30, 0x63, 0x24, 0x85, 0x67, 0xdc, 0x9e, 0xa8, 0x85, 0x2f, 0xe3, 0x62, 0x01, 0x04, 0xc8, 0xc0, 0xff, 0xfe, 0x3a, 0x8b, 0x77, 0x49, 0x82, 0x7a, 0x94, 0x72, 0xc7, 0xa7, 0x5a, 0x7c, 0xd5, 0x40, 0x8c, 0x30, 0x1d, 0x7f, 0xcd, 0xb4, 0xfc, 0xdc, 0x05, 0x5f, 0x40, 0x81, 0x06, 0xcc, 0xe8, 0xfe, 0x70, 0x2d, 0x2b, 0x3e, 0xd1, 0xe2, 0xbc, 0xb9, 0x11, 0x4b, 0x4d, 0xec, 0x0e, 0xda, 0x52, 0x06, 0x83, 0x6c, 0x07, 0xe5, 0x2e, 0xd9, 0xb4, 0x40, 0x32, 0xc9, 0x2f, 0x26, 0xba, 0xca, 0xa3, 0xa7, 0xdf, 0xa0, 0x91, 0xd1, 0xcc, 0xdc, 0x14, 0xde, 0x1f, 0xb1, 0x69, 0xab, 0x93, 0x02, 0xae, 0x6c, 0xdc, 0xbf, 0xea, 0x9f, 0xd3, 0x72, 0x4e, 0x3e, 0xd3, 0x15, 0xbb, 0x39, 0x63, 0x27, 0x84, 0x23, 0x15, 0xff, 0x74, 0x2b, 0xae, 0x5f, 0x13, 0x4f, 0x86, 0x4c, 0x25, 0xcc, 0x32, 0x1d, 0x74, 0xd9, 0x61, 0xd3, 0xcf, 0x94, 0x04, 0xa8, 0x53, 0x3d, 0xb2, 0xeb, 0xe9, 0xa2, 0x4a, 0x0a, 0x10, 0xda, 0xda, 0xf1, 0xdd, 0x36, 0xbf, 0x92, 0x3f, 0x75, 0x0e, 0xc5, 0x88, 0x37, 0x33, 0x53, 0x29, 0xb5, 0xd8, 0x4d, 0xbd, 0xae, 0x09, 0xa3, 0x4a, 0xa5, 0x95, 0xf1, 0xc3, 0x49, 0xb7, 0x9c, 0xd1, 0x35, 0xf5, 0x1e, 0xd2, 0xd9, 0x49, 0x9e, 0x23, 0xb8, 0x7f, 0xc4, 0x9a, 0xd5, 0xde, 0xcb, 0x57, 0x67, 0x0a, 0xd8, 0xbd, 0xd4, 0x29, 0x8a, 0xbb, 0xdd, 0x45, 0xd2, 0x50, 0x16, 0xf1, 0x05, 0x4e, 0x9a, 0x30, 0x2f, 0x5e, 0xfc, 0x92, 0xab, 0x44, 0x81, 0xa0, 0xf0, 0x64, 0x8c, 0x7a, 0xae, 0x85, 0x59, 0xbf, 0x1a, 0xd6, 0xee, 0xad, 0x85, 0x2e, 0x4f, 0x8a, 0x34, 0x98, 0xf2, 0x42, 0x6c, 0x0f, 0x72, 0x51, 0xcc, 0x86, 0x87, 0xe3, 0xe0, 0x2c, 0x36, 0x3a, 0xf2, 0xed, 0x45, 0x51, 0x23, 0x3c, 0xf2, 0xbf, 0xbb, 0x10, 0xe5, 0xdd, 0xbe, 0x2c, 0x62, 0x2b, 0xc0, 0xa4, 0xc3, 0xf0, 0xf9, 0x9d, 0x26, 0x21, 0x9c, 0x54, 0x63, 0x84, 0x65, 0x62, 0x41, 0x15, 0x71, 0x3e, 0xe9, 0xa9, 0x53, 0x03, 0x9a, 0xd1, 0x64, 0x73, 0x9f, 0x01, 0x5a, 0x3c, 0x7e, 0xf2, 0x1d, 0x7b, 0x73, 0x44, 0xd6, 0x7f, 0x1c, 0x68, 0x48, 0xcf, 0x76, 0xbd, 0x63, 0x6e, 0x08, 0xf9, 0x16, 0x5d, 0x5e, 0xcb, 0x66, 0x62, 0xb9, 0xbf, 0xbd, 0x08, 0x05, 0x61, 0x84, 0xe7, 0x0b, 0xa5, 0xf3, 0x25, 0xe8, 0x86, 0x28, 0x3d, 0xbe, 0xee, 0x77, 0xff, 0xa9, 0xd6, 0x02, 0xd9, 0xf5, 0xae, 0x89, 0x54, 0x8e, 0xff, 0x83, 0xe1, 0xb7, 0x4f, 0x6d, 0xd6, 0xff, 0x45, 0x62, 0xb4, 0x71, 0x0d, 0xec, 0xab, 0x0c, 0xfe, 0x1a, 0x60, 0x73, 0x7a, 0xd2, 0xed, 0xe5, 0x16, 0x69, 0x29, 0x6e, 0xfb, 0x71, 0x2b, 0x5f, 0x8d, 0xd2, 0x09, 0xfd, 0x4a, 0x1d, 0xe5, 0x76, 0xf4, 0x1c, 0x2b, 0x19, 0xf2, 0xae, 0x14, 0xc5, 0xf4, 0xd1, 0x6f, 0xa2, 0xd6, 0x01, 0xa0, 0x10, 0xc7, 0xc1, 0xe9, 0xdd, 0xaa, 0x77, 0xe8, 0xbb, 0xbc, 0x7c, 0x61, 0xf1, 0x77, 0x74, 0x3e, 0x50, 0xb7, 0xdb, 0xd4, 0x69, 0x1c, 0xe1, 0x68, 0xfd, 0xaf, 0x78, 0xf2, 0xb5, 0xc8, 0xab, 0x20, 0x13, 0x2f, 0x31, 0x9e, 0xa9, 0x81, 0x42, 0x95, 0x89, 0xd5, 0xa9, 0x72, 0xfc, 0xa0, 0x1b, 0xe8, 0x77, 0xd6, 0xc7, 0x38, 0xca, 0x52, 0x2e, 0xb0, 0x9b, 0x78, 0x35, 0x71, 0x13, 0x19, 0x78, 0x76, 0xd7, 0x96, 0xe2, 0xd2, 0x3a, 0x49, 0x7b, 0x39, 0xb1, 0x20, 0x80, 0xc2, 0x87, 0x8b, 0xb9, 0xeb, 0xd1, 0x99, 0x07, 0xde, 0xa5, 0x5e, 0x3d, 0xf3, 0x87, 0x97, 0x30, 0x75, 0x24, 0x91, 0x12, 0xa9, 0x43, 0x46, 0xfb, 0x0c, 0xf8, 0xc9, 0xc9, 0xdd, 0x1a, 0xe5, 0x2a, 0xdb, 0xf8, 0x01, 0xf7, 0x50, 0x48, 0x47, 0xc4, 0x4e, 0x60, 0x06, 0xb5, 0x39, 0xa9, 0x54, 0x93, 0x85, 0x50, 0xf7, 0x1e, 0xc1, 0x3e, 0x86, 0xa5, 0xd5, 0x4b, 0xcb, 0xd5, 0x88, 0xae, 0x6c, 0xcf, 0x45, 0xb8, 0xca, 0x7d, 0x1e, 0xc3, 0x2a, 0x25, 0x11, 0x65, 0x13, 0x3e, 0x8a, 0xe9, 0xf6, 0x83, 0x2a, 0xff, 0x15, 0x47, 0xc7, 0xb2, 0x9d, 0x08, 0xb4, 0x9b, 0x15, 0x46, 0x42, 0x54, 0xfc, 0x95, 0x86, 0x30, 0xae, 0xf2, 0x5d, 0x29, 0x88, 0x53, 0xae, 0x1a, 0x4c, 0x82, 0xef, 0x2f, 0xc7, 0x2a, 0xeb, 0x99, 0xb1, 0x32, 0xc2, 0x86, 0xd4, 0x4b, 0x31, 0x50, 0x71, 0xc5, 0x13, 0xf4, 0xdf, 0xa7, 0x28, 0xc7, 0x75, 0xfe, 0x16, 0x64, 0xaa, 0x75, 0xad, 0xe9, 0x7b, 0x26, 0x6f, 0x63, 0x0d, 0xb0, 0x50, 0x86, 0x94, 0x8a, 0xba, 0xa2, 0x73, 0x97, 0xd4, 0xd2, 0xa5, 0xfa, 0x04, 0x77, 0x5b, 0x2b, 0xb3, 0xe4, 0xe6, 0x4a, 0x50, 0x5b, 0xd8, 0xb4, 0x97, 0x39, 0x66, 0xd5, 0x13, 0x6d, 0x11, 0x3d, 0xe1, 0x2e, 0x86, 0xf5, 0xb8, 0xee, 0xc2, 0x13, 0x26, 0x89, 0x79, 0x8c, 0x1c, 0xc3, 0xb9, 0x4a, 0xad, 0xf1, 0xcb, 0x7e, 0x13, 0xf6, 0x5a, 0x38, 0xf3, 0x71, 0xd6, 0x35, 0xe2, 0x35, 0x1b, 0xf7, 0x27, 0xfa, 0x4e, 0x1b, 0xc2, 0x52, 0x08, 0xe8, 0xae, 0xde, 0xb7, 0x24, 0x64, 0xc1, 0x41, 0x2b, 0xa0, 0x55, 0xea, 0x42, 0x67, 0x1d, 0x77, 0x28, 0x49, 0xfb, 0x93, 0xee, 0xe4, 0xa3, 0x73, 0x09, 0xa9, 0x50, 0xb6, 0xa6, 0xe3, 0xb6, 0x8f, 0x3d, 0xf4, 0x37, 0x25, 0x69, 0xe2, 0x59, 0x3a, 0xf7, 0x13, 0x78, 0x0b, 0x3c, 0x55, 0xb8, 0x78, 0xac, 0x22, 0x3e, 0x65, 0xa9, 0x21, 0xa0, 0x60, 0x99, 0xef, 0x99, 0x84, 0x3b, 0x20, 0x02, 0x9d, 0x3b, 0x81, 0xfd, 0x8d, 0x04, 0xa0, 0x74, 0xee, 0xd5, 0x8f, 0xc2, 0xf8, 0x17, 0xe4, 0xaf, 0xa5, 0xee, 0x04, 0xa2, 0x14, 0x0e, 0xa2, 0x12, 0x2b, 0xd0, 0x82, 0x3e, 0x81, 0x84, 0x83, 0x1e, 0x7b, 0x09, 0xdc, 0x99, 0xb5, 0x9c, 0xa6, 0xf8, 0xa3, 0xee, 0x9b, 0x9b, 0x78, 0x79, 0x1d, 0xea, 0x46, 0x13, 0x7a, 0x8f, 0x67, 0xc4, 0x6e, 0xe3, 0x1d, 0xd5, 0xe9, 0xa5, 0x75, 0x29, 0x13, 0xf2, 0x71, 0xd1, 0x8d, 0x71, 0x65, 0xda, 0xfa, 0xcf, 0xa2, 0x69, 0xbf, 0x6b, 0x52, 0x0b, 0x06, 0x52, 0xa3, 0x46, 0x09, 0x6d, 0x28, 0x74, 0x8d, 0xf9, 0x7c, 0xd1, 0xac, 0x38, 0x28, 0xd2, 0xd8, 0x66, 0xc6, 0xb8, 0x1d, 0xef, 0x67, 0x66, 0xa6, 0xdf, 0x33, 0x6f, 0x83, 0x9a, 0x4f, 0x74, 0xaa, 0xcd, 0x04, 0xad, 0x3b, 0xa4, 0x1d, 0xc5, 0x08, 0x3e, 0x90, 0xeb, 0x54, 0x5e, 0x61, 0x26, 0xdb, 0x63, 0xc4, 0xe8, 0x13, 0x7a, 0x82, 0xe7, 0xb2, 0x12, 0x9d, 0x28, 0x70, 0x90, 0x37, 0x5c, 0x0e, 0x44, 0xb0, 0x70, 0x97, 0x9c, 0x0f, 0x60, 0xe6, 0x98, 0xa3, 0x4c, 0x68, 0x7e, 0xea, 0xcd, 0x23, 0xcf, 0xb1, 0x89, 0xf7, 0x79, 0x7d, 0x05, 0x24, 0x4e, 0x2a, 0xbb, 0x0d, 0xb5, 0xd2, 0x6d, 0x3c, 0xa0, 0xf0, 0xb8, 0xa5, 0xbe, 0xc5, 0xec, 0x2f, 0xf1, 0xfb, 0x1b, 0x70, 0x02, 0x89, 0x70, 0xb8, 0x94, 0xd6, 0xc2, 0x52, 0x56, 0x21, 0x69, 0x06, 0x7d, 0x20, 0x51, 0xe2, 0x72, 0xe7, 0x4d, 0x3b, 0xc7, 0x0c, 0xad, 0xee, 0x70, 0x09, 0x12, 0xeb, 0x30, 0xe1, 0x81, 0xf5, 0x51, 0x07, 0xb7, 0xa3, 0x98, 0x7b, 0xbc, 0xab, 0x78, 0x36, 0xbb, 0x5f, 0x86, 0xc8, 0x11, 0x78, 0x2d, 0x40, 0xa4, 0x13, 0xa3, 0x4c, 0x76, 0xf9, 0x1b, 0xa1, 0x7a, 0x23, 0x3d, 0x9d, 0xa6, 0x7e, 0xd3, 0x2b, 0x49, 0xeb, 0xc5, 0xe8, 0x9f, 0x8a, 0x47, 0x84, 0xa2, 0x38, 0x51, 0x6a, 0x24, 0x56, 0x4f, 0xa3, 0x1b, 0xcd, 0x1b, 0xf7, 0x3c, 0x4e, 0x28, 0x56, 0xcb, 0xdf, 0x00, 0x77, 0xb1, 0x93, 0xf0, 0xbf, 0xcf, 0x98, 0x01, 0x64, 0x92, 0x77, 0x2b, 0xd2, 0xc7, 0x98, 0xc6, 0x4e, 0xb1, 0x05, 0x41, 0xd9, 0x59, 0x6f, 0x16, 0x57, 0x26, 0x76, 0xfd, 0xf0, 0xad, 0x25, 0x61, 0xb7, 0xca, 0xbc, 0x10, 0x89, 0xf0, 0xb3, 0x36, 0x38, 0xbd, 0xfb, 0x8c, 0xe9, 0xd2, 0x87, 0xcd, 0xbb, 0xe1, 0x0b, 0x6a, 0xaa, 0x07, 0x04, 0x7e, 0xb2, 0x5d, 0xf8, 0x04, 0x37, 0xca, 0xff, 0x48, 0xa4, 0x1b, 0x82, 0x9b, 0x53 ],
- const [ 0xbe, 0x10, 0x5a, 0x6c, 0x58, 0x5a, 0x76, 0x6a, 0xa1, 0xf2, 0x90, 0xb6, 0x32, 0x21, 0x9f, 0xf8, 0x64, 0xea, 0x66, 0x74, 0xb5, 0xe3, 0xf9, 0x84, 0x6d, 0x44, 0x7d, 0x46, 0x81, 0x3e, 0x2f, 0x92, 0xb7, 0x8e, 0xa8, 0x2f, 0x0b, 0x51, 0x5f, 0x46, 0x51, 0x1a, 0x6f, 0x16, 0x1d, 0x42, 0x9a, 0xea, 0xe0, 0x7f, 0x8e, 0x48, 0x53, 0xb8, 0x68, 0x6c, 0x19, 0x18, 0x77, 0xf5, 0xa0, 0x62, 0x42, 0xdd, 0x48, 0x84, 0xcc, 0xae, 0xc7, 0x6e, 0x16, 0xf3, 0xcc, 0x24, 0xe6, 0xed, 0xe2, 0x12, 0xc7, 0x88, 0x97, 0xa1, 0x51, 0x8d, 0xde, 0x07, 0xaa, 0x19, 0xb3, 0x63, 0x4d, 0x4e, 0xfd, 0x09, 0x0a, 0x48, 0xb8, 0x1a, 0x4e, 0x53, 0x53, 0x59, 0xa5, 0x5b, 0x57, 0x39, 0x7d, 0xa4, 0x4a, 0x3b, 0x2d, 0xbb, 0xd3, 0x76, 0x36, 0xac, 0x1f, 0x77, 0xc8, 0x75, 0x82, 0x4c, 0x88, 0xbb, 0x62, 0xdc, 0x90, 0xbc, 0x51, 0x7a, 0xb7, 0x85, 0x79, 0xb9, 0x13, 0x64, 0x3d, 0x81, 0xbd, 0xa1, 0x1d, 0x62, 0xd4, 0x69, 0xda, 0x29, 0xc5, 0x0b, 0xdb, 0xb1, 0xc9, 0x67, 0xd0, 0xfc, 0xaf, 0xa2, 0x95, 0x82, 0xdb, 0x1f, 0x59, 0xc9, 0x8f, 0xab, 0xff, 0x36, 0x69, 0xf8, 0xc4, 0x23, 0x2d, 0x4d, 0x23, 0x32, 0xc5, 0x7b, 0xf6, 0xe0, 0x86, 0x13, 0xdd, 0x5d, 0xb5, 0xd6, 0xe3, 0x9b, 0x4a, 0x6d, 0x5f, 0xa4, 0xf3, 0x5b, 0x19, 0x32, 0x5c, 0x2f, 0xae, 0x79, 0xae, 0xfe, 0x36, 0x48, 0x56, 0x10, 0x23, 0x50, 0x07, 0xda, 0x6c, 0xc3, 0x02, 0x2c, 0xec, 0x22, 0x95, 0xac, 0x05, 0x50, 0xe1, 0x83, 0x88, 0xea, 0xe1, 0x56, 0xd9, 0xdb, 0xa8, 0x78, 0x4e, 0x2a, 0xea, 0x5e, 0xd9, 0x17, 0xbe, 0x53, 0xe7, 0x67, 0xa2, 0x6c, 0x87, 0xfc, 0xc0, 0xbf, 0xcf, 0xa8, 0x70, 0xd0, 0x7b, 0x43, 0xfd, 0x4c, 0xd8, 0xfb, 0xac, 0xfa, 0xe1, 0xec, 0xfa, 0xee, 0xa7, 0xf1, 0x26, 0x00, 0xf6, 0xb9, 0xef, 0x7c, 0x35, 0x1d, 0x9f, 0x1b, 0x8e, 0xb0, 0x48, 0x32, 0x4f, 0x98, 0x4e, 0x2a, 0x90, 0x9d, 0x25, 0x30, 0x17, 0x80, 0x5c, 0x2d, 0x78, 0x8e, 0xdb, 0xf9, 0x80, 0x74, 0x69, 0xcc, 0xd4, 0x55, 0x71, 0xf5, 0xd6, 0x1a, 0x05, 0xce, 0xc8, 0x0a, 0x23, 0xef, 0x34, 0x9a, 0x37, 0xa2, 0x8b, 0x86, 0xe2, 0x97, 0x0c, 0x20, 0xfa, 0xd9, 0xe7, 0xe8, 0xd2, 0x01, 0xa3, 0x5e, 0xbb, 0xaa, 0xbd, 0x14, 0xca, 0x24, 0x92, 0x07, 0xdc, 0x6d, 0x7e, 0x2f, 0xd8, 0x5c, 0x46, 0x55, 0x34, 0x20, 0xb3, 0x25, 0xbb, 0xe9, 0x80, 0x84, 0x8d, 0xe5, 0x77, 0x24, 0x67, 0x6e, 0xd6, 0x55, 0x24, 0x82, 0xf7, 0x1e, 0x84, 0x73, 0x30, 0x8c, 0x2d, 0xdf, 0xf9, 0x4a, 0xef, 0xe3, 0x4c, 0x72, 0x4c, 0x8c, 0x52, 0xa3, 0x38, 0x8e, 0x3b, 0x54, 0x1d, 0x39, 0x6d, 0x67, 0x22, 0xa8, 0xe2, 0x01, 0xad, 0x3c, 0xcb, 0x9a, 0x26, 0x49, 0x7a, 0x50, 0xff, 0x0e, 0x7e, 0x81, 0xf1, 0xeb, 0x10, 0x98, 0x88, 0xce, 0xae, 0x27, 0xe1, 0xef, 0x05, 0x37, 0xb3, 0xbd, 0x14, 0xdc, 0x8c, 0x17, 0x8f, 0x0c, 0x5d, 0xc0, 0x81, 0xb0, 0x39, 0x0d, 0x36, 0xfc, 0x5a, 0xe1, 0x58, 0xfc, 0x65, 0xdb, 0x58, 0x70, 0xee, 0xce, 0x0f, 0xda, 0x3f, 0x72, 0xa6, 0xd5, 0x55, 0x59, 0xb3, 0xa8, 0x2c, 0x24, 0xa4, 0x1b, 0x3d, 0xf6, 0x61, 0x8a, 0x44, 0x29, 0x2d, 0x37, 0x46, 0x40, 0xcd, 0xe4, 0xd3, 0x1d, 0xed, 0xa2, 0x89, 0x75, 0xbf, 0xe4, 0xd9, 0x80, 0xe5, 0xd7, 0x0e, 0xf5, 0x91, 0xf6, 0x8a, 0x35, 0xeb, 0xd9, 0x53, 0xc6, 0xb3, 0x4d, 0xcf, 0x04, 0x27, 0xaa, 0xcc, 0x13, 0x27, 0x61, 0xc3, 0x18, 0x97, 0xd5, 0x5e, 0xa9, 0x05, 0x6c, 0x37, 0x82, 0x8b, 0xe5, 0xe3, 0x79, 0xf7, 0xec, 0x2f, 0xb4, 0x2a, 0xeb, 0xa9, 0x19, 0xbe, 0x24, 0x63, 0x06, 0xec, 0xfd, 0xf3, 0x42, 0xac, 0x9a, 0xbe, 0x34, 0x1d, 0xb1, 0x77, 0x53, 0x28, 0x9a, 0xe2, 0xde, 0x60, 0xa6, 0xde, 0xcd, 0x2d, 0xb2, 0xa2, 0x07, 0x2a, 0xfc, 0x47, 0xd5, 0xcb, 0x35, 0x87, 0x97, 0x43, 0xd7, 0xc4, 0xb6, 0xa5, 0xb8, 0x4b, 0xd9, 0x49, 0xe0, 0xdb, 0x5c, 0x71, 0x97, 0x61, 0xfe, 0x2c, 0xc3, 0x06, 0xd9, 0x7b, 0x71, 0x6b, 0x98, 0xb3, 0xb2, 0x33, 0xe4, 0x22, 0xa8, 0xc3, 0x1f, 0xf5, 0xe0, 0x45, 0x55, 0x59, 0xe2, 0xf3, 0x6f, 0xe1, 0x07, 0x92, 0xaa, 0x28, 0x8b, 0x3c, 0x48, 0xb7, 0xe3, 0x63, 0x86, 0x29, 0x51, 0x13, 0xcd, 0x8d, 0xb5, 0x77, 0x2c, 0x0b, 0xa6, 0x9f, 0x06, 0xcb, 0xc1, 0x80, 0x08, 0x12, 0x41, 0x3d, 0x5e, 0xae, 0xd1, 0xa5, 0x27, 0x95, 0x9e, 0xfc, 0x26, 0xc9, 0xaf, 0xfe, 0xba, 0x7e, 0x79, 0x21, 0x10, 0x7f, 0xae, 0x1b, 0x97, 0xce, 0x57, 0xa4, 0xb4, 0x8a, 0x22, 0x7d, 0xb8, 0x16, 0xfd, 0xb1, 0x0f, 0x78, 0xe3, 0x1b, 0xb9, 0xff, 0xf6, 0x28, 0xff, 0x29, 0xcf, 0xde, 0x5e, 0xc3, 0x12, 0x1d, 0xc8, 0x52, 0x45, 0x25, 0x0c, 0xb2, 0xe2, 0x59, 0x92, 0xfd, 0xaa, 0x43, 0x4b, 0xaf, 0x3d, 0xd7, 0xe8, 0x07, 0xe8, 0xfc, 0x4a, 0xb0, 0xbe, 0x48, 0x3a, 0xa0, 0xea, 0x0b, 0x5b, 0x41, 0x43, 0x90, 0x5c, 0xce, 0x21, 0x9f, 0x72, 0x00, 0x6f, 0x46, 0x06, 0xeb, 0x02, 0xda, 0xab, 0x22, 0x29, 0x38, 0x52, 0x22, 0x86, 0x50, 0xc1, 0xee, 0x1c, 0xe5, 0x41, 0xf6, 0xa8, 0x8e, 0x97, 0x3d, 0x35, 0x01, 0x36, 0xbb, 0xeb, 0x90, 0xb3, 0x01, 0x28, 0xf4, 0x79, 0x1b, 0xd2, 0x4a, 0xbe, 0xba, 0xeb, 0x5b, 0xb6, 0x93, 0x65, 0x20, 0x06, 0x02, 0x38, 0x86, 0x7b, 0xf3, 0xb3, 0x6e, 0xfc, 0x02, 0x0f, 0xf8, 0xbd, 0xe1, 0x4a, 0x01, 0xb6, 0xfa, 0x33, 0xea, 0x54, 0x56, 0xc1, 0x9b, 0x6e, 0xbe, 0xa8, 0xc8, 0x7a, 0x20, 0x2e, 0x73, 0x01, 0x34, 0x3b, 0xb3, 0x50, 0x5e, 0xb0, 0xb3, 0x71, 0xd7, 0xfa, 0xfd, 0x59, 0x08, 0xe7, 0xf9, 0x63, 0x36, 0xb8, 0xb0, 0xfd, 0x64, 0x77, 0xd6, 0xa1, 0x75, 0x8b, 0x08, 0x08, 0x92, 0x89, 0x52, 0x9a, 0xcb, 0x4d, 0xf4, 0x28, 0x01, 0x4a, 0x66, 0xdd, 0x03, 0x1e, 0x99, 0x72, 0xf7, 0x69, 0x80, 0xa2, 0xfc, 0xe0, 0xcf, 0xde, 0x0d, 0x9d, 0x03, 0x41, 0x28, 0xb9, 0xa2, 0xc6, 0xb0, 0x1d, 0xc4, 0xb9, 0x11, 0x95, 0xd2, 0x6b, 0xa2, 0x27, 0x8e, 0x2a, 0xcf, 0xa2, 0x53, 0x70, 0x77, 0x79, 0x9e, 0x5b, 0x93, 0xd2, 0xce, 0x5d, 0x19, 0xdb, 0x28, 0x35, 0x20, 0x5d, 0x1e, 0x1e, 0x44, 0x93, 0xd1, 0x46, 0x4c, 0x3c, 0xd4, 0x81, 0x0a, 0xef, 0x33, 0x3f, 0x83, 0xaf, 0xb4, 0xbc, 0x50, 0xbf, 0x5c, 0x76, 0x44, 0xb7, 0x35, 0xe4, 0x4f, 0xd8, 0x4f, 0x65, 0xa2, 0x9d, 0x05, 0x77, 0x14, 0x92, 0x81, 0x29, 0xc5, 0x69, 0x83, 0xd3, 0x01, 0x4b, 0x5d, 0x04, 0x67, 0x6c, 0x43, 0xbc, 0x4a, 0xe2, 0xc1, 0xdb, 0x57, 0xb7, 0x8d, 0xda, 0x78, 0x3d, 0x7f, 0xb9, 0xf9, 0xa1, 0xde, 0x38, 0xea, 0xc3, 0xdd, 0x4a, 0xc4, 0x45, 0x65, 0xc7, 0x4f, 0xe3, 0x15, 0x61, 0xc2, 0x02, 0x88, 0xd9, 0x2c, 0x8b, 0xd6, 0x73, 0x14, 0xf9, 0x5d, 0xa7, 0x5c, 0xb1, 0xc1, 0x19, 0x6c, 0x92, 0x31, 0xcb, 0x8c, 0xce, 0xec, 0x91, 0x90, 0xf8, 0x04, 0xc6, 0xbb, 0x5e, 0x62, 0x3e, 0xde, 0x98, 0x0b, 0x7b, 0xc0, 0x61, 0xa2, 0x24, 0xc2, 0xa6, 0x2d, 0xb2, 0xc3, 0xdd, 0x1c, 0x6d, 0x42, 0x98, 0x87, 0x97, 0xc2, 0x5a, 0xb7, 0xe7, 0x73, 0xa9, 0xe8, 0x39, 0x0e, 0x64, 0x4d, 0x83, 0x01, 0x57, 0x55, 0x0b, 0xcc, 0x0d, 0x2d, 0xd7, 0xab, 0xe5, 0x86, 0x65, 0x75, 0x68, 0x98, 0x9d, 0xc4, 0xda, 0x66, 0x04, 0x56, 0x0f, 0x44, 0x32, 0xb3, 0x81, 0x97, 0x86, 0x10, 0x9f, 0xdd, 0x18, 0x74, 0x67, 0xed, 0xef, 0x19, 0x36, 0x7f, 0x75, 0x15, 0xdf, 0xee, 0x27, 0x39, 0xfb, 0x3d, 0x91, 0x3a, 0x81, 0x59, 0x7a, 0x0e, 0x97, 0x9d, 0x5c, 0x99, 0xa7, 0x9b, 0x17, 0x89, 0xb4, 0x1a, 0xe5, 0x7f, 0xef, 0x5b, 0x91, 0x6f, 0x85, 0xa1, 0xe4, 0x49, 0xbc, 0xef, 0x61, 0xd9, 0x3e, 0x14, 0x32, 0xec, 0xb4, 0xe5, 0x61, 0xb4, 0x97, 0xca, 0x4b, 0x6d, 0x43, 0x7c, 0x52, 0x41, 0x4e, 0x0c, 0xd3, 0x69, 0x17, 0x28, 0x58, 0x96, 0xa2, 0x9a, 0x0e, 0x8f, 0xa3, 0x11, 0x79, 0x1b, 0xd8, 0x24, 0x66, 0x21, 0x9c, 0x94, 0x21, 0x0e, 0xba, 0xd1, 0xe9, 0x77, 0x7f, 0xc0, 0xa1, 0x00, 0x13, 0xbc, 0xc8, 0x7c, 0x09, 0xdb, 0xab, 0x55, 0x34, 0x72, 0xd9, 0x2e, 0xbc, 0xdb, 0xd8, 0xc8, 0x72, 0x75, 0x16, 0x22, 0x61, 0xed, 0x22, 0xe5, 0xa5, 0xbc, 0x1c, 0xfe, 0x81, 0xf1, 0x6b, 0x8d, 0xab, 0x31, 0xad, 0xfe, 0xea, 0xfc, 0xf4, 0x75, 0xe3, 0x31, 0x2f, 0x70, 0x30, 0xd5, 0xe6, 0xa8, 0xb3, 0x10, 0x2b, 0x38, 0x2a, 0x78, 0xcd, 0x00, 0x03, 0x93, 0xce, 0x4c, 0x71, 0x96, 0x17, 0xb1, 0xbf, 0x73, 0x6b, 0x38, 0xe5, 0x13, 0x9a, 0xbf, 0x59, 0xe0, 0xf7, 0x9b, 0x27, 0x87, 0x0b, 0x82, 0x44, 0xfc, 0x8b, 0xa9, 0x1f, 0xbe, 0x88, 0x29, 0x7a, 0x5c, 0xe6, 0xa7, 0x78, 0x38, 0x0f, 0x34, 0xf7, 0x8b, 0xe8, 0x72, 0x1f, 0xa9, 0x05, 0xf8, 0x3b, 0x87, 0x19, 0xf8, 0xc8, 0x7a, 0xb0, 0x1f, 0xcc, 0x41, 0x20, 0xbd, 0x6a, 0x46, 0xbc, 0x26, 0xb2, 0x21, 0x4c, 0x58, 0xbe, 0x5e, 0xba, 0xde, 0xfa, 0x80, 0x0e, 0xf4, 0xc3, 0x45, 0x9c, 0xeb, 0x34, 0x2c, 0x7c, 0xcf, 0x3c, 0x35, 0x3b, 0x48, 0xf4, 0xe8, 0xd0, 0xbe, 0x30, 0x98, 0xd2, 0xc0, 0x55, 0xe9, 0xe8, 0xa7, 0x6a, 0x90, 0x80, 0x76, 0x71, 0x5a, 0xc4, 0x05, 0xf7, 0x70, 0xc9, 0x5f, 0xea, 0xd9, 0x0a, 0x68, 0xab, 0x40, 0x16, 0xc3, 0x64, 0xf8, 0x85, 0xf2, 0x9c, 0x3d, 0x30, 0xbf, 0x08, 0xbd, 0xa2, 0xdb, 0xa4, 0x57, 0xc9, 0xc6, 0x03, 0x22, 0xf1, 0xee, 0xe3, 0xb1, 0xf4, 0x1b, 0x05, 0x95, 0xaa, 0x0a, 0x3c, 0x24, 0xa7, 0x58, 0xc3, 0x79, 0x26, 0xa3, 0xd3, 0xbc, 0x40, 0xeb, 0x75, 0xa4, 0x62, 0x3e, 0x96, 0x39, 0xfd, 0x94, 0x59, 0xdf, 0x7f, 0xf8, 0xb1, 0x90, 0x83, 0xe8, 0x2e, 0x69, 0x44, 0xff, 0x17, 0x68, 0x58, 0xd1, 0xba, 0x74, 0x9b, 0x17, 0x00, 0x9d, 0x69, 0x0c, 0x44, 0xa6, 0x10, 0x16, 0x65, 0xc0, 0x84, 0xa9, 0x1a, 0x99, 0x55, 0x68, 0x86, 0x95, 0xdf, 0x8e, 0x0d, 0x5b, 0xc1, 0x8d, 0x65, 0x94, 0x90, 0xf5, 0xf0, 0xef, 0xcc, 0x96, 0x49, 0x69, 0x12, 0xe9, 0x1d, 0xcb, 0x94, 0xac, 0x3c, 0x74, 0xc7, 0xcd, 0xef, 0x58, 0x5b, 0x89, 0x8d, 0x49, 0x70, 0xd5, 0x49, 0x76, 0x07, 0xfd, 0x4e, 0x31, 0xb6, 0x8b, 0x0e, 0xf5, 0xa1, 0x6a, 0xd6, 0xa7, 0xa5, 0x4b, 0xa6, 0x1c, 0xd6, 0x48, 0x41, 0xdc, 0x2c, 0xc7, 0x80, 0x25, 0x79, 0xa2, 0xeb, 0x33, 0x9e, 0x85, 0x8a, 0xbf, 0xff, 0x97, 0xf9, 0xc6, 0x34, 0x5c, 0xbb, 0x8b, 0x02, 0xda, 0xd0, 0xdf, 0x89, 0xfa, 0x8a, 0xa0, 0xbe, 0x32, 0x9c, 0x80, 0x1c, 0x61, 0x74, 0x07, 0x97, 0xfa, 0xcb, 0xdc, 0xd2, 0x65, 0x7a, 0x40, 0x91, 0xa2, 0x8f, 0xdb, 0x71, 0x30, 0xa0, 0xbb, 0xd7, 0x2d, 0x5f, 0x9a, 0x26, 0xbe, 0x6f, 0x5f, 0x35, 0xb1, 0x76, 0xe8, 0x00, 0x61, 0x74, 0x07, 0x9d, 0xda, 0x53, 0xca, 0x72, 0x3e, 0xbf, 0x00, 0xa6, 0x68, 0x37, 0xf8, 0xd5, 0xce, 0x64, 0x8c, 0x08, 0xac, 0xaa, 0x5e, 0xe4, 0x5f, 0xfe, 0x62, 0x21, 0x0e, 0xf7, 0x9d, 0x3e, 0x90, 0x27, 0x2c, 0x73, 0x8a, 0xab, 0x87, 0xe8, 0xd8, 0x01, 0x07, 0x24, 0x2f, 0x1a, 0xa6, 0xc8, 0x00, 0xb0, 0x07, 0x7d, 0x9f, 0xda, 0xb6, 0x2b, 0xa4, 0xde, 0xb0, 0x6c, 0x92, 0x46, 0x26, 0x40, 0xb6, 0x36, 0x7e, 0x02, 0x52, 0xfc, 0x9b, 0x9a, 0xfb, 0xe9, 0x5e, 0xf5, 0x40, 0x5f, 0x6c, 0xb2, 0x8c, 0x2c, 0x32, 0x1e, 0x4e, 0x16, 0x27, 0x63, 0x56, 0xb7, 0x51, 0xfc, 0x82, 0x8c, 0x0b, 0x6c, 0x9b, 0x48, 0x05, 0x30, 0x7a, 0x6e, 0x8c, 0xf2, 0x6f, 0x1e, 0x0c, 0xff, 0xe3, 0x2f, 0xd3, 0xfb, 0x3b, 0x7f, 0x17, 0xd4, 0x00, 0x87, 0x3b, 0xf4, 0x3d, 0x33, 0x4e, 0xbb, 0x29, 0xf0, 0xd5, 0x2c, 0x06, 0x06, 0xca, 0xe6, 0x49, 0x28, 0xe4, 0x56, 0xfb, 0x49, 0x19, 0x2c, 0x5f, 0xb2, 0x62, 0x0b, 0xd5, 0x52, 0xbe, 0x85, 0xfe, 0x55, 0x79, 0x46, 0x21, 0xf8, 0xae, 0x8f, 0xce, 0x9b, 0x0b, 0xe7, 0xc1, 0x17, 0xd4, 0x0d, 0x08, 0x53, 0x2a, 0x30, 0x69, 0x12, 0x8e, 0x62, 0xfe, 0x0f, 0xa1, 0x4b, 0x22, 0x4c, 0x2d, 0x1a, 0x91, 0xa7, 0x69, 0xc1, 0xca, 0xae, 0x79, 0x62, 0xb8, 0xb4, 0x35, 0x04, 0x92, 0x25, 0x2b, 0x8b, 0x00, 0x16, 0xe7, 0xe7, 0x7f, 0x20, 0x72, 0x8b, 0x06, 0x6f, 0x18, 0x21, 0xea, 0x16, 0x6e, 0x7c, 0xff, 0xa5, 0x94, 0xce, 0x00, 0xfe, 0xb8, 0x1b, 0x30, 0x64, 0xdb, 0xed, 0x42, 0xd5, 0xd8, 0x4a, 0x76, 0x9a, 0xa2, 0xe3, 0x06, 0x1c, 0xcd, 0x8e, 0xc0, 0xf9, 0x50, 0xf6, 0xf4, 0x57, 0x89, 0x91, 0x90, 0x79, 0x81, 0xd3, 0x8a, 0x90, 0x72, 0xa2, 0x7e, 0xd3, 0x86, 0x09, 0x99, 0xd1, 0xe2, 0x30, 0xb5, 0x06, 0xe3, 0x8c, 0xc5, 0xad, 0xa7, 0x53, 0x74, 0xd6, 0xd0, 0x33, 0x09, 0xb8, 0x84, 0x43, 0x8e, 0x48, 0xb8, 0x3a, 0x31, 0x0b, 0xaf, 0xdf, 0xea, 0x28, 0xbd, 0xc0, 0x5e, 0xc1, 0x51, 0x27, 0x04, 0x83, 0x33, 0x4a, 0x86, 0x7c, 0x09, 0xc2, 0x6a, 0x2d, 0x20, 0x3e, 0xf1, 0xe1, 0x69, 0x79, 0x3f, 0x3d, 0xc2, 0x69, 0xbd, 0x17, 0x77, 0xba, 0xbc, 0x8c, 0x09, 0x7a, 0x5b, 0x4c, 0x2e, 0x16, 0xaa, 0x39, 0x18, 0x85, 0x0f, 0x31, 0xfa, 0xc3, 0xe9, 0x27, 0xc9, 0x81, 0x74, 0x79, 0x40, 0x1b, 0xed, 0x7d, 0x26, 0xca, 0xf6, 0x5d, 0xd3, 0x1b, 0x3b, 0x26, 0xf1, 0x9f, 0x56, 0x1b, 0x80, 0xe4, 0xf0, 0x4f, 0x1c, 0xa5, 0x29, 0x73, 0x83, 0x3e, 0x3a, 0xec, 0x52, 0x62, 0x59, 0x29, 0x0f, 0x10, 0xde, 0x33, 0x6c, 0xc3, 0xa3, 0x85, 0xca, 0xea, 0xb0, 0x1f, 0xfd, 0x97, 0x18, 0xd6, 0x4f, 0x7b, 0x1e, 0xee, 0xc7, 0x12, 0x9c, 0xea, 0xab, 0x1b, 0xa6, 0xa3, 0x43, 0x4b, 0x6a, 0x98, 0xe0, 0x42, 0x5a, 0x85, 0x1d, 0xbe, 0x8e, 0x37, 0x65, 0x0f, 0x63, 0x9e, 0xb5, 0xcb, 0x69, 0x24, 0xa3, 0xc2, 0x7c, 0x3d, 0xa0, 0x34, 0x30, 0x3f, 0x7a, 0x42, 0x73, 0x75, 0x25, 0xa3, 0x6d, 0x6e, 0xba, 0x98, 0xab, 0x9b, 0xc0, 0x22, 0x7d, 0x1a, 0xab, 0x72, 0x9c, 0xcc, 0xa2, 0xa1, 0x10, 0xad, 0x85, 0xa1, 0x51, 0x65, 0x2f, 0x74, 0xad, 0x1a, 0xf8, 0x9b, 0xe9, 0x89, 0x7e, 0xd2, 0x2b, 0x55, 0xa6, 0xfa, 0x18, 0x9e, 0xdd, 0x57, 0x39, 0xd6, 0xa4, 0xfb, 0xa3, 0xd0, 0x4b, 0x82, 0xd7, 0x1a, 0xfc, 0x00, 0xe7, 0x8d, 0xfc, 0x38, 0xda, 0x22, 0x2e, 0x0f, 0x52, 0x08, 0xd9, 0x40, 0x6c, 0xf3, 0xaa, 0x50, 0xe8, 0xb6, 0xfd, 0xc5, 0x8a, 0x14, 0x58, 0x93, 0xbf, 0xd3, 0x38, 0xd7, 0x84, 0x13, 0x11, 0xc7, 0x84, 0xde, 0x90, 0xe9, 0x80, 0x00, 0x23, 0x84, 0xf4, 0x19, 0xbb, 0x55, 0xf8, 0xf0, 0xd1, 0x82, 0x64, 0x0a, 0xa7, 0xd4, 0x37, 0x7c, 0xd0, 0x20, 0x3a, 0xfd, 0xf2, 0x06, 0xe0, 0x3f, 0xcb, 0xde, 0x71, 0x80, 0x72, 0xf0, 0x67, 0x5c, 0xdf, 0xe3, 0x19, 0xe5, 0xae, 0x79, 0x96, 0xf5, 0x20, 0x79, 0xd4, 0xc3, 0x63, 0xec, 0x0a, 0xb5, 0x13, 0x8b, 0x5a, 0x75, 0x00, 0x79, 0xb3, 0x47, 0x32, 0x2e, 0xf6, 0x9a, 0x2a, 0xb3, 0x57, 0xdc, 0x6b, 0x15, 0x07, 0x93, 0x39, 0x14, 0x10, 0xaa, 0xa1, 0x1b, 0x80, 0x08, 0xb9, 0x75, 0xc9, 0x68, 0x29, 0xbd, 0x68, 0x64, 0xea, 0x96, 0xc5, 0xd2, 0x4e, 0x9d, 0x5a, 0x54, 0x41, 0x9c, 0x18, 0x2b, 0xce, 0x01, 0x06, 0x4c, 0xe5, 0x8e, 0x2c, 0xb6, 0x5b, 0x51, 0xaf, 0x02, 0x32, 0xd7, 0x3d, 0x3c, 0x1b, 0x9d, 0xab, 0xf1, 0x39, 0xc7, 0xdd, 0x89, 0x28, 0x14, 0xe7, 0xd7, 0x3e, 0x12, 0x71, 0xef, 0x10, 0x8e, 0x60, 0x38, 0x38, 0x4f, 0xb3, 0xc2, 0x56, 0x04, 0xaa, 0xd9, 0x55, 0x7a, 0x2e, 0xda, 0xf0, 0x12, 0x6d, 0x45, 0x74, 0x73, 0xc5, 0x14, 0xc7, 0x7c, 0xe3, 0x4b, 0xa9, 0x7c, 0x2c, 0xd1, 0x3a, 0xa6, 0x5b, 0x7e, 0xbc, 0xbf, 0x6c, 0x75, 0x9b, 0x1a, 0xba, 0xb4, 0xaa, 0xc6, 0x64, 0xe9, 0xb0, 0x06, 0xf4, 0x87, 0x23, 0x01, 0x43, 0x1a, 0x33, 0xbb, 0x97, 0xd8, 0x0b, 0x44, 0x0f, 0x78, 0x53, 0x30, 0x41, 0x47, 0xf9, 0x46, 0x21, 0x78, 0x31, 0x7d, 0x25, 0xbb, 0xba, 0x24, 0xa6, 0x12, 0x63, 0x60, 0x8a, 0xe0, 0xcf, 0xdb, 0x20, 0x43, 0x75, 0xbb, 0x4b, 0xa4, 0xea, 0xd1, 0xe3, 0x8d, 0x63, 0x13, 0x58, 0xba, 0x76, 0x4d, 0x98, 0x72, 0x20, 0x13, 0x33, 0x18, 0x0c, 0xfa, 0xbd, 0xfd, 0x12, 0x08, 0x75, 0x78, 0xff, 0x68, 0x23, 0x39, 0x94, 0x62, 0x47, 0xda, 0xd1, 0x8b, 0x6f, 0xb7, 0x73, 0x39, 0xe9, 0x00, 0xbb, 0x3a, 0x9a, 0x0c, 0x71, 0xc6, 0x2e, 0xf0, 0x29, 0xb1, 0x72, 0x51, 0xc5, 0xe5, 0xfd, 0x76, 0x3b, 0x10, 0x16, 0xa1, 0x98, 0x9a, 0xd2, 0xa0, 0x45, 0xda, 0x7d, 0x9f, 0x89, 0x89, 0x3b, 0x40, 0x50, 0x77, 0xef, 0xee, 0x2b, 0x7c, 0x5c, 0x6e, 0x97, 0xb2, 0x8b, 0xb6, 0x82, 0xe1, 0x6c, 0x03, 0x0b, 0x3b, 0xbf, 0x26, 0x8a, 0x4a, 0x35, 0x1e, 0xd0, 0x26, 0xd3, 0xec, 0xb0, 0xeb, 0x98, 0xa3, 0xbe, 0x6a, 0x5f, 0xbf, 0x56, 0x1f, 0x07, 0xb7, 0xe0, 0x64, 0xd0, 0xd6, 0x53, 0xe3, 0x08, 0x46, 0xf8, 0x51, 0xe8, 0x6e, 0x71, 0x5a, 0xb9, 0x7e, 0xf9, 0xd7, 0x3a, 0x47, 0xed, 0x47, 0x46, 0x51, 0x8c, 0x7d, 0xb2, 0x27, 0xfb, 0x96, 0x75, 0xf6, 0x8b, 0x2e, 0x0b, 0x56, 0x3f, 0xd4, 0x1b, 0x68, 0x89, 0xba, 0x57, 0x21, 0x55, 0xb1, 0xa3, 0xe5, 0x48, 0x55, 0x7a, 0x58, 0x4a, 0x85, 0x8e, 0x71, 0x42, 0x17, 0xaf, 0xd0, 0x20, 0xc9, 0xee, 0x51, 0x21, 0x7a, 0x02, 0xe1, 0x4e, 0x9a, 0xeb, 0x90, 0x47, 0xdf, 0xd5, 0xe8, 0x3e, 0x39, 0x3e, 0x7d, 0x46, 0x09, 0x5b, 0xc6, 0xce, 0x8e, 0xb8, 0x2b, 0x68, 0x9f, 0x20, 0x5f, 0xd0, 0xa0, 0xbc, 0xf0, 0x29, 0xaf, 0x7e, 0x1d, 0x89, 0x1e, 0xc1, 0xe7, 0xb8, 0x26, 0x29, 0x6b, 0x35, 0xd9, 0xd1, 0x6e, 0x7a, 0x59, 0xa5, 0x3a, 0x81, 0x48, 0x0c, 0xa9, 0x87, 0x7f, 0xcb, 0x7f, 0x10, 0x03, 0x26, 0xfc, 0x2b, 0x34, 0x47, 0xb2, 0xf7, 0x48, 0xe4, 0x95, 0x66, 0xf8, 0x1d, 0x51, 0x41, 0x79, 0xa3, 0xe0, 0x6d, 0xae, 0x1f, 0x5b, 0x6c, 0x9c, 0xd2, 0x10, 0x26, 0x1e, 0x78, 0xd6, 0xea, 0xda, 0x73, 0x9d, 0xb0, 0x73, 0x25, 0x49, 0xa1, 0x01, 0x9e, 0xc1, 0xd9, 0xbe, 0x77, 0x42, 0x6b, 0x01, 0xfd, 0xfa, 0xa5, 0x71, 0x93, 0xd2, 0x96, 0x72, 0x51, 0x8b, 0xce, 0xe4, 0xf1, 0x0c, 0x65, 0x0d, 0xec, 0xfa, 0x3f, 0xd3, 0xe0, 0x8a, 0x8d, 0x2f, 0x35, 0x93, 0x97, 0xde, 0x00, 0xe8, 0xba, 0x5a, 0x27, 0xe4, 0xac, 0x08, 0xc7, 0x46, 0x08, 0xb3, 0xd2, 0x3f, 0x06, 0x39, 0xfd, 0xca, 0x89, 0x84, 0xd9, 0x3c, 0x60, 0xbc, 0x3f, 0x1c, 0xc5, 0xbb, 0xf2, 0x34, 0x2a, 0xc2, 0x80, 0xe8, 0x36, 0x6a, 0x69, 0xc7, 0x0a, 0xdd, 0x83, 0x60, 0xc8, 0x45, 0x9d, 0x57, 0x56, 0x85, 0x63, 0xb8, 0x5f, 0x28, 0x82, 0x8a, 0x9b, 0x96, 0x0c, 0xa8, 0x51, 0x8e, 0x1d, 0xcc, 0x1a, 0xd0, 0xbf, 0xed, 0xe7, 0x1a, 0x0b, 0xcb, 0x45, 0x56, 0x91, 0xc8, 0xe0, 0x12, 0xfa, 0xf9, 0x46, 0x30, 0xec, 0x7d, 0xee, 0xdf, 0x2e, 0x0d, 0x79, 0xca, 0x0d, 0xd5, 0x37, 0x8f, 0xfe, 0x82, 0xed, 0x72, 0x84, 0x9d, 0xd6, 0x53, 0x54, 0x17, 0xe7, 0xdd, 0xb8, 0x25, 0x57, 0x01, 0x31, 0x4e, 0x5f, 0xa2, 0x60, 0xc1, 0x3f, 0x92, 0x26, 0xed, 0x81, 0xbe, 0x0b, 0x4c, 0x81, 0xa5, 0xdc, 0x7f, 0x2d, 0x0f, 0x98, 0xa0, 0x0a, 0xfb, 0x8e, 0xd4, 0x78, 0xd9, 0xbf, 0x1f, 0x36, 0xf9, 0x89, 0x7d, 0x28, 0x44, 0x87, 0x2e, 0x58, 0x2a, 0xb3, 0x51, 0x3c, 0xdb, 0xcd, 0xb4, 0x37, 0xba, 0x01, 0xeb, 0x61, 0x0e, 0xc4, 0x9f, 0x8b, 0xfb, 0xff, 0x29, 0x7e, 0xb2, 0x6f, 0x5f, 0x84, 0xe4, 0x4b, 0xae, 0x2a, 0x7c, 0x28, 0x6a, 0x43, 0x8d, 0x1b, 0x61, 0x30, 0x89, 0x1d, 0xb6, 0x5f, 0xb5, 0xb3, 0xed, 0x12, 0xd9, 0xce, 0x42, 0x62, 0x3c, 0xef, 0x3f, 0x83, 0xcf, 0x90, 0x8d, 0x49, 0xa9, 0xc0, 0x0b, 0xeb, 0xb3, 0x0d, 0x1d, 0x08, 0xa5, 0xa6, 0x47, 0xe7, 0x31, 0xc1, 0xfa, 0x03, 0x7d, 0x3b, 0xad, 0xc7, 0xd7, 0x7e, 0x30, 0x96, 0xa5, 0xa8, 0x3d, 0x0e, 0x9a, 0xea, 0x51, 0x8e, 0x30, 0x2d, 0xb9, 0xf5, 0x52, 0xfc, 0xf0, 0xad, 0x58, 0x9e, 0x28, 0xe9, 0x39, 0x82, 0x27, 0x2a, 0xfc, 0xe1, 0x54, 0x08, 0x70, 0x9e, 0x12, 0x2f, 0x1d, 0x71, 0x4c, 0xa8, 0x7a, 0x44, 0x51, 0x5a, 0x61, 0xdd, 0xe3, 0xd0, 0xbf, 0xbe, 0x8a, 0x3c, 0x90, 0x49, 0x2f, 0xbc, 0x0b, 0x28, 0xe5, 0xdd, 0x19, 0xec, 0x0a, 0x5e, 0x0c, 0xf4, 0x8f, 0x36, 0x8e, 0x91, 0x94, 0xd7, 0xd7, 0x67, 0x38, 0xb5, 0x24, 0x17, 0xaf, 0x02, 0x64, 0x1b, 0x95, 0xbc, 0x34, 0xf1, 0x81, 0xea, 0x0d, 0x7b, 0xde, 0x23, 0xbc, 0xa6, 0xf6, 0x4f, 0x13, 0x4a, 0x50, 0xb2, 0xdf, 0x51, 0x3c, 0x26, 0x1a, 0x1c, 0xac, 0xa7, 0x61, 0x22, 0x45, 0x15, 0xa8, 0xda, 0xb6, 0x36, 0x2c, 0xdc, 0x49, 0xfb, 0xa9, 0x43, 0xb7, 0x04, 0xcd, 0x55, 0x41, 0x65, 0xed, 0x66, 0xfc, 0xab, 0xf8, 0xf9, 0x6d, 0x1a, 0xa9, 0x29, 0x55, 0x39, 0x00, 0x47, 0xce, 0x91, 0xf2, 0xc5, 0x97, 0xb1, 0x60, 0x52, 0xad, 0x75, 0x46, 0x47, 0x1b, 0x88, 0x35, 0x42, 0x12, 0x28, 0x03, 0x10, 0x3c, 0x29, 0xc1, 0xd1, 0x4e, 0x3d, 0xed, 0x56, 0xdd, 0x72, 0xe9, 0xce, 0x72, 0xfc, 0xac, 0xa2, 0xe0, 0x35, 0xb8, 0x9d, 0xd5, 0xe2, 0x4b, 0x50, 0xb0, 0xb8, 0xda, 0xb5, 0x92, 0x1f, 0xbb, 0x12, 0xb8, 0x35, 0x22, 0x20, 0x08, 0x16, 0x4e, 0x6d, 0xe9, 0x5b, 0x04, 0xff, 0x58, 0xe0, 0x3d, 0x3a, 0x39, 0xcb, 0x1c, 0x04, 0xea, 0xc9, 0x22, 0x26, 0x1e, 0x9b, 0xa5, 0xf5, 0xe9, 0xd2, 0x7e, 0x33, 0x17, 0xd6, 0x03, 0x30, 0xc2, 0x2d, 0x35, 0x34, 0x24, 0xfa, 0x3a, 0x21, 0xa9, 0xc4, 0x0d, 0x55, 0x48, 0x79, 0x74, 0xce, 0x14, 0xb3, 0x32, 0x91, 0x0e, 0x39, 0x7e, 0x4c, 0x3e, 0xc9, 0xb5, 0x3a, 0x02, 0x15, 0x4c, 0x47, 0xa5, 0x0b, 0x08, 0x75, 0x33, 0x59, 0x71, 0x7e, 0x8c, 0x31, 0x84, 0xbb, 0xb8, 0x49, 0xa8, 0x44, 0x7a, 0x27, 0xe3, 0x59, 0x28, 0x9b, 0x4e, 0x00, 0xb9, 0x8d, 0xc6, 0xf0, 0x20, 0xf8, 0xe5, 0xae, 0xd9, 0x37, 0x30, 0xf6, 0xc1, 0x80, 0x92, 0x5c, 0x2a, 0xae, 0x0a, 0x33, 0x2f, 0x43, 0xa0, 0xae, 0x45, 0xad, 0x9d, 0x45, 0x13, 0xc8, 0xfb, 0x5a, 0x84, 0xa5, 0x1b, 0x1d, 0x1a, 0x8a, 0xb6, 0xad, 0x85, 0x39, 0x16, 0x80, 0x74, 0x75, 0x86, 0x04, 0xab, 0xc3, 0x07, 0x86, 0x55, 0x6e, 0x44, 0x54, 0x9c, 0xcd, 0xc8, 0x1e, 0x78, 0xc8, 0x6f, 0xa2, 0xc4, 0x99, 0x1a, 0x89, 0x97, 0xd0, 0xa7, 0x8b, 0xd1, 0x9a, 0x21, 0xda, 0xf4, 0x42, 0x33, 0xbe, 0x36, 0xf8, 0xe3, 0x7c, 0xd4, 0xd2, 0x7d, 0x7d, 0xa8, 0x10, 0xcc, 0xac, 0xfe, 0xa4, 0x90, 0x20, 0xa4, 0xf2, 0x2d, 0xfb, 0x40, 0xd4, 0xa1, 0x92, 0xe6, 0xe1, 0xb8, 0xce, 0xea, 0xef, 0x83, 0xd2, 0xf3, 0xd6, 0x06, 0xdd, 0x51, 0x77, 0x31, 0x72, 0x91, 0xfd, 0x12, 0xb7, 0x4e, 0x63, 0x48, 0x1c, 0x4a, 0x37, 0xbb, 0x3c, 0xbd, 0x9d, 0x8a, 0x08, 0xec, 0x96, 0x45, 0x22, 0xfe, 0x82, 0x5d, 0x87, 0x0b, 0xe4, 0xd8, 0x71, 0x77, 0x66, 0x49, 0x7c, 0x7e, 0x1d, 0x00, 0x07, 0x0f, 0x0d, 0x7e, 0xdd, 0xde, 0xf0, 0x2c, 0x15, 0xb5, 0x33, 0x4c, 0x36, 0x0a, 0x42, 0x2f, 0x9f, 0xd7, 0x05, 0xa8, 0x26, 0xa6, 0xaa, 0xc2, 0x00, 0xeb, 0xa6, 0xae, 0xe1, 0x97, 0xf6, 0xff, 0x63, 0xea, 0xab, 0x1a, 0xac, 0x89, 0xa5, 0xe7, 0x4b, 0xd0, 0x9f, 0xcd, 0x64, 0x69, 0x6c, 0xde, 0x0d, 0x1e, 0x7f, 0x4e, 0xf7, 0xeb, 0xb1, 0x2a, 0x51, 0x58, 0x3f, 0x46, 0xe9, 0x06, 0x12, 0x78, 0x95, 0x87, 0x44, 0x03, 0xd1, 0x72, 0xdf, 0x56, 0xa9, 0xb7, 0xe8, 0xf7, 0xda, 0x31, 0x9c, 0xba, 0x34, 0x7a, 0xf9, 0x36, 0x42, 0x03, 0x80, 0x79, 0x2d, 0x64, 0x3a, 0xfb, 0xde, 0xf0, 0xf9, 0xd1, 0x63, 0x8d, 0xe0, 0x23, 0x94, 0xc3, 0x25, 0xe0, 0xf6, 0x12, 0x16, 0xb0, 0xdf, 0x89, 0x5a, 0x2b, 0xdb, 0x94, 0x7a, 0x48, 0x4f, 0x16, 0xa0, 0x18, 0x5c, 0xb7, 0x9e, 0xb4, 0x06, 0x80, 0x31, 0x74, 0x96, 0xa5, 0x87, 0x61, 0x3c, 0xa1, 0x00, 0xed, 0xf9, 0x88, 0x32, 0xe2, 0xbc, 0x99, 0x2f, 0x99, 0xcc, 0x13, 0x0a, 0x6c, 0x65, 0x4b, 0x97, 0x6d, 0xa6, 0xfa, 0x73, 0x59, 0xab, 0xdb, 0x44, 0xc7, 0xf6, 0x76, 0x42, 0xa5, 0x13, 0x36, 0xf7, 0xe5, 0x7b, 0xc2, 0x42, 0x74, 0xba, 0x8a, 0xa2, 0x6c, 0xcd, 0xa0, 0xb1, 0x8a, 0xce, 0xca, 0xef, 0xe2, 0xd3, 0xd5, 0xc1, 0xd1, 0x13, 0x2c, 0xba, 0x34, 0x4a, 0xa9, 0x18, 0xd7, 0x5f, 0xaa, 0x92, 0x31, 0x44, 0x68, 0x51, 0x4e, 0x1f, 0x84, 0x3c, 0x0c, 0xa7, 0xe3, 0x78, 0x8a, 0xd0, 0xbc, 0x2f, 0xde, 0xaa, 0xef, 0x91, 0x06, 0x86, 0x99, 0x19, 0x21, 0x5c, 0xe5, 0x12, 0xe0, 0x69, 0x25, 0x59, 0x37, 0x1c, 0x21, 0x64, 0x58, 0x33, 0xae, 0x83, 0xe1, 0x22, 0x83, 0x66, 0x54, 0xb4, 0x49, 0xe0, 0xc9, 0xf4, 0xf1, 0xea, 0xdf, 0x4e, 0x4a, 0xeb, 0xf8, 0xf2, 0xd3, 0x37, 0xa6, 0x79, 0xce, 0xd5, 0x60, 0xcb, 0x95, 0x85, 0x7a, 0x40, 0x31, 0x01, 0x54, 0x05, 0x29, 0x84, 0xd1, 0xc2, 0x98, 0x89, 0x0a, 0x79, 0x82, 0xd5, 0x44, 0xb2, 0x68, 0xb7, 0x20, 0xd5, 0x1a, 0x8f, 0x12, 0xd7, 0xcd, 0x8d, 0x14, 0x18, 0x6d, 0xbb, 0x9c, 0x8c, 0x35, 0x3e, 0xcb, 0x1a, 0x7c, 0xd9, 0xe7, 0x41, 0xd2, 0xb2, 0x0b, 0x01, 0x4b, 0x59, 0x1d, 0xf9, 0x1b, 0x06, 0x01, 0xcd, 0x63, 0x22, 0x0c, 0xca, 0x4b, 0x09, 0xbc, 0xcd, 0x51, 0x0f, 0xa6, 0x60, 0xe1, 0xc1, 0xaf, 0x27, 0x25, 0x6d, 0x7f, 0x7b, 0x1e, 0xe4, 0x33, 0x54, 0xf4, 0x7e, 0x52, 0x6c, 0x8a, 0x5f, 0x03, 0xa1, 0x56, 0xf9, 0x7d, 0x9b, 0x70, 0xd2, 0xbe, 0xb0, 0xe8, 0x87, 0x80, 0x04, 0x5d, 0x12, 0x69, 0xf5, 0xcb, 0x48, 0x82, 0xb6, 0xa5, 0xa5, 0xea, 0x39, 0x24, 0x4c, 0xcc, 0x53, 0xde, 0x4a, 0x8e, 0x1b, 0x9a, 0x1b, 0x4b, 0x93, 0x63, 0x6f, 0x84, 0x8a, 0xdb, 0x2e, 0x12, 0xc0, 0xd2, 0xb9, 0x5f, 0x4c, 0x17, 0x73, 0xd6, 0x3b, 0x8e, 0x80, 0x98, 0x7a, 0x83, 0xcc, 0x71, 0xf6, 0x3e, 0x4f, 0x0a, 0x01, 0xd8, 0x90, 0x60, 0xf8, 0x4d, 0x68, 0x74, 0x22, 0xd1, 0x09, 0x45, 0xdc, 0x68, 0x3e, 0xfb, 0xf3, 0xb1, 0xf5, 0x65, 0x52, 0x02, 0xfa, 0xa5, 0xdd, 0xba, 0x05, 0x2a, 0x9c, 0xd3, 0xf7, 0xdf, 0x1c, 0xb7, 0x61, 0xa2, 0x12, 0x55, 0x46, 0xf8, 0x42, 0x73, 0x22, 0xff, 0x9f, 0x46, 0x2a, 0xa4, 0xb4, 0x40, 0xd6, 0x15, 0x42, 0x29, 0x9d, 0x7a, 0x2b, 0x71, 0xff, 0xe0, 0x8e, 0xc5, 0xc9, 0x75, 0x34, 0xe0, 0x95, 0xfb, 0x2b, 0xa4, 0x90, 0x77, 0xb0, 0x69, 0x80, 0x29, 0x53, 0x95, 0x05, 0xc1, 0x55, 0x6c, 0x1e, 0xd0, 0x55, 0x2a, 0xf0, 0x7d, 0x2b, 0x4f, 0xc3, 0x79, 0x15, 0x3b, 0x4e, 0x35, 0x11, 0xfa, 0x34, 0x52, 0x89, 0x61, 0xce, 0x59, 0x35, 0x5a, 0x2b, 0xac, 0x3e, 0x7c, 0x55, 0xbc, 0x9f, 0xdf, 0xd6, 0x7d, 0xd1, 0x2e, 0x7b, 0x17, 0xa7, 0xfd, 0x58, 0xdf, 0x77, 0x5d, 0x0c, 0x85, 0x7a, 0xae, 0x47, 0x8e, 0x75, 0xb5, 0x89, 0x05, 0x99, 0xef, 0x2c, 0x6e, 0xa8, 0x24, 0xa4, 0xfc, 0x5a, 0x3e, 0x06, 0x04, 0xff, 0x5c, 0xc7, 0xb0, 0x65, 0x23, 0xc6, 0xf8, 0xfc, 0x54, 0x8d, 0xce, 0x38, 0xa4, 0xd4, 0x99, 0x37, 0xc8, 0x47, 0xe5, 0xa4, 0xcf, 0x8a, 0x59, 0xdb, 0xb4, 0x79, 0xe9, 0x4e, 0x34, 0xb4, 0x4d, 0x27, 0xdd, 0x5b, 0xb1, 0x2f, 0x68, 0x16, 0xae, 0xee, 0x48, 0x59, 0x79, 0x14, 0x83, 0xe6, 0x5a, 0x17, 0xc1, 0x93, 0x60, 0x1e, 0xa2, 0x4d, 0x54, 0x1e, 0x55, 0x5d, 0xeb, 0x42, 0x67, 0xea, 0x3f, 0x91, 0xd8, 0xbf, 0x80, 0xcb, 0x74, 0x4f, 0xe7, 0x93, 0x60, 0xf6, 0xec, 0xd3, 0xf4, 0x82, 0xb9, 0x5d, 0xc8, 0xf2, 0xde, 0xce, 0x12, 0x7e, 0x46, 0xb8, 0x2f, 0xd7, 0x6a, 0x00, 0x7f, 0xaf, 0xc4, 0x84, 0x76, 0x7c, 0x87, 0x01, 0xf0, 0x79, 0x8d, 0x35, 0xc5, 0xee, 0x91, 0x40, 0x9e, 0xb2, 0x9e, 0x50, 0x07, 0xee, 0xc7, 0x7d, 0xc5, 0x23, 0x19, 0xf2, 0x69, 0x6f, 0xce, 0x4e, 0x25, 0x0c, 0xc3, 0x4a, 0xdf, 0x19, 0x2d, 0x9b, 0x84, 0x9d, 0x87, 0x1a, 0x9f, 0xc9, 0xcf, 0x22, 0x2a, 0x7d, 0xf1, 0x39, 0xa3, 0x0e, 0x84, 0xf3, 0x63, 0x47, 0xb4, 0x14, 0x2c, 0xad, 0x7f, 0xf5, 0x01, 0x07, 0x25, 0x29, 0x3a, 0x1e, 0xd9, 0x5f, 0xd7, 0xc2, 0xbd, 0x8a, 0x15, 0x0d, 0x0d, 0x40, 0x3f, 0xec, 0x9a, 0x60, 0xc7, 0xda, 0x7b, 0xf8, 0x95, 0xef, 0xff, 0x66, 0x9f, 0x1a, 0xe6, 0xbd, 0xba, 0xab, 0xd0, 0x6a, 0xaf, 0x14, 0xf5, 0x17, 0x92, 0xf0, 0x17, 0xcf, 0x4f, 0x44, 0xb5, 0x63, 0x86, 0x05, 0x82, 0x0d, 0x99, 0xdb, 0x15, 0x54, 0x03, 0x25, 0xe2, 0x2f, 0xeb, 0x3d, 0x69, 0x6d, 0xf8, 0xfd, 0xad, 0x54, 0x68, 0x82, 0xe8, 0x89, 0x5c, 0x2f, 0x7d, 0x30, 0x76, 0xf5, 0x2e, 0x53, 0xa6, 0xd2, 0x8f, 0x88, 0x41, 0x98, 0xba, 0xce, 0x54, 0xf0, 0x45, 0xb9, 0x37, 0x9e, 0x71, 0xcf, 0x65, 0x07, 0xa4, 0x31, 0x8a, 0xf0, 0x1a, 0x7e, 0xde, 0x88, 0xd7, 0xf4, 0xb2, 0xa9, 0xe0, 0xd8, 0x48, 0x5b, 0xaa, 0x18, 0xe8, 0x9a, 0xd3, 0x30, 0x30, 0x59, 0x10, 0x4a, 0xac, 0xc6, 0x67, 0xa9, 0xa7, 0xd0, 0x9e, 0x47, 0x40, 0xe6, 0xf3, 0xbd, 0xc0, 0x02, 0x0d, 0x64, 0x2a, 0xe7, 0x33, 0xba, 0x14, 0xa7, 0xbc, 0x07, 0xb6, 0x67, 0xc6, 0x40, 0x41, 0x66, 0x2b, 0x2b, 0x72, 0x3c, 0xb1, 0xc4, 0x66, 0x60, 0x81, 0xe0, 0xb0, 0xed, 0xdb, 0x10, 0xa9, 0xa6, 0x07, 0xc8, 0x07, 0x37, 0x8f, 0xc0, 0xb1, 0xbe, 0xab, 0x9b, 0xd2, 0x89, 0xfd, 0xc7, 0x2c, 0x21, 0x7e, 0xa4, 0xb0, 0x88, 0xb9, 0xe8, 0x4b, 0xc0, 0x37, 0x42, 0x02, 0x8c, 0x3a, 0x3d, 0x41, 0x7b, 0xae, 0x68, 0x70, 0x21, 0x5c, 0xb4, 0xc8, 0xa8, 0x61, 0x1d, 0x65, 0x88, 0xde, 0x8c, 0x9c, 0x92, 0xf2, 0xfc, 0x8e, 0x33, 0xe5, 0xdc, 0xfd, 0xf7, 0xa6, 0xb5, 0x5f, 0x4c, 0x78, 0x0d, 0x31, 0x89, 0xe8, 0x8b, 0x8e, 0x2e, 0x02, 0x5c, 0x00, 0x6d, 0xc4, 0xd4, 0x96, 0xea, 0xd3, 0x59, 0x37, 0xc0, 0x6d, 0x7d, 0x35, 0xc4, 0x9f, 0x6a, 0x25, 0x0d, 0xb8, 0x83, 0xef, 0xb4, 0xfd, 0x48, 0x21, 0xd8, 0x9e, 0x7a, 0x89, 0xe5, 0xe9, 0x80, 0x02, 0x16, 0xbe, 0x0a, 0x8e, 0x39, 0x43, 0xf4, 0xa5, 0xb3, 0xd8, 0x6d, 0xcd, 0xc3, 0x4e, 0x58, 0x6b, 0x0b, 0x53, 0xf2, 0xd9, 0x4c, 0x31, 0xb6, 0xb8, 0x71, 0xb9, 0x7e, 0x88, 0xcf, 0x79, 0xea, 0x76, 0xab, 0x36, 0x05, 0x74, 0xfc, 0x96, 0x26, 0x8f, 0x73, 0x1c, 0x15, 0x7d, 0xb9, 0x59, 0x6f, 0x76, 0xf8, 0x61, 0x4c, 0x46, 0x9c, 0x7d, 0x1e, 0x9f, 0x5b, 0x1f, 0xdd, 0xb3, 0x72, 0x1b, 0x61, 0x02, 0x32, 0x13, 0x0f, 0x71, 0xbc, 0x33, 0xb7, 0x9d, 0x09, 0x1f, 0xbd, 0x6e, 0x2d, 0x2a, 0x77, 0xef, 0xdc, 0xc9, 0xd7, 0x5d, 0x2d, 0x47, 0x4a, 0x7e, 0x9e, 0xba, 0xdf, 0x33, 0x58, 0x35, 0xac, 0x51, 0xb5, 0x3f, 0x6e, 0xad, 0x00, 0x84, 0x6f, 0x76, 0x7c, 0xcb, 0xad, 0xc8, 0xa7, 0x28, 0x38, 0x7d, 0xbf, 0x73, 0xdc, 0x47, 0x86, 0xf8, 0x00, 0xfc, 0x43, 0x70, 0xce, 0x30, 0x09, 0x31, 0x94, 0x09, 0x3b, 0xa1, 0x6a, 0x4f, 0x50, 0xf0, 0x16, 0xc3, 0xd4, 0x07, 0x2c, 0xb2, 0xaf, 0xbb, 0x7a, 0xc9, 0xaa, 0x47, 0xa2, 0x2b, 0x2f, 0xf9, 0x09, 0xc1, 0x50, 0x2b, 0xf0, 0xd1, 0x0c, 0x75, 0xe1, 0xd3, 0xcd, 0x21, 0x4d, 0x80, 0x34, 0xdf, 0x73, 0x2b, 0x19, 0xba, 0x83, 0x54, 0xce, 0x4b, 0x04, 0x7b, 0xa4, 0x2d, 0x73, 0x32, 0xb1, 0xb1, 0x2d, 0x76, 0xd0, 0xd2, 0x8f, 0x3f, 0xe8, 0x6b, 0x5b, 0x56, 0x72, 0xa7, 0x5d, 0x67, 0x35, 0xb9, 0x4f, 0x57, 0x54, 0xce, 0xfb, 0xd7, 0x8b, 0x40, 0x9f, 0x3a, 0xb6, 0x0d, 0x95, 0x83, 0x93, 0x87, 0x33, 0xc3, 0xc8, 0x4d, 0xf1, 0xa2, 0x28, 0x79, 0xc9, 0x3b, 0x32, 0x1b, 0xe4, 0x2d, 0xda, 0xe7, 0x72, 0xee, 0x8d, 0x2a, 0xda, 0x63, 0x6f, 0x03, 0x13, 0xae, 0xe7, 0xcf, 0x51, 0x48, 0x5d, 0xe5, 0xe5, 0x4f, 0x42, 0x84, 0x5e, 0x21, 0x51, 0x09, 0xf5, 0x29, 0x15, 0x65, 0x28, 0xf9, 0xac, 0xcf, 0xa4, 0x99, 0xca, 0xb6, 0x68, 0x1f, 0x01, 0xfa, 0x28, 0x80, 0x3f, 0x5b, 0xef, 0xa6, 0x98, 0x32, 0x09, 0xc3, 0x45, 0x5f, 0x20, 0xe4, 0xed, 0x82, 0xa5, 0xc9, 0x24, 0x6e, 0x72, 0xf4, 0x32, 0xda, 0xad, 0x00, 0x15, 0x5a, 0xef, 0x34, 0xc9, 0x8e, 0xa5, 0x58, 0xc6, 0x99, 0xb7, 0xc7, 0xcb, 0xd5, 0x68, 0xc6, 0xda, 0xc6, 0x7e, 0x14, 0x83, 0x4c, 0xa2, 0xc3, 0x66, 0x1c, 0x09, 0x45, 0xf4, 0x70, 0x54, 0xca, 0x75, 0xfe, 0xb5, 0xca, 0x4f, 0x27, 0x54, 0xdd, 0x85, 0x72, 0xf1, 0xd3, 0x7e, 0x38, 0xca, 0x01, 0x08, 0xa1, 0xbf, 0xd9, 0x9c, 0xcf, 0xb4, 0xbe, 0xe4, 0x58, 0x37, 0x16, 0x7a, 0xfa, 0x62, 0xa0, 0xf3, 0x8a, 0x03, 0x07, 0x1c, 0x2e, 0xfb, 0xb8, 0x83, 0xcc, 0xe4, 0xf1, 0x39, 0xc2, 0xf7, 0x1b, 0xd7, 0xd8, 0x2c, 0x5a, 0xbf, 0x72, 0xa2, 0x62, 0xa4, 0x0b, 0x42, 0x8c, 0x4d, 0xde, 0xa0, 0x29, 0x95, 0xe6, 0x21, 0x16, 0xb7, 0x09, 0x63, 0x91, 0xc8, 0x91, 0xd9, 0x4a, 0x85, 0xdb, 0xb6, 0xbd, 0x4f, 0x53, 0x0d, 0xc0, 0x74, 0xa0, 0x36, 0x58, 0xb0, 0x1b, 0x73, 0xd1, 0xf4, 0x86, 0xd3, 0x0e, 0x65, 0xfb, 0x57, 0x1d, 0xa8, 0x22, 0x54, 0x0e, 0x5d, 0xa7, 0x18, 0x06, 0xe9, 0xeb, 0xd0, 0x8f, 0x79, 0xfa, 0xaa, 0x32, 0x44, 0xbe, 0x36, 0x48, 0x10, 0x72, 0x12, 0x0d, 0xf7, 0x58, 0xc6, 0xf6, 0x6b, 0xaf, 0xed, 0x45, 0x78, 0xe0, 0x96, 0xda, 0x49, 0xf8, 0xe9, 0x4c, 0xee, 0x5a, 0x0e, 0x38, 0x5c, 0xb6, 0x4a, 0xd9, 0xb5, 0x35, 0x6b, 0xd9, 0xca, 0xf6, 0x67, 0x67, 0xdf, 0xbe, 0x40, 0x8a, 0xae, 0xeb, 0x2a, 0xb5, 0xae, 0xaa, 0xf0, 0x9b, 0x94, 0x6a, 0x94, 0x44, 0x1a, 0x91, 0x36, 0x61, 0x00, 0x6d, 0x36, 0xdd, 0x51, 0x6d, 0x9d, 0xb4, 0xe8, 0x91, 0xb9, 0x08, 0x32, 0x1f, 0x08, 0x72, 0x36, 0x98, 0x58, 0x96, 0xd2, 0xea, 0x2b, 0xfa, 0x47, 0xe7, 0x60, 0x18, 0xf8, 0xf6, 0x10, 0xb1, 0x6e, 0x08, 0xb7, 0x65, 0xa0, 0xce, 0x94, 0x81, 0x71, 0x2a, 0x52, 0x18, 0x7b, 0xe3, 0xe7, 0x55, 0x0b, 0x9c, 0xbd, 0x0f, 0x6c, 0x07, 0x0f, 0x9e, 0x69, 0x56, 0x97, 0xed, 0x0d, 0xf2, 0x66, 0xd1, 0xad, 0x70, 0x13, 0x99, 0x29, 0xc1, 0x17, 0xe7, 0x6e, 0xa8, 0x78, 0xbe, 0x3f, 0x71, 0xa5, 0xdb, 0x36, 0xe1, 0xa1, 0x49, 0x05, 0x69, 0x64, 0x30, 0x02, 0x9e, 0x7f, 0xee, 0xe3, 0xee, 0xfe, 0x68, 0xc5, 0x8b, 0x92, 0xa2, 0x74, 0xac, 0xf0, 0x8e, 0xe6, 0xf5, 0x74, 0x22, 0x08, 0x33, 0x0a, 0xad, 0xbe, 0x4d, 0x4e, 0x6b, 0x24, 0x78, 0xf2, 0x57, 0x1b, 0xa9, 0x60, 0x40, 0x01, 0x50, 0xa1, 0x1f, 0xbf, 0x43, 0x7e, 0xa8, 0x09, 0xf8, 0xe5, 0x1f, 0xe1, 0xf8, 0x8e, 0x6d, 0x5d, 0x90, 0xdd, 0x73, 0xab, 0xca, 0x0b, 0x9e, 0x52, 0x9c, 0x81, 0xbc, 0xba, 0x5e, 0x84, 0x0e, 0xef, 0x81, 0x17, 0x9e, 0xa2, 0x7f, 0x1d, 0xd2, 0x71, 0x0e, 0xbf, 0x42, 0x68, 0x99, 0x0d, 0xc7, 0xc7, 0xf0, 0xe8, 0xd4, 0x05, 0x3f, 0x1f, 0x0a, 0x16, 0x3d, 0xd8, 0x06, 0xea, 0xa5, 0x32, 0x7e, 0x36, 0xea, 0x28, 0x8c, 0x76, 0x27, 0xb9, 0x49, 0x33, 0x54, 0x45, 0x9e, 0x81, 0xc0, 0x3b, 0x57, 0xcd, 0xbb, 0xf1, 0x79, 0xd5, 0x93, 0xd3, 0xd6, 0xf8, 0xc3, 0xc0, 0xde, 0xb0, 0x66, 0xb1, 0xb8, 0x5d, 0xf2, 0x9c, 0x92, 0x44, 0x22, 0x98, 0x35, 0xd7, 0x34, 0x41, 0xdc, 0x37, 0x55, 0x5e, 0x46, 0xf7, 0x5a, 0xc1, 0x0a, 0x23, 0xb0, 0x6f, 0x2b, 0x80, 0x96, 0x01, 0xec, 0x16, 0x89, 0x4a, 0xe5, 0xec, 0x00, 0x3a, 0x57, 0x13, 0x5a, 0x02, 0xbd, 0xe5, 0x15, 0x79, 0xa3, 0x8f, 0x40, 0xbf, 0xbb, 0xcd, 0x33, 0x20, 0x2e, 0xf5, 0x7d, 0x3b, 0x30, 0x37, 0x1e, 0x63, 0xd7, 0x23, 0xf7, 0x45, 0x2d, 0x6b, 0x7e, 0xcb, 0x84, 0xeb, 0xb6, 0x41, 0x09, 0xe6, 0x5f, 0xb7, 0x9c, 0x93, 0x69, 0xa6, 0xdf, 0xd8, 0xaf, 0xd6, 0x8d, 0x55, 0xe2, 0x7e, 0x0e, 0xa4, 0xc3, 0xae, 0x48, 0xdf, 0x96, 0xea, 0xb7, 0x63, 0xd3, 0x17, 0xc0, 0xd4, 0x1e, 0x9c, 0x42, 0x62, 0x79, 0xc1, 0x6f, 0x4a, 0xb9, 0x5a, 0xda, 0x9f, 0x36, 0xaa, 0xd0, 0x4a, 0xc7, 0x82, 0xec, 0x50, 0xee, 0xa9, 0xe6, 0x53, 0x4f, 0x80, 0xac, 0x5c, 0x67, 0xe6, 0xb4, 0xd7, 0x7a, 0x5a, 0x90, 0xdf, 0xcd, 0x5f, 0xc3, 0xbc, 0x16, 0x25, 0xd3, 0xaa, 0x31, 0x65, 0x9f, 0xdc, 0x14, 0x8d, 0xf3, 0xc1, 0x05, 0x1d, 0x5a, 0x86, 0x0b, 0x51, 0x33, 0xdc, 0xa2, 0x00, 0x07, 0xfb, 0xb2, 0xc4, 0x1a, 0xe7, 0xc2, 0x5b, 0x40, 0xf2, 0x69, 0x4d, 0xf2, 0x82, 0x06, 0xcf, 0xa1, 0x14, 0xb1, 0xe8, 0x4a, 0x81, 0x72, 0xd2, 0x4b, 0x80, 0xb0, 0xa3, 0x75, 0x6d, 0xec, 0x2d, 0x62, 0x49, 0xaf, 0x22, 0x09, 0x01, 0xc0, 0x7c, 0x8f, 0xf3, 0x9b, 0x1b, 0x61, 0xae, 0x1f, 0xb0, 0x7f, 0xf9, 0x87, 0xdb, 0x1b, 0x18, 0x9b, 0x90, 0x62, 0x4a, 0x27, 0xbf, 0x9a, 0x96, 0xad, 0x34, 0x6d, 0xc7, 0x57, 0xbc, 0x84, 0xb6, 0x2f, 0x89, 0x58, 0xc7, 0x92, 0xd7, 0x45, 0xb6, 0xe2, 0xd0, 0xe1, 0x94, 0x7c, 0xad, 0x8b, 0x0c, 0xea, 0x1f, 0x47, 0xeb, 0x59, 0xed, 0xc9, 0xe0, 0x4d, 0xde, 0xcf, 0x7f, 0x93, 0xd9, 0xb4, 0x8c, 0x78, 0x4b, 0x42, 0x77, 0x38, 0xc9, 0xc9, 0x23, 0xb9, 0xf7, 0x6d, 0xeb, 0x79, 0xa8, 0xc4, 0xe7, 0xc5, 0x46, 0xa1, 0x6b, 0x2d, 0x75, 0x2a, 0xd1, 0x34, 0xf3, 0x31, 0x79, 0x4c, 0xc2, 0xc1, 0x0d, 0x01, 0x8a, 0xf6, 0x0a, 0x74, 0x39, 0x12, 0x7c, 0x0b, 0xec, 0xce, 0x09, 0x67, 0x12, 0xee, 0x30, 0x96, 0xce, 0x18, 0xd3, 0x8a, 0x9e, 0xe6, 0xf3, 0xca, 0x3b, 0x3a, 0xbc, 0x68, 0xc0, 0xd2, 0xc1, 0x33, 0x0d, 0x1c, 0x88, 0x2d, 0x6e, 0x4b, 0x49, 0x40, 0x78, 0xaa, 0xf3, 0x2c, 0x34, 0x30, 0x70, 0xc4, 0x80, 0x55, 0x2a, 0x5a, 0xb1, 0x25, 0xce, 0x78, 0x7d, 0x93, 0x50, 0xd1, 0x19, 0x0f, 0x2f, 0x76, 0x9e, 0x5b, 0xfa, 0x4d, 0xb1, 0x9a, 0x13, 0xc0, 0x63, 0xaa, 0xb3, 0xb2, 0x56, 0xb3, 0x2e, 0xb7, 0x22, 0x00, 0x78, 0x84, 0xf6, 0x0e, 0xe8, 0xa4, 0x83, 0xe3, 0x3d, 0x6d, 0x15, 0xa1, 0xdf, 0x33, 0x03, 0x5b, 0x67, 0xbb, 0x4a, 0x27, 0x60, 0xf2, 0x75, 0x75, 0x4f, 0xdf, 0xc0, 0x9f, 0xf2, 0xd7, 0x7c, 0xc1, 0xc6, 0xf0, 0xb5, 0xca, 0xcb, 0xb8, 0x13, 0xd3, 0x8b, 0x26, 0xfe, 0xb0, 0x59, 0xd0, 0x05, 0xc5, 0xd7, 0x5f, 0x81, 0x1b, 0xbb, 0x40, 0x75, 0xb4, 0xd2, 0x9d, 0xb9, 0x1b, 0x45, 0x8c, 0x58, 0x3e, 0x1b, 0x86, 0x36, 0x80, 0xff, 0x1a, 0xf6, 0x0b, 0x43, 0xe2, 0x1a, 0x63, 0x26, 0xb7, 0x6c, 0x41, 0x52, 0x21, 0x9d, 0x9e, 0xa9, 0x11, 0x2d, 0x0e, 0x41, 0xd3, 0x8a, 0x4f, 0xad, 0x3e, 0x7c, 0x22, 0x7f, 0x2e, 0xc0, 0x59, 0x0a, 0x34, 0xf4, 0x32, 0x6d, 0x8b, 0xb3, 0xe3, 0xcd, 0x4e, 0x00, 0x76, 0xe1, 0xe9, 0xe8, 0xd7, 0xb4, 0xce, 0x63, 0x2c, 0xa6, 0x69, 0x7c, 0x64, 0xb4, 0x55, 0xb1, 0x13, 0xfa, 0xd0, 0x9d, 0x7d, 0x76, 0x6c, 0xd4, 0xf0, 0x0f, 0x08, 0x0f, 0x58, 0xd6, 0xff, 0x89, 0x0d, 0x8b, 0x9f, 0xa8, 0xef, 0x63, 0xdd, 0xe0, 0xb5, 0x08, 0x46, 0xd5, 0x82, 0xe2, 0x39, 0xbf, 0xb9, 0x95, 0x54, 0x13, 0x13, 0xcb, 0x2c, 0x60, 0xef, 0x33, 0x41, 0x76, 0xe9, 0xca, 0x31, 0xce, 0xad, 0x59, 0x2b, 0x26, 0x0e, 0x3e, 0xa7, 0x6c, 0x52, 0x70, 0x54, 0xdd, 0xd0, 0xbe, 0x52, 0x6e, 0xbe, 0x57, 0xa2, 0x6b, 0x44, 0x8f, 0xdb, 0x5e, 0xd4, 0xe0, 0x1e, 0x32, 0xbe, 0x2f, 0x4b, 0x98, 0xff, 0x51, 0x75, 0xaa, 0x5a, 0xce, 0x94, 0xce, 0xab, 0xe5, 0x7a, 0xde, 0x77, 0xd0, 0x09, 0x86, 0xc7, 0x49, 0xa2, 0xed, 0x37, 0x4c, 0xe0, 0x97, 0x4a, 0x1f, 0x87, 0x8a, 0x00, 0x90, 0xb7, 0xaf, 0xab, 0x7e, 0x66, 0x7c, 0xfe, 0x9a, 0x0d, 0xd0, 0x67, 0x6f, 0xa0, 0x1e, 0x9f, 0xa0, 0xc4, 0xce, 0x7f, 0x71, 0x3d, 0xe0, 0x15, 0x89, 0xa5, 0xd3, 0xf7, 0xf7, 0x64, 0xc5, 0xd7, 0x72, 0xdc, 0xdb, 0x58, 0xe5, 0xe4, 0xe3, 0x20, 0x2b, 0x78, 0x38, 0x2e, 0x16, 0xae, 0xe6, 0x6e, 0xb7, 0xec, 0x0f, 0x8b, 0xd9, 0x59, 0x8e, 0x05, 0xcf, 0x91, 0xd9, 0x83, 0x70, 0x9d, 0x2c, 0x6a, 0x5f, 0x22, 0xe4, 0xae, 0x90, 0xd8, 0x29, 0xe9, 0x07, 0x3e, 0xcf, 0xaa, 0xe3, 0x8d, 0x7e, 0x0f, 0x9c, 0xea, 0x11, 0x96, 0x89, 0xdf, 0x3d, 0x30, 0xa5, 0x0c, 0x73, 0x97, 0x92, 0x1a, 0x07, 0xe2, 0xde, 0xf1, 0x91, 0x57, 0x86, 0x2b, 0x94, 0x80, 0xb8, 0xc8, 0x5d, 0x81, 0xdd, 0x23, 0x2e, 0xa8, 0xd7, 0x24, 0x9c, 0x46, 0x87, 0xb8, 0x36, 0xbd, 0x93 ],
- const [ 0x5a, 0xb7, 0x07, 0x4f, 0x7b, 0xe1, 0x22, 0x72, 0xf9, 0xf4, 0x7f, 0xd8, 0x90, 0x0d, 0xd8, 0x23, 0xef, 0x71, 0x6b, 0x67, 0x69, 0x74, 0x50, 0x2e, 0xed, 0x9a, 0x0b, 0xc0, 0x38, 0xfb, 0x5e, 0xa1, 0x49, 0xec, 0x61, 0x5a, 0x15, 0xdb, 0xd4, 0x7c, 0x7d, 0x7b, 0xb3, 0xe3, 0x7d, 0x22, 0x0b, 0x38, 0xa6, 0x6f, 0x0d, 0xb9, 0xce, 0x2f, 0x60, 0x3d, 0x06, 0x81, 0xbc, 0x72, 0xcc, 0x39, 0xb5, 0x6a, 0x82, 0x83, 0xd4, 0x56, 0x1f, 0xc9, 0xec, 0x91, 0x25, 0xd6, 0xab, 0xe0, 0xd3, 0x3b, 0x70, 0xf8, 0x9b, 0xf1, 0x5c, 0x40, 0xd6, 0x41, 0xac, 0xd9, 0xb7, 0xe1, 0x46, 0xdc, 0x7d, 0x60, 0x91, 0xe2, 0xed, 0xc3, 0x8a, 0xca, 0x00, 0x71, 0x15, 0xb6, 0xd9, 0x4c, 0x90, 0x57, 0xf9, 0x21, 0xae, 0x6b, 0xb6, 0x42, 0x83, 0x83, 0xe9, 0x71, 0xdb, 0x0a, 0xe8, 0x00, 0xd0, 0x83, 0xb4, 0x37, 0x9c, 0x12, 0x73, 0xf6, 0xab, 0x3e, 0x20, 0x9b, 0xf5, 0xf5, 0x81, 0x26, 0x8a, 0xd0, 0x59, 0x9c, 0x6e, 0x99, 0xe0, 0xa9, 0xa8, 0x0b, 0x70, 0x88, 0x96, 0xd8, 0x81, 0x28, 0x83, 0xf1, 0xd7, 0x87, 0x7b, 0x01, 0xfa, 0x62, 0x5e, 0x3a, 0xe7, 0x11, 0x34, 0x55, 0x05, 0xad, 0xc0, 0xd4, 0x5a, 0x73, 0x58, 0x8b, 0xff, 0x6d, 0xf4, 0x5e, 0xd1, 0x4f, 0x84, 0x4c, 0x6a, 0x9f, 0x87, 0xad, 0x50, 0x18, 0xd9, 0xb7, 0x6b, 0x51, 0xcc, 0x47, 0xbd, 0x9a, 0x7b, 0xdf, 0x4d, 0x26, 0x5b, 0xea, 0x64, 0x70, 0x13, 0x48, 0xfc, 0xd7, 0x8e, 0x06, 0x76, 0x8b, 0x4e, 0x6d, 0x8b, 0xad, 0x03, 0x3f, 0x85, 0xb2, 0x5c, 0x3d, 0xaf, 0x09, 0x1d, 0xec, 0x0a, 0xfd, 0x72, 0x99, 0x41, 0xdc, 0x82, 0x9b, 0xdf, 0x59, 0x48, 0xd8, 0xc0, 0x2f, 0x9e, 0x8b, 0xc5, 0x07, 0x9b, 0x44, 0xcc, 0x9c, 0x1f, 0x30, 0xe0, 0x1d, 0xac, 0x9a, 0xac, 0xd3, 0x78, 0xb2, 0x36, 0x03, 0xc0, 0x8d, 0xca, 0x16, 0x5e, 0x6e, 0x33, 0xf7, 0x9e, 0x44, 0x32, 0xbd, 0x4e, 0x73, 0x28, 0x8a, 0x14, 0xd7, 0x16, 0xb2, 0x05, 0x06, 0xc7, 0x20, 0x72, 0xd6, 0x4c, 0xf6, 0x05, 0x20, 0xa9, 0x74, 0x0d, 0xc3, 0xce, 0x1b, 0x17, 0xeb, 0xc9, 0x12, 0xbe, 0x93, 0x39, 0xc8, 0xc4, 0x48, 0x06, 0xdb, 0x61, 0x30, 0x4f, 0x39, 0xda, 0x4c, 0xa4, 0x85, 0x56, 0xfa, 0x76, 0xbc, 0xee, 0xbe, 0xcb, 0x18, 0x03, 0x41, 0x36, 0x34, 0xd4, 0x9a, 0x07, 0x72, 0x4f, 0xcd, 0xbf, 0x9a, 0x28, 0x91, 0xc7, 0xc3, 0x29, 0x57, 0x61, 0x77, 0xc9, 0x87, 0xde, 0x12, 0xff, 0x0d, 0x12, 0x6b, 0x58, 0x14, 0x05, 0xb6, 0x48, 0x11, 0xeb, 0xa9, 0xbd, 0x04, 0x56, 0xde, 0xfa, 0xfb, 0xab, 0x79, 0xa3, 0xd7, 0xd2, 0x0a, 0x14, 0x52, 0x32, 0xb5, 0xf7, 0x41, 0xdd, 0x90, 0x16, 0x17, 0x07, 0x4c, 0x6d, 0xab, 0xbd, 0x18, 0x84, 0x3b, 0xd4, 0xc2, 0xfc, 0xb0, 0x1f, 0x1f, 0x67, 0x23, 0xe5, 0xae, 0x5d, 0xa1, 0x91, 0x78, 0xcc, 0x2b, 0xac, 0x3a, 0x8f, 0x01, 0x09, 0xc6, 0x42, 0x21, 0x3f, 0xa7, 0x55, 0x0a, 0x5c, 0x04, 0x60, 0xc5, 0xd8, 0xc7, 0xb6, 0x26, 0xc8, 0xfd, 0x3d, 0x50, 0x54, 0x80, 0x7d, 0x77, 0x6b, 0xd4, 0xf6, 0xea, 0xb6, 0x50, 0xb7, 0x50, 0xca, 0x7e, 0x2c, 0x31, 0xa1, 0xc4, 0x38, 0xb9, 0x4b, 0x43, 0x83, 0xb9, 0xe1, 0xff, 0x16, 0xef, 0xbb, 0x40, 0x25, 0x87, 0xe2, 0x39, 0x2b, 0xe1, 0xc8, 0xe8, 0x3d, 0x95, 0x37, 0x3d, 0x97, 0xb5, 0x88, 0x7e, 0x7c, 0x52, 0x15, 0xea, 0x3d, 0x41, 0xf1, 0x9d, 0x97, 0x1e, 0xd6, 0xb3, 0x41, 0x92, 0x5e, 0xb0, 0xc6, 0xd2, 0x76, 0x20, 0x91, 0x68, 0x10, 0x7a, 0x46, 0x36, 0x19, 0x4a, 0x59, 0xb8, 0xab, 0x8f, 0xd9, 0x89, 0x83, 0x62, 0x8c, 0x29, 0xb5, 0xd9, 0x41, 0xfd, 0x9e, 0x2b, 0x62, 0x97, 0x1b, 0x15, 0xc9, 0x38, 0xf8, 0x7c, 0xd4, 0x93, 0xac, 0x53, 0xbc, 0xd4, 0x43, 0xbf, 0x22, 0xe1, 0x9b, 0x79, 0xeb, 0xe0, 0xd3, 0x75, 0x4e, 0xf9, 0x01, 0xc1, 0x2b, 0x5d, 0x23, 0xaf, 0x9f, 0x87, 0x59, 0x36, 0xd5, 0xc2, 0x51, 0x96, 0x1f, 0xeb, 0x02, 0x3b, 0x45, 0x78, 0x9d, 0xe4, 0x1d, 0xb9, 0xc0, 0x04, 0x5b, 0x5e, 0xed, 0x68, 0xab, 0x3a, 0x3c, 0x1b, 0xfd, 0x46, 0x4c, 0x87, 0x20, 0xe9, 0x7f, 0xdc, 0x93, 0x76, 0x67, 0xb6, 0x98, 0xf7, 0x7b, 0xfa, 0x89, 0x29, 0x0f, 0x00, 0x6f, 0xc7, 0x83, 0xf8, 0xd1, 0x0b, 0xba, 0x86, 0xca, 0x73, 0xcd, 0xb0, 0x5e, 0xc1, 0x01, 0xfa, 0x0e, 0x45, 0xf7, 0xcf, 0xaa, 0x5e, 0x23, 0x23, 0x67, 0x3f, 0x7f, 0x57, 0x32, 0xef, 0x81, 0x5d, 0x43, 0x93, 0x4a, 0x1c, 0xf4, 0xf0, 0x20, 0x16, 0xd4, 0x2c, 0x1e, 0x48, 0xf7, 0xd4, 0x2a, 0x51, 0x91, 0x24, 0x28, 0xd7, 0xc3, 0x82, 0x6d, 0x27, 0xb5, 0x4b, 0x77, 0x1b, 0xe5, 0xd2, 0xdb, 0x41, 0xbf, 0xa6, 0x7e, 0x39, 0x6d, 0x14, 0x08, 0x5f, 0xf0, 0xed, 0x96, 0xab, 0x70, 0x8a, 0xb0, 0xd5, 0xd0, 0x0c, 0x7a, 0xbc, 0x86, 0xe8, 0x2e, 0x08, 0xaa, 0xa4, 0xc9, 0x0e, 0x4c, 0xdb, 0x05, 0xf5, 0x0b, 0x87, 0x88, 0x17, 0xe3, 0x80, 0x5b, 0xaa, 0x47, 0x3f, 0x9d, 0xa0, 0x70, 0xe8, 0x79, 0xcb, 0xf4, 0x88, 0x55, 0x45, 0x9a, 0x9a, 0x4c, 0x0f, 0x6d, 0xd1, 0xdf, 0xf8, 0x0f, 0x11, 0xe7, 0xc1, 0x50, 0xbe, 0xce, 0x7e, 0xff, 0x3a, 0xff, 0x3f, 0x01, 0xa9, 0x9b, 0xf0, 0x9f, 0xf8, 0x6e, 0x7e, 0x24, 0x1d, 0x21, 0x3c, 0xa8, 0xa0, 0xb1, 0x84, 0x27, 0x5a, 0x20, 0xa1, 0xd6, 0x7d, 0x6a, 0xec, 0xb6, 0xd4, 0xba, 0x36, 0x69, 0x4c, 0xde, 0x66, 0x45, 0xb4, 0xf8, 0x63, 0xa7, 0xc1, 0x77, 0x35, 0x89, 0x55, 0x46, 0x67, 0x57, 0x00, 0x43, 0xaf, 0xff, 0xc8, 0xf3, 0xd1, 0x48, 0x25, 0x74, 0xc0, 0x64, 0x50, 0xb3, 0x06, 0xc8, 0xbd, 0xdf, 0x67, 0x3b, 0xe6, 0x1d, 0xc1, 0x2d, 0x4b, 0x7d, 0x37, 0x4b, 0xb7, 0x2c, 0x8e, 0x50, 0xc4, 0xec, 0xd7, 0x1e, 0xa1, 0xc2, 0x4f, 0x0d, 0x13, 0xee, 0x83, 0x83, 0xba, 0x20, 0xb8, 0xc5, 0x96, 0xe9, 0x89, 0x0c, 0xca, 0x70, 0xd2, 0xdc, 0x9f, 0x66, 0xcd, 0x91, 0xcb, 0x3c, 0x7b, 0x3b, 0xf4, 0x93, 0x46, 0xab, 0x70, 0xf4, 0xe4, 0xce, 0x4f, 0xc1, 0x7e, 0x3a, 0x9b, 0x6b, 0x12, 0x07, 0xde, 0xe6, 0x16, 0xe0, 0xe5, 0x5a, 0x5e, 0x59, 0xc4, 0x1c, 0x3f, 0x83, 0x1a, 0xdc, 0xf5, 0xbf, 0x96, 0x20, 0x42, 0xcf, 0xba, 0xf1, 0x58, 0x33, 0xdf, 0xd3, 0xf9, 0xb2, 0x7a, 0xfb, 0xdd, 0x37, 0x9d, 0xbd, 0x54, 0xde, 0xc1, 0x44, 0x2c, 0x4f, 0xc2, 0x85, 0xd5, 0x4b, 0x2b, 0x75, 0xc3, 0x84, 0xb4, 0x7a, 0x14, 0xb2, 0x09, 0x20, 0x73, 0xe3, 0xcd, 0x0e, 0x3c, 0x12, 0xdf, 0x38, 0xe0, 0xfc, 0xdc, 0x56, 0x8c, 0x2f, 0xe5, 0x94, 0x05, 0x64, 0xa2, 0x8b, 0xd7, 0x0e, 0x86, 0x70, 0xae, 0x33, 0x55, 0x8b, 0x04, 0x7b, 0xe4, 0xeb, 0xfc, 0x87, 0x21, 0x59, 0x8e, 0x83, 0x52, 0x8a, 0xe5, 0xff, 0xa2, 0x99, 0x05, 0xfa, 0xd9, 0xb4, 0xb1, 0x40, 0x6b, 0x15, 0x8c, 0xf7, 0xb4, 0x33, 0x7e, 0x74, 0x82, 0x3a, 0x59, 0x53, 0xd4, 0xb9, 0xbd, 0xc6, 0xe1, 0x9b, 0x39, 0x2d, 0x5c, 0x59, 0xb2, 0xe7, 0xf7, 0x6e, 0x09, 0x68, 0x26, 0x0a, 0xf8, 0x8c, 0x25, 0x0a, 0x3d, 0x2b, 0x3c, 0x28, 0xfb, 0xee, 0x42, 0x6f, 0x5d, 0x61, 0x60, 0xf3, 0x7c, 0x49, 0x17, 0xbe, 0x83, 0x37, 0x84, 0x0d, 0x11, 0x5d, 0xe3, 0xbd, 0xde, 0xa1, 0x53, 0x00, 0xa2, 0xf0, 0xd8, 0x54, 0x32, 0xd5, 0xa6, 0xb6, 0xec, 0x4a, 0x9d, 0x12, 0x56, 0xce, 0x10, 0xff, 0x02, 0xb7, 0xca, 0xa9, 0xb5, 0xca, 0x53, 0x0e, 0xc7, 0x09, 0x6f, 0x6e, 0xcd, 0xcc, 0xe8, 0xfc, 0x76, 0x13, 0x8d, 0xda, 0xb3, 0x1b, 0x7b, 0x44, 0x1b, 0x2f, 0x9b, 0x0c, 0x8d, 0xc1, 0x6c, 0x46, 0x17, 0xb9, 0x03, 0x44, 0x16, 0x0d, 0x50, 0xc5, 0x9f, 0x92, 0xa2, 0x69, 0x1e, 0x12, 0x6d, 0x68, 0x3d, 0x9e, 0x4c, 0x84, 0x08, 0x25, 0x42, 0x3c, 0x4e, 0x46, 0x45, 0x43, 0x4a, 0x63, 0xfd, 0x30, 0x82, 0xf7, 0xc9, 0x77, 0xf0, 0x29, 0x03, 0x98, 0x60, 0xa1, 0x85, 0x96, 0x19, 0x9a, 0x6b, 0xab, 0xbf, 0x38, 0x1b, 0x3a, 0x78, 0x1c, 0x83, 0x05, 0x4e, 0x37, 0xa2, 0xa0, 0xd5, 0xdb, 0x4a, 0x26, 0x0d, 0x18, 0x24, 0x2a, 0x89, 0x45, 0xf4, 0xf0, 0xd1, 0xdd, 0x1e, 0xdd, 0x06, 0x8d, 0x6a, 0x2d, 0xc4, 0x8a, 0x04, 0xe4, 0x4c, 0x28, 0xc7, 0x07, 0xe3, 0xa9, 0xba, 0x0b, 0x75, 0x52, 0xdb, 0x8e, 0x7e, 0xc5, 0x1c, 0x45, 0x2b, 0x8a, 0xac, 0x36, 0xbc, 0xef, 0x77, 0x27, 0x2c, 0x12, 0xf0, 0x56, 0x14, 0x3c, 0x0e, 0x6a, 0xcd, 0x70, 0x94, 0xaa, 0xd4, 0x44, 0x96, 0x6d, 0x73, 0xf0, 0x39, 0xd1, 0x9e, 0xa5, 0xba, 0xb0, 0x1c, 0x20, 0xb2, 0xd0, 0xe7, 0x7e, 0x98, 0x5a, 0xd4, 0x52, 0x87, 0x8e, 0x76, 0xf5, 0x41, 0xb4, 0x40, 0x1d, 0x75, 0x56, 0xeb, 0xb1, 0x3d, 0xac, 0x17, 0xdc, 0xeb, 0x58, 0x35, 0x61, 0x05, 0x54, 0xa4, 0x2e, 0x8e, 0x28, 0x1a, 0x33, 0x87, 0x60, 0x46, 0x74, 0xb6, 0x3d, 0xb4, 0x5d, 0xa6, 0xab, 0xf0, 0x56, 0xef, 0x73, 0xee, 0x98, 0xb7, 0xb2, 0xa9, 0x3f, 0x79, 0x8a, 0x0b, 0xa0, 0x06, 0x17, 0x0d, 0xdc, 0xc9, 0xa4, 0x1f, 0xb6, 0x4e, 0x1f, 0xca, 0xa1, 0x06, 0xcb, 0x94, 0x1d, 0x44, 0x35, 0x24, 0x44, 0x8c, 0x69, 0xa6, 0xa0, 0x0d, 0x65, 0x71, 0x40, 0x6c, 0xce, 0xe7, 0x0b, 0xc3, 0xe2, 0x9d, 0x54, 0xea, 0xae, 0xbd, 0xae, 0xf5, 0x81, 0xa8, 0x01, 0xfd, 0xa0, 0xdf, 0xdd, 0x24, 0x3b, 0x23, 0x0f, 0xd3, 0xa0, 0xdb, 0x72, 0x46, 0xaf, 0xb7, 0x08, 0x4b, 0x8e, 0x93, 0x49, 0x46, 0x9e, 0x9e, 0xbb, 0x79, 0xad, 0xbb, 0xc3, 0x82, 0x6d, 0x27, 0xbb, 0x25, 0x24, 0x5c, 0x44, 0x4c, 0xa6, 0x36, 0xde, 0x4c, 0x81, 0x55, 0xb6, 0x6a, 0x77, 0xc2, 0xbe, 0x9e, 0x31, 0xd5, 0x03, 0x97, 0x31, 0x56, 0x3c, 0xfe, 0x09, 0xe2, 0x9e, 0xff, 0xca, 0x90, 0xf8, 0x06, 0xc0, 0xd5, 0xfb, 0xc6, 0x5c, 0xa5, 0xd9, 0x80, 0x72, 0xdb, 0x13, 0x82, 0xa5, 0xdb, 0x8b, 0xee, 0x1f, 0x76, 0xe1, 0xbc, 0x85, 0x0e, 0xfc, 0x02, 0x29, 0xfa, 0xe7, 0x73, 0x82, 0x2b, 0xdf, 0x26, 0xda, 0x10, 0xaa, 0x9a, 0x47, 0xb8, 0x2a, 0xf6, 0xdc, 0x37, 0x31, 0x95, 0x20, 0x4a, 0x97, 0xc1, 0xbf, 0x3e, 0x8a, 0xbf, 0x80, 0x0d, 0x26, 0x0d, 0x77, 0xcb, 0x45, 0xe7, 0x7c, 0x40, 0x99, 0x0f, 0xdc, 0xd7, 0xf8, 0xce, 0x4e, 0xb7, 0xf6, 0x36, 0x28, 0x2f, 0xb9, 0xab, 0xd2, 0x57, 0x09, 0xa2, 0x7b, 0xf4, 0xa7, 0xa7, 0x0c, 0x9d, 0xe0, 0xa5, 0x5a, 0x1c, 0x61, 0x62, 0xa0, 0x17, 0x4d, 0x49, 0x2c, 0xf0, 0x8d, 0x6c, 0x58, 0xe9, 0x68, 0xc9, 0xbc, 0x8c, 0x53, 0xcc, 0xa2, 0x4a, 0x0a, 0x16, 0xba, 0x62, 0xdf, 0x7d, 0x10, 0x04, 0x52, 0x54, 0x3a, 0xb6, 0xe3, 0xec, 0xd6, 0xf8, 0x24, 0x5a, 0x34, 0x23, 0x12, 0x7b, 0x4f, 0x97, 0xa5, 0x36, 0x02, 0x15, 0xa6, 0x01, 0x78, 0x6a, 0xc1, 0xa7, 0xe5, 0x4e, 0xdb, 0x48, 0x73, 0x8b, 0xa6, 0xa1, 0x80, 0x62, 0x72, 0x8d, 0x06, 0x2a, 0x46, 0xcc, 0x5a, 0x3a, 0x2f, 0x04, 0x1a, 0x09, 0xd8, 0x05, 0x60, 0x94, 0x5b, 0x51, 0x3c, 0x00, 0x57, 0xdc, 0x62, 0x81, 0x43, 0x10, 0x1f, 0x7a, 0x01, 0x14, 0x92, 0xe6, 0xb6, 0x4e, 0x18, 0xf6, 0xda, 0x27, 0x08, 0xfb, 0x8b, 0x0e, 0xa1, 0x87, 0x27, 0xbf, 0x40, 0xcf, 0x19, 0xc5, 0xd6, 0x54, 0xf3, 0x3d, 0x9a, 0xc3, 0xbe, 0xde, 0xfb, 0x19, 0x8d, 0x36, 0xd9, 0x0a, 0x59, 0x36, 0xf4, 0xa4, 0x08, 0xf1, 0xa5, 0x30, 0xcf, 0xa1, 0xcc, 0x59, 0xba, 0xeb, 0x09, 0x90, 0x89, 0x64, 0x2f, 0xae, 0xbe, 0x53, 0xf5, 0xdb, 0xf4, 0xb9, 0xef, 0xaf, 0x72, 0x8e, 0xbd, 0x98, 0x00, 0x4e, 0x83, 0x7c, 0xfa, 0xb4, 0x99, 0x9f, 0xa2, 0xc5, 0x83, 0xc6, 0xba, 0x11, 0x23, 0x9d, 0x53, 0x36, 0x2d, 0x56, 0xe0, 0xa5, 0xdc, 0x93, 0x8e, 0xa9, 0xe3, 0x86, 0xd8, 0xa5, 0xa7, 0x56, 0x55, 0x9d, 0xab, 0xc5, 0xd5, 0xf7, 0x4b, 0x11, 0xad, 0x83, 0xae, 0x17, 0x4f, 0xba, 0xf6, 0xbe, 0x1e, 0x43, 0xb9, 0x93, 0x80, 0xbc, 0xb5, 0xb1, 0x34, 0xb6, 0xbf, 0xe4, 0xe6, 0x01, 0xfd, 0x0e, 0x00, 0x2b, 0x55, 0xc9, 0xc4, 0x43, 0x25, 0x4d, 0x98, 0xe2, 0x35, 0x95, 0xa0, 0x6d, 0xea, 0xbd, 0x92, 0x94, 0xbc, 0xaf, 0xc6, 0x1e, 0xe9, 0xfe, 0x8d, 0xe9, 0x6b, 0x12, 0xc4, 0x2c, 0x28, 0x86, 0xa9, 0x00, 0x6a, 0xce, 0xed, 0x1f, 0x8e, 0x1d, 0x0a, 0xeb, 0x00, 0x85, 0xd6, 0xb2, 0x67, 0x61, 0x58, 0x30, 0x1c, 0xf0, 0xdb, 0x55, 0xe1, 0x42, 0x42, 0x49, 0xd0, 0x58, 0x9b, 0xae, 0x91, 0x87, 0xf7, 0x25, 0xd0, 0x1d, 0x78, 0x13, 0xee, 0x47, 0xab, 0xa5, 0xf7, 0x32, 0x18, 0x11, 0xd5, 0x71, 0x18, 0x1f, 0xc3, 0x9f, 0xe7, 0xe9, 0x04, 0x45, 0xfa, 0xde, 0xd4, 0xfd, 0x93, 0x0d, 0x9f, 0xd8, 0x92, 0xa1, 0x71, 0xfe, 0x8e, 0xa7, 0xae, 0x94, 0x24, 0x18, 0x03, 0xe3, 0x8f, 0x13, 0x9c, 0xb6, 0x79, 0x6a, 0x97, 0x03, 0x11, 0x60, 0xb9, 0xce, 0x5e, 0xb1, 0x60, 0x4b, 0xd3, 0xd3, 0xb9, 0x43, 0x23, 0x7c, 0x33, 0xb8, 0x57, 0x64, 0x34, 0xcc, 0x1d, 0x4c, 0x0a, 0xdf, 0x63, 0x3f, 0x24, 0xf8, 0x24, 0x18, 0x82, 0x66, 0x82, 0x44, 0x6a, 0xa7, 0x16, 0xc9, 0x5d, 0x88, 0x84, 0x87, 0x49, 0x8e, 0x52, 0xbe, 0x00, 0x95, 0xfa, 0xd1, 0xe9, 0xb7, 0x3d, 0x4a, 0xf5, 0x6f, 0xbb, 0x1d, 0xd5, 0xfe, 0xc1, 0x31, 0x6b, 0x0e, 0x62, 0x1c, 0x7e, 0x96, 0xc9, 0x2f, 0xb1, 0xfd, 0xcd, 0xb2, 0xb6, 0x82, 0xc6, 0x70, 0xbf, 0xdb, 0x9f, 0x77, 0x35, 0x1c, 0x2d, 0x19, 0xad, 0xdb, 0xbf, 0x36, 0x18, 0x92, 0xf7, 0xbe, 0x39, 0x44, 0xd8, 0x71, 0x5d, 0x64, 0x1f, 0xe9, 0x46, 0xf2, 0xd7, 0xdb, 0x68, 0xe7, 0x28, 0x9a, 0x58, 0xd3, 0x70, 0xdc, 0x81, 0xc5, 0x95, 0xc1, 0x19, 0x6b, 0x99, 0x11, 0x53, 0x7a, 0x6e, 0xc5, 0xd6, 0x50, 0x0c, 0xca, 0x6f, 0xd9, 0xc2, 0x01, 0x02, 0xaf, 0xc9, 0x8a, 0xc7, 0x85, 0x1f, 0x42, 0xb2, 0xc5, 0x92, 0x8a, 0x33, 0x78, 0x1b, 0x4b, 0x20, 0x67, 0x6e, 0x37, 0xf0, 0x7f, 0xcf, 0x51, 0x29, 0x7a, 0x27, 0xaf, 0x1b, 0xbc, 0x57, 0x7e, 0xcf, 0x7b, 0xcc, 0x48, 0x3b, 0x23, 0x54, 0x72, 0xb7, 0xf9, 0x30, 0x09, 0xb5, 0xfe, 0x6a, 0xbe, 0xac, 0x16, 0x69, 0x2e, 0x55, 0x69, 0xc2, 0x67, 0x1a, 0x0a, 0x51, 0xa8, 0xcc, 0xd7, 0x89, 0x69, 0x94, 0xa0, 0x08, 0x9b, 0x2c, 0x8b, 0x6e, 0x31, 0x4e, 0xb6, 0x70, 0xdf, 0x6d, 0x1f, 0x28, 0x22, 0xa4, 0xc1, 0xaf, 0x80, 0xec, 0x00, 0xee, 0x11, 0x91, 0x47, 0xb1, 0x3e, 0xe7, 0xf0, 0xfd, 0xc9, 0x39, 0x64, 0xa4, 0x0e, 0x02, 0x83, 0x16, 0x88, 0x5f, 0x46, 0x7a, 0x96, 0xc5, 0xa2, 0xfe, 0x7f, 0xef, 0xb0, 0x6b, 0xb4, 0x1b, 0x0c, 0xfc, 0x56, 0x76, 0x7b, 0x70, 0xf8, 0xd5, 0xd0, 0x5e, 0xa6, 0xa5, 0x10, 0xc9, 0x26, 0x25, 0xd4, 0xf4, 0x7d, 0xd3, 0xef, 0x77, 0xb6, 0x23, 0x51, 0x93, 0xde, 0x77, 0x2b, 0xc3, 0x53, 0x4c, 0x54, 0x93, 0x3f, 0xb1, 0xec, 0xb5, 0x5f, 0xfe, 0x3f, 0x52, 0x09, 0xc2, 0xeb, 0x9e, 0x6d, 0xfd, 0x46, 0xaf, 0x1b, 0x90, 0xfa, 0x8f, 0xc5, 0xf1, 0xf2, 0x90, 0x46, 0x23, 0x7a, 0xdf, 0xe4, 0xe6, 0xa1, 0x5c, 0xd2, 0x2b, 0xe2, 0xa9, 0xf9, 0xca, 0x04, 0x81, 0xf9, 0x77, 0x3f, 0x4c, 0x6a, 0xf3, 0xa0, 0xf0, 0x67, 0x7f, 0xaf, 0xe9, 0x4d, 0x96, 0x4e, 0x9c, 0xc0, 0xdb, 0xe4, 0xe8, 0xef, 0x51, 0xbb, 0xff, 0x19, 0xca, 0xa7, 0x74, 0x51, 0xa2, 0xe9, 0x95, 0x7e, 0xac, 0x52, 0xfa, 0xa5, 0x6d, 0xac, 0x5e, 0x6b, 0x88, 0x55, 0xae, 0xd5, 0x7a, 0x2d, 0x60, 0x53, 0x87, 0xb2, 0x06, 0xfd, 0xf4, 0x6a, 0x23, 0x1c, 0x77, 0x82, 0x3d, 0xec, 0xec, 0xb4, 0x33, 0xa0, 0x49, 0x6e, 0xd1, 0xa7, 0xd4, 0x30, 0xa2, 0x2e, 0x94, 0x35, 0x05, 0xe6, 0x05, 0x57, 0x83, 0x07, 0x10, 0x2d, 0x60, 0x95, 0x39, 0x76, 0x70, 0xe2, 0x1b, 0xba, 0x2c, 0x54, 0x11, 0x2e, 0x05, 0x68, 0x37, 0xd9, 0xf9, 0xf7, 0x91, 0xf5, 0x63, 0xb8, 0x89, 0x98, 0x17, 0x07, 0x9f, 0x93, 0xae, 0xe4, 0x5c, 0x9a, 0x1f, 0x3f, 0x87, 0xa6, 0x90, 0x73, 0x9c, 0x98, 0x6b, 0x10, 0x7a, 0x1f, 0xb3, 0xdd, 0x5c, 0xdb, 0x99, 0x1d, 0x0a, 0xc3, 0x4a, 0x12, 0x51, 0xc4, 0x0c, 0xc0, 0xb0, 0xaa, 0x89, 0xf3, 0x54, 0x44, 0x6a, 0x83, 0x47, 0xc3, 0x28, 0xd7, 0xe4, 0x64, 0x1f, 0xa8, 0x8e, 0x4f, 0xe5, 0x07, 0xa1, 0xbe, 0xd9, 0xa2, 0xa9, 0x61, 0xff, 0x43, 0xd2, 0x02, 0x0b, 0x99, 0xa0, 0x65, 0xbb, 0x3b, 0xe0, 0x72, 0x6a, 0xea, 0xdf, 0x95, 0xe3, 0x16, 0xd9, 0x66, 0x73, 0xa4, 0xb4, 0x85, 0x42, 0xef, 0xee, 0xc8, 0xe2, 0x0d, 0xd5, 0x99, 0x29, 0x53, 0xf6, 0x99, 0x3c, 0x1b, 0xd7, 0x8a, 0xed, 0xc4, 0xe9, 0x6b, 0x47, 0xfb, 0xb8, 0xe4, 0x66, 0x39, 0x65, 0xe5, 0x8d, 0x8d, 0x56, 0x8b, 0x72, 0x9c, 0x2c, 0x43, 0xdc, 0xe6, 0xf5, 0x31, 0x70, 0x4b, 0xa3, 0xd3, 0xc8, 0xcd, 0xbe, 0xe1, 0xc6, 0x97, 0x55, 0x78, 0x28, 0x3f, 0x3a, 0x78, 0x5c, 0x48, 0x6f, 0x2b, 0x95, 0xeb, 0xdb, 0x27, 0x1e, 0x16, 0x41, 0x75, 0xef, 0xb6, 0x73, 0xf2, 0x7e, 0x32, 0xc3, 0xf6, 0xd7, 0x37, 0xbb, 0x34, 0xef, 0xbb, 0x0e, 0xe1, 0x35, 0x3c, 0xcd, 0x19, 0x6b, 0x49, 0xde, 0x7e, 0xb4, 0x44, 0xab, 0x22, 0xee, 0x66, 0x17, 0xa7, 0x41, 0x03, 0xb6, 0xa4, 0xf8, 0x10, 0x3d, 0x4b, 0x90, 0xe2, 0x37, 0x49, 0x0f, 0x38, 0xfa, 0xee, 0x98, 0x7c, 0xda, 0x8e, 0x3b, 0x46, 0x9c, 0x27, 0x11, 0x22, 0x2e, 0x43, 0x89, 0x93, 0x95, 0x20, 0xfd, 0x58, 0x26, 0x0f, 0x89, 0xed, 0xf9, 0x1a, 0x1c, 0x55, 0x9b, 0xe9, 0xcf, 0x17, 0x03, 0xe7, 0x76, 0x87, 0xc7, 0xa0, 0x75, 0x46, 0x90, 0x6d, 0xd6, 0x0c, 0xcc, 0x54, 0x98, 0xa5, 0xa2, 0x2a, 0x49, 0x3a, 0x2b, 0xfa, 0xd7, 0xd2, 0xdf, 0xab, 0xa3, 0x18, 0x4d, 0xdc, 0xd7, 0x5f, 0x10, 0x13, 0xfa, 0xe3, 0xfe, 0x17, 0xc1, 0x52, 0xa2, 0x9a, 0x28, 0x8b, 0xed, 0x1b, 0xc2, 0xa5, 0x28, 0x0b, 0x4d, 0x33, 0x2d, 0x2f, 0x8a, 0xc6, 0xd7, 0x45, 0x4c, 0xb4, 0xb7, 0xea, 0xce, 0x18, 0x08, 0xbb, 0x49, 0x1a, 0xe5, 0xbb, 0xc6, 0x71, 0xba, 0xf5, 0x31, 0x26, 0xf9, 0x62, 0xb0, 0x9a, 0x0e, 0x0c, 0x33, 0xca, 0x94, 0x74, 0x4b, 0xd2, 0xc9, 0x31, 0x3f, 0xb0, 0x3f, 0xdb, 0x5d, 0x4b, 0xd5, 0x27, 0x8e, 0xb4, 0xe6, 0x53, 0x2d, 0xab, 0xc0, 0xc5, 0x19, 0x65, 0x58, 0xef, 0x09, 0x8c, 0x3c, 0x75, 0x20, 0x88, 0xc8, 0x92, 0xc2, 0xfd, 0x9d, 0xb8, 0xa5, 0x94, 0x4f, 0x76, 0x2b, 0xff, 0x5e, 0x9f, 0xef, 0x37, 0x68, 0xa9, 0x9d, 0x08, 0x9c, 0x53, 0x08, 0xd0, 0x72, 0x8a, 0x76, 0x84, 0x99, 0x8e, 0x3e, 0xf3, 0x31, 0x51, 0x96, 0x4f, 0x3b, 0x20, 0xa6, 0xe9, 0x4e, 0x84, 0xe1, 0x3c, 0x8b, 0x6b, 0x94, 0x2d, 0xd3, 0x83, 0xbf, 0x91, 0x37, 0xe7, 0x25, 0xf0, 0xaf, 0xfd, 0x9f, 0x88, 0x0f, 0x9e, 0xb5, 0x95, 0x38, 0x78, 0x6f, 0xd0, 0x8b, 0xb1, 0x69, 0x36, 0xa4, 0xcd, 0x26, 0x0a, 0x44, 0xd2, 0xa6, 0x1d, 0x8e, 0xaa, 0x3b, 0x4d, 0x77, 0xc8, 0x98, 0x4c, 0x78, 0x0f, 0x2b, 0xa3, 0x85, 0xef, 0xad, 0xf6, 0x43, 0xd1, 0xf7, 0x89, 0x76, 0xb5, 0x17, 0x03, 0xb8, 0x19, 0xa3, 0x72, 0x71, 0x1d, 0x4d, 0x90, 0x03, 0xe6, 0xb8, 0x45, 0x45, 0x40, 0x8a, 0x6c, 0x33, 0x87, 0xc3, 0xda, 0xe4, 0xc7, 0x4d, 0x9c, 0xbc, 0x22, 0xd3, 0x81, 0xe2, 0x72, 0xd7, 0xd9, 0xf4, 0x30, 0xff, 0x7b, 0xfa, 0x95, 0xb0, 0x0d, 0x99, 0xfe, 0xde, 0x7f, 0x8a, 0x95, 0x23, 0xd9, 0x4a, 0x2e, 0x0e, 0x37, 0x12, 0x6f, 0xbd, 0x11, 0x09, 0x34, 0xae, 0xc0, 0xb9, 0x31, 0xd2, 0x3e, 0xbf, 0xda, 0xe3, 0x2e, 0xc7, 0x7f, 0xf8, 0x1c, 0xb8, 0xbc, 0x57, 0x05, 0x2c, 0x10, 0x8a, 0x1a, 0x23, 0xcc, 0xb5, 0xc1, 0xf8, 0x2f, 0x26, 0xdd, 0x94, 0xcf, 0x2e, 0x4f, 0xe1, 0x3a, 0x2f, 0xbd, 0x81, 0xde, 0xf7, 0x91, 0xc1, 0x26, 0x4c, 0x45, 0xc8, 0xe6, 0xc8, 0xdf, 0x15, 0xf9, 0xe8, 0xb7, 0x28, 0x29, 0x5f, 0x80, 0x7e, 0x4e, 0xb0, 0x86, 0xc3, 0xba, 0xfb, 0x35, 0x44, 0xd5, 0x17, 0xdb, 0xa3, 0x05, 0xe2, 0xaf, 0xce, 0xd1, 0xd5, 0x11, 0x31, 0x45, 0xdc, 0x13, 0x2b, 0x98, 0x64, 0x39, 0xbf, 0x0c, 0xb5, 0x7d, 0x8d, 0x16, 0x82, 0x96, 0x00, 0xbf, 0xbe, 0x7a, 0xc8, 0x4a, 0xb2, 0x22, 0x8b, 0x17, 0x4d, 0x8d, 0xd7, 0xc7, 0xbb, 0x07, 0x5c, 0xa1, 0x39, 0xab, 0x58, 0x34, 0x27, 0x27, 0x52, 0x3e, 0x5e, 0xbf, 0x0b, 0xcd, 0xc5, 0x95, 0xb2, 0xa4, 0x1f, 0x27, 0x57, 0xe0, 0x27, 0x19, 0xa2, 0xdc, 0xdf, 0x35, 0xc5, 0x51, 0x25, 0xb0, 0xaf, 0xc2, 0x87, 0xae, 0x82, 0x17, 0x58, 0x09, 0x48, 0x88, 0x03, 0x4e, 0xe2, 0xbc, 0xa0, 0x09, 0x40, 0x32, 0xc5, 0x43, 0xd8, 0xe1, 0x9f, 0x48, 0x50, 0x1b, 0x41, 0xae, 0x7e, 0xb7, 0x3b, 0x92, 0x93, 0x6f, 0x6f, 0x25, 0x93, 0x87, 0x20, 0x68, 0x09, 0xb0, 0x4c, 0x33, 0xf8, 0x2b, 0x3c, 0x7c, 0x14, 0x31, 0x59, 0xd6, 0x32, 0x93, 0x41, 0x38, 0xfe, 0x9e, 0x1a, 0x00, 0xec, 0x41, 0x27, 0x37, 0x71, 0x72, 0x98, 0x17, 0x72, 0xcd, 0xa7, 0xca, 0xfd, 0x7e, 0xe0, 0x75, 0x37, 0x62, 0xc0, 0x75, 0x95, 0x69, 0x82, 0xe9, 0x4f, 0x3f, 0x36, 0x70, 0x12, 0x2b, 0x13, 0x34, 0xf6, 0x37, 0x0e, 0x27, 0xaf, 0x91, 0xac, 0x8c, 0x07, 0x31, 0x14, 0xba, 0x8c, 0xbc, 0x68, 0x1c, 0x85, 0xa8, 0x55, 0x7d, 0x2b, 0xa2, 0xe9, 0x82, 0x16, 0x2c, 0xa5, 0x78, 0xf6, 0x8b, 0xd4, 0x50, 0x83, 0xe0, 0x1b, 0xe8, 0xb7, 0x95, 0x50, 0x8d, 0x3a, 0xfa, 0x8f, 0xbd, 0x1e, 0x30, 0x8b, 0x31, 0xcc, 0x47, 0x23, 0x1b, 0x3e, 0xa3, 0x36, 0xac, 0x6f, 0xa4, 0xb7, 0xd9, 0x10, 0x86, 0x04, 0x5f, 0x7d, 0x85, 0x73, 0x04, 0xef, 0x45, 0x2e, 0x20, 0xf3, 0x72, 0x42, 0x5d, 0x1b, 0xa3, 0xf2, 0xbb, 0xf3, 0x85, 0x51, 0xd7, 0x36, 0x35, 0x10, 0x6c, 0x42, 0xed, 0x94, 0x1a, 0xca, 0xe3, 0x4b, 0x66, 0xcb, 0x6e, 0x41, 0x03, 0xc1, 0x6b, 0xee, 0x50, 0x1a, 0xdf, 0x53, 0x21, 0xeb, 0xde, 0x45, 0xc2, 0xe2, 0xab, 0x08, 0x39, 0x7c, 0x20, 0x1f, 0xcc, 0x77, 0x50, 0x63, 0xc3, 0x8b, 0x6c, 0x53, 0x6f, 0x55, 0xe3, 0xab, 0x6b, 0x94, 0xcd, 0x38, 0x22, 0x97, 0x8a, 0xea, 0x91, 0xf6, 0xa6, 0x2b, 0x4f, 0x81, 0x00, 0x6f, 0xca, 0x76, 0x2c, 0x0c, 0xd3, 0xf7, 0x15, 0x4d, 0x5d, 0xba, 0xe7, 0xc1, 0x81, 0x03, 0x2c, 0xd9, 0xc6, 0xcf, 0x35, 0xb2, 0xa0, 0x52, 0xbb, 0x30, 0x36, 0xa4, 0xc6, 0x4c, 0x68, 0xb8, 0xce, 0xaf, 0x11, 0x8d, 0x20, 0x7f, 0x89, 0xa8, 0x84, 0x79, 0x6f, 0xc1, 0x1d, 0x40, 0xa5, 0xbd, 0x90, 0xf4, 0x9b, 0xdc, 0x69, 0x07, 0xd1, 0x34, 0xba, 0x4c, 0x97, 0x5e, 0x04, 0x51, 0x18, 0x6f, 0x5b, 0xef, 0x96, 0x29, 0xc6, 0x1f, 0xf7, 0x73, 0xe5, 0x0f, 0x81, 0x07, 0xd6, 0x76, 0xe2, 0x6b, 0x58, 0x24, 0x73, 0x22, 0x31, 0xdd, 0xbd, 0x23, 0xce, 0x67, 0x3d, 0x8a, 0x2a, 0xe2, 0x64, 0x8e, 0xf1, 0x58, 0xe2, 0xb3, 0xe4, 0x95, 0x24, 0x40, 0x7f, 0x39, 0x1b, 0xf4, 0xd9, 0x0b, 0x40, 0xf5, 0xcd, 0x90, 0xd5, 0x09, 0x57, 0xdd, 0x6d, 0x08, 0x40, 0xa9, 0xae, 0x92, 0xfe, 0xa6, 0x56, 0xfd, 0xd6, 0x12, 0x7c, 0x91, 0x43, 0x88, 0x19, 0xf8, 0x9b, 0x1d, 0xc6, 0xf0, 0xf0, 0xa8, 0xc7, 0x43, 0x34, 0x61, 0x49, 0xf9, 0xa1, 0xae, 0xe8, 0xcc, 0x58, 0x39, 0x74, 0xdc, 0x49, 0x46, 0xf5, 0xa4, 0x52, 0x44, 0xec, 0x2d, 0xab, 0xa1, 0xdc, 0x81, 0x81, 0xe3, 0x09, 0x63, 0xe1, 0xf5, 0x80, 0x3d, 0xd8, 0xbe, 0x57, 0x5a, 0xd9, 0xf8, 0x36, 0x55, 0x5e, 0x40, 0x17, 0xd2, 0xd2, 0x69, 0x49, 0x6b, 0xaf, 0x16, 0xbb, 0xee, 0xe4, 0x88, 0x77, 0xc5, 0x79, 0xb4, 0x6d, 0xb5, 0x75, 0x99, 0x72, 0xcc, 0x00, 0xd0, 0x88, 0x94, 0xc5, 0x65, 0x60, 0x8d, 0x9a, 0xe5, 0x1d, 0xda, 0x63, 0xb8, 0x5b, 0x3b, 0x33, 0xb1, 0x70, 0x3b, 0xb5, 0xe4, 0xf1, 0xab, 0xcb, 0xb8, 0x79, 0x4e, 0x74, 0x3d, 0xa5, 0xd6, 0xf3, 0xbf, 0x63, 0x0f, 0x2e, 0x9b, 0x6d, 0x5b, 0x54, 0x51, 0x10, 0x5e, 0xc2, 0xdb, 0x32, 0xfa, 0x28, 0x3d, 0x93, 0x7e, 0xe7, 0x5e, 0x53, 0x1a, 0xbe, 0x16, 0xb5, 0x97, 0xa6, 0x88, 0x22, 0x44, 0xfa, 0xb2, 0x71, 0x34, 0xdb, 0x42, 0x65, 0xa6, 0xd3, 0xab, 0x77, 0xc5, 0xb8, 0x79, 0xd6, 0x92, 0xd4, 0xe1, 0xad, 0x1e, 0x42, 0x9d, 0xa4, 0xfc, 0x9b, 0xf7, 0xa9, 0xf6, 0xd3, 0x23, 0xf0, 0xff, 0x5d, 0xd1, 0x38, 0x69, 0x96, 0x03, 0x51, 0x58, 0x60, 0x1c, 0xdb, 0x77, 0x0d, 0x3a, 0x50, 0xe9, 0x80, 0xc6, 0x45, 0x83, 0x8e, 0x4a, 0xec, 0x38, 0xaa, 0x82, 0xde, 0xd4, 0xc2, 0xb5, 0x17, 0xee, 0x64, 0x45, 0x42, 0x17, 0x25, 0x86, 0x38, 0x58, 0x43, 0xcc, 0xc3, 0xdc, 0x89, 0xc8, 0xa7, 0xe9, 0x73, 0x14, 0xe3, 0x15, 0x93, 0x0c, 0x34, 0xb6, 0x33, 0xe0, 0xdb, 0x9a, 0x3c, 0xe7, 0xa0, 0xf8, 0x57, 0x36, 0x17, 0xa7, 0x51, 0x72, 0x22, 0x8e, 0xc4, 0xe2, 0xb7, 0x5c, 0xf4, 0xc8, 0xe3, 0x79, 0xf7, 0xf2, 0x0f, 0x3c, 0x19, 0x8c, 0x83, 0x5e, 0x7e, 0x38, 0x28, 0xae, 0x09, 0x61, 0x92, 0x07, 0x7d, 0xcb, 0x3d, 0x7f, 0xe2, 0x6f, 0x17, 0xe2, 0x2b, 0x87, 0x3f, 0x5f, 0x15, 0xe5, 0x0d, 0x80, 0x52, 0x88, 0x52, 0x60, 0xe7, 0x71, 0xe1, 0x18, 0xd3, 0xb3, 0x4e, 0x7a, 0xf1, 0xca, 0xf5, 0x02, 0x1f, 0x2d, 0x3e, 0x09, 0xa0, 0x27, 0x20, 0x3c, 0xbf, 0xe2, 0xe4, 0x4d, 0xb5, 0xc5, 0x2c, 0xe8, 0xcd, 0xff, 0x33, 0xe9, 0xc6, 0x64, 0x56, 0xcc, 0x79, 0x79, 0xd4, 0x64, 0xbc, 0xca, 0xd2, 0xd0, 0x85, 0x84, 0xa2, 0xac, 0x53, 0x3f, 0x44, 0x84, 0xc9, 0x1c, 0x2d, 0x8e, 0x9c, 0x10, 0x48, 0x98, 0xb0, 0x7f, 0x3b, 0x3f, 0x7e, 0x0d, 0xeb, 0x62, 0xb9, 0xb1, 0x42, 0xd6, 0x31, 0x0b, 0x30, 0x5b, 0xf7, 0xf7, 0xef, 0xcf, 0xc2, 0x62, 0x8c, 0xa2, 0x91, 0x5c, 0xa3, 0x8a, 0x92, 0x6f, 0x6a, 0x78, 0x43, 0x2f, 0xf0, 0xca, 0xd7, 0x13, 0xa7, 0xc2, 0xdb, 0x83, 0x21, 0x37, 0x19, 0x32, 0x17, 0x8a, 0xbd, 0xae, 0xaf, 0xdc, 0xb6, 0x36, 0xfe, 0x7e, 0x5f, 0xcb, 0xcc, 0xa9, 0x5f, 0x89, 0x98, 0x70, 0xce, 0x38, 0xdc, 0xf2, 0x99, 0x1f, 0x93, 0xd4, 0x27, 0x18, 0xf7, 0xef, 0x3c, 0xea, 0x8f, 0x45, 0x1e, 0xd2, 0x69, 0x3a, 0xf7, 0x63, 0xa5, 0x01, 0x7b, 0x91, 0x33, 0x54, 0xca, 0x08, 0xdc, 0x68, 0x98, 0xc2, 0x87, 0x20, 0x8b, 0xd8, 0xb5, 0x81, 0xe4, 0x98, 0x4f, 0x66, 0x62, 0xd9, 0xa1, 0x74, 0x63, 0x8b, 0xa6, 0x51, 0x4d, 0x92, 0x86, 0x11, 0x2c, 0xd5, 0x5d, 0xf1, 0x9d, 0x91, 0x3e, 0x48, 0xea, 0xf4, 0x78, 0xba, 0x76, 0xe7, 0x17, 0xaf, 0x5c, 0x2b, 0xae, 0x03, 0x53, 0xa7, 0x54, 0x00, 0xd5, 0x00, 0xed, 0x89, 0x80, 0x6b, 0xab, 0x97, 0xbc, 0xbf, 0xd4, 0xea, 0x9e, 0xcf, 0xc5, 0xf8, 0x0c, 0xf6, 0x37, 0x2a, 0x22, 0xf3, 0xc1, 0x47, 0xd5, 0xf7, 0x9e, 0x30, 0xd6, 0xfd, 0xb1, 0xcf, 0xb9, 0x5a, 0xc6, 0x4a, 0x57, 0x95, 0x1b, 0x7c, 0x71, 0x78, 0x1f, 0xa5, 0x96, 0x67, 0x79, 0x60, 0x46, 0xf1, 0x4c, 0xd6, 0x57, 0xa5, 0xb9, 0x32, 0x98, 0x27, 0xa6, 0x55, 0xb5, 0x83, 0xbe, 0xca, 0x5a, 0xc0, 0xb9, 0xfc, 0x9b, 0xb9, 0xde, 0xa6, 0x94, 0x28, 0xc6, 0x8c, 0x4c, 0x04, 0x62, 0x69, 0xe0, 0x0d, 0x40, 0x28, 0xdd, 0xa5, 0x09, 0x56, 0xed, 0xe1, 0x4f, 0xd8, 0xb6, 0xe0, 0x85, 0xd9, 0xff, 0x5b, 0x4f, 0x07, 0x14, 0x7e, 0xfd, 0xff, 0x6c, 0xf6, 0x51, 0x05, 0x8a, 0x4c, 0x89, 0xf9, 0x21, 0x71, 0x99, 0x86, 0x7b, 0x9a, 0xb9, 0x9d, 0x1b, 0x4d, 0x1f, 0x22, 0xa2, 0xbc, 0x0e, 0xe5, 0xef, 0x53, 0x0f, 0xd3, 0x8a, 0x8d, 0x7f, 0x6e, 0x43, 0x0b, 0x49, 0x7a, 0x16, 0xe7, 0xf5, 0xf9, 0x52, 0x46, 0xe2, 0x5a, 0xfb, 0x2c, 0xcf, 0xee, 0x6c, 0x95, 0xa0, 0x9b, 0x40, 0xc1, 0x5f, 0xd4, 0x73, 0xcf, 0x82, 0xc8, 0xc5, 0x8d, 0x6c, 0xda, 0x5f, 0x8f, 0x36, 0x52, 0xb9, 0x7e, 0xae, 0x52, 0xbb, 0xb3, 0xa0, 0x0b, 0x23, 0x04, 0x55, 0x30, 0x26, 0xde, 0x5a, 0xab, 0x5a, 0x95, 0x82, 0x90, 0xd3, 0xf7, 0x2e, 0x4f, 0x8c, 0x27, 0xcc, 0x2d, 0x09, 0xa9, 0x9e, 0xf5, 0x3b, 0xb9, 0xbd, 0xea, 0xa4, 0xe1, 0x5d, 0x01, 0xbc, 0xca, 0x52, 0x4d, 0x92, 0x53, 0xd4, 0xbb, 0xb6, 0xe0, 0x7f, 0xff, 0x57, 0xf4, 0x9d, 0xce, 0xa9, 0x03, 0xa8, 0x4e, 0x89, 0x81, 0x0b, 0xcb, 0x64, 0x3f, 0x29, 0xab, 0x55, 0xf7, 0xa0, 0xa4, 0x8d, 0x26, 0xcf, 0x2c, 0xf8, 0x19, 0x96, 0x31, 0x1e, 0x4b, 0x5c, 0x0b, 0x47, 0xee, 0x57, 0xaf, 0xe2, 0xc8, 0x07, 0x25, 0x27, 0x40, 0x04, 0x3c, 0xfc, 0xb9, 0xfa, 0x7c, 0x15, 0x1e, 0xf2, 0x5c, 0x60, 0xbe, 0xd3, 0xb5, 0xa0, 0x5b, 0x28, 0x77, 0x57, 0x7d, 0x23, 0x9b, 0xea, 0x0c, 0xe2, 0x58, 0x00, 0x1e, 0xf2, 0x9a, 0x2b, 0x0e, 0x12, 0xb0, 0xca, 0xce, 0x39, 0x44, 0x2e, 0x7e, 0xda, 0x91, 0xfb, 0x3d, 0x66, 0xd0, 0xd1, 0x3f, 0x13, 0xf3, 0x2c, 0x1f, 0xdc, 0x96, 0x89, 0x77, 0xc8, 0x33, 0xcb, 0xaf, 0x70, 0x95, 0xdc, 0x12, 0xbb, 0x8f, 0x97, 0x27, 0xed, 0xed, 0xe6, 0x3e, 0xe0, 0xab, 0x27, 0x49, 0x90, 0x65, 0xd5, 0xed, 0xde, 0x0f, 0x64, 0xd9, 0x8d, 0xe6, 0x6c, 0x57, 0x91, 0xa6, 0x0a, 0x20, 0x89, 0xfe, 0x84, 0x75, 0x8a, 0x41, 0x2b, 0x6b, 0x1e, 0x5e, 0x86, 0x87, 0x8c, 0x12, 0xac, 0x8a, 0x5a, 0x5c, 0xf2, 0x8e, 0x11, 0x32, 0xc6, 0x52, 0x40, 0x72, 0xdb, 0xd3, 0xc3, 0x1b, 0x87, 0x1c, 0x45, 0xbd, 0x69, 0x5e, 0x04, 0x2e, 0x4e, 0x43, 0xd4, 0x7f, 0x55, 0x80, 0x67, 0x2e, 0x52, 0xaa, 0xcb, 0x9d, 0x71, 0x4a, 0x34, 0xc3, 0x1c, 0x33, 0xfc, 0x22, 0x1e, 0x13, 0xe8, 0xf9, 0x08, 0x49, 0xad, 0xba, 0xd3, 0xf6, 0xb3, 0xbe, 0xc8, 0x57, 0x18, 0x38, 0x9d, 0x52, 0xf8, 0x68, 0xe1, 0x4e, 0xec, 0x11, 0x9a, 0x48, 0xd0, 0x2c, 0x2c, 0x23, 0xca, 0xde, 0x7c, 0x40, 0x87, 0xa8, 0x56, 0x4f, 0xc8, 0xde, 0x0c, 0x65, 0x1e, 0x5a, 0x60, 0x4e, 0xf1, 0x71, 0xa4, 0x24, 0xc7, 0x26, 0x20, 0x20, 0xc3, 0x9e, 0xb4, 0xb1, 0x6c, 0xd4, 0xbf, 0xcb, 0xb1, 0x8e, 0x3f, 0x82, 0x29, 0x90, 0x39, 0xd7, 0x9f, 0x0f, 0x5b, 0xd2, 0xcd, 0x68, 0xe0, 0xd1, 0x68, 0x12, 0xb4, 0x1f, 0x5d, 0xd1, 0xd8, 0xc8, 0x5b, 0x2d, 0x09, 0xac, 0x91, 0x23, 0x9c, 0xd3, 0xb9, 0x1a, 0xad, 0x00, 0x55, 0x19, 0x78, 0x89, 0x38, 0x36, 0x07, 0x65, 0x49, 0x52, 0x0e, 0x87, 0x84, 0x03, 0x13, 0x6a, 0x41, 0xd2, 0xd1, 0xee, 0xb9, 0xa7, 0xdf, 0x62, 0xc6, 0x81, 0x8d, 0xe2, 0xea, 0x6a, 0x0f, 0xe3, 0x93, 0xab, 0xdd, 0x0c, 0x9d, 0x3c, 0x59, 0x48, 0x19, 0x7e, 0xb2, 0x19, 0x4d, 0x2c, 0x09, 0x2f, 0xfb, 0x8f, 0xd3, 0x39, 0xe7, 0xf2, 0x7f, 0xfb, 0x93, 0x56, 0x58, 0xa0, 0x4d, 0x67, 0xac, 0x52, 0x6b, 0xae, 0x2e, 0x09, 0xd6, 0x07, 0x99, 0xa0, 0xc5, 0x56, 0x96, 0x2e, 0xcb, 0x76, 0xe0, 0x93, 0x14, 0x72, 0xa6, 0x51, 0xec, 0xf8, 0x31, 0x9e, 0x80, 0x0a, 0xc6, 0xb7, 0xe9, 0xf7, 0xce, 0x76, 0x66, 0x8a, 0x34, 0x27, 0xe9, 0x81, 0x0f, 0x98, 0xd6, 0x40, 0x81, 0x6f, 0x07, 0xc7, 0xde, 0xc0, 0x13, 0xe2, 0x11, 0xdf, 0xd0, 0x9f, 0x3c, 0x73, 0x16, 0x05, 0x9f, 0xcc, 0xc6, 0x03, 0xbb, 0x77, 0x0b, 0xa7, 0xb7, 0x0f, 0xe0, 0x91, 0x02, 0x55, 0xd3, 0xa6, 0x3a, 0x83, 0x08, 0x09, 0x4d, 0xde, 0x80, 0x47, 0xde, 0x8b, 0x9b, 0xd1, 0xea, 0xa3, 0xdc, 0xb0, 0xab, 0x8a, 0xed, 0x74, 0xbc, 0x7c, 0xe3, 0x6d, 0x7f, 0x68, 0xc2, 0x1e, 0xbc, 0x02, 0x44, 0xef, 0x8a, 0x14, 0xd6, 0x22, 0x73, 0x14, 0xe4, 0x08, 0xd3, 0xfc, 0x56, 0x75, 0x81, 0x56, 0x5b, 0x71, 0xb1, 0x96, 0x65, 0x30, 0x19, 0xad, 0x75, 0x45, 0x53, 0xdb, 0x98, 0x12, 0x83, 0xc5, 0xb1, 0x83, 0x39, 0xc7, 0x7a, 0xfc, 0x99, 0x8b, 0xc6, 0x8f, 0xb9, 0xdb, 0x09, 0x73, 0x4a, 0xb3, 0x19, 0xb1, 0x7b, 0x9b, 0x36, 0x21, 0x1a, 0x33, 0x49, 0x95, 0xfc, 0x10, 0x69, 0x54, 0xa0, 0xc6, 0xa3, 0xca, 0x0f, 0x46, 0xfb, 0x7d, 0x06, 0x6b, 0xae, 0x43, 0x57, 0xcf, 0xba, 0xb3, 0x8d, 0xe3, 0xa0, 0xd9, 0xcf, 0x3f, 0x69, 0x2e, 0x07, 0x36, 0xe7, 0xc6, 0x43, 0xae, 0x3d, 0xcc, 0x5b, 0x2e, 0xa2, 0x2c, 0xd4, 0x39, 0x61, 0x8f, 0x04, 0xdb, 0x24, 0x8c, 0x77, 0x81, 0x73, 0x1c, 0x92, 0x0e, 0x78, 0x4f, 0x76, 0x2a, 0x05, 0x3e, 0x27, 0xdd, 0xd8, 0x41, 0xee, 0x5e, 0x1d, 0x62, 0xfb, 0x25, 0x34, 0x11, 0x4f, 0x47, 0xb5, 0x19, 0xd9, 0x03, 0xb1, 0xd2, 0xdf, 0x98, 0x3b, 0x98, 0xa0, 0x5a, 0x27, 0x7d, 0x38, 0x05, 0x12, 0x3b, 0xc3, 0x51, 0xa3, 0x6d, 0xc5, 0xc7, 0x0f, 0xfe, 0xca, 0xd2, 0xe3, 0xe1, 0x49, 0x19, 0xfe, 0x02, 0xce, 0x0c, 0xdc, 0x7d, 0x58, 0xbd, 0x1b, 0x0f, 0x00, 0xf2, 0x37, 0xc9, 0xdc, 0x78, 0x99, 0x0c, 0x23, 0xba, 0xd0, 0xb1, 0x92, 0x92, 0x1e, 0x88, 0x0e, 0x5e, 0x36, 0x04, 0x8a, 0x57, 0x44, 0x34, 0x2b, 0x1e, 0x2e, 0xf5, 0xaa, 0x98, 0x19, 0x67, 0xfb, 0xfc, 0x30, 0x9d, 0x2c, 0x2a, 0xa0, 0x99, 0x8f, 0x3f, 0xe7, 0x77, 0x1b, 0x66, 0x4f, 0xe8, 0x10, 0xf1, 0xb5, 0xe2, 0xda, 0xa8, 0x8f, 0x96, 0x38, 0x60, 0x2e, 0xa3, 0x9d, 0xd0, 0x40, 0x89, 0xd7, 0xa1, 0x98, 0x60, 0xee, 0xc4, 0x32, 0xca, 0x4f, 0x08, 0x71, 0x26, 0x29, 0xec, 0xac, 0x06, 0x18, 0xb1, 0xe9, 0xe3, 0x01, 0xb4, 0xe8, 0x10, 0x3d, 0xfb, 0x64, 0xed, 0xf9, 0x0e, 0x95, 0x5d, 0xdc, 0x08, 0xf9, 0x7a, 0xeb, 0xed, 0x54, 0x87, 0xaa, 0x3e, 0xf6, 0x25, 0x84, 0xcb, 0x3c, 0xca, 0x6d, 0xc9, 0x59, 0x70, 0xc6, 0x24, 0x56, 0x8a, 0x81, 0x17, 0x58, 0x3c, 0x85, 0xf9, 0x22, 0xcb, 0x54, 0x5a, 0xda, 0x53, 0xeb, 0x4e, 0x10, 0xb8, 0xea, 0x09, 0xfc, 0xde, 0xf4, 0xac, 0x07, 0x1d, 0x59, 0x5f, 0x8e, 0xef, 0xf2, 0xa0, 0xe2, 0xec, 0x4d, 0xda, 0x93, 0xf9, 0x0a, 0x3a, 0xee, 0xbc, 0x85, 0xbe, 0xc4, 0x53, 0xb6, 0x8f, 0x6d, 0x45, 0x55, 0x90, 0x0d, 0xb8, 0x41, 0x37, 0x16, 0xe5, 0x22, 0x9c, 0x0e, 0xca, 0x4d, 0xcf, 0x93, 0x1e, 0xe9, 0x6f, 0x9c, 0x8a, 0x50, 0x78, 0x01, 0x16, 0xb8, 0x5d, 0x3e, 0xe2, 0x13, 0x57, 0x74, 0x16, 0x34, 0xfc, 0xb0, 0x1b, 0x32, 0x13, 0x70, 0x0c, 0x11, 0xa7, 0x63, 0x67, 0x9f, 0x5a, 0x71, 0x09, 0x9d, 0xfc, 0xfb, 0x59, 0x1f, 0x5c, 0x64, 0xc3, 0x36, 0x5e, 0xd0, 0x68, 0xcb, 0x4e, 0x2b, 0x13, 0xce, 0x74, 0x6e, 0x6f, 0x91, 0xe9, 0x1d, 0x78, 0x6e, 0xa9, 0x14, 0x30, 0xb0, 0xe8, 0x84, 0x93, 0xb1, 0xaa, 0x39, 0xcc, 0x3f, 0x8e, 0x1e, 0xa9, 0x44, 0xea, 0x02, 0x4d, 0xa6, 0x1d, 0x9c, 0x25, 0x6d, 0x21, 0xcd, 0x1d, 0x24, 0x60, 0x26, 0x13, 0x81, 0xc9, 0xaa, 0x8b, 0x48, 0x22, 0xd5, 0xa5, 0x6c, 0xa0, 0xdd, 0x4d, 0x77, 0xb5, 0x37, 0xb2, 0x2d, 0x29, 0x5d, 0xf9, 0x6c, 0x6c, 0xcf, 0x32, 0x57, 0x2b, 0x57, 0x8b, 0xb4, 0x21, 0x92, 0xc3, 0x91, 0x30, 0xac, 0xe2, 0x2e, 0xb0, 0x6b, 0x28, 0x17, 0x07, 0x6f, 0x43, 0x91, 0x79, 0xb8, 0xc5, 0x37, 0x42, 0x68, 0xd4, 0xe5, 0xe2, 0xca, 0x23, 0xd5, 0xb9, 0x94, 0x22, 0x08, 0xd3, 0x69, 0x72, 0xe8, 0x05, 0xa2, 0x9c, 0x2b, 0x39, 0x4e, 0x02, 0xfa, 0x06, 0x77, 0x16, 0x53, 0x84, 0xa8, 0xc9, 0xac, 0x5e, 0xab, 0x47, 0xd9, 0x28, 0x97, 0xe1, 0x2f, 0xf3, 0x0b, 0x4a, 0xea, 0x1f, 0xb4, 0x07, 0xcc, 0x71, 0x15, 0x21, 0x07, 0x65, 0x87, 0x1d, 0x5d, 0xc6, 0x7e, 0x2d, 0x86, 0x7b, 0x0f, 0xa8, 0xd2, 0xa4, 0xaf, 0xb8, 0x0f, 0xe6, 0x3e, 0x53, 0xad, 0x02, 0x44, 0x6c, 0x20, 0xad, 0x7a, 0x6a, 0x86, 0x9c, 0x8c, 0xd9, 0x8a, 0xde, 0x1d, 0x5f, 0x88, 0x6e, 0x0b, 0xf2, 0xf2, 0x09, 0xf5, 0x49, 0xf2, 0x3d, 0xfb, 0x90, 0x50, 0xc3, 0xc5, 0x60, 0x97, 0x0e, 0xc7, 0xee, 0x73, 0x24, 0xc3, 0x83, 0x5e, 0xad, 0x8f, 0x2c, 0x7b, 0x49, 0x18, 0xb2, 0xc2, 0x27, 0xa7, 0xcc, 0x5e, 0xd4, 0x63, 0x94, 0x53, 0x50, 0x18, 0x38, 0x64, 0x67, 0x36, 0xf2, 0x34, 0x3e, 0x1d, 0x3a, 0xab, 0x2d, 0x97, 0x3a, 0x9b, 0xcc, 0xa6, 0x82, 0xa4, 0x51, 0x81, 0xfd, 0x55, 0x19, 0xd9, 0x23, 0x93, 0x84, 0x60, 0x71, 0x3f, 0x06, 0x8c, 0x16, 0x13, 0x7b, 0x98, 0xf0, 0xcd, 0xbb, 0xcd, 0xb6, 0x90, 0x6f, 0xff, 0x77, 0x87, 0x23, 0x5a, 0x43, 0xcb, 0x9c, 0x5f, 0x28, 0x87, 0x6b, 0x29, 0x60, 0x5a, 0xc2, 0xf5, 0xc8, 0xfc, 0x87, 0xe1, 0x94, 0x25, 0xa7, 0xf4, 0x41, 0xaa, 0xad, 0x5f, 0xcc, 0xe9, 0x93, 0x02, 0x22, 0x68, 0xd7, 0x32, 0xd7, 0xb9, 0xd2, 0xba, 0x1a, 0xa1, 0x46, 0x1f, 0xe9, 0x79, 0x36, 0x29, 0x81, 0xd3, 0xfa, 0x9e, 0x19, 0x61, 0x92, 0x51, 0xcf, 0x13, 0x3b, 0x5b, 0xe3, 0x80, 0x40, 0xa9, 0x23, 0x87, 0x13, 0xb7, 0xa6, 0x36, 0x9c, 0x9a, 0xbd, 0xea, 0xd1, 0x44, 0x27, 0xb8, 0x87, 0x04, 0x84, 0x0c, 0x87, 0x4c, 0x0c, 0x90, 0xe5, 0xb7, 0x81, 0x50, 0x8d, 0x4a, 0x62, 0x1b, 0x1f, 0xfb, 0x62, 0x2c, 0xfd, 0x6f, 0x19, 0x0a, 0xa2, 0x08, 0xf8, 0xac, 0x35, 0x1f, 0x82, 0xe1, 0x5d, 0x8e, 0xb9, 0xef, 0x58, 0x72, 0xd7, 0x7a, 0x47, 0x2f, 0x3f, 0xa8, 0xcc, 0xb4, 0xb3, 0x83, 0xd7, 0x00, 0xc7, 0x9f, 0xbd, 0xe4, 0x96, 0xfc, 0x8b, 0x0b, 0xb3, 0x2d, 0x99, 0x39, 0x63, 0xba, 0x62, 0xd0, 0x09, 0xc4, 0x92, 0x98, 0xe1, 0xe7, 0x61, 0xbf, 0xf1, 0x65, 0x20, 0x1f, 0x3d, 0x80, 0x11, 0xc0, 0x3b, 0x27, 0x7c, 0x9e, 0x86, 0xd5, 0xff, 0xac, 0xd6, 0xb7, 0x26, 0x18, 0x30, 0x0d, 0x3c, 0xd1, 0x5a, 0xd2, 0x60, 0x47, 0x92, 0x9f, 0xdb, 0x72, 0x7f, 0xcd, 0xb0, 0x15, 0x68, 0xda, 0x75, 0x44, 0xa4, 0x0d, 0x62, 0x24, 0x52, 0x5d, 0xa8, 0xf2, 0x4a, 0x90, 0x03, 0x46, 0x53, 0xa0, 0x93, 0x99, 0x96, 0x62, 0xe8, 0x05, 0x52, 0x69, 0x5c, 0x4d, 0xd2, 0x29, 0xa5, 0x1d, 0x9c, 0x58, 0xaa, 0x93, 0xec, 0x9a, 0x96, 0xfd, 0x60, 0x5c, 0x2b, 0xe5, 0xf5, 0x00, 0x5a, 0x4b, 0x32, 0x3b, 0x10, 0x31, 0xa3, 0xbc, 0x52, 0x5d, 0x89, 0x0f, 0x8c, 0x5a, 0xd0, 0xc0, 0x26, 0xc0, 0x41, 0xc3, 0x59, 0xb5, 0xf9, 0x13, 0x41, 0xb4, 0x1a, 0x9a, 0x33, 0x8d, 0xc0, 0x51, 0x50, 0xad, 0x37, 0xa8, 0x5a, 0xa0, 0x6b, 0x28, 0xc7, 0xd4, 0x9f, 0x57, 0x14, 0xa0, 0x62, 0xdc, 0x5c, 0x84, 0xbf, 0xe3, 0x29, 0xb3, 0xb5, 0xc3, 0x8a, 0xce, 0xe7, 0xde, 0x66, 0xf3, 0x93, 0xc9, 0x0f, 0xf6, 0xc8, 0xae, 0x1a, 0xee, 0xd4, 0xee, 0x6f, 0xf4, 0xfc, 0x0a, 0x9c, 0x27, 0x71, 0xc3, 0x6f, 0xf4, 0x7f, 0x80, 0xc3, 0x94, 0x06, 0xf1, 0x9a, 0xd5, 0x2e, 0xf2, 0x6c, 0x1e, 0x57, 0xb2, 0xbf, 0xad, 0x4f, 0x14, 0xf8, 0x24, 0xc8, 0x55, 0x71, 0x44, 0x09, 0xf0, 0xcb, 0xf8, 0xe3, 0xbe, 0x86, 0x95, 0xe7, 0x62, 0xce, 0x60, 0xd6, 0xe4, 0x98, 0x51, 0x59, 0x9c, 0xee, 0x16, 0xf2, 0x52, 0x87, 0x5b, 0x33, 0xa3, 0x9b, 0x49, 0x2e, 0xa6, 0xf5, 0x4c, 0x2c, 0xd0, 0x4a, 0x1a, 0xa2, 0x15, 0xc9, 0xf1, 0x60, 0x50, 0xf3, 0x1f, 0x0c, 0xe5, 0xad, 0xc8, 0xcf, 0xa5, 0x94, 0xe4, 0x4e, 0xf2, 0x90, 0x87, 0xdc, 0x23, 0xac, 0x65, 0xed, 0x2a, 0x25, 0x95, 0xce, 0x73, 0xc0, 0x95, 0x94, 0x10, 0x61, 0x8f, 0x53, 0x14, 0xda, 0xda, 0x90, 0x3c, 0x01, 0xc4, 0xf8, 0xd5, 0x05, 0x8f, 0x52, 0xd9, 0x02, 0xb9, 0xb2, 0x5c, 0xd2, 0x81, 0xef, 0x26, 0x27, 0xa6, 0x58, 0xa2, 0xd6, 0x72, 0xa3, 0xf7, 0x76, 0xf7, 0x26, 0x74, 0x2a, 0x99, 0x4a, 0x31, 0xbb, 0xcc, 0x3c, 0xf3, 0xea, 0x1f, 0xe5, 0x51, 0x04, 0x7a, 0x1d, 0x15, 0xb6, 0xa3, 0x1b, 0xe5, 0x23, 0x07, 0x30, 0x23, 0x34, 0xb8, 0xb6, 0x11, 0x2f, 0xb2, 0x43, 0x39, 0x8c, 0x62, 0x22, 0x0c, 0x04, 0x69, 0x03, 0xc9, 0xea, 0x9d, 0xf1, 0xa0, 0xbe, 0x50, 0x85, 0x18, 0x00, 0xd6, 0x59, 0xae, 0x42, 0x41, 0xc0, 0xbe, 0x81, 0x6f, 0xb4, 0xa7, 0xb5, 0x47, 0x10, 0x2b, 0xa7, 0x3f, 0x00, 0x14, 0x03, 0x21, 0xb5, 0x1d, 0xae, 0x10, 0x5d, 0x0f, 0x59, 0xc6, 0x52, 0x2b, 0x57, 0x1f, 0x91, 0xc8, 0xab, 0xdb, 0x6f, 0x3d, 0x66, 0x9f, 0x87, 0x01, 0x30, 0x3e, 0xf7, 0x11, 0x24, 0x37, 0xcc, 0x92, 0xe1, 0x7f, 0xba, 0xb8, 0xdd, 0x80, 0x11, 0xe6, 0xfd, 0x61, 0xec, 0x17, 0x63, 0x88, 0xab, 0x7c, 0x88, 0x5d, 0xa4, 0x66, 0x8a, 0x51, 0x16, 0x67, 0xc7, 0x20, 0x5e, 0xb4, 0xaa, 0x52, 0x6e, 0xce, 0xc5, 0x08, 0x7a, 0x62, 0x20, 0xf5, 0xf4, 0x6d, 0xd1, 0xab, 0xbb, 0xa3, 0xcd, 0x18, 0x90, 0x12, 0xfe, 0x50, 0xc9, 0x03, 0x96, 0x8d, 0x49, 0x21, 0xa2, 0x73, 0xaf, 0xdd, 0xe2, 0x99, 0xce, 0x10, 0xd8, 0x46, 0x5e, 0xe2, 0x1f, 0x78, 0xf0, 0xec, 0xfe, 0x2b, 0x28, 0x99, 0x3d, 0xd7, 0x26, 0xd2, 0x37, 0x3b, 0x45, 0xda, 0x31, 0x59, 0x08, 0x76, 0xea, 0xc2, 0x51, 0x52, 0x73, 0x13, 0xd4, 0xa0, 0x41, 0xc0, 0xcc, 0x02, 0x81, 0x10, 0xec, 0xaa, 0xab, 0x69, 0x99, 0xbf, 0x5a, 0xce, 0x56, 0x03, 0x5b, 0xa6, 0x80, 0xb4, 0x04, 0xbf, 0x3b, 0xb0, 0xc7, 0x92, 0xac, 0xdc, 0x07, 0xc9, 0x69, 0xc5, 0x29, 0xfe, 0x2d, 0x88, 0xef, 0xc6, 0xd1, 0xf0, 0x01, 0xee, 0x77, 0xdf, 0xcd, 0x04, 0x09, 0xef, 0x91, 0x19, 0xe2, 0x58, 0xb6, 0xc6, 0xca, 0x15, 0x60, 0x6d, 0x28, 0x42 ],
- const [ 0x86, 0xff, 0xd5, 0xbd, 0x3b, 0xd1, 0xca, 0xe1, 0x07, 0x06, 0xa6, 0x1d, 0x24, 0x7b, 0x22, 0x57, 0xb1, 0x65, 0xf3, 0x7c, 0xb5, 0x3f, 0xf2, 0x17, 0x61, 0x07, 0x7a, 0x22, 0x95, 0xa9, 0x11, 0x1b, 0xa6, 0xbc, 0x4b, 0x5b, 0x5f, 0x6c, 0xec, 0xa4, 0x45, 0xb7, 0x4d, 0xf9, 0x1f, 0xdd, 0x01, 0xb2, 0xb6, 0x11, 0xb7, 0xcf, 0xda, 0x75, 0x62, 0x8d, 0xa5, 0x45, 0x98, 0x37, 0x04, 0x52, 0x38, 0x3f, 0x72, 0xb3, 0x50, 0x8d, 0x07, 0xb7, 0x3e, 0x17, 0xb2, 0x1e, 0x15, 0xb2, 0xc3, 0x88, 0x42, 0x27, 0xac, 0x2d, 0x6f, 0x8a, 0x08, 0xcf, 0xa7, 0xc7, 0xdc, 0xed, 0xbb, 0x7e, 0x1d, 0x3a, 0xe5, 0x11, 0x73, 0x4d, 0xac, 0xfb, 0x3d, 0x9a, 0x07, 0x63, 0xd5, 0xa1, 0xc5, 0xf0, 0x15, 0x65, 0x2c, 0xe0, 0x1a, 0x20, 0xe1, 0x54, 0x47, 0x35, 0x08, 0xee, 0x8d, 0x66, 0xab, 0x9e, 0xea, 0x47, 0x60, 0xb9, 0x30, 0xf2, 0x26, 0x4c, 0x08, 0xfd, 0x91, 0xaf, 0x36, 0xa9, 0x27, 0x5d, 0x1f, 0x5c, 0x09, 0x02, 0x88, 0x52, 0xd6, 0xd6, 0xa0, 0x8f, 0xcc, 0x2a, 0x41, 0x18, 0x30, 0x40, 0x73, 0x62, 0xf0, 0x60, 0x32, 0x0b, 0x88, 0x28, 0x71, 0xc8, 0x22, 0x24, 0x5e, 0x9f, 0x01, 0x9f, 0xe8, 0x56, 0x1f, 0xb8, 0x7e, 0x2b, 0x15, 0xb8, 0x1a, 0xc5, 0x3c, 0xa2, 0x7f, 0x6b, 0x12, 0x0c, 0xbf, 0x74, 0xdf, 0x2e, 0xff, 0xfe, 0x98, 0x39, 0x7e, 0xe3, 0x03, 0xea, 0xd4, 0xe9, 0x1c, 0x5e, 0x78, 0x39, 0xb8, 0x28, 0x85, 0x13, 0x68, 0xa1, 0xbe, 0xbf, 0xa0, 0x7f, 0xcf, 0xc7, 0x18, 0xa9, 0xd6, 0x63, 0x73, 0x4a, 0x21, 0x35, 0x1f, 0x24, 0x39, 0x36, 0x7c, 0x28, 0x20, 0xf1, 0x40, 0x43, 0xd8, 0xef, 0x1a, 0x7a, 0x24, 0x72, 0x95, 0x39, 0x93, 0x66, 0x40, 0xe8, 0xb9, 0x94, 0x0c, 0xc0, 0xc0, 0x19, 0xf5, 0xdd, 0x20, 0x16, 0xe4, 0x94, 0xaa, 0xaa, 0xd4, 0x06, 0xcb, 0x1d, 0x34, 0xf5, 0x0f, 0x5e, 0x8d, 0xd7, 0xe4, 0xb0, 0x65, 0x29, 0xa1, 0xa0, 0x63, 0x06, 0xc6, 0x3a, 0xb4, 0xf8, 0x85, 0x7c, 0xac, 0x0e, 0x82, 0x0b, 0xb1, 0x2f, 0xd8, 0x25, 0x55, 0xad, 0x5c, 0xd7, 0xc2, 0x1d, 0x25, 0x70, 0x5b, 0x67, 0x4c, 0x35, 0xa0, 0x19, 0xf0, 0x56, 0x52, 0x01, 0x7d, 0x21, 0xd8, 0xfa, 0x2e, 0x76, 0xe2, 0x06, 0xd1, 0x7b, 0x4c, 0x9d, 0xcb, 0x90, 0x45, 0x45, 0x5b, 0x86, 0xb0, 0x63, 0x23, 0x0b, 0xca, 0x51, 0xe4, 0x69, 0x0e, 0xb0, 0x89, 0x71, 0x56, 0x00, 0x67, 0xb1, 0x42, 0x6e, 0xc3, 0xee, 0xdd, 0xec, 0x94, 0xce, 0x7e, 0x87, 0x8b, 0xd4, 0xed, 0xf5, 0x51, 0x91, 0xc7, 0x6e, 0x10, 0x19, 0x24, 0xbe, 0x34, 0xb5, 0x76, 0x97, 0x73, 0xd7, 0xb5, 0x2b, 0x0a, 0x53, 0xb9, 0xfa, 0x4a, 0xcb, 0xe7, 0xe9, 0x54, 0x6b, 0x0f, 0x95, 0x21, 0xd7, 0x95, 0xe6, 0xc5, 0x62, 0xcf, 0xe7, 0xf4, 0x81, 0xaf, 0xd5, 0xc5, 0x7f, 0xa2, 0x76, 0xb6, 0x72, 0xb7, 0xab, 0xf0, 0x6d, 0x04, 0x49, 0xcd, 0xf7, 0x46, 0x25, 0x98, 0xbc, 0xc7, 0x6e, 0x94, 0x83, 0x85, 0x40, 0x3f, 0x60, 0x90, 0x75, 0xd7, 0x2b, 0xb4, 0xbf, 0x1e, 0x30, 0x58, 0xf4, 0x5b, 0x28, 0xa6, 0xa8, 0xa1, 0x69, 0xec, 0x01, 0x53, 0x59, 0x42, 0xc7, 0xe8, 0x28, 0x6e, 0xbb, 0xec, 0xbf, 0x04, 0x2a, 0x47, 0xf3, 0xd2, 0xc1, 0xc2, 0xff, 0x7a, 0xa3, 0xc7, 0x31, 0x61, 0xb9, 0x68, 0xe3, 0xc8, 0x49, 0xa4, 0xad, 0x39, 0xcb, 0xe5, 0xd9, 0x25, 0xf8, 0xcc, 0x17, 0xcb, 0x23, 0x31, 0x72, 0x5b, 0xcc, 0x66, 0x83, 0x5c, 0x73, 0xbc, 0xe5, 0x4b, 0xaa, 0x49, 0xe9, 0x85, 0x6e, 0xe8, 0x8a, 0x67, 0xb7, 0x80, 0xa3, 0xb3, 0x4e, 0x8a, 0x5f, 0x35, 0xdf, 0xcd, 0xf1, 0xa7, 0x4f, 0x6c, 0x86, 0xd3, 0x4f, 0x23, 0x78, 0xf7, 0x32, 0xce, 0xc5, 0x6d, 0xfb, 0x2b, 0xbf, 0x8b, 0xbb, 0xe0, 0x05, 0xc9, 0x1a, 0xc0, 0xb1, 0x21, 0x33, 0x4a, 0xd3, 0xbc, 0xa5, 0x72, 0x1f, 0xca, 0xe6, 0xa5, 0xe2, 0xb2, 0xdb, 0x07, 0x3b, 0x6b, 0xa6, 0xff, 0x87, 0x29, 0xc0, 0xf5, 0x1d, 0x3d, 0x47, 0x5a, 0x3c, 0x36, 0x99, 0xe9, 0x41, 0x4d, 0x21, 0x2d, 0x1d, 0x00, 0x71, 0x44, 0x07, 0xfc, 0x91, 0xe2, 0x6e, 0x40, 0x97, 0x99, 0x32, 0x80, 0x78, 0x57, 0x13, 0xc7, 0x1e, 0x30, 0x6a, 0x61, 0xbb, 0x5d, 0x17, 0xf8, 0x5c, 0x85, 0xba, 0xfd, 0xc1, 0x3c, 0x26, 0x4a, 0x6c, 0xca, 0x12, 0x05, 0xf8, 0x2d, 0x12, 0xc7, 0xac, 0x61, 0xc6, 0xfd, 0x50, 0xde, 0x51, 0x8f, 0x3f, 0x63, 0x0d, 0xc0, 0xbe, 0xf2, 0x7e, 0x56, 0x8c, 0x1b, 0x84, 0xfa, 0xbb, 0x7e, 0xd4, 0xe1, 0xbd, 0x8c, 0xa8, 0xac, 0xc2, 0x8d, 0xb6, 0x8d, 0x42, 0xe7, 0x5f, 0xac, 0xd5, 0x9d, 0x2a, 0xc9, 0x4b, 0x16, 0x70, 0x22, 0xf9, 0x20, 0x59, 0x97, 0x51, 0x34, 0x07, 0x0c, 0xb6, 0xfc, 0x10, 0x0f, 0x8e, 0x12, 0x32, 0xba, 0x98, 0x0b, 0x42, 0xdb, 0x7f, 0xb4, 0x66, 0x53, 0xb0, 0x9b, 0x84, 0xbc, 0x69, 0xd1, 0xfa, 0x4f, 0x13, 0xef, 0x90, 0x04, 0xd2, 0x57, 0xaa, 0xfa, 0x5a, 0xbc, 0xc3, 0x1a, 0x04, 0xe5, 0x16, 0xf8, 0x21, 0xad, 0x9e, 0xf9, 0x8e, 0x4f, 0x41, 0xbb, 0x89, 0xe0, 0x49, 0xb1, 0xc2, 0x1d, 0x13, 0x0e, 0xb5, 0x67, 0x0b, 0xe5, 0x38, 0x0c, 0xd8, 0x8e, 0x50, 0xc8, 0xd3, 0x4b, 0x49, 0x8c, 0xbe, 0x2b, 0x06, 0x7d, 0xb3, 0x2f, 0x95, 0x40, 0x5a, 0xac, 0x06, 0x75, 0x5f, 0xf0, 0x7e, 0x81, 0x23, 0x28, 0x87, 0x91, 0xb2, 0x82, 0xaa, 0xdc, 0xf6, 0x8e, 0x40, 0x28, 0x2a, 0xea, 0x85, 0x8f, 0x90, 0x1e, 0xee, 0x83, 0x67, 0xc5, 0xbd, 0x10, 0x18, 0xee, 0xd2, 0x61, 0xb0, 0xc1, 0xc4, 0x86, 0x92, 0x66, 0x30, 0x74, 0x6e, 0x22, 0x51, 0x4d, 0x6d, 0xc3, 0xd1, 0xe2, 0xae, 0x3f, 0xdf, 0x77, 0xf6, 0x98, 0x82, 0xc6, 0xa3, 0x02, 0x2d, 0x46, 0xe2, 0x48, 0x93, 0xac, 0x22, 0x6c, 0xbc, 0xb2, 0xc9, 0x8e, 0x59, 0x18, 0x25, 0x0e, 0x55, 0xe9, 0xa5, 0xf5, 0xac, 0x00, 0x49, 0x91, 0x80, 0xca, 0x57, 0x60, 0x6a, 0x4e, 0x50, 0x30, 0x0e, 0x6a, 0x22, 0x83, 0xf2, 0x5f, 0x9f, 0x38, 0x90, 0x90, 0x2e, 0x68, 0xa9, 0x86, 0xc0, 0x8f, 0xdd, 0x38, 0x06, 0xec, 0x79, 0x89, 0xe2, 0x2a, 0x90, 0x13, 0x1b, 0x3f, 0x4d, 0x23, 0x54, 0x95, 0x87, 0x04, 0x3f, 0x67, 0x96, 0x81, 0x0e, 0x6f, 0x65, 0xa5, 0x2a, 0xbe, 0xc9, 0xc5, 0x28, 0xeb, 0x11, 0xc1, 0xf9, 0x6f, 0xdf, 0x86, 0x60, 0x50, 0x36, 0xd7, 0xa9, 0xfd, 0xd3, 0x4e, 0x99, 0x79, 0xc1, 0x9d, 0xa1, 0xbc, 0x28, 0x1a, 0x56, 0x57, 0x66, 0x7b, 0x26, 0x56, 0x60, 0xdd, 0x43, 0x6a, 0x1a, 0x0c, 0xe4, 0x48, 0x86, 0xfe, 0xad, 0x4c, 0x9a, 0xa0, 0x6b, 0x62, 0xa5, 0xd6, 0x05, 0x26, 0xe3, 0xbc, 0xb0, 0x4a, 0x4f, 0x33, 0x61, 0x38, 0xb8, 0x99, 0x88, 0xf9, 0x17, 0xd7, 0xfb, 0x56, 0x20, 0xa1, 0x30, 0x3d, 0x17, 0xf9, 0xb0, 0x66, 0xe5, 0xf5, 0xc8, 0x35, 0x6b, 0xc3, 0x82, 0xe3, 0x16, 0xea, 0xd4, 0xd9, 0xb4, 0xd2, 0x16, 0x5c, 0x86, 0x87, 0xb9, 0x6f, 0x96, 0xba, 0x37, 0xf5, 0x4a, 0x09, 0x46, 0x17, 0x3a, 0x80, 0x51, 0xe5, 0x3f, 0x5f, 0x28, 0x40, 0xcc, 0x1d, 0xf7, 0xf7, 0x82, 0xae, 0x75, 0x30, 0xfe, 0x02, 0x5d, 0x0a, 0xf6, 0xce, 0x22, 0x80, 0x84, 0x8e, 0xdf, 0x91, 0xc1, 0xcb, 0x8c, 0x9d, 0x96, 0x99, 0x78, 0x13, 0xcf, 0x65, 0xf3, 0x49, 0x71, 0xed, 0x4b, 0xab, 0x4e, 0x90, 0xfb, 0x18, 0xd6, 0xc8, 0x1e, 0x89, 0x30, 0xf5, 0x2a, 0xf4, 0x8a, 0x5c, 0xda, 0x70, 0xad, 0x6f, 0x6c, 0x99, 0xd4, 0x4f, 0x0d, 0x36, 0xbe, 0x8f, 0x92, 0x19, 0x02, 0x3b, 0x68, 0x47, 0xa3, 0x18, 0xce, 0x59, 0xe4, 0x2e, 0x41, 0x22, 0x5d, 0x84, 0x38, 0x92, 0x4f, 0x2b, 0x12, 0xda, 0x35, 0x7d, 0x4d, 0xd1, 0x9b, 0xa7, 0xf8, 0x97, 0x33, 0x65, 0x6b, 0x78, 0x26, 0x0d, 0x35, 0x13, 0xa8, 0xcf, 0x56, 0xbb, 0xcf, 0x3b, 0xaf, 0x1d, 0xa5, 0x03, 0xb6, 0x23, 0x7c, 0x03, 0x6e, 0x19, 0x81, 0x7e, 0x97, 0x0f, 0x94, 0xab, 0x21, 0x7e, 0x57, 0x70, 0xe7, 0x2e, 0x85, 0x6d, 0x9a, 0x56, 0x86, 0x3c, 0xfb, 0x06, 0x40, 0xf7, 0x4e, 0xc2, 0x2f, 0xfb, 0x0b, 0x6f, 0xb8, 0xec, 0xd6, 0x74, 0xba, 0xfa, 0xb1, 0x19, 0x67, 0x62, 0x71, 0x32, 0x52, 0x37, 0x6e, 0x02, 0xc8, 0x62, 0x7f, 0x5a, 0x64, 0xe8, 0x26, 0x01, 0xde, 0x6b, 0x07, 0x58, 0x24, 0xf4, 0x9f, 0x3e, 0xac, 0xef, 0x32, 0x32, 0x08, 0x77, 0x05, 0xb7, 0xbb, 0xd4, 0xce, 0xfd, 0x4b, 0x42, 0x69, 0xbd, 0x97, 0xf4, 0xcc, 0x65, 0x6b, 0x59, 0x3d, 0x75, 0x52, 0x9e, 0xc3, 0x29, 0xab, 0x74, 0xda, 0x58, 0xff, 0x13, 0x6a, 0x9c, 0x92, 0x7f, 0xfa, 0xb3, 0x38, 0x0a, 0x21, 0x25, 0x6a, 0x1a, 0x3e, 0x27, 0x99, 0x2c, 0x69, 0xc0, 0xc2, 0x19, 0xaa, 0x2a, 0x43, 0x98, 0x68, 0x7b, 0xed, 0x05, 0x24, 0x85, 0x5a, 0x61, 0x67, 0xfa, 0x81, 0x99, 0xf8, 0xd4, 0x87, 0x0b, 0x53, 0xf3, 0xd9, 0x46, 0x57, 0x08, 0x77, 0x11, 0x3f, 0xb3, 0x93, 0xb0, 0xd3, 0xe8, 0x5a, 0x62, 0xdf, 0x97, 0x12, 0x2e, 0xe5, 0x8c, 0x65, 0xdf, 0x0f, 0x94, 0xfc, 0x4e, 0x67, 0xe1, 0x50, 0xdf, 0x4a, 0xaf, 0xbd, 0x4e, 0x1a, 0x28, 0xd9, 0xac, 0x34, 0x85, 0x03, 0xa4, 0x22, 0x77, 0x3f, 0x03, 0x11, 0xc5, 0x41, 0x78, 0x85, 0x36, 0xc7, 0x97, 0x4b, 0xb1, 0x2c, 0x24, 0xb0, 0xa3, 0x3a, 0x8f, 0xf0, 0xa1, 0x41, 0xbb, 0xf1, 0x4f, 0x65, 0x03, 0x31, 0x80, 0x3c, 0x7f, 0xfd, 0x9e, 0x99, 0x83, 0xe5, 0x4d, 0xa2, 0x69, 0x6c, 0x4b, 0x29, 0x91, 0x04, 0x9a, 0x39, 0xa5, 0x39, 0xe2, 0xee, 0x22, 0x2c, 0x11, 0x8a, 0x14, 0x43, 0x44, 0xc6, 0x21, 0x1f, 0xea, 0x66, 0xc8, 0xce, 0x26, 0x10, 0xeb, 0x42, 0x76, 0x5e, 0x8b, 0x02, 0x93, 0x32, 0xd4, 0x20, 0x98, 0x4a, 0x59, 0x6b, 0x65, 0x14, 0xa0, 0xe5, 0x46, 0xc3, 0xe1, 0x78, 0xd0, 0xa2, 0x0b, 0xe4, 0x0c, 0xa8, 0x08, 0xfc, 0xd8, 0x4d, 0x42, 0x12, 0x89, 0x9d, 0x66, 0xb0, 0xd5, 0x8b, 0x68, 0x89, 0xf1, 0x87, 0xc7, 0xae, 0xf6, 0x53, 0x12, 0x05, 0x89, 0x12, 0xab, 0xf8, 0xbb, 0xa2, 0xcb, 0x6a, 0x2e, 0x2b, 0xc6, 0xef, 0x7a, 0xf8, 0x90, 0x3c, 0xce, 0x86, 0x80, 0xdc, 0xdb, 0xdb, 0x55, 0x25, 0xed, 0x19, 0x77, 0x6b, 0x5b, 0x53, 0x7f, 0x73, 0x22, 0x9f, 0xf8, 0x2a, 0xcd, 0x6d, 0x67, 0x97, 0x98, 0x17, 0x8a, 0x0f, 0xd4, 0xb9, 0xde, 0xa8, 0x8d, 0x42, 0x63, 0xf0, 0x6b, 0xcb, 0xa3, 0xde, 0xd6, 0x28, 0xf1, 0x08, 0x5d, 0xbd, 0xef, 0x17, 0x59, 0x93, 0x53, 0x78, 0xcd, 0xac, 0xea, 0x55, 0x91, 0x93, 0xdd, 0xc4, 0xb0, 0x36, 0x33, 0x3e, 0x0e, 0xf8, 0x97, 0x52, 0x4e, 0x03, 0x5b, 0x9a, 0xf2, 0xdb, 0xbe, 0xef, 0xc4, 0x39, 0x6a, 0xd9, 0x75, 0x16, 0x41, 0x49, 0x85, 0x06, 0x59, 0x8b, 0x62, 0xc7, 0x45, 0x76, 0xd4, 0x1a, 0x97, 0xe6, 0x98, 0xd1, 0xa2, 0x6c, 0x4c, 0x2a, 0x85, 0x43, 0x8b, 0x5b, 0x65, 0x86, 0x58, 0x6e, 0xf9, 0xa1, 0xc0, 0x4f, 0x4c, 0x06, 0xbb, 0x24, 0xbe, 0x21, 0x54, 0xdc, 0x4c, 0x8d, 0x09, 0x0b, 0x12, 0x88, 0x75, 0xf5, 0x0e, 0xa4, 0x2c, 0xe8, 0x27, 0xc0, 0xe7, 0xd0, 0x6e, 0x37, 0xe1, 0x05, 0xa3, 0x57, 0x80, 0x67, 0xfb, 0x15, 0x38, 0xad, 0x20, 0xfe, 0xad, 0xfa, 0x7a, 0x71, 0x17, 0xb1, 0xad, 0x0c, 0xeb, 0x8b, 0x63, 0x64, 0xb8, 0xe7, 0x4b, 0xf9, 0x4e, 0x61, 0x62, 0x69, 0x26, 0xa5, 0x71, 0xe3, 0xfe, 0x86, 0xd6, 0xdf, 0xc4, 0x4a, 0x88, 0x0c, 0xb5, 0x48, 0x56, 0x8a, 0xc6, 0xb6, 0x6f, 0x5a, 0x43, 0xbc, 0x27, 0x13, 0xb6, 0xcc, 0xf8, 0xd6, 0x0a, 0x36, 0xc7, 0x83, 0xf0, 0xf7, 0x69, 0x2d, 0x82, 0xd2, 0x66, 0xcc, 0x26, 0xa3, 0xfd, 0x32, 0xb6, 0xef, 0x68, 0x41, 0xde, 0xbf, 0x61, 0x5a, 0xc5, 0xaf, 0xe4, 0x18, 0xef, 0x42, 0x37, 0x3f, 0x62, 0x78, 0x28, 0xef, 0x07, 0xa3, 0x96, 0x1e, 0x54, 0x76, 0x32, 0x45, 0x28, 0x5f, 0x87, 0x58, 0xf6, 0x17, 0x38, 0xfc, 0x26, 0x77, 0x89, 0xf5, 0xb8, 0x8d, 0x21, 0xdd, 0x2b, 0xef, 0x0f, 0x1c, 0x9d, 0x4f, 0x0a, 0x14, 0x33, 0x50, 0xfd, 0x9c, 0xbb, 0x98, 0xc3, 0xb0, 0x90, 0x26, 0x2e, 0x66, 0xbe, 0xe6, 0x4f, 0x24, 0x67, 0x83, 0xf1, 0x11, 0x66, 0x7d, 0x67, 0xc9, 0x31, 0x7b, 0x88, 0x55, 0x04, 0xe2, 0xf7, 0x5a, 0x3c, 0xa6, 0xa8, 0x90, 0x01, 0x61, 0x9f, 0x76, 0x27, 0xa2, 0xfb, 0x45, 0x56, 0x87, 0x34, 0x22, 0x69, 0x8e, 0xa1, 0x97, 0x15, 0xa8, 0x3d, 0x44, 0xcb, 0x8f, 0xaa, 0xd2, 0xdf, 0x5a, 0x76, 0x29, 0xe9, 0x4f, 0x9e, 0xe3, 0x6c, 0xf8, 0x50, 0x00, 0xb5, 0x79, 0xf5, 0xdb, 0x06, 0x20, 0x6f, 0x5c, 0xf4, 0x3e, 0x9f, 0x70, 0x0e, 0x35, 0x2b, 0xb6, 0xbf, 0xd3, 0x7e, 0x7c, 0x76, 0xde, 0x10, 0xe9, 0x03, 0xf0, 0xe7, 0x7b, 0x45, 0x85, 0x5e, 0xb5, 0x02, 0x53, 0x25, 0x11, 0x16, 0xda, 0x89, 0x3c, 0xd0, 0x3b, 0xf5, 0x82, 0x99, 0x4d, 0xb9, 0x87, 0xd6, 0xee, 0x0b, 0x39, 0x10, 0x97, 0x4b, 0x02, 0x52, 0x34, 0x8c, 0x42, 0xd3, 0x32, 0x4f, 0xfc, 0xd5, 0xd9, 0x91, 0xd0, 0xcd, 0xdc, 0x09, 0x29, 0xc4, 0x2e, 0xab, 0xb7, 0xfd, 0x18, 0x70, 0x20, 0xd8, 0x89, 0x59, 0xf2, 0xf6, 0xad, 0xb2, 0xdd, 0x9e, 0xc0, 0x94, 0x1f, 0x60, 0x25, 0xad, 0x3f, 0xf8, 0xb2, 0x43, 0xfe, 0x75, 0x4f, 0x77, 0x8b, 0x9a, 0xbf, 0xc7, 0xf6, 0x84, 0xbd, 0xd7, 0xe7, 0x8d, 0x4b, 0x71, 0x90, 0x71, 0x47, 0xca, 0xe0, 0xaf, 0x3f, 0x07, 0xf9, 0x32, 0x86, 0xff, 0xe5, 0x31, 0x87, 0x43, 0x84, 0x54, 0x5a, 0x5c, 0xc9, 0x18, 0x95, 0x53, 0x26, 0x74, 0x65, 0x77, 0x45, 0xbd, 0xdd, 0x5a, 0xf9, 0xc7, 0x8d, 0x1d, 0x74, 0x4d, 0x57, 0xed, 0xba, 0x92, 0x7e, 0xce, 0x56, 0x49, 0x00, 0x97, 0x4b, 0xb2, 0x26, 0x3e, 0x4d, 0x07, 0x59, 0x56, 0x31, 0x16, 0x37, 0xd6, 0xa3, 0x2f, 0xe6, 0x1c, 0x17, 0x40, 0xa8, 0x32, 0x02, 0x3f, 0xb0, 0x4f, 0x49, 0xc8, 0x35, 0xa1, 0xf9, 0x08, 0xc4, 0x49, 0x3a, 0xd9, 0xda, 0xa8, 0x7e, 0x2e, 0xb2, 0xd9, 0xfe, 0xb2, 0x5c, 0x7e, 0x67, 0xac, 0x0f, 0xc0, 0xd0, 0x26, 0xc0, 0x91, 0xf0, 0x4e, 0xf3, 0x34, 0x8e, 0x1c, 0xd2, 0x00, 0x38, 0x35, 0x7c, 0x61, 0x38, 0x10, 0x9f, 0x1f, 0xc4, 0x57, 0x49, 0xe3, 0x75, 0x90, 0xfb, 0xf7, 0xfb, 0xfc, 0x00, 0x4d, 0x0e, 0xbf, 0xfc, 0xc3, 0xa7, 0x42, 0xc8, 0xa5, 0x71, 0xd6, 0x7d, 0x73, 0x7a, 0x9a, 0xcf, 0xe5, 0x2f, 0x9e, 0x9d, 0x2d, 0x87, 0x48, 0xc5, 0x7c, 0x7e, 0xf7, 0x3d, 0xc7, 0xc5, 0xe7, 0x60, 0xcb, 0xb8, 0x55, 0x85, 0x4f, 0x90, 0xe3, 0xd6, 0xa9, 0xda, 0x3d, 0x60, 0x83, 0x28, 0xfd, 0x66, 0xdf, 0x06, 0xcc, 0xfb, 0x59, 0x2f, 0xca, 0xd0, 0xac, 0x01, 0x31, 0x4a, 0x78, 0x2f, 0x35, 0xd7, 0x43, 0xb6, 0x2e, 0x83, 0xbd, 0x12, 0xf8, 0xc6, 0x48, 0xb1, 0x9a, 0xa0, 0xb7, 0xa8, 0x27, 0xe8, 0x56, 0xa5, 0xe2, 0xe2, 0x2b, 0x24, 0xa5, 0x0f, 0x7c, 0xe6, 0x84, 0x49, 0x92, 0x9f, 0xad, 0x0f, 0xbc, 0xf0, 0x92, 0x1d, 0x96, 0x94, 0x4b, 0x3f, 0x8a, 0xde, 0x35, 0x68, 0x98, 0x63, 0xe0, 0xfe, 0x53, 0xf4, 0x28, 0x79, 0x2c, 0xcf, 0xa1, 0x2c, 0xf3, 0x15, 0x39, 0x62, 0x9b, 0x7f, 0x18, 0xad, 0x3e, 0x4d, 0xcb, 0x7b, 0x60, 0x80, 0xa2, 0xea, 0x78, 0x49, 0x56, 0xde, 0xad, 0xc1, 0xef, 0x50, 0xdd, 0xda, 0xe5, 0xe9, 0xe3, 0x96, 0x86, 0xcf, 0x1a, 0x77, 0x97, 0xbf, 0x1d, 0x36, 0x3e, 0x5c, 0xd1, 0xb8, 0x20, 0xc6, 0xa6, 0x3d, 0xc6, 0x6f, 0x19, 0xdb, 0x45, 0x2a, 0x7e, 0x2b, 0x1e, 0x85, 0xfc, 0x42, 0x63, 0x59, 0xd9, 0xe2, 0x1b, 0x9f, 0xf7, 0xf2, 0xe8, 0x85, 0x9f, 0x2c, 0xe7, 0xc2, 0x7e, 0x16, 0xd8, 0x26, 0xed, 0x33, 0x7f, 0x75, 0x76, 0x7a, 0x49, 0x75, 0x93, 0x07, 0x33, 0x46, 0xb8, 0x11, 0xe8, 0xf2, 0x94, 0x1c, 0x29, 0x45, 0x95, 0x6f, 0x72, 0xdf, 0xaa, 0xc9, 0xdb, 0x87, 0x4c, 0x50, 0x3c, 0xc2, 0xbf, 0xca, 0x94, 0xa4, 0x95, 0x0f, 0xac, 0xe7, 0x75, 0xbe, 0xf7, 0x3a, 0x1a, 0x30, 0xbd, 0xdb, 0x9e, 0xaa, 0x78, 0x68, 0xf9, 0xd7, 0x7f, 0xf3, 0xc5, 0x75, 0xe1, 0x54, 0x44, 0x4e, 0x94, 0xc3, 0xa3, 0x6a, 0xcf, 0xa6, 0x80, 0x83, 0xb4, 0xa7, 0xab, 0xb9, 0x32, 0x0a, 0x29, 0x87, 0x2a, 0x3d, 0x7f, 0xf6, 0xd0, 0xb1, 0x2d, 0x10, 0x55, 0xe9, 0x78, 0x98, 0xc3, 0xd1, 0x6c, 0xf8, 0x28, 0x50, 0x22, 0x7b, 0xf6, 0x20, 0x3f, 0xbc, 0xaa, 0xde, 0xbd, 0x5f, 0xac, 0x5d, 0xee, 0xfe, 0x76, 0x40, 0xbd, 0x66, 0xf9, 0xc8, 0x38, 0x04, 0x3c, 0xea, 0x4b, 0x9a, 0x47, 0xa5, 0xce, 0x36, 0x3f, 0x92, 0xc3, 0x65, 0xd2, 0xbd, 0xd8, 0xa4, 0xd6, 0xb3, 0x34, 0x17, 0x2c, 0xdc, 0x6f, 0x7e, 0xeb, 0x0b, 0xe2, 0x64, 0xba, 0x54, 0x22, 0x99, 0x7e, 0x1e, 0xc7, 0xe3, 0x36, 0x78, 0x72, 0xf1, 0x22, 0xb1, 0x0e, 0x90, 0x2b, 0x22, 0x55, 0x22, 0x7f, 0x4f, 0x96, 0x4b, 0x7c, 0x2f, 0xb6, 0xed, 0xcf, 0xc7, 0x76, 0x57, 0xdd, 0xfe, 0xf3, 0xb9, 0x62, 0xac, 0x73, 0xdb, 0x57, 0xf4, 0x5e, 0x0f, 0x1a, 0xd4, 0x8b, 0x65, 0xc9, 0xfa, 0xbd, 0x1d, 0xee, 0xd9, 0x6e, 0x62, 0x62, 0xfd, 0xcb, 0x35, 0x6b, 0x9b, 0xff, 0xa7, 0x28, 0x6d, 0xb4, 0x4b, 0x2f, 0xbc, 0xd7, 0xeb, 0x74, 0xbf, 0x9c, 0x7a, 0x6d, 0x23, 0xc3, 0x4a, 0x73, 0xeb, 0x19, 0x7f, 0x6c, 0x7a, 0x41, 0xc4, 0xa7, 0xee, 0xb4, 0x3c, 0x07, 0xb0, 0x07, 0xbb, 0x64, 0x49, 0x6d, 0x37, 0x2e, 0x78, 0x7c, 0x79, 0x53, 0x81, 0x34, 0x18, 0x63, 0xc7, 0x3d, 0xa8, 0xf3, 0x9d, 0x70, 0x2f, 0x3f, 0x5a, 0x99, 0xd8, 0x13, 0xab, 0x7b, 0xec, 0xeb, 0x2e, 0x15, 0xfd, 0x59, 0x3c, 0x24, 0x65, 0xa7, 0x06, 0xe9, 0xef, 0xbd, 0xe3, 0x2c, 0xd3, 0x46, 0xe8, 0x81, 0xe8, 0x0f, 0xba, 0xca, 0x15, 0xaf, 0xa0, 0xfd, 0x08, 0x6d, 0xdc, 0x28, 0x2b, 0x5e, 0x3c, 0xb2, 0xd4, 0xce, 0xec, 0xe3, 0xbd, 0xe1, 0x8e, 0xa6, 0xb3, 0x7a, 0x8c, 0x8e, 0x92, 0x5c, 0xad, 0x18, 0x70, 0x90, 0xe7, 0x30, 0x19, 0x06, 0x75, 0xf6, 0xbc, 0x7f, 0x29, 0xc1, 0xe3, 0xa9, 0x02, 0x64, 0xa8, 0x8c, 0x01, 0xb1, 0x26, 0x26, 0x39, 0x3c, 0x2f, 0x52, 0x26, 0x62, 0x3d, 0xef, 0x3f, 0x89, 0xaa, 0x3d, 0xce, 0xa8, 0x23, 0x8a, 0x00, 0x0b, 0x5a, 0x0f, 0x38, 0x50, 0xfb, 0x15, 0xa9, 0xb6, 0xe2, 0x5c, 0x24, 0x97, 0x8b, 0xbc, 0x2e, 0x32, 0xc9, 0x0d, 0x56, 0xae, 0xbb, 0x45, 0xc6, 0x5c, 0xfc, 0xe0, 0x17, 0x3d, 0x1b, 0x85, 0x6a, 0xc4, 0x4b, 0xe6, 0xb4, 0xdc, 0x5b, 0xe8, 0x59, 0x2d, 0xe8, 0x04, 0xfd, 0x9b, 0xd1, 0xec, 0x96, 0x10, 0xeb, 0x72, 0xc6, 0x7c, 0xf6, 0xa6, 0x69, 0x1a, 0xd0, 0x3f, 0x6a, 0xf4, 0xe9, 0x3d, 0xda, 0xa9, 0xf7, 0xcc, 0x43, 0x6e, 0xeb, 0x6a, 0x39, 0x53, 0x23, 0x4c, 0x33, 0xc8, 0xe1, 0xfe, 0x99, 0x5f, 0xfc, 0x4b, 0x1e, 0xd3, 0xd5, 0x5c, 0x50, 0x4a, 0x8d, 0x24, 0x6d, 0xd7, 0x75, 0xfb, 0x79, 0x43, 0xc6, 0x88, 0x8d, 0x0d, 0x93, 0xe5, 0x72, 0xaf, 0xfb, 0xfe, 0x6f, 0x23, 0xa3, 0x3a, 0x5e, 0xa6, 0x64, 0x5e, 0x05, 0xbc, 0x40, 0xae, 0xa4, 0x74, 0x9b, 0x55, 0xcb, 0xed, 0xa7, 0x06, 0x6e, 0x19, 0x21, 0xe4, 0x3b, 0xc1, 0x3b, 0x9f, 0x2b, 0xc9, 0xd9, 0xe0, 0x58, 0xb6, 0xff, 0xe8, 0x0e, 0x6d, 0x8a, 0x74, 0x24, 0x3d, 0x1f, 0xe3, 0x8d, 0x20, 0x62, 0x9a, 0x2a, 0x3e, 0x68, 0xa8, 0xe2, 0xb3, 0x6e, 0xa6, 0xf5, 0x92, 0xcb, 0xe1, 0x8d, 0x2a, 0x23, 0xbc, 0x97, 0x88, 0xde, 0x4f, 0xd0, 0x3d, 0xd8, 0x54, 0x23, 0x61, 0x5a, 0x44, 0x32, 0xd7, 0x4a, 0xbd, 0x33, 0xd3, 0x9e, 0x27, 0xfd, 0x9a, 0x16, 0x97, 0x62, 0x89, 0x2b, 0xf3, 0xc0, 0x59, 0x43, 0x58, 0xd3, 0xa1, 0x26, 0xb8, 0xcd, 0x9c, 0xb5, 0xc8, 0xa9, 0x2d, 0xda, 0x19, 0xbc, 0x20, 0xbb, 0x84, 0x8d, 0xb3, 0x33, 0xcc, 0xe6, 0x55, 0x82, 0x7f, 0x2b, 0xad, 0x43, 0x1d, 0xeb, 0xde, 0x9f, 0x7c, 0xb5, 0x0a, 0xc1, 0x6b, 0x2d, 0x15, 0x89, 0x96, 0x5e, 0xab, 0x85, 0xaa, 0x52, 0x84, 0x1d, 0xb9, 0xe0, 0xe6, 0x0d, 0xdf, 0xc6, 0x6c, 0x19, 0x26, 0xf8, 0x07, 0xfb, 0xa7, 0x37, 0x42, 0xa1, 0xf2, 0xe4, 0xca, 0x95, 0xb0, 0x17, 0x2d, 0xbd, 0x87, 0xec, 0xe2, 0x44, 0x3e, 0x1d, 0x8a, 0xd8, 0x22, 0xd6, 0x75, 0x16, 0xa8, 0xc4, 0x68, 0x42, 0x53, 0x70, 0x9d, 0x3c, 0xd8, 0xcb, 0x0c, 0xaf, 0x81, 0x09, 0xe9, 0x8c, 0xcf, 0xb3, 0x6e, 0xb7, 0x63, 0xf8, 0xda, 0x00, 0x1e, 0x45, 0xba, 0x54, 0x88, 0x15, 0x67, 0x34, 0x6e, 0x09, 0xd0, 0x67, 0xd0, 0x3b, 0x79, 0xec, 0xfa, 0xd0, 0xc4, 0x33, 0xf0, 0xcc, 0x70, 0x8d, 0x0f, 0x2a, 0x5f, 0xe0, 0xf2, 0x2d, 0x9c, 0x9f, 0x93, 0xf1, 0x9c, 0xf9, 0xb2, 0x45, 0xc4, 0x51, 0x7b, 0xbd, 0x2c, 0xef, 0x63, 0x02, 0xa3, 0xf5, 0x53, 0x6d, 0xf3, 0x94, 0x08, 0xd4, 0x66, 0x7f, 0xba, 0xa4, 0x88, 0xa0, 0xfb, 0x30, 0x2f, 0x0b, 0xe3, 0x49, 0xb9, 0x30, 0x6a, 0x0f, 0x95, 0x54, 0x15, 0x06, 0x05, 0x42, 0xd5, 0x6d, 0x21, 0x3d, 0x2c, 0xcb, 0x20, 0x3a, 0x91, 0xca, 0xd3, 0x4c, 0x16, 0x48, 0x72, 0x60, 0x48, 0xac, 0x9b, 0x2a, 0x56, 0x76, 0x98, 0x5f, 0x76, 0x1b, 0xe1, 0x25, 0x85, 0x0f, 0xe1, 0xc8, 0xed, 0x23, 0xfd, 0xae, 0xcc, 0x11, 0xd3, 0x8d, 0x53, 0x55, 0xbf, 0xdb, 0x6c, 0x3f, 0xa4, 0x86, 0x9f, 0x47, 0xe9, 0xe6, 0x36, 0xa0, 0xc1, 0xf0, 0x9f, 0x10, 0xb0, 0xac, 0x13, 0xfe, 0x4b, 0xe9, 0x75, 0xcd, 0x3f, 0x2f, 0x7d, 0x68, 0x94, 0xf5, 0x15, 0x1e, 0x33, 0x14, 0x03, 0xb1, 0xa6, 0x7c, 0xc9, 0xa9, 0x20, 0x25, 0xc9, 0xee, 0xbd, 0x49, 0xad, 0x96, 0x0a, 0xd1, 0x06, 0xfc, 0xc8, 0x0d, 0x33, 0x12, 0xed, 0xa7, 0x85, 0xf8, 0xec, 0xda, 0xa1, 0xcd, 0x36, 0xdf, 0x25, 0xc5, 0x01, 0xa8, 0x8e, 0x7b, 0x48, 0xd1, 0x59, 0x89, 0x13, 0xd4, 0x68, 0x57, 0xf8, 0x7c, 0xa8, 0x30, 0xe2, 0x9c, 0xf1, 0x9b, 0x11, 0x00, 0x2d, 0xe8, 0x62, 0xa4, 0xbd, 0x09, 0xd1, 0x24, 0x18, 0xa3, 0x3c, 0x74, 0xb5, 0x65, 0x6a, 0xd1, 0x2c, 0x99, 0x4b, 0xf7, 0x98, 0xf8, 0x81, 0x95, 0x3f, 0xc3, 0x20, 0xfe, 0x75, 0x0f, 0xb2, 0x21, 0xbd, 0x61, 0x7f, 0xbb, 0x32, 0x7a, 0x0b, 0xcb, 0x25, 0x74, 0xdf, 0x47, 0x08, 0x0e, 0x8c, 0x0d, 0x8a, 0x45, 0xee, 0x1c, 0x04, 0x24, 0xae, 0x04, 0x14, 0xdc, 0x0a, 0x9b, 0x87, 0x17, 0xd9, 0xf2, 0x7d, 0x8a, 0xc9, 0x87, 0xc7, 0xc9, 0xec, 0xbc, 0x94, 0x60, 0x73, 0x88, 0x4d, 0x1f, 0xb9, 0x6d, 0xbd, 0xb5, 0x83, 0xaa, 0x75, 0x81, 0x86, 0xb1, 0x6f, 0xa4, 0x29, 0xdb, 0xf1, 0x5b, 0x8d, 0x5b, 0xb4, 0x8c, 0xca, 0x71, 0x46, 0x9e, 0x7c, 0xe0, 0xad, 0x8e, 0x7f, 0xa1, 0x4d, 0x3f, 0xf6, 0xd9, 0x0c, 0x12, 0x92, 0x09, 0xb3, 0xb7, 0x11, 0x84, 0x97, 0x43, 0x04, 0x27, 0x7a, 0x82, 0xd6, 0x44, 0xac, 0x8e, 0x0a, 0xdf, 0x75, 0xa0, 0xc4, 0x1d, 0xb8, 0x27, 0x8b, 0xf9, 0xd0, 0x17, 0x4d, 0x39, 0xbe, 0x84, 0xa3, 0xa0, 0x86, 0x6f, 0x57, 0x66, 0xd6, 0xe0, 0x24, 0xe5, 0xe9, 0x35, 0xbc, 0x95, 0xab, 0xb9, 0x10, 0x3a, 0x1e, 0x78, 0xcb, 0x5c, 0xfc, 0x52, 0x1f, 0xf8, 0x9e, 0x4f, 0xc5, 0x75, 0x1c, 0x32, 0x3f, 0xd9, 0xb6, 0x51, 0x61, 0x3d, 0x72, 0xa3, 0x0f, 0x7f, 0x07, 0x1b, 0x48, 0x36, 0xfa, 0x34, 0x64, 0xeb, 0x07, 0xce, 0x99, 0x86, 0xc2, 0x38, 0xc4, 0x06, 0x7e, 0x8e, 0x66, 0x75, 0x6e, 0x45, 0xed, 0x1b, 0x0a, 0x04, 0x36, 0xf3, 0xb4, 0xb5, 0x4f, 0x5b, 0x9c, 0xdd, 0x81, 0x0f, 0xe1, 0x28, 0x8e, 0x58, 0xf9, 0x49, 0x37, 0x81, 0x52, 0x00, 0x01, 0x8b, 0x39, 0x7c, 0x39, 0x22, 0xfc, 0xe4, 0x36, 0xcf, 0x4b, 0x31, 0xde, 0x6e, 0xe4, 0x3e, 0x6c, 0xe3, 0x70, 0x22, 0x70, 0x09, 0xa7, 0xbd, 0x16, 0xeb, 0xbb, 0x91, 0xac, 0x37, 0xf4, 0xd3, 0x5f, 0xef, 0x97, 0xc2, 0x45, 0x62, 0x0d, 0x38, 0xa1, 0x5b, 0x41, 0x7f, 0x62, 0x98, 0x4a, 0x65, 0xec, 0x7d, 0x4a, 0x93, 0x1b, 0x0a, 0x96, 0x1a, 0x85, 0x0b, 0x17, 0x4f, 0x00, 0x8e, 0xf0, 0xd9, 0x65, 0x9a, 0x60, 0x08, 0x93, 0x1e, 0xea, 0x69, 0xb6, 0x28, 0xb4, 0x97, 0xc9, 0x57, 0x2e, 0x53, 0x59, 0x93, 0xf3, 0xd7, 0x8c, 0xfb, 0xf4, 0x68, 0x63, 0x1f, 0xd3, 0x2b, 0x3c, 0x70, 0x8d, 0x39, 0x9b, 0xf5, 0x5c, 0xf5, 0x29, 0x3f, 0xdc, 0x9e, 0xfd, 0x9e, 0x6c, 0x20, 0x1b, 0x95, 0xd7, 0x30, 0x3a, 0x8c, 0x34, 0x97, 0xcb, 0xc5, 0x0a, 0xce, 0x36, 0x91, 0xb8, 0xcc, 0x67, 0xc4, 0x14, 0x1c, 0x89, 0x66, 0x53, 0x32, 0x11, 0xab, 0x29, 0xff, 0xff, 0x25, 0x30, 0xc3, 0x60, 0x39, 0x8e, 0x23, 0x18, 0xd0, 0xd3, 0x7b, 0xde, 0x4e, 0x20, 0x75, 0x88, 0xc8, 0x8e, 0xdb, 0x89, 0x72, 0xcd, 0xa9, 0xb8, 0x56, 0x0c, 0x67, 0x53, 0x4c, 0x19, 0xb5, 0x43, 0x26, 0xca, 0x28, 0xa1, 0x2b, 0x9b, 0x54, 0x7a, 0xc7, 0x98, 0x2a, 0xcf, 0x80, 0x7e, 0x85, 0xe0, 0x2c, 0x1d, 0xff, 0xab, 0x61, 0x00, 0x09, 0xaf, 0x2e, 0x50, 0x3b, 0xf5, 0x08, 0xf6, 0xe8, 0x51, 0x07, 0x00, 0xf6, 0xe6, 0x53, 0x46, 0xec, 0xe8, 0xd9, 0x4d, 0x4d, 0xa6, 0x42, 0x6b, 0x25, 0xc7, 0x25, 0x2c, 0xe1, 0xd3, 0x7b, 0xf5, 0x63, 0xf6, 0x54, 0xe7, 0x56, 0x01, 0xc9, 0x06, 0xbf, 0xb2, 0x32, 0x9b, 0xd5, 0x35, 0x99, 0xd7, 0x13, 0xea, 0x6e, 0xb8, 0x8b, 0x69, 0x7b, 0x31, 0x7d, 0xc4, 0x1b, 0x85, 0x28, 0x0c, 0xa7, 0xf4, 0xe0, 0x16, 0x32, 0x99, 0x61, 0x7e, 0x76, 0x93, 0x63, 0xed, 0x0d, 0x63, 0x6f, 0x98, 0xe5, 0x95, 0xf0, 0x09, 0xee, 0xa3, 0x8d, 0x22, 0x15, 0x16, 0xb6, 0x5f, 0x76, 0xee, 0x7d, 0x5b, 0xcd, 0x44, 0xa8, 0x96, 0x2e, 0x2e, 0x04, 0x75, 0xf7, 0xe3, 0xfc, 0x8a, 0x02, 0x1f, 0x69, 0x16, 0x1f, 0xc9, 0xac, 0xcc, 0xc1, 0xd4, 0xfb, 0xd8, 0xf7, 0x63, 0xf8, 0x20, 0x9e, 0x30, 0x88, 0xca, 0xd6, 0x2e, 0xe2, 0xfe, 0xb2, 0x6d, 0xe6, 0xed, 0x34, 0x3e, 0xb1, 0x12, 0x78, 0x99, 0x6e, 0xb7, 0x2f, 0xbb, 0x6e, 0xbc, 0x4f, 0x13, 0x7c, 0x94, 0x09, 0x5f, 0x6a, 0x90, 0xfc, 0x13, 0xf0, 0x60, 0xa8, 0xfa, 0xb7, 0xd7, 0x25, 0x1f, 0xb0, 0xee, 0x14, 0xee, 0xaa, 0x0c, 0xd7, 0x97, 0x24, 0x84, 0xfd, 0xb3, 0x5f, 0x5f, 0x00, 0x2a, 0xb8, 0x5d, 0x33, 0x54, 0x35, 0x36, 0xf6, 0x5e, 0x5e, 0x25, 0x2c, 0xf0, 0x4e, 0xa7, 0xef, 0x0c, 0x09, 0x81, 0x82, 0x3a, 0x10, 0x00, 0x86, 0xe2, 0x33, 0x84, 0x71, 0xf9, 0xa7, 0x40, 0x3d, 0xdf, 0x58, 0x3b, 0x5d, 0x88, 0x80, 0x9a, 0xf5, 0xdb, 0x79, 0x22, 0x4a, 0x57, 0xd0, 0xf9, 0x78, 0xfc, 0x9a, 0xac, 0x63, 0x69, 0x0b, 0x76, 0xef, 0x42, 0x44, 0xc0, 0x74, 0xd4, 0x6d, 0xe4, 0x6c, 0xfc, 0x04, 0x36, 0x6f, 0x44, 0x74, 0x45, 0x62, 0x50, 0xea, 0x5e, 0xeb, 0x79, 0x64, 0x52, 0x27, 0xb7, 0x0b, 0x79, 0xa0, 0xc4, 0xc2, 0xf7, 0x79, 0x7e, 0xff, 0x3e, 0xec, 0x8e, 0xd9, 0xd5, 0xf7, 0x47, 0x63, 0x57, 0x51, 0xd0, 0x39, 0xbe, 0xa3, 0x86, 0x58, 0xe1, 0xf5, 0x9c, 0x33, 0x3c, 0x66, 0x04, 0x03, 0xf0, 0x21, 0x93, 0x5e, 0x0a, 0x8c, 0x60, 0x0b, 0x08, 0xc3, 0x6d, 0x15, 0x9a, 0x44, 0x89, 0x1e, 0xa5, 0xec, 0x74, 0xf6, 0x8d, 0x22, 0x45, 0x6c, 0xb4, 0x52, 0x09, 0x64, 0x3e, 0x9d, 0xad, 0x2a, 0x18, 0xce, 0x1e, 0x06, 0x38, 0x90, 0xae, 0x11, 0x26, 0xdf, 0xba, 0x46, 0xbb, 0xbd, 0x89, 0xdc, 0x28, 0x26, 0x78, 0xd4, 0x3b, 0x45, 0x54, 0xce, 0xde, 0xe8, 0x08, 0x20, 0xe1, 0x32, 0x78, 0x29, 0xf9, 0x8f, 0xac, 0xe3, 0x08, 0xed, 0x31, 0xb8, 0x9e, 0x2a, 0xbc, 0x97, 0xc0, 0xc8, 0x11, 0x46, 0xe9, 0xe8, 0x23, 0xfa, 0x4f, 0x76, 0x7d, 0x25, 0x67, 0xa1, 0xe0, 0x8f, 0xab, 0x8e, 0x2e, 0xa8, 0x9b, 0x4d, 0x86, 0x1d, 0x02, 0x0c, 0xb1, 0xa9, 0x7a, 0x8a, 0xbd, 0x2e, 0x32, 0xcf, 0xe7, 0x04, 0xef, 0x1b, 0xbf, 0x90, 0x51, 0x1c, 0x86, 0x19, 0x58, 0x63, 0xdb, 0xd8, 0x26, 0x19, 0x97, 0x4e, 0x07, 0xee, 0xf5, 0xdb, 0xae, 0x53, 0xf6, 0x8b, 0xc2, 0xe9, 0x03, 0x33, 0x99, 0x39, 0xd4, 0xbd, 0x43, 0xa5, 0x92, 0xc0, 0xca, 0x9e, 0x38, 0x54, 0xb8, 0x18, 0x3f, 0x24, 0xda, 0x3b, 0x7a, 0xc4, 0x44, 0x5c, 0x3f, 0x45, 0x95, 0x2b, 0xc7, 0x07, 0x7c, 0x2e, 0xd7, 0xcf, 0x7b, 0x6e, 0xa0, 0x19, 0xeb, 0x70, 0xe5, 0xb0, 0x41, 0x66, 0x5b, 0x7b, 0x8f, 0xa7, 0x55, 0x9a, 0x4e, 0x5d, 0xa0, 0xb2, 0x5a, 0x7d, 0xac, 0x84, 0x3e, 0xfd, 0xed, 0xc5, 0xb2, 0x41, 0x81, 0x29, 0x62, 0xd6, 0x13, 0xc2, 0xf1, 0x62, 0xff, 0x88, 0x3e, 0xdb, 0xb7, 0x39, 0xe6, 0xf8, 0x65, 0x63, 0x0a, 0xe5, 0xd2, 0xbe, 0x52, 0x3b, 0x86, 0xc0, 0x31, 0x2f, 0x31, 0x6c, 0x6b, 0x0a, 0x49, 0x6b, 0xd5, 0xd9, 0xf5, 0x5d, 0x5c, 0x65, 0x2a, 0x71, 0x49, 0x65, 0x13, 0x33, 0xc4, 0xf3, 0xb7, 0xa6, 0x96, 0x3d, 0xd6, 0x93, 0x33, 0x7d, 0x13, 0x20, 0xf7, 0x2b, 0x59, 0xa4, 0xb0, 0x70, 0x77, 0xba, 0x5d, 0xdf, 0x0d, 0x95, 0x35, 0x60, 0xac, 0x93, 0xeb, 0x6c, 0x39, 0x14, 0x31, 0x80, 0x92, 0x8c, 0x7b, 0xcb, 0x74, 0xd7, 0x05, 0x2a, 0x9d, 0xcd, 0x17, 0x57, 0x2d, 0x17, 0x88, 0x5e, 0x52, 0x41, 0x81, 0x50, 0x24, 0x0f, 0x83, 0x3a, 0xce, 0x15, 0xab, 0x58, 0xef, 0x82, 0x35, 0x87, 0x40, 0x3d, 0x40, 0xf9, 0x76, 0x33, 0xd0, 0x2c, 0x6a, 0xef, 0x19, 0x1d, 0x77, 0x6b, 0xfb, 0xb9, 0x23, 0x25, 0xc9, 0x94, 0x02, 0x76, 0x4e, 0xdd, 0xd8, 0x1f, 0x12, 0x92, 0xfe, 0x25, 0xd9, 0xf0, 0x07, 0xe0, 0x6d, 0x2e, 0xa2, 0x4e, 0x9d, 0x6a, 0xc2, 0xad, 0x86, 0xe4, 0xfd, 0x48, 0x11, 0x6a, 0x32, 0x91, 0xbd, 0x13, 0x6f, 0x70, 0x9f, 0x30, 0x12, 0xdb, 0xa7, 0x80, 0x2e, 0xa7, 0x24, 0xa3, 0x30, 0x9d, 0x8a, 0xd1, 0xc2, 0xd1, 0x73, 0xcc, 0xef, 0x2f, 0xe5, 0x13, 0x88, 0x57, 0xd3, 0x59, 0xc7, 0xab, 0xe6, 0x35, 0x33, 0xa5, 0x7d, 0x1b, 0xc3, 0x6f, 0xf2, 0x8b, 0x46, 0xad, 0x1f, 0x88, 0x02, 0x9d, 0x20, 0x4c, 0x9c, 0x63, 0x5b, 0x3a, 0x38, 0x9e, 0xbe, 0x14, 0xe0, 0x3f, 0x48, 0x6e, 0x2a, 0x9b, 0xcb, 0x63, 0x15, 0xbf, 0xf0, 0x86, 0x35, 0x03, 0x7b, 0x1b, 0x10, 0xe2, 0xd0, 0x88, 0xc7, 0x08, 0xb6, 0x06, 0xf9, 0xad, 0x5c, 0x9c, 0xe4, 0x22, 0x9a, 0x4e, 0xcd, 0xa9, 0x78, 0x92, 0xa2, 0x8a, 0xf4, 0x03, 0xdf, 0x63, 0x00, 0x59, 0xae, 0xc0, 0xcb, 0x99, 0x52, 0xeb, 0x41, 0x89, 0xc5, 0x06, 0xd5, 0x67, 0xa0, 0x56, 0x7e, 0xda, 0x3c, 0xe2, 0xff, 0x29, 0x17, 0x3d, 0x6c, 0xab, 0x79, 0xa0, 0xea, 0x7f, 0x57, 0x3b, 0xb6, 0x7c, 0x77, 0xcd, 0x69, 0x6b, 0xd5, 0x73, 0x7a, 0x74, 0x46, 0xbd, 0x04, 0xd7, 0x5b, 0x07, 0xc9, 0xdd, 0x88, 0x07, 0x78, 0x0d, 0x85, 0xa2, 0x2b, 0xa2, 0xf5, 0x04, 0x34, 0x3d, 0x46, 0xef, 0x19, 0xd8, 0xd8, 0x53, 0xdd, 0xfb, 0x61, 0x20, 0x81, 0x32, 0x90, 0x58, 0xcb, 0xbe, 0xf0, 0x68, 0x46, 0x8b, 0x10, 0xb8, 0x8a, 0x62, 0xe1, 0x81, 0xbd, 0x60, 0x5f, 0xdf, 0x5a, 0xa7, 0x73, 0x27, 0x31, 0x53, 0x18, 0x7a, 0xb0, 0xb0, 0xbe, 0x9a, 0x60, 0xaa, 0xeb, 0xfd, 0xb2, 0x84, 0x28, 0x20, 0xfc, 0xcd, 0x1b, 0x1e, 0xbf, 0x90, 0xf1, 0x81, 0x2b, 0xcc, 0xff, 0x58, 0xe5, 0x23, 0xa8, 0x8a, 0x07, 0xd6, 0x81, 0x69, 0x69, 0xf1, 0xb3, 0x8a, 0x1f, 0xc3, 0xa1, 0xd5, 0x42, 0x91, 0xcb, 0xd8, 0xf4, 0x8c, 0xf2, 0x60, 0x9e, 0xff, 0x7e, 0x4b, 0x7c, 0xcd, 0x1c, 0x98, 0x5c, 0x1b, 0xab, 0xc0, 0xa2, 0x4a, 0x59, 0x49, 0x90, 0x28, 0x09, 0x98, 0xc4, 0x67, 0xf9, 0x07, 0x02, 0x4e, 0xa1, 0x37, 0x34, 0xae, 0xde, 0xa8, 0xaf, 0x18, 0x4f, 0x86, 0xb8, 0x4d, 0xff, 0xc6, 0x47, 0xf6, 0x45, 0x72, 0x0b, 0x95, 0xe9, 0x41, 0xad, 0xbc, 0x88, 0x6b, 0x59, 0x7d, 0x3a, 0xbb, 0x7b, 0x21, 0x71, 0xe6, 0xc6, 0x1c, 0x25, 0x1b, 0x7b, 0x41, 0x2e, 0xdb, 0xe8, 0x33, 0xf1, 0x0b, 0x2f, 0x1c, 0x3e, 0x48, 0x48, 0xa1, 0x79, 0x7a, 0x49, 0x15, 0xf8, 0xac, 0xe5, 0xec, 0xad, 0x1b, 0x33, 0x73, 0x05, 0x8c, 0xb1, 0xbf, 0x0f, 0xe3, 0x89, 0xe3, 0xe1, 0xf2, 0x13, 0x67, 0x38, 0x8f, 0x9a, 0xf5, 0x5e, 0xe9, 0x63, 0x54, 0x51, 0x1c, 0xeb, 0x9b, 0x21, 0x02, 0x71, 0x9e, 0x9a, 0x4c, 0xb4, 0xad, 0x23, 0xd2, 0xfe, 0x7e, 0xe6, 0x28, 0x61, 0x67, 0x31, 0x72, 0x41, 0xd0, 0x1c, 0x79, 0x13, 0xe9, 0x6d, 0xfe, 0x63, 0x98, 0xb8, 0x4e, 0x1c, 0xb6, 0xcb, 0x16, 0x04, 0x7a, 0x49, 0x79, 0x86, 0x35, 0x94, 0x60, 0xb4, 0x40, 0xf0, 0x11, 0x8c, 0x33, 0xe6, 0x04, 0x7a, 0x58, 0xe7, 0xf1, 0x1f, 0x60, 0x32, 0x2e, 0x51, 0x54, 0xf8, 0x38, 0x63, 0xce, 0xbd, 0x90, 0xa6, 0x68, 0x01, 0xc8, 0x2f, 0x75, 0x20, 0xdd, 0xdb, 0xef, 0x77, 0xc7, 0x91, 0xb1, 0xc8, 0x4f, 0xc7, 0xe6, 0xdf, 0x21, 0x48, 0xc2, 0x76, 0x22, 0x34, 0x70, 0x57, 0x03, 0x48, 0x4b, 0xc0, 0x17, 0x5f, 0x50, 0x0b, 0x61, 0x39, 0xd3, 0x8e, 0xf2, 0x7c, 0x72, 0xc1, 0x72, 0xf8, 0x48, 0x9e, 0xfc, 0x2f, 0x63, 0x4e, 0x2f, 0x15, 0x77, 0x01, 0x81, 0x14, 0xd3, 0x1e, 0xd7, 0x53, 0x95, 0x9c, 0x53, 0x38, 0x1a, 0xaf, 0x6d, 0x2c, 0xb9, 0xa8, 0x46, 0x9e, 0xb1, 0x16, 0x38, 0x4a, 0x5f, 0x32, 0xb2, 0xbb, 0xb5, 0x7a, 0x43, 0x0e, 0xe7, 0x9b, 0xf4, 0xfa, 0x67, 0x94, 0xdb, 0x0d, 0x14, 0x19, 0xed, 0x38, 0xaf, 0x35, 0x14, 0x8e, 0x8e, 0x34, 0x82, 0x49, 0x94, 0xc0, 0x44, 0x0e, 0x60, 0x4a, 0x1a, 0x72, 0xc5, 0xac, 0x86, 0xbc, 0x7a, 0x0c, 0x23, 0xec, 0x13, 0x03, 0x38, 0xfd, 0x30, 0xfe, 0x8d, 0x68, 0xf5, 0xe5, 0x7d, 0xe9, 0xba, 0xfb, 0x4d, 0x85, 0x03, 0x06, 0xbc, 0xcc, 0xb2, 0xaf, 0xdb, 0x5c, 0x7b, 0x2b, 0x1f, 0xa6, 0x99, 0x1b, 0xb5, 0xf5, 0xbf, 0xb1, 0x15, 0xac, 0x52, 0x15, 0xda, 0xce, 0xd5, 0x07, 0xd1, 0xc4, 0xa5, 0xc5, 0x50, 0x5b, 0xe6, 0x2f, 0xc9, 0x0d, 0xbd, 0x29, 0x9e, 0x81, 0xbf, 0x41, 0x37, 0x55, 0xaa, 0x92, 0x53, 0x1a, 0x53, 0xe7, 0x9b, 0xa0, 0xe0, 0x24, 0x7d, 0x74, 0x37, 0xe2, 0x37, 0xa8, 0xb7, 0x5a, 0x32, 0xd2, 0x25, 0x84, 0x92, 0x57, 0xe9, 0x80, 0x0b, 0xea, 0x7a, 0x34, 0xf6, 0x4f, 0x17, 0x37, 0xa4, 0x65, 0xb8, 0xed, 0xf2, 0x63, 0x44, 0xf4, 0x1d, 0x62, 0x04, 0xbf, 0xd8, 0x1c, 0x58, 0x81, 0x9c, 0xf3, 0xa8, 0x4d, 0x40, 0x35, 0x9e, 0x7b, 0xc9, 0x9e, 0x92, 0x4d, 0x83, 0x1e, 0x46, 0xd3, 0x51, 0xdd, 0xd4, 0x0b, 0x41, 0x7d, 0xe4, 0x4d, 0x63, 0x9f, 0x22, 0xe6, 0xdc, 0xa8, 0xf0, 0x04, 0x36, 0xc5, 0x57, 0xd2, 0xfa, 0x2c, 0x44, 0xe3, 0x81, 0xa5, 0xf1, 0xd4, 0x07, 0x49, 0xa1, 0x2d, 0x01, 0x8a, 0x90, 0x89, 0xb0, 0x74, 0x2a, 0xf7, 0xf7, 0x33, 0x7b, 0x9f, 0x6a, 0xd4, 0xe7, 0xa9, 0xa7, 0x50, 0x1b, 0x5a, 0xe9, 0xc6, 0x43, 0x80, 0xda, 0x08, 0x7d, 0x11, 0xa9, 0x59, 0x8e, 0x0f, 0x5d, 0x75, 0xd5, 0xae, 0x69, 0xd2, 0x7d, 0xb9, 0x80, 0x26, 0xf6, 0x32, 0xaa, 0x29, 0xa5, 0x39, 0x98, 0x9c, 0xda, 0x2e, 0x34, 0x8a, 0x03, 0x1a, 0x7d, 0xce, 0x20, 0x4b, 0x92, 0xd5, 0x77, 0x3f, 0x0c, 0xa5, 0x89, 0xc4, 0x91, 0x1e, 0x44, 0x5c, 0xa7, 0x80, 0x7a, 0xe6, 0xc5, 0x2e, 0x92, 0x7b, 0xb0, 0xb2, 0x7e, 0x97, 0x05, 0x00, 0xed, 0x79, 0x11, 0xff, 0xc1, 0xcc, 0xe9, 0x45, 0xc3, 0x86, 0xb7, 0x22, 0x95, 0x11, 0x53, 0xe1, 0xe9, 0xa9, 0x13, 0x4a, 0xf1, 0x05, 0xe3, 0x6c, 0x16, 0x39, 0x98, 0x99, 0xed, 0xdb, 0x81, 0xb1, 0x67, 0x64, 0x3f, 0xa4, 0x48, 0xda, 0xd7, 0x32, 0xda, 0xac, 0x06, 0xf5, 0xe2, 0xde, 0xd5, 0xa2, 0xd3, 0x65, 0x6c, 0x8c, 0x42, 0xd5, 0x2b, 0x69, 0x9a, 0x39, 0xf7, 0x59, 0x11, 0x42, 0xd2, 0x24, 0xda, 0xa5, 0xaf, 0xc3, 0x9c, 0xbe, 0x84, 0x23, 0x24, 0x79, 0xa0, 0x25, 0x57, 0x72, 0x3f, 0xe9, 0x6a, 0x5b, 0x5c, 0x4c, 0x55, 0x9f, 0xc6, 0xaf, 0x84, 0x44, 0x76, 0xfb, 0xd0, 0x16, 0x20, 0xe1, 0xaf, 0x02, 0x08, 0x67, 0xa7, 0xc0, 0x17, 0xa0, 0x09, 0xb5, 0x2e, 0xba, 0xdb, 0x17, 0xba, 0x3f, 0x16, 0x52, 0x89, 0x94, 0x12, 0xaa, 0xdc, 0xc6, 0x3e, 0x22, 0xbd, 0x85, 0x14, 0x9d, 0x92, 0x71, 0x4c, 0x44, 0xf3, 0x95, 0x50, 0x27, 0xb9, 0x31, 0xf1, 0x27, 0x57, 0xbd, 0x58, 0x13, 0x6e, 0x2a, 0x3f, 0x11, 0x9b, 0x6b, 0x61, 0x40, 0x94, 0x34, 0x2e, 0x9b, 0x73, 0x02, 0xc4, 0x21, 0x51, 0x5b, 0x1b, 0x33, 0x17, 0x57, 0x7f, 0x3d, 0x91, 0x5f, 0x44, 0x98, 0xc4, 0x35, 0xb5, 0xaf, 0x82, 0x34, 0x4d, 0x61, 0x3b, 0xda, 0x2a, 0xa7, 0x16, 0x83, 0xbe, 0x77, 0x40, 0x77, 0xc8, 0xe8, 0x84, 0x27, 0x82, 0x96, 0x1d, 0xb4, 0x1c, 0x48, 0xc8, 0xb1, 0x6a, 0xd0, 0x1d, 0x2a, 0xda, 0x33, 0x1e, 0xe5, 0xa8, 0x0a, 0x11, 0xe7, 0x55, 0x28, 0x8b, 0x3a, 0x55, 0x7d, 0xce, 0xee, 0x08, 0x3a, 0x54, 0x5e, 0xeb, 0x36, 0xac, 0xb5, 0x10, 0x91, 0x85, 0xb0, 0xcb, 0x97, 0x09, 0xa5, 0xaf, 0xe7, 0x6c, 0xc4, 0xb8, 0xd4, 0xc4, 0x9d, 0xca, 0x0b, 0x1b, 0xe2, 0x5a, 0x76, 0xc2, 0x6e, 0x6b, 0x61, 0xe9, 0x87, 0xbd, 0xdc, 0x6d, 0x60, 0x41, 0x60, 0xf1, 0xe2, 0xcf, 0xb5, 0x30, 0xac, 0x1b, 0x12, 0x91, 0x59, 0xe6, 0x87, 0xfd, 0x01, 0x71, 0x98, 0xed, 0x02, 0x37, 0x2b, 0xc7, 0x00, 0xdb, 0xa4, 0x6a, 0x2a, 0x60, 0x4e, 0x07, 0xbf, 0x98, 0xfd, 0x34, 0xd1, 0xdf, 0xf1, 0x3b, 0x4a, 0x09, 0xfe, 0xb8, 0x2c, 0x98, 0xea, 0x63, 0x1d, 0x32, 0x17, 0x2a, 0x22, 0x53, 0x61, 0x83, 0xab, 0x40, 0x4a, 0x00, 0xd0, 0x3c, 0x55, 0x23, 0xda, 0xfd, 0xaf, 0x75, 0x05, 0x61, 0x14, 0xd2, 0x84, 0x5e, 0xf1, 0x07, 0xc6, 0x37, 0xc6, 0x9f, 0xf8, 0xf6, 0xcf, 0xf9, 0xcb, 0x16, 0xe3, 0x9e, 0x77, 0x80, 0x9c, 0xd2, 0x00, 0xb9, 0xb8, 0x69, 0xb7, 0x59, 0xbf, 0xdc, 0x05, 0xbf, 0xe6, 0x9c, 0x64, 0x03, 0x34, 0xa6, 0xae, 0x2c, 0xe3, 0x58, 0x9a, 0xa3, 0x09, 0x83, 0x83, 0xe8, 0x78, 0xc1, 0x6c, 0x84, 0xe2, 0x09, 0x42, 0x3f, 0x41, 0x80, 0x60, 0x92, 0x75, 0x92, 0x59, 0x5f, 0x2f, 0x42, 0xf1, 0xe0, 0x0f, 0xbe, 0x6c, 0xde, 0x09, 0x37, 0x0c, 0x23, 0x0d, 0xef, 0xd5, 0x31, 0xe7, 0x94, 0x93, 0x34, 0x64, 0xcc, 0x1e, 0x36, 0xb6, 0x11, 0xdd, 0x92, 0x19, 0xbf, 0x89, 0xab, 0xb7, 0x6b, 0x33, 0xdd, 0xc9, 0x77, 0x89, 0xb4, 0x00, 0xe3, 0x55, 0x5c, 0x23, 0x66, 0x46, 0x59, 0xf9, 0xbe, 0xf3, 0x78, 0x69, 0x44, 0x1d, 0x06, 0xe0, 0xc3, 0x34, 0x3f, 0xf3, 0x8a, 0x1d, 0x09, 0x46, 0xc0, 0x33, 0xe3, 0xac, 0xf8, 0x8c, 0x18, 0x8f, 0x05, 0x7d, 0x38, 0x93, 0x10, 0x60, 0xc8, 0x76, 0xe8, 0x94, 0x39, 0x3b, 0x98, 0xc6, 0x17, 0x87, 0x3f, 0x6f, 0x83, 0x4b, 0x1c, 0x9e, 0xe3, 0xa3, 0xe9, 0xf8, 0xd8, 0xfe, 0x6a, 0xfd, 0x71, 0x80, 0x45, 0x8d, 0x9e, 0xa4, 0x14, 0xaa, 0xe7, 0x26, 0xb9, 0x7f, 0x5d, 0x20, 0xf1, 0xa1, 0xd1, 0x73, 0x2d, 0x96, 0x45, 0x68, 0x9d, 0x94, 0xa0, 0x97, 0x8d, 0x8a, 0xa6, 0x08, 0xf4, 0x65, 0x26, 0x99, 0x4a, 0x8c, 0x75, 0x9f, 0x9b, 0xac, 0x1c, 0xd0, 0xda, 0xbb, 0xce, 0x61, 0x77, 0x37, 0x9d, 0x6b, 0x33, 0xaf, 0x6d, 0x93, 0x34, 0x85, 0xa8, 0xea, 0x54, 0xf2, 0x33, 0x12, 0xbf, 0x4a, 0xa1, 0xa3, 0xbd, 0x82, 0xa7, 0xcc, 0xcc, 0xef, 0xd0, 0x3e, 0xf2, 0x50, 0x72, 0x45, 0x51, 0x0f, 0xe1, 0x38, 0xfc, 0xc4, 0xe2, 0x14, 0x09, 0xfb, 0x63, 0x64, 0xe8, 0x37, 0x69, 0x64, 0xf3, 0x37, 0x49, 0x65, 0x45, 0x77, 0x1b, 0x73, 0xd0, 0xfa, 0x6c, 0x36, 0xaa, 0x47, 0x33, 0x16, 0xa8, 0xb2, 0x06, 0xa2, 0x2e, 0xdc, 0x8e, 0x33, 0x45, 0x7d, 0x39, 0xcc, 0xee, 0x61, 0x2e, 0x45, 0xb7, 0xb1, 0x86, 0xa9, 0x8b, 0x74, 0xb9, 0xdc, 0xce, 0x55, 0x56, 0x81, 0xaa, 0xa7, 0xf8, 0x1a, 0xa3, 0xa6, 0x75, 0x71, 0x72, 0x00, 0x58, 0x38, 0x10, 0x94, 0x92, 0xec, 0x11, 0x79, 0x6c, 0xff, 0x33, 0x42, 0xc0, 0x35, 0x37, 0x80, 0x69, 0x4f, 0xef, 0x89, 0xf8, 0xe7, 0x99, 0x78, 0xa8, 0x9b, 0x6b, 0x75, 0x95, 0x6d, 0x6f, 0x37, 0x28, 0x6a, 0x91, 0xc6, 0xd6, 0x8a, 0xf7, 0x86, 0x0a, 0xd8, 0x90, 0x71, 0x5f, 0xd2, 0xf0, 0xa4, 0x13, 0x13, 0x5b, 0x1d, 0xb9, 0x2f, 0x1f, 0xc3, 0x2d, 0xdf, 0x27, 0xa6, 0xcd, 0x5e, 0xce, 0x89, 0xe6, 0x12, 0xf1, 0x9e, 0x6d, 0x6f, 0x48, 0x90, 0xf0, 0x19, 0xf6, 0xc6, 0xcb, 0x48, 0x5e, 0xe7, 0x9f, 0x71, 0x39, 0x99, 0x00, 0x23, 0xe5, 0x8f, 0x6e, 0x2f, 0x00, 0xc2, 0x87, 0x0b, 0x36, 0xfe, 0x7a, 0x78, 0x57, 0xa1, 0xbf, 0x63, 0xad, 0xa0, 0x06, 0x09, 0x8c, 0xca, 0x6d, 0x5f, 0x2a, 0x51, 0xf5, 0xb1, 0xb1, 0x86, 0x37, 0x89, 0x93, 0xe4, 0x53, 0xd2, 0x1e, 0x50, 0x2a, 0x3d, 0x50, 0x9f, 0xcd, 0xe4, 0xec, 0x59, 0x34, 0x2e, 0xcd, 0xbc, 0x34, 0xf2, 0x7b, 0x04, 0xab, 0xdf, 0xfc, 0xea, 0xfe, 0x1b, 0xed, 0x6b, 0xc5, 0x2a, 0xd1, 0xca, 0xc4, 0x12, 0xa8, 0xd8, 0x1e, 0xbc, 0xc4, 0x73, 0xc5, 0x9e, 0xd8, 0x4d, 0x35, 0x97, 0x52, 0xef, 0x62, 0x1a, 0xea, 0xfd, 0xee, 0x8f, 0x7b, 0xbb, 0xa0, 0xf6, 0x12, 0xd0, 0x12, 0xce, 0x45, 0x4a, 0xa9, 0x35, 0xc7, 0xe3, 0xca, 0x50, 0x39, 0x82, 0x4b, 0xed, 0x42, 0x05, 0x28, 0x67, 0xe1, 0x3e, 0x78, 0xca, 0x02, 0x3b, 0x9f, 0x38, 0x50, 0xcb, 0xc4, 0x8c, 0x4b, 0x3d, 0x86, 0x3c, 0x9a, 0x6b, 0xea, 0x84, 0xa2, 0xf8, 0x98, 0xc1, 0x57, 0xd5, 0x48, 0x1b, 0x52, 0x0a, 0x77, 0x66, 0x25, 0xb3, 0x5e, 0x4a, 0xeb, 0x48, 0x24, 0xa2, 0x23, 0x22, 0x53, 0x23, 0xbe, 0x3b, 0x89, 0x3e, 0x76, 0x36, 0x70, 0x47, 0x62, 0x9f, 0xef, 0xd6, 0xc7, 0x73, 0xa2, 0x6e, 0x32, 0xe3, 0x88, 0x5c, 0xc3, 0x55, 0xfc, 0xe2, 0xcc, 0xac, 0xe7, 0x95, 0x9b, 0xc9, 0x33, 0x04, 0x93, 0x51, 0x83, 0x9a, 0x82, 0xb1, 0x21, 0xc6, 0x2e, 0x60, 0x37, 0x58, 0x31, 0x64, 0x43, 0x2f, 0x07, 0x18, 0xc5, 0x11, 0x66, 0x2c, 0x3a, 0xda, 0xcd, 0xed, 0x4e, 0xd9, 0x60, 0xc7, 0x4e, 0x77, 0xf3, 0x08 ],
- const [ 0xb2, 0xc6, 0x33, 0xe3, 0x18, 0x1a, 0xe5, 0xfe, 0x78, 0x28, 0x70, 0x7e, 0xd5, 0xb7, 0x0e, 0x04, 0x60, 0x08, 0x8a, 0x84, 0x46, 0x5e, 0xad, 0xee, 0xcd, 0xbc, 0xfa, 0x0e, 0x9f, 0xf1, 0x9b, 0xb1, 0x65, 0xd2, 0x9a, 0x09, 0x98, 0xc7, 0x54, 0x52, 0x94, 0x89, 0x2b, 0xb6, 0xef, 0x29, 0x7c, 0x6e, 0x08, 0x55, 0xd1, 0x2b, 0xe3, 0xd7, 0x57, 0xb4, 0x34, 0x5e, 0x92, 0xd0, 0xb9, 0x81, 0x4f, 0x66, 0xcd, 0x01, 0xda, 0xe3, 0x3b, 0x4e, 0x72, 0xdc, 0x50, 0x4d, 0xfa, 0xf5, 0x34, 0x59, 0xf1, 0x01, 0x7a, 0x88, 0xa4, 0x6a, 0xf5, 0x2f, 0xa2, 0xd3, 0xcd, 0xa8, 0x71, 0xfd, 0xd3, 0x52, 0x7f, 0xe7, 0x12, 0xda, 0x5b, 0x3a, 0xa6, 0xb9, 0x25, 0xe3, 0xd2, 0xfe, 0x44, 0x02, 0x4c, 0x4e, 0x56, 0x03, 0xdb, 0x29, 0x6d, 0x0a, 0x24, 0x6e, 0x78, 0x95, 0xc1, 0x22, 0xff, 0x5d, 0x94, 0x6d, 0x14, 0x7d, 0x5b, 0xe5, 0x86, 0xd5, 0x84, 0x10, 0x57, 0xb1, 0x42, 0x23, 0x70, 0xa6, 0xe0, 0x10, 0x94, 0xbd, 0x56, 0xc0, 0x93, 0xd4, 0x1a, 0x9d, 0xc0, 0x40, 0x38, 0x54, 0xa4, 0xb7, 0xa5, 0xd9, 0xf4, 0x6e, 0xd0, 0xab, 0xc1, 0x7e, 0x7b, 0x59, 0xef, 0x8c, 0xc9, 0x45, 0xe8, 0xa9, 0x98, 0xa8, 0x91, 0x77, 0x10, 0xd6, 0x7e, 0x8d, 0x7c, 0xc4, 0x62, 0x1d, 0x59, 0xc7, 0xc9, 0xd4, 0xad, 0x9e, 0x09, 0x02, 0x9b, 0xb3, 0x75, 0xfb, 0x33, 0x9e, 0xd5, 0xbd, 0x8f, 0xeb, 0x13, 0xd3, 0x1b, 0x1d, 0x37, 0x79, 0x34, 0xf2, 0x95, 0x00, 0xf5, 0xe9, 0x45, 0x74, 0x4d, 0x02, 0xd4, 0x7d, 0x55, 0xc5, 0x39, 0x83, 0xe1, 0x85, 0x0b, 0x15, 0x56, 0xe6, 0xf1, 0x8c, 0xbb, 0x9d, 0x59, 0xeb, 0x12, 0x77, 0x6d, 0x0a, 0xe8, 0x9d, 0x42, 0xf4, 0x2b, 0x16, 0x53, 0x8d, 0x3c, 0x8d, 0x2f, 0x78, 0x45, 0x55, 0x6e, 0x37, 0xcd, 0xaa, 0xe9, 0x94, 0x89, 0x3a, 0x2b, 0x40, 0x75, 0xe4, 0x22, 0xbb, 0x24, 0xbf, 0x1a, 0x73, 0x54, 0x5e, 0xed, 0x30, 0xc6, 0x52, 0x73, 0xaf, 0x4d, 0xf1, 0x40, 0x8d, 0x24, 0x56, 0x8f, 0x68, 0x84, 0xa9, 0x79, 0x40, 0x76, 0xa1, 0x6b, 0x23, 0xe7, 0x46, 0xd6, 0x09, 0xfa, 0xfc, 0x28, 0xfd, 0xa2, 0xbd, 0xfc, 0x7d, 0x6f, 0xa6, 0x8d, 0x24, 0xa8, 0xb5, 0x71, 0x86, 0x9b, 0xd1, 0x84, 0x5c, 0x31, 0x0a, 0x22, 0xe1, 0xc5, 0x23, 0x99, 0x7b, 0x36, 0x4d, 0xdd, 0x9e, 0x3b, 0x36, 0x7e, 0xed, 0xf7, 0x42, 0xd8, 0xa3, 0xce, 0x18, 0x8a, 0x32, 0x76, 0x61, 0x29, 0x2a, 0x51, 0xcc, 0x35, 0x5b, 0xfa, 0x56, 0x4b, 0x3e, 0x1e, 0xc8, 0x9d, 0x91, 0x8d, 0x81, 0xa0, 0x42, 0x90, 0x75, 0x04, 0x8e, 0x7e, 0x76, 0xe9, 0x6a, 0x8a, 0xb3, 0x50, 0x22, 0xdf, 0x7e, 0xcf, 0x40, 0xef, 0x52, 0x8a, 0xaf, 0x07, 0x14, 0x5e, 0x20, 0x27, 0x99, 0x5f, 0xad, 0x12, 0x69, 0x85, 0xbc, 0xa1, 0xc2, 0xa2, 0x27, 0x5c, 0xe0, 0x97, 0x9a, 0x4b, 0x7c, 0xc8, 0x3c, 0x0a, 0x93, 0xcd, 0x91, 0x1c, 0x68, 0x6b, 0x9f, 0x81, 0xcc, 0xc2, 0x4f, 0x8b, 0x9d, 0xc7, 0x17, 0xed, 0x8d, 0xf5, 0xd6, 0x15, 0x24, 0x40, 0xff, 0xbc, 0x09, 0x4b, 0xfa, 0xbb, 0x7d, 0xda, 0xc7, 0x20, 0x28, 0x8a, 0xe5, 0x81, 0x18, 0xc0, 0x72, 0x90, 0x07, 0xdf, 0x93, 0xf0, 0xdc, 0xbe, 0x16, 0x47, 0x75, 0x59, 0x56, 0x95, 0xa4, 0xc6, 0x5f, 0xc4, 0x77, 0x6b, 0x53, 0x80, 0xbd, 0x6f, 0x0d, 0x48, 0xc5, 0x6e, 0x03, 0xc5, 0x69, 0x71, 0x71, 0x5b, 0x4b, 0x1d, 0xb4, 0xff, 0x5f, 0x2a, 0xf3, 0x48, 0xaa, 0x17, 0x05, 0xc8, 0x49, 0x1c, 0x8f, 0x9c, 0xb4, 0x61, 0x6d, 0x42, 0x44, 0x6d, 0x54, 0xab, 0xf3, 0xe1, 0xb5, 0x91, 0x64, 0x66, 0xe4, 0x0b, 0x23, 0xe4, 0x79, 0x5f, 0x2d, 0xf5, 0xf7, 0x17, 0xb3, 0x99, 0xab, 0x57, 0x1b, 0x2b, 0xd7, 0x6d, 0x48, 0x93, 0x10, 0xaa, 0x1b, 0xbe, 0xe5, 0x70, 0x39, 0x4b, 0xc1, 0x8d, 0x0f, 0x87, 0x13, 0xc7, 0x14, 0x9c, 0xab, 0xb8, 0x4e, 0x05, 0x67, 0xdd, 0x18, 0x45, 0x10, 0xe9, 0x22, 0xd9, 0x7f, 0x5f, 0xb9, 0x6b, 0x04, 0x5f, 0x49, 0x48, 0x08, 0xc0, 0x20, 0x14, 0xf0, 0x60, 0x74, 0xbd, 0x45, 0xb8, 0xa8, 0xad, 0x12, 0xb4, 0xcb, 0x44, 0x8e, 0xc1, 0x62, 0x85, 0xfb, 0x27, 0x67, 0x0f, 0xce, 0x99, 0x91, 0x4f, 0x10, 0x0a, 0xd6, 0xf5, 0x04, 0xc3, 0x2f, 0xa4, 0x0a, 0xb3, 0x9b, 0xee, 0xc3, 0x06, 0x66, 0x7f, 0x76, 0xf9, 0xab, 0x98, 0xb3, 0xec, 0x18, 0xc0, 0x36, 0xb8, 0xf1, 0xb6, 0x0d, 0x44, 0x57, 0xa9, 0xfe, 0x53, 0xcb, 0xab, 0x23, 0xa0, 0xee, 0x64, 0xd7, 0x2d, 0x8a, 0x03, 0xd6, 0xd8, 0xd6, 0x7a, 0x9f, 0x2f, 0xf6, 0xeb, 0x1d, 0x85, 0xc2, 0x5d, 0x87, 0x46, 0xc8, 0xb4, 0x85, 0x87, 0x94, 0xe0, 0x94, 0xe1, 0x2f, 0x54, 0xab, 0x80, 0xe5, 0xba, 0x1f, 0x77, 0x4b, 0xe5, 0xc4, 0x56, 0x81, 0x07, 0x55, 0xff, 0xb5, 0x24, 0x15, 0xb5, 0xe8, 0xc6, 0xb7, 0x76, 0xf5, 0xf3, 0x7b, 0x8b, 0xcf, 0x5c, 0x9b, 0x5d, 0x0a, 0xd7, 0xe5, 0x8a, 0x9d, 0x0f, 0xa9, 0x38, 0xe6, 0x7a, 0xd5, 0xaa, 0xee, 0x8c, 0x5f, 0x11, 0xef, 0x2b, 0xe3, 0xa4, 0x13, 0x62, 0x8e, 0xf2, 0x7f, 0x59, 0x3a, 0x77, 0x90, 0x85, 0xda, 0x6e, 0x64, 0x1c, 0x19, 0xe7, 0x9d, 0xcc, 0x3e, 0x19, 0x61, 0xac, 0x53, 0xf9, 0xa5, 0x73, 0x86, 0x0c, 0xac, 0xe8, 0xcf, 0x79, 0xca, 0x99, 0xd3, 0x62, 0x6e, 0xd0, 0x09, 0x74, 0x60, 0xc3, 0x1b, 0xbd, 0x46, 0x0b, 0x8f, 0xbe, 0x6d, 0x57, 0xa6, 0xc2, 0xc6, 0x62, 0x84, 0x6e, 0x2f, 0x22, 0x92, 0x98, 0xf4, 0x43, 0x21, 0x5d, 0x96, 0xd3, 0x50, 0x6d, 0xcb, 0x3f, 0x2f, 0xaa, 0xc5, 0x7e, 0x24, 0xf2, 0xb7, 0x8c, 0x8e, 0x38, 0x96, 0x1a, 0xa9, 0xda, 0x1d, 0x84, 0xb2, 0x2e, 0x13, 0x03, 0x4b, 0x5e, 0xd0, 0x24, 0x20, 0x77, 0xfe, 0x78, 0xcb, 0xbc, 0x9d, 0x8d, 0xf5, 0x40, 0x49, 0x1e, 0xbe, 0xb4, 0xc0, 0x87, 0x5f, 0x7d, 0x9f, 0x7b, 0x0e, 0x0a, 0x6c, 0xf9, 0x23, 0x64, 0xd9, 0x7c, 0x78, 0x06, 0x47, 0x73, 0x15, 0xf0, 0x8a, 0xf0, 0x0d, 0xf7, 0xec, 0xa4, 0xa3, 0x5f, 0x74, 0x0b, 0xb1, 0xab, 0x68, 0xe4, 0x4b, 0xb4, 0x10, 0xe4, 0x9f, 0xf9, 0xbd, 0xab, 0x1f, 0x36, 0x0a, 0xf7, 0xe3, 0x38, 0x62, 0x18, 0x48, 0xef, 0xc2, 0xa4, 0xde, 0xc5, 0xc0, 0x6b, 0x81, 0x2e, 0xcd, 0xad, 0xc5, 0x80, 0xb7, 0x8b, 0x98, 0x06, 0x72, 0xbc, 0x22, 0x4f, 0x17, 0x81, 0xf0, 0xcc, 0x2d, 0xdb, 0x52, 0x9b, 0x28, 0xfb, 0x01, 0x9d, 0x2f, 0xfa, 0x05, 0xce, 0x22, 0xca, 0xd6, 0xd6, 0xdc, 0x6d, 0xc2, 0xdb, 0xb5, 0x64, 0x8e, 0x9a, 0x4b, 0x6b, 0x60, 0xb6, 0x83, 0x63, 0xdd, 0x4f, 0xca, 0x90, 0x8e, 0xd7, 0xa1, 0x04, 0x88, 0x21, 0x58, 0x5b, 0x4c, 0xbb, 0x19, 0xa9, 0xec, 0x7e, 0x29, 0xb1, 0x6f, 0x63, 0x6b, 0x58, 0x77, 0x99, 0x26, 0x59, 0x21, 0xd4, 0x07, 0x39, 0x2d, 0xe7, 0x6a, 0x7e, 0x5f, 0x95, 0xd5, 0x1c, 0x24, 0xa4, 0xc5, 0x30, 0x79, 0x34, 0xae, 0xf0, 0x09, 0x4f, 0x3d, 0xe2, 0x95, 0xc1, 0xe0, 0x4d, 0x99, 0x2a, 0x88, 0xee, 0x2d, 0x51, 0xae, 0xeb, 0x29, 0xbb, 0x94, 0x0d, 0x8c, 0x7d, 0xcd, 0x29, 0x1f, 0x4e, 0xff, 0xdf, 0x55, 0xe0, 0xe8, 0x87, 0x76, 0x71, 0x9f, 0x69, 0xfc, 0x9d, 0x1c, 0x2c, 0x3e, 0x76, 0xfb, 0x92, 0x4b, 0xd6, 0x7d, 0x62, 0x19, 0xf4, 0xd0, 0xa5, 0xdf, 0x36, 0x90, 0x14, 0xbf, 0x46, 0x8d, 0xd2, 0xa8, 0x68, 0xcf, 0x57, 0x7b, 0x0b, 0xd7, 0xac, 0x6c, 0x9d, 0x28, 0xde, 0xac, 0xa4, 0x06, 0xad, 0x45, 0x0b, 0x7e, 0x84, 0x45, 0xb9, 0xa6, 0xae, 0x1e, 0x69, 0x26, 0xc6, 0x4d, 0xb5, 0xf7, 0x6f, 0x3a, 0x73, 0x6b, 0x46, 0x5f, 0x45, 0x6e, 0x15, 0xad, 0x6c, 0x0b, 0x4a, 0x2b, 0xdd, 0x32, 0xa7, 0xe1, 0x97, 0xb8, 0x3a, 0xf4, 0x33, 0x9f, 0x90, 0x12, 0xbd, 0x98, 0x26, 0x10, 0xc2, 0xc6, 0x20, 0xd2, 0xaa, 0xc5, 0x3d, 0x6c, 0x48, 0xeb, 0x0b, 0x86, 0xb0, 0xcd, 0x57, 0x05, 0x49, 0x05, 0xe8, 0xe8, 0x23, 0x33, 0x6d, 0x6f, 0x8a, 0x42, 0xb3, 0x83, 0xdb, 0xed, 0x1b, 0x52, 0x96, 0x81, 0x4c, 0x3a, 0xb5, 0xe4, 0x25, 0xe8, 0x3c, 0xd6, 0xf5, 0xc1, 0x12, 0x77, 0xef, 0x80, 0x0f, 0x09, 0xd8, 0x21, 0x56, 0xf8, 0x03, 0xff, 0xe5, 0x17, 0x7f, 0x39, 0x6a, 0x2d, 0x8f, 0x59, 0x58, 0xb0, 0x5a, 0x38, 0x3b, 0xd0, 0xe4, 0x1c, 0x49, 0xb8, 0x3d, 0x24, 0x39, 0x10, 0xf9, 0xe6, 0x58, 0xc6, 0xdf, 0x56, 0xd9, 0x0e, 0xe6, 0xea, 0x6c, 0xa7, 0x5d, 0xfb, 0x13, 0x60, 0x69, 0x6f, 0x31, 0xdc, 0xb4, 0x95, 0xe4, 0x92, 0x64, 0x50, 0x95, 0x17, 0x4a, 0x78, 0xce, 0xa0, 0x5c, 0x7d, 0x4b, 0xc3, 0x66, 0x4d, 0x53, 0x7d, 0xfc, 0x78, 0x49, 0x79, 0xb3, 0x92, 0x7e, 0x8f, 0x91, 0xda, 0x49, 0x8c, 0xc1, 0x18, 0x5a, 0x31, 0x8b, 0xcc, 0x4b, 0x7e, 0x84, 0x84, 0x78, 0x30, 0x02, 0x8e, 0x11, 0x88, 0xd3, 0xcf, 0x6d, 0x4e, 0x2f, 0xf3, 0xa1, 0x16, 0xea, 0xc7, 0x52, 0xc2, 0xee, 0xe2, 0xc7, 0x48, 0xe9, 0x8b, 0x42, 0xb5, 0x43, 0xd7, 0x91, 0x72, 0x53, 0x12, 0xe0, 0xc6, 0xd2, 0x60, 0xd1, 0x9d, 0x90, 0xa4, 0xcf, 0x88, 0x65, 0xa1, 0x9f, 0x04, 0x6b, 0x60, 0x37, 0xff, 0x6a, 0xd1, 0xd4, 0x98, 0x94, 0xb4, 0x47, 0x27, 0x73, 0xba, 0x8f, 0x7d, 0x1f, 0xe8, 0xad, 0x6d, 0xb4, 0x3d, 0xb4, 0x8b, 0x03, 0x94, 0x20, 0x33, 0x88, 0xcc, 0x68, 0xcd, 0x9d, 0x25, 0xd7, 0x50, 0xec, 0xed, 0x97, 0x05, 0x2a, 0x5d, 0x0f, 0x8e, 0x03, 0xbe, 0x6f, 0x26, 0x50, 0xcf, 0x88, 0x2a, 0x90, 0x6b, 0xe2, 0xd9, 0x96, 0x67, 0x08, 0x58, 0x7f, 0xba, 0x27, 0xf8, 0xe7, 0xe0, 0xd7, 0xbc, 0x5d, 0x80, 0x39, 0x16, 0x13, 0x4c, 0x42, 0xf2, 0xda, 0x28, 0x56, 0xf5, 0x4e, 0x8f, 0x19, 0x07, 0x4e, 0x33, 0x82, 0x0f, 0xb0, 0xe4, 0x31, 0xfd, 0x32, 0xb3, 0x02, 0x0e, 0xb3, 0x57, 0xe2, 0x4b, 0xa3, 0xd0, 0xe1, 0x54, 0xb8, 0x4a, 0x89, 0x5b, 0xe2, 0x43, 0x6e, 0x73, 0x82, 0xf0, 0x07, 0x0b, 0xd7, 0xdd, 0xbc, 0xb5, 0xb8, 0xd5, 0x40, 0x2d, 0x89, 0x01, 0x21, 0x96, 0x68, 0x53, 0x9e, 0x06, 0xa7, 0x26, 0xb8, 0x45, 0x7f, 0x1e, 0x8c, 0xd2, 0x02, 0x56, 0xdf, 0x27, 0x52, 0xba, 0xfb, 0x3e, 0x11, 0xb1, 0xba, 0x54, 0x18, 0x00, 0xe0, 0xed, 0x6c, 0xeb, 0xad, 0x18, 0x6d, 0x9c, 0xb3, 0xf4, 0x51, 0xc9, 0xe6, 0x73, 0xd1, 0x92, 0xf2, 0x5e, 0x22, 0xa8, 0xd1, 0x9a, 0x27, 0xb4, 0x9c, 0xa9, 0xe5, 0xf7, 0xa1, 0x73, 0x37, 0x2d, 0xb7, 0x47, 0xc3, 0xb8, 0xce, 0x1d, 0x2c, 0xfa, 0xca, 0x1e, 0x8a, 0x03, 0x92, 0x66, 0x17, 0x6c, 0x63, 0x08, 0x2a, 0x82, 0x6b, 0x52, 0x6a, 0xa8, 0x93, 0x53, 0x3b, 0xf6, 0x9c, 0x9b, 0x7d, 0x26, 0x6d, 0x42, 0x76, 0xb1, 0xab, 0x2c, 0x0c, 0x35, 0x8b, 0x8a, 0x38, 0x1a, 0xe4, 0xa4, 0xb7, 0x75, 0x89, 0xd7, 0x03, 0x2c, 0xd5, 0xd9, 0x81, 0x5c, 0x87, 0x45, 0xfc, 0xf7, 0xd0, 0x53, 0x52, 0xb2, 0xab, 0xe6, 0x6d, 0x1e, 0x6d, 0xcd, 0x75, 0x14, 0x9d, 0x42, 0x44, 0x57, 0x05, 0xb7, 0x1b, 0x75, 0x09, 0xd3, 0x93, 0xee, 0x38, 0xb7, 0xd6, 0x98, 0x21, 0x85, 0x0e, 0x42, 0x68, 0x23, 0x1e, 0x98, 0x19, 0x3c, 0x91, 0x47, 0x3b, 0x88, 0xcf, 0x61, 0xa9, 0x4e, 0x97, 0x02, 0x1d, 0x27, 0xa9, 0x34, 0x8e, 0x04, 0xc3, 0x10, 0xbc, 0x72, 0xcf, 0x26, 0x09, 0x1d, 0x5b, 0x1f, 0x8a, 0x93, 0x49, 0xa1, 0x5e, 0x4b, 0xc8, 0x73, 0x3e, 0xe6, 0x83, 0xe2, 0x56, 0xb4, 0x18, 0x63, 0x53, 0x7a, 0xcb, 0x79, 0xbe, 0x73, 0x7c, 0xd9, 0x88, 0x94, 0xd6, 0xcd, 0xe6, 0x14, 0xca, 0xd6, 0x5f, 0x2c, 0x3b, 0x95, 0x22, 0x1c, 0xfb, 0xeb, 0x9e, 0x6e, 0xf7, 0x60, 0x4d, 0x7e, 0xae, 0xc1, 0xd0, 0x3a, 0xe8, 0x0d, 0x41, 0x27, 0xa4, 0x93, 0xc5, 0xa5, 0x52, 0x54, 0x60, 0x73, 0x42, 0xae, 0x0e, 0x75, 0x5d, 0x3c, 0x0f, 0xb5, 0x13, 0xf8, 0x82, 0xa9, 0x94, 0xa2, 0x35, 0xb4, 0x43, 0x66, 0xbc, 0xee, 0x67, 0xb9, 0xc0, 0x28, 0x24, 0x84, 0x9a, 0x2b, 0xab, 0x84, 0x20, 0x41, 0xad, 0xf0, 0xbf, 0xf7, 0x15, 0x5d, 0xcb, 0x20, 0xf6, 0xe0, 0x12, 0x1d, 0xc2, 0x72, 0xb7, 0x5c, 0xbe, 0x98, 0x3e, 0x1f, 0xb2, 0x43, 0xe3, 0x7f, 0xe5, 0xf4, 0x30, 0xb0, 0x48, 0x25, 0xce, 0x86, 0xf2, 0xe5, 0x9c, 0x38, 0xcc, 0xc2, 0xfe, 0x65, 0x8e, 0xeb, 0x78, 0x54, 0xea, 0x96, 0x7b, 0x80, 0x06, 0xa0, 0x7e, 0x54, 0x30, 0x73, 0x51, 0x33, 0xce, 0x2d, 0xae, 0xbb, 0x93, 0xff, 0x12, 0x4b, 0xf9, 0xd2, 0xca, 0xc2, 0xeb, 0x31, 0x51, 0x8a, 0xc1, 0x63, 0xd9, 0xd6, 0x72, 0xd7, 0x28, 0x27, 0x05, 0xc6, 0xa5, 0x15, 0x49, 0x13, 0xb3, 0x4c, 0xc6, 0x76, 0x3d, 0xd5, 0xf3, 0xd9, 0x92, 0x97, 0xaa, 0x02, 0x74, 0x1d, 0xd8, 0x73, 0x6b, 0x99, 0x79, 0x8e, 0x60, 0x29, 0xc4, 0xfd, 0x66, 0x5a, 0xa2, 0x51, 0xdb, 0xeb, 0x65, 0xe9, 0xb0, 0xd3, 0xb7, 0x16, 0x05, 0x84, 0xd0, 0x7c, 0xf9, 0x72, 0xed, 0xbc, 0xc0, 0xcf, 0xfd, 0x50, 0xf6, 0x99, 0x9d, 0xb6, 0x32, 0xd7, 0x46, 0xd0, 0xdf, 0x20, 0xc5, 0x8b, 0x47, 0x5c, 0xec, 0xbf, 0xf1, 0xcf, 0x88, 0x56, 0x2d, 0x53, 0x93, 0xb1, 0xed, 0xe4, 0xaa, 0x47, 0xd6, 0x62, 0xc1, 0x8f, 0x97, 0x93, 0x15, 0x21, 0x7a, 0x68, 0x62, 0x18, 0x38, 0x81, 0x56, 0xba, 0x12, 0xf2, 0x46, 0x5b, 0x1d, 0x48, 0x21, 0x7e, 0xde, 0xc7, 0xa2, 0x3e, 0x16, 0xf6, 0xc9, 0xec, 0xdf, 0x5e, 0x8b, 0xfa, 0xf8, 0x8e, 0xc9, 0x17, 0x5e, 0x62, 0x7f, 0x9c, 0x1c, 0x85, 0x3e, 0x27, 0x63, 0x35, 0xdc, 0x85, 0xdd, 0x46, 0x6a, 0xd6, 0x3f, 0x6a, 0x66, 0xeb, 0x1e, 0xaf, 0x32, 0xf3, 0x03, 0x49, 0xc5, 0x57, 0xc1, 0x92, 0xa1, 0xe2, 0x06, 0x4f, 0x04, 0x25, 0x31, 0x35, 0x63, 0x1a, 0x63, 0xac, 0x14, 0x07, 0xd9, 0xd2, 0x4b, 0xa5, 0x79, 0xc3, 0x47, 0x82, 0xaa, 0x18, 0xcd, 0xa4, 0x69, 0xad, 0xd6, 0x6f, 0x9a, 0xa8, 0x85, 0xc9, 0x9b, 0xb6, 0x5b, 0x7b, 0x1f, 0x98, 0xae, 0xda, 0x3a, 0xdf, 0x57, 0xa8, 0xb8, 0xf3, 0xac, 0x35, 0xb3, 0x5a, 0xae, 0xc9, 0x65, 0x37, 0x83, 0x46, 0x3a, 0x11, 0x26, 0x0a, 0x29, 0xd6, 0x5d, 0x13, 0x45, 0x20, 0xeb, 0x66, 0x8f, 0xb6, 0x07, 0xb1, 0x0f, 0x56, 0x0e, 0x2f, 0x23, 0xb2, 0x75, 0xcc, 0x16, 0xb8, 0x01, 0x8a, 0xf4, 0x16, 0x3a, 0x23, 0x9d, 0xfe, 0x1d, 0xf0, 0x19, 0x26, 0x11, 0x09, 0x2b, 0x14, 0x1c, 0xae, 0x29, 0x98, 0x57, 0xe5, 0x0a, 0x9a, 0x9f, 0x65, 0xc1, 0x15, 0x8e, 0xb3, 0xca, 0x64, 0xa9, 0x8b, 0x02, 0xbd, 0xdb, 0x81, 0xbb, 0xfb, 0x23, 0xe8, 0x10, 0xa0, 0x89, 0xf3, 0x76, 0x1a, 0x56, 0x1a, 0x94, 0x45, 0x84, 0xbf, 0x55, 0x32, 0x74, 0x12, 0x3b, 0x27, 0xdf, 0x32, 0xf6, 0xe6, 0x0f, 0x95, 0x35, 0x32, 0x4f, 0xa9, 0xbc, 0x90, 0xa0, 0xbb, 0xb6, 0x4b, 0xad, 0x19, 0x4d, 0xba, 0x01, 0x73, 0x79, 0xc5, 0x78, 0x87, 0x15, 0xa6, 0xf3, 0xfe, 0x38, 0xed, 0x50, 0x90, 0xc2, 0xc7, 0x9a, 0x6f, 0x35, 0x7f, 0x7c, 0xe3, 0xc7, 0x45, 0xfc, 0x31, 0xb5, 0x2f, 0x66, 0xc2, 0xd9, 0x7d, 0x85, 0x81, 0x7f, 0x21, 0x19, 0x85, 0x75, 0x7f, 0x86, 0xf0, 0x61, 0x71, 0xca, 0x17, 0x57, 0x8e, 0xb1, 0xe3, 0xab, 0xac, 0x4c, 0x77, 0x04, 0xa3, 0x9f, 0x12, 0xb2, 0x54, 0x9a, 0x37, 0x42, 0xea, 0x4b, 0x0c, 0x4f, 0x60, 0x51, 0x01, 0x9b, 0x44, 0x94, 0xb1, 0x5e, 0xba, 0x33, 0x0d, 0xdd, 0xc3, 0xbe, 0xb7, 0x3f, 0xbf, 0xa6, 0xac, 0x9c, 0x31, 0xf1, 0x26, 0x58, 0xc3, 0x32, 0xc1, 0xaf, 0x8a, 0xb9, 0xdc, 0x90, 0x8a, 0x07, 0x42, 0xaf, 0x7d, 0x85, 0x0a, 0xd6, 0xd0, 0x75, 0xbb, 0x7b, 0xef, 0x28, 0xb4, 0x98, 0xc2, 0x71, 0xcb, 0xb7, 0x77, 0x5b, 0x35, 0x4c, 0x83, 0x17, 0xa6, 0x48, 0xe3, 0x38, 0xb8, 0xeb, 0xa8, 0x23, 0x91, 0xda, 0xb2, 0xc0, 0xc0, 0x71, 0xbc, 0x76, 0x69, 0x5a, 0x99, 0x57, 0xa2, 0x5f, 0xbc, 0x97, 0x1c, 0x7c, 0xfe, 0x43, 0x06, 0x39, 0x9c, 0x2f, 0x2e, 0x37, 0x7f, 0x31, 0x6a, 0x08, 0xc1, 0x8c, 0x36, 0x43, 0x6c, 0xaf, 0x9e, 0xd8, 0x85, 0x20, 0x5f, 0xa2, 0x49, 0xb3, 0x49, 0x3b, 0xb6, 0xff, 0xe7, 0x14, 0x4d, 0x12, 0x62, 0xc5, 0x17, 0x64, 0xa3, 0xa1, 0xe6, 0x0a, 0xb8, 0x8e, 0xdd, 0x2c, 0x79, 0x14, 0x32, 0xb9, 0x6b, 0xb3, 0x33, 0x59, 0xe4, 0x7a, 0x87, 0xa4, 0x70, 0xd5, 0xb7, 0x91, 0x74, 0xa7, 0xed, 0x31, 0x11, 0x98, 0xfb, 0x9d, 0x4b, 0xb1, 0x9e, 0x2d, 0x6b, 0x26, 0x04, 0xea, 0xa1, 0x72, 0x8d, 0x46, 0xee, 0xa9, 0xcf, 0x0b, 0x41, 0x0a, 0xdc, 0x92, 0xe1, 0xd4, 0xc7, 0x35, 0x0a, 0x5c, 0x64, 0x06, 0xdb, 0x5b, 0x50, 0xc2, 0x70, 0x8c, 0x31, 0x00, 0x4b, 0x77, 0x3f, 0xae, 0xf8, 0x87, 0x04, 0xbe, 0xf0, 0x63, 0x5f, 0x1d, 0xbf, 0x7b, 0xcf, 0xe5, 0x62, 0xe1, 0xee, 0xd3, 0xf3, 0x5b, 0x3c, 0xfb, 0x88, 0xb6, 0x1e, 0xba, 0x58, 0x5d, 0x27, 0xed, 0x1f, 0x2a, 0x95, 0x60, 0xc4, 0x7b, 0x1f, 0x8a, 0x39, 0x89, 0xee, 0x77, 0xa4, 0xf5, 0xe9, 0x05, 0xbc, 0xa4, 0x35, 0x53, 0x75, 0xcd, 0xfc, 0x77, 0xdf, 0x50, 0x6e, 0x6f, 0x4b, 0x4a, 0x06, 0x5a, 0xb1, 0xe6, 0x0f, 0xe9, 0x4e, 0x76, 0x66, 0x10, 0x91, 0xc2, 0x81, 0x01, 0x38, 0x9f, 0xb0, 0x5a, 0xb7, 0xc4, 0xa3, 0x9d, 0xd9, 0xda, 0x2d, 0xe2, 0xa9, 0xd2, 0x47, 0xc8, 0x93, 0x7b, 0x58, 0xb1, 0xc7, 0x54, 0xb4, 0x2f, 0xde, 0x9f, 0x62, 0xb9, 0xc0, 0xb6, 0x22, 0xa3, 0xc5, 0xa2, 0xae, 0x4d, 0x1a, 0xea, 0x41, 0x9a, 0x67, 0xa9, 0x56, 0xa3, 0xae, 0xe3, 0xb2, 0xad, 0x77, 0x19, 0xa4, 0x59, 0x2a, 0x1b, 0x8c, 0x1b, 0xbc, 0x1e, 0x9a, 0xed, 0x8d, 0x0e, 0xd8, 0x45, 0x91, 0x26, 0x6b, 0x44, 0xaf, 0xbd, 0x16, 0x30, 0x66, 0x63, 0xff, 0x24, 0xb6, 0x2c, 0xb6, 0x06, 0x3e, 0x4c, 0x73, 0xba, 0xa2, 0xe4, 0x9f, 0x95, 0x2f, 0x1c, 0x96, 0x15, 0xc2, 0x72, 0xac, 0xcf, 0xe5, 0x52, 0x6e, 0xa8, 0x3c, 0xe6, 0x2a, 0x48, 0x20, 0x2f, 0xb1, 0xcc, 0x89, 0x55, 0x5b, 0xbb, 0x31, 0x3b, 0x4c, 0x3c, 0xf6, 0x57, 0xf6, 0x86, 0x80, 0xc1, 0xdf, 0x97, 0x25, 0x89, 0xa4, 0x29, 0x09, 0x4e, 0x3f, 0xe2, 0x8a, 0x0c, 0x85, 0xcb, 0xdb, 0x36, 0xf2, 0x03, 0xee, 0x05, 0xa9, 0xb5, 0x98, 0x0f, 0xb7, 0x47, 0xf0, 0x1b, 0x98, 0xd4, 0xf8, 0x34, 0xfc, 0xdd, 0x7f, 0xfc, 0xcb, 0x3b, 0x45, 0x43, 0x66, 0x58, 0x61, 0xd8, 0x30, 0x9f, 0xe0, 0x9f, 0x4d, 0x31, 0xaf, 0xe4, 0xa9, 0xda, 0xbb, 0xef, 0x3c, 0x43, 0x56, 0xd9, 0x8d, 0x69, 0xdd, 0x9e, 0x75, 0x4d, 0x97, 0x72, 0x26, 0xee, 0xe1, 0x59, 0x6b, 0x74, 0x88, 0xf2, 0x32, 0xae, 0x77, 0x93, 0x47, 0xbe, 0x92, 0x9b, 0x62, 0x13, 0xe1, 0x04, 0x64, 0x98, 0xf1, 0x38, 0xde, 0x2b, 0x77, 0x26, 0xd3, 0x51, 0x37, 0x94, 0xbf, 0x28, 0x24, 0xb7, 0xd7, 0x9d, 0xc9, 0x01, 0x93, 0xde, 0xe7, 0x3a, 0x6a, 0x13, 0x60, 0xd2, 0xdc, 0x49, 0x53, 0x76, 0xb6, 0xae, 0x89, 0xe1, 0x92, 0x04, 0x10, 0xf5, 0x9d, 0x50, 0x25, 0x0a, 0x9d, 0xd2, 0x58, 0x86, 0x32, 0x3a, 0xea, 0xad, 0x5b, 0x19, 0x7a, 0xbb, 0x3d, 0x96, 0xe0, 0x30, 0x20, 0x62, 0x5a, 0x6c, 0xbb, 0xee, 0xe6, 0x7b, 0xb1, 0xdb, 0xee, 0x32, 0x5b, 0xb2, 0x2a, 0x7b, 0xc8, 0xd5, 0xc3, 0xed, 0x02, 0xb5, 0xb4, 0xa0, 0x93, 0x46, 0x76, 0x3f, 0x48, 0xb0, 0xdc, 0x5e, 0x35, 0x48, 0x3c, 0x0e, 0xf9, 0xbe, 0xcf, 0xaf, 0x44, 0x97, 0x5a, 0x06, 0x96, 0xde, 0x0e, 0x90, 0x49, 0x17, 0xad, 0x15, 0xd1, 0x75, 0xef, 0x7f, 0x43, 0x4d, 0x24, 0xed, 0x14, 0xc9, 0x1a, 0x04, 0x23, 0xe1, 0x41, 0x85, 0xfa, 0x87, 0x0d, 0x25, 0x51, 0x22, 0x9c, 0x99, 0xd4, 0x3e, 0x99, 0xf0, 0x27, 0x82, 0x60, 0x25, 0x26, 0xe2, 0x63, 0xf5, 0x71, 0x16, 0xcc, 0xee, 0x28, 0x4a, 0x64, 0xc9, 0xf3, 0x17, 0xb3, 0xf9, 0x46, 0xb2, 0x69, 0x84, 0xe3, 0x63, 0xfc, 0x12, 0xa0, 0x39, 0x93, 0x43, 0x6a, 0xfd, 0x23, 0x46, 0x8a, 0x64, 0xd7, 0xa8, 0x27, 0x88, 0xb6, 0x69, 0x0c, 0x99, 0x80, 0x55, 0xac, 0xd0, 0xd8, 0x91, 0x63, 0xa5, 0xa8, 0x75, 0xff, 0x42, 0xc2, 0x99, 0x7f, 0x37, 0xc3, 0x33, 0x1b, 0x6f, 0x3d, 0xa0, 0x84, 0x63, 0x15, 0x40, 0x6c, 0x8d, 0x29, 0x87, 0x49, 0x20, 0x36, 0x51, 0x56, 0xf6, 0xfa, 0x76, 0xdb, 0xca, 0x95, 0x9f, 0xaf, 0xa7, 0x35, 0x58, 0xfb, 0xa0, 0xf2, 0x66, 0x40, 0xc2, 0xf7, 0x5a, 0x9c, 0x47, 0xe3, 0x66, 0x49, 0x0c, 0x6f, 0x70, 0x66, 0x46, 0x50, 0x65, 0xfa, 0x70, 0x5f, 0xd0, 0x36, 0x88, 0xf7, 0xab, 0xfa, 0x7a, 0x9e, 0x74, 0x9b, 0xdd, 0xe8, 0x84, 0xe4, 0xdd, 0x99, 0x9d, 0x5a, 0x78, 0x0a, 0xc2, 0xc4, 0xee, 0xce, 0x4b, 0xeb, 0x72, 0x94, 0x38, 0x9f, 0x26, 0x4f, 0xc6, 0xfa, 0x46, 0x95, 0x40, 0xe9, 0xa3, 0x45, 0x18, 0xe7, 0x54, 0x6d, 0x36, 0x0c, 0xa8, 0x6b, 0x90, 0x47, 0x5f, 0x52, 0xfb, 0xe8, 0x19, 0x8f, 0x40, 0x61, 0x0e, 0xcc, 0x73, 0x4d, 0x00, 0x14, 0x80, 0xb1, 0x6e, 0x38, 0x07, 0x82, 0x0b, 0x72, 0x6a, 0x68, 0x6e, 0x49, 0x24, 0xc2, 0x0b, 0xb4, 0x5c, 0xea, 0x62, 0x82, 0xb9, 0xba, 0x76, 0xf9, 0x79, 0x4f, 0x81, 0xbe, 0xbd, 0x0c, 0xe6, 0xf5, 0x27, 0xe2, 0x67, 0xa8, 0xa7, 0xcf, 0x98, 0x6d, 0x92, 0xa5, 0x93, 0x43, 0xf5, 0x0d, 0xee, 0xbe, 0x28, 0xcb, 0xea, 0x64, 0xa6, 0x44, 0xed, 0x56, 0x1b, 0x3d, 0x33, 0x33, 0xbf, 0xe5, 0xc0, 0x39, 0xe3, 0x16, 0x99, 0xad, 0xc9, 0xd8, 0x33, 0x7d, 0xb9, 0x27, 0x2c, 0x25, 0x51, 0xf6, 0x39, 0xcf, 0x1d, 0x73, 0x60, 0xbe, 0x68, 0x8d, 0x67, 0xec, 0x51, 0xb3, 0x8c, 0xf2, 0x21, 0xdf, 0x76, 0x29, 0xdb, 0xd4, 0x6c, 0x0f, 0x15, 0xa4, 0xc5, 0xec, 0x07, 0x74, 0x9f, 0xb5, 0xe2, 0x83, 0xd4, 0x30, 0x63, 0x69, 0x2a, 0x59, 0xa7, 0x9d, 0xca, 0x05, 0x41, 0x3a, 0xf4, 0xc5, 0x8a, 0x03, 0xf0, 0x0d, 0x38, 0xa4, 0x48, 0x95, 0x32, 0x3b, 0x34, 0x00, 0xa3, 0x16, 0x56, 0xbc, 0x4d, 0xbe, 0xa7, 0x29, 0x21, 0x35, 0xb2, 0xfd, 0x0c, 0x7d, 0x00, 0xe7, 0x13, 0x59, 0xd3, 0x72, 0xa2, 0x58, 0x17, 0x2d, 0x21, 0x0e, 0x95, 0x09, 0xc9, 0xa5, 0x6a, 0x02, 0xb6, 0x95, 0xb7, 0x01, 0x3d, 0xaf, 0x9b, 0x01, 0x7f, 0x60, 0x5e, 0x71, 0x3e, 0x34, 0xef, 0xda, 0xf0, 0x99, 0x91, 0xc2, 0x12, 0xe6, 0xd1, 0xd0, 0xbf, 0x9b, 0xbb, 0x31, 0x81, 0xea, 0x4d, 0x39, 0x67, 0x77, 0x2c, 0x4e, 0x58, 0x5d, 0x96, 0x02, 0xa6, 0x71, 0x98, 0x7f, 0xe6, 0xca, 0x81, 0x28, 0x00, 0x81, 0x96, 0x7d, 0x82, 0xb5, 0x07, 0x3f, 0x3a, 0xd2, 0x22, 0xd5, 0x03, 0x13, 0xc7, 0xef, 0xdf, 0x46, 0x1c, 0x69, 0x46, 0xd0, 0x81, 0x72, 0xbe, 0xf0, 0xc7, 0xed, 0xac, 0x48, 0x9c, 0x17, 0x6a, 0x99, 0x4a, 0x6b, 0x99, 0xce, 0xa2, 0xc3, 0xb9, 0x3c, 0x32, 0xbf, 0xf7, 0x28, 0xbf, 0x6a, 0x45, 0x89, 0xef, 0x1b, 0xb0, 0x10, 0x45, 0x9a, 0xee, 0x66, 0x52, 0x84, 0x37, 0xb5, 0x2a, 0xf1, 0x57, 0x69, 0x16, 0x53, 0x00, 0x38, 0x88, 0xa2, 0x64, 0x5f, 0x54, 0xb6, 0x03, 0x2f, 0x1c, 0xf4, 0xc2, 0xc9, 0x0c, 0x2c, 0x3e, 0x26, 0xc8, 0xc2, 0x5f, 0x5a, 0xa3, 0x0c, 0x30, 0x19, 0x12, 0xfc, 0xee, 0x7a, 0x60, 0xff, 0x5f, 0xfb, 0xa3, 0x24, 0x64, 0xc5, 0xee, 0x81, 0xd2, 0x32, 0xc8, 0xd3, 0x7e, 0x8d, 0xdd, 0x64, 0x97, 0x19, 0xf4, 0x32, 0x39, 0x54, 0x21, 0x4d, 0x3e, 0x7c, 0x3c, 0x81, 0x58, 0x53, 0x91, 0x35, 0x5d, 0x20, 0xd9, 0x93, 0xe1, 0xf6, 0x6a, 0xe9, 0x0a, 0x38, 0xaa, 0x4f, 0xa0, 0x5d, 0xc9, 0x8b, 0x64, 0xf1, 0xb0, 0x31, 0xa3, 0xdc, 0x34, 0x0f, 0x0a, 0xe7, 0x90, 0xc7, 0xbc, 0x7c, 0x12, 0xbe, 0xa2, 0xad, 0x14, 0x35, 0x02, 0x79, 0x2e, 0xb6, 0x54, 0x4a, 0xaa, 0xb2, 0x51, 0xc1, 0x38, 0x68, 0x4c, 0xb6, 0xe3, 0x08, 0xc5, 0x7b, 0x44, 0x19, 0x3c, 0x61, 0xf6, 0x18, 0x43, 0x7e, 0x4a, 0x62, 0xd7, 0xad, 0x3b, 0x54, 0xf0, 0xd5, 0xa4, 0xb0, 0x57, 0x6f, 0xb0, 0x42, 0xb8, 0x42, 0x92, 0xc4, 0xf8, 0x71, 0x77, 0x00, 0xc8, 0xb8, 0xb9, 0x34, 0x7b, 0xf3, 0x56, 0xba, 0x14, 0xe0, 0xa0, 0xe8, 0xa4, 0x25, 0x36, 0x36, 0xd3, 0x95, 0x32, 0x9e, 0xbc, 0xaf, 0xa4, 0x49, 0xfe, 0x67, 0x40, 0x67, 0x0f, 0x2a, 0x53, 0x5f, 0xd4, 0x1c, 0xfc, 0x28, 0x6f, 0xa4, 0x98, 0xf6, 0x59, 0x2a, 0x7e, 0x1a, 0xb0, 0x1f, 0xed, 0x23, 0xd2, 0x3e, 0x42, 0x4a, 0x2a, 0x12, 0x6e, 0x0d, 0x4a, 0xb9, 0xa8, 0x19, 0x3a, 0xe7, 0x5f, 0x6d, 0x10, 0x2e, 0x73, 0xbd, 0xc1, 0x7c, 0xa4, 0x14, 0x37, 0xe5, 0x4b, 0xbe, 0xa4, 0xa2, 0x48, 0x65, 0x15, 0x5a, 0x3b, 0x7a, 0x4a, 0xa1, 0xf7, 0xd7, 0xc5, 0xbf, 0x33, 0xa2, 0x21, 0xb2, 0x83, 0x74, 0xa5, 0x76, 0x87, 0xba, 0x19, 0x83, 0x62, 0x5c, 0xd8, 0x98, 0x6e, 0x9d, 0x27, 0xb7, 0x2f, 0x43, 0xc5, 0x70, 0x85, 0xf7, 0xc4, 0x63, 0x25, 0xee, 0x96, 0x01, 0x49, 0xc9, 0x6b, 0x92, 0xa7, 0xba, 0xbb, 0x7c, 0xa0, 0xe9, 0x1e, 0xc2, 0xbb, 0x16, 0x64, 0xcb, 0x51, 0x7f, 0xe2, 0x65, 0x8a, 0x04, 0x0a, 0x09, 0x88, 0x89, 0x3f, 0x61, 0xe1, 0x9c, 0xe7, 0x07, 0x53, 0x57, 0xc1, 0x90, 0xb3, 0x88, 0x78, 0xc9, 0x27, 0x10, 0x79, 0x40, 0x95, 0x89, 0x02, 0x06, 0x5b, 0x2c, 0x7c, 0xb4, 0x41, 0xf1, 0x0b, 0xac, 0xab, 0xf7, 0x63, 0xa1, 0x14, 0x27, 0xdd, 0x5a, 0xb7, 0x15, 0xca, 0xb2, 0x8f, 0x26, 0x07, 0xe4, 0x82, 0xf8, 0xd2, 0x05, 0xda, 0xfe, 0xdb, 0xd2, 0xf4, 0x6b, 0x9e, 0xac, 0x3c, 0x52, 0xf1, 0xe1, 0x59, 0x0b, 0xd9, 0x2d, 0xa4, 0xd8, 0xa2, 0x81, 0xdf, 0xc8, 0x2f, 0x02, 0x24, 0xdc, 0x8e, 0x55, 0x1b, 0x69, 0xcf, 0x1a, 0x70, 0xbd, 0x17, 0xb6, 0x84, 0x05, 0xf0, 0x56, 0x63, 0x6f, 0xe3, 0x31, 0xf7, 0x8b, 0x49, 0x0d, 0x7b, 0xf7, 0x5e, 0x04, 0x31, 0x3b, 0x97, 0x88, 0x58, 0xf2, 0x36, 0xa5, 0x59, 0x2b, 0x1b, 0x86, 0x41, 0x0e, 0xdd, 0x3b, 0x73, 0xc3, 0x19, 0xb9, 0x9f, 0x8f, 0x0a, 0x22, 0xee, 0x40, 0x5a, 0x47, 0x7f, 0xcc, 0x38, 0x6c, 0x17, 0x35, 0xab, 0x4b, 0x14, 0xaf, 0x26, 0x5b, 0xa3, 0x05, 0x5c, 0x51, 0x33, 0x39, 0x55, 0xe7, 0x2a, 0x6b, 0xc2, 0xdd, 0xd6, 0xfb, 0x8e, 0x3e, 0xa6, 0xf2, 0xb5, 0xe5, 0x9a, 0x9e, 0x59, 0x3f, 0xf8, 0x7d, 0x13, 0x53, 0x41, 0x5d, 0x87, 0xff, 0x63, 0xc0, 0x3b, 0x84, 0x30, 0x85, 0xa9, 0x45, 0x0f, 0xc5, 0x92, 0xcb, 0xf1, 0xfc, 0x96, 0x0d, 0x87, 0x69, 0x02, 0xee, 0xb3, 0xb7, 0xe9, 0x08, 0x3c, 0xdc, 0x76, 0xa8, 0xc5, 0x42, 0x80, 0x19, 0x00, 0x24, 0x5f, 0x26, 0x1f, 0x3c, 0xfe, 0xda, 0x8b, 0x9b, 0x32, 0x8a, 0xd9, 0xd8, 0x4a, 0x16, 0xfa, 0x6c, 0xe8, 0x6b, 0xb1, 0x5d, 0x0f, 0x4c, 0x4a, 0x1a, 0x7c, 0x53, 0x8a, 0xa6, 0x3a, 0x32, 0xe2, 0xf9, 0x71, 0x3f, 0xe7, 0xa4, 0x7f, 0x30, 0x07, 0xb3, 0x49, 0x22, 0x74, 0xd7, 0xd3, 0xe1, 0x65, 0xc5, 0x0f, 0x63, 0x7e, 0xd9, 0xf3, 0x95, 0x8c, 0xff, 0xce, 0x5b, 0x76, 0xd3, 0xdc, 0xd1, 0x71, 0x07, 0x18, 0xd8, 0x72, 0x05, 0x51, 0xce, 0xe9, 0xd6, 0x80, 0x9c, 0xac, 0x43, 0x59, 0xf6, 0x31, 0x3a, 0x20, 0xde, 0x01, 0x73, 0xbe, 0x6a, 0x69, 0x52, 0x14, 0xc8, 0x73, 0x10, 0x8f, 0x7f, 0x15, 0x16, 0xfd, 0xf7, 0xa7, 0xa9, 0x9f, 0x3c, 0x9a, 0xcc, 0x7f, 0xff, 0x68, 0x62, 0x03, 0xde, 0xc7, 0x94, 0xc3, 0xe5, 0x22, 0x72, 0x98, 0x54, 0x49, 0xdd, 0xf5, 0xa2, 0x68, 0xa4, 0x7b, 0xc3, 0x36, 0xed, 0xc7, 0xa7, 0x6e, 0xd7, 0x8f, 0x03, 0x83, 0x5d, 0xed, 0x53, 0x90, 0x7e, 0xfa, 0x20, 0x8d, 0x9a, 0x9f, 0x7e, 0xc9, 0x20, 0xa8, 0xda, 0x94, 0x66, 0x1a, 0xf2, 0x3c, 0xd8, 0xc7, 0x25, 0x3c, 0x55, 0x1f, 0xed, 0xaf, 0xd6, 0x49, 0xaa, 0x0b, 0x51, 0x73, 0xa1, 0x0b, 0xdd, 0x66, 0x44, 0xed, 0x16, 0x5d, 0xb4, 0xde, 0xc3, 0x17, 0x84, 0xb3, 0xb6, 0x2b, 0xc0, 0xd9, 0xf4, 0x9c, 0x2d, 0x8f, 0x16, 0xad, 0xd3, 0x52, 0xef, 0xf6, 0xb9, 0x99, 0x6f, 0xb8, 0xf0, 0xc3, 0xc7, 0x6e, 0xd2, 0x4e, 0xce, 0xa4, 0x8c, 0x49, 0xa4, 0x0c, 0xda, 0x0c, 0x95, 0xcf, 0x12, 0x26, 0x40, 0x21, 0x64, 0x97, 0xf8, 0x18, 0x60, 0x40, 0x6a, 0xbe, 0xb8, 0x97, 0x80, 0x65, 0x48, 0x9f, 0x86, 0x3a, 0x53, 0x18, 0x8c, 0x1d, 0x10, 0xf2, 0x0b, 0xb0, 0x65, 0x08, 0xcb, 0xae, 0xf2, 0x0b, 0x03, 0x7f, 0x51, 0xbc, 0xc3, 0x09, 0x9c, 0x5f, 0x8f, 0xc8, 0x30, 0x6c, 0x4c, 0x21, 0xb1, 0x87, 0x61, 0xf3, 0x4f, 0xb2, 0x16, 0x70, 0x47, 0xc2, 0x3f, 0x2b, 0xac, 0x0f, 0x1f, 0x71, 0x67, 0x70, 0x87, 0xdd, 0x7d, 0x67, 0x3e, 0x27, 0x90, 0x98, 0xa5, 0x3d, 0xa9, 0x80, 0x9b, 0x95, 0x34, 0x63, 0x9f, 0xc1, 0x4c, 0x86, 0x34, 0x44, 0x39, 0x9f, 0x8a, 0xa4, 0x37, 0x8a, 0x5a, 0xc0, 0x79, 0x3d, 0x12, 0x64, 0x6e, 0xfe, 0x32, 0x1b, 0x43, 0xd4, 0xf6, 0x44, 0xa9, 0x3b, 0x35, 0x68, 0xd8, 0x1b, 0x89, 0xcb, 0xd4, 0xfb, 0xb0, 0x41, 0xef, 0x72, 0x32, 0x43, 0x8f, 0xdf, 0x44, 0x42, 0x31, 0x5a, 0xed, 0x3b, 0xae, 0xeb, 0x67, 0x8c, 0xbd, 0xf9, 0xc8, 0x06, 0xba, 0x05, 0xe2, 0x43, 0xa6, 0x98, 0x67, 0x3a, 0x6e, 0x79, 0x51, 0x10, 0x70, 0x24, 0x80, 0x32, 0x3b, 0x78, 0xa5, 0xa0, 0x96, 0xb0, 0x60, 0x8c, 0xc5, 0x94, 0xa5, 0x23, 0x07, 0xf0, 0x64, 0xab, 0x63, 0x46, 0x69, 0xce, 0xa4, 0xc0, 0x81, 0x35, 0xa3, 0x68, 0xde, 0x59, 0xc4, 0x9b, 0xbc, 0x96, 0xc3, 0xbb, 0x45, 0x82, 0xb1, 0x25, 0xb2, 0x7c, 0x39, 0x63, 0xb4, 0x88, 0x28, 0xa2, 0x12, 0x5a, 0x2d, 0x66, 0x93, 0xb0, 0xdc, 0x7c, 0x1e, 0xe5, 0xf9, 0x31, 0x20, 0xc3, 0xf4, 0xc1, 0x2e, 0x9a, 0xb0, 0x12, 0xec, 0x8e, 0x88, 0xa2, 0x2d, 0x35, 0x94, 0xbe, 0x5b, 0x62, 0x28, 0xf6, 0x1a, 0x3b, 0x9e, 0xcd, 0x28, 0x92, 0x56, 0xb5, 0x87, 0x72, 0xfa, 0x3a, 0xdf, 0xf7, 0x07, 0x7d, 0x1e, 0x63, 0x89, 0xe4, 0x61, 0x6f, 0x26, 0x10, 0x17, 0xdf, 0x5d, 0x0f, 0x63, 0x59, 0x10, 0xd3, 0xc3, 0x77, 0x40, 0xe3, 0xf0, 0x1b, 0x19, 0x51, 0x05, 0x03, 0x2e, 0xec, 0xe2, 0x9d, 0x05, 0xb6, 0xd3, 0x1c, 0xd6, 0x99, 0x6d, 0xcb, 0x90, 0x55, 0xb9, 0xa1, 0x1d, 0xbd, 0x95, 0x16, 0xe7, 0x23, 0x56, 0x36, 0x9b, 0x11, 0xb2, 0xf4, 0x2d, 0x3a, 0xde, 0xc0, 0x1c, 0xaf, 0xf3, 0x5c, 0xf7, 0x56, 0x96, 0xeb, 0x20, 0x99, 0xd8, 0x4b, 0xd0, 0x5b, 0x5b, 0xa4, 0x5b, 0x30, 0xb7, 0x41, 0xb5, 0xcd, 0x1b, 0x9f, 0x35, 0xbd, 0x38, 0xc4, 0x9a, 0x56, 0x5a, 0xd2, 0x4c, 0xec, 0xd8, 0xdc, 0xe4, 0x44, 0xaf, 0xf8, 0xed, 0x4b, 0x6a, 0x96, 0xec, 0x08, 0x45, 0x10, 0x9f, 0xd0, 0x91, 0x82, 0x83, 0xb9, 0x5a, 0xdb, 0x98, 0x51, 0x48, 0x34, 0x68, 0x8f, 0xc3, 0x61, 0x46, 0x09, 0x5a, 0xc6, 0xd4, 0x68, 0x66, 0x6c, 0xc8, 0x19, 0xea, 0x55, 0xef, 0x46, 0xbe, 0x0c, 0x72, 0x05, 0xed, 0x7f, 0x58, 0xcf, 0x5b, 0x11, 0x4c, 0x33, 0xab, 0xec, 0xa0, 0xcb, 0x5f, 0x94, 0x93, 0x70, 0x41, 0xc2, 0xcf, 0xaa, 0x02, 0x6f, 0x36, 0x6a, 0x22, 0x2f, 0xde, 0xfc, 0x0f, 0xc0, 0x5a, 0x37, 0x91, 0xe3, 0x3c, 0xf7, 0x65, 0x6a, 0xd7, 0xcd, 0x29, 0x93, 0x4a, 0xf4, 0x78, 0x94, 0xba, 0x87, 0x55, 0x77, 0xde, 0xf2, 0xcd, 0x28, 0xc1, 0xa7, 0xd8, 0xcd, 0xc3, 0x12, 0x81, 0x55, 0xe1, 0xce, 0x46, 0x54, 0x37, 0x19, 0xc2, 0x0e, 0xc3, 0x85, 0x89, 0xd1, 0x6c, 0xf1, 0x54, 0x89, 0x43, 0xb8, 0x5e, 0x8e, 0x08, 0x28, 0x0d, 0xc0, 0xf0, 0x36, 0xd5, 0xd6, 0xa5, 0x6f, 0x5a, 0xf3, 0x8f, 0x32, 0xd4, 0x7a, 0x52, 0x1d, 0xb8, 0x24, 0x98, 0xc5, 0x95, 0x50, 0x10, 0xaa, 0x3b, 0x9a, 0xb7, 0x6a, 0x23, 0xae, 0x56, 0x34, 0x0b, 0x5f, 0x4b, 0x80, 0xe1, 0xf3, 0x8d, 0xfd, 0xe2, 0xc1, 0xeb, 0xcb, 0x03, 0xff, 0x94, 0xeb, 0x90, 0xd5, 0xdc, 0xf4, 0x13, 0xb5, 0x3d, 0x07, 0x77, 0xef, 0x9c, 0x04, 0x6d, 0x80, 0xce, 0xfe, 0x0f, 0x2b, 0x5b, 0xed, 0xc3, 0xcc, 0x82, 0xa3, 0x63, 0xe8, 0x7d, 0x02, 0x9b, 0x88, 0x06, 0x6b, 0x92, 0x48, 0x19, 0x79, 0xcc, 0xab, 0xfc, 0xf0, 0x4f, 0xb1, 0x7d, 0xf0, 0x04, 0xac, 0x7b, 0x6f, 0x61, 0x4f, 0xa7, 0xe6, 0x45, 0x08, 0x8c, 0x49, 0x23, 0x90, 0xcd, 0x3d, 0x63, 0xc0, 0xae, 0x86, 0x05, 0xa6, 0xd6, 0xbe, 0x88, 0xd8, 0x54, 0x4d, 0x0a, 0x08, 0xdf, 0x95, 0xb0, 0xd9, 0x62, 0x6d, 0x48, 0xf1, 0xb8, 0xd1, 0x2d, 0x4f, 0xb3, 0xd7, 0x6b, 0xdf, 0x64, 0xe5, 0x24, 0x4c, 0x96, 0x22, 0x33, 0x16, 0x9c, 0x2a, 0x0e, 0xe4, 0x4d, 0x06, 0xf1, 0x1b, 0x4c, 0x5b, 0x39, 0xaf, 0x8d, 0xe1, 0x0e, 0x3a, 0x14, 0x17, 0x44, 0x4b, 0x00, 0x36, 0x83, 0x00, 0xc9, 0x63, 0xa6, 0xd7, 0xc6, 0x28, 0x62, 0xc1, 0xf2, 0x25, 0x28, 0x78, 0xef, 0x03, 0x4c, 0x13, 0x4b, 0xaa, 0x66, 0xd8, 0x03, 0xb4, 0xf9, 0x51, 0x45, 0x21, 0x52, 0xa2, 0x7a, 0x4c, 0xb3, 0x19, 0x84, 0x1d, 0xb1, 0x07, 0x44, 0x81, 0xdb, 0xce, 0x60, 0x17, 0x9c, 0x3c, 0x43, 0x2d, 0x63, 0x17, 0x65, 0xea, 0x00, 0xf9, 0xcc, 0xcc, 0x52, 0x5e, 0xd3, 0x56, 0x1f, 0xfc, 0x2a, 0x02, 0x43, 0x53, 0x1e, 0x7d, 0x0d, 0x84, 0x1a, 0x13, 0xe6, 0x66, 0x6e, 0x68, 0x33, 0xd7, 0x50, 0x6a, 0x7d, 0x50, 0x20, 0x83, 0xcf, 0xbd, 0xf1, 0x13, 0x60, 0x8b, 0x44, 0x1d, 0x72, 0x02, 0x16, 0x41, 0x7a, 0xd5, 0x1e, 0xea, 0x81, 0xf7, 0x50, 0xc8, 0xca, 0xb1, 0xa5, 0x81, 0xb5, 0xf2, 0x1e, 0xa3, 0xe3, 0xe6, 0x07, 0xde, 0x9b, 0xc9, 0x79, 0x70, 0x6d, 0xfe, 0x22, 0xe0, 0x15, 0x5b, 0x48, 0xef, 0xa2, 0xc8, 0x0c, 0xcc, 0xd7, 0x08, 0xec, 0x87, 0xd1, 0xd6, 0x8c, 0xc8, 0xea, 0x34, 0xb6, 0xc1, 0xde, 0x00, 0x9f, 0x61, 0x2c, 0xc8, 0x6c, 0xca, 0xbf, 0xdf, 0xf4, 0x06, 0xce, 0xb0, 0xc8, 0xf5, 0x01, 0x53, 0x71, 0x8a, 0xd5, 0x5e, 0xf8, 0x37, 0x41, 0xfe, 0xac, 0xa6, 0x9a, 0x46, 0x1f, 0xaa, 0xb4, 0xc6, 0x72, 0x75, 0x4a, 0x60, 0xd2, 0x0b, 0x9f, 0x57, 0x43, 0xf7, 0x66, 0xa9, 0x9c, 0x3c, 0xdf, 0x9f, 0xd3, 0x8e, 0x44, 0xa2, 0x7b, 0xc2, 0x63, 0x50, 0x8b, 0x84, 0x8c, 0xcf, 0x61, 0x48, 0xad, 0x61, 0x07, 0x83, 0xbc, 0x39, 0xb4, 0x1a, 0x55, 0x8e, 0x96, 0x1a, 0xa5, 0xed, 0xce, 0xab, 0x86, 0xd3, 0xbd, 0x3f, 0xeb, 0x7b, 0x7e, 0x0f, 0x7f, 0xf5, 0xb3, 0xc8, 0x89, 0x78, 0x85, 0x81, 0x13, 0xf9, 0xe6, 0xf1, 0x4b, 0xfc, 0x19, 0xdf, 0x29, 0xab, 0x75, 0xd9, 0x52, 0x25, 0x66, 0x29, 0x3d, 0x18, 0xb4, 0x05, 0x94, 0x92, 0x08, 0x06, 0xdd, 0x14, 0xac, 0xdc, 0x59, 0xe9, 0x92, 0x3f, 0x2c, 0xb5, 0x98, 0x28, 0xbf, 0x51, 0x0a, 0x42, 0x63, 0xd6, 0x68, 0x9b, 0x37, 0xf8, 0x6a, 0xa0, 0x4b, 0x96, 0x42, 0x48, 0x05, 0x8e, 0x21, 0x8f, 0xc4, 0xd6, 0xfc, 0x26, 0xc4, 0xc9, 0x90, 0x69, 0x42, 0xbe, 0xa4, 0x91, 0xe0, 0xdf, 0x8e, 0x2b, 0x4a, 0x39, 0xf8, 0xc9, 0x1a, 0x0f, 0xe4, 0xf7, 0xf9, 0x74, 0xee, 0x70, 0x07, 0x19, 0xd1, 0x92, 0x7e, 0x63, 0x2d, 0x10, 0x92, 0xc0, 0x88, 0xe7, 0x9b, 0x3c, 0x92, 0x93, 0x75, 0x4f, 0xad, 0x82, 0x27, 0xf9, 0xac, 0xc9, 0xc4, 0x11, 0xdb, 0x16, 0x8f, 0xdb, 0x40, 0xe5, 0x62, 0xd8, 0x21, 0xf7, 0x51, 0xe2, 0xc7, 0x00, 0x8a, 0x78, 0x81, 0xa1, 0x7f, 0x56, 0xeb, 0x95, 0x48, 0x48, 0x6f, 0x2f, 0x42, 0x41, 0x0d, 0x04, 0xfd, 0xa7, 0x58, 0xe5, 0x55, 0xf2, 0xc1, 0x10, 0xde, 0x75, 0x18, 0xa6, 0x86, 0x7b, 0x50, 0x60, 0x75, 0x96, 0x83, 0x7e, 0x38, 0x34, 0x35, 0x01, 0x1f, 0x73, 0xdd, 0x1a, 0xe3, 0x37, 0xa2, 0xe2, 0x8c, 0x79, 0x62, 0x4b, 0x92, 0xe2, 0xf8, 0x57, 0x43, 0x98, 0xbf, 0x88, 0x64, 0x58, 0x52, 0x97, 0x1b, 0xc5, 0x96, 0x69, 0x0d, 0xff, 0xfb, 0x3e, 0xc3, 0x78, 0xfe, 0x2c, 0x52, 0x03, 0xf3, 0xcc, 0x3b, 0x2e, 0x01, 0x33, 0x90, 0xd2, 0x6e, 0x23, 0x58, 0xe8, 0x1c, 0x83, 0x35, 0x9e, 0x54, 0x0d, 0x44, 0xab, 0xc3, 0x47, 0x45, 0xdf, 0xc2, 0xb4, 0xfc, 0xfe, 0xdb, 0x4b, 0xd6, 0xce, 0x88, 0x28, 0xd0, 0x6f, 0x3d, 0x82, 0x95, 0xeb, 0xa9, 0xdd, 0xe6, 0x0e, 0x3a, 0x80, 0x3f, 0x78, 0xdf, 0x2a, 0xb8, 0xf0, 0x11, 0x01, 0x29, 0xfb, 0x14, 0xcb, 0x91, 0xad, 0x7a, 0x60, 0xb9, 0xc0, 0xea, 0x5f, 0x14, 0xe3, 0x1f, 0x21, 0xea, 0x54, 0x33, 0xeb, 0xb5, 0xb1, 0x1e, 0x68, 0xcc, 0x0c, 0x7a, 0x56, 0x3e, 0x3d, 0x89, 0x7f, 0x01, 0x7c, 0x78, 0xeb, 0x4c, 0x2f, 0xe5, 0x54, 0x41, 0x00, 0xa0, 0xda, 0xcf, 0x33, 0xae, 0xf8, 0xd7, 0x36, 0x94, 0xb7, 0x8d, 0x7a, 0xd2, 0x21, 0x22, 0x82, 0xad, 0xf9, 0xa0, 0x3a, 0x31, 0xa9, 0x15, 0x89, 0x77, 0x7c, 0xf3, 0x29, 0x24, 0x0d, 0xb7, 0xb7, 0x32, 0x00, 0xc9, 0x06, 0xf3, 0xef, 0xa3, 0xb9, 0x52, 0xa7, 0x36, 0x11, 0x5d, 0x95, 0x89, 0x03, 0x00, 0x7b, 0xa4, 0x8e, 0x13, 0x67, 0xac, 0x4b, 0x98, 0xe6, 0x4f, 0x46, 0x3d, 0x75, 0x63, 0x0c, 0x29, 0x38, 0xc9, 0x05, 0xf4, 0xef, 0x98, 0x04, 0xf7, 0x25, 0x77, 0x1d, 0xc7, 0xaa, 0x4b, 0xb7, 0xfc, 0x44, 0x13, 0xe1, 0x37, 0xa2, 0x0f, 0xea, 0x63, 0x91, 0x28, 0x2b, 0x3a, 0x73, 0x8c, 0x28, 0x0b, 0xec, 0x99, 0xd8, 0xbb, 0xde, 0xfc, 0x40, 0x0b, 0x98, 0x1a, 0x47, 0x18, 0x4a, 0xaf, 0xc5, 0x28, 0xbc, 0xb4, 0xdd, 0xa3, 0x40, 0x87, 0x8d, 0x60, 0xe6, 0x46, 0x83, 0x22, 0xee, 0x7b, 0x32, 0x63, 0x83, 0xff, 0x26, 0x50, 0xa6, 0x18, 0x94, 0x14, 0x68, 0xe5, 0x36, 0x59, 0x5c, 0xfc, 0x55, 0x0c, 0x4c, 0x51, 0x28, 0x61, 0x2b, 0x5a, 0x5c, 0x18, 0x4b, 0x70, 0xf4, 0xfe, 0xd0, 0x79, 0x53, 0xb6, 0x65, 0xc4, 0x97, 0xb9, 0x2d, 0x34, 0x29, 0x9c, 0xfc, 0xa1, 0x92, 0x92, 0xc8, 0x7b, 0x91, 0x31, 0x5a, 0xb0, 0x6a, 0x79, 0x49, 0xd0, 0x80, 0x12, 0x29, 0x70, 0x26, 0xd5, 0x00, 0xcc, 0xb3, 0x8e, 0xf9, 0xb0, 0xd4, 0x00, 0x5d, 0x98, 0x27, 0x2a, 0xbe, 0x16, 0x05, 0xc9, 0x76, 0x74, 0x9f, 0x1e, 0x50, 0x9a, 0x4c, 0xf1, 0x84, 0x33, 0x21, 0xd6, 0xe9, 0x0c, 0xc3, 0xaf, 0x66, 0xbc, 0x79, 0x72, 0xa9, 0x8a, 0x85, 0x2d, 0x1c, 0x8b, 0xb5, 0x47, 0x15, 0x0b, 0x35, 0x08, 0x4e, 0x2e, 0xa7, 0x5b, 0x94, 0xd7, 0x75, 0xd3, 0xc3, 0xc9, 0x66, 0xed, 0xf1, 0x0d, 0x70, 0x95, 0xea, 0x93, 0xce, 0xeb, 0xdd, 0x1c, 0x52, 0x46, 0x54, 0x56, 0xfb, 0x79, 0x69, 0x49, 0xca, 0x56, 0x37, 0xf3, 0xd2, 0x71, 0x90, 0x2f, 0x8f, 0x27, 0xee, 0xdc, 0x78, 0xde, 0xab, 0x3a, 0xd7, 0x8d, 0x74, 0x97, 0xd9, 0x80, 0xfb, 0x2c, 0xe1, 0x55, 0xec, 0x42, 0x22, 0x4b, 0x23, 0x99, 0x6d, 0xbc, 0x1c, 0x09, 0x47, 0xe7, 0xaa, 0x6a, 0x3f, 0xf3, 0xec, 0xb2, 0x7f, 0x31, 0x7d, 0x5d, 0xa0, 0xa2, 0xec, 0x12, 0xc3, 0xb9, 0x6c, 0x83, 0xdd, 0x61, 0xcc, 0x95, 0x52, 0x42, 0xa9, 0xc1, 0xc6, 0x40, 0xe2, 0xb9, 0x2f, 0x45, 0x4c, 0x4f, 0x2f, 0x41, 0xa7, 0x93, 0xa2, 0x6f, 0xd1, 0x3c, 0x73, 0xd9, 0x3a, 0x4a, 0xb3, 0x1e, 0x98, 0xe9, 0xec, 0x73, 0xdc, 0x97, 0xb2, 0xe8, 0x64, 0x89, 0x7c, 0xed, 0x72, 0x4b, 0xb2, 0x14, 0xdd, 0xa8, 0x07, 0x18, 0x06, 0xc9, 0x09, 0x1f, 0x0e, 0xa1, 0xf6, 0x3c, 0x46, 0x88, 0xd2, 0x38, 0xe7, 0x25, 0xb6, 0x92, 0x04, 0x92, 0x6b, 0xc4, 0xbc, 0xbb, 0x38, 0xc8, 0xb4, 0x07, 0xf7, 0xdb, 0xc5, 0x3b, 0x6e, 0x81, 0xf1, 0x9b, 0xdd, 0xc9, 0x9c, 0x52, 0xd4, 0xd2, 0xf8, 0x13, 0x47, 0x8e, 0xc2, 0x01, 0xe4, 0xc6, 0x2c, 0xcc, 0xa4, 0x5e, 0x1a, 0x1d, 0xa1, 0xdb, 0x90, 0x35, 0x27, 0x22, 0x6b, 0xd1, 0x0d, 0x82, 0x50, 0x50, 0x46, 0xf5, 0xe3, 0x17, 0xb3, 0xa3, 0x39, 0x35, 0x3b, 0xa8, 0x8f, 0x43, 0x1e, 0x17, 0x3c, 0x8e, 0x86, 0x3f, 0xe4, 0x79, 0x60, 0x2d, 0xef, 0x1c, 0x69, 0x72, 0x39, 0x31, 0x8c, 0x26, 0x0b, 0x31, 0x6b, 0x2c, 0x4b, 0xba, 0x3c, 0xb8, 0xef, 0x34, 0xd6, 0x0f, 0xb7, 0xb4, 0x0b, 0x8e, 0x1c, 0x20, 0x39, 0xee, 0x84, 0x95, 0x1c, 0xc6, 0xb7, 0x05, 0xe6, 0x51, 0x96, 0x25, 0x92, 0x72, 0x0b, 0x86, 0x75, 0xf5, 0x3c, 0x01, 0x16, 0x18, 0x04, 0x59, 0x3f, 0x4a, 0xa3, 0x1c, 0x54, 0x32, 0xb4, 0xca, 0xe4, 0xf3, 0x60, 0x39, 0x7e, 0xaf, 0xd2, 0x38, 0xc6, 0x4a, 0xea, 0x73, 0xc7, 0x70, 0x36, 0x97, 0x8b, 0xd9, 0x1e, 0xb6, 0xe9, 0xcb, 0x5e, 0xec, 0x9f, 0xe1, 0xba, 0x43, 0xa1, 0x0c, 0xec, 0xd4, 0xb0, 0xd7, 0xe2, 0x2f, 0x2d, 0xef, 0x26, 0xfd, 0x30, 0xe2, 0x9e, 0xe4, 0xd5, 0x27, 0x75, 0xab, 0xd6, 0x5f, 0x59, 0x9f, 0x5f, 0xda, 0xe7, 0x35, 0x1d, 0x5d, 0x63, 0xf0, 0x99, 0x22, 0xad, 0x85, 0xc4, 0x21, 0x70, 0x3e, 0xd2, 0x8e, 0x9d, 0x9c, 0x4c, 0xa3, 0x18, 0x40, 0x61, 0x9f, 0xb1, 0x0b, 0x7e, 0x0f, 0x55, 0x85, 0x1e, 0x4c, 0x85, 0x7b, 0xe2, 0x45, 0x08, 0xed, 0xe4, 0x7e, 0xdd, 0x27, 0x49, 0x59, 0x74, 0x2d, 0x15, 0x95, 0x1e, 0x5c, 0x43, 0x14, 0xc1, 0x4f, 0x16, 0xe1, 0xd0, 0x00, 0xaa, 0x71, 0x7a, 0x2f, 0xce, 0x29, 0x22, 0x08, 0x16, 0x21, 0x10, 0x00, 0x2b, 0x28, 0x66, 0x00, 0x66, 0x08, 0x55, 0xc5, 0x9d, 0x0b, 0x90, 0x87, 0x3d, 0xbd, 0x01, 0xd8, 0x99, 0xf4, 0xbc, 0xd0, 0x82, 0x0e, 0x31, 0x67, 0x18, 0x7a, 0xa5, 0x22, 0xdf, 0x7a, 0xe3, 0xf2, 0x16, 0x26, 0x2e, 0x59, 0x44, 0xb5, 0x7b, 0xce, 0x13, 0xf8, 0xdd, 0x63, 0x61, 0x27, 0x41, 0xa5, 0x95, 0xe0, 0x5b, 0xc3, 0x2f, 0x6d, 0xe0, 0xf3, 0xa4, 0x46, 0xf6, 0x12, 0x68, 0xd6, 0xe9, 0x8a, 0x4c, 0x82, 0x1f, 0x79, 0x0a, 0xe8, 0x4e, 0x10, 0x1e, 0x64, 0xec, 0x39, 0xd8, 0xd9, 0xe7, 0x7c, 0xb0, 0xae, 0x97, 0x23, 0xd9, 0x16, 0xf1, 0x9c, 0x19, 0x95, 0xfd, 0x20, 0xd7, 0xc0, 0x8a, 0x92, 0x76, 0x44, 0x20, 0xaa, 0xe1, 0x29, 0x36, 0x52, 0x67, 0x58, 0xa5, 0x50, 0xca, 0x5b, 0x5d, 0x26, 0x92, 0x65, 0x56, 0x36, 0xa7, 0x92, 0xca, 0x2a, 0x1f, 0x6f, 0xa2, 0x93, 0x55, 0xbd, 0x2e, 0xd0, 0x3b, 0x72, 0x18, 0x32, 0xf1, 0x01, 0x9b, 0x5e, 0x96, 0xdb, 0xf0, 0xf2, 0x5e, 0x36, 0x09, 0x6b, 0xe4, 0x0d, 0x82, 0x46, 0xc2, 0x68, 0xd5, 0x65, 0x60, 0xdd, 0xcd, 0xb5, 0x09, 0x57, 0x3d, 0x0e, 0x44, 0x16, 0xf1, 0x5a, 0x61, 0xf7, 0xe5, 0xfa, 0x52, 0xf6, 0xb5, 0x65, 0xbc, 0xf1, 0x55, 0x12, 0x4e, 0xaf, 0x02, 0x99, 0x52, 0x20, 0x78, 0x15, 0x81, 0xe6, 0x66, 0xcc, 0x1c, 0x15, 0x1f, 0x12, 0x38, 0x37, 0x92, 0x6a, 0x5a, 0x94, 0x7c, 0xef, 0x43, 0xb0, 0xdc, 0xf2, 0x0d, 0x14, 0xa8, 0xe5, 0x77, 0x51, 0xbe, 0x77, 0x7e, 0x43, 0x1d, 0x01, 0x2d, 0x93, 0x55, 0x21, 0xb5, 0x7f, 0x3c, 0xa4, 0xc0, 0xde, 0xe3, 0xaa, 0x03, 0x5e, 0xc8, 0x04 ],
- const [ 0xa0, 0x53, 0x26, 0x5e, 0x4f, 0x9b, 0x8c, 0xb0, 0x0d, 0x88, 0x91, 0x7e, 0x4a, 0x19, 0x45, 0x67, 0xbc, 0x7c, 0x32, 0xa0, 0x54, 0x2f, 0xed, 0x39, 0x70, 0x65, 0xea, 0xa2, 0x52, 0xab, 0x94, 0x6d, 0xd1, 0xcb, 0x9d, 0x55, 0x4e, 0xf0, 0x93, 0x80, 0xea, 0x0c, 0xb5, 0x01, 0xf6, 0x77, 0x04, 0xa1, 0xac, 0xd9, 0x9d, 0xdf, 0x1c, 0x49, 0x45, 0x35, 0x68, 0xb6, 0x46, 0x9d, 0x34, 0x86, 0x7a, 0x54, 0x59, 0x7e, 0xa5, 0xde, 0xd9, 0xe2, 0x07, 0x4a, 0x18, 0xdd, 0x32, 0xb7, 0x49, 0x22, 0x1a, 0x17, 0x26, 0xd4, 0x6b, 0x33, 0xe4, 0xa4, 0x1f, 0xf0, 0x66, 0x39, 0x4f, 0xd0, 0xb1, 0xd4, 0x49, 0xbb, 0xa0, 0x34, 0xe4, 0x00, 0xd8, 0xb7, 0x10, 0x97, 0xff, 0xc3, 0xb1, 0xa9, 0x29, 0x64, 0xae, 0x51, 0x93, 0x36, 0x44, 0xa5, 0x94, 0x86, 0xa1, 0xf0, 0xd0, 0xb4, 0xae, 0x42, 0xaf, 0xdb, 0x2c, 0x2b, 0x0e, 0xb4, 0x02, 0xc3, 0x34, 0xb8, 0xd5, 0xed, 0x07, 0x85, 0xda, 0xdd, 0x7f, 0x83, 0xe8, 0xd8, 0x5c, 0xc7, 0xd2, 0x3b, 0x14, 0x38, 0xf3, 0xbf, 0x10, 0xf0, 0x0a, 0xfb, 0x17, 0xe5, 0x49, 0x2b, 0x0b, 0xc8, 0xa8, 0x2f, 0xd3, 0x2d, 0x7f, 0xd7, 0x98, 0xed, 0x54, 0x5d, 0x34, 0xc8, 0xf1, 0x33, 0xe7, 0x4f, 0xba, 0xff, 0x4c, 0x02, 0x3e, 0xe5, 0x8c, 0xb5, 0x0c, 0x04, 0xd2, 0x38, 0xc8, 0x43, 0xff, 0x36, 0x7e, 0x4d, 0x9e, 0x5e, 0x35, 0xda, 0x1a, 0xc1, 0xc8, 0x31, 0x2e, 0x7b, 0xf1, 0xea, 0x9e, 0x96, 0xa7, 0xf9, 0x25, 0x2b, 0xaa, 0xe8, 0xae, 0xca, 0x5c, 0x64, 0xc7, 0x1c, 0xd2, 0xfb, 0x52, 0xc7, 0x2b, 0x24, 0x7d, 0x92, 0x20, 0x80, 0xf5, 0xca, 0xdd, 0x5f, 0x57, 0xe4, 0x0f, 0x86, 0xe8, 0x63, 0x3f, 0x30, 0x85, 0xfd, 0x5e, 0x52, 0xdd, 0xf9, 0xa1, 0x23, 0xdd, 0xdb, 0x8f, 0xdc, 0x6c, 0x43, 0x58, 0xbc, 0x59, 0x13, 0x68, 0x50, 0x91, 0xd0, 0x3c, 0xf1, 0x96, 0x4b, 0x74, 0x8e, 0x2c, 0x80, 0x2a, 0xac, 0x56, 0xbe, 0x83, 0xaa, 0x80, 0x08, 0x83, 0x4a, 0xfe, 0xbc, 0x26, 0x6d, 0xb5, 0x72, 0xac, 0x1e, 0x18, 0x27, 0x34, 0xd2, 0x57, 0x9b, 0x8c, 0xee, 0xd2, 0xf7, 0x48, 0x8a, 0xd4, 0xb3, 0x11, 0x75, 0x7e, 0xb7, 0x40, 0x79, 0x01, 0xc0, 0xac, 0xe0, 0x11, 0x06, 0xbf, 0x36, 0x96, 0x1c, 0xd0, 0x51, 0xa4, 0x17, 0xac, 0x8f, 0xad, 0xf2, 0x76, 0x5f, 0xf5, 0x31, 0xb2, 0x03, 0x47, 0xc5, 0x9c, 0x94, 0xe7, 0x30, 0xbe, 0x46, 0xc7, 0xe9, 0xc1, 0xed, 0xfd, 0x02, 0x84, 0xc0, 0x75, 0x08, 0x6b, 0x5d, 0xe3, 0x2b, 0xfa, 0x0e, 0xfc, 0x9e, 0xa2, 0x4b, 0xe6, 0x41, 0xda, 0x80, 0xed, 0x7e, 0x72, 0x10, 0x77, 0x70, 0x24, 0x99, 0x3a, 0x4b, 0x6d, 0x7a, 0xac, 0xf8, 0x9b, 0x92, 0xbb, 0xff, 0x26, 0x4b, 0xbf, 0xaa, 0x43, 0xd7, 0xad, 0x68, 0xb7, 0xba, 0x8d, 0x6f, 0xe9, 0x89, 0x2e, 0xa5, 0x3c, 0xf1, 0x18, 0xc1, 0x9b, 0xfa, 0xc2, 0xad, 0x56, 0x8d, 0x05, 0x2f, 0x2c, 0x35, 0xd1, 0xc9, 0xa9, 0x22, 0x1f, 0xde, 0xb2, 0x73, 0x26, 0x15, 0x5e, 0xb5, 0xd2, 0x03, 0x07, 0xa6, 0x72, 0x04, 0xa1, 0x3f, 0xb1, 0x69, 0x4b, 0xf2, 0xc7, 0xd9, 0x24, 0x31, 0xf0, 0xf1, 0x60, 0x2f, 0x1d, 0x2e, 0x9b, 0xea, 0xea, 0x0d, 0x6c, 0x69, 0xd1, 0x70, 0x3e, 0x42, 0x9d, 0x44, 0x5b, 0x60, 0x21, 0x61, 0x4a, 0x03, 0x29, 0xb1, 0x5b, 0x08, 0xb1, 0x95, 0x80, 0x6b, 0x55, 0x84, 0x5e, 0x0a, 0x09, 0xf6, 0xa4, 0xac, 0x0a, 0x80, 0x9c, 0x41, 0x15, 0x40, 0x00, 0x6c, 0xd6, 0x7b, 0x0e, 0x3e, 0xa3, 0x85, 0xde, 0x45, 0x6a, 0xe1, 0xf4, 0xc5, 0xe8, 0xaa, 0x12, 0x45, 0x1c, 0x31, 0x4f, 0x4d, 0xfc, 0xe8, 0x6d, 0x6f, 0x66, 0x7f, 0x68, 0x84, 0x59, 0x4c, 0x4b, 0x38, 0x65, 0xf0, 0x47, 0xc9, 0x60, 0x38, 0x06, 0x0b, 0x5b, 0x41, 0x3d, 0xb0, 0xd4, 0xe0, 0x81, 0xc6, 0x2e, 0x40, 0x5b, 0x81, 0x5e, 0xcd, 0x9e, 0x3b, 0xe6, 0x51, 0xf8, 0xb9, 0x07, 0x5d, 0xc8, 0xb0, 0x32, 0xeb, 0x2f, 0x87, 0xc1, 0x41, 0x6a, 0x5f, 0xe4, 0x19, 0x5f, 0x51, 0xde, 0xfe, 0x75, 0xf6, 0x71, 0xf9, 0xa9, 0x2d, 0x96, 0x6d, 0xdf, 0x18, 0x72, 0x40, 0x75, 0x68, 0x86, 0x3b, 0x1e, 0xdb, 0x26, 0xb4, 0xee, 0x02, 0x2c, 0x6a, 0xb1, 0x48, 0xed, 0xb0, 0x81, 0x30, 0x6c, 0xce, 0x98, 0xde, 0xce, 0xa4, 0x62, 0xd9, 0x0e, 0x90, 0xd6, 0x0f, 0xf2, 0x92, 0x07, 0x1a, 0x3e, 0xae, 0xf6, 0xc1, 0x27, 0x92, 0xab, 0xc2, 0x0a, 0x79, 0x84, 0xcf, 0x5e, 0x4f, 0xcc, 0xd6, 0xe8, 0x16, 0x8f, 0x85, 0x2d, 0x88, 0xad, 0x0e, 0x2d, 0xfe, 0x2e, 0x27, 0x4e, 0x90, 0xd5, 0x55, 0x97, 0x7e, 0xf8, 0x6b, 0x1e, 0xcf, 0x8f, 0x4d, 0xc4, 0x37, 0x8a, 0xfa, 0x1f, 0x3e, 0x68, 0xca, 0xb8, 0x9f, 0x05, 0xf4, 0x77, 0xee, 0xb3, 0x52, 0x5b, 0x7e, 0x8d, 0x69, 0x6e, 0x82, 0x08, 0xa4, 0xf9, 0x72, 0xcb, 0xe0, 0xf4, 0xb1, 0xc1, 0x2d, 0xc0, 0x6c, 0x6c, 0xd3, 0x19, 0xc5, 0x7c, 0x94, 0x46, 0x31, 0xa0, 0x31, 0x92, 0x1e, 0x9c, 0x30, 0x00, 0xda, 0x9c, 0xdb, 0x3b, 0xb0, 0xc7, 0x8c, 0xcc, 0x54, 0x18, 0x28, 0x8f, 0x81, 0x69, 0xea, 0x68, 0xe0, 0xd1, 0x62, 0x32, 0x2c, 0x30, 0xbd, 0xf8, 0x94, 0x08, 0x46, 0x68, 0x60, 0x8f, 0x2d, 0x84, 0xd8, 0x02, 0x87, 0x9b, 0x61, 0x3b, 0x97, 0x78, 0xea, 0x86, 0x4c, 0xd9, 0x86, 0xb1, 0x0a, 0x23, 0x5a, 0x62, 0xae, 0x53, 0xba, 0xad, 0xcc, 0x38, 0x8f, 0xe6, 0x3a, 0xe0, 0xfc, 0xb4, 0xd3, 0x50, 0x41, 0x67, 0x75, 0x77, 0xdf, 0x8c, 0x4c, 0x65, 0xfd, 0xbe, 0x53, 0xb9, 0x0a, 0xbf, 0x17, 0x58, 0xa4, 0xc7, 0xbf, 0x65, 0xb8, 0x1b, 0x49, 0x6d, 0xeb, 0xe2, 0x16, 0xe1, 0x39, 0x34, 0xa9, 0xca, 0xdc, 0x75, 0xac, 0xb8, 0x70, 0xe1, 0x33, 0xfb, 0x54, 0x67, 0x45, 0x16, 0x53, 0xbb, 0x99, 0x71, 0x84, 0xa7, 0x9d, 0x4e, 0x6e, 0xa2, 0xbc, 0xfe, 0x70, 0xa3, 0xe1, 0x55, 0x61, 0x37, 0x37, 0x5b, 0x73, 0xd2, 0x34, 0x44, 0x5d, 0x62, 0xd5, 0xa3, 0xb9, 0x2a, 0x2b, 0xda, 0xaa, 0xce, 0x16, 0xd5, 0xc3, 0xaa, 0x51, 0xf8, 0x24, 0x68, 0xae, 0x55, 0xe6, 0xd2, 0xa3, 0x23, 0xba, 0xe4, 0x06, 0x6b, 0xcc, 0x26, 0x15, 0x05, 0xee, 0x39, 0xb9, 0xc3, 0xf2, 0xaf, 0x0c, 0xec, 0x57, 0x20, 0x18, 0xec, 0x29, 0x79, 0xe2, 0x49, 0x22, 0x98, 0xa7, 0xd9, 0x15, 0x16, 0x65, 0x33, 0x8d, 0x64, 0x9d, 0x63, 0xb1, 0x1a, 0x57, 0xe2, 0x6a, 0x8b, 0x68, 0xc5, 0xc8, 0x9d, 0xf0, 0x34, 0xa2, 0xd8, 0x26, 0x1e, 0x7d, 0xbc, 0x58, 0x2b, 0xaf, 0x58, 0x2d, 0xf2, 0xc5, 0x18, 0x2e, 0x6d, 0x21, 0xdf, 0x84, 0xa9, 0xe8, 0x55, 0x03, 0xc2, 0x1b, 0x83, 0x68, 0x0f, 0x03, 0x9d, 0xdf, 0x9a, 0xd3, 0x1e, 0xc9, 0xd3, 0x89, 0x1a, 0xbb, 0x85, 0x15, 0xd0, 0xca, 0x08, 0xbd, 0x80, 0x06, 0xb9, 0xc0, 0x7c, 0x44, 0xa7, 0x39, 0x80, 0x21, 0x8f, 0x47, 0x46, 0x43, 0x0b, 0x6b, 0x56, 0xe2, 0x06, 0x31, 0x1c, 0x87, 0x73, 0x13, 0x3c, 0x14, 0x3e, 0x9a, 0x2a, 0x05, 0x83, 0xc6, 0xf5, 0xf5, 0xff, 0xb0, 0x63, 0x64, 0xc4, 0x6e, 0x43, 0xb7, 0x30, 0x37, 0xff, 0x80, 0x1f, 0xc7, 0x71, 0x00, 0x60, 0x05, 0xf7, 0xeb, 0x66, 0xe4, 0xca, 0x6a, 0x40, 0x87, 0x8b, 0x66, 0xcc, 0xa8, 0x1f, 0x04, 0x27, 0x3a, 0xbd, 0x6c, 0x67, 0x4d, 0x45, 0xcf, 0x8d, 0x33, 0xd4, 0xa8, 0xb5, 0xe1, 0x95, 0x42, 0x90, 0x97, 0xda, 0x7a, 0x14, 0xc4, 0x6b, 0xc6, 0x72, 0x24, 0x1d, 0x76, 0x49, 0x2b, 0xa7, 0x3a, 0x19, 0xa6, 0xb2, 0xe5, 0xfa, 0xa0, 0x2f, 0x70, 0x8e, 0x82, 0xed, 0x42, 0x34, 0x7f, 0x6b, 0xae, 0x7e, 0x2f, 0xeb, 0xbe, 0xe6, 0x7a, 0xc7, 0x2f, 0xbc, 0xb8, 0x08, 0xbc, 0x63, 0x16, 0x35, 0xa0, 0xbd, 0x3c, 0x69, 0x56, 0xe4, 0x2d, 0xa8, 0xa3, 0x1b, 0x6e, 0x73, 0xd6, 0x04, 0x6a, 0x9a, 0x4f, 0x13, 0x15, 0x52, 0x3e, 0x42, 0xd0, 0x87, 0xad, 0x06, 0x8d, 0x74, 0xc1, 0x82, 0x33, 0x70, 0x3c, 0xfb, 0x44, 0x0b, 0x47, 0x8d, 0xbd, 0x59, 0x6f, 0x1c, 0x3d, 0x8e, 0xed, 0x8d, 0x6a, 0xcb, 0x2a, 0x35, 0x90, 0x38, 0x82, 0x91, 0x8c, 0x53, 0x48, 0x38, 0xe9, 0x88, 0x0b, 0x0f, 0x48, 0x01, 0x18, 0xbc, 0x05, 0xbf, 0x40, 0x5d, 0x17, 0xea, 0xdc, 0x79, 0x38, 0x65, 0x0e, 0x36, 0x47, 0xa6, 0x49, 0xcd, 0xea, 0xc5, 0x13, 0x3c, 0x77, 0xd2, 0x09, 0x3b, 0x15, 0x6c, 0x24, 0x70, 0x1e, 0x8f, 0x3c, 0xe6, 0xc8, 0xae, 0xca, 0xbc, 0x05, 0x02, 0xf2, 0x1a, 0xa7, 0x21, 0xc1, 0x69, 0xc8, 0xd2, 0xb3, 0xc4, 0x69, 0x20, 0x78, 0xa9, 0x59, 0xad, 0xf7, 0xf5, 0x59, 0x49, 0x94, 0x0f, 0x7d, 0xc3, 0xae, 0x63, 0xd5, 0xff, 0x6c, 0x12, 0x4d, 0x49, 0xba, 0xe7, 0xd2, 0xe9, 0x8e, 0x8e, 0xb6, 0xf8, 0x70, 0x00, 0x56, 0x72, 0x39, 0x42, 0xfa, 0x8c, 0x1b, 0x4f, 0xfc, 0x47, 0xe1, 0x53, 0x2d, 0x45, 0x78, 0x19, 0x74, 0xdb, 0xaf, 0xc7, 0xb8, 0x69, 0x3b, 0xc9, 0x00, 0xe6, 0xfe, 0x0b, 0xd9, 0xbf, 0x89, 0x6b, 0xf9, 0xe2, 0xdf, 0x6e, 0x21, 0x15, 0x7b, 0x31, 0x48, 0x8d, 0x95, 0xa3, 0xf5, 0xbc, 0xa2, 0xf2, 0xed, 0x6a, 0x1a, 0x43, 0x0e, 0x07, 0x7d, 0xa6, 0x7b, 0x40, 0x98, 0x49, 0xf9, 0xd0, 0x05, 0xec, 0x99, 0x99, 0xf1, 0x94, 0x98, 0xf3, 0x21, 0x84, 0x83, 0x44, 0x37, 0x69, 0x9e, 0xd1, 0x32, 0xd5, 0x87, 0xd3, 0x35, 0xee, 0x17, 0xce, 0x89, 0x68, 0x89, 0x1e, 0xe4, 0xb0, 0xde, 0xd2, 0xec, 0x6a, 0x7f, 0xbe, 0xf7, 0x1e, 0x25, 0xcc, 0x15, 0x2e, 0xf6, 0x93, 0x50, 0x0c, 0xf1, 0x2b, 0x32, 0xa9, 0x8b, 0x3f, 0x88, 0x31, 0x9a, 0x63, 0x66, 0xf5, 0x73, 0xa8, 0x6b, 0xa9, 0x4f, 0x6e, 0x46, 0xcf, 0xf4, 0x7a, 0x79, 0x73, 0x91, 0x49, 0x5d, 0x19, 0xe9, 0xa3, 0x67, 0xf4, 0xb3, 0x73, 0xa9, 0x58, 0x41, 0xd5, 0x9c, 0x72, 0x61, 0x71, 0x1c, 0x37, 0x81, 0x08, 0xb4, 0x9a, 0x16, 0x4c, 0x1c, 0x02, 0x3e, 0xf5, 0x00, 0xfb, 0xa3, 0x11, 0x03, 0x2b, 0xa3, 0x9b, 0x04, 0x89, 0xaf, 0x50, 0xa0, 0xc9, 0xf1, 0xbe, 0xf8, 0x1a, 0x32, 0x9e, 0xb4, 0x14, 0xfa, 0x63, 0x48, 0xec, 0xf9, 0x13, 0x75, 0xeb, 0xa5, 0x56, 0x13, 0x1e, 0x25, 0xcd, 0x0f, 0x4e, 0x6e, 0xa4, 0xb0, 0x32, 0xac, 0x6b, 0x1e, 0xe4, 0xe3, 0x21, 0x24, 0x92, 0xd6, 0x92, 0x35, 0x76, 0x28, 0xe4, 0xad, 0x08, 0xc1, 0x6c, 0x5a, 0x72, 0x73, 0xc6, 0x3b, 0x44, 0xdd, 0x24, 0x87, 0x69, 0x90, 0xe6, 0xf1, 0x5a, 0x71, 0x6b, 0x2b, 0x91, 0x5f, 0x27, 0xa9, 0x41, 0x15, 0xf6, 0xa7, 0x44, 0x51, 0xb0, 0x6d, 0x54, 0x36, 0xfe, 0xd2, 0x7f, 0xee, 0x6c, 0xff, 0xd5, 0x95, 0xbf, 0x75, 0x64, 0x52, 0x88, 0x52, 0x66, 0xc7, 0xf9, 0xcf, 0xb8, 0xac, 0xf8, 0x0e, 0x8e, 0xb6, 0x72, 0x13, 0x66, 0xbe, 0xf2, 0x10, 0x3a, 0x1f, 0x72, 0xe5, 0xfa, 0x60, 0x71, 0xe7, 0x39, 0x13, 0x45, 0xe0, 0x27, 0xfc, 0xb3, 0x58, 0xbf, 0x76, 0xbd, 0x13, 0x41, 0x13, 0xbb, 0xdb, 0xe3, 0x83, 0xad, 0x80, 0xc3, 0xb7, 0xd0, 0x1c, 0x21, 0x45, 0x6f, 0x9b, 0xcb, 0x0f, 0xfc, 0x7b, 0xd8, 0x20, 0x5f, 0xd1, 0x99, 0xd6, 0x8e, 0x8d, 0xcd, 0x46, 0x5e, 0xfe, 0x14, 0xdc, 0x99, 0x99, 0xa7, 0x42, 0x50, 0xf6, 0x45, 0x83, 0x72, 0x1b, 0x71, 0x71, 0x9e, 0xfd, 0xda, 0x44, 0x36, 0x44, 0x1b, 0x83, 0xb5, 0x4f, 0xa4, 0x28, 0x42, 0x78, 0xf8, 0xff, 0x85, 0x99, 0x1a, 0x4f, 0xb9, 0xcf, 0x41, 0xbc, 0x02, 0x7d, 0xd3, 0x6c, 0x01, 0x94, 0x91, 0x69, 0xa6, 0x12, 0x0f, 0x46, 0x46, 0xc9, 0x68, 0x06, 0xee, 0x62, 0x2f, 0x39, 0xf6, 0xa1, 0xa9, 0x68, 0xd9, 0xeb, 0x39, 0xb3, 0x44, 0x05, 0x1b, 0xb9, 0x6c, 0x1e, 0x55, 0xb8, 0xa5, 0x10, 0xeb, 0xf5, 0x31, 0xe3, 0x53, 0x5f, 0x55, 0x92, 0x28, 0x6f, 0xb2, 0x12, 0x23, 0x52, 0xd3, 0x91, 0x46, 0x4a, 0x03, 0xfc, 0x5a, 0x52, 0x61, 0xc3, 0x9c, 0x01, 0x36, 0xe0, 0xb4, 0xb0, 0x85, 0x16, 0xe6, 0xdf, 0xe4, 0x76, 0x8c, 0xd5, 0x8b, 0x28, 0xc4, 0x87, 0xab, 0x68, 0x66, 0xbb, 0x01, 0xcf, 0x39, 0x6d, 0xaa, 0xd4, 0x66, 0x72, 0x39, 0x92, 0x2c, 0x5b, 0x07, 0xcc, 0xd6, 0x9c, 0xca, 0x2e, 0xea, 0xee, 0x69, 0xd5, 0xa4, 0xf1, 0x0f, 0x12, 0xa2, 0x16, 0x7f, 0x6b, 0xe1, 0xbc, 0xa7, 0xe3, 0xe8, 0x99, 0x77, 0x7c, 0x43, 0x5c, 0xf3, 0xf9, 0x33, 0x90, 0x87, 0xe8, 0xa4, 0xc4, 0x9b, 0xe0, 0x5f, 0xe9, 0x68, 0x08, 0x81, 0xfb, 0x0a, 0xd8, 0x2c, 0xe4, 0xd6, 0x24, 0x7c, 0x9d, 0xed, 0x56, 0xbd, 0x96, 0x11, 0xfb, 0xdb, 0x58, 0xb8, 0x81, 0x19, 0x69, 0x5f, 0x3e, 0x06, 0x6f, 0x21, 0xb5, 0xae, 0x99, 0x88, 0x15, 0x0d, 0x3b, 0xa3, 0x03, 0xc9, 0xb8, 0x59, 0x99, 0x20, 0xa5, 0xfc, 0xaf, 0x1e, 0x2b, 0x22, 0x59, 0x14, 0xad, 0xb0, 0xb0, 0x47, 0xab, 0x37, 0xd6, 0xe5, 0xe7, 0x84, 0x34, 0x3d, 0xc6, 0x72, 0x06, 0x2e, 0xf8, 0x03, 0x1a, 0xe0, 0x5b, 0xaf, 0xd4, 0xb3, 0x1d, 0xfc, 0x76, 0x75, 0x22, 0x4f, 0x9e, 0xd8, 0xa5, 0x02, 0x11, 0x23, 0x21, 0xb6, 0xb6, 0x27, 0x72, 0xeb, 0xe6, 0x75, 0x37, 0xce, 0xe3, 0xce, 0x7c, 0x51, 0xa5, 0xdb, 0x96, 0x81, 0xdd, 0x1e, 0x4d, 0x15, 0x34, 0x29, 0x41, 0x42, 0xd3, 0x0e, 0x86, 0xd7, 0x29, 0x16, 0x92, 0x85, 0xe8, 0xb6, 0x59, 0x7e, 0x51, 0xbe, 0xb6, 0x43, 0xb2, 0xd4, 0x0d, 0xb6, 0x2d, 0x21, 0x2f, 0x77, 0xba, 0x4a, 0x7d, 0x6d, 0x6f, 0xa2, 0x51, 0xa3, 0x00, 0x9e, 0x99, 0x56, 0x82, 0x89, 0xc5, 0x4c, 0x74, 0x78, 0xe4, 0x67, 0xff, 0x81, 0x09, 0x79, 0x7d, 0x28, 0xf4, 0x5a, 0x39, 0x1a, 0xee, 0x38, 0x75, 0x1e, 0xf5, 0x2f, 0xb2, 0x48, 0x19, 0x19, 0x2b, 0x6f, 0x26, 0xa8, 0xa3, 0xe2, 0x83, 0xb2, 0x60, 0x57, 0x5a, 0xcb, 0x78, 0x24, 0xf9, 0x19, 0x4b, 0xb2, 0x79, 0x64, 0x51, 0x2e, 0x9d, 0x6d, 0x16, 0x81, 0xfc, 0x81, 0x82, 0x83, 0x63, 0x4d, 0x5e, 0x6b, 0x75, 0xf4, 0x14, 0x8b, 0x94, 0x5f, 0xb6, 0x3a, 0x05, 0xd5, 0x42, 0x11, 0x4e, 0xcb, 0x25, 0x5a, 0xe3, 0xfd, 0xfd, 0xc5, 0x02, 0xbd, 0xa3, 0x5d, 0xdc, 0x8b, 0x69, 0xbb, 0xf5, 0xe7, 0xa0, 0x79, 0xcd, 0x63, 0x5e, 0xea, 0xc0, 0xfc, 0x7e, 0x08, 0x2b, 0xaa, 0xe7, 0xae, 0xd0, 0x36, 0x12, 0x08, 0x7c, 0x4c, 0xc6, 0x47, 0xe7, 0xd1, 0x26, 0x99, 0xdb, 0x76, 0xee, 0x58, 0x98, 0x8e, 0xfa, 0x81, 0x78, 0x1d, 0x08, 0x69, 0xcf, 0x31, 0xbe, 0xab, 0x15, 0x75, 0xef, 0x65, 0x47, 0x03, 0x1a, 0xa4, 0x8a, 0x7a, 0x33, 0x1c, 0x12, 0x50, 0xa6, 0x1d, 0x42, 0x6a, 0x9a, 0xc2, 0x14, 0xea, 0x72, 0x6c, 0xbc, 0x49, 0x9a, 0x6e, 0x88, 0xa5, 0x80, 0x0a, 0x0b, 0x5c, 0xe0, 0x9d, 0x7a, 0xd9, 0x45, 0x16, 0x56, 0xae, 0xcd, 0xac, 0x4b, 0xe3, 0x2c, 0xd1, 0x59, 0x8e, 0xf3, 0x61, 0x31, 0xa4, 0x13, 0x20, 0xe2, 0x0f, 0x9c, 0x63, 0xb4, 0x01, 0xcb, 0x0d, 0x54, 0x87, 0x44, 0xbd, 0x32, 0x61, 0x9c, 0x46, 0x28, 0x11, 0x1a, 0x60, 0x5c, 0x32, 0xbf, 0x9d, 0x67, 0x0b, 0x83, 0x9e, 0xb7, 0x64, 0xe2, 0x86, 0x31, 0x98, 0x97, 0xaf, 0x1b, 0xec, 0xa8, 0x9c, 0x3a, 0x1f, 0xa2, 0x2f, 0x37, 0x43, 0x26, 0x1c, 0x48, 0xcb, 0xa4, 0x9e, 0x0c, 0xe4, 0x67, 0x69, 0xb6, 0x09, 0xd2, 0xdf, 0x6d, 0xd1, 0xe9, 0x86, 0xf3, 0x0c, 0x13, 0xba, 0x85, 0x0f, 0x1d, 0x9f, 0x03, 0x4c, 0x83, 0x5a, 0x51, 0x26, 0xeb, 0x81, 0xfd, 0x03, 0xf3, 0xcf, 0x22, 0xa2, 0x2c, 0x1d, 0x8c, 0xaf, 0x66, 0x8d, 0x1c, 0x94, 0x2f, 0x09, 0x6e, 0x93, 0x96, 0xec, 0xba, 0x11, 0x35, 0xfe, 0xf8, 0x35, 0x6e, 0xa6, 0x48, 0xb2, 0xf4, 0x5b, 0x90, 0xe1, 0x8d, 0x5c, 0x67, 0x13, 0x17, 0xa1, 0x32, 0x25, 0xc9, 0x11, 0x8c, 0x55, 0xbc, 0xf5, 0xec, 0x53, 0xaa, 0xad, 0x81, 0x9c, 0xf5, 0xa1, 0x61, 0x03, 0xeb, 0x7b, 0xe3, 0x90, 0x48, 0x94, 0x49, 0x8e, 0xfc, 0xab, 0xa3, 0xe0, 0x2f, 0xdd, 0xf0, 0x94, 0x83, 0xd1, 0x85, 0xbb, 0x99, 0x34, 0xb3, 0x77, 0xd6, 0x65, 0xa4, 0x55, 0x67, 0x71, 0x86, 0xdd, 0x82, 0x41, 0xeb, 0x68, 0xef, 0x12, 0x70, 0x32, 0xc8, 0x26, 0x9d, 0xb0, 0x7d, 0xb9, 0x0d, 0x24, 0x1a, 0x37, 0xcf, 0x6e, 0xcd, 0xac, 0x0b, 0x25, 0xa3, 0x7c, 0xe9, 0xe6, 0x92, 0x54, 0xae, 0xec, 0xbc, 0x60, 0x29, 0xe1, 0xf2, 0xbf, 0x4d, 0xf4, 0x77, 0x34, 0x1f, 0x2c, 0x07, 0x1e, 0xd3, 0xfc, 0x18, 0xaa, 0x31, 0x17, 0x60, 0x47, 0x3e, 0x85, 0x97, 0x5a, 0x19, 0xf7, 0x7e, 0x33, 0x23, 0x58, 0x20, 0x40, 0x62, 0xa4, 0x58, 0x81, 0x28, 0xfd, 0x93, 0x3c, 0xef, 0xfc, 0xd7, 0xf2, 0x88, 0x45, 0x05, 0x91, 0x75, 0x5e, 0x5b, 0xeb, 0x93, 0xc1, 0x3c, 0x67, 0xfc, 0x2f, 0x34, 0xf7, 0x2b, 0x48, 0x37, 0x4a, 0x61, 0x59, 0x29, 0x42, 0x48, 0x75, 0xa4, 0xa8, 0xd6, 0xc7, 0xf5, 0x1f, 0x75, 0x26, 0x67, 0x56, 0x61, 0xea, 0xc5, 0x82, 0x51, 0xfe, 0x1a, 0x0c, 0x59, 0x37, 0xbb, 0x86, 0x0f, 0xe4, 0x87, 0xe4, 0xed, 0xa7, 0x6e, 0xe9, 0xf6, 0x83, 0x30, 0xdf, 0x9c, 0x35, 0x67, 0x8b, 0xe2, 0xc8, 0xc8, 0x60, 0xbe, 0x64, 0xa6, 0xf3, 0xc1, 0x67, 0xb7, 0xaf, 0xf9, 0xb6, 0x1b, 0xca, 0x17, 0x56, 0x9a, 0x77, 0xcd, 0x36, 0x2e, 0x5e, 0x7a, 0x4f, 0xc1, 0x49, 0x09, 0xef, 0x37, 0x20, 0x16, 0x52, 0xaf, 0x17, 0x53, 0x73, 0x06, 0x26, 0x2b, 0x21, 0x9d, 0xba, 0xa5, 0x55, 0x5d, 0xaa, 0x8a, 0xc3, 0xf8, 0x6c, 0xca, 0xaf, 0x71, 0x89, 0x1c, 0x02, 0xde, 0x4e, 0xe5, 0x9d, 0x6d, 0xc4, 0x5b, 0xed, 0xa5, 0xe3, 0xea, 0xc0, 0xee, 0x03, 0xd7, 0x57, 0x54, 0x93, 0x23, 0xbc, 0x88, 0x0d, 0xb2, 0x56, 0x27, 0x29, 0xac, 0xba, 0x3f, 0x52, 0x24, 0xc4, 0x10, 0x56, 0xf7, 0xe7, 0x0f, 0x61, 0xf7, 0xc1, 0x31, 0x2c, 0x49, 0xf2, 0x65, 0x72, 0x0c, 0x2f, 0x62, 0xa4, 0x3b, 0x92, 0xa4, 0xdd, 0xd5, 0x34, 0xb1, 0x18, 0x3b, 0xfe, 0xa1, 0xa1, 0xd9, 0xbc, 0xdd, 0xc9, 0x08, 0x73, 0x27, 0xde, 0x33, 0xf5, 0xdb, 0x5a, 0x39, 0xb2, 0x74, 0x5b, 0x13, 0xd1, 0x51, 0x53, 0xb7, 0x80, 0xba, 0x01, 0x3c, 0x88, 0x1e, 0xa0, 0x3e, 0x24, 0x9e, 0x5e, 0x84, 0x13, 0xd0, 0x0f, 0xe0, 0xec, 0xbc, 0x23, 0x57, 0xb2, 0x2b, 0xd5, 0x82, 0xa8, 0x22, 0xa6, 0x34, 0x66, 0xa9, 0x0a, 0x5e, 0x2d, 0xd0, 0x61, 0x2f, 0x78, 0xf4, 0x28, 0x7f, 0xd3, 0x3f, 0x71, 0x6d, 0xf0, 0x6e, 0x90, 0x47, 0xf8, 0xd7, 0x18, 0xab, 0x1f, 0xaa, 0x06, 0xec, 0x7b, 0x77, 0x3b, 0xb7, 0x16, 0xf0, 0x30, 0xf7, 0x42, 0xf1, 0xe5, 0xf5, 0x2c, 0xbd, 0x1a, 0xc4, 0xb4, 0x8b, 0xc2, 0xdc, 0x7c, 0x41, 0xb5, 0x05, 0x3f, 0x7f, 0xa5, 0x77, 0x65, 0xdf, 0x53, 0x3f, 0xd4, 0x7b, 0x02, 0xe4, 0x08, 0xb0, 0x2c, 0x4b, 0x66, 0x22, 0x75, 0xd8, 0xcd, 0x00, 0xdd, 0xd6, 0x6f, 0x8a, 0x39, 0x19, 0xdf, 0xd0, 0xe4, 0xe1, 0x6a, 0xbc, 0xb2, 0x02, 0xab, 0x52, 0x25, 0x42, 0x5a, 0x37, 0xe4, 0x03, 0x65, 0x70, 0x68, 0x22, 0x42, 0x6d, 0xf9, 0x1e, 0x83, 0x46, 0xd9, 0x7d, 0xab, 0x44, 0xbf, 0x6b, 0x40, 0xa3, 0x86, 0xa5, 0x21, 0x96, 0x27, 0x95, 0x1a, 0x8c, 0xe5, 0xbe, 0xb6, 0xb2, 0xc7, 0x5b, 0x54, 0xb9, 0x4b, 0x43, 0x7d, 0xd9, 0x59, 0x10, 0x75, 0x16, 0x76, 0x80, 0x10, 0xc2, 0x3a, 0x1c, 0xc7, 0x43, 0x04, 0x17, 0x0b, 0x16, 0xec, 0x78, 0xda, 0x14, 0xf9, 0x7c, 0x8f, 0xf4, 0x95, 0x35, 0xfe, 0x12, 0x3d, 0x78, 0xc0, 0x6e, 0x7d, 0xf6, 0xcc, 0xf8, 0x1c, 0xa9, 0x47, 0x0b, 0x94, 0x72, 0x9e, 0x37, 0xc4, 0x00, 0xd1, 0x43, 0xe9, 0xf3, 0x12, 0x72, 0xcb, 0x41, 0x8e, 0x06, 0x34, 0xd9, 0x8b, 0x03, 0xa6, 0x87, 0xb3, 0x35, 0x4d, 0x18, 0xaf, 0x74, 0x33, 0xbe, 0xf8, 0x27, 0xb3, 0xb6, 0xea, 0x07, 0x30, 0x27, 0x1b, 0x26, 0x07, 0x4e, 0xea, 0x2f, 0xc1, 0xd8, 0x5b, 0xef, 0x8e, 0x8f, 0x22, 0x14, 0xef, 0x39, 0xfd, 0x35, 0xb2, 0xbd, 0x47, 0x13, 0x23, 0x88, 0xcb, 0x1f, 0x81, 0x2f, 0xd6, 0x3c, 0xaf, 0x56, 0x90, 0xc5, 0x2c, 0xd0, 0x8b, 0xd2, 0x45, 0x08, 0x9d, 0xb7, 0x89, 0x9f, 0xeb, 0xce, 0x7e, 0x56, 0x47, 0x77, 0x92, 0x2f, 0xbc, 0x5c, 0x54, 0xcf, 0x66, 0xfa, 0xe4, 0x27, 0x87, 0x5d, 0xa8, 0x53, 0xd8, 0x2a, 0x41, 0xc2, 0x1d, 0xe3, 0xbe, 0x98, 0xfc, 0x67, 0x0f, 0x50, 0x0f, 0xb8, 0xbc, 0xa6, 0x38, 0x01, 0xd7, 0xb4, 0x35, 0xd8, 0x2f, 0x5b, 0x74, 0xc0, 0xc6, 0xe4, 0x28, 0xf2, 0x85, 0xe7, 0x9c, 0x5d, 0x2f, 0x6c, 0xc7, 0xeb, 0x94, 0x51, 0x22, 0x06, 0x07, 0xec, 0xb6, 0x5b, 0x11, 0xf0, 0x79, 0xdd, 0x67, 0x95, 0xda, 0x0d, 0x1a, 0xf3, 0x9b, 0x79, 0x0e, 0xaf, 0xdf, 0x83, 0xad, 0xda, 0x84, 0x64, 0xdc, 0x16, 0xb2, 0x71, 0x2e, 0xfb, 0xb4, 0x9c, 0x58, 0xb9, 0x07, 0x3d, 0xe6, 0xfe, 0xb1, 0x13, 0x2c, 0x1a, 0xd4, 0x85, 0x7e, 0x61, 0x83, 0x2e, 0xa4, 0xd0, 0xd4, 0x99, 0x88, 0xf4, 0x37, 0x49, 0x32, 0x08, 0x06, 0xfd, 0xf6, 0x5e, 0x5d, 0x32, 0xec, 0x00, 0x2b, 0xe8, 0xa1, 0x96, 0x89, 0xa9, 0x0c, 0x8a, 0x4b, 0xc8, 0xc4, 0x6b, 0xd5, 0xe7, 0x70, 0x8f, 0x31, 0xbb, 0x7e, 0xfd, 0x5e, 0x14, 0x18, 0x89, 0xea, 0x17, 0x53, 0x41, 0xc3, 0xce, 0xaa, 0x08, 0x4a, 0xe4, 0xac, 0x81, 0xa9, 0xa9, 0xf1, 0x2f, 0x66, 0x5c, 0x52, 0xda, 0x39, 0xaa, 0x59, 0x34, 0x1b, 0x72, 0xf7, 0xbc, 0xa0, 0xcb, 0x75, 0xe3, 0x86, 0x48, 0xad, 0x6d, 0x8e, 0x7b, 0x7a, 0x1b, 0x8a, 0xb7, 0x6d, 0x87, 0xb8, 0x1a, 0xc2, 0x4f, 0x4e, 0xcb, 0x92, 0x75, 0x56, 0x81, 0x4a, 0x06, 0xbc, 0x45, 0x5b, 0xfa, 0xa6, 0x78, 0x33, 0x5c, 0x03, 0x17, 0x6d, 0xab, 0x67, 0x3e, 0x44, 0x7f, 0x16, 0xeb, 0x4e, 0x6f, 0x5f, 0x05, 0x67, 0x33, 0x2b, 0x9d, 0xea, 0x06, 0xd5, 0x73, 0x28, 0x4e, 0x3c, 0xbc, 0x12, 0x7f, 0x17, 0x22, 0x39, 0x3d, 0x89, 0x0d, 0xf9, 0xc1, 0xf6, 0x21, 0xf0, 0x7d, 0x14, 0x08, 0xb5, 0x03, 0x45, 0x71, 0xc7, 0x23, 0x24, 0x58, 0xc4, 0x53, 0x5d, 0x88, 0xdc, 0x55, 0xc3, 0x5f, 0x84, 0x13, 0x9c, 0xd2, 0x6f, 0xce, 0x3f, 0xb0, 0xba, 0x77, 0xe2, 0x2b, 0x67, 0x5d, 0xad, 0x94, 0x0c, 0x09, 0x13, 0x66, 0xcc, 0x66, 0x61, 0x86, 0x87, 0x26, 0x97, 0xc9, 0x4e, 0x60, 0x78, 0xb7, 0x1a, 0x7e, 0xdd, 0x8f, 0xbd, 0x56, 0x4e, 0x8b, 0x18, 0x97, 0xd3, 0x64, 0x8f, 0x67, 0x08, 0x19, 0xba, 0x4a, 0x70, 0xed, 0x5d, 0x46, 0x0b, 0xae, 0x9b, 0x45, 0x2b, 0x3d, 0x66, 0xba, 0x83, 0x4b, 0x3a, 0x87, 0x81, 0x61, 0x0b, 0x1f, 0xde, 0x23, 0x7c, 0xe7, 0x73, 0xd5, 0x51, 0xe3, 0x4e, 0x1e, 0x27, 0x8e, 0x05, 0x0c, 0x62, 0x09, 0x4a, 0x59, 0x68, 0x78, 0xc0, 0xed, 0x0d, 0xaa, 0x0d, 0xa3, 0x4d, 0xf8, 0x31, 0x50, 0x41, 0x6f, 0x16, 0x02, 0x4c, 0x31, 0x67, 0x85, 0x96, 0x18, 0xa6, 0x2c, 0xbb, 0x9d, 0x79, 0xcd, 0xc4, 0xf8, 0x45, 0x0e, 0x56, 0x89, 0xfe, 0xdf, 0x29, 0x77, 0x3e, 0x48, 0xbc, 0x97, 0x94, 0x65, 0x47, 0x8f, 0x1e, 0xaf, 0xf2, 0x3b, 0x5a, 0x7c, 0x44, 0x4f, 0x39, 0xca, 0xde, 0x3e, 0x75, 0x38, 0x69, 0x5b, 0x25, 0x55, 0xcd, 0x3e, 0x8f, 0x1d, 0xa3, 0x6a, 0x3d, 0xc1, 0xee, 0x2d, 0x53, 0xa7, 0x05, 0xc7, 0x1f, 0xb2, 0xd4, 0xce, 0xf2, 0xc3, 0x44, 0xd0, 0x2e, 0x80, 0xf8, 0x3b, 0xa1, 0x54, 0x3a, 0x7a, 0x11, 0xb6, 0x35, 0x61, 0x18, 0xaf, 0x64, 0xcb, 0x33, 0x96, 0x4a, 0x81, 0x15, 0x1f, 0x64, 0x5e, 0x41, 0x94, 0x5c, 0xb1, 0xd7, 0x61, 0x7f, 0xe3, 0xae, 0xd6, 0x71, 0x5a, 0xa4, 0x29, 0x1f, 0x9c, 0x32, 0xba, 0xf6, 0xb8, 0x44, 0x9b, 0x53, 0xe2, 0x47, 0x50, 0x3a, 0x5d, 0x83, 0xd3, 0x4a, 0x9e, 0xab, 0xdc, 0xf0, 0xae, 0xb2, 0x5e, 0xdc, 0xd0, 0xe1, 0x55, 0xb1, 0x64, 0x27, 0xbf, 0x01, 0x0b, 0xb0, 0xe8, 0x78, 0x0c, 0xb8, 0xeb, 0x57, 0xf6, 0xa2, 0x76, 0x24, 0x87, 0x44, 0xcd, 0xa0, 0xcd, 0x86, 0x12, 0xfa, 0x8b, 0x2b, 0xc3, 0x42, 0xde, 0xee, 0x84, 0x20, 0x20, 0xd1, 0x1f, 0xc6, 0x0d, 0xb2, 0xc9, 0x23, 0x24, 0x1f, 0xa7, 0x5a, 0x50, 0x6b, 0x90, 0x72, 0xc8, 0x01, 0x15, 0x4f, 0x34, 0xf9, 0xbe, 0xe1, 0x11, 0xe9, 0x97, 0x9b, 0x56, 0xfe, 0xeb, 0x27, 0x58, 0x4b, 0x50, 0x58, 0xeb, 0x60, 0xe3, 0x60, 0xca, 0x1f, 0xd5, 0x43, 0x39, 0xcb, 0x27, 0x8b, 0xe8, 0x62, 0xb1, 0x3e, 0x1b, 0x2d, 0x69, 0x0d, 0x08, 0x95, 0xe2, 0xce, 0x80, 0x38, 0x13, 0x2c, 0xd2, 0x3c, 0x5a, 0x9d, 0xed, 0xe3, 0xc1, 0x95, 0xc4, 0x60, 0x7f, 0xfa, 0xf7, 0xea, 0xc2, 0xd7, 0xaf, 0x0e, 0xab, 0x54, 0xc9, 0x49, 0x9a, 0xe6, 0x38, 0xd6, 0xad, 0xc3, 0xa4, 0xc5, 0x83, 0x99, 0x57, 0x4d, 0x46, 0x7f, 0x5a, 0x63, 0xe8, 0x2c, 0xdb, 0x8b, 0xac, 0x66, 0xd2, 0xef, 0xe9, 0xbe, 0xe5, 0xae, 0x0b, 0x7b, 0x88, 0x76, 0xda, 0xd4, 0x68, 0x55, 0xff, 0x62, 0x0a, 0xcc, 0xc3, 0xd4, 0xaf, 0x26, 0x1b, 0xe5, 0x7c, 0x07, 0xe2, 0x8b, 0xd7, 0x48, 0x65, 0x71, 0x14, 0x02, 0x24, 0xa8, 0x51, 0xe9, 0xd7, 0x9a, 0x9e, 0xdc, 0xb0, 0x3f, 0x62, 0xba, 0xe0, 0x93, 0xfa, 0x76, 0x5c, 0x47, 0xa2, 0x6e, 0xe1, 0xb6, 0x99, 0xf8, 0x35, 0x1c, 0x80, 0x3e, 0xb1, 0x02, 0x03, 0x4d, 0xfc, 0xfd, 0xbc, 0x68, 0x19, 0x98, 0x54, 0xa2, 0xa4, 0x8f, 0xec, 0xac, 0x58, 0x3e, 0xbb, 0xeb, 0xd5, 0x58, 0xf8, 0xcd, 0xa0, 0xdc, 0xfa, 0x5e, 0x6c, 0x45, 0x9e, 0x16, 0x98, 0x02, 0xe9, 0xf5, 0xf8, 0x25, 0xee, 0xd3, 0xd8, 0x5f, 0xf2, 0xf1, 0x3e, 0x2c, 0xcf, 0xd3, 0x70, 0x4b, 0x96, 0x52, 0xb6, 0x71, 0x78, 0xed, 0x61, 0x3e, 0xe7, 0x60, 0x0c, 0x70, 0xf8, 0x78, 0x22, 0x57, 0x0c, 0x25, 0xa1, 0x89, 0xaf, 0xd1, 0x1d, 0xd6, 0xc0, 0xf0, 0x07, 0x7e, 0xd3, 0xd8, 0x2f, 0xa2, 0xd3, 0xd3, 0x88, 0xf9, 0xec, 0x73, 0x2b, 0xc4, 0xa7, 0x26, 0x9f, 0x04, 0x57, 0x0a, 0x58, 0xea, 0xb5, 0x03, 0x7d, 0x8f, 0xc7, 0x0a, 0xef, 0xe5, 0x06, 0xc8, 0x86, 0xee, 0xbf, 0x63, 0x9e, 0x2b, 0xba, 0x98, 0xd2, 0x58, 0x1a, 0x0a, 0x07, 0x56, 0x84, 0xd9, 0xad, 0x69, 0x83, 0x77, 0x41, 0xa3, 0x2b, 0xb7, 0x16, 0xa0, 0xfd, 0x27, 0x56, 0x74, 0x0b, 0xa0, 0x43, 0xe2, 0x5d, 0x1b, 0xc3, 0xcf, 0x92, 0xc6, 0x1c, 0xf5, 0xca, 0x58, 0xfc, 0xdc, 0xc4, 0xa1, 0xbc, 0x06, 0x44, 0x65, 0xe5, 0x6a, 0xb8, 0x6a, 0xf4, 0x25, 0x1a, 0xd0, 0x5a, 0x6b, 0x18, 0xa1, 0xc7, 0xc3, 0x73, 0xa9, 0xa8, 0x74, 0xa5, 0x88, 0xef, 0x3a, 0xc6, 0x05, 0x12, 0x3e, 0xb0, 0xa5, 0x56, 0x45, 0x62, 0x7d, 0x4d, 0x28, 0xa2, 0x44, 0x9d, 0x84, 0xe7, 0xac, 0x04, 0xb2, 0x75, 0xf2, 0x99, 0xfa, 0xca, 0xb4, 0x55, 0x03, 0x39, 0x04, 0xd1, 0x8e, 0xd5, 0xba, 0x51, 0x64, 0x90, 0x0e, 0x02, 0x8d, 0xa4, 0x66, 0x80, 0xc3, 0x32, 0x6c, 0x9b, 0x27, 0x29, 0x64, 0x5b, 0x32, 0x6a, 0xbd, 0x42, 0xed, 0x2a, 0xe5, 0xd0, 0x65, 0x97, 0x62, 0x4d, 0x59, 0xbe, 0x1f, 0xc2, 0x37, 0xac, 0x03, 0x49, 0x47, 0xd3, 0xc8, 0x86, 0x25, 0xb0, 0x0b, 0x76, 0x74, 0xab, 0x9f, 0x67, 0xd1, 0x3f, 0x27, 0x48, 0x06, 0x5a, 0xe4, 0x23, 0x80, 0x07, 0xcb, 0xe8, 0x04, 0x4a, 0xdb, 0x6c, 0x9d, 0x4b, 0xad, 0xb1, 0xd9, 0xb7, 0x4d, 0x68, 0x34, 0x64, 0x48, 0xb4, 0xd5, 0x34, 0x06, 0x31, 0x78, 0x3b, 0x5a, 0x35, 0xac, 0x24, 0x58, 0x56, 0x3e, 0xd0, 0x67, 0x2c, 0xf5, 0x41, 0x97, 0x58, 0x7f, 0xb7, 0x34, 0xc4, 0xac, 0x18, 0x9b, 0x2d, 0xda, 0x95, 0x4c, 0xdf, 0xb1, 0x8b, 0x41, 0xc0, 0x10, 0xa7, 0x7e, 0x90, 0x46, 0x4e, 0xea, 0x6f, 0x86, 0x3c, 0x5d, 0xa0, 0x95, 0x6b, 0xfa, 0x8c, 0xc6, 0x36, 0xbf, 0x0a, 0x28, 0xbe, 0x5a, 0xdd, 0xfe, 0x8d, 0x3e, 0x7e, 0x6f, 0x79, 0xf7, 0x1d, 0x7f, 0xcb, 0xba, 0xe2, 0x3e, 0xa1, 0x41, 0x78, 0x3f, 0x91, 0xd6, 0xcc, 0x4c, 0x8f, 0xad, 0x12, 0x58, 0x11, 0x76, 0x0a, 0xb5, 0x71, 0x33, 0x81, 0x88, 0x92, 0x47, 0x1a, 0x79, 0xc6, 0xd0, 0x4e, 0xaf, 0xef, 0x37, 0xb2, 0xfb, 0xe5, 0x06, 0x78, 0x53, 0x18, 0xf9, 0x39, 0x83, 0x77, 0x57, 0xf2, 0x1f, 0x90, 0x82, 0x4c, 0xbc, 0xf8, 0xcd, 0x20, 0x5f, 0xed, 0x8f, 0x3a, 0x36, 0x3a, 0x76, 0x5d, 0x86, 0x5b, 0x1d, 0x88, 0xe5, 0xe2, 0xe0, 0x78, 0xa9, 0x19, 0xef, 0x6e, 0xa0, 0xe9, 0xa1, 0x32, 0x02, 0xfa, 0x0b, 0x58, 0xa3, 0x1c, 0xd2, 0xc2, 0x6d, 0xe6, 0x3d, 0x66, 0x0e, 0x9c, 0x8e, 0x51, 0xee, 0x56, 0x93, 0xec, 0x64, 0x5f, 0x78, 0x7f, 0x29, 0xdc, 0xdf, 0xf3, 0x0d, 0xae, 0x32, 0xdc, 0xe8, 0x99, 0x38, 0xb7, 0xd4, 0xa5, 0xe7, 0x6f, 0x99, 0xc4, 0x7a, 0x27, 0x69, 0xb6, 0xc3, 0x33, 0xce, 0x2a, 0xc1, 0x67, 0xe0, 0x26, 0x75, 0x95, 0xbb, 0xa8, 0xf2, 0x51, 0x30, 0x8e, 0xb4, 0xf7, 0xbb, 0xb3, 0x32, 0xf0, 0xb5, 0x5b, 0xb6, 0x30, 0xcb, 0xd1, 0x6d, 0x03, 0xaf, 0x4e, 0xba, 0x0a, 0x0d, 0x1d, 0xd0, 0x80, 0xc1, 0xfd, 0x80, 0xc2, 0x47, 0xc7, 0x4f, 0x0f, 0x73, 0x50, 0xcc, 0x8c, 0x62, 0x91, 0x21, 0x8b, 0xb0, 0x05, 0xe7, 0x0c, 0xeb, 0x53, 0x3f, 0x84, 0x48, 0x2d, 0x1e, 0xde, 0x95, 0x78, 0xe8, 0xc0, 0x6f, 0xad, 0x41, 0x0f, 0xb5, 0x7f, 0x20, 0xb5, 0x3d, 0xbe, 0x24, 0xa2, 0xc5, 0x7b, 0x2c, 0x10, 0x2c, 0x6d, 0x22, 0x0c, 0xe2, 0x93, 0x17, 0x32, 0x9d, 0x1b, 0x95, 0xb8, 0x4d, 0x83, 0x30, 0xae, 0x53, 0xfe, 0x5f, 0x83, 0xed, 0x19, 0x8a, 0xcc, 0xf5, 0x9e, 0x64, 0x41, 0xcc, 0xb8, 0x7b, 0x08, 0x91, 0x59, 0x0e, 0x37, 0x96, 0xd9, 0x1e, 0x94, 0x14, 0xe0, 0xc7, 0x9f, 0x1d, 0x85, 0xd1, 0xd2, 0xd3, 0xb7, 0x83, 0x27, 0xd8, 0xdc, 0xb7, 0xdb, 0x05, 0xb9, 0x34, 0x71, 0x5f, 0x92, 0x37, 0xfb, 0x46, 0x92, 0x53, 0x95, 0xf0, 0x6d, 0x7b, 0x32, 0x16, 0x43, 0x5e, 0x9b, 0xed, 0xc8, 0xf3, 0xb4, 0x58, 0xa2, 0x54, 0x01, 0x5c, 0x12, 0xcf, 0x6a, 0xd4, 0xd7, 0x3a, 0x3b, 0x66, 0x4f, 0x88, 0x6f, 0xb5, 0xe0, 0x9a, 0x2e, 0xd8, 0x96, 0x57, 0x94, 0x0c, 0x0d, 0xff, 0xb4, 0xa5, 0x92, 0xbc, 0xdd, 0x4b, 0x85, 0x7b, 0x1c, 0x62, 0x01, 0xf9, 0x01, 0xca, 0xc0, 0x21, 0xa6, 0xc9, 0x38, 0x95, 0xee, 0x45, 0x0a, 0x8b, 0x0b, 0x37, 0x9d, 0xda, 0x43, 0x5c, 0x06, 0x54, 0xf3, 0x2e, 0x2c, 0x57, 0xd4, 0x12, 0x29, 0x9f, 0x7d, 0xd3, 0xf3, 0x5e, 0x29, 0x4f, 0x3b, 0x8f, 0xbb, 0x70, 0x95, 0x87, 0xff, 0x5e, 0xda, 0xcd, 0x33, 0xf3, 0xca, 0x2b, 0xc6, 0x70, 0xf6, 0x05, 0x5f, 0x6e, 0xde, 0xea, 0x21, 0x17, 0x56, 0x69, 0x2e, 0x95, 0x2e, 0x26, 0x69, 0xcb, 0x11, 0x2d, 0x81, 0x43, 0xae, 0x85, 0x2b, 0x68, 0x16, 0x09, 0xae, 0xf6, 0x65, 0x73, 0xa5, 0xae, 0xa5, 0xba, 0x00, 0x4e, 0xef, 0x9e, 0x4d, 0xc0, 0xd3, 0x80, 0x36, 0x92, 0xfb, 0x78, 0x4a, 0xa6, 0x0a, 0xa2, 0x00, 0x2b, 0xca, 0xb8, 0xf8, 0xcb, 0x87, 0xe6, 0x85, 0x26, 0xb6, 0xd9, 0x69, 0x80, 0xdb, 0x1a, 0xdf, 0xb6, 0xa9, 0x9a, 0xdf, 0x77, 0x6a, 0x8e, 0x9d, 0xb0, 0xa1, 0x7c, 0x53, 0x48, 0xee, 0x96, 0x40, 0x0e, 0x33, 0x48, 0xf0, 0xf0, 0xf5, 0x0d, 0xbf, 0x6d, 0x05, 0x86, 0x99, 0x4d, 0x5f, 0xcd, 0x03, 0x8f, 0x52, 0x07, 0x5f, 0xa3, 0xe1, 0x38, 0x6b, 0xd9, 0x6a, 0x5c, 0x0c, 0x1a, 0x85, 0xb3, 0x4a, 0xd6, 0x2f, 0x5c, 0x9b, 0x3d, 0x28, 0x25, 0x64, 0xb2, 0x99, 0xa2, 0xbd, 0x7c, 0xfa, 0x7c, 0x75, 0xbf, 0x33, 0x0c, 0x55, 0xab, 0x01, 0x28, 0xa9, 0xf4, 0x9c, 0x3d, 0xfd, 0x82, 0x97, 0x9e, 0x25, 0x69, 0x07, 0x1c, 0x80, 0x1b, 0xe7, 0xd7, 0x7d, 0xdd, 0xbb, 0x54, 0x5d, 0x77, 0x74, 0xcf, 0x3b, 0x30, 0x94, 0xd2, 0x4a, 0xf9, 0x92, 0x06, 0x5f, 0xe9, 0x80, 0x4a, 0xaf, 0xe9, 0xeb, 0x02, 0xd9, 0xb1, 0x03, 0xb1, 0x27, 0xf3, 0xfb, 0xcb, 0x10, 0xd5, 0xb3, 0xc4, 0x02, 0xa5, 0x95, 0x6d, 0x5f, 0xc8, 0xbd, 0x80, 0xc6, 0xf4, 0x5c, 0x79, 0x93, 0xa0, 0x5e, 0xa8, 0xa9, 0xb8, 0x4a, 0x85, 0x6f, 0x94, 0x6a, 0x43, 0x18, 0x2b, 0x2d, 0xa8, 0x28, 0x84, 0xc9, 0x1b, 0x33, 0x6e, 0x24, 0xff, 0xe8, 0x71, 0xf5, 0x3f, 0x4f, 0x04, 0x26, 0x2a, 0x4f, 0x00, 0x7e, 0x82, 0x73, 0x55, 0x7c, 0xcf, 0xee, 0xfc, 0x86, 0xf9, 0xdc, 0x2d, 0x43, 0x16, 0xca, 0xd1, 0x45, 0x81, 0x79, 0x3a, 0xeb, 0x2c, 0xdf, 0x12, 0x85, 0x37, 0x6f, 0x91, 0xba, 0xc1, 0x9a, 0xf3, 0x27, 0xfe, 0x96, 0x2a, 0x49, 0x89, 0x5e, 0xd0, 0x9d, 0xfc, 0xfa, 0x5f, 0x05, 0xbf, 0x00, 0xa4, 0x6e, 0x1d, 0x5b, 0x71, 0xb0, 0x9d, 0x4b, 0x93, 0xb5, 0x8f, 0xad, 0x03, 0xde, 0xe5, 0x7d, 0x61, 0xa2, 0x44, 0x99, 0x9d, 0x79, 0x5b, 0xc7, 0xf8, 0xf8, 0x74, 0xfa, 0x2b, 0x3d, 0x48, 0xd1, 0xe5, 0x8d, 0x18, 0x61, 0x7b, 0x3c, 0xf9, 0x34, 0xdb, 0xcd, 0x70, 0x91, 0xc3, 0x5b, 0x3e, 0xfe, 0x30, 0x38, 0x7d, 0x04, 0x18, 0xd3, 0xec, 0x32, 0x5b, 0xdf, 0x88, 0x65, 0xf8, 0xb1, 0x5c, 0x46, 0x7c, 0xea, 0x99, 0x13, 0xc1, 0x57, 0xe9, 0xa3, 0xd4, 0x15, 0x01, 0xa4, 0x37, 0xf9, 0x75, 0x28, 0x49, 0x2e, 0xd1, 0x60, 0x02, 0x20, 0xe5, 0xa6, 0xe3, 0x99, 0x60, 0xc1, 0x2d, 0x2a, 0xa1, 0x65, 0x52, 0xcd, 0xc9, 0xfa, 0xa9, 0xc8, 0x15, 0x9e, 0x65, 0xd5, 0x6b, 0x6d, 0xc8, 0x7f, 0x32, 0x00, 0x94, 0xcf, 0x67, 0x33, 0xc3, 0x28, 0xed, 0x2c, 0x77, 0x70, 0x25, 0x99, 0x34, 0x70, 0xbf, 0x38, 0x4d, 0x7e, 0xd0, 0x9d, 0x9c, 0x59, 0x24, 0x30, 0x76, 0x54, 0xd5, 0x75, 0xde, 0xb7, 0x1c, 0x90, 0xf9, 0x62, 0x68, 0x08, 0xc3, 0xb3, 0xad, 0xcb, 0xff, 0xaa, 0xff, 0x72, 0x74, 0x4b, 0x5f, 0xc7, 0x56, 0x44, 0xd5, 0x84, 0x03, 0xd0, 0xbf, 0x5e, 0xf0, 0xdb, 0x68, 0x42, 0xe2, 0x67, 0xdc, 0xdf, 0x61, 0x2e, 0xfb, 0x64, 0x69, 0x89, 0xcd, 0x8b, 0x64, 0x90, 0x15, 0xd6, 0x55, 0x83, 0x29, 0x18, 0x56, 0x69, 0x00, 0x38, 0x44, 0xf6, 0x8d, 0x32, 0xb9, 0xb2, 0x4b, 0x5e, 0x3a, 0x58, 0x1a, 0xf5, 0xb2, 0x7c, 0x49, 0xd1, 0x1f, 0x71, 0xf4, 0x74, 0x8c, 0x6a, 0x90, 0x4c, 0x3f, 0xdf, 0xc4, 0x36, 0x33, 0x33, 0x7a, 0x40, 0xc9, 0x93, 0x37, 0xb3, 0xba, 0x21, 0xa7, 0x51, 0x50, 0x52, 0x7d, 0xdb, 0xd6, 0x94, 0x7a, 0xd6, 0x4d, 0x35, 0xca, 0x8f, 0x60, 0x80, 0x97, 0x5d, 0x9a, 0x29, 0xd9, 0x26, 0xd7, 0xeb, 0x6b, 0x24, 0xf8, 0x6f, 0x64, 0xe9, 0xdb, 0x70, 0xa4, 0xa1, 0x8b, 0x1d, 0xad, 0x98, 0xb3, 0xbe, 0xb5, 0xfc, 0x59, 0x9b, 0xf9, 0xe3, 0xc8, 0x19, 0x53, 0x8f, 0xce, 0x27, 0x0f, 0xf1, 0x28, 0xd8, 0xfb, 0x6d, 0x3b, 0x51, 0xbd, 0xdd, 0x05, 0xe6, 0x69, 0xd8, 0x52, 0x80, 0x53, 0x34, 0x33, 0x42, 0x22, 0xc9, 0xac, 0x6c, 0x26, 0x78, 0xad, 0x7f, 0xec, 0x6d, 0x43, 0xa2, 0x0f, 0xa0, 0x10, 0x44, 0x50, 0xa2, 0xf9, 0x03, 0xe9, 0x96, 0x1e, 0xcc, 0x1f, 0x7d, 0x0f, 0x44, 0x17, 0xb8, 0x3d, 0x67, 0xea, 0xc7, 0xae, 0x6f, 0xfb, 0x57, 0xf5, 0xf8, 0x89, 0x7c, 0x62, 0x61, 0x80, 0x3b, 0x76, 0x75, 0x95, 0x4b, 0x99, 0x4b, 0x91, 0x1c, 0x0f, 0x6a, 0xed, 0x19, 0x29, 0x31, 0xa0, 0x2b, 0xb8, 0x77, 0x35, 0x7e, 0xc7, 0x6e, 0x20, 0x87, 0x8a, 0xcd, 0x52, 0x46, 0x91, 0x2e, 0x0b, 0xc8, 0x41, 0xb4, 0xf0, 0xf1, 0x85, 0xf2, 0x5d, 0x78, 0xc1, 0x08, 0xfc, 0x33, 0x08, 0x0f, 0x97, 0x95, 0x8e, 0xb8, 0x2a, 0x75, 0x60, 0x2f, 0x3d, 0x10, 0x52, 0x46, 0x70, 0x52, 0x39, 0xcf, 0x58, 0x51, 0x5b, 0x49, 0x89, 0x1b, 0x24, 0xc0, 0xf4, 0xb1, 0x1b, 0xee, 0x74, 0x53, 0x14, 0xa6, 0xa3, 0xfe, 0xa6, 0x73, 0xf2, 0x34, 0xdf, 0x7c, 0xf9, 0xfb, 0x37, 0xaa, 0x0b, 0x28, 0xc3, 0x0d, 0x0e, 0xdd, 0xab, 0x7c, 0x89, 0x51, 0xde, 0x7c, 0xff, 0xcf, 0x04, 0x64, 0x7c, 0x02, 0xb5, 0xbe, 0x6d, 0x6f, 0xe8, 0xef, 0xb4, 0x43, 0xae, 0x1b, 0xfc, 0x4f, 0x20, 0x43, 0x4a, 0x51, 0x95, 0xb0, 0xd5, 0x75, 0x19, 0x95, 0x18, 0x1b, 0x1b, 0xf0, 0x25, 0xdb, 0x66, 0xb1, 0x3c, 0xc6, 0x53, 0x1e, 0x9c, 0xef, 0x3c, 0x76, 0x99, 0x2b, 0x33, 0xd4, 0xef, 0x14, 0xf4, 0x57, 0x56, 0x54, 0x19, 0x80, 0x57, 0x20, 0x8d, 0xdb, 0x5d, 0x02, 0x43, 0xe2, 0x0f, 0xdc, 0x28, 0x1e, 0xdd, 0x2a, 0x56, 0x8f, 0xd9, 0x87, 0x8a, 0x4e, 0xc9, 0x73, 0xd8, 0x71, 0x7a, 0x53, 0x9d, 0x2f, 0x57, 0xb9, 0xb6, 0x45, 0x39, 0xe6, 0xef, 0x97, 0x81, 0x8d, 0xbe, 0x1b, 0x65, 0xda, 0x32, 0xf3, 0x87, 0xb3, 0x26, 0xd9, 0xcc, 0x3e, 0xba, 0xc0, 0x6b, 0xa3, 0x04, 0xb8, 0x44, 0x13, 0x02, 0x13, 0x74, 0x09, 0xd3, 0xc6, 0x26, 0xcf, 0x27, 0x12, 0xab, 0x45, 0xf5, 0x63, 0xce, 0xde, 0x6c, 0x78, 0x61, 0xeb, 0x2b, 0xc4, 0x1c, 0x1c, 0xb4, 0x14, 0xa8, 0x43, 0x1e, 0x73, 0xf6, 0x5c, 0x0b, 0x4a, 0xd5, 0xcb, 0xda, 0xcc, 0xc4, 0xe4, 0x1e, 0x91, 0x04, 0xb0, 0x4e, 0x81, 0xf2, 0xee, 0xbe, 0xf4, 0x94, 0x59, 0xcd, 0x18, 0x72, 0x29, 0x60, 0x92, 0xa7, 0xdc, 0x90, 0x68, 0x37, 0x36, 0xa0, 0x1e, 0xa3, 0x87, 0x32, 0x1f, 0xbb, 0x2c, 0xba, 0x5f, 0xb4, 0x58, 0x32, 0x3f, 0x7a, 0x15, 0x10, 0xb1, 0x47, 0x85, 0x75, 0x9c, 0x75, 0x6e, 0xa7, 0x82, 0x91, 0xf5, 0xc1, 0x60, 0xb0, 0xaa, 0xa9, 0xd5, 0x06, 0xc5, 0x43, 0x87, 0xb4, 0xaf, 0xe4, 0xc3, 0xe2, 0xc5, 0x0a, 0x63, 0x0e, 0x58, 0x4a, 0xf5, 0xa3, 0xf8, 0x89, 0x19, 0xce, 0xf2, 0x6f, 0x2b, 0x8d, 0x17, 0x19, 0x22, 0x09, 0xbf, 0x0e, 0xb8, 0x25, 0x0e, 0x75, 0xcc, 0x57, 0x76, 0x85, 0x04, 0xb7, 0x7d, 0x3c, 0xb6, 0x55, 0xc1, 0x54, 0x09, 0xd0, 0x39, 0x73, 0x57, 0x24, 0xbd, 0xa2, 0xd6, 0xc4, 0xc9, 0x00, 0x78, 0xe9, 0x7e, 0xb7, 0x0f, 0x29, 0xe9, 0x30, 0xb5, 0x4b, 0x88, 0x83, 0x6b, 0x5a, 0x0a, 0x32, 0x00, 0xf8, 0x57, 0x16, 0x35, 0xf5, 0xd0, 0x99, 0x1e, 0x20, 0xd8, 0x26, 0xcb, 0x5d, 0x93, 0xde, 0x28, 0xf8, 0xed, 0x8d, 0x22, 0x39, 0xdf, 0xdc, 0x0b, 0x39, 0xee, 0xc8, 0x40, 0xf3, 0xf4, 0x52, 0x09, 0x9e, 0x22, 0x78, 0xc0, 0x3b, 0x46, 0x65, 0x36, 0x6a, 0x4a, 0xe5, 0x52, 0x81, 0xfd, 0x1b, 0xfb, 0xdf, 0x17, 0x76, 0x38, 0x7e, 0x77, 0xe1, 0x96, 0xc8, 0xae, 0x3a, 0xcb, 0xac, 0xc1, 0x06, 0x98, 0xf0, 0x2b, 0x63, 0xf4, 0xc9, 0x22, 0x3d, 0x66, 0xa9, 0x1b, 0xc5, 0xb3, 0x58, 0x90, 0x1f, 0xb9, 0x46, 0x01, 0x5b, 0x9b, 0x20, 0x39, 0xa7, 0x1e, 0xa1, 0xd2, 0xc3, 0x53, 0xab, 0xfb, 0xb5, 0x77, 0x96, 0x79, 0xbd, 0x17, 0xc8, 0xec, 0x8b, 0x77, 0x85, 0x54, 0xb0, 0x35, 0x09, 0xd3, 0x53, 0x2a, 0xd4, 0xb5, 0x25, 0x91, 0x46, 0xad, 0x97, 0x6b, 0x6b, 0x61, 0x4a, 0x22, 0x18, 0x29, 0xc6, 0x6c, 0x37, 0x14, 0x70, 0x72, 0x5f, 0x2d, 0xb6, 0x32, 0xa8, 0xfc, 0x8d, 0x21, 0xbd, 0x4f, 0x1d, 0x15, 0x32, 0x3a, 0xba, 0x63, 0x18, 0x5c, 0x17, 0x44, 0xcf, 0x64, 0xb6, 0x7e, 0x1c, 0xd4, 0xa3, 0x40, 0x7b, 0x05, 0x62, 0x4d, 0xb7, 0x6b, 0x26, 0x5c, 0xb7, 0x1b, 0x44, 0xbf, 0x9b, 0x8a, 0xe6, 0x44, 0x08, 0x98, 0x04, 0x59, 0xbf, 0xcd, 0x90, 0x73, 0x75, 0xe2, 0xf1, 0xb0, 0xdf, 0x83, 0xb3, 0xbb, 0x0c, 0x53, 0x7d, 0xf0, 0xf7, 0x31, 0x43, 0xc0, 0x5d, 0xba, 0xbc, 0x57, 0xcc, 0x0e, 0x17, 0x7d, 0xfd, 0xd7, 0xea, 0xba, 0x63, 0x88, 0x6b, 0xbe, 0x04, 0xe3, 0xe2, 0xff, 0x88, 0xbe, 0x5e, 0xa4, 0x8f, 0x06, 0xa7, 0xa2, 0x48, 0x04, 0x75, 0x25, 0x40, 0xdf, 0xdf, 0x31, 0x77, 0x63, 0x16, 0x89, 0xb9, 0x00, 0x53, 0xd0, 0x2b, 0x16, 0x0e, 0xee, 0x25, 0x70, 0x71, 0xb5, 0x3f, 0x0e, 0x0c, 0xc5, 0xaf, 0x27, 0xca, 0xac, 0xd2, 0x6e, 0x24, 0x52, 0x08, 0x95, 0x94, 0x95, 0xc5, 0x0f, 0x4d, 0x30, 0xe5, 0x1b, 0x29, 0xe1, 0x40, 0xfe, 0xe3, 0xcb, 0x7f, 0x8f, 0x86, 0x19, 0x2e, 0xf9, 0x25, 0xe4, 0x12, 0xbd, 0xcd, 0x56, 0xbc, 0xf6, 0xb8, 0x10, 0x5e, 0xe1, 0xc3, 0xca, 0xde, 0x9c, 0x22, 0x39, 0x29, 0x2e, 0x53, 0x36, 0xca, 0xc8, 0x50, 0x1c, 0xbb, 0x4b, 0x09, 0x72, 0x7a, 0x09, 0x11, 0xca, 0x60, 0xd0, 0x98, 0xe8, 0x2f, 0x25, 0x99, 0x27, 0xea, 0xcd, 0x54, 0x19, 0xe9, 0x92, 0xff, 0x6e, 0x2c, 0x43, 0xb9, 0x17, 0xf0, 0xfd, 0xbf, 0xab, 0x80, 0xa9, 0xe2, 0x09, 0x4e, 0xc6, 0x39, 0x3f, 0x42, 0x69, 0x13, 0xaa, 0x52, 0x81, 0x2f, 0x5f, 0x53, 0x60, 0x30, 0xca, 0x0e, 0x77, 0x4b, 0x95, 0x97, 0x61, 0x43, 0xcb, 0xda, 0x24, 0x97, 0x3e, 0x77, 0xb3, 0xfa, 0x26, 0xd0, 0xb7, 0x03, 0x0a, 0x5f, 0x8e, 0x26, 0xe4, 0x4e, 0x94, 0xe3, 0x80, 0x41, 0xa2, 0x3d, 0x25, 0x77, 0xd5, 0x6e, 0x77, 0x11, 0x91, 0xd9, 0x9c, 0xb1, 0xc5, 0x40, 0x9e, 0x47, 0x70, 0x37, 0x10, 0x28, 0x64, 0xd8, 0xf5, 0x61, 0x4a, 0xb9, 0xdd, 0x4a, 0xe6, 0x1b, 0x51, 0x5e, 0x9c, 0x64, 0x71, 0x49, 0x33, 0xd0, 0xdc, 0x43, 0xda, 0x63, 0xd0, 0x9d, 0x68, 0x22, 0x93, 0x99, 0xe8, 0x82, 0x11, 0x7f, 0x55, 0x21, 0xc6, 0xed, 0xa2, 0xb4, 0xde, 0x6f, 0xfd, 0x40, 0x9b, 0x4f, 0x55, 0x8e, 0xf8, 0xaf, 0x1a, 0xd9, 0x8c, 0xd4, 0x44, 0xc9, 0xb0, 0xc5, 0x96, 0xa5, 0xe4, 0x15, 0x24, 0xc4, 0x6f, 0xfd, 0x13, 0x44, 0x46, 0xae, 0xa0, 0xff, 0x2f, 0xe4, 0x63, 0xbb, 0x26, 0xbf, 0xd5, 0xa1, 0x00, 0xcf, 0x11, 0xf1, 0x4e, 0x6d, 0xd7, 0xf3, 0x84, 0x52, 0xd6, 0x31, 0x5b, 0x62, 0x2b, 0xe3, 0x73, 0xc9, 0x25, 0xab, 0x3d, 0x49, 0x4b, 0x82, 0x18, 0xd2, 0xa0, 0xf2, 0xba, 0x54, 0x25, 0x87, 0xd2, 0xd1, 0xa0, 0x80, 0xeb, 0xb6, 0x9c, 0xc9, 0x94, 0x6b, 0xb1, 0x2e, 0xbe, 0x29, 0x05, 0xc9, 0x65, 0x0c, 0x13, 0xbc, 0x73, 0x69, 0xab, 0x26, 0xe1, 0x61, 0x3a, 0x4f, 0x1f, 0xb6, 0x4c, 0x26, 0xb6, 0xde, 0x4f, 0xee, 0x2c, 0x56, 0x9a, 0x34, 0x27, 0x39, 0xae, 0x04, 0xd6, 0x11, 0xbb, 0x5c, 0x8d, 0xed, 0x66, 0xe1, 0xaf, 0xb4, 0xc9, 0xd1, 0xd1, 0xb8, 0xbb, 0x39, 0x1c, 0x8e, 0x52, 0x68, 0xf3, 0x1e, 0xa7, 0xa3, 0xd6, 0xf6, 0xd9, 0x1a, 0x87, 0xe4, 0x55, 0x1b, 0x6b, 0xc3, 0x54, 0x86, 0x32, 0x95, 0xa5, 0x81, 0xbb, 0xd2, 0xac, 0x6c, 0x31, 0x00, 0xab, 0x18, 0x7b, 0x84, 0x40, 0x33, 0xd3, 0xb8, 0x2f, 0x07, 0xb4, 0x3d, 0x62, 0x65, 0xfa, 0x93, 0x2e, 0xdb, 0x45, 0xe6, 0xd8, 0x2d, 0x9e, 0x2b, 0x58, 0x03, 0x5d, 0x6c, 0x5c, 0xe0, 0x49, 0x60, 0x90, 0x53, 0x02, 0x3f, 0x1d, 0x71, 0x9c, 0xd4, 0x6f, 0x82, 0x8d, 0xd4, 0x3c, 0xfb, 0xc9, 0x6e, 0xc2, 0xad, 0x2b, 0x23, 0x50, 0x3b, 0x17, 0xd8, 0x07, 0xd1, 0x5e, 0x2a, 0xe2, 0x13, 0x61, 0x01, 0xf4, 0x54, 0x7a, 0x68, 0xf1, 0x09, 0x97, 0x9c, 0xf0, 0x7d, 0x28, 0x62, 0x6f, 0xc6, 0x3c, 0x9e, 0x98, 0xf7, 0xe6, 0x22, 0xc3, 0x97, 0xe6, 0xc4, 0x3b, 0x52, 0x85, 0xb3, 0x45, 0xef, 0xc1, 0x0b, 0x5e, 0x82, 0xaa, 0xa6, 0xc5, 0xe3, 0x0c, 0x36, 0x39, 0x5e, 0x4e, 0x90, 0x04, 0xac, 0x9a, 0x4b, 0x38, 0x22, 0x3f, 0x8a, 0x39, 0x29, 0x53, 0x16, 0x7b, 0xee, 0x9c, 0xb0, 0x8d, 0x5b, 0xb1, 0xa5, 0x57, 0x45, 0x5c, 0xa2, 0xa0, 0xe7, 0x43, 0xca, 0xd3, 0x8f, 0xc7, 0x06, 0x02, 0x97, 0x2d, 0x9c, 0x2b, 0x97, 0xfb, 0x04, 0xba, 0xd9, 0xa5, 0xf7, 0x50, 0x0d, 0x69, 0xc8, 0xc3, 0x3e, 0x78, 0xf7, 0x66, 0x05, 0x56, 0x04, 0x8a, 0xfd, 0x83, 0x81, 0x44, 0x76, 0x5b, 0x6b, 0x71, 0x6e, 0x3b, 0xba, 0xf8, 0xbd, 0xe5, 0x37, 0x4f, 0x8f, 0x26, 0x8e, 0x41, 0x17, 0xb6, 0xa4, 0xee, 0x82, 0x5f, 0x2a ],
- const [ 0xaf, 0x08, 0x30, 0x54, 0x84, 0xd0, 0x46, 0x08, 0xc4, 0x3a, 0xc5, 0x8d, 0x68, 0xed, 0x0b, 0xdb, 0x5d, 0xb6, 0x04, 0x41, 0x84, 0x79, 0x4a, 0xf8, 0xfd, 0x6e, 0x90, 0xfe, 0xa5, 0x89, 0x40, 0x21, 0xdd, 0x3a, 0x63, 0x5a, 0x8e, 0x57, 0xc2, 0x5d, 0x6a, 0x57, 0x4a, 0x6e, 0x74, 0xc0, 0xb5, 0x76, 0xc2, 0xe2, 0x67, 0x56, 0x81, 0xc6, 0x96, 0x7b, 0x3b, 0x62, 0xae, 0xb3, 0x55, 0x0e, 0xf4, 0x3f, 0xdc, 0x3c, 0x69, 0x29, 0x81, 0x63, 0xf1, 0xd8, 0xe1, 0x3c, 0xb4, 0xe1, 0x0a, 0x31, 0xc5, 0x20, 0x3b, 0x13, 0x02, 0x08, 0xec, 0x0b, 0x3b, 0x37, 0x0e, 0xd3, 0x96, 0x4d, 0x94, 0x25, 0x31, 0xff, 0x32, 0x74, 0x0a, 0x67, 0x65, 0xdb, 0x1c, 0x9e, 0xb3, 0x53, 0xcb, 0x8d, 0x34, 0x28, 0x82, 0x00, 0x51, 0xae, 0x9b, 0xfc, 0xcc, 0x30, 0x7f, 0x53, 0x01, 0x29, 0x0e, 0x75, 0x6b, 0xb6, 0x41, 0x89, 0x69, 0x4c, 0x0d, 0xbd, 0x42, 0xa6, 0x8b, 0xda, 0x67, 0x02, 0x57, 0x1b, 0xf9, 0x8d, 0x36, 0x3f, 0x8b, 0x1c, 0xfb, 0xdd, 0x29, 0x1c, 0xab, 0xf8, 0x99, 0xcc, 0xdf, 0xd3, 0xe0, 0xaa, 0x6a, 0x06, 0x09, 0x2a, 0x3c, 0xd2, 0x21, 0xae, 0x86, 0xb2, 0x86, 0xb3, 0x1f, 0x32, 0x62, 0x48, 0x27, 0x04, 0x72, 0xc5, 0xea, 0x51, 0x0c, 0xb9, 0x06, 0x4d, 0x60, 0x24, 0xd1, 0x0e, 0xfe, 0xe7, 0xf5, 0x9e, 0x98, 0x78, 0x5d, 0x4f, 0x09, 0xda, 0x55, 0x4e, 0x97, 0xcd, 0xec, 0x7b, 0x75, 0x42, 0x9d, 0x78, 0x8c, 0x11, 0x2f, 0x00, 0x7c, 0xee, 0xda, 0x7b, 0xdd, 0x9a, 0xab, 0xcf, 0xca, 0x56, 0x2a, 0x78, 0xa0, 0x9d, 0x39, 0xdb, 0x03, 0x12, 0x3f, 0xd7, 0x22, 0xb8, 0x86, 0x9e, 0x3c, 0x61, 0xe2, 0xc3, 0x64, 0x69, 0x94, 0x94, 0x81, 0xa3, 0x6d, 0xa9, 0x98, 0x94, 0x37, 0xbd, 0x4e, 0xdf, 0x50, 0xbd, 0xa8, 0x01, 0x98, 0x1f, 0x16, 0x3e, 0x8d, 0x75, 0xb0, 0xdb, 0xb5, 0x42, 0xbf, 0x8e, 0x3d, 0x0c, 0x7f, 0x33, 0xdf, 0xb2, 0x23, 0xc0, 0x09, 0x00, 0x1a, 0x7b, 0x3b, 0x81, 0x91, 0x6b, 0xb0, 0x94, 0x39, 0x0c, 0x42, 0xc2, 0x4a, 0x47, 0x88, 0x4f, 0xc8, 0xa0, 0x41, 0x0f, 0x05, 0xb2, 0xf5, 0x7b, 0x67, 0xd8, 0xd9, 0x04, 0x6b, 0x2e, 0xf4, 0xa8, 0xea, 0xb8, 0x80, 0xc2, 0x9b, 0xe0, 0x93, 0x26, 0xda, 0x26, 0xfe, 0x6d, 0xa7, 0x13, 0x75, 0x8e, 0xf2, 0x6e, 0xf1, 0xaf, 0x16, 0xb3, 0x53, 0x3a, 0xa3, 0xc1, 0x4a, 0x32, 0x60, 0xd3, 0x76, 0xc8, 0x90, 0xb1, 0xce, 0x29, 0x75, 0x28, 0x3f, 0x9b, 0x13, 0xb7, 0x95, 0xc8, 0x36, 0x8b, 0x9f, 0x59, 0xb6, 0xae, 0x8e, 0xc7, 0xfa, 0x7b, 0x9f, 0x6e, 0xbb, 0x55, 0xfa, 0xe4, 0x0a, 0x98, 0xd9, 0x88, 0x95, 0xd0, 0xec, 0x5e, 0x26, 0x29, 0xfd, 0x1a, 0x6c, 0x27, 0xd0, 0x7a, 0xfe, 0x97, 0x4d, 0xd9, 0x9d, 0xc6, 0xe0, 0x02, 0xb9, 0xf0, 0x21, 0x42, 0x37, 0xfb, 0xb0, 0xc1, 0x72, 0x65, 0x63, 0x11, 0x80, 0x7c, 0xa4, 0x08, 0xb6, 0xcd, 0x14, 0xcb, 0x6e, 0xde, 0x75, 0x2c, 0x07, 0x20, 0xc6, 0x36, 0x2e, 0x1f, 0xaf, 0x05, 0x5c, 0xfc, 0x20, 0xdc, 0xa0, 0x1d, 0x36, 0x71, 0x9f, 0x23, 0x5e, 0x8b, 0xd9, 0x1c, 0xbc, 0xcf, 0x2e, 0xfa, 0xce, 0xd7, 0xa0, 0x45, 0x4c, 0x85, 0x5a, 0x0c, 0x53, 0x97, 0xf2, 0x21, 0xc3, 0x7b, 0xeb, 0x86, 0xe6, 0x64, 0x7e, 0x22, 0x52, 0x9d, 0x99, 0xb8, 0x10, 0x1e, 0x29, 0x1a, 0xfd, 0x5d, 0x95, 0x9a, 0x71, 0x66, 0x8a, 0xc2, 0x1f, 0x2e, 0xfe, 0x45, 0x3c, 0x24, 0x6f, 0x34, 0xe4, 0x0a, 0x6c, 0x75, 0xb9, 0x03, 0x57, 0x72, 0xcd, 0xed, 0x69, 0x0e, 0xc2, 0xf0, 0xf6, 0xdd, 0x2f, 0x57, 0xf3, 0x94, 0x46, 0x9f, 0xb5, 0xbe, 0xb4, 0xce, 0xfb, 0xb1, 0xc9, 0x07, 0x2f, 0xc1, 0xd9, 0x5a, 0xe9, 0xb3, 0xe2, 0xe0, 0xb5, 0x75, 0x6e, 0x08, 0x16, 0x0c, 0xbb, 0x2c, 0xcb, 0xcd, 0x1a, 0x68, 0x50, 0xd0, 0x95, 0xab, 0xa8, 0xa2, 0xd4, 0x0e, 0x5a, 0x3a, 0x42, 0x65, 0xba, 0x2e, 0x6b, 0x14, 0x69, 0x27, 0xa8, 0x25, 0x1f, 0x93, 0xff, 0x97, 0xa8, 0x99, 0x45, 0xf8, 0x2d, 0x52, 0x85, 0x36, 0xb5, 0x36, 0xa6, 0xb2, 0xeb, 0xd4, 0x47, 0x96, 0x22, 0xc7, 0xee, 0x69, 0x96, 0xe5, 0x62, 0xe0, 0xf5, 0xb9, 0x55, 0xf7, 0x1e, 0x34, 0x46, 0x41, 0x28, 0x9f, 0xa6, 0x7c, 0xa6, 0xd4, 0x3a, 0x69, 0x29, 0xae, 0xc0, 0xdb, 0x07, 0xbe, 0xd5, 0x0d, 0x5b, 0x3f, 0x16, 0x38, 0x4d, 0x4c, 0x86, 0x65, 0x94, 0x51, 0x30, 0x80, 0x39, 0xc0, 0x0d, 0xaf, 0x9d, 0x05, 0x27, 0xe2, 0xbd, 0xbb, 0xff, 0xaa, 0xb5, 0x20, 0x2c, 0x4e, 0x83, 0xc6, 0x46, 0x1c, 0x0e, 0x8c, 0x02, 0xfd, 0x67, 0xcd, 0x9e, 0x4c, 0x4e, 0xd7, 0x80, 0xe8, 0xf8, 0x9f, 0x1a, 0x88, 0x0f, 0xb3, 0x10, 0x4f, 0xfb, 0x6f, 0x9d, 0xa1, 0x60, 0x74, 0x33, 0x34, 0xe7, 0x56, 0x61, 0x6a, 0x42, 0x95, 0xfa, 0xde, 0x6a, 0xcf, 0x74, 0x3c, 0x2b, 0x33, 0x8e, 0x57, 0xe3, 0x39, 0x35, 0x75, 0x87, 0x90, 0xa9, 0xed, 0xe6, 0x58, 0xdc, 0xf5, 0x32, 0x92, 0x1b, 0xb5, 0xbc, 0xd5, 0xef, 0xa0, 0xff, 0x42, 0x46, 0x03, 0xe0, 0xba, 0xce, 0xde, 0x34, 0x4e, 0xa2, 0xf4, 0x83, 0xf6, 0x28, 0x1e, 0x0b, 0x86, 0x39, 0xe4, 0x08, 0xdf, 0x83, 0x4e, 0x33, 0x62, 0x2c, 0xf8, 0x89, 0xab, 0xb8, 0x65, 0x4d, 0x7b, 0x2d, 0x95, 0x50, 0xf5, 0x75, 0xda, 0x70, 0x0e, 0x03, 0xe7, 0x5f, 0x3f, 0xba, 0x2a, 0xa6, 0x7c, 0x0a, 0x5c, 0xe9, 0x6a, 0x5c, 0x56, 0x6c, 0xcd, 0xb0, 0x26, 0xd6, 0x3f, 0x84, 0x62, 0x35, 0x28, 0xf8, 0xbc, 0x43, 0xea, 0x31, 0xd7, 0xe8, 0x5c, 0xfb, 0x59, 0xff, 0x7a, 0xb2, 0x42, 0x5d, 0x5b, 0x62, 0x7c, 0x0f, 0x63, 0x2d, 0xb2, 0xe4, 0xb9, 0xed, 0x66, 0x2c, 0xfb, 0x1b, 0x3e, 0xbe, 0x31, 0xf0, 0x9f, 0x40, 0x00, 0xc9, 0x7d, 0xa2, 0x21, 0xd0, 0x72, 0xec, 0x11, 0xd9, 0x0d, 0x3a, 0x09, 0x8a, 0x6c, 0x04, 0x30, 0xbf, 0x0d, 0xa3, 0x10, 0x2c, 0xe1, 0x11, 0x46, 0x45, 0xa2, 0xf1, 0x7e, 0x5a, 0x67, 0xcf, 0x9f, 0x07, 0x76, 0xa8, 0x43, 0xcb, 0x59, 0xad, 0x6a, 0xf7, 0x34, 0x44, 0x6f, 0xca, 0x55, 0x50, 0x3b, 0xda, 0x0d, 0xb2, 0xb8, 0xb5, 0xbe, 0x10, 0x88, 0xc9, 0x36, 0xd4, 0xf8, 0x81, 0x3b, 0x78, 0x2f, 0xb1, 0x67, 0x02, 0xac, 0x34, 0x37, 0xca, 0xef, 0xd4, 0x5e, 0x83, 0x75, 0x69, 0x5f, 0x79, 0xea, 0x45, 0x5a, 0x18, 0x9b, 0xd0, 0x26, 0xae, 0x2a, 0x70, 0xa1, 0x72, 0x85, 0xac, 0x44, 0xc4, 0x18, 0x90, 0xfb, 0xb6, 0x42, 0x53, 0x33, 0xcc, 0x06, 0x37, 0x34, 0x00, 0x04, 0xb1, 0xb1, 0x09, 0xa7, 0xca, 0x9d, 0xdd, 0x9f, 0xc5, 0x41, 0x75, 0x92, 0x02, 0x8c, 0xd0, 0x0e, 0x22, 0xaa, 0x3a, 0xc3, 0x6c, 0xd8, 0xce, 0xef, 0x6f, 0x76, 0x3a, 0x19, 0xe9, 0x5d, 0xc2, 0x02, 0xe8, 0x74, 0x88, 0xd9, 0x2f, 0x7e, 0x0a, 0xae, 0xdb, 0x36, 0xec, 0x29, 0x47, 0x9e, 0xf8, 0x7c, 0x2c, 0x94, 0x63, 0x96, 0x0d, 0xa6, 0x51, 0x99, 0xd2, 0x27, 0x9c, 0x8f, 0xb3, 0x82, 0xd1, 0x59, 0x57, 0xcf, 0x7c, 0xe7, 0x3d, 0xa4, 0xa6, 0xaf, 0x5c, 0x2e, 0x9b, 0x57, 0x06, 0x80, 0xf1, 0xb5, 0x12, 0x2a, 0xc5, 0xfa, 0x3a, 0x0e, 0x48, 0x2a, 0xc2, 0x6f, 0x7b, 0xd0, 0x5b, 0x4b, 0x36, 0xef, 0x46, 0xeb, 0x6f, 0x3b, 0xbc, 0xb8, 0xb9, 0x89, 0x8e, 0x50, 0x0b, 0x85, 0x09, 0xd9, 0xc3, 0xa3, 0x1c, 0x96, 0xea, 0x58, 0xbd, 0xb7, 0xba, 0x89, 0x88, 0x76, 0x5d, 0x44, 0xa9, 0x5f, 0xf8, 0xae, 0xfd, 0xef, 0xe8, 0x3c, 0x74, 0x61, 0x4c, 0x26, 0xba, 0xc5, 0xc3, 0x19, 0x16, 0x52, 0x77, 0x2d, 0x92, 0xfd, 0x5a, 0x16, 0x5c, 0x4b, 0xaf, 0x9e, 0x6c, 0x63, 0xcd, 0x53, 0x67, 0x67, 0x1f, 0x7c, 0xc3, 0x04, 0x70, 0x52, 0x2d, 0x48, 0x65, 0x6d, 0x27, 0xb4, 0x4b, 0x7d, 0xf6, 0x93, 0x13, 0x3a, 0xbb, 0x8a, 0x9b, 0x9e, 0xe0, 0x6f, 0x30, 0x51, 0xb5, 0x5e, 0x50, 0x65, 0x5b, 0x0a, 0xb4, 0x43, 0xe2, 0x52, 0x8e, 0xe5, 0xae, 0x15, 0x0f, 0x46, 0x1f, 0x46, 0x2c, 0x17, 0x71, 0x43, 0xa2, 0xb4, 0xe0, 0x62, 0x37, 0x56, 0x10, 0xcd, 0x43, 0x8a, 0xad, 0x91, 0x70, 0xe2, 0x4e, 0xf1, 0xbe, 0xea, 0xa0, 0x00, 0xca, 0x5d, 0xc0, 0x6f, 0x4f, 0x99, 0xe8, 0xa3, 0xed, 0x51, 0x4e, 0x0a, 0x29, 0x82, 0x49, 0xb0, 0xb6, 0xa8, 0xb6, 0x0d, 0xf3, 0x31, 0x9a, 0x22, 0xb4, 0x32, 0x09, 0xc4, 0x45, 0x59, 0x46, 0x37, 0xac, 0x23, 0x2b, 0xfe, 0x2f, 0x4e, 0xcb, 0xf2, 0x16, 0x92, 0x57, 0x92, 0xb2, 0x8c, 0x3e, 0x9a, 0x9e, 0xfb, 0x98, 0xd7, 0x45, 0x2e, 0xc5, 0x39, 0xa4, 0xbd, 0x51, 0x2a, 0x52, 0x78, 0x1b, 0x1e, 0xbd, 0x9d, 0xb7, 0x6b, 0xb6, 0x4e, 0x10, 0x5c, 0x30, 0x41, 0x52, 0x80, 0x44, 0xba, 0x07, 0x48, 0x79, 0xb6, 0x80, 0xd1, 0x43, 0x69, 0x76, 0xff, 0xc9, 0xeb, 0xf1, 0xcb, 0xeb, 0x2f, 0x69, 0xde, 0x84, 0x34, 0x2b, 0x5e, 0xec, 0x7f, 0xff, 0x08, 0xc2, 0xc8, 0x08, 0x7f, 0xe8, 0xf4, 0xeb, 0xe3, 0xce, 0x43, 0x34, 0xa6, 0xf4, 0xcb, 0xf5, 0x9b, 0xaa, 0x25, 0xaf, 0x50, 0x1b, 0x66, 0x76, 0x9e, 0x89, 0x50, 0x51, 0x7e, 0xda, 0xca, 0xe0, 0x1e, 0x54, 0x8e, 0x41, 0x35, 0xa5, 0x22, 0x33, 0x93, 0x26, 0x09, 0x7c, 0xfc, 0x60, 0x3a, 0x89, 0x36, 0xd0, 0xd1, 0x55, 0x61, 0xe7, 0x05, 0x8c, 0x87, 0x55, 0x5a, 0xef, 0x74, 0x87, 0x17, 0xfa, 0xc8, 0x6e, 0xfb, 0xc4, 0x4a, 0x83, 0x2c, 0x28, 0x7f, 0x08, 0x70, 0x22, 0x7c, 0x90, 0x9f, 0x7b, 0xf8, 0xc1, 0x59, 0xa9, 0xa5, 0x59, 0xf4, 0xf1, 0xc1, 0x6f, 0xb8, 0xce, 0xe7, 0xfc, 0x4f, 0x96, 0x2c, 0x99, 0x77, 0x5b, 0x67, 0x8a, 0xfa, 0x0f, 0xd0, 0xfc, 0xe0, 0xec, 0xcd, 0x8b, 0xe3, 0x13, 0x08, 0x07, 0x23, 0x74, 0xc5, 0x78, 0x1b, 0xed, 0x73, 0x5f, 0xd4, 0xb6, 0x80, 0x3f, 0x58, 0xfc, 0x72, 0x5c, 0x6a, 0xcc, 0x34, 0xc3, 0x74, 0x33, 0xad, 0x8a, 0xc1, 0xa4, 0x97, 0x59, 0xec, 0x99, 0x8f, 0x2a, 0x99, 0x7d, 0x68, 0x4c, 0x62, 0xca, 0xc5, 0xae, 0x15, 0x6f, 0xe7, 0x5a, 0x1c, 0x74, 0xc3, 0x40, 0x3c, 0xe0, 0x58, 0x35, 0x83, 0xdb, 0x3f, 0x3b, 0x7b, 0x10, 0x84, 0x03, 0xa4, 0x55, 0xb4, 0xb0, 0x21, 0x8e, 0x37, 0xde, 0xb2, 0xce, 0xe0, 0xe3, 0xe2, 0xc0, 0xc3, 0x54, 0x82, 0x46, 0x47, 0xcc, 0x55, 0x5f, 0x7c, 0xe8, 0x0d, 0x4e, 0xae, 0x96, 0x76, 0xf9, 0x3a, 0x90, 0xf2, 0x8f, 0xa0, 0x23, 0x25, 0x6d, 0xda, 0x35, 0xf1, 0x43, 0xec, 0x86, 0xa5, 0x72, 0xbd, 0x36, 0x71, 0xb9, 0x25, 0x88, 0x1e, 0x11, 0x47, 0xe5, 0xfb, 0xd5, 0x21, 0x24, 0x1b, 0x26, 0x61, 0x08, 0xbd, 0x8e, 0x7a, 0x0a, 0x0c, 0xe3, 0xf8, 0x59, 0x09, 0x6f, 0x10, 0x20, 0xc5, 0x4d, 0x7c, 0x07, 0xd3, 0x16, 0x86, 0xfc, 0xfd, 0xbe, 0x62, 0x33, 0x36, 0xb8, 0xc0, 0x6b, 0xd0, 0x61, 0xa2, 0x74, 0xef, 0x9b, 0x6b, 0xee, 0x3e, 0xb8, 0x39, 0x53, 0xe0, 0x9b, 0x75, 0x38, 0xaa, 0x19, 0xa9, 0xcf, 0x8f, 0xa5, 0x91, 0xb1, 0x5b, 0x2d, 0x74, 0xda, 0xa5, 0x3f, 0xb4, 0xf5, 0xfe, 0x70, 0xa5, 0xdb, 0x6f, 0xfe, 0x9b, 0x56, 0x23, 0xb4, 0x47, 0x2a, 0x60, 0x0e, 0x43, 0x56, 0xbc, 0x9e, 0xeb, 0x97, 0x8d, 0xae, 0x6f, 0x2e, 0xa1, 0x27, 0x26, 0xe3, 0x2f, 0xb2, 0x25, 0x4a, 0x0e, 0x1c, 0x11, 0x45, 0x25, 0xff, 0x31, 0xca, 0x23, 0x9f, 0xc7, 0xe6, 0x70, 0x12, 0xa1, 0x02, 0x63, 0xa4, 0xeb, 0x66, 0xb5, 0x79, 0x47, 0xfb, 0x35, 0x74, 0x20, 0x55, 0xbe, 0x58, 0x3a, 0xf0, 0x66, 0x2d, 0x8e, 0xba, 0xf9, 0xe6, 0x56, 0xd2, 0xa6, 0x40, 0x64, 0x90, 0xf7, 0xed, 0xb7, 0xc5, 0x07, 0xf2, 0x50, 0x44, 0xef, 0x4e, 0x42, 0xa1, 0x81, 0xdc, 0x09, 0x38, 0x39, 0x7a, 0x1c, 0x71, 0x70, 0x6b, 0xc6, 0x43, 0xd3, 0xfa, 0x31, 0xf7, 0x14, 0x60, 0xc4, 0x2f, 0xdf, 0xe8, 0xae, 0x26, 0x10, 0x51, 0xc3, 0x39, 0x23, 0x74, 0x88, 0xa7, 0xeb, 0x27, 0x89, 0x95, 0x87, 0x60, 0xf3, 0x55, 0x93, 0x9e, 0x5e, 0xe7, 0x9b, 0x84, 0xeb, 0xc0, 0xd5, 0xc7, 0x8f, 0xcb, 0x0f, 0x4b, 0xae, 0xae, 0xe6, 0x89, 0xec, 0x4e, 0x39, 0x34, 0x40, 0x95, 0xdd, 0x1c, 0x4a, 0x73, 0x92, 0x52, 0xe6, 0x22, 0x36, 0x8d, 0x01, 0xaf, 0x39, 0xcc, 0xab, 0xb6, 0x51, 0x3d, 0x6e, 0x6d, 0x6f, 0x5e, 0xde, 0xe3, 0xf1, 0x62, 0x72, 0x8a, 0x19, 0xd6, 0x92, 0xf4, 0xbe, 0x84, 0xf1, 0xda, 0x41, 0x98, 0x1d, 0x62, 0xc3, 0x01, 0x55, 0xa1, 0x95, 0x1a, 0x9a, 0x5f, 0xf0, 0x8a, 0x08, 0x1b, 0xe7, 0x69, 0x67, 0x4f, 0x99, 0xa4, 0xfe, 0xf6, 0xab, 0xa2, 0xa7, 0x4a, 0xf6, 0x27, 0x29, 0xd2, 0x7c, 0x79, 0xc1, 0x9c, 0xa1, 0xc2, 0x02, 0xc8, 0x98, 0xb6, 0xe0, 0x46, 0x1b, 0x75, 0x07, 0xdf, 0x5f, 0xb3, 0x71, 0x7a, 0x47, 0x16, 0x37, 0x98, 0xd8, 0xdf, 0xa7, 0x22, 0xed, 0xcd, 0x98, 0x64, 0x2b, 0x3e, 0xfa, 0x59, 0x38, 0x98, 0xb1, 0x29, 0x28, 0xe7, 0xa4, 0xf0, 0x38, 0xc8, 0x10, 0xc1, 0xbf, 0x85, 0x23, 0xeb, 0x61, 0x81, 0xc6, 0x7a, 0x86, 0xd7, 0xba, 0x01, 0x0a, 0x3e, 0xe6, 0x97, 0x37, 0x30, 0xef, 0x20, 0xf0, 0x4b, 0x0a, 0xce, 0x2e, 0xf7, 0x0e, 0xe7, 0xb1, 0x49, 0xce, 0xc8, 0xef, 0x27, 0xa5, 0x2a, 0x51, 0xad, 0x52, 0xa4, 0x9e, 0xd0, 0x06, 0x71, 0xb7, 0x41, 0xbc, 0x74, 0x86, 0x94, 0xc9, 0x79, 0x31, 0xa2, 0xb4, 0xbe, 0x93, 0x2c, 0x47, 0xb2, 0xec, 0xc1, 0xe6, 0xfc, 0xd7, 0xe1, 0x20, 0xbf, 0x7d, 0x62, 0x84, 0x1c, 0x09, 0x13, 0xb6, 0xf9, 0x5c, 0xa0, 0xc2, 0x01, 0x01, 0xb5, 0xaf, 0xec, 0x63, 0x66, 0x58, 0x01, 0x3d, 0xcf, 0x77, 0xd9, 0x53, 0xf7, 0x03, 0x65, 0x60, 0xfb, 0xbc, 0x33, 0x4f, 0x68, 0x04, 0xec, 0xad, 0xe8, 0xf0, 0x22, 0x5f, 0x21, 0x9f, 0x48, 0x90, 0xda, 0xca, 0x02, 0xee, 0x5f, 0x9d, 0xa0, 0x16, 0x27, 0xc5, 0xe4, 0x4c, 0xb5, 0xcb, 0x0c, 0x70, 0xbc, 0xa0, 0x0c, 0x2d, 0x86, 0x79, 0x1c, 0x74, 0x96, 0xdc, 0x72, 0x29, 0x8d, 0xfb, 0x51, 0x1c, 0x4a, 0x42, 0x42, 0x3a, 0x55, 0x2c, 0xa2, 0x05, 0x7e, 0x5a, 0x5c, 0x41, 0xc1, 0xe6, 0xf8, 0xf0, 0x6d, 0xf5, 0xd5, 0x81, 0x86, 0x8b, 0xb2, 0x45, 0x67, 0xa4, 0x73, 0x22, 0xab, 0x80, 0x22, 0x8b, 0x4e, 0x3e, 0x35, 0xaf, 0x10, 0xac, 0x0f, 0xf1, 0x1a, 0x5e, 0xc9, 0x99, 0xe4, 0xfd, 0x31, 0xc9, 0x56, 0xe2, 0x13, 0xb2, 0x2e, 0xe3, 0xb8, 0x07, 0xa1, 0x6d, 0xad, 0xb2, 0x45, 0xd4, 0xc5, 0xc7, 0x2e, 0xe6, 0x61, 0xb6, 0x57, 0xc6, 0xef, 0xc4, 0x44, 0xf8, 0xb1, 0xbc, 0xe6, 0xb8, 0xc0, 0xe1, 0xbf, 0x90, 0x50, 0x28, 0x47, 0x29, 0x35, 0xa4, 0x8d, 0x62, 0xa7, 0x42, 0x21, 0x9f, 0x42, 0xb6, 0x32, 0x63, 0x50, 0xb5, 0xf4, 0x22, 0x4b, 0x65, 0x44, 0x50, 0x9e, 0x12, 0x8f, 0xbe, 0xac, 0x22, 0xf0, 0x26, 0x13, 0x4b, 0x98, 0x05, 0x32, 0x03, 0x73, 0xa8, 0xe9, 0x38, 0x09, 0x8a, 0x9f, 0x42, 0xa2, 0xdd, 0x8a, 0x16, 0xad, 0x67, 0x2a, 0xbc, 0x62, 0x8f, 0x17, 0x03, 0xa7, 0xb8, 0xfd, 0x73, 0x30, 0xcd, 0xe5, 0x83, 0xeb, 0x1d, 0xb6, 0x0c, 0x9b, 0x6a, 0xfb, 0xfe, 0xc2, 0x3c, 0xe6, 0x52, 0xc5, 0x7b, 0x95, 0x3f, 0x4b, 0x3d, 0x95, 0xb1, 0xe6, 0xdd, 0xa5, 0xf7, 0xf5, 0x4d, 0xbc, 0xbb, 0xc9, 0xad, 0x4d, 0x38, 0x06, 0x1c, 0xc9, 0xa7, 0x4c, 0xce, 0x66, 0xfa, 0x17, 0x5e, 0x1f, 0xcd, 0xe4, 0x66, 0xfb, 0x9a, 0x96, 0x4e, 0x93, 0x2c, 0x17, 0x61, 0xce, 0x56, 0x42, 0x26, 0xf0, 0xe4, 0x01, 0xed, 0xd3, 0xd2, 0xb2, 0xa8, 0x73, 0xbc, 0xd0, 0xfc, 0xb1, 0x96, 0xcf, 0x98, 0x50, 0x9d, 0x47, 0xc6, 0x44, 0x8d, 0x55, 0x3f, 0x2c, 0x15, 0x3f, 0x44, 0x1d, 0x88, 0x56, 0xea, 0xa1, 0xd5, 0x21, 0xb6, 0xff, 0xb9, 0xb7, 0x69, 0xbd, 0x33, 0x6d, 0x1d, 0x64, 0x39, 0xb1, 0x91, 0x83, 0xa9, 0x36, 0xc2, 0xf6, 0x82, 0x52, 0xbb, 0x68, 0x54, 0xa4, 0xad, 0x17, 0xf5, 0xf9, 0x42, 0xd7, 0x76, 0x70, 0x2f, 0x5a, 0x55, 0xdd, 0x09, 0xae, 0xf4, 0x6c, 0x59, 0x07, 0x4a, 0x87, 0xf2, 0xbf, 0xd9, 0xf9, 0x82, 0x9b, 0xe0, 0x53, 0x68, 0x50, 0xd1, 0x8e, 0xc5, 0x46, 0x05, 0xf3, 0xd6, 0x9b, 0xaf, 0x38, 0x81, 0x6b, 0x0f, 0xec, 0x2d, 0x4f, 0xe8, 0x15, 0xd7, 0x23, 0x33, 0x17, 0x62, 0x0d, 0x15, 0xd7, 0x2f, 0xba, 0x0f, 0x21, 0xee, 0xeb, 0x75, 0x47, 0xb4, 0x31, 0x21, 0x0b, 0x4d, 0xf4, 0x68, 0xbf, 0xd3, 0xba, 0x4d, 0xab, 0x7f, 0xa6, 0xf5, 0xaf, 0xc0, 0x3f, 0x5b, 0x2a, 0x8a, 0x74, 0x45, 0x1a, 0xf1, 0xdc, 0x77, 0x84, 0xf6, 0x42, 0x26, 0x16, 0xa1, 0x60, 0xaf, 0x0b, 0x50, 0xeb, 0x89, 0x4f, 0x4e, 0xd0, 0x78, 0xe3, 0xa7, 0xbe, 0x04, 0x84, 0x3b, 0xe4, 0x2a, 0x87, 0x12, 0xfc, 0x51, 0x08, 0xef, 0x88, 0x80, 0x43, 0x28, 0x5b, 0xcd, 0x42, 0xb4, 0x5c, 0x19, 0xb9, 0x86, 0x87, 0xfa, 0x2e, 0x19, 0x34, 0xf9, 0x5c, 0x4d, 0x9c, 0xfe, 0xda, 0x71, 0x99, 0x08, 0xf8, 0xa1, 0xad, 0x21, 0xea, 0x52, 0x46, 0x92, 0x28, 0x2b, 0x40, 0x53, 0x14, 0x17, 0xac, 0xc5, 0xdd, 0x98, 0xd0, 0xa3, 0xa4, 0x5e, 0x6e, 0x36, 0xde, 0x18, 0x4a, 0xc9, 0xfa, 0x8a, 0xe6, 0x5d, 0x43, 0xdf, 0x90, 0x9e, 0x07, 0x41, 0x9e, 0x15, 0xf9, 0xa8, 0xf9, 0x9e, 0xd4, 0xef, 0xd8, 0x1d, 0x41, 0x2d, 0xce, 0x6d, 0xfb, 0x42, 0x07, 0x99, 0x31, 0xb0, 0xcf, 0x4f, 0x2c, 0xad, 0x53, 0x91, 0x31, 0x76, 0xac, 0xae, 0xa9, 0xe5, 0x19, 0x71, 0x7f, 0x46, 0x8c, 0x98, 0xca, 0x67, 0x69, 0x87, 0xac, 0xee, 0x8a, 0x3e, 0x79, 0xef, 0x86, 0x89, 0x1c, 0xbe, 0x33, 0x76, 0xb7, 0x02, 0x69, 0x0c, 0x8a, 0x0b, 0x09, 0x3a, 0x16, 0x66, 0x3e, 0x0e, 0x82, 0xae, 0x03, 0x28, 0x3d, 0xa4, 0xe6, 0x6d, 0xe5, 0x82, 0x0b, 0x00, 0x68, 0x8d, 0x73, 0x6e, 0x69, 0xea, 0x7e, 0x28, 0xe5, 0xb2, 0xaf, 0x37, 0x16, 0x49, 0xb0, 0x2b, 0x97, 0xeb, 0x96, 0x54, 0xca, 0x87, 0x65, 0x35, 0x77, 0xd1, 0xd7, 0x36, 0xb5, 0x93, 0x59, 0x99, 0x0e, 0x43, 0x57, 0xaf, 0xde, 0xdb, 0xb9, 0x4c, 0xfc, 0xe5, 0xae, 0x78, 0x9c, 0xd5, 0xa8, 0x67, 0x74, 0x9c, 0xa8, 0xac, 0x1e, 0x7a, 0xbb, 0xa9, 0xbe, 0x14, 0xc4, 0x4a, 0xe4, 0xc6, 0x7d, 0xf3, 0xb4, 0x3a, 0xb9, 0xb6, 0x44, 0x3a, 0xec, 0xca, 0x45, 0xc2, 0xec, 0x38, 0xe6, 0x5a, 0xf9, 0xd8, 0xf5, 0xa2, 0xfc, 0x7c, 0x47, 0x2f, 0x0c, 0x6b, 0x5b, 0x95, 0x36, 0x11, 0x3a, 0xc5, 0x7e, 0xf4, 0xa1, 0x9a, 0x21, 0xea, 0x62, 0xae, 0x1d, 0x8a, 0x08, 0x72, 0xf3, 0xe0, 0xba, 0x7e, 0xac, 0x65, 0x62, 0x25, 0x1a, 0x2d, 0x0e, 0x4d, 0x60, 0x63, 0x96, 0x7d, 0xb5, 0xf3, 0x7f, 0x38, 0x64, 0x86, 0x1f, 0x8a, 0x17, 0xb3, 0x02, 0xe0, 0x56, 0x73, 0x8d, 0x1d, 0x4b, 0xd6, 0xe1, 0xe9, 0xc8, 0xf5, 0x02, 0x4c, 0x8b, 0x28, 0x39, 0x7d, 0xc0, 0x79, 0xb6, 0xf4, 0xc7, 0x58, 0x7a, 0xc6, 0x38, 0x90, 0x74, 0x32, 0x24, 0x79, 0xea, 0x77, 0x9e, 0x6f, 0x1b, 0xe9, 0x7a, 0x84, 0x23, 0x44, 0x55, 0x72, 0x1e, 0x40, 0xd6, 0xd4, 0x90, 0x66, 0x32, 0x95, 0x05, 0x21, 0xf6, 0xa8, 0xf4, 0x18, 0x01, 0xf9, 0xe9, 0xbb, 0xcf, 0xa4, 0xe3, 0x1c, 0xfe, 0x66, 0xfb, 0x01, 0x0a, 0x50, 0x47, 0x37, 0x5c, 0xc3, 0xfe, 0x29, 0x83, 0x98, 0xdd, 0xb1, 0xc1, 0x9f, 0xc9, 0x2d, 0xc9, 0x4b, 0xb5, 0xd6, 0xc7, 0xab, 0xc6, 0x4d, 0xa1, 0x9c, 0xb5, 0x77, 0x7c, 0x3e, 0x76, 0x8b, 0x83, 0xa4, 0x17, 0x69, 0xe3, 0xd0, 0xea, 0x2e, 0x1a, 0xde, 0xe6, 0x05, 0x72, 0x7f, 0x4b, 0x40, 0xc8, 0xa9, 0x85, 0xa7, 0x92, 0x8d, 0x53, 0x0f, 0x21, 0xca, 0x28, 0x2f, 0x23, 0xe0, 0xd2, 0xb0, 0x6b, 0xe7, 0x59, 0x83, 0xf5, 0x81, 0x2a, 0x77, 0x24, 0x0d, 0x74, 0x0b, 0x4f, 0x1d, 0xd3, 0x80, 0x7c, 0x2a, 0x2c, 0x33, 0x6b, 0x87, 0xd8, 0x2a, 0xd7, 0x94, 0x04, 0xed, 0xf8, 0x34, 0x57, 0x97, 0x4c, 0x81, 0xd6, 0x2c, 0x97, 0xbe, 0x05, 0x2d, 0x29, 0x8c, 0x4f, 0x6a, 0x5f, 0x61, 0xa8, 0x18, 0x6c, 0x37, 0x71, 0x23, 0x59, 0x81, 0x9c, 0xc6, 0x4b, 0x63, 0x10, 0x58, 0x05, 0x22, 0x4f, 0x69, 0xad, 0xda, 0x56, 0x0d, 0xd3, 0x6f, 0xc5, 0x78, 0xaf, 0xc5, 0x3f, 0xcb, 0xaa, 0x34, 0x14, 0x2e, 0x21, 0x36, 0x1d, 0x1f, 0x65, 0x63, 0xe8, 0x09, 0x06, 0xa0, 0x15, 0x19, 0x51, 0x93, 0x00, 0x4d, 0x17, 0x5a, 0xa1, 0xce, 0xb0, 0x7c, 0xb0, 0x7f, 0x40, 0x1f, 0x0c, 0xd6, 0x39, 0x7c, 0x5d, 0xeb, 0x21, 0x91, 0xf8, 0xce, 0x96, 0x15, 0x04, 0x1e, 0x8f, 0xb1, 0xdb, 0xd7, 0xe4, 0x6d, 0xb3, 0x6c, 0x11, 0x69, 0x7e, 0x16, 0x37, 0xcd, 0x0f, 0x6b, 0x63, 0x02, 0x7d, 0x32, 0x13, 0x23, 0xcc, 0x76, 0xf6, 0xae, 0xca, 0xd9, 0xf4, 0x80, 0x38, 0x2b, 0x6e, 0x00, 0x2a, 0x3b, 0xc7, 0x9a, 0xb1, 0xed, 0x23, 0x6f, 0xb6, 0x8d, 0x6e, 0x4a, 0x29, 0x63, 0xa1, 0xd6, 0x5c, 0x88, 0x40, 0x0f, 0xa9, 0xf8, 0x27, 0xf7, 0x5b, 0xe7, 0x87, 0x8a, 0xcc, 0x59, 0x2c, 0xf3, 0xca, 0xed, 0x01, 0x00, 0x3f, 0xf9, 0xd5, 0xd4, 0x11, 0xdc, 0x5f, 0xdc, 0x48, 0x90, 0x80, 0x04, 0x6f, 0x7f, 0xc9, 0x2a, 0x3c, 0x98, 0x3d, 0xd2, 0x73, 0xa1, 0x58, 0x1c, 0x07, 0xcf, 0x50, 0xf4, 0x82, 0x94, 0x9a, 0x89, 0xa8, 0xb8, 0xb0, 0x00, 0x57, 0xab, 0x12, 0x69, 0xb2, 0x1a, 0x8a, 0xf2, 0x7f, 0xc0, 0xb5, 0x5a, 0xcc, 0x7f, 0xbf, 0xa9, 0xd9, 0xaf, 0x6e, 0x1f, 0x32, 0xb6, 0x62, 0x6a, 0x1c, 0xd8, 0x9b, 0x1c, 0x32, 0x51, 0x3b, 0x5b, 0x50, 0xa1, 0x8d, 0xda, 0xb0, 0x28, 0x47, 0x09, 0x53, 0xf2, 0x0c, 0x89, 0xa3, 0xd4, 0x35, 0xe3, 0x56, 0xb8, 0xd1, 0x79, 0x95, 0x35, 0xea, 0xbd, 0x5e, 0x63, 0x0b, 0xa0, 0x27, 0xed, 0xfe, 0x4e, 0xc4, 0x67, 0xda, 0x18, 0x8a, 0xe2, 0x3e, 0xb1, 0xb5, 0xbe, 0xd7, 0x9e, 0x07, 0xc0, 0x28, 0xe8, 0xb2, 0x64, 0x8a, 0x14, 0x78, 0x75, 0x71, 0x54, 0x11, 0xda, 0xf2, 0xff, 0xcd, 0xb3, 0x82, 0x3f, 0x7a, 0xa5, 0x01, 0x0a, 0x88, 0x71, 0xf7, 0x53, 0x6b, 0xcc, 0x1d, 0x81, 0x41, 0x6b, 0x1f, 0x20, 0xb5, 0x5d, 0xa0, 0xd6, 0x23, 0x9d, 0x7e, 0x99, 0xfd, 0xe8, 0x58, 0x20, 0x6d, 0xcc, 0x4e, 0x97, 0x3b, 0x02, 0x08, 0x97, 0xf2, 0xfd, 0xfa, 0x55, 0x3e, 0xc3, 0xe6, 0x1a, 0x99, 0xfc, 0xa2, 0xf3, 0x26, 0x48, 0x1b, 0xa9, 0xdd, 0xd6, 0x9a, 0xf3, 0xe9, 0x33, 0x46, 0xeb, 0x4e, 0x5f, 0xeb, 0xbf, 0xcf, 0x26, 0xf9, 0xa9, 0x0f, 0xad, 0xd0, 0x21, 0xf6, 0x4c, 0x3a, 0x51, 0x56, 0x9b, 0x39, 0xc9, 0xcf, 0xd0, 0x04, 0x74, 0xf0, 0x48, 0x4c, 0xca, 0x9e, 0x63, 0xc3, 0x48, 0xba, 0x95, 0xdf, 0x1d, 0xfe, 0xba, 0xdb, 0x27, 0x28, 0xaa, 0x00, 0x1d, 0x5b, 0x0e, 0x22, 0x0e, 0xc2, 0x72, 0x6d, 0x0a, 0x76, 0x9b, 0x62, 0x1f, 0xa2, 0x1a, 0x1c, 0x87, 0xe5, 0x21, 0xd8, 0x1f, 0xf7, 0x96, 0xb4, 0x1b, 0x90, 0x66, 0xb7, 0xf8, 0x85, 0x1c, 0x12, 0xb3, 0x34, 0xb2, 0xa5, 0x39, 0x23, 0xa6, 0xc5, 0x1e, 0xe4, 0x51, 0x3d, 0x91, 0x3c, 0x75, 0x92, 0x90, 0x84, 0x15, 0x8c, 0x58, 0x4e, 0x89, 0xf1, 0x20, 0x4c, 0xd1, 0x94, 0x06, 0x6e, 0x2a, 0x8e, 0x4a, 0x4b, 0xdf, 0xcc, 0xba, 0xc2, 0x62, 0xca, 0x6d, 0xe1, 0x9b, 0x9d, 0xb4, 0x05, 0x80, 0x37, 0x4e, 0x43, 0xe6, 0xe7, 0xdb, 0x07, 0x96, 0x1f, 0x93, 0xfb, 0xa4, 0x7a, 0x38, 0x2b, 0xfc, 0xfd, 0x49, 0x66, 0x3e, 0x9e, 0x79, 0xe7, 0xcc, 0x02, 0x60, 0x35, 0x21, 0x8b, 0x6f, 0x47, 0x64, 0x92, 0x29, 0xec, 0x3c, 0xf1, 0x90, 0x6a, 0xe7, 0xc5, 0xde, 0x65, 0x86, 0x72, 0x76, 0x03, 0xbb, 0xe7, 0x1a, 0x4e, 0x76, 0x23, 0x5e, 0xda, 0x0c, 0xf7, 0x5d, 0xa7, 0x8a, 0x0e, 0xaa, 0x48, 0x48, 0x2c, 0x8a, 0x45, 0xc1, 0xb3, 0x60, 0xbf, 0xa1, 0x6b, 0x68, 0x52, 0x20, 0x82, 0xa8, 0x40, 0x8f, 0xd2, 0x24, 0xcb, 0x30, 0x63, 0x52, 0xe2, 0x4b, 0x31, 0xcd, 0x00, 0x7e, 0x2f, 0x4d, 0x52, 0x55, 0x8b, 0xd7, 0x18, 0x1b, 0x34, 0x31, 0x4d, 0xef, 0x9a, 0x99, 0x8a, 0x1a, 0xb5, 0xb6, 0x28, 0x9f, 0x48, 0xcf, 0xa5, 0x14, 0x67, 0x3b, 0x48, 0xb1, 0x37, 0x19, 0x08, 0xa7, 0xf5, 0x41, 0xab, 0xb2, 0x39, 0x7a, 0x2b, 0xf2, 0x7c, 0xed, 0x5d, 0xf7, 0xd8, 0xd9, 0xd4, 0x1b, 0x10, 0x89, 0x04, 0x14, 0xd0, 0x83, 0xa3, 0xc9, 0x36, 0x03, 0x55, 0x65, 0x90, 0xa7, 0x87, 0xaa, 0x68, 0x6c, 0x9b, 0x89, 0xbe, 0xd9, 0x46, 0xef, 0x94, 0x7a, 0x37, 0xe1, 0xb0, 0x90, 0xfa, 0xcb, 0x9d, 0x07, 0x1b, 0x15, 0xf3, 0xa8, 0x8e, 0xf8, 0xd8, 0x90, 0x4e, 0x90, 0xc7, 0xe1, 0x45, 0x32, 0x90, 0xb7, 0x6c, 0xff, 0xa0, 0x5e, 0x33, 0xb9, 0x83, 0xc2, 0x23, 0xd6, 0xa7, 0x26, 0xc2, 0xd3, 0x63, 0x19, 0xb7, 0xcb, 0x37, 0xa6, 0x2e, 0x48, 0x56, 0xcc, 0x7e, 0x59, 0x61, 0x2e, 0x09, 0xe5, 0x76, 0x0a, 0x64, 0x3e, 0x69, 0x6f, 0xb9, 0xf9, 0x51, 0xab, 0x69, 0xfe, 0x47, 0x03, 0xf5, 0xdb, 0x6a, 0xa8, 0x1e, 0x5e, 0x27, 0xe6, 0x4b, 0x62, 0xb7, 0x9d, 0x2c, 0xe9, 0xe8, 0xf5, 0x9d, 0x6b, 0x21, 0x4e, 0xcd, 0x6e, 0xa0, 0x76, 0x9f, 0x57, 0x07, 0x1f, 0x50, 0x80, 0x17, 0x90, 0x5b, 0x8a, 0xbb, 0x9a, 0x99, 0xf5, 0x48, 0xce, 0xad, 0xed, 0x03, 0xed, 0x9f, 0x67, 0xe4, 0xa0, 0xc7, 0x6d, 0x99, 0x69, 0xed, 0xb6, 0xce, 0xda, 0xae, 0x7a, 0xac, 0x05, 0x21, 0x84, 0x9f, 0x33, 0xbb, 0x89, 0x5d, 0xd9, 0x70, 0xb8, 0x24, 0xc7, 0x1b, 0x92, 0x42, 0xa3, 0x20, 0xfc, 0xdb, 0x96, 0x50, 0x93, 0xe7, 0x45, 0x0d, 0x3f, 0x7a, 0x03, 0xae, 0x0b, 0x48, 0x44, 0x25, 0x34, 0x68, 0x55, 0xde, 0x7f, 0x58, 0x4b, 0xeb, 0xd0, 0x42, 0x3a, 0x5f, 0xf9, 0x7d, 0xa7, 0xf7, 0xd0, 0x57, 0x3f, 0x00, 0x84, 0x12, 0xc9, 0x74, 0x31, 0x2c, 0x59, 0x67, 0xb1, 0xe4, 0xc6, 0xa1, 0xb6, 0xf9, 0x5f, 0x8d, 0x15, 0xb5, 0xda, 0x52, 0x65, 0x2a, 0x8d, 0x3f, 0xc9, 0xbc, 0xe1, 0x6c, 0x0a, 0xdf, 0x03, 0x9e, 0xe9, 0x22, 0xdc, 0x6c, 0xb3, 0x6d, 0x44, 0xa0, 0x15, 0x86, 0x72, 0xe0, 0x32, 0xda, 0xb7, 0x8e, 0xf3, 0x7b, 0x6d, 0xec, 0x9e, 0x65, 0x2a, 0x84, 0xab, 0x05, 0x39, 0xc7, 0xd3, 0xfc, 0x4a, 0xf4, 0x69, 0x20, 0x68, 0x3b, 0xed, 0xc3, 0x2c, 0x23, 0xdf, 0x39, 0x30, 0x29, 0xd1, 0x94, 0xc7, 0xa9, 0xc0, 0xb2, 0xeb, 0x02, 0xa4, 0x7a, 0x77, 0xf6, 0x46, 0x62, 0x97, 0x4f, 0x52, 0x34, 0x7c, 0xc8, 0xad, 0x13, 0x54, 0x2a, 0x08, 0xb9, 0x79, 0xb6, 0xb6, 0x02, 0xe8, 0xc3, 0xba, 0xae, 0xf6, 0xa8, 0x25, 0x62, 0x3e, 0xdc, 0x9f, 0xf1, 0xde, 0x5c, 0x43, 0xda, 0xe3, 0x4d, 0xb0, 0x12, 0x01, 0xe3, 0x5c, 0x03, 0x88, 0x81, 0x2c, 0xd4, 0x93, 0x22, 0x42, 0xeb, 0x82, 0xf7, 0x17, 0xb0, 0xab, 0x51, 0xc9, 0x94, 0x4d, 0xc2, 0xb6, 0x53, 0xc5, 0x7f, 0x49, 0x75, 0x05, 0x09, 0x14, 0x1b, 0x41, 0x0d, 0x1f, 0xf8, 0xeb, 0x88, 0x80, 0x9e, 0xe2, 0x2e, 0x2c, 0xfb, 0xe7, 0x0d, 0x0d, 0x23, 0x50, 0x6e, 0x55, 0x50, 0x00, 0xfc, 0x11, 0x26, 0x96, 0x28, 0x01, 0x3c, 0xe5, 0xcb, 0xa7, 0xd9, 0xa5, 0x0d, 0x9e, 0xfb, 0x67, 0x87, 0x2d, 0x9e, 0xcf, 0xa4, 0x1c, 0x3a, 0xfd, 0x4d, 0xc6, 0x8e, 0x4c, 0xc5, 0x70, 0x9c, 0x3f, 0xd1, 0xd9, 0xf5, 0xb8, 0x1d, 0x12, 0x36, 0x6b, 0xdb, 0x90, 0xd3, 0x93, 0xad, 0x80, 0x13, 0xe3, 0xc5, 0x5a, 0x5c, 0xc0, 0x4a, 0xb9, 0xb1, 0xad, 0xfe, 0x6a, 0x79, 0x07, 0x1f, 0xc3, 0x82, 0xf2, 0x8b, 0x36, 0x45, 0x93, 0x27, 0x26, 0x6c, 0x80, 0x80, 0xf8, 0x91, 0x74, 0xb3, 0x6e, 0x49, 0x48, 0x8b, 0x30, 0x61, 0x1e, 0xea, 0xac, 0x67, 0xe0, 0x6a, 0x20, 0x6c, 0xe9, 0x43, 0xf5, 0x09, 0x01, 0x70, 0x4f, 0xa0, 0x8f, 0x0d, 0xe2, 0xe4, 0x0a, 0x04, 0x07, 0x9c, 0xb1, 0xe8, 0x0f, 0xa4, 0x7c, 0x21, 0xd7, 0x34, 0x52, 0x4a, 0x9c, 0x64, 0x7c, 0xd7, 0x11, 0xf0, 0x5a, 0xfb, 0xaf, 0x39, 0x54, 0xc9, 0x4d, 0x8d, 0x14, 0x99, 0xf0, 0xa8, 0xf2, 0xad, 0xe4, 0x7b, 0xb0, 0x14, 0x0c, 0x2c, 0x68, 0xcf, 0x76, 0x5d, 0xc2, 0x33, 0x32, 0xb1, 0x6a, 0x8e, 0x65, 0x8c, 0xc2, 0x0d, 0x99, 0x1b, 0xd4, 0xdd, 0x57, 0x95, 0x8a, 0x91, 0xf8, 0xc0, 0x21, 0xc4, 0xb8, 0xb6, 0xdb, 0xff, 0x0c, 0xe9, 0xf4, 0xdd, 0x36, 0x65, 0xd8, 0x6c, 0x16, 0x55, 0x93, 0xd7, 0x43, 0xc9, 0x89, 0x42, 0x5a, 0xb6, 0x67, 0xf6, 0x96, 0x3e, 0x59, 0xbe, 0xa1, 0x32, 0x7e, 0x90, 0xaa, 0xd6, 0x99, 0x70, 0xb8, 0xe4, 0x09, 0x92, 0x3e, 0xd3, 0xfb, 0xbf, 0xef, 0x58, 0xde, 0xf9, 0xd3, 0x2e, 0x17, 0x62, 0x9b, 0x13, 0xf6, 0x5a, 0x32, 0x13, 0xe9, 0xe8, 0x94, 0x08, 0xf0, 0x5b, 0xe3, 0x62, 0x51, 0x31, 0xb8, 0x24, 0x8d, 0x37, 0xb7, 0x2f, 0x92, 0xf2, 0x66, 0xc3, 0x32, 0x3e, 0x3f, 0x43, 0xd4, 0x35, 0x03, 0x38, 0x6a, 0x52, 0x52, 0x99, 0xa3, 0xd6, 0x79, 0x4a, 0x61, 0x6b, 0x8b, 0xe2, 0x6d, 0x08, 0xb3, 0xb1, 0x6a, 0x14, 0xc8, 0x02, 0x07, 0xce, 0x22, 0x9d, 0x79, 0xec, 0xac, 0x90, 0x29, 0x82, 0x3b, 0x2f, 0xa9, 0x26, 0x1e, 0x5a, 0xed, 0x52, 0xf7, 0xfe, 0xb8, 0x0a, 0xc9, 0xde, 0x54, 0xbe, 0x51, 0x94, 0x86, 0x71, 0x9a, 0xd2, 0xc1, 0x1b, 0xcc, 0xee, 0x9a, 0x4c, 0x44, 0x9e, 0x7c, 0x13, 0xea, 0x00, 0x9d, 0x1e, 0xbf, 0xdd, 0x30, 0x22, 0xb6, 0x2e, 0xdd, 0x7e, 0xc5, 0xdf, 0x6e, 0x1b, 0x3b, 0xd4, 0xcb, 0x96, 0x54, 0x2a, 0x28, 0xa1, 0x0b, 0xbf, 0x7d, 0xa6, 0x2f, 0xf4, 0x36, 0xae, 0xb9, 0xb1, 0x2c, 0x82, 0x5d, 0xaa, 0xd5, 0x0f, 0x5f, 0xe1, 0xb7, 0x0f, 0xa8, 0x6c, 0x23, 0xe6, 0x19, 0x79, 0x1f, 0xca, 0x1f, 0x8f, 0xa4, 0x27, 0x88, 0x17, 0x0a, 0x42, 0x95, 0x1a, 0xc0, 0x1c, 0x50, 0x4c, 0x40, 0x99, 0x1f, 0x4a, 0x42, 0xe1, 0x9a, 0x20, 0x30, 0x07, 0x9a, 0x0e, 0xdb, 0xe9, 0x92, 0x8c, 0x6c, 0x57, 0x23, 0x8b, 0x9d, 0x77, 0xea, 0xfe, 0x29, 0x67, 0x9d, 0x99, 0x80, 0x25, 0x56, 0xd8, 0xc0, 0xac, 0x2e, 0x44, 0xe1, 0x60, 0x0e, 0xf2, 0x2f, 0xac, 0xc2, 0x4c, 0xfe, 0xea, 0x4f, 0x13, 0x99, 0x83, 0x87, 0xa5, 0x7b, 0x57, 0xda, 0x7c, 0xc2, 0x5f, 0x6f, 0xf8, 0xe0, 0x90, 0x74, 0x5e, 0x94, 0x03, 0xb2, 0x20, 0x19, 0x54, 0x64, 0x5f, 0x9d, 0x48, 0x49, 0xae, 0xf4, 0xb2, 0xf8, 0x19, 0x8e, 0x97, 0x74, 0x66, 0xa6, 0x90, 0x00, 0x9a, 0xbd, 0x70, 0x34, 0xbf, 0x47, 0x27, 0x51, 0xe5, 0xa4, 0xe6, 0xd2, 0x67, 0x51, 0x84, 0x43, 0x6f, 0x60, 0x21, 0x56, 0xbc, 0x25, 0x09, 0x34, 0xa3, 0x33, 0xda, 0x11, 0x54, 0x87, 0xea, 0x03, 0x5f, 0x02, 0xe3, 0x14, 0x77, 0x1d, 0xb0, 0x96, 0x75, 0xd8, 0x9d, 0xb6, 0xa0, 0xf3, 0xb9, 0x54, 0x2b, 0x61, 0x7f, 0x12, 0xff, 0xfa, 0xb6, 0xab, 0xbb, 0x70, 0x96, 0x87, 0xf9, 0x84, 0x2c, 0x8c, 0xd4, 0x79, 0x00, 0x36, 0xa7, 0xc9, 0xf4, 0xea, 0x16, 0x18, 0x6f, 0x87, 0x53, 0x66, 0xbb, 0x3f, 0x9a, 0x88, 0xac, 0xa5, 0xfe, 0xd9, 0x83, 0x06, 0x68, 0x2d, 0x11, 0xfd, 0xdd, 0x06, 0x20, 0x42, 0xff, 0x0b, 0x0e, 0xc3, 0xd7, 0xb5, 0xbb, 0xf6, 0xd1, 0x4c, 0xa6, 0x6d, 0x08, 0x12, 0x52, 0xab, 0xc4, 0xbe, 0xef, 0x36, 0x41, 0x2b, 0x36, 0xed, 0xb3, 0x52, 0x95, 0x9c, 0x86, 0x76, 0x8c, 0xce, 0xea, 0x9e, 0x57, 0xe2, 0x8f, 0x48, 0xcd, 0x61, 0xad, 0x5c, 0x88, 0x8f, 0x48, 0x5f, 0x46, 0x40, 0xb2, 0xe9, 0x8f, 0xed, 0x51, 0x59, 0x98, 0x07, 0xa2, 0xc7, 0x68, 0x8b, 0x7e, 0x3a, 0x39, 0xd7, 0x9d, 0x1b, 0x21, 0xbc, 0x58, 0xea, 0xf1, 0xd4, 0xb3, 0x30, 0x5e, 0x16, 0x9a, 0xb5, 0x5e, 0xa7, 0x6b, 0xf2, 0xd5, 0xf3, 0xb5, 0xc9, 0x71, 0xfd, 0x40, 0x74, 0xd2, 0xf3, 0x4d, 0xbc, 0xef, 0x06, 0x1e, 0x6b, 0xb5, 0x79, 0xb9, 0x03, 0xf1, 0xf7, 0xea, 0xb0, 0x6f, 0x29, 0x87, 0x7c, 0x63, 0x88, 0xf7, 0xc2, 0x09, 0x70, 0xf5, 0xe5, 0x89, 0x76, 0x92, 0x41, 0x1d, 0xfc, 0x79, 0x62, 0x75, 0x03, 0x77, 0x74, 0x5b, 0x40, 0x3b, 0xfb, 0x93, 0x71, 0x5a, 0xc5, 0x05, 0xf1, 0x96, 0x1c, 0x1e, 0x8a, 0x5f, 0x40, 0x73, 0x8b, 0x9a, 0x14, 0xa7, 0x1b, 0xa2, 0x17, 0x8f, 0xcd, 0x8c, 0x96, 0x95, 0x75, 0xb0, 0x20, 0x5a, 0x39, 0x64, 0x3b, 0xa0, 0xeb, 0x0b, 0x55, 0x66, 0x96, 0x4f, 0xfd, 0x54, 0x56, 0xaa, 0x53, 0x5a, 0x6d, 0x2b, 0xbd, 0x95, 0x94, 0x77, 0xdc, 0x72, 0x8f, 0x0e, 0xbf, 0x15, 0x04, 0xcf, 0x56, 0xfc, 0x8d, 0xbf, 0x29, 0xdf, 0x0c, 0x06, 0x49, 0xdb, 0x3f, 0x3a, 0x87, 0xd0, 0x94, 0xe0, 0xe5, 0x08, 0x3e, 0x30, 0x4a, 0x19, 0x88, 0x19, 0x7a, 0x0c, 0x69, 0x85, 0x44, 0xbe, 0x59, 0xde, 0xfe, 0x87, 0x64, 0xd1, 0x2e, 0x1a, 0x7d, 0x52, 0x8a, 0xac, 0x14, 0xe0, 0x23, 0x59, 0xeb, 0x0a, 0xdd, 0xc3, 0x25, 0x32, 0x22, 0xfc, 0xa0, 0x91, 0xd7, 0xa6, 0x84, 0x7b, 0x8f, 0x58, 0x1c, 0xe4, 0xff, 0x44, 0xe5, 0x24, 0xb3, 0x17, 0xe5, 0xf7, 0xff, 0x21, 0x3e, 0xc8, 0x37, 0xb6, 0x03, 0x2f, 0x22, 0xd4, 0x4a, 0xb8, 0xad, 0x05, 0x83, 0xe6, 0xdd, 0x87, 0x08, 0x77, 0x07, 0xab, 0xf5, 0xea, 0x43, 0x7b, 0x39, 0x3f, 0x1e, 0x9f, 0xed, 0xfe, 0x8f, 0x82, 0xe5, 0x7a, 0x2d, 0xb0, 0x85, 0x57, 0x9e, 0x83, 0xd6, 0x4a, 0x53, 0xfe, 0xd9, 0x20, 0x72, 0xf9, 0x1c, 0x02, 0x14, 0x7e, 0x8a, 0xf7, 0xb1, 0x74, 0x87, 0xaa, 0xd8, 0x7a, 0x3d, 0x6e, 0x24, 0x16, 0x30, 0x7f, 0x6b, 0x0f, 0x19, 0x8a, 0x38, 0x17, 0xf1, 0x70, 0x7c, 0xad, 0x4c, 0x48, 0x80, 0x42, 0xe8, 0xa3, 0x1e, 0x9b, 0x86, 0x13, 0x31, 0x76, 0xf8, 0xee, 0x4a, 0x70, 0x7c, 0x4f, 0xa5, 0x26, 0x48, 0x5e, 0x5b, 0x9b, 0x66, 0xd1, 0xd8, 0xda, 0xc2, 0xb3, 0x90, 0xdc, 0x82, 0x64, 0xee, 0xab, 0x95, 0xe2, 0x8d, 0xc8, 0x8f, 0x46, 0xab, 0xca, 0xb4, 0x92, 0xdb, 0x49, 0x52, 0xa9, 0xf9, 0xfa, 0x55, 0x9f, 0x63, 0x1b, 0x15, 0x33, 0x66, 0x12, 0x72, 0x9a, 0xf7, 0x51, 0x23, 0x7f, 0xa4, 0x7c, 0x4b, 0x47, 0xca, 0xce, 0x4d, 0x99, 0x07, 0xb9, 0xe2, 0x1e, 0xf2, 0xcc, 0x69, 0x85, 0x0a, 0xda, 0x7e, 0xcb, 0xed, 0x59, 0xcd, 0xb9, 0xcb, 0x08, 0x28, 0xae, 0x19, 0xd5, 0xd8, 0x9e, 0x8a, 0xfd, 0x31, 0x5b, 0x3b, 0x75, 0x6a, 0x13, 0x2d, 0x89, 0xab, 0x1a, 0xf9, 0xc3, 0x66, 0xea, 0xbf, 0x0e, 0xeb, 0x69, 0x60, 0x1b, 0x37, 0x6a, 0xed, 0x04, 0x0d, 0x75, 0x5f, 0x2f, 0x49, 0xcb, 0x88, 0x76, 0x70, 0xa5, 0x49, 0x84, 0x8b, 0xbd, 0x06, 0x82, 0x36, 0x0f, 0x57, 0xf4, 0xf4, 0xe1, 0x00, 0xdd, 0xc5, 0x01, 0x24, 0x2a, 0xfb, 0x4e, 0xb5, 0x4d, 0x49, 0x79, 0x2f, 0x29, 0x1d, 0x0d, 0x86, 0x2e, 0x2f, 0xad, 0x5c, 0xc5, 0x5a, 0x9d, 0x78, 0xee, 0xac, 0x85, 0x74, 0x27, 0xb9, 0x71, 0xb5, 0x91, 0x34, 0x1b, 0xa1, 0x4e, 0xc0, 0x6d, 0x0b, 0x2d, 0x03, 0x42, 0xf2, 0x89, 0xfc, 0x6d, 0x6c, 0x6e, 0x97, 0xfc, 0xdd, 0xfe, 0x7f, 0xbe, 0x6c, 0x13, 0x34, 0x02, 0xb8, 0x26, 0x5d, 0xa2, 0xc6, 0x70, 0x5f, 0x40, 0x3f, 0x4e, 0x2e, 0xd0, 0xd8, 0xea, 0x64, 0x56, 0x11, 0x18, 0x90, 0xf1, 0x22, 0x7e, 0xd0, 0x19, 0x32, 0xf8, 0xa2, 0x25, 0xcb, 0x3b, 0xf7, 0x10, 0x8b, 0xb8, 0x89, 0x7c, 0x1c, 0xc3, 0x6f, 0xf7, 0x66, 0xf4, 0xee, 0x7e, 0x02, 0xcd, 0x93, 0x3f, 0xf2, 0x9e, 0x7e, 0xa3, 0x90, 0xa6, 0x01, 0x8c, 0xc5, 0x7b, 0x6a, 0xdc, 0x7b, 0xac, 0x1c, 0x36, 0x55, 0xa4, 0xe5, 0x08, 0x9d, 0xd1, 0x8b, 0xc9, 0x7e, 0x06, 0xa8, 0x7f, 0x73, 0x1e, 0xb8, 0x85, 0xff, 0xe3, 0x71, 0x8b, 0x9f, 0x2e, 0x53, 0xde, 0xfd, 0x4f, 0x7f, 0xea, 0x66, 0xae, 0xcc, 0xfd, 0x7e, 0xb3, 0x18, 0x4d, 0x32, 0xe4, 0xdc, 0x3d, 0xef, 0x4d, 0x03, 0xdc, 0x11, 0x25, 0xfd, 0xae, 0x9f, 0xae, 0x0f, 0xb0, 0x35, 0x5d, 0xed, 0x96, 0x41, 0x3b, 0x8a, 0x57, 0x72, 0x8b, 0x2f, 0xeb, 0x6e, 0xad, 0xcb, 0x53, 0xc4, 0x42, 0x8a, 0xdb, 0x21, 0x91, 0xa8, 0x9c, 0xc6, 0x2a, 0x88, 0x44, 0x39, 0xc8, 0x00, 0x1a, 0x3b, 0x7c, 0xf7, 0x3c, 0xfb, 0x08, 0x33, 0x2b, 0x89, 0x89, 0x6c, 0x8a, 0x8d, 0x5a, 0xa5, 0x23, 0x39, 0x34, 0xbc, 0x2b, 0x7c, 0x9a, 0x3f, 0xc7, 0x79, 0x74, 0x81, 0xcf, 0x37, 0xfa, 0xed, 0xd1, 0x9a, 0xd3, 0x9b, 0x59, 0x92, 0x7e, 0x21, 0x6f, 0x92, 0xf2, 0xac, 0x62, 0x44, 0x81, 0x4f, 0xc4, 0x7b, 0x02, 0x9a, 0xb6, 0x69, 0x2f, 0x6f, 0x66, 0x12, 0x4c, 0x11, 0xd5, 0x00, 0x0a, 0x7e, 0xde, 0x38, 0xaa, 0xff, 0x74, 0x6e, 0x65, 0xfd, 0x2b, 0x75, 0x0c, 0x16, 0xf9, 0xf9, 0xec, 0x70, 0x3e, 0x70, 0xf4, 0x4d, 0x03, 0x4e, 0x1a, 0xe0, 0x7f, 0x78, 0xfa, 0x60, 0xe0, 0xfc, 0xc0, 0x5a, 0x48, 0xff, 0x49, 0x4b, 0x15, 0xf7, 0x85, 0x6e, 0x65, 0x1a, 0x20, 0xd3, 0xd9, 0x15, 0x61, 0xb1, 0x9a, 0x02, 0x52, 0xfd, 0x9a, 0x94, 0x21, 0x3b, 0x1d, 0x95, 0xc6, 0x95, 0x77, 0x93, 0xe6, 0x2a, 0x17, 0xd6, 0xf7, 0xa8, 0xc4, 0x95, 0xa6, 0x1d, 0x27, 0x69, 0x75, 0x0a, 0x8a, 0x01, 0xa9, 0xba, 0xdf, 0x18, 0x63, 0xd1, 0x04, 0xa4, 0x0d, 0x28, 0x45, 0x50, 0xf7, 0xd8, 0x23, 0x2d, 0x42, 0x95, 0x53, 0xa4, 0xfe, 0x3e, 0x0a, 0xb0, 0x8f, 0xb1, 0x78, 0x4a, 0x55, 0xe4, 0x92, 0x24, 0x8c, 0x32, 0x15, 0x99, 0x70, 0xf2, 0xc8, 0xe4, 0xa5, 0x4e, 0x01, 0x91, 0xd7, 0x53, 0x6a, 0x32, 0x9e, 0x44, 0x05, 0x53, 0xa4, 0x34, 0x6e, 0xb0, 0x09, 0xd3, 0x61, 0xa5, 0x06, 0x89, 0x7b, 0xe5, 0xd1, 0xc1, 0x45, 0x6f, 0xc1, 0x88, 0x6e, 0xbe, 0xb3, 0x56, 0x58, 0x40, 0xac, 0x2b, 0xd7, 0x0a, 0xc0, 0xde, 0x35, 0xca, 0x32, 0xb2, 0x79, 0xfd, 0xdc, 0x2b, 0xe8, 0x62, 0xd1, 0x20, 0xcd, 0xae, 0x42, 0x10, 0x76, 0x81, 0x9e, 0xba, 0x7f, 0x99, 0xfd, 0xe7, 0x53, 0x46, 0xbf, 0x8b, 0xef, 0x1d, 0x70, 0x0c, 0xe9, 0xf1, 0xef, 0xe2, 0xb1, 0xff, 0xd0, 0x60, 0x18, 0x69, 0xfe, 0xd1, 0x0e, 0xe6, 0xa5, 0xc7, 0xb0, 0xb7, 0x4f, 0xb0, 0x82, 0xdd, 0x4d, 0xaa, 0xf8, 0x89, 0x58, 0x99, 0x3c, 0xd4, 0x78, 0x76, 0x2b, 0xb0, 0x25, 0xea, 0xa0, 0x1e, 0xac, 0x1b, 0xf6, 0xa2, 0xd5, 0xc6, 0xc8, 0xf4, 0xc3, 0x8e, 0xfb, 0xf9, 0x1b, 0x93, 0xff, 0xf1, 0x69, 0x47, 0x51, 0xf2, 0xbf, 0x7d, 0x45, 0x95, 0x9f, 0xc3, 0x02, 0xef, 0x1a, 0xf2, 0xce, 0xc3, 0x3a, 0x03, 0x8c, 0xf5, 0x9e, 0x24, 0x82, 0x42, 0x64, 0x0b, 0x60, 0x2f, 0x4c, 0x8b, 0x7e, 0x3f, 0x19, 0x65, 0x66, 0x69, 0x3b, 0x60, 0x92, 0xc9, 0xac, 0x9c, 0x77, 0x96, 0x18, 0x23, 0xc2, 0x54, 0x40, 0xc1, 0xe1, 0x4b, 0xa0, 0x16, 0xc5, 0x37, 0x4f, 0xe9, 0xe6, 0x41, 0x28, 0xbf, 0x88, 0x2e, 0x27, 0xac, 0x3d, 0xd7, 0x15, 0x6a, 0xac, 0xd9, 0x68, 0xa8, 0x90, 0x8d, 0x65, 0xa4, 0x04, 0x3b, 0x87, 0xfc, 0xfd, 0x8a, 0x24, 0xc2, 0x18, 0x3b, 0x4e, 0xce, 0x96, 0x17, 0xf8, 0x58, 0xa4, 0x26, 0x59, 0xc6, 0xe0, 0x22, 0x96, 0xc2, 0x1a, 0x2b, 0x9b, 0x90, 0x57, 0xbc, 0x49, 0x9e, 0x1c, 0xde, 0xd7, 0x5d, 0xe9, 0x9c, 0x72, 0x50, 0x03, 0xb6, 0x27, 0x63, 0x76, 0x9a, 0x03, 0x7d, 0x5b, 0x8f, 0x79, 0x58, 0x57, 0x34, 0x03, 0x91, 0x64, 0x29, 0x0c, 0xfb, 0xd4, 0x0c, 0x0e, 0x39, 0x93, 0xa7, 0xf8, 0x8c, 0xac, 0x67, 0xd2, 0xe9, 0x0e, 0x10, 0xa3, 0x4f, 0x91, 0xb0, 0x93, 0x57, 0x34, 0xd2, 0x4d, 0x0d, 0xa8, 0xf3, 0xa7, 0xfe, 0x13, 0x3a, 0x85, 0x92, 0x0e, 0x63, 0xfa, 0x9c, 0xef, 0xfd, 0xb1, 0x30, 0x4e, 0xd5, 0x8c, 0xb5, 0xc2, 0xb2, 0x8a, 0x3a, 0xec, 0x42, 0xee, 0x0e, 0xb7, 0x55, 0x9e, 0x8a, 0xdd, 0x49, 0xc9, 0x32, 0xae, 0xc5, 0xcc, 0xfd, 0x0d, 0xab, 0x57, 0xf0, 0xbb, 0x47, 0xcb, 0xf1, 0xd8, 0xcd, 0xe7, 0xdb, 0xa6, 0x02, 0xa4, 0xce, 0x91, 0x39, 0x5d, 0xc9, 0x6c, 0x81, 0x33, 0x7a, 0xfe, 0x1d, 0xb0, 0x54, 0xbd, 0x34, 0xab, 0xe3, 0xd9, 0xca, 0x6b, 0x5c, 0x7c, 0xef, 0x0f, 0x79, 0x51, 0x36, 0x2c, 0x83, 0x43, 0x69, 0xb9, 0xb0, 0x87, 0x7b, 0x28, 0xb0, 0xdc, 0xbe, 0xd6, 0x83, 0x11, 0x56, 0xa5, 0x8d, 0xc8, 0xee, 0xe7, 0xec, 0x7b, 0xaa, 0x7f, 0x09, 0xbc, 0x5c, 0x42, 0x6d, 0xc1, 0xfa, 0xa4, 0xd7, 0x1f, 0x50, 0x90, 0x8b, 0xd6, 0xf2, 0x97, 0xec, 0x8e, 0x75, 0x4d, 0x4d, 0x20, 0xde, 0xf0, 0x05, 0x58, 0x5b, 0x4b, 0xc1, 0xfa, 0x31, 0xda, 0x1f, 0x02, 0xf6, 0x2f, 0x78, 0x30, 0x00, 0x94, 0xfc, 0xc4, 0x1d, 0xf2, 0x05, 0x87, 0x84, 0xf2, 0xa5, 0x0a, 0x0c, 0x61, 0x81, 0x32, 0x9c, 0xd9, 0xe3, 0xf4, 0xe3, 0x9e, 0x0a, 0x5e, 0x49, 0xc6, 0xc5, 0xd7, 0x25, 0x9d, 0x40, 0xa7, 0x30, 0x47, 0x1d, 0xba, 0x3a, 0xa7, 0xc6, 0xa0, 0x1b, 0x80, 0x02, 0xd9, 0xed, 0xda, 0xc7, 0x50, 0x78, 0xa8, 0x50, 0x25, 0xee, 0xa7, 0x6e, 0xaf, 0xd9, 0x89, 0x23, 0xc2, 0x51, 0x53, 0x6d, 0x2d, 0x72, 0x04, 0x60, 0x87, 0x0d, 0x77, 0x77, 0x2c, 0x9e, 0x8a, 0x2c, 0x82, 0x7e, 0x80, 0xc6, 0x81, 0x5a, 0xa4, 0x73, 0x72, 0xe4, 0x2f, 0x96, 0xf6, 0xc8, 0x6c, 0x62, 0x4b, 0xe2, 0x1a, 0xa8, 0xcb, 0xae, 0x12, 0xed, 0xb5, 0x00, 0x2a, 0xc0, 0x30, 0xf5, 0x58, 0x4b, 0x8d, 0x29, 0x1b, 0x27, 0xcd, 0x2a, 0x16, 0x75, 0x63, 0x2d, 0xfe, 0x2a, 0x3b, 0x00, 0xb7, 0xaa, 0xfa, 0x40, 0xba, 0x99, 0x88, 0xcc, 0xba, 0xed, 0xcc, 0x79, 0x87, 0x48, 0xb6, 0x08, 0x32, 0x86, 0x83, 0x55, 0x72, 0x91, 0x3c, 0xd0, 0x46, 0x7d, 0x80, 0x31, 0xdc, 0xd1, 0x84, 0x68, 0xb2, 0x22, 0x58, 0xd3, 0xfb, 0xe7, 0x6c, 0xb4, 0x44, 0x88, 0x52, 0xe2, 0x57, 0xb8, 0xc5, 0xbf, 0x60, 0x05, 0xeb, 0x69, 0x4e, 0xad, 0xd7, 0x35, 0x7c, 0xb4, 0x52, 0x59, 0x91, 0x33, 0xdb, 0xe8, 0xa5, 0xf3, 0xec, 0x04, 0xa5, 0x3a, 0x7f, 0x4f, 0xf8, 0xe5, 0xd1, 0xa2, 0x62, 0xb7, 0x66, 0x02, 0x29, 0xf1, 0x4d, 0xcf, 0x77, 0x23, 0xa5, 0x3f, 0x00, 0x41, 0x60, 0x0b, 0xe4, 0xf9, 0x47, 0x68, 0xd7, 0x44, 0x3e, 0x39, 0x7f, 0x3c, 0xca, 0x83, 0x1d, 0x2d, 0xd0, 0x21, 0x70, 0xee, 0xa0, 0xb9, 0xd7, 0x72, 0x31, 0xee, 0xb5, 0x9a, 0xae, 0xd7, 0x19, 0x4d, 0x32, 0xb0, 0x9f, 0xcb, 0xd1, 0xd0, 0x91, 0x3e, 0xd7, 0xdb, 0x52, 0x93, 0x54, 0x39, 0xfd, 0x87, 0xd8, 0xc7, 0x49, 0x05, 0x7b, 0xcc, 0xb0, 0xaf, 0x20, 0x2e, 0xd0, 0xbb, 0xfb, 0xe6, 0x11, 0x00, 0x51, 0xb1, 0x88, 0x50, 0x7f, 0x08, 0x1b, 0x09, 0x3e, 0x53, 0xe6, 0xe7, 0x25, 0x5a, 0xde, 0x1c, 0x70, 0xfc, 0xb4, 0xa3, 0xff, 0x23, 0xfd, 0xd1, 0xa2, 0xf7, 0x8f, 0x2d, 0x93, 0x52, 0x2e, 0x81, 0x44, 0x74, 0x68, 0x31, 0x5b, 0xf9, 0xbd, 0xcc, 0xfb, 0x08, 0x03, 0xe1, 0x46, 0xcc, 0x09, 0x14, 0x20, 0x28, 0x7b, 0x70, 0x35, 0xa6, 0x05, 0xff, 0x3d, 0xb1, 0xbb, 0x98, 0x7f, 0x05, 0xb9, 0xf9, 0x93, 0x63, 0x06, 0x16, 0x6d, 0x89, 0xbf, 0xb0, 0x97, 0x61, 0x71, 0x28, 0xbe, 0x79, 0xc6, 0x96, 0x70, 0xb3, 0x64, 0x16, 0x24, 0x3e, 0x12, 0x62, 0x7b, 0xc4, 0x1c, 0xa6, 0xc5, 0xe5, 0xf9, 0x8f, 0xc7, 0xe5, 0x2c, 0xa5, 0xbc, 0xa1, 0x68, 0xdc, 0x99, 0xc8, 0xf7, 0x65, 0x95, 0x47, 0x5d, 0xca, 0xe9, 0x05, 0x38, 0x3a, 0xd4, 0xd1, 0x6a, 0x22, 0xe3, 0x99, 0x7a, 0xfd, 0x6f, 0xdc, 0x38, 0x6c, 0x67, 0x61, 0xa0, 0x89, 0x50, 0x2a, 0x01, 0x78, 0x89, 0xa4, 0x5f, 0x40, 0xd4, 0x20, 0x15, 0xd9, 0x12, 0x86, 0xbe, 0x87, 0x4e, 0x48, 0x56, 0x66, 0xfd, 0x96, 0x9d, 0x45, 0x84, 0xd1, 0xbc, 0xb7, 0xfb, 0x41, 0x2b, 0x68, 0x31, 0x0a, 0xd2, 0xae, 0xf0, 0x5c, 0x6f, 0x60, 0x82, 0xeb, 0x37, 0xeb, 0x73, 0x9f, 0xc0, 0xa2, 0x99, 0x8c, 0x1e, 0x56, 0x52, 0x24, 0x4d, 0x27, 0x0d, 0xab, 0xcf, 0x99, 0x0c, 0xec, 0x95, 0xeb, 0x68, 0x2b, 0x23, 0xa4, 0x55, 0x5a, 0xf0, 0x6e, 0xa7, 0x90, 0x0b, 0x27, 0x95, 0xb6, 0x04, 0x36, 0xbd, 0x84, 0x0a, 0x1b, 0x69, 0xac, 0x51, 0x4a, 0x11, 0x54, 0xb7, 0x3a, 0x21, 0xca, 0xa6, 0xb9, 0xfb, 0x73, 0x3c, 0x82, 0x40, 0x05, 0xa9, 0x11, 0x4c, 0xf6, 0xd9, 0xb6, 0xff, 0x35, 0x54, 0xe9, 0xc3, 0x17, 0x62, 0xdd, 0xca, 0x94, 0x72, 0x58, 0x98, 0xb3, 0xbc, 0xc1, 0xc2, 0x43, 0x26, 0x7b, 0xf5, 0xcc, 0x64, 0x71, 0x39, 0xc5 ],
- const [ 0x9a, 0xd4, 0x32, 0xe5, 0x9a, 0x7f, 0x71, 0xad, 0xef, 0xb6, 0x6e, 0x0c, 0x10, 0xe1, 0x87, 0x3b, 0x5a, 0xb9, 0x1c, 0x65, 0x62, 0x4f, 0x8a, 0xc3, 0x8a, 0x50, 0x5d, 0x06, 0xd2, 0x88, 0xc1, 0xf5, 0xf1, 0xa6, 0x3a, 0x57, 0xa5, 0x3f, 0x95, 0x13, 0x47, 0x15, 0x1f, 0x96, 0xa2, 0x98, 0x14, 0x75, 0x05, 0xad, 0x5a, 0x53, 0x97, 0xaf, 0x6f, 0x06, 0xeb, 0xb3, 0xa1, 0xf5, 0xd4, 0x11, 0x7d, 0xc4, 0x7b, 0x20, 0x89, 0x34, 0xae, 0x40, 0x36, 0x44, 0x7b, 0x1e, 0x10, 0x9d, 0xfe, 0x33, 0x38, 0x2c, 0x77, 0x8e, 0x14, 0x11, 0x9f, 0xd4, 0x45, 0xb8, 0x3d, 0x85, 0xd9, 0x45, 0xf4, 0x80, 0xc2, 0x36, 0x5f, 0xca, 0x87, 0x43, 0x60, 0x8b, 0x3a, 0x89, 0xb4, 0x59, 0xaa, 0xe8, 0xcb, 0xb9, 0xd9, 0xaa, 0xd7, 0xe3, 0xb1, 0x65, 0x24, 0xc6, 0xf2, 0x22, 0xa7, 0x4c, 0x6f, 0xbe, 0xd9, 0xdf, 0x7a, 0x91, 0xc6, 0x2c, 0x9d, 0x4e, 0x60, 0x27, 0x8b, 0x2a, 0x1a, 0x4f, 0x55, 0x41, 0xb2, 0x33, 0xe1, 0x35, 0x4e, 0x35, 0x99, 0x18, 0xcb, 0x8e, 0x60, 0x8c, 0x52, 0x92, 0xca, 0x28, 0x2c, 0x35, 0x8c, 0x1e, 0xd7, 0xcf, 0x31, 0x1b, 0x59, 0x1c, 0x0f, 0x6f, 0xd4, 0x87, 0x7a, 0x6e, 0x5b, 0xa8, 0x37, 0x16, 0x04, 0x0b, 0x33, 0xf2, 0x3e, 0x33, 0x75, 0x3d, 0x65, 0xde, 0x52, 0x4b, 0x94, 0x8b, 0xe0, 0x25, 0xbb, 0x3a, 0xad, 0x74, 0xf1, 0x73, 0xb0, 0xa0, 0x0b, 0x89, 0x7f, 0x38, 0x6d, 0x20, 0xc3, 0x95, 0x20, 0xed, 0xe9, 0xba, 0x25, 0xbd, 0x1b, 0x7f, 0x09, 0xb9, 0x6f, 0xef, 0xba, 0xe8, 0x5e, 0xee, 0x99, 0xf5, 0x77, 0x1f, 0xd0, 0x33, 0x54, 0x04, 0xe6, 0xde, 0xce, 0x67, 0x91, 0xa4, 0x6d, 0xf9, 0xcb, 0x63, 0x22, 0x3a, 0x27, 0x35, 0x39, 0x98, 0x66, 0xaa, 0x89, 0xdb, 0x45, 0x54, 0xee, 0xc0, 0x9a, 0x89, 0xf9, 0xe4, 0x9f, 0x64, 0xe5, 0xe4, 0x8e, 0x0d, 0xcd, 0xc3, 0x6e, 0x3a, 0x1d, 0x8c, 0x2c, 0xf6, 0x47, 0x38, 0xed, 0xa2, 0xb7, 0xd1, 0xa3, 0x39, 0x08, 0xd8, 0xde, 0xd8, 0x78, 0xe5, 0xe6, 0x7d, 0x99, 0x8d, 0x06, 0x0e, 0x4a, 0x88, 0x2a, 0x9e, 0xe6, 0x13, 0xad, 0xed, 0xbb, 0x94, 0x6c, 0x2d, 0xbe, 0x7d, 0x1f, 0x0c, 0x7c, 0x72, 0xe9, 0xee, 0x54, 0xae, 0x2d, 0x7a, 0xe4, 0xa3, 0xa4, 0x59, 0xc1, 0xe0, 0xac, 0x3a, 0x6b, 0x38, 0xe3, 0x1a, 0x80, 0x21, 0xf5, 0xc2, 0x2f, 0x5a, 0xb2, 0x91, 0xf0, 0xd1, 0x64, 0x7b, 0x72, 0xc3, 0x5f, 0x52, 0xd5, 0x25, 0xd9, 0x44, 0x1a, 0x43, 0xfc, 0xa6, 0xd8, 0xa7, 0x3a, 0xf0, 0x30, 0x3c, 0xe1, 0x08, 0x02, 0xb3, 0xef, 0xc3, 0x61, 0x26, 0x27, 0xa9, 0x45, 0xfb, 0x64, 0xf8, 0x80, 0x0c, 0x2e, 0xec, 0xf4, 0x04, 0x8b, 0x3e, 0x02, 0x0c, 0x17, 0xea, 0x46, 0xa8, 0x57, 0x36, 0x81, 0xdb, 0x4b, 0xf0, 0xd6, 0x92, 0x42, 0xf7, 0x3a, 0x40, 0xf2, 0xfd, 0x26, 0xc5, 0xc8, 0x8a, 0x8e, 0x94, 0x7d, 0x44, 0x17, 0x15, 0xea, 0x6f, 0x85, 0x48, 0x1d, 0xb0, 0x72, 0xac, 0xac, 0x16, 0x46, 0x5f, 0x49, 0x5a, 0x63, 0x86, 0x97, 0x66, 0xa0, 0xef, 0x3d, 0x15, 0xf9, 0xf5, 0x38, 0x3a, 0x85, 0xa4, 0x75, 0xe3, 0xa8, 0x1e, 0x9f, 0xdf, 0x89, 0x3d, 0x36, 0x7d, 0xc6, 0x7a, 0xe1, 0x97, 0x67, 0x0e, 0x05, 0xcf, 0x11, 0x57, 0x96, 0x19, 0x7c, 0x7c, 0x2d, 0x7a, 0x27, 0x54, 0x5b, 0x0f, 0x4b, 0x84, 0x3e, 0x50, 0x0d, 0xe8, 0x51, 0x96, 0xf7, 0x35, 0x88, 0xdb, 0xa9, 0xdc, 0x9d, 0xc1, 0xcc, 0x31, 0xa4, 0xd6, 0x48, 0xcc, 0xe6, 0x17, 0xb7, 0x2f, 0xec, 0xb3, 0x19, 0xaa, 0xda, 0x11, 0xc9, 0x7c, 0xff, 0x13, 0xb0, 0x3b, 0xa9, 0x9d, 0xb8, 0x76, 0x3e, 0x51, 0x83, 0x98, 0x88, 0x9d, 0x5e, 0x0f, 0x51, 0xf8, 0x70, 0xae, 0x30, 0x68, 0x37, 0x50, 0xa2, 0x48, 0x36, 0xbf, 0x5c, 0x48, 0xe7, 0xd4, 0xe0, 0xb5, 0xf7, 0xdf, 0x4f, 0xfb, 0xb2, 0x48, 0x7e, 0x68, 0xbd, 0x77, 0x4b, 0x32, 0x03, 0xf2, 0x32, 0xbc, 0xf1, 0xc5, 0x1b, 0x15, 0xe6, 0x27, 0x76, 0xc1, 0xe5, 0x5a, 0x8a, 0xbd, 0x8e, 0xd3, 0x0a, 0xbd, 0x4c, 0x9b, 0xea, 0xb8, 0xcf, 0xf5, 0x70, 0xa6, 0xbd, 0x41, 0x8e, 0x89, 0xa4, 0x20, 0x6f, 0xaa, 0x34, 0xd9, 0x50, 0x25, 0xab, 0xfc, 0x91, 0xa7, 0x90, 0x45, 0x0c, 0x77, 0xa4, 0xc2, 0xa5, 0xb3, 0x16, 0x38, 0x22, 0xdd, 0xf6, 0xc4, 0x3e, 0x96, 0xec, 0xbe, 0xf8, 0xa8, 0x2a, 0xe2, 0x31, 0x4a, 0x9f, 0xb2, 0x76, 0xa0, 0x6d, 0x16, 0x1b, 0x82, 0x9e, 0x46, 0x89, 0x7e, 0x12, 0xe9, 0xd8, 0x20, 0xbc, 0x7f, 0xa1, 0x70, 0x0f, 0xfc, 0x0d, 0xbd, 0xb2, 0xb5, 0x32, 0x99, 0x7b, 0x80, 0xa0, 0x25, 0x9b, 0x17, 0x36, 0x8f, 0x16, 0xbe, 0x3b, 0xd8, 0x77, 0x26, 0xaa, 0xdb, 0xc1, 0x90, 0xcc, 0x8b, 0xa8, 0x35, 0x0c, 0x7c, 0x01, 0xe6, 0x08, 0xa5, 0x78, 0xf0, 0xe4, 0x64, 0x81, 0x42, 0xe3, 0xc2, 0x91, 0xd2, 0x38, 0xf9, 0x8d, 0x3c, 0x19, 0x33, 0x83, 0xac, 0x16, 0x95, 0x98, 0xff, 0xa9, 0x7c, 0x41, 0x25, 0x0e, 0x06, 0xb6, 0xca, 0x54, 0xd5, 0xa4, 0x35, 0xb5, 0x0f, 0x22, 0x70, 0x23, 0xa9, 0xe7, 0xa9, 0x23, 0xe6, 0xba, 0xd8, 0xde, 0x1a, 0x29, 0xa2, 0x75, 0xb4, 0x7e, 0x7d, 0x96, 0x7b, 0xef, 0x16, 0x4d, 0x18, 0x15, 0xf0, 0x1c, 0xd5, 0xa0, 0x4d, 0x4d, 0xa4, 0x48, 0x51, 0x87, 0x63, 0x07, 0x65, 0xa0, 0x5e, 0x85, 0xda, 0xb2, 0x16, 0xd4, 0xce, 0x71, 0x41, 0x5d, 0x54, 0xbb, 0x11, 0x1a, 0xcf, 0x71, 0xb9, 0x06, 0x9f, 0x86, 0x2e, 0xd2, 0x00, 0x55, 0x2a, 0xda, 0x2e, 0x38, 0x77, 0x57, 0xce, 0x56, 0x6a, 0xd6, 0x89, 0xbc, 0xae, 0xe9, 0xfa, 0xb0, 0x42, 0x1c, 0xca, 0x41, 0xc5, 0x2a, 0x19, 0x23, 0xf2, 0x71, 0x20, 0xba, 0x67, 0xa4, 0x15, 0x75, 0xaa, 0xc0, 0x4f, 0x5d, 0x6d, 0x41, 0xab, 0xee, 0x11, 0x95, 0x2e, 0x25, 0x6a, 0xd1, 0xec, 0xda, 0xc2, 0xa3, 0x28, 0x50, 0x20, 0x87, 0xbc, 0x0b, 0xca, 0x3e, 0xbc, 0xe1, 0x08, 0x7d, 0x56, 0x54, 0x2b, 0xe2, 0xfc, 0x1f, 0xce, 0x2b, 0xc6, 0x0f, 0x5c, 0xaa, 0x11, 0x14, 0xd2, 0xf4, 0x6d, 0x98, 0xc6, 0xda, 0xb6, 0x0f, 0xa9, 0x9a, 0x80, 0xd0, 0x49, 0x56, 0xb8, 0x23, 0x99, 0xc4, 0x89, 0x9b, 0xb5, 0x28, 0x7d, 0xa6, 0x21, 0x7f, 0xe5, 0x62, 0x51, 0xfd, 0x7a, 0xb2, 0x6f, 0xba, 0x44, 0x92, 0x58, 0xa9, 0xbb, 0xa7, 0xe8, 0xc9, 0x2d, 0x1a, 0x77, 0x9f, 0x5f, 0xa7, 0xa3, 0xe3, 0x77, 0xf1, 0x50, 0x7a, 0x19, 0x19, 0xee, 0xa4, 0xd1, 0x8e, 0xfb, 0x77, 0xb1, 0x27, 0xc8, 0x8c, 0x3b, 0x6f, 0x7f, 0xf8, 0x81, 0x40, 0x65, 0x7d, 0x8a, 0x93, 0x5d, 0x02, 0xf8, 0x96, 0xae, 0x41, 0xe8, 0xff, 0x05, 0xc0, 0x1a, 0xa0, 0xbe, 0x02, 0x52, 0x3c, 0x5f, 0xfe, 0xfd, 0x9a, 0x65, 0xd0, 0x18, 0xd7, 0x44, 0xaf, 0x4e, 0x00, 0xa9, 0x1f, 0x60, 0xe1, 0x02, 0x67, 0xca, 0x17, 0x40, 0x46, 0xa4, 0x6d, 0xdb, 0xe2, 0xc6, 0x65, 0x17, 0x01, 0x2f, 0x14, 0x87, 0x7b, 0xa8, 0x33, 0xcf, 0xf0, 0xa4, 0x74, 0xad, 0xb6, 0x6b, 0x12, 0x3b, 0x15, 0x77, 0xac, 0x6e, 0xb7, 0x1e, 0x53, 0xe3, 0x5a, 0x72, 0xe2, 0xdb, 0xc8, 0x66, 0x8d, 0x84, 0x09, 0x32, 0xbd, 0x7a, 0xd7, 0xf8, 0x1c, 0x8d, 0x52, 0xa7, 0xeb, 0xc5, 0xf5, 0x20, 0x9c, 0xa3, 0xc9, 0x97, 0x9d, 0xaa, 0xd8, 0x3c, 0x72, 0x1e, 0xe5, 0x1b, 0x06, 0x0c, 0x5a, 0x41, 0x43, 0x8a, 0x82, 0x21, 0xe0, 0x40, 0xf8, 0x36, 0x7a, 0x27, 0x60, 0xe9, 0xe7, 0x91, 0x54, 0xb4, 0xc7, 0x6a, 0xa1, 0x88, 0x5b, 0xbd, 0xb4, 0x6c, 0x9b, 0x79, 0x4f, 0x68, 0x82, 0x76, 0x81, 0xa1, 0xad, 0xb3, 0xd4, 0xc5, 0x24, 0xe2, 0xc8, 0xa9, 0x78, 0x26, 0x80, 0x31, 0x0e, 0x1b, 0xbc, 0x71, 0xba, 0x17, 0x07, 0x11, 0x8f, 0xaf, 0x32, 0xf6, 0xf6, 0x7d, 0x00, 0x1e, 0xfe, 0x21, 0x23, 0xcc, 0xf3, 0x86, 0x67, 0xe6, 0x32, 0x67, 0x2e, 0x9b, 0x3b, 0x11, 0x1c, 0x48, 0x08, 0x6a, 0x13, 0x9d, 0x9e, 0x32, 0x62, 0xfc, 0xe1, 0x89, 0x39, 0x21, 0xac, 0xb1, 0x61, 0x08, 0x21, 0x16, 0x29, 0x0b, 0x3e, 0x8b, 0xa4, 0x4c, 0xb1, 0xd7, 0x11, 0x52, 0xee, 0x70, 0x9b, 0xf7, 0x7e, 0x86, 0x43, 0x81, 0x9a, 0x43, 0x1a, 0x0f, 0xf8, 0x52, 0xb3, 0x37, 0xe5, 0x9e, 0xd8, 0xed, 0x94, 0x5c, 0x7c, 0xa6, 0xb6, 0x4b, 0xf1, 0xbe, 0x4a, 0x3a, 0x5b, 0x17, 0xb7, 0xcc, 0x65, 0x04, 0x18, 0x78, 0x32, 0x65, 0xd7, 0xd3, 0x97, 0x13, 0x7d, 0x12, 0x87, 0x7e, 0xc8, 0xca, 0xce, 0x94, 0xff, 0xfb, 0x02, 0xe5, 0x82, 0x4d, 0xb7, 0x05, 0xa5, 0x99, 0xf3, 0x32, 0xbe, 0xab, 0xe2, 0x37, 0x7d, 0x47, 0xca, 0x90, 0x7c, 0x69, 0x40, 0xcf, 0x17, 0xd1, 0x9d, 0x3f, 0x7e, 0xbf, 0xac, 0xc6, 0x08, 0xfc, 0xa5, 0x10, 0xcb, 0x19, 0x5f, 0xe9, 0x69, 0xfb, 0xc1, 0xeb, 0x2c, 0x98, 0x7a, 0x5a, 0x56, 0xfb, 0xf1, 0x4c, 0xb2, 0x8e, 0x7f, 0x0d, 0x6f, 0x98, 0xdd, 0xc1, 0x2e, 0x05, 0xd8, 0x4b, 0x5a, 0x66, 0x4c, 0x6e, 0xb8, 0x38, 0x4f, 0x32, 0x3f, 0x69, 0xad, 0x8a, 0x29, 0x18, 0x95, 0x33, 0x4a, 0x9d, 0x91, 0xdf, 0xa1, 0xc9, 0xbb, 0x93, 0x2d, 0x6e, 0x2f, 0x4e, 0x01, 0x22, 0xbc, 0xeb, 0x9b, 0x41, 0xdf, 0x48, 0x72, 0x31, 0xf1, 0xa8, 0xce, 0xea, 0x9f, 0x56, 0xdc, 0xb5, 0x9b, 0x8c, 0x02, 0x33, 0x91, 0x92, 0x70, 0xa2, 0x5d, 0x2a, 0xf8, 0x5c, 0x7b, 0x2c, 0x1f, 0xa0, 0xbe, 0x6e, 0x74, 0x95, 0x45, 0xe6, 0x20, 0x8c, 0xac, 0x13, 0xbf, 0x86, 0x7f, 0x98, 0x6e, 0xf6, 0xf4, 0x2b, 0x25, 0xc8, 0xd9, 0xad, 0x48, 0xa1, 0xcb, 0x9a, 0x78, 0x69, 0xa9, 0xa4, 0xaf, 0x07, 0x48, 0x9b, 0x8c, 0x6b, 0x68, 0x90, 0xeb, 0xd2, 0xe7, 0x3a, 0xb9, 0x45, 0x35, 0x99, 0x07, 0x63, 0x08, 0xd8, 0x5c, 0x61, 0x51, 0x78, 0x50, 0x4f, 0x6e, 0xab, 0x56, 0x9d, 0xa1, 0xfe, 0xda, 0xdd, 0xc1, 0x3b, 0x8c, 0xca, 0x2f, 0x8e, 0xfb, 0x8a, 0x0c, 0xe6, 0x65, 0x30, 0xa9, 0x9e, 0xcd, 0x85, 0x3f, 0x5d, 0x4f, 0x08, 0xe1, 0x3b, 0xb1, 0x33, 0xae, 0x25, 0x3a, 0x00, 0x4b, 0x82, 0xc7, 0xac, 0x91, 0x16, 0x1b, 0xbb, 0x82, 0x27, 0x77, 0x3c, 0x82, 0xdf, 0x6a, 0x4e, 0xc4, 0xf2, 0xeb, 0xe3, 0x02, 0x81, 0xa5, 0xc4, 0x71, 0x3d, 0x92, 0xd6, 0xf4, 0xcf, 0xcb, 0x9b, 0x8f, 0x78, 0x9f, 0xfb, 0x1f, 0xf4, 0xe2, 0x45, 0x49, 0xa5, 0x87, 0x71, 0xb1, 0xed, 0x72, 0xa8, 0x6c, 0xdc, 0x87, 0x06, 0xb7, 0x0b, 0x07, 0x9e, 0xe9, 0xc7, 0x1c, 0xbe, 0xa6, 0x72, 0xb2, 0x75, 0x56, 0x27, 0x89, 0x53, 0xd5, 0x9d, 0x88, 0x70, 0x6c, 0x4e, 0x55, 0xaf, 0x01, 0xd8, 0x22, 0x44, 0x8a, 0xa3, 0xca, 0x74, 0xc8, 0xc4, 0x1c, 0x9c, 0x31, 0x21, 0x76, 0x75, 0x2e, 0xd6, 0x97, 0x96, 0x86, 0xd8, 0xae, 0x3b, 0x1a, 0xd8, 0xb6, 0x44, 0xd4, 0x6b, 0x06, 0x81, 0xda, 0x67, 0x24, 0x2c, 0x07, 0x90, 0xdb, 0xb7, 0x9b, 0x74, 0x8d, 0xc9, 0x31, 0x93, 0xca, 0x83, 0xf2, 0xc3, 0x20, 0x07, 0x09, 0xd3, 0x35, 0x3b, 0x56, 0x6f, 0x14, 0xca, 0x67, 0x43, 0xc5, 0x6c, 0xa4, 0x64, 0x20, 0x68, 0xc9, 0xeb, 0xe2, 0x57, 0x9a, 0xe3, 0x01, 0x2a, 0xd2, 0x65, 0x3d, 0x6e, 0x5c, 0x01, 0xf8, 0xcf, 0xc5, 0x60, 0x47, 0xdb, 0xf2, 0x28, 0x49, 0x09, 0x0e, 0x20, 0xb8, 0xfa, 0xc7, 0x95, 0xbd, 0xfe, 0xba, 0xfc, 0x09, 0xda, 0x2b, 0xd8, 0x21, 0xc9, 0xfa, 0xde, 0xf9, 0xc0, 0xd2, 0x57, 0xc5, 0xf6, 0xa4, 0xc7, 0x0c, 0xa4, 0x54, 0xcc, 0xfe, 0x09, 0xb2, 0x48, 0x07, 0xb2, 0xab, 0xc2, 0xa4, 0xf8, 0xc1, 0x0a, 0x76, 0xca, 0xb8, 0x1c, 0x95, 0xad, 0x92, 0x47, 0x26, 0x00, 0xbe, 0x8f, 0x30, 0x85, 0x8d, 0x4f, 0xab, 0x1d, 0xe5, 0x23, 0xda, 0xd3, 0x39, 0x04, 0xdb, 0x1c, 0xb8, 0xb5, 0x7d, 0x5d, 0xc5, 0x5f, 0x51, 0xae, 0xa8, 0x78, 0x04, 0xde, 0x83, 0xe8, 0xeb, 0xb7, 0x87, 0x6f, 0xe0, 0x83, 0x67, 0x41, 0x4d, 0xcf, 0x0d, 0xf4, 0x86, 0x6e, 0x8d, 0x9c, 0x5c, 0xc1, 0x57, 0x35, 0xef, 0x36, 0xb0, 0x41, 0xc3, 0x0f, 0x63, 0xb1, 0x16, 0x65, 0xb3, 0x09, 0x71, 0x6c, 0x95, 0xc0, 0x7e, 0xf8, 0x1c, 0xe5, 0x19, 0x40, 0x35, 0x09, 0xa9, 0xe2, 0x94, 0x58, 0xb1, 0x28, 0xee, 0x09, 0xa2, 0x8a, 0x69, 0xf9, 0xf4, 0x74, 0x51, 0x92, 0x74, 0x49, 0x0c, 0xf2, 0xe0, 0xa7, 0x50, 0x49, 0xb1, 0xed, 0x93, 0x83, 0x38, 0xfa, 0xc3, 0x28, 0xec, 0x38, 0x38, 0x80, 0x03, 0xda, 0xe7, 0xfa, 0x3f, 0x61, 0xd8, 0xce, 0x0b, 0x65, 0xda, 0xe2, 0xc6, 0x92, 0x75, 0xeb, 0x5f, 0xf1, 0x20, 0xd4, 0x22, 0x68, 0xb4, 0x63, 0xd1, 0x85, 0x21, 0x1a, 0xf7, 0x77, 0x5f, 0x5b, 0x79, 0x5d, 0xa8, 0xd0, 0x6e, 0xc4, 0xe5, 0x0a, 0x30, 0x6a, 0x66, 0x68, 0xb3, 0x48, 0xd5, 0x3b, 0x16, 0xd0, 0x6d, 0x27, 0x78, 0x74, 0x67, 0xcd, 0x0d, 0x67, 0xb5, 0xa6, 0x71, 0xa7, 0xf3, 0x32, 0x3c, 0x3b, 0x9b, 0x53, 0xd6, 0xb9, 0x78, 0xf3, 0x8d, 0x0c, 0x5d, 0xed, 0xe4, 0x74, 0x16, 0x2b, 0x2e, 0xce, 0x9f, 0x0c, 0x5c, 0x16, 0x94, 0x08, 0x14, 0x2a, 0xe9, 0x96, 0x03, 0xd1, 0xdb, 0x4d, 0x73, 0xfb, 0x26, 0x4a, 0x20, 0x4b, 0x79, 0xd3, 0x47, 0xd2, 0x27, 0x39, 0x01, 0x1e, 0x1f, 0x03, 0xcf, 0x73, 0x1e, 0x48, 0x76, 0x58, 0x23, 0x5d, 0x0d, 0x55, 0x24, 0xb1, 0x54, 0xfc, 0xff, 0xf4, 0x47, 0x26, 0xb3, 0x7f, 0xf3, 0x7f, 0xd0, 0xf0, 0x89, 0x45, 0x2c, 0x14, 0xb1, 0x4c, 0xd8, 0x0b, 0x20, 0x46, 0x52, 0xa6, 0x6d, 0x41, 0xfc, 0x14, 0x20, 0x71, 0xcd, 0xbe, 0x0d, 0x30, 0x47, 0x6f, 0xe0, 0x43, 0xa9, 0xb8, 0xf8, 0x5f, 0x65, 0x93, 0x79, 0xeb, 0xd4, 0x46, 0x9c, 0x08, 0x29, 0x8a, 0x4a, 0xcf, 0xa4, 0xed, 0xea, 0xd9, 0x08, 0x75, 0x77, 0x05, 0x4e, 0x86, 0xd5, 0x75, 0x9b, 0x05, 0x65, 0xda, 0x70, 0xbe, 0xd7, 0xf2, 0x20, 0x03, 0x3f, 0x4f, 0x88, 0x96, 0x6b, 0x59, 0xfa, 0xca, 0x74, 0x96, 0x7a, 0xe4, 0x94, 0x29, 0x2d, 0xc7, 0x37, 0x99, 0x0e, 0xd1, 0x55, 0xd4, 0xe3, 0x00, 0xfe, 0x74, 0x70, 0x59, 0x37, 0x40, 0xea, 0x8a, 0x04, 0xf6, 0xae, 0xce, 0xc6, 0x48, 0x33, 0x11, 0xc7, 0x24, 0x3d, 0x55, 0x14, 0x38, 0x54, 0x54, 0x8b, 0xb6, 0x75, 0x66, 0x34, 0x54, 0x07, 0xa6, 0xd5, 0x98, 0x10, 0x50, 0xc0, 0x52, 0xa9, 0x6e, 0xf0, 0x6a, 0xb0, 0xb4, 0x54, 0xdb, 0xbc, 0xa8, 0x6b, 0x00, 0x56, 0x06, 0x11, 0x0f, 0x66, 0x62, 0x99, 0xe3, 0xeb, 0x0f, 0x1b, 0xfe, 0xef, 0x40, 0x0f, 0xce, 0xbb, 0x6d, 0x1b, 0x2f, 0x47, 0xf8, 0x2a, 0x32, 0xf4, 0x11, 0xbe, 0x1c, 0x7d, 0xd7, 0x87, 0xb2, 0x2b, 0xbf, 0x34, 0xb4, 0x49, 0x3a, 0x89, 0xa8, 0xd8, 0x92, 0xb2, 0xd8, 0x84, 0x15, 0xd7, 0x9e, 0xd6, 0x76, 0xf0, 0xdf, 0xaa, 0x70, 0xdb, 0xd6, 0xe4, 0xac, 0xab, 0x13, 0x5f, 0xe5, 0x44, 0xc3, 0x26, 0x4a, 0x25, 0x31, 0xe7, 0x24, 0x84, 0x8d, 0xa4, 0xb8, 0xa0, 0xed, 0xac, 0x6f, 0x53, 0x91, 0xca, 0x34, 0xe6, 0x6b, 0xbc, 0x1e, 0x2a, 0xde, 0xe6, 0x4f, 0xc4, 0xc7, 0x48, 0x1c, 0xc9, 0xba, 0xae, 0x6e, 0x8b, 0x8e, 0x26, 0x67, 0xb2, 0x1b, 0xb7, 0x49, 0x8e, 0x42, 0x50, 0x94, 0xab, 0x2e, 0xff, 0x6f, 0xa6, 0xda, 0x63, 0x49, 0x40, 0xd3, 0x64, 0xc0, 0xb1, 0x40, 0x21, 0xc2, 0x3f, 0x1f, 0x2a, 0xf2, 0x0e, 0xd1, 0xf0, 0x4d, 0x3a, 0xd9, 0x7a, 0x0d, 0x23, 0xe1, 0x59, 0xcd, 0x08, 0xfd, 0xdd, 0xef, 0xd8, 0x34, 0x89, 0x3b, 0x44, 0x3d, 0xc5, 0xc8, 0x19, 0x86, 0xd3, 0x20, 0xcd, 0x7b, 0x04, 0x9f, 0x57, 0x04, 0x2c, 0x1c, 0x44, 0x4f, 0x53, 0xcc, 0x08, 0xd1, 0xad, 0x62, 0x92, 0x87, 0xcd, 0x7b, 0x23, 0x82, 0x15, 0x3a, 0x5f, 0xa2, 0x71, 0x2f, 0xa5, 0xa2, 0x45, 0x7e, 0x9c, 0x54, 0xa3, 0x3d, 0x0e, 0x2e, 0xc2, 0x1d, 0xfa, 0x06, 0xab, 0x4d, 0xe4, 0x1a, 0x36, 0x9b, 0x70, 0x53, 0x35, 0xdd, 0x2f, 0xcb, 0xef, 0x8f, 0xb9, 0x8c, 0xd0, 0xbd, 0xfc, 0x9b, 0x5e, 0x24, 0xd3, 0x35, 0x6f, 0x94, 0xdb, 0x58, 0x99, 0x98, 0x82, 0x85, 0xeb, 0x59, 0x60, 0xc5, 0xda, 0xc0, 0xcb, 0xea, 0x7e, 0xdb, 0xa5, 0x17, 0xff, 0x82, 0x79, 0x82, 0x4a, 0x3a, 0xc6, 0x79, 0x08, 0x59, 0x9b, 0xa3, 0xd0, 0x6b, 0x64, 0x89, 0x9b, 0xd5, 0x04, 0x54, 0x79, 0xb8, 0x24, 0xd8, 0x83, 0x18, 0xca, 0xd2, 0x11, 0x3e, 0x2d, 0x6e, 0x2d, 0x5a, 0xc8, 0x0d, 0x47, 0x6d, 0xad, 0x44, 0x2a, 0x66, 0x1c, 0x28, 0x2e, 0x8b, 0x54, 0xc9, 0xaf, 0x1b, 0xa9, 0xfc, 0xbf, 0x32, 0xd7, 0x5e, 0x18, 0xec, 0x96, 0x95, 0x54, 0xcd, 0x6e, 0xd9, 0x61, 0x61, 0xcd, 0xb4, 0x2f, 0x1f, 0x57, 0x05, 0xab, 0x93, 0x7d, 0x4b, 0xf1, 0xbd, 0x51, 0x20, 0xbd, 0xb4, 0x98, 0x04, 0x23, 0x8e, 0x21, 0x5c, 0x81, 0x84, 0x56, 0xba, 0xb1, 0x52, 0x11, 0x5f, 0x83, 0xdd, 0xb1, 0xff, 0x6a, 0x18, 0x6c, 0xc4, 0x75, 0x28, 0xe7, 0x95, 0x81, 0xc7, 0x03, 0x97, 0xae, 0xe6, 0xfa, 0xf4, 0x0f, 0x96, 0xac, 0xdc, 0xa6, 0x28, 0x33, 0xca, 0x8f, 0x93, 0xbd, 0x09, 0x7b, 0x17, 0x9b, 0x76, 0x60, 0x20, 0x95, 0x87, 0x6f, 0x6d, 0x81, 0x8c, 0x47, 0x71, 0x14, 0x35, 0x68, 0xfa, 0xf7, 0x55, 0xea, 0x10, 0x1d, 0xe5, 0x6f, 0x20, 0x55, 0x4c, 0x56, 0x5a, 0x1b, 0xde, 0x31, 0x57, 0xb4, 0xa2, 0x79, 0xff, 0x7a, 0x58, 0x81, 0xaa, 0x74, 0xba, 0xa9, 0x85, 0x29, 0x03, 0xd4, 0x38, 0xb6, 0xae, 0x1c, 0xc5, 0x1f, 0x80, 0xc4, 0xb3, 0xe3, 0xc8, 0x6d, 0x6d, 0xd3, 0xe6, 0x8d, 0xe5, 0x23, 0x0a, 0x1e, 0x7c, 0xc2, 0x3e, 0x93, 0x26, 0xe7, 0xa7, 0x10, 0xc9, 0xed, 0x07, 0xda, 0xe7, 0x60, 0x87, 0x0d, 0x7d, 0x58, 0xb4, 0x8d, 0x2b, 0x05, 0xc7, 0x3e, 0x94, 0x8c, 0x29, 0x78, 0x08, 0x11, 0x36, 0xb5, 0x61, 0x15, 0x42, 0x8d, 0x2a, 0x03, 0xd9, 0xe5, 0x07, 0x05, 0x4b, 0x63, 0x50, 0x1c, 0x68, 0x25, 0x00, 0x70, 0x89, 0xb2, 0xce, 0xe5, 0xd0, 0x30, 0x99, 0xee, 0xb0, 0xd8, 0x09, 0xa6, 0xaf, 0xa8, 0x74, 0x1d, 0x6a, 0x57, 0xfe, 0xef, 0xda, 0x8e, 0x05, 0x1c, 0xd7, 0x55, 0xbc, 0x13, 0xda, 0xcc, 0x15, 0x10, 0x07, 0x1b, 0xe5, 0xa8, 0x6b, 0xab, 0x43, 0xa3, 0x82, 0x97, 0x30, 0x09, 0xfc, 0x5d, 0x7e, 0x7f, 0xc0, 0xda, 0xea, 0xd4, 0x32, 0x75, 0x8c, 0xd8, 0xb1, 0x9a, 0x71, 0x6d, 0x64, 0x6a, 0x86, 0xe0, 0x37, 0xb0, 0xb7, 0x79, 0x20, 0x17, 0x59, 0x50, 0xa7, 0x9b, 0xc5, 0x63, 0xa5, 0x3e, 0x46, 0xe6, 0x4c, 0xfc, 0x36, 0xda, 0x67, 0x00, 0x63, 0xe1, 0xe3, 0x18, 0xb8, 0x51, 0x8f, 0x67, 0x19, 0x87, 0x20, 0x5a, 0x8e, 0x7e, 0x78, 0xdd, 0xa4, 0xa0, 0x28, 0xce, 0x10, 0xdb, 0x33, 0xb1, 0x96, 0xf8, 0x15, 0xa6, 0x29, 0x28, 0x03, 0x99, 0x54, 0xe0, 0x75, 0xb9, 0xd8, 0xe7, 0xe2, 0x2b, 0x97, 0xae, 0xca, 0xff, 0xb0, 0xdf, 0xfa, 0x63, 0xec, 0x38, 0x0c, 0x16, 0x59, 0x9a, 0x2d, 0x20, 0x34, 0x5d, 0x23, 0xc1, 0x0c, 0xe7, 0x8e, 0xa7, 0x25, 0x7d, 0x6d, 0x63, 0x1b, 0x58, 0xe5, 0x1e, 0xc7, 0xfc, 0x3e, 0x88, 0x66, 0xc5, 0x2f, 0x12, 0xf8, 0xc3, 0x5b, 0x5d, 0xe7, 0xc8, 0x1b, 0xf2, 0xe9, 0xbe, 0x7e, 0x33, 0x27, 0x3e, 0x8e, 0x92, 0x9f, 0x5f, 0xd5, 0x00, 0xc7, 0xcc, 0x20, 0xa8, 0x73, 0x1a, 0x83, 0xde, 0xf8, 0x58, 0x9d, 0x52, 0x92, 0xe7, 0x1d, 0x8a, 0x03, 0x8c, 0x85, 0x8f, 0x7d, 0xc3, 0x2f, 0xe6, 0xc2, 0x56, 0x8d, 0xc1, 0x8a, 0x2f, 0xb4, 0x77, 0x25, 0x6a, 0x1c, 0x32, 0x61, 0xaf, 0xa1, 0xe7, 0xae, 0xbf, 0xce, 0x8c, 0x80, 0x4c, 0x5b, 0x85, 0xf5, 0x0e, 0xf4, 0x5f, 0xb8, 0x13, 0x3d, 0xc0, 0x25, 0x57, 0x12, 0x9e, 0xae, 0x94, 0x13, 0xb0, 0x7d, 0x5b, 0x60, 0x22, 0x5a, 0x64, 0xa1, 0x8d, 0xd0, 0x23, 0x4a, 0x26, 0x8b, 0x9b, 0x1d, 0x36, 0x05, 0x77, 0xf0, 0xca, 0x62, 0x57, 0xb0, 0xab, 0x98, 0x68, 0xa6, 0x90, 0xd2, 0x37, 0xf9, 0x93, 0x17, 0xc7, 0x74, 0xe2, 0x26, 0xe1, 0x8a, 0xb7, 0xa5, 0xab, 0x97, 0x8a, 0x7b, 0x7c, 0x69, 0x85, 0x7b, 0xef, 0xff, 0x38, 0x42, 0x36, 0x90, 0x8e, 0x62, 0xb1, 0xd0, 0xff, 0xc0, 0xbf, 0x6e, 0x08, 0x3a, 0xd5, 0xe1, 0xd8, 0x8d, 0xcd, 0x64, 0x4d, 0x76, 0x80, 0x3f, 0x1e, 0x18, 0x96, 0x49, 0x5a, 0x9e, 0x9d, 0xab, 0x11, 0x21, 0x59, 0xe6, 0x50, 0xcc, 0x5b, 0x18, 0x53, 0x3e, 0xd5, 0x7b, 0xf7, 0x2f, 0xad, 0x2e, 0x6e, 0x57, 0xd0, 0x38, 0x36, 0x8b, 0xc9, 0xca, 0x4c, 0x2a, 0x92, 0xc4, 0x9d, 0xb7, 0xaa, 0x7b, 0xbd, 0xc7, 0x67, 0xb9, 0xdb, 0x1e, 0x8e, 0x06, 0xf5, 0x15, 0x21, 0x26, 0x48, 0x3f, 0x78, 0xe3, 0x0b, 0x4b, 0x93, 0x0d, 0x5c, 0x2c, 0xaf, 0xbe, 0x7b, 0x78, 0x17, 0xe2, 0x36, 0x0e, 0x3d, 0xf7, 0xa4, 0xfc, 0x09, 0x12, 0x16, 0xa0, 0x71, 0x23, 0x4b, 0x0d, 0x4a, 0x79, 0xe3, 0xaf, 0x5e, 0x89, 0x16, 0x33, 0xbe, 0xeb, 0xa6, 0xa1, 0x5a, 0xa5, 0x12, 0xcb, 0xce, 0xac, 0x0d, 0xeb, 0x7f, 0xa8, 0x2e, 0x88, 0xe7, 0xf8, 0xe9, 0x99, 0x2d, 0xf6, 0xbe, 0xed, 0xf9, 0x7c, 0xb0, 0xca, 0x86, 0xa7, 0xf9, 0xd5, 0xf9, 0xda, 0xfc, 0x31, 0xf1, 0x06, 0x7b, 0xeb, 0x5f, 0x29, 0x0a, 0x96, 0x98, 0x15, 0xc4, 0x32, 0xa8, 0x73, 0x3c, 0x53, 0xe9, 0x07, 0xb7, 0x7f, 0xd5, 0x36, 0x98, 0xd7, 0x19, 0xc5, 0x1b, 0xf9, 0xea, 0xe3, 0x46, 0x26, 0x9c, 0x6a, 0x1d, 0xa0, 0x71, 0x62, 0x16, 0x56, 0xaf, 0xc7, 0xcc, 0xc3, 0xf5, 0x8b, 0xf7, 0x14, 0xce, 0xdf, 0x9c, 0x89, 0x87, 0xaf, 0x81, 0x1d, 0x3e, 0x6b, 0xe4, 0x69, 0x3c, 0x0d, 0x6c, 0xc6, 0x85, 0x58, 0x60, 0xb2, 0xac, 0x5d, 0x17, 0x75, 0xec, 0x44, 0xb0, 0x04, 0x75, 0x49, 0x03, 0x25, 0x04, 0x05, 0xd6, 0xd4, 0xb6, 0xef, 0x55, 0xe5, 0x1e, 0x22, 0xbc, 0xec, 0x95, 0x61, 0x57, 0x5a, 0xd1, 0x58, 0xac, 0xe8, 0xba, 0x24, 0xf7, 0x39, 0x78, 0x16, 0xd6, 0xba, 0xd1, 0xb4, 0x46, 0xce, 0xb2, 0x01, 0xce, 0x28, 0x0b, 0xff, 0xfa, 0x77, 0xe0, 0x71, 0x0b, 0x49, 0x9e, 0xe5, 0xed, 0x29, 0xab, 0xf2, 0x69, 0x0b, 0x40, 0xbf, 0x9c, 0xeb, 0x7b, 0xc4, 0xa8, 0xb0, 0xb0, 0xd5, 0xa9, 0x56, 0x01, 0x5c, 0xeb, 0x4c, 0x2e, 0xe6, 0x5a, 0x1b, 0xae, 0xe1, 0x39, 0x49, 0xfe, 0xa3, 0x17, 0x7d, 0x39, 0xaf, 0xff, 0xe3, 0xe9, 0x34, 0xf0, 0xd2, 0x1c, 0xd7, 0x8c, 0xad, 0xbb, 0xb2, 0x14, 0x07, 0x18, 0x9d, 0x94, 0x0a, 0xc6, 0xac, 0x5b, 0x19, 0xad, 0xf9, 0xae, 0xb4, 0x5d, 0xa3, 0xbe, 0x9c, 0xa3, 0x16, 0xd7, 0x38, 0x5a, 0x8d, 0xd9, 0x38, 0x84, 0xd6, 0xec, 0x78, 0x9a, 0x55, 0x70, 0x27, 0x20, 0x4c, 0x33, 0x28, 0x7b, 0x5a, 0xe7, 0xb8, 0x07, 0x41, 0xd3, 0x52, 0x65, 0xec, 0xc8, 0xcf, 0x12, 0xb0, 0x57, 0xd2, 0x3e, 0xd2, 0x41, 0x63, 0xdb, 0x49, 0x2f, 0xda, 0xf4, 0xc6, 0xa3, 0xff, 0x40, 0xf2, 0x2f, 0x6f, 0xf7, 0xf6, 0xe5, 0x42, 0xe4, 0x41, 0x0e, 0xea, 0xbc, 0x85, 0x1f, 0x5e, 0xae, 0x03, 0xe8, 0x79, 0x3b, 0x09, 0x0f, 0x9c, 0x48, 0xb9, 0xbd, 0x9b, 0x71, 0x0b, 0x97, 0xd7, 0xa1, 0x16, 0xf0, 0xa7, 0xdf, 0x8b, 0x3c, 0xfd, 0x6b, 0x82, 0xc8, 0x46, 0x0a, 0x79, 0xa9, 0x91, 0x9e, 0x99, 0xf3, 0xf4, 0xf9, 0x3c, 0x2b, 0x2b, 0xf3, 0xad, 0xfe, 0x83, 0xba, 0x2e, 0x32, 0xf7, 0x6a, 0x40, 0xde, 0x98, 0xde, 0x1e, 0xd6, 0x32, 0xc5, 0x8b, 0x6a, 0x2c, 0xf8, 0xcd, 0x50, 0xb0, 0x0b, 0xfa, 0xde, 0x0c, 0x21, 0x72, 0x7c, 0x58, 0x05, 0xad, 0x5a, 0x59, 0x77, 0x37, 0x5e, 0xa6, 0xc4, 0xf8, 0x61, 0x09, 0x9a, 0xb9, 0x9a, 0x28, 0x19, 0xe4, 0x5a, 0x65, 0x2d, 0x8b, 0xfa, 0x02, 0x1c, 0xac, 0x12, 0x89, 0x5b, 0xb4, 0xec, 0x6b, 0xa6, 0x41, 0x39, 0xe7, 0x4f, 0x2c, 0x02, 0x2d, 0xd7, 0xc7, 0xe1, 0xc4, 0xbb, 0x63, 0x70, 0x29, 0x90, 0x16, 0x02, 0xb9, 0x52, 0xbb, 0x91, 0xd0, 0xfa, 0x39, 0xf8, 0x33, 0x4e, 0x09, 0x62, 0xab, 0xfd, 0xf2, 0x03, 0xf3, 0xeb, 0x17, 0x06, 0xd4, 0xca, 0x34, 0xc6, 0x8f, 0xea, 0x25, 0x40, 0x7b, 0x52, 0xa8, 0xc9, 0xef, 0x0f, 0x63, 0xfc, 0x62, 0xcc, 0x29, 0xf7, 0xd1, 0xa3, 0x79, 0xc7, 0x62, 0x33, 0x47, 0x20, 0x46, 0xf3, 0xff, 0x51, 0xe3, 0xc5, 0xc8, 0x78, 0x33, 0xcf, 0x06, 0xf2, 0x67, 0x86, 0x22, 0x16, 0xd1, 0x0b, 0x8d, 0x23, 0x00, 0xbb, 0x02, 0x76, 0x2d, 0x02, 0x0c, 0x01, 0xd6, 0x6f, 0xc9, 0xf8, 0xa8, 0x0e, 0xed, 0xcd, 0xa2, 0xf2, 0x09, 0x5f, 0x78, 0x11, 0x0e, 0x6f, 0x35, 0x55, 0x0d, 0x53, 0x25, 0xef, 0x40, 0xee, 0xf2, 0xef, 0x4e, 0xdf, 0x0d, 0x11, 0xcb, 0xf9, 0x4f, 0xda, 0xfe, 0xf3, 0xe1, 0xe4, 0xe8, 0x61, 0x59, 0x77, 0x81, 0xe3, 0x25, 0x58, 0x45, 0x9d, 0x2d, 0xe6, 0xef, 0xe7, 0xb4, 0x62, 0x85, 0x45, 0x7f, 0x8f, 0x94, 0x99, 0x3a, 0x7b, 0xbd, 0x97, 0x17, 0x9c, 0x70, 0x7a, 0xb8, 0x1e, 0xf8, 0xf5, 0x4f, 0x7c, 0xb8, 0x6d, 0x04, 0x4e, 0xb4, 0x65, 0x97, 0x62, 0x53, 0x3a, 0x46, 0x0d, 0x63, 0x10, 0xf1, 0xc3, 0x5d, 0x0c, 0x7c, 0xe6, 0xea, 0xc4, 0x75, 0xdc, 0xa7, 0xf3, 0xf6, 0x64, 0x25, 0x72, 0xcd, 0x2a, 0x35, 0x63, 0xdb, 0x99, 0x62, 0xaf, 0xba, 0xf0, 0xbe, 0xb4, 0xa3, 0x98, 0xe2, 0x37, 0x8e, 0xb5, 0x30, 0xa0, 0x9a, 0xfb, 0x5b, 0x66, 0xb0, 0xc2, 0x2a, 0xc8, 0x63, 0x5d, 0x78, 0xbe, 0x1b, 0xa8, 0x80, 0x2f, 0x73, 0xe1, 0x57, 0x64, 0xdf, 0xb9, 0xba, 0xbd, 0x92, 0xaa, 0x0a, 0xa2, 0x9f, 0x8a, 0x95, 0xbd, 0x5e, 0x61, 0x17, 0x66, 0x11, 0x78, 0x81, 0x5f, 0xc7, 0xb2, 0xf8, 0xc2, 0x81, 0x1f, 0x21, 0x37, 0x94, 0xcf, 0x9c, 0x6a, 0x4e, 0xe4, 0xce, 0xbd, 0xdc, 0xeb, 0xe4, 0x3a, 0x6b, 0x6d, 0x14, 0xcb, 0x8e, 0xc0, 0x26, 0xad, 0xe0, 0x23, 0x34, 0x22, 0xea, 0x0b, 0xae, 0x66, 0x47, 0xb7, 0xa0, 0xe5, 0x05, 0x0a, 0x38, 0xab, 0x4f, 0x9a, 0x83, 0x1c, 0x49, 0x05, 0x77, 0xe5, 0x3c, 0x84, 0x36, 0x32, 0xf3, 0xc2, 0x91, 0x22, 0x65, 0xee, 0xcb, 0x77, 0x94, 0x0e, 0xa0, 0x93, 0xb4, 0x97, 0x86, 0xa0, 0x90, 0x3b, 0x33, 0x0e, 0x2a, 0x03, 0x5f, 0x42, 0xa1, 0x9d, 0xcb, 0x8c, 0x58, 0xf7, 0x82, 0x5a, 0x55, 0x0d, 0x5f, 0xac, 0xe7, 0xff, 0xcf, 0xc8, 0x8c, 0x66, 0xd8, 0x2f, 0x11, 0xe8, 0x5b, 0xcf, 0xfb, 0x0a, 0x96, 0x7a, 0x26, 0x46, 0xec, 0x97, 0xac, 0x5e, 0xe9, 0x18, 0x08, 0xef, 0x81, 0xac, 0x7c, 0x49, 0x98, 0x35, 0xb0, 0x7e, 0xc8, 0x7c, 0x9b, 0xb9, 0x5e, 0x23, 0xa6, 0xd1, 0xa5, 0xdc, 0x0f, 0x1e, 0x68, 0xd9, 0x8c, 0x8c, 0xb2, 0x84, 0x32, 0xed, 0xd8, 0x6f, 0x94, 0x94, 0xb9, 0x8e, 0x2f, 0x1f, 0x45, 0xa4, 0x06, 0x94, 0x3c, 0xfb, 0x89, 0xb0, 0x38, 0x58, 0xbb, 0x7b, 0xee, 0x2e, 0x94, 0x20, 0xb1, 0x12, 0xa4, 0xfc, 0x38, 0x6f, 0xfa, 0xf5, 0xa0, 0x7b, 0x44, 0x0d, 0xb4, 0x69, 0x38, 0x36, 0x6d, 0xe1, 0x32, 0x69, 0xb5, 0xad, 0x1e, 0xf2, 0x70, 0xb5, 0x98, 0x0e, 0xbd, 0x2d, 0x52, 0xb7, 0x79, 0x0d, 0xb6, 0xbf, 0x06, 0xc1, 0xcd, 0x1c, 0x4a, 0x22, 0x60, 0x83, 0xfa, 0xa6, 0x5d, 0x38, 0x18, 0xd3, 0x7b, 0x24, 0xba, 0xfa, 0x21, 0x28, 0x0e, 0x21, 0x85, 0xb1, 0x9b, 0x41, 0x11, 0x8c, 0xc9, 0xb2, 0x0a, 0xfc, 0xa4, 0xe3, 0x73, 0x0a, 0xdd, 0x4e, 0x2f, 0x1d, 0x11, 0xab, 0x67, 0xca, 0x4e, 0x64, 0x2b, 0xed, 0xd4, 0x4a, 0x5c, 0xf9, 0x18, 0x86, 0xc9, 0x8c, 0x0f, 0xd2, 0x98, 0x47, 0xa8, 0xe9, 0xe8, 0xdc, 0x9b, 0x3b, 0xb4, 0x68, 0x61, 0xe6, 0xfa, 0x04, 0x83, 0xe2, 0x1d, 0x96, 0x18, 0x7b, 0x89, 0xee, 0x89, 0x05, 0x95, 0x0e, 0x98, 0xcb, 0xad, 0xc8, 0xa1, 0x48, 0xb0, 0x8f, 0x1f, 0x9a, 0x97, 0x87, 0x71, 0x33, 0x58, 0xde, 0xdf, 0xd2, 0x09, 0x5f, 0xd8, 0xb1, 0x49, 0x44, 0x7d, 0x00, 0xdc, 0x4c, 0x64, 0x93, 0x95, 0x0e, 0x95, 0xd8, 0x79, 0x8d, 0xd9, 0x0b, 0x21, 0x0c, 0x35, 0xad, 0x60, 0x24, 0xb1, 0x32, 0x26, 0x13, 0x5d, 0xfa, 0xa4, 0x57, 0x96, 0x82, 0xb1, 0x7c, 0x86, 0xdc, 0x6d, 0x32, 0xea, 0x5c, 0x24, 0xa2, 0x18, 0x95, 0x75, 0x02, 0x40, 0x83, 0xb3, 0x67, 0xf2, 0x0a, 0x8b, 0xdb, 0xe0, 0x9f, 0xe7, 0xb0, 0xe6, 0x46, 0x13, 0x14, 0x47, 0xbc, 0x1e, 0xe5, 0x3a, 0xf5, 0x84, 0xc6, 0xa5, 0xc9, 0x09, 0x72, 0x28, 0xea, 0xe8, 0x50, 0x5d, 0x19, 0x2d, 0x48, 0x5e, 0x99, 0x60, 0xd6, 0x88, 0xe4, 0x63, 0x5c, 0x7f, 0x9e, 0x9d, 0xbd, 0x72, 0xc7, 0x59, 0x27, 0xa1, 0x34, 0x68, 0x30, 0x1c, 0x40, 0x0e, 0x25, 0xcd, 0xbf, 0x1c, 0x9e, 0xb8, 0x33, 0x59, 0x56, 0x82, 0x43, 0x26, 0x3a, 0x30, 0x68, 0x62, 0xc0, 0x32, 0xea, 0x8c, 0x7a, 0xa0, 0x0b, 0x27, 0xeb, 0xc3, 0x81, 0x63, 0x99, 0xd7, 0x2a, 0xf9, 0x63, 0x0f, 0xfc, 0x57, 0x15, 0xda, 0x3b, 0xfd, 0x3a, 0x65, 0xee, 0x27, 0x32, 0x61, 0x93, 0xac, 0x84, 0x06, 0x12, 0x26, 0x75, 0x58, 0xf0, 0x53, 0xd9, 0xa9, 0xc5, 0xbb, 0x29, 0x5f, 0xf0, 0x93, 0xd6, 0xf7, 0x89, 0xe2, 0xdd, 0x4a, 0x97, 0xe2, 0x9c, 0x0f, 0x83, 0xa9, 0xe3, 0xa2, 0xcd, 0x08, 0x4f, 0x04, 0xfe, 0xb4, 0xd3, 0x22, 0xde, 0xa3, 0x98, 0x5a, 0xe6, 0xb9, 0x07, 0x3b, 0xf8, 0xa4, 0x24, 0x8c, 0x4e, 0x05, 0x1d, 0x90, 0xb1, 0xd0, 0x22, 0x89, 0xeb, 0xf5, 0x78, 0x7b, 0x7e, 0x40, 0xc9, 0x32, 0x96, 0x7d, 0xbf, 0x86, 0x3d, 0xe1, 0xd1, 0xde, 0xce, 0xa5, 0x5c, 0xf3, 0xac, 0xf4, 0xf5, 0xd7, 0x33, 0x07, 0xfe, 0x35, 0xef, 0x8f, 0x77, 0xda, 0x0c, 0x53, 0x17, 0x74, 0x0e, 0x1a, 0x9b, 0x9a, 0xc3, 0xcb, 0x5f, 0x0d, 0x75, 0xd3, 0x2b, 0x3e, 0x63, 0xc7, 0x4f, 0x10, 0x73, 0x4a, 0xf2, 0xde, 0x21, 0x32, 0xa7, 0xc0, 0xbb, 0xe6, 0x41, 0x0a, 0xd0, 0x0a, 0xe9, 0x16, 0xe6, 0x5f, 0x6d, 0x44, 0x6b, 0xe4, 0xdb, 0x3e, 0xee, 0x42, 0x4f, 0x81, 0x8f, 0x66, 0x09, 0x19, 0xb4, 0x70, 0xc2, 0xab, 0xfe, 0xcc, 0x40, 0xb9, 0x7c, 0x9e, 0x29, 0x22, 0x1e, 0x64, 0x15, 0xe8, 0x6c, 0xd7, 0xe6, 0x36, 0x77, 0x11, 0x5c, 0xa2, 0x10, 0xf5, 0xe4, 0xaf, 0x39, 0xcc, 0xb1, 0x96, 0xd9, 0x2c, 0x0e, 0x46, 0xb4, 0x1e, 0xf3, 0xa9, 0x99, 0x7f, 0xd6, 0x29, 0xdd, 0xa7, 0xc3, 0x73, 0x09, 0x49, 0xaf, 0x7a, 0xd0, 0x9a, 0x0a, 0xbf, 0x44, 0xb6, 0x93, 0xd1, 0x49, 0x3f, 0x70, 0x0f, 0x49, 0x47, 0x7e, 0xb5, 0x29, 0x70, 0xe6, 0x17, 0x7c, 0x51, 0xf1, 0x27, 0xf7, 0x1c, 0x1d, 0x3d, 0x25, 0x7e, 0x70, 0x18, 0x5c, 0xc7, 0x0c, 0x20, 0xf0, 0x4b, 0x04, 0xed, 0xa6, 0x08, 0x6e, 0x0d, 0x6c, 0x89, 0xb9, 0x02, 0x47, 0x0a, 0x41, 0x8b, 0x8c, 0xdc, 0x21, 0x25, 0x53, 0x0b, 0x48, 0xd0, 0x29, 0x3f, 0xd0, 0x16, 0x05, 0xe0, 0x8b, 0x4a, 0x7e, 0x7d, 0xde, 0x0e, 0x3a, 0x6f, 0xd2, 0x17, 0xaa, 0xb9, 0x68, 0x35, 0xf4, 0x33, 0x2d, 0x8d, 0x31, 0xe8, 0x0f, 0x29, 0xd9, 0xbc, 0x6f, 0xb4, 0x7b, 0x52, 0x77, 0x7e, 0xb2, 0x2c, 0xae, 0xc7, 0x54, 0x14, 0xc9, 0x39, 0xec, 0xbb, 0xc5, 0xb6, 0x6b, 0xa1, 0x32, 0x54, 0x1a, 0x34, 0xd2, 0xa6, 0xd3, 0x3c, 0x62, 0x3e, 0x71, 0x76, 0xb8, 0x6f, 0x85, 0x7f, 0x0e, 0x58, 0x4b, 0xf4, 0x9e, 0x1d, 0xdc, 0xd8, 0x6f, 0x78, 0xa4, 0x36, 0x6e, 0x71, 0x17, 0x07, 0xc0, 0x69, 0xa0, 0x55, 0x57, 0x5d, 0xda, 0xa1, 0xc3, 0x69, 0x03, 0x83, 0x4b, 0x8b, 0xae, 0x90, 0x3d, 0xaa, 0xb7, 0x80, 0x82, 0xd7, 0x7c, 0x91, 0x75, 0xd2, 0x4a, 0x26, 0xf6, 0xd0, 0x16, 0xb4, 0xb9, 0x7b, 0x6e, 0xde, 0xe4, 0x3b, 0xaf, 0xdf, 0xda, 0xb4, 0x77, 0x29, 0x51, 0x90, 0x5d, 0x4b, 0xab, 0x7e, 0xe0, 0x18, 0x83, 0x7a, 0x9e, 0x06, 0x86, 0x50, 0xc7, 0xd4, 0x84, 0x5b, 0xd0, 0x70, 0xc6, 0x93, 0x6c, 0x17, 0xa3, 0xc7, 0xb8, 0xbe, 0x4e, 0x26, 0xb5, 0xb1, 0xf2, 0x04, 0xfc, 0x7a, 0x01, 0xdb, 0xad, 0x04, 0xc9, 0x90, 0xa9, 0x00, 0x48, 0xf8, 0x01, 0x88, 0x41, 0x9b, 0xae, 0x02, 0x8f, 0xb8, 0x82, 0x48, 0xba, 0x89, 0x5e, 0x06, 0xc8, 0xc7, 0xa6, 0x63, 0x55, 0x71, 0xf2, 0xe3, 0xe6, 0xca, 0x06, 0x8b, 0x7b, 0xa1, 0x05, 0x47, 0x63, 0xd4, 0xe1, 0x8a, 0x54, 0x17, 0x16, 0x34, 0xbb, 0xf2, 0x98, 0xb8, 0x51, 0x09, 0x09, 0x7e, 0xef, 0xa0, 0x30, 0x86, 0xa3, 0x5e, 0xa7, 0x4f, 0x03, 0x51, 0xd3, 0xf7, 0xc1, 0x33, 0x19, 0xa3, 0x80, 0xec, 0x4f, 0x21, 0xe6, 0x57, 0x71, 0xcc, 0xf3, 0x49, 0x96, 0xb0, 0x91, 0xd0, 0x22, 0xef, 0x6c, 0xb8, 0x3c, 0x64, 0x03, 0x54, 0x83, 0x85, 0x00, 0x7b, 0xfc, 0x8e, 0xc4, 0xd0, 0x4f, 0xdc, 0x47, 0x46, 0x34, 0x96, 0x1f, 0xe4, 0x28, 0x93, 0xde, 0xc6, 0x64, 0x78, 0xa1, 0x65, 0x0f, 0x21, 0xe6, 0x18, 0xb3, 0x43, 0x9e, 0xda, 0xee, 0x4f, 0x84, 0x4d, 0x6a, 0x99, 0xac, 0xff, 0x0e, 0xb9, 0x5f, 0xec, 0x76, 0x31, 0x26, 0x45, 0xa1, 0x51, 0x25, 0x70, 0xea, 0x58, 0xaa, 0x50, 0x3a, 0xdc, 0x06, 0xc6, 0x7b, 0x6c, 0x9c, 0x78, 0x50, 0x73, 0x37, 0xd1, 0x03, 0x5f, 0xa1, 0x49, 0xbf, 0x03, 0x71, 0xe6, 0xff, 0x3a, 0x24, 0x02, 0x46, 0xce, 0x6f, 0x50, 0x11, 0x98, 0xd4, 0x1a, 0x09, 0xe8, 0x74, 0xcc, 0x7e, 0x27, 0x24, 0xb6, 0x11, 0xba, 0xc2, 0x0e, 0xb0, 0x2a, 0xca, 0x34, 0xc8, 0x82, 0x24, 0x3a, 0xb5, 0xf9, 0x40, 0xa4, 0x7e, 0xd1, 0x65, 0x6c, 0xbf, 0x7f, 0x46, 0x4a, 0xe6, 0x0c, 0xd7, 0x32, 0xa2, 0xbb, 0x5e, 0x1d, 0x99, 0xec, 0xcd, 0x0c, 0x5a, 0x40, 0x4f, 0x4a, 0x92, 0xfe, 0x21, 0xf2, 0x82, 0xb6, 0xa3, 0xb2, 0xb0, 0x24, 0xaf, 0xce, 0xdd, 0x56, 0x29, 0x68, 0x38, 0x11, 0xd7, 0xfe, 0xd1, 0x72, 0x73, 0x34, 0x50, 0xd1, 0xff, 0xd4, 0xe7, 0xea, 0x59, 0x13, 0x85, 0x3f, 0x0f, 0x16, 0x4d, 0xb8, 0x74, 0xb4, 0x46, 0x8d, 0xf4, 0x7e, 0x54, 0x65, 0xa4, 0xfc, 0x67, 0xc0, 0x1d, 0x3a, 0xf2, 0x92, 0x8b, 0x83, 0x9f, 0x30, 0x01, 0x6d, 0x41, 0x70, 0x10, 0x16, 0x09, 0x0c, 0x97, 0xac, 0xfe, 0x48, 0xdc, 0x33, 0xa7, 0xd5, 0xdc, 0x82, 0x0a, 0xf4, 0xe0, 0x8f, 0xdb, 0xdf, 0x51, 0xed, 0xed, 0x64, 0xcd, 0x93, 0xec, 0xd3, 0x7a, 0xdf, 0x4e, 0x1a, 0x9b, 0xdb, 0x87, 0x2f, 0x61, 0xbe, 0x7c, 0xae, 0x03, 0xb6, 0x3b, 0xc4, 0x11, 0xe4, 0xe9, 0x4b, 0x05, 0xa8, 0xfb, 0x36, 0x1b, 0x20, 0xaa, 0x30, 0x62, 0xeb, 0xa0, 0x80, 0x13, 0x33, 0xf8, 0x30, 0x22, 0xea, 0x65, 0x6e, 0x14, 0x53, 0xb1, 0x32, 0x10, 0xc5, 0x6a, 0x21, 0x38, 0xac, 0xd8, 0xb2, 0x3a, 0xd0, 0x31, 0x8f, 0x21, 0xda, 0x10, 0x3e, 0x72, 0x14, 0x24, 0x00, 0x74, 0x70, 0x25, 0xf9, 0xcf, 0xcc, 0x0d, 0x92, 0x58, 0x74, 0x84, 0x1c, 0x2c, 0xe8, 0x9c, 0xb6, 0xfc, 0xe0, 0xbe, 0x70, 0xa7, 0x8e, 0xe5, 0xb0, 0x0e, 0x23, 0x09, 0xd5, 0x24, 0x94, 0xdf, 0x1b, 0x44, 0x9e, 0xbf, 0xbe, 0xc8, 0x08, 0xe5, 0x63, 0xd7, 0x28, 0xdd, 0xb3, 0x7e, 0xa8, 0x39, 0x49, 0x02, 0x8a, 0x85, 0xce, 0x75, 0x6a, 0x7d, 0x62, 0x88, 0x03, 0x7d, 0x3e, 0xa0, 0xf5, 0x38, 0x98, 0x2c, 0xc6, 0xad, 0xc7, 0x35, 0x26, 0x57, 0xa8, 0x36, 0x77, 0xa4, 0x40, 0x2f, 0x8c, 0xa9, 0xa3, 0xf5, 0xb1, 0x14, 0x14, 0xcc, 0xec, 0x62, 0x6d, 0x37, 0x83, 0x52, 0xc2, 0x0f, 0xbe, 0x99, 0x41, 0xd3, 0xee, 0xd7, 0x5c, 0x3f, 0xae, 0xca, 0x2b, 0x20, 0x69, 0xc1, 0x0b, 0x66, 0x1d, 0x54, 0x8c, 0x7b, 0x5e, 0x53, 0x8a, 0xd3, 0x9d, 0xfc, 0x99, 0xc5, 0xaa, 0x71, 0xa7, 0x99, 0x78, 0x69, 0xdc, 0xe2, 0x21, 0x25, 0xc5, 0x0e, 0x29, 0xa6, 0xb2, 0x3b, 0x07, 0x1d, 0x5c, 0x4c, 0xe1, 0xa3, 0xcb, 0x3c, 0x98, 0x2a, 0x77, 0xb3, 0x04, 0xb3, 0xae, 0xd7, 0x81, 0xc2, 0x35, 0x65, 0xaa, 0x0f, 0x32, 0x00, 0x64, 0x7f, 0x49, 0xc9, 0x1f, 0x52, 0x06, 0x2f, 0x58, 0x9e, 0x7b, 0x09, 0x62, 0xfc, 0x2a, 0xe2, 0x67, 0x81, 0x25, 0x93, 0xaa, 0xf0, 0x73, 0x18, 0x0e, 0x2d, 0xb6, 0x9c, 0xdc, 0xf5, 0x0b, 0xd6, 0xc1, 0xcd, 0x32, 0x98, 0x16, 0x38, 0xef, 0xa5, 0x64, 0x2d, 0xaf, 0xc4, 0x28, 0xc8, 0x6f, 0x12, 0xd3, 0x40, 0xda, 0x9c, 0x15, 0x19, 0xb1, 0x2d, 0x5b, 0x9b, 0x70, 0x65, 0x97, 0x82, 0x2f, 0x0b, 0x3f, 0xf7, 0xc6, 0xa4, 0x98, 0xbf, 0x34, 0x45, 0x34, 0xb3, 0x42, 0xa5, 0xb9, 0x70, 0x63, 0x76, 0xe5, 0x4f, 0xdf, 0xf6, 0xcf, 0x98, 0x30, 0xc1, 0x70, 0xf2, 0xac, 0xe9, 0x61, 0x1e, 0x65, 0x48, 0xe6, 0xe5, 0x4e, 0x15, 0x2c, 0x4f, 0x9f, 0xb6, 0xcf, 0x16, 0x7a, 0xd5, 0x9f, 0x5a, 0xce, 0xb6, 0xa4, 0x96, 0x7c, 0xc8, 0x60, 0xd3, 0xb8, 0x7a, 0x53, 0x1c, 0xb2, 0x4f, 0xc5, 0x31, 0x76, 0x35, 0xbf, 0x80, 0x11, 0x13, 0x5b, 0x50, 0xf6, 0xa1, 0x3d, 0x40, 0xa0, 0x7c, 0x62, 0xf0, 0x78, 0x7a, 0x19, 0xfe, 0xf8, 0x3a, 0x4e, 0x34, 0x11, 0x00, 0x0e, 0xff, 0xca, 0xc0, 0x48, 0x23, 0x2b, 0x79, 0xd1, 0xae, 0x59, 0xc5, 0xab, 0x2a, 0x02, 0xad, 0x87, 0x17, 0xfb, 0xc1, 0x88, 0x99, 0x28, 0x69, 0x4a, 0x6d, 0x9d, 0x76, 0x23, 0x21, 0x02, 0xfc, 0xa9, 0x85, 0x3c, 0x64, 0x74, 0x5d, 0x4a, 0xbd, 0x25, 0x58, 0x6c, 0x53, 0xa6, 0x46, 0x8b, 0x83, 0xb4, 0x85, 0xd5, 0xcd, 0x9b, 0xbc, 0xa8, 0x2b, 0x41, 0xcc, 0xb1, 0xa1, 0x66, 0x04, 0x55, 0x16, 0x2a, 0x95, 0x4f, 0x62, 0xd0, 0x45, 0x9b, 0xa8, 0xc1, 0x67, 0x93, 0xe6, 0xd4, 0x0a, 0x59, 0xca, 0xcc, 0x71, 0x74, 0xc8, 0x23, 0xc3, 0xbe, 0x69, 0x06, 0x04, 0x7d, 0xe6, 0xa0, 0x44, 0xd0, 0xf5, 0x9b, 0x16, 0x4d, 0xe3, 0xe4, 0x44, 0xe8, 0xe3, 0xaf, 0xc1, 0x16, 0xa6, 0xbc, 0xdf, 0x33, 0x2b, 0xd8, 0xc2, 0x21, 0xd9, 0xa6, 0x15, 0x33, 0xcb, 0x9f, 0xfb, 0x49, 0x6b, 0x58, 0x49, 0x3c, 0x42, 0x03, 0xf2, 0x7c, 0x0e, 0x39, 0xc3, 0xf7, 0x15, 0xf7, 0x50, 0x3d, 0xba, 0xe6, 0x2e, 0xe2, 0x4e, 0xdf, 0x62, 0x24, 0x28, 0xae, 0x1a, 0xce, 0xf8, 0x16, 0x9b, 0x5d, 0x58, 0x16, 0x7b, 0x60, 0xa4, 0x6b, 0x10, 0x25, 0x0c, 0x56, 0x28, 0x91, 0xe7, 0x9f, 0xfa, 0x50, 0x4a, 0xda, 0x5d, 0x2f, 0xda, 0xe9, 0x38, 0xc5, 0xde, 0xc2, 0x3a, 0x59, 0x99, 0x73, 0xcb, 0x00, 0xd6, 0x63, 0x42, 0x06, 0xc4, 0xda, 0x58, 0x8f, 0x04, 0xc3, 0xdc, 0x7e, 0x01, 0xb1, 0xa9, 0x96, 0x80, 0x21, 0xd6, 0xdf, 0x78, 0xff, 0x2c, 0x4c, 0x23, 0x6b, 0xdd, 0x9a, 0x55, 0xbc, 0x72, 0x7b, 0x0d, 0xc5, 0x06, 0xf4, 0x49, 0x58, 0xb2, 0x04, 0x1f, 0x09, 0x48, 0x86, 0x0a, 0x34, 0x44, 0x58, 0x82, 0x42, 0xff, 0xbd, 0xcf, 0x27, 0x26, 0x00, 0x1e, 0x2f, 0x6b, 0x5b, 0xd5, 0xfb, 0x7a, 0x16, 0x24, 0xc6, 0x2f, 0xf3, 0xdc, 0xee, 0x06, 0xca, 0x85, 0xaf, 0xd3, 0x71, 0xab, 0x31, 0xb3, 0xde, 0x78, 0xc5, 0x42, 0x90, 0x88, 0x6b, 0x0e, 0x2b, 0xf8, 0x99, 0x4c, 0x62, 0xc0, 0x37, 0xca, 0x19, 0x43, 0xee, 0x25, 0xcb, 0x25, 0xa2, 0x3c, 0x2a, 0x5d, 0x3d, 0xe4, 0x06, 0x8b, 0xaf, 0xde, 0x70, 0x8b, 0x33, 0x06, 0x1f, 0x4a, 0xd3, 0xcc, 0x13, 0xd8, 0x2e, 0xe8, 0x77, 0xbf, 0x79, 0x4a, 0xcc, 0x94, 0xc4, 0x50, 0x44, 0xcb, 0x7e, 0x3c, 0x6c, 0xcf, 0x3c, 0xe5, 0x0e, 0x53, 0xb6, 0xad, 0x56, 0xe2, 0x12, 0xb2, 0x33, 0xbe, 0x66, 0x49, 0x00, 0xe7, 0x78, 0xa8, 0x64, 0x7a, 0xc8, 0xe2, 0x77, 0x3c, 0xd0, 0x19, 0x26, 0x77, 0x8a, 0xee, 0xd8, 0x05, 0x33, 0x3d, 0x52, 0xaa, 0x4f, 0x08, 0xd7, 0xa7, 0xed, 0xb0, 0x94, 0x8b, 0x2c, 0x6b, 0x3c, 0x4d, 0xfe, 0xf2, 0xf0, 0x98, 0x2c, 0x7a, 0x61, 0x66, 0x9a, 0xe6, 0x38, 0xd0, 0xcd, 0x3b, 0xb6, 0x24, 0xaa, 0x54, 0x97, 0x39, 0x80, 0xd7, 0x3d, 0xff, 0x49, 0x67, 0x0a, 0x5a, 0x2d, 0x1b, 0x0e, 0x31, 0x48, 0x2f, 0xe2, 0xc2, 0xad, 0xfa, 0xd3, 0x38, 0xab, 0x20, 0x43, 0x7f, 0x4f, 0x09, 0x4d, 0x57, 0x29, 0x92, 0xa8, 0xa7, 0x53, 0x02, 0xce, 0x14, 0xb0, 0x3f, 0x5d, 0xd3, 0x72, 0x42, 0xbd, 0xbb, 0xdf, 0xc8, 0x03, 0x9f, 0x54, 0x4a, 0x15, 0xda, 0x8a, 0x30, 0x0f, 0x2b, 0x18, 0x42, 0xe6, 0xc4, 0x39, 0x5f, 0x4c, 0x9d, 0xd0, 0x71, 0xd3, 0x0e, 0xa9, 0xa0, 0x54, 0x9d, 0x02, 0xc6, 0x92, 0x15, 0x4a, 0x23, 0x1b, 0xd8, 0x28, 0x53, 0x6f, 0x75, 0xbf, 0x7c, 0x64, 0x7d, 0x31, 0xcc, 0xc9, 0x93, 0x61, 0x23, 0x4a, 0xc3, 0xfe, 0x0c, 0x93, 0x15, 0xbd, 0xf2, 0xb9, 0x61, 0xe5, 0x91, 0xd5, 0x64, 0x11, 0xaa, 0xf2, 0x14, 0x31, 0xfb, 0x29, 0x31, 0xd3, 0x6e, 0x0a, 0x1d, 0xa1, 0x91, 0x3e, 0xed, 0x2a, 0x46, 0x6b, 0xc0, 0xe5, 0xbc, 0x58, 0x4f, 0x72, 0x9d, 0x52, 0xc6, 0x24, 0x89, 0xce, 0xd3, 0xbd, 0xc4, 0x4f, 0xfc, 0x78, 0x2b, 0x8a, 0x35, 0x4d, 0x6d, 0xc8, 0xb2, 0x70, 0x77, 0x8d, 0xfa, 0x1b, 0x30, 0x77, 0x3d, 0x8d, 0x67, 0x68, 0xe7, 0x53, 0x09, 0xe8, 0x75, 0xc6, 0x98, 0xc4, 0x87, 0xd5, 0xd8, 0xfb, 0x37, 0x04, 0xcc, 0xdb, 0xaa, 0xb5, 0xe0, 0x68, 0xe4, 0xa6, 0x68, 0xfd, 0xe1, 0xbc, 0x49, 0x36, 0xe1, 0xff, 0xf6, 0x0c, 0x03, 0xe5, 0x9f, 0x42, 0x15, 0xd3, 0xa5, 0x01, 0xab, 0xe1, 0x50, 0xbf, 0x6e, 0xde, 0xc4, 0x65, 0xb7, 0x94, 0x31, 0xb0, 0x5d, 0x4c, 0x4b, 0xd7, 0xcb, 0x95, 0xfa, 0x6f, 0x55, 0x42, 0x52, 0x8c, 0xcc, 0xb2, 0xc5, 0x2a, 0x4f, 0x54, 0x97, 0xcb, 0x65, 0x69, 0x93, 0x61, 0x49, 0x0c, 0xfd, 0x6d, 0x85, 0x70, 0xc7, 0x69, 0xc2, 0x6a, 0x07, 0x64, 0xdf, 0x2f, 0xa9, 0xec, 0x40, 0x5e, 0x61, 0x30, 0x69, 0x41, 0xe4, 0x66, 0xcb, 0x50, 0x58, 0x6b, 0xdd, 0xf6, 0x09, 0xa9, 0x6f, 0x98, 0x5d, 0x3e, 0x3c, 0xd4, 0x0a, 0x5b, 0xbe, 0x06, 0x86, 0xe9, 0x46, 0x11, 0xc0, 0x73, 0x4b, 0x5c, 0x0d, 0x40, 0x02, 0x1a, 0x65, 0xbf, 0x30, 0xcf, 0xcf, 0x29, 0x3d, 0x0f, 0x1a, 0x61, 0x89, 0x89, 0xce, 0x1f, 0x03, 0x45, 0x62, 0x4d, 0xf7, 0x2a, 0xaf, 0xb1, 0x27, 0xc3, 0xa5, 0xcd, 0x1e, 0x43, 0x3d, 0x03, 0xc1, 0xc6, 0xae, 0xfd, 0x27, 0xd9, 0xe4, 0x4c, 0xaa, 0x3d, 0x2e, 0x4f, 0x3e, 0xe8, 0x37, 0x57, 0x02, 0x4d, 0x37, 0x08, 0x15, 0xdd, 0x6a, 0x03, 0xab, 0xce, 0xc2, 0xc2, 0x60, 0x1b, 0xd9, 0xc2, 0xcc, 0xcc, 0x29, 0xe8, 0x57, 0x77, 0x7f, 0x1e, 0x4e, 0x07, 0xad, 0x3d, 0x37, 0xbc, 0x7f, 0x2f, 0x62, 0x73, 0xf1, 0x55, 0xc1, 0x28, 0x9f, 0x26, 0xf9, 0xb9, 0x7d, 0x19, 0xb9, 0xec, 0xc8, 0xc5, 0x4b, 0xb4, 0x3d, 0x47, 0x69, 0xb0, 0x88, 0xe5, 0x51, 0xf5, 0xff, 0xf1, 0x1c, 0x0d, 0x90, 0xef, 0x4b, 0x3f, 0xf8, 0xfa, 0xa3, 0x11, 0x36, 0x63, 0x3b, 0x0c, 0x40, 0x9c, 0xd3, 0xbf, 0xf4, 0x54, 0x67, 0x07, 0x51, 0xe4, 0x04, 0x8d, 0xe7, 0xea, 0xdb, 0x8f, 0x8c, 0x33, 0x94, 0xe4, 0x51, 0xdf, 0xe4, 0x3a, 0xb5, 0xbf, 0x62, 0xa3, 0x18, 0x02, 0x96, 0x50, 0x72, 0x11, 0x53, 0x9b, 0x44, 0xb7, 0x47, 0x4b, 0xcf, 0x85, 0xd1, 0x14, 0x85, 0x75, 0x12, 0x5e, 0xbd, 0xcd, 0x47, 0x48, 0xaa, 0x46, 0x56, 0xeb, 0x8e, 0x6e, 0xa6, 0xe3, 0x2b, 0x4b, 0x34, 0x0c, 0x7a, 0x41, 0xe4, 0x89, 0xa0, 0x35, 0x15, 0x0b, 0x1e, 0xf3, 0x77, 0x4f, 0x48, 0xcd, 0x21, 0xe9, 0xf8, 0x85, 0xde, 0x41, 0x83, 0x6e, 0xc8, 0xdb, 0xec, 0xcd, 0x19, 0xdb, 0x58, 0x85, 0x3d, 0xc8, 0xc2, 0xf4, 0x2c, 0x90, 0xf0, 0x18, 0xf6, 0xcc, 0xa6, 0xf6, 0x9f, 0x46, 0x19, 0x3c, 0x2e, 0xb8, 0xa6, 0x25, 0x01, 0xd7, 0xc4, 0x9d, 0x63, 0x90, 0x38, 0xa6, 0x61, 0x92, 0x88, 0xfa, 0xd9, 0x0c, 0xb1, 0xf1, 0xd3, 0xb8, 0x1c, 0xa6, 0x14, 0x18, 0xcf, 0x55, 0xf1, 0x00, 0xe1, 0x08, 0x62, 0x54, 0x30, 0x73, 0x57, 0x13, 0x56, 0x1c, 0x4f, 0x94, 0xd8, 0xbf, 0x26, 0x10, 0xa1, 0xf0, 0x2e, 0x61, 0xaf, 0x02, 0x82, 0x09, 0x0d, 0x28, 0x97, 0x76, 0x01, 0xda, 0x14, 0x85, 0x86, 0x7a, 0xe4, 0x44, 0xfc, 0x38, 0x89, 0xfc, 0x1f, 0x33, 0xb3, 0x6f, 0x36, 0xe0, 0x11, 0x5e, 0x8c, 0xb0, 0x67, 0x4e, 0x24, 0xed, 0xe1, 0x8c, 0xa9, 0xe5, 0xa7, 0x6f, 0xa4, 0x4b, 0xb1, 0xdd, 0xf2, 0xda, 0xdd, 0x10, 0x74, 0x3b, 0x3e, 0x9a, 0x08, 0x29, 0xb7, 0xa7, 0xb8, 0xd3, 0xc9, 0x83, 0x32, 0x82, 0xaa, 0x5c, 0x78, 0x7b, 0x97, 0x48, 0xd9, 0x27, 0x6a, 0x8a, 0x20, 0x71, 0x6f, 0x11, 0x0b, 0x70, 0x74, 0x41, 0xff, 0x46, 0x1f, 0xf6, 0xf9, 0x48, 0x85, 0xc6, 0xc8, 0x5f, 0xf7, 0x87, 0x7a, 0xad, 0x1f, 0x11, 0x14, 0x74, 0x4d, 0x45, 0x86, 0x34, 0x0b, 0x4f, 0xdd, 0x14, 0xf7, 0x27, 0xbb, 0x83, 0xd2, 0x5e, 0x04, 0x1f, 0xd4, 0x17, 0xdb, 0xd6, 0x42, 0x54, 0xcd, 0x4b, 0x43, 0x73, 0x4b, 0x7b, 0xf0, 0xf8, 0x5e, 0xa0, 0xaa, 0x8c, 0x96, 0x56, 0xb0, 0x46, 0x44, 0xfc, 0xf0, 0x2a, 0xe8, 0x5d, 0x1e, 0xef, 0xed, 0x8f, 0x04, 0x06, 0x94, 0x1c, 0x19, 0xd7, 0x2f, 0x60, 0x54, 0x4e, 0x8f, 0x32, 0x42, 0x96, 0xbf, 0xc7, 0x57, 0x24, 0xf3, 0xd2, 0x82, 0xf8, 0xbb, 0xf0, 0x03, 0x1f, 0x7c, 0x44, 0x81, 0x7d, 0x21, 0x5e, 0x57, 0xc9, 0x0e, 0x62, 0x30, 0xd9, 0x55, 0x66, 0xd3 ],
- const [ 0x37, 0xeb, 0xe9, 0x8e, 0xf5, 0x2b, 0xfb, 0x24, 0x0b, 0x9a, 0xd3, 0x69, 0x15, 0x3a, 0xfe, 0x08, 0x1b, 0xbc, 0xf9, 0xd7, 0xae, 0x43, 0xe8, 0xba, 0x33, 0x6b, 0x8a, 0xc5, 0x7e, 0x8a, 0x6d, 0xa0, 0xa3, 0x36, 0x5e, 0x30, 0x08, 0x07, 0x24, 0x73, 0xbf, 0x9d, 0x6e, 0xac, 0x13, 0xe5, 0x09, 0xc1, 0x61, 0x99, 0x56, 0xe1, 0x2a, 0x06, 0xfc, 0x69, 0x65, 0x12, 0xda, 0x09, 0x1a, 0x7d, 0x40, 0x23, 0x2c, 0x67, 0x5e, 0x73, 0x77, 0x13, 0xfc, 0xf5, 0x1a, 0xea, 0x6c, 0x03, 0x16, 0xc3, 0xbd, 0xbe, 0x19, 0x61, 0x32, 0xb0, 0x94, 0x3d, 0xf2, 0xb0, 0x13, 0x86, 0x01, 0x05, 0xce, 0x67, 0x6f, 0xce, 0x7b, 0x88, 0xd0, 0xa1, 0x67, 0xd7, 0xec, 0x72, 0xc5, 0x88, 0xb7, 0xb6, 0x46, 0x5a, 0x83, 0xc9, 0xea, 0x1d, 0x74, 0x8d, 0x15, 0x71, 0x34, 0x55, 0xe5, 0xd0, 0xe9, 0x01, 0xc3, 0xcf, 0x64, 0x6a, 0x38, 0xa0, 0x9b, 0x00, 0x02, 0xdc, 0x5a, 0xb1, 0x68, 0x7f, 0x35, 0x0d, 0xca, 0x35, 0xc1, 0xa8, 0x7c, 0xd4, 0x04, 0xc0, 0xd5, 0x29, 0x29, 0x20, 0x82, 0xf7, 0x78, 0x44, 0x20, 0x3d, 0x86, 0xbe, 0x0b, 0xb8, 0xa9, 0xd9, 0x70, 0xa9, 0xaf, 0x7b, 0xaa, 0xd8, 0xd0, 0x50, 0xcb, 0xd9, 0xe0, 0x24, 0x78, 0x8e, 0xca, 0x91, 0xfb, 0xed, 0x39, 0xdb, 0x93, 0x03, 0x98, 0x18, 0x0e, 0x39, 0x3d, 0x94, 0x9a, 0xd7, 0xe1, 0x73, 0xd9, 0xc6, 0x54, 0x98, 0x33, 0x9a, 0x6e, 0xc6, 0x70, 0xd0, 0x49, 0x05, 0x86, 0x53, 0xad, 0x48, 0xaf, 0x45, 0xcc, 0x4c, 0xbf, 0xfd, 0x30, 0xc3, 0xb5, 0x4c, 0xf1, 0xb2, 0x90, 0x05, 0x2b, 0x18, 0x64, 0xbc, 0xaf, 0xd0, 0xac, 0xcd, 0xf9, 0xb8, 0xe2, 0xa1, 0x63, 0x13, 0x4d, 0x2c, 0x98, 0x2c, 0x1b, 0xba, 0x4a, 0x3d, 0xaf, 0xec, 0x28, 0x8e, 0x3c, 0xfd, 0x0a, 0xe1, 0x93, 0x4a, 0x6f, 0x0e, 0x39, 0x12, 0x2a, 0xeb, 0xbd, 0x7a, 0x58, 0x6e, 0x48, 0xd4, 0x95, 0x16, 0x76, 0x20, 0x70, 0x86, 0x64, 0xd3, 0x1c, 0x74, 0x0b, 0xd8, 0x68, 0xc1, 0xcc, 0xd5, 0xf0, 0xe9, 0x4b, 0xaf, 0x95, 0x9e, 0x81, 0x50, 0x2c, 0xb0, 0x0d, 0xa8, 0x73, 0x30, 0xcb, 0xf1, 0x49, 0xd5, 0xa8, 0x38, 0x1e, 0x9e, 0xb5, 0x19, 0xa8, 0xb9, 0x7a, 0xca, 0xd7, 0xa4, 0x8c, 0x5b, 0x0c, 0x92, 0x62, 0x3b, 0x86, 0x10, 0x64, 0xff, 0x1c, 0xe8, 0x45, 0x5f, 0x32, 0x46, 0x93, 0x81, 0xe6, 0x19, 0x8c, 0x7b, 0x8a, 0xbc, 0x34, 0x13, 0x57, 0xd6, 0xa4, 0xc8, 0x5f, 0x7f, 0xa5, 0x17, 0xc4, 0xa4, 0x7d, 0xf7, 0x28, 0xac, 0x09, 0xa6, 0x64, 0x5b, 0x0c, 0xa7, 0x7d, 0xf7, 0xc7, 0x0c, 0xd4, 0xaa, 0xca, 0xf1, 0x9c, 0x28, 0x09, 0x49, 0x91, 0x91, 0x32, 0xdd, 0xe7, 0x99, 0x3e, 0x91, 0x81, 0xe6, 0x47, 0xe9, 0x64, 0xba, 0x99, 0xcd, 0x6b, 0xd1, 0x0b, 0x89, 0x3c, 0x8d, 0x90, 0x18, 0x7a, 0x50, 0x09, 0xa2, 0x3d, 0x29, 0x5d, 0x43, 0xbf, 0xb4, 0xcc, 0x0e, 0x58, 0x3b, 0x80, 0x52, 0xac, 0x21, 0x65, 0x1b, 0x23, 0x81, 0x3b, 0xfc, 0x99, 0x12, 0xea, 0x0c, 0x57, 0x4e, 0x15, 0x2f, 0x42, 0xd3, 0xf1, 0x97, 0x53, 0x09, 0x58, 0x8a, 0x47, 0x05, 0x19, 0x65, 0x98, 0xad, 0x93, 0xe1, 0xab, 0x1d, 0x82, 0x95, 0x4b, 0x4a, 0x18, 0xbc, 0x56, 0xe5, 0x50, 0x39, 0xb6, 0x83, 0x7f, 0xd8, 0x93, 0xfa, 0x2b, 0xd7, 0xc7, 0x0e, 0x21, 0xa5, 0x93, 0x4d, 0xc2, 0xe9, 0x90, 0x37, 0x9e, 0xc6, 0xe8, 0xa2, 0x44, 0x5d, 0xc5, 0x5d, 0x57, 0x94, 0x0a, 0x14, 0xe5, 0x16, 0x42, 0x73, 0xf5, 0x9c, 0xd5, 0x8e, 0x5f, 0x6a, 0x82, 0x81, 0xe1, 0x1c, 0x09, 0x53, 0x6e, 0xa2, 0x28, 0x21, 0xc9, 0x8a, 0xc9, 0x78, 0x53, 0x7d, 0x7a, 0x02, 0x22, 0x0d, 0x1d, 0x65, 0x52, 0xae, 0xe1, 0x68, 0xa0, 0x01, 0x71, 0x58, 0x34, 0x59, 0x6b, 0xaa, 0xbf, 0x78, 0x13, 0xe1, 0xc6, 0x99, 0x49, 0xb2, 0x3e, 0xb4, 0xb8, 0x66, 0x58, 0xfd, 0x51, 0x81, 0x9e, 0xad, 0xf8, 0xa1, 0x3f, 0x06, 0x7c, 0xa8, 0xa7, 0x91, 0xcd, 0x1d, 0x53, 0xab, 0x69, 0xd0, 0xe4, 0x3f, 0x18, 0xbd, 0x72, 0xd5, 0xd9, 0x33, 0x22, 0xcc, 0x1c, 0x36, 0xfb, 0xe3, 0x31, 0x21, 0xf5, 0xff, 0x01, 0x90, 0x53, 0x28, 0xfc, 0x7c, 0x33, 0xd4, 0x52, 0xa8, 0x64, 0x68, 0x66, 0x3c, 0x77, 0xfc, 0x80, 0xb0, 0x19, 0x5e, 0xc1, 0xec, 0xa0, 0x5a, 0x5d, 0xae, 0xe3, 0x39, 0x04, 0x2b, 0x4f, 0x88, 0xa1, 0xf9, 0x37, 0x1b, 0x47, 0x2c, 0x6c, 0x51, 0x68, 0xc0, 0x0e, 0x98, 0x49, 0x37, 0xa1, 0x34, 0xb2, 0x82, 0x63, 0x3d, 0xea, 0x25, 0xdd, 0xe7, 0xe3, 0x97, 0xb9, 0x07, 0xb1, 0xe7, 0xd3, 0xd2, 0x40, 0xa5, 0x93, 0xe7, 0x47, 0x00, 0x79, 0x90, 0x78, 0x2c, 0xf9, 0x44, 0xfa, 0x07, 0x8a, 0x71, 0x18, 0xfb, 0xfa, 0x79, 0x3b, 0x26, 0x04, 0xfa, 0x15, 0xb8, 0x24, 0x53, 0x20, 0x9d, 0xaa, 0x64, 0x47, 0x5d, 0x0e, 0x95, 0xe2, 0x40, 0x83, 0x19, 0xe8, 0xb5, 0xce, 0x74, 0x60, 0xf4, 0x59, 0x3a, 0x19, 0xe3, 0x83, 0x1a, 0x9b, 0x36, 0x3b, 0x1c, 0x5d, 0xdb, 0xcd, 0x27, 0x39, 0x95, 0xfb, 0xc6, 0x1c, 0xe7, 0x50, 0x2b, 0x02, 0x33, 0xb1, 0x75, 0x22, 0x23, 0x35, 0x2e, 0x65, 0x48, 0x37, 0x18, 0x1d, 0x01, 0xa9, 0x29, 0xf4, 0x9f, 0xaa, 0xd4, 0x22, 0xc6, 0x5b, 0x8a, 0xe4, 0x16, 0xef, 0x81, 0x29, 0x0b, 0x02, 0xb4, 0x8e, 0x22, 0x2c, 0x2b, 0x8c, 0x3e, 0xd5, 0x7c, 0xf0, 0x49, 0x4b, 0x92, 0x8c, 0x1e, 0x11, 0xad, 0x2d, 0xa7, 0x7b, 0xaa, 0xcd, 0x42, 0x77, 0x85, 0x09, 0x6a, 0xae, 0x1c, 0xd5, 0x93, 0xcc, 0x35, 0x6e, 0x55, 0x1b, 0xc3, 0x90, 0xcd, 0x57, 0x65, 0xea, 0x41, 0xbe, 0x30, 0xcf, 0x02, 0x66, 0xae, 0x2e, 0x97, 0xd3, 0x26, 0xc4, 0x17, 0xc9, 0x1e, 0x90, 0xd7, 0x5f, 0x1f, 0x87, 0x45, 0x55, 0xb8, 0x8a, 0x14, 0xa7, 0xc5, 0x95, 0x9a, 0x62, 0xf2, 0x39, 0x76, 0xb7, 0x7a, 0x4c, 0x75, 0x4e, 0x35, 0xdf, 0xb7, 0xdd, 0xd1, 0x70, 0x0d, 0xf8, 0x5f, 0x61, 0xa6, 0x2b, 0x12, 0xa9, 0xeb, 0x46, 0x44, 0xca, 0xa7, 0xf8, 0xba, 0x03, 0x6b, 0x9f, 0x29, 0xc6, 0x31, 0x5f, 0xf9, 0x6c, 0x3f, 0x71, 0x48, 0x28, 0x4e, 0xbe, 0x32, 0x39, 0xec, 0xad, 0x50, 0x64, 0x1f, 0x39, 0x7e, 0xa2, 0x4b, 0x46, 0xe2, 0x16, 0x55, 0x35, 0x2a, 0x41, 0x09, 0xb6, 0x14, 0x79, 0xb9, 0xdd, 0x34, 0x97, 0x27, 0x79, 0xf2, 0xf1, 0xa6, 0xa1, 0xd2, 0x88, 0x7b, 0x8f, 0xf8, 0x82, 0x89, 0xb2, 0xeb, 0xda, 0x2e, 0xfe, 0x99, 0x56, 0x68, 0x87, 0x9b, 0xb9, 0x3c, 0x4e, 0xbb, 0x3a, 0x58, 0x5a, 0xb3, 0x36, 0xf7, 0x0b, 0x38, 0x22, 0x05, 0xac, 0x37, 0xc3, 0x83, 0x47, 0x5f, 0xa1, 0x2e, 0xbd, 0xdf, 0xb9, 0x5b, 0x15, 0x71, 0x72, 0x26, 0x15, 0x97, 0xd2, 0xcb, 0x0f, 0x24, 0xf2, 0x54, 0xfe, 0xff, 0xaf, 0x75, 0xd2, 0x24, 0xa3, 0xb4, 0x07, 0xeb, 0x54, 0xcc, 0x7c, 0x8d, 0xaa, 0x54, 0x83, 0xe4, 0xa7, 0x9c, 0x34, 0x72, 0x52, 0xd8, 0x08, 0xa5, 0xf4, 0x80, 0xa3, 0x59, 0x87, 0xf6, 0xf0, 0x9f, 0x6c, 0x6a, 0x73, 0xbd, 0x5c, 0xfb, 0xdb, 0x76, 0xa1, 0x1e, 0xd7, 0x8b, 0x86, 0x44, 0x2b, 0x81, 0x0c, 0xb7, 0x03, 0xa5, 0xde, 0xc5, 0x87, 0x4e, 0x87, 0x21, 0xaf, 0x62, 0xe3, 0x86, 0x59, 0x1b, 0xd3, 0x9d, 0x99, 0x0b, 0x35, 0x21, 0x50, 0x5e, 0x14, 0x41, 0x00, 0x60, 0x1b, 0x46, 0xde, 0x3f, 0x50, 0x75, 0x29, 0x11, 0xff, 0x37, 0xbb, 0x18, 0xf3, 0x77, 0xde, 0x45, 0xec, 0x4c, 0x60, 0xfc, 0x4e, 0xd8, 0xea, 0x17, 0x17, 0x70, 0x8d, 0x2d, 0x13, 0xfc, 0x9e, 0x14, 0x53, 0xa1, 0xc4, 0xa4, 0xdb, 0x9e, 0x4f, 0xbe, 0x9b, 0x74, 0xcb, 0x8d, 0xa1, 0x4a, 0xd5, 0x0c, 0x8c, 0x8f, 0x2e, 0xc9, 0x44, 0xe1, 0x0e, 0xe8, 0xe8, 0x2e, 0xbb, 0x6a, 0x08, 0x19, 0x59, 0xb0, 0x15, 0x9f, 0x04, 0x3a, 0x15, 0xfa, 0x1c, 0xb5, 0x9b, 0xc5, 0xe0, 0x35, 0xf7, 0x62, 0x3f, 0xbf, 0xaa, 0x99, 0xea, 0x0a, 0x1d, 0x81, 0xae, 0x86, 0x92, 0xa4, 0x01, 0x9e, 0x5a, 0x5e, 0xdb, 0x3a, 0x48, 0x86, 0xc7, 0x89, 0x67, 0x50, 0x39, 0xfd, 0xe8, 0x72, 0x22, 0x97, 0x5e, 0x86, 0xc2, 0x64, 0x2e, 0xb0, 0xbd, 0x48, 0x40, 0x80, 0x72, 0xfa, 0xfb, 0x1a, 0x88, 0x50, 0x71, 0x94, 0xc9, 0xbd, 0xd6, 0x9f, 0x34, 0x18, 0x37, 0x6a, 0x4d, 0x9e, 0x68, 0xc3, 0xb8, 0x3b, 0x3f, 0x80, 0x06, 0x05, 0xff, 0x1d, 0xcf, 0x09, 0x17, 0xa6, 0x01, 0x4b, 0x0d, 0xd7, 0x77, 0x08, 0xb5, 0x83, 0xce, 0x3e, 0xa6, 0x32, 0x74, 0x6f, 0xee, 0x0e, 0x01, 0xa1, 0x05, 0x00, 0xcb, 0xa9, 0x00, 0x16, 0xb4, 0xa9, 0x07, 0x28, 0x47, 0xd8, 0x09, 0xbb, 0x04, 0x81, 0xae, 0x25, 0xf7, 0x4f, 0x8e, 0xf2, 0x90, 0xc7, 0xa0, 0x87, 0xae, 0x16, 0xf5, 0x05, 0xfd, 0x0d, 0xa6, 0x70, 0x82, 0x6a, 0x0b, 0x11, 0x74, 0x59, 0x2d, 0x18, 0x4e, 0x3a, 0x7e, 0x86, 0x22, 0xa5, 0xc8, 0x4a, 0x30, 0xab, 0x64, 0xaa, 0xb7, 0x5f, 0xac, 0xe5, 0x0b, 0x96, 0xb2, 0x17, 0xe8, 0xea, 0x33, 0x5c, 0x06, 0x05, 0xc6, 0x38, 0xed, 0x1c, 0x59, 0x37, 0x0b, 0xb9, 0xde, 0xd0, 0x04, 0xbe, 0x42, 0x8f, 0x49, 0xa7, 0x9f, 0x74, 0xec, 0x0f, 0xb2, 0x96, 0xb3, 0x75, 0x8f, 0x0b, 0x6b, 0x41, 0x93, 0x0c, 0x7e, 0x02, 0x9b, 0x55, 0xc8, 0xfa, 0x73, 0xcb, 0xa7, 0xdc, 0x92, 0x61, 0x51, 0xd4, 0x04, 0x3c, 0x6b, 0xc8, 0xa7, 0x16, 0xd7, 0xde, 0x9a, 0xe0, 0xcd, 0x3e, 0xf3, 0xab, 0x2d, 0x19, 0xb0, 0xc8, 0x13, 0xea, 0xf1, 0x2e, 0xac, 0xfb, 0x64, 0x1d, 0x49, 0x2b, 0x00, 0x01, 0xb2, 0xf0, 0xf6, 0x99, 0xbd, 0x98, 0xe4, 0x58, 0x1f, 0xd4, 0x4c, 0x0c, 0x81, 0x76, 0x46, 0xbd, 0xd7, 0x7a, 0x71, 0xd8, 0xed, 0x43, 0x2f, 0x8d, 0x42, 0x28, 0x12, 0x75, 0x1a, 0x2f, 0x91, 0x78, 0xcf, 0x18, 0x00, 0xee, 0x68, 0x9e, 0xbf, 0x04, 0x6c, 0xf9, 0xb1, 0x61, 0xf9, 0xa7, 0xef, 0x0a, 0x10, 0x6c, 0xbe, 0x83, 0x33, 0x98, 0xbf, 0x38, 0x32, 0x88, 0x66, 0x1b, 0x42, 0x6f, 0xad, 0x8d, 0x4f, 0x57, 0x0a, 0x82, 0x93, 0x62, 0x9e, 0xe0, 0x68, 0x56, 0xaf, 0x29, 0x5a, 0x58, 0x58, 0x5a, 0x81, 0xf8, 0x7f, 0x13, 0x0e, 0x6e, 0x08, 0xf7, 0x23, 0x23, 0x48, 0x56, 0xe8, 0x74, 0xbd, 0x0a, 0xdb, 0xb2, 0xfc, 0x9e, 0x67, 0x6d, 0xea, 0xb6, 0xb9, 0xf2, 0x2f, 0xaa, 0xcf, 0x12, 0xe8, 0x75, 0xd1, 0x25, 0x9c, 0xce, 0xa5, 0x4f, 0x72, 0x94, 0xbe, 0x02, 0xa1, 0x6f, 0x34, 0xc4, 0x27, 0xb5, 0x1a, 0x33, 0xbe, 0x8a, 0x0c, 0x46, 0x0c, 0x4c, 0x07, 0xd5, 0x1a, 0x2e, 0x7d, 0x5c, 0x07, 0x22, 0xa9, 0xfc, 0xfe, 0xfd, 0x21, 0xc2, 0x65, 0xd5, 0xaa, 0x2c, 0x57, 0xae, 0x4f, 0xe9, 0x55, 0x56, 0xb5, 0xe1, 0x38, 0x8e, 0xa9, 0x75, 0x6a, 0x6a, 0xfb, 0x08, 0x56, 0xfb, 0x8f, 0xbe, 0x1d, 0x2b, 0xb1, 0x83, 0x8b, 0xe7, 0xa9, 0x50, 0x49, 0x84, 0x8f, 0xa9, 0x54, 0x5b, 0x61, 0x6b, 0xad, 0xb7, 0x53, 0xc4, 0x53, 0xf2, 0x66, 0x83, 0x6e, 0xda, 0x3c, 0x92, 0xcd, 0x59, 0x2b, 0xc0, 0x92, 0x56, 0x90, 0xc4, 0x2c, 0xd6, 0x66, 0x7f, 0x86, 0x67, 0x17, 0x82, 0x7e, 0xbe, 0x91, 0xd0, 0x99, 0x9f, 0x9d, 0xe5, 0xf5, 0xfd, 0x6c, 0xf7, 0x7f, 0x63, 0x73, 0x7b, 0x65, 0x92, 0x7a, 0xeb, 0xcf, 0x6c, 0xef, 0xc7, 0xca, 0x10, 0x7f, 0xda, 0x84, 0x47, 0xe8, 0xbe, 0xbf, 0x1f, 0x08, 0xa2, 0x80, 0xd5, 0x3a, 0x4b, 0x07, 0xf8, 0xe3, 0x59, 0x04, 0xcc, 0x48, 0xcc, 0x08, 0xed, 0xa3, 0xc6, 0x3a, 0x34, 0x75, 0x92, 0x4b, 0xde, 0x1d, 0xe6, 0xac, 0xeb, 0xaa, 0x65, 0xfe, 0xc5, 0xee, 0x68, 0xca, 0x22, 0xd3, 0xfe, 0x72, 0x2b, 0xf3, 0x32, 0x67, 0xde, 0x62, 0x8c, 0x9d, 0xb1, 0xce, 0xda, 0x3c, 0x78, 0xcb, 0x2f, 0x99, 0x88, 0x68, 0x2d, 0x64, 0x1d, 0x06, 0x80, 0x23, 0xf9, 0x6a, 0xab, 0xde, 0x4e, 0x10, 0x07, 0x1c, 0xde, 0xc2, 0x08, 0x0f, 0x61, 0x6a, 0xc3, 0x0c, 0x27, 0x25, 0xad, 0x3e, 0xfe, 0x98, 0xa6, 0x9a, 0x56, 0x87, 0x36, 0x15, 0xa3, 0xa3, 0x16, 0x15, 0x03, 0xa4, 0xf2, 0x26, 0x21, 0x98, 0x6d, 0xef, 0x59, 0x7b, 0x66, 0x64, 0x1d, 0x07, 0x79, 0x3d, 0x97, 0xcd, 0xc9, 0xa6, 0x8f, 0x85, 0xfd, 0x38, 0x90, 0xa3, 0x89, 0x28, 0x46, 0x2b, 0x2f, 0xbe, 0x2b, 0xc5, 0xc5, 0x09, 0x63, 0x14, 0x38, 0xd2, 0xe3, 0x44, 0xd1, 0xce, 0xd9, 0xe2, 0xb7, 0x17, 0x48, 0xf1, 0xb6, 0xdd, 0xf3, 0x3a, 0x3e, 0x59, 0x7d, 0xe3, 0xaf, 0x03, 0xce, 0x43, 0xd3, 0x05, 0xb9, 0xf5, 0xac, 0xef, 0xdb, 0x2b, 0x71, 0xac, 0xc6, 0x45, 0xd3, 0xb5, 0x5f, 0xa3, 0x84, 0x84, 0x84, 0xb7, 0xfa, 0x4c, 0xf2, 0x5e, 0x71, 0xe7, 0x66, 0x70, 0x2f, 0x10, 0x03, 0x95, 0x0b, 0xd2, 0xf4, 0x5b, 0x30, 0x40, 0x52, 0x86, 0x1f, 0x67, 0x48, 0xa8, 0xf3, 0x81, 0x75, 0xf1, 0xe9, 0x6c, 0x91, 0x47, 0x1f, 0x5a, 0x54, 0x99, 0x9c, 0xc9, 0x93, 0x71, 0x91, 0xb6, 0xad, 0xc9, 0xde, 0x0d, 0x25, 0x20, 0xd8, 0x65, 0x90, 0xcd, 0x4a, 0xea, 0xb2, 0x92, 0xba, 0x9a, 0xe4, 0x74, 0xed, 0xb5, 0xb8, 0xca, 0xad, 0x6e, 0xe0, 0x95, 0xc9, 0xe7, 0x4c, 0x0f, 0x5e, 0x5c, 0x93, 0x87, 0x55, 0x9f, 0x94, 0x6b, 0x2d, 0xc4, 0x5d, 0xa7, 0xfa, 0x1d, 0x4c, 0x2d, 0xae, 0x69, 0x73, 0xd5, 0x98, 0x48, 0x41, 0x68, 0x2a, 0xf2, 0x5f, 0xf7, 0xff, 0x29, 0xd9, 0x72, 0x1d, 0x6c, 0x7e, 0x76, 0x77, 0x6e, 0x89, 0x65, 0xb6, 0xc6, 0x81, 0xbc, 0x38, 0xe8, 0x5d, 0xa1, 0x59, 0x54, 0xec, 0xbc, 0xf2, 0x0d, 0x74, 0x48, 0x20, 0x4d, 0x9a, 0x6a, 0x47, 0x77, 0x81, 0xc1, 0x56, 0x4d, 0x36, 0x3e, 0x4c, 0x63, 0x4c, 0x36, 0xfb, 0xd3, 0xc3, 0xb5, 0x0b, 0x33, 0x2f, 0x16, 0x43, 0xc4, 0x15, 0xd0, 0x04, 0xec, 0x99, 0x93, 0x16, 0xe7, 0x56, 0x94, 0xa8, 0xb9, 0x8e, 0x25, 0x91, 0x67, 0x83, 0x88, 0xdc, 0x66, 0x24, 0x05, 0x84, 0x54, 0xec, 0x3a, 0x7c, 0xe6, 0x08, 0xb3, 0xf2, 0x22, 0xb8, 0xba, 0xd5, 0xce, 0xf7, 0x70, 0x95, 0x28, 0x5e, 0x1d, 0x2a, 0xd7, 0x46, 0xc5, 0x57, 0x22, 0x2d, 0xfc, 0x30, 0x60, 0x5b, 0xfa, 0xda, 0xaf, 0xc4, 0xf2, 0x92, 0xe9, 0x31, 0xa0, 0xf0, 0xd4, 0x9b, 0x22, 0x6d, 0x99, 0xd7, 0x08, 0x24, 0x78, 0x79, 0xae, 0xd5, 0xb9, 0xf2, 0xca, 0x2f, 0xe6, 0xfb, 0x41, 0x4f, 0x37, 0x37, 0x3f, 0x84, 0x4e, 0x13, 0x86, 0x55, 0x24, 0xf2, 0x06, 0xc5, 0x44, 0x87, 0xae, 0xd5, 0x37, 0x81, 0x83, 0x4b, 0x3f, 0x6e, 0xef, 0xb2, 0x48, 0xd9, 0x5b, 0xa2, 0x1b, 0xb6, 0x00, 0x41, 0xd5, 0x01, 0xf9, 0x0a, 0x97, 0xa1, 0x9d, 0xcd, 0x80, 0x92, 0x0d, 0xf7, 0xd8, 0x43, 0x09, 0x14, 0x8e, 0x3d, 0x08, 0x92, 0xe5, 0x06, 0x87, 0xc8, 0x6a, 0x45, 0xa1, 0x37, 0x29, 0x26, 0xe0, 0x0f, 0x20, 0x00, 0x53, 0xf5, 0xf4, 0x36, 0xe0, 0x03, 0xe3, 0x5b, 0xdc, 0x10, 0xfa, 0x99, 0xd9, 0x32, 0x88, 0x53, 0xbf, 0x82, 0xd2, 0x09, 0x1f, 0x1f, 0x08, 0x7c, 0xc3, 0x76, 0x78, 0x13, 0x8a, 0xc0, 0x02, 0x7e, 0x73, 0xcb, 0xcc, 0x99, 0xf7, 0xfe, 0x37, 0x93, 0x9c, 0x98, 0x11, 0x4f, 0xc7, 0x38, 0x0c, 0x0a, 0xd1, 0xa2, 0x6e, 0x3f, 0x5e, 0xc0, 0x0b, 0xc7, 0xea, 0xe7, 0x70, 0x45, 0xa5, 0x5c, 0x62, 0xc1, 0x81, 0x17, 0x87, 0x93, 0x89, 0xc6, 0x62, 0x83, 0x74, 0x15, 0x85, 0x2e, 0x7a, 0x2d, 0x01, 0xac, 0x66, 0x7a, 0x22, 0x6f, 0xed, 0xb2, 0x59, 0x6e, 0x3e, 0x13, 0x7a, 0x83, 0xda, 0xec, 0x27, 0x12, 0xa6, 0x5e, 0x8c, 0xec, 0x3e, 0x64, 0x4e, 0x73, 0x8d, 0x11, 0xbd, 0xfe, 0x9b, 0x19, 0x51, 0x7f, 0xa5, 0x93, 0x54, 0x63, 0x73, 0xfd, 0xdc, 0xb9, 0xe6, 0x81, 0xfc, 0x97, 0xd1, 0x76, 0x3b, 0xb9, 0x09, 0x2a, 0x45, 0x6c, 0xc0, 0xdf, 0xe1, 0xaa, 0x0e, 0x13, 0x23, 0x87, 0xd1, 0x05, 0xe3, 0xcc, 0xb7, 0x74, 0x6e, 0xe1, 0x99, 0xaa, 0x7a, 0xf0, 0x0b, 0xb9, 0x60, 0x47, 0x31, 0x05, 0x85, 0xfe, 0xd4, 0x02, 0x19, 0xda, 0xb4, 0x3f, 0x05, 0x72, 0x20, 0xa4, 0x1e, 0x90, 0xc5, 0xf8, 0x9f, 0xda, 0xc4, 0xa5, 0xd6, 0xb2, 0x07, 0xc0, 0x1d, 0x5a, 0xd4, 0x44, 0x0c, 0x5c, 0xa2, 0x9e, 0xed, 0x29, 0x2c, 0x6f, 0x70, 0x00, 0xc5, 0x8d, 0xa1, 0x11, 0xeb, 0x4b, 0x16, 0xe3, 0x1e, 0xfa, 0x6d, 0xf3, 0xf3, 0xaf, 0xf6, 0x9e, 0x64, 0x47, 0xac, 0x40, 0x6a, 0xa9, 0x6a, 0x9e, 0xce, 0x4b, 0x5b, 0x81, 0x3b, 0xf8, 0xb3, 0xa4, 0x99, 0xd0, 0x9c, 0xd0, 0x96, 0x90, 0x73, 0x46, 0x85, 0x13, 0x35, 0x5d, 0x6c, 0x19, 0x34, 0x6c, 0x58, 0x48, 0x0f, 0xea, 0xf4, 0x70, 0xe0, 0xd4, 0x5a, 0x13, 0xb7, 0x4f, 0x29, 0x25, 0x48, 0x8f, 0xd8, 0x10, 0xe0, 0xf7, 0x4a, 0xfb, 0x9e, 0x82, 0xa2, 0x4c, 0xdf, 0x61, 0x58, 0x6b, 0xfa, 0xe6, 0x8d, 0xc9, 0x2e, 0xa0, 0x9b, 0x22, 0xd8, 0xc8, 0xf1, 0xff, 0xe9, 0xdb, 0x1e, 0x7e, 0x98, 0x89, 0x2b, 0x55, 0x54, 0xce, 0x2e, 0x15, 0xfd, 0x5f, 0x1c, 0xac, 0x53, 0x47, 0xdf, 0x2e, 0xaf, 0xd2, 0xa8, 0xd5, 0xf1, 0xaa, 0x87, 0x46, 0xb9, 0x40, 0x39, 0x15, 0xda, 0x6d, 0x41, 0x8c, 0x0b, 0x5a, 0x3a, 0xa8, 0xe0, 0x9d, 0x6b, 0x65, 0xf9, 0xa4, 0x9c, 0x3b, 0x7a, 0x57, 0x28, 0xe9, 0xba, 0xf9, 0x54, 0x71, 0x40, 0x4f, 0xdf, 0x64, 0xeb, 0x05, 0xda, 0x5f, 0x70, 0x4d, 0xba, 0xd6, 0x0a, 0xc9, 0xac, 0x10, 0x6c, 0xab, 0x28, 0x73, 0xfb, 0x1b, 0xc9, 0x02, 0x3a, 0xd9, 0x5c, 0x24, 0x85, 0x23, 0x37, 0xa7, 0x03, 0xd9, 0xcc, 0x04, 0xd6, 0xdf, 0x7d, 0xe5, 0x94, 0xc3, 0xb2, 0xe4, 0xfb, 0x9f, 0x29, 0x96, 0xe0, 0x41, 0x8e, 0xc8, 0x69, 0x8a, 0x4c, 0x08, 0x7c, 0x14, 0xa2, 0x68, 0x77, 0x17, 0xf9, 0x7e, 0x22, 0x8e, 0x75, 0xaf, 0xe2, 0x95, 0xca, 0xae, 0x2f, 0x16, 0x51, 0x3f, 0x47, 0xa4, 0x5b, 0x41, 0x24, 0xa7, 0xc5, 0xeb, 0xac, 0xba, 0xcc, 0x56, 0x29, 0x51, 0x23, 0x3b, 0xf8, 0x9f, 0x43, 0xff, 0x85, 0xb7, 0x03, 0xec, 0x77, 0xf1, 0x68, 0xc2, 0x27, 0x8f, 0xbe, 0x6e, 0x57, 0xa0, 0xe7, 0x19, 0x21, 0x25, 0xf4, 0x64, 0x2d, 0x73, 0xf2, 0xf2, 0x27, 0xd8, 0x06, 0x28, 0x70, 0x81, 0xbd, 0x30, 0x14, 0x9b, 0x9d, 0x44, 0xfd, 0xb9, 0x00, 0x29, 0x66, 0x76, 0x22, 0xf9, 0x92, 0x5b, 0x78, 0x26, 0xbd, 0x03, 0x43, 0xbc, 0x53, 0x7c, 0x66, 0xe6, 0x60, 0xf1, 0x74, 0xb4, 0x47, 0x86, 0x0e, 0x1b, 0xb8, 0x84, 0x6c, 0x3e, 0xdc, 0xb6, 0x39, 0xeb, 0xd2, 0x13, 0xa4, 0x69, 0x5f, 0x9c, 0xb4, 0x71, 0xe1, 0x88, 0xdb, 0x7a, 0x85, 0x9f, 0xcf, 0x3a, 0xba, 0xe4, 0x95, 0x69, 0xe6, 0x76, 0xde, 0xc8, 0x57, 0xb8, 0x97, 0x62, 0x7c, 0xb0, 0xbc, 0x11, 0x55, 0xad, 0x6d, 0x45, 0x28, 0x2d, 0x43, 0x01, 0x76, 0xfd, 0xe4, 0x26, 0x2d, 0xa2, 0xd5, 0xf4, 0x1f, 0xf8, 0x90, 0xce, 0xb3, 0x19, 0xd7, 0x3d, 0xda, 0x80, 0x47, 0x38, 0x45, 0x6f, 0x30, 0xa3, 0xd6, 0x8d, 0xa4, 0x15, 0x54, 0xd4, 0xce, 0xde, 0x62, 0xaa, 0x85, 0x49, 0xb2, 0x4e, 0x21, 0x1e, 0x76, 0x76, 0x8e, 0x6b, 0x17, 0x37, 0x9f, 0x84, 0x2a, 0x24, 0xa4, 0x49, 0xa0, 0xba, 0x3e, 0xa7, 0x3c, 0xfc, 0x72, 0x62, 0x4b, 0x5a, 0xfd, 0x11, 0x8f, 0xd7, 0xe7, 0x6a, 0x7c, 0x6b, 0x5b, 0xbf, 0xa7, 0xa6, 0xb6, 0xc9, 0x7b, 0x97, 0xde, 0xa5, 0x2d, 0xec, 0xd5, 0x1c, 0xf3, 0x5a, 0x8e, 0x27, 0x71, 0x40, 0xff, 0xb2, 0x74, 0x87, 0x77, 0xa1, 0xe3, 0xcc, 0x32, 0x11, 0xf3, 0xc1, 0x2b, 0xe0, 0x99, 0xd0, 0x31, 0x6f, 0x45, 0x02, 0x3d, 0xa6, 0xcd, 0x20, 0x03, 0x39, 0xa7, 0x18, 0xc7, 0x2a, 0x5c, 0xa1, 0x72, 0x90, 0x39, 0x22, 0xe5, 0x96, 0x48, 0xd0, 0x8d, 0xc6, 0x7f, 0x17, 0x37, 0x88, 0x36, 0x3c, 0x26, 0xe5, 0xdf, 0x40, 0x63, 0x91, 0xf1, 0x07, 0x55, 0x29, 0x25, 0xba, 0x91, 0xb9, 0xe5, 0x69, 0xf3, 0x81, 0x01, 0xf5, 0xee, 0xf9, 0xa5, 0x2d, 0x20, 0x12, 0x88, 0x37, 0x2a, 0xbf, 0x65, 0x32, 0xbe, 0xb4, 0xaf, 0x19, 0xfa, 0x6d, 0x81, 0xea, 0xf4, 0x73, 0xd4, 0x08, 0x96, 0xdb, 0xf4, 0xde, 0xac, 0x0f, 0x35, 0xc6, 0x3b, 0xd1, 0xe1, 0x29, 0x14, 0x7c, 0x76, 0xe7, 0xaa, 0x8d, 0x0e, 0xf9, 0x21, 0x63, 0x1f, 0x55, 0xa7, 0x43, 0x64, 0x11, 0x07, 0x9f, 0x1b, 0xcc, 0x7b, 0x98, 0x71, 0x4a, 0xc2, 0xc1, 0x3b, 0x5e, 0x73, 0x26, 0xe6, 0x0d, 0x91, 0x8d, 0xb1, 0xf0, 0x5f, 0xfb, 0x19, 0xda, 0x76, 0x7a, 0x95, 0xbb, 0x14, 0x1a, 0x84, 0xc4, 0xb7, 0x36, 0x64, 0xcc, 0xeb, 0xf8, 0x44, 0xf3, 0x60, 0x1f, 0x7c, 0x85, 0x3f, 0x00, 0x9b, 0x21, 0xbe, 0xcb, 0xa1, 0x1a, 0xf3, 0x10, 0x6f, 0x1d, 0xe5, 0x82, 0x7b, 0x14, 0xe9, 0xfa, 0xc8, 0x4b, 0x2c, 0xbf, 0x16, 0xd1, 0x8c, 0x04, 0x56, 0x22, 0xac, 0xb2, 0x60, 0x02, 0x47, 0x68, 0xe8, 0xac, 0xc4, 0xc0, 0xae, 0x2c, 0x0b, 0xd5, 0xf6, 0x0a, 0x98, 0x02, 0x38, 0x28, 0xcd, 0xec, 0x18, 0xed, 0x8d, 0xc2, 0x98, 0xa3, 0x06, 0xc3, 0x8d, 0x1e, 0xce, 0x01, 0x50, 0x9f, 0x32, 0x65, 0xb5, 0xf8, 0xcb, 0xf4, 0x41, 0xf0, 0x52, 0x50, 0x97, 0xe8, 0xb4, 0x82, 0x34, 0xbf, 0x69, 0xf6, 0x5c, 0xf4, 0x02, 0xc7, 0x54, 0x0a, 0x02, 0x3e, 0xd2, 0x31, 0xef, 0x95, 0xb2, 0x22, 0xa9, 0x00, 0xea, 0x4b, 0xfa, 0xee, 0xc0, 0x2c, 0x6d, 0x8b, 0x3b, 0x01, 0x64, 0x8a, 0xd7, 0xa1, 0x65, 0x23, 0x7c, 0xa6, 0xb5, 0x57, 0xb1, 0xce, 0x28, 0x7b, 0x0e, 0xa1, 0x37, 0xf4, 0xef, 0x54, 0x53, 0x40, 0x70, 0xee, 0x79, 0x36, 0x95, 0xa9, 0x07, 0x8e, 0xc8, 0x9b, 0xce, 0xa3, 0x89, 0x95, 0x68, 0x78, 0x61, 0x4c, 0xcb, 0xf9, 0x17, 0xb6, 0x1f, 0x84, 0x27, 0xb7, 0xcd, 0xa8, 0x70, 0xfd, 0xd9, 0x2d, 0x2d, 0x29, 0x71, 0x54, 0x26, 0x2f, 0xc6, 0x5f, 0x28, 0xff, 0x1a, 0x54, 0xb2, 0x65, 0x1a, 0xff, 0xf1, 0x2d, 0x6f, 0x36, 0xee, 0x8c, 0x90, 0x61, 0x07, 0xbb, 0xda, 0x39, 0x9c, 0xe5, 0xe2, 0xcf, 0x0a, 0x43, 0x0a, 0xd0, 0xdd, 0x86, 0x52, 0x08, 0x41, 0x75, 0x71, 0x26, 0xba, 0xd7, 0x25, 0xbf, 0x15, 0x93, 0xc7, 0x95, 0x9f, 0x16, 0x22, 0x18, 0x94, 0xf5, 0x85, 0x2d, 0xda, 0xd3, 0x17, 0x2f, 0xef, 0x86, 0x6b, 0x33, 0x21, 0x75, 0x54, 0x91, 0xfd, 0x44, 0xfb, 0xa0, 0x09, 0xb4, 0x2e, 0xc0, 0xb6, 0xc4, 0xfb, 0x9e, 0x90, 0x1d, 0x7e, 0xb3, 0xb8, 0xac, 0xf7, 0x0e, 0x94, 0x91, 0x1f, 0x54, 0xc5, 0x38, 0xbd, 0x05, 0x59, 0xc5, 0x74, 0x00, 0x42, 0xb6, 0xdf, 0x4a, 0x07, 0xc3, 0xe0, 0x0b, 0xba, 0x09, 0x34, 0xd9, 0x2a, 0x68, 0x4b, 0x39, 0x59, 0x2a, 0x57, 0x63, 0x31, 0xe5, 0xa4, 0x46, 0x72, 0xa2, 0x27, 0xcc, 0xef, 0x3e, 0x59, 0x5f, 0xfa, 0x11, 0x46, 0xac, 0x1d, 0xce, 0xe0, 0xa7, 0x0b, 0xaa, 0x9a, 0xcf, 0xd5, 0xc1, 0x32, 0xb3, 0x61, 0xb5, 0xce, 0xb5, 0x19, 0x98, 0x4b, 0x0e, 0xe0, 0x0c, 0xd2, 0x12, 0x4a, 0xa8, 0xac, 0xb5, 0x0c, 0x9e, 0x57, 0x4f, 0xb1, 0x9b, 0xd9, 0x9c, 0x8f, 0xef, 0x54, 0x07, 0xfa, 0xee, 0xdb, 0x28, 0xb7, 0x96, 0x84, 0x8b, 0xb3, 0x72, 0xbe, 0xb3, 0xf5, 0xbd, 0xe5, 0x5e, 0xd2, 0xcb, 0x14, 0x0b, 0x60, 0xa5, 0x3b, 0xba, 0x2d, 0xf4, 0x71, 0xf3, 0x30, 0x20, 0x8b, 0x09, 0xff, 0xb8, 0xed, 0xa0, 0x43, 0x15, 0xa0, 0x6d, 0x69, 0x3a, 0xa5, 0x3d, 0x9b, 0xff, 0x89, 0x39, 0xef, 0x6f, 0x3a, 0x68, 0xde, 0x6e, 0x19, 0x75, 0xf7, 0x9f, 0x50, 0xb3, 0xd4, 0x84, 0x66, 0x5e, 0x4e, 0xe7, 0x11, 0x24, 0xed, 0x79, 0x4b, 0xe3, 0xa2, 0xba, 0xa7, 0xb5, 0xb9, 0x18, 0xe6, 0x2a, 0x09, 0x5b, 0xc5, 0xd4, 0x6e, 0x40, 0x1a, 0x09, 0x79, 0x64, 0x1f, 0xe4, 0x65, 0x64, 0x0e, 0x8d, 0x4d, 0x43, 0xee, 0xba, 0x9d, 0x0c, 0xac, 0x76, 0xc7, 0xb8, 0x6d, 0x22, 0x37, 0x51, 0x23, 0xb9, 0x88, 0x58, 0x5e, 0x58, 0xf8, 0x65, 0x66, 0xfd, 0x19, 0x0d, 0x86, 0x8e, 0xca, 0x08, 0xaa, 0x1e, 0x66, 0x93, 0x2d, 0x6d, 0x3b, 0x14, 0xec, 0xad, 0x3e, 0xfd, 0x9f, 0x8c, 0xfc, 0xf2, 0x69, 0x6e, 0xd4, 0x2e, 0xad, 0xfa, 0x64, 0x23, 0x24, 0xd9, 0x41, 0x60, 0x2c, 0xba, 0xeb, 0xb8, 0x63, 0x9a, 0x00, 0xa1, 0x75, 0x42, 0xaf, 0xda, 0x32, 0x11, 0x70, 0x51, 0xe4, 0xfb, 0xf2, 0x43, 0xdf, 0xd2, 0x55, 0xa5, 0x59, 0xc4, 0x9a, 0xc3, 0x7c, 0x26, 0x58, 0x27, 0xba, 0x70, 0xb0, 0xbc, 0x61, 0x88, 0x82, 0x33, 0x6f, 0x43, 0xe1, 0xa6, 0xa7, 0x29, 0xc5, 0x7b, 0xe4, 0x78, 0x00, 0x8c, 0xae, 0x6c, 0x74, 0x84, 0x0b, 0xbe, 0x82, 0x8c, 0x97, 0x6a, 0xc6, 0x28, 0xd7, 0xb6, 0x01, 0x5b, 0xcb, 0x70, 0x56, 0x12, 0xc2, 0x77, 0xba, 0xc0, 0x72, 0x7d, 0xa6, 0x45, 0x48, 0x0a, 0x0e, 0x14, 0xfd, 0xc4, 0x97, 0x95, 0x6a, 0xef, 0x05, 0xc8, 0x9d, 0x30, 0xf2, 0x2c, 0x2c, 0x96, 0xc6, 0xdf, 0xc9, 0xda, 0xe3, 0x06, 0x17, 0xe6, 0x20, 0x6f, 0xbd, 0x95, 0x79, 0x75, 0xb8, 0xba, 0x05, 0x24, 0xf5, 0x63, 0x28, 0x9e, 0x1f, 0x5f, 0x09, 0xbd, 0xb6, 0xfd, 0x46, 0xfa, 0x61, 0x17, 0xe7, 0x8e, 0x85, 0x4f, 0x91, 0xd7, 0x16, 0x99, 0xfc, 0xfc, 0xad, 0xfa, 0xa7, 0xd4, 0xdb, 0x8f, 0xcb, 0x04, 0xbe, 0xd0, 0x8d, 0x68, 0xd1, 0x16, 0x77, 0xb5, 0x08, 0x5b, 0x29, 0x5c, 0x1d, 0x41, 0x4c, 0xb1, 0x24, 0x56, 0xc8, 0x4c, 0x66, 0x97, 0x37, 0xaf, 0x6c, 0x33, 0x99, 0x2a, 0x5a, 0x91, 0x49, 0xfc, 0x7f, 0x93, 0x30, 0xbb, 0x29, 0x1d, 0x38, 0xf6, 0xbe, 0xd1, 0x03, 0x18, 0x08, 0x1d, 0xde, 0x8f, 0xd1, 0x78, 0xf0, 0x2e, 0xb0, 0xe8, 0xb7, 0xd0, 0x22, 0xc8, 0xb6, 0x3f, 0xdc, 0xc8, 0x67, 0x54, 0x60, 0x35, 0x77, 0x5f, 0xcf, 0x7b, 0x32, 0xc8, 0xfe, 0xe8, 0x3d, 0xf7, 0xcb, 0xb2, 0x83, 0x72, 0xb2, 0x3c, 0x71, 0x45, 0x9b, 0x95, 0x66, 0xa7, 0xf6, 0x41, 0x65, 0xda, 0x0a, 0x3d, 0x0e, 0x53, 0x8a, 0x3d, 0xcc, 0x1b, 0x6a, 0x38, 0x4f, 0x75, 0xf0, 0x26, 0x3d, 0xc1, 0x0e, 0x09, 0x24, 0xa0, 0xef, 0x2a, 0xb4, 0x59, 0xd0, 0xa5, 0x2b, 0x7c, 0x11, 0x27, 0x10, 0xc5, 0x8c, 0xf7, 0x24, 0x42, 0x25, 0x33, 0x96, 0xb8, 0xa2, 0x5d, 0x76, 0x44, 0xbe, 0x16, 0x6c, 0x3e, 0x78, 0x28, 0xaa, 0x62, 0xb1, 0xca, 0x1f, 0x32, 0xf6, 0x20, 0xed, 0x96, 0x9b, 0x02, 0x1e, 0xc6, 0x09, 0xfe, 0x92, 0x69, 0x58, 0xa0, 0x3c, 0xff, 0x21, 0xf0, 0x8f, 0x7c, 0x8d, 0x3d, 0x32, 0x35, 0xb2, 0x19, 0xfb, 0x00, 0x20, 0xa5, 0x1b, 0x97, 0xb6, 0x0f, 0x96, 0x3e, 0xbb, 0x58, 0xf7, 0xa6, 0x2a, 0x5b, 0x41, 0x10, 0x4c, 0x0b, 0x28, 0xb5, 0x8c, 0xfc, 0x81, 0x66, 0x88, 0x25, 0xf8, 0x70, 0x64, 0xe4, 0x01, 0xc2, 0x63, 0x42, 0x11, 0x52, 0xb8, 0x79, 0x0d, 0xbc, 0x99, 0xb3, 0x03, 0x2c, 0x96, 0x15, 0x18, 0x7f, 0x29, 0xfc, 0xc1, 0xa5, 0x8e, 0x86, 0x36, 0x4a, 0xd4, 0x55, 0x24, 0xb5, 0x35, 0x8f, 0xa2, 0xf0, 0xa3, 0x29, 0x67, 0x29, 0xa3, 0x66, 0x3a, 0x58, 0x5e, 0x9a, 0xa9, 0x22, 0xf5, 0x34, 0xfe, 0xfd, 0x16, 0xfb, 0x6f, 0x96, 0xcd, 0x98, 0x95, 0x70, 0x9c, 0x55, 0x20, 0xcd, 0xcd, 0x24, 0xc8, 0xd1, 0x07, 0xe3, 0x87, 0xe5, 0x20, 0xde, 0x05, 0x5a, 0x32, 0x96, 0x54, 0x4e, 0xf1, 0xc1, 0xdd, 0xd4, 0x3b, 0x91, 0x9a, 0x4f, 0xf1, 0x39, 0x86, 0x1f, 0x06, 0xae, 0x52, 0x80, 0xd5, 0xaa, 0x5a, 0xae, 0xb8, 0xf7, 0xd7, 0x4e, 0xd6, 0xea, 0x56, 0x09, 0x3c, 0x2e, 0x69, 0x7a, 0x30, 0xc2, 0x9c, 0x4a, 0xc1, 0x45, 0xaa, 0x99, 0xa3, 0x72, 0xf1, 0xa0, 0x3a, 0xe7, 0x24, 0x95, 0xf5, 0x2a, 0x40, 0xcf, 0xdd, 0xed, 0xc1, 0x2b, 0x6e, 0x91, 0x15, 0xae, 0xa5, 0xea, 0x51, 0x6c, 0x5a, 0x42, 0x23, 0xa8, 0xd0, 0xa0, 0x07, 0x3c, 0x8b, 0x4a, 0xbe, 0x3c, 0x61, 0x88, 0xfd, 0xd6, 0xd4, 0xab, 0x62, 0x7c, 0x9f, 0x4e, 0xab, 0x46, 0x8f, 0xdc, 0x2a, 0x91, 0x94, 0x52, 0x74, 0xed, 0x18, 0x46, 0x5a, 0x36, 0x8f, 0x29, 0x1a, 0x00, 0x50, 0xc9, 0xd6, 0x38, 0xa3, 0x19, 0x44, 0x09, 0x1b, 0x35, 0xa8, 0xfd, 0x26, 0xa1, 0xff, 0x65, 0xe2, 0xd1, 0x7d, 0xfa, 0x32, 0xef, 0x3a, 0xc4, 0x12, 0xd8, 0x29, 0x3b, 0x27, 0x68, 0x49, 0xad, 0x9a, 0xf7, 0x1f, 0xdf, 0x27, 0x23, 0x63, 0xf7, 0x71, 0xd0, 0xfa, 0x99, 0x99, 0x6e, 0x24, 0x51, 0x0e, 0x7b, 0xf7, 0x31, 0xa7, 0x48, 0x0c, 0xbb, 0xef, 0xff, 0x78, 0x01, 0xc0, 0xe5, 0xfd, 0x0a, 0x13, 0xdd, 0x82, 0x78, 0x16, 0x2e, 0xc1, 0x68, 0x7f, 0x85, 0x40, 0x9a, 0x20, 0x3e, 0x82, 0xd2, 0xbc, 0xdf, 0x7e, 0x7d, 0x1a, 0xe5, 0x50, 0x98, 0x57, 0xc4, 0x2f, 0xce, 0x80, 0x29, 0x9f, 0xe0, 0x61, 0x82, 0xe7, 0x4a, 0x97, 0xc0, 0xc6, 0x24, 0xed, 0x5b, 0x62, 0x46, 0xe5, 0x97, 0x81, 0xaf, 0x94, 0x07, 0xfb, 0x28, 0xb3, 0x4f, 0x70, 0x24, 0xf4, 0x2d, 0x36, 0xeb, 0x92, 0xbb, 0x95, 0xf7, 0x2c, 0xee, 0x37, 0x9e, 0xd3, 0x63, 0xda, 0xf2, 0x62, 0x5b, 0x48, 0xe6, 0x0d, 0x04, 0x89, 0xb2, 0x3d, 0xfa, 0x57, 0x78, 0x9c, 0x0d, 0xd2, 0x27, 0x6b, 0x45, 0x75, 0xa0, 0x1c, 0x23, 0x49, 0x17, 0x1d, 0x2a, 0x58, 0xbc, 0xf2, 0x9e, 0x65, 0x9b, 0x86, 0x8c, 0xda, 0xc1, 0xc3, 0x0a, 0x02, 0xa1, 0x60, 0xc0, 0x78, 0xb6, 0xfa, 0xa7, 0xe0, 0x69, 0x67, 0x11, 0xd4, 0x34, 0x47, 0xea, 0x21, 0x08, 0xdb, 0x3d, 0x34, 0xec, 0x1b, 0xf9, 0xcf, 0xe8, 0x02, 0xf6, 0x01, 0x21, 0x2d, 0x33, 0x54, 0x45, 0xa4, 0x62, 0x48, 0x29, 0xf8, 0xa6, 0x00, 0xb1, 0x8e, 0x9b, 0x3c, 0xf1, 0x3a, 0x97, 0x87, 0x91, 0x0f, 0x2f, 0xb2, 0x76, 0x76, 0xfd, 0x80, 0x9e, 0x7e, 0xa1, 0xa3, 0x4c, 0x73, 0x06, 0xe7, 0x66, 0xb2, 0xe7, 0xae, 0x1b, 0xbb, 0x91, 0x9c, 0xc8, 0x88, 0xea, 0x93, 0x1d, 0x1e, 0xb2, 0xe2, 0x7c, 0x61, 0x09, 0xb9, 0xa1, 0x2c, 0x31, 0xe1, 0x88, 0xa1, 0x96, 0xa9, 0x8b, 0xbe, 0x0b, 0x24, 0xcc, 0x31, 0x57, 0x91, 0xd2, 0x6e, 0xf0, 0x1b, 0x77, 0xfe, 0x06, 0xc3, 0x01, 0x1a, 0xc3, 0x9a, 0x8f, 0x78, 0xd2, 0x33, 0xb7, 0x65, 0x1e, 0x58, 0x6d, 0x14, 0xdc, 0xfc, 0x26, 0x36, 0xcb, 0x71, 0x3e, 0xca, 0xba, 0xdb, 0x97, 0x37, 0x4c, 0xe5, 0x84, 0x98, 0xf8, 0xb2, 0xe5, 0x57, 0x53, 0x17, 0x93, 0xfd, 0x92, 0x07, 0xfe, 0x48, 0x4a, 0x4e, 0x14, 0x7f, 0x7b, 0x82, 0x65, 0x02, 0xcd, 0x37, 0x85, 0x25, 0x19, 0x73, 0xb2, 0x3e, 0x2b, 0x62, 0xb7, 0xfd, 0xc7, 0x4a, 0x10, 0xfc, 0xe9, 0xc0, 0x4f, 0x97, 0x51, 0x1d, 0xbf, 0xfe, 0x3f, 0x2c, 0x46, 0x88, 0x7c, 0x25, 0x90, 0x4b, 0x99, 0xdf, 0x69, 0xe9, 0x7b, 0x41, 0x6b, 0xac, 0x18, 0xfa, 0xda, 0xd6, 0x7b, 0x71, 0xcc, 0x32, 0x0e, 0xff, 0x8d, 0xef, 0x18, 0x5d, 0x41, 0xae, 0x85, 0x58, 0xcb, 0xda, 0xe6, 0xcc, 0xee, 0x38, 0xb8, 0xcf, 0xb2, 0xbf, 0xe9, 0x2d, 0x0a, 0xa9, 0x98, 0x15, 0xb3, 0xca, 0x1d, 0x11, 0x5f, 0x21, 0x49, 0x3b, 0x13, 0xad, 0xee, 0xaf, 0xce, 0x81, 0xa2, 0x3c, 0x6b, 0x1b, 0xc1, 0x5f, 0xc8, 0xf2, 0xb1, 0x71, 0x28, 0x4e, 0x6a, 0x1f, 0xd6, 0x5c, 0x35, 0x1b, 0x0c, 0x82, 0xb3, 0x11, 0x12, 0xf0, 0x22, 0xdd, 0xaa, 0x78, 0xdc, 0xfb, 0xac, 0x9f, 0x20, 0x3e, 0xee, 0xf4, 0x15, 0xc5, 0x66, 0xa0, 0x0c, 0x2c, 0x93, 0x3f, 0x06, 0xff, 0x18, 0xee, 0x76, 0x74, 0xab, 0xa5, 0x48, 0x59, 0x2d, 0xc8, 0x21, 0x4b, 0x1a, 0xf8, 0xe9, 0x29, 0x24, 0x2f, 0x87, 0xc8, 0x1b, 0x0c, 0xeb, 0xe8, 0x10, 0x6b, 0x52, 0x67, 0xba, 0x39, 0xc5, 0xb5, 0x19, 0x87, 0xe3, 0x88, 0x58, 0xdc, 0xe1, 0xd1, 0xf8, 0xd0, 0xcf, 0xee, 0x2b, 0xd6, 0x1d, 0x21, 0x7e, 0x5a, 0x5d, 0x41, 0xbb, 0x0c, 0x4a, 0xaf, 0x0e, 0x7b, 0x0a, 0x8c, 0x66, 0xe5, 0xb0, 0x29, 0x1e, 0x4d, 0x05, 0xbf, 0xdd, 0xcf, 0x88, 0x61, 0xbb, 0x31, 0xb3, 0x2e, 0xa5, 0xba, 0x80, 0xcb, 0x02, 0x47, 0x2c, 0x11, 0x96, 0x9b, 0x3b, 0x02, 0xa7, 0xf7, 0xbc, 0x02, 0x5f, 0xea, 0xce, 0x44, 0x72, 0x6b, 0x63, 0x82, 0x01, 0x25, 0x44, 0xf1, 0xbd, 0x12, 0x56, 0x74, 0x4f, 0x4b, 0x1b, 0x0f, 0xf8, 0x1f, 0x7b, 0x9f, 0x74, 0x62, 0xc5, 0xc9, 0x25, 0x07, 0xf1, 0x31, 0x6d, 0xf2, 0x28, 0xec, 0x5c, 0x07, 0x86, 0x37, 0x8b, 0x87, 0x1e, 0x69, 0x47, 0x9c, 0x3e, 0x26, 0xf2, 0x32, 0xf5, 0xd6, 0xa7, 0x09, 0xd3, 0x55, 0x1d, 0x08, 0xf0, 0xec, 0xce, 0xd5, 0x2f, 0x81, 0x58, 0xa2, 0xc4, 0x0a, 0x23, 0x4a, 0xf4, 0x48, 0x44, 0x9c, 0x1c, 0xb1, 0xa1, 0xf6, 0xf5, 0xae, 0x56, 0x17, 0x16, 0x06, 0x58, 0x2e, 0xbb, 0x9a, 0x58, 0x36, 0xc4, 0x54, 0xeb, 0x86, 0x01, 0x5a, 0xe7, 0xa4, 0xac, 0x87, 0x10, 0x5b, 0x37, 0x1b, 0xf4, 0x0d, 0x49, 0xb1, 0x13, 0x4a, 0x03, 0x72, 0x43, 0xa0, 0x87, 0x89, 0x53, 0xb5, 0xbb, 0xd6, 0xef, 0x94, 0x4a, 0xe7, 0xc3, 0x45, 0xec, 0x24, 0xe4, 0xa0, 0xe8, 0x49, 0x6b, 0x62, 0xd7, 0x1a, 0x63, 0x81, 0xaa, 0x52, 0xe5, 0xbd, 0xee, 0xdc, 0x81, 0x78, 0x4f, 0x45, 0xe0, 0xc7, 0x5b, 0x72, 0xa8, 0xc9, 0x89, 0x8e, 0xa0, 0x38, 0x7a, 0x47, 0x15, 0x3d, 0x7e, 0x3a, 0x7c, 0x89, 0x5a, 0xab, 0x58, 0xa1, 0x49, 0x7a, 0x5e, 0x79, 0x40, 0x52, 0xd7, 0x45, 0x76, 0x24, 0x47, 0x8c, 0x24, 0xd4, 0x4c, 0x7e, 0x89, 0x32, 0xc8, 0x87, 0x32, 0x2b, 0x42, 0x24, 0x78, 0x41, 0x8a, 0xf6, 0x4a, 0x38, 0x9c, 0x15, 0x2d, 0x12, 0xc7, 0xa6, 0x80, 0x3e, 0x0f, 0xb0, 0x05, 0x0d, 0xcf, 0x2b, 0x9d, 0x65, 0xa3, 0x5a, 0x53, 0xb9, 0x84, 0x5b, 0x9c, 0x38, 0x35, 0xfd, 0xdd, 0x45, 0xdf, 0xd1, 0x2e, 0x28, 0xf8, 0x84, 0x5e, 0x03, 0x68, 0x6b, 0x37, 0x07, 0xef, 0x60, 0x03, 0xe7, 0xc1, 0xcd, 0x4f, 0x8d, 0x74, 0x06, 0xee, 0x0d, 0x1c, 0xdc, 0x41, 0xd7, 0xb5, 0x6f, 0xb6, 0x30, 0xc1, 0x43, 0x8f, 0xe3, 0x31, 0x96, 0xe5, 0x33, 0x89, 0xf1, 0xec, 0x15, 0x40, 0xfe, 0x78, 0x9c, 0x65, 0x99, 0xc0, 0xb5, 0x89, 0x29, 0x62, 0x14, 0xd8, 0x31, 0xa8, 0x6e, 0x89, 0x22, 0x0a, 0xe9, 0x79, 0x74, 0xf4, 0xd1, 0x12, 0xf4, 0xc9, 0x8c, 0x72, 0x60, 0x27, 0xd0, 0xc9, 0x31, 0x6d, 0x13, 0x03, 0xb8, 0x7a, 0x43, 0xa8, 0x6c, 0xb8, 0xb8, 0x00, 0x83, 0x5a, 0x67, 0x7a, 0xbf, 0xe1, 0x58, 0x4e, 0x8b, 0xe5, 0x5a, 0x62, 0x46, 0x12, 0xf5, 0x6b, 0xdf, 0x71, 0xa0, 0x54, 0xa2, 0xe8, 0x34, 0xe3, 0x51, 0x05, 0xa1, 0x9a, 0x77, 0xf7, 0xdf, 0xdb, 0xf9, 0xdd, 0x28, 0x50, 0xee, 0x44, 0x65, 0x8a, 0xb0, 0xea, 0xe6, 0xe8, 0x33, 0xc8, 0x55, 0xbb, 0x96, 0x50, 0xed, 0xa7, 0xf8, 0xf4, 0xe7, 0x4d, 0x8d, 0xe7, 0x35, 0x26, 0xf1, 0x27, 0x73, 0xb2, 0xbc, 0xbb, 0x1b, 0xd3, 0x56, 0x39, 0xf8, 0x73, 0x0d, 0x8c, 0xdd, 0x6d, 0x64, 0xf4, 0x96, 0xab, 0xae, 0x4e, 0x1f, 0x8c, 0xdc, 0x96, 0x14, 0x88, 0x94, 0xaa, 0x69, 0x16, 0x83, 0x51, 0x5b, 0xcd, 0xf3, 0x7b, 0xa6, 0xca, 0xa0, 0xcb, 0xf9, 0x53, 0xc7, 0x52, 0xa7, 0xb9, 0x81, 0x9e, 0x9f, 0x83, 0x4f, 0xf3, 0x9e, 0xc8, 0xf6, 0xd8, 0xa3, 0xdd, 0x8d, 0xd5, 0xa4, 0x31, 0xd4, 0x7c, 0x7f, 0x74, 0xc7, 0xa6, 0x33, 0xff, 0x73, 0xff, 0x50, 0x70, 0x09, 0xc5, 0xac, 0x94, 0x31, 0xcc, 0x58, 0x8b, 0xa0, 0xc6, 0xd2, 0x26, 0xed, 0xc1, 0x7c, 0x94, 0xa0, 0xf1, 0x4d, 0x3e, 0x8d, 0xb0, 0xc7, 0xef, 0x60, 0xc3, 0x29, 0x38, 0x78, 0xdf, 0xe5, 0x13, 0xf9, 0x6b, 0x54, 0xc6, 0x1c, 0x88, 0xa9, 0x0a, 0xca, 0x4f, 0x24, 0x6d, 0x6a, 0x59, 0x88, 0xf5, 0xf7, 0x85, 0xce, 0x06, 0x55, 0xf5, 0x1b, 0x85, 0xe5, 0x5a, 0xf0, 0x3e, 0x57, 0x72, 0xa0, 0x83, 0xbf, 0xcf, 0x08, 0x16, 0xeb, 0xd9, 0x7a, 0x4a, 0xf4, 0x16, 0xfa, 0x64, 0x14, 0xa9, 0xad, 0x47, 0xb7, 0x19, 0x8e, 0x51, 0xd5, 0x54, 0x63, 0x80, 0x7e, 0xf4, 0xf0, 0xd9, 0xb7, 0xc0, 0x6a, 0x0a, 0x84, 0x76, 0x2e, 0x4e, 0x46, 0xc8, 0xb3, 0x91, 0x47, 0xa4, 0xbd, 0xd5, 0x94, 0xb8, 0xd4, 0xd4, 0x0b, 0x36, 0xf5, 0xe6, 0xb4, 0xd4, 0x87, 0x26, 0x55, 0x18, 0x90, 0xd0, 0x40, 0xd2, 0x29, 0xee, 0x70, 0xea, 0x30, 0x34, 0xd4, 0x5b, 0x3c, 0x28, 0xeb, 0x80, 0xd6, 0x86, 0x91, 0x8f, 0xe6, 0xe2, 0x19, 0x63, 0x6b, 0x8f, 0x9b, 0x7e, 0x6f, 0xc0, 0x8f, 0x4e, 0x3b, 0xed, 0x9b, 0xaf, 0xc7, 0x78, 0xaa, 0xb2, 0x74, 0x91, 0x3e, 0x9c, 0xfd, 0x57, 0x07, 0x32, 0xab, 0x3f, 0xb4, 0x34, 0xc9, 0xba, 0x09, 0x28, 0x58, 0x12, 0x32, 0x58, 0x04, 0x95, 0x57, 0x1e, 0x56, 0xf6, 0x70, 0x5f, 0x2a, 0xf0, 0x5b, 0x56, 0x64, 0x2c, 0x2b, 0x93, 0xdf, 0x65, 0xc4, 0x43, 0xa6, 0xca, 0xa5, 0xb1, 0x67, 0xa4, 0x04, 0x0d, 0x24, 0x38, 0x20, 0x6d, 0x2c, 0xef, 0xd3, 0x11, 0x4a, 0xb4, 0x66, 0xeb, 0x3c, 0x9e, 0xaa, 0x5e, 0x66, 0xcf, 0x44, 0x47, 0xc8, 0x9c, 0x49, 0x3a, 0x2e, 0xee, 0x0b, 0x0e, 0xa6, 0xe7, 0x32, 0x9b, 0x37, 0xc9, 0x0e, 0xc2, 0xd0, 0x14, 0x2b, 0xae, 0x7f, 0xef, 0x26, 0x5a, 0xe3, 0xc9, 0xc0, 0x53, 0xe4, 0x40, 0x31, 0xc0, 0xa1, 0x42, 0xbf, 0x9f, 0xaa, 0x72, 0x8e, 0x51, 0x70, 0xcd, 0xba, 0x59, 0xfa, 0x8d, 0xa3, 0x61, 0xd9, 0x4d, 0x88, 0x7d, 0x5d, 0x6f, 0x58, 0xb4, 0x09, 0xbb, 0xc4, 0xbd, 0x45, 0x48, 0x99, 0x06, 0x53, 0xa0, 0x4d, 0xfb, 0x84, 0x1f, 0xd7, 0x84, 0xac, 0x9c, 0xc4, 0xcf, 0xd3, 0x4c, 0x88, 0x51, 0x2d, 0xe2, 0x12, 0x07, 0x4d, 0xfb, 0xa3, 0x02, 0x95, 0xba, 0xdf, 0x22, 0xf1, 0xaf, 0x25, 0x22, 0xc5, 0xfe, 0x1c, 0xd4, 0x23, 0xbd, 0x8e, 0xae, 0x42, 0x9d, 0x7a, 0x86, 0x2b, 0xcd, 0x64, 0x9a, 0xb6, 0x1b, 0xf0, 0xd3, 0xb5, 0x5d, 0xaf, 0x4b, 0x6f, 0x0f, 0x39, 0x0c, 0x50, 0x3d, 0x7c, 0x1b, 0xde, 0xa4, 0x53, 0xb5, 0xef, 0x14, 0x5b, 0xd8, 0x19, 0x18, 0x02, 0x05, 0x6b, 0xd9, 0xe0, 0x45, 0x5a, 0x40, 0x4b, 0x6a, 0xfe, 0x5b, 0x25, 0x97, 0x7f, 0x02, 0xf9, 0x02, 0xca, 0xba, 0x46, 0xf9, 0x88, 0xd9, 0x1b, 0x23, 0x50, 0xeb, 0xe4, 0x09, 0x1b, 0x55, 0x84, 0xd4, 0xf9, 0x38, 0xa4, 0x58, 0x03, 0x98, 0x4a, 0x52, 0x91, 0xbe, 0xad, 0xee, 0xad, 0xda, 0x48, 0x8d, 0xc7, 0xed, 0x2d, 0xc4, 0xaa, 0xe6, 0x9c, 0xa8, 0xae, 0x0b, 0xd4, 0x49, 0x2f, 0x9b, 0x29, 0x7c, 0x3f, 0xb2, 0x57, 0xde, 0x98, 0x6c, 0x16, 0x15, 0xd4, 0x4d, 0xee, 0x59, 0xe1, 0xe1, 0x4d, 0x34, 0xaf, 0x9f, 0xd7, 0x85, 0x2b, 0x13, 0xfd, 0xcb, 0x71, 0x3d, 0xd1, 0xa0, 0x3d, 0x34, 0x18, 0x84, 0xa3, 0x0e, 0xa1, 0xdc, 0x01, 0x04, 0xd6, 0x3a, 0x31, 0xd2, 0x91, 0xdf, 0x03, 0x5d, 0x31, 0x7f, 0xea, 0x98, 0xec, 0x44, 0xf5, 0xa8, 0x67, 0x15, 0x01, 0x47, 0x83, 0x17, 0x2e, 0x66, 0x7a, 0x74, 0x8f, 0x16, 0x2c, 0x5c, 0x26, 0xa8, 0xb3, 0x4a, 0x0f, 0x13, 0x3d, 0x89, 0xfb, 0x97, 0x1b, 0xf6, 0xe0, 0xa0, 0x15, 0x07, 0xef, 0xed, 0x01, 0x0c, 0xc7, 0xf1, 0x94, 0xb5, 0xe8, 0x7a, 0x77, 0xd5, 0x6a, 0x90, 0x9d, 0x65, 0xef, 0xa0, 0xd5, 0xcc, 0xd6, 0xda, 0x9b, 0x5e, 0xb1, 0xd7, 0x34, 0x22, 0xf9, 0x7f, 0xfa, 0xd8, 0x01, 0x2a, 0xf4, 0x3a, 0x29, 0x05, 0xa9, 0x83, 0x54, 0xb8, 0x36, 0x2e, 0x9c, 0x45, 0x9f, 0x00, 0x44, 0x33, 0x63, 0x48, 0xed, 0xed, 0x53, 0x66, 0x0d, 0x65, 0xa3, 0x8a, 0x9e, 0xfc, 0x42, 0xbe, 0x13, 0xa6, 0x67, 0x27, 0x90, 0x49, 0x6d, 0x87, 0x5a, 0x67, 0xe0, 0x07, 0x8d, 0xfd, 0xd8, 0x34, 0x0d, 0xab, 0x85, 0x47, 0xbe, 0x14, 0x0c, 0xa9, 0xf8, 0x88, 0x91, 0xb6, 0x35, 0xe1, 0x95, 0xc2, 0x0d, 0xaa, 0x83, 0x59, 0x65, 0x87, 0x85, 0xcb, 0xe3, 0xd0, 0x9c, 0xe8, 0xa5, 0x80, 0xf0, 0x09, 0x32, 0x4e, 0x65, 0x50, 0xb0, 0x19, 0x6e, 0x30, 0x58, 0x89, 0x26, 0x2f, 0x28, 0xf4, 0x9d, 0xea, 0xd7, 0x7e, 0x6f, 0x5a, 0x0e, 0x85, 0x9c, 0x57, 0xd5, 0x3c, 0x93, 0x5a, 0x4c, 0x95, 0x90, 0x87, 0x9b, 0x65, 0x28, 0xeb, 0x2b, 0xc3, 0x23, 0x02, 0x17, 0xb0, 0x89, 0x7c, 0xdd, 0xfe, 0xff, 0x40, 0x5a, 0x6a, 0x54, 0xb2, 0xf5, 0x0c, 0x58, 0x31, 0x1a, 0xf1, 0xed, 0xe4, 0xea, 0x06, 0x60, 0xb7, 0x30, 0x37, 0xf9, 0xa0, 0x97, 0xd9, 0xd0, 0x27, 0x1b, 0x45, 0xe3, 0x25, 0xbe, 0xc6, 0x66, 0xcc, 0x7c, 0xb6, 0x5a, 0xe7, 0x80, 0xe3, 0x61, 0x63, 0x98, 0x38, 0xd1, 0x0f, 0xe7, 0x99, 0x07, 0xa0, 0xda, 0x0e, 0xfe, 0xf8, 0x5d, 0x24, 0x20, 0xa8, 0x4e, 0x90, 0x5b, 0xb3, 0x31, 0x16, 0x78, 0x95, 0x26, 0xa9, 0xa8, 0x83, 0x19, 0xd4, 0x60, 0xf5, 0x39, 0x58, 0x67, 0x62, 0xab, 0x17, 0x2e, 0x4a, 0x7f, 0x30, 0x5f, 0x7a, 0xe3, 0x6c, 0xb8, 0x8c, 0x96, 0xd9, 0x1a, 0xad, 0xa0, 0xb4, 0xdd, 0xa3, 0x41, 0x8c, 0x67, 0x0e, 0x27, 0xa5, 0xfd, 0xed, 0xe3, 0x9b, 0xd8, 0x65, 0x9e, 0x47, 0x7c, 0xbe, 0x08, 0xe6, 0x45, 0xaf, 0x92, 0x78, 0x43, 0xdb, 0xdd, 0x67, 0x48, 0x9b, 0x72, 0x69, 0x3e, 0xfe, 0xb3, 0xa7, 0xbe, 0x0e, 0x12, 0x1f, 0xdf, 0x55, 0x80, 0x47, 0x4c, 0xa0, 0x28, 0xf3, 0x9a, 0x03, 0x5e, 0x78, 0xd8, 0x1d, 0xd2, 0x12, 0x67, 0x9d, 0x0a, 0x83, 0x0c, 0x05, 0x0f, 0xfd, 0x43, 0xaf, 0x66, 0x42, 0xd6, 0x0d, 0x41, 0x0a, 0xaf, 0x34, 0xf7, 0xa5, 0xea, 0x9c, 0xb2, 0xe1, 0x2f, 0x21, 0x67, 0x2e, 0x3f, 0x4e, 0x0c, 0x00, 0xcc, 0xdb, 0x05, 0x75, 0x8e, 0x74, 0xdf, 0x38, 0x93, 0xbd, 0x40, 0xa5, 0xd7, 0x92, 0x1e, 0x2e, 0x14, 0x93, 0x30, 0xfd, 0xdb, 0xe0, 0xa2, 0xda, 0xe4, 0x21, 0x0d, 0x50, 0xa3, 0xca, 0xa6, 0x0b, 0x1b, 0x9d, 0xb6, 0x85, 0xf7, 0x70, 0x4a, 0xe2, 0xd7, 0x30, 0x2b, 0x18, 0xe8, 0x26, 0x10, 0x52, 0xb7, 0x79, 0x13, 0x97, 0x47, 0xf4, 0x62, 0xa6, 0x61, 0x0a, 0x37, 0x25, 0x2b, 0x17, 0x0a, 0xfb, 0xfc, 0xe9, 0x05, 0xfb, 0x6f, 0x7f, 0xb8, 0xc2, 0xb6, 0x10, 0x0e, 0xe2, 0x31, 0x50, 0x7f, 0x40, 0x3f, 0xee, 0x88, 0xba, 0x55, 0x61, 0x58, 0x0d, 0x4d, 0xe4, 0xcd, 0xf6, 0x00, 0xbf, 0x9e, 0x98, 0x16, 0xc9, 0xda, 0x1e, 0x1d, 0x2b, 0x91, 0xa1, 0xd9, 0x66, 0xd0, 0x4c, 0xdb, 0x98, 0xd3, 0xbe, 0x55, 0xfb, 0x77, 0xaf, 0x2d, 0xae, 0xee, 0xd7, 0x50, 0xb8, 0xb6, 0x0b, 0x49, 0x4a, 0xcc, 0xaa, 0x12, 0x44, 0x1d, 0x37, 0x2a, 0xfb, 0x3d, 0x47, 0xe7, 0x39, 0x5b, 0x9e, 0x0e, 0x86, 0x75, 0x95, 0xa1, 0xa6, 0xc8, 0xbf, 0xf8, 0x63, 0x8b, 0xcb, 0x13, 0x8d, 0xdc, 0xac, 0x2f, 0x3e, 0xfb, 0xf8, 0x97, 0x62, 0xb6, 0x8e, 0xbd, 0x77, 0x24, 0x7c, 0x89, 0x92, 0x96, 0x20, 0xf1, 0xa3, 0xcb, 0x8d, 0xca, 0xf9, 0x63, 0x2f, 0xde, 0x09, 0x96, 0xb3, 0x3e, 0x6b, 0x26, 0x21, 0xda, 0x25, 0x92, 0x4b, 0x4e, 0x2c, 0x8d, 0x6b, 0xff, 0x28, 0xae, 0x08, 0x67, 0x78, 0x69, 0x19, 0xad, 0x76, 0x3e, 0x6d, 0x79, 0xfc, 0x30, 0x4a, 0x06, 0x27, 0x79, 0x55, 0x79, 0x5a, 0x7c, 0xb1, 0x71, 0x86, 0xfb, 0x6b, 0xdf, 0xa9, 0x8a, 0x16, 0x18, 0x95, 0x44, 0xb2, 0x28, 0xf3, 0xbc, 0xd3, 0x69, 0x87, 0x37, 0xff, 0x55, 0xb6, 0x18, 0x57, 0x99, 0x45, 0x9b, 0x79, 0x6a, 0x63, 0xc6, 0xa6, 0x1c, 0xea, 0x9d, 0x20, 0xf1, 0xe2, 0x96, 0xd6, 0x2f, 0x47, 0x4c, 0x43, 0x75, 0x0b, 0x77, 0x94, 0x4e, 0x5f, 0x1c, 0x09, 0x07, 0x2f, 0x01, 0x9d, 0xbe, 0xeb, 0x64, 0xe9, 0xbc, 0x8d, 0xec, 0x46, 0x05, 0xd8, 0xe0, 0x32, 0x2c, 0xdd, 0x97, 0xf5, 0x6c, 0xc4, 0x30, 0x84, 0xf5, 0xc9, 0x83, 0xa5, 0x84, 0x85, 0x56, 0x54, 0x36, 0x6f, 0xd5, 0x65, 0x9e, 0xa2, 0x3c, 0x6c, 0x15, 0xe1, 0xd7, 0xda, 0x51, 0xd8, 0x2c, 0x68, 0x3a, 0xa4, 0x77, 0xb9, 0xf8, 0x96, 0x56, 0x3a, 0x51, 0x34, 0xc6, 0x4e, 0x32, 0x81, 0x4e, 0xa8, 0x8b, 0x7f, 0x7a, 0xf7, 0x60, 0xf1, 0x8b, 0xc9, 0x1e, 0x65, 0x6d, 0xa9, 0x2b, 0x72, 0xe9, 0x8b, 0xc0, 0x3f, 0x1c, 0x6b, 0xfb, 0x44, 0x28, 0x30, 0x30, 0x55, 0x29, 0xd6, 0x81, 0xdc, 0x6b, 0xcc, 0xae, 0x66, 0xda, 0x9b, 0x2e, 0x61, 0xb9, 0xc9, 0x7e, 0x23, 0x97, 0xfd, 0xb9, 0x2f, 0x7f, 0x63, 0x69, 0xb4, 0x70, 0x52, 0x9c, 0x57, 0x0c, 0x2d, 0x3b, 0x32, 0x94, 0x87, 0x98, 0x1d, 0x14, 0x8a, 0x46, 0x2c, 0xdb, 0x99, 0x2d, 0x79, 0x2e, 0x34, 0xdd, 0x23, 0x3e, 0x1c, 0x23, 0x96, 0x57, 0xb8, 0xda, 0x0d, 0x59, 0xb8, 0x04, 0x56, 0x6c, 0xf8, 0x1a, 0xd5, 0xf0, 0xa7, 0xa0, 0xcc, 0xb3, 0xa8, 0xfb, 0xda, 0x67, 0x38, 0x87, 0xc1, 0x53, 0xd2, 0xe5, 0x6c, 0x48, 0x4f, 0x92, 0x30, 0xd7, 0x52, 0xbe, 0x52, 0xc1, 0xe3, 0x5b, 0xc9, 0xaf, 0x5a, 0x74, 0x46, 0x23, 0x7f, 0xc0, 0x72, 0xaf, 0xef, 0x77, 0x76, 0x65, 0xc2, 0x64, 0xc1, 0x8e, 0x6a, 0x3c, 0x05, 0x9f, 0xde, 0x2e, 0x83, 0x68, 0xf9, 0xbb, 0x89, 0x8f, 0x1c, 0xc8, 0x39, 0x3d, 0x1b, 0xf1, 0x8b, 0x17, 0x57, 0x21, 0x96, 0x70, 0x27, 0x5f, 0x0b, 0xbc, 0x7d, 0xeb, 0x02, 0x48, 0xc6, 0x8a, 0xf9, 0x29, 0x11, 0x1e, 0x19, 0x73, 0x74, 0x79, 0xbc, 0xab, 0xab, 0x73, 0x2d, 0x7e, 0x03, 0x3a, 0xae, 0xb2, 0x77, 0xea, 0xc0, 0x5e, 0x18, 0x5e, 0x9e, 0x56, 0xb2, 0x45, 0x0b, 0xea, 0xac, 0x78, 0x4d, 0xd0, 0x30, 0x8b, 0x7a, 0x5e, 0x8c, 0xa1, 0xf2, 0xfc, 0xd8, 0x85, 0x2d, 0xda, 0xd9, 0xf7, 0xb7, 0xde, 0x26, 0x44, 0x78, 0xe1, 0x89, 0x1a, 0x39, 0x1a, 0xa8, 0x99, 0x64, 0xda, 0xe5, 0xad, 0x0b, 0x7a, 0x82, 0x9c, 0x2c, 0x92, 0x09, 0xdb, 0x34, 0x6c, 0xeb, 0x26, 0xc1, 0xb9, 0x67, 0xcf, 0xac, 0x82, 0xad, 0x57, 0x47, 0x61, 0x44, 0x3b, 0xe3, 0xf0, 0xa9, 0x10, 0x96, 0x82, 0x39, 0xd2, 0x3b, 0x11, 0x50, 0x7a, 0xb9, 0x78, 0xb3, 0xce, 0x89, 0xe2, 0x2b, 0x7d, 0x72, 0x83, 0x73, 0x6b, 0x97, 0x86, 0x54, 0x4a, 0xb4, 0x46, 0x0f ] ];
-
-const sha256_long_mds = const [
- '3c593aa539fdcdae516cdf2f15000f6634185c88f505b39775fb9ab137a10aa2',
- '46500b6ae1ab40bde097ef168b0f3199049b55545a1588792d39d594f493dca7',
- '5f4e16a72d6c9857da0ba009ccacd4f26d7f6bf6c1b78a2ed35e68fcb15b8e40',
- '044d823532092c22a4b48181cfb2c796e1f5b98bcd713a21f70b5afcceef1d73',
- 'db593a375cb27df689cd78b5154949e5bc30094a05d704c0295d547385176662',
- '0599f88c429a3d4fcbb0206fa57e344121afdf8e56f78e3f5e61ba3bcf134ec6',
- '6c83f9b69754facc3155da93261ed99c38e4225e748e8ebcd04ed62719fa56db',
- 'f574ac85532bc0c6c4e7614a2e084dbc49fbc474cda593144af28c5cc5f293f8',
- '19636dfc80fef6d47c7ab8fa620909ccc387126cec56415c9a898f64be728515',
- '3380c8dae5c0b68bb264b757e2451c21cbe2b899fe7a871ab1bae6041f48e7ad',
- 'c31bc10bed1384826cc30369b2d0b5880422e1a34d0eea0b67f29f40de17ba46',
- 'c3cd7be2de832774c614ccf60d030d75dfacf3cc7e49a37af349a4c3c196b106',
- '888e223d5a497fc679c3ecfe98bf7dc531a4adf3ccf0e6d586c8912ebf781af1',
- 'e65812200409ad7e1684a2df8e15685dfab7079449c52d032870d80acceab3f6',
- '2916d4595a3ede77f4165357977cf3529c672dcf4c39e76ec3aa848dba6ff4f6',
- 'df5f9f0898e0fa1bd9c3d3196fa8f7e6b01331d11eb214f7e5629bb7a1b7eb20',
- '46d6071814544b8de5db52d4b4d22023ba2e630146ef4e47b9b280341985f189',
- '0a147f33ab036e8ae148061028c6a557e2eeb1a6ea71b3760548734942743557',
- '07ddd5dafcf04956cc36c1ff290f07c1c0e5832cc8dd9aea502da677ea04fe64',
- '2ace8ba5195f54a7c501234431e99232dbb1d1365edbb593a3dd3b5810326570',
- '4c7118050c64cb293f54c5cc199e99aa87c0a7aaeb7256af498e82d535b994c7',
- '906c5b84ec1e480195860d89f859fc7d3c5f67f585ef8b738ffec08a3c07a98b',
- '09247dc00c0060232407a4e69050b5112c9f72a65d7b0ff077f6be180c482cdb',
- '7b2e8b28951a825924aed1b26e9c197ec080558a97120f34d6e22e341a90c978',
- 'a5e93544e86eb9960dcfcebb6bcc461d82f119cae1947e340c7cea1c7f351c0b',
- 'c525eef8b2ca56547565c947bb7e964e2ecae7c9c82c29228b6c932d2ace181c',
- '31600a05842b12ea927796eafa30e6b1634a97f9bb41a2f75abbb2aa921c17c3',
- '7ce7f53dc2287da4cf28c9fe64d5515e484c9cc57fd81ec76e66fa38b760565e',
- 'e026d0e1228ef882d093fe4dbb2ec5134dd122877ac2b380d399bff447fc9fa1',
- 'cd26132e2c223d19d3a75ae0664f7475b478695d7824dad856c19417ea0b3794',
- '176b0c71e213031a29f56009aac7ebec591ba24a8b162d80506b2df8f59e11a2',
- '36423179904261f57bf7405853a319058065857e67a510128baf09a68c30b987',
- '54290349fbb1e8327a65b871f3fc2c6d3975775e48dd1d7b2c368142bcfc8c27',
- '683712362407cefd2968ce6373cbd86c1a6170493c84025be740129120d327bc',
- '76e3a0221b6d29a43a0c2929baaf46ab00b85571d59ef2b3f0facb315621f4ec',
- 'a7c4cff2f73c911d7e3f2f82b20adb9cf2caafc9254cf5997215a11046846d0e',
- '977495dc59e74389b65ee1a7a33295014abdcf7916f9e0d1ca39a7cd395e6c41',
- '6a5f09b3e0a8ae5d795f2dbed00ee521aed5b0875d2e487a82b2c687b527c278',
- '5ba431851b1e2be373d818c3c6884e53d82273219c3f1c36c9aae099fa6690e1',
- 'd305c4ce0161386004c267eaa17180eb2433280716c894ed4094c2597a582da1',
- 'f98918c63e3a9238e78dbd5bebe4e47eaeec0ae1627387dcd2a5ae4725f7e47c',
- 'cf17b0770212e87516c080aad008d50cb5481044626a325be730d54a66f66662',
- '10e88348b55c5c0683f4d4d3ef56c485be9888bf00806040de25204d25df4ea6',
- 'd46ef45eb47aa54032fc8ea47150d10334b208dc6b7ac5e09e8718231e87cd1c',
- '982c20c2493fc9ae405b74b65a022662c014a38ef3d707217e56e57afac05994',
- '8e28867538bc2c6c94d3428f05b1458f428d3f950430b09238209efe6bb267d9',
- '022aa46f368252ce0a7b2431d55ac4767455865dfe65d2e372f4e82691a14cb2',
- '5d1f1f7c14e34f79468bb5de195a60f3b422c4e48757facf1df01d1b022e6764',
- '6025dc79681355ec9f3886a74b39dc4d1d2e6c77180080e9d296e5ca7742d04e',
- 'f52b3c537f28d89f0df1efee21c70f74df186f3928296d19582d5c51286e98bc',
- '1ca0be9286023fb0b947f07cad056e59cff9d2d16c7cefdbedc33950a9312685',
- 'd8101ed4097b4bde7abbc16cd854e4c122460dbbabf08a9f56f4f2b882f59b00',
- '9570f18459f97be85bfc8fca837e0891ef248ba6295119679280a136d60e57f2',
- '8ff4c479d1230d8dc53493395e89ca712533b80e1b97cb5af448e0e78fab0f7a',
- 'c4558c7ec68df61d6bb65238397d49cc320a8c213f7bffdd4a397552d83ec20e',
- '7ebc665ab5e5a1babbbae9e86bd00a09bfe68c4ca91b9f0da092c853c7732c3f',
- 'cecddb12b508e6cddcf3e96635abec8bc6031d588b21a4a4859cbdd79aaee47a',
- '03deb53fbacc9e3701311efbff2ee0566c27355b6f30a22848a5b8618f6c0d63',
- '0b6180f72608560023802ef42e0d80f862759a2a6b107667d7819e07bef00b08',
- '71b950c0085388ddf90444c0918d72aa700319e789441fcd2da539c12a32ee19',
- 'd5ebd0d3d544e46023979d06b666f35758b69628d95abb808fa65f51f03b81bf',
- '740e25c81e510d27735af90e3f8091596092c8136edb60f4df910f7204c289d5',
- '90df9cc3a3b904415331eba9cd52750c2c5cb73cb91b42caca7eee3788fc2b30',
- '33b6229592ca719e4e46f35b287617fedadd3b7c38be3c8c1c9f446d2d9085b3' ];
diff --git a/pkg/crypto/test/sha256_short_test_vectors.dart b/pkg/crypto/test/sha256_short_test_vectors.dart
deleted file mode 100644
index 3b48a63..0000000
--- a/pkg/crypto/test/sha256_short_test_vectors.dart
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of sha256_test;
-
-// Standard test vectors from:
-// http://csrc.nist.gov/groups/STM/cavp/documents/shs/shabytetestvectors.zip
-
-const sha256_short_inputs = const [
-const [ ],
-const [ 0xd3 ],
-const [ 0x11, 0xaf ],
-const [ 0xb4, 0x19, 0x0e ],
-const [ 0x74, 0xba, 0x25, 0x21 ],
-const [ 0xc2, 0x99, 0x20, 0x96, 0x82 ],
-const [ 0xe1, 0xdc, 0x72, 0x4d, 0x56, 0x21 ],
-const [ 0x06, 0xe0, 0x76, 0xf5, 0xa4, 0x42, 0xd5 ],
-const [ 0x57, 0x38, 0xc9, 0x29, 0xc4, 0xf4, 0xcc, 0xb6 ],
-const [ 0x33, 0x34, 0xc5, 0x80, 0x75, 0xd3, 0xf4, 0x13, 0x9e ],
-const [ 0x74, 0xcb, 0x93, 0x81, 0xd8, 0x9f, 0x5a, 0xa7, 0x33, 0x68 ],
-const [ 0x76, 0xed, 0x24, 0xa0, 0xf4, 0x0a, 0x41, 0x22, 0x1e, 0xbf, 0xcf ],
-const [ 0x9b, 0xaf, 0x69, 0xcb, 0xa3, 0x17, 0xf4, 0x22, 0xfe, 0x26, 0xa9, 0xa0 ],
-const [ 0x68, 0x51, 0x1c, 0xdb, 0x2d, 0xbb, 0xf3, 0x53, 0x0d, 0x7f, 0xb6, 0x1c, 0xbc ],
-const [ 0xaf, 0x39, 0x7a, 0x8b, 0x8d, 0xd7, 0x3a, 0xb7, 0x02, 0xce, 0x8e, 0x53, 0xaa, 0x9f ],
-const [ 0x29, 0x4a, 0xf4, 0x80, 0x2e, 0x5e, 0x92, 0x5e, 0xb1, 0xc6, 0xcc, 0x9c, 0x72, 0x4f, 0x09 ],
-const [ 0x0a, 0x27, 0x84, 0x7c, 0xdc, 0x98, 0xbd, 0x6f, 0x62, 0x22, 0x0b, 0x04, 0x6e, 0xdd, 0x76, 0x2b ],
-const [ 0x1b, 0x50, 0x3f, 0xb9, 0xa7, 0x3b, 0x16, 0xad, 0xa3, 0xfc, 0xf1, 0x04, 0x26, 0x23, 0xae, 0x76, 0x10 ],
-const [ 0x59, 0xeb, 0x45, 0xbb, 0xbe, 0xb0, 0x54, 0xb0, 0xb9, 0x73, 0x34, 0xd5, 0x35, 0x80, 0xce, 0x03, 0xf6, 0x99 ],
-const [ 0x58, 0xe5, 0xa3, 0x25, 0x9c, 0xb0, 0xb6, 0xd1, 0x2c, 0x83, 0xf7, 0x23, 0x37, 0x9e, 0x35, 0xfd, 0x29, 0x8b, 0x60 ],
-const [ 0xc1, 0xef, 0x39, 0xce, 0xe5, 0x8e, 0x78, 0xf6, 0xfc, 0xdc, 0x12, 0xe0, 0x58, 0xb7, 0xf9, 0x02, 0xac, 0xd1, 0xa9, 0x3b ],
-const [ 0x9c, 0xab, 0x7d, 0x7d, 0xca, 0xec, 0x98, 0xcb, 0x3a, 0xc6, 0xc6, 0x4d, 0xd5, 0xd4, 0x47, 0x0d, 0x0b, 0x10, 0x3a, 0x81, 0x0c ],
-const [ 0xea, 0x15, 0x7c, 0x02, 0xeb, 0xaf, 0x1b, 0x22, 0xde, 0x22, 0x1b, 0x53, 0xf2, 0x35, 0x39, 0x36, 0xd2, 0x35, 0x9d, 0x1e, 0x1c, 0x97 ],
-const [ 0xda, 0x99, 0x9b, 0xc1, 0xf9, 0xc7, 0xac, 0xff, 0x32, 0x82, 0x8a, 0x73, 0xe6, 0x72, 0xd0, 0xa4, 0x92, 0xf6, 0xee, 0x89, 0x5c, 0x68, 0x67 ],
-const [ 0x47, 0x99, 0x13, 0x01, 0x15, 0x6d, 0x1d, 0x97, 0x7c, 0x03, 0x38, 0xef, 0xbc, 0xad, 0x41, 0x00, 0x41, 0x33, 0xae, 0xfb, 0xca, 0x6b, 0xcf, 0x7e ],
-const [ 0x2e, 0x7e, 0xa8, 0x4d, 0xa4, 0xbc, 0x4d, 0x7c, 0xfb, 0x46, 0x3e, 0x3f, 0x2c, 0x86, 0x47, 0x05, 0x7a, 0xff, 0xf3, 0xfb, 0xec, 0xec, 0xa1, 0xd2, 0x00 ],
-const [ 0x47, 0xc7, 0x70, 0xeb, 0x45, 0x49, 0xb6, 0xef, 0xf6, 0x38, 0x1d, 0x62, 0xe9, 0xbe, 0xb4, 0x64, 0xcd, 0x98, 0xd3, 0x41, 0xcc, 0x1c, 0x09, 0x98, 0x1a, 0x7a ],
-const [ 0xac, 0x4c, 0x26, 0xd8, 0xb4, 0x3b, 0x85, 0x79, 0xd8, 0xf6, 0x1c, 0x98, 0x07, 0x02, 0x6e, 0x83, 0xe9, 0xb5, 0x86, 0xe1, 0x15, 0x9b, 0xd4, 0x3b, 0x85, 0x19, 0x37 ],
-const [ 0x07, 0x77, 0xfc, 0x1e, 0x1c, 0xa4, 0x73, 0x04, 0xc2, 0xe2, 0x65, 0x69, 0x28, 0x38, 0x10, 0x9e, 0x26, 0xaa, 0xb9, 0xe5, 0xc4, 0xae, 0x4e, 0x86, 0x00, 0xdf, 0x4b, 0x1f ],
-const [ 0x1a, 0x57, 0x25, 0x1c, 0x43, 0x1d, 0x4e, 0x6c, 0x2e, 0x06, 0xd6, 0x52, 0x46, 0xa2, 0x96, 0x91, 0x50, 0x71, 0xa5, 0x31, 0x42, 0x5e, 0xcf, 0x25, 0x59, 0x89, 0x42, 0x2a, 0x66 ],
-const [ 0x9b, 0x24, 0x5f, 0xda, 0xd9, 0xba, 0xeb, 0x89, 0x0d, 0x9c, 0x0d, 0x0e, 0xff, 0x81, 0x6e, 0xfb, 0x4c, 0xa1, 0x38, 0x61, 0x0b, 0xc7, 0xd7, 0x8c, 0xb1, 0xa8, 0x01, 0xed, 0x32, 0x73 ],
-const [ 0x95, 0xa7, 0x65, 0x80, 0x9c, 0xaf, 0x30, 0xad, 0xa9, 0x0a, 0xd6, 0xd6, 0x1c, 0x2b, 0x4b, 0x30, 0x25, 0x0d, 0xf0, 0xa7, 0xce, 0x23, 0xb7, 0x75, 0x3c, 0x91, 0x87, 0xf4, 0x31, 0x9c, 0xe2 ],
-const [ 0x09, 0xfc, 0x1a, 0xcc, 0xc2, 0x30, 0xa2, 0x05, 0xe4, 0xa2, 0x08, 0xe6, 0x4a, 0x8f, 0x20, 0x42, 0x91, 0xf5, 0x81, 0xa1, 0x27, 0x56, 0x39, 0x2d, 0xa4, 0xb8, 0xc0, 0xcf, 0x5e, 0xf0, 0x2b, 0x95 ],
-const [ 0x05, 0x46, 0xf7, 0xb8, 0x68, 0x2b, 0x5b, 0x95, 0xfd, 0x32, 0x38, 0x5f, 0xaf, 0x25, 0x85, 0x4c, 0xb3, 0xf7, 0xb4, 0x0c, 0xc8, 0xfa, 0x22, 0x9f, 0xbd, 0x52, 0xb1, 0x69, 0x34, 0xaa, 0xb3, 0x88, 0xa7 ],
-const [ 0xb1, 0x2d, 0xb4, 0xa1, 0x02, 0x55, 0x29, 0xb3, 0xb7, 0xb1, 0xe4, 0x5c, 0x6d, 0xbc, 0x7b, 0xaa, 0x88, 0x97, 0xa0, 0x57, 0x6e, 0x66, 0xf6, 0x4b, 0xf3, 0xf8, 0x23, 0x61, 0x13, 0xa6, 0x27, 0x6e, 0xe7, 0x7d ],
-const [ 0xe6, 0x8c, 0xb6, 0xd8, 0xc1, 0x86, 0x6c, 0x0a, 0x71, 0xe7, 0x31, 0x3f, 0x83, 0xdc, 0x11, 0xa5, 0x80, 0x9c, 0xf5, 0xcf, 0xbe, 0xed, 0x1a, 0x58, 0x7c, 0xe9, 0xc2, 0xc9, 0x2e, 0x02, 0x2a, 0xbc, 0x16, 0x44, 0xbb ],
-const [ 0x4e, 0x3d, 0x8a, 0xc3, 0x6d, 0x61, 0xd9, 0xe5, 0x14, 0x80, 0x83, 0x11, 0x55, 0xb2, 0x53, 0xb3, 0x79, 0x69, 0xfe, 0x7e, 0xf4, 0x9d, 0xb3, 0xb3, 0x99, 0x26, 0xf3, 0xa0, 0x0b, 0x69, 0xa3, 0x67, 0x74, 0x36, 0x60, 0x00 ],
-const [ 0x03, 0xb2, 0x64, 0xbe, 0x51, 0xe4, 0xb9, 0x41, 0x86, 0x4f, 0x9b, 0x70, 0xb4, 0xc9, 0x58, 0xf5, 0x35, 0x5a, 0xac, 0x29, 0x4b, 0x4b, 0x87, 0xcb, 0x03, 0x7f, 0x11, 0xf8, 0x5f, 0x07, 0xeb, 0x57, 0xb3, 0xf0, 0xb8, 0x95, 0x50 ],
-const [ 0xd0, 0xfe, 0xfd, 0x96, 0x78, 0x7c, 0x65, 0xff, 0xa7, 0xf9, 0x10, 0xd6, 0xd0, 0xad, 0xa6, 0x3d, 0x64, 0xd5, 0xc4, 0x67, 0x99, 0x60, 0xe7, 0xf0, 0x6a, 0xeb, 0x8c, 0x70, 0xdf, 0xef, 0x95, 0x4f, 0x8e, 0x39, 0xef, 0xdb, 0x62, 0x9b ],
-const [ 0xb7, 0xc7, 0x9d, 0x7e, 0x5f, 0x1e, 0xec, 0xcd, 0xfe, 0xdf, 0x0e, 0x7b, 0xf4, 0x3e, 0x73, 0x0d, 0x44, 0x7e, 0x60, 0x7d, 0x8d, 0x14, 0x89, 0x82, 0x3d, 0x09, 0xe1, 0x12, 0x01, 0xa0, 0xb1, 0x25, 0x80, 0x39, 0xe7, 0xbd, 0x48, 0x75, 0xb1 ],
-const [ 0x64, 0xcd, 0x36, 0x3e, 0xcc, 0xe0, 0x5f, 0xdf, 0xda, 0x24, 0x86, 0xd0, 0x11, 0xa3, 0xdb, 0x95, 0xb5, 0x20, 0x6a, 0x19, 0xd3, 0x05, 0x40, 0x46, 0x81, 0x9d, 0xd0, 0xd3, 0x67, 0x83, 0x95, 0x5d, 0x7e, 0x5b, 0xf8, 0xba, 0x18, 0xbf, 0x73, 0x8a ],
-const [ 0x6a, 0xc6, 0xc6, 0x3d, 0x61, 0x8e, 0xaf, 0x00, 0xd9, 0x1c, 0x5e, 0x28, 0x07, 0xe8, 0x3c, 0x09, 0x39, 0x12, 0xb8, 0xe2, 0x02, 0xf7, 0x8e, 0x13, 0x97, 0x03, 0x49, 0x8a, 0x79, 0xc6, 0x06, 0x7f, 0x54, 0x49, 0x7c, 0x61, 0x27, 0xa2, 0x39, 0x10, 0xa6 ],
-const [ 0xd2, 0x68, 0x26, 0xdb, 0x9b, 0xae, 0xaa, 0x89, 0x26, 0x91, 0xb6, 0x89, 0x00, 0xb9, 0x61, 0x63, 0x20, 0x8e, 0x80, 0x6a, 0x1d, 0xa0, 0x77, 0x42, 0x9e, 0x45, 0x4f, 0xa0, 0x11, 0x84, 0x09, 0x51, 0xa0, 0x31, 0x32, 0x7e, 0x60, 0x5a, 0xb8, 0x2e, 0xcc, 0xe2 ],
-const [ 0x3f, 0x7a, 0x05, 0x9b, 0x65, 0xd6, 0xcb, 0x02, 0x49, 0x20, 0x4a, 0xac, 0x10, 0xb9, 0xf1, 0xa4, 0xac, 0x9e, 0x58, 0x68, 0xad, 0xeb, 0xbe, 0x93, 0x5a, 0x9e, 0xb5, 0xb9, 0x01, 0x9e, 0x1c, 0x93, 0x8b, 0xfc, 0x4e, 0x5c, 0x53, 0x78, 0x99, 0x7a, 0x39, 0x47, 0xf2 ],
-const [ 0x60, 0xff, 0xcb, 0x23, 0xd6, 0xb8, 0x8e, 0x48, 0x5b, 0x92, 0x0a, 0xf8, 0x1d, 0x10, 0x83, 0xf6, 0x29, 0x1d, 0x06, 0xac, 0x8c, 0xa3, 0xa9, 0x65, 0xb8, 0x59, 0x14, 0xbc, 0x2a, 0xdd, 0x40, 0x54, 0x4a, 0x02, 0x7f, 0xca, 0x93, 0x6b, 0xbd, 0xe8, 0xf3, 0x59, 0x05, 0x1c ],
-const [ 0x9e, 0xcd, 0x07, 0xb6, 0x84, 0xbb, 0x9e, 0x0e, 0x66, 0x92, 0xe3, 0x20, 0xce, 0xc4, 0x51, 0x0c, 0xa7, 0x9f, 0xcd, 0xb3, 0xa2, 0x21, 0x2c, 0x26, 0xd9, 0x0d, 0xf6, 0x5d, 0xb3, 0x3e, 0x69, 0x2d, 0x07, 0x3c, 0xc1, 0x74, 0x84, 0x0d, 0xb7, 0x97, 0x50, 0x4e, 0x48, 0x2e, 0xef ],
-const [ 0x9d, 0x64, 0xde, 0x71, 0x61, 0x89, 0x58, 0x84, 0xe7, 0xfa, 0x3d, 0x6e, 0x9e, 0xb9, 0x96, 0xe7, 0xeb, 0xe5, 0x11, 0xb0, 0x1f, 0xe1, 0x9c, 0xd4, 0xa6, 0xb3, 0x32, 0x2e, 0x80, 0xaa, 0xf5, 0x2b, 0xf6, 0x44, 0x7e, 0xd1, 0x85, 0x4e, 0x71, 0x00, 0x1f, 0x4d, 0x54, 0xf8, 0x93, 0x1d ],
-const [ 0xc4, 0xad, 0x3c, 0x5e, 0x78, 0xd9, 0x17, 0xec, 0xb0, 0xcb, 0xbc, 0xd1, 0xc4, 0x81, 0xfc, 0x2a, 0xaf, 0x23, 0x2f, 0x7e, 0x28, 0x97, 0x79, 0xf4, 0x0e, 0x50, 0x4c, 0xc3, 0x09, 0x66, 0x2e, 0xe9, 0x6f, 0xec, 0xbd, 0x20, 0x64, 0x7e, 0xf0, 0x0e, 0x46, 0x19, 0x9f, 0xbc, 0x48, 0x2f, 0x46 ],
-const [ 0x4e, 0xef, 0x51, 0x07, 0x45, 0x9b, 0xdd, 0xf8, 0xf2, 0x4f, 0xc7, 0x65, 0x6f, 0xd4, 0x89, 0x6d, 0xa8, 0x71, 0x1d, 0xb5, 0x04, 0x00, 0xc0, 0x16, 0x48, 0x47, 0xf6, 0x92, 0xb8, 0x86, 0xce, 0x8d, 0x7f, 0x4d, 0x67, 0x39, 0x50, 0x90, 0xb3, 0x53, 0x4e, 0xfd, 0x7b, 0x0d, 0x29, 0x8d, 0xa3, 0x4b ],
-const [ 0x04, 0x7d, 0x27, 0x58, 0xe7, 0xc2, 0xc9, 0x62, 0x3f, 0x9b, 0xdb, 0x93, 0xb6, 0x59, 0x7c, 0x5e, 0x84, 0xa0, 0xcd, 0x34, 0xe6, 0x10, 0x01, 0x4b, 0xcb, 0x25, 0xb4, 0x9e, 0xd0, 0x5c, 0x7e, 0x35, 0x6e, 0x98, 0xc7, 0xa6, 0x72, 0xc3, 0xdd, 0xdc, 0xae, 0xb8, 0x43, 0x17, 0xef, 0x61, 0x4d, 0x34, 0x2f ],
-const [ 0x3d, 0x83, 0xdf, 0x37, 0x17, 0x2c, 0x81, 0xaf, 0xd0, 0xde, 0x11, 0x51, 0x39, 0xfb, 0xf4, 0x39, 0x0c, 0x22, 0xe0, 0x98, 0xc5, 0xaf, 0x4c, 0x5a, 0xb4, 0x85, 0x24, 0x06, 0x51, 0x0b, 0xc0, 0xe6, 0xcf, 0x74, 0x17, 0x69, 0xf4, 0x44, 0x30, 0xc5, 0x27, 0x0f, 0xda, 0xe0, 0xcb, 0x84, 0x9d, 0x71, 0xcb, 0xab ],
-const [ 0x33, 0xfd, 0x9b, 0xc1, 0x7e, 0x2b, 0x27, 0x1f, 0xa0, 0x4c, 0x6b, 0x93, 0xc0, 0xbd, 0xea, 0xe9, 0x86, 0x54, 0xa7, 0x68, 0x2d, 0x31, 0xd9, 0xb4, 0xda, 0xb7, 0xe6, 0xf3, 0x2c, 0xd5, 0x8f, 0x2f, 0x14, 0x8a, 0x68, 0xfb, 0xe7, 0xa8, 0x8c, 0x5a, 0xb1, 0xd8, 0x8e, 0xdc, 0xcd, 0xde, 0xb3, 0x0a, 0xb2, 0x1e, 0x5e ],
-const [ 0x77, 0xa8, 0x79, 0xcf, 0xa1, 0x1d, 0x7f, 0xca, 0xc7, 0xa8, 0x28, 0x2c, 0xc3, 0x8a, 0x43, 0xdc, 0xf3, 0x76, 0x43, 0xcc, 0x90, 0x98, 0x37, 0x21, 0x3b, 0xd6, 0xfd, 0x95, 0xd9, 0x56, 0xb2, 0x19, 0xa1, 0x40, 0x6c, 0xbe, 0x73, 0xc5, 0x2c, 0xd5, 0x6c, 0x60, 0x0e, 0x55, 0xb7, 0x5b, 0xc3, 0x7e, 0xa6, 0x96, 0x41, 0xbc ],
-const [ 0x45, 0xa3, 0xe6, 0xb8, 0x65, 0x27, 0xf2, 0x0b, 0x45, 0x37, 0xf5, 0xaf, 0x96, 0xcf, 0xc5, 0xad, 0x87, 0x77, 0xa2, 0xdd, 0xe6, 0xcf, 0x75, 0x11, 0x88, 0x6c, 0x55, 0x90, 0xec, 0xe2, 0x4f, 0xc6, 0x1b, 0x22, 0x67, 0x39, 0xd2, 0x07, 0xda, 0xbf, 0xe3, 0x2b, 0xa6, 0xef, 0xd9, 0xff, 0x4c, 0xd5, 0xdb, 0x1b, 0xd5, 0xea, 0xd3 ],
-const [ 0x25, 0x36, 0x2a, 0x4b, 0x9d, 0x74, 0xbd, 0xe6, 0x12, 0x8c, 0x4f, 0xdc, 0x67, 0x23, 0x05, 0x90, 0x09, 0x47, 0xbc, 0x3a, 0xda, 0x9d, 0x9d, 0x31, 0x6e, 0xbc, 0xf1, 0x66, 0x7a, 0xd4, 0x36, 0x31, 0x89, 0x93, 0x72, 0x51, 0xf1, 0x49, 0xc7, 0x2e, 0x06, 0x4a, 0x48, 0x60, 0x8d, 0x94, 0x0b, 0x75, 0x74, 0xb1, 0x7f, 0xef, 0xc0, 0xdf ],
-const [ 0x3e, 0xbf, 0xb0, 0x6d, 0xb8, 0xc3, 0x8d, 0x5b, 0xa0, 0x37, 0xf1, 0x36, 0x3e, 0x11, 0x85, 0x50, 0xaa, 0xd9, 0x46, 0x06, 0xe2, 0x68, 0x35, 0xa0, 0x1a, 0xf0, 0x50, 0x78, 0x53, 0x3c, 0xc2, 0x5f, 0x2f, 0x39, 0x57, 0x3c, 0x04, 0xb6, 0x32, 0xf6, 0x2f, 0x68, 0xc2, 0x94, 0xab, 0x31, 0xf2, 0xa3, 0xe2, 0xa1, 0xa0, 0xd8, 0xc2, 0xbe, 0x51 ],
-const [ 0x2d, 0x52, 0x44, 0x7d, 0x12, 0x44, 0xd2, 0xeb, 0xc2, 0x86, 0x50, 0xe7, 0xb0, 0x56, 0x54, 0xba, 0xd3, 0x5b, 0x3a, 0x68, 0xee, 0xdc, 0x7f, 0x85, 0x15, 0x30, 0x6b, 0x49, 0x6d, 0x75, 0xf3, 0xe7, 0x33, 0x85, 0xdd, 0x1b, 0x00, 0x26, 0x25, 0x02, 0x4b, 0x81, 0xa0, 0x2f, 0x2f, 0xd6, 0xdf, 0xfb, 0x6e, 0x6d, 0x56, 0x1c, 0xb7, 0xd0, 0xbd, 0x7a ],
-const [ 0x4c, 0xac, 0xe4, 0x22, 0xe4, 0xa0, 0x15, 0xa7, 0x54, 0x92, 0xb3, 0xb3, 0xbb, 0xfb, 0xdf, 0x37, 0x58, 0xea, 0xff, 0x4f, 0xe5, 0x04, 0xb4, 0x6a, 0x26, 0xc9, 0x0d, 0xac, 0xc1, 0x19, 0xfa, 0x90, 0x50, 0xf6, 0x03, 0xd2, 0xb5, 0x8b, 0x39, 0x8c, 0xad, 0x6d, 0x6d, 0x9f, 0xa9, 0x22, 0xa1, 0x54, 0xd9, 0xe0, 0xbc, 0x43, 0x89, 0x96, 0x82, 0x74, 0xb0 ],
-const [ 0x86, 0x20, 0xb8, 0x6f, 0xbc, 0xaa, 0xce, 0x4f, 0xf3, 0xc2, 0x92, 0x1b, 0x84, 0x66, 0xdd, 0xd7, 0xba, 0xca, 0xe0, 0x7e, 0xef, 0xef, 0x69, 0x3c, 0xf1, 0x77, 0x62, 0xdc, 0xab, 0xb8, 0x9a, 0x84, 0x01, 0x0f, 0xc9, 0xa0, 0xfb, 0x76, 0xce, 0x1c, 0x26, 0x59, 0x3a, 0xd6, 0x37, 0xa6, 0x12, 0x53, 0xf2, 0x24, 0xd1, 0xb1, 0x4a, 0x05, 0xad, 0xdc, 0xca, 0xbe ],
-const [ 0xd1, 0xbe, 0x3f, 0x13, 0xfe, 0xba, 0xfe, 0xfc, 0x14, 0x41, 0x4d, 0x9f, 0xb7, 0xf6, 0x93, 0xdb, 0x16, 0xdc, 0x1a, 0xe2, 0x70, 0xc5, 0xb6, 0x47, 0xd8, 0x0d, 0xa8, 0x58, 0x35, 0x87, 0xc1, 0xad, 0x8c, 0xb8, 0xcb, 0x01, 0x82, 0x43, 0x24, 0x41, 0x1c, 0xa5, 0xac, 0xe3, 0xca, 0x22, 0xe1, 0x79, 0xa4, 0xff, 0x49, 0x86, 0xf3, 0xf2, 0x11, 0x90, 0xf3, 0xd7, 0xf3 ],
-const [ 0xf4, 0x99, 0xcc, 0x3f, 0x6e, 0x3c, 0xf7, 0xc3, 0x12, 0xff, 0xdf, 0xba, 0x61, 0xb1, 0x26, 0x0c, 0x37, 0x12, 0x9c, 0x1a, 0xfb, 0x39, 0x10, 0x47, 0x19, 0x33, 0x67, 0xb7, 0xb2, 0xed, 0xeb, 0x57, 0x92, 0x53, 0xe5, 0x1d, 0x62, 0xba, 0x6d, 0x91, 0x1e, 0x7b, 0x81, 0x8c, 0xca, 0xe1, 0x55, 0x3f, 0x61, 0x46, 0xea, 0x78, 0x0f, 0x78, 0xe2, 0x21, 0x9f, 0x62, 0x93, 0x09 ],
-const [ 0x6d, 0xd6, 0xef, 0xd6, 0xf6, 0xca, 0xa6, 0x3b, 0x72, 0x9a, 0xa8, 0x18, 0x6e, 0x30, 0x8b, 0xc1, 0xbd, 0xa0, 0x63, 0x07, 0xc0, 0x5a, 0x2c, 0x0a, 0xe5, 0xa3, 0x68, 0x4e, 0x6e, 0x46, 0x08, 0x11, 0x74, 0x86, 0x90, 0xdc, 0x2b, 0x58, 0x77, 0x59, 0x67, 0xcf, 0xcc, 0x64, 0x5f, 0xd8, 0x20, 0x64, 0xb1, 0x27, 0x9f, 0xdc, 0xa7, 0x71, 0x80, 0x3d, 0xb9, 0xdc, 0xa0, 0xff, 0x53 ],
-const [ 0x65, 0x11, 0xa2, 0x24, 0x2d, 0xdb, 0x27, 0x31, 0x78, 0xe1, 0x9a, 0x82, 0xc5, 0x7c, 0x85, 0xcb, 0x05, 0xa6, 0x88, 0x7f, 0xf2, 0x01, 0x4c, 0xf1, 0xa3, 0x1c, 0xb9, 0xba, 0x5d, 0xf1, 0x69, 0x5a, 0xad, 0xb2, 0x5c, 0x22, 0xb3, 0xc5, 0xed, 0x51, 0xc1, 0x0d, 0x04, 0x7d, 0x25, 0x6b, 0x8e, 0x34, 0x42, 0x84, 0x2a, 0xe4, 0xe6, 0xc5, 0x25, 0xf8, 0xd7, 0xa5, 0xa9, 0x44, 0xaf, 0x2a ],
-const [ 0xe2, 0xf7, 0x6e, 0x97, 0x60, 0x6a, 0x87, 0x2e, 0x31, 0x74, 0x39, 0xf1, 0xa0, 0x3f, 0xcd, 0x92, 0xe6, 0x32, 0xe5, 0xbd, 0x4e, 0x7c, 0xbc, 0x4e, 0x97, 0xf1, 0xaf, 0xc1, 0x9a, 0x16, 0xfd, 0xe9, 0x2d, 0x77, 0xcb, 0xe5, 0x46, 0x41, 0x6b, 0x51, 0x64, 0x0c, 0xdd, 0xb9, 0x2a, 0xf9, 0x96, 0x53, 0x4d, 0xfd, 0x81, 0xed, 0xb1, 0x7c, 0x44, 0x24, 0xcf, 0x1a, 0xc4, 0xd7, 0x5a, 0xce, 0xeb ],
-const [ 0x5a, 0x86, 0xb7, 0x37, 0xea, 0xea, 0x8e, 0xe9, 0x76, 0xa0, 0xa2, 0x4d, 0xa6, 0x3e, 0x7e, 0xd7, 0xee, 0xfa, 0xd1, 0x8a, 0x10, 0x1c, 0x12, 0x11, 0xe2, 0xb3, 0x65, 0x0c, 0x51, 0x87, 0xc2, 0xa8, 0xa6, 0x50, 0x54, 0x72, 0x08, 0x25, 0x1f, 0x6d, 0x42, 0x37, 0xe6, 0x61, 0xc7, 0xbf, 0x4c, 0x77, 0xf3, 0x35, 0x39, 0x03, 0x94, 0xc3, 0x7f, 0xa1, 0xa9, 0xf9, 0xbe, 0x83, 0x6a, 0xc2, 0x85, 0x09 ],
-];
-
-const sha256_short_mds = const [
-'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
-'28969cdfa74a12c82f3bad960b0b000aca2ac329deea5c2328ebc6f2ba9802c1',
-'5ca7133fa735326081558ac312c620eeca9970d1e70a4b95533d956f072d1f98',
-'dff2e73091f6c05e528896c4c831b9448653dc2ff043528f6769437bc7b975c2',
-'b16aa56be3880d18cd41e68384cf1ec8c17680c45a02b1575dc1518923ae8b0e',
-'f0887fe961c9cd3beab957e8222494abb969b1ce4c6557976df8b0f6d20e9166',
-'eca0a060b489636225b4fa64d267dabbe44273067ac679f20820bddc6b6a90ac',
-'3fd877e27450e6bbd5d74bb82f9870c64c66e109418baa8e6bbcff355e287926',
-'963bb88f27f512777aab6c8b1a02c70ec0ad651d428f870036e1917120fb48bf',
-'078da3d77ed43bd3037a433fd0341855023793f9afd08b4b08ea1e5597ceef20',
-'73d6fad1caaa75b43b21733561fd3958bdc555194a037c2addec19dc2d7a52bd',
-'044cef802901932e46dc46b2545e6c99c0fc323a0ed99b081bda4216857f38ac',
-'fe56287cd657e4afc50dba7a3a54c2a6324b886becdcd1fae473b769e551a09b',
-'af53430466715e99a602fc9f5945719b04dd24267e6a98471f7a7869bd3b4313',
-'d189498a3463b18e846b8ab1b41583b0b7efc789dad8a7fb885bbf8fb5b45c5c',
-'dcbaf335360de853b9cddfdafb90fa75567d0d3d58af8db9d764113aef570125',
-'80c25ec1600587e7f28b18b1b18e3cdc89928e39cab3bc25e4d4a4c139bcedc4',
-'d5c30315f72ed05fe519a1bf75ab5fd0ffec5ac1acb0daf66b6b769598594509',
-'32c38c54189f2357e96bd77eb00c2b9c341ebebacc2945f97804f59a93238288',
-'9b5b37816de8fcdf3ec10b745428708df8f391c550ea6746b2cafe019c2b6ace',
-'6dd52b0d8b48cc8146cebd0216fbf5f6ef7eeafc0ff2ff9d1422d6345555a142',
-'44d34809fc60d1fcafa7f37b794d1d3a765dd0d23194ebbe340f013f0c39b613',
-'9df5c16a3f580406f07d96149303d8c408869b32053b726cf3defd241e484957',
-'672b54e43f41ee77584bdf8bf854d97b6252c918f7ea2d26bc4097ea53a88f10',
-'feeb4b2b59fec8fdb1e55194a493d8c871757b5723675e93d3ac034b380b7fc9',
-'76e3acbc718836f2df8ad2d0d2d76f0cfa5fea0986be918f10bcee730df441b9',
-'6733809c73e53666c735b3bd3daf87ebc77c72756150a616a194108d71231272',
-'0e6e3c143c3a5f7f38505ed6adc9b48c18edf6dedf11635f6e8f9ac73c39fe9e',
-'ffb4fc03e054f8ecbc31470fc023bedcd4a406b9dd56c71da1b660dcc4842c65',
-'c644612cd326b38b1c6813b1daded34448805aef317c35f548dfb4a0d74b8106',
-'c0e29eeeb0d3a7707947e623cdc7d1899adc70dd7861205ea5e5813954fb7957',
-'a4139b74b102cf1e2fce229a6cd84c87501f50afa4c80feacf7d8cf5ed94f042',
-'4f44c1c7fbebb6f9601829f3897bfd650c56fa07844be76489076356ac1886a4',
-'b31ad3cd02b10db282b3576c059b746fb24ca6f09fef69402dc90ece7421cbb7',
-'1c38bf6bbfd32292d67d1d651fd9d5b623b6ec1e854406223f51d0df46968712',
-'c2684c0dbb85c232b6da4fb5147dd0624429ec7e657991edd95eda37a587269e',
-'bf9d5e5b5393053f055b380baed7e792ae85ad37c0ada5fd4519542ccc461cf3',
-'d1f8bd684001ac5a4b67bbf79f87de524d2da99ac014dec3e4187728f4557471',
-'49ba38db85c2796f85ffd57dd5ec337007414528ae33935b102d16a6b91ba6c1',
-'725e6f8d888ebaf908b7692259ab8839c3248edd22ca115bb13e025808654700',
-'32caef024f84e97c30b4a7b9d04b678b3d8a6eb2259dff5b7f7c011f090845f8',
-'4bb33e7c6916e08a9b3ed6bcef790aaaee0dcf2e7a01afb056182dea2dad7d63',
-'3ac7ac6bed82fdc8cd15b746f0ee7489158192c238f371c1883c9fe90b3e2831',
-'bfce809534eefe871273964d32f091fe756c71a7f512ef5f2300bcd57f699e74',
-'1d26f3e04f89b4eaa9dbed9231bb051eef2e8311ad26fe53d0bf0b821eaf7567',
-'0ffeb644a49e787ccc6970fe29705a4f4c2bfcfe7d19741c158333ff6982cc9c',
-'d048ee1524014adf9a56e60a388277de194c694cc787fc5a1b554ea9f07abfdf',
-'50dbf40066f8d270484ee2ef6632282dfa300a85a8530eceeb0e04275e1c1efd',
-'7c5d14ed83dab875ac25ce7feed6ef837d58e79dc601fb3c1fca48d4464e8b83',
-'7d53eccd03da37bf58c1962a8f0f708a5c5c447f6a7e9e26137c169d5bdd82e4',
-'99dc772e91ea02d9e421d552d61901016b9fd4ad2df4a8212c1ec5ba13893ab2',
-'cefdae1a3d75e792e8698d5e71f177cc761314e9ad5df9602c6e60ae65c4c267',
-'c99d64fa4dadd4bc8a389531c68b4590c6df0b9099c4d583bc00889fb7b98008',
-'4d12a849047c6acd4b2eee6be35fa9051b02d21d50d419543008c1d82c427072',
-'f8e4ccab6c979229f6066cc0cb0cfa81bb21447c16c68773be7e558e9f9d798d',
-'6595a2ef537a69ba8583dfbf7f5bec0ab1f93ce4c8ee1916eff44a93af5749c4',
-'cfb88d6faf2de3a69d36195acec2e255e2af2b7d933997f348e09f6ce5758360',
-'4d54b2d284a6794581224e08f675541c8feab6eefa3ac1cfe5da4e03e62f72e4',
-'dba490256c9720c54c612a5bd1ef573cd51dc12b3e7bd8c6db2eabe0aacb846b',
-'02804978eba6e1de65afdbc6a6091ed6b1ecee51e8bff40646a251de6678b7ef',
-'0b66c8b4fefebc8dc7da0bbedc1114f228aa63c37d5c30e91ab500f3eadfcec5',
-'c464a7bf6d180de4f744bb2fe5dc27a3f681334ffd54a9814650e60260a478e3',
-'d6859c0b5a0b66376a24f56b2ab104286ed0078634ba19112ace0d6d60a9c1ae',
-'18041bd4665083001fba8c5411d2d748e8abbfdcdfd9218cb02b68a78e7d4c23',
-'42e61e174fbb3897d6dd6cef3dd2802fe67b331953b06114a65c772859dfc1aa',
-];
diff --git a/pkg/crypto/test/sha256_test.dart b/pkg/crypto/test/sha256_test.dart
deleted file mode 100644
index e86a322..0000000
--- a/pkg/crypto/test/sha256_test.dart
+++ /dev/null
@@ -1,311 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Library tag to allow Dartium to run the tests.
-library sha256_test;
-
-import "package:unittest/unittest.dart";
-import "package:crypto/crypto.dart";
-
-part 'sha256_long_test_vectors.dart';
-part 'sha256_short_test_vectors.dart';
-
-
-void main() {
- test('expected values', _testExpectedValues);
- test('invalid use', _testInvalidUse);
- test('repeated digest', _testRepeatedDigest);
- test('long inputs',
- () => _testStandardVectors(sha256_long_inputs, sha256_long_mds));
- test('short inputs',
- () => _testStandardVectors(sha256_short_inputs, sha256_short_mds));
-}
-
-void _testExpectedValues() {
- var expectedValues = const [
- 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
- '6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d',
- 'b413f47d13ee2fe6c845b2ee141af81de858df4ec549a58b7970bb96645bc8d2',
- 'ae4b3280e56e2faf83f414a6e3dabe9d5fbe18976544c05fed121accb85b53fc',
- '054edec1d0211f624fed0cbca9d4f9400b0e491c43742af2c5b0abebf0c990d8',
- '08bb5e5d6eaac1049ede0893d30ed022b1a4d9b5b48db414871f51c9cb35283d',
- '17e88db187afd62c16e5debf3e6527cd006bc012bc90b51a810cd80c2d511f43',
- '57355ac3303c148f11aef7cb179456b9232cde33a818dfda2c2fcb9325749a6b',
- '8a851ff82ee7048ad09ec3847f1ddf44944104d2cbd17ef4e3db22c6785a0d45',
- 'f8348e0b1df00833cbbbd08f07abdecc10c0efb78829d7828c62a7f36d0cc549',
- '1f825aa2f0020ef7cf91dfa30da4668d791c5d4824fc8e41354b89ec05795ab3',
- '78a6273103d17c39a0b6126e226cec70e33337f4bc6a38067401b54a33e78ead',
- 'fff3a9bcdd37363d703c1c4f9512533686157868f0d4f16a0f02d0f1da24f9a2',
- '86eba947d50c2c01570fe1bb5ca552958dabbdbb59b0657f0f26e21ff011e5c7',
- 'ab107f1bd632d3c3f5c724a99d024f7faa033f33c07696384b604bfe78ac352d',
- '7071fc3188fde7e7e500d4768f1784bede1a22e991648dcab9dc3219acff1d4c',
- 'be45cb2605bf36bebde684841a28f0fd43c69850a3dce5fedba69928ee3a8991',
- '3e5718fea51a8f3f5baca61c77afab473c1810f8b9db330273b4011ce92c787e',
- '7a096cc12702bcfa647ee070d4f3ba4c2d1d715b484b55b825d0edba6545803b',
- '5f9a753613d87b8a17302373c4aee56faa310d3b24b6ae1862d673aa22e1790f',
- 'e7aebf577f60412f0312d442c70a1fa6148c090bf5bab404caec29482ae779e8',
- '75aee9dcc9fbe7ddc9394f5bc5d38d9f5ad361f0520f7ceab59616e38f5950b5',
- '22cb4df00cddd6067ad5cfa2bba9857f21a06843e1a6e39ad1a68cb9a45ab8b7',
- 'f6a954a68555187d88cd9a026940d15ab2a7e24c7517d21ceeb028e93c96f318',
- '1d64add2a6388367c9bc2d1f1b384b069a6ef382cdaaa89771dd103e28613a25',
- 'b729ce724d9a48d3884dbfcbee1d3793d922b29fa9d639e7290af4978263772b',
- 'b858da80d8a57dc546905fd147612ebddd3c9188620405d058f9ee5ab1e6bc52',
- 'd78750726155a89c9131d0ecf2704b973b8710865bf9e831845de4f2dcbc19da',
- 'dc27f8e8ee2d08a2bccbb2dbd6c8e07ffba194101fc3458c34ded55f72c0971a',
- 'd09bea65dff48928a14b79741de3274b646f55ac898b71a66fa3eae2d9facd77',
- 'f2192584b67da35dfc26f743e5f53bb0376046f899dc6dabd5e7b541ae86c32f',
- '4f23c2ca8c5c962e50cd31e221bfb6d0adca19111dca8e0c62598ff146dd19c4',
- '630dcd2966c4336691125448bbb25b4ff412a49c732db2c8abc1b8581bd710dd',
- '5d8fcfefa9aeeb711fb8ed1e4b7d5c8a9bafa46e8e76e68aa18adce5a10df6ab',
- '14cdbf171499f86bd18b262243d669067efbdbb5431a48289cf02f2b5448b3d4',
- 'f12dd12340cb84e4d0d9958d62be7c59bb8f7243a7420fd043177ac542a26aaa',
- '5d7e2d9b1dcbc85e7c890036a2cf2f9fe7b66554f2df08cec6aa9c0a25c99c21',
- 'f4d285f47a1e4959a445ea6528e5df3efab041fa15aad94db1e2600b3f395518',
- 'a2fd0e15d72c9d18f383e40016f9ddc706673c54252084285aaa47a812552577',
- '4aba23aea5e2a91b7807cf3026cdd10a1c38533ce55332683d4ccb88456e0703',
- '5faa4eec3611556812c2d74b437c8c49add3f910f10063d801441f7d75cd5e3b',
- '753629a6117f5a25d338dff10f4dd3d07e63eecc2eaf8eabe773f6399706fe67',
- '40a1ed73b46030c8d7e88682078c5ab1ae5a2e524e066e8c8743c484de0e21e5',
- 'c033843682818c475e187d260d5e2edf0469862dfa3bb0c116f6816a29edbf60',
- '17619ec4250ef65f083e2314ef30af796b6f1198d0fddfbb0f272930bf9bb991',
- 'a8e960c769a9508d098451e3d74dd5a2ac6c861eb0341ae94e9fc273597278c9',
- '8ebfeb2e3a159e9f39ad7cc040e6678dade70d4f59a67d529fa76af301ab2946',
- 'ef8a7781a95c32fa02ebf511eda3dc6e273be59cb0f9e20a4f84d54f41427791',
- '4dbdc2b2b62cb00749785bc84202236dbc3777d74660611b8e58812f0cfde6c3',
- '7509fe148e2c426ed16c990f22fe8116905c82c561756e723f63223ace0e147e',
- 'a622e13829e488422ee72a5fc92cb11d25c3d0f185a1384b8138df5074c983bf',
- '3309847cee454b4f99dcfe8fdc5511a7ba168ce0b6e5684ef73f9030d009b8b5',
- 'c4c6540a15fc140a784056fe6d9e13566fb614ecb2d9ac0331e264c386442acd',
- '90962cc12ae9cdae32d7c33c4b93194b11fac835942ee41b98770c6141c66795',
- '675f28acc0b90a72d1c3a570fe83ac565555db358cf01826dc8eefb2bf7ca0f3',
- '463eb28e72f82e0a96c0a4cc53690c571281131f672aa229e0d45ae59b598b59',
- 'da2ae4d6b36748f2a318f23e7ab1dfdf45acdc9d049bd80e59de82a60895f562',
- '2fe741af801cc238602ac0ec6a7b0c3a8a87c7fc7d7f02a3fe03d1c12eac4d8f',
- 'e03b18640c635b338a92b82cce4ff072f9f1aba9ac5261ee1340f592f35c0499',
- 'bd2de8f5dd15c73f68dfd26a614080c2e323b2b51b1b5ed9d7933e535d223bda',
- '0ddde28e40838ef6f9853e887f597d6adb5f40eb35d5763c52e1e64d8ba3bfff',
- '4b5c2783c91ceccb7c839213bcbb6a902d7fe8c2ec866877a51f433ea17f3e85',
- 'c89da82cbcd76ddf220e4e9091019b9866ffda72bee30de1effe6c99701a2221',
- '29af2686fd53374a36b0846694cc342177e428d1647515f078784d69cdb9e488',
- 'fdeab9acf3710362bd2658cdc9a29e8f9c757fcf9811603a8c447cd1d9151108',
- '4bfd2c8b6f1eec7a2afeb48b934ee4b2694182027e6d0fc075074f2fabb31781',
- 'b6dfd259f6e0d07deb658a88148f8253f9bbbb74ddd6db3edbe159a56bc35073',
- '8fa5913b62847d42bb4b464e00a72c612d2ab0df2af0b9a96af8d323fa509077',
- '7ded979c0153ebb9ef28a15a314d0b27b41c4f8eed700b54974b48eb3ecaf91c',
- '1cf3aa651dcf35dbfe296e770ad7ebc4e00bcccd0224db296183dc952d0008c9',
- '5767d69a906d4860db9079eb7e90ab4a543e5cb032fce846554aef6ceb600e1d',
- '8189e3d54767d51e8d1942659a9e2905f9ec3ae72860c16a66e75b8cc9bd2087',
- '107de2bc788e11029f7851f8e1b0b5afb4e34379c709fc840689ebd3d1f51b5b',
- '169f6f093a9be82febe1a6a4471425697ec25d5040b472c5b1822aeea2625988',
- '2087ebd358ae3ea2a092fc19c2dfee57c5f0860296bc7b057c14e1227c5cb9d1',
- '182ab56f7739e43cee0b9ba1e92c4b2a81b088705516a5243910159744f21be9',
- '081f6c68899a48a1be455a55416104921d2fe4bdae696f4b72f9d9626a47915e',
- '5ce02376cc256861b78f87e34783814ba1aec6d09ab500d579ed8ee95c8afcc8',
- 'b93e407404e3e95f20fd647365e0e7f46afabe9af1ff083af996135e00d54009',
- 'e81fa832b37be8ed8f79da29987aa4d61310dcb14b2859dedf8fb1daa2541fd3',
- 'c56705fea5b110b8dc63688533ced21167e628017387c885423b835a55edd5ef',
- 'c2226285d08a245a17058ed2d24ad095b714f608ae364fddf119e0a7df890540',
- 'f9c270da8793221a6809ac685fdd4f5387e0fe1ee6aaf01c74f1e0a719621614',
- 'e69befd6ef7f685c36e343ac1702d87ad6a0e4ac8c0d5c521d04aad4ef0b7458',
- '4e3033562ad74a7d43eb5ff5fc2382622c6307cb10e245ad62da77c4c63cb178',
- '2ea17629472564a59e5eb845a2cdd04f442df2ff26bcc866e400f77158d612a1',
- 'b90223df74dd49a8a1461f340f2d7a90f96903ccbb5bc3c74ea3658fc8948b20',
- 'e0209f42b927ec9c0f6d6a76007ed540e9bdd6e427b3368a1ea6c5e7565972dd',
- '10d9bd424114319c0999adf6288f74060cd8918ef1228827a6269b2bf0f0880c',
- '7d1978a65ac94dbbcdc62e3d81850299fe157dd9b7bd9e01b170156210d2815a',
- 'e052dff9e1c94aaa49556f86fad55029a4875839fda57f5005f4c4403876b256',
- '58d29459b2130a2e151252d408b95e6dac424c564062eb911cc76440cb926ca0',
- '4e4530c392316f598e1bd07f32166380a8f712a33a48e9eb4247131ec5dc05d3',
- 'a09c9d3e42342c7dea44edb4aeb48cf6727cacd8032a12cf77a25829fc249d32',
- 'eb978d0f1ac03ce5c3510b5f4a16073a7a2bdc15c4ab7777dcf01030cc316667',
- '7d1905a3ace827ea1ac51c4fa08c281ed3be87e7f4e928d696bfde35c8f2dc0f',
- '08359b108fa567f5dcf319fa3434da6abbc1d595f426372666447f09cc5a87dc',
- 'a7b3830ffab0f2bbabbef6df0b169a7917008bf238880bbf8c20b8e000077312',
- 'b4f5d9b1555994c5ebaebd82918d560a3bf82962a171a1614e7551939e943366',
- '014ecaea1b378900f1212898c6ddb01565d81af1d0ef78df5e28d46e9caf7cfc',
- 'bce0aff19cf5aa6a7469a30d61d04e4376e4bbf6381052ee9e7f33925c954d52',
- '4565d7b898ccea3139ad260f9273115f806b30079d7683218c4e3ecd43af3b33',
- 'ddadeb660fe8902c9fb2db9b6cf237c9ce5b31753398085c4367eb5910b9cc13',
- 'c15a8928131f6687dd10f3c115ddf8d7c8f2df7e18d12c08c4fd16f666ce60ba',
- 'ae8e3d799b1353a39815f90eceebefa265cc448fe39faf2008cb20784cb2df9f',
- '98545371a3d9981abe5ab4a32a1d7b2fadd9801d89da52a94a4f78a42740d21c',
- '6323dce2f8b3a04dcea8d205602348c40403cb200c677eb1a1c0fe37edb6eb2f',
- '8150f7c5da910d709ff02ddf85dd293c6a2672633de8cda30f2e0aa58b14b0c4',
- '44d21db70716bd7644cb0d819fa6791805ebc526ea32996a60e41dc753fcfafc',
- 'b9b7c375cca45db19466ebd0fe7c9e147948cc42c1c90f0579728cfb2651956d',
- 'a47a551b01e55aaaa015531a4fa26a666f1ebd4ba4573898de712b8b5e0ca7e9',
- '60780e9451bdc43cf4530ffc95cbb0c4eb24dae2c39f55f334d679e076c08065',
- '09373f127d34e61dbbaa8bc4499c87074f2ddb10e1b465f506d7d70a15011979',
- '13aaa9b5fb739cdb0e2af99d9ac0a409390adc4d1cb9b41f1ef94f8552060e92',
- '5b0a32f1219524f5d72b00ba1a1b1c09a05ff10c83bb7a86042e42988f2afc06',
- '32796a0a246ea67eb785eda2e045192b9d6e40b9fe2047b21ef0cee929039651',
- 'da9ab8930992a9f65eccec4c310882cab428a708e6c899181046a8c73af00855',
- '9c94557382c966753c8cab0957eaedbe1d737b5fcb35c56c220ddd36f8a2d351',
- 'd32ab00929cb935b79d44e74c5a745db460ff794dea3b79be40c1cc5cf5388ef',
- 'da18797ed7c3a777f0847f429724a2d8cd5138e6ed2895c3fa1a6d39d18f7ec6',
- 'f52b23db1fbb6ded89ef42a23ce0c8922c45f25c50b568a93bf1c075420bbb7c',
- '335a461692b30bba1d647cc71604e88e676c90e4c22455d0b8c83f4bd7c8ac9b',
- '3d08c4d7bdda7ec922b0741df357de46e7bd102f9ab7a5c67624ab58da6d9d75',
- 'cc63be92e3a900cd067da89473b61b40579b54ef54f8305c2ffcc893743792e9',
- '865447fc4fae01471f2fc973bfb448de00217521ef02e3214d5177ea89c3ef31',
- '3daa582f9563601e290f3cd6d304bff7e25a9ee42a34ffbac5cf2bf40134e0d4',
- '5dda7cb7c2282a55676f8ad5c448092f4a9ebd65338b07ed224fcd7b6c73f5ef',
- '92ca0fa6651ee2f97b884b7246a562fa71250fedefe5ebf270d31c546bfea976',
- '471fb943aa23c511f6f72f8d1652d9c880cfa392ad80503120547703e56a2be5',
- '5099c6a56203f9687f7d33f4bfdf576d31dc91f6b695ecea38b2770c87631135',
- '8d39b60b9c767c58975b270c1d6b13c9b4507e5aee7ad496a3528e4c7f880721',
- '3acc128faf01077789746edcfd1051d90bc1591342402d9b3cdd06d7315702a4',
- 'ce1662d4c8b1f54d322593ee8ab385763e51dea92c9b4d56bc0e2f85111f0438',
- 'aacb65e7c9055b105cf02c47024cdf79a58229132e66ca0ddf0d74ef6a3fd5c8',
- '478ab134487ede9921619f1eebac30646919d6ab7146c6928c44732ccc897929',
- '6a053848cfe83c0fc8c8a81dd84f6b946c63193cd25cdd5dad45f08be8019e89',
- 'ffc555203945df4e81d75f316e4c25fdc0bc4e96412f4f469349eb716f001a7d',
- '81d45be06329d63a2d8a8599d445676933bea1678fc586795b4ecbb838d4d158',
- 'd08809a9e5b00fc9266b3813679f40acd6c2596d3de4f28f4d20d98c440aa483',
- 'e1796a03c9ed287ef757eee771d116e4dfd8c416f6b5a9e592c1f0e81c0deaa1',
- 'b4a4e5d6560fa3e9629064546ac97f14cd4d023c097ccbf06838ccef4fdcd8f1',
- '9b293d748d30240d3ddc496b722fc92d57f665271b060e82410d8de18970dc1d',
- 'ef145232e5b19630e0b389891f688161d047c269c7cf22dbff114514572f5813',
- '985f19128703afeee38d22797c0cae5f450cc290a6a5b9253dd908420e9032ff',
- '66f952a83339274eb287b64ef7b028d88915ac6df06a183f7c0436fa2b25107b',
- '46af22be1b576de71971c25e88c18a3295f0ac762a412a11105cef20fa2f5840',
- 'e81901f41344683448a03db259d1071c9b2f91001781ae34a0b39a0988381fc2',
- 'a5c602c1401ad5029efffaf188f27f9b96b441631a77448551ee337b9dc0e7e8',
- '8317b3fb2181158cfdccfaeb8f8a1736961476717801ae9de7c9a59dc395ef1c',
- '7834d0515667e46923f3a6c054268e06bc2301491b8eda225d1f4317918206fe',
- 'f22b2e614e92d6453612b707385038300293d2cc292b148bc5335754b5ea30fd',
- '1d683f2a7c58ac74fab45761235c3e9682f1329b6d96e260a7c67d2d58b233b6',
- 'f584eff8c5152fb6b2699806508cdb7148138ecb6dd564b02bfc021fd0ec586a',
- 'afa8661046fa83e7c261167f35f6379c00d3a3a9ca46c48fb0bad2c49dda7933',
- '9fedc8a3aa430d6d911b714a151e5f17a4acf52f4239617eec7c9b9d7775612b',
- '8de202b9c283c236da5d2cd5e556de9c1822c19dab36e09f690cf70d3c963e97',
- '31b96fecbf0c2839a29c4acd7098c2701cab152d424e266cf07a16875604365e',
- '3f1a0f65ee12f7efe64477247359af8ef02cf27d104481b4f5922f71432b8178',
- 'f4c34f764e0a9e37c080d28f01c4bbe24dad0cc65a88b1fa6b28802a4b799865',
- '85ac7f3761f77772e28c3a9b658aa0e04d9dd3a6bc365c30324948b0ede18b88',
- '448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c719',
- '97f5eac07cdc76f1f0faa10b0081cfaff3fab72095680a4516c723fde98916de',
- '6b572b21caa06fc6a1bdab77da3bc07377919088ee96603628354c0b3800661d',
- '27fcdcc7e2ee00f1dcb07aac445a436ab5dee2c14b04621acd387ec50e8efa50',
- 'e839cfc21e8e77997e643efa04f7150e6cc68864cbea745aefaf47a9363df709',
- 'ba6bad069acc2d0bedf36e2b6cc005d31eb76b0da9de46e09209ff004ae25200',
- '7d3e6ad6d9017d79d15eb518ebbac828d64449c39f0942ee6e7798479e7615a4',
- '697c581d18edb2692249fc07aae307d3cc263033cb32f16ef3c0b57429695a43',
- '7f7193dd3c6c273cdd66488f8aa5dbe3542a22bf0fcda7d6fb93235178c4589e',
- '6e944d621f9e13bc22d4ae68aaa8cb15605ed9680acd7f16e5b0f94149b634cd',
- '491602f722b2a6ef3976a696e286d99e19259d3a4ffb957d18a7128a6fb37a8c',
- 'f2b51a1a5c12e9b07f152812895f2ab51a9727021e389555a58507ea7ff16e51',
- 'dfabc97f215403a3cc2bcf132a35fc832e87b7de0f2e7560f2ad9d8f06e38b63',
- '73b1f1000c7677ebdcef2a2a25e27b06d9c163209add77a16f0e2b70e56d5c52',
- '21803c877b81b590015dab430568cf4d7c0247eea6147a18ac4fc3492996cb79',
- 'b7e3c3ea326a5fd558d70efe2bc6469732a2894dfdeca106093611a4a8d4b025',
- '5ae91d2295e6706191b760661d48e365441de12340006130c42c7b38faa48393',
- 'efe3f35371f700217362155403d2b3f912b751d69d6bf80a59a86d4911718651',
- 'af37eee16b62d9665944da23a7712f454640ceeb958f20fd33fdd1ee515dabd9',
- '2537ac29dc1561ee49a0bc1aadb863c435a669d18d5e7e890ed3e11a014ce411',
- 'e360918d85b02d655ea572d081c83b019691e8665908d6a6fbf9d5673a13d892',
- '37e7218560603527cc8db9a5a1da89fa27df1da7dd9c54c0c7a2405d8a5208a1',
- '621009f0bf8ca1d70eedfa30eb6e2979794469b4e99ee385fd9501712b45cb6a',
- 'b1459345163aed1c356302a5230f8912564b04f340610b18ef1aa2c47b418981',
- '82f63a1d007fd9796756abbbf51c246884dde3d79cf9cacacc901462ae75e3ff',
- '78d8ce1ccd46cf92fb4e255f183bc9f355e5e494b3180c0da9154e17a1d61f74',
- '8882ee8501069ba507a3a5f309e8e3f9dcfb13987ec293c60feba4f1fabc5ba7',
- 'c62efddbd622094486c1ededca74ad47c8ce4c7661d9f58c2723403bb42b45b6',
- '93301c8548f3afc25d7e157eaf7c8dbf5edb029bd829136600593067cd4b0c5c',
- '19961686c66d9e10e2ce38a14652121e533d5f04bbeea193210cb0a7b88396f3',
- 'b454dbe07fb100ea743cd193ea1953a9e6d62a07fde0f3325c362e4f3d7b694f',
- 'd280f473c251cb75c91880ea0eca2a2f1cda3152bef54a38c4a3aedad615c819',
- '8b4a544837a1a0280fa8a7c82865c27a1064b3cc6281fda0753566b9bb104a87',
- '7daafa7aed7d63d06a98b7b6f785eab5427d084f30d5c9ee6dd0d2f3ada329e6',
- 'dc0b1c61c4001cfe707c52875e026e4eefbafc09ab767f8f3ac55e9c78406e4a',
- 'cd855c9ecb3cd846efd1111aeb02c8563f7aef9988ac4c597fab35b4235604c5',
- '28ece33729cdeff79a863cdfa359b51cebe29f8a947954306338c11a89866e62',
- '59a6aed6a44d5a52565289ccc377966b6a1ab41ac339e72475f49bb136befa91',
- '3458d07857503fcadabbc5dfc7b905bc373b77cb058d87feb35443a0aa7ce204',
- '76ccea5a51d93c238bd3a745ff8acd3c848a15c85d12e3d5c9743ecc094773a4',
- '1901da1c9f699b48f6b2636e65cbf73abf99d0441ef67f5c540a42f7051dec6f',
- '747db6ff08731ff7908224c50f71f51fef1283e65341e2dbcdc664f0f41bf8c5',
- '07ff1080d3d4aaed9cd77850c0207e75e7f9697bed15a8cda7057f6a24c010d2',
- '8f0512e800a511953a28bf11bb5e9c305c4026867bc9a31f76cb96fc5bd87027',
- 'fed886fe3977e2d21a6b0db5977b8deee5b456d323f8c208d24b8adff08f11de',
- 'ea98780a92c30a1038d20bd3d0c87106353306bf9751df5c3c88f9d4b31a0088',
- '121aea684d4d62866514564293f1928c6d4d9e9aa62f2bd2df94f392bf75a838',
- '6f03900ba86980a79f6f8a5d633bd9e8dc9ca30690c86b31ce892d83115a2326',
- '94e9c48301753f123bad54d917d13da64c18b1789da85dc8ed3d8427c56978f7',
- 'f934aea49262b4fd587eb74ebe2c69b857aca07876acadc23f89d6c0bbbccdd5',
- '02d53b4529c38363c1ddc9053e3e58bcb6e3001f01c26aa7c4a9e17884cc71e5',
- '018513c8e6cf9ba66351428984e5d44824fee364c26bed1533ca3ece8f3574c3',
- '21209622b064b7f81c5a3524abe7c9708d4585ad4ea21b072ce76993afdd3bf9',
- 'aa361163f6b53f6e6de29daae28a336a8f7c05bf5e8a6eeaa46a51bcd66ac7f7',
- 'dedff2184de121c60ec94c4cb94a0450cac47257c56afa8f2e11c5f64d3dd661',
- '1d64137df721078b35bdc1a3595a73cebcbe49865fb308c78791540d1d349cd7',
- '9d42d74bac443eafbd9878145b745387eb1397174332564bc8fa6db414ab381f',
- '11a6171d8d193f7cf83315199bb3a7e07e8e00c33e5b620855e0b879cfa4c68c',
- 'a9cda05987272ee71100f81f59ad3959b0978a576235c6836eccb65a9577126f',
- 'fd53126210abfcb0d6a56c90853b716d02acd8dfa319a60cf51b1a2b4ef6d7f3',
- '17c1453315e3dc1890e8a1c2848d781d207ad73335450e9a236e44c8a2ad3b06',
- 'bd2e01835226c56a32ff58df38e6e179830335d4033a40d9c60d269b145c9f6a',
- '3b7a22d9ef089d4aa382eff3deeba73d41e4af58b0967e9c8603d860431c3ec7',
- '7a7f89f00b0e9b1b9e99490a7b9d9ce7740a403047efbb94ad35fd13a35b4ac6',
- '7e47dde9a2e52a0067f80a149abf606ea4ec25690637632d34561432c0738877',
- '5d5771856bd52662bd20e37424abf39e1f3b50264ff09ffd62b3dcc8f05d01f0',
- '6c851b50e115cecfe3b4b910e6a7406af282f9dbcd4ce9cca0db8d488a125f01',
- '5f6e61fa3cdc91285b09f1934b31e426108dfad7ff04c367651f4a59f5c78722',
- 'ada6b2683a885f5fef657b8c9b44a44f1e739af8b35c64a51c4072d2a86602c4',
- '3a6a36895262b4af79fdc476e90a9ebc06320e64dd8417b8ebba5f6fec87eaac',
- 'c2c67787b86319330e4d0657bc2c0ad67482dff0647b925cc9b8c20a535edc37',
- '6f473cf63f854fb1fa5ad59c463f640dda1a2a1bacac0e15ffa400e663a7f6e7',
- '619a4c7ba6e34fd2246ef3ced6f1e13a5091aa8ea990b59a5e86479c9cb533bf',
- '96e054622771ebf6d4ec206a04c68e0d8bacede86a71a1a546f5e2f8b59178fa',
- 'ca9dedc42398e60506e48a2ac95c19882db3c1adeb8da5877e6ad9db4b4c4cd0',
- 'f0f1ed236d1a3db9501ff5f2c5cd43d48f2fc30d59cce3155e7f0695c0d529f9',
- '93b2ef94e81337432b267cd50347945f32d9b689b198ccd495215da088ac89b1',
- '69e640e22c3ddd1e1d8391aa4db54aa6ac8aa60ff687a5986f1bea86c49651ab',
- '6f58ce599facae90d94a287e9bf8cb06eaf17da2c293700eeb6bc087fec676b1',
- '5e1c10284710f5c2db48f88de3d051579643a1ed042afa846a7844895351a77b',
- 'abf4bafcddb38bbf3855e47b5e61b75dedbcf42aa44ffd4bb85d0b08d97e2682',
- '211882aeac8a599b0a55ec280e1a978923edef69cd86541bcbd58db864c45eac',
- '632a48a7a9a3ac5966a5caa71d456ef1f95f402859df61157cb95ed951237714',
- '6b9425a4c4d39c932fd310704bc144d283f1c090bea989c9b3e96fc0925da531',
- '17610efb99d0f9e4eb1aa13eb1d86289c7dde37d17833ed23dd10e469e2543ff',
- 'f5e7bdf4880d87a14055bf371328fe7396315f4848900e7f2471c5edb2a4c23c',
- '5b6cca1b8ac9199d191ea31152d47057fa329994b392db72eda29dbb60d1750c',
- '4b96ec3b91e9f764ac0227ca7df451bd8294cd46298047b43b960ae1c0b0afc5',
- 'c6fefe1bfbe6f5364bf0e40447ffca27fde55f1cd815e1fa3bafb46a41c91749',
- '552a69d052ae2980aa92ef44b4a8752fc585d70127d9df1ac53137e266786e4d',
- '369d7da16156c5e2c0d519cdbab3996a7249e20d3e48c36a3a873e987190bd89',
- 'ef67e0723230f6c535ff556e45ca2174e1e97deed306e9e87f1b65579076ec06',
- '2cb1e75cd7505a2783769276f30b122cb136fbbd03300510b71a7196ca670b37',
- '1211b6885890be48f89934ec5246f1ce3cfff46c626cfcd686d5fdce9b1fb830',
- 'd6a8bdb01e763fb64f3a02512e7be905679a5add6bb408f8750d679d17cad92f',
- '3f8591112c6bbe5c963965954e293108b7208ed2af893e500d859368c654eabe' ];
-
- for (var i = 0; i < expectedValues.length; i++) {
- var hash = new SHA256();
- hash.add(new List<int>.generate(i, (j) => j, growable: false));
- var d = hash.close();
- expect(expectedValues[i], CryptoUtils.bytesToHex(d), reason: '$i');
- }
-}
-
-void _testInvalidUse() {
- var sha = new SHA256();
- sha.close();
- expect(() => sha.add([0]), throwsStateError);
-}
-
-void _testRepeatedDigest() {
- var sha = new SHA256();
- var digest = sha.close();
- expect(digest, sha.close());
-}
-
-void _testStandardVectors(inputs, mds) {
- for (var i = 0; i < inputs.length; i++) {
- var hash = new SHA256();
- hash.add(inputs[i]);
- var d = hash.close();
- expect(mds[i], CryptoUtils.bytesToHex(d), reason: '$i');
- }
-}
diff --git a/pkg/dart2js_incremental/lib/library_updater.dart b/pkg/dart2js_incremental/lib/library_updater.dart
index 003740c..6558866 100644
--- a/pkg/dart2js_incremental/lib/library_updater.dart
+++ b/pkg/dart2js_incremental/lib/library_updater.dart
@@ -843,7 +843,7 @@
for (ClassElementX cls in newClasses) {
jsAst.Node classAccess = emitter.constructorAccess(cls);
- String name = namer.getNameOfClass(cls);
+ String name = namer.className(cls);
updates.add(
js.statement(
@@ -921,7 +921,7 @@
}
jsAst.Expression invokeDefineClass(ClassElementX cls) {
- String name = namer.getNameOfClass(cls);
+ String name = namer.className(cls);
var descriptor = js('Object.create(null)');
return js(
r'''
@@ -1141,7 +1141,7 @@
if (element.isInstanceMember) {
elementAccess = emitter.constructorAccess(element.enclosingClass);
- name = namer.getNameOfMember(element);
+ name = namer.instanceMethodName(element);
} else {
elementAccess = emitter.staticFunctionAccess(element);
}
@@ -1250,8 +1250,8 @@
wasStateCaptured = true;
prototypeAccess = emitter.prototypeAccess(element.enclosingClass);
- getterName = namer.getterName(element);
- setterName = namer.setterName(element);
+ getterName = namer.getterForElement(element);
+ setterName = namer.setterForElement(element);
}
FieldElementX apply() {
diff --git a/pkg/http_server/CHANGELOG.md b/pkg/http_server/CHANGELOG.md
deleted file mode 100644
index d13aea8..0000000
--- a/pkg/http_server/CHANGELOG.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# 0.9.5+1
-
-* Updated the layout of package contents.
-
-# 0.9.5
-
-* Removed the decoding of HTML entity values (in the form &#xxxxx;) for
- values when parsing multipart/form-post requests.
-
-# 0.9.4
-
-* Fixed bugs in the handling of the Range header
diff --git a/pkg/http_server/LICENSE b/pkg/http_server/LICENSE
deleted file mode 100644
index 5c60afe..0000000
--- a/pkg/http_server/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright 2014, the Dart project authors. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of Google Inc. nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/http_server/README.md b/pkg/http_server/README.md
deleted file mode 100644
index e428814..0000000
--- a/pkg/http_server/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-A set of high-level classes that, together with
-`HttpServer`, makes is easier to serve web content.
-
-**NOTE:** This package only works for server-side or command-line Dart
-applications. In other words, if the app imports `dart:io`, it can use this
-package.
-
-## Filing issues
-
-File issues for the `http_server` package at [http://dartbug.com/new][bugs].
-
-[bugs]: http://dartbug.com/new
diff --git a/pkg/http_server/lib/http_server.dart b/pkg/http_server/lib/http_server.dart
deleted file mode 100644
index bcd99df..0000000
--- a/pkg/http_server/lib/http_server.dart
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * A library for serving HTTP requests and resources.
- *
- * ## Installing ##
- *
- * Use [pub][] to install this package. Add the following to your
- * `pubspec.yaml` file.
- *
- * dependencies:
- * http_server: any
- *
- * Then run `pub install`.
- *
- * For more information, see the
- * [http_server package on pub.dartlang.org][pub].
- *
- * ## Basic usage
- *
- * Here is a short example of how to serve all files from the current
- * directory.
- *
- * import 'dart:io';
- * import 'dart:async';
- * import 'package:http_server/http_server.dart';
- *
- * void main() {
- * var staticFiles = new VirtualDirectory('.')
- * ..allowDirectoryListing = true;
- *
- * runZoned(() {
- * HttpServer.bind('0.0.0.0', 7777).then((server) {
- * print('Server running');
- * server.listen(staticFiles.serveRequest);
- * });
- * },
- * onError: (e, stackTrace) => print('Oh noes! $e $stackTrace'));
- * }
- *
- * ## Virtual directory
- *
- * The [VirtualDirectory] class makes it easy to serve static content
- * from the file system. It supports:
- *
- * * Range-based requests.
- * * If-Modified-Since based caching.
- * * Automatic GZip-compression of content.
- * * Following symlinks, either throughout the system or inside
- * a jailed root.
- * * Directory listing.
- *
- * See [VirtualDirectory] for more information.
- *
- * ## Virtual host
- *
- * The [VirtualHost] class helps to serve multiple hosts on the same
- * address, by using the `Host` field of the incoming requests. It also
- * works with wildcards for sub-domains.
- *
- * var virtualHost = new VirtualHost(server);
- * // Filter out on a specific host
- * var stream1 = virtualServer.addHost('static.myserver.com');
- * // Wildcard for any other sub-domains.
- * var stream2 = virtualServer.addHost('*.myserver.com');
- * // Requets not matching any hosts.
- * var stream3 = virtualServer.unhandled;
- *
- * See [VirtualHost] for more information.
- *
- * [pub]: http://pub.dartlang.org/packages/http_server
- */
-library http_server;
-
-export 'src/http_body.dart';
-export 'src/http_multipart_form_data.dart';
-export 'src/virtual_directory.dart';
-export 'src/virtual_host.dart';
diff --git a/pkg/http_server/lib/src/http_body.dart b/pkg/http_server/lib/src/http_body.dart
deleted file mode 100644
index c40d284..0000000
--- a/pkg/http_server/lib/src/http_body.dart
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library http_server.http_body;
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-
-import 'http_body_impl.dart';
-
-/**
- * [HttpBodyHandler] is a helper class for processing and collecting
- * HTTP message data in an easy-to-use [HttpBody] object. The content
- * body is parsed, depending on the `Content-Type` header field. When
- * the full body is read and parsed the body content is made
- * available. The class can be used to process both server requests
- * and client responses.
- *
- * The following content types are recognized:
- *
- * text/ *
- * application/json
- * application/x-www-form-urlencoded
- * multipart/form-data
- *
- * For content type `text/\*` the body is decoded into a string. The
- * 'charset' parameter of the content type specifies the encoding
- * used for decoding. If no 'charset' is present the default encoding
- * of ISO-8859-1 is used.
- *
- * For content type `application/json` the body is decoded into a
- * string which is then parsed as JSON. The resulting body is a
- * [Map]. The 'charset' parameter of the content type specifies the
- * encoding used for decoding. If no 'charset' is present the default
- * encoding of UTF-8 is used.
- *
- * For content type `application/x-www-form-urlencoded` the body is a
- * query string which is then split according to the rules for
- * splitting a query string. The resulting body is a `Map<String,
- * String>`. If the same name is present several times in the query
- * string, then the last value seen for this name will be in the
- * resulting map. The encoding US-ASCII is always used for decoding
- * the body.
- *
- * For content type `multipart/form-data` the body is parsed into
- * it's different fields. The resulting body is a `Map<String,
- * dynamic>`, where the value is a [String] for normal fields and a
- * [HttpBodyFileUpload] instance for file upload fields. If the same
- * name is present several times, then the last value seen for this
- * name will be in the resulting map.
- *
- * When using content type `multipart/form-data` the encoding of
- * fields with [String] values is determined by the browser sending
- * the HTTP request with the form data. The encoding is specified
- * either by the attribute `accept-charset` on the HTML form, or by
- * the content type of the web page containing the form. If the HTML
- * form has an `accept-charset` attribute the browser will use the
- * encoding specified there. If the HTML form has no `accept-charset`
- * attribute the browser determines the encoding from the content
- * type of the web page containing the form. Using a content type of
- * `text/html; charset=utf-8` for the page and setting
- * `accept-charset` on the HTML form to `utf-8` is recommended as the
- * default for [HttpBodyHandler] is UTF-8. It is important to get
- * these encoding values right, as the actual `multipart/form-data`
- * HTTP request sent by the browser does _not_ contain any
- * information on the encoding. If something else than UTF-8 is used
- * `defaultEncoding` needs to be set in the [HttpBodyHandler]
- * constructor and calls to [processRequest] and [processResponse].
- *
- * For all other content types the body will be treated as
- * uninterpreted binary data. The resulting body will be of type
- * `List<int>`.
- *
- * To use with the [HttpServer] for request messages, [HttpBodyHandler] can be
- * used as either a [StreamTransformer] or as a per-request handler (see
- * [processRequest]).
- *
- * HttpServer server = ...
- * server.transform(new HttpBodyHandler())
- * .listen((HttpRequestBody body) {
- * ...
- * });
- *
- * To use with the [HttpClient] for response messages, [HttpBodyHandler] can be
- * used as a per-request handler (see [processResponse]).
- *
- * HttpClient client = ...
- * client.get(...)
- * .then((HttpClientRequest response) => response.close())
- * .then(HttpBodyHandler.processResponse)
- * .then((HttpClientResponseBody body) {
- * ...
- * });
- *
- */
-class HttpBodyHandler
- implements StreamTransformer<HttpRequest, HttpRequestBody> {
- var _transformer;
-
- /**
- * Create a new [HttpBodyHandler] to be used with a [Stream]<[HttpRequest]>,
- * e.g. a [HttpServer].
- *
- * If the page is served using different encoding than UTF-8, set
- * [defaultEncoding] accordingly. This is required for parsing
- * `multipart/form-data` content correctly. See the class comment
- * for more information on `multipart/form-data`.
- */
- HttpBodyHandler({Encoding defaultEncoding: UTF8})
- : _transformer = new HttpBodyHandlerTransformer(defaultEncoding);
-
- /**
- * Process and parse an incoming [HttpRequest]. The returned [HttpRequestBody]
- * contains a [response] field for accessing the [HttpResponse].
- *
- * See [HttpBodyHandler] constructor for more info on [defaultEncoding].
- */
- static Future<HttpRequestBody> processRequest(
- HttpRequest request,
- {Encoding defaultEncoding: UTF8}) {
- return HttpBodyHandlerImpl.processRequest(request, defaultEncoding);
- }
-
- /**
- * Process and parse an incoming [HttpClientResponse].
- *
- * See [HttpBodyHandler] constructor for more info on [defaultEncoding].
- */
- static Future<HttpClientResponseBody> processResponse(
- HttpClientResponse response,
- {Encoding defaultEncoding: UTF8}) {
- return HttpBodyHandlerImpl.processResponse(response, defaultEncoding);
- }
-
- Stream<HttpRequestBody> bind(Stream<HttpRequest> stream) {
- return _transformer.bind(stream);
- }
-}
-
-
-/**
- * A HTTP content body produced by [HttpBodyHandler] for either [HttpRequest]
- * or [HttpClientResponse].
- */
-abstract class HttpBody {
- /**
- * A high-level type value, that reflects how the body was parsed, e.g.
- * "text", "binary" and "json".
- */
- String get type;
-
- /**
- * The actual body. The type depends on [type].
- */
- dynamic get body;
-}
-
-
-/**
- * The [HttpBody] of a [HttpClientResponse] will be of type
- * [HttpClientResponseBody]. It contains the [HttpClientResponse] object
- * for access to the headers.
- */
-abstract class HttpClientResponseBody extends HttpBody {
- /**
- * The [HttpClientResponse] from which the [HttpClientResponseBody] was
- * created.
- */
- HttpClientResponse get response;
-}
-
-
-/**
- * The [HttpBody] of a [HttpRequest] will be of type [HttpRequestBody]. It
- * provides access to the request, for reading all request header information
- * and responding to the client.
- */
-abstract class HttpRequestBody extends HttpBody {
- /**
- * The [HttpRequest] from which the [HttpRequestBody] was created.
- *
- * Note that the [HttpRequest] is already drained at this point, so the
- * `Stream` methods cannot be used.
- */
- HttpRequest get request;
-}
-
-
-/**
- * A [HttpBodyFileUpload] object wraps a file upload, presenting a way for
- * extracting filename, contentType and the data of the uploaded file.
- */
-abstract class HttpBodyFileUpload {
- /**
- * The filename of the uploaded file.
- */
- String get filename;
-
- /**
- * The [ContentType] of the uploaded file. For 'text/\*' and
- * 'application/json' the [data] field will a String.
- */
- ContentType get contentType;
-
- /**
- * The content of the file. Either a [String] or a [List<int>].
- */
- dynamic get content;
-}
diff --git a/pkg/http_server/lib/src/http_body_impl.dart b/pkg/http_server/lib/src/http_body_impl.dart
deleted file mode 100644
index b6c43c9..0000000
--- a/pkg/http_server/lib/src/http_body_impl.dart
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library http_server.http_body_impl;
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:mime/mime.dart';
-
-import 'http_body.dart';
-import 'http_multipart_form_data.dart';
-
-class HttpBodyHandlerTransformer
- implements StreamTransformer<HttpRequest, HttpRequestBody> {
- final Encoding _defaultEncoding;
-
- const HttpBodyHandlerTransformer(this._defaultEncoding);
-
- Stream<HttpRequestBody> bind(Stream<HttpRequest> stream) {
- return new Stream<HttpRequestBody>.eventTransformed(
- stream,
- (EventSink<HttpRequestBody> sink) =>
- new _HttpBodyHandlerTransformerSink(_defaultEncoding, sink));
- }
-}
-
-class _HttpBodyHandlerTransformerSink implements EventSink<HttpRequest> {
- final Encoding _defaultEncoding;
- final EventSink<HttpRequestBody> _outSink;
- int _pending = 0;
- bool _closed = false;
-
- _HttpBodyHandlerTransformerSink(this._defaultEncoding, this._outSink);
-
- void add(HttpRequest request) {
- _pending++;
- HttpBodyHandlerImpl.processRequest(request, _defaultEncoding)
- .then(_outSink.add, onError: _outSink.addError)
- .whenComplete(() {
- _pending--;
- if (_closed && _pending == 0) _outSink.close();
- });
- }
- void addError(Object error, [StackTrace stackTrace]) {
- _outSink.addError(error, stackTrace);
- }
- void close() {
- _closed = true;
- if (_pending == 0) _outSink.close();
- }
-}
-
-class HttpBodyHandlerImpl {
- static Future<HttpRequestBody> processRequest(
- HttpRequest request,
- Encoding defaultEncoding) {
- return process(request, request.headers, defaultEncoding)
- .then((body) => new _HttpRequestBody(request, body),
- onError: (error) {
- // Try to send BAD_REQUEST response.
- request.response.statusCode = HttpStatus.BAD_REQUEST;
- request.response.close();
- throw error;
- });
- }
-
- static Future<HttpClientResponseBody> processResponse(
- HttpClientResponse response,
- Encoding defaultEncoding) {
- return process(response, response.headers, defaultEncoding)
- .then((body) => new _HttpClientResponseBody(response, body));
- }
-
- static Future<HttpBody> process(Stream<List<int>> stream,
- HttpHeaders headers,
- Encoding defaultEncoding) {
- ContentType contentType = headers.contentType;
-
- Future<HttpBody> asBinary() {
- return stream
- .fold(new BytesBuilder(), (builder, data) => builder..add(data))
- .then((builder) => new _HttpBody("binary", builder.takeBytes()));
- }
-
- Future<HttpBody> asText(Encoding defaultEncoding) {
- var encoding;
- var charset = contentType.charset;
- if (charset != null) encoding = Encoding.getByName(charset);
- if (encoding == null) encoding = defaultEncoding;
- return stream
- .transform(encoding.decoder)
- .fold(new StringBuffer(), (buffer, data) => buffer..write(data))
- .then((buffer) => new _HttpBody("text", buffer.toString()));
- }
-
- Future<HttpBody> asFormData() {
- return stream
- .transform(new MimeMultipartTransformer(
- contentType.parameters['boundary']))
- .map((part) => HttpMultipartFormData.parse(
- part, defaultEncoding: defaultEncoding))
- .map((multipart) {
- var future;
- if (multipart.isText) {
- future = multipart
- .fold(new StringBuffer(), (b, s) => b..write(s))
- .then((b) => b.toString());
- } else {
- future = multipart
- .fold(new BytesBuilder(), (b, d) => b..add(d))
- .then((b) => b.takeBytes());
- }
- return future.then((data) {
- var filename =
- multipart.contentDisposition.parameters['filename'];
- if (filename != null) {
- data = new _HttpBodyFileUpload(multipart.contentType,
- filename,
- data);
- }
- return [multipart.contentDisposition.parameters['name'], data];
- });
- })
- .fold([], (l, f) => l..add(f))
- .then(Future.wait)
- .then((parts) {
- Map<String, dynamic> map = new Map<String, dynamic>();
- for (var part in parts) {
- map[part[0]] = part[1]; // Override existing entries.
- }
- return new _HttpBody('form', map);
- });
- }
-
- if (contentType == null) {
- return asBinary();
- }
-
- switch (contentType.primaryType) {
- case "text":
- return asText(defaultEncoding);
-
- case "application":
- switch (contentType.subType) {
- case "json":
- return asText(UTF8)
- .then((body) => new _HttpBody("json", JSON.decode(body.body)));
-
- case "x-www-form-urlencoded":
- return asText(ASCII)
- .then((body) {
- var map = Uri.splitQueryString(body.body,
- encoding: defaultEncoding);
- var result = {};
- for (var key in map.keys) {
- result[key] = map[key];
- }
- return new _HttpBody("form", result);
- });
-
- default:
- break;
- }
- break;
-
- case "multipart":
- switch (contentType.subType) {
- case "form-data":
- return asFormData();
-
- default:
- break;
- }
- break;
-
- default:
- break;
- }
-
- return asBinary();
- }
-}
-
-class _HttpBodyFileUpload implements HttpBodyFileUpload {
- final ContentType contentType;
- final String filename;
- final dynamic content;
- _HttpBodyFileUpload(this.contentType, this.filename, this.content);
-}
-
-class _HttpBody implements HttpBody {
- final String type;
- final dynamic body;
-
- _HttpBody(this.type, this.body);
-}
-
-class _HttpRequestBody extends _HttpBody implements HttpRequestBody {
- final HttpRequest request;
-
- _HttpRequestBody(this.request, HttpBody body)
- : super(body.type, body.body);
-}
-
-class _HttpClientResponseBody
- extends _HttpBody implements HttpClientResponseBody {
- final HttpClientResponse response;
-
- _HttpClientResponseBody(this.response, HttpBody body)
- : super(body.type, body.body);
-}
diff --git a/pkg/http_server/lib/src/http_multipart_form_data.dart b/pkg/http_server/lib/src/http_multipart_form_data.dart
deleted file mode 100644
index ec98d75..0000000
--- a/pkg/http_server/lib/src/http_multipart_form_data.dart
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library http_server.http_multipart_form_data;
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:mime/mime.dart';
-
-import 'http_multipart_form_data_impl.dart';
-
-/**
- * [:HttpMultipartFormData:] class used for 'upgrading' a [MimeMultipart] by
- * parsing it as a 'multipart/form-data' part. The following code shows how
- * it can be used.
- *
- * HttpServer server = ...;
- * server.listen((request) {
- * String boundary = request.headers.contentType.parameters['boundary'];
- * request
- * .transform(new MimeMultipartTransformer(boundary))
- * .map(HttpMultipartFormData.parse)
- * .map((HttpMultipartFormData formData) {
- * // form data object available here.
- * });
- *
- * [:HttpMultipartFormData:] is a Stream, serving either bytes or decoded
- * Strings. Use [isText] or [isBinary] to see what type of data is provided.
- */
-abstract class HttpMultipartFormData implements Stream {
- /**
- * The parsed [:Content-Type:] header of the [:HttpMultipartFormData:].
- * Returns [:null:] if not present.
- */
- ContentType get contentType;
-
- /**
- * The parsed [:Content-Disposition:] header of the [:HttpMultipartFormData:].
- * This field is always present. Use this to extract e.g. name(form field
- * name)and filename (client provided name of uploaded file) parameters.
- */
- HeaderValue get contentDisposition;
-
- /**
- * The parsed [:Content-Transfer-Encoding:] header of the
- * [:HttpMultipartFormData:]. This field is used to determine how to decode
- * the data. Returns [:null:] if not present.
- */
- HeaderValue get contentTransferEncoding;
-
- /**
- * Returns [:true:] if the data is decoded as [String].
- */
- bool get isText;
-
- /**
- * Returns [:true:] if the data is raw bytes.
- */
- bool get isBinary;
-
- /**
- * Returns the value for the header named [name]. If there
- * is no header with the provided name, [:null:] will be returned.
- *
- * Use this method to index other headers available in the original
- * [MimeMultipart].
- */
- String value(String name);
-
- /**
- * Parse a [MimeMultipart] and return a [HttpMultipartFormData]. If the
- * [:Content-Disposition:] header is missing or invalid, a [HttpException] is
- * thrown.
- *
- * If the [MimeMultipart] is identified as text, and the [:Content-Type:]
- * header is missing, the data is decoded using [defaultEncoding]. See more
- * information in the
- * [HTML5 spec](http://dev.w3.org/html5/spec-preview/
- * constraints.html#multipart-form-data).
- */
- static HttpMultipartFormData parse(MimeMultipart multipart,
- {Encoding defaultEncoding: UTF8})
- => HttpMultipartFormDataImpl.parse(multipart, defaultEncoding);
-}
diff --git a/pkg/http_server/lib/src/http_multipart_form_data_impl.dart b/pkg/http_server/lib/src/http_multipart_form_data_impl.dart
deleted file mode 100644
index dc72bf1..0000000
--- a/pkg/http_server/lib/src/http_multipart_form_data_impl.dart
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library http_server.http_multipart_form_data_impl;
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:mime/mime.dart';
-
-import 'http_multipart_form_data.dart';
-
-class HttpMultipartFormDataImpl extends Stream
- implements HttpMultipartFormData {
- final ContentType contentType;
- final HeaderValue contentDisposition;
- final HeaderValue contentTransferEncoding;
-
- final MimeMultipart _mimeMultipart;
-
- bool _isText = false;
-
- Stream _stream;
-
- HttpMultipartFormDataImpl(ContentType this.contentType,
- HeaderValue this.contentDisposition,
- HeaderValue this.contentTransferEncoding,
- MimeMultipart this._mimeMultipart,
- Encoding defaultEncoding) {
- _stream = _mimeMultipart;
- if (contentTransferEncoding != null) {
- // TODO(ajohnsen): Support BASE64, etc.
- throw new HttpException("Unsupported contentTransferEncoding: "
- "${contentTransferEncoding.value}");
- }
-
- if (contentType == null ||
- contentType.primaryType == 'text' ||
- contentType.mimeType == 'application/json') {
- _isText = true;
- Encoding encoding;
- if (contentType != null && contentType.charset != null) {
- encoding = Encoding.getByName(contentType.charset);
- }
- if (encoding == null) encoding = defaultEncoding;
- _stream = _stream.transform(encoding.decoder);
- }
- }
-
- bool get isText => _isText;
- bool get isBinary => !_isText;
-
- static HttpMultipartFormData parse(MimeMultipart multipart,
- Encoding defaultEncoding) {
- var type;
- var encoding;
- var disposition;
- var remaining = new Map<String, String>();
- for (String key in multipart.headers.keys) {
- switch (key) {
- case 'content-type':
- type = ContentType.parse(multipart.headers[key]);
- break;
-
- case 'content-transfer-encoding':
- encoding = HeaderValue.parse(multipart.headers[key]);
- break;
-
- case 'content-disposition':
- disposition = HeaderValue.parse(multipart.headers[key],
- preserveBackslash: true);
- break;
-
- default:
- remaining[key] = multipart.headers[key];
- break;
- }
- }
- if (disposition == null) {
- throw new HttpException(
- "Mime Multipart doesn't contain a Content-Disposition header value");
- }
- return new HttpMultipartFormDataImpl(
- type, disposition, encoding, multipart, defaultEncoding);
- }
-
- StreamSubscription listen(void onData(data),
- {void onDone(),
- Function onError,
- bool cancelOnError}) {
- return _stream.listen(onData,
- onDone: onDone,
- onError: onError,
- cancelOnError: cancelOnError);
- }
-
- String value(String name) {
- return _mimeMultipart.headers[name];
- }
-}
diff --git a/pkg/http_server/lib/src/virtual_directory.dart b/pkg/http_server/lib/src/virtual_directory.dart
deleted file mode 100644
index bd8ca73..0000000
--- a/pkg/http_server/lib/src/virtual_directory.dart
+++ /dev/null
@@ -1,478 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library http_server.virtual_directory;
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:mime/mime.dart';
-import 'package:path/path.dart';
-
-// Used for signal a directory redirecting, where a tailing slash is missing.
-class _DirectoryRedirect {
- const _DirectoryRedirect();
-}
-
-typedef dynamic _DirCallback(Directory dir, HttpRequest request);
-typedef dynamic _ErrorCallback(HttpRequest request);
-
-/**
- * A [VirtualDirectory] can serve files and directory-listing from a root path,
- * to [HttpRequest]s.
- *
- * The [VirtualDirectory] providing secure handling of request uris and
- * file-system links, correct mime-types and custom error pages.
- */
-class VirtualDirectory {
- final String root;
-
- /**
- * Set or get if the [VirtualDirectory] should list the content of
- * directories.
- */
- bool allowDirectoryListing = false;
-
- /**
- * Set or get if the [VirtualDirectory] should follow links, that point
- * to other resources within the [root] directory.
- */
- bool followLinks = true;
-
- /**
- * Set or get if the [VirtualDirectory] should jail the root. When the root is
- * not jailed, links can be followed to outside the [root] directory.
- */
- bool jailRoot = true;
-
- final List<String> _pathPrefixSegments;
-
-
- final RegExp _invalidPathRegExp = new RegExp("[\\\/\x00]");
-
- _ErrorCallback _errorCallback;
- _DirCallback _dirCallback;
-
- static List<String> _parsePathPrefix(String pathPrefix) {
- if (pathPrefix == null) return <String>[];
- return new Uri(path: pathPrefix).pathSegments
- .where((segment) => segment.isNotEmpty)
- .toList();
- }
-
- /*
- * Create a new [VirtualDirectory] for serving static file content of
- * the path [root].
- *
- * The [root] is not required to exist. If the [root] doesn't exist at time of
- * a request, a 404 response is generated.
- *
- * If [pathPrefix] is set, [pathPrefix] will indicate the expected path prefix
- * of incoming requests. When locating the resource on disk, the prefix will
- * be trimmed from the requests uri, before locating the actual resource.
- * If the requests uri doesn't start with [pathPrefix], a 404 response is
- * generated.
- */
- VirtualDirectory(this.root, {String pathPrefix})
- : _pathPrefixSegments = _parsePathPrefix(pathPrefix);
-
- /**
- * Serve a [Stream] of [HttpRequest]s, in this [VirtualDirectory].
- */
- StreamSubscription<HttpRequest> serve(Stream<HttpRequest> requests) =>
- requests.listen(serveRequest);
-
- /**
- * Serve a single [HttpRequest], in this [VirtualDirectory].
- */
- Future serveRequest(HttpRequest request) {
- var iterator = request.uri.pathSegments.iterator;
- for (var segment in _pathPrefixSegments) {
- if (!iterator.moveNext() || iterator.current != segment) {
- _serveErrorPage(HttpStatus.NOT_FOUND, request);
- return request.response.done;
- }
- }
- return _locateResource('.', iterator..moveNext())
- .then((entity) {
- if (entity is File) {
- serveFile(entity, request);
- } else if (entity is Directory) {
- if (allowDirectoryListing) {
- _serveDirectory(entity, request);
- } else {
- _serveErrorPage(HttpStatus.NOT_FOUND, request);
- }
- } else if (entity is _DirectoryRedirect) {
- // TODO(ajohnsen): Use HttpRequest.requestedUri once 1.2 is out.
- request.response.redirect(Uri.parse('${request.uri}/'),
- status: HttpStatus.MOVED_PERMANENTLY);
- } else {
- assert(entity == null);
- _serveErrorPage(HttpStatus.NOT_FOUND, request);
- }
- return request.response.done;
- });
- }
-
- /**
- * Set the [callback] to override the default directory listing. The
- * [callback] will be called with the [Directory] to be listed and the
- * [HttpRequest].
- */
- void set directoryHandler(void callback(Directory dir, HttpRequest request)) {
- _dirCallback = callback;
- }
-
- /**
- * Set the [callback] to override the error page handler. When [callback] is
- * invoked, the `statusCode` property of the response is set.
- */
- void set errorPageHandler(void callback(HttpRequest request)) {
- _errorCallback = callback;
- }
-
- Future _locateResource(String path, Iterator<String> segments) {
- // Don't allow navigating up paths.
- if (segments.current == "..") return new Future.value(null);
- path = normalize(path);
- // If we jail to root, the relative path can never go up.
- if (jailRoot && split(path).first == "..") return new Future.value(null);
- String fullPath() => join(root, path);
- return FileSystemEntity.type(fullPath(), followLinks: false)
- .then((type) {
- switch (type) {
- case FileSystemEntityType.FILE:
- if (segments.current == null) {
- return new File(fullPath());
- }
- break;
-
- case FileSystemEntityType.DIRECTORY:
- String dirFullPath() => '${fullPath()}$separator';
- var current = segments.current;
- if (current == null) {
- if (path == '.') return new Directory(dirFullPath());
- return const _DirectoryRedirect();
- }
- bool hasNext = segments.moveNext();
- if (!hasNext && current == "") {
- return new Directory(dirFullPath());
- } else {
- if (_invalidPathRegExp.hasMatch(current)) break;
- return _locateResource(join(path, current), segments);
- }
- break;
-
- case FileSystemEntityType.LINK:
- if (followLinks) {
- return new Link(fullPath()).target()
- .then((target) {
- String targetPath = normalize(target);
- if (isAbsolute(targetPath)) {
- // If we jail to root, the path can never be absolute.
- if (jailRoot) return null;
- return _locateResource(targetPath, segments);
- } else {
- targetPath = join(dirname(path), targetPath);
- return _locateResource(targetPath, segments);
- }
- });
- }
- break;
- }
- // Return `null` on fall-through, to indicate NOT_FOUND.
- return null;
- });
- }
-
- /**
- * Serve the content of [file] to [request].
- *
- * This is usefull when e.g. overriding [directoryHandler] to redirect to
- * some index file.
- *
- * In the request contains the [HttpStatus.IF_MODIFIED_SINCE] header,
- * [serveFile] will send a [HttpStatus.NOT_MODIFIED] response if the file
- * was not changed.
- *
- * Note that if it was unabled to read from [file], the [request]s response
- * is closed with error-code [HttpStatus.NOT_FOUND].
- */
- void serveFile(File file, HttpRequest request) {
- var response = request.response;
- // TODO(ajohnsen): Set up Zone support for these errors.
- file.lastModified().then((lastModified) {
- if (request.headers.ifModifiedSince != null &&
- !lastModified.isAfter(request.headers.ifModifiedSince)) {
- response.statusCode = HttpStatus.NOT_MODIFIED;
- response.close();
- return null;
- }
-
- response.headers.set(HttpHeaders.LAST_MODIFIED, lastModified);
- response.headers.set(HttpHeaders.ACCEPT_RANGES, "bytes");
-
- return file.length().then((length) {
- String range = request.headers.value(HttpHeaders.RANGE);
- if (range != null) {
- // We only support one range, where the standard support several.
- Match matches = new RegExp(r"^bytes=(\d*)\-(\d*)$").firstMatch(range);
- // If the range header have the right format, handle it.
- if (matches != null &&
- (matches[1].isNotEmpty || matches[2].isNotEmpty)) {
- // Serve sub-range.
- int start; // First byte position - inclusive.
- int end; // Last byte position - inclusive.
- if (matches[1].isEmpty) {
- start = length - int.parse(matches[2]);
- if (start < 0) start = 0;
- end = length - 1;
- } else {
- start = int.parse(matches[1]);
- end = matches[2].isEmpty ? length - 1: int.parse(matches[2]);
- }
- // If the range is syntactically invalid the Range header
- // MUST be ignored (RFC 2616 section 14.35.1).
- if (start <= end) {
- if (end >= length) {
- end = length - 1;
- }
-
- if (start >= length) {
- response
- ..statusCode = HttpStatus.REQUESTED_RANGE_NOT_SATISFIABLE
- ..close();
- return;
- }
-
- // Override Content-Length with the actual bytes sent.
- response.headers.set(HttpHeaders.CONTENT_LENGTH, end - start + 1);
-
- // Set 'Partial Content' status code.
- response
- ..statusCode = HttpStatus.PARTIAL_CONTENT
- ..headers.set(HttpHeaders.CONTENT_RANGE,
- 'bytes $start-$end/$length');
-
- // Pipe the 'range' of the file.
- if (request.method == 'HEAD') {
- response.close();
- } else {
- file.openRead(start, end + 1)
- .pipe(new _VirtualDirectoryFileStream(response, file.path))
- .catchError((_) {
- // TODO(kevmoo): log errors
- });
- }
- return;
- }
- }
- }
-
- response.headers.set(HttpHeaders.CONTENT_LENGTH, length);
- if (request.method == 'HEAD') {
- response.close();
- } else {
- file.openRead()
- .pipe(new _VirtualDirectoryFileStream(response, file.path))
- .catchError((_) {
- // TODO(kevmoo): log errors
- });
- }
- });
- }).catchError((_) {
- response.statusCode = HttpStatus.NOT_FOUND;
- response.close();
- });
- }
-
- void _serveDirectory(Directory dir, HttpRequest request) {
- if (_dirCallback != null) {
- _dirCallback(dir, request);
- return;
- }
- var response = request.response;
- dir.stat().then((stats) {
- if (request.headers.ifModifiedSince != null &&
- !stats.modified.isAfter(request.headers.ifModifiedSince)) {
- response.statusCode = HttpStatus.NOT_MODIFIED;
- response.close();
- return;
- }
-
- response.headers.contentType =
- new ContentType('text', 'html', parameters: {'charset': 'utf-8'});
- response.headers.set(HttpHeaders.LAST_MODIFIED, stats.modified);
- var path = Uri.decodeComponent(request.uri.path);
- var encodedPath = new HtmlEscape().convert(path);
- var header =
-'''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title>Index of $encodedPath</title>
-</head>
-<body>
-<h1>Index of $encodedPath</h1>
-<table>
- <tr>
- <td>Name</td>
- <td>Last modified</td>
- <td>Size</td>
- </tr>
-''';
- var server = response.headers.value(HttpHeaders.SERVER);
- if (server == null) server = "";
- var footer =
-'''</table>
-$server
-</body>
-</html>
-''';
-
- response.write(header);
-
- void add(String name, String modified, var size, bool folder) {
- if (size == null) size = "-";
- if (modified == null) modified = "";
- var encodedSize = new HtmlEscape().convert(size.toString());
- var encodedModified = new HtmlEscape().convert(modified);
- var encodedLink = new HtmlEscape(HtmlEscapeMode.ATTRIBUTE)
- .convert(Uri.encodeComponent(name));
- if (folder) {
- encodedLink += '/';
- name += '/';
- }
- var encodedName = new HtmlEscape().convert(name);
-
- var entry =
-''' <tr>
- <td><a href="$encodedLink">$encodedName</a></td>
- <td>$encodedModified</td>
- <td style="text-align: right">$encodedSize</td>
- </tr>''';
- response.write(entry);
- }
-
- if (path != '/') {
- add('..', null, null, true);
- }
-
- dir.list(followLinks: true).listen((entity) {
- var name = basename(entity.path);
- var stat = entity.statSync();
- if (entity is File) {
- add(name,
- stat.modified.toString(),
- stat.size,
- false);
- } else if (entity is Directory) {
- add(name,
- stat.modified.toString(),
- null,
- true);
- }
- }, onError: (e) {
- // TODO(kevmoo): log error
- }, onDone: () {
- response.write(footer);
- response.close();
- });
- }, onError: (e) {
- // TODO(kevmoo): log error
- response.close();
- });
- }
-
- void _serveErrorPage(int error, HttpRequest request) {
- var response = request.response;
- response.statusCode = error;
- if (_errorCallback != null) {
- _errorCallback(request);
- return;
- }
- response.headers.contentType =
- new ContentType('text', 'html', parameters: {'charset': 'utf-8'});
- // Default error page.
- var path = Uri.decodeComponent(request.uri.path);
- var encodedPath = new HtmlEscape().convert(path);
- var encodedReason = new HtmlEscape().convert(response.reasonPhrase);
- var encodedError = new HtmlEscape().convert(error.toString());
-
- var server = response.headers.value(HttpHeaders.SERVER);
- if (server == null) server = "";
- var page =
-'''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title>$encodedReason: $encodedPath</title>
-</head>
-<body>
-<h1>Error $encodedError at \'$encodedPath\': $encodedReason</h1>
-$server
-</body>
-</html>''';
- response.write(page);
- response.close();
- }
-}
-
-class _VirtualDirectoryFileStream extends StreamConsumer<List<int>> {
- final HttpResponse response;
- final String path;
- List<int> buffer = [];
-
- _VirtualDirectoryFileStream(HttpResponse this.response, String this.path);
-
- Future addStream(Stream<List<int>> stream) {
- stream.listen(
- (data) {
- if (buffer == null) {
- response.add(data);
- return;
- }
- if (buffer.length == 0) {
- if (data.length >= defaultMagicNumbersMaxLength) {
- setMimeType(data);
- response.add(data);
- buffer = null;
- } else {
- buffer.addAll(data);
- }
- } else {
- buffer.addAll(data);
- if (buffer.length >= defaultMagicNumbersMaxLength) {
- setMimeType(buffer);
- response.add(buffer);
- buffer = null;
- }
- }
- },
- onDone: () {
- if (buffer != null) {
- if (buffer.length == 0) {
- setMimeType(null);
- } else {
- setMimeType(buffer);
- response.add(buffer);
- }
- }
- response.close();
- },
- onError: response.addError);
- return response.done;
- }
-
- Future close() => new Future.value();
-
- void setMimeType(List<int> bytes) {
- var mimeType = lookupMimeType(path, headerBytes: bytes);
- if (mimeType != null) {
- response.headers.contentType = ContentType.parse(mimeType);
- }
- }
-}
diff --git a/pkg/http_server/lib/src/virtual_host.dart b/pkg/http_server/lib/src/virtual_host.dart
deleted file mode 100644
index 9c5229c..0000000
--- a/pkg/http_server/lib/src/virtual_host.dart
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library http_server.virtual_host;
-
-import 'dart:async';
-import 'dart:io';
-
-/**
- * The [VirtualHost] class is a utility class for handling multiple hosts on
- * multiple sources, by using a named-based approach.
- */
-abstract class VirtualHost {
- /**
- * Get the [Stream] of [HttpRequest]s, not matching any hosts. If unused, the
- * default implementation will result in a [HttpHeaders.FORBIDDEN] response.
- */
- Stream<HttpRequest> get unhandled;
-
- /**
- * Construct a new [VirtualHost].
- *
- * The optional [source] is a shortcut for calling [addSource].
- *
- * Example of usage:
- *
- * HttpServer.bind(..., 80).then((server) {
- * var virtualHost = new VirtualHost(server);
- * virtualServer.addHost('static.myserver.com')
- * .listen(...);
- * virtualServer.addHost('cache.myserver.com')
- * .listen(...);
- * })
- */
- factory VirtualHost([Stream<HttpRequest> source]) => new _VirtualHost(source);
-
- /**
- * Provide another source of [HttpRequest]s in the form of a [Stream].
- */
- void addSource(Stream<HttpRequest> source);
-
-
- /**
- * Add a host to the [VirtualHost] instance. The host can be either a specific
- * domain (`my.domain.name`) or a wildcard-based domain name
- * (`*.domain.name`). The former will only match the specific domain name
- * while the latter will match any series of sub-domains.
- *
- * If both `my.domain.name` and `*.domain.name` is specified, the most
- * qualified will take precedence, `my.domain.name` in this case.
- */
- Stream<HttpRequest> addHost(String host);
-}
-
-
-class _VirtualHostDomain {
- StreamController<HttpRequest> any;
- StreamController<HttpRequest> exact;
- Map<String, _VirtualHostDomain> subDomains = {};
-}
-
-
-class _VirtualHost implements VirtualHost {
- final _VirtualHostDomain _topDomain = new _VirtualHostDomain();
- StreamController<HttpRequest> _unhandledController;
-
- Stream<HttpRequest> get unhandled {
- if (_unhandledController == null) {
- _unhandledController = new StreamController<HttpRequest>();
- }
- return _unhandledController.stream;
- }
-
- _VirtualHost([Stream<HttpRequest> source]) {
- if (source != null) addSource(source);
- }
-
- void addSource(Stream<HttpRequest> source) {
- source.listen((request) {
- var host = request.headers.host;
- if (host == null) {
- _unhandled(request);
- return;
- }
- var domains = host.split('.');
- var current = _topDomain;
- var any;
- for (var i = domains.length - 1; i >= 0; i--) {
- if (current.any != null) any = current.any;
- if (i == 0) {
- var last = current.subDomains[domains[i]];
- if (last != null && last.exact != null) {
- last.exact.add(request);
- return;
- }
- } else {
- if (!current.subDomains.containsKey(domains[i])) {
- break;
- }
- current = current.subDomains[domains[i]];
- }
- }
- if (any != null) {
- any.add(request);
- return;
- }
- _unhandled(request);
- });
- }
-
- Stream<HttpRequest> addHost(String host) {
- if (host.lastIndexOf('*') > 0) {
- throw new ArgumentError(
- 'Wildcards are only allowed in the beginning of a host');
- }
- var controller = new StreamController<HttpRequest>();
- var domains = host.split('.');
- var current = _topDomain;
- for (var i = domains.length - 1; i >= 0; i--) {
- if (domains[i] == '*') {
- if (current.any != null) {
- throw new ArgumentError('Host is already provided');
- }
- current.any = controller;
- } else {
- if (!current.subDomains.containsKey(domains[i])) {
- current.subDomains[domains[i]] = new _VirtualHostDomain();
- }
- if (i > 0) {
- current = current.subDomains[domains[i]];
- } else {
- if (current.subDomains[domains[i]].exact != null) {
- throw new ArgumentError('Host is already provided');
- }
- current.subDomains[domains[i]].exact = controller;
- }
- }
- }
- return controller.stream;
- }
-
- void _unhandled(HttpRequest request) {
- if (_unhandledController != null) {
- _unhandledController.add(request);
- return;
- }
- request.response.statusCode = HttpStatus.FORBIDDEN;
- request.response.close();
- }
-}
diff --git a/pkg/http_server/pubspec.yaml b/pkg/http_server/pubspec.yaml
deleted file mode 100644
index 6bf4501..0000000
--- a/pkg/http_server/pubspec.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-name: http_server
-version: 0.9.5+1
-author: Dart Team <misc@dartlang.org>
-description: Library of HTTP server classes.
-homepage: http://www.dartlang.org
-environment:
- sdk: '>=1.0.0 <2.0.0'
-dependencies:
- mime: '>=0.9.0 <0.10.0'
- path: '>=0.9.0 <2.0.0'
-dev_dependencies:
- unittest: '>=0.10.0 <0.12.0'
diff --git a/pkg/http_server/test/http_body_test.dart b/pkg/http_server/test/http_body_test.dart
deleted file mode 100644
index e8d84c0..0000000
--- a/pkg/http_server/test/http_body_test.dart
+++ /dev/null
@@ -1,341 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io';
-import 'dart:convert';
-
-import 'package:http_server/http_server.dart';
-import 'package:unittest/unittest.dart';
-
-void testHttpClientResponseBody() {
- void test(String mimeType,
- List<int> content,
- dynamic expectedBody,
- String type,
- [bool shouldFail = false]) {
- HttpServer.bind("127.0.0.1", 0).then((server) {
- server.listen((request) {
- request.listen(
- (_) {},
- onDone: () {
- request.response.headers.contentType =
- ContentType.parse(mimeType);
- request.response.add(content);
- request.response.close();
- });
- });
-
- var client = new HttpClient();
- client.get("127.0.0.1", server.port, "/")
- .then((request) => request.close())
- .then(HttpBodyHandler.processResponse)
- .then((body) {
- expect(shouldFail, isFalse);
- expect(body.type, equals(type));
- expect(body.response, isNotNull);
- switch (type) {
- case "text":
- case "json":
- expect(body.body, equals(expectedBody));
- break;
-
- default:
- fail("bad body type");
- }
- }, onError: (error) {
- if (!shouldFail) throw error;
- })
- .whenComplete(() {
- client.close();
- server.close();
- });
- });
- }
- test("text/plain", "body".codeUnits, "body", "text");
- test("text/plain; charset=utf-8",
- "body".codeUnits,
- "body",
- "text");
- test("text/plain; charset=iso-8859-1",
- "body".codeUnits,
- "body",
- "text");
- test("text/plain; charset=us-ascii",
- "body".codeUnits,
- "body",
- "text");
- test("text/plain; charset=utf-8", [42], "*", "text");
- test("text/plain; charset=us-ascii", [142], null, "text", true);
- test("text/plain; charset=utf-8", [142], null, "text", true);
-
- test("application/json",
- '{"val": 5}'.codeUnits,
- { "val" : 5 },
- "json");
- test("application/json",
- '{ bad json }'.codeUnits,
- null,
- "json",
- true);
-}
-
-void testHttpServerRequestBody() {
- void test(String mimeType,
- List<int> content,
- dynamic expectedBody,
- String type,
- {bool shouldFail: false,
- Encoding defaultEncoding: UTF8}) {
- HttpServer.bind("127.0.0.1", 0).then((server) {
- server.transform(new HttpBodyHandler(defaultEncoding: defaultEncoding))
- .listen((body) {
- if (shouldFail) return;
- expect(shouldFail, isFalse);
- expect(body.type, equals(type));
- switch (type) {
- case "text":
- expect(body.request.headers.contentType.mimeType,
- equals("text/plain"));
- expect(body.body, equals(expectedBody));
- break;
-
- case "json":
- expect(body.request.headers.contentType.mimeType,
- equals("application/json"));
- expect(body.body, equals(expectedBody));
- break;
-
- case "binary":
- expect(body.request.headers.contentType, isNull);
- expect(body.body, equals(expectedBody));
- break;
-
- case "form":
- var mimeType = body.request.headers.contentType.mimeType;
- expect(mimeType,
- anyOf(equals('multipart/form-data'),
- equals('application/x-www-form-urlencoded')));
- expect(body.body.keys.toSet(),
- equals(expectedBody.keys.toSet()));
- for (var key in expectedBody.keys) {
- var found = body.body[key];
- var expected = expectedBody[key];
- if (found is HttpBodyFileUpload) {
- expect(found.contentType.toString(),
- equals(expected['contentType']));
- expect(found.filename,
- equals(expected['filename']));
- expect(found.content,
- equals(expected['content']));
- } else {
- expect(found, equals(expected));
- }
- }
- break;
-
- default:
- throw "bad body type";
- }
- body.request.response.close();
- }, onError: (error) {
- if (!shouldFail) throw error;
- });
-
- var client = new HttpClient();
- client.post("127.0.0.1", server.port, "/")
- .then((request) {
- if (mimeType != null) {
- request.headers.contentType =
- ContentType.parse(mimeType);
- }
- request.add(content);
- return request.close();
- })
- .then((response) {
- if (shouldFail) {
- expect(response.statusCode, equals(HttpStatus.BAD_REQUEST));
- }
- return response.drain();
- })
- .whenComplete(() {
- client.close();
- server.close();
- })
- .catchError((e) {
- if (!shouldFail) throw e;
- });
- });
- }
-
- test("text/plain", "body".codeUnits, "body", "text");
- test("text/plain; charset=utf-8",
- "body".codeUnits,
- "body",
- "text");
- test("text/plain; charset=utf-8", [42], "*", "text");
- test("text/plain; charset=us-ascii", [142], null, "text", shouldFail: true);
- test("text/plain; charset=utf-8", [142], null, "text", shouldFail: true);
-
- test("application/json",
- '{"val": 5}'.codeUnits,
- { "val" : 5 },
- "json");
- test("application/json",
- '{ bad json }'.codeUnits,
- null,
- "json",
- shouldFail: true);
-
- test(null, "body".codeUnits, "body".codeUnits, "binary");
-
- test("multipart/form-data; boundary=AaB03x",
- '''
---AaB03x\r
-Content-Disposition: form-data; name="name"\r
-\r
-Larry\r
---AaB03x--\r\n'''.codeUnits,
- { "name": "Larry" },
- "form");
-
- test("multipart/form-data; boundary=AaB03x",
- '''
---AaB03x\r
-Content-Disposition: form-data; name="files"; filename="myfile"\r
-Content-Type: application/octet-stream\r
-\r
-File content\r
---AaB03x--\r\n'''.codeUnits,
- { "files": { 'filename': 'myfile',
- 'contentType': 'application/octet-stream',
- 'content': 'File content'.codeUnits} },
- "form");
-
- test("multipart/form-data; boundary=AaB03x",
- '''
---AaB03x\r
-Content-Disposition: form-data; name="files"; filename="myfile"\r
-Content-Type: application/octet-stream\r
-\r
-File content\r
---AaB03x\r
-Content-Disposition: form-data; name="files"; filename="myfile"\r
-Content-Type: text/plain\r
-\r
-File content\r
---AaB03x--\r\n'''.codeUnits,
- { "files": { 'filename': 'myfile',
- 'contentType': 'text/plain',
- 'content': 'File content'} },
- "form");
-
- test("multipart/form-data; boundary=AaB03x",
- '''
---AaB03x\r
-Content-Disposition: form-data; name="files"; filename="myfile"\r
-Content-Type: application/json\r
-\r
-File content\r
---AaB03x--\r\n'''.codeUnits,
- { "files": { 'filename': 'myfile',
- 'contentType': 'application/json',
- 'content': 'File content'} },
- "form");
-
- test('application/x-www-form-urlencoded',
- '%E5%B9%B3%3D%E4%BB%AE%E5%90%8D=%E5%B9%B3%E4%BB%AE%E5%90%8D&b'
- '=%E5%B9%B3%E4%BB%AE%E5%90%8D'.codeUnits,
- { '平=仮名' : '平仮名',
- 'b' : '平仮名' },
- "form");
-
- test('application/x-www-form-urlencoded',
- 'a=%F8+%26%23548%3B'.codeUnits,
- null,
- "form",
- shouldFail: true);
-
- test('application/x-www-form-urlencoded',
- 'a=%C0%A0'.codeUnits,
- null,
- "form",
- shouldFail: true);
-
- test('application/x-www-form-urlencoded',
- 'a=x%A0x'.codeUnits,
- null,
- "form",
- shouldFail: true);
-
- test('application/x-www-form-urlencoded',
- 'a=x%C0x'.codeUnits,
- null,
- "form",
- shouldFail: true);
-
- test('application/x-www-form-urlencoded',
- 'a=%C3%B8+%C8%A4'.codeUnits,
- { 'a' : 'ø Ȥ' },
- "form");
-
- test('application/x-www-form-urlencoded',
- 'a=%F8+%26%23548%3B'.codeUnits,
- { 'a' : 'ø Ȥ' },
- "form",
- defaultEncoding: LATIN1);
-
- test('application/x-www-form-urlencoded',
- 'name=%26'.codeUnits,
- { 'name' : '&' },
- "form",
- defaultEncoding: LATIN1);
-
- test('application/x-www-form-urlencoded',
- 'name=%F8%26'.codeUnits,
- { 'name' : 'ø&' },
- "form",
- defaultEncoding: LATIN1);
-
- test('application/x-www-form-urlencoded',
- 'name=%26%3B'.codeUnits,
- { 'name' : '&;' },
- "form",
- defaultEncoding: LATIN1);
-
- test('application/x-www-form-urlencoded',
- 'name=%26%23548%3B%26%23548%3B'.codeUnits,
- { 'name' : 'ȤȤ' },
- "form",
- defaultEncoding: LATIN1);
-
- test('application/x-www-form-urlencoded',
- 'name=%26'.codeUnits,
- { 'name' : '&' },
- "form");
-
- test('application/x-www-form-urlencoded',
- 'name=%C3%B8%26'.codeUnits,
- { 'name' : 'ø&' },
- "form");
-
- test('application/x-www-form-urlencoded',
- 'name=%26%3B'.codeUnits,
- { 'name' : '&;' },
- "form");
-
- test('application/x-www-form-urlencoded',
- 'name=%C8%A4%26%23548%3B'.codeUnits,
- { 'name' : 'ȤȤ' },
- "form");
-
- test('application/x-www-form-urlencoded',
- 'name=%C8%A4%C8%A4'.codeUnits,
- { 'name' : 'ȤȤ' },
- "form");
-}
-
-void main() {
- testHttpClientResponseBody();
- testHttpServerRequestBody();
-}
diff --git a/pkg/http_server/test/http_mock.dart b/pkg/http_server/test/http_mock.dart
deleted file mode 100644
index be2b50c..0000000
--- a/pkg/http_server/test/http_mock.dart
+++ /dev/null
@@ -1,208 +0,0 @@
-library http_mock;
-
-import 'dart:async';
-import 'dart:collection';
-import 'dart:convert';
-import 'dart:io';
-
-class MockHttpHeaders implements HttpHeaders {
- final Map<String, List<String>> _headers =
- new HashMap<String, List<String>>();
-
- operator[](key) => _headers[key];
-
- int get contentLength => int.parse(_headers[HttpHeaders.CONTENT_LENGTH][0]);
-
- DateTime get ifModifiedSince {
- List<String> values = _headers[HttpHeaders.IF_MODIFIED_SINCE];
- if (values != null) {
- try {
- return HttpDate.parse(values[0]);
- } on Exception catch (e) {
- return null;
- }
- }
- return null;
- }
-
- void set ifModifiedSince(DateTime ifModifiedSince) {
- // Format "ifModifiedSince" header with date in Greenwich Mean Time (GMT).
- String formatted = HttpDate.format(ifModifiedSince.toUtc());
- _set(HttpHeaders.IF_MODIFIED_SINCE, formatted);
- }
-
- ContentType contentType;
-
- void set(String name, Object value) {
- name = name.toLowerCase();
- _headers.remove(name);
- _addAll(name, value);
- }
-
- String value(String name) {
- name = name.toLowerCase();
- List<String> values = _headers[name];
- if (values == null) return null;
- if (values.length > 1) {
- throw new HttpException("More than one value for header $name");
- }
- return values[0];
- }
-
- String toString() => '$runtimeType : $_headers';
-
- // [name] must be a lower-case version of the name.
- void _add(String name, value) {
- if (name == HttpHeaders.IF_MODIFIED_SINCE) {
- if (value is DateTime) {
- ifModifiedSince = value;
- } else if (value is String) {
- _set(HttpHeaders.IF_MODIFIED_SINCE, value);
- } else {
- throw new HttpException("Unexpected type for header named $name");
- }
- } else {
- _addValue(name, value);
- }
- }
-
- void _addAll(String name, value) {
- if (value is List) {
- for (int i = 0; i < value.length; i++) {
- _add(name, value[i]);
- }
- } else {
- _add(name, value);
- }
- }
-
- void _addValue(String name, Object value) {
- List<String> values = _headers[name];
- if (values == null) {
- values = new List<String>();
- _headers[name] = values;
- }
- if (value is DateTime) {
- values.add(HttpDate.format(value));
- } else {
- values.add(value.toString());
- }
- }
-
- void _set(String name, String value) {
- assert(name == name.toLowerCase());
- List<String> values = new List<String>();
- _headers[name] = values;
- values.add(value);
- }
-
- /*
- * Implemented to remove editor warnings
- */
- dynamic noSuchMethod(Invocation invocation) {
- print([invocation.memberName,
- invocation.isGetter,
- invocation.isSetter,
- invocation.isMethod,
- invocation.isAccessor]);
- return super.noSuchMethod(invocation);
- }
-}
-
-class MockHttpRequest implements HttpRequest {
- final Uri uri;
- final MockHttpResponse response = new MockHttpResponse();
- final HttpHeaders headers = new MockHttpHeaders();
- final String method = 'GET';
- final bool followRedirects;
-
- MockHttpRequest(this.uri, {this.followRedirects: true,
- DateTime ifModifiedSince}) {
- if(ifModifiedSince != null) {
- headers.ifModifiedSince = ifModifiedSince;
- }
- }
-
- /*
- * Implemented to remove editor warnings
- */
- dynamic noSuchMethod(Invocation invocation) =>
- super.noSuchMethod(invocation);
-}
-
-class MockHttpResponse implements HttpResponse {
- final HttpHeaders headers = new MockHttpHeaders();
- final Completer _completer = new Completer();
- final List<int> _buffer = new List<int>();
- String _reasonPhrase;
- Future _doneFuture;
-
- MockHttpResponse() {
- _doneFuture = _completer.future
- .whenComplete(() {
- assert(!_isDone);
- _isDone = true;
- });
- }
-
- bool _isDone = false;
-
- int statusCode = HttpStatus.OK;
-
- String get reasonPhrase => _findReasonPhrase(statusCode);
-
- void set reasonPhrase(String value) {
- _reasonPhrase = value;
- }
-
- Future get done => _doneFuture;
-
- Future close() {
- _completer.complete();
- return _doneFuture;
- }
-
- void add(List<int> data) {
- _buffer.addAll(data);
- }
-
- void addError(error, [StackTrace stackTrace]) {
- // doesn't seem to be hit...hmm...
- }
-
- Future redirect(Uri location, {int status: HttpStatus.MOVED_TEMPORARILY}) {
- this.statusCode = status;
- headers.set(HttpHeaders.LOCATION, location.toString());
- return close();
- }
-
- void write(Object obj) {
- var str = obj.toString();
- add(UTF8.encode(str));
- }
-
- /*
- * Implemented to remove editor warnings
- */
- dynamic noSuchMethod(Invocation invocation) =>
- super.noSuchMethod(invocation);
-
- String get mockContent => UTF8.decode(_buffer);
-
- List<int> get mockContentBinary => _buffer;
-
- bool get mockDone => _isDone;
-
- // Copied from SDK http_impl.dart @ 845 on 2014-01-05
- // TODO: file an SDK bug to expose this on HttpStatus in some way
- String _findReasonPhrase(int statusCode) {
- if (_reasonPhrase != null) {
- return _reasonPhrase;
- }
-
- switch (statusCode) {
- case HttpStatus.NOT_FOUND: return "Not Found";
- default: return "Status $statusCode";
- }
- }
-}
diff --git a/pkg/http_server/test/http_multipart_test.dart b/pkg/http_server/test/http_multipart_test.dart
deleted file mode 100644
index 96d5702..0000000
--- a/pkg/http_server/test/http_multipart_test.dart
+++ /dev/null
@@ -1,257 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "package:http_server/http_server.dart";
-import "package:mime/mime.dart";
-import "package:unittest/unittest.dart";
-import 'dart:async';
-import 'dart:io';
-import 'dart:convert';
-
-// Representation of a form field from a multipart/form-data form POST body.
-class FormField {
- // Name of the form field specified in Content-Disposition.
- final String name;
- // Value of the form field. This is either a String or a List<int> depending
- // on the Content-Type.
- final value;
- // Content-Type of the form field.
- final String contentType;
- // Filename if specified in Content-Disposition.
- final String filename;
-
- FormField(String this.name,
- this.value,
- {String this.contentType,
- String this.filename});
-
- bool operator==(other) {
- if (value.length != other.value.length) return false;
- for (int i = 0; i < value.length; i++) {
- if (value[i] != other.value[i]) {
- return false;
- }
- }
- return name == other.name &&
- contentType == other.contentType &&
- filename == other.filename;
- }
-
- int get hashCode => name.hashCode;
-
- String toString() {
- return "FormField('$name', '$value', '$contentType', '$filename')";
- }
-}
-
-void postDataTest(List<int> message,
- String contentType,
- String boundary,
- List<FormField> expectedFields,
- {defaultEncoding: LATIN1}) {
- HttpServer.bind("127.0.0.1", 0).then((server) {
- server.listen((request) {
- String boundary = request.headers.contentType.parameters['boundary'];
- request
- .transform(new MimeMultipartTransformer(boundary))
- .map((part) => HttpMultipartFormData.parse(
- part, defaultEncoding: defaultEncoding))
- .map((multipart) {
- var future;
- if (multipart.isText) {
- future = multipart.join();
- } else {
- future = multipart.fold([], (b, s) => b..addAll(s));
- }
- return future
- .then((data) {
- String contentType;
- if (multipart.contentType != null) {
- contentType = multipart.contentType.mimeType;
- }
- return new FormField(
- multipart.contentDisposition.parameters['name'],
- data,
- contentType: contentType,
- filename:
- multipart.contentDisposition.parameters['filename']);
- });
- })
- .toList()
- .then(Future.wait)
- .then((fields) {
- expect(fields, equals(expectedFields));
- request.response.close().then((_) => server.close());
- });
- });
- var client = new HttpClient();
- client.post('127.0.0.1', server.port, '/')
- .then((request) {
- request.headers.set('content-type',
- 'multipart/form-data; boundary=$boundary');
- request.add(message);
- return request.close();
- })
- .then((response) {
- client.close();
- });
- });
-}
-
-void testEmptyPostData() {
- var message = '''
-------WebKitFormBoundaryU3FBruSkJKG0Yor1--\r\n''';
-
- postDataTest(message.codeUnits,
- 'multipart/form-data',
- '----WebKitFormBoundaryU3FBruSkJKG0Yor1',
- []);
-}
-
-void testPostData() {
- var message = '''
-\r\n--AaB03x\r
-Content-Disposition: form-data; name="submit-name"\r
-\r
-Larry\r
---AaB03x\r
-Content-Disposition: form-data; name="files"; filename="file1.txt"\r
-Content-Type: text/plain\r
-\r
-Content of file\r
---AaB03x--\r\n''';
-
- postDataTest(message.codeUnits,
- 'multipart/form-data',
- 'AaB03x',
- [new FormField('submit-name', 'Larry'),
- new FormField('files',
- 'Content of file',
- contentType: 'text/plain',
- filename: 'file1.txt')]);
-
- // Windows/IE style file upload.
- message = '''
-\r\n--AaB03x\r
-Content-Disposition: form-data; name="files"; filename="C:\\file1\\".txt"\r
-Content-Type: text/plain\r
-\r
-Content of file\r
---AaB03x--\r\n''';
-
-
- postDataTest(message.codeUnits,
- 'multipart/form-data',
- 'AaB03x',
- [new FormField('files',
- 'Content of file',
- contentType: 'text/plain',
- filename: 'C:\\file1".txt')]);
- // Similar test using Chrome posting.
- message = [
- 45, 45, 45, 45, 45, 45, 87, 101, 98, 75, 105, 116, 70, 111, 114, 109, 66,
- 111, 117, 110, 100, 97, 114, 121, 81, 83, 113, 108, 56, 107, 68, 65, 76,
- 77, 55, 116, 65, 107, 67, 49, 13, 10, 67, 111, 110, 116, 101, 110, 116,
- 45, 68, 105, 115, 112, 111, 115, 105, 116, 105, 111, 110, 58, 32, 102,
- 111, 114, 109, 45, 100, 97, 116, 97, 59, 32, 110, 97, 109, 101, 61, 34,
- 115, 117, 98, 109, 105, 116, 45, 110, 97, 109, 101, 34, 13, 10, 13, 10,
- 84, 101, 115, 116, 13, 10, 45, 45, 45, 45, 45, 45, 87, 101, 98, 75, 105,
- 116, 70, 111, 114, 109, 66, 111, 117, 110, 100, 97, 114, 121, 81, 83, 113,
- 108, 56, 107, 68, 65, 76, 77, 55, 116, 65, 107, 67, 49, 13, 10, 67, 111,
- 110, 116, 101, 110, 116, 45, 68, 105, 115, 112, 111, 115, 105, 116, 105,
- 111, 110, 58, 32, 102, 111, 114, 109, 45, 100, 97, 116, 97, 59, 32, 110,
- 97, 109, 101, 61, 34, 102, 105, 108, 101, 115, 34, 59, 32, 102, 105, 108,
- 101, 110, 97, 109, 101, 61, 34, 86, 69, 82, 83, 73, 79, 78, 34, 13, 10,
- 67, 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 32, 97, 112,
- 112, 108, 105, 99, 97, 116, 105, 111, 110, 47, 111, 99, 116, 101, 116, 45,
- 115, 116, 114, 101, 97, 109, 13, 10, 13, 10, 123, 32, 10, 32, 32, 34, 114,
- 101, 118, 105, 115, 105, 111, 110, 34, 58, 32, 34, 50, 49, 56, 54, 48, 34,
- 44, 10, 32, 32, 34, 118, 101, 114, 115, 105, 111, 110, 34, 32, 58, 32, 34,
- 48, 46, 49, 46, 50, 46, 48, 95, 114, 50, 49, 56, 54, 48, 34, 44, 10, 32,
- 32, 34, 100, 97, 116, 101, 34, 32, 32, 32, 32, 58, 32, 34, 50, 48, 49, 51,
- 48, 52, 50, 51, 48, 48, 48, 52, 34, 10, 125, 13, 10, 45, 45, 45, 45, 45,
- 45, 87, 101, 98, 75, 105, 116, 70, 111, 114, 109, 66, 111, 117, 110, 100,
- 97, 114, 121, 81, 83, 113, 108, 56, 107, 68, 65, 76, 77, 55, 116, 65, 107,
- 67, 49, 45, 45, 13, 10];
-
- var data = [
- 123, 32, 10, 32, 32, 34, 114, 101, 118, 105, 115, 105, 111, 110, 34, 58,
- 32, 34, 50, 49, 56, 54, 48, 34, 44, 10, 32, 32, 34, 118, 101, 114, 115,
- 105, 111, 110, 34, 32, 58, 32, 34, 48, 46, 49, 46, 50, 46, 48, 95, 114,
- 50, 49, 56, 54, 48, 34, 44, 10, 32, 32, 34, 100, 97, 116, 101, 34, 32, 32,
- 32, 32, 58, 32, 34, 50, 48, 49, 51, 48, 52, 50, 51, 48, 48, 48, 52, 34,
- 10, 125];
-
- postDataTest(message,
- 'multipart/form-data',
- '----WebKitFormBoundaryQSql8kDALM7tAkC1',
- [new FormField('submit-name', 'Test'),
- new FormField('files',
- data,
- contentType: 'application/octet-stream',
- filename: 'VERSION')]);
-
- // In Chrome, Safari and Firefox HTML entity encoding might be used for
- // values in form fields. The HTML entity encoding for ひらがな is
- // ひらがな
- message = [
- 45, 45, 45, 45, 45, 45, 87, 101, 98, 75, 105, 116, 70, 111, 114, 109, 66,
- 111, 117, 110, 100, 97, 114, 121, 118, 65, 86, 122, 117, 103, 75, 77, 116,
- 90, 98, 121, 87, 111, 66, 71, 13, 10, 67, 111, 110, 116, 101, 110, 116,
- 45, 68, 105, 115, 112, 111, 115, 105, 116, 105, 111, 110, 58, 32, 102,
- 111, 114, 109, 45, 100, 97, 116, 97, 59, 32, 110, 97, 109, 101, 61, 34,
- 110, 97, 109, 101, 34, 13, 10, 13, 10, 38, 35, 49, 50, 52, 48, 50, 59, 38,
- 35, 49, 50, 52, 50, 53, 59, 38, 35, 49, 50, 51, 54, 52, 59, 38, 35, 49,
- 50, 51, 57, 52, 59, 13, 10, 45, 45, 45, 45, 45, 45, 87, 101, 98, 75, 105,
- 116, 70, 111, 114, 109, 66, 111, 117, 110, 100, 97, 114, 121, 118, 65, 86,
- 122, 117, 103, 75, 77, 116, 90, 98, 121, 87, 111, 66, 71, 45, 45, 13, 10];
-
- postDataTest(message,
- 'multipart/form-data',
- '----WebKitFormBoundaryvAVzugKMtZbyWoBG',
- [new FormField('name', 'ひらがな')],
- defaultEncoding: UTF8);
-
- // The UTF-8 encoding of ひらがな is
- // [227, 129, 178, 227, 130, 137, 227, 129, 140, 227, 129, 170].
- message = [
- 45, 45, 45, 45, 45, 45, 87, 101, 98, 75, 105, 116, 70, 111, 114, 109, 66,
- 111, 117, 110, 100, 97, 114, 121, 71, 88, 116, 66, 114, 99, 106, 120, 104,
- 101, 75, 101, 78, 54, 105, 48, 13, 10, 67, 111, 110, 116, 101, 110, 116,
- 45, 68, 105, 115, 112, 111, 115, 105, 116, 105, 111, 110, 58, 32, 102,
- 111, 114, 109, 45, 100, 97, 116, 97, 59, 32, 110, 97, 109, 101, 61, 34,
- 116, 101, 115, 116, 34, 13, 10, 13, 10, 227, 129, 178, 227, 130, 137, 227,
- 129, 140, 227, 129, 170, 13, 10, 45, 45, 45, 45, 45, 45, 87, 101, 98, 75,
- 105, 116, 70, 111, 114, 109, 66, 111, 117, 110, 100, 97, 114, 121, 71, 88,
- 116, 66, 114, 99, 106, 120, 104, 101, 75, 101, 78, 54, 105, 48, 45, 45,
- 13, 10];
-
- postDataTest(message,
- 'multipart/form-data',
- '----WebKitFormBoundaryGXtBrcjxheKeN6i0',
- [new FormField('test', 'ひらがな')],
- defaultEncoding: UTF8);
-
- message = [
- 45, 45, 45, 45, 45, 45, 87, 101, 98, 75, 105, 116, 70, 111, 114, 109, 66,
- 111, 117, 110, 100, 97, 114, 121, 102, 101, 48, 69, 122, 86, 49, 97, 78,
- 121, 115, 68, 49, 98, 80, 104, 13, 10, 67, 111, 110, 116, 101, 110, 116,
- 45, 68, 105, 115, 112, 111, 115, 105, 116, 105, 111, 110, 58, 32, 102,
- 111, 114, 109, 45, 100, 97, 116, 97, 59, 32, 110, 97, 109, 101, 61, 34,
- 110, 97, 109, 101, 34, 13, 10, 13, 10, 248, 118, 13, 10, 45, 45, 45, 45,
- 45, 45, 87, 101, 98, 75, 105, 116, 70, 111, 114, 109, 66, 111, 117, 110,
- 100, 97, 114, 121, 102, 101, 48, 69, 122, 86, 49, 97, 78, 121, 115, 68,
- 49, 98, 80, 104, 45, 45, 13, 10];
-
- postDataTest(message,
- 'multipart/form-data',
- '----WebKitFormBoundaryfe0EzV1aNysD1bPh',
- [new FormField('name', 'øv')]);
-}
-
-
-void main() {
- testEmptyPostData();
- testPostData();
-}
diff --git a/pkg/http_server/test/pkcert/README b/pkg/http_server/test/pkcert/README
deleted file mode 100644
index fe764a9..0000000
--- a/pkg/http_server/test/pkcert/README
+++ /dev/null
@@ -1,16 +0,0 @@
-This is a certificate database used by Dart for testing purposes.
-
-It is created as a certificate database by NSS (Network Security Services),
-a library from Mozilla, using the certutil tool. It uses a cert9.db file,
-rather than a cert8.db file, so the database directory must be specified with
-"sql:" in front of the directory path, or the environment variable
-NSS_DEFAULT_DB_TYPE must be set to "sql".
-
-The password for the key database is "dartdart".
-
-The database contains a root certificate from Equifax, used to verify the
-client https connection to www.google.dk. It contains a self-signed
-certificate for a local certificate authority myauthority_cert, and a
-server certificate for localhost called localhost_cert, signed by
-myauthority_cert. It contains the key for localhost_cert, but
-not the key for myauthority_cert.
diff --git a/pkg/http_server/test/pkcert/cert9.db b/pkg/http_server/test/pkcert/cert9.db
deleted file mode 100644
index 497fca6..0000000
--- a/pkg/http_server/test/pkcert/cert9.db
+++ /dev/null
Binary files differ
diff --git a/pkg/http_server/test/pkcert/key4.db b/pkg/http_server/test/pkcert/key4.db
deleted file mode 100644
index fc06432..0000000
--- a/pkg/http_server/test/pkcert/key4.db
+++ /dev/null
Binary files differ
diff --git a/pkg/http_server/test/utils.dart b/pkg/http_server/test/utils.dart
deleted file mode 100644
index 80c16ca..0000000
--- a/pkg/http_server/test/utils.dart
+++ /dev/null
@@ -1,300 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library utils;
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-import "package:unittest/unittest.dart";
-
-import 'package:http_server/http_server.dart';
-
-import 'http_mock.dart';
-
-/**
- * Used to flag a given test case as being a mock or not.
- */
-final _isMockTestExpando = new Expando<bool>('isMockTest');
-
-void testVirtualDir(String name, Future func(Directory dir)) {
- _testVirtualDir(name, false, func);
- _testVirtualDir(name, true, func);
-}
-
-void _testVirtualDir(String name, bool useMocks, Future func(Directory dir)) {
- if(useMocks) {
- name = '$name, with mocks';
- }
-
- test(name, () {
- // see subsequent access to this expando below
- _isMockTestExpando[currentTestCase] = useMocks;
-
- var dir = Directory.systemTemp.createTempSync('http_server_virtual_');
-
- return func(dir)
- .whenComplete(() {
- return dir.delete(recursive: true);
- });
- });
-}
-
-Future<int> getStatusCodeForVirtDir(VirtualDirectory virtualDir,
- String path,
- {String host,
- bool secure: false,
- DateTime ifModifiedSince,
- bool rawPath: false,
- bool followRedirects: true,
- int from,
- int to}) {
-
- // if this is a mock test, then run the mock code path
- if(_isMockTestExpando[currentTestCase]) {
- var uri = _getUri(0, path, secure: secure, rawPath: rawPath);
-
- var request = new MockHttpRequest(uri, followRedirects: followRedirects,
- ifModifiedSince: ifModifiedSince);
- _addRangeHeader(request, from, to);
-
- return _withMockRequest(virtualDir, request)
- .then((response) {
- return response.statusCode;
- });
- };
-
- assert(_isMockTestExpando[currentTestCase] == false);
-
- return _withServer(virtualDir, (port) {
- return getStatusCode(port, path, host: host, secure: secure,
- ifModifiedSince: ifModifiedSince, rawPath: rawPath,
- followRedirects: followRedirects, from: from, to: to);
- });
-}
-
-Future<int> getStatusCode(int port,
- String path,
- {String host,
- bool secure: false,
- DateTime ifModifiedSince,
- bool rawPath: false,
- bool followRedirects: true,
- int from,
- int to}) {
- var uri = _getUri(port, path, secure: secure, rawPath: rawPath);
-
- var client = new HttpClient();
- return client.getUrl(uri)
- .then((request) {
- if (!followRedirects) request.followRedirects = false;
- if (host != null) request.headers.host = host;
- if (ifModifiedSince != null) {
- request.headers.ifModifiedSince = ifModifiedSince;
- }
- _addRangeHeader(request, from, to);
- return request.close();
- })
- .then((response) => response.drain()
- .then((_) => response.statusCode))
- .whenComplete(() => client.close());
-}
-
-Future<HttpHeaders> getHeaders(
- VirtualDirectory virDir, String path, {int from, int to}) {
-
- // if this is a mock test, then run the mock code path
- if(_isMockTestExpando[currentTestCase]) {
- var uri = _getUri(0, path);
-
- var request = new MockHttpRequest(uri);
- _addRangeHeader(request, from, to);
-
- return _withMockRequest(virDir, request)
- .then((response) {
- return response.headers;
- });
- }
-
- assert(_isMockTestExpando[currentTestCase] == false);
-
- return _withServer(virDir, (port) {
- return _getHeaders(port, path, from, to);
- });
-}
-
-Future<String> getAsString(VirtualDirectory virtualDir, String path) {
-
- // if this is a mock test, then run the mock code path
- if(_isMockTestExpando[currentTestCase]) {
- var uri = _getUri(0, path);
-
- var request = new MockHttpRequest(uri);
-
- return _withMockRequest(virtualDir, request)
- .then((response) {
- return response.mockContent;
- });
- };
-
- assert(_isMockTestExpando[currentTestCase] == false);
-
- return _withServer(virtualDir, (int port) {
- return _getAsString(port, path);
- });
-}
-
-Future<List<int>> getAsBytes(
- VirtualDirectory virtualDir, String path, {int from, int to}) {
-
- // if this is a mock test, then run the mock code path
- if (_isMockTestExpando[currentTestCase]) {
- var uri = _getUri(0, path);
-
- var request = new MockHttpRequest(uri);
- _addRangeHeader(request, from, to);
-
- return _withMockRequest(virtualDir, request)
- .then((response) {
- return response.mockContentBinary;
- });
- };
-
- assert(_isMockTestExpando[currentTestCase] == false);
-
- return _withServer(virtualDir, (int port) {
- return _getAsBytes(port, path, from, to);
- });
-}
-
-Future<List> getContentAndResponse(
- VirtualDirectory virtualDir, String path, {int from, int to}) {
- // if this is a mock test, then run the mock code path
- if (_isMockTestExpando[currentTestCase]) {
- var uri = _getUri(0, path);
-
- var request = new MockHttpRequest(uri);
- _addRangeHeader(request, from, to);
-
- return _withMockRequest(virtualDir, request)
- .then((response) {
- return [response.mockContentBinary,
- response];
- });
- };
-
- assert(_isMockTestExpando[currentTestCase] == false);
-
- return _withServer(virtualDir, (int port) {
- return _getContentAndResponse(port, path, from, to);
- });
-}
-
-Future<MockHttpResponse> _withMockRequest(VirtualDirectory virDir,
- MockHttpRequest request) {
- return virDir.serveRequest(request).then((value) {
- expect(value, isNull);
- expect(request.response.mockDone, isTrue);
- return request.response;
- })
- .then((HttpResponse response) {
- if(response.statusCode == HttpStatus.MOVED_PERMANENTLY ||
- response.statusCode == HttpStatus.MOVED_TEMPORARILY) {
- if(request.followRedirects == true) {
- var uri = Uri.parse(response.headers.value(HttpHeaders.LOCATION));
- var newMock = new MockHttpRequest(uri, followRedirects: true);
-
- return _withMockRequest(virDir, newMock);
- }
- }
- return response;
- });
-}
-
-Future _withServer(VirtualDirectory virDir, Future func(int port)) {
- HttpServer server;
- return HttpServer.bind('localhost', 0)
- .then((value) {
- server = value;
- virDir.serve(server);
- return func(server.port);
- })
- .whenComplete(() => server.close());
-}
-
-Future<HttpHeaders> _getHeaders(int port, String path, int from, int to) {
- var client = new HttpClient();
- return client.get('localhost', port, path)
- .then((request) {
- _addRangeHeader(request, from, to);
- return request.close();
- })
- .then((response) => response.drain()
- .then((_) => response.headers))
- .whenComplete(() => client.close());
-}
-
-Future<String> _getAsString(int port, String path) {
- var client = new HttpClient();
- return client.get('localhost', port, path)
- .then((request) => request.close())
- .then((response) => UTF8.decodeStream(response))
- .whenComplete(() => client.close());
-}
-
-Future<List<int>> _getAsBytes(int port, String path, int from, int to) {
- var client = new HttpClient();
- return client.get('localhost', port, path)
- .then((request) {
- _addRangeHeader(request, from, to);
- return request.close();
- })
- .then((response) => response.fold([], (p, e) => p..addAll(e)))
- .whenComplete(() => client.close());
-}
-
-Future<List> _getContentAndResponse(int port, String path, int from, int to) {
- var client = new HttpClient();
- return client.get('localhost', port, path)
- .then((request) {
- _addRangeHeader(request, from, to);
- return request.close();
- })
- .then((response) => response.fold([], (p, e) => p..addAll(e))
- .then((bytes) => [bytes, response]))
- .whenComplete(() => client.close());
-}
-
-Uri _getUri(int port,
- String path,
- {bool secure: false,
- bool rawPath: false}) {
- if (rawPath) {
- return new Uri(scheme: secure ? 'https' : 'http',
- host: 'localhost',
- port: port,
- path: path);
- } else {
- return (secure ?
- new Uri.https('localhost:$port', path) :
- new Uri.http('localhost:$port', path));
- }
-}
-
-void _addRangeHeader(request, int from, int to) {
- var fromStr = from != null ? '$from' : '';
- var toStr = to != null ? '$to' : '';
- if (fromStr.isNotEmpty || toStr.isNotEmpty) {
- request.headers.set(HttpHeaders.RANGE, 'bytes=$fromStr-$toStr');
- }
-}
-
-const CERTIFICATE = "localhost_cert";
-
-
-void setupSecure() {
- String certificateDatabase = Platform.script.resolve('pkcert').toFilePath();
- SecureSocket.initialize(database: certificateDatabase,
- password: 'dartdart');
-}
diff --git a/pkg/http_server/test/virtual_directory_test.dart b/pkg/http_server/test/virtual_directory_test.dart
deleted file mode 100644
index c6b381a..0000000
--- a/pkg/http_server/test/virtual_directory_test.dart
+++ /dev/null
@@ -1,810 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:async';
-import 'dart:io';
-
-import "package:http_server/http_server.dart";
-import 'package:path/path.dart' as pathos;
-import "package:unittest/unittest.dart";
-
-import 'utils.dart';
-
-void _testEncoding(name, expected, [bool create = true]) {
- testVirtualDir('encode-$name', (dir) {
- if (create) new File('${dir.path}/$name').createSync();
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
-
- return getStatusCodeForVirtDir(virDir, '/$name')
- .then((result) {
- expect(result, expected);
- });
- });
-}
-
-void main() {
- group('serve-root', () {
- testVirtualDir('dir-exists', (dir) {
-
- var virDir = new VirtualDirectory(dir.path);
-
- return getStatusCodeForVirtDir(virDir, '/')
- .then((result) {
- expect(result, HttpStatus.NOT_FOUND);
- });
- });
-
- testVirtualDir('dir-not-exists', (dir) {
- var virDir = new VirtualDirectory(pathos.join(dir.path + 'foo'));
-
- return getStatusCodeForVirtDir(virDir, '/')
- .then((result) {
- expect(result, HttpStatus.NOT_FOUND);
- });
- });
- });
-
- group('serve-file', () {
- group('top-level', () {
- testVirtualDir('file-exists', (dir) {
- var file = new File('${dir.path}/file')..createSync();
- var virDir = new VirtualDirectory(dir.path);
- return getStatusCodeForVirtDir(virDir, '/file')
- .then((result) {
- expect(result, HttpStatus.OK);
- });
- });
-
- testVirtualDir('file-not-exists', (dir) {
- var virDir = new VirtualDirectory(dir.path);
-
- return getStatusCodeForVirtDir(virDir, '/file')
- .then((result) {
- expect(result, HttpStatus.NOT_FOUND);
- });
- });
- });
-
- group('in-dir', () {
- testVirtualDir('file-exists', (dir) {
- var dir2 = new Directory('${dir.path}/dir')..createSync();
- var file = new File('${dir2.path}/file')..createSync();
- var virDir = new VirtualDirectory(dir.path);
- return getStatusCodeForVirtDir(virDir, '/dir/file')
- .then((result) {
- expect(result, HttpStatus.OK);
- });
- });
-
- testVirtualDir('file-not-exists', (dir) {
- var dir2 = new Directory('${dir.path}/dir')..createSync();
- var file = new File('${dir.path}/file')..createSync();
- var virDir = new VirtualDirectory(dir.path);
-
- return getStatusCodeForVirtDir(virDir, '/dir/file')
- .then((result) {
- expect(result, HttpStatus.NOT_FOUND);
- });
- });
- });
- });
-
- group('serve-dir', () {
- group('top-level', () {
- testVirtualDir('simple', (dir) {
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
-
- return getAsString(virDir, '/')
- .then((result) {
- expect(result, contains('Index of /'));
- });
- });
-
- testVirtualDir('files', (dir) {
- var virDir = new VirtualDirectory(dir.path);
- for (int i = 0; i < 10; i++) {
- new File('${dir.path}/$i').createSync();
- }
- virDir.allowDirectoryListing = true;
-
- return getAsString(virDir, '/')
- .then((result) {
- expect(result, contains('Index of /'));
- });
- });
-
- testVirtualDir('dir-href', (dir) {
- var virDir = new VirtualDirectory(dir.path);
- new Directory('${dir.path}/dir').createSync();
- virDir.allowDirectoryListing = true;
-
- return getAsString(virDir, '/')
- .then((result) {
- expect(result, contains('<a href="dir/">'));
- });
- });
-
- testVirtualDir('dirs', (dir) {
- var virDir = new VirtualDirectory(dir.path);
- for (int i = 0; i < 10; i++) {
- new Directory('${dir.path}/$i').createSync();
- }
- virDir.allowDirectoryListing = true;
-
- return getAsString(virDir, '/')
- .then((result) {
- expect(result, contains('Index of /'));
- });
- });
-
- testVirtualDir('encoded-dir', (dir) {
- var virDir = new VirtualDirectory(dir.path);
- new Directory('${dir.path}/alert(\'hacked!\');').createSync();
- virDir.allowDirectoryListing = true;
-
- return getAsString(virDir, '/alert(\'hacked!\');')
- .then((result) {
- expect(result, contains('/alert('hacked!');/'));
- });
- });
-
- testVirtualDir('non-ascii-dir', (dir) {
- var virDir = new VirtualDirectory(dir.path);
- new Directory('${dir.path}/æø').createSync();
- virDir.allowDirectoryListing = true;
-
- return getAsString(virDir, '/')
- .then((result) {
- expect(result, contains('æø'));
- });
- });
-
- testVirtualDir('content-type', (dir) {
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
-
- return getHeaders(virDir, '/')
- .then((headers) {
- var contentType = headers.contentType.toString();
- expect(contentType, 'text/html; charset=utf-8');
- });
- });
-
- if (!Platform.isWindows) {
- testVirtualDir('recursive-link', (dir) {
- var link = new Link('${dir.path}/recursive')..createSync('.');
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
-
- return Future.wait([
- getAsString(virDir, '/').then(
- (s) => s.contains('recursive/')),
- getAsString(virDir, '/').then(
- (s) => !s.contains('../')),
- getAsString(virDir, '/').then(
- (s) => s.contains('Index of /')),
- getAsString(virDir, '/recursive').then(
- (s) => s.contains('recursive/')),
- getAsString(virDir, '/recursive').then(
- (s) => s.contains('../')),
- getAsString(virDir, '/recursive').then(
- (s) => s.contains('Index of /recursive'))])
- .then((result) {
- expect(result, equals([true, true, true, true, true, true]));
- });
- });
-
- testVirtualDir('encoded-path', (dir) {
- var virDir = new VirtualDirectory(dir.path);
- new Directory('${dir.path}/javascript:alert(document);"')
- .createSync();
- virDir.allowDirectoryListing = true;
-
- return getAsString(virDir, '/')
- .then((result) {
- expect(result, contains('javascript%3Aalert(document)%3B%22/'));
- });
- });
-
- testVirtualDir('encoded-special', (dir) {
- var virDir = new VirtualDirectory(dir.path);
- new Directory('${dir.path}/<>&"').createSync();
- virDir.allowDirectoryListing = true;
-
- return getAsString(virDir, '/')
- .then((result) {
- expect(result, contains('<>&"/'));
- expect(result, contains('href="%3C%3E%26%22/"'));
- });
- });
- }
- });
-
- group('custom', () {
- testVirtualDir('simple', (dir) {
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
- virDir.directoryHandler = (dir2, request) {
- expect(dir2, isNotNull);
- expect(FileSystemEntity.identicalSync(dir.path, dir2.path), isTrue);
- request.response.write('My handler ${request.uri.path}');
- request.response.close();
- };
-
- return getAsString(virDir, '/')
- .then((result) {
- expect(result, 'My handler /');
- });
- });
-
- testVirtualDir('index-1', (dir) {
- new File('${dir.path}/index.html').writeAsStringSync('index file');
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
- virDir.directoryHandler = (dir2, request) {
- // Redirect directory-requests to index.html files.
- var indexUri = new Uri.file(dir2.path).resolve('index.html');
- return virDir.serveFile(new File(indexUri.toFilePath()), request);
- };
-
- return getAsString(virDir, '/')
- .then((result) {
- expect(result, 'index file');
- });
- });
-
- testVirtualDir('index-2', (dir) {
- new Directory('${dir.path}/dir').createSync();
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
-
- virDir.directoryHandler = (dir2, request) {
- fail('not expected');
- };
-
- return getStatusCodeForVirtDir(virDir, '/dir', followRedirects: false)
- .then((result) {
- expect(result, 301);
- });
- });
-
- testVirtualDir('index-3', (dir) {
- new File('${dir.path}/dir/index.html')
- ..createSync(recursive: true)
- ..writeAsStringSync('index file');
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
- virDir.directoryHandler = (dir2, request) {
- // Redirect directory-requests to index.html files.
- var indexUri = new Uri.file(dir2.path).resolve('index.html');
- return virDir.serveFile(new File(indexUri.toFilePath()), request);
- };
- return getAsString(virDir, '/dir')
- .then((result) {
- expect(result, 'index file');
- });
- });
-
- testVirtualDir('index-4', (dir) {
- new File('${dir.path}/dir/index.html')
- ..createSync(recursive: true)
- ..writeAsStringSync('index file');
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
- virDir.directoryHandler = (dir2, request) {
- // Redirect directory-requests to index.html files.
- var indexUri = new Uri.file(dir2.path).resolve('index.html');
- virDir.serveFile(new File(indexUri.toFilePath()), request);
- };
- return getAsString(virDir, '/dir/')
- .then((result) {
- expect(result, 'index file');
- });
- });
- });
-
- group('path-prefix', () {
- testVirtualDir('simple', (dir) {
- var virDir = new VirtualDirectory(dir.path, pathPrefix: '/path');
- virDir.allowDirectoryListing = true;
- virDir.directoryHandler = (d, request) {
- expect(FileSystemEntity.identicalSync(dir.path, d.path), isTrue);
- return request.response.close();
- };
-
- return getStatusCodeForVirtDir(virDir, '/path')
- .then((result) {
- expect(result, HttpStatus.OK);
- });
- });
-
- testVirtualDir('trailing-slash', (dir) {
- var virDir = new VirtualDirectory(dir.path, pathPrefix: '/path/');
- virDir.allowDirectoryListing = true;
- virDir.directoryHandler = (d, request) {
- expect(FileSystemEntity.identicalSync(dir.path, d.path), isTrue);
- return request.response.close();
- };
-
- return getStatusCodeForVirtDir(virDir, '/path')
- .then((result) {
- expect(result, HttpStatus.OK);
- });
- });
-
- testVirtualDir('not-matching', (dir) {
- var virDir = new VirtualDirectory(dir.path, pathPrefix: '/path/');
- return getStatusCodeForVirtDir(virDir, '/')
- .then((result) {
- expect(result, HttpStatus.NOT_FOUND);
- });
- });
- });
- });
-
- group('links', () {
- if (!Platform.isWindows) {
- group('follow-links', () {
- testVirtualDir('dir-link', (dir) {
- var dir2 = new Directory('${dir.path}/dir2')..createSync();
- var link = new Link('${dir.path}/dir3')..createSync('dir2');
- var file = new File('${dir2.path}/file')..createSync();
- var virDir = new VirtualDirectory(dir.path);
- virDir.followLinks = true;
-
- return getStatusCodeForVirtDir(virDir, '/dir3/file')
- .then((result) {
- expect(result, HttpStatus.OK);
- });
- });
-
- testVirtualDir('root-link', (dir) {
- var link = new Link('${dir.path}/dir3')..createSync('.');
- var file = new File('${dir.path}/file')..createSync();
- var virDir = new VirtualDirectory(dir.path);
- virDir.followLinks = true;
-
- return getStatusCodeForVirtDir(virDir, '/dir3/file')
- .then((result) {
- expect(result, HttpStatus.OK);
- });
- });
-
- group('bad-links', () {
- testVirtualDir('absolute-link', (dir) {
- var file = new File('${dir.path}/file')..createSync();
- var link = new Link('${dir.path}/file2')
- ..createSync('${dir.path}/file');
- var virDir = new VirtualDirectory(dir.path);
- virDir.followLinks = true;
-
- return getStatusCodeForVirtDir(virDir, '/file2')
- .then((result) {
- expect(result, HttpStatus.NOT_FOUND);
- });
- });
-
- testVirtualDir('relative-parent-link', (dir) {
- var dir2 = new Directory('${dir.path}/dir')..createSync();
- var file = new File('${dir.path}/file')..createSync();
- var link = new Link('${dir2.path}/file')
- ..createSync('../file');
- var virDir = new VirtualDirectory(dir2.path);
- virDir.followLinks = true;
-
- return getStatusCodeForVirtDir(virDir, '/dir3/file')
- .then((result) {
- expect(result, HttpStatus.NOT_FOUND);
- });
- });
- });
- });
-
- group('not-follow-links', () {
- testVirtualDir('dir-link', (dir) {
- var dir2 = new Directory('${dir.path}/dir2')..createSync();
- var link = new Link('${dir.path}/dir3')..createSync('dir2');
- var file = new File('${dir2.path}/file')..createSync();
- var virDir = new VirtualDirectory(dir.path);
- virDir.followLinks = false;
-
- return getStatusCodeForVirtDir(virDir, '/dir3/file')
- .then((result) {
- expect(result, HttpStatus.NOT_FOUND);
- });
- });
- });
-
- group('follow-links', () {
- group('no-root-jail', () {
- testVirtualDir('absolute-link', (dir) {
- var file = new File('${dir.path}/file')..createSync();
- var link = new Link('${dir.path}/file2')
- ..createSync('${dir.path}/file');
- var virDir = new VirtualDirectory(dir.path);
- virDir.followLinks = true;
- virDir.jailRoot = false;
-
- return getStatusCodeForVirtDir(virDir, '/file2')
- .then((result) {
- expect(result, HttpStatus.OK);
- });
- });
-
- testVirtualDir('relative-parent-link', (dir) {
- var dir2 = new Directory('${dir.path}/dir')..createSync();
- var file = new File('${dir.path}/file')..createSync();
- var link = new Link('${dir2.path}/file')
- ..createSync('../file');
- var virDir = new VirtualDirectory(dir2.path);
- virDir.followLinks = true;
- virDir.jailRoot = false;
-
- return getStatusCodeForVirtDir(virDir, '/file')
- .then((result) {
- expect(result, HttpStatus.OK);
- });
- });
- });
- });
- }
- });
-
- group('last-modified', () {
- group('file', () {
- testVirtualDir('file-exists', (dir) {
- var file = new File('${dir.path}/file')..createSync();
- var virDir = new VirtualDirectory(dir.path);
-
- return getHeaders(virDir, '/file')
- .then((headers) {
- expect(headers.value(HttpHeaders.LAST_MODIFIED), isNotNull);
- var lastModified = HttpDate.parse(
- headers.value(HttpHeaders.LAST_MODIFIED));
-
- return getStatusCodeForVirtDir(
- virDir, '/file', ifModifiedSince: lastModified);
- })
- .then((result) {
- expect(result, HttpStatus.NOT_MODIFIED);
- });
- });
-
- testVirtualDir('file-changes', (dir) {
- var file = new File('${dir.path}/file')..createSync();
- var virDir = new VirtualDirectory(dir.path);
-
- return getHeaders(virDir, '/file')
- .then((headers) {
- expect(headers.value(HttpHeaders.LAST_MODIFIED), isNotNull);
- var lastModified = HttpDate.parse(
- headers.value(HttpHeaders.LAST_MODIFIED));
-
- // Fake file changed by moving date back in time.
- lastModified = lastModified.subtract(
- const Duration(seconds: 10));
-
- return getStatusCodeForVirtDir(virDir, '/file',
- ifModifiedSince: lastModified);
- })
- .then((result) {
- expect(result, HttpStatus.OK);
- });
- });
- });
- });
-
- group('content-type', () {
- group('mime-type', () {
- testVirtualDir('from-path', (dir) {
- var file = new File('${dir.path}/file.jpg')..createSync();
- var virDir = new VirtualDirectory(dir.path);
-
- return getHeaders(virDir, '/file.jpg')
- .then((headers) {
- var contentType = headers.contentType.toString();
- expect(contentType, 'image/jpeg');
- });
- });
-
- testVirtualDir('from-magic-number', (dir) {
- var file = new File('${dir.path}/file.jpg')..createSync();
- file.writeAsBytesSync(
- [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]);
- var virDir = new VirtualDirectory(dir.path);
-
- return getHeaders(virDir, '/file.jpg')
- .then((headers) {
- var contentType = headers.contentType.toString();
- expect(contentType, 'image/png');
- });
- });
- });
- });
-
- group('range', () {
- var fileContent = [0, 1, 2, 3, 4, 5, 6, 7 ,8, 9];
- var virDir;
-
- prepare(dir) {
- new File('${dir.path}/file').writeAsBytesSync(fileContent);
- virDir = new VirtualDirectory(dir.path);
- }
-
- testVirtualDir('range', (dir) {
- prepare(dir);
- Future test(
- int from, int to, [List<int> expected, String contentRange]) {
- if (expected == null) {
- expected = fileContent.sublist(from, to + 1);
- }
- if (contentRange == null) {
- contentRange = 'bytes $from-$to/${fileContent.length}';
- }
- return getContentAndResponse(virDir, '/file', from: from, to: to)
- .then(expectAsync((result) {
- var content = result[0];
- var response = result[1];
- expect(content, expected);
- expect(response.headers[HttpHeaders.CONTENT_RANGE][0],
- contentRange);
- expect(expected.length, response.headers.contentLength);
- expect(response.statusCode, HttpStatus.PARTIAL_CONTENT);
- }));
- }
-
- return Future.forEach([
- () => test(0, 0),
- () => test(0, 1),
- () => test(1, 2),
- () => test(1, 9),
- () => test(0, 9),
- () => test(8, 9),
- () => test(9, 9),
- () => test(0, 10, fileContent, 'bytes 0-9/10'),
- () => test(9, 10, [9], 'bytes 9-9/10'),
- () => test(0, 1000, fileContent, 'bytes 0-9/10'),
- ], (f) => f().then(expectAsync((_) {})));
- });
-
- testVirtualDir('prefix-range', (dir) {
- prepare(dir);
- Future test(int from,
- [List<int> expected,
- String contentRange,
- bool expectContentRange = true,
- int expectedStatusCode = HttpStatus.PARTIAL_CONTENT]) {
- if (expected == null) {
- expected = fileContent.sublist(from, fileContent.length);
- }
- if (contentRange == null && expectContentRange) {
- contentRange = 'bytes ${from}-'
- '${fileContent.length - 1}/'
- '${fileContent.length}';
- }
- return getContentAndResponse(virDir, '/file', from: from)
- .then(expectAsync((result) {
- var content = result[0];
- var response = result[1];
- expect(content, expected);
- if (expectContentRange) {
- expect(response.headers[HttpHeaders.CONTENT_RANGE][0],
- contentRange);
- } else {
- expect(response.headers[HttpHeaders.CONTENT_RANGE], null);
- }
- expect(response.statusCode, expectedStatusCode);
- }));
- }
-
- return Future.forEach([
- () => test(0),
- () => test(1),
- () => test(9),
- () => test(10, fileContent, null, false, HttpStatus.OK),
- () => test(11, fileContent, null, false, HttpStatus.OK),
- () => test(1000, fileContent, null, false, HttpStatus.OK),
- ], (f) => f().then(expectAsync((_) {})));
- });
-
- testVirtualDir('suffix-range', (dir) {
- prepare(dir);
- Future test(int to, [List<int> expected, String contentRange]) {
- if (expected == null) {
- expected = fileContent.sublist(fileContent.length - to,
- fileContent.length);
- }
- if (contentRange == null) {
- contentRange = 'bytes ${fileContent.length - to}-'
- '${fileContent.length - 1}/'
- '${fileContent.length}';
- }
- return getContentAndResponse(virDir, '/file', to: to)
- .then(expectAsync((result) {
- var content = result[0];
- var response = result[1];
- expect(content, expected);
- expect(response.headers[HttpHeaders.CONTENT_RANGE][0],
- contentRange);
- expect(response.statusCode, HttpStatus.PARTIAL_CONTENT);
- }));
- }
-
- return Future.forEach([
- () => test(1),
- () => test(2),
- () => test(9),
- () => test(10),
- () => test(11, fileContent, 'bytes 0-9/10'),
- () => test(1000, fileContent, 'bytes 0-9/10')
- ], (f) => f().then(expectAsync((_) {})));
- });
-
- testVirtualDir('unsatisfiable-range', (dir) {
- prepare(dir);
- Future test(int from, int to) {
- return getContentAndResponse(virDir, '/file', from: from, to: to)
- .then(expectAsync((result) {
- var content = result[0];
- var response = result[1];
- expect(content.length, 0);
- expect(response.headers[HttpHeaders.CONTENT_RANGE], isNull);
- expect(response.statusCode,
- HttpStatus.REQUESTED_RANGE_NOT_SATISFIABLE);
- }));
- }
-
- return Future.forEach([
- () => test(10, 11),
- () => test(10, 1000),
- () => test(1000, 1000)
- ], (f) => f().then(expectAsync((_) {})));
- });
-
- testVirtualDir('invalid-range', (dir) {
- prepare(dir);
- Future test(int from, int to) {
- return getContentAndResponse(virDir, '/file', from: from, to: to)
- .then(expectAsync((result) {
- var content = result[0];
- var response = result[1];
- expect(content, fileContent);
- expect(response.headers[HttpHeaders.CONTENT_RANGE], isNull);
- expect(response.statusCode, HttpStatus.OK);
- }));
- }
-
- return Future.forEach([
- () => test(1, 0),
- () => test(10, 0),
- () => test(1000, 999),
- () => test(null, 0), // This is effectively range 10-9.
- ], (f) => f().then(expectAsync((_) {})));
- });
- });
-
- group('error-page', () {
- testVirtualDir('default', (dir) {
- var virDir = new VirtualDirectory(pathos.join(dir.path, 'foo'));
-
- return getAsString(virDir, '/')
- .then((result) {
- expect(result, matches(new RegExp('404.*Not Found')));
- });
- });
-
- testVirtualDir('custom', (dir) {
- var virDir = new VirtualDirectory(pathos.join(dir.path, 'foo'));
-
- virDir.errorPageHandler = (request) {
- request.response.write('my-page ');
- request.response.write(request.response.statusCode);
- request.response.close();
- };
-
- return getAsString(virDir, '/')
- .then((result) {
- expect(result, 'my-page 404');
- });
- });
- });
-
- group('escape-root', () {
- testVirtualDir('escape1', (dir) {
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
-
- return getStatusCodeForVirtDir(virDir, '/../')
- .then((result) {
- expect(result, HttpStatus.NOT_FOUND);
- });
- });
-
- testVirtualDir('escape2', (dir) {
- new Directory('${dir.path}/dir').createSync();
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
-
- return getStatusCodeForVirtDir(virDir, '/dir/../../')
- .then((result) {
- expect(result, HttpStatus.NOT_FOUND);
- });
- });
- });
-
- group('url-decode', () {
- testVirtualDir('with-space', (dir) {
- var file = new File('${dir.path}/my file')..createSync();
- var virDir = new VirtualDirectory(dir.path);
-
- return getStatusCodeForVirtDir(virDir, '/my file')
- .then((result) {
- expect(result, HttpStatus.OK);
- });
- });
-
- testVirtualDir('encoded-space', (dir) {
- var file = new File('${dir.path}/my file')..createSync();
- var virDir = new VirtualDirectory(dir.path);
-
- return getStatusCodeForVirtDir(virDir, '/my%20file')
- .then((result) {
- expect(result, HttpStatus.NOT_FOUND);
- });
- });
-
- testVirtualDir('encoded-path-separator', (dir) {
- new Directory('${dir.path}/a').createSync();
- new Directory('${dir.path}/a/b').createSync();
- new Directory('${dir.path}/a/b/c').createSync();
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
-
- return getStatusCodeForVirtDir(virDir, '/a%2fb/c', rawPath: true)
- .then((result) {
- expect(result, HttpStatus.NOT_FOUND);
- });
- });
-
- testVirtualDir('encoded-null', (dir) {
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
-
- return getStatusCodeForVirtDir(virDir, '/%00', rawPath: true)
- .then((result) {
- expect(result, HttpStatus.NOT_FOUND);
- });
- });
-
- _testEncoding('..', HttpStatus.NOT_FOUND, false);
- _testEncoding('%2e%2e', HttpStatus.OK);
- _testEncoding('%252e%252e', HttpStatus.OK);
- _testEncoding('/', HttpStatus.OK, false);
- _testEncoding('%2f', HttpStatus.NOT_FOUND, false);
- _testEncoding('%2f', HttpStatus.OK, true);
- });
-
- group('serve-file', () {
- testVirtualDir('from-dir-handler', (dir) {
- new File('${dir.path}/file')..writeAsStringSync('file contents');
- var virDir = new VirtualDirectory(dir.path);
- virDir.allowDirectoryListing = true;
- virDir.directoryHandler = (d, request) {
- expect(FileSystemEntity.identicalSync(dir.path, d.path), isTrue);
- return virDir.serveFile(new File('${d.path}/file'), request);
- };
-
- return getAsString(virDir, '/')
- .then((result) {
- expect(result, 'file contents');
- return getHeaders(virDir, '/')
- .then(expectAsync((headers) {
- expect('file contents'.length, headers.contentLength);
- }));
- });
- });
- });
-}
diff --git a/pkg/http_server/test/virtual_host_test.dart b/pkg/http_server/test/virtual_host_test.dart
deleted file mode 100644
index a08e793..0000000
--- a/pkg/http_server/test/virtual_host_test.dart
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:async';
-import 'dart:io';
-
-import "package:unittest/unittest.dart";
-import "package:http_server/http_server.dart";
-
-import 'utils.dart';
-
-void main() {
- setupSecure();
-
- test('empty-host', () {
- expect(HttpServer.bind('localhost', 0).then((server) {
- var virHost = new VirtualHost(server);
- return getStatusCode(server.port, '/')
- .whenComplete(server.close);
- }), completion(equals(HttpStatus.FORBIDDEN)));
- });
-
- test('empty-host-unhandled', () {
- expect(HttpServer.bind('localhost', 0).then((server) {
- var virHost = new VirtualHost(server);
- expect(virHost.unhandled.first.then((request) {
- request.response.close();
- }), completion(isNull));
- return getStatusCode(server.port, '/')
- .whenComplete(server.close);
- }), completion(equals(HttpStatus.OK)));
- });
-
- test('single-host', () {
- expect(HttpServer.bind('localhost', 0).then((server) {
- var virHost = new VirtualHost(server);
- expect(virHost.addHost('*.host.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- return getStatusCode(server.port, '/', host: 'my.host.com')
- .whenComplete(server.close);
- }), completion(equals(HttpStatus.OK)));
- });
-
- test('multiple-host', () {
- expect(HttpServer.bind('localhost', 0).then((server) {
- var virHost = new VirtualHost(server);
- expect(virHost.addHost('*.host1.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- expect(virHost.addHost('*.host2.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- expect(virHost.addHost('*.host3.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- return Future.wait([
- getStatusCode(server.port, '/', host: 'my.host1.com'),
- getStatusCode(server.port, '/', host: 'my.host2.com'),
- getStatusCode(server.port, '/', host: 'my.host3.com')])
- .whenComplete(server.close);
- }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
- });
-
- test('multiple-source-https', () {
- expect(Future.wait([
- HttpServer.bind('localhost', 0),
- HttpServer.bindSecure('localhost', 0, certificateName: CERTIFICATE)])
- .then((servers) {
- var virHost = new VirtualHost();
- virHost.addSource(servers[0]);
- virHost.addSource(servers[1]);
- virHost.unhandled.listen((request) {
- request.response.close();
- });
- return Future.wait([
- getStatusCode(servers[0].port, '/', host: 'myhost1.com'),
- getStatusCode(
- servers[1].port, '/', host: 'myhost2.com', secure: true)])
- .whenComplete(() => servers.forEach((s) => s.close()));
- }), completion(equals([HttpStatus.OK, HttpStatus.OK])));
- });
-
- group('domain', () {
- test('specific-sub-domain', () {
- expect(HttpServer.bind('localhost', 0).then((server) {
- var virHost = new VirtualHost(server);
- expect(virHost.addHost('my1.host.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- expect(virHost.addHost('my2.host.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- expect(virHost.addHost('my3.host.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- return Future.wait([
- getStatusCode(server.port, '/', host: 'my1.host.com'),
- getStatusCode(server.port, '/', host: 'my2.host.com'),
- getStatusCode(server.port, '/', host: 'my3.host.com')])
- .whenComplete(server.close);
- }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
- });
-
- test('wildcard-sub-domain', () {
- expect(HttpServer.bind('localhost', 0).then((server) {
- var virHost = new VirtualHost(server);
- expect(virHost.addHost('*.host1.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- expect(virHost.addHost('*.host2.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- expect(virHost.addHost('*.host3.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- return Future.wait([
- getStatusCode(server.port, '/', host: 'my.host1.com'),
- getStatusCode(server.port, '/', host: 'my.host2.com'),
- getStatusCode(server.port, '/', host: 'my.host3.com')])
- .whenComplete(server.close);
- }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
- });
-
- test('mix-sub-domain', () {
- expect(HttpServer.bind('localhost', 0).then((server) {
- var virHost = new VirtualHost(server);
- expect(virHost.addHost('my1.host.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- expect(virHost.addHost('my2.host.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- expect(virHost.addHost('*.host.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- return Future.wait([
- getStatusCode(server.port, '/', host: 'my1.host.com'),
- getStatusCode(server.port, '/', host: 'my2.host.com'),
- getStatusCode(server.port, '/', host: 'my3.host.com')])
- .whenComplete(server.close);
- }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
- });
-
-
- test('wildcard', () {
- expect(HttpServer.bind('localhost', 0).then((server) {
- var virHost = new VirtualHost(server);
- expect(virHost.addHost('*').first.then((request) {
- request.response.close();
- }), completion(isNull));
- expect(virHost.addHost('*.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- expect(virHost.addHost('*.host.com').first.then((request) {
- request.response.close();
- }), completion(isNull));
- return Future.wait([
- getStatusCode(server.port, '/', host: 'some.host.dk'),
- getStatusCode(server.port, '/', host: 'my.host2.com'),
- getStatusCode(server.port, '/', host: 'long.sub.of.host.com')])
- .whenComplete(server.close);
- }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
- });
-
- test('duplicate-domain', () {
- var virHost = new VirtualHost();
- virHost.addHost('my1.host.com');
- expect(() => (virHost.addHost('my1.host.com')), throwsArgumentError);
- virHost.addHost('*.host.com');
- expect(() => (virHost.addHost('*.host.com')), throwsArgumentError);
- virHost.addHost('my2.host.com');
- virHost.addHost('my3.host.com');
- virHost.addHost('*.com');
- virHost.addHost('*');
- expect(() => (virHost.addHost('*')), throwsArgumentError);
- });
- });
-}
-
diff --git a/pkg/js_ast/lib/src/nodes.dart b/pkg/js_ast/lib/src/nodes.dart
index cc758ba..4fe35e5 100644
--- a/pkg/js_ast/lib/src/nodes.dart
+++ b/pkg/js_ast/lib/src/nodes.dart
@@ -260,8 +260,8 @@
class If extends Statement {
final Expression condition;
- final Node then;
- final Node otherwise;
+ final Statement then;
+ final Statement otherwise;
If(this.condition, this.then, this.otherwise);
If.noElse(this.condition, this.then) : this.otherwise = new EmptyStatement();
@@ -663,7 +663,10 @@
Expression target;
List<Expression> arguments;
- Call(this.target, this.arguments);
+ Call(this.target, this.arguments,
+ {JavaScriptNodeSourceInformation sourceInformation}) {
+ this._sourceInformation = sourceInformation;
+ }
accept(NodeVisitor visitor) => visitor.visitCall(this);
diff --git a/pkg/js_ast/lib/src/printer.dart b/pkg/js_ast/lib/src/printer.dart
index b1aceba..f362be5 100644
--- a/pkg/js_ast/lib/src/printer.dart
+++ b/pkg/js_ast/lib/src/printer.dart
@@ -204,10 +204,20 @@
visitAll(program.body);
}
- bool blockBody(Node body, {bool needsSeparation, bool needsNewline}) {
+ Statement unwrapBlockIfSingleStatement(Statement body) {
+ Statement result = body;
+ while (result is Block) {
+ Block block = result;
+ if (block.statements.length != 1) break;
+ result = block.statements.single;
+ }
+ return result;
+ }
+
+ bool blockBody(Statement body, {bool needsSeparation, bool needsNewline}) {
if (body is Block) {
spaceOut();
- blockOut(body, false, needsNewline);
+ blockOut(body, shouldIndent: false, needsNewline: needsNewline);
return true;
}
if (shouldCompressOutput && needsSeparation) {
@@ -234,7 +244,7 @@
}
}
- void blockOut(Block node, bool shouldIndent, bool needsNewline) {
+ void blockOut(Block node, {bool shouldIndent, bool needsNewline}) {
if (shouldIndent) indent();
context.enterNode(node);
out("{");
@@ -249,7 +259,7 @@
}
visitBlock(Block block) {
- blockOut(block, true, true);
+ blockOut(block, shouldIndent: true, needsNewline: true);
}
visitExpressionStatement(ExpressionStatement expressionStatement) {
@@ -264,15 +274,15 @@
}
void ifOut(If node, bool shouldIndent) {
- Node then = node.then;
- Node elsePart = node.otherwise;
+ Statement then = unwrapBlockIfSingleStatement(node.then);
+ Statement elsePart = node.otherwise;
bool hasElse = node.hasElse;
// Handle dangling elses and a work-around for Android 4.0 stock browser.
// Android 4.0 requires braces for a single do-while in the `then` branch.
// See issue 10923.
if (hasElse) {
- bool needsBraces = node.then.accept(danglingElseVisitor) || then is Do;
+ bool needsBraces = then.accept(danglingElseVisitor) || then is Do;
if (needsBraces) {
then = new Block(<Statement>[then]);
}
@@ -297,7 +307,8 @@
pendingSpace = true;
ifOut(elsePart, false);
} else {
- blockBody(elsePart, needsSeparation: true, needsNewline: true);
+ blockBody(unwrapBlockIfSingleStatement(elsePart),
+ needsSeparation: true, needsNewline: true);
}
}
}
@@ -327,7 +338,8 @@
newInForInit: false, newAtStatementBegin: false);
}
out(")");
- blockBody(loop.body, needsSeparation: false, needsNewline: true);
+ blockBody(unwrapBlockIfSingleStatement(loop.body),
+ needsSeparation: false, needsNewline: true);
}
visitForIn(ForIn loop) {
@@ -341,7 +353,8 @@
visitNestedExpression(loop.object, EXPRESSION,
newInForInit: false, newAtStatementBegin: false);
out(")");
- blockBody(loop.body, needsSeparation: false, needsNewline: true);
+ blockBody(unwrapBlockIfSingleStatement(loop.body),
+ needsSeparation: false, needsNewline: true);
}
visitWhile(While loop) {
@@ -351,12 +364,14 @@
visitNestedExpression(loop.condition, EXPRESSION,
newInForInit: false, newAtStatementBegin: false);
out(")");
- blockBody(loop.body, needsSeparation: false, needsNewline: true);
+ blockBody(unwrapBlockIfSingleStatement(loop.body),
+ needsSeparation: false, needsNewline: true);
}
visitDo(Do loop) {
outIndent("do");
- if (blockBody(loop.body, needsSeparation: true, needsNewline: false)) {
+ if (blockBody(unwrapBlockIfSingleStatement(loop.body),
+ needsSeparation: true, needsNewline: false)) {
spaceOut();
} else {
indent();
@@ -444,7 +459,7 @@
visitNestedExpression(node.declaration, EXPRESSION,
newInForInit: false, newAtStatementBegin: false);
out(")");
- blockBody(node.body, needsSeparation: false, needsNewline: true);
+ blockBody(node.body, needsSeparation: false, needsNewline: false);
}
visitSwitch(Switch node) {
@@ -485,8 +500,18 @@
}
visitLabeledStatement(LabeledStatement node) {
+ Statement body = unwrapBlockIfSingleStatement(node.body);
+ // `label: break label;`
+ // Does not work on IE. The statement is a nop, so replace it by an empty
+ // statement.
+ // See:
+ // https://connect.microsoft.com/IE/feedback/details/891889/parser-bugs
+ if (body is Break && body.targetLabel == node.label) {
+ visit(new EmptyStatement());
+ return;
+ }
outIndent("${node.label}:");
- blockBody(node.body, needsSeparation: false, needsNewline: true);
+ blockBody(body, needsSeparation: false, needsNewline: true);
}
void functionOut(Fun fun, Node name, VarCollector vars) {
diff --git a/pkg/mime/CHANGELOG.md b/pkg/mime/CHANGELOG.md
deleted file mode 100644
index 98abd3a..0000000
--- a/pkg/mime/CHANGELOG.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# 0.9.3
-
-* Fixed erroneous behavior for listening and when pausing/resuming
- stream of parts.
-
-# 0.9.2
-
-* Fixed erroneous behavior when pausing/canceling stream of parts but already
- listened to one part.
-
-# 0.9.1
-
-* Handle parsing of MIME multipart content with no parts.
diff --git a/pkg/mime/LICENSE b/pkg/mime/LICENSE
deleted file mode 100644
index 5c60afe..0000000
--- a/pkg/mime/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright 2014, the Dart project authors. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of Google Inc. nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/mime/README.md b/pkg/mime/README.md
deleted file mode 100644
index dd69358..0000000
--- a/pkg/mime/README.md
+++ /dev/null
@@ -1,48 +0,0 @@
-#MIME type package
-
-Package for working with MIME type definitions and for processing
-streams of MIME multipart media types.
-
-##Determining the MIME type for a file
-
-The `MimeTypeResolver` class can be used to determine the MIME type of
-a file. It supports both using the extension of the file name and
-looking at magic bytes from the begining of the file.
-
-There is a builtin instance of `MimeTypeResolver` accessible through
-the top level function `lookupMimeType`. This builtin instance has
-the most common file name extensions and magic bytes registered.
-
- print(lookupMimeType('test.html')); // Will print text/html
- print(lookupMimeType('test', [0xFF, 0xD8])); // Will print image/jpeg
- print(lookupMimeType('test.html', [0xFF, 0xD8])); // Will print image/jpeg
-
-You can build you own resolver by creating an instance of
-`MimeTypeResolver` and adding file name extensions and magic bytes
-using `addExtension` and `addMagicNumber`.
-
-##Processing MIME multipart media types
-
-The class `MimeMultipartTransformer` is used to process a `Stream` of
-bytes encoded using a MIME multipart media types encoding. The
-transformer provides a new `Stream` of `MimeMultipart` objects each of
-which have the headers and the content of each part. The content of a
-part is provided as a stream of bytes.
-
-Below is an example showing how to process an HTTP request and print
-the length of the content of each part.
-
- // HTTP request with content type multipart/form-data.
- HttpRequest request = ...;
- // Determine the boundary form the content type header
- String boundary = request.headers.contentType.parameters['boundary'];
-
- // Process the body just calculating the length of each part.
- request.transform(new MimeMultipartTransformer(boundary))
- .map((part) => part.fold(0, (p, d) => p + d))
- .listen((length) => print('Part with length $length'));
-
-Take a look at the `HttpBodyHandler` in the [http_server][1] package for
-handling different content types in a HTTP request.
-
-[1]: https://pub.dartlang.org/packages/http_server
diff --git a/pkg/mime/lib/mime.dart b/pkg/mime/lib/mime.dart
deleted file mode 100644
index dce6774..0000000
--- a/pkg/mime/lib/mime.dart
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * Help for working with file format identifiers
- * such as `text/html` and `image/png`.
- *
- * More details, including a list of types, are in the Wikipedia article
- * [Internet media type](http://en.wikipedia.org/wiki/Internet_media_type).
- * For information on installing and importing this library, see the
- * [mime package on pub.dartlang.org]
- * (http://pub.dartlang.org/packages/mime).
- */
-library mime;
-
-export 'src/mime_multipart_transformer.dart';
-export 'src/mime_shared.dart';
-export 'src/mime_type.dart';
diff --git a/pkg/mime/lib/src/bound_multipart_stream.dart b/pkg/mime/lib/src/bound_multipart_stream.dart
deleted file mode 100644
index ab06dab..0000000
--- a/pkg/mime/lib/src/bound_multipart_stream.dart
+++ /dev/null
@@ -1,395 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-library mime.bound_multipart_stream;
-
-import 'dart:async';
-import 'dart:convert';
-
-import 'mime_shared.dart';
-import 'char_code.dart';
-
-// Bytes for '()<>@,;:\\"/[]?={} \t'.
-const _SEPARATORS = const [40, 41, 60, 62, 64, 44, 59, 58, 92, 34, 47, 91, 93,
- 63, 61, 123, 125, 32, 9];
-
-bool _isTokenChar(int byte) {
- return byte > 31 && byte < 128 && _SEPARATORS.indexOf(byte) == -1;
-}
-
-int _toLowerCase(int byte) {
- const delta = CharCode.LOWER_A - CharCode.UPPER_A;
- return (CharCode.UPPER_A <= byte && byte <= CharCode.UPPER_Z) ?
- byte + delta : byte;
-}
-
-void _expectByteValue(int val1, int val2) {
- if (val1 != val2) {
- throw new MimeMultipartException("Failed to parse multipart mime 1");
- }
-}
-
-void _expectWhitespace(int byte) {
- if (byte != CharCode.SP && byte != CharCode.HT) {
- throw new MimeMultipartException("Failed to parse multipart mime 2");
- }
-}
-
-class _MimeMultipart extends MimeMultipart {
- final Map<String, String> headers;
- final Stream<List<int>> _stream;
-
- _MimeMultipart(this.headers, this._stream);
-
- StreamSubscription<List<int>> listen(void onData(List<int> data),
- {void onDone(),
- Function onError,
- bool cancelOnError}) {
- return _stream.listen(onData,
- onDone: onDone,
- onError: onError,
- cancelOnError: cancelOnError);
- }
-}
-
-class BoundMultipartStream {
- static const int _START = 0;
- static const int _BOUNDARY_ENDING = 1;
- static const int _BOUNDARY_END = 2;
- static const int _HEADER_START = 3;
- static const int _HEADER_FIELD = 4;
- static const int _HEADER_VALUE_START = 5;
- static const int _HEADER_VALUE = 6;
- static const int _HEADER_VALUE_FOLDING_OR_ENDING = 7;
- static const int _HEADER_VALUE_FOLD_OR_END = 8;
- static const int _HEADER_ENDING = 9;
- static const int _CONTENT = 10;
- static const int _LAST_BOUNDARY_DASH2 = 11;
- static const int _LAST_BOUNDARY_ENDING = 12;
- static const int _LAST_BOUNDARY_END = 13;
- static const int _DONE = 14;
- static const int _FAIL = 15;
-
- final List<int> _boundary;
- final List<int> _headerField = [];
- final List<int> _headerValue = [];
-
- // The following states belong to `_controller`, state changes will not be
- // immediately acted upon but rather only after the current
- // `_multipartController` is done.
- static const int _CONTROLLER_STATE_IDLE = 0;
- static const int _CONTROLLER_STATE_ACTIVE = 1;
- static const int _CONTROLLER_STATE_PAUSED = 2;
- static const int _CONTROLLER_STATE_CANCELED = 3;
-
- int _controllerState = _CONTROLLER_STATE_IDLE;
-
- StreamController _controller;
-
- Stream<MimeMultipart> get stream => _controller.stream;
-
- StreamSubscription _subscription;
-
- StreamController _multipartController;
- Map<String, String> _headers;
-
- int _state = _START;
- int _boundaryIndex = 2;
-
- // Current index in the data buffer. If index is negative then it
- // is the index into the artificial prefix of the boundary string.
- int _index;
- List<int> _buffer;
-
- BoundMultipartStream(this._boundary, Stream<List<int>> stream) {
- _controller = new StreamController(
- sync: true,
- onPause: _pauseStream,
- onResume: _resumeStream,
- onCancel: () {
- _controllerState = _CONTROLLER_STATE_CANCELED;
- _tryPropagateControllerState();
- },
- onListen: () {
- _controllerState = _CONTROLLER_STATE_ACTIVE;
- _subscription = stream.listen(
- (data) {
- assert(_buffer == null);
- _subscription.pause();
- _buffer = data;
- _index = 0;
- _parse();
- },
- onDone: () {
- if (_state != _DONE) {
- _controller.addError(
- new MimeMultipartException("Bad multipart ending"));
- }
- _controller.close();
- },
- onError: _controller.addError);
- });
- }
-
- void _resumeStream() {
- assert (_controllerState == _CONTROLLER_STATE_PAUSED);
- _controllerState = _CONTROLLER_STATE_ACTIVE;
- _tryPropagateControllerState();
- }
-
- void _pauseStream() {
- _controllerState = _CONTROLLER_STATE_PAUSED;
- _tryPropagateControllerState();
- }
-
- void _tryPropagateControllerState() {
- if (_multipartController == null) {
- switch (_controllerState) {
- case _CONTROLLER_STATE_ACTIVE:
- if (_subscription.isPaused) _subscription.resume();
- break;
- case _CONTROLLER_STATE_PAUSED:
- if (!_subscription.isPaused) _subscription.pause();
- break;
- case _CONTROLLER_STATE_CANCELED:
- _subscription.cancel();
- break;
- default:
- throw new StateError("This code should never be reached.");
- }
- }
- }
-
- void _parse() {
- // Number of boundary bytes to artificially place before the supplied data.
- int boundaryPrefix = 0;
- // Position where content starts. Will be null if no known content
- // start exists. Will be negative of the content starts in the
- // boundary prefix. Will be zero or position if the content starts
- // in the current buffer.
- int contentStartIndex;
-
- // Function to report content data for the current part. The data
- // reported is from the current content start index up til the
- // current index. As the data can be artificially prefixed with a
- // prefix of the boundary both the content start index and index
- // can be negative.
- void reportData() {
- if (contentStartIndex < 0) {
- var contentLength = boundaryPrefix + _index - _boundaryIndex;
- if (contentLength <= boundaryPrefix) {
- _multipartController.add(
- _boundary.sublist(0, contentLength));
- } else {
- _multipartController.add(
- _boundary.sublist(0, boundaryPrefix));
- _multipartController.add(
- _buffer.sublist(0, contentLength - boundaryPrefix));
- }
- } else {
- var contentEndIndex = _index - _boundaryIndex;
- _multipartController.add(
- _buffer.sublist(contentStartIndex, contentEndIndex));
- }
- }
-
- if (_state == _CONTENT && _boundaryIndex == 0) {
- contentStartIndex = 0;
- } else {
- contentStartIndex = null;
- }
- // The data to parse might be "artificially" prefixed with a
- // partial match of the boundary.
- boundaryPrefix = _boundaryIndex;
-
- while ((_index < _buffer.length) && _state != _FAIL && _state != _DONE) {
- int byte;
- if (_index < 0) {
- byte = _boundary[boundaryPrefix + _index];
- } else {
- byte = _buffer[_index];
- }
- switch (_state) {
- case _START:
- if (byte == _boundary[_boundaryIndex]) {
- _boundaryIndex++;
- if (_boundaryIndex == _boundary.length) {
- _state = _BOUNDARY_ENDING;
- _boundaryIndex = 0;
- }
- } else {
- // Restart matching of the boundary.
- _index = _index - _boundaryIndex;
- _boundaryIndex = 0;
- }
- break;
-
- case _BOUNDARY_ENDING:
- if (byte == CharCode.CR) {
- _state = _BOUNDARY_END;
- } else if (byte == CharCode.DASH) {
- _state = _LAST_BOUNDARY_DASH2;
- } else {
- _expectWhitespace(byte);
- }
- break;
-
- case _BOUNDARY_END:
- _expectByteValue(byte, CharCode.LF);
- if (_multipartController != null) {
- _multipartController.close();
- _multipartController = null;
- _tryPropagateControllerState();
- }
- _state = _HEADER_START;
- break;
-
- case _HEADER_START:
- _headers = new Map<String, String>();
- if (byte == CharCode.CR) {
- _state = _HEADER_ENDING;
- } else {
- // Start of new header field.
- _headerField.add(_toLowerCase(byte));
- _state = _HEADER_FIELD;
- }
- break;
-
- case _HEADER_FIELD:
- if (byte == CharCode.COLON) {
- _state = _HEADER_VALUE_START;
- } else {
- if (!_isTokenChar(byte)) {
- throw new MimeMultipartException("Invalid header field name");
- }
- _headerField.add(_toLowerCase(byte));
- }
- break;
-
- case _HEADER_VALUE_START:
- if (byte == CharCode.CR) {
- _state = _HEADER_VALUE_FOLDING_OR_ENDING;
- } else if (byte != CharCode.SP && byte != CharCode.HT) {
- // Start of new header value.
- _headerValue.add(byte);
- _state = _HEADER_VALUE;
- }
- break;
-
- case _HEADER_VALUE:
- if (byte == CharCode.CR) {
- _state = _HEADER_VALUE_FOLDING_OR_ENDING;
- } else {
- _headerValue.add(byte);
- }
- break;
-
- case _HEADER_VALUE_FOLDING_OR_ENDING:
- _expectByteValue(byte, CharCode.LF);
- _state = _HEADER_VALUE_FOLD_OR_END;
- break;
-
- case _HEADER_VALUE_FOLD_OR_END:
- if (byte == CharCode.SP || byte == CharCode.HT) {
- _state = _HEADER_VALUE_START;
- } else {
- String headerField = UTF8.decode(_headerField);
- String headerValue = UTF8.decode(_headerValue);
- _headers[headerField.toLowerCase()] = headerValue;
- _headerField.clear();
- _headerValue.clear();
- if (byte == CharCode.CR) {
- _state = _HEADER_ENDING;
- } else {
- // Start of new header field.
- _headerField.add(_toLowerCase(byte));
- _state = _HEADER_FIELD;
- }
- }
- break;
-
- case _HEADER_ENDING:
- _expectByteValue(byte, CharCode.LF);
- _multipartController = new StreamController(
- sync: true,
- onListen: () {
- if (_subscription.isPaused) _subscription.resume();
- },
- onPause: _subscription.pause,
- onResume: _subscription.resume);
- _controller.add(
- new _MimeMultipart(_headers, _multipartController.stream));
- _headers = null;
- _state = _CONTENT;
- contentStartIndex = _index + 1;
- break;
-
- case _CONTENT:
- if (byte == _boundary[_boundaryIndex]) {
- _boundaryIndex++;
- if (_boundaryIndex == _boundary.length) {
- if (contentStartIndex != null) {
- _index++;
- reportData();
- _index--;
- }
- _multipartController.close();
- _multipartController = null;
- _tryPropagateControllerState();
- _boundaryIndex = 0;
- _state = _BOUNDARY_ENDING;
- }
- } else {
- // Restart matching of the boundary.
- _index = _index - _boundaryIndex;
- if (contentStartIndex == null) contentStartIndex = _index;
- _boundaryIndex = 0;
- }
- break;
-
- case _LAST_BOUNDARY_DASH2:
- _expectByteValue(byte, CharCode.DASH);
- _state = _LAST_BOUNDARY_ENDING;
- break;
-
- case _LAST_BOUNDARY_ENDING:
- if (byte == CharCode.CR) {
- _state = _LAST_BOUNDARY_END;
- } else {
- _expectWhitespace(byte);
- }
- break;
-
- case _LAST_BOUNDARY_END:
- _expectByteValue(byte, CharCode.LF);
- if (_multipartController != null) {
- _multipartController.close();
- _multipartController = null;
- _tryPropagateControllerState();
- }
- _state = _DONE;
- break;
-
- default:
- // Should be unreachable.
- assert(false);
- break;
- }
-
- // Move to the next byte.
- _index++;
- }
-
- // Report any known content.
- if (_state == _CONTENT && contentStartIndex != null) {
- reportData();
- }
-
- // Resume if at end.
- if (_index == _buffer.length) {
- _buffer = null;
- _index = null;
- _subscription.resume();
- }
- }
-}
diff --git a/pkg/mime/lib/src/char_code.dart b/pkg/mime/lib/src/char_code.dart
deleted file mode 100644
index f455e68..0000000
--- a/pkg/mime/lib/src/char_code.dart
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-library mime.char_code;
-
-class CharCode {
- static const int HT = 9;
- static const int LF = 10;
- static const int CR = 13;
- static const int SP = 32;
- static const int DASH = 45;
- static const int COLON = 58;
- static const int UPPER_A = 65;
- static const int UPPER_Z = 90;
- static const int LOWER_A = 97;
-}
diff --git a/pkg/mime/lib/src/default_extension_map.dart b/pkg/mime/lib/src/default_extension_map.dart
deleted file mode 100644
index ae0d7df..0000000
--- a/pkg/mime/lib/src/default_extension_map.dart
+++ /dev/null
@@ -1,990 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library mime.extension_map;
-
-// TODO(ajohnsen): Use const map once Issue 7559 is fixed.
-final Map<String, String> defaultExtensionMap = <String, String>{
-'123':'application/vnd.lotus-1-2-3',
-'3dml':'text/vnd.in3d.3dml',
-'3ds':'image/x-3ds',
-'3g2':'video/3gpp2',
-'3gp':'video/3gpp',
-'7z':'application/x-7z-compressed',
-'aab':'application/x-authorware-bin',
-'aac':'audio/x-aac',
-'aam':'application/x-authorware-map',
-'aas':'application/x-authorware-seg',
-'abw':'application/x-abiword',
-'ac':'application/pkix-attr-cert',
-'acc':'application/vnd.americandynamics.acc',
-'ace':'application/x-ace-compressed',
-'acu':'application/vnd.acucobol',
-'acutc':'application/vnd.acucorp',
-'adp':'audio/adpcm',
-'aep':'application/vnd.audiograph',
-'afm':'application/x-font-type1',
-'afp':'application/vnd.ibm.modcap',
-'ahead':'application/vnd.ahead.space',
-'ai':'application/postscript',
-'aif':'audio/x-aiff',
-'aifc':'audio/x-aiff',
-'aiff':'audio/x-aiff',
-'air':'application/vnd.adobe.air-application-installer-package+zip',
-'ait':'application/vnd.dvb.ait',
-'ami':'application/vnd.amiga.ami',
-'apk':'application/vnd.android.package-archive',
-'appcache':'text/cache-manifest',
-'application':'application/x-ms-application',
-'apr':'application/vnd.lotus-approach',
-'arc':'application/x-freearc',
-'asc':'application/pgp-signature',
-'asf':'video/x-ms-asf',
-'asm':'text/x-asm',
-'aso':'application/vnd.accpac.simply.aso',
-'asx':'video/x-ms-asf',
-'atc':'application/vnd.acucorp',
-'atom':'application/atom+xml',
-'atomcat':'application/atomcat+xml',
-'atomsvc':'application/atomsvc+xml',
-'atx':'application/vnd.antix.game-component',
-'au':'audio/basic',
-'avi':'video/x-msvideo',
-'aw':'application/applixware',
-'azf':'application/vnd.airzip.filesecure.azf',
-'azs':'application/vnd.airzip.filesecure.azs',
-'azw':'application/vnd.amazon.ebook',
-'bat':'application/x-msdownload',
-'bcpio':'application/x-bcpio',
-'bdf':'application/x-font-bdf',
-'bdm':'application/vnd.syncml.dm+wbxml',
-'bed':'application/vnd.realvnc.bed',
-'bh2':'application/vnd.fujitsu.oasysprs',
-'bin':'application/octet-stream',
-'blb':'application/x-blorb',
-'blorb':'application/x-blorb',
-'bmi':'application/vnd.bmi',
-'bmp':'image/bmp',
-'book':'application/vnd.framemaker',
-'box':'application/vnd.previewsystems.box',
-'boz':'application/x-bzip2',
-'bpk':'application/octet-stream',
-'btif':'image/prs.btif',
-'bz':'application/x-bzip',
-'bz2':'application/x-bzip2',
-'c':'text/x-c',
-'c11amc':'application/vnd.cluetrust.cartomobile-config',
-'c11amz':'application/vnd.cluetrust.cartomobile-config-pkg',
-'c4d':'application/vnd.clonk.c4group',
-'c4f':'application/vnd.clonk.c4group',
-'c4g':'application/vnd.clonk.c4group',
-'c4p':'application/vnd.clonk.c4group',
-'c4u':'application/vnd.clonk.c4group',
-'cab':'application/vnd.ms-cab-compressed',
-'caf':'audio/x-caf',
-'cap':'application/vnd.tcpdump.pcap',
-'car':'application/vnd.curl.car',
-'cat':'application/vnd.ms-pki.seccat',
-'cb7':'application/x-cbr',
-'cba':'application/x-cbr',
-'cbr':'application/x-cbr',
-'cbt':'application/x-cbr',
-'cbz':'application/x-cbr',
-'cc':'text/x-c',
-'cct':'application/x-director',
-'ccxml':'application/ccxml+xml',
-'cdbcmsg':'application/vnd.contact.cmsg',
-'cdf':'application/x-netcdf',
-'cdkey':'application/vnd.mediastation.cdkey',
-'cdmia':'application/cdmi-capability',
-'cdmic':'application/cdmi-container',
-'cdmid':'application/cdmi-domain',
-'cdmio':'application/cdmi-object',
-'cdmiq':'application/cdmi-queue',
-'cdx':'chemical/x-cdx',
-'cdxml':'application/vnd.chemdraw+xml',
-'cdy':'application/vnd.cinderella',
-'cer':'application/pkix-cert',
-'cfs':'application/x-cfs-compressed',
-'cgm':'image/cgm',
-'chat':'application/x-chat',
-'chm':'application/vnd.ms-htmlhelp',
-'chrt':'application/vnd.kde.kchart',
-'cif':'chemical/x-cif',
-'cii':'application/vnd.anser-web-certificate-issue-initiation',
-'cil':'application/vnd.ms-artgalry',
-'cla':'application/vnd.claymore',
-'class':'application/java-vm',
-'clkk':'application/vnd.crick.clicker.keyboard',
-'clkp':'application/vnd.crick.clicker.palette',
-'clkt':'application/vnd.crick.clicker.template',
-'clkw':'application/vnd.crick.clicker.wordbank',
-'clkx':'application/vnd.crick.clicker',
-'clp':'application/x-msclip',
-'cmc':'application/vnd.cosmocaller',
-'cmdf':'chemical/x-cmdf',
-'cml':'chemical/x-cml',
-'cmp':'application/vnd.yellowriver-custom-menu',
-'cmx':'image/x-cmx',
-'cod':'application/vnd.rim.cod',
-'com':'application/x-msdownload',
-'conf':'text/plain',
-'cpio':'application/x-cpio',
-'cpp':'text/x-c',
-'cpt':'application/mac-compactpro',
-'crd':'application/x-mscardfile',
-'crl':'application/pkix-crl',
-'crt':'application/x-x509-ca-cert',
-'cryptonote':'application/vnd.rig.cryptonote',
-'csh':'application/x-csh',
-'csml':'chemical/x-csml',
-'csp':'application/vnd.commonspace',
-'css':'text/css',
-'cst':'application/x-director',
-'csv':'text/csv',
-'cu':'application/cu-seeme',
-'curl':'text/vnd.curl',
-'cww':'application/prs.cww',
-'cxt':'application/x-director',
-'cxx':'text/x-c',
-'dae':'model/vnd.collada+xml',
-'daf':'application/vnd.mobius.daf',
-'dart':'application/dart',
-'dataless':'application/vnd.fdsn.seed',
-'davmount':'application/davmount+xml',
-'dbk':'application/docbook+xml',
-'dcr':'application/x-director',
-'dcurl':'text/vnd.curl.dcurl',
-'dd2':'application/vnd.oma.dd2+xml',
-'ddd':'application/vnd.fujixerox.ddd',
-'deb':'application/x-debian-package',
-'def':'text/plain',
-'deploy':'application/octet-stream',
-'der':'application/x-x509-ca-cert',
-'dfac':'application/vnd.dreamfactory',
-'dgc':'application/x-dgc-compressed',
-'dic':'text/x-c',
-'dir':'application/x-director',
-'dis':'application/vnd.mobius.dis',
-'dist':'application/octet-stream',
-'distz':'application/octet-stream',
-'djv':'image/vnd.djvu',
-'djvu':'image/vnd.djvu',
-'dll':'application/x-msdownload',
-'dmg':'application/x-apple-diskimage',
-'dmp':'application/vnd.tcpdump.pcap',
-'dms':'application/octet-stream',
-'dna':'application/vnd.dna',
-'doc':'application/msword',
-'docm':'application/vnd.ms-word.document.macroenabled.12',
-'docx':'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
-'dot':'application/msword',
-'dotm':'application/vnd.ms-word.template.macroenabled.12',
-'dotx':'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
-'dp':'application/vnd.osgi.dp',
-'dpg':'application/vnd.dpgraph',
-'dra':'audio/vnd.dra',
-'dsc':'text/prs.lines.tag',
-'dssc':'application/dssc+der',
-'dtb':'application/x-dtbook+xml',
-'dtd':'application/xml-dtd',
-'dts':'audio/vnd.dts',
-'dtshd':'audio/vnd.dts.hd',
-'dump':'application/octet-stream',
-'dvb':'video/vnd.dvb.file',
-'dvi':'application/x-dvi',
-'dwf':'model/vnd.dwf',
-'dwg':'image/vnd.dwg',
-'dxf':'image/vnd.dxf',
-'dxp':'application/vnd.spotfire.dxp',
-'dxr':'application/x-director',
-'ecelp4800':'audio/vnd.nuera.ecelp4800',
-'ecelp7470':'audio/vnd.nuera.ecelp7470',
-'ecelp9600':'audio/vnd.nuera.ecelp9600',
-'ecma':'application/ecmascript',
-'edm':'application/vnd.novadigm.edm',
-'edx':'application/vnd.novadigm.edx',
-'efif':'application/vnd.picsel',
-'ei6':'application/vnd.pg.osasli',
-'elc':'application/octet-stream',
-'emf':'application/x-msmetafile',
-'eml':'message/rfc822',
-'emma':'application/emma+xml',
-'emz':'application/x-msmetafile',
-'eol':'audio/vnd.digital-winds',
-'eot':'application/vnd.ms-fontobject',
-'eps':'application/postscript',
-'epub':'application/epub+zip',
-'es3':'application/vnd.eszigno3+xml',
-'esa':'application/vnd.osgi.subsystem',
-'esf':'application/vnd.epson.esf',
-'et3':'application/vnd.eszigno3+xml',
-'etx':'text/x-setext',
-'eva':'application/x-eva',
-'evy':'application/x-envoy',
-'exe':'application/x-msdownload',
-'exi':'application/exi',
-'ext':'application/vnd.novadigm.ext',
-'ez':'application/andrew-inset',
-'ez2':'application/vnd.ezpix-album',
-'ez3':'application/vnd.ezpix-package',
-'f':'text/x-fortran',
-'f4v':'video/x-f4v',
-'f77':'text/x-fortran',
-'f90':'text/x-fortran',
-'fbs':'image/vnd.fastbidsheet',
-'fcdt':'application/vnd.adobe.formscentral.fcdt',
-'fcs':'application/vnd.isac.fcs',
-'fdf':'application/vnd.fdf',
-'fe_launch':'application/vnd.denovo.fcselayout-link',
-'fg5':'application/vnd.fujitsu.oasysgp',
-'fgd':'application/x-director',
-'fh':'image/x-freehand',
-'fh4':'image/x-freehand',
-'fh5':'image/x-freehand',
-'fh7':'image/x-freehand',
-'fhc':'image/x-freehand',
-'fig':'application/x-xfig',
-'flac':'audio/x-flac',
-'fli':'video/x-fli',
-'flo':'application/vnd.micrografx.flo',
-'flv':'video/x-flv',
-'flw':'application/vnd.kde.kivio',
-'flx':'text/vnd.fmi.flexstor',
-'fly':'text/vnd.fly',
-'fm':'application/vnd.framemaker',
-'fnc':'application/vnd.frogans.fnc',
-'for':'text/x-fortran',
-'fpx':'image/vnd.fpx',
-'frame':'application/vnd.framemaker',
-'fsc':'application/vnd.fsc.weblaunch',
-'fst':'image/vnd.fst',
-'ftc':'application/vnd.fluxtime.clip',
-'fti':'application/vnd.anser-web-funds-transfer-initiation',
-'fvt':'video/vnd.fvt',
-'fxp':'application/vnd.adobe.fxp',
-'fxpl':'application/vnd.adobe.fxp',
-'fzs':'application/vnd.fuzzysheet',
-'g2w':'application/vnd.geoplan',
-'g3':'image/g3fax',
-'g3w':'application/vnd.geospace',
-'gac':'application/vnd.groove-account',
-'gam':'application/x-tads',
-'gbr':'application/rpki-ghostbusters',
-'gca':'application/x-gca-compressed',
-'gdl':'model/vnd.gdl',
-'geo':'application/vnd.dynageo',
-'gex':'application/vnd.geometry-explorer',
-'ggb':'application/vnd.geogebra.file',
-'ggt':'application/vnd.geogebra.tool',
-'ghf':'application/vnd.groove-help',
-'gif':'image/gif',
-'gim':'application/vnd.groove-identity-message',
-'gml':'application/gml+xml',
-'gmx':'application/vnd.gmx',
-'gnumeric':'application/x-gnumeric',
-'gph':'application/vnd.flographit',
-'gpx':'application/gpx+xml',
-'gqf':'application/vnd.grafeq',
-'gqs':'application/vnd.grafeq',
-'gram':'application/srgs',
-'gramps':'application/x-gramps-xml',
-'gre':'application/vnd.geometry-explorer',
-'grv':'application/vnd.groove-injector',
-'grxml':'application/srgs+xml',
-'gsf':'application/x-font-ghostscript',
-'gtar':'application/x-gtar',
-'gtm':'application/vnd.groove-tool-message',
-'gtw':'model/vnd.gtw',
-'gv':'text/vnd.graphviz',
-'gxf':'application/gxf',
-'gxt':'application/vnd.geonext',
-'h':'text/x-c',
-'h261':'video/h261',
-'h263':'video/h263',
-'h264':'video/h264',
-'hal':'application/vnd.hal+xml',
-'hbci':'application/vnd.hbci',
-'hdf':'application/x-hdf',
-'hh':'text/x-c',
-'hlp':'application/winhlp',
-'hpgl':'application/vnd.hp-hpgl',
-'hpid':'application/vnd.hp-hpid',
-'hps':'application/vnd.hp-hps',
-'hqx':'application/mac-binhex40',
-'htke':'application/vnd.kenameaapp',
-'htm':'text/html',
-'html':'text/html',
-'hvd':'application/vnd.yamaha.hv-dic',
-'hvp':'application/vnd.yamaha.hv-voice',
-'hvs':'application/vnd.yamaha.hv-script',
-'i2g':'application/vnd.intergeo',
-'icc':'application/vnd.iccprofile',
-'ice':'x-conference/x-cooltalk',
-'icm':'application/vnd.iccprofile',
-'ico':'image/x-icon',
-'ics':'text/calendar',
-'ief':'image/ief',
-'ifb':'text/calendar',
-'ifm':'application/vnd.shana.informed.formdata',
-'iges':'model/iges',
-'igl':'application/vnd.igloader',
-'igm':'application/vnd.insors.igm',
-'igs':'model/iges',
-'igx':'application/vnd.micrografx.igx',
-'iif':'application/vnd.shana.informed.interchange',
-'imp':'application/vnd.accpac.simply.imp',
-'ims':'application/vnd.ms-ims',
-'in':'text/plain',
-'ink':'application/inkml+xml',
-'inkml':'application/inkml+xml',
-'install':'application/x-install-instructions',
-'iota':'application/vnd.astraea-software.iota',
-'ipfix':'application/ipfix',
-'ipk':'application/vnd.shana.informed.package',
-'irm':'application/vnd.ibm.rights-management',
-'irp':'application/vnd.irepository.package+xml',
-'iso':'application/x-iso9660-image',
-'itp':'application/vnd.shana.informed.formtemplate',
-'ivp':'application/vnd.immervision-ivp',
-'ivu':'application/vnd.immervision-ivu',
-'jad':'text/vnd.sun.j2me.app-descriptor',
-'jam':'application/vnd.jam',
-'jar':'application/java-archive',
-'java':'text/x-java-source',
-'jisp':'application/vnd.jisp',
-'jlt':'application/vnd.hp-jlyt',
-'jnlp':'application/x-java-jnlp-file',
-'joda':'application/vnd.joost.joda-archive',
-'jpe':'image/jpeg',
-'jpeg':'image/jpeg',
-'jpg':'image/jpeg',
-'jpgm':'video/jpm',
-'jpgv':'video/jpeg',
-'jpm':'video/jpm',
-'js':'application/javascript',
-'json':'application/json',
-'jsonml':'application/jsonml+json',
-'kar':'audio/midi',
-'karbon':'application/vnd.kde.karbon',
-'kfo':'application/vnd.kde.kformula',
-'kia':'application/vnd.kidspiration',
-'kml':'application/vnd.google-earth.kml+xml',
-'kmz':'application/vnd.google-earth.kmz',
-'kne':'application/vnd.kinar',
-'knp':'application/vnd.kinar',
-'kon':'application/vnd.kde.kontour',
-'kpr':'application/vnd.kde.kpresenter',
-'kpt':'application/vnd.kde.kpresenter',
-'kpxx':'application/vnd.ds-keypoint',
-'ksp':'application/vnd.kde.kspread',
-'ktr':'application/vnd.kahootz',
-'ktx':'image/ktx',
-'ktz':'application/vnd.kahootz',
-'kwd':'application/vnd.kde.kword',
-'kwt':'application/vnd.kde.kword',
-'lasxml':'application/vnd.las.las+xml',
-'latex':'application/x-latex',
-'lbd':'application/vnd.llamagraphics.life-balance.desktop',
-'lbe':'application/vnd.llamagraphics.life-balance.exchange+xml',
-'les':'application/vnd.hhe.lesson-player',
-'lha':'application/x-lzh-compressed',
-'link66':'application/vnd.route66.link66+xml',
-'list':'text/plain',
-'list3820':'application/vnd.ibm.modcap',
-'listafp':'application/vnd.ibm.modcap',
-'lnk':'application/x-ms-shortcut',
-'log':'text/plain',
-'lostxml':'application/lost+xml',
-'lrf':'application/octet-stream',
-'lrm':'application/vnd.ms-lrm',
-'ltf':'application/vnd.frogans.ltf',
-'lvp':'audio/vnd.lucent.voice',
-'lwp':'application/vnd.lotus-wordpro',
-'lzh':'application/x-lzh-compressed',
-'m13':'application/x-msmediaview',
-'m14':'application/x-msmediaview',
-'m1v':'video/mpeg',
-'m21':'application/mp21',
-'m2a':'audio/mpeg',
-'m2v':'video/mpeg',
-'m3a':'audio/mpeg',
-'m3u':'audio/x-mpegurl',
-'m3u8':'application/vnd.apple.mpegurl',
-'m4u':'video/vnd.mpegurl',
-'m4v':'video/x-m4v',
-'ma':'application/mathematica',
-'mads':'application/mads+xml',
-'mag':'application/vnd.ecowin.chart',
-'maker':'application/vnd.framemaker',
-'man':'text/troff',
-'mar':'application/octet-stream',
-'mathml':'application/mathml+xml',
-'mb':'application/mathematica',
-'mbk':'application/vnd.mobius.mbk',
-'mbox':'application/mbox',
-'mc1':'application/vnd.medcalcdata',
-'mcd':'application/vnd.mcd',
-'mcurl':'text/vnd.curl.mcurl',
-'mdb':'application/x-msaccess',
-'mdi':'image/vnd.ms-modi',
-'me':'text/troff',
-'mesh':'model/mesh',
-'meta4':'application/metalink4+xml',
-'metalink':'application/metalink+xml',
-'mets':'application/mets+xml',
-'mfm':'application/vnd.mfmp',
-'mft':'application/rpki-manifest',
-'mgp':'application/vnd.osgeo.mapguide.package',
-'mgz':'application/vnd.proteus.magazine',
-'mid':'audio/midi',
-'midi':'audio/midi',
-'mie':'application/x-mie',
-'mif':'application/vnd.mif',
-'mime':'message/rfc822',
-'mj2':'video/mj2',
-'mjp2':'video/mj2',
-'mk3d':'video/x-matroska',
-'mka':'audio/x-matroska',
-'mks':'video/x-matroska',
-'mkv':'video/x-matroska',
-'mlp':'application/vnd.dolby.mlp',
-'mmd':'application/vnd.chipnuts.karaoke-mmd',
-'mmf':'application/vnd.smaf',
-'mmr':'image/vnd.fujixerox.edmics-mmr',
-'mng':'video/x-mng',
-'mny':'application/x-msmoney',
-'mobi':'application/x-mobipocket-ebook',
-'mods':'application/mods+xml',
-'mov':'video/quicktime',
-'movie':'video/x-sgi-movie',
-'mp2':'audio/mpeg',
-'mp21':'application/mp21',
-'mp2a':'audio/mpeg',
-'mp3':'audio/mpeg',
-'mp4':'video/mp4',
-'mp4a':'audio/mp4',
-'mp4s':'application/mp4',
-'mp4v':'video/mp4',
-'mpc':'application/vnd.mophun.certificate',
-'mpe':'video/mpeg',
-'mpeg':'video/mpeg',
-'mpg':'video/mpeg',
-'mpg4':'video/mp4',
-'mpga':'audio/mpeg',
-'mpkg':'application/vnd.apple.installer+xml',
-'mpm':'application/vnd.blueice.multipass',
-'mpn':'application/vnd.mophun.application',
-'mpp':'application/vnd.ms-project',
-'mpt':'application/vnd.ms-project',
-'mpy':'application/vnd.ibm.minipay',
-'mqy':'application/vnd.mobius.mqy',
-'mrc':'application/marc',
-'mrcx':'application/marcxml+xml',
-'ms':'text/troff',
-'mscml':'application/mediaservercontrol+xml',
-'mseed':'application/vnd.fdsn.mseed',
-'mseq':'application/vnd.mseq',
-'msf':'application/vnd.epson.msf',
-'msh':'model/mesh',
-'msi':'application/x-msdownload',
-'msl':'application/vnd.mobius.msl',
-'msty':'application/vnd.muvee.style',
-'mts':'model/vnd.mts',
-'mus':'application/vnd.musician',
-'musicxml':'application/vnd.recordare.musicxml+xml',
-'mvb':'application/x-msmediaview',
-'mwf':'application/vnd.mfer',
-'mxf':'application/mxf',
-'mxl':'application/vnd.recordare.musicxml',
-'mxml':'application/xv+xml',
-'mxs':'application/vnd.triscape.mxs',
-'mxu':'video/vnd.mpegurl',
-'n-gage':'application/vnd.nokia.n-gage.symbian.install',
-'n3':'text/n3',
-'nb':'application/mathematica',
-'nbp':'application/vnd.wolfram.player',
-'nc':'application/x-netcdf',
-'ncx':'application/x-dtbncx+xml',
-'nfo':'text/x-nfo',
-'ngdat':'application/vnd.nokia.n-gage.data',
-'nitf':'application/vnd.nitf',
-'nlu':'application/vnd.neurolanguage.nlu',
-'nml':'application/vnd.enliven',
-'nnd':'application/vnd.noblenet-directory',
-'nns':'application/vnd.noblenet-sealer',
-'nnw':'application/vnd.noblenet-web',
-'npx':'image/vnd.net-fpx',
-'nsc':'application/x-conference',
-'nsf':'application/vnd.lotus-notes',
-'ntf':'application/vnd.nitf',
-'nzb':'application/x-nzb',
-'oa2':'application/vnd.fujitsu.oasys2',
-'oa3':'application/vnd.fujitsu.oasys3',
-'oas':'application/vnd.fujitsu.oasys',
-'obd':'application/x-msbinder',
-'obj':'application/x-tgif',
-'oda':'application/oda',
-'odb':'application/vnd.oasis.opendocument.database',
-'odc':'application/vnd.oasis.opendocument.chart',
-'odf':'application/vnd.oasis.opendocument.formula',
-'odft':'application/vnd.oasis.opendocument.formula-template',
-'odg':'application/vnd.oasis.opendocument.graphics',
-'odi':'application/vnd.oasis.opendocument.image',
-'odm':'application/vnd.oasis.opendocument.text-master',
-'odp':'application/vnd.oasis.opendocument.presentation',
-'ods':'application/vnd.oasis.opendocument.spreadsheet',
-'odt':'application/vnd.oasis.opendocument.text',
-'oga':'audio/ogg',
-'ogg':'audio/ogg',
-'ogv':'video/ogg',
-'ogx':'application/ogg',
-'omdoc':'application/omdoc+xml',
-'onepkg':'application/onenote',
-'onetmp':'application/onenote',
-'onetoc':'application/onenote',
-'onetoc2':'application/onenote',
-'opf':'application/oebps-package+xml',
-'opml':'text/x-opml',
-'oprc':'application/vnd.palm',
-'org':'application/vnd.lotus-organizer',
-'osf':'application/vnd.yamaha.openscoreformat',
-'osfpvg':'application/vnd.yamaha.openscoreformat.osfpvg+xml',
-'otc':'application/vnd.oasis.opendocument.chart-template',
-'otf':'application/x-font-otf',
-'otg':'application/vnd.oasis.opendocument.graphics-template',
-'oth':'application/vnd.oasis.opendocument.text-web',
-'oti':'application/vnd.oasis.opendocument.image-template',
-'otp':'application/vnd.oasis.opendocument.presentation-template',
-'ots':'application/vnd.oasis.opendocument.spreadsheet-template',
-'ott':'application/vnd.oasis.opendocument.text-template',
-'oxps':'application/oxps',
-'oxt':'application/vnd.openofficeorg.extension',
-'p':'text/x-pascal',
-'p10':'application/pkcs10',
-'p12':'application/x-pkcs12',
-'p7b':'application/x-pkcs7-certificates',
-'p7c':'application/pkcs7-mime',
-'p7m':'application/pkcs7-mime',
-'p7r':'application/x-pkcs7-certreqresp',
-'p7s':'application/pkcs7-signature',
-'p8':'application/pkcs8',
-'pas':'text/x-pascal',
-'paw':'application/vnd.pawaafile',
-'pbd':'application/vnd.powerbuilder6',
-'pbm':'image/x-portable-bitmap',
-'pcap':'application/vnd.tcpdump.pcap',
-'pcf':'application/x-font-pcf',
-'pcl':'application/vnd.hp-pcl',
-'pclxl':'application/vnd.hp-pclxl',
-'pct':'image/x-pict',
-'pcurl':'application/vnd.curl.pcurl',
-'pcx':'image/x-pcx',
-'pdb':'application/vnd.palm',
-'pdf':'application/pdf',
-'pfa':'application/x-font-type1',
-'pfb':'application/x-font-type1',
-'pfm':'application/x-font-type1',
-'pfr':'application/font-tdpfr',
-'pfx':'application/x-pkcs12',
-'pgm':'image/x-portable-graymap',
-'pgn':'application/x-chess-pgn',
-'pgp':'application/pgp-encrypted',
-'pic':'image/x-pict',
-'pkg':'application/octet-stream',
-'pki':'application/pkixcmp',
-'pkipath':'application/pkix-pkipath',
-'plb':'application/vnd.3gpp.pic-bw-large',
-'plc':'application/vnd.mobius.plc',
-'plf':'application/vnd.pocketlearn',
-'pls':'application/pls+xml',
-'pml':'application/vnd.ctc-posml',
-'png':'image/png',
-'pnm':'image/x-portable-anymap',
-'portpkg':'application/vnd.macports.portpkg',
-'pot':'application/vnd.ms-powerpoint',
-'potm':'application/vnd.ms-powerpoint.template.macroenabled.12',
-'potx':'application/vnd.openxmlformats-officedocument.presentationml.template',
-'ppam':'application/vnd.ms-powerpoint.addin.macroenabled.12',
-'ppd':'application/vnd.cups-ppd',
-'ppm':'image/x-portable-pixmap',
-'pps':'application/vnd.ms-powerpoint',
-'ppsm':'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
-'ppsx':'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
-'ppt':'application/vnd.ms-powerpoint',
-'pptm':'application/vnd.ms-powerpoint.presentation.macroenabled.12',
-'pptx':'application/vnd.openxmlformats-officedocument.presentationml.presentation',
-'pqa':'application/vnd.palm',
-'prc':'application/x-mobipocket-ebook',
-'pre':'application/vnd.lotus-freelance',
-'prf':'application/pics-rules',
-'ps':'application/postscript',
-'psb':'application/vnd.3gpp.pic-bw-small',
-'psd':'image/vnd.adobe.photoshop',
-'psf':'application/x-font-linux-psf',
-'pskcxml':'application/pskc+xml',
-'ptid':'application/vnd.pvi.ptid1',
-'pub':'application/x-mspublisher',
-'pvb':'application/vnd.3gpp.pic-bw-var',
-'pwn':'application/vnd.3m.post-it-notes',
-'pya':'audio/vnd.ms-playready.media.pya',
-'pyv':'video/vnd.ms-playready.media.pyv',
-'qam':'application/vnd.epson.quickanime',
-'qbo':'application/vnd.intu.qbo',
-'qfx':'application/vnd.intu.qfx',
-'qps':'application/vnd.publishare-delta-tree',
-'qt':'video/quicktime',
-'qwd':'application/vnd.quark.quarkxpress',
-'qwt':'application/vnd.quark.quarkxpress',
-'qxb':'application/vnd.quark.quarkxpress',
-'qxd':'application/vnd.quark.quarkxpress',
-'qxl':'application/vnd.quark.quarkxpress',
-'qxt':'application/vnd.quark.quarkxpress',
-'ra':'audio/x-pn-realaudio',
-'ram':'audio/x-pn-realaudio',
-'rar':'application/x-rar-compressed',
-'ras':'image/x-cmu-raster',
-'rcprofile':'application/vnd.ipunplugged.rcprofile',
-'rdf':'application/rdf+xml',
-'rdz':'application/vnd.data-vision.rdz',
-'rep':'application/vnd.businessobjects',
-'res':'application/x-dtbresource+xml',
-'rgb':'image/x-rgb',
-'rif':'application/reginfo+xml',
-'rip':'audio/vnd.rip',
-'ris':'application/x-research-info-systems',
-'rl':'application/resource-lists+xml',
-'rlc':'image/vnd.fujixerox.edmics-rlc',
-'rld':'application/resource-lists-diff+xml',
-'rm':'application/vnd.rn-realmedia',
-'rmi':'audio/midi',
-'rmp':'audio/x-pn-realaudio-plugin',
-'rms':'application/vnd.jcp.javame.midlet-rms',
-'rmvb':'application/vnd.rn-realmedia-vbr',
-'rnc':'application/relax-ng-compact-syntax',
-'roa':'application/rpki-roa',
-'roff':'text/troff',
-'rp9':'application/vnd.cloanto.rp9',
-'rpss':'application/vnd.nokia.radio-presets',
-'rpst':'application/vnd.nokia.radio-preset',
-'rq':'application/sparql-query',
-'rs':'application/rls-services+xml',
-'rsd':'application/rsd+xml',
-'rss':'application/rss+xml',
-'rtf':'application/rtf',
-'rtx':'text/richtext',
-'s':'text/x-asm',
-'s3m':'audio/s3m',
-'saf':'application/vnd.yamaha.smaf-audio',
-'sbml':'application/sbml+xml',
-'sc':'application/vnd.ibm.secure-container',
-'scd':'application/x-msschedule',
-'scm':'application/vnd.lotus-screencam',
-'scq':'application/scvp-cv-request',
-'scs':'application/scvp-cv-response',
-'scurl':'text/vnd.curl.scurl',
-'sda':'application/vnd.stardivision.draw',
-'sdc':'application/vnd.stardivision.calc',
-'sdd':'application/vnd.stardivision.impress',
-'sdkd':'application/vnd.solent.sdkm+xml',
-'sdkm':'application/vnd.solent.sdkm+xml',
-'sdp':'application/sdp',
-'sdw':'application/vnd.stardivision.writer',
-'see':'application/vnd.seemail',
-'seed':'application/vnd.fdsn.seed',
-'sema':'application/vnd.sema',
-'semd':'application/vnd.semd',
-'semf':'application/vnd.semf',
-'ser':'application/java-serialized-object',
-'setpay':'application/set-payment-initiation',
-'setreg':'application/set-registration-initiation',
-'sfd-hdstx':'application/vnd.hydrostatix.sof-data',
-'sfs':'application/vnd.spotfire.sfs',
-'sfv':'text/x-sfv',
-'sgi':'image/sgi',
-'sgl':'application/vnd.stardivision.writer-global',
-'sgm':'text/sgml',
-'sgml':'text/sgml',
-'sh':'application/x-sh',
-'shar':'application/x-shar',
-'shf':'application/shf+xml',
-'sid':'image/x-mrsid-image',
-'sig':'application/pgp-signature',
-'sil':'audio/silk',
-'silo':'model/mesh',
-'sis':'application/vnd.symbian.install',
-'sisx':'application/vnd.symbian.install',
-'sit':'application/x-stuffit',
-'sitx':'application/x-stuffitx',
-'skd':'application/vnd.koan',
-'skm':'application/vnd.koan',
-'skp':'application/vnd.koan',
-'skt':'application/vnd.koan',
-'sldm':'application/vnd.ms-powerpoint.slide.macroenabled.12',
-'sldx':'application/vnd.openxmlformats-officedocument.presentationml.slide',
-'slt':'application/vnd.epson.salt',
-'sm':'application/vnd.stepmania.stepchart',
-'smf':'application/vnd.stardivision.math',
-'smi':'application/smil+xml',
-'smil':'application/smil+xml',
-'smv':'video/x-smv',
-'smzip':'application/vnd.stepmania.package',
-'snd':'audio/basic',
-'snf':'application/x-font-snf',
-'so':'application/octet-stream',
-'spc':'application/x-pkcs7-certificates',
-'spf':'application/vnd.yamaha.smaf-phrase',
-'spl':'application/x-futuresplash',
-'spot':'text/vnd.in3d.spot',
-'spp':'application/scvp-vp-response',
-'spq':'application/scvp-vp-request',
-'spx':'audio/ogg',
-'sql':'application/x-sql',
-'src':'application/x-wais-source',
-'srt':'application/x-subrip',
-'sru':'application/sru+xml',
-'srx':'application/sparql-results+xml',
-'ssdl':'application/ssdl+xml',
-'sse':'application/vnd.kodak-descriptor',
-'ssf':'application/vnd.epson.ssf',
-'ssml':'application/ssml+xml',
-'st':'application/vnd.sailingtracker.track',
-'stc':'application/vnd.sun.xml.calc.template',
-'std':'application/vnd.sun.xml.draw.template',
-'stf':'application/vnd.wt.stf',
-'sti':'application/vnd.sun.xml.impress.template',
-'stk':'application/hyperstudio',
-'stl':'application/vnd.ms-pki.stl',
-'str':'application/vnd.pg.format',
-'stw':'application/vnd.sun.xml.writer.template',
-'sub':'text/vnd.dvb.subtitle',
-'sus':'application/vnd.sus-calendar',
-'susp':'application/vnd.sus-calendar',
-'sv4cpio':'application/x-sv4cpio',
-'sv4crc':'application/x-sv4crc',
-'svc':'application/vnd.dvb.service',
-'svd':'application/vnd.svd',
-'svg':'image/svg+xml',
-'svgz':'image/svg+xml',
-'swa':'application/x-director',
-'swf':'application/x-shockwave-flash',
-'swi':'application/vnd.aristanetworks.swi',
-'sxc':'application/vnd.sun.xml.calc',
-'sxd':'application/vnd.sun.xml.draw',
-'sxg':'application/vnd.sun.xml.writer.global',
-'sxi':'application/vnd.sun.xml.impress',
-'sxm':'application/vnd.sun.xml.math',
-'sxw':'application/vnd.sun.xml.writer',
-'t':'text/troff',
-'t3':'application/x-t3vm-image',
-'taglet':'application/vnd.mynfc',
-'tao':'application/vnd.tao.intent-module-archive',
-'tar':'application/x-tar',
-'tcap':'application/vnd.3gpp2.tcap',
-'tcl':'application/x-tcl',
-'teacher':'application/vnd.smart.teacher',
-'tei':'application/tei+xml',
-'teicorpus':'application/tei+xml',
-'tex':'application/x-tex',
-'texi':'application/x-texinfo',
-'texinfo':'application/x-texinfo',
-'text':'text/plain',
-'tfi':'application/thraud+xml',
-'tfm':'application/x-tex-tfm',
-'tga':'image/x-tga',
-'thmx':'application/vnd.ms-officetheme',
-'tif':'image/tiff',
-'tiff':'image/tiff',
-'tmo':'application/vnd.tmobile-livetv',
-'torrent':'application/x-bittorrent',
-'tpl':'application/vnd.groove-tool-template',
-'tpt':'application/vnd.trid.tpt',
-'tr':'text/troff',
-'tra':'application/vnd.trueapp',
-'trm':'application/x-msterminal',
-'tsd':'application/timestamped-data',
-'tsv':'text/tab-separated-values',
-'ttc':'application/x-font-ttf',
-'ttf':'application/x-font-ttf',
-'ttl':'text/turtle',
-'twd':'application/vnd.simtech-mindmapper',
-'twds':'application/vnd.simtech-mindmapper',
-'txd':'application/vnd.genomatix.tuxedo',
-'txf':'application/vnd.mobius.txf',
-'txt':'text/plain',
-'u32':'application/x-authorware-bin',
-'udeb':'application/x-debian-package',
-'ufd':'application/vnd.ufdl',
-'ufdl':'application/vnd.ufdl',
-'ulx':'application/x-glulx',
-'umj':'application/vnd.umajin',
-'unityweb':'application/vnd.unity',
-'uoml':'application/vnd.uoml+xml',
-'uri':'text/uri-list',
-'uris':'text/uri-list',
-'urls':'text/uri-list',
-'ustar':'application/x-ustar',
-'utz':'application/vnd.uiq.theme',
-'uu':'text/x-uuencode',
-'uva':'audio/vnd.dece.audio',
-'uvd':'application/vnd.dece.data',
-'uvf':'application/vnd.dece.data',
-'uvg':'image/vnd.dece.graphic',
-'uvh':'video/vnd.dece.hd',
-'uvi':'image/vnd.dece.graphic',
-'uvm':'video/vnd.dece.mobile',
-'uvp':'video/vnd.dece.pd',
-'uvs':'video/vnd.dece.sd',
-'uvt':'application/vnd.dece.ttml+xml',
-'uvu':'video/vnd.uvvu.mp4',
-'uvv':'video/vnd.dece.video',
-'uvva':'audio/vnd.dece.audio',
-'uvvd':'application/vnd.dece.data',
-'uvvf':'application/vnd.dece.data',
-'uvvg':'image/vnd.dece.graphic',
-'uvvh':'video/vnd.dece.hd',
-'uvvi':'image/vnd.dece.graphic',
-'uvvm':'video/vnd.dece.mobile',
-'uvvp':'video/vnd.dece.pd',
-'uvvs':'video/vnd.dece.sd',
-'uvvt':'application/vnd.dece.ttml+xml',
-'uvvu':'video/vnd.uvvu.mp4',
-'uvvv':'video/vnd.dece.video',
-'uvvx':'application/vnd.dece.unspecified',
-'uvvz':'application/vnd.dece.zip',
-'uvx':'application/vnd.dece.unspecified',
-'uvz':'application/vnd.dece.zip',
-'vcard':'text/vcard',
-'vcd':'application/x-cdlink',
-'vcf':'text/x-vcard',
-'vcg':'application/vnd.groove-vcard',
-'vcs':'text/x-vcalendar',
-'vcx':'application/vnd.vcx',
-'vis':'application/vnd.visionary',
-'viv':'video/vnd.vivo',
-'vob':'video/x-ms-vob',
-'vor':'application/vnd.stardivision.writer',
-'vox':'application/x-authorware-bin',
-'vrml':'model/vrml',
-'vsd':'application/vnd.visio',
-'vsf':'application/vnd.vsf',
-'vss':'application/vnd.visio',
-'vst':'application/vnd.visio',
-'vsw':'application/vnd.visio',
-'vtu':'model/vnd.vtu',
-'vxml':'application/voicexml+xml',
-'w3d':'application/x-director',
-'wad':'application/x-doom',
-'wav':'audio/x-wav',
-'wax':'audio/x-ms-wax',
-'wbmp':'image/vnd.wap.wbmp',
-'wbs':'application/vnd.criticaltools.wbs+xml',
-'wbxml':'application/vnd.wap.wbxml',
-'wcm':'application/vnd.ms-works',
-'wdb':'application/vnd.ms-works',
-'wdp':'image/vnd.ms-photo',
-'weba':'audio/webm',
-'webm':'video/webm',
-'webp':'image/webp',
-'wg':'application/vnd.pmi.widget',
-'wgt':'application/widget',
-'wks':'application/vnd.ms-works',
-'wm':'video/x-ms-wm',
-'wma':'audio/x-ms-wma',
-'wmd':'application/x-ms-wmd',
-'wmf':'application/x-msmetafile',
-'wml':'text/vnd.wap.wml',
-'wmlc':'application/vnd.wap.wmlc',
-'wmls':'text/vnd.wap.wmlscript',
-'wmlsc':'application/vnd.wap.wmlscriptc',
-'wmv':'video/x-ms-wmv',
-'wmx':'video/x-ms-wmx',
-'wmz':'application/x-ms-wmz',
-'woff':'application/x-font-woff',
-'wpd':'application/vnd.wordperfect',
-'wpl':'application/vnd.ms-wpl',
-'wps':'application/vnd.ms-works',
-'wqd':'application/vnd.wqd',
-'wri':'application/x-mswrite',
-'wrl':'model/vrml',
-'wsdl':'application/wsdl+xml',
-'wspolicy':'application/wspolicy+xml',
-'wtb':'application/vnd.webturbo',
-'wvx':'video/x-ms-wvx',
-'x32':'application/x-authorware-bin',
-'x3d':'model/x3d+xml',
-'x3db':'model/x3d+binary',
-'x3dbz':'model/x3d+binary',
-'x3dv':'model/x3d+vrml',
-'x3dvz':'model/x3d+vrml',
-'x3dz':'model/x3d+xml',
-'xaml':'application/xaml+xml',
-'xap':'application/x-silverlight-app',
-'xar':'application/vnd.xara',
-'xbap':'application/x-ms-xbap',
-'xbd':'application/vnd.fujixerox.docuworks.binder',
-'xbm':'image/x-xbitmap',
-'xdf':'application/xcap-diff+xml',
-'xdm':'application/vnd.syncml.dm+xml',
-'xdp':'application/vnd.adobe.xdp+xml',
-'xdssc':'application/dssc+xml',
-'xdw':'application/vnd.fujixerox.docuworks',
-'xenc':'application/xenc+xml',
-'xer':'application/patch-ops-error+xml',
-'xfdf':'application/vnd.adobe.xfdf',
-'xfdl':'application/vnd.xfdl',
-'xht':'application/xhtml+xml',
-'xhtml':'application/xhtml+xml',
-'xhvml':'application/xv+xml',
-'xif':'image/vnd.xiff',
-'xla':'application/vnd.ms-excel',
-'xlam':'application/vnd.ms-excel.addin.macroenabled.12',
-'xlc':'application/vnd.ms-excel',
-'xlf':'application/x-xliff+xml',
-'xlm':'application/vnd.ms-excel',
-'xls':'application/vnd.ms-excel',
-'xlsb':'application/vnd.ms-excel.sheet.binary.macroenabled.12',
-'xlsm':'application/vnd.ms-excel.sheet.macroenabled.12',
-'xlsx':'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
-'xlt':'application/vnd.ms-excel',
-'xltm':'application/vnd.ms-excel.template.macroenabled.12',
-'xltx':'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
-'xlw':'application/vnd.ms-excel',
-'xm':'audio/xm',
-'xml':'application/xml',
-'xo':'application/vnd.olpc-sugar',
-'xop':'application/xop+xml',
-'xpi':'application/x-xpinstall',
-'xpl':'application/xproc+xml',
-'xpm':'image/x-xpixmap',
-'xpr':'application/vnd.is-xpr',
-'xps':'application/vnd.ms-xpsdocument',
-'xpw':'application/vnd.intercon.formnet',
-'xpx':'application/vnd.intercon.formnet',
-'xsl':'application/xml',
-'xslt':'application/xslt+xml',
-'xsm':'application/vnd.syncml+xml',
-'xspf':'application/xspf+xml',
-'xul':'application/vnd.mozilla.xul+xml',
-'xvm':'application/xv+xml',
-'xvml':'application/xv+xml',
-'xwd':'image/x-xwindowdump',
-'xyz':'chemical/x-xyz',
-'xz':'application/x-xz',
-'yang':'application/yang',
-'yin':'application/yin+xml',
-'z1':'application/x-zmachine',
-'z2':'application/x-zmachine',
-'z3':'application/x-zmachine',
-'z4':'application/x-zmachine',
-'z5':'application/x-zmachine',
-'z6':'application/x-zmachine',
-'z7':'application/x-zmachine',
-'z8':'application/x-zmachine',
-'zaz':'application/vnd.zzazz.deck+xml',
-'zip':'application/zip',
-'zir':'application/vnd.zul',
-'zirz':'application/vnd.zul',
-'zmm':'application/vnd.handheld-entertainment+xml',
-};
diff --git a/pkg/mime/lib/src/magic_number.dart b/pkg/mime/lib/src/magic_number.dart
deleted file mode 100644
index 3efb2ee..0000000
--- a/pkg/mime/lib/src/magic_number.dart
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library mime.magic_number;
-
-class MagicNumber {
- final String mimeType;
- final List<int> numbers;
- final List<int> mask;
-
- const MagicNumber(this.mimeType, this.numbers, {this.mask});
-
- bool matches(List<int> header) {
- if (header.length < numbers.length) return false;
-
- for (int i = 0; i < numbers.length; i++) {
- if (mask != null) {
- if ((mask[i] & numbers[i]) != (mask[i] & header[i])) return false;
- } else {
- if (numbers[i] != header[i]) return false;
- }
- }
-
- return true;
- }
-
-}
-
-const int DEFAULT_MAGIC_NUMBERS_MAX_LENGTH = 12;
-
-const List<MagicNumber> DEFAULT_MAGIC_NUMBERS = const [
- const MagicNumber('application/pdf', const [0x25, 0x50, 0x44, 0x46]),
- const MagicNumber('application/postscript', const [0x25, 0x51]),
- const MagicNumber('image/gif', const [0x47, 0x49, 0x46, 0x38, 0x37, 0x61]),
- const MagicNumber('image/gif', const [0x47, 0x49, 0x46, 0x38, 0x39, 0x61]),
- const MagicNumber('image/jpeg', const [0xFF, 0xD8]),
- const MagicNumber('image/png',
- const [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]),
- const MagicNumber('image/tiff', const [0x49, 0x49, 0x2A, 0x00]),
- const MagicNumber('image/tiff', const [0x4D, 0x4D, 0x00, 0x2A]),
- const MagicNumber(
- 'video/mp4',
- const [0x00, 0x00, 0x00, 0x00, 0x66, 0x74,
- 0x79, 0x70, 0x33, 0x67, 0x70, 0x35],
- mask: const [0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])
-];
diff --git a/pkg/mime/lib/src/mime_multipart_transformer.dart b/pkg/mime/lib/src/mime_multipart_transformer.dart
deleted file mode 100644
index 3afff2d..0000000
--- a/pkg/mime/lib/src/mime_multipart_transformer.dart
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-library mime.multipart_transformer;
-
-import 'dart:async';
-import 'dart:typed_data';
-
-import 'bound_multipart_stream.dart';
-import 'mime_shared.dart';
-import 'char_code.dart';
-
-
-Uint8List _getBoundary(String boundary) {
- var charCodes = boundary.codeUnits;
-
- var boundaryList = new Uint8List(4 + charCodes.length);
- // Set-up the matching boundary preceding it with CRLF and two
- // dashes.
- boundaryList[0] = CharCode.CR;
- boundaryList[1] = CharCode.LF;
- boundaryList[2] = CharCode.DASH;
- boundaryList[3] = CharCode.DASH;
- boundaryList.setRange(4, 4 + charCodes.length, charCodes);
- return boundaryList;
-}
-
-/**
- * Parser for MIME multipart types of data as described in RFC 2046
- * section 5.1.1. The data is transformed into [MimeMultipart] objects, each
- * of them streaming the multipart data.
- */
-class MimeMultipartTransformer
- implements StreamTransformer<List<int>, MimeMultipart> {
-
- final List<int> _boundary;
-
- /**
- * Construct a new MIME multipart parser with the boundary
- * [boundary]. The boundary should be as specified in the content
- * type parameter, that is without the -- prefix.
- */
- MimeMultipartTransformer(String boundary)
- : _boundary = _getBoundary(boundary);
-
- Stream<MimeMultipart> bind(Stream<List<int>> stream) {
- return new BoundMultipartStream(_boundary, stream).stream;
- }
-}
diff --git a/pkg/mime/lib/src/mime_shared.dart b/pkg/mime/lib/src/mime_shared.dart
deleted file mode 100644
index 6d14e0a..0000000
--- a/pkg/mime/lib/src/mime_shared.dart
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-library mime.shared;
-
-import 'dart:async';
-
-class MimeMultipartException implements Exception {
- final String message;
-
- const MimeMultipartException([String this.message = ""]);
-
- String toString() => "MimeMultipartException: $message";
-}
-
-/**
- * A Mime Multipart class representing each part parsed by
- * [MimeMultipartTransformer]. The data is streamed in as it become available.
- */
-abstract class MimeMultipart extends Stream<List<int>> {
- Map<String, String> get headers;
-}
diff --git a/pkg/mime/lib/src/mime_type.dart b/pkg/mime/lib/src/mime_type.dart
deleted file mode 100644
index 744eead..0000000
--- a/pkg/mime/lib/src/mime_type.dart
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library mime.mime_type;
-
-import 'default_extension_map.dart';
-import 'magic_number.dart';
-
-final MimeTypeResolver _globalResolver = new MimeTypeResolver();
-
-/**
- * The maximum number of bytes needed, to match all default magic-numbers.
- */
-int get defaultMagicNumbersMaxLength => _globalResolver.magicNumbersMaxLength;
-
-/**
- * Extract the extension from [path] and use that for MIME-type lookup, using
- * the default extension map.
- *
- * If no matching MIME-type was found, `null` is returned.
- *
- * If [headerBytes] is present, a match for known magic-numbers will be
- * performed first. This allows the correct mime-type to be found, even though
- * a file have been saved using the wrong file-name extension. If less than
- * [defaultMagicNumbersMaxLength] bytes was provided, some magic-numbers won't
- * be matched against.
- */
-String lookupMimeType(String path, {List<int> headerBytes}) =>
- _globalResolver.lookup(path, headerBytes: headerBytes);
-
-/**
- * MIME-type resolver class, used to customize the lookup of mime-types.
- */
-class MimeTypeResolver {
- final Map<String, String> _extensionMap = {};
- final List<MagicNumber> _magicNumbers = [];
- final bool _useDefault;
- int _magicNumbersMaxLength;
-
- /**
- * Create a new empty [MimeTypeResolver].
- */
- MimeTypeResolver.empty() : _useDefault = false, _magicNumbersMaxLength = 0;
-
- /**
- * Create a new [MimeTypeResolver] containing the default scope.
- */
- MimeTypeResolver() :
- _useDefault = true,
- _magicNumbersMaxLength = DEFAULT_MAGIC_NUMBERS_MAX_LENGTH;
-
- /**
- * Get the maximum number of bytes required to match all magic numbers, when
- * performing [lookup] with headerBytes present.
- */
- int get magicNumbersMaxLength => _magicNumbersMaxLength;
-
- /**
- * Extract the extension from [path] and use that for MIME-type lookup.
- *
- * If no matching MIME-type was found, `null` is returned.
- *
- * If [headerBytes] is present, a match for known magic-numbers will be
- * performed first. This allows the correct mime-type to be found, even though
- * a file have been saved using the wrong file-name extension. If less than
- * [magicNumbersMaxLength] bytes was provided, some magic-numbers won't
- * be matched against.
- */
- String lookup(String path, {List<int> headerBytes}) {
- String result;
- if (headerBytes != null) {
- result = _matchMagic(headerBytes, _magicNumbers);
- if (result != null) return result;
- if (_useDefault) {
- result = _matchMagic(headerBytes, DEFAULT_MAGIC_NUMBERS);
- if (result != null) return result;
- }
- }
- var ext = _ext(path);
- result = _extensionMap[ext];
- if (result != null) return result;
- if (_useDefault) {
- result = defaultExtensionMap[ext];
- if (result != null) return result;
- }
- return null;
- }
-
- /**
- * Add a new MIME-type mapping to the [MimeTypeResolver]. If the [extension]
- * is already present in the [MimeTypeResolver], it'll be overwritten.
- */
- void addExtension(String extension, String mimeType) {
- _extensionMap[extension] = mimeType;
- }
-
- /**
- * Add a new magic-number mapping to the [MimeTypeResolver].
- *
- * If [mask] is present,the [mask] is used to only perform matching on
- * selective bits. The [mask] must have the same length as [bytes].
- */
- void addMagicNumber(List<int> bytes, String mimeType, {List<int> mask}) {
- if (mask != null && bytes.length != mask.length) {
- throw new ArgumentError('Bytes and mask are of different lengths');
- }
- if (bytes.length > _magicNumbersMaxLength) {
- _magicNumbersMaxLength = bytes.length;
- }
- _magicNumbers.add(new MagicNumber(mimeType, bytes, mask: mask));
- }
-
- static String _matchMagic(List<int> headerBytes,
- List<MagicNumber> magicNumbers) {
- for (var mn in magicNumbers) {
- if (mn.matches(headerBytes)) return mn.mimeType;
- }
- return null;
- }
-
- static String _ext(String path) {
- int index = path.lastIndexOf('.');
- if (index < 0 || index + 1 >= path.length) return path;
- return path.substring(index + 1).toLowerCase();
- }
-}
-
diff --git a/pkg/mime/pubspec.yaml b/pkg/mime/pubspec.yaml
deleted file mode 100644
index 2de7eca..0000000
--- a/pkg/mime/pubspec.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-name: mime
-version: 0.9.3
-author: Dart Team <misc@dartlang.org>
-description: Helper-package for working with MIME.
-homepage: http://www.dartlang.org
-environment:
- sdk: '>=1.0.0 <2.0.0'
-dev_dependencies:
- unittest: '>=0.9.0 <0.12.0'
diff --git a/pkg/mime/test/mime_multipart_transformer_test.dart b/pkg/mime/test/mime_multipart_transformer_test.dart
deleted file mode 100644
index 5038999..0000000
--- a/pkg/mime/test/mime_multipart_transformer_test.dart
+++ /dev/null
@@ -1,465 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:async';
-import 'dart:math';
-
-import "package:unittest/unittest.dart";
-import "package:mime/mime.dart";
-
-void _writeInChunks(List<int> data,
- int chunkSize,
- StreamController<List<int>> controller) {
- if (chunkSize == -1) chunkSize = data.length;
-
- int written = 0;
- for (int pos = 0; pos < data.length; pos += chunkSize) {
- int remaining = data.length - pos;
- int writeLength = min(chunkSize, remaining);
- controller.add(data.sublist(pos, pos + writeLength));
- written += writeLength;
- }
- controller.close();
-}
-
-
-enum TestMode {
- IMMEDIATE_LISTEN,
- DELAY_LISTEN,
- PAUSE_RESUME
-}
-
-void _runParseTest(String message,
- String boundary,
- TestMode mode,
- [List<Map> expectedHeaders,
- List expectedParts,
- bool expectError = false]) {
- Future testWrite(List<int> data, [int chunkSize = -1]) {
- StreamController controller = new StreamController(sync: true);
-
- var stream = controller.stream.transform(
- new MimeMultipartTransformer(boundary));
- int i = 0;
- var completer = new Completer();
- var futures = [];
- stream.listen((multipart) {
- int part = i++;
- if (expectedHeaders != null) {
- expect(multipart.headers, equals(expectedHeaders[part]));
- }
- switch (mode) {
- case TestMode.IMMEDIATE_LISTEN:
- futures.add(multipart.fold([], (buffer, data) => buffer..addAll(data))
- .then((data) {
- if (expectedParts[part] != null) {
- expect(data, equals(expectedParts[part].codeUnits));
- }
- }));
- break;
-
- case TestMode.DELAY_LISTEN:
- futures.add(new Future(() {
- return multipart.fold([], (buffer, data) => buffer..addAll(data))
- .then((data) {
- if (expectedParts[part] != null) {
- expect(data, equals(expectedParts[part].codeUnits));
- }
- });
- }));
- break;
-
- case TestMode.PAUSE_RESUME:
- var completer = new Completer();
- futures.add(completer.future);
- var buffer = [];
- var subscription;
- subscription = multipart.listen(
- (data) {
- buffer.addAll(data);
- subscription.pause();
- new Future(() => subscription.resume());
- },
- onDone: () {
- if (expectedParts[part] != null) {
- expect(buffer, equals(expectedParts[part].codeUnits));
- }
- completer.complete();
- });
- break;
- }
- }, onError: (error) {
- if (!expectError) throw error;
- }, onDone: () {
- if (expectedParts != null) {
- expect(i, equals(expectedParts.length));
- }
- Future.wait(futures).then(completer.complete);
- });
-
- _writeInChunks(data, chunkSize, controller);
-
- return completer.future;
- }
-
- Future testFirstPartOnly(List<int> data, [int chunkSize = -1]) {
- var completer = new Completer();
- var controller = new StreamController(sync: true);
-
- var stream = controller.stream.transform(
- new MimeMultipartTransformer(boundary));
-
- var subscription;
- subscription = stream.first.then((multipart) {
- if (expectedHeaders != null) {
- expect(multipart.headers, equals(expectedHeaders[0]));
- }
- return (multipart.fold([], (b, d) => b..addAll(d)).then((data) {
- if (expectedParts != null && expectedParts[0] != null) {
- expect(data, equals(expectedParts[0].codeUnits));
- }
- }));
- }).then((_) {
- completer.complete();
- });
-
- _writeInChunks(data, chunkSize, controller);
-
- return completer.future;
- }
-
- Future testCompletePartAfterCancel(List<int> data,
- int parts,
- [int chunkSize = -1]) {
- var completer = new Completer();
- var controller = new StreamController(sync: true);
- var stream = controller.stream.transform(
- new MimeMultipartTransformer(boundary));
- var subscription;
- int i = 0;
- var futures = [];
- subscription = stream.listen((multipart) {
- int partIndex = i;
-
- if (partIndex >= parts) {
- throw 'Expected no more parts, but got one.';
- }
-
- if (expectedHeaders != null) {
- expect(multipart.headers, equals(expectedHeaders[partIndex]));
- }
- futures.add((multipart.fold([], (b, d) => b..addAll(d)).then((data) {
- if (expectedParts != null && expectedParts[partIndex] != null) {
- expect(data, equals(expectedParts[partIndex].codeUnits));
- }
- })));
-
- if (partIndex == (parts - 1)) {
- subscription.cancel();
- Future.wait(futures).then(completer.complete);
- }
- i++;
- });
-
- _writeInChunks(data, chunkSize, controller);
-
- return completer.future;
- }
-
- // Test parsing the data three times delivering the data in
- // different chunks.
- List<int> data = message.codeUnits;
- test('test', () {
- expect(Future.wait([
- testWrite(data),
- testWrite(data, 10),
- testWrite(data, 2),
- testWrite(data, 1),
- ]), completes);
- });
-
- if (expectedParts.length > 0) {
- test('test-first-part-only', () {
- expect(Future.wait([
- testFirstPartOnly(data),
- testFirstPartOnly(data, 10),
- testFirstPartOnly(data, 2),
- testFirstPartOnly(data, 1),
- ]), completes);
- });
-
- test('test-n-parts-only', () {
- int numPartsExpected = expectedParts.length - 1;
- if (numPartsExpected == 0) numPartsExpected = 1;
-
- expect(Future.wait([
- testCompletePartAfterCancel(data, numPartsExpected),
- testCompletePartAfterCancel(data, numPartsExpected, 10),
- testCompletePartAfterCancel(data, numPartsExpected, 2),
- testCompletePartAfterCancel(data, numPartsExpected, 1),
- ]), completes);
- });
- }
-}
-
-void _testParse(String message,
- String boundary,
- [List<Map> expectedHeaders,
- List expectedParts,
- bool expectError = false]) {
- _runParseTest(
- message, boundary, TestMode.IMMEDIATE_LISTEN,
- expectedHeaders, expectedParts, expectError);
- _runParseTest(
- message, boundary, TestMode.DELAY_LISTEN,
- expectedHeaders, expectedParts, expectError);
- _runParseTest(
- message, boundary, TestMode.PAUSE_RESUME,
- expectedHeaders, expectedParts, expectError);
-}
-
-void _testParseValid() {
- // Empty message from Chrome form post.
- var message = '------WebKitFormBoundaryU3FBruSkJKG0Yor1--\r\n';
- _testParse(message, "----WebKitFormBoundaryU3FBruSkJKG0Yor1", [], []);
-
- // Sample from Wikipedia.
- message = """
-This is a message with multiple parts in MIME format.\r
---frontier\r
-Content-Type: text/plain\r
-\r
-This is the body of the message.\r
---frontier\r
-Content-Type: application/octet-stream\r
-Content-Transfer-Encoding: base64\r
-\r
-PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg
-Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg=\r
---frontier--\r\n""";
- var headers1 = <String, String>{"content-type": "text/plain"};
- var headers2 = <String, String>{"content-type": "application/octet-stream",
- "content-transfer-encoding": "base64"};
- var body1 = "This is the body of the message.";
- var body2 = """
-PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg
-Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg=""";
- _testParse(message, "frontier", [headers1, headers2], [body1, body2]);
-
- // Sample from HTML 4.01 Specification.
- message = """
-\r\n--AaB03x\r
-Content-Disposition: form-data; name=\"submit-name\"\r
-\r
-Larry\r
---AaB03x\r
-Content-Disposition: form-data; name=\"files\"; filename=\"file1.txt\"\r
-Content-Type: text/plain\r
-\r
-... contents of file1.txt ...\r
---AaB03x--\r\n""";
- headers1 = <String, String>{
- "content-disposition": "form-data; name=\"submit-name\""};
- headers2 = <String, String>{
- "content-type": "text/plain",
- "content-disposition": "form-data; name=\"files\"; filename=\"file1.txt\""
- };
- body1 = "Larry";
- body2 = "... contents of file1.txt ...";
- _testParse(message, "AaB03x", [headers1, headers2], [body1, body2]);
-
- // Longer form from submitting the following from Chrome.
- //
- // <html>
- // <body>
- // <FORM action="http://127.0.0.1:1234/"
- // enctype="multipart/form-data"
- // method="post">
- // <P>
- // Text: <INPUT type="text" name="text_input">
- // Password: <INPUT type="password" name="password_input">
- // Checkbox: <INPUT type="checkbox" name="checkbox_input">
- // Radio: <INPUT type="radio" name="radio_input">
- // Send <INPUT type="submit">
- // </P>
- // </FORM>
- // </body>
- // </html>
-
- message = """
-\r\n------WebKitFormBoundaryQ3cgYAmGRF8yOeYB\r
-Content-Disposition: form-data; name=\"text_input\"\r
-\r
-text\r
-------WebKitFormBoundaryQ3cgYAmGRF8yOeYB\r
-Content-Disposition: form-data; name=\"password_input\"\r
-\r
-password\r
-------WebKitFormBoundaryQ3cgYAmGRF8yOeYB\r
-Content-Disposition: form-data; name=\"checkbox_input\"\r
-\r
-on\r
-------WebKitFormBoundaryQ3cgYAmGRF8yOeYB\r
-Content-Disposition: form-data; name=\"radio_input\"\r
-\r
-on\r
-------WebKitFormBoundaryQ3cgYAmGRF8yOeYB--\r\n""";
- headers1 = <String, String>{
- "content-disposition": "form-data; name=\"text_input\""};
- headers2 = <String, String>{
- "content-disposition": "form-data; name=\"password_input\""};
- var headers3 = <String, String>{
- "content-disposition": "form-data; name=\"checkbox_input\""};
- var headers4 = <String, String>{
- "content-disposition": "form-data; name=\"radio_input\""};
- body1 = "text";
- body2 = "password";
- var body3 = "on";
- var body4 = "on";
- _testParse(message,
- "----WebKitFormBoundaryQ3cgYAmGRF8yOeYB",
- [headers1, headers2, headers3, headers4],
- [body1, body2, body3, body4]);
-
- // Same form from Firefox.
- message = """
-\r\n-----------------------------52284550912143824192005403738\r
-Content-Disposition: form-data; name=\"text_input\"\r
-\r
-text\r
------------------------------52284550912143824192005403738\r
-Content-Disposition: form-data; name=\"password_input\"\r
-\r
-password\r
------------------------------52284550912143824192005403738\r
-Content-Disposition: form-data; name=\"checkbox_input\"\r
-\r
-on\r
------------------------------52284550912143824192005403738\r
-Content-Disposition: form-data; name=\"radio_input\"\r
-\r
-on\r
------------------------------52284550912143824192005403738--\r\n""";
- _testParse(message,
- "---------------------------52284550912143824192005403738",
- [headers1, headers2, headers3, headers4],
- [body1, body2, body3, body4]);
-
- // And Internet Explorer
- message = """
-\r\n-----------------------------7dc8f38c60326\r
-Content-Disposition: form-data; name=\"text_input\"\r
-\r
-text\r
------------------------------7dc8f38c60326\r
-Content-Disposition: form-data; name=\"password_input\"\r
-\r
-password\r
------------------------------7dc8f38c60326\r
-Content-Disposition: form-data; name=\"checkbox_input\"\r
-\r
-on\r
------------------------------7dc8f38c60326\r
-Content-Disposition: form-data; name=\"radio_input\"\r
-\r
-on\r
------------------------------7dc8f38c60326--\r\n""";
- _testParse(message,
- "---------------------------7dc8f38c60326",
- [headers1, headers2, headers3, headers4],
- [body1, body2, body3, body4]);
-
- // Test boundary prefix inside prefix and content.
- message = """
--\r
---\r
---b\r
---bo\r
---bou\r
---boun\r
---bound\r
---bounda\r
---boundar\r
---boundary\r
-Content-Type: text/plain\r
-\r
--\r
---\r
---b\r
---bo\r
---bou\r
---boun\r
---bound\r\r
---bounda\r\r\r
---boundar\r\r\r\r
---boundary\r
-Content-Type: text/plain\r
-\r
---boundar\r
---bounda\r
---bound\r
---boun\r
---bou\r
---bo\r
---b\r\r\r\r
---\r\r\r
--\r\r
---boundary--\r\n""";
- var headers = <String, String>{"content-type": "text/plain"};
- body1 = """
--\r
---\r
---b\r
---bo\r
---bou\r
---boun\r
---bound\r\r
---bounda\r\r\r
---boundar\r\r\r""";
- body2 = """
---boundar\r
---bounda\r
---bound\r
---boun\r
---bou\r
---bo\r
---b\r\r\r\r
---\r\r\r
--\r""";
- _testParse(message, "boundary", [headers, headers], [body1, body2]);
-
- // Without initial CRLF.
- message = """
---xxx\r
-\r
-\r
-Body 1\r
---xxx\r
-\r
-\r
-Body2\r
---xxx--\r\n""";
- _testParse(message, "xxx", null, ["\r\nBody 1", "\r\nBody2"]);
-}
-
-void _testParseInvalid() {
- // Missing end boundary.
- var message = """
-\r
---xxx\r
-\r
-\r
-Body 1\r
---xxx\r
-\r
-\r
-Body2\r
---xxx\r\n""";
- _testParse(message, "xxx", null, [null, null], true);
-}
-
-void main() {
- _testParseValid();
- _testParseInvalid();
-}
diff --git a/pkg/mime/test/mime_type_test.dart b/pkg/mime/test/mime_type_test.dart
deleted file mode 100644
index 23cc10e..0000000
--- a/pkg/mime/test/mime_type_test.dart
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:math' as math;
-
-import 'package:unittest/unittest.dart';
-import 'package:mime/mime.dart';
-import 'package:mime/src/magic_number.dart';
-
-void _expectMimeType(String path,
- String expectedMimeType,
- {List<int> headerBytes,
- MimeTypeResolver resolver}) {
- String mimeType;
- if (resolver == null) {
- mimeType = lookupMimeType(path, headerBytes: headerBytes);
- } else {
- mimeType = resolver.lookup(path, headerBytes: headerBytes);
- }
-
- expect(mimeType, expectedMimeType);
-}
-
-void main() {
- group('global-lookup', () {
- test('by-path', () {
- _expectMimeType('file.dart', 'application/dart');
- // Test mixed-case
- _expectMimeType('file.DaRT', 'application/dart');
- _expectMimeType('file.html', 'text/html');
- _expectMimeType('file.xhtml', 'application/xhtml+xml');
- _expectMimeType('file.jpeg', 'image/jpeg');
- _expectMimeType('file.jpg', 'image/jpeg');
- _expectMimeType('file.png', 'image/png');
- _expectMimeType('file.gif', 'image/gif');
- _expectMimeType('file.cc', 'text/x-c');
- _expectMimeType('file.c', 'text/x-c');
- _expectMimeType('file.css', 'text/css');
- _expectMimeType('file.js', 'application/javascript');
- _expectMimeType('file.ps', 'application/postscript');
- _expectMimeType('file.pdf', 'application/pdf');
- _expectMimeType('file.tiff', 'image/tiff');
- _expectMimeType('file.tif', 'image/tiff');
- });
-
- test('unknown-mime-type', () {
- _expectMimeType('file.unsupported-extension', null);
- });
-
- test('by-header-bytes', () {
- _expectMimeType('file.jpg',
- 'image/png',
- headerBytes: [0x89, 0x50, 0x4E, 0x47,
- 0x0D, 0x0A, 0x1A, 0x0A]);
- _expectMimeType('file.jpg',
- 'image/gif',
- headerBytes: [0x47, 0x49, 0x46, 0x38, 0x39,
- 0x61, 0x0D, 0x0A, 0x1A, 0x0A]);
- _expectMimeType('file.gif',
- 'image/jpeg',
- headerBytes: [0xFF, 0xD8, 0x46, 0x38, 0x39,
- 0x61, 0x0D, 0x0A, 0x1A, 0x0A]);
- _expectMimeType('file.mp4',
- 'video/mp4',
- headerBytes: [0x00, 0x00, 0x00, 0x04, 0x66, 0x74,
- 0x79, 0x70, 0x33, 0x67, 0x70, 0x35]);
- });
- });
-
- group('custom-resolver', () {
- test('override-extension', () {
- var resolver = new MimeTypeResolver();
- resolver.addExtension('jpg', 'my-mime-type');
- _expectMimeType('file.jpg', 'my-mime-type', resolver: resolver);
- });
-
- test('fallthrough-extension', () {
- var resolver = new MimeTypeResolver();
- resolver.addExtension('jpg2', 'my-mime-type');
- _expectMimeType('file.jpg', 'image/jpeg', resolver: resolver);
- });
-
- test('with-mask', () {
- var resolver = new MimeTypeResolver.empty();
- resolver.addMagicNumber([0x01, 0x02, 0x03],
- 'my-mime-type',
- mask: [0x01, 0xFF, 0xFE]);
- _expectMimeType('file',
- 'my-mime-type',
- headerBytes: [0x01, 0x02, 0x03],
- resolver: resolver);
- _expectMimeType('file',
- null,
- headerBytes: [0x01, 0x03, 0x03],
- resolver: resolver);
- _expectMimeType('file',
- 'my-mime-type',
- headerBytes: [0xFF, 0x02, 0x02],
- resolver: resolver);
- });
- });
-
- test('default magic number', () {
- var actualMaxBytes = DEFAULT_MAGIC_NUMBERS.fold(0, (previous, magic) {
- return math.max(previous, magic.numbers.length);
- });
-
- expect(defaultMagicNumbersMaxLength, actualMaxBytes);
- });
-}
diff --git a/pkg/pkg.gyp b/pkg/pkg.gyp
index fab8a7f..54a5a5f 100644
--- a/pkg/pkg.gyp
+++ b/pkg/pkg.gyp
@@ -18,6 +18,8 @@
'<!@(["python", "../tools/list_pkg_directories.py", '
'"../third_party/pkg"])',
'<!@(["python", "../tools/list_pkg_directories.py", '
+ '"../third_party/pkg_tested"])',
+ '<!@(["python", "../tools/list_pkg_directories.py", '
'"../runtime"])',
'../sdk/lib/_internal',
'../site/try',
diff --git a/pkg/utf/LICENSE b/pkg/utf/LICENSE
deleted file mode 100644
index 5c60afe..0000000
--- a/pkg/utf/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright 2014, the Dart project authors. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of Google Inc. nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/utf/README.md b/pkg/utf/README.md
deleted file mode 100644
index fc68063..0000000
--- a/pkg/utf/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-A Unicode manipulation library for Dart.
-
-The utf package provides common operations for manipulating Unicode sequences.
-In its initial form it is a copy of the `dart:utf` library before that was
-deprecated.
diff --git a/pkg/utf/lib/src/constants.dart b/pkg/utf/lib/src/constants.dart
deleted file mode 100644
index 3dfea39..0000000
--- a/pkg/utf/lib/src/constants.dart
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library utf.constants;
-
-/**
- * Invalid codepoints or encodings may be substituted with the value U+fffd.
- */
-const int UNICODE_REPLACEMENT_CHARACTER_CODEPOINT = 0xfffd;
-const int UNICODE_BOM = 0xfeff;
-const int UNICODE_UTF_BOM_LO = 0xff;
-const int UNICODE_UTF_BOM_HI = 0xfe;
-
-const int UNICODE_BYTE_ZERO_MASK = 0xff;
-const int UNICODE_BYTE_ONE_MASK = 0xff00;
-const int UNICODE_VALID_RANGE_MAX = 0x10ffff;
-const int UNICODE_PLANE_ONE_MAX = 0xffff;
-const int UNICODE_UTF16_RESERVED_LO = 0xd800;
-const int UNICODE_UTF16_RESERVED_HI = 0xdfff;
-const int UNICODE_UTF16_OFFSET = 0x10000;
-const int UNICODE_UTF16_SURROGATE_UNIT_0_BASE = 0xd800;
-const int UNICODE_UTF16_SURROGATE_UNIT_1_BASE = 0xdc00;
-const int UNICODE_UTF16_HI_MASK = 0xffc00;
-const int UNICODE_UTF16_LO_MASK = 0x3ff;
diff --git a/pkg/utf/lib/src/list_range.dart b/pkg/utf/lib/src/list_range.dart
deleted file mode 100644
index 2f3b34d..0000000
--- a/pkg/utf/lib/src/list_range.dart
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library utf.list_range;
-
-import 'dart:collection';
-
-/**
- * _ListRange in an internal type used to create a lightweight Interable on a
- * range within a source list. DO NOT MODIFY the underlying list while
- * iterating over it. The results of doing so are undefined.
- */
-// TODO(floitsch): Consider removing the extend and switch to implements since
-// that's cheaper to allocate.
-class ListRange extends IterableBase {
- final List _source;
- final int _offset;
- final int _length;
-
- ListRange(source, [offset = 0, length]) :
- this._source = source,
- this._offset = offset,
- this._length = (length == null ? source.length - offset : length) {
- if (_offset < 0 || _offset > _source.length) {
- throw new RangeError.value(_offset);
- }
- if (_length != null && (_length < 0)) {
- throw new RangeError.value(_length);
- }
- if (_length + _offset > _source.length) {
- throw new RangeError.value(_length + _offset);
- }
- }
-
- ListRangeIterator get iterator =>
- new _ListRangeIteratorImpl(_source, _offset, _offset + _length);
-
- int get length => _length;
-}
-
-/**
- * The ListRangeIterator provides more capabilities than a standard iterator,
- * including the ability to get the current position, count remaining items,
- * and move forward/backward within the iterator.
- */
-abstract class ListRangeIterator implements Iterator<int> {
- bool moveNext();
- int get current;
- int get position;
- void backup([int by]);
- int get remaining;
- void skip([int count]);
-}
-
-class _ListRangeIteratorImpl implements ListRangeIterator {
- final List<int> _source;
- int _offset;
- final int _end;
-
- _ListRangeIteratorImpl(this._source, int offset, this._end)
- : _offset = offset - 1;
-
- int get current => _source[_offset];
-
- bool moveNext() => ++_offset < _end;
-
- int get position => _offset;
-
- void backup([int by = 1]) {
- _offset -= by;
- }
-
- int get remaining => _end - _offset - 1;
-
- void skip([int count = 1]) {
- _offset += count;
- }
-}
diff --git a/pkg/utf/lib/src/utf/utf16.dart b/pkg/utf/lib/src/utf/utf16.dart
deleted file mode 100644
index 8ddd4dd..0000000
--- a/pkg/utf/lib/src/utf/utf16.dart
+++ /dev/null
@@ -1,361 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of utf;
-
-// TODO(jmesserly): would be nice to have this on String (dartbug.com/6501).
-/**
- * Provide a list of Unicode codepoints for a given string.
- */
-List<int> stringToCodepoints(String str) {
- // Note: str.codeUnits gives us 16-bit code units on all Dart implementations.
- // So we need to convert.
- return utf16CodeUnitsToCodepoints(str.codeUnits);
-}
-
-/**
- * Generate a string from the provided Unicode codepoints.
- *
- * *Deprecated* Use [String.fromCharCodes] instead.
- */
-@deprecated
-String codepointsToString(List<int> codepoints) {
- return new String.fromCharCodes(codepoints);
-}
-/**
- * Decodes the UTF-16 bytes as an iterable. Thus, the consumer can only convert
- * as much of the input as needed. Determines the byte order from the BOM,
- * or uses big-endian as a default. This method always strips a leading BOM.
- * Set the [replacementCodepoint] to null to throw an ArgumentError
- * rather than replace the bad value. The default value for
- * [replacementCodepoint] is U+FFFD.
- */
-IterableUtf16Decoder decodeUtf16AsIterable(List<int> bytes, [int offset = 0,
- int length, int replacementCodepoint =
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- return new IterableUtf16Decoder._(
- () => new Utf16BytesToCodeUnitsDecoder(bytes, offset, length,
- replacementCodepoint), replacementCodepoint);
-}
-
-/**
- * Decodes the UTF-16BE bytes as an iterable. Thus, the consumer can only
- * convert as much of the input as needed. This method strips a leading BOM by
- * default, but can be overridden by setting the optional parameter [stripBom]
- * to false. Set the [replacementCodepoint] to null to throw an
- * ArgumentError rather than replace the bad value. The default
- * value for the [replacementCodepoint] is U+FFFD.
- */
-IterableUtf16Decoder decodeUtf16beAsIterable(List<int> bytes, [int offset = 0,
- int length, bool stripBom = true, int replacementCodepoint =
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- return new IterableUtf16Decoder._(
- () => new Utf16beBytesToCodeUnitsDecoder(bytes, offset, length, stripBom,
- replacementCodepoint), replacementCodepoint);
-}
-
-/**
- * Decodes the UTF-16LE bytes as an iterable. Thus, the consumer can only
- * convert as much of the input as needed. This method strips a leading BOM by
- * default, but can be overridden by setting the optional parameter [stripBom]
- * to false. Set the [replacementCodepoint] to null to throw an
- * ArgumentError rather than replace the bad value. The default
- * value for the [replacementCodepoint] is U+FFFD.
- */
-IterableUtf16Decoder decodeUtf16leAsIterable(List<int> bytes, [int offset = 0,
- int length, bool stripBom = true, int replacementCodepoint =
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- return new IterableUtf16Decoder._(
- () => new Utf16leBytesToCodeUnitsDecoder(bytes, offset, length, stripBom,
- replacementCodepoint), replacementCodepoint);
-}
-
-/**
- * Produce a String from a sequence of UTF-16 encoded bytes. This method always
- * strips a leading BOM. Set the [replacementCodepoint] to null to throw an
- * ArgumentError rather than replace the bad value. The default
- * value for the [replacementCodepoint] is U+FFFD.
- */
-String decodeUtf16(List<int> bytes, [int offset = 0, int length,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- Utf16BytesToCodeUnitsDecoder decoder = new Utf16BytesToCodeUnitsDecoder(bytes,
- offset, length, replacementCodepoint);
- List<int> codeunits = decoder.decodeRest();
- return new String.fromCharCodes(
- utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
-}
-
-/**
- * Produce a String from a sequence of UTF-16BE encoded bytes. This method
- * strips a leading BOM by default, but can be overridden by setting the
- * optional parameter [stripBom] to false. Set the [replacementCodepoint] to
- * null to throw an ArgumentError rather than replace the bad value.
- * The default value for the [replacementCodepoint] is U+FFFD.
- */
-String decodeUtf16be(List<int> bytes, [int offset = 0, int length,
- bool stripBom = true,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- List<int> codeunits = (new Utf16beBytesToCodeUnitsDecoder(bytes, offset,
- length, stripBom, replacementCodepoint)).decodeRest();
- return new String.fromCharCodes(
- utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
-}
-
-/**
- * Produce a String from a sequence of UTF-16LE encoded bytes. This method
- * strips a leading BOM by default, but can be overridden by setting the
- * optional parameter [stripBom] to false. Set the [replacementCodepoint] to
- * null to throw an ArgumentError rather than replace the bad value.
- * The default value for the [replacementCodepoint] is U+FFFD.
- */
-String decodeUtf16le(List<int> bytes, [int offset = 0, int length,
- bool stripBom = true,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- List<int> codeunits = (new Utf16leBytesToCodeUnitsDecoder(bytes, offset,
- length, stripBom, replacementCodepoint)).decodeRest();
- return new String.fromCharCodes(
- utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
-}
-
-/**
- * Produce a list of UTF-16 encoded bytes. This method prefixes the resulting
- * bytes with a big-endian byte-order-marker.
- */
-List<int> encodeUtf16(String str) =>
- encodeUtf16be(str, true);
-
-/**
- * Produce a list of UTF-16BE encoded bytes. By default, this method produces
- * UTF-16BE bytes with no BOM.
- */
-List<int> encodeUtf16be(String str, [bool writeBOM = false]) {
- List<int> utf16CodeUnits = _stringToUtf16CodeUnits(str);
- List<int> encoding =
- new List<int>(2 * utf16CodeUnits.length + (writeBOM ? 2 : 0));
- int i = 0;
- if (writeBOM) {
- encoding[i++] = UNICODE_UTF_BOM_HI;
- encoding[i++] = UNICODE_UTF_BOM_LO;
- }
- for (int unit in utf16CodeUnits) {
- encoding[i++] = (unit & UNICODE_BYTE_ONE_MASK) >> 8;
- encoding[i++] = unit & UNICODE_BYTE_ZERO_MASK;
- }
- return encoding;
-}
-
-/**
- * Produce a list of UTF-16LE encoded bytes. By default, this method produces
- * UTF-16LE bytes with no BOM.
- */
-List<int> encodeUtf16le(String str, [bool writeBOM = false]) {
- List<int> utf16CodeUnits = _stringToUtf16CodeUnits(str);
- List<int> encoding =
- new List<int>(2 * utf16CodeUnits.length + (writeBOM ? 2 : 0));
- int i = 0;
- if (writeBOM) {
- encoding[i++] = UNICODE_UTF_BOM_LO;
- encoding[i++] = UNICODE_UTF_BOM_HI;
- }
- for (int unit in utf16CodeUnits) {
- encoding[i++] = unit & UNICODE_BYTE_ZERO_MASK;
- encoding[i++] = (unit & UNICODE_BYTE_ONE_MASK) >> 8;
- }
- return encoding;
-}
-
-/**
- * Identifies whether a List of bytes starts (based on offset) with a
- * byte-order marker (BOM).
- */
-bool hasUtf16Bom(List<int> utf32EncodedBytes, [int offset = 0, int length]) {
- return hasUtf16beBom(utf32EncodedBytes, offset, length) ||
- hasUtf16leBom(utf32EncodedBytes, offset, length);
-}
-
-/**
- * Identifies whether a List of bytes starts (based on offset) with a
- * big-endian byte-order marker (BOM).
- */
-bool hasUtf16beBom(List<int> utf16EncodedBytes, [int offset = 0, int length]) {
- int end = length != null ? offset + length : utf16EncodedBytes.length;
- return (offset + 2) <= end &&
- utf16EncodedBytes[offset] == UNICODE_UTF_BOM_HI &&
- utf16EncodedBytes[offset + 1] == UNICODE_UTF_BOM_LO;
-}
-
-/**
- * Identifies whether a List of bytes starts (based on offset) with a
- * little-endian byte-order marker (BOM).
- */
-bool hasUtf16leBom(List<int> utf16EncodedBytes, [int offset = 0, int length]) {
- int end = length != null ? offset + length : utf16EncodedBytes.length;
- return (offset + 2) <= end &&
- utf16EncodedBytes[offset] == UNICODE_UTF_BOM_LO &&
- utf16EncodedBytes[offset + 1] == UNICODE_UTF_BOM_HI;
-}
-
-List<int> _stringToUtf16CodeUnits(String str) {
- return codepointsToUtf16CodeUnits(str.codeUnits);
-}
-
-typedef ListRangeIterator _CodeUnitsProvider();
-
-/**
- * Return type of [decodeUtf16AsIterable] and variants. The Iterable type
- * provides an iterator on demand and the iterator will only translate bytes
- * as requested by the user of the iterator. (Note: results are not cached.)
- */
-// TODO(floitsch): Consider removing the extend and switch to implements since
-// that's cheaper to allocate.
-class IterableUtf16Decoder extends IterableBase<int> {
- final _CodeUnitsProvider codeunitsProvider;
- final int replacementCodepoint;
-
- IterableUtf16Decoder._(this.codeunitsProvider, this.replacementCodepoint);
-
- Utf16CodeUnitDecoder get iterator =>
- new Utf16CodeUnitDecoder.fromListRangeIterator(codeunitsProvider(),
- replacementCodepoint);
-}
-
-/**
- * Convert UTF-16 encoded bytes to UTF-16 code units by grouping 1-2 bytes
- * to produce the code unit (0-(2^16)-1). Relies on BOM to determine
- * endian-ness, and defaults to BE.
- */
-abstract class Utf16BytesToCodeUnitsDecoder implements ListRangeIterator {
- // TODO(kevmoo): should this field be private?
- final ListRangeIterator utf16EncodedBytesIterator;
- final int replacementCodepoint;
- int _current = null;
-
- Utf16BytesToCodeUnitsDecoder._fromListRangeIterator(
- this.utf16EncodedBytesIterator, this.replacementCodepoint);
-
- factory Utf16BytesToCodeUnitsDecoder(List<int> utf16EncodedBytes, [
- int offset = 0, int length,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- if (length == null) {
- length = utf16EncodedBytes.length - offset;
- }
- if (hasUtf16beBom(utf16EncodedBytes, offset, length)) {
- return new Utf16beBytesToCodeUnitsDecoder(utf16EncodedBytes, offset + 2,
- length - 2, false, replacementCodepoint);
- } else if (hasUtf16leBom(utf16EncodedBytes, offset, length)) {
- return new Utf16leBytesToCodeUnitsDecoder(utf16EncodedBytes, offset + 2,
- length - 2, false, replacementCodepoint);
- } else {
- return new Utf16beBytesToCodeUnitsDecoder(utf16EncodedBytes, offset,
- length, false, replacementCodepoint);
- }
- }
-
- /**
- * Provides a fast way to decode the rest of the source bytes in a single
- * call. This method trades memory for improved speed in that it potentially
- * over-allocates the List containing results.
- */
- List<int> decodeRest() {
- List<int> codeunits = new List<int>(remaining);
- int i = 0;
- while (moveNext()) {
- codeunits[i++] = current;
- }
- if (i == codeunits.length) {
- return codeunits;
- } else {
- List<int> truncCodeunits = new List<int>(i);
- truncCodeunits.setRange(0, i, codeunits);
- return truncCodeunits;
- }
- }
-
- int get current => _current;
-
- bool moveNext() {
- _current = null;
- int remaining = utf16EncodedBytesIterator.remaining;
- if (remaining == 0) {
- _current = null;
- return false;
- }
- if (remaining == 1) {
- utf16EncodedBytesIterator.moveNext();
- if (replacementCodepoint != null) {
- _current = replacementCodepoint;
- return true;
- } else {
- throw new ArgumentError(
- "Invalid UTF16 at ${utf16EncodedBytesIterator.position}");
- }
- }
- _current = decode();
- return true;
- }
-
- int get position => utf16EncodedBytesIterator.position ~/ 2;
-
- void backup([int by = 1]) {
- utf16EncodedBytesIterator.backup(2 * by);
- }
-
- int get remaining => (utf16EncodedBytesIterator.remaining + 1) ~/ 2;
-
- void skip([int count = 1]) {
- utf16EncodedBytesIterator.skip(2 * count);
- }
-
- int decode();
-}
-
-/**
- * Convert UTF-16BE encoded bytes to utf16 code units by grouping 1-2 bytes
- * to produce the code unit (0-(2^16)-1).
- */
-class Utf16beBytesToCodeUnitsDecoder extends Utf16BytesToCodeUnitsDecoder {
- Utf16beBytesToCodeUnitsDecoder(List<int> utf16EncodedBytes, [
- int offset = 0, int length, bool stripBom = true,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) :
- super._fromListRangeIterator(
- (new ListRange(utf16EncodedBytes, offset, length)).iterator,
- replacementCodepoint) {
- if (stripBom && hasUtf16beBom(utf16EncodedBytes, offset, length)) {
- skip();
- }
- }
-
- int decode() {
- utf16EncodedBytesIterator.moveNext();
- int hi = utf16EncodedBytesIterator.current;
- utf16EncodedBytesIterator.moveNext();
- int lo = utf16EncodedBytesIterator.current;
- return (hi << 8) + lo;
- }
-}
-
-/**
- * Convert UTF-16LE encoded bytes to utf16 code units by grouping 1-2 bytes
- * to produce the code unit (0-(2^16)-1).
- */
-class Utf16leBytesToCodeUnitsDecoder extends Utf16BytesToCodeUnitsDecoder {
- Utf16leBytesToCodeUnitsDecoder(List<int> utf16EncodedBytes, [
- int offset = 0, int length, bool stripBom = true,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) :
- super._fromListRangeIterator(
- (new ListRange(utf16EncodedBytes, offset, length)).iterator,
- replacementCodepoint) {
- if (stripBom && hasUtf16leBom(utf16EncodedBytes, offset, length)) {
- skip();
- }
- }
-
- int decode() {
- utf16EncodedBytesIterator.moveNext();
- int lo = utf16EncodedBytesIterator.current;
- utf16EncodedBytesIterator.moveNext();
- int hi = utf16EncodedBytesIterator.current;
- return (hi << 8) + lo;
- }
-}
diff --git a/pkg/utf/lib/src/utf/utf32.dart b/pkg/utf/lib/src/utf/utf32.dart
deleted file mode 100644
index e51009d..0000000
--- a/pkg/utf/lib/src/utf/utf32.dart
+++ /dev/null
@@ -1,343 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of utf;
-
-/**
- * Decodes the UTF-32 bytes as an iterable. Thus, the consumer can only convert
- * as much of the input as needed. Determines the byte order from the BOM,
- * or uses big-endian as a default. This method always strips a leading BOM.
- * Set the replacementCharacter to null to throw an ArgumentError
- * rather than replace the bad value.
- */
-IterableUtf32Decoder decodeUtf32AsIterable(List<int> bytes, [
- int offset = 0, int length,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- return new IterableUtf32Decoder._(
- () => new Utf32BytesDecoder(bytes, offset, length, replacementCodepoint));
-}
-
-/**
- * Decodes the UTF-32BE bytes as an iterable. Thus, the consumer can only convert
- * as much of the input as needed. This method strips a leading BOM by default,
- * but can be overridden by setting the optional parameter [stripBom] to false.
- * Set the replacementCharacter to null to throw an ArgumentError
- * rather than replace the bad value.
- */
-IterableUtf32Decoder decodeUtf32beAsIterable(List<int> bytes, [
- int offset = 0, int length, bool stripBom = true,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- return new IterableUtf32Decoder._(
- () => new Utf32beBytesDecoder(bytes, offset, length, stripBom,
- replacementCodepoint));
-}
-
-/**
- * Decodes the UTF-32LE bytes as an iterable. Thus, the consumer can only convert
- * as much of the input as needed. This method strips a leading BOM by default,
- * but can be overridden by setting the optional parameter [stripBom] to false.
- * Set the replacementCharacter to null to throw an ArgumentError
- * rather than replace the bad value.
- */
-IterableUtf32Decoder decodeUtf32leAsIterable(List<int> bytes, [
- int offset = 0, int length, bool stripBom = true,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- return new IterableUtf32Decoder._(
- () => new Utf32leBytesDecoder(bytes, offset, length, stripBom,
- replacementCodepoint));
-}
-
-/**
- * Produce a String from a sequence of UTF-32 encoded bytes. The parameters
- * allow an offset into a list of bytes (as int), limiting the length of the
- * values be decoded and the ability of override the default Unicode
- * replacement character. Set the replacementCharacter to null to throw an
- * ArgumentError rather than replace the bad value.
- */
-String decodeUtf32(List<int> bytes, [int offset = 0, int length,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- return new String.fromCharCodes((new Utf32BytesDecoder(bytes, offset, length,
- replacementCodepoint)).decodeRest());
-}
-/**
- * Produce a String from a sequence of UTF-32BE encoded bytes. The parameters
- * allow an offset into a list of bytes (as int), limiting the length of the
- * values be decoded and the ability of override the default Unicode
- * replacement character. Set the replacementCharacter to null to throw an
- * ArgumentError rather than replace the bad value.
- */
-String decodeUtf32be(
- List<int> bytes, [int offset = 0, int length, bool stripBom = true,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) =>
- new String.fromCharCodes((new Utf32beBytesDecoder(bytes, offset, length,
- stripBom, replacementCodepoint)).decodeRest());
-
-/**
- * Produce a String from a sequence of UTF-32LE encoded bytes. The parameters
- * allow an offset into a list of bytes (as int), limiting the length of the
- * values be decoded and the ability of override the default Unicode
- * replacement character. Set the replacementCharacter to null to throw an
- * ArgumentError rather than replace the bad value.
- */
-String decodeUtf32le(
- List<int> bytes, [int offset = 0, int length, bool stripBom = true,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) =>
- new String.fromCharCodes((new Utf32leBytesDecoder(bytes, offset, length,
- stripBom, replacementCodepoint)).decodeRest());
-
-/**
- * Produce a list of UTF-32 encoded bytes. This method prefixes the resulting
- * bytes with a big-endian byte-order-marker.
- */
-List<int> encodeUtf32(String str) =>
- encodeUtf32be(str, true);
-
-/**
- * Produce a list of UTF-32BE encoded bytes. By default, this method produces
- * UTF-32BE bytes with no BOM.
- */
-List<int> encodeUtf32be(String str, [bool writeBOM = false]) {
- List<int> utf32CodeUnits = stringToCodepoints(str);
- List<int> encoding = new List<int>(4 * utf32CodeUnits.length +
- (writeBOM ? 4 : 0));
- int i = 0;
- if (writeBOM) {
- encoding[i++] = 0;
- encoding[i++] = 0;
- encoding[i++] = UNICODE_UTF_BOM_HI;
- encoding[i++] = UNICODE_UTF_BOM_LO;
- }
- for (int unit in utf32CodeUnits) {
- encoding[i++] = (unit >> 24) & UNICODE_BYTE_ZERO_MASK;
- encoding[i++] = (unit >> 16) & UNICODE_BYTE_ZERO_MASK;
- encoding[i++] = (unit >> 8) & UNICODE_BYTE_ZERO_MASK;
- encoding[i++] = unit & UNICODE_BYTE_ZERO_MASK;
- }
- return encoding;
-}
-
-/**
- * Produce a list of UTF-32LE encoded bytes. By default, this method produces
- * UTF-32BE bytes with no BOM.
- */
-List<int> encodeUtf32le(String str, [bool writeBOM = false]) {
- List<int> utf32CodeUnits = stringToCodepoints(str);
- List<int> encoding = new List<int>(4 * utf32CodeUnits.length +
- (writeBOM ? 4 : 0));
- int i = 0;
- if (writeBOM) {
- encoding[i++] = UNICODE_UTF_BOM_LO;
- encoding[i++] = UNICODE_UTF_BOM_HI;
- encoding[i++] = 0;
- encoding[i++] = 0;
- }
- for (int unit in utf32CodeUnits) {
- encoding[i++] = unit & UNICODE_BYTE_ZERO_MASK;
- encoding[i++] = (unit >> 8) & UNICODE_BYTE_ZERO_MASK;
- encoding[i++] = (unit >> 16) & UNICODE_BYTE_ZERO_MASK;
- encoding[i++] = (unit >> 24) & UNICODE_BYTE_ZERO_MASK;
- }
- return encoding;
-}
-
-/**
- * Identifies whether a List of bytes starts (based on offset) with a
- * byte-order marker (BOM).
- */
-bool hasUtf32Bom(
- List<int> utf32EncodedBytes, [int offset = 0, int length]) {
- return hasUtf32beBom(utf32EncodedBytes, offset, length) ||
- hasUtf32leBom(utf32EncodedBytes, offset, length);
-}
-
-/**
- * Identifies whether a List of bytes starts (based on offset) with a
- * big-endian byte-order marker (BOM).
- */
-bool hasUtf32beBom(List<int> utf32EncodedBytes, [int offset = 0, int length]) {
- int end = length != null ? offset + length : utf32EncodedBytes.length;
- return (offset + 4) <= end &&
- utf32EncodedBytes[offset] == 0 && utf32EncodedBytes[offset + 1] == 0 &&
- utf32EncodedBytes[offset + 2] == UNICODE_UTF_BOM_HI &&
- utf32EncodedBytes[offset + 3] == UNICODE_UTF_BOM_LO;
-}
-
-/**
- * Identifies whether a List of bytes starts (based on offset) with a
- * little-endian byte-order marker (BOM).
- */
-bool hasUtf32leBom(List<int> utf32EncodedBytes, [int offset = 0, int length]) {
- int end = length != null ? offset + length : utf32EncodedBytes.length;
- return (offset + 4) <= end &&
- utf32EncodedBytes[offset] == UNICODE_UTF_BOM_LO &&
- utf32EncodedBytes[offset + 1] == UNICODE_UTF_BOM_HI &&
- utf32EncodedBytes[offset + 2] == 0 && utf32EncodedBytes[offset + 3] == 0;
-}
-
-typedef Utf32BytesDecoder Utf32BytesDecoderProvider();
-
-/**
- * Return type of [decodeUtf32AsIterable] and variants. The Iterable type
- * provides an iterator on demand and the iterator will only translate bytes
- * as requested by the user of the iterator. (Note: results are not cached.)
- */
-// TODO(floitsch): Consider removing the extend and switch to implements since
-// that's cheaper to allocate.
-class IterableUtf32Decoder extends IterableBase<int> {
- final Utf32BytesDecoderProvider codeunitsProvider;
-
- IterableUtf32Decoder._(this.codeunitsProvider);
-
- Utf32BytesDecoder get iterator => codeunitsProvider();
-}
-
-/**
- * Abstrace parent class converts encoded bytes to codepoints.
- */
-abstract class Utf32BytesDecoder implements ListRangeIterator {
- // TODO(kevmoo): should this field be private?
- final ListRangeIterator utf32EncodedBytesIterator;
- final int replacementCodepoint;
- int _current = null;
-
- Utf32BytesDecoder._fromListRangeIterator(
- this.utf32EncodedBytesIterator, this.replacementCodepoint);
-
- factory Utf32BytesDecoder(List<int> utf32EncodedBytes, [
- int offset = 0, int length,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- if (length == null) {
- length = utf32EncodedBytes.length - offset;
- }
- if (hasUtf32beBom(utf32EncodedBytes, offset, length)) {
- return new Utf32beBytesDecoder(utf32EncodedBytes, offset + 4, length - 4,
- false, replacementCodepoint);
- } else if (hasUtf32leBom(utf32EncodedBytes, offset, length)) {
- return new Utf32leBytesDecoder(utf32EncodedBytes, offset + 4, length - 4,
- false, replacementCodepoint);
- } else {
- return new Utf32beBytesDecoder(utf32EncodedBytes, offset, length, false,
- replacementCodepoint);
- }
- }
-
- List<int> decodeRest() {
- List<int> codeunits = new List<int>(remaining);
- int i = 0;
- while (moveNext()) {
- codeunits[i++] = current;
- }
- return codeunits;
- }
-
- int get current => _current;
-
- bool moveNext() {
- _current = null;
- int remaining = utf32EncodedBytesIterator.remaining;
- if (remaining == 0) {
- _current = null;
- return false;
- }
- if (remaining < 4) {
- utf32EncodedBytesIterator.skip(utf32EncodedBytesIterator.remaining);
- if (replacementCodepoint != null) {
- _current = replacementCodepoint;
- return true;
- } else {
- throw new ArgumentError(
- "Invalid UTF32 at ${utf32EncodedBytesIterator.position}");
- }
- }
- int codepoint = decode();
- if (_validCodepoint(codepoint)) {
- _current = codepoint;
- return true;
- } else if (replacementCodepoint != null) {
- _current = replacementCodepoint;
- return true;
- } else {
- throw new ArgumentError(
- "Invalid UTF32 at ${utf32EncodedBytesIterator.position}");
- }
- }
-
- int get position => utf32EncodedBytesIterator.position ~/ 4;
-
- void backup([int by = 1]) {
- utf32EncodedBytesIterator.backup(4 * by);
- }
-
- int get remaining => (utf32EncodedBytesIterator.remaining + 3) ~/ 4;
-
- void skip([int count = 1]) {
- utf32EncodedBytesIterator.skip(4 * count);
- }
-
- int decode();
-}
-
-/**
- * Convert UTF-32BE encoded bytes to codepoints by grouping 4 bytes
- * to produce the unicode codepoint.
- */
-class Utf32beBytesDecoder extends Utf32BytesDecoder {
- Utf32beBytesDecoder(List<int> utf32EncodedBytes, [int offset = 0,
- int length, bool stripBom = true,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) :
- super._fromListRangeIterator(
- (new ListRange(utf32EncodedBytes, offset, length)).iterator,
- replacementCodepoint) {
- if (stripBom && hasUtf32beBom(utf32EncodedBytes, offset, length)) {
- skip();
- }
- }
-
- int decode() {
- utf32EncodedBytesIterator.moveNext();
- int value = utf32EncodedBytesIterator.current;
- utf32EncodedBytesIterator.moveNext();
- value = (value << 8) + utf32EncodedBytesIterator.current;
- utf32EncodedBytesIterator.moveNext();
- value = (value << 8) + utf32EncodedBytesIterator.current;
- utf32EncodedBytesIterator.moveNext();
- value = (value << 8) + utf32EncodedBytesIterator.current;
- return value;
- }
-}
-
-/**
- * Convert UTF-32BE encoded bytes to codepoints by grouping 4 bytes
- * to produce the unicode codepoint.
- */
-class Utf32leBytesDecoder extends Utf32BytesDecoder {
- Utf32leBytesDecoder(List<int> utf32EncodedBytes, [int offset = 0,
- int length, bool stripBom = true,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) :
- super._fromListRangeIterator(
- (new ListRange(utf32EncodedBytes, offset, length)).iterator,
- replacementCodepoint) {
- if (stripBom && hasUtf32leBom(utf32EncodedBytes, offset, length)) {
- skip();
- }
- }
-
- int decode() {
- utf32EncodedBytesIterator.moveNext();
- int value = utf32EncodedBytesIterator.current;
- utf32EncodedBytesIterator.moveNext();
- value += (utf32EncodedBytesIterator.current << 8);
- utf32EncodedBytesIterator.moveNext();
- value += (utf32EncodedBytesIterator.current << 16);
- utf32EncodedBytesIterator.moveNext();
- value += (utf32EncodedBytesIterator.current << 24);
- return value;
- }
-}
-
-bool _validCodepoint(int codepoint) {
- return (codepoint >= 0 && codepoint < UNICODE_UTF16_RESERVED_LO) ||
- (codepoint > UNICODE_UTF16_RESERVED_HI &&
- codepoint < UNICODE_VALID_RANGE_MAX);
-}
diff --git a/pkg/utf/lib/src/utf/utf8.dart b/pkg/utf/lib/src/utf/utf8.dart
deleted file mode 100644
index ff1b1ed..0000000
--- a/pkg/utf/lib/src/utf/utf8.dart
+++ /dev/null
@@ -1,276 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of utf;
-
-const int _UTF8_ONE_BYTE_MAX = 0x7f;
-const int _UTF8_TWO_BYTE_MAX = 0x7ff;
-const int _UTF8_THREE_BYTE_MAX = 0xffff;
-
-const int _UTF8_LO_SIX_BIT_MASK = 0x3f;
-
-const int _UTF8_FIRST_BYTE_OF_TWO_BASE = 0xc0;
-const int _UTF8_FIRST_BYTE_OF_THREE_BASE = 0xe0;
-const int _UTF8_FIRST_BYTE_OF_FOUR_BASE = 0xf0;
-const int _UTF8_FIRST_BYTE_OF_FIVE_BASE = 0xf8;
-const int _UTF8_FIRST_BYTE_OF_SIX_BASE = 0xfc;
-
-const int _UTF8_FIRST_BYTE_OF_TWO_MASK = 0x1f;
-const int _UTF8_FIRST_BYTE_OF_THREE_MASK = 0xf;
-const int _UTF8_FIRST_BYTE_OF_FOUR_MASK = 0x7;
-
-const int _UTF8_FIRST_BYTE_BOUND_EXCL = 0xfe;
-const int _UTF8_SUBSEQUENT_BYTE_BASE = 0x80;
-
-/**
- * Decodes the UTF-8 bytes as an iterable. Thus, the consumer can only convert
- * as much of the input as needed. Set the replacementCharacter to null to
- * throw an ArgumentError rather than replace the bad value.
- */
-IterableUtf8Decoder decodeUtf8AsIterable(List<int> bytes, [int offset = 0,
- int length,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- return new IterableUtf8Decoder(bytes, offset, length, replacementCodepoint);
-}
-
-/**
- * Produce a String from a List of UTF-8 encoded bytes. The parameters
- * can set an offset into a list of bytes (as int), limit the length of the
- * values to be decoded, and override the default Unicode replacement character.
- * Set the replacementCharacter to null to throw an ArgumentError
- * rather than replace the bad value.
- */
-String decodeUtf8(List<int> bytes, [int offset = 0, int length,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- return new String.fromCharCodes(
- (new Utf8Decoder(bytes, offset, length, replacementCodepoint))
- .decodeRest());
-}
-
-/**
- * Produce a sequence of UTF-8 encoded bytes from the provided string.
- */
-List<int> encodeUtf8(String str) =>
- codepointsToUtf8(stringToCodepoints(str));
-
-int _addToEncoding(int offset, int bytes, int value, List<int> buffer) {
- while (bytes > 0) {
- buffer[offset + bytes] = _UTF8_SUBSEQUENT_BYTE_BASE |
- (value & _UTF8_LO_SIX_BIT_MASK);
- value = value >> 6;
- bytes--;
- }
- return value;
-}
-
-/**
- * Encode code points as UTF-8 code units.
- */
-List<int> codepointsToUtf8(
- List<int> codepoints, [int offset = 0, int length]) {
- ListRange source = new ListRange(codepoints, offset, length);
-
- int encodedLength = 0;
- for (int value in source) {
- if (value < 0 || value > UNICODE_VALID_RANGE_MAX) {
- encodedLength += 3;
- } else if (value <= _UTF8_ONE_BYTE_MAX) {
- encodedLength++;
- } else if (value <= _UTF8_TWO_BYTE_MAX) {
- encodedLength += 2;
- } else if (value <= _UTF8_THREE_BYTE_MAX) {
- encodedLength += 3;
- } else if (value <= UNICODE_VALID_RANGE_MAX) {
- encodedLength += 4;
- }
- }
-
- List<int> encoded = new List<int>(encodedLength);
- int insertAt = 0;
- for (int value in source) {
- if (value < 0 || value > UNICODE_VALID_RANGE_MAX) {
- encoded.setRange(insertAt, insertAt + 3, [0xef, 0xbf, 0xbd]);
- insertAt += 3;
- } else if (value <= _UTF8_ONE_BYTE_MAX) {
- encoded[insertAt] = value;
- insertAt++;
- } else if (value <= _UTF8_TWO_BYTE_MAX) {
- encoded[insertAt] = _UTF8_FIRST_BYTE_OF_TWO_BASE | (
- _UTF8_FIRST_BYTE_OF_TWO_MASK &
- _addToEncoding(insertAt, 1, value, encoded));
- insertAt += 2;
- } else if (value <= _UTF8_THREE_BYTE_MAX) {
- encoded[insertAt] = _UTF8_FIRST_BYTE_OF_THREE_BASE | (
- _UTF8_FIRST_BYTE_OF_THREE_MASK &
- _addToEncoding(insertAt, 2, value, encoded));
- insertAt += 3;
- } else if (value <= UNICODE_VALID_RANGE_MAX) {
- encoded[insertAt] = _UTF8_FIRST_BYTE_OF_FOUR_BASE | (
- _UTF8_FIRST_BYTE_OF_FOUR_MASK &
- _addToEncoding(insertAt, 3, value, encoded));
- insertAt += 4;
- }
- }
- return encoded;
-}
-
-// Because UTF-8 specifies byte order, we do not have to follow the pattern
-// used by UTF-16 & UTF-32 regarding byte order.
-List<int> utf8ToCodepoints(
- List<int> utf8EncodedBytes, [int offset = 0, int length,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- return new Utf8Decoder(utf8EncodedBytes, offset, length,
- replacementCodepoint).decodeRest();
-}
-
-/**
- * Return type of [decodeUtf8AsIterable] and variants. The Iterable type
- * provides an iterator on demand and the iterator will only translate bytes
- * as requested by the user of the iterator. (Note: results are not cached.)
- */
-// TODO(floitsch): Consider removing the extend and switch to implements since
-// that's cheaper to allocate.
-class IterableUtf8Decoder extends IterableBase<int> {
- final List<int> bytes;
- final int offset;
- final int length;
- final int replacementCodepoint;
-
- IterableUtf8Decoder(this.bytes, [this.offset = 0, this.length = null,
- this.replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]);
-
- Utf8Decoder get iterator =>
- new Utf8Decoder(bytes, offset, length, replacementCodepoint);
-}
-
-/**
- * Provides an iterator of Unicode codepoints from UTF-8 encoded bytes. The
- * parameters can set an offset into a list of bytes (as int), limit the length
- * of the values to be decoded, and override the default Unicode replacement
- * character. Set the replacementCharacter to null to throw an
- * ArgumentError rather than replace the bad value. The return value
- * from this method can be used as an Iterable (e.g. in a for-loop).
- */
-class Utf8Decoder implements Iterator<int> {
- // TODO(kevmoo): should this field be private?
- final ListRangeIterator utf8EncodedBytesIterator;
- final int replacementCodepoint;
- int _current = null;
-
- Utf8Decoder(List<int> utf8EncodedBytes, [int offset = 0, int length,
- this.replacementCodepoint =
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) :
- utf8EncodedBytesIterator =
- (new ListRange(utf8EncodedBytes, offset, length)).iterator;
-
-
- Utf8Decoder._fromListRangeIterator(ListRange source, [
- this.replacementCodepoint =
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) :
- utf8EncodedBytesIterator = source.iterator;
-
- /** Decode the remaininder of the characters in this decoder
- * into a [List<int>].
- */
- List<int> decodeRest() {
- List<int> codepoints = new List<int>(utf8EncodedBytesIterator.remaining);
- int i = 0;
- while (moveNext()) {
- codepoints[i++] = current;
- }
- if (i == codepoints.length) {
- return codepoints;
- } else {
- List<int> truncCodepoints = new List<int>(i);
- truncCodepoints.setRange(0, i, codepoints);
- return truncCodepoints;
- }
- }
-
- int get current => _current;
-
- bool moveNext() {
- _current = null;
-
- if (!utf8EncodedBytesIterator.moveNext()) return false;
-
- int value = utf8EncodedBytesIterator.current;
- int additionalBytes = 0;
-
- if (value < 0) {
- if (replacementCodepoint != null) {
- _current = replacementCodepoint;
- return true;
- } else {
- throw new ArgumentError(
- "Invalid UTF8 at ${utf8EncodedBytesIterator.position}");
- }
- } else if (value <= _UTF8_ONE_BYTE_MAX) {
- _current = value;
- return true;
- } else if (value < _UTF8_FIRST_BYTE_OF_TWO_BASE) {
- if (replacementCodepoint != null) {
- _current = replacementCodepoint;
- return true;
- } else {
- throw new ArgumentError(
- "Invalid UTF8 at ${utf8EncodedBytesIterator.position}");
- }
- } else if (value < _UTF8_FIRST_BYTE_OF_THREE_BASE) {
- value -= _UTF8_FIRST_BYTE_OF_TWO_BASE;
- additionalBytes = 1;
- } else if (value < _UTF8_FIRST_BYTE_OF_FOUR_BASE) {
- value -= _UTF8_FIRST_BYTE_OF_THREE_BASE;
- additionalBytes = 2;
- } else if (value < _UTF8_FIRST_BYTE_OF_FIVE_BASE) {
- value -= _UTF8_FIRST_BYTE_OF_FOUR_BASE;
- additionalBytes = 3;
- } else if (value < _UTF8_FIRST_BYTE_OF_SIX_BASE) {
- value -= _UTF8_FIRST_BYTE_OF_FIVE_BASE;
- additionalBytes = 4;
- } else if (value < _UTF8_FIRST_BYTE_BOUND_EXCL) {
- value -= _UTF8_FIRST_BYTE_OF_SIX_BASE;
- additionalBytes = 5;
- } else if (replacementCodepoint != null) {
- _current = replacementCodepoint;
- return true;
- } else {
- throw new ArgumentError(
- "Invalid UTF8 at ${utf8EncodedBytesIterator.position}");
- }
- int j = 0;
- while (j < additionalBytes && utf8EncodedBytesIterator.moveNext()) {
- int nextValue = utf8EncodedBytesIterator.current;
- if (nextValue > _UTF8_ONE_BYTE_MAX &&
- nextValue < _UTF8_FIRST_BYTE_OF_TWO_BASE) {
- value = ((value << 6) | (nextValue & _UTF8_LO_SIX_BIT_MASK));
- } else {
- // if sequence-starting code unit, reposition cursor to start here
- if (nextValue >= _UTF8_FIRST_BYTE_OF_TWO_BASE) {
- utf8EncodedBytesIterator.backup();
- }
- break;
- }
- j++;
- }
- bool validSequence = (j == additionalBytes && (
- value < UNICODE_UTF16_RESERVED_LO ||
- value > UNICODE_UTF16_RESERVED_HI));
- bool nonOverlong =
- (additionalBytes == 1 && value > _UTF8_ONE_BYTE_MAX) ||
- (additionalBytes == 2 && value > _UTF8_TWO_BYTE_MAX) ||
- (additionalBytes == 3 && value > _UTF8_THREE_BYTE_MAX);
- bool inRange = value <= UNICODE_VALID_RANGE_MAX;
- if (validSequence && nonOverlong && inRange) {
- _current = value;
- return true;
- } else if (replacementCodepoint != null) {
- _current = replacementCodepoint;
- return true;
- } else {
- throw new ArgumentError(
- "Invalid UTF8 at ${utf8EncodedBytesIterator.position - j}");
- }
- }
-}
diff --git a/pkg/utf/lib/src/utf/utf_stream.dart b/pkg/utf/lib/src/utf/utf_stream.dart
deleted file mode 100644
index 0936616..0000000
--- a/pkg/utf/lib/src/utf/utf_stream.dart
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of utf;
-
-// TODO(floitsch): make this transformer reusable.
-abstract class _StringDecoder
- implements StreamTransformer<List<int>, String>, EventSink<List<int>> {
- List<int> _carry;
- List<int> _buffer;
- int _replacementChar;
-
- EventSink<String> _outSink;
-
- _StringDecoder(int this._replacementChar);
-
- Stream<String> bind(Stream<List<int>> stream) {
- return new Stream.eventTransformed(
- stream,
- (EventSink<String> sink) {
- if (_outSink != null) {
- throw new StateError("String decoder already used");
- }
- _outSink = sink;
- return this;
- });
- }
-
- void add(List<int> bytes) {
- try {
- _buffer = <int>[];
- List<int> carry = _carry;
- _carry = null;
- int pos = 0;
- int available = bytes.length;
- // If we have carry-over data, start from negative index, indicating carry
- // index.
- int goodChars = 0;
- if (carry != null) pos = -carry.length;
- while (pos < available) {
- int currentPos = pos;
- int getNext() {
- if (pos < 0) {
- return carry[pos++ + carry.length];
- } else if (pos < available) {
- return bytes[pos++];
- }
- return null;
- }
- int consumed = _processBytes(getNext);
- if (consumed > 0) {
- goodChars = _buffer.length;
- } else if (consumed == 0) {
- _buffer.length = goodChars;
- if (currentPos < 0) {
- _carry = [];
- _carry.addAll(carry);
- _carry.addAll(bytes);
- } else {
- _carry = bytes.sublist(currentPos);
- }
- break;
- } else {
- // Invalid byte at position pos - 1
- _buffer.length = goodChars;
- _addChar(-1);
- goodChars = _buffer.length;
- }
- }
- if (_buffer.length > 0) {
- // Limit to 'goodChars', if lower than actual charCodes in the buffer.
- _outSink.add(new String.fromCharCodes(_buffer));
- }
- _buffer = null;
- } catch (e, stackTrace) {
- _outSink.addError(e, stackTrace);
- }
- }
-
- void addError(error, [StackTrace stackTrace]) {
- _outSink.addError(error, stackTrace);
- }
-
- void close() {
- if (_carry != null) {
- if (_replacementChar != null) {
- _outSink.add(new String.fromCharCodes(
- new List.filled(_carry.length, _replacementChar)));
- } else {
- throw new ArgumentError('Invalid codepoint');
- }
- }
- _outSink.close();
- }
-
- int _processBytes(int getNext());
-
- void _addChar(int char) {
- void error() {
- if (_replacementChar != null) {
- char = _replacementChar;
- } else {
- throw new ArgumentError('Invalid codepoint');
- }
- }
- if (char < 0) error();
- if (char >= 0xD800 && char <= 0xDFFF) error();
- if (char > 0x10FFFF) error();
- _buffer.add(char);
- }
-}
-
-/**
- * StringTransformer that decodes a stream of UTF-8 encoded bytes.
- */
-class Utf8DecoderTransformer extends _StringDecoder {
- Utf8DecoderTransformer(
- [int replacementChar = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT])
- : super(replacementChar);
-
- int _processBytes(int getNext()) {
- int value = getNext();
- if ((value & 0xFF) != value) return -1; // Not a byte.
- if ((value & 0x80) == 0x80) {
- int additionalBytes;
- int min;
- if ((value & 0xe0) == 0xc0) { // 110xxxxx
- value = value & 0x1F;
- additionalBytes = 1;
- min = 0x80;
- } else if ((value & 0xf0) == 0xe0) { // 1110xxxx
- value = value & 0x0F;
- additionalBytes = 2;
- min = 0x800;
- } else if ((value & 0xf8) == 0xf0) { // 11110xxx
- value = value & 0x07;
- additionalBytes = 3;
- min = 0x10000;
- } else if ((value & 0xfc) == 0xf8) { // 111110xx
- value = value & 0x03;
- additionalBytes = 4;
- min = 0x200000;
- } else if ((value & 0xfe) == 0xfc) { // 1111110x
- value = value & 0x01;
- additionalBytes = 5;
- min = 0x4000000;
- } else {
- return -1;
- }
- for (int i = 0; i < additionalBytes; i++) {
- int next = getNext();
- if (next == null) return 0; // Not enough chars, reset.
- if ((next & 0xc0) != 0x80 || (next & 0xff) != next) return -1;
- value = value << 6 | (next & 0x3f);
- if (additionalBytes >= 3 && i == 0 && value << 12 > 0x10FFFF) {
- _addChar(-1);
- }
- }
- // Invalid charCode if less then minimum expected.
- if (value < min) value = -1;
- _addChar(value);
- return 1 + additionalBytes;
- }
- _addChar(value);
- return 1;
- }
-}
-
-
-abstract class _StringEncoder
- implements StreamTransformer<String, List<int>>, EventSink<String> {
-
- EventSink<List<int>> _outSink;
-
- Stream<List<int>> bind(Stream<String> stream) {
- return new Stream.eventTransformed(
- stream,
- (EventSink<List<int>> sink) {
- if (_outSink != null) {
- throw new StateError("String encoder already used");
- }
- _outSink = sink;
- return this;
- });
- }
-
- void add(String data) {
- _outSink.add(_processString(data));
- }
-
- void addError(error, [StackTrace stackTrace]) {
- _outSink.addError(error, stackTrace);
- }
-
- void close() { _outSink.close(); }
-
- List<int> _processString(String string);
-}
-
-/**
- * StringTransformer that UTF-8 encodes a stream of strings.
- */
-class Utf8EncoderTransformer extends _StringEncoder {
- List<int> _processString(String string) {
- var bytes = <int>[];
- int pos = 0;
- List<int> codepoints = utf16CodeUnitsToCodepoints(string.codeUnits);
- int length = codepoints.length;
- for (int i = 0; i < length; i++) {
- int additionalBytes;
- int charCode = codepoints[i];
- if (charCode <= 0x007F) {
- additionalBytes = 0;
- bytes.add(charCode);
- } else if (charCode <= 0x07FF) {
- // 110xxxxx (xxxxx is top 5 bits).
- bytes.add(((charCode >> 6) & 0x1F) | 0xC0);
- additionalBytes = 1;
- } else if (charCode <= 0xFFFF) {
- // 1110xxxx (xxxx is top 4 bits)
- bytes.add(((charCode >> 12) & 0x0F)| 0xE0);
- additionalBytes = 2;
- } else {
- // 11110xxx (xxx is top 3 bits)
- bytes.add(((charCode >> 18) & 0x07) | 0xF0);
- additionalBytes = 3;
- }
- for (int i = additionalBytes; i > 0; i--) {
- // 10xxxxxx (xxxxxx is next 6 bits from the top).
- bytes.add(((charCode >> (6 * (i - 1))) & 0x3F) | 0x80);
- }
- pos += additionalBytes + 1;
- }
- return bytes;
- }
-}
diff --git a/pkg/utf/lib/src/utf_16_code_unit_decoder.dart b/pkg/utf/lib/src/utf_16_code_unit_decoder.dart
deleted file mode 100644
index a0a4b3c..0000000
--- a/pkg/utf/lib/src/utf_16_code_unit_decoder.dart
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library utf.utf_16_code_unit_decoder;
-
-import 'constants.dart';
-import 'list_range.dart';
-
-/**
- * An Iterator<int> of codepoints built on an Iterator of UTF-16 code units.
- * The parameters can override the default Unicode replacement character. Set
- * the replacementCharacter to null to throw an ArgumentError
- * rather than replace the bad value.
- */
-class Utf16CodeUnitDecoder implements Iterator<int> {
- // TODO(kevmoo): should this field be private?
- final ListRangeIterator utf16CodeUnitIterator;
- final int replacementCodepoint;
- int _current = null;
-
- Utf16CodeUnitDecoder(List<int> utf16CodeUnits, [int offset = 0, int length,
- int this.replacementCodepoint =
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) :
- utf16CodeUnitIterator =
- (new ListRange(utf16CodeUnits, offset, length)).iterator;
-
- Utf16CodeUnitDecoder.fromListRangeIterator(
- ListRangeIterator this.utf16CodeUnitIterator,
- int this.replacementCodepoint);
-
- Iterator<int> get iterator => this;
-
- int get current => _current;
-
- bool moveNext() {
- _current = null;
- if (!utf16CodeUnitIterator.moveNext()) return false;
-
- int value = utf16CodeUnitIterator.current;
- if (value < 0) {
- if (replacementCodepoint != null) {
- _current = replacementCodepoint;
- } else {
- throw new ArgumentError(
- "Invalid UTF16 at ${utf16CodeUnitIterator.position}");
- }
- } else if (value < UNICODE_UTF16_RESERVED_LO ||
- (value > UNICODE_UTF16_RESERVED_HI && value <= UNICODE_PLANE_ONE_MAX)) {
- // transfer directly
- _current = value;
- } else if (value < UNICODE_UTF16_SURROGATE_UNIT_1_BASE &&
- utf16CodeUnitIterator.moveNext()) {
- // merge surrogate pair
- int nextValue = utf16CodeUnitIterator.current;
- if (nextValue >= UNICODE_UTF16_SURROGATE_UNIT_1_BASE &&
- nextValue <= UNICODE_UTF16_RESERVED_HI) {
- value = (value - UNICODE_UTF16_SURROGATE_UNIT_0_BASE) << 10;
- value += UNICODE_UTF16_OFFSET +
- (nextValue - UNICODE_UTF16_SURROGATE_UNIT_1_BASE);
- _current = value;
- } else {
- if (nextValue >= UNICODE_UTF16_SURROGATE_UNIT_0_BASE &&
- nextValue < UNICODE_UTF16_SURROGATE_UNIT_1_BASE) {
- utf16CodeUnitIterator.backup();
- }
- if (replacementCodepoint != null) {
- _current = replacementCodepoint;
- } else {
- throw new ArgumentError(
- "Invalid UTF16 at ${utf16CodeUnitIterator.position}");
- }
- }
- } else if (replacementCodepoint != null) {
- _current = replacementCodepoint;
- } else {
- throw new ArgumentError(
- "Invalid UTF16 at ${utf16CodeUnitIterator.position}");
- }
- return true;
- }
-}
-
diff --git a/pkg/utf/lib/src/util.dart b/pkg/utf/lib/src/util.dart
deleted file mode 100644
index 17427d5..0000000
--- a/pkg/utf/lib/src/util.dart
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library utf.util;
-
-import 'constants.dart';
-import 'list_range.dart';
-import 'utf_16_code_unit_decoder.dart';
-
-/**
- * Decodes the utf16 codeunits to codepoints.
- */
-List<int> utf16CodeUnitsToCodepoints(
- List<int> utf16CodeUnits, [int offset = 0, int length,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
- ListRangeIterator source =
- (new ListRange(utf16CodeUnits, offset, length)).iterator;
- Utf16CodeUnitDecoder decoder = new Utf16CodeUnitDecoder
- .fromListRangeIterator(source, replacementCodepoint);
- List<int> codepoints = new List<int>(source.remaining);
- int i = 0;
- while (decoder.moveNext()) {
- codepoints[i++] = decoder.current;
- }
- if (i == codepoints.length) {
- return codepoints;
- } else {
- List<int> codepointTrunc = new List<int>(i);
- codepointTrunc.setRange(0, i, codepoints);
- return codepointTrunc;
- }
-}
-
-/**
- * Encode code points as UTF16 code units.
- */
-List<int> codepointsToUtf16CodeUnits(
- List<int> codepoints,
- [int offset = 0,
- int length,
- int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
-
- ListRange listRange = new ListRange(codepoints, offset, length);
- int encodedLength = 0;
- for (int value in listRange) {
- if ((value >= 0 && value < UNICODE_UTF16_RESERVED_LO) ||
- (value > UNICODE_UTF16_RESERVED_HI && value <= UNICODE_PLANE_ONE_MAX)) {
- encodedLength++;
- } else if (value > UNICODE_PLANE_ONE_MAX &&
- value <= UNICODE_VALID_RANGE_MAX) {
- encodedLength += 2;
- } else {
- encodedLength++;
- }
- }
-
- List<int> codeUnitsBuffer = new List<int>(encodedLength);
- int j = 0;
- for (int value in listRange) {
- if ((value >= 0 && value < UNICODE_UTF16_RESERVED_LO) ||
- (value > UNICODE_UTF16_RESERVED_HI && value <= UNICODE_PLANE_ONE_MAX)) {
- codeUnitsBuffer[j++] = value;
- } else if (value > UNICODE_PLANE_ONE_MAX &&
- value <= UNICODE_VALID_RANGE_MAX) {
- int base = value - UNICODE_UTF16_OFFSET;
- codeUnitsBuffer[j++] = UNICODE_UTF16_SURROGATE_UNIT_0_BASE +
- ((base & UNICODE_UTF16_HI_MASK) >> 10);
- codeUnitsBuffer[j++] = UNICODE_UTF16_SURROGATE_UNIT_1_BASE +
- (base & UNICODE_UTF16_LO_MASK);
- } else if (replacementCodepoint != null) {
- codeUnitsBuffer[j++] = replacementCodepoint;
- } else {
- throw new ArgumentError("Invalid encoding");
- }
- }
- return codeUnitsBuffer;
-}
diff --git a/pkg/utf/lib/utf.dart b/pkg/utf/lib/utf.dart
deleted file mode 100644
index 30d5db5..0000000
--- a/pkg/utf/lib/utf.dart
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * Support for encoding and decoding Unicode characters in UTF-8, UTF-16, and
- * UTF-32.
- */
-library utf;
-
-import "dart:async";
-import "dart:collection";
-
-import "src/constants.dart";
-import 'src/utf_16_code_unit_decoder.dart';
-import 'src/list_range.dart';
-import 'src/util.dart';
-
-export 'src/constants.dart';
-export 'src/utf_16_code_unit_decoder.dart';
-
-part "src/utf/utf_stream.dart";
-part "src/utf/utf8.dart";
-part "src/utf/utf16.dart";
-part "src/utf/utf32.dart";
diff --git a/pkg/utf/pubspec.yaml b/pkg/utf/pubspec.yaml
deleted file mode 100644
index 519bed4..0000000
--- a/pkg/utf/pubspec.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-name: utf
-version: 0.9.0+2
-author: Dart Team <misc@dartlang.org>
-description: >
- A Unicode library. Intended for advanced use where the built-in facilities
- are too limiting.
-homepage: https://pub.dartlang.org/packages/utf
-environment:
- sdk: '>=1.0.0 <2.0.0'
diff --git a/pkg/utf/test/unicode_core_test.dart b/pkg/utf/test/unicode_core_test.dart
deleted file mode 100755
index 6e13e96..0000000
--- a/pkg/utf/test/unicode_core_test.dart
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library utf.unicode_core_test;
-
-import 'package:expect/expect.dart';
-
-import 'package:utf/utf.dart';
-import 'package:utf/src/util.dart';
-
-void main() {
- testCodepointsToUtf16CodeUnits();
- testUtf16bytesToCodepoints();
-}
-
-void testCodepointsToUtf16CodeUnits() {
- // boundary conditions
- Expect.listEquals([], codepointsToUtf16CodeUnits([]), "no input");
- Expect.listEquals([0x0], codepointsToUtf16CodeUnits([0x0]), "0");
- Expect.listEquals([0xd800, 0xdc00],
- codepointsToUtf16CodeUnits([0x10000]), "10000");
-
- Expect.listEquals([0xffff],
- codepointsToUtf16CodeUnits([0xffff]), "ffff");
- Expect.listEquals([0xdbff, 0xdfff],
- codepointsToUtf16CodeUnits([0x10ffff]), "10ffff");
-
- Expect.listEquals([0xd7ff],
- codepointsToUtf16CodeUnits([0xd7ff]), "d7ff");
- Expect.listEquals([0xe000],
- codepointsToUtf16CodeUnits([0xe000]), "e000");
-
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- codepointsToUtf16CodeUnits([0xd800]), "d800");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- codepointsToUtf16CodeUnits([0xdfff]), "dfff");
-}
-
-void testUtf16bytesToCodepoints() {
- // boundary conditions: First possible values
- Expect.listEquals([], utf16CodeUnitsToCodepoints([]), "no input");
- Expect.listEquals([0x0], utf16CodeUnitsToCodepoints([0x0]), "0");
- Expect.listEquals([0x10000],
- utf16CodeUnitsToCodepoints([0xd800, 0xdc00]), "10000");
-
- // boundary conditions: Last possible sequence of a certain length
- Expect.listEquals([0xffff],
- utf16CodeUnitsToCodepoints([0xffff]), "ffff");
- Expect.listEquals([0x10ffff],
- utf16CodeUnitsToCodepoints([0xdbff, 0xdfff]), "10ffff");
-
- // other boundary conditions
- Expect.listEquals([0xd7ff],
- utf16CodeUnitsToCodepoints([0xd7ff]), "d7ff");
- Expect.listEquals([0xe000],
- utf16CodeUnitsToCodepoints([0xe000]), "e000");
-
- // unexpected continuation bytes
- Expect.listEquals([0xfffd],
- utf16CodeUnitsToCodepoints([0xdc00]),
- "dc00 first unexpected continuation byte");
- Expect.listEquals([0xfffd],
- utf16CodeUnitsToCodepoints([0xdfff]),
- "dfff last unexpected continuation byte");
- Expect.listEquals([0xfffd],
- utf16CodeUnitsToCodepoints([0xdc00]),
- "1 unexpected continuation bytes");
- Expect.listEquals([0xfffd, 0xfffd],
- utf16CodeUnitsToCodepoints([0xdc00, 0xdc00]),
- "2 unexpected continuation bytes");
- Expect.listEquals([0xfffd, 0xfffd ,0xfffd],
- utf16CodeUnitsToCodepoints([0xdc00, 0xdc00, 0xdc00]),
- "3 unexpected continuation bytes");
-
- // incomplete sequences
- Expect.listEquals([0xfffd], utf16CodeUnitsToCodepoints([0xd800]),
- "d800 last byte missing");
- Expect.listEquals([0xfffd], utf16CodeUnitsToCodepoints([0xdbff]),
- "dbff last byte missing");
-
- // concatenation of incomplete sequences
- Expect.listEquals([0xfffd, 0xfffd],
- utf16CodeUnitsToCodepoints([0xd800, 0xdbff]),
- "d800 dbff last byte missing");
-
- // impossible bytes
- Expect.listEquals([0xfffd], utf16CodeUnitsToCodepoints([0x110000]),
- "110000 out of bounds");
-
- // overlong sequences not possible in utf16 (nothing < x10000)
- // illegal code positions d800-dfff not encodable (< x10000)
-}
diff --git a/pkg/utf/test/utf16_test.dart b/pkg/utf/test/utf16_test.dart
deleted file mode 100755
index 43971ca..0000000
--- a/pkg/utf/test/utf16_test.dart
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library utf.utf16_test;
-
-import 'package:expect/expect.dart';
-import 'package:utf/utf.dart';
-
-const String testKoreanCharSubset = """
-가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛
-개객갞갟갠갡갢갣갤갥갦갧갨갩갪갫갬갭갮갯갰갱갲갳갴갵갶갷
-갸갹갺갻갼갽갾갿걀걁걂걃걄걅걆걇걈걉걊걋걌걍걎걏걐걑걒걓""";
-
-const String testHanWater = "水";
-
-const List<int> testKoreanCharSubsetUtf16beBom = const<int>[
- 0xfe, 0xff, 0xac, 0x00, 0xac, 0x01, 0xac, 0x02,
- 0xac, 0x03, 0xac, 0x04, 0xac, 0x05, 0xac, 0x06,
- 0xac, 0x07, 0xac, 0x08, 0xac, 0x09, 0xac, 0x0a,
- 0xac, 0x0b, 0xac, 0x0c, 0xac, 0x0d, 0xac, 0x0e,
- 0xac, 0x0f, 0xac, 0x10, 0xac, 0x11, 0xac, 0x12,
- 0xac, 0x13, 0xac, 0x14, 0xac, 0x15, 0xac, 0x16,
- 0xac, 0x17, 0xac, 0x18, 0xac, 0x19, 0xac, 0x1a,
- 0xac, 0x1b, 0x00, 0x0a, 0xac, 0x1c, 0xac, 0x1d,
- 0xac, 0x1e, 0xac, 0x1f, 0xac, 0x20, 0xac, 0x21,
- 0xac, 0x22, 0xac, 0x23, 0xac, 0x24, 0xac, 0x25,
- 0xac, 0x26, 0xac, 0x27, 0xac, 0x28, 0xac, 0x29,
- 0xac, 0x2a, 0xac, 0x2b, 0xac, 0x2c, 0xac, 0x2d,
- 0xac, 0x2e, 0xac, 0x2f, 0xac, 0x30, 0xac, 0x31,
- 0xac, 0x32, 0xac, 0x33, 0xac, 0x34, 0xac, 0x35,
- 0xac, 0x36, 0xac, 0x37, 0x00, 0x0a, 0xac, 0x38,
- 0xac, 0x39, 0xac, 0x3a, 0xac, 0x3b, 0xac, 0x3c,
- 0xac, 0x3d, 0xac, 0x3e, 0xac, 0x3f, 0xac, 0x40,
- 0xac, 0x41, 0xac, 0x42, 0xac, 0x43, 0xac, 0x44,
- 0xac, 0x45, 0xac, 0x46, 0xac, 0x47, 0xac, 0x48,
- 0xac, 0x49, 0xac, 0x4a, 0xac, 0x4b, 0xac, 0x4c,
- 0xac, 0x4d, 0xac, 0x4e, 0xac, 0x4f, 0xac, 0x50,
- 0xac, 0x51, 0xac, 0x52, 0xac, 0x53];
-
-const List<int> testKoreanCharSubsetUtf16le = const<int> [
- 0x00, 0xac, 0x01, 0xac, 0x02, 0xac, 0x03, 0xac,
- 0x04, 0xac, 0x05, 0xac, 0x06, 0xac, 0x07, 0xac,
- 0x08, 0xac, 0x09, 0xac, 0x0a, 0xac, 0x0b, 0xac,
- 0x0c, 0xac, 0x0d, 0xac, 0x0e, 0xac, 0x0f, 0xac,
- 0x10, 0xac, 0x11, 0xac, 0x12, 0xac, 0x13, 0xac,
- 0x14, 0xac, 0x15, 0xac, 0x16, 0xac, 0x17, 0xac,
- 0x18, 0xac, 0x19, 0xac, 0x1a, 0xac, 0x1b, 0xac,
- 0x0a, 0x00, 0x1c, 0xac, 0x1d, 0xac, 0x1e, 0xac,
- 0x1f, 0xac, 0x20, 0xac, 0x21, 0xac, 0x22, 0xac,
- 0x23, 0xac, 0x24, 0xac, 0x25, 0xac, 0x26, 0xac,
- 0x27, 0xac, 0x28, 0xac, 0x29, 0xac, 0x2a, 0xac,
- 0x2b, 0xac, 0x2c, 0xac, 0x2d, 0xac, 0x2e, 0xac,
- 0x2f, 0xac, 0x30, 0xac, 0x31, 0xac, 0x32, 0xac,
- 0x33, 0xac, 0x34, 0xac, 0x35, 0xac, 0x36, 0xac,
- 0x37, 0xac, 0x0a, 0x00, 0x38, 0xac, 0x39, 0xac,
- 0x3a, 0xac, 0x3b, 0xac, 0x3c, 0xac, 0x3d, 0xac,
- 0x3e, 0xac, 0x3f, 0xac, 0x40, 0xac, 0x41, 0xac,
- 0x42, 0xac, 0x43, 0xac, 0x44, 0xac, 0x45, 0xac,
- 0x46, 0xac, 0x47, 0xac, 0x48, 0xac, 0x49, 0xac,
- 0x4a, 0xac, 0x4b, 0xac, 0x4c, 0xac, 0x4d, 0xac,
- 0x4e, 0xac, 0x4f, 0xac, 0x50, 0xac, 0x51, 0xac,
- 0x52, 0xac, 0x53, 0xac];
-
-void main() {
- testEncodeToUtf16();
- testUtf16BytesToString();
- testIterableMethods();
-}
-
-void testEncodeToUtf16() {
- Expect.listEquals([], encodeUtf16be("")); // TODO(dcarlson) should we skip bom if empty?
- Expect.listEquals(testKoreanCharSubsetUtf16beBom,
- encodeUtf16(testKoreanCharSubset),
- "encode UTF-16(BE by default) Korean");
-
- Expect.listEquals(testKoreanCharSubsetUtf16le,
- encodeUtf16le(testKoreanCharSubset),
- "encode UTF-16LE Korean");
-}
-
-void testUtf16BytesToString() {
- Expect.stringEquals("", decodeUtf16([]));
- Expect.stringEquals(testHanWater, decodeUtf16([0x6C, 0x34]),
- "Water variation 1");
- Expect.stringEquals(testHanWater, decodeUtf16([0xFE, 0xFF, 0x6C, 0x34]),
- "Water variation 2");
- Expect.stringEquals(testHanWater, decodeUtf16([0xFF, 0xFE, 0x34, 0x6C]),
- "Water variation 3");
-
- Expect.stringEquals(testHanWater, decodeUtf16be([0x6C, 0x34]),
- "Water variation 4");
- Expect.stringEquals(testHanWater,
- decodeUtf16be([0xFE, 0xFF, 0x6C, 0x34]),
- "Water variation 5");
-
- Expect.stringEquals(testHanWater, decodeUtf16le([0x34, 0x6C]),
- "Water variation 6");
- Expect.stringEquals(testHanWater,
- decodeUtf16le([0xFF, 0xFE, 0x34, 0x6C]),
- "Water variation 7");
-
- Expect.stringEquals(testKoreanCharSubset,
- decodeUtf16(testKoreanCharSubsetUtf16beBom), "UTF-16BE Korean");
-}
-
-void testIterableMethods() {
- // empty input
- Expect.isFalse(decodeUtf16AsIterable([]).iterator.moveNext());
-
- IterableUtf16Decoder koreanDecoder =
- decodeUtf16AsIterable(testKoreanCharSubsetUtf16beBom);
- // get the first character
- Expect.equals(testKoreanCharSubset.codeUnits[0], koreanDecoder.first);
- // get the whole translation using the Iterable interface
- Expect.stringEquals(testKoreanCharSubset,
- new String.fromCharCodes(new List<int>.from(koreanDecoder)));
-
- // specify types
- Expect.equals(44032, (new List<int>
- .from(decodeUtf16beAsIterable(testKoreanCharSubsetUtf16beBom)))[0]);
- Expect.equals(44032, (new List<int>
- .from(decodeUtf16leAsIterable(testKoreanCharSubsetUtf16le)))[0]);
- bool stripBom = false;
- Expect.equals(UNICODE_BOM, (new List<int>
- .from(decodeUtf16beAsIterable(testKoreanCharSubsetUtf16beBom,
- 0, null, stripBom)))[0]);
-}
diff --git a/pkg/utf/test/utf32_test.dart b/pkg/utf/test/utf32_test.dart
deleted file mode 100755
index 1a60a6f..0000000
--- a/pkg/utf/test/utf32_test.dart
+++ /dev/null
@@ -1,179 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library utf.utf32_test;
-
-import 'package:expect/expect.dart';
-import 'package:utf/utf.dart';
-
-const String testKoreanCharSubset = """
-가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛
-개객갞갟갠갡갢갣갤갥갦갧갨갩갪갫갬갭갮갯갰갱갲갳갴갵갶갷
-갸갹갺갻갼갽갾갿걀걁걂걃걄걅걆걇걈걉걊걋걌걍걎걏걐걑걒걓""";
-
-const String testHanTwice = "二";
-
-const List<int> testKoreanCharSubsetUtf32beBom = const<int>[
- 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0xac, 0x00,
- 0x00, 0x00, 0xac, 0x01, 0x00, 0x00, 0xac, 0x02,
- 0x00, 0x00, 0xac, 0x03, 0x00, 0x00, 0xac, 0x04,
- 0x00, 0x00, 0xac, 0x05, 0x00, 0x00, 0xac, 0x06,
- 0x00, 0x00, 0xac, 0x07, 0x00, 0x00, 0xac, 0x08,
- 0x00, 0x00, 0xac, 0x09, 0x00, 0x00, 0xac, 0x0a,
- 0x00, 0x00, 0xac, 0x0b, 0x00, 0x00, 0xac, 0x0c,
- 0x00, 0x00, 0xac, 0x0d, 0x00, 0x00, 0xac, 0x0e,
- 0x00, 0x00, 0xac, 0x0f, 0x00, 0x00, 0xac, 0x10,
- 0x00, 0x00, 0xac, 0x11, 0x00, 0x00, 0xac, 0x12,
- 0x00, 0x00, 0xac, 0x13, 0x00, 0x00, 0xac, 0x14,
- 0x00, 0x00, 0xac, 0x15, 0x00, 0x00, 0xac, 0x16,
- 0x00, 0x00, 0xac, 0x17, 0x00, 0x00, 0xac, 0x18,
- 0x00, 0x00, 0xac, 0x19, 0x00, 0x00, 0xac, 0x1a,
- 0x00, 0x00, 0xac, 0x1b, 0x00, 0x00, 0x00, 0x0a,
- 0x00, 0x00, 0xac, 0x1c, 0x00, 0x00, 0xac, 0x1d,
- 0x00, 0x00, 0xac, 0x1e, 0x00, 0x00, 0xac, 0x1f,
- 0x00, 0x00, 0xac, 0x20, 0x00, 0x00, 0xac, 0x21,
- 0x00, 0x00, 0xac, 0x22, 0x00, 0x00, 0xac, 0x23,
- 0x00, 0x00, 0xac, 0x24, 0x00, 0x00, 0xac, 0x25,
- 0x00, 0x00, 0xac, 0x26, 0x00, 0x00, 0xac, 0x27,
- 0x00, 0x00, 0xac, 0x28, 0x00, 0x00, 0xac, 0x29,
- 0x00, 0x00, 0xac, 0x2a, 0x00, 0x00, 0xac, 0x2b,
- 0x00, 0x00, 0xac, 0x2c, 0x00, 0x00, 0xac, 0x2d,
- 0x00, 0x00, 0xac, 0x2e, 0x00, 0x00, 0xac, 0x2f,
- 0x00, 0x00, 0xac, 0x30, 0x00, 0x00, 0xac, 0x31,
- 0x00, 0x00, 0xac, 0x32, 0x00, 0x00, 0xac, 0x33,
- 0x00, 0x00, 0xac, 0x34, 0x00, 0x00, 0xac, 0x35,
- 0x00, 0x00, 0xac, 0x36, 0x00, 0x00, 0xac, 0x37,
- 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0xac, 0x38,
- 0x00, 0x00, 0xac, 0x39, 0x00, 0x00, 0xac, 0x3a,
- 0x00, 0x00, 0xac, 0x3b, 0x00, 0x00, 0xac, 0x3c,
- 0x00, 0x00, 0xac, 0x3d, 0x00, 0x00, 0xac, 0x3e,
- 0x00, 0x00, 0xac, 0x3f, 0x00, 0x00, 0xac, 0x40,
- 0x00, 0x00, 0xac, 0x41, 0x00, 0x00, 0xac, 0x42,
- 0x00, 0x00, 0xac, 0x43, 0x00, 0x00, 0xac, 0x44,
- 0x00, 0x00, 0xac, 0x45, 0x00, 0x00, 0xac, 0x46,
- 0x00, 0x00, 0xac, 0x47, 0x00, 0x00, 0xac, 0x48,
- 0x00, 0x00, 0xac, 0x49, 0x00, 0x00, 0xac, 0x4a,
- 0x00, 0x00, 0xac, 0x4b, 0x00, 0x00, 0xac, 0x4c,
- 0x00, 0x00, 0xac, 0x4d, 0x00, 0x00, 0xac, 0x4e,
- 0x00, 0x00, 0xac, 0x4f, 0x00, 0x00, 0xac, 0x50,
- 0x00, 0x00, 0xac, 0x51, 0x00, 0x00, 0xac, 0x52,
- 0x00, 0x00, 0xac, 0x53];
-
-const List<int> testKoreanCharSubsetUtf32le = const<int>[
- 0x00, 0xac, 0x00, 0x00, 0x01, 0xac, 0x00, 0x00,
- 0x02, 0xac, 0x00, 0x00, 0x03, 0xac, 0x00, 0x00,
- 0x04, 0xac, 0x00, 0x00, 0x05, 0xac, 0x00, 0x00,
- 0x06, 0xac, 0x00, 0x00, 0x07, 0xac, 0x00, 0x00,
- 0x08, 0xac, 0x00, 0x00, 0x09, 0xac, 0x00, 0x00,
- 0x0a, 0xac, 0x00, 0x00, 0x0b, 0xac, 0x00, 0x00,
- 0x0c, 0xac, 0x00, 0x00, 0x0d, 0xac, 0x00, 0x00,
- 0x0e, 0xac, 0x00, 0x00, 0x0f, 0xac, 0x00, 0x00,
- 0x10, 0xac, 0x00, 0x00, 0x11, 0xac, 0x00, 0x00,
- 0x12, 0xac, 0x00, 0x00, 0x13, 0xac, 0x00, 0x00,
- 0x14, 0xac, 0x00, 0x00, 0x15, 0xac, 0x00, 0x00,
- 0x16, 0xac, 0x00, 0x00, 0x17, 0xac, 0x00, 0x00,
- 0x18, 0xac, 0x00, 0x00, 0x19, 0xac, 0x00, 0x00,
- 0x1a, 0xac, 0x00, 0x00, 0x1b, 0xac, 0x00, 0x00,
- 0x0a, 0x00, 0x00, 0x00, 0x1c, 0xac, 0x00, 0x00,
- 0x1d, 0xac, 0x00, 0x00, 0x1e, 0xac, 0x00, 0x00,
- 0x1f, 0xac, 0x00, 0x00, 0x20, 0xac, 0x00, 0x00,
- 0x21, 0xac, 0x00, 0x00, 0x22, 0xac, 0x00, 0x00,
- 0x23, 0xac, 0x00, 0x00, 0x24, 0xac, 0x00, 0x00,
- 0x25, 0xac, 0x00, 0x00, 0x26, 0xac, 0x00, 0x00,
- 0x27, 0xac, 0x00, 0x00, 0x28, 0xac, 0x00, 0x00,
- 0x29, 0xac, 0x00, 0x00, 0x2a, 0xac, 0x00, 0x00,
- 0x2b, 0xac, 0x00, 0x00, 0x2c, 0xac, 0x00, 0x00,
- 0x2d, 0xac, 0x00, 0x00, 0x2e, 0xac, 0x00, 0x00,
- 0x2f, 0xac, 0x00, 0x00, 0x30, 0xac, 0x00, 0x00,
- 0x31, 0xac, 0x00, 0x00, 0x32, 0xac, 0x00, 0x00,
- 0x33, 0xac, 0x00, 0x00, 0x34, 0xac, 0x00, 0x00,
- 0x35, 0xac, 0x00, 0x00, 0x36, 0xac, 0x00, 0x00,
- 0x37, 0xac, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
- 0x38, 0xac, 0x00, 0x00, 0x39, 0xac, 0x00, 0x00,
- 0x3a, 0xac, 0x00, 0x00, 0x3b, 0xac, 0x00, 0x00,
- 0x3c, 0xac, 0x00, 0x00, 0x3d, 0xac, 0x00, 0x00,
- 0x3e, 0xac, 0x00, 0x00, 0x3f, 0xac, 0x00, 0x00,
- 0x40, 0xac, 0x00, 0x00, 0x41, 0xac, 0x00, 0x00,
- 0x42, 0xac, 0x00, 0x00, 0x43, 0xac, 0x00, 0x00,
- 0x44, 0xac, 0x00, 0x00, 0x45, 0xac, 0x00, 0x00,
- 0x46, 0xac, 0x00, 0x00, 0x47, 0xac, 0x00, 0x00,
- 0x48, 0xac, 0x00, 0x00, 0x49, 0xac, 0x00, 0x00,
- 0x4a, 0xac, 0x00, 0x00, 0x4b, 0xac, 0x00, 0x00,
- 0x4c, 0xac, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00,
- 0x4e, 0xac, 0x00, 0x00, 0x4f, 0xac, 0x00, 0x00,
- 0x50, 0xac, 0x00, 0x00, 0x51, 0xac, 0x00, 0x00,
- 0x52, 0xac, 0x00, 0x00, 0x53, 0xac, 0x00, 0x00];
-
-void main() {
- testUtf32BytesToString();
- testEncodeToUtf32();
- testIterableMethods();
-}
-
-void testEncodeToUtf32() {
- Expect.listEquals([], encodeUtf32le(""), "no input"); // TODO(dcarlson) skip bom on empty?
- Expect.listEquals(testKoreanCharSubsetUtf32beBom,
- encodeUtf32(testKoreanCharSubset),
- "encode UTF-32(BE by default) Korean");
- Expect.listEquals(testKoreanCharSubsetUtf32le,
- encodeUtf32le(testKoreanCharSubset),
- "encode UTF-32(LE by default) Korean");
-}
-
-void testUtf32BytesToString() {
- Expect.stringEquals("", decodeUtf32([]), "no input");
- Expect.stringEquals("\ufffd", decodeUtf32([0]), "single byte");
- Expect.stringEquals("\ufffd", decodeUtf32([0, 0, 0x4e]),
- "short a byte");
- Expect.stringEquals("\u4e8c\ufffd", decodeUtf32([0, 0, 0x4e, 0x8c, 0]),
- "extra byte");
-
- Expect.stringEquals(testHanTwice, decodeUtf32([0, 0, 0x4e, 0x8c]),
- "twice variation 1");
- Expect.stringEquals(testHanTwice,
- decodeUtf32([0, 0, 0xfe, 0xff, 0, 0, 0x4e, 0x8c]),
- "twice variation 2");
- Expect.stringEquals(testHanTwice,
- decodeUtf32([0xff, 0xfe, 0, 0, 0x8c, 0x4e, 0, 0]),
- "twice variation 3");
-
- Expect.stringEquals(testHanTwice, decodeUtf32be([0, 0, 0x4e, 0x8c]),
- "twice variation 4");
- Expect.stringEquals(testHanTwice,
- decodeUtf32be([0, 0, 0xfe, 0xff, 0, 0, 0x4e, 0x8c]),
- "twice variation 5");
-
- Expect.stringEquals(testHanTwice, decodeUtf32le([0x8c, 0x4e, 0, 0]),
- "twice variation 6");
- Expect.stringEquals(testHanTwice,
- decodeUtf32le([0xff, 0xfe, 0, 0, 0x8c, 0x4e, 0, 0]),
- "twice variation 7");
-
- Expect.stringEquals(testKoreanCharSubset,
- decodeUtf32(testKoreanCharSubsetUtf32beBom),
- "UTF-32BE Korean");
-}
-
-void testIterableMethods() {
- // empty input
- Expect.isFalse(decodeUtf32AsIterable([]).iterator.moveNext());
-
- IterableUtf32Decoder koreanDecoder =
- decodeUtf32AsIterable(testKoreanCharSubsetUtf32beBom);
- // get the first character
- Expect.equals(testKoreanCharSubset.codeUnits[0], koreanDecoder.first);
- // get the whole translation using the Iterable interface
- Expect.stringEquals(testKoreanCharSubset,
- new String.fromCharCodes(new List<int>.from(koreanDecoder)));
-
- // specify types
- Expect.equals(44032, (new List<int>
- .from(decodeUtf32beAsIterable(testKoreanCharSubsetUtf32beBom)))[0]);
- Expect.equals(44032, (new List<int>
- .from(decodeUtf32leAsIterable(testKoreanCharSubsetUtf32le)))[0]);
- bool stripBom = false;
- Expect.equals(UNICODE_BOM, (new List<int>
- .from(decodeUtf32beAsIterable(testKoreanCharSubsetUtf32beBom,
- 0, null, stripBom)))[0]);
-}
diff --git a/pkg/utf/test/utf82_test.dart b/pkg/utf/test/utf82_test.dart
deleted file mode 100755
index 7f8cec4..0000000
--- a/pkg/utf/test/utf82_test.dart
+++ /dev/null
@@ -1,465 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library utf.utf82_test;
-
-import 'package:expect/expect.dart';
-import 'package:utf/utf.dart';
-
-const String testEnglishPhrase =
- "The quick brown fox jumps over the lazy dog.";
-
-const List<int> testEnglishUtf8 = const<int> [
- 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63,
- 0x6b, 0x20, 0x62, 0x72, 0x6f, 0x77, 0x6e, 0x20,
- 0x66, 0x6f, 0x78, 0x20, 0x6a, 0x75, 0x6d, 0x70,
- 0x73, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74,
- 0x68, 0x65, 0x20, 0x6c, 0x61, 0x7a, 0x79, 0x20,
- 0x64, 0x6f, 0x67, 0x2e];
-
-const String testDanishPhrase = "Quizdeltagerne spiste jordbær med "
- "fløde mens cirkusklovnen Wolther spillede på xylofon.";
-
-const List<int> testDanishUtf8 = const<int>[
- 0x51, 0x75, 0x69, 0x7a, 0x64, 0x65, 0x6c, 0x74,
- 0x61, 0x67, 0x65, 0x72, 0x6e, 0x65, 0x20, 0x73,
- 0x70, 0x69, 0x73, 0x74, 0x65, 0x20, 0x6a, 0x6f,
- 0x72, 0x64, 0x62, 0xc3, 0xa6, 0x72, 0x20, 0x6d,
- 0x65, 0x64, 0x20, 0x66, 0x6c, 0xc3, 0xb8, 0x64,
- 0x65, 0x20, 0x6d, 0x65, 0x6e, 0x73, 0x20, 0x63,
- 0x69, 0x72, 0x6b, 0x75, 0x73, 0x6b, 0x6c, 0x6f,
- 0x76, 0x6e, 0x65, 0x6e, 0x20, 0x57, 0x6f, 0x6c,
- 0x74, 0x68, 0x65, 0x72, 0x20, 0x73, 0x70, 0x69,
- 0x6c, 0x6c, 0x65, 0x64, 0x65, 0x20, 0x70, 0xc3,
- 0xa5, 0x20, 0x78, 0x79, 0x6c, 0x6f, 0x66, 0x6f,
- 0x6e, 0x2e];
-
-// unusual formatting due to strange editor interaction w/ text direction.
-const String
- testHebrewPhrase = "דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה";
-
-const List<int> testHebrewUtf8 = const<int>[
- 0xd7, 0x93, 0xd7, 0x92, 0x20, 0xd7, 0xa1, 0xd7,
- 0xa7, 0xd7, 0xa8, 0xd7, 0x9f, 0x20, 0xd7, 0xa9,
- 0xd7, 0x98, 0x20, 0xd7, 0x91, 0xd7, 0x99, 0xd7,
- 0x9d, 0x20, 0xd7, 0x9e, 0xd7, 0x90, 0xd7, 0x95,
- 0xd7, 0x9b, 0xd7, 0x96, 0xd7, 0x91, 0x20, 0xd7,
- 0x95, 0xd7, 0x9c, 0xd7, 0xa4, 0xd7, 0xaa, 0xd7,
- 0xa2, 0x20, 0xd7, 0x9e, 0xd7, 0xa6, 0xd7, 0x90,
- 0x20, 0xd7, 0x9c, 0xd7, 0x95, 0x20, 0xd7, 0x97,
- 0xd7, 0x91, 0xd7, 0xa8, 0xd7, 0x94, 0x20, 0xd7,
- 0x90, 0xd7, 0x99, 0xd7, 0x9a, 0x20, 0xd7, 0x94,
- 0xd7, 0xa7, 0xd7, 0x9c, 0xd7, 0x99, 0xd7, 0x98,
- 0xd7, 0x94];
-
-const String testRussianPhrase = "Съешь же ещё этих мягких "
- "французских булок да выпей чаю";
-
-const List<int> testRussianUtf8 = const<int>[
- 0xd0, 0xa1, 0xd1, 0x8a, 0xd0, 0xb5, 0xd1, 0x88,
- 0xd1, 0x8c, 0x20, 0xd0, 0xb6, 0xd0, 0xb5, 0x20,
- 0xd0, 0xb5, 0xd1, 0x89, 0xd1, 0x91, 0x20, 0xd1,
- 0x8d, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, 0x85, 0x20,
- 0xd0, 0xbc, 0xd1, 0x8f, 0xd0, 0xb3, 0xd0, 0xba,
- 0xd0, 0xb8, 0xd1, 0x85, 0x20, 0xd1, 0x84, 0xd1,
- 0x80, 0xd0, 0xb0, 0xd0, 0xbd, 0xd1, 0x86, 0xd1,
- 0x83, 0xd0, 0xb7, 0xd1, 0x81, 0xd0, 0xba, 0xd0,
- 0xb8, 0xd1, 0x85, 0x20, 0xd0, 0xb1, 0xd1, 0x83,
- 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xba, 0x20, 0xd0,
- 0xb4, 0xd0, 0xb0, 0x20, 0xd0, 0xb2, 0xd1, 0x8b,
- 0xd0, 0xbf, 0xd0, 0xb5, 0xd0, 0xb9, 0x20, 0xd1,
- 0x87, 0xd0, 0xb0, 0xd1, 0x8e];
-
-const String testGreekPhrase = "Γαζέες καὶ μυρτιὲς δὲν θὰ βρῶ πιὰ "
- "στὸ χρυσαφὶ ξέφωτο";
-
-const List<int> testGreekUtf8 = const<int>[
- 0xce, 0x93, 0xce, 0xb1, 0xce, 0xb6, 0xce, 0xad,
- 0xce, 0xb5, 0xcf, 0x82, 0x20, 0xce, 0xba, 0xce,
- 0xb1, 0xe1, 0xbd, 0xb6, 0x20, 0xce, 0xbc, 0xcf,
- 0x85, 0xcf, 0x81, 0xcf, 0x84, 0xce, 0xb9, 0xe1,
- 0xbd, 0xb2, 0xcf, 0x82, 0x20, 0xce, 0xb4, 0xe1,
- 0xbd, 0xb2, 0xce, 0xbd, 0x20, 0xce, 0xb8, 0xe1,
- 0xbd, 0xb0, 0x20, 0xce, 0xb2, 0xcf, 0x81, 0xe1,
- 0xbf, 0xb6, 0x20, 0xcf, 0x80, 0xce, 0xb9, 0xe1,
- 0xbd, 0xb0, 0x20, 0xcf, 0x83, 0xcf, 0x84, 0xe1,
- 0xbd, 0xb8, 0x20, 0xcf, 0x87, 0xcf, 0x81, 0xcf,
- 0x85, 0xcf, 0x83, 0xce, 0xb1, 0xcf, 0x86, 0xe1,
- 0xbd, 0xb6, 0x20, 0xce, 0xbe, 0xce, 0xad, 0xcf,
- 0x86, 0xcf, 0x89, 0xcf, 0x84, 0xce, 0xbf];
-
-const String testKatakanaPhrase = """
-イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム
-ウヰノオクヤマ ケフコエテ アサキユメミシ ヱヒモセスン""";
-
-const List<int> testKatakanaUtf8 = const<int>[
- 0xe3, 0x82, 0xa4, 0xe3, 0x83, 0xad, 0xe3, 0x83,
- 0x8f, 0xe3, 0x83, 0x8b, 0xe3, 0x83, 0x9b, 0xe3,
- 0x83, 0x98, 0xe3, 0x83, 0x88, 0x20, 0xe3, 0x83,
- 0x81, 0xe3, 0x83, 0xaa, 0xe3, 0x83, 0x8c, 0xe3,
- 0x83, 0xab, 0xe3, 0x83, 0xb2, 0x20, 0xe3, 0x83,
- 0xaf, 0xe3, 0x82, 0xab, 0xe3, 0x83, 0xa8, 0xe3,
- 0x82, 0xbf, 0xe3, 0x83, 0xac, 0xe3, 0x82, 0xbd,
- 0x20, 0xe3, 0x83, 0x84, 0xe3, 0x83, 0x8d, 0xe3,
- 0x83, 0x8a, 0xe3, 0x83, 0xa9, 0xe3, 0x83, 0xa0,
- 0x0a, 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xb0, 0xe3,
- 0x83, 0x8e, 0xe3, 0x82, 0xaa, 0xe3, 0x82, 0xaf,
- 0xe3, 0x83, 0xa4, 0xe3, 0x83, 0x9e, 0x20, 0xe3,
- 0x82, 0xb1, 0xe3, 0x83, 0x95, 0xe3, 0x82, 0xb3,
- 0xe3, 0x82, 0xa8, 0xe3, 0x83, 0x86, 0x20, 0xe3,
- 0x82, 0xa2, 0xe3, 0x82, 0xb5, 0xe3, 0x82, 0xad,
- 0xe3, 0x83, 0xa6, 0xe3, 0x83, 0xa1, 0xe3, 0x83,
- 0x9f, 0xe3, 0x82, 0xb7, 0x20, 0xe3, 0x83, 0xb1,
- 0xe3, 0x83, 0x92, 0xe3, 0x83, 0xa2, 0xe3, 0x82,
- 0xbb, 0xe3, 0x82, 0xb9, 0xe3, 0x83, 0xb3];
-
-void main() {
- testUtf8bytesToCodepoints();
- testUtf8BytesToString();
- testEncodeToUtf8();
- testIterableMethods();
-}
-
-void testEncodeToUtf8() {
- Expect.listEquals(testEnglishUtf8, encodeUtf8(testEnglishPhrase),
- "english to utf8");
-
- Expect.listEquals(testDanishUtf8, encodeUtf8(testDanishPhrase),
- "encode danish to utf8");
-
- Expect.listEquals(testHebrewUtf8, encodeUtf8(testHebrewPhrase),
- "Hebrew to utf8");
-
- Expect.listEquals(testRussianUtf8, encodeUtf8(testRussianPhrase),
- "Russian to utf8");
-
- Expect.listEquals(testGreekUtf8, encodeUtf8(testGreekPhrase),
- "Greek to utf8");
-
- Expect.listEquals(testKatakanaUtf8, encodeUtf8(testKatakanaPhrase),
- "Katakana to utf8");
-}
-
-void testUtf8bytesToCodepoints() {
- Expect.listEquals([954, 972, 963, 956, 949],
- utf8ToCodepoints([0xce, 0xba, 0xcf, 0x8c, 0xcf,
- 0x83, 0xce, 0xbc, 0xce, 0xb5]), "κόσμε");
-
- // boundary conditions: First possible sequence of a certain length
- Expect.listEquals([], utf8ToCodepoints([]), "no input");
- Expect.listEquals([0x0], utf8ToCodepoints([0x0]), "0");
- Expect.listEquals([0x80], utf8ToCodepoints([0xc2, 0x80]), "80");
- Expect.listEquals([0x800],
- utf8ToCodepoints([0xe0, 0xa0, 0x80]), "800");
- Expect.listEquals([0x10000],
- utf8ToCodepoints([0xf0, 0x90, 0x80, 0x80]), "10000");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xf8, 0x88, 0x80, 0x80, 0x80]), "200000");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xfc, 0x84, 0x80, 0x80, 0x80, 0x80]),
- "4000000");
-
- // boundary conditions: Last possible sequence of a certain length
- Expect.listEquals([0x7f], utf8ToCodepoints([0x7f]), "7f");
- Expect.listEquals([0x7ff], utf8ToCodepoints([0xdf, 0xbf]), "7ff");
- Expect.listEquals([0xffff],
- utf8ToCodepoints([0xef, 0xbf, 0xbf]), "ffff");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xf7, 0xbf, 0xbf, 0xbf]), "1fffff");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xfb, 0xbf, 0xbf, 0xbf, 0xbf]), "3ffffff");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xfd, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf]),
- "4000000");
-
- // other boundary conditions
- Expect.listEquals([0xd7ff],
- utf8ToCodepoints([0xed, 0x9f, 0xbf]), "d7ff");
- Expect.listEquals([0xe000],
- utf8ToCodepoints([0xee, 0x80, 0x80]), "e000");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xef, 0xbf, 0xbd]), "fffd");
- Expect.listEquals([0x10ffff],
- utf8ToCodepoints([0xf4, 0x8f, 0xbf, 0xbf]), "10ffff");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xf4, 0x90, 0x80, 0x80]), "110000");
-
- // unexpected continuation bytes
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0x80]), "80 => replacement character");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xbf]), "bf => replacement character");
-
- List<int> allContinuationBytes = <int>[];
- List<int> matchingReplacementChars = <int>[];
- for (int i = 0x80; i < 0xc0; i++) {
- allContinuationBytes.add(i);
- matchingReplacementChars.add(UNICODE_REPLACEMENT_CHARACTER_CODEPOINT);
- }
- Expect.listEquals(matchingReplacementChars,
- utf8ToCodepoints(allContinuationBytes),
- "80 - bf => replacement character x 64");
-
- List<int> allFirstTwoByteSeq = <int>[];
- matchingReplacementChars = <int>[];
- for (int i = 0xc0; i < 0xe0; i++) {
- allFirstTwoByteSeq.addAll([i, 0x20]);
- matchingReplacementChars.addAll(
- [UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]);
- }
- Expect.listEquals(matchingReplacementChars,
- utf8ToCodepoints(allFirstTwoByteSeq),
- "c0 - df + space => replacement character + space x 32");
-
- List<int> allFirstThreeByteSeq = <int>[];
- matchingReplacementChars = <int>[];
- for (int i = 0xe0; i < 0xf0; i++) {
- allFirstThreeByteSeq.addAll([i, 0x20]);
- matchingReplacementChars.addAll(
- [UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]);
- }
- Expect.listEquals(matchingReplacementChars,
- utf8ToCodepoints(allFirstThreeByteSeq),
- "e0 - ef + space => replacement character x 16");
-
- List<int> allFirstFourByteSeq = <int>[];
- matchingReplacementChars = <int>[];
- for (int i = 0xf0; i < 0xf8; i++) {
- allFirstFourByteSeq.addAll([i, 0x20]);
- matchingReplacementChars.addAll(
- [UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]);
- }
- Expect.listEquals(matchingReplacementChars,
- utf8ToCodepoints(allFirstFourByteSeq),
- "f0 - f7 + space => replacement character x 8");
-
- List<int> allFirstFiveByteSeq = <int>[];
- matchingReplacementChars = <int>[];
- for (int i = 0xf8; i < 0xfc; i++) {
- allFirstFiveByteSeq.addAll([i, 0x20]);
- matchingReplacementChars.addAll(
- [UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]);
- }
- Expect.listEquals(matchingReplacementChars,
- utf8ToCodepoints(allFirstFiveByteSeq),
- "f8 - fb + space => replacement character x 4");
-
- List<int> allFirstSixByteSeq = <int>[];
- matchingReplacementChars = <int>[];
- for (int i = 0xfc; i < 0xfe; i++) {
- allFirstSixByteSeq.addAll([i, 0x20]);
- matchingReplacementChars.addAll(
- [UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]);
- }
- Expect.listEquals(matchingReplacementChars,
- utf8ToCodepoints(allFirstSixByteSeq),
- "fc - fd + space => replacement character x 2");
-
- // Sequences with last continuation byte missing
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xc2]),
- "2-byte sequence with last byte missing");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xe0, 0x80]),
- "3-byte sequence with last byte missing");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xf0, 0x80, 0x80]),
- "4-byte sequence with last byte missing");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xf8, 0x88, 0x80, 0x80]),
- "5-byte sequence with last byte missing");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xfc, 0x80, 0x80, 0x80, 0x80]),
- "6-byte sequence with last byte missing");
-
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xdf]),
- "2-byte sequence with last byte missing (hi)");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xef, 0xbf]),
- "3-byte sequence with last byte missing (hi)");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xf7, 0xbf, 0xbf]),
- "4-byte sequence with last byte missing (hi)");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xfb, 0xbf, 0xbf, 0xbf]),
- "5-byte sequence with last byte missing (hi)");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xfd, 0xbf, 0xbf, 0xbf, 0xbf]),
- "6-byte sequence with last byte missing (hi)");
-
- // Concatenation of incomplete sequences
- Expect.listEquals(
- [ UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT ],
- utf8ToCodepoints(
- [ 0xc2,
- 0xe0, 0x80,
- 0xf0, 0x80, 0x80,
- 0xf8, 0x88, 0x80, 0x80,
- 0xfc, 0x80, 0x80, 0x80, 0x80,
- 0xdf,
- 0xef, 0xbf,
- 0xf7, 0xbf, 0xbf,
- 0xfb, 0xbf, 0xbf, 0xbf,
- 0xfd, 0xbf, 0xbf, 0xbf, 0xbf ]),
- "Concatenation of incomplete sequences");
-
- // Impossible bytes
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xfe]), "fe");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xff]), "ff");
- Expect.listEquals([
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xfe, 0xfe, 0xff, 0xff]), "fe fe ff ff");
-
- // Overlong sequences
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xc0, 0xaf]), "c0 af");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xe0, 0x80, 0xaf]), "e0 80 af");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xf0, 0x80, 0x80, 0xaf]), "f0 80 80 af");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xf8, 0x80, 0x80, 0x80, 0xaf]), "f8 80 80 80 af");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xfc, 0x80, 0x80, 0x80, 0x80, 0xaf]),
- "fc 80 80 80 80 af");
-
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xc1, 0xbf]), "c1 bf");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xe0, 0x9f, 0xbf]), "e0 9f bf");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xf0, 0x8f, 0xbf, 0xbf]), "f0 8f bf bf");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xf8, 0x87, 0xbf, 0xbf, 0xbf]), "f8 87 bf bf bf");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xfc, 0x83, 0xbf, 0xbf, 0xbf, 0xbf]),
- "fc 83 bf bf bf bf");
-
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xc0, 0x80]), "c0 80");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xe0, 0x80, 0x80]), "e0 80 80");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xf0, 0x80, 0x80, 0x80]), "f0 80 80 80");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xf8, 0x80, 0x80, 0x80, 0x80]), "f8 80 80 80 80");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xfc, 0x80, 0x80, 0x80, 0x80, 0x80]),
- "fc 80 80 80 80 80");
-
- // Illegal code positions
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xa0, 0x80]), "U+D800");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xad, 0xbf]), "U+DB7F");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xae, 0x80]), "U+DB80");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xaf, 0xbf]), "U+DBFF");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xb0, 0x80]), "U+DC00");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xbe, 0x80]), "U+DF80");
- Expect.listEquals([UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xbf, 0xbf]), "U+DFFF");
-
- // Paired UTF-16 surrogates
- Expect.listEquals([
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xa0, 0x80, 0xed, 0xb0, 0x80]),
- "U+D800 U+DC00");
- Expect.listEquals([
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xa0, 0x80, 0xed, 0xbf, 0xbf]),
- "U+D800 U+DFFF");
- Expect.listEquals([
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xad, 0xbf, 0xed, 0xb0, 0x80]),
- "U+DB7F U+DC00");
- Expect.listEquals([
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xad, 0xbf, 0xed, 0xbf, 0xbf]),
- "U+DB7F U+DFFF");
- Expect.listEquals([
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xae, 0x80, 0xed, 0xb0, 0x80]),
- "U+DB80 U+DC00");
- Expect.listEquals([
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xae, 0x80, 0xed, 0xbf, 0xbf]),
- "U+DB80 U+DFFF");
- Expect.listEquals([
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xaf, 0xbf, 0xed, 0xb0, 0x80]),
- "U+DBFF U+DC00");
- Expect.listEquals([
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT,
- UNICODE_REPLACEMENT_CHARACTER_CODEPOINT],
- utf8ToCodepoints([0xed, 0xaf, 0xbf, 0xed, 0xbf, 0xbf]),
- "U+DBFF U+DFFF");
-
- // Other illegal code positions (???)
- Expect.listEquals([0xfffe], utf8ToCodepoints([0xef, 0xbf, 0xbe]),
- "U+FFFE");
- Expect.listEquals([0xffff], utf8ToCodepoints([0xef, 0xbf, 0xbf]),
- "U+FFFF");
-}
-
-void testUtf8BytesToString() {
- Expect.stringEquals(testEnglishPhrase,
- decodeUtf8(testEnglishUtf8), "English");
-
- Expect.stringEquals(testDanishPhrase,
- decodeUtf8(testDanishUtf8), "Danish");
-
- Expect.stringEquals(testHebrewPhrase,
- decodeUtf8(testHebrewUtf8), "Hebrew");
-
- Expect.stringEquals(testRussianPhrase,
- decodeUtf8(testRussianUtf8), "Russian");
-
- Expect.stringEquals(testGreekPhrase,
- decodeUtf8(testGreekUtf8), "Greek");
-
- Expect.stringEquals(testKatakanaPhrase,
- decodeUtf8(testKatakanaUtf8), "Katakana");
-}
-
-void testIterableMethods() {
- IterableUtf8Decoder englishDecoder = decodeUtf8AsIterable(testEnglishUtf8);
- // get the first character
- Expect.equals(testEnglishUtf8[0], englishDecoder.first);
- // get the whole translation using the Iterable interface
- Expect.stringEquals(testEnglishPhrase,
- new String.fromCharCodes(new List<int>.from(englishDecoder)));
-
- IterableUtf8Decoder kataDecoder = decodeUtf8AsIterable(testKatakanaUtf8);
- // get the first character
- Expect.equals(testKatakanaPhrase.codeUnits[0], kataDecoder.first);
- // get the whole translation using the Iterable interface
- Expect.stringEquals(testKatakanaPhrase,
- new String.fromCharCodes(new List<int>.from(kataDecoder)));
-}
diff --git a/pkg/utf/test/utf8_test.dart b/pkg/utf/test/utf8_test.dart
deleted file mode 100644
index 3e8c87e..0000000
--- a/pkg/utf/test/utf8_test.dart
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library utf.utf8_test;
-
-import "package:expect/expect.dart";
-import "package:utf/utf.dart";
-
-String decode(List<int> bytes) => decodeUtf8(bytes);
-
-main() {
- // Google favorite: "Îñţérñåţîöñåļîžåţîờñ".
- String string = decode([0xc3, 0x8e, 0xc3, 0xb1, 0xc5, 0xa3, 0xc3, 0xa9, 0x72,
- 0xc3, 0xb1, 0xc3, 0xa5, 0xc5, 0xa3, 0xc3, 0xae, 0xc3,
- 0xb6, 0xc3, 0xb1, 0xc3, 0xa5, 0xc4, 0xbc, 0xc3, 0xae,
- 0xc5, 0xbe, 0xc3, 0xa5, 0xc5, 0xa3, 0xc3, 0xae, 0xe1,
- 0xbb, 0x9d, 0xc3, 0xb1]);
- Expect.stringEquals("Îñţérñåţîöñåļîžåţîờñ", string);
-
- // Blueberry porridge in Danish: "blåbærgrød".
- string = decode([0x62, 0x6c, 0xc3, 0xa5, 0x62, 0xc3, 0xa6, 0x72, 0x67, 0x72,
- 0xc3, 0xb8, 0x64]);
- Expect.stringEquals("blåbærgrød", string);
-
- // "சிவா அணாமாைல", that is "Siva Annamalai" in Tamil.
- string = decode([0xe0, 0xae, 0x9a, 0xe0, 0xae, 0xbf, 0xe0, 0xae, 0xb5, 0xe0,
- 0xae, 0xbe, 0x20, 0xe0, 0xae, 0x85, 0xe0, 0xae, 0xa3, 0xe0,
- 0xae, 0xbe, 0xe0, 0xae, 0xae, 0xe0, 0xae, 0xbe, 0xe0, 0xaf,
- 0x88, 0xe0, 0xae, 0xb2]);
- Expect.stringEquals("சிவா அணாமாைல", string);
-
- // "िसवा अणामालै", that is "Siva Annamalai" in Devanagari.
- string = decode([0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xb5, 0xe0,
- 0xa4, 0xbe, 0x20, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xa3, 0xe0,
- 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4,
- 0xb2, 0xe0, 0xa5, 0x88]);
- Expect.stringEquals("िसवा अणामालै", string);
-
- // DESERET CAPITAL LETTER BEE, unicode 0x10412(0xD801+0xDC12)
- // UTF-8: F0 90 90 92
- string = decode([0xf0, 0x90, 0x90, 0x92]);
- Expect.equals(string.length, 2);
- Expect.equals("𐐒".length, 2);
- Expect.stringEquals("𐐒", string);
-
- // TODO(ahe): Add tests of bad input.
-}
diff --git a/pkg/utf/test/utf_test.dart b/pkg/utf/test/utf_test.dart
deleted file mode 100644
index 86d08e4d..0000000
--- a/pkg/utf/test/utf_test.dart
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library utf.utf_test;
-
-import "package:expect/expect.dart";
-import "package:utf/utf.dart";
-
-main() {
- String str = new String.fromCharCodes([0x1d537]);
- // String.codeUnits gives 16-bit code units, but stringToCodepoints gives
- // back the original code points.
- Expect.listEquals([0xd835, 0xdd37], str.codeUnits);
- Expect.listEquals([0x1d537], stringToCodepoints(str));
-}
diff --git a/runtime/lib/compact_hash.dart b/runtime/lib/compact_hash.dart
index 0dd7963..8e3fce9 100644
--- a/runtime/lib/compact_hash.dart
+++ b/runtime/lib/compact_hash.dart
@@ -337,7 +337,7 @@
// Set implementation, analogous to _CompactLinkedHashMap.
class _CompactLinkedHashSet<K>
extends SetBase<K> with _HashBase
- implements HashSet<K>, LinkedHashSet<K> {
+ implements LinkedHashSet<K> {
_CompactLinkedHashSet() {
assert(_HashBase._UNUSED_PAIR == 0);
@@ -377,7 +377,7 @@
}
}
- bool add(Object key) {
+ bool add(K key) {
final int size = _index.length;
final int sizeMask = size - 1;
final int maxEntries = size >> 1;
diff --git a/runtime/lib/core_patch.dart b/runtime/lib/core_patch.dart
index 4d434b7..810eb31 100644
--- a/runtime/lib/core_patch.dart
+++ b/runtime/lib/core_patch.dart
@@ -26,11 +26,113 @@
String toString() => _enum_names[index];
}
-typedef bool SyncGeneratorCallback(Iterator iterator);
+
+// _AsyncStarStreamController is used by the compiler to implement
+// async* generator functions.
+class _AsyncStarStreamController {
+ StreamController controller;
+ Function asyncStarBody;
+ bool isAdding = false;
+ bool onListenReceived = false;
+ bool isScheduled = false;
+
+ Stream get stream => controller.stream;
+
+ void runBody() {
+ isScheduled = false;
+ asyncStarBody();
+ }
+
+ void scheduleGenerator() {
+ if (isScheduled || controller.isPaused || isAdding) {
+ return;
+ }
+ isScheduled = true;
+ scheduleMicrotask(runBody);
+ }
+
+ // Adds element to steam, returns true if the caller should terminate
+ // execution of the generator.
+ //
+ // TODO(hausner): Per spec, the generator should be suspended before
+ // exiting when the stream is closed. We could add a getter like this:
+ // get isCancelled => controller.hasListener;
+ // The generator would translate a 'yield e' statement to
+ // controller.add(e);
+ // suspend;
+ // if (controller.isCanelled) return;
+ bool add(event) {
+ if (!onListenReceived) _fatal("yield before stream is listened to!");
+ // If stream is cancelled, tell caller to exit the async generator.
+ if (!controller.hasListener) {
+ return true;
+ }
+ controller.add(event);
+ scheduleGenerator();
+ return false;
+ }
+
+ // Adds the elements of stream into this controller's stream.
+ // The generator will be scheduled again when all of the
+ // elements of the added stream have been consumed.
+ // Returns true if the caller should terminate
+ // execution of the generator.
+ bool addStream(Stream stream) {
+ if (!onListenReceived) _fatal("yield before stream is listened to!");
+ // If stream is cancelled, tell caller to exit the async generator.
+ if (!controller.hasListener) return true;
+ isAdding = true;
+ var whenDoneAdding =
+ controller.addStream(stream as Stream, cancelOnError: false);
+ whenDoneAdding.then((_) {
+ isAdding = false;
+ scheduleGenerator();
+ });
+ return false;
+ }
+
+ void addError(error, stackTrace) {
+ // If stream is cancelled, tell caller to exit the async generator.
+ if (!controller.hasListener) return;
+ controller.addError(error, stackTrace);
+ // No need to schedule the generator body here. This code is only
+ // called from the catch clause of the implicit try-catch-finally
+ // around the generator body. That is, we are on the error path out
+ // of the generator and do not need to run the generator again.
+ }
+
+ close() {
+ controller.close();
+ }
+
+ _AsyncStarStreamController(this.asyncStarBody) {
+ controller = new StreamController(onListen: this.onListen,
+ onResume: this.onResume,
+ onCancel: this.onCancel);
+ }
+
+ onListen() {
+ assert(!onListenReceived);
+ onListenReceived = true;
+ scheduleGenerator();
+ }
+
+ onResume() {
+ scheduleGenerator();
+ }
+
+ onCancel() {
+ scheduleGenerator();
+ }
+}
+
// _SyncIterable and _syncIterator are used by the compiler to
// implement sync* generator functions. A sync* generator allocates
// and returns a new _SyncIterable object.
+
+typedef bool SyncGeneratorCallback(Iterator iterator);
+
class _SyncIterable extends IterableBase {
// moveNextFn is the closurized body of the generator function.
final SyncGeneratorCallback moveNextFn;
diff --git a/runtime/lib/isolate_patch.dart b/runtime/lib/isolate_patch.dart
index 9a74438..84928be 100644
--- a/runtime/lib/isolate_patch.dart
+++ b/runtime/lib/isolate_patch.dart
@@ -141,8 +141,6 @@
// so that we can run the immediate callbacks.
handler(message);
_runPendingImmediateCallback();
- // Event was handled. Now run expired timers.
- _Timer._handleTimeout();
}
// Call into the VM to close the VM maintained mappings.
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
index 079a1d0..ac62a2e 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -330,10 +330,7 @@
UNREACHABLE();
}
- const Bool& is_generic = Bool::Get(cls.NumTypeParameters() != 0);
- const Bool& is_mixin_app_alias = Bool::Get(cls.is_mixin_app_alias());
-
- const Array& args = Array::Handle(Array::New(8));
+ const Array& args = Array::Handle(Array::New(9));
args.SetAt(0, MirrorReference::Handle(MirrorReference::New(cls)));
args.SetAt(1, type);
// Note that the VM does not consider mixin application aliases to be mixin
@@ -346,9 +343,10 @@
}
args.SetAt(3, owner_mirror);
args.SetAt(4, Bool::Get(cls.is_abstract()));
- args.SetAt(5, is_generic);
- args.SetAt(6, is_mixin_app_alias);
+ args.SetAt(5, Bool::Get(cls.IsGeneric()));
+ args.SetAt(6, Bool::Get(cls.is_mixin_app_alias()));
args.SetAt(7, cls.NumTypeParameters() == 0 ? Bool::False() : is_declaration);
+ args.SetAt(8, Bool::Get(cls.is_enum_class()));
return CreateMirror(Symbols::_LocalClassMirror(), args);
}
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index fb43637..2cbb083 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -587,6 +587,7 @@
final bool _isGeneric;
final bool _isMixinAlias;
final bool _isGenericDeclaration;
+ final bool isEnum;
Type _instantiator;
_LocalClassMirror(reflectee,
@@ -596,7 +597,8 @@
this.isAbstract,
this._isGeneric,
this._isMixinAlias,
- this._isGenericDeclaration)
+ this._isGenericDeclaration,
+ this.isEnum)
: this._simpleName = _s(simpleName),
this._reflectedType = reflectedType,
this._instantiator = reflectedType,
@@ -969,7 +971,7 @@
class _LocalFunctionTypeMirror extends _LocalClassMirror
implements FunctionTypeMirror {
_LocalFunctionTypeMirror(reflectee, reflectedType)
- : super(reflectee, reflectedType, null, null, false, false, false, false);
+ : super(reflectee, reflectedType, null, null, false, false, false, false, false);
bool get _isAnonymousMixinApplication => false;
diff --git a/runtime/lib/string_patch.dart b/runtime/lib/string_patch.dart
index bef6a18..11db8fe 100644
--- a/runtime/lib/string_patch.dart
+++ b/runtime/lib/string_patch.dart
@@ -572,11 +572,31 @@
: pattern.allMatches(this, startIndex).iterator;
if (!iterator.moveNext()) return this;
Match match = iterator.current;
- return "${this.substring(0, match.start)}"
- "$replacement"
- "${this.substring(match.end)}";
+ return replaceRange(match.start, match.end, replacement);
}
+ String replaceRange(int start, int end, String replacement) {
+ int length = this.length;
+ end = RangeError.checkValidRange(start, end, length);
+ bool replacementIsOneByte = replacement._isOneByte;
+ if (start == 0 && end == length) return replacement;
+ int replacementLength = replacement.length;
+ int totalLength = start + (length - end) + replacementLength;
+ if (replacementIsOneByte && this._isOneByte) {
+ var result = _OneByteString._allocate(totalLength);
+ int index = 0;
+ index = result._setRange(index, this, 0, start);
+ index = result._setRange(start, replacement, 0, replacementLength);
+ result._setRange(index, this, end, length);
+ return result;
+ }
+ List slices = [];
+ _addReplaceSlice(slices, 0, start);
+ if (replacement.length > 0) slices.add(replacement);
+ _addReplaceSlice(slices, end, length);
+ return _joinReplaceAllResult(this, slices, totalLength,
+ replacementIsOneByte);
+ }
static int _addReplaceSlice(List matches, int start, int end) {
int length = end - start;
@@ -719,23 +739,7 @@
if (!matches.moveNext()) return this;
var match = matches.current;
var replacement = "${replace(match)}";
- var slices = [];
- int length = 0;
- if (match.start > 0) {
- length += _addReplaceSlice(slices, 0, match.start);
- }
- slices.add(replacement);
- length += replacement.length;
- if (match.end < this.length) {
- length += _addReplaceSlice(slices, match.end, this.length);
- }
- bool replacementIsOneByte = replacement._isOneByte;
- if (replacementIsOneByte &&
- length < _maxJoinReplaceOneByteStringLength &&
- this._isOneByte) {
- return _joinReplaceAllOneByteResult(this, slices, length);
- }
- return _joinReplaceAllResult(this, slices, length, replacementIsOneByte);
+ return replaceRange(match.start, match.end, replacement);
}
static String _matchString(Match match) => match[0];
@@ -1216,6 +1220,23 @@
// This is internal helper method. Code point value must be a valid
// Latin1 value (0..0xFF), index must be valid.
void _setAt(int index, int codePoint) native "OneByteString_setAt";
+
+ // Should be optimizable to a memory move.
+ // Accepts both _OneByteString and _ExternalOneByteString as argument.
+ // Returns index after last character written.
+ int _setRange(int index, String oneByteString, int start, int end) {
+ assert(oneByteString._isOneByte);
+ assert(0 <= start);
+ assert(start <= end);
+ assert(end <= oneByteString.length);
+ assert(0 <= index);
+ assert(index + (end - start) <= length);
+ for (int i = start; i < end; i++) {
+ _setAt(index, oneByteString.codeUnitAt(i));
+ index += 1;
+ }
+ return index;
+ }
}
diff --git a/runtime/lib/timer_impl.dart b/runtime/lib/timer_impl.dart
index 4df37cd..2f50bae 100644
--- a/runtime/lib/timer_impl.dart
+++ b/runtime/lib/timer_impl.dart
@@ -115,34 +115,37 @@
class _Timer implements Timer {
// Cancels the timer in the event handler.
- static const int _NO_TIMER = -1;
+ static const _NO_TIMER = -1;
- // Timers are ordered by wakeup time.
+ // We distinguish what kind of message arrived based on the value being sent.
+ static const _ZERO_EVENT = 1;
+ static const _TIMEOUT_EVENT = null;
+
+ // Timers are ordered by wakeup time. Timers with a timeout value of > 0 do
+ // end up on the TimerHeap. Timers with a timeout of 0 are queued in a list.
static _TimerHeap _heap = new _TimerHeap();
static _Timer _firstZeroTimer;
static _Timer _lastZeroTimer;
// We use an id to be able to sort timers with the same expiration time.
// ids are recycled after ID_MASK enqueues or when the timer queue is empty.
- static int _ID_MASK = 0x1fffffff;
+ static const _ID_MASK = 0x1fffffff;
static int _idCount = 0;
static RawReceivePort _receivePort;
static SendPort _sendPort;
static int _scheduledWakeupTime;
- // Keep track whether at least one message is pending in the event loop. This
- // way we do not have to notify for every pending _firstZeroTimer.
- static var _messagePending = false;
static bool _handlingCallbacks = false;
Function _callback; // Closure to call when timer fires. null if canceled.
int _wakeupTime; // Expiration time.
- int _milliSeconds; // Duration specified at creation.
- bool _repeating; // Indicates periodic timers.
+ final int _milliSeconds; // Duration specified at creation.
+ final bool _repeating; // Indicates periodic timers.
var _indexOrNext; // Index if part of the TimerHeap, link otherwise.
int _id; // Incrementing id to enable sorting of timers with same expiry.
+
// Get the next available id. We accept collisions and reordering when the
// _idCount overflows and the timers expire at the same millisecond.
static int _nextId() {
@@ -151,11 +154,13 @@
return result;
}
+
_Timer._internal(this._callback,
this._wakeupTime,
this._milliSeconds,
this._repeating) : _id = _nextId();
+
static Timer _createTimer(void callback(Timer timer),
int milliSeconds,
bool repeating) {
@@ -174,27 +179,25 @@
wakeupTime,
milliSeconds,
repeating);
-
- if (timer._addTimerToHeap()) {
- // The new timer is the first in queue. Update event handler.
- _notifyEventHandler();
- }
+ // Enqueue this newly created timer in the appropriate structure and
+ // notify if necessary.
+ timer._enqueue();
return timer;
}
+
factory _Timer(int milliSeconds, void callback(Timer timer)) {
return _createTimer(callback, milliSeconds, false);
}
+
factory _Timer.periodic(int milliSeconds, void callback(Timer timer)) {
return _createTimer(callback, milliSeconds, true);
}
+
bool get _isInHeap => _indexOrNext is int;
- void _clear() {
- _callback = null;
- }
int _compareTo(_Timer other) {
int c = _wakeupTime - other._wakeupTime;
@@ -202,22 +205,26 @@
return _id - other._id;
}
+
bool get isActive => _callback != null;
- // Cancels a set timer. The timer is removed from the timer list and if
- // the given timer is the earliest timer the event handler is notified.
+
+ // Cancels a set timer. The timer is removed from the timer heap if it is a
+ // non-zero timer. Zero timers are kept in the list as they need to consume
+ // the corresponding pending message.
void cancel() {
- _clear();
+ _callback = null;
+ // Only heap timers are really removed. Zero timers need to consume their
+ // corresponding wakeup message so they are left in the queue.
if (!_isInHeap) return;
- // Only heap timers are really removed. Others are just dropped on
- // notification.
- bool update = (_firstZeroTimer == null) && _heap.isFirst(this);
+ bool update = _heap.isFirst(this);
_heap.remove(this);
if (update) {
_notifyEventHandler();
}
}
+
void _advanceWakeupTime() {
// Recalculate the next wakeup time. For repeating timers with a 0 timeout
// the next wakeup time is now.
@@ -229,26 +236,60 @@
}
}
+
// Adds a timer to the heap or timer list. Timers with the same wakeup time
// are enqueued in order and notified in FIFO order.
- bool _addTimerToHeap() {
+ void _enqueue() {
if (_milliSeconds == 0) {
if (_firstZeroTimer == null) {
_lastZeroTimer = this;
_firstZeroTimer = this;
- return true;
} else {
_lastZeroTimer._indexOrNext = this;
_lastZeroTimer = this;
- return false;
}
+ // Every zero timer gets its own event.
+ _notifyZeroHandler();
} else {
_heap.add(this);
- return _firstZeroTimer == null && _heap.isFirst(this);
+ if (_heap.isFirst(this)) {
+ _notifyEventHandler();
+ }
}
}
+ // Enqeue one message for each zero timer. To be able to distinguish from
+ // EventHandler messages we send a _ZERO_EVENT instead of a _TIMEOUT_EVENT.
+ static void _notifyZeroHandler() {
+ if (_sendPort == null) {
+ _createTimerHandler();
+ }
+ _sendPort.send(_ZERO_EVENT);
+ }
+
+
+ // Handle the notification of a zero timer. Make sure to also execute non-zero
+ // timers with a lower expiration time.
+ static List _queueFromZeroEvent() {
+ var pendingTimers = new List();
+ assert(_firstZeroTimer != null);
+ // Collect pending timers from the timer heap that have an expiration prior
+ // to the currently notified zero timer.
+ var timer;
+ while (!_heap.isEmpty && (_heap.first._compareTo(_firstZeroTimer) < 0)) {
+ timer = _heap.removeFirst();
+ pendingTimers.add(timer);
+ }
+ // Append the first zero timer to the pending timers.
+ timer = _firstZeroTimer;
+ _firstZeroTimer = timer._indexOrNext;
+ timer._indexOrNext = null;
+ pendingTimers.add(timer);
+ return pendingTimers;
+ }
+
+
static void _notifyEventHandler() {
if (_handlingCallbacks) {
// While we are already handling callbacks we will not notify the event
@@ -257,132 +298,84 @@
return;
}
+ // If there are no pending timers. Close down the receive port.
if ((_firstZeroTimer == null) && _heap.isEmpty) {
// No pending timers: Close the receive port and let the event handler
// know.
- if (_receivePort != null) {
- VMLibraryHooks.eventHandlerSendData(null, _sendPort, _NO_TIMER);
+ if (_sendPort != null) {
+ _cancelWakeup();
_shutdownTimerHandler();
}
- } else {
- if (_receivePort == null) {
- // Create a receive port and register a message handler for the timer
- // events.
- _createTimerHandler();
- }
- if (_firstZeroTimer != null) {
- if (!_messagePending) {
- _sendPort.send(null);
- _messagePending = true; // Reset when the port receives a message.
- }
- } else {
- var wakeupTime = _heap.first._wakeupTime;
- if ((_scheduledWakeupTime == null) ||
- (wakeupTime != _scheduledWakeupTime)) {
- VMLibraryHooks.eventHandlerSendData(null, _sendPort, wakeupTime);
- _scheduledWakeupTime = wakeupTime;
- }
- }
+ return;
+ } else if (_heap.isEmpty) {
+ // Only zero timers are left. Cancel any scheduled wakeups.
+ _cancelWakeup();
+ return;
+ }
+
+ // Only send a message if the requested wakeup time differs from the
+ // already scheduled wakeup time.
+ var wakeupTime = _heap.first._wakeupTime;
+ if ((_scheduledWakeupTime == null) ||
+ (wakeupTime != _scheduledWakeupTime)) {
+ _scheduleWakeup(wakeupTime);
}
}
- static void _handleTimeout() {
- // Fast exit if no timers have been scheduled.
- if (_heap.isEmpty && (_firstZeroTimer == null)) {
- assert(_receivePort == null);
- return;
- }
- // Collect all pending timers.
- var head = null;
- var tail = null;
- if (_heap.isEmpty) {
- // Only immediate timers are scheduled. Take over the whole list as is.
- assert(_firstZeroTimer != null);
- assert(_lastZeroTimer != null);
- head = _firstZeroTimer;
- tail = _lastZeroTimer;
- _firstZeroTimer = null;
- _lastZeroTimer = null;
+ static List _queueFromTimeoutEvent() {
+ var pendingTimers = new List();
+ if (_firstZeroTimer != null) {
+ // Collect pending timers from the timer heap that have an expiration
+ // prior to the next zero timer.
+ // By definition the first zero timer has been scheduled before the
+ // current time, meaning all timers which are "less than" the first zero
+ // timer are expired. The first zero timer will be dispatched when its
+ // corresponding message is delivered.
+ var timer;
+ while (!_heap.isEmpty && (_heap.first._compareTo(_firstZeroTimer) < 0)) {
+ timer = _heap.removeFirst();
+ pendingTimers.add(timer);
+ }
} else {
- assert(!_heap.isEmpty);
- // Keep track of the lowest wakeup times for both the list and heap. If
- // the respective queue is empty move its time beyond the current time.
+ // Collect pending timers from the timer heap which have expired at this
+ // time.
var currentTime = new DateTime.now().millisecondsSinceEpoch;
- var heapTime = _heap.first._wakeupTime;
- var listTime = (_firstZeroTimer == null) ?
- (currentTime + 1) : _firstZeroTimer._wakeupTime;
-
- while ((heapTime <= currentTime) || (listTime <= currentTime)) {
- var timer;
- // Consume the timers in order by removing from heap or list based on
- // their wakeup time and update the queue's time.
- assert((heapTime != listTime) ||
- ((_heap.first != null) && (_firstZeroTimer != null)));
- if ((heapTime < listTime) ||
- ((heapTime == listTime) &&
- (_heap.first._id < _firstZeroTimer._id))) {
- timer = _heap.removeFirst();
- heapTime = _heap.isEmpty ?
- (currentTime + 1) : _heap.first._wakeupTime;
- } else {
- timer = _firstZeroTimer;
- assert(timer._milliSeconds == 0);
- _firstZeroTimer = timer._indexOrNext;
- if (_firstZeroTimer == null) {
- _lastZeroTimer = null;
- listTime = currentTime + 1;
- } else {
- // We want to drain all entries from the list as they should have
- // been pending for 0 ms. To prevent issues with current time moving
- // we ensure that the listTime does not go beyond current, unless
- // the list is empty.
- listTime = _firstZeroTimer._wakeupTime;
- if (listTime > currentTime) {
- listTime = currentTime;
- }
- }
- }
-
- // Append this timer to the pending timer list.
- timer._indexOrNext = null;
- if (head == null) {
- assert(tail == null);
- head = timer;
- tail = timer;
- } else {
- tail._indexOrNext = timer;
- tail = timer;
- }
+ var timer;
+ while (!_heap.isEmpty && (_heap.first._wakeupTime <= currentTime)) {
+ timer = _heap.removeFirst();
+ pendingTimers.add(timer);
}
}
+ return pendingTimers;
+ }
- // No timers queued: Early exit.
- if (head == null) {
- return;
- }
+ static void _runTimers(List pendingTimers) {
// If there are no pending timers currently reset the id space before we
// have a chance to enqueue new timers.
- assert(_firstZeroTimer == null);
- if (_heap.isEmpty) {
+ if (_heap.isEmpty && (_firstZeroTimer == null)) {
_idCount = 0;
}
+ // Fast exit if no pending timers.
+ if (pendingTimers.length == 0) {
+ return;
+ }
+
// Trigger all of the pending timers. New timers added as part of the
// callbacks will be enqueued now and notified in the next spin at the
// earliest.
_handlingCallbacks = true;
try {
- while (head != null) {
- // Dequeue the first candidate timer.
- var timer = head;
- head = timer._indexOrNext;
+ for (var i = 0; i < pendingTimers.length; i++) {
+ // Next pending timer.
+ var timer = pendingTimers[i];
timer._indexOrNext = null;
// One of the timers in the pending_timers list can cancel
// one of the later timers which will set the callback to
- // null.
+ // null. Or the pending zero timer has been canceled earlier.
if (timer._callback != null) {
var callback = timer._callback;
if (!timer._repeating) {
@@ -393,7 +386,7 @@
// Re-insert repeating timer if not canceled.
if (timer._repeating && (timer._callback != null)) {
timer._advanceWakeupTime();
- timer._addTimerToHeap();
+ timer._enqueue();
}
// Execute pending micro tasks.
_runPendingImmediateCallback();
@@ -401,32 +394,64 @@
}
} finally {
_handlingCallbacks = false;
- _notifyEventHandler();
}
}
- // Creates a receive port and registers an empty handler on that port. Just
- // the triggering of the event loop will ensure that timers are executed.
- static _ignoreMessage(_) {
- _messagePending = false;
+
+ static void _handleMessage(msg) {
+ var pendingTimers;
+ if (msg == _ZERO_EVENT) {
+ pendingTimers = _queueFromZeroEvent();
+ assert(pendingTimers.length > 0);
+ } else {
+ assert(msg == _TIMEOUT_EVENT);
+ _scheduledWakeupTime = null; // Consumed the last scheduled wakeup now.
+ pendingTimers = _queueFromTimeoutEvent();
+ }
+ _runTimers(pendingTimers);
+ // Notify the event handler or shutdown the port if no more pending
+ // timers are present.
+ _notifyEventHandler();
}
+
+ // Tell the event handler to wake this isolate at a specific time.
+ static void _scheduleWakeup(int wakeupTime) {
+ if (_sendPort == null) {
+ _createTimerHandler();
+ }
+ VMLibraryHooks.eventHandlerSendData(null, _sendPort, wakeupTime);
+ _scheduledWakeupTime = wakeupTime;
+ }
+
+
+ // Cancel pending wakeups in the event handler.
+ static void _cancelWakeup() {
+ assert(_sendPort != null);
+ VMLibraryHooks.eventHandlerSendData(null, _sendPort, _NO_TIMER);
+ _scheduledWakeupTime = null;
+ }
+
+
+ // Create a receive port and register a message handler for the timer
+ // events.
static void _createTimerHandler() {
assert(_receivePort == null);
- _receivePort = new RawReceivePort(_ignoreMessage);
+ assert(_sendPort == null);
+ _receivePort = new RawReceivePort(_handleMessage);
_sendPort = _receivePort.sendPort;
_scheduledWakeupTime = null;
- _messagePending = false;
}
+
static void _shutdownTimerHandler() {
_receivePort.close();
_receivePort = null;
_sendPort = null;
_scheduledWakeupTime = null;
- _messagePending = false;
}
+
// The Timer factory registered with the dart:async library by the embedder.
static Timer _factory(int milliSeconds,
void callback(Timer timer),
@@ -438,6 +463,7 @@
}
}
+
_setupHooks() {
VMLibraryHooks.timerFactory = _Timer._factory;
}
diff --git a/runtime/observatory/lib/app.dart b/runtime/observatory/lib/app.dart
index 6a422fe..6b0a4e1 100644
--- a/runtime/observatory/lib/app.dart
+++ b/runtime/observatory/lib/app.dart
@@ -8,19 +8,20 @@
import 'dart:convert';
import 'dart:html';
import 'dart:js';
-import 'dart:math';
import 'package:logging/logging.dart';
import 'package:observatory/service_html.dart';
import 'package:observatory/elements.dart';
import 'package:observatory/tracer.dart';
+import 'package:observatory/utils.dart';
import 'package:polymer/polymer.dart';
+export 'package:observatory/utils.dart';
+
part 'src/app/application.dart';
part 'src/app/chart.dart';
part 'src/app/location_manager.dart';
part 'src/app/page.dart';
part 'src/app/settings.dart';
part 'src/app/target_manager.dart';
-part 'src/app/utils.dart';
part 'src/app/view_model.dart';
diff --git a/runtime/observatory/lib/cpu_profile.dart b/runtime/observatory/lib/cpu_profile.dart
new file mode 100644
index 0000000..c8a2b53
--- /dev/null
+++ b/runtime/observatory/lib/cpu_profile.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library cpu_profiler;
+
+import 'dart:typed_data';
+import 'package:observatory/service.dart';
+import 'package:observatory/utils.dart';
+
+part 'src/cpu_profile/cpu_profile.dart';
diff --git a/runtime/observatory/lib/service.dart b/runtime/observatory/lib/service.dart
index 73f3f1b..51765bc 100644
--- a/runtime/observatory/lib/service.dart
+++ b/runtime/observatory/lib/service.dart
@@ -9,6 +9,7 @@
import 'dart:typed_data';
import 'package:logging/logging.dart';
+import 'package:observatory/cpu_profile.dart';
import 'package:observatory/object_graph.dart';
import 'package:observatory/tracer.dart';
import 'package:observe/observe.dart';
diff --git a/runtime/observatory/lib/service_common.dart b/runtime/observatory/lib/service_common.dart
index f417b88..7aebc81 100644
--- a/runtime/observatory/lib/service_common.dart
+++ b/runtime/observatory/lib/service_common.dart
@@ -161,27 +161,26 @@
_notifyConnect();
}
- // WebSocket message event handler.
- void _onMessage(dynamic data) {
- if (data is! String) {
- _webSocket.nonStringToByteData(data).then((ByteData bytes) {
- // See format spec. in VMs Service::SendEvent.
- int offset = 0;
- // Dart2JS workaround (no getUint64). Limit to 4 GB metadata.
- assert(bytes.getUint32(offset, Endianness.BIG_ENDIAN) == 0);
- int metaSize = bytes.getUint32(offset + 4, Endianness.BIG_ENDIAN);
- offset += 8;
- var meta = _utf8Decoder.convert(new Uint8List.view(
- bytes.buffer, bytes.offsetInBytes + offset, metaSize));
- offset += metaSize;
- var data = new ByteData.view(
- bytes.buffer,
- bytes.offsetInBytes + offset,
- bytes.lengthInBytes - offset);
- postEventMessage(meta, data);
- });
- return;
- }
+ void _onBinaryMessage(dynamic data) {
+ _webSocket.nonStringToByteData(data).then((ByteData bytes) {
+ // See format spec. in VMs Service::SendEvent.
+ int offset = 0;
+ // Dart2JS workaround (no getUint64). Limit to 4 GB metadata.
+ assert(bytes.getUint32(offset, Endianness.BIG_ENDIAN) == 0);
+ int metaSize = bytes.getUint32(offset + 4, Endianness.BIG_ENDIAN);
+ offset += 8;
+ var meta = _utf8Decoder.convert(new Uint8List.view(
+ bytes.buffer, bytes.offsetInBytes + offset, metaSize));
+ offset += metaSize;
+ var data = new ByteData.view(
+ bytes.buffer,
+ bytes.offsetInBytes + offset,
+ bytes.lengthInBytes - offset);
+ postServiceEvent(meta, data);
+ });
+ }
+
+ void _onStringMessage(String data) {
var map = JSON.decode(data);
if (map == null) {
Logger.root.severe('WebSocketVM got empty message');
@@ -190,21 +189,12 @@
// Extract serial and response.
var serial;
var response;
- if (target.chrome) {
- if (map['method'] != 'Dart.observatoryData') {
- // ignore devtools protocol spam.
- return;
- }
- serial = map['params']['id'].toString();
- response = map['params']['data'];
- } else {
- serial = map['id'];
- response = map['response'];
- }
+ serial = map['id'];
+ response = map['response'];
if (serial == null) {
- // Messages without sequence numbers are asynchronous events
+ // Messages without serial numbers are asynchronous events
// from the vm.
- postEventMessage(response);
+ postServiceEvent(response, null);
return;
}
// Complete request.
@@ -216,6 +206,15 @@
request.completer.complete(response);
}
+ // WebSocket message event handler.
+ void _onMessage(dynamic data) {
+ if (data is! String) {
+ _onBinaryMessage(data);
+ } else {
+ _onStringMessage(data);
+ }
+ }
+
String _generateNetworkError(String userMessage) {
return JSON.encode({
'type': 'ServiceException',
diff --git a/runtime/observatory/lib/src/app/location_manager.dart b/runtime/observatory/lib/src/app/location_manager.dart
index 38269df..86e71e5 100644
--- a/runtime/observatory/lib/src/app/location_manager.dart
+++ b/runtime/observatory/lib/src/app/location_manager.dart
@@ -76,7 +76,8 @@
}
/// Handle clicking on an application url link.
- void onGoto(MouseEvent event, var detail, Element target) {
+ void onGoto(MouseEvent event) {
+ var target = event.target;
var href = target.attributes['href'];
if (event.button > 0 || event.metaKey || event.ctrlKey ||
event.shiftKey || event.altKey) {
diff --git a/runtime/observatory/lib/src/app/view_model.dart b/runtime/observatory/lib/src/app/view_model.dart
index 48d0c10..659091b 100644
--- a/runtime/observatory/lib/src/app/view_model.dart
+++ b/runtime/observatory/lib/src/app/view_model.dart
@@ -7,26 +7,25 @@
abstract class TableTreeRow extends Observable {
static const arrowRight = '\u2192';
static const arrowDownRight = '\u21b3';
- // Number of pixels each subtree is indented.
- static const subtreeIndent = 16;
+ // Number of ems each subtree is indented.
+ static const subtreeIndent = 2;
+
+ TableTreeRow(this.tree, TableTreeRow parent) :
+ parent = parent,
+ depth = parent != null ? parent.depth + 1 : 0 {
+ }
final TableTree tree;
final TableTreeRow parent;
final int depth;
final List<TableTreeRow> children = new List<TableTreeRow>();
- final List<TableCellElement> tableColumns = new List<TableCellElement>();
+ final List<TableCellElement> _tableColumns = new List<TableCellElement>();
+ final List<DivElement> flexColumns = new List<DivElement>();
+ final List<StreamSubscription> listeners = new List<StreamSubscription>();
+
SpanElement _expander;
TableRowElement _tr;
- TableRowElement get tr {
- assert(_tr != null);
- return _tr;
- }
-
- TableTreeRow(this.tree, TableTreeRow parent) :
- parent = parent,
- depth = parent != null ? parent.depth+1 : 0 {
- }
-
+ TableRowElement get tr => _tr;
bool _expanded = false;
bool get expanded => _expanded;
set expanded(bool expanded) {
@@ -42,53 +41,110 @@
}
}
- bool expandOrCollapse() {
+ /// Fired when the tree row is being expanded.
+ void _onExpand() {
+ _updateExpanderView();
+ }
+
+ /// Fired when the tree row is being collapsed.
+ void _onCollapse() {
+ for (var child in children) {
+ child.onHide();
+ }
+ _updateExpanderView();
+ }
+
+ bool toggle() {
expanded = !expanded;
return expanded;
}
- bool hasChildren();
-
- String _backgroundColorClassForRow() {
- const colors = const ['rowColor0', 'rowColor1', 'rowColor2', 'rowColor3',
- 'rowColor4', 'rowColor5', 'rowColor6', 'rowColor7',
- 'rowColor8'];
- var index = (depth - 1) % colors.length;
- return colors[index];
+ HtmlElement _makeColorBlock(String backgroundColor) {
+ var colorBlock = new DivElement();
+ colorBlock.style.minWidth = '2px';
+ colorBlock.style.backgroundColor = backgroundColor;
+ return colorBlock;
}
+ HtmlElement _makeExpander() {
+ var expander = new SpanElement();
+ expander.style.minWidth = '1.5em';
+ listeners.add(expander.onClick.listen(onClick));
+ return expander;
+ }
+
+ void _cleanUpListeners() {
+ for (var i = 0; i < listeners.length; i++) {
+ listeners[i].cancel();
+ }
+ listeners.clear();
+ }
+
+ void onClick(Event e) {
+ e.stopPropagation();
+ tree.toggle(this);
+ }
+
+ static const redColor = '#F44336';
+ static const blueColor = '#3F51B5';
+ static const purpleColor = '#673AB7';
+ static const greenColor = '#4CAF50';
+ static const orangeColor = '#FF9800';
+ static const lightGrayColor = '#FAFAFA';
+
void _buildRow() {
+ const List backgroundColors = const [
+ purpleColor,
+ redColor,
+ greenColor,
+ blueColor,
+ orangeColor,
+ ];
_tr = new TableRowElement();
for (var i = 0; i < tree.columnCount; i++) {
var cell = _tr.insertCell(-1);
- cell.classes.add(_backgroundColorClassForRow());
- tableColumns.add(cell);
+ _tableColumns.add(cell);
+ var flex = new DivElement();
+ flex.classes.add('flex-row');
+ cell.children.add(flex);
+ flexColumns.add(flex);
}
- var firstColumn = tableColumns[0];
- _expander = new SpanElement();
- _expander.style.display = 'inline-block';
- _expander.style.minWidth = '1.5em';
- _expander.onClick.listen(onClick);
+ var firstColumn = flexColumns[0];
+ _tableColumns[0].style.paddingLeft = '${(depth - 1) * subtreeIndent}em';
+ var backgroundColor = lightGrayColor;
+ if (depth > 1) {
+ var colorIndex = (depth - 1) % backgroundColors.length;
+ backgroundColor = backgroundColors[colorIndex];
+ }
+ var colorBlock = _makeColorBlock(backgroundColor);
+ firstColumn.children.add(colorBlock);
+ _expander = _makeExpander();
firstColumn.children.add(_expander);
- firstColumn.style.paddingLeft = '${depth * subtreeIndent}px';
- updateExpanderView();
+ // Enable expansion by clicking anywhere on the first column.
+ listeners.add(firstColumn.onClick.listen(onClick));
+ _updateExpanderView();
}
- void updateExpanderView() {
+ void _updateExpanderView() {
if (_expander == null) {
return;
}
if (!hasChildren()) {
_expander.style.visibility = 'hidden';
- _expander.style.cursor = 'auto';
+ _expander.classes.remove('pointer');
return;
} else {
_expander.style.visibility = 'visible';
- _expander.style.cursor = 'pointer';
+ _expander.classes.add('pointer');
}
- _expander.text = expanded ? arrowDownRight : arrowRight;
+ _expander.children.clear();
+ _expander.children.add(expanded ?
+ new Element.tag('icon-expand-more') :
+ new Element.tag('icon-chevron-right'));
}
+ bool hasChildren();
+
/// Fired when the tree row is being shown.
/// Populate tr and add logical children here.
void onShow() {
@@ -98,32 +154,15 @@
/// Fired when the tree row is being hidden.
void onHide() {
- assert(_tr != null);
_tr = null;
- tableColumns.clear();
_expander = null;
- }
-
- /// Fired when the tree row is being expanded.
- void _onExpand() {
- for (var child in children) {
- child.onShow();
- child.updateExpanderView();
+ if (_tableColumns != null) {
+ _tableColumns.clear();
}
- updateExpanderView();
- }
-
- /// Fired when the tree row is being collapsed.
- void _onCollapse() {
- for (var child in children) {
- child.onHide();
+ if (flexColumns != null) {
+ flexColumns.clear();
}
- updateExpanderView();
- }
-
- void onClick(Event e) {
- tree.toggle(this);
- e.stopPropagation();
+ _cleanUpListeners();
}
}
@@ -131,43 +170,80 @@
final TableSectionElement tableBody;
final List<TableTreeRow> rows = [];
final int columnCount;
-
+ Future _pendingOperation;
/// Create a table tree with column [headers].
TableTree(this.tableBody, this.columnCount);
+ void clear() {
+ tableBody.children.clear();
+ for (var i = 0; i < rows.length; i++) {
+ rows[i]._cleanUpListeners();
+ }
+ rows.clear();
+ }
+
/// Initialize the table tree with the list of root children.
void initialize(TableTreeRow root) {
- tableBody.children.clear();
- rows.clear();
+ clear();
root.onShow();
- rows.addAll(root.children);
- for (var i = 0; i < rows.length; i++) {
- rows[i].onShow();
- tableBody.children.add(rows[i].tr);
- }
+ toggle(root);
}
/// Toggle expansion of row in tree.
- void toggle(TableTreeRow row) {
- if (row.expandOrCollapse()) {
- _expand(row);
+ toggle(TableTreeRow row) async {
+ if (_pendingOperation != null) {
+ return;
+ }
+ if (row.toggle()) {
+ document.body.classes.add('busy');
+ _pendingOperation = _expand(row);
+ await _pendingOperation;
+ _pendingOperation = null;
+ document.body.classes.remove('busy');
+ if (row.children.length == 1) {
+ // Auto expand single child.
+ await toggle(row.children[0]);
+ }
} else {
- _collapse(row);
+ document.body.classes.add('busy');
+ _pendingOperation = _collapse(row);
+ await _pendingOperation;
+ _pendingOperation = null;
+ document.body.classes.remove('busy');
}
}
int _index(TableTreeRow row) => rows.indexOf(row);
- void _expand(TableTreeRow row) {
+ _insertRow(index, child) {
+ rows.insert(index, child);
+ tableBody.children.insert(index, child.tr);
+ }
+
+ _expand(TableTreeRow row) async {
int index = _index(row);
- assert(index != -1);
- rows.insertAll(index + 1, row.children);
- for (var i = 0; i < row.children.length; i++) {
- tableBody.children.insert(index + i + 1, row.children[i].tr);
+ if ((index == -1) && (rows.length != 0)) {
+ return;
+ }
+ assert((index != -1) || (rows.length == 0));
+ var i = 0;
+ var addPerIteration = 10;
+ while (i < row.children.length) {
+ await window.animationFrame;
+ for (var j = 0; j < addPerIteration; j++) {
+ if (i == row.children.length) {
+ break;
+ }
+ var child = row.children[i];
+ child.onShow();
+ child._updateExpanderView();
+ _insertRow(index + i + 1, child);
+ i++;
+ }
}
}
- void _collapse(TableTreeRow row) {
+ _collapseSync(TableTreeRow row) {
var childCount = row.children.length;
if (childCount == 0) {
return;
@@ -175,18 +251,22 @@
for (var i = 0; i < childCount; i++) {
// Close all inner rows.
if (row.children[i].expanded) {
- _collapse(row.children[i]);
+ _collapseSync(row.children[i]);
}
}
// Collapse this row.
row.expanded = false;
// Remove all children.
int index = _index(row);
- rows.removeRange(index + 1, index + 1 + childCount);
for (var i = 0; i < childCount; i++) {
+ rows.removeAt(index + 1);
tableBody.children.removeAt(index + 1);
}
}
+
+ _collapse(TableTreeRow row) async {
+ _collapseSync(row);
+ }
}
typedef String ValueFormatter(dynamic value);
@@ -247,7 +327,6 @@
}
void sort() {
- Stopwatch sw = new Stopwatch()..start();
assert(_sortColumnIndex >= 0);
assert(_sortColumnIndex < columns.length);
if (_sortDescending) {
diff --git a/runtime/observatory/lib/src/cpu_profile/cpu_profile.dart b/runtime/observatory/lib/src/cpu_profile/cpu_profile.dart
new file mode 100644
index 0000000..3591171
--- /dev/null
+++ b/runtime/observatory/lib/src/cpu_profile/cpu_profile.dart
@@ -0,0 +1,666 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of cpu_profiler;
+
+class CodeCallTreeNode {
+ final ProfileCode profileCode;
+ final int count;
+ double get percentage => _percentage;
+ double _percentage = 0.0;
+ final children;
+ final Set<String> attributes = new Set<String>();
+ CodeCallTreeNode(this.profileCode, this.count, int childCount)
+ : children = new List<CodeCallTreeNode>(childCount) {
+ attributes.addAll(profileCode.attributes);
+ }
+}
+
+class CodeCallTree {
+ final bool inclusive;
+ final CodeCallTreeNode root;
+ CodeCallTree(this.inclusive, this.root) {
+ _setCodePercentage(null, root);
+ }
+
+ _setCodePercentage(CodeCallTreeNode parent, CodeCallTreeNode node) {
+ assert(node != null);
+ var parentPercentage = 1.0;
+ var parentCount = node.count;
+ if (parent != null) {
+ parentPercentage = parent._percentage;
+ parentCount = parent.count;
+ }
+ if (inclusive) {
+ node._percentage = parentPercentage * (node.count / parentCount);
+ } else {
+ node._percentage = (node.count / parentCount);
+ }
+ for (var child in node.children) {
+ _setCodePercentage(node, child);
+ }
+ }
+}
+
+class FunctionCallTreeNodeCode {
+ final ProfileCode code;
+ final int ticks;
+ FunctionCallTreeNodeCode(this.code, this.ticks);
+}
+
+class FunctionCallTreeNode {
+ final ProfileFunction profileFunction;
+ final int count;
+ double get percentage => _percentage;
+ double _percentage = 0.0;
+ final children = new List<FunctionCallTreeNode>();
+ final Set<String> attributes = new Set<String>();
+ final codes = new List<FunctionCallTreeNodeCode>();
+ int _totalCodeTicks = 0;
+ int get totalCodesTicks => _totalCodeTicks;
+
+ FunctionCallTreeNode(this.profileFunction, this.count){
+ profileFunction._addKindBasedAttributes(attributes);
+ }
+
+ // Does this function have an optimized version of itself?
+ bool hasOptimizedCode() {
+ for (var nodeCode in codes) {
+ var profileCode = nodeCode.code;
+ if (!profileCode.code.isDartCode) {
+ continue;
+ }
+ if (profileCode.code.function != profileFunction.function) {
+ continue;
+ }
+ if (profileCode.code.isOptimized) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // Does this function have an unoptimized version of itself?
+ bool hasUnoptimizedCode() {
+ for (var nodeCode in codes) {
+ var profileCode = nodeCode.code;
+ if (!profileCode.code.isDartCode) {
+ continue;
+ }
+ if (profileCode.code.kind == CodeKind.Stub) {
+ continue;
+ }
+ if (!profileCode.code.isOptimized) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // Has this function been inlined in another function?
+ bool isInlined() {
+ for (var nodeCode in codes) {
+ var profileCode = nodeCode.code;
+ if (!profileCode.code.isDartCode) {
+ continue;
+ }
+ if (profileCode.code.kind == CodeKind.Stub) {
+ continue;
+ }
+ // If the code's function isn't this function.
+ if (profileCode.code.function != profileFunction.function) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ setCodeAttributes() {
+ if (hasOptimizedCode()) {
+ attributes.add('optimized');
+ }
+ if (hasUnoptimizedCode()) {
+ attributes.add('unoptimized');
+ }
+ if (isInlined()) {
+ attributes.add('inlined');
+ }
+ }
+}
+
+class FunctionCallTree {
+ final bool inclusive;
+ final FunctionCallTreeNode root;
+ FunctionCallTree(this.inclusive, this.root) {
+ _setFunctionPercentage(null, root);
+ }
+
+ void _setFunctionPercentage(FunctionCallTreeNode parent,
+ FunctionCallTreeNode node) {
+ assert(node != null);
+ var parentPercentage = 1.0;
+ var parentCount = node.count;
+ if (parent != null) {
+ parentPercentage = parent._percentage;
+ parentCount = parent.count;
+ }
+ if (inclusive) {
+ node._percentage = parentPercentage * (node.count / parentCount);
+ } else {
+ node._percentage = (node.count / parentCount);
+ }
+ for (var child in node.children) {
+ _setFunctionPercentage(node, child);
+ }
+ }
+}
+
+class CodeTick {
+ final int exclusiveTicks;
+ final int inclusiveTicks;
+ CodeTick(this.exclusiveTicks, this.inclusiveTicks);
+}
+
+class InlineIntervalTick {
+ final int startAddress;
+ int _inclusiveTicks = 0;
+ int get inclusiveTicks => _inclusiveTicks;
+ int _exclusiveTicks = 0;
+ int get exclusiveTicks => _exclusiveTicks;
+ InlineIntervalTick(this.startAddress);
+}
+
+class ProfileCode {
+ final CpuProfile profile;
+ final Code code;
+ int exclusiveTicks;
+ int inclusiveTicks;
+ double normalizedExclusiveTicks = 0.0;
+ double normalizedInclusiveTicks = 0.0;
+ final addressTicks = new Map<int, CodeTick>();
+ final intervalTicks = new Map<int, InlineIntervalTick>();
+ String formattedInclusiveTicks = '';
+ String formattedExclusiveTicks = '';
+ String formattedExclusivePercent = '';
+ String formattedCpuTime = '';
+ String formattedOnStackTime = '';
+ final Set<String> attributes = new Set<String>();
+
+ void _processTicks(List<String> profileTicks) {
+ assert(profileTicks != null);
+ assert((profileTicks.length % 3) == 0);
+ for (var i = 0; i < profileTicks.length; i += 3) {
+ var address = int.parse(profileTicks[i], radix:16);
+ var exclusive = int.parse(profileTicks[i + 1]);
+ var inclusive = int.parse(profileTicks[i + 2]);
+ var tick = new CodeTick(exclusive, inclusive);
+ addressTicks[address] = tick;
+
+ var interval = code.findInterval(address);
+ if (interval != null) {
+ var intervalTick = intervalTicks[interval.start];
+ if (intervalTick == null) {
+ // Insert into map.
+ intervalTick = new InlineIntervalTick(interval.start);
+ intervalTicks[interval.start] = intervalTick;
+ }
+ intervalTick._inclusiveTicks += inclusive;
+ intervalTick._exclusiveTicks += exclusive;
+ }
+ }
+ }
+
+ ProfileCode.fromMap(this.profile, this.code, Map data) {
+ assert(profile != null);
+ assert(code != null);
+
+ code.profile = this;
+
+ if (code.isDartCode) {
+ if (code.isOptimized) {
+ attributes.add('optimized');
+ } else {
+ attributes.add('unoptimized');
+ }
+ }
+ if (code.isDartCode) {
+ attributes.add('dart');
+ } else if (code.kind == CodeKind.Tag) {
+ attributes.add('tag');
+ } else if (code.kind == CodeKind.Native) {
+ attributes.add('native');
+ }
+ inclusiveTicks = int.parse(data['inclusiveTicks']);
+ exclusiveTicks = int.parse(data['exclusiveTicks']);
+
+ normalizedExclusiveTicks = exclusiveTicks / profile.sampleCount;
+
+ normalizedInclusiveTicks = inclusiveTicks / profile.sampleCount;
+
+ var ticks = data['ticks'];
+ if (ticks != null) {
+ _processTicks(ticks);
+ }
+
+ formattedExclusivePercent =
+ Utils.formatPercent(exclusiveTicks, profile.sampleCount);
+
+ formattedCpuTime =
+ Utils.formatTimeMilliseconds(
+ profile.approximateMillisecondsForCount(exclusiveTicks));
+
+ formattedOnStackTime =
+ Utils.formatTimeMilliseconds(
+ profile.approximateMillisecondsForCount(inclusiveTicks));
+
+ formattedInclusiveTicks =
+ '${Utils.formatPercent(inclusiveTicks, profile.sampleCount)} '
+ '($inclusiveTicks)';
+
+ formattedExclusiveTicks =
+ '${Utils.formatPercent(exclusiveTicks, profile.sampleCount)} '
+ '($exclusiveTicks)';
+ }
+}
+
+class ProfileFunction {
+ final CpuProfile profile;
+ final ServiceFunction function;
+ // List of compiled code objects containing this function.
+ final List<ProfileCode> profileCodes = new List<ProfileCode>();
+ // Absolute ticks:
+ int exclusiveTicks = 0;
+ int inclusiveTicks = 0;
+
+ // Global percentages:
+ double normalizedExclusiveTicks = 0.0;
+ double normalizedInclusiveTicks = 0.0;
+
+ String formattedInclusiveTicks = '';
+ String formattedExclusiveTicks = '';
+ String formattedExclusivePercent = '';
+ String formattedCpuTime = '';
+ String formattedOnStackTime = '';
+ final Set<String> attributes = new Set<String>();
+
+ int _sortCodes(ProfileCode a, ProfileCode b) {
+ if (a.code.isOptimized == b.code.isOptimized) {
+ return b.code.profile.exclusiveTicks - a.code.profile.exclusiveTicks;
+ }
+ if (a.code.isOptimized) {
+ return -1;
+ }
+ return 1;
+ }
+
+ // Does this function have an optimized version of itself?
+ bool hasOptimizedCode() {
+ for (var profileCode in profileCodes) {
+ if (profileCode.code.function != function) {
+ continue;
+ }
+ if (profileCode.code.isOptimized) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // Does this function have an unoptimized version of itself?
+ bool hasUnoptimizedCode() {
+ for (var profileCode in profileCodes) {
+ if (profileCode.code.kind == CodeKind.Stub) {
+ continue;
+ }
+ if (!profileCode.code.isDartCode) {
+ continue;
+ }
+ if (!profileCode.code.isOptimized) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // Has this function been inlined in another function?
+ bool isInlined() {
+ for (var profileCode in profileCodes) {
+ if (profileCode.code.kind == CodeKind.Stub) {
+ continue;
+ }
+ if (!profileCode.code.isDartCode) {
+ continue;
+ }
+ // If the code's function isn't this function.
+ if (profileCode.code.function != function) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void _addKindBasedAttributes(Set<String> attribs) {
+ if (function.kind == FunctionKind.kTag) {
+ attribs.add('tag');
+ } else if (function.kind == FunctionKind.kStub) {
+ attribs.add('dart');
+ attribs.add('stub');
+ } else if (function.kind == FunctionKind.kNative) {
+ attribs.add('native');
+ } else if (function.kind.isSynthetic()) {
+ attribs.add('synthetic');
+ } else {
+ attribs.add('dart');
+ }
+ }
+
+ ProfileFunction.fromMap(this.profile, this.function, Map data) {
+ for (var codeIndex in data['codes']) {
+ var profileCode = profile.codes[codeIndex];
+ profileCodes.add(profileCode);
+ }
+ profileCodes.sort(_sortCodes);
+
+ if (hasOptimizedCode()) {
+ attributes.add('optimized');
+ }
+ if (hasUnoptimizedCode()) {
+ attributes.add('unoptimized');
+ }
+ if (isInlined()) {
+ attributes.add('inlined');
+ }
+ _addKindBasedAttributes(attributes);
+ exclusiveTicks = int.parse(data['exclusiveTicks']);
+ inclusiveTicks = int.parse(data['inclusiveTicks']);
+
+ normalizedExclusiveTicks = exclusiveTicks / profile.sampleCount;
+ normalizedInclusiveTicks = inclusiveTicks / profile.sampleCount;
+
+ formattedExclusivePercent =
+ Utils.formatPercent(exclusiveTicks, profile.sampleCount);
+
+ formattedCpuTime =
+ Utils.formatTimeMilliseconds(
+ profile.approximateMillisecondsForCount(exclusiveTicks));
+
+ formattedOnStackTime =
+ Utils.formatTimeMilliseconds(
+ profile.approximateMillisecondsForCount(inclusiveTicks));
+
+ formattedInclusiveTicks =
+ '${Utils.formatPercent(inclusiveTicks, profile.sampleCount)} '
+ '($inclusiveTicks)';
+
+ formattedExclusiveTicks =
+ '${Utils.formatPercent(exclusiveTicks, profile.sampleCount)} '
+ '($exclusiveTicks)';
+ }
+}
+
+
+class CpuProfile {
+ final double MICROSECONDS_PER_SECOND = 1000000.0;
+ final double displayThreshold = 0.0002; // 0.02%.
+
+ Isolate isolate;
+
+ int sampleCount = 0;
+ int samplePeriod = 0;
+ double sampleRate = 0.0;
+
+ int stackDepth = 0;
+
+ double timeSpan = 0.0;
+
+ final Map<String, List> tries = <String, List>{};
+ final List<ProfileCode> codes = new List<ProfileCode>();
+ final List<ProfileFunction> functions = new List<ProfileFunction>();
+
+ CodeCallTree loadCodeTree(String name) {
+ if (name == 'inclusive') {
+ return _loadCodeTree(true, tries['inclusiveCodeTrie']);
+ } else {
+ return _loadCodeTree(false, tries['exclusiveCodeTrie']);
+ }
+ }
+
+ FunctionCallTree loadFunctionTree(String name) {
+ if (name == 'inclusive') {
+ return _loadFunctionTree(true, tries['inclusiveFunctionTrie']);
+ } else {
+ return _loadFunctionTree(false, tries['exclusiveFunctionTrie']);
+ }
+ }
+
+ void clear() {
+ sampleCount = 0;
+ samplePeriod = 0;
+ sampleRate = 0.0;
+ stackDepth = 0;
+ timeSpan = 0.0;
+ codes.clear();
+ functions.clear();
+ tries.clear();
+ }
+
+ void load(Isolate isolate, ServiceMap profile) {
+ clear();
+ if ((isolate == null) || (profile == null)) {
+ return;
+ }
+
+ this.isolate = isolate;
+ isolate.resetCachedProfileData();
+
+ sampleCount = profile['sampleCount'];
+ samplePeriod = profile['samplePeriod'];
+ sampleRate = (MICROSECONDS_PER_SECOND / samplePeriod);
+ stackDepth = profile['stackDepth'];
+ timeSpan = profile['timeSpan'];
+
+ // Process code table.
+ for (var codeRegion in profile['codes']) {
+ Code code = codeRegion['code'];
+ assert(code != null);
+ codes.add(new ProfileCode.fromMap(this, code, codeRegion));
+ }
+
+ // Process function table.
+ for (var profileFunction in profile['functions']) {
+ ServiceFunction function = profileFunction['function'];
+ assert(function != null);
+ functions.add(
+ new ProfileFunction.fromMap(this, function, profileFunction));
+ }
+
+ tries['exclusiveCodeTrie'] =
+ new Uint32List.fromList(profile['exclusiveCodeTrie']);
+ tries['inclusiveCodeTrie'] =
+ new Uint32List.fromList(profile['inclusiveCodeTrie']);
+ tries['exclusiveFunctionTrie'] =
+ new Uint32List.fromList(profile['exclusiveFunctionTrie']);
+ tries['inclusiveFunctionTrie'] =
+ new Uint32List.fromList(profile['inclusiveFunctionTrie']);
+ }
+
+ // Data shared across calls to _read*TrieNode.
+ int _dataCursor = 0;
+
+ // The code trie is serialized as a list of integers. Each node
+ // is recreated by consuming some portion of the list. The format is as
+ // follows:
+ // [0] index into codeTable of code object.
+ // [1] tick count (number of times this stack frame occured).
+ // [2] child node count
+ // Reading the trie is done by recursively reading the tree depth-first
+ // pre-order.
+ CodeCallTree _loadCodeTree(bool inclusive, List<int> data) {
+ if (data == null) {
+ return null;
+ }
+ if (data.length < 3) {
+ // Not enough for root node.
+ return null;
+ }
+ // Read the tree, returns the root node.
+ var root = _readCodeTrie(data);
+ return new CodeCallTree(inclusive, root);
+ }
+
+ CodeCallTreeNode _readCodeTrieNode(List<int> data) {
+ // Lookup code object.
+ var codeIndex = data[_dataCursor++];
+ var code = codes[codeIndex];
+ // Node tick counter.
+ var count = data[_dataCursor++];
+ // Child node count.
+ var children = data[_dataCursor++];
+ // Create node.
+ var node = new CodeCallTreeNode(code, count, children);
+ return node;
+ }
+
+ CodeCallTreeNode _readCodeTrie(List<int> data) {
+ final nodeStack = new List<CodeCallTreeNode>();
+ final childIndexStack = new List<int>();
+
+ _dataCursor = 0;
+ // Read root.
+ var root = _readCodeTrieNode(data);
+
+ // Push root onto stack.
+ if (root.children.length > 0) {
+ nodeStack.add(root);
+ childIndexStack.add(0);
+ }
+
+ while (nodeStack.length > 0) {
+ var lastIndex = nodeStack.length - 1;
+ // Pop parent from stack.
+ var parent = nodeStack[lastIndex];
+ var childIndex = childIndexStack[lastIndex];
+
+ // Read child node.
+ assert(childIndex < parent.children.length);
+ var node = _readCodeTrieNode(data);
+ parent.children[childIndex++] = node;
+
+ // If parent still has children, update child index.
+ if (childIndex < parent.children.length) {
+ childIndexStack[lastIndex] = childIndex;
+ } else {
+ // Finished processing parent node.
+ nodeStack.removeLast();
+ childIndexStack.removeLast();
+ }
+
+ // If node has children, push onto stack.
+ if (node.children.length > 0) {
+ nodeStack.add(node);
+ childIndexStack.add(0);
+ }
+ }
+
+ return root;
+ }
+
+ FunctionCallTree _loadFunctionTree(bool inclusive, List<int> data) {
+ if (data == null) {
+ return null;
+ }
+ if (data.length < 3) {
+ // Not enough integers for 1 node.
+ return null;
+ }
+ // Read the tree, returns the root node.
+ var root = _readFunctionTrie(data);
+ return new FunctionCallTree(inclusive, root);
+ }
+
+ FunctionCallTreeNode _readFunctionTrieNode(List<int> data) {
+ // Read index into function table.
+ var index = data[_dataCursor++];
+ // Lookup function object.
+ var function = functions[index];
+ // Counter.
+ var count = data[_dataCursor++];
+ // Create node.
+ var node = new FunctionCallTreeNode(function, count);
+ // Number of code index / count pairs.
+ var codeCount = data[_dataCursor++];
+ node.codes.length = codeCount;
+ var totalCodeTicks = 0;
+ for (var i = 0; i < codeCount; i++) {
+ var codeIndex = data[_dataCursor++];
+ var code = codes[codeIndex];
+ assert(code != null);
+ var codeTicks = data[_dataCursor++];
+ totalCodeTicks += codeTicks;
+ var nodeCode = new FunctionCallTreeNodeCode(code, codeTicks);
+ node.codes[i] = nodeCode;
+ }
+ node.setCodeAttributes();
+ node._totalCodeTicks = totalCodeTicks;
+ // Number of children.
+ var childCount = data[_dataCursor++];
+ node.children.length = childCount;
+ return node;
+ }
+
+ FunctionCallTreeNode _readFunctionTrie(List<int> data) {
+ final nodeStack = new List<FunctionCallTreeNode>();
+ final childIndexStack = new List<int>();
+
+ _dataCursor = 0;
+
+ // Read root.
+ var root = _readFunctionTrieNode(data);
+
+ // Push root onto stack.
+ if (root.children.length > 0) {
+ nodeStack.add(root);
+ childIndexStack.add(0);
+ }
+
+ while (nodeStack.length > 0) {
+ var lastIndex = nodeStack.length - 1;
+ // Pop parent from stack.
+ var parent = nodeStack[lastIndex];
+ var childIndex = childIndexStack[lastIndex];
+
+ // Read child node.
+ assert(childIndex < parent.children.length);
+ var node = _readFunctionTrieNode(data);
+ parent.children[childIndex++] = node;
+
+ // If parent still has children, update child index.
+ if (childIndex < parent.children.length) {
+ childIndexStack[lastIndex] = childIndex;
+ } else {
+ // Finished processing parent node.
+ nodeStack.removeLast();
+ childIndexStack.removeLast();
+ }
+
+ // If node has children, push onto stack.
+ if (node.children.length > 0) {
+ nodeStack.add(node);
+ childIndexStack.add(0);
+ }
+ }
+
+ return root;
+ }
+
+ int approximateMillisecondsForCount(count) {
+ var MICROSECONDS_PER_MILLISECOND = 1000.0;
+ return (count * samplePeriod) ~/ MICROSECONDS_PER_MILLISECOND;
+ }
+
+ double approximateSecondsForCount(count) {
+ var MICROSECONDS_PER_SECOND = 1000000.0;
+ return (count * samplePeriod) / MICROSECONDS_PER_SECOND;
+ }
+}
diff --git a/runtime/observatory/lib/src/elements/class_ref.dart b/runtime/observatory/lib/src/elements/class_ref.dart
index 3a49ec8..5eebe73 100644
--- a/runtime/observatory/lib/src/elements/class_ref.dart
+++ b/runtime/observatory/lib/src/elements/class_ref.dart
@@ -10,4 +10,17 @@
@CustomTag('class-ref')
class ClassRefElement extends ServiceRefElement {
ClassRefElement.created() : super.created();
-}
+
+ refChanged(oldValue) {
+ super.refChanged(oldValue);
+ _updateShadowDom();
+ }
+
+ void _updateShadowDom() {
+ clearShadowRoot();
+ if (ref == null) {
+ return;
+ }
+ insertLinkIntoShadowRoot(name, url, hoverText);
+ }
+}
\ No newline at end of file
diff --git a/runtime/observatory/lib/src/elements/class_ref.html b/runtime/observatory/lib/src/elements/class_ref.html
index f2da5fb..e3f908a 100644
--- a/runtime/observatory/lib/src/elements/class_ref.html
+++ b/runtime/observatory/lib/src/elements/class_ref.html
@@ -2,7 +2,7 @@
<link rel="import" href="service_ref.html">
<polymer-element name="class-ref" extends="service-ref">
- <template><link rel="stylesheet" href="css/shared.css"><span><a on-click="{{ goto }}" title="{{ hoverText }}" _href="{{ url }}">{{ name }}</a></span></template>
+ <template><link rel="stylesheet" href="css/shared.css"></template>
</polymer-element>
<script type="application/dart" src="class_ref.dart"></script>
diff --git a/runtime/observatory/lib/src/elements/class_tree.dart b/runtime/observatory/lib/src/elements/class_tree.dart
index c42fb29..42de21c 100644
--- a/runtime/observatory/lib/src/elements/class_tree.dart
+++ b/runtime/observatory/lib/src/elements/class_tree.dart
@@ -31,12 +31,11 @@
children.add(row);
}
}
- var classCell = tableColumns[0];
- // Enable expansion by clicking anywhere on the class column.
- classCell.onClick.listen(onClick);
-
+ var classCell = flexColumns[0];
+ classCell.style.justifyContent = 'flex-start';
var classRef = new Element.tag('class-ref');
classRef.ref = cls;
+ classRef.style.alignSelf = 'center';
classCell.children.add(classRef);
}
diff --git a/runtime/observatory/lib/src/elements/class_tree.html b/runtime/observatory/lib/src/elements/class_tree.html
index cbe79d1..45a8dc3 100644
--- a/runtime/observatory/lib/src/elements/class_tree.html
+++ b/runtime/observatory/lib/src/elements/class_tree.html
@@ -8,86 +8,18 @@
<link rel="stylesheet" href="css/shared.css">
<style>
.table {
- border-collapse: collapse!important;
+ border-spacing: 0px;
width: 100%;
margin-bottom: 20px
- }
- .table thead > tr > th,
- .table tbody > tr > th,
- .table tfoot > tr > th,
- .table thead > tr > td,
- .table tbody > tr > td,
- .table tfoot > tr > td {
- padding: 8px;
- vertical-align: top;
- }
- .table thead > tr > th {
- vertical-align: bottom;
- text-align: left;
- border-bottom:2px solid #ddd;
+ vertical-align: middle;
}
- tr:hover > td {
- background-color: #FFF3E3;
- }
- .rowColor0 {
- background-color: #FFE9CC;
- }
- .rowColor1 {
- background-color: #FFDEB2;
- }
- .rowColor2 {
- background-color: #FFD399;
- }
- .rowColor3 {
- background-color: #FFC87F;
- }
- .rowColor4 {
- background-color: #FFBD66;
- }
- .rowColor5 {
- background-color: #FFB24C;
- }
- .rowColor6 {
- background-color: #FFA733;
- }
- .rowColor7 {
- background-color: #FF9C19;
- }
- .rowColor8 {
- background-color: #FF9100;
+ tr {
+ background-color: #FFFFFF;
}
- .tooltip {
- display: block;
- position: absolute;
- visibility: hidden;
- opacity: 0;
- transition: visibility 0s linear 0.5s;
- transition: opacity .4s ease-in-out;
- }
-
- tr:hover .tooltip {
- display: block;
- position: absolute;
- top: 100%;
- right: 100%;
- visibility: visible;
- z-index: 999;
- width: 400px;
- color: #ffffff;
- background-color: #0489c3;
- border-top-right-radius: 8px;
- border-top-left-radius: 8px;
- border-bottom-right-radius: 8px;
- border-bottom-left-radius: 8px;
- transition: visibility 0s linear 0.5s;
- transition: opacity .4s ease-in-out;
- opacity: 1;
- }
-
- .white {
- color: #ffffff;
+ tr:hover {
+ background-color: #FAFAFA;
}
</style>
<nav-bar>
diff --git a/runtime/observatory/lib/src/elements/code_ref.dart b/runtime/observatory/lib/src/elements/code_ref.dart
index 488bebc..88464de 100644
--- a/runtime/observatory/lib/src/elements/code_ref.dart
+++ b/runtime/observatory/lib/src/elements/code_ref.dart
@@ -10,12 +10,25 @@
@CustomTag('code-ref')
class CodeRefElement extends ServiceRefElement {
- @observable Code get code => ref;
+ CodeRefElement.created() : super.created();
+
+ Code get code => ref;
refChanged(oldValue) {
super.refChanged(oldValue);
- notifyPropertyChange(#code, 0, 1);
+ _updateShadowDom();
}
- CodeRefElement.created() : super.created();
+ void _updateShadowDom() {
+ clearShadowRoot();
+ if (code == null) {
+ return;
+ }
+ var name = (code.isOptimized ? '*' : '') + code.name;
+ if (code.isDartCode) {
+ insertLinkIntoShadowRoot(name, url, hoverText);
+ } else {
+ insertTextSpanIntoShadowRoot(name);
+ }
+ }
}
diff --git a/runtime/observatory/lib/src/elements/code_ref.html b/runtime/observatory/lib/src/elements/code_ref.html
index c6e53d5..c20fdb5 100644
--- a/runtime/observatory/lib/src/elements/code_ref.html
+++ b/runtime/observatory/lib/src/elements/code_ref.html
@@ -2,20 +2,7 @@
<link rel="import" href="service_ref.html">
<polymer-element name="code-ref" extends="service-ref">
- <template>
- <link rel="stylesheet" href="css/shared.css">
- <template if="{{ code.isDartCode }}">
- <template if="{{ code.isOptimized }}">
- <a on-click="{{ goto }}" _href="{{ url }}">*{{ name }}</a>
- </template>
- <template if="{{ !code.isOptimized }}">
- <a on-click="{{ goto }}" _href="{{ url }}">{{ name }}</a>
- </template>
- </template>
- <template if="{{ !code.isDartCode }}">
- <span>{{ name }}</span>
- </template>
- </template>
+ <template><link rel="stylesheet" href="css/shared.css"></template>
</polymer-element>
<script type="application/dart" src="code_ref.dart"></script>
\ No newline at end of file
diff --git a/runtime/observatory/lib/src/elements/code_view.dart b/runtime/observatory/lib/src/elements/code_view.dart
index f44af1f..743febc 100644
--- a/runtime/observatory/lib/src/elements/code_view.dart
+++ b/runtime/observatory/lib/src/elements/code_view.dart
@@ -6,29 +6,339 @@
import 'dart:html';
import 'observatory_element.dart';
+import 'package:observatory/app.dart';
import 'package:observatory/service.dart';
+import 'package:observatory/cpu_profile.dart';
import 'package:polymer/polymer.dart';
+class DisassemblyTable extends SortedTable {
+ DisassemblyTable(columns) : super(columns);
+}
+
+class InlineTable extends SortedTable {
+ InlineTable(columns) : super(columns);
+}
+
@CustomTag('code-view')
class CodeViewElement extends ObservatoryElement {
- @published Code code;
- CodeViewElement.created() : super.created();
+ @observable Code code;
+ ProfileCode get profile => code == null ? null : code.profile;
+ DisassemblyTable disassemblyTable;
+ InlineTable inlineTable;
+
+ CodeViewElement.created() : super.created() {
+ // Create table models.
+ var columns = [
+ new SortedTableColumn('Address'),
+ new SortedTableColumn('Inclusive'),
+ new SortedTableColumn('Exclusive'),
+ new SortedTableColumn('Disassembly'),
+ ];
+ disassemblyTable = new DisassemblyTable(columns);
+ columns = [
+ new SortedTableColumn('Address'),
+ new SortedTableColumn('Inclusive'),
+ new SortedTableColumn('Exclusive'),
+ new SortedTableColumn('Functions'),
+ ];
+ inlineTable = new InlineTable(columns);
+ }
@override
void attached() {
super.attached();
+ }
+
+ void codeChanged(oldValue) {
if (code == null) {
return;
}
code.load().then((Code c) {
c.loadScript();
});
+ _updateDisassembly();
+ _updateInline();
}
void refresh(var done) {
code.reload().whenComplete(done);
}
+ void refreshTicks(var done) {
+ var isolate = code.isolate;
+ isolate.invokeRpc('getCpuProfile', { 'tags': 'None' })
+ .then((ServiceMap response) {
+ var cpuProfile = new CpuProfile();
+ cpuProfile.load(isolate, response);
+ _updateDisassembly();
+ _updateInline();
+ }).whenComplete(done);
+ }
+
+ String formattedAddress(CodeInstruction instruction) {
+ if (instruction.address == 0) {
+ return '';
+ }
+ return '0x${instruction.address.toRadixString(16)}';
+ }
+
+ String formattedAddressRange(CodeInlineInterval interval) {
+ String start = interval.start.toRadixString(16);
+ String end = interval.end.toRadixString(16);
+ return '[0x$start, 0x$end)';
+ }
+
+ String formattedInclusiveInterval(CodeInlineInterval interval) {
+ if (code == null) {
+ return '';
+ }
+ if (code.profile == null) {
+ return '';
+ }
+ var intervalTick = code.profile.intervalTicks[interval.start];
+ if (intervalTick == null) {
+ return '';
+ }
+ // Don't show inclusive ticks if they are the same as exclusive ticks.
+ if (intervalTick.inclusiveTicks == intervalTick.exclusiveTicks) {
+ return '';
+ }
+ var pcent = Utils.formatPercent(intervalTick.inclusiveTicks,
+ code.profile.profile.sampleCount);
+ return '$pcent (${intervalTick.inclusiveTicks})';
+ }
+
+ String formattedExclusiveInterval(CodeInlineInterval interval) {
+ if (code == null) {
+ return '';
+ }
+ if (code.profile == null) {
+ return '';
+ }
+ var intervalTick = code.profile.intervalTicks[interval.start];
+ if (intervalTick == null) {
+ return '';
+ }
+ var pcent = Utils.formatPercent(intervalTick.exclusiveTicks,
+ code.profile.profile.sampleCount);
+ return '$pcent (${intervalTick.exclusiveTicks})';
+ }
+
+
+ String formattedInclusive(CodeInstruction instruction) {
+ if (code == null) {
+ return '';
+ }
+ if (code.profile == null) {
+ return '';
+ }
+ var tick = code.profile.addressTicks[instruction.address];
+ if (tick == null) {
+ return '';
+ }
+ // Don't show inclusive ticks if they are the same as exclusive ticks.
+ if (tick.inclusiveTicks == tick.exclusiveTicks) {
+ return '';
+ }
+ var pcent = Utils.formatPercent(tick.inclusiveTicks,
+ code.profile.profile.sampleCount);
+ return '$pcent (${tick.inclusiveTicks})';
+ }
+
+ String formattedExclusive(CodeInstruction instruction) {
+ if (code == null) {
+ return '';
+ }
+ if (code.profile == null) {
+ return '';
+ }
+ var tick = code.profile.addressTicks[instruction.address];
+ if (tick == null) {
+ return '';
+ }
+ var pcent = Utils.formatPercent(tick.exclusiveTicks,
+ code.profile.profile.sampleCount);
+ return '$pcent (${tick.exclusiveTicks})';
+ }
+
+ void _updateDiasssemblyTable() {
+ disassemblyTable.clearRows();
+ if (code == null) {
+ return;
+ }
+ for (CodeInstruction instruction in code.instructions) {
+ var row = [formattedAddress(instruction),
+ formattedInclusive(instruction),
+ formattedExclusive(instruction),
+ instruction.human];
+ disassemblyTable.addRow(new SortedTableRow(row));
+ }
+ }
+
+ void _addDisassemblyDOMRow() {
+ var tableBody = $['disassemblyTableBody'];
+ assert(tableBody != null);
+ var tr = new TableRowElement();
+
+ var cell;
+
+ // Add new space.
+ cell = tr.insertCell(-1);
+ cell.classes.add('monospace');
+ cell = tr.insertCell(-1);
+ cell.classes.add('monospace');
+ cell = tr.insertCell(-1);
+ cell.classes.add('monospace');
+ cell = tr.insertCell(-1);
+ cell.classes.add('monospace');
+
+ tableBody.children.add(tr);
+ }
+
+ void _fillDisassemblyDOMRow(TableRowElement tr, int rowIndex) {
+ var row = disassemblyTable.rows[rowIndex];
+ for (var i = 0; i < row.values.length; i++) {
+ var cell = tr.children[i];
+ cell.title = row.values[i].toString();
+ cell.text = row.values[i].toString();
+ }
+ }
+
+ void _updateDisassemblyDOMTable() {
+ var tableBody = $['disassemblyTableBody'];
+ assert(tableBody != null);
+ // Resize DOM table.
+ if (tableBody.children.length > disassemblyTable.sortedRows.length) {
+ // Shrink the table.
+ var deadRows =
+ tableBody.children.length - disassemblyTable.sortedRows.length;
+ for (var i = 0; i < deadRows; i++) {
+ tableBody.children.removeLast();
+ }
+ } else if (tableBody.children.length < disassemblyTable.sortedRows.length) {
+ // Grow table.
+ var newRows =
+ disassemblyTable.sortedRows.length - tableBody.children.length;
+ for (var i = 0; i < newRows; i++) {
+ _addDisassemblyDOMRow();
+ }
+ }
+
+ assert(tableBody.children.length == disassemblyTable.sortedRows.length);
+ // Fill table.
+ for (var i = 0; i < disassemblyTable.sortedRows.length; i++) {
+ var rowIndex = disassemblyTable.sortedRows[i];
+ var tr = tableBody.children[i];
+ _fillDisassemblyDOMRow(tr, rowIndex);
+ }
+ }
+
+ void _updateDisassembly() {
+ notifyPropertyChange(#code, true, false);
+ _updateDiasssemblyTable();
+ _updateDisassemblyDOMTable();
+ }
+
+ void _updateInlineTable() {
+ inlineTable.clearRows();
+ if (code == null) {
+ return;
+ }
+ for (CodeInlineInterval interval in code.inlineIntervals) {
+ var row = [interval,
+ formattedInclusiveInterval(interval),
+ formattedExclusiveInterval(interval),
+ interval.functions];
+ inlineTable.addRow(new SortedTableRow(row));
+ }
+ }
+
+ void _addInlineDOMRow() {
+ var tableBody = shadowRoot.querySelector('#inlineRangeTableBody');
+ assert(tableBody != null);
+ var tr = new TableRowElement();
+
+ var cell;
+
+ // Add new space.
+ cell = tr.insertCell(-1);
+ cell.classes.add('monospace');
+ cell = tr.insertCell(-1);
+ cell.classes.add('monospace');
+ cell = tr.insertCell(-1);
+ cell.classes.add('monospace');
+ cell = tr.insertCell(-1);
+
+ tableBody.children.add(tr);
+ }
+
+ void _fillInlineDOMRow(TableRowElement tr, int rowIndex) {
+ var row = inlineTable.rows[rowIndex];
+ var columns = row.values.length;
+ var addressRangeColumn = 0;
+ var functionsColumn = columns - 1;
+
+ {
+ var addressRangeCell = tr.children[addressRangeColumn];
+ var interval = row.values[addressRangeColumn];
+ var addressRangeString = formattedAddressRange(interval);
+ var addressRangeElement = new SpanElement();
+ addressRangeElement.classes.add('monospace');
+ addressRangeElement.text = addressRangeString;
+ addressRangeCell.children.clear();
+ addressRangeCell.children.add(addressRangeElement);
+ }
+
+ for (var i = addressRangeColumn + 1; i < columns - 1; i++) {
+ var cell = tr.children[i];
+ cell.title = row.values[i].toString();
+ cell.text = row.values[i].toString();
+ }
+ var functions = row.values[functionsColumn];
+ var functionsCell = tr.children[functionsColumn];
+ functionsCell.children.clear();
+ for (var func in functions) {
+ var functionRef = new Element.tag('function-ref');
+ functionRef.ref = func;
+ functionsCell.children.add(functionRef);
+ var gap = new SpanElement();
+ gap.style.minWidth = '1em';
+ gap.text = ' ';
+ functionsCell.children.add(gap);
+ }
+ }
+
+ void _updateInlineDOMTable() {
+ var tableBody = shadowRoot.querySelector('#inlineRangeTableBody');
+ // Resize DOM table.
+ if (tableBody.children.length > inlineTable.sortedRows.length) {
+ // Shrink the table.
+ var deadRows =
+ tableBody.children.length - inlineTable.sortedRows.length;
+ for (var i = 0; i < deadRows; i++) {
+ tableBody.children.removeLast();
+ }
+ } else if (tableBody.children.length < inlineTable.sortedRows.length) {
+ // Grow table.
+ var newRows = inlineTable.sortedRows.length - tableBody.children.length;
+ for (var i = 0; i < newRows; i++) {
+ _addInlineDOMRow();
+ }
+ }
+ assert(tableBody.children.length == inlineTable.sortedRows.length);
+ // Fill table.
+ for (var i = 0; i < inlineTable.sortedRows.length; i++) {
+ var rowIndex = inlineTable.sortedRows[i];
+ var tr = tableBody.children[i];
+ _fillInlineDOMRow(tr, rowIndex);
+ }
+ }
+
+ void _updateInline() {
+ _updateInlineTable();
+ _updateInlineDOMTable();
+ }
+
Element _findJumpTarget(Element target) {
var jumpTarget = target.attributes['data-jump-target'];
if (jumpTarget == '') {
diff --git a/runtime/observatory/lib/src/elements/code_view.html b/runtime/observatory/lib/src/elements/code_view.html
index 56010b4..44316f8 100644
--- a/runtime/observatory/lib/src/elements/code_view.html
+++ b/runtime/observatory/lib/src/elements/code_view.html
@@ -9,48 +9,33 @@
<template>
<link rel="stylesheet" href="css/shared.css">
<style>
- div.flex-row:hover {
- background-color: #FFF3E3;
+ .table {
+ table-layout: fixed;
}
- .highlight {
- background-color: #FFF3E3;
+ th:nth-of-type(1), td:nth-of-type(1) {
+ min-width: 10em;
+ text-align: left;
}
- .tooltip {
+ th:nth-of-type(2), td:nth-of-type(2) {
+ min-width: 10em;
+ text-align: left;
+ }
+
+ th:nth-of-type(3), td:nth-of-type(3) {
+ padding-right: 3em;
+ }
+
+ th:nth-of-type(4), td:nth-of-type(4) {
+ padding-left: 3em;
+ overflow: visible;
+ white-space: pre;
display: block;
- position: absolute;
- visibility: hidden;
- opacity: 0;
- transition: visibility 0s linear 0.5s;
- transition: opacity .4s ease-in-out;
}
- .flex-row:hover .tooltip {
- display: block;
- position: absolute;
- top: 100%;
- visibility: visible;
- z-index: 999;
- width: auto;
- min-width: 400px;
- color: #ffffff;
- background-color: #FFF3E3;
- border-bottom-right-radius: 8px;
- border-bottom-left-radius: 8px;
- transition: visibility 0s linear 0.5s;
- transition: opacity .4s ease-in-out;
- opacity: 1;
- }
-
- .descriptor-address {
- color: #0489c3;
- }
-
- .snippet {
- text-align: center;
- margin-left: 10px;
- margin-right: 10px;
+ tr:hover > td {
+ background-color: #F4C7C3;
}
</style>
@@ -59,6 +44,7 @@
<isolate-nav-menu isolate="{{ code.isolate }}"></isolate-nav-menu>
<nav-menu link="{{ makeLink('/inspect', code) }}" anchor="{{ code.name }}" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
+ <nav-refresh callback="{{ refreshTicks }}" label="Refresh Ticks"></nav-refresh>
<nav-control></nav-control>
</nav-bar>
<div class="content">
@@ -71,12 +57,12 @@
<div class="memberList">
<div class="memberItem">
<div class="memberName">Kind</div>
- <div class="memberValue">{{code.kind}}</div>
+ <div class="memberValue">{{ code.kind.toString() }}</div>
</div>
<template if="{{ code.isDartCode }}">
<div class="memberItem">
<div class="memberName">Optimized</div>
- <div class="memberValue">{{code.isOptimized}}</div>
+ <div class="memberValue">{{ code.isOptimized }}</div>
</div>
</template>
<div class="memberItem">
@@ -88,11 +74,11 @@
</div>
<div class="memberItem">
<div class="memberName">Inclusive</div>
- <div class="memberValue">{{ code.formattedInclusiveTicks }}</div>
+ <div class="memberValue">{{ code.profile.formattedInclusiveTicks }}</div>
</div>
<div class="memberItem">
<div class="memberName">Exclusive</div>
- <div class="memberValue">{{ code.formattedExclusiveTicks }}</div>
+ <div class="memberValue">{{ code.profile.formattedExclusiveTicks }}</div>
</div>
<div class="memberItem">
<div class="memberName">Constant object pool</div>
@@ -100,70 +86,54 @@
<any-service-ref ref="{{ code.objectPool }}"></any-service-ref>
</div>
</div>
+ <template if="{{ code.inlinedFunctions.isNotEmpty }}">
+ <div class="memberItem">
+ <div class="memberName">inlined functions ({{ code.inlinedFunctions.length }})</div>
+ <div class="memberValue">
+ <curly-block expand="{{ code.inlinedFunctions.length <= 8 }}">
+ <div class="memberList">
+ <template repeat="{{ func in code.inlinedFunctions }}">
+ <div class="memberItem">
+ <div class="memberValue">
+ <function-ref ref="{{ func }}"></function-ref>
+ </div>
+ </div>
+ </template>
+ </div>
+ </curly-block>
+ </div>
+ </div>
+ </template>
</div>
</div>
<hr>
- <div class="content">
- <template if="{{ code.hasDisassembly }}">
- <div class="flex-row">
- <div class="flex-item-fixed-2-12 memberHeader">Inclusive</div>
- <div class="flex-item-fixed-2-12 memberHeader">Exclusive</div>
- <div class="flex-item-fixed-2-12 memberHeader">Address</div>
- <div class="flex-item-fixed-6-12 memberHeader">Disassembly</div>
- </div>
- </template>
- <template repeat="{{ instruction in code.instructions }}">
- <div class="flex-row" on-mouseover="{{ mouseOver }}" on-mouseout="{{ mouseOut }}" data-jump-target="{{ instruction.jumpTarget.address }}" id="addr-{{ instruction.address }}" style="position: relative">
- <template if="{{ instruction.isComment }}">
- <div class="flex-item-fixed-2-12 monospace">{{ instruction.formattedInclusive(code) }}</div>
- <div class="flex-item-fixed-2-12 monospace">{{ instruction.formattedExclusive(code) }}</div>
- <div class="flex-item-fixed-8-12 monospace">{{ instruction.human }}</div>
- </template>
- <template if="{{ !instruction.isComment }}">
- <div class="flex-item-fixed-2-12 monospace">{{ instruction.formattedInclusive(code) }}</div>
- <div class="flex-item-fixed-2-12 monospace">{{ instruction.formattedExclusive(code) }}</div>
- <template if="{{ instruction.hasDescriptors }}">
- <div class="flex-item-fixed-2-12 monospace descriptor-address">
- <div class="tooltip">
- <template repeat="{{ descriptor in instruction.descriptors }}">
- <div class="memberList">
- <div class="memberItem">
- <div class="memberName">Kind</div>
- <div class="memberValue">{{ descriptor.kind }}</div>
- </div>
- <div class="memberItem">
- <div class="memberName">Deoptimization ID</div>
- <div class="memberValue">{{ descriptor.formattedDeoptId() }}</div>
- </div>
- <template if="{{ descriptor.script != null }}">
- <div class="memberItem">
- <div class="memberName">Script</div>
- <div class="memberValue"><script-ref ref="{{ descriptor.script }}" pos="{{ descriptor.tokenPos }}"></script-ref></div>
- </div>
- </template>
- </div>
- <template if="{{ descriptor.script != null }}">
- <div class="snippet monospace">
- <span>{{ descriptor.formattedLine }}</span>
- </div>
- </template>
- </template>
- </div>
- {{ instruction.formattedAddress() }}
- </div>
- </template>
- <template if="{{ !instruction.hasDescriptors }}">
- <div class="flex-item-fixed-2-12 monospace">
- {{ instruction.formattedAddress() }}
- </div>
- </template>
- <div class="flex-item-fixed-6-12 monospace">
- {{ instruction.human }}
- </div>
- </template>
- </div>
- </template>
- </div>
+ <table id="inlineRangeTable" class="table">
+ <thead id="inlineRangeTableHead">
+ <tr>
+ <th class="address" title="Address range">Address Range</th>
+ <th class="tick" title="Inclusive">Inclusive</th>
+ <th class="tick" title="Exclusive">Exclusive</th>
+ <th title="Functions">Functions</th>
+ </tr>
+ </thead>
+ <tbody class="monospace" id="inlineRangeTableBody">
+ </tbody>
+ </table>
+ <hr>
+ <table id="disassemblyTable" class="table">
+ <thead id="disassemblyTableHead">
+ <tr>
+ <th class="address" title="Address">Address</th>
+ <th class="tick" title="Inclusive">Inclusive</th>
+ <th class="tick" title="Exclusive">Exclusive</th>
+ <th class="disassembly" title="Disassembly">Disassembly</th>
+ </tr>
+ </thead>
+ <tbody class="monospace" id="disassemblyTableBody">
+ </tbody>
+ </table>
+ <br><br><br>
+ <br><br><br>
</template>
</polymer-element>
diff --git a/runtime/observatory/lib/src/elements/cpu_profile.dart b/runtime/observatory/lib/src/elements/cpu_profile.dart
index 154f80f..8a69f90 100644
--- a/runtime/observatory/lib/src/elements/cpu_profile.dart
+++ b/runtime/observatory/lib/src/elements/cpu_profile.dart
@@ -4,77 +4,46 @@
library cpu_profile_element;
+import 'dart:async';
import 'dart:html';
import 'observatory_element.dart';
import 'package:logging/logging.dart';
import 'package:observatory/service.dart';
import 'package:observatory/app.dart';
+import 'package:observatory/cpu_profile.dart';
import 'package:observatory/elements.dart';
import 'package:polymer/polymer.dart';
-class ProfileCodeTrieNodeTreeRow extends TableTreeRow {
- final ServiceMap profile;
- @reflectable final CodeTrieNode root;
- @reflectable final CodeTrieNode node;
- @reflectable Code get code => node.code;
+List<String> sorted(Set<String> attributes) {
+ var list = attributes.toList();
+ list.sort();
+ return list;
+}
- @reflectable String tipKind = '';
- @reflectable String tipParent = '';
- @reflectable String tipExclusive = '';
- @reflectable String tipTicks = '';
- @reflectable String tipTime = '';
+abstract class ProfileTreeRow<T> extends TableTreeRow {
+ final CpuProfile profile;
+ final T node;
+ final String selfPercent;
+ final String percent;
+ bool _infoBoxShown = false;
+ HtmlElement infoBox;
+ HtmlElement infoButton;
- ProfileCodeTrieNodeTreeRow(this.profile, this.root, this.node,
- TableTree tree,
- ProfileCodeTrieNodeTreeRow parent)
- : super(tree, parent) {
- assert(root != null);
- assert(node != null);
- tipTicks = '${node.count}';
- var period = profile['period'];
- var MICROSECONDS_PER_SECOND = 1000000.0;
- var seconds = (period * node.count) / MICROSECONDS_PER_SECOND; // seconds
- tipTime = Utils.formatTimePrecise(seconds);
- if (code.kind == CodeKind.Tag) {
- tipKind = 'Tag (category)';
- if (parent == null) {
- tipParent = Utils.formatPercent(node.count, root.count);
- } else {
- tipParent = Utils.formatPercent(node.count, parent.node.count);
- }
- tipExclusive = Utils.formatPercent(node.count, root.count);
- } else {
- if ((code.kind == CodeKind.Collected) ||
- (code.kind == CodeKind.Reused)) {
- tipKind = 'Garbage Collected Code';
- } else {
- tipKind = '${code.kind} (Function)';
- }
- if (parent == null) {
- tipParent = Utils.formatPercent(node.count, root.count);
- } else {
- tipParent = Utils.formatPercent(node.count, parent.node.count);
- }
- tipExclusive = Utils.formatPercent(node.code.exclusiveTicks, root.count);
- }
- }
+ ProfileTreeRow(TableTree tree, TableTreeRow parent,
+ this.profile, this.node, double selfPercent, double percent)
+ : super(tree, parent),
+ selfPercent = Utils.formatPercentNormalized(selfPercent),
+ percent = Utils.formatPercentNormalized(percent);
- bool shouldDisplayChild(CodeTrieNode childNode, double threshold) {
- return ((childNode.count / node.count) > threshold) ||
- ((childNode.code.exclusiveTicks / root.count) > threshold);
- }
-
- void _buildTooltip(DivElement memberList, Map<String, String> items) {
+ static _addToMemberList(DivElement memberList, Map<String, String> items) {
items.forEach((k, v) {
var item = new DivElement();
item.classes.add('memberItem');
var name = new DivElement();
name.classes.add('memberName');
- name.classes.add('white');
name.text = k;
var value = new DivElement();
value.classes.add('memberValue');
- value.classes.add('white');
value.text = v;
item.children.add(name);
item.children.add(value);
@@ -82,160 +51,563 @@
});
}
+ makeInfoBox() {
+ if (infoBox != null) {
+ return;
+ }
+ infoBox = new DivElement();
+ infoBox.classes.add('infoBox');
+ infoBox.classes.add('shadow');
+ infoBox.style.display = 'none';
+ listeners.add(infoBox.onClick.listen((e) => e.stopPropagation()));
+ }
+
+ makeInfoButton() {
+ infoButton = new SpanElement();
+ infoButton.style.marginLeft = 'auto';
+ infoButton.style.marginRight = '1em';
+ infoButton.children.add(new Element.tag('icon-info-outline'));
+ listeners.add(infoButton.onClick.listen((event) {
+ event.stopPropagation();
+ toggleInfoBox();
+ }));
+ }
+
+ static const attributes = const {
+ 'optimized' : const ['O', null, 'Optimized'],
+ 'unoptimized' : const ['U', null, 'Unoptimized'],
+ 'inlined' : const ['I', null, 'Inlined'],
+ 'dart' : const ['D', null, 'Dart'],
+ 'tag' : const ['T', null, 'Tag'],
+ 'native' : const ['N', null, 'Native'],
+ 'stub': const ['S', null, 'Stub'],
+ 'synthetic' : const ['?', null, 'Synthetic'],
+ };
+
+ HtmlElement newAttributeBox(String attribute) {
+ List attributeDetails = attributes[attribute];
+ if (attributeDetails == null) {
+ print('could not find attribute $attribute');
+ return null;
+ }
+ var element = new SpanElement();
+ element.style.border = 'solid 2px #ECECEC';
+ element.style.height = '100%';
+ element.style.display = 'inline-block';
+ element.style.textAlign = 'center';
+ element.style.minWidth = '1.5em';
+ element.style.fontWeight = 'bold';
+ if (attributeDetails[1] != null) {
+ element.style.backgroundColor = attributeDetails[1];
+ }
+ element.text = attributeDetails[0];
+ element.title = attributeDetails[2];
+ return element;
+ }
+
+ onHide() {
+ super.onHide();
+ infoBox = null;
+ infoButton = null;
+ }
+
+ showInfoBox() {
+ if ((infoButton == null) || (infoBox == null)) {
+ return;
+ }
+ _infoBoxShown = true;
+ infoBox.style.display = 'block';
+ infoButton.children.clear();
+ infoButton.children.add(new Element.tag('icon-info'));
+ }
+
+ hideInfoBox() {
+ _infoBoxShown = false;
+ if ((infoButton == null) || (infoBox == null)) {
+ return;
+ }
+ infoBox.style.display = 'none';
+ infoButton.children.clear();
+ infoButton.children.add(new Element.tag('icon-info-outline'));
+ }
+
+ toggleInfoBox() {
+ if (_infoBoxShown) {
+ hideInfoBox();
+ } else {
+ showInfoBox();
+ }
+ }
+
+ hideAllInfoBoxes() {
+ final List<ProfileTreeRow> rows = tree.rows;
+ for (var row in rows) {
+ row.hideInfoBox();
+ }
+ }
+
+ onClick(MouseEvent e) {
+ e.stopPropagation();
+ if (e.altKey) {
+ bool show = !_infoBoxShown;
+ hideAllInfoBoxes();
+ if (show) {
+ showInfoBox();
+ }
+ return;
+ }
+ super.onClick(e);
+ }
+
+ HtmlElement newCodeRef(ProfileCode code) {
+ var codeRef = new Element.tag('code-ref');
+ codeRef.ref = code.code;
+ return codeRef;
+ }
+
+ HtmlElement newFunctionRef(ProfileFunction function) {
+ var ref = new Element.tag('function-ref');
+ ref.ref = function.function;
+ return ref;
+ }
+
+ HtmlElement hr() {
+ var element = new HRElement();
+ return element;
+ }
+
+ HtmlElement div(String text) {
+ var element = new DivElement();
+ element.text = text;
+ return element;
+ }
+
+ HtmlElement br() {
+ return new BRElement();
+ }
+
+ HtmlElement span(String text) {
+ var element = new SpanElement();
+ element.style.minWidth = '1em';
+ element.text = text;
+ return element;
+ }
+}
+
+class CodeProfileTreeRow extends ProfileTreeRow<CodeCallTreeNode> {
+ CodeProfileTreeRow(TableTree tree, CodeProfileTreeRow parent,
+ CpuProfile profile, CodeCallTreeNode node)
+ : super(tree, parent, profile, node,
+ node.profileCode.normalizedExclusiveTicks,
+ node.percentage) {
+ // fill out attributes.
+ }
+
+ bool hasChildren() => node.children.length > 0;
+
void onShow() {
super.onShow();
+
if (children.length == 0) {
- var threshold = profile['threshold'];
for (var childNode in node.children) {
- if (!shouldDisplayChild(childNode, threshold)) {
- continue;
- }
- var row =
- new ProfileCodeTrieNodeTreeRow(profile, root, childNode, tree, this);
+ var row = new CodeProfileTreeRow(tree, this, profile, childNode);
children.add(row);
}
}
- var row = tr;
- var methodCell = tableColumns[0];
- // Enable expansion by clicking anywhere on the method column.
- methodCell.onClick.listen(onClick);
+ // Fill in method column.
+ var methodColumn = flexColumns[0];
+ methodColumn.style.justifyContent = 'flex-start';
+ methodColumn.style.position = 'relative';
- // Insert the parent percentage
- var parentPercent = new DivElement();
- parentPercent.style.position = 'relative';
- parentPercent.style.display = 'inline';
- parentPercent.text = tipParent;
- methodCell.children.add(parentPercent);
+ // Percent.
+ var percentNode = new DivElement();
+ percentNode.text = percent;
+ percentNode.style.minWidth = '5em';
+ percentNode.style.textAlign = 'right';
+ percentNode.title = 'Self: $selfPercent';
+ methodColumn.children.add(percentNode);
- var codeRef = new Element.tag('code-ref');
- codeRef.ref = code;
- methodCell.children.add(codeRef);
+ // Gap.
+ var gap = new SpanElement();
+ gap.style.minWidth = '1em';
+ methodColumn.children.add(gap);
- var selfCell = tableColumns[1];
- selfCell.style.position = 'relative';
- selfCell.text = tipExclusive;
+ // Code link.
+ var codeRef = newCodeRef(node.profileCode);
+ codeRef.style.alignSelf = 'center';
+ methodColumn.children.add(codeRef);
- var tooltipDiv = new DivElement();
- tooltipDiv.classes.add('tooltip');
+ gap = new SpanElement();
+ gap.style.minWidth = '1em';
+ methodColumn.children.add(gap);
- var memberListDiv = new DivElement();
- memberListDiv.classes.add('memberList');
- tooltipDiv.children.add(memberListDiv);
- _buildTooltip(memberListDiv, {
- 'Kind' : tipKind,
- 'Percent of Parent' : tipParent,
- 'Sample Count' : tipTicks,
- 'Approximate Execution Time': tipTime,
+ for (var attribute in sorted(node.attributes)) {
+ methodColumn.children.add(newAttributeBox(attribute));
+ }
+
+ makeInfoBox();
+ methodColumn.children.add(infoBox);
+
+ infoBox.children.add(span('Code '));
+ infoBox.children.add(newCodeRef(node.profileCode));
+ infoBox.children.add(span(' '));
+ for (var attribute in sorted(node.profileCode.attributes)) {
+ infoBox.children.add(newAttributeBox(attribute));
+ }
+ infoBox.children.add(br());
+ infoBox.children.add(br());
+ var memberList = new DivElement();
+ memberList.classes.add('memberList');
+ infoBox.children.add(br());
+ infoBox.children.add(memberList);
+ ProfileTreeRow._addToMemberList(memberList, {
+ 'Exclusive ticks' : node.profileCode.formattedExclusiveTicks,
+ 'Cpu time' : node.profileCode.formattedCpuTime,
+ 'Inclusive ticks' : node.profileCode.formattedInclusiveTicks,
+ 'Call stack time' : node.profileCode.formattedOnStackTime,
});
- selfCell.children.add(tooltipDiv);
+
+ makeInfoButton();
+ methodColumn.children.add(infoButton);
+
+ // Fill in self column.
+ var selfColumn = flexColumns[1];
+ selfColumn.style.position = 'relative';
+ selfColumn.style.alignItems = 'center';
+ selfColumn.text = selfPercent;
+ }
+}
+
+class FunctionProfileTreeRow extends ProfileTreeRow<FunctionCallTreeNode> {
+ FunctionProfileTreeRow(TableTree tree, FunctionProfileTreeRow parent,
+ CpuProfile profile, FunctionCallTreeNode node)
+ : super(tree, parent, profile, node,
+ node.profileFunction.normalizedExclusiveTicks,
+ node.percentage) {
+ // fill out attributes.
}
- bool hasChildren() {
- return node.children.length > 0;
+ bool hasChildren() => node.children.length > 0;
+
+ onShow() {
+ super.onShow();
+ if (children.length == 0) {
+ for (var childNode in node.children) {
+ var row = new FunctionProfileTreeRow(tree, this, profile, childNode);
+ children.add(row);
+ }
+ }
+
+ var methodColumn = flexColumns[0];
+ methodColumn.style.justifyContent = 'flex-start';
+
+ var codeAndFunctionColumn = new DivElement();
+ codeAndFunctionColumn.classes.add('flex-column');
+ codeAndFunctionColumn.style.justifyContent = 'center';
+ codeAndFunctionColumn.style.width = '100%';
+ methodColumn.children.add(codeAndFunctionColumn);
+
+ var functionRow = new DivElement();
+ functionRow.classes.add('flex-row');
+ functionRow.style.position = 'relative';
+ functionRow.style.justifyContent = 'flex-start';
+ codeAndFunctionColumn.children.add(functionRow);
+
+ // Insert the parent percentage
+ var parentPercent = new SpanElement();
+ parentPercent.text = percent;
+ parentPercent.style.minWidth = '4em';
+ parentPercent.style.alignSelf = 'center';
+ parentPercent.style.textAlign = 'right';
+ parentPercent.title = 'Self: $selfPercent';
+ functionRow.children.add(parentPercent);
+
+ // Gap.
+ var gap = new SpanElement();
+ gap.style.minWidth = '1em';
+ gap.text = ' ';
+ functionRow.children.add(gap);
+
+ var functionRef = new Element.tag('function-ref');
+ functionRef.ref = node.profileFunction.function;
+ functionRef.style.alignSelf = 'center';
+ functionRow.children.add(functionRef);
+
+ gap = new SpanElement();
+ gap.style.minWidth = '1em';
+ gap.text = ' ';
+ functionRow.children.add(gap);
+
+ for (var attribute in sorted(node.attributes)) {
+ functionRow.children.add(newAttributeBox(attribute));
+ }
+
+ makeInfoBox();
+ functionRow.children.add(infoBox);
+
+ if (node.profileFunction.function.kind.hasDartCode()) {
+ infoBox.children.add(div('Hot code for current node'));
+ infoBox.children.add(br());
+ var totalTicks = node.totalCodesTicks;
+ var numCodes = node.codes.length;
+ for (var i = 0; i < numCodes; i++) {
+ var codeRowSpan = new DivElement();
+ codeRowSpan.style.paddingLeft = '1em';
+ infoBox.children.add(codeRowSpan);
+ var nodeCode = node.codes[i];
+ var ticks = nodeCode.ticks;
+ var percentage = Utils.formatPercent(ticks, totalTicks);
+ var percentageSpan = new SpanElement();
+ percentageSpan.style.display = 'inline-block';
+ percentageSpan.text = '$percentage';
+ percentageSpan.style.minWidth = '5em';
+ percentageSpan.style.textAlign = 'right';
+ codeRowSpan.children.add(percentageSpan);
+ var codeRef = new Element.tag('code-ref');
+ codeRef.ref = nodeCode.code.code;
+ codeRef.style.marginLeft = '1em';
+ codeRef.style.marginRight = 'auto';
+ codeRef.style.width = '100%';
+ codeRowSpan.children.add(codeRef);
+ }
+ infoBox.children.add(hr());
+ }
+ infoBox.children.add(span('Function '));
+ infoBox.children.add(newFunctionRef(node.profileFunction));
+ infoBox.children.add(span(' '));
+ for (var attribute in sorted(node.profileFunction.attributes)) {
+ infoBox.children.add(newAttributeBox(attribute));
+ }
+ var memberList = new DivElement();
+ memberList.classes.add('memberList');
+ infoBox.children.add(br());
+ infoBox.children.add(br());
+ infoBox.children.add(memberList);
+ infoBox.children.add(br());
+ ProfileTreeRow._addToMemberList(memberList, {
+ 'Exclusive ticks' : node.profileFunction.formattedExclusiveTicks,
+ 'Cpu time' : node.profileFunction.formattedCpuTime,
+ 'Inclusive ticks' : node.profileFunction.formattedInclusiveTicks,
+ 'Call stack time' : node.profileFunction.formattedOnStackTime,
+ });
+
+ if (node.profileFunction.function.kind.hasDartCode()) {
+ infoBox.children.add(div('Hot code containing function'));
+ infoBox.children.add(br());
+ var totalTicks = profile.sampleCount;
+ var codes = node.profileFunction.profileCodes;
+ var numCodes = codes.length;
+ for (var i = 0; i < numCodes; i++) {
+ var codeRowSpan = new DivElement();
+ codeRowSpan.style.paddingLeft = '1em';
+ infoBox.children.add(codeRowSpan);
+ var profileCode = codes[i];
+ var code = profileCode.code;
+ var ticks = profileCode.inclusiveTicks;
+ var percentage = Utils.formatPercent(ticks, totalTicks);
+ var percentageSpan = new SpanElement();
+ percentageSpan.style.display = 'inline-block';
+ percentageSpan.text = '$percentage';
+ percentageSpan.style.minWidth = '5em';
+ percentageSpan.style.textAlign = 'right';
+ percentageSpan.title = 'Inclusive ticks';
+ codeRowSpan.children.add(percentageSpan);
+ var codeRef = new Element.tag('code-ref');
+ codeRef.ref = code;
+ codeRef.style.marginLeft = '1em';
+ codeRef.style.marginRight = 'auto';
+ codeRef.style.width = '100%';
+ codeRowSpan.children.add(codeRef);
+ }
+ }
+
+ makeInfoButton();
+ methodColumn.children.add(infoButton);
+
+ // Fill in self column.
+ var selfColumn = flexColumns[1];
+ selfColumn.style.position = 'relative';
+ selfColumn.style.alignItems = 'center';
+ selfColumn.text = selfPercent;
}
}
/// Displays a CpuProfile
@CustomTag('cpu-profile')
class CpuProfileElement extends ObservatoryElement {
- CpuProfileElement.created() : super.created();
- @published Isolate isolate;
+ static const MICROSECONDS_PER_SECOND = 1000000.0;
- @observable ServiceMap profile;
- @observable bool hideTagsChecked;
+ @published Isolate isolate;
@observable String sampleCount = '';
@observable String refreshTime = '';
@observable String sampleRate = '';
- @observable String sampleDepth = '';
- @observable String displayCutoff = '';
+ @observable String stackDepth = '';
@observable String timeSpan = '';
- @reflectable double displayThreshold = 0.0002; // 0.02%.
-
+ @observable String fetchTime = '';
+ @observable String loadTime = '';
@observable String tagSelector = 'UserVM';
+ @observable String modeSelector = 'Function';
+ @observable String directionSelector = 'Up';
- final _id = '#tableTree';
- TableTree tree;
+ @observable String state = 'Requested';
+ @observable var exception;
+ @observable var stackTrace;
- static const MICROSECONDS_PER_SECOND = 1000000.0;
+ final Stopwatch _sw = new Stopwatch();
- void isolateChanged(oldValue) {
- if (isolate == null) {
- profile = null;
- return;
- }
- isolate.invokeRpc('getCpuProfile', { 'tags': tagSelector })
- .then((ServiceObject obj) {
- print(obj);
- // Assert we got back the a profile.
- assert(obj.type == 'CpuProfile');
- profile = obj;
- _update();
- });
- }
+ final CpuProfile profile = new CpuProfile();
+
+ CpuProfileElement.created() : super.created();
@override
void attached() {
super.attached();
- var tableBody = shadowRoot.querySelector('#tableTreeBody');
- assert(tableBody != null);
- tree = new TableTree(tableBody, 2);
- _update();
+ }
+
+ void isolateChanged(oldValue) {
+ _getCpuProfile();
}
void tagSelectorChanged(oldValue) {
- isolateChanged(null);
+ _getCpuProfile();
+ }
+
+ void modeSelectorChanged(oldValue) {
+ _updateView();
+ }
+
+ void directionSelectorChanged(oldValue) {
+ _updateView();
+ }
+
+ void clear(var done) {
+ _clearCpuProfile().whenComplete(done);
+ }
+
+ Future _clearCpuProfile() {
+ profile.clear();
+ if (isolate == null) {
+ return new Future.value(null);
+ }
+ return isolate.invokeRpc('clearCpuProfile', { })
+ .then((ServiceMap response) {
+ _updateView();
+ });
}
void refresh(var done) {
- isolate.invokeRpc('getCpuProfile', { 'tags': tagSelector })
- .then((ServiceObject obj) {
- // Assert we got back the a profile.
- assert(obj.type == 'CpuProfile');
- profile = obj;
- _update();
- }).whenComplete(done);
+ _getCpuProfile().whenComplete(done);
}
- void _update() {
- if (profile == null) {
+ _onFetchStarted() {
+ _sw.reset();
+ _sw.start();
+ state = 'Requested';
+ }
+
+ _onFetchFinished() {
+ _sw.stop();
+ fetchTime = formatTimeMilliseconds(_sw.elapsedMilliseconds);
+ }
+
+ _onLoadStarted() {
+ _sw.reset();
+ _sw.start();
+ state = 'Loading';
+ }
+
+ _onLoadFinished() {
+ _sw.stop();
+ loadTime = formatTimeMilliseconds(_sw.elapsedMilliseconds);
+ state = 'Loaded';
+ }
+
+ Future _getCpuProfile() {
+ profile.clear();
+ if (functionTree != null) {
+ functionTree.clear();
+ functionTree = null;
+ }
+ if (codeTree != null) {
+ codeTree.clear();
+ codeTree = null;
+ }
+ if (isolate == null) {
+ return new Future.value(null);
+ }
+ _onFetchStarted();
+ return isolate.invokeRpc('getCpuProfile', { 'tags': tagSelector })
+ .then((response) {
+ _onFetchFinished();
+ _onLoadStarted();
+ try {
+ profile.load(isolate, response);
+ _onLoadFinished();
+ _updateView();
+ } catch (e, st) {
+ state = 'Exception';
+ exception = e;
+ stackTrace = st;
+ }
+ }).catchError((e, st) {
+ state = 'Exception';
+ exception = e;
+ stackTrace = st;
+ });
+ }
+
+ void _updateView() {
+ sampleCount = profile.sampleCount.toString();
+ refreshTime = new DateTime.now().toString();
+ stackDepth = profile.stackDepth.toString();
+ sampleRate = profile.sampleRate.toStringAsFixed(0);
+ timeSpan = formatTime(profile.timeSpan);
+ bool exclusive = directionSelector == 'Up';
+ if (functionTree != null) {
+ functionTree.clear();
+ functionTree = null;
+ }
+ if (codeTree != null) {
+ codeTree.clear();
+ codeTree = null;
+ }
+ if (modeSelector == 'Code') {
+ _buildCodeTree(exclusive);
+ } else {
+ _buildFunctionTree(exclusive);
+ }
+ }
+
+ TableTree codeTree;
+ TableTree functionTree;
+
+ void _buildFunctionTree(bool exclusive) {
+ if (functionTree == null) {
+ var tableBody = shadowRoot.querySelector('#treeBody');
+ assert(tableBody != null);
+ functionTree = new TableTree(tableBody, 2);
+ }
+ var tree = profile.loadFunctionTree(exclusive ? 'exclusive' : 'inclusive');
+ if (tree == null) {
return;
}
- var totalSamples = profile['samples'];
- var now = new DateTime.now();
- sampleCount = totalSamples.toString();
- refreshTime = now.toString();
- sampleDepth = profile['depth'].toString();
- var period = profile['period'];
- sampleRate = (MICROSECONDS_PER_SECOND / period).toStringAsFixed(0);
- timeSpan = formatTime(profile['timeSpan']);
- displayCutoff = '${(displayThreshold * 100.0).toString()}%';
- profile.isolate.processProfile(profile);
- profile['threshold'] = displayThreshold;
- _buildTree();
+ var rootRow =
+ new FunctionProfileTreeRow(functionTree, null, profile, tree.root);
+ functionTree.initialize(rootRow);
}
- void _buildStackTree() {
- var root = profile.isolate.profileTrieRoot;
- if (root == null) {
+ void _buildCodeTree(bool exclusive) {
+ if (codeTree == null) {
+ var tableBody = shadowRoot.querySelector('#treeBody');
+ assert(tableBody != null);
+ codeTree = new TableTree(tableBody, 2);
+ }
+ var tree = profile.loadCodeTree(exclusive ? 'exclusive' : 'inclusive');
+ if (tree == null) {
return;
}
- try {
- tree.initialize(
- new ProfileCodeTrieNodeTreeRow(profile, root, root, tree, null));
- } catch (e, stackTrace) {
- print(e);
- print(stackTrace);
- Logger.root.warning('_buildStackTree', e, stackTrace);
- }
- // Check if we only have one node at the root and expand it.
- if (tree.rows.length == 1) {
- tree.toggle(tree.rows[0]);
- }
- notifyPropertyChange(#tree, null, tree);
- }
-
- void _buildTree() {
- _buildStackTree();
+ var rootRow = new CodeProfileTreeRow(codeTree, null, profile, tree.root);
+ codeTree.initialize(rootRow);
}
}
diff --git a/runtime/observatory/lib/src/elements/cpu_profile.html b/runtime/observatory/lib/src/elements/cpu_profile.html
index cc7d0c0..c5e5cf7 100644
--- a/runtime/observatory/lib/src/elements/cpu_profile.html
+++ b/runtime/observatory/lib/src/elements/cpu_profile.html
@@ -13,144 +13,190 @@
<isolate-nav-menu isolate="{{ isolate }}"></isolate-nav-menu>
<nav-menu link="{{ makeLink('/profiler', isolate) }}" anchor="cpu profile" last="{{ true }}"></nav-menu>
<nav-refresh callback="{{ refresh }}"></nav-refresh>
+ <nav-refresh callback="{{ clear }}" label="Clear"></nav-refresh>
<nav-control></nav-control>
</nav-bar>
<style>
+ .tableWell {
+ background-color: #ECECEC;
+ padding: 0.2em;
+ }
+
.table {
- border-collapse: collapse!important;
+ border-spacing: 0px;
width: 100%;
margin-bottom: 20px
+ vertical-align: middle;
}
- .table thead > tr > th,
- .table tbody > tr > th,
- .table tfoot > tr > th,
- .table thead > tr > td,
- .table tbody > tr > td,
- .table tfoot > tr > td {
- padding: 8px;
- vertical-align: top;
+
+ tr {
+ background-color: #FFFFFF;
}
+
+ tbody tr {
+ animation: fadeIn 0.5s;
+ -moz-animation: fadeIn 0.5s;
+ -webkit-animation: fadeIn 0.5s;
+ }
+
+ tbody tr:hover {
+ background-color: #FAFAFA;
+ }
+
+ tr td:first-child,
+ tr th:first-child {
+ width: 100%;
+ }
+
.table thead > tr > th {
+ padding: 8px;
vertical-align: bottom;
text-align: left;
- border-bottom:2px solid #ddd;
+ border-bottom: 1px solid #ddd;
}
- tr:hover > td {
- background-color: #FFF3E3;
- }
- .rowColor0 {
- background-color: #FFE9CC;
- }
- .rowColor1 {
- background-color: #FFDEB2;
- }
- .rowColor2 {
- background-color: #FFD399;
- }
- .rowColor3 {
- background-color: #FFC87F;
- }
- .rowColor4 {
- background-color: #FFBD66;
- }
- .rowColor5 {
- background-color: #FFB24C;
- }
- .rowColor6 {
- background-color: #FFA733;
- }
- .rowColor7 {
- background-color: #FF9C19;
- }
- .rowColor8 {
- background-color: #FF9100;
- }
-
- .tooltip {
- display: block;
- position: absolute;
- visibility: hidden;
- opacity: 0;
- transition: visibility 0s linear 0.5s;
- transition: opacity .4s ease-in-out;
- }
-
- tr:hover .tooltip {
- display: block;
+ .infoBox {
position: absolute;
top: 100%;
- right: 100%;
- visibility: visible;
+ left: 0%;
z-index: 999;
- width: 400px;
- color: #ffffff;
- background-color: #0489c3;
- border-top-right-radius: 8px;
- border-top-left-radius: 8px;
- border-bottom-right-radius: 8px;
- border-bottom-left-radius: 8px;
- transition: visibility 0s linear 0.5s;
- transition: opacity .4s ease-in-out;
opacity: 1;
+ padding: 1em;
+ background-color: #ffffff;
+ border-left: solid 2px #ECECEC;
+ border-bottom: solid 2px #ECECEC;
+ border-right: solid 2px #ECECEC;
}
- .white {
- color: #ffffff;
+ .statusMessage {
+ font-size: 150%;
+ font-weight: bold;
+ }
+
+ .statusBox {
+ height: 100%;
+ padding: 1em;
+ }
+
+ .center {
+ align-items: center;
+ justify-content: center;
+ }
+
+ .notice {
+ background-color: #fcf8e3;
+ }
+
+ .red {
+ background-color: #f2dede;
}
</style>
- <div class="content">
+ <div class="content-centered-big">
<h1>Sampled CPU profile</h1>
- <div class="memberList">
- <div class="memberItem">
- <div class="memberName">Timestamp</div>
- <div class="memberValue">{{ refreshTime }}</div>
- </div>
- <div class="memberItem">
- <div class="memberName">Time span</div>
- <div class="memberValue">{{ timeSpan }}</div>
- </div>
- <div class="memberItem">
- <div class="memberName">Sample count</div>
- <div class="memberValue">{{ sampleCount }}</div>
- </div>
- <div class="memberItem">
- <div class="memberName">Sample rate</div>
- <div class="memberValue">{{ sampleRate }} Hz</div>
- </div>
- <div class="memberItem">
- <div class="memberName">Sample depth</div>
- <div class="memberValue">{{ sampleDepth }} stack frames</div>
- </div>
- <div class="memberItem">
- <div class="memberName">Display cutoff</div>
- <div class="memberValue">{{ displayCutoff }}</div>
- </div>
- <div class="memberItem">
- <div class="memberName">Tags</div>
- <div class="memberValue">
- <select value="{{tagSelector}}">
- <option value="UserVM">User > VM</option>
- <option value="UserOnly">User</option>
- <option value="VMUser">VM > User</option>
- <option value="VMOnly">VM</option>
- <option value="None">None</option>
- </select>
- </div>
- </div>
- </div>
<hr>
- <table id="tableTree" class="table">
- <thead id="tableTreeheader">
+ <template if="{{ state == 'Requested' }}">
+ <div class="statusBox shadow center">
+ <div class="statusMessage">Fetching profile from VM...</div>
+ </div>
+ </template>
+ <template if="{{ state == 'Loading' }}">
+ <div class="statusBox shadow center">
+ <div class="statusMessage">Loading profile...</div>
+ </div>
+ </template>
+ <template if="{{ state == 'Exception' }}">
+ <div class="statusBox shadow center">
+ <div class="statusMessage">
+ <h1>Exception:</h1>
+ <br>
+ <pre>{{ exception.toString() }}</pre>
+ <br>
+ <h1>Stack trace:</h1>
+ <br>
+ <pre>{{ stackTrace.toString() }}</pre>
+ </div>
+ </div>
+ </template>
+ <template if="{{ state == 'Loaded' }}">
+ <div class="memberList">
+ <div class="memberItem">
+ <div class="memberName">Refreshed at </div>
+ <div class="memberValue">{{ refreshTime }} (fetched in {{ fetchTime }}) (loaded in {{ loadTime }})</div>
+ </div>
+ <div class="memberItem">
+ <div class="memberName">Profile contains</div>
+ <div class="memberValue">{{ sampleCount }} samples (spanning {{ timeSpan }})</div>
+ </div>
+ <div class="memberItem">
+ <div class="memberName">Sampling</div>
+ <div class="memberValue">{{ stackDepth }} stack frames @ {{ sampleRate }} Hz</div>
+ </div>
+ <div class="memberItem">
+ <div class="memberName">Mode</div>
+ <div class="memberValue">
+ <select value="{{modeSelector}}">
+ <option value="Code">Code</option>
+ <option value="Function">Function</option>
+ </select>
+ </div>
+ </div>
+ <div class="memberItem">
+ <div class="memberName">Tag Order</div>
+ <div class="memberValue">
+ <select value="{{tagSelector}}">
+ <option value="UserVM">User > VM</option>
+ <option value="UserOnly">User</option>
+ <option value="VMUser">VM > User</option>
+ <option value="VMOnly">VM</option>
+ <option value="None">None</option>
+ </select>
+ </div>
+ </div>
+ <div class="memberItem">
+ <div class="memberName">Call Tree Direction</div>
+ <div class="memberValue">
+ <select value="{{directionSelector}}">
+ <!--- Experimental <option value="Down">Top down</option> --->
+ <option value="Up">Bottom up</option>
+ </select>
+ </div>
+ </div>
+ </div>
+ </template>
+ <template if="{{ state == 'Loaded' && directionSelector == 'Down' }}">
+ <br>
+ <div class="statusBox shadow">
+ <div>Tree is rooted at main.</div>
+ <br>
+ <div>Child nodes are callees.</div>
+ <br>
+ <div class="notice">To get the most out of this mode you may need to launch Dart with a higher --profile-depth flag value.</div>
+ <div class="notice">Try 16, 32, ... up to 256 until [Truncated] approaches zero.</div>
+ <div class="red">NOTE: Higher values will impact performance</div>
+ </div>
+ </template>
+ <template if="{{ state == 'Loaded' && directionSelector == 'Up' }}">
+ <br>
+ <div class="statusBox shadow">
+ <div>Tree is rooted at executing function / code.</div>
+ <br>
+ <div>Child nodes are callers.</div>
+ </div>
+ </template>
+ <br><br>
+ <div class="tableWell shadow">
+ <table class="table">
+ <thead id="treeHeader">
<tr>
<th>Method</th>
<th>Self</th>
</tr>
- </thead>
- <tbody id="tableTreeBody">
- </tbody>
- </table>
+ </thead>
+ <tbody id="treeBody">
+ </tbody>
+ </table>
+ </div>
</div>
</template>
</polymer-element>
diff --git a/runtime/observatory/lib/src/elements/css/shared.css b/runtime/observatory/lib/src/elements/css/shared.css
index 7c0dc89..1659ce9 100644
--- a/runtime/observatory/lib/src/elements/css/shared.css
+++ b/runtime/observatory/lib/src/elements/css/shared.css
@@ -117,6 +117,11 @@
flex-direction: row;
}
+.inline-flex-row {
+ display: inline-flex;
+ flex-direction: row;
+}
+
/* Flex column container */
.flex-column {
display: flex;
@@ -251,3 +256,31 @@
.break-wrap {
word-wrap: break-word;
}
+
+body.busy, body.busy * {
+ cursor: progress !important;
+}
+
+.pointer {
+ cursor: pointer;
+}
+
+.shadow {
+ box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.16),
+ 0 2px 5px 0 rgba(0, 0, 0, 0.26);
+}
+
+@-webkit-keyframes fadeIn {
+ 0% { opacity: 0; }
+ 100% { opacity: 1; }
+}
+
+@-moz-keyframes fadeIn {
+ 0% { opacity: 0; }
+ 100% { opacity: 1; }
+}
+
+@keyframes fadeIn {
+ 0% { opacity: 0; }
+ 100% { opacity: 1; }
+}
diff --git a/runtime/observatory/lib/src/elements/curly_block.dart b/runtime/observatory/lib/src/elements/curly_block.dart
index b0dafb8..2632f3e 100644
--- a/runtime/observatory/lib/src/elements/curly_block.dart
+++ b/runtime/observatory/lib/src/elements/curly_block.dart
@@ -24,8 +24,9 @@
busy = false;
}
- void toggleExpand(var a, var b, var c) {
+ void toggleExpand(var event, var b, var c) {
assert(callback == null || expand == false);
+ event.stopPropagation();
if (busy) {
return;
}
diff --git a/runtime/observatory/lib/src/elements/debugger.html b/runtime/observatory/lib/src/elements/debugger.html
index 9beb7fe..06731c5 100644
--- a/runtime/observatory/lib/src/elements/debugger.html
+++ b/runtime/observatory/lib/src/elements/debugger.html
@@ -23,6 +23,54 @@
</template>
</polymer-element>
+<polymer-element name="icon-chevron-right" noscript>
+ <template>
+ <svg width="24" height="24">
+ <path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/>
+ </svg>
+ </template>
+</polymer-element>
+
+<polymer-element name="icon-chevron-left" noscript>
+ <template>
+ <svg width="24" height="24">
+ <path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
+ </svg>
+ </template>
+</polymer-element>
+
+<polymer-element name="icon-horizontal-three-dot" noscript>
+ <template>
+ <svg width="24" height="24">
+ <path d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/>
+ </svg>
+ </template>
+</polymer-element>
+
+<polymer-element name="icon-vertical-three-dot" noscript>
+ <template>
+ <svg width="24" height="24">
+ <path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/>
+ </svg>
+ </template>
+</polymer-element>
+
+<polymer-element name="icon-info" noscript>
+ <template>
+ <svg width="24" height="24">
+ <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/>
+ </svg>
+ </template>
+</polymer-element>
+
+<polymer-element name="icon-info-outline" noscript>
+ <template>
+ <svg width="24" height="24">
+ <path d="M11 17h2v-6h-2v6zm1-15C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zM11 9h2V7h-2v2z"/>
+ </svg>
+ </template>
+</polymer-element>
+
<polymer-element name="debugger-page" extends="observatory-element">
<template>
<link rel="stylesheet" href="css/shared.css">
diff --git a/runtime/observatory/lib/src/elements/function_ref.dart b/runtime/observatory/lib/src/elements/function_ref.dart
index 32d79ea..2e92f60 100644
--- a/runtime/observatory/lib/src/elements/function_ref.dart
+++ b/runtime/observatory/lib/src/elements/function_ref.dart
@@ -4,7 +4,9 @@
library function_ref_element;
+import 'dart:html';
import 'package:polymer/polymer.dart';
+import 'package:observatory/service.dart';
import 'service_ref.dart';
@CustomTag('function-ref')
@@ -12,4 +14,37 @@
@published bool qualified = true;
FunctionRefElement.created() : super.created();
+
+ refChanged(oldValue) {
+ super.refChanged(oldValue);
+ _updateShadowDom();
+ }
+
+ ServiceFunction get function => ref;
+ void _updateShadowDom() {
+ clearShadowRoot();
+ if (ref == null) {
+ return;
+ }
+ if (function.isDart) {
+ if (qualified) {
+ // Add class-name or parent-function-name followed by a dot.
+ if ((function.parent == null) && (function.owningClass != null)) {
+ var classRef = new Element.tag('class-ref');
+ classRef.ref = function.owningClass;
+ shadowRoot.children.add(classRef);
+ insertTextSpanIntoShadowRoot('.');
+ } else if (function.parent != null) {
+ var functionRef = new Element.tag('function-ref');
+ functionRef.ref = function.parent;
+ functionRef.qualified = true;
+ shadowRoot.children.add(functionRef);
+ insertTextSpanIntoShadowRoot('.');
+ }
+ }
+ insertLinkIntoShadowRoot(name, url, hoverText);
+ } else {
+ insertTextSpanIntoShadowRoot(name);
+ }
+ }
}
diff --git a/runtime/observatory/lib/src/elements/function_ref.html b/runtime/observatory/lib/src/elements/function_ref.html
index dd71335..c9499b3 100644
--- a/runtime/observatory/lib/src/elements/function_ref.html
+++ b/runtime/observatory/lib/src/elements/function_ref.html
@@ -3,15 +3,7 @@
<link rel="import" href="service_ref.html">
<polymer-element name="function-ref" extends="service-ref">
- <template><link rel="stylesheet" href="css/shared.css" /><!-- These comments are here to allow newlines.
- --><template if="{{ ref.isDart }}"><!--
- --><template if="{{ qualified && ref.parent == null && ref.owningClass != null }}"><!--
- --><class-ref ref="{{ ref.owningClass] }}"></class-ref>.</template><!--
- --><template if="{{ qualified && ref.parent != null }}"><!--
- --><function-ref ref="{{ ref.parent }}" qualified="{{ true }}">
- </function-ref>.<!--
- --></template><a on-click="{{ goto }}" _href="{{ url }}">{{ name }}</a><!--
- --></template><template if="{{ !ref.isDart }}"><span> {{ name }}</span></template></template>
+ <template><link rel="stylesheet" href="css/shared.css"></template>
</polymer-element>
<script type="application/dart" src="function_ref.dart"></script>
\ No newline at end of file
diff --git a/runtime/observatory/lib/src/elements/heap_profile.dart b/runtime/observatory/lib/src/elements/heap_profile.dart
index c77f673..2cac03f 100644
--- a/runtime/observatory/lib/src/elements/heap_profile.dart
+++ b/runtime/observatory/lib/src/elements/heap_profile.dart
@@ -102,13 +102,13 @@
_subscription.cancel((){});
super.detached();
}
-
+
void _onEvent(ServiceEvent event) {
if (autoRefresh && event.eventType == 'GC') {
refresh((){});
}
}
-
+
void _updatePieCharts() {
assert(profile != null);
_newPieDataTable.clearRows();
diff --git a/runtime/observatory/lib/src/elements/observatory_element.dart b/runtime/observatory/lib/src/elements/observatory_element.dart
index 9e9a363..46f1ef5 100644
--- a/runtime/observatory/lib/src/elements/observatory_element.dart
+++ b/runtime/observatory/lib/src/elements/observatory_element.dart
@@ -88,7 +88,12 @@
/// Utility method for handling on-click of <a> tags. Navigates
/// within the application using the [LocationManager].
void goto(MouseEvent event, var detail, Element target) {
- app.locationManager.onGoto(event, detail, target);
+ app.locationManager.onGoto(event);
+ event.stopPropagation();
+ }
+
+ void onClickGoto(MouseEvent event) {
+ app.locationManager.onGoto(event);
event.stopPropagation();
}
@@ -97,8 +102,12 @@
if (obj is Isolate) {
url = '${url}?isolateId=${Uri.encodeComponent(obj.id)}';
} else {
+ if (obj.id == null) {
+ // No id
+ return url;
+ }
url = ('${url}?isolateId=${Uri.encodeComponent(obj.isolate.id)}'
- '&objectId=${Uri.encodeComponent(obj.id)}');
+ '&objectId=${Uri.encodeComponent(obj.id)}');
}
}
return url;
@@ -110,7 +119,8 @@
}
String formatTimePrecise(double time) => Utils.formatTimePrecise(time);
-
+ String formatTimeMilliseconds(int millis) =>
+ Utils.formatTimeMilliseconds(millis);
String formatTime(double time) => Utils.formatTime(time);
String formatSeconds(double x) => Utils.formatSeconds(x);
@@ -151,4 +161,26 @@
}
return new String.fromCharCodes(result);
}
+
+ void clearShadowRoot() {
+ // Remove all non-style elements.
+ shadowRoot.children.removeWhere((e) => e is! StyleElement);
+ }
+
+ void insertTextSpanIntoShadowRoot(String text) {
+ var spanElement = new SpanElement();
+ spanElement.text = text;
+ shadowRoot.children.add(spanElement);
+ }
+
+ void insertLinkIntoShadowRoot(String label, String href, [String title]) {
+ var anchorElement = new AnchorElement();
+ anchorElement.href = href;
+ anchorElement.text = label;
+ if (title != null) {
+ anchorElement.title = title;
+ }
+ anchorElement.onClick.listen(onClickGoto);
+ shadowRoot.children.add(anchorElement);
+ }
}
diff --git a/runtime/observatory/lib/src/elements/script_inset.dart b/runtime/observatory/lib/src/elements/script_inset.dart
index aef3fe3..cc4787a 100644
--- a/runtime/observatory/lib/src/elements/script_inset.dart
+++ b/runtime/observatory/lib/src/elements/script_inset.dart
@@ -4,11 +4,26 @@
library script_inset_element;
+import 'dart:async';
import 'dart:html';
import 'observatory_element.dart';
import 'package:observatory/service.dart';
import 'package:polymer/polymer.dart';
+const nbsp = "\u00A0";
+
+class Annotation {
+ int line;
+ int columnStart;
+ int columnStop;
+ String title;
+
+ void applyStyleTo(element) {
+ element.classes.add("currentCol");
+ element.title = title;
+ }
+}
+
/// Box with script source code in it.
@CustomTag('script-inset')
class ScriptInsetElement extends ObservatoryElement {
@@ -26,93 +41,100 @@
@observable int currentCol;
@observable int startLine;
@observable int endLine;
- @observable bool linesReady = false;
- // Contents are either ScriptLine or ScriptElipsis.
- @observable List lines = toObservable([]);
+ var annotations = [];
+ var annotationsCursor;
+
+ StreamSubscription scriptChangeSubscription;
String makeLineId(int line) {
return 'line-$line';
}
- String clip(String line, int start, [int limit]) {
- try {
- return line.substring(start, limit);
- } catch (_) {
- // NOTE(turnidge): Sometimes polymer updates give us garbage
- // starts and limits during page updates.
- return "OOB";
- }
- }
-
- MutationObserver _observer;
-
void _scrollToCurrentPos() {
- var line = shadowRoot.querySelector('#line-$currentLine');
+ var line = querySelector('#${makeLineId(currentLine)}');
if (line != null) {
line.scrollIntoView();
}
}
- void _onMutation(mutations, observer) {
- _scrollToCurrentPos();
- }
-
- void attached() {
- super.attached();
- var table = shadowRoot.querySelector('.sourceTable');
- if (table != null) {
- _observer = new MutationObserver(_onMutation);
- _observer.observe(table, childList:true);
- }
- }
-
void detached() {
- if (_observer != null) {
- _observer.disconnect();
- _observer = null;
+ if (scriptChangeSubscription != null) {
+ // Don't leak. If only Dart and Javascript exposed weak references...
+ scriptChangeSubscription.cancel();
+ scriptChangeSubscription = null;
}
super.detached();
}
void currentPosChanged(oldValue) {
- _updateLines();
+ update();
_scrollToCurrentPos();
}
void startPosChanged(oldValue) {
- _updateLines();
+ update();
}
void endPosChanged(oldValue) {
- _updateLines();
+ update();
}
void scriptChanged(oldValue) {
- _updateLines();
+ update();
}
- var _updateFuture;
+ Element a(String text) => new AnchorElement()..text = text;
+ Element span(String text) => new SpanElement()..text = text;
- void _updateLines() {
- linesReady = false;
- if (_updateFuture != null) {
- // Already scheduled.
- return;
- }
+ Element hitsUnknown(Element element) {
+ element.classes.add('hitsNone');
+ element.title = "";
+ return element;
+ }
+ Element hitsNotExecuted(Element element) {
+ element.classes.add('hitsNotExecuted');
+ element.title = "Line did not execute";
+ return element;
+ }
+ Element hitsExecuted(Element element) {
+ element.classes.add('hitsExecuted');
+ element.title = "Line did execute";
+ return element;
+ }
+
+ Element container;
+
+ void update() {
if (script == null) {
- // Wait for script to be assigned.
+ // We may have previously had a script.
+ if (container != null) {
+ container.children.clear();
+ }
return;
}
if (!script.loaded) {
- _updateFuture = script.load().then((_) {
- if (script.loaded) {
- _updateFuture = null;
- _updateLines();
- }
- });
+ script.load().then((_) => update());
return;
}
+
+ if (scriptChangeSubscription == null) {
+ scriptChangeSubscription = script.changes.listen((_) => update());
+ }
+
+ computeAnnotations();
+
+ var table = linesTable();
+ if (container == null) {
+ // Indirect to avoid deleting the style element.
+ container = new DivElement();
+ shadowRoot.append(container);
+ }
+ container.children.clear();
+ container.children.add(table);
+ }
+
+ void computeAnnotations() {
startLine = (startPos != null
? script.tokenToLine(startPos)
: 1);
@@ -126,11 +148,30 @@
? script.tokenToLine(endPos)
: script.lines.length);
- lines.clear();
+ annotations.clear();
+ if (currentLine != null) {
+ var a = new Annotation();
+ a.line = currentLine;
+ a.columnStart = currentCol;
+ a.columnStop = currentCol + 1;
+ a.title = "Point of interest";
+ annotations.add(a);
+ }
+
+ // TODO(rmacnak): Call site data.
+ }
+
+ Element linesTable() {
+ var table = new DivElement();
+ table.classes.add("sourceTable");
+
+ annotationsCursor = 0;
+
int blankLineCount = 0;
for (int i = (startLine - 1); i <= (endLine - 1); i++) {
if (script.lines[i].isBlank) {
- // Try to introduce elipses if there are 4 or more contiguous blank lines.
+ // Try to introduce elipses if there are 4 or more contiguous
+ // blank lines.
blankLineCount++;
} else {
if (blankLineCount > 0) {
@@ -139,20 +180,95 @@
if (blankLineCount < 4) {
// Too few blank lines for an elipsis.
for (int j = firstBlank; j <= lastBlank; j++) {
- lines.add(script.lines[j]);
+ table.append(lineElement(script.lines[j]));
}
} else {
// Add an elipsis for the skipped region.
- lines.add(script.lines[firstBlank]);
- lines.add(null);
- lines.add(script.lines[lastBlank]);
+ table.append(lineElement(script.lines[firstBlank]));
+ table.append(lineElement(null));
+ table.append(lineElement(script.lines[lastBlank]));
}
blankLineCount = 0;
}
- lines.add(script.lines[i]);
+ table.append(lineElement(script.lines[i]));
}
}
- linesReady = true;
+
+ return table;
+ }
+
+ // Assumes annotations are sorted.
+ Annotation nextAnnotationOnLine(int line) {
+ if (annotationsCursor >= annotations.length) return null;
+ var annotation = annotations[annotationsCursor];
+ if (annotation.line != line) return null;
+ annotationsCursor++;
+ return annotation;
+ }
+
+ Element lineElement(ScriptLine line) {
+ var e = new DivElement();
+ e.classes.add("sourceRow");
+ e.append(lineBreakpointElement(line));
+ e.append(lineNumberElement(line));
+ e.append(lineSourceElement(line));
+ return e;
+ }
+
+ Element lineBreakpointElement(ScriptLine line) {
+ BreakpointToggleElement e = new Element.tag("breakpoint-toggle");
+ e.line = line;
+ return e;
+ }
+
+ Element lineNumberElement(ScriptLine line) {
+ var lineNumber = line == null ? "..." : line.line;
+ var e = span("$nbsp$lineNumber$nbsp");
+
+ if ((line == null) || (line.hits == null)) {
+ hitsUnknown(e);
+ } else if (line.hits == 0) {
+ hitsNotExecuted(e);
+ } else {
+ hitsExecuted(e);
+ }
+
+ return e;
+ }
+
+ Element lineSourceElement(ScriptLine line) {
+ var e = new DivElement();
+ e.classes.add("sourceItem");
+
+ if (line != null) {
+ if (line.line == currentLine) {
+ e.classes.add("currentLine");
+ }
+
+ e.id = makeLineId(line.line);
+
+ var position = 0;
+ consumeUntil(var stop) {
+ if (stop <= position) {
+ return; // Empty gap between annotations/boundries.
+ }
+ var chunk = line.text.substring(position, stop);
+ var chunkNode = span(chunk);
+ e.append(chunkNode);
+ position = stop;
+ return chunkNode;
+ }
+
+ // TODO(rmacnak): Tolerate overlapping annotations.
+ var annotation;
+ while ((annotation = nextAnnotationOnLine(line.line)) != null) {
+ consumeUntil(annotation.columnStart);
+ annotation.applyStyleTo(consumeUntil(annotation.columnStop));
+ }
+ consumeUntil(line.text.length);
+ }
+
+ return e;
}
ScriptInsetElement.created() : super.created();
diff --git a/runtime/observatory/lib/src/elements/script_inset.html b/runtime/observatory/lib/src/elements/script_inset.html
index 0c00d89..a8fb001 100644
--- a/runtime/observatory/lib/src/elements/script_inset.html
+++ b/runtime/observatory/lib/src/elements/script_inset.html
@@ -6,105 +6,45 @@
<style>
.sourceInset {
}
- .sourceBox {
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- padding: 10px;
- overflow-y: auto;
- }
.sourceTable {
- display: table;
+ display: table;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ padding: 10px;
+ overflow-y: auto;
+ width: 100%;
}
.sourceRow {
- display: table-row;
+ display: table-row;
}
.sourceItem, .sourceItemCurrent {
- display: table-cell;
- vertical-align: top;
- font: 400 14px consolas, courier, monospace;
- line-height: 125%;
- white-space: pre;
+ display: table-cell;
+ vertical-align: top;
+ font: 400 14px consolas, courier, monospace;
+ line-height: 125%;
+ white-space: pre;
}
.currentLine {
- background-color: #fff;
+ background-color: #fff;
}
.currentCol {
- background-color: #6cf;
+ background-color: #6cf;
}
.hitsNone, .hitsNotExecuted, .hitsExecuted {
- display: table-cell;
- vertical-align: top;
- font: 400 14px consolas, courier, monospace;
- min-width: 32px;
- text-align: right;
- color: #a8a8a8;
+ display: table-cell;
+ vertical-align: top;
+ font: 400 14px consolas, courier, monospace;
+ min-width: 32px;
+ text-align: right;
+ color: #a8a8a8;
}
.hitsNotExecuted {
- background-color: #e66;
+ background-color: #e66;
}
.hitsExecuted {
- background-color: #6d6;
+ background-color: #6d6;
}
</style>
- <div class="sourceInset">
- <content></content>
- <div class="sourceBox" style="max-height:{{height}}">
- <div class="sourceTable">
- <template if="{{ linesReady }}">
- <template repeat="{{ line in lines }}">
- <template if="{{ line != null }}">
- <div class="sourceRow" id="{{ makeLineId(line.line) }}">
- <breakpoint-toggle line="{{ line }}"></breakpoint-toggle>
-
- <div class="sourceItem"> </div>
-
- <template if="{{ line.hits == null ||
- line.hits < 0 }}">
- <div class="hitsNone">{{ line.line }}</div>
- </template>
- <template if="{{ line.hits == 0 }}">
- <div class="hitsNotExecuted">{{ line.line }}</div>
- </template>
- <template if="{{ line.hits > 0 }}">
- <div class="hitsExecuted">{{ line.line }}</div>
- </template>
-
- <div class="sourceItem"> </div>
-
- <template if="{{ line.line == currentLine }}">
- <div class="sourceItem"><span class="currentLine">{{
- clip(line.text,0,currentCol
- )}}</span><span class="currentCol">{{
- clip(line.text,currentCol,currentCol+1)
- }}</span><span class="currentLine">{{
- clip(line.text,currentCol+1)
- }}</span></div>
- </template>
- <template if="{{ line.line != currentLine }}">
- <div class="sourceItem">{{line.text}}</div>
- </template>
- </div>
- </template>
-
- <template if="{{ line == null }}">
- <breakpoint-toggle line="{{ null }}"></breakpoint-toggle>
- <div class="sourceItem"> </div>
- <div class="hitsNone">...</div>
- <div class="sourceItem"> </div>
- <div class="sourceItem"></div>
- </template>
-
- </template>
- </template>
-
- <template if="{{ !linesReady }}">
- <div class="sourceRow">
- <div class="sourceItem">loading...</div>
- </div>
- </template>
- </div>
- </div>
- </div>
</template>
</polymer-element>
diff --git a/runtime/observatory/lib/src/elements/script_ref.dart b/runtime/observatory/lib/src/elements/script_ref.dart
index ca2eba8..ab31c8e 100644
--- a/runtime/observatory/lib/src/elements/script_ref.dart
+++ b/runtime/observatory/lib/src/elements/script_ref.dart
@@ -52,8 +52,6 @@
}
if (pos >= 0) {
if (ref.loaded) {
- // Script is loaded, get the line number.
- Script script = ref;
return '${super.url}---pos=${pos}';
} else {
ref.load().then(_updateProperties);
diff --git a/runtime/observatory/lib/src/elements/script_view.dart b/runtime/observatory/lib/src/elements/script_view.dart
index 537b5ac..fa8ccd2 100644
--- a/runtime/observatory/lib/src/elements/script_view.dart
+++ b/runtime/observatory/lib/src/elements/script_view.dart
@@ -16,15 +16,6 @@
ScriptViewElement.created() : super.created();
- @override
- void attached() {
- super.attached();
- if (script == null) {
- return;
- }
- script.load();
- }
-
void refresh(var done) {
script.reload().whenComplete(done);
}
diff --git a/runtime/observatory/lib/src/elements/service_view.dart b/runtime/observatory/lib/src/elements/service_view.dart
index eacd996..547b8fc 100644
--- a/runtime/observatory/lib/src/elements/service_view.dart
+++ b/runtime/observatory/lib/src/elements/service_view.dart
@@ -116,10 +116,6 @@
IOProcessViewElement element = new Element.tag('io-process-view');
element.process = object;
return element;
- case 'Profile':
- CpuProfileElement element = new Element.tag('cpu-profile');
- element.profile = object;
- return element;
case 'RandomAccessFileList':
IORandomAccessFileListViewElement element =
new Element.tag('io-random-access-file-list-view');
diff --git a/runtime/observatory/lib/src/elements/vm_view.dart b/runtime/observatory/lib/src/elements/vm_view.dart
index 1ab49d5..2397705 100644
--- a/runtime/observatory/lib/src/elements/vm_view.dart
+++ b/runtime/observatory/lib/src/elements/vm_view.dart
@@ -16,6 +16,6 @@
VMViewElement.created() : super.created();
void refresh(var done) {
- vm.reload().whenComplete(done);
+ vm.reload().then((vm) => vm.reloadIsolates()).whenComplete(done);
}
}
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index 460a372..925e0e7 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -281,6 +281,11 @@
// Updates internal state from [map]. [map] can be a reference.
void _update(ObservableMap map, bool mapIsRef);
+
+ // Helper that can be passed to .catchError that ignores the error.
+ _ignoreError(error, stackTrace) {
+ // do nothing.
+ }
}
abstract class Coverage {
@@ -308,6 +313,7 @@
var coverageList = coverage['coverage'];
assert(coverageList != null);
processCoverageData(coverageList);
+ return this;
});
}
}
@@ -327,6 +333,11 @@
@reflectable VM get vm => this;
@reflectable Isolate get isolate => null;
+ // TODO(johnmccutchan): Ensure that isolates do not end up in _cache.
+ Map<String,ServiceObject> _cache = new Map<String,ServiceObject>();
+ final ObservableMap<String,Isolate> _isolateCache =
+ new ObservableMap<String,Isolate>();
+
@reflectable Iterable<Isolate> get isolates => _isolateCache.values;
@observable String version = 'unknown';
@@ -352,87 +363,159 @@
final StreamController<ServiceEvent> events =
new StreamController.broadcast();
- void postEventMessage(String eventMessage, [dynamic data]) {
- var map;
- try {
- map = _parseJSON(eventMessage);
- assert(!map.containsKey('_data'));
- if (data != null) {
- map['_data'] = data;
+ bool _isIsolateLifecycleEvent(String eventType) {
+ return _isIsolateShutdownEvent(eventType) ||
+ _isIsolateCreatedEvent(eventType);
+ }
+
+ bool _isIsolateShutdownEvent(String eventType) {
+ return (eventType == 'IsolateShutdown');
+ }
+
+ bool _isIsolateCreatedEvent(String eventType) {
+ return (eventType == 'IsolateCreated');
+ }
+
+ void postServiceEvent(String response, ByteData data) {
+ var map;
+ try {
+ map = _parseJSON(response);
+ assert(!map.containsKey('_data'));
+ if (data != null) {
+ map['_data'] = data;
+ }
+ } catch (e, st) {
+ Logger.root.severe('Ignoring malformed event response: ${response}');
+ return;
+ }
+ if (map['type'] != 'ServiceEvent') {
+ Logger.root.severe(
+ "Expected 'ServiceEvent' but found '${map['type']}'");
+ return;
+ }
+
+ var eventType = map['eventType'];
+
+ if (_isIsolateLifecycleEvent(eventType)) {
+ String isolateId = map['isolate']['id'];
+ var event;
+ if (_isIsolateCreatedEvent(eventType)) {
+ _onIsolateCreated(map['isolate']);
+ // By constructing the event *after* adding the isolate to the
+ // isolate cache, the call to getFromMap will use the cached Isolate.
+ event = new ServiceObject._fromMap(this, map);
+ } else {
+ assert(_isIsolateShutdownEvent(eventType));
+ // By constructing the event *before* removing the isolate from the
+ // isolate cache, the call to getFromMap will use the cached Isolate.
+ event = new ServiceObject._fromMap(this, map);
+ _onIsolateShutdown(isolateId);
+ }
+ assert(event != null);
+ events.add(event);
+ return;
+ }
+
+ // Extract the owning isolate from the event itself.
+ String owningIsolateId = map['isolate']['id'];
+ getIsolate(owningIsolateId).then((owningIsolate) {
+ if (owningIsolate == null) {
+ // TODO(koda): Do we care about GC events in VM isolate?
+ Logger.root.severe('Ignoring event with unknown isolate id: '
+ '$owningIsolateId');
+ return;
}
- } catch (e, st) {
- Logger.root.severe('Ignoring malformed event message: ${eventMessage}');
- return;
- }
- if (map['type'] != 'ServiceEvent') {
- Logger.root.severe(
- "Expected 'ServiceEvent' but found '${map['type']}'");
- return;
- }
-
- // Extract the owning isolate from the event itself.
- String owningIsolateId = map['isolate']['id'];
- getIsolate(owningIsolateId).then((owningIsolate) {
- if (owningIsolate == null) {
- // TODO(koda): Do we care about GC events in VM isolate?
- Logger.root.severe(
- 'Ignoring event with unknown isolate id: $owningIsolateId');
- } else {
- var event = new ServiceObject._fromMap(owningIsolate, map);
- events.add(event);
- }
- });
+ var event = new ServiceObject._fromMap(owningIsolate, map);
+ events.add(event);
+ });
}
- static final RegExp _currentIsolateMatcher = new RegExp(r'isolates/\d+');
- static final RegExp _currentObjectMatcher = new RegExp(r'isolates/\d+/');
- static final String _isolatesPrefix = 'isolates/';
+ Isolate _onIsolateCreated(Map isolateMap) {
+ var isolateId = isolateMap['id'];
+ assert(!_isolateCache.containsKey(isolateId));
+ Isolate isolate = new ServiceObject._fromMap(this, isolateMap);
+ _isolateCache[isolateId] = isolate;
+ notifyPropertyChange(#isolates, true, false);
+ // Eagerly load the isolate.
+ isolate.load().catchError((e) {
+ Logger.root.info('Eagerly loading an isolate failed: $e');
+ });
+ return isolate;
+ }
- String _parseObjectId(String id) {
- Match m = _currentObjectMatcher.matchAsPrefix(id);
- if (m == null) {
- return null;
+ void _onIsolateShutdown(String isolateId) {
+ assert(_isolateCache.containsKey(isolateId));
+ _isolateCache.remove(isolateId);
+ notifyPropertyChange(#isolates, true, false);
+ }
+
+ void _updateIsolatesFromList(List isolateList) {
+ var shutdownIsolates = <String>[];
+ var createdIsolates = <Map>[];
+ var isolateStillExists = <String, bool>{};
+
+ // Start with the assumption that all isolates are gone.
+ for (var isolateId in _isolateCache.keys) {
+ isolateStillExists[isolateId] = false;
}
- return m.input.substring(m.end);
- }
- String _parseIsolateId(String id) {
- Match m = _currentIsolateMatcher.matchAsPrefix(id);
- if (m == null) {
- return '';
+ // Find created isolates and mark existing isolates as living.
+ for (var isolateMap in isolateList) {
+ var isolateId = isolateMap['id'];
+ if (!_isolateCache.containsKey(isolateId)) {
+ createdIsolates.add(isolateMap);
+ } else {
+ isolateStillExists[isolateId] = true;
+ }
}
- return id.substring(0, m.end);
+
+ // Find shutdown isolates.
+ isolateStillExists.forEach((isolateId, exists) {
+ if (!exists) {
+ shutdownIsolates.add(isolateId);
+ }
+ });
+
+ // Process shutdown.
+ for (var isolateId in shutdownIsolates) {
+ _onIsolateShutdown(isolateId);
+ }
+
+ // Process creation.
+ for (var isolateMap in createdIsolates) {
+ _onIsolateCreated(isolateMap);
+ }
}
- Map<String,ServiceObject> _cache = new Map<String,ServiceObject>();
- Map<String,Isolate> _isolateCache = new Map<String,Isolate>();
+ static final String _isolateIdPrefix = 'isolates/';
ServiceObject getFromMap(ObservableMap map) {
- throw new UnimplementedError();
+ if (map == null) {
+ return null;
+ }
+ String id = map['id'];
+ if (!id.startsWith(_isolateIdPrefix)) {
+ // Currently the VM only supports upgrading Isolate ServiceObjects.
+ throw new UnimplementedError();
+ }
+
+ // Check cache.
+ var isolate = _isolateCache[id];
+ if (isolate == null) {
+ // We should never see an unknown isolate here.
+ throw new UnimplementedError();
+ }
+ return isolate;
}
// Note that this function does not reload the isolate if it found
// in the cache.
Future<ServiceObject> getIsolate(String isolateId) {
- if (isolateId == '') {
- return new Future.value(null);
+ if (!loaded) {
+ // Trigger a VM load, then get the isolate.
+ return load().then((_) => getIsolate(isolateId)).catchError(_ignoreError);
}
- Isolate isolate = _isolateCache[isolateId];
- if (isolate != null) {
- return new Future.value(isolate);
- }
- // The isolate is not in the cache. Reload the vm and see if the
- // requested isolate is found.
- //
- // TODO(turnidge): We don't want to reload all isolates so much.
- // Doesn't scale well. Change this to be more fine-grained.
- return reload().then((result) {
- if (result is! VM) {
- return null;
- }
- assert(result == this);
- return _isolateCache[isolateId];
- });
+ return new Future.value(_isolateCache[isolateId]);
}
dynamic _reviver(dynamic key, dynamic value) {
@@ -504,11 +587,12 @@
Future<ServiceObject> invokeRpc(String method, Map params) {
return invokeRpcNoUpgrade(method, params).then((ObservableMap response) {
- var obj = new ServiceObject._fromMap(this, response);
- if (obj.canCache) {
- _cache.putIfAbsent(id, () => obj);
- }
- return obj;
+ var obj = new ServiceObject._fromMap(this, response);
+ if ((obj != null) && obj.canCache) {
+ String objId = obj.id;
+ _cache.putIfAbsent(objId, () => obj);
+ }
+ return obj;
});
}
@@ -541,29 +625,19 @@
assertsEnabled = map['assertsEnabled'];
pid = map['pid'];
typeChecksEnabled = map['typeChecksEnabled'];
- _updateIsolates(map['isolates']);
+ _updateIsolatesFromList(map['isolates']);
}
- void _updateIsolates(List newIsolates) {
- var oldIsolateCache = _isolateCache;
- var newIsolateCache = new Map<String,Isolate>();
- for (var isolateMap in newIsolates) {
- var isolateId = isolateMap['id'];
- var isolate = oldIsolateCache[isolateId];
- if (isolate != null) {
- newIsolateCache[isolateId] = isolate;
- } else {
- isolate = new ServiceObject._fromMap(this, isolateMap);
- newIsolateCache[isolateId] = isolate;
- Logger.root.info('New isolate \'${isolate.id}\'');
- }
+ // Reload all isolates.
+ Future reloadIsolates() {
+ var reloads = [];
+ for (var isolate in isolates) {
+ var reload = isolate.reload().catchError((e) {
+ Logger.root.info('Bulk reloading of isolates failed: $e');
+ });
+ reloads.add(reload);
}
- // Update the individual isolates asynchronously.
- newIsolateCache.forEach((isolateId, isolate) {
- isolate.reload();
- });
-
- _isolateCache = newIsolateCache;
+ return Future.wait(reloads);
}
}
@@ -714,47 +788,16 @@
assert(owner is VM);
}
- static const TAG_ROOT_ID = 'code/tag-0';
-
- /// Returns the Code object for the root tag.
- Code tagRoot() {
- // TODO(turnidge): Use get() here instead?
- return _cache[TAG_ROOT_ID];
- }
-
- void processProfile(ServiceMap profile) {
- assert(profile.type == 'CpuProfile');
- var codeTable = new List<Code>();
- var codeRegions = profile['codes'];
- for (var codeRegion in codeRegions) {
- Code code = codeRegion['code'];
- assert(code != null);
- codeTable.add(code);
- }
- _resetProfileData();
- _updateProfileData(profile, codeTable);
- var exclusiveTrie = profile['exclusive_trie'];
- if (exclusiveTrie != null) {
- profileTrieRoot = _processProfileTrie(exclusiveTrie, codeTable);
- }
- }
-
- void _resetProfileData() {
+ void resetCachedProfileData() {
_cache.values.forEach((value) {
- if (value is Code) {
- Code code = value;
- code.resetProfileData();
- }
- });
- }
-
- void _updateProfileData(ServiceMap profile, List<Code> codeTable) {
- var codeRegions = profile['codes'];
- var sampleCount = profile['samples'];
- for (var codeRegion in codeRegions) {
- Code code = codeRegion['code'];
- code.updateProfileData(codeRegion, codeTable, sampleCount);
- }
+ if (value is Code) {
+ Code code = value;
+ code.profile = null;
+ } else if (value is ServiceFunction) {
+ ServiceFunction function = value;
+ function.profile = null;
+ }
+ });
}
/// Fetches and builds the class hierarchy for this isolate. Returns the
@@ -798,16 +841,16 @@
if (map == null) {
return null;
}
- String id = map['id'];
- var obj = _cache[id];
+ String mapId = map['id'];
+ var obj = (mapId != null) ? _cache[mapId] : null;
if (obj != null) {
// Consider calling update when map is not a reference.
return obj;
}
// Build the object from the map directly.
obj = new ServiceObject._fromMap(this, map);
- if (obj != null && obj.canCache) {
- _cache[id] = obj;
+ if ((obj != null) && obj.canCache) {
+ _cache[mapId] = obj;
}
return obj;
}
@@ -819,11 +862,12 @@
Future<ServiceObject> invokeRpc(String method, Map params) {
return invokeRpcNoUpgrade(method, params).then((ObservableMap response) {
- var obj = new ServiceObject._fromMap(this, response);
- if (obj.canCache) {
- _cache.putIfAbsent(id, () => obj);
- }
- return obj;
+ var obj = new ServiceObject._fromMap(this, response);
+ if ((obj != null) && obj.canCache) {
+ String objId = obj.id;
+ _cache.putIfAbsent(objId, () => obj);
+ }
+ return obj;
});
}
@@ -979,51 +1023,6 @@
});
}
- @reflectable CodeTrieNode profileTrieRoot;
- // The profile trie is serialized as a list of integers. Each node
- // is recreated by consuming some portion of the list. The format is as
- // follows:
- // [0] index into codeTable of code object.
- // [1] tick count (number of times this stack frame occured).
- // [2] child node count
- // Reading the trie is done by recursively reading the tree depth-first
- // pre-order.
- CodeTrieNode _processProfileTrie(List<int> data, List<Code> codeTable) {
- // Setup state shared across calls to _readTrieNode.
- _trieDataCursor = 0;
- _trieData = data;
- if (_trieData == null) {
- return null;
- }
- if (_trieData.length < 3) {
- // Not enough integers for 1 node.
- return null;
- }
- // Read the tree, returns the root node.
- return _readTrieNode(codeTable);
- }
- int _trieDataCursor;
- List<int> _trieData;
- CodeTrieNode _readTrieNode(List<Code> codeTable) {
- // Read index into code table.
- var index = _trieData[_trieDataCursor++];
- // Lookup code object.
- var code = codeTable[index];
- // Frame counter.
- var count = _trieData[_trieDataCursor++];
- // Create node.
- var node = new CodeTrieNode(code, count);
- // Number of children.
- var children = _trieData[_trieDataCursor++];
- // Recursively read child nodes.
- for (var i = 0; i < children; i++) {
- var child = _readTrieNode(codeTable);
- node.children.add(child);
- node.summedChildCount += child.count;
- }
- return node;
- }
-
ObservableList<Breakpoint> breakpoints = new ObservableList();
void _removeBreakpoint(Breakpoint bpt) {
@@ -1805,8 +1804,10 @@
final String _strValue;
FunctionKind._internal(this._strValue);
toString() => _strValue;
- bool isFake() => [kCollected, kNative, kTag, kReused].contains(this);
-
+ bool isSynthetic() => [kCollected, kNative, kStub, kTag].contains(this);
+ bool isDart() => !isSynthetic();
+ bool isStub() => (this == kStub);
+ bool hasDartCode() => isDart() || isStub();
static FunctionKind fromJSON(String value) {
switch(value) {
case 'kRegularFunction': return kRegularFunction;
@@ -1816,16 +1817,19 @@
case 'kConstructor': return kConstructor;
case 'kImplicitGetter': return kImplicitGetterFunction;
case 'kImplicitSetter': return kImplicitSetterFunction;
+ case 'kImplicitStaticFinalGetter': return kImplicitStaticFinalGetter;
+ case 'kIrregexpFunction': return kIrregexpFunction;
case 'kStaticInitializer': return kStaticInitializer;
case 'kMethodExtractor': return kMethodExtractor;
case 'kNoSuchMethodDispatcher': return kNoSuchMethodDispatcher;
case 'kInvokeFieldDispatcher': return kInvokeFieldDispatcher;
case 'Collected': return kCollected;
case 'Native': return kNative;
+ case 'Stub': return kStub;
case 'Tag': return kTag;
- case 'Reused': return kReused;
}
- return kUNKNOWN;
+ print('did not understand $value');
+ throw new FallThroughError();
}
static FunctionKind kRegularFunction = new FunctionKind._internal('function');
@@ -1835,6 +1839,8 @@
static FunctionKind kConstructor = new FunctionKind._internal('constructor');
static FunctionKind kImplicitGetterFunction = new FunctionKind._internal('implicit getter function');
static FunctionKind kImplicitSetterFunction = new FunctionKind._internal('implicit setter function');
+ static FunctionKind kImplicitStaticFinalGetter = new FunctionKind._internal('implicit static final getter');
+ static FunctionKind kIrregexpFunction = new FunctionKind._internal('ir regexp function');
static FunctionKind kStaticInitializer = new FunctionKind._internal('static initializer');
static FunctionKind kMethodExtractor = new FunctionKind._internal('method extractor');
static FunctionKind kNoSuchMethodDispatcher = new FunctionKind._internal('noSuchMethod dispatcher');
@@ -1842,7 +1848,7 @@
static FunctionKind kCollected = new FunctionKind._internal('Collected');
static FunctionKind kNative = new FunctionKind._internal('Native');
static FunctionKind kTag = new FunctionKind._internal('Tag');
- static FunctionKind kReused = new FunctionKind._internal('Reused');
+ static FunctionKind kStub = new FunctionKind._internal('Stub');
static FunctionKind kUNKNOWN = new FunctionKind._internal('UNKNOWN');
}
@@ -1864,6 +1870,10 @@
@observable String qualifiedName;
@observable int usageCounter;
@observable bool isDart;
+ @observable ProfileFunction profile;
+
+ bool get canCache => true;
+ bool get immutable => false;
ServiceFunction._empty(ServiceObject owner) : super._empty(owner);
@@ -1876,7 +1886,7 @@
owningClass = map.containsKey('owningClass') ? map['owningClass'] : null;
owningLibrary = map.containsKey('owningLibrary') ? map['owningLibrary'] : null;
kind = FunctionKind.fromJSON(map['kind']);
- isDart = !kind.isFake();
+ isDart = !kind.isSynthetic();
if (parent == null) {
qualifiedName = (owningClass != null) ?
@@ -1886,7 +1896,9 @@
qualifiedName = "${parent.qualifiedName}.${name}";
}
- if (mapIsRef) { return; }
+ if (mapIsRef) {
+ return;
+ }
isStatic = map['static'];
isConst = map['const'];
@@ -1900,7 +1912,6 @@
isInlinable = map['inlinable'];
deoptimizations = map['deoptimizations'];
usageCounter = map['usageCounter'];
-
}
}
@@ -2113,6 +2124,8 @@
_hits[line] = hit;
}
_applyHitsToLines();
+ // Notify any Observers that this Script's state has changed.
+ notifyChange(null);
}
void _processSource(String source) {
@@ -2133,6 +2146,8 @@
lines.add(new ScriptLine(this, i + 1, sourceLines[i]));
}
_applyHitsToLines();
+ // Notify any Observers that this Script's state has changed.
+ notifyChange(null);
}
void _applyHitsToLines() {
@@ -2143,13 +2158,6 @@
}
}
-class CodeTick {
- final int address;
- final int exclusiveTicks;
- final int inclusiveTicks;
- CodeTick(this.address, this.exclusiveTicks, this.inclusiveTicks);
-}
-
class PcDescriptor extends Observable {
final int pcOffset;
@reflectable final int deoptId;
@@ -2293,51 +2301,11 @@
@reflectable List<PcDescriptor> descriptors =
new ObservableList<PcDescriptor>();
- static String formatPercent(num a, num total) {
- var percent = 100.0 * (a / total);
- return '${percent.toStringAsFixed(2)}%';
- }
-
CodeInstruction(this.address, this.pcOffset, this.machine, this.human);
@reflectable bool get isComment => address == 0;
@reflectable bool get hasDescriptors => descriptors.length > 0;
- @reflectable String formattedAddress() {
- if (address == 0) {
- return '';
- }
- return '0x${address.toRadixString(16)}';
- }
-
- @reflectable String formattedInclusive(Code code) {
- if (code == null) {
- return '';
- }
- var tick = code.addressTicks[address];
- if (tick == null) {
- return '';
- }
- // Don't show inclusive ticks if they are the same as exclusive ticks.
- if (tick.inclusiveTicks == tick.exclusiveTicks) {
- return '';
- }
- var pcent = formatPercent(tick.inclusiveTicks, code.totalSamplesInProfile);
- return '$pcent (${tick.inclusiveTicks})';
- }
-
- @reflectable String formattedExclusive(Code code) {
- if (code == null) {
- return '';
- }
- var tick = code.addressTicks[address];
- if (tick == null) {
- return '';
- }
- var pcent = formatPercent(tick.exclusiveTicks, code.totalSamplesInProfile);
- return '$pcent (${tick.exclusiveTicks})';
- }
-
bool _isJumpInstruction() {
return human.startsWith('j');
}
@@ -2367,8 +2335,6 @@
}
int address = _getJumpAddress();
if (address == 0) {
- // Could not determine jump address.
- Logger.root.severe('Could not determine jump address for $human');
return;
}
for (var i = 0; i < instructions.length; i++) {
@@ -2378,8 +2344,6 @@
return;
}
}
- Logger.root.severe(
- 'Could not find instruction at ${address.toRadixString(16)}');
}
}
@@ -2387,7 +2351,8 @@
final _value;
const CodeKind._internal(this._value);
String toString() => '$_value';
-
+ bool isSynthetic() => [Collected, Native, Tag].contains(this);
+ bool isDart() => !isSynthetic();
static CodeKind fromString(String s) {
if (s == 'Native') {
return Native;
@@ -2395,70 +2360,48 @@
return Dart;
} else if (s == 'Collected') {
return Collected;
- } else if (s == 'Reused') {
- return Reused;
} else if (s == 'Tag') {
return Tag;
+ } else if (s == 'Stub') {
+ return Stub;
}
- Logger.root.warning('Unknown code kind $s');
+ print('do not understand code kind $s');
throw new FallThroughError();
}
- static const Native = const CodeKind._internal('Native');
- static const Dart = const CodeKind._internal('Dart');
static const Collected = const CodeKind._internal('Collected');
- static const Reused = const CodeKind._internal('Reused');
+ static const Dart = const CodeKind._internal('Dart');
+ static const Native = const CodeKind._internal('Native');
+ static const Stub = const CodeKind._internal('Stub');
static const Tag = const CodeKind._internal('Tag');
}
-class CodeCallCount {
- final Code code;
- final int count;
- CodeCallCount(this.code, this.count);
-}
-
-class CodeTrieNode {
- final Code code;
- final int count;
- final children = new List<CodeTrieNode>();
- int summedChildCount = 0;
- CodeTrieNode(this.code, this.count);
+class CodeInlineInterval {
+ final int start;
+ final int end;
+ final List<ServiceFunction> functions = new List<ServiceFunction>();
+ bool contains(int pc) => (pc >= start) && (pc < end);
+ CodeInlineInterval(this.start, this.end);
}
class Code extends ServiceObject {
@observable CodeKind kind;
- @observable int totalSamplesInProfile = 0;
- @reflectable int exclusiveTicks = 0;
- @reflectable int inclusiveTicks = 0;
- @reflectable int startAddress = 0;
- @reflectable int endAddress = 0;
- @reflectable final callers = new List<CodeCallCount>();
- @reflectable final callees = new List<CodeCallCount>();
- @reflectable final instructions = new ObservableList<CodeInstruction>();
- @reflectable final addressTicks = new ObservableMap<int, CodeTick>();
- @observable String formattedInclusiveTicks = '';
- @observable String formattedExclusiveTicks = '';
@observable Instance objectPool;
@observable ServiceFunction function;
@observable Script script;
@observable bool isOptimized = false;
-
+ @reflectable int startAddress = 0;
+ @reflectable int endAddress = 0;
+ @reflectable final instructions = new ObservableList<CodeInstruction>();
+ @observable ProfileCode profile;
+ final List<CodeInlineInterval> inlineIntervals =
+ new List<CodeInlineInterval>();
+ final ObservableList<ServiceFunction> inlinedFunctions =
+ new ObservableList<ServiceFunction>();
bool get canCache => true;
bool get immutable => true;
Code._empty(ServiceObjectOwner owner) : super._empty(owner);
- // Reset all data associated with a profile.
- void resetProfileData() {
- totalSamplesInProfile = 0;
- exclusiveTicks = 0;
- inclusiveTicks = 0;
- formattedInclusiveTicks = '';
- formattedExclusiveTicks = '';
- callers.clear();
- callees.clear();
- addressTicks.clear();
- }
-
void _updateDescriptors(Script script) {
this.script = script;
for (var instruction in instructions) {
@@ -2507,49 +2450,6 @@
return new Future.value(this);
}
- void _resolveCalls(List<CodeCallCount> calls, List data, List<Code> codes) {
- // Assert that this has been cleared.
- assert(calls.length == 0);
- // Resolve.
- for (var i = 0; i < data.length; i += 2) {
- var index = int.parse(data[i]);
- var count = int.parse(data[i + 1]);
- assert(index >= 0);
- assert(index < codes.length);
- calls.add(new CodeCallCount(codes[index], count));
- }
- // Sort to descending count order.
- calls.sort((a, b) => b.count - a.count);
- }
-
-
- static String formatPercent(num a, num total) {
- var percent = 100.0 * (a / total);
- return '${percent.toStringAsFixed(2)}%';
- }
-
- void updateProfileData(Map profileData,
- List<Code> codeTable,
- int sampleCount) {
- // Assert we are handed profile data for this code object.
- assert(profileData['code'] == this);
- totalSamplesInProfile = sampleCount;
- inclusiveTicks = int.parse(profileData['inclusive_ticks']);
- exclusiveTicks = int.parse(profileData['exclusive_ticks']);
- _resolveCalls(callers, profileData['callers'], codeTable);
- _resolveCalls(callees, profileData['callees'], codeTable);
- var ticks = profileData['ticks'];
- if (ticks != null) {
- _processTicks(ticks);
- }
- formattedInclusiveTicks =
- '${formatPercent(inclusiveTicks, totalSamplesInProfile)} '
- '($inclusiveTicks)';
- formattedExclusiveTicks =
- '${formatPercent(exclusiveTicks, totalSamplesInProfile)} '
- '($exclusiveTicks)';
- }
-
void _update(ObservableMap m, bool mapIsRef) {
name = m['name'];
vmName = (m.containsKey('vmName') ? m['vmName'] : name);
@@ -2558,6 +2458,10 @@
startAddress = int.parse(m['start'], radix:16);
endAddress = int.parse(m['end'], radix:16);
function = isolate.getFromMap(m['function']);
+ if (mapIsRef) {
+ return;
+ }
+ _loaded = true;
objectPool = isolate.getFromMap(m['objectPool']);
var disassembly = m['disassembly'];
if (disassembly != null) {
@@ -2568,9 +2472,56 @@
descriptors = descriptors['members'];
_processDescriptors(descriptors);
}
- // We are loaded if we have instructions or are not Dart code.
- _loaded = (instructions.length != 0) || (kind != CodeKind.Dart);
hasDisassembly = (instructions.length != 0) && (kind == CodeKind.Dart);
+ inlinedFunctions.clear();
+ var inlinedFunctionsTable = m['inlinedFunctions'];
+ var inlinedIntervals = m['inlinedIntervals'];
+ if (inlinedFunctionsTable != null) {
+ // Iterate and upgrade each ServiceFunction.
+ for (var i = 0; i < inlinedFunctionsTable.length; i++) {
+ // Upgrade each function and set it back in the list.
+ var func = isolate.getFromMap(inlinedFunctionsTable[i]);
+ inlinedFunctionsTable[i] = func;
+ if (!inlinedFunctions.contains(func)) {
+ inlinedFunctions.add(func);
+ }
+ }
+ }
+ if ((inlinedIntervals == null) || (inlinedFunctionsTable == null)) {
+ // No inline information.
+ inlineIntervals.clear();
+ return;
+ }
+ _processInline(inlinedFunctionsTable, inlinedIntervals);
+ }
+
+ CodeInlineInterval findInterval(int pc) {
+ for (var i = 0; i < inlineIntervals.length; i++) {
+ var interval = inlineIntervals[i];
+ if (interval.contains(pc)) {
+ return interval;
+ }
+ }
+ return null;
+ }
+
+ void _processInline(List<ServiceFunction> inlinedFunctionsTable,
+ List<List<int>> inlinedIntervals) {
+ for (var i = 0; i < inlinedIntervals.length; i++) {
+ var inlinedInterval = inlinedIntervals[i];
+ var start = inlinedInterval[0] + startAddress;
+ var end = inlinedInterval[1] + startAddress;
+ var codeInlineInterval = new CodeInlineInterval(start, end);
+ for (var i = 2; i < inlinedInterval.length - 1; i++) {
+ var inline_id = inlinedInterval[i];
+ if (inline_id < 0) {
+ continue;
+ }
+ var function = inlinedFunctionsTable[inline_id];
+ codeInlineInterval.functions.add(function);
+ }
+ inlineIntervals.add(codeInlineInterval);
+ }
}
@observable bool hasDisassembly = false;
@@ -2624,50 +2575,13 @@
}
}
- void _processTicks(List<String> profileTicks) {
- assert(profileTicks != null);
- assert((profileTicks.length % 3) == 0);
- for (var i = 0; i < profileTicks.length; i += 3) {
- var address = int.parse(profileTicks[i], radix:16);
- var exclusive = int.parse(profileTicks[i + 1]);
- var inclusive = int.parse(profileTicks[i + 2]);
- var tick = new CodeTick(address, exclusive, inclusive);
- addressTicks[address] = tick;
- }
- }
-
/// Returns true if [address] is contained inside [this].
bool contains(int address) {
return (address >= startAddress) && (address < endAddress);
}
- /// Sum all caller counts.
- int sumCallersCount() => _sumCallCount(callers);
- /// Specific caller count.
- int callersCount(Code code) => _callCount(callers, code);
- /// Sum of callees count.
- int sumCalleesCount() => _sumCallCount(callees);
- /// Specific callee count.
- int calleesCount(Code code) => _callCount(callees, code);
-
- int _sumCallCount(List<CodeCallCount> calls) {
- var sum = 0;
- for (CodeCallCount caller in calls) {
- sum += caller.count;
- }
- return sum;
- }
-
- int _callCount(List<CodeCallCount> calls, Code code) {
- for (CodeCallCount caller in calls) {
- if (caller.code == code) {
- return caller.count;
- }
- }
- return 0;
- }
-
- @reflectable bool get isDartCode => kind == CodeKind.Dart;
+ @reflectable bool get isDartCode => (kind == CodeKind.Dart) ||
+ (kind == CodeKind.Stub);
}
diff --git a/runtime/observatory/lib/src/app/utils.dart b/runtime/observatory/lib/utils.dart
similarity index 85%
rename from runtime/observatory/lib/src/app/utils.dart
rename to runtime/observatory/lib/utils.dart
index eff1a17..522a11e 100644
--- a/runtime/observatory/lib/src/app/utils.dart
+++ b/runtime/observatory/lib/utils.dart
@@ -2,12 +2,19 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-part of app;
+library utils;
+
+import 'dart:math';
class Utils {
+
+ static String formatPercentNormalized(double x) {
+ var percent = 100.0 * x;
+ return '${percent.toStringAsFixed(2)}%';
+ }
+
static String formatPercent(num a, num total) {
- var percent = 100.0 * (a / total);
- return '${percent.toStringAsFixed(2)}%';
+ return formatPercentNormalized(a / total);
}
static String zeroPad(int value, int pad) {
@@ -45,11 +52,16 @@
if (time == null) {
return "-";
}
- const millisPerHour = 60 * 60 * 1000;
- const millisPerMinute = 60 * 1000;
const millisPerSecond = 1000;
var millis = (time * millisPerSecond).round();
+ return formatTimeMilliseconds(millis);
+ }
+
+ static String formatTimeMilliseconds(int millis) {
+ const millisPerHour = 60 * 60 * 1000;
+ const millisPerMinute = 60 * 1000;
+ const millisPerSecond = 1000;
var hours = millis ~/ millisPerHour;
millis = millis % millisPerHour;
@@ -62,12 +74,15 @@
if (hours > 0) {
return ("${zeroPad(hours,2)}"
- ":${zeroPad(minutes,2)}"
+ ":${zeroPad(minutes,2)}"
+ ":${zeroPad(seconds,2)}"
+ ".${zeroPad(millis,3)}");
+ } else if (minutes > 0) {
+ return ("${zeroPad(minutes,2)}"
":${zeroPad(seconds,2)}"
".${zeroPad(millis,3)}");
} else {
- return ("${zeroPad(minutes,2)}"
- ":${zeroPad(seconds,2)}"
+ return ("${zeroPad(seconds,2)}"
".${zeroPad(millis,3)}");
}
}
@@ -110,7 +125,6 @@
var seconds = millis ~/ millisPerSecond;
- StringBuffer out = new StringBuffer();
if (hours != 0) {
return '${hours}h ${minutes}m ${seconds}s';
}
@@ -125,4 +139,4 @@
}
static bool runningInJavaScript() => identical(1.0, 1);
-}
\ No newline at end of file
+}
diff --git a/runtime/observatory/observatory.gypi b/runtime/observatory/observatory.gypi
index 1eb2ba2..46c126c 100644
--- a/runtime/observatory/observatory.gypi
+++ b/runtime/observatory/observatory.gypi
@@ -51,6 +51,7 @@
'toolsets': ['host'],
'sources': [
'lib/app.dart',
+ 'lib/cpu_profile.dart',
'lib/dominator_tree.dart',
'lib/elements.dart',
'lib/object_graph.dart',
@@ -63,8 +64,8 @@
'lib/src/app/page.dart',
'lib/src/app/settings.dart',
'lib/src/app/target_manager.dart',
- 'lib/src/app/utils.dart',
'lib/src/app/view_model.dart',
+ 'lib/src/cpu_profile/cpu_profile.dart',
'lib/src/elements/action_link.dart',
'lib/src/elements/action_link.html',
'lib/src/elements/class_ref.dart',
@@ -171,6 +172,7 @@
'lib/src/elements/img/isolate_icon.png',
'lib/src/service/object.dart',
'lib/tracer.dart',
+ 'lib/utils.dart',
'web/index.html',
'web/main.dart',
],
diff --git a/runtime/observatory/test/caching_test.dart b/runtime/observatory/test/caching_test.dart
new file mode 100644
index 0000000..dacfb18
--- /dev/null
+++ b/runtime/observatory/test/caching_test.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// If caching is working properly, the coverage data will go into the same
+// Script object from which we requested coverage data, instead of a new
+// Script object.
+
+library caching_test;
+
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+import 'dart:async';
+
+script() {
+ print("This executed");
+}
+
+hasSomeCoverageData(Script script) {
+ for (var line in script.lines) {
+ if (line.hits != null) return true;
+ }
+ return false;
+}
+
+var tests = [
+(Isolate isolate) async {
+ Library lib = await isolate.rootLib.load();
+ Script script = await lib.scripts.single.load();
+ expect(hasSomeCoverageData(script), isFalse);
+ Script script2 = await script.refreshCoverage();
+ expect(identical(script, script2), isTrue);
+ expect(hasSomeCoverageData(script), isTrue);
+},
+
+];
+
+main(args) => runIsolateTests(args, tests, testeeBefore: script);
diff --git a/runtime/observatory/test/coverage_test.dart b/runtime/observatory/test/coverage_test.dart
index aa5eaf2..67d0504 100644
--- a/runtime/observatory/test/coverage_test.dart
+++ b/runtime/observatory/test/coverage_test.dart
@@ -64,12 +64,16 @@
}
});
- // Add the breakpoint.
- var script = isolate.rootLib.scripts[0];
- var line = 14;
- return isolate.addBreakpoint(script, line).then((ServiceObject bpt) {
- return completer.future; // Wait for breakpoint reached.
+ // Create a timer to set a breakpoint with a short delay.
+ new Timer(new Duration(milliseconds: 2000), () {
+ // Add the breakpoint.
+ print('Setting breakpoint.');
+ var script = isolate.rootLib.scripts[0];
+ var line = 14;
+ isolate.addBreakpoint(script, line);
});
+
+ return completer.future;
});
},
@@ -118,7 +122,6 @@
23, 1, 24, 1, 26, 0]));
expect(normalize(coverage['coverage'][1]['hits']).take(12),
equals([32, 0, 35, 0, 36, 0, 32, 1, 35, 1, 36, 0]));
-
}));
// Script
tests.add(cls.load().then((_) {
diff --git a/runtime/observatory/test/isolate_lifecycle_test.dart b/runtime/observatory/test/isolate_lifecycle_test.dart
new file mode 100644
index 0000000..97411d2
--- /dev/null
+++ b/runtime/observatory/test/isolate_lifecycle_test.dart
@@ -0,0 +1,101 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:isolate' as I;
+import 'dart:math';
+
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+
+import 'test_helper.dart';
+
+final spawnCount = 4;
+final resumeCount = spawnCount ~/ 2;
+final isolates = [];
+
+void spawnEntry(int i) {
+}
+
+Future before() async {
+ // Spawn spawnCount long lived isolates.
+ for (var i = 0; i < spawnCount; i++) {
+ var isolate = await I.Isolate.spawn(spawnEntry, i);
+ isolates.add(isolate);
+ }
+ print('spawned all isolates');
+}
+
+Future during() {
+}
+
+var tests = [
+ (VM vm) async {
+ expect(vm.isolates.length, spawnCount + 1);
+ },
+ (VM vm) async {
+ // Load each isolate.
+ for (var isolate in vm.isolates) {
+ await isolate.load();
+ }
+ },
+ (VM vm) async {
+ var pausedCount = 0;
+ var runningCount = 0;
+ for (var isolate in vm.isolates) {
+ if (isolate.pauseEvent != null) {
+ pausedCount++;
+ } else {
+ runningCount++;
+ }
+ }
+ expect(pausedCount, spawnCount);
+ expect(runningCount, 1);
+ },
+ (VM vm) async {
+ var resumedReceived = 0;
+ var eventsDone = processServiceEvents(vm, (event, sub, completer) {
+ if (event.eventType.startsWith('IsolateShutdown')) {
+ resumedReceived++;
+ if (resumedReceived == resumeCount) {
+ sub.cancel();
+ completer.complete(null);
+ }
+ }
+ });
+ var resumesIssued = 0;
+ var isolateList = vm.isolates.toList();
+ for (var isolate in isolateList) {
+ if (isolate.name == 'root') {
+ continue;
+ }
+ try {
+ resumesIssued++;
+ await isolate.resume();
+ } catch(_) {}
+ if (resumesIssued == resumeCount) {
+ break;
+ }
+ }
+ return eventsDone;
+ },
+ (VM vm) async {
+ var pausedCount = 0;
+ var runningCount = 0;
+ for (var isolate in vm.isolates) {
+ if (isolate.pauseEvent != null) {
+ pausedCount++;
+ } else {
+ runningCount++;
+ }
+ }
+ expect(pausedCount, spawnCount - resumeCount);
+ expect(runningCount, 1);
+ },
+];
+
+main(args) async => runVMTests(args, tests,
+ testeeBefore: before,
+ testeeConcurrent: during,
+ pause_on_exit: true);
diff --git a/runtime/observatory/test/test_helper.dart b/runtime/observatory/test/test_helper.dart
index 11feac8..aa3c2a0 100644
--- a/runtime/observatory/test/test_helper.dart
+++ b/runtime/observatory/test/test_helper.dart
@@ -21,12 +21,15 @@
Platform.script.toFilePath(),
_TESTEE_MODE_FLAG] {}
- Future<int> launch() {
+ Future<int> launch(bool pause_on_exit) {
String dartExecutable = Platform.executable;
var fullArgs = [];
+ if (pause_on_exit == true) {
+ fullArgs.add('--pause-isolates-on-exit');
+ }
fullArgs.addAll(Platform.executableArguments);
fullArgs.addAll(args);
- print('** Launching $fullArgs');
+ print('** Launching $dartExecutable ${fullArgs.join(' ')}');
return Process.start(dartExecutable, fullArgs).then((p) {
Completer completer = new Completer();
@@ -71,6 +74,7 @@
}
typedef Future IsolateTest(Isolate isolate);
+typedef Future VMTest(VM vm);
/// Runs [tests] in sequence, each of which should take an [Isolate] and
/// return a [Future]. Code for setting up state can run before and/or
@@ -79,7 +83,8 @@
void runIsolateTests(List<String> mainArgs,
List<IsolateTest> tests,
{void testeeBefore(),
- void testeeConcurrent()}) {
+ void testeeConcurrent(),
+ bool pause_on_exit}) {
if (mainArgs.contains(_TESTEE_MODE_FLAG)) {
if (testeeBefore != null) {
testeeBefore();
@@ -92,13 +97,71 @@
stdin.first.then((_) => exit(0));
} else {
var process = new _TestLauncher();
- process.launch().then((port) {
+ process.launch(pause_on_exit).then((port) {
String addr = 'ws://localhost:$port/ws';
+ var testIndex = 0;
+ var totalTests = tests.length - 1;
+ var name = Platform.script.pathSegments.last;
new WebSocketVM(new WebSocketVMTarget(addr)).load()
.then((VM vm) => vm.isolates.first.load())
- .then((Isolate isolate) =>
- Future.forEach(tests, (test) => test(isolate)))
- .then((_) => exit(0));
+ .then((Isolate isolate) => Future.forEach(tests, (test) {
+ print('Running $name [$testIndex/$totalTests]');
+ testIndex++;
+ return test(isolate);
+ })).then((_) => exit(0));
});
}
}
+
+
+// Cancel the subscription and complete the completer when finished processing
+// events.
+typedef void ServiceEventHandler(ServiceEvent event,
+ StreamSubscription subscription,
+ Completer completer);
+
+Future processServiceEvents(VM vm, ServiceEventHandler handler) {
+ Completer completer = new Completer();
+ var subscription;
+ subscription = vm.events.stream.listen((ServiceEvent event) {
+ handler(event, subscription, completer);
+ });
+ return completer.future;
+}
+
+
+/// Runs [tests] in sequence, each of which should take an [Isolate] and
+/// return a [Future]. Code for setting up state can run before and/or
+/// concurrently with the tests. Uses [mainArgs] to determine whether
+/// to run tests or testee in this invokation of the script.
+Future runVMTests(List<String> mainArgs,
+ List<VMTest> tests,
+ {Future testeeBefore(),
+ Future testeeConcurrent(),
+ bool pause_on_exit}) async {
+ if (mainArgs.contains(_TESTEE_MODE_FLAG)) {
+ if (testeeBefore != null) {
+ await testeeBefore();
+ }
+ print(''); // Print blank line to signal that we are ready.
+ if (testeeConcurrent != null) {
+ await testeeConcurrent();
+ }
+ // Wait until signaled from spawning test.
+ stdin.first.then((_) => exit(0));
+ } else {
+ var process = new _TestLauncher();
+ process.launch(pause_on_exit).then((port) async {
+ String addr = 'ws://localhost:$port/ws';
+ var testIndex = 0;
+ var totalTests = tests.length - 1;
+ var name = Platform.script.pathSegments.last;
+ new WebSocketVM(new WebSocketVMTarget(addr)).load()
+ .then((VM vm) => Future.forEach(tests, (test) {
+ print('Running $name [$testIndex/$totalTests]');
+ testIndex++;
+ return test(vm);
+ })).then((_) => exit(0));
+ });
+ }
+}
\ No newline at end of file
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 7b40c03..3eaddef 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -75,7 +75,6 @@
[ $arch == mips ]
cc/StaticNonNullSumCallCodegen: Crash, Pass # Issue 17440
-cc/JSON_JSONStream_Options: Crash, Pass # Issue 19328
[ $arch == mips && $mode == debug ]
cc/FindCodeObject: Skip # Takes more than 8 minutes. Issue 17440
diff --git a/runtime/vm/ast.h b/runtime/vm/ast.h
index c6761fd..4aac9ec 100644
--- a/runtime/vm/ast.h
+++ b/runtime/vm/ast.h
@@ -159,19 +159,37 @@
class AwaitNode : public AstNode {
public:
- AwaitNode(intptr_t token_pos, AstNode* expr)
- : AstNode(token_pos), expr_(expr) { }
+ AwaitNode(intptr_t token_pos,
+ AstNode* expr,
+ LocalScope* try_scope,
+ int16_t try_index,
+ LocalScope* outer_try_scope,
+ intptr_t outer_try_index)
+ : AstNode(token_pos),
+ expr_(expr),
+ try_scope_(try_scope),
+ try_index_(try_index),
+ outer_try_scope_(outer_try_scope),
+ outer_try_index_(outer_try_index) { }
void VisitChildren(AstNodeVisitor* visitor) const {
expr_->Visit(visitor);
}
AstNode* expr() const { return expr_; }
+ LocalScope* try_scope() const { return try_scope_; }
+ int16_t try_index() const { return try_index_; }
+ LocalScope* outer_try_scope() const { return outer_try_scope_; }
+ int16_t outer_try_index() const { return outer_try_index_; }
DECLARE_COMMON_NODE_FUNCTIONS(AwaitNode);
private:
AstNode* expr_;
+ LocalScope* try_scope_;
+ int16_t try_index_;
+ LocalScope* outer_try_scope_;
+ int16_t outer_try_index_;
DISALLOW_COPY_AND_ASSIGN(AwaitNode);
};
@@ -1767,6 +1785,8 @@
const LocalVariable* context_var,
const LocalVariable* exception_var,
const LocalVariable* stacktrace_var,
+ const LocalVariable* rethrow_exception_var,
+ const LocalVariable* rethrow_stacktrace_var,
intptr_t catch_handler_index,
bool needs_stacktrace)
: AstNode(token_pos),
@@ -1775,6 +1795,8 @@
context_var_(*context_var),
exception_var_(*exception_var),
stacktrace_var_(*stacktrace_var),
+ rethrow_exception_var_(*rethrow_exception_var),
+ rethrow_stacktrace_var_(*rethrow_stacktrace_var),
catch_handler_index_(catch_handler_index),
needs_stacktrace_(needs_stacktrace) {
ASSERT(catch_block_ != NULL);
@@ -1788,6 +1810,12 @@
const LocalVariable& context_var() const { return context_var_; }
const LocalVariable& exception_var() const { return exception_var_; }
const LocalVariable& stacktrace_var() const { return stacktrace_var_; }
+ const LocalVariable& rethrow_exception_var() const {
+ return rethrow_exception_var_;
+ }
+ const LocalVariable& rethrow_stacktrace_var() const {
+ return rethrow_stacktrace_var_;
+ }
intptr_t catch_handler_index() const { return catch_handler_index_; }
bool needs_stacktrace() const { return needs_stacktrace_; }
@@ -1803,6 +1831,8 @@
const LocalVariable& context_var_;
const LocalVariable& exception_var_;
const LocalVariable& stacktrace_var_;
+ const LocalVariable& rethrow_exception_var_;
+ const LocalVariable& rethrow_stacktrace_var_;
const intptr_t catch_handler_index_;
const bool needs_stacktrace_;
diff --git a/runtime/vm/ast_transformer.cc b/runtime/vm/ast_transformer.cc
index f829dae..87c6170 100644
--- a/runtime/vm/ast_transformer.cc
+++ b/runtime/vm/ast_transformer.cc
@@ -45,11 +45,9 @@
#undef DEFINE_UNREACHABLE
AwaitTransformer::AwaitTransformer(SequenceNode* preamble,
- const ParsedFunction& parsed_function,
LocalScope* function_top)
: preamble_(preamble),
temp_cnt_(0),
- parsed_function_(parsed_function),
function_top_(function_top),
thread_(Thread::Current()) {
ASSERT(function_top_ != NULL);
@@ -109,6 +107,30 @@
}
+// Restore the currently relevant :saved_try_context_var on the stack
+// from the captured :async_saved_try_ctx_var_<try_index>.
+AstNode* AwaitTransformer::RestoreSavedTryContext(Zone* zone,
+ LocalScope* scope,
+ int16_t try_index) {
+ LocalVariable* saved_try_ctx =
+ scope->LocalLookupVariable(Symbols::SavedTryContextVar());
+ ASSERT((saved_try_ctx != NULL) && !saved_try_ctx->is_captured());
+ const String& async_saved_try_ctx_name = String::ZoneHandle(zone,
+ Symbols::New(String::Handle(zone,
+ String::NewFormatted("%s%d",
+ Symbols::AsyncSavedTryCtxVarPrefix().ToCString(),
+ try_index))));
+ LocalVariable* async_saved_try_ctx =
+ scope->LocalLookupVariable(async_saved_try_ctx_name);
+ ASSERT(async_saved_try_ctx != NULL);
+ ASSERT(async_saved_try_ctx->is_captured());
+ return new (zone) StoreLocalNode(
+ Scanner::kNoSourcePos,
+ saved_try_ctx,
+ new (zone) LoadLocalNode(Scanner::kNoSourcePos, async_saved_try_ctx));
+}
+
+
void AwaitTransformer::VisitAwaitNode(AwaitNode* node) {
// Await transformation:
//
@@ -212,16 +234,19 @@
preamble_->Add(continuation_return);
// If this expression is part of a try block, also append the code for
- // restoring the saved try context that lives on the stack.
- const String& async_saved_try_ctx_name =
- String::Handle(Z, parsed_function_.async_saved_try_ctx_name());
- if (!async_saved_try_ctx_name.IsNull()) {
- LocalVariable* async_saved_try_ctx =
- GetVariableInScope(preamble_->scope(), async_saved_try_ctx_name);
- preamble_->Add(new (Z) StoreLocalNode(
- Scanner::kNoSourcePos,
- parsed_function_.saved_try_ctx(),
- new (Z) LoadLocalNode(Scanner::kNoSourcePos, async_saved_try_ctx)));
+ // restoring the saved try context that lives on the stack and possibly the
+ // saved try context of the outer try block.
+ if (node->try_scope() != NULL) {
+ preamble_->Add(RestoreSavedTryContext(Z,
+ node->try_scope(),
+ node->try_index()));
+ if (node->outer_try_scope() != NULL) {
+ preamble_->Add(RestoreSavedTryContext(Z,
+ node->outer_try_scope(),
+ node->outer_try_index()));
+ }
+ } else {
+ ASSERT(node->outer_try_scope() == NULL);
}
LoadLocalNode* load_error_param = new (Z) LoadLocalNode(
@@ -597,12 +622,10 @@
void AwaitTransformer::VisitThrowNode(ThrowNode* node) {
- // TODO(mlippautz): Check if relevant.
AstNode* new_exception = Transform(node->exception());
- AstNode* new_stacktrace = Transform(node->stacktrace());
result_ = new(Z) ThrowNode(node->token_pos(),
new_exception,
- new_stacktrace);
+ node->stacktrace());
}
} // namespace dart
diff --git a/runtime/vm/ast_transformer.h b/runtime/vm/ast_transformer.h
index 423e5fb7..9291c13 100644
--- a/runtime/vm/ast_transformer.h
+++ b/runtime/vm/ast_transformer.h
@@ -10,7 +10,6 @@
namespace dart {
-class ParsedFunction;
class Thread;
// Translate an AstNode containing an expression (that itself contains one or
@@ -40,9 +39,7 @@
//
class AwaitTransformer : public AstNodeVisitor {
public:
- AwaitTransformer(SequenceNode* preamble,
- const ParsedFunction& parsed_function,
- LocalScope* function_top);
+ AwaitTransformer(SequenceNode* preamble, LocalScope* function_top);
#define DECLARE_VISIT(BaseName) \
virtual void Visit##BaseName##Node(BaseName##Node* node);
@@ -52,6 +49,10 @@
AstNode* Transform(AstNode* expr);
+ static AstNode* RestoreSavedTryContext(Zone* zone,
+ LocalScope* scope,
+ int16_t try_index);
+
private:
LocalVariable* EnsureCurrentTempVar();
LocalVariable* AddToPreambleNewTempVar(AstNode* node);
@@ -69,7 +70,6 @@
SequenceNode* preamble_;
int32_t temp_cnt_;
AstNode* result_;
- const ParsedFunction& parsed_function_;
LocalScope* function_top_;
Thread* thread_;
diff --git a/runtime/vm/constant_propagator.cc b/runtime/vm/constant_propagator.cc
index 08f80d8..f0ef1c9 100644
--- a/runtime/vm/constant_propagator.cc
+++ b/runtime/vm/constant_propagator.cc
@@ -1512,9 +1512,7 @@
void ConstantPropagator::Transform() {
if (FLAG_trace_constant_propagation) {
- OS::Print("\n==== Before constant propagation ====\n");
- FlowGraphPrinter printer(*graph_);
- printer.PrintBlocks();
+ FlowGraphPrinter::PrintGraph("Before CP", graph_);
}
// We will recompute dominators, block ordering, block ids, block last
@@ -1662,9 +1660,7 @@
graph_->ComputeDominators(&dominance_frontier);
if (FLAG_trace_constant_propagation) {
- OS::Print("\n==== After constant propagation ====\n");
- FlowGraphPrinter printer(*graph_);
- printer.PrintBlocks();
+ FlowGraphPrinter::PrintGraph("After CP", graph_);
}
}
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index b497da0..041eba1 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -41,6 +41,8 @@
"Max total size of external allocations in MB, or 0 for unlimited,"
"e.g: --external_max_size=1024 allows up to 1024MB of externals");
+DEFINE_FLAG(bool, keep_code, false,
+ "Keep deoptimized code for profiling.");
DECLARE_FLAG(bool, print_class_table);
DECLARE_FLAG(bool, trace_isolates);
@@ -276,6 +278,10 @@
const UserTag& default_tag = UserTag::Handle(UserTag::DefaultTag());
isolate->set_current_tag(default_tag);
+ if (FLAG_keep_code) {
+ isolate->set_deoptimized_code_array(
+ GrowableObjectArray::Handle(GrowableObjectArray::New()));
+ }
return Error::null();
}
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index a67ed54..6c45e4e 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -3398,6 +3398,39 @@
}
+// Structure to record acquired typed data for verification purposes.
+class AcquiredData {
+ public:
+ AcquiredData(void* data, intptr_t size_in_bytes, bool copy)
+ : size_in_bytes_(size_in_bytes), data_(data), data_copy_(NULL) {
+ if (copy) {
+ data_copy_ = malloc(size_in_bytes_);
+ memmove(data_copy_, data_, size_in_bytes_);
+ }
+ }
+
+ // The pointer to hand out via the API.
+ void* GetData() const { return data_copy_ != NULL ? data_copy_ : data_; }
+
+ // Writes back and deletes/zaps, if a copy was made.
+ ~AcquiredData() {
+ if (data_copy_ != NULL) {
+ memmove(data_, data_copy_, size_in_bytes_);
+ memset(data_copy_, kZapReleasedByte, size_in_bytes_);
+ free(data_copy_);
+ }
+ }
+
+ private:
+ static const uint8_t kZapReleasedByte = 0xda;
+ intptr_t size_in_bytes_;
+ void* data_;
+ void* data_copy_;
+
+ DISALLOW_COPY_AND_ASSIGN(AcquiredData);
+};
+
+
DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object,
Dart_TypedData_Type* type,
void** data,
@@ -3421,28 +3454,36 @@
}
// Get the type of typed data object.
*type = GetType(class_id);
+ intptr_t length = 0;
+ intptr_t size_in_bytes = 0;
+ void* data_tmp = NULL;
+ bool external = false;
// If it is an external typed data object just return the data field.
if (RawObject::IsExternalTypedDataClassId(class_id)) {
const ExternalTypedData& obj =
Api::UnwrapExternalTypedDataHandle(isolate, object);
ASSERT(!obj.IsNull());
- *len = obj.Length();
- *data = obj.DataAddr(0);
+ length = obj.Length();
+ size_in_bytes = length * ExternalTypedData::ElementSizeInBytes(class_id);
+ data_tmp = obj.DataAddr(0);
+ external = true;
} else if (RawObject::IsTypedDataClassId(class_id)) {
// Regular typed data object, set up some GC and API callback guards.
const TypedData& obj = Api::UnwrapTypedDataHandle(isolate, object);
ASSERT(!obj.IsNull());
- *len = obj.Length();
+ length = obj.Length();
+ size_in_bytes = length * TypedData::ElementSizeInBytes(class_id);
isolate->IncrementNoGCScopeDepth();
START_NO_CALLBACK_SCOPE(isolate);
- *data = obj.DataAddr(0);
+ data_tmp = obj.DataAddr(0);
} else {
ASSERT(RawObject::IsTypedDataViewClassId(class_id));
const Instance& view_obj = Api::UnwrapInstanceHandle(isolate, object);
ASSERT(!view_obj.IsNull());
Smi& val = Smi::Handle();
val ^= TypedDataView::Length(view_obj);
- *len = val.Value();
+ length = val.Value();
+ size_in_bytes = length * TypedDataView::ElementSizeInBytes(class_id);
val ^= TypedDataView::OffsetInBytes(view_obj);
intptr_t offset_in_bytes = val.Value();
const Instance& obj = Instance::Handle(TypedDataView::Data(view_obj));
@@ -3450,27 +3491,30 @@
START_NO_CALLBACK_SCOPE(isolate);
if (TypedData::IsTypedData(obj)) {
const TypedData& data_obj = TypedData::Cast(obj);
- *data = data_obj.DataAddr(offset_in_bytes);
+ data_tmp = data_obj.DataAddr(offset_in_bytes);
} else {
ASSERT(ExternalTypedData::IsExternalTypedData(obj));
const ExternalTypedData& data_obj = ExternalTypedData::Cast(obj);
- *data = data_obj.DataAddr(offset_in_bytes);
+ data_tmp = data_obj.DataAddr(offset_in_bytes);
+ external = true;
}
}
if (FLAG_verify_acquired_data) {
- // For now, we just verify that acquire/release are properly matched
- // per object.
- // TODO(koda): Copy internal data to/from a side buffer which is unmapped
- // on release to catch use-after-release bugs.
const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(object));
WeakTable* table = isolate->api_state()->acquired_table();
intptr_t current = table->GetValue(obj.raw());
if (current != 0) {
- ASSERT(current == 1);
return Api::NewError("Data was already acquired for this object.");
}
- table->SetValue(obj.raw(), 1);
+ // Do not make a copy if the data is external. Some callers expect external
+ // data to remain in place, even though the API spec doesn't guarantee it.
+ // TODO(koda/asiva): Make final decision and document it.
+ AcquiredData* ad = new AcquiredData(data_tmp, size_in_bytes, !external);
+ table->SetValue(obj.raw(), reinterpret_cast<intptr_t>(ad));
+ data_tmp = ad->GetData();
}
+ *data = data_tmp;
+ *len = length;
return Api::Success();
}
@@ -3492,12 +3536,12 @@
const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(object));
WeakTable* table = isolate->api_state()->acquired_table();
intptr_t current = table->GetValue(obj.raw());
- if (current != 1) {
- ASSERT(current == 0);
+ if (current == 0) {
return Api::NewError("Data was not acquired for this object.");
}
- // Delete entry from table.
- table->SetValue(obj.raw(), 0);
+ AcquiredData* ad = reinterpret_cast<AcquiredData*>(current);
+ table->SetValue(obj.raw(), 0); // Delete entry from table.
+ delete ad;
}
return Api::Success();
}
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 7114cd6..d8361e0 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -20,6 +20,7 @@
namespace dart {
DECLARE_FLAG(bool, enable_type_checks);
+DECLARE_FLAG(bool, verify_acquired_data);
TEST_CASE(ErrorHandleBasics) {
const char* kScriptChars =
@@ -1741,7 +1742,7 @@
}
-TEST_CASE(TypedDataDirectAccess) {
+static void TestTypedDataDirectAccess() {
Dart_Handle str = Dart_NewStringFromCString("junk");
Dart_Handle byte_array = Dart_NewTypedData(Dart_TypedData_kUint8, 10);
EXPECT_VALID(byte_array);
@@ -1774,6 +1775,18 @@
}
+TEST_CASE(TypedDataDirectAccessUnverified) {
+ FLAG_verify_acquired_data = false;
+ TestTypedDataDirectAccess();
+}
+
+
+TEST_CASE(TypedDataDirectAccessVerified) {
+ FLAG_verify_acquired_data = true;
+ TestTypedDataDirectAccess();
+}
+
+
static void TestDirectAccess(Dart_Handle lib,
Dart_Handle array,
Dart_TypedData_Type expected_type) {
@@ -1815,7 +1828,7 @@
}
-TEST_CASE(TypedDataDirectAccess1) {
+static void TestTypedDataDirectAccess1() {
const char* kScriptChars =
"import 'dart:typed_data';\n"
"class Expect {\n"
@@ -1860,7 +1873,19 @@
}
-TEST_CASE(TypedDataViewDirectAccess) {
+TEST_CASE(TypedDataDirectAccess1Unverified) {
+ FLAG_verify_acquired_data = false;
+ TestTypedDataDirectAccess1();
+}
+
+
+TEST_CASE(TypedDataDirectAccess1Verified) {
+ FLAG_verify_acquired_data = true;
+ TestTypedDataDirectAccess1();
+}
+
+
+static void TestTypedDataViewDirectAccess() {
const char* kScriptChars =
"import 'dart:typed_data';\n"
"class Expect {\n"
@@ -1899,7 +1924,19 @@
}
-TEST_CASE(ByteDataDirectAccess) {
+TEST_CASE(TypedDataViewDirectAccessUnverified) {
+ FLAG_verify_acquired_data = false;
+ TestTypedDataViewDirectAccess();
+}
+
+
+TEST_CASE(TypedDataViewDirectAccessVerified) {
+ FLAG_verify_acquired_data = true;
+ TestTypedDataViewDirectAccess();
+}
+
+
+static void TestByteDataDirectAccess() {
const char* kScriptChars =
"import 'dart:typed_data';\n"
"class Expect {\n"
@@ -1938,6 +1975,18 @@
}
+TEST_CASE(ByteDataDirectAccessUnverified) {
+ FLAG_verify_acquired_data = false;
+ TestByteDataDirectAccess();
+}
+
+
+TEST_CASE(ByteDataDirectAccessVerified) {
+ FLAG_verify_acquired_data = true;
+ TestByteDataDirectAccess();
+}
+
+
static void ExternalTypedDataAccessTests(Dart_Handle obj,
Dart_TypedData_Type expected_type,
uint8_t data[],
diff --git a/runtime/vm/disassembler.cc b/runtime/vm/disassembler.cc
index 4d5a350..ac8356e 100644
--- a/runtime/vm/disassembler.cc
+++ b/runtime/vm/disassembler.cc
@@ -6,9 +6,11 @@
#include "vm/assembler.h"
#include "vm/globals.h"
-#include "vm/os.h"
-#include "vm/log.h"
+#include "vm/il_printer.h"
#include "vm/json_stream.h"
+#include "vm/log.h"
+#include "vm/os.h"
+
namespace dart {
@@ -130,6 +132,8 @@
comment_finger++;
}
if (old_comment_finger != comment_finger) {
+ char str[4000];
+ BufferFormatter f(str, sizeof(str));
// Comment emitted, emit inlining information.
code.GetInlinedFunctionsAt(offset, &inlined_functions);
// Skip top scope function printing (last entry in 'inlined_functions').
@@ -137,14 +141,15 @@
for (intptr_t i = inlined_functions.length() - 2; i >= 0; i--) {
const char* name = inlined_functions[i]->ToQualifiedCString();
if (first) {
- formatter->Print(" ;; Inlined [%s", name);
+ f.Print(" ;; Inlined [%s", name);
first = false;
} else {
- formatter->Print(" -> %s", name);
+ f.Print(" -> %s", name);
}
}
if (!first) {
- formatter->Print("]\n");
+ f.Print("]\n");
+ formatter->Print(str);
}
}
int instruction_length;
diff --git a/runtime/vm/disassembler_ia32.cc b/runtime/vm/disassembler_ia32.cc
index 7d24929..cd917d4 100644
--- a/runtime/vm/disassembler_ia32.cc
+++ b/runtime/vm/disassembler_ia32.cc
@@ -493,6 +493,7 @@
Print(addr_buffer);
// Try to print as heap object or stub name
if (((addr & kSmiTagMask) == kHeapObjectTag) &&
+ reinterpret_cast<RawObject*>(addr)->IsWellFormed() &&
reinterpret_cast<RawObject*>(addr)->IsOldObject() &&
!Isolate::Current()->heap()->CodeContains(addr) &&
Disassembler::CanFindOldObject(addr)) {
diff --git a/runtime/vm/disassembler_x64.cc b/runtime/vm/disassembler_x64.cc
index 859ab9f..8279d4b 100644
--- a/runtime/vm/disassembler_x64.cc
+++ b/runtime/vm/disassembler_x64.cc
@@ -809,6 +809,7 @@
AppendToBuffer("%#" Px "", addr);
// Try to print as heap object or stub name
if (((addr & kSmiTagMask) == kHeapObjectTag) &&
+ reinterpret_cast<RawObject*>(addr)->IsWellFormed() &&
reinterpret_cast<RawObject*>(addr)->IsOldObject() &&
!Isolate::Current()->heap()->CodeContains(addr) &&
Disassembler::CanFindOldObject(addr)) {
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index b765f5f..86f27e0 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -1111,7 +1111,9 @@
AddReturnExit(node->token_pos(), return_value);
- if ((function.IsAsyncClosure() || function.IsSyncGenClosure()) &&
+ if ((function.IsAsyncClosure() ||
+ function.IsSyncGenClosure() ||
+ function.IsAsyncGenClosure()) &&
(node->return_type() == ReturnNode::kContinuationTarget)) {
JoinEntryInstr* const join = new(I) JoinEntryInstr(
owner()->AllocateBlockId(), owner()->try_index());
@@ -1483,10 +1485,10 @@
}
-void EffectGraphVisitor::BuildYieldJump(LocalVariable* old_context,
- LocalVariable* iterator_param,
- const intptr_t old_ctx_level,
- JoinEntryInstr* target) {
+void EffectGraphVisitor::BuildSyncYieldJump(LocalVariable* old_context,
+ LocalVariable* iterator_param,
+ const intptr_t old_ctx_level,
+ JoinEntryInstr* target) {
// Building a jump consists of the following actions:
// * Load the generator body's iterator parameter (:iterator)
// from the current context into a temporary.
@@ -1539,7 +1541,7 @@
}
-void EffectGraphVisitor::BuildAwaitJump(LocalVariable* old_context,
+void EffectGraphVisitor::BuildAsyncJump(LocalVariable* old_context,
LocalVariable* continuation_result,
LocalVariable* continuation_error,
LocalVariable* continuation_stack_trace,
@@ -3882,7 +3884,9 @@
// The preamble is generated after visiting the body.
GotoInstr* preamble_start = NULL;
if (is_top_level_sequence &&
- (function.IsAsyncClosure() || function.IsSyncGenClosure())) {
+ (function.IsAsyncClosure() ||
+ function.IsSyncGenClosure() ||
+ function.IsAsyncGenClosure())) {
JoinEntryInstr* preamble_end = new(I) JoinEntryInstr(
owner()->AllocateBlockId(), owner()->try_index());
ASSERT(exit() != NULL);
@@ -3908,7 +3912,9 @@
// After generating the CFG for the body we can create the preamble
// because we know exactly how many continuation states we need.
if (is_top_level_sequence &&
- (function.IsAsyncClosure() || function.IsSyncGenClosure())) {
+ (function.IsAsyncClosure() ||
+ function.IsSyncGenClosure() ||
+ function.IsAsyncGenClosure())) {
ASSERT(preamble_start != NULL);
// We are at the top level. Fetch the corresponding scope.
LocalScope* top_scope = node->scope();
@@ -3939,7 +3945,7 @@
EffectGraphVisitor for_true(owner());
EffectGraphVisitor for_false(owner());
- if (function.IsAsyncClosure()) {
+ if (function.IsAsyncClosure() || function.IsAsyncGenClosure()) {
LocalVariable* result_param =
top_scope->LookupVariable(Symbols::AsyncOperationParam(), false);
LocalVariable* error_param =
@@ -3948,7 +3954,7 @@
LocalVariable* stack_trace_param =
top_scope->LookupVariable(Symbols::AsyncOperationStackTraceParam(),
false);
- for_true.BuildAwaitJump(old_context,
+ for_true.BuildAsyncJump(old_context,
result_param,
error_param,
stack_trace_param,
@@ -3958,10 +3964,10 @@
ASSERT(function.IsSyncGenClosure());
LocalVariable* iterator_param =
top_scope->LookupVariable(Symbols::IteratorParameter(), false);
- for_true.BuildYieldJump(old_context,
- iterator_param,
- (*owner()->await_levels())[i],
- (*owner()->await_joins())[i]);
+ for_true.BuildSyncYieldJump(old_context,
+ iterator_param,
+ (*owner()->await_levels())[i],
+ (*owner()->await_joins())[i]);
}
Join(for_test, for_true, for_false);
@@ -4093,10 +4099,10 @@
if (for_finally.is_open()) {
// Rethrow the exception. Manually build the graph for rethrow.
Value* exception = for_finally.Bind(
- for_finally.BuildLoadLocal(catch_block->exception_var()));
+ for_finally.BuildLoadLocal(catch_block->rethrow_exception_var()));
for_finally.PushArgument(exception);
Value* stacktrace = for_finally.Bind(
- for_finally.BuildLoadLocal(catch_block->stacktrace_var()));
+ for_finally.BuildLoadLocal(catch_block->rethrow_stacktrace_var()));
for_finally.PushArgument(stacktrace);
for_finally.AddInstruction(
new(I) ReThrowInstr(catch_block->token_pos(), catch_handler_index));
diff --git a/runtime/vm/flow_graph_builder.h b/runtime/vm/flow_graph_builder.h
index 4168459..9e8812d 100644
--- a/runtime/vm/flow_graph_builder.h
+++ b/runtime/vm/flow_graph_builder.h
@@ -467,12 +467,12 @@
void BuildLetTempExpressions(LetNode* node);
- void BuildYieldJump(LocalVariable* old_context,
- LocalVariable* iterator_param,
- const intptr_t old_ctx_level,
- JoinEntryInstr* target);
+ void BuildSyncYieldJump(LocalVariable* old_context,
+ LocalVariable* iterator_param,
+ const intptr_t old_ctx_level,
+ JoinEntryInstr* target);
- void BuildAwaitJump(LocalVariable* old_context,
+ void BuildAsyncJump(LocalVariable* old_context,
LocalVariable* continuation_result,
LocalVariable* continuation_error,
LocalVariable* continuation_stack_trace,
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index 6b1df12..d41a3b4 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -103,8 +103,7 @@
current_block_(NULL),
exception_handlers_list_(NULL),
pc_descriptors_list_(NULL),
- stackmap_table_builder_(
- is_optimizing ? new StackmapTableBuilder() : NULL),
+ stackmap_table_builder_(NULL),
block_info_(block_order_.length()),
deopt_infos_(),
static_calls_target_table_(GrowableObjectArray::ZoneHandle(
@@ -668,28 +667,34 @@
// This function must be in sync with FlowGraphCompiler::SaveLiveRegisters
// and FlowGraphCompiler::SlowPathEnvironmentFor.
+// See StackFrame::VisitObjectPointers for the details of how stack map is
+// interpreted.
void FlowGraphCompiler::RecordSafepoint(LocationSummary* locs) {
- if (is_optimizing()) {
+ if (is_optimizing() || locs->live_registers()->HasUntaggedValues()) {
+ const intptr_t spill_area_size = is_optimizing() ?
+ flow_graph_.graph_entry()->spill_slot_count() : 0;
+
RegisterSet* registers = locs->live_registers();
ASSERT(registers != NULL);
const intptr_t kFpuRegisterSpillFactor =
kFpuRegisterSize / kWordSize;
const intptr_t live_registers_size = registers->CpuRegisterCount() +
(registers->FpuRegisterCount() * kFpuRegisterSpillFactor);
+
BitmapBuilder* bitmap = locs->stack_bitmap();
- ASSERT(bitmap != NULL);
+
// An instruction may have two safepoints in deferred code. The
// call to RecordSafepoint has the side-effect of appending the live
// registers to the bitmap. This is why the second call to RecordSafepoint
// with the same instruction (and same location summary) sees a bitmap that
// is larger that StackSize(). It will never be larger than StackSize() +
// live_registers_size.
- ASSERT(bitmap->Length() <= (StackSize() + live_registers_size));
- // The first safepoint will grow the bitmap to be the size of StackSize()
- // but the second safepoint will truncate the bitmap and append the
- // live registers to it again. The bitmap produced by both calls will
- // be the same.
- bitmap->SetLength(StackSize());
+ ASSERT(bitmap->Length() <= (spill_area_size + live_registers_size));
+ // The first safepoint will grow the bitmap to be the size of
+ // spill_area_size but the second safepoint will truncate the bitmap and
+ // append the live registers to it again. The bitmap produced by both calls
+ // will be the same.
+ bitmap->SetLength(spill_area_size);
// Mark the bits in the stack map in the same order we push registers in
// slow path code (see FlowGraphCompiler::SaveLiveRegisters).
@@ -724,10 +729,10 @@
}
}
- intptr_t register_bit_count = bitmap->Length() - StackSize();
- stackmap_table_builder_->AddEntry(assembler()->CodeSize(),
- bitmap,
- register_bit_count);
+ intptr_t register_bit_count = bitmap->Length() - spill_area_size;
+ stackmap_table_builder()->AddEntry(assembler()->CodeSize(),
+ bitmap,
+ register_bit_count);
}
}
@@ -868,7 +873,6 @@
code.set_stackmaps(Object::null_array());
} else {
// Finalize the stack map array and add it to the code object.
- ASSERT(is_optimizing());
code.set_stackmaps(
Array::Handle(stackmap_table_builder_->FinalizeStackmaps(code)));
}
diff --git a/runtime/vm/flow_graph_compiler.h b/runtime/vm/flow_graph_compiler.h
index 6e9c0df..60bffbd 100644
--- a/runtime/vm/flow_graph_compiler.h
+++ b/runtime/vm/flow_graph_compiler.h
@@ -637,6 +637,13 @@
intptr_t GetOptimizationThreshold() const;
+ StackmapTableBuilder* stackmap_table_builder() {
+ if (stackmap_table_builder_ == NULL) {
+ stackmap_table_builder_ = new StackmapTableBuilder();
+ }
+ return stackmap_table_builder_;
+ }
+
Isolate* isolate_;
Assembler* assembler_;
const ParsedFunction& parsed_function_;
diff --git a/runtime/vm/flow_graph_compiler_arm.cc b/runtime/vm/flow_graph_compiler_arm.cc
index 9bfee14..b1bb19a 100644
--- a/runtime/vm/flow_graph_compiler_arm.cc
+++ b/runtime/vm/flow_graph_compiler_arm.cc
@@ -1222,10 +1222,22 @@
// Used by CodePatcher; so must be constant across all code in an isolate.
int32_t size = 3 * Instr::kInstrSize;
#if defined(DEBUG)
- size += 35 * Instr::kInstrSize;
+ if (TargetCPUFeatures::arm_version() == ARMv7) {
+ size += 35 * Instr::kInstrSize;
+ } else {
+ // To update this number for e.g. ARMv6, run a SIMARM build with
+ // --sim_use_armv6 on any Dart program.
+ size += 51 * Instr::kInstrSize;
+ }
#endif // DEBUG
if (VerifiedMemory::enabled()) {
- size += 20 * Instr::kInstrSize;
+ if (TargetCPUFeatures::arm_version() == ARMv7) {
+ size += 20 * Instr::kInstrSize;
+ } else {
+ // To update this number for e.g. ARMv6, run a SIMARM build with
+ // --sim_use_armv6 --verified_mem on any Dart program.
+ size += 28 * Instr::kInstrSize;
+ }
}
return size;
}
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index 7b98144..4170d94 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -987,6 +987,8 @@
}
+// NOTE: If the entry code shape changes, ReturnAddressLocator in profiler.cc
+// needs to be updated to match.
void FlowGraphCompiler::EmitFrameEntry() {
const Function& function = parsed_function().function();
if (CanOptimizeFunction() &&
@@ -1085,7 +1087,7 @@
// don't use it.
__ movl(CTX, Address(EBP, closure_parameter->index() * kWordSize));
__ movl(CTX, FieldAddress(CTX, Closure::context_offset()));
-#ifdef dEBUG
+#ifdef DEBUG
Label ok;
__ LoadClassId(EBX, CTX);
__ cmpl(EBX, Immediate(kContextCid));
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index 11c6bfc..b10a119 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -977,6 +977,8 @@
}
+// NOTE: If the entry code shape changes, ReturnAddressLocator in profiler.cc
+// needs to be updated to match.
void FlowGraphCompiler::EmitFrameEntry() {
ASSERT(Assembler::EntryPointToPcMarkerOffset() == 0);
@@ -1092,7 +1094,7 @@
LocalVariable* closure_parameter = scope->VariableAt(0);
__ movq(CTX, Address(RBP, closure_parameter->index() * kWordSize));
__ movq(CTX, FieldAddress(CTX, Closure::context_offset()));
-#ifdef dEBUG
+#ifdef DEBUG
Label ok;
__ LoadClassId(RAX, CTX);
__ cmpq(RAX, Immediate(kContextCid));
diff --git a/runtime/vm/flow_graph_range_analysis.cc b/runtime/vm/flow_graph_range_analysis.cc
index 738c294..0a0ef94 100644
--- a/runtime/vm/flow_graph_range_analysis.cc
+++ b/runtime/vm/flow_graph_range_analysis.cc
@@ -2541,12 +2541,22 @@
((left_max == 0) || (right_max <= kMaxInt64 / left_max))) {
// Product of left and right max values stays in 64 bit range.
const int64_t mul_max = left_max * right_max;
- const int64_t r_min =
- OnlyPositiveOrZero(*left_range, *right_range) ? 0 : -mul_max;
- *result_min = RangeBoundary::FromConstant(r_min);
- const int64_t r_max =
- OnlyNegativeOrZero(*left_range, *right_range) ? 0 : mul_max;
- *result_max = RangeBoundary::FromConstant(r_max);
+ if (OnlyPositiveOrZero(*left_range, *right_range) ||
+ OnlyNegativeOrZero(*left_range, *right_range)) {
+ // If both ranges are of the same sign then the range of the result
+ // is positive and is between multiplications of absolute minimums
+ // and absolute maximums.
+ const int64_t mul_min =
+ ConstantAbsMin(left_range) * ConstantAbsMin(right_range);
+ *result_min = RangeBoundary::FromConstant(mul_min);
+ *result_max = RangeBoundary::FromConstant(mul_max);
+ } else {
+ // If ranges have mixed signs then use conservative approximation:
+ // absolute value of the result is less or equal to multiplication
+ // of absolute maximums.
+ *result_min = RangeBoundary::FromConstant(-mul_max);
+ *result_max = RangeBoundary::FromConstant(mul_max);
+ }
return;
}
@@ -2586,6 +2596,17 @@
}
+// Return the minimum absolute value included in range.
+int64_t Range::ConstantAbsMin(const Range* range) {
+ if (range == NULL) {
+ return 0;
+ }
+ const int64_t abs_min = Utils::Abs(Range::ConstantMin(range).ConstantValue());
+ const int64_t abs_max = Utils::Abs(Range::ConstantMax(range).ConstantValue());
+ return Utils::Minimum(abs_min, abs_max);
+}
+
+
void Range::BinaryOp(const Token::Kind op,
const Range* left_range,
const Range* right_range,
diff --git a/runtime/vm/flow_graph_range_analysis.h b/runtime/vm/flow_graph_range_analysis.h
index 948a2ba..5ee9f2f 100644
--- a/runtime/vm/flow_graph_range_analysis.h
+++ b/runtime/vm/flow_graph_range_analysis.h
@@ -473,6 +473,9 @@
// Return the maximum absolute value included in range.
static int64_t ConstantAbsMax(const Range* range);
+ // Return the minimum absolute value included in range.
+ static int64_t ConstantAbsMin(const Range* range);
+
static void BinaryOp(const Token::Kind op,
const Range* left_range,
const Range* right_range,
diff --git a/runtime/vm/flow_graph_type_propagator.cc b/runtime/vm/flow_graph_type_propagator.cc
index bc052f6..b17c86a 100644
--- a/runtime/vm/flow_graph_type_propagator.cc
+++ b/runtime/vm/flow_graph_type_propagator.cc
@@ -182,6 +182,12 @@
}
if (!CheckClassInstr::IsImmutableClassId(cid)) {
+ if ((cid == kOneByteStringCid) || (cid == kTwoByteStringCid)) {
+ SetTypeOf(defn, ZoneCompileType::Wrap(CompileType::String()));
+ PropagateRecursive((compare->kind() == Token::kEQ_STRICT) ?
+ branch->true_successor() : branch->false_successor());
+ RollbackTo(rollback_point);
+ }
return;
}
diff --git a/runtime/vm/instructions_arm.cc b/runtime/vm/instructions_arm.cc
index 6d9995d..2d14ba3 100644
--- a/runtime/vm/instructions_arm.cc
+++ b/runtime/vm/instructions_arm.cc
@@ -344,6 +344,30 @@
}
}
+
+ReturnPattern::ReturnPattern(uword pc)
+ : pc_(pc) {
+}
+
+
+bool ReturnPattern::IsValid() const {
+ Instr* bx_lr = Instr::At(pc_);
+ const int32_t B4 = 1 << 4;
+ const int32_t B21 = 1 << 21;
+ const int32_t B24 = 1 << 24;
+ int32_t instruction = (static_cast<int32_t>(AL) << kConditionShift) |
+ B24 | B21 | (0xfff << 8) | B4 |
+ (static_cast<int32_t>(LR) << kRmShift);
+ const ARMVersion version = TargetCPUFeatures::arm_version();
+ if ((version == ARMv5TE) || (version == ARMv6)) {
+ return bx_lr->InstructionBits() == instruction;
+ } else {
+ ASSERT(version == ARMv7);
+ return bx_lr->InstructionBits() == instruction;
+ }
+ return false;
+}
+
} // namespace dart
#endif // defined TARGET_ARCH_ARM
diff --git a/runtime/vm/instructions_arm.h b/runtime/vm/instructions_arm.h
index b802fa6..b36d04f 100644
--- a/runtime/vm/instructions_arm.h
+++ b/runtime/vm/instructions_arm.h
@@ -96,6 +96,24 @@
DISALLOW_COPY_AND_ASSIGN(JumpPattern);
};
+
+class ReturnPattern : public ValueObject {
+ public:
+ explicit ReturnPattern(uword pc);
+
+ // bx_lr = 1.
+ static const int kLengthInBytes = 1 * Instr::kInstrSize;
+
+ int pattern_length_in_bytes() const {
+ return kLengthInBytes;
+ }
+
+ bool IsValid() const;
+
+ private:
+ const uword pc_;
+};
+
} // namespace dart
#endif // VM_INSTRUCTIONS_ARM_H_
diff --git a/runtime/vm/instructions_arm64.cc b/runtime/vm/instructions_arm64.cc
index de513c7..aea111f 100644
--- a/runtime/vm/instructions_arm64.cc
+++ b/runtime/vm/instructions_arm64.cc
@@ -365,6 +365,19 @@
CPU::FlushICache(pc_, 4 * Instr::kInstrSize);
}
+
+ReturnPattern::ReturnPattern(uword pc)
+ : pc_(pc) {
+}
+
+
+bool ReturnPattern::IsValid() const {
+ Instr* bx_lr = Instr::At(pc_);
+ const Register crn = ConcreteRegister(LR);
+ const int32_t instruction = RET | (static_cast<int32_t>(crn) << kRnShift);
+ return bx_lr->InstructionBits() == instruction;
+}
+
} // namespace dart
#endif // defined TARGET_ARCH_ARM64
diff --git a/runtime/vm/instructions_arm64.h b/runtime/vm/instructions_arm64.h
index e6c772e..12584fe 100644
--- a/runtime/vm/instructions_arm64.h
+++ b/runtime/vm/instructions_arm64.h
@@ -105,6 +105,24 @@
DISALLOW_COPY_AND_ASSIGN(JumpPattern);
};
+
+class ReturnPattern : public ValueObject {
+ public:
+ explicit ReturnPattern(uword pc);
+
+ // bx_lr = 1.
+ static const int kLengthInBytes = 1 * Instr::kInstrSize;
+
+ int pattern_length_in_bytes() const {
+ return kLengthInBytes;
+ }
+
+ bool IsValid() const;
+
+ private:
+ const uword pc_;
+};
+
} // namespace dart
#endif // VM_INSTRUCTIONS_ARM64_H_
diff --git a/runtime/vm/instructions_ia32.cc b/runtime/vm/instructions_ia32.cc
index 0b6a57b..4eb0c3c 100644
--- a/runtime/vm/instructions_ia32.cc
+++ b/runtime/vm/instructions_ia32.cc
@@ -49,6 +49,12 @@
}
+const int* ReturnPattern::pattern() const {
+ static const int kReturnPattern[kLengthInBytes] = { 0xC3 };
+ return kReturnPattern;
+}
+
+
} // namespace dart
#endif // defined TARGET_ARCH_IA32
diff --git a/runtime/vm/instructions_ia32.h b/runtime/vm/instructions_ia32.h
index 365ac26..7f9f188 100644
--- a/runtime/vm/instructions_ia32.h
+++ b/runtime/vm/instructions_ia32.h
@@ -95,6 +95,17 @@
};
+class ReturnPattern : public InstructionPattern {
+ public:
+ explicit ReturnPattern(uword pc) : InstructionPattern(pc) {}
+
+ virtual const int* pattern() const;
+ virtual int pattern_length_in_bytes() const { return kLengthInBytes; }
+
+ private:
+ static const int kLengthInBytes = 1;
+};
+
} // namespace dart
#endif // VM_INSTRUCTIONS_IA32_H_
diff --git a/runtime/vm/instructions_mips.cc b/runtime/vm/instructions_mips.cc
index 533d8e4..3e8cbe8 100644
--- a/runtime/vm/instructions_mips.cc
+++ b/runtime/vm/instructions_mips.cc
@@ -227,6 +227,19 @@
ori->SetInstructionBits((ori_bits & 0xffff0000) | target_lo);
}
+
+ReturnPattern::ReturnPattern(uword pc)
+ : pc_(pc) {
+}
+
+
+bool ReturnPattern::IsValid() const {
+ Instr* jr = Instr::At(pc_);
+ return (jr->OpcodeField() == SPECIAL) &&
+ (jr->FunctionField() == JR) &&
+ (jr->RsField() == RA);
+}
+
} // namespace dart
#endif // defined TARGET_ARCH_MIPS
diff --git a/runtime/vm/instructions_mips.h b/runtime/vm/instructions_mips.h
index b4864b7..2a9e2e1 100644
--- a/runtime/vm/instructions_mips.h
+++ b/runtime/vm/instructions_mips.h
@@ -99,6 +99,24 @@
DISALLOW_COPY_AND_ASSIGN(JumpPattern);
};
+
+class ReturnPattern : public ValueObject {
+ public:
+ explicit ReturnPattern(uword pc);
+
+ // jr(RA) = 1
+ static const int kLengthInBytes = 1 * Instr::kInstrSize;
+
+ int pattern_length_in_bytes() const {
+ return kLengthInBytes;
+ }
+
+ bool IsValid() const;
+
+ private:
+ const uword pc_;
+};
+
} // namespace dart
#endif // VM_INSTRUCTIONS_MIPS_H_
diff --git a/runtime/vm/instructions_x64.cc b/runtime/vm/instructions_x64.cc
index a531e66..f4a0632 100644
--- a/runtime/vm/instructions_x64.cc
+++ b/runtime/vm/instructions_x64.cc
@@ -73,6 +73,12 @@
return kCallPattern;
}
+
+const int* ReturnPattern::pattern() const {
+ static const int kReturnPattern[kLengthInBytes] = { 0xC3 };
+ return kReturnPattern;
+}
+
} // namespace dart
#endif // defined TARGET_ARCH_X64
diff --git a/runtime/vm/instructions_x64.h b/runtime/vm/instructions_x64.h
index 9e02313..0c0dc53 100644
--- a/runtime/vm/instructions_x64.h
+++ b/runtime/vm/instructions_x64.h
@@ -101,6 +101,17 @@
};
+class ReturnPattern : public InstructionPattern {
+ public:
+ explicit ReturnPattern(uword pc) : InstructionPattern(pc) {}
+
+ virtual const int* pattern() const;
+ virtual int pattern_length_in_bytes() const { return kLengthInBytes; }
+
+ private:
+ static const int kLengthInBytes = 1;
+};
+
} // namespace dart
#endif // VM_INSTRUCTIONS_X64_H_
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index 9fd75a2..858c441 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -2273,6 +2273,7 @@
ASSERT(Type::Handle(Type::Number()).IsMoreSpecificThan(
Type::Handle(Type::Number()), NULL));
return type->ToAbstractType()->IsDynamicType()
+ || type->ToAbstractType()->IsObjectType()
|| type->ToAbstractType()->IsTypeParameter()
|| type->IsMoreSpecificThan(Type::Handle(Type::Number()));
}
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index f908b26..5b26207 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -20,6 +20,8 @@
#include "vm/message_handler.h"
#include "vm/object_id_ring.h"
#include "vm/object_store.h"
+#include "vm/object.h"
+#include "vm/os_thread.h"
#include "vm/parser.h"
#include "vm/port.h"
#include "vm/profiler.h"
@@ -31,7 +33,6 @@
#include "vm/stub_code.h"
#include "vm/symbols.h"
#include "vm/tags.h"
-#include "vm/os_thread.h"
#include "vm/thread_interrupter.h"
#include "vm/timer.h"
#include "vm/visitor.h"
@@ -493,6 +494,7 @@
tag_table_(GrowableObjectArray::null()),
current_tag_(UserTag::null()),
default_tag_(UserTag::null()),
+ deoptimized_code_array_(GrowableObjectArray::null()),
metrics_list_head_(NULL),
next_(NULL),
REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_INITIALIZERS)
@@ -1251,6 +1253,10 @@
// Visit the tag table which is stored in the isolate.
visitor->VisitPointer(reinterpret_cast<RawObject**>(&tag_table_));
+ // Visit the deoptimized code array which is stored in the isolate.
+ visitor->VisitPointer(
+ reinterpret_cast<RawObject**>(&deoptimized_code_array_));
+
// Visit objects in the debugger.
debugger()->VisitObjectPointers(visitor);
@@ -1448,6 +1454,25 @@
}
+void Isolate::set_deoptimized_code_array(const GrowableObjectArray& value) {
+ deoptimized_code_array_ = value.raw();
+}
+
+
+void Isolate::TrackDeoptimizedCode(const Code& code) {
+ ASSERT(!code.IsNull());
+ const GrowableObjectArray& deoptimized_code =
+ GrowableObjectArray::Handle(deoptimized_code_array());
+ if (deoptimized_code.IsNull()) {
+ // Not tracking deoptimized code.
+ return;
+ }
+ // TODO(johnmccutchan): Scan this array and the isolate's profile before
+ // old space GC and remove the keep_code flag.
+ deoptimized_code.Add(code);
+}
+
+
void Isolate::VisitIsolates(IsolateVisitor* visitor) {
if (visitor == NULL) {
return;
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index c6bfef0..5d61b05 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -616,6 +616,12 @@
metrics_list_head_ = metric;
}
+ RawGrowableObjectArray* deoptimized_code_array() const {
+ return deoptimized_code_array_;
+ }
+ void set_deoptimized_code_array(const GrowableObjectArray& value);
+ void TrackDeoptimizedCode(const Code& code);
+
#if defined(DEBUG)
#define REUSABLE_HANDLE_SCOPE_ACCESSORS(object) \
void set_reusable_##object##_handle_scope_active(bool value) { \
@@ -729,6 +735,7 @@
RawGrowableObjectArray* tag_table_;
RawUserTag* current_tag_;
RawUserTag* default_tag_;
+ RawGrowableObjectArray* deoptimized_code_array_;
Metric* metrics_list_head_;
diff --git a/runtime/vm/locations.h b/runtime/vm/locations.h
index d57b2fd..a2e8be3 100644
--- a/runtime/vm/locations.h
+++ b/runtime/vm/locations.h
@@ -459,6 +459,8 @@
void Remove(T value) { data_ &= ~ToMask(value); }
+ bool IsEmpty() const { return data_ != 0; }
+
intptr_t data() const { return data_; }
private:
@@ -535,6 +537,10 @@
untagged_cpu_registers_.Add(loc.reg());
}
+ bool HasUntaggedValues() const {
+ return !untagged_cpu_registers_.IsEmpty() || !fpu_registers_.IsEmpty();
+ }
+
bool IsTagged(Register reg) const {
return !untagged_cpu_registers_.Contains(reg);
}
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index b706fdd..7914cef 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -2358,6 +2358,11 @@
}
+bool Class::IsGeneric() const {
+ return NumTypeParameters() != 0;
+}
+
+
intptr_t Class::NumTypeArguments() const {
// Return cached value if already calculated.
if (num_type_arguments() != kUnknownNumTypeArguments) {
@@ -5093,7 +5098,8 @@
void Function::SwitchToUnoptimizedCode() const {
ASSERT(HasOptimizedCode());
- const Code& current_code = Code::Handle(CurrentCode());
+ Isolate* isolate = Isolate::Current();
+ const Code& current_code = Code::Handle(isolate, CurrentCode());
if (FLAG_trace_disabling_optimized_code) {
OS::Print("Disabling optimized code: '%s' entry: %#" Px "\n",
@@ -5103,8 +5109,9 @@
// Patch entry of the optimized code.
CodePatcher::PatchEntry(current_code);
// Use previously compiled unoptimized code.
- AttachCode(Code::Handle(unoptimized_code()));
- CodePatcher::RestoreEntry(Code::Handle(unoptimized_code()));
+ AttachCode(Code::Handle(isolate, unoptimized_code()));
+ CodePatcher::RestoreEntry(Code::Handle(isolate, unoptimized_code()));
+ isolate->TrackDeoptimizedCode(current_code);
}
@@ -12507,6 +12514,24 @@
}
+bool Code::IsAllocationStubCode() const {
+ const Object& obj = Object::Handle(owner());
+ return obj.IsClass();
+}
+
+
+bool Code::IsStubCode() const {
+ const Object& obj = Object::Handle(owner());
+ return obj.IsNull();
+}
+
+
+bool Code::IsFunctionCode() const {
+ const Object& obj = Object::Handle(owner());
+ return obj.IsFunction();
+}
+
+
void Code::PrintJSONImpl(JSONStream* stream, bool ref) const {
JSONObject jsobj(stream);
AddTypeProperties(&jsobj, "Code", JSONType(), ref);
@@ -12516,11 +12541,16 @@
jsobj.AddPropertyF("end", "%" Px "", EntryPoint() + Size());
jsobj.AddProperty("optimized", is_optimized());
jsobj.AddProperty("alive", is_alive());
- jsobj.AddProperty("kind", "Dart");
+ const Object& obj = Object::Handle(owner());
+ const bool is_stub = IsStubCode() || IsAllocationStubCode();
+ if (is_stub) {
+ jsobj.AddProperty("kind", "Stub");
+ } else {
+ jsobj.AddProperty("kind", "Dart");
+ }
const String& user_name = String::Handle(PrettyName());
const String& vm_name = String::Handle(Name());
AddNameProperties(&jsobj, user_name, vm_name);
- const Object& obj = Object::Handle(owner());
if (obj.IsFunction()) {
jsobj.AddProperty("function", obj);
} else {
@@ -12528,7 +12558,6 @@
JSONObject func(&jsobj, "function");
func.AddProperty("type", "@Function");
func.AddProperty("kind", "Stub");
- func.AddPropertyF("id", "functions/stub-%" Pd "", EntryPoint());
func.AddProperty("name", user_name.ToCString());
AddNameProperties(&func, user_name, vm_name);
}
@@ -12550,6 +12579,47 @@
JSONObject desc(&jsobj, "descriptors");
descriptors.PrintToJSONObject(&desc, false);
}
+ const Array& inlined_function_table = Array::Handle(inlined_id_to_function());
+ if (!inlined_function_table.IsNull()) {
+ JSONArray inlined_functions(&jsobj, "inlinedFunctions");
+ Function& function = Function::Handle();
+ for (intptr_t i = 0; i < inlined_function_table.Length(); i++) {
+ function ^= inlined_function_table.At(i);
+ ASSERT(!function.IsNull());
+ inlined_functions.AddValue(function);
+ }
+ }
+ const Array& intervals = Array::Handle(inlined_intervals());
+ if (!intervals.IsNull()) {
+ Smi& start = Smi::Handle();
+ Smi& end = Smi::Handle();
+ Smi& temp_smi = Smi::Handle();
+ JSONArray inline_intervals(&jsobj, "inlinedIntervals");
+ for (intptr_t i = 0; i < intervals.Length() - Code::kInlIntNumEntries;
+ i += Code::kInlIntNumEntries) {
+ start ^= intervals.At(i + Code::kInlIntStart);
+ if (start.IsNull()) {
+ continue;
+ }
+ end ^= intervals.At(i + Code::kInlIntNumEntries + Code::kInlIntStart);
+
+ // Format: [start, end, inline functions...]
+ JSONArray inline_interval(&inline_intervals);
+ inline_interval.AddValue(start.Value());
+ inline_interval.AddValue(end.Value());
+
+ temp_smi ^= intervals.At(i + Code::kInlIntInliningId);
+ intptr_t inlining_id = temp_smi.Value();
+ ASSERT(inlining_id >= 0);
+ temp_smi ^= intervals.At(i + Code::kInlIntCallerId);
+ intptr_t caller_id = temp_smi.Value();
+ while (inlining_id >= 0) {
+ inline_interval.AddValue(inlining_id);
+ inlining_id = caller_id;
+ caller_id = GetCallerId(inlining_id);
+ }
+ }
+ }
}
@@ -12592,8 +12662,7 @@
return map->raw(); // We found a stack map for this frame.
}
}
- // If the code has stackmaps, it must have them for all safepoints.
- UNREACHABLE();
+ ASSERT(!is_optimized());
return Stackmap::null();
}
@@ -19824,7 +19893,7 @@
}
-const intptr_t TypedData::element_size[] = {
+const intptr_t TypedData::element_size_table[TypedData::kNumElementSizes] = {
1, // kTypedDataInt8ArrayCid.
1, // kTypedDataUint8ArrayCid.
1, // kTypedDataUint8ClampedArrayCid.
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index f4d67360..806dbe3 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -1001,6 +1001,8 @@
// not overlapping with the type arguments of the super class of this class.
intptr_t NumOwnTypeArguments() const;
+ bool IsGeneric() const;
+
// If this class is parameterized, each instance has a type_arguments field.
static const intptr_t kNoTypeArguments = -1;
intptr_t type_arguments_field_offset() const {
@@ -2172,6 +2174,20 @@
Function::Handle(parent_function()).IsSyncGenerator();
}
+ bool IsGeneratorClosure() const {
+ return is_generated_body() &&
+ Function::Handle(parent_function()).IsGenerator();
+ }
+
+ bool IsAsyncGenerator() const {
+ return modifier() == RawFunction::kAsyncGen;
+ }
+
+ bool IsAsyncGenClosure() const {
+ return is_generated_body() &&
+ Function::Handle(parent_function()).IsAsyncGenerator();
+ }
+
bool IsAsyncOrGenerator() const {
return modifier() != RawFunction::kNoModifier;
}
@@ -4182,6 +4198,10 @@
StoreNonPointer(&raw_ptr()->lazy_deopt_pc_offset_, pc);
}
+ bool IsAllocationStubCode() const;
+ bool IsStubCode() const;
+ bool IsFunctionCode() const;
+
private:
void set_state_bits(intptr_t bits) const;
@@ -6949,7 +6969,7 @@
static intptr_t ElementSizeInBytes(intptr_t class_id) {
ASSERT(RawObject::IsTypedDataClassId(class_id));
- return element_size[ElementType(class_id)];
+ return element_size(ElementType(class_id));
}
static TypedDataElementType ElementType(intptr_t class_id) {
@@ -7030,7 +7050,15 @@
}
private:
- static const intptr_t element_size[];
+ static intptr_t element_size(intptr_t index) {
+ ASSERT(0 <= index && index < kNumElementSizes);
+ intptr_t size = element_size_table[index];
+ ASSERT(size != 0);
+ return size;
+ }
+ static const intptr_t kNumElementSizes =
+ kTypedDataFloat64x2ArrayCid - kTypedDataInt8ArrayCid + 1;
+ static const intptr_t element_size_table[kNumElementSizes];
FINAL_HEAP_OBJECT_IMPLEMENTATION(TypedData, Instance);
friend class Class;
@@ -7107,7 +7135,7 @@
static intptr_t ElementSizeInBytes(intptr_t class_id) {
ASSERT(RawObject::IsExternalTypedDataClassId(class_id));
- return TypedData::element_size[ElementType(class_id)];
+ return TypedData::element_size(ElementType(class_id));
}
static TypedDataElementType ElementType(intptr_t class_id) {
@@ -7200,8 +7228,7 @@
static intptr_t ElementSizeInBytes(intptr_t class_id) {
ASSERT(RawObject::IsTypedDataViewClassId(class_id));
return (class_id == kByteDataViewCid) ?
- TypedData::element_size[kTypedDataInt8ArrayCid] :
- TypedData::element_size[class_id - kTypedDataInt8ArrayViewCid];
+ 1 : TypedData::element_size(class_id - kTypedDataInt8ArrayViewCid);
}
private:
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index dfa44c5..7fd5622 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -152,7 +152,7 @@
}
-void ParsedFunction::EnsureFinallyReturnTemp() {
+void ParsedFunction::EnsureFinallyReturnTemp(bool is_async) {
if (!has_finally_return_temp_var()) {
LocalVariable* temp = new(Z) LocalVariable(
function_.token_pos(),
@@ -160,6 +160,9 @@
Type::ZoneHandle(Z, Type::DynamicType()));
ASSERT(temp != NULL);
temp->set_is_final();
+ if (is_async) {
+ temp->set_is_captured();
+ }
set_finally_return_temp_var(temp);
}
ASSERT(has_finally_return_temp_var());
@@ -3036,13 +3039,8 @@
intptr_t saved_try_index = last_used_try_index_;
last_used_try_index_ = 0;
- // In case of nested async functions we also need to save the currently saved
- // try context, the corresponding stack variable, and the scope where
+ // In case of nested async functions we also need to save the scope where
// temporaries are added.
- LocalVariable* saved_saved_try_ctx = parsed_function()->saved_try_ctx();
- const String& saved_async_saved_try_ctx_name =
- String::Handle(Z, parsed_function()->async_saved_try_ctx_name());
- parsed_function()->reset_saved_try_ctx_vars();
LocalScope* saved_async_temp_scope = async_temp_scope_;
if (func.IsGenerativeConstructor()) {
@@ -3115,6 +3113,20 @@
false,
&discarded_params);
}
+ } else if (func.IsAsyncGenClosure()) {
+ AddAsyncGenClosureParameters(¶ms);
+ SetupDefaultsForOptionalParams(¶ms, default_parameter_values);
+ AddFormalParamsToScope(¶ms, current_block_->scope);
+ ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved());
+ ASSERT(func.NumParameters() == params.parameters->length());
+ if (!Function::Handle(func.parent_function()).IsGetterFunction()) {
+ // Parse and discard any formal parameters. They are accessed as
+ // context variables.
+ ParamList discarded_params;
+ ParseFormalParameterList(allow_explicit_default_values,
+ false,
+ &discarded_params);
+ }
} else {
ParseFormalParameterList(allow_explicit_default_values, false, ¶ms);
@@ -3183,6 +3195,13 @@
// The closure containing the body of a sync generator is debuggable.
ASSERT(func.is_debuggable());
async_temp_scope_ = current_block_->scope;
+ } else if (func.IsAsyncGenerator()) {
+ func.set_is_debuggable(false);
+ generated_body_closure = OpenAsyncGeneratorFunction(func.token_pos());
+ } else if (func.IsAsyncGenClosure()) {
+ // The closure containing the body of an async* function is debuggable.
+ ASSERT(func.is_debuggable());
+ OpenAsyncGeneratorClosure();
}
BoolScope allow_await(&this->await_is_keyword_,
@@ -3260,14 +3279,16 @@
generated_body_closure.set_end_token_pos(end_token_pos);
} else if (func.IsSyncGenClosure()) {
body->scope()->RecursivelyCaptureAllVariables();
+ } else if (func.IsAsyncGenerator()) {
+ body = CloseAsyncGeneratorFunction(generated_body_closure, body);
+ generated_body_closure.set_end_token_pos(end_token_pos);
+ } else if (func.IsAsyncGenClosure()) {
+ body = CloseAsyncGeneratorClosure(body);
}
current_block_->statements->Add(body);
innermost_function_ = saved_innermost_function.raw();
last_used_try_index_ = saved_try_index;
async_temp_scope_ = saved_async_temp_scope;
- parsed_function()->set_saved_try_ctx(saved_saved_try_ctx);
- parsed_function()->set_async_saved_try_ctx_name(
- saved_async_saved_try_ctx_name);
return CloseBlock();
}
@@ -5260,7 +5281,10 @@
if (CurrentLiteral()->raw() == Symbols::Async().raw()) {
ConsumeToken();
if (CurrentToken() == Token::kMUL) {
- ReportError("async* generator functions are not yet supported");
+ const bool enableAsyncStar = true;
+ if (!enableAsyncStar) {
+ ReportError("async* generator functions are not yet supported");
+ }
ConsumeToken();
return RawFunction::kAsyncGen;
} else {
@@ -5951,11 +5975,25 @@
}
-SequenceNode* Parser::CloseAsyncTryBlock(SequenceNode* try_block) {
- try_blocks_list_->enter_catch();
+SequenceNode* Parser::CloseAsyncGeneratorTryBlock(SequenceNode *body) {
+ TRACE_PARSER("CloseAsyncGeneratorTryBlock");
+ // The generated try-catch-finally that wraps the async generator function
+ // body is the outermost try statement.
+ ASSERT(try_blocks_list_ != NULL);
+ ASSERT(try_blocks_list_->outer_try_block() == NULL);
+ // We only get here when parsing an async generator body.
+ ASSERT(innermost_function().IsAsyncGenClosure());
- OpenBlock();
- OpenBlock();
+ const intptr_t try_end_pos = innermost_function().end_token_pos();
+
+ // The try-block (closure body code) has been parsed. We are now
+ // generating the code for the catch block.
+ LocalScope* try_scope = current_block_->scope;
+ try_blocks_list_->enter_catch();
+ OpenBlock(); // Catch handler list.
+ OpenBlock(); // Catch block.
+
+ // Add the exception and stack trace parameters to the scope.
const AbstractType& dynamic_type =
AbstractType::ZoneHandle(Z, Type::DynamicType());
CatchParamDesc exception_param;
@@ -5970,12 +6008,14 @@
AddCatchParamsToScope(
&exception_param, &stack_trace_param, current_block_->scope);
- LocalVariable* context_var = current_block_->scope->LookupVariable(
- Symbols::SavedTryContextVar(), false);
+ // Generate code to save the exception object and stack trace
+ // in local variables.
+ LocalVariable* context_var = try_scope->LocalLookupVariable(
+ Symbols::SavedTryContextVar());
ASSERT(context_var != NULL);
- LocalVariable* exception_var = current_block_->scope->LookupVariable(
- Symbols::ExceptionVar(), false);
+ LocalVariable* exception_var = try_scope->LocalLookupVariable(
+ Symbols::ExceptionVar());
ASSERT(exception_var != NULL);
if (exception_param.var != NULL) {
// Generate code to load the exception object (:exception_var) into
@@ -5987,7 +6027,7 @@
}
LocalVariable* stack_trace_var =
- current_block_->scope->LookupVariable(Symbols::StackTraceVar(), false);
+ try_scope->LocalLookupVariable(Symbols::StackTraceVar());
ASSERT(stack_trace_var != NULL);
if (stack_trace_param.var != NULL) {
// A stack trace variable is specified in this block, so generate code
@@ -5998,30 +6038,172 @@
stack_trace_param.var,
new(Z) LoadLocalNode(Scanner::kNoSourcePos, stack_trace_var)));
}
+ LocalVariable* saved_exception_var = try_scope->LocalLookupVariable(
+ Symbols::SavedExceptionVar());
+ LocalVariable* saved_stack_trace_var = try_scope->LocalLookupVariable(
+ Symbols::SavedStackTraceVar());
+ SaveExceptionAndStacktrace(current_block_->statements,
+ exception_var,
+ stack_trace_var,
+ saved_exception_var,
+ saved_stack_trace_var);
- AddSavedExceptionAndStacktraceToScope(
- exception_var, stack_trace_var, current_block_->scope);
+ // Catch block: add the error to the stream.
+ // :controller.AddError(:exception, :stack_trace);
+ // return; // The finally block will close the stream.
+ LocalVariable* controller =
+ current_block_->scope->LookupVariable(Symbols::Controller(), false);
+ ASSERT(controller != NULL);
+ ArgumentListNode* args =
+ new(Z) ArgumentListNode(Scanner::kNoSourcePos);
+ args->Add(new(Z) LoadLocalNode(Scanner::kNoSourcePos, exception_param.var));
+ args->Add(new(Z) LoadLocalNode(Scanner::kNoSourcePos, stack_trace_param.var));
+ current_block_->statements->Add(
+ new(Z) InstanceCallNode(try_end_pos,
+ new(Z) LoadLocalNode(Scanner::kNoSourcePos, controller),
+ Symbols::AddError(),
+ args));
+ ReturnNode* return_node = new(Z) ReturnNode(Scanner::kNoSourcePos);
+ AddNodeForFinallyInlining(return_node);
+ current_block_->statements->Add(return_node);
+ AstNode* catch_block = CloseBlock();
+ current_block_->statements->Add(catch_block);
+ SequenceNode* catch_handler_list = CloseBlock();
+ TryBlocks* try_block = PopTryBlock();
+ ASSERT(try_blocks_list_ == NULL); // We popped the outermost try block.
+
+ // Finally block: closing the stream and returning. (Note: the return
+ // is necessary otherwise the back-end will append a rethrow of the
+ // current exception.)
+ // :controller.close();
+ // return;
+ // We need to inline this code in all recorded exit points.
+ intptr_t node_index = 0;
+ SequenceNode* finally_clause = NULL;
+ do {
+ OpenBlock();
+ ArgumentListNode* no_args =
+ new(Z) ArgumentListNode(Scanner::kNoSourcePos);
+ current_block_->statements->Add(
+ new(Z) InstanceCallNode(try_end_pos,
+ new(Z) LoadLocalNode(Scanner::kNoSourcePos, controller),
+ Symbols::Close(),
+ no_args));
+
+ ReturnNode* return_node = new(Z) ReturnNode(Scanner::kNoSourcePos);
+ current_block_->statements->Add(return_node);
+
+ finally_clause = CloseBlock();
+ AstNode* node_to_inline = try_block->GetNodeToInlineFinally(node_index);
+ if (node_to_inline != NULL) {
+ InlinedFinallyNode* node =
+ new(Z) InlinedFinallyNode(try_end_pos,
+ finally_clause,
+ context_var,
+ // No outer try statement
+ CatchClauseNode::kInvalidTryIndex);
+ finally_clause = NULL;
+ AddFinallyBlockToNode(true, node_to_inline, node);
+ node_index++;
+ }
+ } while (finally_clause == NULL);
+
+ const GrowableObjectArray& handler_types =
+ GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
+ handler_types.Add(dynamic_type); // Catch block handles all exceptions.
+
+ CatchClauseNode* catch_clause = new(Z) CatchClauseNode(
+ Scanner::kNoSourcePos,
+ catch_handler_list,
+ Array::ZoneHandle(Z, Array::MakeArray(handler_types)),
+ context_var,
+ exception_var,
+ stack_trace_var,
+ saved_exception_var,
+ saved_stack_trace_var,
+ AllocateTryIndex(),
+ true);
+
+ const intptr_t try_index = try_block->try_index();
+
+ AstNode* try_catch_node =
+ new(Z) TryCatchNode(Scanner::kNoSourcePos,
+ body,
+ context_var,
+ catch_clause,
+ finally_clause,
+ try_index);
+ current_block_->statements->Add(try_catch_node);
+ return CloseBlock();
+}
+
+
+SequenceNode* Parser::CloseAsyncTryBlock(SequenceNode* try_block) {
+ // This is the outermost try-catch of the function.
ASSERT(try_blocks_list_ != NULL);
- ASSERT(innermost_function().IsAsyncClosure() ||
- innermost_function().IsAsyncFunction());
- if ((try_blocks_list_->outer_try_block() != NULL) &&
- (try_blocks_list_->outer_try_block()->try_block()
- ->scope->function_level() ==
- current_block_->scope->function_level())) {
- // We need to unchain three scope levels: catch clause, catch
- // parameters, and the general try block.
- RestoreSavedTryContext(
- current_block_->scope->parent()->parent()->parent(),
- try_blocks_list_->outer_try_block()->try_index(),
- current_block_->statements);
- } else {
- parsed_function()->reset_saved_try_ctx_vars();
+ ASSERT(try_blocks_list_->outer_try_block() == NULL);
+ ASSERT(innermost_function().IsAsyncClosure());
+ LocalScope* try_scope = current_block_->scope;
+
+ try_blocks_list_->enter_catch();
+
+ OpenBlock(); // Catch handler list.
+ OpenBlock(); // Catch block.
+ const AbstractType& dynamic_type =
+ AbstractType::ZoneHandle(Z, Type::DynamicType());
+ CatchParamDesc exception_param;
+ CatchParamDesc stack_trace_param;
+ exception_param.token_pos = Scanner::kNoSourcePos;
+ exception_param.type = &dynamic_type;
+ exception_param.name = &Symbols::ExceptionParameter();
+ stack_trace_param.token_pos = Scanner::kNoSourcePos;
+ stack_trace_param.type = &dynamic_type;
+ stack_trace_param.name = &Symbols::StackTraceParameter();
+
+ AddCatchParamsToScope(
+ &exception_param, &stack_trace_param, current_block_->scope);
+
+ LocalVariable* context_var = try_scope->LocalLookupVariable(
+ Symbols::SavedTryContextVar());
+ ASSERT(context_var != NULL);
+
+ LocalVariable* exception_var = try_scope->LocalLookupVariable(
+ Symbols::ExceptionVar());
+ if (exception_param.var != NULL) {
+ // Generate code to load the exception object (:exception_var) into
+ // the exception variable specified in this block.
+ ASSERT(exception_var != NULL);
+ current_block_->statements->Add(new(Z) StoreLocalNode(
+ Scanner::kNoSourcePos,
+ exception_param.var,
+ new(Z) LoadLocalNode(Scanner::kNoSourcePos, exception_var)));
}
- // Complete the async future with an error.
- // Since we control the catch block there is no need to generate a nested
- // if/then/else.
+ LocalVariable* stack_trace_var =
+ try_scope->LocalLookupVariable(Symbols::StackTraceVar());
+ if (stack_trace_param.var != NULL) {
+ // A stack trace variable is specified in this block, so generate code
+ // to load the stack trace object (:stack_trace_var) into the stack
+ // trace variable specified in this block.
+ ASSERT(stack_trace_var != NULL);
+ current_block_->statements->Add(new(Z) StoreLocalNode(
+ Scanner::kNoSourcePos,
+ stack_trace_param.var,
+ new(Z) LoadLocalNode(Scanner::kNoSourcePos, stack_trace_var)));
+ }
+ LocalVariable* saved_exception_var = try_scope->LocalLookupVariable(
+ Symbols::SavedExceptionVar());
+ LocalVariable* saved_stack_trace_var = try_scope->LocalLookupVariable(
+ Symbols::SavedStackTraceVar());
+ SaveExceptionAndStacktrace(current_block_->statements,
+ exception_var,
+ stack_trace_var,
+ saved_exception_var,
+ saved_stack_trace_var);
+
+ // Complete the async future with an error. This catch block executes
+ // unconditionally, there is no need to generate a type check for.
LocalVariable* async_completer = current_block_->scope->LookupVariable(
Symbols::AsyncCompleter(), false);
ASSERT(async_completer != NULL);
@@ -6059,6 +6241,8 @@
context_var,
exception_var,
stack_trace_var,
+ saved_exception_var,
+ saved_stack_trace_var,
CatchClauseNode::kInvalidTryIndex,
true);
AstNode* try_catch_node = new (Z) TryCatchNode(
@@ -6066,53 +6250,37 @@
try_block,
context_var,
catch_clause,
- NULL,
+ NULL, // No finally clause.
try_index);
current_block_->statements->Add(try_catch_node);
return CloseBlock();
}
+// Wrap the body of the async or async* closure in a try/catch block.
void Parser::OpenAsyncTryBlock() {
- // Manually wrapping the actual body into a try/catch block.
- LocalVariable* context_var =
- current_block_->scope->LocalLookupVariable(Symbols::SavedTryContextVar());
- if (context_var == NULL) {
- context_var = new(Z) LocalVariable(
- TokenPos(),
- Symbols::SavedTryContextVar(),
- Type::ZoneHandle(Z, Type::DynamicType()));
- current_block_->scope->AddVariable(context_var);
- }
- LocalVariable* exception_var =
- current_block_->scope->LocalLookupVariable(Symbols::ExceptionVar());
- if (exception_var == NULL) {
- exception_var = new(Z) LocalVariable(
- TokenPos(),
- Symbols::ExceptionVar(),
- Type::ZoneHandle(Z, Type::DynamicType()));
- current_block_->scope->AddVariable(exception_var);
- }
- LocalVariable* stack_trace_var =
- current_block_->scope->LocalLookupVariable(Symbols::StackTraceVar());
- if (stack_trace_var == NULL) {
- stack_trace_var = new(Z) LocalVariable(
- TokenPos(),
- Symbols::StackTraceVar(),
- Type::ZoneHandle(Z, Type::DynamicType()));
- current_block_->scope->AddVariable(stack_trace_var);
- }
+ ASSERT(innermost_function().IsAsyncClosure() ||
+ innermost_function().IsAsyncGenClosure());
+ LocalVariable* context_var = NULL;
+ LocalVariable* exception_var = NULL;
+ LocalVariable* stack_trace_var = NULL;
+ LocalVariable* saved_exception_var = NULL;
+ LocalVariable* saved_stack_trace_var = NULL;
+ SetupExceptionVariables(current_block_->scope,
+ true,
+ &context_var,
+ &exception_var,
+ &stack_trace_var,
+ &saved_exception_var,
+ &saved_stack_trace_var);
// Open the try block.
OpenBlock();
+ // This is the outermost try-catch in the function.
+ ASSERT(try_blocks_list_ == NULL);
PushTryBlock(current_block_);
- if (innermost_function().IsAsyncClosure() ||
- innermost_function().IsAsyncFunction() ||
- innermost_function().IsSyncGenClosure() ||
- innermost_function().IsSyncGenerator()) {
- SetupSavedTryContext(context_var);
- }
+ SetupSavedTryContext(context_var);
}
@@ -6133,6 +6301,13 @@
}
+void Parser::AddAsyncGenClosureParameters(ParamList* params) {
+ // Create the parameter list for the body closure of an async generator.
+ // The closure has the same parameters as an asynchronous non-generator.
+ AddAsyncClosureParameters(params);
+}
+
+
RawFunction* Parser::OpenSyncGeneratorFunction(intptr_t func_pos) {
Function& body = Function::Handle(Z);
String& body_closure_name = String::Handle(Z);
@@ -6243,11 +6418,12 @@
void Parser::AddAsyncClosureParameters(ParamList* params) {
- // Async closures have two optional parameters:
+ // Async closures have three optional parameters:
// * A continuation result.
// * A continuation error.
// * A continuation stack trace.
const Type& dynamic_type = Type::ZoneHandle(Z, Type::DynamicType());
+ ASSERT(params->parameters->length() <= 1);
// Add implicit closure parameter if not yet present.
if (params->parameters->length() == 0) {
params->AddFinalParameter(0, &Symbols::ClosureParameter(), &dynamic_type);
@@ -6372,6 +6548,213 @@
}
+void Parser::AddAsyncGeneratorVariables() {
+ // Add to current block's scope:
+ // var :controller;
+ // The :controller variable is used by the async generator closure to
+ // store the StreamController object to which the yielded expressions
+ // are added.
+ // var :async_op;
+ // This variable is used to store the async generator closure containing
+ // the body of the async* function. It is used by the await operator.
+ const Type& dynamic_type = Type::ZoneHandle(Z, Type::DynamicType());
+ LocalVariable* controller_var = new(Z) LocalVariable(
+ Scanner::kNoSourcePos, Symbols::Controller(), dynamic_type);
+ current_block_->scope->AddVariable(controller_var);
+ current_block_->scope->CaptureVariable(Symbols::Controller());
+ controller_var->set_is_captured();
+
+ LocalVariable* async_op_var = new(Z) LocalVariable(
+ Scanner::kNoSourcePos, Symbols::AsyncOperation(), dynamic_type);
+ current_block_->scope->AddVariable(async_op_var);
+ current_block_->scope->CaptureVariable(Symbols::AsyncOperation());
+ async_op_var->set_is_captured();
+}
+
+
+RawFunction* Parser::OpenAsyncGeneratorFunction(intptr_t async_func_pos) {
+ TRACE_PARSER("OpenAsyncGeneratorFunction");
+ AddContinuationVariables();
+ AddAsyncGeneratorVariables();
+
+ Function& closure = Function::Handle(Z);
+ bool is_new_closure = false;
+
+ // Check whether a function for the asynchronous function body of
+ // this async generator has already been created by a previous
+ // compilation of this function.
+ const Function& found_func = Function::Handle(
+ Z, current_class().LookupClosureFunction(async_func_pos));
+ if (!found_func.IsNull() &&
+ (found_func.token_pos() == async_func_pos) &&
+ (found_func.script() == innermost_function().script()) &&
+ (found_func.parent_function() == innermost_function().raw())) {
+ ASSERT(found_func.IsAsyncGenClosure());
+ closure = found_func.raw();
+ } else {
+ // Create the closure containing the body of this async generator function.
+ const String& async_generator_name =
+ String::Handle(Z, innermost_function().name());
+ String& closure_name = String::Handle(Z,
+ String::NewFormatted("<%s_async_gen_body>",
+ async_generator_name.ToCString()));
+ closure = Function::NewClosureFunction(
+ String::Handle(Z, Symbols::New(closure_name)),
+ innermost_function(),
+ async_func_pos);
+ closure.set_is_generated_body(true);
+ closure.set_result_type(AbstractType::Handle(Type::DynamicType()));
+ is_new_closure = true;
+ }
+
+ ParamList closure_params;
+ AddAsyncGenClosureParameters(&closure_params);
+
+ if (is_new_closure) {
+ // Add the parameters to the newly created closure.
+ AddFormalParamsToFunction(&closure_params, closure);
+
+ // Create and set the signature class of the closure.
+ const String& sig = String::Handle(Z, closure.Signature());
+ Class& sig_cls = Class::Handle(Z, library_.LookupLocalClass(sig));
+ if (sig_cls.IsNull()) {
+ sig_cls =
+ Class::NewSignatureClass(sig, closure, script_, closure.token_pos());
+ library_.AddClass(sig_cls);
+ }
+ closure.set_signature_class(sig_cls);
+ const Type& sig_type = Type::Handle(Z, sig_cls.SignatureType());
+ if (!sig_type.IsFinalized()) {
+ ClassFinalizer::FinalizeType(
+ sig_cls, sig_type, ClassFinalizer::kCanonicalize);
+ }
+ ASSERT(AbstractType::Handle(Z, closure.result_type()).IsResolved());
+ ASSERT(closure.NumParameters() == closure_params.parameters->length());
+ }
+
+ OpenFunctionBlock(closure);
+ AddFormalParamsToScope(&closure_params, current_block_->scope);
+ OpenBlock();
+ async_temp_scope_ = current_block_->scope;
+ return closure.raw();
+}
+
+
+// Generate the Ast nodes for the implicit code of the async* function.
+//
+// f(...) async* {
+// var :controller;
+// var :await_jump_var = -1;
+// var :await_context_var;
+// f_async_body() {
+// ... source code of f ...
+// }
+// var :async_op = f_async_body;
+// :controller = new _AsyncStarStreamController(f_async_body);
+// return :controller.stream;
+// }
+SequenceNode* Parser::CloseAsyncGeneratorFunction(const Function& closure,
+ SequenceNode* closure_body) {
+ TRACE_PARSER("CloseAsyncGeneratorFunction");
+ ASSERT(!closure.IsNull());
+ ASSERT(closure_body != NULL);
+
+ // The block for the async closure body has already been closed. Close the
+ // corresponding function block.
+ CloseBlock();
+
+ // Make sure the implicit variables of the async generator function
+ // are captured.
+ closure_body->scope()->LookupVariable(Symbols::AwaitJumpVar(), false);
+ closure_body->scope()->LookupVariable(Symbols::AwaitContextVar(), false);
+ closure_body->scope()->LookupVariable(Symbols::Controller(), false);
+ closure_body->scope()->LookupVariable(Symbols::AsyncOperation(), false);
+
+ const Class& controller_class = Class::Handle(Z,
+ Library::LookupCoreClass(Symbols::_AsyncStarStreamController()));
+ ASSERT(!controller_class.IsNull());
+ const Function& controller_constructor = Function::ZoneHandle(Z,
+ controller_class.LookupConstructorAllowPrivate(
+ Symbols::_AsyncStarStreamControllerConstructor()));
+
+ // :await_jump_var = -1;
+ LocalVariable* jump_var =
+ current_block_->scope->LookupVariable(Symbols::AwaitJumpVar(), false);
+ LiteralNode* init_value =
+ new(Z) LiteralNode(Scanner::kNoSourcePos, Smi::ZoneHandle(Smi::New(-1)));
+ current_block_->statements->Add(
+ new(Z) StoreLocalNode(Scanner::kNoSourcePos, jump_var, init_value));
+
+ // Add to AST:
+ // :async_op = <closure>; (containing the original body)
+ LocalVariable* async_op_var =
+ current_block_->scope->LookupVariable(Symbols::AsyncOperation(), false);
+ ClosureNode* cn = new(Z) ClosureNode(
+ Scanner::kNoSourcePos, closure, NULL, closure_body->scope());
+ StoreLocalNode* store_async_op = new (Z) StoreLocalNode(
+ Scanner::kNoSourcePos,
+ async_op_var,
+ cn);
+ current_block_->statements->Add(store_async_op);
+
+ // :controller = new _AsyncStarStreamController(body_closure);
+ ArgumentListNode* arguments = new(Z) ArgumentListNode(Scanner::kNoSourcePos);
+ ClosureNode* closure_obj = new(Z) ClosureNode(
+ Scanner::kNoSourcePos, closure, NULL, closure_body->scope());
+ arguments->Add(closure_obj);
+ ConstructorCallNode* controller_constructor_call =
+ new(Z) ConstructorCallNode(Scanner::kNoSourcePos,
+ TypeArguments::ZoneHandle(Z),
+ controller_constructor,
+ arguments);
+ LocalVariable* controller_var =
+ current_block_->scope->LookupVariable(Symbols::Controller(), false);
+ StoreLocalNode* store_controller =
+ new(Z) StoreLocalNode(Scanner::kNoSourcePos,
+ controller_var,
+ controller_constructor_call);
+ current_block_->statements->Add(store_controller);
+
+ // return :controller.stream;
+ ReturnNode* return_node = new(Z) ReturnNode(Scanner::kNoSourcePos,
+ new(Z) InstanceGetterNode(Scanner::kNoSourcePos,
+ new(Z) LoadLocalNode(Scanner::kNoSourcePos,
+ controller_var),
+ Symbols::Stream()));
+ current_block_->statements->Add(return_node);
+ return CloseBlock();
+}
+
+
+void Parser::OpenAsyncGeneratorClosure() {
+ async_temp_scope_ = current_block_->scope;
+ OpenAsyncTryBlock();
+}
+
+
+SequenceNode* Parser::CloseAsyncGeneratorClosure(SequenceNode* body) {
+ // We need a temporary expression to store intermediate return values.
+ parsed_function()->EnsureExpressionTemp();
+
+ SequenceNode* new_body = CloseAsyncGeneratorTryBlock(body);
+ ASSERT(new_body != NULL);
+ ASSERT(new_body->scope() != NULL);
+
+ // Implicitly mark those variables below as captured. We currently mark all
+ // variables of all scopes as captured, but as soon as we do something
+ // smarter we rely on these internal variables to be available.
+ new_body->scope()->LookupVariable(Symbols::AwaitJumpVar(), false);
+ new_body->scope()->LookupVariable(Symbols::AwaitContextVar(), false);
+ new_body->scope()->LookupVariable(Symbols::Controller(), false);
+ new_body->scope()->LookupVariable(Symbols::AsyncOperationParam(), false);
+ new_body->scope()->LookupVariable(Symbols::AsyncOperationErrorParam(), false);
+ new_body->scope()->LookupVariable(
+ Symbols::AsyncOperationStackTraceParam(), false);
+ new_body->scope()->RecursivelyCaptureAllVariables();
+ return new_body;
+}
+
+
SequenceNode* Parser::CloseBlock() {
SequenceNode* statements = current_block_->statements;
if (current_block_->scope != NULL) {
@@ -6385,16 +6768,6 @@
}
-static inline String& BuildAsyncSavedTryContextName(Zone* zone,
- int16_t id) {
- const char* async_saved_prefix = ":async_saved_try_ctx_var_";
- // Can be a regular handle since we only use it to build an actual symbol.
- const String& cnt_str = String::Handle(zone,
- String::NewFormatted("%s%d", async_saved_prefix, id));
- return String::ZoneHandle(zone, Symbols::New(cnt_str));
-}
-
-
SequenceNode* Parser::CloseAsyncFunction(const Function& closure,
SequenceNode* closure_body) {
TRACE_PARSER("CloseAsyncFunction");
@@ -6491,8 +6864,6 @@
SequenceNode* Parser::CloseAsyncClosure(SequenceNode* body) {
- TRACE_PARSER("CloseAsyncClosure");
-
// We need a temporary expression to store intermediate return values.
parsed_function()->EnsureExpressionTemp();
// Implicitly mark those variables below as captured. We currently mark all
@@ -7777,6 +8148,62 @@
}
+// If the await or yield being parsed is in a try block, the continuation code
+// needs to restore the corresponding stack-based variable :saved_try_ctx_var,
+// and possibly the stack-based variable :saved_try_ctx_var of the outer try
+// block.
+// The inner :saved_try_ctx_var is used by a finally clause handling an
+// exception thrown by the continuation code in a catch clause. If no finally
+// clause exists, the catch or finally clause of the outer try block, if any,
+// uses the outer :saved_try_ctx_var to handle the exception.
+//
+// * Try blocks: Set the context variable for this try block.
+// * Catch blocks: Set the context variable for this try block and for any outer
+// try block (if existent).
+// * Finally blocks: Set the context variable for any outer try block (if
+// existent). Note that this try block is popped before
+// parsing the finally clause, so the outer try block (if
+// existent) is at the top of the try block list.
+//
+// TODO(regis): Could we return the variables instead of their containing
+// scopes? Check if they are already setup at this point.
+void Parser::CheckAsyncOpInTryBlock(LocalScope** try_scope,
+ int16_t* try_index,
+ LocalScope** outer_try_scope,
+ int16_t* outer_try_index) const {
+ *try_scope = NULL;
+ *try_index = CatchClauseNode::kInvalidTryIndex;
+ *outer_try_scope = NULL;
+ *outer_try_index = CatchClauseNode::kInvalidTryIndex;
+ if (try_blocks_list_ != NULL) {
+ LocalScope* scope = try_blocks_list_->try_block()->scope;
+ const int current_function_level = current_block_->scope->function_level();
+ if (scope->function_level() == current_function_level) {
+ // The block declaring :saved_try_ctx_var variable is the parent of the
+ // pushed try block.
+ *try_scope = scope->parent();
+ *try_index = try_blocks_list_->try_index();
+ if (try_blocks_list_->inside_catch() &&
+ (try_blocks_list_->outer_try_block() != NULL)) {
+ scope = try_blocks_list_->outer_try_block()->try_block()->scope;
+ if (scope->function_level() == current_function_level) {
+ *outer_try_scope = scope->parent();
+ *outer_try_index = try_blocks_list_->outer_try_block()->try_index();
+ }
+ }
+ }
+ }
+ // An async or async* has an implicitly created try-catch around the
+ // function body, so the await or yield inside the async closure should always
+ // be created with a try scope.
+ ASSERT((*try_scope != NULL) ||
+ innermost_function().IsAsyncFunction() ||
+ innermost_function().IsAsyncGenerator() ||
+ innermost_function().IsSyncGenClosure() ||
+ innermost_function().IsSyncGenerator());
+}
+
+
AstNode* Parser::ParseAwaitForStatement(String* label_name) {
TRACE_PARSER("ParseAwaitForStatement");
ASSERT(IsAwaitKeyword());
@@ -7787,9 +8214,11 @@
ExpectToken(Token::kLPAREN);
if (!innermost_function().IsAsyncFunction() &&
- !innermost_function().IsAsyncClosure()) {
+ !innermost_function().IsAsyncClosure() &&
+ !innermost_function().IsAsyncGenerator() &&
+ !innermost_function().IsAsyncGenClosure()) {
ReportError(await_for_pos,
- "await for loop is only allowed in async function");
+ "await for loop is only allowed in an asynchronous function");
}
// Parse loop variable.
@@ -7844,6 +8273,13 @@
new(Z) StoreLocalNode(stream_pos, iterator_var, ctor_call);
current_block_->statements->Add(iterator_init);
+ LocalScope* try_scope;
+ int16_t try_index;
+ LocalScope* outer_try_scope;
+ int16_t outer_try_index;
+ CheckAsyncOpInTryBlock(&try_scope, &try_index,
+ &outer_try_scope, &outer_try_index);
+
// Build while loop condition.
// while (await :for-in-iter.moveNext())
ArgumentListNode* no_args = new(Z) ArgumentListNode(stream_pos);
@@ -7852,11 +8288,14 @@
new(Z) LoadLocalNode(stream_pos, iterator_var),
Symbols::MoveNext(),
no_args);
- AstNode* await_moveNext = new (Z) AwaitNode(stream_pos, iterator_moveNext);
+ AstNode* await_moveNext = new (Z) AwaitNode(stream_pos,
+ iterator_moveNext,
+ try_scope,
+ try_index,
+ outer_try_scope,
+ outer_try_index);
OpenBlock();
- AwaitTransformer at(current_block_->statements,
- *parsed_function(),
- async_temp_scope_);
+ AwaitTransformer at(current_block_->statements, async_temp_scope_);
AstNode* transformed_await = at.Transform(await_moveNext);
SequenceNode* await_preamble = CloseBlock();
@@ -8218,56 +8657,44 @@
}
-// Populate local scope of the catch block with the saved exception and saved
-// stack trace.
-void Parser::AddSavedExceptionAndStacktraceToScope(
- LocalVariable* exception_var,
- LocalVariable* stack_trace_var,
- LocalScope* scope) {
+// Generate code to load the exception object (:exception_var) into
+// the saved exception variable (:saved_exception_var) used to rethrow.
+// Generate code to load the stack trace object (:stack_trace_var) into
+// the saved stacktrace variable (:saved_stack_trace_var) used to rethrow.
+void Parser::SaveExceptionAndStacktrace(SequenceNode* statements,
+ LocalVariable* exception_var,
+ LocalVariable* stack_trace_var,
+ LocalVariable* saved_exception_var,
+ LocalVariable* saved_stack_trace_var) {
ASSERT(innermost_function().IsAsyncClosure() ||
innermost_function().IsAsyncFunction() ||
innermost_function().IsSyncGenClosure() ||
- innermost_function().IsSyncGenerator());
- // Add :saved_exception_var and :saved_stack_trace_var to scope.
- // They will automatically get captured.
- LocalVariable* saved_exception_var = new (Z) LocalVariable(
- Scanner::kNoSourcePos,
- Symbols::SavedExceptionVar(),
- Type::ZoneHandle(Z, Type::DynamicType()));
- saved_exception_var->set_is_final();
- scope->AddVariable(saved_exception_var);
- LocalVariable* saved_stack_trace_var = new (Z) LocalVariable(
- Scanner::kNoSourcePos,
- Symbols::SavedStackTraceVar(),
- Type::ZoneHandle(Z, Type::DynamicType()));
- saved_exception_var->set_is_final();
- scope->AddVariable(saved_stack_trace_var);
+ innermost_function().IsSyncGenerator() ||
+ innermost_function().IsAsyncGenClosure() ||
+ innermost_function().IsAsyncGenerator());
- // Generate code to load the exception object (:exception_var) into
- // the saved exception variable (:saved_exception_var) used to rethrow.
- saved_exception_var = current_block_->scope->LookupVariable(
- Symbols::SavedExceptionVar(), false);
ASSERT(saved_exception_var != NULL);
ASSERT(exception_var != NULL);
- current_block_->statements->Add(new(Z) StoreLocalNode(
+ statements->Add(new(Z) StoreLocalNode(
Scanner::kNoSourcePos,
saved_exception_var,
new(Z) LoadLocalNode(Scanner::kNoSourcePos, exception_var)));
- // Generate code to load the stack trace object (:stack_trace_var) into
- // the saved stacktrace variable (:saved_stack_trace_var) used to rethrow.
- saved_stack_trace_var = current_block_->scope->LookupVariable(
- Symbols::SavedStackTraceVar(), false);
ASSERT(saved_stack_trace_var != NULL);
ASSERT(stack_trace_var != NULL);
- current_block_->statements->Add(new(Z) StoreLocalNode(
+ statements->Add(new(Z) StoreLocalNode(
Scanner::kNoSourcePos,
saved_stack_trace_var,
new(Z) LoadLocalNode(Scanner::kNoSourcePos, stack_trace_var)));
}
-SequenceNode* Parser::ParseFinallyBlock() {
+SequenceNode* Parser::ParseFinallyBlock(
+ bool is_async,
+ LocalVariable* exception_var,
+ LocalVariable* stack_trace_var,
+ LocalVariable* rethrow_exception_var,
+ LocalVariable* rethrow_stack_trace_var) {
TRACE_PARSER("ParseFinallyBlock");
OpenBlock();
ExpectToken(Token::kLBRACE);
@@ -8275,17 +8702,24 @@
// In case of async closures we need to restore the saved try index of an
// outer try block (if it exists). The current try block has already been
// removed from the stack of try blocks.
- if ((innermost_function().IsAsyncClosure() ||
- innermost_function().IsAsyncFunction() ||
- innermost_function().IsSyncGenClosure() ||
- innermost_function().IsSyncGenerator()) &&
- (try_blocks_list_ != NULL)) {
- // We need two unchain two scopes: finally clause, and the try block level.
- RestoreSavedTryContext(current_block_->scope->parent()->parent(),
- try_blocks_list_->try_index(),
- current_block_->statements);
- } else {
- parsed_function()->reset_saved_try_ctx_vars();
+ if (is_async) {
+ if (try_blocks_list_ != NULL) {
+ LocalScope* scope = try_blocks_list_->try_block()->scope;
+ if (scope->function_level() == current_block_->scope->function_level()) {
+ current_block_->statements->Add(
+ AwaitTransformer::RestoreSavedTryContext(
+ Z, scope->parent(), try_blocks_list_->try_index()));
+ }
+ }
+ // We need to save the exception variables as in catch clauses, whether
+ // there is an outer try or not. Note that this is only necessary if the
+ // finally clause contains an await or yield.
+ // TODO(hausner): Optimize.
+ SaveExceptionAndStacktrace(current_block_->statements,
+ exception_var,
+ stack_trace_var,
+ rethrow_exception_var,
+ rethrow_stack_trace_var);
}
ParseStatementSequence();
@@ -8338,11 +8772,12 @@
// Add the inlined finally block to the specified node.
-void Parser::AddFinallyBlockToNode(AstNode* node,
+void Parser::AddFinallyBlockToNode(bool is_async,
+ AstNode* node,
InlinedFinallyNode* finally_node) {
ReturnNode* return_node = node->AsReturnNode();
if (return_node != NULL) {
- parsed_function()->EnsureFinallyReturnTemp();
+ parsed_function()->EnsureFinallyReturnTemp(is_async);
return_node->AddInlinedFinallyNode(finally_node);
return;
}
@@ -8354,8 +8789,11 @@
SequenceNode* Parser::ParseCatchClauses(
intptr_t handler_pos,
+ bool is_async,
LocalVariable* exception_var,
LocalVariable* stack_trace_var,
+ LocalVariable* rethrow_exception_var,
+ LocalVariable* rethrow_stack_trace_var,
const GrowableObjectArray& handler_types,
bool* needs_stack_trace) {
// All catch blocks are merged into an if-then-else sequence of the
@@ -8387,7 +8825,6 @@
exception_param.name = ExpectIdentifier("identifier expected");
if (CurrentToken() == Token::kCOMMA) {
ConsumeToken();
- // TODO(hausner): Make implicit type be StackTrace, not dynamic.
stack_trace_param.type =
&AbstractType::ZoneHandle(Z, Type::DynamicType());
stack_trace_param.token_pos = TokenPos();
@@ -8426,34 +8863,10 @@
catch_pos, stack_trace_var)));
}
- // Add nested block with user-defined code. This blocks allows
+ // Add nested block with user-defined code. This block allows
// declarations in the body to shadow the catch parameters.
CheckToken(Token::kLBRACE);
- // In case of async closures we need to restore the saved try index of an
- // outer try block (if it exists).
- ASSERT(try_blocks_list_ != NULL);
- if (innermost_function().IsAsyncClosure() ||
- innermost_function().IsAsyncFunction() ||
- innermost_function().IsSyncGenClosure() ||
- innermost_function().IsSyncGenerator()) {
- if ((try_blocks_list_->outer_try_block() != NULL) &&
- (try_blocks_list_->outer_try_block()->try_block()
- ->scope->function_level() ==
- current_block_->scope->function_level())) {
- // We need to unchain three scope levels: catch clause, catch
- // parameters, and the general try block.
- RestoreSavedTryContext(
- current_block_->scope->parent()->parent()->parent(),
- try_blocks_list_->outer_try_block()->try_index(),
- current_block_->statements);
- } else {
- parsed_function()->reset_saved_try_ctx_vars();
- }
- AddSavedExceptionAndStacktraceToScope(
- exception_var, stack_trace_var, current_block_->scope);
- }
-
current_block_->statements->Add(ParseNestedStatement(false, NULL));
catch_blocks.Add(CloseBlock());
@@ -8519,6 +8932,9 @@
// There isn't a generic catch clause so create a clause body that
// rethrows the exception. This includes the case that there were no
// catch clauses.
+ // An await cannot possibly be executed inbetween the catch entry and here,
+ // therefore, it is safe to rethrow the stack-based :exception_var instead
+ // of the captured copy :saved_exception_var.
current = new(Z) SequenceNode(handler_pos, NULL);
current->Add(new(Z) ThrowNode(
handler_pos,
@@ -8537,44 +8953,51 @@
}
// If the last body was entered conditionally and there is no need to add
// a rethrow, use an empty else body (current = NULL above).
-
while (!type_tests.is_empty()) {
AstNode* type_test = type_tests.RemoveLast();
SequenceNode* catch_block = catch_blocks.RemoveLast();
-
- // In case of async closures we need to restore the saved try index of an
- // outer try block (if it exists).
- ASSERT(try_blocks_list_ != NULL);
- if (innermost_function().IsAsyncClosure() ||
- innermost_function().IsAsyncFunction() ||
- innermost_function().IsSyncGenClosure() ||
- innermost_function().IsSyncGenerator()) {
- if ((try_blocks_list_->outer_try_block() != NULL) &&
- (try_blocks_list_->outer_try_block()->try_block()
- ->scope->function_level() ==
- current_block_->scope->function_level())) {
- // We need to unchain three scope levels: catch clause, catch
- // parameters, and the general try block.
- RestoreSavedTryContext(
- current_block_->scope->parent()->parent(),
- try_blocks_list_->outer_try_block()->try_index(),
- current_block_->statements);
- } else {
- parsed_function()->reset_saved_try_ctx_vars();
- }
- }
-
current_block_->statements->Add(new(Z) IfNode(
type_test->token_pos(), type_test, catch_block, current));
current = CloseBlock();
}
+ // In case of async closures, restore :saved_try_context_var before executing
+ // the catch clauses.
+ if (is_async && (current != NULL)) {
+ ASSERT(try_blocks_list_ != NULL);
+ SequenceNode* async_code = new(Z) SequenceNode(handler_pos, NULL);
+ const TryBlocks* try_block = try_blocks_list_->outer_try_block();
+ if (try_block != NULL) {
+ LocalScope* scope = try_block->try_block()->scope;
+ if (scope->function_level() ==
+ current_block_->scope->function_level()) {
+ async_code->Add(
+ AwaitTransformer::RestoreSavedTryContext(
+ Z, scope->parent(), try_block->try_index()));
+ }
+ }
+ SaveExceptionAndStacktrace(async_code,
+ exception_var,
+ stack_trace_var,
+ rethrow_exception_var,
+ rethrow_stack_trace_var);
+ // The async_code node sequence contains code to restore the context (if
+ // an outer try block is present) and code to save the exception and
+ // stack trace variables.
+ // This async code is inserted before the current node sequence containing
+ // the chain of if/then/else handling all catch clauses.
+ async_code->Add(current);
+ current = async_code;
+ }
return current;
}
void Parser::SetupSavedTryContext(LocalVariable* saved_try_context) {
- const String& async_saved_try_ctx_name =
- BuildAsyncSavedTryContextName(Z, last_used_try_index_ - 1);
+ const String& async_saved_try_ctx_name = String::ZoneHandle(Z,
+ Symbols::New(String::Handle(Z,
+ String::NewFormatted("%s%d",
+ Symbols::AsyncSavedTryCtxVarPrefix().ToCString(),
+ last_used_try_index_ - 1))));
LocalVariable* async_saved_try_ctx = new (Z) LocalVariable(
Scanner::kNoSourcePos,
async_saved_try_ctx_name,
@@ -8590,84 +9013,102 @@
Scanner::kNoSourcePos,
async_saved_try_ctx,
new(Z) LoadLocalNode(Scanner::kNoSourcePos, saved_try_context)));
- parsed_function()->set_saved_try_ctx(saved_try_context);
- parsed_function()->set_async_saved_try_ctx_name(async_saved_try_ctx_name);
}
-// Restore the currently relevant :saved_try_context_var on the stack
-// from the captured :async_saved_try_ctx_var_.
-// * Try blocks: Set the context variable for this try block.
-// * Catch/finally blocks: Set the context variable for any outer try block (if
-// existent).
+// We create three variables for exceptions:
+// ':saved_try_context_var' - Used to save the context before the start of
+// the try block. The context register is
+// restored from this variable before
+// processing the catch block handler.
+// ':exception_var' - Used to save the current exception object that was
+// thrown.
+// ':stack_trace_var' - Used to save the current stack trace object which
+// the stack trace was copied into when an exception
+// was thrown.
+// :exception_var and :stack_trace_var get set with the exception object
+// and the stack trace object when an exception is thrown. These three
+// implicit variables can never be captured.
//
-// Also save the captured variable and the stack variable to be able to set
-// it after a function continues execution (await).
-void Parser::RestoreSavedTryContext(LocalScope* saved_try_context_scope,
- int16_t try_index,
- SequenceNode* target) {
- LocalVariable* saved_try_ctx = saved_try_context_scope->LookupVariable(
- Symbols::SavedTryContextVar(), false);
- ASSERT((saved_try_ctx != NULL) && !saved_try_ctx->is_captured());
- const String& async_saved_try_ctx_name =
- BuildAsyncSavedTryContextName(Z, try_index);
- LocalVariable* async_saved_try_ctx =
- target->scope()->LookupVariable(async_saved_try_ctx_name, false);
- ASSERT(async_saved_try_ctx != NULL);
- ASSERT(async_saved_try_ctx->is_captured());
- target->Add(new (Z) StoreLocalNode(
- Scanner::kNoSourcePos,
- saved_try_ctx,
- new (Z) LoadLocalNode(Scanner::kNoSourcePos, async_saved_try_ctx)));
-
- parsed_function()->set_saved_try_ctx(saved_try_ctx);
- parsed_function()->set_async_saved_try_ctx_name(async_saved_try_ctx_name);
+// In case of async code, we create two additional variables:
+// ':saved_exception_var' - Used to capture the exception object above.
+// ':saved_stack_trace_var' - Used to capture the stack trace object above.
+void Parser::SetupExceptionVariables(LocalScope* try_scope,
+ bool is_async,
+ LocalVariable** context_var,
+ LocalVariable** exception_var,
+ LocalVariable** stack_trace_var,
+ LocalVariable** saved_exception_var,
+ LocalVariable** saved_stack_trace_var) {
+ const Type& dynamic_type = Type::ZoneHandle(Z, Type::DynamicType());
+ // Consecutive try statements share the same set of variables.
+ *context_var = try_scope->LocalLookupVariable(Symbols::SavedTryContextVar());
+ if (*context_var == NULL) {
+ *context_var = new(Z) LocalVariable(
+ TokenPos(),
+ Symbols::SavedTryContextVar(),
+ dynamic_type);
+ try_scope->AddVariable(*context_var);
+ }
+ *exception_var = try_scope->LocalLookupVariable(Symbols::ExceptionVar());
+ if (*exception_var == NULL) {
+ *exception_var = new(Z) LocalVariable(
+ TokenPos(),
+ Symbols::ExceptionVar(),
+ dynamic_type);
+ try_scope->AddVariable(*exception_var);
+ }
+ *stack_trace_var = try_scope->LocalLookupVariable(Symbols::StackTraceVar());
+ if (*stack_trace_var == NULL) {
+ *stack_trace_var = new(Z) LocalVariable(
+ TokenPos(),
+ Symbols::StackTraceVar(),
+ dynamic_type);
+ try_scope->AddVariable(*stack_trace_var);
+ }
+ if (is_async) {
+ *saved_exception_var = try_scope->LocalLookupVariable(
+ Symbols::SavedExceptionVar());
+ if (*saved_exception_var == NULL) {
+ *saved_exception_var = new(Z) LocalVariable(
+ TokenPos(),
+ Symbols::SavedExceptionVar(),
+ dynamic_type);
+ try_scope->AddVariable(*saved_exception_var);
+ }
+ *saved_stack_trace_var = try_scope->LocalLookupVariable(
+ Symbols::SavedStackTraceVar());
+ if (*saved_stack_trace_var == NULL) {
+ *saved_stack_trace_var = new(Z) LocalVariable(
+ TokenPos(),
+ Symbols::SavedStackTraceVar(),
+ dynamic_type);
+ try_scope->AddVariable(*saved_stack_trace_var);
+ }
+ }
}
AstNode* Parser::ParseTryStatement(String* label_name) {
TRACE_PARSER("ParseTryStatement");
-
- // We create three variables for exceptions here:
- // ':saved_try_context_var' - Used to save the context before the start of
- // the try block. The context register is
- // restored from this variable before
- // processing the catch block handler.
- // ':exception_var' - Used to save the current exception object that was
- // thrown.
- // ':stack_trace_var' - Used to save the current stack trace object which
- // the stack trace was copied into when an exception
- // was thrown.
- // :exception_var and :stack_trace_var get set with the exception object
- // and the stack trace object when an exception is thrown. These three
- // implicit variables can never be captured.
- LocalVariable* context_var =
- current_block_->scope->LocalLookupVariable(Symbols::SavedTryContextVar());
- if (context_var == NULL) {
- context_var = new(Z) LocalVariable(
- TokenPos(),
- Symbols::SavedTryContextVar(),
- Type::ZoneHandle(Z, Type::DynamicType()));
- current_block_->scope->AddVariable(context_var);
- }
- LocalVariable* exception_var =
- current_block_->scope->LocalLookupVariable(Symbols::ExceptionVar());
- if (exception_var == NULL) {
- exception_var = new(Z) LocalVariable(
- TokenPos(),
- Symbols::ExceptionVar(),
- Type::ZoneHandle(Z, Type::DynamicType()));
- current_block_->scope->AddVariable(exception_var);
- }
- LocalVariable* stack_trace_var =
- current_block_->scope->LocalLookupVariable(Symbols::StackTraceVar());
- if (stack_trace_var == NULL) {
- stack_trace_var = new(Z) LocalVariable(
- TokenPos(),
- Symbols::StackTraceVar(),
- Type::ZoneHandle(Z, Type::DynamicType()));
- current_block_->scope->AddVariable(stack_trace_var);
- }
+ const bool is_async = innermost_function().IsAsyncClosure() ||
+ innermost_function().IsAsyncFunction() ||
+ innermost_function().IsSyncGenClosure() ||
+ innermost_function().IsSyncGenerator() ||
+ innermost_function().IsAsyncGenClosure() ||
+ innermost_function().IsAsyncGenerator();
+ LocalVariable* context_var = NULL;
+ LocalVariable* exception_var = NULL;
+ LocalVariable* stack_trace_var = NULL;
+ LocalVariable* saved_exception_var = NULL;
+ LocalVariable* saved_stack_trace_var = NULL;
+ SetupExceptionVariables(current_block_->scope,
+ is_async,
+ &context_var,
+ &exception_var,
+ &stack_trace_var,
+ &saved_exception_var,
+ &saved_stack_trace_var);
const intptr_t try_pos = TokenPos();
ConsumeToken(); // Consume the 'try'.
@@ -8684,10 +9125,7 @@
PushTryBlock(current_block_);
ExpectToken(Token::kLBRACE);
- if (innermost_function().IsAsyncClosure() ||
- innermost_function().IsAsyncFunction() ||
- innermost_function().IsSyncGenClosure() ||
- innermost_function().IsSyncGenerator()) {
+ if (is_async) {
SetupSavedTryContext(context_var);
}
@@ -8707,8 +9145,14 @@
GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
bool needs_stack_trace = false;
SequenceNode* catch_handler_list =
- ParseCatchClauses(handler_pos, exception_var, stack_trace_var,
- handler_types, &needs_stack_trace);
+ ParseCatchClauses(handler_pos,
+ is_async,
+ exception_var,
+ stack_trace_var,
+ is_async ? saved_exception_var : exception_var,
+ is_async ? saved_stack_trace_var : stack_trace_var,
+ handler_types,
+ &needs_stack_trace);
TryBlocks* inner_try_block = PopTryBlock();
const intptr_t try_index = inner_try_block->try_index();
@@ -8727,17 +9171,27 @@
AstNode* node_to_inline =
inner_try_block->GetNodeToInlineFinally(node_index);
while (node_to_inline != NULL) {
- finally_block = ParseFinallyBlock();
+ finally_block = ParseFinallyBlock(
+ is_async,
+ exception_var,
+ stack_trace_var,
+ is_async ? saved_exception_var : exception_var,
+ is_async ? saved_stack_trace_var : stack_trace_var);
InlinedFinallyNode* node = new(Z) InlinedFinallyNode(finally_pos,
finally_block,
context_var,
outer_try_index);
- AddFinallyBlockToNode(node_to_inline, node);
+ AddFinallyBlockToNode(is_async, node_to_inline, node);
node_index += 1;
node_to_inline = inner_try_block->GetNodeToInlineFinally(node_index);
tokens_iterator_.SetCurrentPosition(finally_pos);
}
- finally_block = ParseFinallyBlock();
+ finally_block = ParseFinallyBlock(
+ is_async,
+ exception_var,
+ stack_trace_var,
+ is_async ? saved_exception_var : exception_var,
+ is_async ? saved_stack_trace_var : stack_trace_var);
}
CatchClauseNode* catch_clause = new(Z) CatchClauseNode(
@@ -8747,6 +9201,8 @@
context_var,
exception_var,
stack_trace_var,
+ is_async ? saved_exception_var : exception_var,
+ is_async ? saved_stack_trace_var : stack_trace_var,
(finally_block != NULL) ?
AllocateTryIndex() : CatchClauseNode::kInvalidTryIndex,
needs_stack_trace);
@@ -8831,6 +9287,146 @@
}
+AstNode* Parser::ParseYieldStatement() {
+ bool is_yield_each = false;
+ const intptr_t yield_pos = TokenPos();
+ ConsumeToken(); // yield reserved word.
+ ASSERT(innermost_function().IsGenerator() ||
+ innermost_function().IsSyncGenClosure() ||
+ innermost_function().IsAsyncGenerator() ||
+ innermost_function().IsAsyncGenClosure());
+ if (CurrentToken() == Token::kMUL) {
+ is_yield_each = true;
+ ConsumeToken();
+ }
+ AstNode* expr = ParseAwaitableExpr(kAllowConst, kConsumeCascades, NULL);
+
+ LetNode* yield = new(Z) LetNode(yield_pos);
+ if (innermost_function().IsSyncGenerator() ||
+ innermost_function().IsSyncGenClosure()) {
+ // Yield statement in sync* function.
+
+ LocalVariable* iterator_param =
+ LookupLocalScope(Symbols::IteratorParameter());
+ ASSERT(iterator_param != NULL);
+ // Generate :iterator.current = expr;
+ AstNode* iterator =
+ new(Z) LoadLocalNode(Scanner::kNoSourcePos, iterator_param);
+ AstNode* store_current =
+ new(Z) InstanceSetterNode(Scanner::kNoSourcePos,
+ iterator,
+ String::ZoneHandle(Symbols::Current().raw()),
+ expr);
+ yield->AddNode(store_current);
+ if (is_yield_each) {
+ // Generate :iterator.isYieldEach = true;
+ AstNode* set_is_yield_each =
+ new(Z) InstanceSetterNode(Scanner::kNoSourcePos,
+ iterator,
+ String::ZoneHandle(Symbols::IsYieldEach().raw()),
+ new(Z) LiteralNode(TokenPos(), Bool::True()));
+ yield->AddNode(set_is_yield_each);
+ }
+ AwaitMarkerNode* await_marker = new(Z) AwaitMarkerNode();
+ await_marker->set_scope(current_block_->scope);
+ yield->AddNode(await_marker);
+ // Return true to indicate that a value has been generated.
+ ReturnNode* return_true = new(Z) ReturnNode(yield_pos,
+ new(Z) LiteralNode(TokenPos(), Bool::True()));
+ return_true->set_return_type(ReturnNode::kContinuationTarget);
+ yield->AddNode(return_true);
+
+ // If this expression is part of a try block, also append the code for
+ // restoring the saved try context that lives on the stack and possibly the
+ // saved try context of the outer try block.
+ LocalScope* try_scope;
+ int16_t try_index;
+ LocalScope* outer_try_scope;
+ int16_t outer_try_index;
+ CheckAsyncOpInTryBlock(&try_scope, &try_index,
+ &outer_try_scope, &outer_try_index);
+ if (try_scope != NULL) {
+ yield->AddNode(
+ AwaitTransformer::RestoreSavedTryContext(Z,
+ try_scope,
+ try_index));
+ if (outer_try_scope != NULL) {
+ yield->AddNode(
+ AwaitTransformer::RestoreSavedTryContext(Z,
+ outer_try_scope,
+ outer_try_index));
+ }
+ } else {
+ ASSERT(outer_try_scope == NULL);
+ }
+ } else {
+ // yield statement in async* function.
+ ASSERT(innermost_function().IsAsyncGenerator() ||
+ innermost_function().IsAsyncGenClosure());
+
+ LocalVariable* controller_var = LookupLocalScope(Symbols::Controller());
+ ASSERT(controller_var != NULL);
+ // :controller.add[Stream](expr);
+ ArgumentListNode* add_args = new(Z) ArgumentListNode(yield_pos);
+ add_args->Add(expr);
+ AstNode* add_call =
+ new(Z) InstanceCallNode(yield_pos,
+ new(Z) LoadLocalNode(Scanner::kNoSourcePos, controller_var),
+ is_yield_each ? Symbols::AddStream() : Symbols::add(),
+ add_args);
+
+
+ // if (:controller.add[Stream](expr)) {
+ // return;
+ // }
+ // await_marker;
+ // continuation_return;
+ // restore saved_try_context
+
+ SequenceNode* true_branch =
+ new(Z) SequenceNode(Scanner::kNoSourcePos, current_block_->scope);
+ AstNode* return_from_generator = new(Z) ReturnNode(yield_pos);
+ true_branch->Add(return_from_generator);
+ AddNodeForFinallyInlining(return_from_generator);
+ AstNode* if_is_cancelled =
+ new(Z) IfNode(Scanner::kNoSourcePos, add_call, true_branch, NULL);
+ yield->AddNode(if_is_cancelled);
+
+ AwaitMarkerNode* await_marker = new(Z) AwaitMarkerNode();
+ await_marker->set_scope(current_block_->scope);
+ yield->AddNode(await_marker);
+ ReturnNode* continuation_return = new(Z) ReturnNode(yield_pos);
+ continuation_return->set_return_type(ReturnNode::kContinuationTarget);
+ yield->AddNode(continuation_return);
+
+ // If this expression is part of a try block, also append the code for
+ // restoring the saved try context that lives on the stack and possibly the
+ // saved try context of the outer try block.
+ LocalScope* try_scope;
+ int16_t try_index;
+ LocalScope* outer_try_scope;
+ int16_t outer_try_index;
+ CheckAsyncOpInTryBlock(&try_scope, &try_index,
+ &outer_try_scope, &outer_try_index);
+ if (try_scope != NULL) {
+ yield->AddNode(
+ AwaitTransformer::RestoreSavedTryContext(Z,
+ try_scope,
+ try_index));
+ if (outer_try_scope != NULL) {
+ yield->AddNode(
+ AwaitTransformer::RestoreSavedTryContext(Z,
+ outer_try_scope,
+ outer_try_index));
+ }
+ } else {
+ ASSERT(outer_try_scope == NULL);
+ }
+ }
+ return yield;
+}
+
+
AstNode* Parser::ParseStatement() {
TRACE_PARSER("ParseStatement");
AstNode* statement = NULL;
@@ -8870,7 +9466,8 @@
(current_block_->scope->function_level() == 0)) {
ReportError(expr_pos,
"return of a value is not allowed in constructors");
- } else if (current_function().IsGenerator()) {
+ } else if (current_function().IsGeneratorClosure() &&
+ (current_block_->scope->function_level() == 0)) {
ReportError(expr_pos, "generator functions may not return a value");
}
AstNode* expr = ParseAwaitableExpr(kAllowConst, kConsumeCascades, NULL);
@@ -8890,62 +9487,7 @@
AddNodeForFinallyInlining(statement);
ExpectSemicolon();
} else if (IsYieldKeyword()) {
- bool is_yield_each = false;
- ConsumeToken();
- ASSERT(innermost_function().IsGenerator() ||
- innermost_function().IsSyncGenClosure());
- if (CurrentToken() == Token::kMUL) {
- is_yield_each = true;
- ConsumeToken();
- }
- AstNode* expr = ParseAwaitableExpr(kAllowConst, kConsumeCascades, NULL);
- LocalVariable* iterator_param =
- LookupLocalScope(Symbols::IteratorParameter());
- ASSERT(iterator_param != NULL);
- // Generate :iterator.current = expr;
- AstNode* iterator =
- new(Z) LoadLocalNode(Scanner::kNoSourcePos, iterator_param);
- AstNode* store_current =
- new(Z) InstanceSetterNode(Scanner::kNoSourcePos,
- iterator,
- String::ZoneHandle(Symbols::Current().raw()),
- expr);
- LetNode* yield = new(Z) LetNode(statement_pos);
- yield->AddNode(store_current);
- if (is_yield_each) {
- // Generate :iterator.isYieldEach = true;
- AstNode* set_is_yield_each =
- new(Z) InstanceSetterNode(Scanner::kNoSourcePos,
- iterator,
- String::ZoneHandle(Symbols::IsYieldEach().raw()),
- new(Z) LiteralNode(TokenPos(), Bool::True()));
- yield->AddNode(set_is_yield_each);
- }
- AwaitMarkerNode* await_marker = new(Z) AwaitMarkerNode();
- await_marker->set_scope(current_block_->scope);
- yield->AddNode(await_marker);
- // Return true to indicate that a value has been generated.
- ReturnNode* return_true = new(Z) ReturnNode(statement_pos,
- new(Z) LiteralNode(TokenPos(), Bool::True()));
- return_true->set_return_type(ReturnNode::kContinuationTarget);
- yield->AddNode(return_true);
-
- // If this expression is part of a try block, also append the code for
- // restoring the saved try context that lives on the stack.
- const String& async_saved_try_ctx_name =
- String::Handle(Z, parsed_function()->async_saved_try_ctx_name());
- if (!async_saved_try_ctx_name.IsNull()) {
- LocalVariable* async_saved_try_ctx =
- current_block_->scope->LookupVariable(async_saved_try_ctx_name,
- false);
- ASSERT(async_saved_try_ctx != NULL);
- yield->AddNode(new (Z) StoreLocalNode(
- Scanner::kNoSourcePos,
- parsed_function()->saved_try_ctx(),
- new (Z) LoadLocalNode(Scanner::kNoSourcePos, async_saved_try_ctx)));
- }
-
- statement = yield;
+ statement = ParseYieldStatement();
ExpectSemicolon();
} else if (token == Token::kIF) {
statement = ParseIfStatement(label_name);
@@ -8993,22 +9535,21 @@
// If in async code, use :saved_exception_var and :saved_stack_trace_var
// instead of :exception_var and :stack_trace_var.
+ // These variables are bound in the block containing the try.
+ // Look in the try scope directly.
+ LocalScope* scope = try_blocks_list_->try_block()->scope->parent();
+ ASSERT(scope != NULL);
LocalVariable* excp_var;
LocalVariable* trace_var;
if (innermost_function().IsAsyncClosure() ||
innermost_function().IsAsyncFunction() ||
innermost_function().IsSyncGenClosure() ||
- innermost_function().IsSyncGenerator()) {
- // The saved exception and stack trace variables are bound in the block
- // containing the catch. So start looking in the current scope.
- LocalScope* scope = current_block_->scope;
- excp_var = scope->LookupVariable(Symbols::SavedExceptionVar(), false);
- trace_var = scope->LookupVariable(Symbols::SavedStackTraceVar(), false);
+ innermost_function().IsSyncGenerator() ||
+ innermost_function().IsAsyncGenClosure() ||
+ innermost_function().IsAsyncGenerator()) {
+ excp_var = scope->LocalLookupVariable(Symbols::SavedExceptionVar());
+ trace_var = scope->LocalLookupVariable(Symbols::SavedStackTraceVar());
} else {
- // The exception and stack trace variables are bound in the block
- // containing the try. Look in the try scope directly.
- LocalScope* scope = try_blocks_list_->try_block()->scope->parent();
- ASSERT(scope != NULL);
excp_var = scope->LocalLookupVariable(Symbols::ExceptionVar());
trace_var = scope->LocalLookupVariable(Symbols::StackTraceVar());
}
@@ -9698,9 +10239,7 @@
// See FlowGraphBuilder::VisitSequenceNode() for details on when contexts
// are created.
OpenBlock();
- AwaitTransformer at(current_block_->statements,
- *parsed_function(),
- async_temp_scope_);
+ AwaitTransformer at(current_block_->statements, async_temp_scope_);
AstNode* result = at.Transform(expr);
SequenceNode* preamble = CloseBlock();
if (await_preamble == NULL) {
@@ -9811,12 +10350,27 @@
if (IsAwaitKeyword()) {
TRACE_PARSER("ParseAwaitExpr");
if (!innermost_function().IsAsyncFunction() &&
- !innermost_function().IsAsyncClosure()) {
- ReportError("await operator is only allowed in async function");
+ !innermost_function().IsAsyncClosure() &&
+ !innermost_function().IsAsyncGenerator() &&
+ !innermost_function().IsAsyncGenClosure()) {
+ ReportError("await operator is only allowed in an asynchronous function");
}
ConsumeToken();
parsed_function()->record_await();
- expr = new (Z) AwaitNode(op_pos, ParseUnaryExpr());
+
+ LocalScope* try_scope;
+ int16_t try_index;
+ LocalScope* outer_try_scope;
+ int16_t outer_try_index;
+ CheckAsyncOpInTryBlock(&try_scope, &try_index,
+ &outer_try_scope, &outer_try_index);
+
+ expr = new (Z) AwaitNode(op_pos,
+ ParseUnaryExpr(),
+ try_scope,
+ try_index,
+ outer_try_scope,
+ outer_try_index);
} else if (IsPrefixOperator(CurrentToken())) {
Token::Kind unary_op = CurrentToken();
if (unary_op == Token::kSUB) {
@@ -11089,7 +11643,7 @@
CheckToken(Token::kIDENT, "type name expected");
intptr_t ident_pos = TokenPos();
LibraryPrefix& prefix = LibraryPrefix::Handle(Z);
- String& type_name = String::Handle(Z);;
+ String& type_name = String::Handle(Z);
if (finalization == ClassFinalizer::kIgnore) {
if (!is_top_level_ && (current_block_ != NULL)) {
@@ -11630,7 +12184,7 @@
} else if (CurrentToken() == Token::kLBRACE) {
primary = ParseMapLiteral(type_pos, is_const, type_arguments);
} else {
- ReportError("unexpected token %s", Token::Str(CurrentToken()));
+ UnexpectedToken();
}
return primary;
}
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index bded365..d72d655 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -57,9 +57,7 @@
first_stack_local_index_(0),
num_copied_params_(0),
num_stack_locals_(0),
- have_seen_await_expr_(false),
- saved_try_ctx_(NULL),
- async_saved_try_ctx_name_(String::ZoneHandle(zone(), String::null())) {
+ have_seen_await_expr_(false) {
ASSERT(function.IsZoneHandle());
// Every function has a local variable for the current context.
LocalVariable* temp = new(zone()) LocalVariable(
@@ -123,7 +121,7 @@
bool has_finally_return_temp_var() const {
return finally_return_temp_var_ != NULL;
}
- void EnsureFinallyReturnTemp();
+ void EnsureFinallyReturnTemp(bool is_async);
LocalVariable* EnsureExpressionTemp();
@@ -152,24 +150,6 @@
void record_await() { have_seen_await_expr_ = true; }
bool have_seen_await() const { return have_seen_await_expr_; }
- void set_saved_try_ctx(LocalVariable* saved_try_ctx) {
- ASSERT((saved_try_ctx == NULL) || !saved_try_ctx->is_captured());
- saved_try_ctx_ = saved_try_ctx;
- }
- LocalVariable* saved_try_ctx() const { return saved_try_ctx_; }
-
- void set_async_saved_try_ctx_name(const String& async_saved_try_ctx_name) {
- async_saved_try_ctx_name_ = async_saved_try_ctx_name.raw();
- }
- RawString* async_saved_try_ctx_name() const {
- return async_saved_try_ctx_name_.raw();
- }
-
- void reset_saved_try_ctx_vars() {
- saved_try_ctx_ = NULL;
- async_saved_try_ctx_name_ = String::null();
- }
-
Thread* thread() const { return thread_; }
Isolate* isolate() const { return thread()->isolate(); }
Zone* zone() const { return thread()->zone(); }
@@ -193,8 +173,6 @@
int num_copied_params_;
int num_stack_locals_;
bool have_seen_await_expr_;
- LocalVariable* saved_try_ctx_;
- String& async_saved_try_ctx_name_;
friend class Parser;
DISALLOW_COPY_AND_ASSIGN(ParsedFunction);
@@ -563,16 +541,28 @@
SequenceNode* CloseSyncGenFunction(const Function& closure,
SequenceNode* closure_node);
void AddSyncGenClosureParameters(ParamList* params);
+ void AddAsyncGenClosureParameters(ParamList* params);
+
+ // Support for async* functions.
+ RawFunction* OpenAsyncGeneratorFunction(intptr_t func_pos);
+ SequenceNode* CloseAsyncGeneratorFunction(const Function& closure,
+ SequenceNode* closure_node);
+ void OpenAsyncGeneratorClosure();
+ SequenceNode* CloseAsyncGeneratorClosure(SequenceNode* body);
+
void OpenAsyncTryBlock();
SequenceNode* CloseBlock();
SequenceNode* CloseAsyncFunction(const Function& closure,
SequenceNode* closure_node);
+
SequenceNode* CloseAsyncClosure(SequenceNode* body);
SequenceNode* CloseAsyncTryBlock(SequenceNode* try_block);
+ SequenceNode* CloseAsyncGeneratorTryBlock(SequenceNode *body);
+
void AddAsyncClosureParameters(ParamList* params);
void AddContinuationVariables();
void AddAsyncClosureVariables();
-
+ void AddAsyncGeneratorVariables();
LocalVariable* LookupPhaseParameter();
LocalVariable* LookupReceiver(LocalScope* from_scope, bool test_only);
@@ -602,26 +592,49 @@
void AddCatchParamsToScope(CatchParamDesc* exception_param,
CatchParamDesc* stack_trace_param,
LocalScope* scope);
- void AddSavedExceptionAndStacktraceToScope(LocalVariable* exception_var,
- LocalVariable* stack_trace_var,
- LocalScope* scope);
- // Parse all the catch clause of a try.
- SequenceNode* ParseCatchClauses(intptr_t handler_pos,
+ void SetupExceptionVariables(LocalScope* try_scope,
+ bool is_async,
+ LocalVariable** context_var,
+ LocalVariable** exception_var,
+ LocalVariable** stack_trace_var,
+ LocalVariable** saved_exception_var,
+ LocalVariable** saved_stack_trace_var);
+ void SaveExceptionAndStacktrace(SequenceNode* statements,
LocalVariable* exception_var,
LocalVariable* stack_trace_var,
+ LocalVariable* saved_exception_var,
+ LocalVariable* saved_stack_trace_var);
+ // Parse all the catch clause of a try.
+ SequenceNode* ParseCatchClauses(intptr_t handler_pos,
+ bool is_async,
+ LocalVariable* exception_var,
+ LocalVariable* stack_trace_var,
+ LocalVariable* rethrow_exception_var,
+ LocalVariable* rethrow_stack_trace_var,
const GrowableObjectArray& handler_types,
bool* needs_stack_trace);
// Parse finally block and create an AST for it.
- SequenceNode* ParseFinallyBlock();
+ SequenceNode* ParseFinallyBlock(bool is_async,
+ LocalVariable* exception_var,
+ LocalVariable* stack_trace_var,
+ LocalVariable* rethrow_exception_var,
+ LocalVariable* rethrow_stack_trace_var);
// Adds try block to the list of try blocks seen so far.
void PushTryBlock(Block* try_block);
// Pops the inner most try block from the list.
TryBlocks* PopTryBlock();
+ // Collect try block scopes and indices if await or yield is in try block.
+ void CheckAsyncOpInTryBlock(LocalScope** try_scope,
+ int16_t* try_index,
+ LocalScope** outer_try_scope,
+ int16_t* outer_try_index) const;
// Add specified node to try block list so that it can be patched with
// inlined finally code if needed.
void AddNodeForFinallyInlining(AstNode* node);
// Add the inlined finally block to the specified node.
- void AddFinallyBlockToNode(AstNode* node, InlinedFinallyNode* finally_node);
+ void AddFinallyBlockToNode(bool is_async,
+ AstNode* node,
+ InlinedFinallyNode* finally_node);
AstNode* ParseTryStatement(String* label_name);
RawAbstractType* ParseConstFinalVarOrType(
ClassFinalizer::FinalizationKind finalization);
@@ -631,6 +644,7 @@
SequenceNode** await_preamble);
AstNode* ParseVariableDeclarationList();
AstNode* ParseFunctionStatement(bool is_literal);
+ AstNode* ParseYieldStatement();
AstNode* ParseStatement();
SequenceNode* ParseNestedStatement(bool parsing_loop_body,
SourceLabel* label);
@@ -752,9 +766,6 @@
const Function* func);
void SetupSavedTryContext(LocalVariable* saved_try_context);
- void RestoreSavedTryContext(LocalScope* saved_try_context_scope,
- int16_t try_index,
- SequenceNode* target);
void CheckOperatorArity(const MemberDesc& member);
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index b518cb6..e262c60 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -9,6 +9,7 @@
#include "vm/allocation.h"
#include "vm/atomic.h"
#include "vm/code_patcher.h"
+#include "vm/instructions.h"
#include "vm/isolate.h"
#include "vm/json_stream.h"
#include "vm/lockers.h"
@@ -30,7 +31,6 @@
DEFINE_FLAG(bool, profile, true, "Enable Sampling Profiler");
#endif
DEFINE_FLAG(bool, trace_profiled_isolates, false, "Trace profiled isolates.");
-DEFINE_FLAG(bool, trace_profiler, false, "Trace profiler.");
DEFINE_FLAG(int, profile_period, 1000,
"Time between profiler samples in microseconds. Minimum 50.");
DEFINE_FLAG(int, profile_depth, 8,
@@ -46,6 +46,14 @@
bool Profiler::initialized_ = false;
SampleBuffer* Profiler::sample_buffer_ = NULL;
+static intptr_t NumberOfFramesToCollect() {
+ if (FLAG_profile_depth <= 0) {
+ return 0;
+ }
+ // Subtract to reserve space for the possible missing frame.
+ return FLAG_profile_depth - 1;
+}
+
void Profiler::InitOnce() {
// Place some sane restrictions on user controlled flags.
SetSamplePeriod(FLAG_profile_period);
@@ -74,7 +82,7 @@
void Profiler::SetSampleDepth(intptr_t depth) {
- const int kMinimumDepth = 1;
+ const int kMinimumDepth = 2;
const int kMaximumDepth = 255;
if (depth < kMinimumDepth) {
FLAG_profile_depth = kMinimumDepth;
@@ -213,7 +221,7 @@
void Sample::InitOnce() {
- ASSERT(FLAG_profile_depth >= 1);
+ ASSERT(FLAG_profile_depth >= 2);
pcs_length_ = FLAG_profile_depth;
instance_size_ =
sizeof(Sample) + (sizeof(uword) * pcs_length_); // NOLINT.
@@ -253,30 +261,325 @@
}
-static void SetPCMarkerIfSafe(Sample* sample) {
- ASSERT(sample != NULL);
+// Attempts to find the true return address when a Dart frame is being setup
+// or torn down.
+// NOTE: Architecture specific implementations below.
+class ReturnAddressLocator : public ValueObject {
+ public:
+ ReturnAddressLocator(Sample* sample, const Code& code)
+ : sample_(sample),
+ code_(Code::ZoneHandle(code.raw())),
+ is_optimized_(code.is_optimized()) {
+ ASSERT(!code_.IsNull());
+ ASSERT(code_.ContainsInstructionAt(pc()));
+ }
- uword* fp = reinterpret_cast<uword*>(sample->fp());
- uword* sp = reinterpret_cast<uword*>(sample->sp());
+ bool is_code_optimized() {
+ return is_optimized_;
+ }
- // If FP == SP, the pc marker hasn't been pushed.
- if (fp > sp) {
-#if defined(TARGET_OS_WINDOWS)
- // If the fp is at the beginning of a page, it may be unsafe to access
- // the pc marker, because we are reading it from a different thread on
- // Windows. The marker is below fp and the previous page may be a guard
- // page.
- const intptr_t kPageMask = VirtualMemory::PageSize() - 1;
- if ((sample->fp() & kPageMask) == 0) {
+ uword pc() {
+ return sample_->pc();
+ }
+
+ // Returns false on failure.
+ bool LocateReturnAddress(uword* return_address);
+
+ // Returns offset into code object.
+ uword RelativePC() {
+ return pc() - code_.EntryPoint();
+ }
+
+ uint8_t* CodePointer(uword offset) {
+ const uword size = code_.Size();
+ ASSERT(offset < size);
+ uint8_t* code_pointer = reinterpret_cast<uint8_t*>(code_.EntryPoint());
+ code_pointer += offset;
+ return code_pointer;
+ }
+
+ uword StackAt(intptr_t i) {
+ ASSERT(i >= 0);
+ ASSERT(i < Sample::kStackBufferSizeInWords);
+ return sample_->GetStackBuffer()[i];
+ }
+
+ private:
+ Sample* sample_;
+ const Code& code_;
+ const bool is_optimized_;
+};
+
+
+#if defined(TARGET_ARCH_IA32)
+bool ReturnAddressLocator::LocateReturnAddress(uword* return_address) {
+ ASSERT(return_address != NULL);
+ const uword offset = RelativePC();
+ const uword size = code_.Size();
+ if (is_optimized_) {
+ // 0: push ebp
+ // 1: mov ebp, esp
+ // 3: ...
+ if (offset == 0x0) {
+ // Stack layout:
+ // 0 RETURN ADDRESS.
+ *return_address = StackAt(0);
+ return true;
+ }
+ if (offset == 0x1) {
+ // Stack layout:
+ // 0 CALLER FRAME POINTER
+ // 1 RETURN ADDRESS
+ *return_address = StackAt(1);
+ return true;
+ }
+ ReturnPattern rp(pc());
+ if (rp.IsValid()) {
+ // Stack layout:
+ // 0 RETURN ADDRESS.
+ *return_address = StackAt(0);
+ return true;
+ }
+ return false;
+ } else {
+ // 0x00: mov edi, function
+ // 0x05: incl (inc usage count) <-- this is optional.
+ // 0x08: cmpl (compare usage count)
+ // 0x0f: jump to optimize function
+ // 0x15: push ebp
+ // 0x16: mov ebp, esp
+ // 0x18: ...
+ ASSERT(size >= 0x08);
+ const uword incl_offset = 0x05;
+ const uword incl_length = 0x03;
+ const uint8_t incl_op_code = 0xFF;
+ const bool has_incl = (*CodePointer(incl_offset) == incl_op_code);
+ const uword push_fp_offset = has_incl ? 0x15 : 0x15 - incl_length;
+ if (offset <= push_fp_offset) {
+ // Stack layout:
+ // 0 RETURN ADDRESS.
+ *return_address = StackAt(0);
+ return true;
+ }
+ if (offset == (push_fp_offset + 1)) {
+ // Stack layout:
+ // 0 CALLER FRAME POINTER
+ // 1 RETURN ADDRESS
+ *return_address = StackAt(1);
+ return true;
+ }
+ ReturnPattern rp(pc());
+ if (rp.IsValid()) {
+ // Stack layout:
+ // 0 RETURN ADDRESS.
+ *return_address = StackAt(0);
+ return true;
+ }
+ return false;
+ }
+ UNREACHABLE();
+ return false;
+}
+#elif defined(TARGET_ARCH_X64)
+bool ReturnAddressLocator::LocateReturnAddress(uword* return_address) {
+ ASSERT(return_address != NULL);
+ const uword offset = RelativePC();
+ const uword size = code_.Size();
+ if (is_optimized_) {
+ // 0x00: leaq (load pc marker)
+ // 0x07: movq (load pool pointer)
+ // 0x0c: push rpb
+ // 0x0d: movq rbp, rsp
+ // 0x10: ...
+ const uword push_fp_offset = 0x0c;
+ if (offset <= push_fp_offset) {
+ // Stack layout:
+ // 0 RETURN ADDRESS.
+ *return_address = StackAt(0);
+ return true;
+ }
+ if (offset == (push_fp_offset + 1)) {
+ // Stack layout:
+ // 0 CALLER FRAME POINTER
+ // 1 RETURN ADDRESS
+ *return_address = StackAt(1);
+ return true;
+ }
+ ReturnPattern rp(pc());
+ if (rp.IsValid()) {
+ // Stack layout:
+ // 0 RETURN ADDRESS.
+ *return_address = StackAt(0);
+ return true;
+ }
+ return false;
+ } else {
+ // 0x00: leaq (load pc marker)
+ // 0x07: movq (load pool pointer)
+ // 0x0c: movq (load function)
+ // 0x13: incl (inc usage count) <-- this is optional.
+ // 0x16: cmpl (compare usage count)
+ // 0x1d: jl + 0x
+ // 0x23: jmp [pool pointer]
+ // 0x27: push rbp
+ // 0x28: movq rbp, rsp
+ // 0x2b: ...
+ ASSERT(size >= 0x16);
+ const uword incl_offset = 0x13;
+ const uword incl_length = 0x03;
+ const uint8_t incl_op_code = 0xFF;
+ const bool has_incl = (*CodePointer(incl_offset) == incl_op_code);
+ const uword push_fp_offset = has_incl ? 0x27 : 0x27 - incl_length;
+ if (offset <= push_fp_offset) {
+ // Stack layout:
+ // 0 RETURN ADDRESS.
+ *return_address = StackAt(0);
+ return true;
+ }
+ if (offset == (push_fp_offset + 1)) {
+ // Stack layout:
+ // 0 CALLER FRAME POINTER
+ // 1 RETURN ADDRESS
+ *return_address = StackAt(1);
+ return true;
+ }
+ ReturnPattern rp(pc());
+ if (rp.IsValid()) {
+ // Stack layout:
+ // 0 RETURN ADDRESS.
+ *return_address = StackAt(0);
+ return true;
+ }
+ return false;
+ }
+ UNREACHABLE();
+ return false;
+}
+#elif defined(TARGET_ARCH_ARM)
+bool ReturnAddressLocator::LocateReturnAddress(uword* return_address) {
+ ASSERT(return_address != NULL);
+ return false;
+}
+#elif defined(TARGET_ARCH_ARM64)
+bool ReturnAddressLocator::LocateReturnAddress(uword* return_address) {
+ ASSERT(return_address != NULL);
+ return false;
+}
+#elif defined(TARGET_ARCH_MIPS)
+bool ReturnAddressLocator::LocateReturnAddress(uword* return_address) {
+ ASSERT(return_address != NULL);
+ return false;
+}
+#else
+#error ReturnAddressLocator implementation missing for this architecture.
+#endif
+
+
+PreprocessVisitor::PreprocessVisitor(Isolate* isolate)
+ : SampleVisitor(isolate),
+ vm_isolate_(Dart::vm_isolate()) {
+}
+
+
+void PreprocessVisitor::VisitSample(Sample* sample) {
+ if (sample->processed()) {
+ // Already processed.
+ return;
+ }
+ // Mark that we've processed this sample.
+ sample->set_processed(true);
+
+ if (sample->exit_frame_sample()) {
+ // Exit frame sample, no preprocessing required.
+ return;
+ }
+ REUSABLE_CODE_HANDLESCOPE(isolate());
+ // Lookup code object for leaf frame.
+ Code& code = reused_code_handle.Handle();
+ code = FindCodeForPC(sample->At(0));
+ sample->set_leaf_frame_is_dart(!code.IsNull());
+ if (!code.IsNull() && (code.compile_timestamp() > sample->timestamp())) {
+ // Code compiled after sample. Ignore.
+ return;
+ }
+ if (sample->leaf_frame_is_dart()) {
+ CheckForMissingDartFrame(code, sample);
+ }
+}
+
+
+void PreprocessVisitor::CheckForMissingDartFrame(const Code& code,
+ Sample* sample) const {
+ // Some stubs (and intrinsics) do not push a frame onto the stack leaving
+ // the frame pointer in the caller.
+ //
+ // PC -> STUB
+ // FP -> DART3 <-+
+ // DART2 <-| <- TOP FRAME RETURN ADDRESS.
+ // DART1 <-|
+ // .....
+ //
+ // In this case, traversing the linked stack frames will not collect a PC
+ // inside DART3. The stack will incorrectly be: STUB, DART2, DART1.
+ // In Dart code, after pushing the FP onto the stack, an IP in the current
+ // function is pushed onto the stack as well. This stack slot is called
+ // the PC marker. We can use the PC marker to insert DART3 into the stack
+ // so that it will correctly be: STUB, DART3, DART2, DART1. Note the
+ // inserted PC may not accurately reflect the true return address into DART3.
+ ASSERT(!code.IsNull());
+
+ // The pc marker is our current best guess of a return address.
+ uword return_address = sample->pc_marker();
+
+ // Attempt to find a better return address.
+ ReturnAddressLocator ral(sample, code);
+
+ if (!ral.LocateReturnAddress(&return_address)) {
+ ASSERT(return_address == sample->pc_marker());
+ // Could not find a better return address than the pc_marker.
+ if (code.ContainsInstructionAt(return_address)) {
+ // PC marker is in the same code as pc, no missing frame.
return;
}
-#endif
- uword* pc_marker_ptr = fp + kPcMarkerSlotFromFp;
- // MSan/ASan are unaware of frames initialized by generated code.
- MSAN_UNPOISON(pc_marker_ptr, kWordSize);
- ASAN_UNPOISON(pc_marker_ptr, kWordSize);
- sample->set_pc_marker(*pc_marker_ptr);
}
+
+ if (!ContainedInDartCodeHeaps(return_address)) {
+ // return address is not from the Dart heap. Do not insert.
+ return;
+ }
+
+ if (return_address != 0) {
+ sample->InsertCallerForTopFrame(return_address);
+ }
+}
+
+
+bool PreprocessVisitor::ContainedInDartCodeHeaps(uword pc) const {
+ return isolate()->heap()->CodeContains(pc) ||
+ vm_isolate()->heap()->CodeContains(pc);
+}
+
+
+RawCode* PreprocessVisitor::FindCodeForPC(uword pc) const {
+ // Check current isolate for pc.
+ if (isolate()->heap()->CodeContains(pc)) {
+ return Code::LookupCode(pc);
+ }
+ // Check VM isolate for pc.
+ if (vm_isolate()->heap()->CodeContains(pc)) {
+ return Code::LookupCodeInVmIsolate(pc);
+ }
+ return Code::null();
+}
+
+
+ClearProfileVisitor::ClearProfileVisitor(Isolate* isolate)
+ : SampleVisitor(isolate) {
+}
+
+
+void ClearProfileVisitor::VisitSample(Sample* sample) {
+ sample->Clear();
}
@@ -297,7 +600,8 @@
while (frame != NULL) {
sample_->SetAt(frame_index, frame->pc());
frame_index++;
- if (frame_index >= FLAG_profile_depth) {
+ if (frame_index >= NumberOfFramesToCollect()) {
+ sample_->set_truncated_trace(true);
break;
}
frame = frame_iterator_.NextFrame();
@@ -347,12 +651,13 @@
return;
}
}
- for (int i = 0; i < FLAG_profile_depth; i++) {
+ for (int i = 0; i < NumberOfFramesToCollect(); i++) {
sample_->SetAt(i, reinterpret_cast<uword>(pc_));
if (!Next()) {
return;
}
}
+ sample_->set_truncated_trace(true);
}
private:
@@ -505,7 +810,7 @@
return;
}
- for (int i = 0; i < FLAG_profile_depth; i++) {
+ for (int i = 0; i < NumberOfFramesToCollect(); i++) {
sample_->SetAt(i, reinterpret_cast<uword>(pc));
pc = CallerPC(fp);
@@ -535,6 +840,8 @@
// Move the lower bound up.
lower_bound_ = reinterpret_cast<uword>(fp);
}
+
+ sample_->set_truncated_trace(true);
}
private:
@@ -575,6 +882,59 @@
};
+static void CopyPCMarkerIfSafe(Sample* sample) {
+ ASSERT(sample != NULL);
+
+ if (sample->vm_tag() != VMTag::kDartTagId) {
+ // We can only trust the stack pointer if we are executing Dart code.
+ // See http://dartbug.com/20421 for details.
+ return;
+ }
+ uword* fp = reinterpret_cast<uword*>(sample->fp());
+ uword* sp = reinterpret_cast<uword*>(sample->sp());
+
+ // If FP == SP, the pc marker hasn't been pushed.
+ if (fp > sp) {
+#if defined(TARGET_OS_WINDOWS)
+ COMPILE_ASSERT(kPcMarkerSlotFromFp < 0);
+ // If the fp is at the beginning of a page, it may be unsafe to access
+ // the pc marker, because we are reading it from a different thread on
+ // Windows. The marker is below fp and the previous page may be a guard
+ // page.
+ const intptr_t kPageMask = VirtualMemory::PageSize() - 1;
+ if ((sample->fp() & kPageMask) == 0) {
+ return;
+ }
+#endif
+ uword* pc_marker_ptr = fp + kPcMarkerSlotFromFp;
+ // MSan/ASan are unaware of frames initialized by generated code.
+ MSAN_UNPOISON(pc_marker_ptr, kWordSize);
+ ASAN_UNPOISON(pc_marker_ptr, kWordSize);
+ sample->set_pc_marker(*pc_marker_ptr);
+ }
+}
+
+
+static void CopyStackBuffer(Sample* sample) {
+ ASSERT(sample != NULL);
+ if (sample->vm_tag() != VMTag::kDartTagId) {
+ // We can only trust the stack pointer if we are executing Dart code.
+ // See http://dartbug.com/20421 for details.
+ return;
+ }
+ uword* sp = reinterpret_cast<uword*>(sample->sp());
+ uword* buffer = sample->GetStackBuffer();
+ if (sp != NULL) {
+ for (intptr_t i = 0; i < Sample::kStackBufferSizeInWords; i++) {
+ MSAN_UNPOISON(sp, kWordSize);
+ ASAN_UNPOISON(sp, kWordSize);
+ buffer[i] = *sp;
+ sp++;
+ }
+ }
+}
+
+
void Profiler::RecordSampleInterruptCallback(
const InterruptedThreadState& state,
void* data) {
@@ -586,10 +946,16 @@
ASSERT(isolate != Dart::vm_isolate());
+ const bool exited_dart_code = (isolate->stub_code() != NULL) &&
+ (isolate->top_exit_frame_info() != 0) &&
+ (isolate->vm_tag() != VMTag::kDartTagId);
+ const bool in_dart_code = (isolate->stub_code() != NULL) &&
+ (isolate->top_exit_frame_info() == 0) &&
+ (isolate->vm_tag() == VMTag::kDartTagId);
+
uintptr_t sp = 0;
- if ((isolate->stub_code() != NULL) &&
- (isolate->top_exit_frame_info() == 0) &&
- (isolate->vm_tag() == VMTag::kDartTagId)) {
+
+ if (in_dart_code) {
// If we're in Dart code, use the Dart stack pointer.
sp = state.dsp;
} else {
@@ -679,13 +1045,10 @@
sample->set_user_tag(isolate->user_tag());
sample->set_sp(sp);
sample->set_fp(state.fp);
-#if !(defined(TARGET_OS_WINDOWS) && defined(TARGET_ARCH_X64))
- // It is never safe to read other thread's stack unless on Win64
- // other thread is inside Dart code.
- SetPCMarkerIfSafe(sample);
-#endif
+ sample->set_lr(state.lr);
+ CopyStackBuffer(sample);
+ CopyPCMarkerIfSafe(sample);
- // Walk the call stack.
if (FLAG_profile_vm) {
// Always walk the native stack collecting both native and Dart frames.
ProfilerNativeStackWalker stackWalker(sample,
@@ -695,43 +1058,23 @@
state.fp,
sp);
stackWalker.walk();
+ } else if (exited_dart_code) {
+ // We have a valid exit frame info, use the Dart stack walker.
+ ProfilerDartExitStackWalker stackWalker(isolate, sample);
+ stackWalker.walk();
+ } else if (in_dart_code) {
+ // We are executing Dart code. We have frame pointers.
+ ProfilerDartStackWalker stackWalker(isolate,
+ sample,
+ stack_lower,
+ stack_upper,
+ state.pc,
+ state.fp,
+ sp);
+ stackWalker.walk();
} else {
- // Attempt to walk only the Dart call stack, falling back to walking
- // the native stack.
- if ((isolate->stub_code() != NULL) &&
- (isolate->top_exit_frame_info() != 0) &&
- (isolate->vm_tag() != VMTag::kDartTagId)) {
- // We have a valid exit frame info, use the Dart stack walker.
- ProfilerDartExitStackWalker stackWalker(isolate, sample);
- stackWalker.walk();
- } else if ((isolate->stub_code() != NULL) &&
- (isolate->top_exit_frame_info() == 0) &&
- (isolate->vm_tag() == VMTag::kDartTagId)) {
- // We are executing Dart code. We have frame pointers.
- ProfilerDartStackWalker stackWalker(isolate,
- sample,
- stack_lower,
- stack_upper,
- state.pc,
- state.fp,
- sp);
- stackWalker.walk();
- } else {
-#if defined(TARGET_OS_WINDOWS) && defined(TARGET_ARCH_X64)
- // ProfilerNativeStackWalker is known to cause crashes on Win64.
- // BUG=20423.
- sample->set_ignore_sample(true);
-#else
- // Fall back to an extremely conservative stack walker.
- ProfilerNativeStackWalker stackWalker(sample,
- stack_lower,
- stack_upper,
- state.pc,
- state.fp,
- sp);
- stackWalker.walk();
-#endif
- }
+ sample->set_vm_tag(VMTag::kEmbedderTagId);
+ sample->SetAt(0, state.pc);
}
}
diff --git a/runtime/vm/profiler.h b/runtime/vm/profiler.h
index d93d648..03d632e 100644
--- a/runtime/vm/profiler.h
+++ b/runtime/vm/profiler.h
@@ -106,17 +106,61 @@
DISALLOW_IMPLICIT_CONSTRUCTORS(SampleVisitor);
};
+
+class PreprocessVisitor : public SampleVisitor {
+ public:
+ explicit PreprocessVisitor(Isolate* isolate);
+
+ virtual void VisitSample(Sample* sample);
+
+ private:
+ void CheckForMissingDartFrame(const Code& code, Sample* sample) const;
+
+ bool ContainedInDartCodeHeaps(uword pc) const;
+
+ Isolate* vm_isolate() const {
+ return vm_isolate_;
+ }
+
+ RawCode* FindCodeForPC(uword pc) const;
+
+ Isolate* vm_isolate_;
+};
+
+
+class ClearProfileVisitor : public SampleVisitor {
+ public:
+ explicit ClearProfileVisitor(Isolate* isolate);
+
+ virtual void VisitSample(Sample* sample);
+};
+
+
// Each Sample holds a stack trace from an isolate.
class Sample {
public:
void Init(Isolate* isolate, int64_t timestamp, ThreadId tid) {
+ Clear();
timestamp_ = timestamp;
tid_ = tid;
isolate_ = isolate;
+ }
+
+ // Isolate sample was taken from.
+ Isolate* isolate() const {
+ return isolate_;
+ }
+
+ void Clear() {
+ isolate_ = NULL;
pc_marker_ = 0;
+ for (intptr_t i = 0; i < kStackBufferSizeInWords; i++) {
+ stack_buffer_[i] = 0;
+ }
vm_tag_ = VMTag::kInvalidTagId;
user_tag_ = UserTags::kDefaultUserTag;
sp_ = 0;
+ lr_ = 0;
fp_ = 0;
state_ = 0;
uword* pcs = GetPCArray();
@@ -125,16 +169,16 @@
}
}
- // Isolate sample was taken from.
- Isolate* isolate() const {
- return isolate_;
- }
-
// Timestamp sample was taken at.
int64_t timestamp() const {
return timestamp_;
}
+ // Top most pc.
+ uword pc() const {
+ return At(0);
+ }
+
// Get stack trace entry.
uword At(intptr_t i) const {
ASSERT(i >= 0);
@@ -190,6 +234,14 @@
fp_ = fp;
}
+ uword lr() const {
+ return lr_;
+ }
+
+ void set_lr(uword link_register) {
+ lr_ = link_register;
+ }
+
void InsertCallerForTopFrame(uword pc) {
if (pcs_length_ == 1) {
// Only sampling top frame.
@@ -203,6 +255,7 @@
}
// Insert caller for top frame.
pcs[1] = pc;
+ set_missing_frame_inserted(true);
}
bool processed() const {
@@ -237,6 +290,22 @@
state_ = ExitFrameBit::update(exit_frame_sample, state_);
}
+ bool missing_frame_inserted() const {
+ return MissingFrameInsertedBit::decode(state_);
+ }
+
+ void set_missing_frame_inserted(bool missing_frame_inserted) {
+ state_ = MissingFrameInsertedBit::update(missing_frame_inserted, state_);
+ }
+
+ bool truncated_trace() const {
+ return TruncatedTraceBit::decode(state_);
+ }
+
+ void set_truncated_trace(bool truncated_trace) {
+ state_ = TruncatedTraceBit::update(truncated_trace, state_);
+ }
+
static void InitOnce();
static intptr_t instance_size() {
@@ -245,6 +314,11 @@
uword* GetPCArray() const;
+ static const int kStackBufferSizeInWords = 2;
+ uword* GetStackBuffer() {
+ return &stack_buffer_[0];
+ }
+
private:
static intptr_t instance_size_;
static intptr_t pcs_length_;
@@ -253,20 +327,27 @@
kLeafFrameIsDartBit = 1,
kIgnoreBit = 2,
kExitFrameBit = 3,
+ kMissingFrameInsertedBit = 4,
+ kTruncatedTrace = 5,
};
class ProcessedBit : public BitField<bool, kProcessedBit, 1> {};
class LeafFrameIsDart : public BitField<bool, kLeafFrameIsDartBit, 1> {};
class IgnoreBit : public BitField<bool, kIgnoreBit, 1> {};
class ExitFrameBit : public BitField<bool, kExitFrameBit, 1> {};
+ class MissingFrameInsertedBit
+ : public BitField<bool, kMissingFrameInsertedBit, 1> {};
+ class TruncatedTraceBit : public BitField<bool, kTruncatedTrace, 1> {};
int64_t timestamp_;
ThreadId tid_;
Isolate* isolate_;
uword pc_marker_;
+ uword stack_buffer_[kStackBufferSizeInWords];
uword vm_tag_;
uword user_tag_;
uword sp_;
uword fp_;
+ uword lr_;
uword state_;
/* There are a variable number of words that follow, the words hold the
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc
index a6457d6..b6e6018 100644
--- a/runtime/vm/profiler_service.cc
+++ b/runtime/vm/profiler_service.cc
@@ -15,9 +15,331 @@
namespace dart {
DECLARE_FLAG(int, profile_depth);
-DECLARE_FLAG(bool, trace_profiler);
DECLARE_FLAG(int, profile_period);
+DEFINE_FLAG(bool, trace_profiler, false, "Trace profiler.");
+
+// Forward declarations.
+class CodeRegion;
+class ProfileFunction;
+class ProfileFunctionTable;
+
+
+class DeoptimizedCodeSet : public ZoneAllocated {
+ public:
+ explicit DeoptimizedCodeSet(Isolate* isolate)
+ : previous_(
+ GrowableObjectArray::ZoneHandle(isolate->deoptimized_code_array())),
+ current_(GrowableObjectArray::ZoneHandle(
+ previous_.IsNull() ? GrowableObjectArray::null() :
+ GrowableObjectArray::New())) {
+ }
+
+ void Add(const Code& code) {
+ if (current_.IsNull()) {
+ return;
+ }
+ if (!Contained(code, previous_) || Contained(code, current_)) {
+ return;
+ }
+ current_.Add(code);
+ }
+
+ void UpdateIsolate(Isolate* isolate) {
+ intptr_t size_before = SizeOf(previous_);
+ intptr_t size_after = SizeOf(current_);
+ if ((size_before > 0) && FLAG_trace_profiler) {
+ intptr_t length_before = previous_.Length();
+ intptr_t length_after = current_.Length();
+ OS::Print("Updating isolate deoptimized code array: "
+ "%" Pd " -> %" Pd " [%" Pd " -> %" Pd "]\n",
+ size_before, size_after, length_before, length_after);
+ }
+ isolate->set_deoptimized_code_array(current_);
+ }
+
+ private:
+ bool Contained(const Code& code, const GrowableObjectArray& array) {
+ if (array.IsNull() || code.IsNull()) {
+ return false;
+ }
+ NoGCScope no_gc_scope;
+ for (intptr_t i = 0; array.Length(); i++) {
+ if (code.raw() == array.At(i)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ intptr_t SizeOf(const GrowableObjectArray& array) {
+ if (array.IsNull()) {
+ return 0;
+ }
+ Code& code = Code::ZoneHandle();
+ intptr_t size = 0;
+ for (intptr_t i = 0; i < array.Length(); i++) {
+ code ^= array.At(i);
+ ASSERT(!code.IsNull());
+ size += code.Size();
+ }
+ return size;
+ }
+
+ // Array holding code that is being kept around only for the profiler.
+ const GrowableObjectArray& previous_;
+ // Array holding code that should continue to be kept around for the profiler.
+ const GrowableObjectArray& current_;
+};
+
+class ProfileFunction : public ZoneAllocated {
+ public:
+ enum Kind {
+ kDartFunction, // Dart function.
+ kNativeFunction, // Synthetic function for Native (C/C++).
+ kTagFunction, // Synthetic function for a VM or User tag.
+ kStubFunction, // Synthetic function for stub code.
+ kUnkownFunction, // A singleton function for unknown objects.
+ };
+ ProfileFunction(Kind kind,
+ const char* name,
+ const Function& function,
+ const intptr_t table_index)
+ : kind_(kind),
+ name_(name),
+ function_(Function::ZoneHandle(function.raw())),
+ table_index_(table_index),
+ code_objects_(new ZoneGrowableArray<intptr_t>()),
+ exclusive_ticks_(0),
+ inclusive_ticks_(0),
+ inclusive_tick_serial_(0) {
+ ASSERT((kind_ != kDartFunction) || !function_.IsNull());
+ ASSERT((kind_ != kDartFunction) || (table_index_ >= 0));
+ ASSERT(code_objects_->length() == 0);
+ }
+
+ const char* name() const {
+ ASSERT(name_ != NULL);
+ return name_;
+ }
+
+ RawFunction* function() const {
+ return function_.raw();
+ }
+
+ intptr_t index() const {
+ return table_index_;
+ }
+
+ Kind kind() const {
+ return kind_;
+ }
+
+ const char* KindToCString(Kind kind) {
+ switch (kind) {
+ case kDartFunction:
+ return "Dart";
+ case kNativeFunction:
+ return "Native";
+ case kTagFunction:
+ return "Tag";
+ case kStubFunction:
+ return "Stub";
+ case kUnkownFunction:
+ return "Collected";
+ default:
+ UNIMPLEMENTED();
+ return "";
+ }
+ }
+
+ void Dump() {
+ const char* n = (name_ == NULL) ? "<NULL>" : name_;
+ const char* fn = "";
+ if (!function_.IsNull()) {
+ fn = function_.ToQualifiedCString();
+ }
+ OS::Print("%s %s [%s]", KindToCString(kind()), n, fn);
+ }
+
+ void AddCodeObjectIndex(intptr_t index) {
+ for (intptr_t i = 0; i < code_objects_->length(); i++) {
+ if ((*code_objects_)[i] == index) {
+ return;
+ }
+ }
+ code_objects_->Add(index);
+ }
+
+ intptr_t inclusive_ticks() const {
+ return inclusive_ticks_;
+ }
+
+ intptr_t exclusive_ticks() const {
+ return exclusive_ticks_;
+ }
+
+ void Tick(bool exclusive, intptr_t serial) {
+ // Assert that exclusive ticks are never passed a valid serial number.
+ ASSERT((exclusive && (serial == -1)) || (!exclusive && (serial != -1)));
+ if (!exclusive && (inclusive_tick_serial_ == serial)) {
+ // We've already given this object an inclusive tick for this sample.
+ return;
+ }
+ if (exclusive) {
+ exclusive_ticks_++;
+ } else {
+ inclusive_ticks_++;
+ // Mark the last serial we ticked the inclusive count.
+ inclusive_tick_serial_ = serial;
+ }
+ }
+
+ void PrintToJSONObject(JSONObject* func) {
+ func->AddProperty("type", "@Function");
+ func->AddProperty("name", name());
+ func->AddProperty("kind", KindToCString(kind()));
+ }
+
+ void PrintToJSONArray(JSONArray* functions) {
+ JSONObject obj(functions);
+ obj.AddProperty("kind", KindToCString(kind()));
+ obj.AddPropertyF("inclusiveTicks", "%" Pd "", inclusive_ticks());
+ obj.AddPropertyF("exclusiveTicks", "%" Pd "", exclusive_ticks());
+ if (kind() == kDartFunction) {
+ ASSERT(!function_.IsNull());
+ obj.AddProperty("function", function_);
+ } else {
+ JSONObject func(&obj, "function");
+ PrintToJSONObject(&func);
+ }
+ {
+ JSONArray codes(&obj, "codes");
+ for (intptr_t i = 0; i < code_objects_->length(); i++) {
+ intptr_t code_index = (*code_objects_)[i];
+ codes.AddValue(code_index);
+ }
+ }
+ }
+
+ private:
+ const Kind kind_;
+ const char* name_;
+ const Function& function_;
+ const intptr_t table_index_;
+ ZoneGrowableArray<intptr_t>* code_objects_;
+ intptr_t exclusive_ticks_;
+ intptr_t inclusive_ticks_;
+ intptr_t inclusive_tick_serial_;
+};
+
+
+class ProfileFunctionTable : public ValueObject {
+ public:
+ ProfileFunctionTable()
+ : null_function_(Function::ZoneHandle()),
+ table_(new ZoneGrowableArray<ProfileFunction*>()),
+ unknown_function_(NULL) {
+ }
+
+ ProfileFunction* LookupOrAdd(const Function& function) {
+ ASSERT(!function.IsNull());
+ ProfileFunction* profile_function = Lookup(function);
+ if (profile_function != NULL) {
+ return profile_function;
+ }
+ return Add(function);
+ }
+
+ intptr_t LookupIndex(const Function& function) {
+ ASSERT(!function.IsNull());
+ for (intptr_t i = 0; i < table_->length(); i++) {
+ ProfileFunction* profile_function = (*table_)[i];
+ if (profile_function->function() == function.raw()) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ ProfileFunction* GetUnknown() {
+ if (unknown_function_ == NULL) {
+ // Construct.
+ unknown_function_ = Add(ProfileFunction::kUnkownFunction,
+ "<unknown Dart function>");
+ }
+ ASSERT(unknown_function_ != NULL);
+ return unknown_function_;
+ }
+
+ // No protection against being called more than once for the same tag_id.
+ ProfileFunction* AddTag(uword tag_id, const char* name) {
+ // TODO(johnmccutchan): Canonicalize ProfileFunctions for tags.
+ return Add(ProfileFunction::kTagFunction, name);
+ }
+
+ // No protection against being called more than once for the same native
+ // address.
+ ProfileFunction* AddNative(uword start_address, const char* name) {
+ // TODO(johnmccutchan): Canonicalize ProfileFunctions for natives.
+ return Add(ProfileFunction::kNativeFunction, name);
+ }
+
+ // No protection against being called more tha once for the same stub.
+ ProfileFunction* AddStub(uword start_address, const char* name) {
+ return Add(ProfileFunction::kStubFunction, name);
+ }
+
+ intptr_t Length() const {
+ return table_->length();
+ }
+
+ ProfileFunction* At(intptr_t i) const {
+ ASSERT(i >= 0);
+ ASSERT(i < Length());
+ return (*table_)[i];
+ }
+
+ private:
+ ProfileFunction* Add(ProfileFunction::Kind kind, const char* name) {
+ ASSERT(kind != ProfileFunction::kDartFunction);
+ ASSERT(name != NULL);
+ ProfileFunction* profile_function =
+ new ProfileFunction(kind,
+ name,
+ null_function_,
+ table_->length());
+ table_->Add(profile_function);
+ return profile_function;
+ }
+
+ ProfileFunction* Add(const Function& function) {
+ ASSERT(Lookup(function) == NULL);
+ ProfileFunction* profile_function =
+ new ProfileFunction(ProfileFunction::kDartFunction,
+ NULL,
+ function,
+ table_->length());
+ table_->Add(profile_function);
+ return profile_function;
+ }
+
+ ProfileFunction* Lookup(const Function& function) {
+ ASSERT(!function.IsNull());
+ intptr_t index = LookupIndex(function);
+ if (index == -1) {
+ return NULL;
+ }
+ return (*table_)[index];
+ }
+
+ const Function& null_function_;
+ ZoneGrowableArray<ProfileFunction*>* table_;
+
+ ProfileFunction* unknown_function_;
+};
+
+
struct AddressEntry {
uword pc;
intptr_t exclusive_ticks;
@@ -32,109 +354,8 @@
}
};
-
-struct CallEntry {
- intptr_t code_table_index;
- intptr_t count;
-};
-
-
typedef bool (*RegionCompare)(uword pc, uword region_start, uword region_end);
-
-class CodeRegionTrieNode : public ZoneAllocated {
- public:
- explicit CodeRegionTrieNode(intptr_t code_region_index)
- : code_region_index_(code_region_index),
- count_(0),
- children_(new ZoneGrowableArray<CodeRegionTrieNode*>()) {
- }
-
- void Tick() {
- ASSERT(code_region_index_ >= 0);
- count_++;
- }
-
- intptr_t count() const {
- ASSERT(code_region_index_ >= 0);
- return count_;
- }
-
- intptr_t code_region_index() const {
- return code_region_index_;
- }
-
- ZoneGrowableArray<CodeRegionTrieNode*>& children() const {
- return *children_;
- }
-
- CodeRegionTrieNode* GetChild(intptr_t child_code_region_index) {
- const intptr_t length = children_->length();
- intptr_t i = 0;
- while (i < length) {
- CodeRegionTrieNode* child = (*children_)[i];
- if (child->code_region_index() == child_code_region_index) {
- return child;
- }
- if (child->code_region_index() > child_code_region_index) {
- break;
- }
- i++;
- }
- // Add new CodeRegion, sorted by CodeRegionTable index.
- CodeRegionTrieNode* child = new CodeRegionTrieNode(child_code_region_index);
- if (i < length) {
- // Insert at i.
- children_->InsertAt(i, child);
- } else {
- // Add to end.
- children_->Add(child);
- }
- return child;
- }
-
- // Sort this's children and (recursively) all descendants by count.
- // This should only be called after the trie is completely built.
- void SortByCount() {
- children_->Sort(CodeRegionTrieNodeCompare);
- ZoneGrowableArray<CodeRegionTrieNode*>& kids = children();
- intptr_t child_count = kids.length();
- // Recurse.
- for (intptr_t i = 0; i < child_count; i++) {
- kids[i]->SortByCount();
- }
- }
-
- void PrintToJSONArray(JSONArray* array) const {
- ASSERT(array != NULL);
- // Write CodeRegion index.
- array->AddValue(code_region_index_);
- // Write count.
- array->AddValue(count_);
- // Write number of children.
- ZoneGrowableArray<CodeRegionTrieNode*>& kids = children();
- intptr_t child_count = kids.length();
- array->AddValue(child_count);
- // Recurse.
- for (intptr_t i = 0; i < child_count; i++) {
- kids[i]->PrintToJSONArray(array);
- }
- }
-
- private:
- static int CodeRegionTrieNodeCompare(CodeRegionTrieNode* const* a,
- CodeRegionTrieNode* const* b) {
- ASSERT(a != NULL);
- ASSERT(b != NULL);
- return (*b)->count() - (*a)->count();
- }
-
- const intptr_t code_region_index_;
- intptr_t count_;
- ZoneGrowableArray<CodeRegionTrieNode*>* children_;
-};
-
-
// A contiguous address region that holds code. Each CodeRegion has a "kind"
// which describes the type of code contained inside the region. Each
// region covers the following interval: [start, end).
@@ -148,7 +369,11 @@
kTagCode, // A special kind of code representing a tag.
};
- CodeRegion(Kind kind, uword start, uword end, int64_t timestamp)
+ CodeRegion(Kind kind,
+ uword start,
+ uword end,
+ int64_t timestamp,
+ const Code& code)
: kind_(kind),
start_(start),
end_(end),
@@ -158,13 +383,14 @@
name_(NULL),
compile_timestamp_(timestamp),
creation_serial_(0),
- address_table_(new ZoneGrowableArray<AddressEntry>()),
- callers_table_(new ZoneGrowableArray<CallEntry>()),
- callees_table_(new ZoneGrowableArray<CallEntry>()) {
+ code_(Code::ZoneHandle(code.raw())),
+ profile_function_(NULL),
+ code_table_index_(-1) {
ASSERT(start_ < end_);
+ // Ensure all kDartCode have a valid code_ object.
+ ASSERT((kind != kDartCode) || (!code_.IsNull()));
}
-
uword start() const { return start_; }
void set_start(uword start) {
start_ = start;
@@ -227,6 +453,91 @@
const_cast<char*>(name_)[len] = '\0';
}
+ bool IsOptimizedDart() const {
+ return !code_.IsNull() && code_.is_optimized();
+ }
+
+ RawCode* code() const {
+ return code_.raw();
+ }
+
+ ProfileFunction* SetFunctionAndName(ProfileFunctionTable* table) {
+ ASSERT(profile_function_ == NULL);
+
+ ProfileFunction* function = NULL;
+ if ((kind() == kReusedCode) || (kind() == kCollectedCode)) {
+ if (name() == NULL) {
+ // Lazily set generated name.
+ GenerateAndSetSymbolName("[Collected]");
+ }
+ // Map these to a canonical unknown function.
+ function = table->GetUnknown();
+ } else if (kind() == kDartCode) {
+ ASSERT(!code_.IsNull());
+ const Object& obj = Object::Handle(code_.owner());
+ if (obj.IsFunction()) {
+ const String& user_name = String::Handle(code_.PrettyName());
+ function = table->LookupOrAdd(Function::Cast(obj));
+ SetName(user_name.ToCString());
+ } else {
+ // A stub.
+ const String& user_name = String::Handle(code_.PrettyName());
+ function = table->AddStub(start(), user_name.ToCString());
+ SetName(user_name.ToCString());
+ }
+ } else if (kind() == kNativeCode) {
+ if (name() == NULL) {
+ // Lazily set generated name.
+ GenerateAndSetSymbolName("[Native]");
+ }
+ function = table->AddNative(start(), name());
+ } else if (kind() == kTagCode) {
+ if (name() == NULL) {
+ if (UserTags::IsUserTag(start())) {
+ const char* tag_name = UserTags::TagName(start());
+ ASSERT(tag_name != NULL);
+ SetName(tag_name);
+ } else if (VMTag::IsVMTag(start()) ||
+ VMTag::IsRuntimeEntryTag(start()) ||
+ VMTag::IsNativeEntryTag(start())) {
+ const char* tag_name = VMTag::TagName(start());
+ ASSERT(tag_name != NULL);
+ SetName(tag_name);
+ } else {
+ if (start() == VMTag::kRootTagId) {
+ SetName("Root");
+ } else {
+ ASSERT(start() == VMTag::kTruncatedTagId);
+ SetName("[Truncated]");
+ }
+ }
+ }
+ function = table->AddTag(start(), name());
+ } else {
+ UNREACHABLE();
+ }
+ ASSERT(function != NULL);
+ // Register this CodeRegion with this function.
+ function->AddCodeObjectIndex(code_table_index());
+ profile_function_ = function;
+ return profile_function_;
+ }
+
+ ProfileFunction* function() const {
+ ASSERT(profile_function_ != NULL);
+ return profile_function_;
+ }
+
+ void set_code_table_index(intptr_t code_table_index) {
+ ASSERT(code_table_index_ == -1);
+ ASSERT(code_table_index != -1);
+ code_table_index_ = code_table_index;
+ }
+ intptr_t code_table_index() const {
+ ASSERT(code_table_index_ != -1);
+ return code_table_index_;
+ }
+
Kind kind() const { return kind_; }
static const char* KindToCString(Kind kind) {
@@ -273,14 +584,6 @@
TickAddress(pc, exclusive);
}
- void AddCaller(intptr_t index, intptr_t count) {
- AddCallEntry(callers_table_, index, count);
- }
-
- void AddCallee(intptr_t index, intptr_t count) {
- AddCallEntry(callees_table_, index, count);
- }
-
void PrintNativeCode(JSONObject* profile_code_obj) {
ASSERT(kind() == kNativeCode);
JSONObject obj(profile_code_obj, "code");
@@ -289,14 +592,10 @@
obj.AddProperty("name", name());
obj.AddPropertyF("start", "%" Px "", start());
obj.AddPropertyF("end", "%" Px "", end());
- obj.AddPropertyF("id", "code/native-%" Px "", start());
{
// Generate a fake function entry.
JSONObject func(&obj, "function");
- func.AddProperty("type", "@Function");
- func.AddPropertyF("id", "functions/native-%" Px "", start());
- func.AddProperty("name", name());
- func.AddProperty("kind", "Native");
+ profile_function_->PrintToJSONObject(&func);
}
}
@@ -308,14 +607,10 @@
obj.AddProperty("name", name());
obj.AddPropertyF("start", "%" Px "", start());
obj.AddPropertyF("end", "%" Px "", end());
- obj.AddPropertyF("id", "code/collected-%" Px "", start());
{
// Generate a fake function entry.
JSONObject func(&obj, "function");
- func.AddProperty("type", "@Function");
- obj.AddPropertyF("id", "functions/collected-%" Px "", start());
- func.AddProperty("name", name());
- func.AddProperty("kind", "Collected");
+ profile_function_->PrintToJSONObject(&func);
}
}
@@ -323,126 +618,69 @@
ASSERT(kind() == kReusedCode);
JSONObject obj(profile_code_obj, "code");
obj.AddProperty("type", "@Code");
- obj.AddProperty("kind", "Reused");
+ obj.AddProperty("kind", "Collected");
obj.AddProperty("name", name());
obj.AddPropertyF("start", "%" Px "", start());
obj.AddPropertyF("end", "%" Px "", end());
- obj.AddPropertyF("id", "code/reused-%" Px "", start());
{
// Generate a fake function entry.
JSONObject func(&obj, "function");
- func.AddProperty("type", "@Function");
- obj.AddPropertyF("id", "functions/reused-%" Px "", start());
- func.AddProperty("name", name());
- func.AddProperty("kind", "Reused");
+ ASSERT(profile_function_ != NULL);
+ profile_function_->PrintToJSONObject(&func);
}
}
- void PrintTagCode(JSONObject* profile_code_obj) {
+ void PrintTagCode(JSONObject* profile_code_obj) {
ASSERT(kind() == kTagCode);
JSONObject obj(profile_code_obj, "code");
obj.AddProperty("type", "@Code");
obj.AddProperty("kind", "Tag");
- obj.AddPropertyF("id", "code/tag-%" Px "", start());
obj.AddProperty("name", name());
obj.AddPropertyF("start", "%" Px "", start());
obj.AddPropertyF("end", "%" Px "", end());
{
// Generate a fake function entry.
JSONObject func(&obj, "function");
- func.AddProperty("type", "@Function");
- func.AddProperty("kind", "Tag");
- obj.AddPropertyF("id", "functions/tag-%" Px "", start());
- func.AddProperty("name", name());
+ ASSERT(profile_function_ != NULL);
+ profile_function_->PrintToJSONObject(&func);
}
}
- void PrintToJSONArray(Isolate* isolate, JSONArray* events) {
- JSONObject obj(events);
+ void PrintToJSONArray(JSONArray* codes) {
+ JSONObject obj(codes);
obj.AddProperty("kind", KindToCString(kind()));
- obj.AddPropertyF("inclusive_ticks", "%" Pd "", inclusive_ticks());
- obj.AddPropertyF("exclusive_ticks", "%" Pd "", exclusive_ticks());
+ obj.AddPropertyF("inclusiveTicks", "%" Pd "", inclusive_ticks());
+ obj.AddPropertyF("exclusiveTicks", "%" Pd "", exclusive_ticks());
if (kind() == kDartCode) {
- // Look up code in Dart heap.
- Code& code = Code::Handle(isolate);
- code ^= Code::LookupCode(start());
- if (code.IsNull()) {
- // Code is a stub in the Vm isolate.
- code ^= Code::LookupCodeInVmIsolate(start());
- }
- ASSERT(!code.IsNull());
- obj.AddProperty("code", code);
+ ASSERT(!code_.IsNull());
+ obj.AddProperty("code", code_);
} else if (kind() == kCollectedCode) {
- if (name() == NULL) {
- // Lazily set generated name.
- GenerateAndSetSymbolName("[Collected]");
- }
PrintCollectedCode(&obj);
} else if (kind() == kReusedCode) {
- if (name() == NULL) {
- // Lazily set generated name.
- GenerateAndSetSymbolName("[Reused]");
- }
PrintOverwrittenCode(&obj);
} else if (kind() == kTagCode) {
- if (name() == NULL) {
- if (UserTags::IsUserTag(start())) {
- const char* tag_name = UserTags::TagName(start());
- ASSERT(tag_name != NULL);
- SetName(tag_name);
- } else if (VMTag::IsVMTag(start()) ||
- VMTag::IsRuntimeEntryTag(start()) ||
- VMTag::IsNativeEntryTag(start())) {
- const char* tag_name = VMTag::TagName(start());
- ASSERT(tag_name != NULL);
- SetName(tag_name);
- } else {
- ASSERT(start() == 0);
- SetName("root");
- }
- }
PrintTagCode(&obj);
} else {
ASSERT(kind() == kNativeCode);
- if (name() == NULL) {
- // Lazily set generated name.
- GenerateAndSetSymbolName("[Native]");
- }
PrintNativeCode(&obj);
}
{
JSONArray ticks(&obj, "ticks");
- for (intptr_t i = 0; i < address_table_->length(); i++) {
- const AddressEntry& entry = (*address_table_)[i];
+ for (intptr_t i = 0; i < address_table_.length(); i++) {
+ const AddressEntry& entry = address_table_[i];
ticks.AddValueF("%" Px "", entry.pc);
ticks.AddValueF("%" Pd "", entry.exclusive_ticks);
ticks.AddValueF("%" Pd "", entry.inclusive_ticks);
}
}
- {
- JSONArray callers(&obj, "callers");
- for (intptr_t i = 0; i < callers_table_->length(); i++) {
- const CallEntry& entry = (*callers_table_)[i];
- callers.AddValueF("%" Pd "", entry.code_table_index);
- callers.AddValueF("%" Pd "", entry.count);
- }
- }
- {
- JSONArray callees(&obj, "callees");
- for (intptr_t i = 0; i < callees_table_->length(); i++) {
- const CallEntry& entry = (*callees_table_)[i];
- callees.AddValueF("%" Pd "", entry.code_table_index);
- callees.AddValueF("%" Pd "", entry.count);
- }
- }
}
private:
void TickAddress(uword pc, bool exclusive) {
- const intptr_t length = address_table_->length();
+ const intptr_t length = address_table_.length();
intptr_t i = 0;
for (; i < length; i++) {
- AddressEntry& entry = (*address_table_)[i];
+ AddressEntry& entry = address_table_[i];
if (entry.pc == pc) {
// Tick the address entry.
entry.tick(exclusive);
@@ -460,35 +698,10 @@
entry.tick(exclusive);
if (i < length) {
// Insert at i.
- address_table_->InsertAt(i, entry);
+ address_table_.InsertAt(i, entry);
} else {
// Add to end.
- address_table_->Add(entry);
- }
- }
-
-
- void AddCallEntry(ZoneGrowableArray<CallEntry>* table, intptr_t index,
- intptr_t count) {
- const intptr_t length = table->length();
- intptr_t i = 0;
- for (; i < length; i++) {
- CallEntry& entry = (*table)[i];
- if (entry.code_table_index == index) {
- entry.count += count;
- return;
- }
- if (entry.code_table_index > index) {
- break;
- }
- }
- CallEntry entry;
- entry.code_table_index = index;
- entry.count = count;
- if (i < length) {
- table->InsertAt(i, entry);
- } else {
- table->Add(entry);
+ address_table_.Add(entry);
}
}
@@ -519,9 +732,13 @@
int64_t compile_timestamp_;
// Serial number at which this CodeRegion was created.
intptr_t creation_serial_;
- ZoneGrowableArray<AddressEntry>* address_table_;
- ZoneGrowableArray<CallEntry>* callers_table_;
- ZoneGrowableArray<CallEntry>* callees_table_;
+ // Dart code object (may be null).
+ const Code& code_;
+ // Pointer to ProfileFunction.
+ ProfileFunction* profile_function_;
+ // Final code table index.
+ intptr_t code_table_index_;
+ ZoneGrowableArray<AddressEntry> address_table_;
DISALLOW_COPY_AND_ASSIGN(CodeRegion);
};
@@ -641,12 +858,10 @@
UNREACHABLE();
}
-#if defined(DEBUG)
void Verify() {
VerifyOrder();
VerifyOverlap();
}
-#endif
void DebugPrint() {
OS::Print("Dumping CodeRegionTable:\n");
@@ -695,7 +910,6 @@
region->AdjustExtent(start, end);
}
-#if defined(DEBUG)
void VerifyOrder() {
const intptr_t length = code_region_table_->length();
if (length == 0) {
@@ -722,124 +936,35 @@
}
}
}
-#endif
ZoneGrowableArray<CodeRegion*>* code_region_table_;
};
-class FixTopFrameVisitor : public SampleVisitor {
- public:
- explicit FixTopFrameVisitor(Isolate* isolate)
- : SampleVisitor(isolate),
- vm_isolate_(Dart::vm_isolate()) {
- }
-
- void VisitSample(Sample* sample) {
- if (sample->processed()) {
- // Already processed.
- return;
- }
- REUSABLE_CODE_HANDLESCOPE(isolate());
- // Mark that we've processed this sample.
- sample->set_processed(true);
- // Lookup code object for leaf frame.
- Code& code = reused_code_handle.Handle();
- code = FindCodeForPC(sample->At(0));
- sample->set_leaf_frame_is_dart(!code.IsNull());
- if (sample->pc_marker() == 0) {
- // No pc marker. Nothing to do.
- return;
- }
- if (!code.IsNull() && (code.compile_timestamp() > sample->timestamp())) {
- // Code compiled after sample. Ignore.
- return;
- }
- if (sample->leaf_frame_is_dart()) {
- CheckForMissingDartFrame(code, sample);
- }
- }
-
- private:
- void CheckForMissingDartFrame(const Code& code, Sample* sample) const {
- // Some stubs (and intrinsics) do not push a frame onto the stack leaving
- // the frame pointer in the caller.
- //
- // PC -> STUB
- // FP -> DART3 <-+
- // DART2 <-| <- TOP FRAME RETURN ADDRESS.
- // DART1 <-|
- // .....
- //
- // In this case, traversing the linked stack frames will not collect a PC
- // inside DART3. The stack will incorrectly be: STUB, DART2, DART1.
- // In Dart code, after pushing the FP onto the stack, an IP in the current
- // function is pushed onto the stack as well. This stack slot is called
- // the PC marker. We can use the PC marker to insert DART3 into the stack
- // so that it will correctly be: STUB, DART3, DART2, DART1. Note the
- // inserted PC may not accurately reflect the true return address from STUB.
- ASSERT(!code.IsNull());
- if (sample->sp() == sample->fp()) {
- // Haven't pushed pc marker yet.
- return;
- }
- uword pc_marker = sample->pc_marker();
- if (code.ContainsInstructionAt(pc_marker)) {
- // PC marker is in the same code as pc, no missing frame.
- return;
- }
- if (!ContainedInDartCodeHeaps(pc_marker)) {
- // Not a valid PC marker.
- return;
- }
- sample->InsertCallerForTopFrame(pc_marker);
- }
-
- bool ContainedInDartCodeHeaps(uword pc) const {
- return isolate()->heap()->CodeContains(pc) ||
- vm_isolate()->heap()->CodeContains(pc);
- }
-
- Isolate* vm_isolate() const {
- return vm_isolate_;
- }
-
- RawCode* FindCodeForPC(uword pc) const {
- // Check current isolate for pc.
- if (isolate()->heap()->CodeContains(pc)) {
- return Code::LookupCode(pc);
- }
- // Check VM isolate for pc.
- if (vm_isolate()->heap()->CodeContains(pc)) {
- return Code::LookupCodeInVmIsolate(pc);
- }
- return Code::null();
- }
-
- Isolate* vm_isolate_;
-};
-
-
class CodeRegionTableBuilder : public SampleVisitor {
public:
CodeRegionTableBuilder(Isolate* isolate,
CodeRegionTable* live_code_table,
CodeRegionTable* dead_code_table,
- CodeRegionTable* tag_code_table)
+ CodeRegionTable* tag_code_table,
+ DeoptimizedCodeSet* deoptimized_code)
: SampleVisitor(isolate),
live_code_table_(live_code_table),
dead_code_table_(dead_code_table),
tag_code_table_(tag_code_table),
isolate_(isolate),
- vm_isolate_(Dart::vm_isolate()) {
+ vm_isolate_(Dart::vm_isolate()),
+ null_code_(Code::ZoneHandle()),
+ deoptimized_code_(deoptimized_code) {
ASSERT(live_code_table_ != NULL);
ASSERT(dead_code_table_ != NULL);
ASSERT(tag_code_table_ != NULL);
+ ASSERT(isolate_ != NULL);
+ ASSERT(vm_isolate_ != NULL);
+ ASSERT(null_code_.IsNull());
frames_ = 0;
min_time_ = kMaxInt64;
max_time_ = 0;
- ASSERT(isolate_ != NULL);
- ASSERT(vm_isolate_ != NULL);
}
void VisitSample(Sample* sample) {
@@ -859,7 +984,7 @@
CreateTag(sample->vm_tag());
// Make sure user tag is created.
CreateUserTag(sample->user_tag());
- // Exclusive tick for bottom frame if we aren't sampled from an exit frame.
+ // Exclusive tick for top frame if we aren't sampled from an exit frame.
if (!sample->exit_frame_sample()) {
Tick(sample->At(0), true, timestamp);
}
@@ -890,7 +1015,8 @@
CodeRegion* region = new CodeRegion(CodeRegion::kTagCode,
tag,
tag + 1,
- 0);
+ 0,
+ null_code_);
index = tag_code_table_->InsertCodeRegion(region);
ASSERT(index >= 0);
region->set_creation_serial(visited());
@@ -901,18 +1027,7 @@
// None set.
return;
}
- intptr_t index = tag_code_table_->FindIndex(tag);
- if (index >= 0) {
- // Already created.
- return;
- }
- CodeRegion* region = new CodeRegion(CodeRegion::kTagCode,
- tag,
- tag + 1,
- 0);
- index = tag_code_table_->InsertCodeRegion(region);
- ASSERT(index >= 0);
- region->set_creation_serial(visited());
+ return CreateTag(tag);
}
void Tick(uword pc, bool exclusive, int64_t timestamp) {
@@ -958,7 +1073,8 @@
CodeRegion* region = new CodeRegion(CodeRegion::kReusedCode,
pc,
pc + 1,
- 0);
+ 0,
+ null_code_);
intptr_t index = dead_code_table_->InsertCodeRegion(region);
region->set_creation_serial(visited());
ASSERT(index >= 0);
@@ -973,25 +1089,34 @@
if (isolate_->heap()->CodeContains(pc)) {
code ^= Code::LookupCode(pc);
if (!code.IsNull()) {
- return new CodeRegion(CodeRegion::kDartCode, code.EntryPoint(),
+ deoptimized_code_->Add(code);
+ return new CodeRegion(CodeRegion::kDartCode,
+ code.EntryPoint(),
code.EntryPoint() + code.Size(),
- code.compile_timestamp());
+ code.compile_timestamp(),
+ code);
}
- return new CodeRegion(CodeRegion::kCollectedCode, pc,
+ return new CodeRegion(CodeRegion::kCollectedCode,
+ pc,
(pc & kDartCodeAlignmentMask) + kDartCodeAlignment,
- 0);
+ 0,
+ code);
}
// Check VM isolate for pc.
if (vm_isolate_->heap()->CodeContains(pc)) {
code ^= Code::LookupCodeInVmIsolate(pc);
if (!code.IsNull()) {
- return new CodeRegion(CodeRegion::kDartCode, code.EntryPoint(),
+ return new CodeRegion(CodeRegion::kDartCode,
+ code.EntryPoint(),
code.EntryPoint() + code.Size(),
- code.compile_timestamp());
+ code.compile_timestamp(),
+ code);
}
- return new CodeRegion(CodeRegion::kCollectedCode, pc,
+ return new CodeRegion(CodeRegion::kCollectedCode,
+ pc,
(pc & kDartCodeAlignmentMask) + kDartCodeAlignment,
- 0);
+ 0,
+ code);
}
// Check NativeSymbolResolver for pc.
uintptr_t native_start = 0;
@@ -999,11 +1124,19 @@
&native_start);
if (native_name == NULL) {
// No native name found.
- return new CodeRegion(CodeRegion::kNativeCode, pc, pc + 1, 0);
+ return new CodeRegion(CodeRegion::kNativeCode,
+ pc,
+ pc + 1,
+ 0,
+ code);
}
ASSERT(pc >= native_start);
CodeRegion* code_region =
- new CodeRegion(CodeRegion::kNativeCode, native_start, pc + 1, 0);
+ new CodeRegion(CodeRegion::kNativeCode,
+ native_start,
+ pc + 1,
+ 0,
+ code);
code_region->SetName(native_name);
free(native_name);
return code_region;
@@ -1017,55 +1150,307 @@
CodeRegionTable* tag_code_table_;
Isolate* isolate_;
Isolate* vm_isolate_;
+ const Code& null_code_;
+ DeoptimizedCodeSet* deoptimized_code_;
};
-class CodeRegionExclusiveTrieBuilder : public SampleVisitor {
+class CodeRegionFunctionMapper : public ValueObject {
public:
- CodeRegionExclusiveTrieBuilder(Isolate* isolate,
- CodeRegionTable* live_code_table,
- CodeRegionTable* dead_code_table,
- CodeRegionTable* tag_code_table)
- : SampleVisitor(isolate),
+ CodeRegionFunctionMapper(Isolate* isolate,
+ CodeRegionTable* live_code_table,
+ CodeRegionTable* dead_code_table,
+ CodeRegionTable* tag_code_table,
+ ProfileFunctionTable* function_table)
+ : isolate_(isolate),
live_code_table_(live_code_table),
dead_code_table_(dead_code_table),
- tag_code_table_(tag_code_table) {
+ tag_code_table_(tag_code_table),
+ function_table_(function_table) {
+ ASSERT(isolate_ != NULL);
ASSERT(live_code_table_ != NULL);
ASSERT(dead_code_table_ != NULL);
ASSERT(tag_code_table_ != NULL);
dead_code_table_offset_ = live_code_table_->Length();
tag_code_table_offset_ = dead_code_table_offset_ +
dead_code_table_->Length();
- intptr_t root_index = tag_code_table_->FindIndex(0);
- // Verify that the "0" tag does not exist.
+
+ const Code& null_code = Code::ZoneHandle();
+
+ // Create the truncated tag.
+ intptr_t truncated_index =
+ tag_code_table_->FindIndex(VMTag::kTruncatedTagId);
+ ASSERT(truncated_index < 0);
+ CodeRegion* truncated =
+ new CodeRegion(CodeRegion::kTagCode,
+ VMTag::kTruncatedTagId,
+ VMTag::kTruncatedTagId + 1,
+ 0,
+ null_code);
+ truncated_index = tag_code_table_->InsertCodeRegion(truncated);
+ ASSERT(truncated_index >= 0);
+ truncated->set_creation_serial(0);
+
+ // Create the root tag.
+ intptr_t root_index = tag_code_table_->FindIndex(VMTag::kRootTagId);
ASSERT(root_index < 0);
- // Insert the dummy tag CodeRegion that is used for the Trie root.
- CodeRegion* region = new CodeRegion(CodeRegion::kTagCode, 0, 1, 0);
- root_index = tag_code_table_->InsertCodeRegion(region);
+ CodeRegion* root = new CodeRegion(CodeRegion::kTagCode,
+ VMTag::kRootTagId,
+ VMTag::kRootTagId + 1,
+ 0,
+ null_code);
+ root_index = tag_code_table_->InsertCodeRegion(root);
ASSERT(root_index >= 0);
- region->set_creation_serial(0);
- root_ = new CodeRegionTrieNode(tag_code_table_offset_ + root_index);
- set_tag_order(ProfilerService::kUserVM);
+ root->set_creation_serial(0);
}
- void VisitSample(Sample* sample) {
- // Give the root a tick.
- root_->Tick();
- CodeRegionTrieNode* current = root_;
- current = ProcessTags(sample, current);
- // Walk the sampled PCs.
- for (intptr_t i = 0; i < FLAG_profile_depth; i++) {
- if (sample->At(i) == 0) {
- break;
- }
- intptr_t index = FindFinalIndex(sample->At(i), sample->timestamp());
- current = current->GetChild(index);
- current->Tick();
+ void Map() {
+ // Calculate final indexes in code table for each CodeRegion.
+ for (intptr_t i = 0; i < live_code_table_->Length(); i++) {
+ const intptr_t index = i;
+ CodeRegion* region = live_code_table_->At(i);
+ ASSERT(region != NULL);
+ region->set_code_table_index(index);
+ }
+
+ for (intptr_t i = 0; i < dead_code_table_->Length(); i++) {
+ const intptr_t index = dead_code_table_offset_ + i;
+ CodeRegion* region = dead_code_table_->At(i);
+ ASSERT(region != NULL);
+ region->set_code_table_index(index);
+ }
+
+ for (intptr_t i = 0; i < tag_code_table_->Length(); i++) {
+ const intptr_t index = tag_code_table_offset_ + i;
+ CodeRegion* region = tag_code_table_->At(i);
+ ASSERT(region != NULL);
+ region->set_code_table_index(index);
+ }
+
+ // Associate a ProfileFunction with each CodeRegion.
+ for (intptr_t i = 0; i < live_code_table_->Length(); i++) {
+ CodeRegion* region = live_code_table_->At(i);
+ ASSERT(region != NULL);
+ region->SetFunctionAndName(function_table_);
+ }
+
+ for (intptr_t i = 0; i < dead_code_table_->Length(); i++) {
+ CodeRegion* region = dead_code_table_->At(i);
+ ASSERT(region != NULL);
+ region->SetFunctionAndName(function_table_);
+ }
+
+ for (intptr_t i = 0; i < tag_code_table_->Length(); i++) {
+ CodeRegion* region = tag_code_table_->At(i);
+ ASSERT(region != NULL);
+ region->SetFunctionAndName(function_table_);
}
}
- CodeRegionTrieNode* root() const {
- return root_;
+ private:
+ Isolate* isolate_;
+ CodeRegionTable* live_code_table_;
+ CodeRegionTable* dead_code_table_;
+ CodeRegionTable* tag_code_table_;
+ ProfileFunctionTable* function_table_;
+ intptr_t dead_code_table_offset_;
+ intptr_t tag_code_table_offset_;
+};
+
+
+class ProfileFunctionTrieNodeCode {
+ public:
+ explicit ProfileFunctionTrieNodeCode(intptr_t index)
+ : code_index_(index),
+ ticks_(0) {
+ }
+
+ intptr_t index() const {
+ return code_index_;
+ }
+
+ void Tick() {
+ ticks_++;
+ }
+
+ intptr_t ticks() const {
+ return ticks_;
+ }
+
+ private:
+ intptr_t code_index_;
+ intptr_t ticks_;
+};
+
+
+class ProfileFunctionTrieNode : public ZoneAllocated {
+ public:
+ explicit ProfileFunctionTrieNode(intptr_t profile_function_table_index)
+ : profile_function_table_index_(profile_function_table_index),
+ count_(0),
+ code_objects_(new ZoneGrowableArray<ProfileFunctionTrieNodeCode>()) {
+ }
+
+ void Tick() {
+ count_++;
+ }
+
+ intptr_t count() const {
+ return count_;
+ }
+
+ intptr_t profile_function_table_index() const {
+ return profile_function_table_index_;
+ }
+
+
+ ProfileFunctionTrieNode* GetChild(intptr_t child_index) {
+ const intptr_t length = children_.length();
+ intptr_t i = 0;
+ while (i < length) {
+ ProfileFunctionTrieNode* child = children_[i];
+ if (child->profile_function_table_index() == child_index) {
+ return child;
+ }
+ if (child->profile_function_table_index() > child_index) {
+ break;
+ }
+ i++;
+ }
+ // Add new ProfileFunctionTrieNode, sorted by index.
+ ProfileFunctionTrieNode* child =
+ new ProfileFunctionTrieNode(child_index);
+ if (i < length) {
+ // Insert at i.
+ children_.InsertAt(i, child);
+ } else {
+ // Add to end.
+ children_.Add(child);
+ }
+ return child;
+ }
+
+ void AddCodeObjectIndex(intptr_t index) {
+ for (intptr_t i = 0; i < code_objects_->length(); i++) {
+ ProfileFunctionTrieNodeCode& code_object = (*code_objects_)[i];
+ if (code_object.index() == index) {
+ code_object.Tick();
+ return;
+ }
+ }
+ ProfileFunctionTrieNodeCode code_object(index);
+ code_object.Tick();
+ code_objects_->Add(code_object);
+ }
+
+ // This should only be called after the trie is completely built.
+ void SortByCount() {
+ code_objects_->Sort(ProfileFunctionTrieNodeCodeCompare);
+ children_.Sort(ProfileFunctionTrieNodeCompare);
+ intptr_t child_count = children_.length();
+ // Recurse.
+ for (intptr_t i = 0; i < child_count; i++) {
+ children_[i]->SortByCount();
+ }
+ }
+
+ void PrintToJSONArray(JSONArray* array) const {
+ ASSERT(array != NULL);
+ // Write CodeRegion index.
+ array->AddValue(profile_function_table_index_);
+ // Write count.
+ array->AddValue(count_);
+ // Write number of code objects.
+ intptr_t code_count = code_objects_->length();
+ array->AddValue(code_count);
+ // Write each code object index and ticks.
+ for (intptr_t i = 0; i < code_count; i++) {
+ array->AddValue((*code_objects_)[i].index());
+ array->AddValue((*code_objects_)[i].ticks());
+ }
+ // Write number of children.
+ intptr_t child_count = children_.length();
+ array->AddValue(child_count);
+ // Recurse.
+ for (intptr_t i = 0; i < child_count; i++) {
+ children_[i]->PrintToJSONArray(array);
+ }
+ }
+
+ private:
+ static int ProfileFunctionTrieNodeCodeCompare(
+ const ProfileFunctionTrieNodeCode* a,
+ const ProfileFunctionTrieNodeCode* b) {
+ ASSERT(a != NULL);
+ ASSERT(b != NULL);
+ return b->ticks() - a->ticks();
+ }
+
+ static int ProfileFunctionTrieNodeCompare(ProfileFunctionTrieNode* const* a,
+ ProfileFunctionTrieNode* const* b) {
+ ASSERT(a != NULL);
+ ASSERT(b != NULL);
+ return (*b)->count() - (*a)->count();
+ }
+
+ const intptr_t profile_function_table_index_;
+ intptr_t count_;
+ ZoneGrowableArray<ProfileFunctionTrieNode*> children_;
+ ZoneGrowableArray<ProfileFunctionTrieNodeCode>* code_objects_;
+};
+
+
+class ProfileFunctionTrieBuilder : public SampleVisitor {
+ public:
+ ProfileFunctionTrieBuilder(Isolate* isolate,
+ CodeRegionTable* live_code_table,
+ CodeRegionTable* dead_code_table,
+ CodeRegionTable* tag_code_table,
+ ProfileFunctionTable* function_table)
+ : SampleVisitor(isolate),
+ live_code_table_(live_code_table),
+ dead_code_table_(dead_code_table),
+ tag_code_table_(tag_code_table),
+ function_table_(function_table),
+ inclusive_(false),
+ trace_(false),
+ trace_code_filter_(NULL) {
+ ASSERT(live_code_table_ != NULL);
+ ASSERT(dead_code_table_ != NULL);
+ ASSERT(tag_code_table_ != NULL);
+ ASSERT(function_table_ != NULL);
+ set_tag_order(ProfilerService::kUserVM);
+
+ // Verify that the truncated tag exists.
+ ASSERT(tag_code_table_->FindIndex(VMTag::kTruncatedTagId) >= 0);
+
+ // Verify that the root tag exists.
+ intptr_t root_index = tag_code_table_->FindIndex(VMTag::kRootTagId);
+ ASSERT(root_index >= 0);
+
+ // Setup root.
+ CodeRegion* region = tag_code_table_->At(root_index);
+ ASSERT(region != NULL);
+ ProfileFunction* function = region->function();
+ ASSERT(function != NULL);
+
+ exclusive_root_ = new ProfileFunctionTrieNode(function->index());
+ inclusive_root_ = new ProfileFunctionTrieNode(function->index());
+ }
+
+ void VisitSample(Sample* sample) {
+ inclusive_ = false;
+ ProcessSampleExclusive(sample);
+ inclusive_ = true;
+ ProcessSampleInclusive(sample);
+ }
+
+ ProfileFunctionTrieNode* exclusive_root() const {
+ return exclusive_root_;
+ }
+
+ ProfileFunctionTrieNode* inclusive_root() const {
+ return inclusive_root_;
}
ProfilerService::TagOrder tag_order() const {
@@ -1077,8 +1462,52 @@
}
private:
- CodeRegionTrieNode* ProcessUserTags(Sample* sample,
- CodeRegionTrieNode* current) {
+ void ProcessSampleInclusive(Sample* sample) {
+ // Give the root a tick.
+ inclusive_root_->Tick();
+ ProfileFunctionTrieNode* current = inclusive_root_;
+ current = AppendTags(sample, current);
+ if (sample->truncated_trace()) {
+ current = AppendTruncatedTag(current);
+ }
+ // Walk the sampled PCs.
+ for (intptr_t i = FLAG_profile_depth - 1; i >= 0; i--) {
+ if (sample->At(i) == 0) {
+ continue;
+ }
+ // If we aren't sampled out of an exit frame and this is the top
+ // frame.
+ bool exclusive_tick = (i == 0) && !sample->exit_frame_sample();
+ current = ProcessPC(sample->At(i), sample->timestamp(), current,
+ visited(), exclusive_tick,
+ sample->missing_frame_inserted());
+ }
+ }
+
+ void ProcessSampleExclusive(Sample* sample) {
+ // Give the root a tick.
+ exclusive_root_->Tick();
+ ProfileFunctionTrieNode* current = exclusive_root_;
+ current = AppendTags(sample, current);
+ // Walk the sampled PCs.
+ for (intptr_t i = 0; i < FLAG_profile_depth; i++) {
+ if (sample->At(i) == 0) {
+ break;
+ }
+ // If we aren't sampled out of an exit frame and this is the top
+ // frame.
+ bool exclusive_tick = (i == 0) && !sample->exit_frame_sample();
+ current = ProcessPC(sample->At(i), sample->timestamp(), current,
+ visited(), exclusive_tick,
+ sample->missing_frame_inserted());
+ }
+ if (sample->truncated_trace()) {
+ current = AppendTruncatedTag(current);
+ }
+ }
+
+ ProfileFunctionTrieNode* AppendUserTag(Sample* sample,
+ ProfileFunctionTrieNode* current) {
intptr_t user_tag_index = FindTagIndex(sample->user_tag());
if (user_tag_index >= 0) {
current = current->GetChild(user_tag_index);
@@ -1088,8 +1517,19 @@
return current;
}
- CodeRegionTrieNode* ProcessVMTags(Sample* sample,
- CodeRegionTrieNode* current) {
+
+ ProfileFunctionTrieNode* AppendTruncatedTag(
+ ProfileFunctionTrieNode* current) {
+ intptr_t truncated_tag_index = FindTagIndex(VMTag::kTruncatedTagId);
+ ASSERT(truncated_tag_index >= 0);
+ current = current->GetChild(truncated_tag_index);
+ current->Tick();
+ return current;
+ }
+
+
+ ProfileFunctionTrieNode* AppendVMTag(Sample* sample,
+ ProfileFunctionTrieNode* current) {
if (VMTag::IsNativeEntryTag(sample->vm_tag())) {
// Insert a dummy kNativeTagId node.
intptr_t tag_index = FindTagIndex(VMTag::kNativeTagId);
@@ -1102,6 +1542,21 @@
current = current->GetChild(tag_index);
// Give the tag a tick.
current->Tick();
+ } else {
+ intptr_t tag_index = FindTagIndex(sample->vm_tag());
+ current = current->GetChild(tag_index);
+ // Give the tag a tick.
+ current->Tick();
+ }
+ return current;
+ }
+
+ ProfileFunctionTrieNode* AppendSpecificNativeRuntimeEntryVMTag(
+ Sample* sample, ProfileFunctionTrieNode* current) {
+ // Only Native and Runtime entries have a second VM tag.
+ if (!VMTag::IsNativeEntryTag(sample->vm_tag()) &&
+ !VMTag::IsRuntimeEntryTag(sample->vm_tag())) {
+ return current;
}
intptr_t tag_index = FindTagIndex(sample->vm_tag());
current = current->GetChild(tag_index);
@@ -1110,7 +1565,15 @@
return current;
}
- CodeRegionTrieNode* ProcessTags(Sample* sample, CodeRegionTrieNode* current) {
+ ProfileFunctionTrieNode* AppendVMTags(Sample* sample,
+ ProfileFunctionTrieNode* current) {
+ current = AppendVMTag(sample, current);
+ current = AppendSpecificNativeRuntimeEntryVMTag(sample, current);
+ return current;
+ }
+
+ ProfileFunctionTrieNode* AppendTags(Sample* sample,
+ ProfileFunctionTrieNode* current) {
// None.
if (tag_order() == ProfilerService::kNoTags) {
return current;
@@ -1118,124 +1581,505 @@
// User first.
if ((tag_order() == ProfilerService::kUserVM) ||
(tag_order() == ProfilerService::kUser)) {
- current = ProcessUserTags(sample, current);
+ current = AppendUserTag(sample, current);
// Only user.
if (tag_order() == ProfilerService::kUser) {
return current;
}
- return ProcessVMTags(sample, current);
+ return AppendVMTags(sample, current);
}
// VM first.
ASSERT((tag_order() == ProfilerService::kVMUser) ||
(tag_order() == ProfilerService::kVM));
- current = ProcessVMTags(sample, current);
+ current = AppendVMTags(sample, current);
// Only VM.
if (tag_order() == ProfilerService::kVM) {
return current;
}
- return ProcessUserTags(sample, current);
+ return AppendUserTag(sample, current);
}
intptr_t FindTagIndex(uword tag) const {
if (tag == 0) {
+ UNREACHABLE();
return -1;
}
intptr_t index = tag_code_table_->FindIndex(tag);
- if (index <= 0) {
+ if (index < 0) {
+ UNREACHABLE();
return -1;
}
ASSERT(index >= 0);
- ASSERT((tag_code_table_->At(index))->contains(tag));
- return tag_code_table_offset_ + index;
+ CodeRegion* region = tag_code_table_->At(index);
+ ASSERT(region->contains(tag));
+ ProfileFunction* function = region->function();
+ ASSERT(function != NULL);
+ return function->index();
}
- intptr_t FindFinalIndex(uword pc, int64_t timestamp) const {
+ void Dump(ProfileFunctionTrieNode* current) {
+ int current_index = current->profile_function_table_index();
+ ProfileFunction* function = function_table_->At(current_index);
+ function->Dump();
+ OS::Print("\n");
+ }
+
+ ProfileFunctionTrieNode* ProcessPC(uword pc, int64_t timestamp,
+ ProfileFunctionTrieNode* current,
+ intptr_t inclusive_serial,
+ bool exclusive,
+ bool missing_frame_inserted) {
+ CodeRegion* region = FindCodeObject(pc, timestamp);
+ if (region == NULL) {
+ return current;
+ }
+ const char* region_name = region->name();
+ if (region_name == NULL) {
+ region_name = "";
+ }
+ intptr_t code_index = region->code_table_index();
+ const Code& code = Code::ZoneHandle(region->code());
+ GrowableArray<Function*> inlined_functions;
+ if (!code.IsNull()) {
+ intptr_t offset = pc - code.EntryPoint();
+ code.GetInlinedFunctionsAt(offset, &inlined_functions);
+ }
+ if (code.IsNull() || (inlined_functions.length() == 0)) {
+ // No inlined functions.
+ ProfileFunction* function = region->function();
+ ASSERT(function != NULL);
+ if (trace_) {
+ OS::Print("[%" Px "] X - %s (%s)\n",
+ pc, function->name(), region_name);
+ }
+ if (!inclusive_) {
+ function->Tick(exclusive, exclusive ? -1 : inclusive_serial);
+ }
+ current = current->GetChild(function->index());
+ current->AddCodeObjectIndex(code_index);
+ current->Tick();
+ if ((trace_code_filter_ != NULL) &&
+ (strstr(region_name, trace_code_filter_) != NULL)) {
+ trace_ = true;
+ OS::Print("Tracing from: %" Px " [%s] ", pc,
+ missing_frame_inserted ? "INSERTED" : "");
+ Dump(current);
+ }
+ return current;
+ }
+
+ if (inclusive_) {
+ for (intptr_t i = inlined_functions.length() - 1; i >= 0; i--) {
+ Function* inlined_function = inlined_functions[i];
+ ASSERT(inlined_function != NULL);
+ ASSERT(!inlined_function->IsNull());
+ current = ProcessInlinedFunction(
+ inlined_function, current, inclusive_serial, exclusive, code_index);
+ exclusive = false;
+ }
+ } else {
+ for (intptr_t i = 0; i < inlined_functions.length(); i++) {
+ Function* inlined_function = inlined_functions[i];
+ ASSERT(inlined_function != NULL);
+ ASSERT(!inlined_function->IsNull());
+ const char* inline_name = inlined_function->ToQualifiedCString();
+ if (trace_) {
+ OS::Print("[%" Px "] %" Pd " - %s (%s)\n",
+ pc, i, inline_name, region_name);
+ }
+ current = ProcessInlinedFunction(
+ inlined_function, current, inclusive_serial, exclusive, code_index);
+ exclusive = false;
+ if ((trace_code_filter_ != NULL) &&
+ (strstr(region_name, trace_code_filter_) != NULL)) {
+ trace_ = true;
+ OS::Print("Tracing from: %" Px " [%s] ",
+ pc, missing_frame_inserted ? "INSERTED" : "");
+ Dump(current);
+ }
+ }
+ }
+
+ return current;
+ }
+
+ ProfileFunctionTrieNode* ProcessInlinedFunction(
+ Function* inlined_function,
+ ProfileFunctionTrieNode* current,
+ intptr_t inclusive_serial,
+ bool exclusive,
+ intptr_t code_index) {
+ ProfileFunction* function =
+ function_table_->LookupOrAdd(*inlined_function);
+ ASSERT(function != NULL);
+ function->AddCodeObjectIndex(code_index);
+ function->Tick(exclusive, exclusive ? -1 : inclusive_serial);
+ current = current->GetChild(function->index());
+ current->AddCodeObjectIndex(code_index);
+ current->Tick();
+ return current;
+ }
+
+ CodeRegion* FindCodeObject(uword pc, int64_t timestamp) const {
intptr_t index = live_code_table_->FindIndex(pc);
- ASSERT(index >= 0);
+ if (index < 0) {
+ return NULL;
+ }
CodeRegion* region = live_code_table_->At(index);
ASSERT(region->contains(pc));
if (region->compile_timestamp() > timestamp) {
// Overwritten code, find in dead code table.
index = dead_code_table_->FindIndex(pc);
- ASSERT(index >= 0);
+ if (index < 0) {
+ return NULL;
+ }
region = dead_code_table_->At(index);
ASSERT(region->contains(pc));
ASSERT(region->compile_timestamp() <= timestamp);
- return index + dead_code_table_offset_;
+ return region;
}
ASSERT(region->compile_timestamp() <= timestamp);
- return index;
+ return region;
}
ProfilerService::TagOrder tag_order_;
- CodeRegionTrieNode* root_;
+ ProfileFunctionTrieNode* exclusive_root_;
+ ProfileFunctionTrieNode* inclusive_root_;
CodeRegionTable* live_code_table_;
CodeRegionTable* dead_code_table_;
CodeRegionTable* tag_code_table_;
- intptr_t dead_code_table_offset_;
- intptr_t tag_code_table_offset_;
+ ProfileFunctionTable* function_table_;
+ bool inclusive_;
+ bool trace_;
+ const char* trace_code_filter_;
};
-class CodeRegionTableCallersBuilder {
+class CodeRegionTrieNode : public ZoneAllocated {
public:
- CodeRegionTableCallersBuilder(CodeRegionTrieNode* exclusive_root,
- CodeRegionTable* live_code_table,
- CodeRegionTable* dead_code_table,
- CodeRegionTable* tag_code_table)
- : exclusive_root_(exclusive_root),
- live_code_table_(live_code_table),
- dead_code_table_(dead_code_table),
- tag_code_table_(tag_code_table) {
- ASSERT(exclusive_root_ != NULL);
- ASSERT(live_code_table_ != NULL);
- ASSERT(dead_code_table_ != NULL);
- ASSERT(tag_code_table_ != NULL);
- dead_code_table_offset_ = live_code_table_->Length();
- tag_code_table_offset_ = dead_code_table_offset_ +
- dead_code_table_->Length();
+ explicit CodeRegionTrieNode(intptr_t code_region_index)
+ : code_region_index_(code_region_index),
+ count_(0),
+ children_(new ZoneGrowableArray<CodeRegionTrieNode*>()) {
}
- void Build() {
- ProcessNode(exclusive_root_);
+ void Tick() {
+ ASSERT(code_region_index_ >= 0);
+ count_++;
+ }
+
+ intptr_t count() const {
+ ASSERT(code_region_index_ >= 0);
+ return count_;
+ }
+
+ intptr_t code_region_index() const {
+ return code_region_index_;
+ }
+
+ ZoneGrowableArray<CodeRegionTrieNode*>& children() const {
+ return *children_;
+ }
+
+ CodeRegionTrieNode* GetChild(intptr_t child_code_region_index) {
+ const intptr_t length = children_->length();
+ intptr_t i = 0;
+ while (i < length) {
+ CodeRegionTrieNode* child = (*children_)[i];
+ if (child->code_region_index() == child_code_region_index) {
+ return child;
+ }
+ if (child->code_region_index() > child_code_region_index) {
+ break;
+ }
+ i++;
+ }
+ // Add new CodeRegion, sorted by CodeRegionTable index.
+ CodeRegionTrieNode* child = new CodeRegionTrieNode(child_code_region_index);
+ if (i < length) {
+ // Insert at i.
+ children_->InsertAt(i, child);
+ } else {
+ // Add to end.
+ children_->Add(child);
+ }
+ return child;
+ }
+
+ // This should only be called after the trie is completely built.
+ void SortByCount() {
+ children_->Sort(CodeRegionTrieNodeCompare);
+ ZoneGrowableArray<CodeRegionTrieNode*>& kids = children();
+ intptr_t child_count = kids.length();
+ // Recurse.
+ for (intptr_t i = 0; i < child_count; i++) {
+ kids[i]->SortByCount();
+ }
+ }
+
+ void PrintToJSONArray(JSONArray* array) const {
+ ASSERT(array != NULL);
+ // Write CodeRegion index.
+ array->AddValue(code_region_index_);
+ // Write count.
+ array->AddValue(count_);
+ // Write number of children.
+ ZoneGrowableArray<CodeRegionTrieNode*>& kids = children();
+ intptr_t child_count = kids.length();
+ array->AddValue(child_count);
+ // Recurse.
+ for (intptr_t i = 0; i < child_count; i++) {
+ kids[i]->PrintToJSONArray(array);
+ }
}
private:
- void ProcessNode(CodeRegionTrieNode* parent) {
- const ZoneGrowableArray<CodeRegionTrieNode*>& children = parent->children();
- intptr_t parent_index = parent->code_region_index();
- ASSERT(parent_index >= 0);
- CodeRegion* parent_region = At(parent_index);
- ASSERT(parent_region != NULL);
- for (intptr_t i = 0; i < children.length(); i++) {
- CodeRegionTrieNode* node = children[i];
- ProcessNode(node);
- intptr_t index = node->code_region_index();
- ASSERT(index >= 0);
- CodeRegion* region = At(index);
- ASSERT(region != NULL);
- region->AddCallee(parent_index, node->count());
- parent_region->AddCaller(index, node->count());
+ static int CodeRegionTrieNodeCompare(CodeRegionTrieNode* const* a,
+ CodeRegionTrieNode* const* b) {
+ ASSERT(a != NULL);
+ ASSERT(b != NULL);
+ return (*b)->count() - (*a)->count();
+ }
+
+ const intptr_t code_region_index_;
+ intptr_t count_;
+ ZoneGrowableArray<CodeRegionTrieNode*>* children_;
+};
+
+
+class CodeRegionTrieBuilder : public SampleVisitor {
+ public:
+ CodeRegionTrieBuilder(Isolate* isolate,
+ CodeRegionTable* live_code_table,
+ CodeRegionTable* dead_code_table,
+ CodeRegionTable* tag_code_table)
+ : SampleVisitor(isolate),
+ live_code_table_(live_code_table),
+ dead_code_table_(dead_code_table),
+ tag_code_table_(tag_code_table) {
+ ASSERT(live_code_table_ != NULL);
+ ASSERT(dead_code_table_ != NULL);
+ ASSERT(tag_code_table_ != NULL);
+ set_tag_order(ProfilerService::kUserVM);
+
+ // Verify that the truncated tag exists.
+ ASSERT(tag_code_table_->FindIndex(VMTag::kTruncatedTagId) >= 0);
+
+ // Verify that the root tag exists.
+ intptr_t root_index = tag_code_table_->FindIndex(VMTag::kRootTagId);
+ ASSERT(root_index >= 0);
+ CodeRegion* region = tag_code_table_->At(root_index);
+ ASSERT(region != NULL);
+
+ exclusive_root_ = new CodeRegionTrieNode(region->code_table_index());
+ inclusive_root_ = new CodeRegionTrieNode(region->code_table_index());
+ }
+
+ void VisitSample(Sample* sample) {
+ ProcessSampleExclusive(sample);
+ ProcessSampleInclusive(sample);
+ }
+
+ CodeRegionTrieNode* inclusive_root() const {
+ return inclusive_root_;
+ }
+
+ CodeRegionTrieNode* exclusive_root() const {
+ return exclusive_root_;
+ }
+
+ ProfilerService::TagOrder tag_order() const {
+ return tag_order_;
+ }
+
+ void set_tag_order(ProfilerService::TagOrder tag_order) {
+ tag_order_ = tag_order;
+ }
+
+ private:
+ void ProcessSampleInclusive(Sample* sample) {
+ // Give the root a tick.
+ inclusive_root_->Tick();
+ CodeRegionTrieNode* current = inclusive_root_;
+ current = AppendTags(sample, current);
+ if (sample->truncated_trace()) {
+ current = AppendTruncatedTag(current);
+ }
+ // Walk the sampled PCs.
+ for (intptr_t i = FLAG_profile_depth - 1; i >= 0; i--) {
+ if (sample->At(i) == 0) {
+ continue;
+ }
+ intptr_t index = FindFinalIndex(sample->At(i), sample->timestamp());
+ if (index < 0) {
+ continue;
+ }
+ current = current->GetChild(index);
+ current->Tick();
}
}
- CodeRegion* At(intptr_t final_index) {
- ASSERT(final_index >= 0);
- if (final_index < dead_code_table_offset_) {
- return live_code_table_->At(final_index);
- } else if (final_index < tag_code_table_offset_) {
- return dead_code_table_->At(final_index - dead_code_table_offset_);
+ void ProcessSampleExclusive(Sample* sample) {
+ // Give the root a tick.
+ exclusive_root_->Tick();
+ CodeRegionTrieNode* current = exclusive_root_;
+ current = AppendTags(sample, current);
+ // Walk the sampled PCs.
+ for (intptr_t i = 0; i < FLAG_profile_depth; i++) {
+ if (sample->At(i) == 0) {
+ break;
+ }
+ intptr_t index = FindFinalIndex(sample->At(i), sample->timestamp());
+ if (index < 0) {
+ continue;
+ }
+ current = current->GetChild(index);
+ current->Tick();
+ }
+ if (sample->truncated_trace()) {
+ current = AppendTruncatedTag(current);
+ }
+ }
+
+ CodeRegionTrieNode* AppendUserTag(Sample* sample,
+ CodeRegionTrieNode* current) {
+ intptr_t user_tag_index = FindTagIndex(sample->user_tag());
+ if (user_tag_index >= 0) {
+ current = current->GetChild(user_tag_index);
+ // Give the tag a tick.
+ current->Tick();
+ }
+ return current;
+ }
+
+ CodeRegionTrieNode* AppendTruncatedTag(CodeRegionTrieNode* current) {
+ intptr_t truncated_tag_index = FindTagIndex(VMTag::kTruncatedTagId);
+ ASSERT(truncated_tag_index >= 0);
+ current = current->GetChild(truncated_tag_index);
+ current->Tick();
+ return current;
+ }
+
+ CodeRegionTrieNode* AppendVMTag(Sample* sample,
+ CodeRegionTrieNode* current) {
+ if (VMTag::IsNativeEntryTag(sample->vm_tag())) {
+ // Insert a dummy kNativeTagId node.
+ intptr_t tag_index = FindTagIndex(VMTag::kNativeTagId);
+ current = current->GetChild(tag_index);
+ // Give the tag a tick.
+ current->Tick();
+ } else if (VMTag::IsRuntimeEntryTag(sample->vm_tag())) {
+ // Insert a dummy kRuntimeTagId node.
+ intptr_t tag_index = FindTagIndex(VMTag::kRuntimeTagId);
+ current = current->GetChild(tag_index);
+ // Give the tag a tick.
+ current->Tick();
} else {
- return tag_code_table_->At(final_index - tag_code_table_offset_);
+ intptr_t tag_index = FindTagIndex(sample->vm_tag());
+ current = current->GetChild(tag_index);
+ // Give the tag a tick.
+ current->Tick();
}
+ return current;
}
+ CodeRegionTrieNode* AppendSpecificNativeRuntimeEntryVMTag(
+ Sample* sample, CodeRegionTrieNode* current) {
+ // Only Native and Runtime entries have a second VM tag.
+ if (!VMTag::IsNativeEntryTag(sample->vm_tag()) &&
+ !VMTag::IsRuntimeEntryTag(sample->vm_tag())) {
+ return current;
+ }
+ intptr_t tag_index = FindTagIndex(sample->vm_tag());
+ current = current->GetChild(tag_index);
+ // Give the tag a tick.
+ current->Tick();
+ return current;
+ }
+
+ CodeRegionTrieNode* AppendVMTags(Sample* sample,
+ CodeRegionTrieNode* current) {
+ current = AppendVMTag(sample, current);
+ current = AppendSpecificNativeRuntimeEntryVMTag(sample, current);
+ return current;
+ }
+
+ CodeRegionTrieNode* AppendTags(Sample* sample, CodeRegionTrieNode* current) {
+ // None.
+ if (tag_order() == ProfilerService::kNoTags) {
+ return current;
+ }
+ // User first.
+ if ((tag_order() == ProfilerService::kUserVM) ||
+ (tag_order() == ProfilerService::kUser)) {
+ current = AppendUserTag(sample, current);
+ // Only user.
+ if (tag_order() == ProfilerService::kUser) {
+ return current;
+ }
+ return AppendVMTags(sample, current);
+ }
+ // VM first.
+ ASSERT((tag_order() == ProfilerService::kVMUser) ||
+ (tag_order() == ProfilerService::kVM));
+ current = AppendVMTags(sample, current);
+ // Only VM.
+ if (tag_order() == ProfilerService::kVM) {
+ return current;
+ }
+ return AppendUserTag(sample, current);
+ }
+
+ intptr_t FindTagIndex(uword tag) const {
+ if (tag == 0) {
+ UNREACHABLE();
+ return -1;
+ }
+ intptr_t index = tag_code_table_->FindIndex(tag);
+ if (index < 0) {
+ UNREACHABLE();
+ return -1;
+ }
+ ASSERT(index >= 0);
+ CodeRegion* region = tag_code_table_->At(index);
+ ASSERT(region->contains(tag));
+ return region->code_table_index();
+ }
+
+ intptr_t FindDeadIndex(uword pc, int64_t timestamp) const {
+ intptr_t index = dead_code_table_->FindIndex(pc);
+ if (index < 0) {
+ OS::Print("%" Px " cannot be found\n", pc);
+ return -1;
+ }
+ CodeRegion* region = dead_code_table_->At(index);
+ ASSERT(region->contains(pc));
+ ASSERT(region->compile_timestamp() <= timestamp);
+ return region->code_table_index();
+ }
+
+ intptr_t FindFinalIndex(uword pc, int64_t timestamp) const {
+ intptr_t index = live_code_table_->FindIndex(pc);
+ if (index < 0) {
+ // Try dead code table.
+ return FindDeadIndex(pc, timestamp);
+ }
+ CodeRegion* region = live_code_table_->At(index);
+ ASSERT(region->contains(pc));
+ if (region->compile_timestamp() > timestamp) {
+ // Overwritten code, find in dead code table.
+ return FindDeadIndex(pc, timestamp);
+ }
+ ASSERT(region->compile_timestamp() <= timestamp);
+ return region->code_table_index();
+ }
+
+ ProfilerService::TagOrder tag_order_;
CodeRegionTrieNode* exclusive_root_;
+ CodeRegionTrieNode* inclusive_root_;
CodeRegionTable* live_code_table_;
CodeRegionTable* dead_code_table_;
CodeRegionTable* tag_code_table_;
- intptr_t dead_code_table_offset_;
- intptr_t tag_code_table_offset_;
};
@@ -1253,8 +2097,10 @@
}
SampleBuffer* sample_buffer = profiler_data->sample_buffer();
ASSERT(sample_buffer != NULL);
+ ScopeTimer sw("ProfilerService::PrintJSON", FLAG_trace_profiler);
{
StackZone zone(isolate);
+ HANDLESCOPE(isolate);
{
// Live code holds Dart, Native, and Collected CodeRegions.
CodeRegionTable live_code_table;
@@ -1262,19 +2108,25 @@
CodeRegionTable dead_code_table;
// Tag code holds Tag CodeRegions.
CodeRegionTable tag_code_table;
+ // Table holding all ProfileFunctions.
+ ProfileFunctionTable function_table;
+ // Set of deoptimized code still referenced by the profiler.
+ DeoptimizedCodeSet* deoptimized_code = new DeoptimizedCodeSet(isolate);
+
+ {
+ ScopeTimer sw("PreprocessSamples", FLAG_trace_profiler);
+ // Preprocess samples.
+ PreprocessVisitor preprocessor(isolate);
+ sample_buffer->VisitSamples(&preprocessor);
+ }
+
+ // Build CodeRegion tables.
CodeRegionTableBuilder builder(isolate,
&live_code_table,
&dead_code_table,
- &tag_code_table);
+ &tag_code_table,
+ deoptimized_code);
{
- ScopeTimer sw("FixTopFrame", FLAG_trace_profiler);
- // Preprocess samples and fix the caller when the top PC is in a
- // stub or intrinsic without a frame.
- FixTopFrameVisitor fixTopFrame(isolate);
- sample_buffer->VisitSamples(&fixTopFrame);
- }
- {
- // Build CodeRegion tables.
ScopeTimer sw("CodeRegionTableBuilder", FLAG_trace_profiler);
sample_buffer->VisitSamples(&builder);
}
@@ -1290,72 +2142,145 @@
total_dead_code_objects,
total_tag_code_objects);
}
-#if defined(DEBUG)
- live_code_table.Verify();
- dead_code_table.Verify();
- tag_code_table.Verify();
+
if (FLAG_trace_profiler) {
- OS::Print("CodeRegionTables verified to be ordered and not overlap.\n");
+ ScopeTimer sw("CodeRegionTableVerify", FLAG_trace_profiler);
+ live_code_table.Verify();
+ dead_code_table.Verify();
+ tag_code_table.Verify();
}
-#endif
- CodeRegionExclusiveTrieBuilder build_trie(isolate,
- &live_code_table,
- &dead_code_table,
- &tag_code_table);
- build_trie.set_tag_order(tag_order);
+
+ {
+ ScopeTimer st("CodeRegionFunctionMapping", FLAG_trace_profiler);
+ CodeRegionFunctionMapper mapper(isolate, &live_code_table,
+ &dead_code_table,
+ &tag_code_table,
+ &function_table);
+ mapper.Map();
+ }
+ if (FLAG_trace_profiler) {
+ intptr_t total_functions = function_table.Length();
+ OS::Print("FunctionTable: size=%" Pd "\n", total_functions);
+ }
+ CodeRegionTrieBuilder code_trie_builder(isolate,
+ &live_code_table,
+ &dead_code_table,
+ &tag_code_table);
+ code_trie_builder.set_tag_order(tag_order);
{
// Build CodeRegion trie.
- ScopeTimer sw("CodeRegionExclusiveTrieBuilder", FLAG_trace_profiler);
- sample_buffer->VisitSamples(&build_trie);
- build_trie.root()->SortByCount();
+ ScopeTimer sw("CodeRegionTrieBuilder", FLAG_trace_profiler);
+ sample_buffer->VisitSamples(&code_trie_builder);
+ code_trie_builder.exclusive_root()->SortByCount();
+ code_trie_builder.inclusive_root()->SortByCount();
}
- CodeRegionTableCallersBuilder build_callers(build_trie.root(),
- &live_code_table,
- &dead_code_table,
- &tag_code_table);
+ ProfileFunctionTrieBuilder function_trie_builder(isolate,
+ &live_code_table,
+ &dead_code_table,
+ &tag_code_table,
+ &function_table);
+ function_trie_builder.set_tag_order(tag_order);
{
- // Build CodeRegion callers.
- ScopeTimer sw("CodeRegionTableCallersBuilder", FLAG_trace_profiler);
- build_callers.Build();
+ // Build ProfileFunction trie.
+ ScopeTimer sw("ProfileFunctionTrieBuilder",
+ FLAG_trace_profiler);
+ sample_buffer->VisitSamples(&function_trie_builder);
+ function_trie_builder.exclusive_root()->SortByCount();
+ function_trie_builder.inclusive_root()->SortByCount();
}
{
- ScopeTimer sw("CodeTableStream", FLAG_trace_profiler);
+ ScopeTimer sw("CpuProfileJSONStream", FLAG_trace_profiler);
// Serialize to JSON.
JSONObject obj(stream);
- obj.AddProperty("type", "CpuProfile");
- obj.AddProperty("id", "profile");
- obj.AddProperty("samples", samples);
- obj.AddProperty("depth", static_cast<intptr_t>(FLAG_profile_depth));
- obj.AddProperty("period", static_cast<intptr_t>(FLAG_profile_period));
+ obj.AddProperty("type", "_CpuProfile");
+ obj.AddProperty("sampleCount", samples);
+ obj.AddProperty("samplePeriod",
+ static_cast<intptr_t>(FLAG_profile_period));
+ obj.AddProperty("stackDepth",
+ static_cast<intptr_t>(FLAG_profile_depth));
obj.AddProperty("timeSpan",
MicrosecondsToSeconds(builder.TimeDeltaMicros()));
{
- JSONArray exclusive_trie(&obj, "exclusive_trie");
- CodeRegionTrieNode* root = build_trie.root();
+ JSONArray code_trie(&obj, "exclusiveCodeTrie");
+ CodeRegionTrieNode* root = code_trie_builder.exclusive_root();
ASSERT(root != NULL);
- root->PrintToJSONArray(&exclusive_trie);
+ root->PrintToJSONArray(&code_trie);
}
- JSONArray codes(&obj, "codes");
- for (intptr_t i = 0; i < live_code_table.Length(); i++) {
- CodeRegion* region = live_code_table.At(i);
- ASSERT(region != NULL);
- region->PrintToJSONArray(isolate, &codes);
+ {
+ JSONArray code_trie(&obj, "inclusiveCodeTrie");
+ CodeRegionTrieNode* root = code_trie_builder.inclusive_root();
+ ASSERT(root != NULL);
+ root->PrintToJSONArray(&code_trie);
}
- for (intptr_t i = 0; i < dead_code_table.Length(); i++) {
- CodeRegion* region = dead_code_table.At(i);
- ASSERT(region != NULL);
- region->PrintToJSONArray(isolate, &codes);
+ {
+ JSONArray function_trie(&obj, "exclusiveFunctionTrie");
+ ProfileFunctionTrieNode* root =
+ function_trie_builder.exclusive_root();
+ ASSERT(root != NULL);
+ root->PrintToJSONArray(&function_trie);
}
- for (intptr_t i = 0; i < tag_code_table.Length(); i++) {
- CodeRegion* region = tag_code_table.At(i);
- ASSERT(region != NULL);
- region->PrintToJSONArray(isolate, &codes);
+ {
+ JSONArray function_trie(&obj, "inclusiveFunctionTrie");
+ ProfileFunctionTrieNode* root =
+ function_trie_builder.inclusive_root();
+ ASSERT(root != NULL);
+ root->PrintToJSONArray(&function_trie);
+ }
+ {
+ JSONArray codes(&obj, "codes");
+ for (intptr_t i = 0; i < live_code_table.Length(); i++) {
+ CodeRegion* region = live_code_table.At(i);
+ ASSERT(region != NULL);
+ region->PrintToJSONArray(&codes);
+ }
+ for (intptr_t i = 0; i < dead_code_table.Length(); i++) {
+ CodeRegion* region = dead_code_table.At(i);
+ ASSERT(region != NULL);
+ region->PrintToJSONArray(&codes);
+ }
+ for (intptr_t i = 0; i < tag_code_table.Length(); i++) {
+ CodeRegion* region = tag_code_table.At(i);
+ ASSERT(region != NULL);
+ region->PrintToJSONArray(&codes);
+ }
+ }
+ {
+ JSONArray functions(&obj, "functions");
+ for (intptr_t i = 0; i < function_table.Length(); i++) {
+ ProfileFunction* function = function_table.At(i);
+ ASSERT(function != NULL);
+ function->PrintToJSONArray(&functions);
+ }
}
}
+ // Update the isolates set of dead code.
+ deoptimized_code->UpdateIsolate(isolate);
}
}
// Enable profile interrupts.
Profiler::BeginExecution(isolate);
}
+
+void ProfilerService::ClearSamples() {
+ Isolate* isolate = Isolate::Current();
+
+ // Disable profile interrupts while processing the buffer.
+ Profiler::EndExecution(isolate);
+
+ MutexLocker profiler_data_lock(isolate->profiler_data_mutex());
+ IsolateProfilerData* profiler_data = isolate->profiler_data();
+ if (profiler_data == NULL) {
+ return;
+ }
+ SampleBuffer* sample_buffer = profiler_data->sample_buffer();
+ ASSERT(sample_buffer != NULL);
+
+ ClearProfileVisitor clear_profile(isolate);
+ sample_buffer->VisitSamples(&clear_profile);
+
+ // Enable profile interrupts.
+ Profiler::BeginExecution(isolate);
+}
+
} // namespace dart
diff --git a/runtime/vm/profiler_service.h b/runtime/vm/profiler_service.h
index 80c2b49..19f01b6 100644
--- a/runtime/vm/profiler_service.h
+++ b/runtime/vm/profiler_service.h
@@ -33,6 +33,8 @@
static void PrintJSON(JSONStream* stream,
TagOrder tag_order);
+
+ static void ClearSamples();
};
} // namespace dart
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 483bb24..9d145bb 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -284,7 +284,13 @@
class ClassIdTag :
public BitField<intptr_t, kClassIdTagPos, kClassIdTagSize> {}; // NOLINT
+ bool IsWellFormed() const {
+ uword value = reinterpret_cast<uword>(this);
+ return (value & kSmiTagMask) == 0 ||
+ Utils::IsAligned(value - kHeapObjectTag, kWordSize);
+ }
bool IsHeapObject() const {
+ ASSERT(IsWellFormed());
uword value = reinterpret_cast<uword>(this);
return (value & kSmiTagMask) == kHeapObjectTag;
}
@@ -305,6 +311,7 @@
// Like !IsHeapObject() || IsOldObject(), but compiles to a single branch.
bool IsSmiOrOldObject() const {
+ ASSERT(IsWellFormed());
COMPILE_ASSERT(kHeapObjectTag == 1);
COMPILE_ASSERT(kNewObjectAlignmentOffset == kWordSize);
static const uword kNewObjectBits =
diff --git a/runtime/vm/scavenger.cc b/runtime/vm/scavenger.cc
index 5df2fe9..5ad62ad 100644
--- a/runtime/vm/scavenger.cc
+++ b/runtime/vm/scavenger.cc
@@ -155,16 +155,13 @@
return;
}
- // Objects should be contained in the heap.
- // TODO(iposva): Add an appropriate assert here or in the return block
- // below.
-
// The scavenger is only interested in objects located in the from space.
//
// We are using address math here and relying on the unsigned underflow
// in the code below to avoid having two checks.
uword obj_offset = reinterpret_cast<uword>(raw_obj) - from_start_;
if (obj_offset > from_size_) {
+ ASSERT(scavenger_->to_->Contains(RawObject::ToAddr(raw_obj)));
return;
}
diff --git a/runtime/vm/scavenger_test.cc b/runtime/vm/scavenger_test.cc
index cc4f217..1ab6bdf 100644
--- a/runtime/vm/scavenger_test.cc
+++ b/runtime/vm/scavenger_test.cc
@@ -52,12 +52,4 @@
delete scavenger;
}
-TEST_CASE(ZeroSizeScavengerGC) {
- // Ensure 'Scavenge' doesn't crash. We must supply an actual heap.
- Scavenger* scavenger =
- new Scavenger(Isolate::Current()->heap(), 0, kNewObjectAlignmentOffset);
- scavenger->Scavenge();
- delete scavenger;
-}
-
} // namespace dart
diff --git a/runtime/vm/scope_timer.h b/runtime/vm/scope_timer.h
index b90270b..c60e67f 100644
--- a/runtime/vm/scope_timer.h
+++ b/runtime/vm/scope_timer.h
@@ -5,6 +5,8 @@
#ifndef VM_SCOPE_TIMER_H_
#define VM_SCOPE_TIMER_H_
+#include "platform/globals.h"
+
namespace dart {
// Simple utility class for timing a block of code.
@@ -12,7 +14,8 @@
public:
explicit ScopeTimer(const char* name, bool enabled = true)
: enabled_(enabled),
- name_(name) {
+ name_(name),
+ start_(0) {
if (!enabled_) {
return;
}
@@ -30,7 +33,8 @@
return;
}
int64_t elapsed = GetElapsed();
- OS::Print("%s took %" Pd64 " micros.\n", name_, elapsed);
+ double seconds = MicrosecondsToSeconds(elapsed);
+ OS::Print("%s: %f seconds (%" Pd64 " \u00B5s)\n", name_, seconds, elapsed);
}
private:
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 404e8d3..f62e38f 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -2135,6 +2135,20 @@
}
+static const MethodParameter* clear_cpu_profile_params[] = {
+ ISOLATE_PARAMETER,
+ NULL,
+};
+
+
+static bool ClearCpuProfile(Isolate* isolate, JSONStream* js) {
+ ProfilerService::ClearSamples();
+ JSONObject jsobj(js);
+ jsobj.AddProperty("type", "Success");
+ return true;
+}
+
+
static const MethodParameter* get_allocation_profile_params[] = {
ISOLATE_PARAMETER,
NULL,
@@ -2497,6 +2511,8 @@
add_breakpoint_params },
{ "addBreakpointAtEntry", AddBreakpointAtEntry,
add_breakpoint_at_entry_params },
+ { "clearCpuProfile", ClearCpuProfile,
+ clear_cpu_profile_params },
{ "eval", Eval,
eval_params },
{ "getAllocationProfile", GetAllocationProfile,
diff --git a/runtime/vm/service_test.cc b/runtime/vm/service_test.cc
index 1670e0d..7fe9b0c 100644
--- a/runtime/vm/service_test.cc
+++ b/runtime/vm/service_test.cc
@@ -1466,7 +1466,7 @@
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
// Expect profile
- EXPECT_SUBSTRING("\"type\":\"CpuProfile\"", handler.msg());
+ EXPECT_SUBSTRING("\"type\":\"_CpuProfile\"", handler.msg());
service_msg =
Eval(lib, "[0, port, 'getCpuProfile', ['tags'], ['Bogus']]");
diff --git a/runtime/vm/signal_handler.h b/runtime/vm/signal_handler.h
index 0c01741..b5329bc 100644
--- a/runtime/vm/signal_handler.h
+++ b/runtime/vm/signal_handler.h
@@ -48,6 +48,7 @@
static uintptr_t GetFramePointer(const mcontext_t& mcontext);
static uintptr_t GetCStackPointer(const mcontext_t& mcontext);
static uintptr_t GetDartStackPointer(const mcontext_t& mcontext);
+ static uintptr_t GetLinkRegister(const mcontext_t& mcontext);
private:
};
diff --git a/runtime/vm/signal_handler_android.cc b/runtime/vm/signal_handler_android.cc
index ff468b6..d8ea14e 100644
--- a/runtime/vm/signal_handler_android.cc
+++ b/runtime/vm/signal_handler_android.cc
@@ -66,6 +66,20 @@
}
+uintptr_t SignalHandler::GetLinkRegister(const mcontext_t& mcontext) {
+ uintptr_t lr = 0;
+#if defined(TARGET_ARCH_ARM)
+ lr = static_cast<uintptr_t>(mcontext.arm_lr);
+#elif defined(TARGET_ARCH_ARM64)
+ lr = static_cast<uintptr_t>(mcontext.regs[30]);
+ UNIMPLEMENTED();
+#else
+ UNIMPLEMENTED();
+#endif // TARGET_ARCH_...
+ return lr;
+}
+
+
void SignalHandler::Install(SignalAction action) {
struct sigaction act;
memset(&act, 0, sizeof(act));
diff --git a/runtime/vm/signal_handler_linux.cc b/runtime/vm/signal_handler_linux.cc
index 980733e..957edda 100644
--- a/runtime/vm/signal_handler_linux.cc
+++ b/runtime/vm/signal_handler_linux.cc
@@ -97,6 +97,32 @@
}
+uintptr_t SignalHandler::GetLinkRegister(const mcontext_t& mcontext) {
+ uintptr_t lr = 0;
+
+#if defined(TARGET_ARCH_IA32)
+ lr = 0;
+#elif defined(TARGET_ARCH_X64)
+ lr = 0;
+#elif defined(TARGET_ARCH_MIPS) && defined(USING_SIMULATOR)
+ lr = 0;
+#elif defined(TARGET_ARCH_ARM) && defined(USING_SIMULATOR)
+ lr = 0;
+#elif defined(TARGET_ARCH_ARM64) && defined(USING_SIMULATOR)
+ lr = 0;
+#elif defined(TARGET_ARCH_ARM)
+ lr = static_cast<uintptr_t>(mcontext.arm_lr);
+#elif defined(TARGET_ARCH_ARM64)
+ lr = static_cast<uintptr_t>(mcontext.lr);
+#elif defined(TARGET_ARCH_MIPS)
+ lr = static_cast<uintptr_t>(mcontext.gregs[31]);
+#else
+ UNIMPLEMENTED();
+#endif // TARGET_ARCH_...
+ return lr;
+}
+
+
void SignalHandler::Install(SignalAction action) {
struct sigaction act;
act.sa_handler = NULL;
diff --git a/runtime/vm/signal_handler_macos.cc b/runtime/vm/signal_handler_macos.cc
index 9d5b1c7..3bb6101 100644
--- a/runtime/vm/signal_handler_macos.cc
+++ b/runtime/vm/signal_handler_macos.cc
@@ -77,6 +77,33 @@
}
+uintptr_t SignalHandler::GetLinkRegister(const mcontext_t& mcontext) {
+ uintptr_t lr = 0;
+
+#if defined(TARGET_ARCH_IA32)
+ lr = 0;
+#elif defined(TARGET_ARCH_X64)
+ lr = 0;
+#elif defined(TARGET_ARCH_MIPS) && defined(USING_SIMULATOR)
+ lr = 0;
+#elif defined(TARGET_ARCH_ARM) && defined(USING_SIMULATOR)
+ lr = 0;
+#elif defined(TARGET_ARCH_ARM64) && defined(USING_SIMULATOR)
+ lr = 0;
+#elif defined(TARGET_ARCH_ARM)
+ lr = 0;
+#elif defined(TARGET_ARCH_ARM64)
+ lr = 0;
+#elif defined(TARGET_ARCH_MIPS)
+ lr = 0;
+#else
+ UNIMPLEMENTED();
+#endif // TARGET_ARCH_...
+
+ return lr;
+}
+
+
void SignalHandler::Install(SignalAction action) {
struct sigaction act;
act.sa_handler = NULL;
diff --git a/runtime/vm/signal_handler_win.cc b/runtime/vm/signal_handler_win.cc
index 3f052d8..a1f8fe0 100644
--- a/runtime/vm/signal_handler_win.cc
+++ b/runtime/vm/signal_handler_win.cc
@@ -32,6 +32,12 @@
}
+uintptr_t SignalHandler::GetLinkRegister(const mcontext_t& mcontext) {
+ UNIMPLEMENTED();
+ return 0;
+}
+
+
void SignalHandler::Install(SignalAction action) {
UNIMPLEMENTED();
}
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index a4dbc5a..14384bf 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -44,6 +44,15 @@
V(_SyncIterableConstructor, "_SyncIterable.") \
V(_SyncIterator, "_SyncIterator") \
V(IteratorParameter, ":iterator") \
+ V(_AsyncStarStreamController, "_AsyncStarStreamController") \
+ V(_AsyncStarStreamControllerConstructor, "_AsyncStarStreamController.") \
+ V(Controller, ":controller") \
+ V(Stream, "stream") \
+ V(isPaused, "isPaused") \
+ V(AddError, "addError") \
+ V(AddStream, "addStream") \
+ V(Cancel, "cancel") \
+ V(Close, "close") \
V(Values, "values") \
V(_EnumNames, "_enum_names") \
V(ExprTemp, ":expr_temp") \
@@ -94,6 +103,7 @@
V(AsyncOperationParam, ":async_result") \
V(AsyncOperationErrorParam, ":async_error_param") \
V(AsyncOperationStackTraceParam, ":async_stack_trace_param") \
+ V(AsyncSavedTryCtxVarPrefix, ":async_saved_try_ctx_var_") \
V(AsyncCatchHelper, "_asyncCatchHelper") \
V(Await, "await") \
V(AwaitContextVar, ":await_ctx_var") \
@@ -340,7 +350,7 @@
V(_leftShiftWithMask32, "_leftShiftWithMask32") \
V(OptimizedOut, "<optimized out>") \
V(NotInitialized, "<not initialized>") \
- V(AllocationStubFor, "Allocation stub for ") \
+ V(AllocationStubFor, "[Stub] Allocate ") \
V(TempParam, ":temp_param") \
V(_UserTag, "_UserTag") \
V(Default, "Default") \
diff --git a/runtime/vm/tags.cc b/runtime/vm/tags.cc
index 21e1d5a..0b8e75e 100644
--- a/runtime/vm/tags.cc
+++ b/runtime/vm/tags.cc
@@ -33,11 +33,12 @@
bool VMTag::IsNativeEntryTag(uword tag) {
- if (tag == 0) {
+ if ((tag == kRootTagId) || (tag == kTruncatedTagId)) {
return false;
}
ASSERT(tag != kInvalidTagId);
ASSERT(tag != kNumVMTags);
+ ASSERT(tag != kLastTagId);
return (tag > kNumVMTags) && !IsRuntimeEntryTag(tag);
}
diff --git a/runtime/vm/tags.h b/runtime/vm/tags.h
index f2288b3..8226991 100644
--- a/runtime/vm/tags.h
+++ b/runtime/vm/tags.h
@@ -23,6 +23,7 @@
V(Dart) \
V(GCNewSpace) \
V(GCOldSpace) \
+ V(Embedder) \
V(Runtime) \
V(Native) \
@@ -35,6 +36,9 @@
VM_TAG_LIST(DEFINE_VM_TAG_ID)
#undef DEFINE_VM_TAG_KIND
kNumVMTags,
+ kRootTagId, // Special tag used as root of all profiles.
+ kTruncatedTagId, // Special tag used to indicate a truncated call stack.
+ kLastTagId,
};
static bool IsVMTag(uword id) {
@@ -87,7 +91,7 @@
class UserTags : public AllStatic {
public:
// UserTag id space: [kUserTagIdOffset, kUserTagIdOffset + kMaxUserTags).
- static const intptr_t kMaxUserTags = 64;
+ static const intptr_t kMaxUserTags = 256;
static const uword kUserTagIdOffset = 0x4096;
static const uword kDefaultUserTag = kUserTagIdOffset;
static const char* TagName(uword tag_id);
diff --git a/runtime/vm/thread_interrupter.h b/runtime/vm/thread_interrupter.h
index 5d0e1ef..2d9e336 100644
--- a/runtime/vm/thread_interrupter.h
+++ b/runtime/vm/thread_interrupter.h
@@ -18,6 +18,7 @@
uintptr_t csp;
uintptr_t dsp;
uintptr_t fp;
+ uintptr_t lr;
};
// When a thread is interrupted the thread specific interrupt callback will be
diff --git a/runtime/vm/thread_interrupter_android.cc b/runtime/vm/thread_interrupter_android.cc
index 8784b31..237d783 100644
--- a/runtime/vm/thread_interrupter_android.cc
+++ b/runtime/vm/thread_interrupter_android.cc
@@ -39,6 +39,7 @@
its.fp = SignalHandler::GetFramePointer(mcontext);
its.csp = SignalHandler::GetCStackPointer(mcontext);
its.dsp = SignalHandler::GetDartStackPointer(mcontext);
+ its.lr = SignalHandler::GetLinkRegister(mcontext);
state->callback(its, state->data);
}
};
diff --git a/runtime/vm/thread_interrupter_linux.cc b/runtime/vm/thread_interrupter_linux.cc
index b062f55..67eee89 100644
--- a/runtime/vm/thread_interrupter_linux.cc
+++ b/runtime/vm/thread_interrupter_linux.cc
@@ -37,6 +37,7 @@
its.fp = SignalHandler::GetFramePointer(mcontext);
its.csp = SignalHandler::GetCStackPointer(mcontext);
its.dsp = SignalHandler::GetDartStackPointer(mcontext);
+ its.lr = SignalHandler::GetLinkRegister(mcontext);
state->callback(its, state->data);
}
};
diff --git a/runtime/vm/thread_interrupter_macos.cc b/runtime/vm/thread_interrupter_macos.cc
index d6a0fc9..4d72afa 100644
--- a/runtime/vm/thread_interrupter_macos.cc
+++ b/runtime/vm/thread_interrupter_macos.cc
@@ -37,6 +37,7 @@
its.fp = SignalHandler::GetFramePointer(mcontext);
its.csp = SignalHandler::GetCStackPointer(mcontext);
its.dsp = SignalHandler::GetDartStackPointer(mcontext);
+ its.lr = SignalHandler::GetLinkRegister(mcontext);
state->callback(its, state->data);
}
};
diff --git a/sdk/bin/dartfmt b/sdk/bin/dartfmt
index 0c69a75..e4de89c 100755
--- a/sdk/bin/dartfmt
+++ b/sdk/bin/dartfmt
@@ -3,8 +3,8 @@
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
-# Run dartfmt.dart on the Dart VM. This script assumes the Dart SDK's directory
-# structure.
+# Run dart_style/bin/format.dart on the Dart VM. This script assumes the Dart
+# repo's directory structure.
function follow_links() {
file="$1"
@@ -20,34 +20,25 @@
# Handle the case where dart-sdk/bin has been symlinked to.
BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
-
SDK_DIR="$(cd "${BIN_DIR}/.." ; pwd -P)"
-SNAPSHOT="$BIN_DIR/snapshots/dartfmt.dart.snapshot"
+DART="$BIN_DIR/dart"
-if test -f "$SNAPSHOT"; then
- # We are running the snapshot in the built SDK.
- DART="$BIN_DIR/dart"
- exec "$DART" "$SNAPSHOT" "$@"
+DART_ROOT="$(cd "${SDK_DIR}/.." ; pwd -P)"
+
+DARTFMT="$DART_ROOT/third_party/pkg_tested/dart_style/bin/format.dart"
+
+if [ -z "$DART_CONFIGURATION" ];
+then
+ DART_CONFIGURATION="ReleaseIA32"
+fi
+
+if [[ `uname` == 'Darwin' ]]; then
+ BUILD_DIR="$DART_ROOT/xcodebuild/$DART_CONFIGURATION"
else
- # We are running dartfmt from source in the development repo.
- if [ -z "$DART_CONFIGURATION" ];
- then
- DART_CONFIGURATION="ReleaseIA32"
- fi
+ BUILD_DIR="$DART_ROOT/out/$DART_CONFIGURATION"
+fi
- # TODO(pquitslund): this bit seems wrong, but was cribbed verbatim from pub
- # Need to revisit and fix
- if [[ `uname` == 'Darwin' ]];
- then
- BUILD_DIR="$SDK_DIR/../xcodebuild/$DART_CONFIGURATION"
- else
- BUILD_DIR="$SDK_DIR/../out/$DART_CONFIGURATION"
- fi
+PACKAGE_ROOT="$BUILD_DIR/packages/"
- DART="$BUILD_DIR/dart-sdk/bin/dart"
- PKG_DIR="$BUILD_DIR/packages"
- DARTFMT="$SDK_DIR/../pkg/analyzer/bin/formatter.dart"
-
- exec "$DART" "--package-root=$PKG_DIR" "$DARTFMT" "$@"
-fi
\ No newline at end of file
+exec "$DART" "--package-root=$PACKAGE_ROOT" "$DARTFMT" "$@"
diff --git a/sdk/bin/dartfmt.bat b/sdk/bin/dartfmt.bat
index 9cae111..5613b3a 100644
--- a/sdk/bin/dartfmt.bat
+++ b/sdk/bin/dartfmt.bat
@@ -11,27 +11,44 @@
rem Get rid of surrounding quotes.
for %%i in ("%RETURNED_BIN_DIR%") do set BIN_DIR=%%~fi
+set DART=%BIN_DIR%\dart
+
rem Get absolute full name for SDK_DIR.
for %%i in ("%BIN_DIR%\..\") do set SDK_DIR=%%~fi
rem Remove trailing backslash if there is one
-IF %SDK_DIR:~-1%==\ set SDK_DIR=%SDK_DIR:~0,-1%
+if %SDK_DIR:~-1%==\ set SDK_DIR=%SDK_DIR:~0,-1%
-set DARTFMT=%SDK_DIR%\..\packages\analyzer\bin\formatter.dart
-set DART=%BIN_DIR%\dart
-set SNAPSHOT=%BIN_DIR%\snapshots\dartfmt.dart.snapshot
+rem Get absolute full name for DART_ROOT.
+for %%i in ("%SDK_DIR%\..\") do set DART_ROOT=%%~fi
+rem Remove trailing backslash if there is one
+if %DART_ROOT:~-1%==\ set DART_ROOT=%DART_ROOT:~0,-1%
-if exist "%SNAPSHOT%" (
- "%DART%" "%SNAPSHOT%" %*
-) else (
- "%DART%" "%DARTFMT%" %*
-)
+set DARTFMT=%DART_ROOT%\third_party\pkg_tested\dart_style\bin\format.dart
+
+rem DART_CONFIGURATION defaults to ReleaseIA32
+if "%DART_CONFIGURATION%"=="" set DART_CONFIGURATION=ReleaseIA32
+
+set BUILD_DIR=%DART_ROOT%\build\%DART_CONFIGURATION%
+
+set PACKAGE_ROOT=%BUILD_DIR%\packages
+
+"%DART%" "--package-root=%PACKAGE_ROOT%" "%DARTFMT%" %*
endlocal
exit /b %errorlevel%
+rem Follow the symbolic links (junctions points) using `dir to determine the
+rem canonical path. Output with a link looks something like this
+rem
+rem 01/03/2013 10:11 PM <JUNCTION> abc def
+rem [c:\dart_bleeding\dart-repo.9\dart\build\ReleaseIA32\dart-sdk]
+rem
+rem So in the output of 'dir /a:l "targetdir"' we are looking for a filename
+rem surrounded by right angle bracket and left square bracket. Once we get
+rem the filename, which is name of the link, we recursively follow that.
:follow_links
setlocal
for %%i in (%1) do set result=%%~fi
diff --git a/sdk/bin/dartfmt_sdk b/sdk/bin/dartfmt_sdk
new file mode 100755
index 0000000..0a9cbef
--- /dev/null
+++ b/sdk/bin/dartfmt_sdk
@@ -0,0 +1,29 @@
+#!/bin/bash
+# Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# Run dart_style/bin/format.dart on the Dart VM. This script assumes the Dart
+# SDK's directory structure.
+
+function follow_links() {
+ file="$1"
+ while [ -h "$file" ]; do
+ # On Mac OS, readlink -f doesn't work.
+ file="$(readlink "$file")"
+ done
+ echo "$file"
+}
+
+# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
+PROG_NAME="$(follow_links "$BASH_SOURCE")"
+
+# Handle the case where dart-sdk/bin has been symlinked to.
+BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
+SDK_DIR="$(cd "${BIN_DIR}/.." ; pwd -P)"
+
+SNAPSHOT="$BIN_DIR/snapshots/dartfmt.dart.snapshot"
+
+# We are running the snapshot in the built SDK.
+DART="$BIN_DIR/dart"
+exec "$DART" "$SNAPSHOT" "$@"
diff --git a/sdk/bin/dartfmt_sdk.bat b/sdk/bin/dartfmt_sdk.bat
new file mode 100644
index 0000000..7de72c0
--- /dev/null
+++ b/sdk/bin/dartfmt_sdk.bat
@@ -0,0 +1,44 @@
+@echo off
+REM Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+REM for details. All rights reserved. Use of this source code is governed by a
+REM BSD-style license that can be found in the LICENSE file.
+
+setlocal
+rem Handle the case where dart-sdk/bin has been symlinked to.
+set DIR_NAME_WITH_SLASH=%~dp0
+set DIR_NAME=%DIR_NAME_WITH_SLASH:~0,-1%%
+call :follow_links "%DIR_NAME%", RETURNED_BIN_DIR
+rem Get rid of surrounding quotes.
+for %%i in ("%RETURNED_BIN_DIR%") do set BIN_DIR=%%~fi
+
+set DART=%BIN_DIR%\dart
+set SNAPSHOT=%BIN_DIR%\snapshots\dartfmt.dart.snapshot
+
+"%DART%" "%SNAPSHOT%" %*
+
+endlocal
+
+exit /b %errorlevel%
+
+rem Follow the symbolic links (junctions points) using `dir to determine the
+rem canonical path. Output with a link looks something like this
+rem
+rem 01/03/2013 10:11 PM <JUNCTION> abc def
+rem [c:\dart_bleeding\dart-repo.9\dart\build\ReleaseIA32\dart-sdk]
+rem
+rem So in the output of 'dir /a:l "targetdir"' we are looking for a filename
+rem surrounded by right angle bracket and left square bracket. Once we get
+rem the filename, which is name of the link, we recursively follow that.
+:follow_links
+setlocal
+for %%i in (%1) do set result=%%~fi
+set current=
+for /f "usebackq tokens=2 delims=[]" %%i in (`dir /a:l "%~dp1" 2^>nul ^
+ ^| find "> %~n1 ["`) do (
+ set current=%%i
+)
+if not "%current%"=="" call :follow_links "%current%", result
+endlocal & set %~2=%result%
+goto :eof
+
+:end
diff --git a/sdk/lib/_blink/dartium/_blink_dartium.dart b/sdk/lib/_blink/dartium/_blink_dartium.dart
index acbe820..a3d3f8d 100644
--- a/sdk/lib/_blink/dartium/_blink_dartium.dart
+++ b/sdk/lib/_blink/dartium/_blink_dartium.dart
@@ -9,13 +9,619 @@
final resolverMap = {
};
-dynamic _resolver(String s) native "blinkInstanceResolver";
-
dynamic resolver(String s) {
- String className = s;
- if (resolverMap.containsKey(s))
- className = resolverMap[s];
- return _resolver(className);
+ if (s == "ANGLEInstancedArrays") return BlinkANGLEInstancedArrays.instance;
+ if (s == "AnalyserNode") return BlinkAnalyserNode.instance;
+ if (s == "Animation") return BlinkAnimation.instance;
+ if (s == "AnimationEffect") return BlinkAnimationEffect.instance;
+ if (s == "AnimationNode") return BlinkAnimationNode.instance;
+ if (s == "AnimationPlayer") return BlinkAnimationPlayer.instance;
+ if (s == "AnimationPlayerEvent") return BlinkAnimationPlayerEvent.instance;
+ if (s == "AnimationTimeline") return BlinkAnimationTimeline.instance;
+ if (s == "ApplicationCache") return BlinkApplicationCache.instance;
+ if (s == "ApplicationCacheErrorEvent") return BlinkApplicationCacheErrorEvent.instance;
+ if (s == "Attr") return BlinkAttr.instance;
+ if (s == "AudioBuffer") return BlinkAudioBuffer.instance;
+ if (s == "AudioBufferSourceNode") return BlinkAudioBufferSourceNode.instance;
+ if (s == "AudioContext") return BlinkAudioContext.instance;
+ if (s == "AudioDestinationNode") return BlinkAudioDestinationNode.instance;
+ if (s == "AudioListener") return BlinkAudioListener.instance;
+ if (s == "AudioNode") return BlinkAudioNode.instance;
+ if (s == "AudioParam") return BlinkAudioParam.instance;
+ if (s == "AudioProcessingEvent") return BlinkAudioProcessingEvent.instance;
+ if (s == "AudioSourceNode") return BlinkAudioSourceNode.instance;
+ if (s == "AudioTrack") return BlinkAudioTrack.instance;
+ if (s == "AudioTrackList") return BlinkAudioTrackList.instance;
+ if (s == "AutocompleteErrorEvent") return BlinkAutocompleteErrorEvent.instance;
+ if (s == "BarProp") return BlinkBarProp.instance;
+ if (s == "BatteryManager") return BlinkBatteryManager.instance;
+ if (s == "BeforeUnloadEvent") return BlinkBeforeUnloadEvent.instance;
+ if (s == "BiquadFilterNode") return BlinkBiquadFilterNode.instance;
+ if (s == "Blob") return BlinkBlob.instance;
+ if (s == "Body") return BlinkBody.instance;
+ if (s == "CDATASection") return BlinkCDATASection.instance;
+ if (s == "CSS") return BlinkCSS.instance;
+ if (s == "CSSCharsetRule") return BlinkCSSCharsetRule.instance;
+ if (s == "CSSFontFaceRule") return BlinkCSSFontFaceRule.instance;
+ if (s == "CSSImportRule") return BlinkCSSImportRule.instance;
+ if (s == "CSSKeyframeRule") return BlinkCSSKeyframeRule.instance;
+ if (s == "CSSKeyframesRule") return BlinkCSSKeyframesRule.instance;
+ if (s == "CSSMediaRule") return BlinkCSSMediaRule.instance;
+ if (s == "CSSPageRule") return BlinkCSSPageRule.instance;
+ if (s == "CSSPrimitiveValue") return BlinkCSSPrimitiveValue.instance;
+ if (s == "CSSRule") return BlinkCSSRule.instance;
+ if (s == "CSSRuleList") return BlinkCSSRuleList.instance;
+ if (s == "CSSStyleDeclaration") return BlinkCSSStyleDeclaration.instance;
+ if (s == "CSSStyleRule") return BlinkCSSStyleRule.instance;
+ if (s == "CSSStyleSheet") return BlinkCSSStyleSheet.instance;
+ if (s == "CSSSupportsRule") return BlinkCSSSupportsRule.instance;
+ if (s == "CSSUnknownRule") return BlinkCSSUnknownRule.instance;
+ if (s == "CSSValue") return BlinkCSSValue.instance;
+ if (s == "CSSValueList") return BlinkCSSValueList.instance;
+ if (s == "CSSViewportRule") return BlinkCSSViewportRule.instance;
+ if (s == "Cache") return BlinkCache.instance;
+ if (s == "CacheStorage") return BlinkCacheStorage.instance;
+ if (s == "Canvas2DContextAttributes") return BlinkCanvas2DContextAttributes.instance;
+ if (s == "CanvasGradient") return BlinkCanvasGradient.instance;
+ if (s == "CanvasPattern") return BlinkCanvasPattern.instance;
+ if (s == "CanvasRenderingContext2D") return BlinkCanvasRenderingContext2D.instance;
+ if (s == "ChannelMergerNode") return BlinkChannelMergerNode.instance;
+ if (s == "ChannelSplitterNode") return BlinkChannelSplitterNode.instance;
+ if (s == "CharacterData") return BlinkCharacterData.instance;
+ if (s == "CircularGeofencingRegion") return BlinkCircularGeofencingRegion.instance;
+ if (s == "ClientRect") return BlinkClientRect.instance;
+ if (s == "ClientRectList") return BlinkClientRectList.instance;
+ if (s == "CloseEvent") return BlinkCloseEvent.instance;
+ if (s == "Comment") return BlinkComment.instance;
+ if (s == "CompositionEvent") return BlinkCompositionEvent.instance;
+ if (s == "Console") return BlinkConsole.instance;
+ if (s == "ConsoleBase") return BlinkConsoleBase.instance;
+ if (s == "ConvolverNode") return BlinkConvolverNode.instance;
+ if (s == "Coordinates") return BlinkCoordinates.instance;
+ if (s == "Counter") return BlinkCounter.instance;
+ if (s == "Credential") return BlinkCredential.instance;
+ if (s == "CredentialsContainer") return BlinkCredentialsContainer.instance;
+ if (s == "Crypto") return BlinkCrypto.instance;
+ if (s == "CryptoKey") return BlinkCryptoKey.instance;
+ if (s == "CustomEvent") return BlinkCustomEvent.instance;
+ if (s == "DOMError") return BlinkDOMError.instance;
+ if (s == "DOMException") return BlinkDOMException.instance;
+ if (s == "DOMFileSystem") return BlinkDOMFileSystem.instance;
+ if (s == "DOMFileSystemSync") return BlinkDOMFileSystemSync.instance;
+ if (s == "DOMImplementation") return BlinkDOMImplementation.instance;
+ if (s == "DOMMatrix") return BlinkDOMMatrix.instance;
+ if (s == "DOMMatrixReadOnly") return BlinkDOMMatrixReadOnly.instance;
+ if (s == "DOMParser") return BlinkDOMParser.instance;
+ if (s == "DOMPoint") return BlinkDOMPoint.instance;
+ if (s == "DOMPointReadOnly") return BlinkDOMPointReadOnly.instance;
+ if (s == "DOMRect") return BlinkDOMRect.instance;
+ if (s == "DOMRectReadOnly") return BlinkDOMRectReadOnly.instance;
+ if (s == "DOMSettableTokenList") return BlinkDOMSettableTokenList.instance;
+ if (s == "DOMStringList") return BlinkDOMStringList.instance;
+ if (s == "DOMStringMap") return BlinkDOMStringMap.instance;
+ if (s == "DOMTokenList") return BlinkDOMTokenList.instance;
+ if (s == "DataTransfer") return BlinkDataTransfer.instance;
+ if (s == "DataTransferItem") return BlinkDataTransferItem.instance;
+ if (s == "DataTransferItemList") return BlinkDataTransferItemList.instance;
+ if (s == "Database") return BlinkDatabase.instance;
+ if (s == "DedicatedWorkerGlobalScope") return BlinkDedicatedWorkerGlobalScope.instance;
+ if (s == "DelayNode") return BlinkDelayNode.instance;
+ if (s == "DeprecatedStorageInfo") return BlinkDeprecatedStorageInfo.instance;
+ if (s == "DeprecatedStorageQuota") return BlinkDeprecatedStorageQuota.instance;
+ if (s == "DeviceAcceleration") return BlinkDeviceAcceleration.instance;
+ if (s == "DeviceLightEvent") return BlinkDeviceLightEvent.instance;
+ if (s == "DeviceMotionEvent") return BlinkDeviceMotionEvent.instance;
+ if (s == "DeviceOrientationEvent") return BlinkDeviceOrientationEvent.instance;
+ if (s == "DeviceRotationRate") return BlinkDeviceRotationRate.instance;
+ if (s == "DirectoryEntry") return BlinkDirectoryEntry.instance;
+ if (s == "DirectoryEntrySync") return BlinkDirectoryEntrySync.instance;
+ if (s == "DirectoryReader") return BlinkDirectoryReader.instance;
+ if (s == "DirectoryReaderSync") return BlinkDirectoryReaderSync.instance;
+ if (s == "Document") return BlinkDocument.instance;
+ if (s == "DocumentFragment") return BlinkDocumentFragment.instance;
+ if (s == "DocumentType") return BlinkDocumentType.instance;
+ if (s == "DynamicsCompressorNode") return BlinkDynamicsCompressorNode.instance;
+ if (s == "EXTBlendMinMax") return BlinkEXTBlendMinMax.instance;
+ if (s == "EXTFragDepth") return BlinkEXTFragDepth.instance;
+ if (s == "EXTShaderTextureLOD") return BlinkEXTShaderTextureLOD.instance;
+ if (s == "EXTTextureFilterAnisotropic") return BlinkEXTTextureFilterAnisotropic.instance;
+ if (s == "Element") return BlinkElement.instance;
+ if (s == "Entry") return BlinkEntry.instance;
+ if (s == "EntrySync") return BlinkEntrySync.instance;
+ if (s == "ErrorEvent") return BlinkErrorEvent.instance;
+ if (s == "Event") return BlinkEvent.instance;
+ if (s == "EventSource") return BlinkEventSource.instance;
+ if (s == "EventTarget") return BlinkEventTarget.instance;
+ if (s == "ExtendableEvent") return BlinkExtendableEvent.instance;
+ if (s == "FederatedCredential") return BlinkFederatedCredential.instance;
+ if (s == "FetchEvent") return BlinkFetchEvent.instance;
+ if (s == "File") return BlinkFile.instance;
+ if (s == "FileEntry") return BlinkFileEntry.instance;
+ if (s == "FileEntrySync") return BlinkFileEntrySync.instance;
+ if (s == "FileError") return BlinkFileError.instance;
+ if (s == "FileList") return BlinkFileList.instance;
+ if (s == "FileReader") return BlinkFileReader.instance;
+ if (s == "FileReaderSync") return BlinkFileReaderSync.instance;
+ if (s == "FileWriter") return BlinkFileWriter.instance;
+ if (s == "FileWriterSync") return BlinkFileWriterSync.instance;
+ if (s == "FocusEvent") return BlinkFocusEvent.instance;
+ if (s == "FontFace") return BlinkFontFace.instance;
+ if (s == "FontFaceSet") return BlinkFontFaceSet.instance;
+ if (s == "FontFaceSetLoadEvent") return BlinkFontFaceSetLoadEvent.instance;
+ if (s == "FormData") return BlinkFormData.instance;
+ if (s == "GainNode") return BlinkGainNode.instance;
+ if (s == "Gamepad") return BlinkGamepad.instance;
+ if (s == "GamepadButton") return BlinkGamepadButton.instance;
+ if (s == "GamepadEvent") return BlinkGamepadEvent.instance;
+ if (s == "GamepadList") return BlinkGamepadList.instance;
+ if (s == "Geofencing") return BlinkGeofencing.instance;
+ if (s == "GeofencingRegion") return BlinkGeofencingRegion.instance;
+ if (s == "Geolocation") return BlinkGeolocation.instance;
+ if (s == "Geoposition") return BlinkGeoposition.instance;
+ if (s == "HTMLAllCollection") return BlinkHTMLAllCollection.instance;
+ if (s == "HTMLAnchorElement") return BlinkHTMLAnchorElement.instance;
+ if (s == "HTMLAppletElement") return BlinkHTMLAppletElement.instance;
+ if (s == "HTMLAreaElement") return BlinkHTMLAreaElement.instance;
+ if (s == "HTMLAudioElement") return BlinkHTMLAudioElement.instance;
+ if (s == "HTMLBRElement") return BlinkHTMLBRElement.instance;
+ if (s == "HTMLBaseElement") return BlinkHTMLBaseElement.instance;
+ if (s == "HTMLBodyElement") return BlinkHTMLBodyElement.instance;
+ if (s == "HTMLButtonElement") return BlinkHTMLButtonElement.instance;
+ if (s == "HTMLCanvasElement") return BlinkHTMLCanvasElement.instance;
+ if (s == "HTMLCollection") return BlinkHTMLCollection.instance;
+ if (s == "HTMLContentElement") return BlinkHTMLContentElement.instance;
+ if (s == "HTMLDListElement") return BlinkHTMLDListElement.instance;
+ if (s == "HTMLDataListElement") return BlinkHTMLDataListElement.instance;
+ if (s == "HTMLDetailsElement") return BlinkHTMLDetailsElement.instance;
+ if (s == "HTMLDialogElement") return BlinkHTMLDialogElement.instance;
+ if (s == "HTMLDirectoryElement") return BlinkHTMLDirectoryElement.instance;
+ if (s == "HTMLDivElement") return BlinkHTMLDivElement.instance;
+ if (s == "HTMLDocument") return BlinkHTMLDocument.instance;
+ if (s == "HTMLElement") return BlinkHTMLElement.instance;
+ if (s == "HTMLEmbedElement") return BlinkHTMLEmbedElement.instance;
+ if (s == "HTMLFieldSetElement") return BlinkHTMLFieldSetElement.instance;
+ if (s == "HTMLFontElement") return BlinkHTMLFontElement.instance;
+ if (s == "HTMLFormControlsCollection") return BlinkHTMLFormControlsCollection.instance;
+ if (s == "HTMLFormElement") return BlinkHTMLFormElement.instance;
+ if (s == "HTMLFrameElement") return BlinkHTMLFrameElement.instance;
+ if (s == "HTMLFrameSetElement") return BlinkHTMLFrameSetElement.instance;
+ if (s == "HTMLHRElement") return BlinkHTMLHRElement.instance;
+ if (s == "HTMLHeadElement") return BlinkHTMLHeadElement.instance;
+ if (s == "HTMLHeadingElement") return BlinkHTMLHeadingElement.instance;
+ if (s == "HTMLHtmlElement") return BlinkHTMLHtmlElement.instance;
+ if (s == "HTMLIFrameElement") return BlinkHTMLIFrameElement.instance;
+ if (s == "HTMLImageElement") return BlinkHTMLImageElement.instance;
+ if (s == "HTMLInputElement") return BlinkHTMLInputElement.instance;
+ if (s == "HTMLKeygenElement") return BlinkHTMLKeygenElement.instance;
+ if (s == "HTMLLIElement") return BlinkHTMLLIElement.instance;
+ if (s == "HTMLLabelElement") return BlinkHTMLLabelElement.instance;
+ if (s == "HTMLLegendElement") return BlinkHTMLLegendElement.instance;
+ if (s == "HTMLLinkElement") return BlinkHTMLLinkElement.instance;
+ if (s == "HTMLMapElement") return BlinkHTMLMapElement.instance;
+ if (s == "HTMLMarqueeElement") return BlinkHTMLMarqueeElement.instance;
+ if (s == "HTMLMediaElement") return BlinkHTMLMediaElement.instance;
+ if (s == "HTMLMenuElement") return BlinkHTMLMenuElement.instance;
+ if (s == "HTMLMenuItemElement") return BlinkHTMLMenuItemElement.instance;
+ if (s == "HTMLMetaElement") return BlinkHTMLMetaElement.instance;
+ if (s == "HTMLMeterElement") return BlinkHTMLMeterElement.instance;
+ if (s == "HTMLModElement") return BlinkHTMLModElement.instance;
+ if (s == "HTMLOListElement") return BlinkHTMLOListElement.instance;
+ if (s == "HTMLObjectElement") return BlinkHTMLObjectElement.instance;
+ if (s == "HTMLOptGroupElement") return BlinkHTMLOptGroupElement.instance;
+ if (s == "HTMLOptionElement") return BlinkHTMLOptionElement.instance;
+ if (s == "HTMLOptionsCollection") return BlinkHTMLOptionsCollection.instance;
+ if (s == "HTMLOutputElement") return BlinkHTMLOutputElement.instance;
+ if (s == "HTMLParagraphElement") return BlinkHTMLParagraphElement.instance;
+ if (s == "HTMLParamElement") return BlinkHTMLParamElement.instance;
+ if (s == "HTMLPictureElement") return BlinkHTMLPictureElement.instance;
+ if (s == "HTMLPreElement") return BlinkHTMLPreElement.instance;
+ if (s == "HTMLProgressElement") return BlinkHTMLProgressElement.instance;
+ if (s == "HTMLQuoteElement") return BlinkHTMLQuoteElement.instance;
+ if (s == "HTMLScriptElement") return BlinkHTMLScriptElement.instance;
+ if (s == "HTMLSelectElement") return BlinkHTMLSelectElement.instance;
+ if (s == "HTMLShadowElement") return BlinkHTMLShadowElement.instance;
+ if (s == "HTMLSourceElement") return BlinkHTMLSourceElement.instance;
+ if (s == "HTMLSpanElement") return BlinkHTMLSpanElement.instance;
+ if (s == "HTMLStyleElement") return BlinkHTMLStyleElement.instance;
+ if (s == "HTMLTableCaptionElement") return BlinkHTMLTableCaptionElement.instance;
+ if (s == "HTMLTableCellElement") return BlinkHTMLTableCellElement.instance;
+ if (s == "HTMLTableColElement") return BlinkHTMLTableColElement.instance;
+ if (s == "HTMLTableElement") return BlinkHTMLTableElement.instance;
+ if (s == "HTMLTableRowElement") return BlinkHTMLTableRowElement.instance;
+ if (s == "HTMLTableSectionElement") return BlinkHTMLTableSectionElement.instance;
+ if (s == "HTMLTemplateElement") return BlinkHTMLTemplateElement.instance;
+ if (s == "HTMLTextAreaElement") return BlinkHTMLTextAreaElement.instance;
+ if (s == "HTMLTitleElement") return BlinkHTMLTitleElement.instance;
+ if (s == "HTMLTrackElement") return BlinkHTMLTrackElement.instance;
+ if (s == "HTMLUListElement") return BlinkHTMLUListElement.instance;
+ if (s == "HTMLUnknownElement") return BlinkHTMLUnknownElement.instance;
+ if (s == "HTMLVideoElement") return BlinkHTMLVideoElement.instance;
+ if (s == "HashChangeEvent") return BlinkHashChangeEvent.instance;
+ if (s == "Headers") return BlinkHeaders.instance;
+ if (s == "History") return BlinkHistory.instance;
+ if (s == "IDBCursor") return BlinkIDBCursor.instance;
+ if (s == "IDBCursorWithValue") return BlinkIDBCursorWithValue.instance;
+ if (s == "IDBDatabase") return BlinkIDBDatabase.instance;
+ if (s == "IDBFactory") return BlinkIDBFactory.instance;
+ if (s == "IDBIndex") return BlinkIDBIndex.instance;
+ if (s == "IDBKeyRange") return BlinkIDBKeyRange.instance;
+ if (s == "IDBObjectStore") return BlinkIDBObjectStore.instance;
+ if (s == "IDBOpenDBRequest") return BlinkIDBOpenDBRequest.instance;
+ if (s == "IDBRequest") return BlinkIDBRequest.instance;
+ if (s == "IDBTransaction") return BlinkIDBTransaction.instance;
+ if (s == "IDBVersionChangeEvent") return BlinkIDBVersionChangeEvent.instance;
+ if (s == "ImageBitmap") return BlinkImageBitmap.instance;
+ if (s == "ImageData") return BlinkImageData.instance;
+ if (s == "InjectedScriptHost") return BlinkInjectedScriptHost.instance;
+ if (s == "InputMethodContext") return BlinkInputMethodContext.instance;
+ if (s == "InspectorFrontendHost") return BlinkInspectorFrontendHost.instance;
+ if (s == "InspectorOverlayHost") return BlinkInspectorOverlayHost.instance;
+ if (s == "InstallEvent") return BlinkInstallEvent.instance;
+ if (s == "Iterator") return BlinkIterator.instance;
+ if (s == "JavaScriptCallFrame") return BlinkJavaScriptCallFrame.instance;
+ if (s == "KeyboardEvent") return BlinkKeyboardEvent.instance;
+ if (s == "LocalCredential") return BlinkLocalCredential.instance;
+ if (s == "Location") return BlinkLocation.instance;
+ if (s == "MIDIAccess") return BlinkMIDIAccess.instance;
+ if (s == "MIDIConnectionEvent") return BlinkMIDIConnectionEvent.instance;
+ if (s == "MIDIInput") return BlinkMIDIInput.instance;
+ if (s == "MIDIInputMap") return BlinkMIDIInputMap.instance;
+ if (s == "MIDIMessageEvent") return BlinkMIDIMessageEvent.instance;
+ if (s == "MIDIOutput") return BlinkMIDIOutput.instance;
+ if (s == "MIDIOutputMap") return BlinkMIDIOutputMap.instance;
+ if (s == "MIDIPort") return BlinkMIDIPort.instance;
+ if (s == "MediaController") return BlinkMediaController.instance;
+ if (s == "MediaDeviceInfo") return BlinkMediaDeviceInfo.instance;
+ if (s == "MediaElementAudioSourceNode") return BlinkMediaElementAudioSourceNode.instance;
+ if (s == "MediaError") return BlinkMediaError.instance;
+ if (s == "MediaKeyError") return BlinkMediaKeyError.instance;
+ if (s == "MediaKeyEvent") return BlinkMediaKeyEvent.instance;
+ if (s == "MediaKeyMessageEvent") return BlinkMediaKeyMessageEvent.instance;
+ if (s == "MediaKeyNeededEvent") return BlinkMediaKeyNeededEvent.instance;
+ if (s == "MediaKeySession") return BlinkMediaKeySession.instance;
+ if (s == "MediaKeys") return BlinkMediaKeys.instance;
+ if (s == "MediaList") return BlinkMediaList.instance;
+ if (s == "MediaQueryList") return BlinkMediaQueryList.instance;
+ if (s == "MediaQueryListEvent") return BlinkMediaQueryListEvent.instance;
+ if (s == "MediaSource") return BlinkMediaSource.instance;
+ if (s == "MediaStream") return BlinkMediaStream.instance;
+ if (s == "MediaStreamAudioDestinationNode") return BlinkMediaStreamAudioDestinationNode.instance;
+ if (s == "MediaStreamAudioSourceNode") return BlinkMediaStreamAudioSourceNode.instance;
+ if (s == "MediaStreamEvent") return BlinkMediaStreamEvent.instance;
+ if (s == "MediaStreamTrack") return BlinkMediaStreamTrack.instance;
+ if (s == "MediaStreamTrackEvent") return BlinkMediaStreamTrackEvent.instance;
+ if (s == "MemoryInfo") return BlinkMemoryInfo.instance;
+ if (s == "MessageChannel") return BlinkMessageChannel.instance;
+ if (s == "MessageEvent") return BlinkMessageEvent.instance;
+ if (s == "MessagePort") return BlinkMessagePort.instance;
+ if (s == "Metadata") return BlinkMetadata.instance;
+ if (s == "MimeType") return BlinkMimeType.instance;
+ if (s == "MimeTypeArray") return BlinkMimeTypeArray.instance;
+ if (s == "MouseEvent") return BlinkMouseEvent.instance;
+ if (s == "MutationEvent") return BlinkMutationEvent.instance;
+ if (s == "MutationObserver") return BlinkMutationObserver.instance;
+ if (s == "MutationRecord") return BlinkMutationRecord.instance;
+ if (s == "NamedNodeMap") return BlinkNamedNodeMap.instance;
+ if (s == "Navigator") return BlinkNavigator.instance;
+ if (s == "NavigatorUserMediaError") return BlinkNavigatorUserMediaError.instance;
+ if (s == "NetworkInformation") return BlinkNetworkInformation.instance;
+ if (s == "Node") return BlinkNode.instance;
+ if (s == "NodeFilter") return BlinkNodeFilter.instance;
+ if (s == "NodeIterator") return BlinkNodeIterator.instance;
+ if (s == "NodeList") return BlinkNodeList.instance;
+ if (s == "Notification") return BlinkNotification.instance;
+ if (s == "OESElementIndexUint") return BlinkOESElementIndexUint.instance;
+ if (s == "OESStandardDerivatives") return BlinkOESStandardDerivatives.instance;
+ if (s == "OESTextureFloat") return BlinkOESTextureFloat.instance;
+ if (s == "OESTextureFloatLinear") return BlinkOESTextureFloatLinear.instance;
+ if (s == "OESTextureHalfFloat") return BlinkOESTextureHalfFloat.instance;
+ if (s == "OESTextureHalfFloatLinear") return BlinkOESTextureHalfFloatLinear.instance;
+ if (s == "OESVertexArrayObject") return BlinkOESVertexArrayObject.instance;
+ if (s == "OfflineAudioCompletionEvent") return BlinkOfflineAudioCompletionEvent.instance;
+ if (s == "OfflineAudioContext") return BlinkOfflineAudioContext.instance;
+ if (s == "OscillatorNode") return BlinkOscillatorNode.instance;
+ if (s == "OverflowEvent") return BlinkOverflowEvent.instance;
+ if (s == "PagePopupController") return BlinkPagePopupController.instance;
+ if (s == "PageTransitionEvent") return BlinkPageTransitionEvent.instance;
+ if (s == "PannerNode") return BlinkPannerNode.instance;
+ if (s == "Path2D") return BlinkPath2D.instance;
+ if (s == "Performance") return BlinkPerformance.instance;
+ if (s == "PerformanceEntry") return BlinkPerformanceEntry.instance;
+ if (s == "PerformanceMark") return BlinkPerformanceMark.instance;
+ if (s == "PerformanceMeasure") return BlinkPerformanceMeasure.instance;
+ if (s == "PerformanceNavigation") return BlinkPerformanceNavigation.instance;
+ if (s == "PerformanceResourceTiming") return BlinkPerformanceResourceTiming.instance;
+ if (s == "PerformanceTiming") return BlinkPerformanceTiming.instance;
+ if (s == "PeriodicWave") return BlinkPeriodicWave.instance;
+ if (s == "Plugin") return BlinkPlugin.instance;
+ if (s == "PluginArray") return BlinkPluginArray.instance;
+ if (s == "PluginPlaceholderElement") return BlinkPluginPlaceholderElement.instance;
+ if (s == "PopStateEvent") return BlinkPopStateEvent.instance;
+ if (s == "PositionError") return BlinkPositionError.instance;
+ if (s == "Presentation") return BlinkPresentation.instance;
+ if (s == "ProcessingInstruction") return BlinkProcessingInstruction.instance;
+ if (s == "ProgressEvent") return BlinkProgressEvent.instance;
+ if (s == "PushEvent") return BlinkPushEvent.instance;
+ if (s == "PushManager") return BlinkPushManager.instance;
+ if (s == "PushRegistration") return BlinkPushRegistration.instance;
+ if (s == "RGBColor") return BlinkRGBColor.instance;
+ if (s == "RTCDTMFSender") return BlinkRTCDTMFSender.instance;
+ if (s == "RTCDTMFToneChangeEvent") return BlinkRTCDTMFToneChangeEvent.instance;
+ if (s == "RTCDataChannel") return BlinkRTCDataChannel.instance;
+ if (s == "RTCDataChannelEvent") return BlinkRTCDataChannelEvent.instance;
+ if (s == "RTCIceCandidate") return BlinkRTCIceCandidate.instance;
+ if (s == "RTCIceCandidateEvent") return BlinkRTCIceCandidateEvent.instance;
+ if (s == "RTCPeerConnection") return BlinkRTCPeerConnection.instance;
+ if (s == "RTCSessionDescription") return BlinkRTCSessionDescription.instance;
+ if (s == "RTCStatsReport") return BlinkRTCStatsReport.instance;
+ if (s == "RTCStatsResponse") return BlinkRTCStatsResponse.instance;
+ if (s == "RadioNodeList") return BlinkRadioNodeList.instance;
+ if (s == "Range") return BlinkRange.instance;
+ if (s == "ReadableStream") return BlinkReadableStream.instance;
+ if (s == "Rect") return BlinkRect.instance;
+ if (s == "RelatedEvent") return BlinkRelatedEvent.instance;
+ if (s == "Request") return BlinkRequest.instance;
+ if (s == "ResourceProgressEvent") return BlinkResourceProgressEvent.instance;
+ if (s == "Response") return BlinkResponse.instance;
+ if (s == "SQLError") return BlinkSQLError.instance;
+ if (s == "SQLResultSet") return BlinkSQLResultSet.instance;
+ if (s == "SQLResultSetRowList") return BlinkSQLResultSetRowList.instance;
+ if (s == "SQLTransaction") return BlinkSQLTransaction.instance;
+ if (s == "SVGAElement") return BlinkSVGAElement.instance;
+ if (s == "SVGAltGlyphDefElement") return BlinkSVGAltGlyphDefElement.instance;
+ if (s == "SVGAltGlyphElement") return BlinkSVGAltGlyphElement.instance;
+ if (s == "SVGAltGlyphItemElement") return BlinkSVGAltGlyphItemElement.instance;
+ if (s == "SVGAngle") return BlinkSVGAngle.instance;
+ if (s == "SVGAnimateElement") return BlinkSVGAnimateElement.instance;
+ if (s == "SVGAnimateMotionElement") return BlinkSVGAnimateMotionElement.instance;
+ if (s == "SVGAnimateTransformElement") return BlinkSVGAnimateTransformElement.instance;
+ if (s == "SVGAnimatedAngle") return BlinkSVGAnimatedAngle.instance;
+ if (s == "SVGAnimatedBoolean") return BlinkSVGAnimatedBoolean.instance;
+ if (s == "SVGAnimatedEnumeration") return BlinkSVGAnimatedEnumeration.instance;
+ if (s == "SVGAnimatedInteger") return BlinkSVGAnimatedInteger.instance;
+ if (s == "SVGAnimatedLength") return BlinkSVGAnimatedLength.instance;
+ if (s == "SVGAnimatedLengthList") return BlinkSVGAnimatedLengthList.instance;
+ if (s == "SVGAnimatedNumber") return BlinkSVGAnimatedNumber.instance;
+ if (s == "SVGAnimatedNumberList") return BlinkSVGAnimatedNumberList.instance;
+ if (s == "SVGAnimatedPreserveAspectRatio") return BlinkSVGAnimatedPreserveAspectRatio.instance;
+ if (s == "SVGAnimatedRect") return BlinkSVGAnimatedRect.instance;
+ if (s == "SVGAnimatedString") return BlinkSVGAnimatedString.instance;
+ if (s == "SVGAnimatedTransformList") return BlinkSVGAnimatedTransformList.instance;
+ if (s == "SVGAnimationElement") return BlinkSVGAnimationElement.instance;
+ if (s == "SVGCircleElement") return BlinkSVGCircleElement.instance;
+ if (s == "SVGClipPathElement") return BlinkSVGClipPathElement.instance;
+ if (s == "SVGComponentTransferFunctionElement") return BlinkSVGComponentTransferFunctionElement.instance;
+ if (s == "SVGCursorElement") return BlinkSVGCursorElement.instance;
+ if (s == "SVGDefsElement") return BlinkSVGDefsElement.instance;
+ if (s == "SVGDescElement") return BlinkSVGDescElement.instance;
+ if (s == "SVGDiscardElement") return BlinkSVGDiscardElement.instance;
+ if (s == "SVGElement") return BlinkSVGElement.instance;
+ if (s == "SVGEllipseElement") return BlinkSVGEllipseElement.instance;
+ if (s == "SVGFEBlendElement") return BlinkSVGFEBlendElement.instance;
+ if (s == "SVGFEColorMatrixElement") return BlinkSVGFEColorMatrixElement.instance;
+ if (s == "SVGFEComponentTransferElement") return BlinkSVGFEComponentTransferElement.instance;
+ if (s == "SVGFECompositeElement") return BlinkSVGFECompositeElement.instance;
+ if (s == "SVGFEConvolveMatrixElement") return BlinkSVGFEConvolveMatrixElement.instance;
+ if (s == "SVGFEDiffuseLightingElement") return BlinkSVGFEDiffuseLightingElement.instance;
+ if (s == "SVGFEDisplacementMapElement") return BlinkSVGFEDisplacementMapElement.instance;
+ if (s == "SVGFEDistantLightElement") return BlinkSVGFEDistantLightElement.instance;
+ if (s == "SVGFEDropShadowElement") return BlinkSVGFEDropShadowElement.instance;
+ if (s == "SVGFEFloodElement") return BlinkSVGFEFloodElement.instance;
+ if (s == "SVGFEFuncAElement") return BlinkSVGFEFuncAElement.instance;
+ if (s == "SVGFEFuncBElement") return BlinkSVGFEFuncBElement.instance;
+ if (s == "SVGFEFuncGElement") return BlinkSVGFEFuncGElement.instance;
+ if (s == "SVGFEFuncRElement") return BlinkSVGFEFuncRElement.instance;
+ if (s == "SVGFEGaussianBlurElement") return BlinkSVGFEGaussianBlurElement.instance;
+ if (s == "SVGFEImageElement") return BlinkSVGFEImageElement.instance;
+ if (s == "SVGFEMergeElement") return BlinkSVGFEMergeElement.instance;
+ if (s == "SVGFEMergeNodeElement") return BlinkSVGFEMergeNodeElement.instance;
+ if (s == "SVGFEMorphologyElement") return BlinkSVGFEMorphologyElement.instance;
+ if (s == "SVGFEOffsetElement") return BlinkSVGFEOffsetElement.instance;
+ if (s == "SVGFEPointLightElement") return BlinkSVGFEPointLightElement.instance;
+ if (s == "SVGFESpecularLightingElement") return BlinkSVGFESpecularLightingElement.instance;
+ if (s == "SVGFESpotLightElement") return BlinkSVGFESpotLightElement.instance;
+ if (s == "SVGFETileElement") return BlinkSVGFETileElement.instance;
+ if (s == "SVGFETurbulenceElement") return BlinkSVGFETurbulenceElement.instance;
+ if (s == "SVGFilterElement") return BlinkSVGFilterElement.instance;
+ if (s == "SVGFontElement") return BlinkSVGFontElement.instance;
+ if (s == "SVGFontFaceElement") return BlinkSVGFontFaceElement.instance;
+ if (s == "SVGFontFaceFormatElement") return BlinkSVGFontFaceFormatElement.instance;
+ if (s == "SVGFontFaceNameElement") return BlinkSVGFontFaceNameElement.instance;
+ if (s == "SVGFontFaceSrcElement") return BlinkSVGFontFaceSrcElement.instance;
+ if (s == "SVGFontFaceUriElement") return BlinkSVGFontFaceUriElement.instance;
+ if (s == "SVGForeignObjectElement") return BlinkSVGForeignObjectElement.instance;
+ if (s == "SVGGElement") return BlinkSVGGElement.instance;
+ if (s == "SVGGeometryElement") return BlinkSVGGeometryElement.instance;
+ if (s == "SVGGlyphElement") return BlinkSVGGlyphElement.instance;
+ if (s == "SVGGlyphRefElement") return BlinkSVGGlyphRefElement.instance;
+ if (s == "SVGGradientElement") return BlinkSVGGradientElement.instance;
+ if (s == "SVGGraphicsElement") return BlinkSVGGraphicsElement.instance;
+ if (s == "SVGHKernElement") return BlinkSVGHKernElement.instance;
+ if (s == "SVGImageElement") return BlinkSVGImageElement.instance;
+ if (s == "SVGLength") return BlinkSVGLength.instance;
+ if (s == "SVGLengthList") return BlinkSVGLengthList.instance;
+ if (s == "SVGLineElement") return BlinkSVGLineElement.instance;
+ if (s == "SVGLinearGradientElement") return BlinkSVGLinearGradientElement.instance;
+ if (s == "SVGMPathElement") return BlinkSVGMPathElement.instance;
+ if (s == "SVGMarkerElement") return BlinkSVGMarkerElement.instance;
+ if (s == "SVGMaskElement") return BlinkSVGMaskElement.instance;
+ if (s == "SVGMatrix") return BlinkSVGMatrix.instance;
+ if (s == "SVGMetadataElement") return BlinkSVGMetadataElement.instance;
+ if (s == "SVGMissingGlyphElement") return BlinkSVGMissingGlyphElement.instance;
+ if (s == "SVGNumber") return BlinkSVGNumber.instance;
+ if (s == "SVGNumberList") return BlinkSVGNumberList.instance;
+ if (s == "SVGPathElement") return BlinkSVGPathElement.instance;
+ if (s == "SVGPathSeg") return BlinkSVGPathSeg.instance;
+ if (s == "SVGPathSegArcAbs") return BlinkSVGPathSegArcAbs.instance;
+ if (s == "SVGPathSegArcRel") return BlinkSVGPathSegArcRel.instance;
+ if (s == "SVGPathSegClosePath") return BlinkSVGPathSegClosePath.instance;
+ if (s == "SVGPathSegCurvetoCubicAbs") return BlinkSVGPathSegCurvetoCubicAbs.instance;
+ if (s == "SVGPathSegCurvetoCubicRel") return BlinkSVGPathSegCurvetoCubicRel.instance;
+ if (s == "SVGPathSegCurvetoCubicSmoothAbs") return BlinkSVGPathSegCurvetoCubicSmoothAbs.instance;
+ if (s == "SVGPathSegCurvetoCubicSmoothRel") return BlinkSVGPathSegCurvetoCubicSmoothRel.instance;
+ if (s == "SVGPathSegCurvetoQuadraticAbs") return BlinkSVGPathSegCurvetoQuadraticAbs.instance;
+ if (s == "SVGPathSegCurvetoQuadraticRel") return BlinkSVGPathSegCurvetoQuadraticRel.instance;
+ if (s == "SVGPathSegCurvetoQuadraticSmoothAbs") return BlinkSVGPathSegCurvetoQuadraticSmoothAbs.instance;
+ if (s == "SVGPathSegCurvetoQuadraticSmoothRel") return BlinkSVGPathSegCurvetoQuadraticSmoothRel.instance;
+ if (s == "SVGPathSegLinetoAbs") return BlinkSVGPathSegLinetoAbs.instance;
+ if (s == "SVGPathSegLinetoHorizontalAbs") return BlinkSVGPathSegLinetoHorizontalAbs.instance;
+ if (s == "SVGPathSegLinetoHorizontalRel") return BlinkSVGPathSegLinetoHorizontalRel.instance;
+ if (s == "SVGPathSegLinetoRel") return BlinkSVGPathSegLinetoRel.instance;
+ if (s == "SVGPathSegLinetoVerticalAbs") return BlinkSVGPathSegLinetoVerticalAbs.instance;
+ if (s == "SVGPathSegLinetoVerticalRel") return BlinkSVGPathSegLinetoVerticalRel.instance;
+ if (s == "SVGPathSegList") return BlinkSVGPathSegList.instance;
+ if (s == "SVGPathSegMovetoAbs") return BlinkSVGPathSegMovetoAbs.instance;
+ if (s == "SVGPathSegMovetoRel") return BlinkSVGPathSegMovetoRel.instance;
+ if (s == "SVGPatternElement") return BlinkSVGPatternElement.instance;
+ if (s == "SVGPoint") return BlinkSVGPoint.instance;
+ if (s == "SVGPointList") return BlinkSVGPointList.instance;
+ if (s == "SVGPolygonElement") return BlinkSVGPolygonElement.instance;
+ if (s == "SVGPolylineElement") return BlinkSVGPolylineElement.instance;
+ if (s == "SVGPreserveAspectRatio") return BlinkSVGPreserveAspectRatio.instance;
+ if (s == "SVGRadialGradientElement") return BlinkSVGRadialGradientElement.instance;
+ if (s == "SVGRect") return BlinkSVGRect.instance;
+ if (s == "SVGRectElement") return BlinkSVGRectElement.instance;
+ if (s == "SVGRenderingIntent") return BlinkSVGRenderingIntent.instance;
+ if (s == "SVGSVGElement") return BlinkSVGSVGElement.instance;
+ if (s == "SVGScriptElement") return BlinkSVGScriptElement.instance;
+ if (s == "SVGSetElement") return BlinkSVGSetElement.instance;
+ if (s == "SVGStopElement") return BlinkSVGStopElement.instance;
+ if (s == "SVGStringList") return BlinkSVGStringList.instance;
+ if (s == "SVGStyleElement") return BlinkSVGStyleElement.instance;
+ if (s == "SVGSwitchElement") return BlinkSVGSwitchElement.instance;
+ if (s == "SVGSymbolElement") return BlinkSVGSymbolElement.instance;
+ if (s == "SVGTSpanElement") return BlinkSVGTSpanElement.instance;
+ if (s == "SVGTextContentElement") return BlinkSVGTextContentElement.instance;
+ if (s == "SVGTextElement") return BlinkSVGTextElement.instance;
+ if (s == "SVGTextPathElement") return BlinkSVGTextPathElement.instance;
+ if (s == "SVGTextPositioningElement") return BlinkSVGTextPositioningElement.instance;
+ if (s == "SVGTitleElement") return BlinkSVGTitleElement.instance;
+ if (s == "SVGTransform") return BlinkSVGTransform.instance;
+ if (s == "SVGTransformList") return BlinkSVGTransformList.instance;
+ if (s == "SVGUnitTypes") return BlinkSVGUnitTypes.instance;
+ if (s == "SVGUseElement") return BlinkSVGUseElement.instance;
+ if (s == "SVGVKernElement") return BlinkSVGVKernElement.instance;
+ if (s == "SVGViewElement") return BlinkSVGViewElement.instance;
+ if (s == "SVGViewSpec") return BlinkSVGViewSpec.instance;
+ if (s == "SVGZoomEvent") return BlinkSVGZoomEvent.instance;
+ if (s == "Screen") return BlinkScreen.instance;
+ if (s == "ScreenOrientation") return BlinkScreenOrientation.instance;
+ if (s == "ScriptProcessorNode") return BlinkScriptProcessorNode.instance;
+ if (s == "SecurityPolicyViolationEvent") return BlinkSecurityPolicyViolationEvent.instance;
+ if (s == "Selection") return BlinkSelection.instance;
+ if (s == "ServiceWorker") return BlinkServiceWorker.instance;
+ if (s == "ServiceWorkerClient") return BlinkServiceWorkerClient.instance;
+ if (s == "ServiceWorkerClients") return BlinkServiceWorkerClients.instance;
+ if (s == "ServiceWorkerContainer") return BlinkServiceWorkerContainer.instance;
+ if (s == "ServiceWorkerGlobalScope") return BlinkServiceWorkerGlobalScope.instance;
+ if (s == "ServiceWorkerRegistration") return BlinkServiceWorkerRegistration.instance;
+ if (s == "ShadowRoot") return BlinkShadowRoot.instance;
+ if (s == "SharedWorker") return BlinkSharedWorker.instance;
+ if (s == "SharedWorkerGlobalScope") return BlinkSharedWorkerGlobalScope.instance;
+ if (s == "SourceBuffer") return BlinkSourceBuffer.instance;
+ if (s == "SourceBufferList") return BlinkSourceBufferList.instance;
+ if (s == "SourceInfo") return BlinkSourceInfo.instance;
+ if (s == "SpeechGrammar") return BlinkSpeechGrammar.instance;
+ if (s == "SpeechGrammarList") return BlinkSpeechGrammarList.instance;
+ if (s == "SpeechRecognition") return BlinkSpeechRecognition.instance;
+ if (s == "SpeechRecognitionAlternative") return BlinkSpeechRecognitionAlternative.instance;
+ if (s == "SpeechRecognitionError") return BlinkSpeechRecognitionError.instance;
+ if (s == "SpeechRecognitionEvent") return BlinkSpeechRecognitionEvent.instance;
+ if (s == "SpeechRecognitionResult") return BlinkSpeechRecognitionResult.instance;
+ if (s == "SpeechRecognitionResultList") return BlinkSpeechRecognitionResultList.instance;
+ if (s == "SpeechSynthesis") return BlinkSpeechSynthesis.instance;
+ if (s == "SpeechSynthesisEvent") return BlinkSpeechSynthesisEvent.instance;
+ if (s == "SpeechSynthesisUtterance") return BlinkSpeechSynthesisUtterance.instance;
+ if (s == "SpeechSynthesisVoice") return BlinkSpeechSynthesisVoice.instance;
+ if (s == "Storage") return BlinkStorage.instance;
+ if (s == "StorageEvent") return BlinkStorageEvent.instance;
+ if (s == "StorageInfo") return BlinkStorageInfo.instance;
+ if (s == "StorageQuota") return BlinkStorageQuota.instance;
+ if (s == "Stream") return BlinkStream.instance;
+ if (s == "StyleMedia") return BlinkStyleMedia.instance;
+ if (s == "StyleSheet") return BlinkStyleSheet.instance;
+ if (s == "StyleSheetList") return BlinkStyleSheetList.instance;
+ if (s == "SubtleCrypto") return BlinkSubtleCrypto.instance;
+ if (s == "Text") return BlinkText.instance;
+ if (s == "TextDecoder") return BlinkTextDecoder.instance;
+ if (s == "TextEncoder") return BlinkTextEncoder.instance;
+ if (s == "TextEvent") return BlinkTextEvent.instance;
+ if (s == "TextMetrics") return BlinkTextMetrics.instance;
+ if (s == "TextTrack") return BlinkTextTrack.instance;
+ if (s == "TextTrackCue") return BlinkTextTrackCue.instance;
+ if (s == "TextTrackCueList") return BlinkTextTrackCueList.instance;
+ if (s == "TextTrackList") return BlinkTextTrackList.instance;
+ if (s == "TimeRanges") return BlinkTimeRanges.instance;
+ if (s == "Timing") return BlinkTiming.instance;
+ if (s == "Touch") return BlinkTouch.instance;
+ if (s == "TouchEvent") return BlinkTouchEvent.instance;
+ if (s == "TouchList") return BlinkTouchList.instance;
+ if (s == "TrackEvent") return BlinkTrackEvent.instance;
+ if (s == "TransitionEvent") return BlinkTransitionEvent.instance;
+ if (s == "TreeWalker") return BlinkTreeWalker.instance;
+ if (s == "UIEvent") return BlinkUIEvent.instance;
+ if (s == "URL") return BlinkURL.instance;
+ if (s == "VTTCue") return BlinkVTTCue.instance;
+ if (s == "VTTRegion") return BlinkVTTRegion.instance;
+ if (s == "VTTRegionList") return BlinkVTTRegionList.instance;
+ if (s == "ValidityState") return BlinkValidityState.instance;
+ if (s == "VideoPlaybackQuality") return BlinkVideoPlaybackQuality.instance;
+ if (s == "VideoTrack") return BlinkVideoTrack.instance;
+ if (s == "VideoTrackList") return BlinkVideoTrackList.instance;
+ if (s == "WaveShaperNode") return BlinkWaveShaperNode.instance;
+ if (s == "WebGLActiveInfo") return BlinkWebGLActiveInfo.instance;
+ if (s == "WebGLBuffer") return BlinkWebGLBuffer.instance;
+ if (s == "WebGLCompressedTextureATC") return BlinkWebGLCompressedTextureATC.instance;
+ if (s == "WebGLCompressedTextureETC1") return BlinkWebGLCompressedTextureETC1.instance;
+ if (s == "WebGLCompressedTexturePVRTC") return BlinkWebGLCompressedTexturePVRTC.instance;
+ if (s == "WebGLCompressedTextureS3TC") return BlinkWebGLCompressedTextureS3TC.instance;
+ if (s == "WebGLContextAttributes") return BlinkWebGLContextAttributes.instance;
+ if (s == "WebGLContextEvent") return BlinkWebGLContextEvent.instance;
+ if (s == "WebGLDebugRendererInfo") return BlinkWebGLDebugRendererInfo.instance;
+ if (s == "WebGLDebugShaders") return BlinkWebGLDebugShaders.instance;
+ if (s == "WebGLDepthTexture") return BlinkWebGLDepthTexture.instance;
+ if (s == "WebGLDrawBuffers") return BlinkWebGLDrawBuffers.instance;
+ if (s == "WebGLFramebuffer") return BlinkWebGLFramebuffer.instance;
+ if (s == "WebGLLoseContext") return BlinkWebGLLoseContext.instance;
+ if (s == "WebGLProgram") return BlinkWebGLProgram.instance;
+ if (s == "WebGLRenderbuffer") return BlinkWebGLRenderbuffer.instance;
+ if (s == "WebGLRenderingContext") return BlinkWebGLRenderingContext.instance;
+ if (s == "WebGLShader") return BlinkWebGLShader.instance;
+ if (s == "WebGLShaderPrecisionFormat") return BlinkWebGLShaderPrecisionFormat.instance;
+ if (s == "WebGLTexture") return BlinkWebGLTexture.instance;
+ if (s == "WebGLUniformLocation") return BlinkWebGLUniformLocation.instance;
+ if (s == "WebGLVertexArrayObjectOES") return BlinkWebGLVertexArrayObjectOES.instance;
+ if (s == "WebKitAnimationEvent") return BlinkWebKitAnimationEvent.instance;
+ if (s == "WebKitCSSFilterRule") return BlinkWebKitCSSFilterRule.instance;
+ if (s == "WebKitCSSFilterValue") return BlinkWebKitCSSFilterValue.instance;
+ if (s == "WebKitCSSMatrix") return BlinkWebKitCSSMatrix.instance;
+ if (s == "WebKitCSSTransformValue") return BlinkWebKitCSSTransformValue.instance;
+ if (s == "WebKitGamepad") return BlinkWebKitGamepad.instance;
+ if (s == "WebKitGamepadList") return BlinkWebKitGamepadList.instance;
+ if (s == "WebSocket") return BlinkWebSocket.instance;
+ if (s == "WheelEvent") return BlinkWheelEvent.instance;
+ if (s == "Window") return BlinkWindow.instance;
+ if (s == "Worker") return BlinkWorker.instance;
+ if (s == "WorkerConsole") return BlinkWorkerConsole.instance;
+ if (s == "WorkerGlobalScope") return BlinkWorkerGlobalScope.instance;
+ if (s == "WorkerLocation") return BlinkWorkerLocation.instance;
+ if (s == "WorkerNavigator") return BlinkWorkerNavigator.instance;
+ if (s == "WorkerPerformance") return BlinkWorkerPerformance.instance;
+ if (s == "XMLDocument") return BlinkXMLDocument.instance;
+ if (s == "XMLHttpRequest") return BlinkXMLHttpRequest.instance;
+ if (s == "XMLHttpRequestEventTarget") return BlinkXMLHttpRequestEventTarget.instance;
+ if (s == "XMLHttpRequestProgressEvent") return BlinkXMLHttpRequestProgressEvent.instance;
+ if (s == "XMLHttpRequestUpload") return BlinkXMLHttpRequestUpload.instance;
+ if (s == "XMLSerializer") return BlinkXMLSerializer.instance;
+ if (s == "XPathEvaluator") return BlinkXPathEvaluator.instance;
+ if (s == "XPathExpression") return BlinkXPathExpression.instance;
+ if (s == "XPathNSResolver") return BlinkXPathNSResolver.instance;
+ if (s == "XPathResult") return BlinkXPathResult.instance;
+ if (s == "XSLTProcessor") return BlinkXSLTProcessor.instance;
+ // Failed to find it, check for custom renames
+ dynamic obj = resolverMap[s];
+ if (obj != null) return obj;
+ throw("No such interface exposed in blink: ${s}");
}
class BlinkANGLEInstancedArrays {
@@ -232,9 +838,6 @@
static finish_Callback_2(mthis, __arg_0, __arg_1) native "AnimationPlayer_finish_Callback";
finish_Callback_2_(mthis, __arg_0, __arg_1) => finish_Callback_2(mthis, __arg_0, __arg_1);
- static finished_Getter(mthis) native "AnimationPlayer_finished_Getter";
- finished_Getter_(mthis) => finished_Getter(mthis);
-
static onfinish_Getter(mthis) native "AnimationPlayer_onfinish_Getter";
onfinish_Getter_(mthis) => onfinish_Getter(mthis);
@@ -250,8 +853,8 @@
static pause_Callback_2(mthis, __arg_0, __arg_1) native "AnimationPlayer_pause_Callback";
pause_Callback_2_(mthis, __arg_0, __arg_1) => pause_Callback_2(mthis, __arg_0, __arg_1);
- static paused_Getter(mthis) native "AnimationPlayer_paused_Getter";
- paused_Getter_(mthis) => paused_Getter(mthis);
+ static playState_Getter(mthis) native "AnimationPlayer_playState_Getter";
+ playState_Getter_(mthis) => playState_Getter(mthis);
static play_Callback_0(mthis) native "AnimationPlayer_play_Callback";
play_Callback_0_(mthis) => play_Callback_0(mthis);
@@ -1310,6 +1913,50 @@
}
+class BlinkBody {
+ static final instance = new BlinkBody();
+
+ static arrayBuffer_Callback_0(mthis) native "Body_arrayBuffer_Callback";
+ arrayBuffer_Callback_0_(mthis) => arrayBuffer_Callback_0(mthis);
+
+ static arrayBuffer_Callback_1(mthis, __arg_0) native "Body_arrayBuffer_Callback";
+ arrayBuffer_Callback_1_(mthis, __arg_0) => arrayBuffer_Callback_1(mthis, __arg_0);
+
+ static arrayBuffer_Callback_2(mthis, __arg_0, __arg_1) native "Body_arrayBuffer_Callback";
+ arrayBuffer_Callback_2_(mthis, __arg_0, __arg_1) => arrayBuffer_Callback_2(mthis, __arg_0, __arg_1);
+
+ static blob_Callback_0(mthis) native "Body_blob_Callback";
+ blob_Callback_0_(mthis) => blob_Callback_0(mthis);
+
+ static blob_Callback_1(mthis, __arg_0) native "Body_blob_Callback";
+ blob_Callback_1_(mthis, __arg_0) => blob_Callback_1(mthis, __arg_0);
+
+ static blob_Callback_2(mthis, __arg_0, __arg_1) native "Body_blob_Callback";
+ blob_Callback_2_(mthis, __arg_0, __arg_1) => blob_Callback_2(mthis, __arg_0, __arg_1);
+
+ static bodyUsed_Getter(mthis) native "Body_bodyUsed_Getter";
+ bodyUsed_Getter_(mthis) => bodyUsed_Getter(mthis);
+
+ static json_Callback_0(mthis) native "Body_json_Callback";
+ json_Callback_0_(mthis) => json_Callback_0(mthis);
+
+ static json_Callback_1(mthis, __arg_0) native "Body_json_Callback";
+ json_Callback_1_(mthis, __arg_0) => json_Callback_1(mthis, __arg_0);
+
+ static json_Callback_2(mthis, __arg_0, __arg_1) native "Body_json_Callback";
+ json_Callback_2_(mthis, __arg_0, __arg_1) => json_Callback_2(mthis, __arg_0, __arg_1);
+
+ static text_Callback_0(mthis) native "Body_text_Callback";
+ text_Callback_0_(mthis) => text_Callback_0(mthis);
+
+ static text_Callback_1(mthis, __arg_0) native "Body_text_Callback";
+ text_Callback_1_(mthis, __arg_0) => text_Callback_1(mthis, __arg_0);
+
+ static text_Callback_2(mthis, __arg_0, __arg_1) native "Body_text_Callback";
+ text_Callback_2_(mthis, __arg_0, __arg_1) => text_Callback_2(mthis, __arg_0, __arg_1);
+
+}
+
class BlinkCDATASection extends BlinkText {
static final instance = new BlinkCDATASection();
@@ -2087,6 +2734,18 @@
class BlinkCanvasPattern {
static final instance = new BlinkCanvasPattern();
+ static setTransform_Callback_0(mthis) native "CanvasPattern_setTransform_Callback";
+ setTransform_Callback_0_(mthis) => setTransform_Callback_0(mthis);
+
+ static setTransform_Callback_1(mthis, __arg_0) native "CanvasPattern_setTransform_Callback";
+ setTransform_Callback_1_(mthis, __arg_0) => setTransform_Callback_1(mthis, __arg_0);
+
+ static setTransform_Callback_2(mthis, __arg_0, __arg_1) native "CanvasPattern_setTransform_Callback";
+ setTransform_Callback_2_(mthis, __arg_0, __arg_1) => setTransform_Callback_2(mthis, __arg_0, __arg_1);
+
+ static setTransform_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasPattern_setTransform_Callback";
+ setTransform_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setTransform_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
}
class BlinkCanvasRenderingContext2D {
@@ -2278,6 +2937,12 @@
static currentTransform_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_currentTransform_Setter";
currentTransform_Setter_(mthis, __arg_0) => currentTransform_Setter(mthis, __arg_0);
+ static direction_Getter(mthis) native "CanvasRenderingContext2D_direction_Getter";
+ direction_Getter_(mthis) => direction_Getter(mthis);
+
+ static direction_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_direction_Setter";
+ direction_Setter_(mthis, __arg_0) => direction_Setter(mthis, __arg_0);
+
static drawFocusIfNeeded_Callback_0(mthis) native "CanvasRenderingContext2D_drawFocusIfNeeded_Callback";
drawFocusIfNeeded_Callback_0_(mthis) => drawFocusIfNeeded_Callback_0(mthis);
@@ -2958,28 +3623,28 @@
}
-class BlinkCircularRegion extends BlinkGeofencingRegion {
- static final instance = new BlinkCircularRegion();
+class BlinkCircularGeofencingRegion extends BlinkGeofencingRegion {
+ static final instance = new BlinkCircularGeofencingRegion();
- static constructorCallback_0() native "CircularRegion_constructorCallback";
+ static constructorCallback_0() native "CircularGeofencingRegion_constructorCallback";
constructorCallback_0_() => constructorCallback_0();
- static constructorCallback_1(__arg_0) native "CircularRegion_constructorCallback";
+ static constructorCallback_1(__arg_0) native "CircularGeofencingRegion_constructorCallback";
constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);
- static constructorCallback_2(__arg_0, __arg_1) native "CircularRegion_constructorCallback";
+ static constructorCallback_2(__arg_0, __arg_1) native "CircularGeofencingRegion_constructorCallback";
constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);
- static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "CircularRegion_constructorCallback";
+ static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "CircularGeofencingRegion_constructorCallback";
constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);
- static latitude_Getter(mthis) native "CircularRegion_latitude_Getter";
+ static latitude_Getter(mthis) native "CircularGeofencingRegion_latitude_Getter";
latitude_Getter_(mthis) => latitude_Getter(mthis);
- static longitude_Getter(mthis) native "CircularRegion_longitude_Getter";
+ static longitude_Getter(mthis) native "CircularGeofencingRegion_longitude_Getter";
longitude_Getter_(mthis) => longitude_Getter(mthis);
- static radius_Getter(mthis) native "CircularRegion_radius_Getter";
+ static radius_Getter(mthis) native "CircularGeofencingRegion_radius_Getter";
radius_Getter_(mthis) => radius_Getter(mthis);
}
@@ -3831,6 +4496,114 @@
static m44_Setter(mthis, __arg_0) native "DOMMatrix_m44_Setter";
m44_Setter_(mthis, __arg_0) => m44_Setter(mthis, __arg_0);
+ static multiplySelf_Callback_0(mthis) native "DOMMatrix_multiplySelf_Callback";
+ multiplySelf_Callback_0_(mthis) => multiplySelf_Callback_0(mthis);
+
+ static multiplySelf_Callback_1(mthis, __arg_0) native "DOMMatrix_multiplySelf_Callback";
+ multiplySelf_Callback_1_(mthis, __arg_0) => multiplySelf_Callback_1(mthis, __arg_0);
+
+ static multiplySelf_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrix_multiplySelf_Callback";
+ multiplySelf_Callback_2_(mthis, __arg_0, __arg_1) => multiplySelf_Callback_2(mthis, __arg_0, __arg_1);
+
+ static multiplySelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrix_multiplySelf_Callback";
+ multiplySelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => multiplySelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static preMultiplySelf_Callback_0(mthis) native "DOMMatrix_preMultiplySelf_Callback";
+ preMultiplySelf_Callback_0_(mthis) => preMultiplySelf_Callback_0(mthis);
+
+ static preMultiplySelf_Callback_1(mthis, __arg_0) native "DOMMatrix_preMultiplySelf_Callback";
+ preMultiplySelf_Callback_1_(mthis, __arg_0) => preMultiplySelf_Callback_1(mthis, __arg_0);
+
+ static preMultiplySelf_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrix_preMultiplySelf_Callback";
+ preMultiplySelf_Callback_2_(mthis, __arg_0, __arg_1) => preMultiplySelf_Callback_2(mthis, __arg_0, __arg_1);
+
+ static preMultiplySelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrix_preMultiplySelf_Callback";
+ preMultiplySelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => preMultiplySelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static scale3dSelf_Callback_0(mthis) native "DOMMatrix_scale3dSelf_Callback";
+ scale3dSelf_Callback_0_(mthis) => scale3dSelf_Callback_0(mthis);
+
+ static scale3dSelf_Callback_1(mthis, __arg_0) native "DOMMatrix_scale3dSelf_Callback";
+ scale3dSelf_Callback_1_(mthis, __arg_0) => scale3dSelf_Callback_1(mthis, __arg_0);
+
+ static scale3dSelf_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrix_scale3dSelf_Callback";
+ scale3dSelf_Callback_2_(mthis, __arg_0, __arg_1) => scale3dSelf_Callback_2(mthis, __arg_0, __arg_1);
+
+ static scale3dSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrix_scale3dSelf_Callback";
+ scale3dSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scale3dSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static scale3dSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrix_scale3dSelf_Callback";
+ scale3dSelf_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scale3dSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
+
+ static scale3dSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrix_scale3dSelf_Callback";
+ scale3dSelf_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scale3dSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
+
+ static scale3dSelf_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DOMMatrix_scale3dSelf_Callback";
+ scale3dSelf_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => scale3dSelf_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);
+
+ static scaleNonUniformSelf_Callback_0(mthis) native "DOMMatrix_scaleNonUniformSelf_Callback";
+ scaleNonUniformSelf_Callback_0_(mthis) => scaleNonUniformSelf_Callback_0(mthis);
+
+ static scaleNonUniformSelf_Callback_1(mthis, __arg_0) native "DOMMatrix_scaleNonUniformSelf_Callback";
+ scaleNonUniformSelf_Callback_1_(mthis, __arg_0) => scaleNonUniformSelf_Callback_1(mthis, __arg_0);
+
+ static scaleNonUniformSelf_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrix_scaleNonUniformSelf_Callback";
+ scaleNonUniformSelf_Callback_2_(mthis, __arg_0, __arg_1) => scaleNonUniformSelf_Callback_2(mthis, __arg_0, __arg_1);
+
+ static scaleNonUniformSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrix_scaleNonUniformSelf_Callback";
+ scaleNonUniformSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scaleNonUniformSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static scaleNonUniformSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrix_scaleNonUniformSelf_Callback";
+ scaleNonUniformSelf_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scaleNonUniformSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
+
+ static scaleNonUniformSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrix_scaleNonUniformSelf_Callback";
+ scaleNonUniformSelf_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scaleNonUniformSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
+
+ static scaleNonUniformSelf_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DOMMatrix_scaleNonUniformSelf_Callback";
+ scaleNonUniformSelf_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => scaleNonUniformSelf_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);
+
+ static scaleNonUniformSelf_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "DOMMatrix_scaleNonUniformSelf_Callback";
+ scaleNonUniformSelf_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => scaleNonUniformSelf_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);
+
+ static scaleNonUniformSelf_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "DOMMatrix_scaleNonUniformSelf_Callback";
+ scaleNonUniformSelf_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => scaleNonUniformSelf_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);
+
+ static scaleSelf_Callback_0(mthis) native "DOMMatrix_scaleSelf_Callback";
+ scaleSelf_Callback_0_(mthis) => scaleSelf_Callback_0(mthis);
+
+ static scaleSelf_Callback_1(mthis, __arg_0) native "DOMMatrix_scaleSelf_Callback";
+ scaleSelf_Callback_1_(mthis, __arg_0) => scaleSelf_Callback_1(mthis, __arg_0);
+
+ static scaleSelf_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrix_scaleSelf_Callback";
+ scaleSelf_Callback_2_(mthis, __arg_0, __arg_1) => scaleSelf_Callback_2(mthis, __arg_0, __arg_1);
+
+ static scaleSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrix_scaleSelf_Callback";
+ scaleSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scaleSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static scaleSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrix_scaleSelf_Callback";
+ scaleSelf_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scaleSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
+
+ static scaleSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrix_scaleSelf_Callback";
+ scaleSelf_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scaleSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
+
+ static translateSelf_Callback_0(mthis) native "DOMMatrix_translateSelf_Callback";
+ translateSelf_Callback_0_(mthis) => translateSelf_Callback_0(mthis);
+
+ static translateSelf_Callback_1(mthis, __arg_0) native "DOMMatrix_translateSelf_Callback";
+ translateSelf_Callback_1_(mthis, __arg_0) => translateSelf_Callback_1(mthis, __arg_0);
+
+ static translateSelf_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrix_translateSelf_Callback";
+ translateSelf_Callback_2_(mthis, __arg_0, __arg_1) => translateSelf_Callback_2(mthis, __arg_0, __arg_1);
+
+ static translateSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrix_translateSelf_Callback";
+ translateSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => translateSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static translateSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrix_translateSelf_Callback";
+ translateSelf_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => translateSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
+
+ static translateSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrix_translateSelf_Callback";
+ translateSelf_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => translateSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
+
}
class BlinkDOMMatrixReadOnly {
@@ -3908,6 +4681,120 @@
static m44_Getter(mthis) native "DOMMatrixReadOnly_m44_Getter";
m44_Getter_(mthis) => m44_Getter(mthis);
+ static multiply_Callback_0(mthis) native "DOMMatrixReadOnly_multiply_Callback";
+ multiply_Callback_0_(mthis) => multiply_Callback_0(mthis);
+
+ static multiply_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_multiply_Callback";
+ multiply_Callback_1_(mthis, __arg_0) => multiply_Callback_1(mthis, __arg_0);
+
+ static multiply_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_multiply_Callback";
+ multiply_Callback_2_(mthis, __arg_0, __arg_1) => multiply_Callback_2(mthis, __arg_0, __arg_1);
+
+ static multiply_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrixReadOnly_multiply_Callback";
+ multiply_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => multiply_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static scale3d_Callback_0(mthis) native "DOMMatrixReadOnly_scale3d_Callback";
+ scale3d_Callback_0_(mthis) => scale3d_Callback_0(mthis);
+
+ static scale3d_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_scale3d_Callback";
+ scale3d_Callback_1_(mthis, __arg_0) => scale3d_Callback_1(mthis, __arg_0);
+
+ static scale3d_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_scale3d_Callback";
+ scale3d_Callback_2_(mthis, __arg_0, __arg_1) => scale3d_Callback_2(mthis, __arg_0, __arg_1);
+
+ static scale3d_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrixReadOnly_scale3d_Callback";
+ scale3d_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scale3d_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static scale3d_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrixReadOnly_scale3d_Callback";
+ scale3d_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scale3d_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
+
+ static scale3d_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrixReadOnly_scale3d_Callback";
+ scale3d_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scale3d_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
+
+ static scale3d_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DOMMatrixReadOnly_scale3d_Callback";
+ scale3d_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => scale3d_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);
+
+ static scaleNonUniform_Callback_0(mthis) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
+ scaleNonUniform_Callback_0_(mthis) => scaleNonUniform_Callback_0(mthis);
+
+ static scaleNonUniform_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
+ scaleNonUniform_Callback_1_(mthis, __arg_0) => scaleNonUniform_Callback_1(mthis, __arg_0);
+
+ static scaleNonUniform_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
+ scaleNonUniform_Callback_2_(mthis, __arg_0, __arg_1) => scaleNonUniform_Callback_2(mthis, __arg_0, __arg_1);
+
+ static scaleNonUniform_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
+ scaleNonUniform_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scaleNonUniform_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static scaleNonUniform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
+ scaleNonUniform_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scaleNonUniform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
+
+ static scaleNonUniform_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
+ scaleNonUniform_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scaleNonUniform_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
+
+ static scaleNonUniform_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
+ scaleNonUniform_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => scaleNonUniform_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);
+
+ static scaleNonUniform_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
+ scaleNonUniform_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => scaleNonUniform_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);
+
+ static scaleNonUniform_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
+ scaleNonUniform_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => scaleNonUniform_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);
+
+ static scale_Callback_0(mthis) native "DOMMatrixReadOnly_scale_Callback";
+ scale_Callback_0_(mthis) => scale_Callback_0(mthis);
+
+ static scale_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_scale_Callback";
+ scale_Callback_1_(mthis, __arg_0) => scale_Callback_1(mthis, __arg_0);
+
+ static scale_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_scale_Callback";
+ scale_Callback_2_(mthis, __arg_0, __arg_1) => scale_Callback_2(mthis, __arg_0, __arg_1);
+
+ static scale_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrixReadOnly_scale_Callback";
+ scale_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scale_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static scale_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrixReadOnly_scale_Callback";
+ scale_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scale_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
+
+ static scale_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrixReadOnly_scale_Callback";
+ scale_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scale_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
+
+ static toFloat32Array_Callback_0(mthis) native "DOMMatrixReadOnly_toFloat32Array_Callback";
+ toFloat32Array_Callback_0_(mthis) => toFloat32Array_Callback_0(mthis);
+
+ static toFloat32Array_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_toFloat32Array_Callback";
+ toFloat32Array_Callback_1_(mthis, __arg_0) => toFloat32Array_Callback_1(mthis, __arg_0);
+
+ static toFloat32Array_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_toFloat32Array_Callback";
+ toFloat32Array_Callback_2_(mthis, __arg_0, __arg_1) => toFloat32Array_Callback_2(mthis, __arg_0, __arg_1);
+
+ static toFloat64Array_Callback_0(mthis) native "DOMMatrixReadOnly_toFloat64Array_Callback";
+ toFloat64Array_Callback_0_(mthis) => toFloat64Array_Callback_0(mthis);
+
+ static toFloat64Array_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_toFloat64Array_Callback";
+ toFloat64Array_Callback_1_(mthis, __arg_0) => toFloat64Array_Callback_1(mthis, __arg_0);
+
+ static toFloat64Array_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_toFloat64Array_Callback";
+ toFloat64Array_Callback_2_(mthis, __arg_0, __arg_1) => toFloat64Array_Callback_2(mthis, __arg_0, __arg_1);
+
+ static translate_Callback_0(mthis) native "DOMMatrixReadOnly_translate_Callback";
+ translate_Callback_0_(mthis) => translate_Callback_0(mthis);
+
+ static translate_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_translate_Callback";
+ translate_Callback_1_(mthis, __arg_0) => translate_Callback_1(mthis, __arg_0);
+
+ static translate_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_translate_Callback";
+ translate_Callback_2_(mthis, __arg_0, __arg_1) => translate_Callback_2(mthis, __arg_0, __arg_1);
+
+ static translate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrixReadOnly_translate_Callback";
+ translate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => translate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static translate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrixReadOnly_translate_Callback";
+ translate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => translate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
+
+ static translate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrixReadOnly_translate_Callback";
+ translate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => translate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
+
}
class BlinkDOMParser {
@@ -4488,59 +5375,6 @@
}
-class BlinkDatabaseSync {
- static final instance = new BlinkDatabaseSync();
-
- static changeVersion_Callback_0(mthis) native "DatabaseSync_changeVersion_Callback";
- changeVersion_Callback_0_(mthis) => changeVersion_Callback_0(mthis);
-
- static changeVersion_Callback_1(mthis, __arg_0) native "DatabaseSync_changeVersion_Callback";
- changeVersion_Callback_1_(mthis, __arg_0) => changeVersion_Callback_1(mthis, __arg_0);
-
- static changeVersion_Callback_2(mthis, __arg_0, __arg_1) native "DatabaseSync_changeVersion_Callback";
- changeVersion_Callback_2_(mthis, __arg_0, __arg_1) => changeVersion_Callback_2(mthis, __arg_0, __arg_1);
-
- static changeVersion_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DatabaseSync_changeVersion_Callback";
- changeVersion_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => changeVersion_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
-
- static changeVersion_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DatabaseSync_changeVersion_Callback";
- changeVersion_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => changeVersion_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
-
- static changeVersion_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DatabaseSync_changeVersion_Callback";
- changeVersion_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => changeVersion_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
-
- static lastErrorMessage_Getter(mthis) native "DatabaseSync_lastErrorMessage_Getter";
- lastErrorMessage_Getter_(mthis) => lastErrorMessage_Getter(mthis);
-
- static readTransaction_Callback_0(mthis) native "DatabaseSync_readTransaction_Callback";
- readTransaction_Callback_0_(mthis) => readTransaction_Callback_0(mthis);
-
- static readTransaction_Callback_1(mthis, __arg_0) native "DatabaseSync_readTransaction_Callback";
- readTransaction_Callback_1_(mthis, __arg_0) => readTransaction_Callback_1(mthis, __arg_0);
-
- static readTransaction_Callback_2(mthis, __arg_0, __arg_1) native "DatabaseSync_readTransaction_Callback";
- readTransaction_Callback_2_(mthis, __arg_0, __arg_1) => readTransaction_Callback_2(mthis, __arg_0, __arg_1);
-
- static readTransaction_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DatabaseSync_readTransaction_Callback";
- readTransaction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => readTransaction_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
-
- static transaction_Callback_0(mthis) native "DatabaseSync_transaction_Callback";
- transaction_Callback_0_(mthis) => transaction_Callback_0(mthis);
-
- static transaction_Callback_1(mthis, __arg_0) native "DatabaseSync_transaction_Callback";
- transaction_Callback_1_(mthis, __arg_0) => transaction_Callback_1(mthis, __arg_0);
-
- static transaction_Callback_2(mthis, __arg_0, __arg_1) native "DatabaseSync_transaction_Callback";
- transaction_Callback_2_(mthis, __arg_0, __arg_1) => transaction_Callback_2(mthis, __arg_0, __arg_1);
-
- static transaction_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DatabaseSync_transaction_Callback";
- transaction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => transaction_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
-
- static version_Getter(mthis) native "DatabaseSync_version_Getter";
- version_Getter_(mthis) => version_Getter(mthis);
-
-}
-
class BlinkDedicatedWorkerGlobalScope extends BlinkWorkerGlobalScope {
static final instance = new BlinkDedicatedWorkerGlobalScope();
@@ -6025,6 +6859,18 @@
static title_Setter(mthis, __arg_0) native "Document_title_Setter";
title_Setter_(mthis, __arg_0) => title_Setter(mthis, __arg_0);
+ static transformDocumentToTreeView_Callback_0(mthis) native "Document_transformDocumentToTreeView_Callback";
+ transformDocumentToTreeView_Callback_0_(mthis) => transformDocumentToTreeView_Callback_0(mthis);
+
+ static transformDocumentToTreeView_Callback_1(mthis, __arg_0) native "Document_transformDocumentToTreeView_Callback";
+ transformDocumentToTreeView_Callback_1_(mthis, __arg_0) => transformDocumentToTreeView_Callback_1(mthis, __arg_0);
+
+ static transformDocumentToTreeView_Callback_2(mthis, __arg_0, __arg_1) native "Document_transformDocumentToTreeView_Callback";
+ transformDocumentToTreeView_Callback_2_(mthis, __arg_0, __arg_1) => transformDocumentToTreeView_Callback_2(mthis, __arg_0, __arg_1);
+
+ static transformDocumentToTreeView_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_transformDocumentToTreeView_Callback";
+ transformDocumentToTreeView_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => transformDocumentToTreeView_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
static visibilityState_Getter(mthis) native "Document_visibilityState_Getter";
visibilityState_Getter_(mthis) => visibilityState_Getter(mthis);
@@ -7186,6 +8032,23 @@
}
+class BlinkExtendableEvent extends BlinkEvent {
+ static final instance = new BlinkExtendableEvent();
+
+ static waitUntil_Callback_0(mthis) native "ExtendableEvent_waitUntil_Callback";
+ waitUntil_Callback_0_(mthis) => waitUntil_Callback_0(mthis);
+
+ static waitUntil_Callback_1(mthis, __arg_0) native "ExtendableEvent_waitUntil_Callback";
+ waitUntil_Callback_1_(mthis, __arg_0) => waitUntil_Callback_1(mthis, __arg_0);
+
+ static waitUntil_Callback_2(mthis, __arg_0, __arg_1) native "ExtendableEvent_waitUntil_Callback";
+ waitUntil_Callback_2_(mthis, __arg_0, __arg_1) => waitUntil_Callback_2(mthis, __arg_0, __arg_1);
+
+ static waitUntil_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ExtendableEvent_waitUntil_Callback";
+ waitUntil_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => waitUntil_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+}
+
class BlinkFederatedCredential extends BlinkCredential {
static final instance = new BlinkFederatedCredential();
@@ -7209,47 +8072,6 @@
}
-class BlinkFetchBodyStream {
- static final instance = new BlinkFetchBodyStream();
-
- static asArrayBuffer_Callback_0(mthis) native "FetchBodyStream_asArrayBuffer_Callback";
- asArrayBuffer_Callback_0_(mthis) => asArrayBuffer_Callback_0(mthis);
-
- static asArrayBuffer_Callback_1(mthis, __arg_0) native "FetchBodyStream_asArrayBuffer_Callback";
- asArrayBuffer_Callback_1_(mthis, __arg_0) => asArrayBuffer_Callback_1(mthis, __arg_0);
-
- static asArrayBuffer_Callback_2(mthis, __arg_0, __arg_1) native "FetchBodyStream_asArrayBuffer_Callback";
- asArrayBuffer_Callback_2_(mthis, __arg_0, __arg_1) => asArrayBuffer_Callback_2(mthis, __arg_0, __arg_1);
-
- static asBlob_Callback_0(mthis) native "FetchBodyStream_asBlob_Callback";
- asBlob_Callback_0_(mthis) => asBlob_Callback_0(mthis);
-
- static asBlob_Callback_1(mthis, __arg_0) native "FetchBodyStream_asBlob_Callback";
- asBlob_Callback_1_(mthis, __arg_0) => asBlob_Callback_1(mthis, __arg_0);
-
- static asBlob_Callback_2(mthis, __arg_0, __arg_1) native "FetchBodyStream_asBlob_Callback";
- asBlob_Callback_2_(mthis, __arg_0, __arg_1) => asBlob_Callback_2(mthis, __arg_0, __arg_1);
-
- static asJSON_Callback_0(mthis) native "FetchBodyStream_asJSON_Callback";
- asJSON_Callback_0_(mthis) => asJSON_Callback_0(mthis);
-
- static asJSON_Callback_1(mthis, __arg_0) native "FetchBodyStream_asJSON_Callback";
- asJSON_Callback_1_(mthis, __arg_0) => asJSON_Callback_1(mthis, __arg_0);
-
- static asJSON_Callback_2(mthis, __arg_0, __arg_1) native "FetchBodyStream_asJSON_Callback";
- asJSON_Callback_2_(mthis, __arg_0, __arg_1) => asJSON_Callback_2(mthis, __arg_0, __arg_1);
-
- static asText_Callback_0(mthis) native "FetchBodyStream_asText_Callback";
- asText_Callback_0_(mthis) => asText_Callback_0(mthis);
-
- static asText_Callback_1(mthis, __arg_0) native "FetchBodyStream_asText_Callback";
- asText_Callback_1_(mthis, __arg_0) => asText_Callback_1(mthis, __arg_0);
-
- static asText_Callback_2(mthis, __arg_0, __arg_1) native "FetchBodyStream_asText_Callback";
- asText_Callback_2_(mthis, __arg_0, __arg_1) => asText_Callback_2(mthis, __arg_0, __arg_1);
-
-}
-
class BlinkFetchEvent extends BlinkEvent {
static final instance = new BlinkFetchEvent();
@@ -8995,6 +9817,12 @@
static contentEditable_Setter(mthis, __arg_0) native "HTMLElement_contentEditable_Setter";
contentEditable_Setter_(mthis, __arg_0) => contentEditable_Setter(mthis, __arg_0);
+ static contextMenu_Getter(mthis) native "HTMLElement_contextMenu_Getter";
+ contextMenu_Getter_(mthis) => contextMenu_Getter(mthis);
+
+ static contextMenu_Setter(mthis, __arg_0) native "HTMLElement_contextMenu_Setter";
+ contextMenu_Setter_(mthis, __arg_0) => contextMenu_Setter(mthis, __arg_0);
+
static dir_Getter(mthis) native "HTMLElement_dir_Getter";
dir_Getter_(mthis) => dir_Getter(mthis);
@@ -13096,6 +13924,9 @@
class BlinkInjectedScriptHost {
static final instance = new BlinkInjectedScriptHost();
+ static callFunction_Callback_0(mthis) native "InjectedScriptHost_callFunction_Callback";
+ callFunction_Callback_0_(mthis) => callFunction_Callback_0(mthis);
+
static callFunction_Callback_1(mthis, __arg_0) native "InjectedScriptHost_callFunction_Callback";
callFunction_Callback_1_(mthis, __arg_0) => callFunction_Callback_1(mthis, __arg_0);
@@ -13120,6 +13951,18 @@
static clearConsoleMessages_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_clearConsoleMessages_Callback";
clearConsoleMessages_Callback_2_(mthis, __arg_0, __arg_1) => clearConsoleMessages_Callback_2(mthis, __arg_0, __arg_1);
+ static collectionEntries_Callback_0(mthis) native "InjectedScriptHost_collectionEntries_Callback";
+ collectionEntries_Callback_0_(mthis) => collectionEntries_Callback_0(mthis);
+
+ static collectionEntries_Callback_1(mthis, __arg_0) native "InjectedScriptHost_collectionEntries_Callback";
+ collectionEntries_Callback_1_(mthis, __arg_0) => collectionEntries_Callback_1(mthis, __arg_0);
+
+ static collectionEntries_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_collectionEntries_Callback";
+ collectionEntries_Callback_2_(mthis, __arg_0, __arg_1) => collectionEntries_Callback_2(mthis, __arg_0, __arg_1);
+
+ static collectionEntries_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_collectionEntries_Callback";
+ collectionEntries_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => collectionEntries_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
static debugFunction_Callback_0(mthis) native "InjectedScriptHost_debugFunction_Callback";
debugFunction_Callback_0_(mthis) => debugFunction_Callback_0(mthis);
@@ -13270,6 +14113,36 @@
static setFunctionVariableValue_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "InjectedScriptHost_setFunctionVariableValue_Callback";
setFunctionVariableValue_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => setFunctionVariableValue_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);
+ static setNonEnumProperty_Callback_1(mthis, __arg_0) native "InjectedScriptHost_setNonEnumProperty_Callback";
+ setNonEnumProperty_Callback_1_(mthis, __arg_0) => setNonEnumProperty_Callback_1(mthis, __arg_0);
+
+ static setNonEnumProperty_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_setNonEnumProperty_Callback";
+ setNonEnumProperty_Callback_2_(mthis, __arg_0, __arg_1) => setNonEnumProperty_Callback_2(mthis, __arg_0, __arg_1);
+
+ static setNonEnumProperty_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_setNonEnumProperty_Callback";
+ setNonEnumProperty_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setNonEnumProperty_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static setNonEnumProperty_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "InjectedScriptHost_setNonEnumProperty_Callback";
+ setNonEnumProperty_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setNonEnumProperty_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
+
+ static setNonEnumProperty_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "InjectedScriptHost_setNonEnumProperty_Callback";
+ setNonEnumProperty_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setNonEnumProperty_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
+
+ static subtype_Callback_0(mthis) native "InjectedScriptHost_subtype_Callback";
+ subtype_Callback_0_(mthis) => subtype_Callback_0(mthis);
+
+ static subtype_Callback_1(mthis, __arg_0) native "InjectedScriptHost_subtype_Callback";
+ subtype_Callback_1_(mthis, __arg_0) => subtype_Callback_1(mthis, __arg_0);
+
+ static subtype_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_subtype_Callback";
+ subtype_Callback_2_(mthis, __arg_0, __arg_1) => subtype_Callback_2(mthis, __arg_0, __arg_1);
+
+ static subtype_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_subtype_Callback";
+ subtype_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => subtype_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static suppressWarningsAndCallFunction_Callback_0(mthis) native "InjectedScriptHost_suppressWarningsAndCallFunction_Callback";
+ suppressWarningsAndCallFunction_Callback_0_(mthis) => suppressWarningsAndCallFunction_Callback_0(mthis);
+
static suppressWarningsAndCallFunction_Callback_1(mthis, __arg_0) native "InjectedScriptHost_suppressWarningsAndCallFunction_Callback";
suppressWarningsAndCallFunction_Callback_1_(mthis, __arg_0) => suppressWarningsAndCallFunction_Callback_1(mthis, __arg_0);
@@ -13285,18 +14158,6 @@
static suppressWarningsAndCallFunction_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "InjectedScriptHost_suppressWarningsAndCallFunction_Callback";
suppressWarningsAndCallFunction_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => suppressWarningsAndCallFunction_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
- static type_Callback_0(mthis) native "InjectedScriptHost_type_Callback";
- type_Callback_0_(mthis) => type_Callback_0(mthis);
-
- static type_Callback_1(mthis, __arg_0) native "InjectedScriptHost_type_Callback";
- type_Callback_1_(mthis, __arg_0) => type_Callback_1(mthis, __arg_0);
-
- static type_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_type_Callback";
- type_Callback_2_(mthis, __arg_0, __arg_1) => type_Callback_2(mthis, __arg_0, __arg_1);
-
- static type_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_type_Callback";
- type_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => type_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
-
static undebugFunction_Callback_0(mthis) native "InjectedScriptHost_undebugFunction_Callback";
undebugFunction_Callback_0_(mthis) => undebugFunction_Callback_0(mthis);
@@ -13602,7 +14463,7 @@
}
-class BlinkInstallEvent extends BlinkInstallPhaseEvent {
+class BlinkInstallEvent extends BlinkExtendableEvent {
static final instance = new BlinkInstallEvent();
static reloadAll_Callback_0(mthis) native "InstallEvent_reloadAll_Callback";
@@ -13625,20 +14486,20 @@
}
-class BlinkInstallPhaseEvent extends BlinkEvent {
- static final instance = new BlinkInstallPhaseEvent();
+class BlinkIterator {
+ static final instance = new BlinkIterator();
- static waitUntil_Callback_0(mthis) native "InstallPhaseEvent_waitUntil_Callback";
- waitUntil_Callback_0_(mthis) => waitUntil_Callback_0(mthis);
+ static next_Callback_0(mthis) native "Iterator_next_Callback";
+ next_Callback_0_(mthis) => next_Callback_0(mthis);
- static waitUntil_Callback_1(mthis, __arg_0) native "InstallPhaseEvent_waitUntil_Callback";
- waitUntil_Callback_1_(mthis, __arg_0) => waitUntil_Callback_1(mthis, __arg_0);
+ static next_Callback_1(mthis, __arg_0) native "Iterator_next_Callback";
+ next_Callback_1_(mthis, __arg_0) => next_Callback_1(mthis, __arg_0);
- static waitUntil_Callback_2(mthis, __arg_0, __arg_1) native "InstallPhaseEvent_waitUntil_Callback";
- waitUntil_Callback_2_(mthis, __arg_0, __arg_1) => waitUntil_Callback_2(mthis, __arg_0, __arg_1);
+ static next_Callback_2(mthis, __arg_0, __arg_1) native "Iterator_next_Callback";
+ next_Callback_2_(mthis, __arg_0, __arg_1) => next_Callback_2(mthis, __arg_0, __arg_1);
- static waitUntil_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InstallPhaseEvent_waitUntil_Callback";
- waitUntil_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => waitUntil_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+ static next_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Iterator_next_Callback";
+ next_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => next_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
}
@@ -13941,14 +14802,8 @@
class BlinkMIDIAccess extends BlinkEventTarget {
static final instance = new BlinkMIDIAccess();
- static inputs_Callback_0(mthis) native "MIDIAccess_inputs_Callback";
- inputs_Callback_0_(mthis) => inputs_Callback_0(mthis);
-
- static inputs_Callback_1(mthis, __arg_0) native "MIDIAccess_inputs_Callback";
- inputs_Callback_1_(mthis, __arg_0) => inputs_Callback_1(mthis, __arg_0);
-
- static inputs_Callback_2(mthis, __arg_0, __arg_1) native "MIDIAccess_inputs_Callback";
- inputs_Callback_2_(mthis, __arg_0, __arg_1) => inputs_Callback_2(mthis, __arg_0, __arg_1);
+ static inputs_Getter(mthis) native "MIDIAccess_inputs_Getter";
+ inputs_Getter_(mthis) => inputs_Getter(mthis);
static onconnect_Getter(mthis) native "MIDIAccess_onconnect_Getter";
onconnect_Getter_(mthis) => onconnect_Getter(mthis);
@@ -13962,14 +14817,8 @@
static ondisconnect_Setter(mthis, __arg_0) native "MIDIAccess_ondisconnect_Setter";
ondisconnect_Setter_(mthis, __arg_0) => ondisconnect_Setter(mthis, __arg_0);
- static outputs_Callback_0(mthis) native "MIDIAccess_outputs_Callback";
- outputs_Callback_0_(mthis) => outputs_Callback_0(mthis);
-
- static outputs_Callback_1(mthis, __arg_0) native "MIDIAccess_outputs_Callback";
- outputs_Callback_1_(mthis, __arg_0) => outputs_Callback_1(mthis, __arg_0);
-
- static outputs_Callback_2(mthis, __arg_0, __arg_1) native "MIDIAccess_outputs_Callback";
- outputs_Callback_2_(mthis, __arg_0, __arg_1) => outputs_Callback_2(mthis, __arg_0, __arg_1);
+ static outputs_Getter(mthis) native "MIDIAccess_outputs_Getter";
+ outputs_Getter_(mthis) => outputs_Getter(mthis);
static sysexEnabled_Getter(mthis) native "MIDIAccess_sysexEnabled_Getter";
sysexEnabled_Getter_(mthis) => sysexEnabled_Getter(mthis);
@@ -13998,6 +14847,65 @@
}
+class BlinkMIDIInputMap {
+ static final instance = new BlinkMIDIInputMap();
+
+ static entries_Callback_0(mthis) native "MIDIInputMap_entries_Callback";
+ entries_Callback_0_(mthis) => entries_Callback_0(mthis);
+
+ static entries_Callback_1(mthis, __arg_0) native "MIDIInputMap_entries_Callback";
+ entries_Callback_1_(mthis, __arg_0) => entries_Callback_1(mthis, __arg_0);
+
+ static entries_Callback_2(mthis, __arg_0, __arg_1) native "MIDIInputMap_entries_Callback";
+ entries_Callback_2_(mthis, __arg_0, __arg_1) => entries_Callback_2(mthis, __arg_0, __arg_1);
+
+ static get_Callback_0(mthis) native "MIDIInputMap_get_Callback";
+ get_Callback_0_(mthis) => get_Callback_0(mthis);
+
+ static get_Callback_1(mthis, __arg_0) native "MIDIInputMap_get_Callback";
+ get_Callback_1_(mthis, __arg_0) => get_Callback_1(mthis, __arg_0);
+
+ static get_Callback_2(mthis, __arg_0, __arg_1) native "MIDIInputMap_get_Callback";
+ get_Callback_2_(mthis, __arg_0, __arg_1) => get_Callback_2(mthis, __arg_0, __arg_1);
+
+ static get_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MIDIInputMap_get_Callback";
+ get_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => get_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static has_Callback_0(mthis) native "MIDIInputMap_has_Callback";
+ has_Callback_0_(mthis) => has_Callback_0(mthis);
+
+ static has_Callback_1(mthis, __arg_0) native "MIDIInputMap_has_Callback";
+ has_Callback_1_(mthis, __arg_0) => has_Callback_1(mthis, __arg_0);
+
+ static has_Callback_2(mthis, __arg_0, __arg_1) native "MIDIInputMap_has_Callback";
+ has_Callback_2_(mthis, __arg_0, __arg_1) => has_Callback_2(mthis, __arg_0, __arg_1);
+
+ static has_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MIDIInputMap_has_Callback";
+ has_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => has_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static keys_Callback_0(mthis) native "MIDIInputMap_keys_Callback";
+ keys_Callback_0_(mthis) => keys_Callback_0(mthis);
+
+ static keys_Callback_1(mthis, __arg_0) native "MIDIInputMap_keys_Callback";
+ keys_Callback_1_(mthis, __arg_0) => keys_Callback_1(mthis, __arg_0);
+
+ static keys_Callback_2(mthis, __arg_0, __arg_1) native "MIDIInputMap_keys_Callback";
+ keys_Callback_2_(mthis, __arg_0, __arg_1) => keys_Callback_2(mthis, __arg_0, __arg_1);
+
+ static size_Getter(mthis) native "MIDIInputMap_size_Getter";
+ size_Getter_(mthis) => size_Getter(mthis);
+
+ static values_Callback_0(mthis) native "MIDIInputMap_values_Callback";
+ values_Callback_0_(mthis) => values_Callback_0(mthis);
+
+ static values_Callback_1(mthis, __arg_0) native "MIDIInputMap_values_Callback";
+ values_Callback_1_(mthis, __arg_0) => values_Callback_1(mthis, __arg_0);
+
+ static values_Callback_2(mthis, __arg_0, __arg_1) native "MIDIInputMap_values_Callback";
+ values_Callback_2_(mthis, __arg_0, __arg_1) => values_Callback_2(mthis, __arg_0, __arg_1);
+
+}
+
class BlinkMIDIMessageEvent extends BlinkEvent {
static final instance = new BlinkMIDIMessageEvent();
@@ -14032,6 +14940,65 @@
}
+class BlinkMIDIOutputMap {
+ static final instance = new BlinkMIDIOutputMap();
+
+ static entries_Callback_0(mthis) native "MIDIOutputMap_entries_Callback";
+ entries_Callback_0_(mthis) => entries_Callback_0(mthis);
+
+ static entries_Callback_1(mthis, __arg_0) native "MIDIOutputMap_entries_Callback";
+ entries_Callback_1_(mthis, __arg_0) => entries_Callback_1(mthis, __arg_0);
+
+ static entries_Callback_2(mthis, __arg_0, __arg_1) native "MIDIOutputMap_entries_Callback";
+ entries_Callback_2_(mthis, __arg_0, __arg_1) => entries_Callback_2(mthis, __arg_0, __arg_1);
+
+ static get_Callback_0(mthis) native "MIDIOutputMap_get_Callback";
+ get_Callback_0_(mthis) => get_Callback_0(mthis);
+
+ static get_Callback_1(mthis, __arg_0) native "MIDIOutputMap_get_Callback";
+ get_Callback_1_(mthis, __arg_0) => get_Callback_1(mthis, __arg_0);
+
+ static get_Callback_2(mthis, __arg_0, __arg_1) native "MIDIOutputMap_get_Callback";
+ get_Callback_2_(mthis, __arg_0, __arg_1) => get_Callback_2(mthis, __arg_0, __arg_1);
+
+ static get_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MIDIOutputMap_get_Callback";
+ get_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => get_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static has_Callback_0(mthis) native "MIDIOutputMap_has_Callback";
+ has_Callback_0_(mthis) => has_Callback_0(mthis);
+
+ static has_Callback_1(mthis, __arg_0) native "MIDIOutputMap_has_Callback";
+ has_Callback_1_(mthis, __arg_0) => has_Callback_1(mthis, __arg_0);
+
+ static has_Callback_2(mthis, __arg_0, __arg_1) native "MIDIOutputMap_has_Callback";
+ has_Callback_2_(mthis, __arg_0, __arg_1) => has_Callback_2(mthis, __arg_0, __arg_1);
+
+ static has_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MIDIOutputMap_has_Callback";
+ has_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => has_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static keys_Callback_0(mthis) native "MIDIOutputMap_keys_Callback";
+ keys_Callback_0_(mthis) => keys_Callback_0(mthis);
+
+ static keys_Callback_1(mthis, __arg_0) native "MIDIOutputMap_keys_Callback";
+ keys_Callback_1_(mthis, __arg_0) => keys_Callback_1(mthis, __arg_0);
+
+ static keys_Callback_2(mthis, __arg_0, __arg_1) native "MIDIOutputMap_keys_Callback";
+ keys_Callback_2_(mthis, __arg_0, __arg_1) => keys_Callback_2(mthis, __arg_0, __arg_1);
+
+ static size_Getter(mthis) native "MIDIOutputMap_size_Getter";
+ size_Getter_(mthis) => size_Getter(mthis);
+
+ static values_Callback_0(mthis) native "MIDIOutputMap_values_Callback";
+ values_Callback_0_(mthis) => values_Callback_0(mthis);
+
+ static values_Callback_1(mthis, __arg_0) native "MIDIOutputMap_values_Callback";
+ values_Callback_1_(mthis, __arg_0) => values_Callback_1(mthis, __arg_0);
+
+ static values_Callback_2(mthis, __arg_0, __arg_1) native "MIDIOutputMap_values_Callback";
+ values_Callback_2_(mthis, __arg_0, __arg_1) => values_Callback_2(mthis, __arg_0, __arg_1);
+
+}
+
class BlinkMIDIPort extends BlinkEventTarget {
static final instance = new BlinkMIDIPort();
@@ -14257,6 +15224,21 @@
static error_Getter(mthis) native "MediaKeySession_error_Getter";
error_Getter_(mthis) => error_Getter(mthis);
+ static generateRequest_Callback_0(mthis) native "MediaKeySession_generateRequest_Callback";
+ generateRequest_Callback_0_(mthis) => generateRequest_Callback_0(mthis);
+
+ static generateRequest_Callback_1(mthis, __arg_0) native "MediaKeySession_generateRequest_Callback";
+ generateRequest_Callback_1_(mthis, __arg_0) => generateRequest_Callback_1(mthis, __arg_0);
+
+ static generateRequest_Callback_2(mthis, __arg_0, __arg_1) native "MediaKeySession_generateRequest_Callback";
+ generateRequest_Callback_2_(mthis, __arg_0, __arg_1) => generateRequest_Callback_2(mthis, __arg_0, __arg_1);
+
+ static generateRequest_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaKeySession_generateRequest_Callback";
+ generateRequest_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => generateRequest_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static generateRequest_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "MediaKeySession_generateRequest_Callback";
+ generateRequest_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => generateRequest_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
+
static keySystem_Getter(mthis) native "MediaKeySession_keySystem_Getter";
keySystem_Getter_(mthis) => keySystem_Getter(mthis);
@@ -14301,12 +15283,6 @@
static createSession_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaKeys_createSession_Callback";
createSession_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSession_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
- static createSession_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "MediaKeys_createSession_Callback";
- createSession_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createSession_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
-
- static createSession_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "MediaKeys_createSession_Callback";
- createSession_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createSession_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
-
static create_Callback_0() native "MediaKeys_create_Callback";
create_Callback_0_() => create_Callback_0();
@@ -14392,7 +15368,7 @@
}
-class BlinkMediaQueryList {
+class BlinkMediaQueryList extends BlinkEventTarget {
static final instance = new BlinkMediaQueryList();
static addListener_Callback_0(mthis) native "MediaQueryList_addListener_Callback";
@@ -14413,6 +15389,12 @@
static media_Getter(mthis) native "MediaQueryList_media_Getter";
media_Getter_(mthis) => media_Getter(mthis);
+ static onchange_Getter(mthis) native "MediaQueryList_onchange_Getter";
+ onchange_Getter_(mthis) => onchange_Getter(mthis);
+
+ static onchange_Setter(mthis, __arg_0) native "MediaQueryList_onchange_Setter";
+ onchange_Setter_(mthis, __arg_0) => onchange_Setter(mthis, __arg_0);
+
static removeListener_Callback_0(mthis) native "MediaQueryList_removeListener_Callback";
removeListener_Callback_0_(mthis) => removeListener_Callback_0(mthis);
@@ -14427,6 +15409,20 @@
}
+class BlinkMediaQueryListEvent extends BlinkEvent {
+ static final instance = new BlinkMediaQueryListEvent();
+
+ static constructorCallback_2(__arg_0, __arg_1) native "MediaQueryListEvent_constructorCallback";
+ constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);
+
+ static matches_Getter(mthis) native "MediaQueryListEvent_matches_Getter";
+ matches_Getter_(mthis) => matches_Getter(mthis);
+
+ static media_Getter(mthis) native "MediaQueryListEvent_media_Getter";
+ media_Getter_(mthis) => media_Getter(mthis);
+
+}
+
class BlinkMediaSource extends BlinkEventTarget {
static final instance = new BlinkMediaSource();
@@ -15398,6 +16394,9 @@
static plugins_Getter(mthis) native "Navigator_plugins_Getter";
plugins_Getter_(mthis) => plugins_Getter(mthis);
+ static presentation_Getter(mthis) native "Navigator_presentation_Getter";
+ presentation_Getter_(mthis) => presentation_Getter(mthis);
+
static productSub_Getter(mthis) native "Navigator_productSub_Getter";
productSub_Getter_(mthis) => productSub_Getter(mthis);
@@ -15754,11 +16753,6 @@
}
-class BlinkNotation extends BlinkNode {
- static final instance = new BlinkNotation();
-
-}
-
class BlinkNotification extends BlinkEventTarget {
static final instance = new BlinkNotification();
@@ -16095,6 +17089,21 @@
static formatShortMonth_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "PagePopupController_formatShortMonth_Callback";
formatShortMonth_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => formatShortMonth_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
+ static formatWeek_Callback_1(mthis, __arg_0) native "PagePopupController_formatWeek_Callback";
+ formatWeek_Callback_1_(mthis, __arg_0) => formatWeek_Callback_1(mthis, __arg_0);
+
+ static formatWeek_Callback_2(mthis, __arg_0, __arg_1) native "PagePopupController_formatWeek_Callback";
+ formatWeek_Callback_2_(mthis, __arg_0, __arg_1) => formatWeek_Callback_2(mthis, __arg_0, __arg_1);
+
+ static formatWeek_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PagePopupController_formatWeek_Callback";
+ formatWeek_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => formatWeek_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static formatWeek_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "PagePopupController_formatWeek_Callback";
+ formatWeek_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => formatWeek_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
+
+ static formatWeek_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "PagePopupController_formatWeek_Callback";
+ formatWeek_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => formatWeek_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
+
static histogramEnumeration_Callback_1(mthis, __arg_0) native "PagePopupController_histogramEnumeration_Callback";
histogramEnumeration_Callback_1_(mthis, __arg_0) => histogramEnumeration_Callback_1(mthis, __arg_0);
@@ -16810,6 +17819,26 @@
}
+class BlinkPluginPlaceholderElement extends BlinkHTMLDivElement {
+ static final instance = new BlinkPluginPlaceholderElement();
+
+ static createdCallback_Callback_0(mthis) native "PluginPlaceholderElement_createdCallback_Callback";
+ createdCallback_Callback_0_(mthis) => createdCallback_Callback_0(mthis);
+
+ static createdCallback_Callback_1(mthis, __arg_0) native "PluginPlaceholderElement_createdCallback_Callback";
+ createdCallback_Callback_1_(mthis, __arg_0) => createdCallback_Callback_1(mthis, __arg_0);
+
+ static createdCallback_Callback_2(mthis, __arg_0, __arg_1) native "PluginPlaceholderElement_createdCallback_Callback";
+ createdCallback_Callback_2_(mthis, __arg_0, __arg_1) => createdCallback_Callback_2(mthis, __arg_0, __arg_1);
+
+ static message_Getter(mthis) native "PluginPlaceholderElement_message_Getter";
+ message_Getter_(mthis) => message_Getter(mthis);
+
+ static message_Setter(mthis, __arg_0) native "PluginPlaceholderElement_message_Setter";
+ message_Setter_(mthis, __arg_0) => message_Setter(mthis, __arg_0);
+
+}
+
class BlinkPopStateEvent extends BlinkEvent {
static final instance = new BlinkPopStateEvent();
@@ -16832,6 +17861,17 @@
}
+class BlinkPresentation extends BlinkEventTarget {
+ static final instance = new BlinkPresentation();
+
+ static onavailablechange_Getter(mthis) native "Presentation_onavailablechange_Getter";
+ onavailablechange_Getter_(mthis) => onavailablechange_Getter(mthis);
+
+ static onavailablechange_Setter(mthis, __arg_0) native "Presentation_onavailablechange_Setter";
+ onavailablechange_Setter_(mthis, __arg_0) => onavailablechange_Setter(mthis, __arg_0);
+
+}
+
class BlinkProcessingInstruction extends BlinkCharacterData {
static final instance = new BlinkProcessingInstruction();
@@ -17834,6 +18874,42 @@
class BlinkReadableStream {
static final instance = new BlinkReadableStream();
+ static cancel_Callback_0(mthis) native "ReadableStream_cancel_Callback";
+ cancel_Callback_0_(mthis) => cancel_Callback_0(mthis);
+
+ static cancel_Callback_1(mthis, __arg_0) native "ReadableStream_cancel_Callback";
+ cancel_Callback_1_(mthis, __arg_0) => cancel_Callback_1(mthis, __arg_0);
+
+ static cancel_Callback_2(mthis, __arg_0, __arg_1) native "ReadableStream_cancel_Callback";
+ cancel_Callback_2_(mthis, __arg_0, __arg_1) => cancel_Callback_2(mthis, __arg_0, __arg_1);
+
+ static cancel_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ReadableStream_cancel_Callback";
+ cancel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => cancel_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
+
+ static closed_Getter(mthis) native "ReadableStream_closed_Getter";
+ closed_Getter_(mthis) => closed_Getter(mthis);
+
+ static read_Callback_0(mthis) native "ReadableStream_read_Callback";
+ read_Callback_0_(mthis) => read_Callback_0(mthis);
+
+ static read_Callback_1(mthis, __arg_0) native "ReadableStream_read_Callback";
+ read_Callback_1_(mthis, __arg_0) => read_Callback_1(mthis, __arg_0);
+
+ static read_Callback_2(mthis, __arg_0, __arg_1) native "ReadableStream_read_Callback";
+ read_Callback_2_(mthis, __arg_0, __arg_1) => read_Callback_2(mthis, __arg_0, __arg_1);
+
+ static state_Getter(mthis) native "ReadableStream_state_Getter";
+ state_Getter_(mthis) => state_Getter(mthis);
+
+ static wait_Callback_0(mthis) native "ReadableStream_wait_Callback";
+ wait_Callback_0_(mthis) => wait_Callback_0(mthis);
+
+ static wait_Callback_1(mthis, __arg_0) native "ReadableStream_wait_Callback";
+ wait_Callback_1_(mthis, __arg_0) => wait_Callback_1(mthis, __arg_0);
+
+ static wait_Callback_2(mthis, __arg_0, __arg_1) native "ReadableStream_wait_Callback";
+ wait_Callback_2_(mthis, __arg_0, __arg_1) => wait_Callback_2(mthis, __arg_0, __arg_1);
+
}
class BlinkRect {
@@ -17867,6 +18943,36 @@
class BlinkRequest {
static final instance = new BlinkRequest();
+ static arrayBuffer_Callback_0(mthis) native "Request_arrayBuffer_Callback";
+ arrayBuffer_Callback_0_(mthis) => arrayBuffer_Callback_0(mthis);
+
+ static arrayBuffer_Callback_1(mthis, __arg_0) native "Request_arrayBuffer_Callback";
+ arrayBuffer_Callback_1_(mthis, __arg_0) => arrayBuffer_Callback_1(mthis, __arg_0);
+
+ static arrayBuffer_Callback_2(mthis, __arg_0, __arg_1) native "Request_arrayBuffer_Callback";
+ arrayBuffer_Callback_2_(mthis, __arg_0, __arg_1) => arrayBuffer_Callback_2(mthis, __arg_0, __arg_1);
+
+ static blob_Callback_0(mthis) native "Request_blob_Callback";
+ blob_Callback_0_(mthis) => blob_Callback_0(mthis);
+
+ static blob_Callback_1(mthis, __arg_0) native "Request_blob_Callback";
+ blob_Callback_1_(mthis, __arg_0) => blob_Callback_1(mthis, __arg_0);
+
+ static blob_Callback_2(mthis, __arg_0, __arg_1) native "Request_blob_Callback";
+ blob_Callback_2_(mthis, __arg_0, __arg_1) => blob_Callback_2(mthis, __arg_0, __arg_1);
+
+ static bodyUsed_Getter(mthis) native "Request_bodyUsed_Getter";
+ bodyUsed_Getter_(mthis) => bodyUsed_Getter(mthis);
+
+ static clone_Callback_0(mthis) native "Request_clone_Callback";
+ clone_Callback_0_(mthis) => clone_Callback_0(mthis);
+
+ static clone_Callback_1(mthis, __arg_0) native "Request_clone_Callback";
+ clone_Callback_1_(mthis, __arg_0) => clone_Callback_1(mthis, __arg_0);
+
+ static clone_Callback_2(mthis, __arg_0, __arg_1) native "Request_clone_Callback";
+ clone_Callback_2_(mthis, __arg_0, __arg_1) => clone_Callback_2(mthis, __arg_0, __arg_1);
+
static constructorCallback_0() native "Request_constructorCallback";
constructorCallback_0_() => constructorCallback_0();
@@ -17888,6 +18994,15 @@
static headers_Getter(mthis) native "Request_headers_Getter";
headers_Getter_(mthis) => headers_Getter(mthis);
+ static json_Callback_0(mthis) native "Request_json_Callback";
+ json_Callback_0_(mthis) => json_Callback_0(mthis);
+
+ static json_Callback_1(mthis, __arg_0) native "Request_json_Callback";
+ json_Callback_1_(mthis, __arg_0) => json_Callback_1(mthis, __arg_0);
+
+ static json_Callback_2(mthis, __arg_0, __arg_1) native "Request_json_Callback";
+ json_Callback_2_(mthis, __arg_0, __arg_1) => json_Callback_2(mthis, __arg_0, __arg_1);
+
static method_Getter(mthis) native "Request_method_Getter";
method_Getter_(mthis) => method_Getter(mthis);
@@ -17897,6 +19012,15 @@
static referrer_Getter(mthis) native "Request_referrer_Getter";
referrer_Getter_(mthis) => referrer_Getter(mthis);
+ static text_Callback_0(mthis) native "Request_text_Callback";
+ text_Callback_0_(mthis) => text_Callback_0(mthis);
+
+ static text_Callback_1(mthis, __arg_0) native "Request_text_Callback";
+ text_Callback_1_(mthis, __arg_0) => text_Callback_1(mthis, __arg_0);
+
+ static text_Callback_2(mthis, __arg_0, __arg_1) native "Request_text_Callback";
+ text_Callback_2_(mthis, __arg_0, __arg_1) => text_Callback_2(mthis, __arg_0, __arg_1);
+
static url_Getter(mthis) native "Request_url_Getter";
url_Getter_(mthis) => url_Getter(mthis);
@@ -17913,8 +19037,35 @@
class BlinkResponse {
static final instance = new BlinkResponse();
- static body_Getter(mthis) native "Response_body_Getter";
- body_Getter_(mthis) => body_Getter(mthis);
+ static arrayBuffer_Callback_0(mthis) native "Response_arrayBuffer_Callback";
+ arrayBuffer_Callback_0_(mthis) => arrayBuffer_Callback_0(mthis);
+
+ static arrayBuffer_Callback_1(mthis, __arg_0) native "Response_arrayBuffer_Callback";
+ arrayBuffer_Callback_1_(mthis, __arg_0) => arrayBuffer_Callback_1(mthis, __arg_0);
+
+ static arrayBuffer_Callback_2(mthis, __arg_0, __arg_1) native "Response_arrayBuffer_Callback";
+ arrayBuffer_Callback_2_(mthis, __arg_0, __arg_1) => arrayBuffer_Callback_2(mthis, __arg_0, __arg_1);
+
+ static blob_Callback_0(mthis) native "Response_blob_Callback";
+ blob_Callback_0_(mthis) => blob_Callback_0(mthis);
+
+ static blob_Callback_1(mthis, __arg_0) native "Response_blob_Callback";
+ blob_Callback_1_(mthis, __arg_0) => blob_Callback_1(mthis, __arg_0);
+
+ static blob_Callback_2(mthis, __arg_0, __arg_1) native "Response_blob_Callback";
+ blob_Callback_2_(mthis, __arg_0, __arg_1) => blob_Callback_2(mthis, __arg_0, __arg_1);
+
+ static bodyUsed_Getter(mthis) native "Response_bodyUsed_Getter";
+ bodyUsed_Getter_(mthis) => bodyUsed_Getter(mthis);
+
+ static clone_Callback_0(mthis) native "Response_clone_Callback";
+ clone_Callback_0_(mthis) => clone_Callback_0(mthis);
+
+ static clone_Callback_1(mthis, __arg_0) native "Response_clone_Callback";
+ clone_Callback_1_(mthis, __arg_0) => clone_Callback_1(mthis, __arg_0);
+
+ static clone_Callback_2(mthis, __arg_0, __arg_1) native "Response_clone_Callback";
+ clone_Callback_2_(mthis, __arg_0, __arg_1) => clone_Callback_2(mthis, __arg_0, __arg_1);
static constructorCallback_0() native "Response_constructorCallback";
constructorCallback_0_() => constructorCallback_0();
@@ -17934,12 +19085,30 @@
static headers_Getter(mthis) native "Response_headers_Getter";
headers_Getter_(mthis) => headers_Getter(mthis);
+ static json_Callback_0(mthis) native "Response_json_Callback";
+ json_Callback_0_(mthis) => json_Callback_0(mthis);
+
+ static json_Callback_1(mthis, __arg_0) native "Response_json_Callback";
+ json_Callback_1_(mthis, __arg_0) => json_Callback_1(mthis, __arg_0);
+
+ static json_Callback_2(mthis, __arg_0, __arg_1) native "Response_json_Callback";
+ json_Callback_2_(mthis, __arg_0, __arg_1) => json_Callback_2(mthis, __arg_0, __arg_1);
+
static statusText_Getter(mthis) native "Response_statusText_Getter";
statusText_Getter_(mthis) => statusText_Getter(mthis);
static status_Getter(mthis) native "Response_status_Getter";
status_Getter_(mthis) => status_Getter(mthis);
+ static text_Callback_0(mthis) native "Response_text_Callback";
+ text_Callback_0_(mthis) => text_Callback_0(mthis);
+
+ static text_Callback_1(mthis, __arg_0) native "Response_text_Callback";
+ text_Callback_1_(mthis, __arg_0) => text_Callback_1(mthis, __arg_0);
+
+ static text_Callback_2(mthis, __arg_0, __arg_1) native "Response_text_Callback";
+ text_Callback_2_(mthis, __arg_0, __arg_1) => text_Callback_2(mthis, __arg_0, __arg_1);
+
static type_Getter(mthis) native "Response_type_Getter";
type_Getter_(mthis) => type_Getter(mthis);
@@ -18019,26 +19188,6 @@
}
-class BlinkSQLTransactionSync {
- static final instance = new BlinkSQLTransactionSync();
-
- static executeSql_Callback_0(mthis) native "SQLTransactionSync_executeSql_Callback";
- executeSql_Callback_0_(mthis) => executeSql_Callback_0(mthis);
-
- static executeSql_Callback_1(mthis, __arg_0) native "SQLTransactionSync_executeSql_Callback";
- executeSql_Callback_1_(mthis, __arg_0) => executeSql_Callback_1(mthis, __arg_0);
-
- static executeSql_Callback_2(mthis, __arg_0, __arg_1) native "SQLTransactionSync_executeSql_Callback";
- executeSql_Callback_2_(mthis, __arg_0, __arg_1) => executeSql_Callback_2(mthis, __arg_0, __arg_1);
-
- static executeSql_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SQLTransactionSync_executeSql_Callback";
- executeSql_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => executeSql_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
-
- static executeSql_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SQLTransactionSync_executeSql_Callback";
- executeSql_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => executeSql_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
-
-}
-
class BlinkSVGAElement extends BlinkSVGGraphicsElement {
static final instance = new BlinkSVGAElement();
@@ -22709,6 +23858,12 @@
static bufferSize_Getter(mthis) native "ScriptProcessorNode_bufferSize_Getter";
bufferSize_Getter_(mthis) => bufferSize_Getter(mthis);
+ static onaudioprocess_Getter(mthis) native "ScriptProcessorNode_onaudioprocess_Getter";
+ onaudioprocess_Getter_(mthis) => onaudioprocess_Getter(mthis);
+
+ static onaudioprocess_Setter(mthis, __arg_0) native "ScriptProcessorNode_onaudioprocess_Setter";
+ onaudioprocess_Setter_(mthis, __arg_0) => onaudioprocess_Setter(mthis, __arg_0);
+
static setEventListener_Callback_0(mthis) native "ScriptProcessorNode_setEventListener_Callback";
setEventListener_Callback_0_(mthis) => setEventListener_Callback_0(mthis);
@@ -23015,6 +24170,15 @@
static state_Getter(mthis) native "ServiceWorker_state_Getter";
state_Getter_(mthis) => state_Getter(mthis);
+ static terminate_Callback_0(mthis) native "ServiceWorker_terminate_Callback";
+ terminate_Callback_0_(mthis) => terminate_Callback_0(mthis);
+
+ static terminate_Callback_1(mthis, __arg_0) native "ServiceWorker_terminate_Callback";
+ terminate_Callback_1_(mthis, __arg_0) => terminate_Callback_1(mthis, __arg_0);
+
+ static terminate_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorker_terminate_Callback";
+ terminate_Callback_2_(mthis, __arg_0, __arg_1) => terminate_Callback_2(mthis, __arg_0, __arg_1);
+
}
class BlinkServiceWorkerClient {
@@ -23043,28 +24207,37 @@
class BlinkServiceWorkerClients {
static final instance = new BlinkServiceWorkerClients();
- static getServiced_Callback_0(mthis) native "ServiceWorkerClients_getServiced_Callback";
- getServiced_Callback_0_(mthis) => getServiced_Callback_0(mthis);
+ static getAll_Callback_0(mthis) native "ServiceWorkerClients_getAll_Callback";
+ getAll_Callback_0_(mthis) => getAll_Callback_0(mthis);
- static getServiced_Callback_1(mthis, __arg_0) native "ServiceWorkerClients_getServiced_Callback";
- getServiced_Callback_1_(mthis, __arg_0) => getServiced_Callback_1(mthis, __arg_0);
+ static getAll_Callback_1(mthis, __arg_0) native "ServiceWorkerClients_getAll_Callback";
+ getAll_Callback_1_(mthis, __arg_0) => getAll_Callback_1(mthis, __arg_0);
- static getServiced_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorkerClients_getServiced_Callback";
- getServiced_Callback_2_(mthis, __arg_0, __arg_1) => getServiced_Callback_2(mthis, __arg_0, __arg_1);
+ static getAll_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorkerClients_getAll_Callback";
+ getAll_Callback_2_(mthis, __arg_0, __arg_1) => getAll_Callback_2(mthis, __arg_0, __arg_1);
+
+ static getAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ServiceWorkerClients_getAll_Callback";
+ getAll_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
}
class BlinkServiceWorkerContainer {
static final instance = new BlinkServiceWorkerContainer();
- static active_Getter(mthis) native "ServiceWorkerContainer_active_Getter";
- active_Getter_(mthis) => active_Getter(mthis);
-
static controller_Getter(mthis) native "ServiceWorkerContainer_controller_Getter";
controller_Getter_(mthis) => controller_Getter(mthis);
- static installing_Getter(mthis) native "ServiceWorkerContainer_installing_Getter";
- installing_Getter_(mthis) => installing_Getter(mthis);
+ static getRegistration_Callback_0(mthis) native "ServiceWorkerContainer_getRegistration_Callback";
+ getRegistration_Callback_0_(mthis) => getRegistration_Callback_0(mthis);
+
+ static getRegistration_Callback_1(mthis, __arg_0) native "ServiceWorkerContainer_getRegistration_Callback";
+ getRegistration_Callback_1_(mthis, __arg_0) => getRegistration_Callback_1(mthis, __arg_0);
+
+ static getRegistration_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorkerContainer_getRegistration_Callback";
+ getRegistration_Callback_2_(mthis, __arg_0, __arg_1) => getRegistration_Callback_2(mthis, __arg_0, __arg_1);
+
+ static getRegistration_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ServiceWorkerContainer_getRegistration_Callback";
+ getRegistration_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getRegistration_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
static ready_Getter(mthis) native "ServiceWorkerContainer_ready_Getter";
ready_Getter_(mthis) => ready_Getter(mthis);
@@ -23084,29 +24257,26 @@
static register_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "ServiceWorkerContainer_register_Callback";
register_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => register_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
- static unregister_Callback_0(mthis) native "ServiceWorkerContainer_unregister_Callback";
- unregister_Callback_0_(mthis) => unregister_Callback_0(mthis);
-
- static unregister_Callback_1(mthis, __arg_0) native "ServiceWorkerContainer_unregister_Callback";
- unregister_Callback_1_(mthis, __arg_0) => unregister_Callback_1(mthis, __arg_0);
-
- static unregister_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorkerContainer_unregister_Callback";
- unregister_Callback_2_(mthis, __arg_0, __arg_1) => unregister_Callback_2(mthis, __arg_0, __arg_1);
-
- static unregister_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ServiceWorkerContainer_unregister_Callback";
- unregister_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => unregister_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
-
- static waiting_Getter(mthis) native "ServiceWorkerContainer_waiting_Getter";
- waiting_Getter_(mthis) => waiting_Getter(mthis);
-
}
class BlinkServiceWorkerGlobalScope extends BlinkWorkerGlobalScope {
static final instance = new BlinkServiceWorkerGlobalScope();
+ static caches_Getter(mthis) native "ServiceWorkerGlobalScope_caches_Getter";
+ caches_Getter_(mthis) => caches_Getter(mthis);
+
static clients_Getter(mthis) native "ServiceWorkerGlobalScope_clients_Getter";
clients_Getter_(mthis) => clients_Getter(mthis);
+ static close_Callback_0(mthis) native "ServiceWorkerGlobalScope_close_Callback";
+ close_Callback_0_(mthis) => close_Callback_0(mthis);
+
+ static close_Callback_1(mthis, __arg_0) native "ServiceWorkerGlobalScope_close_Callback";
+ close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);
+
+ static close_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorkerGlobalScope_close_Callback";
+ close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);
+
static fetch_Callback_0(mthis) native "ServiceWorkerGlobalScope_fetch_Callback";
fetch_Callback_0_(mthis) => fetch_Callback_0(mthis);
@@ -23122,9 +24292,6 @@
static fetch_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "ServiceWorkerGlobalScope_fetch_Callback";
fetch_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => fetch_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
- static nativeCaches_Getter(mthis) native "ServiceWorkerGlobalScope_nativeCaches_Getter";
- nativeCaches_Getter_(mthis) => nativeCaches_Getter(mthis);
-
static onactivate_Getter(mthis) native "ServiceWorkerGlobalScope_onactivate_Getter";
onactivate_Getter_(mthis) => onactivate_Getter(mthis);
@@ -28119,38 +29286,6 @@
}
-class BlinkWebKitPoint {
- static final instance = new BlinkWebKitPoint();
-
- static constructorCallback_0() native "WebKitPoint_constructorCallback";
- constructorCallback_0_() => constructorCallback_0();
-
- static constructorCallback_1(__arg_0) native "WebKitPoint_constructorCallback";
- constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);
-
- static constructorCallback_2(__arg_0, __arg_1) native "WebKitPoint_constructorCallback";
- constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);
-
- static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "WebKitPoint_constructorCallback";
- constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);
-
- static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "WebKitPoint_constructorCallback";
- constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);
-
- static x_Getter(mthis) native "WebKitPoint_x_Getter";
- x_Getter_(mthis) => x_Getter(mthis);
-
- static x_Setter(mthis, __arg_0) native "WebKitPoint_x_Setter";
- x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);
-
- static y_Getter(mthis) native "WebKitPoint_y_Getter";
- y_Getter_(mthis) => y_Getter(mthis);
-
- static y_Setter(mthis, __arg_0) native "WebKitPoint_y_Setter";
- y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);
-
-}
-
class BlinkWebSocket extends BlinkEventTarget {
static final instance = new BlinkWebSocket();
@@ -29661,42 +30796,6 @@
static onerror_Setter(mthis, __arg_0) native "WorkerGlobalScope_onerror_Setter";
onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);
- static openDatabaseSync_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_openDatabaseSync_Callback";
- openDatabaseSync_Callback_2_(mthis, __arg_0, __arg_1) => openDatabaseSync_Callback_2(mthis, __arg_0, __arg_1);
-
- static openDatabaseSync_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_openDatabaseSync_Callback";
- openDatabaseSync_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => openDatabaseSync_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
-
- static openDatabaseSync_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WorkerGlobalScope_openDatabaseSync_Callback";
- openDatabaseSync_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => openDatabaseSync_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
-
- static openDatabaseSync_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WorkerGlobalScope_openDatabaseSync_Callback";
- openDatabaseSync_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => openDatabaseSync_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
-
- static openDatabaseSync_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WorkerGlobalScope_openDatabaseSync_Callback";
- openDatabaseSync_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => openDatabaseSync_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);
-
- static openDatabaseSync_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WorkerGlobalScope_openDatabaseSync_Callback";
- openDatabaseSync_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => openDatabaseSync_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);
-
- static openDatabase_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_openDatabase_Callback";
- openDatabase_Callback_2_(mthis, __arg_0, __arg_1) => openDatabase_Callback_2(mthis, __arg_0, __arg_1);
-
- static openDatabase_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_openDatabase_Callback";
- openDatabase_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => openDatabase_Callback_3(mthis, __arg_0, __arg_1, __arg_2);
-
- static openDatabase_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WorkerGlobalScope_openDatabase_Callback";
- openDatabase_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => openDatabase_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);
-
- static openDatabase_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WorkerGlobalScope_openDatabase_Callback";
- openDatabase_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => openDatabase_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);
-
- static openDatabase_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WorkerGlobalScope_openDatabase_Callback";
- openDatabase_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => openDatabase_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);
-
- static openDatabase_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WorkerGlobalScope_openDatabase_Callback";
- openDatabase_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => openDatabase_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);
-
static performance_Getter(mthis) native "WorkerGlobalScope_performance_Getter";
performance_Getter_(mthis) => performance_Getter(mthis);
@@ -29860,6 +30959,9 @@
static dartEnabled_Getter(mthis) native "WorkerNavigator_dartEnabled_Getter";
dartEnabled_Getter_(mthis) => dartEnabled_Getter(mthis);
+ static geofencing_Getter(mthis) native "WorkerNavigator_geofencing_Getter";
+ geofencing_Getter_(mthis) => geofencing_Getter(mthis);
+
static hardwareConcurrency_Getter(mthis) native "WorkerNavigator_hardwareConcurrency_Getter";
hardwareConcurrency_Getter_(mthis) => hardwareConcurrency_Getter(mthis);
@@ -30429,6 +31531,8 @@
static spawnDomUri(uri) native "Utils_spawnDomUri";
+ static void spawnDomHelper(Function f, int replyTo) native "Utils_spawnDomHelper";
+
static register(document, tag, customType, extendsTagName) native "Utils_register";
static createElement(document, tagName) native "Utils_createElement";
diff --git a/sdk/lib/_internal/compiler/js_lib/collection_patch.dart b/sdk/lib/_internal/compiler/js_lib/collection_patch.dart
index 0d56162..67e54bc 100644
--- a/sdk/lib/_internal/compiler/js_lib/collection_patch.dart
+++ b/sdk/lib/_internal/compiler/js_lib/collection_patch.dart
@@ -544,7 +544,7 @@
int length = JS('int', '#.length', bucket);
for (int i = 0; i < length; i++) {
LinkedHashMapCell cell = JS('var', '#[#]', bucket, i);
- if (identical(cell.key, key)) return i;
+ if (identical(cell.hashMapCellKey, key)) return i;
}
return -1;
}
@@ -589,7 +589,7 @@
int length = JS('int', '#.length', bucket);
for (int i = 0; i < length; i++) {
LinkedHashMapCell cell = JS('var', '#[#]', bucket, i);
- if (_equals(cell.key, key)) return i;
+ if (_equals(cell.hashMapCellKey, key)) return i;
}
return -1;
}
diff --git a/sdk/lib/_internal/compiler/js_lib/foreign_helper.dart b/sdk/lib/_internal/compiler/js_lib/foreign_helper.dart
index 96fd0a5..8a400f8 100644
--- a/sdk/lib/_internal/compiler/js_lib/foreign_helper.dart
+++ b/sdk/lib/_internal/compiler/js_lib/foreign_helper.dart
@@ -4,6 +4,8 @@
library _foreign_helper;
+import 'dart:_js_embedded_names' show JsGetName;
+
/**
* Emits a JavaScript code fragment parameterized by arguments.
*
@@ -240,7 +242,7 @@
String JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG() {}
/// Returns the JS name for [name] from the Namer.
-String JS_GET_NAME(String name) {}
+String JS_GET_NAME(JsGetName name) {}
/// Reads an embedded global.
///
diff --git a/sdk/lib/_internal/compiler/js_lib/interceptors.dart b/sdk/lib/_internal/compiler/js_lib/interceptors.dart
index e9f5422..833f006 100644
--- a/sdk/lib/_internal/compiler/js_lib/interceptors.dart
+++ b/sdk/lib/_internal/compiler/js_lib/interceptors.dart
@@ -31,6 +31,7 @@
stringReplaceAllUnchecked,
stringReplaceFirstUnchecked,
stringReplaceFirstMappedUnchecked,
+ stringReplaceRangeUnchecked,
lookupAndCacheInterceptor,
lookupDispatchRecord,
StringMatch,
diff --git a/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart b/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart
index 4627da32..9d36be5 100644
--- a/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart
+++ b/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart
@@ -52,7 +52,8 @@
*/
_callInIsolate(_IsolateContext isolate, Function function) {
var result = isolate.eval(function);
- _globalState.topEventLoop.run();
+ // If we are not already running the event-loop start it now.
+ if (!_currentIsolate()._isExecutingEvent) _globalState.topEventLoop.run();
return result;
}
@@ -452,6 +453,7 @@
_globalState.currentContext = this;
this._setGlobals();
var result = null;
+ var oldIsExecutingEvent = _isExecutingEvent;
_isExecutingEvent = true;
try {
result = code();
@@ -465,7 +467,7 @@
}
}
} finally {
- _isExecutingEvent = false;
+ _isExecutingEvent = oldIsExecutingEvent;
_globalState.currentContext = old;
if (old != null) old._setGlobals();
if (_scheduledControlEvents != null) {
@@ -661,7 +663,7 @@
}
/**
- * Call [_runHelper] but ensure that worker exceptions are propragated.
+ * Call [_runHelper] but ensure that worker exceptions are propagated.
*/
void run() {
if (!_globalState.isWorker) {
diff --git a/sdk/lib/_internal/compiler/js_lib/js_helper.dart b/sdk/lib/_internal/compiler/js_lib/js_helper.dart
index 4376b05..89766d1 100644
--- a/sdk/lib/_internal/compiler/js_lib/js_helper.dart
+++ b/sdk/lib/_internal/compiler/js_lib/js_helper.dart
@@ -7,6 +7,7 @@
import 'dart:_async_await_error_codes' as async_error_codes;
import 'dart:_js_embedded_names' show
+ JsGetName,
GET_TYPE_FROM_NAME,
GET_ISOLATE_TAG,
INTERCEPTED_NAMES,
@@ -1036,7 +1037,7 @@
}
String selectorName =
- '${JS_GET_NAME("CALL_PREFIX")}\$$argumentCount$names';
+ '${JS_GET_NAME(JsGetName.CALL_PREFIX)}\$$argumentCount$names';
return function.noSuchMethod(
createUnmangledInvocationMirror(
@@ -1052,20 +1053,21 @@
Map<String, dynamic> namedArguments) {
if (namedArguments == null) {
int requiredParameterCount = JS('int', r'#[#]', function,
- JS_GET_NAME("REQUIRED_PARAMETER_PROPERTY"));
+ JS_GET_NAME(JsGetName.REQUIRED_PARAMETER_PROPERTY));
int argumentCount = positionalArguments.length;
if (argumentCount < requiredParameterCount) {
return functionNoSuchMethod(function, positionalArguments, null);
}
- String selectorName = '${JS_GET_NAME("CALL_PREFIX")}\$$argumentCount';
+ String selectorName =
+ '${JS_GET_NAME(JsGetName.CALL_PREFIX)}\$$argumentCount';
var jsStub = JS('var', r'#[#]', function, selectorName);
if (jsStub == null) {
// Do a dynamic call.
var interceptor = getInterceptor(function);
var jsFunction = JS('', '#[#]', interceptor,
- JS_GET_NAME('CALL_CATCH_ALL'));
+ JS_GET_NAME(JsGetName.CALL_CATCH_ALL));
var defaultValues = JS('var', r'#[#]', function,
- JS_GET_NAME("DEFAULT_VALUES_PROPERTY"));
+ JS_GET_NAME(JsGetName.DEFAULT_VALUES_PROPERTY));
if (!JS('bool', '# instanceof Array', defaultValues)) {
// The function expects named arguments!
return functionNoSuchMethod(function, positionalArguments, null);
@@ -1086,9 +1088,9 @@
} else {
var interceptor = getInterceptor(function);
var jsFunction = JS('', '#[#]', interceptor,
- JS_GET_NAME('CALL_CATCH_ALL'));
+ JS_GET_NAME(JsGetName.CALL_CATCH_ALL));
var defaultValues = JS('JSArray', r'#[#]', function,
- JS_GET_NAME("DEFAULT_VALUES_PROPERTY"));
+ JS_GET_NAME(JsGetName.DEFAULT_VALUES_PROPERTY));
List keys = JS('JSArray', r'Object.keys(#)', defaultValues);
List arguments = new List.from(positionalArguments);
int used = 0;
@@ -1140,7 +1142,8 @@
arguments = [];
}
- String selectorName = '${JS_GET_NAME("CALL_PREFIX")}\$$argumentCount';
+ String selectorName =
+ '${JS_GET_NAME(JsGetName.CALL_PREFIX)}\$$argumentCount';
var jsFunction = JS('var', '#[#]', function, selectorName);
if (jsFunction == null) {
var interceptor = getInterceptor(function);
@@ -1176,7 +1179,8 @@
// TODO(ahe): The following code can be shared with
// JsInstanceMirror.invoke.
var interceptor = getInterceptor(function);
- var jsFunction = JS('', '#[#]', interceptor, JS_GET_NAME('CALL_CATCH_ALL'));
+ var jsFunction = JS('', '#[#]', interceptor,
+ JS_GET_NAME(JsGetName.CALL_CATCH_ALL));
if (jsFunction == null) {
return functionNoSuchMethod(
@@ -2070,7 +2074,7 @@
var function = JS('', '#[#]', functions, 0);
String name = JS('String|Null', '#.\$stubName', function);
String callName = JS('String|Null', '#[#]', function,
- JS_GET_NAME("CALL_NAME_PROPERTY"));
+ JS_GET_NAME(JsGetName.CALL_NAME_PROPERTY));
var functionType;
if (reflectionInfo is List) {
@@ -2173,16 +2177,17 @@
for (int i = 1; i < functions.length; i++) {
var stub = functions[i];
var stubCallName = JS('String|Null', '#[#]', stub,
- JS_GET_NAME("CALL_NAME_PROPERTY"));
+ JS_GET_NAME(JsGetName.CALL_NAME_PROPERTY));
if (stubCallName != null) {
JS('', '#[#] = #', prototype, stubCallName,
isStatic ? stub : forwardCallTo(receiver, stub, isIntercepted));
}
}
- JS('', '#[#] = #', prototype, JS_GET_NAME('CALL_CATCH_ALL'), trampoline);
- String reqArgProperty = JS_GET_NAME("REQUIRED_PARAMETER_PROPERTY");
- String defValProperty = JS_GET_NAME("DEFAULT_VALUES_PROPERTY");
+ JS('', '#[#] = #', prototype, JS_GET_NAME(JsGetName.CALL_CATCH_ALL),
+ trampoline);
+ String reqArgProperty = JS_GET_NAME(JsGetName.REQUIRED_PARAMETER_PROPERTY);
+ String defValProperty = JS_GET_NAME(JsGetName.DEFAULT_VALUES_PROPERTY);
JS('', '#.# = #.#', prototype, reqArgProperty, function, reqArgProperty);
JS('', '#.# = #.#', prototype, defValProperty, function, defValProperty);
@@ -2254,7 +2259,7 @@
}
}
- static bool get isCsp => JS('bool', 'typeof dart_precompiled == "function"');
+ static bool get isCsp => JS_GET_FLAG("USE_CONTENT_SECURITY_POLICY");
static forwardCallTo(receiver, function, bool isIntercepted) {
if (isIntercepted) return forwardInterceptedCallTo(receiver, function);
@@ -2371,7 +2376,7 @@
String receiverField = BoundClosure.receiverFieldName();
String stubName = JS('String|Null', '#.\$stubName', function);
int arity = JS('int', '#.length', function);
- bool isCsp = JS('bool', 'typeof dart_precompiled == "function"');
+ bool isCsp = JS_GET_FLAG("USE_CONTENT_SECURITY_POLICY");
var lookedUpFunction = JS("", "#[#]", receiver, stubName);
// The receiver[stubName] may not be equal to the function if we try to
// forward to a super-method. Especially when we create a bound closure
@@ -3446,9 +3451,6 @@
}
Future<Null> _loadHunk(String hunkName) {
- // TODO(ahe): Validate libraryName. Kasper points out that you want
- // to be able to experiment with the effect of toggling @DeferLoad,
- // so perhaps we should silently ignore "bad" library names.
Future<Null> future = _loadingLibraries[hunkName];
if (future != null) {
return future.then((_) => null);
@@ -3459,87 +3461,74 @@
int index = uri.lastIndexOf('/');
uri = '${uri.substring(0, index + 1)}$hunkName';
- if (Primitives.isJsshell || Primitives.isD8) {
- // TODO(ahe): Move this code to a JavaScript command helper script that is
- // not included in generated output.
- return _loadingLibraries[hunkName] = new Future<Null>(() {
+ var deferredLibraryLoader = JS('', 'self.dartDeferredLibraryLoader');
+ Completer<Null> completer = new Completer<Null>();
+
+ void success() {
+ completer.complete(null);
+ }
+
+ void failure([error, StackTrace stackTrace]) {
+ _loadingLibraries[hunkName] = null;
+ completer.completeError(
+ new DeferredLoadException("Loading $uri failed: $error"),
+ stackTrace);
+ }
+
+ var jsSuccess = convertDartClosureToJS(success, 0);
+ var jsFailure = convertDartClosureToJS((error) {
+ failure(unwrapException(error), getTraceFromException(error));
+ }, 1);
+
+ if (JS('bool', 'typeof # === "function"', deferredLibraryLoader)) {
+ try {
+ JS('void', '#(#, #, #)', deferredLibraryLoader, uri,
+ jsSuccess, jsFailure);
+ } catch (error, stackTrace) {
+ failure(error, stackTrace);
+ }
+ } else if (isWorker()) {
+ // We are in a web worker. Load the code with an XMLHttpRequest.
+ enterJsAsync();
+ Future<Null> leavingFuture = completer.future.whenComplete(() {
+ leaveJsAsync();
+ });
+
+ int index = uri.lastIndexOf('/');
+ uri = '${uri.substring(0, index + 1)}$hunkName';
+ var xhr = JS('dynamic', 'new XMLHttpRequest()');
+ JS('void', '#.open("GET", #)', xhr, uri);
+ JS('void', '#.addEventListener("load", #, false)',
+ xhr, convertDartClosureToJS((event) {
+ if (JS('int', '#.status', xhr) != 200) {
+ failure("");
+ }
+ String code = JS('String', '#.responseText', xhr);
try {
// Create a new function to avoid getting access to current function
// context.
- JS('void', '(new Function(#))()', 'load("$uri")');
+ JS('void', '(new Function(#))()', code);
+ success();
} catch (error, stackTrace) {
- _loadingLibraries[hunkName] = null;
- throw new DeferredLoadException("Loading $uri failed.");
+ failure(error, stackTrace);
}
- return null;
- });
- } else if (isWorker()) {
- // We are in a web worker. Load the code with an XMLHttpRequest.
- return _loadingLibraries[hunkName] = new Future<Null>(() {
- Completer completer = new Completer<Null>();
- enterJsAsync();
- Future<Null> leavingFuture = completer.future.whenComplete(() {
- leaveJsAsync();
- });
+ }, 1));
- int index = uri.lastIndexOf('/');
- uri = '${uri.substring(0, index + 1)}$hunkName';
- var xhr = JS('dynamic', 'new XMLHttpRequest()');
- JS('void', '#.open("GET", #)', xhr, uri);
- JS('void', '#.addEventListener("load", #, false)',
- xhr, convertDartClosureToJS((event) {
- if (JS('int', '#.status', xhr) != 200) {
- _loadingLibraries[hunkName] = null;
- completer.completeError(
- new DeferredLoadException("Loading $uri failed."));
- return;
- }
- String code = JS('String', '#.responseText', xhr);
- try {
- // Create a new function to avoid getting access to current function
- // context.
- JS('void', '(new Function(#))()', code);
- } catch (error, stackTrace) {
- _loadingLibraries[hunkName] = null;
- completer.completeError(
- new DeferredLoadException("Evaluating $uri failed."));
- return;
- }
- completer.complete(null);
- }, 1));
-
- var fail = convertDartClosureToJS((event) {
- _loadingLibraries[hunkName] = null;
- new DeferredLoadException("Loading $uri failed.");
- }, 1);
- JS('void', '#.addEventListener("error", #, false)', xhr, fail);
- JS('void', '#.addEventListener("abort", #, false)', xhr, fail);
-
- JS('void', '#.send()', xhr);
- return leavingFuture;
- });
- }
- // We are in a dom-context.
- return _loadingLibraries[hunkName] = new Future<Null>(() {
- Completer completer = new Completer<Null>();
+ JS('void', '#.addEventListener("error", #, false)', xhr, failure);
+ JS('void', '#.addEventListener("abort", #, false)', xhr, failure);
+ JS('void', '#.send()', xhr);
+ } else {
+ // We are in a dom-context.
// Inject a script tag.
var script = JS('', 'document.createElement("script")');
JS('', '#.type = "text/javascript"', script);
JS('', '#.src = #', script, uri);
- JS('', '#.addEventListener("load", #, false)',
- script, convertDartClosureToJS((event) {
- completer.complete(null);
- }, 1));
- JS('', '#.addEventListener("error", #, false)',
- script, convertDartClosureToJS((event) {
- _loadingLibraries[hunkName] = null;
- completer.completeError(
- new DeferredLoadException("Loading $uri failed."));
- }, 1));
+ JS('', '#.addEventListener("load", #, false)', script, jsSuccess);
+ JS('', '#.addEventListener("error", #, false)', script, jsFailure);
JS('', 'document.body.appendChild(#)', script);
-
- return completer.future;
- });
+ }
+ _loadingLibraries[hunkName] = completer.future;
+ return completer.future;
}
class MainError extends Error implements NoSuchMethodError {
@@ -3818,7 +3807,7 @@
SyncStarIterator(this._body);
- runBody() {
+ _runBody() {
return JS('', '''
// Invokes [body] with [errorCode] and [result].
//
@@ -3846,7 +3835,7 @@
_runningNested = false;
}
}
- _current = runBody();
+ _current = _runBody();
if (_current is IterationMarker) {
if (_current.state == IterationMarker.ITERATION_ENDED) {
_current = null;
diff --git a/sdk/lib/_internal/compiler/js_lib/js_mirrors.dart b/sdk/lib/_internal/compiler/js_lib/js_mirrors.dart
index 2b00057..5945867 100644
--- a/sdk/lib/_internal/compiler/js_lib/js_mirrors.dart
+++ b/sdk/lib/_internal/compiler/js_lib/js_mirrors.dart
@@ -5,6 +5,7 @@
library dart._js_mirrors;
import 'dart:_js_embedded_names' show
+ JsGetName,
ALL_CLASSES,
LAZIES,
LIBRARIES,
@@ -21,6 +22,7 @@
import 'dart:_foreign_helper' show
JS,
+ JS_GET_FLAG,
JS_CURRENT_ISOLATE,
JS_CURRENT_ISOLATE_CONTEXT,
JS_EMBEDDED_GLOBAL,
@@ -71,7 +73,7 @@
const String METHODS_WITH_OPTIONAL_ARGUMENTS = r'$methodsWithOptionalArguments';
bool hasReflectableProperty(var jsFunction) {
- return JS('bool', '# in #', JS_GET_NAME("REFLECTABLE"), jsFunction);
+ return JS('bool', '# in #', JS_GET_NAME(JsGetName.REFLECTABLE), jsFunction);
}
/// No-op method that is called to inform the compiler that tree-shaking needs
@@ -650,7 +652,7 @@
mirror = new JsTypedefMirror(symbol, mangledName, getMetadata(index));
} else {
fields = JS('', '#[#]', descriptor,
- JS_GET_NAME('CLASS_DESCRIPTOR_PROPERTY'));
+ JS_GET_NAME(JsGetName.CLASS_DESCRIPTOR_PROPERTY));
if (fields is List) {
fieldsMetadata = fields.getRange(1, fields.length).toList();
fields = fields[0];
@@ -875,6 +877,8 @@
bool get isAbstract => throw new UnimplementedError();
+ bool get isEnum => throw new UnimplementedError();
+
bool isSubclassOf(ClassMirror other) {
superclass.isSubclassOf(other) || mixin.isSubclassOf(other);
}
@@ -1087,7 +1091,7 @@
static bool isMissingProbe(Symbol symbol)
=> JS('bool', 'typeof #.\$p == "undefined"', symbol);
static bool isEvalAllowed()
- => JS('bool', 'typeof dart_precompiled != "function"');
+ => !JS_GET_FLAG("USE_CONTENT_SECURITY_POLICY");
/// The getter cache is lazily allocated after a couple
@@ -1531,6 +1535,8 @@
bool get isAbstract => _class.isAbstract;
+ bool get isEnum => _class.isEnum;
+
bool isSubclassOf(ClassMirror other) => _class.isSubclassOf(other);
SourceLocation get location => _class.location;
@@ -1746,7 +1752,8 @@
parseCompactFieldSpecification(
fieldOwner,
JS('', '#[#]',
- staticDescriptor, JS_GET_NAME('CLASS_DESCRIPTOR_PROPERTY')),
+ staticDescriptor,
+ JS_GET_NAME(JsGetName.CLASS_DESCRIPTOR_PROPERTY)),
true, result);
}
return result;
@@ -2084,6 +2091,8 @@
bool get isAbstract => throw new UnimplementedError();
+ bool get isEnum => throw new UnimplementedError();
+
bool isSubclassOf(ClassMirror other) {
if (other is! ClassMirror) {
throw new ArgumentError(other);
@@ -2152,7 +2161,7 @@
if (isStatic) {
unmangledName = mangledGlobalNames[accessorName];
} else {
- String getterPrefix = JS_GET_NAME('GETTER_PREFIX');
+ String getterPrefix = JS_GET_NAME(JsGetName.GETTER_PREFIX);
unmangledName = mangledNames['$getterPrefix$accessorName'];
}
if (unmangledName == null) unmangledName = accessorName;
@@ -2231,7 +2240,7 @@
if (cachedFunction != null) return cachedFunction;
disableTreeShaking();
// TODO(ahe): What about optional parameters (named or not).
- String callPrefix = "${JS_GET_NAME("CALL_PREFIX")}\$";
+ String callPrefix = "${JS_GET_NAME(JsGetName.CALL_PREFIX)}\$";
var extractCallName = JS('', r'''
function(reflectee) {
var properties = Object.keys(reflectee.constructor.prototype);
@@ -2665,6 +2674,8 @@
bool get isAbstract => false;
+ bool get isEnum => false;
+
TypeMirror get returnType {
if (_cachedReturnType != null) return _cachedReturnType;
if (_isVoid) return _cachedReturnType = JsMirrorSystem._voidType;
@@ -2945,7 +2956,7 @@
/// Returns true if the key represent ancillary reflection data, that is, not a
/// method.
bool isReflectiveDataInPrototype(String key) {
- if (key == JS_GET_NAME('CLASS_DESCRIPTOR_PROPERTY') ||
+ if (key == JS_GET_NAME(JsGetName.CLASS_DESCRIPTOR_PROPERTY) ||
key == METHODS_WITH_OPTIONAL_ARGUMENTS) {
return true;
}
diff --git a/sdk/lib/_internal/compiler/js_lib/js_names.dart b/sdk/lib/_internal/compiler/js_lib/js_names.dart
index 87cc6c0..7058b07 100644
--- a/sdk/lib/_internal/compiler/js_lib/js_names.dart
+++ b/sdk/lib/_internal/compiler/js_lib/js_names.dart
@@ -5,6 +5,7 @@
library dart._js_names;
import 'dart:_js_embedded_names' show
+ JsGetName,
MANGLED_GLOBAL_NAMES,
MANGLED_NAMES;
@@ -53,9 +54,9 @@
preserveNames();
var keys = extractKeys(jsMangledNames);
var result = <String, String>{};
- String getterPrefix = JS_GET_NAME('GETTER_PREFIX');
+ String getterPrefix = JS_GET_NAME(JsGetName.GETTER_PREFIX);
int getterPrefixLength = getterPrefix.length;
- String setterPrefix = JS_GET_NAME('SETTER_PREFIX');
+ String setterPrefix = JS_GET_NAME(JsGetName.SETTER_PREFIX);
for (String key in keys) {
String value = JS('String', '#[#]', jsMangledNames, key);
result[key] = value;
diff --git a/sdk/lib/_internal/compiler/js_lib/js_string.dart b/sdk/lib/_internal/compiler/js_lib/js_string.dart
index e682626..f7da941 100644
--- a/sdk/lib/_internal/compiler/js_lib/js_string.dart
+++ b/sdk/lib/_internal/compiler/js_lib/js_string.dart
@@ -97,6 +97,14 @@
}
}
+ String replaceRange(int start, int end, String replacement) {
+ checkString(replacement);
+ checkInt(start);
+ end = RangeError.checkValidRange(start, end, this.length);
+ checkInt(end);
+ return stringReplaceRangeUnchecked(this, start, end, replacement);
+ }
+
List<String> _defaultSplit(Pattern pattern) {
List<String> result = <String>[];
// End of most recent match. That is, start of next part to add to result.
diff --git a/sdk/lib/_internal/compiler/js_lib/linked_hash_map.dart b/sdk/lib/_internal/compiler/js_lib/linked_hash_map.dart
index 0187c15..f543e74 100644
--- a/sdk/lib/_internal/compiler/js_lib/linked_hash_map.dart
+++ b/sdk/lib/_internal/compiler/js_lib/linked_hash_map.dart
@@ -85,12 +85,12 @@
var strings = _strings;
if (strings == null) return null;
LinkedHashMapCell cell = _getTableEntry(strings, key);
- return (cell == null) ? null : cell.value;
+ return (cell == null) ? null : cell.hashMapCellValue;
} else if (_isNumericKey(key)) {
var nums = _nums;
if (nums == null) return null;
LinkedHashMapCell cell = _getTableEntry(nums, key);
- return (cell == null) ? null : cell.value;
+ return (cell == null) ? null : cell.hashMapCellValue;
} else {
return internalGet(key);
}
@@ -103,7 +103,7 @@
int index = internalFindBucketIndex(bucket, key);
if (index < 0) return null;
LinkedHashMapCell cell = JS('var', '#[#]', bucket, index);
- return cell.value;
+ return cell.hashMapCellValue;
}
void operator[]=(K key, V value) {
@@ -132,7 +132,7 @@
int index = internalFindBucketIndex(bucket, key);
if (index >= 0) {
LinkedHashMapCell cell = JS('var', '#[#]', bucket, index);
- cell.value = value;
+ cell.hashMapCellValue = value;
} else {
LinkedHashMapCell cell = _newLinkedCell(key, value);
JS('void', '#.push(#)', bucket, cell);
@@ -169,7 +169,7 @@
_unlinkCell(cell);
// TODO(kasperl): Consider getting rid of the bucket list when
// the length reaches zero.
- return cell.value;
+ return cell.hashMapCellValue;
}
void clear() {
@@ -184,7 +184,7 @@
LinkedHashMapCell cell = _first;
int modifications = _modifications;
while (cell != null) {
- action(cell.key, cell.value);
+ action(cell.hashMapCellKey, cell.hashMapCellValue);
if (modifications != _modifications) {
throw new ConcurrentModificationError(this);
}
@@ -197,7 +197,7 @@
if (cell == null) {
_setTableEntry(table, key, _newLinkedCell(key, value));
} else {
- cell.value = value;
+ cell.hashMapCellValue = value;
}
}
@@ -207,7 +207,7 @@
if (cell == null) return null;
_unlinkCell(cell);
_deleteTableEntry(table, key);
- return cell.value;
+ return cell.hashMapCellValue;
}
void _modified() {
@@ -293,7 +293,7 @@
int length = JS('int', '#.length', bucket);
for (int i = 0; i < length; i++) {
LinkedHashMapCell cell = JS('var', '#[#]', bucket, i);
- if (cell.key == key) return i;
+ if (cell.hashMapCellKey == key) return i;
}
return -1;
}
@@ -315,13 +315,13 @@
}
class LinkedHashMapCell {
- final key;
- var value;
+ final hashMapCellKey;
+ var hashMapCellValue;
LinkedHashMapCell _next;
LinkedHashMapCell _previous;
- LinkedHashMapCell(this.key, this.value);
+ LinkedHashMapCell(this.hashMapCellKey, this.hashMapCellValue);
}
class LinkedHashMapKeyIterable<E> extends IterableBase<E>
@@ -344,7 +344,7 @@
LinkedHashMapCell cell = _map._first;
int modifications = _map._modifications;
while (cell != null) {
- f(cell.key);
+ f(cell.hashMapCellKey);
if (modifications != _map._modifications) {
throw new ConcurrentModificationError(_map);
}
@@ -372,7 +372,7 @@
_current = null;
return false;
} else {
- _current = _cell.key;
+ _current = _cell.hashMapCellKey;
_cell = _cell._next;
return true;
}
diff --git a/sdk/lib/_internal/compiler/js_lib/preambles/d8.js b/sdk/lib/_internal/compiler/js_lib/preambles/d8.js
index aed0161..a48f918 100644
--- a/sdk/lib/_internal/compiler/js_lib/preambles/d8.js
+++ b/sdk/lib/_internal/compiler/js_lib/preambles/d8.js
@@ -1,4 +1,4 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
@@ -269,6 +269,7 @@
// Global properties. "self" refers to the global object, so adding a
// property to "self" defines a global variable.
+ self.self = self
self.dartMainRunner = function(main, args) {
// Initialize.
var action = function() { main(args); }
@@ -279,5 +280,14 @@
self.setInterval = addInterval;
self.clearInterval = cancelTimer;
self.scheduleImmediate = addTask;
- self.self = self;
+
+ // Support for deferred loading.
+ self.dartDeferredLibraryLoader = function(uri, successCallback, errorCallback) {
+ try {
+ load(uri);
+ successCallback();
+ } catch (error) {
+ errorCallback(error);
+ }
+ };
})(self);
diff --git a/sdk/lib/_internal/compiler/js_lib/preambles/jsshell.js b/sdk/lib/_internal/compiler/js_lib/preambles/jsshell.js
index 8f13bcc..e804019 100644
--- a/sdk/lib/_internal/compiler/js_lib/preambles/jsshell.js
+++ b/sdk/lib/_internal/compiler/js_lib/preambles/jsshell.js
@@ -1,4 +1,4 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
@@ -11,9 +11,28 @@
// Location (Uri.base)
var workingDirectory = environment["PWD"];
- self.location = { href: "file://" + workingDirectory + "/" };
// Global properties. "self" refers to the global object, so adding a
// property to "self" defines a global variable.
self.self = self;
+
+ self.location = { href: "file://" + workingDirectory + "/" };
+
+ // Support for deferred loading.
+ self.dartDeferredLibraryLoader = function(uri, successCallback, errorCallback) {
+ try {
+ load(uri);
+ successCallback();
+ } catch (error) {
+ errorCallback(error);
+ }
+ };
})(this)
+
+var getKeys = function(obj){
+ var keys = [];
+ for(var key in obj){
+ keys.push(key);
+ }
+ return keys;
+}
diff --git a/sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart b/sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart
index 2735d38..50e0ab1 100644
--- a/sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart
+++ b/sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart
@@ -44,6 +44,7 @@
const IS_HUNK_LOADED = 'isHunkLoaded';
const IS_HUNK_INITIALIZED = 'isHunkInitialized';
const DEFERRED_INITIALIZED = 'deferredInitialized';
+const PRECOMPILED = 'precompiled';
/// Returns a function that creates a new Isolate (its static state).
///
@@ -58,11 +59,22 @@
const TYPEDEF_TYPE_PROPERTY_NAME = r"$typedefType";
const TYPEDEF_PREDICATE_PROPERTY_NAME = r"$$isTypedef";
const NATIVE_SUPERCLASS_TAG_NAME = r"$nativeSuperclassTag";
-const ARGUMENT_COUNT_PROPERTY = r"$argumentCount";
-const DEFAULT_VALUES_PROPERTY = r"$defaultValues";
/// Returns the type given the name of a class.
/// This function is called by the runtime when computing rti.
const GET_TYPE_FROM_NAME = 'getTypeFromName';
const TYPE_TO_INTERCEPTOR_MAP = "typeToInterceptorMap";
+/// Names that are supported by [JS_GET_NAME].
+// TODO(herhut): Make entries lower case (as in fields) and find a better name.
+enum JsGetName {
+ GETTER_PREFIX,
+ SETTER_PREFIX,
+ CALL_PREFIX,
+ CALL_CATCH_ALL,
+ REFLECTABLE,
+ CLASS_DESCRIPTOR_PROPERTY,
+ REQUIRED_PARAMETER_PROPERTY,
+ DEFAULT_VALUES_PROPERTY,
+ CALL_NAME_PROPERTY
+}
diff --git a/sdk/lib/_internal/compiler/js_lib/string_helper.dart b/sdk/lib/_internal/compiler/js_lib/string_helper.dart
index 77b8ab9..567e404 100644
--- a/sdk/lib/_internal/compiler/js_lib/string_helper.dart
+++ b/sdk/lib/_internal/compiler/js_lib/string_helper.dart
@@ -82,7 +82,7 @@
if (match == null) return receiver;
var start = match.start;
var end = match.end;
- return "${receiver.substring(0,start)}$to${receiver.substring(end)}";
+ return stringReplaceRangeUnchecked(receiver, start, end, to);
}
const String ESCAPE_REGEXP = r'[[\]{}()*+?.\\^$|]';
@@ -197,8 +197,8 @@
if (from is String) {
int index = receiver.indexOf(from, startIndex);
if (index < 0) return receiver;
- return '${receiver.substring(0, index)}$to'
- '${receiver.substring(index + from.length)}';
+ int end = index + from.length;
+ return stringReplaceRangeUnchecked(receiver, index, end, to);
}
if (from is JSSyntaxRegExp) {
return startIndex == 0 ?
@@ -226,3 +226,10 @@
stringJoinUnchecked(array, separator) {
return JS('String', r'#.join(#)', array, separator);
}
+
+String stringReplaceRangeUnchecked(String receiver,
+ int start, int end, String replacement) {
+ var prefix = JS('String', '#.substring(0, #)', receiver, start);
+ var suffix = JS('String', '#.substring(#)', receiver, end);
+ return "$prefix$replacement$suffix";
+}
diff --git a/sdk/lib/_internal/pub/lib/src/io.dart b/sdk/lib/_internal/pub/lib/src/io.dart
index 3f7f553..9662d1f 100644
--- a/sdk/lib/_internal/pub/lib/src/io.dart
+++ b/sdk/lib/_internal/pub/lib/src/io.dart
@@ -503,17 +503,7 @@
// Get the path to the directory containing this very file.
var libDir = path.dirname(libraryPath('pub.io'));
- // TODO(rnystrom): Remove this when #104 is fixed.
- // If we are running from the async/await compiled build directory, walk out
- // out of that. It will be something like:
- //
- // <repo>/<build>/<config>/pub_async/lib/src
- if (libDir.contains('pub_async')) {
- return path.normalize(path.join(libDir, '..', '..', '..', '..', '..'));
- }
-
- // Otherwise, assume we're running directly from the source location in the
- // repo:
+ // Assume we're running directly from the source location in the repo:
//
// <repo>/sdk/lib/_internal/pub/lib/src
return path.normalize(path.join(libDir, '..', '..', '..', '..', '..', '..'));
diff --git a/sdk/lib/_internal/pub/pub.status b/sdk/lib/_internal/pub/pub.status
index 058e2d7..449c482 100644
--- a/sdk/lib/_internal/pub/pub.status
+++ b/sdk/lib/_internal/pub/pub.status
@@ -16,6 +16,3 @@
[ $runtime == vm && $system == windows ]
test/run/app_can_read_from_stdin_test: Fail # Issue 19448
-
-[ $runtime == vm && $system == windows ]
-test/real_version_test: RuntimeError # Issue 22543
diff --git a/sdk/lib/_internal/pub/test/real_version_test.dart b/sdk/lib/_internal/pub/test/real_version_test.dart
index 9713808..a84f746 100644
--- a/sdk/lib/_internal/pub/test/real_version_test.dart
+++ b/sdk/lib/_internal/pub/test/real_version_test.dart
@@ -11,7 +11,6 @@
import 'package:scheduled_test/scheduled_test.dart';
import '../lib/src/exit_codes.dart' as exit_codes;
-import '../lib/src/sdk.dart' as sdk;
import 'test_pub.dart';
main() {
@@ -28,8 +27,10 @@
// in the built SDK's "bin" directory. Note also that this invokes pub from
// the built SDK directory, and not the live pub code directly in the repo.
integration('parse the real SDK "version" file', () {
- // Get the path to the pub binary in the SDK.
- var pubPath = path.join(sdk.rootDirectory, 'bin',
+ // Get the path to the pub binary in the SDK. Note that we can't use
+ // sdk.rootDirectory here because that assumes the entrypoint Dart script
+ // being run is pub itself. Here, the entrypoint is this test file.
+ var pubPath = path.join(path.dirname(Platform.executable),
Platform.operatingSystem == "windows" ? "pub.bat" : "pub");
var pub = new ScheduledProcess.start(pubPath, ['version']);
diff --git a/sdk/lib/core/string.dart b/sdk/lib/core/string.dart
index 625446f..c92ca9f 100644
--- a/sdk/lib/core/string.dart
+++ b/sdk/lib/core/string.dart
@@ -477,6 +477,19 @@
String replaceAllMapped(Pattern from, String replace(Match match));
/**
+ * Replaces the substring from [start] to [end] with [replacement].
+ *
+ * Returns a new string equivalent to:
+ *
+ * this.substring(0, start) + replacement + this.substring(end)
+ *
+ * The [start] and [end] indices must specify a valid range of this string.
+ * That is `0 <= start <= end <= this.length`.
+ * If [end] is `null`, it defaults to [length].
+ */
+ String replaceRange(int start, int end, String replacement);
+
+ /**
* Splits the string at matches of [pattern] and returns a list of substrings.
*
* Finds all the matches of `pattern` in this string,
diff --git a/sdk/lib/core/uri.dart b/sdk/lib/core/uri.dart
index c4cb508..06bb3ca 100644
--- a/sdk/lib/core/uri.dart
+++ b/sdk/lib/core/uri.dart
@@ -753,8 +753,8 @@
}
static _makeFileUri(String path) {
- String sep = "/";
- if (path.startsWith(sep)) {
+ const String sep = "/";
+ if (path.startsWith(sep)) {
// Absolute file:// URI.
return new Uri(scheme: "file", pathSegments: path.split(sep));
} else {
@@ -764,23 +764,23 @@
}
static _makeWindowsFileUrl(String path) {
- if (path.startsWith("\\\\?\\")) {
- if (path.startsWith("\\\\?\\UNC\\")) {
- path = "\\${path.substring(7)}";
+ if (path.startsWith(r"\\?\")) {
+ if (path.startsWith(r"UNC\", 4)) {
+ path = path.replaceRange(0, 7, r'\');
} else {
path = path.substring(4);
if (path.length < 3 ||
path.codeUnitAt(1) != _COLON ||
path.codeUnitAt(2) != _BACKSLASH) {
throw new ArgumentError(
- "Windows paths with \\\\?\\ prefix must be absolute");
+ r"Windows paths with \\?\ prefix must be absolute");
}
}
} else {
- path = path.replaceAll("/", "\\");
+ path = path.replaceAll("/", r'\');
}
- String sep = "\\";
- if (path.length > 1 && path[1] == ":") {
+ const String sep = r'\';
+ if (path.length > 1 && path.codeUnitAt(1) == _COLON) {
_checkWindowsDriveLetter(path.codeUnitAt(0), true);
if (path.length == 2 || path.codeUnitAt(2) != _BACKSLASH) {
throw new ArgumentError(
@@ -792,14 +792,14 @@
return new Uri(scheme: "file", pathSegments: pathSegments);
}
- if (path.length > 0 && path[0] == sep) {
- if (path.length > 1 && path[1] == sep) {
+ if (path.startsWith(sep)) {
+ if (path.startsWith(sep, 1)) {
// Absolute file:// URI with host.
- int pathStart = path.indexOf("\\", 2);
+ int pathStart = path.indexOf(r'\', 2);
String hostPart =
- pathStart == -1 ? path.substring(2) : path.substring(2, pathStart);
+ (pathStart < 0) ? path.substring(2) : path.substring(2, pathStart);
String pathPart =
- pathStart == -1 ? "" : path.substring(pathStart + 1);
+ (pathStart < 0) ? "" : path.substring(pathStart + 1);
var pathSegments = pathPart.split(sep);
_checkWindowsPathReservedCharacters(pathSegments, true);
return new Uri(
@@ -1387,8 +1387,8 @@
baseEnd = newEnd;
backCount--;
}
- return base.substring(0, baseEnd + 1) +
- reference.substring(refStart - 3 * backCount);
+ return base.replaceRange(baseEnd + 1, null,
+ reference.substring(refStart - 3 * backCount));
}
bool _hasDotSegments(String path) {
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 2e8b119..735b712 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -390,15 +390,10 @@
@Experimental() // untriaged
num currentTime;
- @DomName('AnimationPlayer.finished')
+ @DomName('AnimationPlayer.playState')
@DocsEditable()
@Experimental() // untriaged
- final bool finished;
-
- @DomName('AnimationPlayer.paused')
- @DocsEditable()
- @Experimental() // untriaged
- final bool paused;
+ final String playState;
@DomName('AnimationPlayer.playbackRate')
@DocsEditable()
@@ -1105,6 +1100,44 @@
@DocsEditable()
+@DomName('Body')
+@Experimental() // untriaged
+@Native("Body")
+class Body extends Interceptor {
+ // To suppress missing implicit constructor warnings.
+ factory Body._() { throw new UnsupportedError("Not supported"); }
+
+ @DomName('Body.bodyUsed')
+ @DocsEditable()
+ @Experimental() // untriaged
+ final bool bodyUsed;
+
+ @DomName('Body.arrayBuffer')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future arrayBuffer() native;
+
+ @DomName('Body.blob')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future blob() native;
+
+ @DomName('Body.json')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future json() native;
+
+ @DomName('Body.text')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future text() native;
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable()
@DomName('HTMLBodyElement')
@Native("HTMLBodyElement")
class BodyElement extends HtmlElement implements WindowEventHandlers {
@@ -1745,6 +1778,11 @@
class CanvasPattern extends Interceptor {
// To suppress missing implicit constructor warnings.
factory CanvasPattern._() { throw new UnsupportedError("Not supported"); }
+
+ @DomName('CanvasPattern.setTransform')
+ @DocsEditable()
+ @Experimental() // untriaged
+ void setTransform(Matrix transform) native;
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -1771,6 +1809,11 @@
@Experimental() // untriaged
Matrix currentTransform;
+ @DomName('CanvasRenderingContext2D.direction')
+ @DocsEditable()
+ @Experimental() // untriaged
+ String direction;
+
@DomName('CanvasRenderingContext2D.fillStyle')
@DocsEditable()
@Creates('String|CanvasGradient|CanvasPattern')
@@ -2468,41 +2511,41 @@
@DocsEditable()
-@DomName('CircularRegion')
+@DomName('CircularGeofencingRegion')
@Experimental() // untriaged
-@Native("CircularRegion")
-class CircularRegion extends GeofencingRegion {
+@Native("CircularGeofencingRegion")
+class CircularGeofencingRegion extends GeofencingRegion {
// To suppress missing implicit constructor warnings.
- factory CircularRegion._() { throw new UnsupportedError("Not supported"); }
+ factory CircularGeofencingRegion._() { throw new UnsupportedError("Not supported"); }
- @DomName('CircularRegion.CircularRegion')
+ @DomName('CircularGeofencingRegion.CircularGeofencingRegion')
@DocsEditable()
- factory CircularRegion(Map init) {
- return CircularRegion._create_1(init);
+ factory CircularGeofencingRegion(Map init) {
+ return CircularGeofencingRegion._create_1(init);
}
- static CircularRegion _create_1(init) => JS('CircularRegion', 'new CircularRegion(#)', init);
+ static CircularGeofencingRegion _create_1(init) => JS('CircularGeofencingRegion', 'new CircularGeofencingRegion(#)', init);
- @DomName('CircularRegion.MAX_RADIUS')
+ @DomName('CircularGeofencingRegion.MAX_RADIUS')
@DocsEditable()
@Experimental() // untriaged
static const num MAX_RADIUS = 100.0;
- @DomName('CircularRegion.MIN_RADIUS')
+ @DomName('CircularGeofencingRegion.MIN_RADIUS')
@DocsEditable()
@Experimental() // untriaged
static const num MIN_RADIUS = 1.0;
- @DomName('CircularRegion.latitude')
+ @DomName('CircularGeofencingRegion.latitude')
@DocsEditable()
@Experimental() // untriaged
final double latitude;
- @DomName('CircularRegion.longitude')
+ @DomName('CircularGeofencingRegion.longitude')
@DocsEditable()
@Experimental() // untriaged
final double longitude;
- @DomName('CircularRegion.radius')
+ @DomName('CircularGeofencingRegion.radius')
@DocsEditable()
@Experimental() // untriaged
final double radius;
@@ -2848,12 +2891,12 @@
@DomName('CredentialsContainer.notifyFailedSignIn')
@DocsEditable()
@Experimental() // untriaged
- Future notifyFailedSignIn([Credential credential]) native;
+ Future notifyFailedSignIn(Credential credential) native;
@DomName('CredentialsContainer.notifySignedIn')
@DocsEditable()
@Experimental() // untriaged
- Future notifySignedIn([Credential credential]) native;
+ Future notifySignedIn(Credential credential) native;
@DomName('CredentialsContainer.notifySignedOut')
@DocsEditable()
@@ -6907,7 +6950,7 @@
@DomName('DatabaseCallback')
// http://www.w3.org/TR/webdatabase/#databasecallback
@Experimental() // deprecated
-typedef void DatabaseCallback(database);
+typedef void DatabaseCallback(SqlDatabase database);
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
@@ -7827,6 +7870,11 @@
@DocsEditable()
String queryCommandValue(String command) native;
+ @DomName('Document.transformDocumentToTreeView')
+ @DocsEditable()
+ @Experimental() // untriaged
+ void transformDocumentToTreeView(String noStyleMessage) native;
+
@JSName('webkitExitFullscreen')
@DomName('Document.webkitExitFullscreen')
@DocsEditable()
@@ -8614,6 +8662,24 @@
@DocsEditable()
+@DomName('Iterator')
+@Experimental() // untriaged
+@Native("Iterator")
+class DomIterator extends Interceptor {
+ // To suppress missing implicit constructor warnings.
+ factory DomIterator._() { throw new UnsupportedError("Not supported"); }
+
+ @DomName('Iterator.next')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Object next([Object value]) native;
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable()
@DomName('DOMMatrix')
@Experimental() // untriaged
@Native("DOMMatrix")
@@ -8788,6 +8854,36 @@
void set m44(num value) {
JS("void", "#.m44 = #", this, value);
}
+
+ @DomName('DOMMatrix.multiplySelf')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix multiplySelf(DomMatrix other) native;
+
+ @DomName('DOMMatrix.preMultiplySelf')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix preMultiplySelf(DomMatrix other) native;
+
+ @DomName('DOMMatrix.scale3dSelf')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix scale3dSelf(num scale, [num ox, num oy, num oz]) native;
+
+ @DomName('DOMMatrix.scaleNonUniformSelf')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix scaleNonUniformSelf(num sx, [num sy, num sz, num ox, num oy, num oz]) native;
+
+ @DomName('DOMMatrix.scaleSelf')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix scaleSelf(num scale, [num ox, num oy]) native;
+
+ @DomName('DOMMatrix.translateSelf')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix translateSelf(num tx, num ty, [num tz]) native;
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -8921,6 +9017,41 @@
@DocsEditable()
@Experimental() // untriaged
final double m44;
+
+ @DomName('DOMMatrixReadOnly.multiply')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix multiply(DomMatrix other) native;
+
+ @DomName('DOMMatrixReadOnly.scale')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix scale(num scale, [num ox, num oy]) native;
+
+ @DomName('DOMMatrixReadOnly.scale3d')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix scale3d(num scale, [num ox, num oy, num oz]) native;
+
+ @DomName('DOMMatrixReadOnly.scaleNonUniform')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix scaleNonUniform(num sx, [num sy, num sz, num ox, num oy, num oz]) native;
+
+ @DomName('DOMMatrixReadOnly.toFloat32Array')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Float32List toFloat32Array() native;
+
+ @DomName('DOMMatrixReadOnly.toFloat64Array')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Float64List toFloat64Array() native;
+
+ @DomName('DOMMatrixReadOnly.translate')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix translate(num tx, num ty, [num tz]) native;
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -8984,6 +9115,9 @@
static DomPoint _create_4(point_OR_x, y, z) => JS('DomPoint', 'new DOMPoint(#,#,#)', point_OR_x, y, z);
static DomPoint _create_5(point_OR_x, y, z, w) => JS('DomPoint', 'new DOMPoint(#,#,#,#)', point_OR_x, y, z, w);
+ /// Checks if this type is supported on the current platform.
+ static bool get supported => JS('bool', '!!(window.DOMPoint) || !!(window.WebKitPoint)');
+
// Shadowing definition.
num get w => JS("num", "#.w", this);
@@ -12334,6 +12468,11 @@
@DocsEditable()
String contentEditable;
+ @DomName('Element.contextMenu')
+ @DocsEditable()
+ @Experimental() // untriaged
+ MenuElement contextMenu;
+
@DomName('Element.dir')
@DocsEditable()
String dir;
@@ -12514,12 +12653,12 @@
@JSName('scrollLeft')
@DomName('Element.scrollLeft')
@DocsEditable()
- int _scrollLeft;
+ num _scrollLeft;
@JSName('scrollTop')
@DomName('Element.scrollTop')
@DocsEditable()
- int _scrollTop;
+ num _scrollTop;
@JSName('scrollWidth')
@DomName('Element.scrollWidth')
@@ -13711,11 +13850,11 @@
@Experimental() // stable
@Native("EventSource")
class EventSource extends EventTarget {
- factory EventSource(String title, {withCredentials: false}) {
+ factory EventSource(String url, {withCredentials: false}) {
var parsedOptions = {
'withCredentials': withCredentials,
};
- return EventSource._factoryEventSource(title, parsedOptions);
+ return EventSource._factoryEventSource(url, parsedOptions);
}
// To suppress missing implicit constructor warnings.
factory EventSource._() { throw new UnsupportedError("Not supported"); }
@@ -13951,6 +14090,24 @@
@DocsEditable()
+@DomName('ExtendableEvent')
+@Experimental() // untriaged
+@Native("ExtendableEvent")
+class ExtendableEvent extends Event {
+ // To suppress missing implicit constructor warnings.
+ factory ExtendableEvent._() { throw new UnsupportedError("Not supported"); }
+
+ @DomName('ExtendableEvent.waitUntil')
+ @DocsEditable()
+ @Experimental() // untriaged
+ void waitUntil(Object value) native;
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable()
@DomName('FederatedCredential')
@Experimental() // untriaged
@Native("FederatedCredential")
@@ -13976,40 +14133,6 @@
@DocsEditable()
-@DomName('FetchBodyStream')
-@Experimental() // untriaged
-@Native("FetchBodyStream")
-class FetchBodyStream extends Interceptor {
- // To suppress missing implicit constructor warnings.
- factory FetchBodyStream._() { throw new UnsupportedError("Not supported"); }
-
- @DomName('FetchBodyStream.asArrayBuffer')
- @DocsEditable()
- @Experimental() // untriaged
- Future asArrayBuffer() native;
-
- @DomName('FetchBodyStream.asBlob')
- @DocsEditable()
- @Experimental() // untriaged
- Future asBlob() native;
-
- @JSName('asJSON')
- @DomName('FetchBodyStream.asJSON')
- @DocsEditable()
- @Experimental() // untriaged
- Future asJson() native;
-
- @DomName('FetchBodyStream.asText')
- @DocsEditable()
- @Experimental() // untriaged
- Future asText() native;
-}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-@DocsEditable()
@DomName('FetchEvent')
@Experimental() // untriaged
@Native("FetchEvent")
@@ -14840,7 +14963,7 @@
@DomName('FontFaceSet.check')
@DocsEditable()
@Experimental() // untriaged
- bool check(String font, String text) native;
+ bool check(String font, [String text]) native;
@DomName('FontFaceSet.clear')
@DocsEditable()
@@ -18510,7 +18633,7 @@
@DomName('InstallEvent')
@Experimental() // untriaged
@Native("InstallEvent")
-class InstallEvent extends InstallPhaseEvent {
+class InstallEvent extends ExtendableEvent {
// To suppress missing implicit constructor warnings.
factory InstallEvent._() { throw new UnsupportedError("Not supported"); }
@@ -18529,24 +18652,6 @@
// BSD-style license that can be found in the LICENSE file.
-@DocsEditable()
-@DomName('InstallPhaseEvent')
-@Experimental() // untriaged
-@Native("InstallPhaseEvent")
-class InstallPhaseEvent extends Event {
- // To suppress missing implicit constructor warnings.
- factory InstallPhaseEvent._() { throw new UnsupportedError("Not supported"); }
-
- @DomName('InstallPhaseEvent.waitUntil')
- @DocsEditable()
- @Experimental() // untriaged
- void waitUntil(Object value) native;
-}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
/**
* An event that describes user interaction with the keyboard.
*
@@ -19477,7 +19582,7 @@
@DomName('HTMLMediaElement.setMediaKeys')
@DocsEditable()
@Experimental() // untriaged
- void setMediaKeys(MediaKeys mediaKeys) native;
+ Future setMediaKeys(MediaKeys mediaKeys) native;
@JSName('webkitAddKey')
@DomName('HTMLMediaElement.webkitAddKey')
@@ -19740,6 +19845,11 @@
@DocsEditable()
final String sessionId;
+ @DomName('MediaKeySession.generateRequest')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future generateRequest(String initDataType, initData) native;
+
@DomName('MediaKeySession.release')
@DocsEditable()
@Experimental() // untriaged
@@ -19776,7 +19886,7 @@
@JSName('createSession')
@DomName('MediaKeys.createSession')
@DocsEditable()
- Future _createSession(String initDataType, initData, [String sessionType]) native;
+ MediaKeySession _createSession([String sessionType]) native;
@DomName('MediaKeys.isTypeSupported')
@DocsEditable()
@@ -19825,10 +19935,15 @@
@DomName('MediaQueryList')
@Unstable()
@Native("MediaQueryList")
-class MediaQueryList extends Interceptor {
+class MediaQueryList extends EventTarget {
// To suppress missing implicit constructor warnings.
factory MediaQueryList._() { throw new UnsupportedError("Not supported"); }
+ @DomName('MediaQueryList.changeEvent')
+ @DocsEditable()
+ @Experimental() // untriaged
+ static const EventStreamProvider<Event> changeEvent = const EventStreamProvider<Event>('change');
+
@DomName('MediaQueryList.matches')
@DocsEditable()
final bool matches;
@@ -19836,6 +19951,42 @@
@DomName('MediaQueryList.media')
@DocsEditable()
final String media;
+
+ @DomName('MediaQueryList.addListener')
+ @DocsEditable()
+ void addListener(EventListener listener) native;
+
+ @DomName('MediaQueryList.removeListener')
+ @DocsEditable()
+ void removeListener(EventListener listener) native;
+
+ @DomName('MediaQueryList.onchange')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Stream<Event> get onChange => changeEvent.forTarget(this);
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable()
+@DomName('MediaQueryListEvent')
+@Experimental() // untriaged
+@Native("MediaQueryListEvent")
+class MediaQueryListEvent extends Event {
+ // To suppress missing implicit constructor warnings.
+ factory MediaQueryListEvent._() { throw new UnsupportedError("Not supported"); }
+
+ @DomName('MediaQueryListEvent.matches')
+ @DocsEditable()
+ @Experimental() // untriaged
+ final bool matches;
+
+ @DomName('MediaQueryListEvent.media')
+ @DocsEditable()
+ @Experimental() // untriaged
+ final String media;
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -20622,19 +20773,19 @@
@DocsEditable()
static const EventStreamProvider<MidiConnectionEvent> disconnectEvent = const EventStreamProvider<MidiConnectionEvent>('disconnect');
+ @DomName('MIDIAccess.inputs')
+ @DocsEditable()
+ final MidiInputMap inputs;
+
+ @DomName('MIDIAccess.outputs')
+ @DocsEditable()
+ final MidiOutputMap outputs;
+
@DomName('MIDIAccess.sysexEnabled')
@DocsEditable()
@Experimental() // untriaged
final bool sysexEnabled;
- @DomName('MIDIAccess.inputs')
- @DocsEditable()
- List<MidiInput> inputs() native;
-
- @DomName('MIDIAccess.outputs')
- @DocsEditable()
- List<MidiOutput> outputs() native;
-
/// Stream of `connect` events handled by this [MidiAccess].
@DomName('MIDIAccess.onconnect')
@DocsEditable()
@@ -20698,6 +20849,49 @@
@DocsEditable()
+@DomName('MIDIInputMap')
+@Experimental() // untriaged
+@Native("MIDIInputMap")
+class MidiInputMap extends Interceptor {
+ // To suppress missing implicit constructor warnings.
+ factory MidiInputMap._() { throw new UnsupportedError("Not supported"); }
+
+ @DomName('MIDIInputMap.size')
+ @DocsEditable()
+ @Experimental() // untriaged
+ final int size;
+
+ @DomName('MIDIInputMap.entries')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomIterator entries() native;
+
+ @DomName('MIDIInputMap.get')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Object get(String id) native;
+
+ @DomName('MIDIInputMap.has')
+ @DocsEditable()
+ @Experimental() // untriaged
+ bool has(String key) native;
+
+ @DomName('MIDIInputMap.keys')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomIterator keys() native;
+
+ @DomName('MIDIInputMap.values')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomIterator values() native;
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable()
@DomName('MIDIMessageEvent')
// http://webaudio.github.io/web-midi-api/#midimessageevent-interface
@Experimental()
@@ -20738,6 +20932,49 @@
@DocsEditable()
+@DomName('MIDIOutputMap')
+@Experimental() // untriaged
+@Native("MIDIOutputMap")
+class MidiOutputMap extends Interceptor {
+ // To suppress missing implicit constructor warnings.
+ factory MidiOutputMap._() { throw new UnsupportedError("Not supported"); }
+
+ @DomName('MIDIOutputMap.size')
+ @DocsEditable()
+ @Experimental() // untriaged
+ final int size;
+
+ @DomName('MIDIOutputMap.entries')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomIterator entries() native;
+
+ @DomName('MIDIOutputMap.get')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Object get(String id) native;
+
+ @DomName('MIDIOutputMap.has')
+ @DocsEditable()
+ @Experimental() // untriaged
+ bool has(String key) native;
+
+ @DomName('MIDIOutputMap.keys')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomIterator keys() native;
+
+ @DomName('MIDIOutputMap.values')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomIterator values() native;
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable()
@DomName('MIDIPort')
// http://webaudio.github.io/web-midi-api/#idl-def-MIDIPort
@Experimental()
@@ -21395,6 +21632,11 @@
@Experimental() // nonstandard
final MimeTypeArray mimeTypes;
+ @DomName('Navigator.presentation')
+ @DocsEditable()
+ @Experimental() // untriaged
+ final Presentation presentation;
+
@DomName('Navigator.productSub')
@DocsEditable()
@Unstable()
@@ -23627,6 +23869,35 @@
@DocsEditable()
+@DomName('PluginPlaceholderElement')
+@Experimental() // untriaged
+@Native("PluginPlaceholderElement")
+class PluginPlaceholderElement extends DivElement {
+ // To suppress missing implicit constructor warnings.
+ factory PluginPlaceholderElement._() { throw new UnsupportedError("Not supported"); }
+ /**
+ * Constructor instantiated by the DOM when a custom element has been created.
+ *
+ * This can only be called by subclasses from their created constructor.
+ */
+ PluginPlaceholderElement.created() : super.created();
+
+ @DomName('PluginPlaceholderElement.message')
+ @DocsEditable()
+ @Experimental() // untriaged
+ String message;
+
+ @DomName('PluginPlaceholderElement.createdCallback')
+ @DocsEditable()
+ @Experimental() // untriaged
+ void createdCallback() native;
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable()
@DomName('PopStateEvent')
@SupportedBrowser(SupportedBrowser.CHROME)
@SupportedBrowser(SupportedBrowser.FIREFOX)
@@ -23728,6 +23999,19 @@
@DocsEditable()
+@DomName('Presentation')
+@Experimental() // untriaged
+@Native("Presentation")
+class Presentation extends EventTarget {
+ // To suppress missing implicit constructor warnings.
+ factory Presentation._() { throw new UnsupportedError("Not supported"); }
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable()
@DomName('ProcessingInstruction')
@Unstable()
@Native("ProcessingInstruction")
@@ -24024,6 +24308,11 @@
@DocsEditable()
void collapse([bool toStart]) native;
+ @DomName('Range.compareBoundaryPoints')
+ @DocsEditable()
+ @Experimental() // untriaged
+ int compareBoundaryPoints(int how, Range sourceRange) native;
+
@DomName('Range.comparePoint')
@DocsEditable()
int comparePoint(Node refNode, int offset) native;
@@ -24126,6 +24415,31 @@
class ReadableStream extends Interceptor {
// To suppress missing implicit constructor warnings.
factory ReadableStream._() { throw new UnsupportedError("Not supported"); }
+
+ @DomName('ReadableStream.closed')
+ @DocsEditable()
+ @Experimental() // untriaged
+ final Future closed;
+
+ @DomName('ReadableStream.state')
+ @DocsEditable()
+ @Experimental() // untriaged
+ final String state;
+
+ @DomName('ReadableStream.cancel')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future cancel(Object reason) native;
+
+ @DomName('ReadableStream.read')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Object read() native;
+
+ @DomName('ReadableStream.wait')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future wait() native;
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -25454,10 +25768,26 @@
// To suppress missing implicit constructor warnings.
factory ServiceWorkerClients._() { throw new UnsupportedError("Not supported"); }
- @DomName('ServiceWorkerClients.getServiced')
+ @DomName('ServiceWorkerClients.getAll')
@DocsEditable()
@Experimental() // untriaged
- Future getServiced() native;
+ Future getAll([Map options]) {
+ if (options != null) {
+ var options_1 = convertDartToNative_Dictionary(options);
+ return _getAll_1(options_1);
+ }
+ return _getAll_2();
+ }
+ @JSName('getAll')
+ @DomName('ServiceWorkerClients.getAll')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future _getAll_1(options) native;
+ @JSName('getAll')
+ @DomName('ServiceWorkerClients.getAll')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future _getAll_2() native;
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -25472,30 +25802,20 @@
// To suppress missing implicit constructor warnings.
factory ServiceWorkerContainer._() { throw new UnsupportedError("Not supported"); }
- @DomName('ServiceWorkerContainer.active')
- @DocsEditable()
- @Experimental() // untriaged
- final _ServiceWorker active;
-
@DomName('ServiceWorkerContainer.controller')
@DocsEditable()
@Experimental() // untriaged
final _ServiceWorker controller;
- @DomName('ServiceWorkerContainer.installing')
- @DocsEditable()
- @Experimental() // untriaged
- final _ServiceWorker installing;
-
@DomName('ServiceWorkerContainer.ready')
@DocsEditable()
@Experimental() // untriaged
final Future ready;
- @DomName('ServiceWorkerContainer.waiting')
+ @DomName('ServiceWorkerContainer.getRegistration')
@DocsEditable()
@Experimental() // untriaged
- final _ServiceWorker waiting;
+ Future getRegistration([String documentURL]) native;
@DomName('ServiceWorkerContainer.register')
@DocsEditable()
@@ -25517,11 +25837,6 @@
@DocsEditable()
@Experimental() // untriaged
Future _register_2(url) native;
-
- @DomName('ServiceWorkerContainer.unregister')
- @DocsEditable()
- @Experimental() // untriaged
- Future unregister([String scope]) native;
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -25541,16 +25856,16 @@
@Experimental() // untriaged
static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
+ @DomName('ServiceWorkerGlobalScope.caches')
+ @DocsEditable()
+ @Experimental() // untriaged
+ final CacheStorage caches;
+
@DomName('ServiceWorkerGlobalScope.clients')
@DocsEditable()
@Experimental() // untriaged
final ServiceWorkerClients clients;
- @DomName('ServiceWorkerGlobalScope.nativeCaches')
- @DocsEditable()
- @Experimental() // untriaged
- final CacheStorage nativeCaches;
-
@DomName('ServiceWorkerGlobalScope.scope')
@DocsEditable()
@Experimental() // untriaged
@@ -30159,7 +30474,7 @@
* convertPointFromNodeToPage and convertPointFromPageToNode are removed.
* see http://dev.w3.org/csswg/cssom-view/#geometry
*/
- static bool get supportsPointConversions => _DomPoint.supported;
+ static bool get supportsPointConversions => DomPoint.supported;
// To suppress missing implicit constructor warnings.
factory Window._() { throw new UnsupportedError("Not supported"); }
@@ -31098,14 +31413,26 @@
*/
@DomName('Window.scroll')
@DocsEditable()
- void scroll(int x, int y, [Map scrollOptions]) {
- if (scrollOptions != null) {
- var scrollOptions_1 = convertDartToNative_Dictionary(scrollOptions);
- _scroll_1(x, y, scrollOptions_1);
+ void scroll(x, y, [Map scrollOptions]) {
+ if ((y is num) && (x is num) && scrollOptions == null) {
+ _scroll_1(x, y);
return;
}
- _scroll_2(x, y);
- return;
+ if (scrollOptions != null && (y is num) && (x is num)) {
+ var scrollOptions_1 = convertDartToNative_Dictionary(scrollOptions);
+ _scroll_2(x, y, scrollOptions_1);
+ return;
+ }
+ if ((y is int) && (x is int) && scrollOptions == null) {
+ _scroll_3(x, y);
+ return;
+ }
+ if (scrollOptions != null && (y is int) && (x is int)) {
+ var scrollOptions_2 = convertDartToNative_Dictionary(scrollOptions);
+ _scroll_4(x, y, scrollOptions_2);
+ return;
+ }
+ throw new ArgumentError("Incorrect number or type of arguments");
}
@JSName('scroll')
/**
@@ -31120,7 +31447,7 @@
*/
@DomName('Window.scroll')
@DocsEditable()
- void _scroll_1(x, y, scrollOptions) native;
+ void _scroll_1(num x, num y) native;
@JSName('scroll')
/**
* Scrolls the page horizontally and vertically to a specific point.
@@ -31134,7 +31461,35 @@
*/
@DomName('Window.scroll')
@DocsEditable()
- void _scroll_2(x, y) native;
+ void _scroll_2(num x, num y, scrollOptions) native;
+ @JSName('scroll')
+ /**
+ * Scrolls the page horizontally and vertically to a specific point.
+ *
+ * This method is identical to [scrollTo].
+ *
+ * ## Other resources
+ *
+ * * [Window scroll] (http://docs.webplatform.org/wiki/dom/methods/scroll)
+ * from WebPlatform.org.
+ */
+ @DomName('Window.scroll')
+ @DocsEditable()
+ void _scroll_3(int x, int y) native;
+ @JSName('scroll')
+ /**
+ * Scrolls the page horizontally and vertically to a specific point.
+ *
+ * This method is identical to [scrollTo].
+ *
+ * ## Other resources
+ *
+ * * [Window scroll] (http://docs.webplatform.org/wiki/dom/methods/scroll)
+ * from WebPlatform.org.
+ */
+ @DomName('Window.scroll')
+ @DocsEditable()
+ void _scroll_4(int x, int y, scrollOptions) native;
/**
* Scrolls the page horizontally and vertically by an offset.
@@ -31146,14 +31501,26 @@
*/
@DomName('Window.scrollBy')
@DocsEditable()
- void scrollBy(int x, int y, [Map scrollOptions]) {
- if (scrollOptions != null) {
- var scrollOptions_1 = convertDartToNative_Dictionary(scrollOptions);
- _scrollBy_1(x, y, scrollOptions_1);
+ void scrollBy(x, y, [Map scrollOptions]) {
+ if ((y is num) && (x is num) && scrollOptions == null) {
+ _scrollBy_1(x, y);
return;
}
- _scrollBy_2(x, y);
- return;
+ if (scrollOptions != null && (y is num) && (x is num)) {
+ var scrollOptions_1 = convertDartToNative_Dictionary(scrollOptions);
+ _scrollBy_2(x, y, scrollOptions_1);
+ return;
+ }
+ if ((y is int) && (x is int) && scrollOptions == null) {
+ _scrollBy_3(x, y);
+ return;
+ }
+ if (scrollOptions != null && (y is int) && (x is int)) {
+ var scrollOptions_2 = convertDartToNative_Dictionary(scrollOptions);
+ _scrollBy_4(x, y, scrollOptions_2);
+ return;
+ }
+ throw new ArgumentError("Incorrect number or type of arguments");
}
@JSName('scrollBy')
/**
@@ -31166,7 +31533,7 @@
*/
@DomName('Window.scrollBy')
@DocsEditable()
- void _scrollBy_1(x, y, scrollOptions) native;
+ void _scrollBy_1(num x, num y) native;
@JSName('scrollBy')
/**
* Scrolls the page horizontally and vertically by an offset.
@@ -31178,7 +31545,31 @@
*/
@DomName('Window.scrollBy')
@DocsEditable()
- void _scrollBy_2(x, y) native;
+ void _scrollBy_2(num x, num y, scrollOptions) native;
+ @JSName('scrollBy')
+ /**
+ * Scrolls the page horizontally and vertically by an offset.
+ *
+ * ## Other resources
+ *
+ * * [Window scrollBy] (http://docs.webplatform.org/wiki/dom/methods/scrollBy)
+ * from WebPlatform.org.
+ */
+ @DomName('Window.scrollBy')
+ @DocsEditable()
+ void _scrollBy_3(int x, int y) native;
+ @JSName('scrollBy')
+ /**
+ * Scrolls the page horizontally and vertically by an offset.
+ *
+ * ## Other resources
+ *
+ * * [Window scrollBy] (http://docs.webplatform.org/wiki/dom/methods/scrollBy)
+ * from WebPlatform.org.
+ */
+ @DomName('Window.scrollBy')
+ @DocsEditable()
+ void _scrollBy_4(int x, int y, scrollOptions) native;
/**
* Scrolls the page horizontally and vertically to a specific point.
@@ -31192,14 +31583,26 @@
*/
@DomName('Window.scrollTo')
@DocsEditable()
- void scrollTo(int x, int y, [Map scrollOptions]) {
- if (scrollOptions != null) {
- var scrollOptions_1 = convertDartToNative_Dictionary(scrollOptions);
- _scrollTo_1(x, y, scrollOptions_1);
+ void scrollTo(x, y, [Map scrollOptions]) {
+ if ((y is num) && (x is num) && scrollOptions == null) {
+ _scrollTo_1(x, y);
return;
}
- _scrollTo_2(x, y);
- return;
+ if (scrollOptions != null && (y is num) && (x is num)) {
+ var scrollOptions_1 = convertDartToNative_Dictionary(scrollOptions);
+ _scrollTo_2(x, y, scrollOptions_1);
+ return;
+ }
+ if ((y is int) && (x is int) && scrollOptions == null) {
+ _scrollTo_3(x, y);
+ return;
+ }
+ if (scrollOptions != null && (y is int) && (x is int)) {
+ var scrollOptions_2 = convertDartToNative_Dictionary(scrollOptions);
+ _scrollTo_4(x, y, scrollOptions_2);
+ return;
+ }
+ throw new ArgumentError("Incorrect number or type of arguments");
}
@JSName('scrollTo')
/**
@@ -31214,7 +31617,7 @@
*/
@DomName('Window.scrollTo')
@DocsEditable()
- void _scrollTo_1(x, y, scrollOptions) native;
+ void _scrollTo_1(num x, num y) native;
@JSName('scrollTo')
/**
* Scrolls the page horizontally and vertically to a specific point.
@@ -31228,7 +31631,35 @@
*/
@DomName('Window.scrollTo')
@DocsEditable()
- void _scrollTo_2(x, y) native;
+ void _scrollTo_2(num x, num y, scrollOptions) native;
+ @JSName('scrollTo')
+ /**
+ * Scrolls the page horizontally and vertically to a specific point.
+ *
+ * This method is identical to [scroll].
+ *
+ * ## Other resources
+ *
+ * * [Window scrollTo] (http://docs.webplatform.org/wiki/dom/methods/scrollTo)
+ * from WebPlatform.org.
+ */
+ @DomName('Window.scrollTo')
+ @DocsEditable()
+ void _scrollTo_3(int x, int y) native;
+ @JSName('scrollTo')
+ /**
+ * Scrolls the page horizontally and vertically to a specific point.
+ *
+ * This method is identical to [scroll].
+ *
+ * ## Other resources
+ *
+ * * [Window scrollTo] (http://docs.webplatform.org/wiki/dom/methods/scrollTo)
+ * from WebPlatform.org.
+ */
+ @DomName('Window.scrollTo')
+ @DocsEditable()
+ void _scrollTo_4(int x, int y, scrollOptions) native;
/**
* Opens a new page as a modal dialog.
@@ -32104,16 +32535,6 @@
@Experimental() // untriaged
void importScripts(String urls) native;
- @DomName('WorkerGlobalScope.openDatabase')
- @DocsEditable()
- @Experimental() // untriaged
- SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
-
- @DomName('WorkerGlobalScope.openDatabaseSync')
- @DocsEditable()
- @Experimental() // untriaged
- _DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
-
@JSName('webkitRequestFileSystem')
@DomName('WorkerGlobalScope.webkitRequestFileSystem')
@DocsEditable()
@@ -32986,23 +33407,6 @@
@DocsEditable()
-@DomName('DatabaseSync')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
-// http://www.w3.org/TR/webdatabase/#databasesync
-@deprecated // deprecated
-@Native("DatabaseSync")
-abstract class _DatabaseSync extends Interceptor {
- // To suppress missing implicit constructor warnings.
- factory _DatabaseSync._() { throw new UnsupportedError("Not supported"); }
-}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-@DocsEditable()
@DomName('DirectoryEntrySync')
// http://www.w3.org/TR/file-system-api/#the-directoryentrysync-interface
@Experimental()
@@ -33047,41 +33451,6 @@
@DocsEditable()
-@DomName('WebKitPoint')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
-// http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html
-@Experimental() // non-standard
-@Native("WebKitPoint")
-class _DomPoint extends Interceptor {
- // To suppress missing implicit constructor warnings.
- factory _DomPoint._() { throw new UnsupportedError("Not supported"); }
-
- @DomName('WebKitPoint.WebKitPoint')
- @DocsEditable()
- factory _DomPoint(num x, num y) {
- return _DomPoint._create_1(x, y);
- }
- static _DomPoint _create_1(x, y) => JS('_DomPoint', 'new WebKitPoint(#,#)', x, y);
-
- /// Checks if this type is supported on the current platform.
- static bool get supported => JS('bool', '!!(window.WebKitPoint)');
-
- @DomName('WebKitPoint.x')
- @DocsEditable()
- num x;
-
- @DomName('WebKitPoint.y')
- @DocsEditable()
- num y;
-}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-@DocsEditable()
@DomName('DOMRect')
@Experimental() // untriaged
@Native("DOMRect")
@@ -33531,20 +33900,6 @@
@DocsEditable()
-@DomName('Notation')
-// http://dom.spec.whatwg.org/#notation
-@deprecated // deprecated
-@Native("Notation")
-abstract class _Notation extends Node {
- // To suppress missing implicit constructor warnings.
- factory _Notation._() { throw new UnsupportedError("Not supported"); }
-}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-@DocsEditable()
@DomName('PagePopupController')
@deprecated // nonstandard
@Native("PagePopupController")
@@ -33598,7 +33953,7 @@
@DomName('Request')
@Experimental() // untriaged
@Native("Request")
-class _Request extends Interceptor {
+class _Request extends Body {
// To suppress missing implicit constructor warnings.
factory _Request._() { throw new UnsupportedError("Not supported"); }
@@ -33648,6 +34003,11 @@
@DocsEditable()
@Experimental() // untriaged
final String url;
+
+ @DomName('Request.clone')
+ @DocsEditable()
+ @Experimental() // untriaged
+ _Request clone() native;
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -33658,31 +34018,47 @@
@DomName('Response')
@Experimental() // untriaged
@Native("Response")
-abstract class _Response extends Interceptor {
+abstract class _Response extends Body {
// To suppress missing implicit constructor warnings.
factory _Response._() { throw new UnsupportedError("Not supported"); }
@DomName('Response.Response')
@DocsEditable()
- factory _Response(body, [Map responseInitDict]) {
- if ((body is String || body == null) && responseInitDict == null) {
- return _Response._create_1(body);
+ factory _Response(body_OR_input, [Map requestInitDict_OR_responseInitDict]) {
+ if ((body_OR_input is String || body_OR_input == null) && requestInitDict_OR_responseInitDict == null) {
+ return _Response._create_1(body_OR_input);
}
- if ((responseInitDict is Map || responseInitDict == null) && (body is String || body == null)) {
- return _Response._create_2(body, responseInitDict);
+ if ((requestInitDict_OR_responseInitDict is Map || requestInitDict_OR_responseInitDict == null) && (body_OR_input is String || body_OR_input == null)) {
+ return _Response._create_2(body_OR_input, requestInitDict_OR_responseInitDict);
}
- if ((body is Blob || body == null) && responseInitDict == null) {
- return _Response._create_3(body);
+ if ((body_OR_input is Blob || body_OR_input == null) && requestInitDict_OR_responseInitDict == null) {
+ return _Response._create_3(body_OR_input);
}
- if ((responseInitDict is Map || responseInitDict == null) && (body is Blob || body == null)) {
- return _Response._create_4(body, responseInitDict);
+ if ((requestInitDict_OR_responseInitDict is Map || requestInitDict_OR_responseInitDict == null) && (body_OR_input is Blob || body_OR_input == null)) {
+ return _Response._create_4(body_OR_input, requestInitDict_OR_responseInitDict);
+ }
+ if ((body_OR_input is TypedData || body_OR_input == null) && requestInitDict_OR_responseInitDict == null) {
+ return _Response._create_5(body_OR_input);
+ }
+ if ((requestInitDict_OR_responseInitDict is Map || requestInitDict_OR_responseInitDict == null) && (body_OR_input is TypedData || body_OR_input == null)) {
+ return _Response._create_6(body_OR_input, requestInitDict_OR_responseInitDict);
+ }
+ if ((body_OR_input is ByteBuffer || body_OR_input == null) && requestInitDict_OR_responseInitDict == null) {
+ return _Response._create_7(body_OR_input);
+ }
+ if ((requestInitDict_OR_responseInitDict is Map || requestInitDict_OR_responseInitDict == null) && (body_OR_input is ByteBuffer || body_OR_input == null)) {
+ return _Response._create_8(body_OR_input, requestInitDict_OR_responseInitDict);
}
throw new ArgumentError("Incorrect number or type of arguments");
}
- static _Response _create_1(body) => JS('_Response', 'new Response(#)', body);
- static _Response _create_2(body, responseInitDict) => JS('_Response', 'new Response(#,#)', body, responseInitDict);
- static _Response _create_3(body) => JS('_Response', 'new Response(#)', body);
- static _Response _create_4(body, responseInitDict) => JS('_Response', 'new Response(#,#)', body, responseInitDict);
+ static _Response _create_1(body_OR_input) => JS('_Response', 'new Response(#)', body_OR_input);
+ static _Response _create_2(body_OR_input, requestInitDict_OR_responseInitDict) => JS('_Response', 'new Response(#,#)', body_OR_input, requestInitDict_OR_responseInitDict);
+ static _Response _create_3(body_OR_input) => JS('_Response', 'new Response(#)', body_OR_input);
+ static _Response _create_4(body_OR_input, requestInitDict_OR_responseInitDict) => JS('_Response', 'new Response(#,#)', body_OR_input, requestInitDict_OR_responseInitDict);
+ static _Response _create_5(body_OR_input) => JS('_Response', 'new Response(#)', body_OR_input);
+ static _Response _create_6(body_OR_input, requestInitDict_OR_responseInitDict) => JS('_Response', 'new Response(#,#)', body_OR_input, requestInitDict_OR_responseInitDict);
+ static _Response _create_7(body_OR_input) => JS('_Response', 'new Response(#)', body_OR_input);
+ static _Response _create_8(body_OR_input, requestInitDict_OR_responseInitDict) => JS('_Response', 'new Response(#,#)', body_OR_input, requestInitDict_OR_responseInitDict);
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index bf43c15..2a991bd 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -140,6 +140,7 @@
'BatteryManager': () => BatteryManager,
'BeforeUnloadEvent': () => BeforeUnloadEvent,
'Blob': () => Blob,
+ 'Body': () => Body,
'CDATASection': () => CDataSection,
'CSS': () => Css,
'CSSCharsetRule': () => CssCharsetRule,
@@ -169,7 +170,7 @@
'CanvasRenderingContext2D': () => CanvasRenderingContext2D,
'CharacterData': () => CharacterData,
'ChildNode': () => ChildNode,
- 'CircularRegion': () => CircularRegion,
+ 'CircularGeofencingRegion': () => CircularGeofencingRegion,
'ClientRect': () => _ClientRect,
'ClientRectList': () => _ClientRectList,
'CloseEvent': () => CloseEvent,
@@ -203,7 +204,6 @@
'DataTransfer': () => DataTransfer,
'DataTransferItem': () => DataTransferItem,
'DataTransferItemList': () => DataTransferItemList,
- 'DatabaseSync': () => _DatabaseSync,
'DedicatedWorkerGlobalScope': () => DedicatedWorkerGlobalScope,
'DeprecatedStorageInfo': () => DeprecatedStorageInfo,
'DeprecatedStorageQuota': () => DeprecatedStorageQuota,
@@ -226,8 +226,8 @@
'Event': () => Event,
'EventSource': () => EventSource,
'EventTarget': () => EventTarget,
+ 'ExtendableEvent': () => ExtendableEvent,
'FederatedCredential': () => FederatedCredential,
- 'FetchBodyStream': () => FetchBodyStream,
'FetchEvent': () => FetchEvent,
'File': () => File,
'FileEntry': () => FileEntry,
@@ -338,15 +338,17 @@
'InjectedScriptHost': () => InjectedScriptHost,
'InputMethodContext': () => InputMethodContext,
'InstallEvent': () => InstallEvent,
- 'InstallPhaseEvent': () => InstallPhaseEvent,
+ 'Iterator': () => DomIterator,
'KeyboardEvent': () => KeyboardEvent,
'LocalCredential': () => LocalCredential,
'Location': () => Location,
'MIDIAccess': () => MidiAccess,
'MIDIConnectionEvent': () => MidiConnectionEvent,
'MIDIInput': () => MidiInput,
+ 'MIDIInputMap': () => MidiInputMap,
'MIDIMessageEvent': () => MidiMessageEvent,
'MIDIOutput': () => MidiOutput,
+ 'MIDIOutputMap': () => MidiOutputMap,
'MIDIPort': () => MidiPort,
'MediaController': () => MediaController,
'MediaDeviceInfo': () => MediaDeviceInfo,
@@ -359,6 +361,7 @@
'MediaKeys': () => MediaKeys,
'MediaList': () => MediaList,
'MediaQueryList': () => MediaQueryList,
+ 'MediaQueryListEvent': () => MediaQueryListEvent,
'MediaSource': () => MediaSource,
'MediaStream': () => MediaStream,
'MediaStreamEvent': () => MediaStreamEvent,
@@ -387,7 +390,6 @@
'NodeFilter': () => NodeFilter,
'NodeIterator': () => NodeIterator,
'NodeList': () => NodeList,
- 'Notation': () => _Notation,
'Notification': () => Notification,
'OverflowEvent': () => OverflowEvent,
'PagePopupController': () => _PagePopupController,
@@ -403,8 +405,10 @@
'PerformanceTiming': () => PerformanceTiming,
'Plugin': () => Plugin,
'PluginArray': () => PluginArray,
+ 'PluginPlaceholderElement': () => PluginPlaceholderElement,
'PopStateEvent': () => PopStateEvent,
'PositionError': () => PositionError,
+ 'Presentation': () => Presentation,
'ProcessingInstruction': () => ProcessingInstruction,
'ProgressEvent': () => ProgressEvent,
'PushEvent': () => PushEvent,
@@ -497,7 +501,6 @@
'WebKitCSSFilterValue': () => _WebKitCSSFilterValue,
'WebKitCSSMatrix': () => _WebKitCSSMatrix,
'WebKitCSSTransformValue': () => _WebKitCSSTransformValue,
- 'WebKitPoint': () => _DomPoint,
'WebSocket': () => WebSocket,
'WheelEvent': () => WheelEvent,
'Window': () => Window,
@@ -958,15 +961,10 @@
@Experimental() // untriaged
void set currentTime(num value) => _blink.BlinkAnimationPlayer.instance.currentTime_Setter_(this, value);
- @DomName('AnimationPlayer.finished')
+ @DomName('AnimationPlayer.playState')
@DocsEditable()
@Experimental() // untriaged
- bool get finished => _blink.BlinkAnimationPlayer.instance.finished_Getter_(this);
-
- @DomName('AnimationPlayer.paused')
- @DocsEditable()
- @Experimental() // untriaged
- bool get paused => _blink.BlinkAnimationPlayer.instance.paused_Getter_(this);
+ String get playState => _blink.BlinkAnimationPlayer.instance.playState_Getter_(this);
@DomName('AnimationPlayer.playbackRate')
@DocsEditable()
@@ -1781,6 +1779,46 @@
@DocsEditable()
+@DomName('Body')
+@Experimental() // untriaged
+class Body extends NativeFieldWrapperClass2 {
+ // To suppress missing implicit constructor warnings.
+ factory Body._() { throw new UnsupportedError("Not supported"); }
+
+ @DomName('Body.bodyUsed')
+ @DocsEditable()
+ @Experimental() // untriaged
+ bool get bodyUsed => _blink.BlinkBody.instance.bodyUsed_Getter_(this);
+
+ @DomName('Body.arrayBuffer')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future arrayBuffer() => _blink.BlinkBody.instance.arrayBuffer_Callback_0_(this);
+
+ @DomName('Body.blob')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future blob() => _blink.BlinkBody.instance.blob_Callback_0_(this);
+
+ @DomName('Body.json')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future json() => _blink.BlinkBody.instance.json_Callback_0_(this);
+
+ @DomName('Body.text')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future text() => _blink.BlinkBody.instance.text_Callback_0_(this);
+
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable()
@DomName('HTMLBodyElement')
class BodyElement extends HtmlElement implements WindowEventHandlers {
// To suppress missing implicit constructor warnings.
@@ -2467,6 +2505,11 @@
// To suppress missing implicit constructor warnings.
factory CanvasPattern._() { throw new UnsupportedError("Not supported"); }
+ @DomName('CanvasPattern.setTransform')
+ @DocsEditable()
+ @Experimental() // untriaged
+ void setTransform(Matrix transform) => _blink.BlinkCanvasPattern.instance.setTransform_Callback_1_(this, transform);
+
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -2497,6 +2540,16 @@
@Experimental() // untriaged
void set currentTransform(Matrix value) => _blink.BlinkCanvasRenderingContext2D.instance.currentTransform_Setter_(this, value);
+ @DomName('CanvasRenderingContext2D.direction')
+ @DocsEditable()
+ @Experimental() // untriaged
+ String get direction => _blink.BlinkCanvasRenderingContext2D.instance.direction_Getter_(this);
+
+ @DomName('CanvasRenderingContext2D.direction')
+ @DocsEditable()
+ @Experimental() // untriaged
+ void set direction(String value) => _blink.BlinkCanvasRenderingContext2D.instance.direction_Setter_(this, value);
+
@DomName('CanvasRenderingContext2D.fillStyle')
@DocsEditable()
Object get fillStyle => _blink.BlinkCanvasRenderingContext2D.instance.fillStyle_Getter_(this);
@@ -3325,42 +3378,42 @@
@DocsEditable()
-@DomName('CircularRegion')
+@DomName('CircularGeofencingRegion')
@Experimental() // untriaged
-class CircularRegion extends GeofencingRegion {
+class CircularGeofencingRegion extends GeofencingRegion {
// To suppress missing implicit constructor warnings.
- factory CircularRegion._() { throw new UnsupportedError("Not supported"); }
+ factory CircularGeofencingRegion._() { throw new UnsupportedError("Not supported"); }
- @DomName('CircularRegion.CircularRegion')
+ @DomName('CircularGeofencingRegion.CircularGeofencingRegion')
@DocsEditable()
- factory CircularRegion(Map init) {
- return _blink.BlinkCircularRegion.instance.constructorCallback_1_(init);
+ factory CircularGeofencingRegion(Map init) {
+ return _blink.BlinkCircularGeofencingRegion.instance.constructorCallback_1_(init);
}
- @DomName('CircularRegion.MAX_RADIUS')
+ @DomName('CircularGeofencingRegion.MAX_RADIUS')
@DocsEditable()
@Experimental() // untriaged
static const num MAX_RADIUS = 100.0;
- @DomName('CircularRegion.MIN_RADIUS')
+ @DomName('CircularGeofencingRegion.MIN_RADIUS')
@DocsEditable()
@Experimental() // untriaged
static const num MIN_RADIUS = 1.0;
- @DomName('CircularRegion.latitude')
+ @DomName('CircularGeofencingRegion.latitude')
@DocsEditable()
@Experimental() // untriaged
- double get latitude => _blink.BlinkCircularRegion.instance.latitude_Getter_(this);
+ double get latitude => _blink.BlinkCircularGeofencingRegion.instance.latitude_Getter_(this);
- @DomName('CircularRegion.longitude')
+ @DomName('CircularGeofencingRegion.longitude')
@DocsEditable()
@Experimental() // untriaged
- double get longitude => _blink.BlinkCircularRegion.instance.longitude_Getter_(this);
+ double get longitude => _blink.BlinkCircularGeofencingRegion.instance.longitude_Getter_(this);
- @DomName('CircularRegion.radius')
+ @DomName('CircularGeofencingRegion.radius')
@DocsEditable()
@Experimental() // untriaged
- double get radius => _blink.BlinkCircularRegion.instance.radius_Getter_(this);
+ double get radius => _blink.BlinkCircularGeofencingRegion.instance.radius_Getter_(this);
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
@@ -3732,19 +3785,15 @@
// To suppress missing implicit constructor warnings.
factory CredentialsContainer._() { throw new UnsupportedError("Not supported"); }
- Future notifyFailedSignIn([Credential credential]) {
- if (credential != null) {
- return _blink.BlinkCredentialsContainer.instance.notifyFailedSignIn_Callback_1_(this, credential);
- }
- return _blink.BlinkCredentialsContainer.instance.notifyFailedSignIn_Callback_0_(this);
- }
+ @DomName('CredentialsContainer.notifyFailedSignIn')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future notifyFailedSignIn(Credential credential) => _blink.BlinkCredentialsContainer.instance.notifyFailedSignIn_Callback_1_(this, credential);
- Future notifySignedIn([Credential credential]) {
- if (credential != null) {
- return _blink.BlinkCredentialsContainer.instance.notifySignedIn_Callback_1_(this, credential);
- }
- return _blink.BlinkCredentialsContainer.instance.notifySignedIn_Callback_0_(this);
- }
+ @DomName('CredentialsContainer.notifySignedIn')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future notifySignedIn(Credential credential) => _blink.BlinkCredentialsContainer.instance.notifySignedIn_Callback_1_(this, credential);
@DomName('CredentialsContainer.notifySignedOut')
@DocsEditable()
@@ -7847,7 +7896,7 @@
@DomName('DatabaseCallback')
// http://www.w3.org/TR/webdatabase/#databasecallback
@Experimental() // deprecated
-typedef void DatabaseCallback(database);
+typedef void DatabaseCallback(SqlDatabase database);
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
@@ -8767,6 +8816,11 @@
@DocsEditable()
String queryCommandValue(String command) => _blink.BlinkDocument.instance.queryCommandValue_Callback_1_(this, command);
+ @DomName('Document.transformDocumentToTreeView')
+ @DocsEditable()
+ @Experimental() // untriaged
+ void transformDocumentToTreeView(String noStyleMessage) => _blink.BlinkDocument.instance.transformDocumentToTreeView_Callback_1_(this, noStyleMessage);
+
@DomName('Document.webkitExitFullscreen')
@DocsEditable()
@SupportedBrowser(SupportedBrowser.CHROME)
@@ -9518,6 +9572,28 @@
@DocsEditable()
+@DomName('Iterator')
+@Experimental() // untriaged
+class DomIterator extends NativeFieldWrapperClass2 {
+ // To suppress missing implicit constructor warnings.
+ factory DomIterator._() { throw new UnsupportedError("Not supported"); }
+
+ Object next([Object value]) {
+ if (value != null) {
+ return _blink.BlinkIterator.instance.next_Callback_1_(this, value);
+ }
+ return _blink.BlinkIterator.instance.next_Callback_0_(this);
+ }
+
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable()
@DomName('DOMMatrix')
@Experimental() // untriaged
class DomMatrix extends DomMatrixReadOnly {
@@ -9756,6 +9832,65 @@
@Experimental() // untriaged
void set m44(num value) => _blink.BlinkDOMMatrix.instance.m44_Setter_(this, value);
+ @DomName('DOMMatrix.multiplySelf')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix multiplySelf(DomMatrix other) => _blink.BlinkDOMMatrix.instance.multiplySelf_Callback_1_(this, other);
+
+ @DomName('DOMMatrix.preMultiplySelf')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix preMultiplySelf(DomMatrix other) => _blink.BlinkDOMMatrix.instance.preMultiplySelf_Callback_1_(this, other);
+
+ DomMatrix scale3dSelf(num scale, [num ox, num oy, num oz]) {
+ if (oz != null) {
+ return _blink.BlinkDOMMatrix.instance.scale3dSelf_Callback_4_(this, scale, ox, oy, oz);
+ }
+ if (oy != null) {
+ return _blink.BlinkDOMMatrix.instance.scale3dSelf_Callback_3_(this, scale, ox, oy);
+ }
+ if (ox != null) {
+ return _blink.BlinkDOMMatrix.instance.scale3dSelf_Callback_2_(this, scale, ox);
+ }
+ return _blink.BlinkDOMMatrix.instance.scale3dSelf_Callback_1_(this, scale);
+ }
+
+ DomMatrix scaleNonUniformSelf(num sx, [num sy, num sz, num ox, num oy, num oz]) {
+ if (oz != null) {
+ return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_6_(this, sx, sy, sz, ox, oy, oz);
+ }
+ if (oy != null) {
+ return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_5_(this, sx, sy, sz, ox, oy);
+ }
+ if (ox != null) {
+ return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_4_(this, sx, sy, sz, ox);
+ }
+ if (sz != null) {
+ return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_3_(this, sx, sy, sz);
+ }
+ if (sy != null) {
+ return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_2_(this, sx, sy);
+ }
+ return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_1_(this, sx);
+ }
+
+ DomMatrix scaleSelf(num scale, [num ox, num oy]) {
+ if (oy != null) {
+ return _blink.BlinkDOMMatrix.instance.scaleSelf_Callback_3_(this, scale, ox, oy);
+ }
+ if (ox != null) {
+ return _blink.BlinkDOMMatrix.instance.scaleSelf_Callback_2_(this, scale, ox);
+ }
+ return _blink.BlinkDOMMatrix.instance.scaleSelf_Callback_1_(this, scale);
+ }
+
+ DomMatrix translateSelf(num tx, num ty, [num tz]) {
+ if (tz != null) {
+ return _blink.BlinkDOMMatrix.instance.translateSelf_Callback_3_(this, tx, ty, tz);
+ }
+ return _blink.BlinkDOMMatrix.instance.translateSelf_Callback_2_(this, tx, ty);
+ }
+
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -9891,6 +10026,70 @@
@Experimental() // untriaged
double get m44 => _blink.BlinkDOMMatrixReadOnly.instance.m44_Getter_(this);
+ @DomName('DOMMatrixReadOnly.multiply')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomMatrix multiply(DomMatrix other) => _blink.BlinkDOMMatrixReadOnly.instance.multiply_Callback_1_(this, other);
+
+ DomMatrix scale(num scale, [num ox, num oy]) {
+ if (oy != null) {
+ return _blink.BlinkDOMMatrixReadOnly.instance.scale_Callback_3_(this, scale, ox, oy);
+ }
+ if (ox != null) {
+ return _blink.BlinkDOMMatrixReadOnly.instance.scale_Callback_2_(this, scale, ox);
+ }
+ return _blink.BlinkDOMMatrixReadOnly.instance.scale_Callback_1_(this, scale);
+ }
+
+ DomMatrix scale3d(num scale, [num ox, num oy, num oz]) {
+ if (oz != null) {
+ return _blink.BlinkDOMMatrixReadOnly.instance.scale3d_Callback_4_(this, scale, ox, oy, oz);
+ }
+ if (oy != null) {
+ return _blink.BlinkDOMMatrixReadOnly.instance.scale3d_Callback_3_(this, scale, ox, oy);
+ }
+ if (ox != null) {
+ return _blink.BlinkDOMMatrixReadOnly.instance.scale3d_Callback_2_(this, scale, ox);
+ }
+ return _blink.BlinkDOMMatrixReadOnly.instance.scale3d_Callback_1_(this, scale);
+ }
+
+ DomMatrix scaleNonUniform(num sx, [num sy, num sz, num ox, num oy, num oz]) {
+ if (oz != null) {
+ return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_6_(this, sx, sy, sz, ox, oy, oz);
+ }
+ if (oy != null) {
+ return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_5_(this, sx, sy, sz, ox, oy);
+ }
+ if (ox != null) {
+ return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_4_(this, sx, sy, sz, ox);
+ }
+ if (sz != null) {
+ return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_3_(this, sx, sy, sz);
+ }
+ if (sy != null) {
+ return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_2_(this, sx, sy);
+ }
+ return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_1_(this, sx);
+ }
+
+ @DomName('DOMMatrixReadOnly.toFloat32Array')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Float32List toFloat32Array() => _blink.BlinkDOMMatrixReadOnly.instance.toFloat32Array_Callback_0_(this);
+
+ @DomName('DOMMatrixReadOnly.toFloat64Array')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Float64List toFloat64Array() => _blink.BlinkDOMMatrixReadOnly.instance.toFloat64Array_Callback_0_(this);
+
+ DomMatrix translate(num tx, num ty, [num tz]) {
+ if (tz != null) {
+ return _blink.BlinkDOMMatrixReadOnly.instance.translate_Callback_3_(this, tx, ty, tz);
+ }
+ return _blink.BlinkDOMMatrixReadOnly.instance.translate_Callback_2_(this, tx, ty);
+ }
+
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -9951,6 +10150,9 @@
throw new ArgumentError("Incorrect number or type of arguments");
}
+ /// Checks if this type is supported on the current platform.
+ static bool get supported => true;
+
@DomName('DOMPoint.w')
@DocsEditable()
@Experimental() // untriaged
@@ -13159,6 +13361,8 @@
String contentEditable;
+ MenuElement contextMenu;
+
String dir;
bool draggable;
@@ -13265,19 +13469,19 @@
@DomName('Element.scrollLeft')
@DocsEditable()
- int get _scrollLeft => _blink.BlinkElement.instance.scrollLeft_Getter_(this);
+ num get _scrollLeft => _blink.BlinkElement.instance.scrollLeft_Getter_(this);
@DomName('Element.scrollLeft')
@DocsEditable()
- void set _scrollLeft(int value) => _blink.BlinkElement.instance.scrollLeft_Setter_(this, value);
+ void set _scrollLeft(num value) => _blink.BlinkElement.instance.scrollLeft_Setter_(this, value);
@DomName('Element.scrollTop')
@DocsEditable()
- int get _scrollTop => _blink.BlinkElement.instance.scrollTop_Getter_(this);
+ num get _scrollTop => _blink.BlinkElement.instance.scrollTop_Getter_(this);
@DomName('Element.scrollTop')
@DocsEditable()
- void set _scrollTop(int value) => _blink.BlinkElement.instance.scrollTop_Setter_(this, value);
+ void set _scrollTop(num value) => _blink.BlinkElement.instance.scrollTop_Setter_(this, value);
@DomName('Element.scrollWidth')
@DocsEditable()
@@ -14509,11 +14713,11 @@
// http://www.w3.org/TR/eventsource/#the-eventsource-interface
@Experimental() // stable
class EventSource extends EventTarget {
- factory EventSource(String title, {withCredentials: false}) {
+ factory EventSource(String url, {withCredentials: false}) {
var parsedOptions = {
'withCredentials': withCredentials,
};
- return EventSource._factoryEventSource(title, parsedOptions);
+ return EventSource._factoryEventSource(url, parsedOptions);
}
// To suppress missing implicit constructor warnings.
factory EventSource._() { throw new UnsupportedError("Not supported"); }
@@ -14772,6 +14976,26 @@
@DocsEditable()
+@DomName('ExtendableEvent')
+@Experimental() // untriaged
+class ExtendableEvent extends Event {
+ // To suppress missing implicit constructor warnings.
+ factory ExtendableEvent._() { throw new UnsupportedError("Not supported"); }
+
+ @DomName('ExtendableEvent.waitUntil')
+ @DocsEditable()
+ @Experimental() // untriaged
+ void waitUntil(Object value) => _blink.BlinkExtendableEvent.instance.waitUntil_Callback_1_(this, value);
+
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable()
@DomName('FederatedCredential')
@Experimental() // untriaged
class FederatedCredential extends Credential {
@@ -14798,41 +15022,6 @@
@DocsEditable()
-@DomName('FetchBodyStream')
-@Experimental() // untriaged
-class FetchBodyStream extends NativeFieldWrapperClass2 {
- // To suppress missing implicit constructor warnings.
- factory FetchBodyStream._() { throw new UnsupportedError("Not supported"); }
-
- @DomName('FetchBodyStream.asArrayBuffer')
- @DocsEditable()
- @Experimental() // untriaged
- Future asArrayBuffer() => _blink.BlinkFetchBodyStream.instance.asArrayBuffer_Callback_0_(this);
-
- @DomName('FetchBodyStream.asBlob')
- @DocsEditable()
- @Experimental() // untriaged
- Future asBlob() => _blink.BlinkFetchBodyStream.instance.asBlob_Callback_0_(this);
-
- @DomName('FetchBodyStream.asJSON')
- @DocsEditable()
- @Experimental() // untriaged
- Future asJson() => _blink.BlinkFetchBodyStream.instance.asJSON_Callback_0_(this);
-
- @DomName('FetchBodyStream.asText')
- @DocsEditable()
- @Experimental() // untriaged
- Future asText() => _blink.BlinkFetchBodyStream.instance.asText_Callback_0_(this);
-
-}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-@DocsEditable()
@DomName('FetchEvent')
@Experimental() // untriaged
class FetchEvent extends Event {
@@ -15715,10 +15904,12 @@
@Experimental() // untriaged
void add(FontFace fontFace) => _blink.BlinkFontFaceSet.instance.add_Callback_1_(this, fontFace);
- @DomName('FontFaceSet.check')
- @DocsEditable()
- @Experimental() // untriaged
- bool check(String font, String text) => _blink.BlinkFontFaceSet.instance.check_Callback_2_(this, font, text);
+ bool check(String font, [String text]) {
+ if (text != null) {
+ return _blink.BlinkFontFaceSet.instance.check_Callback_2_(this, font, text);
+ }
+ return _blink.BlinkFontFaceSet.instance.check_Callback_1_(this, font);
+ }
@DomName('FontFaceSet.clear')
@DocsEditable()
@@ -17628,6 +17819,16 @@
@DocsEditable()
void set contentEditable(String value) => _blink.BlinkHTMLElement.instance.contentEditable_Setter_(this, value);
+ @DomName('HTMLElement.contextMenu')
+ @DocsEditable()
+ @Experimental() // untriaged
+ MenuElement get contextMenu => _blink.BlinkHTMLElement.instance.contextMenu_Getter_(this);
+
+ @DomName('HTMLElement.contextMenu')
+ @DocsEditable()
+ @Experimental() // untriaged
+ void set contextMenu(MenuElement value) => _blink.BlinkHTMLElement.instance.contextMenu_Setter_(this, value);
+
@DomName('HTMLElement.dir')
@DocsEditable()
String get dir => _blink.BlinkHTMLElement.instance.dir_Getter_(this);
@@ -19649,6 +19850,10 @@
_blink.BlinkHTMLInputElement.instance.setRangeText_Callback_1_(this, replacement);
return;
}
+ if ((end is int || end == null) && (start is int || start == null) && (replacement is String || replacement == null) && selectionMode == null) {
+ _blink.BlinkHTMLInputElement.instance.setRangeText_Callback_3_(this, replacement, start, end);
+ return;
+ }
if ((selectionMode is String || selectionMode == null) && (end is int || end == null) && (start is int || start == null) && (replacement is String || replacement == null)) {
_blink.BlinkHTMLInputElement.instance.setRangeText_Callback_4_(this, replacement, start, end, selectionMode);
return;
@@ -20288,7 +20493,7 @@
@DocsEditable()
@DomName('InstallEvent')
@Experimental() // untriaged
-class InstallEvent extends InstallPhaseEvent {
+class InstallEvent extends ExtendableEvent {
// To suppress missing implicit constructor warnings.
factory InstallEvent._() { throw new UnsupportedError("Not supported"); }
@@ -20307,26 +20512,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-// WARNING: Do not edit - generated code.
-
-
-@DocsEditable()
-@DomName('InstallPhaseEvent')
-@Experimental() // untriaged
-class InstallPhaseEvent extends Event {
- // To suppress missing implicit constructor warnings.
- factory InstallPhaseEvent._() { throw new UnsupportedError("Not supported"); }
-
- @DomName('InstallPhaseEvent.waitUntil')
- @DocsEditable()
- @Experimental() // untriaged
- void waitUntil(Object value) => _blink.BlinkInstallPhaseEvent.instance.waitUntil_Callback_1_(this, value);
-
-}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
@DomName('KeyboardEvent')
class KeyboardEvent extends UIEvent {
@@ -21412,7 +21597,7 @@
@DomName('HTMLMediaElement.setMediaKeys')
@DocsEditable()
@Experimental() // untriaged
- void setMediaKeys(MediaKeys mediaKeys) => _blink.BlinkHTMLMediaElement.instance.setMediaKeys_Callback_1_(this, mediaKeys);
+ Future setMediaKeys(MediaKeys mediaKeys) => _blink.BlinkHTMLMediaElement.instance.setMediaKeys_Callback_1_(this, mediaKeys);
void addKey(String keySystem, Uint8List key, [Uint8List initData, String sessionId]) {
if (initData != null) {
@@ -21684,6 +21869,16 @@
@DocsEditable()
String get sessionId => _blink.BlinkMediaKeySession.instance.sessionId_Getter_(this);
+ Future generateRequest(String initDataType, initData) {
+ if ((initData is TypedData) && (initDataType is String)) {
+ return _blink.BlinkMediaKeySession.instance.generateRequest_Callback_2_(this, initDataType, initData);
+ }
+ if ((initData is ByteBuffer) && (initDataType is String)) {
+ return _blink.BlinkMediaKeySession.instance.generateRequest_Callback_2_(this, initDataType, initData);
+ }
+ throw new ArgumentError("Incorrect number or type of arguments");
+ }
+
@DomName('MediaKeySession.release')
@DocsEditable()
@Experimental() // untriaged
@@ -21724,20 +21919,11 @@
@Experimental() // untriaged
static Future create(String keySystem) => _blink.BlinkMediaKeys.instance.create_Callback_1_(keySystem);
- Future _createSession(String initDataType, initData, [String sessionType]) {
- if ((initData is TypedData) && (initDataType is String) && sessionType == null) {
- return _blink.BlinkMediaKeys.instance.createSession_Callback_2_(this, initDataType, initData);
+ MediaKeySession _createSession([String sessionType]) {
+ if (sessionType != null) {
+ return _blink.BlinkMediaKeys.instance.createSession_Callback_1_(this, sessionType);
}
- if ((sessionType is String || sessionType == null) && (initData is TypedData) && (initDataType is String)) {
- return _blink.BlinkMediaKeys.instance.createSession_Callback_3_(this, initDataType, initData, sessionType);
- }
- if ((initData is ByteBuffer) && (initDataType is String) && sessionType == null) {
- return _blink.BlinkMediaKeys.instance.createSession_Callback_2_(this, initDataType, initData);
- }
- if ((sessionType is String || sessionType == null) && (initData is ByteBuffer) && (initDataType is String)) {
- return _blink.BlinkMediaKeys.instance.createSession_Callback_3_(this, initDataType, initData, sessionType);
- }
- throw new ArgumentError("Incorrect number or type of arguments");
+ return _blink.BlinkMediaKeys.instance.createSession_Callback_0_(this);
}
@DomName('MediaKeys.isTypeSupported')
@@ -21795,10 +21981,15 @@
@DocsEditable()
@DomName('MediaQueryList')
@Unstable()
-class MediaQueryList extends NativeFieldWrapperClass2 {
+class MediaQueryList extends EventTarget {
// To suppress missing implicit constructor warnings.
factory MediaQueryList._() { throw new UnsupportedError("Not supported"); }
+ @DomName('MediaQueryList.changeEvent')
+ @DocsEditable()
+ @Experimental() // untriaged
+ static const EventStreamProvider<Event> changeEvent = const EventStreamProvider<Event>('change');
+
@DomName('MediaQueryList.matches')
@DocsEditable()
bool get matches => _blink.BlinkMediaQueryList.instance.matches_Getter_(this);
@@ -21807,6 +21998,44 @@
@DocsEditable()
String get media => _blink.BlinkMediaQueryList.instance.media_Getter_(this);
+ @DomName('MediaQueryList.addListener')
+ @DocsEditable()
+ void addListener(EventListener listener) => _blink.BlinkMediaQueryList.instance.addListener_Callback_1_(this, listener);
+
+ @DomName('MediaQueryList.removeListener')
+ @DocsEditable()
+ void removeListener(EventListener listener) => _blink.BlinkMediaQueryList.instance.removeListener_Callback_1_(this, listener);
+
+ @DomName('MediaQueryList.onchange')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Stream<Event> get onChange => changeEvent.forTarget(this);
+
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable()
+@DomName('MediaQueryListEvent')
+@Experimental() // untriaged
+class MediaQueryListEvent extends Event {
+ // To suppress missing implicit constructor warnings.
+ factory MediaQueryListEvent._() { throw new UnsupportedError("Not supported"); }
+
+ @DomName('MediaQueryListEvent.matches')
+ @DocsEditable()
+ @Experimental() // untriaged
+ bool get matches => _blink.BlinkMediaQueryListEvent.instance.matches_Getter_(this);
+
+ @DomName('MediaQueryListEvent.media')
+ @DocsEditable()
+ @Experimental() // untriaged
+ String get media => _blink.BlinkMediaQueryListEvent.instance.media_Getter_(this);
+
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -22637,19 +22866,19 @@
@DocsEditable()
static const EventStreamProvider<MidiConnectionEvent> disconnectEvent = const EventStreamProvider<MidiConnectionEvent>('disconnect');
+ @DomName('MIDIAccess.inputs')
+ @DocsEditable()
+ MidiInputMap get inputs => _blink.BlinkMIDIAccess.instance.inputs_Getter_(this);
+
+ @DomName('MIDIAccess.outputs')
+ @DocsEditable()
+ MidiOutputMap get outputs => _blink.BlinkMIDIAccess.instance.outputs_Getter_(this);
+
@DomName('MIDIAccess.sysexEnabled')
@DocsEditable()
@Experimental() // untriaged
bool get sysexEnabled => _blink.BlinkMIDIAccess.instance.sysexEnabled_Getter_(this);
- @DomName('MIDIAccess.inputs')
- @DocsEditable()
- List<MidiInput> inputs() => _blink.BlinkMIDIAccess.instance.inputs_Callback_0_(this);
-
- @DomName('MIDIAccess.outputs')
- @DocsEditable()
- List<MidiOutput> outputs() => _blink.BlinkMIDIAccess.instance.outputs_Callback_0_(this);
-
/// Stream of `connect` events handled by this [MidiAccess].
@DomName('MIDIAccess.onconnect')
@DocsEditable()
@@ -22720,6 +22949,51 @@
@DocsEditable()
+@DomName('MIDIInputMap')
+@Experimental() // untriaged
+class MidiInputMap extends NativeFieldWrapperClass2 {
+ // To suppress missing implicit constructor warnings.
+ factory MidiInputMap._() { throw new UnsupportedError("Not supported"); }
+
+ @DomName('MIDIInputMap.size')
+ @DocsEditable()
+ @Experimental() // untriaged
+ int get size => _blink.BlinkMIDIInputMap.instance.size_Getter_(this);
+
+ @DomName('MIDIInputMap.entries')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomIterator entries() => _blink.BlinkMIDIInputMap.instance.entries_Callback_0_(this);
+
+ @DomName('MIDIInputMap.get')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Object get(String id) => _blink.BlinkMIDIInputMap.instance.get_Callback_1_(this, id);
+
+ @DomName('MIDIInputMap.has')
+ @DocsEditable()
+ @Experimental() // untriaged
+ bool has(String key) => _blink.BlinkMIDIInputMap.instance.has_Callback_1_(this, key);
+
+ @DomName('MIDIInputMap.keys')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomIterator keys() => _blink.BlinkMIDIInputMap.instance.keys_Callback_0_(this);
+
+ @DomName('MIDIInputMap.values')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomIterator values() => _blink.BlinkMIDIInputMap.instance.values_Callback_0_(this);
+
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable()
@DomName('MIDIMessageEvent')
// http://webaudio.github.io/web-midi-api/#midimessageevent-interface
@Experimental()
@@ -22769,6 +23043,51 @@
@DocsEditable()
+@DomName('MIDIOutputMap')
+@Experimental() // untriaged
+class MidiOutputMap extends NativeFieldWrapperClass2 {
+ // To suppress missing implicit constructor warnings.
+ factory MidiOutputMap._() { throw new UnsupportedError("Not supported"); }
+
+ @DomName('MIDIOutputMap.size')
+ @DocsEditable()
+ @Experimental() // untriaged
+ int get size => _blink.BlinkMIDIOutputMap.instance.size_Getter_(this);
+
+ @DomName('MIDIOutputMap.entries')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomIterator entries() => _blink.BlinkMIDIOutputMap.instance.entries_Callback_0_(this);
+
+ @DomName('MIDIOutputMap.get')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Object get(String id) => _blink.BlinkMIDIOutputMap.instance.get_Callback_1_(this, id);
+
+ @DomName('MIDIOutputMap.has')
+ @DocsEditable()
+ @Experimental() // untriaged
+ bool has(String key) => _blink.BlinkMIDIOutputMap.instance.has_Callback_1_(this, key);
+
+ @DomName('MIDIOutputMap.keys')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomIterator keys() => _blink.BlinkMIDIOutputMap.instance.keys_Callback_0_(this);
+
+ @DomName('MIDIOutputMap.values')
+ @DocsEditable()
+ @Experimental() // untriaged
+ DomIterator values() => _blink.BlinkMIDIOutputMap.instance.values_Callback_0_(this);
+
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable()
@DomName('MIDIPort')
// http://webaudio.github.io/web-midi-api/#idl-def-MIDIPort
@Experimental()
@@ -23404,6 +23723,11 @@
@Experimental() // nonstandard
MimeTypeArray get mimeTypes => _blink.BlinkNavigator.instance.mimeTypes_Getter_(this);
+ @DomName('Navigator.presentation')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Presentation get presentation => _blink.BlinkNavigator.instance.presentation_Getter_(this);
+
@DomName('Navigator.productSub')
@DocsEditable()
@Unstable()
@@ -24569,7 +24893,10 @@
@DomName('Notification.Notification')
@DocsEditable()
static Notification _factoryNotification(String title, [Map options]) {
- return _blink.BlinkNotification.instance.constructorCallback_2_(title, options);
+ if (options != null) {
+ return _blink.BlinkNotification.instance.constructorCallback_2_(title, options);
+ }
+ return _blink.BlinkNotification.instance.constructorCallback_1_(title);
}
@DomName('Notification.body')
@@ -25821,6 +26148,42 @@
@DocsEditable()
+@DomName('PluginPlaceholderElement')
+@Experimental() // untriaged
+class PluginPlaceholderElement extends DivElement {
+ // To suppress missing implicit constructor warnings.
+ factory PluginPlaceholderElement._() { throw new UnsupportedError("Not supported"); }
+ /**
+ * Constructor instantiated by the DOM when a custom element has been created.
+ *
+ * This can only be called by subclasses from their created constructor.
+ */
+ PluginPlaceholderElement.created() : super.created();
+
+ @DomName('PluginPlaceholderElement.message')
+ @DocsEditable()
+ @Experimental() // untriaged
+ String get message => _blink.BlinkPluginPlaceholderElement.instance.message_Getter_(this);
+
+ @DomName('PluginPlaceholderElement.message')
+ @DocsEditable()
+ @Experimental() // untriaged
+ void set message(String value) => _blink.BlinkPluginPlaceholderElement.instance.message_Setter_(this, value);
+
+ @DomName('PluginPlaceholderElement.createdCallback')
+ @DocsEditable()
+ @Experimental() // untriaged
+ void createdCallback() => _blink.BlinkPluginPlaceholderElement.instance.createdCallback_Callback_0_(this);
+
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable()
@DomName('PopStateEvent')
@SupportedBrowser(SupportedBrowser.CHROME)
@SupportedBrowser(SupportedBrowser.FIREFOX)
@@ -25922,6 +26285,21 @@
@DocsEditable()
+@DomName('Presentation')
+@Experimental() // untriaged
+class Presentation extends EventTarget {
+ // To suppress missing implicit constructor warnings.
+ factory Presentation._() { throw new UnsupportedError("Not supported"); }
+
+}
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable()
@DomName('ProcessingInstruction')
@Unstable()
class ProcessingInstruction extends CharacterData {
@@ -26244,6 +26622,11 @@
return;
}
+ @DomName('Range.compareBoundaryPoints')
+ @DocsEditable()
+ @Experimental() // untriaged
+ int compareBoundaryPoints(int how, Range sourceRange) => _blink.BlinkRange.instance.compareBoundaryPoints_Callback_2_(this, how, sourceRange);
+
@DomName('Range.comparePoint')
@DocsEditable()
int comparePoint(Node refNode, int offset) => _blink.BlinkRange.instance.comparePoint_Callback_2_(this, refNode, offset);
@@ -26345,6 +26728,31 @@
// To suppress missing implicit constructor warnings.
factory ReadableStream._() { throw new UnsupportedError("Not supported"); }
+ @DomName('ReadableStream.closed')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future get closed => _blink.BlinkReadableStream.instance.closed_Getter_(this);
+
+ @DomName('ReadableStream.state')
+ @DocsEditable()
+ @Experimental() // untriaged
+ String get state => _blink.BlinkReadableStream.instance.state_Getter_(this);
+
+ @DomName('ReadableStream.cancel')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future cancel(Object reason) => _blink.BlinkReadableStream.instance.cancel_Callback_1_(this, reason);
+
+ @DomName('ReadableStream.read')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Object read() => _blink.BlinkReadableStream.instance.read_Callback_0_(this);
+
+ @DomName('ReadableStream.wait')
+ @DocsEditable()
+ @Experimental() // untriaged
+ Future wait() => _blink.BlinkReadableStream.instance.wait_Callback_0_(this);
+
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -27724,10 +28132,12 @@
// To suppress missing implicit constructor warnings.
factory ServiceWorkerClients._() { throw new UnsupportedError("Not supported"); }
- @DomName('ServiceWorkerClients.getServiced')
- @DocsEditable()
- @Experimental() // untriaged
- Future getServiced() => _blink.BlinkServiceWorkerClients.instance.getServiced_Callback_0_(this);
+ Future getAll([Map options]) {
+ if (options != null) {
+ return _blink.BlinkServiceWorkerClients.instance.getAll_Callback_1_(this, options);
+ }
+ return _blink.BlinkServiceWorkerClients.instance.getAll_Callback_0_(this);
+ }
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
@@ -27744,30 +28154,22 @@
// To suppress missing implicit constructor warnings.
factory ServiceWorkerContainer._() { throw new UnsupportedError("Not supported"); }
- @DomName('ServiceWorkerContainer.active')
- @DocsEditable()
- @Experimental() // untriaged
- _ServiceWorker get active => _blink.BlinkServiceWorkerContainer.instance.active_Getter_(this);
-
@DomName('ServiceWorkerContainer.controller')
@DocsEditable()
@Experimental() // untriaged
_ServiceWorker get controller => _blink.BlinkServiceWorkerContainer.instance.controller_Getter_(this);
- @DomName('ServiceWorkerContainer.installing')
- @DocsEditable()
- @Experimental() // untriaged
- _ServiceWorker get installing => _blink.BlinkServiceWorkerContainer.instance.installing_Getter_(this);
-
@DomName('ServiceWorkerContainer.ready')
@DocsEditable()
@Experimental() // untriaged
Future get ready => _blink.BlinkServiceWorkerContainer.instance.ready_Getter_(this);
- @DomName('ServiceWorkerContainer.waiting')
- @DocsEditable()
- @Experimental() // untriaged
- _ServiceWorker get waiting => _blink.BlinkServiceWorkerContainer.instance.waiting_Getter_(this);
+ Future getRegistration([String documentURL]) {
+ if (documentURL != null) {
+ return _blink.BlinkServiceWorkerContainer.instance.getRegistration_Callback_1_(this, documentURL);
+ }
+ return _blink.BlinkServiceWorkerContainer.instance.getRegistration_Callback_0_(this);
+ }
Future register(String url, [Map options]) {
if (options != null) {
@@ -27776,13 +28178,6 @@
return _blink.BlinkServiceWorkerContainer.instance.register_Callback_1_(this, url);
}
- Future unregister([String scope]) {
- if (scope != null) {
- return _blink.BlinkServiceWorkerContainer.instance.unregister_Callback_1_(this, scope);
- }
- return _blink.BlinkServiceWorkerContainer.instance.unregister_Callback_0_(this);
- }
-
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -27803,21 +28198,26 @@
@Experimental() // untriaged
static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
+ @DomName('ServiceWorkerGlobalScope.caches')
+ @DocsEditable()
+ @Experimental() // untriaged
+ CacheStorage get caches => _blink.BlinkServiceWorkerGlobalScope.instance.caches_Getter_(this);
+
@DomName('ServiceWorkerGlobalScope.clients')
@DocsEditable()
@Experimental() // untriaged
ServiceWorkerClients get clients => _blink.BlinkServiceWorkerGlobalScope.instance.clients_Getter_(this);
- @DomName('ServiceWorkerGlobalScope.nativeCaches')
- @DocsEditable()
- @Experimental() // untriaged
- CacheStorage get nativeCaches => _blink.BlinkServiceWorkerGlobalScope.instance.nativeCaches_Getter_(this);
-
@DomName('ServiceWorkerGlobalScope.scope')
@DocsEditable()
@Experimental() // untriaged
String get scope => _blink.BlinkServiceWorkerGlobalScope.instance.scope_Getter_(this);
+ @DomName('ServiceWorkerGlobalScope.close')
+ @DocsEditable()
+ @Experimental() // untriaged
+ void close() => _blink.BlinkServiceWorkerGlobalScope.instance.close_Callback_0_(this);
+
Future _fetch(request, [Map requestInitDict]) {
if ((request is String || request == null) && requestInitDict == null) {
return _blink.BlinkServiceWorkerGlobalScope.instance.fetch_Callback_1_(this, request);
@@ -32710,7 +33110,7 @@
* convertPointFromNodeToPage and convertPointFromPageToNode are removed.
* see http://dev.w3.org/csswg/cssom-view/#geometry
*/
- static bool get supportsPointConversions => _DomPoint.supported;
+ static bool get supportsPointConversions => DomPoint.supported;
// To suppress missing implicit constructor warnings.
factory Window._() { throw new UnsupportedError("Not supported"); }
@@ -33606,31 +34006,64 @@
@DocsEditable()
void resizeTo(num width, num height) => _blink.BlinkWindow.instance.resizeTo_Callback_2_(this, width, height);
- void scroll(int x, int y, [Map scrollOptions]) {
- if (scrollOptions != null) {
+ void scroll(x, y, [Map scrollOptions]) {
+ if ((y is num) && (x is num) && scrollOptions == null) {
+ _blink.BlinkWindow.instance.scroll_Callback_2_(this, x, y);
+ return;
+ }
+ if ((scrollOptions is Map) && (y is num) && (x is num)) {
_blink.BlinkWindow.instance.scroll_Callback_3_(this, x, y, scrollOptions);
return;
}
- _blink.BlinkWindow.instance.scroll_Callback_2_(this, x, y);
- return;
+ if ((y is int) && (x is int) && scrollOptions == null) {
+ _blink.BlinkWindow.instance.scroll_Callback_2_(this, x, y);
+ return;
+ }
+ if ((scrollOptions is Map) && (y is int) && (x is int)) {
+ _blink.BlinkWindow.instance.scroll_Callback_3_(this, x, y, scrollOptions);
+ return;
+ }
+ throw new ArgumentError("Incorrect number or type of arguments");
}
- void scrollBy(int x, int y, [Map scrollOptions]) {
- if (scrollOptions != null) {
+ void scrollBy(x, y, [Map scrollOptions]) {
+ if ((y is num) && (x is num) && scrollOptions == null) {
+ _blink.BlinkWindow.instance.scrollBy_Callback_2_(this, x, y);
+ return;
+ }
+ if ((scrollOptions is Map) && (y is num) && (x is num)) {
_blink.BlinkWindow.instance.scrollBy_Callback_3_(this, x, y, scrollOptions);
return;
}
- _blink.BlinkWindow.instance.scrollBy_Callback_2_(this, x, y);
- return;
+ if ((y is int) && (x is int) && scrollOptions == null) {
+ _blink.BlinkWindow.instance.scrollBy_Callback_2_(this, x, y);
+ return;
+ }
+ if ((scrollOptions is Map) && (y is int) && (x is int)) {
+ _blink.BlinkWindow.instance.scrollBy_Callback_3_(this, x, y, scrollOptions);
+ return;
+ }
+ throw new ArgumentError("Incorrect number or type of arguments");
}
- void scrollTo(int x, int y, [Map scrollOptions]) {
- if (scrollOptions != null) {
+ void scrollTo(x, y, [Map scrollOptions]) {
+ if ((y is num) && (x is num) && scrollOptions == null) {
+ _blink.BlinkWindow.instance.scrollTo_Callback_2_(this, x, y);
+ return;
+ }
+ if ((scrollOptions is Map) && (y is num) && (x is num)) {
_blink.BlinkWindow.instance.scrollTo_Callback_3_(this, x, y, scrollOptions);
return;
}
- _blink.BlinkWindow.instance.scrollTo_Callback_2_(this, x, y);
- return;
+ if ((y is int) && (x is int) && scrollOptions == null) {
+ _blink.BlinkWindow.instance.scrollTo_Callback_2_(this, x, y);
+ return;
+ }
+ if ((scrollOptions is Map) && (y is int) && (x is int)) {
+ _blink.BlinkWindow.instance.scrollTo_Callback_3_(this, x, y, scrollOptions);
+ return;
+ }
+ throw new ArgumentError("Incorrect number or type of arguments");
}
/**
@@ -34435,20 +34868,6 @@
@Experimental() // untriaged
void importScripts(String urls) => _blink.BlinkWorkerGlobalScope.instance.importScripts_Callback_1_(this, urls);
- SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) {
- if (creationCallback != null) {
- return _blink.BlinkWorkerGlobalScope.instance.openDatabase_Callback_5_(this, name, version, displayName, estimatedSize, creationCallback);
- }
- return _blink.BlinkWorkerGlobalScope.instance.openDatabase_Callback_4_(this, name, version, displayName, estimatedSize);
- }
-
- _DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) {
- if (creationCallback != null) {
- return _blink.BlinkWorkerGlobalScope.instance.openDatabaseSync_Callback_5_(this, name, version, displayName, estimatedSize, creationCallback);
- }
- return _blink.BlinkWorkerGlobalScope.instance.openDatabaseSync_Callback_4_(this, name, version, displayName, estimatedSize);
- }
-
void _webkitRequestFileSystem(int type, int size, [_FileSystemCallback successCallback, _ErrorCallback errorCallback]) {
if (errorCallback != null) {
_blink.BlinkWorkerGlobalScope.instance.webkitRequestFileSystem_Callback_4_(this, type, size, successCallback, errorCallback);
@@ -35369,25 +35788,6 @@
@DocsEditable()
-@DomName('DatabaseSync')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
-// http://www.w3.org/TR/webdatabase/#databasesync
-@deprecated // deprecated
-abstract class _DatabaseSync extends NativeFieldWrapperClass2 {
- // To suppress missing implicit constructor warnings.
- factory _DatabaseSync._() { throw new UnsupportedError("Not supported"); }
-
-}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-@DocsEditable()
@DomName('DirectoryEntrySync')
// http://www.w3.org/TR/file-system-api/#the-directoryentrysync-interface
@Experimental()
@@ -35436,51 +35836,6 @@
@DocsEditable()
-@DomName('WebKitPoint')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
-// http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html
-@Experimental() // non-standard
-class _DomPoint extends NativeFieldWrapperClass2 {
- // To suppress missing implicit constructor warnings.
- factory _DomPoint._() { throw new UnsupportedError("Not supported"); }
-
- @DomName('WebKitPoint.WebKitPoint')
- @DocsEditable()
- factory _DomPoint(num x, num y) => _create(x, y);
-
- @DocsEditable()
- static _DomPoint _create(x, y) => _blink.BlinkWebKitPoint.instance.constructorCallback_2_(x, y);
-
- /// Checks if this type is supported on the current platform.
- static bool get supported => true;
-
- @DomName('WebKitPoint.x')
- @DocsEditable()
- num get x => _blink.BlinkWebKitPoint.instance.x_Getter_(this);
-
- @DomName('WebKitPoint.x')
- @DocsEditable()
- void set x(num value) => _blink.BlinkWebKitPoint.instance.x_Setter_(this, value);
-
- @DomName('WebKitPoint.y')
- @DocsEditable()
- num get y => _blink.BlinkWebKitPoint.instance.y_Getter_(this);
-
- @DomName('WebKitPoint.y')
- @DocsEditable()
- void set y(num value) => _blink.BlinkWebKitPoint.instance.y_Setter_(this, value);
-
-}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-@DocsEditable()
@DomName('DOMRect')
@Experimental() // untriaged
class _DomRect extends DomRectReadOnly {
@@ -35966,22 +36321,6 @@
@DocsEditable()
-@DomName('Notation')
-// http://dom.spec.whatwg.org/#notation
-@deprecated // deprecated
-abstract class _Notation extends Node {
- // To suppress missing implicit constructor warnings.
- factory _Notation._() { throw new UnsupportedError("Not supported"); }
-
-}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-@DocsEditable()
@DomName('PagePopupController')
@deprecated // nonstandard
abstract class _PagePopupController extends NativeFieldWrapperClass2 {
@@ -36042,7 +36381,7 @@
@DocsEditable()
@DomName('Request')
@Experimental() // untriaged
-class _Request extends NativeFieldWrapperClass2 {
+class _Request extends Body {
// To suppress missing implicit constructor warnings.
factory _Request._() { throw new UnsupportedError("Not supported"); }
@@ -36089,6 +36428,11 @@
@Experimental() // untriaged
String get url => _blink.BlinkRequest.instance.url_Getter_(this);
+ @DomName('Request.clone')
+ @DocsEditable()
+ @Experimental() // untriaged
+ _Request clone() => _blink.BlinkRequest.instance.clone_Callback_0_(this);
+
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -36100,24 +36444,36 @@
@DocsEditable()
@DomName('Response')
@Experimental() // untriaged
-abstract class _Response extends NativeFieldWrapperClass2 {
+abstract class _Response extends Body {
// To suppress missing implicit constructor warnings.
factory _Response._() { throw new UnsupportedError("Not supported"); }
@DomName('Response.Response')
@DocsEditable()
- factory _Response(body, [Map responseInitDict]) {
- if ((body is String || body == null) && responseInitDict == null) {
- return _blink.BlinkResponse.instance.constructorCallback_1_(body);
+ factory _Response(body_OR_input, [Map requestInitDict_OR_responseInitDict]) {
+ if ((body_OR_input is String || body_OR_input == null) && requestInitDict_OR_responseInitDict == null) {
+ return _blink.BlinkResponse.instance.constructorCallback_1_(body_OR_input);
}
- if ((responseInitDict is Map || responseInitDict == null) && (body is String || body == null)) {
- return _blink.BlinkResponse.instance.constructorCallback_2_(body, responseInitDict);
+ if ((requestInitDict_OR_responseInitDict is Map || requestInitDict_OR_responseInitDict == null) && (body_OR_input is String || body_OR_input == null)) {
+ return _blink.BlinkResponse.instance.constructorCallback_2_(body_OR_input, requestInitDict_OR_responseInitDict);
}
- if ((body is Blob || body == null) && responseInitDict == null) {
- return _blink.BlinkResponse.instance.constructorCallback_1_(body);
+ if ((body_OR_input is Blob || body_OR_input == null) && requestInitDict_OR_responseInitDict == null) {
+ return _blink.BlinkResponse.instance.constructorCallback_1_(body_OR_input);
}
- if ((responseInitDict is Map || responseInitDict == null) && (body is Blob || body == null)) {
- return _blink.BlinkResponse.instance.constructorCallback_2_(body, responseInitDict);
+ if ((requestInitDict_OR_responseInitDict is Map || requestInitDict_OR_responseInitDict == null) && (body_OR_input is Blob || body_OR_input == null)) {
+ return _blink.BlinkResponse.instance.constructorCallback_2_(body_OR_input, requestInitDict_OR_responseInitDict);
+ }
+ if ((body_OR_input is TypedData || body_OR_input == null) && requestInitDict_OR_responseInitDict == null) {
+ return _blink.BlinkResponse.instance.constructorCallback_1_(body_OR_input);
+ }
+ if ((requestInitDict_OR_responseInitDict is Map || requestInitDict_OR_responseInitDict == null) && (body_OR_input is TypedData || body_OR_input == null)) {
+ return _blink.BlinkResponse.instance.constructorCallback_2_(body_OR_input, requestInitDict_OR_responseInitDict);
+ }
+ if ((body_OR_input is ByteBuffer || body_OR_input == null) && requestInitDict_OR_responseInitDict == null) {
+ return _blink.BlinkResponse.instance.constructorCallback_1_(body_OR_input);
+ }
+ if ((requestInitDict_OR_responseInitDict is Map || requestInitDict_OR_responseInitDict == null) && (body_OR_input is ByteBuffer || body_OR_input == null)) {
+ return _blink.BlinkResponse.instance.constructorCallback_2_(body_OR_input, requestInitDict_OR_responseInitDict);
}
throw new ArgumentError("Incorrect number or type of arguments");
}
@@ -41055,6 +41411,9 @@
static window() => _blink.Blink_Utils.window();
static forwardingPrint(String message) => _blink.Blink_Utils.forwardingPrint(message);
+ static void spawnDomHelper(Function f, int replyTo) =>
+ _blink.Blink_Utils.spawnDomHelper(f, replyTo);
+
// TODO(vsm): Make this API compatible with spawnUri. It should also
// return a Future<Isolate>.
static spawnDomUri(String uri) => _blink.Blink_Utils.spawnDomUri(uri);
@@ -41373,7 +41732,7 @@
return libraryMirror.uri.scheme == 'dart' &&
SIDE_EFFECT_FREE_LIBRARIES.contains(libraryMirror.uri.toString());
}
-
+
/**
* Whether we should treat a property as a field for the purposes of the
* debugger.
@@ -41591,7 +41950,7 @@
}
return ret;
}
-
+
/**
* Get a property, returning null if the property does not exist.
* For private property names, we attempt to resolve the property in the
@@ -41601,7 +41960,7 @@
var objectMirror = reflect(o);
var classMirror = objectMirror.type;
if (propertyName.startsWith("_")) {
- var attemptedLibraries = new Set<LibraryMirror>();
+ var attemptedLibraries = new Set<LibraryMirror>();
while (classMirror != null) {
LibraryMirror library = classMirror.owner;
if (!attemptedLibraries.contains(library)) {
@@ -41613,7 +41972,7 @@
}
classMirror = classMirror.superclass;
}
- return null;
+ return null;
}
try {
return objectMirror.getField(
@@ -41625,7 +41984,7 @@
/**
* Helper to wrap the inspect method on InjectedScriptHost to provide the
- * inspect method required for the
+ * inspect method required for the
*/
static List consoleApi(host) {
return [
@@ -41760,10 +42119,83 @@
}
}
+// TODO(vsm): Remove DOM isolate code once we have Dartium isolates
+// as workers. This is only used to support
+// printing and timers in background isolates. As workers they should
+// be able to just do those things natively.
+
+_makeSendPortFuture(spawnRequest) {
+ final completer = new Completer<SendPort>.sync();
+ final port = new ReceivePort();
+ port.listen((result) {
+ completer.complete(result);
+ port.close();
+ });
+ // TODO: SendPort.hashCode is ugly way to access port id.
+ spawnRequest(port.sendPort.hashCode);
+ return completer.future;
+}
+
+Future<SendPort> _spawnDomHelper(Function f) =>
+ _makeSendPortFuture((portId) { _Utils.spawnDomHelper(f, portId); });
+
+final Future<SendPort> __HELPER_ISOLATE_PORT =
+ _spawnDomHelper(_helperIsolateMain);
+
+// Tricky part.
+// Once __HELPER_ISOLATE_PORT gets resolved, it will still delay in .then
+// and to delay Timer.run is used. However, Timer.run will try to register
+// another Timer and here we got stuck: event cannot be posted as then
+// callback is not executed because it's delayed with timer.
+// Therefore once future is resolved, it's unsafe to call .then on it
+// in Timer code.
+SendPort __SEND_PORT;
+
+_sendToHelperIsolate(msg, SendPort replyTo) {
+ if (__SEND_PORT != null) {
+ __SEND_PORT.send([msg, replyTo]);
+ } else {
+ __HELPER_ISOLATE_PORT.then((port) {
+ __SEND_PORT = port;
+ __SEND_PORT.send([msg, replyTo]);
+ });
+ }
+}
+
+final _TIMER_REGISTRY = new Map<SendPort, Timer>();
+
+const _NEW_TIMER = 'NEW_TIMER';
+const _CANCEL_TIMER = 'CANCEL_TIMER';
+const _TIMER_PING = 'TIMER_PING';
+const _PRINT = 'PRINT';
+
+_helperIsolateMain(originalSendPort) {
+ var port = new ReceivePort();
+ originalSendPort.send(port.sendPort);
+ port.listen((args) {
+ var msg = args.first;
+ var replyTo = args.last;
+ final cmd = msg[0];
+ if (cmd == _NEW_TIMER) {
+ final duration = new Duration(milliseconds: msg[1]);
+ bool periodic = msg[2];
+ ping() { replyTo.send(_TIMER_PING); };
+ _TIMER_REGISTRY[replyTo] = periodic ?
+ new Timer.periodic(duration, (_) { ping(); }) :
+ new Timer(duration, ping);
+ } else if (cmd == _CANCEL_TIMER) {
+ _TIMER_REGISTRY.remove(replyTo).cancel();
+ } else if (cmd == _PRINT) {
+ final message = msg[1];
+ // TODO(antonm): we need somehow identify those isolates.
+ print('[From isolate] $message');
+ }
+ });
+}
+
final _printClosure = (s) => window.console.log(s);
final _pureIsolatePrintClosure = (s) {
- throw new UnimplementedError("Printing from a background isolate "
- "is not supported in the browser");
+ _sendToHelperIsolate([_PRINT, s], null);
};
final _forwardingPrintClosure = _Utils.forwardingPrint;
@@ -41812,10 +42244,45 @@
return new _Timer(milliSeconds, callback, repeating);
};
+class _PureIsolateTimer implements Timer {
+ bool _isActive = true;
+ final ReceivePort _port = new ReceivePort();
+ SendPort _sendPort; // Effectively final.
+
+ // static SendPort _SEND_PORT;
+
+ _PureIsolateTimer(int milliSeconds, callback, repeating) {
+ _sendPort = _port.sendPort;
+ _port.listen((msg) {
+ assert(msg == _TIMER_PING);
+ _isActive = repeating;
+ callback(this);
+ if (!repeating) _cancel();
+ });
+
+ _send([_NEW_TIMER, milliSeconds, repeating]);
+ }
+
+ void cancel() {
+ _cancel();
+ _send([_CANCEL_TIMER]);
+ }
+
+ void _cancel() {
+ _isActive = false;
+ _port.close();
+ }
+
+ _send(msg) {
+ _sendToHelperIsolate(msg, _sendPort);
+ }
+
+ bool get isActive => _isActive;
+}
+
get _pureIsolateTimerFactoryClosure =>
((int milliSeconds, void callback(Timer time), bool repeating) =>
- throw new UnimplementedError("Timers on background isolates "
- "are not supported in the browser"));
+ new _PureIsolateTimer(milliSeconds, callback, repeating));
class _ScheduleImmediateHelper {
MutationObserver _observer;
diff --git a/sdk/lib/html/html_common/device.dart b/sdk/lib/html/html_common/device.dart
index 25d7ff0..d36339b 100644
--- a/sdk/lib/html/html_common/device.dart
+++ b/sdk/lib/html/html_common/device.dart
@@ -66,36 +66,36 @@
* Gets the CSS property prefix for the current platform.
*/
static String get cssPrefix {
- if (_cachedCssPrefix == null) {
- if (isFirefox) {
- _cachedCssPrefix = '-moz-';
- } else if (isIE) {
- _cachedCssPrefix = '-ms-';
- } else if (isOpera) {
- _cachedCssPrefix = '-o-';
- } else {
- _cachedCssPrefix = '-webkit-';
- }
+ String prefix = _cachedCssPrefix;
+ if (prefix != null) return prefix;
+ if (isFirefox) {
+ prefix = '-moz-';
+ } else if (isIE) {
+ prefix = '-ms-';
+ } else if (isOpera) {
+ prefix = '-o-';
+ } else {
+ prefix = '-webkit-';
}
- return _cachedCssPrefix;
+ return _cachedCssPrefix = prefix;
}
/**
* Prefix as used for JS property names.
*/
static String get propertyPrefix {
- if (_cachedPropertyPrefix == null) {
- if (isFirefox) {
- _cachedPropertyPrefix = 'moz';
- } else if (isIE) {
- _cachedPropertyPrefix = 'ms';
- } else if (isOpera) {
- _cachedPropertyPrefix = 'o';
- } else {
- _cachedPropertyPrefix = 'webkit';
- }
+ String prefix = _cachedPropertyPrefix;
+ if (prefix != null) return prefix;
+ if (isFirefox) {
+ prefix = 'moz';
+ } else if (isIE) {
+ prefix = 'ms';
+ } else if (isOpera) {
+ prefix = 'o';
+ } else {
+ prefix = 'webkit';
}
- return _cachedPropertyPrefix;
+ return _cachedPropertyPrefix = prefix;
}
/**
diff --git a/sdk/lib/mirrors/mirrors.dart b/sdk/lib/mirrors/mirrors.dart
index 1c30bdc..db7594d 100644
--- a/sdk/lib/mirrors/mirrors.dart
+++ b/sdk/lib/mirrors/mirrors.dart
@@ -744,6 +744,11 @@
bool get isAbstract;
/**
+ * Is the reflectee an enum?
+ */
+ bool get isEnum;
+
+ /**
* Returns an immutable map of the declarations actually given in the class
* declaration.
*
diff --git a/sdk/lib/web_sql/dart2js/web_sql_dart2js.dart b/sdk/lib/web_sql/dart2js/web_sql_dart2js.dart
index 83d7a9e..d19fa39 100644
--- a/sdk/lib/web_sql/dart2js/web_sql_dart2js.dart
+++ b/sdk/lib/web_sql/dart2js/web_sql_dart2js.dart
@@ -292,20 +292,3 @@
@DocsEditable()
void executeSql(String sqlStatement, List<Object> arguments, [SqlStatementCallback callback, SqlStatementErrorCallback errorCallback]) native;
}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-@DocsEditable()
-@DomName('SQLTransactionSync')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
-// http://www.w3.org/TR/webdatabase/#sqltransactionsync
-@Experimental() // deprecated
-@Native("SQLTransactionSync")
-abstract class _SQLTransactionSync extends Interceptor {
- // To suppress missing implicit constructor warnings.
- factory _SQLTransactionSync._() { throw new UnsupportedError("Not supported"); }
-}
diff --git a/sdk/lib/web_sql/dartium/web_sql_dartium.dart b/sdk/lib/web_sql/dartium/web_sql_dartium.dart
index 9bea22c..380f393 100644
--- a/sdk/lib/web_sql/dartium/web_sql_dartium.dart
+++ b/sdk/lib/web_sql/dartium/web_sql_dartium.dart
@@ -31,7 +31,6 @@
'SQLResultSet': () => SqlResultSet,
'SQLResultSetRowList': () => SqlResultSetRowList,
'SQLTransaction': () => SqlTransaction,
- 'SQLTransactionSync': () => _SQLTransactionSync,
};
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
@@ -324,22 +323,3 @@
void executeSql(String sqlStatement, List<Object> arguments, [SqlStatementCallback callback, SqlStatementErrorCallback errorCallback]) => _blink.BlinkSQLTransaction.instance.executeSql_Callback_4_(this, sqlStatement, arguments, callback, errorCallback);
}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-@DocsEditable()
-@DomName('SQLTransactionSync')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
-// http://www.w3.org/TR/webdatabase/#sqltransactionsync
-@Experimental() // deprecated
-abstract class _SQLTransactionSync extends NativeFieldWrapperClass2 {
- // To suppress missing implicit constructor warnings.
- factory _SQLTransactionSync._() { throw new UnsupportedError("Not supported"); }
-
-}
diff --git a/site/try/build_try.gyp b/site/try/build_try.gyp
index c8c21f6..084e78c 100644
--- a/site/try/build_try.gyp
+++ b/site/try/build_try.gyp
@@ -47,8 +47,8 @@
# These packages are uploaded to Try Dart and can be used in code
# there.
'../../pkg/analyzer/lib',
- '../../pkg/collection/lib',
- '../../pkg/crypto/lib',
+ '../../third_party/pkg/collection/lib',
+ '../../third_party/pkg/crypto/lib',
'../../third_party/pkg/args/lib',
'../../third_party/pkg/http/lib',
'../../third_party/pkg/http_parser/lib',
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 93373f4..f9a2e67 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -862,7 +862,6 @@
LayoutTests/fast/multicol/hit-test-gap-between-pages_t01: Pass, RuntimeError # Please triage this failure
LayoutTests/fast/multicol/newmulticol/balance-images_t01: RuntimeError # Please triage this failure
LayoutTests/fast/multicol/newmulticol/balance-maxheight_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/multicol/newmulticol/balance_t04: RuntimeError # Please triage this failure
LayoutTests/fast/multicol/newmulticol/balance_t07: RuntimeError # Please triage this failure
LayoutTests/fast/multicol/newmulticol/balance_t08: RuntimeError # Please triage this failure
LayoutTests/fast/multicol/newmulticol/balance_t09: RuntimeError # Please triage this failure
@@ -891,10 +890,8 @@
LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-margin-right_t01: RuntimeError # Please triage this failure
LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t01: RuntimeError # Please triage this failure
LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t02: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-left_t01: RuntimeError # Please triage this failure
LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-right_t01: RuntimeError # Please triage this failure
LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t02: RuntimeError # Please triage this failure
LayoutTests/fast/speechsynthesis/speech-synthesis-boundary-events_t01: Skip # Times out. Please triage this failure
LayoutTests/fast/speechsynthesis/speech-synthesis-cancel_t01: Skip # Times out. Please triage this failure
LayoutTests/fast/speechsynthesis/speech-synthesis-pause-resume_t01: Skip # Times out. Please triage this failure
@@ -940,7 +937,6 @@
LayoutTests/fast/text/international/rtl-text-wrapping_t01: RuntimeError # Please triage this failure
LayoutTests/fast/text/international/thai-offsetForPosition-inside-character_t01: RuntimeError # Please triage this failure
LayoutTests/fast/text/ipa-tone-letters_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/text/line-break-after-question-mark_t01: RuntimeError # Please triage this failure
LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: RuntimeError # Please triage this failure
LayoutTests/fast/text/regional-indicator-symobls_t01: RuntimeError # Please triage this failure
LayoutTests/fast/text/remove-zero-length-run_t01: RuntimeError # Please triage this failure
@@ -949,7 +945,6 @@
LayoutTests/fast/text/sub-pixel/text-scaling-rtl_t01: Pass, RuntimeError # Please triage this failure
LayoutTests/fast/text/sub-pixel/text-scaling-vertical_t01: Pass, RuntimeError # Please triage this failure
LayoutTests/fast/text/sub-pixel/text-scaling-webfont_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/text/text-combine-shrink-to-fit_t01: RuntimeError # Please triage this failure
LayoutTests/fast/transforms/bounding-rect-zoom_t01: RuntimeError # Please triage this failure
LayoutTests/fast/transforms/hit-test-large-scale_t01: RuntimeError # Please triage this failure
LayoutTests/fast/url/file-http-base_t01: RuntimeError # Please triage this failure
@@ -1326,6 +1321,14 @@
WebPlatformTest/html/semantics/forms/textfieldselection/selection_t01: RuntimeError # Please triage this failure
WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-001_t01: RuntimeError # Please triage this failure
+[ $compiler == dart2js && $runtime == chrome && $system == macos ]
+LayoutTests/fast/flexbox/repaint-scrollbar_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/orphans-relayout_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/glyph-reordering_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/vertical-align-length-copy-bug_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/zero-width-characters_t01: RuntimeError # Please triage this failure
+
+
[ $compiler == dart2js && $runtime == chrome && $system != macos ]
LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: RuntimeError # Please triage this failure
LayoutTests/fast/canvas/webgl/array-bounds-clamping_t01: RuntimeError # Please triage this failure
@@ -1403,6 +1406,11 @@
LayoutTests/fast/canvas/webgl/webgl-texture-binding-preserved_t01: RuntimeError # Please triage this failure
LayoutTests/fast/canvas/webgl/webgl-unprefixed-context-id_t01: RuntimeError # Please triage this failure
LayoutTests/fast/canvas/webgl/webgl-viewport-parameters-preserved_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/multicol/newmulticol/balance_t04: RuntimeError # Please triage this failure
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-left_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t02: RuntimeError # Please triage this failure
+LayoutTests/fast/text/line-break-after-question-mark_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/text-combine-shrink-to-fit_t01: RuntimeError # Please triage this failure
[ $compiler == dart2js && $runtime == ff ]
Language/12_Expressions/00_Object_Identity/1_Object_Identity_A05_t02: RuntimeError # Please triage this failure
@@ -1466,12 +1474,10 @@
LayoutTests/fast/canvas/canvas-lose-restore-googol-size_t01: RuntimeError # Please triage this failure
LayoutTests/fast/canvas/canvas-lose-restore-max-int-size_t01: RuntimeError # Please triage this failure
LayoutTests/fast/canvas/canvas-putImageData_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-resetTransform_t01: RuntimeError # Please triage this failure
LayoutTests/fast/canvas/canvas-resize-after-paint_t01: Skip # Times out. Please triage this failure
LayoutTests/fast/canvas/canvas-scale-shadowBlur_t01: RuntimeError # Please triage this failure
LayoutTests/fast/canvas/canvas-scale-strokePath-shadow_t01: RuntimeError # Please triage this failure
LayoutTests/fast/canvas/canvas-set-properties-with-non-invertible-ctm_t01: Pass, RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-setTransform_t01: RuntimeError # Please triage this failure
LayoutTests/fast/canvas/canvas-stroke-zeroSizeGradient_t01: RuntimeError # Please triage this failure
LayoutTests/fast/canvas/canvas-strokePath-gradient-shadow_t01: Pass, RuntimeError # Please triage this failure
LayoutTests/fast/canvas/canvas-strokeRect-alpha-shadow_t01: Pass, RuntimeError # Please triage this failure
@@ -1780,7 +1786,6 @@
LayoutTests/fast/css/parsing-css-escapes_t01: RuntimeError # Please triage this failure
LayoutTests/fast/css/parsing-css-nonascii_t01: RuntimeError # Please triage this failure
LayoutTests/fast/css/parsing-css-nth-child_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/parsing-object-fit_t01: RuntimeError # Please triage this failure
LayoutTests/fast/css/parsing-object-position_t01: RuntimeError # Please triage this failure
LayoutTests/fast/css/parsing-page-rule_t01: RuntimeError # Please triage this failure
LayoutTests/fast/css/parsing-selector-error-recovery_t01: RuntimeError # Please triage this failure
@@ -1831,7 +1836,6 @@
LayoutTests/fast/css/zoom-property-parsing_t01: RuntimeError # Please triage this failure
LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-color_t01: RuntimeError # Please triage this failure
LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-line_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-style_t01: RuntimeError # Please triage this failure
LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position_t01: RuntimeError # Please triage this failure
LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent-inherited_t01: RuntimeError # Please triage this failure
LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent_t01: RuntimeError # Please triage this failure
@@ -1956,8 +1960,6 @@
LayoutTests/fast/dom/MutationObserver/database-callback-delivery_t01: RuntimeError # Please triage this failure
LayoutTests/fast/dom/MutationObserver/observe-attributes_t01: RuntimeError # Please triage this failure
LayoutTests/fast/dom/MutationObserver/observe-childList_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/MutationObserver/observe-options-attributes_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/MutationObserver/observe-options-character-data_t01: RuntimeError # Please triage this failure
LayoutTests/fast/dom/MutationObserver/removed-out-of-order_t01: RuntimeError # Please triage this failure
LayoutTests/fast/dom/MutationObserver/weak-callback-gc-crash_t01: RuntimeError # Please triage this failure
LayoutTests/fast/dom/Node/fragment-mutation_t01: RuntimeError # Please triage this failure
@@ -2940,6 +2942,18 @@
WebPlatformTest/webstorage/storage_session_setitem_quotaexceedederr_t01: Skip # Times out. Please triage this failure
WebPlatformTest/webstorage/storage_session_setitem_t01: RuntimeError # Please triage this failure
+[ $compiler == dart2js && $runtime == ff && $system == windows ]
+LayoutTests/fast/dom/Window/window-scroll-arguments_t01: RuntimeError # Issue 22564
+WebPlatformTest/html/syntax/parsing/math-parse_t03: RuntimeError # Issue 22564
+
+[ $compiler == dart2js && $runtime == ff && $system != windows ]
+LayoutTests/fast/canvas/canvas-resetTransform_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/canvas/canvas-setTransform_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/parsing-object-fit_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-style_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/observe-options-attributes_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/MutationObserver/observe-options-character-data_t01: RuntimeError # Please triage this failure
+
[ $compiler == dart2js && $runtime == safari ]
Language/12_Expressions/00_Object_Identity/1_Object_Identity_A05_t02: RuntimeError # Please triage this failure
Language/12_Expressions/17_Getter_Invocation_A07_t02: RuntimeError # Please triage this failure
diff --git a/tests/co19/co19-dartium.status b/tests/co19/co19-dartium.status
index 77a5909..5b52c5e 100644
--- a/tests/co19/co19-dartium.status
+++ b/tests/co19/co19-dartium.status
@@ -12,6 +12,8 @@
LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow_t01: Pass, RuntimeError # Issue 21605
[ $compiler == none && ($runtime == dartium || $runtime == ContentShellOnAndroid) ]
+LayoutTests/fast/dom/fragment-activation-focuses-target_t01: Fail # Chromium 39 beta patches
+
LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: Skip # Issue 20540
LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: Skip # Issue 20540
LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: Skip # Issue 20540
@@ -828,14 +830,12 @@
LayoutTests/fast/forms/option-change-single-selected_t01: RuntimeError # co19-roll r801: Please triage this failure.
LayoutTests/fast/forms/option-strip-unicode-spaces_t01: RuntimeError # co19-roll r801: Please triage this failure.
LayoutTests/fast/forms/parser-associated-form-removal_t01: RuntimeError # co19-roll r801: Please triage this failure.
-LayoutTests/fast/forms/plaintext-mode-1_t01: RuntimeError # co19-roll r801: Please triage this failure.
LayoutTests/fast/forms/search-popup-crasher_t01: Pass, RuntimeError # co19-roll r801: Please triage this failure.
LayoutTests/fast/forms/select-change-popup-to-listbox-in-event-handler_t01: Skip # Times out. co19-roll r801: Please triage this failure.
LayoutTests/fast/forms/select-clientheight-large-size_t01: RuntimeError # co19-roll r801: Please triage this failure.
LayoutTests/fast/forms/select-clientheight-with-multiple-attr_t01: Pass, RuntimeError # co19-roll r801: Please triage this failure.
LayoutTests/fast/forms/select-list-box-mouse-focus_t01: Pass, RuntimeError # co19-roll r801: Please triage this failure.
LayoutTests/fast/forms/submit-nil-value-field-assert_t01: RuntimeError # co19-roll r801: Please triage this failure.
-LayoutTests/fast/forms/textarea-paste-newline_t01: RuntimeError # co19-roll r801: Please triage this failure.
LayoutTests/fast/forms/textarea-scrollbar-height_t01: Pass, RuntimeError # co19-roll r801: Please triage this failure.
LayoutTests/fast/forms/textfield-focus-out_t01: Skip # Times out. co19-roll r801: Please triage this failure.
LayoutTests/fast/html/select-dropdown-consistent-background-color_t01: RuntimeError # co19-roll r801: Please triage this failure.
@@ -916,7 +916,6 @@
LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t02: RuntimeError # co19-roll r801: Please triage this failure.
LayoutTests/fast/table/nested-tables-with-div-offset_t01: Pass, RuntimeError # co19-roll r801: Please triage this failure.
LayoutTests/fast/dom/getElementsByClassName/011_t01: RuntimeError # Chrome 39 roll. Please triage this failure
-LayoutTests/fast/forms/setrangetext_t01: RuntimeError # Chrome 39 roll. Please triage this failure
[ $compiler == none && ($runtime == dartium || $runtime == ContentShellOnAndroid ) && $checked ]
@@ -1041,7 +1040,9 @@
LayoutTests/fast/dom/shadow/shadowdom-for-input-type-change_t01: RuntimeError # Please triage this failure.
LayoutTests/fast/filesystem/file-writer-abort-continue_t01: Skip # Times out. Please triage this failure.
LayoutTests/fast/forms/activate-and-disabled-elements_t01: Skip # Times out. Please triage this failure.
+LayoutTests/fast/forms/plaintext-mode-1_t01: RuntimeError # co19-roll r801: Please triage this failure.
LayoutTests/fast/forms/text-set-value-crash_t01: Skip # Times out. Please triage this failure.
+LayoutTests/fast/forms/textarea-paste-newline_t01: RuntimeError # co19-roll r801 : Please triage this failure.
LayoutTests/fast/inline/continuation-inlines-inserted-in-reverse-after-block_t01: Skip # Times out. Please triage this failure.
LayoutTests/fast/inline/fixed-pos-moves-with-abspos-inline-parent_t01: Skip # Times out. Please triage this failure.
LayoutTests/fast/inline/fixed-pos-moves-with-abspos-parent-relative-ancestor_t01: Skip # Times out. Please triage this failure.
@@ -1154,6 +1155,7 @@
LayoutTests/fast/canvas/webgl/webgl-texture-binding-preserved_t01: RuntimeError # Issue 22026
LayoutTests/fast/canvas/webgl/webgl-unprefixed-context-id_t01: RuntimeError # Issue 22026
LayoutTests/fast/canvas/webgl/webgl-viewport-parameters-preserved_t01: RuntimeError # Issue 22026
+LayoutTests/fast/events/clipboard-dataTransferItemList-remove_t01: RuntimeError # Issue 22532
[ $compiler == none && ($runtime == dartium || $runtime == ContentShellOnAndroid) && $system != windows ]
LayoutTests/fast/css/font-face-unicode-range-monospace_t01: RuntimeError # co19-roll r761: Please triage this failure.
diff --git a/tests/compiler/dart2js/async_await_js_transform_test.dart b/tests/compiler/dart2js/async_await_js_transform_test.dart
index ce0cac1..ab94a56 100644
--- a/tests/compiler/dart2js/async_await_js_transform_test.dart
+++ b/tests/compiler/dart2js/async_await_js_transform_test.dart
@@ -15,8 +15,6 @@
null,
asyncHelper: new VariableUse("thenHelper"),
newCompleter: new VariableUse("Completer"),
- endOfIteration: new VariableUse("endOfIteration"),
- newIterable: new VariableUse("Iterator"),
safeVariableName: (String name) => "__$name").rewrite(fun);
JavaScriptPrintingOptions options = new JavaScriptPrintingOptions();
@@ -84,7 +82,7 @@
return 4;
}""", """
function(b) {
- var __goto = 0, __completer = new Completer(), __handler = 2, __currentError, __next, __returnValue, __helper;
+ var __goto = 0, __completer = new Completer(), __returnValue, __handler = 2, __currentError, __next, __helper;
function __body(__errorCode, __result) {
if (__errorCode === 1) {
__currentError = __result;
@@ -101,7 +99,7 @@
case 8:
// while condition
__handler = 10;
- inner: {
+ inner:
while (true) {
__next = [6];
// goto finally
@@ -109,7 +107,6 @@
break __outer1;
break;
}
- }
while (true) {
__next = [1, 4];
// goto finally
@@ -315,9 +312,9 @@
c = __result;
d = foo1() || foo2();
__temp1 = foo1();
- if (__temp1) {
+ if (__temp1)
__result = __temp1;
- } else {
+ else {
// goto then
__goto = 10;
break;
@@ -344,9 +341,9 @@
case 16:
// returning from await.
__temp1 = __result;
- if (__temp1) {
+ if (__temp1)
__result = __temp1;
- } else {
+ else {
// goto then
__goto = 14;
break;
@@ -422,9 +419,11 @@
// goto case
__goto = 9;
break;
+ default:
+ // goto after switch
+ __goto = 5;
+ break;
}
- // goto after switch
- __goto = 5;
break;
case 6:
// case
@@ -543,7 +542,7 @@
}
""", """
function(g) {
- var __goto = 0, __completer = new Completer(), __handler = 2, __currentError, __returnValue, i, __temp1;
+ var __goto = 0, __completer = new Completer(), __returnValue, __handler = 2, __currentError, i, __temp1;
function __body(__errorCode, __result) {
if (__errorCode === 1) {
__currentError = __result;
@@ -709,7 +708,7 @@
}
""", """
function(c, i) {
- var __goto = 0, __completer = new Completer(), __handler = 1, __currentError, __next, x, y, __error1, __error2;
+ var __goto = 0, __completer = new Completer(), __handler = 1, __currentError, __next, x, y, __error, __error1;
function __body(__errorCode, __result) {
if (__errorCode === 1) {
__currentError = __result;
@@ -745,14 +744,14 @@
case 3:
// catch
__handler = 2;
- __error1 = __currentError;
+ __error = __currentError;
__handler = 11;
__goto = c ? 14 : 16;
break;
case 14:
// then
__goto = 17;
- return thenHelper(fooError(__error1), __body, __completer);
+ return thenHelper(fooError(__error), __body, __completer);
case 17:
// returning from await.
// goto join
@@ -760,7 +759,7 @@
break;
case 16:
// else
- __result = fooError(__error1);
+ __result = fooError(__error);
case 15:
// join
x = __result;
@@ -771,8 +770,8 @@
case 11:
// catch
__handler = 10;
- __error2 = __currentError;
- y.x = foo(__error2);
+ __error1 = __currentError;
+ y.x = foo(__error1);
__next = [13];
// goto finally
__goto = 12;
@@ -902,7 +901,7 @@
}
}""", """
function(x, y, k) {
- var __goto = 0, __completer = new Completer(), __handler = 2, __currentError, __returnValue, __temp1;
+ var __goto = 0, __completer = new Completer(), __returnValue, __handler = 2, __currentError, __temp1;
function __body(__errorCode, __result) {
if (__errorCode === 1) {
__currentError = __result;
@@ -984,9 +983,9 @@
break;
case 14:
// case
- if (a) {
+ if (a)
throw new Error();
- } else {
+ else {
// goto while condition
__goto = 3;
break;
diff --git a/tests/compiler/dart2js/backend_dart/sexpr_unstringifier.dart b/tests/compiler/dart2js/backend_dart/sexpr_unstringifier.dart
index 1f2f263..3c982c74 100644
--- a/tests/compiler/dart2js/backend_dart/sexpr_unstringifier.dart
+++ b/tests/compiler/dart2js/backend_dart/sexpr_unstringifier.dart
@@ -424,7 +424,7 @@
Selector selector = dummySelector(methodName, args.length);
tokens.consumeEnd();
- return new InvokeStatic(entity, selector, cont, args);
+ return new InvokeStatic(entity, selector, cont, args, null);
}
/// (InvokeMethodDirectly receiver method (args) cont)
diff --git a/tests/compiler/dart2js/js_backend_cps_ir_source_information_test.dart b/tests/compiler/dart2js/js_backend_cps_ir_source_information_test.dart
new file mode 100644
index 0000000..29a42ad
--- /dev/null
+++ b/tests/compiler/dart2js/js_backend_cps_ir_source_information_test.dart
@@ -0,0 +1,149 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// VMOptions=-DUSE_CPS_IR=true
+
+// Test that the CPS IR code generator generates source information.
+
+library source_information_tests;
+
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+import 'package:compiler/src/apiimpl.dart'
+ show Compiler;
+import 'memory_compiler.dart';
+import 'package:compiler/src/cps_ir/cps_ir_nodes.dart' as ir;
+import 'package:compiler/src/cps_ir/cps_ir_nodes_sexpr.dart' as ir;
+import 'package:compiler/src/js/js.dart' as js;
+import 'package:compiler/src/common.dart' show Element, ClassElement;
+
+const String TEST_MAIN_FILE = 'test.dart';
+
+class TestEntry {
+ final String source;
+ final List<String> expectation;
+ final String elementName;
+
+ const TestEntry(this.source, this.expectation)
+ : elementName = null;
+
+ const TestEntry.forMethod(this.elementName,
+ this.source, this.expectation);
+}
+
+String formatTest(Map test) {
+ return test[TEST_MAIN_FILE];
+}
+
+js.Node getCodeForMain(Compiler compiler) {
+ Element mainFunction = compiler.mainFunction;
+ return compiler.enqueuer.codegen.generatedCode[mainFunction];
+}
+
+js.Node getJsNodeForElement(Compiler compiler,
+ Element element) {
+ return compiler.enqueuer.codegen.generatedCode[element];
+}
+
+ir.ExecutableDefinition getIrNodeForElement(Compiler compiler,
+ Element element) {
+ return compiler.irBuilder.getIr(element);
+}
+
+String getCodeForMethod(Compiler compiler,
+ String name) {
+ Element foundElement;
+ for (Element element in compiler.enqueuer.codegen.generatedCode.keys) {
+ if (element.toString() == name) {
+ if (foundElement != null) {
+ Expect.fail('Multiple compiled elements are called $name');
+ }
+ foundElement = element;
+ }
+ }
+
+ if (foundElement == null) {
+ Expect.fail('There is no compiled element called $name');
+ }
+
+ js.Node ast = compiler.enqueuer.codegen.generatedCode[foundElement];
+ return js.prettyPrint(ast, compiler).getText();
+}
+
+runTests(List<TestEntry> tests) {
+ Expect.isTrue(const bool.fromEnvironment("USE_CPS_IR"),
+ 'Run with USE_CPS_IR=true');
+
+ for (TestEntry test in tests) {
+ Map files = {TEST_MAIN_FILE: test.source};
+ asyncTest(() {
+ Compiler compiler = compilerFor(files);
+ Uri uri = Uri.parse('memory:$TEST_MAIN_FILE');
+ return compiler.run(uri).then((bool success) {
+ Expect.isTrue(success);
+
+ ir.Node irNode = getIrNodeForElement(compiler, compiler.mainFunction);
+ IrSourceInformationVisitor irVisitor = new IrSourceInformationVisitor();
+ irNode.accept(irVisitor);
+
+ js.Node jsNode = getJsNodeForElement(compiler, compiler.mainFunction);
+ JsSourceInformationVisitor jsVisitor = new JsSourceInformationVisitor();
+ jsNode.accept(jsVisitor);
+
+ List<String> expectation = test.expectation;
+ // Visiting of CPS is in structural order so we check for set equality.
+ Expect.setEquals(expectation, irVisitor.sourceInformation,
+ 'Unexpected IR source information. '
+ 'Expected:\n$expectation\n'
+ 'but found\n${irVisitor.sourceInformation}\n'
+ 'in\n${test.source}'
+ 'CPS:\n${irNode.accept(new ir.SExpressionStringifier())}');
+ Expect.listEquals(expectation, jsVisitor.sourceInformation,
+ 'Unexpected JS source information. '
+ 'Expected:\n$expectation\n'
+ 'but found\n${jsVisitor.sourceInformation}\n'
+ 'in\n${test.source}');
+ }).catchError((e) {
+ print(e);
+ Expect.fail('The following test failed to compile:\n'
+ '${formatTest(files)}');
+ });
+ });
+ }
+}
+
+class JsSourceInformationVisitor extends js.BaseVisitor {
+ List<String> sourceInformation = <String>[];
+
+ @override
+ visitCall(js.Call node) {
+ sourceInformation.add('${node.sourceInformation}');
+ super.visitCall(node);
+ }
+}
+
+class IrSourceInformationVisitor extends ir.RecursiveVisitor {
+ List<String> sourceInformation = <String>[];
+
+ @override
+ processInvokeStatic(ir.InvokeStatic node) {
+ sourceInformation.add('${node.sourceInformation}');
+ }
+}
+
+const List<TestEntry> tests = const [
+ const TestEntry("""
+main() { print('Hello World'); }
+""", const ['memory:test.dart:[1,10]']),
+const TestEntry("""
+main() {
+ print('Hello');
+ print('World');
+}
+""", const ['memory:test.dart:[2,3]',
+ 'memory:test.dart:[3,3]']),
+];
+
+void main() {
+ runTests(tests);
+}
diff --git a/tests/compiler/dart2js/js_parser_statements_test.dart b/tests/compiler/dart2js/js_parser_statements_test.dart
index e9bc2e1..2c12440 100644
--- a/tests/compiler/dart2js/js_parser_statements_test.dart
+++ b/tests/compiler/dart2js/js_parser_statements_test.dart
@@ -133,6 +133,7 @@
{'a': false, 'b': block12},
'{\n 1;\n 2;\n}'),
+
testStatement('while (#) #', [eOne, block12], 'while (1) {\n 1;\n 2;\n}'),
testStatement('while (#) #;', [eTrue, block12],
'while (true) {\n 1;\n 2;\n}'),
@@ -143,9 +144,9 @@
testStatement('while (#) #;', ['a', stm],
'while (a)\n foo();'),
- testStatement(
- 'do { {print(1);} do while(true); while (false) } while ( true )', [],
- '''
+ testStatement(
+ 'do { {print(1);} do while(true); while (false) } while ( true )', [],
+ '''
do {
print(1);
do
@@ -323,7 +324,7 @@
'};'),
testStatement('label: while (a) { label2: break label;}', [],
- 'label:\n while (a) {\n label2:\n break label;\n }'),
+ 'label:\n while (a)\n label2:\n break label;\n '),
testStatement('var # = 3', ['x'], 'var x = 3;'),
@@ -345,5 +346,58 @@
testStatement('try {} catch (#a) {}',
{"a": new jsAst.VariableDeclaration('x')},
'try {\n} catch (x) {\n}'),
+
+ // Test that braces around a single-statement block are removed by printer.
+ testStatement('while (a) {foo()}', [],
+ 'while (a)\n foo();'),
+ testStatement('if (a) {foo();}', [],
+ 'if (a)\n foo();'),
+ testStatement('if (a) {foo();} else {foo2();}', [],
+ 'if (a)\n foo();\nelse\n foo2();'),
+ testStatement('if (a) foo(); else {foo2();}', [],
+ 'if (a)\n foo();\nelse\n foo2();'),
+ testStatement('do {foo();} while(a);', [],
+ 'do\n foo();\nwhile (a);'),
+ testStatement('label: {foo();}', [],
+ 'label:\n foo();'),
+ testStatement('for (var key in a) {foo();}', [],
+ 'for (var key in a)\n foo();'),
+ // `label: break label;` gives problems on IE. Test that it is avoided.
+ testStatement('label: {break label;}', [],
+ ';'),
+ // This works on IE:
+ testStatement('label: {label2: {break label;}}', [],
+ 'label:\n label2:\n break label;\n'),
+ // Test dangling else:
+ testStatement('if (a) {if (b) {foo1();}} else {foo2();}', [], """
+if (a) {
+ if (b)
+ foo1();
+} else
+ foo2();"""),
+ testStatement('if (a) {if (b) {foo1();} else {foo2();}}', [], """
+if (a)
+ if (b)
+ foo1();
+ else
+ foo2();
+"""),
+ testStatement('if (a) {if (b) {foo1();} else {foo2();}} else {foo3();}',
+ [], """
+if (a)
+ if (b)
+ foo1();
+ else
+ foo2();
+else
+ foo3();"""),
+ testStatement('if (a) {while (true) if (b) {foo1();}} else {foo2();}',
+ [], """
+if (a) {
+ while (true)
+ if (b)
+ foo1();
+} else
+ foo2();"""),
]));
}
diff --git a/tests/compiler/dart2js/mirrors_used_test.dart b/tests/compiler/dart2js/mirrors_used_test.dart
index 2d26968..653135f 100644
--- a/tests/compiler/dart2js/mirrors_used_test.dart
+++ b/tests/compiler/dart2js/mirrors_used_test.dart
@@ -85,8 +85,7 @@
compiler.listClass
];
JavaScriptBackend backend = compiler.backend;
- Iterable<String> nativeNames =
- nativeClasses.map(backend.namer.getNameOfClass);
+ Iterable<String> nativeNames = nativeClasses.map(backend.namer.className);
expectedNames.addAll(nativeNames);
Set recordedNames = new Set()
diff --git a/tests/compiler/dart2js/mock_libraries.dart b/tests/compiler/dart2js/mock_libraries.dart
index ffa2dab..126a33e 100644
--- a/tests/compiler/dart2js/mock_libraries.dart
+++ b/tests/compiler/dart2js/mock_libraries.dart
@@ -365,7 +365,12 @@
const Map<String, String> DEFAULT_ASYNC_LIBRARY = const <String, String>{
'DeferredLibrary': 'class DeferredLibrary {}',
- 'Future': 'class Future<T> {}',
+ 'Future':
+ '''
+ class Future<T> {
+ Future.value([value]);
+ }
+ ''',
'Stream': 'class Stream<T> {}',
'Completer': 'class Completer<T> {}',
'StreamIterator': 'class StreamIterator<T> {}',
diff --git a/tests/compiler/dart2js/type_checker_test.dart b/tests/compiler/dart2js/type_checker_test.dart
index adf7513..1d717e5 100644
--- a/tests/compiler/dart2js/type_checker_test.dart
+++ b/tests/compiler/dart2js/type_checker_test.dart
@@ -55,7 +55,8 @@
testTypePromotionHints,
testFunctionCall,
testCascade,
- testAwait];
+ testAwait,
+ testAsyncReturn];
asyncTest(() => Future.forEach(tests, (test) => setup(test)));
}
@@ -2032,6 +2033,50 @@
NOT_ASSIGNABLE);
}
+testAsyncReturn(MockCompiler compiler) {
+ Future check(String code, [expectedWarnings]) {
+ return analyzeTopLevel(code, expectedWarnings);
+ }
+ return Future.wait([
+ check("Future<int> foo() async { return; }", MessageKind.RETURN_NOTHING),
+ check("Future<int> foo() async { return null; }"),
+ check("Future<int> foo() async { return 0; }"),
+ check("Future<int> foo() async { return ''; }", NOT_ASSIGNABLE),
+ check("Future<int> foo() async { return new Future.value(); }"),
+ check("Future<int> foo() async { return new Future<int>.value(); }"),
+ check("Future<int> foo() async { return new Future<String>.value(); }",
+ NOT_ASSIGNABLE),
+ check("""
+ Future<int> foo() async { return new Future<Future<int>>.value(); }
+ """),
+ check("void foo() async { return; }"),
+ check("void foo() async { return 0; }", MessageKind.RETURN_VALUE_IN_VOID),
+ check("void foo() async { return new Future.value(); }",
+ MessageKind.RETURN_VALUE_IN_VOID),
+ check("int foo() async { return; }", MessageKind.RETURN_NOTHING),
+ check("int foo() async { return 0; }", NOT_ASSIGNABLE),
+ check("int foo() async { return new Future<int>.value(); }",
+ NOT_ASSIGNABLE),
+
+ check("Future<int> foo() async => null;"),
+ check("Future<int> foo() async => 0;"),
+ check("Future<int> foo() async => '';", NOT_ASSIGNABLE),
+ check("Future<int> foo() async => new Future.value();"),
+ check("Future<int> foo() async => new Future<int>.value();"),
+ check("Future<int> foo() async => new Future<String>.value();",
+ NOT_ASSIGNABLE),
+ check("""
+ Future<int> foo() async => new Future<Future<int>>.value();
+ """),
+ check("void foo() async => 0;", MessageKind.RETURN_VALUE_IN_VOID),
+ check("void foo() async => new Future.value();",
+ MessageKind.RETURN_VALUE_IN_VOID),
+ check("int foo() async => 0;", NOT_ASSIGNABLE),
+ check("int foo() async => new Future<int>.value();",
+ NOT_ASSIGNABLE),
+ ]);
+}
+
const CLASS_WITH_METHODS = '''
typedef int String2Int(String s);
@@ -2131,7 +2176,7 @@
MockCompiler compiler = new MockCompiler.internal();
compiler.diagnosticHandler = createHandler(compiler, text);
- return compiler.init().then((_) {
+ return compiler.init("import 'dart:async';").then((_) {
LibraryElement library = compiler.mainApp;
Link<Element> topLevelElements =
diff --git a/tests/compiler/dart2js_native/event_loop_test.dart b/tests/compiler/dart2js_native/event_loop_test.dart
new file mode 100644
index 0000000..d7ae5f4
--- /dev/null
+++ b/tests/compiler/dart2js_native/event_loop_test.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "dart:_js_helper";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+typedef void Callback0();
+
+@Native("A")
+class A {
+ foo(Callback0 f) native;
+}
+
+makeA() native;
+
+void setup() native r"""
+function A() {}
+A.prototype.foo = function(f) { return f(); };
+makeA = function() { return new A; };
+""";
+
+main() {
+ setup();
+
+ // Makes sure that we don't run the event-loop when we have a reentrant
+ // call from JS to Dart code.
+ // We start by setting up a microtask that should only run after main has
+ // finished. We then pass a closure into JavaScript. That closure is
+ // immediately invoked. Dart2js had a bug, that it would start the event-loop
+ // at this moment (a JS->Dart transition), and execute the scheduled
+ // microtask.
+
+ var events = [];
+ asyncStart();
+ var a = makeA();
+ new Future.microtask(() { events.add("scheduleMicrotask"); })
+ .whenComplete(asyncEnd);
+
+ Expect.equals(499, a.foo(() {
+ events.add("closure to foo");
+ return 499;
+ }));
+
+ events.add("after native call");
+ Expect.listEquals(["closure to foo", "after native call"], events);
+}
diff --git a/tests/compiler/dart2js_native/static_methods_test.dart b/tests/compiler/dart2js_native/static_methods_test.dart
new file mode 100644
index 0000000..e330682
--- /dev/null
+++ b/tests/compiler/dart2js_native/static_methods_test.dart
@@ -0,0 +1,70 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Accessing static native methods names:
+// plain declaration -> use @Native tag as 'scope' for declared name.
+// identifier @JSName -> use @Native tag as 'scope' for @JSName.
+// other @JSName -> use @JSName as an expression.
+
+import "package:expect/expect.dart";
+import 'dart:_js_helper' show Native, JSName, convertDartClosureToJS;
+
+
+typedef int Callback(String s);
+
+@Native("CC") // Tag can be different to class name.
+class AA {
+ // This name is not an identifier, so completely defines how to access method.
+ @JSName('CC.foo')
+ static int foo(String s) native;
+
+ // This name is not an identifier, so completely defines how to access method.
+ @JSName('CC.bar')
+ static int bar(Callback c) native;
+ static int baz(Callback c) { return bar(c); }
+
+ // Compiler should automatically use the tag and the declared name, i.e. call
+ // `CC.lepton`.
+ static int lepton(Callback c) native;
+ static int electron(c) => lepton(c);
+
+ // Compiler should automatically use the tag and JSName, i.e. call
+ // `CC.baryon`.
+ @JSName('baryon')
+ static int _baryon(Callback c) native;
+ static int proton(c) => _baryon(c);
+}
+
+void setup() native r"""
+// This code is all inside 'setup' and so not accessible from the global scope.
+
+function CC(){}
+
+CC.foo = function(s) { return s.length; }
+CC.bar = function(f) { return f("Bye"); }
+CC.lepton = function(f) { return f("Lepton"); }
+CC.baryon = function(f) { return f("three quarks"); }
+
+self.CC = CC;
+""";
+
+main() {
+ setup();
+
+ // TODO(sra): Investigate why this line is necessary to get a correctly
+ // compiled convertDartClosureToJS. Without this line, the compiler crashes.
+ convertDartClosureToJS(main, 1);
+
+ Expect.equals(5, AA.foo("Hello"));
+
+ Expect.equals(3, AA.bar((s) => s.length));
+ Expect.equals(3, AA.baz((s) => s.length));
+
+ Expect.equals(6, AA.lepton((s) => s.length));
+ Expect.equals(6, AA.electron((s) => s.length));
+
+ Expect.equals(12, AA._baryon((s) => s.length));
+ Expect.equals(12, AA.proton((s) => s.length));
+ Expect.throws(() => AA.baryon((s) => s.length)); // Not defined on AA.
+}
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index c5b1d81..cfa07db 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -213,6 +213,7 @@
list_removeat_test: fail
[ $compiler == dartanalyzer || $compiler == dart2analyzer ]
+hash_set_type_check_test: StaticWarning, OK # Tests failing type tests.
error_stack_trace_test: StaticWarning, OK # Test generates errors on purpose.
iterable_element_at_test: StaticWarning, OK # Test generates errors on purpose.
num_clamp_test: StaticWarning, OK # Test generates errors on purpose.
diff --git a/tests/corelib/hash_set_type_check_test.dart b/tests/corelib/hash_set_type_check_test.dart
new file mode 100644
index 0000000..1e21c95
--- /dev/null
+++ b/tests/corelib/hash_set_type_check_test.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests of hash set type checking.
+
+library hash_set_type_check_test;
+import "package:expect/expect.dart";
+import 'dart:collection';
+
+testSet(Set<String> newSet()) {
+ Set<String> s = newSet();
+ Expect.throws(() => s.add(1), (e) => e is Error);
+ Expect.isNull(s.lookup(1));
+}
+
+
+void testIdentitySet(Set create()) {
+ Set<String> s = create();
+ Expect.throws(() => s.add(1), (e) => e is Error);
+ Expect.isNull(s.lookup(1));
+}
+
+
+bool get inCheckedMode {
+ try {
+ var i = 1;
+ String j = i;
+ } catch (_) {
+ return true;
+ }
+ return false;
+}
+
+
+void main() {
+ if (!inCheckedMode) return;
+
+ testSet(() => new Set<String>());
+ testSet(() => new HashSet<String>());
+ testSet(() => new LinkedHashSet<String>());
+ testIdentitySet(() => new Set<String>.identity());
+ testIdentitySet(() => new HashSet<String>.identity());
+ testIdentitySet(() => new LinkedHashSet<String>.identity());
+ testIdentitySet(() => new HashSet<String>(equals: (x, y) => identical(x, y),
+ hashCode: (x) => identityHashCode(x)));
+ testIdentitySet(
+ () => new LinkedHashSet<String>(equals: (x, y) => identical(x, y),
+ hashCode: (x) => identityHashCode(x)));
+}
diff --git a/tests/corelib/string_replace_test.dart b/tests/corelib/string_replace_test.dart
index b8486ae..3e53efd 100644
--- a/tests/corelib/string_replace_test.dart
+++ b/tests/corelib/string_replace_test.dart
@@ -210,6 +210,29 @@
var n = new Naughty();
Expect.throws(
() => "foo-bar".replaceFirstMapped("bar", (v) { return n; }));
+
+ for (var string in ["", "x", "foo", "x\u2000z"]) {
+ for (var replacement in ["", "foo", string]) {
+ for (int start = 0; start <= string.length; start++) {
+ var expect;
+ for (int end = start; end <= string.length; end++) {
+ expect = string.substring(0, start) +
+ replacement +
+ string.substring(end);
+ Expect.equals(expect, string.replaceRange(start, end, replacement),
+ '"$string"[$start:$end]="$replacement"');
+ }
+ // Reuse expect from "end == string.length" case when omitting end.
+ Expect.equals(expect, string.replaceRange(start, null, replacement),
+ '"$string"[$start:]="$replacement"');
+ }
+ }
+ Expect.throws(() => string.replaceRange(0, 0, null));
+ Expect.throws(() => string.replaceRange(0, 0, 42));
+ Expect.throws(() => string.replaceRange(0, 0, ["x"]));
+ Expect.throws(() => string.replaceRange(-1, 0, "x"));
+ Expect.throws(() => string.replaceRange(0, string.length + 1, "x"));
+ }
}
// Fails to return a String on toString, throws if converted by "$naughty".
diff --git a/tests/html/css_test.dart b/tests/html/css_test.dart
index fe2837f..bb3b914 100644
--- a/tests/html/css_test.dart
+++ b/tests/html/css_test.dart
@@ -27,6 +27,7 @@
top: 0px;
background-color: red;
-webkit-transform: translate3d(250px, 100px, 0px);
+ -moz-transform: translate3d(250px, 100px, 0px);
''';
document.body.append(element);
diff --git a/tests/html/custom_element_method_clash_test.dart b/tests/html/custom_element_method_clash_test.dart
new file mode 100644
index 0000000..c3f8a00
--- /dev/null
+++ b/tests/html/custom_element_method_clash_test.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library custom_elements_method_clash;
+
+import 'dart:async';
+import 'dart:html';
+import 'package:unittest/html_individual_config.dart';
+import 'package:unittest/unittest.dart';
+import 'utils.dart';
+
+class CustomElement extends HtmlElement {
+ factory CustomElement() => new Element.tag('x-custom');
+
+ CustomElement.created() : super.created() {
+ }
+
+ // Try to clash with native 'appendChild' method.
+ void appendChild() {
+ throw 'Gotcha!';
+ }
+}
+
+main() {
+ useHtmlIndividualConfiguration();
+
+ setUp(() => customElementsReady);
+
+ group('test', () {
+ test('test', () {
+ document.registerElement('x-custom', CustomElement);
+ CustomElement custom = new CustomElement();
+ document.body.children.add(custom);
+
+ // Will call appendChild in JS.
+ custom.children.add(new DivElement()..text = 'Hello world!');
+
+ try {
+ custom.appendChild(); // Make sure method is not tree shaken.
+ fail('appendChild did not throw');
+ } catch(e) {
+ expect(e, equals('Gotcha!'));
+ }
+ });
+ });
+}
diff --git a/tests/html/custom_element_method_clash_test.html b/tests/html/custom_element_method_clash_test.html
new file mode 100644
index 0000000..a5e9625
--- /dev/null
+++ b/tests/html/custom_element_method_clash_test.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="dart.unittest" content="full-stack-traces">
+ <title> custom_element_method_clash_test </title>
+ <style>
+ .unittest-table { font-family:monospace; border:1px; }
+ .unittest-pass { background: #6b3;}
+ .unittest-fail { background: #d55;}
+ .unittest-error { background: #a11;}
+ </style>
+ <script src="/packages/web_components/webcomponents.js"></script>
+ <script src="/packages/web_components/dart_support.js"></script>
+</head>
+<body>
+ <h1> Running custom_element_method_clash_test </h1>
+ <script type="text/javascript"
+ src="/root_dart/tools/testing/dart/test_controller.js"></script>
+ %TEST_SCRIPTS%
+</body>
+</html>
diff --git a/tests/html/custom_element_name_clash_test.dart b/tests/html/custom_element_name_clash_test.dart
new file mode 100644
index 0000000..190ed0e
--- /dev/null
+++ b/tests/html/custom_element_name_clash_test.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library custom_elements_name_clash;
+
+
+import 'dart:async';
+import 'dart:html';
+import 'package:unittest/html_individual_config.dart';
+import 'package:unittest/unittest.dart';
+import 'utils.dart';
+
+
+class CustomElement extends HtmlElement {
+ factory CustomElement() => new Element.tag('x-custom');
+
+ CustomElement.created() : super.created() {
+ }
+
+ // Try to clash with native 'appendChild' method.
+ var appendChild = 123;
+}
+
+main() {
+ useHtmlIndividualConfiguration();
+
+ setUp(() => customElementsReady);
+
+ group('test', () {
+ test('test', () {
+ document.registerElement('x-custom', CustomElement);
+ CustomElement custom = new CustomElement();
+ document.body.children.add(custom);
+ // Will call appendChild in JS.
+ custom.children.add(new DivElement()..text = 'Hello world!');
+ });
+ });
+}
diff --git a/tests/html/custom_element_name_clash_test.html b/tests/html/custom_element_name_clash_test.html
new file mode 100644
index 0000000..f414794
--- /dev/null
+++ b/tests/html/custom_element_name_clash_test.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="dart.unittest" content="full-stack-traces">
+ <title> custom_element_name_clash_test </title>
+ <style>
+ .unittest-table { font-family:monospace; border:1px; }
+ .unittest-pass { background: #6b3;}
+ .unittest-fail { background: #d55;}
+ .unittest-error { background: #a11;}
+ </style>
+ <script src="/packages/web_components/webcomponents.js"></script>
+ <script src="/packages/web_components/dart_support.js"></script>
+</head>
+<body>
+ <h1> Running custom_element_name_clash_test </h1>
+ <script type="text/javascript"
+ src="/root_dart/tools/testing/dart/test_controller.js"></script>
+ %TEST_SCRIPTS%
+</body>
+</html>
diff --git a/tests/html/html.status b/tests/html/html.status
index 68f0451..9c82cc1 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -41,9 +41,9 @@
[ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
# postMessage in dartium always transfers the typed array buffer, never a view
postmessage_structured_test/typed_arrays: Fail
-# Dartium seems to lose the data from the dispatchEvent.
+# Dartium seems to lose the data from the dispatchEvent.
postmessage_structured_test/more_primitives: Fail
-async_test: Fail # Background timers not implemented.
+async_test: Fail # Uses spawn, not implemented from a DOM isolate in Dartium
keyboard_event_test: Fail # Issue 13902
isolates_test: Fail # Issue 13921
indexeddb_3_test: Skip # Issue 19578. Timeouts and RuntimeError
@@ -113,6 +113,10 @@
websql_test: Fail, Pass # Issue 4941: stderr contains a backtrace.
native_gc_test: Pass, Slow
+[$runtime == chrome && $compiler == dart2js && $system == macos]
+transition_event_test/functional: Skip # Times out. Issue
+request_animation_frame_test: Skip # Times out. Issue
+
[$runtime == ie10 || $runtime == ie11]
indexeddb_5_test: Fail # Issue 12893
js_test: Fail # Issue 14246
@@ -176,6 +180,10 @@
worker_test/functional: Fail # IE uses incorrect security context for Blob URIs.
transferables_test: Fail # Issue 9846
+[ $compiler == dart2js && $runtime == chrome ]
+css_test/supportsPointConversions: Fail # Issues 21710
+css_test/functional: Fail # Issues 21710
+
[ $runtime == ie11 ]
custom/document_register_type_extensions_test/single-parameter: Fail # Issue 13193.
canvasrenderingcontext2d_test/arc: Pass, Fail # Pixel unexpected value. Please triage this failure.
@@ -321,7 +329,6 @@
# Firefox Feature support statuses-
# All changes should be accompanied by platform support annotation changes.
-css_test/supportsPointConversions: Fail
document_test/supports_cssCanvasContext: Fail
element_types_test/supported_details: Fail
element_types_test/supported_embed: Fail
@@ -362,11 +369,10 @@
[ $compiler == dart2js && ($runtime == drt || $runtime ==chrome) ]
wheelevent_test: Fail # Issue 12958
-[ $compiler == dart2js && ($runtime == chrome || $runtime == drt) && ($system == windows || $system == linux)]
-css_test/functional: Fail # Issue 21710
-css_test/supportsPointConversions: Fail # Issue 21710
+[ $compiler == dart2js && $runtime == ff && $system == windows ]
+node_validator_test: Fail # Issue 22564
-[ $compiler == dart2js && $runtime == chrome && $system == windows]
+[ $compiler == dart2js && $runtime == chrome]
svgelement_test/supported_altGlyph: RuntimeError # Issue 22154
[ $runtime == dartium && ($system == macos || $system == windows || $system == linux)]
@@ -377,9 +383,11 @@
xhr_test/xhr: Skip # Times out. Issue 21527
[ $compiler == none && $runtime == dartium ]
-async_test: Timeout # Issue 13719: Please triage this failure.
element_offset_test/offset: Pass, Fail # Issue 13719, 13296
+[ $runtime == chrome && $system == macos && $compiler == dart2js]
+element_offset_test/offset: RuntimeError # Issue 22619
+
[ $compiler == dartanalyzer || $compiler == dart2analyzer ]
custom/document_register_basic_test: StaticWarning
custom/element_upgrade_test: StaticWarning
diff --git a/tests/language/async_finally_rethrow_test.dart b/tests/language/async_finally_rethrow_test.dart
new file mode 100644
index 0000000..b3a69bb
--- /dev/null
+++ b/tests/language/async_finally_rethrow_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "package:expect/expect.dart";
+
+foo() async {
+ try {
+ await 1;
+ throw "error";
+ } on String catch (e) {
+ await 2;
+ throw e;
+ } finally {
+ await 3;
+ }
+}
+
+main() async {
+ var error = "no error";
+ try {
+ await foo();
+ } catch (e) {
+ error = e;
+ }
+ Expect.equals("error", error);
+}
+
diff --git a/tests/language/async_switch_test.dart b/tests/language/async_switch_test.dart
new file mode 100644
index 0000000..5e70ad6
--- /dev/null
+++ b/tests/language/async_switch_test.dart
@@ -0,0 +1,73 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+foo1(a) async {
+ int k = 0;
+ switch(a) {
+ case 1:
+ await 3;
+ k += 1;
+ break;
+ case 2:
+ k += a;
+ return k+2;
+ default: k = 2; /// withDefault: ok
+ }
+ return k;
+}
+
+foo2(a) async {
+ int k = 0;
+ switch(await a) {
+ case 1:
+ await 3;
+ k += 1;
+ break;
+ case 2:
+ k += await a;
+ return k+2;
+ default: k = 2; /// withDefault: ok
+ }
+ return k;
+}
+
+foo3(a) async {
+ int k = 0;
+ switch(a) {
+ case 1:
+ k += 1;
+ break;
+ case 2:
+ k += a;
+ return k+2;
+ default: k = 2; /// withDefault: ok
+ }
+ return k;
+}
+
+futureOf(a) async => await a;
+
+test() async {
+ Expect.equals(1, await foo1(1));
+ Expect.equals(4, await foo1(2));
+ Expect.equals(2, await foo1(3)); /// withDefault: ok
+ Expect.equals(0, await foo1(3)); /// none: ok
+ Expect.equals(1, await foo2(futureOf(1)));
+ Expect.equals(4, await foo2(futureOf(2)));
+ Expect.equals(2, await foo2(futureOf(3))); /// withDefault: ok
+ Expect.equals(0, await foo2(futureOf(3))); /// none: ok
+ Expect.equals(1, await foo3(1));
+ Expect.equals(4, await foo3(2));
+ Expect.equals(2, await foo3(3)); /// withDefault: ok
+ Expect.equals(0, await foo3(3)); /// none: ok
+}
+
+void main() {
+ asyncStart();
+ test().then((_) => asyncEnd());
+}
\ No newline at end of file
diff --git a/tests/language/await_for_use_local_test.dart b/tests/language/await_for_use_local_test.dart
new file mode 100644
index 0000000..de131bb
--- /dev/null
+++ b/tests/language/await_for_use_local_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+sumStream(s) async {
+ int accum = 0;
+ await for (var v in s) {
+ accum += v;
+ }
+ return accum;
+}
+
+test() async {
+ var countStreamController;
+ int i = 0;
+ void tick() {
+ if (i < 10) {
+ countStreamController.add(i);
+ i++;
+ scheduleMicrotask(tick);
+ } else {
+ countStreamController.close();
+ }
+ }
+
+ countStreamController = new StreamController(
+ onListen: () {
+ scheduleMicrotask(tick);
+ });
+ Expect.equals(45, await sumStream(countStreamController.stream));
+}
+
+void main() {
+ asyncStart();
+ test().then((_) => asyncEnd());
+}
\ No newline at end of file
diff --git a/tests/language/constructor12_test.dart b/tests/language/constructor12_test.dart
new file mode 100644
index 0000000..2853992
--- /dev/null
+++ b/tests/language/constructor12_test.dart
@@ -0,0 +1,65 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class B {
+ final z;
+ B(this.z);
+
+ foo() => this.z;
+}
+
+class A<T> extends B {
+ var captured, captured2;
+ var typedList;
+
+ // p must be inside a box (in dart2js).
+ A(p) : captured = (() => p), super(p++) {
+ // Make non-inlinable.
+ try {} catch(e) {}
+
+ captured2 = () => p++;
+
+ // In the current implementation of dart2js makes the generic type an
+ // argument to the body.
+ typedList = <T>[];
+ }
+
+ foo() => captured();
+ bar() => captured2();
+}
+
+@NoInline()
+@AssumeDynamic()
+confuse(x) => x;
+
+main() {
+ var a = confuse(new A<int>(1));
+ var a2 = confuse(new A(2));
+ var b = confuse(new B(3));
+ Expect.equals(2, a.foo());
+ Expect.equals(3, a2.foo());
+ Expect.equals(3, b.foo());
+ Expect.equals(1, a.z);
+ Expect.equals(2, a2.z);
+ Expect.equals(3, b.z);
+ Expect.isTrue(a is A<int>);
+ Expect.isFalse(a is A<String>);
+ Expect.isTrue(a2 is A<int>);
+ Expect.isTrue(a2 is A<String>);
+ Expect.equals(2, a.bar());
+ Expect.equals(3, a2.bar());
+ Expect.equals(3, a.foo());
+ Expect.equals(4, a2.foo());
+ Expect.equals(0, a.typedList.length);
+ Expect.equals(0, a2.typedList.length);
+ a.typedList.add(499);
+ Expect.equals(1, a.typedList.length);
+ Expect.equals(0, a2.typedList.length);
+ Expect.isTrue(a.typedList is List<int>);
+ Expect.isTrue(a2.typedList is List<int>);
+ Expect.isFalse(a.typedList is List<String>);
+ Expect.isTrue(a2.typedList is List<String>);
+}
diff --git a/tests/language/constructor_name_clash_lib.dart b/tests/language/constructor_name_clash_lib.dart
new file mode 100644
index 0000000..46ea6c0
--- /dev/null
+++ b/tests/language/constructor_name_clash_lib.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library lib;
+
+var global = 0;
+
+class A {
+ A() {
+ global += 10;
+ try {} catch(e) {} // no inline
+ }
+}
diff --git a/tests/language/constructor_name_clash_test.dart b/tests/language/constructor_name_clash_test.dart
new file mode 100644
index 0000000..80273cc
--- /dev/null
+++ b/tests/language/constructor_name_clash_test.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+import 'constructor_name_clash_lib.dart' as lib;
+
+class A extends lib.A {
+ A() {
+ lib.global += 100;
+ try {} catch(e) {} // no inline
+ }
+}
+
+main() {
+ new A();
+ Expect.equals(110, lib.global);
+}
diff --git a/tests/language/deferred_shared_and_unshared_classes_lib1.dart b/tests/language/deferred_shared_and_unshared_classes_lib1.dart
new file mode 100644
index 0000000..92718b1
--- /dev/null
+++ b/tests/language/deferred_shared_and_unshared_classes_lib1.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library lib1;
+
+import "deferred_shared_and_unshared_classes_lib_shared.dart";
+
+foo() {
+ print(new C1());
+ print(new CShared());
+}
\ No newline at end of file
diff --git a/tests/language/deferred_shared_and_unshared_classes_lib2.dart b/tests/language/deferred_shared_and_unshared_classes_lib2.dart
new file mode 100644
index 0000000..fc57e7e
--- /dev/null
+++ b/tests/language/deferred_shared_and_unshared_classes_lib2.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library lib2;
+
+import "deferred_shared_and_unshared_classes_lib_shared.dart";
+
+foo() {
+ print(new C2());
+ print(new CShared());
+}
diff --git a/tests/language/deferred_shared_and_unshared_classes_lib_shared.dart b/tests/language/deferred_shared_and_unshared_classes_lib_shared.dart
new file mode 100644
index 0000000..d5375df
--- /dev/null
+++ b/tests/language/deferred_shared_and_unshared_classes_lib_shared.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library shared;
+
+class CShared {
+ toString() => "shared";
+}
+
+class C1 {
+ toString() => "C1";
+}
+
+class C2 {
+ toString() => "C2";
+}
\ No newline at end of file
diff --git a/tests/language/deferred_shared_and_unshared_classes_test.dart b/tests/language/deferred_shared_and_unshared_classes_test.dart
new file mode 100644
index 0000000..a442f93
--- /dev/null
+++ b/tests/language/deferred_shared_and_unshared_classes_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+import "deferred_shared_and_unshared_classes_lib1.dart" deferred as lib1;
+import "deferred_shared_and_unshared_classes_lib2.dart" deferred as lib2;
+import "dart:async";
+
+void main() {
+ asyncTest(() {
+ return Future.wait([
+ lib1.loadLibrary().then((_) {
+ lib1.foo();
+ }),
+ lib2.loadLibrary().then((_) {
+ lib2.foo();
+ })]);
+ });
+}
\ No newline at end of file
diff --git a/tests/language/deferred_static_seperate_test.dart b/tests/language/deferred_static_seperate_test.dart
index f1b4986..f5e59f0 100644
--- a/tests/language/deferred_static_seperate_test.dart
+++ b/tests/language/deferred_static_seperate_test.dart
@@ -8,12 +8,15 @@
// Similarly for C2, ..., C5.
import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
import "deferred_static_seperate_lib1.dart" deferred as lib1;
import "deferred_static_seperate_lib2.dart" deferred as lib2;
void main() {
+ asyncStart();
lib1.loadLibrary().then((_) {
lib2.loadLibrary().then((_) {
+ print("HERE");
Expect.equals(1, new lib1.C().bar());
var x = new lib1.C2();
Expect.mapEquals({1: 2}, x.bar);
@@ -25,6 +28,7 @@
Expect.equals(1, new lib1.C5().bar());
lib2.foo();
+ asyncEnd();
});
});
}
\ No newline at end of file
diff --git a/tests/language/is_operator_clash_test.dart b/tests/language/is_operator_clash_test.dart
new file mode 100644
index 0000000..4ce959e
--- /dev/null
+++ b/tests/language/is_operator_clash_test.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class A {
+}
+
+class $B extends A {
+}
+
+class C implements $B {
+ // Try to clash with dart2js's isCLASS field.
+ var isB = false;
+ var $isB = false;
+ var is$B = false;
+ var is$$B = false;
+ var $is$B = false;
+
+ var isA = false;
+ var $isA = false;
+ var is$A = false;
+ var is$$A = false;
+ var $is$A = false;
+}
+
+int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1));
+
+main() {
+ var things = [new A(), new $B(), new C()];
+
+ var a = things[inscrutable(0)];
+ Expect.isTrue(a is A);
+ Expect.isFalse(a is $B);
+ Expect.isFalse(a is C);
+
+ var b = things[inscrutable(1)];
+ Expect.isTrue(b is A);
+ Expect.isTrue(b is $B);
+ Expect.isFalse(b is C);
+
+ var c = things[inscrutable(2)];
+ Expect.isTrue(c is A);
+ Expect.isTrue(c is $B);
+ Expect.isTrue(c is C);
+}
diff --git a/tests/language/issue13179_test.dart b/tests/language/issue13179_test.dart
new file mode 100644
index 0000000..0439cea
--- /dev/null
+++ b/tests/language/issue13179_test.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+int count = 0;
+
+void f([void f([x]) = f]) {
+ count++;
+ if (f != null) {
+ f(null);
+ }
+}
+
+main() {
+ f();
+ Expect.equals(2, count);
+}
diff --git a/tests/language/language.status b/tests/language/language.status
index d306d89..98c131d 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -8,9 +8,6 @@
[ $compiler == none ]
built_in_identifier_prefix_test: Fail # Issue 6970
await_for_cancel_test: RuntimeError # Issue 21404
-asyncstar_yield_test: Fail # Issue 21404
-asyncstar_yieldstar_test: Fail # Issue 21404
-asyncstar_concat_test: Fail # Issue 21404
# These bugs refer currently ongoing language discussions.
constructor_initializer_test/none: Fail # Issue 12633
@@ -44,46 +41,13 @@
cyclic_type2_test: Fail, OK
least_upper_bound_expansive_test/*: Fail, OK
-
-async_await_syntax_test/a09a: CompileTimeError # Issue 21404
-async_await_syntax_test/a10a: CompileTimeError # Issue 21404
-async_await_syntax_test/b09a: CompileTimeError # Issue 21404
-async_await_syntax_test/b10a: CompileTimeError # Issue 21404
-async_await_syntax_test/c09a: CompileTimeError # Issue 21404
-async_await_syntax_test/c10a: CompileTimeError # Issue 21404
-async_await_syntax_test/d09a: CompileTimeError # Issue 21404
-async_await_syntax_test/d10a: CompileTimeError # Issue 21404
-
[ $compiler == none || ($compiler == dart2dart && $builder_tag != new_backend) ]
-async_throw_in_catch_test: Crash # Issue 22445, 22446
-asyncstar_throw_in_catch_test: CompileTimeError # Issue 21404
-async_await_syntax_test/a03a: CompileTimeError # Issue 21404
-async_await_syntax_test/a03b: CompileTimeError # Issue 21404
-async_await_syntax_test/a11d: CompileTimeError # Issue 21404
-async_await_syntax_test/b03a: CompileTimeError # Issue 21404
-async_await_syntax_test/b11d: CompileTimeError # Issue 21404
-async_await_syntax_test/c03a: CompileTimeError # Issue 21404
-async_await_syntax_test/d03a: CompileTimeError # Issue 21404
-sync_generator3_test/test2: Fail # Issue 22300
+async_throw_in_catch_test: Crash, RuntimeError # Issue 21404 or it could be a test error
+asyncstar_throw_in_catch_test: RuntimeError # Issue 21404
[ $compiler == none && ($runtime == drt || $runtime == dartium|| $runtime == ContentShellOnAndroid) ]
-async_throw_in_catch_test: Timeout # Issue 22445, 22446
+async_throw_in_catch_test: Timeout, Fail # Issue 21404 or it could be a test error
asyncstar_throw_in_catch_test: RuntimeError # Issue 21404
-async_await_syntax_test/a03a: RuntimeError # Issue 21404
-async_await_syntax_test/a03b: RuntimeError # Issue 21404
-async_await_syntax_test/a09a: RuntimeError # Issue 21404
-async_await_syntax_test/a10a: RuntimeError # Issue 21404
-async_await_syntax_test/a11d: RuntimeError # Issue 21404
-async_await_syntax_test/b03a: RuntimeError # Issue 21404
-async_await_syntax_test/b09a: RuntimeError # Issue 21404
-async_await_syntax_test/b10a: RuntimeError # Issue 21404
-async_await_syntax_test/b11d: RuntimeError # Issue 21404
-async_await_syntax_test/c03a: RuntimeError # Issue 21404
-async_await_syntax_test/c09a: RuntimeError # Issue 21404
-async_await_syntax_test/c10a: RuntimeError # Issue 21404
-async_await_syntax_test/d03a: RuntimeError # Issue 21404
-async_await_syntax_test/d09a: RuntimeError # Issue 21404
-async_await_syntax_test/d10a: RuntimeError # Issue 21404
[ $compiler == none && $runtime == vm ]
diff --git a/tests/language/language_analyzer.status b/tests/language/language_analyzer.status
index d845652..a74ffd94 100644
--- a/tests/language/language_analyzer.status
+++ b/tests/language/language_analyzer.status
@@ -9,6 +9,8 @@
await_backwards_compatibility_test/none: CompileTimeError # Issue 22052
await_test: CompileTimeError # Issue 22052
+issue13179_test: CompileTimeError # Issue 13179
+
sync_generator2_test/01: MissingCompileTimeError # Issue 22252
sync_generator2_test/02: MissingCompileTimeError # Issue 22252
sync_generator2_test/03: MissingCompileTimeError # Issue 22252
@@ -175,6 +177,7 @@
malformed_test/none: fail # test issue 14079, legit warnings for malformed type
malformed_test/05: fail # test issue 14079, it is not error, but warning to instantiate malformed type
malformed_test/06: fail # test issue 14079, it is not error, but warning to use malformed type in "try-on" clause
+regress_22438_test: fail # test issue 14079, it is not error, but warning to use malformed type in "try-on" clause
# test issue 14228
black_listed_test/none: fail # test issue 14228, warnings are required but not expected
diff --git a/tests/language/language_analyzer2.status b/tests/language/language_analyzer2.status
index 683ef88..bf70695 100644
--- a/tests/language/language_analyzer2.status
+++ b/tests/language/language_analyzer2.status
@@ -139,6 +139,7 @@
malformed_test/none: fail # test issue 14079, legit warnings for malformed type
malformed_test/05: fail # test issue 14079, it is not error, but warning to instantiate malformed type
malformed_test/06: fail # test issue 14079, it is not error, but warning to use malformed type in "try-on" clause
+regress_22438_test: fail # test issue 14079, it is not error, but warning to use malformed type in "try-on" clause
# test issue 14228
black_listed_test/none: fail # test issue 14228, warnings are required but not expected
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index c68c922..f716bab 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -7,17 +7,10 @@
sync_generator2_test/07: MissingCompileTimeError # Issue 22324
sync_generator2_test/08: MissingCompileTimeError # Issue 22324
sync_generator2_test/10: MissingCompileTimeError # Issue 22324
-sync_generator2_test/20: MissingCompileTimeError # Issue 22324
-sync_generator2_test/30: MissingCompileTimeError # Issue 22324
-sync_generator2_test/51: MissingCompileTimeError # Issue 22324
-sync_generator2_test/52: MissingCompileTimeError # Issue 22324
[ $compiler == dart2js && $runtime == jsshell ]
await_for_test: Skip # Jsshell does not provide periodic timers, Issue 7728
-[ $compiler == dart2js && $csp && $browser ]
-deferred_mixin_test: RuntimeError # Issue 21863
-
[ $compiler == dart2js || $compiler == dart2dart ]
symbol_literal_test/*: Fail # Issue 21825
constructor_duplicate_final_test/01: Fail # Issue 13363
@@ -190,15 +183,15 @@
label_test: Skip
[ $compiler == dart2dart && $builder_tag == new_backend ]
-asyncstar_throw_in_catch_test: CompileTimeError # Issue 21404
+asyncstar_throw_in_catch_test: RuntimeError # Issue 21404
async_await_syntax_test/a03a: CompileTimeError # Issue 21404
async_await_syntax_test/a03b: CompileTimeError # Issue 21404
async_await_syntax_test/a11d: CompileTimeError # Issue 21404
async_await_syntax_test/b03a: CompileTimeError # Issue 21404
async_await_syntax_test/b11d: CompileTimeError # Issue 21404
-sync_generator3_test/test2: RuntimeError # Issue 21404
async_await_syntax_test/c03a: CompileTimeError # Issue 21404
async_await_syntax_test/d03a: CompileTimeError # Issue 21404
+regress_13494_test: Pass # Issue 22370, passes for the wrong reason
[ $compiler == dart2dart && $builder_tag == new_backend && $minified == true ]
# This test fails in minified, because the type-argument is
@@ -212,24 +205,14 @@
[ $compiler == dart2dart && $minified && $builder_tag != new_backend ]
type_variable_conflict2_test/01: RuntimeError # Issue 16180
-sync_generator3_test/test2: Fail
[ $compiler == dart2dart ]
-asyncstar_concat_test: CompileTimeError # Issue 21404
-asyncstar_yield_test: CompileTimeError # Issue 21404
-asyncstar_yieldstar_test: CompileTimeError # Issue 21404
-
sync_generator2_test/07: MissingCompileTimeError # Issue 22324
sync_generator2_test/08: MissingCompileTimeError # Issue 22324
sync_generator2_test/10: MissingCompileTimeError # Issue 22324
-sync_generator2_test/20: MissingCompileTimeError # Issue 22324
-sync_generator2_test/30: MissingCompileTimeError # Issue 22324
-sync_generator2_test/51: MissingCompileTimeError # Issue 22324
-sync_generator2_test/52: MissingCompileTimeError # Issue 22324
await_for_cancel_test: RuntimeError # Issue 21404
-
-regress_13494_test: Fail # Issue 13494
+regress_13494_test: Fail # Issue 22370
enum_duplicate_test/01: CompileTimeError # Issue 22169
diff --git a/tests/language/named_parameter_clash_test.dart b/tests/language/named_parameter_clash_test.dart
new file mode 100644
index 0000000..0e6904d
--- /dev/null
+++ b/tests/language/named_parameter_clash_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class Foo {
+ m({a, b, c}) {
+ try {} catch(e) {} // no inline
+ return 'Foo $a $b $c';
+ }
+}
+
+class Bar {
+ m(z, {a$b, c}) {
+ try {} catch(e) {} // no inline
+ var ab = a$b;
+ return 'Bar $z $ab $c';
+ }
+}
+
+inscrutable(xs, i) => i == 0 ? xs[0] : inscrutable(xs.sublist(1), i-1);
+
+main() {
+ var list = [new Foo(), new Bar()];
+ var foo = inscrutable(list, 0);
+ var bar = inscrutable(list, 1);
+
+ Expect.equals(r'Foo a b c', foo.m(a: 'a', b: 'b', c: 'c'));
+ Expect.equals(r'Bar z a$b c', bar.m('z', a$b: r'a$b', c: 'c'));
+
+ Expect.throws(() => foo.m('z', a$b: r'a$b', c: 'c'),
+ (e) => e is NoSuchMethodError);
+ Expect.throws(() => bar.m(a: 'a', b: 'b', c: 'c'),
+ (e) => e is NoSuchMethodError);
+}
diff --git a/tests/language/private_clash_lib.dart b/tests/language/private_clash_lib.dart
new file mode 100644
index 0000000..2722aef
--- /dev/null
+++ b/tests/language/private_clash_lib.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library a$_b;
+
+class B {
+ var _c$ = 10; // With library prefix: _a$_b$_c$
+
+ getValueA() {
+ try {} catch(e) {} // no inline
+ return this._c$;
+ }
+}
diff --git a/tests/language/private_clash_test.dart b/tests/language/private_clash_test.dart
new file mode 100644
index 0000000..35110f4
--- /dev/null
+++ b/tests/language/private_clash_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library a;
+
+import 'private_clash_lib.dart' as lib;
+import 'package:expect/expect.dart';
+
+class A extends lib.B {
+ var _b$_c$ = 100; // With library prefix: _a$_b$_c$
+
+ getValueB() {
+ try {} catch(e) {} // no inline
+ return this._b$_c$;
+ }
+}
+
+main() {
+ A a = new A();
+ Expect.equals(110, a.getValueA() + a.getValueB());
+}
diff --git a/tests/language/regress_22438_test.dart b/tests/language/regress_22438_test.dart
new file mode 100644
index 0000000..8ff362b
--- /dev/null
+++ b/tests/language/regress_22438_test.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "package:expect/expect.dart";
+
+main() async {
+ var error = "no error";
+ try {
+ try {
+ await new Future.error("error");
+ } on MissingType catch(e) {
+ }
+ } catch (e) {
+ error = e;
+ }
+ Expect.isTrue(error is TypeError);
+}
diff --git a/tests/language/regress_22445_test.dart b/tests/language/regress_22445_test.dart
new file mode 100644
index 0000000..31d1188
--- /dev/null
+++ b/tests/language/regress_22445_test.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "package:expect/expect.dart";
+
+foo() async {
+ try {
+ print("a");
+ await new Future.value(3);
+ print("b");
+ throw "Error";
+ print("c");
+ } catch (e) {
+ print("d");
+ await new Future.error("Error2");
+ } finally {
+ print("e");
+ }
+ print("f");
+}
+
+main() async {
+ var error = "no error";
+ try {
+ await foo();
+ } catch (e) {
+ error = e;
+ }
+ Expect.equals("Error2", error);
+}
+
+
+
diff --git a/tests/language/sync_generator2_test.dart b/tests/language/sync_generator2_test.dart
index 4e5aa08..4a0f9dd 100644
--- a/tests/language/sync_generator2_test.dart
+++ b/tests/language/sync_generator2_test.dart
@@ -55,10 +55,13 @@
x = test01();
Expect.equals("()", x.toString());
x = test02();
+ test03(); /// 30: continued
Expect.equals("(12321)", x.toString());
x = test04; /// 40: continued
test04 = x; /// 41: continued
x = new K();
+ print(x.garnix); /// 51: continued
+ x.etwas = null; /// 52: continued
print(x.sync().toList());
Expect.equals(1, x.sync().length);
// Expect.isTrue(x.sync().single is Function);
diff --git a/tests/language/vm/optimized_identical_test.dart b/tests/language/vm/optimized_identical_test.dart
index 07ab005..84a69ca 100644
--- a/tests/language/vm/optimized_identical_test.dart
+++ b/tests/language/vm/optimized_identical_test.dart
@@ -18,8 +18,16 @@
throw "fail";
}
+Object Y = 1.0;
+
+test_object_type(x) => identical(x, Y);
+
main() {
for (var i = 0; i < 20; i++) test(0);
Expect.equals("ok", test(0));
+
+ var x = 0.0 + 1.0;
+ for (var i = 0; i < 20; i++) test_object_type(x);
+ Expect.equals(true, test_object_type(x));
}
diff --git a/tests/language/vm/regress_22541_vm_test.dart b/tests/language/vm/regress_22541_vm_test.dart
new file mode 100644
index 0000000..36b4618
--- /dev/null
+++ b/tests/language/vm/regress_22541_vm_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// Test range inference for multiplication of two negative values.
+// VMOptions=--optimization-counter-threshold=10 --no-use-osr
+
+import 'package:expect/expect.dart';
+
+test(a) {
+ var x = a ? -1 : -2;
+ if (0 < (x * x)) {
+ return "ok";
+ } else {
+ return "fail";
+ }
+}
+
+main() {
+ for (var j = 0; j < 20; j++) {
+ Expect.equals("ok", test(false));
+ }
+}
diff --git a/tests/language/vm/regress_22621_vm_test.dart b/tests/language/vm/regress_22621_vm_test.dart
new file mode 100644
index 0000000..f8e39a7
--- /dev/null
+++ b/tests/language/vm/regress_22621_vm_test.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// Test that BoxAllocationSlowPath for Mint emits stackmap in unoptimized code.
+// VMOptions=--gc_at_instance_allocation=_Mint --inline_alloc=false
+
+main() {
+ var re = new RegExp(r"IsolateStubs (.*)");
+ return re.firstMatch("oooo");
+}
diff --git a/tests/lib/async/timer_regress22626_test.dart b/tests/lib/async/timer_regress22626_test.dart
new file mode 100644
index 0000000..483b9338
--- /dev/null
+++ b/tests/lib/async/timer_regress22626_test.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test that no wakeups are being dropped if we cancel timers.
+// WARNING: For this test to work it cannot rely on any other async features
+// and will just timeout if it is failing.
+
+library timer_regress22626_test;
+
+import 'dart:async';
+import 'dart:math';
+import 'package:expect/expect.dart';
+
+int countdown = 10;
+var rng = new Random(1234);
+
+void test(int delay, int delta) {
+ var t0 = new Timer(new Duration(milliseconds: delay + delta),
+ () => Expect.fail("should have been cancelled by now"));
+ new Timer(Duration.ZERO, () => t0.cancel());
+ new Timer(Duration.ZERO,
+ () => new Timer(new Duration(milliseconds: delay),
+ () {
+ if (--countdown == 0) {
+ print("done");
+ } else {
+ test(delay, max(0, delta + rng.nextInt(2) - 1));
+ }
+ }));
+}
+
+void main() {
+ test(50, 2);
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index de56b1c..acc5091 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -21,6 +21,7 @@
mirrors/class_mirror_location_test: RuntimeError # Issue 6490
mirrors/constructor_kinds_test: RuntimeError # Issue 13799
mirrors/constructor_private_name_test: CompileTimeError # Issue 13597
+mirrors/enum_test: RuntimeError # Issue 6490
mirrors/fake_function_with_call_test: RuntimeError # Issue 11612
mirrors/fake_function_without_call_test: RuntimeError # Issue 11612
mirrors/function_type_mirror_test: RuntimeError # Issue 12166
diff --git a/tests/lib/mirrors/enum_test.dart b/tests/lib/mirrors/enum_test.dart
new file mode 100644
index 0000000..7b265a0
--- /dev/null
+++ b/tests/lib/mirrors/enum_test.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.enums;
+
+import 'dart:mirrors';
+import 'package:expect/expect.dart';
+import 'stringify.dart';
+
+class C {}
+enum Suite { CLUBS, DIAMONDS, SPADES, HEARTS }
+
+main() {
+ Expect.isFalse(reflectClass(C).isEnum);
+
+ Expect.isTrue(reflectClass(Suite).isEnum);
+ Expect.isFalse(reflectClass(Suite).isAbstract);
+ Expect.equals(0, reflectClass(Suite).declarations.values.where(
+ (d) => d is MethodMirror && d.isConstructor).length);
+
+ Expect.equals(reflectClass(Suite),
+ (reflectClass(C).owner as LibraryMirror).declarations[#Suite],
+ "found in library");
+
+ Expect.equals(reflectClass(Suite), reflect(Suite.CLUBS).type);
+
+ Expect.equals(0, reflect(Suite.CLUBS).getField(#index).reflectee);
+ Expect.equals(1, reflect(Suite.DIAMONDS).getField(#index).reflectee);
+ Expect.equals(2, reflect(Suite.SPADES).getField(#index).reflectee);
+ Expect.equals(3, reflect(Suite.HEARTS).getField(#index).reflectee);
+
+ Expect.equals("Suite.CLUBS",
+ reflect(Suite.CLUBS).invoke(#toString, []).reflectee);
+ Expect.equals("Suite.DIAMONDS",
+ reflect(Suite.DIAMONDS).invoke(#toString, []).reflectee);
+ Expect.equals("Suite.SPADES",
+ reflect(Suite.SPADES).invoke(#toString, []).reflectee);
+ Expect.equals("Suite.HEARTS",
+ reflect(Suite.HEARTS).invoke(#toString, []).reflectee);
+
+ Expect.setEquals(
+ ['Variable(s(index) in s(Suite), final)',
+ 'Variable(s(CLUBS) in s(Suite), static, final)',
+ 'Variable(s(DIAMONDS) in s(Suite), static, final)',
+ 'Variable(s(SPADES) in s(Suite), static, final)',
+ 'Variable(s(HEARTS) in s(Suite), static, final)',
+ 'Variable(s(values) in s(Suite), static, final)',
+ 'Method(s(toString) in s(Suite))'],
+ reflectClass(Suite).declarations.values
+ .where((d) => !d.isPrivate).map(stringify));
+}
diff --git a/tests/lib/typed_data/byte_data_test.dart b/tests/lib/typed_data/byte_data_test.dart
index cffa631..2b0e3ea 100644
--- a/tests/lib/typed_data/byte_data_test.dart
+++ b/tests/lib/typed_data/byte_data_test.dart
@@ -2,8 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import "package:expect/expect.dart";
import 'dart:typed_data';
+import "package:expect/expect.dart";
main() {
testRegress10898();
diff --git a/tests/lib/typed_data/constructor_checks_test.dart b/tests/lib/typed_data/constructor_checks_test.dart
index 3842ac1..826a4e0 100644
--- a/tests/lib/typed_data/constructor_checks_test.dart
+++ b/tests/lib/typed_data/constructor_checks_test.dart
@@ -2,8 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
checkLengthConstructors() {
check(creator) {
diff --git a/tests/lib/typed_data/endianness_test.dart b/tests/lib/typed_data/endianness_test.dart
index f4f5c16..1fdacd2 100644
--- a/tests/lib/typed_data/endianness_test.dart
+++ b/tests/lib/typed_data/endianness_test.dart
@@ -2,8 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import "package:expect/expect.dart";
import 'dart:typed_data';
+import "package:expect/expect.dart";
main() {
swapTest();
diff --git a/tests/lib/typed_data/float32x4_list_test.dart b/tests/lib/typed_data/float32x4_list_test.dart
index d020709..d0e509b 100644
--- a/tests/lib/typed_data/float32x4_list_test.dart
+++ b/tests/lib/typed_data/float32x4_list_test.dart
@@ -6,8 +6,8 @@
// Library tag to be able to run in html test framework.
library float32x4_list_test;
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
testLoadStore(array) {
Expect.equals(8, array.length);
diff --git a/tests/lib/typed_data/float32x4_shuffle_test.dart b/tests/lib/typed_data/float32x4_shuffle_test.dart
index d12f86d..751ad2d 100644
--- a/tests/lib/typed_data/float32x4_shuffle_test.dart
+++ b/tests/lib/typed_data/float32x4_shuffle_test.dart
@@ -6,8 +6,8 @@
// Library tag to be able to run in html test framework.
library float32x4_shuffle_test;
-import "package:expect/expect.dart";
import 'dart:typed_data';
+import "package:expect/expect.dart";
void testShuffle00() {
var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
diff --git a/tests/lib/typed_data/float32x4_test.dart b/tests/lib/typed_data/float32x4_test.dart
index 7e57538..782aca4 100644
--- a/tests/lib/typed_data/float32x4_test.dart
+++ b/tests/lib/typed_data/float32x4_test.dart
@@ -6,8 +6,8 @@
// Library tag to be able to run in html test framework.
library float32x4_test;
-import "package:expect/expect.dart";
import 'dart:typed_data';
+import "package:expect/expect.dart";
testAdd() {
var m = new Float32x4(-1.0, -2.0, -3.0, -4.0);
diff --git a/tests/lib/typed_data/float32x4_two_arg_shuffle_test.dart b/tests/lib/typed_data/float32x4_two_arg_shuffle_test.dart
index 9b47e9c..d0df59d 100644
--- a/tests/lib/typed_data/float32x4_two_arg_shuffle_test.dart
+++ b/tests/lib/typed_data/float32x4_two_arg_shuffle_test.dart
@@ -6,8 +6,8 @@
// Library tag to be able to run in html test framework.
library float32x4_two_arg_shuffle_test;
-import "package:expect/expect.dart";
import 'dart:typed_data';
+import "package:expect/expect.dart";
testWithZWInXY() {
Float32x4 a = new Float32x4(1.0, 2.0, 3.0, 4.0);
diff --git a/tests/lib/typed_data/float32x4_unbox_phi_test.dart b/tests/lib/typed_data/float32x4_unbox_phi_test.dart
index 2c2ee15..9309642 100644
--- a/tests/lib/typed_data/float32x4_unbox_phi_test.dart
+++ b/tests/lib/typed_data/float32x4_unbox_phi_test.dart
@@ -6,8 +6,8 @@
// Library tag to be able to run in html test framework.
library float32x4_unbox_regress_test;
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
double testUnboxPhi(Float32x4List data) {
var res = new Float32x4.zero();
diff --git a/tests/lib/typed_data/float32x4_unbox_regress_test.dart b/tests/lib/typed_data/float32x4_unbox_regress_test.dart
index b288fb3..155804f 100644
--- a/tests/lib/typed_data/float32x4_unbox_regress_test.dart
+++ b/tests/lib/typed_data/float32x4_unbox_regress_test.dart
@@ -6,8 +6,8 @@
// Library tag to be able to run in html test framework.
library float32x4_unbox_regress_test;
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
testListStore(array, index, value) {
array[index] = value;
diff --git a/tests/lib/typed_data/float64x2_functional_test.dart b/tests/lib/typed_data/float64x2_functional_test.dart
index 2f06ccf..7ae6cee 100644
--- a/tests/lib/typed_data/float64x2_functional_test.dart
+++ b/tests/lib/typed_data/float64x2_functional_test.dart
@@ -5,8 +5,8 @@
library float64x2_functional_test;
-import "package:expect/expect.dart";
import 'dart:typed_data';
+import "package:expect/expect.dart";
testConstructor() {
var a = new Float64x2(1.0, 2.0);
diff --git a/tests/lib/typed_data/int32x4_arithmetic_test.dart b/tests/lib/typed_data/int32x4_arithmetic_test.dart
index 37094f8..0cf81b7 100644
--- a/tests/lib/typed_data/int32x4_arithmetic_test.dart
+++ b/tests/lib/typed_data/int32x4_arithmetic_test.dart
@@ -6,8 +6,8 @@
// Library tag to be able to run in html test framework.
library uint32x4_arithmetic_test;
-import "package:expect/expect.dart";
import 'dart:typed_data';
+import "package:expect/expect.dart";
testAdd() {
var m = new Int32x4(0, 0, 0, 0);
diff --git a/tests/lib/typed_data/int32x4_bigint_test.dart b/tests/lib/typed_data/int32x4_bigint_test.dart
index 539b23f..c4b8ab1 100644
--- a/tests/lib/typed_data/int32x4_bigint_test.dart
+++ b/tests/lib/typed_data/int32x4_bigint_test.dart
@@ -6,8 +6,8 @@
// Library tag to be able to run in html test framework.
library int32x4_bigint_test;
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
main() {
var n = 18446744073709551617;
diff --git a/tests/lib/typed_data/int32x4_list_test.dart b/tests/lib/typed_data/int32x4_list_test.dart
index 03f7a8f..4fa1976 100644
--- a/tests/lib/typed_data/int32x4_list_test.dart
+++ b/tests/lib/typed_data/int32x4_list_test.dart
@@ -6,8 +6,8 @@
// Library tag to be able to run in html test framework.
library int32x4_list_test;
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
testLoadStore(array) {
Expect.equals(8, array.length);
diff --git a/tests/lib/typed_data/int32x4_shuffle_test.dart b/tests/lib/typed_data/int32x4_shuffle_test.dart
index 28e4eeb..d2b4bc6 100644
--- a/tests/lib/typed_data/int32x4_shuffle_test.dart
+++ b/tests/lib/typed_data/int32x4_shuffle_test.dart
@@ -6,8 +6,8 @@
// Library tag to be able to run in html test framework.
library uint32x4_shuffle_test;
-import "package:expect/expect.dart";
import 'dart:typed_data';
+import "package:expect/expect.dart";
void testShuffle() {
var m = new Int32x4(1, 2, 3, 4);
diff --git a/tests/lib/typed_data/int32x4_test.dart b/tests/lib/typed_data/int32x4_test.dart
index d4893c7..7e7d258 100644
--- a/tests/lib/typed_data/int32x4_test.dart
+++ b/tests/lib/typed_data/int32x4_test.dart
@@ -5,8 +5,8 @@
library int32x4_test;
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
void testBadArguments() {
Expect.throws(() => new Int32x4(null, 2, 3, 4),
diff --git a/tests/lib/typed_data/native_interceptor_no_own_method_to_intercept_test.dart b/tests/lib/typed_data/native_interceptor_no_own_method_to_intercept_test.dart
new file mode 100644
index 0000000..4b5d31c
--- /dev/null
+++ b/tests/lib/typed_data/native_interceptor_no_own_method_to_intercept_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+import 'dart:typed_data';
+
+@NoInline()
+use(s) => s;
+
+main() {
+ // In dart2js ByteData should have an interceptor so that it doesn't end up
+ // as an unknown JS object.
+ // This test is just to make sure that dart2js doesn't crash.
+ use(new ByteData(1).toString());
+}
diff --git a/tests/lib/typed_data/setRange_1_test.dart b/tests/lib/typed_data/setRange_1_test.dart
index ea7d6dc..f39515c 100644
--- a/tests/lib/typed_data/setRange_1_test.dart
+++ b/tests/lib/typed_data/setRange_1_test.dart
@@ -2,9 +2,9 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'setRange_lib.dart';
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
+import 'setRange_lib.dart';
sameTypeTest() {
checkSameSize(makeInt16List, makeInt16View, makeInt16View);
diff --git a/tests/lib/typed_data/setRange_2_test.dart b/tests/lib/typed_data/setRange_2_test.dart
index 83abbba..efd85f5 100644
--- a/tests/lib/typed_data/setRange_2_test.dart
+++ b/tests/lib/typed_data/setRange_2_test.dart
@@ -2,9 +2,9 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'setRange_lib.dart';
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
+import 'setRange_lib.dart';
sameElementSizeTest() {
// Views of elements with the same size but different 'types'.
diff --git a/tests/lib/typed_data/setRange_3_test.dart b/tests/lib/typed_data/setRange_3_test.dart
index 9774811..7ac0e01 100644
--- a/tests/lib/typed_data/setRange_3_test.dart
+++ b/tests/lib/typed_data/setRange_3_test.dart
@@ -2,9 +2,9 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'setRange_lib.dart';
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
+import 'setRange_lib.dart';
expandContractTest() {
// Copying between views that have different element sizes can't be done with
diff --git a/tests/lib/typed_data/setRange_4_test.dart b/tests/lib/typed_data/setRange_4_test.dart
index 8f50657..5ddb266 100644
--- a/tests/lib/typed_data/setRange_4_test.dart
+++ b/tests/lib/typed_data/setRange_4_test.dart
@@ -2,9 +2,9 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'setRange_lib.dart';
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
+import 'setRange_lib.dart';
clampingTest() {
var a1 = new Int8List(8);
diff --git a/tests/lib/typed_data/setRange_5_test.dart b/tests/lib/typed_data/setRange_5_test.dart
index 66bbe1f..fb86cb0 100644
--- a/tests/lib/typed_data/setRange_5_test.dart
+++ b/tests/lib/typed_data/setRange_5_test.dart
@@ -2,9 +2,9 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'setRange_lib.dart';
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
+import 'setRange_lib.dart';
overlapTest() {
// buffer: xxxxxxxxyyyyyyyyzzzzzzzz // 3 * float32
diff --git a/tests/lib/typed_data/setRange_lib.dart b/tests/lib/typed_data/setRange_lib.dart
index bcdd302..f9b1dfb 100644
--- a/tests/lib/typed_data/setRange_lib.dart
+++ b/tests/lib/typed_data/setRange_lib.dart
@@ -4,8 +4,8 @@
library setRange_lib;
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
initialize(a) {
for (int i = 0; i < a.length; i++) {
diff --git a/tests/lib/typed_data/simd_store_to_load_forward_test.dart b/tests/lib/typed_data/simd_store_to_load_forward_test.dart
index 4e620346..4fae48f 100644
--- a/tests/lib/typed_data/simd_store_to_load_forward_test.dart
+++ b/tests/lib/typed_data/simd_store_to_load_forward_test.dart
@@ -6,8 +6,8 @@
// Library tag to be able to run in html test framework.
library simd_store_to_load_forward_test;
-import "package:expect/expect.dart";
import 'dart:typed_data';
+import "package:expect/expect.dart";
Float32x4 testLoadStoreForwardingFloat32x4(Float32x4List l, Float32x4 v) {
l[1] = v;
diff --git a/tests/lib/typed_data/simd_type_check_removal.dart b/tests/lib/typed_data/simd_type_check_removal.dart
index fc6fa17..8aaef06 100644
--- a/tests/lib/typed_data/simd_type_check_removal.dart
+++ b/tests/lib/typed_data/simd_type_check_removal.dart
@@ -6,8 +6,8 @@
// Library tag to be able to run in html test framework.
library simd_store_to_load_forward_test;
-import "package:expect/expect.dart";
import 'dart:typed_data';
+import "package:expect/expect.dart";
bool testFloat32x4TypeCheck(Float32x4 v) {
if (v == null) {
diff --git a/tests/lib/typed_data/typed_data_list_test.dart b/tests/lib/typed_data/typed_data_list_test.dart
index 86d1ddf..728416c 100644
--- a/tests/lib/typed_data/typed_data_list_test.dart
+++ b/tests/lib/typed_data/typed_data_list_test.dart
@@ -2,8 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
void testListFunctions(list, first, last, toElementType) {
assert(list.length > 0);
@@ -55,7 +55,7 @@
Expect.equals(0, list.lastIndexOf(first));
Expect.equals(list.length - 1, list.lastIndexOf(last));
Expect.equals(-1, list.lastIndexOf(-1));
-
+
var copy = list.toList();
list.fillRange(1, list.length - 1, toElementType(0));
Expect.equals(copy.first, list.first);
diff --git a/tests/lib/typed_data/typed_data_sublist_type_test.dart b/tests/lib/typed_data/typed_data_sublist_type_test.dart
index e039508..2873693 100644
--- a/tests/lib/typed_data/typed_data_sublist_type_test.dart
+++ b/tests/lib/typed_data/typed_data_sublist_type_test.dart
@@ -2,8 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
// Test that the sublist of a typed_data list is of the same type.
diff --git a/tests/lib/typed_data/typed_list_iterable_test.dart b/tests/lib/typed_data/typed_list_iterable_test.dart
index 4d4a3db..acdfa4b 100644
--- a/tests/lib/typed_data/typed_list_iterable_test.dart
+++ b/tests/lib/typed_data/typed_list_iterable_test.dart
@@ -2,8 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'package:expect/expect.dart';
import 'dart:typed_data';
+import 'package:expect/expect.dart';
void testIterableFunctions(list, first, last) {
assert(list.length > 0);
diff --git a/tests/standalone/io/platform_test.dart b/tests/standalone/io/platform_test.dart
index b0036f6..e3ee4d4 100644
--- a/tests/standalone/io/platform_test.dart
+++ b/tests/standalone/io/platform_test.dart
@@ -86,13 +86,23 @@
Expect.isTrue(int.parse(match.group(6)) >= 0);
}
}
+
+ String stripAdditionalInfo(String version) {
+ var index = version.indexOf(' ');
+ if (index == -1) return version;
+ return version.substring(0, index);
+ }
+
// Ensure we can match valid versions.
checkValidVersion('1.9.0');
checkValidVersion('1.9.0-dev.0.0');
checkValidVersion('1.9.0-edge');
checkValidVersion('1.9.0-edge.r41234');
+ // Check stripping of additional information.
+ checkValidVersion(stripAdditionalInfo(
+ '1.9.0-dev.1.2 (Wed Feb 25 02:22:19 2015) on "linux_ia32"'));
// Test current version.
- checkValidVersion(Platform.version);
+ checkValidVersion(stripAdditionalInfo(Platform.version));
// Test some invalid versions.
Expect.throws(() => checkValidVersion('1.9'));
Expect.throws(() => checkValidVersion('2.0.0'));
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 20d016c..4b5e3d2 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -124,6 +124,7 @@
io/process_sync_test: Skip # Starts 10 dart subprocesses, uses too much memory.
io/signals_test: Skip # Starts 10 dart subprocesses, uses too much memory
io/file_read_special_device_test: Fail # Issue 17440
+io/socket_source_address_test: Fail # Issue 22597
[ $arch == mips && $mode == debug ]
io/web_socket_test: SkipSlow # Times out. Issue 20352
diff --git a/tools/VERSION b/tools/VERSION
index b3b2d5a..8b10fa7 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 1
MINOR 9
PATCH 0
-PRERELEASE 9
-PRERELEASE_PATCH 1
+PRERELEASE 10
+PRERELEASE_PATCH 0
diff --git a/tools/addlatexhash.dart b/tools/addlatexhash.dart
index 28d194d..a8872d5 100755
--- a/tools/addlatexhash.dart
+++ b/tools/addlatexhash.dart
@@ -24,8 +24,8 @@
import 'dart:io';
import 'dart:convert';
-import '../pkg/utf/lib/utf.dart';
-import '../pkg/crypto/lib/crypto.dart';
+import '../third_party/pkg/utf/lib/utf.dart';
+import '../third_party/pkg/crypto/lib/crypto.dart';
// ----------------------------------------------------------------------
// Normalization of the text: removal or normalization of parts that
diff --git a/tools/create_sdk.py b/tools/create_sdk.py
index 81be9de..72c1235 100755
--- a/tools/create_sdk.py
+++ b/tools/create_sdk.py
@@ -112,7 +112,7 @@
def CopyDartScripts(home, sdk_root):
- for executable in ['dart2js_sdk', 'dartanalyzer_sdk', 'dartfmt', 'docgen',
+ for executable in ['dart2js_sdk', 'dartanalyzer_sdk', 'dartfmt_sdk', 'docgen',
'dartdocgen', 'pub_sdk']:
CopyShellScript(os.path.join(home, 'sdk', 'bin', executable),
os.path.join(sdk_root, 'bin'))
diff --git a/tools/dartium/generate_dart_vm_version.py b/tools/dartium/generate_dart_vm_version.py
index 68ec2f5..4a166fc 100755
--- a/tools/dartium/generate_dart_vm_version.py
+++ b/tools/dartium/generate_dart_vm_version.py
@@ -27,7 +27,7 @@
updateFile(REVISION_FILE, version_string)
- expiration_date = datetime.date.today() + datetime.timedelta(weeks=12)
+ expiration_date = datetime.date.today() + datetime.timedelta(days=365)
updateFile(EXPIRATION_FILE,
"%dLL\n" % time.mktime(expiration_date.timetuple()))
diff --git a/tools/dom/dom.json b/tools/dom/dom.json
index 31cc95b..26b9805 100644
--- a/tools/dom/dom.json
+++ b/tools/dom/dom.json
@@ -148,6 +148,9 @@
"play": {
"support_level": "untriaged"
},
+ "playState": {
+ "support_level": "untriaged"
+ },
"playbackRate": {
"support_level": "untriaged"
},
@@ -468,6 +471,7 @@
},
"AudioTrackList": {
"members": {
+ "AudioTrackList": {},
"__getter__": {
"support_level": "untriaged"
},
@@ -562,6 +566,26 @@
},
"support_level": "stable"
},
+ "Body": {
+ "members": {
+ "arrayBuffer": {
+ "support_level": "untriaged"
+ },
+ "blob": {
+ "support_level": "untriaged"
+ },
+ "bodyUsed": {
+ "support_level": "untriaged"
+ },
+ "json": {
+ "support_level": "untriaged"
+ },
+ "text": {
+ "support_level": "untriaged"
+ }
+ },
+ "support_level": "untriaged"
+ },
"CDATASection": {
"comment": "http://dom.spec.whatwg.org/#cdatasection",
"dart_action": "suppress",
@@ -633,6 +657,7 @@
},
"CSSKeyframesRule": {
"members": {
+ "CSSKeyframesRule": {},
"__getter__": {
"support_level": "untriaged"
},
@@ -779,6 +804,7 @@
"CSSStyleDeclaration": {
"comment": "http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface",
"members": {
+ "CSSStyleDeclaration": {},
"__getter__": {
"support_level": "untriaged"
},
@@ -787,6 +813,9 @@
},
"__setter__": {},
"cssText": {},
+ "dart": {
+ "support_level": "untriaged"
+ },
"getPropertyCSSValue": {
"comment": "http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface",
"dart_action": "suppress",
@@ -995,7 +1024,11 @@
},
"CanvasPattern": {
"comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#canvaspattern",
- "members": {},
+ "members": {
+ "setTransform": {
+ "support_level": "untriaged"
+ }
+ },
"support_level": "stable"
},
"CanvasProxy": {
@@ -1045,6 +1078,9 @@
"currentTransform": {
"support_level": "untriaged"
},
+ "direction": {
+ "support_level": "untriaged"
+ },
"drawCustomFocusRing": {
"support_level": "untriaged"
},
@@ -1218,6 +1254,27 @@
},
"support_level": "untriaged"
},
+ "CircularGeofencingRegion": {
+ "members": {
+ "CircularGeofencingRegion": {},
+ "MAX_RADIUS": {
+ "support_level": "untriaged"
+ },
+ "MIN_RADIUS": {
+ "support_level": "untriaged"
+ },
+ "latitude": {
+ "support_level": "untriaged"
+ },
+ "longitude": {
+ "support_level": "untriaged"
+ },
+ "radius": {
+ "support_level": "untriaged"
+ }
+ },
+ "support_level": "untriaged"
+ },
"CircularRegion": {
"members": {
"CircularRegion": {},
@@ -1864,6 +1921,24 @@
},
"m44": {
"support_level": "untriaged"
+ },
+ "multiplySelf": {
+ "support_level": "untriaged"
+ },
+ "preMultiplySelf": {
+ "support_level": "untriaged"
+ },
+ "scale3dSelf": {
+ "support_level": "untriaged"
+ },
+ "scaleNonUniformSelf": {
+ "support_level": "untriaged"
+ },
+ "scaleSelf": {
+ "support_level": "untriaged"
+ },
+ "translateSelf": {
+ "support_level": "untriaged"
}
},
"support_level": "untriaged"
@@ -1941,6 +2016,27 @@
},
"m44": {
"support_level": "untriaged"
+ },
+ "multiply": {
+ "support_level": "untriaged"
+ },
+ "scale": {
+ "support_level": "untriaged"
+ },
+ "scale3d": {
+ "support_level": "untriaged"
+ },
+ "scaleNonUniform": {
+ "support_level": "untriaged"
+ },
+ "toFloat32Array": {
+ "support_level": "untriaged"
+ },
+ "toFloat64Array": {
+ "support_level": "untriaged"
+ },
+ "translate": {
+ "support_level": "untriaged"
}
},
"support_level": "untriaged"
@@ -2039,6 +2135,7 @@
"DOMSettableTokenList": {
"comment": "http://dev.w3.org/html5/spec-LC/common-dom-interfaces.html#domsettabletokenlist-0",
"members": {
+ "DOMSettableTokenList": {},
"__getter__": {},
"value": {}
},
@@ -2056,6 +2153,7 @@
"DOMStringMap": {
"comment": "http://dev.w3.org/html5/spec-LC/common-dom-interfaces.html#domstringmap-0",
"members": {
+ "DOMStringMap": {},
"__delete__": {},
"__getter__": {},
"__setter__": {}
@@ -2127,6 +2225,7 @@
"DataTransferItemList": {
"comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-datatransferitemlist-interface",
"members": {
+ "DataTransferItemList": {},
"__getter__": {
"support_level": "untriaged"
},
@@ -2696,6 +2795,9 @@
"support_level": "untriaged"
},
"title": {},
+ "transformDocumentToTreeView": {
+ "support_level": "untriaged"
+ },
"visibilityState": {
"support_level": "untriaged"
},
@@ -2907,6 +3009,9 @@
"dart_action": "stable",
"support_level": "nonstandard"
},
+ "contextMenu": {
+ "support_level": "untriaged"
+ },
"createShadowRoot": {
"comment": "https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#api-shadow-aware-create-shadow-root",
"support_level": "experimental"
@@ -3594,6 +3699,14 @@
},
"support_level": "stable"
},
+ "ExtendableEvent": {
+ "members": {
+ "waitUntil": {
+ "support_level": "untriaged"
+ }
+ },
+ "support_level": "untriaged"
+ },
"FederatedCredential": {
"members": {
"FederatedCredential": {},
@@ -4652,6 +4765,9 @@
"children": {},
"click": {},
"contentEditable": {},
+ "contextMenu": {
+ "support_level": "untriaged"
+ },
"dir": {},
"draggable": {},
"getInputContext": {
@@ -4917,6 +5033,7 @@
"HTMLFormControlsCollection": {
"comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#htmlformcontrolscollection-0",
"members": {
+ "HTMLFormControlsCollection": {},
"__getter__": {},
"namedItem": {}
},
@@ -6884,6 +7001,14 @@
},
"support_level": "stable"
},
+ "Iterator": {
+ "members": {
+ "next": {
+ "support_level": "untriaged"
+ }
+ },
+ "support_level": "untriaged"
+ },
"Key": {
"members": {
"algorithm": {
@@ -7070,6 +7195,29 @@
},
"support_level": "experimental"
},
+ "MIDIInputMap": {
+ "members": {
+ "entries": {
+ "support_level": "untriaged"
+ },
+ "get": {
+ "support_level": "untriaged"
+ },
+ "has": {
+ "support_level": "untriaged"
+ },
+ "keys": {
+ "support_level": "untriaged"
+ },
+ "size": {
+ "support_level": "untriaged"
+ },
+ "values": {
+ "support_level": "untriaged"
+ }
+ },
+ "support_level": "untriaged"
+ },
"MIDIMessageEvent": {
"comment": "http://webaudio.github.io/web-midi-api/#midimessageevent-interface",
"members": {
@@ -7085,6 +7233,29 @@
},
"support_level": "experimental"
},
+ "MIDIOutputMap": {
+ "members": {
+ "entries": {
+ "support_level": "untriaged"
+ },
+ "get": {
+ "support_level": "untriaged"
+ },
+ "has": {
+ "support_level": "untriaged"
+ },
+ "keys": {
+ "support_level": "untriaged"
+ },
+ "size": {
+ "support_level": "untriaged"
+ },
+ "values": {
+ "support_level": "untriaged"
+ }
+ },
+ "support_level": "untriaged"
+ },
"MIDIPort": {
"comment": "http://webaudio.github.io/web-midi-api/#idl-def-MIDIPort",
"members": {
@@ -7231,6 +7402,9 @@
},
"dispatchEvent": {},
"error": {},
+ "generateRequest": {
+ "support_level": "untriaged"
+ },
"keySystem": {},
"onkeyadded": {
"support_level": "untriaged"
@@ -7287,10 +7461,24 @@
"addListener": {},
"matches": {},
"media": {},
+ "onchange": {
+ "support_level": "untriaged"
+ },
"removeListener": {}
},
"support_level": "stable"
},
+ "MediaQueryListEvent": {
+ "members": {
+ "matches": {
+ "support_level": "untriaged"
+ },
+ "media": {
+ "support_level": "untriaged"
+ }
+ },
+ "support_level": "untriaged"
+ },
"MediaQueryListListener": {
"comment": "http://dev.w3.org/csswg/cssom-view/#the-mediaquerylist-interface",
"dart_action": "unstable",
@@ -7487,6 +7675,7 @@
},
"MimeTypeArray": {
"members": {
+ "MimeTypeArray": {},
"__getter__": {},
"item": {},
"length": {},
@@ -7604,6 +7793,7 @@
"comment": "http://dom.spec.whatwg.org/#namednodemap",
"dart_action": "suppress",
"members": {
+ "NamedNodeMap": {},
"__getter__": {},
"getNamedItem": {},
"getNamedItemNS": {},
@@ -7702,6 +7892,9 @@
"dart_action": "suppress",
"support_level": "nonstandard"
},
+ "presentation": {
+ "support_level": "untriaged"
+ },
"product": {
"comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#navigatorid",
"dart_action": "unstable",
@@ -8561,6 +8754,7 @@
},
"Plugin": {
"members": {
+ "Plugin": {},
"__getter__": {},
"description": {},
"filename": {},
@@ -8573,6 +8767,7 @@
},
"PluginArray": {
"members": {
+ "PluginArray": {},
"__getter__": {},
"item": {},
"length": {},
@@ -8581,6 +8776,17 @@
},
"support_level": "nonstandard"
},
+ "PluginPlaceholderElement": {
+ "members": {
+ "createdCallback": {
+ "support_level": "untriaged"
+ },
+ "message": {
+ "support_level": "untriaged"
+ }
+ },
+ "support_level": "untriaged"
+ },
"PopStateEvent": {
"comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#popstateevent",
"members": {
@@ -8616,6 +8822,10 @@
},
"support_level": "stable"
},
+ "Presentation": {
+ "members": {},
+ "support_level": "untriaged"
+ },
"ProcessingInstruction": {
"comment": "http://dom.spec.whatwg.org/#interface-processinginstruction",
"dart_action": "unstable",
@@ -8894,6 +9104,7 @@
"RTCStatsResponse": {
"comment": "http://dev.w3.org/2011/webrtc/editor/webrtc.html#widl-RTCStatsReport-RTCStats-getter-DOMString-id",
"members": {
+ "RTCStatsResponse": {},
"__getter__": {},
"namedItem": {},
"result": {}
@@ -8937,6 +9148,9 @@
"collapse": {},
"collapsed": {},
"commonAncestorContainer": {},
+ "compareBoundaryPoints": {
+ "support_level": "untriaged"
+ },
"compareNode": {
"dart_action": "suppress",
"support_level": "deprecated"
@@ -8994,7 +9208,23 @@
"support_level": "deprecated"
},
"ReadableStream": {
- "members": {},
+ "members": {
+ "cancel": {
+ "support_level": "untriaged"
+ },
+ "closed": {
+ "support_level": "untriaged"
+ },
+ "read": {
+ "support_level": "untriaged"
+ },
+ "state": {
+ "support_level": "untriaged"
+ },
+ "wait": {
+ "support_level": "untriaged"
+ }
+ },
"support_level": "untriaged"
},
"Rect": {
@@ -9019,6 +9249,9 @@
"Request": {
"members": {
"Request": {},
+ "clone": {
+ "support_level": "untriaged"
+ },
"credentials": {
"support_level": "untriaged"
},
@@ -11095,6 +11328,7 @@
"comment": "http://www.w3.org/TR/SVG/types.html#InterfaceSVGLengthList",
"dart_action": "unstable",
"members": {
+ "SVGLengthList": {},
"__setter__": {
"support_level": "untriaged"
},
@@ -11319,6 +11553,7 @@
"comment": "http://www.w3.org/TR/SVG/types.html#InterfaceSVGNumberList",
"dart_action": "unstable",
"members": {
+ "SVGNumberList": {},
"__setter__": {
"support_level": "untriaged"
},
@@ -11639,6 +11874,7 @@
"comment": "http://www.w3.org/TR/SVG/paths.html#InterfaceSVGPathSegList",
"dart_action": "unstable",
"members": {
+ "SVGPathSegList": {},
"__setter__": {
"support_level": "untriaged"
},
@@ -11733,6 +11969,7 @@
"comment": "http://www.w3.org/TR/SVG/coords.html#InterfaceSVGPointList",
"dart_action": "unstable",
"members": {
+ "SVGPointList": {},
"__setter__": {
"support_level": "untriaged"
},
@@ -12112,6 +12349,7 @@
"comment": "http://www.w3.org/TR/SVG/types.html#InterfaceSVGStringList",
"dart_action": "unstable",
"members": {
+ "SVGStringList": {},
"__setter__": {
"support_level": "untriaged"
},
@@ -12403,6 +12641,7 @@
"comment": "http://www.w3.org/TR/SVG/coords.html#InterfaceSVGTransformList",
"dart_action": "unstable",
"members": {
+ "SVGTransformList": {},
"__setter__": {
"support_level": "untriaged"
},
@@ -12802,6 +13041,9 @@
},
"ServiceWorkerClients": {
"members": {
+ "getAll": {
+ "support_level": "untriaged"
+ },
"getServiced": {
"support_level": "untriaged"
}
@@ -12816,6 +13058,9 @@
"controller": {
"support_level": "untriaged"
},
+ "getRegistration": {
+ "support_level": "untriaged"
+ },
"installing": {
"support_level": "untriaged"
},
@@ -12836,9 +13081,15 @@
},
"ServiceWorkerGlobalScope": {
"members": {
+ "caches": {
+ "support_level": "untriaged"
+ },
"clients": {
"support_level": "untriaged"
},
+ "close": {
+ "support_level": "untriaged"
+ },
"fetch": {
"support_level": "untriaged"
},
@@ -13216,6 +13467,7 @@
"comment": "http://www.w3.org/TR/webstorage/#the-storage-interface",
"dart_action": "unstable",
"members": {
+ "Storage": {},
"__delete__": {},
"__getter__": {},
"__setter__": {},
@@ -13335,6 +13587,7 @@
"StyleSheetList": {
"comment": "http://dev.w3.org/csswg/cssom/#the-stylesheetlist-sequence",
"members": {
+ "StyleSheetList": {},
"__getter__": {},
"item": {},
"length": {}
@@ -13626,6 +13879,7 @@
},
"Timing": {
"members": {
+ "Timing": {},
"__getter__": {
"support_level": "untriaged"
},
@@ -14103,6 +14357,7 @@
},
"VideoTrackList": {
"members": {
+ "VideoTrackList": {},
"__getter__": {
"support_level": "untriaged"
},
@@ -16444,6 +16699,7 @@
"comment": "http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem",
"support_level": "experimental"
},
+ "Window": {},
"__getter__": {},
"addEventListener": {},
"alert": {},
diff --git a/tools/dom/idl/dart/dart.idl b/tools/dom/idl/dart/dart.idl
index 06f470c..520404c 100644
--- a/tools/dom/idl/dart/dart.idl
+++ b/tools/dom/idl/dart/dart.idl
@@ -228,12 +228,6 @@
interface Blob {
};
-[DartSupplemental,
- Constructor(float x, float y)
-]
-interface WebKitPoint {
-};
-
[DartSupplemental, Callback] // Add missing Callback attribute.
interface VoidCallback {
};
diff --git a/tools/dom/scripts/dartgenerator.py b/tools/dom/scripts/dartgenerator.py
index bb96bd3..1b8db33 100755
--- a/tools/dom/scripts/dartgenerator.py
+++ b/tools/dom/scripts/dartgenerator.py
@@ -45,7 +45,8 @@
return self._IsCompoundType(database, type_name[:-len('[]')])
stripped_type_name = self._StripModules(type_name)
- if database.HasInterface(stripped_type_name):
+ if (database.HasInterface(stripped_type_name) or
+ database.HasDictionary(stripped_type_name)):
return True
if database.HasEnum(stripped_type_name):
@@ -229,7 +230,13 @@
ARG = idlnode.IDLArgument([('Type', ('ScopedName', 'object')), ('Id', 'arg')])
for interface in database.GetInterfaces():
for operation in interface.operations:
- call_with = (operation.ext_attrs.get('CallWith', '') +
- operation.ext_attrs.get('ConstructorCallWith', ''))
+ call_with = operation.ext_attrs.get('CallWith', [])
+ if not(isinstance(call_with, list)):
+ call_with = [call_with]
+ constructor_with = operation.ext_attrs.get('ConstructorCallWith', [])
+ if not(isinstance(constructor_with, list)):
+ constructor_with = [constructor_with]
+ call_with = call_with + constructor_with
+
if 'ScriptArguments' in call_with:
operation.arguments.append(ARG)
diff --git a/tools/dom/scripts/dartmetadata.py b/tools/dom/scripts/dartmetadata.py
index 9a1730f..2f1ad82 100644
--- a/tools/dom/scripts/dartmetadata.py
+++ b/tools/dom/scripts/dartmetadata.py
@@ -461,7 +461,6 @@
'AudioContext': _web_audio_annotations,
'DOMFileSystem': _file_system_annotations,
'DOMFileSystemSync': _file_system_annotations,
- 'WebKitPoint': _webkit_experimental_annotations,
'Window.indexedDB': _indexed_db_annotations,
'Window.openDatabase': _web_sql_annotations,
'Window.performance': _performance_annotations,
diff --git a/tools/dom/scripts/database.py b/tools/dom/scripts/database.py
index 7bb5093..951a341 100755
--- a/tools/dom/scripts/database.py
+++ b/tools/dom/scripts/database.py
@@ -43,6 +43,7 @@
self._all_interfaces = {}
self._interfaces_to_delete = []
self._enums = {}
+ self._all_dictionaries = {}
def Clone(self):
new_database = Database(self._root_dir)
@@ -50,6 +51,8 @@
new_database._interfaces_to_delete = copy.deepcopy(
self._interfaces_to_delete)
new_database._enums = copy.deepcopy(self._enums)
+ new_database._all_dictionaries = copy.deepcopy(self._all_dictionaries)
+
return new_database
def Delete(self):
@@ -245,6 +248,33 @@
def AddEnum(self, enum):
self._enums[enum.id] = enum
+ def HasDictionary(self, dictionary_name):
+ """Returns True if the dictionary is in memory"""
+ return dictionary_name in self._all_dictionaries
+
+ def GetDictionary(self, dictionary_name):
+ """Returns an IDLDictionary corresponding to the dictionary_name
+ from memory.
+
+ Args:
+ dictionary_name -- the name of the dictionary.
+ """
+ if dictionary_name not in self._all_dictionaries:
+ raise RuntimeError('Dictionary %s is not loaded' % dictionary_name)
+ return self._all_dictionaries[dictionary_name]
+
+ def AddDictionary(self, dictionary):
+ """Returns an IDLDictionary corresponding to the dictionary_name
+ from memory.
+
+ Args:
+ dictionary -- the name of the dictionary.
+ """
+ dictionary_name = dictionary.id
+ if dictionary_name in self._all_dictionaries:
+ raise RuntimeError('Dictionary %s already exists' % dictionary_name)
+ self._all_dictionaries[dictionary_name] = dictionary
+
def TransitiveSecondaryParents(self, interface, propagate_event_target):
"""Returns a list of all non-primary parents.
diff --git a/tools/dom/scripts/databasebuilder.py b/tools/dom/scripts/databasebuilder.py
index ad12622..46c82a8 100755
--- a/tools/dom/scripts/databasebuilder.py
+++ b/tools/dom/scripts/databasebuilder.py
@@ -561,7 +561,7 @@
# 2-stage computation: individual, then overall
for file_path in file_paths:
- compute_info_individual(file_path, 'dart')
+ compute_info_individual(file_path)
info_individuals = [info_individual()]
compute_interfaces_info_overall(info_individuals)
@@ -589,6 +589,10 @@
round((end_time - start_time), 2))
def _process_ast(self, filename, ast):
+ if len(ast) == 1:
+ ast = ast.values()[0]
+ else:
+ print 'ERROR: Processing AST: ' + os.path.basename(file_name)
new_asts[filename] = ast
def import_idl_files(self, file_paths, import_options, is_dart_idl):
@@ -630,12 +634,17 @@
interface.operations = filter(enabled, interface.operations)
self._imported_interfaces.append((interface, import_options))
- for implStmt in idl_file.implementsStatements:
- self._impl_stmts.append((implStmt, import_options))
+ # If an IDL dictionary then there is no implementsStatements.
+ if hasattr(idl_file, 'implementsStatements'):
+ for implStmt in idl_file.implementsStatements:
+ self._impl_stmts.append((implStmt, import_options))
for enum in idl_file.enums:
self._database.AddEnum(enum)
+ for dictionary in idl_file.dictionaries:
+ self._database.AddDictionary(dictionary)
+
def _is_node_enabled(self, node, idl_defines):
if not 'Conditional' in node.ext_attrs:
@@ -730,6 +739,22 @@
map(normalize, interface.attributes)
map(normalize, interface.operations)
+ def map_dictionaries(self):
+ """Changes the type of operations/constructors arguments from an IDL
+ dictionary to a Dictionary. The IDL dictionary is just an enums of
+ strings which are checked at run-time."""
+ def dictionary_to_map(type_node):
+ if self._database.HasDictionary(type_node.id):
+ type_node.dictionary = type_node.id
+ type_node.id = 'Dictionary'
+
+ def all_types(node):
+ map(dictionary_to_map, node.all(IDLType))
+
+ for interface in self._database.GetInterfaces():
+ map(all_types, interface.all(IDLExtAttrFunctionValue))
+ map(all_types, interface.operations)
+
def fetch_constructor_data(self, options):
window_interface = self._database.GetInterface('Window')
for attr in window_interface.attributes:
diff --git a/tools/dom/scripts/fremontcutbuilder.py b/tools/dom/scripts/fremontcutbuilder.py
index 41021bd..b8c80a6 100755
--- a/tools/dom/scripts/fremontcutbuilder.py
+++ b/tools/dom/scripts/fremontcutbuilder.py
@@ -9,6 +9,7 @@
import os.path
import sys
import time
+import utilities
_logger = logging.getLogger('fremontcutbuilder')
@@ -77,6 +78,8 @@
rename_operation_arguments_on_merge=True,
logging_level=logging_level)
+ utilities.KNOWN_COMPONENTS = frozenset(['core', 'modules', 'dart'])
+
builder.import_idl_files(
[ os.path.join(current_dir, '..', 'idl', 'dart', 'dart.idl') ],
dart_options, True)
@@ -92,6 +95,9 @@
# Cleanup:
builder.normalize_annotations(['WebKit', 'Dart'])
+ # Map any IDL defined dictionaries to Dictionary.
+ builder.map_dictionaries()
+
conditionals_met = set(
'ENABLE_' + conditional for conditional in builder.conditionals_met)
known_conditionals = set(FEATURE_DEFINES + FEATURE_DISABLED)
diff --git a/tools/dom/scripts/generator.py b/tools/dom/scripts/generator.py
index 74fc03e..6b66511 100644
--- a/tools/dom/scripts/generator.py
+++ b/tools/dom/scripts/generator.py
@@ -1306,7 +1306,10 @@
type_name,
TypeData(clazz='Primitive', dart_type='String', native_type='String'))
- interface = self._database.GetInterface(type_name)
+ if self._database.HasInterface(type_name):
+ interface = self._database.GetInterface(type_name)
+ else:
+ interface = self._database.GetDictionary(type_name)
if 'Callback' in interface.ext_attrs:
return CallbackIDLTypeInfo(type_name, TypeData('Callback',
self._renamer.DartifyTypeName(type_name)))
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 92aa17e..ab07a81 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -29,7 +29,6 @@
'Database': 'SqlDatabase', # Avoid conflict with Index DB's Database.
'DatabaseSync': 'SqlDatabaseSync',
'DOMFileSystem': 'FileSystem',
- 'WebKitPoint': '_DomPoint',
'DOMRect': '_DomRect',
'Entity': '_Entity', # Not sure if we want to expose this yet, may conflict with other libs.
'EntryCallback': '_EntryCallback',
@@ -42,6 +41,7 @@
'HTMLElement' : 'HtmlElement',
'HTMLHtmlElement' : 'HtmlHtmlElement',
'IDBFactory': 'IdbFactory', # Manual to avoid name conflicts.
+ 'Iterator': 'DomIterator',
'Key': 'CryptoKey',
'NamedNodeMap': '_NamedNodeMap',
'NavigatorUserMediaErrorCallback': '_NavigatorUserMediaErrorCallback',
diff --git a/tools/dom/scripts/idlnode.py b/tools/dom/scripts/idlnode.py
index fff5e34..5d94ab6 100755
--- a/tools/dom/scripts/idlnode.py
+++ b/tools/dom/scripts/idlnode.py
@@ -7,7 +7,7 @@
import sys
import idl_definitions
-from idl_types import IdlType, IdlUnionType, IdlArrayOrSequenceType
+from idl_types import IdlType, IdlNullableType, IdlUnionType, IdlArrayOrSequenceType
from compute_interfaces_info_overall import interfaces_info
@@ -166,7 +166,7 @@
if hasattr(ast, field_name):
field_value = getattr(ast, field_name)
if field_value:
- if label == 'Interface' or label == 'Enum':
+ if label == 'Interface' or label == 'Enum' or label == "Dictionary":
for key in field_value:
value = field_value[key]
res.append(value)
@@ -222,6 +222,9 @@
'Enum': 'enumerations',
'Annotation': '', # TODO(terry): Ignore annotation used for database cache.
'TypeDef': '', # typedef in an IDL are already resolved.
+ 'Dictionary': 'dictionaries',
+ 'Member': 'members',
+ 'Default': 'default_value', # Dictionary member default value
}
result = label_field.get(label)
if result != '' and not(result):
@@ -266,6 +269,10 @@
"""Helper method for uniform conversion of annotations."""
self.annotations = IDLAnnotations(ast)
+ def _convert_constants(self, ast, js_name):
+ """Helper method for uniform conversion of dictionary members."""
+ self.members = IDLDictionaryMembers(ast, js_name)
+
class IDLDictNode(IDLNode):
"""Base class for dictionary-like IDL nodes such as extended attributes
@@ -343,6 +350,7 @@
filename_basename = os.path.basename(filename)
self.interfaces = self._convert_all(ast, 'Interface', IDLInterface)
+ self.dictionaries = self._convert_all(ast, 'Dictionary', IDLDictionary)
is_blink = not(isinstance(ast, list)) and ast.__module__ == 'idl_definitions'
@@ -369,7 +377,7 @@
implemented_name)
self.implementsStatements.append(implement_statement)
- else:
+ elif interface.id in interfaces_info:
interface_info = interfaces_info[interface.id]
implements = interface_info['implements_interfaces']
@@ -455,6 +463,14 @@
self.setdefault('Constructor', []).append(func_value)
else:
self[name] = func_value
+ elif name == 'SetWrapperReferenceTo':
+ # NOTE: No need to process handling for GC wrapper. But if its a reference
+ # to another type via an IdlArgument we'd need to convert to IDLArgument
+ # otherwise the type might be a reference to another type and the circularity
+ # will break deep_copy which is done later to the interfaces in the
+ # database. If we every need SetWrapperReferenceTo then we'd need to
+ # convert IdlArgument to IDLArgument.
+ continue
else:
self[name] = value
else:
@@ -547,7 +563,8 @@
self.id = ast
# New blink handling.
elif ast.__module__ == "idl_types":
- if isinstance(ast, IdlType) or isinstance(ast, IdlArrayOrSequenceType):
+ if isinstance(ast, IdlType) or isinstance(ast, IdlArrayOrSequenceType) or \
+ isinstance(ast, IdlNullableType):
type_name = str(ast)
# TODO(terry): For now don't handle unrestricted types see
@@ -564,7 +581,7 @@
print 'WARNING type %s is union mapped to \'any\'' % self.id
# TODO(terry): For union types use any otherwise type is unionType is
# not found and is removed during merging.
- self.id = 'any'
+ self.id = 'any'
# TODO(terry): Any union type e.g. 'type1 or type2 or type2',
# 'typedef (Type1 or Type2) UnionType'
# Is a problem we need to extend IDLType and IDLTypeDef to handle more
@@ -613,6 +630,31 @@
self.type = self._convert_first(ast, 'Type', IDLType)
+class IDLDictionary(IDLNode):
+ """IDLDictionary node contains members,
+ as well as parent references."""
+
+ def __init__(self, ast):
+ IDLNode.__init__(self, ast)
+
+ self.javascript_binding_name = self.id
+ self._convert_ext_attrs(ast)
+ self._convert_constants(ast, self.id)
+
+
+class IDLDictionaryMembers(IDLDictNode):
+ """IDLDictionaryMembers specialization for a list of FremontCut dictionary values."""
+ def __init__(self, ast=None, js_name=None):
+ IDLDictNode.__init__(self, ast)
+ self.id = None
+ if not ast:
+ return
+ for member in self._find_all(ast, 'Member'):
+ name = self._find_first(member, 'Id')
+ value = IDLDictionaryMember(member, js_name)
+ self[name] = value
+
+
class IDLInterface(IDLNode):
"""IDLInterface node contains operations, attributes, constants,
as well as parent references."""
@@ -785,6 +827,14 @@
return '<IDLArgument(type = %s, id = %s)>' % (self.type, self.id)
+class IDLDictionaryMember(IDLMember):
+ """IDLNode specialization for 'const type name = value' declarations."""
+ def __init__(self, ast, doc_js_interface_name):
+ IDLMember.__init__(self, ast, doc_js_interface_name)
+ default_value = self._find_first(ast, 'Default')
+ self.value = default_value.value if default_value else None
+
+
class IDLImplementsStatement(IDLNode):
"""IDLNode specialization for 'IMPLEMENTOR implements IMPLEMENTED' declarations."""
def __init__(self, ast):
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
index 91d385e..b747154 100644
--- a/tools/dom/scripts/systemhtml.py
+++ b/tools/dom/scripts/systemhtml.py
@@ -412,6 +412,7 @@
'Crypto':
"JS('bool', '!!(window.crypto && window.crypto.getRandomValues)')",
'Database': "JS('bool', '!!(window.openDatabase)')",
+ 'DOMPoint': "JS('bool', '!!(window.DOMPoint) || !!(window.WebKitPoint)')",
'ApplicationCache': "JS('bool', '!!(window.applicationCache)')",
'DOMFileSystem': "JS('bool', '!!(window.webkitRequestFileSystem)')",
'FormData': "JS('bool', '!!(window.FormData)')",
@@ -433,7 +434,6 @@
"element, element)"),
'TouchList': "JS('bool', '!!document.createTouchList')",
'WebGLRenderingContext': "JS('bool', '!!(window.WebGLRenderingContext)')",
- 'WebKitPoint': "JS('bool', '!!(window.WebKitPoint)')",
'WebSocket': "JS('bool', 'typeof window.WebSocket != \"undefined\"')",
'Worker': "JS('bool', '(typeof window.Worker != \"undefined\")')",
'XSLTProcessor': "JS('bool', '!!(window.XSLTProcessor)')",
diff --git a/tools/dom/scripts/systemnative.py b/tools/dom/scripts/systemnative.py
index 4f5a7ed..dd2cdbd 100644
--- a/tools/dom/scripts/systemnative.py
+++ b/tools/dom/scripts/systemnative.py
@@ -1251,7 +1251,15 @@
needs_custom_element_callbacks = False
# TODO(antonm): unify with ScriptState below.
- call_with = ext_attrs.get('CallWith', '') + ext_attrs.get('ConstructorCallWith', '')
+ call_with = ext_attrs.get('CallWith', [])
+ if not(isinstance(call_with, list)):
+ call_with = [call_with]
+ constructor_with = ext_attrs.get('ConstructorCallWith', [])
+ if not(isinstance(constructor_with, list)):
+ constructor_with = [constructor_with]
+ call_with = call_with + constructor_with
+
+
requires_stack_info = 'ScriptArguments' in call_with or 'ScriptState' in call_with
if requires_stack_info:
raises_exceptions = True
diff --git a/tools/dom/src/native_DOMImplementation.dart b/tools/dom/src/native_DOMImplementation.dart
index fe47388..c0eee34 100644
--- a/tools/dom/src/native_DOMImplementation.dart
+++ b/tools/dom/src/native_DOMImplementation.dart
@@ -189,6 +189,9 @@
static window() => _blink.Blink_Utils.window();
static forwardingPrint(String message) => _blink.Blink_Utils.forwardingPrint(message);
+ static void spawnDomHelper(Function f, int replyTo) =>
+ _blink.Blink_Utils.spawnDomHelper(f, replyTo);
+
// TODO(vsm): Make this API compatible with spawnUri. It should also
// return a Future<Isolate>.
static spawnDomUri(String uri) => _blink.Blink_Utils.spawnDomUri(uri);
@@ -507,7 +510,7 @@
return libraryMirror.uri.scheme == 'dart' &&
SIDE_EFFECT_FREE_LIBRARIES.contains(libraryMirror.uri.toString());
}
-
+
/**
* Whether we should treat a property as a field for the purposes of the
* debugger.
@@ -725,7 +728,7 @@
}
return ret;
}
-
+
/**
* Get a property, returning null if the property does not exist.
* For private property names, we attempt to resolve the property in the
@@ -735,7 +738,7 @@
var objectMirror = reflect(o);
var classMirror = objectMirror.type;
if (propertyName.startsWith("_")) {
- var attemptedLibraries = new Set<LibraryMirror>();
+ var attemptedLibraries = new Set<LibraryMirror>();
while (classMirror != null) {
LibraryMirror library = classMirror.owner;
if (!attemptedLibraries.contains(library)) {
@@ -747,7 +750,7 @@
}
classMirror = classMirror.superclass;
}
- return null;
+ return null;
}
try {
return objectMirror.getField(
@@ -759,7 +762,7 @@
/**
* Helper to wrap the inspect method on InjectedScriptHost to provide the
- * inspect method required for the
+ * inspect method required for the
*/
static List consoleApi(host) {
return [
@@ -894,10 +897,83 @@
}
}
+// TODO(vsm): Remove DOM isolate code once we have Dartium isolates
+// as workers. This is only used to support
+// printing and timers in background isolates. As workers they should
+// be able to just do those things natively.
+
+_makeSendPortFuture(spawnRequest) {
+ final completer = new Completer<SendPort>.sync();
+ final port = new ReceivePort();
+ port.listen((result) {
+ completer.complete(result);
+ port.close();
+ });
+ // TODO: SendPort.hashCode is ugly way to access port id.
+ spawnRequest(port.sendPort.hashCode);
+ return completer.future;
+}
+
+Future<SendPort> _spawnDomHelper(Function f) =>
+ _makeSendPortFuture((portId) { _Utils.spawnDomHelper(f, portId); });
+
+final Future<SendPort> __HELPER_ISOLATE_PORT =
+ _spawnDomHelper(_helperIsolateMain);
+
+// Tricky part.
+// Once __HELPER_ISOLATE_PORT gets resolved, it will still delay in .then
+// and to delay Timer.run is used. However, Timer.run will try to register
+// another Timer and here we got stuck: event cannot be posted as then
+// callback is not executed because it's delayed with timer.
+// Therefore once future is resolved, it's unsafe to call .then on it
+// in Timer code.
+SendPort __SEND_PORT;
+
+_sendToHelperIsolate(msg, SendPort replyTo) {
+ if (__SEND_PORT != null) {
+ __SEND_PORT.send([msg, replyTo]);
+ } else {
+ __HELPER_ISOLATE_PORT.then((port) {
+ __SEND_PORT = port;
+ __SEND_PORT.send([msg, replyTo]);
+ });
+ }
+}
+
+final _TIMER_REGISTRY = new Map<SendPort, Timer>();
+
+const _NEW_TIMER = 'NEW_TIMER';
+const _CANCEL_TIMER = 'CANCEL_TIMER';
+const _TIMER_PING = 'TIMER_PING';
+const _PRINT = 'PRINT';
+
+_helperIsolateMain(originalSendPort) {
+ var port = new ReceivePort();
+ originalSendPort.send(port.sendPort);
+ port.listen((args) {
+ var msg = args.first;
+ var replyTo = args.last;
+ final cmd = msg[0];
+ if (cmd == _NEW_TIMER) {
+ final duration = new Duration(milliseconds: msg[1]);
+ bool periodic = msg[2];
+ ping() { replyTo.send(_TIMER_PING); };
+ _TIMER_REGISTRY[replyTo] = periodic ?
+ new Timer.periodic(duration, (_) { ping(); }) :
+ new Timer(duration, ping);
+ } else if (cmd == _CANCEL_TIMER) {
+ _TIMER_REGISTRY.remove(replyTo).cancel();
+ } else if (cmd == _PRINT) {
+ final message = msg[1];
+ // TODO(antonm): we need somehow identify those isolates.
+ print('[From isolate] $message');
+ }
+ });
+}
+
final _printClosure = (s) => window.console.log(s);
final _pureIsolatePrintClosure = (s) {
- throw new UnimplementedError("Printing from a background isolate "
- "is not supported in the browser");
+ _sendToHelperIsolate([_PRINT, s], null);
};
final _forwardingPrintClosure = _Utils.forwardingPrint;
@@ -946,10 +1022,45 @@
return new _Timer(milliSeconds, callback, repeating);
};
+class _PureIsolateTimer implements Timer {
+ bool _isActive = true;
+ final ReceivePort _port = new ReceivePort();
+ SendPort _sendPort; // Effectively final.
+
+ // static SendPort _SEND_PORT;
+
+ _PureIsolateTimer(int milliSeconds, callback, repeating) {
+ _sendPort = _port.sendPort;
+ _port.listen((msg) {
+ assert(msg == _TIMER_PING);
+ _isActive = repeating;
+ callback(this);
+ if (!repeating) _cancel();
+ });
+
+ _send([_NEW_TIMER, milliSeconds, repeating]);
+ }
+
+ void cancel() {
+ _cancel();
+ _send([_CANCEL_TIMER]);
+ }
+
+ void _cancel() {
+ _isActive = false;
+ _port.close();
+ }
+
+ _send(msg) {
+ _sendToHelperIsolate(msg, _sendPort);
+ }
+
+ bool get isActive => _isActive;
+}
+
get _pureIsolateTimerFactoryClosure =>
((int milliSeconds, void callback(Timer time), bool repeating) =>
- throw new UnimplementedError("Timers on background isolates "
- "are not supported in the browser"));
+ new _PureIsolateTimer(milliSeconds, callback, repeating));
class _ScheduleImmediateHelper {
MutationObserver _observer;
diff --git a/tools/dom/templates/html/impl/impl_EventSource.darttemplate b/tools/dom/templates/html/impl/impl_EventSource.darttemplate
index ed29c88..4b9e7f1 100644
--- a/tools/dom/templates/html/impl/impl_EventSource.darttemplate
+++ b/tools/dom/templates/html/impl/impl_EventSource.darttemplate
@@ -5,11 +5,11 @@
part of $LIBRARYNAME;
$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
- factory $CLASSNAME(String title, {withCredentials: false}) {
+ factory $CLASSNAME(String url, {withCredentials: false}) {
var parsedOptions = {
'withCredentials': withCredentials,
};
- return $CLASSNAME._factory$CLASSNAME(title, parsedOptions);
+ return $CLASSNAME._factory$CLASSNAME(url, parsedOptions);
}
$!MEMBERS
}
diff --git a/tools/dom/templates/html/impl/impl_Window.darttemplate b/tools/dom/templates/html/impl/impl_Window.darttemplate
index 1c88777..81ee2b1 100644
--- a/tools/dom/templates/html/impl/impl_Window.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Window.darttemplate
@@ -220,7 +220,7 @@
* convertPointFromNodeToPage and convertPointFromPageToNode are removed.
* see http://dev.w3.org/csswg/cssom-view/#geometry
*/
- static bool get supportsPointConversions => _DomPoint.supported;
+ static bool get supportsPointConversions => DomPoint.supported;
$!MEMBERS
/**
diff --git a/tools/observatory_tool.py b/tools/observatory_tool.py
index 710cfa5..45fc36a 100755
--- a/tools/observatory_tool.py
+++ b/tools/observatory_tool.py
@@ -44,6 +44,11 @@
os.chdir(directory);
def PubGet(dart_executable, pkg_root):
+ # Always remove pubspec.lock before running 'pub get'.
+ try:
+ os.remove('pubspec.lock');
+ except OSError as e:
+ pass
return subprocess.call(['python',
RUN_PUB,
'--package-root=' + pkg_root,
diff --git a/tools/testing/dart/status_reporter.dart b/tools/testing/dart/status_reporter.dart
index c031cd1..7536e13 100644
--- a/tools/testing/dart/status_reporter.dart
+++ b/tools/testing/dart/status_reporter.dart
@@ -90,14 +90,21 @@
return COMBINATIONS[Platform.operatingSystem];
}
-void ensureBuild(Iterable<String> archs) {
+void ensureBuild(Iterable<String> modes, Iterable<String> archs) {
print('Building many platforms. Please be patient.');
var archString = '-a${archs.join(',')}';
- var args = ['tools/build.py', '-mrelease,debug', archString, 'create_sdk',
+ var modeString = '-m${modes.join(',')}';
+
+ var args = [
+ 'tools/build.py',
+ modeString,
+ archString,
+ 'create_sdk',
// We build runtime to be able to list cc tests
- 'runtime'];
+ 'runtime'
+ ];
print('Running: python ${args.join(" ")}');
@@ -134,17 +141,33 @@
void main(List<String> args) {
var combinations = getCombinations();
- var arches = combinations.fold(new Set<String>(), (set, value) {
- set.addAll(value['archs']);
- return set;
- });
+ var arches = new Set<String>();
+ var modes = new Set<String>();
- ensureBuild(arches);
+ if (args.contains('--simple')) {
+ arches = ['ia32'].toSet();
+ modes = ['release'].toSet();
+ } else {
+ for (var combo in combinations) {
+ arches.addAll(combo['archs']);
+ modes.addAll(combo['modes']);
+ }
+ }
+
+ ensureBuild(modes, arches);
List<String> keys;
for (var combination in combinations) {
for (var mode in combination['modes']) {
+ if (!modes.contains(mode)) {
+ continue;
+ }
+
for (var arch in combination['archs']) {
+ if (!arches.contains(arch)) {
+ continue;
+ }
+
for (var runtime in combination['runtimes']) {
var compiler = combination['compiler'];
diff --git a/tools/testing/dart/test_configurations.dart b/tools/testing/dart/test_configurations.dart
index c49bfca..135226e 100644
--- a/tools/testing/dart/test_configurations.dart
+++ b/tools/testing/dart/test_configurations.dart
@@ -27,6 +27,7 @@
*/
final TEST_SUITE_DIRECTORIES = [
new Path('pkg'),
+ new Path('third_party/pkg_tested'),
new Path('runtime/tests/vm'),
new Path('runtime/observatory'),
new Path('samples'),
diff --git a/tools/testing/dart/test_options.dart b/tools/testing/dart/test_options.dart
index 8c929f9..4dddd24 100644
--- a/tools/testing/dart/test_options.dart
+++ b/tools/testing/dart/test_options.dart
@@ -14,7 +14,8 @@
const List<String> defaultTestSelectors =
const ['samples', 'standalone', 'corelib', 'co19', 'language',
'isolate', 'vm', 'html', 'benchmark_smoke',
- 'utils', 'lib', 'pkg', 'analyze_library', 'vmservice'];
+ 'utils', 'lib', 'pkg', 'analyze_library', 'vmservice',
+ 'pkg_tested'];
/**
* Specification of a single test option.
diff --git a/tools/testing/dart/utils.dart b/tools/testing/dart/utils.dart
index a1c4ecc..d000994 100644
--- a/tools/testing/dart/utils.dart
+++ b/tools/testing/dart/utils.dart
@@ -270,7 +270,7 @@
}
bool deepJsonCompare(Object a, Object b) {
- if (a == null || a is num || a is String) {
+ if (a == null || a is num || a is String || a is Uri) {
return a == b;
} else if (a is List) {
if (b is List) {
diff --git a/utils/dartfmt/dartfmt.gyp b/utils/dartfmt/dartfmt.gyp
index a5e6c25..2615f85 100644
--- a/utils/dartfmt/dartfmt.gyp
+++ b/utils/dartfmt/dartfmt.gyp
@@ -18,7 +18,7 @@
'<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)dart<(EXECUTABLE_SUFFIX)',
'../../sdk/lib/_internal/libraries.dart',
'<(SHARED_INTERMEDIATE_DIR)/packages.stamp',
- '<!@(["python", "../../tools/list_files.py", "\\.dart$", "../../pkg/analyzer"])',
+ '<!@(["python", "../../tools/list_files.py", "\\.dart$", "../../third_party/pkg_tested/dart_style"])',
],
'outputs': [
'<(SHARED_INTERMEDIATE_DIR)/dartfmt.dart.snapshot',
@@ -27,7 +27,7 @@
'<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)dart<(EXECUTABLE_SUFFIX)',
'--snapshot=<(SHARED_INTERMEDIATE_DIR)/dartfmt.dart.snapshot',
'--package-root=<(PRODUCT_DIR)/packages/',
- '../../pkg/analyzer/bin/formatter.dart',
+ '../../third_party/pkg_tested/dart_style/bin/format.dart',
],
},
],